diff --git a/._Copyright b/._Copyright new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/._Copyright differ diff --git a/._INSTALL b/._INSTALL new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/._INSTALL differ diff --git a/._README b/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/._README differ diff --git a/._build.com b/._build.com new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/._build.com differ diff --git a/Copyright b/Copyright new file mode 100644 index 0000000..03c23f3 --- /dev/null +++ b/Copyright @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 1990-2020 Elwood Charles Downey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/GUI/xephem/._Makefile b/GUI/xephem/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._Makefile differ diff --git a/GUI/xephem/._XEphem.png b/GUI/xephem/._XEphem.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._XEphem.png differ diff --git a/GUI/xephem/._aavso.c b/GUI/xephem/._aavso.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._aavso.c differ diff --git a/GUI/xephem/._annotmenu.c b/GUI/xephem/._annotmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._annotmenu.c differ diff --git a/GUI/xephem/._broadcast.c b/GUI/xephem/._broadcast.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._broadcast.c differ diff --git a/GUI/xephem/._calmenu.c b/GUI/xephem/._calmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._calmenu.c differ diff --git a/GUI/xephem/._closemenu.c b/GUI/xephem/._closemenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._closemenu.c differ diff --git a/GUI/xephem/._compiler.c b/GUI/xephem/._compiler.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._compiler.c differ diff --git a/GUI/xephem/._coordsmenu.c b/GUI/xephem/._coordsmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._coordsmenu.c differ diff --git a/GUI/xephem/._datamenu.c b/GUI/xephem/._datamenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._datamenu.c differ diff --git a/GUI/xephem/._db.c b/GUI/xephem/._db.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._db.c differ diff --git a/GUI/xephem/._db.h b/GUI/xephem/._db.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._db.h differ diff --git a/GUI/xephem/._dbmenu.c b/GUI/xephem/._dbmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._dbmenu.c differ diff --git a/GUI/xephem/._descrip.mms b/GUI/xephem/._descrip.mms new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._descrip.mms differ diff --git a/GUI/xephem/._dm.h b/GUI/xephem/._dm.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._dm.h differ diff --git a/GUI/xephem/._earthmap.c b/GUI/xephem/._earthmap.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._earthmap.c differ diff --git a/GUI/xephem/._earthmenu.c b/GUI/xephem/._earthmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._earthmenu.c differ diff --git a/GUI/xephem/._fallbacks.c b/GUI/xephem/._fallbacks.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._fallbacks.c differ diff --git a/GUI/xephem/._favmenu.c b/GUI/xephem/._favmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._favmenu.c differ diff --git a/GUI/xephem/._formats.c b/GUI/xephem/._formats.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._formats.c differ diff --git a/GUI/xephem/._fsmenu.c b/GUI/xephem/._fsmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._fsmenu.c differ diff --git a/GUI/xephem/._gallerymenu.c b/GUI/xephem/._gallerymenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._gallerymenu.c differ diff --git a/GUI/xephem/._glance.c b/GUI/xephem/._glance.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._glance.c differ diff --git a/GUI/xephem/._gsc.c b/GUI/xephem/._gsc.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._gsc.c differ diff --git a/GUI/xephem/._gscnet.c b/GUI/xephem/._gscnet.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._gscnet.c differ diff --git a/GUI/xephem/._helpmenu.c b/GUI/xephem/._helpmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._helpmenu.c differ diff --git a/GUI/xephem/._homeio.c b/GUI/xephem/._homeio.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._homeio.c differ diff --git a/GUI/xephem/._hznmenu.c b/GUI/xephem/._hznmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._hznmenu.c differ diff --git a/GUI/xephem/._imregmenu.c b/GUI/xephem/._imregmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._imregmenu.c differ diff --git a/GUI/xephem/._indiapi.h b/GUI/xephem/._indiapi.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._indiapi.h differ diff --git a/GUI/xephem/._indimenu.c b/GUI/xephem/._indimenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._indimenu.c differ diff --git a/GUI/xephem/._jpeg2pm.c b/GUI/xephem/._jpeg2pm.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._jpeg2pm.c differ diff --git a/GUI/xephem/._jupmenu.c b/GUI/xephem/._jupmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._jupmenu.c differ diff --git a/GUI/xephem/._listmenu.c b/GUI/xephem/._listmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._listmenu.c differ diff --git a/GUI/xephem/._mainmenu.c b/GUI/xephem/._mainmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._mainmenu.c differ diff --git a/GUI/xephem/._map.h b/GUI/xephem/._map.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._map.h differ diff --git a/GUI/xephem/._marsmenu.c b/GUI/xephem/._marsmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._marsmenu.c differ diff --git a/GUI/xephem/._marsmmenu.c b/GUI/xephem/._marsmmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._marsmmenu.c differ diff --git a/GUI/xephem/._moonmenu.c b/GUI/xephem/._moonmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._moonmenu.c differ diff --git a/GUI/xephem/._moviemenu.c b/GUI/xephem/._moviemenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._moviemenu.c differ diff --git a/GUI/xephem/._msgmenu.c b/GUI/xephem/._msgmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._msgmenu.c differ diff --git a/GUI/xephem/._net.h b/GUI/xephem/._net.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._net.h differ diff --git a/GUI/xephem/._netmenu.c b/GUI/xephem/._netmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._netmenu.c differ diff --git a/GUI/xephem/._objmenu.c b/GUI/xephem/._objmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._objmenu.c differ diff --git a/GUI/xephem/._obslog.c b/GUI/xephem/._obslog.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._obslog.c differ diff --git a/GUI/xephem/._options.opt b/GUI/xephem/._options.opt new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._options.opt differ diff --git a/GUI/xephem/._patchlevel.c b/GUI/xephem/._patchlevel.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._patchlevel.c differ diff --git a/GUI/xephem/._patchlevel.h b/GUI/xephem/._patchlevel.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._patchlevel.h differ diff --git a/GUI/xephem/._plot.h b/GUI/xephem/._plot.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._plot.h differ diff --git a/GUI/xephem/._plot_aux.c b/GUI/xephem/._plot_aux.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._plot_aux.c differ diff --git a/GUI/xephem/._plotmenu.c b/GUI/xephem/._plotmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._plotmenu.c differ diff --git a/GUI/xephem/._preferences.c b/GUI/xephem/._preferences.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._preferences.c differ diff --git a/GUI/xephem/._progress.c b/GUI/xephem/._progress.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._progress.c differ diff --git a/GUI/xephem/._ps.c b/GUI/xephem/._ps.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._ps.c differ diff --git a/GUI/xephem/._ps.h b/GUI/xephem/._ps.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._ps.h differ diff --git a/GUI/xephem/._query.c b/GUI/xephem/._query.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._query.c differ diff --git a/GUI/xephem/._rotated.c b/GUI/xephem/._rotated.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._rotated.c differ diff --git a/GUI/xephem/._rotated.h b/GUI/xephem/._rotated.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._rotated.h differ diff --git a/GUI/xephem/._satmenu.c b/GUI/xephem/._satmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._satmenu.c differ diff --git a/GUI/xephem/._saveres.c b/GUI/xephem/._saveres.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._saveres.c differ diff --git a/GUI/xephem/._scope.c b/GUI/xephem/._scope.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._scope.c differ diff --git a/GUI/xephem/._sites.c b/GUI/xephem/._sites.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._sites.c differ diff --git a/GUI/xephem/._sites.h b/GUI/xephem/._sites.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._sites.h differ diff --git a/GUI/xephem/._skybinary.c b/GUI/xephem/._skybinary.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skybinary.c differ diff --git a/GUI/xephem/._skyeyep.c b/GUI/xephem/._skyeyep.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyeyep.c differ diff --git a/GUI/xephem/._skyeyep.h b/GUI/xephem/._skyeyep.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyeyep.h differ diff --git a/GUI/xephem/._skyfifos.c b/GUI/xephem/._skyfifos.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyfifos.c differ diff --git a/GUI/xephem/._skyfiltmenu.c b/GUI/xephem/._skyfiltmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyfiltmenu.c differ diff --git a/GUI/xephem/._skyfits.c b/GUI/xephem/._skyfits.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyfits.c differ diff --git a/GUI/xephem/._skyhist.c b/GUI/xephem/._skyhist.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyhist.c differ diff --git a/GUI/xephem/._skyhist.h b/GUI/xephem/._skyhist.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyhist.h differ diff --git a/GUI/xephem/._skyip.c b/GUI/xephem/._skyip.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyip.c differ diff --git a/GUI/xephem/._skyip.h b/GUI/xephem/._skyip.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyip.h differ diff --git a/GUI/xephem/._skylist.c b/GUI/xephem/._skylist.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skylist.c differ diff --git a/GUI/xephem/._skylist.h b/GUI/xephem/._skylist.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skylist.h differ diff --git a/GUI/xephem/._skytoolbar.c b/GUI/xephem/._skytoolbar.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skytoolbar.c differ diff --git a/GUI/xephem/._skytoolbar.h b/GUI/xephem/._skytoolbar.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skytoolbar.h differ diff --git a/GUI/xephem/._skyviewmenu.c b/GUI/xephem/._skyviewmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._skyviewmenu.c differ diff --git a/GUI/xephem/._solsysmenu.c b/GUI/xephem/._solsysmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._solsysmenu.c differ diff --git a/GUI/xephem/._splash.c b/GUI/xephem/._splash.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._splash.c differ diff --git a/GUI/xephem/._srchmenu.c b/GUI/xephem/._srchmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._srchmenu.c differ diff --git a/GUI/xephem/._sunmenu.c b/GUI/xephem/._sunmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._sunmenu.c differ diff --git a/GUI/xephem/._time.c b/GUI/xephem/._time.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._time.c differ diff --git a/GUI/xephem/._tips.c b/GUI/xephem/._tips.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._tips.c differ diff --git a/GUI/xephem/._trailmenu.c b/GUI/xephem/._trailmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._trailmenu.c differ diff --git a/GUI/xephem/._trails.h b/GUI/xephem/._trails.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._trails.h differ diff --git a/GUI/xephem/._ucac.c b/GUI/xephem/._ucac.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._ucac.c differ diff --git a/GUI/xephem/._uranusmenu.c b/GUI/xephem/._uranusmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._uranusmenu.c differ diff --git a/GUI/xephem/._usno.c b/GUI/xephem/._usno.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._usno.c differ diff --git a/GUI/xephem/._versionmenu.c b/GUI/xephem/._versionmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._versionmenu.c differ diff --git a/GUI/xephem/._webdbmenu.c b/GUI/xephem/._webdbmenu.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._webdbmenu.c differ diff --git a/GUI/xephem/._xe2.c b/GUI/xephem/._xe2.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._xe2.c differ diff --git a/GUI/xephem/._xe3.c b/GUI/xephem/._xe3.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._xe3.c differ diff --git a/GUI/xephem/._xephem.c b/GUI/xephem/._xephem.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._xephem.c differ diff --git a/GUI/xephem/._xephem.h b/GUI/xephem/._xephem.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._xephem.h differ diff --git a/GUI/xephem/._xephem.man b/GUI/xephem/._xephem.man new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._xephem.man differ diff --git a/GUI/xephem/._xmisc.c b/GUI/xephem/._xmisc.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/._xmisc.c differ diff --git a/GUI/xephem/Makefile b/GUI/xephem/Makefile new file mode 100644 index 0000000..6fa4405 --- /dev/null +++ b/GUI/xephem/Makefile @@ -0,0 +1,212 @@ +# Sample Makefile for xephem v3.7 + +# Sample compile and link flags for a few systems. Find your system or similar +# and uncomment as required. The default is for linux or Mac OS X systems. +# The only real challenge usually is to set the MOTIFI and MOTIFL macros. +# Note that some Motif libraries use the printing frame buffer and so need -lXp. + +# The basic idea to build XEphem is to first go compile the libraries in +# ../../lib* then come back here and compile and link all the *.c files into +# one executable, xephem. + +# These -I and -L flags point to the supporting XEphem libraries +LIBINC = -I../../libastro -I../../libip -I../../liblilxml -I../../libjpegd -I../../libpng -I../../libz +LIBLNK = -L../../libastro -L../../libip -L../../liblilxml -L../../libjpegd -L../../libpng -L../../libz +LIBLIB = -lastro -lip -llilxml -ljpegd -lpng -lz + +# MOTIFI is the directory containing the Xm directory of include files. +# MOTIFL is the directory containing the libXm.a library. +# MOTIF can be used to set one common directory if appropriate. +# On 64 bit systems, try MOTIFI = /usr/include and MOTIFL = /usr/lib64 +ifdef MOTIF +MOTIFI = $(MOTIF) +MOTIFL = $(MOTIF) +endif +ifndef MOTIFI +MOTIFI = /usr/include +endif +ifndef MOTIFL +MOTIFL = /usr/lib +endif + +# for linux and Apple OS X +CC = gcc +CLDFLAGS = -g +CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -I$(MOTIFI) -I/opt/X11/include +LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L/opt/X11/lib +XLIBS = -lXm -lXp -lXt -lXext -lXmu -lX11 +LIBS = $(XLIBS) $(LIBLIB) -lm + +# static linking on Apple using X11 libs from ports +# CC = gcc +# OLI = /opt/local/include +# OLL = /opt/local/lib +# CLDFLAGS = -g +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -I$(MOTIFI) -I$(OLI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L$(OLL) +# XLIBS = -lXm $(OLL)/libXp.a $(OLL)/libXt.a $(OLL)/libSM.a $(OLL)/libICE.a $(OLL)/libXext.a $(OLL)/libXmu.a $(OLL)/libX11.a $(OLL)/libxcb.a $(OLL)/libXau.a $(OLL)/libXdmcp.a +# LIBS = $(XLIBS) $(LIBLIB) -lm + +# for ppc Apple OS X to make universal (i386 and ppc binary), requires +# Xcode 2.2, /Developers/SDK/MacOSX10.4u.sdk and all libs, including libXm, +# built similarly +# CLDFLAGS = -arch i386 -arch ppc +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -isysroot /Developer/SDKs/MacOSX10.4u.sdk -I$(MOTIFI) -I/usr/X11R6/include +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -L$(MOTIFL) -L/usr/X11R6/lib + +# MKS Enterprise toolkit +# MOTIFI = -I/usr/include +# MOTIFL = -L/usr/lib +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O -I$(MOTIFI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -W/subsystem:windows -s +# XLIBS = -lXm -lXt -lX11 +# LIBS = $(XLIBS) $(LIBLIB) -lm + +# SVR4 derivatives: +# MOTIFI = -I/usr/include +# MOTIFL = -L/usr/lib +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O -I$(MOTIFI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) +# XLIBS = -lXm -lXt -lX11 +# LIBS = $(XLIBS) $(LIBLIB) -lsocket -lnsl -lc -lm /usr/ucblib/libucb.a +# Note: if you get regex undefined, add -lgen to the end of LIBS. + +# Solaris: +# Motif stuff might also be in /usr/dt/share/{include,lib}. +# be sure /opt/SUNWspro/bin and /usr/ccs/bin are in your PATH ahead of /usr/ucb. +# MOTIFI = -I/usr/dt/include +# MOTIFL = -L/usr/dt/lib -R/usr/dt/lib +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O -I$(MOTIFI) -I/usr/openwin/include +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L/usr/openwin/lib +# XLIBS = -lXm -lXt -lX11 +# LIBS = $(XLIBS) $(LIBLIB) -lm -lsocket -lnsl + +# HP-UX +# MOTIFI = -I/usr/include +# MOTIFL = -L/usr/lib +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -Aa -fast -I$(MOTIFI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) + +# AIX +# MOTIFI = -I/usr/include +# MOTIFL = -L/usr/lib +# CC = xlc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 -I$(MOTIFI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) + +.PRECIOUS: xephem + +INCS = db.h dm.h indiapi.h map.h net.h patchlevel.h plot.h ps.h \ + rotated.h sites.h skyeyep.h skyhist.h skyip.h skylist.h skytoolbar.h \ + trails.h xephem.h + +OBJS = \ + aavso.o \ + annotmenu.o \ + broadcast.o \ + calmenu.o \ + closemenu.o \ + compiler.o \ + coordsmenu.o \ + datamenu.o \ + db.o \ + dbmenu.o \ + earthmap.o \ + earthmenu.o \ + fallbacks.o \ + favmenu.o \ + formats.o \ + fsmenu.o \ + gallerymenu.o \ + glance.o \ + gsc.o \ + gscnet.o \ + helpmenu.o \ + homeio.o \ + hznmenu.o \ + indimenu.o \ + imregmenu.o \ + jpeg2pm.o \ + jupmenu.o \ + listmenu.o \ + mainmenu.o \ + marsmenu.o \ + marsmmenu.o \ + moonmenu.o \ + moviemenu.o \ + msgmenu.o \ + netmenu.o \ + objmenu.o \ + obslog.o \ + patchlevel.o \ + plot_aux.o \ + plotmenu.o \ + preferences.o \ + progress.o \ + ps.o \ + query.o \ + rotated.o \ + satmenu.o \ + saveres.o \ + scope.o \ + sites.o \ + skybinary.o \ + skyeyep.o \ + skyfifos.o \ + skyfiltmenu.o \ + skyfits.o \ + skyhist.o \ + skyip.o \ + skylist.o \ + skytoolbar.o \ + skyviewmenu.o \ + solsysmenu.o \ + splash.o \ + srchmenu.o \ + sunmenu.o \ + time.o \ + tips.o \ + trailmenu.o \ + uranusmenu.o \ + ucac.o \ + usno.o \ + versionmenu.o \ + webdbmenu.o \ + xe2.o \ + xe3.o \ + xephem.o \ + xmisc.o + +all: libs xephem xephem.1 + +xephem: $(INCS) $(OBJS) + $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + +xephem.1: xephem.man + nroff -man $? > $@ + +libs: + cd ../../libastro; make + cd ../../libip; make + cd ../../libjpegd; make + cd ../../liblilxml; make + cd ../../libpng; make + cd ../../libz; make + +clean: + rm -fr *.o ../../lib*/*.[ao] + +clobber: clean + rm -fr xephem xephem.1 + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2015/08/09 21:36:36 $ $Revision: 1.54 $ $Name: $ diff --git a/GUI/xephem/XEphem.png b/GUI/xephem/XEphem.png new file mode 100644 index 0000000..4ed3478 Binary files /dev/null and b/GUI/xephem/XEphem.png differ diff --git a/GUI/xephem/aavso.c b/GUI/xephem/aavso.c new file mode 100644 index 0000000..0b74e47 --- /dev/null +++ b/GUI/xephem/aavso.c @@ -0,0 +1,851 @@ +/* support for AAVSO. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define LISTROWS 7 /* rows in list */ +#define DESCOLS 10 /* columns in avdb for designation */ +#define NAMCOLS 20 /* longest selection name */ +#define TFCOL 12 /* columns in text fields */ +#define AVEPOCH 1900 /* epoch of entries in avdb */ +static char avdb[] = "starcensus.txt"; /* AAVSO star list */ +static char avhost[] = "www.aavso.org"; /* host */ +static char avcgi[] = "/cgi-bin/kstar.pl"; /* aavso's cgi-bin script */ +static char default_str[] = "default"; /* knows to use nice interval */ +static char latest_str[] = "latest"; /* knows to use latest */ + +static void av_create (void); +static void av_help_cb (Widget w, XtPointer client, XtPointer call); +static void av_close_cb (Widget w, XtPointer client, XtPointer call); +static void av_print_cb (Widget w, XtPointer client, XtPointer call); +static void av_list_cb (Widget w, XtPointer client, XtPointer call); +static void av_go_cb (Widget w, XtPointer client, XtPointer call); +static void av_name_cb (Widget w, XtPointer client, XtPointer call); +static void mkPrompt (Widget parent, char *prompt, Widget *text_wp, char *name); +static void mkTop (Widget rc_w); +static FILE * openDB (void); +static int fetchpm (void); +static void cleanLine (char *line); +static void fetchAndShow (void); +static void av_print (void); + +static Widget av_w; /* main shell */ +static Widget avgrl_w; /* Label for displaying graph */ +static Widget avlist_w; /* List for displaying closest choices */ +static Widget avname_w; /* TF for AAVSO star name */ +static Widget avdes_w; /* TF for AAVSO star designation */ +static Widget avjd1_w; /* TF for starting time */ +static Widget avjd2_w; /* TF for ending time */ +static Widget avfit_w; /* TF for running average period, days */ +static Pixmap curve_pm; /* the aavso light curve pixmap */ + +/* AAVSO binary query options */ +typedef struct { + char *name; /* TB name */ + char *desc; /* description */ + char *tstr; /* true URL string */ + char *fstr; /* false URL string */ + Widget w; /* controlling TB */ +} ABOpt; +/* N.B.: must be in order required by URL */ +static ABOpt abopts[] = { + { "FainterThan", "Fainter-than data", "yes", "no"}, + { "CCDV", "CCDV data", "yes", "no"}, + { "CCDI", "CCDI data", "yes", "no"}, + { "CCDR", "CCDR data", "yes", "no"}, + { "CCDB", "CCDB data", "yes", "no"}, + { "Visual", "Visual data", "yes", "no"}, + { "Discrepant", "Discrepant data", "yes", "no"}, +}; + +static char aavsocategory[] = "AAVSO"; /* Save category */ + +/* create and bring up the AAVSO dialog */ +void +av_manage () +{ + if (!av_w) + av_create(); + + XtPopup (av_w, XtGrabNone); + set_something (av_w, XmNiconic, (XtArgVal)False); +} + +/* find the closest LISTROWS stars to op in AAVSO database and load dialog */ +void +av_load (op) +Obj *op; +{ + typedef struct { + char line[DESCOLS+NAMCOLS]; /* designation in avdb file */ + double csep; /* cos sep from op */ + } DBSort; + Now *np = mm_get_now(); + double ra0, dec0; + double cdec0, sdec0; + double mjd0; + double mjd1; + DBSort dbs[LISTROWS]; + int ndbs; + char line[DESCOLS+NAMCOLS]; + FILE *fp; + int i; + + /* courtesy display */ + av_manage(); + + /* open */ + fp = openDB(); + if (!fp) + return; + + watch_cursor(1); + + /* precess op's loc to AVEPOCH */ + ra0 = op->s_ra; + dec0 = op->s_dec; + mjd0 = epoch == EOD ? mjd : epoch; + cal_mjd (1, 1.0, AVEPOCH, &mjd1); + precess (mjd0, mjd1, &ra0, &dec0); + cdec0 = cos(dec0); + sdec0 = sin(dec0); + + /* search for closest and collect in dbs[] in ascending order. + * an exact match name always sorts highest. + */ + ndbs = 0; + while (fgets (line, sizeof(line), fp)) { + int rah, ram, decd; + double csep; + char dsign; + int match; + char *namend; + + if (sscanf (line, "%2d%2d%c%2d", &rah, &ram, &dsign, &decd) != 4) + continue; + for (namend = line+strlen(line)-1; namend > line+10; namend--) + if (!strchr (" \r\n", *namend)) + break; + namend[1] = '\0'; + match = !strcmp (op->o_name, line+10); + if (match) { + csep = 1.0; + } else { + double ra1 = hrrad(rah + ram/60.); + double dec1 = degrad(decd) * (dsign == '-' ? -1 : 1); + solve_sphere (ra0-ra1, PI/2-dec1, sdec0, cdec0, &csep, NULL); + } + if (ndbs == 0 || csep > dbs[ndbs-1].csep) { + /* bubble into dbs[], best at [0] */ + for (i = ndbs; i > 0 && csep > dbs[i-1].csep; --i) + if (i < LISTROWS) + dbs[i] = dbs[i-1]; + cleanLine (line); + strcpy (dbs[i].line, line); + dbs[i].csep = csep; + if (ndbs < LISTROWS) + ndbs++; + } + } + + fclose (fp); + + /* put into avlist_w */ + XmListDeleteAllItems (avlist_w); + for (i = 0; i < LISTROWS; i++) { + XmString xmstr = XmStringCreateSimple (dbs[i].line); + XmListAddItem (avlist_w, xmstr, 0); /* append */ + XmStringFree (xmstr); + } + + /* also put best into selections */ + XmTextFieldSetString (avname_w, &dbs[0].line[DESCOLS]); + strcpy (line, dbs[0].line); + line[DESCOLS] = '\0'; + XmTextFieldSetString (avdes_w, line); + + watch_cursor(0); +} + +/* open the census file. + * return a FILE * else NULL. + */ +static FILE * +openDB() +{ + char fn[1024]; + FILE *fp; + + /* open */ + (void) sprintf (fn, "%s/auxil/%s", getShareDir(), avdb); + fp = fopen (fn, "r"); + if (!fp) + xe_msg (1, "%s:\n%s\n", fn, syserrstr()); + return (fp); +} + +/* called to put up or remove the watch cursor. */ +void +av_cursor (c) +Cursor c; +{ + Window win; + + if (av_w && (win = XtWindow(av_w)) != 0) { + Display *dsp = XtDisplay(av_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the AAVSO shell */ +static void +av_create() +{ + Widget rc_w; + Widget fr_w, f_w, w; + Arg args[20]; + int n; + + /* create shell */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem AAVSO"); n++; + XtSetArg (args[n], XmNiconName, "AAVSO"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + av_w = XtCreatePopupShell ("AAVSO", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (av_w); + set_something (av_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (av_w, "XEphem*AAVSO.x", aavsocategory, 0); + sr_reg (av_w, "XEphem*AAVSO.y", aavsocategory, 0); + + /* pile things up in a RC */ + n = 0; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + rc_w = XmCreateRowColumn (av_w, "AAVSORC", args, n); + XtAddCallback (rc_w, XmNhelpCallback, av_help_cb, 0); + XtManageChild (rc_w); + + /* credit heading */ + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreateLabel (rc_w, "MsgL", args, n); + set_xmstring (w, XmNlabelString, "Courtesy http://www.aavso.org"); + XtManageChild (w); + + /* create top section */ + mkTop (rc_w); + + /* graph goes in a label in a frame */ + n = 0; + fr_w = XmCreateFrame (rc_w, "Fr", args, n); + XtManageChild (fr_w); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + avgrl_w = XmCreateLabel (fr_w, "Graph", args, n); + set_xmstring (avgrl_w, XmNlabelString, " "); + XtManageChild (avgrl_w); + + /* bottom controls */ + n = 0; + f_w = XmCreateForm (rc_w, "F", args, n); + XtManageChild (f_w); + + /* go */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 24); n++; + w = XmCreatePushButton (f_w, "Go", args, n); + set_xmstring (w, XmNlabelString, "Get Curve"); + XtAddCallback (w, XmNactivateCallback, av_go_cb, 0); + wtip (w, "Fetch light curve from AAVSO for Name."); + XtManageChild (w); + + /* print */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 28); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 48); n++; + w = XmCreatePushButton (f_w, "Pr", args, n); + set_xmstring (w, XmNlabelString, "Print"); + XtAddCallback (w, XmNactivateCallback, av_print_cb, 0); + wtip (w, "Print light curve."); + XtManageChild (w); + + /* close */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 52); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 72); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, av_close_cb, 0); + wtip (w, "Close this dialog."); + XtManageChild (w); + + /* help */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 76); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 96); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + wtip (w, "Obtain more information about this dialog."); + XtAddCallback (w, XmNactivateCallback, av_help_cb, 0); + XtManageChild (w); +} + +/* construct the top section */ +static void +mkTop (rc_w) +Widget rc_w; +{ + Widget lrc_w, rrc_w, orc_w; + Widget f_w, w; + Arg args[20]; + int i, n; + + /* 2 vertical RCs placed adjacent in a form */ + n = 0; + f_w = XmCreateForm (rc_w, "F", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 49); n++; + lrc_w = XmCreateRowColumn (f_w, "LRC", args, n); + XtManageChild (lrc_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 51); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + rrc_w = XmCreateRowColumn (f_w, "RRC", args, n); + XtManageChild (rrc_w); + + /* stuff in left column */ + + /* title to balance with right side */ + n = 0; + w = XmCreateLabel (lrc_w, "LL", args, n); + set_xmstring (w, XmNlabelString, "Setup:"); + XtManageChild (w); + + /* designation */ + mkPrompt (lrc_w, "Designation:", &avdes_w, "Designation"); + wtip (avdes_w, "Enter AAVSO designation, e.g., 0214-03"); + XtAddCallback (avdes_w, XmNactivateCallback, av_go_cb, NULL); + + /* name */ + mkPrompt (lrc_w, "Name:", &avname_w, "Name"); + wtip (avname_w, "Look up AAVSO name, e.g., OMI CET"); + XtAddCallback (avname_w, XmNactivateCallback, av_name_cb, NULL); + + /* date range */ + mkPrompt (lrc_w, "Start JD or Date:", &avjd1_w, "StartDate"); + wtip (avjd1_w, "Enter starting JD, or Date, or \"default\""); + XtAddCallback (avjd1_w, XmNactivateCallback, av_go_cb, NULL); + mkPrompt (lrc_w, "End JD or Date:", &avjd2_w, "EndDate"); + wtip (avjd2_w, "Enter ending JD, or Date, or \"latest\""); + XtAddCallback (avjd2_w, XmNactivateCallback, av_go_cb, NULL); + + /* running average */ + mkPrompt (lrc_w, "Smooth fit, days:", &avfit_w, "SmoothDays"); + wtip (avfit_w, "Running average period, or 0 to disable"); + + /* stuff in right column */ + + n = 0; + w = XmCreateLabel (rrc_w, "L", args, n); + XtManageChild (w); + set_xmstring (w, XmNlabelString, "AAVSO Stars near last Sky View pick:"); + + n = 0; + XtSetArg (args[n], XmNvisibleItemCount, LISTROWS); n++; + XtSetArg (args[n], XmNselectionPolicy, XmSINGLE_SELECT); n++; + avlist_w = XmCreateList (rrc_w, "List", args, n); + XtAddCallback (avlist_w, XmNsingleSelectionCallback, av_list_cb, NULL); + XtAddCallback (avlist_w, XmNdefaultActionCallback, av_list_cb, NULL); + wtip (avlist_w, "Stars nearest to last Sky View AAVSO pick"); + XtManageChild(avlist_w); + + /* binary options in RC below */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (rc_w, "AOL", args, n); + set_xmstring (w, XmNlabelString, "Plot:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + XtSetArg (args[n], XmNnumColumns, 4); n++; + orc_w = XmCreateRowColumn (rc_w, "Plot", args, n); + XtManageChild (orc_w); + + for (i = 0; i < XtNumber(abopts); i++) { + ABOpt *ap = &abopts[i]; + + n = 0; + w = XmCreateToggleButton (orc_w, ap->name, args, n); + set_xmstring (w, XmNlabelString, ap->desc); + XtManageChild (w); + sr_reg (w, NULL, aavsocategory, 1); + ap->w = w; + } +} + +/* callback from the Close PB */ +/* ARGSUSED */ +static void +av_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (av_w); +} + +/* callback from the Print PB */ +/* ARGSUSED */ +static void +av_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (curve_pm) + XPSAsk ("AAVSO", av_print); + else + xe_msg (1, "No light curve to print"); +} + +/* generate a postscript file containing the curve_pm. + * call XPSClose() when finished. + */ +static void +av_print() +{ + Display *dsp = XtDisplay(toplevel_w); + unsigned int wid, hei, b, d; + Window rootwin; + int pw; + int x, y; + + watch_cursor (1); + + XGetGeometry (dsp, curve_pm, &rootwin, &x, &y, &wid, &hei, &b, &d); + pw = (int)(72*6.5*wid/hei+.5); /* width on paper when 6.5 hi */ + + XPSXBegin (curve_pm, 0, 0, wid, hei, (int)((8.5*72-pw)/2), 10*72, pw); + XPSPixmap (curve_pm, wid, hei, xe_cm, 0, 1); + XPSXEnd(); + XPSClose(); + + watch_cursor (0); +} + +/* callback for Help + */ +/* ARGSUSED */ +static void +av_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Fetch and display light curves from AAVSO." +}; + + hlp_dialog ("AAVSO", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback when an item is selected in the list + */ +/* ARGSUSED */ +static void +av_list_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListCallbackStruct *lp = (XmListCallbackStruct *)call; + char *str; + + /* load into selection */ + XmStringGetLtoR (lp->item, XmSTRING_DEFAULT_CHARSET, &str); + XmTextFieldSetString (avname_w, str+DESCOLS); + str[DESCOLS] = '\0'; + XmTextFieldSetString (avdes_w, str); + XtFree (str); + + /* if double-click proceed with fetch */ + if (lp->reason == XmCR_DEFAULT_ACTION) + fetchAndShow(); +} + +/* callback from the Go PB or all TF except Name. + */ +/* ARGSUSED */ +static void +av_go_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + fetchAndShow(); +} + +/* callback from the Name TF. + * lookup Name and fill in Designation. + * then Go. + */ +/* ARGSUSED */ +static void +av_name_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + String name; + char buf[1024]; + char nameuc[64]; + char c, *np, *ucp; + FILE *fp; + + /* open right off -- else no point going further */ + fp = openDB(); + if (!fp) + return; + + /* copy name to nameuc, skipping blanks and promoting to upper case */ + name = XmTextFieldGetString (avname_w); + for (ucp = nameuc, np = name; (c = *np) != '\0'; np++) { + if (ucp == nameuc && isspace(c)) + continue; + if (islower(c)) + c = toupper(c); + *ucp++ = c; + } + *ucp = '\0'; + while ((c = *--ucp) == ' ') + *ucp = '\0'; + XtFree (name); + + /* search db */ + while (fgets (buf, sizeof(buf), fp)) { + np = &buf[strlen(buf)-1]; + while (np >= buf && ((c = *np) == '\r' || c == '\n' || c == ' ')) + *np-- = '\0'; + if (strcmp (buf+DESCOLS, nameuc) == 0) { + buf[DESCOLS] = '\0'; + XmTextFieldSetString (avdes_w, buf); + fetchAndShow(); + fclose(fp); + return; + } + } + fclose(fp); + + xe_msg (1, "Can not find '%s' in %s", nameuc, avdb); +} + +/* create a prompt/text field pair */ +static void +mkPrompt (parent, prompt, text_wp, txtname) +Widget parent; +char *prompt; +Widget *text_wp; +char *txtname; +{ + Widget l_w, t_w, f_w; + Arg args[20]; + int n; + + /* form */ + n = 0; + f_w = XmCreateForm (parent, "PF", args, n); + XtManageChild (f_w); + + /* prompt label */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 48); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + l_w = XmCreateLabel (f_w, "PL", args, n); + set_xmstring (l_w, XmNlabelString, prompt); + XtManageChild (l_w); + + /* TF */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 52); n++; + XtSetArg (args[n], XmNmaxLength, NAMCOLS); n++; + XtSetArg (args[n], XmNcolumns, TFCOL); n++; + t_w = XmCreateTextField (f_w, txtname, args, n); + sr_reg (t_w, NULL, aavsocategory, 0); + XtManageChild(t_w); + + *text_wp = t_w; +} + +/* build the query date string from the user's string */ +static void +buildDateString (ustr, dstr, def) +char *ustr, dstr[]; +char *def; +{ + /* skip leading blanks */ + while (*ustr == ' ') + ustr++; + + if (strchr(ustr, '/')) { + /* treat as date */ + int mo, yr; + double dy, Mjd; + + f_sscandate (ustr, pref_get(PREF_DATE_FORMAT), &mo, &dy, &yr); + cal_mjd (mo, dy, yr, &Mjd); + sprintf (dstr, "%.2f", Mjd += MJD0); + } else if (*ustr) { + /* no change .. just strip any trailing blanks. + * except web interfaec wants "defualt" instread of "latestest". + */ + if (strcmp (ustr, latest_str) == 0) + strcpy (dstr, default_str); + else { + char *end; + + strcpy (dstr, ustr); + for (end = &dstr[strlen(dstr)-1]; *end == ' '; end--) + *end = '\0'; + } + } else { + /* blank becomes "default" literal */ + strcpy (dstr, def); + } +} + +/* fetch graph of Designation into curve_pm. + * return 0 if ok else -1 if trouble. + */ +static int +fetchpm() +{ + static char fmt[] = "GET http://%s%s?%s?%s?%s?%g?%s?%s?%s?%s?%s?%s?%s?XEphem HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n"; + Display *dsp = XtDisplay(toplevel_w); + int nrawgif; + char buf[1024]; + char jd1[32], jd2[32]; + char *idp, id[NAMCOLS+1]; + char *abop[XtNumber(abopts)]; + double fit; + char *str; + int isgif; + int length; + int w, h; + int nr; + int fd; + int i; + unsigned char rawgif[250000]; + + /* announce net activity and give user a way to stop */ + watch_cursor(1); + stopd_up(); + + /* form the two date range strings */ + str = XmTextFieldGetString (avjd1_w); + buildDateString (str, jd1, default_str); + XtFree (str); + str = XmTextFieldGetString (avjd2_w); + buildDateString (str, jd2, latest_str); + XtFree (str); + + /* form designation string */ + idp = XmTextFieldGetString (avdes_w); + for (str = idp; *str == ' '; str++) + continue; + strcpy (id, str); + XtFree(idp); + for (str = &id[strlen(id)-1]; *str == ' '; --str) + *str = '\0'; + for (str = id; (str = strchr (str, ' ')) != NULL; str++) + *str = '+'; + + /* get running average period */ + str = XmTextFieldGetString (avfit_w); + fit = strtod (str, NULL); + XtFree (str); + + /* gather options */ + for (i = 0; i < XtNumber(abopts); i++) { + ABOpt *ap = &abopts[i]; + int set = XmToggleButtonGetState (ap->w); + abop[i] = set ? ap->tstr : ap->fstr; + } + + /* query server */ + (void) sprintf (buf, fmt, avhost, avcgi, jd1, jd2, id, fit, abop[0], + abop[1], abop[2], abop[3], abop[4], + abop[5], abop[6], PATCHLEVEL); + fd = httpGET (avhost, buf, buf); + if (fd < 0) { + xe_msg (1, "Query: %s", buf); + stopd_down(); + watch_cursor(0); + return (-1); + } + + /* read header (everything to first blank line), looking for gif */ + isgif = 0; + length = 0; + while (recvline (fd, buf, sizeof(buf)) > 1) { + xe_msg (0, "Rcv: %s", buf); + if (strstr (buf, "Content-Type:") && strstr (buf, "image/gif")) + isgif = 1; + if (strstr (buf, "Content-Length:")) + length = atoi (buf+15); + } + if (!isgif) { + while (recvline (fd, buf, sizeof(buf)) > 0) + xe_msg (0, "Rcv: %s", buf); + xe_msg (1, "Error talking to AAVSO .. see File->System log\n"); + close (fd); + stopd_down(); + watch_cursor(0); + return (-1); + } + if (length == 0) { + xe_msg (0, "No Content-Length in header"); + length = sizeof(rawgif); /* ?? */ + } + + /* remainder should be gif, read into rawgif[] */ + pm_up(); + for (nrawgif = 0; nrawgif < sizeof(rawgif); nrawgif += nr) { + pm_set (100*nrawgif/length); + nr = readbytes (fd, rawgif+nrawgif, 2048); + if (nr < 0) { + xe_msg (1, "%s:\n%s", avhost, syserrstr()); + pm_down(); + close (fd); + stopd_down(); + watch_cursor(0); + return (-1); + } + if (nr == 0) + break; + } + stopd_down(); + pm_down(); + close (fd); + if (nr > 0) { + xe_msg (1, "File too large"); + watch_cursor(0); + return (-1); + } + + /* explode into pm */ + if (gif2pm (dsp, xe_cm, rawgif, nrawgif, &w, &h, &curve_pm, buf) < 0) { + xe_msg (1, "Gif error:\n%s", buf); + watch_cursor(0); + return (-1); + } + + /* yes! */ + watch_cursor(0); + return (0); +} + +/* given a line from the avdb file strip of unwanted chars */ +static void +cleanLine (line) +char *line; +{ + char *p; + + /* skip the designation.. it never needs cleaning */ + line += DESCOLS; + + /* remove \r \n and stuff after first + */ + if ((p = strchr (line, '\r')) != NULL) + *p = '\0'; + if ((p = strchr (line, '\n')) != NULL) + *p = '\0'; + if ((p = strchr (line, '+')) != NULL) + *p = '\0'; +} + +/* get the current selection and show its graph */ +static void +fetchAndShow() +{ + Display *dsp = XtDisplay(toplevel_w); + Pixmap oldpm; + Arg args[20]; + int n; + + /* get graph in curve_pm */ + if (fetchpm() < 0) + return; + + /* display via avgrl_w label */ + get_something (avgrl_w, XmNlabelPixmap, (XtArgVal)&oldpm); + if (oldpm != XmUNSPECIFIED_PIXMAP) + XFreePixmap (dsp, oldpm); + n = 0; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, curve_pm); n++; + XtSetValues (avgrl_w, args, n); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: aavso.c,v $ $Date: 2010/10/06 21:12:16 $ $Revision: 1.21 $ $Name: $"}; diff --git a/GUI/xephem/annotmenu.c b/GUI/xephem/annotmenu.c new file mode 100644 index 0000000..f120af9 --- /dev/null +++ b/GUI/xephem/annotmenu.c @@ -0,0 +1,1090 @@ +/* system-wide annotation facility */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + + +typedef struct { + int active; /* set when in use, 0 can reuse */ + int hide; /* set to hide this entry */ + char win[64]; /* widget for which annot was created */ + Widget man_w; /* manager for one row */ + Widget hide_w; /* hide TB */ + Widget win_w; /* window name label */ + Widget tf_w; /* text field */ + int tdx, tdy; /* relative TF location */ + int ldx, ldy; /* relative ending coords of line */ + double wa, wb; /* world coords of target */ + int worldok; /* whether a and b are set */ + int x0, y0; /* target X coords(just until worldok)*/ + int arg; /* user's ano_draw arg */ +} AnnInfo; +static AnnInfo *anninfo; /* malloced array of ann info */ +static int nanninfo; /* total n entries in anninfo */ + +static Widget anoshell_w; /* main shell */ +static Widget anorc_w; /* main RC of individual items */ +static Widget save_w; /* save file name TF */ +static GC xgc; /* xor GC while rubber-banding */ +static GC agc; /* annotation GC */ +static XFontStruct *afsp; /* annotation font */ +#define ALW 1 /* line linewidth */ +#define ATB 3 /* text border to start of line */ + +static int ano_newEntry(void); +static void ano_createshell(void); +static void ano_mkgcs (void); +static void ano_del_cb (Widget w, XtPointer client, XtPointer call); +static void ano_hide_cb (Widget w, XtPointer client, XtPointer call); +static void ano_new_cb (Widget w, XtPointer client, XtPointer call); +static void ano_togglehides_cb (Widget w, XtPointer client, XtPointer call); +static void ano_hideall_cb (Widget w, XtPointer client, XtPointer call); +static void ano_place_cb (Widget w, XtPointer client, XtPointer call); +static void ano_text_cb (Widget w, XtPointer client, XtPointer call); +static void ano_close_cb (Widget w, XtPointer client, XtPointer call); +static void ano_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void ano_help_cb (Widget w, XtPointer client, XtPointer call); +static void ano_load_cb (Widget w, XtPointer client, XtPointer call); +static void ano_save_cb (Widget w, XtPointer client, XtPointer call); +static void ano_load (char *fn); +static void ano_save (char *fn); +static void interact (AnnInfo *ap); +static void lineStart (int bw, int bh, int fx, int fy, int *xp, int *yp); +static void textBB (char *txt, int *lx, int *rx, int *ay, int *dy); +static Widget findDAW (Display *dsp, Window cw); + +static char anocategory[] = "Annotation"; + +static char defanofn[] = "annotation.ano"; /* default file name */ +static char ano_suffix[] = ".ano"; /* file name suffix */ + + +/* bring up the annotation tool */ +void +ano_manage() +{ + if (!anoshell_w) { + ano_createshell(); + ano_mkgcs(); + + /* seed so we can always use realloc */ + anninfo = (AnnInfo *) malloc (1); + nanninfo = 0; + + /* load default set */ + ano_load (NULL); + } + + XtPopup (anoshell_w, XtGrabNone); + set_something (anoshell_w, XmNiconic, (XtArgVal)False); + +} + +/* handy callback may be used by anyone wanting to bring up Annotation window */ +void +ano_cb (Widget w, XtPointer client, XtPointer call) +{ + ano_manage(); +} + +/* draw all annotations assigned to Widget w using drawable dr. + * dr allows clients to use their private pixmaps if desired. + * use convwx to convert world to/from X coords depending on w2x. + * a is angle above equator (such as lat/alt/dec), b is rotation (long/az/ra). + * arg is just stored and forwarded to caller. + * on first call after defining a new annotation, worldok is false and we find + * the world coords from x0 and y0, from then on we find x and y from the + * world coords. + */ +void +ano_draw (Widget w, Drawable dr, int convwx(double *ap, double *bp, + int *xp, int *yp, int w2x, int arg), int arg) +{ + Display *dsp = XtDisplay (w); + Window win = XtWindow (w); + char *wname = XtName(w); + int i; + + if (!win) + return; + + for (i = 0; i < nanninfo; i++) { + AnnInfo *ap = &anninfo[i]; + if (ap->active && !ap->hide && !strcmp(ap->win,wname)) { + int x, y, v; + + if (ap->worldok) + v = convwx (&ap->wa, &ap->wb, &x, &y, 1, ap->arg); + else { + v = convwx (&ap->wa, &ap->wb, &ap->x0, &ap->y0, 0, arg); + ap->worldok = 1; + ap->arg = arg; + x = ap->x0; + y = ap->y0; + } + + if (v) { + char *txt = XmTextFieldGetString (ap->tf_w); + XPSDrawString (dsp, dr, agc, x + ap->tdx, y + ap->tdy, txt, + strlen(txt)); + XtFree(txt); + + XPSDrawLine (dsp, dr, agc, x, y, x + ap->ldx, y + ap->ldy); + } + } + } +} + +/* called whenever an annotation resource is changed, such as font or color. + * N.B. might be called before ever being opened. + * TODO: remove old first + */ +void +ano_newres() +{ + if (!anoshell_w) + return; + ano_mkgcs(); + all_update (mm_get_now(), 1); +} + +void +ano_cursor(c) +Cursor c; +{ + Window win; + + if (anoshell_w && (win = XtWindow(anoshell_w)) != 0) { + Display *dsp = XtDisplay(anoshell_w); + if (c) + XDefineCursor(dsp, win, c); + else + XUndefineCursor(dsp, win); + } +} + +/* create the main annotation shell */ +static void +ano_createshell() +{ + Widget w, f_w, pb_w, afs_w, sw_w; + Arg args[20]; + char *s[1]; + int n; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Annotation"); n++; + XtSetArg (args[n], XmNiconName, "Annotation"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + anoshell_w = XtCreatePopupShell ("Annotation", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (anoshell_w); + set_something (anoshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (anoshell_w, XmNpopdownCallback, ano_popdown_cb, 0); + sr_reg (anoshell_w, "XEphem*Annotation.x", anocategory, 0); + sr_reg (anoshell_w, "XEphem*Annotation.y", anocategory, 0); + sr_reg (anoshell_w, "XEphem*Annotation.width", anocategory, 0); + sr_reg (anoshell_w, "XEphem*Annotation.height", anocategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNfractionBase, 26); n++; + f_w = XmCreateForm (anoshell_w, "AnForm", args, n); + XtAddCallback (f_w, XmNhelpCallback, ano_help_cb, 0); + XtManageChild (f_w); + + /* controls along bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 5); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, ano_close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 6); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 10); n++; + w = XmCreatePushButton (f_w, "New", args, n); + wtip (w, "Create a new annotation"); + XtAddCallback (w, XmNactivateCallback, ano_new_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 11); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 15); n++; + w = XmCreatePushButton (f_w, "HideAll", args, n); + wtip (w, "Temporarily hide all existing annotation"); + set_xmstring (w, XmNlabelString, "Hide all"); + XtAddCallback (w, XmNactivateCallback, ano_hideall_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 16); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + w = XmCreatePushButton (f_w, "TogHide", args, n); + wtip (w, "Toggle which annotations are hiding"); + set_xmstring (w, XmNlabelString, "Toggle"); + XtAddCallback (w, XmNactivateCallback, ano_togglehides_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 21); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 25); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + wtip (w, "Get more information about annotation"); + XtAddCallback (w, XmNactivateCallback, ano_help_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreateSeparator (f_w, "Sep", args, n); + XtManageChild (w); + + /* load/save controls */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + pb_w = XmCreatePushButton (f_w, "ASPB", args, n); + set_xmstring (pb_w, XmNlabelString, "Save to: "); + wtip (pb_w, "Save these Annotations to file named at right"); + XtAddCallback (pb_w, XmNactivateCallback, ano_save_cb, NULL); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 22); n++; + save_w = XmCreateTextField (f_w, "File", args, n); + sr_reg (save_w, NULL, anocategory, 0); + defaultTextFN (save_w, 0, defanofn, NULL); + XtAddCallback (save_w, XmNactivateCallback, ano_save_cb, NULL); + wtip (save_w, "File in which to save above Annotations"); + XtManageChild (save_w); + + s[0] = ano_suffix; + afs_w = createFSM (f_w, s, 1, "auxil", ano_load_cb); + wtip (afs_w, "Select file of annotations to load"); + set_xmstring (afs_w, XmNlabelString, "Load file: "); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, save_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetValues (afs_w, args, n); + + /* main RC in a SW to contain each entry */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, afs_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + XtSetArg (args[n], XmNvisualPolicy, XmVARIABLE); n++; + sw_w = XmCreateScrolledWindow (f_w, "RC", args, n); + XtManageChild (sw_w); + + n = 0; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + anorc_w = XmCreateRowColumn (sw_w, "RC", args, n); + XtManageChild (anorc_w); + + /* SW assumes work is its child but just to be tidy about it .. */ + set_something (sw_w, XmNworkWindow, (XtArgVal)anorc_w); +} + +/* add one entry to anorc_w, return index */ +static int +ano_newEntry() +{ + Widget d_w, p_w; + AnnInfo *ap; + Widget w, f_w; + Arg args[20]; + int ai; + int n; + + /* find new or expand anninfo */ + + for (ai = 0; ai < nanninfo; ai++) + if (!anninfo[ai].active) + break; + if (ai == nanninfo) + anninfo = (AnnInfo *)realloc(anninfo, ++nanninfo * sizeof(AnnInfo)); + ap = &anninfo[ai]; + memset (ap, 0, sizeof(*ap)); + ap->active = 1; + + /* put in a form */ + + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 2); n++; + f_w = XmCreateForm (anorc_w, "EF", args, n); + XtManageChild (f_w); + ap->man_w = f_w; + + /* del, text, place */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + p_w = XmCreatePushButton (f_w, "Place", args, n); + wtip (p_w, "(Re)position this annotation"); + XtAddCallback (p_w, XmNactivateCallback, ano_place_cb, (XtPointer)(long int)ai); + XtManageChild (p_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + d_w = XmCreatePushButton (f_w, "Delete", args, n); + wtip (d_w, "Delete this annotation"); + XtAddCallback (d_w, XmNactivateCallback, ano_del_cb, (XtPointer)(long int)ai); + XtManageChild (d_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, d_w); n++; + ap->hide_w = XmCreateToggleButton (f_w, "Hide", args, n); + wtip (ap->hide_w, "Hide this annotation"); + XtAddCallback (ap->hide_w, XmNvalueChangedCallback, ano_hide_cb, + (XtPointer)(long int)ai); + XtManageChild (ap->hide_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, ap->hide_w); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + ap->win_w = XmCreateLabel (f_w, "WindowName", args, n); + XtManageChild (ap->win_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, p_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, ap->win_w); n++; + w = XmCreateTextField (f_w, "TF", args, n); + wtip (w, "Text to be used in annotation"); + XtAddCallback (w, XmNactivateCallback, ano_text_cb, (XtPointer)(long int)ai); + XtManageChild (w); + ap->tf_w = w; + + return (ai); +} + +static void +ano_mkgcs() +{ + Display *dsp = XtDisplay (anoshell_w); + Window root = RootWindow(dsp, DefaultScreen(dsp)); + Pixel black = BlackPixel (dsp, DefaultScreen (dsp)); + unsigned long gcm; + XGCValues gcv; + Pixel p; + + afsp = getXResFont ("AnnoFont"); + get_color_resource (anoshell_w, "AnnoColor", &p); + + /* make another that uses xor for rubber banding */ + gcm = GCFunction | GCForeground | GCLineWidth | GCFont; + gcv.function = GXxor; + gcv.foreground = black ^ p; + gcv.line_width = ALW; + gcv.font = afsp->fid; + xgc = XCreateGC (XtD, root, gcm, &gcv); + + /* make one of solid color */ + gcm = GCForeground | GCLineWidth | GCFont; + gcv.foreground = p; + gcv.line_width = ALW; + gcv.font = afsp->fid; + agc = XCreateGC (XtD, root, gcm, &gcv); +} + +/* callback from deleting one entry. + * client is index into anoinfo[] + */ +/* ARGSUSED */ +static void +ano_del_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int ai = (long int)client; + AnnInfo *ap = &anninfo[ai]; + + ap->active = 0; + XtDestroyWidget (ap->man_w); + all_update (mm_get_now(), 1); +} + +/* callback from hiding one entry. + * client is index into anoinfo[] + */ +/* ARGSUSED */ +static void +ano_hide_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int set = XmToggleButtonGetState (w); + int ai = (long int)client; + AnnInfo *ap = &anninfo[ai]; + + ap->hide = set; + all_update (mm_get_now(), 1); +} + +/* callback from adding one entry. + */ +/* ARGSUSED */ +static void +ano_new_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + (void) ano_newEntry(); +} + +/* callback from toggling all entries. + */ +/* ARGSUSED */ +static void +ano_togglehides_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i; + + for (i = 0; i < nanninfo; i++) { + AnnInfo *ap = &anninfo[i]; + if (ap->active) + XmToggleButtonSetState (ap->hide_w, !!(ap->hide ^= 1), False); + } + all_update (mm_get_now(), 1); +} + +/* callback from hiding all entries. + */ +/* ARGSUSED */ +static void +ano_hideall_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i; + + for (i = 0; i < nanninfo; i++) { + AnnInfo *ap = &anninfo[i]; + if (ap->active) + XmToggleButtonSetState (ap->hide_w, !!(ap->hide = 1), False); + } + all_update (mm_get_now(), 1); +} + +/* callback from placing one entry. + * client is index into anoinfo[] + */ +/* ARGSUSED */ +static void +ano_place_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int ai = (long int)client; + AnnInfo *ap = &anninfo[ai]; + + interact (ap); +} + +/* callback from entering text. + * client is index into anoinfo[] + */ +/* ARGSUSED */ +static void +ano_text_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int ai = (long int)client; + AnnInfo *ap = &anninfo[ai]; + + /* if not defined, same as Place, otherwise just changing text */ + if (!ap->win[0]) + interact (ap); + else + all_update (mm_get_now(), 1); +} + +/* callback from the main Close button */ +/* ARGSUSED */ +static void +ano_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do all he work */ + XtPopdown (anoshell_w); +} + +/* called to load annotations from file. + * file name is label of this widget + */ +/* ARGSUSED */ +static void +ano_load_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + get_xmstring (w, XmNlabelString, &fn); + ano_load(fn); + XtFree (fn); +} + +/* called to Save the current annotations to a file named in save_w + * N.B. don't use call, used by both a TF and a PB + */ +/* ARGSUSED */ +static void +ano_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024], *fn; + char *txt; + + /* get file name */ + fn = txt = XmTextFieldGetString (save_w); + if (!strstr (txt, ano_suffix)) { + sprintf (fn = buf, "%s%s", txt, ano_suffix); + XmTextFieldSetString (save_w, fn); + } + + /* save */ + ano_save(fn); + + /* confirm */ + if (confirm()) + xe_msg (1, "%s saved", fn); + + /* clean up */ + XtFree (txt); +} + +/* callback from closing the main annotation shell. + */ +/* ARGSUSED */ +static void +ano_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* TODO erase all ? */ +} + +/* callback from the overall Help button. + */ +/* ARGSUSED */ +static void +ano_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Enter text, click Place, move cursor to position text, click and hold,", +"position end of line, release." +}; + + hlp_dialog ("Annotation", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* compute bounding box around txt rendered with afsp font. + * return left x, right x, ascent and descent from text origin plus small gap; + */ +static void +textBB (char *txt, int *lx, int *rx, int *ay, int *dy) +{ + int txtl = strlen(txt); + XCharStruct cs; + int dir, as, de; + + XTextExtents (afsp, txt, txtl, &dir, &as, &de, &cs); + *lx = cs.lbearing + ATB; + *rx = cs.rbearing + ATB; + *ay = cs.ascent + ATB; + *dy = cs.descent + ATB; +} + +/* user interaction to place text and define line */ +static void +interact (AnnInfo *ap) +{ + static Cursor tc, lc; + Display *dsp = XtD; + Window root = RootWindow(dsp, DefaultScreen(dsp)); + Window annow = 0; + Widget daw = NULL; + char *txt; + int txtl; + int tlx, trx, tay, tdy; /* bb of text wrt it's [0,0] pos */ + int lrx, lry; /* last root x, to detect no motion */ + int lx, ly; /* last cursor position, wrt window */ + int x0=0, y0=0; /* line start, wrt window */ + unsigned int lm; + int nc; + + /* make text and line drawing cursors */ + if (!tc) { + tc = XCreateFontCursor (dsp, XC_draft_small); + lc = XCreateFontCursor (dsp, XC_pencil); + } + + /* if reusing an existing annotation, erase old */ + if (ap->win[0]) { + ap->win[0] = '\0'; + all_update (mm_get_now(), 1); + } + + /* get text to place -- N.B. must XtFree(txt) */ + txt = XmTextFieldGetString (ap->tf_w); + txtl = strlen (txt); + + /* compute text bounding box */ + textBB (txt, &tlx, &trx, &tay, &tdy); + + /* grab pointer to start placing text */ + XmUpdateDisplay (toplevel_w); /* helps insure button pops back up */ + if (XGrabPointer (dsp, root, False, ButtonPressMask, GrabModeAsync, + GrabModeSync, None, tc, CurrentTime) != GrabSuccess) { + xe_msg (1, "Could not grab pointer"); + XtFree (txt); + return; + } + + /* first click places text and begins line, next release ends line */ + lrx = lry = lx = ly = -1000; + lm = 0; + for (nc = 0; nc < 2; ) { + int x = 0, y = 0, rx, ry, cx, cy; + Window rw, cw; + unsigned int m; + int click; + + /* get cursor pos .. nothing to do if just over pure root win */ + if (!XQueryPointer (dsp, root, &rw, &cw, &rx, &ry, &cx, &cy, &m)) { + xe_msg (1, "XQueryPointer error"); + break; + } + if (cw == None) + continue; + + /* avoid needless work while idle */ + click = (m ^ lm) & Button1Mask; + if (!click && rx == lrx && ry == lry) + continue; + lm = m; + lrx = rx; + lry = ry; + + if (nc == 0) { + /* place text label if in any DA */ + daw = findDAW (dsp, cw); + + if (daw) { + /* in one of xephem's DA */ + Window dawin = XtWindow (daw); + + /* erase last if in same as before */ + if (annow == dawin) + XDrawString (dsp, annow, xgc, lx, ly, txt, txtl); + annow = dawin; + + /* draw in new pos */ + XTranslateCoordinates (dsp, root, annow, rx, ry, &x,&y,&cw); + XDrawString (dsp, annow, xgc, x, y, txt, txtl); + + if (click) { + /* draw text in desired color for sure */ + XDrawString (dsp, annow, agc, x, y, txt, txtl); + + /* change cursor for line drawing */ + XUngrabPointer (dsp, CurrentTime); + if (XGrabPointer (dsp, root, False, ButtonReleaseMask, + GrabModeAsync, GrabModeSync, None, lc, + CurrentTime) != GrabSuccess) { + xe_msg (1, "Regrab failed"); + break; + } + + /* save text loc, use as "last" for first line erase */ + ap->x0 = x; + ap->y0 = y; + x0 = x; + y0 = y; + + /* move on to line phase */ + nc++; + } + } else { + /* not in a DA, erase if just left, check for abort */ + if (annow) { + XDrawString (dsp, annow, xgc, lx, ly, txt, txtl); + annow = 0; + daw = NULL; + } + if (click) + break; + } + + } else { + int dx, dy; + + /* erase last line */ + XDrawLine (dsp, annow, xgc, x0, y0, lx, ly); + + /* find new starting loc */ + XTranslateCoordinates (dsp, root, annow, rx, ry, &x, &y, &cw); + dx = ap->x0 - tlx; + dy = ap->y0 - tay; + lineStart (tlx+trx, tdy+tay, x-dx, y-dy, &x0, &y0); + x0 += dx; + y0 += dy; + + /* draw new line */ + XDrawLine (dsp, annow, xgc, x0, y0, x, y); + + if (click) { + /* done .. save and refresh */ + ap->tdx = ap->x0 - x; + ap->tdy = ap->y0 - y; + ap->ldx = x0 - x; + ap->ldy = y0 - y; + ap->x0 = x; + ap->y0 = y; + strcpy (ap->win, XtName(daw)); + set_xmstring (ap->win_w, XmNlabelString, ap->win); + ap->active = 1; + + /* redraw and fix worldok */ + ap->worldok = 0; + all_update (mm_get_now(), 1); + + break; + } + } + + /* history */ + lx = x; + ly = y; + } + + XUngrabPointer (dsp, CurrentTime); + + XtFree (txt); +} + +/* given a box and the far end of a line, find a nice place to start the line. + * all coords are with respect to upper left corner of box, +y down. + */ +static void +lineStart (int bw, int bh, int fx, int fy, int *xp, int *yp) +{ + int x, y; + + if (fx >= 0 && fx <= bw) { + /* always use center when between ends, or no-op if inside */ + x = bw/2; + if (fy < 0) + y = 0; /* top */ + else if (fy < bh) + x = fx, y = fy; /* freeze inside text */ + else + y = bh; /* bottom */ + } else { + int angle; /* +cw from +x */ + int dx, dy; + + /* find angle from center */ + dx = fx - bw/2; + dy = fy - bh/2; + angle = dx ? raddeg(atan2((double)dy,(double)dx)) : (dy>0?90:-90); + if (angle < 0) + angle += 360; + + /* assign nice starting place around edge */ + switch (angle/20) { + case 0: case 17: + x = bw; y = bh/2; /* right center */ + break; + case 1: case 2: + x = bw; y = bh; /* lower right */ + break; + case 3: case 4: case 5: + x = bw/2; y = bh; /* lower center */ + break; + case 6: case 7: + x = 0; y = bh; /* lower left */ + break; + case 8: case 9: + x = 0; y = bh/2; /* left center */ + break; + case 10: case 11: + x = 0; y = 0; /* upper left */ + break; + case 12: case 13: case 14: + x = bw/2; y = 0; /* top center */ + break; + case 15: case 16: + x = bw; y = 0; /* top right */ + break; + default: + printf ("Impossible annot angle %d\n", angle); + abort(); + } + } + + /* done */ + *xp = x; + *yp = y; +} + +/* starting at cw drill down to find a leaf DrawingArea widget. + * return its pointer else NULL + */ +static Widget +findDAW (Display *dsp, Window cw) +{ + Window par, *chil; + Window root; + Widget daw; + int i; + unsigned int nchil; + + /* check whether found goal */ + daw = XtWindowToWidget(dsp, cw); + if (daw && XmIsDrawingArea(daw)) { + /* scrolled window uses a DA as a clipping parent for app's DA */ + Cardinal nwc; + get_something (daw, XmNnumChildren, (XtArgVal)&nwc); + if (nwc == 0) + return (daw); /* yes! */ + } + + /* get children of cw */ + chil = NULL; + if (!XQueryTree (dsp, cw, &root, &par, &chil, &nchil)) + return (NULL); + + /* search down for leaf DA */ + daw = NULL; + for (i = 0; i < nchil && !daw; i++) + daw = findDAW (dsp, chil[i]); + + /* clean up and report */ + if (chil) + XFree(chil); + return (daw); +} + +/* build a new anninfo[] list from the given file, or file named in save_w + * if !fn + */ +static void +ano_load (char *fn) +{ + char msg[1024]; + char buf[1024]; + XMLEle *root, *ep; + FILE *fp; + LilXML *xp; + int i; + + /* get file name */ + if (!fn) { + char *txt = XmTextFieldGetString (save_w); + if (!strstr (txt, ano_suffix)) + sprintf (buf, "%s%s", txt, ano_suffix); + else + strcpy (buf, txt); + XtFree (txt); + fn = buf; + } + + /* open */ + fp = fopend (fn, "auxil", "r"); + if (!fp) + return; /* already informed user */ + + /* read */ + xp = newLilXML (); + root = readXMLFile (fp, xp, msg); + fclose (fp); + delLilXML (xp); + if (!root) { + xe_msg (1, "%s: %s", fn, msg[0] ? msg : "bad format"); + return; + } + if (strcmp (tagXMLEle(root), "Annotations")) { + xe_msg (1, "%s: not an Annotations file", fn); + delXMLEle (root); + return; + } + + /* clear the anninfo[] array */ + for (i = 0; i < nanninfo; i++) + if (anninfo[i].active) + XtDestroyWidget (anninfo[i].man_w); + free ((char *)anninfo); + anninfo = (AnnInfo *) malloc (1); /* seed for realloc */ + nanninfo = 0; + + /* build new */ + for (ep = nextXMLEle(root,1); ep != NULL; ep = nextXMLEle(root,0)) { + AnnInfo *ap; + int ai; + + if (strcmp (tagXMLEle(ep), "annotation")) + continue; + + ai = ano_newEntry(); + ap = &anninfo[ai]; + + XmTextFieldSetString (ap->tf_w, pcdataXMLEle(ep)); + XmToggleButtonSetState (ap->hide_w, atoi(findXMLAttValu(ep,"hide")), + False); + strcpy (ap->win, findXMLAttValu(ep,"window")); + set_xmstring (ap->win_w, XmNlabelString, ap->win); + ap->tdx = atoi(findXMLAttValu(ep,"textdx")); + ap->tdy = atoi(findXMLAttValu(ep,"textdy")); + ap->ldx = atoi(findXMLAttValu(ep,"linedx")); + ap->ldy = atoi(findXMLAttValu(ep,"linedy")); + ap->arg = atoi(findXMLAttValu(ep,"clientarg")); + ap->wa = atof(findXMLAttValu(ep,"worldx")); + ap->wb = atof(findXMLAttValu(ep,"worldy")); + ap->worldok = 1; + } + + /* finished */ + delXMLEle (root); + + /* draw */ + all_update (mm_get_now(), 1); +} + +/* save the current active entries in anninfo[] to the given file */ +static void +ano_save (char *fn) +{ + FILE *fp; + int i; + + /* create */ + fp = fopend (fn, NULL, "w"); + if (!fp) + return; /* already informed user */ + + /* write */ + fprintf (fp, "\n"); + for (i = 0; i < nanninfo; i++) { + AnnInfo *ap = &anninfo[i]; + if (ap->active) { + char *string = XmTextFieldGetString (ap->tf_w); + + fprintf (fp, " hide_w)); + fprintf (fp, " window='%s'", ap->win); + fprintf (fp, " textdx='%d'", ap->tdx); + fprintf (fp, " textdy='%d'", ap->tdy); + fprintf (fp, " linedx='%d'", ap->ldx); + fprintf (fp, " linedy='%d'", ap->ldy); + fprintf (fp, " clientarg='%d'", ap->arg); + fprintf (fp, " worldx='%g'", ap->wa); + fprintf (fp, " worldy='%g'", ap->wb); + fprintf (fp, ">\n %s\n", string); + fprintf (fp, " \n"); + + XtFree (string); + } + } + fprintf (fp, "\n"); + + /* finished */ + fclose (fp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: annotmenu.c,v $ $Date: 2015/04/09 00:19:20 $ $Revision: 1.22 $ $Name: $"}; diff --git a/GUI/xephem/auxil/._HAReyfigs.csf b/GUI/xephem/auxil/._HAReyfigs.csf new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._HAReyfigs.csf differ diff --git a/GUI/xephem/auxil/._README b/GUI/xephem/auxil/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._README differ diff --git a/GUI/xephem/auxil/._SOHO_512_20090703_1900_eit_171.gif b/GUI/xephem/auxil/._SOHO_512_20090703_1900_eit_171.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._SOHO_512_20090703_1900_eit_171.gif differ diff --git a/GUI/xephem/auxil/._analemma.plt b/GUI/xephem/auxil/._analemma.plt new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._analemma.plt differ diff --git a/GUI/xephem/auxil/._annotation.ano b/GUI/xephem/auxil/._annotation.ano new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._annotation.ano differ diff --git a/GUI/xephem/auxil/._astorb2edb.pl b/GUI/xephem/auxil/._astorb2edb.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._astorb2edb.pl differ diff --git a/GUI/xephem/auxil/._classicfigs.csf b/GUI/xephem/auxil/._classicfigs.csf new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._classicfigs.csf differ diff --git a/GUI/xephem/auxil/._dearth.gif b/GUI/xephem/auxil/._dearth.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._dearth.gif differ diff --git a/GUI/xephem/auxil/._favorites.fav b/GUI/xephem/auxil/._favorites.fav new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._favorites.fav differ diff --git a/GUI/xephem/auxil/._jupiter.1020 b/GUI/xephem/auxil/._jupiter.1020 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._jupiter.1020 differ diff --git a/GUI/xephem/auxil/._jupiter.9910 b/GUI/xephem/auxil/._jupiter.9910 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._jupiter.9910 differ diff --git a/GUI/xephem/auxil/._jupitermap.gif b/GUI/xephem/auxil/._jupitermap.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._jupitermap.gif differ diff --git a/GUI/xephem/auxil/._logo.gif b/GUI/xephem/auxil/._logo.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._logo.gif differ diff --git a/GUI/xephem/auxil/._mars.1020 b/GUI/xephem/auxil/._mars.1020 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._mars.1020 differ diff --git a/GUI/xephem/auxil/._mars.9910 b/GUI/xephem/auxil/._mars.9910 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._mars.9910 differ diff --git a/GUI/xephem/auxil/._mars_db b/GUI/xephem/auxil/._mars_db new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._mars_db differ diff --git a/GUI/xephem/auxil/._marsmap.jpg b/GUI/xephem/auxil/._marsmap.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._marsmap.jpg differ diff --git a/GUI/xephem/auxil/._moon.fts b/GUI/xephem/auxil/._moon.fts new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._moon.fts differ diff --git a/GUI/xephem/auxil/._mpcorb2edb.pl b/GUI/xephem/auxil/._mpcorb2edb.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._mpcorb2edb.pl differ diff --git a/GUI/xephem/auxil/._nearth.gif b/GUI/xephem/auxil/._nearth.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._nearth.gif differ diff --git a/GUI/xephem/auxil/._sample.hzn b/GUI/xephem/auxil/._sample.hzn new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._sample.hzn differ diff --git a/GUI/xephem/auxil/._saturn00.gif b/GUI/xephem/auxil/._saturn00.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturn00.gif differ diff --git a/GUI/xephem/auxil/._saturn04.gif b/GUI/xephem/auxil/._saturn04.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturn04.gif differ diff --git a/GUI/xephem/auxil/._saturn10.gif b/GUI/xephem/auxil/._saturn10.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturn10.gif differ diff --git a/GUI/xephem/auxil/._saturn16.gif b/GUI/xephem/auxil/._saturn16.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturn16.gif differ diff --git a/GUI/xephem/auxil/._saturn20.gif b/GUI/xephem/auxil/._saturn20.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturn20.gif differ diff --git a/GUI/xephem/auxil/._saturn24.gif b/GUI/xephem/auxil/._saturn24.gif new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturn24.gif differ diff --git a/GUI/xephem/auxil/._saturne.1020 b/GUI/xephem/auxil/._saturne.1020 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturne.1020 differ diff --git a/GUI/xephem/auxil/._saturne.9910 b/GUI/xephem/auxil/._saturne.9910 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._saturne.9910 differ diff --git a/GUI/xephem/auxil/._starcensus.txt b/GUI/xephem/auxil/._starcensus.txt new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._starcensus.txt differ diff --git a/GUI/xephem/auxil/._uranus.1020 b/GUI/xephem/auxil/._uranus.1020 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._uranus.1020 differ diff --git a/GUI/xephem/auxil/._uranus.9910 b/GUI/xephem/auxil/._uranus.9910 new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._uranus.9910 differ diff --git a/GUI/xephem/auxil/._wmm.cof b/GUI/xephem/auxil/._wmm.cof new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._wmm.cof differ diff --git a/GUI/xephem/auxil/._xephem_sites b/GUI/xephem/auxil/._xephem_sites new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._xephem_sites differ diff --git a/GUI/xephem/auxil/._xephem_skyhist b/GUI/xephem/auxil/._xephem_skyhist new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/auxil/._xephem_skyhist differ diff --git a/GUI/xephem/auxil/HAReyfigs.csf b/GUI/xephem/auxil/HAReyfigs.csf new file mode 100644 index 0000000..9a299e0 --- /dev/null +++ b/GUI/xephem/auxil/HAReyfigs.csf @@ -0,0 +1,1292 @@ +# This is an XEphem constellation figure definition file. It must contain +# exactly one figure for each of the 89 constellations. Leading white space, +# blank lines and lines beginning with # are ignored. Each figure definition +# begins with a line containing just its name followed by one or more lines +# of the form: +# drawcode ra dec [comment] +# where +# drawcode is a numeric value indicating a drawing instruction as follows: +# 0 move to ra dec +# 1 draw solid line to ra dec +# 2 draw dashed line to ra dec +# ra is decimal hours or sexigesimal h:m:s +# dec is decimal degrees or sexigesimal d:m:s +# the remainder of the line is ignored and may be any comments, typical is +# the name of a star being drawn to. + + +Andromeda + 0 2.065 42.3167 gamma-1 + 1 1.61333 41.4 upsilon + 1 1.16222 35.6167 Mirach + 1 0.655556 30.85 delta + 1 0.139444 29.0833 Alpheratz + 0 1.16222 35.6167 Mirach + 1 0.945556 38.4833 mu + 1 0.83 41.0667 nu + 1 1.15833 47.2333 phi + 1 1.63333 48.6167 51 + 0 0.953333 23.4167 eta + 1 0.788889 24.2667 zeta + 1 0.642222 29.3 epsilon + 1 0.655556 30.85 delta + 1 0.614444 33.7167 pi + 1 0.285 38.6667 theta + 1 23.6356 43.2667 iota + 1 23.6733 44.3333 kappa + 1 23.6261 46.45 lambda + 0 23.6356 43.2667 iota + 1 23.0317 42.3167 omicron + 0 0.614444 33.7167 pi + 1 1.16222 35.6167 Mirach + +Antlia + 0 9.48722 -35.95 move epsilon + 2 10.4522 -31.0667 dotted alpha + 2 10.945 -37.1333 dotted iota + +Apus + 0 16.7178 -77.5167 + 1 16.5572 -78.8833 + 1 16.3389 -78.6833 + 1 14.7978 -79.0333 + 0 16.7178 -77.5167 Aps Beta + 1 16.3389 -78.6833 Aps Delta1 + +Aquarius + 0 20.7944 -9.48333 Aqr Epsilon-2 + 1 20.8778 -8.98333 Aqr Mu-6 + 1 21.16 -11.3667 Aqr Nu-13 + 1 21.5261 -5.56667 Sadalsud + 1 22.0967 -0.316667 Sadalmelik + 1 22.3611 -1.38333 Sadachbia + 1 22.5894 -0.116667 Aqr Eta-62 + 1 22.4211 1.38333 Aqr Pi-52 + 1 22.0967 -0.316667 Sadalmelik + 0 22.1072 -13.8667 Aqr Iota-33 + 1 21.5261 -5.56667 Sadalsud + 0 22.0967 -0.316667 Sadalmelik + 1 22.2806 -7.78333 Aqr Theta-43 + 1 22.8767 -7.56667 Aqr Lambda-73 + 1 23.2389 -6.03333 Aqr Phi-90 + 1 23.265 -9.08333 Aqr Psi1-91 + 1 22.9111 -15.8167 Skat + 1 22.8267 -13.5833 Aqr Tau2-71 + 1 22.8767 -7.56667 Aqr Lambda-73 + 0 22.8767 -7.56667 Aqr Lambda-73 + 1 23.265 -9.08333 Aqr Psi1-91 + 1 23.3828 -20.1 Aqr 98 + 1 23.4339 -20.6333 Aqr 99 + 1 23.5544 -20.9 Aqr 101 + 0 23.265 -9.08333 Aqr Psi1-91 + 1 23.1572 -21.1667 Aqr 88 + 1 23.165 -22.45 Aqr 89 + 1 23.1111 -23.7333 Aqr 86 + +Aquila + 0 19.9217 6.4 Aql Beta-60 + 1 19.8467 8.86667 Altair + 1 19.7711 10.6167 Tarazed + 1 19.425 3.11667 Aql Delta-30 + 1 19.1039 -4.86667 Aql Lambda-16 + 1 19.0278 -5.73333 Aql 12 + 0 20.1883 -0.816667 Aql Theta-65 + 1 19.8744 1 Aql Eta-55 + 1 19.425 3.11667 Aql Delta-30 + 1 19.09 13.8667 Aql Zeta-17 + 1 18.9939 15.0667 Aql Epsilo-13 + +Ara + 0 17.5306 -49.8667 Ara Alpha + 1 16.9933 -53.15 Ara Epsilon1 + 1 16.9772 -55.9833 Ara Zeta + 1 16.83 -59.0333 Ara Eta + 1 17.5183 -60.6833 Ara Delta + 1 18.1106 -50.0833 Ara Theta + 1 17.5306 -49.8667 Ara Alpha + +Aries + 0 3.19389 19.7167 delta + 1 2.98667 21.3333 epsilon + 1 2.83278 27.25 41 + 1 2.79833 29.2333 39 + 1 2.72389 27.7 35 + 1 2.11944 23.45 Hamal + 1 1.91056 20.8 Sheratan + 1 1.965 23.5833 lambda + 1 2.11944 23.45 Hamal + 1 2.21333 21.2 eta + 0 2.98667 21.3333 epsilon + 1 2.21333 21.2 eta + 1 1.89222 19.2833 gamma + 0 2.83278 27.25 41 + 1 2.72389 27.7 35 + +Auriga + 0 5.99222 54.2833 delta + 1 5.99222 44.9333 Menkalinan + 1 5.995 37.2 theta + 1 4.95 33.15 iota + 1 5.10833 41.2333 eta + 1 5.04111 41.0667 zeta + 1 5.03278 43.8167 epsilon + 1 5.27778 45.9833 Capella + 1 5.10833 41.2333 eta + 1 5.99222 44.9333 Menkalinan + 0 5.99222 54.2833 delta + 1 5.27778 45.9833 Capella + +Bootes + 0 13.7878 17.45 Tau + 1 13.8244 15.7833 Upsilon + 1 13.9111 18.3833 Muphrid + 1 14.2611 19.1667 Arcturus + 1 14.6789 16.4167 Pi + 1 14.7494 27.0667 Pulcherrima + 1 14.5778 29.7333 Sigma + 1 14.5306 30.3667 Rho + 1 14.5344 38.3 Gamma + 1 15.0322 40.3833 Nekkar + 1 15.2583 33.3 Delta + 0 14.2611 19.1667 Arcturus + 1 14.7494 27.0667 Pulcherrima + 1 15.2583 33.3 Delta + 2 15.4078 37.3667 Mu + 2 15.0322 40.3833 Nekkar + 0 14.5344 38.3 Gamma + 1 14.2728 46.0833 Lambda + 1 14.2244 51.7833 Kappa2 + 1 14.42 51.85 Theta + 1 14.2728 46.0833 Lambda + +Caelum + 0 5.07333 -35.4833 move gamma + 2 4.70056 -37.1333 dotted beta + 2 4.67556 -41.85 dotted alpha + 2 4.51389 -44.95 dotted delta + +Camelopardalis + 0 4.955 53.75 Cam 7 + 1 5.05722 60.45 Cam Beta-10 + 1 4.90111 66.35 Cam Alpha-9 + 1 3.83944 71.3333 Cam Gamma + 1 3.82556 65.5333 From GSC + 1 3.48444 59.9333 From GSC + 0 4.90111 66.35 Cam Alpha-9 + 1 7.00111 76.9833 + 1 6.67556 71.75 + 0 5.05722 60.45 Cam Beta-10 + 1 3.82556 65.5333 From GSC + +Cancer + 0 9.12889 10.6667 Cnc Kappa-76 + 1 8.745 18.15 Cnc Delta-47 + 1 8.275 9.18333 Cnc Beta-17 + 1 8.12944 21.5833 Cnc Mu2-10 + 1 8.72167 21.4667 Cnc Gamma-43 + 1 8.745 18.15 Cnc Delta-47 + 0 8.72167 21.4667 Cnc Gamma-43 + 1 8.77833 28.7667 Cnc Iota-48 + +Canes Venatici + 0 12.9333 38.3167 move alpha2 + 2 12.5622 41.35 dotted beta + +Canis Major + 0 7.40167 -29.3 CMa Eta-31 + 1 7.24667 -26.7667 CMa Omega-28 + 1 7.14 -26.3833 CMa Delta-25 + 1 7.05056 -23.8333 CMa Omicr2-24 + 1 6.75222 -16.7 Sirius + 1 6.93556 -17.05 CMa Iota-20 + 1 7.06278 -15.6333 CMa Gamma-23 + 1 6.90333 -12.0333 CMa Theta-14 + 1 6.93556 -17.05 CMa Iota-20 + 0 7.14 -26.3833 CMa Delta-25 + 1 7.02889 -27.9333 CMa Sigma-22 + 1 6.97722 -28.9667 Adara + 1 6.83056 -32.5 CMa Kappa-13 + 0 6.33833 -30.05 CMa Zeta-1 + 1 6.97722 -28.9667 Adara + 1 6.90222 -24.1833 CMa Omicr1-16 + 1 6.61167 -19.25 CMa Nu2-7 + 1 6.75222 -16.7 Sirius + 0 6.53111 -23.4167 CMa Xi1-4 + 1 6.61167 -19.25 CMa Nu2-7 + 1 6.37833 -17.95 Mirzam + +Canis Minor + 0 7.655 5.21667 move alpha + 1 7.45222 8.28333 draw beta + +Capricornus + 0 20.3011 -12.5333 Cap Alpha2-6 + 1 20.35 -14.7667 Cap Beta-9 + 1 20.4811 -17.8 Cap Rho-11 + 1 20.7683 -25.2667 Cap Psi-16 + 1 20.8639 -26.9167 Cap Omega-18 + 0 20.4811 -17.8 Cap Rho-11 + 1 21.0733 -19.85 Cap Eta-22 + 0 21.1189 -25 Cap 24 + 1 21.0733 -19.85 Cap Eta-22 + 1 21.0989 -17.2167 Cap Theta-23 + 1 21.4444 -22.4 Cap Zeta-34 + 1 21.4789 -21.8 Cap 36 + 1 21.3706 -16.8333 Cap Iota-32 + 0 21.7839 -16.1167 Deneb Algiedi + 1 21.6683 -16.65 Cap Gamma-40 + 1 21.3706 -16.8333 Cap Iota-32 + 1 21.0989 -17.2167 Cap Theta-23 + 1 20.35 -14.7667 Cap Beta-9 + +Carina + 0 6.39944 -52.6833 Canopus + 1 9.22 -69.7167 Car Beta + 1 10.2289 -70.0333 Car Omega + 1 10.7161 -64.3833 Car Theta + 1 10.5339 -61.6833 GSC star + 1 10.7256 -60.5667 + 1 10.8894 -58.9 + 1 10.5572 -58.1833 + 1 10.4644 -58.7333 + 1 10.2844 -61.3333 + 1 9.285 -59.2667 Car Iota + 1 8.375 -59.5 Car Epsilon + 1 7.94611 -52.9667 Car Chi + 1 8.15889 -47.3333 Vel Gamma2 + 0 10.8894 -58.9 + 1 11.1433 -58.9833 "Nose" of figurehead + 0 8.375 -59.5 Car Epsilon + 2 9.36833 -55 Vel Kappa + 0 9.285 -59.2667 Car Iota + 2 8.745 -54.7 Vel Delta + +Cassiopeia + 0 0.152778 59.15 Caph + 1 0.675 56.5333 Schedar + 1 0.945 60.7167 Cas Gamma-27 + 1 1.43056 60.2333 Cas Delta-37 + 1 1.90667 63.6667 Cas Epsilo-45 + 1 2.05722 72.4167 Cas 50 + +Centaurus + 0 11.5961 -63.0167 Cen Lambda + 1 12.1944 -52.3667 Cen Rho + 1 12.4672 -50.2167 Cen Sigma + 1 12.1394 -50.7167 Cen Delta + 1 11.35 -54.4833 Cen Pi + 0 12.4672 -50.2167 Cen Sigma + 1 12.6922 -48.95 Cen Gamma + 1 13.665 -53.45 Cen Epsilon + 1 13.9256 -47.2833 Cen Zeta + 1 12.6922 -48.95 Cen Gamma + 0 14.66 -60.8333 Rigil Kentaurus + 1 13.665 -53.45 Cen Epsilon + 1 14.0639 -60.3667 Hadar (Agena) + 0 13.9256 -47.2833 Cen Zeta + 1 14.0289 -45.6 Cen Upsilon2 + 1 13.9778 -44.8 Cen Upsilon1 + 1 13.9711 -42.1 Cen Phi + 1 13.825 -41.6833 Cen Nu + 1 13.8272 -42.4667 Cen Mu + 1 13.9256 -47.2833 Cen Zeta + 0 13.825 -41.6833 Cen Nu + 1 14.1117 -36.3667 Cen Theta-5 + 1 14.3428 -37.8833 Cen Psi + 1 14.3839 -39.5167 From GSC 7809-2783 + 1 14.1006 -41.1667 Cen Chi + 1 13.9711 -42.1 Cen Phi + 1 14.5917 -42.15 Cen Eta + 1 14.9861 -42.1 Cen Kappa + 1 14.6994 -37.8 From GSC + 1 14.7278 -35.1667 From GSC + 0 13.825 -41.6833 Cen Nu + 1 13.5172 -39.4 From GSC + 1 13.3433 -36.7 Cen Iota + 1 13.7617 -33.0333 Cen 1 + 0 13.7617 -33.0333 Cen 1 + 1 13.8239 -34.45 Cen 2 + 0 13.7617 -33.0333 Cen 1 + 1 13.8639 -32.9833 Cen 3 + 0 13.7617 -33.0333 Cen 1 + 1 13.8867 -31.9167 Cen 4 + +Cepheus + 0 20.4928 63 Cep Theta-2 + 1 20.755 61.8333 Cep Eta-3 + 1 21.3094 62.5833 Alderamin + 1 21.4778 70.5667 Alphirk + 1 23.6556 77.6333 Alrai + 1 22.8278 66.2 Cep Iota-32 + 1 22.4861 58.4167 Cep Delta-27 + 1 22.1811 58.2 Cep Zeta-21 + 1 22.2506 57.05 Cep Epsilo-23 + 1 21.725 58.7833 Cep Mu + 1 21.3094 62.5833 Alderamin + 0 21.4778 70.5667 Alphirk + 1 22.8278 66.2 Cep Iota-32 + 0 22.1811 58.2 Cep Zeta-21 + 1 21.7572 61.1167 Cep Nu-10 + +Cetus + 0 0.323889 -8.81667 Cet Iota-8 + 1 1.40056 -8.18333 Cet Theta-45 + 1 2.32222 -2.96667 Mira + 1 2.65833 0.333333 Cet Delta-82 + 1 2.72167 3.23333 Cet Gamma-86 + 1 2.59778 5.6 Cet Nu-78 + 1 2.46944 8.46667 Cet Xi2-73 + 1 2.74889 10.1167 Cet Mu-87 + 1 2.995 8.9 Cet Lambda-91 + 1 3.03778 4.08333 Mekab + 1 2.72167 3.23333 Cet Gamma-86 + 0 2.65833 0.333333 Cet Delta-82 + 1 2 -21.0667 Cet Upsilo-59 + 1 0.726667 -17.9833 Diphda + 1 0.323889 -8.81667 Cet Iota-8 + 0 0.726667 -17.9833 Diphda + 1 1.73444 -15.9333 Cet Tau-52 + +Chamaeleon + 0 8.30889 -76.9167 Cha Alpha + 1 10.5911 -78.6 Cha Gamma + 1 11.9939 -78.2167 Cha Epsilon + 1 12.3056 -79.3 Cha Beta + 1 10.7628 -80.5333 Cha Delta2 + 1 10.5911 -78.6 Cha Gamma + +Circinus + 0 15.2917 -58.8 move beta + 1 14.7083 -64.9667 draw alpha + 1 15.3894 -59.3167 draw gamma + +Columba + 0 5.52 -35.4667 + 1 5.66056 -34.0667 + 1 5.84944 -35.7667 + 1 5.95889 -35.2833 + 1 6.27556 -35.1333 + 1 6.36833 -33.4333 + 0 5.84944 -35.7667 + 1 5.98556 -42.8 + 0 5.98556 -42.8 Col Eta + 1 5.95889 -35.2833 Col Gamma + 1 6.36833 -33.4333 Col Delta + +Coma Berenices + 0 13.1661 17.5167 Alpha + 1 13.1978 27.8667 Beta + 1 12.4489 28.2667 Gamma + 0 13.1978 27.8667 Beta + 2 12.2722 23.9333 Com 7 + 0 13.1978 27.8667 Beta + 2 12.375 25.8333 Com 12 + 0 13.1978 27.8667 Beta + 2 12.44 27.2667 Com 14 + +Corona Australis + 0 19.1067 -37.05 move gamma + 1 19.1578 -37.9 draw alpha + 1 19.1667 -39.3333 draw beta + 1 19.1389 -40.4833 draw delta + 1 18.5583 -42.3 draw theta + +Corona Borealis + 0 15.5483 31.35 move theta + 1 15.4633 29.1 draw beta + 1 15.5778 26.7 draw alpha + 1 15.7122 26.2833 draw gamma + 1 15.8261 26.0667 draw delta + 1 15.9594 26.8667 draw epsilon + 1 16.0239 29.85 draw iota + +Corvus + 0 12.14 -24.7167 Crv Alpha-1 + 1 12.1689 -22.6167 Crv Epsilon-2 + 1 12.3428 -22.2 Crv Zeta-5 + 1 12.5733 -23.3833 Crv Beta-9 + 0 12.3428 -22.2 Crv Zeta-5 + 1 12.4978 -16.5 Crv Delta-7 + 1 12.5344 -16.1833 Crv Eta-8 + 0 12.4978 -16.5 Crv Delta-7 + 1 12.2633 -17.5333 Crv Gamma-4 + 1 12.1689 -22.6167 Crv Epsilon-2 + +Crater + 0 10.9961 -18.2833 Crt Alpha-7 + 1 11.3222 -14.7667 Crt Delta-12 + 1 11.4144 -17.6833 Crt Gamma-15 + 1 11.7461 -18.35 Crt Zeta-27 + 1 11.9333 -17.15 Crt Eta-30 + 1 11.6111 -9.8 Crt Theta-21 + 1 11.41 -10.85 Crt Epsilo-14 + 1 11.3222 -14.7667 Crt Delta-12 + 0 11.4144 -17.6833 Crt Gamma-15 + 1 11.1944 -22.8167 Crt Beta-11 + +Crux + 0 12.4428 -63.0833 move alpha1 + 1 12.5189 -57.1 draw gamma + 0 12.795 -59.6833 move beta + 1 12.2522 -58.7333 draw delta + +Cygnus + 0 19.285 53.3667 Kappa + 2 19.7494 45.1167 Delta + 1 20.3706 40.25 Gamma + 1 20.77 33.9667 Epsilon + 2 21.2156 30.2167 Zeta + 2 20.9528 41.1667 Nu + 2 20.6906 45.2667 Deneb + 2 20.2578 47.7167 32 + 2 19.495 51.7167 Iota + 2 19.285 53.3667 Kappa + 0 21.2461 38.0333 Tau + 2 21.29 39.3833 Sigma + 2 20.9528 41.1667 Nu + 0 20.6906 45.2667 Deneb + 2 21.0822 43.9333 Xi + 0 20.6906 45.2667 Deneb + 1 20.3706 40.25 Gamma + 1 19.9383 35.0833 Eta + 1 19.6561 30.15 Phi + 1 19.5117 27.95 Albireo + +Delphinus + 0 20.6306 11.3833 Del Iota-5 + 1 20.5533 11.3 Del Epsilon-2 + 1 20.6522 10.0833 Del Kappa-7 + 1 20.6306 11.3833 Del Iota-5 + 1 20.5661 13.0333 Del Eta-3 + 1 20.6261 14.6 Rotanev + 1 20.6606 15.9167 Svalocin + 1 20.7778 16.1167 Del Gamma2-12 + 1 20.7244 15.0667 Del Delta-11 + 1 20.6456 13.3167 Del Theta-8 + 1 20.6306 11.3833 Del Iota-5 + 0 20.6261 14.6 Rotanev + 1 20.5883 14.6667 Del Zeta-4 + +Dorado + 0 4.26722 -51.4833 + 1 4.56667 -55.0333 + 1 5.09167 -57.4667 + 1 5.56056 -62.4833 + 1 5.74611 -65.7333 + 0 5.56056 -62.4833 + 1 5.90167 -63.0833 + 1 5.74611 -65.7333 Back to Dor Delta + 0 5.56056 -62.4833 Dor Beta + 1 4.56667 -55.0333 Dor Alpha + +Draco + 0 11.5233 69.3333 Dra Lambda-1 + 1 12.5583 69.7833 Dra Kappa-5 + 1 14.0733 64.3833 Thuban + 1 15.4156 58.9667 Dra Iota-12 + 1 16.0317 58.5667 Dra Theta-13 + 1 16.4 61.5167 Dra Eta-14 + 1 17.1467 65.7167 Dra Zeta-22 + 1 18.3461 71.3333 Dra Phi-43 + 1 19.2094 67.6667 Dra Delta-57 + 1 17.8922 56.8667 Dra Xi-32 + 1 17.5378 55.1667 Dra Nu2-25 + 1 17.5072 52.3 Alwaid + 1 17.9433 51.4833 Rastaban + 1 17.8922 56.8667 Dra Xi-32 + 0 18.3461 71.3333 Dra Phi-43 + 1 18.3511 72.7333 Dra Chi-44 + 0 19.2094 67.6667 Dra Delta-57 + 1 19.8028 70.2667 Dra Epsilo-63 + +Equuleus + 0 21.1722 10.1167 + 1 21.2411 10 + 1 21.2633 5.23333 + +Eridanus + 0 4.63611 -14.3 Eri 53 + 1 5.13111 -5.08333 Cursa + 1 4.75833 -3.25 Eri Mu-57 + 1 4.60556 -3.35 Eri Nu-48 + 1 4.19778 -6.83333 Eri Omicr1-38 + 1 4.25444 -7.65 Eri Omicr2-40 + 1 3.96722 -13.5 Zaurak + 1 3.72056 -9.75 Eri Delta-23 + 1 3.54889 -9.45 Eri Epsilo-18 + 1 2.94056 -8.88333 Eri Eta-3 + 1 3.04 -23.6167 Eri Tau3-11 + 1 3.32556 -21.75 Eri Tau4-16 + 1 3.56333 -21.6167 Eri Tau5-19 + 1 3.78056 -23.2333 Eri Tau6-27 + 1 4.59278 -30.55 Eri Upsil2-52 + 1 4.40056 -34.0167 Eri 43 + 1 4.29833 -33.7833 Eri Upsil4-41 + 1 4.29833 -33.7833 Eri Upsil4-41 + 1 3.45944 -35.6667 Fornax Chi2 + 1 2.97111 -40.3 Eri Theta1 + 1 2.89278 -38.4333 For Psi + 1 2.67778 -39.85 Eri Iota + 1 2.45 -47.7 Eri Kappa + 1 2.275 -51.5 Eri Phi + 1 1.93278 -51.6 Eri Chi + 1 1.62833 -57.2333 Achernar + +Fornax + 0 3.20111 -28.9833 move alpha + 1 2.81778 -32.4 draw beta + 1 2.07444 -29.2833 draw nu + +Gemini + 0 6.06833 23.25 1 + 1 6.24778 22.5 eta + 1 6.38278 22.5 mu + 1 6.73222 25.1167 Mebsuta + 1 7.18556 30.2333 tau + 1 7.485 31.7833 rho + 1 7.57667 31.8833 Castor + 0 7.72167 28.8833 sigma + 0 7.755 28.0167 Pollux + 1 7.59889 26.8833 upsilon + 1 7.335 21.9667 Wasat + 1 7.06833 20.5667 zeta + 1 6.62833 16.3833 gamma + 0 6.48278 20.2 nu + 1 6.73222 25.1167 Mebsuta + 0 6.62833 16.3833 gamma + 0 7.335 21.9667 Wasat + 1 7.30167 16.5333 lambda + 1 6.755 12.8833 Xi + 0 7.74056 24.3833 kappa + 1 7.59889 26.8833 upsilon + 1 7.42889 27.7833 iota + 1 7.18556 30.2333 tau + 1 6.87944 33.95 theta + +Grus + 0 21.8989 -37.35 Gru Gamma + 1 22.1017 -39.5333 Gru Lambda + 1 22.1372 -46.95 Gru Alpha + 1 22.7111 -46.8833 Gru Beta + 1 23.1728 -45.2333 Gru Iota + 1 23.1144 -43.5167 Gru Theta + 1 22.4878 -43.4833 Gru Delta1 + 1 22.1372 -46.95 Gru Alpha + 0 22.8094 -51.3167 Gru Epsilon + 1 22.7111 -46.8833 Gru Beta + 1 23.0144 -52.75 Gru Zeta + +Hercules + 0 16.365 19.15 gamma + 1 16.5033 21.4833 Kornephoros + 1 17.0044 30.9167 epsilon + 1 17.2506 36.8 pi + 1 17.3944 37.1333 rho + 1 17.9372 37.25 theta + 1 17.6578 46 iota + 1 16.5683 42.4333 Sigma + 1 16.1461 44.9333 Phi + 1 16.3289 46.3167 Tau + 1 17.6578 46 iota + 0 17.7744 27.7167 mu + 1 17.5117 26.1 lambda + 1 17.25 24.8333 delta + 1 17.2439 14.3833 alpha + 0 18.7833 18.1667 111 + 1 18.7611 20.5333 110 + 1 18.395 21.7667 109 + 1 18.1461 20.8 102 + 1 18.025 21.6 95 + 1 18.1256 28.75 omicron + 1 17.9628 29.2333 xi + 1 17.2506 36.8 pi + 1 16.715 38.9167 eta + 1 16.6878 31.6 zeta + 1 17.0044 30.9167 epsilon + 1 17.7744 27.7167 mu + 1 17.9628 29.2333 xi + +Horologium + 0 4.23333 -42.2833 move alpha + 1 2.70889 -50.8 draw iota + 1 2.62333 -52.5333 draw eta + 1 2.67722 -54.55 draw zeta + 1 3.06 -59.7333 draw mu + 1 2.97944 -64.0667 draw beta + +Hydra + 0 8.92333 5.95 Hya Zeta-16 + 1 8.77944 6.41667 Hya Epsilo-11 + 1 8.62778 5.7 Hya Delta-4 + 1 8.64611 3.33333 Hya Sigma-5 + 1 8.72056 3.4 Hya Eta-7 + 1 8.92333 5.95 Hya Zeta-16 + 1 9.23944 2.31667 Hya Theta-22 + 1 9.66444 -1.13333 Hya Iota-35 + 1 9.46 -8.65 Hya Alpha-30 + 1 10.1767 -12.35 Hya Lambda-41 + 1 10.435 -16.8333 Hya Mu-42 + 1 10.8272 -16.1833 Hya Nu + 1 10.9961 -18.2833 Crt Alpha-7 + 1 11.1944 -22.8167 Crt Beta-11 + 1 11.55 -31.85 Hya Xi + 1 11.8817 -33.9 Hya Beta + 1 13.3156 -23.1667 Hya Gamma-46 + 1 14.1061 -26.6667 Hya Pi-49 + +Hydrus + 0 0.429444 -77.25 + 1 3.78722 -74.2333 + 1 2.66 -68.2667 + 1 2.36222 -68.65 + 1 1.91556 -67.6333 + 1 1.97944 -61.5667 + +Indus + 0 20.6261 -47.2833 Ind Alpha + 1 20.7339 -51.9167 Ind Eta + 1 20.9133 -58.45 Ind Beta + 1 21.9656 -54.9833 Ind Delta + 0 22.0561 -56.7833 Ind Epsilon + 1 20.9133 -58.45 Ind Beta + +Lacerta + 0 22.2661 37.75 Lac 1 + 1 22.5083 43.1167 Lac 6 + 1 22.675 44.2833 Lac 11 + 1 22.4922 47.7 Lac 5 + 1 22.4089 49.4833 Lac 4 + 1 22.3928 52.2333 Lac Beta-3 + 1 22.5217 50.2833 Lac Alpha-7 + 1 22.4922 47.7 Lac 5 + 1 22.3506 46.5333 Lac 2 + 1 22.5083 43.1167 Lac 6 + +Leo + 0 9.41056 26.1667 + 1 9.52833 22.9667 + 1 9.76389 23.7667 + 1 9.87944 26 + 1 9.41056 26.1667 Finish going around head + 0 9.87944 26 + 1 10.2778 23.4167 + 1 10.3328 19.8333 + 1 10.1222 16.75 + 1 10.1394 11.9667 Regulus + 0 9.76389 23.7667 Draw + 1 10.1222 16.75 Front of neck + 1 9.68556 9.88333 and forward front leg + 0 10.1222 16.75 eta + 1 11.2372 15.4167 theta + 1 11.235 20.5167 Zozca + 0 11.8178 14.5667 Denebola + 1 11.235 20.5167 Zozca + 1 11.0389 20.1667 60 + 1 10.3328 19.8333 Gamma + 0 11.2372 15.4167 theta + 1 11.3983 10.5167 iota + 1 11.3522 6.01667 sigma + 0 11.2372 15.4167 theta + 1 10.5467 9.3 + +Leo Minor + 0 10.1239 35.25 LMi 21 + 1 10.4317 33.8 LMi 30 + 1 10.8883 34.2167 LMi 46 + 1 10.465 36.7 LMi Beta-31 + 1 10.1239 35.25 LMi 21 + 1 9.57056 36.4 LMi 10 + +Lepus + 0 5.22056 -12.9333 Lep Kappa-4 + 1 5.21556 -16.2 Lep Mu-5 + 1 5.09111 -22.3667 Lep Epsilon-2 + 1 5.47056 -20.75 Lep Beta-9 + 1 5.54556 -17.8167 Arneb + 1 5.78278 -14.8167 Lep Zeta-14 + 1 5.94 -14.1667 Lep Eta-16 + 1 5.85556 -20.8667 Lep Delta-15 + 1 5.74111 -22.4333 Lep Gamma-13 + 1 5.47056 -20.75 Lep Beta-9 + 0 5.54556 -17.8167 Arneb + 1 5.21556 -16.2 Lep Mu-5 + 1 5.32611 -13.1667 Lep Lambda-6 + +Libra + 0 15.6444 -29.7667 Lib Tau-40 + 1 15.6172 -28.1333 Lib Upsilo-39 + 1 15.5922 -14.7833 Zuben el Hakrabi + 1 15.2833 -9.36667 Zuben el Chamali + 1 14.8478 -16.0333 Lib Alpha2-9 + 1 15.0678 -25.2667 Lib Sigma-20 + 0 15.5922 -14.7833 Zuben el Hakrabi + 1 14.8478 -16.0333 Lib Alpha2-9 + +Lupus + 0 16.11 -36.8 Lup Theta + 1 15.8494 -33.6167 Lup Chi-5 + 1 15.6628 -34.4 Lup Psi1-3 + 1 15.3633 -36.25 Lup Phi1 + 1 16.0022 -38.3833 Lup Eta + 0 15.3633 -36.25 Lup Phi1 + 1 14.9756 -43.1333 Lup Beta + 1 14.6989 -47.3833 Lup Alpha + 1 14.6317 -49.4167 Lup Rho + 1 15.0856 -47.05 Lup Pi + 1 15.1472 -45.2667 Lup Lambda + 1 15.3561 -40.6333 Lup Delta + 1 15.4122 -39.7 Lup Upsilon + 1 15.3861 -36.85 Lup Phi2 + 1 15.3633 -36.25 Lup Phi1 + 0 14.6317 -49.4167 Lup Rho + 1 14.5433 -50.45 Lup Sigma + 0 15.0856 -47.05 Lup Pi + 1 15.1989 -48.7333 Lup Kappa1 + 1 15.205 -52.0833 Lup Zeta + 0 15.1472 -45.2667 Lup Lambda + 1 15.3089 -47.8667 Lup Mu + 1 15.3778 -44.6833 Lup Epsilon + 0 15.4122 -39.7 Lup Upsilon + 1 15.5856 -41.1667 Lup Gamma + 1 15.6344 -42.5667 Lup Omega + 1 15.6867 -44.6667 + 0 14.4361 -45.3667 Lup Tau2 + 1 14.6989 -47.3833 Lup Alpha + 1 14.3233 -46.05 Lup Iota + +Lynx + 0 9.35056 34.3833 move alpha + 2 9.31389 36.8 dotted 38 + 2 9.10889 38.45 dotted 9:06:32 38:27:08 + 2 9.01056 41.7667 dotted 9:00:38 41:46:58 + 2 8.38056 43.1833 dotted 31 + 2 7.445 49.2 dotted 21 + 2 6.95444 58.4167 dotted 15 + 2 6.32667 59 dotted 2 + +Lyra + 0 18.6156 38.7833 Vega + 1 18.3311 36.0667 Lyr Kappa-1 + 1 18.8344 33.3667 Sheliak + 1 18.9822 32.6833 Sulaphat + 1 19.2728 38.1333 Lyr Theta-21 + 1 19.2294 39.15 Lyr Eta-20 + 1 18.9222 43.95 Lyr 13 + 1 18.7389 39.6667 Lyr Epsilo1-4 + 2 18.6156 38.7833 Vega + 0 18.7461 37.6 Lyr Zeta1-6 + 1 18.8344 33.3667 Sheliak + 0 18.8956 36.9667 Lyr Delta1-11 + 1 18.9822 32.6833 Sulaphat + +Mensa + 0 6.17056 -74.75 move alpha + 2 5.53111 -76.3333 dotted gamma + 2 4.91944 -74.9333 dotted eta + 2 5.045 -71.3 dotted beta + +Microscopium + 0 21.3456 -40.8 move theta1 + 2 21.2989 -32.1667 dotted epsilon + 2 21.0211 -32.25 dotted gamma + 2 20.8328 -33.7667 dotted alpha + +Monoceros + 0 6.68278 9.9 Mon 15 + 1 6.54833 7.33333 Mon 13 + 1 6.39611 4.6 Mon Epsilon-8 + 1 6.79778 2.41667 Mon 18 + 1 6.54833 7.33333 Mon 13 + 0 6.79778 2.41667 Mon 18 + 1 7.19778 -0.483333 Mon Delta-22 + 1 6.48056 -7.03333 Mon Beta-11 + 1 6.24778 -6.26667 Mon Gamma-5 + 0 7.19778 -0.483333 Mon Delta-22 + 1 8.02056 -1.38333 Mon 28 + 1 8.14333 -2.98333 Mon Zeta-29 + 0 8.02056 -1.38333 Mon 28 + 1 7.68722 -9.55 Mon Alpha-26 + +Musca + 0 11.76 -66.7167 Mus Lambda + 1 11.8039 -66.8 Mus Mu + 1 12.2928 -67.95 Mus Epsilon + 1 12.62 -69.1333 Mus Alpha + 1 13.0378 -71.5333 Mus Delta + 1 12.5411 -72.1167 Mus Gamma + 1 12.62 -69.1333 Mus Alpha + 1 12.7711 -68.1 Mus Beta + +Norma + 0 16.1083 -45.1667 Nor Delta + 1 16.0533 -49.2167 Nor Eta + 1 16.3306 -50.15 Nor Gamma2 + 1 16.4533 -47.55 Nor Epsilon + 1 16.1083 -45.1667 Nor Delta + +Octans + 0 14.4483 -83.6667 + 1 21.6911 -77.3833 + 1 22.7672 -81.3667 + 1 14.4483 -83.6667 + +Ophiuchus + 0 17.3894 -28.1333 43 + 1 17.2556 -26.6 36 + 1 17.3667 -24.9833 Theta + 1 17.4394 -24.1667 44 + 1 17.35 -21.1167 Xi + 1 17.1728 -15.7167 Eta + 1 16.6194 -10.5667 Zeta + 1 16.5189 -16.6 Phi + 1 16.45 -18.45 Chi + 1 16.4017 -20.0333 Psi + 1 16.5356 -21.4667 Omega + 0 17.1728 -15.7167 Eta + 1 17.7244 4.56667 Kelb al Rai + 1 17.5817 12.55 Ras Alhague + 1 16.9611 9.36667 Kappa + 1 16.6194 -10.5667 Zeta + 0 18.0106 2.91667 67 + 1 17.7978 2.7 Gamma + 1 17.7244 4.56667 Kelb al Rai + 1 16.9611 9.36667 Kappa + 1 16.8994 10.15 Iota + 1 16.515 1.98333 Lambda + 1 16.2389 -3.68333 Delta + +Orion + 0 5.79611 -9.66667 Ori Kappa-53 + 1 5.67944 -1.93333 Ori Zeta-50 + 1 5.91944 7.4 Betelgeuse + 1 5.51333 5.95 Ori 32 + 1 5.41889 6.35 Bellatrix + 1 5.53333 -0.283333 Mintaka + 1 5.40778 -2.38333 Ori Eta-28 + 1 5.24222 -8.2 Rigel + 0 5.67944 -1.93333 Ori Zeta-50 + 1 5.60333 -1.2 Alnilam + 1 5.53333 -0.283333 Mintaka + 0 5.51333 5.95 Ori 32 + 1 5.58556 9.93333 Ori Lambda-39 + 0 5.41889 6.35 Bellatrix + 1 4.83056 6.96667 Ori Pi3-1 + 0 4.97556 1.71667 Ori Pi6-10 + 1 4.90444 2.43333 Ori Pi5-8 + 1 4.85333 5.6 Ori Pi4-3 + 1 4.83056 6.96667 Ori Pi3-1 + 1 4.84333 8.9 Ori Pi2-2 + 1 4.915 10.15 Ori Pi1-7 + 1 4.93944 13.5167 Ori Omicro2-9 + 0 5.91944 7.4 Betelgeuse + 1 6.04 9.65 Ori Mu-61 + 1 6.19889 14.2167 Ori Xi-70 + 1 6.12611 14.7667 Ori Nu-67 + 1 5.90611 20.2833 Ori Chi1-54 + 1 6.06556 20.1333 Ori Chi2-62 + 1 6.19889 14.2167 Ori Xi-70 + +Pavo + 0 21.4406 -65.35 Pav Gamma + 1 20.4272 -56.7333 Pav Alpha + 1 20.1456 -66.1667 Pav Delta + 1 20.01 -72.9 Pav Epsilon + 1 18.7172 -71.4167 Pav Zeta + 1 18.9494 -67.2333 Pav Kappa + 1 20.1456 -66.1667 Pav Delta + 1 20.7494 -66.2 Pav Beta + 1 21.4406 -65.35 Pav Gamma + 0 18.9494 -67.2333 Pav Kappa + 1 18.8706 -62.1833 Pav Lambda + 1 18.1428 -63.6667 Pav Pi + 1 17.7622 -64.7167 Pav Eta + 0 18.1428 -63.6667 Pav Pi + 1 18.3872 -61.4833 Pav Xi + 1 18.8706 -62.1833 Pav Lambda + +Pegasus + 0 21.7361 9.86667 Eniph + 1 22.6911 10.8167 Homam + 0 22.17 6.18333 theta + 1 22.6911 10.8167 Homam + 1 22.7783 12.1667 xi + 1 23.0794 15.2 Markab + 1 0.220556 15.1833 Algenib + 2 0.139444 29.0833 Alpheratz + 2 23.0628 28.0667 beta + 1 23.0794 15.2 Markab + 0 0.220556 15.1833 Algenib + 1 23.0628 28.0667 beta + 0 21.3678 19.8 1 + 1 21.7439 25.6333 kappa + 1 22.1167 25.3333 iota + 1 22.7756 23.55 lambda + 1 22.8333 24.6 mu + 1 22.7167 30.2167 eta + 1 22.1533 33.1667 pi + 0 21.7417 17.35 9 + 1 22.1167 25.3333 iota + 0 22.1167 25.3333 iota + 1 22.7783 12.1667 xi + 0 23.0794 15.2 Markab + 1 22.7756 23.55 lambda + +Perseus + 0 4.10944 50.35 lambda + 1 4.24778 48.4 mu + 1 4.14444 47.7 48 + 1 3.715 47.7833 delta + 1 3.60778 48.1833 psi + 1 3.405 49.85 Mirfak + 1 3.08 53.5 gamma + 1 2.845 55.8833 eta + 1 2.90389 52.75 tau + 1 3.15111 49.6 iota + 0 3.08 53.5 gamma + 1 2.90389 52.75 tau + 0 3.405 49.85 Mirfak + 1 3.50944 47.9833 sigma + 1 3.75333 42.5667 nu + 1 3.96389 40 epsilon + 1 3.98278 35.7833 xi + 1 3.90222 31.8833 zeta + 1 3.73833 32.2833 omicron + 0 3.405 49.85 Mirfak + 1 3.15111 49.6 iota + 1 2.73611 49.2167 theta + 1 1.72722 50.6833 phi + 0 3.15111 49.6 iota + 1 3.15833 44.85 kappa + 1 3.13611 40.95 Algol + 1 3.08611 38.8333 rho + 1 2.84278 38.3167 16 + 0 3.13611 40.95 Algol + 1 3.96389 40 epsilon + +Phoenix + 0 1.14 -55.2333 Phe Zeta + 1 1.10167 -46.7167 Phe Beta + 1 0.688889 -46.0833 Phe Mu + 1 0.436667 -43.6667 Phe Kappa + 1 0.438333 -42.3 Phe Alpha + 1 0.156667 -45.7333 Phe Epsilon + 1 0.436667 -43.6667 Phe Kappa + 0 1.52111 -49.0667 Phe Delta + 1 1.10167 -46.7167 Phe Beta + 1 1.47278 -43.3167 Phe Gamma + 1 0.688889 -46.0833 Phe Mu + 0 1.10167 -46.7167 Phe Beta + 1 0.722778 -57.45 Phe Eta + 1 0.688889 -46.0833 Phe Mu + +Pictor + 0 6.80333 -61.9333 Pic Alpha + 1 5.83056 -56.1667 Pic Gamma + 1 5.78833 -51.05 Pic Beta + 1 6.80333 -61.9333 Pic Alpha + +Pisces + 0 23.6661 5.63333 Psc Iota-17 + 1 23.4661 6.38333 Psc Theta-10 + 1 23.3389 5.38333 Psc 7 + 1 23.2861 3.28333 Psc Gamma-6 + 1 23.4539 1.11667 Psc 9 + 1 23.7006 1.78333 Psc Lambda-18 + 1 23.6661 5.63333 Psc Iota-17 + 1 23.9883 6.86667 Psc Omega-28 + 1 0.811667 7.58333 Psc Delta-63 + 1 1.04889 7.88333 Psc Epsilo-71 + 1 1.22944 7.58333 Psc Zeta-86 + 1 1.50333 6.15 Psc Mu-98 + 1 1.69056 5.48333 Psc Nu-106 + 1 2.03389 2.76667 Kaitain + 1 1.75667 9.15 Psc Omicr-110 + 1 1.525 15.35 Psc Eta-99 + 1 1.43778 19.1667 Psc Rho-93 + 1 1.22889 24.5833 Psc Phi-85 + 1 1.32444 27.2667 Psc Upsilo-90 + 1 1.19444 30.0833 Psc Tau-83 + 1 1.22889 24.5833 Psc Phi-85 + +Piscis Austrinus + 0 21.7489 -33.0167 PsA Iota-9 + 1 22.14 -32.9833 PsA Mu-14 + 1 22.525 -32.3333 PsA Beta-17 + 1 22.8756 -32.8667 PsA Gamma-22 + 1 22.9322 -32.5333 PsA Delta-23 + 1 22.9611 -29.6167 Fomalhaut + 1 22.6778 -27.0333 PsA Epsilo-18 + 1 22.14 -32.9833 PsA Mu-14 + 1 21.7956 -30.8833 PsA Theta-10 + 1 21.7489 -33.0167 PsA Iota-9 + +Puppis + 0 6.39944 -52.6833 Canopus + 1 6.62944 -43.1833 Pup Nu + 1 7.28556 -37.0833 Pup Pi + 1 7.58944 -28.3667 GSC star + 1 7.64722 -26.8 'Nother GSC star + 1 7.63833 -25.3667 GSC star + 1 7.82167 -24.8667 Pup Xi-7 + 1 8.12556 -24.3 Pup Rho-15 + 1 8.06 -40 Pup Zeta + 1 8.15889 -47.3333 Vel Gamma2 + 0 7.58944 -28.3667 GSC Star + 1 7.73 -28.95 Pup 3 + 1 7.80167 -25.9333 Pup Omicron + 1 7.82167 -24.8667 Pup Xi-7 + +Pyxis + 0 8.06 -40 Pup Zeta + 1 8.66833 -35.3 + 1 8.72667 -33.1833 + 1 8.84222 -27.7 + +Reticulum + 0 4.24 -62.4667 move alpha + 1 3.73667 -64.8 draw beta + 1 3.97889 -61.4 draw delta + 1 4.27444 -59.3 draw epsilon + 1 4.24 -62.4667 draw alpha + +Sagitta + 0 19.9789 19.4833 + 1 19.7894 18.5333 + 1 19.6839 17.4667 + 0 19.7894 18.5333 + 1 19.6683 18 + +Sagittarius + 0 18.2939 -36.75 Sgr Eta + 1 18.4028 -34.3833 Kaus Australis + 1 18.35 -29.8167 Sgr Delta-19 + 1 18.4661 -25.4167 Sgr Lambda-22 + 1 18.2294 -21.05 Sgr Mu-13 + 1 18.0967 -30.4167 Sgr Gamma2-10 + 1 18.2939 -36.75 Sgr Eta + 0 18.0967 -30.4167 Sgr Gamma2-10 + 1 18.35 -29.8167 Sgr Delta-19 + 1 18.7611 -26.9833 Sgr Phi-27 + 1 18.9211 -26.2833 Sgr Sigma-34 + 1 18.9622 -21.1 Sgr Xi2-37 + 1 19.1628 -21.0167 Sgr Pi-41 + 1 19.3611 -17.8333 Sgr Rho1-44 + 1 19.3622 -15.95 Sgr Upsilo-46 + 0 19.1628 -21.0167 Sgr Pi-41 + 1 18.9211 -26.2833 Sgr Sigma-34 + 1 19.1156 -27.6667 Sgr Tau-40 + 1 19.9956 -35.2667 Sgr Theta1 + 1 19.9211 -41.8667 Sgr Iota + 0 18.7611 -26.9833 Sgr Phi-27 + 1 19.0433 -29.8667 Sgr Zeta-38 + 1 19.3983 -40.6 Sgr Alpha + 1 19.3772 -44.45 Sgr Beta1 + 0 19.3983 -40.6 Sgr Alpha + 1 19.9956 -35.2667 Sgr Theta1 + 0 19.0433 -29.8667 Sgr Zeta-38 + 1 19.1156 -27.6667 Sgr Tau-40 + +Scorpius + 0 16.0056 -22.6167 Sco Delta-7 + 1 16.0906 -19.8 Sco Beta1-8 + 1 16.1994 -19.4333 Sco Nu-14 + 1 16.3533 -25.5833 Sco Sigma-20 + 1 16.205 -27.9167 Sco 13 + 1 15.9483 -29.2 Sco Rho-5 + 1 15.9811 -26.1 Sco Pi-6 + 0 16.3533 -25.5833 Sco Sigma-20 + 1 16.49 -26.4167 Antares + 1 16.5983 -28.2 Sco Tau-23 + 1 16.8361 -34.2833 Sco Epsilo-26 + 1 16.8644 -38.0333 Sco Mu1 + 1 16.91 -42.35 Sco Zeta2 + 1 17.2028 -43.2333 Sco Eta + 1 17.6222 -42.9833 Sco Theta + 1 17.7933 -40.1167 Sco Iota1 + 1 17.7083 -39.0167 Sco Kappa + 1 17.5128 -37.2833 Sco Upsilo-34 + 1 17.56 -37.1 Shaula + 1 17.8306 -37.0333 NGC 6441 (GC) ? + +Sculptor + 0 0.976667 -29.35 move alpha + 1 23.815 -28.1167 draw delta + 1 23.3133 -32.5167 draw gamma + 1 23.5494 -37.8167 draw beta + +Scutum + 0 18.5867 -8.23333 Sct Alpha + 1 18.4867 -14.55 Sct Gamma + 1 18.7044 -9.05 Sct Delta + 1 18.7861 -4.73333 Sct Beta + 1 18.5867 -8.23333 Sct Alpha + +Serpens Caput + 0 16.4633 -8.36667 Upsilon Oph + 1 16.3056 -4.7 Epsilon Oph + 1 16.2389 -3.68333 Delta Oph + 1 15.8267 -3.41667 Mu + 1 15.8383 2.18333 Omega + 1 15.8467 4.46667 Epsilon + 1 15.7378 6.41667 Unulkalhay + 1 15.7817 7.35 Lambda + 1 15.58 10.5333 Delta + 1 15.7694 15.4167 Beta + 1 15.9406 15.65 Gamma + 1 15.8122 18.1333 Kappa + 1 15.6922 19.6667 Iota + 1 15.7694 15.4167 Beta + +Serpens Cauda + 0 18.9367 4.2 Theta + 1 18.1222 9.55 Oph 72 + 1 18.0906 2.48333 Oph 70 + 1 18.355 -2.88333 Eta + 1 17.9839 -9.76667 Oph Nu + 1 17.69 -12.8667 Omicron + 1 17.6261 -15.3833 Xi + 1 17.3472 -12.8333 Nu + +Sextans + 0 10.4911 -2.73333 move delta + 2 10.5044 -0.633333 dotted beta + 2 10.1322 -0.366667 dotted alpha + 2 9.875 -8.1 dotted gamma + +Taurus + 0 5.43833 28.6 Alnath + 1 4.70389 22.95 tau + 1 4.43833 22.8 upsilon + 1 4.47667 19.1667 epsilon + 1 4.42444 17.9167 delta-3 + 1 4.38222 17.5333 delta-1 + 1 4.33 15.6167 gamma + 1 4.47778 15.8667 theta-2 + 1 4.59833 16.5 Aldebaran + 1 5.62722 21.1333 zeta + 1 4.70389 22.95 tau + 0 4.33 15.6167 gamma + 1 4.01111 12.4833 lambda + 1 3.45278 9.71667 xi-2 + 1 3.51444 12.9333 5 + 0 3.45278 9.71667 xi-2 + 1 3.41333 9.01667 omicron-1 + 1 3.61444 0.4 10 + 0 3.45278 9.71667 xi-2 + 1 4.05222 5.98333 nu + 0 4.25833 8.88333 mu + 1 4.33 15.6167 gamma + 1 4.63556 12.5 90 + 1 4.59389 10.15 88 + 0 4.43833 22.8 upsilon + 1 3.78333 24.1167 Pleides + +Telescopium + 0 18.4494 -45.9667 + 1 18.4806 -49.0667 + +Triangulum + 0 1.88444 29.5833 Tri Alpha-2 + 1 2.28833 33.85 Tri Gamma-9 + 1 2.15889 34.9833 Tri Beta-4 + 1 1.88444 29.5833 Tri Alpha-2 + +Triangulum Australe + 0 16.8106 -69.0167 move alpha + 1 15.9189 -63.4167 draw beta + 1 15.6117 -66.3167 draw epsilon + 1 15.315 -68.6667 draw gamma + 1 16.8106 -69.0167 draw alpha + +Tucana + 0 22.3083 -60.25 + 1 23.2906 -58.2333 + 1 23.9983 -65.5667 + 1 0.334444 -64.8667 + 1 0.525556 -62.95 + 1 23.2906 -58.2333 + +Ursa Major + 0 13.7922 49.3 Benetnasch + 1 13.3989 54.9167 Mizar + 1 12.9006 55.95 Alioth + 1 12.2572 57.0167 Megrez + 1 11.8972 53.6833 Phecda + 1 11.0306 56.3667 Merak + 1 11.0622 61.75 Dubhe + 0 13.7922 49.3 Benetnasch + 2 11.7672 47.7667 Chi + 2 11.1611 44.4833 Psi + 2 11.3078 33.0833 Nu + 0 11.3028 31.5167 Xi + 2 10.3722 41.4833 Mu + 2 9.06056 47.15 Kappa + 2 8.98667 48.0333 Talitha + 2 8.50444 60.7167 Omicron + 2 9.52556 63.05 23 + 2 11.0622 61.75 Dubhe + 2 12.2572 57.0167 Megrez + 0 9.52556 63.05 23 + 2 9.84944 59.0333 Upsilon + 2 9.54722 51.6667 Theta + 2 10.285 42.9 Lambda + +Ursa Minor + 0 2.53 89.25 move polaris + 1 17.5367 86.5833 draw umi delta + 1 16.7661 82.0333 draw umi epsilon + 1 15.7339 77.7833 draw umi zeta + 1 14.845 74.15 draw umi beta + 1 15.345 71.8333 draw umi gamma + 1 16.2917 75.75 draw umi eta + 1 15.7339 77.7833 draw umi zeta + +Vela + 0 8.745 -54.7 move delta + 1 9.36833 -55 draw kappa + 1 9.94722 -54.5667 draw phi + 1 10.7794 -49.4167 draw mu + 1 10.2456 -42.1167 draw 10:14:44 -42:07:20 + 1 9.51167 -40.4667 draw psi + 1 9.13278 -43.4167 draw lambda + 1 8.15778 -47.3333 draw gamma1 + 1 8.745 -54.7 draw delta + +Virgo + 0 12.0867 8.71667 + 1 11.7644 6.51667 + 1 11.845 1.75 + 1 12.3317 -0.666667 + 1 12.6944 -1.43333 + 1 12.9267 3.38333 + 1 13.0361 10.95 + 0 12.9267 3.38333 + 1 13.5783 -0.583333 + 1 13.42 -11.15 + 1 13.1656 -5.53333 + 1 12.6944 -1.43333 + 0 13.5783 -0.583333 + 1 14.0272 1.53333 + 1 14.7706 1.88333 + 0 13.42 -11.15 + 1 14.215 -10.2667 + 1 14.2667 -6 + 1 14.7178 -5.65 + 0 12.0867 8.73333 Vir Omicron-9 + 1 12.6944 -1.43333 Vir Gamma-29 + 0 14.0272 1.55 Vir Tau-93 + 1 14.2667 -6 Vir Iota-99 + +Volans + 0 9.04056 -66.3833 move alpha + 1 8.33 -71.5 draw kappa1 + 1 7.69667 -72.6 draw zeta + 1 7.145 -70.4833 draw gamma1 + 1 7.28 -67.95 draw delta + 1 8.13167 -68.6167 draw epsilon + 1 8.42889 -66.1333 draw beta + 1 9.04056 -66.3833 draw alpha + +Vulpecula + 0 19.8911 24.0667 + 1 19.4783 24.65 diff --git a/GUI/xephem/auxil/README b/GUI/xephem/auxil/README new file mode 100644 index 0000000..950bd7d --- /dev/null +++ b/GUI/xephem/auxil/README @@ -0,0 +1,39 @@ +This directory contains support files that are used by xephem. These files are +only ever read by xephem and so may be shared by all users. + +HAReyfigs.csf H. A. Rey constellation figures +README this file +SOHO_512_20030809_0719_eit_304.gif sample SOHO image +analemma.plt sample plot +annotation.ano sample annotation file +astorb2edb.pl script to convert Lowell asteroids format to edb +classicfigs.csf classic constellation figures +dearth.gif daytime earth image +eyepieces.epl sample eyepiece placement file +eyepieces.eyp sample eyepiece definition file +favorites.fav sample favorite objects file +jupiter.9910 BDL Jupiter moon model, 1999-2010 +jupitermap.gif Jupiter image +logo.gif banner logo image +mars.9910 BDL Mars moon model, 1999-2010 +mars_db Martian surface features +marsmap.jpg Mars image +moon.fts Full moon image +mpcorb2edb.pl script to convert Harvard MPC asteroid format to .edb +nearth.gif nighttime Earth image +sample.hzn default horizon map +saturn00.gif Saturn image with rings tilted 0 degrees +saturn04.gif Saturn image with rings tilted 4 degrees +saturn10.gif Saturn image with rings tilted 10 degrees +saturn16.gif Saturn image with rings tilted 16 degrees +saturn20.gif Saturn image with rings tilted 20 degrees +saturn24.gif Saturn image with rings tilted 24 degrees +saturne.9910 BDL Saturn moon model, 1999-2010 +starcensus.txt AAVSO star names list +uranus.9910 BDL Uranus moon model, 1999-2010 +wmm.cof magnetic declination model +xephem_sites Earth sites table +xephem_skyhist sample sky view history + +! For RCS Only -- Do Not Edit +! @(#) $RCSfile: README,v $ $Date: 2005/08/02 02:04:09 $ $Revision: 1.8 $ $Name: $ diff --git a/GUI/xephem/auxil/SOHO_512_20090703_1900_eit_171.gif b/GUI/xephem/auxil/SOHO_512_20090703_1900_eit_171.gif new file mode 100644 index 0000000..fe16f10 Binary files /dev/null and b/GUI/xephem/auxil/SOHO_512_20090703_1900_eit_171.gif differ diff --git a/GUI/xephem/auxil/analemma.plt b/GUI/xephem/auxil/analemma.plt new file mode 100644 index 0000000..1a99055 --- /dev/null +++ b/GUI/xephem/auxil/analemma.plt @@ -0,0 +1,367 @@ +* Sun Az and Alt at noon local time, 42N latitude +A,177.445540386,25.0113307887 +A,177.32248102,25.0921886224 +A,177.200182169,25.1804990949 +A,177.078749059,25.2762261609 +A,176.958286447,25.3793307622 +A,176.838898472,25.4897709313 +A,176.720688639,25.607501881 +A,176.60375977,25.732476092 +A,176.488213835,25.8646433628 +A,176.374151518,26.0039507692 +A,176.261671484,26.1503425393 +A,176.150869354,26.3037598941 +A,176.041836485,26.4641408875 +A,175.934658718,26.6314202229 +A,175.82941528,26.8055290318 +A,175.726178054,26.9863946903 +A,175.625011401,27.1739408701 +A,175.525972558,27.3680880408 +A,175.429112486,27.5687544708 +A,175.334476935,27.7758574659 +A,175.242107593,27.9893143267 +A,175.152043336,28.2090425402 +A,175.064321613,28.4349591044 +A,174.978979906,28.6669793847 +A,174.896057014,28.9050161246 +A,174.815593925,29.148979016 +A,174.737634119,29.3987747991 +A,174.662223373,29.6543075835 +A,174.589409173,29.915479138 +A,174.519239958,30.1821891034 +A,174.451764367,30.4543351992 +A,174.387030647,30.7318134461 +A,174.325086302,31.0145183684 +A,174.26597797,31.3023431544 +A,174.209751432,31.595179804 +A,174.156451654,31.8929192791 +A,174.106122712,32.1954516246 +A,174.058807515,32.5026660082 +A,174.014547229,32.8144506658 +A,173.973380375,33.1306927856 +A,173.935341683,33.4512783688 +A,173.900460814,33.7760920999 +A,173.868761104,34.1050172733 +A,173.840258526,34.4379358504 +A,173.814961014,34.7747287267 +A,173.792868254,35.1152762692 +A,173.773971952,35.4594591166 +A,173.758256519,35.8071591089 +A,173.745700093,36.1582600498 +A,173.736275857,36.512647946 +A,173.729953567,36.8702105412 +A,173.726701186,37.2308363151 +A,173.726486412,37.5944133941 +A,173.729277881,37.9608288009 +A,173.735045916,38.3299681869 +A,173.743762774,38.7017159142 +A,173.755402502,39.0759552746 +A,173.769940528,39.4525687214 +A,173.787353187,39.8314380854 +A,173.807617328,40.2124447652 +A,173.830710093,40.5954698698 +A,173.856608888,40.9803943214 +A,173.885291485,41.3670989574 +A,173.916736149,41.7554646647 +A,173.950921667,42.1453725265 +A,173.987827153,42.5367039239 +A,174.027431535,42.9293405388 +A,174.069712679,43.3231642358 +A,174.114646186,43.7180568538 +A,174.162203938,44.1138999925 +A,174.21235253,44.5105749254 +A,174.265051746,44.9079627608 +A,174.320253258,45.3059448976 +A,174.377899704,45.7044037203 +A,174.437924287,46.1032234074 +A,174.500250949,46.5022906848 +A,174.564795144,46.9014953354 +A,174.631465105,47.3007302942 +A,174.700163476,47.6998912517 +A,174.770789078,48.098875855 +A,174.843238576,48.49758275 +A,174.917407837,48.8959107405 +A,174.993192857,49.293758244 +A,175.070490226,49.6910230739 +A,175.149197219,50.0876024694 +A,175.229211648,50.4833932517 +A,175.310431658,50.8782919992 +A,175.392755596,51.272195177 +A,175.476082058,51.664999203 +A,175.560310146,52.0566004665 +A,175.645339885,52.4468953411 +A,175.731072693,52.8357802357 +A,175.817411761,53.2231517136 +A,175.904262182,53.6089066632 +A,175.9915307,53.9929424213 +A,176.079124993,54.3751567248 +A,176.166952448,54.7554474419 +A,176.25491844,55.1337122012 +A,176.342924205,55.5098481687 +A,176.430864477,55.8837521983 +A,176.518625225,56.2553214153 +A,176.60608179,56.6244540993 +A,176.693097757,56.991050626 +A,176.779524697,57.3550142199 +A,176.865202821,57.7162513453 +A,176.949962386,58.0746716639 +A,177.033625632,58.4301876039 +A,177.116008956,58.7827136698 +A,177.196924989,59.132165648 +A,177.276184353,59.4784598475 +A,177.353596935,59.8215124917 +A,177.42897266,60.1612393441 +A,177.502121875,60.4975555874 +A,177.572855499,60.8303758833 +A,177.640985177,61.159614492 +A,177.706323609,61.4851853618 +A,177.768685216,61.8070021697 +A,177.827887173,62.1249783221 +A,177.883750802,62.4390269264 +A,177.936103158,62.749060757 +A,177.984778638,63.0549923017 +A,178.029620356,63.3567339581 +A,178.070481099,63.6541983131 +A,178.107223704,63.9472982791 +A,178.139720653,64.2359468795 +A,178.167852707,64.5200567279 +A,178.191506498,64.7995395393 +A,178.210571301,65.074306073 +A,178.22493559,65.3442666952 +A,178.234484127,65.6093324137 +A,178.239096216,65.8694160262 +A,178.238645373,66.1244330185 +A,178.23300037,66.374301997 +A,178.222027397,66.6189446366 +A,178.205593031,66.8582852765 +A,178.183567635,67.0922503462 +A,178.155828762,67.3207677578 +A,178.122264202,67.5437663382 +A,178.082774445,67.7611753564 +A,178.037274475,67.9729242181 +A,177.985694941,68.1789423748 +A,177.927982918,68.3791594082 +A,177.864102521,68.5735051897 +A,177.794035705,68.7619100414 +A,177.71778351,68.944304897 +A,177.635367879,69.1206214802 +A,177.54683406,69.2907924757 +A,177.452253445,69.4547516734 +A,177.351726523,69.6124341559 +A,177.245385552,69.7637766625 +A,177.133396571,69.90871814 +A,177.015960528,70.0472002504 +A,176.893313246,70.1791674887 +A,176.765723791,70.3045667576 +A,176.633490803,70.4233466494 +A,176.496936835,70.5354569619 +A,176.356401532,70.64084889 +A,176.212235016,70.7394759426 +A,176.064792671,70.8312952183 +A,175.914431853,70.9162685086 +A,175.761510412,70.9943628646 +A,175.606386654,71.0655505917 +A,175.449420344,71.1298088964 +A,175.290974348,71.1871194462 +A,175.131416385,71.2374679675 +A,174.971120413,71.2808438827 +A,174.81046726,71.3172399743 +A,174.649844336,71.346652124 +A,174.489644405,71.3690791759 +A,174.330263582,71.384522903 +A,174.17209893,71.3929879993 +A,174.015546112,71.3944820573 +A,173.860997515,71.3890155676 +A,173.708841111,71.376601994 +A,173.559460187,71.3572579119 +A,173.413233921,71.3310031642 +A,173.270538505,71.2978610451 +A,173.131748298,71.2578585945 +A,172.997236503,71.211027043 +A,172.867375111,71.1574022543 +A,172.742533963,71.0970248249 +A,172.623078599,71.0299395398 +A,172.509366361,70.9561941993 +A,172.401740472,70.8758382583 +A,172.300522672,70.7889219154 +A,172.20600577,70.6954960603 +A,172.118447621,70.595612951 +A,172.038067439,70.4893270466 +A,171.965044557,70.3766954135 +A,171.899519214,70.25777752 +A,171.841594837,70.132634675 +A,171.791341297,70.0013294804 +A,171.74879861,69.8639254657 +A,171.713980658,69.7204868387 +A,171.686878494,69.5710782452 +A,171.667463005,69.4157645322 +A,171.655686745,69.2546105646 +A,171.651485029,69.0876810961 +A,171.654776523,68.9150406386 +A,171.66546372,68.7367533161 +A,171.683433671,68.5528827678 +A,171.708559232,68.3634921847 +A,171.740700985,68.1686445079 +A,171.779709889,67.9684027594 +A,171.82543049,67.7628304795 +A,171.877704344,67.5519922726 +A,171.936373173,67.3359544404 +A,172.001281433,67.1147855898 +A,172.072278073,66.8885569805 +A,172.14921724,66.6573423317 +A,172.231957602,66.4212169599 +A,172.320360044,66.1802564656 +A,172.414283941,65.9345355337 +A,172.513582778,65.6841274308 +A,172.618100152,65.4291043645 +A,172.727667019,65.1695382999 +A,172.842100556,64.9055015801 +A,172.961204509,64.6370669812 +A,173.084770657,64.3643073371 +A,173.212580961,64.0872951334 +A,173.344410057,63.8061023273 +A,173.480027819,63.5208003622 +A,173.619201744,63.2314602272 +A,173.761698941,62.9381524891 +A,173.907287542,62.6409473164 +A,174.055737505,62.339914494 +A,174.206820919,62.0351233917 +A,174.360312056,61.7266428791 +A,174.515987427,61.4145412654 +A,174.673626081,61.0988863615 +A,174.833010316,60.7797457206 +A,174.99392689,60.4571870557 +A,175.156168688,60.131278817 +A,175.319536688,59.8020908941 +A,175.48384194,59.469695362 +A,175.648907269,59.1341671358 +A,175.814568421,58.795584366 +A,175.980674421,58.4540284057 +A,176.147086952,58.1095832529 +A,176.313678721,57.762334559 +A,176.48033092,57.4123685532 +A,176.646930167,57.0597713601 +A,176.813365418,56.7046289845 +A,176.97952532,56.3470278023 +A,177.145296334,55.9870550722 +A,177.310561687,55.6247990556 +A,177.475201108,55.2603487134 +A,177.639091149,54.8937932548 +A,177.802105932,54.5252218164 +A,177.964118151,54.1547233461 +A,178.125000133,53.7823866093 +A,178.284624798,53.4083002322 +A,178.442866376,53.032552744 +A,178.599600791,52.6552325858 +A,178.754705776,52.2764280441 +A,178.908060803,51.8962271108 +A,179.059547019,51.5147173473 +A,179.209047329,51.1319858657 +A,179.356446786,50.7481195038 +A,179.501633356,50.3632052227 +A,179.644499048,49.9773307123 +A,179.784941322,49.590585143 +A,179.922864589,49.2030599391 +A,180.058181581,48.8148494043 +A,180.190814371,48.4260510505 +A,180.320694842,48.0367655484 +A,180.447764512,47.647096304 +A,180.571973714,47.2571487552 +A,180.693280222,46.8670295961 +A,180.811647506,46.476846198 +A,180.927042842,46.0867064217 +A,181.039435468,45.696718789 +A,181.148794982,45.3069927707 +A,181.255090084,44.9176389064 +A,181.35828774,44.5287686385 +A,181.458352792,44.1404939448 +A,181.555247966,43.752926946 +A,181.648934182,43.3661796182 +A,181.739371017,42.9803636441 +A,181.826517164,42.595590366 +A,181.910330776,42.2119707761 +A,181.990769633,41.8296154699 +A,182.067791152,41.4486345115 +A,182.141352309,41.0691372115 +A,182.211409588,40.6912318812 +A,182.27791909,40.3150256701 +A,182.340836915,39.940624609 +A,182.400119895,39.5681339493 +A,182.455726644,39.1976588126 +A,182.507618841,38.8293050448 +A,182.555762594,38.4631800651 +A,182.60012971,38.0993934817 +A,182.640698727,37.7380573276 +A,182.677455611,37.3792859047 +A,182.710394047,37.0231953327 +A,182.739515307,36.6699029618 +A,182.764827696,36.3195268098 +A,182.786345649,35.9721851579 +A,182.804088575,35.6279963612 +A,182.818079563,35.2870788457 +A,182.828344091,34.9495511945 +A,182.834908848,34.6155322049 +A,182.837800795,34.2851408266 +A,182.837046536,33.9584959478 +A,182.83267202,33.6357160706 +A,182.824702524,33.3169189694 +A,182.813162798,33.0022214282 +A,182.798077235,32.6917390798 +A,182.779469951,32.3855862925 +A,182.757364711,32.0838760259 +A,182.731784701,31.7867196094 +A,182.702752219,31.4942264473 +A,182.670288393,31.2065036692 +A,182.634413066,30.9236557857 +A,182.595144988,30.6457844831 +A,182.552502401,30.3729887517 +A,182.506504003,30.105365475 +A,182.457170163,29.8430103922 +A,182.404524202,29.5860191201 +A,182.348593589,29.3344878573 +A,182.289411013,29.0885135441 +A,182.227015307,28.8481935023 +A,182.161452182,28.613624781 +A,182.092774669,28.3849034846 +A,182.02104316,28.1621242788 +A,181.946324988,27.945380131 +A,181.868693621,27.7347622214 +A,181.788227562,27.5303599342 +A,181.705009128,27.3322608699 +A,181.619123251,27.1405508626 +A,181.530656461,26.9553139743 +A,181.439696133,26.776632413 +A,181.346330027,26.6045863417 +A,181.250646084,26.4392536192 +A,181.152732385,26.2807095554 +A,181.052677148,26.1290267243 +A,180.950568641,25.9842748015 +A,180.8464949,25.8465203704 +A,180.740543241,25.7158266878 +A,180.632799609,25.592253423 +A,180.523347891,25.4758563588 +A,180.412269317,25.3666870295 +A,180.299642154,25.2647923687 +A,180.185541845,25.1702145975 +A,180.070041651,25.0829916206 +A,179.953213666,25.0031579925 +A,179.835129965,24.9307461628 +A,179.715863704,24.8657874698 +A,179.59549017,24.8083124306 +A,179.474087858,24.758350239 +A,179.3517396,24.7159277911 +A,179.228533536,24.6810687449 +A,179.104563695,24.6537929804 +A,178.979930002,24.634116507 +A,178.854737718,24.6220516222 +A,178.729096432,24.6176070989 +A,178.603118816,24.6207883207 +A,178.476919326,24.6315974003 +A,178.350613043,24.6500333044 +A,178.224314777,24.6760919424 +A,178.098138483,24.7097661633 +A,177.972196944,24.7510456754 +A,177.846601664,24.7999169482 +A,177.721462828,24.8563631303 +A,177.596889216,24.9203639577 +A,177.472987901,24.9918956236 diff --git a/GUI/xephem/auxil/annotation.ano b/GUI/xephem/auxil/annotation.ano new file mode 100644 index 0000000..8f7f98a --- /dev/null +++ b/GUI/xephem/auxil/annotation.ano @@ -0,0 +1,2 @@ + + diff --git a/GUI/xephem/auxil/astorb2edb.pl b/GUI/xephem/auxil/astorb2edb.pl new file mode 100755 index 0000000..a8cdb96 --- /dev/null +++ b/GUI/xephem/auxil/astorb2edb.pl @@ -0,0 +1,261 @@ +#!/usr/bin/perl +# convert astorb.txt to 2 .edb files. +# Usage: [-f] +# if -f then use ftp to get the script from lowell, else read it from stdin. +# is a prefix used in naming the generated .edb files. +# Two files are created: +# .edb contains only those asteroids which might ever be brighter +# than $dimmag (set below); +# _dim.edb contains the remaining asteroids. +# +# astorb is a set of elements for 30k+ asteroids maintained by Lowell +# Observatory. See ftp://ftp.lowell.edu/pub/elgb/astorb.html. From the +# Acknowledgments section of same: +# The research and computing needed to generate astorb.dat were funded +# principally by NASA grant NAGW-1470, and in part by the Lowell Observatory +# endowment. astorb.dat may be freely used, copied, and transmitted provided +# attribution to Dr. Edward Bowell and the aforementioned funding sources is +# made. +# +# grab RCS version +my $ver = '$Revision: 1.1 $'; +$ver =~ s/\$//g; +my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst, $me); +my $XCN=<$brtfn" or die "Can not create $brtfn\n"; +my $dimfn = "$fnbase"."_dim.edb"; # name of file for dim asteroids +open DIM, ">$dimfn" or die "Can not create $dimfn\n"; +print "Creating $brtfn and $dimfn..\n"; + +# build some common boilerplate +($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime; +$year += 1900; +$mon += 1; +$from = "# Data From ftp://ftp.lowell.edu/pub/elgb/astorb.dat.gz\n"; +$what = "# Generated by astorb2edb.pl $ver, (c) 2000 Elwood Downey\n"; +$when = "# Processed $year-$mon-$mday $hour:$min:$sec UTC\n"; + +# add boilerplate to each file +print BRT "# Asteroids ever brighter than $dimmag.\n"; +print BRT $from; +print BRT $what; +print BRT $when; +print BRT $XCN; +print DIM "# Asteroids never brighter than $dimmag.\n"; +print DIM $from; +print DIM $what; +print DIM $when; +print DIM $XCN; + +# process each astorb.dat entry. see astorb.txt from same site for format. +while (<$srcfd>) { + # build the name +my $nmbr = &s(1,6); + $nmbr =~ s/^s+//g; + $nmbr =~ s/\s+$//g; + $nmbr =~ s/\s+//g; + $nmbr = $nmbr+0; + + $name = &s(8,25); + $name =~ s/^ *//; + $name =~ s/ *$//; + + # gather the orbital params + $i = &s(149,157) + 0; + $O = &s(138,147) + 0; + $o = &s(127,136) + 0; + $a = &s(170,181) + 0; + $e = &s(159,168) + 0; + $M = &s(116,125) + 0; + $H = &s(43,47) + 0; + $G = &s(49,53) + 0; + $TM = &s(111,112) + 0; + $TD = &s(113,114) + 0; + $TY = &s(107,110) + 0; + + # skip obviously bogus entries + if ($a == 0) { + next; + } + + # decide whether it's ever bright + $per = $a*(1 - $e); + $aph = $a*(1 + $e); + if ($per < 1.1 && $aph > .9) { + $fd = BRT; # might be in the back yard some day :-) + } else { + $maxmag = $H + 5*&log10($per*&absv($per-1)); + $fd = $maxmag > $dimmag ? DIM : BRT; + } + + # print + print $fd "$nmbr " if ($nmbr != 0); + print $fd "$name"; + print $fd ",e,$i,$O,$o,$a,0,$e,$M,$TM/$TD/$TY,2000.0,$H,$G\n"; +} + +# remove fetched files, if new +if (defined($fetchok)) { + unlink $ORBFILE; + unlink $ORBGZFILE; +} + +print "Done\n"; +exit 0; + +# like substr($_,first,last), but one-based. +sub s { +my $str=(); +$str = $_; +# just to reduce the noise from -w. + substr ($str, $_[0]-1, $_[1] - $_[0]+1); +} + +# return log base 10 + +sub log10 { + .43429*log($_[0]); +} + +# return absolute value +sub absv { + $_[0] < 0 ? -$_[0] : $_[0]; +} + +# print usage message then die +sub usage +{ + my $base = $0; + $base =~ s#.*/##; + print "Usage: $base [-f] \n"; + print "$ver\n"; + print "Purpose: convert $ORBFILE to 2 .edb files.\n"; + print "Options:\n"; + print " -f: first ftp $ORBFILE from $ORBSITE, else read from stdin\n"; + print "Creates two files:\n"; + print " .edb: all asteroids ever brighter than $dimmag\n"; + print " _dim.edb: all asteroids never brighter than $dimmag\n"; + print "Note: If you downloaded the file astorb.dat or astorb.dat.gz,\n"; + print " run this script with the file name as the only command.\n"; + print " line option.\n"; + + exit 1; +} + +# get and explode the data +sub fetch +{ + # transfer + print "Getting $ORBFTPDIR/$ORBGZFILE from $ORBSITE...\n"; + $cmd_v1 = "curl -s --connect-timeout 10 -u 'anonymous:xephem\@clearskyinstitute.com' ftp://$ORBSITE/$ORBFTPDIR/$ORBGZFILE > $ORBGZFILE"; + $cmd_v2 = "curl -s --disable-epsv --connect-timeout 10 -u 'anonymous:xephem\@clearskyinstitute.com' ftp://$ORBSITE/$ORBFTPDIR/$ORBGZFILE > $ORBGZFILE"; + print "trying $cmd_v1\n"; + $curl_return = system "$cmd_v1"; + $curl_return = $curl_return >> 8; + if ($curl_return != 0) { + print "trying $cmd_v2\n"; + $curl_return = system "$cmd_v2"; + $curl_return = $curl_return >> 8; + } + if ($curl_return != 0) { + die "curl failed\n"; + } + + # explode + print "Decompressing $ORBGZFILE ...\n"; + $gunzip = "gunzip"; + !system "$gunzip < $ORBGZFILE > $ORBFILE" or die "$gunzip failed\n"; + -s $ORBFILE or die "$ORBFILE: failed to create from $gunzip $ORBGZFILE\n"; + + # flag + $fetchok = 1; +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: astorb2edb.pl,v $ $Date: 2014/07/07 01:45:10 $ $Revision: 1.1 $ $Name: $ diff --git a/GUI/xephem/auxil/classicfigs.csf b/GUI/xephem/auxil/classicfigs.csf new file mode 100644 index 0000000..3ed3cfa --- /dev/null +++ b/GUI/xephem/auxil/classicfigs.csf @@ -0,0 +1,1131 @@ +# This is an XEphem constellation figure definition file. It must contain +# exactly one figure for each of the 89 constellations. Leading white space, +# blank lines and lines beginning with # are ignored. Each figure definition +# begins with a line containing just its name followed by one or more lines +# of the form: +# drawcode ra dec [comment] +# where +# drawcode is a numeric value indicating a drawing instruction as follows: +# 0 move to ra dec +# 1 draw solid line to ra dec +# 2 draw dashed line to ra dec +# ra is decimal hours or sexigesimal h:m:s +# dec is decimal degrees or sexigesimal d:m:s +# the remainder of the line is ignored and may be any comments, typical is +# the name of a star being drawn to. + + +Andromeda + 0 2.065 42.3167 move gamma 1 + 1 1.16167 35.6167 draw beta + 1 0.655 30.85 draw delta + 1 0.139444 29.0833 draw alpha + 0 0.953333 23.4167 move eta + 1 0.788889 24.2667 draw zeta + 1 0.642222 29.3 draw epsilon + 1 0.655 30.85 draw delta + 1 0.614444 33.7167 draw pi + 1 0.284444 38.6667 draw theta + 1 23.6356 43.2667 draw iota + 1 23.6733 44.3333 draw kappa + 1 23.6256 46.45 draw lambda + 0 23.6356 43.2667 move iota + 1 23.0317 42.3167 draw omicron + 0 0.614444 33.7167 move pi + 1 1.16167 35.6167 draw beta + 1 0.945556 38.4833 draw mu + 1 0.83 41.0667 draw nu + 1 1.15833 47.2333 draw phi + 1 1.63278 48.6167 draw 51 + +Antlia + 0 9.48722 -35.95 move epsilon + 2 10.4522 -31.0667 dotted alpha + 2 10.945 -37.1333 dotted iota + +Apus + 0 14.7972 -79.0333 move alpha + 2 16.5572 -78.8833 dotted gamma + 2 16.7178 -77.5167 dotted beta + 2 16.3389 -78.6833 dotted delta 1 + 2 16.5572 -78.8833 dotted gamma + +Aquarius + 0 20.7944 -9.48333 move epsilon + 1 21.5256 -5.56667 draw beta + 1 22.0961 -0.316667 draw alpha + 1 22.3606 -1.38333 draw gamma + 1 22.48 -0.0166667 draw zeta 1 + 1 22.4211 1.36667 draw pi + 1 22.0961 -0.316667 draw alpha + 0 22.48 -0.0166667 move zeta 1 + 1 22.5889 -0.116667 draw eta + 0 21.5256 -5.56667 move beta + 1 22.1072 -13.8667 draw iota + 0 22.0961 -0.316667 move alpha + 1 22.2806 -7.78333 draw theta + 1 22.8767 -7.56667 draw lambda + 1 23.2383 -6.03333 draw phi + 1 23.2983 -9.16667 draw psi 2 + 1 22.9106 -15.8167 draw delta + 1 22.8261 -13.5833 draw tau 2 + 1 22.8767 -7.56667 draw lambda + 0 23.3828 -20.1 move 98 + 1 23.2983 -9.16667 draw psi 2 + 1 23.1572 -21.1667 draw 88 + +Aquila + 0 19.9217 6.4 move beta + 1 19.8461 8.86667 draw alpha + 1 19.7706 10.6 draw gamma + 1 19.4244 3.1 draw delta + 1 19.1039 -4.86667 draw lambda + 1 19.09 13.85 draw zeta + 1 19.4244 3.1 draw delta + 1 19.8744 1 draw eta + 1 20.1883 -0.816667 draw theta + 1 19.6117 -1.28333 draw iota + 1 19.1039 -4.86667 draw lambda + +Ara + 0 17.6728 -49.4 move lambda + 1 17.5306 -49.8667 draw alpha + 1 17.4217 -55.5167 draw beta + 1 17.4228 -56.3667 draw gamma + 1 17.5178 -60.6833 draw delta + 1 16.8294 -59.0333 draw eta + 1 16.9767 -55.9833 draw zeta + 1 16.9928 -53.15 draw epsilon 1 + 1 17.5306 -49.8667 draw alpha + +Aries + 0 1.89167 19.2833 move gamma + 1 1.91056 20.8 draw beta + 1 2.11944 23.45 draw alpha + 1 2.83278 27.25 draw 41 + +Auriga + 0 5.27778 45.9833 move capella + 1 5.99167 44.9333 draw beta + 1 5.995 37.2 draw theta + 1 5.43778 28.6 draw beta tau + 1 4.94944 33.15 draw iota + 1 5.27778 45.9833 draw capella + 1 5.99167 54.2833 draw delta + 1 5.99167 44.9333 draw beta + 0 5.27778 45.9833 move capella + 1 5.03278 43.8167 draw epsilon + 1 5.04111 41.0667 draw zeta + +Bootes + 0 14.6856 13.7167 move zeta + 1 14.2606 19.1667 draw arcturus + 1 14.7494 27.0667 draw epsilon + 1 15.2583 33.3 draw delta + 1 15.0322 40.3833 draw beta + 1 14.5344 38.3 draw gamma + 1 14.53 30.3667 draw rho + 1 14.2606 19.1667 draw arcturus + 1 13.9111 18.3833 draw eta + 1 13.7872 17.45 draw tau + 0 14.5344 38.3 move gamma + 1 14.2728 46.0833 draw lambda + 1 14.2244 51.7833 draw kappa 2 + 1 14.4194 51.85 draw theta + 1 14.2728 46.0833 draw lambda + +Caelum + 0 5.07333 -35.4833 move gamma + 2 4.70056 -37.1333 dotted beta + 2 4.67556 -41.85 dotted alpha + 2 4.51389 -44.95 dotted delta + +Camelopardalis + 0 4.95444 53.75 move 7 + 2 5.05667 60.4333 dotted beta + 2 4.90056 66.3333 dotted alpha + 2 3.83889 71.3167 dotted gamma + 2 3.825 65.5167 dotted 3:49:31 65:31:34 + 2 3.48444 59.9333 dotted 6272 3596 + 0 4.90056 66.3333 move alpha + 2 6.31389 69.3167 dotted 6:18:51 69:19:11 + 2 7.00111 76.9667 dotted 7:00:04 76:58:39 + +Cancer + 0 8.77778 28.75 move iota1 + 2 8.72111 21.4667 dotted gamma + 2 8.74444 18.15 dotted delta + 2 8.97444 11.85 dotted alpha + 0 8.74444 18.15 move delta + 2 8.275 9.18333 dotted beta + +Canes Venatici + 0 12.9333 38.3167 move alpha2 + 2 12.5622 41.35 dotted beta + +Canis Major + 0 7.40111 -29.3 move eta + 1 7.13944 -26.3833 draw delta + 1 7.05 -23.8333 draw omicron2 + 1 6.75222 -16.7 draw alpha + 1 6.37833 -17.95 draw beta + 1 6.61111 -19.25 draw nu2 + 1 6.90167 -24.1833 draw omicron1 + 1 6.97667 -28.9667 draw epsilon + 1 7.02833 -27.9333 draw sigma + 1 7.13944 -26.3833 draw delta + 0 6.75222 -16.7 move alpha + 2 6.93556 -17.05 dotted iota + 2 7.06222 -15.6333 dotted gamma + 2 6.935 -14.0333 dotted mu + 2 6.93556 -17.05 dotted iota + +Canis Minor + 0 7.655 5.21667 move alpha + 1 7.45222 8.28333 draw beta + +Capricornus + 0 20.2939 -12.5 move alpha1 + 1 20.35 -14.7667 draw beta + 1 20.7678 -25.2667 draw psi + 1 20.8633 -26.9167 draw omega + 1 21.1183 -25 draw 24 + 1 21.4444 -22.4 draw zeta + 1 21.6178 -19.45 draw epsilon + 1 21.7839 -16.1167 draw delta + 1 21.6678 -16.65 draw gamma + 1 21.3706 -16.8333 draw iota + 1 21.0989 -17.2167 draw theta + 1 20.2939 -12.5 draw alpha1 + +Carina + 0 6.39889 -52.6833 move canopus + 1 9.22 -69.7167 draw beta + 1 10.2289 -70.0333 draw omega + 1 10.7156 -64.3833 draw theta + 1 11.1089 -62.4167 draw 11:06:32 -62:25:27 + 1 11.21 -60.3167 draw 11:12:36 -60:19:03 + 1 11.1428 -58.9667 draw 11:08:35 -58:58:30 + 1 10.8917 -58.85 draw 10:53:30 -58:51:12 + 1 10.7506 -59.6833 draw eta + 1 10.5333 -61.6833 draw 10:32:01 -61:41:07 + 1 10.7156 -64.3833 draw theta + 0 10.5333 -61.6833 move 10:32:01 -61:41:07 + 1 10.2844 -61.3167 draw 10:17:05 -61:19:56 + 1 9.28444 -59.2667 draw iota + 1 8.745 -54.7 draw delta vel + 0 9.28444 -59.2667 move iota + 1 8.375 -59.5 draw epsilon + 1 7.94611 -52.9667 draw chi + 1 8.15889 -47.3333 draw gamma2 vel + +Cassiopeia + 0 0.152778 59.1333 move beta + 1 0.675 56.5333 draw alpha + 1 0.945 60.7167 draw gamma + 1 1.43 60.2333 draw delta + 1 1.90611 63.6667 draw epsilon + +Centaurus + 0 14.6594 -60.8333 move alpha1 + 1 14.0633 -60.3667 draw hadar (agena) + 1 13.6644 -53.45 draw epsilon + 1 13.9256 -47.2833 draw zeta + 1 14.0283 -45.6 draw upsilon2 + 1 13.9778 -44.8 draw upsilon1 + 1 13.9711 -42.1 draw phi + 1 14.5917 -42.15 draw eta + 1 14.9856 -42.1 draw kappa + 0 13.9711 -42.1 move phi + 1 14.1006 -41.1667 draw chi + 1 14.3422 -37.8833 draw psi + 1 14.1111 -36.3667 draw theta + 1 13.825 -41.6833 draw nu + 1 13.5172 -39.4 draw 24331 -2364 + 1 13.3428 -36.7 draw iota + 1 12.8906 -40.1667 draw 23203 -2410 + 0 13.825 -41.6833 move nu + 1 13.8267 -42.4667 draw mu + 1 13.9256 -47.2833 draw zeta + 1 12.6917 -48.95 draw gamma + 1 13.6644 -53.45 draw epsilon + 0 12.6917 -48.95 move gamma + 1 12.4672 -50.2167 draw sigma + 1 12.1939 -52.3667 draw rho + 1 11.775 -61.1667 draw 21195 -3670 + 1 11.5961 -63.0167 draw lambda + 0 12.4672 -50.2167 move sigma + 1 12.1389 -50.7167 draw delta + 1 11.35 -54.4833 draw pi + +Cepheus + 0 21.3094 62.5833 move alpha + 1 21.4772 70.55 draw beta + 1 23.6556 77.6167 draw gamma + 1 22.8278 66.2 draw iota + 1 23.6556 77.6167 draw gamma + 0 22.8278 66.2 move iota + 1 22.1806 58.2 draw zeta + 1 21.7572 61.1167 draw nu + 1 21.725 58.7667 draw mu + 1 21.3094 62.5833 draw alpha + 1 20.7544 61.8333 draw eta + 1 20.4928 62.9833 draw theta + +Cetus + 0 2.72167 3.23333 move gamma + 1 3.03778 4.08333 draw alpha + 1 2.995 8.9 draw lambda + 1 2.74889 10.1 draw mu + 1 2.46889 8.45 draw xi2 + 1 2.59778 5.58333 draw nu + 1 2.72167 3.23333 draw gamma + 1 2.65778 0.316667 draw delta + 1 2.32222 -2.96667 draw mira + 1 1.85722 -10.3333 draw zeta + 1 1.4 -8.18333 draw theta + 1 1.14278 -10.1667 draw eta + 1 0.323333 -8.81667 draw iota + 1 0.726111 -17.9833 draw beta + 1 1.73444 -15.9333 draw tau + 1 1.85722 -10.3333 draw zeta + +Chamaeleon + 0 8.30833 -76.9167 move alpha + 1 8.34389 -77.4833 draw theta + 1 10.5911 -78.6 draw gamma + 1 11.9933 -78.2167 draw epsilon + 1 12.3056 -79.3 draw beta + 1 10.7539 -80.4667 draw delta1 + 1 10.5911 -78.6 draw gamma + +Circinus + 0 15.2917 -58.8 move beta + 1 14.7083 -64.9667 draw alpha + 1 15.3894 -59.3167 draw gamma + +Columba + 0 5.52 -35.4667 move epsilon + 1 5.66056 -34.0667 draw alpha + 1 5.84889 -35.7667 draw beta + 1 5.95889 -35.2833 draw gamma + 1 6.36833 -33.4333 draw delta + 0 5.84889 -35.7667 move beta + 1 5.98556 -42.8 draw eta + +Coma Berenices + 0 13.1661 17.5167 move alpha + 2 13.1978 27.8667 dotted beta + 2 12.4489 28.2667 dotted gamma + +Corona Australis + 0 19.1067 -37.05 move gamma + 1 19.1578 -37.9 draw alpha + 1 19.1667 -39.3333 draw beta + 1 19.1389 -40.4833 draw delta + 1 18.5583 -42.3 draw theta + +Corona Borealis + 0 15.5483 31.35 move theta + 1 15.4633 29.1 draw beta + 1 15.5778 26.7 draw alpha + 1 15.7122 26.2833 draw gamma + 1 15.8261 26.0667 draw delta + 1 15.9594 26.8667 draw epsilon + 1 16.0239 29.85 draw iota + +Corvus + 0 12.14 -24.7167 move alpha + 1 12.1683 -22.6167 draw epsilon + 1 12.5728 -23.3833 draw beta + 1 12.4972 -16.5 draw delta + 1 12.2633 -17.5333 draw gamma + 1 12.1683 -22.6167 draw epsilon + +Crater + 0 11.9333 -17.15 move eta + 1 11.7456 -18.35 draw zeta + 1 11.4144 -17.6833 draw gamma + 1 11.3889 -18.7667 draw lambda + 1 11.1939 -22.8167 draw beta + 1 10.9961 -18.2833 draw alpha + 1 11.3222 -14.7667 draw delta + 1 11.4144 -17.6833 draw gamma + 0 11.3222 -14.7667 move delta + 1 11.41 -10.85 draw epsilon + 1 11.6111 -9.8 draw theta + +Crux + 0 12.4428 -63.0833 move alpha1 + 1 12.5189 -57.1 draw gamma + 0 12.795 -59.6833 move beta + 1 12.2522 -58.7333 draw delta + +Cygnus + 0 19.5117 27.95 move beta1 + 1 19.8422 32.9 draw chi + 1 19.9383 35.0833 draw eta + 1 20.37 40.25 draw gamma + 1 20.77 33.9667 draw epsilon + 2 21.2156 30.2167 dotted zeta + 2 20.9528 41.1667 dotted nu + 2 20.69 45.2667 dotted deneb + 1 20.37 40.25 draw gamma + 1 19.7494 45.1167 draw delta + 2 19.495 51.7167 dotted iota + 2 19.285 53.3667 dotted kappa + 0 19.495 51.7167 move iota + 2 20.2578 47.7 dotted 32 + 2 20.69 45.2667 dotted deneb + +Delphinus + 0 20.5533 11.3 move epsilon + 1 20.5656 13.0167 draw eta + 1 20.6256 14.5833 draw beta + 1 20.7239 15.0667 draw delta + 1 20.7772 16.1167 draw gamma1 + 1 20.6606 15.9 draw alpha + 1 20.6256 14.5833 draw beta + +Dorado + 0 4.26667 -51.4833 move gamma + 1 4.56611 -55.0333 draw alpha + 1 5.56 -62.4833 draw beta + 1 5.74611 -65.7333 draw delta + 1 5.90167 -63.0833 draw 5:54:06 -63:05:23 + 1 5.56 -62.4833 draw beta + 1 5.09167 -57.4667 draw zeta + 1 4.56611 -55.0333 draw alpha + +Draco + 0 11.5233 69.3167 move lambda + 1 12.5578 69.7833 draw kappa + 1 14.0728 64.3667 draw alpha + 1 15.415 58.95 draw iota + 1 16.0311 58.55 draw theta + 1 16.3994 61.5 draw eta + 1 17.1461 65.7 draw zeta + 1 18.3456 71.3333 draw phi + 1 18.3506 72.7167 draw chi + 0 18.3456 71.3333 move phi + 1 19.2089 67.65 draw delta + 1 19.8028 70.2667 draw epsilon + 0 19.2089 67.65 move delta + 1 17.8917 56.8667 draw xi + 1 17.5361 55.1833 draw nu1 + 1 17.5072 52.3 draw beta + 1 17.9433 51.4833 draw gamma + 1 17.8917 56.8667 draw xi + +Equuleus + 0 21.1722 10.1167 move gamma + 2 21.2411 10 dotted delta + 2 21.2633 5.23333 dotted alpha + +Eridanus + 0 5.13056 -5.08333 move beta + 1 4.88111 -5.45 draw omega + 1 4.75833 -3.25 draw mu + 1 4.605 -3.35 draw nu + 1 4.19722 -6.83333 draw omicron1 + 1 3.96667 -13.5 draw gamma + 1 3.76889 -12.1 draw pi + 1 3.72056 -9.75 draw delta + 1 3.54833 -9.45 draw epsilon + 1 2.94 -8.88333 draw eta + 1 2.735 -13.85 draw cet pi + 1 2.75167 -18.5667 draw tau1 + 1 3.03944 -23.6167 draw tau3 + 1 3.325 -21.75 draw tau4 + 1 3.56278 -21.6167 draw tau5 + 1 3.78056 -23.2333 draw tau6 + 1 3.895 -24.6 draw tau8 + 1 3.99833 -24 draw tau9 + 1 4.55833 -29.7667 draw upsilon1 + 1 4.59222 -30.55 draw upsilon2 + 1 4.40056 -34.0167 draw 43 + 1 4.29778 -33.7833 draw upsilon4 + 1 3.82389 -36.2 draw 3:49:27 -36:12:01 + 1 3.71389 -37.3 draw 3:42:50 -37:18:49 + 1 3.61833 -40.2667 draw 3:37:06 -40:16:29 + 1 3.33222 -43.0667 draw 3:19:56 -43:04:11 + 1 2.97111 -40.3 draw theta2 + 1 2.67778 -39.85 draw iota + 1 2.66333 -42.8833 draw 4794 -2573 + 1 2.44944 -47.7 draw kappa + 1 2.275 -51.5 draw phi + 1 1.93222 -51.6 draw chi + 1 1.62833 -57.2333 draw achernar + +Fornax + 0 3.20111 -28.9833 move alpha + 1 2.81778 -32.4 draw beta + 1 2.07444 -29.2833 draw nu + +Gemini + 0 6.06833 23.25 move gem 1 + 1 6.24778 22.5 draw gem eta + 1 6.38222 22.5 draw gem mu + 1 6.73167 25.1167 draw gem epsilon + 1 7.18556 30.2333 draw gem tau + 1 7.485 31.7833 draw gem rho + 1 7.57667 31.8833 draw castor + 0 7.755 28.0167 move pollux + 1 7.59833 26.8833 draw gem upsilon + 1 7.335 21.9667 draw gem delta + 1 7.06833 20.5667 draw gem zeta + 1 6.62833 16.3833 draw gem gamma + 0 6.87944 33.95 move gem theta + 1 7.18556 30.2333 draw gem tau + 1 7.40889 27.6333 draw gem 59 + 1 7.59833 26.8833 draw gem upsilon + 1 7.74056 24.3833 draw gem kappa + 0 7.335 21.9667 move gem delta + 1 7.30111 16.5333 draw gem lambda + 1 7.22278 16.15 draw gem 51 + 1 7.22278 16.15 draw gem 51 + 1 6.75444 12.8833 draw gem xi + 0 6.73167 25.1167 move gem epsilon + 1 6.48222 20.2 draw gem nu + +Grus + 0 21.8983 -37.35 move gamma + 1 22.1017 -39.5333 draw lambda + 1 22.4878 -43.4833 draw delta1 + 1 22.7111 -46.8833 draw beta + 1 22.8089 -51.3167 draw epsilon + 1 23.0144 -52.75 draw zeta + 0 22.7111 -46.8833 move beta + 1 22.1372 -46.95 draw alpha + 1 22.4878 -43.4833 draw delta1 + +Hercules + 0 15.8778 42.45 move chi + 1 16.1461 44.9333 draw phi + 1 16.3289 46.3 draw tau + 1 16.5683 42.4333 draw sigma + 1 16.7144 38.9167 draw eta + 1 16.6878 31.6 draw zeta + 1 16.5033 21.4833 draw beta + 1 16.365 19.15 draw gamma + 1 16.4233 14.0333 draw omega + 1 16.5433 11.4833 draw 29 + 0 16.5033 21.4833 move beta + 1 17.2439 14.3833 draw alpha + 1 17.25 24.8333 draw delta + 1 17.0044 30.9167 draw epsilon + 1 16.6878 31.6 draw zeta + 0 17.25 24.8333 move delta + 1 17.5122 26.1 draw lambda + 1 17.7739 27.7167 draw mu + 1 17.9622 29.2333 draw xi + 1 18.1256 28.75 draw omicron + 0 17.0044 30.9167 move epsilon + 1 17.2506 36.8 draw pi + 1 16.7144 38.9167 draw eta + 0 17.2506 36.8 move pi + 1 17.9372 37.25 draw theta + 1 17.6572 46 draw iota + +Horologium + 0 4.23333 -42.2833 move alpha + 1 2.70889 -50.8 draw iota + 1 2.62333 -52.5333 draw eta + 1 2.67722 -54.55 draw zeta + 1 3.06 -59.7333 draw mu + 1 2.97944 -64.0667 draw beta + +Hydra + 0 14.8378 -27.95 move 58 + 1 14.1061 -26.6667 draw pi + 1 13.315 -23.1667 draw gamma + 1 11.8817 -33.9 draw beta + 1 11.55 -31.85 draw xi + 1 11.1939 -22.8167 draw crt beta + 1 10.9961 -18.2833 draw crt alpha + 1 10.8267 -16.1833 draw nu + 1 10.4344 -16.8333 draw mu + 1 10.1761 -12.35 draw lambda + 1 10.085 -13.05 draw upsilon2 + 1 9.85778 -14.8333 draw upsilon1 + 1 9.45944 -8.65 draw alpha + 1 9.66389 -1.13333 draw iota + 1 9.23889 2.3 draw theta + 1 8.92278 5.93333 draw zeta + 1 8.77944 6.41667 draw epsilon + 1 8.62722 5.7 draw delta + 1 8.64556 3.33333 draw sigma + 1 8.72 3.38333 draw eta + 1 8.80722 5.83333 draw rho + 1 8.77944 6.41667 draw epsilon + +Hydrus + 0 3.78722 -74.2333 move gamma + 1 0.428889 -77.25 draw beta + 1 1.97944 -61.5667 draw alpha + 1 3.78722 -74.2333 draw gamma + +Indus + 0 20.9133 -58.45 move beta + 2 20.7339 -51.9167 dotted eta + 2 20.6261 -47.2833 dotted alpha + 2 21.3311 -53.4333 dotted theta + 2 21.965 -54.9833 dotted delta + +Lacerta + 0 22.2661 37.7333 move 1 + 2 22.2311 39.7 dotted 22:13:53 39:42:53 + 2 22.5078 43.1167 dotted 6 + 2 22.675 44.2667 dotted 11 + 2 22.4917 47.7 dotted 5 + 2 22.5211 50.2667 dotted alpha + 2 22.3922 52.2167 dotted beta + 2 22.4083 49.4667 dotted 4 + 2 22.4917 47.7 dotted 5 + 2 22.35 46.5333 dotted 2 + 2 22.5078 43.1167 dotted 6 + +Leo + 0 10.1394 11.9667 move regulus + 1 10.1222 16.75 draw eta + 1 10.3328 19.8333 draw gamma1 + 1 10.2778 23.4167 draw zeta + 1 9.87889 26 draw mu + 1 9.41056 26.1667 draw kappa + 1 9.52833 22.9667 draw lambda + 1 9.76389 23.7667 draw epsilon + 1 9.87889 26 draw mu + 0 9.76389 23.7667 move epsilon + 1 10.1222 16.75 draw eta + 1 11.2372 15.4167 draw theta + 1 11.3983 10.5167 draw iota + 1 11.3522 6.01667 draw sigma + 0 11.2372 15.4167 move theta + 1 11.8172 14.5667 draw beta + 1 11.235 20.5167 draw delta + 1 11.2372 15.4167 draw theta + 0 11.235 20.5167 move delta + 1 10.3328 19.8333 draw gamma1 + +Leo Minor + 0 9.57 36.3833 move 10 + 2 10.1233 35.2333 dotted 21 + 2 10.4317 33.7833 dotted 30 + 2 10.8883 34.2 dotted 46 + 2 10.4644 36.7 dotted beta + 2 10.1233 35.2333 dotted 21 + +Lepus + 0 5.22 -12.9333 move kappa + 1 5.215 -16.2 draw mu + 1 5.32611 -13.1667 draw lambda + 0 5.545 -17.8167 move alpha + 1 5.47056 -20.75 draw beta + 1 5.74056 -22.4333 draw gamma + 1 5.855 -20.8667 draw delta + 1 6.10222 -14.9333 draw theta + 1 5.94 -14.1667 draw eta + 1 5.78222 -14.8167 draw zeta + 1 5.545 -17.8167 draw alpha + 1 5.215 -16.2 draw mu + 1 5.09056 -22.3667 draw epsilon + 1 5.47056 -20.75 draw beta + +Libra + 0 15.0678 -25.2667 move sigma + 1 14.8478 -16.0333 draw alpha2 + 1 15.2833 -9.36667 draw beta + 1 15.5917 -14.7833 draw gamma + 1 14.8478 -16.0333 draw alpha2 + 0 15.5917 -14.7833 move gamma + 1 15.6167 -28.1333 draw upsilon + 1 15.6439 -29.7667 draw tau + +Lupus + 0 14.975 -43.1333 move beta + 1 15.3561 -40.6333 draw delta + 1 15.5856 -41.1667 draw gamma + 1 16.0017 -38.3833 draw eta + 1 15.8489 -33.6167 draw chi + 1 15.3633 -36.25 draw phi1 + 1 16.0017 -38.3833 draw eta + 1 15.2044 -52.0833 draw zeta + 1 14.6983 -47.3833 draw alpha + 0 15.2044 -52.0833 move zeta + 1 15.3089 -47.8667 draw mu + 1 15.3778 -44.6833 draw epsilon + 1 15.5856 -41.1667 draw gamma + +Lynx + 0 9.35056 34.3833 move alpha + 2 9.31389 36.8 dotted 38 + 2 9.10889 38.45 dotted 9:06:32 38:27:08 + 2 9.01056 41.7667 dotted 9:00:38 41:46:58 + 2 8.38056 43.1833 dotted 31 + 2 7.445 49.2 dotted 21 + 2 6.95444 58.4167 dotted 15 + 2 6.32667 59 dotted 2 + +Lyra + 0 18.7461 37.6 move zeta1 + 1 18.7389 39.6667 draw epsilon1 + 1 18.6156 38.7833 draw vega + 1 18.7461 37.6 draw zeta1 + 1 18.8344 33.35 draw beta + 1 18.9822 32.6833 draw gamma + 1 18.9083 36.8833 draw delta2 + 1 18.7461 37.6 draw zeta1 + +Mensa + 0 6.17056 -74.75 move alpha + 2 5.53111 -76.3333 dotted gamma + 2 4.91944 -74.9333 dotted eta + 2 5.045 -71.3 dotted beta + +Microscopium + 0 21.3456 -40.8 move theta1 + 2 21.2989 -32.1667 dotted epsilon + 2 21.0211 -32.25 dotted gamma + 2 20.8328 -33.7667 dotted alpha + +Monoceros + 0 6.68278 9.88333 move 15 + 2 6.54833 7.31667 dotted 13 + 2 6.39611 4.58333 dotted epsilon + 2 6.79722 2.4 dotted 18 + 2 6.54833 7.31667 dotted 13 + 0 6.79722 2.4 move 18 + 2 7.19722 -0.483333 dotted delta + 2 6.48 -7.03333 dotted beta + 1 6.24722 -6.26667 draw gamma + 0 7.19722 -0.483333 move delta + 2 7.68722 -9.55 dotted alpha + 2 8.14278 -2.98333 dotted zeta + +Musca + 0 11.76 -66.7167 move lambda + 1 12.2928 -67.95 draw epsilon + 1 12.6194 -69.1333 draw alpha + 1 12.5411 -72.1167 draw gamma + 1 13.0378 -71.5333 draw delta + 1 12.7711 -68.1 draw beta + +Norma + 0 16.4528 -47.55 move epsilon + 1 16.2833 -50.0667 draw gamma1 + 1 16.3306 -50.15 draw gamma2 + 1 16.0533 -49.2167 draw eta + 1 16.1078 -45.1667 draw delta + 1 16.4528 -47.55 draw epsilon + +Octans + 0 14.4483 -83.6667 move delta + 1 21.6911 -77.3833 draw nu + 1 22.3333 -80.4333 draw epsilon + 1 22.7672 -81.3667 draw beta + 1 14.4483 -83.6667 draw delta + +Ophiuchus + 0 17.4556 -29.8667 move 45 + 1 17.3667 -24.9833 draw theta + 1 17.1728 -15.7167 draw eta + 1 16.6189 -10.5667 draw zeta + 1 16.5189 -16.6 draw phi + 1 16.45 -18.45 draw chi + 1 16.4017 -20.0333 draw psi + 1 16.4261 -23.4333 draw rho + 0 16.6189 -10.5667 move zeta + 1 16.4633 -8.36667 draw upsilon + 1 16.305 -4.68333 draw epsilon + 1 16.2389 -3.68333 draw delta + 1 16.515 1.98333 draw lambda + 1 16.9611 9.36667 draw kappa + 1 16.6189 -10.5667 draw zeta + 0 16.9611 9.36667 move kappa + 1 17.5822 12.55 draw alpha + 1 17.7244 4.56667 draw beta + 1 17.1728 -15.7167 draw eta + 0 17.7244 4.56667 move beta + 1 17.7978 2.7 draw gamma + 1 17.9833 -9.76667 draw nu + +Orion + 0 6.19889 14.2 move xi + 1 6.12611 14.7667 draw nu + 1 5.90611 20.2667 draw chi1 + 1 6.065 20.1333 draw chi2 + 1 6.19889 14.2 draw xi + 1 6.03944 9.63333 draw mu + 1 5.91944 7.4 draw betelgeuse + 1 5.41833 6.33333 draw gamma + 1 5.58556 9.93333 draw lambda + 1 5.91944 7.4 draw betelgeuse + 1 5.67889 -1.93333 draw zeta + 1 5.79556 -9.66667 draw kappa + 0 5.67889 -1.93333 move zeta + 1 5.60333 -1.2 draw epsilon + 1 5.53333 -0.283333 draw delta + 1 5.40778 -2.38333 draw eta + 1 5.24222 -8.2 draw rigel + 0 5.53333 -0.283333 move delta + 1 5.41833 6.33333 draw gamma + 1 4.83056 6.95 draw pi3 + 1 4.85333 5.6 draw pi4 + 1 4.90389 2.43333 draw pi5 + 1 4.97556 1.7 draw pi6 + 0 4.83056 6.95 move pi3 + 1 4.84333 8.9 draw pi2 + 1 4.91444 10.15 draw pi1 + 1 4.93944 13.5 draw omicron2 + 1 5.07611 15.4 draw 11 + +Pavo + 0 20.0094 -72.9 move epsilon + 1 20.145 -66.1667 draw delta + 1 18.7172 -71.4167 draw zeta + 0 17.7617 -64.7167 move eta + 1 18.1428 -63.6667 draw pi + 1 18.3867 -61.4833 draw xi + 1 18.87 -62.1833 draw lambda + 1 20.145 -66.1667 draw delta + 1 20.4272 -56.7333 draw alpha + 1 21.4406 -65.35 draw gamma + 1 20.7489 -66.2 draw beta + 1 20.145 -66.1667 draw delta + 1 18.9489 -67.2333 draw kappa + 1 18.1428 -63.6667 draw pi + +Pegasus + 0 21.7361 9.86667 move epsilon + 1 22.17 6.18333 draw theta + 1 22.6906 10.8167 draw zeta + 1 23.0789 15.2 draw alpha + 1 0.220556 15.1833 draw gamma + 1 0.139444 29.0833 draw and alpha + 1 23.0628 28.0667 draw beta + 1 23.0789 15.2 draw alpha + 0 22.1661 33.1667 move pi2 + 1 22.7167 30.2167 draw eta + 1 23.0628 28.0667 draw beta + 1 22.8333 24.6 draw mu + 1 22.775 23.55 draw lambda + 1 22.1167 25.3333 draw iota + 1 21.7439 25.6333 draw kappa + +Perseus + 0 1.72722 50.6833 move phi + 1 2.73667 49.2167 draw theta + 1 3.15111 49.6 draw iota + 1 3.15778 44.85 draw kappa + 1 3.13611 40.95 draw algol + 1 3.08611 38.8333 draw rho + 0 3.13611 40.95 move algol + 1 3.96389 40 draw epsilon + 1 3.98222 35.7833 draw xi + 1 3.90167 31.8833 draw zeta + 1 3.73833 32.2833 draw omicron + 0 3.96389 40 move epsilon + 1 3.715 47.7833 draw delta + 1 4.14389 47.7 draw 48 + 1 4.24778 48.4 draw mu + 1 4.30389 50.2833 draw 4:18:15 50:17:44 + 1 4.10944 50.35 draw lambda + 0 3.715 47.7833 move delta + 1 3.405 49.85 draw alpha + 1 3.07944 53.5 draw gamma + 1 2.84444 55.8833 draw eta + 1 2.90389 52.75 draw tau + 1 3.15111 49.6 draw iota + 1 3.405 49.85 draw alpha + +Phoenix + 0 1.10111 -46.7167 move beta + 1 0.156667 -45.7333 draw epsilon + 1 0.437778 -42.3 draw alpha + 1 1.10111 -46.7167 draw beta + 1 1.47222 -43.3167 draw gamma + 1 1.52056 -49.0667 draw delta + 1 1.13944 -55.2333 draw zeta + 1 1.10111 -46.7167 draw beta + +Pictor + 0 6.80278 -61.9333 move alpha + 2 5.83 -56.1667 dotted gamma + 2 5.78778 -51.05 dotted beta + +Pisces + 0 1.09444 21.4667 move psi1 + 1 1.32444 27.25 draw upsilon + 1 1.19389 30.0833 draw tau + 1 1.09444 21.4667 draw psi1 + 1 1.19056 21.0333 draw chi + 1 1.52444 15.3333 draw eta + 1 1.75611 9.15 draw omicron + 1 2.03389 2.75 draw alpha + 1 1.89222 3.18333 draw xi + 1 1.69 5.48333 draw nu + 1 1.50278 6.13333 draw mu + 1 1.04889 7.88333 draw epsilon + 1 0.811111 7.58333 draw delta + 1 23.9883 6.85 draw omega + 1 23.6656 5.61667 draw iota + 1 23.4661 6.36667 draw theta + 1 23.2856 3.26667 draw gamma + 1 23.4489 1.25 draw kappa + 1 23.7006 1.76667 draw lambda + 1 23.6656 5.61667 draw iota + +Piscis Austrinus + 0 22.9606 -29.6167 move fomalhaut + 1 22.6772 -27.0333 draw epsilon + 1 22.1394 -32.9833 draw mu + 1 21.7956 -30.8833 draw theta + 1 21.7489 -33.0167 draw iota + 1 22.1394 -32.9833 draw mu + 1 22.525 -32.3333 draw beta + 1 22.875 -32.8667 draw gamma + 1 22.9322 -32.5333 draw delta + 1 22.9606 -29.6167 draw fomalhaut + +Puppis + 0 6.39889 -52.6833 move canopus + 1 6.62889 -43.1833 draw nu + 1 7.28556 -37.0833 draw pi + 1 7.72556 -28.4 draw 1 + 1 7.73 -28.95 draw 3 + 1 7.82111 -24.85 draw xi + 1 7.64667 -26.8 draw 7:38:49 -26:48:06 + 1 7.72556 -28.4 draw 1 + 0 7.82111 -24.85 move xi + 1 8.12556 -24.3 draw rho + 1 8.05944 -40 draw zeta + 1 8.15889 -47.3333 draw vel gamma2 + +Pyxis + 0 8.84167 -27.7 move gamma + 1 8.72611 -33.1833 draw alpha + 1 8.66833 -35.3 draw beta + 1 8.05944 -40 draw pup zeta + +Reticulum + 0 4.24 -62.4667 move alpha + 1 3.73667 -64.8 draw beta + 1 3.97889 -61.4 draw delta + 1 4.27444 -59.3 draw epsilon + 1 4.24 -62.4667 draw alpha + +Sagitta + 0 19.6678 18 move alpha + 1 19.7894 18.5333 draw delta + 1 19.9789 19.4833 draw gamma + 0 19.7894 18.5333 move delta + 1 19.6839 17.4667 draw beta + +Sagittarius + 0 18.2933 -36.75 move eta + 2 18.4028 -34.3833 dotted epsilon + 1 18.0967 -30.4167 draw gamma + 1 18.3494 -29.8167 draw delta + 1 18.4028 -34.3833 draw epsilon + 1 19.0433 -29.8667 draw zeta + 1 19.1156 -27.6667 draw tau + 1 18.9206 -26.2833 draw sigma + 1 18.7606 -26.9833 draw phi + 1 19.0433 -29.8667 draw zeta + 0 18.4661 -25.4167 move lambda + 1 18.7606 -26.9833 draw phi + 1 18.3494 -29.8167 draw delta + 1 18.4661 -25.4167 draw lambda + 2 18.2289 -21.05 dotted mu + 0 19.3611 -17.8333 move rho1 + 2 19.1622 -21.0167 dotted pi + 2 19.0778 -21.7333 dotted omicron + 2 18.9617 -21.1 dotted xi2 + 2 19.1622 -21.0167 dotted pi + +Scorpius + 0 17.8306 -37.0333 move 17:49:52 -37:02:36 + 1 17.56 -37.1 draw lambda + 1 17.5122 -37.2833 draw upsilon + 1 17.7078 -39.0167 draw kappa + 1 17.7928 -40.1167 draw iota1 + 1 17.6217 -42.9833 draw theta + 1 17.2022 -43.2333 draw eta + 1 16.9094 -42.35 draw zeta 2 + 1 16.8644 -38.0333 draw mu 1 + 1 16.8356 -34.2833 draw epsilon + 1 16.5978 -28.2 draw tau + 1 16.49 -26.4167 draw antares + 1 16.3528 -25.5833 draw sigma + 1 16.0056 -22.6167 draw delta + 1 15.9806 -26.1 draw pi + 1 15.9478 -29.2 draw rho + 0 16.0056 -22.6167 move delta + 1 16.0906 -19.8 draw beta1 + 1 16.1994 -19.4333 draw nu + +Sculptor + 0 0.976667 -29.35 move alpha + 1 23.815 -28.1167 draw delta + 1 23.3133 -32.5167 draw gamma + 1 23.5494 -37.8167 draw beta + +Scutum + 0 18.5867 -8.23333 move alpha + 1 18.7861 -4.73333 draw beta + 1 18.7044 -9.05 draw delta + 1 18.4861 -14.55 draw gamma + 1 18.5867 -8.23333 draw alpha + +Serpens Caput + 0 15.7694 15.4167 move ser beta + 1 15.9406 15.65 draw ser gamma + 1 15.8122 18.1333 draw ser kappa + 1 15.6922 19.6667 draw ser iota + 1 15.7694 15.4167 draw ser beta + 1 15.58 10.5333 draw ser delta + 1 15.7378 6.41667 draw ser alpha + 1 15.8467 4.46667 draw ser epsilon + 1 15.8267 -3.41667 draw ser mu + 1 16.2389 -3.68333 draw oph delta + +Serpens Cauda + 0 18.9367 4.2 move ser theta1 + 1 18.355 -2.88333 draw ser eta + 1 17.9833 -9.76667 draw oph nu + 1 17.6261 -15.3833 draw ser xi + 1 17.1728 -15.7167 draw oph eta + +Sextans + 0 10.4911 -2.73333 move delta + 2 10.5044 -0.633333 dotted beta + 2 10.1322 -0.366667 dotted alpha + 2 9.875 -8.1 dotted gamma + +Taurus + 0 3.61444 0.4 move 10 + 1 3.41333 9.01667 draw omicron + 1 3.45278 9.71667 draw xi + 1 4.05222 5.98333 draw nu + 0 3.45278 9.71667 move xi + 1 4.01111 12.4833 draw lambda + 1 4.32944 15.6167 draw gamma + 1 4.47611 15.95 draw theta1 + 1 4.59833 16.5 draw aldebaran + 1 5.62722 21.1333 draw zeta + 0 4.32944 15.6167 move gamma + 1 4.38222 17.5333 draw delta1 + 1 4.42444 17.9167 draw delta3 + 1 4.47667 19.1667 draw epsilon + 1 5.43778 28.6 draw beta + +Telescopium + 0 18.1867 -45.95 move epsilon + 1 18.4494 -45.9667 draw alpha + 1 18.48 -49.0667 draw zeta + +Triangulum + 0 1.88444 29.5667 move alpha + 1 2.15889 34.9833 draw beta + 1 2.28833 33.8333 draw gamma + 1 1.88444 29.5667 draw alpha + +Triangulum Australe + 0 16.8106 -69.0167 move alpha + 1 15.9189 -63.4167 draw beta + 1 15.6117 -66.3167 draw epsilon + 1 15.315 -68.6667 draw gamma + 1 16.8106 -69.0167 draw alpha + +Tucana + 0 22.4556 -64.95 move delta + 1 22.3083 -60.25 draw alpha + 1 23.29 -58.2333 draw gamma + 1 0.525556 -62.95 draw beta1 + 1 0.334444 -64.8667 draw zeta + 1 23.9983 -65.5667 draw epsilon + 1 22.4556 -64.95 draw delta + +Ursa Major + 0 13.7922 49.3 move eta + 1 13.3983 54.9167 draw mizar a + 1 12.9 55.95 draw epsilon + 1 12.2567 57.0167 draw delta + 1 11.8967 53.6833 draw gamma + 1 11.0306 56.3667 draw beta + 1 11.0617 61.75 draw alpha + 1 12.2567 57.0167 draw delta + 0 11.8967 53.6833 move gamma + 2 11.7672 47.7667 dotted chi + 2 11.3078 33.0833 dotted nu + 2 11.3028 31.5167 dotted xi + 0 11.7672 47.7667 move chi + 2 11.1606 44.4833 dotted psi + 2 10.3717 41.4833 dotted mu + 2 10.2844 42.9 dotted lambda + 0 11.0306 56.3667 move beta + 2 9.84944 59.0333 dotted upsilon + 2 8.50389 60.7167 dotted omicron + 2 9.525 63.05 dotted 23 + 2 11.0617 61.75 dotted alpha + 0 9.525 63.05 move 23 + 2 9.84944 59.0333 dotted upsilon + 2 9.54722 51.6667 dotted theta + 2 9.06 47.15 dotted kappa + 2 8.98667 48.0333 dotted iota + +Ursa Minor + 0 2.53 89.25 move polaris + 1 17.5367 86.5833 draw umi delta + 1 16.7661 82.0333 draw umi epsilon + 1 15.7339 77.7833 draw umi zeta + 1 14.845 74.15 draw umi beta + 1 15.345 71.8333 draw umi gamma + 1 16.2917 75.75 draw umi eta + 1 15.7339 77.7833 draw umi zeta + +Vela + 0 8.745 -54.7 move delta + 1 9.36833 -55 draw kappa + 1 9.94722 -54.5667 draw phi + 1 10.7794 -49.4167 draw mu + 1 10.2456 -42.1167 draw 10:14:44 -42:07:20 + 1 9.51167 -40.4667 draw psi + 1 9.13278 -43.4167 draw lambda + 1 8.15778 -47.3333 draw gamma1 + 1 8.745 -54.7 draw delta + +Virgo + 0 14.7172 -5.65 move mu + 1 14.2667 -6 draw iota + 1 13.4194 -11.15 draw spica + 1 12.6939 -1.43333 draw gamma + 1 12.3317 -0.666667 draw eta + 1 11.8444 1.75 draw beta + 1 11.7639 6.51667 draw nu + 1 12.0867 8.71667 draw omicron + 1 12.6939 -1.43333 draw gamma + 1 12.9267 3.38333 draw delta + 1 13.0361 10.95 draw epsilon + 0 12.9267 3.38333 move delta + 1 13.5778 -0.583333 draw zeta + 1 13.4194 -11.15 draw spica + 0 13.5778 -0.583333 move zeta + 1 14.0272 1.53333 draw tau + 1 14.2667 -6 draw iota + 0 14.0272 1.53333 move tau + 1 14.7706 1.88333 draw 109 + +Volans + 0 9.04056 -66.3833 move alpha + 1 8.33 -71.5 draw kappa1 + 1 7.69667 -72.6 draw zeta + 1 7.145 -70.4833 draw gamma1 + 1 7.28 -67.95 draw delta + 1 8.13167 -68.6167 draw epsilon + 1 8.42889 -66.1333 draw beta + 1 9.04056 -66.3833 draw alpha + +Vulpecula + 0 19.8906 24.0667 move 13 + 2 19.4783 24.65 dotted alpha diff --git a/GUI/xephem/auxil/dearth.gif b/GUI/xephem/auxil/dearth.gif new file mode 100644 index 0000000..92c8a0b Binary files /dev/null and b/GUI/xephem/auxil/dearth.gif differ diff --git a/GUI/xephem/auxil/favorites.fav b/GUI/xephem/auxil/favorites.fav new file mode 100644 index 0000000..df87249 --- /dev/null +++ b/GUI/xephem/auxil/favorites.fav @@ -0,0 +1,12 @@ + + Sun,P + Moon,P + Mercury,P + Venus,P + Mars,P + Jupiter,P + Saturn,P + Uranus,P + Neptune,P + Pluto,P + diff --git a/GUI/xephem/auxil/jupiter.1020 b/GUI/xephem/auxil/jupiter.1020 new file mode 100644 index 0000000..ea8815d --- /dev/null +++ b/GUI/xephem/auxil/jupiter.1020 @@ -0,0 +1,471 @@ + 5 4 2 136 270 371 3.5516 1.7693 .8782 .3765 30.0 30.0 40.0 40.0 472 2455197.500 2010 +1 220100101201001312455197.4 .2422900000D+01 -.1595000000D-01 .3909993000D+03 .1512380000D+01 .4405000000D-02 .8081000000D+00 .4337874000D+01 .2685300000D+01 .1933100000D+01 .4239100000D+01 .9883000000D+00 -.4300000000D-02 .1581821000D+03 .6422700000D+00 .2914000000D-02 .3402000000D+00 .4360994000D+01 .3298300000D+01 .2167000000D+01 .4264800000D+01 .4441000000D+00 .4000000000D-01 .4217442000D+03 .1639570000D+01 .3985000000D-02 .8368000000D+00 .5912224000D+01 .4340100000D+01 .3342100000D+01 .5816500000D+01 +1 320100131201003022455227.4 .1915500000D+01 -.3445000000D-01 .3873688000D+03 .1687090000D+01 .2546000000D-02 .8101000000D+00 .3948414000D+01 .2295700000D+01 .7136000000D+00 .3936000000D+01 .8536000000D+00 -.1349000000D-01 .1670989000D+03 .7178500000D+00 .2451000000D-02 .3604000000D+00 .3981757000D+01 .2799800000D+01 .1210200000D+01 .3978300000D+01 .1597900000D+01 .3047000000D-01 .4216877000D+03 .1790840000D+01 .3987000000D-02 .8593000000D+00 .5524391000D+01 .3955800000D+01 .2412400000D+01 .5571700000D+01 +1 420100302201004012455257.4 .9669000000D+00 -.4505000000D-01 .3841499000D+03 .1696360000D+01 .3757000000D-02 .8099000000D+00 .3551737000D+01 .1921800000D+01 .5847300000D+01 .3686700000D+01 .4887000000D+00 -.2002000000D-01 .1743919000D+03 .7270900000D+00 .2688000000D-02 .3741000000D+00 .3597180000D+01 .2306600000D+01 .1930000000D+00 .3740400000D+01 .2377100000D+01 .9860000000D-02 .4217105000D+03 .1803200000D+01 .3743000000D-02 .8463000000D+00 .5130474000D+01 .3550400000D+01 .1401600000D+01 .5341100000D+01 +1 520100401201005012455287.4 -.2437000000D+00 -.4088000000D-01 .3820081000D+03 .1552090000D+01 .4536000000D-02 .7804000000D+00 .3158935000D+01 .1545400000D+01 .5138100000D+01 .3450700000D+01 -.4610000000D-01 -.1960000000D-01 .1792637000D+03 .6598400000D+00 .2758000000D-02 .3685000000D+00 .3217469000D+01 .1815700000D+01 .5685700000D+01 .3516000000D+01 .2625100000D+01 -.1734000000D-01 .4215920000D+03 .1697630000D+01 .5546000000D-02 .8366000000D+00 .4740815000D+01 .3163000000D+01 .4826000000D+00 .5086600000D+01 +1 620100501201005312455317.4 -.1400400000D+01 -.2452000000D-01 .3810289000D+03 .1314690000D+01 .6345000000D-02 .7598000000D+00 .2780428000D+01 .1168700000D+01 .4387200000D+01 .3226300000D+01 -.5976000000D+00 -.1267000000D-01 .1816627000D+03 .5448600000D+00 .3009000000D-02 .3641000000D+00 .2852385000D+01 .1321300000D+01 .4718700000D+01 .3306100000D+01 .2179500000D+01 -.3495000000D-01 .4214999000D+03 .1423090000D+01 .7334000000D-02 .8518000000D+00 .4364625000D+01 .2798900000D+01 .6215300000D+01 .4790600000D+01 +1 720100531201006302455347.4 -.2158200000D+01 -.7120000000D-02 .3807788000D+03 .9584900000D+00 .9317000000D-02 .7866000000D+00 .2425966000D+01 .8308000000D+00 .3949400000D+01 .3006000000D+01 -.9846000000D+00 -.4730000000D-02 .1821034000D+03 .3809500000D+00 .4200000000D-02 .3777000000D+00 .2511003000D+01 .8794000000D+00 .4032900000D+01 .3096800000D+01 .1191800000D+01 -.3910000000D-01 .4215807000D+03 .9895900000D+00 .8766000000D-02 .8642000000D+00 .4012162000D+01 .2431700000D+01 .5636000000D+01 .4546300000D+01 +1 820100630201007302455377.4 -.2323300000D+01 .2640000000D-02 .3808995000D+03 .4313500000D+00 .1103500000D-01 .8166000000D+00 .2106298000D+01 .5594000000D+00 .3692100000D+01 .2864200000D+01 -.1103500000D+01 -.2000000000D-03 .1817023000D+03 .1447500000D+00 .4847000000D-02 .3925000000D+00 .2202851000D+01 .5403000000D+00 .3690400000D+01 .2961100000D+01 .2500000000D-02 -.3311000000D-01 .4215918000D+03 .4294600000D+00 .1107900000D-01 .8615000000D+00 .3694629000D+01 .2050800000D+01 .5176900000D+01 .4364600000D+01 +1 920100730201008292455407.4 -.2066000000D+01 .8680000000D-02 .3809659000D+03 .2288700000D+00 .9203000000D-02 .8195000000D+00 .1831929000D+01 .3361100000D+01 .3493600000D+01 .2771300000D+01 -.1026500000D+01 .2730000000D-02 .1815997000D+03 .1427900000D+00 .3774000000D-02 .3944000000D+00 .1936466000D+01 .3380500000D+01 .3555300000D+01 .2866900000D+01 -.1010400000D+01 -.2698000000D-01 .4214050000D+03 .2629200000D+00 .1010400000D-01 .8242000000D+00 .3421750000D+01 .5033400000D+01 .4973000000D+01 .4256100000D+01 +1 1020100829201009282455437.4 -.1609400000D+01 .1478000000D-01 .3807766000D+03 .7923400000D+00 .2152000000D-02 .7694000000D+00 .1605202000D+01 .3185500000D+01 .3607600000D+01 .2673600000D+01 -.8478000000D+00 .6150000000D-02 .1821193000D+03 .3716200000D+00 .8860000000D-03 .3713000000D+00 .1711971000D+01 .3224100000D+01 .4434000000D+01 .2774500000D+01 -.1730300000D+01 -.2173000000D-01 .4213302000D+03 .8888600000D+00 .2047000000D-02 .8350000000D+00 .3195216000D+01 .4761500000D+01 .5246300000D+01 .4189500000D+01 +1 1120100928201010282455467.4 -.1096200000D+01 .2441000000D-01 .3806101000D+03 .8773700000D+00 .7063000000D-02 .7489000000D+00 .1406014000D+01 .2983700000D+01 .6075400000D+01 .2558600000D+01 -.6234000000D+00 .1135000000D-01 .1824307000D+03 .3751600000D+00 .3517000000D-02 .3614000000D+00 .1508537000D+01 .3107900000D+01 .6144600000D+01 .2661100000D+01 -.2223500000D+01 -.1547000000D-01 .4214676000D+03 .9992500000D+00 .9183000000D-02 .8727000000D+00 .2995306000D+01 .4578500000D+01 .1415200000D+01 .4095700000D+01 +1 1220101028201011272455497.4 -.4009000000D+00 .3043000000D-01 .3806589000D+03 .3867700000D+00 .1136900000D-01 .7649000000D+00 .1192241000D+01 .2723400000D+01 .5863200000D+01 .2419100000D+01 -.2953000000D+00 .1465000000D-01 .1820515000D+03 .1325500000D+00 .5017000000D-02 .3673000000D+00 .1286850000D+01 .2949400000D+01 .6035300000D+01 .2517000000D+01 -.2555400000D+01 -.2930000000D-02 .4216294000D+03 .4320600000D+00 .1339600000D-01 .9169000000D+00 .2780549000D+01 .4413100000D+01 .1280800000D+01 .3964000000D+01 +1 1320101127201012272455527.4 .5128000000D+00 .2932000000D-01 .3806878000D+03 .3308200000D+00 .1066100000D-01 .7897000000D+00 .9295010000D+00 .5690100000D+01 .5526900000D+01 .2275800000D+01 .1457000000D+00 .1460000000D-01 .1818277000D+03 .1877700000D+00 .4527000000D-02 .3805000000D+00 .1017491000D+01 .5817500000D+01 .5625000000D+01 .2363700000D+01 -.2615600000D+01 .1419000000D-01 .4215947000D+03 .4048500000D+00 .1074300000D-01 .9070000000D+00 .2517071000D+01 .9183000000D+00 .9360000000D+00 .3771100000D+01 +1 1420101227201101262455557.4 .1504100000D+01 .1947000000D-01 .3805449000D+03 .9603700000D+00 .7558000000D-02 .7712000000D+00 .6123020000D+00 .5325700000D+01 .5104500000D+01 .2046500000D+01 .6385000000D+00 .1028000000D-01 .1821168000D+03 .4562200000D+00 .3335000000D-02 .3717000000D+00 .6983080000D+00 .5451800000D+01 .4965600000D+01 .2134400000D+01 -.2167200000D+01 .2876000000D-01 .4214995000D+03 .1096150000D+01 .7198000000D-02 .8710000000D+00 .2199405000D+01 .6447000000D+00 .2675000000D+00 .3553900000D+01 +1 1520110126201102252455587.4 .2205500000D+01 .7490000000D-02 .3805645000D+03 .1393930000D+01 .4361000000D-02 .7400000000D+00 .2532630000D+00 .4979500000D+01 .4390000000D+01 .1744600000D+01 .1007800000D+01 .4540000000D-02 .1820301000D+03 .6352900000D+00 .2563000000D-02 .3531000000D+00 .3424980000D+00 .5028900000D+01 .3909300000D+01 .1842500000D+01 -.1190200000D+01 .3735000000D-01 .4215114000D+03 .1528310000D+01 .5293000000D-02 .8522000000D+00 .1840621000D+01 .2761000000D+00 .5789300000D+01 .3306100000D+01 +1 1620110225201103272455617.4 .2387000000D+01 -.7250000000D-02 .3814165000D+03 .1613530000D+01 .3392000000D-02 .7658000000D+00 .6152039000D+01 .4619100000D+01 .3332700000D+01 .1405600000D+01 .1131700000D+01 -.2700000000D-02 .1804120000D+03 .7147500000D+00 .2951000000D-02 .3540000000D+00 .6248851000D+01 .4561200000D+01 .2922600000D+01 .1509500000D+01 .1057000000D+00 .3831000000D-01 .4214881000D+03 .1776020000D+01 .3546000000D-02 .8473000000D+00 .1457591000D+01 .6162000000D+01 .4786900000D+01 .3070200000D+01 +1 1720110327201104262455647.4 .2015600000D+01 -.2410000000D-01 .3834768000D+03 .1672190000D+01 .2975000000D-02 .7971000000D+00 .5757070000D+01 .4234300000D+01 .2369900000D+01 .1129400000D+01 .9847000000D+00 -.1036000000D-01 .1765054000D+03 .7191000000D+00 .2970000000D-02 .3532000000D+00 .5864775000D+01 .4044400000D+01 .2149800000D+01 .1243500000D+01 .1340400000D+01 .3156000000D-01 .4212823000D+03 .1857990000D+01 .4505000000D-02 .8729000000D+00 .1063787000D+01 .5776300000D+01 .3642200000D+01 .2829500000D+01 +1 1820110426201105262455677.4 .1188900000D+01 -.3825000000D-01 .3865179000D+03 .1635840000D+01 .4010000000D-02 .8040000000D+00 .5363170000D+01 .3849800000D+01 .1223200000D+01 .9051000000D+00 .6294000000D+00 -.1601000000D-01 .1701043000D+03 .6842300000D+00 .3045000000D-02 .3398000000D+00 .5484476000D+01 .3514200000D+01 .1252900000D+01 .1033100000D+01 .2278100000D+01 .1224000000D-01 .4211338000D+03 .1754840000D+01 .5408000000D-02 .8750000000D+00 .6700820000D+00 .5393200000D+01 .3043100000D+01 .2566300000D+01 +1 1920110526201106252455707.4 .5540000000D-01 -.3984000000D-01 .3900921000D+03 .1469660000D+01 .6314000000D-02 .7859000000D+00 .4979312000D+01 .3490400000D+01 .6079000000D+00 .6574000000D+00 .1601000000D+00 -.1583000000D-01 .1617372000D+03 .5975000000D+00 .3372000000D-02 .3124000000D+00 .5116530000D+01 .3000400000D+01 .4744000000D+00 .8031000000D+00 .2673600000D+01 -.1152000000D-01 .4211813000D+03 .1527290000D+01 .5489000000D-02 .8583000000D+00 .2864890000D+00 .4995300000D+01 .2257900000D+01 .2307500000D+01 +1 2020110625201107252455737.4 -.1165500000D+01 -.2590000000D-01 .3937478000D+03 .1145270000D+01 .8086000000D-02 .7959000000D+00 .4614860000D+01 .3144900000D+01 .1241000000D+00 .4403000000D+00 -.3133000000D+00 -.1004000000D-01 .1527705000D+03 .4562900000D+00 .3514000000D-02 .2997000000D+00 .4769425000D+01 .2490300000D+01 .5995300000D+01 .5945000000D+00 .2418500000D+01 -.2937000000D-01 .4211595000D+03 .1207940000D+01 .8117000000D-02 .8274000000D+00 .6205662000D+01 .4616700000D+01 .1530300000D+01 .2029000000D+01 +1 2120110725201108242455767.4 -.2093100000D+01 -.7650000000D-02 .3966506000D+03 .6794900000D+00 .1027400000D-01 .8484000000D+00 .4280315000D+01 .2809900000D+01 .5942500000D+01 .2706000000D+00 -.6615000000D+00 -.3770000000D-02 .1451919000D+03 .2690100000D+00 .4199000000D-02 .3067000000D+00 .4451704000D+01 .1977000000D+01 .5301100000D+01 .4250000000D+00 .1579500000D+01 -.3270000000D-01 .4210242000D+03 .7201000000D+00 .1112100000D-01 .8075000000D+00 .5871022000D+01 .4303000000D+01 .1166000000D+01 .1815000000D+01 +1 2220110824201109232455797.4 -.2521300000D+01 .5850000000D-02 .3978971000D+03 .7204000000D-01 .1131300000D-01 .8665000000D+00 .3986495000D+01 .2797900000D+01 .5686300000D+01 .1629000000D+00 -.8491000000D+00 -.8000000000D-04 .1413429000D+03 .3735000000D-01 .4387000000D-02 .3107000000D+00 .4170327000D+01 .6221000000D+00 .4969600000D+01 .3281000000D+00 .5063000000D+00 -.2860000000D-01 .4209856000D+03 .4078000000D-01 .1125900000D-01 .8238000000D+00 .5577073000D+01 .4457800000D+01 .9238000000D+00 .1693600000D+01 +1 2320110923201110232455827.4 -.2457100000D+01 .1133000000D-01 .3972324000D+03 .6096700000D+00 .6582000000D-02 .8494000000D+00 .3740343000D+01 .5338800000D+01 .5709600000D+01 .6110000000D-01 -.9006000000D+00 .1200000000D-02 .1429707000D+03 .2615600000D+00 .2205000000D-02 .3120000000D+00 .3926973000D+01 .4773900000D+01 .5051000000D+01 .2319000000D+00 -.4566000000D+00 -.2471000000D-01 .4210544000D+03 .6889800000D+00 .5698000000D-02 .8287000000D+00 .5331745000D+01 .6230000000D+00 .7627000000D+00 .1639300000D+01 +1 2420111023201111222455857.4 -.2147600000D+01 .1749000000D-01 .3950842000D+03 .9786300000D+00 .4843000000D-02 .7981000000D+00 .3533473000D+01 .5173000000D+01 .1648700000D+01 .6232600000D+01 -.8804000000D+00 .4150000000D-02 .1491047000D+03 .3986000000D+00 .2271000000D-02 .3072000000D+00 .3711658000D+01 .4569500000D+01 .1231700000D+01 .1242000000D+00 -.1216600000D+01 -.2347000000D-01 .4211227000D+03 .1041970000D+01 .4565000000D-02 .8475000000D+00 .5126123000D+01 .4391000000D+00 .3542100000D+01 .1554200000D+01 +1 2520111122201112222455887.4 -.1676200000D+01 .2690000000D-01 .3927040000D+03 .6907200000D+00 .1184900000D-01 .7986000000D+00 .3330940000D+01 .4996900000D+01 .1806900000D+01 .6126200000D+01 -.7725000000D+00 .9390000000D-02 .1555211000D+03 .2644800000D+00 .4993000000D-02 .3221000000D+00 .3495120000D+01 .4349100000D+01 .1350000000D+01 .7000000000D-03 -.1862600000D+01 -.1890000000D-01 .4210998000D+03 .7058800000D+00 .1166300000D-01 .8483000000D+00 .4923887000D+01 .2278000000D+00 .3386700000D+01 .1388700000D+01 +1 2620111222201201212455917.4 -.1005400000D+01 .3781000000D-01 .3914605000D+03 .3923000000D-01 .1171000000D-01 .8155000000D+00 .3090423000D+01 .1370400000D+01 .1584000000D+01 .5997600000D+01 -.5420000000D+00 .1504000000D-01 .1583519000D+03 .6563000000D-01 .4780000000D-02 .3337000000D+00 .3243011000D+01 .1966300000D+01 .1064500000D+01 .6141900000D+01 -.2442400000D+01 -.5390000000D-02 .4210796000D+03 .6338000000D-01 .1230000000D-01 .8697000000D+00 .4682607000D+01 .3476100000D+01 .3044800000D+01 .1210100000D+01 +1 2720120121201202202455947.4 -.1600000000D-01 .3899000000D-01 .3920197000D+03 .7539000000D+00 .8451000000D-02 .8260000000D+00 .2794573000D+01 .1326700000D+01 .1107200000D+01 .5827900000D+01 -.1522000000D+00 .1564000000D-01 .1565334000D+03 .3347600000D+00 .3623000000D-02 .3307000000D+00 .2942500000D+01 .9772000000D+00 .3647000000D+00 .5968000000D+01 -.2729200000D+01 .1347000000D-01 .4211575000D+03 .8125700000D+00 .9482000000D-02 .8727000000D+00 .4385841000D+01 .2838100000D+01 .2605500000D+01 .1020000000D+01 +1 2820120220201203212455977.4 .1139200000D+01 .2971000000D-01 .3944781000D+03 .1246990000D+01 .6176000000D-02 .8177000000D+00 .2451910000D+01 .9891000000D+00 .4479000000D+00 .5549500000D+01 .2999000000D+00 .1107000000D-01 .1502824000D+03 .5210700000D+00 .3227000000D-02 .3040000000D+00 .2602978000D+01 .4811000000D+00 .5755700000D+01 .5701800000D+01 -.2476600000D+01 .3039000000D-01 .4211657000D+03 .1373900000D+01 .5659000000D-02 .8600000000D+00 .4042431000D+01 .2477300000D+01 .1931900000D+01 .8276000000D+00 +1 2920120321201204202456007.4 .2110500000D+01 .1357000000D-01 .3984480000D+03 .1545230000D+01 .4075000000D-02 .8164000000D+00 .2079574000D+01 .6028000000D+00 .6031900000D+01 .5230400000D+01 .6465000000D+00 .3890000000D-02 .1398609000D+03 .6323100000D+00 .3007000000D-02 .2718000000D+00 .2241387000D+01 .6228800000D+01 .4858300000D+01 .5404700000D+01 -.1582700000D+01 .3933000000D-01 .4210978000D+03 .1693910000D+01 .4397000000D-02 .8567000000D+00 .3668419000D+01 .2110400000D+01 .7906000000D+00 .5536000000D+00 +1 3020120420201205202456037.4 .2558500000D+01 -.4040000000D-02 .4031741000D+03 .1707970000D+01 .3212000000D-02 .8396000000D+00 .1692622000D+01 .2153000000D+00 .4737700000D+01 .4921000000D+01 .7604000000D+00 -.2160000000D-02 .1256268000D+03 .6882300000D+00 .3226000000D-02 .2410000000D+00 .1873447000D+01 .5683700000D+01 .3977400000D+01 .5124000000D+01 -.3354000000D+00 .4359000000D-01 .4211029000D+03 .1792130000D+01 .4705000000D-02 .8757000000D+00 .3278925000D+01 .1720500000D+01 .6283200000D+01 .2583000000D+00 +1 3120120520201206192456067.4 .2369300000D+01 -.2282000000D-01 .4080877000D+03 .1705220000D+01 .4753000000D-02 .8282000000D+00 .1302085000D+01 .6117800000D+01 .3870500000D+01 .4657000000D+01 .6548000000D+00 -.6090000000D-02 .1084502000D+03 .6904100000D+00 .3223000000D-02 .1967000000D+00 .1512459000D+01 .5126500000D+01 .3256000000D+01 .4917100000D+01 .9449000000D+00 .3948000000D-01 .4211772000D+03 .1757870000D+01 .4103000000D-02 .9201000000D+00 .2886155000D+01 .1311600000D+01 .5429500000D+01 .1500000000D-02 +1 3220120619201207192456097.4 .1654900000D+01 -.3959000000D-01 .4126998000D+03 .1552300000D+01 .5206000000D-02 .8234000000D+00 .9177920000D+00 .5721100000D+01 .3196000000D+01 .4434500000D+01 .4388000000D+00 -.7360000000D-02 .8980660000D+02 .6565800000D+00 .2755000000D-02 .1553000000D+00 .1172524000D+01 .4569200000D+01 .2395000000D+01 .4753300000D+01 .1963800000D+01 .2488000000D-01 .4211310000D+03 .1620880000D+01 .5280000000D-02 .9063000000D+00 .2499565000D+01 .9214000000D+00 .4507600000D+01 .6052500000D+01 +1 3320120719201208182456127.4 .5418000000D+00 -.4458000000D-01 .4163103000D+03 .1304600000D+01 .6972000000D-02 .8319000000D+00 .5488150000D+00 .5320100000D+01 .2357800000D+01 .4206100000D+01 .2133000000D+00 -.6010000000D-02 .7173690000D+02 .5788700000D+00 .3049000000D-02 .1215000000D+00 .8687640000D+00 .4054200000D+01 .1364600000D+01 .4583200000D+01 .2561500000D+01 .1100000000D-03 .4210857000D+03 .1331090000D+01 .7023000000D-02 .8598000000D+00 .2127785000D+01 .5576000000D+00 .3911400000D+01 .5826000000D+01 +1 3420120818201209172456157.4 -.6840000000D+00 -.3642000000D-01 .4184419000D+03 .9144600000D+00 .1036300000D-01 .8641000000D+00 .2042510000D+00 .4977100000D+01 .1883400000D+01 .4005100000D+01 .4760000000D-01 -.4110000000D-02 .5686470000D+02 .4234100000D+00 .4090000000D-02 .1039000000D+00 .6114730000D+00 .3599600000D+01 .5994000000D+00 .4442300000D+01 .2570600000D+01 -.2044000000D-01 .4211487000D+03 .8909500000D+00 .9077000000D-02 .8376000000D+00 .1781135000D+01 .2037000000D+00 .3379100000D+01 .5575800000D+01 +1 3520120917201210172456187.4 -.1727100000D+01 -.2098000000D-01 .4194107000D+03 .3082000000D+00 .1170200000D-01 .9082000000D+00 .6177991000D+01 .4778500000D+01 .1614900000D+01 .3814500000D+01 -.6440000000D-01 -.3400000000D-02 .4804210000D+02 .1758100000D+00 .4921000000D-02 .9880000000D-01 .3841440000D+00 .3184800000D+01 .1367000000D+00 .4293400000D+01 .1999000000D+01 -.2770000000D-01 .4211842000D+03 .3007400000D+00 .1131100000D-01 .8403000000D+00 .1471071000D+01 .6141600000D+01 .3000400000D+01 .5424200000D+01 +1 3620121017201211162456217.4 -.2315000000D+01 -.1058000000D-01 .4195219000D+03 .4399400000D+00 .8150000000D-02 .9016000000D+00 .5914363000D+01 .1169200000D+01 .1470000000D+01 .3686800000D+01 -.1653000000D+00 -.4120000000D-02 .4733040000D+02 .1413500000D+00 .3908000000D-02 .1063000000D+00 .1321930000D+00 .6239400000D+01 .6232200000D+01 .4151300000D+01 .1114100000D+01 -.2468000000D-01 .4211748000D+03 .4174500000D+00 .9187000000D-02 .8549000000D+00 .1207713000D+01 .2772900000D+01 .2844400000D+01 .5357600000D+01 +1 3720121116201212162456247.4 -.2506900000D+01 -.3730000000D-02 .4186985000D+03 .9796100000D+00 .1944000000D-02 .8705000000D+00 .5696106000D+01 .1037200000D+01 .3414800000D+01 .3613600000D+01 -.2885000000D+00 -.4300000000D-02 .5488480000D+02 .3933700000D+00 .4220000000D-03 .1244000000D+00 .6124294000D+01 .5997800000D+01 .1095300000D+01 .3996800000D+01 .2215000000D+00 -.2277000000D-01 .4212759000D+03 .9859400000D+00 .1282000000D-02 .8321000000D+00 .9901770000D+00 .2564600000D+01 .4504600000D+01 .5306600000D+01 +1 3820121216201301152456277.4 -.2421400000D+01 .3840000000D-02 .4169681000D+03 .8944600000D+00 .1018600000D-01 .8355000000D+00 .5496924000D+01 .8604000000D+00 .3954700000D+01 .3553000000D+01 -.3994000000D+00 -.2410000000D-02 .6661520000D+02 .3918300000D+00 .3859000000D-02 .1427000000D+00 .5841254000D+01 .5816000000D+01 .2757500000D+01 .3867000000D+01 -.5456000000D+00 -.2697000000D-01 .4213502000D+03 .9351500000D+00 .1064700000D-01 .8199000000D+00 .7922800000D+00 .2383900000D+01 .5495800000D+01 .5168500000D+01 +1 3920130115201302142456307.4 -.2133600000D+01 .1840000000D-01 .4154782000D+03 .2572300000D+00 .1273700000D-01 .8658000000D+00 .5272930000D+01 .5754000000D+00 .3713900000D+01 .3444500000D+01 -.4409000000D+00 .1880000000D-02 .7485230000D+02 .1546000000D+00 .5180000000D-02 .1589000000D+00 .5568427000D+01 .5371200000D+01 .2570000000D+01 .3705600000D+01 -.1304600000D+01 -.2859000000D-01 .4213118000D+03 .2659900000D+00 .1312400000D-01 .8213000000D+00 .5695070000D+00 .2208700000D+01 .5318000000D+01 .4964600000D+01 +1 4020130214201303162456337.4 -.1515200000D+01 .3289000000D-01 .4155192000D+03 .4897800000D+00 .1097600000D-01 .8957000000D+00 .4997609000D+01 .3533100000D+01 .3337600000D+01 .3255200000D+01 -.3625000000D+00 .5290000000D-02 .7482450000D+02 .1727700000D+00 .4443000000D-02 .1543000000D+00 .5281413000D+01 .2629700000D+01 .2107100000D+01 .3516900000D+01 -.2051200000D+01 -.1866000000D-01 .4211721000D+03 .5443300000D+00 .9949000000D-02 .8499000000D+00 .2943240000D+00 .5018900000D+01 .4916100000D+01 .4776400000D+01 +1 4120130316201304152456367.4 -.5039000000D+00 .3956000000D-01 .4170490000D+03 .1093330000D+01 .7254000000D-02 .9064000000D+00 .4673131000D+01 .3154800000D+01 .2873500000D+01 .3032400000D+01 -.1905000000D+00 .5250000000D-02 .6636420000D+02 .4223800000D+00 .3350000000D-02 .1287000000D+00 .4981203000D+01 .2025900000D+01 .1320700000D+01 .3329300000D+01 -.2607900000D+01 .3010000000D-02 .4211399000D+03 .1154740000D+01 .6810000000D-02 .8409000000D+00 .6251546000D+01 .4708500000D+01 .4217200000D+01 .4567200000D+01 +1 4220130415201305152456397.4 .7705000000D+00 .3315000000D-01 .4190994000D+03 .1496530000D+01 .4041000000D-02 .8717000000D+00 .4314129000D+01 .2784700000D+01 .1924400000D+01 .2763300000D+01 -.1670000000D-01 .1680000000D-02 .5135840000D+02 .5935100000D+00 .3071000000D-02 .8740000000D-01 .4699550000D+01 .1519300000D+01 .3671000000D+00 .3173400000D+01 -.2595200000D+01 .2280000000D-01 .4212576000D+03 .1516340000D+01 .5121000000D-02 .8171000000D+00 .5890237000D+01 .4333800000D+01 .3465500000D+01 .4324700000D+01 +1 4320130515201306142456427.4 .1925200000D+01 .1909000000D-01 .4208941000D+03 .1674820000D+01 .4246000000D-02 .8181000000D+00 .3935335000D+01 .2395900000D+01 .8251000000D+00 .2488600000D+01 .5330000000D-01 -.2210000000D-02 .3274470000D+02 .6935000000D+00 .3003000000D-02 .4930000000D-01 .4533287000D+01 .9955000000D+00 .5794400000D+01 .3287200000D+01 -.1898800000D+01 .3469000000D-01 .4213662000D+03 .1708350000D+01 .3577000000D-02 .8417000000D+00 .5509294000D+01 .3937800000D+01 .2513500000D+01 .4026200000D+01 +1 4420130614201307142456457.4 .2562100000D+01 .2640000000D-02 .4218192000D+03 .1689030000D+01 .3999000000D-02 .8095000000D+00 .3549239000D+01 .1975400000D+01 .5820000000D-01 .2209900000D+01 .2200000000D-02 -.3810000000D-02 .1787460000D+02 .7348400000D+00 .2845000000D-02 .3950000000D-01 .4900172000D+01 .4720000000D+00 .4936000000D+01 .4082200000D+01 -.6834000000D+00 .3727000000D-01 .4213600000D+03 .1745070000D+01 .4054000000D-02 .8885000000D+00 .5120609000D+01 .3552800000D+01 .1466200000D+01 .3769600000D+01 +1 4520130714201308132456487.4 .2570900000D+01 -.1618000000D-01 .4214023000D+03 .1614290000D+01 .4556000000D-02 .8220000000D+00 .3165645000D+01 .1554400000D+01 .5277900000D+01 .1967200000D+01 -.9550000000D-01 -.2000000000D-02 .2554850000D+02 .7161300000D+00 .2733000000D-02 .6970000000D-01 .5613465000D+01 .6247100000D+01 .4033200000D+01 .4527000000D+01 .6268000000D+00 .3525000000D-01 .4214699000D+03 .1620120000D+01 .4374000000D-02 .9246000000D+00 .4734088000D+01 .3163800000D+01 .7331000000D+00 .3546900000D+01 +1 4620130813201309122456517.4 .2001600000D+01 -.3292000000D-01 .4196991000D+03 .1407170000D+01 .6830000000D-02 .8421000000D+00 .2792751000D+01 .1170300000D+01 .4609000000D+01 .1765700000D+01 -.1387000000D+00 .2160000000D-02 .4399630000D+02 .6361500000D+00 .3008000000D-02 .1056000000D+00 .5582838000D+01 .5768000000D+01 .3075300000D+01 .4569200000D+01 .1745100000D+01 .2420000000D-01 .4216479000D+03 .1389580000D+01 .5398000000D-02 .8977000000D+00 .4359374000D+01 .2766300000D+01 .6092900000D+01 .3311000000D+01 +1 4720130912201310122456547.4 .1043200000D+01 -.4095000000D-01 .4175642000D+03 .1025040000D+01 .8666000000D-02 .8344000000D+00 .2439990000D+01 .8093000000D+00 .4097200000D+01 .1529300000D+01 -.6920000000D-01 .5770000000D-02 .6056130000D+02 .4853600000D+00 .3924000000D-02 .1341000000D+00 .5348812000D+01 .5346500000D+01 .2297800000D+01 .4443100000D+01 .2481500000D+01 .5100000000D-02 .4216526000D+03 .1048560000D+01 .9032000000D-02 .8639000000D+00 .4005992000D+01 .2399400000D+01 .5515800000D+01 .3090200000D+01 +1 4820131012201311112456577.4 -.1410000000D+00 -.3322000000D-01 .4158362000D+03 .4819000000D+00 .1055300000D-01 .8379000000D+00 .2119007000D+01 .4529000000D+00 .3626600000D+01 .1303500000D+01 .1071000000D+00 .5400000000D-02 .7159510000D+02 .2532100000D+00 .4902000000D-02 .1513000000D+00 .5078496000D+01 .5041200000D+01 .1790200000D+01 .4271800000D+01 .2719900000D+01 -.1439000000D-01 .4215633000D+03 .5048800000D+00 .1164600000D-01 .8566000000D+00 .3684644000D+01 .2102700000D+01 .5233000000D+01 .2912200000D+01 +1 4920131111201312112456607.4 -.1219900000D+01 -.1965000000D-01 .4152340000D+03 .2027300000D+00 .1002900000D-01 .8658000000D+00 .1841465000D+01 .3385400000D+01 .3359400000D+01 .1131000000D+01 .2916000000D+00 .1990000000D-02 .7484340000D+02 .6578000000D-01 .4753000000D-02 .1537000000D+00 .4817644000D+01 .8774000000D+00 .1582900000D+01 .4118400000D+01 .2463900000D+01 -.2459000000D-01 .4216742000D+03 .2208300000D+00 .1010100000D-01 .8693000000D+00 .3407118000D+01 .4978300000D+01 .5014400000D+01 .2836000000D+01 +1 5020131211201401102456637.4 -.1999100000D+01 -.8950000000D-02 .4161448000D+03 .8481100000D+00 .2827000000D-02 .8641000000D+00 .1611279000D+01 .3109700000D+01 .3554100000D+01 .1072500000D+01 .3841000000D+00 -.1520000000D-02 .6931150000D+02 .3516600000D+00 .2094000000D-02 .1311000000D+00 .4577319000D+01 .1203200000D+01 .1891200000D+01 .4031500000D+01 .1856900000D+01 -.2571000000D-01 .4218433000D+03 .8707600000D+00 .2295000000D-02 .8982000000D+00 .3177864000D+01 .4782400000D+01 .4852300000D+01 .2775000000D+01 +1 5120140110201402092456667.4 -.2421200000D+01 -.5220000000D-02 .4179585000D+03 .1013110000D+01 .8410000000D-02 .8570000000D+00 .1410593000D+01 .2922800000D+01 .5983900000D+01 .1032300000D+01 .3569000000D+00 -.2490000000D-02 .5750220000D+02 .4504500000D+00 .2933000000D-02 .1029000000D+00 .4338801000D+01 .1136500000D+01 .4035300000D+01 .3930100000D+01 .1118200000D+01 -.2714000000D-01 .4218586000D+03 .9885500000D+00 .7391000000D-02 .8802000000D+00 .2978390000D+01 .4594600000D+01 .1487900000D+01 .2669100000D+01 +1 5220140209201403112456697.4 -.2606400000D+01 .2030000000D-02 .4193518000D+03 .5182100000D+00 .1347300000D-01 .8511000000D+00 .1198343000D+01 .2726400000D+01 .5887400000D+01 .9138000000D+00 .2826000000D+00 -.1830000000D-02 .4660670000D+02 .2669200000D+00 .5192000000D-02 .8830000000D-01 .4073637000D+01 .1001100000D+01 .4112500000D+01 .3756000000D+01 .2798000000D+00 -.3197000000D-01 .4216530000D+03 .4710900000D+00 .1173900000D-01 .8609000000D+00 .2766660000D+01 .4364800000D+01 .1226000000D+01 .2486100000D+01 +1 5320140311201404102456727.4 -.2540500000D+01 .1725000000D-01 .4197306000D+03 .2647600000D+00 .1133500000D-01 .8871000000D+00 .9407000000D+00 .5596900000D+01 .5610000000D+01 .7099000000D+00 .2302000000D+00 -.1640000000D-02 .4328050000D+02 .4874000000D-01 .4819000000D-02 .9720000000D-01 .3799009000D+01 .3908400000D+01 .3796700000D+01 .3603600000D+01 -.6372000000D+00 -.3574000000D-01 .4215491000D+03 .2783800000D+00 .1089500000D-01 .8390000000D+00 .2508749000D+01 .9947000000D+00 .8475000000D+00 .2281600000D+01 +1 5420140410201405102456757.4 -.2113400000D+01 .3686000000D-01 .4190727000D+03 .9340000000D+00 .7153000000D-02 .9077000000D+00 .6320450000D+00 .5307000000D+01 .5040200000D+01 .4838000000D+00 .2002000000D+00 -.3640000000D-02 .4902020000D+02 .3347600000D+00 .3483000000D-02 .1218000000D+00 .3535570000D+01 .3551600000D+01 .3163000000D+01 .3474900000D+01 -.1612000000D+01 -.2733000000D-01 .4215948000D+03 .9229300000D+00 .7916000000D-02 .8389000000D+00 .2199713000D+01 .6319000000D+00 .4161000000D+00 .2091300000D+01 +1 5520140510201406092456787.4 -.1198200000D+01 .4695000000D-01 .4174079000D+03 .1354620000D+01 .4808000000D-02 .8888000000D+00 .2844240000D+00 .4942200000D+01 .4201300000D+01 .2768000000D+00 .1247000000D+00 -.7050000000D-02 .6194420000D+02 .5313500000D+00 .2654000000D-02 .1508000000D+00 .3253312000D+01 .3127100000D+01 .2221100000D+01 .3333400000D+01 -.2390300000D+01 -.7630000000D-02 .4215954000D+03 .1380470000D+01 .4358000000D-02 .8318000000D+00 .1851945000D+01 .2769000000D+00 .6004400000D+01 .1864000000D+01 +1 5620140609201407092456817.4 .1036000000D+00 .4162000000D-01 .4145533000D+03 .1577180000D+01 .3204000000D-02 .8355000000D+00 .6196255000D+01 .4537100000D+01 .3304700000D+01 .1710000000D-01 -.6970000000D-01 -.9290000000D-02 .7907890000D+02 .6382000000D+00 .2501000000D-02 .1767000000D+00 .2935874000D+01 .2652800000D+01 .1279000000D+01 .3097600000D+01 -.2689600000D+01 .1655000000D-01 .4215332000D+03 .1620280000D+01 .3635000000D-02 .8382000000D+00 .1479963000D+01 .6202300000D+01 .4824300000D+01 .1604700000D+01 +1 5720140709201408082456847.4 .1384100000D+01 .2696000000D-01 .4105148000D+03 .1665540000D+01 .3222000000D-02 .8022000000D+00 .5813601000D+01 .4136500000D+01 .1983600000D+01 .6019800000D+01 -.3648000000D+00 -.8850000000D-02 .9755910000D+02 .6791700000D+00 .2322000000D-02 .2054000000D+00 .2592230000D+01 .2152100000D+01 .3605000000D+00 .2825400000D+01 -.2266600000D+01 .3276000000D-01 .4216523000D+03 .1667600000D+01 .3620000000D-02 .8635000000D+00 .1096668000D+01 .5815900000D+01 .4096600000D+01 .1301600000D+01 +1 5820140808201409072456877.4 .2233300000D+01 .1047000000D-01 .4057678000D+03 .1597850000D+01 .4537000000D-02 .8223000000D+00 .5429264000D+01 .3752900000D+01 .1232400000D+01 .5768200000D+01 -.6514000000D+00 -.5690000000D-02 .1151389000D+03 .6634700000D+00 .2442000000D-02 .2463000000D+00 .2236385000D+01 .1662300000D+01 .5714900000D+01 .2587200000D+01 -.1265300000D+01 .4149000000D-01 .4218441000D+03 .1614520000D+01 .3161000000D-02 .8722000000D+00 .7129220000D+00 .5410500000D+01 .2969800000D+01 .1011700000D+01 +1 5920140907201410072456907.4 .2441300000D+01 -.4610000000D-02 .4011329000D+03 .1398490000D+01 .5483000000D-02 .8187000000D+00 .5052753000D+01 .3370300000D+01 .5560000000D+00 .5576000000D+01 -.7974000000D+00 -.6000000000D-03 .1302728000D+03 .5856500000D+00 .2628000000D-02 .2767000000D+00 .1881687000D+01 .1192100000D+01 .4855200000D+01 .2411000000D+01 -.1310000000D-01 .4269000000D-01 .4218564000D+03 .1465190000D+01 .5911000000D-02 .8809000000D+00 .3376480000D+00 .5030200000D+01 .2066400000D+01 .7674000000D+00 +1 6020141007201411062456937.4 .2136200000D+01 -.2113000000D-01 .3971332000D+03 .1093190000D+01 .7951000000D-02 .7947000000D+00 .4694004000D+01 .3003500000D+01 .6213100000D+01 .5395600000D+01 -.7645000000D+00 .6460000000D-02 .1418950000D+03 .4522600000D+00 .3295000000D-02 .2924000000D+00 .1540125000D+01 .7521000000D+00 .3964200000D+01 .2245400000D+01 .1161000000D+01 .3605000000D-01 .4217938000D+03 .1136550000D+01 .8698000000D-02 .8616000000D+00 .6263124000D+01 .4684800000D+01 .1622400000D+01 .5710000000D+00 +1 6120141106201412062456967.4 .1448500000D+01 -.3189000000D-01 .3942785000D+03 .6265900000D+00 .1078400000D-01 .7718000000D+00 .4364088000D+01 .2694900000D+01 .5857700000D+01 .5163300000D+01 -.5529000000D+00 .1171000000D-01 .1493640000D+03 .2563900000D+00 .4592000000D-02 .2968000000D+00 .1223493000D+01 .4358000000D+00 .3426100000D+01 .2026500000D+01 .2053000000D+01 .2064000000D-01 .4218724000D+03 .6206200000D+00 .1081200000D-01 .8543000000D+00 .5934572000D+01 .4336000000D+01 .1193000000D+01 .4360000000D+00 +1 6220141206201501052456997.4 .5674000000D+00 -.3327000000D-01 .3931719000D+03 .3354000000D-01 .1047100000D-01 .7801000000D+00 .4075166000D+01 .5089300000D+01 .5628400000D+01 .4973100000D+01 -.2277000000D+00 .1262000000D-01 .1523158000D+03 .5455000000D-01 .4652000000D-02 .3006000000D+00 .9436470000D+00 .2004600000D+01 .3248600000D+01 .1845700000D+01 .2550400000D+01 .3440000000D-02 .4218944000D+03 .5223000000D-01 .1120600000D-01 .8820000000D+00 .5647434000D+01 .1555400000D+01 .8601000000D+00 .3048000000D+00 +1 6320150105201502042457027.4 -.3650000000D+00 -.2529000000D-01 .3940510000D+03 .7020700000D+00 .4336000000D-02 .7983000000D+00 .3834708000D+01 .5315500000D+01 .5503700000D+01 .4860200000D+01 .1306000000D+00 .8970000000D-02 .1504291000D+03 .3147700000D+00 .2319000000D-02 .2968000000D+00 .7071860000D+00 .2788600000D+01 .3567100000D+01 .1737800000D+01 .2602400000D+01 -.7010000000D-02 .4218045000D+03 .7032700000D+00 .5881000000D-02 .9308000000D+00 .5408005000D+01 .7178000000D+00 .7312000000D+00 .2077000000D+00 +1 6420150204201503062457057.4 -.1179200000D+01 -.1858000000D-01 .3964071000D+03 .9827200000D+00 .5451000000D-02 .7870000000D+00 .3630742000D+01 .5125600000D+01 .1981400000D+01 .4825900000D+01 .4216000000D+00 .5670000000D-02 .1441916000D+03 .4324000000D+00 .2654000000D-02 .2767000000D+00 .5017060000D+00 .2771200000D+01 .5502700000D+01 .1703400000D+01 .2326700000D+01 -.1272000000D-01 .4217314000D+03 .9914800000D+00 .4559000000D-02 .9510000000D+00 .5203623000D+01 .4904000000D+00 .3462900000D+01 .1069000000D+00 +1 6520150306201504052457087.4 -.1834800000D+01 -.1477000000D-01 .3988828000D+03 .6313500000D+00 .1110600000D-01 .7848000000D+00 .3425736000D+01 .4901200000D+01 .1809600000D+01 .4724300000D+01 .6240000000D+00 .4350000000D-02 .1367781000D+03 .2861700000D+00 .4799000000D-02 .2635000000D+00 .2913100000D+00 .2739600000D+01 .5743000000D+01 .1591400000D+01 .1783900000D+01 -.1882000000D-01 .4217525000D+03 .6454500000D+00 .1142300000D-01 .9026000000D+00 .4997660000D+01 .2750000000D+00 .3392100000D+01 .6281800000D+01 +1 6620150405201505052457117.4 -.2278800000D+01 -.1039000000D-01 .4000560000D+03 .6380000000D-01 .1095400000D-01 .7927000000D+00 .3181643000D+01 .2011500000D+01 .1473300000D+01 .4522200000D+01 .7531000000D+00 .4030000000D-02 .1330280000D+03 .3594000000D-01 .4551000000D-02 .2659000000D+00 .4234100000D-01 .4228300000D+01 .5499300000D+01 .1383000000D+01 .1028200000D+01 -.2946000000D-01 .4217855000D+03 .7666000000D-01 .1121400000D-01 .8645000000D+00 .4753087000D+01 .3133000000D+01 .3168700000D+01 .6125000000D+01 +1 6720150505201506042457147.4 -.2450000000D+01 .2700000000D-02 .3994489000D+03 .7048700000D+00 .8221000000D-02 .8380000000D+00 .2886740000D+01 .1254100000D+01 .1044300000D+01 .4277600000D+01 .8251000000D+00 .8400000000D-03 .1352284000D+03 .2843400000D+00 .3421000000D-02 .2933000000D+00 .6030186000D+01 .5126900000D+01 .4938800000D+01 .1141700000D+01 .3810000000D-01 -.3678000000D-01 .4217021000D+03 .7782400000D+00 .7370000000D-02 .8514000000D+00 .4458247000D+01 .2890800000D+01 .2722800000D+01 .5921600000D+01 +1 6820150604201507042457177.4 -.2244000000D+01 .2217000000D-01 .3971556000D+03 .1181260000D+01 .4653000000D-02 .8426000000D+00 .2549955000D+01 .8827000000D+00 .4968000000D+00 .4036300000D+01 .8044000000D+00 -.6040000000D-02 .1421964000D+03 .4816100000D+00 .2389000000D-02 .3141000000D+00 .5698035000D+01 .4767300000D+01 .4165300000D+01 .9082000000D+00 -.1062800000D+01 -.3369000000D-01 .4215872000D+03 .1253380000D+01 .4953000000D-02 .8777000000D+00 .4121510000D+01 .2571500000D+01 .1896500000D+01 .5701300000D+01 +1 6920150704201508032457207.4 -.1552900000D+01 .3735000000D-01 .3936752000D+03 .1467900000D+01 .2650000000D-02 .8082000000D+00 .2185239000D+01 .5246000000D+00 .5523200000D+01 .3798900000D+01 .6107000000D+00 -.1333000000D-01 .1514732000D+03 .6093100000D+00 .1835000000D-02 .3228000000D+00 .5341630000D+01 .4335900000D+01 .2998800000D+01 .6796000000D+00 -.2089000000D+01 -.1527000000D-01 .4216086000D+03 .1503650000D+01 .4160000000D-02 .8704000000D+00 .3757489000D+01 .2199400000D+01 .1169300000D+01 .5444400000D+01 +1 7020150803201509022457237.4 -.4338000000D+00 .3904000000D-01 .3898614000D+03 .1557350000D+01 .3270000000D-02 .7731000000D+00 .1805166000D+01 .1592000000D+00 .4525900000D+01 .3530000000D+01 .2078000000D+00 -.1625000000D-01 .1609227000D+03 .6592200000D+00 .2277000000D-02 .3285000000D+00 .4972070000D+01 .3885300000D+01 .2025100000D+01 .4213000000D+00 -.2659400000D+01 .7100000000D-02 .4216730000D+03 .1622570000D+01 .2743000000D-02 .8294000000D+00 .3379498000D+01 .1804000000D+01 .2522000000D+00 .5167300000D+01 +1 7120150902201510022457267.4 .8467000000D+00 .2779000000D-01 .3864549000D+03 .1517230000D+01 .3348000000D-02 .7633000000D+00 .1421123000D+01 .6060200000D+01 .3669600000D+01 .3302300000D+01 -.3308000000D+00 -.1318000000D-01 .1690972000D+03 .6428200000D+00 .2292000000D-02 .3420000000D+00 .4599763000D+01 .3408700000D+01 .1264600000D+01 .2056000000D+00 -.2524200000D+01 .2433000000D-01 .4216331000D+03 .1625320000D+01 .3700000000D-02 .8093000000D+00 .2997899000D+01 .1424400000D+01 .5292600000D+01 .4843100000D+01 +1 7220151002201511012457297.4 .1841300000D+01 .1361000000D-01 .3837145000D+03 .1391040000D+01 .5216000000D-02 .7875000000D+00 .1042889000D+01 .5692400000D+01 .2801900000D+01 .3107300000D+01 -.8039000000D+00 -.7600000000D-02 .1751242000D+03 .5847900000D+00 .2586000000D-02 .3665000000D+00 .4233842000D+01 .2933200000D+01 .2498000000D+00 .2030000000D-01 -.1714000000D+01 .3225000000D-01 .4216283000D+03 .1470720000D+01 .5389000000D-02 .8187000000D+00 .2621910000D+01 .1054500000D+01 .4607600000D+01 .4577200000D+01 +1 7320151101201512012457327.4 .2330700000D+01 -.1040000000D-02 .3818315000D+03 .1120570000D+01 .7830000000D-02 .7892000000D+00 .6799530000D+00 .5368800000D+01 .2372300000D+01 .2916800000D+01 -.1075600000D+01 -.9400000000D-03 .1788240000D+03 .4649400000D+00 .3682000000D-02 .3745000000D+00 .3883200000D+01 .2519400000D+01 .5841100000D+01 .6125400000D+01 -.5641000000D+00 .3556000000D-01 .4217156000D+03 .1178810000D+01 .7612000000D-02 .8447000000D+00 .2261707000D+01 .6786000000D+00 .3932000000D+01 .4404600000D+01 +1 7420151201201512312457357.4 .2290400000D+01 -.1379000000D-01 .3810025000D+03 .6645200000D+00 .9376000000D-02 .7871000000D+00 .3437300000D+00 .5073000000D+01 .1998000000D+01 .2724600000D+01 -.1103100000D+01 .5190000000D-02 .1806951000D+03 .2578500000D+00 .4274000000D-02 .3756000000D+00 .3558341000D+01 .2185100000D+01 .5358400000D+01 .5941400000D+01 .5808000000D+00 .3358000000D-01 .4216833000D+03 .7354400000D+00 .1102600000D-01 .8310000000D+00 .1928332000D+01 .3250000000D+00 .3458100000D+01 .4258600000D+01 +1 7520151231201601302457387.4 .1894000000D+01 -.2471000000D-01 .3808683000D+03 .6573000000D-01 .9534000000D-02 .7618000000D+00 .4717000000D-01 .4864000000D+01 .1635400000D+01 .2537000000D+01 -.9560000000D+00 .1081000000D-01 .1814042000D+03 .2127000000D-01 .4072000000D-02 .3628000000D+00 .3270845000D+01 .4005700000D+01 .4997000000D+01 .5762700000D+01 .1560700000D+01 .2318000000D-01 .4215465000D+03 .1001800000D+00 .1208900000D-01 .8329000000D+00 .1633509000D+01 .6450000000D-01 .3216200000D+01 .4118900000D+01 +1 7620160130201602292457417.4 .1268800000D+01 -.2874000000D-01 .3809636000D+03 .5552700000D+00 .5802000000D-02 .7434000000D+00 .6081524000D+01 .1352300000D+01 .1430100000D+01 .2437900000D+01 -.6879000000D+00 .1345000000D-01 .1813539000D+03 .2790100000D+00 .2228000000D-02 .3550000000D+00 .3026944000D+01 .4643300000D+01 .5007700000D+01 .5671100000D+01 .2270200000D+01 .8020000000D-02 .4214725000D+03 .6117100000D+00 .6853000000D-02 .8720000000D+00 .1385180000D+01 .2934400000D+01 .3139600000D+01 .3968700000D+01 +1 7720160229201603302457447.4 .5431000000D+00 -.2879000000D-01 .3813518000D+03 .9088300000D+00 .2868000000D-02 .7515000000D+00 .5872155000D+01 .1123600000D+01 .3972600000D+01 .2385300000D+01 -.3552000000D+00 .1400000000D-01 .1803957000D+03 .4083000000D+00 .1882000000D-02 .3566000000D+00 .2816870000D+01 .4511900000D+01 .8849000000D+00 .5617300000D+01 .2691300000D+01 -.5780000000D-02 .4214686000D+03 .1001370000D+01 .3662000000D-02 .9136000000D+00 .1175751000D+01 .2744300000D+01 .5601200000D+01 .3889800000D+01 +1 7820160330201604292457477.4 -.2621000000D+00 -.2620000000D-01 .3821719000D+03 .7246000000D+00 .1006400000D-01 .7741000000D+00 .5669968000D+01 .8967000000D+00 .4005600000D+01 .2320600000D+01 .2870000000D-01 .1280000000D-01 .1785583000D+03 .2987800000D+00 .4581000000D-02 .3630000000D+00 .2609113000D+01 .4390100000D+01 .1125100000D+01 .5543900000D+01 .2752400000D+01 -.1383000000D-01 .4214666000D+03 .7490600000D+00 .1042900000D-01 .9153000000D+00 .9728340000D+00 .2544800000D+01 .5674700000D+01 .3811500000D+01 +1 7920160429201605292457507.4 -.1097900000D+01 -.2332000000D-01 .3829050000D+03 .1269300000D+00 .1131800000D-01 .7975000000D+00 .5436432000D+01 .6247000000D+00 .3811800000D+01 .2132100000D+01 .4307000000D+00 .1156000000D-01 .1771315000D+03 .3166000000D-01 .4947000000D-02 .3695000000D+00 .2368796000D+01 .4673700000D+01 .9769000000D+00 .5345600000D+01 .2462400000D+01 -.2158000000D-01 .4214191000D+03 .7471000000D-01 .1080000000D-01 .8794000000D+00 .7379260000D+00 .1998400000D+01 .5387600000D+01 .3695300000D+01 +1 8020160529201606282457537.4 -.1837000000D+01 -.1683000000D-01 .3828418000D+03 .5365700000D+00 .8178000000D-02 .7963000000D+00 .5153944000D+01 .3531700000D+01 .3504700000D+01 .1874300000D+01 .7975000000D+00 .9020000000D-02 .1773356000D+03 .2600300000D+00 .3582000000D-02 .3702000000D+00 .2082192000D+01 .6479000000D+00 .6026000000D+00 .5086600000D+01 .1786900000D+01 -.3120000000D-01 .4214547000D+03 .6109800000D+00 .8562000000D-02 .8807000000D+00 .4540770000D+00 .5228500000D+01 .4913800000D+01 .3473600000D+01 +1 8120160628201607282457567.4 -.2318100000D+01 -.3670000000D-02 .3820065000D+03 .1041610000D+01 .4706000000D-02 .8020000000D+00 .4826968000D+01 .3234200000D+01 .2845100000D+01 .1599400000D+01 .1060800000D+01 .3410000000D-02 .1789380000D+03 .4793500000D+00 .2169000000D-02 .3770000000D+00 .1755379000D+01 .3397000000D+00 .5972800000D+01 .4814600000D+01 .8329000000D+00 -.4295000000D-01 .4215366000D+03 .1113860000D+01 .6207000000D-02 .9063000000D+00 .1268760000D+00 .4856200000D+01 .4382000000D+01 .3223500000D+01 +1 8220160728201608272457597.4 -.2390300000D+01 .1600000000D-01 .3811192000D+03 .1325750000D+01 .3603000000D-02 .7816000000D+00 .4468482000D+01 .2894300000D+01 .1975800000D+01 .1336800000D+01 .1144300000D+01 -.5830000000D-02 .1808537000D+03 .5990100000D+00 .2299000000D-02 .3701000000D+00 .1401070000D+01 .6225300000D+01 .4911800000D+01 .4561500000D+01 -.3376000000D+00 -.4458000000D-01 .4215286000D+03 .1445560000D+01 .3776000000D-02 .9325000000D+00 .6052791000D+01 .4481500000D+01 .3645400000D+01 .2994500000D+01 +1 8320160827201609262457627.4 -.1969700000D+01 .3462000000D-01 .3807700000D+03 .1462850000D+01 .2510000000D-02 .7705000000D+00 .4092429000D+01 .2520200000D+01 .1154700000D+01 .1106600000D+01 .9923000000D+00 -.1515000000D-01 .1819123000D+03 .6473400000D+00 .2243000000D-02 .3659000000D+00 .1032403000D+01 .5759300000D+01 .4118600000D+01 .4337800000D+01 -.1521700000D+01 -.3107000000D-01 .4214194000D+03 .1604900000D+01 .3321000000D-02 .8957000000D+00 .5678111000D+01 .4112800000D+01 .2539400000D+01 .2737100000D+01 +1 8420160926201610262457657.4 -.1021100000D+01 .4126000000D-01 .3811335000D+03 .1503460000D+01 .2959000000D-02 .7683000000D+00 .3710127000D+01 .2152800000D+01 .6023800000D+01 .8508000000D+00 .5772000000D+00 -.1887000000D-01 .1812529000D+03 .6523100000D+00 .2401000000D-02 .3615000000D+00 .6599860000D+00 .5278000000D+01 .3095000000D+01 .4086900000D+01 -.2419800000D+01 -.5870000000D-02 .4214112000D+03 .1599140000D+01 .3436000000D-02 .8474000000D+00 .5297136000D+01 .3730000000D+01 .1695700000D+01 .2450800000D+01 +1 8520161026201611252457687.4 .1938000000D+00 .3666000000D-01 .3822729000D+03 .1402810000D+01 .5162000000D-02 .7801000000D+00 .3331239000D+01 .1811300000D+01 .5388700000D+01 .5969000000D+00 .2440000000D-01 -.1689000000D-01 .1786620000D+03 .5920200000D+00 .3052000000D-02 .3605000000D+00 .2928320000D+00 .4816100000D+01 .2351000000D+01 .3842400000D+01 -.2674800000D+01 .1576000000D-01 .4214426000D+03 .1487390000D+01 .4311000000D-02 .8404000000D+00 .4920258000D+01 .3337700000D+01 .6137000000D+00 .2152700000D+01 +1 8620161125201612252457717.4 .1315900000D+01 .2561000000D-01 .3841807000D+03 .1136330000D+01 .6558000000D-02 .8192000000D+00 .2966072000D+01 .1469800000D+01 .4850800000D+01 .3563000000D+00 -.4901000000D+00 -.1185000000D-01 .1747341000D+03 .4605000000D+00 .3128000000D-02 .3663000000D+00 .6223596000D+01 .4341800000D+01 .1632400000D+01 .3607700000D+01 -.2197800000D+01 .2737000000D-01 .4213512000D+03 .1248130000D+01 .7638000000D-02 .8240000000D+00 .4557071000D+01 .2973400000D+01 .6224000000D+01 .1948200000D+01 +1 8720161225201701242457747.4 .2012700000D+01 .1510000000D-01 .3861809000D+03 .7304500000D+00 .8584000000D-02 .8222000000D+00 .2626380000D+01 .1126700000D+01 .4289900000D+01 .1781000000D+00 -.8158000000D+00 -.7620000000D-02 .1706169000D+03 .2809000000D+00 .3667000000D-02 .3566000000D+00 .5896536000D+01 .3846100000D+01 .8476000000D+00 .3439400000D+01 -.1265100000D+01 .3188000000D-01 .4212705000D+03 .8078000000D+00 .1036500000D-01 .8047000000D+00 .4218422000D+01 .2653400000D+01 .5846500000D+01 .1810800000D+01 +1 8820170124201702232457777.4 .2271700000D+01 .2820000000D-02 .3873647000D+03 .1761500000D+00 .9994000000D-02 .7968000000D+00 .2323793000D+01 .8768000000D+00 .3966400000D+01 .7030000000D-01 -.9635000000D+00 -.3130000000D-02 .1679314000D+03 .5235000000D-01 .4109000000D-02 .3439000000D+00 .5604511000D+01 .3011800000D+01 .4385000000D+00 .3341100000D+01 -.2192000000D+00 .3289000000D-01 .4213330000D+03 .1781400000D+00 .1090800000D-01 .7767000000D+00 .3916604000D+01 .2329000000D+01 .5510500000D+01 .1680400000D+01 +1 8920170223201703252457807.4 .2179900000D+01 -.8410000000D-02 .3872442000D+03 .4686900000D+00 .6646000000D-02 .7567000000D+00 .2066745000D+01 .3648700000D+01 .3889800000D+01 .6265200000D+01 -.9804000000D+00 .1320000000D-02 .1681411000D+03 .2242400000D+00 .2449000000D-02 .3333000000D+00 .5352882000D+01 .2781000000D+00 .4240000000D+00 .3266100000D+01 .6909000000D+00 .3139000000D-01 .4212994000D+03 .5053000000D+00 .7350000000D-02 .8029000000D+00 .3660737000D+01 .5262300000D+01 .5278100000D+01 .1552000000D+01 +1 9020170325201704242457837.4 .1856200000D+01 -.1779000000D-01 .3860375000D+03 .9101200000D+00 .2686000000D-02 .7752000000D+00 .1850969000D+01 .3470700000D+01 .6092700000D+01 .6204900000D+01 -.9057000000D+00 .6190000000D-02 .1711236000D+03 .3936500000D+00 .1544000000D-02 .3528000000D+00 .5135119000D+01 .6290000000D-01 .2829500000D+01 .3200900000D+01 .1469900000D+01 .2459000000D-01 .4211635000D+03 .9435600000D+00 .1306000000D-02 .8400000000D+00 .3445730000D+01 .5026500000D+01 .1305600000D+01 .1424500000D+01 +1 9120170424201705242457867.4 .1313300000D+01 -.2311000000D-01 .3845553000D+03 .8069400000D+00 .9693000000D-02 .8194000000D+00 .1649567000D+01 .3295100000D+01 .1252000000D+00 .6107400000D+01 -.7129000000D+00 .9830000000D-02 .1746729000D+03 .3251400000D+00 .4421000000D-02 .3783000000D+00 .4925730000D+01 .6195900000D+01 .3094000000D+01 .3088400000D+01 .2110300000D+01 .1451000000D-01 .4210634000D+03 .8308100000D+00 .9240000000D-02 .8551000000D+00 .3243771000D+01 .4796800000D+01 .1589100000D+01 .1343700000D+01 +1 9220170524201706232457897.4 .5402000000D+00 -.2623000000D-01 .3835975000D+03 .2409600000D+00 .1078600000D-01 .8326000000D+00 .1423900000D+01 .3148400000D+01 .6237100000D+01 .5984200000D+01 -.3829000000D+00 .1220000000D-01 .1766910000D+03 .6669000000D-01 .4653000000D-02 .3866000000D+00 .4690790000D+01 .5878700000D+01 .2945000000D+01 .2953600000D+01 .2580100000D+01 .1460000000D-02 .4211628000D+03 .2505600000D+00 .1188000000D-01 .8403000000D+00 .3016748000D+01 .4482100000D+01 .1370400000D+01 .1222500000D+01 +1 9320170623201707232457927.4 -.4031000000D+00 -.2708000000D-01 .3834485000D+03 .4141500000D+00 .8353000000D-02 .8003000000D+00 .1151494000D+01 .5898400000D+01 .5849500000D+01 .5777000000D+01 .5450000000D-01 .1276000000D-01 .1767116000D+03 .2167600000D+00 .3460000000D-02 .3685000000D+00 .4412199000D+01 .2707400000D+01 .2440400000D+01 .2746900000D+01 .2653900000D+01 -.9990000000D-02 .4213046000D+03 .4539600000D+00 .9861000000D-02 .8341000000D+00 .2743347000D+01 .1198600000D+01 .1057000000D+01 .1045800000D+01 +1 9420170723201708222457957.4 -.1345700000D+01 -.2489000000D-01 .3842839000D+03 .9199400000D+00 .6118000000D-02 .7624000000D+00 .8332470000D+00 .5600800000D+01 .5327100000D+01 .5518600000D+01 .5039000000D+00 .1139000000D-01 .1748542000D+03 .4231100000D+00 .2683000000D-02 .3441000000D+00 .4092679000D+01 .2303000000D+01 .1651500000D+01 .2503700000D+01 .2251600000D+01 -.2281000000D-01 .4213071000D+03 .1036060000D+01 .6320000000D-02 .8849000000D+00 .2424628000D+01 .8621000000D+00 .5213000000D+00 .7983000000D+00 +1 9520170822201709212457987.4 -.2074200000D+01 -.1545000000D-01 .3861257000D+03 .1266080000D+01 .3998000000D-02 .7797000000D+00 .4815220000D+00 .5248600000D+01 .4774500000D+01 .5239000000D+01 .8509000000D+00 .6580000000D-02 .1708650000D+03 .5557700000D+00 .2194000000D-02 .3379000000D+00 .3744680000D+01 .1845800000D+01 .7469000000D+00 .2237300000D+01 .1385500000D+01 -.3468000000D-01 .4212397000D+03 .1399390000D+01 .4643000000D-02 .9303000000D+00 .2072075000D+01 .5173000000D+00 .5955800000D+01 .5519000000D+00 +1 9620170921201710212458017.4 -.2458700000D+01 .4470000000D-02 .3889244000D+03 .1482200000D+01 .2326000000D-02 .7991000000D+00 .1094860000D+00 .4893800000D+01 .3599400000D+01 .4982300000D+01 .1025200000D+01 -.2100000000D-02 .1643500000D+03 .6295300000D+00 .2391000000D-02 .3272000000D+00 .3380989000D+01 .1366900000D+01 .5950000000D+01 .1994000000D+01 .2338000000D+00 -.4185000000D-01 .4213171000D+03 .1567690000D+01 .3665000000D-02 .9466000000D+00 .1699172000D+01 .1303000000D+00 .5268000000D+01 .2997000000D+00 +1 9720171021201711202458047.4 -.2319100000D+01 .2627000000D-01 .3926059000D+03 .1539790000D+01 .3395000000D-02 .8025000000D+00 .6011746000D+01 .4540900000D+01 .2477600000D+01 .4738900000D+01 .9641000000D+00 -.1033000000D-01 .1552344000D+03 .6346600000D+00 .2884000000D-02 .3064000000D+00 .3012667000D+01 .8659000000D+00 .5208400000D+01 .1762500000D+01 -.1038300000D+01 -.3410000000D-01 .4213706000D+03 .1626540000D+01 .2396000000D-02 .9041000000D+00 .1318032000D+01 .6012000000D+01 .3986100000D+01 .1860000000D-01 +1 9820171120201712202458077.4 -.1597700000D+01 .3895000000D-01 .3969674000D+03 .1449750000D+01 .4185000000D-02 .7961000000D+00 .5632745000D+01 .4168300000D+01 .1671600000D+01 .4439600000D+01 .6852000000D+00 -.1376000000D-01 .1440592000D+03 .5908500000D+00 .2693000000D-02 .2742000000D+00 .2650302000D+01 .3289000000D+00 .4434900000D+01 .1478900000D+01 -.2126800000D+01 -.1402000000D-01 .4212528000D+03 .1558770000D+01 .4786000000D-02 .8554000000D+00 .9385780000D+00 .5635600000D+01 .2862100000D+01 .6042400000D+01 +1 9920171220201801192458107.4 -.3951000000D+00 .3526000000D-01 .4012421000D+03 .1237570000D+01 .6193000000D-02 .8200000000D+00 .5266094000D+01 .3792800000D+01 .8287000000D+00 .4170800000D+01 .2748000000D+00 -.1113000000D-01 .1319928000D+03 .5088900000D+00 .2883000000D-02 .2516000000D+00 .2304092000D+01 .6079400000D+01 .3432300000D+01 .1219500000D+01 -.2683500000D+01 .7490000000D-02 .4211743000D+03 .1301800000D+01 .6954000000D-02 .8277000000D+00 .5707790000D+00 .5278600000D+01 .2339700000D+01 .5817500000D+01 +1 10020180119201802182458137.4 .8519000000D+00 .2494000000D-01 .4046835000D+03 .8586300000D+00 .9068000000D-02 .8624000000D+00 .4922347000D+01 .3455500000D+01 .3359000000D+00 .3975000000D+01 -.1027000000D+00 -.7390000000D-02 .1210731000D+03 .3628300000D+00 .3725000000D-02 .2408000000D+00 .1982862000D+01 .5581700000D+01 .2654700000D+01 .1027400000D+01 -.2567100000D+01 .2115000000D-01 .4212773000D+03 .8810000000D+00 .9013000000D-02 .8144000000D+00 .2262940000D+00 .4910200000D+01 .1783400000D+01 .5661800000D+01 +1 10120180218201803202458167.4 .1790300000D+01 .1446000000D-01 .4067795000D+03 .2832100000D+00 .9959000000D-02 .8444000000D+00 .4612934000D+01 .3192600000D+01 .1730000000D-01 .3858400000D+01 -.3740000000D+00 -.5260000000D-02 .1139926000D+03 .1437400000D+00 .4189000000D-02 .2286000000D+00 .1692571000D+01 .4996200000D+01 .2147400000D+01 .9323000000D+00 -.1923700000D+01 .2658000000D-01 .4212499000D+03 .3235600000D+00 .1116600000D-01 .8349000000D+00 .6200251000D+01 .4528900000D+01 .1401600000D+01 .5534100000D+01 +1 10220180320201804192458197.4 .2283800000D+01 .6760000000D-02 .4071068000D+03 .3869100000D+00 .6958000000D-02 .8096000000D+00 .4347489000D+01 .6010100000D+01 .6062700000D+01 .3769200000D+01 -.5498000000D+00 -.4880000000D-02 .1131131000D+03 .1384100000D+00 .3191000000D-02 .2286000000D+00 .1434430000D+01 .2231800000D+01 .1858700000D+01 .8513000000D+00 -.1097400000D+01 .2947000000D-01 .4210860000D+03 .3418800000D+00 .9336000000D-02 .8287000000D+00 .5935211000D+01 .1230400000D+01 .1261800000D+01 .5408000000D+01 +1 10320180419201805192458227.4 .2470400000D+01 -.3640000000D-02 .4055479000D+03 .8766100000D+00 .5890000000D-03 .7957000000D+00 .4124669000D+01 .5813400000D+01 .2024500000D+01 .3672100000D+01 -.6921000000D+00 -.2730000000D-02 .1186370000D+03 .3370000000D+00 .2250000000D-03 .2431000000D+00 .1203005000D+01 .1813300000D+01 .1184400000D+01 .7450000000D+00 -.2515000000D+00 .3027000000D-01 .4209977000D+03 .8856300000D+00 .1679000000D-02 .8156000000D+00 .5712802000D+01 .9863000000D+00 .2045600000D+01 .5289400000D+01 +1 10420180519201806182458257.4 .2443600000D+01 -.1645000000D-01 .4029360000D+03 .8673500000D+00 .7993000000D-02 .8397000000D+00 .3922067000D+01 .5622600000D+01 .2470700000D+01 .3591900000D+01 -.7958000000D+00 .2140000000D-02 .1271768000D+03 .3393800000D+00 .2971000000D-02 .2745000000D+00 .9823870000D+00 .1587800000D+01 .4886100000D+01 .6332000000D+00 .5566000000D+00 .3008000000D-01 .4210893000D+03 .9163100000D+00 .8560000000D-02 .7886000000D+00 .5510889000D+01 .8036000000D+00 .3879300000D+01 .5181600000D+01 +1 10520180618201807182458287.4 .2156300000D+01 -.2914000000D-01 .4008189000D+03 .3743400000D+00 .1097000000D-01 .8679000000D+00 .3702511000D+01 .5419300000D+01 .2243100000D+01 .3491600000D+01 -.7945000000D+00 .8180000000D-02 .1336311000D+03 .1504700000D+00 .4281000000D-02 .2908000000D+00 .7458970000D+00 .1161700000D+01 .4661700000D+01 .5122000000D+00 .1411500000D+01 .2363000000D-01 .4211507000D+03 .3866900000D+00 .1174300000D-01 .7999000000D+00 .5291813000D+01 .6227000000D+00 .3766800000D+01 .5097700000D+01 +1 10620180718201808172458317.4 .1483100000D+01 -.3614000000D-01 .4003855000D+03 .2873700000D+00 .9836000000D-02 .8519000000D+00 .3439745000D+01 .1882700000D+01 .1946200000D+01 .3359300000D+01 -.6155000000D+00 .1170000000D-01 .1350318000D+03 .1337700000D+00 .3825000000D-02 .2823000000D+00 .4734690000D+00 .4785500000D+01 .4249800000D+01 .3745000000D+00 .2180600000D+01 .1245000000D-01 .4210965000D+03 .3402900000D+00 .9682000000D-02 .8281000000D+00 .5028680000D+01 .3470100000D+01 .3412900000D+01 .4943600000D+01 +1 10720180817201809162458347.4 .4352000000D+00 -.3726000000D-01 .4016991000D+03 .8751700000D+00 .6831000000D-02 .8223000000D+00 .3130399000D+01 .1619600000D+01 .1548600000D+01 .3120800000D+01 -.2799000000D+00 .1181000000D-01 .1308744000D+03 .3575800000D+00 .2842000000D-02 .2578000000D+00 .1637540000D+00 .4152300000D+01 .3521100000D+01 .1459000000D+00 .2652900000D+01 -.3200000000D-02 .4210660000D+03 .9373700000D+00 .7354000000D-02 .8609000000D+00 .4717798000D+01 .3178300000D+01 .2818100000D+01 .4719800000D+01 +1 10820180916201810162458377.4 -.7390000000D+00 -.3501000000D-01 .4044510000D+03 .1300260000D+01 .3998000000D-02 .8261000000D+00 .2784381000D+01 .1298900000D+01 .7628000000D+00 .2844800000D+01 .8720000000D-01 .9450000000D-02 .1215849000D+03 .5184700000D+00 .2724000000D-02 .2369000000D+00 .6110548000D+01 .3665500000D+01 .2502000000D+01 .6171600000D+01 .2577900000D+01 -.1902000000D-01 .4212034000D+03 .1336720000D+01 .5592000000D-02 .8952000000D+00 .4369944000D+01 .2807300000D+01 .2247300000D+01 .4419400000D+01 +1 10920181016201811152458407.4 -.1775100000D+01 -.2658000000D-01 .4082463000D+03 .1528580000D+01 .3591000000D-02 .8704000000D+00 .2414773000D+01 .9412000000D+00 .6015700000D+01 .2587300000D+01 .3606000000D+00 .5210000000D-02 .1078135000D+03 .6135600000D+00 .3022000000D-02 .2184000000D+00 .5762135000D+01 .3141300000D+01 .1689700000D+01 .5939000000D+01 .1966400000D+01 -.3640000000D-01 .4213093000D+03 .1595190000D+01 .3034000000D-02 .9075000000D+00 .3998708000D+01 .2416800000D+01 .1429400000D+01 .4115800000D+01 +1 11020181115201812152458437.4 -.2434500000D+01 -.9070000000D-02 .4124802000D+03 .1612480000D+01 .3273000000D-02 .8750000000D+00 .2034329000D+01 .5450000000D+00 .5039700000D+01 .2353300000D+01 .4698000000D+00 .2400000000D-03 .9051010000D+02 .6659400000D+00 .2955000000D-02 .1803000000D+00 .5418895000D+01 .2594700000D+01 .8952000000D+00 .5766200000D+01 .9207000000D+00 -.4762000000D-01 .4212731000D+03 .1699690000D+01 .3276000000D-02 .9154000000D+00 .3615882000D+01 .2038300000D+01 .6201600000D+01 .3849100000D+01 +1 11120181215201901142458467.4 -.2609000000D+01 .1671000000D-01 .4162146000D+03 .1581970000D+01 .4558000000D-02 .8625000000D+00 .1653720000D+01 .1465000000D+00 .3872200000D+01 .2096900000D+01 .4339000000D+00 -.3520000000D-02 .7116370000D+02 .6702400000D+00 .2824000000D-02 .1326000000D+00 .5101996000D+01 .2060600000D+01 .9500000000D-02 .5614300000D+01 -.3657000000D+00 -.4512000000D-01 .4212818000D+03 .1615730000D+01 .4570000000D-02 .8866000000D+00 .3232250000D+01 .1657900000D+01 .5405800000D+01 .3604200000D+01 +1 11220190114201902132458497.4 -.2150100000D+01 .3553000000D-01 .4189509000D+03 .1379410000D+01 .6921000000D-02 .8598000000D+00 .1282730000D+01 .6054200000D+01 .3224400000D+01 .1793000000D+01 .3102000000D+00 -.3830000000D-02 .5213320000D+02 .6093300000D+00 .2840000000D-02 .8810000000D-01 .4842235000D+01 .1552000000D+01 .5316200000D+01 .5481800000D+01 -.1601800000D+01 -.2788000000D-01 .4214072000D+03 .1395000000D+01 .6209000000D-02 .8628000000D+00 .2858951000D+01 .1263600000D+01 .4559600000D+01 .3382500000D+01 +1 11320190213201903152458527.4 -.1164000000D+01 .4049000000D-01 .4206954000D+03 .9862700000D+00 .8396000000D-02 .8641000000D+00 .9321820000D+00 .5682600000D+01 .2647600000D+01 .1542000000D+01 .1920000000D+00 -.2220000000D-02 .3655770000D+02 .4747300000D+00 .3612000000D-02 .6140000000D-01 .4680691000D+01 .1087100000D+01 .4409300000D+01 .5478700000D+01 -.2432300000D+01 -.7240000000D-02 .4213737000D+03 .1040370000D+01 .9572000000D-02 .8788000000D+00 .2506906000D+01 .8979000000D+00 .4011200000D+01 .3158000000D+01 +1 11420190315201904142458557.4 .4980000000D-01 .3295000000D-01 .4214902000D+03 .4528100000D+00 .1016300000D-01 .8527000000D+00 .6138500000D+00 .5298400000D+01 .2135400000D+01 .1359100000D+01 .1239000000D+00 -.1250000000D-02 .2741410000D+02 .2567000000D+00 .4662000000D-02 .5180000000D-01 .4608894000D+01 .6914000000D+00 .3859500000D+01 .5524000000D+01 -.2617100000D+01 .5070000000D-02 .4212408000D+03 .5024200000D+00 .1180600000D-01 .9055000000D+00 .2187261000D+01 .6060000000D+00 .3735400000D+01 .3004800000D+01 +1 11520190414201905142458587.4 .1091000000D+01 .2480000000D-01 .4215208000D+03 .1885600000D+00 .9597000000D-02 .8025000000D+00 .3373910000D+00 .1987200000D+01 .1889300000D+01 .1255700000D+01 .8170000000D-01 -.2310000000D-02 .2511710000D+02 .3254000000D-01 .4466000000D-02 .5370000000D-01 .4443785000D+01 .3626500000D+01 .3621000000D+01 .5389800000D+01 -.2300700000D+01 .1103000000D-01 .4211794000D+03 .1871100000D+00 .1004000000D-01 .9068000000D+00 .1910212000D+01 .3389900000D+01 .3556800000D+01 .2904300000D+01 +1 11620190514201906132458617.4 .1804600000D+01 .1887000000D-01 .4211902000D+03 .7795100000D+00 .3157000000D-02 .7974000000D+00 .1046590000D+00 .1689700000D+01 .2022800000D+01 .1183000000D+01 .8300000000D-02 -.4190000000D-02 .2869270000D+02 .3099100000D+00 .1869000000D-02 .6500000000D-01 .4052571000D+01 .3360900000D+01 .3734400000D+01 .5045100000D+01 -.1735100000D+01 .1602000000D-01 .4212231000D+03 .7903000000D+00 .3218000000D-02 .8442000000D+00 .1678353000D+01 .3241200000D+01 .3614200000D+01 .2823100000D+01 +1 11720190613201907132458647.4 .2238400000D+01 .1346000000D-01 .4205358000D+03 .9597500000D+00 .6773000000D-02 .8237000000D+00 .6182788000D+01 .1510900000D+01 .4556700000D+01 .1090300000D+01 -.1118000000D+00 -.4840000000D-02 .3787020000D+02 .4125000000D+00 .2211000000D-02 .8460000000D-01 .3616967000D+01 .3212100000D+01 .6263300000D+01 .4731000000D+01 -.1117800000D+01 .2542000000D-01 .4212568000D+03 .9404700000D+00 .5790000000D-02 .8073000000D+00 .1474800000D+01 .3056900000D+01 .6119300000D+01 .2734000000D+01 +1 11820190713201908122458677.4 .2487100000D+01 .2080000000D-02 .4196757000D+03 .5487000000D+00 .1165900000D-01 .8708000000D+00 .5970436000D+01 .1354900000D+01 .4503300000D+01 .9748000000D+00 -.2427000000D+00 -.2650000000D-02 .4757070000D+02 .2670800000D+00 .4450000000D-02 .1010000000D+00 .3268316000D+01 .2987900000D+01 .6276300000D+01 .4509400000D+01 -.3515000000D+00 .3219000000D-01 .4211981000D+03 .5209700000D+00 .1054500000D-01 .8150000000D+00 .1263301000D+01 .2824500000D+01 .5957500000D+01 .2620300000D+01 +1 11920190812201909112458707.4 .2494500000D+01 -.1446000000D-01 .4191903000D+03 .1721800000D+00 .1040500000D-01 .8670000000D+00 .5718882000D+01 .4043300000D+01 .4240400000D+01 .8175000000D+00 -.3158000000D+00 .1100000000D-02 .5132420000D+02 .4494000000D-01 .4500000000D-02 .9720000000D-01 .2969738000D+01 .9951000000D+00 .5937700000D+01 .4358900000D+01 .6052000000D+00 .3171000000D-01 .4211617000D+03 .1671700000D+00 .1081000000D-01 .8565000000D+00 .1011509000D+01 .5878500000D+01 .5625200000D+01 .2494500000D+01 +1 12020190911201910112458737.4 .2058100000D+01 -.2921000000D-01 .4195730000D+03 .8361300000D+00 .7211000000D-02 .8428000000D+00 .5418559000D+01 .3896800000D+01 .3657400000D+01 .6350000000D+00 -.2850000000D+00 .3530000000D-02 .4683260000D+02 .2901900000D+00 .3799000000D-02 .7800000000D-01 .2692796000D+01 .5832800000D+01 .5305400000D+01 .4244900000D+01 .1655300000D+01 .2057000000D-01 .4212077000D+03 .8135600000D+00 .8764000000D-02 .8518000000D+00 .7104510000D+00 .5443300000D+01 .5221200000D+01 .2293800000D+01 +1 12120191011201911102458767.4 .1113900000D+01 -.3679000000D-01 .4206542000D+03 .1292920000D+01 .5673000000D-02 .8386000000D+00 .5077439000D+01 .3549600000D+01 .2888400000D+01 .4027000000D+00 -.1794000000D+00 .2710000000D-02 .3525970000D+02 .5033000000D+00 .3263000000D-02 .5110000000D-01 .2476382000D+01 .5333300000D+01 .4477400000D+01 .4203700000D+01 .2425900000D+01 .6510000000D-02 .4212392000D+03 .1313110000D+01 .5591000000D-02 .8206000000D+00 .3682560000D+00 .5086500000D+01 .4628300000D+01 .2026700000D+01 +1 12220191110201912102458797.4 -.1672000000D+00 -.3615000000D-01 .4216268000D+03 .1582880000D+01 .4105000000D-02 .8604000000D+00 .4709407000D+01 .3146500000D+01 .2039200000D+01 .1782000000D+00 -.9520000000D-01 -.5600000000D-03 .2077060000D+02 .6501600000D+00 .3056000000D-02 .2990000000D-01 .2548789000D+01 .4831200000D+01 .3569800000D+01 .4725300000D+01 .2640000000D+01 -.9150000000D-02 .4212663000D+03 .1615190000D+01 .3984000000D-02 .8301000000D+00 .6281278000D+01 .4722200000D+01 .3590100000D+01 .1691200000D+01 +1 12320191210202001092458827.4 -.1390800000D+01 -.2941000000D-01 .4215295000D+03 .1728760000D+01 .4189000000D-02 .9032000000D+00 .4326942000D+01 .2741300000D+01 .7808000000D+00 .6221900000D+01 -.1125000000D+00 -.3950000000D-02 .1952090000D+02 .7272500000D+00 .2894000000D-02 .5150000000D-01 .3346024000D+01 .4315500000D+01 .2670000000D+01 .5608900000D+01 .2225900000D+01 -.2529000000D-01 .4214246000D+03 .1722850000D+01 .3742000000D-02 .8628000000D+00 .5896371000D+01 .4331500000D+01 .2625500000D+01 .1406500000D+01 +1 12420200109202002082458857.4 -.2296600000D+01 -.1238000000D-01 .4201212000D+03 .1682310000D+01 .5673000000D-02 .9045000000D+00 .3940858000D+01 .2344600000D+01 .3680000000D-01 .5959100000D+01 -.2296000000D+00 -.4560000000D-02 .3755300000D+02 .7350900000D+00 .2789000000D-02 .9760000000D-01 .3529590000D+01 .3805200000D+01 .1708500000D+01 .5660600000D+01 .1326000000D+01 -.4005000000D-01 .4216055000D+03 .1701500000D+01 .4126000000D-02 .8849000000D+00 .5508772000D+01 .3926900000D+01 .1447700000D+01 .1175500000D+01 +1 12520200208202003092458887.4 -.2669600000D+01 .9850000000D-02 .4178118000D+03 .1467980000D+01 .5775000000D-02 .8864000000D+00 .3561948000D+01 .1933400000D+01 .5579100000D+01 .5692300000D+01 -.3647000000D+00 -.1310000000D-02 .5819850000D+02 .6665200000D+00 .2929000000D-02 .1389000000D+00 .3324986000D+01 .3321100000D+01 .7789000000D+00 .5510000000D+01 .1275000000D+00 -.4352000000D-01 .4216150000D+03 .1539560000D+01 .6747000000D-02 .8616000000D+00 .5128828000D+01 .3545800000D+01 .6509000000D+00 .9294000000D+00 +1 12620200309202004082458917.4 -.2448000000D+01 .2891000000D-01 .4150154000D+03 .1147580000D+01 .7722000000D-02 .8415000000D+00 .3201209000D+01 .1530500000D+01 .4763800000D+01 .5418800000D+01 -.4112000000D+00 .3890000000D-02 .7598580000D+02 .5249800000D+00 .3359000000D-02 .1654000000D+00 .3039009000D+01 .2873400000D+01 .6170200000D+01 .5278800000D+01 -.1158600000D+01 -.3032000000D-01 .4215975000D+03 .1193840000D+01 .8986000000D-02 .8649000000D+00 .4766978000D+01 .3194500000D+01 .1716000000D+00 .6926000000D+00 +1 12720200408202005082458947.4 -.1671700000D+01 .3401000000D-01 .4124394000D+03 .6794400000D+00 .1055800000D-01 .8043000000D+00 .2869209000D+01 .1195300000D+01 .4348000000D+01 .5215500000D+01 -.3015000000D+00 .6870000000D-02 .8846270000D+02 .3216200000D+00 .4420000000D-02 .1783000000D+00 .2744436000D+01 .2518400000D+01 .5543900000D+01 .5089100000D+01 -.2178600000D+01 -.9990000000D-02 .4216118000D+03 .6824400000D+00 .1067100000D-01 .9127000000D+00 .4434599000D+01 .2856300000D+01 .6012200000D+01 .4899000000D+00 +1 12820200508202006072458977.4 -.6397000000D+00 .3009000000D-01 .4111310000D+03 .3912000000D-01 .1048700000D-01 .8048000000D+00 .2576558000D+01 .1275400000D+01 .4124200000D+01 .5085800000D+01 -.8260000000D-01 .6700000000D-02 .9406100000D+02 .6675000000D-01 .4812000000D-02 .1835000000D+00 .2469232000D+01 .2840000000D+01 .5291300000D+01 .4966200000D+01 -.2704700000D+01 .5970000000D-02 .4214983000D+03 .4817000000D-01 .1108300000D-01 .9336000000D+00 .4142618000D+01 .2696200000D+01 .5728900000D+01 .3767000000D+00 +1 12920200607202007072459007.4 .3339000000D+00 .2482000000D-01 .4117041000D+03 .6366500000D+00 .5220000000D-02 .8118000000D+00 .2329814000D+01 .3807700000D+01 .4009900000D+01 .5022500000D+01 .1332000000D+00 .4800000000D-02 .9188380000D+02 .2521200000D+00 .3056000000D-02 .1725000000D+00 .2224977000D+01 .4830500000D+01 .5398600000D+01 .4897500000D+01 -.2697000000D+01 .1195000000D-01 .4213875000D+03 .6128300000D+00 .6628000000D-02 .9104000000D+00 .3896502000D+01 .5416900000D+01 .5707600000D+01 .2832000000D+00 +1 13020200707202008062459037.4 .1116200000D+01 .2316000000D-01 .4137250000D+03 .9759600000D+00 .3838000000D-02 .8319000000D+00 .2120209000D+01 .3633400000D+01 .4279000000D+00 .4924000000D+01 .2726000000D+00 .2980000000D-02 .8284660000D+02 .4271800000D+00 .1619000000D-02 .1545000000D+00 .2004058000D+01 .4819400000D+01 .1001500000D+01 .4788700000D+01 -.2392200000D+01 .1719000000D-01 .4214385000D+03 .9787500000D+00 .3978000000D-02 .8487000000D+00 .3687029000D+01 .5224100000D+01 .1592200000D+01 .1905000000D+00 +1 13120200806202009052459067.4 .1761200000D+01 .1981000000D-01 .4157705000D+03 .7128900000D+00 .1025700000D-01 .8210000000D+00 .1915721000D+01 .3434900000D+01 .3307000000D+00 .4767000000D+01 .3399000000D+00 .1710000000D-02 .7164060000D+02 .3511700000D+00 .4420000000D-02 .1338000000D+00 .1778350000D+01 .4744400000D+01 .1539100000D+01 .4613000000D+01 -.1899300000D+01 .2654000000D-01 .4215764000D+03 .7430500000D+00 .1119500000D-01 .8497000000D+00 .3482615000D+01 .5033100000D+01 .1832500000D+01 .7890000000D-01 +1 13220200905202010052459097.4 .2319800000D+01 .8460000000D-02 .4167336000D+03 .4886000000D-01 .1139600000D-01 .8251000000D+00 .1678320000D+01 .2642000000D+01 .6277700000D+01 .4595700000D+01 .3834000000D+00 .7400000000D-03 .6513550000D+02 .7750000000D-01 .4988000000D-02 .1308000000D+00 .1525770000D+01 .4682600000D+01 .1351300000D+01 .4439500000D+01 -.1219500000D+01 .3964000000D-01 .4215856000D+03 .5744000000D-01 .1220500000D-01 .8733000000D+00 .3245438000D+01 .4735600000D+01 .1645800000D+01 .6237600000D+01 +1 13320201005202011042459127.4 .2627000000D+01 -.1029000000D-01 .4164225000D+03 .6613700000D+00 .9657000000D-02 .8159000000D+00 .1390298000D+01 .6082900000D+01 .5831900000D+01 .4420600000D+01 .4265000000D+00 -.8800000000D-03 .6719650000D+02 .2322200000D+00 .4054000000D-02 .1436000000D+00 .1246745000D+01 .1031600000D+01 .8165000000D+00 .4287500000D+01 -.2160000000D+00 .4338000000D-01 .4214877000D+03 .6825200000D+00 .9344000000D-02 .8905000000D+00 .2957427000D+01 .1412200000D+01 .1224900000D+01 .6087800000D+01 +1 13420201104202012042459157.4 .2451800000D+01 -.2884000000D-01 .4146924000D+03 .1226630000D+01 .6411000000D-02 .8173000000D+00 .1056346000D+01 .5703100000D+01 .5241600000D+01 .4244500000D+01 .4432000000D+00 -.4170000000D-02 .7732380000D+02 .4780600000D+00 .3108000000D-02 .1705000000D+00 .9414640000D+00 .6524000000D+00 .6266700000D+01 .4155500000D+01 .9968000000D+00 .3432000000D-01 .4214676000D+03 .1235250000D+01 .6886000000D-02 .8612000000D+00 .2622830000D+01 .1078400000D+01 .5590000000D+00 .5843600000D+01 +1 13520201204202101032459187.4 .1642500000D+01 -.3855000000D-01 .4114159000D+03 .1595020000D+01 .4279000000D-02 .8194000000D+00 .6893420000D+00 .5324600000D+01 .4144200000D+01 .3985600000D+01 .3458000000D+00 -.8220000000D-02 .9280870000D+02 .6415600000D+00 .2642000000D-02 .2058000000D+00 .6069720000D+00 .1908000000D+00 .5208400000D+01 .3934900000D+01 .2081800000D+01 .1558000000D-01 .4216206000D+03 .1576390000D+01 .5017000000D-02 .8408000000D+00 .2255595000D+01 .6928000000D+00 .6150300000D+01 .5543400000D+01 +2 13620100101201001312455197.4 -.8694200000D+01 .6463000000D-01 .6221359000D+03 .2311080000D+01 .6624000000D-02 .2886300000D+01 .1299683000D+01 .5925700000D+01 .5141000000D+01 .1370100000D+01 -.3518900000D+01 .1885000000D-01 .2512913000D+03 .9895000000D+00 .4425000000D-02 .1205600000D+01 .1299933000D+01 .2804000000D+00 .5382600000D+01 .1375400000D+01 -.2029800000D+01 -.1440900000D+00 .6711626000D+03 .2448520000D+01 .7569000000D-02 .3141700000D+01 .2870478000D+01 .1300100000D+01 .5336000000D+00 .2961900000D+01 +2 13720100131201003022455227.4 -.6786600000D+01 .1224700000D+00 .6159987000D+03 .2618560000D+01 .4896000000D-02 .2955600000D+01 .3994989000D+01 .2348900000D+01 .7639000000D+00 .9706000000D+00 -.2979100000D+01 .4853000000D-01 .2660121000D+03 .1126850000D+01 .4226000000D-02 .1312500000D+01 .4006667000D+01 .2865900000D+01 .1181800000D+01 .9902000000D+00 -.6455100000D+01 -.9134000000D-01 .6708892000D+03 .2778320000D+01 .6104000000D-02 .3171400000D+01 .5567307000D+01 .4000000000D+01 .2532500000D+01 .2552300000D+01 +2 13820100302201004012455257.4 -.3050600000D+01 .1434400000D+00 .6106628000D+03 .2630980000D+01 .5015000000D-02 .2931300000D+01 .3972360000D+00 .5045700000D+01 .2940800000D+01 .5620000000D+00 -.1498900000D+01 .6382000000D-01 .2782958000D+03 .1125990000D+01 .4256000000D-02 .1364000000D+01 .4219810000D+00 .5443500000D+01 .3504000000D+01 .5951000000D+00 -.9310800000D+01 -.1889000000D-01 .6711075000D+03 .2826470000D+01 .5938000000D-02 .3228700000D+01 .1972432000D+01 .3967000000D+00 .4652700000D+01 .2131600000D+01 +2 13920100401201005012455287.4 .1410500000D+01 .1297600000D+00 .6067499000D+03 .2491890000D+01 .7277000000D-02 .2898500000D+01 .3085324000D+01 .1472700000D+01 .5071300000D+01 .1536000000D+00 .4953000000D+00 .6191000000D-01 .2865465000D+03 .1060450000D+01 .4445000000D-02 .1383800000D+01 .3124399000D+01 .1745400000D+01 .5617100000D+01 .2009000000D+00 -.9864900000D+01 .5757000000D-01 .6709921000D+03 .2695760000D+01 .8442000000D-02 .3232500000D+01 .4663175000D+01 .3086600000D+01 .4692000000D+00 .1738000000D+01 +2 14020100501201005312455317.4 .5343300000D+01 .8993000000D-01 .6049979000D+03 .2106970000D+01 .9129000000D-02 .2927200000D+01 .5784793000D+01 .4191500000D+01 .1287100000D+01 .6061300000D+01 .2377900000D+01 .4542000000D-01 .2909329000D+03 .8755100000D+00 .4615000000D-02 .1410000000D+01 .5838485000D+01 .4350000000D+01 .1628600000D+01 .6120700000D+01 -.7984800000D+01 .1109600000D+00 .6708205000D+03 .2289590000D+01 .1085800000D-01 .3193400000D+01 .1082707000D+01 .5788500000D+01 .2904400000D+01 .1367900000D+01 +2 14120100531201006302455347.4 .7951900000D+01 .3077000000D-01 .6043170000D+03 .1554300000D+01 .1379300000D-01 .2890100000D+01 .2224180000D+01 .6525000000D+00 .3844900000D+01 .5722800000D+01 .3699800000D+01 .1851000000D-01 .2919705000D+03 .6186100000D+00 .6285000000D-02 .1397700000D+01 .2292044000D+01 .7161000000D+00 .3949000000D+01 .5797700000D+01 -.4539700000D+01 .1378000000D+00 .6708681000D+03 .1675060000D+01 .1517200000D-01 .3220200000D+01 .3808103000D+01 .2217600000D+01 .5375500000D+01 .9931000000D+00 +2 14220100630201007302455377.4 .8786600000D+01 -.2258000000D-01 .6048478000D+03 .7390900000D+00 .1731700000D-01 .2805400000D+01 .4981433000D+01 .3398800000D+01 .2553000000D+00 .5399200000D+01 .4211300000D+01 -.6180000000D-02 .2918129000D+03 .2505600000D+00 .7516000000D-02 .1354500000D+01 .5061528000D+01 .3386700000D+01 .2537000000D+00 .5486800000D+01 -.4555000000D+00 .1267000000D+00 .6706500000D+03 .7452400000D+00 .1792900000D-01 .3192700000D+01 .2837190000D+00 .4994200000D+01 .1873000000D+01 .6916000000D+00 +2 14320100730201008292455407.4 .8112500000D+01 -.5787000000D-01 .6047219000D+03 .3381300000D+00 .1485700000D-01 .2760000000D+01 .1500318000D+01 .3050800000D+01 .3137100000D+01 .5128200000D+01 .4027300000D+01 -.2365000000D-01 .2915870000D+03 .2198200000D+00 .6014000000D-02 .1329900000D+01 .1588740000D+01 .3049000000D+01 .3202200000D+01 .5220200000D+01 .3261100000D+01 .9467000000D-01 .6703655000D+03 .3645500000D+00 .1716600000D-01 .3103500000D+01 .3088419000D+01 .4585200000D+01 .4720700000D+01 .4608000000D+00 +2 14420100829201009282455437.4 .6442200000D+01 -.7442000000D-01 .6044122000D+03 .1291880000D+01 .3722000000D-02 .2744200000D+01 .4352397000D+01 .5930800000D+01 .5920000000D-01 .4944100000D+01 .3349800000D+01 -.3395000000D-01 .2922860000D+03 .6070300000D+00 .1498000000D-02 .1328700000D+01 .4442939000D+01 .5967300000D+01 .8231000000D+00 .5032100000D+01 .6092500000D+01 .5885000000D-01 .6708551000D+03 .1426360000D+01 .3469000000D-02 .3042300000D+01 .5940106000D+01 .1239500000D+01 .1645100000D+01 .2445000000D+00 +2 14520100928201010282455467.4 .4231400000D+01 -.8607000000D-01 .6043722000D+03 .1500810000D+01 .1161600000D-01 .2722000000D+01 .9511800000D+00 .2529400000D+01 .5631200000D+01 .4734100000D+01 .2341600000D+01 -.4158000000D-01 .2926111000D+03 .6483000000D+00 .5803000000D-02 .1314400000D+01 .1036860000D+01 .2642200000D+01 .5677100000D+01 .4814500000D+01 .7928700000D+01 .3269000000D-01 .6704566000D+03 .1605750000D+01 .1193700000D-01 .2988900000D+01 .2538424000D+01 .4107400000D+01 .8834000000D+00 .4580000000D-01 +2 14620101028201011272455497.4 .1560300000D+01 -.1016100000D+00 .6044417000D+03 .7613700000D+00 .1873400000D-01 .2641500000D+01 .3821737000D+01 .5372400000D+01 .2220100000D+01 .4518200000D+01 .1051800000D+01 -.4983000000D-01 .2918318000D+03 .2826000000D+00 .8327000000D-02 .1276000000D+01 .3899103000D+01 .5559100000D+01 .2384100000D+01 .4593300000D+01 .8956600000D+01 -.4700000000D-03 .6709574000D+03 .8174900000D+00 .2091200000D-01 .2975800000D+01 .5407049000D+01 .7204000000D+00 .3863500000D+01 .6096400000D+01 +2 14720101127201012272455527.4 -.1579600000D+01 -.1094300000D+00 .6046554000D+03 .3986300000D+00 .1636000000D-01 .2638000000D+01 .3622520000D+00 .5070100000D+01 .5029400000D+01 .4240600000D+01 -.4866000000D+00 -.5461000000D-01 .2916027000D+03 .2339100000D+00 .6994000000D-02 .1272000000D+01 .4329830000D+00 .5217100000D+01 .5145300000D+01 .4312200000D+01 .8902800000D+01 -.4846000000D-01 .6705478000D+03 .4411100000D+00 .1815100000D-01 .2964400000D+01 .1946052000D+01 .4375000000D+00 .2960000000D+00 .5840100000D+01 +2 14820101227201101262455557.4 -.4855900000D+01 -.8717000000D-01 .6042620000D+03 .1385930000D+01 .1224300000D-01 .2698900000D+01 .3131508000D+01 .1568900000D+01 .1304300000D+01 .3919800000D+01 -.2127600000D+01 -.4498000000D-01 .2922353000D+03 .6578400000D+00 .5381000000D-02 .1306400000D+01 .3200921000D+01 .1699600000D+01 .1168900000D+01 .3989800000D+01 .7322200000D+01 -.1061700000D+00 .6707997000D+03 .1543490000D+01 .1280200000D-01 .2960000000D+01 .4715920000D+01 .3149200000D+01 .2914700000D+01 .5514900000D+01 +2 14920110126201102252455587.4 -.7422500000D+01 -.3176000000D-01 .6041108000D+03 .2097300000D+01 .6908000000D-02 .2737400000D+01 .5859119000D+01 .4301600000D+01 .3714400000D+01 .3564300000D+01 -.3457400000D+01 -.1903000000D-01 .2924454000D+03 .9517000000D+00 .4021000000D-02 .1321300000D+01 .5932877000D+01 .4348700000D+01 .3226900000D+01 .3639600000D+01 .4113800000D+01 -.1529700000D+00 .6707100000D+03 .2280940000D+01 .8409000000D-02 .2970400000D+01 .1160545000D+01 .5876300000D+01 .5272400000D+01 .5135000000D+01 +2 15020110225201103272455617.4 -.8391100000D+01 .4275000000D-01 .6054989000D+03 .2461710000D+01 .4805000000D-02 .2699000000D+01 .2276519000D+01 .7294000000D+00 .5978200000D+01 .3180400000D+01 -.4029000000D+01 .1703000000D-01 .2903667000D+03 .1085360000D+01 .4120000000D-02 .1280000000D+01 .2359279000D+01 .6627000000D+00 .5429900000D+01 .3270500000D+01 -.4551000000D+00 -.1523500000D+00 .6705679000D+03 .2706330000D+01 .6383000000D-02 .3045200000D+01 .3862993000D+01 .2295100000D+01 .1019600000D+01 .4762000000D+01 +2 15120110327201104262455647.4 -.7155700000D+01 .1049000000D+00 .6081609000D+03 .2614780000D+01 .4905000000D-02 .2802700000D+01 .4964772000D+01 .3446000000D+01 .1563400000D+01 .2786400000D+01 -.3532700000D+01 .4580000000D-01 .2843025000D+03 .1121690000D+01 .4747000000D-02 .1283100000D+01 .5060233000D+01 .3248900000D+01 .1344600000D+01 .2890200000D+01 -.5108900000D+01 -.1102100000D+00 .6705862000D+03 .2854330000D+01 .6056000000D-02 .3082700000D+01 .2697400000D+00 .4980300000D+01 .3058200000D+01 .4386500000D+01 +2 15220110426201105262455677.4 -.3922400000D+01 .1372500000D+00 .6129685000D+03 .2547760000D+01 .5342000000D-02 .2915900000D+01 .1368894000D+01 .6146100000D+01 .3738700000D+01 .2395300000D+01 -.2119100000D+01 .5781000000D-01 .2744936000D+03 .1067010000D+01 .4420000000D-02 .1270900000D+01 .1479786000D+01 .5801700000D+01 .3623300000D+01 .2511400000D+01 -.8529100000D+01 -.3967000000D-01 .6704440000D+03 .2744470000D+01 .7087000000D-02 .3107300000D+01 .2957845000D+01 .1387900000D+01 .5432500000D+01 .3986600000D+01 +2 15320110526201106252455707.4 .3485000000D+00 .1367800000D+00 .6188301000D+03 .2295940000D+01 .7579000000D-02 .2916400000D+01 .4064282000D+01 .2572200000D+01 .6021500000D+01 .2013000000D+01 -.3190000000D+00 .5366000000D-01 .2615047000D+03 .9322000000D+00 .4385000000D-02 .1194700000D+01 .4192564000D+01 .2077800000D+01 .5867000000D+01 .2150100000D+01 -.9722600000D+01 .3297000000D-01 .6703342000D+03 .2503580000D+01 .1007800000D-01 .3200000000D+01 .5654867000D+01 .4073000000D+01 .1238100000D+01 .3589300000D+01 +2 15420110625201107252455737.4 .4547300000D+01 .1033500000D+00 .6244341000D+03 .1868140000D+01 .1236100000D-01 .2957600000D+01 .4951400000D+00 .5314800000D+01 .2333000000D+01 .1650500000D+01 .1324000000D+01 .3926000000D-01 .2473908000D+03 .7331400000D+00 .5351000000D-02 .1135800000D+01 .6424840000D+00 .4677500000D+01 .1898500000D+01 .1811300000D+01 -.8589000000D+01 .9012000000D-01 .6704172000D+03 .1974920000D+01 .1277800000D-01 .3199000000D+01 .2085704000D+01 .4930000000D+00 .3720600000D+01 .3240800000D+01 +2 15520110725201108242455767.4 .7595700000D+01 .5469000000D-01 .6294271000D+03 .1152340000D+01 .1660800000D-01 .3032000000D+01 .3237460000D+01 .1766000000D+01 .4893700000D+01 .1311800000D+01 .2477500000D+01 .2313000000D-01 .2356258000D+03 .4410800000D+00 .6763000000D-02 .1110900000D+01 .3402597000D+01 .9728000000D+00 .4249700000D+01 .1483800000D+01 -.5722400000D+01 .1181000000D+00 .6698518000D+03 .1175830000D+01 .1686500000D-01 .3220800000D+01 .4827791000D+01 .3256700000D+01 .1423000000D+00 .2927200000D+01 +2 15620110824201109232455797.4 .9117700000D+01 .1960000000D-02 .6317566000D+03 .1270800000D+00 .1704000000D-01 .3041100000D+01 .6019735000D+01 .4643800000D+01 .1436400000D+01 .1033800000D+01 .3131400000D+01 .9320000000D-02 .2296206000D+03 .5990000000D-01 .6749000000D-02 .1109000000D+01 .6198042000D+01 .2741900000D+01 .6986000000D+00 .1212800000D+01 -.2140800000D+01 .1188600000D+00 .6699325000D+03 .1440500000D+00 .1889200000D-01 .3193700000D+01 .1328432000D+01 .5985700000D+01 .2890600000D+01 .2624600000D+01 +2 15720110923201110232455827.4 .9133700000D+01 -.3518000000D-01 .6306500000D+03 .9435700000D+00 .1114900000D-01 .2970900000D+01 .2568558000D+01 .4219000000D+01 .4382900000D+01 .7988000000D+00 .3397500000D+01 -.1520000000D-02 .2322181000D+03 .4041900000D+00 .3987000000D-02 .1116200000D+01 .2749578000D+01 .3623000000D+01 .3820800000D+01 .9768000000D+00 .1343500000D+01 .9866000000D-01 .6698326000D+03 .1076340000D+01 .9690000000D-02 .3156200000D+01 .4159983000D+01 .5722600000D+01 .5892500000D+01 .2379700000D+01 +2 15820111023201111222455857.4 .8169500000D+01 -.6415000000D-01 .6272939000D+03 .1591270000D+01 .6440000000D-02 .2901400000D+01 .5441272000D+01 .8426000000D+00 .3832500000D+01 .5825000000D+00 .3395000000D+01 -.1645000000D-01 .2419389000D+03 .6342800000D+00 .2986000000D-02 .1149000000D+01 .5613249000D+01 .2458000000D+00 .3254700000D+01 .7532000000D+00 .4284500000D+01 .7811000000D-01 .6698044000D+03 .1683510000D+01 .6613000000D-02 .3138700000D+01 .7513230000D+00 .2322400000D+01 .5242200000D+01 .2196600000D+01 +2 15920111122201112222455887.4 .6279300000D+01 -.8355000000D-01 .6227833000D+03 .1168760000D+01 .1701100000D-01 .2911300000D+01 .2038267000D+01 .3698100000D+01 .5279000000D+00 .3591000000D+00 .2922900000D+01 -.2995000000D-01 .2518206000D+03 .4418600000D+00 .7230000000D-02 .1189300000D+01 .2195885000D+01 .3104300000D+01 .2730000000D-01 .5091000000D+00 .6730200000D+01 .5708000000D-01 .6702385000D+03 .1254260000D+01 .1928400000D-01 .3098200000D+01 .3630871000D+01 .5216800000D+01 .2075000000D+01 .1971800000D+01 +2 16020111222201201212455917.4 .3639900000D+01 -.1111600000D+00 .6211810000D+03 .8511000000D-01 .1902200000D-01 .2874400000D+01 .4882965000D+01 .4702000000D+00 .3412800000D+01 .9430000000D-01 .1966900000D+01 -.4485000000D-01 .2564447000D+03 .4649000000D-01 .7617000000D-02 .1181200000D+01 .5028657000D+01 .4003300000D+01 .2908400000D+01 .2333000000D+00 .8568600000D+01 .2610000000D-01 .6699520000D+03 .6374000000D-01 .1985100000D-01 .3032500000D+01 .1915060000D+00 .1231000000D+01 .4838400000D+01 .1684900000D+01 +2 16120120121201202202455947.4 .1747000000D+00 -.1266900000D+00 .6219805000D+03 .1023080000D+01 .1452300000D-01 .2812500000D+01 .1389983000D+01 .6210600000D+01 .6042200000D+01 .6079900000D+01 .5579000000D+00 -.5082000000D-01 .2535544000D+03 .4698000000D+00 .5882000000D-02 .1130100000D+01 .1531671000D+01 .5794600000D+01 .5329600000D+01 .6220200000D+01 .9328500000D+01 -.2670000000D-01 .6703559000D+03 .1160090000D+01 .1388400000D-01 .2990000000D+01 .2981309000D+01 .1403000000D+01 .1307900000D+01 .1354800000D+01 +2 16220120220201203212455977.4 -.3682900000D+01 -.1102300000D+00 .6259212000D+03 .1903120000D+01 .8340000000D-02 .2779200000D+01 .4134741000D+01 .2668700000D+01 .2177600000D+01 .5720000000D+01 -.9978000000D+00 -.4029000000D-01 .2437900000D+03 .8086200000D+00 .4637000000D-02 .1044200000D+01 .4280857000D+01 .2134200000D+01 .1071900000D+01 .5871000000D+01 .8430700000D+01 -.9319000000D-01 .6702148000D+03 .2006810000D+01 .9750000000D-02 .3005000000D+01 .5724047000D+01 .4157300000D+01 .3711400000D+01 .1030400000D+01 +2 16320120321201204202456007.4 -.6977800000D+01 -.5832000000D-01 .6323501000D+03 .2369770000D+01 .6200000000D-02 .2835300000D+01 .5639820000D+00 .5379700000D+01 .4483700000D+01 .5347700000D+01 -.2203300000D+01 -.1660000000D-01 .2273331000D+03 .9800200000D+00 .4712000000D-02 .9626000000D+00 .7226340000D+00 .4691100000D+01 .3329800000D+01 .5516400000D+01 .5559700000D+01 -.1436300000D+00 .6699488000D+03 .2528590000D+01 .6742000000D-02 .3004200000D+01 .2152900000D+01 .5905000000D+00 .5825500000D+01 .6566000000D+00 +2 16420120420201205202456037.4 -.8729100000D+01 .1815000000D-01 .6398899000D+03 .2613960000D+01 .5972000000D-02 .2876000000D+01 .3260873000D+01 .1800400000D+01 .2400000000D+00 .4972000000D+01 -.2682600000D+01 .9510000000D-02 .2047205000D+03 .1070430000D+01 .5159000000D-02 .8556000000D+00 .3441478000D+01 .9566000000D+00 .5601200000D+01 .5166600000D+01 .1226900000D+01 -.1581700000D+00 .6701992000D+03 .2753570000D+01 .5156000000D-02 .2951500000D+01 .4848278000D+01 .3271700000D+01 .1725700000D+01 .2686000000D+00 +2 16520120520201206192456067.4 -.8234000000D+01 .9213000000D-01 .6483343000D+03 .2654270000D+01 .5730000000D-02 .2867800000D+01 .5953259000D+01 .4472000000D+01 .2194000000D+01 .4599300000D+01 -.2390000000D+01 .2676000000D-01 .1775911000D+03 .1099420000D+01 .4793000000D-02 .7157000000D+00 .6166101000D+01 .3476100000D+01 .1565700000D+01 .4834100000D+01 -.3568800000D+01 -.1245400000D+00 .6699677000D+03 .2743860000D+01 .6134000000D-02 .3013000000D+01 .1254936000D+01 .5967000000D+01 .3877800000D+01 .6185400000D+01 +2 16620120619201207192456097.4 -.5454200000D+01 .1345700000D+00 .6556761000D+03 .2458090000D+01 .7196000000D-02 .2968700000D+01 .2366581000D+01 .8806000000D+00 .4608100000D+01 .4227200000D+01 -.1582900000D+01 .2794000000D-01 .1477842000D+03 .1044330000D+01 .4414000000D-02 .5917000000D+00 .2627698000D+01 .6018700000D+01 .3826400000D+01 .4518300000D+01 -.7447200000D+01 -.6028000000D-01 .6698359000D+03 .2595820000D+01 .8847000000D-02 .3046100000D+01 .3950085000D+01 .2382000000D+01 .6038400000D+01 .5824400000D+01 +2 16720120719201208182456127.4 -.1231100000D+01 .1395300000D+00 .6613238000D+03 .2088620000D+01 .1105400000D-01 .3102700000D+01 .5076852000D+01 .3583100000D+01 .6855000000D+00 .3866700000D+01 -.7205000000D+00 .2011000000D-01 .1190148000D+03 .9139100000D+00 .4791000000D-02 .4919000000D+00 .5407099000D+01 .2306700000D+01 .5931900000D+01 .4232300000D+01 -.9340400000D+01 .8810000000D-02 .6702149000D+03 .2154400000D+01 .1070300000D-01 .3041100000D+01 .3741230000D+00 .5069100000D+01 .2085600000D+01 .5460500000D+01 +2 16820120818201209172456157.4 .3112100000D+01 .1176000000D+00 .6654681000D+03 .1481950000D+01 .1551900000D-01 .3083200000D+01 .1527518000D+01 .6283100000D+01 .3150400000D+01 .3553600000D+01 -.1108000000D+00 .1382000000D-01 .9542110000D+02 .6696000000D+00 .6443000000D-02 .4066000000D+00 .1947039000D+01 .4926000000D+01 .1911900000D+01 .3996500000D+01 -.8967400000D+01 .6159000000D-01 .6697837000D+03 .1508600000D+01 .1549000000D-01 .3083000000D+01 .3105631000D+01 .1537300000D+01 .4750700000D+01 .5111200000D+01 +2 16920120917201210172456187.4 .6624500000D+01 .7572000000D-01 .6671202000D+03 .5005700000D+00 .1743400000D-01 .3114800000D+01 .4294996000D+01 .2798100000D+01 .5929400000D+01 .3267000000D+01 .2906000000D+00 .1292000000D-01 .8144490000D+02 .2796800000D+00 .7864000000D-02 .3726000000D+00 .4797657000D+01 .1303000000D+01 .4527400000D+01 .3782100000D+01 -.6956600000D+01 .9560000000D-01 .6700194000D+03 .5655200000D+00 .1944300000D-01 .3130300000D+01 .5872748000D+01 .4274200000D+01 .1138400000D+01 .4831500000D+01 +2 17020121017201211162456217.4 .8797100000D+01 .3123000000D-01 .6672678000D+03 .5930500000D+00 .1522600000D-01 .3151600000D+01 .8268680000D+00 .2411700000D+01 .2527900000D+01 .3009700000D+01 .6749000000D+00 .1569000000D-01 .8040860000D+02 .2159900000D+00 .6533000000D-02 .4000000000D+00 .1341178000D+01 .1113300000D+01 .1179200000D+01 .3504700000D+01 -.4087400000D+01 .1044800000D+00 .6698628000D+03 .6306100000D+00 .1512600000D-01 .3190100000D+01 .2403360000D+01 .3977300000D+01 .4026500000D+01 .4587600000D+01 +2 17120121116201212162456247.4 .9738900000D+01 -.1027000000D-01 .6659647000D+03 .1559330000D+01 .2501000000D-02 .3191100000D+01 .3686364000D+01 .5316700000D+01 .9681000000D+00 .2783300000D+01 .1157800000D+01 .1518000000D-01 .9238310000D+02 .6187700000D+00 .9970000000D-03 .4956000000D+00 .4128785000D+01 .3989000000D+01 .5277700000D+01 .3182600000D+01 -.1005400000D+01 .9808000000D-01 .6696913000D+03 .1566830000D+01 .2389000000D-02 .3164400000D+01 .5265136000D+01 .5415000000D+00 .1855100000D+01 .4369200000D+01 +2 17220121216201301152456277.4 .9543000000D+01 -.4178000000D-01 .6627610000D+03 .1478130000D+01 .1490200000D-01 .3134000000D+01 .2857430000D+00 .1931800000D+01 .5013500000D+01 .2577500000D+01 .1640000000D+01 .4560000000D-02 .1109708000D+03 .6213300000D+00 .6074000000D-02 .5586000000D+00 .6435320000D+00 .6223000000D+00 .3779300000D+01 .2906000000D+01 .1906800000D+01 .9894000000D-01 .6700276000D+03 .1555690000D+01 .1660800000D-01 .3167800000D+01 .1865181000D+01 .3449400000D+01 .2927000000D+00 .4137800000D+01 +2 17320130115201302142456307.4 .8379000000D+01 -.8247000000D-01 .6608735000D+03 .5346800000D+00 .1988000000D-01 .3105000000D+01 .3145461000D+01 .4889700000D+01 .1716400000D+01 .2326500000D+01 .1799300000D+01 -.1042000000D-01 .1241535000D+03 .2273800000D+00 .7826000000D-02 .5940000000D+00 .3453333000D+01 .3369700000D+01 .4692000000D+00 .2629100000D+01 .4958100000D+01 .8644000000D-01 .6698334000D+03 .5380000000D+00 .2025300000D-01 .3206100000D+01 .4726233000D+01 .6260700000D+01 .3125100000D+01 .3882800000D+01 +2 17420130214201303162456337.4 .5873700000D+01 -.1187100000D+00 .6601857000D+03 .6735700000D+00 .1607500000D-01 .3116300000D+01 .5956133000D+01 .4501400000D+01 .4333000000D+01 .1987800000D+01 .1468200000D+01 -.2048000000D-01 .1239506000D+03 .2651600000D+00 .6955000000D-02 .5564000000D+00 .6253962000D+01 .3509100000D+01 .3056000000D+01 .2302300000D+01 .7726800000D+01 .5356000000D-01 .6700821000D+03 .7458600000D+00 .1530300000D-01 .3180500000D+01 .1253889000D+01 .5987200000D+01 .5878100000D+01 .3585000000D+01 +2 17520130316201304152456367.4 .2142500000D+01 -.1424400000D+00 .6627155000D+03 .1624990000D+01 .1078700000D-01 .3107500000D+01 .2434679000D+01 .9443000000D+00 .5725000000D+00 .1636200000D+01 .8149000000D+00 -.2082000000D-01 .1105111000D+03 .6676800000D+00 .5278000000D-02 .4598000000D+00 .2759951000D+01 .6038400000D+01 .5385300000D+01 .1982800000D+01 .9410800000D+01 -.2210000000D-02 .6701530000D+03 .1660900000D+01 .1138400000D-01 .3111300000D+01 .4013313000D+01 .2449200000D+01 .2139200000D+01 .3228000000D+01 +2 17620130415201305152456397.4 -.2233900000D+01 -.1349600000D+00 .6663135000D+03 .2238940000D+01 .7248000000D-02 .3064400000D+01 .5161202000D+01 .3645600000D+01 .2864100000D+01 .1288900000D+01 .1707000000D+00 -.9510000000D-02 .8658380000D+02 .9411900000D+00 .4887000000D-02 .3267000000D+00 .5569954000D+01 .2353100000D+01 .1242500000D+01 .1774800000D+01 .9252100000D+01 -.7103000000D-01 .6700268000D+03 .2318510000D+01 .6878000000D-02 .3045500000D+01 .4552160000D+00 .5176700000D+01 .4331800000D+01 .2843200000D+01 +2 17720130515201306142456427.4 -.6261500000D+01 -.8682000000D-01 .6693191000D+03 .2549220000D+01 .6720000000D-02 .3024300000D+01 .1584158000D+01 .5150000000D-01 .4947700000D+01 .8983000000D+00 -.1052000000D+00 .3490000000D-02 .5722330000D+02 .1106820000D+01 .4720000000D-02 .1931000000D+00 .2209118000D+01 .4923400000D+01 .3450400000D+01 .1774600000D+01 .7055700000D+01 -.1344200000D+00 .6703902000D+03 .2611960000D+01 .5029000000D-02 .3075300000D+01 .3158426000D+01 .1581400000D+01 .2856000000D+00 .2481300000D+01 +2 17820130614201307142456457.4 -.8857100000D+01 -.6690000000D-02 .6709920000D+03 .2669310000D+01 .6622000000D-02 .3022200000D+01 .4281996000D+01 .2716500000D+01 .6895000000D+00 .5098000000D+00 .3380000000D-01 .9260000000D-02 .3346880000D+02 .1167960000D+01 .4450000000D-02 .1431000000D+00 .5580257000D+01 .1202100000D+01 .5703300000D+01 .2408600000D+01 .3036700000D+01 -.1580300000D+00 .6701011000D+03 .2698990000D+01 .5650000000D-02 .3025600000D+01 .5853130000D+01 .4284100000D+01 .2323500000D+01 .2095000000D+01 +2 17920130714201308132456487.4 -.9142500000D+01 .7133000000D-01 .6704972000D+03 .2513020000D+01 .7077000000D-02 .3007100000D+01 .6963000000D+00 .5380900000D+01 .3031100000D+01 .1499000000D+00 .3391000000D+00 .3530000000D-02 .4242520000D+02 .1135310000D+01 .4283000000D-02 .2488000000D+00 .3022823000D+01 .3779400000D+01 .1620600000D+01 .2756100000D+01 -.1738300000D+01 -.1381300000D+00 .6703754000D+03 .2588620000D+01 .6950000000D-02 .2953500000D+01 .2265545000D+01 .6894000000D+00 .4435100000D+01 .1714700000D+01 +2 18020130813201309122456517.4 -.7013200000D+01 .1187100000D+00 .6677648000D+03 .2233920000D+01 .1038700000D-01 .2952200000D+01 .3404278000D+01 .1788300000D+01 .5289500000D+01 .6096300000D+01 .4517000000D+00 -.9730000000D-02 .7043570000D+02 .1016040000D+01 .4829000000D-02 .3674000000D+00 .6117655000D+01 .9160000000D-01 .3687900000D+01 .2607500000D+01 -.5994900000D+01 -.8304000000D-01 .6704747000D+03 .2269510000D+01 .9618000000D-02 .2972400000D+01 .4970654000D+01 .3390400000D+01 .4808000000D+00 .1363500000D+01 +2 18120130912201310122456547.4 -.3358600000D+01 .1337700000D+00 .6648524000D+03 .1664500000D+01 .1361700000D-01 .2950400000D+01 .6130255000D+01 .4465300000D+01 .1379800000D+01 .5765400000D+01 .1390000000D+00 -.1950000000D-01 .9676520000D+02 .7679200000D+00 .5945000000D-02 .4703000000D+00 .2699736000D+01 .2736600000D+01 .5957300000D+01 .2376200000D+01 -.8582300000D+01 -.2145000000D-01 .6704404000D+03 .1688620000D+01 .1370400000D-01 .3023300000D+01 .1412138000D+01 .6119400000D+01 .3056300000D+01 .1040800000D+01 +2 18220131012201311112456577.4 .7812000000D+00 .1165100000D+00 .6615639000D+03 .8391000000D+00 .1821200000D-01 .2976600000D+01 .2604243000D+01 .9403000000D+00 .4091900000D+01 .5458400000D+01 -.4852000000D+00 -.1941000000D-01 .1143913000D+03 .4075200000D+00 .7797000000D-02 .5342000000D+00 .5515454000D+01 .5491100000D+01 .2238400000D+01 .2101000000D+01 -.9181500000D+01 .3151000000D-01 .6705533000D+03 .8823700000D+00 .1926400000D-01 .3011100000D+01 .4169005000D+01 .2597400000D+01 .5730900000D+01 .7532000000D+00 +2 18320131111201312112456607.4 .4307900000D+01 .9005000000D-01 .6607688000D+03 .2860600000D+00 .1672000000D-01 .3004600000D+01 .5404518000D+01 .6160000000D+00 .6599000000D+00 .5235400000D+01 -.1083900000D+01 -.1024000000D-01 .1196865000D+03 .9647000000D-01 .7632000000D-02 .5286000000D+00 .2051225000D+01 .4434400000D+01 .5131200000D+01 .1877000000D+01 -.8128900000D+01 .6377000000D-01 .6705078000D+03 .3156100000D+00 .1665600000D-01 .3003400000D+01 .6852030000D+00 .2201400000D+01 .2335500000D+01 .4964000000D+00 +2 18420131211201401102456637.4 .6883600000D+01 .6215000000D-01 .6621448000D+03 .1354830000D+01 .5089000000D-02 .3018200000D+01 .1969640000D+01 .3461300000D+01 .3909700000D+01 .5021400000D+01 -.1368300000D+01 .1770000000D-02 .1108699000D+03 .5557800000D+00 .3266000000D-02 .4562000000D+00 .4885830000D+01 .1560300000D+01 .2212900000D+01 .1625400000D+01 -.6171900000D+01 .8279000000D-01 .6705102000D+03 .1353740000D+01 .5878000000D-02 .3113800000D+01 .3535206000D+01 .5109000000D+01 .5324500000D+01 .2976000000D+00 +2 18520140110201402092456667.4 .8679500000D+01 .2847000000D-01 .6651664000D+03 .1616160000D+01 .1102000000D-01 .3058800000D+01 .4850377000D+01 .8190000000D-01 .3095800000D+01 .4811800000D+01 -.1289500000D+01 .8570000000D-02 .9206080000D+02 .7146200000D+00 .4588000000D-02 .3861000000D+00 .1435460000D+01 .4576200000D+01 .1252400000D+01 .1353400000D+01 -.3800600000D+01 .1025000000D+00 .6708401000D+03 .1691400000D+01 .1254500000D-01 .3200100000D+01 .1325850000D+00 .1727500000D+01 .4813400000D+01 .8810000000D-01 +2 18620140209201403112456697.4 .9643500000D+01 -.1257000000D-01 .6673807000D+03 .8763200000D+00 .1898200000D-01 .3146600000D+01 .1438049000D+01 .2968800000D+01 .6121700000D+01 .4546300000D+01 -.1030600000D+01 .8150000000D-02 .7480960000D+02 .4205400000D+00 .8220000000D-02 .3359000000D+00 .4239457000D+01 .1226500000D+01 .4376300000D+01 .1046900000D+01 -.8295000000D+00 .1163700000D+00 .6702381000D+03 .8944600000D+00 .1912100000D-01 .3153700000D+01 .3005142000D+01 .4551700000D+01 .1406900000D+01 .6139100000D+01 +2 18720140311201404102456727.4 .9400600000D+01 -.6118000000D-01 .6677931000D+03 .2755800000D+00 .1754400000D-01 .3170900000D+01 .4265386000D+01 .2695200000D+01 .2595200000D+01 .4270300000D+01 -.8057000000D+00 .6150000000D-02 .6959800000D+02 .8599000000D-01 .7497000000D-02 .3455000000D+00 .7605880000D+00 .1119400000D+01 .8466000000D+00 .7927000000D+00 .2709200000D+01 .1152700000D+00 .6707710000D+03 .2875900000D+00 .1774600000D-01 .3155500000D+01 .5832772000D+01 .4240600000D+01 .4241200000D+01 .5844800000D+01 +2 18820140410201405102456757.4 .7561400000D+01 -.1123400000D+00 .6667291000D+03 .1345520000D+01 .1127400000D-01 .3180600000D+01 .7603100000D+00 .5441200000D+01 .5150900000D+01 .3936600000D+01 -.6404000000D+00 .1056000000D-01 .7868560000D+02 .5388700000D+00 .5393000000D-02 .4204000000D+00 .3593021000D+01 .3703200000D+01 .3321500000D+01 .5453000000D+00 .6325800000D+01 .8428000000D-01 .6704556000D+03 .1343880000D+01 .1211200000D-01 .3192700000D+01 .2326725000D+01 .7730000000D+00 .5336000000D+00 .5498300000D+01 +2 18920140510201406092456787.4 .4069600000D+01 -.1442600000D+00 .6639781000D+03 .2005200000D+01 .8293000000D-02 .3159900000D+01 .3498378000D+01 .1869800000D+01 .1243900000D+01 .3551600000D+01 -.3212000000D+00 .2121000000D-01 .9938990000D+02 .8431700000D+00 .4314000000D-02 .5424000000D+00 .1271420000D+00 .8350000000D-01 .5460900000D+01 .2228000000D+00 .8925500000D+01 .3047000000D-01 .6707150000D+03 .2043980000D+01 .8048000000D-02 .3199100000D+01 .5064502000D+01 .3497400000D+01 .2977600000D+01 .5126800000D+01 +2 19020140609201407092456817.4 -.3862000000D+00 -.1455000000D+00 .6590976000D+03 .2420130000D+01 .5605000000D-02 .3106400000D+01 .6212423000D+01 .4564500000D+01 .3295000000D+01 .3161900000D+01 .3321000000D+00 .3312000000D-01 .1268428000D+03 .1025080000D+01 .3973000000D-02 .6676000000D+00 .2907207000D+01 .2690200000D+01 .1233900000D+01 .6170900000D+01 .9772700000D+01 -.4510000000D-01 .6707362000D+03 .2470730000D+01 .5225000000D-02 .3149200000D+01 .1494157000D+01 .6208800000D+01 .5035400000D+01 .4736100000D+01 +2 19120140709201408082456847.4 -.4726100000D+01 -.1082000000D+00 .6528107000D+03 .2538860000D+01 .5328000000D-02 .3059800000D+01 .2629702000D+01 .9612000000D+00 .5558000000D+01 .2790300000D+01 .1328000000D+01 .3448000000D-01 .1568285000D+03 .1079360000D+01 .4143000000D-02 .8048000000D+00 .5655841000D+01 .5275900000D+01 .3479000000D+01 .5843300000D+01 .8327200000D+01 -.1124100000D+00 .6707258000D+03 .2614160000D+01 .5301000000D-02 .3109500000D+01 .4194378000D+01 .2625400000D+01 .8666000000D+00 .4342100000D+01 +2 19220140808201409072456877.4 -.7916800000D+01 -.3588000000D-01 .6450009000D+03 .2494780000D+01 .6272000000D-02 .2944900000D+01 .5327383000D+01 .3650100000D+01 .1281500000D+01 .2406700000D+01 .2373300000D+01 .1935000000D-01 .1853275000D+03 .1049500000D+01 .4025000000D-02 .9080000000D+00 .2104935000D+01 .1572200000D+01 .5712600000D+01 .5481100000D+01 .4939200000D+01 -.1537800000D+00 .6708522000D+03 .2585240000D+01 .6222000000D-02 .3156500000D+01 .6092080000D+00 .5318400000D+01 .2867000000D+01 .3950200000D+01 +2 19320140907201410072456907.4 -.9013800000D+01 .3697000000D-01 .6375959000D+03 .2248740000D+01 .8691000000D-02 .2868200000D+01 .1748076000D+01 .5650000000D-01 .3503100000D+01 .2013700000D+01 .2978700000D+01 -.4990000000D-02 .2099428000D+03 .9346600000D+00 .4128000000D-02 .9927000000D+00 .4835107000D+01 .4162400000D+01 .1537500000D+01 .5109700000D+01 .3607000000D+00 -.1476000000D+00 .6710113000D+03 .2306830000D+01 .8314000000D-02 .3095300000D+01 .3313237000D+01 .1734700000D+01 .5230900000D+01 .3595000000D+01 +2 19420141007201411062456937.4 -.7942200000D+01 .9006000000D-01 .6308929000D+03 .1776770000D+01 .1286600000D-01 .2830200000D+01 .4467587000D+01 .2779300000D+01 .6017400000D+01 .1676400000D+01 .2849800000D+01 -.2903000000D-01 .2288477000D+03 .7334900000D+00 .5427000000D-02 .1060100000D+01 .1291888000D+01 .5127000000D+00 .3725300000D+01 .4795000000D+01 -.4145600000D+01 -.1048600000D+00 .6707978000D+03 .1844660000D+01 .1355200000D-01 .2990700000D+01 .6034602000D+01 .4464600000D+01 .1427000000D+01 .3260500000D+01 +2 19520141106201412062456967.4 -.5175000000D+01 .1069700000D+00 .6261666000D+03 .1008580000D+01 .1643600000D-01 .2790100000D+01 .9319760000D+00 .5525200000D+01 .2408800000D+01 .1400600000D+01 .1951700000D+01 -.3992000000D-01 .2410354000D+03 .4061800000D+00 .7019000000D-02 .1089800000D+01 .4054613000D+01 .3276600000D+01 .7600000000D-02 .4528100000D+01 -.7371200000D+01 -.5246000000D-01 .6711993000D+03 .1028560000D+01 .1667800000D-01 .2986600000D+01 .2500291000D+01 .9165000000D+00 .4069500000D+01 .2955500000D+01 +2 19620141206201501052456997.4 -.1845300000D+01 .1041400000D+00 .6243975000D+03 .2258000000D-01 .1748400000D-01 .2778700000D+01 .3721104000D+01 .4356000000D+00 .5167800000D+01 .1129700000D+01 .6974000000D+00 -.4042000000D-01 .2459372000D+03 .6795000000D-01 .7135000000D-02 .1091000000D+01 .5705080000D+00 .1751700000D+01 .2792700000D+01 .4263900000D+01 -.8905500000D+01 -.6150000000D-02 .6708200000D+03 .3361000000D-01 .1848100000D-01 .2999000000D+01 .5290520000D+01 .6190000000D+01 .6204000000D+00 .2709200000D+01 +2 19720150105201502042457027.4 .1308800000D+01 .9126000000D-01 .6254319000D+03 .1102810000D+01 .8043000000D-02 .2767100000D+01 .2758790000D+00 .1743700000D+01 .1982500000D+01 .9097000000D+00 -.5293000000D+00 -.3356000000D-01 .2427994000D+03 .4956300000D+00 .3923000000D-02 .1046900000D+01 .3412082000D+01 .5498700000D+01 .6214600000D+01 .4045200000D+01 -.8981700000D+01 .2852000000D-01 .6711878000D+03 .1152500000D+01 .8897000000D-02 .2987400000D+01 .1846477000D+01 .3420900000D+01 .3578400000D+01 .2511400000D+01 +2 19820150204201503062457057.4 .3965900000D+01 .8220000000D-01 .6292621000D+03 .1575910000D+01 .6547000000D-02 .2846500000D+01 .3153084000D+01 .4624300000D+01 .1331600000D+01 .7405000000D+00 -.1508700000D+01 -.2547000000D-01 .2327814000D+03 .6874400000D+00 .3535000000D-02 .1025900000D+01 .3057000000D-02 .2268700000D+01 .5022300000D+01 .3864800000D+01 -.8045100000D+01 .5580000000D-01 .6709067000D+03 .1704880000D+01 .8673000000D-02 .2947500000D+01 .4722120000D+01 .7600000000D-02 .2956200000D+01 .2310900000D+01 +2 19920150306201504052457087.4 .6337900000D+01 .6313000000D-01 .6338491000D+03 .1126160000D+01 .1781400000D-01 .2904400000D+01 .6030812000D+01 .1235000000D+01 .4375800000D+01 .5299000000D+00 -.2234700000D+01 -.1903000000D-01 .2210182000D+03 .4841600000D+00 .7585000000D-02 .9897000000D+00 .2873790000D+01 .5270100000D+01 .2036400000D+01 .3652700000D+01 -.6371700000D+01 .9334000000D-01 .6710079000D+03 .1152560000D+01 .1795100000D-01 .3020700000D+01 .1317254000D+01 .2899200000D+01 .6032800000D+01 .2095700000D+01 +2 20020150405201505052457117.4 .8254900000D+01 .2452000000D-01 .6354605000D+03 .4632000000D-01 .1671000000D-01 .2923700000D+01 .2589460000D+01 .3396700000D+01 .8740000000D+00 .2638000000D+00 -.2801600000D+01 -.9480000000D-02 .2149327000D+03 .2685000000D-01 .7012000000D-02 .9915000000D+00 .5710064000D+01 .2767900000D+01 .4922500000D+01 .3384500000D+01 -.3671700000D+01 .1271500000D+00 .6709935000D+03 .4208000000D-01 .1792300000D-01 .3081500000D+01 .4158033000D+01 .5635500000D+01 .2580400000D+01 .1811300000D+01 +2 20120150505201506042457147.4 .9092800000D+01 -.3166000000D-01 .6345666000D+03 .9785700000D+00 .1303900000D-01 .2898500000D+01 .5380906000D+01 .3711500000D+01 .3597600000D+01 .6214900000D+01 -.3128000000D+01 .6300000000D-02 .2186524000D+03 .4106000000D+00 .5495000000D-02 .1027200000D+01 .2218936000D+01 .1404300000D+01 .1183800000D+01 .3060500000D+01 .1561000000D+00 .1341000000D+00 .6708827000D+03 .1038800000D+01 .1319100000D-01 .3122200000D+01 .6665750000D+00 .5395700000D+01 .5221700000D+01 .1511300000D+01 +2 20220150604201507042457177.4 .8174600000D+01 -.8757000000D-01 .6302530000D+03 .1741620000D+01 .7881000000D-02 .2969300000D+01 .1847045000D+01 .1884000000D+00 .5997700000D+01 .5867900000D+01 -.2965500000D+01 .2632000000D-01 .2298541000D+03 .7339200000D+00 .3813000000D-02 .1122000000D+01 .4975059000D+01 .4120700000D+01 .3384300000D+01 .2718000000D+01 .4332900000D+01 .1145100000D+00 .6710068000D+03 .1833040000D+01 .8193000000D-02 .3127500000D+01 .3416555000D+01 .1852400000D+01 .1426700000D+01 .1161300000D+01 +2 20320150704201508032457207.4 .5395700000D+01 -.1281700000D+00 .6246797000D+03 .2184440000D+01 .5040000000D-02 .2981800000D+01 .4567651000D+01 .2899700000D+01 .2077600000D+01 .5492500000D+01 -.2126300000D+01 .4724000000D-01 .2450261000D+03 .9176900000D+00 .3617000000D-02 .1210100000D+01 .1423625000D+01 .4745000000D+00 .5559800000D+01 .2356200000D+01 .7869900000D+01 .6257000000D-01 .6709650000D+03 .2284400000D+01 .6899000000D-02 .3181600000D+01 .6137787000D+01 .4578800000D+01 .3667000000D+01 .7684000000D+00 +2 20420150803201509022457237.4 .1405700000D+01 -.1445400000D+00 .6184641000D+03 .2376280000D+01 .3518000000D-02 .2904400000D+01 .9878430000D+00 .5607700000D+01 .4131700000D+01 .5083700000D+01 -.6545000000D+00 .6165000000D-01 .2604745000D+03 .1004440000D+01 .3403000000D-02 .1261500000D+01 .4140681000D+01 .3079300000D+01 .1482000000D+01 .1962300000D+01 .9698700000D+01 -.8850000000D-02 .6709732000D+03 .2552300000D+01 .4711000000D-02 .3253800000D+01 .2560718000D+01 .9890000000D+00 .5531500000D+01 .3740000000D+00 +2 20520150902201510022457267.4 -.2955100000D+01 -.1205400000D+00 .6125041000D+03 .2402060000D+01 .5508000000D-02 .2899600000D+01 .3685744000D+01 .2048000000D+01 .6053600000D+01 .4687800000D+01 .1211100000D+01 .5739000000D-01 .2736880000D+03 .1018410000D+01 .3868000000D-02 .1325400000D+01 .5700680000D+00 .5685000000D+01 .3577600000D+01 .1579300000D+01 .9310800000D+01 -.8428000000D-01 .6712133000D+03 .2552950000D+01 .5106000000D-02 .3181300000D+01 .5260798000D+01 .3679000000D+01 .1379200000D+01 .6275300000D+01 +2 20620151002201511012457297.4 -.6527000000D+01 -.6710000000D-01 .6082351000D+03 .2215200000D+01 .7622000000D-02 .2905600000D+01 .1036260000D+00 .4757100000D+01 .1938700000D+01 .4310600000D+01 .2921400000D+01 .3648000000D-01 .2836588000D+03 .9303700000D+00 .4035000000D-02 .1373300000D+01 .3286374000D+01 .2002400000D+01 .5688100000D+01 .1216800000D+01 .6727600000D+01 -.1353900000D+00 .6708112000D+03 .2348140000D+01 .8016000000D-02 .3171500000D+01 .1681383000D+01 .1089000000D+00 .3686000000D+01 .5897200000D+01 +2 20720151101201512012457327.4 -.8515300000D+01 .1600000000D-03 .6054679000D+03 .1785660000D+01 .1055900000D-01 .2837000000D+01 .2818178000D+01 .1202900000D+01 .4477100000D+01 .3956300000D+01 .4007300000D+01 .5570000000D-02 .2898965000D+03 .7302800000D+00 .4929000000D-02 .1368600000D+01 .6015739000D+01 .4639400000D+01 .1721400000D+01 .8784000000D+00 .2646500000D+01 -.1460200000D+00 .6708965000D+03 .1929380000D+01 .1208700000D-01 .3181300000D+01 .4399819000D+01 .2814300000D+01 .6054300000D+01 .5524500000D+01 +2 20820151201201512312457357.4 -.8537700000D+01 .5314000000D-01 .6039330000D+03 .1153760000D+01 .1619500000D-01 .2795100000D+01 .5559460000D+01 .3960500000D+01 .8329000000D+00 .3617600000D+01 .4188000000D+01 -.2080000000D-01 .2929106000D+03 .4433300000D+00 .7237000000D-02 .1358600000D+01 .2487274000D+01 .1044800000D+01 .4167300000D+01 .5514000000D+00 -.1770600000D+01 -.1199400000D+00 .6708409000D+03 .1188690000D+01 .1628100000D-01 .3105200000D+01 .8598620000D+00 .5553900000D+01 .2410700000D+01 .5211000000D+01 +2 20920151231201601302457387.4 -.6935100000D+01 .7863000000D-01 .6037487000D+03 .1880600000D+00 .1649900000D-01 .2758200000D+01 .2056208000D+01 .3728000000D+00 .3586700000D+01 .3347500000D+01 .3564800000D+01 -.3512000000D-01 .2940853000D+03 .1140000000D-01 .6967000000D-02 .1341800000D+01 .5277444000D+01 .4433100000D+01 .6356000000D+00 .2884000000D+00 -.5477400000D+01 -.7520000000D-01 .6704238000D+03 .1858700000D+00 .1835700000D-01 .3032600000D+01 .3642446000D+01 .2205900000D+01 .5260900000D+01 .4955800000D+01 +2 21020160130201602292457417.4 -.4444500000D+01 .8021000000D-01 .6033677000D+03 .8814300000D+00 .1021800000D-01 .2766700000D+01 .4884534000D+01 .1196000000D+00 .3494000000D+00 .3139100000D+01 .2450900000D+01 -.3799000000D-01 .2937202000D+03 .4446100000D+00 .4232000000D-02 .1344100000D+01 .1827807000D+01 .3411300000D+01 .3885500000D+01 .7990000000D-01 -.7789300000D+01 -.3977000000D-01 .6708299000D+03 .9558600000D+00 .1106200000D-01 .3005400000D+01 .1888940000D+00 .1771700000D+01 .1818900000D+01 .4719300000D+01 +2 21120160229201603302457447.4 -.1922400000D+01 .8934000000D-01 .6044695000D+03 .1482030000D+01 .3859000000D-02 .2732600000D+01 .1473021000D+01 .3026800000D+01 .5963300000D+01 .2949900000D+01 .1250000000D+01 -.4356000000D-01 .2924179000D+03 .6732100000D+00 .2671000000D-02 .1317400000D+01 .4697892000D+01 .1269000000D+00 .2849900000D+01 .6167900000D+01 -.8914500000D+01 -.1013000000D-01 .6706447000D+03 .1635500000D+01 .5341000000D-02 .2981700000D+01 .3059131000D+01 .4629800000D+01 .1132300000D+01 .4505100000D+01 +2 21220160330201604292457477.4 .7390000000D+00 .9560000000D-01 .6056497000D+03 .1255480000D+01 .1573500000D-01 .2655900000D+01 .4353409000D+01 .5886600000D+01 .2722800000D+01 .2738700000D+01 -.5390000000D-01 -.4677000000D-01 .2893771000D+03 .5280200000D+00 .7205000000D-02 .1263000000D+01 .1288569000D+01 .3069400000D+01 .6125700000D+01 .5954600000D+01 -.9106000000D+01 .2480000000D-01 .6708114000D+03 .1293340000D+01 .1536000000D-01 .2985500000D+01 .5939193000D+01 .1242500000D+01 .4387500000D+01 .4307100000D+01 +2 21320160429201605292457507.4 .3576000000D+01 .9036000000D-01 .6066989000D+03 .2755100000D+00 .1601700000D-01 .2684400000D+01 .9230670000D+00 .2413700000D+01 .5580700000D+01 .2488900000D+01 -.1441500000D+01 -.4524000000D-01 .2870769000D+03 .8137000000D-01 .6959000000D-02 .1268300000D+01 .4134257000D+01 .6157000000D+01 .2793300000D+01 .5698300000D+01 -.8355000000D+01 .7415000000D-01 .6708918000D+03 .3112500000D+00 .1824500000D-01 .2969000000D+01 .2506071000D+01 .4117300000D+01 .9521000000D+00 .4083800000D+01 +2 21420160529201606282457537.4 .6314200000D+01 .5824000000D-01 .6066558000D+03 .7061000000D+00 .1308800000D-01 .2728600000D+01 .3726316000D+01 .2127700000D+01 .2021100000D+01 .2203600000D+01 -.2808600000D+01 -.3234000000D-01 .2874548000D+03 .3470200000D+00 .5566000000D-02 .1301000000D+01 .6508550000D+00 .5562500000D+01 .5405000000D+01 .5412500000D+01 -.6179700000D+01 .1187500000D+00 .6705574000D+03 .7855000000D+00 .1372700000D-01 .3006800000D+01 .5309446000D+01 .3774800000D+01 .3604500000D+01 .3776300000D+01 +2 21520160628201607282457567.4 .8164600000D+01 .3690000000D-02 .6051866000D+03 .1489560000D+01 .8874000000D-02 .2725500000D+01 .2026820000D+00 .4899000000D+01 .4532800000D+01 .1865400000D+01 -.3830900000D+01 -.7780000000D-02 .2899998000D+03 .6835300000D+00 .4020000000D-02 .1315300000D+01 .3412233000D+01 .2027200000D+01 .1373800000D+01 .5076600000D+01 -.2592600000D+01 .1446000000D+00 .6708654000D+03 .1607910000D+01 .1011200000D-01 .3021400000D+01 .1786195000D+01 .2140000000D+00 .6244500000D+01 .3435100000D+01 +2 21620160728201608272457597.4 .8336600000D+01 -.5796000000D-01 .6041271000D+03 .2008480000D+01 .4343000000D-02 .2703900000D+01 .2930223000D+01 .1327000000D+01 .7998000000D+00 .1493100000D+01 -.4100200000D+01 .2206000000D-01 .2932532000D+03 .8947600000D+00 .2766000000D-02 .1315900000D+01 .6146219000D+01 .4662300000D+01 .3573100000D+01 .4716700000D+01 .1875100000D+01 .1360400000D+00 .6705990000D+03 .2153930000D+01 .6919000000D-02 .3094900000D+01 .4514804000D+01 .2951800000D+01 .2221900000D+01 .3093000000D+01 +2 21720160827201609262457627.4 .6528900000D+01 -.1090800000D+00 .6032671000D+03 .2252700000D+01 .3822000000D-02 .2806200000D+01 .5637889000D+01 .4065900000D+01 .2872900000D+01 .1116300000D+01 -.3408600000D+01 .4845000000D-01 .2946952000D+03 .9887400000D+00 .3433000000D-02 .1366400000D+01 .2580826000D+01 .1022200000D+01 .5757100000D+01 .4348400000D+01 .6122700000D+01 .9345000000D-01 .6705078000D+03 .2502480000D+01 .5238000000D-02 .3104300000D+01 .9423940000D+00 .5661400000D+01 .4079900000D+01 .2721200000D+01 +2 21820160926201610262457657.4 .3075700000D+01 -.1360200000D+00 .6037870000D+03 .2326160000D+01 .4332000000D-02 .2901600000D+01 .2054264000D+01 .5093000000D+00 .4663000000D+01 .7304000000D+00 -.1867400000D+01 .6276000000D-01 .2934400000D+03 .1003670000D+01 .3751000000D-02 .1398200000D+01 .5293141000D+01 .3632400000D+01 .1603200000D+01 .3972600000D+01 .8967200000D+01 .2725000000D-01 .6707405000D+03 .2530320000D+01 .4600000000D-02 .3129400000D+01 .3643522000D+01 .2062800000D+01 .6251300000D+01 .2323600000D+01 +2 21920161026201611252457687.4 -.1101500000D+01 -.1336400000D+00 .6062651000D+03 .2218720000D+01 .6366000000D-02 .2858500000D+01 .4755798000D+01 .3218100000D+01 .4094000000D+00 .3549000000D+00 .6540000000D-01 .6199000000D-01 .2893634000D+03 .9346000000D+00 .3938000000D-02 .1348600000D+01 .1725737000D+01 .6218900000D+01 .3711700000D+01 .3614300000D+01 .9674000000D+01 -.4586000000D-01 .6703210000D+03 .2396110000D+01 .7571000000D-02 .3188200000D+01 .6384800000D-01 .4774800000D+01 .2170000000D+01 .1930900000D+01 +2 22020161125201612252457717.4 -.5074500000D+01 -.9444000000D-01 .6093207000D+03 .1842220000D+01 .9621000000D-02 .2906100000D+01 .1185427000D+01 .5958400000D+01 .2976100000D+01 .6272900000D+01 .1909400000D+01 .4467000000D-01 .2827946000D+03 .7471900000D+00 .4666000000D-02 .1326100000D+01 .4453770000D+01 .2551300000D+01 .6045600000D+01 .3264700000D+01 .8218100000D+01 -.1081600000D+00 .6704210000D+03 .2024930000D+01 .1173200000D-01 .3184300000D+01 .2779125000D+01 .1189500000D+01 .4450500000D+01 .1583500000D+01 +2 22120161225201701242457747.4 -.7896200000D+01 -.3547000000D-01 .6125655000D+03 .1278690000D+01 .1515900000D-01 .2955300000D+01 .3923396000D+01 .2430400000D+01 .5584800000D+01 .5934600000D+01 .3234500000D+01 .2078000000D-01 .2760316000D+03 .4905200000D+00 .6543000000D-02 .1316700000D+01 .9231220000D+00 .5189600000D+01 .2166000000D+01 .2939800000D+01 .5003400000D+01 -.1311100000D+00 .6701499000D+03 .1335160000D+01 .1555300000D-01 .3190600000D+01 .5517394000D+01 .3924900000D+01 .7959000000D+00 .1253600000D+01 +2 22220170124201702232457777.4 -.9030500000D+01 .1744000000D-01 .6149437000D+03 .3443100000D+00 .1617200000D-01 .2939100000D+01 .4132420000D+00 .5204200000D+01 .2058900000D+01 .5650400000D+01 .3885700000D+01 -.1000000000D-04 .2717315000D+03 .1009500000D+00 .6618000000D-02 .1301800000D+01 .3707800000D+01 .1265800000D+01 .4831700000D+01 .2664600000D+01 .1032500000D+01 -.1172700000D+00 .6697542000D+03 .3709100000D+00 .1848600000D-01 .3197600000D+01 .2009170000D+01 .4690000000D+00 .3603900000D+01 .9392000000D+00 +2 22320170223201703252457807.4 -.8556000000D+01 .4660000000D-01 .6144490000D+03 .6725500000D+00 .1202500000D-01 .2838100000D+01 .3233739000D+01 .4833000000D+01 .5017200000D+01 .5398800000D+01 .3920800000D+01 -.1239000000D-01 .2719074000D+03 .3284500000D+00 .4575000000D-02 .1269500000D+01 .2509590000D+00 .1444900000D+01 .1600400000D+01 .2417000000D+01 -.2569600000D+01 -.9279000000D-01 .6699639000D+03 .7626600000D+00 .1214200000D-01 .3180800000D+01 .4830216000D+01 .1248000000D+00 .1673000000D+00 .7018000000D+00 +2 22420170325201704242457837.4 -.7119800000D+01 .6545000000D-01 .6129022000D+03 .1404380000D+01 .9440000000D-03 .2811000000D+01 .6096953000D+01 .1483500000D+01 .4483300000D+01 .5188700000D+01 .3545000000D+01 -.2345000000D-01 .2769143000D+03 .6025600000D+00 .9390000000D-03 .1286800000D+01 .3111455000D+01 .4363600000D+01 .8222000000D+00 .2204200000D+01 -.5456300000D+01 -.6594000000D-01 .6696692000D+03 .1569870000D+01 .3336000000D-02 .3135200000D+01 .1410355000D+01 .2966800000D+01 .5314100000D+01 .5051000000D+00 +2 22520170424201705242457867.4 -.5090200000D+01 .8523000000D-01 .6097918000D+03 .1308320000D+01 .1296200000D-01 .2809400000D+01 .2693929000D+01 .4332500000D+01 .1155800000D+01 .4960600000D+01 .2810800000D+01 -.3673000000D-01 .2823033000D+03 .5305000000D+00 .5946000000D-02 .1308000000D+01 .5982951000D+01 .9671000000D+00 .4080300000D+01 .1961400000D+01 -.7486700000D+01 -.4810000000D-01 .6700359000D+03 .1377460000D+01 .1338400000D-01 .3087100000D+01 .4291122000D+01 .5866300000D+01 .2699500000D+01 .2956000000D+00 +2 22620170524201706232457897.4 -.2468700000D+01 .1077500000D+00 .6082446000D+03 .4925300000D+00 .1622000000D-01 .2771700000D+01 .5552702000D+01 .8944000000D+00 .4034500000D+01 .4722500000D+01 .1673300000D+01 -.5037000000D-01 .2855669000D+03 .1585400000D+00 .7012000000D-02 .1302500000D+01 .2548763000D+01 .3785900000D+01 .7303000000D+00 .1713600000D+01 -.8902300000D+01 -.1280000000D-01 .6700983000D+03 .5373700000D+00 .1838400000D-01 .3026000000D+01 .8645090000D+00 .2422100000D+01 .5554000000D+01 .3100000000D-01 +2 22720170623201707232457927.4 .7563000000D+00 .1166900000D+00 .6081773000D+03 .4920300000D+00 .1426600000D-01 .2702400000D+01 .2083019000D+01 .5684000000D+00 .5204000000D+00 .4446900000D+01 .1586000000D+00 -.5596000000D-01 .2855315000D+03 .2667800000D+00 .5917000000D-02 .1264400000D+01 .5356376000D+01 .3608600000D+01 .3404900000D+01 .1436600000D+01 -.9261400000D+01 .3969000000D-01 .6700693000D+03 .5913800000D+00 .1432500000D-01 .2988100000D+01 .3677962000D+01 .2132400000D+01 .2029800000D+01 .6022400000D+01 +2 22820170723201708222457957.4 .4245000000D+01 .9485000000D-01 .6095125000D+03 .1334580000D+01 .9648000000D-02 .2702700000D+01 .4851858000D+01 .3353500000D+01 .3083100000D+01 .4107000000D+01 -.1514000000D+01 -.4610000000D-01 .2823668000D+03 .6149600000D+00 .4179000000D-02 .1232100000D+01 .1841990000D+01 .2110000000D-01 .5690200000D+01 .1100300000D+01 -.8126700000D+01 .1021700000D+00 .6703997000D+03 .1456570000D+01 .1065600000D-01 .3009900000D+01 .1624250000D+00 .4865500000D+01 .4679500000D+01 .5724700000D+01 +2 22920170822201709212457987.4 .7187800000D+01 .4049000000D-01 .6127398000D+03 .1931280000D+01 .5774000000D-02 .2756300000D+01 .1303400000D+01 .6088400000D+01 .5536100000D+01 .3758000000D+01 -.2933600000D+01 -.2007000000D-01 .2757469000D+03 .8464200000D+00 .3490000000D-02 .1210300000D+01 .4582107000D+01 .2663900000D+01 .1484200000D+01 .7556000000D+00 -.5119000000D+01 .1423300000D+00 .6698763000D+03 .2078540000D+01 .7480000000D-02 .2972000000D+01 .2896848000D+01 .1339900000D+01 .6487000000D+00 .5359300000D+01 +2 23020170921201710212458017.4 .8546400000D+01 -.2538000000D-01 .6175909000D+03 .2222820000D+01 .4685000000D-02 .2779000000D+01 .4015495000D+01 .2528800000D+01 .1547800000D+01 .3402200000D+01 -.3592900000D+01 .9300000000D-02 .2649950000D+03 .9465100000D+00 .3815000000D-02 .1156600000D+01 .1021679000D+01 .5259100000D+01 .3768100000D+01 .4116000000D+00 -.7513000000D+00 .1489000000D+00 .6701103000D+03 .2437700000D+01 .4812000000D-02 .2956800000D+01 .5609577000D+01 .4036400000D+01 .2811600000D+01 .4982400000D+01 +2 23120171021201711202458047.4 .7761300000D+01 -.8541000000D-01 .6236560000D+03 .2398290000D+01 .4912000000D-02 .2781900000D+01 .4354840000D+00 .5251500000D+01 .3237400000D+01 .3036400000D+01 -.3298300000D+01 .3192000000D-01 .2500537000D+03 .9895900000D+00 .4337000000D-02 .1073300000D+01 .3739951000D+01 .1560400000D+01 .5948600000D+01 .6630000000D-01 .3892000000D+01 .1189600000D+00 .6700077000D+03 .2559490000D+01 .4655000000D-02 .3014200000D+01 .2028283000D+01 .4516000000D+00 .4751200000D+01 .4624600000D+01 +2 23220171120201712202458077.4 .5064700000D+01 -.1299800000D+00 .6311669000D+03 .2291290000D+01 .5674000000D-02 .2899300000D+01 .3137539000D+01 .1661900000D+01 .5328800000D+01 .2667800000D+01 -.2287200000D+01 .4416000000D-01 .2318513000D+03 .9398800000D+00 .3872000000D-02 .1011900000D+01 .1781970000D+00 .4098900000D+01 .1872700000D+01 .5998400000D+01 .7528900000D+01 .6369000000D-01 .6698103000D+03 .2439240000D+01 .6651000000D-02 .3060400000D+01 .4729716000D+01 .3155900000D+01 .6283000000D+00 .4262700000D+01 +2 23320171220201801192458107.4 .1060300000D+01 -.1395600000D+00 .6378883000D+03 .1999020000D+01 .9918000000D-02 .2990900000D+01 .5850456000D+01 .4382700000D+01 .1417700000D+01 .2305800000D+01 -.9291000000D+00 .4216000000D-01 .2120516000D+03 .8166200000D+00 .4674000000D-02 .9440000000D+00 .2914877000D+01 .3920000000D+00 .4021700000D+01 .5664700000D+01 .9361600000D+01 -.7950000000D-02 .6698219000D+03 .2141270000D+01 .1133600000D-01 .3079800000D+01 .1158498000D+01 .5862900000D+01 .2898500000D+01 .3899200000D+01 +2 23420180119201802182458137.4 -.3114200000D+01 -.1179700000D+00 .6437802000D+03 .1413940000D+01 .1407000000D-01 .3008400000D+01 .2301590000D+01 .8328000000D+00 .4002800000D+01 .1990200000D+01 .3229000000D+00 .3447000000D-01 .1943811000D+03 .5878400000D+00 .5837000000D-02 .8816000000D+00 .5674276000D+01 .2975700000D+01 .8400000000D-02 .5371700000D+01 .9060500000D+01 -.6924000000D-01 .6696659000D+03 .1475320000D+01 .1466500000D-01 .3128200000D+01 .3890869000D+01 .2315200000D+01 .5530400000D+01 .3559100000D+01 +2 23520180218201803202458167.4 -.6586100000D+01 -.6939000000D-01 .6471311000D+03 .5369800000D+00 .1636000000D-01 .3023300000D+01 .5069082000D+01 .3619000000D+01 .4481000000D+00 .1688800000D+01 .1321800000D+01 .2496000000D-01 .1827788000D+03 .2378400000D+00 .6736000000D-02 .8460000000D+00 .2179594000D+01 .5534000000D+01 .2604200000D+01 .5093200000D+01 .6994500000D+01 -.1022000000D+00 .6694378000D+03 .5943200000D+00 .1843600000D-01 .3207100000D+01 .3753400000D+00 .5091200000D+01 .1941000000D+01 .3279400000D+01 +2 23620180320201804192458197.4 -.8701000000D+01 -.2105000000D-01 .6475572000D+03 .5001300000D+00 .1387200000D-01 .3061100000D+01 .1597660000D+01 .3212800000D+01 .3370100000D+01 .1421000000D+01 .2072100000D+01 .1800000000D-01 .1812944000D+03 .1956800000D+00 .5380000000D-02 .8714000000D+00 .4999039000D+01 .5654800000D+01 .5533000000D+01 .4824800000D+01 .4007100000D+01 -.1071700000D+00 .6697856000D+03 .5547100000D+00 .1361800000D-01 .3243600000D+01 .3186348000D+01 .4800800000D+01 .4771900000D+01 .3031600000D+01 +2 23720180419201805192458227.4 -.9417800000D+01 .1358000000D-01 .6451843000D+03 .1329880000D+01 .2462000000D-02 .3112400000D+01 .4452773000D+01 .6123600000D+01 .5016000000D+00 .1191700000D+01 .2651800000D+01 .1000000000D-01 .1901391000D+03 .5261400000D+00 .8610000000D-03 .9530000000D+00 .1560676000D+01 .2111600000D+01 .2905700000D+01 .4574600000D+01 .8081000000D+00 -.9801000000D-01 .6691584000D+03 .1405580000D+01 .3094000000D-02 .3151700000D+01 .6042983000D+01 .1312500000D+01 .2076300000D+01 .2799100000D+01 +2 23820180519201806182458257.4 -.9063800000D+01 .4240000000D-01 .6408082000D+03 .1447200000D+01 .1205400000D-01 .3013600000D+01 .1046903000D+01 .2725900000D+01 .5770100000D+01 .9920000000D+00 .2986300000D+01 -.2090000000D-02 .2037827000D+03 .5577000000D+00 .4873000000D-02 .9906000000D+00 .4417960000D+01 .5025400000D+01 .1910600000D+01 .4352600000D+01 -.2215100000D+01 -.9300000000D-01 .6698318000D+03 .1507260000D+01 .1248400000D-01 .3184200000D+01 .2638540000D+01 .4227300000D+01 .1055000000D+01 .2575800000D+01 +2 23920180618201807182458287.4 -.7747800000D+01 .7502000000D-01 .6373939000D+03 .6778000000D+00 .1627300000D-01 .3006200000D+01 .3911257000D+01 .5609900000D+01 .2470600000D+01 .7369000000D+00 .2911600000D+01 -.1904000000D-01 .2141584000D+03 .2509200000D+00 .6531000000D-02 .1019200000D+01 .9807700000D+00 .1487500000D+01 .4838900000D+01 .4085200000D+01 -.5086500000D+01 -.8484000000D-01 .6695149000D+03 .7219200000D+00 .1771100000D-01 .3179200000D+01 .5502634000D+01 .7781000000D+00 .3927500000D+01 .2331400000D+01 +2 24020180718201808172458317.4 -.5433300000D+01 .1134400000D+00 .6365328000D+03 .3177300000D+00 .1560100000D-01 .3014800000D+01 .4501240000D+00 .5275200000D+01 .5202900000D+01 .4255000000D+00 .2306900000D+01 -.3570000000D-01 .2162228000D+03 .1683400000D+00 .6260000000D-02 .1005000000D+01 .3793199000D+01 .1722300000D+01 .1246400000D+01 .3766100000D+01 -.7609200000D+01 -.5768000000D-01 .6698795000D+03 .3716300000D+00 .1603700000D-01 .3135800000D+01 .2041714000D+01 .4769000000D+00 .4338000000D+00 .2041500000D+01 +2 24120180817201809162458347.4 -.2029000000D+01 .1387400000D+00 .6385646000D+03 .1263000000D+01 .1073800000D-01 .2980900000D+01 .3227430000D+01 .1775500000D+01 .1533200000D+01 .1002000000D+00 .1216900000D+01 -.4338000000D-01 .2093282000D+03 .5305300000D+00 .4830000000D-02 .9421000000D+00 .2879700000D+00 .4222700000D+01 .3588900000D+01 .3441100000D+01 -.9299100000D+01 .2530000000D-02 .6698075000D+03 .1337070000D+01 .1166200000D-01 .3059100000D+01 .4817127000D+01 .3256500000D+01 .3041700000D+01 .1690900000D+01 +2 24220180916201810162458377.4 .2090500000D+01 .1301800000D+00 .6436522000D+03 .1899090000D+01 .8090000000D-02 .2948600000D+01 .5967302000D+01 .4499800000D+01 .4009100000D+01 .6046400000D+01 -.7660000000D-01 -.3583000000D-01 .1942382000D+03 .7872000000D+00 .4447000000D-02 .8384000000D+00 .3039356000D+01 .5248000000D+00 .5863300000D+01 .3122700000D+01 -.9246200000D+01 .7172000000D-01 .6697929000D+03 .2020560000D+01 .8046000000D-02 .3022100000D+01 .1272513000D+01 .5991300000D+01 .5438100000D+01 .1328900000D+01 +2 24320181016201811152458407.4 .6047800000D+01 .8105000000D-01 .6496703000D+03 .2323640000D+01 .5866000000D-02 .2907700000D+01 .2400224000D+01 .9350000000D+00 .6123200000D+01 .5671500000D+01 -.1153800000D+01 -.1567000000D-01 .1718098000D+03 .9615300000D+00 .4658000000D-02 .7108000000D+00 .5780293000D+01 .3105100000D+01 .1732300000D+01 .2791900000D+01 -.7144300000D+01 .1315900000D+00 .6698330000D+03 .2459430000D+01 .5251000000D-02 .3048800000D+01 .3986495000D+01 .2418700000D+01 .1255400000D+01 .9600000000D+00 +2 24420181115201812152458437.4 .8591900000D+01 .1166000000D-01 .6566985000D+03 .2494220000D+01 .5101000000D-02 .2921000000D+01 .5103750000D+01 .3618300000D+01 .1904900000D+01 .5283600000D+01 -.1627900000D+01 .3480000000D-02 .1439011000D+03 .1059280000D+01 .4351000000D-02 .5691000000D+00 .2243185000D+01 .5648500000D+01 .3969800000D+01 .2451700000D+01 -.3176500000D+01 .1527900000D+00 .6699216000D+03 .2597600000D+01 .4904000000D-02 .2995700000D+01 .4035370000D+00 .5112600000D+01 .3362800000D+01 .5940000000D+00 +2 24520181215201901142458467.4 .8974600000D+01 -.6082000000D-01 .6626415000D+03 .2477280000D+01 .7117000000D-02 .2942300000D+01 .1522045000D+01 .1970000000D-01 .3829100000D+01 .4930600000D+01 -.1505400000D+01 .1365000000D-01 .1127075000D+03 .1061590000D+01 .4227000000D-02 .4257000000D+00 .5017653000D+01 .1922000000D+01 .6194900000D+01 .2186500000D+01 .1568700000D+01 .1363000000D+00 .6697950000D+03 .2560550000D+01 .7017000000D-02 .2933600000D+01 .3102228000D+01 .1530700000D+01 .5284600000D+01 .2265000000D+00 +2 24620190114201902132458497.4 .7014600000D+01 -.1106300000D+00 .6669703000D+03 .2169370000D+01 .9595000000D-02 .2947400000D+01 .4231497000D+01 .2708000000D+01 .6174700000D+01 .4601100000D+01 -.1072200000D+01 .1276000000D-01 .8248430000D+02 .9746100000D+00 .4484000000D-02 .3088000000D+00 .1572300000D+01 .4499700000D+01 .1939100000D+01 .2047400000D+01 .5740800000D+01 .9233000000D-01 .6700825000D+03 .2221510000D+01 .9093000000D-02 .2986200000D+01 .5808372000D+01 .4232800000D+01 .1400800000D+01 .6164000000D+01 +2 24720190213201903152458527.4 .3548700000D+01 -.1357500000D+00 .6696356000D+03 .1633600000D+01 .1381600000D-01 .3007000000D+01 .6769380000D+00 .5403600000D+01 .2292200000D+01 .4251200000D+01 -.6772000000D+00 .6660000000D-02 .5820400000D+02 .7620200000D+00 .5888000000D-02 .2211000000D+00 .4515414000D+01 .8291000000D+00 .4113300000D+01 .1940600000D+01 .8435700000D+01 .3006000000D-01 .6698775000D+03 .1680300000D+01 .1437600000D-01 .3028400000D+01 .2251298000D+01 .6772000000D+00 .3884100000D+01 .5854300000D+01 +2 24820190315201904142458557.4 -.5076000000D+00 -.1257800000D+00 .6704795000D+03 .7852900000D+00 .1660400000D-01 .3064200000D+01 .3435793000D+01 .1891500000D+01 .5054300000D+01 .3962100000D+01 -.4855000000D+00 .5000000000D-02 .4462350000D+02 .4089800000D+00 .7431000000D-02 .1876000000D+00 .1265902000D+01 .3527900000D+01 .4000000000D+00 .1890200000D+01 .9210000000D+01 -.2661000000D-01 .6702191000D+03 .8353800000D+00 .1784300000D-01 .3008200000D+01 .5009126000D+01 .3411000000D+01 .2663000000D+00 .5553400000D+01 +2 24920190414201905142458587.4 -.4181600000D+01 -.9558000000D-01 .6705162000D+03 .2357000000D+00 .1640500000D-01 .3104400000D+01 .6236949000D+01 .1420400000D+01 .1593300000D+01 .3733600000D+01 -.3572000000D+00 .9560000000D-02 .4136750000D+02 .5459000000D-01 .6969000000D-02 .1971000000D+00 .4185385000D+01 .3129600000D+01 .3244200000D+01 .1612100000D+01 .8376900000D+01 -.6573000000D-01 .6699371000D+03 .2774800000D+00 .1555700000D-01 .3030900000D+01 .1525515000D+01 .3049300000D+01 .3144100000D+01 .5288500000D+01 +2 25020190514201906132458617.4 -.7003300000D+01 -.5758000000D-01 .6706841000D+03 .1241060000D+01 .4990000000D-02 .3130700000D+01 .2798752000D+01 .4400100000D+01 .4706400000D+01 .3513100000D+01 -.6770000000D-01 .1486000000D-01 .4626020000D+02 .4912300000D+00 .2915000000D-02 .2549000000D+00 .5769360000D+00 .6046000000D+01 .1804000000D+00 .1149700000D+01 .6473900000D+01 -.8536000000D-01 .6699423000D+03 .1266690000D+01 .5495000000D-02 .3125800000D+01 .4372185000D+01 .5939000000D+01 .6258500000D+01 .5084400000D+01 +2 25120190613201907132458647.4 -.8790100000D+01 -.2703000000D-01 .6691504000D+03 .1520350000D+01 .8381000000D-02 .3150800000D+01 .5674184000D+01 .9920000000D+00 .3959700000D+01 .3297700000D+01 .3977000000D+00 .1664000000D-01 .5977240000D+02 .6548800000D+00 .3661000000D-02 .3173000000D+00 .3195273000D+01 .2698500000D+01 .5680500000D+01 .7355000000D+00 .3973900000D+01 -.9716000000D-01 .6700838000D+03 .1586700000D+01 .9606000000D-02 .3188000000D+01 .9655050000D+00 .2544900000D+01 .5606500000D+01 .4857000000D+01 +2 25220190713201908122458677.4 -.9675500000D+01 .7990000000D-02 .6680846000D+03 .9617000000D+00 .1779200000D-01 .3181300000D+01 .2260806000D+01 .3908200000D+01 .7649000000D+00 .3042700000D+01 .9150000000D+00 .8250000000D-02 .7467810000D+02 .4218800000D+00 .7136000000D-02 .3750000000D+00 .5909606000D+01 .5583500000D+01 .2555700000D+01 .3791000000D+00 .9875000000D+00 -.1098500000D+00 .6699393000D+03 .9751100000D+00 .1782900000D-01 .3167900000D+01 .3837052000D+01 .5406100000D+01 .2250900000D+01 .4632300000D+01 +2 25320190812201909112458707.4 -.9421100000D+01 .5110000000D-01 .6668829000D+03 .1139800000D+00 .1680700000D-01 .3217900000D+01 .5093599000D+01 .3740900000D+01 .3517400000D+01 .2769000000D+01 .1168000000D+01 -.2930000000D-02 .8041250000D+02 .5859000000D-01 .7306000000D-02 .3775000000D+00 .2407005000D+01 .3492000000D+00 .5302100000D+01 .8210000000D-01 -.2427800000D+01 -.1159000000D+00 .6701541000D+03 .1322700000D+00 .1705900000D-01 .3181400000D+01 .3872650000D+00 .5121700000D+01 .5093000000D+01 .4339100000D+01 +2 25420190911201910112458737.4 -.7742200000D+01 .1039100000D+00 .6678975000D+03 .1140030000D+01 .1328800000D-01 .3217000000D+01 .1596444000D+01 .7310000000D-01 .6186800000D+01 .2436200000D+01 .1047600000D+01 -.1056000000D-01 .7329770000D+02 .4647400000D+00 .5899000000D-02 .3127000000D+00 .5221320000D+01 .1974500000D+01 .1521800000D+01 .6098300000D+01 -.5938000000D+01 -.9361000000D-01 .6700954000D+03 .1163870000D+01 .1388100000D-01 .3229700000D+01 .3171775000D+01 .1628800000D+01 .1384700000D+01 .3995700000D+01 +2 25520191011201911102458767.4 -.4566500000D+01 .1497800000D+00 .6694916000D+03 .1904980000D+01 .9525000000D-02 .3160300000D+01 .4341246000D+01 .2807800000D+01 .2319300000D+01 .2047300000D+01 .6962000000D+00 -.9200000000D-02 .5512460000D+02 .8025800000D+00 .5085000000D-02 .2074000000D+00 .1830225000D+01 .4582900000D+01 .3793300000D+01 .6022700000D+01 -.8687800000D+01 -.3808000000D-01 .6701368000D+03 .1979160000D+01 .8446000000D-02 .3242300000D+01 .5915583000D+01 .4354000000D+01 .3862500000D+01 .3626800000D+01 +2 25620191110201912102458797.4 -.9110000000D-01 .1523700000D+00 .6707355000D+03 .2421590000D+01 .7107000000D-02 .3157300000D+01 .7754060000D+00 .5505200000D+01 .4384600000D+01 .1660800000D+01 .4110000000D+00 .1700000000D-02 .3398270000D+02 .1037200000D+01 .4866000000D-02 .1400000000D+00 .5048716000D+01 .9018000000D+00 .5931200000D+01 .1991000000D+00 -.9803300000D+01 .4187000000D-01 .6704759000D+03 .2451070000D+01 .6107000000D-02 .3112100000D+01 .2346938000D+01 .7741000000D+00 .6174700000D+01 .3244200000D+01 +2 25720191210202001092458827.4 .4521200000D+01 .1129400000D+00 .6706952000D+03 .2650010000D+01 .6361000000D-02 .3111300000D+01 .3476350000D+01 .1890700000D+01 .1630000000D+00 .1287200000D+01 .4706000000D+00 .1353000000D-01 .3569500000D+02 .1164750000D+01 .4371000000D-02 .2214000000D+00 .2552953000D+01 .3465100000D+01 .1787800000D+01 .7154000000D+00 -.8590000000D+01 .1114000000D+00 .6702484000D+03 .2686430000D+01 .5659000000D-02 .3091200000D+01 .5045579000D+01 .3480000000D+01 .1767400000D+01 .2849300000D+01 +2 25820200109202002082458857.4 .8001200000D+01 .4192000000D-01 .6683702000D+03 .2609790000D+01 .7232000000D-02 .3015000000D+01 .6172050000D+01 .4560300000D+01 .2408500000D+01 .9040000000D+00 .9050000000D+00 .1425000000D-01 .6485030000D+02 .1166200000D+01 .4556000000D-02 .3714000000D+00 .5759524000D+01 .6044000000D+01 .3956900000D+01 .6015000000D+00 -.5194500000D+01 .1474400000D+00 .6705801000D+03 .2661990000D+01 .5793000000D-02 .3095500000D+01 .1456578000D+01 .6162300000D+01 .3813600000D+01 .2460400000D+01 +2 25920200208202003092458887.4 .9299400000D+01 -.3077000000D-01 .6643573000D+03 .2400540000D+01 .1005500000D-01 .2982200000D+01 .2590824000D+01 .9413000000D+00 .4415500000D+01 .5194000000D+00 .1361400000D+01 .3730000000D-02 .9756300000D+02 .1059050000D+01 .4568000000D-02 .5071000000D+00 .2350556000D+01 .2342600000D+01 .6043000000D+01 .3303000000D+00 -.6274000000D+00 .1454400000D+00 .6706758000D+03 .2401960000D+01 .8578000000D-02 .2998400000D+01 .4156325000D+01 .2578600000D+01 .6059400000D+01 .2104400000D+01 +2 26020200309202004082458917.4 .8270400000D+01 -.8462000000D-01 .6596620000D+03 .1875170000D+01 .1240900000D-01 .2921300000D+01 .5308298000D+01 .3631400000D+01 .5896000000D+00 .1957000000D+00 .1459400000D+01 -.1222000000D-01 .1258634000D+03 .8330400000D+00 .5422000000D-02 .6047000000D+00 .5145281000D+01 .4973800000D+01 .2007700000D+01 .6680000000D-01 .3872200000D+01 .1092600000D+00 .6704971000D+03 .1928610000D+01 .1347400000D-01 .2940600000D+01 .5905490000D+00 .5310800000D+01 .2327500000D+01 .1772500000D+01 +2 26120200408202005082458947.4 .5549700000D+01 -.1104900000D+00 .6550622000D+03 .1096650000D+01 .1609300000D-01 .2922100000D+01 .1770263000D+01 .1026000000D+00 .3282000000D+01 .6201100000D+01 .1050400000D+01 -.2435000000D-01 .1455779000D+03 .5110500000D+00 .7085000000D-02 .6748000000D+00 .1646368000D+01 .1418300000D+01 .4476200000D+01 .6091600000D+01 .7141200000D+01 .6054000000D-01 .6709245000D+03 .1147190000D+01 .1718900000D-01 .2958100000D+01 .3335800000D+01 .1749300000D+01 .4879800000D+01 .1457900000D+01 +2 26220200508202006072458977.4 .2156300000D+01 -.1147100000D+00 .6532337000D+03 .1260100000D+00 .1749500000D-01 .2881600000D+01 .4556036000D+01 .2755200000D+01 .6022100000D+01 .5932800000D+01 .2945000000D+00 -.2681000000D-01 .1544852000D+03 .9228000000D-01 .7441000000D-02 .6788000000D+00 .4450486000D+01 .4726100000D+01 .9459000000D+00 .5828200000D+01 .8824200000D+01 .9810000000D-02 .6708558000D+03 .9088000000D-01 .1705200000D-01 .2992600000D+01 .6120767000D+01 .4615300000D+01 .1440000000D+01 .1204000000D+01 +2 26320200607202007072459007.4 -.1209900000D+01 -.1006600000D+00 .6539182000D+03 .9981000000D+00 .9018000000D-02 .2884800000D+01 .1103789000D+01 .2580800000D+01 .2753100000D+01 .5709200000D+01 -.5057000000D+00 -.1890000000D-01 .1509590000D+03 .4010500000D+00 .4874000000D-02 .6326000000D+00 .1000454000D+01 .3599700000D+01 .4150700000D+01 .5594600000D+01 .9024900000D+01 -.2916000000D-01 .6707717000D+03 .9706800000D+00 .1116200000D-01 .2983500000D+01 .2670181000D+01 .4227900000D+01 .4373500000D+01 .9998000000D+00 +2 26420200707202008062459037.4 -.4174000000D+01 -.8310000000D-01 .6570893000D+03 .1562520000D+01 .4884000000D-02 .2973200000D+01 .3975029000D+01 .5464100000D+01 .2018300000D+01 .5535400000D+01 -.1057500000D+01 -.1001000000D-01 .1365577000D+03 .6711700000D+00 .2224000000D-02 .5812000000D+00 .3859420000D+01 .3776000000D+00 .2792100000D+01 .5412100000D+01 .8230400000D+01 -.6316000000D-01 .6710144000D+03 .1617390000D+01 .5447000000D-02 .2989900000D+01 .5540670000D+01 .8437000000D+00 .3801300000D+01 .8083000000D+00 +2 26520200806202009052459067.4 -.6746700000D+01 -.5959000000D-01 .6608158000D+03 .1256160000D+01 .1684500000D-01 .3051300000D+01 .5691480000D+00 .2078400000D+01 .5209300000D+01 .5325700000D+01 -.1356300000D+01 -.3580000000D-02 .1188335000D+03 .5592100000D+00 .6889000000D-02 .5147000000D+00 .4312420000D+00 .3354600000D+01 .1619000000D+00 .5169300000D+01 .6406100000D+01 -.8725000000D-01 .6705874000D+03 .1260160000D+01 .1614000000D-01 .3087800000D+01 .2136010000D+01 .3699700000D+01 .5263000000D+00 .5873000000D+00 +2 26620200905202010052459097.4 -.8687600000D+01 -.2774000000D-01 .6622144000D+03 .2141200000D+00 .1869400000D-01 .3064500000D+01 .3416688000D+01 .4779300000D+01 .1724900000D+01 .5048500000D+01 -.1481300000D+01 -.3150000000D-02 .1084726000D+03 .1268100000D+00 .7952000000D-02 .5030000000D+00 .3263233000D+01 .6227500000D+01 .3080500000D+01 .4895400000D+01 .3698500000D+01 -.1180400000D+00 .6709601000D+03 .2335300000D+00 .1977700000D-01 .3158000000D+01 .4983610000D+01 .3224000000D+00 .3431700000D+01 .3219000000D+00 +2 26720201005202011042459127.4 -.9544200000D+01 .2374000000D-01 .6620496000D+03 .9334100000D+00 .1431600000D-01 .3072500000D+01 .6214728000D+01 .4560300000D+01 .4505500000D+01 .4715900000D+01 -.1579000000D+01 -.9800000000D-03 .1117662000D+03 .3583100000D+00 .6587000000D-02 .5553000000D+00 .6071254000D+01 .5901400000D+01 .5704000000D+01 .4594100000D+01 .9300000000D-02 -.1347000000D+00 .6706468000D+03 .9141100000D+00 .1586300000D-01 .3202400000D+01 .1498089000D+01 .6243500000D+01 .6066700000D+01 .2190000000D-01 +2 26820201104202012042459157.4 -.8742800000D+01 .8763000000D-01 .6588205000D+03 .1805710000D+01 .1079700000D-01 .3160100000D+01 .2683091000D+01 .1044200000D+01 .6193000000D+00 .4364600000D+01 -.1610300000D+01 .1086000000D-01 .1278440000D+03 .7484800000D+00 .5017000000D-02 .6779000000D+00 .2569708000D+01 .2317300000D+01 .1617900000D+01 .4269200000D+01 -.4144400000D+01 -.1205800000D+00 .6707947000D+03 .1884830000D+01 .9654000000D-02 .3185200000D+01 .4250486000D+01 .2692500000D+01 .2247200000D+01 .5938400000D+01 +2 26920201204202101032459187.4 -.5991200000D+01 .1387600000D+00 .6533864000D+03 .2391040000D+01 .7352000000D-02 .3171100000D+01 .5401105000D+01 .3749600000D+01 .2800400000D+01 .3969600000D+01 -.1277600000D+01 .2879000000D-01 .1523275000D+03 .1004800000D+01 .4433000000D-02 .8086000000D+00 .5322337000D+01 .4934600000D+01 .3656900000D+01 .3910900000D+01 -.7767900000D+01 -.6885000000D-01 .6710244000D+03 .2432470000D+01 .7207000000D-02 .3227400000D+01 .6844650000D+00 .5398900000D+01 .4601500000D+01 .5537400000D+01 +3 27020100101201002102455197.4 .2098900000D+01 -.4470000000D-02 .9917362000D+03 .3731420000D+01 .9487000000D-02 .9254000000D+00 .1346722000D+01 .5979200000D+01 .5027000000D+01 .3349400000D+01 .8415000000D+00 -.2300000000D-03 .4022787000D+03 .1604210000D+01 .6716000000D-02 .3878000000D+00 .1363393000D+01 .3306000000D+00 .5285200000D+01 .3366100000D+01 -.2744600000D+01 .3631000000D-01 .1070180200D+04 .3912620000D+01 .1144500000D-01 .9716000000D+00 .2919575000D+01 .1356200000D+01 .4622000000D+00 .4940200000D+01 +3 27120100210201003222455237.4 .1746600000D+01 .7070000000D-02 .9793948000D+03 .4224460000D+01 .7758000000D-02 .7638000000D+00 .4898435000D+01 .3258200000D+01 .1504100000D+01 .4259400000D+01 .7412000000D+00 .4660000000D-02 .4319498000D+03 .1818400000D+01 .7083000000D-02 .3489000000D+00 .4930210000D+01 .3736200000D+01 .1944900000D+01 .4296300000D+01 -.1906500000D+01 .2418000000D-01 .1070454400D+04 .4538830000D+01 .9064000000D-02 .8074000000D+00 .1913320000D+00 .4898100000D+01 .3123900000D+01 .5895600000D+01 +3 27220100322201005012455277.4 .1444900000D+01 .4460000000D-02 .9701482000D+03 .4123490000D+01 .9939000000D-02 .6309000000D+00 .2156390000D+01 .5349000000D+00 .4253800000D+01 .5170200000D+01 .6602000000D+00 .1960000000D-02 .4529869000D+03 .1763260000D+01 .6682000000D-02 .3005000000D+00 .2205957000D+01 .8389000000D+00 .4834600000D+01 .5228500000D+01 -.1031000000D+01 -.3090000000D-02 .1070244700D+04 .4465540000D+01 .1203500000D-01 .6462000000D+00 .3736269000D+01 .2157600000D+01 .5949400000D+01 .4919000000D+00 +3 27320100501201006102455317.4 .1305300000D+01 -.2870000000D-02 .9659559000D+03 .3485270000D+01 .1641900000D-01 .5628000000D+00 .5712044000D+01 .4112200000D+01 .1117700000D+01 .5890500000D+01 .5998000000D+00 -.1980000000D-02 .4625928000D+03 .1456270000D+01 .7921000000D-02 .2673000000D+00 .5780211000D+01 .4256400000D+01 .1403500000D+01 .5963800000D+01 -.6370000000D+00 -.2455000000D-01 .1069948200D+04 .3767190000D+01 .1827000000D-01 .5569000000D+00 .1012477000D+01 .5714000000D+01 .2782400000D+01 .1200800000D+01 +3 27420100610201007202455357.4 .1511700000D+01 -.1265000000D-01 .9654949000D+03 .2194480000D+01 .2496500000D-01 .6033000000D+00 .3023815000D+01 .1452500000D+01 .4610700000D+01 .4763000000D+00 .6892000000D+00 -.7280000000D-02 .4635900000D+03 .8586000000D+00 .1105200000D-01 .2895000000D+00 .3109654000D+01 .1477200000D+01 .4643900000D+01 .5597000000D+00 -.1109400000D+01 -.1599000000D-01 .1069872700D+04 .2316990000D+01 .2636400000D-01 .6506000000D+00 .4610479000D+01 .3020400000D+01 .6178300000D+01 .2067100000D+01 +3 27520100720201008292455397.4 .1569100000D+01 -.5150000000D-02 .9659540000D+03 .1140700000D+00 .2595500000D-01 .7532000000D+00 .4030950000D+00 .5451200000D+01 .2037600000D+01 .1558100000D+01 .6678000000D+00 -.2600000000D-02 .4623874000D+03 .6915000000D-01 .1078800000D-01 .3629000000D+00 .5024980000D+00 .1681000000D+01 .2077900000D+01 .1656800000D+01 -.1964100000D+01 .1470000000D-02 .1069527000D+04 .7640000000D-01 .2821900000D-01 .8499000000D+00 .1992427000D+01 .4312000000D+00 .3577400000D+01 .3106900000D+01 +3 27620100829201010082455437.4 .1495200000D+01 .6990000000D-02 .9656828000D+03 .2141520000D+01 .2910000000D-02 .8556000000D+00 .4152097000D+01 .5735800000D+01 .2710000000D+00 .2773600000D+01 .5970000000D+00 .3920000000D-02 .4637712000D+03 .1001010000D+01 .2116000000D-02 .4152000000D+00 .4255811000D+01 .5775900000D+01 .1303100000D+01 .2876400000D+01 -.2511300000D+01 .1760000000D-02 .1069554500D+04 .2320030000D+01 .3479000000D-02 .9828000000D+00 .5742691000D+01 .1032900000D+01 .1824600000D+01 .4314800000D+01 +3 27720101008201011172455477.4 .1293500000D+01 .2418000000D-01 .9654101000D+03 .2211630000D+01 .2555000000D-01 .1037700000D+01 .1671674000D+01 .3254900000D+01 .1082000000D+00 .4042400000D+01 .5178000000D+00 .1095000000D-01 .4642903000D+03 .9240000000D+00 .1188300000D-01 .5007000000D+00 .1768338000D+01 .3408000000D+01 .2375000000D+00 .4136900000D+01 -.2636900000D+01 -.1230000000D-01 .1069726700D+04 .2370950000D+01 .2775100000D-01 .1124700000D+01 .3260754000D+01 .4845600000D+01 .1690800000D+01 .5584600000D+01 +3 27820101117201012272455517.4 .1947300000D+01 .1087000000D-01 .9657706000D+03 .1886000000D-01 .2758700000D-01 .1106600000D+01 .5432889000D+01 .4425000000D+00 .3830800000D+01 .5286200000D+01 .8419000000D+00 .4670000000D-02 .4628531000D+03 .8580000000D-01 .1191500000D-01 .5345000000D+00 .5519007000D+01 .3981100000D+01 .3962500000D+01 .5368000000D+01 -.2517800000D+01 -.1198000000D-01 .1069537300D+04 .4446000000D-01 .3013300000D-01 .1201200000D+01 .7365930000D+00 .3560000000D+00 .5398900000D+01 .5506000000D+00 +3 27920101227201102052455557.4 .2790300000D+01 -.1930000000D-02 .9651459000D+03 .2219490000D+01 .1748500000D-01 .1111600000D+01 .2817371000D+01 .1261800000D+01 .9743000000D+00 .2080000000D+00 .1240500000D+01 -.1200000000D-03 .4634636000D+03 .1056960000D+01 .7776000000D-02 .5329000000D+00 .2899963000D+01 .1393400000D+01 .7870000000D+00 .2963000000D+00 -.2539400000D+01 .1666000000D-01 .1069684000D+04 .2417720000D+01 .1994100000D-01 .1217700000D+01 .4403474000D+01 .2851600000D+01 .2539500000D+01 .1780700000D+01 +3 28020110205201103172455597.4 .3279100000D+01 -.6770000000D-02 .9655764000D+03 .3580510000D+01 .1001300000D-01 .1083600000D+01 .1266550000D+00 .4867800000D+01 .4028600000D+01 .1320500000D+01 .1493700000D+01 -.3010000000D-02 .4625174000D+03 .1617400000D+01 .6899000000D-02 .5125000000D+00 .2150140000D+00 .4879900000D+01 .3511500000D+01 .1414900000D+01 -.2049700000D+01 .3658000000D-01 .1069699600D+04 .3941060000D+01 .1087400000D-01 .1233900000D+01 .1714059000D+01 .1459000000D+00 .5519100000D+01 .2905300000D+01 +3 28120110317201104262455637.4 .3140000000D+01 .7300000000D-03 .9705705000D+03 .4144990000D+01 .7013000000D-02 .1021600000D+01 .3679469000D+01 .2148900000D+01 .5204000000D+00 .2391300000D+01 .1414800000D+01 .1200000000D-03 .4535280000D+03 .1807680000D+01 .6988000000D-02 .4665000000D+00 .3780727000D+01 .1993600000D+01 .1564000000D+00 .2501000000D+01 -.1196500000D+01 .4101000000D-01 .1069564500D+04 .4548340000D+01 .9652000000D-02 .1159600000D+01 .5268553000D+01 .3696100000D+01 .1949700000D+01 .3950400000D+01 +3 28220110426201106052455677.4 .2689300000D+01 .2050000000D-02 .9800887000D+03 .4140310000D+01 .9462000000D-02 .8817000000D+00 .9392610000D+00 .5714300000D+01 .3235200000D+01 .3460400000D+01 .1178700000D+01 -.4600000000D-03 .4332222000D+03 .1738400000D+01 .7234000000D-02 .3802000000D+00 .1058542000D+01 .5371300000D+01 .3127100000D+01 .3596200000D+01 .8700000000D-01 .1386000000D-01 .1069370500D+04 .4473910000D+01 .1146000000D-01 .1009700000D+01 .2529392000D+01 .9518000000D+00 .4824900000D+01 .5043400000D+01 +3 28320110605201107152455717.4 .2225900000D+01 -.2780000000D-02 .9924971000D+03 .3613450000D+01 .1623300000D-01 .7111000000D+00 .4496245000D+01 .3004000000D+01 .5940000000D-01 .4449800000D+01 .9645000000D+00 -.4050000000D-02 .4045042000D+03 .1457280000D+01 .7988000000D-02 .2754000000D+00 .4637339000D+01 .2472000000D+01 .6047100000D+01 .4635900000D+01 .9683000000D+00 -.1320000000D-01 .1069162100D+04 .3829020000D+01 .1700000000D-01 .8387000000D+00 .6086713000D+01 .4501500000D+01 .1588100000D+01 .6040500000D+01 +3 28420110715201108242455757.4 .2162000000D+01 -.1829000000D-01 .1003898000D+04 .2349730000D+01 .2445300000D-01 .6178000000D+00 .1806467000D+01 .3307000000D+00 .3502000000D+01 .5475300000D+01 .8509000000D+00 -.8550000000D-02 .3758213000D+03 .9082200000D+00 .1004700000D-01 .2259000000D+00 .1970897000D+01 .5893000000D+01 .2863200000D+01 .5636400000D+01 .1078700000D+01 -.2184000000D-01 .1069059400D+04 .2497580000D+01 .2645700000D-01 .6667000000D+00 .3397382000D+01 .1800400000D+01 .4955700000D+01 .7526000000D+00 +3 28520110824201110032455797.4 .2072200000D+01 -.1545000000D-01 .1009618800D+04 .2667900000D+00 .2740400000D-01 .6014000000D+00 .5464449000D+01 .4091000000D+01 .8774000000D+00 .3980000000D-01 .7551000000D+00 -.6050000000D-02 .3604048000D+03 .7590000000D-01 .1062100000D-01 .2145000000D+00 .5646678000D+01 .2525100000D+01 .1769000000D+00 .2072000000D+00 .3302000000D+00 -.7230000000D-02 .1068357700D+04 .2901300000D+00 .2986400000D-01 .6210000000D+00 .7726200000D+00 .5571800000D+01 .2375000000D+01 .1700600000D+01 +3 28620111003201111122455837.4 .1786600000D+01 .5000000000D-02 .1006978900D+04 .2102170000D+01 .4936000000D-02 .6122000000D+00 .2925129000D+01 .4602900000D+01 .5028100000D+01 .9429000000D+00 .5825000000D+00 .4650000000D-02 .3689343000D+03 .8637700000D+00 .1644000000D-02 .2322000000D+00 .3108065000D+01 .3978800000D+01 .4815400000D+01 .1178500000D+01 -.4107000000D+00 -.5420000000D-02 .1068330600D+04 .2257000000D+01 .5655000000D-02 .6309000000D+00 .4517155000D+01 .6079200000D+01 .3911000000D+00 .2587000000D+01 +3 28720111112201112222455877.4 .1585100000D+01 .2652000000D-01 .9983489000D+03 .2362770000D+01 .2558500000D-01 .7887000000D+00 .4433030000D+00 .2133000000D+01 .5261200000D+01 .2050500000D+01 .5664000000D+00 .1053000000D-01 .3916180000D+03 .8996300000D+00 .1073600000D-01 .3115000000D+00 .6098870000D+00 .1564400000D+01 .4752900000D+01 .2194700000D+01 -.1016400000D+01 -.7760000000D-02 .1068695600D+04 .2523660000D+01 .2797800000D-01 .8147000000D+00 .2035992000D+01 .3617400000D+01 .4571000000D+00 .3717400000D+01 +3 28820111222201201312455917.4 .2068700000D+01 .1989000000D-01 .9928087000D+03 .1377400000D+00 .2785400000D-01 .9124000000D+00 .4208880000D+01 .5743800000D+01 .2696500000D+01 .3196400000D+01 .7788000000D+00 .6830000000D-02 .4033566000D+03 .8900000000D-01 .1130300000D-01 .3654000000D+00 .4358999000D+01 .3391900000D+01 .2143300000D+01 .3340500000D+01 -.9939000000D+00 -.1629000000D-01 .1068810200D+04 .1419400000D+00 .3059900000D-01 .9915000000D+00 .5800504000D+01 .9323000000D+00 .4203900000D+01 .4864400000D+01 +3 28920120131201203112455957.4 .3045600000D+01 .4000000000D-04 .9960190000D+03 .2120490000D+01 .1887700000D-01 .1020700000D+01 .1598876000D+01 .1448000000D+00 .6135600000D+01 .4400900000D+01 .1162300000D+01 -.2880000000D-02 .3948026000D+03 .9535300000D+00 .8081000000D-02 .3912000000D+00 .1744506000D+01 .5957900000D+01 .5260400000D+01 .4557900000D+01 -.1027500000D+01 .5370000000D-02 .1068971600D+04 .2326610000D+01 .1922300000D-01 .1083600000D+01 .3189424000D+01 .1634400000D+01 .1349000000D+01 .5998900000D+01 +3 29020120311201204202455997.4 .3661500000D+01 -.7260000000D-02 .1006898100D+04 .3545290000D+01 .1106900000D-01 .1174300000D+01 .5198097000D+01 .3735700000D+01 .2942600000D+01 .5512500000D+01 .1268000000D+01 -.4490000000D-02 .3666006000D+03 .1496720000D+01 .7360000000D-02 .3927000000D+00 .5353116000D+01 .3091300000D+01 .1765300000D+01 .5676500000D+01 -.7143000000D+00 .2971000000D-01 .1068786900D+04 .3832750000D+01 .1110700000D-01 .1207400000D+01 .5040140000D+00 .5226800000D+01 .4298900000D+01 .8244000000D+00 +3 29120120420201205302456037.4 .3748900000D+01 -.6660000000D-02 .1022811800D+04 .4211530000D+01 .8446000000D-02 .1239900000D+01 .2475786000D+01 .1003700000D+01 .5646800000D+01 .3154000000D+00 .1172900000D+01 -.5860000000D-02 .3207110000D+03 .1739640000D+01 .7835000000D-02 .3546000000D+00 .2654436000D+01 .1654000000D+00 .4716700000D+01 .4872000000D+00 .5500000000D-02 .4507000000D-01 .1068851600D+04 .4437360000D+01 .9336000000D-02 .1263400000D+01 .4062278000D+01 .2492800000D+01 .8185000000D+00 .1905700000D+01 +3 29220120530201207092456077.4 .3177200000D+01 -.2900000000D-03 .1039474500D+04 .4241450000D+01 .1093900000D-01 .1218600000D+01 .6025872000D+01 .4545600000D+01 .2212000000D+01 .1447200000D+01 .8291000000D+00 -.2690000000D-02 .2616500000D+03 .1756370000D+01 .7373000000D-02 .2710000000D+00 .6247045000D+01 .3501100000D+01 .1447800000D+01 .1699600000D+01 .1261500000D+01 .2716000000D-01 .1069061100D+04 .4399630000D+01 .1034800000D-01 .1182800000D+01 .1326163000D+01 .6029600000D+01 .3646700000D+01 .3010700000D+01 +3 29320120709201208182456117.4 .2512500000D+01 -.4950000000D-02 .1053241500D+04 .3707020000D+01 .1619900000D-01 .1161000000D+01 .3304538000D+01 .1803200000D+01 .5234500000D+01 .2553100000D+01 .6052000000D+00 -.5460000000D-02 .1987576000D+03 .1564070000D+01 .7365000000D-02 .1799000000D+00 .3597775000D+01 .5790000000D+00 .4242900000D+01 .2909700000D+01 .2388600000D+01 .2200000000D-03 .1069119800D+04 .3842690000D+01 .1674100000D-01 .1108000000D+01 .4885000000D+01 .3296900000D+01 .3699000000D+00 .4105900000D+01 +3 29420120818201209272456157.4 .2067500000D+01 -.1869000000D-01 .1062004400D+04 .2461000000D+01 .2496500000D-01 .1010700000D+01 .6170450000D+00 .5368100000D+01 .2248200000D+01 .3722000000D+01 .3901000000D+00 -.3290000000D-02 .1463535000D+03 .1079010000D+01 .1073800000D-01 .1256000000D+00 .1020495000D+01 .4013600000D+01 .9438000000D+00 .4091300000D+01 .2980800000D+01 -.2186000000D-01 .1068949500D+04 .2564690000D+01 .2649300000D-01 .9973000000D+00 .2194925000D+01 .6090000000D+00 .3777500000D+01 .5293200000D+01 +3 29520120927201211062456197.4 .1837100000D+01 -.2224000000D-01 .1065056600D+04 .3428100000D+00 .2910500000D-01 .8812000000D+00 .4274457000D+01 .2786000000D+01 .5907900000D+01 .4887700000D+01 .3112000000D+00 -.2410000000D-02 .1209696000D+03 .1795100000D+00 .1229800000D-01 .1021000000D+00 .4773832000D+01 .1284800000D+01 .4534300000D+01 .5331900000D+01 .2540400000D+01 -.1430000000D-01 .1068523300D+04 .3461700000D+00 .2969100000D-01 .8825000000D+00 .5850659000D+01 .4380000000D+01 .1175300000D+01 .1511000000D+00 +3 29620121106201212162456237.4 .1394600000D+01 .2920000000D-02 .1063591600D+04 .2140120000D+01 .6769000000D-02 .6726000000D+00 .1733111000D+01 .3350100000D+01 .3858200000D+01 .5954900000D+01 .2377000000D+00 .2770000000D-02 .1328539000D+03 .8874900000D+00 .2872000000D-02 .9790000000D-01 .2187199000D+01 .2004800000D+01 .2698600000D+01 .2092000000D+00 .1646600000D+01 -.3160000000D-02 .1068835500D+04 .2232910000D+01 .5898000000D-02 .6828000000D+00 .3309858000D+01 .4880100000D+01 .5379600000D+01 .1194600000D+01 +3 29720121216201301252456277.4 .1260600000D+01 .2059000000D-01 .1058217900D+04 .2472200000D+01 .2591200000D-01 .6196000000D+00 .5533217000D+01 .9046000000D+00 .4013100000D+01 .7146000000D+00 .2727000000D+00 .2910000000D-02 .1711621000D+03 .1020580000D+01 .1067900000D-01 .1111000000D+00 .5874335000D+01 .5887500000D+01 .2786800000D+01 .9295000000D+00 .9297000000D+00 -.1910000000D-02 .1069155400D+04 .2573000000D+01 .2738800000D-01 .6595000000D+00 .8286820000D+00 .2422900000D+01 .5553600000D+01 .2196300000D+01 +3 29820130125201303062456317.4 .1424700000D+01 .2433000000D-01 .1053613800D+04 .2415800000D+00 .2909400000D-01 .6732000000D+00 .3016132000D+01 .4551700000D+01 .1485400000D+01 .1623900000D+01 .3115000000D+00 .2320000000D-02 .1947780000D+03 .1382300000D+00 .1219400000D-01 .1245000000D+00 .3301133000D+01 .2677400000D+01 .2476000000D+00 .1871100000D+01 .8099000000D+00 -.1634000000D-01 .1068988400D+04 .2153600000D+00 .2947700000D-01 .6944000000D+00 .4596041000D+01 .6121000000D+01 .3010500000D+01 .3080800000D+01 +3 29920130306201304152456357.4 .2284700000D+01 .3150000000D-02 .1056177900D+04 .2094780000D+01 .1904300000D-01 .7737000000D+00 .4105330000D+00 .5213200000D+01 .4916200000D+01 .2528700000D+01 .4120000000D+00 -.2940000000D-02 .1800953000D+03 .8891900000D+00 .8795000000D-02 .1192000000D+00 .7037100000D+00 .4072700000D+01 .3437800000D+01 .2923200000D+01 .7791000000D+00 -.1050000000D-01 .1068985300D+04 .2189210000D+01 .1880700000D-01 .7934000000D+00 .1989353000D+01 .4421000000D+00 .1457000000D+00 .4096800000D+01 +3 30020130415201305252456397.4 .2963500000D+01 -.7590000000D-02 .1063164900D+04 .3552420000D+01 .1141500000D-01 .9880000000D+00 .4016591000D+01 .2504800000D+01 .1620300000D+01 .3557300000D+01 .3798000000D+00 -.4480000000D-02 .1328387000D+03 .1522750000D+01 .7495000000D-02 .9080000000D-01 .4398882000D+01 .1207600000D+01 .7500000000D-02 .4025000000D+01 .7200000000D+00 .1709000000D-01 .1068952000D+04 .3632630000D+01 .1140800000D-01 .1017300000D+01 .5592651000D+01 .4036400000D+01 .3186700000D+01 .5116200000D+01 +3 30120130525201307042456437.4 .3218400000D+01 -.1361000000D-01 .1069015300D+04 .4224740000D+01 .1025600000D-01 .1166100000D+01 .1301443000D+01 .6038300000D+01 .4324300000D+01 .4587400000D+01 .1863000000D+00 -.3760000000D-02 .6999030000D+02 .1831270000D+01 .7378000000D-02 .4640000000D-01 .2034854000D+01 .4594400000D+01 .2923200000D+01 .5838200000D+01 .1129300000D+01 .3809000000D-01 .1069355000D+04 .4270210000D+01 .8277000000D-02 .1171700000D+01 .2874125000D+01 .1302000000D+01 .5970800000D+01 .6158800000D+01 +3 30220130704201308132456477.4 .2650400000D+01 -.3470000000D-02 .1070080500D+04 .4193900000D+01 .1101400000D-01 .1200200000D+01 .4856936000D+01 .3268000000D+01 .1010400000D+01 .5646700000D+01 .1430000000D-01 -.3090000000D-02 .5184260000D+02 .1862980000D+01 .7141000000D-02 .9700000000D-01 .7130620000D+00 .1691900000D+01 .5831200000D+01 .1874700000D+01 .2015300000D+01 .3525000000D-01 .1069665300D+04 .4293970000D+01 .1011100000D-01 .1246400000D+01 .1436400000D+00 .4847100000D+01 .2425700000D+01 .9837000000D+00 +3 30320130813201309222456517.4 .1905900000D+01 -.5960000000D-02 .1065638600D+04 .3666980000D+01 .1611500000D-01 .1262300000D+01 .2139183000D+01 .5050000000D+00 .3905900000D+01 .5017000000D+00 -.7250000000D-01 -.1810000000D-02 .1102900000D+03 .1618340000D+01 .7717000000D-02 .1687000000D+00 .4909554000D+01 .5094600000D+01 .2356000000D+01 .3387700000D+01 .3186400000D+01 .9510000000D-02 .1069655200D+04 .3752100000D+01 .1673100000D-01 .1310000000D+01 .3706545000D+01 .2126300000D+01 .5498300000D+01 .2109700000D+01 +3 30420130922201311012456557.4 .1225800000D+01 -.1351000000D-01 .1058674500D+04 .2436290000D+01 .2592900000D-01 .1231200000D+01 .5737169000D+01 .4071300000D+01 .9454000000D+00 .1711300000D+01 -.5560000000D-01 .1120000000D-02 .1635008000D+03 .1066170000D+01 .1105700000D-01 .2056000000D+00 .2370817000D+01 .2297200000D+01 .5431600000D+01 .4651100000D+01 .4008600000D+01 -.1702000000D-01 .1069712300D+04 .2477620000D+01 .2634800000D-01 .1264200000D+01 .1019725000D+01 .5723000000D+01 .2605700000D+01 .3307700000D+01 +3 30520131101201312112456597.4 .9464000000D+00 -.2264000000D-01 .1054046300D+04 .2659700000D+00 .2877100000D-01 .1181800000D+01 .3113333000D+01 .1531900000D+01 .4639500000D+01 .2974000000D+01 -.5290000000D-01 .4090000000D-02 .1883402000D+03 .1495100000D+00 .1256200000D-01 .2038000000D+00 .6073985000D+01 .5500000000D-01 .2794100000D+01 .5933500000D+01 .3939500000D+01 -.1635000000D-01 .1069787100D+04 .2273500000D+00 .2850400000D-01 .1230200000D+01 .4678400000D+01 .3186200000D+01 .6276700000D+01 .4544300000D+01 +3 30620131211201401202456637.4 .6166000000D+00 -.6300000000D-02 .1056364900D+04 .2204360000D+01 .5882000000D-02 .1054400000D+01 .5744860000D+00 .2063500000D+01 .2769100000D+01 .4180500000D+01 .4600000000D-01 -.3300000000D-03 .1747711000D+03 .9465100000D+00 .3632000000D-02 .1684000000D+00 .3526506000D+01 .1808000000D+00 .1096800000D+01 .7396000000D+00 .3089900000D+01 .5310000000D-02 .1069846900D+04 .2243390000D+01 .5357000000D-02 .1031600000D+01 .2140530000D+01 .3714000000D+01 .4184300000D+01 .5792300000D+01 +3 30720140120201403012456677.4 .3839000000D+00 .8960000000D-02 .1062590200D+04 .2463370000D+01 .2655000000D-01 .9092000000D+00 .4374903000D+01 .5909000000D+01 .2745700000D+01 .5454800000D+01 .3630000000D-01 -.1070000000D-02 .1340662000D+03 .1085320000D+01 .1111300000D-01 .9460000000D-01 .9846460000D+00 .4138500000D+01 .9653000000D+00 .2084900000D+01 .2616600000D+01 .1000000000D-02 .1070101600D+04 .2469080000D+01 .2612200000D-01 .9053000000D+00 .5942341000D+01 .1252200000D+01 .4379900000D+01 .8095000000D+00 +3 30820140301201404102456717.4 .2139000000D+00 .1835000000D-01 .1065361100D+04 .2225600000D+00 .2843800000D-01 .7583000000D+00 .1856330000D+01 .3329200000D+01 .2202000000D+00 .2370000000D+00 .6910000000D-01 -.3380000000D-02 .1085250000D+03 .1322000000D+00 .1239600000D-01 .7760000000D-01 .4688945000D+01 .1427600000D+01 .4762300000D+01 .3142400000D+01 .2399700000D+01 -.1544000000D-01 .1069695100D+04 .2100900000D+00 .2842100000D-01 .7490000000D+00 .3424350000D+01 .4886200000D+01 .1825000000D+01 .1898600000D+01 +3 30920140410201405202456757.4 .5973000000D+00 .6060000000D-02 .1063684500D+04 .2068600000D+01 .1770300000D-01 .6339000000D+00 .5534651000D+01 .3930300000D+01 .3636200000D+01 .1130500000D+01 -.2100000000D-01 -.1250000000D-02 .1228174000D+03 .8765600000D+00 .8194000000D-02 .8940000000D-01 .2133123000D+01 .2229900000D+01 .1712100000D+01 .3951500000D+01 .2288300000D+01 -.2385000000D-01 .1069602400D+04 .2092660000D+01 .1827400000D-01 .6378000000D+00 .8189940000D+00 .5559100000D+01 .5264900000D+01 .2759000000D+01 +3 31020140520201406292456797.4 .1213600000D+01 -.7950000000D-02 .1057035600D+04 .3458280000D+01 .1069500000D-01 .7181000000D+00 .2860342000D+01 .1231800000D+01 .3139000000D+00 .1931200000D+01 -.1179000000D+00 -.1550000000D-02 .1692928000D+03 .1487210000D+01 .6342000000D-02 .1424000000D+00 .5832578000D+01 .5704300000D+01 .4461500000D+01 .4984200000D+01 .1865000000D+01 -.4500000000D-03 .1069954400D+04 .3478920000D+01 .1072600000D-01 .7135000000D+00 .4426765000D+01 .2862900000D+01 .2120100000D+01 .3518900000D+01 +3 31120140629201408082456837.4 .1503900000D+01 -.1237000000D-01 .1045246300D+04 .4038980000D+01 .8934000000D-02 .8506000000D+00 .1478110000D+00 .4776000000D+01 .3120800000D+01 .2780500000D+01 -.3173000000D+00 .2310000000D-02 .2306631000D+03 .1726570000D+01 .6674000000D-02 .2083000000D+00 .3185398000D+01 .2834100000D+01 .1050400000D+01 .5838000000D+01 .1787100000D+01 .2215000000D-01 .1070212800D+04 .4143330000D+01 .7614000000D-02 .8524000000D+00 .1714010000D+01 .1401000000D+00 .4762700000D+01 .4335300000D+01 +3 31220140808201409172456877.4 .1256200000D+01 -.5020000000D-02 .1030268900D+04 .4025640000D+01 .9519000000D-02 .9568000000D+00 .3705597000D+01 .2022400000D+01 .5861900000D+01 .3764300000D+01 -.3101000000D+00 -.4800000000D-03 .2915239000D+03 .1688720000D+01 .6406000000D-02 .2992000000D+00 .5022370000D+00 .6220500000D+01 .4015200000D+01 .5661000000D+00 .2104100000D+01 .3463000000D-01 .1070249500D+04 .4163280000D+01 .1021200000D-01 .9928000000D+00 .5272081000D+01 .3697400000D+01 .1277300000D+01 .5265400000D+01 +3 31320140917201410272456917.4 .6297000000D+00 -.6400000000D-03 .1014803000D+04 .3476310000D+01 .1629100000D-01 .1103200000D+01 .9893630000D+00 .5581200000D+01 .2620300000D+01 .4853700000D+01 -.1952000000D+00 -.4000000000D-04 .3413028000D+03 .1432470000D+01 .7248000000D-02 .3974000000D+00 .4098322000D+01 .3344000000D+01 .5091000000D+00 .1700300000D+01 .3057000000D+01 .1508000000D-01 .1070366600D+04 .3593070000D+01 .1661900000D-01 .1161700000D+01 .2556762000D+01 .9755000000D+00 .4326100000D+01 .8540000000D-01 +3 31420141027201412062456957.4 .4740000000D-01 -.4580000000D-02 .1002950300D+04 .2229110000D+01 .2602300000D-01 .1166300000D+01 .4590118000D+01 .2902700000D+01 .6059100000D+01 .6018500000D+01 .5500000000D-02 .1000000000D-02 .3741298000D+03 .8919600000D+00 .1095500000D-01 .4434000000D+00 .1436618000D+01 .5698000000D+00 .3654400000D+01 .2870200000D+01 .3918600000D+01 -.8350000000D-02 .1070405500D+04 .2278560000D+01 .2652200000D-01 .1240000000D+01 .6159148000D+01 .4573300000D+01 .1442100000D+01 .1266700000D+01 +3 31520141206201501152456997.4 -.1663000000D+00 -.1640000000D-01 .9977276000D+03 .4586000000D-01 .2613700000D-01 .1253400000D+01 .1971464000D+01 .9810000000D+00 .3496000000D+01 .9950000000D+00 .6370000000D-01 .6150000000D-02 .3868052000D+03 .1002500000D+00 .1117000000D-01 .4805000000D+00 .5114244000D+01 .6106200000D+01 .1131300000D+01 .4139000000D+01 .4240800000D+01 -.1456000000D-01 .1070470100D+04 .8490000000D-02 .2739300000D-01 .1295200000D+01 .3542488000D+01 .2010100000D+01 .5133000000D+01 .2546900000D+01 +3 31620150115201502242457037.4 -.1836000000D+00 -.1921000000D-01 .1001368300D+04 .2221420000D+01 .3018000000D-02 .1208400000D+01 .5722587000D+01 .9121000000D+00 .1834400000D+01 .2265200000D+01 .9970000000D-01 .4970000000D-02 .3777718000D+03 .9899100000D+00 .2921000000D-02 .4520000000D+00 .2586140000D+01 .4762800000D+01 .3670000000D-01 .5416500000D+01 .3728900000D+01 .9190000000D-02 .1070295100D+04 .2330920000D+01 .3606000000D-02 .1340300000D+01 .1010972000D+01 .2578400000D+01 .3509900000D+01 .3808300000D+01 +3 31720150224201504052457077.4 -.6326000000D+00 -.8500000000D-03 .1010797400D+04 .2244710000D+01 .2530200000D-01 .1147300000D+01 .3241070000D+01 .4735000000D+01 .1593100000D+01 .3648400000D+01 .2005000000D+00 .9700000000D-03 .3531504000D+03 .9664400000D+00 .1107700000D-01 .3836000000D+00 .9907900000D-01 .2465700000D+01 .5536500000D+01 .5088000000D+00 .3467700000D+01 .6200000000D-02 .1070390700D+04 .2326860000D+01 .2627000000D-01 .1225100000D+01 .4811968000D+01 .1118000000D+00 .3233700000D+01 .5166800000D+01 +3 31820150405201505152457117.4 -.1075100000D+01 .1045000000D-01 .1015753700D+04 .1012300000D+00 .2612300000D-01 .1029900000D+01 .7183660000D+00 .2073300000D+01 .5310100000D+01 .4879300000D+01 .3612000000D+00 -.3300000000D-02 .3376395000D+03 .4590000000D-01 .1110700000D-01 .3445000000D+00 .3852075000D+01 .5175000000D+00 .3042100000D+01 .1736200000D+01 .3336200000D+01 -.1236000000D-01 .1070215500D+04 .1102600000D+00 .2748100000D-01 .1120400000D+01 .2288347000D+01 .3617300000D+01 .6784000000D+00 .1189000000D+00 +3 31920150515201506242457157.4 -.1182000000D+01 .6900000000D-02 .1012004600D+04 .2030840000D+01 .1573200000D-01 .8712000000D+00 .4394081000D+01 .2744800000D+01 .2453000000D+01 .5995900000D+01 .4123000000D+00 -.1530000000D-02 .3479913000D+03 .8643100000D+00 .6953000000D-02 .3132000000D+00 .1245347000D+01 .4412000000D+00 .6250000000D+01 .2832300000D+01 .3183700000D+01 -.3124000000D-01 .1070139200D+04 .2083430000D+01 .1740900000D-01 .9175000000D+00 .5963858000D+01 .4412200000D+01 .4145800000D+01 .1206000000D+01 +3 32020150624201508032457197.4 -.7852000000D+00 -.8210000000D-02 .1001753500D+04 .3254220000D+01 .9522000000D-02 .7568000000D+00 .1718779000D+01 .6100000000D-01 .5581200000D+01 .6325000000D+00 .2984000000D+00 .3380000000D-02 .3765474000D+03 .1390200000D+01 .5972000000D-02 .2993000000D+00 .4862885000D+01 .3958900000D+01 .2754500000D+01 .3799800000D+01 .2566000000D+01 -.2055000000D-01 .1070391200D+04 .3435600000D+01 .9708000000D-02 .8155000000D+00 .3290018000D+01 .1721500000D+01 .9727000000D+00 .2193900000D+01 +3 32120150803201509122457237.4 -.5338000000D+00 -.8110000000D-02 .9890560000D+03 .3802360000D+01 .6299000000D-02 .6281000000D+00 .5289613000D+01 .3632100000D+01 .1986300000D+01 .1392000000D+01 .2057000000D+00 .3860000000D-02 .4092545000D+03 .1616640000D+01 .5750000000D-02 .2690000000D+00 .2165117000D+01 .1102800000D+01 .5665600000D+01 .4561100000D+01 .1882000000D+01 .3180000000D-02 .1070197800D+04 .4058570000D+01 .8042000000D-02 .7315000000D+00 .5799880000D+00 .5295900000D+01 .3600500000D+01 .2970800000D+01 +3 32220150912201510222457277.4 -.4479000000D+00 -.2280000000D-02 .9777304000D+03 .3805890000D+01 .9093000000D-02 .6384000000D+00 .2565152000D+01 .9190000000D+00 .4584700000D+01 .2102000000D+01 .1759000000D+00 .5600000000D-03 .4362778000D+03 .1610940000D+01 .5671000000D-02 .2927000000D+00 .5740613000D+01 .4511800000D+01 .2188300000D+01 .5279000000D+01 .1562200000D+01 .2544000000D-01 .1070234000D+04 .4055440000D+01 .1017800000D-01 .7008000000D+00 .4141554000D+01 .2566300000D+01 .9030000000D-01 .3721200000D+01 +3 32320151022201512012457317.4 -.7727000000D+00 .8570000000D-02 .9700599000D+03 .3219120000D+01 .1641200000D-01 .7750000000D+00 .6134157000D+01 .4509900000D+01 .1511100000D+01 .3002100000D+01 .3229000000D+00 -.4960000000D-02 .4532676000D+03 .1343050000D+01 .7718000000D-02 .3658000000D+00 .3043767000D+01 .1675800000D+01 .5059300000D+01 .6202300000D+01 .2016900000D+01 .1826000000D-01 .1070386000D+04 .3431840000D+01 .1714700000D-01 .8443000000D+00 .1430860000D+01 .6125300000D+01 .3137100000D+01 .4672700000D+01 +3 32420151201201601102457357.4 -.1027200000D+01 .4500000000D-02 .9664053000D+03 .1917340000D+01 .2526200000D-01 .8929000000D+00 .3457272000D+01 .1860300000D+01 .5014400000D+01 .4057000000D+01 .4051000000D+00 -.2360000000D-02 .4607524000D+03 .7498200000D+00 .1120700000D-01 .4259000000D+00 .3829450000D+00 .5219000000D+01 .2066700000D+01 .9920000000D+00 .2798600000D+01 .1150000000D-02 .1070151200D+04 .2052230000D+01 .2770300000D-01 .9992000000D+00 .5040579000D+01 .3444800000D+01 .3022000000D+00 .5690700000D+01 +3 32520160110201602192457397.4 -.1078900000D+01 -.8900000000D-02 .9657185000D+03 .2481400000D+00 .2318600000D-01 .1036200000D+01 .8482460000D+00 .2352600000D+01 .2443000000D+01 .5283800000D+01 .3992000000D+00 .4280000000D-02 .4626105000D+03 .2167300000D+00 .9608000000D-02 .4933000000D+00 .4068734000D+01 .5550700000D+01 .5835100000D+01 .2225200000D+01 .3398000000D+01 -.6390000000D-02 .1069729900D+04 .2782400000D+00 .2584400000D-01 .1158200000D+01 .2434060000D+01 .3925000000D+01 .4051500000D+01 .6306000000D+00 +3 32620160219201603302457437.4 -.8968000000D+00 -.2435000000D-01 .9666149000D+03 .2244540000D+01 .2211000000D-02 .1204100000D+01 .4607745000D+01 .6161200000D+01 .2158100000D+01 .2731000000D+00 .3105000000D+00 .1091000000D-01 .4610452000D+03 .1038240000D+01 .2705000000D-02 .5689000000D+00 .1547923000D+01 .3234800000D+01 .5571100000D+01 .3496400000D+01 .3468700000D+01 .7590000000D-02 .1069754100D+04 .2448460000D+01 .3459000000D-02 .1302900000D+01 .6193843000D+01 .1478700000D+01 .3695400000D+01 .1887000000D+01 +3 32720160330201605092457477.4 -.1374500000D+01 -.8330000000D-02 .9693957000D+03 .1970360000D+01 .2393600000D-01 .1195000000D+01 .2125941000D+01 .3674700000D+01 .5330000000D+00 .1621600000D+01 .5275000000D+00 .4140000000D-02 .4552327000D+03 .8266900000D+00 .1098200000D-01 .5531000000D+00 .5342528000D+01 .8814000000D+00 .3984400000D+01 .4826900000D+01 .3337500000D+01 .1308000000D-01 .1069993900D+04 .2141910000D+01 .2680400000D-01 .1282600000D+01 .3710054000D+01 .5291600000D+01 .2137400000D+01 .3232700000D+01 +3 32820160509201606182457517.4 -.1997500000D+01 .3670000000D-02 .9709905000D+03 .7511000000D-01 .2382300000D-01 .1203600000D+01 .5879621000D+01 .4619000000D+01 .4220000000D+01 .2891100000D+01 .8251000000D+00 -.9300000000D-03 .4509019000D+03 .1022300000D+00 .1019200000D-01 .5571000000D+00 .2804355000D+01 .1371000000D+01 .1392800000D+01 .6096200000D+01 .3362800000D+01 -.4810000000D-02 .1070039300D+04 .8119000000D-01 .2634600000D-01 .1289000000D+01 .1178893000D+01 .6022500000D+01 .5861300000D+01 .4500700000D+01 +3 32920160618201607282457557.4 -.2451900000D+01 .4830000000D-02 .9691758000D+03 .1990710000D+01 .1515200000D-01 .1121700000D+01 .3266832000D+01 .1680900000D+01 .1402800000D+01 .4032000000D+01 .1069200000D+01 -.1530000000D-02 .4542498000D+03 .9319100000D+00 .6698000000D-02 .5299000000D+00 .1892900000D+00 .5119200000D+01 .4579000000D+01 .9514000000D+00 .3265100000D+01 -.2930000000D-01 .1069993500D+04 .2186190000D+01 .1614100000D-01 .1222000000D+01 .4849252000D+01 .3287600000D+01 .3024500000D+01 .5671500000D+01 +3 33020160728201609062457597.4 -.2401000000D+01 -.7210000000D-02 .9663656000D+03 .3153230000D+01 .8504000000D-02 .1044700000D+01 .5894350000D+00 .5283600000D+01 .4632500000D+01 .5165500000D+01 .1058400000D+01 .4840000000D-02 .4610972000D+03 .1416430000D+01 .5378000000D-02 .5016000000D+00 .3800558000D+01 .2342700000D+01 .1172200000D+01 .2100000000D+01 .2706400000D+01 -.3667000000D-01 .1069883000D+04 .3468850000D+01 .9634000000D-02 .1141500000D+01 .2173343000D+01 .6086000000D+00 .6058600000D+01 .4815000000D+00 +3 33120160906201610162457637.4 -.2217100000D+01 -.7540000000D-02 .9652529000D+03 .3703240000D+01 .5558000000D-02 .9036000000D+00 .4159979000D+01 .2591600000D+01 .8845000000D+00 .6162300000D+01 .1011900000D+01 .3440000000D-02 .4638903000D+03 .1627720000D+01 .5437000000D-02 .4313000000D+00 .1099365000D+01 .5791900000D+01 .3954300000D+01 .3108400000D+01 .1577400000D+01 -.1575000000D-01 .1069634600D+04 .4026960000D+01 .8123000000D-02 .9495000000D+00 .5745811000D+01 .4179300000D+01 .2496900000D+01 .1470600000D+01 +3 33220161016201611252457677.4 -.1976000000D+01 -.1490000000D-02 .9679763000D+03 .3712860000D+01 .9665000000D-02 .7081000000D+00 .1437138000D+01 .6176900000D+01 .3508200000D+01 .8080000000D+00 .9088000000D+00 -.6400000000D-03 .4586269000D+03 .1585730000D+01 .6334000000D-02 .3288000000D+00 .4675146000D+01 .2935900000D+01 .5150000000D+00 .4053900000D+01 .6711000000D+00 .9610000000D-02 .1069718100D+04 .4001600000D+01 .1051300000D-01 .7868000000D+00 .3025294000D+01 .1444800000D+01 .5147500000D+01 .2385000000D+01 +3 33320161125201701042457717.4 -.2026800000D+01 .1592000000D-01 .9741645000D+03 .3051240000D+01 .1675000000D-01 .6445000000D+00 .5010541000D+01 .3489100000D+01 .4746000000D+00 .1755900000D+01 .9030000000D+00 -.9130000000D-02 .4461674000D+03 .1245580000D+01 .7871000000D-02 .2961000000D+00 .1983037000D+01 .8580000000D-01 .3484000000D+01 .5011600000D+01 .3963000000D+00 .2002000000D-01 .1069684400D+04 .3310010000D+01 .1885400000D-01 .7069000000D+00 .3179810000D+00 .5008000000D+01 .1976700000D+01 .3232900000D+01 +3 33420170104201702132457757.4 -.1962200000D+01 .1483000000D-01 .9804260000D+03 .1667620000D+01 .2571700000D-01 .6708000000D+00 .2342419000D+01 .8339000000D+00 .3970100000D+01 .2552500000D+01 .8056000000D+00 -.7150000000D-02 .4327338000D+03 .6224900000D+00 .1083100000D-01 .2955000000D+00 .5615290000D+01 .3566600000D+01 .4884000000D+00 .5833000000D+01 .9840000000D+00 .7810000000D-02 .1069033600D+04 .1802570000D+01 .2857400000D-01 .7045000000D+00 .3934767000D+01 .2352000000D+01 .5498600000D+01 .4062600000D+01 +3 33520170213201703252457797.4 -.1717400000D+01 -.2530000000D-02 .9826186000D+03 .5277100000D+00 .2131600000D-01 .7639000000D+00 .6028290000D+01 .1377100000D+01 .1429400000D+01 .3565700000D+01 .6264000000D+00 .2320000000D-02 .4282460000D+03 .3004200000D+00 .8331000000D-02 .3368000000D+00 .3029304000D+01 .4275100000D+01 .4267100000D+01 .5852000000D+00 .1738600000D+01 .7300000000D-03 .1068659100D+04 .6028700000D+00 .2310300000D-01 .8439000000D+00 .1338493000D+01 .2853000000D+01 .2986600000D+01 .5093400000D+01 +3 33620170325201705042457837.4 -.1421400000D+01 -.2306000000D-01 .9789991000D+03 .2321430000D+01 .5116000000D-02 .9771000000D+00 .3512131000D+01 .5160000000D+01 .1688300000D+01 .4739900000D+01 .5116000000D+00 .1030000000D-01 .4368547000D+03 .9976700000D+00 .3224000000D-02 .4448000000D+00 .5120490000D+00 .1749600000D+01 .4522400000D+01 .1724300000D+01 .2290600000D+01 .5160000000D-02 .1068771500D+04 .2552610000D+01 .6643000000D-02 .1068200000D+01 .5106073000D+01 .3928000000D+00 .3160300000D+01 .3300000000D-02 +3 33720170504201706132457877.4 -.1748400000D+01 -.1489000000D-01 .9735210000D+03 .1770390000D+01 .2400100000D-01 .1022500000D+01 .1027175000D+01 .2657200000D+01 .5786500000D+01 .5954100000D+01 .6731000000D+00 .6430000000D-02 .4477554000D+03 .6880100000D+00 .1057200000D-01 .4744000000D+00 .4298867000D+01 .5586200000D+01 .2462100000D+01 .2940200000D+01 .2291100000D+01 .2086000000D-01 .1069203600D+04 .1923860000D+01 .2693900000D-01 .1166300000D+01 .2620425000D+01 .4207700000D+01 .1069900000D+01 .1269900000D+01 +3 33820170613201707232457917.4 -.2469200000D+01 -.1930000000D-02 .9717240000D+03 .2444000000D+00 .2351000000D-01 .1127500000D+01 .4772255000D+01 .3341200000D+01 .3198800000D+01 .9368000000D+00 .1021200000D+01 .2200000000D-03 .4511129000D+03 .2022000000D+00 .9822000000D-02 .5224000000D+00 .1749962000D+01 .1415000000D+00 .6107600000D+01 .4200700000D+01 .2506200000D+01 .5410000000D-02 .1069306900D+04 .3288600000D+00 .2479300000D-01 .1283200000D+01 .8110000000D-01 .4831900000D+01 .4752500000D+01 .2500400000D+01 +3 33920170723201709012457957.4 -.3134100000D+01 .9300000000D-03 .9740535000D+03 .2095530000D+01 .1509000000D-01 .1204500000D+01 .2153087000D+01 .6507000000D+00 .3932000000D+00 .2091100000D+01 .1301200000D+01 -.5800000000D-03 .4458872000D+03 .9708000000D+00 .6522000000D-02 .5430000000D+00 .5411480000D+01 .3604600000D+01 .2958700000D+01 .5352800000D+01 .2582300000D+01 -.2279000000D-01 .1069150900D+04 .2337030000D+01 .1574200000D-01 .1360700000D+01 .3744319000D+01 .2190400000D+01 .1858300000D+01 .3648000000D+01 +3 34020170901201710112457997.4 -.3432000000D+01 -.6340000000D-02 .9810044000D+03 .3270070000D+01 .8356000000D-02 .1222300000D+01 .5756023000D+01 .4258000000D+01 .3543100000D+01 .3225100000D+01 .1403000000D+01 .1680000000D-02 .4310280000D+03 .1426070000D+01 .5668000000D-02 .5243000000D+00 .2737882000D+01 .7934000000D+00 .5726100000D+01 .2164000000D+00 .2184100000D+01 -.4348000000D-01 .1069034500D+04 .3570140000D+01 .9733000000D-02 .1377600000D+01 .1063631000D+01 .5784500000D+01 .4886900000D+01 .4800500000D+01 +3 34120171011201711202458037.4 -.3350000000D+01 -.9650000000D-02 .9922195000D+03 .3819920000D+01 .6872000000D-02 .1178400000D+01 .3042667000D+01 .1563400000D+01 .6066100000D+01 .4286100000D+01 .1299100000D+01 .2040000000D-02 .4045599000D+03 .1597430000D+01 .6482000000D-02 .4553000000D+00 .3922300000D-01 .4207600000D+01 .2348500000D+01 .1301400000D+01 .9425000000D+00 -.2993000000D-01 .1069114900D+04 .4080570000D+01 .7674000000D-02 .1293900000D+01 .4632787000D+01 .3059900000D+01 .1327600000D+01 .5873400000D+01 +3 34220171120201712302458077.4 -.3134400000D+01 -.1770000000D-02 .1006608400D+04 .3772140000D+01 .1079600000D-01 .1078300000D+01 .3215350000D+00 .5133300000D+01 .2511200000D+01 .5355800000D+01 .1173900000D+01 -.3680000000D-02 .3677349000D+03 .1529190000D+01 .6585000000D-02 .3608000000D+00 .3623299000D+01 .1298500000D+01 .5272500000D+01 .2385100000D+01 -.3251000000D+00 -.7640000000D-02 .1069158700D+04 .4023450000D+01 .1174000000D-01 .1132000000D+01 .1911066000D+01 .3266000000D+00 .3917000000D+01 .6716000000D+00 +3 34320171230201802082458117.4 -.2941700000D+01 .1706000000D-01 .1021023100D+04 .3034960000D+01 .1857500000D-01 .9443000000D+00 .3900319000D+01 .2418400000D+01 .5653800000D+01 .1589000000D+00 .9682000000D+00 -.7150000000D-02 .3272102000D+03 .1221570000D+01 .8021000000D-02 .2903000000D+00 .9474230000D+00 .4676000000D+01 .1792300000D+01 .3490700000D+01 -.1236300000D+01 .1560000000D-01 .1068944200D+04 .3221380000D+01 .2048600000D-01 .9946000000D+00 .5488643000D+01 .3902100000D+01 .8666000000D+00 .1803100000D+01 +3 34420180208201803202458157.4 -.2704100000D+01 .2375000000D-01 .1030646500D+04 .1500000000D+01 .2708100000D-01 .7903000000D+00 .1240661000D+01 .6040900000D+01 .2889400000D+01 .1161400000D+01 .8244000000D+00 -.7910000000D-02 .2958046000D+03 .5993700000D+00 .1092300000D-01 .2181000000D+00 .4600260000D+01 .1848200000D+01 .5090300000D+01 .4550400000D+01 -.1047900000D+01 .1014000000D-01 .1068504900D+04 .1556810000D+01 .2828600000D-01 .8455000000D+00 .2827670000D+01 .1249200000D+01 .4395200000D+01 .2824800000D+01 +3 34520180320201804292458197.4 -.2197800000D+01 .4920000000D-02 .1032547000D+04 .7851500000D+00 .2035700000D-01 .6946000000D+00 .4936361000D+01 .2923000000D+00 .3997000000D+00 .2148000000D+01 .6137000000D+00 .2100000000D-03 .2888523000D+03 .3303100000D+00 .7758000000D-02 .1933000000D+00 .2025873000D+01 .2621800000D+01 .2629700000D+01 .5548900000D+01 -.2999000000D+00 .1730000000D-02 .1068324800D+04 .8636400000D+00 .2053800000D-01 .7329000000D+00 .2401490000D+00 .1782200000D+01 .1899600000D+01 .3814300000D+01 +3 34620180429201806082458237.4 -.1803800000D+01 -.1462000000D-01 .1026495100D+04 .2441630000D+01 .8190000000D-02 .7442000000D+00 .2425604000D+01 .4100000000D+01 .6828000000D+00 .3170300000D+01 .5361000000D+00 .4380000000D-02 .3097751000D+03 .9673900000D+00 .3734000000D-02 .2402000000D+00 .5783619000D+01 .8900000000D-01 .2989800000D+01 .1925000000D+00 .4231000000D+00 .2740000000D-02 .1068651700D+04 .2608770000D+01 .9350000000D-02 .8022000000D+00 .4013759000D+01 .5597000000D+01 .2269900000D+01 .4815800000D+01 +3 34720180608201807182458277.4 -.1778200000D+01 -.1976000000D-01 .1017772400D+04 .1665940000D+01 .2587300000D-01 .8169000000D+00 .6219647000D+01 .1615000000D+01 .4745100000D+01 .4214400000D+01 .5390000000D+00 .6100000000D-02 .3366095000D+03 .6246400000D+00 .1053100000D-01 .2761000000D+00 .3269443000D+01 .3892200000D+01 .8545000000D+00 .1255800000D+01 .5893000000D+00 .2380000000D-01 .1068682500D+04 .1718820000D+01 .2687500000D-01 .8309000000D+00 .1525987000D+01 .3110100000D+01 .6258100000D+01 .5790300000D+01 +3 34820180718201808272458317.4 -.2446000000D+01 -.6570000000D-02 .1015063300D+04 .4672400000D+00 .2385600000D-01 .9825000000D+00 .3673184000D+01 .2220100000D+01 .2153500000D+01 .5317600000D+01 .7784000000D+00 -.1900000000D-03 .3443721000D+03 .2650000000D+00 .9405000000D-02 .3218000000D+00 .7082460000D+00 .4925000000D+01 .4439100000D+01 .2352300000D+01 .8971000000D+00 .1686000000D-01 .1068722400D+04 .5478700000D+00 .2454600000D-01 .9770000000D+00 .5262112000D+01 .3760800000D+01 .3613000000D+01 .6514000000D+00 +3 34920180827201810062458357.4 -.3215900000D+01 -.6300000000D-03 .1020513800D+04 .2359010000D+01 .1532000000D-01 .1171400000D+01 .1047094000D+01 .5871400000D+01 .5545300000D+01 .1317000000D+00 .9482000000D+00 -.1870000000D-02 .3273418000D+03 .1003950000D+01 .7087000000D-02 .3544000000D+00 .4367308000D+01 .1981600000D+01 .1189100000D+01 .3439700000D+01 .1230000000D+01 -.1311000000D-01 .1068716500D+04 .2513350000D+01 .1589200000D-01 .1166000000D+01 .2634298000D+01 .1083500000D+01 .7030000000D+00 .1734900000D+01 +3 35020181006201811152458397.4 -.3762900000D+01 -.2100000000D-02 .1032236200D+04 .3571490000D+01 .9221000000D-02 .1304100000D+01 .4645557000D+01 .3177800000D+01 .2205000000D+01 .1249400000D+01 .9848000000D+00 -.3320000000D-02 .2881659000D+03 .1477490000D+01 .7152000000D-02 .3297000000D+00 .1703135000D+01 .5400500000D+01 .4033600000D+01 .4597300000D+01 .1064200000D+01 -.4041000000D-01 .1068788800D+04 .3715780000D+01 .9763000000D-02 .1275900000D+01 .6230227000D+01 .4666200000D+01 .3734400000D+01 .2834900000D+01 +3 35120181115201812252458437.4 -.3713200000D+01 -.1088000000D-01 .1046387900D+04 .4049450000D+01 .9246000000D-02 .1365700000D+01 .1929273000D+01 .4506000000D+00 .4936800000D+01 .2308400000D+01 .7884000000D+00 -.1740000000D-02 .2314131000D+03 .1697840000D+01 .7000000000D-02 .2505000000D+00 .5316488000D+01 .2477900000D+01 .7287000000D+00 .5757300000D+01 .6590000000D-01 -.3874000000D-01 .1069074900D+04 .4216660000D+01 .7802000000D-02 .1365500000D+01 .3511240000D+01 .1934300000D+01 .2960000000D-01 .3896100000D+01 +3 35220181225201902032458477.4 -.3552400000D+01 -.1730000000D-02 .1059019400D+04 .3923830000D+01 .1234400000D-01 .1343500000D+01 .5490892000D+01 .3976100000D+01 .1351100000D+01 .3434500000D+01 .6039000000D+00 -.5340000000D-02 .1657940000D+03 .1685720000D+01 .6661000000D-02 .1691000000D+00 .2689511000D+01 .5838200000D+01 .3497100000D+01 .6667000000D+00 -.1346000000D+01 -.1840000000D-01 .1068916900D+04 .4078780000D+01 .1328000000D-01 .1347500000D+01 .7863450000D+00 .5492600000D+01 .2787200000D+01 .4994900000D+01 +3 35320190203201903152458517.4 -.3166900000D+01 .1281000000D-01 .1066772100D+04 .3090540000D+01 .2073100000D-01 .1286700000D+01 .2788659000D+01 .1235600000D+01 .4467300000D+01 .4618400000D+01 .3821000000D+00 -.3610000000D-02 .1062364000D+03 .1361260000D+01 .8975000000D-02 .1113000000D+00 .1839370000D+00 .2970900000D+01 .2320000000D-01 .2128400000D+01 -.2556100000D+01 .7970000000D-02 .1069016400D+04 .3167660000D+01 .2117900000D-01 .1278700000D+01 .4363802000D+01 .2781800000D+01 .6019100000D+01 .6164200000D+01 +3 35420190315201904242458557.4 -.2916600000D+01 .2853000000D-01 .1069392400D+04 .1404540000D+01 .2802900000D-01 .1177300000D+01 .1330220000D+00 .4852100000D+01 .1710400000D+01 .5793300000D+01 .2652000000D+00 -.2240000000D-02 .7135370000D+02 .6491600000D+00 .1208100000D-01 .7600000000D-01 .4127769000D+01 .2191000000D+00 .3369400000D+01 .3581500000D+01 -.2815000000D+01 .9540000000D-02 .1069092500D+04 .1411220000D+01 .2798400000D-01 .1188000000D+01 .1705865000D+01 .1231000000D+00 .3265900000D+01 .1020500000D+01 +3 35520190424201906032458597.4 -.2366400000D+01 .1369000000D-01 .1069392900D+04 .9679200000D+00 .1949600000D-01 .1042900000D+01 .3833994000D+01 .5373400000D+01 .5562100000D+01 .7008000000D+00 .2305000000D+00 -.3200000000D-03 .6676440000D+02 .3831900000D+00 .8451000000D-02 .7450000000D-01 .1630421000D+01 .7464000000D+00 .9521000000D+00 .4781600000D+01 -.2219000000D+01 -.3570000000D-02 .1068953800D+04 .9942000000D+00 .1968000000D-01 .1003500000D+01 .5406693000D+01 .6844000000D+00 .7683000000D+00 .2222700000D+01 +3 35620190603201907132458637.4 -.1873300000D+01 -.4200000000D-02 .1068006000D+04 .2570720000D+01 .1089100000D-01 .9032000000D+00 .1326391000D+01 .2934400000D+01 .5853800000D+01 .1890700000D+01 .2101000000D+00 .1490000000D-02 .8882450000D+02 .1076270000D+01 .4298000000D-02 .9830000000D-01 .5116054000D+01 .4636000000D+01 .1260400000D+01 .5440300000D+01 -.1685400000D+01 .1570000000D-02 .1069245800D+04 .2597740000D+01 .1027800000D-01 .8900000000D+00 .2900908000D+01 .4487700000D+01 .1205000000D+01 .3438400000D+01 +3 35720190713201908222458677.4 -.1514200000D+01 -.1845000000D-01 .1064695700D+04 .1602450000D+01 .2802400000D-01 .7264000000D+00 .5118114000D+01 .4699000000D+00 .3609500000D+01 .2900600000D+01 .2226000000D+00 .1820000000D-02 .1223811000D+03 .6830000000D+00 .1166700000D-01 .8820000000D-01 .2419201000D+01 .2174400000D+01 .5409300000D+01 .1995000000D+00 -.1400800000D+01 .2067000000D-01 .1068996500D+04 .1612250000D+01 .2808600000D-01 .7340000000D+00 .4110480000D+00 .1983800000D+01 .5122900000D+01 .4441100000D+01 +3 35820190822201910012458717.4 -.1889500000D+01 -.6590000000D-02 .1063530500D+04 .7137900000D+00 .2410800000D-01 .7142000000D+00 .2565343000D+01 .1073000000D+01 .9655000000D+00 .3819600000D+01 .2591000000D+00 -.1350000000D-02 .1305693000D+03 .3022400000D+00 .1058700000D-01 .7980000000D-01 .6102711000D+01 .3148300000D+01 .2671100000D+01 .1194100000D+01 -.1123000000D+01 .2533000000D-01 .1068947800D+04 .7328000000D+00 .2492500000D-01 .7541000000D+00 .4141419000D+01 .2638500000D+01 .2474100000D+01 .5379300000D+01 +3 35920191001201911102458757.4 -.2529000000D+01 .3250000000D-02 .1066304500D+04 .2671540000D+01 .1563000000D-01 .8520000000D+00 .6214997000D+01 .4700800000D+01 .4224900000D+01 .4701000000D+01 .2682000000D+00 -.4570000000D-02 .1027803000D+03 .1139700000D+01 .8128000000D-02 .6040000000D-01 .3558350000D+01 .2213000000D+00 .5734200000D+01 .2135200000D+01 -.5966000000D+00 .2500000000D-03 .1069228900D+04 .2703560000D+01 .1617700000D-01 .9158000000D+00 .1506223000D+01 .6232800000D+01 .5848400000D+01 .6258400000D+01 +3 36020191110201912202458797.4 -.3028800000D+01 .4480000000D-02 .1069614300D+04 .3852770000D+01 .1123300000D-01 .9982000000D+00 .3523013000D+01 .1976800000D+01 .8127000000D+00 .5648400000D+01 .8320000000D-01 -.3380000000D-02 .5461740000D+02 .1677120000D+01 .7435000000D-02 .5020000000D-01 .1353453000D+01 .3644800000D+01 .2289100000D+01 .4140700000D+01 -.4471000000D+00 -.2639000000D-01 .1069489900D+04 .3916960000D+01 .9277000000D-02 .1052200000D+01 .5094985000D+01 .3525000000D+01 .2512200000D+01 .9517000000D+00 +3 36120191220202001292458837.4 -.2993900000D+01 -.6650000000D-02 .1069401100D+04 .4273700000D+01 .1000100000D-01 .1190800000D+01 .8005510000D+00 .5488200000D+01 .3594000000D+01 .3584000000D+00 -.7910000000D-01 -.5450000000D-02 .6220850000D+02 .1893350000D+01 .7312000000D-02 .1118000000D+00 .6719200000D-01 .7470000000D+00 .5132500000D+01 .6224300000D+01 -.8905000000D+00 -.3932000000D-01 .1069586300D+04 .4376450000D+01 .9034000000D-02 .1222700000D+01 .2369967000D+01 .7973000000D+00 .5076900000D+01 .1936200000D+01 +3 36220200129202003092458877.4 -.2755500000D+01 -.3710000000D-02 .1063314900D+04 .4070030000D+01 .1363800000D-01 .1279400000D+01 .4357123000D+01 .2717600000D+01 .4090000000D-01 .1436500000D+01 -.2750000000D+00 -.3510000000D-02 .1300918000D+03 .1779180000D+01 .7256000000D-02 .1987000000D+00 .4065461000D+01 .4128900000D+01 .1657400000D+01 .1263000000D+01 -.2125800000D+01 -.2258000000D-01 .1069627800D+04 .4127840000D+01 .1339300000D-01 .1302600000D+01 .5923767000D+01 .4349500000D+01 .1674200000D+01 .3017800000D+01 +3 36320200309202004182458917.4 -.2331300000D+01 .5360000000D-02 .1053626900D+04 .3159890000D+01 .2171000000D-01 .1315600000D+01 .1651174000D+01 .6266900000D+01 .3224100000D+01 .2602700000D+01 -.3045000000D+00 -.2160000000D-02 .1922903000D+03 .1358000000D+01 .9247000000D-02 .2654000000D+00 .1479070000D+01 .1280100000D+01 .4547600000D+01 .2433500000D+01 -.3312900000D+01 -.1500000000D-03 .1069973300D+04 .3187390000D+01 .2129700000D-01 .1336000000D+01 .3216231000D+01 .1631700000D+01 .4859500000D+01 .4186000000D+01 +3 36420200418202005282458957.4 -.2114900000D+01 .2397000000D-01 .1045504700D+04 .1401080000D+01 .2765000000D-01 .1368500000D+01 .5276104000D+01 .3607100000D+01 .4761000000D+00 .3784600000D+01 -.3650000000D+00 .4660000000D-02 .2308967000D+03 .6154000000D+00 .1201600000D-01 .3116000000D+00 .5150046000D+01 .4889600000D+01 .1650200000D+01 .3676000000D+01 -.3963400000D+01 .1008000000D-01 .1070196900D+04 .1427650000D+01 .2846400000D-01 .1354100000D+01 .5579070000D+00 .5247300000D+01 .2103300000D+01 .5388700000D+01 +3 36520200528202007072458997.4 -.1825100000D+01 .2224000000D-01 .1043943600D+04 .9774600000D+00 .1937000000D-01 .1279700000D+01 .2693399000D+01 .4151500000D+01 .4276200000D+01 .5040300000D+01 -.2976000000D+00 .4430000000D-02 .2368811000D+03 .4228400000D+00 .8681000000D-02 .2849000000D+00 .2580130000D+01 .5145900000D+01 .5583000000D+01 .4940800000D+01 -.3643100000D+01 -.6050000000D-02 .1069947000D+04 .9901200000D+00 .2046000000D-01 .1333400000D+01 .4258849000D+01 .5803200000D+01 .5927700000D+01 .3771000000D+00 +3 36620200707202008162459037.4 -.1253000000D+01 .1090000000D-02 .1050210700D+04 .2593410000D+01 .1121200000D-01 .1186900000D+01 .1873980000D+00 .1695200000D+01 .4695800000D+01 .1132000000D+00 -.2092000000D+00 .3210000000D-02 .2098745000D+03 .1128640000D+01 .4889000000D-02 .2009000000D+00 .6116800000D-01 .2894400000D+01 .5648000000D+01 .6261500000D+01 -.3322700000D+01 -.2380000000D-02 .1070023100D+04 .2635320000D+01 .1105100000D-01 .1219900000D+01 .1753609000D+01 .3330800000D+01 .1220000000D-01 .1696100000D+01 +3 36720200816202009252459077.4 -.7803000000D+00 -.1389000000D-01 .1056662800D+04 .1567120000D+01 .2907000000D-01 .1000600000D+01 .3980196000D+01 .5496200000D+01 .2357800000D+01 .1303300000D+01 -.4080000000D-01 -.2380000000D-02 .1735368000D+03 .7066700000D+00 .1256500000D-01 .1608000000D+00 .3823603000D+01 .5146000000D+00 .3662400000D+01 .1138800000D+01 -.3080400000D+01 .1131000000D-01 .1069890900D+04 .1608050000D+01 .2987700000D-01 .1024800000D+01 .5546943000D+01 .8331000000D+00 .3969200000D+01 .2917900000D+01 +3 36820200925202011042459117.4 -.7481000000D+00 -.4710000000D-02 .1057619500D+04 .8761600000D+00 .2439200000D-01 .8654000000D+00 .1424693000D+01 .6130300000D+01 .5951300000D+01 .2443600000D+01 -.4910000000D-01 -.1410000000D-02 .1654203000D+03 .3449200000D+00 .1082600000D-01 .1519000000D+00 .1261093000D+01 .1200100000D+01 .9411000000D+00 .2283600000D+01 -.2992000000D+01 .2875000000D-01 .1069837800D+04 .8517000000D+00 .2567600000D-01 .8516000000D+00 .2991427000D+01 .1466000000D+01 .1330100000D+01 .3997500000D+01 +3 36920201104202012142459157.4 -.1090900000D+01 .1197000000D-01 .1052476900D+04 .2840210000D+01 .1615200000D-01 .8064000000D+00 .5067283000D+01 .3438000000D+01 .2936300000D+01 .3305500000D+01 -.1207000000D+00 -.6800000000D-03 .1953970000D+03 .1222220000D+01 .7646000000D-02 .1625000000D+00 .4939750000D+01 .4724700000D+01 .3882000000D+01 .3257000000D+01 -.2463000000D+01 .1720000000D-01 .1070091600D+04 .2905060000D+01 .1566600000D-01 .7528000000D+00 .3508090000D+00 .5071600000D+01 .4665000000D+01 .4900700000D+01 +3 37020201214202101232459197.4 -.1235400000D+01 .9380000000D-02 .1040922900D+04 .3985420000D+01 .1000800000D-01 .7394000000D+00 .2366426000D+01 .7053000000D+00 .5835000000D+01 .4084700000D+01 -.2809000000D+00 .1710000000D-02 .2497280000D+03 .1697820000D+01 .7326000000D-02 .1991000000D+00 .2283981000D+01 .1868200000D+01 .3656000000D+00 .3995500000D+01 -.1881500000D+01 -.6630000000D-02 .1070072800D+04 .4101350000D+01 .9886000000D-02 .7263000000D+00 .3932987000D+01 .2368100000D+01 .1218800000D+01 .5636000000D+01 +4 37120100101201002102455197.3 -.1053650000D+02 .6295000000D-01 .1747183600D+04 .6501550000D+01 .1693700000D-01 .6377100000D+01 .1055156000D+01 .5686200000D+01 .4849600000D+01 .1447300000D+01 -.4360400000D+01 .1205000000D-01 .7007649000D+03 .2789810000D+01 .1197900000D-01 .2677900000D+01 .1082780000D+01 .4210000000D-01 .5075600000D+01 .1483500000D+01 -.1710460000D+02 -.5485000000D-01 .1882033700D+04 .6864880000D+01 .2108900000D-01 .6959900000D+01 .2629807000D+01 .1070200000D+01 .1826000000D+00 .3026700000D+01 +4 37220100210201003222455237.3 -.7606900000D+01 .6811000000D-01 .1726007100D+04 .7449260000D+01 .1450800000D-01 .6286900000D+01 .3388799000D+01 .1754200000D+01 .2690000000D-01 .6275300000D+01 -.3668900000D+01 .2386000000D-01 .7519967000D+03 .3220850000D+01 .1299900000D-01 .2825700000D+01 .3429356000D+01 .2231600000D+01 .4313000000D+00 .4130000000D-01 -.1900510000D+02 -.2682000000D-01 .1882817900D+04 .7962130000D+01 .1606700000D-01 .6891900000D+01 .4966092000D+01 .3389700000D+01 .1721000000D+01 .1558300000D+01 +4 37320100322201005012455277.3 -.4629200000D+01 .7410000000D-01 .1710348200D+04 .7304960000D+01 .1666900000D-01 .6258500000D+01 .5711019000D+01 .4090700000D+01 .1561000000D+01 .4807100000D+01 -.2647000000D+01 .3118000000D-01 .7884155000D+03 .3124120000D+01 .1150800000D-01 .2931300000D+01 .5766935000D+01 .4392400000D+01 .2149000000D+01 .4871700000D+01 -.2008230000D+02 -.1417000000D-01 .1882174600D+04 .7969060000D+01 .2182000000D-01 .6942700000D+01 .1008844000D+01 .5714900000D+01 .3240200000D+01 .9520000000D-01 +4 37420100501201006102455317.3 -.1518100000D+01 .4893000000D-01 .1703093600D+04 .6288700000D+01 .3039000000D-01 .6229100000D+01 .1763782000D+01 .1694000000D+00 .3480600000D+01 .3373800000D+01 -.1360200000D+01 .1941000000D-01 .8047554000D+03 .2645140000D+01 .1481700000D-01 .2950700000D+01 .1836359000D+01 .3101000000D+00 .3744400000D+01 .3457400000D+01 -.2070480000D+02 -.1010000000D-02 .1882002900D+04 .6685160000D+01 .3108800000D-01 .6883900000D+01 .3347277000D+01 .1764400000D+01 .5131400000D+01 .4946700000D+01 +4 37520100610201007202455357.3 .3882000000D+00 .3454000000D-01 .1702793200D+04 .3971540000D+01 .4354500000D-01 .6300100000D+01 .4137869000D+01 .2558800000D+01 .5708600000D+01 .1975200000D+01 -.5856000000D+00 .1218000000D-01 .8063296000D+03 .1562510000D+01 .1924000000D-01 .2979300000D+01 .4226507000D+01 .2587800000D+01 .5748700000D+01 .2071200000D+01 -.2112500000D+02 .1419000000D-01 .1882076700D+04 .4276560000D+01 .4796600000D-01 .6933000000D+01 .5724957000D+01 .4126800000D+01 .9963000000D+00 .3566800000D+01 +4 37620100720201008292455397.3 .1376600000D+01 -.1132000000D-01 .1703821000D+04 .2971000000D+00 .4585700000D-01 .6288100000D+01 .2960550000D+00 .5057000000D+01 .1901100000D+01 .6779000000D+00 -.2325000000D+00 -.8050000000D-02 .8042714000D+03 .6436000000D-01 .1908000000D-01 .2973300000D+01 .3976680000D+00 .1679200000D+01 .1931900000D+01 .7840000000D+00 -.2085020000D+02 .3140000000D-02 .1880720700D+04 .2216700000D+00 .4912900000D-01 .6950400000D+01 .1885176000D+01 .5890000000D+00 .3503400000D+01 .2259600000D+01 +4 37720100829201010082455437.3 .3308000000D+00 -.3025000000D-01 .1702522900D+04 .3591120000D+01 .7656000000D-02 .6394300000D+01 .2824834000D+01 .4402600000D+01 .4898000000D+01 .5723000000D+01 -.7620000000D+00 -.1483000000D-01 .8064367000D+03 .1679120000D+01 .3551000000D-02 .3030400000D+01 .2931245000D+01 .4444300000D+01 .5855800000D+01 .5825000000D+01 -.2006090000D+02 -.3500000000D-01 .1881023500D+04 .4145980000D+01 .5275000000D-02 .6851000000D+01 .4414161000D+01 .5985400000D+01 .8468000000D+00 .1019100000D+01 +4 37820101008201011172455477.3 -.7259000000D+00 -.4696000000D-01 .1702279200D+04 .3858310000D+01 .4355500000D-01 .6247100000D+01 .5407414000D+01 .7035000000D+00 .3834700000D+01 .4501200000D+01 -.1284900000D+01 -.1705000000D-01 .8076591000D+03 .1608850000D+01 .2025300000D-01 .2951000000D+01 .5507948000D+01 .8627000000D+00 .3975800000D+01 .4596600000D+01 -.2092590000D+02 .1540000000D-01 .1881488000D+04 .4203400000D+01 .4913700000D-01 .6920600000D+01 .7133450000D+00 .2299300000D+01 .5425200000D+01 .6096700000D+01 +4 37920101117201012272455517.3 -.2035000000D+01 .1211000000D-01 .1702955000D+04 .6617000000D-01 .4831700000D-01 .6270500000D+01 .1667113000D+01 .2933400000D+01 .6140000000D-01 .3208900000D+01 -.1751800000D+01 .6740000000D-02 .8051945000D+03 .1345800000D+00 .2090400000D-01 .2971800000D+01 .1757614000D+01 .2389000000D+00 .1948000000D+00 .3294500000D+01 -.2086930000D+02 .1103000000D-01 .1881019200D+04 .7303000000D-01 .5282200000D-01 .6905700000D+01 .3254322000D+01 .3539900000D+01 .1637000000D+01 .4792000000D+01 +4 38020101227201102052455557.3 -.1780800000D+01 .7215000000D-01 .1702005800D+04 .3894990000D+01 .3047500000D-01 .6301900000D+01 .4117680000D+01 .2561100000D+01 .2281400000D+01 .1820400000D+01 -.1656700000D+01 .3573000000D-01 .8061735000D+03 .1856470000D+01 .1344600000D-01 .2978400000D+01 .4204068000D+01 .2690100000D+01 .2098000000D+01 .1906600000D+01 -.2101070000D+02 .7830000000D-02 .1881525300D+04 .4260260000D+01 .3401400000D-01 .6925300000D+01 .5704065000D+01 .4148600000D+01 .3841000000D+01 .3416900000D+01 +4 38120110205201103172455597.3 .6774000000D+00 .7695000000D-01 .1703084800D+04 .6289200000D+01 .1707200000D-01 .6300100000D+01 .2094450000D+00 .4944200000D+01 .4165300000D+01 .3779000000D+00 -.4582000000D+00 .3278000000D-01 .8043088000D+03 .2839050000D+01 .1177200000D-01 .2946400000D+01 .2999460000D+00 .4956700000D+01 .3619400000D+01 .4707000000D+00 -.2052410000D+02 -.1012000000D-01 .1881130700D+04 .6867620000D+01 .2039200000D-01 .6910100000D+01 .1796674000D+01 .2317000000D+00 .5669900000D+01 .1970700000D+01 +4 38220110317201104262455637.3 .3935900000D+01 .6787000000D-01 .1711371300D+04 .7271400000D+01 .1375300000D-01 .6240800000D+01 .2544075000D+01 .1018300000D+01 .5755500000D+01 .5197900000D+01 .1010400000D+01 .2313000000D-01 .7881930000D+03 .3173770000D+01 .1250300000D-01 .2808100000D+01 .2645405000D+01 .8602000000D+00 .5350400000D+01 .5307700000D+01 -.2034770000D+02 .1840000000D-01 .1881302300D+04 .7992680000D+01 .1688400000D-01 .6895600000D+01 .4132792000D+01 .2560100000D+01 .8615000000D+00 .5073000000D+00 +4 38320110426201106052455677.3 .6897700000D+01 .6894000000D-01 .1728128700D+04 .7349890000D+01 .1608100000D-01 .6346000000D+01 .4868558000D+01 .3354700000D+01 .8762000000D+00 .3734700000D+01 .2114100000D+01 .2040000000D-01 .7525838000D+03 .3092900000D+01 .1256000000D-01 .2657800000D+01 .4985513000D+01 .3015600000D+01 .7643000000D+00 .3860000000D+01 -.1953270000D+02 .3846000000D-01 .1880678800D+04 .7938970000D+01 .2029500000D-01 .6931700000D+01 .1747210000D+00 .4884100000D+01 .2531200000D+01 .5327000000D+01 +4 38420110605201107152455717.3 .9827100000D+01 .4541000000D-01 .1748780900D+04 .6442010000D+01 .2885200000D-01 .6355100000D+01 .9222580000D+00 .5720800000D+01 .2837500000D+01 .2298200000D+01 .2889300000D+01 .1395000000D-01 .7018324000D+03 .2570370000D+01 .1377900000D-01 .2436300000D+01 .1058620000D+01 .5196600000D+01 .2543000000D+01 .2446800000D+01 -.1804460000D+02 .3074000000D-01 .1881131300D+04 .6859340000D+01 .3010700000D-01 .6907700000D+01 .2511761000D+01 .9204000000D+00 .4273000000D+01 .3892100000D+01 +4 38520110715201108242455757.3 .1182170000D+02 .2320000000D-01 .1769360000D+04 .4285830000D+01 .4376400000D-01 .6530500000D+01 .3295343000D+01 .1798500000D+01 .4952900000D+01 .9109000000D+00 .3424000000D+01 -.5000000000D-04 .6520750000D+03 .1649650000D+01 .1807400000D-01 .2328200000D+01 .3452926000D+01 .1101600000D+01 .4322500000D+01 .1074600000D+01 -.1709040000D+02 .3340000000D-01 .1880507500D+04 .4572240000D+01 .4752700000D-01 .6908300000D+01 .4885051000D+01 .3292200000D+01 .1717000000D+00 .2497000000D+01 +4 38620110824201110032455797.3 .1260320000D+02 -.1016000000D-01 .1778592100D+04 .6093000000D+00 .4916900000D-01 .6504100000D+01 .5732190000D+01 .4336200000D+01 .1148900000D+01 .5882400000D+01 .3445400000D+01 -.4080000000D-02 .6247554000D+03 .1431900000D+00 .1896900000D-01 .2307800000D+01 .5906942000D+01 .3182700000D+01 .4607000000D+00 .6057300000D+01 -.1606860000D+02 -.8560000000D-02 .1879724500D+04 .5650100000D+00 .5110300000D-01 .6904600000D+01 .1038615000D+01 .5772300000D+01 .2627400000D+01 .1192700000D+01 +4 38720111003201111122455837.3 .1135050000D+02 -.6740000000D-02 .1772845600D+04 .3651960000D+01 .1088800000D-01 .6433600000D+01 .1971562000D+01 .3611500000D+01 .4285600000D+01 .4658200000D+01 .3073700000D+01 .3590000000D-02 .6391667000D+03 .1551940000D+01 .3194000000D-02 .2373800000D+01 .2147451000D+01 .2996400000D+01 .4246100000D+01 .4819900000D+01 -.1625360000D+02 -.4091000000D-01 .1880405200D+04 .3901040000D+01 .8967000000D-02 .6980100000D+01 .3562631000D+01 .5156000000D+01 .5414200000D+01 .6219000000D+01 +4 38820111112201112222455877.3 .1089530000D+02 -.5045000000D-01 .1758926500D+04 .4156930000D+01 .4442400000D-01 .6405300000D+01 .4553444000D+01 .6228300000D+01 .3058800000D+01 .3431600000D+01 .3154600000D+01 -.1412000000D-01 .6791667000D+03 .1600560000D+01 .1906800000D-01 .2530700000D+01 .4714458000D+01 .5664400000D+01 .2555900000D+01 .3588800000D+01 -.1741910000D+02 -.2083000000D-01 .1880090300D+04 .4392480000D+01 .4769600000D-01 .6817300000D+01 .6145226000D+01 .1449600000D+01 .4580300000D+01 .5019800000D+01 +4 38920111222201201312455917.3 .9595000000D+01 .5090000000D-02 .1749856500D+04 .2906400000D+00 .4921900000D-01 .6361100000D+01 .8176240000D+00 .2358600000D+01 .5588700000D+01 .2139700000D+01 .2862100000D+01 .1130000000D-02 .6998803000D+03 .1501300000D+00 .1990800000D-01 .2517000000D+01 .9630230000D+00 .8190000000D-01 .5027200000D+01 .2282500000D+01 -.1825770000D+02 .1381000000D-01 .1880188200D+04 .2883400000D+00 .5382000000D-01 .6879900000D+01 .2408133000D+01 .3870900000D+01 .8132000000D+00 .3727700000D+01 +4 39020120131201203112455957.3 .9850100000D+01 .5649000000D-01 .1755310400D+04 .3720550000D+01 .3259800000D-01 .6460700000D+01 .3273530000D+01 .1817600000D+01 .1526800000D+01 .7678000000D+00 .2975600000D+01 .1331000000D-01 .6849537000D+03 .1666910000D+01 .1420700000D-01 .2435100000D+01 .3413474000D+01 .1344500000D+01 .6466000000D+00 .9164000000D+00 -.1827490000D+02 .5164000000D-01 .1880477100D+04 .4093230000D+01 .3332000000D-01 .6837800000D+01 .4862997000D+01 .3308100000D+01 .3014700000D+01 .2349700000D+01 +4 39120120311201204202455997.3 .1162480000D+02 .7298000000D-01 .1773911500D+04 .6254350000D+01 .1943600000D-01 .6519400000D+01 .5655341000D+01 .4191100000D+01 .3398400000D+01 .5613400000D+01 .3280900000D+01 .1419000000D-01 .6356872000D+03 .2640130000D+01 .1267700000D-01 .2182400000D+01 .5802761000D+01 .3543900000D+01 .2232000000D+01 .5772600000D+01 -.1631610000D+02 .3870000000D-01 .1880300600D+04 .6702780000D+01 .1918500000D-01 .6824100000D+01 .9596330000D+00 .5676800000D+01 .4840900000D+01 .9111000000D+00 +4 39220120420201205302456037.3 .1437960000D+02 .4957000000D-01 .1801268700D+04 .7364570000D+01 .1575400000D-01 .6560600000D+01 .1714227000D+01 .2431000000D+00 .5013100000D+01 .4151100000D+01 .3710600000D+01 -.8180000000D-02 .5552137000D+03 .3058850000D+01 .1392000000D-01 .1841700000D+01 .1882395000D+01 .5690500000D+01 .3968000000D+01 .4353700000D+01 -.1413480000D+02 .5345000000D-01 .1880481600D+04 .7785650000D+01 .1685100000D-01 .6759600000D+01 .3299421000D+01 .1730700000D+01 .1058000000D+00 .5740000000D+01 +4 39320120530201207092456077.3 .1659920000D+02 .3856000000D-01 .1829996800D+04 .7557960000D+01 .1923000000D-01 .6682700000D+01 .4045662000D+01 .2560100000D+01 .2254000000D+00 .2695000000D+01 .3583400000D+01 -.2283000000D-01 .4521134000D+03 .3093550000D+01 .1276300000D-01 .1440300000D+01 .4251017000D+01 .1521700000D+01 .5766100000D+01 .2936500000D+01 -.1180520000D+02 .7427000000D-01 .1880630400D+04 .7781220000D+01 .1769100000D-01 .6815600000D+01 .5627696000D+01 .4048900000D+01 .1723000000D+01 .4284500000D+01 +4 39420120709201208182456117.3 .1829260000D+02 .2638000000D-01 .1853502100D+04 .6587540000D+01 .2777100000D-01 .6728600000D+01 .1036670000D+00 .4885100000D+01 .2073500000D+01 .1256700000D+01 .2722400000D+01 -.1372000000D-01 .3420205000D+03 .2767300000D+01 .1304600000D-01 .1083000000D+01 .3748960000D+00 .3663100000D+01 .1011700000D+01 .1595300000D+01 -.8913200000D+01 .5602000000D-01 .1880615200D+04 .6906100000D+01 .3075100000D-01 .6744800000D+01 .1683541000D+01 .9950000000D-01 .3472000000D+01 .2853600000D+01 +4 39520120818201209272456157.3 .1958290000D+02 .8000000000D-04 .1869040800D+04 .4528970000D+01 .4557500000D-01 .6792700000D+01 .2479060000D+01 .9330000000D+00 .4091500000D+01 .6161200000D+01 .2022200000D+01 -.1034000000D-01 .2498660000D+03 .1906420000D+01 .1914200000D-01 .8104000000D+00 .2852237000D+01 .5889000000D+01 .2821600000D+01 .2809000000D+00 -.6825300000D+01 .3978000000D-01 .1880549400D+04 .4627770000D+01 .4637000000D-01 .6841700000D+01 .4055792000D+01 .2469700000D+01 .5638900000D+01 .1456100000D+01 +4 39620120927201211062456197.3 .1964380000D+02 -.3410000000D-02 .1873411500D+04 .6981600000D+00 .5091200000D-01 .6796400000D+01 .4914888000D+01 .3466000000D+01 .2826000000D+00 .4852000000D+01 .1556400000D+01 .6330000000D-02 .2048270000D+03 .3116700000D+00 .2166900000D-01 .7685000000D+00 .5379454000D+01 .1987200000D+01 .5181000000D+01 .5315500000D+01 -.5471300000D+01 -.1476000000D-01 .1880298000D+04 .7429700000D+00 .5291800000D-01 .6785200000D+01 .2074280000D+00 .4934700000D+01 .1790200000D+01 .1446000000D+00 +4 39720121106201212162456237.3 .1883540000D+02 .1198000000D-01 .1871471100D+04 .3859230000D+01 .9336000000D-02 .6708000000D+01 .1152160000D+01 .2772300000D+01 .3434800000D+01 .3598800000D+01 .1977700000D+01 .8830000000D-02 .2260769000D+03 .1533570000D+01 .5279000000D-02 .9304000000D+00 .1573924000D+01 .1431700000D+01 .1924400000D+01 .3909000000D+01 -.6465500000D+01 -.2971000000D-01 .1879933500D+04 .3752090000D+01 .1353400000D-01 .6922800000D+01 .2729364000D+01 .4292200000D+01 .4677700000D+01 .5201300000D+01 +4 39820121216201301252456277.3 .1898900000D+02 -.3173000000D-01 .1862367600D+04 .4380070000D+01 .4565200000D-01 .6657300000D+01 .3733432000D+01 .5394000000D+01 .2227200000D+01 .2401800000D+01 .2410000000D+01 .1125000000D-01 .2935776000D+03 .1772380000D+01 .1812900000D-01 .1122200000D+01 .4048593000D+01 .4088900000D+01 .9901000000D+00 .2692400000D+01 -.7475300000D+01 -.4965000000D-01 .1880203000D+04 .4471350000D+01 .4627100000D-01 .6806400000D+01 .5311531000D+01 .6063000000D+00 .3720500000D+01 .3973900000D+01 +4 39920130125201303062456317.3 .1830620000D+02 -.1460000000D-02 .1854131700D+04 .4624300000D+00 .5125500000D-01 .6696800000D+01 .6281564000D+01 .1522700000D+01 .4745900000D+01 .1105800000D+01 .2796200000D+01 -.2310000000D-02 .3349011000D+03 .2458700000D+00 .2186200000D-01 .1177100000D+01 .2601910000D+00 .6019600000D+01 .3522900000D+01 .1354300000D+01 -.9001700000D+01 .1234000000D-01 .1880734600D+04 .4197200000D+00 .5201900000D-01 .6792600000D+01 .1577343000D+01 .3139000000D+01 .6281900000D+01 .2695300000D+01 +4 40020130306201304152456357.3 .1858560000D+02 .1910000000D-01 .1858754700D+04 .3672330000D+01 .3320000000D-01 .6703900000D+01 .2458422000D+01 .9746000000D+00 .6747000000D+00 .6030000000D+01 .2794600000D+01 -.2257000000D-01 .3096420000D+03 .1588900000D+01 .1500900000D-01 .9773000000D+00 .2725935000D+01 .6111400000D+01 .5479300000D+01 .3830000000D-01 -.8852800000D+01 .6953000000D-01 .1880262900D+04 .3845200000D+01 .3280500000D-01 .6819000000D+01 .4036458000D+01 .2496600000D+01 .2174900000D+01 .1319600000D+01 +4 40120130415201305252456397.3 .1894940000D+02 .4129000000D-01 .1870294700D+04 .6246290000D+01 .2049700000D-01 .6743100000D+01 .4846592000D+01 .3334200000D+01 .2482800000D+01 .4600400000D+01 .1894200000D+01 -.2413000000D-01 .2264603000D+03 .2692260000D+01 .1321600000D-01 .5974000000D+00 .5194238000D+01 .2040600000D+01 .8207000000D+00 .5053900000D+01 -.6389200000D+01 .7101000000D-01 .1880785100D+04 .6409360000D+01 .1887000000D-01 .6792700000D+01 .1388890000D+00 .4858500000D+01 .4054900000D+01 .6169500000D+01 +4 40220130525201307042456437.3 .2006020000D+02 .8420000000D-02 .1880539100D+04 .7386570000D+01 .1781500000D-01 .6728400000D+01 .9122270000D+00 .5647200000D+01 .4046600000D+01 .3151800000D+01 .7247000000D+00 -.3000000000D-01 .1141059000D+03 .3208330000D+01 .1293600000D-01 .2761000000D+00 .1591470000D+01 .4203700000D+01 .2553900000D+01 .4532200000D+01 -.3120800000D+01 .6573000000D-01 .1881319700D+04 .7498300000D+01 .1554700000D-01 .6736400000D+01 .2484830000D+01 .9157000000D+00 .5647400000D+01 .4714900000D+01 +4 40320130704201308132456477.3 .2061660000D+02 -.1914000000D-01 .1882072100D+04 .7487430000D+01 .1987300000D-01 .6783500000D+01 .3248775000D+01 .1660800000D+01 .5692400000D+01 .1699100000D+01 -.4748000000D+00 -.3686000000D-01 .8244420000D+02 .3292300000D+01 .1245600000D-01 .4911000000D+00 .5466866000D+01 .7700000000D-01 .4192700000D+01 .4355300000D+01 -.1280000000D+00 .7704000000D-01 .1881898000D+04 .7590700000D+01 .1680700000D-01 .6756000000D+01 .4818613000D+01 .3236500000D+01 .8500000000D+00 .3269400000D+01 +4 40420130813201309222456517.3 .2008910000D+02 -.1171000000D-01 .1874544200D+04 .6557360000D+01 .2795900000D-01 .6754100000D+01 .5593600000D+01 .3959200000D+01 .1076300000D+01 .2728000000D+00 -.1832500000D+01 -.2544000000D-01 .1896985000D+03 .2843050000D+01 .1392500000D-01 .8932000000D+00 .2132392000D+01 .2270600000D+01 .5860400000D+01 .3139300000D+01 .2962100000D+01 .6084000000D-01 .1881245100D+04 .6720500000D+01 .3032700000D-01 .6679400000D+01 .8784510000D+00 .5589800000D+01 .2722400000D+01 .1830100000D+01 +4 40520130922201311012456557.3 .1972330000D+02 -.1864000000D-01 .1862361600D+04 .4459690000D+01 .4673300000D-01 .6736500000D+01 .1687707000D+01 .3070000000D-01 .3198900000D+01 .5167800000D+01 -.2970200000D+01 -.3930000000D-02 .2834647000D+03 .1876200000D+01 .1940100000D-01 .1122300000D+01 .4641078000D+01 .4507900000D+01 .1362300000D+01 .1855900000D+01 .5368500000D+01 .2965000000D-01 .1882329100D+04 .4457490000D+01 .4592000000D-01 .6787400000D+01 .3253962000D+01 .1661200000D+01 .4818000000D+01 .4512000000D+00 +4 40620131101201312112456597.3 .1897850000D+02 .1113000000D-01 .1854576400D+04 .5528800000D+00 .5030300000D-01 .6670800000D+01 .4125618000D+01 .2512100000D+01 .5641000000D+01 .3863100000D+01 -.3278700000D+01 .7370000000D-02 .3271076000D+03 .2486400000D+00 .2177500000D-01 .1157200000D+01 .8337620000D+00 .1067900000D+01 .3819500000D+01 .5770000000D+00 .6472700000D+01 -.1790000000D-01 .1881625000D+04 .5883000000D+00 .5228700000D-01 .6784100000D+01 .5692097000D+01 .4208100000D+01 .1012100000D+01 .5422100000D+01 +4 40720131211201401202456637.3 .1923400000D+02 .2040000000D-01 .1859467800D+04 .3819920000D+01 .8918000000D-02 .6865700000D+01 .3663260000D+00 .1892800000D+01 .2198500000D+01 .2614200000D+01 -.2689900000D+01 .1240000000D-02 .3036730000D+03 .1700220000D+01 .6470000000D-02 .9771000000D+00 .3351292000D+01 .6250000000D+01 .1025200000D+01 .5563200000D+01 .5141000000D+01 -.1660000000D-01 .1881034300D+04 .3935580000D+01 .1093100000D-01 .6734800000D+01 .1932903000D+01 .3476800000D+01 .4232600000D+01 .4199000000D+01 +4 40820140120201403012456677.3 .1983250000D+02 .7050000000D-02 .1869119500D+04 .4273030000D+01 .4456300000D-01 .6709200000D+01 .2947772000D+01 .4482600000D+01 .1319200000D+01 .1400800000D+01 -.2424600000D+01 .1935000000D-01 .2322826000D+03 .1928420000D+01 .1982200000D-01 .7239000000D+00 .5884306000D+01 .2703900000D+01 .5801700000D+01 .4319600000D+01 .4342900000D+01 -.5235000000D-01 .1882031100D+04 .4417500000D+01 .4674800000D-01 .6781400000D+01 .4515147000D+01 .6098400000D+01 .2930300000D+01 .2982400000D+01 +4 40920140301201404102456717.3 .2024470000D+02 -.5910000000D-02 .1873868900D+04 .4369600000D+00 .5039600000D-01 .6798900000D+01 .5494110000D+01 .6913000000D+00 .3861100000D+01 .1190000000D+00 -.1882900000D+01 -.2390000000D-02 .1869951000D+03 .2243100000D+00 .2161500000D-01 .7020000000D+00 .2098407000D+01 .5076700000D+01 .2129700000D+01 .3012700000D+01 .2773900000D+01 .1240000000D-01 .1881745800D+04 .3757100000D+00 .4921000000D-01 .6744400000D+01 .7796820000D+00 .2249000000D+01 .5465600000D+01 .1688300000D+01 +4 41020140410201405202456757.3 .2040790000D+02 -.2649000000D-01 .1871134400D+04 .3651860000D+01 .3077800000D-01 .6733500000D+01 .1671882000D+01 .7010000000D-01 .6042700000D+01 .5033600000D+01 -.2111200000D+01 -.2082000000D-01 .2124020000D+03 .1537570000D+01 .1475100000D-01 .8687000000D+00 .4601230000D+01 .4665600000D+01 .4103200000D+01 .1702300000D+01 .3145400000D+01 .6200000000D-01 .1881475400D+04 .3618380000D+01 .3289200000D-01 .6779600000D+01 .3239727000D+01 .1700800000D+01 .1396900000D+01 .3259000000D+00 +4 41120140520201406292456797.3 .1920860000D+02 -.1121000000D-01 .1859678900D+04 .6080070000D+01 .1847300000D-01 .6652200000D+01 .4062584000D+01 .2431100000D+01 .1581300000D+01 .3607500000D+01 -.2818900000D+01 -.3000000000D-01 .2939589000D+03 .2602420000D+01 .1133100000D-01 .1242500000D+01 .7866330000D+00 .6242000000D+00 .5709400000D+01 .3674000000D+00 .5185400000D+01 .7859000000D-01 .1882007300D+04 .6159960000D+01 .1821000000D-01 .6795000000D+01 .5630176000D+01 .4065700000D+01 .3305300000D+01 .5178200000D+01 +4 41220140629201408082456837.3 .1809450000D+02 -.3127000000D-01 .1839760900D+04 .7114560000D+01 .1508900000D-01 .6525200000D+01 .1310570000D+00 .4756400000D+01 .3146800000D+01 .2159200000D+01 -.3891600000D+01 -.1582000000D-01 .4011265000D+03 .3040580000D+01 .1193500000D-01 .1618000000D+01 .3193928000D+01 .2817800000D+01 .1032000000D+01 .5239600000D+01 .8387000000D+01 .5693000000D-01 .1882312200D+04 .7247910000D+01 .1417200000D-01 .6786600000D+01 .1698414000D+01 .1286000000D+00 .4882700000D+01 .3731500000D+01 +4 41320140808201409172456877.3 .1687130000D+02 -.6045000000D-01 .1813536700D+04 .7147240000D+01 .1658400000D-01 .6505500000D+01 .2469663000D+01 .7916000000D+00 .4689400000D+01 .7173000000D+00 -.4632100000D+01 -.2950000000D-02 .5070128000D+03 .2989530000D+01 .1165100000D-01 .1999200000D+01 .5568510000D+01 .4982600000D+01 .2804500000D+01 .3830700000D+01 .1115080000D+02 .5218000000D-01 .1882830800D+04 .7388680000D+01 .1729600000D-01 .6794100000D+01 .4037541000D+01 .2457900000D+01 .3430000000D-01 .2283000000D+01 +4 41420140917201410272456917.3 .1475820000D+02 -.4338000000D-01 .1786928800D+04 .6255060000D+01 .2941800000D-01 .6366600000D+01 .4816472000D+01 .3130700000D+01 .1707000000D+00 .5575300000D+01 -.4791500000D+01 -.2810000000D-02 .5937752000D+03 .2543660000D+01 .1261200000D-01 .2252300000D+01 .1657258000D+01 .8758000000D+00 .4335200000D+01 .2425700000D+01 .1336520000D+02 .4731000000D-01 .1882248000D+04 .6407030000D+01 .2893500000D-01 .6809400000D+01 .1020350000D+00 .4812500000D+01 .1932600000D+01 .8448000000D+00 +4 41520141027201412062456957.3 .1311520000D+02 -.2410000000D-01 .1766625500D+04 .4008140000D+01 .4511100000D-01 .6393900000D+01 .9129310000D+00 .5520200000D+01 .2402600000D+01 .4192600000D+01 -.4919300000D+01 .5010000000D-02 .6506805000D+03 .1615180000D+01 .1953300000D-01 .2421100000D+01 .4055583000D+01 .3165100000D+01 .6277900000D+01 .1059300000D+01 .1522670000D+02 .1340000000D-01 .1883378600D+04 .4173980000D+01 .4762900000D-01 .6838500000D+01 .2483854000D+01 .8823000000D+00 .4026000000D+01 .5755800000D+01 +4 41620141206201501152456997.3 .1206020000D+02 .2464000000D-01 .1758189000D+04 .2170000000D+00 .4760400000D-01 .6333500000D+01 .3356811000D+01 .1740600000D+01 .4851800000D+01 .2883400000D+01 -.4758000000D+01 -.4680000000D-02 .6730824000D+03 .1126000000D+00 .1950900000D-01 .2396900000D+01 .2282350000D+00 .1187300000D+01 .2468900000D+01 .6045200000D+01 .1579360000D+02 -.1723000000D-01 .1882139200D+04 .1545800000D+00 .4902000000D-01 .6852800000D+01 .4929136000D+01 .3822000000D+01 .2683000000D+00 .4459300000D+01 +4 41720150115201502242457037.3 .1321470000D+02 .2055000000D-01 .1764072200D+04 .3770540000D+01 .7377000000D-02 .6509600000D+01 .5887522000D+01 .1078200000D+01 .1667700000D+01 .1668500000D+01 -.4880600000D+01 -.5150000000D-02 .6573858000D+03 .1717690000D+01 .4090000000D-02 .2365500000D+01 .2763687000D+01 .4957800000D+01 .1017000000D+00 .4828300000D+01 .1471930000D+02 -.1109000000D-01 .1882696900D+04 .4189820000D+01 .4735000000D-02 .6845300000D+01 .1176401000D+01 .2750300000D+01 .4175600000D+01 .3213900000D+01 +4 41820150224201504052457077.3 .1406170000D+02 .3130000000D-01 .1779314900D+04 .3957920000D+01 .4368000000D-01 .6512400000D+01 .2186329000D+01 .3660000000D+01 .4932000000D+00 .4331000000D+00 -.4972800000D+01 .9300000000D-03 .6143113000D+03 .1688420000D+01 .1901600000D-01 .2171900000D+01 .5342128000D+01 .1409900000D+01 .4484900000D+01 .3577500000D+01 .1409830000D+02 -.3612000000D-01 .1883051200D+04 .4136710000D+01 .4629900000D-01 .6769900000D+01 .3758525000D+01 .5352000000D+01 .2200000000D+01 .2010100000D+01 +4 41920150405201505152457117.3 .1514960000D+02 -.1091000000D-01 .1788803300D+04 .2021800000D+00 .4568500000D-01 .6496100000D+01 .4729014000D+01 .6223700000D+01 .3056400000D+01 .5432700000D+01 -.4979600000D+01 .3800000000D-03 .5874521000D+03 .8830000000D-01 .1963100000D-01 .2167700000D+01 .1595049000D+01 .4416900000D+01 .7809000000D+00 .2298000000D+01 .1303780000D+02 .1181000000D-01 .1882133100D+04 .2131100000D+00 .4767100000D-01 .6834100000D+01 .1738800000D-01 .1274500000D+01 .4684200000D+01 .7084000000D+00 +4 42020150515201506242457157.3 .1494860000D+02 -.4836000000D-01 .1781990200D+04 .3531020000D+01 .2847600000D-01 .6461000000D+01 .9040460000D+00 .5552000000D+01 .5217500000D+01 .4062200000D+01 -.5172200000D+01 .7900000000D-02 .6053543000D+03 .1515340000D+01 .1235800000D-01 .2283400000D+01 .4053380000D+01 .3241700000D+01 .2758900000D+01 .9189000000D+00 .1355360000D+02 .3896000000D-01 .1882638100D+04 .3608420000D+01 .3115400000D-01 .6798900000D+01 .2475282000D+01 .9175000000D+00 .6677000000D+00 .5627200000D+01 +4 42120150624201508032457197.3 .1304890000D+02 -.4879000000D-01 .1764839600D+04 .5748250000D+01 .1580800000D-01 .6371900000D+01 .3294389000D+01 .1634500000D+01 .9011000000D+00 .2628200000D+01 -.4850200000D+01 .1100000000D-02 .6548823000D+03 .2456580000D+01 .9947000000D-02 .2484200000D+01 .1680310000D+00 .5529600000D+01 .4345700000D+01 .5787900000D+01 .1467070000D+02 .6261000000D-01 .1882368700D+04 .6048940000D+01 .1747400000D-01 .6831700000D+01 .4867187000D+01 .3301900000D+01 .2544900000D+01 .4204700000D+01 +4 42220150803201509122457237.3 .1058700000D+02 -.5027000000D-01 .1743165700D+04 .6718850000D+01 .1139500000D-01 .6295000000D+01 .5646748000D+01 .3992400000D+01 .2364200000D+01 .1179000000D+01 -.4505900000D+01 .1041000000D-01 .7117325000D+03 .2851300000D+01 .1042900000D-01 .2665900000D+01 .2532286000D+01 .1461800000D+01 .6042000000D+01 .4348500000D+01 .1690290000D+02 .3347000000D-01 .1882377300D+04 .7108710000D+01 .1346500000D-01 .6788600000D+01 .9382110000D+00 .5651000000D+01 .4070500000D+01 .2764300000D+01 +4 42320150912201510222457277.3 .8353100000D+01 -.6920000000D-01 .1723800100D+04 .6719290000D+01 .1481500000D-01 .6243500000D+01 .1703058000D+01 .5860000000D-01 .3787900000D+01 .6021700000D+01 -.4036900000D+01 .2574000000D-01 .7585378000D+03 .2850640000D+01 .9803000000D-02 .2821600000D+01 .4886309000D+01 .3648200000D+01 .1385500000D+01 .2927300000D+01 .1876690000D+02 .1227000000D-01 .1882697300D+04 .7197420000D+01 .1738200000D-01 .6847900000D+01 .3280667000D+01 .1701600000D+01 .5534400000D+01 .1316800000D+01 +4 42420151022201512012457317.3 .5789500000D+01 -.5458000000D-01 .1710225200D+04 .5807130000D+01 .2988400000D-01 .6160300000D+01 .4052475000D+01 .2437000000D+01 .5744500000D+01 .4587300000D+01 -.3149700000D+01 .2108000000D-01 .7876940000D+03 .2433020000D+01 .1412900000D-01 .2867000000D+01 .9676540000D+00 .5879500000D+01 .2996800000D+01 .1509300000D+01 .1951300000D+02 .2182000000D-01 .1882312600D+04 .6144590000D+01 .2977400000D-01 .6889800000D+01 .5632877000D+01 .4048400000D+01 .1081800000D+01 .6175500000D+01 +4 42520151201201601102457357.3 .3737300000D+01 -.2019000000D-01 .1704804000D+04 .3464570000D+01 .4380200000D-01 .6195000000D+01 .1545220000D+00 .4831000000D+01 .1697000000D+01 .3219100000D+01 -.2364800000D+01 .6260000000D-02 .8009098000D+03 .1359950000D+01 .1933500000D-01 .2921100000D+01 .3367459000D+01 .1900600000D+01 .5035300000D+01 .1549000000D+00 .2024510000D+02 .2500000000D-02 .1882300300D+04 .3783340000D+01 .4969100000D-01 .6914900000D+01 .1738621000D+01 .1443000000D+00 .3291800000D+01 .4804400000D+01 +4 42620160110201602192457397.3 .2761400000D+01 .3550000000D-01 .1703054000D+04 .2630900000D+00 .4334200000D-01 .6211000000D+01 .2608033000D+01 .3991200000D+01 .4207700000D+01 .1917500000D+01 -.2001300000D+01 -.1823000000D-01 .8038290000D+03 .2941100000D+00 .1818000000D-01 .2924300000D+01 .5832116000D+01 .9824000000D+00 .1299000000D+01 .5143500000D+01 .2025360000D+02 -.4050000000D-02 .1881495300D+04 .4328900000D+00 .4458200000D-01 .6848900000D+01 .4193590000D+01 .5687200000D+01 .5809900000D+01 .3518800000D+01 +4 42720160219201603302457437.3 .4399100000D+01 .2052000000D-01 .1704073000D+04 .3889900000D+01 .5371000000D-02 .6195500000D+01 .5146607000D+01 .3945000000D+00 .2272800000D+01 .7041000000D+00 -.2770700000D+01 -.8850000000D-02 .8009704000D+03 .1781630000D+01 .4848000000D-02 .2896000000D+01 .2091165000D+01 .3757800000D+01 .5867900000D+01 .3935400000D+01 .1999610000D+02 -.7980000000D-02 .1882487400D+04 .4286590000D+01 .4206000000D-02 .7018500000D+01 .4497880000D+00 .2048600000D+01 .4774200000D+01 .2283800000D+01 +4 42820160330201605092457477.3 .5444900000D+01 .3227000000D-01 .1709197200D+04 .3550270000D+01 .4317400000D-01 .6253600000D+01 .1444980000D+01 .2983400000D+01 .6110900000D+01 .5762900000D+01 -.3177900000D+01 -.1139000000D-01 .7910578000D+03 .1478530000D+01 .1948800000D-01 .2885000000D+01 .4667147000D+01 .1811000000D+00 .3270700000D+01 .2694600000D+01 .1965840000D+02 -.1436000000D-01 .1881958300D+04 .3741860000D+01 .4567600000D-01 .6836600000D+01 .3030319000D+01 .4617200000D+01 .1468700000D+01 .1052200000D+01 +4 42920160509201606182457517.3 .6603900000D+01 -.1852000000D-01 .1712402900D+04 .1096800000D+00 .4118200000D-01 .6227200000D+01 .3981313000D+01 .2523000000D+01 .2344400000D+01 .4459500000D+01 -.3561500000D+01 .6810000000D-02 .7838169000D+03 .1711200000D+00 .1771200000D-01 .2861700000D+01 .9121050000D+00 .5668600000D+01 .5811000000D+01 .1390700000D+01 .1928680000D+02 .7660000000D-02 .1881637800D+04 .1101900000D+00 .4624600000D-01 .6915200000D+01 .5564397000D+01 .4419600000D+01 .3954500000D+01 .6039200000D+01 +4 43020160618201607282457557.3 .6025900000D+01 -.5330000000D-01 .1709034700D+04 .3432150000D+01 .2778400000D-01 .6181600000D+01 .1509860000D+00 .4857500000D+01 .4551800000D+01 .3089600000D+01 -.3408700000D+01 .2522000000D-01 .7893346000D+03 .1618310000D+01 .1216100000D-01 .2886800000D+01 .3362101000D+01 .2017900000D+01 .1436800000D+01 .1950000000D-01 .1971120000D+02 .9790000000D-02 .1882133200D+04 .3812030000D+01 .2850600000D-01 .6884400000D+01 .1734310000D+01 .1712000000D+00 .6192100000D+01 .4662900000D+01 +4 43120160728201609062457597.3 .4061600000D+01 -.6655000000D-01 .1704455200D+04 .5572900000D+01 .1436100000D-01 .6221000000D+01 .2539801000D+01 .9499000000D+00 .2909000000D+00 .1654700000D+01 -.2519300000D+01 .2783000000D-01 .8011788000D+03 .2500490000D+01 .9306000000D-02 .2945500000D+01 .5754711000D+01 .4292600000D+01 .3107700000D+01 .4874700000D+01 .1977040000D+02 .2863000000D-01 .1881481200D+04 .6089960000D+01 .1727500000D-01 .6868200000D+01 .4123968000D+01 .2560900000D+01 .1751600000D+01 .3240700000D+01 +4 43220160906201610162457637.3 .1094000000D+01 -.5504000000D-01 .1702429600D+04 .6515140000D+01 .1021500000D-01 .6227400000D+01 .4892020000D+01 .3327000000D+01 .1712900000D+01 .2140000000D+00 -.1214200000D+01 .2183000000D-01 .8057840000D+03 .2869620000D+01 .9654000000D-02 .2933000000D+01 .1833273000D+01 .2433000000D+00 .4724400000D+01 .3445600000D+01 .2047540000D+02 .2760000000D-02 .1881624000D+04 .7098020000D+01 .1337100000D-01 .6805600000D+01 .1946270000D+00 .4905900000D+01 .3255900000D+01 .1793500000D+01 +4 43320161016201611252457677.3 -.1561700000D+01 -.6204000000D-01 .1707683300D+04 .6539890000D+01 .1539500000D-01 .6255100000D+01 .9500940000D+00 .5684800000D+01 .3063100000D+01 .5050500000D+01 -.7210000000D-01 .2359000000D-01 .7965716000D+03 .2790980000D+01 .1045900000D-01 .2879600000D+01 .4187616000D+01 .2445700000D+01 .7850000000D-01 .2014100000D+01 .2101330000D+02 -.2862000000D-01 .1881848800D+04 .7110260000D+01 .1800800000D-01 .6862700000D+01 .2538023000D+01 .9551000000D+00 .4692600000D+01 .3545000000D+00 +4 43420161125201701042457717.3 -.3964000000D+01 -.5568000000D-01 .1717483100D+04 .5513130000D+01 .3036300000D-01 .6313300000D+01 .3303954000D+01 .1788300000D+01 .5089700000D+01 .3619300000D+01 .7861000000D+00 .2405000000D-01 .7744359000D+03 .2244960000D+01 .1398400000D-01 .2790100000D+01 .2739420000D+00 .4673800000D+01 .1805800000D+01 .6018000000D+00 .2026920000D+02 -.1032000000D-01 .1881232900D+04 .5960050000D+01 .3327400000D-01 .6858700000D+01 .4893597000D+01 .3303500000D+01 .2760000000D+00 .5220000000D+01 +4 43520170104201702132457757.3 -.5969800000D+01 -.1395000000D-01 .1729109800D+04 .3064140000D+01 .4533100000D-01 .6339300000D+01 .5698054000D+01 .4172000000D+01 .1025600000D+01 .2258800000D+01 .1550500000D+01 .3900000000D-02 .7511464000D+03 .1154930000D+01 .1923300000D-01 .2733200000D+01 .2683797000D+01 .6469000000D+00 .3828100000D+01 .5533300000D+01 .1974260000D+02 -.2970000000D-02 .1880491300D+04 .3308340000D+01 .5021800000D-01 .6898000000D+01 .1006002000D+01 .5709100000D+01 .2578600000D+01 .3861300000D+01 +4 43620170213201703252457797.3 -.6740700000D+01 .4259000000D-01 .1731842100D+04 .8264600000D+00 .3861800000D-01 .6367200000D+01 .1879280000D+01 .3422900000D+01 .3610200000D+01 .9788000000D+00 .1798700000D+01 -.1802000000D-01 .7428235000D+03 .4992600000D+00 .1473600000D-01 .2761600000D+01 .5159160000D+01 .3630000000D-01 .1745000000D+00 .4263400000D+01 .1930530000D+02 .2015000000D-01 .1880257300D+04 .9527800000D+00 .4097700000D-01 .6800700000D+01 .3471524000D+01 .5039500000D+01 .5079400000D+01 .2573700000D+01 +4 43720170325201705042457837.3 -.5018100000D+01 .2558000000D-01 .1725963700D+04 .4110220000D+01 .1038000000D-01 .6327600000D+01 .4425390000D+01 .6062600000D+01 .2547500000D+01 .6033400000D+01 .1131000000D+01 -.1096000000D-01 .7579586000D+03 .1769110000D+01 .6305000000D-02 .2827300000D+01 .1421893000D+01 .2652500000D+01 .5420800000D+01 .3022800000D+01 .2016370000D+02 -.3140000000D-02 .1880465800D+04 .4314560000D+01 .7601000000D-02 .6935200000D+01 .6019186000D+01 .1322100000D+01 .4137600000D+01 .1368600000D+01 +4 43820170504201706132457877.3 -.3812500000D+01 .2652000000D-01 .1717287900D+04 .3191190000D+01 .4338200000D-01 .6227100000D+01 .7212120000D+00 .2361900000D+01 .5499000000D+01 .4811500000D+01 .6422000000D+00 -.9180000000D-02 .7773677000D+03 .1241370000D+01 .1908200000D-01 .2841200000D+01 .3990635000D+01 .5299400000D+01 .2178600000D+01 .1792900000D+01 .2027630000D+02 .2120000000D-02 .1880255300D+04 .3377950000D+01 .4643000000D-01 .6887800000D+01 .2313908000D+01 .3886800000D+01 .7369000000D+00 .1136000000D+00 +4 43920170613201707232457917.3 -.2835700000D+01 -.2456000000D-01 .1713703600D+04 .4404900000D+00 .3995600000D-01 .6263800000D+01 .3248896000D+01 .1826400000D+01 .1675500000D+01 .3498700000D+01 .3064000000D+00 .1150000000D-01 .7830323000D+03 .3600000000D+00 .1668000000D-01 .2847700000D+01 .2247580000D+00 .4905100000D+01 .4572800000D+01 .4713000000D+00 .2043140000D+02 -.1280000000D-02 .1880755100D+04 .5036600000D+00 .4438400000D-01 .6897200000D+01 .4839763000D+01 .3299800000D+01 .3240500000D+01 .5095900000D+01 +4 44020170723201709012457957.3 -.3681300000D+01 -.5243000000D-01 .1717865800D+04 .3611410000D+01 .2771800000D-01 .6222300000D+01 .5695283000D+01 .4195700000D+01 .3928400000D+01 .2116700000D+01 .7337000000D+00 .2043000000D-01 .7739150000D+03 .1673270000D+01 .1196800000D-01 .2747100000D+01 .2667821000D+01 .8605000000D+00 .2403000000D+00 .5375600000D+01 .2044930000D+02 -.1847000000D-01 .1880465100D+04 .4103040000D+01 .2736000000D-01 .6879400000D+01 .1002681000D+01 .5738000000D+01 .5373200000D+01 .3718200000D+01 +4 44120170901201710112457997.3 -.5486100000D+01 -.7337000000D-01 .1729625300D+04 .5773700000D+01 .1476200000D-01 .6345700000D+01 .1798038000D+01 .2994000000D+00 .5843400000D+01 .6922000000D+00 .1426700000D+01 .2657000000D-01 .7479451000D+03 .2521170000D+01 .9962000000D-02 .2650700000D+01 .5058716000D+01 .3116300000D+01 .1758800000D+01 .3959400000D+01 .1951730000D+02 -.1410000000D-01 .1880480200D+04 .6241870000D+01 .1754700000D-01 .6861700000D+01 .3387309000D+01 .1824100000D+01 .9856000000D+00 .2283100000D+01 +4 44220171011201711202458037.3 -.8521500000D+01 -.5202000000D-01 .1748819700D+04 .6715060000D+01 .1173400000D-01 .6365000000D+01 .4149285000D+01 .2667400000D+01 .9761000000D+00 .5536200000D+01 .2481400000D+01 .1166000000D-01 .7014660000D+03 .2811890000D+01 .1134800000D-01 .2411800000D+01 .1139138000D+01 .5316600000D+01 .3478700000D+01 .2538400000D+01 .1846310000D+02 -.2750000000D-01 .1880757900D+04 .7237200000D+01 .1359700000D-01 .6842200000D+01 .5738239000D+01 .4164800000D+01 .2393800000D+01 .8332000000D+00 +4 44320171120201712302458077.3 -.1125130000D+02 -.4320000000D-01 .1774254900D+04 .6683480000D+01 .1770800000D-01 .6492600000D+01 .2089900000D+00 .5008300000D+01 .2389600000D+01 .4092700000D+01 .3238800000D+01 -.2330000000D-02 .6376711000D+03 .2716200000D+01 .1094400000D-01 .2182500000D+01 .3500825000D+01 .1175700000D+01 .5115700000D+01 .1114900000D+01 .1747660000D+02 -.5805000000D-01 .1880958900D+04 .7122720000D+01 .1974500000D-01 .6851900000D+01 .1796981000D+01 .2131000000D+00 .3860200000D+01 .5675000000D+01 +4 44420171230201802082458117.3 -.1302880000D+02 -.4812000000D-01 .1797940700D+04 .5461160000D+01 .3250700000D-01 .6614800000D+01 .2567590000D+01 .1088500000D+01 .4358300000D+01 .2673900000D+01 .3208400000D+01 .4210000000D-02 .5665957000D+03 .2187370000D+01 .1440000000D-01 .1937200000D+01 .5885537000D+01 .3360000000D+01 .4663000000D+00 .6016200000D+01 .1561780000D+02 -.4032000000D-01 .1880273600D+04 .5810600000D+01 .3657100000D-01 .6839400000D+01 .4154325000D+01 .2569900000D+01 .5820600000D+01 .4256300000D+01 +4 44520180208201803202458157.3 -.1456260000D+02 -.1087000000D-01 .1814923000D+04 .2797560000D+01 .4830100000D-01 .6662700000D+01 .4970109000D+01 .3473200000D+01 .3271000000D+00 .1319700000D+01 .3159500000D+01 .2090000000D-02 .5116106000D+03 .1069030000D+01 .1918800000D-01 .1835700000D+01 .2031303000D+01 .5608600000D+01 .2537000000D+01 .4673400000D+01 .1408500000D+02 -.5070000000D-02 .1879888300D+04 .2868010000D+01 .4957000000D-01 .6825300000D+01 .2721910000D+00 .4977300000D+01 .1842200000D+01 .2908300000D+01 +4 44620180320201804292458197.3 -.1502110000D+02 .3430000000D-01 .1817884600D+04 .1353340000D+01 .3471800000D-01 .6597400000D+01 .1160797000D+01 .2779200000D+01 .2935700000D+01 .5380000000D-01 .3125000000D+01 .2230000000D-02 .4993972000D+03 .5694800000D+00 .1361800000D-01 .1861400000D+01 .4518229000D+01 .5098300000D+01 .5119600000D+01 .3411600000D+01 .1337970000D+02 .4617000000D-01 .1879438600D+04 .1358580000D+01 .3837300000D-01 .6810900000D+01 .2746707000D+01 .4286300000D+01 .4391300000D+01 .1623100000D+01 +4 44720180429201806082458237.3 -.1379040000D+02 .3054000000D-01 .1808546300D+04 .4317470000D+01 .1497400000D-01 .6671200000D+01 .3712936000D+01 .5409400000D+01 .2144700000D+01 .5115300000D+01 .3340300000D+01 -.7800000000D-02 .5361883000D+03 .1673550000D+01 .5840000000D-02 .2088000000D+01 .7740340000D+00 .1382400000D+01 .4341000000D+01 .2165100000D+01 .1525000000D+02 .5640000000D-02 .1879246200D+04 .4438360000D+01 .1369600000D-01 .6784000000D+01 .5300106000D+01 .5810000000D+00 .3379800000D+01 .4196000000D+00 +4 44820180608201807182458277.3 -.1258700000D+02 .1844000000D-01 .1793082800D+04 .2931540000D+01 .4495800000D-01 .6478600000D+01 .5006000000D-02 .1695400000D+01 .4833800000D+01 .3866800000D+01 .3152200000D+01 -.6100000000D-03 .5829908000D+03 .1082130000D+01 .1801900000D-01 .2148600000D+01 .3325994000D+01 .3968100000D+01 .9298000000D+00 .8952000000D+00 .1595550000D+02 .8520000000D-02 .1879807700D+04 .3083750000D+01 .4814300000D-01 .6843600000D+01 .1592636000D+01 .3163900000D+01 .1780000000D-01 .5458900000D+01 +4 44920180718201808272458317.3 -.1190090000D+02 -.2701000000D-01 .1787701000D+04 .8067700000D+00 .4159200000D-01 .6539200000D+01 .2523801000D+01 .1122000000D+01 .9815000000D+00 .2554400000D+01 .3056200000D+01 .7820000000D-02 .5963603000D+03 .4499800000D+00 .1683800000D-01 .2140400000D+01 .5830409000D+01 .3778100000D+01 .3285500000D+01 .5859700000D+01 .1639670000D+02 -.1755000000D-01 .1880295700D+04 .9258800000D+00 .4293300000D-01 .6840200000D+01 .4111045000D+01 .2563600000D+01 .2497000000D+01 .4144100000D+01 +4 45020180827201810062458357.3 -.1288170000D+02 -.4193000000D-01 .1797684000D+04 .4100340000D+01 .2758600000D-01 .6563900000D+01 .4963238000D+01 .3498200000D+01 .3195900000D+01 .1161500000D+01 .3339300000D+01 -.2970000000D-02 .5668495000D+03 .1773570000D+01 .1218200000D-01 .1957300000D+01 .1987394000D+01 .5889800000D+01 .5101500000D+01 .4481700000D+01 .1574610000D+02 -.4348000000D-01 .1879613500D+04 .4389250000D+01 .2863200000D-01 .6747400000D+01 .2657270000D+00 .5012800000D+01 .4570500000D+01 .2762600000D+01 +4 45120181006201811152458397.3 -.1426630000D+02 -.6202000000D-01 .1817214600D+04 .6282560000D+01 .1737400000D-01 .6650900000D+01 .1060826000D+01 .5878400000D+01 .4907100000D+01 .6021600000D+01 .3259900000D+01 -.6350000000D-02 .4983810000D+03 .2593640000D+01 .1270700000D-01 .1647100000D+01 .4385169000D+01 .1815200000D+01 .4786000000D+00 .3076800000D+01 .1397890000D+02 -.5562000000D-01 .1880647200D+04 .6526400000D+01 .1686400000D-01 .6809300000D+01 .2643897000D+01 .1074000000D+01 .2041000000D+00 .1321400000D+01 +4 45220181115201812252458437.3 -.1665900000D+02 -.3551000000D-01 .1841665400D+04 .7174300000D+01 .1565500000D-01 .6651200000D+01 .3408873000D+01 .1924400000D+01 .1187000000D+00 .4571500000D+01 .2916200000D+01 -.1400000000D-01 .3992344000D+03 .2988540000D+01 .1206900000D-01 .1235900000D+01 .4904090000D+00 .3956200000D+01 .2212200000D+01 .1693300000D+01 .1132900000D+02 -.5222000000D-01 .1880467200D+04 .7473650000D+01 .1464100000D-01 .6789900000D+01 .4989691000D+01 .3418300000D+01 .1513900000D+01 .6158300000D+01 +4 45320181225201902032458477.3 -.1877370000D+02 -.6850000000D-02 .1863858400D+04 .7009580000D+01 .2142700000D-01 .6744600000D+01 .5750871000D+01 .4227100000D+01 .1597600000D+01 .3132800000D+01 .2333900000D+01 -.2611000000D-01 .2844973000D+03 .2987860000D+01 .1226300000D-01 .8323000000D+00 .2916722000D+01 .6103200000D+01 .3744600000D+01 .3519000000D+00 .8931500000D+01 -.6914000000D-01 .1881040000D+04 .7197520000D+01 .2157200000D-01 .6830900000D+01 .1045086000D+01 .5746400000D+01 .3067800000D+01 .4711200000D+01 +4 45420190203201903152458517.3 -.1934370000D+02 -.2092000000D-01 .1876287300D+04 .5550670000D+01 .3587300000D-01 .6802000000D+01 .1827753000D+01 .2764000000D+00 .3519200000D+01 .1721300000D+01 .1392600000D+01 -.2139000000D-01 .1789318000D+03 .2381110000D+01 .1567600000D-01 .4918000000D+00 .5458348000D+01 .2021200000D+01 .5383700000D+01 .5493000000D+01 .6544900000D+01 -.5976000000D-01 .1880704300D+04 .5693470000D+01 .3734000000D-01 .6847400000D+01 .3402376000D+01 .1823000000D+01 .5078300000D+01 .3293600000D+01 +4 45520190315201904242458557.3 -.1978130000D+02 -.9530000000D-02 .1880974300D+04 .2634790000D+01 .5015400000D-01 .6833700000D+01 .4234247000D+01 .2672600000D+01 .5816100000D+01 .3788000000D+00 .5262000000D+00 -.3900000000D-03 .1157507000D+03 .1137440000D+01 .2130700000D-01 .3828000000D+00 .1887463000D+01 .4311300000D+01 .1171200000D+01 .4384000000D+01 .4476200000D+01 -.6750000000D-02 .1880924000D+04 .2637750000D+01 .4986500000D-01 .6803500000D+01 .5806763000D+01 .4220500000D+01 .1078300000D+01 .1944300000D+01 +4 45620190424201906032458597.3 -.1977950000D+02 .2180000000D-02 .1881380400D+04 .1639480000D+01 .3378500000D-01 .6727100000D+01 .4306090000D+00 .2001500000D+01 .2113100000D+01 .5389700000D+01 .2957000000D+00 .2245000000D-01 .1072848000D+03 .6953000000D+00 .1484000000D-01 .4440000000D+00 .4458120000D+01 .3585900000D+01 .3871900000D+01 .2954600000D+01 .3677700000D+01 .6112000000D-01 .1880184100D+04 .1662160000D+01 .3540600000D-01 .6833200000D+01 .2002966000D+01 .3521300000D+01 .3699100000D+01 .6761000000D+00 +4 45720190603201907132458637.3 -.1987310000D+02 .2988000000D-01 .1879278400D+04 .4390650000D+01 .1584100000D-01 .6802800000D+01 .2986642000D+01 .4615100000D+01 .1345700000D+01 .4192700000D+01 .1302700000D+01 .2710000000D-02 .1475781000D+03 .1916300000D+01 .8051000000D-02 .6297000000D+00 .4396270000D+00 .6279700000D+01 .2833300000D+01 .1514700000D+01 .5955000000D+01 .2090000000D-01 .1880631100D+04 .4601770000D+01 .1932600000D-01 .6840700000D+01 .4559739000D+01 .6130100000D+01 .2759800000D+01 .5738000000D+01 +4 45820190713201908222458677.3 -.1903040000D+02 .8380000000D-02 .1872810400D+04 .2784660000D+01 .4791000000D-01 .6770600000D+01 .5559307000D+01 .9039000000D+00 .4041700000D+01 .2924400000D+01 .1670500000D+01 .5270000000D-02 .2078808000D+03 .1200590000D+01 .2045500000D-01 .8026000000D+00 .2816391000D+01 .2602400000D+01 .5828800000D+01 .1534000000D+00 .7260200000D+01 .9370000000D-02 .1880931500D+04 .2880610000D+01 .4998700000D-01 .6786200000D+01 .8511700000D+00 .2432400000D+01 .5574700000D+01 .4502500000D+01 +4 45920190822201910012458717.3 -.1866630000D+02 -.2105000000D-01 .1870806900D+04 .1192900000D+01 .4357100000D-01 .6797900000D+01 .1788285000D+01 .3074000000D+00 .1880000000D+00 .1607900000D+01 .1761900000D+01 -.5540000000D-02 .2225954000D+03 .5388400000D+00 .1839300000D-01 .7288000000D+00 .5283348000D+01 .2355200000D+01 .1903800000D+01 .5128800000D+01 .7829900000D+01 -.3558000000D-01 .1880846300D+04 .1277430000D+01 .4308800000D-01 .6820800000D+01 .3363830000D+01 .1835800000D+01 .1715700000D+01 .3180300000D+01 +4 46020191001201911102458757.3 -.1935980000D+02 -.1406000000D-01 .1875795500D+04 .4698180000D+01 .2730200000D-01 .6806700000D+01 .4220306000D+01 .2704000000D+01 .2237500000D+01 .2175000000D+00 .1404900000D+01 -.2403000000D-01 .1732775000D+03 .1992810000D+01 .1482300000D-01 .4799000000D+00 .1511399000D+01 .4520100000D+01 .3723400000D+01 .4020700000D+01 .6497400000D+01 -.5898000000D-01 .1880666900D+04 .4684410000D+01 .3004200000D-01 .6703200000D+01 .5793870000D+01 .4249100000D+01 .3825200000D+01 .1778400000D+01 +4 46120191110201912202458797.3 -.1976770000D+02 -.1764000000D-01 .1881363900D+04 .6771800000D+01 .2064000000D-01 .6818000000D+01 .3099230000D+00 .5047600000D+01 .3934100000D+01 .5062300000D+01 .5921000000D+00 -.4049000000D-01 .8583260000D+02 .2959220000D+01 .1260400000D-01 .2500000000D+00 .4352318000D+01 .4247000000D+00 .5365700000D+01 .3640800000D+01 .4214400000D+01 -.8230000000D-01 .1881719900D+04 .6919220000D+01 .1612900000D-01 .6780400000D+01 .1881935000D+01 .3091000000D+00 .5588000000D+01 .3433000000D+00 +4 46220191220202001292458837.3 -.2024650000D+02 .1500000000D-02 .1881057500D+04 .7613340000D+01 .1782500000D-01 .6749600000D+01 .2651597000D+01 .1055900000D+01 .5410700000D+01 .3605300000D+01 -.9347000000D+00 -.3199000000D-01 .1012283000D+03 .3343310000D+01 .1321800000D-01 .6000000000D+00 .1999436000D+01 .2600700000D+01 .6743000000D+00 .3171800000D+01 .6620000000D+00 -.6663000000D-01 .1881123300D+04 .7729790000D+01 .1641100000D-01 .6723600000D+01 .4221093000D+01 .2653600000D+01 .6836000000D+00 .5173600000D+01 +4 46320200129202003092458877.3 -.2053240000D+02 .3575000000D-01 .1870812500D+04 .7274120000D+01 .2406900000D-01 .6737400000D+01 .4988126000D+01 .3349800000D+01 .6937000000D+00 .2156000000D+01 -.2464600000D+01 -.1889000000D-01 .2233075000D+03 .3118190000D+01 .1268900000D-01 .1002000000D+01 .4744173000D+01 .4754800000D+01 .2315300000D+01 .1962700000D+01 -.2576900000D+01 -.6186000000D-01 .1882415300D+04 .7326750000D+01 .2237300000D-01 .6787600000D+01 .2721640000D+00 .4971200000D+01 .2272700000D+01 .3731000000D+01 +4 46420200309202004182458917.3 -.1958180000D+02 .2158000000D-01 .1853907400D+04 .5650690000D+01 .3746500000D-01 .6694300000D+01 .1061052000D+01 .5680900000D+01 .2643300000D+01 .7412000000D+00 -.3322300000D+01 -.1859000000D-01 .3323424000D+03 .2391430000D+01 .1606300000D-01 .1342500000D+01 .9208580000D+00 .6806000000D+00 .3958200000D+01 .6173000000D+00 -.4837400000D+01 -.6309000000D-01 .1882187100D+04 .5724260000D+01 .3714700000D-01 .6814100000D+01 .2627512000D+01 .1044300000D+01 .4286800000D+01 .2314400000D+01 +4 46520200418202005282458957.3 -.1859230000D+02 -.5560000000D-02 .1840109300D+04 .2616100000D+01 .4949100000D-01 .6628400000D+01 .3465139000D+01 .1800600000D+01 .4947200000D+01 .5681700000D+01 -.3959800000D+01 -.3420000000D-02 .3997272000D+03 .1103350000D+01 .2147200000D-01 .1472600000D+01 .3365073000D+01 .3048900000D+01 .6116900000D+01 .5593200000D+01 -.6843700000D+01 -.1064000000D-01 .1882386500D+04 .2661690000D+01 .5075400000D-01 .6818700000D+01 .5031475000D+01 .3442900000D+01 .2983000000D+00 .9615000000D+00 +4 46620200528202007072458997.3 -.1812260000D+02 -.3746000000D-01 .1837209400D+04 .1607200000D+01 .3556500000D-01 .6638100000D+01 .5944545000D+01 .1102800000D+01 .1252000000D+01 .4404200000D+01 -.4047100000D+01 .9450000000D-02 .4105306000D+03 .7447900000D+00 .1490300000D-01 .1391200000D+01 .5856643000D+01 .2170900000D+01 .2509600000D+01 .4295600000D+01 -.7518200000D+01 .5201000000D-01 .1882085200D+04 .1723460000D+01 .3459800000D-01 .6778300000D+01 .1227747000D+01 .2768400000D+01 .2908400000D+01 .5982800000D+01 +4 46720200707202008162459037.3 -.1977830000D+02 .1735000000D-01 .1847307100D+04 .4463870000D+01 .1727900000D-01 .6627500000D+01 .2218634000D+01 .3707700000D+01 .2978000000D+00 .3198700000D+01 -.3616300000D+01 .1313000000D-01 .3633196000D+03 .1978680000D+01 .8113000000D-02 .1149800000D+01 .2122562000D+01 .4953300000D+01 .1529600000D+01 .3132500000D+01 -.5788200000D+01 .3894000000D-01 .1883005000D+04 .4672080000D+01 .2055600000D-01 .6936500000D+01 .3785515000D+01 .5380100000D+01 .2138200000D+01 .4773600000D+01 +4 46820200816202009252459077.3 -.1982120000D+02 .1130000000D-02 .1858813100D+04 .2764660000D+01 .5073400000D-01 .6741000000D+01 .4792599000D+01 .1320000000D-01 .3153300000D+01 .1950800000D+01 -.3018500000D+01 .3930000000D-02 .2998555000D+03 .1243880000D+01 .2210500000D-01 .1046300000D+01 .4671899000D+01 .1321300000D+01 .4470400000D+01 .1824700000D+01 -.4065400000D+01 .7730000000D-02 .1882345600D+04 .2800710000D+01 .5127700000D-01 .6824000000D+01 .7727900000D-01 .1662600000D+01 .4805800000D+01 .3516700000D+01 +4 46920200925202011042459117.3 -.1979630000D+02 .2230000000D-02 .1861030100D+04 .1465870000D+01 .4403800000D-01 .6748400000D+01 .1018992000D+01 .5698900000D+01 .5580600000D+01 .6251000000D+00 -.2869500000D+01 -.1449000000D-01 .2857292000D+03 .5943500000D+00 .1947400000D-01 .1108600000D+01 .8934520000D+00 .8101000000D+00 .5393000000D+00 .5288000000D+00 -.3459500000D+01 -.4653000000D-01 .1882018300D+04 .1478010000D+01 .4503400000D-01 .6847100000D+01 .2586988000D+01 .1060100000D+01 .9250000000D+00 .2195400000D+01 +4 47020201104202012142459157.3 -.1946240000D+02 .2200000000D-01 .1851470600D+04 .5011280000D+01 .2833600000D-01 .6587400000D+01 .3444004000D+01 .1828000000D+01 .1266400000D+01 .5511700000D+01 -.3572900000D+01 -.1405000000D-01 .3379877000D+03 .2157690000D+01 .1301000000D-01 .1390700000D+01 .3348790000D+01 .3094100000D+01 .2282000000D+01 .5435800000D+01 -.5151100000D+01 -.5706000000D-01 .1882313000D+04 .5021870000D+01 .2923900000D-01 .6823100000D+01 .5011557000D+01 .3451000000D+01 .3062800000D+01 .7821000000D+00 +4 47120201214202101232459197.3 -.1849810000D+02 .4126000000D-01 .1832507200D+04 .7003830000D+01 .1782200000D-01 .6565600000D+01 .5807959000D+01 .4146600000D+01 .3071900000D+01 .4065800000D+01 -.4173600000D+01 -.2162000000D-01 .4325953000D+03 .2999900000D+01 .1324900000D-01 .1759200000D+01 .5749494000D+01 .5312600000D+01 .3803800000D+01 .4023300000D+01 -.7425200000D+01 -.7816000000D-01 .1882287400D+04 .7253010000D+01 .1773400000D-01 .6843600000D+01 .1093032000D+01 .5811200000D+01 .4654500000D+01 .5625700000D+01 diff --git a/GUI/xephem/auxil/jupiter.9910 b/GUI/xephem/auxil/jupiter.9910 new file mode 100644 index 0000000..cf276e3 --- /dev/null +++ b/GUI/xephem/auxil/jupiter.9910 @@ -0,0 +1,515 @@ + 5 4 2 149 296 406 3.5516 1.7693 .8782 .3765 30.0 30.0 40.0 40.0 516 2451179.500 1999 +1 219990101199901312451179.4 .1382600000D+01 .2699000000D-01 .3809100000D+03 .1134440000D+01 .6587000000D-02 .7778000000D+00 .2864373000D+01 .1288900000D+01 .8982000000D+00 .1676000000D+00 .5811000000D+00 .1390000000D-01 .1814814000D+03 .5271400000D+00 .3117000000D-02 .3722000000D+00 .2945919000D+01 .1466100000D+01 .7458000000D+00 .2509000000D+00 -.2171200000D+01 .2844000000D-01 .4214696000D+03 .1266450000D+01 .6335000000D-02 .8564000000D+00 .4450317000D+01 .2891300000D+01 .2407400000D+01 .1744200000D+01 +1 319990131199903022451209.4 .2082900000D+01 .1389000000D-01 .3805984000D+03 .1497530000D+01 .3749000000D-02 .8120000000D+00 .2494787000D+01 .9268000000D+00 .5370000000D-01 .6220900000D+01 .9482000000D+00 .8000000000D-02 .1821898000D+03 .6759400000D+00 .2640000000D-02 .3908000000D+00 .2581254000D+01 .1020100000D+01 .5966000000D+01 .2160000000D-01 -.1265100000D+01 .4325000000D-01 .4214573000D+03 .1623530000D+01 .5010000000D-02 .8455000000D+00 .4081602000D+01 .2521000000D+01 .1546100000D+01 .1447000000D+01 +1 419990302199904012451239.4 .2361100000D+01 -.7470000000D-02 .3810528000D+03 .1648270000D+01 .3436000000D-02 .8124000000D+00 .2104742000D+01 .5628000000D+00 .5318300000D+01 .5973400000D+01 .1117100000D+01 -.2090000000D-02 .1812761000D+03 .7274900000D+00 .3040000000D-02 .3860000000D+00 .2199954000D+01 .5448000000D+00 .5094700000D+01 .6068100000D+01 -.4850000000D-01 .4760000000D-01 .4214653000D+03 .1797810000D+01 .3764000000D-02 .8521000000D+00 .3693457000D+01 .2118700000D+01 .6372000000D+00 .1206500000D+01 +1 519990401199905012451269.4 .2093400000D+01 -.2950000000D-01 .3827445000D+03 .1644100000D+01 .2914000000D-02 .7914000000D+00 .1708213000D+01 .1772000000D+00 .4489200000D+01 .5699700000D+01 .1023000000D+01 -.1237000000D-01 .1780890000D+03 .7067500000D+00 .2797000000D-02 .3640000000D+00 .1814912000D+01 .2510000000D-01 .4373800000D+01 .5810800000D+01 .1279900000D+01 .3385000000D-01 .4213461000D+03 .1833180000D+01 .4462000000D-02 .8482000000D+00 .3298682000D+01 .1726800000D+01 .5820600000D+01 .9607000000D+00 +1 619990501199905312451299.4 .1243800000D+01 -.3954000000D-01 .3853988000D+03 .1560720000D+01 .3843000000D-02 .7863000000D+00 .1316444000D+01 .6077800000D+01 .3342200000D+01 .5381600000D+01 .6584000000D+00 -.1649000000D-01 .1725360000D+03 .6537400000D+00 .2709000000D-02 .3428000000D+00 .1436711000D+01 .5780400000D+01 .3420600000D+01 .5509600000D+01 .2293700000D+01 .1152000000D-01 .4212112000D+03 .1703390000D+01 .5733000000D-02 .8421000000D+00 .2907423000D+01 .1347000000D+01 .5174200000D+01 .7006000000D+00 +1 719990531199906302451329.4 .2230000000D-01 -.3587000000D-01 .3885407000D+03 .1362880000D+01 .6606000000D-02 .7743000000D+00 .9380370000D+00 .5727700000D+01 .2767900000D+01 .5113300000D+01 .1434000000D+00 -.1427000000D-01 .1652750000D+03 .5535600000D+00 .3266000000D-02 .3201000000D+00 .1073506000D+01 .5281700000D+01 .2614900000D+01 .5268200000D+01 .2667300000D+01 -.8380000000D-02 .4212270000D+03 .1436110000D+01 .6372000000D-02 .8865000000D+00 .2529255000D+01 .9594000000D+00 .4459200000D+01 .4331000000D+00 +1 819990630199907302451359.4 -.1141500000D+01 -.2615000000D-01 .3917219000D+03 .9938500000D+00 .8631000000D-02 .7678000000D+00 .5822470000D+00 .5401000000D+01 .2354100000D+01 .4919200000D+01 -.3284000000D+00 -.1002000000D-01 .1577880000D+03 .3914000000D+00 .3613000000D-02 .3029000000D+00 .7335330000D+00 .4791600000D+01 .1913500000D+01 .5099100000D+01 .2308200000D+01 -.1820000000D-01 .4212006000D+03 .1054940000D+01 .8892000000D-02 .9197000000D+00 .2173872000D+01 .5856000000D+00 .3786500000D+01 .2299000000D+00 +1 919990730199908292451389.4 -.1954800000D+01 -.1533000000D-01 .3941826000D+03 .4696100000D+00 .1036800000D-01 .7526000000D+00 .2601120000D+00 .5072000000D+01 .1926400000D+01 .4770600000D+01 -.6541000000D+00 -.6730000000D-02 .1521220000D+03 .1825600000D+00 .4258000000D-02 .2877000000D+00 .4256450000D+00 .4238100000D+01 .1310200000D+01 .4967900000D+01 .1518300000D+01 -.2405000000D-01 .4210865000D+03 .4953000000D+00 .1135300000D-01 .9184000000D+00 .1851732000D+01 .2659000000D+00 .3410100000D+01 .1007000000D+00 +1 1019990829199909282451419.4 -.2316600000D+01 -.5920000000D-02 .3948912000D+03 .1745600000D+00 .1001800000D-01 .7664000000D+00 .6265416000D+01 .1654100000D+01 .1663200000D+01 .4660800000D+01 -.8301000000D+00 -.4690000000D-02 .1503292000D+03 .9209000000D-01 .3977000000D-02 .2948000000D+00 .1567310000D+00 .1457300000D+01 .1054900000D+01 .4844600000D+01 .6115000000D+00 -.2701000000D-01 .4210218000D+03 .2396900000D+00 .9703000000D-02 .8663000000D+00 .1573932000D+01 .3114600000D+01 .3202200000D+01 .6263500000D+01 +1 1119990928199910282451449.4 -.2367400000D+01 .4360000000D-02 .3936112000D+03 .7807000000D+00 .3448000000D-02 .7903000000D+00 .6034984000D+01 .1400300000D+01 .1818100000D+01 .4526200000D+01 -.9261000000D+00 -.1400000000D-02 .1533345000D+03 .3283000000D+00 .1100000000D-02 .3124000000D+00 .6209204000D+01 .8969000000D+00 .1437700000D+01 .4693700000D+01 -.2387000000D+00 -.2729000000D-01 .4210791000D+03 .9076500000D+00 .1573000000D-02 .8478000000D+00 .1344499000D+01 .2924200000D+01 .3422100000D+01 .6172100000D+01 +1 1219991028199911272451479.4 -.2176500000D+01 .1403000000D-01 .3911994000D+03 .9479800000D+00 .7622000000D-02 .7987000000D+00 .5834586000D+01 .1197300000D+01 .4179300000D+01 .4412900000D+01 -.9438000000D+00 .3510000000D-02 .1591384000D+03 .3804800000D+00 .3459000000D-02 .3279000000D+00 .5999467000D+01 .7033000000D+00 .3800300000D+01 .4572900000D+01 -.1046700000D+01 -.2263000000D-01 .4211739000D+03 .1038890000D+01 .9100000000D-02 .8796000000D+00 .1145282000D+01 .2740600000D+01 .5881800000D+01 .6080500000D+01 +1 1319991127199912272451509.4 -.1764500000D+01 .2436000000D-01 .3892615000D+03 .4841300000D+00 .1299100000D-01 .7884000000D+00 .5623213000D+01 .9927000000D+00 .4099200000D+01 .4283500000D+01 -.8468000000D+00 .9460000000D-02 .1637819000D+03 .1723200000D+00 .5479000000D-02 .3285000000D+00 .5775510000D+01 .4046000000D+00 .3750900000D+01 .4439700000D+01 -.1836800000D+01 -.1409000000D-01 .4212440000D+03 .4820300000D+00 .1326300000D-01 .9043000000D+00 .9337410000D+00 .2534200000D+01 .5686300000D+01 .5992100000D+01 +1 1419991227200001262451539.4 -.1001900000D+01 .3017000000D-01 .3887642000D+03 .2815100000D+00 .1131200000D-01 .7692000000D+00 .5364675000D+01 .3835700000D+01 .3833400000D+01 .4145500000D+01 -.5594000000D+00 .1281000000D-01 .1648470000D+03 .1601600000D+00 .4549000000D-02 .3198000000D+00 .5507716000D+01 .3742300000D+01 .3385100000D+01 .4296200000D+01 -.2467000000D+01 -.2980000000D-02 .4212909000D+03 .3356000000D+00 .1149300000D-01 .8794000000D+00 .6738290000D+00 .5409100000D+01 .5311200000D+01 .5821800000D+01 +1 1520000126200002252451569.4 .3490000000D-01 .3236000000D-01 .3898679000D+03 .9520700000D+00 .7368000000D-02 .7897000000D+00 .5051482000D+01 .3566700000D+01 .3305800000D+01 .3944100000D+01 -.1283000000D+00 .1336000000D-01 .1619643000D+03 .4261800000D+00 .3190000000D-02 .3186000000D+00 .5191856000D+01 .3245600000D+01 .2537000000D+01 .4081800000D+01 -.2700600000D+01 .9380000000D-02 .4213783000D+03 .1029120000D+01 .7992000000D-02 .8214000000D+00 .3593910000D+00 .5069100000D+01 .4814300000D+01 .5563300000D+01 +1 1620000225200003262451599.4 .1149500000D+01 .2802000000D-01 .3926002000D+03 .1372830000D+01 .5380000000D-02 .8214000000D+00 .4696234000D+01 .3227200000D+01 .2539000000D+01 .3702600000D+01 .3298000000D+00 .1028000000D-01 .1552670000D+03 .5815000000D+00 .3139000000D-02 .3129000000D+00 .4840786000D+01 .2766600000D+01 .1570800000D+01 .3839900000D+01 -.2369900000D+01 .2334000000D-01 .4213262000D+03 .1499660000D+01 .4596000000D-02 .8244000000D+00 .3523000000D-02 .4705400000D+01 .4090300000D+01 .5253400000D+01 +1 1720000326200004252451629.4 .2049600000D+01 .1598000000D-01 .3967628000D+03 .1595600000D+01 .3763000000D-02 .8633000000D+00 .4316410000D+01 .2835400000D+01 .1858300000D+01 .3442400000D+01 .6631000000D+00 .4510000000D-02 .1448731000D+03 .6618500000D+00 .2979000000D-02 .2999000000D+00 .4471615000D+01 .2223400000D+01 .7312000000D+00 .3584300000D+01 -.1559900000D+01 .3910000000D-01 .4211787000D+03 .1746020000D+01 .3774000000D-02 .8437000000D+00 .5905710000D+01 .4335900000D+01 .2911500000D+01 .4975000000D+01 +1 1820000425200005252451659.4 .2540800000D+01 -.6060000000D-02 .4016292000D+03 .1702700000D+01 .2683000000D-02 .8716000000D+00 .3926409000D+01 .2438400000D+01 .5558000000D+00 .3165600000D+01 .7996000000D+00 -.3170000000D-02 .1310323000D+03 .6976800000D+00 .3068000000D-02 .2652000000D+00 .4099217000D+01 .1670500000D+01 .6121000000D+01 .3321000000D+01 -.3775000000D+00 .4607000000D-01 .4211199000D+03 .1792290000D+01 .4168000000D-02 .8456000000D+00 .5513566000D+01 .3948800000D+01 .2141300000D+01 .4749400000D+01 +1 1920000525200006242451689.4 .2452400000D+01 -.2917000000D-01 .4065760000D+03 .1672180000D+01 .4539000000D-02 .8442000000D+00 .3536525000D+01 .2057400000D+01 .5864400000D+01 .2910900000D+01 .7253000000D+00 -.8720000000D-02 .1145680000D+03 .6831900000D+00 .3168000000D-02 .2215000000D+00 .3735512000D+01 .1120800000D+01 .5371400000D+01 .3092500000D+01 .9385000000D+00 .3761000000D-01 .4211747000D+03 .1723710000D+01 .3959000000D-02 .8302000000D+00 .5121702000D+01 .3545100000D+01 .1232900000D+01 .4482700000D+01 +1 2020000624200007242451719.4 .1702500000D+01 -.4109000000D-01 .4111478000D+03 .1482310000D+01 .5582000000D-02 .8183000000D+00 .3155751000D+01 .1671000000D+01 .5225400000D+01 .2649600000D+01 .4979000000D+00 -.9550000000D-02 .9699670000D+02 .6268200000D+00 .2827000000D-02 .1810000000D+00 .3391962000D+01 .5714000000D+00 .4501600000D+01 .2891200000D+01 .2102600000D+01 .1439000000D-01 .4211437000D+03 .1556230000D+01 .5827000000D-02 .8456000000D+00 .4738927000D+01 .3161000000D+01 .3558000000D+00 .4211400000D+01 +1 2120000724200008232451749.4 .5085000000D+00 -.3941000000D-01 .4147884000D+03 .1179910000D+01 .7609000000D-02 .8106000000D+00 .2793392000D+01 .1276900000D+01 .4484800000D+01 .2422200000D+01 .2362000000D+00 -.7110000000D-02 .8045140000D+02 .5263200000D+00 .3375000000D-02 .1501000000D+00 .3079774000D+01 .6200000000D-01 .3512000000D+01 .2760500000D+01 .2707900000D+01 -.7490000000D-02 .4211636000D+03 .1224710000D+01 .8062000000D-02 .9065000000D+00 .4373912000D+01 .2801800000D+01 .6087400000D+01 .3974100000D+01 +1 2220000823200009222451779.4 -.7424000000D+00 -.3020000000D-01 .4169722000D+03 .7330000000D+00 .1095300000D-01 .8493000000D+00 .2459165000D+01 .9300000000D+00 .4040600000D+01 .2258700000D+01 .2910000000D-01 -.4830000000D-02 .6759620000D+02 .3464400000D+00 .4571000000D-02 .1350000000D+00 .2803382000D+01 .5901700000D+01 .2863500000D+01 .2652500000D+01 .2632900000D+01 -.2074000000D-01 .4213131000D+03 .7175100000D+00 .1001700000D-01 .9242000000D+00 .4037512000D+01 .2440700000D+01 .5584400000D+01 .3787800000D+01 +1 2320000922200010222451809.4 -.1664600000D+01 -.2212000000D-01 .4178100000D+03 .8876000000D-01 .1167900000D-01 .8579000000D+00 .2164094000D+01 .8908000000D+00 .3837700000D+01 .2133400000D+01 -.1106000000D+00 -.4790000000D-02 .6130720000D+02 .7354000000D-01 .4903000000D-02 .1289000000D+00 .2548702000D+01 .5399300000D+01 .2516000000D+01 .2526700000D+01 .2052400000D+01 -.2537000000D-01 .4213631000D+03 .7336000000D-01 .1118400000D-01 .9020000000D+00 .3741811000D+01 .1629000000D+01 .5214800000D+01 .3645900000D+01 +1 2420001022200011212451839.4 -.2228600000D+01 -.1279000000D-01 .4174854000D+03 .6398300000D+00 .6191000000D-02 .8384000000D+00 .1916395000D+01 .3506900000D+01 .3840600000D+01 .2017000000D+01 -.2409000000D+00 -.5580000000D-02 .6352820000D+02 .2416100000D+00 .2805000000D-02 .1367000000D+00 .2290333000D+01 .2307800000D+01 .2428000000D+01 .2348500000D+01 .1297600000D+01 -.2871000000D-01 .4212206000D+03 .6509300000D+00 .6553000000D-02 .8668000000D+00 .3494806000D+01 .5101900000D+01 .5048200000D+01 .3527500000D+01 +1 2520001121200012212451869.4 -.2500700000D+01 -.2200000000D-02 .4160023000D+03 .1021010000D+01 .4846000000D-02 .8059000000D+00 .1708570000D+01 .3359900000D+01 .6272600000D+01 .1868500000D+01 -.3901000000D+00 -.4650000000D-02 .7318530000D+02 .4186100000D+00 .1507000000D-02 .1523000000D+00 .2030496000D+01 .2119500000D+01 .5157600000D+01 .2158600000D+01 .5532000000D+00 -.3334000000D-01 .4211887000D+03 .1048610000D+01 .4370000000D-02 .8806000000D+00 .3288273000D+01 .4872500000D+01 .1633700000D+01 .3468400000D+01 +1 2620001221200101202451899.4 -.2576100000D+01 .1234000000D-01 .4138585000D+03 .7129700000D+00 .1158800000D-01 .8045000000D+00 .1505918000D+01 .3194900000D+01 .4160000000D-01 .1752800000D+01 -.5268000000D+00 -.4300000000D-03 .8430210000D+02 .3150800000D+00 .4475000000D-02 .1714000000D+00 .1777815000D+01 .1892400000D+01 .5208500000D+01 .2027800000D+01 -.2388000000D+00 -.3629000000D-01 .4212957000D+03 .7582400000D+00 .1259000000D-01 .9177000000D+00 .3086934000D+01 .4677100000D+01 .1544700000D+01 .3384300000D+01 +1 2720010120200102192451929.4 -.2321700000D+01 .2542000000D-01 .4125432000D+03 .2412000000D-01 .1160600000D-01 .8279000000D+00 .1266400000D+01 .5873400000D+01 .6033400000D+01 .1626800000D+01 -.5544000000D+00 .4300000000D-02 .8981380000D+02 .7049000000D-01 .4824000000D-02 .1786000000D+00 .1511372000D+01 .6326000000D+00 .4882400000D+01 .1896100000D+01 -.1151100000D+01 -.3105000000D-01 .4214248000D+03 .2824000000D-01 .1251700000D-01 .9206000000D+00 .2848159000D+01 .4723000000D+00 .1313100000D+01 .3253500000D+01 +1 2820010219200103212451959.4 -.1635000000D+01 .3534000000D-01 .4130960000D+03 .7300300000D+00 .9168000000D-02 .8313000000D+00 .9731980000D+00 .5780600000D+01 .5561800000D+01 .1458700000D+01 -.4316000000D+00 .6960000000D-02 .8696910000D+02 .2700200000D+00 .4028000000D-02 .1651000000D+00 .1215531000D+01 .4885600000D+01 .4283400000D+01 .1736900000D+01 -.2055500000D+01 -.1678000000D-01 .4213744000D+03 .7999900000D+00 .8159000000D-02 .8899000000D+00 .2554581000D+01 .9698000000D+00 .8754000000D+00 .3019800000D+01 +1 2920010321200104202451989.4 -.5334000000D+00 .3888000000D-01 .4152176000D+03 .1245500000D+01 .6182000000D-02 .8385000000D+00 .6348350000D+00 .5413500000D+01 .5008800000D+01 .1189000000D+01 -.2056000000D+00 .5980000000D-02 .7648160000D+02 .4859600000D+00 .3271000000D-02 .1349000000D+00 .8999050000D+00 .4330400000D+01 .3447100000D+01 .1490500000D+01 -.2580200000D+01 -.1300000000D-03 .4212826000D+03 .1330140000D+01 .5170000000D-02 .8520000000D+00 .2214348000D+01 .6538000000D+00 .3490000000D-01 .2741800000D+01 +1 3020010420200105202452019.4 .6967000000D+00 .3833000000D-01 .4178655000D+03 .1572790000D+01 .3744000000D-02 .8544000000D+00 .2672140000D+00 .5031900000D+01 .4035900000D+01 .8736000000D+00 -.4700000000D-02 .2780000000D-02 .6015220000D+02 .6291200000D+00 .3134000000D-02 .9490000000D-01 .5929160000D+00 .3807700000D+01 .2529600000D+01 .1241400000D+01 -.2518400000D+01 .1754000000D-01 .4213242000D+03 .1607830000D+01 .4149000000D-02 .8468000000D+00 .1844059000D+01 .2772000000D+00 .5512000000D+01 .2481800000D+01 +1 3120010520200106192452049.4 .1756900000D+01 .2902000000D-01 .4202182000D+03 .1709880000D+01 .4124000000D-02 .8962000000D+00 .6167562000D+01 .4637600000D+01 .2904600000D+01 .6102000000D+00 .8200000000D-01 -.1040000000D-02 .4035900000D+02 .7073600000D+00 .3082000000D-02 .5410000000D-01 .3583910000D+00 .3274700000D+01 .1710700000D+01 .1164400000D+01 -.1850800000D+01 .3342000000D-01 .4213679000D+03 .1740500000D+01 .3038000000D-02 .8320000000D+00 .1458949000D+01 .6162400000D+01 .4480700000D+01 .2248200000D+01 +1 3220010619200107192452079.4 .2438600000D+01 .8150000000D-02 .4216650000D+03 .1692340000D+01 .4288000000D-02 .8937000000D+00 .5780837000D+01 .4217700000D+01 .2067900000D+01 .3805000000D+00 .4510000000D-01 -.2970000000D-02 .2160530000D+02 .7307100000D+00 .2825000000D-02 .2670000000D-01 .4428850000D+00 .2745200000D+01 .8662000000D+00 .1989600000D+01 -.7829000000D+00 .4473000000D-01 .4212690000D+03 .1744390000D+01 .4317000000D-02 .8247000000D+00 .1069851000D+01 .5782400000D+01 .3431700000D+01 .2025300000D+01 +1 3320010719200108182452109.4 .2562700000D+01 -.1737000000D-01 .4217750000D+03 .1581460000D+01 .5532000000D-02 .8548000000D+00 .5399509000D+01 .3796900000D+01 .1077100000D+01 .1614000000D+00 -.4920000000D-01 -.1490000000D-02 .1962880000D+02 .6961800000D+00 .2668000000D-02 .5130000000D-01 .1256299000D+01 .2236300000D+01 .6199100000D+01 .2709400000D+01 .5087000000D+00 .4101000000D-01 .4212796000D+03 .1584210000D+01 .5347000000D-02 .8346000000D+00 .6857530000D+00 .5408100000D+01 .2827600000D+01 .1750500000D+01 +1 3420010818200109172452139.4 .2051700000D+01 -.3422000000D-01 .4206270000D+03 .1329670000D+01 .8171000000D-02 .8479000000D+00 .5031797000D+01 .3411000000D+01 .4458000000D+00 .6202300000D+01 -.1000000000D+00 .2020000000D-02 .3511980000D+02 .5979400000D+00 .3112000000D-02 .8430000000D-01 .1431986000D+01 .1763500000D+01 .5219300000D+01 .2701000000D+01 .1701300000D+01 .2511000000D-01 .4214921000D+03 .1297820000D+01 .6353000000D-02 .8446000000D+00 .3162090000D+00 .5019500000D+01 .2045500000D+01 .1477100000D+01 +1 3520010917200110172452169.4 .9955000000D+00 -.3399000000D-01 .4190116000D+03 .8905200000D+00 .1022100000D-01 .8663000000D+00 .4687798000D+01 .3057800000D+01 .6265900000D+01 .6018800000D+01 -.3390000000D-01 .4040000000D-02 .4998040000D+02 .4245800000D+00 .4227000000D-02 .1104000000D+00 .1249669000D+01 .1359100000D+01 .4508800000D+01 .2608600000D+01 .2467800000D+01 .6120000000D-02 .4216087000D+03 .8998400000D+00 .9926000000D-02 .8671000000D+00 .6254706000D+01 .4649800000D+01 .1468000000D+01 .1228600000D+01 +1 3620011017200111162452199.4 -.1947000000D+00 -.2598000000D-01 .4177707000D+03 .2829500000D+00 .1143300000D-01 .8934000000D+00 .4379667000D+01 .2730700000D+01 .5890700000D+01 .5912100000D+01 .1139000000D+00 .3360000000D-02 .5884880000D+02 .1678100000D+00 .5113000000D-02 .1235000000D+00 .9999130000D+00 .1119000000D+01 .4107400000D+01 .2544800000D+01 .2634300000D+01 -.5430000000D-02 .4215349000D+03 .3069900000D+00 .1233100000D-01 .8583000000D+00 .5946038000D+01 .4362500000D+01 .1204700000D+01 .1057700000D+01 +1 3720011116200112162452229.4 -.1189900000D+01 -.1838000000D-01 .4175725000D+03 .4250600000D+00 .8768000000D-02 .8679000000D+00 .4117860000D+01 .5598200000D+01 .5730200000D+01 .5810800000D+01 .2445000000D+00 .8800000000D-03 .5925640000D+02 .1563100000D+00 .4266000000D-02 .1139000000D+00 .7463730000D+00 .3650200000D+01 .4009100000D+01 .2434000000D+01 .2335200000D+01 -.1115000000D-01 .4215289000D+03 .4403900000D+00 .9024000000D-02 .8534000000D+00 .5683885000D+01 .9412000000D+00 .1076900000D+01 .9832000000D+00 +1 3820011216200201152452259.4 -.1843700000D+01 -.1620000000D-01 .4186436000D+03 .9538800000D+00 .1919000000D-02 .8399000000D+00 .3900598000D+01 .5391800000D+01 .1019800000D+01 .5691000000D+01 .2793000000D+00 -.1190000000D-02 .5097560000D+02 .4126400000D+00 .1131000000D-02 .9000000000D-01 .4924860000D+00 .3633100000D+01 .4940600000D+01 .2265800000D+01 .1831600000D+01 -.1691000000D-01 .4216280000D+03 .9956000000D+00 .1266000000D-02 .8585000000D+00 .5467289000D+01 .7708000000D+00 .3389600000D+01 .9207000000D+00 +1 3920020115200202142452289.4 -.2303000000D+01 -.1072000000D-01 .4200822000D+03 .8837400000D+00 .1018800000D-01 .8331000000D+00 .3700885000D+01 .5208300000D+01 .1983500000D+01 .5540700000D+01 .2348000000D+00 -.1940000000D-02 .3845890000D+02 .4188800000D+00 .3882000000D-02 .6790000000D-01 .2017990000D+00 .3538600000D+01 .3131000000D+00 .1997900000D+01 .1210600000D+01 -.2550000000D-01 .4216624000D+03 .8927700000D+00 .9953000000D-02 .8960000000D+00 .5269136000D+01 .5970000000D+00 .3776100000D+01 .8234000000D+00 +1 4020020214200203162452319.4 -.2613200000D+01 .2020000000D-02 .4208787000D+03 .2503100000D+00 .1270600000D-01 .8543000000D+00 .3475892000D+01 .4966900000D+01 .1846500000D+01 .5423200000D+01 .1728000000D+00 -.1190000000D-02 .2972610000D+02 .1698900000D+00 .5260000000D-02 .5870000000D-01 .6150844000D+01 .3341900000D+01 .2135000000D+00 .1758000000D+01 .4147000000D+00 -.3288000000D-01 .4215356000D+03 .2171000000D+00 .1150300000D-01 .9229000000D+00 .5045263000D+01 .3670000000D+00 .3507900000D+01 .6508000000D+00 +1 4120020316200204152452349.4 -.2650000000D+01 .2091000000D-01 .4208789000D+03 .5128700000D+00 .9774000000D-02 .8525000000D+00 .3200582000D+01 .1611300000D+01 .1516100000D+01 .5259600000D+01 .1424000000D+00 -.5600000000D-03 .2934860000D+02 .1500400000D+00 .4428000000D-02 .6510000000D-01 .5882056000D+01 .6280400000D+01 .6071000000D+01 .1649600000D+01 -.6257000000D+00 -.3103000000D-01 .4214492000D+03 .5393400000D+00 .9288000000D-02 .9105000000D+00 .4769914000D+01 .3252800000D+01 .3023400000D+01 .4681000000D+00 +1 4220020415200205152452379.4 -.2148900000D+01 .3403000000D-01 .4201296000D+03 .1099460000D+01 .6192000000D-02 .8186000000D+00 .2877108000D+01 .1284500000D+01 .8658000000D+00 .5029100000D+01 .1304000000D+00 -.1520000000D-02 .3744060000D+02 .4119600000D+00 .3194000000D-02 .8530000000D-01 .5681003000D+01 .5872800000D+01 .5329200000D+01 .1561100000D+01 -.1697300000D+01 -.2022000000D-01 .4215219000D+03 .1108170000D+01 .6735000000D-02 .8781000000D+00 .4445797000D+01 .2893300000D+01 .2472600000D+01 .2552000000D+00 +1 4320020515200206142452409.4 -.1100300000D+01 .3844000000D-01 .4185528000D+03 .1442940000D+01 .4740000000D-02 .8241000000D+00 .2519822000D+01 .9109000000D+00 .6279900000D+01 .4712400000D+01 .6810000000D-01 -.4140000000D-02 .5222190000D+02 .5829300000D+00 .2652000000D-02 .1225000000D+00 .5439740000D+01 .5425100000D+01 .4338200000D+01 .1378500000D+01 -.2475200000D+01 -.3740000000D-02 .4215551000D+03 .1487230000D+01 .3973000000D-02 .8341000000D+00 .4087928000D+01 .2519300000D+01 .1686600000D+01 .2880000000D-01 +1 4420020614200207142452439.4 .2045000000D+00 .3575000000D-01 .4159085000D+03 .1615000000D+01 .3472000000D-02 .8485000000D+00 .2143522000D+01 .4993000000D+00 .5390500000D+01 .4409700000D+01 -.9730000000D-01 -.7060000000D-02 .7077750000D+02 .6684900000D+00 .2579000000D-02 .1684000000D+00 .5139676000D+01 .4937500000D+01 .3428300000D+01 .1152400000D+01 -.2643800000D+01 .1267000000D-01 .4214867000D+03 .1677140000D+01 .3826000000D-02 .8416000000D+00 .3710556000D+01 .2151100000D+01 .4835000000D+00 .6062400000D+01 +1 4520020714200208132452469.4 .1392900000D+01 .2740000000D-01 .4120755000D+03 .1672620000D+01 .3924000000D-02 .8594000000D+00 .1759632000D+01 .9690000000D-01 .4157300000D+01 .4171000000D+01 -.3497000000D+00 -.8250000000D-02 .9026140000D+02 .6935400000D+00 .2380000000D-02 .2118000000D+00 .4804083000D+01 .4428800000D+01 .2484600000D+01 .9540000000D+00 -.2216200000D+01 .3102000000D-01 .4215185000D+03 .1682670000D+01 .4322000000D-02 .8602000000D+00 .3325451000D+01 .1768600000D+01 .6064700000D+01 .5806100000D+01 +1 4620020813200209122452499.4 .2198400000D+01 .1122000000D-01 .4075472000D+03 .1574930000D+01 .5582000000D-02 .8221000000D+00 .1376865000D+01 .5997600000D+01 .3447300000D+01 .3930500000D+01 -.6084000000D+00 -.5460000000D-02 .1084815000D+03 .6641900000D+00 .2642000000D-02 .2393000000D+00 .4453680000D+01 .3938700000D+01 .1509700000D+01 .7413000000D+00 -.1295700000D+01 .4411000000D-01 .4216768000D+03 .1574070000D+01 .4067000000D-02 .8662000000D+00 .2942805000D+01 .1366800000D+01 .5139200000D+01 .5579500000D+01 +1 4720020912200210122452529.4 .2528200000D+01 -.1155000000D-01 .4031590000D+03 .1327470000D+01 .6484000000D-02 .7892000000D+00 .1004657000D+01 .5614600000D+01 .2796400000D+01 .3717200000D+01 -.7829000000D+00 .1740000000D-02 .1239101000D+03 .5667400000D+00 .3033000000D-02 .2579000000D+00 .4104691000D+01 .3482000000D+01 .6994000000D+00 .5518000000D+00 -.7970000000D-01 .4492000000D-01 .4217171000D+03 .1368810000D+01 .6446000000D-02 .8391000000D+00 .2571702000D+01 .9864000000D+00 .4283200000D+01 .5323000000D+01 +1 4820021012200211112452559.4 .2282700000D+01 -.2878000000D-01 .3994599000D+03 .9655900000D+00 .8904000000D-02 .8107000000D+00 .6536330000D+00 .5241000000D+01 .2161100000D+01 .3523600000D+01 -.7700000000D+00 .8860000000D-02 .1354382000D+03 .4061300000D+00 .3745000000D-02 .2843000000D+00 .3770948000D+01 .3065800000D+01 .6195500000D+01 .3742000000D+00 .1188900000D+01 .3002000000D-01 .4216746000D+03 .9900400000D+00 .9318000000D-02 .8105000000D+00 .2221690000D+01 .6508000000D+00 .3839600000D+01 .5073000000D+01 +1 4920021111200212112452589.4 .1576400000D+01 -.3479000000D-01 .3968668000D+03 .4418800000D+00 .1145100000D-01 .8445000000D+00 .3354910000D+00 .4946300000D+01 .1830200000D+01 .3386600000D+01 -.5594000000D+00 .1227000000D-01 .1422543000D+03 .1867700000D+00 .4881000000D-02 .3056000000D+00 .3465261000D+01 .2833000000D+01 .5743700000D+01 .2410000000D+00 .2166100000D+01 .1125000000D-01 .4217178000D+03 .4184200000D+00 .1099700000D-01 .8344000000D+00 .1904686000D+01 .3521000000D+00 .3493600000D+01 .4884900000D+01 +1 5020021211200301102452619.4 .6342000000D+00 -.3066000000D-01 .3961194000D+03 .2571300000D+00 .9621000000D-02 .8767000000D+00 .6159900000D-01 .1405400000D+01 .1693500000D+01 .3271200000D+01 -.2267000000D+00 .1108000000D-01 .1438537000D+03 .1205600000D+00 .4458000000D-02 .3143000000D+00 .3198858000D+01 .4991300000D+01 .5690600000D+01 .1235000000D+00 .2621000000D+01 -.5900000000D-03 .4217864000D+03 .2828900000D+00 .9559000000D-02 .8431000000D+00 .1632086000D+01 .3208600000D+01 .3236600000D+01 .4801100000D+01 +1 5120030110200302092452649.4 -.2392000000D+00 -.2751000000D-01 .3975742000D+03 .8721100000D+00 .2017000000D-02 .8534000000D+00 .6118308000D+01 .1276400000D+01 .2394100000D+01 .3155500000D+01 .8780000000D-01 .9120000000D-02 .1400341000D+03 .3701400000D+00 .1977000000D-02 .2916000000D+00 .2974253000D+01 .5177900000D+01 .1612000000D+00 .3400000000D-02 .2635200000D+01 -.5950000000D-02 .4218157000D+03 .8753600000D+00 .2266000000D-02 .8539000000D+00 .1406140000D+01 .2986300000D+01 .3352000000D+01 .4754300000D+01 +1 5220030209200303112452679.4 -.9909000000D+00 -.2653000000D-01 .4004351000D+03 .9570100000D+00 .8633000000D-02 .8340000000D+00 .5918869000D+01 .1103800000D+01 .4201100000D+01 .3052700000D+01 .3328000000D+00 .7690000000D-02 .1321911000D+03 .4142500000D+00 .3545000000D-02 .2666000000D+00 .2771149000D+01 .5169000000D+01 .1717300000D+01 .6180000000D+01 .2385300000D+01 -.1316000000D-01 .4218075000D+03 .9549600000D+00 .7504000000D-02 .8446000000D+00 .1206068000D+01 .2785200000D+01 .5848400000D+01 .4628100000D+01 +1 5320030311200304102452709.4 -.1650300000D+01 -.2444000000D-01 .4028096000D+03 .4271200000D+00 .1176000000D-01 .8337000000D+00 .5704618000D+01 .8655000000D+00 .4042000000D+01 .2931700000D+01 .5169000000D+00 .7050000000D-02 .1248236000D+03 .2067500000D+00 .4911000000D-02 .2546000000D+00 .2550517000D+01 .5165700000D+01 .1832700000D+01 .6058800000D+01 .1971700000D+01 -.2743000000D-01 .4217396000D+03 .4413600000D+00 .1196000000D-01 .8704000000D+00 .9910700000D+00 .2548600000D+01 .5674900000D+01 .4446200000D+01 +1 5420030410200305102452739.4 -.2232900000D+01 -.1209000000D-01 .4033780000D+03 .2944500000D+00 .1007500000D-01 .8549000000D+00 .5443936000D+01 .3902000000D+01 .3657900000D+01 .2795500000D+01 .6829000000D+00 .4420000000D-02 .1227530000D+03 .1057300000D+00 .4104000000D-02 .2627000000D+00 .2286096000D+01 .1288400000D+01 .1495500000D+01 .5925500000D+01 .1254600000D+01 -.4053000000D-01 .4217052000D+03 .2976400000D+00 .1063800000D-01 .8957000000D+00 .7304020000D+00 .5462600000D+01 .5380200000D+01 .4245200000D+01 +1 5520030510200306092452769.4 -.2545700000D+01 .7440000000D-02 .4020832000D+03 .8754300000D+00 .7582000000D-02 .8563000000D+00 .5133581000D+01 .3499400000D+01 .3170100000D+01 .2570100000D+01 .8075000000D+00 -.7700000000D-03 .1271385000D+03 .3535100000D+00 .3095000000D-02 .2791000000D+00 .1977860000D+01 .1195500000D+01 .7840000000D+00 .5704200000D+01 .1961000000D+00 -.4351000000D-01 .4216227000D+03 .9395000000D+00 .7002000000D-02 .8920000000D+00 .4206060000D+00 .5146200000D+01 .4874800000D+01 .4068100000D+01 +1 5620030609200307092452799.4 -.2345200000D+01 .2599000000D-01 .3992703000D+03 .1275560000D+01 .4479000000D-02 .8292000000D+00 .4786014000D+01 .3113800000D+01 .2640500000D+01 .2291800000D+01 .8045000000D+00 -.7410000000D-02 .1360616000D+03 .5203200000D+00 .2475000000D-02 .2944000000D+00 .1637571000D+01 .7942000000D+00 .6257700000D+01 .5431800000D+01 -.1072100000D+01 -.3221000000D-01 .4215804000D+03 .1358250000D+01 .4880000000D-02 .8659000000D+00 .7339500000D-01 .4809500000D+01 .3994700000D+01 .3829000000D+01 +1 5720030709200308082452829.4 -.1558700000D+01 .3583000000D-01 .3953635000D+03 .1512930000D+01 .2502000000D-02 .8072000000D+00 .4415330000D+01 .2746300000D+01 .1375500000D+01 .1971700000D+01 .5918000000D+00 -.1273000000D-01 .1468502000D+03 .6257400000D+00 .1990000000D-02 .3124000000D+00 .1277240000D+01 .3370000000D+00 .5196800000D+01 .5119900000D+01 -.2106700000D+01 -.1630000000D-01 .4216605000D+03 .1567060000D+01 .4304000000D-02 .8484000000D+00 .5986480000D+01 .4432300000D+01 .3191300000D+01 .3545000000D+01 +1 5820030808200309072452859.4 -.3908000000D+00 .3754000000D-01 .3911984000D+03 .1567980000D+01 .3483000000D-02 .7677000000D+00 .4032951000D+01 .2382600000D+01 .3400000000D+00 .1673500000D+01 .1811000000D+00 -.1558000000D-01 .1574256000D+03 .6625600000D+00 .2399000000D-02 .3201000000D+00 .9067580000D+00 .6160400000D+01 .4202100000D+01 .4834300000D+01 -.2582900000D+01 .5200000000D-03 .4217614000D+03 .1643780000D+01 .3283000000D-02 .8877000000D+00 .5605893000D+01 .4033200000D+01 .2229000000D+01 .3283300000D+01 +1 5920030907200310072452889.4 .7777000000D+00 .3366000000D-01 .3875444000D+03 .1484360000D+01 .3655000000D-02 .7466000000D+00 .3649465000D+01 .2002000000D+01 .5845900000D+01 .1434300000D+01 -.3017000000D+00 -.1566000000D-01 .1664643000D+03 .6278600000D+00 .2445000000D-02 .3293000000D+00 .5358820000D+00 .5686900000D+01 .3467200000D+01 .4609800000D+01 -.2391700000D+01 .1647000000D-01 .4217289000D+03 .1597490000D+01 .4295000000D-02 .8977000000D+00 .5224611000D+01 .3649800000D+01 .1145700000D+01 .3068400000D+01 +1 6020031007200311062452919.4 .1715700000D+01 .2117000000D-01 .3846831000D+03 .1315360000D+01 .5435000000D-02 .7358000000D+00 .3274806000D+01 .1628300000D+01 .4967300000D+01 .1224500000D+01 -.7409000000D+00 -.1106000000D-01 .1731993000D+03 .5478100000D+00 .2610000000D-02 .3364000000D+00 .1740390000D+00 .5209400000D+01 .2454900000D+01 .4414700000D+01 -.1696600000D+01 .3269000000D-01 .4217263000D+03 .1385860000D+01 .5744000000D-02 .8673000000D+00 .4851873000D+01 .3276700000D+01 .4425000000D+00 .2879700000D+01 +1 6120031106200312062452949.4 .2239600000D+01 .3390000000D-02 .3826449000D+03 .1008390000D+01 .8412000000D-02 .7410000000D+00 .2918883000D+01 .1303500000D+01 .4532600000D+01 .1048200000D+01 -.1021400000D+01 -.3140000000D-02 .1774278000D+03 .4114700000D+00 .3839000000D-02 .3467000000D+00 .6113753000D+01 .4799000000D+01 .1738000000D+01 .4248800000D+01 -.6667000000D+00 .4002000000D-01 .4217724000D+03 .1030050000D+01 .7843000000D-02 .8259000000D+00 .4498441000D+01 .2903200000D+01 .6078300000D+01 .2642600000D+01 +1 6220031206200401052452979.4 .2297300000D+01 -.1302000000D-01 .3815931000D+03 .5059400000D+00 .9990000000D-02 .7754000000D+00 .2593380000D+01 .1033400000D+01 .4228600000D+01 .8507000000D+00 -.1093200000D+01 .4850000000D-02 .1796033000D+03 .1882500000D+00 .4532000000D-02 .3654000000D+00 .5799342000D+01 .4536700000D+01 .1350800000D+01 .4057300000D+01 .5028000000D+00 .3355000000D-01 .4217005000D+03 .5287000000D+00 .1085100000D-01 .8111000000D+00 .4175864000D+01 .2551500000D+01 .5665500000D+01 .2452300000D+01 +1 6320040105200402042453009.4 .1883900000D+01 -.1837000000D-01 .3813572000D+03 .1430800000D+00 .8733000000D-02 .8021000000D+00 .2310739000D+01 .3772800000D+01 .3945300000D+01 .6974000000D+00 -.9375000000D+00 .8060000000D-02 .1803142000D+03 .1058500000D+00 .3746000000D-02 .3766000000D+00 .5524904000D+01 .7019000000D+00 .1146100000D+01 .3908600000D+01 .1540600000D+01 .1900000000D-01 .4215733000D+03 .1409900000D+00 .1051600000D-01 .8308000000D+00 .3895237000D+01 .5453700000D+01 .5485700000D+01 .2353800000D+01 +1 6420040204200403052453039.4 .1226400000D+01 -.1798000000D-01 .3816920000D+03 .7370400000D+00 .2814000000D-02 .8154000000D+00 .2076078000D+01 .3625200000D+01 .3809000000D+01 .6074000000D+00 -.6498000000D+00 .8480000000D-02 .1797656000D+03 .3535500000D+00 .1208000000D-02 .3775000000D+00 .5293758000D+01 .7128000000D+00 .1661300000D+01 .3818100000D+01 .2252900000D+01 .7150000000D-02 .4216697000D+03 .7935800000D+00 .3634000000D-02 .8316000000D+00 .3661014000D+01 .5226400000D+01 .5573500000D+01 .2326000000D+01 +1 6520040305200404042453069.4 .4979000000D+00 -.1845000000D-01 .3825627000D+03 .9261300000D+00 .5891000000D-02 .7875000000D+00 .1873828000D+01 .3406800000D+01 .2112000000D+00 .5620000000D+00 -.3104000000D+00 .8740000000D-02 .1777991000D+03 .4080200000D+00 .3045000000D-02 .3592000000D+00 .5089344000D+01 .6123000000D+00 .3526400000D+01 .3772200000D+01 .2580200000D+01 .1990000000D-02 .4218310000D+03 .1000400000D+01 .6638000000D-02 .8343000000D+00 .3458016000D+01 .5052400000D+01 .1838600000D+01 .2244900000D+01 +1 6620040404200405042453099.4 -.2332000000D+00 -.2388000000D-01 .3836996000D+03 .5637600000D+00 .1112000000D-01 .7943000000D+00 .1665743000D+01 .3156900000D+01 .1790000000D-01 .4838000000D+00 .3290000000D-01 .1110000000D-01 .1751946000D+03 .2249700000D+00 .4893000000D-02 .3601000000D+00 .4875135000D+01 .4980000000D+00 .3519200000D+01 .3686000000D+01 .2628800000D+01 -.4270000000D-02 .4218242000D+03 .5724300000D+00 .1137600000D-01 .8272000000D+00 .3248705000D+01 .4873600000D+01 .1738300000D+01 .2056400000D+01 +1 6720040504200406032453129.4 -.1025800000D+01 -.2537000000D-01 .3843401000D+03 .8246000000D-01 .1110200000D-01 .8197000000D+00 .1417204000D+01 .6257700000D+01 .6033000000D+01 .3139000000D+00 .4016000000D+00 .1217000000D-01 .1739245000D+03 .6267000000D-01 .4742000000D-02 .3731000000D+00 .4620636000D+01 .3096200000D+01 .3247400000D+01 .3512700000D+01 .2394600000D+01 -.1693000000D-01 .4216250000D+03 .1481100000D+00 .1027700000D-01 .8592000000D+00 .2999043000D+01 .1415800000D+01 .1409000000D+01 .1840000000D+01 +1 6820040603200407032453159.4 -.1812700000D+01 -.1677000000D-01 .3839804000D+03 .7034200000D+00 .7755000000D-02 .8535000000D+00 .1119172000D+01 .5768100000D+01 .5707900000D+01 .1005000000D+00 .7780000000D+00 .9130000000D-02 .1749785000D+03 .3248900000D+00 .3430000000D-02 .3940000000D+00 .4320165000D+01 .2956200000D+01 .2806200000D+01 .3299300000D+01 .1847700000D+01 -.3457000000D-01 .4215212000D+03 .7826200000D+00 .7925000000D-02 .8714000000D+00 .2700338000D+01 .1162400000D+01 .8718000000D+00 .1622900000D+01 +1 6920040703200408022453189.4 -.2393800000D+01 .1960000000D-02 .3827717000D+03 .1155250000D+01 .4098000000D-02 .8434000000D+00 .7805660000D+00 .5446000000D+01 .5068800000D+01 .6133100000D+01 .1086300000D+01 .9700000000D-03 .1775732000D+03 .5192800000D+00 .2038000000D-02 .3954000000D+00 .3983574000D+01 .2600800000D+01 .1905900000D+01 .3053200000D+01 .8631000000D+00 -.4330000000D-01 .4215681000D+03 .1225300000D+01 .5834000000D-02 .8558000000D+00 .2362157000D+01 .8027000000D+00 .3035000000D+00 .1410900000D+01 +1 7020040802200409012453219.4 -.2489300000D+01 .2087000000D-01 .3814861000D+03 .1398960000D+01 .2825000000D-02 .7871000000D+00 .4149410000D+00 .5101700000D+01 .4011900000D+01 .5869400000D+01 .1188100000D+01 -.8200000000D-02 .1803501000D+03 .6232700000D+00 .2085000000D-02 .3751000000D+00 .3623821000D+01 .2187800000D+01 .7409000000D+00 .2799700000D+01 -.4261000000D+00 -.3816000000D-01 .4215877000D+03 .1513890000D+01 .3424000000D-02 .8505000000D+00 .1998299000D+01 .4243000000D+00 .5767800000D+01 .1136200000D+01 +1 7120040901200410012453249.4 -.1941300000D+01 .3184000000D-01 .3807523000D+03 .1487300000D+01 .2139000000D-02 .7521000000D+00 .3531300000D-01 .4729200000D+01 .3029700000D+01 .5565700000D+01 .9837000000D+00 -.1420000000D-01 .1821149000D+03 .6521100000D+00 .2112000000D-02 .3601000000D+00 .3252998000D+01 .1720300000D+01 .6215900000D+01 .2509800000D+01 -.1701400000D+01 -.2106000000D-01 .4215037000D+03 .1637580000D+01 .3380000000D-02 .8737000000D+00 .1620481000D+01 .5350000000D-01 .4522200000D+01 .8617000000D+00 +1 7220041001200410312453279.4 -.9276000000D+00 .3609000000D-01 .3808027000D+03 .1478700000D+01 .3031000000D-02 .7479000000D+00 .5935884000D+01 .4359900000D+01 .1685700000D+01 .5284600000D+01 .5368000000D+00 -.1672000000D-01 .1821104000D+03 .6372800000D+00 .2222000000D-02 .3554000000D+00 .2881369000D+01 .1235200000D+01 .5180900000D+01 .2247300000D+01 -.2503900000D+01 -.3110000000D-02 .4215534000D+03 .1586140000D+01 .3734000000D-02 .9158000000D+00 .1239272000D+01 .5951400000D+01 .3691000000D+01 .6101000000D+00 +1 7320041031200411302453309.4 .2448000000D+00 .3489000000D-01 .3816269000D+03 .1335610000D+01 .5305000000D-02 .7685000000D+00 .5559868000D+01 .4018800000D+01 .1112700000D+01 .5079900000D+01 -.2700000000D-02 -.1630000000D-01 .1802030000D+03 .5619300000D+00 .2928000000D-02 .3604000000D+00 .2517817000D+01 .7741000000D+00 .4386200000D+01 .2054000000D+01 -.2658100000D+01 .1441000000D-01 .4216607000D+03 .1417960000D+01 .4722000000D-02 .9073000000D+00 .8651730000D+00 .5551200000D+01 .2637700000D+01 .3696000000D+00 +1 7420041130200412302453339.4 .1261200000D+01 .2812000000D-01 .3831410000D+03 .1031980000D+01 .7149000000D-02 .7540000000D+00 .5201087000D+01 .3689500000D+01 .6594000000D+00 .4886300000D+01 -.4748000000D+00 -.1345000000D-01 .1770750000D+03 .4159300000D+00 .3365000000D-02 .3459000000D+00 .2172037000D+01 .3204000000D+00 .3717700000D+01 .1872800000D+01 -.2233600000D+01 .2979000000D-01 .4215608000D+03 .1130800000D+01 .8436000000D-02 .8707000000D+00 .5084100000D+00 .5180800000D+01 .2026000000D+01 .1587000000D+00 +1 7520041230200501292453369.4 .2014600000D+01 .1180000000D-01 .3846889000D+03 .5821600000D+00 .9222000000D-02 .7339000000D+00 .4871377000D+01 .3367900000D+01 .2211000000D+00 .4688600000D+01 -.8316000000D+00 -.6860000000D-02 .1739594000D+03 .2151800000D+00 .3970000000D-02 .3296000000D+00 .1854553000D+01 .6130600000D+01 .3103500000D+01 .1683500000D+01 -.1415900000D+01 .3918000000D-01 .4213370000D+03 .6375100000D+00 .1107200000D-01 .8350000000D+00 .1799470000D+00 .4870300000D+01 .1722700000D+01 .6261200000D+01 +1 7620050129200502282453399.4 .2379700000D+01 -.5430000000D-02 .3854517000D+03 .9720000000D-02 .9701000000D-02 .7491000000D+00 .4582117000D+01 .5462300000D+01 .6229500000D+01 .4490600000D+01 -.1033200000D+01 .6000000000D-04 .1723988000D+03 .4415000000D-01 .3963000000D-02 .3312000000D+00 .1574676000D+01 .3347100000D+01 .2791100000D+01 .1486000000D+01 -.4169000000D+00 .3825000000D-01 .4213076000D+03 .3805000000D-01 .1039100000D-01 .8274000000D+00 .6174927000D+01 .1626400000D+01 .1465400000D+01 .6176100000D+01 +1 7720050228200503302453429.4 .2357300000D+01 -.1697000000D-01 .3850525000D+03 .6228100000D+00 .4808000000D-02 .7648000000D+00 .4339121000D+01 .5955100000D+01 .6173000000D+01 .4394900000D+01 -.1088200000D+01 .5380000000D-02 .1734026000D+03 .2893000000D+00 .1729000000D-02 .3427000000D+00 .1335351000D+01 .2613100000D+01 .2886600000D+01 .1393900000D+01 .5804000000D+00 .2972000000D-01 .4213709000D+03 .6947000000D+00 .4786000000D-02 .8683000000D+00 .5933359000D+01 .1259200000D+01 .1213700000D+01 .6122600000D+01 +1 7820050330200504292453459.4 .1991100000D+01 -.2016000000D-01 .3838362000D+03 .9256600000D+00 .4521000000D-02 .7699000000D+00 .4131792000D+01 .5763600000D+01 .2476300000D+01 .4364100000D+01 -.9897000000D+00 .7790000000D-02 .1762012000D+03 .3960000000D+00 .2321000000D-02 .3537000000D+00 .1124546000D+01 .2435700000D+01 .5416600000D+01 .1360000000D+01 .1408300000D+01 .2190000000D-01 .4213965000D+03 .9635600000D+00 .3821000000D-02 .8893000000D+00 .5726823000D+01 .1049200000D+01 .4235000000D+01 .6056400000D+01 +1 7920050429200505292453489.4 .1407900000D+01 -.2388000000D-01 .3826359000D+03 .6657200000D+00 .1060200000D-01 .7523000000D+00 .3926905000D+01 .5572500000D+01 .2441200000D+01 .4300600000D+01 -.7653000000D+00 .1047000000D-01 .1786817000D+03 .2606700000D+00 .4765000000D-02 .3527000000D+00 .9113680000D+00 .2274300000D+01 .5475400000D+01 .1290100000D+01 .2058800000D+01 .1570000000D-01 .4213200000D+03 .6554800000D+00 .9770000000D-02 .8829000000D+00 .5520969000D+01 .8195000000D+00 .3964600000D+01 .5914200000D+01 +1 8020050529200506282453519.4 .6508000000D+00 -.3055000000D-01 .3820492000D+03 .4360000000D-01 .1056200000D-01 .7721000000D+00 .3688102000D+01 .5743200000D+01 .2209100000D+01 .4127300000D+01 -.4281000000D+00 .1407000000D-01 .1796788000D+03 .2254000000D-01 .4536000000D-02 .3625000000D+00 .6643290000D+00 .5524900000D+01 .5251200000D+01 .1101500000D+01 .2468400000D+01 .8240000000D-02 .4213120000D+03 .1791000000D-01 .1086800000D-01 .8504000000D+00 .5280354000D+01 .5870600000D+01 .3649000000D+01 .5724800000D+01 +1 8120050628200507282453549.4 -.2326000000D+00 -.3710000000D-01 .3821692000D+03 .5912100000D+00 .7716000000D-02 .8119000000D+00 .3400651000D+01 .1870000000D+01 .1779600000D+01 .3890800000D+01 -.1390000000D-01 .1742000000D-01 .1792247000D+03 .2931500000D+00 .3183000000D-02 .3758000000D+00 .3724160000D+00 .4968200000D+01 .4666800000D+01 .8563000000D+00 .2593500000D+01 -.7380000000D-02 .4213745000D+03 .6488300000D+00 .8742000000D-02 .8504000000D+00 .4991779000D+01 .3420900000D+01 .3301100000D+01 .5527400000D+01 +1 8220050728200508272453579.4 -.1182700000D+01 -.3321000000D-01 .3831514000D+03 .1053760000D+01 .5265000000D-02 .8530000000D+00 .3070453000D+01 .1550300000D+01 .1188400000D+01 .3674100000D+01 .4390000000D+00 .1564000000D-01 .1773098000D+03 .4813000000D+00 .2458000000D-02 .3869000000D+00 .4266200000D-01 .4569100000D+01 .3749200000D+01 .6349000000D+00 .2287100000D+01 -.2692000000D-01 .4213265000D+03 .1173950000D+01 .5171000000D-02 .8568000000D+00 .4661476000D+01 .3084500000D+01 .2742100000D+01 .5308200000D+01 +1 8320050827200509262453609.4 -.2040500000D+01 -.1558000000D-01 .3850416000D+03 .1353120000D+01 .3041000000D-02 .8422000000D+00 .2710837000D+01 .1187000000D+01 .5286000000D+00 .3428700000D+01 .8439000000D+00 .7470000000D-02 .1734721000D+03 .5935700000D+00 .2152000000D-02 .3690000000D+00 .5971338000D+01 .4104100000D+01 .2764400000D+01 .3973000000D+00 .1500800000D+01 -.4275000000D-01 .4211846000D+03 .1493370000D+01 .3726000000D-02 .8687000000D+00 .4301645000D+01 .2741800000D+01 .1661100000D+01 .5068900000D+01 +1 8420050926200510262453639.4 -.2492400000D+01 .7310000000D-02 .3877972000D+03 .1522770000D+01 .2055000000D-02 .8101000000D+00 .2334641000D+01 .8246000000D+00 .5255200000D+01 .3151700000D+01 .1054000000D+01 -.2760000000D-02 .1672420000D+03 .6477400000D+00 .2502000000D-02 .3391000000D+00 .5604450000D+01 .3617800000D+01 .1719300000D+01 .1390000000D+00 .2610000000D+00 -.4341000000D-01 .4211997000D+03 .1612530000D+01 .3586000000D-02 .8774000000D+00 .3925004000D+01 .2362600000D+01 .8667000000D+00 .4765000000D+01 +1 8520051026200511252453669.4 -.2303300000D+01 .2476000000D-01 .3913635000D+03 .1531730000D+01 .3597000000D-02 .8174000000D+00 .1952809000D+01 .4685000000D+00 .4309200000D+01 .2863500000D+01 .9783000000D+00 -.9540000000D-02 .1585814000D+03 .6339800000D+00 .2939000000D-02 .3212000000D+00 .5235724000D+01 .3113700000D+01 .9872000000D+00 .6150800000D+01 -.1082700000D+01 -.3296000000D-01 .4212965000D+03 .1613160000D+01 .2847000000D-02 .8696000000D+00 .3543238000D+01 .1960000000D+01 .5993500000D+01 .4444900000D+01 +1 8620051125200512252453699.4 -.1469400000D+01 .3154000000D-01 .3954984000D+03 .1393280000D+01 .4740000000D-02 .8252000000D+00 .1576260000D+01 .1018000000D+00 .3610100000D+01 .2643800000D+01 .6538000000D+00 -.1092000000D-01 .1481185000D+03 .5694600000D+00 .2815000000D-02 .3024000000D+00 .4875659000D+01 .2583800000D+01 .2077000000D+00 .5953300000D+01 -.2106300000D+01 -.1775000000D-01 .4212470000D+03 .1502310000D+01 .5407000000D-02 .8823000000D+00 .3166451000D+01 .1579100000D+01 .4963500000D+01 .4150200000D+01 +1 8720051225200601242453729.4 -.3424000000D+00 .3350000000D-01 .3994266000D+03 .1136950000D+01 .7237000000D-02 .8212000000D+00 .1215639000D+01 .6024500000D+01 .2948600000D+01 .2481200000D+01 .2554000000D+00 -.1025000000D-01 .1371601000D+03 .4645100000D+00 .3201000000D-02 .2794000000D+00 .4534224000D+01 .2066100000D+01 .5578700000D+01 .5810000000D+01 -.2546800000D+01 -.2960000000D-02 .4211475000D+03 .1207120000D+01 .8129000000D-02 .8712000000D+00 .2804702000D+01 .1229300000D+01 .4487800000D+01 .3929900000D+01 +1 8820060124200602232453759.4 .7642000000D+00 .2989000000D-01 .4023893000D+03 .7170300000D+00 .1014300000D-01 .7914000000D+00 .8815770000D+00 .5726300000D+01 .2585500000D+01 .2288600000D+01 -.9690000000D-01 -.9000000000D-02 .1278498000D+03 .2926500000D+00 .3969000000D-02 .2496000000D+00 .4219810000D+01 .1589700000D+01 .4938100000D+01 .5640100000D+01 -.2431700000D+01 .1190000000D-01 .4211802000D+03 .7316500000D+00 .1022200000D-01 .8494000000D+00 .2469798000D+01 .8803000000D+00 .4036500000D+01 .3798300000D+01 +1 8920060223200603252453789.4 .1626700000D+01 .2136000000D-01 .4039928000D+03 .1132300000D+00 .1028200000D-01 .7763000000D+00 .5850860000D+00 .5800400000D+01 .2355500000D+01 .2100700000D+01 -.3635000000D+00 -.7980000000D-02 .1228499000D+03 .5782000000D-01 .3971000000D-02 .2376000000D+00 .3937891000D+01 .7108000000D+00 .4546200000D+01 .5460900000D+01 -.1934400000D+01 .2358000000D-01 .4211557000D+03 .1182600000D+00 .1124600000D-01 .8361000000D+00 .2173559000D+01 .3793000000D+00 .3682000000D+01 .3677800000D+01 +1 9020060325200604242453819.4 .2212900000D+01 .7310000000D-02 .4038488000D+03 .5530200000D+00 .5701000000D-02 .7748000000D+00 .3337530000D+00 .1967600000D+01 .2217500000D+01 .1947300000D+01 -.5874000000D+00 -.5500000000D-02 .1240285000D+03 .2164900000D+00 .2268000000D-02 .2432000000D+00 .3689268000D+01 .4418600000D+01 .4372400000D+01 .5308200000D+01 -.1184000000D+01 .2691000000D-01 .4210199000D+03 .5407900000D+00 .7635000000D-02 .8622000000D+00 .1923087000D+01 .3510900000D+01 .3532200000D+01 .3578800000D+01 +1 9120060424200605242453849.4 .2487400000D+01 -.4810000000D-02 .4018879000D+03 .9211300000D+00 .2727000000D-02 .7573000000D+00 .1206790000D+00 .1810200000D+01 .4764100000D+01 .1905100000D+01 -.7721000000D+00 -.1900000000D-02 .1305272000D+03 .3613000000D+00 .9790000000D-03 .2563000000D+00 .3465896000D+01 .4163000000D+01 .9810000000D+00 .5263100000D+01 -.3330000000D+00 .2478000000D-01 .4209339000D+03 .9448200000D+00 .1904000000D-02 .9053000000D+00 .1710908000D+01 .3272600000D+01 .5818300000D+01 .3480100000D+01 +1 9220060524200606232453879.4 .2460100000D+01 -.1393000000D-01 .3991566000D+03 .7420600000D+00 .9033000000D-02 .7478000000D+00 .6200026000D+01 .1614900000D+01 .4752700000D+01 .1858800000D+01 -.8771000000D+00 .2540000000D-02 .1382099000D+03 .2901800000D+00 .3601000000D-02 .2675000000D+00 .3245890000D+01 .3928900000D+01 .9508000000D+00 .5198800000D+01 .5704000000D+00 .2115000000D-01 .4209834000D+03 .7835300000D+00 .9724000000D-02 .8915000000D+00 .1507775000D+01 .3062200000D+01 .6153100000D+01 .3406800000D+01 +1 9320060623200607232453909.4 .2088000000D+01 -.2009000000D-01 .3973772000D+03 .1716000000D+00 .1071000000D-01 .7451000000D+00 .5968688000D+01 .1342900000D+01 .4471600000D+01 .1725700000D+01 -.8273000000D+00 .6200000000D-02 .1427506000D+03 .7916000000D-01 .4339000000D-02 .2696000000D+00 .3000880000D+01 .3111600000D+01 .6802000000D+00 .5052100000D+01 .1424700000D+01 .1948000000D-01 .4210779000D+03 .1596300000D+00 .1137700000D-01 .8570000000D+00 .1276546000D+01 .2813700000D+01 .5974500000D+01 .3297400000D+01 +1 9420060723200608222453939.4 .1379800000D+01 -.2784000000D-01 .3975355000D+03 .4684900000D+00 .9251000000D-02 .7926000000D+00 .5690979000D+01 .4219900000D+01 .4114000000D+01 .1489100000D+01 -.6108000000D+00 .9640000000D-02 .1424137000D+03 .2059800000D+00 .3728000000D-02 .2761000000D+00 .2716376000D+01 .6829000000D+00 .1965000000D+00 .4800200000D+01 .2150900000D+01 .1392000000D-01 .4210634000D+03 .5565100000D+00 .8586000000D-02 .8276000000D+00 .9980610000D+00 .5735400000D+01 .5581100000D+01 .3128500000D+01 +1 9520060822200609212453969.4 .4120000000D+00 -.3557000000D-01 .3994643000D+03 .1010210000D+01 .6119000000D-02 .8389000000D+00 .5369276000D+01 .3880000000D+01 .3671000000D+01 .1232600000D+01 -.2786000000D+00 .1175000000D-01 .1371328000D+03 .4141700000D+00 .2782000000D-02 .2721000000D+00 .2396072000D+01 .1464000000D+00 .5675600000D+01 .4547900000D+01 .2568800000D+01 .9700000000D-03 .4210214000D+03 .1104830000D+01 .6074000000D-02 .8636000000D+00 .6744650000D+00 .5416700000D+01 .4885900000D+01 .2903500000D+01 +1 9620060921200610212453999.4 -.7066000000D+00 -.3616000000D-01 .4026624000D+03 .1394670000D+01 .3419000000D-02 .8630000000D+00 .5015051000D+01 .3539400000D+01 .2688300000D+01 .9962000000D+00 .8540000000D-01 .1049000000D-01 .1272389000D+03 .5550900000D+00 .2857000000D-02 .2522000000D+00 .2051941000D+01 .5941800000D+01 .4641200000D+01 .4326900000D+01 .2579600000D+01 -.2156000000D-01 .4210775000D+03 .1439520000D+01 .4831000000D-02 .8940000000D+00 .3180370000D+00 .5045600000D+01 .4195800000D+01 .2652800000D+01 +1 9720061021200611202454029.4 -.1784500000D+01 -.2319000000D-01 .4067660000D+03 .1577340000D+01 .3812000000D-02 .8527000000D+00 .4640907000D+01 .3176900000D+01 .1588500000D+01 .7338000000D+00 .3832000000D+00 .5040000000D-02 .1132872000D+03 .6279100000D+00 .3151000000D-02 .2132000000D+00 .1697860000D+01 .5410500000D+01 .3875600000D+01 .4087700000D+01 .2022700000D+01 -.4072000000D-01 .4211521000D+03 .1626730000D+01 .3053000000D-02 .8895000000D+00 .6225362000D+01 .4650500000D+01 .3328500000D+01 .2400300000D+01 +1 9820061120200612202454059.4 -.2559200000D+01 .5700000000D-03 .4112241000D+03 .1602830000D+01 .3772000000D-02 .8484000000D+00 .4259262000D+01 .2778900000D+01 .7458000000D+00 .4889000000D+00 .5332000000D+00 -.1640000000D-02 .9620400000D+02 .6598300000D+00 .2862000000D-02 .1757000000D+00 .1349662000D+01 .4853800000D+01 .3081600000D+01 .3864700000D+01 .9110000000D+00 -.4632000000D-01 .4211183000D+03 .1674100000D+01 .3535000000D-02 .8590000000D+00 .5841597000D+01 .4268800000D+01 .2031900000D+01 .2083400000D+01 +1 9920061220200701192454089.4 -.2682800000D+01 .2121000000D-01 .4151287000D+03 .1520910000D+01 .5127000000D-02 .8811000000D+00 .3880885000D+01 .2378500000D+01 .5967400000D+01 .2474000000D+00 .5003000000D+00 -.5090000000D-02 .7749170000D+02 .6469400000D+00 .2724000000D-02 .1452000000D+00 .1025314000D+01 .4318700000D+01 .2121000000D+01 .3657500000D+01 -.4989000000D+00 -.3601000000D-01 .4211325000D+03 .1548700000D+01 .4941000000D-02 .8503000000D+00 .5460495000D+01 .3893200000D+01 .1268100000D+01 .1766300000D+01 +1 10020070119200702182454119.4 -.2128400000D+01 .3355000000D-01 .4178969000D+03 .1276760000D+01 .7858000000D-02 .9045000000D+00 .3515595000D+01 .2016800000D+01 .5390000000D+01 .2940000000D-01 .3647000000D+00 -.4930000000D-02 .5947540000D+02 .5645600000D+00 .2981000000D-02 .1142000000D+00 .7457380000D+00 .3819800000D+01 .1147600000D+01 .3533300000D+01 -.1731300000D+01 -.2091000000D-01 .4212388000D+03 .1285590000D+01 .6859000000D-02 .8823000000D+00 .5093118000D+01 .3514500000D+01 .5380000000D+00 .1521500000D+01 +1 10120070218200703202454149.4 -.1119200000D+01 .3688000000D-01 .4196616000D+03 .8292900000D+00 .9314000000D-02 .9220000000D+00 .3174172000D+01 .1683900000D+01 .4934200000D+01 .6113500000D+01 .2266000000D+00 -.3250000000D-02 .4512470000D+02 .4046000000D+00 .3876000000D-02 .8910000000D-01 .5267280000D+00 .3365900000D+01 .3400000000D+00 .3454100000D+01 -.2435300000D+01 -.7760000000D-02 .4212519000D+03 .8816900000D+00 .1016000000D-01 .8646000000D+00 .4750381000D+01 .3163100000D+01 .3160000000D-01 .1349400000D+01 +1 10220070320200704192454179.4 -.4330000000D-01 .3659000000D-01 .4205502000D+03 .2342900000D+00 .9858000000D-02 .8877000000D+00 .2868396000D+01 .1382200000D+01 .4502500000D+01 .5929600000D+01 .1364000000D+00 -.2790000000D-02 .3710430000D+02 .1635800000D+00 .4679000000D-02 .7490000000D-01 .3395220000D+00 .2960300000D+01 .6165200000D+01 .3386100000D+01 -.2620400000D+01 .4710000000D-02 .4212028000D+03 .2937500000D+00 .1183300000D-01 .8337000000D+00 .4443429000D+01 .2901100000D+01 .6043400000D+01 .1217100000D+01 +1 10320070419200705192454209.4 .9098000000D+00 .3067000000D-01 .4206089000D+03 .4143200000D+00 .7600000000D-02 .8373000000D+00 .2606620000D+01 .4192100000D+01 .4285400000D+01 .5811400000D+01 .6080000000D-01 -.3950000000D-02 .3661950000D+02 .1320400000D+00 .3745000000D-02 .8010000000D-01 .8983600000D-01 .5972600000D+01 .6008600000D+01 .3253300000D+01 -.2433900000D+01 .1721000000D-01 .4212280000D+03 .4096100000D+00 .8570000000D-02 .8242000000D+00 .4181096000D+01 .5719900000D+01 .5885900000D+01 .1063000000D+01 +1 10420070519200706182454239.4 .1659400000D+01 .2198000000D-01 .4199277000D+03 .8921900000D+00 .1525000000D-02 .8101000000D+00 .2385752000D+01 .3979400000D+01 .5616200000D+01 .5736100000D+01 -.4720000000D-01 -.5370000000D-02 .4340580000D+02 .3662800000D+00 .6590000000D-03 .9820000000D-01 .6044727000D+01 .5745800000D+01 .4860000000D+00 .3080000000D+01 -.2042500000D+01 .2862000000D-01 .4212227000D+03 .9221800000D+00 .1068000000D-02 .8603000000D+00 .3961274000D+01 .5535600000D+01 .9935000000D+00 .9599000000D+00 +1 10520070618200707182454269.4 .2224600000D+01 .1050000000D-01 .4186924000D+03 .8820900000D+00 .8949000000D-02 .8245000000D+00 .2182267000D+01 .3793800000D+01 .5421000000D+00 .5697700000D+01 -.2010000000D+00 -.4650000000D-02 .5429770000D+02 .3842900000D+00 .3263000000D-02 .1222000000D+00 .5725876000D+01 .5581400000D+01 .2483000000D+01 .2928800000D+01 -.1408900000D+01 .3425000000D-01 .4211502000D+03 .8832800000D+00 .8508000000D-02 .8841000000D+00 .3759705000D+01 .5337900000D+01 .2162600000D+01 .8760000000D+00 +1 10620070718200708172454299.4 .2556100000D+01 -.1160000000D-02 .4175862000D+03 .3579400000D+00 .1234700000D-01 .8501000000D+00 .1959616000D+01 .3613800000D+01 .4407000000D+00 .5569200000D+01 -.3432000000D+00 -.1800000000D-02 .6275430000D+02 .1822800000D+00 .4685000000D-02 .1339000000D+00 .5437210000D+01 .5263500000D+01 .2372700000D+01 .2737900000D+01 -.5325000000D+00 .3544000000D-01 .4210546000D+03 .3237200000D+00 .1138600000D-01 .8579000000D+00 .3538083000D+01 .5040500000D+01 .1920200000D+01 .7981000000D+00 +1 10720070817200709162454329.4 .2529600000D+01 -.1379000000D-01 .4173912000D+03 .3636700000D+00 .1022800000D-01 .8397000000D+00 .1692752000D+01 .1254000000D+00 .1719000000D+00 .5367700000D+01 -.3953000000D+00 .1610000000D-02 .6397860000D+02 .1175300000D+00 .4184000000D-02 .1250000000D+00 .5151462000D+01 .2481100000D+01 .1945000000D+01 .2538000000D+01 .5469000000D+00 .3203000000D-01 .4211168000D+03 .3892900000D+00 .1032200000D-01 .8332000000D+00 .3270674000D+01 .1807400000D+01 .1517700000D+01 .6264000000D+00 +1 10820070916200710162454359.4 .2054600000D+01 -.2728000000D-01 .4182400000D+03 .9881400000D+00 .6618000000D-02 .8340000000D+00 .1378929000D+01 .6149300000D+01 .5837700000D+01 .5098800000D+01 -.3271000000D+00 .3460000000D-02 .5712320000D+02 .3626400000D+00 .3484000000D-02 .1014000000D+00 .4862582000D+01 .1836200000D+01 .1205000000D+01 .2340000000D+01 .1554000000D+01 .2729000000D-01 .4212710000D+03 .9924600000D+00 .7813000000D-02 .8399000000D+00 .2955482000D+01 .1408800000D+01 .1041100000D+01 .3937000000D+00 +1 10920071016200711152454389.4 .1150300000D+01 -.4003000000D-01 .4198086000D+03 .1390430000D+01 .5315000000D-02 .8223000000D+00 .1028333000D+01 .5797500000D+01 .4958300000D+01 .4828300000D+01 -.1912000000D+00 .2720000000D-02 .4362450000D+02 .5498100000D+00 .3131000000D-02 .6740000000D-01 .4603820000D+01 .1331900000D+01 .3431000000D+00 .2303700000D+01 .2283500000D+01 .1498000000D-01 .4213409000D+03 .1426420000D+01 .4849000000D-02 .8970000000D+00 .2603318000D+01 .1036200000D+01 .3565000000D+00 .1641000000D+00 +1 11020071115200712152454419.4 -.2150000000D-01 -.4533000000D-01 .4212908000D+03 .1613740000D+01 .4284000000D-02 .8389000000D+00 .6548970000D+00 .5389700000D+01 .4148300000D+01 .4592600000D+01 -.8380000000D-01 -.4300000000D-03 .2651580000D+02 .6762400000D+00 .2945000000D-02 .3900000000D-01 .4514456000D+01 .8174000000D+00 .5712300000D+01 .2744300000D+01 .2552000000D+01 -.5740000000D-02 .4213220000D+03 .1659920000D+01 .3864000000D-02 .9115000000D+00 .2227477000D+01 .6646000000D+00 .5588500000D+01 .6215900000D+01 +1 11120071215200801142454449.4 -.1285500000D+01 -.3427000000D-01 .4217593000D+03 .1709130000D+01 .4101000000D-02 .8483000000D+00 .2709540000D+00 .4974600000D+01 .2952200000D+01 .4347200000D+01 -.8090000000D-01 -.3650000000D-02 .1667380000D+02 .7351800000D+00 .2856000000D-02 .4940000000D-01 .5153333000D+01 .3004000000D+00 .4791800000D+01 .3605200000D+01 .2273600000D+01 -.3011000000D-01 .4214254000D+03 .1700920000D+01 .3568000000D-02 .8893000000D+00 .1840778000D+01 .2720000000D+00 .4734700000D+01 .5961200000D+01 +1 11220080114200802132454479.4 -.2274200000D+01 -.1241000000D-01 .4208385000D+03 .1632210000D+01 .5793000000D-02 .8531000000D+00 .6170176000D+01 .4577800000D+01 .2145300000D+01 .4091100000D+01 -.1864000000D+00 -.4020000000D-02 .3041300000D+02 .7228500000D+00 .2837000000D-02 .8520000000D-01 .5643147000D+01 .6076800000D+01 .3830200000D+01 .3737300000D+01 .1394400000D+01 -.4300000000D-01 .4215511000D+03 .1624000000D+01 .3858000000D-02 .8663000000D+00 .1455134000D+01 .6153000000D+01 .3559400000D+01 .5647000000D+01 +1 11320080213200803142454509.4 -.2674500000D+01 .9050000000D-02 .4189742000D+03 .1378370000D+01 .6494000000D-02 .8879000000D+00 .5796652000D+01 .4178400000D+01 .1458600000D+01 .3807200000D+01 -.3114000000D+00 -.1200000000D-02 .4987440000D+02 .6348500000D+00 .3153000000D-02 .1269000000D+00 .5510653000D+01 .5601700000D+01 .2906300000D+01 .3602200000D+01 .9470000000D-01 -.3945000000D-01 .4215312000D+03 .1422230000D+01 .6849000000D-02 .8511000000D+00 .1080701000D+01 .5780300000D+01 .2809000000D+01 .5382500000D+01 +1 11420080314200804132454539.4 -.2343700000D+01 .1917000000D-01 .4167126000D+03 .9972000000D+00 .8304000000D-02 .9135000000D+00 .5444597000D+01 .3783400000D+01 .7303000000D+00 .3583300000D+01 -.3359000000D+00 .2090000000D-02 .6639710000D+02 .4714000000D+00 .3803000000D-02 .1610000000D+00 .5249553000D+01 .5177400000D+01 .2114600000D+01 .3440000000D+01 -.1190700000D+01 -.2703000000D-01 .4215320000D+03 .1031800000D+01 .9286000000D-02 .8434000000D+00 .7277500000D+00 .5445700000D+01 .2393700000D+01 .5190800000D+01 +1 11520080413200805132454569.4 -.1557900000D+01 .2329000000D-01 .4147992000D+03 .4665500000D+00 .1055000000D-01 .9165000000D+00 .5124947000D+01 .3434100000D+01 .3047000000D+00 .3441300000D+01 -.2311000000D+00 .4390000000D-02 .7708370000D+02 .2407600000D+00 .4652000000D-02 .1765000000D+00 .4970444000D+01 .4878800000D+01 .1599100000D+01 .3317500000D+01 -.2104600000D+01 -.1477000000D-01 .4217092000D+03 .4693700000D+00 .1062100000D-01 .8160000000D+00 .4077850000D+00 .5111400000D+01 .1990000000D+01 .5049200000D+01 +1 11620080513200806122454599.4 -.6427000000D+00 .2489000000D-01 .4141301000D+03 .2108200000D+00 .9108000000D-02 .8654000000D+00 .4847658000D+01 .4010000000D-01 .1126000000D+00 .3335100000D+01 -.5510000000D-01 .4800000000D-02 .8020580000D+02 .6663000000D-01 .4457000000D-02 .1633000000D+00 .4707443000D+01 .6119000000D+00 .1432100000D+01 .3196600000D+01 -.2513300000D+01 -.6340000000D-02 .4217665000D+03 .1932100000D+00 .9793000000D-02 .8222000000D+00 .1310410000D+00 .1787200000D+01 .1695300000D+01 .4923100000D+01 +1 11720080612200807122454629.4 .1972000000D+00 .2629000000D-01 .4151334000D+03 .8283800000D+00 .1956000000D-02 .8479000000D+00 .4615409000D+01 .6111600000D+01 .3730000000D+00 .3252000000D+01 .1096000000D+00 .3510000000D-02 .7517900000D+02 .3307300000D+00 .2117000000D-02 .1399000000D+00 .4469065000D+01 .1001000000D+01 .1775500000D+01 .3081200000D+01 -.2581600000D+01 .2830000000D-02 .4216515000D+03 .7830200000D+00 .3677000000D-02 .8376000000D+00 .6182546000D+01 .1477200000D+01 .1707600000D+01 .4773000000D+01 +1 11820080712200808112454659.4 .9876000000D+00 .2329000000D-01 .4170838000D+03 .9865400000D+00 .7723000000D-02 .8755000000D+00 .4411711000D+01 .5938300000D+01 .2776500000D+01 .3151300000D+01 .2191000000D+00 .1410000000D-02 .6422550000D+02 .4332100000D+00 .2603000000D-02 .1199000000D+00 .4239420000D+01 .9482000000D+00 .3774100000D+01 .2941200000D+01 -.2409200000D+01 .1362000000D-01 .4215184000D+03 .9639000000D+00 .6451000000D-02 .8493000000D+00 .5979008000D+01 .1257300000D+01 .4237800000D+01 .4657700000D+01 +1 11920080811200809102454689.4 .1763000000D+01 .1535000000D-01 .4186262000D+03 .5340500000D+00 .1200700000D-01 .9073000000D+00 .4199700000D+01 .5753100000D+01 .2642900000D+01 .3054000000D+01 .2729000000D+00 .3600000000D-03 .5354470000D+02 .2797900000D+00 .4893000000D-02 .1082000000D+00 .3990610000D+01 .8370000000D+00 .3940100000D+01 .2832100000D+01 -.2019500000D+01 .2659000000D-01 .4215306000D+03 .5564300000D+00 .1245300000D-01 .8312000000D+00 .5767239000D+01 .1033000000D+01 .4152500000D+01 .4539700000D+01 +1 12020080910200810102454719.4 .2412600000D+01 .3000000000D-02 .4190621000D+03 .2010000000D+00 .1093500000D-01 .8820000000D+00 .3946311000D+01 .2358400000D+01 .2288800000D+01 .2900400000D+01 .3047000000D+00 .6000000000D-03 .4955200000D+02 .2060000000D-01 .4847000000D-02 .1068000000D+00 .3722197000D+01 .3481900000D+01 .3654400000D+01 .2710100000D+01 -.1249500000D+01 .3397000000D-01 .4215852000D+03 .1806500000D+00 .1200600000D-01 .8070000000D+00 .5514286000D+01 .3961700000D+01 .3904900000D+01 .4415000000D+01 +1 12120081010200811092454749.4 .2691700000D+01 -.1018000000D-01 .4184568000D+03 .8663000000D+00 .8316000000D-02 .8141000000D+00 .3642347000D+01 .2028000000D+01 .1773200000D+01 .2687800000D+01 .3419000000D+00 .6500000000D-03 .5448920000D+02 .3141900000D+00 .3772000000D-02 .1151000000D+00 .3447274000D+01 .3382400000D+01 .3032600000D+01 .2533100000D+01 -.1470000000D+00 .3529000000D-01 .4215649000D+03 .8904900000D+00 .8310000000D-02 .8241000000D+00 .5210426000D+01 .3650300000D+01 .3433100000D+01 .4208400000D+01 +1 12220081109200812092454779.4 .2404000000D+01 -.2307000000D-01 .4166177000D+03 .1352000000D+01 .5404000000D-02 .7933000000D+00 .3296633000D+01 .1652200000D+01 .1131700000D+01 .2403000000D+01 .3562000000D+00 -.1290000000D-02 .6701070000D+02 .5333000000D+00 .3014000000D-02 .1410000000D+00 .3151051000D+01 .2964000000D+01 .2132000000D+01 .2274600000D+01 .1079300000D+01 .2910000000D-01 .4215516000D+03 .1378440000D+01 .5924000000D-02 .8632000000D+00 .4863844000D+01 .3312900000D+01 .2653500000D+01 .3971500000D+01 +1 12320081209200901082454809.4 .1618100000D+01 -.3669000000D-01 .4133498000D+03 .1649010000D+01 .3649000000D-02 .8050000000D+00 .2922931000D+01 .1267400000D+01 .6279300000D+01 .2131100000D+01 .2901000000D+00 -.6240000000D-02 .8426860000D+02 .6695700000D+00 .2760000000D-02 .1800000000D+00 .2822060000D+01 .2485600000D+01 .1107900000D+01 .2028200000D+01 .2064600000D+01 .1736000000D-01 .4217287000D+03 .1641550000D+01 .4493000000D-02 .9089000000D+00 .4489255000D+01 .2921300000D+01 .1949400000D+01 .3716100000D+01 +1 12420090108200902072454839.4 .4821000000D+00 -.4393000000D-01 .4089024000D+03 .1736050000D+01 .4204000000D-02 .8210000000D+00 .2534305000D+01 .8753000000D+00 .5308500000D+01 .1904300000D+01 .8450000000D-01 -.1159000000D-01 .1032039000D+03 .7240600000D+00 .2997000000D-02 .2235000000D+00 .2467728000D+01 .1987600000D+01 .1677000000D+00 .1830900000D+01 .2599000000D+01 -.3580000000D-02 .4218770000D+03 .1766530000D+01 .2727000000D-02 .9056000000D+00 .4100941000D+01 .2513100000D+01 .7943000000D+00 .3443600000D+01 +1 12520090207200903092454869.4 -.7554000000D+00 -.3802000000D-01 .4039562000D+03 .1668530000D+01 .4187000000D-02 .7969000000D+00 .2142900000D+01 .4682000000D+00 .4456400000D+01 .1641500000D+01 -.2532000000D+00 -.1311000000D-01 .1212450000D+03 .7003700000D+00 .2940000000D-02 .2554000000D+00 .2102396000D+01 .1478700000D+01 .5659400000D+01 .1596800000D+01 .2541700000D+01 -.2737000000D-01 .4218319000D+03 .1748690000D+01 .4518000000D-02 .8775000000D+00 .3710354000D+01 .2126200000D+01 .5846300000D+01 .3187800000D+01 +1 12620090309200904082454899.4 -.1862900000D+01 -.1667000000D-01 .3990567000D+03 .1494230000D+01 .5635000000D-02 .7900000000D+00 .1759301000D+01 .7430000000D-01 .3536700000D+01 .1356100000D+01 -.6515000000D+00 -.7640000000D-02 .1365322000D+03 .6212300000D+00 .2730000000D-02 .2857000000D+00 .1739286000D+01 .9749000000D+00 .4687200000D+01 .1340500000D+01 .1844200000D+01 -.4247000000D-01 .4217997000D+03 .1545090000D+01 .6117000000D-02 .8488000000D+00 .3327714000D+01 .1751800000D+01 .5252200000D+01 .2934700000D+01 +1 12720090408200905082454929.4 -.2482200000D+01 .5520000000D-02 .3948938000D+03 .1174020000D+01 .7961000000D-02 .8309000000D+00 .1393389000D+01 .5999300000D+01 .2985100000D+01 .1087800000D+01 -.9365000000D+00 .5200000000D-03 .1480832000D+03 .4866000000D+00 .3428000000D-02 .3234000000D+00 .1389960000D+01 .5292000000D+00 .3799800000D+01 .1093100000D+01 .6766000000D+00 -.4254000000D-01 .4219174000D+03 .1204250000D+01 .7818000000D-02 .8366000000D+00 .2963726000D+01 .1367800000D+01 .4579900000D+01 .2726900000D+01 +1 12820090508200906072454959.4 -.2476100000D+01 .1933000000D-01 .3920988000D+03 .6862200000D+00 .9484000000D-02 .8467000000D+00 .1056170000D+01 .5654300000D+01 .2542200000D+01 .9006000000D+00 -.9890000000D+00 .6820000000D-02 .1555981000D+03 .2777800000D+00 .4124000000D-02 .3418000000D+00 .1066053000D+01 .1960000000D+00 .3237900000D+01 .9172000000D+00 -.6049000000D+00 -.3257000000D-01 .4218827000D+03 .7388600000D+00 .1088800000D-01 .8718000000D+00 .2628998000D+01 .1010200000D+01 .4113700000D+01 .2556000000D+01 +1 12920090607200907072454989.4 -.1961900000D+01 .2284000000D-01 .3908462000D+03 .8181000000D-01 .9899000000D-02 .8301000000D+00 .7593760000D+00 .4931000000D+01 .2162600000D+01 .7684000000D+00 -.8114000000D+00 .9090000000D-02 .1589780000D+03 .3552000000D-01 .4066000000D-02 .3372000000D+00 .7790160000D+00 .1200400000D+01 .2898700000D+01 .7902000000D+00 -.1594300000D+01 -.2320000000D-01 .4217249000D+03 .1075100000D+00 .1184500000D-01 .8858000000D+00 .2333806000D+01 .7827000000D+00 .3907100000D+01 .2422700000D+01 +1 13020090707200908062455019.4 -.1259700000D+01 .2490000000D-01 .3911201000D+03 .5667700000D+00 .6073000000D-02 .7966000000D+00 .5101190000D+00 .2048900000D+01 .1921000000D+01 .6538000000D+00 -.5284000000D+00 .1015000000D-01 .1580992000D+03 .2723900000D+00 .2319000000D-02 .3155000000D+00 .5350910000D+00 .2539900000D+01 .2980800000D+01 .6764000000D+00 -.2211700000D+01 -.1474000000D-01 .4216612000D+03 .5990900000D+00 .6779000000D-02 .8732000000D+00 .2084849000D+01 .3616300000D+01 .3879500000D+01 .2302000000D+01 +1 13120090806200909052455049.4 -.5654000000D+00 .2949000000D-01 .3929613000D+03 .9423100000D+00 .2936000000D-02 .8211000000D+00 .3004220000D+00 .1796400000D+01 .4922300000D+01 .5722000000D+00 -.2400000000D+00 .1139000000D-01 .1532984000D+03 .4201100000D+00 .1894000000D-02 .3102000000D+00 .3255350000D+00 .2479200000D+01 .5083200000D+01 .5870000000D+00 -.2513800000D+01 -.6170000000D-02 .4217558000D+03 .1003860000D+01 .3891000000D-02 .8286000000D+00 .1874767000D+01 .3446400000D+01 .2560000000D-01 .2168200000D+01 +1 13220090905200910052455079.4 .1492000000D+00 .3449000000D-01 .3955008000D+03 .7418000000D+00 .1087800000D-01 .8646000000D+00 .9837700000D-01 .1575600000D+01 .4740600000D+01 .4733000000D+00 .3850000000D-01 .1253000000D-01 .1467218000D+03 .3244000000D+00 .4716000000D-02 .3132000000D+00 .1191550000D+00 .2425500000D+01 .5415600000D+01 .4833000000D+00 -.2627400000D+01 .7800000000D-02 .4217878000D+03 .7585400000D+00 .1119800000D-01 .8184000000D+00 .1671970000D+01 .3271200000D+01 .1374000000D+00 .2059700000D+01 +1 13320091005200911042455109.4 .9837000000D+00 .3136000000D-01 .3971112000D+03 .6905000000D-01 .1216300000D-01 .8753000000D+00 .6146692000D+01 .1358300000D+01 .4503000000D+01 .3543000000D+00 .3385000000D+00 .1164000000D-01 .1426118000D+03 .5820000000D-01 .5218000000D-02 .3149000000D+00 .6162120000D+01 .2926900000D+01 .5271200000D+01 .3695000000D+00 -.2439000000D+01 .2292000000D-01 .4216719000D+03 .4203000000D-01 .1192200000D-01 .8361000000D+00 .1436234000D+01 .2970300000D+01 .6143100000D+01 .1929000000D+01 +1 13420091104200912042455139.4 .1853400000D+01 .1777000000D-01 .3966324000D+03 .6795000000D+00 .8773000000D-02 .8348000000D+00 .5858796000D+01 .4187200000D+01 .4121700000D+01 .1444000000D+00 .6601000000D+00 .7990000000D-02 .1438619000D+03 .2744000000D+00 .3948000000D-02 .3091000000D+00 .5872171000D+01 .4824400000D+01 .4825500000D+01 .1672000000D+00 -.1824800000D+01 .3576000000D-01 .4216012000D+03 .7015300000D+00 .9773000000D-02 .8494000000D+00 .1147694000D+01 .5900100000D+01 .5660200000D+01 .1757500000D+01 +1 13520091204201001032455169.4 .2411400000D+01 .4400000000D-03 .3942076000D+03 .1241620000D+01 .5207000000D-02 .7893000000D+00 .5521825000D+01 .3868400000D+01 .3380600000D+01 .6163800000D+01 .9120000000D+00 .2500000000D-02 .1500281000D+03 .5183800000D+00 .2580000000D-02 .3085000000D+00 .5538216000D+01 .4524500000D+01 .3890300000D+01 .6191100000D+01 -.7365000000D+00 .3992000000D-01 .4216921000D+03 .1262200000D+01 .7190000000D-02 .8513000000D+00 .8111590000D+00 .5532600000D+01 .5123400000D+01 .1484400000D+01 +1 13620100103201002022455199.4 .2400200000D+01 -.1594000000D-01 .3907209000D+03 .1550180000D+01 .3950000000D-02 .7867000000D+00 .5150246000D+01 .3503300000D+01 .2476200000D+01 .5895500000D+01 .9825000000D+00 -.4240000000D-02 .1587714000D+03 .6598800000D+00 .2670000000D-02 .3282000000D+00 .5174007000D+01 .4102100000D+01 .2804300000D+01 .5925700000D+01 .5460000000D+00 .3835000000D-01 .4217516000D+03 .1637500000D+01 .4121000000D-02 .8465000000D+00 .4413710000D+00 .5147700000D+01 .4346900000D+01 .1164700000D+01 +1 13720100202201003042455229.4 .1780400000D+01 -.2900000000D-01 .3870686000D+03 .1685560000D+01 .2872000000D-02 .7773000000D+00 .4759850000D+01 .3111800000D+01 .1491400000D+01 .5665100000D+01 .7980000000D+00 -.1112000000D-01 .1676120000D+03 .7194400000D+00 .2632000000D-02 .3452000000D+00 .4793961000D+01 .3611600000D+01 .1967100000D+01 .5705200000D+01 .1673800000D+01 .2913000000D-01 .4217146000D+03 .1817250000D+01 .3712000000D-02 .8772000000D+00 .5297000000D-01 .4764900000D+01 .3035100000D+01 .8711000000D+00 +1 13820100304201004032455259.4 .7881000000D+00 -.3903000000D-01 .3838310000D+03 .1695220000D+01 .3782000000D-02 .7660000000D+00 .4363356000D+01 .2734700000D+01 .3203000000D+00 .5440800000D+01 .4087000000D+00 -.1730000000D-01 .1747304000D+03 .7261500000D+00 .2666000000D-02 .3565000000D+00 .4409660000D+01 .3111900000D+01 .9757000000D+00 .5494500000D+01 .2388100000D+01 .1049000000D-01 .4217390000D+03 .1803600000D+01 .4356000000D-02 .8793000000D+00 .5941852000D+01 .4369500000D+01 .2184600000D+01 .6277000000D+00 +1 13920100403201005032455289.4 -.3806000000D+00 -.3746000000D-01 .3816290000D+03 .1551030000D+01 .5209000000D-02 .7566000000D+00 .3971133000D+01 .2377000000D+01 .6015700000D+01 .5153800000D+01 -.1120000000D+00 -.1793000000D-01 .1793661000D+03 .6627900000D+00 .3105000000D-02 .3593000000D+00 .4030621000D+01 .2638700000D+01 .1981000000D+00 .5222000000D+01 .2546100000D+01 -.1450000000D-01 .4218021000D+03 .1673030000D+01 .5274000000D-02 .8561000000D+00 .5552777000D+01 .3963800000D+01 .1235800000D+01 .4167000000D+00 +1 14020100503201006022455319.4 -.1456600000D+01 -.2426000000D-01 .3807763000D+03 .1273750000D+01 .5949000000D-02 .7585000000D+00 .3593467000D+01 .2012500000D+01 .5376500000D+01 .4869400000D+01 -.6273000000D+00 -.1248000000D-01 .1816307000D+03 .5294000000D+00 .3029000000D-02 .3619000000D+00 .3666380000D+01 .2166500000D+01 .5708800000D+01 .4950400000D+01 .2090100000D+01 -.3362000000D-01 .4216806000D+03 .1422170000D+01 .8044000000D-02 .8491000000D+00 .5178255000D+01 .3585600000D+01 .5678000000D+00 .1738000000D+00 +1 14120100602201007022455349.4 -.2184200000D+01 -.5460000000D-02 .3807955000D+03 .9033300000D+00 .8465000000D-02 .7697000000D+00 .3240972000D+01 .1649400000D+01 .4766200000D+01 .4611100000D+01 -.1001500000D+01 -.3810000000D-02 .1820844000D+03 .3548200000D+00 .3771000000D-02 .3652000000D+00 .3326811000D+01 .1699000000D+01 .4867100000D+01 .4704500000D+01 .1074000000D+01 -.3587000000D-01 .4214984000D+03 .9954500000D+00 .1046500000D-01 .8744000000D+00 .4827932000D+01 .3251400000D+01 .1634000000D+00 .6258200000D+01 +1 14220100702201008012455379.4 -.2373200000D+01 .7110000000D-02 .3809686000D+03 .3907700000D+00 .1096800000D-01 .7525000000D+00 .2924121000D+01 .1345200000D+01 .4462200000D+01 .4438000000D+01 -.1133300000D+01 .2150000000D-02 .1816968000D+03 .1251900000D+00 .4740000000D-02 .3549000000D+00 .3021270000D+01 .1307700000D+01 .4458500000D+01 .4549100000D+01 -.1410000000D+00 -.2730000000D-01 .4213691000D+03 .3921300000D+00 .1155600000D-01 .9161000000D+00 .4512923000D+01 .2953800000D+01 .6101600000D+01 .6129300000D+01 +1 14320100801201008312455409.4 -.2100700000D+01 .1254000000D-01 .3809775000D+03 .2704900000D+00 .9181000000D-02 .7472000000D+00 .2652748000D+01 .4194400000D+01 .4308000000D+01 .4350500000D+01 -.1051700000D+01 .4990000000D-02 .1816116000D+03 .1612300000D+00 .3719000000D-02 .3534000000D+00 .2757599000D+01 .4209300000D+01 .4374100000D+01 .4466200000D+01 -.1200000000D+01 -.1744000000D-01 .4212350000D+03 .3148400000D+00 .9545000000D-02 .8923000000D+00 .4243399000D+01 .5773300000D+01 .5887900000D+01 .6035900000D+01 +1 14420100831201009302455439.4 -.1600100000D+01 .1563000000D-01 .3808107000D+03 .8419400000D+00 .1144000000D-02 .7551000000D+00 .2428481000D+01 .4014900000D+01 .4654500000D+01 .4283200000D+01 -.8507000000D+00 .6920000000D-02 .1821569000D+03 .3930600000D+00 .7850000000D-03 .3591000000D+00 .2535125000D+01 .4054400000D+01 .5870200000D+01 .4391200000D+01 -.1890500000D+01 -.1406000000D-01 .4211891000D+03 .8952900000D+00 .2080000000D-02 .8527000000D+00 .4019790000D+01 .5567800000D+01 .1127000000D+00 .5936500000D+01 +1 14520100930201010302455469.4 -.1010500000D+01 .2174000000D-01 .3807333000D+03 .8891500000D+00 .8266000000D-02 .7973000000D+00 .2230099000D+01 .3832300000D+01 .7222000000D+00 .4186400000D+01 -.5866000000D+00 .1032000000D-01 .1824677000D+03 .3816600000D+00 .4124000000D-02 .3803000000D+00 .2332084000D+01 .3956400000D+01 .7816000000D+00 .4278700000D+01 -.2334200000D+01 -.9830000000D-02 .4212651000D+03 .9446400000D+00 .8806000000D-02 .8296000000D+00 .3820109000D+01 .5367900000D+01 .2112600000D+01 .5805700000D+01 +1 14620101030201011292455499.4 -.3128000000D+00 .2900000000D-01 .3807808000D+03 .3383800000D+00 .1135700000D-01 .8194000000D+00 .2014415000D+01 .3617800000D+01 .4898000000D+00 .4024300000D+01 -.2547000000D+00 .1410000000D-01 .1820806000D+03 .1153000000D+00 .5140000000D-02 .3888000000D+00 .2108400000D+01 .3883400000D+01 .6646000000D+00 .4110900000D+01 -.2612200000D+01 .9100000000D-03 .4213783000D+03 .3785400000D+00 .1326200000D-01 .8619000000D+00 .3602262000D+01 .5118300000D+01 .1976500000D+01 .5688500000D+01 +1 14720101129201012292455529.4 .5808000000D+00 .2935000000D-01 .3807110000D+03 .4056700000D+00 .9611000000D-02 .8113000000D+00 .1748164000D+01 .2180000000D+00 .4830000000D-01 .3849100000D+01 .1773000000D+00 .1480000000D-01 .1818634000D+03 .2204100000D+00 .4060000000D-02 .3848000000D+00 .1835810000D+01 .3391000000D+00 .1520000000D+00 .3934500000D+01 -.2662500000D+01 .2018000000D-01 .4214327000D+03 .4237300000D+00 .1155100000D-01 .8741000000D+00 .3334728000D+01 .1783600000D+01 .1682300000D+01 .5527400000D+01 +1 14820101229201101282455559.4 .1539400000D+01 .1964000000D-01 .3805826000D+03 .1007160000D+01 .7146000000D-02 .7871000000D+00 .1427400000D+01 .6157300000D+01 .5793800000D+01 .3633000000D+01 .6543000000D+00 .1057000000D-01 .1821688000D+03 .4776200000D+00 .3206000000D-02 .3736000000D+00 .1513427000D+01 .6276100000D+01 .5628200000D+01 .3717900000D+01 -.2208600000D+01 .3560000000D-01 .4213859000D+03 .1110240000D+01 .7539000000D-02 .8450000000D+00 .3013990000D+01 .1451200000D+01 .1154000000D+01 .5308500000D+01 +2 14919990101199901312451179.4 -.4694200000D+01 -.8842000000D-01 .6082918000D+03 .1676630000D+01 .9756000000D-02 .2738100000D+01 .4265965000D+01 .2681500000D+01 .2414300000D+01 .6114300000D+01 -.1893500000D+01 -.4559000000D-01 .2842012000D+03 .7785800000D+00 .4499000000D-02 .1279700000D+01 .4353977000D+01 .2860900000D+01 .2269400000D+01 .6203400000D+01 .7952300000D+01 -.1123600000D+00 .6705151000D+03 .1817410000D+01 .1195600000D-01 .3009400000D+01 .5852216000D+01 .4299200000D+01 .3892500000D+01 .1430600000D+01 +2 15019990131199903022451209.4 -.7456500000D+01 -.2917000000D-01 .6079752000D+03 .2221840000D+01 .6476000000D-02 .2727000000D+01 .6993140000D+00 .5407900000D+01 .4835300000D+01 .5772600000D+01 -.3314800000D+01 -.1861000000D-01 .2852157000D+03 .1002890000D+01 .4057000000D-02 .1280600000D+01 .7900020000D+00 .5503200000D+01 .4377700000D+01 .5865800000D+01 .4580400000D+01 -.1507100000D+00 .6706113000D+03 .2484760000D+01 .6758000000D-02 .2973800000D+01 .2287111000D+01 .7176000000D+00 .6097000000D+01 .1047700000D+01 +2 15119990302199904012451239.4 -.8422100000D+01 .3977000000D-01 .6083620000D+03 .2545690000D+01 .5489000000D-02 .2707400000D+01 .3395533000D+01 .1858500000D+01 .4054000000D+00 .5378600000D+01 -.3917700000D+01 .1455000000D-01 .2835393000D+03 .1126210000D+01 .4804000000D-02 .1251300000D+01 .3492358000D+01 .1838600000D+01 .1371000000D+00 .5481300000D+01 -.8580000000D-01 -.1479000000D+00 .6706799000D+03 .2793220000D+01 .5478000000D-02 .3024000000D+01 .4983588000D+01 .3407100000D+01 .1919500000D+01 .6772000000D+00 +2 15219990401199905012451269.4 -.7157100000D+01 .9912000000D-01 .6111889000D+03 .2607510000D+01 .4592000000D-02 .2728500000D+01 .6082768000D+01 .4549400000D+01 .2432400000D+01 .4974400000D+01 -.3451700000D+01 .4206000000D-01 .2785960000D+03 .1124690000D+01 .4378000000D-02 .1218200000D+01 .6188121000D+01 .4394500000D+01 .2391200000D+01 .5085700000D+01 -.4729900000D+01 -.1089100000D+00 .6704357000D+03 .2815690000D+01 .6203000000D-02 .3036000000D+01 .1387971000D+01 .6099000000D+01 .4145800000D+01 .3022000000D+00 +2 15319990501199905312451299.4 -.4019300000D+01 .1350800000D+00 .6151309000D+03 .2473270000D+01 .6094000000D-02 .2787300000D+01 .2488918000D+01 .9768000000D+00 .4727000000D+01 .4611900000D+01 -.2112500000D+01 .5575000000D-01 .2697204000D+03 .1039800000D+01 .4455000000D-02 .1189500000D+01 .2605182000D+01 .6825000000D+00 .4698900000D+01 .4731500000D+01 -.8021700000D+01 -.4683000000D-01 .6703907000D+03 .2714290000D+01 .8340000000D-02 .2958500000D+01 .4078794000D+01 .2504400000D+01 .6218800000D+01 .6204200000D+01 +2 15419990531199906302451329.4 .9870000000D-01 .1389100000D+00 .6199972000D+03 .2172210000D+01 .9567000000D-02 .2819500000D+01 .5190271000D+01 .3697300000D+01 .8167000000D+00 .4265000000D+01 -.4065000000D+00 .5503000000D-01 .2583440000D+03 .8866500000D+00 .4905000000D-02 .1144000000D+01 .5319127000D+01 .3259300000D+01 .6332000000D+00 .4400200000D+01 -.9319600000D+01 .2984000000D-01 .6705342000D+03 .2309800000D+01 .9654000000D-02 .3030800000D+01 .4964410000D+00 .5192000000D+01 .2284300000D+01 .5850900000D+01 +2 15519990630199907302451359.4 .4232100000D+01 .1032900000D+00 .6250900000D+03 .1651890000D+01 .1383800000D-01 .2869900000D+01 .1629804000D+01 .1333000000D+00 .3298900000D+01 .3924000000D+01 .1219700000D+01 .4063000000D-01 .2466238000D+03 .6545500000D+00 .6016000000D-02 .1106300000D+01 .1772048000D+01 .5851000000D+01 .2897800000D+01 .4071100000D+01 -.8373700000D+01 .8924000000D-01 .6700690000D+03 .1743190000D+01 .1467900000D-01 .3110400000D+01 .3219553000D+01 .1645300000D+01 .4865000000D+01 .5513100000D+01 +2 15619990730199908292451389.4 .7359700000D+01 .4935000000D-01 .6284126000D+03 .8098300000D+00 .1720100000D-01 .2948800000D+01 .4384348000D+01 .2927500000D+01 .6080200000D+01 .3609200000D+01 .2435600000D+01 .2299000000D-01 .2375405000D+03 .3021000000D+00 .6900000000D-02 .1098500000D+01 .4539456000D+01 .2177000000D+01 .5490600000D+01 .3767700000D+01 -.5720200000D+01 .1166900000D+00 .6703016000D+03 .8613400000D+00 .1843000000D-01 .3103400000D+01 .5974752000D+01 .4381900000D+01 .1240600000D+01 .5214700000D+01 +2 15719990829199909282451419.4 .8901900000D+01 .4190000000D-02 .6296171000D+03 .2314800000D+00 .1663400000D-01 .2970600000D+01 .9009220000D+00 .2524000000D+01 .2580900000D+01 .3367300000D+01 .3150800000D+01 .1036000000D-01 .2348282000D+03 .1288800000D+00 .6515000000D-02 .1116800000D+01 .1064193000D+01 .2272400000D+01 .1994100000D+01 .3530400000D+01 -.2246000000D+01 .1104300000D+00 .6698689000D+03 .2961200000D+00 .1665800000D-01 .3102400000D+01 .2490935000D+01 .3989700000D+01 .4128700000D+01 .4948500000D+01 +2 15819990928199910282451449.4 .9100500000D+01 -.2922000000D-01 .6280232000D+03 .1313430000D+01 .3868000000D-02 .2991000000D+01 .3747913000D+01 .5419000000D+01 .5738700000D+01 .3149700000D+01 .3501100000D+01 -.5300000000D-03 .2397142000D+03 .5391900000D+00 .1268000000D-02 .1173300000D+01 .3911308000D+01 .4925300000D+01 .5239500000D+01 .3308800000D+01 .1134000000D+01 .9227000000D-01 .6700269000D+03 .1346050000D+01 .6274000000D-02 .3156600000D+01 .5340154000D+01 .6225000000D+00 .9403000000D+00 .4732700000D+01 +2 15919991028199911272451479.4 .8236300000D+01 -.5104000000D-01 .6239998000D+03 .1535210000D+01 .1056500000D-01 .2943900000D+01 .3462160000D+00 .1999400000D+01 .5038800000D+01 .2928900000D+01 .3501000000D+01 -.1307000000D-01 .2488497000D+03 .6100600000D+00 .4836000000D-02 .1197300000D+01 .5014020000D+00 .1509000000D+01 .4573000000D+01 .3082000000D+01 .3995100000D+01 .8321000000D-01 .6701555000D+03 .1653060000D+01 .1184700000D-01 .3237400000D+01 .1937719000D+01 .3519700000D+01 .3142000000D+00 .4503700000D+01 +2 16019991127199912272451509.4 .6633400000D+01 -.8475000000D-01 .6212977000D+03 .8589600000D+00 .1955500000D-01 .2948200000D+01 .3217517000D+01 .4892000000D+01 .1736700000D+01 .2667600000D+01 .3083000000D+01 -.3131000000D-01 .2563309000D+03 .2987600000D+00 .8177000000D-02 .1223200000D+01 .3360813000D+01 .4387300000D+01 .1367000000D+01 .2806500000D+01 .6556000000D+01 .7016000000D-01 .6700339000D+03 .8949800000D+00 .2061000000D-01 .3182900000D+01 .4809133000D+01 .8550000000D-01 .3221300000D+01 .4270600000D+01 +2 16119991227200001262451539.4 .4040900000D+01 -.1190200000D+00 .6200568000D+03 .3290600000D+00 .1712000000D-01 .2954200000D+01 .6044463000D+01 .4597600000D+01 .4484000000D+01 .2379400000D+01 .2111000000D+01 -.4821000000D-01 .2578819000D+03 .2046400000D+00 .7005000000D-02 .1219600000D+01 .6178557000D+01 .4426900000D+01 .4014500000D+01 .2507900000D+01 .8645800000D+01 .3612000000D-01 .6703654000D+03 .3867100000D+00 .1824600000D-01 .3128500000D+01 .1351804000D+01 .6065000000D+01 .6042300000D+01 .3974100000D+01 +2 16220000126200002252451569.4 .5009000000D+00 -.1366800000D+00 .6221358000D+03 .1364150000D+01 .1190400000D-01 .2926900000D+01 .2534640000D+01 .1039400000D+01 .8591000000D+00 .2051900000D+01 .6674000000D+00 -.5498000000D-01 .2536008000D+03 .6191200000D+00 .5024000000D-02 .1170600000D+01 .2664766000D+01 .6766000000D+00 .1098000000D+00 .2181900000D+01 .9717700000D+01 -.2749000000D-01 .6702784000D+03 .1473750000D+01 .1324500000D-01 .3177000000D+01 .4123580000D+01 .2567000000D+01 .2301700000D+01 .3612300000D+01 +2 16320000225200003262451599.4 -.3601900000D+01 -.1117600000D+00 .6261019000D+03 .2070820000D+01 .7829000000D-02 .2906300000D+01 .5265987000D+01 .3785000000D+01 .3247900000D+01 .1655100000D+01 -.9824000000D+00 -.4097000000D-01 .2430411000D+03 .8888900000D+00 .4489000000D-02 .1086300000D+01 .5398450000D+01 .3298500000D+01 .2166700000D+01 .1794500000D+01 .8957700000D+01 -.9917000000D-01 .6701806000D+03 .2262010000D+01 .7951000000D-02 .3137100000D+01 .5712990000D+00 .5297500000D+01 .4569300000D+01 .3241100000D+01 +2 16420000326200004252451629.4 -.7079200000D+01 -.5594000000D-01 .6322063000D+03 .2472040000D+01 .5831000000D-02 .2890600000D+01 .1688539000D+01 .2156000000D+00 .5376600000D+01 .1260800000D+01 -.2244500000D+01 -.1583000000D-01 .2267320000D+03 .1034470000D+01 .4776000000D-02 .9808000000D+00 .1829182000D+01 .5864000000D+01 .4347100000D+01 .1406400000D+01 .6033600000D+01 -.1464200000D+00 .6705321000D+03 .2638170000D+01 .5898000000D-02 .3054500000D+01 .3275135000D+01 .1700100000D+01 .5819000000D+00 .2865100000D+01 +2 16520000425200005252451659.4 -.8860900000D+01 .1711000000D-01 .6396988000D+03 .2667040000D+01 .5327000000D-02 .2908300000D+01 .4382415000D+01 .2907900000D+01 .1034300000D+01 .8918000000D+00 -.2733900000D+01 .1039000000D-01 .2050036000D+03 .1092420000D+01 .5078000000D-02 .8671000000D+00 .4536973000D+01 .2124400000D+01 .3493000000D+00 .1048600000D+01 .1527200000D+01 -.1527500000D+00 .6701492000D+03 .2798410000D+01 .6224000000D-02 .2992300000D+01 .5967234000D+01 .4401200000D+01 .2593800000D+01 .2474300000D+01 +2 16620000525200006242451689.4 -.8324600000D+01 .8427000000D-01 .6474457000D+03 .2584660000D+01 .5856000000D-02 .2912600000D+01 .7907140000D+00 .5594700000D+01 .3376100000D+01 .5136000000D+00 -.2404100000D+01 .2624000000D-01 .1791931000D+03 .1073870000D+01 .4626000000D-02 .7371000000D+00 .9673000000D+00 .4648900000D+01 .2679200000D+01 .7020000000D+00 -.3213400000D+01 -.1251100000D+00 .6704444000D+03 .2725820000D+01 .6470000000D-02 .2996800000D+01 .2374159000D+01 .7978000000D+00 .4749000000D+01 .2092500000D+01 +2 16720000624200007242451719.4 -.5650000000D+01 .1299700000D+00 .6542967000D+03 .2392460000D+01 .9012000000D-02 .2895800000D+01 .3490823000D+01 .2008300000D+01 .5555500000D+01 .1431000000D+00 -.1573000000D+01 .2859000000D-01 .1516151000D+03 .9968100000D+00 .4532000000D-02 .6118000000D+00 .3698677000D+01 .9138000000D+00 .4831000000D+01 .3689000000D+00 -.7019300000D+01 -.6551000000D-01 .6703834000D+03 .2488600000D+01 .9400000000D-02 .2976800000D+01 .5071775000D+01 .3491600000D+01 .6820000000D+00 .1732900000D+01 +2 16820000724200008232451749.4 -.1675700000D+01 .1434500000D+00 .6600373000D+03 .1906220000D+01 .1165600000D-01 .2942400000D+01 .6206426000D+01 .4707700000D+01 .1734300000D+01 .6102000000D+01 -.7005000000D+00 .2373000000D-01 .1255377000D+03 .8248700000D+00 .5014000000D-02 .5053000000D+00 .1743700000D+00 .3485400000D+01 .6646000000D+00 .7690000000D-01 -.8902400000D+01 .7900000000D-03 .6702943000D+03 .1980670000D+01 .1263900000D-01 .2922000000D+01 .1502738000D+01 .6208600000D+01 .3207900000D+01 .1406300000D+01 +2 16920000823200009222451779.4 .2582100000D+01 .1185600000D+00 .6632290000D+03 .1200060000D+01 .1682400000D-01 .2982100000D+01 .2666540000D+01 .1169700000D+01 .4326000000D+01 .5823300000D+01 -.1240000000D-01 .1727000000D-01 .1052341000D+03 .5381000000D+00 .6993000000D-02 .4484000000D+00 .2968564000D+01 .6123300000D+01 .3077400000D+01 .6139900000D+01 -.8779800000D+01 .6153000000D-01 .6704341000D+03 .1237440000D+01 .1729800000D-01 .2975000000D+01 .4244530000D+01 .2652800000D+01 .5781200000D+01 .1086600000D+01 +2 17020000922200010222451809.4 .6071800000D+01 .7452000000D-01 .6651839000D+03 .1737000000D+00 .1850300000D-01 .2980200000D+01 .5448903000D+01 .3874300000D+01 .7800000000D+00 .5555200000D+01 .4797000000D+00 .1591000000D-01 .9540180000D+02 .1173200000D+00 .7883000000D-02 .4352000000D+00 .5786611000D+01 .2415300000D+01 .5784000000D+01 .5898300000D+01 -.6973400000D+01 .9302000000D-01 .6702411000D+03 .1553300000D+00 .1843200000D-01 .3063400000D+01 .7425680000D+00 .5501100000D+01 .2347400000D+01 .8198000000D+00 +2 17120001022200011212451839.4 .8323800000D+01 .3078000000D-01 .6642361000D+03 .9933400000D+00 .1094600000D-01 .2981800000D+01 .1995879000D+01 .3595900000D+01 .3839800000D+01 .5303200000D+01 .9585000000D+00 .1683000000D-01 .9892170000D+02 .3865600000D+00 .4506000000D-02 .4790000000D+00 .2324831000D+01 .2386800000D+01 .2513700000D+01 .5615700000D+01 -.4263600000D+01 .9878000000D-01 .6701468000D+03 .9922000000D+00 .1189900000D-01 .3098900000D+01 .3574030000D+01 .5127000000D+01 .5272500000D+01 .6217000000D+00 +2 17220001121200012212451869.4 .9339200000D+01 -.2350000000D-02 .6619904000D+03 .1659510000D+01 .6370000000D-02 .3065500000D+01 .4868347000D+01 .2290000000D+00 .3072000000D+01 .5128000000D+01 .1497000000D+01 .1306000000D-01 .1143320000D+03 .6706200000D+00 .2460000000D-02 .5693000000D+00 .5151346000D+01 .5285100000D+01 .1910000000D+01 .5394000000D+01 -.1318400000D+01 .9766000000D-01 .6704962000D+03 .1729180000D+01 .7118000000D-02 .3096000000D+01 .1633040000D+00 .1751400000D+01 .4723900000D+01 .4176000000D+00 +2 17320001221200101202451899.4 .9315900000D+01 -.3302000000D-01 .6586929000D+03 .1246440000D+01 .1808700000D-01 .3108400000D+01 .1464939000D+01 .3130400000D+01 .6258200000D+01 .4892800000D+01 .1916100000D+01 .2040000000D-02 .1319930000D+03 .5106700000D+00 .7210000000D-02 .6520000000D+00 .1703064000D+01 .1887400000D+01 .5135800000D+01 .5118300000D+01 .1685700000D+01 .1018400000D+00 .6701397000D+03 .1265060000D+01 .1811300000D-01 .3175200000D+01 .3044950000D+01 .4615300000D+01 .1468900000D+01 .1952000000D+00 +2 17420010120200102192451929.4 .8255800000D+01 -.7500000000D-01 .6566752000D+03 .1148800000D+00 .1892600000D-01 .3112500000D+01 .4310613000D+01 .5973600000D+01 .2796900000D+01 .4613800000D+01 .1958900000D+01 -.1335000000D-01 .1408165000D+03 .8750000000D-01 .7714000000D-02 .6642000000D+00 .4523502000D+01 .3939200000D+01 .1672700000D+01 .4824500000D+01 .4805400000D+01 .9812000000D-01 .6705356000D+03 .1270300000D+00 .2028500000D-01 .3236600000D+01 .5890253000D+01 .1196500000D+01 .4310000000D+01 .6190900000D+01 +2 17520010219200103212451959.4 .5932100000D+01 -.1251000000D+00 .6575951000D+03 .1049620000D+01 .1377300000D-01 .3138300000D+01 .8205620000D+00 .5616400000D+01 .5478400000D+01 .4275000000D+01 .1521800000D+01 -.2532000000D-01 .1364550000D+03 .4202700000D+00 .6134000000D-02 .6099000000D+00 .1028952000D+01 .4661200000D+01 .4158200000D+01 .4487200000D+01 .7750100000D+01 .6437000000D-01 .6702104000D+03 .1083190000D+01 .1428000000D-01 .3226200000D+01 .2399575000D+01 .8576000000D+00 .6588000000D+00 .5866700000D+01 +2 17620010321200104202451989.4 .2182500000D+01 -.1512500000D+00 .6606670000D+03 .1873850000D+01 .9782000000D-02 .3205500000D+01 .3567808000D+01 .2078900000D+01 .1568300000D+01 .3910000000D+01 .7421000000D+00 -.2435000000D-01 .1199406000D+03 .7643800000D+00 .5280000000D-02 .5164000000D+00 .3794329000D+01 .9577000000D+00 .1091000000D+00 .4154600000D+01 .9616500000D+01 .1170000000D-02 .6705984000D+03 .1934820000D+01 .9550000000D-02 .3202900000D+01 .5145915000D+01 .3578500000D+01 .3166000000D+01 .5502500000D+01 +2 17720010420200105202452019.4 -.2338500000D+01 -.1387600000D+00 .6646810000D+03 .2408870000D+01 .6658000000D-02 .3235100000D+01 .2195000000D-02 .4780200000D+01 .3706200000D+01 .3528000000D+01 .6300000000D-02 -.1137000000D-01 .9425530000D+02 .1002140000D+01 .4804000000D-02 .3848000000D+00 .2780500000D+00 .3526700000D+01 .2256600000D+01 .3826700000D+01 .9668800000D+01 -.7944000000D-01 .6705217000D+03 .2455130000D+01 .6231000000D-02 .3180800000D+01 .1578030000D+01 .1080000000D-01 .5347800000D+01 .5085800000D+01 +2 17820010520200106192452049.4 -.6552600000D+01 -.8261000000D-01 .6686382000D+03 .2623780000D+01 .6140000000D-02 .3135400000D+01 .2702663000D+01 .1168400000D+01 .5949500000D+01 .3123900000D+01 -.3210000000D+00 .3780000000D-02 .6266490000D+02 .1126750000D+01 .4645000000D-02 .2148000000D+00 .3103339000D+01 .6083700000D+01 .4533100000D+01 .3643400000D+01 .7339700000D+01 -.1350100000D+00 .6705983000D+03 .2686200000D+01 .5334000000D-02 .3176700000D+01 .4276896000D+01 .2704700000D+01 .1127500000D+01 .4683100000D+01 +2 17920010619200107192452079.4 -.9154500000D+01 -.6520000000D-02 .6705579000D+03 .2669460000D+01 .7001000000D-02 .3081800000D+01 .5398191000D+01 .3841800000D+01 .1691600000D+01 .2725200000D+01 -.1817000000D+00 .1137000000D-01 .3147910000D+02 .1163710000D+01 .4594000000D-02 .1042000000D+00 .6226218000D+01 .2364600000D+01 .4814000000D+00 .4174100000D+01 .3213700000D+01 -.1551700000D+00 .6706333000D+03 .2716610000D+01 .6225000000D-02 .3107600000D+01 .6870850000D+00 .5399200000D+01 .3171100000D+01 .4307000000D+01 +2 18020010719200108182452109.4 -.9316700000D+01 .6212000000D-01 .6709660000D+03 .2466740000D+01 .7329000000D-02 .3083300000D+01 .1813933000D+01 .2232000000D+00 .3973800000D+01 .2360600000D+01 .1756000000D+00 .6820000000D-02 .2652250000D+02 .1109300000D+01 .4457000000D-02 .1704000000D+00 .3989692000D+01 .4939900000D+01 .2625800000D+01 .4919000000D+01 -.1600100000D+01 -.1352400000D+00 .6706206000D+03 .2507260000D+01 .7698000000D-02 .3030000000D+01 .3383782000D+01 .1814100000D+01 .5547500000D+01 .3929700000D+01 +2 18120010818200109172452139.4 -.7290900000D+01 .1141600000D+00 .6693472000D+03 .2090370000D+01 .1088300000D-01 .2975600000D+01 .4525160000D+01 .2910700000D+01 .6272000000D+01 .2008700000D+01 .3822000000D+00 -.5820000000D-02 .5207640000D+02 .9456400000D+00 .4860000000D-02 .2854000000D+00 .9815060000D+00 .1255500000D+01 .4746000000D+01 .4847400000D+01 -.5732000000D+01 -.8861000000D-01 .6707286000D+03 .2144090000D+01 .1172900000D-01 .3044900000D+01 .6094102000D+01 .4511000000D+01 .1498000000D+01 .3564700000D+01 +2 18220010917200110172452169.4 -.3748600000D+01 .1316100000D+00 .6669000000D+03 .1470960000D+01 .1607400000D-01 .2906900000D+01 .9765420000D+00 .5634300000D+01 .2562000000D+01 .1684500000D+01 .1925000000D+00 -.1486000000D-01 .7588570000D+02 .6727300000D+00 .6731000000D-02 .3682000000D+00 .3863229000D+01 .3919300000D+01 .8005000000D+00 .4593000000D+01 -.8293600000D+01 -.2849000000D-01 .6709487000D+03 .1457550000D+01 .1506300000D-01 .2971400000D+01 .2543772000D+01 .9556000000D+00 .4121400000D+01 .3259000000D+01 +2 18320011017200111162452199.4 .1840000000D+00 .1209700000D+00 .6653024000D+03 .5121000000D+00 .1886900000D-01 .2914400000D+01 .3745537000D+01 .2081700000D+01 .5229500000D+01 .1415700000D+01 -.2672000000D+00 -.1545000000D-01 .9000130000D+02 .2632200000D+00 .8107000000D-02 .4030000000D+00 .4013680000D+00 .4396000000D+00 .3454900000D+01 .4363700000D+01 -.9016100000D+01 .2554000000D-01 .6704582000D+03 .5015900000D+00 .1889700000D-01 .2926700000D+01 .5312586000D+01 .3795900000D+01 .6357000000D+00 .3006600000D+01 +2 18420011116200112162452229.4 .3724100000D+01 .9042000000D-01 .6650694000D+03 .6773300000D+00 .1401200000D-01 .2944700000D+01 .2778780000D+00 .1787400000D+01 .1891200000D+01 .1204900000D+01 -.7233000000D+00 -.6460000000D-02 .9063460000D+02 .2541500000D+00 .6749000000D-02 .3718000000D+00 .3224537000D+01 .6104300000D+01 .1793000000D+00 .4141900000D+01 -.8217200000D+01 .6226000000D-01 .6709412000D+03 .6737500000D+00 .1451500000D-01 .2942200000D+01 .1845758000D+01 .3419200000D+01 .3475100000D+01 .2778700000D+01 +2 18520011216200201152452259.4 .6399800000D+01 .6107000000D-01 .6667625000D+03 .1545510000D+01 .1540000000D-02 .2981100000D+01 .3140613000D+01 .4667700000D+01 .6021900000D+01 .1017900000D+01 -.9148000000D+00 .4670000000D-02 .7746690000D+02 .6700300000D+00 .1720000000D-02 .3080000000D+00 .6056076000D+01 .2870100000D+01 .4389500000D+01 .3879600000D+01 -.6417200000D+01 .8022000000D-01 .6706207000D+03 .1606150000D+01 .2683000000D-02 .2943100000D+01 .4708036000D+01 .6265900000D+01 .1902300000D+01 .2571600000D+01 +2 18620020115200202142452289.4 .8324800000D+01 .3054000000D-01 .6688712000D+03 .1517840000D+01 .1613800000D-01 .2958500000D+01 .6022730000D+01 .1288100000D+01 .4392000000D+01 .8175000000D+00 -.7694000000D+00 .6540000000D-02 .5740100000D+02 .6725700000D+00 .6411000000D-02 .2123000000D+00 .2575509000D+01 .5850000000D+01 .2629400000D+01 .3584200000D+01 -.4042400000D+01 .1000900000D+00 .6708869000D+03 .1510980000D+01 .1547400000D-01 .3026400000D+01 .1308870000D+01 .2893900000D+01 .6008400000D+01 .2392700000D+01 +2 18720020214200203162452319.4 .9326400000D+01 -.2600000000D-02 .6696568000D+03 .5035500000D+00 .1867600000D-01 .3075600000D+01 .2599806000D+01 .4115700000D+01 .9964000000D+00 .5707000000D+00 -.5592000000D+00 .3220000000D-02 .4325530000D+02 .2654100000D+00 .8311000000D-02 .1924000000D+00 .5335782000D+01 .2440100000D+01 .5631200000D+01 .3297900000D+01 -.9554000000D+00 .1163700000D+00 .6708611000D+03 .5350800000D+00 .1979600000D-01 .3082000000D+01 .4168679000D+01 .5744200000D+01 .2600100000D+01 .2162200000D+01 +2 18820020316200204152452349.4 .9168200000D+01 -.5500000000D-01 .6699856000D+03 .6485600000D+00 .1657100000D-01 .3171100000D+01 .5410346000D+01 .3830800000D+01 .3722200000D+01 .2691000000D+00 -.4666000000D+00 .8600000000D-03 .4267470000D+02 .2464100000D+00 .6879000000D-02 .2300000000D+00 .1870893000D+01 .2247600000D+01 .2002500000D+01 .3094400000D+01 .2693900000D+01 .1199900000D+00 .6706440000D+03 .6843400000D+00 .1552300000D-01 .3132500000D+01 .6967060000D+00 .5443800000D+01 .5297800000D+01 .1845900000D+01 +2 18920020415200205152452379.4 .7396100000D+01 -.1141600000D+00 .6686812000D+03 .1599830000D+01 .1072600000D-01 .3198000000D+01 .1890013000D+01 .3052000000D+00 .6170200000D+01 .6211900000D+01 -.4533000000D+00 .5650000000D-02 .5572520000D+02 .6607900000D+00 .4999000000D-02 .3144000000D+00 .4746086000D+01 .4911300000D+01 .4317400000D+01 .2842800000D+01 .6314200000D+01 .9485000000D-01 .6709451000D+03 .1622040000D+01 .1011500000D-01 .3176100000D+01 .3459045000D+01 .1882700000D+01 .1675200000D+01 .1471400000D+01 +2 19020020515200206142452409.4 .3915300000D+01 -.1523700000D+00 .6665448000D+03 .2225140000D+01 .6487000000D-02 .3161200000D+01 .4618784000D+01 .2997800000D+01 .2139000000D+01 .5820700000D+01 -.2950000000D+00 .1877000000D-01 .7930950000D+02 .9259300000D+00 .4197000000D-02 .4422000000D+00 .1293775000D+01 .1256100000D+01 .1536000000D+00 .2540500000D+01 .9110000000D+01 .2945000000D-01 .6707737000D+03 .2215000000D+01 .7315000000D-02 .3234800000D+01 .6186603000D+01 .4624600000D+01 .3898200000D+01 .1110700000D+01 +2 19120020614200207142452439.4 -.6603000000D+00 -.1490700000D+00 .6622920000D+03 .2502350000D+01 .5800000000D-02 .3203800000D+01 .1042660000D+01 .5687600000D+01 .4304200000D+01 .5424000000D+01 .2604000000D+00 .3110000000D-01 .1086976000D+03 .1064610000D+01 .4056000000D-02 .6048000000D+00 .4066021000D+01 .3847700000D+01 .2304500000D+01 .2190700000D+01 .9985200000D+01 -.4832000000D-01 .6707349000D+03 .2551380000D+01 .5393000000D-02 .3262400000D+01 .2610775000D+01 .1047100000D+01 .5918200000D+01 .7134000000D+00 +2 19220020714200208132452469.4 -.5190000000D+01 -.1027300000D+00 .6563719000D+03 .2589190000D+01 .5928000000D-02 .3190200000D+01 .3741143000D+01 .2085700000D+01 .8250000000D-01 .5023300000D+01 .1219000000D+01 .3201000000D-01 .1394920000D+03 .1095860000D+01 .4200000000D-02 .7522000000D+00 .5210100000D+00 .1468000000D+00 .4532900000D+01 .1815900000D+01 .8542000000D+01 -.1168800000D+00 .6710386000D+03 .2612740000D+01 .4913000000D-02 .3226500000D+01 .5308508000D+01 .3735300000D+01 .1933700000D+01 .2957000000D+00 +2 19320020813200209122452499.4 -.8369300000D+01 -.3353000000D-01 .6498650000D+03 .2467870000D+01 .6593000000D-02 .3055700000D+01 .1562020000D+00 .4755500000D+01 .2088100000D+01 .4620700000D+01 .2224900000D+01 .1955000000D-01 .1683524000D+03 .1037940000D+01 .3751000000D-02 .8540000000D+00 .3246401000D+01 .2718800000D+01 .4290000000D+00 .1438900000D+01 .4993500000D+01 -.1495200000D+00 .6708429000D+03 .2530640000D+01 .7258000000D-02 .3234600000D+01 .1723836000D+01 .1548000000D+00 .3935300000D+01 .6187900000D+01 +2 19420020912200210122452529.4 -.9415200000D+01 .3426000000D-01 .6427126000D+03 .2119540000D+01 .9207000000D-02 .2978700000D+01 .2863515000D+01 .1189100000D+01 .4637500000D+01 .4249100000D+01 .2835100000D+01 -.2370000000D-02 .1926705000D+03 .8986300000D+00 .4552000000D-02 .9452000000D+00 .5972691000D+01 .5336500000D+01 .2641700000D+01 .1084900000D+01 .3455000000D+00 -.1412800000D+00 .6710388000D+03 .2236040000D+01 .1069600000D-01 .3178200000D+01 .4432341000D+01 .2853900000D+01 .6212400000D+01 .5827400000D+01 +2 19520021012200211112452559.4 -.8259500000D+01 .8004000000D-01 .6368982000D+03 .1580910000D+01 .1436300000D-01 .2991700000D+01 .5590949000D+01 .3913800000D+01 .8408000000D+00 .3898300000D+01 .2726200000D+01 -.2261000000D-01 .2108516000D+03 .6634600000D+00 .6082000000D-02 .1023400000D+01 .2431505000D+01 .1705300000D+01 .4855500000D+01 .7449000000D+00 -.4044000000D+01 -.1055100000D+00 .6711747000D+03 .1609750000D+01 .1397500000D-01 .3084800000D+01 .8763230000D+00 .5571900000D+01 .2470900000D+01 .5491500000D+01 +2 19620021111200212112452589.4 -.5682500000D+01 .1040700000D+00 .6334991000D+03 .7306300000D+00 .1729500000D-01 .2884800000D+01 .2066990000D+01 .3522000000D+00 .3501200000D+01 .3613200000D+01 .1982200000D+01 -.3555000000D-01 .2218794000D+03 .2929000000D+00 .7235000000D-02 .1021200000D+01 .5201538000D+01 .4507700000D+01 .1188800000D+01 .4699000000D+00 -.7184700000D+01 -.5827000000D-01 .6708568000D+03 .7588500000D+00 .1879300000D-01 .3017200000D+01 .3637092000D+01 .2081500000D+01 .5233400000D+01 .5172500000D+01 +2 19720021211200301102452619.4 -.2521900000D+01 .1048900000D+00 .6321011000D+03 .3831500000D+00 .1547300000D-01 .2788400000D+01 .4870629000D+01 .6281800000D+01 .1645000000D+00 .3377800000D+01 .8916000000D+00 -.3669000000D-01 .2243021000D+03 .1849200000D+00 .6935000000D-02 .9775000000D+00 .1729027000D+01 .3589700000D+01 .4181800000D+01 .2377000000D+00 -.8790400000D+01 -.1103000000D-01 .6712282000D+03 .4025900000D+00 .1645200000D-01 .2954400000D+01 .1584270000D+00 .1774900000D+01 .1721000000D+01 .4936100000D+01 +2 19820030110200302092452649.4 .5300000000D+00 .9679000000D-01 .6346651000D+03 .1333790000D+01 .4340000000D-02 .2789400000D+01 .1440599000D+01 .2923000000D+01 .3206800000D+01 .3185900000D+01 -.1808000000D+00 -.3117000000D-01 .2182944000D+03 .5859900000D+00 .2395000000D-02 .9331000000D+00 .4584786000D+01 .5476000000D+00 .1489500000D+01 .3870000000D-01 -.9105800000D+01 .2853000000D-01 .6709091000D+03 .1427740000D+01 .3905000000D-02 .2921300000D+01 .3011292000D+01 .4580900000D+01 .5042300000D+01 .4759000000D+01 +2 19920030209200303112452679.4 .3421300000D+01 .7986000000D-01 .6386629000D+03 .1583810000D+01 .1216700000D-01 .2827400000D+01 .4321454000D+01 .5793300000D+01 .2536900000D+01 .2994200000D+01 -.1106700000D+01 -.2196000000D-01 .2056509000D+03 .6698900000D+00 .5047000000D-02 .8768000000D+00 .1180447000D+01 .3552600000D+01 .1346000000D+00 .6134600000D+01 -.8333100000D+01 .5857000000D-01 .6710732000D+03 .1607370000D+01 .1170300000D-01 .2918100000D+01 .5893093000D+01 .1189600000D+01 .4271900000D+01 .4572100000D+01 +2 20020030311200304102452709.4 .5953800000D+01 .6450000000D-01 .6423685000D+03 .7940600000D+00 .1786000000D-01 .2826800000D+01 .9087520000D+00 .2384100000D+01 .5543500000D+01 .2785600000D+01 -.1798500000D+01 -.1795000000D-01 .1939438000D+03 .3509600000D+00 .7734000000D-02 .8427000000D+00 .4045938000D+01 .2943000000D+00 .3353200000D+01 .5919200000D+01 -.6629900000D+01 .9335000000D-01 .6710211000D+03 .8533800000D+00 .1991200000D-01 .2910700000D+01 .2478742000D+01 .4048600000D+01 .8977000000D+00 .4339200000D+01 +2 20120030410200305102452739.4 .8012100000D+01 .2780000000D-01 .6435729000D+03 .2875800000D+00 .1673100000D-01 .2817400000D+01 .3733694000D+01 .2016900000D+01 .2079300000D+01 .2534300000D+01 -.2368800000D+01 -.1151000000D-01 .1907003000D+03 .1151700000D+00 .7121000000D-02 .8488000000D+00 .5840900000D+00 .5967100000D+01 .6113200000D+01 .5668400000D+01 -.3762100000D+01 .1240300000D+00 .6709161000D+03 .3489500000D+00 .1581500000D-01 .2980400000D+01 .5304533000D+01 .3777500000D+01 .3671600000D+01 .4070300000D+01 +2 20220030510200306092452769.4 .8875500000D+01 -.2654000000D-01 .6409980000D+03 .1283710000D+01 .1122900000D-01 .2869000000D+01 .2278610000D+00 .4882500000D+01 .4542000000D+01 .2193700000D+01 -.2733100000D+01 .1970000000D-02 .1974265000D+03 .5420300000D+00 .4647000000D-02 .9138000000D+00 .3361982000D+01 .2618500000D+01 .2209000000D+01 .5327800000D+01 .1202000000D+00 .1362700000D+00 .6711578000D+03 .1347960000D+01 .1108200000D-01 .3063300000D+01 .1798129000D+01 .2235000000D+00 .5460000000D-01 .3774600000D+01 +2 20320030609200307092452799.4 .7974600000D+01 -.8761000000D-01 .6368331000D+03 .1928990000D+01 .6937000000D-02 .2933600000D+01 .2966508000D+01 .1304400000D+01 .7558000000D+00 .1826600000D+01 -.2652400000D+01 .2289000000D-01 .2115958000D+03 .8130000000D+00 .3643000000D-02 .1019000000D+01 .6105542000D+01 .5292300000D+01 .4401900000D+01 .4973100000D+01 .4335800000D+01 .1179100000D+00 .6709056000D+03 .1986400000D+01 .8112000000D-02 .3121600000D+01 .4536600000D+01 .2974800000D+01 .2416800000D+01 .3415000000D+01 +2 20420030709200308082452829.4 .5249000000D+01 -.1354600000D+00 .6308078000D+03 .2283080000D+01 .4966000000D-02 .2966900000D+01 .5680568000D+01 .4017500000D+01 .2976100000D+01 .1459700000D+01 -.1938400000D+01 .4682000000D-01 .2287848000D+03 .9628900000D+00 .3810000000D-02 .1125000000D+01 .2543888000D+01 .1638500000D+01 .2692000000D+00 .4610800000D+01 .7857500000D+01 .6560000000D-01 .6710061000D+03 .2418290000D+01 .5015000000D-02 .3116000000D+01 .9690920000D+00 .5682600000D+01 .4512600000D+01 .3020600000D+01 +2 20520030808200309072452859.4 .1186000000D+01 -.1490600000D+00 .6243784000D+03 .2436760000D+01 .4628000000D-02 .2954200000D+01 .2099034000D+01 .4428000000D+00 .4805800000D+01 .1065600000D+01 -.5368000000D+00 .6041000000D-01 .2456537000D+03 .1031610000D+01 .3670000000D-02 .1204300000D+01 .5254821000D+01 .4233400000D+01 .2383600000D+01 .4227000000D+01 .9801300000D+01 -.1539000000D-01 .6711911000D+03 .2541860000D+01 .4194000000D-02 .3229200000D+01 .3671313000D+01 .2092000000D+01 .4179000000D+00 .2644300000D+01 +2 20620030907200310072452889.4 -.3298600000D+01 -.1175000000D+00 .6187018000D+03 .2384030000D+01 .5673000000D-02 .2993100000D+01 .4797545000D+01 .3143600000D+01 .5554000000D+00 .6623000000D+00 .1289600000D+01 .5379000000D-01 .2601616000D+03 .1003560000D+01 .3445000000D-02 .1290700000D+01 .1680311000D+01 .5364000000D+00 .4566300000D+01 .3835100000D+01 .9399600000D+01 -.8919000000D-01 .6707846000D+03 .2516860000D+01 .6529000000D-02 .3272900000D+01 .8874800000D-01 .4806400000D+01 .2447200000D+01 .2248500000D+01 +2 20720031007200311062452919.4 -.6959100000D+01 -.5954000000D-01 .6139679000D+03 .2093960000D+01 .8215000000D-02 .3027700000D+01 .1218938000D+01 .5866400000D+01 .3027900000D+01 .2769000000D+00 .2972000000D+01 .3167000000D-01 .2708731000D+03 .8801000000D+00 .4213000000D-02 .1359300000D+01 .4395445000D+01 .3161300000D+01 .5067000000D+00 .3458800000D+01 .6723900000D+01 -.1332300000D+00 .6711366000D+03 .2259300000D+01 .9129000000D-02 .3236200000D+01 .2795944000D+01 .1211800000D+01 .4597000000D+01 .1850000000D+01 +2 20820031106200312062452949.4 -.8825600000D+01 -.2300000000D-02 .6108672000D+03 .1651950000D+01 .1324500000D-01 .2932000000D+01 .3942029000D+01 .2322400000D+01 .5541800000D+01 .6207000000D+01 .3964200000D+01 .5920000000D-02 .2778120000D+03 .6796600000D+00 .5999000000D-02 .1346300000D+01 .8458780000D+00 .5807300000D+01 .2750100000D+01 .3116400000D+01 .2592800000D+01 -.1375500000D+00 .6709138000D+03 .1728380000D+01 .1294200000D-01 .3235300000D+01 .5520157000D+01 .3940500000D+01 .8813000000D+00 .1488600000D+01 +2 20920031206200401052452979.4 -.8840400000D+01 .4519000000D-01 .6095422000D+03 .8507200000D+00 .1574300000D-01 .2893300000D+01 .4101670000D+00 .5045900000D+01 .1897700000D+01 .5890700000D+01 .4121400000D+01 -.1708000000D-01 .2815776000D+03 .3128000000D+00 .6811000000D-02 .1341400000D+01 .3606785000D+01 .2231100000D+01 .5301900000D+01 .2809300000D+01 -.1685200000D+01 -.1163700000D+00 .6707773000D+03 .9212000000D+00 .1781900000D-01 .3226500000D+01 .1991096000D+01 .4233000000D+00 .3579100000D+01 .1176600000D+01 +2 21020040105200402042453009.4 -.7381500000D+01 .7081000000D-01 .6086000000D+03 .1290400000D+00 .1624300000D-01 .2856200000D+01 .3205419000D+01 .4650400000D+01 .4781700000D+01 .5600700000D+01 .3561700000D+01 -.3072000000D-01 .2825264000D+03 .1171000000D+00 .6919000000D-02 .1322500000D+01 .1264390000D+00 .1579700000D+01 .1928300000D+01 .2524700000D+01 -.5182700000D+01 -.8052000000D-01 .6709424000D+03 .1494100000D+00 .1776500000D-01 .3173000000D+01 .4787342000D+01 .1162000000D+00 .8060000000D-01 .9156000000D+00 +2 21120040204200403052453039.4 -.5210600000D+01 .8417000000D-01 .6094362000D+03 .1138390000D+01 .6314000000D-02 .2825700000D+01 .6048586000D+01 .1309200000D+01 .1475800000D+01 .5388200000D+01 .2616700000D+01 -.3863000000D-01 .2817529000D+03 .5440800000D+00 .2443000000D-02 .1299100000D+01 .2973116000D+01 .4685300000D+01 .5340300000D+01 .2309700000D+01 -.7546300000D+01 -.4257000000D-01 .6706046000D+03 .1268620000D+01 .6801000000D-02 .3037200000D+01 .1347546000D+01 .2896100000D+01 .3322500000D+01 .6827000000D+00 +2 21220040305200404042453069.4 -.2765600000D+01 .9545000000D-01 .6105509000D+03 .1515810000D+01 .8385000000D-02 .2721700000D+01 .2643400000D+01 .4166400000D+01 .8846000000D+00 .5200800000D+01 .1487100000D+01 -.4361000000D-01 .2783608000D+03 .6645700000D+00 .4358000000D-02 .1231400000D+01 .5849721000D+01 .1364300000D+01 .4227300000D+01 .2123800000D+01 -.8774200000D+01 -.1332000000D-01 .6709840000D+03 .1633230000D+01 .9169000000D-02 .3007600000D+01 .4225591000D+01 .5812900000D+01 .2621300000D+01 .4849000000D+00 +2 21320040404200405042453099.4 .1810000000D-01 .1018900000D+00 .6128079000D+03 .9586900000D+00 .1575000000D-01 .2676600000D+01 .5519060000D+01 .7763000000D+00 .3928200000D+01 .4991200000D+01 .2150000000D+00 -.4666000000D-01 .2743174000D+03 .3942000000D+00 .7211000000D-02 .1193000000D+01 .2436729000D+01 .4377200000D+01 .1185800000D+01 .1906200000D+01 -.9244800000D+01 .2963000000D-01 .6709115000D+03 .1070950000D+01 .1858800000D-01 .3018400000D+01 .8158880000D+00 .2395000000D+01 .5520000000D+01 .2717000000D+00 +2 21420040504200406032453129.4 .3145400000D+01 .9061000000D-01 .6134929000D+03 .3443000000D-01 .1599800000D-01 .2680200000D+01 .2072786000D+01 .5954000000D+00 .4321000000D+00 .4708500000D+01 -.1206500000D+01 -.4268000000D-01 .2720810000D+03 .5713000000D-01 .6932000000D-02 .1191400000D+01 .5267818000D+01 .3660000000D+01 .3964400000D+01 .1618500000D+01 -.8506400000D+01 .7549000000D-01 .6706677000D+03 .8930000000D-01 .1627800000D-01 .2949100000D+01 .3652946000D+01 .2452400000D+01 .2021900000D+01 .2210000000D-01 +2 21520040603200407032453159.4 .6033500000D+01 .6015000000D-01 .6126791000D+03 .9790800000D+00 .1187700000D-01 .2666700000D+01 .4861557000D+01 .3254100000D+01 .3088300000D+01 .4416300000D+01 -.2562100000D+01 -.3132000000D-01 .2737014000D+03 .4637600000D+00 .5087000000D-02 .1200000000D+01 .1770254000D+01 .4745000000D+00 .1935000000D+00 .1324800000D+01 -.6258100000D+01 .1178700000D+00 .6710836000D+03 .1067960000D+01 .1302300000D-01 .2891900000D+01 .1574600000D+00 .4866600000D+01 .4747300000D+01 .6005900000D+01 +2 21620040703200408022453189.4 .7903400000D+01 .8020000000D-02 .6108949000D+03 .1701240000D+01 .6911000000D-02 .2655700000D+01 .1326937000D+01 .5997000000D+01 .5624500000D+01 .4106200000D+01 -.3540700000D+01 -.9200000000D-02 .2780655000D+03 .7694900000D+00 .3400000000D-02 .1223200000D+01 .4519348000D+01 .3170700000D+01 .2456300000D+01 .1018900000D+01 -.2575300000D+01 .1427300000D+00 .6706706000D+03 .1832680000D+01 .8525000000D-02 .2923200000D+01 .2906304000D+01 .1350700000D+01 .8519000000D+00 .5671700000D+01 +2 21720040802200409012453219.4 .8080200000D+01 -.5483000000D-01 .6087145000D+03 .2087020000D+01 .5083000000D-02 .2700800000D+01 .4047066000D+01 .2446800000D+01 .1693300000D+01 .3736500000D+01 -.3792700000D+01 .2021000000D-01 .2827211000D+03 .9298200000D+00 .3441000000D-02 .1264400000D+01 .9602760000D+00 .5828500000D+01 .4609800000D+01 .6536000000D+00 .1814000000D+01 .1406000000D+00 .6709616000D+03 .2288100000D+01 .5713000000D-02 .3004900000D+01 .5627864000D+01 .4056800000D+01 .3177700000D+01 .5329600000D+01 +2 21820040901200410012453249.4 .6347700000D+01 -.1130000000D+00 .6072051000D+03 .2321020000D+01 .3721000000D-02 .2760600000D+01 .4693510000D+00 .5173100000D+01 .3454600000D+01 .3356800000D+01 -.3143800000D+01 .4947000000D-01 .2858100000D+03 .1022550000D+01 .3494000000D-02 .1300700000D+01 .3672570000D+01 .2167400000D+01 .3498000000D+00 .2808000000D+00 .6034900000D+01 .9566000000D-01 .6708402000D+03 .2523500000D+01 .4481000000D-02 .3042900000D+01 .2051034000D+01 .4768000000D+00 .5077000000D+01 .4954200000D+01 +2 21920041001200410312453279.4 .2966600000D+01 -.1430100000D+00 .6072903000D+03 .2301110000D+01 .4339000000D-02 .2840100000D+01 .3168595000D+01 .1602400000D+01 .5573500000D+01 .2994200000D+01 -.1661300000D+01 .6511000000D-01 .2863278000D+03 .9924600000D+00 .3569000000D-02 .1332800000D+01 .9756000000D-01 .4766600000D+01 .2657300000D+01 .6209600000D+01 .8882200000D+01 .2507000000D-01 .6707540000D+03 .2515690000D+01 .5803000000D-02 .3067500000D+01 .4752422000D+01 .3178800000D+01 .8737000000D+00 .4574200000D+01 +2 22020041031200411302453309.4 -.1311700000D+01 -.1303700000D+00 .6082289000D+03 .2121700000D+01 .7494000000D-02 .2885300000D+01 .5873113000D+01 .4334500000D+01 .1536700000D+01 .2632700000D+01 .2855000000D+00 .5970000000D-01 .2837171000D+03 .8923600000D+00 .4263000000D-02 .1337000000D+01 .2812771000D+01 .1097600000D+01 .4813800000D+01 .5862500000D+01 .9656500000D+01 -.5335000000D-01 .6707865000D+03 .2318130000D+01 .8707000000D-02 .3190700000D+01 .1175477000D+01 .5877900000D+01 .3031700000D+01 .4192900000D+01 +2 22120041130200412302453339.4 -.5272700000D+01 -.8903000000D-01 .6107746000D+03 .1704070000D+01 .1156500000D-01 .2928300000D+01 .2309758000D+01 .7712000000D+00 .3971400000D+01 .2256400000D+01 .2091900000D+01 .4153000000D-01 .2793984000D+03 .6919300000D+00 .5373000000D-02 .1326900000D+01 .5544056000D+01 .3698100000D+01 .7351000000D+00 .5497800000D+01 .8114700000D+01 -.1051800000D+00 .6706767000D+03 .1815350000D+01 .1220100000D-01 .3279100000D+01 .3896298000D+01 .2312100000D+01 .5562200000D+01 .3839900000D+01 +2 22220041230200501292453369.4 -.8037300000D+01 -.3367000000D-01 .6127911000D+03 .1016950000D+01 .1598500000D-01 .2978800000D+01 .5056929000D+01 .3538000000D+01 .3918000000D+00 .1912400000D+01 .3373700000D+01 .1866000000D-01 .2746362000D+03 .3796800000D+00 .6845000000D-02 .1322500000D+01 .2019245000D+01 .7650000000D-01 .3295300000D+01 .5161900000D+01 .4899400000D+01 -.1216200000D+00 .6703682000D+03 .1093920000D+01 .1775500000D-01 .3247800000D+01 .3623160000D+00 .5078500000D+01 .1946100000D+01 .3517700000D+01 +2 22320050129200502282453399.4 -.9055500000D+01 .7060000000D-02 .6138538000D+03 .3209000000D-01 .1586400000D-01 .2970200000D+01 .1561153000D+01 .4937000000D+00 .3223300000D+01 .1651600000D+01 .3941600000D+01 .3020000000D-02 .2723288000D+03 .4844000000D-01 .6435000000D-02 .1321700000D+01 .4815530000D+01 .2633000000D+00 .6078900000D+01 .4908500000D+01 .1130600000D+01 -.1120000000D+00 .6705435000D+03 .2890000000D-02 .1663200000D-01 .3239800000D+01 .3150115000D+01 .5188800000D+01 .4748200000D+01 .3226900000D+01 +2 22420050228200503302453429.4 -.8724300000D+01 .3653000000D-01 .6133440000D+03 .9762300000D+00 .8132000000D-02 .2950200000D+01 .4395942000D+01 .6024600000D+01 .6132800000D+01 .1396500000D+01 .3989700000D+01 -.9780000000D-02 .2739548000D+03 .4532100000D+00 .2953000000D-02 .1330200000D+01 .1370704000D+01 .2664900000D+01 .2868000000D+01 .4656900000D+01 -.2259600000D+01 -.9459000000D-01 .6701287000D+03 .1049490000D+01 .9777000000D-02 .3256600000D+01 .5986289000D+01 .1258000000D+01 .1427900000D+01 .2995000000D+01 +2 22520050330200504292453459.4 -.7574300000D+01 .6389000000D-01 .6112389000D+03 .1483650000D+01 .5871000000D-02 .2871400000D+01 .9854720000D+00 .2602100000D+01 .5455800000D+01 .1165400000D+01 .3671900000D+01 -.2440000000D-01 .2781423000D+03 .6351500000D+00 .3228000000D-02 .1316500000D+01 .4240445000D+01 .5559200000D+01 .2116600000D+01 .4419800000D+01 -.5000100000D+01 -.7703000000D-01 .6707151000D+03 .1612720000D+01 .6558000000D-02 .3256900000D+01 .2575627000D+01 .4166100000D+01 .9056000000D+00 .2778300000D+01 +2 22620050429200505292453489.4 -.5722400000D+01 .9184000000D-01 .6095772000D+03 .1096660000D+01 .1468600000D-01 .2864900000D+01 .3863274000D+01 .5486800000D+01 .2350000000D+01 .9337000000D+00 .2962400000D+01 -.4057000000D-01 .2819688000D+03 .4313700000D+00 .6605000000D-02 .1328000000D+01 .8271430000D+00 .2200200000D+01 .5373300000D+01 .4175200000D+01 -.7231100000D+01 -.5396000000D-01 .6702027000D+03 .1196710000D+01 .1650900000D-01 .3100800000D+01 .5452241000D+01 .7264000000D+00 .3841700000D+01 .2543200000D+01 +2 22720050529200506282453519.4 -.3050300000D+01 .1142300000D+00 .6087320000D+03 .1951600000D+00 .1651100000D-01 .2811600000D+01 .4254680000D+00 .2063000000D+01 .5158200000D+01 .6843000000D+00 .1779700000D+01 -.5310000000D-01 .2835098000D+03 .2804000000D-01 .7073000000D-02 .1308800000D+01 .3664418000D+01 .4599400000D+01 .1911000000D+01 .3918500000D+01 -.8862400000D+01 -.1464000000D-01 .6707184000D+03 .1673300000D+00 .1746400000D-01 .3040200000D+01 .2014075000D+01 .3630400000D+01 .4510000000D+00 .2277100000D+01 +2 22820050628200507282453549.4 .3870000000D+00 .1176300000D+00 .6086882000D+03 .8069200000D+00 .1201200000D-01 .2758100000D+01 .3224802000D+01 .1712600000D+01 .1570500000D+01 .3862000000D+00 .1828000000D+00 -.5574000000D-01 .2829083000D+03 .4045200000D+00 .5003000000D-02 .1277100000D+01 .1756550000D+00 .4792100000D+01 .4449200000D+01 .3618100000D+01 -.9416700000D+01 .4412000000D-01 .6705703000D+03 .8882600000D+00 .1346900000D-01 .3003600000D+01 .4811734000D+01 .3257200000D+01 .3124200000D+01 .1955600000D+01 +2 22920050728200508272453579.4 .4027600000D+01 .9319000000D-01 .6101939000D+03 .1525160000D+01 .9055000000D-02 .2678200000D+01 .5980799000D+01 .4456400000D+01 .4173300000D+01 .4150000000D-01 -.1539900000D+01 -.4377000000D-01 .2802611000D+03 .6969500000D+00 .4056000000D-02 .1216900000D+01 .2931303000D+01 .1173100000D+01 .4976000000D+00 .3277900000D+01 -.8144100000D+01 .9799000000D-01 .6706280000D+03 .1689390000D+01 .9330000000D-02 .2963500000D+01 .1284722000D+01 .6000000000D+01 .5662600000D+01 .1624800000D+01 +2 23020050827200509262453609.4 .6932700000D+01 .4503000000D-01 .6126009000D+03 .2045770000D+01 .5132000000D-02 .2668100000D+01 .2424057000D+01 .9145000000D+00 .1813000000D+00 .5975400000D+01 -.2905600000D+01 -.2043000000D-01 .2745010000D+03 .8972700000D+00 .3558000000D-02 .1173000000D+01 .5661964000D+01 .3815800000D+01 .2477800000D+01 .2932900000D+01 -.5091500000D+01 .1399300000D+00 .6706097000D+03 .2234340000D+01 .5822000000D-02 .2894200000D+01 .4010999000D+01 .2443200000D+01 .1613200000D+01 .1289100000D+01 +2 23120050926200510262453639.4 .8220200000D+01 -.1816000000D-01 .6169825000D+03 .2290500000D+01 .4109000000D-02 .2713200000D+01 .5132183000D+01 .3632400000D+01 .2434400000D+01 .5638600000D+01 -.3488700000D+01 .7610000000D-02 .2652981000D+03 .9751800000D+00 .3631000000D-02 .1136200000D+01 .2094930000D+01 .1210000000D+00 .4792900000D+01 .2603300000D+01 -.7496000000D+00 .1500200000D+00 .6704472000D+03 .2490120000D+01 .5429000000D-02 .2899700000D+01 .4358580000D+00 .5153300000D+01 .3711800000D+01 .9287000000D+00 +2 23220051026200511252453669.4 .7558200000D+01 -.8748000000D-01 .6224298000D+03 .2365170000D+01 .4302000000D-02 .2716900000D+01 .1549840000D+01 .6380000000D-01 .4186800000D+01 .5270800000D+01 -.3196600000D+01 .3406000000D-01 .2521465000D+03 .9787200000D+00 .3990000000D-02 .1062200000D+01 .4807436000D+01 .2699400000D+01 .7052000000D+00 .2255900000D+01 .3777500000D+01 .1240900000D+00 .6704432000D+03 .2561460000D+01 .5405000000D-02 .3003700000D+01 .3137213000D+01 .1560400000D+01 .5503300000D+01 .5635000000D+00 +2 23320051125200512252453699.4 .4899700000D+01 -.1317900000D+00 .6287397000D+03 .2240510000D+01 .7564000000D-02 .2800200000D+01 .4254216000D+01 .2777300000D+01 .3610000000D-01 .4898700000D+01 -.2150500000D+01 .4667000000D-01 .2361795000D+03 .9104300000D+00 .4419000000D-02 .1006500000D+01 .1243798000D+01 .5268600000D+01 .2885300000D+01 .1900400000D+01 .7427600000D+01 .6193000000D-01 .6705664000D+03 .2356410000D+01 .7364000000D-02 .2993500000D+01 .5840719000D+01 .4258800000D+01 .1530900000D+01 .2225000000D+00 +2 23420051225200601242453729.4 .9671000000D+00 -.1394900000D+00 .6349648000D+03 .1855000000D+01 .1148900000D-01 .2920300000D+01 .6886010000D+00 .5498000000D+01 .2462600000D+01 .4569000000D+01 -.7579000000D+00 .4449000000D-01 .2193680000D+03 .7404200000D+00 .4913000000D-02 .9676000000D+00 .3978750000D+01 .1552500000D+01 .5045500000D+01 .1578400000D+01 .9277900000D+01 -.1119000000D-01 .6701113000D+03 .1942500000D+01 .1219600000D-01 .3022300000D+01 .2274954000D+01 .7039000000D+00 .3997500000D+01 .6168900000D+01 +2 23520060124200602232453759.4 -.3241100000D+01 -.1090400000D+00 .6397542000D+03 .1162320000D+01 .1504500000D-01 .3002000000D+01 .3431212000D+01 .1965400000D+01 .5131200000D+01 .4268400000D+01 .5703000000D+00 .3458000000D-01 .2050304000D+03 .4687600000D+00 .6133000000D-02 .9379000000D+00 .4567260000D+00 .4145200000D+01 .1155000000D+01 .1301300000D+01 .8954800000D+01 -.6591000000D-01 .6703918000D+03 .1216280000D+01 .1570200000D-01 .3127100000D+01 .5017753000D+01 .3425800000D+01 .2881000000D+00 .5837200000D+01 +2 23620060223200603252453789.4 -.6582900000D+01 -.6633000000D-01 .6422155000D+03 .2450000000D+00 .1753800000D-01 .3058300000D+01 .6212115000D+01 .4755000000D+01 .1574600000D+01 .3968200000D+01 .1613800000D+01 .2569000000D-01 .1973667000D+03 .1044300000D+00 .6924000000D-02 .9390000000D+00 .3251442000D+01 .2238000000D+00 .3863900000D+01 .1011900000D+01 .6947800000D+01 -.9222000000D-01 .6700606000D+03 .2190400000D+00 .1742800000D-01 .3190500000D+01 .1514731000D+01 .6272200000D+01 .3108200000D+01 .5555500000D+01 +2 23720060325200604242453819.4 -.8614800000D+01 -.2578000000D-01 .6417639000D+03 .8434700000D+00 .9917000000D-02 .3063100000D+01 .2754637000D+01 .4409800000D+01 .4569900000D+01 .3715000000D+01 .2408000000D+01 .1840000000D-01 .1992337000D+03 .3387900000D+00 .3853000000D-02 .9768000000D+00 .6080410000D+01 .5397000000D+00 .5345000000D+00 .7587000000D+00 .4088800000D+01 -.9622000000D-01 .6700558000D+03 .8588700000D+00 .1157000000D-01 .3213400000D+01 .4342059000D+01 .5899900000D+01 .6037300000D+01 .5326700000D+01 +2 23820060424200605242453849.4 -.9315800000D+01 -.2300000000D-03 .6381566000D+03 .1459520000D+01 .2811000000D-02 .3111500000D+01 .5621263000D+01 .9948000000D+00 .3420200000D+01 .3507500000D+01 .2955100000D+01 .1234000000D-01 .2093137000D+03 .5863200000D+00 .1609000000D-02 .1051000000D+01 .2654888000D+01 .3354900000D+01 .5912300000D+01 .5320000000D+00 .1104900000D+01 -.9621000000D-01 .6702791000D+03 .1582290000D+01 .3939000000D-02 .3227700000D+01 .9251810000D+00 .2506900000D+01 .5377600000D+01 .5097000000D+01 +2 23920060524200606232453879.4 -.9189100000D+01 .3503000000D-01 .6345578000D+03 .1274750000D+01 .1463700000D-01 .3119400000D+01 .2216249000D+01 .3911200000D+01 .7489000000D+00 .3271300000D+01 .3286500000D+01 -.3650000000D-02 .2215977000D+03 .4854000000D+00 .5895000000D-02 .1114800000D+01 .5517790000D+01 .6276400000D+01 .3229600000D+01 .2825000000D+00 -.1799000000D+01 -.1027100000D+00 .6700807000D+03 .1333430000D+01 .1507400000D-01 .3243800000D+01 .3804217000D+01 .5376200000D+01 .2194200000D+01 .4854900000D+01 +2 24020060623200607232453909.4 -.8120600000D+01 .7823000000D-01 .6314126000D+03 .3862400000D+00 .1673100000D-01 .3039100000D+01 .5069242000D+01 .4220000000D+00 .3558100000D+01 .2998500000D+01 .3165800000D+01 -.2406000000D-01 .2286646000D+03 .1370700000D+00 .6806000000D-02 .1107600000D+01 .2074710000D+01 .2501800000D+01 .6038500000D+01 .8000000000D-03 -.4787600000D+01 -.9582000000D-01 .6703515000D+03 .3877600000D+00 .1771300000D-01 .3250800000D+01 .3738740000D+00 .1969900000D+01 .5121900000D+01 .4563900000D+01 +2 24120060723200608222453939.4 -.5830300000D+01 .1186700000D+00 .6318267000D+03 .6484500000D+00 .1375700000D-01 .2983700000D+01 .1594374000D+01 .9560000000D-01 .7540000000D-01 .2669800000D+01 .2451000000D+01 -.4132000000D-01 .2283747000D+03 .3025000000D+00 .5386000000D-02 .1057600000D+01 .4876259000D+01 .2777200000D+01 .2394500000D+01 .5951000000D+01 -.7659300000D+01 -.5601000000D-01 .6702393000D+03 .6894200000D+00 .1502400000D-01 .3184300000D+01 .3180881000D+01 .1638800000D+01 .1507500000D+01 .4271500000D+01 +2 24220060822200609212453969.4 -.2272500000D+01 .1378000000D+00 .6344835000D+03 .1477360000D+01 .9952000000D-02 .2999100000D+01 .4357739000D+01 .2892300000D+01 .2591000000D+01 .2333900000D+01 .1203500000D+01 -.4619000000D-01 .2201607000D+03 .6183300000D+00 .4604000000D-02 .1003100000D+01 .1357592000D+01 .5385500000D+01 .4660900000D+01 .5619800000D+01 -.9446200000D+01 .3050000000D-02 .6702407000D+03 .1593580000D+01 .9896000000D-02 .3118900000D+01 .5944043000D+01 .4389200000D+01 .4045900000D+01 .3917600000D+01 +2 24320060921200610212453999.4 .2006800000D+01 .1249100000D+00 .6395083000D+03 .2069640000D+01 .6676000000D-02 .2956700000D+01 .8056200000D+00 .5621500000D+01 .4945700000D+01 .1969300000D+01 -.2305000000D+00 -.3580000000D-01 .2049304000D+03 .8496700000D+00 .4376000000D-02 .8999000000D+00 .4098270000D+01 .1701800000D+01 .5066000000D+00 .5267500000D+01 -.9396600000D+01 .7130000000D-01 .6704265000D+03 .2154310000D+01 .8026000000D-02 .3059900000D+01 .2390080000D+01 .8265000000D+00 .1925000000D+00 .3534700000D+01 +2 24420061021200611202454029.4 .5894200000D+01 .8348000000D-01 .6463662000D+03 .2393980000D+01 .4144000000D-02 .2855900000D+01 .3515546000D+01 .2031500000D+01 .9117000000D+00 .1582900000D+01 -.1345500000D+01 -.1649000000D-01 .1834031000D+03 .9861300000D+00 .4188000000D-02 .7476000000D+00 .5433430000D+00 .4247600000D+01 .2748300000D+01 .4909500000D+01 -.7167900000D+01 .1261200000D+00 .6702312000D+03 .2527950000D+01 .5404000000D-02 .3031200000D+01 .5099009000D+01 .3533400000D+01 .2106100000D+01 .3168400000D+01 +2 24520061120200612202454059.4 .8407700000D+01 .1579000000D-01 .6530291000D+03 .2504450000D+01 .5978000000D-02 .2861900000D+01 .6216352000D+01 .4745600000D+01 .2844900000D+01 .1221700000D+01 -.1831800000D+01 .3170000000D-02 .1565902000D+03 .1035430000D+01 .4433000000D-02 .6127000000D+00 .3275821000D+01 .5219000000D+00 .5075100000D+01 .4589500000D+01 -.3208600000D+01 .1514200000D+00 .6704498000D+03 .2638860000D+01 .5443000000D-02 .2937800000D+01 .1515209000D+01 .6220900000D+01 .4015000000D+01 .2814700000D+01 +2 24620061220200701192454089.4 .8759600000D+01 -.5550000000D-01 .6594558000D+03 .2404210000D+01 .7791000000D-02 .2931200000D+01 .2635484000D+01 .1145400000D+01 .4831000000D+01 .8706000000D+00 -.1695500000D+01 .1477000000D-01 .1273129000D+03 .1022170000D+01 .4205000000D-02 .4973000000D+00 .6027563000D+01 .3069300000D+01 .8661000000D+00 .4286900000D+01 .1438300000D+01 .1393400000D+00 .6703787000D+03 .2454760000D+01 .7024000000D-02 .2904100000D+01 .4214460000D+01 .2636500000D+01 .1150000000D-01 .2461400000D+01 +2 24720070119200702182454119.4 .6977000000D+01 -.1129800000D+00 .6646617000D+03 .2022340000D+01 .1026200000D-01 .2900300000D+01 .5349067000D+01 .3828300000D+01 .8737000000D+00 .5456000000D+00 -.1225100000D+01 .1590000000D-01 .9887750000D+02 .8980000000D+00 .4771000000D-02 .3762000000D+00 .2535086000D+01 .5649600000D+01 .2934700000D+01 .4046100000D+01 .5588900000D+01 .9298000000D-01 .6702088000D+03 .2095850000D+01 .1149100000D-01 .2930300000D+01 .6434240000D+00 .5351700000D+01 .2404700000D+01 .2107800000D+01 +2 24820070218200703202454149.4 .3591100000D+01 -.1347300000D+00 .6672968000D+03 .1392330000D+01 .1520600000D-01 .2926600000D+01 .1802460000D+01 .2867000000D+00 .3489500000D+01 .2368000000D+00 -.7488000000D+00 .1184000000D-01 .7598340000D+02 .6431300000D+00 .6305000000D-02 .2968000000D+00 .5379862000D+01 .1997600000D+01 .5260100000D+01 .3869000000D+01 .8329300000D+01 .2783000000D-01 .6704807000D+03 .1424480000D+01 .1543300000D-01 .2928900000D+01 .3378181000D+01 .1781700000D+01 .4916300000D+01 .1812400000D+01 +2 24920070320200704192454179.4 -.4399000000D+00 -.1185900000D+00 .6689566000D+03 .4929900000D+00 .1780700000D-01 .3007200000D+01 .4574291000D+01 .3017600000D+01 .6150800000D+01 .6251600000D+01 -.4117000000D+00 .1057000000D-01 .6305160000D+02 .2602300000D+00 .7593000000D-02 .2739000000D+00 .1971350000D+01 .4680000000D+01 .1604900000D+01 .3663600000D+01 .9221100000D+01 -.2764000000D-01 .6700955000D+03 .4724300000D+00 .1736800000D-01 .2974300000D+01 .6148514000D+01 .4598600000D+01 .1454400000D+01 .1557500000D+01 +2 25020070419200705192454209.4 -.4113200000D+01 -.8450000000D-01 .6688746000D+03 .6395400000D+00 .1277100000D-01 .3110000000D+01 .1105774000D+01 .2680200000D+01 .2846500000D+01 .6026600000D+01 -.1020000000D+00 .1406000000D-01 .6229180000D+02 .2129600000D+00 .5926000000D-02 .3159000000D+00 .4798597000D+01 .4475300000D+01 .4528100000D+01 .3381900000D+01 .8411000000D+01 -.5559000000D-01 .6701775000D+03 .6069500000D+00 .1438900000D-01 .3047300000D+01 .2681293000D+01 .4233200000D+01 .4314400000D+01 .1303500000D+01 +2 25120070519200706182454239.4 -.6761000000D+01 -.6133000000D-01 .6676943000D+03 .1419840000D+01 .2126000000D-02 .3101600000D+01 .3964927000D+01 .5578100000D+01 .3948000000D+00 .5819200000D+01 .3425000000D+00 .1785000000D-01 .7346540000D+02 .5789300000D+00 .1183000000D-02 .3799000000D+00 .1282825000D+01 .1050400000D+01 .2019300000D+01 .3090700000D+01 .6683400000D+01 -.7527000000D-01 .6702931000D+03 .1483390000D+01 .1722000000D-02 .3135900000D+01 .5540112000D+01 .8281000000D+00 .2497800000D+01 .1077400000D+01 +2 25220070618200707182454269.4 -.8603100000D+01 -.3511000000D-01 .6658691000D+03 .1485200000D+01 .1381400000D-01 .3105700000D+01 .5592200000D+00 .2218900000D+01 .5352500000D+01 .5593900000D+01 .9012000000D+00 .1672000000D-01 .9106940000D+02 .6014200000D+00 .4876000000D-02 .4686000000D+00 .4059682000D+01 .3985900000D+01 .8622000000D+00 .2788700000D+01 .4319300000D+01 -.9404000000D-01 .6701065000D+03 .1465800000D+01 .1237600000D-01 .3205500000D+01 .2136804000D+01 .3701700000D+01 .4747000000D+00 .8772000000D+00 +2 25320070718200708172454299.4 -.9626800000D+01 -.9200000000D-03 .6633151000D+03 .6282900000D+00 .1757100000D-01 .3190500000D+01 .3421158000D+01 .5041200000D+01 .1892300000D+01 .5324200000D+01 .1406300000D+01 .6620000000D-02 .1045524000D+03 .2904400000D+00 .7401000000D-02 .5109000000D+00 .5801400000D+00 .4772000000D+00 .3783400000D+01 .2474000000D+01 .1428600000D+01 -.1187600000D+00 .6705397000D+03 .6309200000D+00 .1790100000D-01 .3251700000D+01 .4998917000D+01 .3251000000D+00 .3470400000D+01 .6330000000D+00 +2 25420070817200709162454329.4 -.9612200000D+01 .5236000000D-01 .6632213000D+03 .4543100000D+00 .1584500000D-01 .3246100000D+01 .6239265000D+01 .4747000000D+01 .4672100000D+01 .5013300000D+01 .1595900000D+01 -.7630000000D-02 .1066338000D+03 .1747400000D+00 .6739000000D-02 .4971000000D+00 .3381231000D+01 .6411000000D+00 .2063000000D+00 .2159800000D+01 -.2148600000D+01 -.1233000000D+00 .6701724000D+03 .4586600000D+00 .1637000000D-01 .3281200000D+01 .1533349000D+01 .2100000000D-01 .6151700000D+01 .3096000000D+00 +2 25520070916200710162454359.4 -.8067500000D+01 .1113800000D+00 .6646429000D+03 .1398960000D+01 .1232800000D-01 .3232800000D+01 .2727682000D+01 .1236500000D+01 .9145000000D+00 .4664800000D+01 .1349200000D+01 -.1663000000D-01 .9577650000D+02 .5688600000D+00 .5611000000D-02 .4170000000D+00 .6176374000D+01 .3148300000D+01 .2594900000D+01 .1865400000D+01 -.5862500000D+01 -.9666000000D-01 .6704385000D+03 .1455090000D+01 .1154400000D-01 .3238800000D+01 .4304670000D+01 .2735800000D+01 .2535800000D+01 .6227200000D+01 +2 25620071016200711152454389.4 -.4756900000D+01 .1503400000D+00 .6674776000D+03 .2116420000D+01 .7517000000D-02 .3185200000D+01 .5463069000D+01 .3941300000D+01 .3226000000D+01 .4274600000D+01 .8368000000D+00 -.1522000000D-01 .7438980000D+02 .8790600000D+00 .4811000000D-02 .2856000000D+00 .2710271000D+01 .5751600000D+01 .4783900000D+01 .1605100000D+01 -.8845900000D+01 -.3324000000D-01 .6705243000D+03 .2114380000D+01 .8360000000D-02 .3251400000D+01 .7543810000D+00 .5466300000D+01 .4969400000D+01 .5867900000D+01 +2 25720071115200712152454419.4 -.1488000000D+00 .1487100000D+00 .6700560000D+03 .2510670000D+01 .6073000000D-02 .3205500000D+01 .1890557000D+01 .3425000000D+00 .5398700000D+01 .3883300000D+01 .3782000000D+00 -.2640000000D-02 .4656360000D+02 .1073150000D+01 .4767000000D-02 .1507000000D+00 .5662831000D+01 .2051700000D+01 .6848000000D+00 .1687100000D+01 -.9968900000D+01 .4250000000D-01 .6701818000D+03 .2559860000D+01 .6478000000D-02 .3180300000D+01 .3463800000D+01 .1908000000D+01 .6249000000D+00 .5465400000D+01 +2 25820071215200801142454449.4 .4527700000D+01 .1093500000D+00 .6709382000D+03 .2630210000D+01 .6562000000D-02 .3172900000D+01 .4588698000D+01 .3019900000D+01 .1228300000D+01 .3495500000D+01 .3071000000D+00 .9890000000D-02 .2668220000D+02 .1165260000D+01 .4562000000D-02 .1437000000D+00 .2968264000D+01 .4618600000D+01 .2865200000D+01 .2533200000D+01 -.8667100000D+01 .1068400000D+00 .6706792000D+03 .2699450000D+01 .4935000000D-02 .3093800000D+01 .6160038000D+01 .4582300000D+01 .2644100000D+01 .5051000000D+01 +2 25920080114200802132454479.4 .7880900000D+01 .4808000000D-01 .6700480000D+03 .2589930000D+01 .8268000000D-02 .2995500000D+01 .1003396000D+01 .5686500000D+01 .3199700000D+01 .3117300000D+01 .6275000000D+00 .1282000000D-01 .4424410000D+02 .1144730000D+01 .4340000000D-02 .2579000000D+00 .3870650000D+00 .9034000000D+00 .4974200000D+01 .2679400000D+01 -.5280800000D+01 .1437900000D+00 .6705168000D+03 .2599020000D+01 .6778000000D-02 .3055500000D+01 .2571759000D+01 .9988000000D+00 .4831300000D+01 .4674500000D+01 +2 26020080213200803142454509.4 .9226000000D+01 -.2579000000D-01 .6674982000D+03 .2209640000D+01 .9400000000D-02 .2948300000D+01 .3708922000D+01 .2070000000D+01 .5488100000D+01 .2766800000D+01 .1020600000D+01 .4320000000D-02 .7476170000D+02 .1004410000D+01 .4659000000D-02 .3910000000D+00 .3376725000D+01 .3501800000D+01 .8276000000D+00 .2510300000D+01 -.8464000000D+00 .1477700000D+00 .6705524000D+03 .2281430000D+01 .1041300000D-01 .2992700000D+01 .5276403000D+01 .3702300000D+01 .8311000000D+00 .4333800000D+01 +2 26120080314200804132454539.4 .8361900000D+01 -.8374000000D-01 .6636184000D+03 .1659460000D+01 .1425900000D-01 .2937500000D+01 .1524870000D+00 .4791200000D+01 .1737500000D+01 .2438900000D+01 .1144100000D+01 -.1075000000D-01 .1010499000D+03 .7609700000D+00 .6176000000D-02 .4915000000D+00 .6204740000D+01 .6148600000D+01 .3086400000D+01 .2235000000D+01 .3563800000D+01 .1122100000D+00 .6707945000D+03 .1711450000D+01 .1483700000D-01 .2935300000D+01 .1718285000D+01 .1303000000D+00 .3304400000D+01 .4013100000D+01 +2 26220080413200805132454569.4 .5855800000D+01 -.1132300000D+00 .6610375000D+03 .8002100000D+00 .1710600000D-01 .2880400000D+01 .2910251000D+01 .1232800000D+01 .4387700000D+01 .2168200000D+01 .8180000000D+00 -.2083000000D-01 .1183055000D+03 .3904000000D+00 .7463000000D-02 .5295000000D+00 .2723693000D+01 .2622600000D+01 .5651200000D+01 .1993400000D+01 .6914000000D+01 .5778000000D-01 .6705547000D+03 .8103600000D+00 .1766900000D-01 .2923000000D+01 .4475152000D+01 .2916400000D+01 .6079000000D+01 .3717400000D+01 +2 26320080513200806122454599.4 .2520700000D+01 -.1111700000D+00 .6596796000D+03 .2758500000D+00 .1534200000D-01 .2838400000D+01 .5710617000D+01 .8627000000D+00 .9923000000D+00 .1935700000D+01 .1885000000D+00 -.2033000000D-01 .1233554000D+03 .9040000000D-01 .7148000000D-02 .5152000000D+00 .5538768000D+01 .1533000000D+01 .2262700000D+01 .1760100000D+01 .8674600000D+01 .9590000000D-02 .6707487000D+03 .2579700000D+00 .1656100000D-01 .2940400000D+01 .9930290000D+00 .2574500000D+01 .2567900000D+01 .3497700000D+01 +2 26420080612200807122454629.4 -.8338000000D+00 -.9563000000D-01 .6614081000D+03 .1229190000D+01 .6546000000D-02 .2893100000D+01 .2274415000D+01 .3774100000D+01 .4044300000D+01 .1739900000D+01 -.4312000000D+00 -.1245000000D-01 .1153980000D+03 .5194800000D+00 .3154000000D-02 .4731000000D+00 .2094613000D+01 .4971500000D+01 .5551300000D+01 .1534700000D+01 .9059300000D+01 -.2738000000D-01 .6708507000D+03 .1328970000D+01 .4486000000D-02 .2999300000D+01 .3839193000D+01 .5419400000D+01 .5735000000D+01 .3308600000D+01 +2 26520080712200808112454659.4 -.3801800000D+01 -.8427000000D-01 .6641988000D+03 .1564310000D+01 .9452000000D-02 .3015300000D+01 .5151001000D+01 .3854000000D+00 .3416900000D+01 .1523100000D+01 -.8137000000D+00 -.4460000000D-02 .9788300000D+02 .6843500000D+00 .3886000000D-02 .3976000000D+00 .4940535000D+01 .1690900000D+01 .4594600000D+01 .1289500000D+01 .8300200000D+01 -.5233000000D-01 .6705310000D+03 .1581270000D+01 .9167000000D-02 .3004300000D+01 .4348190000D+00 .1999500000D+01 .5001200000D+01 .3119400000D+01 +2 26620080811200809102454689.4 -.6438600000D+01 -.6979000000D-01 .6663306000D+03 .9646400000D+00 .1817300000D-01 .3054600000D+01 .1738891000D+01 .3252000000D+01 .9940000000D-01 .1317600000D+01 -.9489000000D+00 -.2730000000D-02 .8086550000D+02 .4400300000D+00 .7642000000D-02 .3514000000D+00 .1484113000D+01 .4632900000D+01 .1491900000D+01 .1052500000D+01 .6677700000D+01 -.8679000000D-01 .6709512000D+03 .9943700000D+00 .1910700000D-01 .3052800000D+01 .3305994000D+01 .4900300000D+01 .1754200000D+01 .2875400000D+01 +2 26720080910200810102454719.4 -.8541500000D+01 -.3786000000D-01 .6672661000D+03 .1717700000D+00 .1746500000D-01 .3090800000D+01 .4571097000D+01 .2955300000D+01 .2943200000D+01 .1044600000D+01 -.1020100000D+01 -.4530000000D-02 .7459140000D+02 .3296000000D-01 .7815000000D-02 .3599000000D+00 .4296933000D+01 .4580800000D+01 .4285300000D+01 .7881000000D+00 .3987500000D+01 -.1229100000D+00 .6704927000D+03 .1710900000D+00 .1784900000D-01 .3143100000D+01 .6138719000D+01 .4704600000D+01 .4513400000D+01 .2599000000D+01 +2 26820081010200811092454749.4 -.9633100000D+01 .2187000000D-01 .6661394000D+03 .1218170000D+01 .1381400000D-01 .3175600000D+01 .1070188000D+01 .5749500000D+01 .5504300000D+01 .6881000000D+00 -.1160200000D+01 -.2770000000D-02 .8249980000D+02 .5019000000D+00 .6063000000D-02 .4397000000D+00 .8285210000D+00 .8529000000D+00 .4644000000D+00 .4768000000D+00 .3008000000D+00 -.1452200000D+00 .6708702000D+03 .1252160000D+01 .1360600000D-01 .3226700000D+01 .2637740000D+01 .1068800000D+01 .9061000000D+00 .2281100000D+01 +2 26920081109200812092454779.4 -.8996400000D+01 .9425000000D-01 .6632625000D+03 .2045340000D+01 .8784000000D-02 .3214900000D+01 .3811175000D+01 .2189600000D+01 .1550200000D+01 .3106000000D+00 -.1276200000D+01 .8390000000D-02 .1025528000D+03 .8563000000D+00 .4575000000D-02 .5617000000D+00 .3626823000D+01 .3497400000D+01 .2654300000D+01 .1666000000D+00 -.4039000000D+01 -.1234500000D+00 .6706684000D+03 .2057070000D+01 .9264000000D-02 .3233000000D+01 .5377333000D+01 .3814000000D+01 .3322800000D+01 .1886300000D+01 +2 27020081209200901082454809.4 -.6233200000D+01 .1445900000D+00 .6585689000D+03 .2488170000D+01 .6730000000D-02 .3193000000D+01 .2388230000D+00 .4868200000D+01 .3840300000D+01 .6207700000D+01 -.1054700000D+01 .2572000000D-01 .1304921000D+03 .1055420000D+01 .4524000000D-02 .7115000000D+00 .1051710000D+00 .6104900000D+01 .4766000000D+01 .6103300000D+01 -.7824400000D+01 -.6596000000D-01 .6707754000D+03 .2551350000D+01 .6483000000D-02 .3221700000D+01 .1804871000D+01 .2376000000D+00 .5490700000D+01 .1476200000D+01 +2 27120090108200902072454839.4 -.1830300000D+01 .1525000000D+00 .6513598000D+03 .2701750000D+01 .6426000000D-02 .3115000000D+01 .2934244000D+01 .1274200000D+01 .5814600000D+01 .5801300000D+01 -.2661000000D+00 .4071000000D-01 .1610124000D+03 .1149320000D+01 .4852000000D-02 .8428000000D+00 .2838508000D+01 .2398400000D+01 .5896000000D+00 .5719300000D+01 -.9915100000D+01 .1418000000D-01 .6709171000D+03 .2791050000D+01 .5522000000D-02 .3261500000D+01 .4499737000D+01 .2927300000D+01 .1123200000D+01 .1073100000D+01 +2 27220090207200903092454869.4 .2884400000D+01 .1244500000D+00 .6437254000D+03 .2651840000D+01 .6399000000D-02 .3066600000D+01 .5624521000D+01 .3942100000D+01 .1593500000D+01 .5386700000D+01 .1007000000D+01 .4350000000D-01 .1903608000D+03 .1116000000D+01 .4449000000D-02 .9710000000D+00 .5557478000D+01 .4954900000D+01 .2826300000D+01 .5332400000D+01 -.9518400000D+01 .8538000000D-01 .6709796000D+03 .2722630000D+01 .6153000000D-02 .3242200000D+01 .9065850000D+00 .5613200000D+01 .3340200000D+01 .6713000000D+00 +2 27320090309200904082454899.4 .6705500000D+01 .6612000000D-01 .6356717000D+03 .2408470000D+01 .9445000000D-02 .2995800000D+01 .2037609000D+01 .3520000000D+00 .3816700000D+01 .4996100000D+01 .2363400000D+01 .2957000000D-01 .2152598000D+03 .9980900000D+00 .4352000000D-02 .1067700000D+01 .1992484000D+01 .1243000000D+01 .4930300000D+01 .4963400000D+01 -.6818000000D+01 .1317900000D+00 .6708826000D+03 .2502950000D+01 .9746000000D-02 .3142200000D+01 .3604062000D+01 .2032800000D+01 .5545200000D+01 .2788000000D+00 +2 27420090408200905082454929.4 .8628700000D+01 .5050000000D-02 .6288899000D+03 .1893600000D+01 .1209400000D-01 .2866300000D+01 .4750208000D+01 .3067100000D+01 .5470000000D-01 .4656200000D+01 .3241600000D+01 .7450000000D-02 .2341291000D+03 .7829600000D+00 .5319000000D-02 .1102300000D+01 .4722582000D+01 .3876900000D+01 .9077000000D+00 .4634900000D+01 -.2741500000D+01 .1453900000D+00 .6711026000D+03 .1966020000D+01 .1224100000D-01 .3104600000D+01 .3423700000D-01 .4740600000D+01 .1754600000D+01 .6207900000D+01 +2 27520090508200906072454959.4 .8650900000D+01 -.5128000000D-01 .6242652000D+03 .1173930000D+01 .1596500000D-01 .2802000000D+01 .1207577000D+01 .5798200000D+01 .2653700000D+01 .4323700000D+01 .3418600000D+01 -.1785000000D-01 .2464969000D+03 .4683000000D+00 .6720000000D-02 .1123500000D+01 .1193956000D+01 .2939000000D+00 .3322300000D+01 .4316400000D+01 .1610300000D+01 .1229600000D+00 .6708182000D+03 .1227650000D+01 .1723200000D-01 .3078500000D+01 .2776585000D+01 .1206300000D+01 .4360100000D+01 .5915400000D+01 +2 27620090607200907072454989.4 .7111400000D+01 -.8334000000D-01 .6218305000D+03 .1866500000D+00 .1688000000D-01 .2792100000D+01 .3987825000D+01 .2324200000D+01 .5505900000D+01 .4046200000D+01 .2880900000D+01 -.3384000000D-01 .2519728000D+03 .7609000000D-01 .7311000000D-02 .1130300000D+01 .3984152000D+01 .3903500000D+01 .6166300000D+01 .4045100000D+01 .5203000000D+01 .8139000000D-01 .6712750000D+03 .1876600000D+00 .1808600000D-01 .2988800000D+01 .5558301000D+01 .3881900000D+01 .8241000000D+00 .5653600000D+01 +2 27720090707200908062455019.4 .4699300000D+01 -.9305000000D-01 .6223854000D+03 .8519700000D+00 .1134700000D-01 .2779000000D+01 .5336320000D+00 .2009400000D+01 .2104300000D+01 .3853000000D+01 .1890800000D+01 -.3821000000D-01 .2506481000D+03 .4053600000D+00 .4603000000D-02 .1103900000D+01 .5351830000D+00 .2530100000D+01 .2966000000D+01 .3851700000D+01 .7607600000D+01 .3746000000D-01 .6707555000D+03 .9528300000D+00 .1113600000D-01 .2885400000D+01 .2104095000D+01 .3642500000D+01 .3860300000D+01 .5414100000D+01 +2 27820090806200909052455049.4 .1967200000D+01 -.9362000000D-01 .6256957000D+03 .1558960000D+01 .4811000000D-02 .2735100000D+01 .3402924000D+01 .4899500000D+01 .1565300000D+01 .3675100000D+01 .7664000000D+00 -.3683000000D-01 .2429400000D+03 .6860200000D+00 .3065000000D-02 .1029700000D+01 .3404276000D+01 .5553200000D+01 .1778600000D+01 .3674200000D+01 .8812000000D+01 .2060000000D-02 .6710947000D+03 .1628820000D+01 .4755000000D-02 .2918600000D+01 .4974521000D+01 .2658000000D+00 .3073400000D+01 .5249100000D+01 +2 27920090905200910052455079.4 -.8912000000D+00 -.9634000000D-01 .6294185000D+03 .1244090000D+01 .1561800000D-01 .2775900000D+01 .8630000000D-03 .1470900000D+01 .4604100000D+01 .3482300000D+01 -.3509000000D+00 -.3404000000D-01 .2321322000D+03 .5310000000D+00 .6964000000D-02 .1007400000D+01 .6280496000D+01 .2284500000D+01 .5343800000D+01 .3473700000D+01 .8959800000D+01 -.2922000000D-01 .6710514000D+03 .1320020000D+01 .1716900000D-01 .2947600000D+01 .1570911000D+01 .3149000000D+01 .6274400000D+01 .5039200000D+01 +2 28020091005200911042455109.4 -.3878200000D+01 -.9167000000D-01 .6321114000D+03 .2605600000D+00 .1946400000D-01 .2818000000D+01 .2850370000D+01 .4323200000D+01 .1178100000D+01 .3221200000D+01 -.1403200000D+01 -.3326000000D-01 .2255468000D+03 .1045000000D+00 .8168000000D-02 .1007200000D+01 .2841191000D+01 .5370400000D+01 .1958800000D+01 .3211500000D+01 .8047400000D+01 -.7077000000D-01 .6710074000D+03 .2470300000D+00 .1969100000D-01 .2964400000D+01 .4420526000D+01 .5984300000D+01 .2838400000D+01 .4799700000D+01 +2 28120091104200912042455139.4 -.6670600000D+01 -.6300000000D-01 .6309979000D+03 .9050600000D+00 .1455200000D-01 .2850300000D+01 .5649199000D+01 .4014400000D+01 .3839800000D+01 .2927300000D+01 -.2410000000D+01 -.2768000000D-01 .2275552000D+03 .3959000000D+00 .6143000000D-02 .1048200000D+01 .5638094000D+01 .4743400000D+01 .4543000000D+01 .2916800000D+01 .5833300000D+01 -.1206200000D+00 .6710510000D+03 .9586600000D+00 .1538800000D-01 .2992100000D+01 .9356410000D+00 .5658800000D+01 .5542500000D+01 .4493900000D+01 +2 28220091204201001032455169.4 -.8486000000D+01 -.6050000000D-02 .6275399000D+03 .1778400000D+01 .1026200000D-01 .2878700000D+01 .2116107000D+01 .4539000000D+00 .1118000000D+00 .2589700000D+01 -.3219500000D+01 -.9590000000D-02 .2379059000D+03 .7642600000D+00 .4889000000D-02 .1128500000D+01 .2108776000D+01 .1174700000D+01 .4989000000D+00 .2590600000D+01 .2166800000D+01 -.1505800000D+00 .6709093000D+03 .1882460000D+01 .1099100000D-01 .3095100000D+01 .3685845000D+01 .2128300000D+01 .1695600000D+01 .4140500000D+01 +2 28320100103201002022455199.4 -.8636600000D+01 .6984000000D-01 .6217258000D+03 .2342420000D+01 .6353000000D-02 .2872900000D+01 .4830871000D+01 .3175400000D+01 .2355000000D+01 .2186700000D+01 -.3513500000D+01 .2128000000D-01 .2523124000D+03 .1004860000D+01 .4316000000D-02 .1207300000D+01 .4831886000D+01 .3802900000D+01 .2597900000D+01 .2193700000D+01 -.2329900000D+01 -.1442200000D+00 .6708881000D+03 .2503480000D+01 .6842000000D-02 .3215000000D+01 .1189050000D+00 .4836900000D+01 .3931400000D+01 .3758300000D+01 +2 28420100202201003042455229.4 -.6578000000D+01 .1251800000D+00 .6156678000D+03 .2613840000D+01 .4775000000D-02 .2918300000D+01 .1241902000D+01 .5876100000D+01 .4331100000D+01 .1768100000D+01 -.2898600000D+01 .4985000000D-01 .2669603000D+03 .1119320000D+01 .4305000000D-02 .1299600000D+01 .1254265000D+01 .1062000000D+00 .4748300000D+01 .1785900000D+01 -.6662700000D+01 -.8947000000D-01 .6711037000D+03 .2776830000D+01 .5850000000D-02 .3182800000D+01 .2814377000D+01 .1241400000D+01 .6102200000D+01 .3361900000D+01 +2 28520100304201004032455259.4 -.2792300000D+01 .1462300000D+00 .6103390000D+03 .2650570000D+01 .5619000000D-02 .2933500000D+01 .3927570000D+01 .2297600000D+01 .4330000000D-01 .1375700000D+01 -.1391400000D+01 .6565000000D-01 .2789600000D+03 .1138820000D+01 .4368000000D-02 .1365300000D+01 .3953327000D+01 .2684000000D+01 .6214000000D+00 .1408500000D+01 -.9461600000D+01 -.1121000000D-01 .6708469000D+03 .2843240000D+01 .6699000000D-02 .3187500000D+01 .5502745000D+01 .3932100000D+01 .1767600000D+01 .2949300000D+01 +2 28620100403201005032455289.4 .1723600000D+01 .1268100000D+00 .6065951000D+03 .2455120000D+01 .7092000000D-02 .2904600000D+01 .3322930000D+00 .5006900000D+01 .2403500000D+01 .9820000000D+00 .6403000000D+00 .6084000000D-01 .2869784000D+03 .1042630000D+01 .4441000000D-02 .1388600000D+01 .3723100000D+00 .5272200000D+01 .2917900000D+01 .1030900000D+01 -.9808700000D+01 .6159000000D-01 .6710602000D+03 .2635250000D+01 .7214000000D-02 .3264000000D+01 .1910618000D+01 .3316000000D+00 .4059300000D+01 .2549100000D+01 +2 28720100503201006022455319.4 .5629800000D+01 .8313000000D-01 .6048510000D+03 .2110530000D+01 .1059200000D-01 .2931000000D+01 .3033633000D+01 .1434000000D+01 .4694600000D+01 .5788000000D+00 .2520100000D+01 .4216000000D-01 .2910511000D+03 .8764300000D+00 .5104000000D-02 .1414000000D+01 .3088313000D+01 .1582700000D+01 .4993400000D+01 .6402000000D+00 -.7834500000D+01 .1156200000D+00 .6708747000D+03 .2257710000D+01 .1108200000D-01 .3224500000D+01 .4614517000D+01 .3036100000D+01 .1158000000D+00 .2174700000D+01 +2 28820100602201007022455349.4 .8070700000D+01 .2736000000D-01 .6045460000D+03 .1488900000D+01 .1325300000D-01 .2886200000D+01 .5757669000D+01 .4177900000D+01 .1077600000D+01 .2340000000D+00 .3764400000D+01 .1688000000D-01 .2920849000D+03 .5867600000D+00 .5938000000D-02 .1391800000D+01 .5826386000D+01 .4234100000D+01 .1174400000D+01 .3076000000D+00 -.4210800000D+01 .1340000000D+00 .6707116000D+03 .1638180000D+01 .1594000000D-01 .3159500000D+01 .1058906000D+01 .5766100000D+01 .2691800000D+01 .1824100000D+01 +2 28920100702201008012455379.4 .8756000000D+01 -.2248000000D-01 .6044011000D+03 .6548800000D+00 .1709600000D-01 .2846300000D+01 .2234183000D+01 .7117000000D+00 .3850100000D+01 .6232400000D+01 .4205900000D+01 -.6070000000D-02 .2915439000D+03 .2128200000D+00 .7411000000D-02 .1374300000D+01 .2315056000D+01 .7278000000D+00 .3857400000D+01 .3370000000D-01 -.1496000000D+00 .1244200000D+00 .6708228000D+03 .6904000000D+00 .1858800000D-01 .3132300000D+01 .3820354000D+01 .2219000000D+01 .5352500000D+01 .1514200000D+01 +2 29020100801201008312455409.4 .8000700000D+01 -.5780000000D-01 .6049356000D+03 .3957800000D+00 .1458600000D-01 .2794200000D+01 .5040549000D+01 .3601000000D+00 .3647000000D+00 .5974500000D+01 .3984200000D+01 -.2373000000D-01 .2917474000D+03 .2426200000D+00 .5857000000D-02 .1351000000D+01 .5129312000D+01 .3505000000D+00 .4277000000D+00 .6065900000D+01 .3497600000D+01 .9293000000D-01 .6705338000D+03 .4770900000D+00 .1549300000D-01 .3113700000D+01 .3444580000D+00 .1894700000D+01 .1991100000D+01 .1268200000D+01 +2 29120100831201009302455439.4 .6309900000D+01 -.7493000000D-01 .6042625000D+03 .1338860000D+01 .3222000000D-02 .2705400000D+01 .1611473000D+01 .3173700000D+01 .3914200000D+01 .5747500000D+01 .3292100000D+01 -.3433000000D-01 .2922545000D+03 .6242500000D+00 .1734000000D-02 .1309500000D+01 .1701900000D+01 .3212100000D+01 .4673300000D+01 .5838500000D+01 .6200800000D+01 .6044000000D-01 .6706211000D+03 .1443740000D+01 .3481000000D-02 .3073100000D+01 .3199893000D+01 .4776300000D+01 .5100600000D+01 .1063100000D+01 +2 29220100930201010302455469.4 .4130600000D+01 -.9091000000D-01 .6044064000D+03 .1465310000D+01 .1211800000D-01 .2701800000D+01 .4494808000D+01 .6075400000D+01 .2897700000D+01 .5566400000D+01 .2294800000D+01 -.4401000000D-01 .2926218000D+03 .6283200000D+00 .5953000000D-02 .1306600000D+01 .4580003000D+01 .6198300000D+01 .2971000000D+01 .5644700000D+01 .8073700000D+01 .2801000000D-01 .6707150000D+03 .1615870000D+01 .1428100000D-01 .2943700000D+01 .6081226000D+01 .1381000000D+01 .4475000000D+01 .8690000000D+00 +2 29320101030201011292455499.4 .1363400000D+01 -.1022900000D+00 .6045996000D+03 .6973900000D+00 .1887000000D-01 .2687200000D+01 .1079163000D+01 .2638500000D+01 .5775000000D+01 .5355000000D+01 .9575000000D+00 -.5027000000D-01 .2918343000D+03 .2547700000D+00 .8395000000D-02 .1297400000D+01 .1155924000D+01 .2827300000D+01 .5937200000D+01 .5427400000D+01 .9024300000D+01 -.3730000000D-02 .6705680000D+03 .7113000000D+00 .1972200000D-01 .2952700000D+01 .2664999000D+01 .4221600000D+01 .1093200000D+01 .6387000000D+00 +2 29420101129201012292455529.4 -.1866100000D+01 -.1049600000D+00 .6044739000D+03 .4720700000D+00 .1618900000D-01 .2660300000D+01 .3899506000D+01 .2349400000D+01 .2240500000D+01 .5069900000D+01 -.6288000000D+00 -.5240000000D-01 .2915431000D+03 .2665800000D+00 .6892000000D-02 .1285900000D+01 .3970010000D+01 .2493200000D+01 .2346500000D+01 .5139800000D+01 .8881300000D+01 -.5270000000D-01 .6708762000D+03 .5046400000D+00 .1894000000D-01 .2988000000D+01 .5483377000D+01 .3936100000D+01 .3842700000D+01 .3551000000D+00 +2 29520101229201101282455559.4 -.5079600000D+01 -.8380000000D-01 .6043941000D+03 .1450840000D+01 .1116700000D-01 .2636800000D+01 .3824460000D+00 .5078400000D+01 .4948500000D+01 .4720400000D+01 -.2236600000D+01 -.4366000000D-01 .2923736000D+03 .6828200000D+00 .4827000000D-02 .1274700000D+01 .4519420000D+00 .5203000000D+01 .4795700000D+01 .4795200000D+01 .7178800000D+01 -.1100200000D+00 .6705766000D+03 .1605230000D+01 .1236500000D-01 .3001900000D+01 .1966502000D+01 .4156000000D+00 .8000000000D-01 .4130000000D-01 +3 29619990101199902102451179.4 .2662900000D+01 .8340000000D-02 .9666214000D+03 .2651030000D+01 .1500900000D-01 .9696000000D+00 .3399963000D+01 .1817100000D+01 .1489300000D+01 .1610700000D+01 .1200800000D+01 .5690000000D-02 .4605835000D+03 .1231130000D+01 .7127000000D-02 .4649000000D+00 .3470471000D+01 .2008700000D+01 .1282400000D+01 .1693800000D+01 -.1904100000D+01 .3768000000D-01 .1069766900D+04 .2913240000D+01 .1688900000D-01 .1121000000D+01 .4983914000D+01 .3431600000D+01 .2977900000D+01 .3204300000D+01 +3 29719990210199903222451219.4 .2785500000D+01 .1169000000D-01 .9656427000D+03 .3807200000D+01 .8177000000D-02 .9512000000D+00 .6959050000D+00 .5416000000D+01 .4397000000D+01 .2734800000D+01 .1307800000D+01 .5860000000D-02 .4628025000D+03 .1707910000D+01 .6604000000D-02 .4501000000D+00 .7740210000D+00 .5475000000D+01 .3969000000D+01 .2827600000D+01 -.9505000000D+00 .3372000000D-01 .1069750300D+04 .4144190000D+01 .1057500000D-01 .1111700000D+01 .2281114000D+01 .7148000000D+00 .5905700000D+01 .4348300000D+01 +3 29819990322199905012451259.4 .2675100000D+01 .5010000000D-02 .9687317000D+03 .4213590000D+01 .7736000000D-02 .9300000000D+00 .4243357000D+01 .2707200000D+01 .7630000000D+00 .3815700000D+01 .1275200000D+01 .1660000000D-02 .4566554000D+03 .1834250000D+01 .7259000000D-02 .4260000000D+00 .4335351000D+01 .2597500000D+01 .6284000000D+00 .3916500000D+01 .4171000000D+00 .1387000000D-01 .1069765500D+04 .4575380000D+01 .9302000000D-02 .1063700000D+01 .5830650000D+01 .4253700000D+01 .2339300000D+01 .5450600000D+01 +3 29919990501199906102451299.4 .2592300000D+01 -.1830000000D-01 .9768912000D+03 .4010750000D+01 .1024600000D-01 .8483000000D+00 .1503428000D+01 .6274300000D+01 .3708100000D+01 .4991600000D+01 .1229800000D+01 -.9780000000D-02 .4398093000D+03 .1680380000D+01 .7006000000D-02 .3713000000D+00 .1613500000D+01 .5977100000D+01 .3646600000D+01 .5108200000D+01 .1581500000D+01 -.5520000000D-02 .1069629500D+04 .4375740000D+01 .1256000000D-01 .9481000000D+00 .3092924000D+01 .1510900000D+01 .5203600000D+01 .2953000000D+00 +3 30019990610199907202451339.4 .2179700000D+01 -.2711000000D-01 .9878925000D+03 .3334290000D+01 .1790700000D-01 .7699000000D+00 .5066935000D+01 .3564000000D+01 .5382000000D+00 .6111700000D+01 .1004600000D+01 -.1219000000D-01 .4156216000D+03 .1340010000D+01 .8330000000D-02 .3153000000D+00 .5197779000D+01 .3086100000D+01 .2378000000D+00 .6262500000D+01 .1878700000D+01 -.7110000000D-02 .1069072400D+04 .3579660000D+01 .2001200000D-01 .8034000000D+00 .3741710000D+00 .5078300000D+01 .2106700000D+01 .1427500000D+01 +3 30119990720199908292451379.4 .1665100000D+01 -.1967000000D-01 .9973563000D+03 .1919270000D+01 .2709000000D-01 .6381000000D+00 .2390973000D+01 .9010000000D+00 .4042900000D+01 .8217000000D+00 .7290000000D+00 -.7770000000D-02 .3929387000D+03 .7250100000D+00 .1110100000D-01 .2412000000D+00 .2542637000D+01 .2539000000D+00 .3481400000D+01 .9651000000D+00 .1464500000D+01 .3060000000D-02 .1069021700D+04 .2004230000D+01 .2838900000D-01 .6583000000D+00 .3981841000D+01 .2391300000D+01 .5539100000D+01 .2493200000D+01 +3 30219990829199910082451419.4 .9963000000D+00 .9520000000D-02 .1000622700D+04 .3741900000D+00 .2446600000D-01 .5047000000D+00 .6069511000D+01 .1369100000D+01 .1511100000D+01 .1832400000D+01 .4482000000D+00 .3240000000D-02 .3843485000D+03 .2169200000D+00 .9329000000D-02 .1891000000D+00 .6234943000D+01 .1033500000D+01 .9492000000D+00 .1961600000D+01 .8799000000D+00 .2840000000D-02 .1068657300D+04 .4448100000D+00 .2568700000D-01 .4989000000D+00 .1378012000D+01 .2913900000D+01 .2999300000D+01 .3472000000D+01 +3 30319991008199911172451459.4 .8685000000D+00 .1689000000D-01 .9959535000D+03 .2450770000D+01 .5145000000D-02 .4277000000D+00 .3550872000D+01 .5214100000D+01 .1585200000D+01 .2755200000D+01 .3622000000D+00 .7160000000D-02 .3966482000D+03 .1010170000D+01 .3093000000D-02 .1812000000D+00 .3713599000D+01 .4711400000D+01 .1137100000D+01 .2899300000D+01 .8340000000D+00 -.2594000000D-01 .1068729800D+04 .2623620000D+01 .5120000000D-02 .4229000000D+00 .5143848000D+01 .4416000000D+00 .3208300000D+01 .4475900000D+01 +3 30419991117199912272451499.4 .1302400000D+01 .9190000000D-02 .9881993000D+03 .1957150000D+01 .2952100000D-01 .4880000000D+00 .1069522000D+01 .2739400000D+01 .5874100000D+01 .3636800000D+01 .5698000000D+00 .2590000000D-02 .4154282000D+03 .7313300000D+00 .1248300000D-01 .2053000000D+00 .1216526000D+01 .2287500000D+01 .5491600000D+01 .3779200000D+01 .3818000000D+00 -.2684000000D-01 .1068974800D+04 .2037580000D+01 .3098800000D-01 .5348000000D+00 .2662563000D+01 .4244700000D+01 .1101600000D+01 .5270600000D+01 +3 30519991227200002052451539.4 .2007700000D+01 -.1760000000D-02 .9853225000D+03 .4892200000D+00 .2603300000D-01 .6633000000D+00 .4813234000D+01 .3351700000D+01 .3267100000D+01 .4765500000D+01 .8383000000D+00 -.1250000000D-02 .4210770000D+03 .3124800000D+00 .1054600000D-01 .2795000000D+00 .4947016000D+01 .3157700000D+01 .2768000000D+01 .4884600000D+01 -.1983000000D+00 -.4310000000D-02 .1068750100D+04 .5793200000D+00 .2784200000D-01 .6970000000D+00 .1214020000D+00 .4947000000D+01 .4737500000D+01 .4170000000D-01 +3 30620000205200003162451579.4 .2514000000D+01 .1270000000D-02 .9900634000D+03 .2599870000D+01 .1540200000D-01 .8488000000D+00 .2181040000D+01 .7063000000D+00 .3477000000D+00 .5834900000D+01 .1018200000D+01 -.5700000000D-03 .4095058000D+03 .1157680000D+01 .7211000000D-02 .3426000000D+00 .2313267000D+01 .2948000000D+00 .5694200000D+01 .5968900000D+01 -.5933000000D+00 .2973000000D-01 .1069029600D+04 .2812310000D+01 .1684100000D-01 .8844000000D+00 .3770915000D+01 .2216600000D+01 .1805000000D+01 .1129700000D+01 +3 30720000316200004252451619.4 .2615600000D+01 .1138000000D-01 .1001419800D+04 .3782290000D+01 .9912000000D-02 .9446000000D+00 .5766016000D+01 .4300500000D+01 .3287100000D+01 .6560000000D+00 .9759000000D+00 .3010000000D-02 .3808594000D+03 .1594040000D+01 .7568000000D-02 .3373000000D+00 .5909039000D+01 .3709800000D+01 .2228400000D+01 .8127000000D+00 -.3100000000D-01 .3552000000D-01 .1069238300D+04 .4048380000D+01 .1001600000D-01 .9871000000D+00 .1071572000D+01 .5783800000D+01 .4762600000D+01 .2169800000D+01 +3 30820000425200006042451659.4 .2533000000D+01 .8880000000D-02 .1017464000D+04 .4246970000D+01 .8821000000D-02 .1059500000D+01 .3037201000D+01 .1570000000D+01 .6066700000D+01 .1758000000D+01 .9096000000D+00 -.1080000000D-02 .3362693000D+03 .1747670000D+01 .7792000000D-02 .3146000000D+00 .3203080000D+01 .7749000000D+00 .5251600000D+01 .1923100000D+01 .1126500000D+01 .2384000000D-01 .1069095300D+04 .4528130000D+01 .9247000000D-02 .1082300000D+01 .4624398000D+01 .3048700000D+01 .1104000000D+01 .3282500000D+01 +3 30920000604200007142451699.4 .2361300000D+01 -.1171000000D-01 .1034748600D+04 .4134890000D+01 .1091600000D-01 .1062300000D+01 .3040000000D+00 .5104700000D+01 .2604800000D+01 .2888800000D+01 .7334000000D+00 -.5030000000D-02 .2801509000D+03 .1706580000D+01 .7074000000D-02 .2653000000D+00 .5077290000D+00 .4105100000D+01 .1919500000D+01 .3111000000D+01 .2489500000D+01 -.1040000000D-02 .1068943800D+04 .4331980000D+01 .1198200000D-01 .1085100000D+01 .1888501000D+01 .3126000000D+00 .4079700000D+01 .4464500000D+01 +3 31020000714200008232451739.4 .1984400000D+01 -.2926000000D-01 .1048738500D+04 .3487470000D+01 .1869200000D-01 .1058800000D+01 .3871603000D+01 .2373000000D+01 .5689700000D+01 .4057200000D+01 .5896000000D+00 -.8560000000D-02 .2217679000D+03 .1451690000D+01 .7981000000D-02 .1989000000D+00 .4133980000D+01 .1196300000D+01 .4719600000D+01 .4392000000D+01 .3067400000D+01 -.5500000000D-02 .1068945100D+04 .3572910000D+01 .1849400000D-01 .1082400000D+01 .5452896000D+01 .3870600000D+01 .9048000000D+00 .5620100000D+01 +3 31120000823200010022451779.4 .1382300000D+01 -.2982000000D-01 .1057356600D+04 .2049360000D+01 .2793900000D-01 .9896000000D+00 .1196503000D+01 .5970300000D+01 .2838200000D+01 .5225100000D+01 .3551000000D+00 -.3980000000D-02 .1758291000D+03 .8746600000D+00 .1149600000D-01 .1508000000D+00 .1534714000D+01 .4655100000D+01 .1571400000D+01 .5579200000D+01 .2976200000D+01 -.4400000000D-03 .1069037100D+04 .2101690000D+01 .2860700000D-01 .1032100000D+01 .2775748000D+01 .1180800000D+01 .4323000000D+01 .4987000000D+00 +3 31220001002200011112451819.4 .6074000000D+00 -.4070000000D-02 .1059934600D+04 .3367500000D+00 .2572200000D-01 .8307000000D+00 .4873155000D+01 .1017000000D+00 .2922000000D+00 .1841000000D+00 .2192000000D+00 -.3400000000D-03 .1591694000D+03 .1110600000D+00 .1074700000D-01 .1281000000D+00 .5255329000D+01 .5368300000D+01 .5276400000D+01 .5425000000D+00 .2426800000D+01 .6560000000D-02 .1068782000D+04 .3213000000D+00 .2703500000D-01 .8871000000D+00 .1687130000D+00 .1712600000D+01 .1779800000D+01 .1734800000D+01 +3 31320001111200012212451859.4 -.3500000000D-02 .2276000000D-01 .1056806900D+04 .2547500000D+01 .4789000000D-02 .6396000000D+00 .2352072000D+01 .4002600000D+01 .3221000000D+00 .1469700000D+01 .7630000000D-01 .6060000000D-02 .1801334000D+03 .1034510000D+01 .2169000000D-02 .1423000000D+00 .2689003000D+01 .2754700000D+01 .5236000000D+01 .1849400000D+01 .2282800000D+01 -.1742000000D-01 .1068749300D+04 .2613860000D+01 .4611000000D-02 .6772000000D+00 .3931842000D+01 .5505400000D+01 .1743100000D+01 .3003700000D+01 +3 31420001221200101302451899.4 .3675000000D+00 .1258000000D-01 .1049743500D+04 .2063250000D+01 .2959200000D-01 .5194000000D+00 .6153364000D+01 .1552300000D+01 .4691400000D+01 .2510500000D+01 .1966000000D+00 .7400000000D-03 .2180874000D+03 .8208700000D+00 .1186300000D-01 .1100000000D+00 .1383330000D+00 .3229000000D+00 .3562600000D+01 .2751000000D+01 .1989500000D+01 -.2688000000D-01 .1068776100D+04 .2133120000D+01 .3086700000D-01 .5287000000D+00 .1451566000D+01 .3027700000D+01 .6161400000D+01 .4036800000D+01 +3 31520010130200103112451939.4 .9803000000D+00 -.1780000000D-02 .1046045300D+04 .4348700000D+00 .2632900000D-01 .4787000000D+00 .3615893000D+01 .2205600000D+01 .2060400000D+01 .3336700000D+01 .2917000000D+00 -.1740000000D-02 .2320928000D+03 .2180100000D+00 .1112900000D-01 .9980000000D-01 .3854093000D+01 .1562700000D+01 .8554000000D+00 .3570100000D+01 .1455700000D+01 -.1658000000D-01 .1068822100D+04 .4348700000D+00 .2801200000D-01 .5138000000D+00 .5197229000D+01 .3730700000D+01 .3554100000D+01 .4934700000D+01 +3 31620010311200104202451979.4 .1545600000D+01 -.7010000000D-02 .1050681600D+04 .2585040000D+01 .1613200000D-01 .5768000000D+00 .9888810000D+00 .5803200000D+01 .5353900000D+01 .4093900000D+01 .3425000000D+00 -.2920000000D-02 .2090667000D+03 .1079760000D+01 .8288000000D-02 .1062000000D+00 .1240955000D+01 .4708100000D+01 .3897300000D+01 .4399000000D+01 .8490000000D+00 .1146000000D-01 .1069113400D+04 .2667070000D+01 .1617600000D-01 .6066000000D+00 .2568787000D+01 .1009400000D+01 .6475000000D+00 .5690800000D+01 +3 31720010420200105302452019.4 .1614200000D+01 .8090000000D-02 .1059886800D+04 .3763480000D+01 .1123000000D-01 .7421000000D+00 .4581039000D+01 .3079700000D+01 .2050400000D+01 .4910200000D+01 .2548000000D+00 -.1000000000D-04 .1568763000D+03 .1616140000D+01 .7547000000D-02 .7340000000D-01 .4905469000D+01 .1820200000D+01 .4919000000D+00 .5360000000D+01 .7475000000D+00 .3057000000D-01 .1069233100D+04 .3905880000D+01 .9631000000D-02 .7163000000D+00 .6158619000D+01 .4591700000D+01 .3555800000D+01 .2918000000D+00 +3 31820010530200107092452059.4 .1580800000D+01 .9950000000D-02 .1067811800D+04 .4268350000D+01 .9699000000D-02 .9140000000D+00 .1859765000D+01 .3165000000D+00 .4774600000D+01 .5957200000D+01 .1866000000D+00 -.2380000000D-02 .8943050000D+02 .1859470000D+01 .7378000000D-02 .4600000000D-01 .2422796000D+01 .5194200000D+01 .3429400000D+01 .5759000000D+00 .1467700000D+01 .2650000000D-01 .1069137500D+04 .4364450000D+01 .9036000000D-02 .9037000000D+00 .3433821000D+01 .1865100000D+01 .9600000000D-02 .1326800000D+01 +3 31920010709200108182452099.4 .1343000000D+01 -.8500000000D-03 .1070569700D+04 .4160520000D+01 .1210600000D-01 .1010400000D+01 .5415509000D+01 .3831800000D+01 .1351600000D+01 .8045000000D+00 .1071000000D+00 -.2060000000D-02 .4527090000D+02 .1836830000D+01 .7072000000D-02 .5580000000D-01 .7950690000D+00 .2288900000D+01 .2500000000D-01 .3054900000D+01 .2658900000D+01 .4050000000D-02 .1069419000D+04 .4214430000D+01 .1104200000D-01 .1004200000D+01 .7028010000D+00 .5409200000D+01 .2884700000D+01 .2392600000D+01 +3 32020010818200109272452139.4 .1155000000D+01 -.2600000000D-01 .1067587500D+04 .3449690000D+01 .1849800000D-01 .1124100000D+01 .2702873000D+01 .1087200000D+01 .4440300000D+01 .1952300000D+01 .5460000000D-01 .3900000000D-03 .8775090000D+02 .1536200000D+01 .8442000000D-02 .1283000000D+00 .5344301000D+01 .5703900000D+01 .2837200000D+01 .4753000000D+01 .3448600000D+01 -.5840000000D-02 .1069750100D+04 .3506780000D+01 .1832300000D-01 .1118600000D+01 .4270809000D+01 .2684200000D+01 .5969900000D+01 .3552500000D+01 +3 32120010927200111062452179.4 .6074000000D+00 -.3176000000D-01 .1062554700D+04 .1996770000D+01 .2786900000D-01 .1181500000D+01 .2968300000D-01 .4669900000D+01 .1538000000D+01 .3170300000D+01 .3960000000D-01 .4640000000D-02 .1348372000D+03 .8967700000D+00 .1210400000D-01 .1572000000D+00 .2875464000D+01 .2940700000D+01 .6046000000D+01 .6074400000D+01 .3581000000D+01 -.2650000000D-02 .1069724600D+04 .2074900000D+01 .2943300000D-01 .1175300000D+01 .1596382000D+01 .1060000000D-01 .3154200000D+01 .4721600000D+01 +3 32220011106200112162452219.4 -.1082000000D+00 -.1401000000D-01 .1060366000D+04 .3935500000D+00 .2542300000D-01 .1156300000D+01 .3708350000D+01 .5218400000D+01 .5260800000D+01 .4451400000D+01 .1081000000D+00 .2820000000D-02 .1513788000D+03 .1554900000D+00 .1143600000D-01 .1511000000D+00 .3158490000D+00 .2977900000D+01 .3536200000D+01 .1109700000D+01 .3198700000D+01 .8960000000D-02 .1069550800D+04 .3980900000D+00 .2618500000D-01 .1097200000D+01 .5274489000D+01 .4683000000D+00 .6305000000D+00 .6011900000D+01 +3 32320011216200201252452259.4 -.9227000000D+00 .2058000000D-01 .1063378900D+04 .2575300000D+01 .5171000000D-02 .9991000000D+00 .1188948000D+01 .2715600000D+01 .5291000000D+01 .5790500000D+01 .2183000000D+00 -.2450000000D-02 .1282394000D+03 .1113150000D+01 .2712000000D-02 .1045000000D+00 .4038834000D+01 .9319000000D+00 .3141400000D+01 .2196600000D+01 .2938600000D+01 .4500000000D-03 .1069729100D+04 .2631470000D+01 .5464000000D-02 .9860000000D+00 .2755939000D+01 .4331600000D+01 .7146000000D+00 .1084700000D+01 +3 32420020125200203062452299.4 -.7928000000D+00 .1037000000D-01 .1067505000D+04 .2021880000D+01 .2885400000D-01 .9098000000D+00 .4989959000D+01 .2592000000D+00 .3398200000D+01 .7843000000D+00 .1721000000D+00 -.2390000000D-02 .8709120000D+02 .9178800000D+00 .1261900000D-01 .6480000000D-01 .1413366000D+01 .4847700000D+01 .1725300000D+01 .3556300000D+01 .3062200000D+01 -.2379000000D-01 .1069808900D+04 .2086990000D+01 .3008400000D-01 .8729000000D+00 .2748690000D+00 .1862200000D+01 .5001900000D+01 .2395500000D+01 +3 32520020306200204152452339.4 -.4275000000D+00 -.6030000000D-02 .1068301300D+04 .4126300000D+00 .2626800000D-01 .7650000000D+00 .2451216000D+01 .9949000000D+00 .7590000000D+00 .1961900000D+01 .1355000000D+00 -.1320000000D-02 .7125140000D+02 .1578400000D+00 .1150400000D-01 .6030000000D-01 .5062819000D+01 .5816100000D+01 .5372500000D+01 .4783300000D+01 .2670500000D+01 -.2522000000D-01 .1069765100D+04 .4113800000D+00 .2671000000D-01 .7547000000D+00 .4020143000D+01 .2483100000D+01 .2404800000D+01 .3551500000D+01 +3 32620020415200205252452379.4 -.1125000000D+00 -.1163000000D-01 .1066540700D+04 .2500360000D+01 .1603200000D-01 .6184000000D+00 .6109270000D+01 .4522600000D+01 .4084400000D+01 .2914900000D+01 .3990000000D-01 .2420000000D-02 .9367940000D+02 .1076910000D+01 .7604000000D-02 .5900000000D-01 .2594700000D+01 .2863700000D+01 .2175400000D+01 .5707000000D+01 .1946800000D+01 -.8750000000D-02 .1069672100D+04 .2571880000D+01 .1515600000D-01 .6015000000D+00 .1394576000D+01 .6123100000D+01 .5741500000D+01 .4440900000D+01 +3 32720020525200207042452419.4 -.4010000000D-01 .2480000000D-02 .1060838700D+04 .3687260000D+01 .9603000000D-02 .5105000000D+00 .3422475000D+01 .1791900000D+01 .7493000000D+00 .3615300000D+01 .5740000000D-01 -.6400000000D-03 .1461495000D+03 .1591660000D+01 .6559000000D-02 .9160000000D-01 .6697800000D-01 .3210000000D-01 .4942300000D+01 .2821000000D+00 .1223100000D+01 .1745000000D-01 .1069785900D+04 .3738850000D+01 .9777000000D-02 .5249000000D+00 .4989430000D+01 .3427900000D+01 .2438400000D+01 .5097800000D+01 +3 32820020704200208132452459.4 -.5880000000D-01 .1295000000D-01 .1049603200D+04 .4136910000D+01 .8769000000D-02 .5714000000D+00 .7045050000D+00 .5330000000D+01 .3441100000D+01 .4384500000D+01 .3060000000D-01 -.2210000000D-02 .2115606000D+03 .1765860000D+01 .6662000000D-02 .1327000000D+00 .3720065000D+01 .3431500000D+01 .1555700000D+01 .1177200000D+01 .1319000000D+01 .2006000000D-01 .1070060400D+04 .4190430000D+01 .8018000000D-02 .6163000000D+00 .2270255000D+01 .6984000000D+00 .5201400000D+01 .5846400000D+01 +3 32920020813200209222452499.4 -.1187000000D+00 .1056000000D-01 .1034711700D+04 .3996940000D+01 .1152000000D-01 .6862000000D+00 .4262374000D+01 .2587000000D+01 .1910000000D-01 .5240700000D+01 .9230000000D-01 -.4110000000D-02 .2746229000D+03 .1682410000D+01 .6647000000D-02 .1992000000D+00 .1044280000D+01 .5369000000D+00 .4456700000D+01 .2006900000D+01 .2011700000D+01 .7790000000D-02 .1070343400D+04 .4089860000D+01 .1080100000D-01 .7337000000D+00 .5828065000D+01 .4246800000D+01 .1646700000D+01 .4662000000D+00 +3 33020020922200211012452539.4 -.5880000000D-01 -.1278000000D-01 .1020032100D+04 .3246190000D+01 .1785600000D-01 .8631000000D+00 .1551272000D+01 .6145500000D+01 .3148000000D+01 .1100000000D-02 .4500000000D-01 .4510000000D-02 .3250934000D+03 .1348500000D+01 .8004000000D-02 .2947000000D+00 .4647673000D+01 .3965800000D+01 .1042900000D+01 .3107900000D+01 .2865900000D+01 -.6570000000D-02 .1070388200D+04 .3392070000D+01 .1936600000D-01 .9329000000D+00 .3118152000D+01 .1533700000D+01 .4804300000D+01 .1547500000D+01 +3 33120021101200212112452579.4 -.2733000000D+00 -.2536000000D-01 .1009411200D+04 .1803340000D+01 .2764300000D-01 .1011800000D+01 .5164388000D+01 .3465700000D+01 .3255000000D+00 .1133200000D+01 .1231000000D+00 .9010000000D-02 .3566853000D+03 .7155800000D+00 .1154200000D-01 .3639000000D+00 .1998223000D+01 .1228900000D+01 .4274700000D+01 .4257900000D+01 .3158300000D+01 -.2630000000D-02 .1070145400D+04 .1866540000D+01 .2912500000D-01 .1083500000D+01 .4493180000D+00 .5162300000D+01 .2028800000D+01 .2721800000D+01 +3 33220021211200301202452619.4 -.7615000000D+00 -.1763000000D-01 .1006059200D+04 .5346700000D+00 .2370400000D-01 .1055600000D+01 .2565605000D+01 .4018700000D+01 .4092000000D+01 .2401200000D+01 .2848000000D+00 .6390000000D-02 .3653408000D+03 .2923300000D+00 .9886000000D-02 .3707000000D+00 .5694008000D+01 .1386100000D+01 .1861100000D+01 .5532400000D+01 .3027500000D+01 .1099000000D-01 .1070296100D+04 .6263200000D+00 .2378700000D-01 .1167800000D+01 .4134597000D+01 .5663200000D+01 .5780100000D+01 .4010100000D+01 +3 33320030120200303012452659.4 -.1407500000D+01 .6780000000D-02 .1011792400D+04 .2522430000D+01 .6503000000D-02 .1075200000D+01 .5156100000D-01 .1529500000D+01 .4343000000D+01 .3751300000D+01 .5403000000D+00 -.4910000000D-02 .3495906000D+03 .1104590000D+01 .3976000000D-02 .3650000000D+00 .3181167000D+01 .5498100000D+01 .1679600000D+01 .5593000000D+00 .2794500000D+01 .1802000000D-01 .1070373500D+04 .2663290000D+01 .7471000000D-02 .1155600000D+01 .1620926000D+01 .3198700000D+01 .6040200000D+01 .5316900000D+01 +3 33420030301200304102452699.4 -.1756100000D+01 .9060000000D-02 .1020882200D+04 .1849770000D+01 .2774000000D-01 .1062200000D+01 .3851811000D+01 .5324800000D+01 .2181200000D+01 .5114800000D+01 .5617000000D+00 -.3100000000D-02 .3215359000D+03 .7911000000D+00 .1182500000D-01 .3234000000D+00 .6906970000D+00 .3175400000D+01 .6269900000D+01 .1955800000D+01 .3287500000D+01 -.1580000000D-01 .1070512500D+04 .1912110000D+01 .2881800000D-01 .1173000000D+01 .5420915000D+01 .7322000000D+00 .3879300000D+01 .3900000000D+00 +3 33520030410200305202452739.4 -.1659900000D+01 -.8490000000D-02 .1024126200D+04 .4434800000D+00 .2501200000D-01 .1035200000D+01 .1309343000D+01 .5996300000D+01 .5855300000D+01 .9630000000D-01 .5310000000D+00 .2620000000D-02 .3109397000D+03 .1944300000D+00 .1036200000D-01 .3196000000D+00 .4425285000D+01 .3751000000D+01 .3622300000D+01 .3229100000D+01 .3212700000D+01 -.3085000000D-01 .1070235800D+04 .5024900000D+00 .2489700000D-01 .1093300000D+01 .2878311000D+01 .1359500000D+01 .1243500000D+01 .1645800000D+01 +3 33620030520200306292452779.4 -.1626500000D+01 -.1372000000D-01 .1018623000D+04 .2420250000D+01 .1396500000D-01 .8934000000D+00 .4966110000D+01 .3304900000D+01 .2950900000D+01 .1179500000D+01 .5225000000D+00 .6990000000D-02 .3286831000D+03 .1021840000D+01 .6551000000D-02 .3008000000D+00 .1803436000D+01 .1080100000D+01 .4340000000D+00 .4292100000D+01 .2459500000D+01 -.2380000000D-01 .1069924400D+04 .2517290000D+01 .1501300000D-01 .9569000000D+00 .2518020000D+00 .4990300000D+01 .4565900000D+01 .2790300000D+01 +3 33720030629200308082452819.4 -.1590200000D+01 -.4890000000D-02 .1006899200D+04 .3508970000D+01 .7857000000D-02 .7015000000D+00 .2279544000D+01 .6125000000D+00 .5893400000D+01 .2191400000D+01 .5844000000D+00 .2960000000D-02 .3630468000D+03 .1481300000D+01 .5717000000D-02 .2730000000D+00 .5412883000D+01 .4556200000D+01 .3196300000D+01 .5327600000D+01 .1350400000D+01 .1080000000D-02 .1070289800D+04 .3646260000D+01 .9130000000D-02 .7663000000D+00 .3849223000D+01 .2283100000D+01 .1349200000D+01 .3793600000D+01 +3 33820030808200309172452859.4 -.1673900000D+01 .1568000000D-01 .9929335000D+03 .3882490000D+01 .6945000000D-02 .5854000000D+00 .5844927000D+01 .4184200000D+01 .2286400000D+01 .3081800000D+01 .6698000000D+00 -.5200000000D-02 .3996039000D+03 .1644010000D+01 .5922000000D-02 .2440000000D+00 .2711455000D+01 .1696200000D+01 .6119600000D+01 .6244200000D+01 .7541000000D+00 .1044000000D-01 .1070536700D+04 .4090970000D+01 .7311000000D-02 .6101000000D+00 .1133649000D+01 .5840200000D+01 .4027000000D+01 .4770600000D+01 +3 33920030917200310272452899.4 -.1524500000D+01 .2057000000D-01 .9805819000D+03 .3729260000D+01 .1034500000D-01 .4859000000D+00 .3120430000D+01 .1472500000D+01 .5065100000D+01 .3795000000D+01 .6645000000D+00 -.9000000000D-02 .4291378000D+03 .1573130000D+01 .6019000000D-02 .2166000000D+00 .4468000000D-02 .5110100000D+01 .2679000000D+01 .6795000000D+00 .8329000000D+00 .7220000000D-02 .1070421800D+04 .4010740000D+01 .1189200000D-01 .5189000000D+00 .4695691000D+01 .3114200000D+01 .4270000000D+00 .5504900000D+01 +3 34020031027200312062452939.4 -.1204900000D+01 .4180000000D-02 .9725373000D+03 .2999440000D+01 .1830500000D-01 .5656000000D+00 .4122140000D+00 .5055800000D+01 .1987900000D+01 .4635600000D+01 .5309000000D+00 -.1780000000D-02 .4480498000D+03 .1235500000D+01 .8245000000D-02 .2652000000D+00 .3596747000D+01 .2272500000D+01 .5547100000D+01 .1542400000D+01 .1495200000D+01 -.7190000000D-02 .1070246200D+04 .3213650000D+01 .1998400000D-01 .6150000000D+00 .1990657000D+01 .4086000000D+00 .3669200000D+01 .6214400000D+01 +3 34120031206200401152452979.4 -.9476000000D+00 -.1623000000D-01 .9683831000D+03 .1519880000D+01 .2714400000D-01 .7168000000D+00 .4031411000D+01 .2417500000D+01 .5561700000D+01 .5578700000D+01 .3983000000D+00 .7640000000D-02 .4566511000D+03 .5704600000D+00 .1187700000D-01 .3398000000D+00 .9480750000D+00 .5852900000D+01 .2665900000D+01 .2499100000D+01 .1863000000D+01 -.6500000000D-03 .1070017500D+04 .1572970000D+01 .2861500000D-01 .7648000000D+00 .5612551000D+01 .4034700000D+01 .8976000000D+00 .8614000000D+00 +3 34220040115200402242453019.4 -.1135500000D+01 -.1660000000D-01 .9675098000D+03 .7740100000D+00 .2035200000D-01 .8205000000D+00 .1441851000D+01 .2942200000D+01 .3071800000D+01 .4870000000D+00 .4828000000D+00 .7040000000D-02 .4581585000D+03 .4381000000D+00 .8345000000D-02 .3875000000D+00 .4651712000D+01 .6256200000D+01 .3091000000D+00 .3698700000D+01 .1937800000D+01 .1684000000D-01 .1070022400D+04 .8960400000D+00 .2116500000D-01 .8973000000D+00 .3025090000D+01 .4585200000D+01 .4668000000D+01 .2022400000D+01 +3 34320040224200404042453059.4 -.1527800000D+01 -.5990000000D-02 .9697452000D+03 .2456580000D+01 .8976000000D-02 .9724000000D+00 .5217723000D+01 .4686000000D+00 .3420200000D+01 .1751600000D+01 .6703000000D+00 .9500000000D-03 .4538269000D+03 .1105420000D+01 .5257000000D-02 .4550000000D+00 .2145181000D+01 .3924600000D+01 .4219000000D+00 .4964700000D+01 .2020900000D+01 .2670000000D-01 .1070310000D+04 .2665780000D+01 .1005500000D-01 .1034900000D+01 .5177310000D+00 .2105800000D+01 .5089600000D+01 .3307600000D+01 +3 34420040404200405142453099.4 -.2191000000D+01 .6840000000D-02 .9738152000D+03 .1610240000D+01 .2653300000D-01 .1065400000D+01 .2732218000D+01 .4259500000D+01 .1122300000D+01 .3089900000D+01 .9233000000D+00 -.2720000000D-02 .4449806000D+03 .6574400000D+00 .1182800000D-01 .4824000000D+00 .5935147000D+01 .1561600000D+01 .4658600000D+01 .4200000000D-02 .2648600000D+01 -.3470000000D-02 .1070129800D+04 .1681480000D+01 .2788700000D-01 .1115700000D+01 .4313835000D+01 .5896300000D+01 .2755700000D+01 .4657000000D+01 +3 34520040514200406232453139.4 -.2372700000D+01 -.7220000000D-02 .9751910000D+03 .5746600000D+00 .2223500000D-01 .1103900000D+01 .1837910000D+00 .4859700000D+01 .4791400000D+01 .4353800000D+01 .9981000000D+00 .4790000000D-02 .4417256000D+03 .3096000000D+00 .9543000000D-02 .5028000000D+00 .3379395000D+01 .2068400000D+01 .1996100000D+01 .1271200000D+01 .2944600000D+01 -.2967000000D-01 .1069930700D+04 .6504200000D+00 .2387500000D-01 .1185700000D+01 .1763917000D+01 .2616000000D+00 .1003000000D+00 .5929000000D+01 +3 34620040623200408022453179.4 -.2500900000D+01 -.1564000000D-01 .9720310000D+03 .2366600000D+01 .1274400000D-01 .1077000000D+01 .3836534000D+01 .2231100000D+01 .1882100000D+01 .5506900000D+01 .1105200000D+01 .8540000000D-02 .4482586000D+03 .1079610000D+01 .5967000000D-02 .5029000000D+00 .7487620000D+00 .5718800000D+01 .5046400000D+01 .2416300000D+01 .2338900000D+01 -.3075000000D-01 .1069885500D+04 .2535570000D+01 .1499500000D-01 .1175200000D+01 .5416516000D+01 .3864800000D+01 .3463200000D+01 .7806000000D+00 +3 34720040802200409112453219.4 -.2574000000D+01 -.1236000000D-01 .9675927000D+03 .3371020000D+01 .7296000000D-02 .9781000000D+00 .1148299000D+01 .5838000000D+01 .4893900000D+01 .3251000000D+00 .1182500000D+01 .6840000000D-02 .4579981000D+03 .1503230000D+01 .5403000000D-02 .4687000000D+00 .4350891000D+01 .2935100000D+01 .1540400000D+01 .3532700000D+01 .1175100000D+01 -.1476000000D-01 .1070100000D+04 .3657020000D+01 .8424000000D-02 .1075000000D+01 .2730168000D+01 .1159000000D+01 .1952000000D+00 .1894900000D+01 +3 34820040911200410212453259.4 -.2735100000D+01 .1134000000D-01 .9654194000D+03 .3723260000D+01 .5818000000D-02 .8435000000D+00 .4713586000D+01 .3138100000D+01 .1282000000D+01 .1469400000D+01 .1316600000D+01 -.5960000000D-02 .4633270000D+03 .1628260000D+01 .5502000000D-02 .4075000000D+00 .1645444000D+01 .9160000000D-01 .4480400000D+01 .4695300000D+01 .6100000000D-02 .1500000000D-02 .1070039100D+04 .4085620000D+01 .7676000000D-02 .9645000000D+00 .1511000000D-01 .4722200000D+01 .2772100000D+01 .2988100000D+01 +3 34920041021200411302453299.4 -.2573500000D+01 .2486000000D-01 .9671437000D+03 .3602220000D+01 .1055200000D-01 .6968000000D+00 .1991306000D+01 .4343000000D+00 .3908700000D+01 .2493000000D+01 .1236500000D+01 -.1212000000D-01 .4604943000D+03 .1531190000D+01 .6244000000D-02 .3294000000D+00 .5222109000D+01 .3512300000D+01 .9567000000D+00 .5738500000D+01 -.4801000000D+00 .3240000000D-02 .1069629000D+04 .3925330000D+01 .1270600000D-01 .7815000000D+00 .3578677000D+01 .2002200000D+01 .5578300000D+01 .3981100000D+01 +3 35020041130200501092453339.4 -.2148500000D+01 .2049000000D-01 .9720009000D+03 .2836370000D+01 .1963700000D-01 .5958000000D+00 .5571647000D+01 .4035300000D+01 .9519000000D+00 .3410300000D+01 .1006400000D+01 -.9920000000D-02 .4508826000D+03 .1150300000D+01 .8932000000D-02 .2730000000D+00 .2536591000D+01 .6785000000D+00 .3966800000D+01 .3710000000D+00 -.2408000000D+00 -.6900000000D-02 .1069569400D+04 .3034160000D+01 .2091700000D-01 .6660000000D+00 .8779420000D+00 .5573600000D+01 .2511700000D+01 .4993500000D+01 +3 35120050109200502182453379.4 -.1461100000D+01 -.4930000000D-02 .9764004000D+03 .1233110000D+01 .2680700000D-01 .5209000000D+00 .2916678000D+01 .1421200000D+01 .4560800000D+01 .4215100000D+01 .6462000000D+00 .2360000000D-02 .4409464000D+03 .4313300000D+00 .1117800000D-01 .2364000000D+00 .6180809000D+01 .4211000000D+01 .1143200000D+01 .1212100000D+01 .1451000000D+00 -.2840000000D-02 .1069270400D+04 .1287200000D+01 .2868100000D-01 .6092000000D+00 .4508084000D+01 .2919800000D+01 .6064400000D+01 .5794800000D+01 +3 35220050218200503302453419.4 -.1202200000D+01 -.1679000000D-01 .9770782000D+03 .1059220000D+01 .1686700000D-01 .5402000000D+00 .3383840000D+00 .1941600000D+01 .2092800000D+01 .5079000000D+01 .5038000000D+00 .7660000000D-02 .4398514000D+03 .5283200000D+00 .6372000000D-02 .2488000000D+00 .3611494000D+01 .4858100000D+01 .5084400000D+01 .2086100000D+01 .2739000000D+00 .2099000000D-01 .1068955200D+04 .1155200000D+01 .1873100000D-01 .5888000000D+00 .1931424000D+01 .3489900000D+01 .3597200000D+01 .4423000000D+00 +3 35320050330200505092453459.4 -.1429100000D+01 -.1265000000D-01 .9735333000D+03 .2462610000D+01 .1213100000D-01 .6859000000D+00 .4119683000D+01 .5758700000D+01 .2522700000D+01 .6158800000D+01 .6262000000D+00 .4610000000D-02 .4485350000D+03 .1053240000D+01 .6161000000D-02 .3141000000D+00 .1106226000D+01 .2442400000D+01 .5447800000D+01 .3145100000D+01 .6560000000D+00 .2952000000D-01 .1069204000D+04 .2640180000D+01 .1276800000D-01 .7926000000D+00 .5713171000D+01 .1010100000D+01 .4020900000D+01 .1555200000D+01 +3 35420050509200506182453499.4 -.2164100000D+01 .4860000000D-02 .9696838000D+03 .1367060000D+01 .2547800000D-01 .8146000000D+00 .1629390000D+01 .3257500000D+01 .1183000000D+00 .1131400000D+01 .9476000000D+00 -.2430000000D-02 .4559137000D+03 .5101100000D+00 .1115300000D-01 .3830000000D+00 .4887572000D+01 .6276600000D+01 .3161400000D+01 .4388700000D+01 .1302500000D+01 .1015000000D-01 .1069214000D+04 .1461000000D+01 .2797700000D-01 .9440000000D+00 .3221212000D+01 .4791200000D+01 .1651100000D+01 .2745800000D+01 +3 35520050618200507282453539.4 -.2546800000D+01 -.4110000000D-02 .9689395000D+03 .7556600000D+00 .2081900000D-01 .9580000000D+00 .5356013000D+01 .3840600000D+01 .3755700000D+01 .2336200000D+01 .1109400000D+01 .2590000000D-02 .4567676000D+03 .4200400000D+00 .8650000000D-02 .4470000000D+00 .2322089000D+01 .6561000000D+00 .4002000000D+00 .5589400000D+01 .1951900000D+01 -.2295000000D-01 .1069251100D+04 .8437700000D+00 .2310100000D-01 .1083800000D+01 .6630260000D+00 .5422700000D+01 .5279200000D+01 .3960600000D+01 +3 35620050728200509062453579.4 -.2739700000D+01 -.1783000000D-01 .9712551000D+03 .2432860000D+01 .1309800000D-01 .1072700000D+01 .2719877000D+01 .1216600000D+01 .8171000000D+00 .3465100000D+01 .1195900000D+01 .8160000000D-02 .4511509000D+03 .1114460000D+01 .6167000000D-02 .4886000000D+00 .5968784000D+01 .4211300000D+01 .3362300000D+01 .4340000000D+00 .1662600000D+01 -.3132000000D-01 .1069465900D+04 .2660370000D+01 .1438300000D-01 .1206100000D+01 .4309621000D+01 .2747100000D+01 .2362100000D+01 .5064800000D+01 +3 35720050906200510162453619.4 -.2955700000D+01 -.1829000000D-01 .9779455000D+03 .3421580000D+01 .7783000000D-02 .1120800000D+01 .2930200000D-01 .4814100000D+01 .3886700000D+01 .4586800000D+01 .1295400000D+01 .6350000000D-02 .4371155000D+03 .1488190000D+01 .5899000000D-02 .4840000000D+00 .3286230000D+01 .1386700000D+01 .6195800000D+01 .1560400000D+01 .6764000000D+00 -.2511000000D-01 .1069335000D+04 .3766070000D+01 .8176000000D-02 .1205800000D+01 .1619550000D+01 .4990000000D-01 .5218700000D+01 .6184300000D+01 +3 35820051016200511252453659.4 -.3180500000D+01 .2940000000D-02 .9891558000D+03 .3816890000D+01 .6269000000D-02 .1110900000D+01 .3595032000D+01 .2103200000D+01 .1162000000D+00 .5719300000D+01 .1347300000D+01 -.3630000000D-02 .4124493000D+03 .1600630000D+01 .6096000000D-02 .4424000000D+00 .5838730000D+00 .4783000000D+01 .2810800000D+01 .2722100000D+01 -.7364000000D+00 -.5780000000D-02 .1069179900D+04 .4121470000D+01 .8331000000D-02 .1153300000D+01 .5185094000D+01 .3613000000D+01 .1612200000D+01 .1070900000D+01 +3 35920051125200601042453699.4 -.3151900000D+01 .2450000000D-01 .1002847000D+04 .3652620000D+01 .1217900000D-01 .1066800000D+01 .8755370000D+00 .5676500000D+01 .2869700000D+01 .5366000000D+00 .1274700000D+01 -.1187000000D-01 .3783543000D+03 .1481820000D+01 .6767000000D-02 .3741000000D+00 .4168953000D+01 .1882800000D+01 .5670800000D+01 .3844000000D+01 -.1598300000D+01 -.3040000000D-02 .1069073800D+04 .3867520000D+01 .1302100000D-01 .1082600000D+01 .2464854000D+01 .8840000000D+00 .4401900000D+01 .2170300000D+01 +3 36020060104200602132453739.4 -.2728400000D+01 .3077000000D-01 .1015846400D+04 .2777470000D+01 .2158500000D-01 .9659000000D+00 .4462075000D+01 .2984900000D+01 .6184100000D+01 .1696800000D+01 .9823000000D+00 -.1001000000D-01 .3421713000D+03 .1097580000D+01 .8928000000D-02 .3074000000D+00 .1498386000D+01 .5291900000D+01 .2341200000D+01 .5003500000D+01 -.1835500000D+01 -.7030000000D-02 .1069055400D+04 .2902160000D+01 .2242100000D-01 .9877000000D+00 .6050556000D+01 .4457800000D+01 .1363000000D+01 .3311500000D+01 +3 36120060213200603252453779.4 -.1836000000D+01 .7240000000D-02 .1023935500D+04 .9899500000D+00 .2685800000D-01 .8180000000D+00 .1816297000D+01 .3691000000D+00 .3501100000D+01 .2798000000D+01 .6525000000D+00 -.1880000000D-02 .3172991000D+03 .3793900000D+00 .1065900000D-01 .2510000000D+00 .5159714000D+01 .2445800000D+01 .5746500000D+01 .6142500000D+01 -.1562600000D+01 -.7690000000D-02 .1068671700D+04 .1052800000D+01 .2890400000D-01 .8321000000D+00 .3404700000D+01 .1818500000D+01 .4964800000D+01 .4409800000D+01 +3 36220060325200605042453819.4 -.1123800000D+01 -.1657000000D-01 .1024081400D+04 .1332410000D+01 .1439400000D-01 .6168000000D+00 .5531163000D+01 .9069000000D+00 .1059100000D+01 .3918800000D+01 .4028000000D+00 .6690000000D-02 .3174551000D+03 .5516200000D+00 .5344000000D-02 .2031000000D+00 .2598143000D+01 .3266800000D+01 .3413100000D+01 .1023600000D+01 -.1435600000D+01 .1548000000D-01 .1068307200D+04 .1398300000D+01 .1578600000D-01 .6142000000D+00 .8368290000D+00 .2382000000D+01 .2579200000D+01 .5482300000D+01 +3 36320060504200606132453859.4 -.1209800000D+01 -.1289000000D-01 .1016942600D+04 .2480620000D+01 .1428500000D-01 .5970000000D+00 .3033100000D+01 .4727700000D+01 .1514700000D+01 .4956300000D+01 .4886000000D+00 .2600000000D-02 .3408339000D+03 .9645300000D+00 .5977000000D-02 .2047000000D+00 .8441200000D-01 .8131000000D+00 .3913600000D+01 .1948200000D+01 -.1052100000D+01 .2671000000D-01 .1068520400D+04 .2640780000D+01 .1571200000D-01 .5807000000D+00 .4622888000D+01 .6199200000D+01 .2954600000D+01 .1618000000D+00 +3 36420060613200607232453899.4 -.1777900000D+01 .4210000000D-02 .1008826600D+04 .1191190000D+01 .2618600000D-01 .6194000000D+00 .5364940000D+00 .2223800000D+01 .5361000000D+01 .5864300000D+01 .6616000000D+00 -.2460000000D-02 .3625924000D+03 .4217200000D+00 .1057500000D-01 .2262000000D+00 .3850145000D+01 .4539800000D+01 .1545600000D+01 .2875800000D+01 -.5139000000D+00 .2175000000D-01 .1068729400D+04 .1257590000D+01 .2835500000D-01 .6094000000D+00 .2126586000D+01 .3699800000D+01 .5633000000D+00 .1124900000D+01 +3 36520060723200609012453939.4 -.2240200000D+01 .2660000000D-02 .1007754900D+04 .9906900000D+00 .2094600000D-01 .7405000000D+00 .4254474000D+01 .2814000000D+01 .2672800000D+01 .5735000000D+00 .7933000000D+00 -.2040000000D-02 .3642338000D+03 .4718900000D+00 .8518000000D-02 .2631000000D+00 .1274539000D+01 .5453300000D+01 .4963100000D+01 .3882100000D+01 .3417000000D+00 -.9640000000D-02 .1068864700D+04 .1060610000D+01 .2251600000D-01 .7541000000D+00 .5843513000D+01 .4299700000D+01 .4173300000D+01 .2116600000D+01 +3 36620060901200610112453979.4 -.2384300000D+01 -.1604000000D-01 .1014823300D+04 .2651130000D+01 .1427700000D-01 .9491000000D+00 .1611754000D+01 .1613000000D+00 .5986700000D+01 .1557300000D+01 .7607000000D+00 .4450000000D-02 .3437714000D+03 .1123270000D+01 .6959000000D-02 .2968000000D+00 .4919331000D+01 .2588900000D+01 .1675900000D+01 .4850300000D+01 .5559000000D+00 -.2718000000D-01 .1068957800D+04 .2862930000D+01 .1363600000D-01 .9572000000D+00 .3199699000D+01 .1639000000D+01 .1183700000D+01 .3123900000D+01 +3 36720061011200611202454019.4 -.2654900000D+01 -.2038000000D-01 .1027845000D+04 .3689210000D+01 .8447000000D-02 .1047900000D+01 .5200825000D+01 .3732000000D+01 .2638700000D+01 .2613500000D+01 .8016000000D+00 .1520000000D-02 .3036021000D+03 .1529430000D+01 .6927000000D-02 .2846000000D+00 .2245512000D+01 .5989900000D+01 .4526700000D+01 .5959500000D+01 -.8240000000D-01 -.2794000000D-01 .1068716100D+04 .3902850000D+01 .9010000000D-02 .1107200000D+01 .5033170000D+00 .5225000000D+01 .3997200000D+01 .4190200000D+01 +3 36820061120200612302454059.4 -.2854500000D+01 -.7250000000D-02 .1042897900D+04 .4061730000D+01 .8894000000D-02 .1114000000D+01 .2481841000D+01 .9988000000D+00 .5203700000D+01 .3746200000D+01 .7261000000D+00 -.2200000000D-02 .2476407000D+03 .1692540000D+01 .6869000000D-02 .2342000000D+00 .5851729000D+01 .3066800000D+01 .1181700000D+01 .8988000000D+00 -.1361400000D+01 -.1070000000D-01 .1068987900D+04 .4204950000D+01 .8430000000D-02 .1189100000D+01 .4064349000D+01 .2489500000D+01 .4037000000D+00 .5300500000D+01 +3 36920061230200702082454099.4 -.3031900000D+01 .2209000000D-01 .1055887800D+04 .3774230000D+01 .1414900000D-01 .1197800000D+01 .6046023000D+01 .4538900000D+01 .1778200000D+01 .4857300000D+01 .6460000000D+00 -.7980000000D-02 .1845027000D+03 .1608770000D+01 .6844000000D-02 .1660000000D+00 .3211160000D+01 .1475000000D+00 .3936300000D+01 .2089300000D+01 -.2429500000D+01 -.4580000000D-02 .1069151800D+04 .3882830000D+01 .1393300000D-01 .1267100000D+01 .1342145000D+01 .6040600000D+01 .3210100000D+01 .1427000000D+00 +3 37020070208200703202454139.4 -.2661900000D+01 .3381000000D-01 .1063995800D+04 .2746890000D+01 .2277500000D-01 .1196200000D+01 .3352629000D+01 .1820400000D+01 .5022400000D+01 .6061500000D+01 .4076000000D+00 -.3240000000D-02 .1288135000D+03 .1202610000D+01 .9640000000D-02 .1325000000D+00 .6553320000D+00 .3576900000D+01 .5589000000D+00 .3391100000D+01 -.2942800000D+01 -.6630000000D-02 .1069150900D+04 .2850580000D+01 .2406100000D-01 .1249700000D+01 .4929296000D+01 .3337400000D+01 .2289000000D+00 .1323600000D+01 +3 37120070320200704292454179.4 -.1814900000D+01 .1675000000D-01 .1067424300D+04 .8429400000D+00 .2731100000D-01 .1154000000D+01 .7126760000D+00 .5446300000D+01 .2306900000D+01 .9749000000D+00 .2784000000D+00 -.4100000000D-03 .9771640000D+02 .4098300000D+00 .1195600000D-01 .1061000000D+00 .4457986000D+01 .8440000000D+00 .4023800000D+01 .4718500000D+01 -.2829600000D+01 -.1332000000D-01 .1068825500D+04 .8873100000D+00 .2857100000D-01 .1161900000D+01 .2287570000D+01 .7308000000D+00 .3871000000D+01 .2531300000D+01 +3 37220070429200706082454219.4 -.8573000000D+00 -.1517000000D-01 .1067018900D+04 .1513180000D+01 .1354200000D-01 .9328000000D+00 .4433545000D+01 .6024400000D+01 .6247900000D+01 .2213800000D+01 .2221000000D+00 .2110000000D-02 .1002063000D+03 .6160200000D+00 .5800000000D-02 .1061000000D+00 .1882821000D+01 .1475200000D+01 .1748400000D+01 .5976500000D+01 -.2732000000D+01 .1020000000D-02 .1068711300D+04 .1565410000D+01 .1340700000D-01 .1000400000D+01 .6008448000D+01 .1273700000D+01 .1506200000D+01 .3810300000D+01 +3 37320070608200707182454259.4 -.8286000000D+00 -.8690000000D-02 .1063688300D+04 .2524100000D+01 .1619700000D-01 .8469000000D+00 .1937789000D+01 .3574200000D+01 .3447000000D+00 .3504300000D+01 .2542000000D+00 -.5800000000D-03 .1318847000D+03 .1061320000D+01 .6819000000D-02 .1148000000D+00 .5512389000D+01 .5348100000D+01 .2141500000D+01 .6525000000D+00 -.2706200000D+01 .2233000000D-01 .1069166000D+04 .2624130000D+01 .1746800000D-01 .8885000000D+00 .3514197000D+01 .5101800000D+01 .1899400000D+01 .5111500000D+01 +3 37420070718200708272454299.4 -.1114200000D+01 .7130000000D-02 .1059193300D+04 .1069520000D+01 .2798200000D-01 .6694000000D+00 .5719836000D+01 .1074600000D+01 .4210800000D+01 .4596400000D+01 .2804000000D+00 -.2380000000D-02 .1629035000D+03 .4549900000D+00 .1169000000D-01 .1052000000D+00 .2913369000D+01 .2791800000D+01 .6085000000D+01 .1806500000D+01 -.2351600000D+01 .2762000000D-01 .1069188400D+04 .1104670000D+01 .2910200000D-01 .7358000000D+00 .1014637000D+01 .2604300000D+01 .5746500000D+01 .6219200000D+01 +3 37520070827200710062454339.4 -.1424300000D+01 .1252000000D-01 .1058871200D+04 .1221230000D+01 .2222400000D-01 .5771000000D+00 .3147043000D+01 .1683800000D+01 .1481200000D+01 .5509900000D+01 .2686000000D+00 -.2640000000D-02 .1623754000D+03 .5143900000D+00 .9835000000D-02 .8460000000D-01 .3260020000D+00 .3700100000D+01 .3223200000D+01 .2799300000D+01 -.1518200000D+01 .5800000000D-02 .1069085100D+04 .1290250000D+01 .2195100000D-01 .6301000000D+00 .4724947000D+01 .3177900000D+01 .3030900000D+01 .8236000000D+00 +3 37620071006200711152454379.4 -.1373500000D+01 -.7810000000D-02 .1063782800D+04 .2977300000D+01 .1424900000D-01 .6687000000D+00 .4974010000D+00 .5270200000D+01 .4720200000D+01 .6211200000D+01 .1992000000D+00 -.8400000000D-03 .1273632000D+03 .1276320000D+01 .7759000000D-02 .5650000000D-01 .4032135000D+01 .8332000000D+00 .6204200000D+01 .3553700000D+01 -.8089000000D+00 -.1781000000D-01 .1069038800D+04 .3071880000D+01 .1389400000D-01 .6850000000D+00 .2073344000D+01 .5203000000D+00 .6251600000D+01 .1556500000D+01 +3 37720071115200712252454419.4 -.1480100000D+01 -.1775000000D-01 .1068945300D+04 .4002470000D+01 .1010600000D-01 .7837000000D+00 .4079902000D+01 .2535500000D+01 .1189300000D+01 .7856000000D+00 .1116000000D+00 -.1900000000D-02 .7091130000D+02 .1737290000D+01 .7394000000D-02 .3420000000D-01 .1648501000D+01 .4241800000D+01 .2772000000D+01 .5051500000D+01 -.9604000000D+00 -.2097000000D-01 .1069207000D+04 .4043670000D+01 .9484000000D-02 .7731000000D+00 .5652585000D+01 .4089400000D+01 .2871300000D+01 .2386400000D+01 +3 37820071225200802032454459.4 -.1593000000D+01 -.1528000000D-01 .1070036400D+04 .4286160000D+01 .1103400000D-01 .9298000000D+00 .1355373000D+01 .6054200000D+01 .3918400000D+01 .1796800000D+01 .5490000000D-01 -.4520000000D-02 .4960080000D+02 .1890050000D+01 .7193000000D-02 .7400000000D-01 .3003320000D+00 .1338700000D+01 .5607300000D+01 .1203000000D+01 -.1722000000D+01 -.1201000000D-01 .1069660300D+04 .4342350000D+01 .9041000000D-02 .8891000000D+00 .2925161000D+01 .1347300000D+01 .5426400000D+01 .3362000000D+01 +3 37920080203200803142454499.4 -.1864900000D+01 .1271000000D-01 .1065682500D+04 .3865270000D+01 .1466000000D-01 .1122000000D+01 .4915357000D+01 .3286100000D+01 .5228000000D+00 .2872000000D+01 -.9310000000D-01 -.8300000000D-03 .1092954000D+03 .1713560000D+01 .7575000000D-02 .1490000000D+00 .4545721000D+01 .4732500000D+01 .2123300000D+01 .2632500000D+01 -.2770100000D+01 -.6300000000D-03 .1069843100D+04 .3958680000D+01 .1505900000D-01 .1072100000D+01 .1996360000D+00 .4898700000D+01 .2052400000D+01 .4434300000D+01 +3 38020080314200804232454539.4 -.1701600000D+01 .2801000000D-01 .1058059000D+04 .2775210000D+01 .2333000000D-01 .1202300000D+01 .2219651000D+01 .5533000000D+00 .3735800000D+01 .4029400000D+01 -.1547000000D+00 .3690000000D-02 .1674010000D+03 .1213490000D+01 .1000500000D-01 .2070000000D+00 .2004590000D+01 .1908300000D+01 .5099500000D+01 .3857600000D+01 -.3336300000D+01 -.4300000000D-02 .1069710100D+04 .2850290000D+01 .2435600000D-01 .1153500000D+01 .3785536000D+01 .2205900000D+01 .5398400000D+01 .5601700000D+01 +3 38120080423200806022454579.4 -.1141800000D+01 .2145000000D-01 .1052140500D+04 .8564300000D+00 .2817200000D-01 .1249200000D+01 .5862297000D+01 .4189400000D+01 .1060000000D+01 .5243500000D+01 -.1164000000D+00 .4620000000D-02 .1996862000D+03 .3861600000D+00 .1211000000D-01 .2382000000D+00 .5697706000D+01 .5602800000D+01 .2322000000D+01 .5086300000D+01 -.3380000000D+01 -.1569000000D-01 .1069783600D+04 .8426800000D+00 .2820500000D-01 .1240700000D+01 .1144110000D+01 .5870400000D+01 .2725300000D+01 .5399000000D+00 +3 38220080602200807122454619.4 -.3122000000D+00 -.6470000000D-02 .1052444000D+04 .1547570000D+01 .1348600000D-01 .1207200000D+01 .3300803000D+01 .4774300000D+01 .5020000000D+01 .2607000000D+00 .7920000000D-01 -.2280000000D-02 .1965341000D+03 .6616900000D+00 .6465000000D-02 .2208000000D+00 .3141128000D+01 .5943300000D+01 .1536000000D+00 .6190000000D-01 -.3297200000D+01 -.1604000000D-01 .1069789900D+04 .1613300000D+01 .1312200000D-01 .1172200000D+01 .4866113000D+01 .1385000000D+00 .3502000000D+00 .1791500000D+01 +3 38320080712200808212454659.4 -.1090000000D-01 -.8360000000D-02 .1058478200D+04 .2580000000D+01 .1778700000D-01 .1158600000D+01 .8066380000D+00 .2321500000D+01 .5374500000D+01 .1656900000D+01 .8260000000D-01 -.8800000000D-03 .1621989000D+03 .1129900000D+01 .7425000000D-02 .1483000000D+00 .6141950000D+00 .3636700000D+01 .3523000000D+00 .1477300000D+01 -.3713200000D+01 .1488000000D-01 .1070159600D+04 .2620610000D+01 .1790600000D-01 .1149800000D+01 .2373340000D+01 .3965500000D+01 .7824000000D+00 .3205300000D+01 +3 38420080821200809302454699.4 -.9530000000D-01 .7820000000D-02 .1063013100D+04 .1031750000D+01 .3011700000D-01 .1058300000D+01 .4588368000D+01 .6107700000D+01 .2967200000D+01 .2916800000D+01 .9850000000D-01 -.1300000000D-03 .1291465000D+03 .4715800000D+00 .1283800000D-01 .1237000000D+00 .4344289000D+01 .1178600000D+01 .4350500000D+01 .2671000000D+01 -.3671100000D+01 .2845000000D-01 .1070017400D+04 .1017190000D+01 .2974000000D-01 .1015600000D+01 .6156057000D+01 .1456400000D+01 .4593500000D+01 .4437800000D+01 +3 38520080930200811092454739.4 -.1747000000D+00 .2036000000D-01 .1062678800D+04 .1410770000D+01 .2243200000D-01 .8898000000D+00 .2011227000D+01 .4147000000D+00 .2251000000D+00 .4023100000D+01 .3650000000D-01 .3580000000D-02 .1306782000D+03 .5876000000D+00 .1002700000D-01 .1246000000D+00 .1776575000D+01 .1854800000D+01 .1494200000D+01 .3775200000D+01 -.3037900000D+01 .1863000000D-01 .1069588900D+04 .1444990000D+01 .2260500000D-01 .8326000000D+00 .3578859000D+01 .2050200000D+01 .1841500000D+01 .5593400000D+01 +3 38620081109200812192454779.4 .4910000000D-01 .7810000000D-02 .1057202300D+04 .3219640000D+01 .1358800000D-01 .7342000000D+00 .5637288000D+01 .4007800000D+01 .3374000000D+01 .4978100000D+01 .8410000000D-01 .4000000000D-03 .1691735000D+03 .1378340000D+01 .7295000000D-02 .1452000000D+00 .5471870000D+01 .5345300000D+01 .4358800000D+01 .4905800000D+01 -.2024800000D+01 -.5570000000D-02 .1069787400D+04 .3253760000D+01 .1417200000D-01 .7274000000D+00 .9207670000D+00 .5647600000D+01 .5082100000D+01 .1949000000D+00 +3 38720081219200901282454819.4 .3623000000D+00 -.1403000000D-01 .1045552300D+04 .4149330000D+01 .1021200000D-01 .5884000000D+00 .2927289000D+01 .1274700000D+01 .6151400000D+01 .5754600000D+01 .9470000000D-01 -.2160000000D-02 .2292617000D+03 .1777550000D+01 .7416000000D-02 .1410000000D+00 .2824566000D+01 .2476600000D+01 .8247000000D+00 .5655400000D+01 -.1597200000D+01 -.9800000000D-02 .1070189300D+04 .4216190000D+01 .9286000000D-02 .5871000000D+00 .4493286000D+01 .2923500000D+01 .1661700000D+01 .9756000000D+00 +3 38820090128200903092454859.4 .3097000000D+00 -.1995000000D-01 .1029519800D+04 .4339820000D+01 .1012900000D-01 .5616000000D+00 .1938480000D+00 .4801600000D+01 .2591400000D+01 .1436000000D+00 .1401000000D+00 -.7440000000D-02 .2930337000D+03 .1829820000D+01 .7395000000D-02 .1810000000D+00 .1342540000D+00 .5845500000D+01 .3762800000D+01 .6500000000D-01 -.1676000000D+01 -.7730000000D-02 .1070330200D+04 .4504000000D+01 .1024200000D-01 .6110000000D+00 .1760521000D+01 .1836000000D+00 .4193800000D+01 .1762600000D+01 +3 38920090309200904182454899.4 .3350000000D-01 -.4060000000D-02 .1012923500D+04 .3891710000D+01 .1435300000D-01 .6998000000D+00 .3745975000D+01 .2054600000D+01 .5488800000D+01 .1021600000D+01 .2370000000D-01 -.1350000000D-02 .3470583000D+03 .1607750000D+01 .7070000000D-02 .2570000000D+00 .3716764000D+01 .2936700000D+01 .3149000000D+00 .1024000000D+01 -.2370400000D+01 .5500000000D-02 .1070436300D+04 .4046640000D+01 .1504800000D-01 .8075000000D+00 .5313839000D+01 .3733800000D+01 .9415000000D+00 .2609400000D+01 +3 39020090418200905282454939.4 -.2108000000D+00 .1757000000D-01 .9992372000D+03 .2817450000D+01 .2278500000D-01 .8310000000D+00 .1043003000D+01 .5641000000D+01 .2547700000D+01 .2027500000D+01 -.6790000000D-01 .6170000000D-02 .3841892000D+03 .1139170000D+01 .9677000000D-02 .3276000000D+00 .1036265000D+01 .1087000000D+00 .3276800000D+01 .2023800000D+01 -.2801300000D+01 -.1560000000D-02 .1070410000D+04 .2916400000D+01 .2338200000D-01 .9425000000D+00 .2612766000D+01 .1027600000D+01 .4224500000D+01 .3622100000D+01 +3 39120090528200907072454979.4 -.3940000000D-01 .2142000000D-01 .9916649000D+03 .9770700000D+00 .2802100000D-01 .9801000000D+00 .4679023000D+01 .3017600000D+01 .6164800000D+01 .3190000000D+01 -.2550000000D-01 .8300000000D-02 .4026022000D+03 .3526100000D+00 .1192200000D-01 .3982000000D+00 .4688267000D+01 .3835900000D+01 .5180000000D+00 .3206200000D+01 -.2956300000D+01 -.1636000000D-01 .1070372400D+04 .9751700000D+00 .2905400000D-01 .1119500000D+01 .6250940000D+01 .4668800000D+01 .1527200000D+01 .4786900000D+01 +3 39220090707200908162455019.4 .4927000000D+00 .4850000000D-02 .9916705000D+03 .1430240000D+01 .1413400000D-01 .1092700000D+01 .2112776000D+01 .3573300000D+01 .3772500000D+01 .4437900000D+01 .1898000000D+00 .7600000000D-03 .4021248000D+03 .6794500000D+00 .6106000000D-02 .4362000000D+00 .2130353000D+01 .4116700000D+01 .4712900000D+01 .4462500000D+01 -.3008300000D+01 -.2567000000D-01 .1070435500D+04 .1537760000D+01 .1462600000D-01 .1202600000D+01 .3686151000D+01 .5252900000D+01 .5409500000D+01 .6036000000D+01 +3 39320090816200909252455059.4 .1082600000D+01 -.1131000000D-01 .9991020000D+03 .2566980000D+01 .1726800000D-01 .1136300000D+01 .5902922000D+01 .1110900000D+01 .4198400000D+01 .5856100000D+01 .3564000000D+00 -.2780000000D-02 .3845031000D+03 .1118200000D+01 .8081000000D-02 .4107000000D+00 .5919436000D+01 .1841300000D+01 .4788900000D+01 .5870900000D+01 -.3627600000D+01 .3000000000D-02 .1070392000D+04 .2677000000D+01 .1767300000D-01 .1220300000D+01 .1192827000D+01 .2773900000D+01 .5836000000D+01 .1175300000D+01 +3 39420090925200911042455099.4 .1108700000D+01 .4310000000D-02 .1006492000D+04 .1032430000D+01 .2991300000D-01 .1152700000D+01 .3405763000D+01 .4892400000D+01 .1753000000D+01 .8466000000D+00 .3899000000D+00 .1660000000D-02 .3646482000D+03 .4310800000D+00 .1288600000D-01 .4148000000D+00 .3414813000D+01 .5777700000D+01 .2549200000D+01 .8538000000D+00 -.3944600000D+01 .2245000000D-01 .1070271800D+04 .1070290000D+01 .3138800000D-01 .1241800000D+01 .4977701000D+01 .2556000000D+00 .3397100000D+01 .2455000000D+01 +3 39520091104200912142455139.4 .1178500000D+01 .2099000000D-01 .1005861900D+04 .1436970000D+01 .2200100000D-01 .1049900000D+01 .8286470000D+00 .5472400000D+01 .5294100000D+01 .2038600000D+01 .4206000000D+00 .8900000000D-02 .3655297000D+03 .6262900000D+00 .9451000000D-02 .3972000000D+00 .8341390000D+00 .6233300000D+01 .5957700000D+01 .2036100000D+01 -.3634000000D+01 .2497000000D-01 .1070121300D+04 .1486820000D+01 .2386700000D-01 .1179200000D+01 .2399936000D+01 .8636000000D+00 .6683000000D+00 .3645200000D+01 +3 39620091214201001232455179.4 .1442900000D+01 .2056000000D-01 .9971942000D+03 .3220950000D+01 .1248300000D-01 .9745000000D+00 .4449565000D+01 .2798000000D+01 .2204000000D+01 .3129200000D+01 .5463000000D+00 .9570000000D-02 .3884837000D+03 .1387040000D+01 .6946000000D-02 .3964000000D+00 .4460994000D+01 .3495300000D+01 .2492800000D+01 .3159000000D+01 -.2654200000D+01 .9970000000D-02 .1070246600D+04 .3375150000D+01 .1403100000D-01 .1070000000D+01 .6021699000D+01 .4459600000D+01 .3890200000D+01 .4760600000D+01 +3 39720100123201003042455219.4 .1992700000D+01 -.5750000000D-02 .9847753000D+03 .4057810000D+01 .8370000000D-02 .7711000000D+00 .1732049000D+01 .8650000000D-01 .5070800000D+01 .4165300000D+01 .8365000000D+00 -.1300000000D-02 .4192392000D+03 .1749060000D+01 .7233000000D-02 .3386000000D+00 .1756556000D+01 .6426000000D+00 .5349600000D+01 .4199100000D+01 -.1643100000D+01 .6900000000D-03 .1070305700D+04 .4353330000D+01 .9555000000D-02 .8613000000D+00 .3306833000D+01 .1737000000D+01 .3676000000D+00 .5775800000D+01 +3 39820100304201004132455259.4 .2070900000D+01 -.2040000000D-01 .9737924000D+03 .4253210000D+01 .8383000000D-02 .6314000000D+00 .5275067000D+01 .3641500000D+01 .1339200000D+01 .5148800000D+01 .9269000000D+00 -.8810000000D-02 .4449489000D+03 .1823540000D+01 .6677000000D-02 .2953000000D+00 .5316400000D+01 .4022400000D+01 .1954200000D+01 .5187700000D+01 -.1078600000D+01 -.5000000000D-03 .1070043800D+04 .4587140000D+01 .1104000000D-01 .6752000000D+00 .5699630000D+00 .5282600000D+01 .3087300000D+01 .4015000000D+00 +3 39920100413201005232455299.4 .1833000000D+01 -.1988000000D-01 .9672438000D+03 .3851130000D+01 .1331400000D-01 .5963000000D+00 .2537955000D+01 .9299000000D+00 .4379200000D+01 .5928100000D+01 .8499000000D+00 -.9640000000D-02 .4596274000D+03 .1631910000D+01 .7181000000D-02 .2876000000D+00 .2597757000D+01 .1141800000D+01 .4811200000D+01 .5988200000D+01 -.1157400000D+01 .8760000000D-02 .1070260100D+04 .4130570000D+01 .1415400000D-01 .5927000000D+00 .4119622000D+01 .2535500000D+01 .6056200000D+01 .1228600000D+01 +3 40020100523201007022455339.4 .1221400000D+01 .4520000000D-02 .9653018000D+03 .2864810000D+01 .2119500000D-01 .5793000000D+00 .6111791000D+01 .4530900000D+01 .1452200000D+01 .3937000000D+00 .5293000000D+00 .2470000000D-02 .4637866000D+03 .1166920000D+01 .9661000000D-02 .2778000000D+00 .6189962000D+01 .4603200000D+01 .1571600000D+01 .4840000000D+00 -.1421000000D+01 .4700000000D-02 .1070059300D+04 .3080210000D+01 .2301500000D-01 .5976000000D+00 .1414079000D+01 .6105300000D+01 .3022900000D+01 .1935200000D+01 +3 40120100702201008112455379.4 .9444000000D+00 .1942000000D-01 .9658176000D+03 .1138130000D+01 .2742300000D-01 .7153000000D+00 .3457243000D+01 .1908900000D+01 .5047000000D+01 .1347800000D+01 .3871000000D+00 .8490000000D-02 .4627469000D+03 .3850000000D+00 .1178500000D-01 .3440000000D+00 .3551352000D+01 .1910400000D+01 .5052700000D+01 .1440500000D+01 -.1588400000D+01 -.1223000000D-01 .1069697700D+04 .1215750000D+01 .3039600000D-01 .7435000000D+00 .5045746000D+01 .3451100000D+01 .3105000000D+00 .2853600000D+01 +3 40220100811201009202455419.4 .1195200000D+01 .1284000000D-01 .9660997000D+03 .1256180000D+01 .1557900000D-01 .8639000000D+00 .8836020000D+00 .2465200000D+01 .2581300000D+01 .2438900000D+01 .4968000000D+00 .4870000000D-02 .4629613000D+03 .6483200000D+00 .5877000000D-02 .4141000000D+00 .9867980000D+00 .2465800000D+01 .2791500000D+01 .2535400000D+01 -.1750400000D+01 -.2763000000D-01 .1069304100D+04 .1376350000D+01 .1741400000D-01 .9328000000D+00 .2473935000D+01 .4020100000D+01 .4197500000D+01 .4020600000D+01 +3 40320100920201010302455459.4 .1915800000D+01 -.1251000000D-01 .9653353000D+03 .2537230000D+01 .1507000000D-01 .9208000000D+00 .4672021000D+01 .6258000000D+01 .3049300000D+01 .3812500000D+01 .8096000000D+00 -.5880000000D-02 .4644947000D+03 .1114390000D+01 .7785000000D-02 .4450000000D+00 .4772997000D+01 .7970000000D-01 .3086300000D+01 .3900200000D+01 -.2300700000D+01 -.1495000000D-01 .1069545300D+04 .2778340000D+01 .1744500000D-01 .1026800000D+01 .6261714000D+01 .1555800000D+01 .4596600000D+01 .5344700000D+01 +3 40420101030201012092455499.4 .2060100000D+01 -.5000000000D-04 .9655977000D+03 .1122500000D+01 .2928400000D-01 .1079700000D+01 .2180285000D+01 .3744100000D+01 .6026000000D+00 .5061700000D+01 .8692000000D+00 .6500000000D-03 .4633632000D+03 .4079100000D+00 .1293700000D-01 .5191000000D+00 .2270772000D+01 .3948900000D+01 .7710000000D+00 .5147500000D+01 -.3053600000D+01 .1322000000D-01 .1069739900D+04 .1210180000D+01 .3253100000D-01 .1185100000D+01 .3767803000D+01 .5343300000D+01 .2203700000D+01 .3394000000D+00 +3 40520101209201101182455539.4 .2174100000D+01 .1968000000D-01 .9654039000D+03 .1299220000D+01 .2234100000D-01 .1121100000D+01 .5890550000D+01 .4343100000D+01 .4172400000D+01 .6263900000D+01 .9391000000D+00 .9940000000D-02 .4629219000D+03 .6635200000D+00 .9503000000D-02 .5435000000D+00 .5973560000D+01 .4503000000D+01 .4167700000D+01 .5960000000D-01 -.3102300000D+01 .2622000000D-01 .1069800200D+04 .1436690000D+01 .2460200000D-01 .1245700000D+01 .1193642000D+01 .5927600000D+01 .5769400000D+01 .1508800000D+01 +4 40619990101199902102451179.3 .9080000000D-01 .5243000000D-01 .1703006300D+04 .4558900000D+01 .2844600000D-01 .6288500000D+01 .2122546000D+01 .5476000000D+00 .2132000000D+00 .4171100000D+01 -.6515000000D+00 .2359000000D-01 .8039969000D+03 .2113590000D+01 .1364400000D-01 .2971500000D+01 .2200518000D+01 .7441000000D+00 .2220000000D-01 .4248100000D+01 -.2096060000D+02 .2710000000D-02 .1881164900D+04 .5105590000D+01 .2922700000D-01 .6928000000D+01 .3707964000D+01 .2159600000D+01 .1688400000D+01 .5772400000D+01 +4 40719990210199903222451219.3 .2354500000D+01 .7698000000D-01 .1701982900D+04 .6710140000D+01 .1427500000D-01 .6308400000D+01 .4484680000D+01 .2919400000D+01 .1922900000D+01 .2726700000D+01 .3445000000D+00 .3503000000D-01 .8075457000D+03 .3010560000D+01 .1140300000D-01 .2972600000D+01 .4569049000D+01 .2976500000D+01 .1485900000D+01 .2816600000D+01 -.2080380000D+02 .1605000000D-01 .1881286100D+04 .7249780000D+01 .1974500000D-01 .6982100000D+01 .6070563000D+01 .4506600000D+01 .3471700000D+01 .4325300000D+01 +4 40819990322199905012451259.3 .5676500000D+01 .6639000000D-01 .1707015000D+04 .7409480000D+01 .1417100000D-01 .6318600000D+01 .5302240000D+00 .5282700000D+01 .3408200000D+01 .1257700000D+01 .1804000000D+01 .2682000000D-01 .7957352000D+03 .3222500000D+01 .1310600000D-01 .2879300000D+01 .6268870000D+00 .5175400000D+01 .3250200000D+01 .1360700000D+01 -.2012290000D+02 .2784000000D-01 .1881329300D+04 .8112220000D+01 .1670700000D-01 .6918200000D+01 .2118415000D+01 .5424000000D+00 .4889200000D+01 .2857800000D+01 +4 40919990501199906102451299.3 .8776000000D+01 .5684000000D-01 .1722401400D+04 .7172070000D+01 .1841600000D-01 .6391400000D+01 .2854821000D+01 .1332800000D+01 .4986600000D+01 .6091000000D+01 .3070100000D+01 .1460000000D-01 .7662481000D+03 .3016500000D+01 .1242800000D-01 .2757400000D+01 .2967726000D+01 .1038000000D+01 .4932900000D+01 .6211300000D+01 -.1922360000D+02 .5210000000D-01 .1881190300D+04 .7799720000D+01 .2260000000D-01 .6985500000D+01 .4444414000D+01 .2864500000D+01 .3038000000D+00 .1395000000D+01 +4 41019990610199907202451339.3 .1079220000D+02 .6280000000D-01 .1740891900D+04 .5957410000D+01 .3067400000D-01 .6451800000D+01 .5198147000D+01 .3695000000D+01 .6912000000D+00 .4659300000D+01 .3598000000D+01 .1542000000D-01 .7230099000D+03 .2401670000D+01 .1461900000D-01 .2572800000D+01 .5330407000D+01 .3227500000D+01 .3820000000D+00 .4798300000D+01 -.1753600000D+02 .4124000000D-01 .1880730500D+04 .6395700000D+01 .3416600000D-01 .6997700000D+01 .5050650000D+00 .5202400000D+01 .2223900000D+01 .6246800000D+01 +4 41119990720199908292451379.3 .1279960000D+02 .1573000000D-01 .1757265100D+04 .3481010000D+01 .4742200000D-01 .6486400000D+01 .1301246000D+01 .6091900000D+01 .2953500000D+01 .3289500000D+01 .3960700000D+01 .4710000000D-02 .6827834000D+03 .1294550000D+01 .1919000000D-01 .2472300000D+01 .1452861000D+01 .5468300000D+01 .2392400000D+01 .3449200000D+01 -.1566530000D+02 -.2400000000D-02 .1880343000D+04 .3656730000D+01 .5010900000D-01 .6922100000D+01 .2891700000D+01 .1303100000D+01 .4455800000D+01 .4876600000D+01 +4 41219990829199910082451419.3 .1354000000D+02 -.2993000000D-01 .1763321800D+04 .5652800000D+00 .4318800000D-01 .6445500000D+01 .3758693000D+01 .5401400000D+01 .5459100000D+01 .1994100000D+01 .4062800000D+01 -.3940000000D-02 .6677897000D+03 .3341500000D+00 .1689500000D-01 .2472300000D+01 .3923975000D+01 .4975700000D+01 .4906500000D+01 .2158100000D+01 -.1492770000D+02 -.4301000000D-01 .1879139100D+04 .6848400000D+00 .4568600000D-01 .6934400000D+01 .5349791000D+01 .5265000000D+00 .7067000000D+00 .3592200000D+01 +4 41319991008199911172451459.3 .1278170000D+02 -.5118000000D-01 .1755597100D+04 .4241890000D+01 .7173000000D-02 .6464800000D+01 .1964800000D-01 .1703700000D+01 .4578300000D+01 .8049000000D+00 .4116400000D+01 -.1940000000D-01 .6894583000D+03 .1737000000D+01 .4530000000D-02 .2614700000D+01 .1826570000D+00 .1178800000D+01 .3861100000D+01 .9556000000D+00 -.1696890000D+02 .1079000000D-01 .1879365200D+04 .4613380000D+01 .1053200000D-01 .6939500000D+01 .1611630000D+01 .3173600000D+01 .5697500000D+01 .2365100000D+01 +4 41419991117199912272451499.3 .1067350000D+02 -.6480000000D-02 .1741268000D+04 .3351180000D+01 .4907300000D-01 .6441700000D+01 .2602467000D+01 .4267500000D+01 .1121800000D+01 .5830700000D+01 .3408400000D+01 .1540000000D-02 .7224112000D+03 .1252780000D+01 .2083300000D-01 .2705400000D+01 .2750688000D+01 .3802500000D+01 .7164000000D+00 .5972000000D+01 -.1751530000D+02 -.6510000000D-02 .1879954700D+04 .3615240000D+01 .5454500000D-01 .6909000000D+01 .4194677000D+01 .5771400000D+01 .2625000000D+01 .1136700000D+01 +4 41519991227200002052451539.3 .9865200000D+01 .4248000000D-01 .1736605000D+04 .8316300000D+00 .4588600000D-01 .6392800000D+01 .5127949000D+01 .3663900000D+01 .3586000000D+01 .4519300000D+01 .3187000000D+01 .1774000000D-01 .7325036000D+03 .5387200000D+00 .1855000000D-01 .2667700000D+01 .5263159000D+01 .3454100000D+01 .3093000000D+01 .4654300000D+01 -.1780840000D+02 .1317000000D-01 .1880214800D+04 .9772300000D+00 .4891400000D-01 .6950200000D+01 .4358370000D+00 .5201900000D+01 .5086100000D+01 .6104300000D+01 +4 41620000205200003162451579.3 .1128090000D+02 .4378000000D-01 .1744893800D+04 .4476830000D+01 .2832100000D-01 .6434500000D+01 .1277964000D+01 .6083700000D+01 .5766900000D+01 .3118400000D+01 .3798200000D+01 .6270000000D-02 .7119149000D+03 .2015830000D+01 .1253500000D-01 .2522100000D+01 .1410991000D+01 .5667800000D+01 .4821100000D+01 .3261600000D+01 -.1693140000D+02 .3105000000D-01 .1879900900D+04 .4871330000D+01 .3097200000D-01 .6826700000D+01 .2867564000D+01 .1325500000D+01 .8689000000D+00 .4701600000D+01 +4 41720000316200004252451619.3 .1317870000D+02 .5724000000D-01 .1764342000D+04 .6673720000D+01 .1784700000D-01 .6547300000D+01 .3646025000D+01 .2181000000D+01 .1152700000D+01 .1677500000D+01 .4244100000D+01 .1660000000D-02 .6614488000D+03 .2802590000D+01 .1340200000D-01 .2310900000D+01 .3787840000D+01 .1588900000D+01 .1259000000D+00 .1832200000D+01 -.1551940000D+02 .6234000000D-01 .1880883800D+04 .7096230000D+01 .1783700000D-01 .6841200000D+01 .5233903000D+01 .3660800000D+01 .2697000000D+01 .3268700000D+01 +4 41820000425200006042451659.3 .1568760000D+02 .4548000000D-01 .1792126100D+04 .7484450000D+01 .1569000000D-01 .6626200000D+01 .5981684000D+01 .4513300000D+01 .2774700000D+01 .2188000000D+00 .4357900000D+01 -.4350000000D-02 .5830122000D+03 .3083940000D+01 .1330700000D-01 .1960900000D+01 .6144293000D+01 .3717600000D+01 .1917700000D+01 .4065000000D+00 -.1293750000D+02 .6584000000D-01 .1880088300D+04 .7997660000D+01 .1720300000D-01 .6805800000D+01 .1285036000D+01 .5998300000D+01 .4076700000D+01 .1799700000D+01 +4 41920000604200007142451699.3 .1796080000D+02 .2338000000D-01 .1822295500D+04 .7412510000D+01 .2046900000D-01 .6705600000D+01 .2029623000D+01 .5421000000D+00 .4307000000D+01 .5048900000D+01 .4122800000D+01 -.1672000000D-01 .4844286000D+03 .3030080000D+01 .1332400000D-01 .1609900000D+01 .2227136000D+01 .5844800000D+01 .3655700000D+01 .5277800000D+01 -.1025160000D+02 .7522000000D-01 .1880582300D+04 .7673690000D+01 .2053400000D-01 .6876000000D+01 .3612856000D+01 .2033900000D+01 .5809100000D+01 .3532000000D+00 +4 42020000714200008232451739.3 .1887530000D+02 .3173000000D-01 .1846181700D+04 .6233970000D+01 .3200800000D-01 .6776400000D+01 .4376712000D+01 .2872000000D+01 .6194400000D+01 .3616500000D+01 .3512300000D+01 -.2145000000D-01 .3818682000D+03 .2551510000D+01 .1371100000D-01 .1238000000D+01 .4628921000D+01 .1708700000D+01 .5237200000D+01 .3903900000D+01 -.7739800000D+01 .7274000000D-01 .1880649200D+04 .6429430000D+01 .3263100000D-01 .6881800000D+01 .5957442000D+01 .4370300000D+01 .1395900000D+01 .5205900000D+01 +4 42120000823200010022451779.3 .1955610000D+02 .1714000000D-01 .1860999200D+04 .3694590000D+01 .4849500000D-01 .6763900000D+01 .4804090000D+00 .5246200000D+01 .2117900000D+01 .2249400000D+01 .2601700000D+01 -.1760000000D-02 .3012708000D+03 .1553540000D+01 .2049300000D-01 .1031200000D+01 .8044740000D+00 .3936100000D+01 .8286000000D+00 .2592300000D+01 -.4966800000D+01 .8370000000D-02 .1880382600D+04 .3812540000D+01 .4997300000D-01 .6855600000D+01 .2059123000D+01 .4705000000D+00 .3617900000D+01 .3832400000D+01 +4 42220001002200011112451819.3 .1982030000D+02 .3200000000D-03 .1864959500D+04 .4330000000D+00 .4706400000D-01 .6812100000D+01 .2936341000D+01 .4403300000D+01 .4629300000D+01 .9565000000D+00 .2325600000D+01 .1404000000D-01 .2715148000D+03 .2145700000D+00 .1857400000D-01 .1054900000D+01 .3303983000D+01 .3270100000D+01 .3357800000D+01 .1323700000D+01 -.3916900000D+01 -.4759000000D-01 .1880091900D+04 .5291200000D+00 .4650600000D-01 .6793800000D+01 .4513740000D+01 .6052600000D+01 .6122600000D+01 .2542000000D+01 +4 42320001111200012212451859.3 .2049070000D+02 -.5688000000D-01 .1859459000D+04 .4364640000D+01 .6866000000D-02 .6668400000D+01 .5477841000D+01 .8343000000D+00 .3093500000D+01 .6032500000D+01 .3092700000D+01 .2800000000D-03 .3082762000D+03 .1858900000D+01 .4735000000D-02 .1263600000D+01 .5801109000D+01 .5873300000D+01 .2139100000D+01 .6280700000D+01 -.5752900000D+01 -.2792000000D-01 .1880630200D+04 .4616400000D+01 .8854000000D-02 .6962300000D+01 .7732530000D+00 .2356800000D+01 .5029800000D+01 .1335600000D+01 +4 42420001221200101302451899.3 .1882630000D+02 -.1450000000D-02 .1847076100D+04 .3599040000D+01 .5056700000D-01 .6720700000D+01 .1776797000D+01 .3436900000D+01 .2805000000D+00 .4800200000D+01 .3383500000D+01 .7580000000D-02 .3752095000D+03 .1456100000D+01 .2108700000D-01 .1423400000D+01 .2034434000D+01 .2218500000D+01 .5441500000D+01 .5038600000D+01 -.7646300000D+01 -.7550000000D-02 .1880360800D+04 .3721770000D+01 .5302400000D-01 .6886700000D+01 .3357468000D+01 .4942900000D+01 .1801000000D+01 .8820000000D-01 +4 42520010130200103112451939.3 .1826940000D+02 .3022000000D-01 .1841539500D+04 .7156400000D+00 .4688700000D-01 .6708900000D+01 .4304553000D+01 .2871600000D+01 .2763300000D+01 .3482900000D+01 .3526200000D+01 -.1650000000D-02 .4000175000D+03 .3800100000D+00 .1953200000D-01 .1402300000D+01 .4532815000D+01 .2224800000D+01 .1552500000D+01 .3706500000D+01 -.8378400000D+01 .3603000000D-01 .1880491000D+04 .7657600000D+00 .4839600000D-01 .6875800000D+01 .5885319000D+01 .4364900000D+01 .4262400000D+01 .5069100000D+01 +4 42620010311200104202451979.3 .1903230000D+02 .2076000000D-01 .1849431700D+04 .4487270000D+01 .2861600000D-01 .6697600000D+01 .4597190000D+00 .5271300000D+01 .4842000000D+01 .2094600000D+01 .3265100000D+01 -.1583000000D-01 .3594630000D+03 .1881190000D+01 .1485400000D-01 .1118000000D+01 .6996100000D+00 .4173700000D+01 .3392900000D+01 .2363500000D+01 -.6780500000D+01 .4405000000D-01 .1880421400D+04 .4580320000D+01 .3061800000D-01 .6841800000D+01 .2038799000D+01 .4865000000D+00 .1242000000D+00 .3668600000D+01 +4 42720010420200105302452019.3 .1998730000D+02 .1026000000D-01 .1864865800D+04 .6623030000D+01 .2068900000D-01 .6809700000D+01 .2834314000D+01 .1335600000D+01 .2992000000D+00 .6717000000D+00 .2711600000D+01 -.3671000000D-01 .2681317000D+03 .2856250000D+01 .1296500000D-01 .7614000000D+00 .3140454000D+01 .6740000000D-01 .5024200000D+01 .1068200000D+01 -.4620200000D+01 .7658000000D-01 .1881120800D+04 .6865790000D+01 .1672500000D-01 .6810100000D+01 .4411283000D+01 .2840900000D+01 .1846900000D+01 .2235400000D+01 +4 42820010530200107092452059.3 .2055330000D+02 .9000000000D-03 .1878385800D+04 .7544990000D+01 .1698800000D-01 .6798500000D+01 .5177460000D+01 .3633100000D+01 .1843000000D+01 .5499600000D+01 .1342700000D+01 -.3446000000D-01 .1489804000D+03 .3280370000D+01 .1335800000D-01 .3328000000D+00 .5714981000D+01 .2233900000D+01 .4495000000D+00 .2008000000D+00 -.1337100000D+01 .7840000000D-01 .1880423200D+04 .7700400000D+01 .1678400000D-01 .6833600000D+01 .4678760000D+00 .5187600000D+01 .3373100000D+01 .7748000000D+00 +4 42920010709200108182452099.3 .2078390000D+02 -.2287000000D-01 .1882665700D+04 .7424490000D+01 .2244100000D-01 .6845200000D+01 .1230438000D+01 .5935100000D+01 .3493100000D+01 .4052300000D+01 -.2387000000D+00 -.2438000000D-01 .7133650000D+02 .3212570000D+01 .1210200000D-01 .3891000000D+00 .2959724000D+01 .4380500000D+01 .2136100000D+01 .1431000000D+00 .1999300000D+01 .7187000000D-01 .1881979200D+04 .7496070000D+01 .1933200000D-01 .6824200000D+01 .2800769000D+01 .1216500000D+01 .4944100000D+01 .5616900000D+01 +4 43020010818200109272452139.3 .2007450000D+02 -.2012000000D-01 .1877942000D+04 .6200780000D+01 .3221500000D-01 .6846500000D+01 .3580531000D+01 .1958300000D+01 .5293400000D+01 .2620300000D+01 -.1278900000D+01 -.2565000000D-01 .1524043000D+03 .2700620000D+01 .1473100000D-01 .7427000000D+00 .6282806000D+01 .2898000000D+00 .3703200000D+01 .5430200000D+01 .4442000000D+01 .7431000000D-01 .1881871800D+04 .6316090000D+01 .3256100000D-01 .6820200000D+01 .5148957000D+01 .3561300000D+01 .5670000000D+00 .4189000000D+01 +4 43120010927200111062452179.3 .1885310000D+02 .1053000000D-01 .1869151700D+04 .3641480000D+01 .4903500000D-01 .6795900000D+01 .5969302000D+01 .4320800000D+01 .1187400000D+01 .1251700000D+01 -.2154900000D+01 -.8950000000D-02 .2361017000D+03 .1584790000D+01 .2158000000D-01 .9246000000D+00 .2571243000D+01 .2597300000D+01 .5723800000D+01 .4140100000D+01 .6990100000D+01 .1569000000D-01 .1881615100D+04 .3711230000D+01 .5033200000D-01 .6795400000D+01 .1253113000D+01 .5955000000D+01 .2820400000D+01 .2822700000D+01 +4 43220011106200112162452219.3 .1847490000D+02 .3052000000D-01 .1863938200D+04 .6265700000D+00 .4501500000D-01 .6792000000D+01 .2143436000D+01 .3494100000D+01 .3737900000D+01 .6255300000D+01 -.2389500000D+01 .5260000000D-02 .2651439000D+03 .2477400000D+00 .2041900000D-01 .9386000000D+00 .5070406000D+01 .1509200000D+01 .1938800000D+01 .2871600000D+01 .7913600000D+01 -.3604000000D-01 .1882040600D+04 .5881500000D+00 .4663000000D-01 .6789600000D+01 .3710361000D+01 .5305800000D+01 .5302400000D+01 .1523400000D+01 +4 43320011216200201252452259.3 .2019140000D+02 -.2692000000D-01 .1869938000D+04 .4534960000D+01 .1027500000D-01 .6870900000D+01 .4686785000D+01 .6203200000D+01 .2391600000D+01 .5030500000D+01 -.2216000000D+01 .2486000000D-01 .2245403000D+03 .1939070000D+01 .3930000000D-02 .6363000000D+00 .1296437000D+01 .4442900000D+01 .3009000000D+00 .1517400000D+01 .6953400000D+01 -.5967000000D-01 .1882123600D+04 .4532390000D+01 .7376000000D-02 .6801500000D+01 .6254722000D+01 .1557400000D+01 .4252600000D+01 .3354000000D+00 +4 43420020125200203062452299.3 .2008640000D+02 .4080000000D-02 .1877318200D+04 .3599620000D+01 .5114600000D-01 .6819100000D+01 .9858470000D+00 .2532100000D+01 .5662100000D+01 .3796500000D+01 -.1229000000D+01 .4690000000D-02 .1518500000D+03 .1613750000D+01 .2216100000D-01 .4736000000D+00 .3753016000D+01 .8347000000D+00 .3994000000D+01 .2510000000D+00 .4358800000D+01 -.3660000000D-02 .1881718400D+04 .3625900000D+01 .5105800000D-01 .6893700000D+01 .2554594000D+01 .4137500000D+01 .9925000000D+00 .5370500000D+01 +4 43520020306200204152452339.3 .2008220000D+02 .3280000000D-02 .1879103300D+04 .7094900000D+00 .4573800000D-01 .6871900000D+01 .3512792000D+01 .1995200000D+01 .1849600000D+01 .2485700000D+01 -.9139000000D+00 -.1618000000D-01 .1233211000D+03 .2767400000D+00 .2025900000D-01 .4970000000D+00 .6199541000D+01 .5537000000D+00 .1693000000D+00 .5220700000D+01 .3495700000D+01 .4582000000D-01 .1881770500D+04 .7360400000D+00 .4600500000D-01 .6838900000D+01 .5082103000D+01 .3554300000D+01 .3463500000D+01 .4059400000D+01 +4 43620020415200205252452379.3 .1970750000D+02 -.7830000000D-02 .1875703800D+04 .4353110000D+01 .2896700000D-01 .6797700000D+01 .5952904000D+01 .4370200000D+01 .3923200000D+01 .1094000000D+01 -.1599700000D+01 -.1662000000D-01 .1636503000D+03 .1909740000D+01 .1288300000D-01 .7449000000D+00 .2495581000D+01 .2707600000D+01 .2015700000D+01 .3990200000D+01 .5166200000D+01 .4460000000D-01 .1881692600D+04 .4400530000D+01 .2841700000D-01 .6830000000D+01 .1238336000D+01 .5962600000D+01 .5644600000D+01 .2672200000D+01 +4 43720020525200207042452419.3 .1928250000D+02 -.4200000000D-01 .1865873500D+04 .6445250000D+01 .1790600000D-01 .6717300000D+01 .2048008000D+01 .4181000000D+00 .5729300000D+01 .5960900000D+01 -.2393000000D+01 -.2451000000D-01 .2562529000D+03 .2802920000D+01 .1211000000D-01 .1118900000D+01 .5012468000D+01 .4948900000D+01 .3557300000D+01 .2690600000D+01 .7432600000D+01 .6195000000D-01 .1881865700D+04 .6582850000D+01 .1720400000D-01 .6870700000D+01 .3615856000D+01 .2053600000D+01 .1061700000D+01 .1241000000D+01 +4 43820020704200208132452459.3 .1773840000D+02 -.4946000000D-01 .1846034400D+04 .7353340000D+01 .1584000000D-01 .6628500000D+01 .4394681000D+01 .2740300000D+01 .8303000000D+00 .4502500000D+01 -.3308700000D+01 -.1937000000D-01 .3707417000D+03 .3106470000D+01 .1169900000D-01 .1548000000D+01 .1152631000D+01 .8364000000D+00 .5260100000D+01 .1285700000D+01 .1020780000D+02 .6542000000D-01 .1881839100D+04 .7396390000D+01 .1472000000D-01 .6893500000D+01 .5961299000D+01 .4394200000D+01 .2669100000D+01 .6073700000D+01 +4 43920020813200209222452499.3 .1582000000D+02 -.5536000000D-01 .1820474200D+04 .7060430000D+01 .1947700000D-01 .6557100000D+01 .4492330000D+00 .5060100000D+01 .2548900000D+01 .3063400000D+01 -.4104900000D+01 -.1180000000D-02 .4805905000D+03 .2981450000D+01 .1220100000D-01 .1909400000D+01 .3534376000D+01 .3005100000D+01 .6546000000D+00 .6165900000D+01 .1301550000D+02 .4769000000D-01 .1883031200D+04 .7324940000D+01 .2015900000D-01 .6892400000D+01 .2016768000D+01 .4336000000D+00 .4104200000D+01 .4628400000D+01 +4 44020020922200211012452539.3 .1391760000D+02 -.5273000000D-01 .1795410700D+04 .5870920000D+01 .3212400000D-01 .6536300000D+01 .2801427000D+01 .1110500000D+01 .4379800000D+01 .1637200000D+01 -.4332900000D+01 .5390000000D-02 .5685425000D+03 .2399750000D+01 .1404700000D-01 .2205200000D+01 .5914142000D+01 .5198800000D+01 .2281100000D+01 .4762200000D+01 .1468660000D+02 .4958000000D-01 .1882724900D+04 .6085360000D+01 .3374900000D-01 .6890200000D+01 .4369718000D+01 .2784700000D+01 .6060100000D+01 .3199900000D+01 +4 44120021101200212112452579.3 .1169200000D+02 .1890000000D-02 .1776654900D+04 .3290280000D+01 .4856300000D-01 .6484100000D+01 .5193306000D+01 .3508100000D+01 .3698000000D+00 .2768000000D+00 -.4057600000D+01 -.5980000000D-02 .6233822000D+03 .1286980000D+01 .2023400000D-01 .2327900000D+01 .2041521000D+01 .1242500000D+01 .4320300000D+01 .3410300000D+01 .1615650000D+02 .1634000000D-01 .1882643600D+04 .3363470000D+01 .5022200000D-01 .6858000000D+01 .4796010000D+00 .5180200000D+01 .2044600000D+01 .1837400000D+01 +4 44220021211200301202452619.3 .1103290000D+02 .4428000000D-01 .1771002800D+04 .9476900000D+00 .4003300000D-01 .6420000000D+01 .1372773000D+01 .2833800000D+01 .2892900000D+01 .5275100000D+01 -.3955100000D+01 -.1395000000D-01 .6383341000D+03 .5082100000D+00 .1741100000D-01 .2286800000D+01 .4515162000D+01 .1755000000D+00 .6986000000D+00 .2140400000D+01 .1661190000D+02 -.1461000000D-01 .1882276100D+04 .9038200000D+00 .4469900000D-01 .6933100000D+01 .2944384000D+01 .4462900000D+01 .4573800000D+01 .5507000000D+00 +4 44320030120200303012452659.3 .1285300000D+02 .1750000000D-01 .1781387600D+04 .4446880000D+01 .1168800000D-01 .6596700000D+01 .3921916000D+01 .5411600000D+01 .2013500000D+01 .4075300000D+01 -.4617800000D+01 .1447000000D-01 .6112421000D+03 .1953920000D+01 .7433000000D-02 .2165500000D+01 .7831860000D+00 .3083100000D+01 .5516500000D+01 .9200000000D+00 .1669510000D+02 -.6799000000D-01 .1882213800D+04 .4589140000D+01 .1149300000D-01 .6847500000D+01 .5493278000D+01 .7788000000D+00 .3492800000D+01 .5627500000D+01 +4 44420030301200304102452699.3 .1431480000D+02 .3450000000D-02 .1796621400D+04 .3276080000D+01 .4868500000D-01 .6620900000D+01 .2203770000D+00 .1698100000D+01 .4837000000D+01 .2817700000D+01 -.4343400000D+01 -.5000000000D-04 .5625259000D+03 .1410870000D+01 .2106200000D-01 .2011900000D+01 .3358941000D+01 .5824800000D+01 .2638600000D+01 .5953000000D+01 .1440490000D+02 -.1230000000D-02 .1882554100D+04 .3359580000D+01 .4973400000D-01 .6903100000D+01 .1790975000D+01 .3371100000D+01 .2226000000D+00 .4395000000D+01 +4 44520030410200305202452739.3 .1471750000D+02 -.2325000000D-01 .1802372800D+04 .8090900000D+00 .4240300000D-01 .6623400000D+01 .2743665000D+01 .1112300000D+01 .1022000000D+01 .1509100000D+01 -.4270900000D+01 -.4960000000D-02 .5437899000D+03 .3552600000D+00 .1777400000D-01 .2053300000D+01 .5876930000D+01 .5172200000D+01 .5080300000D+01 .4643000000D+01 .1370030000D+02 .3971000000D-01 .1882222100D+04 .8660300000D+00 .4353300000D-01 .6908700000D+01 .4313961000D+01 .2811000000D+01 .2678300000D+01 .3073900000D+01 +4 44620030520200306292452779.3 .1342520000D+02 -.2657000000D-01 .1792475500D+04 .4174530000D+01 .2624800000D-01 .6560500000D+01 .5182373000D+01 .3527000000D+01 .3187200000D+01 .1211000000D+00 -.4326700000D+01 -.1120000000D-02 .5745840000D+03 .1784150000D+01 .1223100000D-01 .2230100000D+01 .2035629000D+01 .1320100000D+01 .6111000000D+00 .3250200000D+01 .1490310000D+02 .3497000000D-01 .1882289700D+04 .4359770000D+01 .2658000000D-01 .6856800000D+01 .4696060000D+00 .5196300000D+01 .4846600000D+01 .1687200000D+01 +4 44720030629200308082452819.3 .1190060000D+02 -.6154000000D-01 .1772736000D+04 .6130250000D+01 .1419500000D-01 .6433300000D+01 .1277866000D+01 .5893100000D+01 .4983800000D+01 .4973800000D+01 -.4358300000D+01 .1194000000D-01 .6344612000D+03 .2586590000D+01 .1024000000D-01 .2423200000D+01 .4425413000D+01 .3555200000D+01 .2254900000D+01 .1840900000D+01 .1669030000D+02 .3025000000D-01 .1882455000D+04 .6381060000D+01 .1729300000D-01 .6895700000D+01 .2849269000D+01 .1286500000D+01 .3566000000D+00 .2683000000D+00 +4 44820030808200309172452859.3 .9427000000D+01 -.7238000000D-01 .1748218700D+04 .6906560000D+01 .1318200000D-01 .6383700000D+01 .3625150000D+01 .1972400000D+01 .5430000000D-01 .3517300000D+01 -.3881900000D+01 .1747000000D-01 .6975041000D+03 .2929510000D+01 .1063900000D-01 .2663400000D+01 .5036030000D+00 .5759300000D+01 .3867900000D+01 .3991000000D+00 .1820480000D+02 .3408000000D-01 .1882576400D+04 .7242890000D+01 .1271400000D-01 .6907100000D+01 .5198499000D+01 .3622700000D+01 .1829900000D+01 .5102500000D+01 +4 44920030917200310272452899.3 .6586400000D+01 -.6387000000D-01 .1728049700D+04 .6617560000D+01 .1746700000D-01 .6305400000D+01 .5964082000D+01 .4312100000D+01 .1617700000D+01 .2073000000D+01 -.3126000000D+01 .2053000000D-01 .7489819000D+03 .2777070000D+01 .1023400000D-01 .2802000000D+01 .2858059000D+01 .1663400000D+01 .5563800000D+01 .5256900000D+01 .1964290000D+02 .1593000000D-01 .1882380000D+04 .7139870000D+01 .2160600000D-01 .6913600000D+01 .1257794000D+01 .5966300000D+01 .3346500000D+01 .3664300000D+01 +4 45020031027200312062452939.3 .4370200000D+01 -.5975000000D-01 .1713833300D+04 .5419380000D+01 .3266000000D-01 .6297400000D+01 .2036103000D+01 .3996000000D+00 .3622800000D+01 .6563000000D+00 -.2447100000D+01 .2398000000D-01 .7813042000D+03 .2242260000D+01 .1478800000D-01 .2909400000D+01 .5229036000D+01 .3888500000D+01 .8866000000D+00 .3854700000D+01 .2022230000D+02 .1417000000D-01 .1882444300D+04 .5768920000D+01 .3489400000D-01 .6968200000D+01 .3615561000D+01 .2029600000D+01 .5284100000D+01 .2236700000D+01 +4 45120031206200401152452979.3 .2105100000D+01 -.2370000000D-02 .1706629200D+04 .2765580000D+01 .4720500000D-01 .6248200000D+01 .4434056000D+01 .2827100000D+01 .5970900000D+01 .5586500000D+01 -.1558000000D+01 -.1180000000D-02 .7959072000D+03 .1047910000D+01 .2064200000D-01 .2927100000D+01 .1357988000D+01 .6253100000D+01 .3077900000D+01 .2516400000D+01 .2035780000D+02 .1300000000D-01 .1882240900D+04 .2920790000D+01 .5099200000D-01 .6946200000D+01 .6016518000D+01 .4426500000D+01 .1287200000D+01 .8834000000D+00 +4 45220040115200402242453019.3 .1601200000D+01 .4287000000D-01 .1706173800D+04 .1305430000D+01 .3531400000D-01 .6226900000D+01 .6232900000D+00 .2202500000D+01 .2178600000D+01 .4295900000D+01 -.1404600000D+01 -.2038000000D-01 .7989375000D+03 .7542300000D+00 .1398200000D-01 .2898600000D+01 .3840119000D+01 .5502100000D+01 .5705600000D+01 .1232500000D+01 .2029760000D+02 .1195000000D-01 .1880872600D+04 .1472960000D+01 .3856700000D-01 .6975000000D+01 .2207711000D+01 .3700400000D+01 .3902100000D+01 .5897700000D+01 +4 45320040224200404042453059.3 .3053400000D+01 .4630000000D-01 .1709582000D+04 .4235840000D+01 .1376600000D-01 .6237500000D+01 .3179229000D+01 .4726400000D+01 .1443700000D+01 .3106900000D+01 -.2198900000D+01 -.1185000000D-01 .7915345000D+03 .1927630000D+01 .8720000000D-02 .2862700000D+01 .1142990000D+00 .1906700000D+01 .4736200000D+01 .4130000000D-01 .2127790000D+02 -.4985000000D-01 .1881709400D+04 .4695670000D+01 .1813000000D-01 .6995300000D+01 .4763006000D+01 .5170000000D-01 .2944400000D+01 .4680900000D+01 +4 45420040404200405142453099.3 .5237400000D+01 .3400000000D-03 .1715911700D+04 .2837560000D+01 .4605900000D-01 .6349000000D+01 .5757761000D+01 .9988000000D+00 .4141100000D+01 .1852500000D+01 -.2897800000D+01 .3800000000D-03 .7760239000D+03 .1159020000D+01 .2055700000D-01 .2854100000D+01 .2686227000D+01 .4588500000D+01 .1404200000D+01 .5059200000D+01 .2004410000D+02 -.9600000000D-03 .1881910700D+04 .2983650000D+01 .4901100000D-01 .6930200000D+01 .1057415000D+01 .2633300000D+01 .5769900000D+01 .3435600000D+01 +4 45520040514200406232453139.3 .5750700000D+01 -.3724000000D-01 .1718390500D+04 .1029560000D+01 .3795900000D-01 .6336800000D+01 .1991884000D+01 .3902000000D+00 .3111000000D+00 .5334000000D+00 -.3048900000D+01 .1401000000D-01 .7703121000D+03 .5467100000D+00 .1638200000D-01 .2861700000D+01 .5196324000D+01 .3885200000D+01 .3801900000D+01 .3740900000D+01 .1963760000D+02 .2178000000D-01 .1881641900D+04 .1110200000D+01 .4177300000D-01 .6974200000D+01 .3573022000D+01 .2065900000D+01 .1920800000D+01 .2113100000D+01 +4 45620040623200408022453179.3 .4131800000D+01 -.3685000000D-01 .1712990100D+04 .4076120000D+01 .2367000000D-01 .6272200000D+01 .4426652000D+01 .2818400000D+01 .2531600000D+01 .5431700000D+01 -.2371300000D+01 .1287000000D-01 .7814911000D+03 .1854300000D+01 .1113000000D-01 .2913400000D+01 .1347049000D+01 .2870000000D-01 .5703400000D+01 .2354200000D+01 .2004600000D+02 .1784000000D-01 .1881746800D+04 .4441800000D+01 .2602000000D-01 .6940500000D+01 .6008182000D+01 .4454100000D+01 .4068000000D+01 .7205000000D+00 +4 45720040802200409112453219.3 .2063700000D+01 -.6080000000D-01 .1705778500D+04 .5888820000D+01 .1315600000D-01 .6262000000D+01 .5207940000D+00 .5208200000D+01 .4340000000D+01 .3998500000D+01 -.1596000000D+01 .2759000000D-01 .7981655000D+03 .2628520000D+01 .9483000000D-02 .2956900000D+01 .3730259000D+01 .2306500000D+01 .9555000000D+00 .9297000000D+00 .2092170000D+02 -.7560000000D-02 .1882117700D+04 .6376290000D+01 .1637900000D-01 .6892800000D+01 .2103714000D+01 .5352000000D+00 .5905700000D+01 .5582300000D+01 +4 45820040911200410212453259.3 -.5072000000D+00 -.7528000000D-01 .1701526200D+04 .6608640000D+01 .1113200000D-01 .6304600000D+01 .2868196000D+01 .1299600000D+01 .5738400000D+01 .2545600000D+01 -.4859000000D+00 .3394000000D-01 .8067046000D+03 .2891520000D+01 .1009600000D-01 .2985400000D+01 .6088312000D+01 .4536100000D+01 .2651000000D+01 .5771900000D+01 .2093860000D+02 -.8860000000D-02 .1881841200D+04 .7248800000D+01 .1311600000D-01 .6919600000D+01 .4453561000D+01 .2875900000D+01 .9107000000D+00 .4132700000D+01 +4 45920041021200411302453299.3 -.3468200000D+01 -.5876000000D-01 .1705531800D+04 .6427810000D+01 .1871400000D-01 .6338000000D+01 .5209878000D+01 .3650000000D+01 .8491000000D+00 .1103800000D+01 .8225000000D+00 .2309000000D-01 .8016827000D+03 .2743870000D+01 .1114000000D-01 .2949400000D+01 .2160849000D+01 .4457000000D+00 .4163800000D+01 .4348500000D+01 .2061600000D+02 -.1570000000D-01 .1881112300D+04 .6951190000D+01 .2192300000D-01 .6856400000D+01 .5140100000D+00 .5225500000D+01 .2592300000D+01 .2695800000D+01 +4 46020041130200501092453339.3 -.5572400000D+01 -.5200000000D-01 .1713488500D+04 .5111110000D+01 .3453000000D-01 .6365900000D+01 .1286974000D+01 .6035300000D+01 .2965000000D+01 .5972200000D+01 .1704900000D+01 .1618000000D-01 .7841699000D+03 .2073510000D+01 .1569900000D-01 .2878100000D+01 .4536783000D+01 .2690700000D+01 .5995400000D+01 .2945700000D+01 .2005840000D+02 -.1859000000D-01 .1881571400D+04 .5474360000D+01 .3693400000D-01 .6962700000D+01 .2876245000D+01 .1282500000D+01 .4496600000D+01 .1281900000D+01 +4 46120050109200502182453379.3 -.7452800000D+01 -.1370000000D-02 .1721486900D+04 .2270860000D+01 .4686400000D-01 .6337100000D+01 .3694093000D+01 .2182200000D+01 .5322700000D+01 .4628100000D+01 .2319700000D+01 -.1320000000D-02 .7667715000D+03 .8041400000D+00 .1956800000D-01 .2814600000D+01 .6756940000D+00 .4992500000D+01 .1899500000D+01 .1616600000D+01 .1907950000D+02 .9110000000D-02 .1880626600D+04 .2433900000D+01 .5148900000D-01 .6939500000D+01 .5285378000D+01 .3702600000D+01 .5640000000D+00 .6224000000D+01 +4 46220050218200503302453419.3 -.7562700000D+01 .3256000000D-01 .1722883600D+04 .1704420000D+01 .3184500000D-01 .6394600000D+01 .6178223000D+01 .1537400000D+01 .1574800000D+01 .3348500000D+01 .2238400000D+01 -.1031000000D-01 .7648506000D+03 .8519400000D+00 .1237600000D-01 .2863600000D+01 .3168758000D+01 .4416400000D+01 .4578800000D+01 .3406000000D+00 .1880310000D+02 .3383000000D-01 .1879887500D+04 .2066020000D+01 .3077700000D-01 .6872300000D+01 .1486712000D+01 .3025600000D+01 .3197200000D+01 .4959300000D+01 +4 46320050330200505092453459.3 -.6620800000D+01 .5890000000D-01 .1715743900D+04 .4212370000D+01 .1860400000D-01 .6274800000D+01 .2456056000D+01 .4081200000D+01 .7856000000D+00 .2144900000D+01 .1913100000D+01 -.2323000000D-01 .7797917000D+03 .1804260000D+01 .9823000000D-02 .2888100000D+01 .5727239000D+01 .7564000000D+00 .3685100000D+01 .5411700000D+01 .2034710000D+02 -.1568000000D-01 .1881066100D+04 .4687510000D+01 .2329800000D-01 .6952600000D+01 .4048531000D+01 .5639100000D+01 .2398200000D+01 .3758000000D+01 +4 46420050509200506182453499.3 -.4338200000D+01 -.1520000000D-02 .1709671300D+04 .2432080000D+01 .4486000000D-01 .6311500000D+01 .5029649000D+01 .3713000000D+00 .3513400000D+01 .9000000000D+00 .1000200000D+01 .2310000000D-02 .7931771000D+03 .9089500000D+00 .1963300000D-01 .2938000000D+01 .2006964000D+01 .3394600000D+01 .2748000000D+00 .4155000000D+01 .2041170000D+02 -.1640000000D-02 .1880431300D+04 .2579340000D+01 .4883900000D-01 .6919900000D+01 .3383700000D+00 .1903200000D+01 .5043200000D+01 .2490800000D+01 +4 46520050618200507282453539.3 -.3869300000D+01 -.4225000000D-01 .1708107800D+04 .1317680000D+01 .3626900000D-01 .6318900000D+01 .1255538000D+01 .6049200000D+01 .5917300000D+01 .5856000000D+01 .8398000000D+00 .2043000000D-01 .7945804000D+03 .7341400000D+00 .1511000000D-01 .2919200000D+01 .4507237000D+01 .2853100000D+01 .2561900000D+01 .2823300000D+01 .2027890000D+02 -.2210000000D-02 .1880827000D+04 .1441550000D+01 .4053300000D-01 .6948700000D+01 .2845548000D+01 .1306100000D+01 .1192900000D+01 .1165300000D+01 +4 46620050728200509062453579.3 -.5509900000D+01 -.4192000000D-01 .1712667600D+04 .4243920000D+01 .2276100000D-01 .6276100000D+01 .3685054000D+01 .2170600000D+01 .1850600000D+01 .4462600000D+01 .1654300000D+01 .1486000000D-01 .7847068000D+03 .1950370000D+01 .1041400000D-01 .2822600000D+01 .6523540000D+00 .5166300000D+01 .4366100000D+01 .1432300000D+01 .1970960000D+02 -.3450000000D-02 .1880660500D+04 .4665850000D+01 .2534200000D-01 .6936600000D+01 .5274738000D+01 .3718700000D+01 .3313700000D+01 .6055100000D+01 +4 46720050906200510162453619.3 -.7775900000D+01 -.5205000000D-01 .1724356500D+04 .5996680000D+01 .1422700000D-01 .6325300000D+01 .6059918000D+01 .4558600000D+01 .3661600000D+01 .3034300000D+01 .2579900000D+01 .1422000000D-01 .7600086000D+03 .2612350000D+01 .1019900000D-01 .2697600000D+01 .3033591000D+01 .1126700000D+01 .5970200000D+01 .1650000000D-01 .1938180000D+02 -.4143000000D-01 .1881032600D+04 .6541190000D+01 .1563500000D-01 .6895300000D+01 .1366321000D+01 .6079600000D+01 .5096500000D+01 .4620800000D+01 +4 46820051016200511252453659.3 -.1005010000D+02 -.6775000000D-01 .1743088900D+04 .6736850000D+01 .1118800000D-01 .6467200000D+01 .2124158000D+01 .6342000000D+00 .5035700000D+01 .1585100000D+01 .3221600000D+01 .1782000000D-01 .7163144000D+03 .2828820000D+01 .1052600000D-01 .2526800000D+01 .5394273000D+01 .3314100000D+01 .1366000000D+01 .4863800000D+01 .1802700000D+02 -.5226000000D-01 .1880565200D+04 .7338170000D+01 .1489200000D-01 .6920300000D+01 .3713712000D+01 .2141000000D+01 .9660000000D-01 .3170100000D+01 +4 46920051125200601042453699.3 -.1262790000D+02 -.4842000000D-01 .1766962800D+04 .6551400000D+01 .2243700000D-01 .6524000000D+01 .4468636000D+01 .2985900000D+01 .2026000000D+00 .1551000000D+00 .3733000000D+01 .8710000000D-02 .6563354000D+03 .2633800000D+01 .1229000000D-01 .2283900000D+01 .1474572000D+01 .5491000000D+01 .3023200000D+01 .3464200000D+01 .1602770000D+02 -.4165000000D-01 .1880659600D+04 .6861560000D+01 .2211200000D-01 .6874400000D+01 .6056666000D+01 .4476100000D+01 .1749200000D+01 .1724500000D+01 +4 47020060104200602132453739.3 -.1441050000D+02 -.3440000000D-01 .1789482000D+04 .4970080000D+01 .3700000000D-01 .6637100000D+01 .5512750000D+00 .5353500000D+01 .2283400000D+01 .5025500000D+01 .4039600000D+01 -.4590000000D-02 .5930756000D+03 .1939180000D+01 .1508900000D-01 .2092000000D+01 .3864080000D+01 .1384800000D+01 .4696300000D+01 .2070200000D+01 .1445890000D+02 -.3917000000D-01 .1880803600D+04 .5267090000D+01 .3997900000D-01 .6923500000D+01 .2139002000D+01 .5426000000D+00 .3731600000D+01 .3250000000D+00 +4 47120060213200603252453779.3 -.1562710000D+02 .1120000000D-02 .1803560200D+04 .1897310000D+01 .4835300000D-01 .6610700000D+01 .2967884000D+01 .1490200000D+01 .4629800000D+01 .3689300000D+01 .3939900000D+01 -.2820000000D-02 .5495184000D+03 .7079800000D+00 .1940700000D-01 .1996900000D+01 .2027400000D-01 .3647100000D+01 .6134000000D+00 .7507000000D+00 .1281340000D+02 .7860000000D-02 .1879592400D+04 .1972500000D+01 .5086400000D-01 .6892000000D+01 .4554920000D+01 .2988800000D+01 .6131800000D+01 .5277900000D+01 +4 47220060325200605042453819.3 -.1534170000D+02 .1441000000D-01 .1802962200D+04 .2193380000D+01 .2801300000D-01 .6666000000D+01 .5461700000D+01 .8105000000D+00 .1017300000D+01 .2432400000D+01 .3784700000D+01 .5550000000D-02 .5493643000D+03 .9682000000D+00 .9393000000D-02 .2074500000D+01 .2520838000D+01 .3148000000D+01 .3419700000D+01 .5773800000D+01 .1276550000D+02 .4122000000D-01 .1880164800D+04 .2452890000D+01 .2590700000D-01 .6849200000D+01 .7656100000D+00 .2355200000D+01 .2410700000D+01 .4004000000D+01 +4 47320060504200606132453859.3 -.1507210000D+02 .5828000000D-01 .1790503800D+04 .4368450000D+01 .2503300000D-01 .6589700000D+01 .1743039000D+01 .3414500000D+01 .1339000000D+00 .1215000000D+01 .4085300000D+01 -.1099000000D-01 .5901861000D+03 .1738220000D+01 .1137900000D-01 .2278900000D+01 .5070912000D+01 .5795400000D+01 .2583600000D+01 .4538500000D+01 .1445040000D+02 .1887000000D-01 .1880504000D+04 .4563690000D+01 .2560300000D-01 .6808100000D+01 .3332242000D+01 .4928700000D+01 .1739100000D+01 .2815000000D+01 +4 47420060613200607232453899.3 -.1311250000D+02 -.2150000000D-02 .1777436200D+04 .2112060000D+01 .4590000000D-01 .6522800000D+01 .4311300000D+01 .5999000000D+01 .2854500000D+01 .6245300000D+01 .3770300000D+01 .2310000000D-02 .6287536000D+03 .7419300000D+00 .1847200000D-01 .2329400000D+01 .1336510000D+01 .2033600000D+01 .5315000000D+01 .3264200000D+01 .1564400000D+02 -.4200000000D-02 .1879744500D+04 .2244760000D+01 .5007800000D-01 .6883900000D+01 .5900283000D+01 .1178100000D+01 .4322900000D+01 .1544700000D+01 +4 47520060723200609012453939.3 -.1276550000D+02 -.3939000000D-01 .1775201600D+04 .1687100000D+01 .3755400000D-01 .6546700000D+01 .5282130000D+00 .5394500000D+01 .5208600000D+01 .4912200000D+01 .3734000000D+01 .7580000000D-02 .6315087000D+03 .8030700000D+00 .1546000000D-01 .2279500000D+01 .3826077000D+01 .1727800000D+01 .1237600000D+01 .1928100000D+01 .1566980000D+02 -.2784000000D-01 .1880448100D+04 .1861670000D+01 .3888000000D-01 .6893300000D+01 .2116489000D+01 .5617000000D+00 .4526000000D+00 .2140000000D+00 +4 47620060901200610112453979.3 -.1416420000D+02 -.3940000000D-01 .1787721900D+04 .4689430000D+01 .2371800000D-01 .6564800000D+01 .2951453000D+01 .1493600000D+01 .1057200000D+01 .3508000000D+01 .3935300000D+01 .1490000000D-02 .5957798000D+03 .1978820000D+01 .1209000000D-01 .2059100000D+01 .6252199000D+01 .3924800000D+01 .3013100000D+01 .5316000000D+00 .1413730000D+02 -.2695000000D-01 .1880044200D+04 .4994600000D+01 .2454800000D-01 .6853100000D+01 .4538059000D+01 .2980400000D+01 .2542500000D+01 .5101600000D+01 +4 47720061011200611202454019.3 -.1626670000D+02 -.2884000000D-01 .1810254700D+04 .6467770000D+01 .1620700000D-01 .6613900000D+01 .5322234000D+01 .3853000000D+01 .2795700000D+01 .2073600000D+01 .4132300000D+01 -.1693000000D-01 .5255576000D+03 .2703930000D+01 .1219100000D-01 .1753400000D+01 .2357702000D+01 .6110700000D+01 .4638100000D+01 .5409700000D+01 .1251890000D+02 -.6444000000D-01 .1880502800D+04 .6813000000D+01 .1565400000D-01 .6853600000D+01 .6233990000D+00 .5338700000D+01 .4231900000D+01 .3665800000D+01 +4 47820061120200612302454059.3 -.1775470000D+02 -.3839000000D-01 .1835868100D+04 .7185210000D+01 .1465000000D-01 .6764000000D+01 .1384434000D+01 .6178500000D+01 .4143500000D+01 .6292000000D+00 .3631300000D+01 -.2148000000D-01 .4274075000D+03 .2981850000D+01 .1204000000D-01 .1364400000D+01 .4740756000D+01 .1971900000D+01 .9690000000D-01 .4013200000D+01 .1017220000D+02 -.8482000000D-01 .1880338700D+04 .7467770000D+01 .1558000000D-01 .6887500000D+01 .2966048000D+01 .1394800000D+01 .5619500000D+01 .2209300000D+01 +4 47920061230200702082454099.3 -.1908550000D+02 -.2741000000D-01 .1857682500D+04 .6760310000D+01 .2579700000D-01 .6719000000D+01 .3728711000D+01 .2226900000D+01 .5801200000D+01 .5477500000D+01 .2627400000D+01 -.1401000000D-01 .3165921000D+03 .2824120000D+01 .1183600000D-01 .9641000000D+00 .8734420000D+00 .4115400000D+01 .1620900000D+01 .2676700000D+01 .7023400000D+01 -.5946000000D-01 .1881078900D+04 .6938480000D+01 .2449900000D-01 .6906500000D+01 .5307204000D+01 .3720100000D+01 .8881000000D+00 .7688000000D+00 +4 48020070208200703202454139.3 -.2003870000D+02 -.7180000000D-02 .1872548200D+04 .4935630000D+01 .3914000000D-01 .6839900000D+01 .6097524000D+01 .4551900000D+01 .1464400000D+01 .4077800000D+01 .1906700000D+01 -.1650000000D-01 .2187282000D+03 .2125430000D+01 .1719700000D-01 .6647000000D+00 .3371536000D+01 .4040000000D-01 .3292100000D+01 .1420900000D+01 .4682600000D+01 -.4323000000D-01 .1880801000D+04 .5136720000D+01 .4201100000D-01 .6913800000D+01 .1390538000D+01 .6086900000D+01 .2998000000D+01 .5650100000D+01 +4 48120070320200704292454179.3 -.2025120000D+02 .5300000000D-03 .1877517000D+04 .1668960000D+01 .4998500000D-01 .6837700000D+01 .2236601000D+01 .7030000000D+00 .3844000000D+01 .2747000000D+01 .1293000000D+01 -.2000000000D-03 .1634632000D+03 .7187900000D+00 .2111700000D-01 .5839000000D+00 .5948966000D+01 .2403000000D+01 .5567200000D+01 .1957000000D+00 .2827000000D+01 .1163000000D-01 .1880279000D+04 .1673150000D+01 .5023600000D-01 .6847400000D+01 .3810744000D+01 .2248200000D+01 .5386900000D+01 .4325200000D+01 +4 48220070429200706082454219.3 -.1991300000D+02 -.8420000000D-02 .1876617800D+04 .2648080000D+01 .2328200000D-01 .6801600000D+01 .4735974000D+01 .2210000000D-01 .3295000000D+00 .1496700000D+01 .1435700000D+01 .1164000000D-01 .1678189000D+03 .1078900000D+01 .1029100000D-01 .6541000000D+00 .2151958000D+01 .1790700000D+01 .1982800000D+01 .5087000000D+01 .3239500000D+01 .3562000000D-01 .1880891100D+04 .2590660000D+01 .2568600000D-01 .6952200000D+01 .2780400000D-01 .1616300000D+01 .1672200000D+01 .3057900000D+01 +4 48320070608200707182454259.3 -.2044660000D+02 .3811000000D-01 .1871891400D+04 .4537730000D+01 .3038200000D-01 .6832900000D+01 .1020156000D+01 .2661100000D+01 .5721600000D+01 .2935000000D+00 .1956800000D+01 .1556000000D-01 .2241408000D+03 .1850270000D+01 .1146500000D-01 .9348000000D+00 .4566601000D+01 .4440900000D+01 .1267700000D+01 .3819500000D+01 .4651700000D+01 .4587000000D-01 .1880551800D+04 .4506200000D+01 .2779500000D-01 .6804700000D+01 .2596798000D+01 .4176800000D+01 .9518000000D+00 .1851100000D+01 +4 48420070718200708272454299.3 -.1935570000D+02 -.2620000000D-02 .1863692700D+04 .1877180000D+01 .4847600000D-01 .6784400000D+01 .3584563000D+01 .5219200000D+01 .2074700000D+01 .5304000000D+01 .2551900000D+01 .3100000000D-03 .2787188000D+03 .8094900000D+00 .2076100000D-01 .1028900000D+01 .7547580000D+00 .6511000000D+00 .3938400000D+01 .2462100000D+01 .6609100000D+01 -.7670000000D-02 .1880708700D+04 .1983630000D+01 .5148600000D-01 .6883000000D+01 .5161523000D+01 .4563000000D+00 .3601400000D+01 .5915000000D+00 +4 48520070827200710062454339.3 -.1918070000D+02 -.2184000000D-01 .1863238600D+04 .2080940000D+01 .4012200000D-01 .6801300000D+01 .6076936000D+01 .4614600000D+01 .4411800000D+01 .3967400000D+01 .2636400000D+01 -.1731000000D-01 .2781275000D+03 .9119000000D+00 .1706200000D-01 .9207000000D+00 .3231522000D+01 .3195000000D+00 .6176900000D+01 .1158400000D+01 .6669500000D+01 -.4810000000D-01 .1880624000D+04 .2258860000D+01 .3838100000D-01 .6885600000D+01 .1371248000D+01 .6118000000D+01 .5942200000D+01 .5536700000D+01 +4 48620071006200711152454379.3 -.1970070000D+02 -.2201000000D-01 .1871339000D+04 .5248450000D+01 .2500800000D-01 .6836900000D+01 .2209746000D+01 .7024000000D+00 .1277000000D+00 .2556100000D+01 .1890500000D+01 -.2037000000D-01 .2165774000D+03 .2264190000D+01 .1324600000D-01 .6036000000D+00 .5713854000D+01 .2544200000D+01 .1621300000D+01 .6188700000D+01 .4493800000D+01 -.4813000000D-01 .1880539300D+04 .5372610000D+01 .2418000000D-01 .6815400000D+01 .3784953000D+01 .2228600000D+01 .1721900000D+01 .4129700000D+01 +4 48720071115200712252454419.3 -.2078980000D+02 .1439000000D-01 .1880515000D+04 .7029620000D+01 .1837000000D-01 .6868700000D+01 .4573656000D+01 .3028000000D+01 .1751800000D+01 .1115200000D+01 .8908000000D+00 -.3311000000D-01 .1158908000D+03 .3044450000D+01 .1342200000D-01 .3110000000D+00 .2099419000D+01 .4739600000D+01 .3277400000D+01 .5487100000D+01 .1851200000D+01 -.7044000000D-01 .1881402600D+04 .7129380000D+01 .1612900000D-01 .6784200000D+01 .6146123000D+01 .4577500000D+01 .3378500000D+01 .2690000000D+01 +4 48820071225200802032454459.3 -.2076290000D+02 .2163000000D-01 .1882341300D+04 .7607920000D+01 .1863200000D-01 .6867700000D+01 .6299190000D+00 .5323900000D+01 .3205700000D+01 .5947500000D+01 -.3567000000D+00 -.3961000000D-01 .7953450000D+02 .3324850000D+01 .1226900000D-01 .4855000000D+00 .5940840000D+01 .6072000000D+00 .4880700000D+01 .5421300000D+01 -.8863000000D+00 -.9427000000D-01 .1881535800D+04 .7683340000D+01 .1580200000D-01 .6862800000D+01 .2199815000D+01 .6242000000D+00 .4776900000D+01 .1231200000D+01 +4 48920080203200803142454499.3 -.1986540000D+02 .9960000000D-02 .1874196400D+04 .6899640000D+01 .2571900000D-01 .6776400000D+01 .2969472000D+01 .1345400000D+01 .4905100000D+01 .4497600000D+01 -.1831200000D+01 -.2429000000D-01 .1890207000D+03 .3031060000D+01 .1408300000D-01 .8693000000D+00 .2650383000D+01 .2788900000D+01 .1919000000D+00 .4220800000D+01 -.4224000000D+01 -.6720000000D-01 .1881820500D+04 .7087160000D+01 .2710400000D-01 .6829100000D+01 .4537632000D+01 .2956500000D+01 .1254000000D+00 .6080300000D+01 +4 49020080314200804232454539.3 -.1924740000D+02 .1878000000D-01 .1861559600D+04 .5034150000D+01 .4125000000D-01 .6762800000D+01 .5336085000D+01 .3667400000D+01 .5638000000D+00 .3099900000D+01 -.2907600000D+01 -.8290000000D-02 .2915679000D+03 .2130300000D+01 .1738900000D-01 .1178700000D+01 .5155304000D+01 .5009500000D+01 .1930000000D+01 .2949100000D+01 -.6841600000D+01 -.3585000000D-01 .1881880000D+04 .5103220000D+01 .4171100000D-01 .6892300000D+01 .6194310000D+00 .5322700000D+01 .2245400000D+01 .4677100000D+01 +4 49120080423200806022454579.3 -.1838470000D+02 -.4650000000D-02 .1850511000D+04 .1637180000D+01 .5013500000D-01 .6749600000D+01 .1474134000D+01 .6125000000D+01 .2982300000D+01 .1776100000D+01 -.3293400000D+01 .5600000000D-03 .3480119000D+03 .6855000000D+00 .2140500000D-01 .1284800000D+01 .1337557000D+01 .1194600000D+01 .4225200000D+01 .1646300000D+01 -.8480800000D+01 .1300000000D-01 .1881877000D+04 .1637660000D+01 .5081400000D-01 .6830700000D+01 .3040230000D+01 .1470800000D+01 .4609600000D+01 .3344200000D+01 +4 49220080602200807122454619.3 -.1851800000D+02 -.2146000000D-01 .1852111500D+04 .2707880000D+01 .2238800000D-01 .6794300000D+01 .3974560000D+01 .5479900000D+01 .5604100000D+01 .5100000000D+00 -.3049200000D+01 .2140000000D-02 .3426478000D+03 .1169380000D+01 .1153700000D-01 .1136500000D+01 .3843219000D+01 .3253000000D+00 .8643000000D+00 .3891000000D+00 -.7824600000D+01 .2173000000D-01 .1881432000D+04 .2646090000D+01 .2644900000D-01 .6940900000D+01 .5541629000D+01 .8008000000D+00 .1018300000D+01 .2099300000D+01 +4 49320080712200808212454659.3 -.1957230000D+02 -.2540000000D-02 .1862843000D+04 .4519750000D+01 .3034200000D-01 .6722100000D+01 .2609830000D+00 .1800800000D+01 .4912000000D+01 .5603800000D+01 -.2984600000D+01 .2674000000D-01 .2829853000D+03 .2016630000D+01 .1354000000D-01 .9139000000D+00 .1031590000D+00 .3082100000D+01 .6049100000D+01 .5435900000D+01 -.6999200000D+01 .5896000000D-01 .1881656900D+04 .4630360000D+01 .3156000000D-01 .6924900000D+01 .1828134000D+01 .3397300000D+01 .1470000000D+00 .8779000000D+00 +4 49420080821200809302454699.3 -.1992320000D+02 -.8000000000D-04 .1869365500D+04 .1809320000D+01 .5211400000D-01 .6820300000D+01 .2824617000D+01 .4322300000D+01 .1186300000D+01 .4327700000D+01 -.2163000000D+01 -.1400000000D-03 .2246838000D+03 .8307000000D+00 .2262700000D-01 .8022000000D+00 .2625176000D+01 .5711400000D+01 .2603600000D+01 .4137100000D+01 -.4814000000D+01 -.8340000000D-02 .1882343900D+04 .1833320000D+01 .5258000000D-01 .6916500000D+01 .4392680000D+01 .5987900000D+01 .2844600000D+01 .5899800000D+01 +4 49520080930200811092454739.3 -.1989800000D+02 .1438000000D-01 .1869480900D+04 .2429150000D+01 .4024600000D-01 .6785300000D+01 .5312813000D+01 .3706800000D+01 .3542500000D+01 .2984700000D+01 -.2092900000D+01 -.2188000000D-01 .2272807000D+03 .1045660000D+01 .1758600000D-01 .9227000000D+00 .5121290000D+01 .5179600000D+01 .4766900000D+01 .2836400000D+01 -.4806100000D+01 -.5120000000D-01 .1881199200D+04 .2498820000D+01 .4040400000D-01 .6921300000D+01 .5979880000D+00 .5370700000D+01 .5117500000D+01 .4559000000D+01 +4 49620081109200812192454779.3 -.1890770000D+02 .1343000000D-01 .1859328800D+04 .5657510000D+01 .2413800000D-01 .6741100000D+01 .1437948000D+01 .6096600000D+01 .5462800000D+01 .1570400000D+01 -.2813400000D+01 -.2498000000D-01 .2949084000D+03 .2419260000D+01 .1329400000D-01 .1280700000D+01 .1305707000D+01 .1155000000D+01 .1578000000D+00 .1479800000D+01 -.6928000000D+01 -.5669000000D-01 .1881766200D+04 .5697630000D+01 .2473200000D-01 .6870500000D+01 .3005380000D+01 .1447900000D+01 .8973000000D+00 .3136700000D+01 +4 49720081219200901282454819.3 -.1805890000D+02 .5481000000D-01 .1839810800D+04 .7311910000D+01 .1738600000D-01 .6660300000D+01 .3792565000D+01 .2138400000D+01 .7669000000D+00 .1300000000D+00 -.3905600000D+01 -.9210000000D-02 .3999397000D+03 .3123890000D+01 .1288000000D-01 .1676000000D+01 .3714962000D+01 .3337100000D+01 .1707100000D+01 .6250000000D-01 -.9847900000D+01 -.5412000000D-01 .1882653200D+04 .7463830000D+01 .1646300000D-01 .6851600000D+01 .5359983000D+01 .3789400000D+01 .2489700000D+01 .1683200000D+01 +4 49820090128200903092454859.3 -.1637640000D+02 .7574000000D-01 .1812402400D+04 .7714360000D+01 .1726700000D-01 .6573100000D+01 .6123301000D+01 .4446200000D+01 .2247200000D+01 .4944900000D+01 -.4483500000D+01 -.1620000000D-02 .5109526000D+03 .3234060000D+01 .1313200000D-01 .2061500000D+01 .6082320000D+01 .5486200000D+01 .3417000000D+01 .4917400000D+01 -.1220580000D+02 -.7030000000D-01 .1882742400D+04 .7928660000D+01 .1678500000D-01 .6908800000D+01 .1407911000D+01 .6112600000D+01 .3931100000D+01 .2266000000D+00 +4 49920090309200904182454899.3 -.1363610000D+02 .4761000000D-01 .1783188600D+04 .6940860000D+01 .2505000000D-01 .6488000000D+01 .2171989000D+01 .4883000000D+00 .3950800000D+01 .3494500000D+01 -.4516600000D+01 -.1690000000D-02 .6049531000D+03 .2842640000D+01 .1246100000D-01 .2354900000D+01 .2157280000D+01 .1360000000D+01 .5079900000D+01 .3481200000D+01 -.1456980000D+02 -.5650000000D-01 .1882417700D+04 .7233370000D+01 .2728800000D-01 .6820600000D+01 .3741342000D+01 .2166400000D+01 .5684500000D+01 .5060800000D+01 +4 50020090418200905282454939.3 -.1151800000D+02 .3185000000D-01 .1760130800D+04 .5092940000D+01 .4018700000D-01 .6465300000D+01 .4531518000D+01 .2849500000D+01 .6043600000D+01 .2083900000D+01 -.4492000000D+01 .6640000000D-02 .6694718000D+03 .2054820000D+01 .1722300000D-01 .2545200000D+01 .4537241000D+01 .3577500000D+01 .4751000000D+00 .2095700000D+01 -.1664160000D+02 -.1951000000D-01 .1883007100D+04 .5231150000D+01 .4015300000D-01 .6867600000D+01 .6102646000D+01 .4513200000D+01 .1429400000D+01 .3662100000D+01 +4 50120090528200907072454979.3 -.9973100000D+01 -.8900000000D-02 .1746768700D+04 .1811150000D+01 .4895100000D-01 .6399500000D+01 .6629300000D+00 .5305300000D+01 .2162000000D+01 .7515000000D+00 -.4163400000D+01 -.4640000000D-02 .7013289000D+03 .6517200000D+00 .2087700000D-01 .2580500000D+01 .6831900000D+00 .6073500000D+01 .2796400000D+01 .7785000000D+00 -.1757100000D+02 .6890000000D-02 .1882517300D+04 .1876930000D+01 .5241100000D-01 .6883500000D+01 .2236585000D+01 .6609000000D+00 .3804500000D+01 .2322900000D+01 +4 50220090707200908162455019.3 -.1051480000D+02 -.2106000000D-01 .1747733800D+04 .2337940000D+01 .2749700000D-01 .6564500000D+01 .3159445000D+01 .4657500000D+01 .4707800000D+01 .5778000000D+01 -.4327000000D+01 -.7330000000D-02 .7009856000D+03 .1165910000D+01 .1023500000D-01 .2577200000D+01 .3187960000D+01 .5222300000D+01 .5628900000D+01 .5803200000D+01 -.1714660000D+02 .6330000000D-02 .1881840000D+04 .2642640000D+01 .2634100000D-01 .6877700000D+01 .4733683000D+01 .6267900000D+01 .2448000000D+00 .1069500000D+01 +4 50320090816200909252455059.3 -.1153990000D+02 -.4225000000D-01 .1759550300D+04 .4411480000D+01 .2731800000D-01 .6451600000D+01 .5729453000D+01 .9326000000D+00 .3995000000D+01 .4558300000D+01 -.4725300000D+01 .1290000000D-02 .6702790000D+03 .1948930000D+01 .1350000000D-01 .2354100000D+01 .5758410000D+01 .1689800000D+01 .4677500000D+01 .4582200000D+01 -.1692060000D+02 .4621000000D-01 .1882944400D+04 .4808840000D+01 .3336700000D-01 .6911700000D+01 .1019991000D+01 .2608200000D+01 .5684200000D+01 .6153900000D+01 +4 50420090925200911042455099.3 -.1320620000D+02 .3330000000D-02 .1772076200D+04 .1889750000D+01 .5363900000D-01 .6544500000D+01 .2013328000D+01 .3486000000D+01 .3502000000D+00 .3299600000D+01 -.4818000000D+01 .1790000000D-02 .6354560000D+03 .7613100000D+00 .2257700000D-01 .2333000000D+01 .2036160000D+01 .4359700000D+01 .1145500000D+01 .3321300000D+01 -.1525560000D+02 -.7730000000D-02 .1882688400D+04 .1875630000D+01 .5408200000D-01 .6940100000D+01 .3587080000D+01 .5170500000D+01 .2027100000D+01 .4879700000D+01 +4 50520091104200912142455139.3 -.1320530000D+02 .4111000000D-01 .1771487900D+04 .2524420000D+01 .3826600000D-01 .6528800000D+01 .4502233000D+01 .2863100000D+01 .2683400000D+01 .1951300000D+01 -.4839100000D+01 .6410000000D-02 .6371359000D+03 .1085390000D+01 .1684900000D-01 .2392300000D+01 .4521145000D+01 .3625500000D+01 .3361500000D+01 .1967900000D+01 -.1534120000D+02 -.3281000000D-01 .1881833400D+04 .2527970000D+01 .4359300000D-01 .6892600000D+01 .6074660000D+01 .4557200000D+01 .4324200000D+01 .3538700000D+01 +4 50620091214201001232455179.3 -.1127900000D+02 .4670000000D-01 .1756134500D+04 .5622210000D+01 .2261100000D-01 .6427000000D+01 .6220800000D+00 .5259900000D+01 .4673800000D+01 .5313000000D+00 -.4403800000D+01 .2500000000D-02 .6766675000D+03 .2435610000D+01 .1220000000D-01 .2586300000D+01 .6455480000D+00 .5957000000D+01 .4964800000D+01 .5612000000D+00 -.1655350000D+02 -.4380000000D-01 .1882340700D+04 .5925640000D+01 .2445900000D-01 .6909500000D+01 .2195925000D+01 .6330000000D+00 .7190000000D-01 .2109100000D+01 +4 50720100123201003042455219.3 -.8937900000D+01 .7129000000D-01 .1735611600D+04 .7174580000D+01 .1394400000D-01 .6286700000D+01 .2969899000D+01 .1322100000D+01 .6271200000D+01 .5361400000D+01 -.4060900000D+01 .2353000000D-01 .7301658000D+03 .3088360000D+01 .1253600000D-01 .2736700000D+01 .3004152000D+01 .1878600000D+01 .2909000000D+00 .5403100000D+01 -.1865610000D+02 -.1661000000D-01 .1882369500D+04 .7672490000D+01 .1729800000D-01 .6946800000D+01 .4546148000D+01 .2978200000D+01 .1613800000D+01 .6560000000D+00 +4 50820100304201004132455259.3 -.6397300000D+01 .9362000000D-01 .1716664700D+04 .7530480000D+01 .1458900000D-01 .6286400000D+01 .5294378000D+01 .3663000000D+01 .1418900000D+01 .3889700000D+01 -.3334300000D+01 .3879000000D-01 .7746205000D+03 .3234470000D+01 .1180400000D-01 .2899800000D+01 .5343157000D+01 .4040200000D+01 .2000800000D+01 .3945900000D+01 -.1982670000D+02 -.1598000000D-01 .1882599800D+04 .8095570000D+01 .1760900000D-01 .6947200000D+01 .5902300000D+00 .5294200000D+01 .3136300000D+01 .5473100000D+01 +4 50920100413201005232455299.3 -.3101300000D+01 .6747000000D-01 .1705103600D+04 .6850420000D+01 .2326300000D-01 .6225100000D+01 .1337545000D+01 .6017000000D+01 .3199700000D+01 .2435800000D+01 -.2018000000D+01 .2717000000D-01 .7996202000D+03 .2911700000D+01 .1268600000D-01 .2935500000D+01 .1402589000D+01 .6227500000D+01 .3630300000D+01 .2510200000D+01 -.2026240000D+02 -.2272000000D-01 .1882011800D+04 .7365200000D+01 .2528600000D-01 .6925600000D+01 .2919961000D+01 .1342100000D+01 .4912900000D+01 .4013800000D+01 +4 51020100523201007022455339.3 -.2757000000D+00 .3476000000D-01 .1702225600D+04 .5148340000D+01 .3691200000D-01 .6292500000D+01 .3691195000D+01 .2112500000D+01 .5332900000D+01 .1027900000D+01 -.8144000000D+00 .1090000000D-01 .8067387000D+03 .2103350000D+01 .1678800000D-01 .2980300000D+01 .3772754000D+01 .2185200000D+01 .5454900000D+01 .1117300000D+01 -.2085560000D+02 .3380000000D-02 .1882498200D+04 .5538130000D+01 .3997900000D-01 .6913500000D+01 .5276898000D+01 .3677400000D+01 .5876000000D+00 .2603200000D+01 +4 51120100702201008112455379.3 .1461100000D+01 -.6900000000D-02 .1703188400D+04 .2099000000D+01 .4810800000D-01 .6273600000D+01 .6098667000D+01 .4546600000D+01 .1403700000D+01 .5961600000D+01 -.1600000000D+00 -.5930000000D-02 .8047390000D+03 .7243400000D+00 .2066800000D-01 .2961200000D+01 .6195143000D+01 .4550200000D+01 .1406700000D+01 .6064200000D+01 -.2070430000D+02 .5000000000D-03 .1881126700D+04 .2268280000D+01 .5374600000D-01 .6926500000D+01 .1404133000D+01 .6115000000D+01 .2978200000D+01 .1264200000D+01 +4 51220100811201009202455419.3 .9616000000D+00 -.1742000000D-01 .1702983400D+04 .1990670000D+01 .3158600000D-01 .6299700000D+01 .2304672000D+01 .3857600000D+01 .4015100000D+01 .4713800000D+01 -.5096000000D+00 -.7180000000D-02 .8047655000D+03 .1036750000D+01 .1234400000D-01 .2983300000D+01 .2410248000D+01 .3853800000D+01 .4202400000D+01 .4819400000D+01 -.2079380000D+02 -.1210000000D-02 .1881290900D+04 .2369470000D+01 .2990100000D-01 .7018100000D+01 .3894256000D+01 .5470600000D+01 .5560100000D+01 .6279500000D+01 +4 51320100920201010302455459.3 .1409000000D+00 -.6062000000D-01 .1701743100D+04 .4477050000D+01 .2690700000D-01 .6315300000D+01 .4871946000D+01 .1575000000D+00 .3170100000D+01 .3490400000D+01 -.9068000000D+00 -.2429000000D-01 .8076500000D+03 .1950760000D+01 .1357700000D-01 .2995500000D+01 .4976413000D+01 .2616000000D+00 .3211100000D+01 .3585000000D+01 -.2091640000D+02 .7060000000D-02 .1882058500D+04 .4839670000D+01 .2932300000D-01 .6818200000D+01 .1790010000D+00 .1781700000D+01 .4897800000D+01 .5076600000D+01 +4 51420101030201012092455499.3 -.2125900000D+01 .3640000000D-02 .1703044100D+04 .2054880000D+01 .5259700000D-01 .6315600000D+01 .1161354000D+01 .2746000000D+01 .5888500000D+01 .2230200000D+01 -.1825500000D+01 .2830000000D-02 .8061940000D+03 .7567900000D+00 .2330300000D-01 .2984400000D+01 .1256132000D+01 .2946200000D+01 .6053300000D+01 .2320700000D+01 -.2057960000D+02 -.5630000000D-02 .1881184200D+04 .2130150000D+01 .5639800000D-01 .6939700000D+01 .2749721000D+01 .4313400000D+01 .1174400000D+01 .3818100000D+01 +4 51520101209201101182455539.3 -.2097100000D+01 .4284000000D-01 .1701958600D+04 .2274070000D+01 .3916300000D-01 .6299200000D+01 .3654540000D+01 .2132600000D+01 .1901900000D+01 .8934000000D+00 -.1805300000D+01 .2254000000D-01 .8050906000D+03 .1170590000D+01 .1650100000D-01 .2987800000D+01 .3741828000D+01 .2285500000D+01 .1899300000D+01 .9773000000D+00 -.2069710000D+02 -.1240000000D-02 .1881621600D+04 .2457240000D+01 .4409300000D-01 .6857700000D+01 .5240922000D+01 .3689300000D+01 .3541500000D+01 .2468400000D+01 diff --git a/GUI/xephem/auxil/jupitermap.gif b/GUI/xephem/auxil/jupitermap.gif new file mode 100644 index 0000000..ed157b2 Binary files /dev/null and b/GUI/xephem/auxil/jupitermap.gif differ diff --git a/GUI/xephem/auxil/logo.gif b/GUI/xephem/auxil/logo.gif new file mode 100644 index 0000000..36a8ec1 Binary files /dev/null and b/GUI/xephem/auxil/logo.gif differ diff --git a/GUI/xephem/auxil/mars.1020 b/GUI/xephem/auxil/mars.1020 new file mode 100644 index 0000000..b5dd1d3 --- /dev/null +++ b/GUI/xephem/auxil/mars.1020 @@ -0,0 +1,183 @@ + 4 2 2 83 19.7027 4.9788 50.0 40.0 184 2455197.500 2010 +1 220100101201002202455197.5 -.2506000000D+00 .6300000000D-03 .9339600000D+01 .3893000000D-01 .9900000000D-04 .4920000000D-01 -.3810010000D+01 -.2215600000D+01 -.1032500000D+01 -.2616800000D+01 .2670000000D-01 -.6900000000D-03 .3165800000D+01 .2811000000D-01 .2600000000D-03 .1840000000D-01 -.2092824000D+01 -.4832500000D+01 -.2990500000D+01 -.1737800000D+01 -.4260000000D-01 .3500000000D-02 .8833800000D+01 .4465000000D-01 .2240000000D-03 .6310000000D-01 -.2257369000D+01 -.8899000000D+00 -.5841800000D+01 -.1363300000D+01 +1 320100220201004112455247.5 -.1860000000D+00 .1280000000D-02 .9304000000D+01 .1788000000D-01 .7880000000D-03 .6480000000D-01 -.4921926000D+01 -.3244300000D+01 -.1541000000D+00 -.5804100000D+01 -.1210000000D-01 .7900000000D-03 .2514700000D+01 .1587000000D-01 .3920000000D-03 .1960000000D-01 -.3836929000D+01 -.5198900000D+01 -.2324700000D+01 -.5002500000D+01 .1133000000D+00 .1140000000D-02 .9089300000D+01 .2063000000D-01 .8490000000D-03 .7210000000D-01 -.3320532000D+01 -.1962700000D+01 -.5067100000D+01 -.4164400000D+01 +1 420100411201005312455297.5 -.1389000000D+00 .1900000000D-03 .9352900000D+01 .5790000000D-01 .3780000000D-03 .7180000000D-01 -.8032100000D-01 -.1592500000D+01 -.2679900000D+01 -.2978700000D+01 .3040000000D-01 .9000000000D-03 .2757700000D+01 .2362000000D-01 .2350000000D-03 .2580000000D-01 -.5101322000D+01 -.3875400000D+01 -.5359000000D+01 -.1261700000D+01 .1798000000D+00 -.7300000000D-03 .9001600000D+01 .6533000000D-01 .4740000000D-03 .6200000000D-01 -.4760280000D+01 -.9730000000D-01 -.1141900000D+01 -.1474600000D+01 +1 520100531201007202455347.5 -.1313000000D+00 .5000000000D-04 .9262600000D+01 .7673000000D-01 .5400000000D-03 .7170000000D-01 -.1775355000D+01 -.3387200000D+01 -.4894500000D+01 -.2032000000D+00 .8410000000D-01 .1010000000D-02 .3832500000D+01 .3459000000D-01 .4170000000D-03 .3720000000D-01 -.6184452000D+01 -.6025100000D+01 -.1634900000D+01 -.4326100000D+01 .1229000000D+00 .4000000000D-03 .8644000000D+01 .9925000000D-01 .5620000000D-03 .6100000000D-01 -.2552210000D+00 -.1884400000D+01 -.3503700000D+01 -.5104200000D+01 +1 620100720201009082455397.5 -.1224000000D+00 .1900000000D-03 .8629500000D+01 .9361000000D-01 .6250000000D-03 .6470000000D-01 -.3554141000D+01 -.5266900000D+01 -.6181000000D+00 -.3746900000D+01 .1257000000D+00 .2000000000D-04 .5377600000D+01 .4550000000D-01 .4900000000D-03 .4460000000D-01 -.1363151000D+01 -.2174700000D+01 -.4046300000D+01 -.1389100000D+01 .1454000000D+00 -.1410000000D-02 .8458800000D+01 .1152000000D+00 .6240000000D-03 .6140000000D-01 -.2179123000D+01 -.3754700000D+01 -.5604900000D+01 -.2500500000D+01 +1 720100908201010282455447.5 -.1111000000D+00 -.1150000000D-02 .7779000000D+01 .1126600000D+00 .6520000000D-03 .5280000000D-01 -.5463704000D+01 -.8848000000D+00 -.2475900000D+01 -.1288700000D+01 .1436000000D+00 .7000000000D-04 .6237500000D+01 .5912000000D-01 .5450000000D-03 .4470000000D-01 -.3040741000D+01 -.4538100000D+01 -.3542000000D+00 -.4830300000D+01 .9010000000D-01 -.3400000000D-03 .8785800000D+01 .1190700000D+00 .6740000000D-03 .6360000000D-01 -.4159445000D+01 -.5676800000D+01 -.1268500000D+01 -.6212800000D+01 +1 820101028201012172455497.5 -.1908000000D+00 -.1000000000D-04 .7593700000D+01 .1349600000D+00 .8960000000D-03 .6010000000D-01 -.1279063000D+01 -.2749600000D+01 -.4629000000D+01 -.5373900000D+01 .1272000000D+00 -.9500000000D-03 .5746300000D+01 .5857000000D-01 .7010000000D-03 .3440000000D-01 -.4782109000D+01 -.7110000000D+00 -.2922200000D+01 -.2058500000D+01 .5080000000D-01 -.4600000000D-03 .9270800000D+01 .1174900000D+00 .7880000000D-03 .6880000000D-01 -.6126701000D+01 -.1368400000D+01 -.3158400000D+01 -.3638700000D+01 +1 920101217201102052455547.5 -.1701000000D+00 -.8700000000D-03 .8681700000D+01 .1375400000D+00 .1107000000D-02 .7320000000D-01 -.3395098000D+01 -.4775600000D+01 -.6732000000D+00 -.2778800000D+01 .9160000000D-01 -.1860000000D-02 .3619900000D+01 .6033000000D-01 .6610000000D-03 .2100000000D-01 -.1415700000D-01 -.3560300000D+01 -.5735200000D+01 -.4843100000D+01 .3470000000D-01 -.1940000000D-02 .9323300000D+01 .1226100000D+00 .9260000000D-03 .6820000000D-01 -.1794966000D+01 -.3396400000D+01 -.5160300000D+01 -.1006100000D+01 +1 1020110205201103272455597.5 -.2247000000D+00 .7200000000D-03 .9401200000D+01 .1186100000D+00 .8310000000D-03 .7420000000D-01 -.5358061000D+01 -.7089000000D+00 -.2771500000D+01 -.5810000000D-01 .1100000000D-02 -.5400000000D-03 .2992900000D+01 .5720000000D-01 .6690000000D-03 .3060000000D-01 -.6080460000D+00 -.6280500000D+01 -.2239400000D+01 -.1221400000D+01 -.4910000000D-01 -.2900000000D-03 .8872400000D+01 .1361100000D+00 .9140000000D-03 .6220000000D-01 -.3796403000D+01 -.5459800000D+01 -.1042800000D+01 -.4705200000D+01 +1 1120110327201105162455647.5 -.1941000000D+00 .1170000000D-02 .8787900000D+01 .1127800000D+00 .6160000000D-03 .6000000000D-01 -.9887120000D+00 -.2795100000D+01 -.4523900000D+01 -.3705900000D+01 -.4370000000D-01 .6000000000D-04 .5217900000D+01 .5521000000D-01 .5850000000D-03 .4110000000D-01 -.1931367000D+01 -.2770600000D+01 -.4779600000D+01 -.4668900000D+01 -.8830000000D-01 -.1730000000D-02 .8519400000D+01 .1371500000D+00 .8010000000D-03 .5990000000D-01 -.5886495000D+01 -.1204800000D+01 -.3167600000D+01 -.2358000000D+01 +1 1220110516201107052455697.5 -.1167000000D+00 .2200000000D-03 .7772900000D+01 .1226500000D+00 .6340000000D-03 .5270000000D-01 -.2997473000D+01 -.4702600000D+01 -.1655000000D+00 -.1283700000D+01 -.1610000000D-01 -.3000000000D-03 .6182100000D+01 .6081000000D-01 .6180000000D-03 .4310000000D-01 -.3662781000D+01 -.5249800000D+01 -.1225000000D+01 -.1918100000D+01 -.1654000000D+00 -.5200000000D-03 .8802600000D+01 .1235400000D+00 .8020000000D-03 .7110000000D-01 -.1675313000D+01 -.3152100000D+01 -.5135500000D+01 -.6186700000D+01 +1 1320110705201108242455747.5 -.1118000000D+00 .1790000000D-02 .7776500000D+01 .1268800000D+00 .6910000000D-03 .5880000000D-01 -.5117206000D+01 -.3033000000D+00 -.2439600000D+01 -.5032800000D+01 -.4690000000D-01 -.1000000000D-03 .5396800000D+01 .5089000000D-01 .6210000000D-03 .3380000000D-01 -.5372800000D+01 -.1546800000D+01 -.3783000000D+01 -.5210400000D+01 -.1856000000D+00 -.1100000000D-03 .9268600000D+01 .1129200000D+00 .7820000000D-03 .7580000000D-01 -.3626735000D+01 -.5128700000D+01 -.9153000000D+00 -.3468900000D+01 +1 1420110824201110132455797.5 -.3170000000D-01 -.4100000000D-03 .8851900000D+01 .1026200000D+00 .5950000000D-03 .6690000000D-01 -.8350740000D+00 -.2257000000D+01 -.4551900000D+01 -.2355400000D+01 -.4010000000D-01 -.4700000000D-03 .3426500000D+01 .4890000000D-01 .4050000000D-03 .2120000000D-01 -.4437310000D+00 -.4267300000D+01 -.1343000000D+00 -.1646900000D+01 -.2020000000D+00 -.2000000000D-03 .9304300000D+01 .1039300000D+00 .5500000000D-03 .7320000000D-01 -.5494141000D+01 -.8815000000D+00 -.3013200000D+01 -.6869000000D+00 +1 1520111013201112022455847.5 -.3780000000D-01 .2600000000D-03 .9393000000D+01 .7354000000D-01 .3700000000D-03 .6740000000D-01 -.2634027000D+01 -.4242500000D+01 -.2591000000D+00 -.5772700000D+01 -.7440000000D-01 -.1800000000D-03 .3082500000D+01 .4014000000D-01 .2630000000D-03 .2720000000D-01 -.1134305000D+01 -.2675000000D+00 -.2675900000D+01 -.4024500000D+01 -.2069000000D+00 .5000000000D-03 .8897900000D+01 .9158000000D-01 .3440000000D-03 .6460000000D-01 -.1049311000D+01 -.2791500000D+01 -.5195300000D+01 -.4242900000D+01 +1 1620111202201201212455897.5 -.2980000000D-01 -.6500000000D-03 .9105600000D+01 .5397000000D-01 .4360000000D-03 .7110000000D-01 -.4294556000D+01 -.6080100000D+01 -.2761100000D+01 -.2847000000D+01 -.8370000000D-01 .2600000000D-03 .4460700000D+01 .2501000000D-01 .2370000000D-03 .4020000000D-01 -.2262607000D+01 -.2310500000D+01 -.5431400000D+01 -.6247000000D+00 -.1721000000D+00 -.4800000000D-03 .8561000000D+01 .7195000000D-01 .6070000000D-03 .6130000000D-01 -.2834135000D+01 -.4511700000D+01 -.1340200000D+01 -.1424900000D+01 +1 1720120121201203112455947.5 -.5430000000D-01 -.2100000000D-02 .8718800000D+01 .4550000000D-02 .5600000000D-03 .5960000000D-01 -.5798000000D+01 -.5106900000D+01 -.4261300000D+01 -.5741800000D+01 -.7640000000D-01 .1390000000D-02 .5114900000D+01 .1040000000D-01 .2640000000D-03 .3220000000D-01 -.3597191000D+01 -.1839100000D+01 -.1769000000D+00 -.3668600000D+01 -.2095000000D+00 .8500000000D-03 .8525800000D+01 .5020000000D-02 .7410000000D-03 .5760000000D-01 -.4405233000D+01 -.3621200000D+01 -.2670900000D+01 -.4632100000D+01 +1 1820120311201204302455997.5 -.1618000000D+00 -.1170000000D-02 .9059400000D+01 .4773000000D-01 .8440000000D-03 .6840000000D-01 -.6787210000D+00 -.5505500000D+01 -.2324500000D+01 -.2444400000D+01 -.8500000000D-02 .6900000000D-03 .4439100000D+01 .2288000000D-01 .4010000000D-03 .3140000000D-01 -.4849812000D+01 -.1471400000D+01 -.4951200000D+01 -.4324000000D+00 -.1270000000D+00 .1550000000D-02 .8631900000D+01 .6049000000D-01 .1037000000D-02 .6400000000D-01 -.5507136000D+01 -.3896300000D+01 -.7848000000D+00 -.9745000000D+00 +1 1920120430201206192456047.5 -.2260000000D+00 .4500000000D-03 .9142300000D+01 .3593000000D-01 .5240000000D-03 .7370000000D-01 -.1974214000D+01 -.3512600000D+01 -.4306600000D+01 -.5817900000D+01 .3300000000D-01 .8100000000D-03 .4313800000D+01 .1762000000D-01 .2680000000D-03 .4330000000D-01 -.6268203000D+01 -.1625000000D+00 -.1245800000D+01 -.3619600000D+01 -.6950000000D-01 .8900000000D-03 .8565400000D+01 .4800000000D-01 .5200000000D-03 .6080000000D-01 -.4970230000D+00 -.2104300000D+01 -.2709600000D+01 -.4308800000D+01 +1 2020120619201208082456097.5 -.1870000000D+00 .9000000000D-04 .8681300000D+01 .7852000000D-01 .5720000000D-03 .6590000000D-01 -.3611060000D+01 -.5293800000D+01 -.4843000000D+00 -.2986400000D+01 .6190000000D-01 .5000000000D-03 .5382600000D+01 .3940000000D-01 .4450000000D-03 .4870000000D-01 -.1458317000D+01 -.2160400000D+01 -.3957300000D+01 -.6518000000D+00 -.2220000000D-01 -.1490000000D-02 .8375000000D+01 .9445000000D-01 .5410000000D-03 .6100000000D-01 -.2240423000D+01 -.3795600000D+01 -.5261100000D+01 -.1585700000D+01 +1 2120120808201209272456147.5 -.1799000000D+00 .4400000000D-03 .7874500000D+01 .1067600000D+00 .6180000000D-03 .5600000000D-01 -.5445352000D+01 -.8974000000D+00 -.2468900000D+01 -.3623000000D+00 .9770000000D-01 .1700000000D-03 .6289100000D+01 .5723000000D-01 .5240000000D-03 .5140000000D-01 -.3086424000D+01 -.4471000000D+01 -.2476000000D+00 -.4052400000D+01 -.8510000000D-01 .0000000000D+00 .8614100000D+01 .1141200000D+00 .6870000000D-03 .6230000000D-01 -.4164315000D+01 -.5648300000D+01 -.1174900000D+01 -.5287800000D+01 +1 2220120927201211162456197.5 -.1826000000D+00 .1010000000D-02 .7466800000D+01 .1332200000D+00 .8010000000D-03 .5150000000D-01 -.1226465000D+01 -.2769500000D+01 -.4576200000D+01 -.4396300000D+01 .9540000000D-01 -.4900000000D-03 .6106000000D+01 .6092000000D-01 .6940000000D-03 .3990000000D-01 -.4815842000D+01 -.5733000000D+00 -.2807200000D+01 -.1268900000D+01 -.1042000000D+00 -.1070000000D-02 .9166000000D+01 .1176200000D+00 .8010000000D-03 .6830000000D-01 -.6123335000D+01 -.1339600000D+01 -.3135700000D+01 -.2790900000D+01 +1 2320121116201301052456247.5 -.9910000000D-01 -.4400000000D-03 .8427100000D+01 .1411900000D+00 .1081000000D-02 .6510000000D-01 -.3381379000D+01 -.4760000000D+01 -.6258000000D+00 -.1995800000D+01 .8100000000D-01 -.6200000000D-03 .4204800000D+01 .5985000000D-01 .6850000000D-03 .2330000000D-01 -.1369530000D+00 -.3381800000D+01 -.5521900000D+01 -.4312900000D+01 -.1505000000D+00 -.7400000000D-03 .9338100000D+01 .1217000000D+00 .9750000000D-03 .7430000000D-01 -.1795031000D+01 -.3366400000D+01 -.5104800000D+01 -.2318000000D+00 +1 2420130105201302242456297.5 -.1376000000D+00 .1560000000D-02 .9385400000D+01 .1217600000D+00 .9000000000D-03 .7000000000D-01 -.5382064000D+01 -.6831000000D+00 -.2747700000D+01 -.5609300000D+01 .5120000000D-01 .5800000000D-03 .2789700000D+01 .5885000000D-01 .7000000000D-03 .2670000000D-01 -.8632680000D+00 -.6126000000D+01 -.2120000000D+01 -.5457000000D+00 -.1765000000D+00 .3000000000D-03 .8916400000D+01 .1384900000D+00 .1032000000D-02 .7090000000D-01 -.3794067000D+01 -.5432200000D+01 -.1031900000D+01 -.3918200000D+01 +1 2520130224201304152456347.5 -.6540000000D-01 .6700000000D-03 .8945900000D+01 .1146000000D+00 .6420000000D-03 .6120000000D-01 -.1021870000D+01 -.2820800000D+01 -.4595900000D+01 -.2937700000D+01 .6310000000D-01 .1200000000D-03 .4918300000D+01 .5460000000D-01 .6070000000D-03 .3790000000D-01 -.2008259000D+01 -.2696500000D+01 -.4701200000D+01 -.3847200000D+01 -.1801000000D+00 -.8900000000D-03 .8523400000D+01 .1441400000D+00 .8980000000D-03 .6260000000D-01 -.5886616000D+01 -.1216500000D+01 -.3244800000D+01 -.1482800000D+01 +1 2620130415201306042456397.5 -.1200000000D-01 .1010000000D-02 .7899100000D+01 .1208700000D+00 .6280000000D-03 .5530000000D-01 -.3023488000D+01 -.4759900000D+01 -.1410000000D+00 -.4823000000D+00 .9940000000D-01 -.4300000000D-03 .6155200000D+01 .6302000000D-01 .5930000000D-03 .3870000000D-01 -.3729878000D+01 -.5241400000D+01 -.1143600000D+01 -.1169700000D+01 -.2181000000D+00 .6700000000D-03 .8750400000D+01 .1299800000D+00 .8200000000D-03 .6630000000D-01 -.1700735000D+01 -.3208500000D+01 -.5217000000D+01 -.5458600000D+01 +1 2720130604201307242456447.5 .3020000000D-01 .2100000000D-02 .7672200000D+01 .1274200000D+00 .7320000000D-03 .6090000000D-01 -.5148446000D+01 -.3505000000D+00 -.2320300000D+01 -.4280900000D+01 .5670000000D-01 -.5100000000D-03 .5621500000D+01 .5541000000D-01 .6450000000D-03 .3210000000D-01 -.5485833000D+01 -.1453000000D+01 -.3736100000D+01 -.4551500000D+01 -.1781000000D+00 -.1200000000D-03 .9220800000D+01 .1182200000D+00 .8220000000D-03 .7430000000D-01 -.3688212000D+01 -.5183000000D+01 -.9466000000D+00 -.2857900000D+01 +1 2820130724201309122456497.5 .1277000000D+00 -.1800000000D-03 .8665900000D+01 .1132200000D+00 .7270000000D-03 .6650000000D-01 -.9124330000D+00 -.2304900000D+01 -.4514900000D+01 -.1659800000D+01 .4030000000D-01 -.1480000000D-02 .3683300000D+01 .5035000000D-01 .4870000000D-03 .1890000000D-01 -.6907140000D+00 -.4196800000D+01 -.6530000000D-01 -.1161400000D+01 -.1939000000D+00 .6900000000D-03 .9351400000D+01 .1110200000D+00 .6480000000D-03 .7460000000D-01 -.5585074000D+01 -.9377000000D+00 -.3022700000D+01 -.1124000000D+00 +1 2920130912201311012456547.5 .1323000000D+00 .7000000000D-03 .9366500000D+01 .8695000000D-01 .5000000000D-03 .6820000000D-01 -.2771270000D+01 -.4332400000D+01 -.1611000000D+00 -.5170600000D+01 -.4010000000D-01 -.1190000000D-02 .2799200000D+01 .4488000000D-01 .3670000000D-03 .2600000000D-01 -.1418492000D+01 -.3537000000D+00 -.2555400000D+01 -.3475500000D+01 -.1584000000D+00 .7800000000D-03 .9017700000D+01 .1020100000D+00 .4190000000D-03 .6750000000D-01 -.1176142000D+01 -.2907400000D+01 -.4917300000D+01 -.3665500000D+01 +1 3020131101201312212456597.5 .1572000000D+00 -.5500000000D-03 .9116500000D+01 .7169000000D-01 .3310000000D-03 .6610000000D-01 -.4514741000D+01 -.6259200000D+01 -.1939200000D+01 -.2382000000D+01 -.1015000000D+00 -.6300000000D-03 .4396100000D+01 .3491000000D-01 .2900000000D-03 .4200000000D-01 -.2486407000D+01 -.2622100000D+01 -.4798900000D+01 -.2110000000D+00 -.1091000000D+00 .0000000000D+00 .8588200000D+01 .9244000000D-01 .3250000000D-03 .6160000000D-01 -.3050928000D+01 -.4720300000D+01 -.6112000000D+00 -.9634000000D+00 +1 3120131221201402092456647.5 .1209000000D+00 -.3000000000D-04 .8418300000D+01 .6801000000D-01 .3940000000D-03 .6490000000D-01 -.6211203000D+01 -.1752500000D+01 -.4542100000D+01 -.5788700000D+01 -.1259000000D+00 -.1700000000D-03 .5669600000D+01 .2843000000D-01 .2260000000D-03 .4890000000D-01 -.3941565000D+01 -.4852800000D+01 -.1296400000D+01 -.3356400000D+01 -.1125000000D+00 .4300000000D-03 .8523500000D+01 .7575000000D-01 .4150000000D-03 .6580000000D-01 -.4871300000D+01 -.1405000000D+00 -.2994000000D+01 -.4328200000D+01 +1 3220140209201403312456697.5 .1285000000D+00 -.1460000000D-02 .7860100000D+01 .3385000000D-01 .8700000000D-03 .6010000000D-01 -.1551024000D+01 -.3367100000D+01 -.1868000000D+00 -.2602300000D+01 -.1420000000D+00 .3800000000D-03 .6126400000D+01 .1068000000D-01 .3170000000D-03 .4890000000D-01 -.5403616000D+01 -.4442000000D+00 -.3666400000D+01 -.1372000000D+00 -.1053000000D+00 -.1320000000D-02 .8741700000D+01 .3478000000D-01 .9000000000D-03 .6720000000D-01 -.2335410000D+00 -.1647800000D+01 -.4810500000D+01 -.1243500000D+01 +1 3320140331201405202456747.5 .2340000000D-01 -.1630000000D-02 .7885300000D+01 .7142000000D-01 .7190000000D-03 .6520000000D-01 -.2827143000D+01 -.1389200000D+01 -.4549000000D+01 -.5530300000D+01 -.1095000000D+00 .7500000000D-03 .6151500000D+01 .2551000000D-01 .3630000000D-03 .4860000000D-01 -.4114060000D+00 -.4761400000D+01 -.1659800000D+01 -.3119100000D+01 -.1547000000D+00 -.2200000000D-03 .8744800000D+01 .7193000000D-01 .6990000000D-03 .8010000000D-01 -.1512121000D+01 -.5985400000D+01 -.2894200000D+01 -.3958900000D+01 +1 3420140520201407092456797.5 -.4470000000D-01 -.1050000000D-02 .8259700000D+01 .1591000000D-01 .6920000000D-03 .6290000000D-01 -.3939763000D+01 -.5177900000D+01 -.6094100000D+01 -.2374300000D+01 -.8070000000D-01 .7500000000D-03 .5967100000D+01 .1439000000D-01 .3320000000D-03 .5190000000D-01 -.1683364000D+01 -.2455700000D+01 -.3514200000D+01 -.2840000000D-01 -.1799000000D+00 -.6100000000D-03 .8427700000D+01 .1658000000D-01 .7650000000D-03 .6640000000D-01 -.2631547000D+01 -.4134600000D+01 -.4383800000D+01 -.9175000000D+00 +1 3520140709201408282456847.5 -.1037000000D+00 .1250000000D-02 .7865400000D+01 .8195000000D-01 .5520000000D-03 .5530000000D-01 -.5538267000D+01 -.9640000000D+00 -.2182700000D+01 -.5836000000D+01 -.3300000000D-01 .9000000000D-04 .6368100000D+01 .4692000000D-01 .4180000000D-03 .5200000000D-01 -.3205141000D+01 -.4527600000D+01 -.1303000000D+00 -.3365200000D+01 -.1926000000D+00 .3100000000D-03 .8495000000D+01 .8944000000D-01 .6210000000D-03 .6680000000D-01 -.4271603000D+01 -.5683800000D+01 -.9030000000D+00 -.4406700000D+01 +1 3620140828201410172456897.5 -.6190000000D-01 .1170000000D-02 .7414200000D+01 .1228100000D+00 .6990000000D-03 .4870000000D-01 -.1209550000D+01 -.2799300000D+01 -.4441800000D+01 -.3396900000D+01 -.3090000000D-01 .4400000000D-03 .6344300000D+01 .5920000000D-01 .6300000000D-03 .4340000000D-01 -.4881183000D+01 -.5163000000D+00 -.2741200000D+01 -.5023000000D+00 -.1902000000D+00 -.8700000000D-03 .9024800000D+01 .1129000000D+00 .7750000000D-03 .6640000000D-01 -.6147123000D+01 -.1325400000D+01 -.3133900000D+01 -.1899900000D+01 +1 3720141017201412062456947.5 .3750000000D-01 .4600000000D-03 .8151500000D+01 .1404000000D+00 .9850000000D-03 .5860000000D-01 -.3359517000D+01 -.4750600000D+01 -.5527000000D+00 -.1068400000D+01 -.8800000000D-02 .9200000000D-03 .4760700000D+01 .5820000000D-01 .6970000000D-03 .2490000000D-01 -.2386240000D+00 -.3234800000D+01 -.5345600000D+01 -.3672100000D+01 -.2357000000D+00 .8100000000D-03 .9354800000D+01 .1197500000D+00 .9610000000D-03 .7220000000D-01 -.1794322000D+01 -.3347300000D+01 -.5094500000D+01 -.5741900000D+01 +1 3820141206201501252456997.5 .3820000000D-01 .1580000000D-02 .9301600000D+01 .1212200000D+00 .9440000000D-03 .6580000000D-01 -.5392903000D+01 -.6267000000D+00 -.2656100000D+01 -.4731300000D+01 .4180000000D-01 .1670000000D-02 .2815900000D+01 .6083000000D-01 .7160000000D-03 .2270000000D-01 -.1153581000D+01 -.5975600000D+01 -.1976400000D+01 -.6056500000D+01 -.1815000000D+00 .6800000000D-03 .8986000000D+01 .1375900000D+00 .1074000000D-02 .7390000000D-01 -.3777760000D+01 -.5411600000D+01 -.9961000000D+00 -.3196300000D+01 +1 3920150125201503162457047.5 .1133000000D+00 -.4400000000D-03 .9077400000D+01 .1138900000D+00 .7180000000D-03 .6020000000D-01 -.1032390000D+01 -.2796700000D+01 -.4583700000D+01 -.2070000000D+01 .1118000000D+00 .1900000000D-03 .4645800000D+01 .5341000000D-01 .6490000000D-03 .3670000000D-01 -.2099084000D+01 -.2546700000D+01 -.4584600000D+01 -.2991900000D+01 -.1619000000D+00 .6800000000D-03 .8496600000D+01 .1493900000D+00 .9690000000D-03 .6870000000D-01 -.5863753000D+01 -.1209200000D+01 -.3281600000D+01 -.6730000000D+00 +1 4020150316201505052457097.5 .1080000000D+00 .1010000000D-02 .7998000000D+01 .1203600000D+00 .6460000000D-03 .5470000000D-01 -.3016368000D+01 -.4781600000D+01 -.1526000000D+00 -.5937400000D+01 .1511000000D+00 -.1100000000D-03 .6164900000D+01 .6310000000D-01 .5730000000D-03 .3720000000D-01 -.3777166000D+01 -.5193800000D+01 -.1015400000D+01 -.2474000000D+00 -.1267000000D+00 .1460000000D-02 .8676900000D+01 .1365000000D+00 .8290000000D-03 .6390000000D-01 -.1699722000D+01 -.3237600000D+01 -.5309100000D+01 -.4575700000D+01 +1 4120150505201506242457147.5 .1482000000D+00 .1070000000D-02 .7527600000D+01 .1275500000D+00 .7540000000D-03 .6210000000D-01 -.5143253000D+01 -.3738000000D+00 -.2239900000D+01 -.3543800000D+01 .1171000000D+00 -.4900000000D-03 .5912100000D+01 .5861000000D-01 .6330000000D-03 .3260000000D-01 -.5552235000D+01 -.1359200000D+01 -.3636900000D+01 -.3745200000D+01 -.4260000000D-01 -.1000000000D-03 .9190700000D+01 .1212800000D+00 .8040000000D-03 .6770000000D-01 -.3718756000D+01 -.5226300000D+01 -.9648000000D+00 -.2121900000D+01 +1 4220150624201508132457197.5 .1962000000D+00 -.1200000000D-03 .8415800000D+01 .1208200000D+00 .8420000000D-03 .6970000000D-01 -.9496540000D+00 -.2309000000D+01 -.4476000000D+01 -.9248000000D+00 .1044000000D+00 -.1570000000D-02 .4103000000D+01 .5125000000D-01 .5250000000D-03 .1880000000D-01 -.8552930000D+00 -.4065500000D+01 -.6234200000D+01 -.5034000000D+00 -.5890000000D-01 .1330000000D-02 .9375600000D+01 .1140300000D+00 .6910000000D-03 .6970000000D-01 -.5639199000D+01 -.9679000000D+00 -.3000000000D+01 -.5730200000D+01 +1 4320150813201510022457247.5 .2037000000D+00 .5900000000D-03 .9305700000D+01 .9805000000D-01 .6250000000D-03 .7090000000D-01 -.2853033000D+01 -.4371400000D+01 -.2407000000D+00 -.4461100000D+01 .2300000000D-01 -.1100000000D-02 .2636700000D+01 .4698000000D-01 .4250000000D-03 .2350000000D-01 -.1724082000D+01 -.3149000000D+00 -.2511200000D+01 -.2901300000D+01 .5900000000D-02 .3600000000D-03 .9115600000D+01 .1075700000D+00 .5000000000D-03 .6630000000D-01 -.1249036000D+01 -.2960000000D+01 -.4897500000D+01 -.3009500000D+01 +1 4420151002201511212457297.5 .2239000000D+00 -.9400000000D-03 .9209800000D+01 .8192000000D-01 .4140000000D-03 .6480000000D-01 -.4641413000D+01 -.8050000000D-01 -.1935500000D+01 -.1749700000D+01 -.3950000000D-01 -.5400000000D-03 .4050800000D+01 .3915000000D-01 .3820000000D-03 .3960000000D-01 -.2655857000D+01 -.2702500000D+01 -.4771100000D+01 -.5973400000D+01 .3560000000D-01 .6500000000D-03 .8677800000D+01 .1008300000D+00 .4030000000D-03 .6380000000D-01 -.3156230000D+01 -.4832100000D+01 -.3717000000D+00 -.3366000000D+00 +1 4520151121201601102457347.5 .1734000000D+00 .1100000000D-03 .8471000000D+01 .8111000000D-01 .3490000000D-03 .5930000000D-01 -.1227410000D+00 -.1906300000D+01 -.3700300000D+01 -.5283600000D+01 -.5670000000D-01 -.5100000000D-03 .5558100000D+01 .3840000000D-01 .3340000000D-03 .4800000000D-01 -.4140087000D+01 -.5053300000D+01 -.8774000000D+00 -.2919600000D+01 .6280000000D-01 .1010000000D-02 .8526300000D+01 .9342000000D-01 .4110000000D-03 .6640000000D-01 -.5056726000D+01 -.3105000000D+00 -.2257300000D+01 -.3876000000D+01 +1 4620160110201602292457397.5 .1841000000D+00 -.8100000000D-03 .7751700000D+01 .8406000000D-01 .2860000000D-03 .5630000000D-01 -.1929922000D+01 -.3673700000D+01 -.6128200000D+01 -.2465400000D+01 -.9160000000D-01 -.3000000000D-04 .6142400000D+01 .3598000000D-01 .2720000000D-03 .4930000000D-01 -.5726985000D+01 -.1032900000D+01 -.3498400000D+01 -.6139100000D+01 .1071000000D+00 -.2400000000D-03 .8832700000D+01 .8425000000D-01 .4280000000D-03 .7030000000D-01 -.6028510000D+00 -.2067900000D+01 -.4487700000D+01 -.9977000000D+00 +1 4720160229201604192457447.5 .1574000000D+00 .5000000000D-03 .7580500000D+01 .6924000000D-01 .6690000000D-03 .5180000000D-01 -.3739119000D+01 -.5327100000D+01 -.2144000000D+01 -.5753200000D+01 -.8300000000D-01 -.4700000000D-03 .5875300000D+01 .2382000000D-01 .2240000000D-03 .4600000000D-01 -.9907020000D+00 -.3325900000D+01 -.2964000000D+00 -.3017300000D+01 .1167000000D+00 -.4900000000D-03 .9220500000D+01 .6295000000D-01 .6160000000D-03 .7400000000D-01 -.2310510000D+01 -.3883900000D+01 -.7011000000D+00 -.4271800000D+01 +1 4820160419201606082457497.5 .1775000000D+00 -.9500000000D-03 .7667300000D+01 .1869000000D-01 .5580000000D-03 .5170000000D-01 -.5305763000D+01 -.3728500000D+01 -.3331900000D+01 -.2429100000D+01 -.1230000000D+00 -.4200000000D-03 .5475100000D+01 .9170000000D-02 .1470000000D-03 .5200000000D-01 -.2410291000D+01 -.2466500000D+01 -.1538100000D+01 -.6140300000D+01 .5690000000D-01 -.2420000000D-02 .9295600000D+01 .1666000000D-01 .3490000000D-03 .8350000000D-01 -.3817061000D+01 -.2058900000D+01 -.2003700000D+01 -.9287000000D+00 +1 4920160608201607282457547.5 .1385000000D+00 -.2100000000D-03 .7440200000D+01 .4251000000D-01 .1125000000D-02 .5690000000D-01 -.5734000000D-01 -.4739200000D+01 -.1618800000D+01 -.5504400000D+01 -.1343000000D+00 -.9000000000D-04 .6129800000D+01 .1526000000D-01 .4410000000D-03 .4790000000D-01 -.3695867000D+01 -.3218500000D+01 -.5929500000D+01 -.2838000000D+01 -.4870000000D-01 -.1000000000D-02 .9069500000D+01 .3416000000D-01 .1011000000D-02 .6900000000D-01 -.4969476000D+01 -.3279300000D+01 -.1814000000D+00 -.4025200000D+01 +1 5020160728201609162457597.5 .1195000000D+00 .6000000000D-04 .7430800000D+01 .7560000000D-01 .6420000000D-03 .4780000000D-01 -.1467386000D+01 -.2938200000D+01 -.3937400000D+01 -.2500700000D+01 -.1417000000D+00 .1020000000D-02 .6177000000D+01 .3735000000D-01 .4040000000D-03 .4140000000D-01 -.5097042000D+01 -.7469000000D+00 -.2634100000D+01 -.6060600000D+01 -.1063000000D+00 -.2800000000D-03 .9041800000D+01 .7107000000D-01 .5780000000D-03 .6900000000D-01 -.9402400000D-01 -.1476000000D+01 -.2775500000D+01 -.1112200000D+01 +1 5120160916201611052457647.5 .1615000000D+00 .8700000000D-03 .8073500000D+01 .1253100000D+00 .8000000000D-03 .5750000000D-01 -.3422072000D+01 -.4813000000D+01 -.4608000000D+00 -.1326000000D+00 -.1010000000D+00 .1400000000D-02 .4891900000D+01 .5168000000D-01 .6160000000D-03 .2540000000D-01 -.3711380000D+00 -.3280300000D+01 -.5311600000D+01 -.2866700000D+01 -.1354000000D+00 .1340000000D-02 .9361800000D+01 .1067300000D+00 .8140000000D-03 .6590000000D-01 -.1871843000D+01 -.3410000000D+01 -.5084500000D+01 -.4892400000D+01 +1 5220161105201612252457697.5 .1832000000D+00 .7400000000D-03 .9199300000D+01 .1157900000D+00 .9060000000D-03 .6850000000D-01 -.5425158000D+01 -.6056000000D+00 -.2574200000D+01 -.3839700000D+01 -.1930000000D-01 .1860000000D-02 .2892200000D+01 .5983000000D-01 .6820000000D-03 .2350000000D-01 -.1393082000D+01 -.5936300000D+01 -.1888000000D+01 -.5206800000D+01 -.4610000000D-01 .3900000000D-03 .9093800000D+01 .1292300000D+00 .9820000000D-03 .6710000000D-01 -.3796827000D+01 -.5443200000D+01 -.9586000000D+00 -.2425600000D+01 +1 5320161225201702132457747.5 .2208000000D+00 -.1220000000D-02 .9167000000D+01 .1097700000D+00 .7980000000D-03 .6450000000D-01 -.1048464000D+01 -.2750100000D+01 -.4539100000D+01 -.1174600000D+01 .6370000000D-01 .2400000000D-03 .4378800000D+01 .5305000000D-01 .6870000000D-03 .3760000000D-01 -.2215378000D+01 -.2399400000D+01 -.4493000000D+01 -.2130500000D+01 -.4140000000D-01 .1870000000D-02 .8490500000D+01 .1470200000D+00 .9490000000D-03 .6790000000D-01 -.5848355000D+01 -.1215400000D+01 -.3253100000D+01 -.6202900000D+01 +1 5420170213201704042457797.5 .1698000000D+00 .2600000000D-03 .8135800000D+01 .1194300000D+00 .6930000000D-03 .5410000000D-01 -.2996027000D+01 -.4775700000D+01 -.1976000000D+00 -.4977500000D+01 .9820000000D-01 .4100000000D-03 .6135700000D+01 .6186000000D-01 .5760000000D-03 .4110000000D-01 -.3830919000D+01 -.5111300000D+01 -.8728000000D+00 -.5581400000D+01 .4980000000D-01 .1150000000D-02 .8555300000D+01 .1398600000D+00 .8160000000D-03 .6650000000D-01 -.1687715000D+01 -.3248300000D+01 -.5358900000D+01 -.3708600000D+01 +1 5520170404201705242457847.5 .1751000000D+00 -.7300000000D-03 .7408900000D+01 .1282500000D+00 .7430000000D-03 .5820000000D-01 -.5103914000D+01 -.3933000000D+00 -.2214300000D+01 -.2756800000D+01 .8760000000D-01 -.2000000000D-03 .6216800000D+01 .6067000000D-01 .6150000000D-03 .3650000000D-01 -.5602417000D+01 -.1256400000D+01 -.3518400000D+01 -.2874200000D+01 .1255000000D+00 -.1000000000D-04 .9129300000D+01 .1225100000D+00 .7550000000D-03 .6520000000D-01 -.3730891000D+01 -.5250300000D+01 -.9695000000D+00 -.1240900000D+01 +1 5620170524201707132457897.5 .1319000000D+00 -.1600000000D-03 .8103800000D+01 .1265400000D+00 .9000000000D-03 .7240000000D-01 -.9529180000D+00 -.2300600000D+01 -.4441300000D+01 -.2197000000D+00 .9550000000D-01 -.7000000000D-03 .4650000000D+01 .5114000000D-01 .5420000000D-03 .2330000000D-01 -.9681440000D+00 -.3912000000D+01 -.6062400000D+01 -.6047600000D+01 .1094000000D+00 .1290000000D-02 .9389400000D+01 .1129300000D+00 .6980000000D-03 .6600000000D-01 -.5668870000D+01 -.9773000000D+00 -.2908100000D+01 -.4903500000D+01 +1 5720170713201709012457947.5 .1354000000D+00 .3000000000D-04 .9186600000D+01 .1068800000D+00 .7380000000D-03 .7560000000D-01 -.2899319000D+01 -.4367900000D+01 -.2869000000D+00 -.3760200000D+01 .5810000000D-01 -.9000000000D-04 .2767300000D+01 .4850000000D-01 .4520000000D-03 .2260000000D-01 -.2034311000D+01 -.2118000000D+00 -.2418600000D+01 -.2352200000D+01 .1724000000D+00 -.5300000000D-03 .9165700000D+01 .1100300000D+00 .5810000000D-03 .6370000000D-01 -.1286408000D+01 -.2968100000D+01 -.4848000000D+01 -.2231300000D+01 +1 5820170901201710212457997.5 .1315000000D+00 -.8900000000D-03 .9312400000D+01 .8948000000D-01 .4610000000D-03 .6790000000D-01 -.4717981000D+01 -.1461000000D+00 -.2076800000D+01 -.1017400000D+01 .4140000000D-01 .3000000000D-04 .3712400000D+01 .4103000000D-01 .4250000000D-03 .3560000000D-01 -.2819333000D+01 -.2670600000D+01 -.4762400000D+01 -.5352900000D+01 .1576000000D+00 .7300000000D-03 .8731400000D+01 .1066600000D+00 .4880000000D-03 .6290000000D-01 -.3208503000D+01 -.4881300000D+01 -.3879000000D+00 -.5912700000D+01 +1 5920171021201712102458047.5 .8400000000D-01 -.2000000000D-04 .8610500000D+01 .8647000000D-01 .3980000000D-03 .5910000000D-01 -.2306610000D+00 -.2021300000D+01 -.3610700000D+01 -.4587300000D+01 .5800000000D-01 -.4000000000D-03 .5378800000D+01 .4184000000D-01 .3980000000D-03 .4550000000D-01 -.4268873000D+01 -.5121700000D+01 -.8268000000D+00 -.2359400000D+01 .1867000000D+00 .3200000000D-03 .8526500000D+01 .1016800000D+00 .5150000000D-03 .6770000000D-01 -.5145823000D+01 -.4087000000D+00 -.2186600000D+01 -.3276600000D+01 +1 6020171210201801292458097.5 .8460000000D-01 -.1670000000D-02 .7788800000D+01 .9564000000D-01 .4050000000D-03 .5440000000D-01 -.2091019000D+01 -.3793200000D+01 -.5428400000D+01 -.1912200000D+01 .2700000000D-01 .1700000000D-03 .6097800000D+01 .4591000000D-01 .4040000000D-03 .4610000000D-01 -.5899152000D+01 -.1151800000D+01 -.3366400000D+01 -.5633900000D+01 .1980000000D+00 .7000000000D-04 .8788000000D+01 .1002500000D+00 .5860000000D-03 .7240000000D-01 -.7614540000D+00 -.2207800000D+01 -.4213900000D+01 -.5082000000D+00 +1 6120180129201803202458147.5 .6600000000D-02 -.2400000000D-03 .7679200000D+01 .1031200000D+00 .4260000000D-03 .5720000000D-01 -.4049873000D+01 -.5557600000D+01 -.1288700000D+01 -.5533100000D+01 .3820000000D-01 -.7500000000D-03 .5657000000D+01 .4063000000D-01 .3970000000D-03 .3890000000D-01 -.1250469000D+01 -.3544300000D+01 -.5708000000D+01 -.2565900000D+01 .2098000000D+00 .3600000000D-03 .9243900000D+01 .9442000000D-01 .5000000000D-03 .7390000000D-01 -.2594017000D+01 -.4113300000D+01 -.6238000000D+01 -.3966100000D+01 +1 6220180320201805092458197.5 -.2260000000D-01 -.6600000000D-03 .8464400000D+01 .9069000000D-01 .4390000000D-03 .6370000000D-01 -.5972005000D+01 -.1086700000D+01 -.3464600000D+01 -.2783500000D+01 -.1000000000D-03 -.6800000000D-03 .4110600000D+01 .3819000000D-01 .2320000000D-03 .2550000000D-01 -.2720845000D+01 -.6052500000D+01 -.1865200000D+01 -.5483600000D+01 .2241000000D+00 -.5200000000D-03 .9401900000D+01 .8420000000D-01 .3410000000D-03 .6950000000D-01 -.4375296000D+01 -.6028900000D+01 -.1987100000D+01 -.1164900000D+01 +1 6320180509201806282458247.5 -.4970000000D-01 .6700000000D-03 .9171900000D+01 .6292000000D-01 .5480000000D-03 .7610000000D-01 -.1438294000D+01 -.2914900000D+01 -.5908500000D+01 -.6182400000D+01 -.4500000000D-01 -.3500000000D-03 .2723600000D+01 .3246000000D-01 .3300000000D-03 .2000000000D-01 -.3760980000D+01 -.1822300000D+01 -.5175700000D+01 -.1564600000D+01 .1824000000D+00 .5600000000D-03 .9203300000D+01 .7196000000D-01 .6250000000D-03 .6500000000D-01 -.6105022000D+01 -.1540400000D+01 -.4658100000D+01 -.4631800000D+01 +1 6420180628201808172458297.5 -.3030000000D-01 .2740000000D-02 .9331800000D+01 .1560000000D-01 .2260000000D-03 .6240000000D-01 -.2960623000D+01 -.1543300000D+01 -.8014000000D+00 -.2853900000D+01 -.5680000000D-01 .7200000000D-03 .2393500000D+01 .2097000000D-01 .2640000000D-03 .1770000000D-01 -.4775039000D+01 -.1050500000D+01 -.5485200000D+01 -.4517400000D+01 .2349000000D+00 -.2700000000D-03 .9073500000D+01 .1329000000D-01 .2930000000D-03 .6100000000D-01 -.1376032000D+01 -.2060000000D-01 -.5985900000D+01 -.1643800000D+01 +1 6520180817201810062458347.5 .1134000000D+00 .1040000000D-02 .9237700000D+01 .7630000000D-02 .8310000000D-03 .6370000000D-01 -.4160118000D+01 -.2670400000D+01 -.5737900000D+01 -.5905500000D+01 -.4460000000D-01 -.3300000000D-03 .2242600000D+01 .9040000000D-02 .4490000000D-03 .1840000000D-01 -.2618530000D+00 -.7553000000D+00 -.4807600000D+01 -.1832900000D+01 .1663000000D+00 -.5200000000D-03 .9228200000D+01 .1258000000D-01 .9310000000D-03 .6470000000D-01 -.2560219000D+01 -.1250100000D+01 -.4341500000D+01 -.4424300000D+01 +1 6620181006201811252458397.5 .1563000000D+00 .2000000000D-04 .9334200000D+01 .7094000000D-01 .5550000000D-03 .7580000000D-01 -.5667146000D+01 -.8670000000D+00 -.2207800000D+01 -.3149100000D+01 -.4920000000D-01 .4400000000D-03 .2631300000D+01 .4047000000D-01 .4050000000D-03 .2870000000D-01 -.1258962000D+01 -.1310000000D+00 -.1974900000D+01 -.4397200000D+01 .1746000000D+00 -.7500000000D-03 .9039800000D+01 .8319000000D-01 .6530000000D-03 .6170000000D-01 -.4065949000D+01 -.5700000000D+01 -.6677000000D+00 -.1683400000D+01 +1 6720181125201901142458447.5 .1490000000D+00 -.8100000000D-03 .9140000000D+01 .9316000000D-01 .7230000000D-03 .7010000000D-01 -.1148054000D+01 -.2795200000D+01 -.4453000000D+01 -.4053000000D+00 -.3690000000D-01 -.1300000000D-03 .4371700000D+01 .4831000000D-01 .6050000000D-03 .4160000000D-01 -.2324522000D+01 -.2491700000D+01 -.4516100000D+01 -.1330900000D+01 .1178000000D+00 .1510000000D-02 .8492300000D+01 .1240500000D+00 .7380000000D-03 .6140000000D-01 -.5950437000D+01 -.1317200000D+01 -.3137000000D+01 -.5421000000D+01 +1 6820190114201903052458497.5 .1151000000D+00 -.4500000000D-03 .8252600000D+01 .1123900000D+00 .7040000000D-03 .6000000000D-01 -.3019164000D+01 -.4782500000D+01 -.2307000000D+00 -.4071200000D+01 -.2890000000D-01 .5700000000D-03 .6069000000D+01 .5883000000D-01 .5660000000D-03 .4720000000D-01 -.3913303000D+01 -.5072100000D+01 -.7967000000D+00 -.4755400000D+01 .1908000000D+00 -.1200000000D-03 .8432900000D+01 .1318800000D+00 .7360000000D-03 .6280000000D-01 -.1715143000D+01 -.3276200000D+01 -.5311300000D+01 -.2896000000D+01 +1 6920190305201904242458547.5 .9120000000D-01 -.1860000000D-02 .7415100000D+01 .1260400000D+00 .6920000000D-03 .5290000000D-01 -.5066046000D+01 -.4247000000D+00 -.2227200000D+01 -.1842100000D+01 -.2550000000D-01 .9000000000D-04 .6417400000D+01 .6155000000D-01 .5860000000D-03 .4220000000D-01 -.5661488000D+01 -.1176100000D+01 -.3431900000D+01 -.2027600000D+01 .2065000000D+00 .2100000000D-03 .9005500000D+01 .1203200000D+00 .6970000000D-03 .6630000000D-01 -.3745914000D+01 -.5260200000D+01 -.9517000000D+00 -.3737000000D+00 +1 7020190424201906132458597.5 -.1670000000D-01 -.2400000000D-03 .7815800000D+01 .1290300000D+00 .8560000000D-03 .6730000000D-01 -.9290570000D+00 -.2311800000D+01 -.4411100000D+01 -.5787400000D+01 -.4000000000D-03 .6100000000D-03 .5186900000D+01 .5015000000D-01 .5540000000D-03 .2990000000D-01 -.1062668000D+01 -.3743800000D+01 -.5889900000D+01 -.5383500000D+01 .1981000000D+00 .5800000000D-03 .9379000000D+01 .1091700000D+00 .6870000000D-03 .6890000000D-01 -.5687117000D+01 -.9697000000D+00 -.2796600000D+01 -.4042800000D+01 +1 7120190613201908022458647.5 -.1690000000D-01 -.7200000000D-03 .8991500000D+01 .1127700000D+00 .7990000000D-03 .7490000000D-01 -.2920902000D+01 -.4340700000D+01 -.2787000000D+00 -.3075900000D+01 .2660000000D-01 .1210000000D-02 .3149500000D+01 .4869000000D-01 .4580000000D-03 .2240000000D-01 -.2316015000D+01 -.9350000000D-01 -.2255600000D+01 -.1870600000D+01 .2277000000D+00 -.1200000000D-02 .9199900000D+01 .1090500000D+00 .6710000000D-03 .6600000000D-01 -.1300505000D+01 -.2942400000D+01 -.4752800000D+01 -.1372400000D+01 +1 7220190802201909212458697.5 -.5540000000D-01 -.1700000000D-03 .9395900000D+01 .9415000000D-01 .5120000000D-03 .7210000000D-01 -.4763321000D+01 -.1592000000D+00 -.2157500000D+01 -.2935000000D+00 .7590000000D-01 .7000000000D-03 .3419100000D+01 .4272000000D-01 .4450000000D-03 .3190000000D-01 -.3024247000D+01 -.2568200000D+01 -.4715800000D+01 -.4668200000D+01 .1781000000D+00 .3300000000D-03 .8750300000D+01 .1116600000D+00 .5820000000D-03 .6150000000D-01 -.3221873000D+01 -.4887600000D+01 -.4390000000D+00 -.5070200000D+01 +1 7320190921201911102458747.5 -.6850000000D-01 .6000000000D-04 .8790000000D+01 .8878000000D-01 .4080000000D-03 .6300000000D-01 -.2887870000D+00 -.2099500000D+01 -.3630400000D+01 -.3842000000D+01 .1290000000D+00 -.3000000000D-04 .5198200000D+01 .4200000000D-01 .4190000000D-03 .4180000000D-01 -.4378899000D+01 -.5102200000D+01 -.7537000000D+00 -.1686400000D+01 .1864000000D+00 -.8900000000D-03 .8489500000D+01 .1085500000D+00 .5700000000D-03 .6430000000D-01 -.5181238000D+01 -.4663000000D+00 -.2258100000D+01 -.2582900000D+01 +1 7420191110201912302458797.5 -.6230000000D-01 -.1480000000D-02 .7845900000D+01 .9782000000D-01 .5010000000D-03 .5550000000D-01 -.2163644000D+01 -.3878100000D+01 -.5330200000D+01 -.1200100000D+01 .1128000000D+00 .3500000000D-03 .6126800000D+01 .4917000000D-01 .4380000000D-03 .4430000000D-01 -.6011212000D+01 -.1182600000D+01 -.3281600000D+01 -.4995400000D+01 .1366000000D+00 -.1100000000D-03 .8713700000D+01 .1083200000D+00 .6790000000D-03 .7170000000D-01 -.8410940000D+00 -.2290700000D+01 -.4230300000D+01 -.6212300000D+01 +1 7520191230202002182458847.5 -.1287000000D+00 -.2700000000D-03 .7582700000D+01 .1156600000D+00 .6250000000D-03 .5670000000D-01 -.4167883000D+01 -.5655600000D+01 -.1228800000D+01 -.4862400000D+01 .1324000000D+00 -.1290000000D-02 .5795300000D+01 .4861000000D-01 .5380000000D-03 .3740000000D-01 -.1402373000D+01 -.3574700000D+01 -.5746600000D+01 -.1989900000D+01 .1380000000D+00 -.5900000000D-03 .9201300000D+01 .1078100000D+00 .6650000000D-03 .7400000000D-01 -.2728233000D+01 -.4229700000D+01 -.6250900000D+01 -.3438400000D+01 +1 7620200218202004082458897.5 -.1616000000D+00 -.1240000000D-02 .8498700000D+01 .1135200000D+00 .7100000000D-03 .6380000000D-01 -.6186181000D+01 -.1280800000D+01 -.3383100000D+01 -.2297400000D+01 .7540000000D-01 -.1280000000D-02 .4037700000D+01 .4999000000D-01 .4920000000D-03 .2430000000D-01 -.2920975000D+01 -.6224700000D+01 -.1945300000D+01 -.4734300000D+01 .1124000000D+00 -.1050000000D-02 .9400200000D+01 .1048900000D+00 .5860000000D-03 .6860000000D-01 -.4587819000D+01 -.6219300000D+01 -.1765000000D+01 -.7064000000D+00 +1 7720200408202005282458947.5 -.2137000000D+00 .2700000000D-03 .9319400000D+01 .9369000000D-01 .6440000000D-03 .7100000000D-01 -.1789121000D+01 -.3301600000D+01 -.5228300000D+01 -.5903800000D+01 -.6500000000D-02 -.1270000000D-02 .2669100000D+01 .5150000000D-01 .5050000000D-03 .3080000000D-01 -.3699119000D+01 -.2353100000D+01 -.4589200000D+01 -.8554000000D+00 .4440000000D-01 -.2900000000D-03 .9067700000D+01 .1089900000D+00 .5620000000D-03 .6280000000D-01 -.1888480000D+00 -.1877700000D+01 -.3648000000D+01 -.4347900000D+01 +1 7820200528202007172458997.5 -.1948000000D+00 .2900000000D-03 .9079700000D+01 .9052000000D-01 .5260000000D-03 .7130000000D-01 -.3587679000D+01 -.5305600000D+01 -.1056300000D+01 -.3104700000D+01 -.5800000000D-01 -.6400000000D-03 .4269300000D+01 .4212000000D-01 .4210000000D-03 .4260000000D-01 -.4661227000D+01 -.4842300000D+01 -.8316000000D+00 -.3918900000D+01 .3960000000D-01 -.1700000000D-02 .8646600000D+01 .1117900000D+00 .5050000000D-03 .6190000000D-01 -.2123570000D+01 -.3768900000D+01 -.5955400000D+01 -.1684100000D+01 +1 7920200717202009052459047.5 -.2037000000D+00 .4800000000D-03 .8322100000D+01 .8768000000D-01 .7260000000D-03 .6940000000D-01 -.5374532000D+01 -.9582000000D+00 -.4003800000D+01 -.2249000000D+00 -.1045000000D+00 -.5400000000D-03 .5636600000D+01 .3448000000D-01 .3030000000D-03 .4970000000D-01 -.6164005000D+01 -.1059500000D+01 -.4004400000D+01 -.8283000000D+00 -.3870000000D-01 .9700000000D-03 .8721200000D+01 .9195000000D-01 .7260000000D-03 .6380000000D-01 -.4024833000D+01 -.5600300000D+01 -.2311800000D+01 -.5071800000D+01 +1 8020200905202010252459097.5 -.1486000000D+00 .8500000000D-03 .7785200000D+01 .6400000000D-02 .5450000000D-03 .8450000000D-01 -.7420170000D+00 -.4874500000D+01 -.5698100000D+01 -.3348800000D+01 -.1166000000D+00 -.7000000000D-04 .5980100000D+01 .9400000000D-03 .1140000000D-03 .5280000000D-01 -.1372844000D+01 -.3555500000D+01 -.6244600000D+01 -.3921700000D+01 .5900000000D-02 .1230000000D-02 .8884100000D+01 .4660000000D-02 .5640000000D-03 .6630000000D-01 -.5675376000D+01 -.5074400000D+01 -.3695300000D+01 -.1984700000D+01 +1 8120201025202012142459147.5 -.1382000000D+00 .1040000000D-02 .8053000000D+01 .3572000000D-01 .1017000000D-02 .6680000000D-01 -.1884170000D+01 -.5992000000D+00 -.3694700000D+01 -.3700000000D-01 -.1359000000D+00 -.2300000000D-03 .6000100000D+01 .3190000000D-02 .4000000000D-03 .4940000000D-01 -.2667405000D+01 -.1868200000D+01 -.4088600000D+01 -.7906000000D+00 .8060000000D-01 .1460000000D-02 .8634700000D+01 .2780000000D-01 .9930000000D-03 .6300000000D-01 -.5623610000D+00 -.5056400000D+01 -.2088900000D+01 -.5067300000D+01 +1 8220201214202102022459197.5 -.6850000000D-01 -.1800000000D-03 .7947900000D+01 .6635000000D-01 .5610000000D-03 .6330000000D-01 -.3292336000D+01 -.4926700000D+01 -.6102700000D+01 -.3428400000D+01 -.1364000000D+00 .3100000000D-03 .6269000000D+01 .3929000000D-01 .3760000000D-03 .5090000000D-01 -.4126901000D+01 -.5326800000D+01 -.7083000000D+00 -.4104400000D+01 .1533000000D+00 -.8000000000D-03 .8487200000D+01 .7393000000D-01 .4730000000D-03 .6020000000D-01 -.2013015000D+01 -.3489200000D+01 -.4627100000D+01 -.2098200000D+01 +2 8320100101201002102455197.5 -.6200000000D-02 .5700000000D-03 .2336200000D+02 .3798000000D-01 .1055000000D-02 .8200000000D-02 .4139981000D+01 .5388800000D+01 .6104900000D+01 -.1378000000D+01 .5800000000D-02 -.2500000000D-03 .7949000000D+01 .5932000000D-01 .7300000000D-03 .3600000000D-02 .5905416000D+01 .3224700000D+01 .4269400000D+01 -.5685300000D+01 .2700000000D-02 .6000000000D-04 .2213940000D+02 .5497000000D-01 .1077000000D-02 .8200000000D-02 .5688867000D+01 .7214000000D+00 .1141600000D+01 -.2707700000D+01 +2 8420100210201003222455237.5 .3600000000D-02 .1000000000D-03 .2340280000D+02 .8528000000D-01 .2208000000D-02 .1800000000D-02 .2349473000D+01 .4069800000D+01 .8821000000D+00 -.5736200000D+01 .6000000000D-03 .1000000000D-04 .6209900000D+01 .8020000000D-01 .1262000000D-02 .1100000000D-02 .3636621000D+01 .2002300000D+01 .4983100000D+01 -.5088200000D+01 .3400000000D-02 -.4000000000D-04 .2269610000D+02 .1017900000D+00 .2446000000D-02 .2800000000D-02 .3940820000D+01 .5437500000D+01 .2301200000D+01 -.4361500000D+01 +2 8520100322201005012455277.5 -.1000000000D-03 .2600000000D-03 .2323260000D+02 .1005500000D+00 .1167000000D-02 .2600000000D-02 .4341720000D+00 .5260500000D+01 .4663600000D+01 -.1966000000D+01 .2500000000D-02 -.7000000000D-04 .6574000000D+01 .2549000000D-01 .5860000000D-03 .1500000000D-02 .1531334000D+01 .2802000000D+01 .2367500000D+01 -.5400900000D+01 .4000000000D-02 -.5000000000D-04 .2270120000D+02 .1001600000D+00 .1496000000D-02 .4400000000D-02 .2037630000D+01 .4701000000D+00 .6149000000D+01 -.2769700000D+01 +2 8620100501201006102455317.5 .6100000000D-02 -.1000000000D-03 .2345640000D+02 .1833300000D+00 .1148000000D-02 .1600000000D-02 .4565164000D+01 .3011100000D+01 .1566500000D+01 -.9585000000D+00 .1200000000D-02 .0000000000D+00 .7681700000D+01 .7191000000D-01 .7840000000D-03 .1000000000D-02 .6115136000D+01 .5379000000D+00 .5138800000D+01 -.2958000000D+01 .2500000000D-02 .7000000000D-04 .2214030000D+02 .2096800000D+00 .1316000000D-02 .3000000000D-02 .6138701000D+01 .4500500000D+01 .3216500000D+01 -.6172300000D+01 +2 8720100610201007202455357.5 .4000000000D-02 -.4000000000D-04 .2303160000D+02 .2140900000D+00 .1352000000D-02 .7000000000D-03 .2319130000D+01 .6448000000D+00 .5345200000D+01 -.3977000000D+00 .1300000000D-02 .1000000000D-04 .1056910000D+02 .9227000000D-01 .1083000000D-02 .2000000000D-02 .4279892000D+01 .4106900000D+01 .2343500000D+01 -.4892100000D+01 .7800000000D-02 -.1100000000D-03 .2139500000D+02 .2626200000D+00 .1511000000D-02 .5000000000D-02 .3804359000D+01 .2174100000D+01 .6141000000D+00 -.4322700000D+01 +2 8820100720201008292455397.5 .3000000000D-03 .3000000000D-04 .2162830000D+02 .2398400000D+00 .1507000000D-02 .1000000000D-02 .1662600000D-01 .4545000000D+01 .3017700000D+01 -.3991000000D+01 .3400000000D-02 -.5000000000D-04 .1372770000D+02 .1172500000D+00 .1234000000D-02 .2200000000D-02 .2205045000D+01 .1327500000D+01 .5895100000D+01 -.3052200000D+01 .4700000000D-02 .7000000000D-04 .2105890000D+02 .2915300000D+00 .1735000000D-02 .2800000000D-02 .1380545000D+01 .6098900000D+01 .4410500000D+01 -.2962600000D+01 +2 8920100829201010082455437.5 .1400000000D-02 -.1400000000D-03 .1969380000D+02 .2772800000D+00 .1761000000D-02 .1200000000D-02 .3910382000D+01 .2173900000D+01 .6857000000D+00 -.3339900000D+01 .1600000000D-02 .8000000000D-04 .1570640000D+02 .1476500000D+00 .1364000000D-02 .3600000000D-02 .6280818000D+01 .4910800000D+01 .3015400000D+01 -.6228400000D+01 .8300000000D-02 -.1400000000D-03 .2157540000D+02 .3078700000D+00 .2017000000D-02 .2900000000D-02 .5200805000D+01 .3708900000D+01 .1920300000D+01 -.5712200000D+01 +2 9020101008201011172455477.5 -.6400000000D-02 .1000000000D-03 .1845110000D+02 .3274400000D+00 .2136000000D-02 .3500000000D-02 .1383754000D+01 .6079400000D+01 .4449600000D+01 -.1424700000D+01 .7900000000D-02 -.2000000000D-03 .1572440000D+02 .1596600000D+00 .1732000000D-02 .5000000000D-02 .4015815000D+01 .2195400000D+01 .1310000000D-01 -.3788400000D+01 .7900000000D-02 -.1700000000D-03 .2265760000D+02 .3171200000D+00 .2329000000D-02 .3300000000D-02 .2742946000D+01 .1264200000D+01 .5702900000D+01 -.4109300000D+01 +2 9120101117201012272455517.5 -.1900000000D-02 -.1900000000D-03 .1957610000D+02 .3627800000D+00 .2673000000D-02 .5300000000D-02 .5046170000D+01 .3644800000D+01 .1699100000D+01 -.5388000000D+01 -.8000000000D-03 .1700000000D-03 .1307460000D+02 .1452000000D+00 .1984000000D-02 .4400000000D-02 .1789097000D+01 .5483300000D+01 .3307000000D+01 -.5229000000D+00 .2200000000D-02 .0000000000D+00 .2342020000D+02 .3259100000D+00 .2551000000D-02 .1300000000D-02 .2987490000D+00 .5030800000D+01 .3208200000D+01 -.4419900000D+01 +2 9220101227201102052455557.5 -.8600000000D-02 .1500000000D-03 .2232190000D+02 .3403900000D+00 .2891000000D-02 .5500000000D-02 .2493348000D+01 .1085700000D+01 .5314500000D+01 -.2501300000D+01 .5700000000D-02 -.2100000000D-03 .8393500000D+01 .1472200000D+00 .1855000000D-02 .4100000000D-02 .6166882000D+01 .2269100000D+01 .8930000000D-01 -.3561500000D+01 .5000000000D-02 -.2900000000D-03 .2311600000D+02 .3432100000D+00 .2603000000D-02 .3400000000D-02 .4123296000D+01 .2472800000D+01 .6929000000D+00 -.3919900000D+01 +2 9320110205201103172455597.5 -.6000000000D-02 .7000000000D-04 .2346540000D+02 .3036900000D+00 .2454000000D-02 .2500000000D-02 .4830500000D-01 .4720400000D+01 .2807400000D+01 -.3484000000D+00 -.3000000000D-02 .2000000000D-03 .8340400000D+01 .1378200000D+00 .1916000000D-02 .3800000000D-02 .4831133000D+01 .5423600000D+01 .3258200000D+01 -.6890000000D+00 -.6400000000D-02 .1200000000D-03 .2194170000D+02 .3633600000D+00 .2547000000D-02 .1700000000D-02 .1609472000D+01 .6218800000D+01 .4415400000D+01 -.5857000000D+00 +2 9420110317201104262455637.5 -.2400000000D-02 .1000000000D-04 .2211310000D+02 .3000600000D+00 .2068000000D-02 .1200000000D-02 .3917865000D+01 .2146500000D+01 .4065000000D+00 -.4678100000D+01 .3200000000D-02 -.7000000000D-04 .1282380000D+02 .1406600000D+00 .1739000000D-02 .1800000000D-02 .2923322000D+01 .2235400000D+01 .3200000000D+00 -.3284600000D+01 -.6000000000D-03 -.2200000000D-03 .2116200000D+02 .3695700000D+00 .2504000000D-02 .5700000000D-02 .5316448000D+01 .3722400000D+01 .1818600000D+01 -.4835700000D+01 +2 9520110426201106052455677.5 -.3300000000D-02 .2200000000D-03 .1971960000D+02 .3190500000D+00 .1973000000D-02 .1400000000D-02 .1442972000D+01 .5969500000D+01 .4290500000D+01 -.2088100000D+01 -.2600000000D-02 .2600000000D-03 .1557520000D+02 .1641900000D+00 .1556000000D-02 .3200000000D-02 .6911850000D+00 .5581000000D+01 .3551900000D+01 -.5408000000D+00 -.4100000000D-02 -.2000000000D-04 .2169160000D+02 .3542900000D+00 .2461000000D-02 .4700000000D-02 .2743431000D+01 .1238800000D+01 .5532400000D+01 -.2921900000D+01 +2 9620110605201107152455717.5 .5400000000D-02 -.7000000000D-04 .1845830000D+02 .3410700000D+00 .2072000000D-02 .7000000000D-03 .5136773000D+01 .3560200000D+01 .1714900000D+01 -.5668700000D+01 .6900000000D-02 -.1900000000D-03 .1548750000D+02 .1559700000D+00 .1658000000D-02 .2900000000D-02 .4685356000D+01 .2779500000D+01 .5360000000D+00 -.3387200000D+01 -.4600000000D-02 .5000000000D-04 .2285550000D+02 .3264700000D+00 .2295000000D-02 .2800000000D-02 .2408430000D+00 .5020400000D+01 .3032800000D+01 -.6248900000D+01 +2 9720110715201108242455757.5 .3800000000D-02 .1100000000D-03 .1981520000D+02 .3329800000D+00 .2215000000D-02 .3700000000D-02 .2531590000D+01 .1133000000D+01 .5335600000D+01 -.1801500000D+01 -.7000000000D-03 .1500000000D-03 .1264060000D+02 .1254300000D+00 .1485000000D-02 .3700000000D-02 .2481102000D+01 .6074800000D+01 .3910700000D+01 -.7657000000D+00 .1000000000D-03 -.7000000000D-04 .2346970000D+02 .3026200000D+00 .2014000000D-02 .4600000000D-02 .4088907000D+01 .2508200000D+01 .5797000000D+00 -.4396300000D+01 +2 9820110824201110032455797.5 .5500000000D-02 .4000000000D-04 .2225590000D+02 .2858200000D+00 .1986000000D-02 .3300000000D-02 .5517800000D-01 .4927200000D+01 .2783300000D+01 -.5502300000D+01 .4600000000D-02 -.1800000000D-03 .8516400000D+01 .1119100000D+00 .1142000000D-02 .3300000000D-02 .5814780000D+00 .3029800000D+01 .8861000000D+00 -.4067000000D+01 -.1500000000D-02 .1200000000D-03 .2312010000D+02 .2869900000D+00 .1696000000D-02 .2000000000D-02 .1685628000D+01 .2930000000D-01 .4419600000D+01 -.3524300000D+01 +2 9920111003201111122455837.5 .6500000000D-02 -.3000000000D-04 .2345010000D+02 .2379900000D+00 .1451000000D-02 .3800000000D-02 .3986501000D+01 .2416700000D+01 .2795000000D+00 -.2975000000D+01 -.1300000000D-02 .8000000000D-04 .7580700000D+01 .9414000000D-01 .9270000000D-03 .2000000000D-02 .5410488000D+01 .1434000000D+00 .4222500000D+01 -.1095400000D+01 .5900000000D-02 -.1400000000D-03 .2224370000D+02 .2721200000D+00 .1376000000D-02 .1200000000D-02 .5573668000D+01 .3897800000D+01 .1879300000D+01 -.4963100000D+01 +2 10020111112201112222455877.5 .3000000000D-02 .7000000000D-04 .2309010000D+02 .2011300000D+00 .1007000000D-02 .4000000000D-02 .1708635000D+01 .6262900000D+01 .3800800000D+01 -.9197000000D+00 .2800000000D-02 -.1100000000D-03 .1024140000D+02 .7397000000D-01 .6230000000D-03 .2900000000D-02 .3679600000D+01 .3559500000D+01 .1263200000D+01 -.4566700000D+01 .4600000000D-02 .0000000000D+00 .2156360000D+02 .2434300000D+00 .1240000000D-02 .1400000000D-02 .3198088000D+01 .1555200000D+01 .5295600000D+01 -.3838400000D+01 +2 10120111222201201312455917.5 .7100000000D-02 -.1600000000D-03 .2207280000D+02 .1470800000D+00 .1616000000D-02 .4200000000D-02 .5780023000D+01 .3986000000D+01 .8555000000D+00 -.5089900000D+01 -.3000000000D-03 .4000000000D-04 .1245660000D+02 .5203000000D-01 .7460000000D-03 .1800000000D-02 .1689555000D+01 .8811000000D+00 .4305800000D+01 -.2882000000D+01 .2300000000D-02 .1300000000D-03 .2146980000D+02 .1741200000D+00 .2092000000D-02 .2000000000D-02 .9069090000D+00 .5581200000D+01 .2441900000D+01 -.4768400000D+01 +2 10220120131201203112455957.5 -.3000000000D-02 .3100000000D-03 .2157160000D+02 .1921000000D-01 .1290000000D-02 .3400000000D-02 .3715761000D+01 .4419800000D+01 .5220900000D+01 -.7302000000D+00 .5100000000D-02 -.2200000000D-03 .1293040000D+02 .2505000000D-01 .5350000000D-03 .1300000000D-02 .5988184000D+01 .2515700000D+01 .3135600000D+01 -.3812300000D+01 -.1000000000D-02 .2700000000D-03 .2159780000D+02 .2504000000D-01 .1713000000D-02 .6300000000D-02 .5108987000D+01 .4990000000D-01 .5688000000D+00 -.2514500000D+01 +2 10320120311201204202455997.5 .4900000000D-02 -.5000000000D-04 .2243080000D+02 .9989000000D-01 .1982000000D-02 .3500000000D-02 .1912295000D+01 .3252700000D+01 .1862000000D+00 -.5252200000D+01 .2000000000D-02 -.7000000000D-04 .1123160000D+02 .5956000000D-01 .9960000000D-03 .4000000000D-03 .4083475000D+01 .1249300000D+01 .3877900000D+01 -.3662300000D+01 .2800000000D-02 .8000000000D-04 .2173720000D+02 .1349700000D+00 .2533000000D-02 .2600000000D-02 .3356627000D+01 .4967000000D+01 .1788100000D+01 -.5564900000D+01 +2 10420120420201205302456037.5 .3000000000D-02 .6000000000D-04 .2284070000D+02 .7337000000D-01 .1331000000D-02 .1700000000D-02 .3503600000D-01 .4787000000D+01 .4189900000D+01 -.4989300000D+01 .2100000000D-02 -.7000000000D-04 .1053410000D+02 .3830000000D-01 .5070000000D-03 .6000000000D-03 .2072522000D+01 .1379000000D+01 .1312900000D+01 -.3932700000D+01 .1400000000D-02 .1500000000D-03 .2157580000D+02 .7948000000D-01 .1704000000D-02 .4600000000D-02 .1508124000D+01 .6202800000D+01 .5823700000D+01 -.2489400000D+01 +2 10520120530201207092456077.5 .6600000000D-02 -.1600000000D-03 .2229880000D+02 .1714600000D+00 .1175000000D-02 .2000000000D-02 .4194755000D+01 .2494300000D+01 .1337600000D+01 -.4162300000D+01 -.2000000000D-02 .1400000000D-03 .1235050000D+02 .8257000000D-01 .8150000000D-03 .2500000000D-02 .3447800000D-01 .5650400000D+01 .4258300000D+01 -.1104700000D+01 .2100000000D-02 .1400000000D-03 .2118890000D+02 .2105800000D+00 .1349000000D-02 .4200000000D-02 .5611334000D+01 .4035200000D+01 .2822800000D+01 -.3597000000D+00 +2 10620120709201208182456117.5 .2300000000D-02 -.4000000000D-04 .2089960000D+02 .2257200000D+00 .1472000000D-02 .3000000000D-03 .1927058000D+01 .1804000000D+00 .5107900000D+01 -.4793200000D+01 .2700000000D-02 -.4000000000D-04 .1464430000D+02 .1176200000D+00 .1107000000D-02 .1500000000D-02 .4187897000D+01 .3089100000D+01 .1480900000D+01 -.5135500000D+01 .7600000000D-02 -.8000000000D-04 .2116460000D+02 .2720600000D+00 .1626000000D-02 .1800000000D-02 .3254651000D+01 .1725500000D+01 .1126000000D+00 -.4612200000D+01 +2 10720120818201209272456157.5 -.4000000000D-03 -.3000000000D-04 .1916530000D+02 .2793600000D+00 .1845000000D-02 .2800000000D-02 .5813534000D+01 .4122500000D+01 .2659600000D+01 -.5493500000D+01 -.4000000000D-03 .1600000000D-03 .1594310000D+02 .1478000000D+00 .1378000000D-02 .4900000000D-02 .1965069000D+01 .4717000000D+00 .4850500000D+01 -.2048900000D+01 .3200000000D-02 .1500000000D-03 .2187510000D+02 .3008900000D+00 .1976000000D-02 .2900000000D-02 .8260310000D+00 .5626000000D+01 .3867400000D+01 -.1799400000D+01 +2 10820120927201211062456197.5 .3300000000D-02 -.3300000000D-03 .1848760000D+02 .3405200000D+00 .2269000000D-02 .5500000000D-02 .3266458000D+01 .1739500000D+01 .9100000000D-02 -.3631500000D+01 .3800000000D-02 -.5000000000D-04 .1526000000D+02 .1543500000D+00 .1872000000D-02 .4400000000D-02 .5983502000D+01 .4026800000D+01 .1855100000D+01 -.5857900000D+01 .8100000000D-02 -.1400000000D-03 .2294170000D+02 .3140700000D+00 .2343000000D-02 .1600000000D-02 .4667139000D+01 .3173200000D+01 .1378100000D+01 -.4222000000D+00 +2 10920121106201212162456237.5 -.8800000000D-02 .1700000000D-03 .2028700000D+02 .3681500000D+00 .2799000000D-02 .4300000000D-02 .6541340000D+00 .5551300000D+01 .3523800000D+01 -.8812000000D+00 -.1800000000D-02 .1600000000D-03 .1182620000D+02 .1411100000D+00 .2003000000D-02 .4700000000D-02 .3794649000D+01 .9387000000D+00 .5114900000D+01 -.2284100000D+01 .1400000000D-02 .8000000000D-04 .2346560000D+02 .3275000000D+00 .2617000000D-02 .1800000000D-02 .2223320000D+01 .6498000000D+00 .5151000000D+01 -.1546200000D+01 +2 11020121216201301252456277.5 -.1700000000D-02 -.2100000000D-03 .2290200000D+02 .3328000000D+00 .2783000000D-02 .5200000000D-02 .4412163000D+01 .2949700000D+01 .9158000000D+00 -.4563000000D+01 .4600000000D-02 -.2100000000D-03 .7396500000D+01 .1444400000D+00 .1909000000D-02 .4200000000D-02 .2074791000D+01 .4026100000D+01 .1863800000D+01 -.5395500000D+01 -.3000000000D-03 .0000000000D+00 .2286550000D+02 .3506000000D+00 .2695000000D-02 .3200000000D-02 .6035016000D+01 .4379100000D+01 .2589600000D+01 -.5747700000D+01 +2 11120130125201303062456317.5 -.8100000000D-02 .1600000000D-03 .2332950000D+02 .3003900000D+00 .2301000000D-02 .1900000000D-02 .1978432000D+01 .3062000000D+00 .4743100000D+01 -.3816400000D+01 -.2700000000D-02 .1400000000D-03 .9391400000D+01 .1327400000D+00 .1930000000D-02 .2500000000D-02 .6816040000D+00 .8656000000D+00 .5089400000D+01 -.2687400000D+01 .5000000000D-03 -.1500000000D-03 .2166370000D+02 .3720200000D+00 .2603000000D-02 .4200000000D-02 .3501774000D+01 .1845400000D+01 .6264000000D+01 -.2749800000D+01 +2 11220130306201304152456357.5 -.1900000000D-02 -.3000000000D-04 .2150470000D+02 .3028700000D+00 .2046000000D-02 .7000000000D-03 .5836534000D+01 .4056300000D+01 .2354700000D+01 -.5081400000D+01 .3000000000D-02 -.1200000000D-03 .1377090000D+02 .1459400000D+00 .1713000000D-02 .3500000000D-02 .4914707000D+01 .3998800000D+01 .2132200000D+01 -.4933100000D+01 -.7200000000D-02 .1300000000D-03 .2120750000D+02 .3715600000D+00 .2492000000D-02 .5200000000D-02 .9170100000D+00 .5627400000D+01 .3673300000D+01 -.8036000000D+00 +2 11320130415201305252456397.5 .2000000000D-02 -.7000000000D-04 .1919960000D+02 .3274300000D+00 .2023000000D-02 .1500000000D-02 .3333030000D+01 .1617400000D+01 .6172700000D+01 -.3855200000D+01 .1400000000D-02 .3000000000D-04 .1578120000D+02 .1663900000D+00 .1651000000D-02 .3100000000D-02 .2646324000D+01 .1141500000D+01 .5338600000D+01 -.2428000000D+01 -.2100000000D-02 -.1200000000D-03 .2200910000D+02 .3475700000D+00 .2382000000D-02 .3200000000D-02 .4639294000D+01 .3135900000D+01 .1158800000D+01 -.4945300000D+01 +2 11420130525201307042456437.5 -.6000000000D-03 .2000000000D-03 .1859460000D+02 .3475100000D+00 .2132000000D-02 .2100000000D-02 .7245570000D+00 .5483800000D+01 .3555900000D+01 -.5789500000D+01 .4000000000D-02 -.8000000000D-04 .1493780000D+02 .1496800000D+00 .1762000000D-02 .4500000000D-02 .3608900000D+00 .4607200000D+01 .2365100000D+01 -.5389800000D+01 -.8200000000D-02 .2100000000D-03 .2310480000D+02 .3188500000D+00 .2234000000D-02 .2700000000D-02 .2153177000D+01 .6334000000D+00 .4978000000D+01 -.2550400000D+01 +2 11520130704201308132456477.5 .8800000000D-02 -.1600000000D-03 .2050780000D+02 .3283200000D+00 .2222000000D-02 .5400000000D-02 .4423371000D+01 .3033300000D+01 .9451000000D+00 -.4053600000D+01 .1600000000D-02 .0000000000D+00 .1148390000D+02 .1230600000D+00 .1527000000D-02 .3700000000D-02 .4485147000D+01 .1564500000D+01 .5711000000D+01 -.2869300000D+01 -.3300000000D-02 .5000000000D-04 .2345940000D+02 .3010200000D+00 .2040000000D-02 .2400000000D-02 .6008191000D+01 .4414000000D+01 .2529100000D+01 -.5002000000D+00 +2 11620130813201309222456517.5 .4100000000D-02 .1000000000D-03 .2278890000D+02 .2791900000D+00 .1965000000D-02 .1900000000D-02 .1972739000D+01 .5236000000D+00 .4744800000D+01 -.1476900000D+01 .6000000000D-03 -.1000000000D-04 .7630000000D+01 .1141400000D+00 .1266000000D-02 .3200000000D-02 .2725747000D+01 .4819100000D+01 .2662500000D+01 -.6044300000D+01 .1000000000D-03 .0000000000D+00 .2290800000D+02 .2943000000D+00 .1794000000D-02 .5000000000D-03 .3599400000D+01 .1940000000D+01 .7930000000D-01 -.6642000000D+00 +2 11720130922201311012456557.5 .9000000000D-02 -.1500000000D-03 .2346130000D+02 .2416300000D+00 .1530000000D-02 .4000000000D-02 .5907342000D+01 .4291800000D+01 .2344000000D+01 -.5223800000D+01 .0000000000D+00 .0000000000D+00 .8262600000D+01 .9953000000D-01 .1126000000D-02 .2200000000D-02 .1289887000D+01 .1890300000D+01 .6062300000D+01 -.2884600000D+01 -.9000000000D-03 .1700000000D-03 .2198160000D+02 .2889500000D+00 .1556000000D-02 .9000000000D-03 .1182628000D+01 .5800900000D+01 .3903200000D+01 -.8197000000D+00 +2 11820131101201312112456597.5 .7200000000D-02 -.9000000000D-04 .2255450000D+02 .2248400000D+00 .1144000000D-02 .3400000000D-02 .3602497000D+01 .1852200000D+01 .6190100000D+01 -.3578200000D+01 -.2500000000D-02 .1000000000D-03 .1163030000D+02 .9302000000D-01 .8880000000D-03 .2600000000D-02 .5701882000D+01 .5245300000D+01 .3295900000D+01 -.6832000000D+00 .4700000000D-02 -.1000000000D-04 .2139480000D+02 .2740800000D+00 .1347000000D-02 .8000000000D-03 .5043083000D+01 .3431200000D+01 .1398700000D+01 -.2645600000D+01 +2 11920131211201401202456637.5 .2400000000D-02 .6000000000D-04 .2097020000D+02 .2114600000D+00 .9050000000D-03 .1700000000D-02 .1306007000D+01 .5787400000D+01 .3425500000D+01 -.8573000000D+00 .2000000000D-03 -.1000000000D-04 .1414930000D+02 .9389000000D-01 .6080000000D-03 .3000000000D-03 .3608491000D+01 .2505900000D+01 .3385000000D+00 -.4171300000D+01 .1700000000D-02 .1600000000D-03 .2151210000D+02 .2427700000D+00 .1209000000D-02 .2800000000D-02 .2653561000D+01 .1101600000D+01 .4970600000D+01 -.1235900000D+01 +2 12020140120201403012456677.5 .6100000000D-02 -.2000000000D-03 .1962900000D+02 .1701300000D+00 .1555000000D-02 .4200000000D-02 .5314111000D+01 .3535000000D+01 .4639000000D+00 -.5145500000D+01 -.1700000000D-02 .1100000000D-03 .1524700000D+02 .7660000000D-01 .6520000000D-03 .1900000000D-02 .1485492000D+01 .4300000000D-02 .3335200000D+01 -.1617500000D+01 .3100000000D-02 .9000000000D-04 .2204520000D+02 .1834700000D+00 .1748000000D-02 .3100000000D-02 .3585070000D+00 .5103500000D+01 .2071400000D+01 -.6144700000D+01 +2 12120140301201404102456717.5 .0000000000D+00 .8000000000D-04 .1906570000D+02 .2232000000D-01 .1985000000D-02 .3900000000D-02 .3180263000D+01 .1654000000D+01 .4621200000D+01 -.5522000000D+00 -.3000000000D-03 .6000000000D-04 .1537680000D+02 .1708000000D-01 .6370000000D-03 .2000000000D-02 .5723468000D+01 .4155800000D+01 .1201900000D+01 -.2378400000D+01 -.1000000000D-02 .3000000000D-03 .2234050000D+02 .2774000000D-01 .2111000000D-02 .5600000000D-02 .4523331000D+01 .3161600000D+01 .5000000000D-02 -.1775700000D+01 +2 12220140410201405202456757.5 .6700000000D-02 -.2000000000D-03 .1961040000D+02 .1378200000D+00 .1950000000D-02 .2200000000D-02 .1376022000D+01 .2732000000D+01 .5920500000D+01 -.5240100000D+01 -.1400000000D-02 .8000000000D-04 .1519390000D+02 .3298000000D-01 .8620000000D-03 .2000000000D-03 .3828867000D+01 .5926500000D+01 .2549100000D+01 -.3091400000D+01 -.7000000000D-03 .2600000000D-03 .2206700000D+02 .1459400000D+00 .2226000000D-02 .6200000000D-02 .2704375000D+01 .4477700000D+01 .1260800000D+01 -.6005200000D+01 +2 12320140520201406292456797.5 -.7000000000D-03 .1600000000D-03 .2036380000D+02 .4497000000D-01 .1782000000D-02 .3200000000D-02 .5859349000D+01 .4446100000D+01 .3812000000D+01 -.6239600000D+01 .2300000000D-02 -.9000000000D-04 .1491300000D+02 .4414000000D-01 .7370000000D-03 .2700000000D-02 .1904090000D+01 .6939000000D+00 .2109000000D+00 -.3153000000D+01 -.5000000000D-03 .2500000000D-03 .2146450000D+02 .5490000000D-01 .1939000000D-02 .3800000000D-02 .8952750000D+00 .5623200000D+01 .5435800000D+01 -.2228400000D+01 +2 12420140629201408082456837.5 .3900000000D-02 -.1200000000D-03 .1976980000D+02 .1821300000D+00 .1444000000D-02 .8000000000D-03 .3730966000D+01 .2038100000D+01 .1059600000D+01 -.2832100000D+01 -.8000000000D-03 .9000000000D-04 .1559880000D+02 .1062700000D+00 .9070000000D-03 .2200000000D-02 .6095586000D+01 .4772000000D+01 .3301900000D+01 -.5008000000D+00 .5000000000D-02 .1000000000D-04 .2153570000D+02 .2065400000D+00 .1445000000D-02 .3100000000D-02 .5024440000D+01 .3548500000D+01 .2373900000D+01 -.5497000000D+00 +2 12520140808201409172456877.5 -.2100000000D-02 .9000000000D-04 .1870600000D+02 .2688200000D+00 .1820000000D-02 .5100000000D-02 .1364544000D+01 .6022500000D+01 .4668400000D+01 -.1641400000D+01 .5400000000D-02 -.1800000000D-03 .1593170000D+02 .1433400000D+00 .1328000000D-02 .5100000000D-02 .3894489000D+01 .2242000000D+01 .2682000000D+00 -.4248600000D+01 .7300000000D-02 -.6000000000D-04 .2226330000D+02 .2752900000D+00 .1881000000D-02 .1200000000D-02 .2684385000D+01 .1221400000D+01 .5847800000D+01 -.3514200000D+01 +2 12620140917201410272456917.5 -.8000000000D-03 -.1000000000D-03 .1887500000D+02 .3378900000D+00 .2373000000D-02 .5300000000D-02 .5106084000D+01 .3649800000D+01 .1897800000D+01 -.5937900000D+01 -.2500000000D-02 .2000000000D-03 .1441930000D+02 .1479700000D+00 .1848000000D-02 .2900000000D-02 .1653957000D+01 .5740400000D+01 .3573000000D+01 -.1106200000D+01 .1700000000D-02 .1700000000D-03 .2317880000D+02 .3079800000D+00 .2310000000D-02 .8000000000D-03 .2810740000D+00 .5055300000D+01 .3277500000D+01 -.3500000000D-02 +2 12720141027201412062456957.5 -.7100000000D-02 .1100000000D-03 .2118550000D+02 .3552000000D+00 .2894000000D-02 .4900000000D-02 .2528850000D+01 .1155400000D+01 .5406100000D+01 -.2647500000D+01 .7500000000D-02 -.3200000000D-03 .1026050000D+02 .1454400000D+00 .1874000000D-02 .4400000000D-02 .5825503000D+01 .2586800000D+01 .4661000000D+00 -.3955400000D+01 .8100000000D-02 -.2300000000D-03 .2342690000D+02 .3307500000D+00 .2563000000D-02 .2600000000D-02 .4130369000D+01 .2525700000D+01 .7537000000D+00 -.3517700000D+01 +2 12820141206201501152456997.5 -.7800000000D-02 .8000000000D-04 .2329690000D+02 .3201300000D+00 .2684000000D-02 .3200000000D-02 .4265800000D-01 .4811000000D+01 .2811500000D+01 -.5653000000D+00 -.4900000000D-02 .2200000000D-03 .6937500000D+01 .1461400000D+00 .1896000000D-02 .3400000000D-02 .4336264000D+01 .5726700000D+01 .3522200000D+01 -.6456000000D+00 -.1800000000D-02 .1200000000D-03 .2260970000D+02 .3541600000D+00 .2604000000D-02 .4700000000D-02 .1649095000D+01 .6261000000D+01 .4485800000D+01 -.1292200000D+01 +2 12920150115201502242457037.5 -.5100000000D-02 .0000000000D+00 .2297520000D+02 .2997600000D+00 .2183000000D-02 .1900000000D-02 .3905618000D+01 .2189700000D+01 .3655000000D+00 -.1254900000D+01 .2500000000D-02 -.1700000000D-03 .1057150000D+02 .1363700000D+00 .1842000000D-02 .2100000000D-02 .2762709000D+01 .2549300000D+01 .5471000000D+00 -.3585800000D+01 .1900000000D-02 -.2000000000D-03 .2148360000D+02 .3693000000D+00 .2556000000D-02 .4000000000D-02 .5383825000D+01 .3745900000D+01 .1888100000D+01 -.5356500000D+01 +2 13020150224201504052457077.5 -.7600000000D-02 .2100000000D-03 .2088190000D+02 .3071300000D+00 .1975000000D-02 .2100000000D-02 .1468256000D+01 .5970500000D+01 .4283200000D+01 -.1083900000D+01 -.5500000000D-02 .2600000000D-03 .1450510000D+02 .1563700000D+00 .1602000000D-02 .4300000000D-02 .6128240000D+00 .5769300000D+01 .3865000000D+01 -.6683000000D+00 -.4000000000D-02 .1000000000D-04 .2133670000D+02 .3637800000D+00 .2495000000D-02 .4500000000D-02 .2801458000D+01 .1257900000D+01 .5582600000D+01 -.2815600000D+01 +2 13120150405201505152457117.5 -.1500000000D-02 .4000000000D-04 .1886340000D+02 .3298600000D+00 .2043000000D-02 .6000000000D-03 .5220214000D+01 .3550400000D+01 .1817700000D+01 -.6043800000D+01 .4200000000D-02 -.1500000000D-03 .1580200000D+02 .1666400000D+00 .1602000000D-02 .2800000000D-02 .4605489000D+01 .2960800000D+01 .8210000000D+00 -.4001500000D+01 -.7400000000D-02 .1200000000D-03 .2229130000D+02 .3408800000D+00 .2362000000D-02 .2800000000D-02 .2623790000D+00 .5047800000D+01 .3054900000D+01 -.7396000000D+00 +2 13220150515201506242457157.5 -.1000000000D-02 .1600000000D-03 .1891860000D+02 .3439600000D+00 .2223000000D-02 .4100000000D-02 .2605883000D+01 .1136900000D+01 .5466100000D+01 -.2066000000D+01 -.3400000000D-02 .2400000000D-03 .1426990000D+02 .1421000000D+00 .1662000000D-02 .4300000000D-02 .2330339000D+01 .1045000000D+00 .4178500000D+01 -.1266700000D+01 -.3700000000D-02 -.6000000000D-04 .2326810000D+02 .3152500000D+00 .2173000000D-02 .1000000000D-02 .4078774000D+01 .2541700000D+01 .6042000000D+00 -.5154800000D+01 +2 13320150624201508032457197.5 .7000000000D-03 .1600000000D-03 .2113720000D+02 .3203400000D+00 .2265000000D-02 .4700000000D-02 .5302300000D-01 .4952900000D+01 .2854200000D+01 -.6530000000D-01 .4500000000D-02 -.2000000000D-03 .1035200000D+02 .1208200000D+00 .1406000000D-02 .2700000000D-02 .2256720000D+00 .3316100000D+01 .1222500000D+01 -.4618300000D+01 -.6600000000D-02 .1600000000D-03 .2342160000D+02 .2994100000D+00 .1983000000D-02 .1100000000D-02 .1657377000D+01 .4370000000D-01 .4479900000D+01 -.1815400000D+01 +2 13420150803201509122457237.5 .5400000000D-02 .0000000000D+00 .2312090000D+02 .2749800000D+00 .1939000000D-02 .2100000000D-02 .3911670000D+01 .2424700000D+01 .3867000000D+00 -.2756700000D+01 -.2900000000D-02 .1300000000D-03 .7082200000D+01 .1123000000D+00 .1252000000D-02 .2900000000D-02 .4892265000D+01 .3237000000D+00 .4487900000D+01 -.1705500000D+01 -.9000000000D-03 .0000000000D+00 .2273190000D+02 .2954300000D+00 .1829000000D-02 .7000000000D-03 .5527138000D+01 .3866700000D+01 .2061100000D+01 -.2078600000D+01 +2 13520150912201510222457277.5 .3500000000D-02 .1200000000D-03 .2335170000D+02 .2457300000D+00 .1539000000D-02 .4300000000D-02 .1567682000D+01 .6192400000D+01 .4320000000D+01 -.1442300000D+01 .8000000000D-03 -.1000000000D-03 .8991400000D+01 .1005300000D+00 .1194000000D-02 .2400000000D-02 .3394779000D+01 .3661500000D+01 .1661700000D+01 -.5124900000D+01 -.6000000000D-03 .8000000000D-04 .2179870000D+02 .2959400000D+00 .1696000000D-02 .1400000000D-02 .3096832000D+01 .1451000000D+01 .5897400000D+01 -.1883700000D+01 +2 13620151022201512012457317.5 .5100000000D-02 .0000000000D+00 .2208500000D+02 .2383500000D+00 .1311000000D-02 .2200000000D-02 .5527391000D+01 .3764500000D+01 .2019000000D+01 -.1858000000D+00 -.2500000000D-02 .5000000000D-04 .1254930000D+02 .1036300000D+00 .1066000000D-02 .1800000000D-02 .1419849000D+01 .7405000000D+00 .5212500000D+01 -.3162600000D+01 -.6000000000D-03 .1600000000D-03 .2135430000D+02 .2914400000D+00 .1561000000D-02 .1900000000D-02 .6513240000D+00 .5347200000D+01 .3433300000D+01 -.5805300000D+01 +2 13720151201201601102457357.5 .2600000000D-02 .4000000000D-04 .2024200000D+02 .2428800000D+00 .1171000000D-02 .1100000000D-02 .3177485000D+01 .1413700000D+01 .5936400000D+01 -.2872000000D+01 .6000000000D-03 -.6000000000D-04 .1485920000D+02 .1153100000D+00 .9110000000D-03 .8000000000D-03 .5546820000D+01 .4298600000D+01 .2408400000D+01 -.5591600000D+01 .5700000000D-02 -.6000000000D-04 .2170290000D+02 .2758100000D+00 .1439000000D-02 .2300000000D-02 .4504646000D+01 .2977500000D+01 .9717000000D+00 -.3357200000D+01 +2 13820160110201602192457397.5 .2000000000D-03 .9000000000D-04 .1885900000D+02 .2452300000D+00 .1042000000D-02 .3300000000D-02 .7797980000D+00 .5386200000D+01 .3296600000D+01 -.1218500000D+01 .4000000000D-03 -.1000000000D-04 .1551040000D+02 .1129300000D+00 .7820000000D-03 .1100000000D-02 .3350704000D+01 .1714400000D+01 .5806200000D+01 -.3830100000D+01 .3200000000D-02 .1000000000D-03 .2250000000D+02 .2483800000D+00 .1274000000D-02 .3600000000D-02 .2126355000D+01 .6157000000D+00 .4725200000D+01 -.1502800000D+01 +2 13920160219201603302457437.5 .4600000000D-02 -.2000000000D-03 .1869700000D+02 .2184500000D+00 .1313000000D-02 .6000000000D-03 .4664796000D+01 .3097400000D+01 .2913000000D+00 -.7860000000D-01 .6000000000D-03 .0000000000D+00 .1475500000D+02 .8896000000D-01 .5340000000D-03 .2400000000D-02 .1184250000D+01 .5457000000D+01 .2710900000D+01 -.4899900000D+01 .6800000000D-02 -.7000000000D-04 .2315830000D+02 .2072400000D+00 .1270000000D-02 .4100000000D-02 .6106328000D+01 .4556000000D+01 .1843200000D+01 -.5357000000D+01 +2 14020160330201605092457477.5 -.1600000000D-02 .8000000000D-04 .1927330000D+02 .1186500000D+00 .2523000000D-02 .1400000000D-02 .2398105000D+01 .9056000000D+00 .4087500000D+01 -.2083900000D+01 .2200000000D-02 -.8000000000D-04 .1352470000D+02 .5209000000D-01 .7990000000D-03 .5000000000D-03 .5378459000D+01 .3269200000D+01 .5756400000D+01 -.2606800000D+01 .6600000000D-02 -.9000000000D-04 .2340060000D+02 .1198000000D+00 .2137000000D-02 .3400000000D-02 .3916632000D+01 .2327700000D+01 .5494400000D+01 -.3393200000D+01 +2 14120160509201606182457517.5 .1420000000D-01 -.7000000000D-03 .1922680000D+02 .1372300000D+00 .7370000000D-03 .7800000000D-02 .4377070000D+00 .2192200000D+01 .5053400000D+01 -.3793900000D+01 .4000000000D-03 .0000000000D+00 .1368590000D+02 .4652000000D-01 .2510000000D-03 .4700000000D-02 .3368114000D+01 .3271100000D+01 .8790000000D-01 -.5892000000D+01 .1030000000D-01 -.2900000000D-03 .2332850000D+02 .8602000000D-01 .4200000000D-03 .9300000000D-02 .1941931000D+01 .3654400000D+01 .2160000000D+00 -.5714000000D+01 +2 14220160618201607282457557.5 .1000000000D-02 -.2000000000D-04 .1863260000D+02 .3434000000D-01 .2762000000D-02 .4400000000D-02 .5029127000D+01 .2136000000D+00 .3409000000D+01 -.6240600000D+01 -.6000000000D-03 .8000000000D-04 .1511410000D+02 .2481000000D-01 .1054000000D-02 .2100000000D-02 .1446315000D+01 .7107000000D+00 .5415700000D+01 -.3082200000D+01 .2300000000D-02 .1500000000D-03 .2286120000D+02 .8880000000D-02 .2301000000D-02 .6000000000D-03 .1459540000D+00 .1983400000D+01 .4865600000D+01 -.4182800000D+01 +2 14320160728201609062457597.5 .6500000000D-02 -.3200000000D-03 .1872060000D+02 .1931000000D+00 .1734000000D-02 .5900000000D-02 .2959222000D+01 .1515400000D+01 .5584000000D+00 -.3882200000D+01 .6000000000D-03 .1000000000D-04 .1482200000D+02 .9306000000D-01 .1085000000D-02 .3500000000D-02 .5692790000D+01 .3781600000D+01 .2070900000D+01 -.6176500000D+01 .8800000000D-02 -.1500000000D-03 .2296330000D+02 .1782200000D+00 .1594000000D-02 .3800000000D-02 .4374844000D+01 .2924100000D+01 .1899100000D+01 -.4748300000D+01 +2 14420160906201610162457637.5 -.6400000000D-02 .2000000000D-03 .1997370000D+02 .3058800000D+00 .2093000000D-02 .3500000000D-02 .5563270000D+00 .5451100000D+01 .3707600000D+01 -.1604500000D+01 -.3000000000D-03 .6000000000D-04 .1238130000D+02 .1228500000D+00 .1657000000D-02 .3000000000D-02 .3563829000D+01 .9623000000D+00 .5233700000D+01 -.2458800000D+01 .6500000000D-02 -.5000000000D-04 .2339800000D+02 .2679500000D+00 .2086000000D-02 .1700000000D-02 .2088378000D+01 .5653000000D+00 .5266700000D+01 -.2998100000D+01 +2 14520161016201611252457677.5 .6000000000D-03 -.2800000000D-03 .2233280000D+02 .3228500000D+00 .2547000000D-02 .3700000000D-02 .4362669000D+01 .2944600000D+01 .9530000000D+00 -.4740300000D+01 .2400000000D-02 -.1300000000D-03 .7974900000D+01 .1383100000D+00 .1766000000D-02 .3700000000D-02 .1659684000D+01 .4165000000D+01 .2073500000D+01 -.5608800000D+01 .5500000000D-02 -.7000000000D-04 .2322010000D+02 .3165400000D+00 .2432000000D-02 .4600000000D-02 .5978217000D+01 .4358600000D+01 .2645000000D+01 -.5547600000D+01 +2 14620161125201701042457717.5 -.7500000000D-02 .9000000000D-04 .2349110000D+02 .2977300000D+00 .2317000000D-02 .3000000000D-03 .1933577000D+01 .3377000000D+00 .4722700000D+01 -.5048100000D+01 -.3300000000D-02 .8000000000D-04 .7472900000D+01 .1351300000D+00 .1874000000D-02 .3100000000D-02 .3657230000D+00 .1094200000D+01 .5251200000D+01 -.2231400000D+01 .7300000000D-02 -.2500000000D-03 .2222900000D+02 .3505700000D+00 .2464000000D-02 .5200000000D-02 .3505157000D+01 .1839500000D+01 .3800000000D-01 -.3537200000D+01 +2 14720170104201702132457757.5 -.3300000000D-02 -.9000000000D-04 .2241430000D+02 .2908100000D+00 .2017000000D-02 .1700000000D-02 .5813138000D+01 .4067100000D+01 .2322400000D+01 -.4207200000D+01 -.6000000000D-03 -.7000000000D-04 .1196660000D+02 .1359700000D+00 .1760000000D-02 .2800000000D-02 .4793931000D+01 .4231400000D+01 .2330400000D+01 -.5427400000D+01 -.1900000000D-02 .6000000000D-04 .2135340000D+02 .3631900000D+00 .2393000000D-02 .2000000000D-02 .9603050000D+00 .5626900000D+01 .3731200000D+01 -.9835000000D+00 +2 14820170213201703252457797.5 -.2900000000D-02 -.4000000000D-04 .2021350000D+02 .3075200000D+00 .1936000000D-02 .1800000000D-02 .3366239000D+01 .1610400000D+01 .6203300000D+01 -.3142500000D+01 -.1900000000D-02 .4000000000D-04 .1508660000D+02 .1600700000D+00 .1593000000D-02 .4400000000D-02 .2573230000D+01 .1294500000D+01 .5624300000D+01 -.2520300000D+01 .1600000000D-02 -.2400000000D-03 .2157700000D+02 .3510100000D+00 .2329000000D-02 .4600000000D-02 .4681295000D+01 .3150300000D+01 .1199100000D+01 -.4887100000D+01 +2 14920170325201705042457837.5 -.6700000000D-02 .2200000000D-03 .1868830000D+02 .3323300000D+00 .1996000000D-02 .2100000000D-02 .8179620000D+00 .5479700000D+01 .3693500000D+01 -.6460000000D-01 -.1800000000D-02 .7000000000D-04 .1557170000D+02 .1629400000D+00 .1677000000D-02 .4000000000D-02 .2772540000D+00 .4809400000D+01 .2607800000D+01 -.6001500000D+01 -.5600000000D-02 .4000000000D-04 .2259340000D+02 .3265900000D+00 .2255000000D-02 .2300000000D-02 .2171071000D+01 .6712000000D+00 .5007100000D+01 -.3774800000D+01 +2 15020170504201706132457877.5 .3200000000D-02 -.1400000000D-03 .1942520000D+02 .3384100000D+00 .2168000000D-02 .5000000000D-02 .4499005000D+01 .3057100000D+01 .1075300000D+01 -.4398900000D+01 .1100000000D-02 -.4000000000D-04 .1338440000D+02 .1365100000D+00 .1675000000D-02 .3800000000D-02 .4310020000D+01 .1918400000D+01 .5988600000D+01 -.3284600000D+01 -.3000000000D-02 -.9000000000D-04 .2337320000D+02 .3062400000D+00 .2126000000D-02 .1200000000D-02 .6008283000D+01 .4462400000D+01 .2564200000D+01 -.4923800000D+01 +2 15120170613201707232457917.5 .3000000000D-03 .1200000000D-03 .2175360000D+02 .3076600000D+00 .2193000000D-02 .3600000000D-02 .1980960000D+01 .5835000000D+00 .4806400000D+01 -.2166800000D+01 -.6000000000D-03 .2000000000D-04 .9230900000D+01 .1207900000D+00 .1412000000D-02 .2800000000D-02 .2279504000D+01 .5133700000D+01 .3001200000D+01 -.6960000000D-01 -.1600000000D-02 -.1100000000D-03 .2332720000D+02 .2980800000D+00 .1948000000D-02 .1000000000D-02 .3596134000D+01 .1973000000D+01 .1313000000D+00 -.3796600000D+01 +2 15220170723201709012457957.5 .6000000000D-02 -.7000000000D-04 .2333630000D+02 .2670600000D+00 .1893000000D-02 .2500000000D-02 .5861897000D+01 .4341500000D+01 .2373000000D+01 -.5736600000D+01 .1300000000D-02 -.1100000000D-03 .6899600000D+01 .1121300000D+00 .1296000000D-02 .2600000000D-02 .7849090000D+00 .2154700000D+01 .1380000000D-01 -.3714000000D+01 -.5200000000D-02 .1400000000D-03 .2257290000D+02 .2980100000D+00 .1804000000D-02 .2000000000D-02 .1181404000D+01 .5800600000D+01 .4004000000D+01 -.5144200000D+01 +2 15320170901201710112457997.5 .6100000000D-02 -.3000000000D-04 .2315330000D+02 .2477200000D+00 .1569000000D-02 .3400000000D-02 .3521935000D+01 .1840000000D+01 .2430000000D-01 -.4091000000D+01 -.3700000000D-02 .9000000000D-04 .9684300000D+01 .1042500000D+00 .1234000000D-02 .1500000000D-02 .5463188000D+01 .5464500000D+01 .3501000000D+01 -.8025000000D+00 .6000000000D-03 -.5000000000D-04 .2170420000D+02 .3001200000D+00 .1741000000D-02 .3600000000D-02 .5025156000D+01 .3388000000D+01 .1590000000D+01 -.4261300000D+01 +2 15420171011201711202458037.5 .4700000000D-02 .1000000000D-04 .2165790000D+02 .2485300000D+00 .1406000000D-02 .1800000000D-02 .1183866000D+01 .5698700000D+01 .4040200000D+01 -.3361800000D+01 .3000000000D-03 -.1100000000D-03 .1318640000D+02 .1146200000D+00 .1128000000D-02 .7000000000D-03 .3415777000D+01 .2554100000D+01 .7617000000D+00 -.5201500000D+01 .1600000000D-02 .1000000000D-04 .2139210000D+02 .2999200000D+00 .1742000000D-02 .1600000000D-02 .2566134000D+01 .1001800000D+01 .5431100000D+01 -.2455200000D+01 +2 15520171120201712302458077.5 .6700000000D-02 -.1300000000D-03 .1977500000D+02 .2640700000D+00 .1425000000D-02 .1400000000D-02 .5077497000D+01 .3341200000D+01 .1738600000D+01 -.5732500000D+01 -.4500000000D-02 .1600000000D-03 .1519180000D+02 .1307500000D+00 .1085000000D-02 .1100000000D-02 .1218999000D+01 .6121400000D+01 .4214300000D+01 -.1243200000D+01 .3400000000D-02 .2000000000D-04 .2189130000D+02 .2933700000D+00 .1743000000D-02 .3100000000D-02 .1174580000D+00 .4895500000D+01 .2992800000D+01 -.5778700000D+01 +2 15620171230201802082458117.5 .4900000000D-02 -.1000000000D-03 .1867450000D+02 .2863000000D+00 .1539000000D-02 .1700000000D-02 .2604842000D+01 .1011100000D+01 .5546900000D+01 -.4009800000D+01 .5000000000D-03 -.5000000000D-04 .1527970000D+02 .1299800000D+00 .1193000000D-02 .1100000000D-02 .5268308000D+01 .3477300000D+01 .1362200000D+01 -.4342300000D+01 .7700000000D-02 -.9000000000D-04 .2278930000D+02 .2810800000D+00 .1695000000D-02 .4300000000D-02 .3988287000D+01 .2483500000D+01 .5757000000D+00 -.4007600000D+01 +2 15720180208201803202458157.5 .1500000000D-02 -.3000000000D-04 .1938280000D+02 .2935600000D+00 .1657000000D-02 .1500000000D-02 .9496000000D-01 .4941800000D+01 .2942300000D+01 -.4581900000D+01 -.3100000000D-02 .1400000000D-03 .1335340000D+02 .1109900000D+00 .1168000000D-02 .2800000000D-02 .3072536000D+01 .7049000000D+00 .4867900000D+01 -.1319900000D+01 .4300000000D-02 .8000000000D-04 .2340800000D+02 .2678300000D+00 .1579000000D-02 .1500000000D-02 .1613294000D+01 .5530000000D-01 .4446500000D+01 -.2237900000D+01 +2 15820180320201804292458197.5 .2100000000D-02 -.1700000000D-03 .2139520000D+02 .2670900000D+00 .1583000000D-02 .3000000000D-02 .3936098000D+01 .2536700000D+01 .3131000000D+00 -.3431300000D+01 .2000000000D-02 -.1000000000D-03 .9892400000D+01 .9568000000D-01 .8190000000D-03 .1800000000D-02 .1027226000D+01 .4095100000D+01 .1963000000D+01 -.4986100000D+01 .8700000000D-02 -.1700000000D-03 .2338900000D+02 .2555200000D+00 .1330000000D-02 .3900000000D-02 .5546626000D+01 .3920100000D+01 .1904600000D+01 -.5429100000D+01 +2 15920180429201806082458237.5 -.5700000000D-02 .1200000000D-03 .2301100000D+02 .2138300000D+00 .1340000000D-02 .3000000000D-02 .1607405000D+01 .9710000000D-01 .3710300000D+01 -.6200200000D+01 -.2700000000D-02 .1100000000D-03 .6963900000D+01 .7555000000D-01 .5740000000D-03 .2500000000D-02 .5583580000D+01 .1384800000D+01 .4668100000D+01 -.1904300000D+01 .5000000000D-02 .0000000000D+00 .2292750000D+02 .2309200000D+00 .1321000000D-02 .3400000000D-02 .3224138000D+01 .1557700000D+01 .5101300000D+01 -.3262100000D+01 +2 16020180608201807182458277.5 -.8000000000D-03 -.1300000000D-03 .2345830000D+02 .1196100000D+00 .2001000000D-02 .4500000000D-02 .5691321000D+01 .4092200000D+01 .9620000000D+00 -.4214800000D+01 -.2100000000D-02 .7000000000D-04 .6295500000D+01 .3031000000D-01 .1129000000D-02 .8000000000D-03 .3973260000D+01 .5844700000D+01 .1937600000D+01 -.4130500000D+01 .4000000000D-02 .4000000000D-04 .2262800000D+02 .1332200000D+00 .2340000000D-02 .5000000000D-03 .9906050000D+00 .5668600000D+01 .2455200000D+01 -.1792400000D+01 +2 16120180718201808272458317.5 -.1380000000D-01 .5500000000D-03 .2345500000D+02 .7973000000D-01 .1094000000D-02 .6200000000D-02 .3704454000D+01 .5336200000D+01 .2080900000D+01 -.9143000000D+00 -.3700000000D-02 .1900000000D-03 .5192700000D+01 .8817000000D-01 .9730000000D-03 .5000000000D-02 .1983531000D+01 .6193900000D+01 .2690600000D+01 -.2321500000D+01 .3000000000D-03 .2400000000D-03 .2289260000D+02 .8415000000D-01 .1052000000D-02 .6900000000D-02 .5286955000D+01 .4754000000D+00 .3615500000D+01 -.2227000000D+01 +2 16220180827201810062458357.5 -.2700000000D-02 -.2000000000D-04 .2322720000D+02 .4683000000D-01 .1960000000D-02 .4100000000D-02 .1850060000D+01 .5347000000D+00 .4570000000D-01 -.3644900000D+01 .3400000000D-02 -.1800000000D-03 .5140900000D+01 .1407000000D-01 .9700000000D-03 .2700000000D-02 .5942479000D+01 .4895000000D+00 .9859000000D+00 -.3646400000D+01 .9600000000D-02 -.2300000000D-03 .2305680000D+02 .4467000000D-01 .2178000000D-02 .3300000000D-02 .3445389000D+01 .1984100000D+01 .1542800000D+01 -.4100700000D+01 +2 16320181006201811152458397.5 -.5900000000D-02 .7000000000D-04 .2341630000D+02 .1991400000D+00 .1478000000D-02 .1000000000D-02 .6016297000D+01 .4496500000D+01 .3056100000D+01 -.1830000000D-01 -.4100000000D-02 .1300000000D-03 .6207300000D+01 .9658000000D-01 .9820000000D-03 .1400000000D-02 .4331589000D+01 .5196100000D+01 .3428900000D+01 -.7041000000D+00 .9000000000D-03 .1600000000D-03 .2262360000D+02 .2187600000D+00 .1676000000D-02 .6700000000D-02 .1312124000D+01 .5960300000D+01 .4801400000D+01 -.1695300000D+01 +2 16420181115201812252458437.5 -.2000000000D-02 -.1400000000D-03 .2304380000D+02 .2451800000D+00 .1632000000D-02 .9000000000D-03 .3734797000D+01 .2053900000D+01 .4004000000D+00 -.2050700000D+01 .1600000000D-02 -.2000000000D-03 .9774800000D+01 .1177400000D+00 .1395000000D-02 .2700000000D-02 .2591183000D+01 .2420800000D+01 .5173000000D+00 -.3813400000D+01 .2900000000D-02 -.4000000000D-04 .2175340000D+02 .2981500000D+00 .1922000000D-02 .4300000000D-02 .5228564000D+01 .3594900000D+01 .1967800000D+01 -.6177400000D+01 +2 16520181225201902032458477.5 -.7300000000D-02 .1100000000D-03 .2148960000D+02 .2689900000D+00 .1674000000D-02 .1500000000D-02 .1380257000D+01 .5901700000D+01 .4281900000D+01 -.1020000000D-01 -.5400000000D-02 .1400000000D-03 .1356740000D+02 .1374700000D+00 .1411000000D-02 .2600000000D-02 .4790100000D+00 .5800300000D+01 .3984000000D+01 -.6721000000D+00 -.7000000000D-03 .2000000000D-04 .2132540000D+02 .3261100000D+00 .2074000000D-02 .2500000000D-02 .2748731000D+01 .1181500000D+01 .5628300000D+01 -.2987100000D+01 +2 16620190203201903152458517.5 -.4800000000D-02 .1000000000D-04 .1954750000D+02 .2959000000D+00 .1807000000D-02 .2700000000D-02 .5221327000D+01 .3509800000D+01 .1875000000D+01 -.4738800000D+01 .1100000000D-02 -.1500000000D-03 .1552580000D+02 .1567600000D+00 .1399000000D-02 .4700000000D-02 .4506265000D+01 .3039400000D+01 .1060100000D+01 -.4511300000D+01 -.4700000000D-02 .8000000000D-04 .2187050000D+02 .3246000000D+00 .2101000000D-02 .3000000000D-02 .2489960000D+00 .5025100000D+01 .3095400000D+01 -.1188500000D+01 +2 16720190315201904242458557.5 -.3500000000D-02 .3000000000D-04 .1870900000D+02 .3233400000D+00 .1993000000D-02 .3600000000D-02 .2676043000D+01 .1124900000D+01 .5602000000D+01 -.2751000000D+01 -.4700000000D-02 .1800000000D-03 .1513470000D+02 .1496800000D+00 .1547000000D-02 .2800000000D-02 .2221914000D+01 .3114000000D+00 .4422600000D+01 -.1983900000D+01 -.2400000000D-02 -.1100000000D-03 .2286890000D+02 .3092100000D+00 .2043000000D-02 .2500000000D-02 .4071422000D+01 .2561200000D+01 .6425000000D+00 -.1070300000D+01 +2 16820190424201906032458597.5 -.2900000000D-02 .1000000000D-03 .2001280000D+02 .3272500000D+00 .2167000000D-02 .4400000000D-02 .1097590000D+00 .4984700000D+01 .2971300000D+01 -.2057000000D+00 .3200000000D-02 -.1800000000D-03 .1231190000D+02 .1252500000D+00 .1505000000D-02 .2700000000D-02 .9573000000D-02 .3676200000D+01 .1550200000D+01 -.5184100000D+01 -.8400000000D-02 .1600000000D-03 .2345850000D+02 .2957900000D+00 .1966000000D-02 .2300000000D-02 .1653283000D+01 .8550000000D-01 .4515200000D+01 -.8911000000D+00 +2 16920190603201907132458637.5 .3400000000D-02 -.6000000000D-04 .2227970000D+02 .2959800000D+00 .2077000000D-02 .3100000000D-02 .3917278000D+01 .2495400000D+01 .4463000000D+00 -.4249700000D+01 -.3100000000D-02 .1300000000D-03 .8108300000D+01 .1149800000D+00 .1318000000D-02 .2500000000D-02 .4361380000D+01 .6458000000D+00 .4847800000D+01 -.2056600000D+01 -.5900000000D-02 .5000000000D-04 .2322750000D+02 .2922600000D+00 .1907000000D-02 .4000000000D-03 .5535134000D+01 .3906300000D+01 .2108700000D+01 -.3154200000D+01 +2 17020190713201908222458677.5 .6000000000D-03 .1600000000D-03 .2345790000D+02 .2617700000D+00 .1772000000D-02 .1700000000D-02 .1536687000D+01 .6254700000D+01 .4330400000D+01 -.2454400000D+01 -.1000000000D-03 -.8000000000D-04 .6992600000D+01 .1073100000D+00 .1294000000D-02 .1900000000D-02 .2959538000D+01 .3980300000D+01 .1906400000D+01 -.5875100000D+01 -.5900000000D-02 .1000000000D-03 .2240890000D+02 .2971800000D+00 .1839000000D-02 .3500000000D-02 .3121792000D+01 .1468600000D+01 .5971100000D+01 -.1806500000D+01 +2 17120190822201910012458717.5 .5000000000D-02 .0000000000D+00 .2293060000D+02 .2485800000D+00 .1562000000D-02 .1700000000D-02 .5481913000D+01 .3777300000D+01 .2024400000D+01 -.1704000000D+00 -.3400000000D-02 .4000000000D-04 .1037310000D+02 .1054100000D+00 .1286000000D-02 .1500000000D-02 .1227989000D+01 .1013300000D+01 .5407200000D+01 -.2244200000D+01 -.6000000000D-02 .2000000000D-03 .2162410000D+02 .3039400000D+00 .1781000000D-02 .4100000000D-02 .6786070000D+00 .5337700000D+01 .3539600000D+01 -.4773000000D+00 +2 17220191001201911102458757.5 .5900000000D-02 -.3000000000D-04 .2126730000D+02 .2570400000D+00 .1521000000D-02 .1200000000D-02 .3130472000D+01 .1370100000D+01 .6033500000D+01 -.5087600000D+01 -.3400000000D-02 .3000000000D-04 .1367220000D+02 .1226000000D+00 .1243000000D-02 .9000000000D-03 .5406136000D+01 .4427500000D+01 .2627700000D+01 -.3930000000D+00 .1300000000D-02 -.1000000000D-04 .2147770000D+02 .3056900000D+00 .1804000000D-02 .1100000000D-02 .4495482000D+01 .2939200000D+01 .1117000000D+01 -.4133000000D+01 +2 17320191110201912202458797.5 .3600000000D-02 .7000000000D-04 .1944840000D+02 .2823300000D+00 .1630000000D-02 .1200000000D-02 .7091950000D+00 .5289100000D+01 .3703900000D+01 -.2015200000D+01 -.1900000000D-02 -.2000000000D-04 .1529750000D+02 .1419700000D+00 .1292000000D-02 .2000000000D-02 .3181007000D+01 .1718200000D+01 .6011500000D+01 -.2680300000D+01 -.2000000000D-03 .1900000000D-03 .2210150000D+02 .3027600000D+00 .1915000000D-02 .5000000000D-02 .2036234000D+01 .5356000000D+00 .4968500000D+01 -.1926300000D+01 +2 17420191220202001292458837.5 .7500000000D-02 -.1800000000D-03 .1878030000D+02 .3133400000D+00 .1868000000D-02 .5000000000D-03 .4470571000D+01 .2928300000D+01 .1206300000D+01 -.5294000000D+01 -.4900000000D-02 .1600000000D-03 .1483240000D+02 .1406300000D+00 .1517000000D-02 .2900000000D-02 .9285020000D+00 .5278100000D+01 .3099100000D+01 -.5660000000D-01 .2000000000D-02 .1500000000D-03 .2299280000D+02 .2993500000D+00 .2042000000D-02 .4500000000D-02 .5889186000D+01 .4384300000D+01 .2528500000D+01 -.3376000000D+00 +2 17520200129202003092458877.5 -.2000000000D-03 .9000000000D-04 .2021200000D+02 .3259700000D+00 .2224000000D-02 .2000000000D-02 .1917432000D+01 .5216000000D+00 .4851900000D+01 -.1477400000D+01 .2000000000D-02 -.1300000000D-03 .1198320000D+02 .1260700000D+00 .1564000000D-02 .3800000000D-02 .5026234000D+01 .2319400000D+01 .2017000000D+00 -.3356200000D+01 .6300000000D-02 .0000000000D+00 .2345300000D+02 .3002600000D+00 .2095000000D-02 .1600000000D-02 .3480130000D+01 .1910600000D+01 .9870000000D-01 -.3889500000D+01 +2 17620200309202004182458917.5 .4000000000D-03 -.8000000000D-04 .2252880000D+02 .3032800000D+00 .2324000000D-02 .4000000000D-02 .5724590000D+01 .4301200000D+01 .2282000000D+01 -.5105400000D+01 -.3500000000D-02 .1300000000D-03 .7762300000D+01 .1258300000D+00 .1413000000D-02 .3200000000D-02 .3154403000D+01 .5541900000D+01 .3409900000D+01 -.3210000000D+00 .3000000000D-02 .1500000000D-03 .2311650000D+02 .3092700000D+00 .2056000000D-02 .4300000000D-02 .1064399000D+01 .5707200000D+01 .3935500000D+01 -.1597700000D+01 +2 17720200418202005282458957.5 -.1900000000D-02 -.5000000000D-04 .2346900000D+02 .2754800000D+00 .1976000000D-02 .3900000000D-02 .3331706000D+01 .1730700000D+01 .6080800000D+01 -.2472600000D+01 .1700000000D-02 -.1800000000D-03 .7404400000D+01 .1157100000D+00 .1372000000D-02 .3700000000D-02 .1804090000D+01 .2562500000D+01 .4055000000D+00 -.3830900000D+01 .7600000000D-02 -.1400000000D-03 .2226850000D+02 .3197300000D+00 .1955000000D-02 .2400000000D-02 .4897794000D+01 .3244600000D+01 .1424600000D+01 -.7138000000D+00 +2 17820200528202007072458997.5 -.5500000000D-02 .6000000000D-04 .2250640000D+02 .2651700000D+00 .1497000000D-02 .4600000000D-02 .9705780000D+00 .5496500000D+01 .3530900000D+01 -.4875000000D+00 -.4300000000D-02 .8000000000D-04 .1112970000D+02 .1064200000D+00 .1109000000D-02 .2900000000D-02 .6269163000D+01 .5805900000D+01 .3799100000D+01 -.7837000000D+00 -.8000000000D-03 .1600000000D-03 .2172770000D+02 .3159000000D+00 .1773000000D-02 .2500000000D-02 .2418098000D+01 .8136000000D+00 .5050800000D+01 -.1394900000D+01 +2 17920200707202008162459037.5 -.7000000000D-03 -.1700000000D-03 .2072030000D+02 .2480600000D+00 .1303000000D-02 .4200000000D-02 .4888126000D+01 .3083100000D+01 .4776000000D+00 -.4455200000D+01 -.2000000000D-03 -.1100000000D-03 .1387320000D+02 .1034800000D+00 .7070000000D-03 .2500000000D-02 .4143273000D+01 .2944100000D+01 .5767000000D+00 -.4379300000D+01 .6000000000D-03 -.4000000000D-04 .2197890000D+02 .2779500000D+00 .1717000000D-02 .2100000000D-02 .6254156000D+01 .4694400000D+01 .2080300000D+01 -.5524600000D+01 +2 18020200816202009252459077.5 -.7900000000D-02 .1600000000D-03 .1943710000D+02 .1601100000D+00 .2612000000D-02 .4500000000D-02 .2573856000D+01 .8331000000D+00 .3960700000D+01 -.2020500000D+01 -.4300000000D-02 .8000000000D-04 .1476290000D+02 .6730000000D-01 .8040000000D-03 .5000000000D-03 .2001894000D+01 .4434000000D+00 .3612400000D+01 -.2920200000D+01 -.4000000000D-03 -.6000000000D-04 .2253260000D+02 .1695000000D+00 .2659000000D-02 .4600000000D-02 .3945109000D+01 .2384900000D+01 .5559900000D+01 -.1789000000D+01 +2 18120200925202011042459117.5 .8000000000D-02 -.6500000000D-03 .1926690000D+02 .1042800000D+00 .5720000000D-03 .5000000000D-02 .5371760000D+00 .1943500000D+01 .4935800000D+01 -.3562100000D+01 .2000000000D-03 -.1700000000D-03 .1484150000D+02 .1228000000D-01 .3920000000D-03 .1900000000D-02 .6274355000D+01 .1752300000D+01 .4806100000D+01 -.2411300000D+01 .3500000000D-02 -.2400000000D-03 .2256650000D+02 .8416000000D-01 .4190000000D-03 .1180000000D-01 .1915813000D+01 .3684100000D+01 .2156000000D+00 -.5595900000D+01 +2 18220201104202012142459157.5 -.4800000000D-02 -.1000000000D-04 .1994560000D+02 .2067000000D-01 .2273000000D-02 .2600000000D-02 .5065093000D+01 .5787200000D+01 .3198700000D+01 -.5764500000D+01 -.3100000000D-02 .0000000000D+00 .1482180000D+02 .3148000000D-01 .8320000000D-03 .2500000000D-02 .4350904000D+01 .3114900000D+01 .2728400000D+01 -.5972000000D+01 -.5700000000D-02 .2600000000D-03 .2192490000D+02 .7980000000D-02 .2268000000D-02 .2900000000D-02 .1195200000D+00 .3698500000D+01 .4809200000D+01 -.1892900000D+01 +2 18320201214202101232459197.5 -.4100000000D-02 -.6000000000D-04 .1968610000D+02 .1641100000D+00 .1381000000D-02 .3200000000D-02 .3008157000D+01 .1357100000D+01 .4400000000D+00 -.2667700000D+01 -.3600000000D-02 .3000000000D-04 .1533220000D+02 .9900000000D-01 .8330000000D-03 .3300000000D-02 .2276251000D+01 .9225000000D+00 .5772700000D+01 -.2708500000D+01 .2200000000D-02 -.1900000000D-03 .2181040000D+02 .1863300000D+00 .1282000000D-02 .2900000000D-02 .4321588000D+01 .2823400000D+01 .1811000000D+01 -.5641500000D+01 diff --git a/GUI/xephem/auxil/mars.9910 b/GUI/xephem/auxil/mars.9910 new file mode 100644 index 0000000..10a5879 --- /dev/null +++ b/GUI/xephem/auxil/mars.9910 @@ -0,0 +1,199 @@ + 4 2 2 90 19.7027 4.9788 50.0 40.0 200 2451179.500 1999 +1 219990101199902202451179.5 -.1795000000D+00 .0000000000D+00 .7909200000D+01 .7612000000D-01 .3820000000D-03 .6250000000D-01 -.5779392000D+01 -.1307200000D+01 -.4130200000D+01 -.7473000000D+00 .8930000000D-01 .6600000000D-03 .6140800000D+01 .2857000000D-01 .2130000000D-03 .4800000000D-01 -.3382185000D+01 -.4718300000D+01 -.1006100000D+01 -.4503200000D+01 -.8900000000D-01 .5700000000D-03 .8736700000D+01 .7768000000D-01 .4070000000D-03 .6700000000D-01 -.4470250000D+01 -.6009800000D+01 -.2613600000D+01 -.5798800000D+01 +1 319990220199904112451229.5 -.1754000000D+00 .1600000000D-03 .7494100000D+01 .4508000000D-01 .8960000000D-03 .5450000000D-01 -.1195564000D+01 -.2881400000D+01 -.6034200000D+01 -.4080900000D+01 .1120000000D+00 .3100000000D-03 .6196100000D+01 .1502000000D-01 .2940000000D-03 .4700000000D-01 -.4871196000D+01 -.5173000000D+00 -.3614600000D+01 -.1385800000D+01 -.7850000000D-01 .1420000000D-02 .9042300000D+01 .4050000000D-01 .8150000000D-03 .6550000000D-01 -.6121933000D+01 -.1334800000D+01 -.4474300000D+01 -.2651300000D+01 +1 419990411199905312451279.5 -.1863000000D+00 .1920000000D-02 .7505200000D+01 .7076000000D-01 .5420000000D-03 .5650000000D-01 -.2537202000D+01 -.1021800000D+01 -.4266300000D+01 -.5975000000D+00 .1431000000D+00 -.1000000000D-04 .6163200000D+01 .2372000000D-01 .2770000000D-03 .4850000000D-01 -.6205722000D+01 -.4724200000D+01 -.1587200000D+01 -.4315800000D+01 .3950000000D-01 .2310000000D-02 .9048100000D+01 .6664000000D-01 .5160000000D-03 .5660000000D-01 -.1173402000D+01 -.5638300000D+01 -.2570600000D+01 -.5179500000D+01 +1 519990531199907202451329.5 -.9250000000D-01 .4500000000D-03 .7771300000D+01 .1148000000D-01 .7780000000D-03 .6630000000D-01 -.3580540000D+01 -.4326200000D+01 -.5618000000D+01 -.3619200000D+01 .1368000000D+00 -.3500000000D-03 .6202600000D+01 .1280000000D-01 .3500000000D-03 .4860000000D-01 -.1171066000D+01 -.2196900000D+01 -.3191500000D+01 -.1149300000D+01 .1314000000D+00 -.1400000000D-03 .8699500000D+01 .1000000000D-01 .7620000000D-03 .6200000000D-01 -.2274791000D+01 -.3684000000D+01 -.3971500000D+01 -.2326300000D+01 +1 619990720199909082451379.5 -.6300000000D-01 -.9900000000D-03 .7625000000D+01 .8491000000D-01 .6000000000D-03 .5010000000D-01 -.5179545000D+01 -.5055000000D+00 -.1682600000D+01 -.1041300000D+01 .1279000000D+00 -.1200000000D-03 .6281900000D+01 .4756000000D-01 .4100000000D-03 .4480000000D-01 -.2703399000D+01 -.4303500000D+01 -.6178100000D+01 -.4597600000D+01 .1437000000D+00 .2400000000D-03 .8852000000D+01 .8654000000D-01 .5330000000D-03 .6300000000D-01 -.3871381000D+01 -.5341600000D+01 -.4158000000D+00 -.5876800000D+01 +1 719990908199910282451429.5 -.1505000000D+00 -.2200000000D-03 .7694200000D+01 .1292100000D+00 .8690000000D-03 .5690000000D-01 -.8856960000D+00 -.2343600000D+01 -.4162100000D+01 -.5026400000D+01 .1178000000D+00 -.1080000000D-02 .5637900000D+01 .5601000000D-01 .6660000000D-03 .3390000000D-01 -.4393830000D+01 -.3393000000D+00 -.2503100000D+01 -.1853400000D+01 .1438000000D+00 -.3800000000D-03 .9238100000D+01 .1086600000D+00 .7810000000D-03 .7320000000D-01 -.5731852000D+01 -.9464000000D+00 -.2591800000D+01 -.3307000000D+01 +1 819991028199912172451479.5 -.1385000000D+00 -.1580000000D-02 .8732300000D+01 .1391700000D+00 .1078000000D-02 .6940000000D-01 -.2977900000D+01 -.4389700000D+01 -.2677000000D+00 -.2463600000D+01 .6480000000D-01 -.2080000000D-02 .3524000000D+01 .5872000000D-01 .6830000000D-03 .1960000000D-01 -.5906012000D+01 -.3151900000D+01 -.5321800000D+01 -.4734400000D+01 .1216000000D+00 -.1620000000D-02 .9307500000D+01 .1241100000D+00 .1021000000D-02 .7270000000D-01 -.1382011000D+01 -.2953100000D+01 -.4729900000D+01 -.6824000000D+00 +1 919991217200002052451529.5 -.2224000000D+00 .6400000000D-03 .9420700000D+01 .1212900000D+00 .8250000000D-03 .7140000000D-01 -.4957250000D+01 -.3162000000D+00 -.2362000000D+01 -.6080900000D+01 -.2840000000D-01 -.8700000000D-03 .2970200000D+01 .5679000000D-01 .6920000000D-03 .2840000000D-01 -.2156960000D+00 -.5933000000D+01 -.1847800000D+01 -.1042700000D+01 .5670000000D-01 -.5200000000D-03 .8867700000D+01 .1413200000D+00 .9960000000D-03 .6530000000D-01 -.3391458000D+01 -.5055200000D+01 -.6811000000D+00 -.4408100000D+01 +1 1020000205200003262451579.5 -.2032000000D+00 .5900000000D-03 .8829500000D+01 .1145800000D+00 .6520000000D-03 .6000000000D-01 -.6067560000D+00 -.2404900000D+01 -.4127800000D+01 -.3482400000D+01 -.9930000000D-01 -.1200000000D-03 .5253000000D+01 .5835000000D-01 .6140000000D-03 .3940000000D-01 -.1573183000D+01 -.2431700000D+01 -.4423500000D+01 -.4511600000D+01 .1000000000D-01 -.1990000000D-02 .8458300000D+01 .1412200000D+00 .8560000000D-03 .5980000000D-01 -.5501314000D+01 -.8284000000D+00 -.2795700000D+01 -.2148400000D+01 +1 1120000326200005152451629.5 -.1542000000D+00 -.3700000000D-03 .7781300000D+01 .1235500000D+00 .6880000000D-03 .5350000000D-01 -.2625991000D+01 -.4338500000D+01 -.6033900000D+01 -.1065500000D+01 -.7640000000D-01 -.2900000000D-03 .6274800000D+01 .6541000000D-01 .6330000000D-03 .4280000000D-01 -.3329059000D+01 -.4900400000D+01 -.8789000000D+00 -.1763500000D+01 -.8700000000D-01 -.5800000000D-03 .8718200000D+01 .1291300000D+00 .8810000000D-03 .7140000000D-01 -.1316794000D+01 -.2786800000D+01 -.4790200000D+01 -.6052300000D+01 +1 1220000515200007042451679.5 -.1740000000D+00 .1300000000D-02 .7683500000D+01 .1316300000D+00 .7670000000D-03 .5780000000D-01 -.4767884000D+01 -.6243300000D+01 -.2011300000D+01 -.4867300000D+01 -.1069000000D+00 .6400000000D-03 .5575300000D+01 .5474000000D-01 .6570000000D-03 .3450000000D-01 -.5068865000D+01 -.1160200000D+01 -.3455600000D+01 -.5136400000D+01 -.1074000000D+00 -.5300000000D-03 .9244700000D+01 .1200400000D+00 .8520000000D-03 .7570000000D-01 -.3295328000D+01 -.4796800000D+01 -.5982000000D+00 -.3379100000D+01 +1 1320000704200008232451729.5 -.1266000000D+00 -.5700000000D-03 .8774100000D+01 .1126200000D+00 .7080000000D-03 .6470000000D-01 -.5356070000D+00 -.1945100000D+01 -.4139800000D+01 -.2307200000D+01 -.6550000000D-01 .1700000000D-03 .3579400000D+01 .5048000000D-01 .4710000000D-03 .2220000000D-01 -.1955450000D+00 -.3935700000D+01 -.6055900000D+01 -.1596100000D+01 -.1392000000D+00 -.5500000000D-03 .9328800000D+01 .1114300000D+00 .6330000000D-03 .7070000000D-01 -.5195349000D+01 -.5796000000D+00 -.2573400000D+01 -.6819000000D+00 +1 1420000823200010122451779.5 -.1404000000D+00 .6100000000D-03 .9380400000D+01 .8579000000D-01 .5250000000D-03 .6880000000D-01 -.2395074000D+01 -.3975900000D+01 -.5882800000D+01 -.5893700000D+01 -.5930000000D-01 .3000000000D-03 .3182700000D+01 .4538000000D-01 .4170000000D-03 .3210000000D-01 -.8904890000D+00 -.4500000000D-01 -.2207000000D+01 -.4016100000D+01 -.1721000000D+00 .3300000000D-03 .8858100000D+01 .1066200000D+00 .4980000000D-03 .6170000000D-01 -.8102150000D+00 -.2526800000D+01 -.4360200000D+01 -.4374000000D+01 +1 1520001012200012012451829.5 -.1145000000D+00 .4800000000D-03 .8929000000D+01 .7945000000D-01 .4740000000D-03 .6570000000D-01 -.4159560000D+01 -.5901800000D+01 -.1276000000D+01 -.3090900000D+01 -.4880000000D-01 .5000000000D-04 .4956000000D+01 .3858000000D-01 .4080000000D-03 .4560000000D-01 -.2079000000D+01 -.2403200000D+01 -.4480800000D+01 -.8131000000D+00 -.1468000000D+00 -.1130000000D-02 .8420800000D+01 .1051300000D+00 .4640000000D-03 .6010000000D-01 -.2739017000D+01 -.4354500000D+01 -.2310000000D-01 -.1760100000D+01 +1 1620001201200101202451879.5 -.9580000000D-01 .7300000000D-03 .7999400000D+01 .9000000000D-01 .3770000000D-03 .6140000000D-01 -.5946936000D+01 -.1452200000D+01 -.3283200000D+01 -.3015000000D+00 -.3680000000D-01 .4500000000D-03 .6152500000D+01 .3967000000D-01 .3570000000D-03 .5070000000D-01 -.3609459000D+01 -.4810800000D+01 -.6951000000D+00 -.4045000000D+01 -.2048000000D+00 .3800000000D-03 .8590700000D+01 .9744000000D-01 .4300000000D-03 .6380000000D-01 -.4651795000D+01 -.6154000000D+01 -.1997000000D+01 -.5288700000D+01 +1 1720010120200103112451929.5 -.5450000000D-01 .8200000000D-03 .7416000000D+01 .9382000000D-01 .2920000000D-03 .5740000000D-01 -.1556437000D+01 -.3210300000D+01 -.5578100000D+01 -.3886000000D+01 -.2510000000D-01 .2700000000D-03 .6251800000D+01 .3551000000D-01 .3010000000D-03 .4690000000D-01 -.5199736000D+01 -.8636000000D+00 -.3119500000D+01 -.1004800000D+01 -.1950000000D+00 -.6900000000D-03 .9100300000D+01 .8248000000D-01 .3620000000D-03 .6760000000D-01 -.1956950000D+00 -.1692300000D+01 -.3918000000D+01 -.2443700000D+01 +1 1820010311200104302451979.5 .1200000000D-02 -.5400000000D-03 .7769600000D+01 .7834000000D-01 .5260000000D-03 .5630000000D-01 -.3443060000D+01 -.4889900000D+01 -.1616800000D+01 -.1178500000D+01 .5000000000D-03 .6300000000D-03 .5353400000D+01 .2879000000D-01 .1510000000D-03 .3790000000D-01 -.4339100000D+00 -.3288200000D+01 -.6281100000D+01 -.4148900000D+01 -.2164000000D+00 .1600000000D-03 .9363600000D+01 .6522000000D-01 .3890000000D-03 .7060000000D-01 -.1915799000D+01 -.3517800000D+01 -.1242000000D+00 -.5823500000D+01 +1 1920010430200106192452029.5 -.2650000000D-01 -.1930000000D-02 .8310800000D+01 .1809000000D-01 .8550000000D-03 .6180000000D-01 -.5087321000D+01 -.6237300000D+01 -.3188600000D+01 -.4217200000D+01 .2330000000D-01 .4100000000D-03 .4324100000D+01 .1130000000D-01 .3620000000D-03 .3870000000D-01 -.1818533000D+01 -.4311900000D+01 -.2019400000D+01 -.8810000000D+00 -.2236000000D+00 .6800000000D-03 .9333500000D+01 .1721000000D-01 .6820000000D-03 .6290000000D-01 -.3488502000D+01 -.4946000000D+01 -.1858900000D+01 -.2528700000D+01 +1 2020010619200108082452079.5 -.1158000000D+00 -.1200000000D-02 .8091900000D+01 .6386000000D-01 .1155000000D-02 .6080000000D-01 -.6273235000D+01 -.4440900000D+01 -.1313300000D+01 -.7674000000D+00 .5340000000D-01 .8800000000D-03 .4749800000D+01 .2665000000D-01 .4590000000D-03 .3690000000D-01 -.3249301000D+01 -.3236900000D+01 -.6171600000D+01 -.4167200000D+01 -.1795000000D+00 .1740000000D-02 .9379800000D+01 .4708000000D-01 .9060000000D-03 .7350000000D-01 -.4732562000D+01 -.3026700000D+01 -.6176600000D+01 -.5629700000D+01 +1 2120010808200109272452129.5 -.1969000000D+00 .3300000000D-03 .7991300000D+01 .6448000000D-01 .6440000000D-03 .5340000000D-01 -.1274448000D+01 -.2575800000D+01 -.3575700000D+01 -.4316400000D+01 .9920000000D-01 -.3800000000D-03 .4995700000D+01 .2799000000D-01 .3860000000D-03 .2940000000D-01 -.4619829000D+01 -.8187000000D+00 -.2371000000D+01 -.1094700000D+01 -.8210000000D-01 -.7000000000D-04 .9323400000D+01 .5103000000D-01 .6470000000D-03 .7490000000D-01 -.6050726000D+01 -.1218400000D+01 -.2025600000D+01 -.2679600000D+01 +1 2220010927200111162452179.5 -.1480000000D+00 -.9500000000D-03 .8832500000D+01 .1131700000D+00 .8030000000D-03 .6520000000D-01 -.3105117000D+01 -.4501800000D+01 -.1543000000D+00 -.1607500000D+01 .7560000000D-01 -.9900000000D-03 .3330000000D+01 .5172000000D-01 .5570000000D-03 .1760000000D-01 -.5976786000D+01 -.3293100000D+01 -.5357300000D+01 -.3842500000D+01 -.1057000000D+00 -.3800000000D-03 .9289300000D+01 .1025500000D+00 .8760000000D-03 .7710000000D-01 -.1503468000D+01 -.3045500000D+01 -.4617000000D+01 -.6271300000D+01 +1 2320011116200201052452229.5 -.2019000000D+00 .1460000000D-02 .9396800000D+01 .1121700000D+00 .7710000000D-03 .6620000000D-01 -.5009987000D+01 -.3359000000D+00 -.2274600000D+01 -.5235300000D+01 .3090000000D-01 .2000000000D-04 .2857300000D+01 .5361000000D-01 .6520000000D-03 .2620000000D-01 -.2939820000D+00 -.5915400000D+01 -.1816800000D+01 -.1326000000D+00 -.1089000000D+00 -.4300000000D-03 .8874300000D+01 .1336100000D+00 .9790000000D-03 .7270000000D-01 -.3436293000D+01 -.5069000000D+01 -.6738000000D+00 -.3654000000D+01 +1 2420020105200202242452279.5 -.1409000000D+00 .3300000000D-03 .8894500000D+01 .1115400000D+00 .6420000000D-03 .5970000000D-01 -.6315900000D+00 -.2407800000D+01 -.4135900000D+01 -.2630100000D+01 .1140000000D-01 -.1700000000D-03 .5040000000D+01 .5581000000D-01 .5860000000D-03 .3660000000D-01 -.1608861000D+01 -.2407100000D+01 -.4352200000D+01 -.3542400000D+01 -.1413000000D+00 -.1290000000D-02 .8506700000D+01 .1412700000D+00 .8590000000D-03 .6330000000D-01 -.5501635000D+01 -.8409000000D+00 -.2857200000D+01 -.1227400000D+01 +1 2520020224200204152452329.5 -.1053000000D+00 .9900000000D-03 .7908600000D+01 .1181100000D+00 .6720000000D-03 .5760000000D-01 -.2625011000D+01 -.4347000000D+01 -.5961500000D+01 -.2138000000D+00 .3450000000D-01 -.3700000000D-03 .6196800000D+01 .6502000000D-01 .5690000000D-03 .3920000000D-01 -.3359998000D+01 -.4874600000D+01 -.7475000000D+00 -.8782000000D+00 -.2113000000D+00 .3000000000D-03 .8703500000D+01 .1306900000D+00 .8290000000D-03 .6530000000D-01 -.1308081000D+01 -.2819200000D+01 -.4818400000D+01 -.5227000000D+01 +1 2620020415200206042452379.5 -.5810000000D-01 .1800000000D-02 .7614200000D+01 .1285600000D+00 .8100000000D-03 .6360000000D-01 -.4743780000D+01 -.6230600000D+01 -.1855400000D+01 -.4025600000D+01 -.3600000000D-02 .0000000000D+00 .5742000000D+01 .5730000000D-01 .6280000000D-03 .3360000000D-01 -.5136209000D+01 -.1019200000D+01 -.3329600000D+01 -.4324300000D+01 -.1846000000D+00 -.7700000000D-03 .9187200000D+01 .1221400000D+00 .8390000000D-03 .7260000000D-01 -.3305490000D+01 -.4803900000D+01 -.5829000000D+00 -.2661500000D+01 +1 2720020604200207242452429.5 .1830000000D-01 -.1400000000D-03 .8537100000D+01 .1215100000D+00 .8140000000D-03 .6730000000D-01 -.5371720000D+00 -.1927700000D+01 -.4111000000D+01 -.1466400000D+01 .1100000000D-02 -.1160000000D-02 .3909800000D+01 .4888000000D-01 .5080000000D-03 .2160000000D-01 -.4016210000D+00 -.3759000000D+01 -.5901000000D+01 -.1016700000D+01 -.2284000000D+00 .5600000000D-03 .9387500000D+01 .1148000000D+00 .6770000000D-03 .7270000000D-01 -.5220673000D+01 -.5727000000D+00 -.2602300000D+01 -.6250600000D+01 +1 2820020724200209122452479.5 .2570000000D-01 .9200000000D-03 .9333300000D+01 .9651000000D-01 .6050000000D-03 .6810000000D-01 -.2442808000D+01 -.3978500000D+01 -.6024200000D+01 -.5112100000D+01 -.5410000000D-01 -.8800000000D-03 .2791400000D+01 .4615000000D-01 .4410000000D-03 .2890000000D-01 -.1209271000D+01 -.6000000000D-03 -.2124700000D+01 -.3466100000D+01 -.2084000000D+00 .6000000000D-03 .9055600000D+01 .1088600000D+00 .5230000000D-03 .6540000000D-01 -.8402970000D+00 -.2563800000D+01 -.4385700000D+01 -.3595700000D+01 +1 2920020912200211012452529.5 .6490000000D-01 -.2500000000D-03 .9130400000D+01 .8438000000D-01 .5250000000D-03 .6550000000D-01 -.4240693000D+01 -.5942600000D+01 -.1380500000D+01 -.2431600000D+01 -.1093000000D+00 -.4600000000D-03 .4430000000D+01 .4212000000D-01 .4610000000D-03 .4550000000D-01 -.2246373000D+01 -.2383900000D+01 -.4447200000D+01 -.2638000000D+00 -.1651000000D+00 -.1800000000D-03 .8526100000D+01 .1072800000D+00 .4970000000D-03 .6120000000D-01 -.2776141000D+01 -.4433300000D+01 -.6189400000D+01 -.9973000000D+00 +1 3020021101200212212452579.5 .4720000000D-01 .9100000000D-03 .8265400000D+01 .9338000000D-01 .4880000000D-03 .6090000000D-01 -.6039920000D+01 -.1535900000D+01 -.3203400000D+01 -.5995500000D+01 -.1207000000D+00 -.8000000000D-04 .5926800000D+01 .4568000000D-01 .4420000000D-03 .5180000000D-01 -.3769629000D+01 -.4813100000D+01 -.6514000000D+00 -.3530000000D+01 -.1754000000D+00 .1100000000D-02 .8458800000D+01 .1061600000D+00 .5450000000D-03 .6350000000D-01 -.4729026000D+01 -.6235700000D+01 -.1866500000D+01 -.4592600000D+01 +1 3120021221200302092452629.5 .9190000000D-01 .8100000000D-03 .7500500000D+01 .1077000000D+00 .4100000000D-03 .5550000000D-01 -.1679196000D+01 -.3357000000D+01 -.5139700000D+01 -.3351700000D+01 -.1357000000D+00 .5000000000D-03 .6313500000D+01 .4622000000D-01 .4730000000D-03 .4880000000D-01 -.5402820000D+01 -.9052000000D+00 -.3170500000D+01 -.5286000000D+00 -.1298000000D+00 -.3600000000D-03 .8961800000D+01 .9991000000D-01 .5550000000D-03 .6670000000D-01 -.3495900000D+00 -.1810300000D+01 -.3792100000D+01 -.1887200000D+01 +1 3220030209200303312452679.5 .1493000000D+00 .6000000000D-03 .7820500000D+01 .1100000000D+00 .5080000000D-03 .6010000000D-01 -.3710374000D+01 -.5131600000D+01 -.9514000000D+00 -.7676000000D+00 -.1049000000D+00 .1310000000D-02 .5294600000D+01 .4168000000D-01 .4400000000D-03 .3300000000D-01 -.7008050000D+00 -.3491800000D+01 -.5415300000D+01 -.3689300000D+01 -.1432000000D+00 .1010000000D-02 .9353600000D+01 .9106000000D-01 .5360000000D-03 .6940000000D-01 -.2182550000D+01 -.3729100000D+01 -.5511800000D+01 -.5464200000D+01 +1 3320030331200305202452729.5 .1683000000D+00 .8700000000D-03 .8929900000D+01 .9054000000D-01 .5440000000D-03 .6810000000D-01 -.5625378000D+01 -.7252000000D+00 -.2885400000D+01 -.4260200000D+01 -.3780000000D-01 .1550000000D-02 .3382300000D+01 .4796000000D-01 .3250000000D-03 .2030000000D-01 -.1919239000D+01 -.5907800000D+01 -.1750100000D+01 -.6250700000D+01 -.8870000000D-01 .2500000000D-03 .9189800000D+01 .9341000000D-01 .5100000000D-03 .7100000000D-01 -.3989178000D+01 -.5626400000D+01 -.1202000000D+01 -.2728200000D+01 +1 3420030520200307092452779.5 .2126000000D+00 -.9700000000D-03 .9382200000D+01 .7248000000D-01 .4130000000D-03 .7000000000D-01 -.1093608000D+01 -.2735400000D+01 -.5300000000D+01 -.1300500000D+01 .3450000000D-01 .7800000000D-03 .3203500000D+01 .3724000000D-01 .2730000000D-03 .2630000000D-01 -.2606984000D+01 -.1754400000D+01 -.4657500000D+01 -.2497800000D+01 -.9290000000D-01 .4800000000D-03 .8822200000D+01 .9660000000D-01 .5630000000D-03 .7310000000D-01 -.5807665000D+01 -.1218800000D+01 -.4072300000D+01 -.6183600000D+01 +1 3520030709200308282452829.5 .1806000000D+00 -.6000000000D-03 .9064100000D+01 .3681000000D-01 .7700000000D-03 .6990000000D-01 -.2719646000D+01 -.4475200000D+01 -.1343900000D+01 -.4523000000D+01 .7580000000D-01 .3500000000D-03 .4185500000D+01 .1104000000D-01 .3080000000D-03 .3240000000D-01 -.3742826000D+01 -.2816300000D+01 -.2929000000D+00 -.5561500000D+01 -.5630000000D-01 -.1370000000D-02 .8736000000D+01 .4193000000D-01 .9410000000D-03 .7650000000D-01 -.1253526000D+01 -.2828600000D+01 -.6033100000D+01 -.3126400000D+01 +1 3620030828200310172452879.5 .1288000000D+00 -.1850000000D-02 .9107100000D+01 .4109000000D-01 .7840000000D-03 .7430000000D-01 -.4045524000D+01 -.2558400000D+01 -.5663700000D+01 -.1181800000D+01 .8790000000D-01 -.4000000000D-04 .3812000000D+01 .2026000000D-01 .4370000000D-03 .2850000000D-01 -.5014685000D+01 -.1558200000D+01 -.5180800000D+01 -.2406700000D+01 -.1631000000D+00 -.4600000000D-03 .8867000000D+01 .5458000000D-01 .1048000000D-02 .7270000000D-01 -.2564558000D+01 -.9769000000D+00 -.4175700000D+01 -.6094300000D+01 +1 3720031017200312062452929.5 .3870000000D-01 .4000000000D-03 .9161900000D+01 .4453000000D-01 .5470000000D-03 .6690000000D-01 -.5361665000D+01 -.6593000000D+00 -.1491200000D+01 -.4491900000D+01 .8600000000D-01 .7900000000D-03 .3921900000D+01 .2820000000D-01 .2950000000D-03 .3130000000D-01 -.1834170000D+00 -.4093000000D+00 -.1823200000D+01 -.5477600000D+01 -.1635000000D+00 -.1900000000D-03 .8658600000D+01 .5940000000D-01 .6740000000D-03 .7460000000D-01 -.3870688000D+01 -.5367400000D+01 -.1170000000D+00 -.3161900000D+01 +1 3820031206200401252452979.5 .4510000000D-01 -.3900000000D-03 .8681300000D+01 .8917000000D-01 .5560000000D-03 .5890000000D-01 -.7682560000D+00 -.2494800000D+01 -.3975700000D+01 -.1755900000D+01 .1136000000D+00 -.1400000000D-03 .5337700000D+01 .4690000000D-01 .4510000000D-03 .4010000000D-01 -.1705082000D+01 -.2604200000D+01 -.4389200000D+01 -.2655900000D+01 -.1815000000D+00 .2600000000D-03 .8471700000D+01 .1142500000D+00 .6350000000D-03 .6510000000D-01 -.5666123000D+01 -.9652000000D+00 -.2797500000D+01 -.4969000000D+00 +1 3920040125200403152453029.5 .3620000000D-01 .1310000000D-02 .7867500000D+01 .1082600000D+00 .6110000000D-03 .5570000000D-01 -.2673060000D+01 -.4384400000D+01 -.5929300000D+01 -.5679800000D+01 .1286000000D+00 -.1200000000D-03 .6240100000D+01 .5970000000D-01 .4800000000D-03 .4010000000D-01 -.3414161000D+01 -.4918300000D+01 -.6630000000D+00 -.6204400000D+01 -.1828000000D+00 .8300000000D-03 .8723300000D+01 .1208100000D+00 .6800000000D-03 .6290000000D-01 -.1361978000D+01 -.2891000000D+01 -.4833500000D+01 -.4312100000D+01 +1 4020040315200405042453079.5 .1028000000D+00 .1010000000D-02 .7548500000D+01 .1220800000D+00 .7890000000D-03 .6470000000D-01 -.4742742000D+01 -.6234500000D+01 -.1761700000D+01 -.3281900000D+01 .1013000000D+00 -.4500000000D-03 .5878000000D+01 .5662000000D-01 .5610000000D-03 .3570000000D-01 -.5178335000D+01 -.9504000000D+00 -.3192900000D+01 -.3457400000D+01 -.1243000000D+00 -.5900000000D-03 .9180200000D+01 .1164200000D+00 .7300000000D-03 .6580000000D-01 -.3327833000D+01 -.4840000000D+01 -.5158000000D+00 -.1810000000D+01 +1 4120040504200406232453129.5 .1435000000D+00 .3800000000D-03 .8341600000D+01 .1248300000D+00 .8780000000D-03 .7190000000D-01 -.5313370000D+00 -.1904300000D+01 -.4057400000D+01 -.6792000000D+00 .8390000000D-01 -.1720000000D-02 .4217100000D+01 .4787000000D-01 .5140000000D-03 .2300000000D-01 -.5124360000D+00 -.3569800000D+01 -.5732000000D+01 -.3144000000D+00 -.1614000000D+00 .1350000000D-02 .9391100000D+01 .1129700000D+00 .6800000000D-03 .6740000000D-01 -.5238543000D+01 -.5574000000D+00 -.2515500000D+01 -.5449300000D+01 +1 4220040623200408122453179.5 .1742000000D+00 .7200000000D-03 .9258900000D+01 .1058300000D+00 .6750000000D-03 .7180000000D-01 -.2462403000D+01 -.3974000000D+01 -.6122600000D+01 -.4284000000D+01 .4100000000D-02 -.1300000000D-02 .2622400000D+01 .4524000000D-01 .4560000000D-03 .2540000000D-01 -.1496698000D+01 -.6168300000D+01 -.2011700000D+01 -.2897800000D+01 -.1035000000D+00 .2300000000D-03 .9173800000D+01 .1098800000D+00 .5700000000D-03 .6420000000D-01 -.8558660000D+00 -.2551700000D+01 -.4375700000D+01 -.2797300000D+01 +1 4320040812200410012453229.5 .2067000000D+00 -.8300000000D-03 .9277600000D+01 .9019000000D-01 .5220000000D-03 .6500000000D-01 -.4289520000D+01 -.5976700000D+01 -.1510900000D+01 -.1656700000D+01 -.7880000000D-01 -.6800000000D-03 .3877500000D+01 .4307000000D-01 .4730000000D-03 .4110000000D-01 -.2375242000D+01 -.2348000000D+01 -.4391500000D+01 -.5961500000D+01 -.7590000000D-01 .8000000000D-03 .8673200000D+01 .1081000000D+00 .5370000000D-03 .6400000000D-01 -.2788930000D+01 -.4462600000D+01 -.6140800000D+01 -.2233000000D+00 +1 4420041001200411202453279.5 .1596000000D+00 .5100000000D-03 .8534700000D+01 .9344000000D-01 .5250000000D-03 .5840000000D-01 -.6102480000D+01 -.1586000000D+01 -.3202800000D+01 -.5262600000D+01 -.9750000000D-01 -.6100000000D-03 .5572600000D+01 .4826000000D-01 .4740000000D-03 .4940000000D-01 -.3875606000D+01 -.4792600000D+01 -.5619000000D+00 -.2947800000D+01 -.3820000000D-01 .1370000000D-02 .8427700000D+01 .1097000000D+00 .6290000000D-03 .6720000000D-01 -.4754842000D+01 -.6281300000D+01 -.1792300000D+01 -.3863200000D+01 +1 4520041120200501092453329.5 .1829000000D+00 -.5800000000D-03 .7685800000D+01 .1099700000D+00 .5160000000D-03 .5320000000D-01 -.1732410000D+01 -.3435500000D+01 -.5068800000D+01 -.2636900000D+01 -.1381000000D+00 .4900000000D-03 .6265000000D+01 .5331000000D-01 .5220000000D-03 .4880000000D-01 -.5537231000D+01 -.8821000000D+00 -.3165200000D+01 -.6268800000D+01 .2100000000D-01 .2400000000D-03 .8798900000D+01 .1115200000D+00 .6920000000D-03 .6870000000D-01 -.4190390000D+00 -.1868700000D+01 -.3866800000D+01 -.1170200000D+01 +1 4620050109200502282453379.5 .1739000000D+00 .2700000000D-03 .7740400000D+01 .1233000000D+00 .6280000000D-03 .5640000000D-01 -.3799777000D+01 -.5265000000D+01 -.9753000000D+00 -.1281000000D+00 -.1130000000D+00 .6700000000D-03 .5508900000D+01 .4731000000D-01 .5830000000D-03 .3390000000D-01 -.9062570000D+00 -.3453400000D+01 -.5528900000D+01 -.3170800000D+01 .3740000000D-01 .1330000000D-02 .9308100000D+01 .1050600000D+00 .6820000000D-03 .6770000000D-01 -.2310918000D+01 -.3835000000D+01 -.5704000000D+01 -.4817300000D+01 +1 4720050228200504192453429.5 .1687000000D+00 .2000000000D-03 .8871100000D+01 .1080100000D+00 .7440000000D-03 .6800000000D-01 -.5814161000D+01 -.9151000000D+00 -.2973900000D+01 -.3748700000D+01 -.7440000000D-01 .9100000000D-03 .3449500000D+01 .5558000000D-01 .5150000000D-03 .2070000000D-01 -.2202862000D+01 -.6115200000D+01 -.1883100000D+01 -.5628100000D+01 .1106000000D+00 .3000000000D-04 .9246200000D+01 .1076700000D+00 .7360000000D-03 .6640000000D-01 -.4181797000D+01 -.5815900000D+01 -.1252100000D+01 -.2229100000D+01 +1 4820050419200506082453479.5 .1848000000D+00 -.1190000000D-02 .9344800000D+01 .9226000000D-01 .6670000000D-03 .6710000000D-01 -.1383430000D+01 -.3000500000D+01 -.4823700000D+01 -.9494000000D+00 -.3670000000D-01 .1800000000D-03 .3518800000D+01 .5174000000D-01 .5620000000D-03 .3250000000D-01 -.2819831000D+01 -.2224200000D+01 -.4512500000D+01 -.2001500000D+01 .9780000000D-01 .1340000000D-02 .8686000000D+01 .1235200000D+00 .7050000000D-03 .6670000000D-01 -.6110233000D+01 -.1493900000D+01 -.3439300000D+01 -.5895900000D+01 +1 4920050608200507282453529.5 .1333000000D+00 -.1600000000D-03 .8615200000D+01 .9829000000D-01 .4830000000D-03 .6130000000D-01 -.3202807000D+01 -.5023600000D+01 -.6393000000D+00 -.4417200000D+01 -.1580000000D-01 .6400000000D-03 .5470800000D+01 .4257000000D-01 .4110000000D-03 .4230000000D-01 -.4129541000D+01 -.4889500000D+01 -.7423000000D+00 -.5194600000D+01 .1726000000D+00 .2200000000D-03 .8510300000D+01 .1224700000D+00 .5840000000D-03 .6780000000D-01 -.1833022000D+01 -.3435000000D+01 -.5761300000D+01 -.3226300000D+01 +1 5020050728200509162453579.5 .9900000000D-01 -.5900000000D-03 .7636300000D+01 .9746000000D-01 .5560000000D-03 .5430000000D-01 -.5093656000D+01 -.6052000000D+00 -.3520300000D+01 -.1737300000D+01 -.3500000000D-02 .2200000000D-03 .6264900000D+01 .3683000000D-01 .2590000000D-03 .4360000000D-01 -.5730314000D+01 -.1083300000D+01 -.3746000000D+01 -.2221700000D+01 .1956000000D+00 .1800000000D-03 .8951500000D+01 .9531000000D-01 .5850000000D-03 .6320000000D-01 -.3769925000D+01 -.5325500000D+01 -.1906100000D+01 -.4816000000D+00 +1 5120050916200511052453629.5 .8660000000D-01 .1460000000D-02 .7365200000D+01 .3275000000D-01 .1032000000D-02 .5450000000D-01 -.6079660000D+00 -.2164300000D+01 -.5306000000D+01 -.4927500000D+01 .1400000000D-01 .1290000000D-02 .6021700000D+01 .1411000000D-01 .3090000000D-03 .4530000000D-01 -.9782450000D+00 -.2888900000D+01 -.6277000000D+01 -.5495800000D+01 .2069000000D+00 -.1250000000D-02 .9201600000D+01 .3053000000D-01 .8760000000D-03 .7490000000D-01 -.5469508000D+01 -.6189000000D+00 -.3739200000D+01 -.3651000000D+01 +1 5220051105200512252453679.5 .1614000000D+00 .3100000000D-03 .7411700000D+01 .6615000000D-01 .1048000000D-02 .5430000000D-01 -.1819239000D+01 -.2353000000D+00 -.3360200000D+01 -.1772200000D+01 .8270000000D-01 .7200000000D-03 .6210000000D+01 .1644000000D-01 .3820000000D-03 .4840000000D-01 -.2310885000D+01 -.1300200000D+01 -.4181200000D+01 -.2301700000D+01 .1406000000D+00 -.1930000000D-02 .9076500000D+01 .5599000000D-01 .9670000000D-03 .6810000000D-01 -.4466680000D+00 -.4945700000D+01 -.1860400000D+01 -.3020000000D+00 +1 5320051225200602132453729.5 .1610000000D+00 .3600000000D-03 .7468800000D+01 .4785000000D-01 .5850000000D-03 .5380000000D-01 -.3049800000D+01 -.4583500000D+01 -.5278400000D+01 -.4983100000D+01 .1195000000D+00 .3100000000D-03 .6376700000D+01 .2956000000D-01 .2690000000D-03 .4390000000D-01 -.3670378000D+01 -.5254000000D+01 -.2559000000D+00 -.5430700000D+01 .3690000000D-01 -.2000000000D-03 .8901000000D+01 .5129000000D-01 .4740000000D-03 .6010000000D-01 -.1727928000D+01 -.3170900000D+01 -.3917100000D+01 -.3634500000D+01 +1 5420060213200604042453779.5 .1941000000D+00 -.3200000000D-03 .7493800000D+01 .9887000000D-01 .6180000000D-03 .6110000000D-01 -.4860396000D+01 -.4000000000D-01 -.1589700000D+01 -.2549900000D+01 .1221000000D+00 -.4400000000D-03 .5923200000D+01 .4580000000D-01 .4080000000D-03 .3900000000D-01 -.5275740000D+01 -.1046100000D+01 -.3091300000D+01 -.2642400000D+01 .5420000000D-01 -.4300000000D-03 .9217900000D+01 .9147000000D-01 .5040000000D-03 .6760000000D-01 -.3446267000D+01 -.4959200000D+01 -.2695000000D+00 -.9212000000D+00 +1 5520060404200605242453829.5 .1622000000D+00 .6500000000D-03 .8209900000D+01 .1170000000D+00 .8050000000D-03 .7160000000D-01 -.5607100000D+00 -.1916400000D+01 -.3981400000D+01 -.6227100000D+01 .1061000000D+00 -.1120000000D-02 .4457600000D+01 .4446000000D-01 .4670000000D-03 .2600000000D-01 -.5833570000D+00 -.3474900000D+01 -.5577600000D+01 -.5850100000D+01 .2540000000D-01 .1210000000D-02 .9374400000D+01 .1013200000D+00 .6270000000D-03 .6710000000D-01 -.5282201000D+01 -.5667000000D+00 -.2313900000D+01 -.4529400000D+01 +1 5620060524200607132453879.5 .2033000000D+00 -.2000000000D-04 .9171600000D+01 .1085300000D+00 .6970000000D-03 .7500000000D-01 -.2477724000D+01 -.3963600000D+01 -.6134000000D+01 -.3514300000D+01 .5530000000D-01 -.7200000000D-03 .2710300000D+01 .4368000000D-01 .4500000000D-03 .2260000000D-01 -.1711074000D+01 -.6031000000D+01 -.1884600000D+01 -.2297300000D+01 .7780000000D-01 -.3800000000D-03 .9197600000D+01 .1077700000D+00 .6290000000D-03 .6350000000D-01 -.8690290000D+00 -.2518000000D+01 -.4316000000D+01 -.1889100000D+01 +1 5720060713200609012453929.5 .2044000000D+00 -.7500000000D-03 .9371300000D+01 .9411000000D-01 .5010000000D-03 .6800000000D-01 -.4315542000D+01 -.6000200000D+01 -.1603900000D+01 -.8156000000D+00 -.7000000000D-03 -.3900000000D-03 .3466100000D+01 .4191000000D-01 .4630000000D-03 .3410000000D-01 -.2488755000D+01 -.2272500000D+01 -.4314000000D+01 -.5257900000D+01 .7150000000D-01 .1170000000D-02 .8767200000D+01 .1096400000D+00 .5830000000D-03 .6270000000D-01 -.2788307000D+01 -.4455000000D+01 -.6168000000D+01 -.5681000000D+01 +1 5820060901200610212453979.5 .1590000000D+00 .8000000000D-04 .8738400000D+01 .9254000000D-01 .5090000000D-03 .6000000000D-01 -.6139337000D+01 -.1623000000D+01 -.3176000000D+01 -.4421600000D+01 -.1200000000D-02 -.7000000000D-03 .5239800000D+01 .4748000000D-01 .4670000000D-03 .4450000000D-01 -.3939274000D+01 -.4763200000D+01 -.4327000000D+00 -.2260200000D+01 .1271000000D+00 .6300000000D-03 .8464300000D+01 .1115600000D+00 .6760000000D-03 .6860000000D-01 -.4754671000D+01 -.1920000000D-01 -.1765200000D+01 -.3147200000D+01 +1 5920061021200612102454029.5 .1621000000D+00 -.1770000000D-02 .7851900000D+01 .1074600000D+00 .6040000000D-03 .5390000000D-01 -.1758452000D+01 -.3459700000D+01 -.5001500000D+01 -.1819800000D+01 -.4640000000D-01 .5300000000D-03 .6150300000D+01 .5640000000D-01 .5140000000D-03 .4630000000D-01 -.5614718000D+01 -.8363000000D+00 -.3031300000D+01 -.5614300000D+01 .1498000000D+00 .5700000000D-03 .8691500000D+01 .1183600000D+00 .7800000000D-03 .7330000000D-01 -.4413690000D+00 -.1897200000D+01 -.3886100000D+01 -.4772000000D+00 +1 6020061210200701292454079.5 .9030000000D-01 -.3900000000D-03 .7672600000D+01 .1288400000D+00 .7190000000D-03 .5460000000D-01 -.3822595000D+01 -.5322900000D+01 -.9478000000D+00 -.5613500000D+01 -.2300000000D-01 -.4600000000D-03 .5710800000D+01 .5277000000D-01 .6440000000D-03 .3590000000D-01 -.1039932000D+01 -.3316300000D+01 -.5520800000D+01 -.2580800000D+01 .1834000000D+00 .7500000000D-03 .9233900000D+01 .1161300000D+00 .7590000000D-03 .7140000000D-01 -.2373413000D+01 -.3888900000D+01 -.5865500000D+01 -.4086200000D+01 +1 6120070129200703202454129.5 .4510000000D-01 -.9200000000D-03 .8702400000D+01 .1209400000D+00 .8340000000D-03 .6600000000D-01 -.5899356000D+01 -.1009600000D+01 -.3094800000D+01 -.3109800000D+01 -.3510000000D-01 -.5300000000D-03 .3687600000D+01 .5620000000D-01 .5960000000D-03 .2200000000D-01 -.2493061000D+01 -.6105600000D+01 -.1869900000D+01 -.5114500000D+01 .2315000000D+00 -.8200000000D-03 .9351900000D+01 .1150300000D+00 .7880000000D-03 .6470000000D-01 -.4282869000D+01 -.5913300000D+01 -.1407200000D+01 -.1544700000D+01 +1 6220070320200705092454179.5 .9900000000D-02 -.9000000000D-03 .9348800000D+01 .1000500000D+00 .7840000000D-03 .7100000000D-01 -.1532002000D+01 -.3098600000D+01 -.4952000000D+01 -.3852000000D+00 -.7740000000D-01 -.9100000000D-03 .3183800000D+01 .5680000000D-01 .6590000000D-03 .3440000000D-01 -.3104427000D+01 -.2335900000D+01 -.4594700000D+01 -.1412100000D+01 .1708000000D+00 .5200000000D-03 .8816700000D+01 .1281500000D+00 .7960000000D-03 .6280000000D-01 -.6237955000D+01 -.1636400000D+01 -.3488900000D+01 -.5311600000D+01 +1 6320070509200706282454229.5 -.2850000000D-01 -.2700000000D-03 .8717800000D+01 .1053600000D+00 .6740000000D-03 .6490000000D-01 -.3385635000D+01 -.5157700000D+01 -.6177000000D+00 -.3913900000D+01 -.1096000000D+00 .8000000000D-04 .5320400000D+01 .5101000000D-01 .5760000000D-03 .4520000000D-01 -.4361850000D+01 -.5040500000D+01 -.8663000000D+00 -.4671600000D+01 .2038000000D+00 -.1170000000D-02 .8447200000D+01 .1340700000D+00 .7160000000D-03 .6370000000D-01 -.2002230000D+01 -.3609900000D+01 -.5706000000D+01 -.2714500000D+01 +1 6420070628200708172454279.5 -.5220000000D-01 -.1590000000D-02 .7650500000D+01 .1178700000D+00 .5160000000D-03 .5430000000D-01 -.5345977000D+01 -.8069000000D+00 -.2746000000D+01 -.1402500000D+01 -.1275000000D+00 .4000000000D-04 .6321000000D+01 .5241000000D-01 .4930000000D-03 .4500000000D-01 -.6019732000D+01 -.1324900000D+01 -.3614100000D+01 -.1764300000D+01 .1555000000D+00 -.4000000000D-04 .8875800000D+01 .1174600000D+00 .6070000000D-03 .6740000000D-01 -.4038707000D+01 -.5562700000D+01 -.1463900000D+01 -.8300000000D-01 +1 6520070817200710062454329.5 -.1356000000D+00 -.2400000000D-03 .7568400000D+01 .1105000000D+00 .5500000000D-03 .5920000000D-01 -.1133191000D+01 -.2617300000D+01 -.5134800000D+01 -.5277600000D+01 -.1043000000D+00 .1030000000D-02 .5669900000D+01 .3908000000D-01 .3350000000D-03 .3610000000D-01 -.1382970000D+01 -.3884400000D+01 -.6120300000D+01 -.5057600000D+01 .1328000000D+00 .7000000000D-04 .9353500000D+01 .9337000000D-01 .4560000000D-03 .6640000000D-01 -.5938932000D+01 -.1235800000D+01 -.3602400000D+01 -.3628400000D+01 +1 6620071006200711252454379.5 -.1370000000D+00 -.2000000000D-04 .8453100000D+01 .7308000000D-01 .8860000000D-03 .6660000000D-01 -.3010419000D+01 -.4412600000D+01 -.1254100000D+01 -.2349100000D+01 -.5840000000D-01 .8400000000D-03 .4173900000D+01 .3003000000D-01 .3430000000D-03 .2770000000D-01 -.2794519000D+01 -.6260600000D+01 -.3343000000D+01 -.2016500000D+01 .1388000000D+00 .2000000000D-03 .9331100000D+01 .6516000000D-01 .7200000000D-03 .7760000000D-01 -.1399312000D+01 -.3055800000D+01 -.6163900000D+01 -.6199000000D+00 +1 6720071125200801142454429.5 -.1734000000D+00 .2550000000D-02 .8807200000D+01 .4276000000D-01 .1510000000D-03 .8240000000D-01 -.4510193000D+01 -.2572100000D+01 -.2416600000D+01 -.5653600000D+01 -.8600000000D-02 .1100000000D-03 .3453800000D+01 .2829000000D-01 .1890000000D-03 .2920000000D-01 -.4106833000D+01 -.5068500000D+01 -.3090500000D+01 -.4795700000D+01 .1435000000D+00 .1750000000D-02 .9275500000D+01 .3982000000D-01 .1810000000D-03 .6530000000D-01 -.2886524000D+01 -.1466800000D+01 -.5800000000D-02 -.3674600000D+01 +1 6820080114200803042454479.5 .2210000000D-01 .8900000000D-03 .8190200000D+01 .2377000000D-01 .1016000000D-02 .6470000000D-01 -.5561374000D+01 -.3793100000D+01 -.7045000000D+00 -.2139100000D+01 -.4500000000D-02 .6500000000D-03 .4530100000D+01 .1260000000D-01 .3910000000D-03 .3380000000D-01 -.5597653000D+01 -.5894400000D+01 -.2419100000D+01 -.1894700000D+01 .2266000000D+00 -.3800000000D-03 .9396100000D+01 .1585000000D-01 .8340000000D-03 .6700000000D-01 -.3997832000D+01 -.2447900000D+01 -.5602700000D+01 -.3825000000D+00 +1 6920080304200804232454529.5 .2430000000D-01 .9400000000D-03 .8368700000D+01 .7532000000D-01 .5050000000D-03 .6750000000D-01 -.7563720000D+00 -.2062800000D+01 -.3556700000D+01 -.5525800000D+01 .3260000000D-01 .3700000000D-03 .4188500000D+01 .2737000000D-01 .2920000000D-03 .2640000000D-01 -.6867510000D+00 -.3671200000D+01 -.5325500000D+01 -.5146000000D+01 .2002000000D+00 .3400000000D-03 .9358400000D+01 .6202000000D-01 .5230000000D-03 .7510000000D-01 -.5460905000D+01 -.7030000000D+00 -.1742900000D+01 -.3755200000D+01 +1 7020080423200806122454579.5 .7920000000D-01 -.6600000000D-03 .9108300000D+01 .9633000000D-01 .5900000000D-03 .7080000000D-01 -.2535657000D+01 -.3984600000D+01 -.6005700000D+01 -.2745100000D+01 .5640000000D-01 .4300000000D-03 .2858700000D+01 .3844000000D-01 .3830000000D-03 .2020000000D-01 -.1837450000D+01 -.5999600000D+01 -.1762500000D+01 -.1628400000D+01 .2058000000D+00 -.6900000000D-03 .9162300000D+01 .9505000000D-01 .6300000000D-03 .6960000000D-01 -.9219130000D+00 -.2514800000D+01 -.4174700000D+01 -.1021600000D+01 +1 7120080612200808012454629.5 .5270000000D-01 .2000000000D-04 .9409900000D+01 .9214000000D-01 .4830000000D-03 .6940000000D-01 -.4340263000D+01 -.6001500000D+01 -.1585100000D+01 -.9000000000D-03 .6250000000D-01 .2100000000D-03 .3263800000D+01 .3956000000D-01 .4310000000D-03 .2910000000D-01 -.2617762000D+01 -.2181900000D+01 -.4228100000D+01 -.4422400000D+01 .1790000000D+00 .7000000000D-03 .8791000000D+01 .1089000000D+00 .6050000000D-03 .6230000000D-01 -.2790457000D+01 -.4444700000D+01 -.6214000000D+01 -.4754100000D+01 +1 7220080801200809202454679.5 .4400000000D-01 -.2300000000D-03 .8883000000D+01 .9038000000D-01 .4830000000D-03 .6500000000D-01 -.6155534000D+01 -.1644600000D+01 -.3124000000D+01 -.3596000000D+01 .9200000000D-01 -.2700000000D-03 .5012500000D+01 .4406000000D-01 .4420000000D-03 .4020000000D-01 -.3991859000D+01 -.4709800000D+01 -.2738000000D+00 -.1430600000D+01 .2152000000D+00 -.6000000000D-03 .8494400000D+01 .1130200000D+00 .6630000000D-03 .6340000000D-01 -.4742451000D+01 -.3540000000D-01 -.1790900000D+01 -.2346800000D+01 +1 7320080920200811092454729.5 .3300000000D-01 -.1740000000D-02 .7956600000D+01 .1032900000D+00 .6630000000D-03 .5790000000D-01 -.1761584000D+01 -.3458100000D+01 -.4925800000D+01 -.9806000000D+00 .6730000000D-01 .5800000000D-03 .6075200000D+01 .5518000000D-01 .4890000000D-03 .4440000000D-01 -.5656485000D+01 -.7744000000D+00 -.2798200000D+01 -.4805500000D+01 .1750000000D+00 .5100000000D-03 .8637000000D+01 .1204700000D+00 .7960000000D-03 .7060000000D-01 -.4398080000D+00 -.1912800000D+01 -.3860000000D+01 -.6057500000D+01 +1 7420081109200812292454779.5 -.4080000000D-01 -.6700000000D-03 .7577800000D+01 .1306400000D+00 .8220000000D-03 .5690000000D-01 -.3811004000D+01 -.5322900000D+01 -.8926000000D+00 -.4733400000D+01 .9140000000D-01 -.1250000000D-02 .5897500000D+01 .5725000000D-01 .6640000000D-03 .3750000000D-01 -.1108005000D+01 -.3165000000D+01 -.5399800000D+01 -.1860000000D+01 .2052000000D+00 -.4800000000D-03 .9158200000D+01 .1228000000D+00 .8050000000D-03 .7240000000D-01 -.2395841000D+01 -.3907600000D+01 -.5919200000D+01 -.3379500000D+01 +1 7520081229200902172454829.5 -.9980000000D-01 -.1590000000D-02 .8491800000D+01 .1326300000D+00 .9280000000D-03 .6280000000D-01 -.5926637000D+01 -.1043000000D+01 -.3162100000D+01 -.2337400000D+01 .4760000000D-01 -.1300000000D-02 .4054200000D+01 .5655000000D-01 .6610000000D-03 .2540000000D-01 -.2693485000D+01 -.5962700000D+01 -.1770100000D+01 -.4586400000D+01 .1959000000D+00 -.1160000000D-02 .9417000000D+01 .1211500000D+00 .8040000000D-03 .6520000000D-01 -.4333805000D+01 -.5957700000D+01 -.1512300000D+01 -.7819000000D+00 +1 7620090217200904082454879.5 -.1671000000D+00 -.7000000000D-04 .9337100000D+01 .1085900000D+00 .8480000000D-03 .7160000000D-01 -.1616551000D+01 -.3151100000D+01 -.5073800000D+01 -.6058100000D+01 -.4470000000D-01 -.1410000000D-02 .2792000000D+01 .5906000000D-01 .7070000000D-03 .3630000000D-01 -.3398698000D+01 -.2319200000D+01 -.4570200000D+01 -.8709000000D+00 .1128000000D+00 -.3300000000D-03 .8998400000D+01 .1292000000D+00 .8180000000D-03 .6030000000D-01 -.2322300000D-01 -.1714300000D+01 -.3517600000D+01 -.4565500000D+01 +1 7720090408200905282454929.5 -.1653000000D+00 .1400000000D-03 .8888800000D+01 .1084100000D+00 .7660000000D-03 .6790000000D-01 -.3496878000D+01 -.5224300000D+01 -.7302000000D+00 -.3351600000D+01 -.9830000000D-01 -.3200000000D-03 .4898100000D+01 .5470000000D-01 .6620000000D-03 .4760000000D-01 -.4522070000D+01 -.5042200000D+01 -.8838000000D+00 -.4115800000D+01 .1062000000D+00 -.2350000000D-02 .8490700000D+01 .1364500000D+00 .7790000000D-03 .6040000000D-01 -.2078700000D+01 -.3704800000D+01 -.5687000000D+01 -.2036500000D+01 +1 7820090528200907172454979.5 -.1643000000D+00 -.3300000000D-03 .7858900000D+01 .1226700000D+00 .6220000000D-03 .5790000000D-01 -.5452535000D+01 -.9235000000D+00 -.2780300000D+01 -.7693000000D+00 -.1355000000D+00 -.9000000000D-04 .6202700000D+01 .5984000000D-01 .5860000000D-03 .4980000000D-01 -.6189897000D+01 -.1374100000D+01 -.3659400000D+01 -.1192700000D+01 -.2000000000D-02 -.2600000000D-03 .8750200000D+01 .1266900000D+00 .7090000000D-03 .6420000000D-01 -.4151091000D+01 -.5673400000D+01 -.1490600000D+01 -.5744700000D+01 +1 7920090717200909052455029.5 -.1886000000D+00 .3700000000D-03 .7597100000D+01 .1251800000D+00 .6110000000D-03 .5640000000D-01 -.1275263000D+01 -.2797200000D+01 -.4961700000D+01 -.4683700000D+01 -.1188000000D+00 .7600000000D-03 .5757100000D+01 .4779000000D-01 .5400000000D-03 .3800000000D-01 -.1610730000D+01 -.3935600000D+01 -.6158800000D+01 -.4558600000D+01 -.3500000000D-01 -.7500000000D-03 .9292500000D+01 .1059500000D+00 .5900000000D-03 .6740000000D-01 -.6114489000D+01 -.1372800000D+01 -.3389700000D+01 -.3087600000D+01 +1 8020090905200910252455079.5 -.1579000000D+00 -.7900000000D-03 .8570500000D+01 .1013600000D+00 .6000000000D-03 .6560000000D-01 -.3290769000D+01 -.4675100000D+01 -.8617000000D+00 -.2034100000D+01 -.9530000000D-01 .9300000000D-03 .3953000000D+01 .4344000000D-01 .2990000000D-03 .2550000000D-01 -.3044935000D+01 -.3471000000D+00 -.2455700000D+01 -.1181900000D+01 -.5990000000D-01 -.4800000000D-03 .9317400000D+01 .9010000000D-01 .4500000000D-03 .6980000000D-01 -.1681179000D+01 -.3318600000D+01 -.5384900000D+01 -.3231000000D+00 +1 8120091025200912142455129.5 -.2095000000D+00 .3600000000D-03 .9321800000D+01 .6595000000D-01 .5320000000D-03 .6980000000D-01 -.5058657000D+01 -.3498000000D+00 -.3361100000D+01 -.5333800000D+01 -.4740000000D-01 .6100000000D-03 .2914900000D+01 .3488000000D-01 .2660000000D-03 .2150000000D-01 -.3904715000D+01 -.2492700000D+01 -.5630900000D+01 -.3827700000D+01 -.7320000000D-01 .6200000000D-03 .8984600000D+01 .7823000000D-01 .6130000000D-03 .7490000000D-01 -.3446830000D+01 -.5138900000D+01 -.1829000000D+01 -.3664100000D+01 +1 8220091214201002022455179.5 -.1894000000D+00 -.2800000000D-03 .9340700000D+01 .5420000000D-02 .6420000000D-03 .7370000000D-01 -.3160600000D+00 -.1547000000D+01 -.4932400000D+01 -.2178300000D+01 -.1690000000D-01 .3300000000D-03 .3277700000D+01 .1100000000D-01 .4130000000D-03 .2810000000D-01 -.4902426000D+01 -.2604800000D+01 -.6246000000D+00 -.3890000000D+00 -.5880000000D-01 .1790000000D-02 .8791800000D+01 .1139000000D-01 .8570000000D-03 .7470000000D-01 -.5044562000D+01 -.6198700000D+01 -.3427800000D+01 -.4844000000D+00 +1 8320100202201003242455229.5 -.2089000000D+00 .1290000000D-02 .9370100000D+01 .5435000000D-01 .8980000000D-03 .7040000000D-01 -.1506514000D+01 -.6075900000D+01 -.2953600000D+01 -.4983900000D+01 -.4600000000D-02 .4600000000D-03 .2557600000D+01 .3553000000D-01 .4770000000D-03 .2060000000D-01 -.1445980000D+00 -.1937400000D+01 -.5222300000D+01 -.3856600000D+01 .7030000000D-01 .1670000000D-02 .9060400000D+01 .6417000000D-01 .1037000000D-02 .7380000000D-01 -.6204241000D+01 -.4641600000D+01 -.1496900000D+01 -.3392000000D+01 +1 8420100324201005132455279.5 -.1332000000D+00 -.4300000000D-03 .9267400000D+01 .4205000000D-01 .4170000000D-03 .6810000000D-01 -.2778923000D+01 -.4195700000D+01 -.5033100000D+01 -.1965900000D+01 .1800000000D-01 .1090000000D-02 .2655500000D+01 .1464000000D-01 .2150000000D-03 .1780000000D-01 -.1714213000D+01 -.1878000000D+00 -.1147400000D+01 -.6808000000D+00 .1381000000D+00 .1000000000D-03 .9033900000D+01 .4151000000D-01 .6240000000D-03 .7610000000D-01 -.1174698000D+01 -.2612600000D+01 -.3550600000D+01 -.3551000000D+00 +1 8520100513201007022455329.5 -.1454000000D+00 .8500000000D-03 .9385400000D+01 .7675000000D-01 .4370000000D-03 .6610000000D-01 -.4414480000D+01 -.6017900000D+01 -.1350800000D+01 -.5423200000D+01 .6320000000D-01 .8300000000D-03 .3295800000D+01 .3328000000D-01 .3360000000D-03 .2830000000D-01 -.2730832000D+01 -.2231900000D+01 -.4146300000D+01 -.3552500000D+01 .1528000000D+00 -.1000000000D-03 .8754100000D+01 .9357000000D-01 .5320000000D-03 .6600000000D-01 -.2855543000D+01 -.4488100000D+01 -.6110200000D+01 -.3899100000D+01 +1 8620100702201008212455379.5 -.1120000000D+00 -.3100000000D-03 .8979400000D+01 .8519000000D-01 .4730000000D-03 .6490000000D-01 -.6174236000D+01 -.1648600000D+01 -.3085100000D+01 -.2774000000D+01 .1168000000D+00 .4400000000D-03 .4885700000D+01 .3963000000D-01 .4070000000D-03 .3970000000D-01 -.4065775000D+01 -.4648700000D+01 -.1342000000D+00 -.5516000000D+00 .1559000000D+00 -.1250000000D-02 .8486600000D+01 .1098200000D+00 .5820000000D-03 .6000000000D-01 -.4742574000D+01 -.6860000000D-01 -.1806500000D+01 -.1414400000D+01 +1 8720100821201010102455429.5 -.1271000000D+00 -.4800000000D-03 .8055600000D+01 .9827000000D-01 .6750000000D-03 .6180000000D-01 -.1748222000D+01 -.3458400000D+01 -.4862100000D+01 -.1742000000D+00 .1298000000D+00 .4800000000D-03 .6063000000D+01 .5108000000D-01 .4680000000D-03 .4770000000D-01 -.5694231000D+01 -.7008000000D+00 -.2538300000D+01 -.3951800000D+01 .7680000000D-01 .2400000000D-03 .8582100000D+01 .1182200000D+00 .7290000000D-03 .6360000000D-01 -.4317200000D+00 -.1931200000D+01 -.3802500000D+01 -.5225300000D+01 +1 8820101010201011292455479.5 -.1389000000D+00 -.4300000000D-03 .7454700000D+01 .1297000000D+00 .8890000000D-03 .6380000000D-01 -.3773793000D+01 -.5300900000D+01 -.8280000000D+00 -.3911800000D+01 .1483000000D+00 -.1340000000D-02 .6110600000D+01 .5905000000D-01 .6710000000D-03 .4340000000D-01 -.1141622000D+01 -.3010200000D+01 -.5202200000D+01 -.1045700000D+01 .9580000000D-01 -.1590000000D-02 .9072400000D+01 .1231700000D+00 .8170000000D-03 .6770000000D-01 -.2399022000D+01 -.3896400000D+01 -.5857200000D+01 -.2589800000D+01 +1 8920101129201101182455529.5 -.1802000000D+00 -.1090000000D-02 .8221500000D+01 .1425900000D+00 .1018000000D-02 .6500000000D-01 -.5915153000D+01 -.1032500000D+01 -.3190100000D+01 -.1462600000D+01 .1038000000D+00 -.9900000000D-03 .4541200000D+01 .5787000000D-01 .7190000000D-03 .3240000000D-01 -.2804295000D+01 -.5760200000D+01 -.1611200000D+01 -.4040300000D+01 .3070000000D-01 -.6600000000D-03 .9429600000D+01 .1246300000D+00 .8330000000D-03 .6530000000D-01 -.4350680000D+01 -.5957000000D+01 -.1534000000D+01 -.6241700000D+01 +2 9019990101199902102451179.5 -.9000000000D-03 -.1800000000D-03 .2011880000D+02 .2146600000D+00 .9090000000D-03 .3700000000D-02 .4986918000D+01 .3207200000D+01 .7895000000D+00 -.4619500000D+01 .2700000000D-02 .7000000000D-04 .1522260000D+02 .9991000000D-01 .5850000000D-03 .1200000000D-02 .1063209000D+01 .5968800000D+01 .3682900000D+01 -.1618100000D+01 .4400000000D-02 -.1600000000D-03 .2159940000D+02 .2357800000D+00 .1232000000D-02 .3300000000D-02 .1473900000D-01 .4778100000D+01 .2299900000D+01 -.4554800000D+01 +2 9119990210199903222451219.5 -.6000000000D-02 .7000000000D-04 .1905670000D+02 .1682100000D+00 .1821000000D-02 .5000000000D-02 .2693612000D+01 .9801000000D+00 .4177200000D+01 -.2704900000D+01 .5400000000D-02 -.7000000000D-04 .1559780000D+02 .7550000000D-01 .6520000000D-03 .1500000000D-02 .5212472000D+01 .3537700000D+01 .4461000000D+00 -.5622900000D+01 .4300000000D-02 -.2100000000D-03 .2229830000D+02 .1718500000D+00 .1801000000D-02 .2700000000D-02 .4024767000D+01 .2487200000D+01 .5713200000D+01 -.3365900000D+01 +2 9219990322199905012451259.5 .3200000000D-02 -.3700000000D-03 .1875580000D+02 .1202000000D-01 .1739000000D-02 .5500000000D-02 .5763560000D+00 .1625500000D+01 .2165600000D+01 -.4127300000D+01 .2900000000D-02 .4000000000D-04 .1547860000D+02 .1447000000D-01 .5470000000D-03 .2100000000D-02 .3172958000D+01 .1974900000D+01 .4674500000D+01 -.6172000000D+01 .4100000000D-02 -.2200000000D-03 .2252490000D+02 .5670000000D-02 .1777000000D-02 .7300000000D-02 .1933842000D+01 .3419000000D+00 .3734200000D+01 -.5616600000D+01 +2 9319990501199906102451299.5 -.5100000000D-02 .2000000000D-04 .1920840000D+02 .1337000000D+00 .2344000000D-02 .1700000000D-02 .5106094000D+01 .2458000000D+00 .3438800000D+01 -.2757900000D+01 .4400000000D-02 .0000000000D+00 .1574920000D+02 .2565000000D-01 .9330000000D-03 .1300000000D-02 .1279101000D+01 .2769800000D+01 .6042200000D+01 -.1485800000D+01 .4200000000D-02 -.1600000000D-03 .2202020000D+02 .1278000000D+00 .2445000000D-02 .3700000000D-02 .1293930000D+00 .1940100000D+01 .4991300000D+01 -.2969300000D+01 +2 9419990610199907202451339.5 .1000000000D-03 -.2600000000D-03 .1965860000D+02 .7290000000D-01 .1822000000D-02 .2400000000D-02 .3274740000D+01 .1727900000D+01 .1191700000D+01 -.3408900000D+01 .9000000000D-03 .1700000000D-03 .1588390000D+02 .5869000000D-01 .7990000000D-03 .3400000000D-02 .5621309000D+01 .4324600000D+01 .3501200000D+01 -.3171000000D+00 .2900000000D-02 -.8000000000D-04 .2141380000D+02 .8434000000D-01 .1811000000D-02 .4800000000D-02 .4552559000D+01 .3083800000D+01 .2710400000D+01 -.6210800000D+01 +2 9519990720199908292451379.5 -.7700000000D-02 .1100000000D-03 .1903480000D+02 .2143400000D+00 .1673000000D-02 .1400000000D-02 .1076119000D+01 .5717400000D+01 .4656600000D+01 -.1357600000D+01 .6600000000D-02 -.1300000000D-03 .1615850000D+02 .1210000000D+00 .1045000000D-02 .3000000000D-02 .3504248000D+01 .1948200000D+01 .2256000000D+00 -.3790600000D+01 .1300000000D-02 -.7000000000D-04 .2178390000D+02 .2241700000D+00 .1557000000D-02 .2600000000D-02 .2358839000D+01 .9206000000D+00 .5856900000D+01 -.3851800000D+01 +2 9619990829199910082451419.5 -.3700000000D-02 -.8000000000D-04 .1865650000D+02 .3087600000D+00 .2119000000D-02 .6000000000D-02 .4906705000D+01 .3389200000D+01 .1825400000D+01 -.5096600000D+01 -.1000000000D-02 .2000000000D-03 .1529420000D+02 .1449000000D+00 .1637000000D-02 .5600000000D-02 .1291671000D+01 .5583700000D+01 .3456700000D+01 -.1151100000D+01 -.5600000000D-02 .1500000000D-03 .2276900000D+02 .2844400000D+00 .2061000000D-02 .2800000000D-02 .7843000000D-02 .4824000000D+01 .3109400000D+01 -.1303400000D+01 +2 9719991008199911172451459.5 -.5200000000D-02 .7000000000D-04 .2022770000D+02 .3552000000D+00 .2708000000D-02 .5900000000D-02 .2332860000D+01 .9485000000D+00 .5260700000D+01 -.2887200000D+01 .7000000000D-02 -.2400000000D-03 .1197180000D+02 .1418600000D+00 .1881000000D-02 .3800000000D-02 .5401160000D+01 .2550400000D+01 .4294000000D+00 -.3952800000D+01 -.6000000000D-03 -.1900000000D-03 .2345080000D+02 .3135500000D+00 .2438000000D-02 .1700000000D-02 .3885829000D+01 .2325300000D+01 .5595000000D+00 -.1388500000D+01 +2 9819991117199912272451499.5 -.8000000000D-03 -.3000000000D-04 .2273720000D+02 .3300800000D+00 .2757000000D-02 .4000000000D-02 .6097148000D+01 .4655500000D+01 .2616400000D+01 -.6130000000D+01 -.3400000000D-02 .2600000000D-03 .7486600000D+01 .1466800000D+00 .1827000000D-02 .3500000000D-02 .3649754000D+01 .5667400000D+01 .3481800000D+01 -.7141000000D+00 -.1010000000D-01 .2300000000D-03 .2301070000D+02 .3390500000D+00 .2556000000D-02 .3900000000D-02 .1438096000D+01 .6057200000D+01 .4301300000D+01 -.8585000000D+00 +2 9919991227200002052451539.5 .2500000000D-02 -.4000000000D-04 .2340160000D+02 .2985300000D+00 .2280000000D-02 .2500000000D-02 .3667569000D+01 .2025600000D+01 .1394000000D+00 -.4337800000D+01 .6900000000D-02 -.2000000000D-03 .9095000000D+01 .1355600000D+00 .1857000000D-02 .2900000000D-02 .2282600000D+01 .2534300000D+01 .4405000000D+00 -.4010700000D+01 -.3500000000D-02 -.5000000000D-04 .2170070000D+02 .3610500000D+00 .2522000000D-02 .3300000000D-02 .5206389000D+01 .3530700000D+01 .1717900000D+01 -.4735800000D+01 +2 10020000205200003162451579.5 .1100000000D-02 .1300000000D-03 .2189690000D+02 .2975000000D+00 .1995000000D-02 .1800000000D-02 .1255451000D+01 .5767900000D+01 .4055900000D+01 -.3691200000D+01 .7000000000D-03 .1700000000D-03 .1356010000D+02 .1460300000D+00 .1658000000D-02 .1300000000D-02 .2637460000D+00 .5682200000D+01 .3803300000D+01 -.6115800000D+01 -.6500000000D-02 .2000000000D-03 .2092630000D+02 .3646700000D+00 .2454000000D-02 .4900000000D-02 .2628630000D+01 .1043900000D+01 .5404200000D+01 -.2236100000D+01 +2 10120000316200004252451619.5 .7200000000D-02 -.1000000000D-03 .1963780000D+02 .3185800000D+00 .2004000000D-02 .1500000000D-02 .5059356000D+01 .3323900000D+01 .1647300000D+01 -.4901300000D+01 .9300000000D-02 -.2500000000D-03 .1586290000D+02 .1667400000D+00 .1543000000D-02 .4400000000D-02 .4289204000D+01 .2817600000D+01 .7753000000D+00 -.3948200000D+01 -.2900000000D-02 .1400000000D-03 .2156290000D+02 .3468400000D+00 .2361000000D-02 .5200000000D-02 .6249900000D-01 .4849400000D+01 .2854100000D+01 -.2744000000D+00 +2 10220000425200006042451659.5 .5000000000D-02 .0000000000D+00 .1860020000D+02 .3424700000D+00 .2150000000D-02 .1000000000D-02 .2470448000D+01 .9138000000D+00 .5334100000D+01 -.2565800000D+01 .0000000000D+00 .1500000000D-03 .1537640000D+02 .1536100000D+00 .1663000000D-02 .3000000000D-02 .1999357000D+01 .3070000000D-01 .4088500000D+01 -.8508000000D+00 .3800000000D-02 -.2000000000D-04 .2281220000D+02 .3190900000D+00 .2197000000D-02 .1800000000D-02 .3854373000D+01 .2354800000D+01 .3853000000D+00 -.4308500000D+01 +2 10320000604200007142451699.5 .5500000000D-02 -.7000000000D-04 .2005390000D+02 .3346400000D+00 .2270000000D-02 .4300000000D-02 .6156576000D+01 .4757900000D+01 .2689500000D+01 -.5315000000D+01 .7100000000D-02 -.2400000000D-03 .1223400000D+02 .1243600000D+00 .1502000000D-02 .4100000000D-02 .6092562000D+01 .3313600000D+01 .1184200000D+01 -.4450600000D+01 .1400000000D-02 .2100000000D-03 .2347320000D+02 .2982700000D+00 .2021000000D-02 .3200000000D-02 .1427667000D+01 .6134300000D+01 .4256600000D+01 -.1960900000D+01 +2 10420000714200008232451739.5 .6100000000D-02 -.1800000000D-03 .2241500000D+02 .2915800000D+00 .2059000000D-02 .4600000000D-02 .3680910000D+01 .2256600000D+01 .1739000000D+00 -.3235100000D+01 -.1400000000D-02 .1800000000D-03 .8122200000D+01 .1144200000D+00 .1267000000D-02 .3100000000D-02 .4245837000D+01 .2626000000D+00 .4447500000D+01 -.1481600000D+01 .6600000000D-02 .0000000000D+00 .2309480000D+02 .2914700000D+00 .1884000000D-02 .2400000000D-02 .5307753000D+01 .3655800000D+01 .1853400000D+01 -.5136000000D+00 +2 10520000823200010022451779.5 -.1000000000D-03 .1000000000D-04 .2347280000D+02 .2530000000D+00 .1672000000D-02 .2300000000D-02 .1313218000D+01 .6016400000D+01 .4081300000D+01 -.3592000000D+00 .3900000000D-02 -.6000000000D-04 .7974600000D+01 .1038600000D+00 .1223000000D-02 .2500000000D-02 .2824148000D+01 .3607200000D+01 .1541700000D+01 -.5189100000D+01 .5300000000D-02 .5000000000D-04 .2205860000D+02 .2939700000D+00 .1757000000D-02 .7000000000D-03 .2891792000D+01 .1220200000D+01 .5708900000D+01 -.8130000000D-01 +2 10620001002200011112451819.5 .0000000000D+00 -.1000000000D-03 .2281990000D+02 .2386600000D+00 .1421000000D-02 .4100000000D-02 .5273182000D+01 .3551100000D+01 .1796100000D+01 -.4941900000D+01 .1200000000D-02 .1200000000D-03 .1147430000D+02 .1010600000D+00 .1158000000D-02 .3300000000D-02 .1005526000D+01 .6538000000D+00 .5081200000D+01 -.2115800000D+01 .4000000000D-02 .6000000000D-04 .2118280000D+02 .2963400000D+00 .1641000000D-02 .8000000000D-03 .4468190000D+00 .5105400000D+01 .3254900000D+01 -.9328000000D+00 +2 10720001111200012212451859.5 -.1900000000D-02 -.7000000000D-04 .2111500000D+02 .2445000000D+00 .1317000000D-02 .2800000000D-02 .2938446000D+01 .1164400000D+01 .5776100000D+01 -.3240800000D+01 .3800000000D-02 .2000000000D-04 .1443220000D+02 .1150900000D+00 .1043000000D-02 .2900000000D-02 .5179039000D+01 .4121100000D+01 .2315200000D+01 -.4397000000D+00 .6200000000D-02 -.1200000000D-03 .2113970000D+02 .2892100000D+00 .1555000000D-02 .2700000000D-02 .4274189000D+01 .2728600000D+01 .8101000000D+00 -.1849000000D+01 +2 10820001221200101302451899.5 -.4400000000D-02 .0000000000D+00 .1933230000D+02 .2585400000D+00 .1250000000D-02 .2400000000D-02 .5469880000D+00 .5110800000D+01 .3362200000D+01 -.8985000000D+00 .3200000000D-02 .5000000000D-04 .1573440000D+02 .1242700000D+00 .9720000000D-03 .9000000000D-03 .2981982000D+01 .1481600000D+01 .5740100000D+01 -.3442600000D+01 -.4000000000D-03 .8000000000D-04 .2191440000D+02 .2714600000D+00 .1479000000D-02 .3400000000D-02 .1849857000D+01 .3563000000D+00 .4654000000D+01 -.7329000000D+00 +2 10920010130200103112451939.5 -.2000000000D-02 -.1300000000D-03 .1858570000D+02 .2620800000D+00 .1176000000D-02 .3200000000D-02 .4378613000D+01 .2792300000D+01 .7076000000D+00 -.4838500000D+01 .3000000000D-02 .2000000000D-04 .1530470000D+02 .1115800000D+00 .8690000000D-03 .8000000000D-03 .7815210000D+00 .5157700000D+01 .2912600000D+01 -.1131000000D+01 -.6000000000D-03 -.3000000000D-04 .2286550000D+02 .2466000000D+00 .1326000000D-02 .2500000000D-02 .5767774000D+01 .4261100000D+01 .2138700000D+01 -.4952400000D+01 +2 11020010311200104202451979.5 -.8400000000D-02 .1900000000D-03 .1934410000D+02 .2292800000D+00 .1354000000D-02 .1700000000D-02 .1953873000D+01 .4816000000D+00 .4059400000D+01 -.3048100000D+01 .3400000000D-02 -.1000000000D-04 .1347580000D+02 .8408000000D-01 .4900000000D-03 .2100000000D-02 .4924508000D+01 .2514500000D+01 .6048800000D+01 -.2013400000D+01 -.3700000000D-02 .3000000000D-04 .2340290000D+02 .2120800000D+00 .1216000000D-02 .5200000000D-02 .3469414000D+01 .1891900000D+01 .5533400000D+01 -.2183900000D+01 +2 11120010420200105302452019.5 -.4200000000D-02 -.1000000000D-04 .2049870000D+02 .1345100000D+00 .2432000000D-02 .1900000000D-02 .5966431000D+01 .4525700000D+01 .1442300000D+01 -.2214000000D+00 .9000000000D-03 .9000000000D-04 .1145240000D+02 .5050000000D-01 .9330000000D-03 .9000000000D-03 .2874464000D+01 .3330000000D+00 .2599200000D+01 -.4802000000D+01 -.7100000000D-02 .1600000000D-03 .2347550000D+02 .1342600000D+00 .2040000000D-02 .4900000000D-02 .1266678000D+01 .5923600000D+01 .2781700000D+01 -.6033000000D+00 +2 11220010530200107092452059.5 -.2060000000D-01 .8000000000D-03 .2054030000D+02 .1109400000D+00 .4430000000D-03 .8100000000D-02 .3971021000D+01 .5805400000D+01 .2066800000D+01 -.1289200000D+01 .3300000000D-02 .0000000000D+00 .1128990000D+02 .7151000000D-01 .4100000000D-03 .5800000000D-02 .8250850000D+00 .2145000000D+00 .2952900000D+01 -.2846400000D+01 -.4400000000D-02 .7000000000D-04 .2348200000D+02 .6646000000D-01 .2750000000D-03 .1040000000D-01 .5544776000D+01 .9270000000D+00 .3858800000D+01 -.2925600000D+01 +2 11320010709200108182452099.5 -.4300000000D-02 -.4000000000D-04 .1950180000D+02 .2531000000D-01 .2826000000D-02 .5500000000D-02 .2235452000D+01 .3882000000D+01 .7199000000D+00 -.3198000000D+01 .5800000000D-02 -.1300000000D-03 .1329180000D+02 .3001000000D-01 .1158000000D-02 .2400000000D-02 .5114550000D+01 .4445700000D+01 .2215700000D+01 -.5839700000D+01 .0000000000D+00 -.1500000000D-03 .2326330000D+02 .5600000000D-02 .2267000000D-02 .1200000000D-02 .3724896000D+01 .4997400000D+01 .2113300000D+01 -.6175000000D+00 +2 11420010818200109272452139.5 -.1340000000D-01 .4000000000D-03 .1988550000D+02 .2112600000D+00 .1624000000D-02 .7800000000D-02 .1523160000D+00 .5073900000D+01 .3925600000D+01 -.1025200000D+01 .2800000000D-02 .0000000000D+00 .1252540000D+02 .8296000000D-01 .1176000000D-02 .3600000000D-02 .3112009000D+01 .5828000000D+00 .5166800000D+01 -.3077100000D+01 -.3900000000D-02 .0000000000D+00 .2335260000D+02 .1787700000D+00 .1707000000D-02 .1900000000D-02 .1669904000D+01 .1986000000D+00 .5381500000D+01 -.2213000000D+01 +2 11520010927200111062452179.5 -.1000000000D-02 -.1400000000D-03 .2177750000D+02 .2930500000D+00 .2118000000D-02 .3300000000D-02 .4062781000D+01 .2677200000D+01 .8024000000D+00 -.5145500000D+01 .4300000000D-02 -.1100000000D-03 .9003500000D+01 .1213400000D+00 .1501000000D-02 .3400000000D-02 .1171965000D+01 .3925100000D+01 .1958300000D+01 -.5544100000D+01 -.5300000000D-02 .1000000000D-04 .2334100000D+02 .2711300000D+00 .2121000000D-02 .1800000000D-02 .5668424000D+01 .4078000000D+01 .2504500000D+01 -.5340000000D+01 +2 11620011106200112162452219.5 -.6300000000D-02 .2700000000D-03 .2337220000D+02 .2874100000D+00 .2202000000D-02 .3600000000D-02 .1658915000D+01 .1301000000D+00 .4501700000D+01 -.1910100000D+01 -.2000000000D-03 .1300000000D-03 .7115600000D+01 .1314000000D+00 .1705000000D-02 .2700000000D-02 .6049904000D+01 .9430000000D+00 .5106000000D+01 -.2311900000D+01 -.3900000000D-02 -.8000000000D-04 .2245970000D+02 .3229800000D+00 .2302000000D-02 .4400000000D-02 .3260521000D+01 .1588000000D+01 .6150700000D+01 -.2823400000D+01 +2 11720011216200201252452259.5 -.3000000000D-03 .8000000000D-04 .2301050000D+02 .2785000000D+00 .1989000000D-02 .2600000000D-02 .5561238000D+01 .3859700000D+01 .2090400000D+01 -.1142200000D+01 .4100000000D-02 -.2000000000D-04 .1097670000D+02 .1279300000D+00 .1735000000D-02 .1600000000D-02 .4380638000D+01 .4141100000D+01 .2195600000D+01 -.5844700000D+01 -.9600000000D-02 .2200000000D-03 .2124410000D+02 .3498600000D+00 .2265000000D-02 .4200000000D-02 .7559370000D+00 .5386000000D+01 .3547300000D+01 -.3987000000D+00 +2 11820020125200203062452299.5 .1400000000D-02 .8000000000D-04 .2108640000D+02 .2915100000D+00 .1902000000D-02 .1000000000D-02 .3156542000D+01 .1385800000D+01 .6001600000D+01 -.7732000000D+00 .2400000000D-02 .1000000000D-03 .1472450000D+02 .1490800000D+00 .1566000000D-02 .3100000000D-02 .2234985000D+01 .1144400000D+01 .5566900000D+01 -.1956000000D+01 -.1200000000D-02 -.9000000000D-04 .2097460000D+02 .3488100000D+00 .2226000000D-02 .3900000000D-02 .4480314000D+01 .2924500000D+01 .9930000000D+00 -.4591500000D+01 +2 11920020306200204152452339.5 .2000000000D-03 .2100000000D-03 .1904070000D+02 .3194400000D+00 .1929000000D-02 .1900000000D-02 .6613470000D+00 .5248800000D+01 .3537700000D+01 -.7090000000D+00 .2800000000D-02 .6000000000D-04 .1608680000D+02 .1648100000D+00 .1575000000D-02 .3900000000D-02 .6244811000D+01 .4658000000D+01 .2536600000D+01 -.5929300000D+01 -.3300000000D-02 .1600000000D-03 .2192130000D+02 .3281300000D+00 .2204000000D-02 .4000000000D-02 .1951191000D+01 .4659000000D+00 .4790800000D+01 -.2308200000D+01 +2 12020020415200205252452379.5 .8200000000D-02 -.1500000000D-03 .1870270000D+02 .3382000000D+00 .2058000000D-02 .1600000000D-02 .4349579000D+01 .2838200000D+01 .9344000000D+00 -.2815800000D+01 .4200000000D-02 -.3000000000D-04 .1485270000D+02 .1454100000D+00 .1682000000D-02 .4200000000D-02 .3975207000D+01 .1861100000D+01 .5898100000D+01 -.2611500000D+01 .2200000000D-02 .2000000000D-04 .2306670000D+02 .3050500000D+00 .2126000000D-02 .2600000000D-02 .5776444000D+01 .4270000000D+01 .2347300000D+01 -.5221000000D+00 +2 12120020525200207042452419.5 .1000000000D-02 .1600000000D-03 .2063570000D+02 .3208200000D+00 .2172000000D-02 .5900000000D-02 .1783915000D+01 .3947000000D+00 .4620300000D+01 -.1308700000D+01 .1300000000D-02 .6000000000D-04 .1126200000D+02 .1215500000D+00 .1477000000D-02 .3900000000D-02 .1842308000D+01 .5117800000D+01 .2973100000D+01 -.1721000000D+00 .4000000000D-02 .4000000000D-04 .2345360000D+02 .2925700000D+00 .1989000000D-02 .1800000000D-02 .3368257000D+01 .1777900000D+01 .6206600000D+01 -.4448100000D+01 +2 12220020704200208132452459.5 .3200000000D-02 -.4000000000D-04 .2281170000D+02 .2788400000D+00 .1995000000D-02 .3200000000D-02 .5625335000D+01 .4178100000D+01 .2148700000D+01 -.5545700000D+01 .3500000000D-02 -.6000000000D-04 .7622500000D+01 .1141500000D+00 .1294000000D-02 .3100000000D-02 .1190350000D+00 .2099100000D+01 .6237900000D+01 -.3412700000D+01 .3100000000D-02 .1400000000D-03 .2288100000D+02 .2915900000D+00 .1830000000D-02 .1000000000D-02 .9691650000D+00 .5586700000D+01 .3801900000D+01 -.3250900000D+01 +2 12320020813200209222452499.5 -.5000000000D-03 .4000000000D-04 .2344560000D+02 .2492500000D+00 .1679000000D-02 .3400000000D-02 .3273279000D+01 .1664600000D+01 .6071900000D+01 -.2583400000D+01 .8000000000D-03 .9000000000D-04 .8692100000D+01 .1044700000D+00 .1258000000D-02 .2400000000D-02 .4942694000D+01 .5427200000D+01 .3380800000D+01 -.7368000000D+00 .9200000000D-02 -.1400000000D-03 .2181280000D+02 .2968300000D+00 .1741000000D-02 .9000000000D-03 .4828627000D+01 .3156600000D+01 .1392200000D+01 -.1988100000D+01 +2 12420020922200211012452539.5 -.2800000000D-02 .5000000000D-04 .2246350000D+02 .2441400000D+00 .1476000000D-02 .4700000000D-02 .9473770000D+00 .5487400000D+01 .3795200000D+01 -.1178400000D+01 .6200000000D-02 -.1100000000D-03 .1235790000D+02 .1084100000D+00 .1190000000D-02 .3000000000D-02 .3026976000D+01 .2462700000D+01 .6472000000D+00 -.4449300000D+01 .5600000000D-02 .0000000000D+00 .2105430000D+02 .3016900000D+00 .1746000000D-02 .1500000000D-02 .2369101000D+01 .7658000000D+00 .5235500000D+01 -.1134000000D+01 +2 12520021101200212112452579.5 -.2200000000D-02 -.6000000000D-04 .2056830000D+02 .2581100000D+00 .1484000000D-02 .2600000000D-02 .4870602000D+01 .3100000000D+01 .1534700000D+01 -.6165400000D+01 .1800000000D-02 .1300000000D-03 .1505960000D+02 .1277800000D+00 .1123000000D-02 .1500000000D-02 .8750270000D+00 .5952300000D+01 .4142000000D+01 -.2953800000D+01 .3600000000D-02 .0000000000D+00 .2123080000D+02 .3006700000D+00 .1780000000D-02 .2200000000D-02 .6181431000D+01 .4664700000D+01 .2782300000D+01 -.4987500000D+01 +2 12620021211200301202452619.5 -.5600000000D-02 .6000000000D-04 .1884380000D+02 .2860300000D+00 .1617000000D-02 .2800000000D-02 .2422727000D+01 .7535000000D+00 .5412000000D+01 -.2862600000D+01 .8000000000D-02 -.1800000000D-03 .1591150000D+02 .1380200000D+00 .1220000000D-02 .1900000000D-02 .4930512000D+01 .3293700000D+01 .1240400000D+01 -.4947700000D+01 .4100000000D-02 -.1400000000D-03 .2220510000D+02 .2921100000D+00 .1817000000D-02 .3600000000D-02 .3738901000D+01 .2259300000D+01 .3549000000D+00 -.3186600000D+01 +2 12720030120200303012452659.5 -.8100000000D-02 .1600000000D-03 .1871030000D+02 .3112700000D+00 .1807000000D-02 .3400000000D-02 .6169830000D+01 .4682200000D+01 .2806500000D+01 -.1058300000D+01 .2600000000D-02 .5000000000D-04 .1463040000D+02 .1246300000D+00 .1388000000D-02 .5000000000D-03 .2709163000D+01 .5583000000D+00 .4686800000D+01 -.1682800000D+01 -.2300000000D-02 .2000000000D-04 .2318500000D+02 .2805300000D+00 .1823000000D-02 .3000000000D-02 .1337901000D+01 .6103900000D+01 .4247900000D+01 -.8792000000D+00 +2 12820030301200304102452699.5 -.3700000000D-02 -.3000000000D-04 .2060240000D+02 .3032500000D+00 .1953000000D-02 .1200000000D-02 .3653230000D+01 .2273700000D+01 .2013000000D+00 -.9800000000D+00 .6000000000D-02 -.1600000000D-03 .1128620000D+02 .1088500000D+00 .1229000000D-02 .2700000000D-02 .6055790000D+00 .3873700000D+01 .1829000000D+01 -.4621700000D+01 -.6000000000D-03 -.1700000000D-03 .2345220000D+02 .2754700000D+00 .1749000000D-02 .3800000000D-02 .5245186000D+01 .3645500000D+01 .1837200000D+01 -.5034800000D+01 +2 12920030410200305202452739.5 -.6900000000D-02 .2100000000D-03 .2275850000D+02 .2643800000D+00 .1729000000D-02 .2600000000D-02 .1241593000D+01 .6074100000D+01 .3951000000D+01 -.4569000000D+00 .0000000000D+00 .1100000000D-03 .7760200000D+01 .1023900000D+00 .9650000000D-03 .2100000000D-02 .5137226000D+01 .9497000000D+00 .5059100000D+01 -.1597800000D+01 -.5000000000D-02 .0000000000D+00 .2289300000D+02 .2766600000D+00 .1532000000D-02 .4500000000D-02 .2869449000D+01 .1206300000D+01 .5576300000D+01 -.2902600000D+01 +2 13020030520200306292452779.5 .1300000000D-02 -.8000000000D-04 .2350600000D+02 .2223100000D+00 .1249000000D-02 .2400000000D-02 .5205537000D+01 .3575500000D+01 .1185100000D+01 -.2886900000D+01 .4100000000D-02 -.7000000000D-04 .7962200000D+01 .7932000000D-01 .7110000000D-03 .1700000000D-02 .3665931000D+01 .4424400000D+01 .1890500000D+01 -.5002700000D+01 -.6700000000D-02 .2000000000D-04 .2208400000D+02 .2639600000D+00 .1354000000D-02 .3400000000D-02 .4900870000D+00 .5100900000D+01 .2581800000D+01 -.1272000000D+00 +2 13120030629200308082452819.5 -.3000000000D-02 .1700000000D-03 .2297940000D+02 .1598700000D+00 .1890000000D-02 .4400000000D-02 .2970287000D+01 .1223600000D+01 .4379700000D+01 -.1532900000D+01 .2500000000D-02 .1000000000D-04 .1005540000D+02 .4044000000D-01 .8750000000D-03 .2500000000D-02 .1863269000D+01 .1774600000D+01 .5007600000D+01 -.1627100000D+01 -.2200000000D-02 -.2300000000D-03 .2178570000D+02 .1870300000D+00 .2413000000D-02 .4300000000D-02 .4456751000D+01 .2827600000D+01 .5944800000D+01 -.4442200000D+01 +2 13220030808200309172452859.5 .1220000000D-01 -.6300000000D-03 .2258380000D+02 .3790000000D-01 .2190000000D-03 .8200000000D-02 .9047330000D+00 .2010500000D+01 .3251900000D+01 -.4169400000D+01 .6800000000D-02 -.2400000000D-03 .1033350000D+02 .4712000000D-01 .5730000000D-03 .3800000000D-02 .6217745000D+01 .3094500000D+01 .5188700000D+01 -.5368000000D+01 -.3500000000D-02 -.1700000000D-03 .2198240000D+02 .5169000000D-01 .1920000000D-03 .8800000000D-02 .2375820000D+01 .3844500000D+01 .4787500000D+01 -.5689300000D+01 +2 13320030917200310272452899.5 -.5000000000D-03 -.1000000000D-04 .2306130000D+02 .1354000000D-01 .1996000000D-02 .2800000000D-02 .5339246000D+01 .5821900000D+01 .3522400000D+01 -.1085200000D+01 -.5000000000D-03 .1300000000D-03 .9011800000D+01 .3193000000D-01 .8350000000D-03 .1900000000D-02 .4212592000D+01 .2845300000D+01 .4156000000D+01 -.8104000000D+00 -.9200000000D-02 .1400000000D-03 .2203200000D+02 .1384000000D-01 .2467000000D-02 .1900000000D-02 .5622460000D+00 .2343200000D+01 .5106900000D+01 -.9989000000D+00 +2 13420031027200312062452939.5 .2800000000D-02 -.1300000000D-03 .2289740000D+02 .1544800000D+00 .1272000000D-02 .2800000000D-02 .3306052000D+01 .1671000000D+01 .6217000000D+00 -.4696100000D+01 .5000000000D-02 -.1000000000D-03 .1063090000D+02 .8530000000D-01 .8050000000D-03 .4000000000D-03 .2172512000D+01 .1815100000D+01 .3357000000D+00 -.4379800000D+01 -.4100000000D-02 -.9000000000D-04 .2146700000D+02 .1876200000D+00 .1526000000D-02 .6600000000D-02 .4780883000D+01 .3149700000D+01 .2234800000D+01 -.5053900000D+01 +2 13520031206200401152452979.5 -.1500000000D-02 .1500000000D-03 .2180930000D+02 .2242400000D+00 .1424000000D-02 .2000000000D-02 .1067104000D+01 .5604700000D+01 .4184900000D+01 -.3995300000D+01 .4000000000D-03 .1700000000D-03 .1365280000D+02 .1181500000D+00 .1173000000D-02 .1300000000D-02 .8229800000D-01 .5495500000D+01 .3799600000D+01 -.2105000000D+00 -.4200000000D-02 -.1000000000D-04 .2091330000D+02 .2779100000D+00 .1661000000D-02 .4600000000D-02 .2436031000D+01 .8613000000D+00 .5531700000D+01 -.3146200000D+01 +2 13620040115200402242453019.5 .4900000000D-02 -.7000000000D-04 .1998660000D+02 .2672200000D+00 .1624000000D-02 .1300000000D-02 .4986296000D+01 .3239000000D+01 .1715600000D+01 -.4140500000D+01 .7400000000D-02 -.1500000000D-03 .1579480000D+02 .1457400000D+00 .1241000000D-02 .3300000000D-02 .4160017000D+01 .2801700000D+01 .9394000000D+00 -.3918100000D+01 -.3500000000D-02 .4000000000D-04 .2125530000D+02 .3034900000D+00 .1867000000D-02 .2900000000D-02 .6267136000D+01 .4767000000D+01 .2912100000D+01 -.2838000000D+00 +2 13720040224200404042453059.5 .5500000000D-02 -.3000000000D-04 .1856050000D+02 .3051200000D+00 .1832000000D-02 .1500000000D-02 .2496735000D+01 .8753000000D+00 .5462200000D+01 -.2504000000D+01 .1800000000D-02 .1100000000D-03 .1604600000D+02 .1511100000D+00 .1411000000D-02 .3500000000D-02 .1899669000D+01 .1437000000D+00 .4302400000D+01 -.1473400000D+01 .1900000000D-02 -.9000000000D-04 .2235350000D+02 .2990000000D+00 .1922000000D-02 .3800000000D-02 .3818812000D+01 .2338300000D+01 .4327000000D+00 -.4663700000D+01 +2 13820040404200405142453099.5 .4200000000D-02 .4000000000D-04 .1903400000D+02 .3244800000D+00 .2032000000D-02 .3800000000D-02 .6212012000D+01 .4766100000D+01 .2821200000D+01 -.5623500000D+01 .7400000000D-02 -.2000000000D-03 .1403920000D+02 .1291700000D+00 .1500000000D-02 .3900000000D-02 .5952488000D+01 .3620600000D+01 .1455400000D+01 -.4857400000D+01 -.8000000000D-03 .1700000000D-03 .2329640000D+02 .2874000000D+00 .1906000000D-02 .2400000000D-02 .1409357000D+01 .6160300000D+01 .4300300000D+01 -.3579900000D+01 +2 13920040514200406232453139.5 .7600000000D-02 -.1500000000D-03 .2125420000D+02 .3050900000D+00 .2081000000D-02 .5500000000D-02 .3699270000D+01 .2315400000D+01 .2514000000D+00 -.3638000000D+01 .0000000000D+00 .1300000000D-03 .1013150000D+02 .1132200000D+00 .1326000000D-02 .2600000000D-02 .3898877000D+01 .6007000000D+00 .4816900000D+01 -.2224400000D+01 .5400000000D-02 -.4000000000D-04 .2339810000D+02 .2828900000D+00 .1873000000D-02 .7000000000D-03 .5306185000D+01 .3693600000D+01 .1901800000D+01 -.5094900000D+01 +2 14020040623200408022453179.5 .2200000000D-02 .1000000000D-04 .2313070000D+02 .2668300000D+00 .1849000000D-02 .1500000000D-02 .1294520000D+01 .6091900000D+01 .4111100000D+01 -.1221600000D+01 .4300000000D-02 -.1000000000D-03 .7342500000D+01 .1077600000D+00 .1254000000D-02 .2900000000D-02 .2308929000D+01 .3919600000D+01 .1832600000D+01 -.5455500000D+01 .6900000000D-02 -.4000000000D-04 .2263310000D+02 .2891000000D+00 .1826000000D-02 .9000000000D-03 .2912596000D+01 .1246300000D+01 .5767100000D+01 -.5235500000D+01 +2 14120040802200409112453219.5 .4000000000D-02 -.1800000000D-03 .2335380000D+02 .2450300000D+00 .1604000000D-02 .3600000000D-02 .5239313000D+01 .3590300000D+01 .1789800000D+01 -.5192100000D+01 .1800000000D-02 .7000000000D-04 .9515900000D+01 .1021400000D+00 .1283000000D-02 .2400000000D-02 .7572520000D+00 .9677000000D+00 .5287100000D+01 -.2827600000D+01 .6000000000D-02 .2000000000D-04 .2156510000D+02 .2995900000D+00 .1779000000D-02 .1900000000D-02 .4845860000D+00 .5110800000D+01 .3339200000D+01 -.4891700000D+01 +2 14220040911200410212453259.5 .1500000000D-02 -.1200000000D-03 .2206400000D+02 .2483700000D+00 .1536000000D-02 .3600000000D-02 .2908955000D+01 .1152500000D+01 .5795100000D+01 -.3785900000D+01 .2900000000D-02 .5000000000D-04 .1314640000D+02 .1141300000D+00 .1271000000D-02 .2000000000D-02 .5042199000D+01 .4317800000D+01 .2532800000D+01 -.3469000000D+00 .9300000000D-02 -.1500000000D-03 .2099790000D+02 .3060500000D+00 .1781000000D-02 .2800000000D-02 .4299419000D+01 .2713000000D+01 .9130000000D+00 -.3605900000D+01 +2 14320041021200411302453299.5 -.2900000000D-02 .0000000000D+00 .2005290000D+02 .2719400000D+00 .1622000000D-02 .1200000000D-02 .5254480000D+00 .5051500000D+01 .3500600000D+01 -.2244800000D+01 .4800000000D-02 -.1000000000D-04 .1548510000D+02 .1385700000D+00 .1272000000D-02 .7000000000D-03 .2857674000D+01 .1558700000D+01 .5955900000D+01 -.3612100000D+01 .3500000000D-02 .2000000000D-04 .2141210000D+02 .3059400000D+00 .1892000000D-02 .1200000000D-02 .1820511000D+01 .3179000000D+00 .4758500000D+01 -.1198400000D+01 +2 14420041130200501092453339.5 -.1000000000D-02 -.1800000000D-03 .1855850000D+02 .3088600000D+00 .1834000000D-02 .3500000000D-02 .4314237000D+01 .2687500000D+01 .1052800000D+01 -.5101600000D+01 .2100000000D-02 .1100000000D-03 .1583990000D+02 .1483800000D+00 .1490000000D-02 .2100000000D-02 .6123990000D+00 .5152500000D+01 .2996700000D+01 -.5104000000D+00 .3500000000D-02 -.1100000000D-03 .2249030000D+02 .3020200000D+00 .2062000000D-02 .4600000000D-02 .5652678000D+01 .4177200000D+01 .2311700000D+01 -.5281100000D+01 +2 14520050109200502182453379.5 -.7700000000D-02 .1200000000D-03 .1913840000D+02 .3357500000D+00 .2203000000D-02 .1900000000D-02 .1730612000D+01 .2990000000D+00 .4690000000D+01 -.3476300000D+01 .6600000000D-02 -.1400000000D-03 .1380030000D+02 .1325800000D+00 .1687000000D-02 .2800000000D-02 .4676709000D+01 .2274900000D+01 .1020000000D+00 -.2953500000D+01 .3000000000D-02 -.1900000000D-03 .2335250000D+02 .3009100000D+00 .2178000000D-02 .4300000000D-02 .3234806000D+01 .1700200000D+01 .6151400000D+01 -.3400400000D+01 +2 14620050218200503302453419.5 -.1400000000D-02 -.1300000000D-03 .2161640000D+02 .3214400000D+00 .2469000000D-02 .3000000000D-02 .5480347000D+01 .4104700000D+01 .2065400000D+01 -.4513900000D+01 -.1100000000D-02 .1700000000D-03 .9640100000D+01 .1287600000D+00 .1532000000D-02 .3900000000D-02 .2667757000D+01 .5434800000D+01 .3329600000D+01 -.2384000000D+00 -.4300000000D-02 .4000000000D-04 .2328660000D+02 .3100300000D+00 .2207000000D-02 .3100000000D-02 .8215270000D+00 .5474300000D+01 .3704900000D+01 -.9951000000D+00 +2 14720050330200505092453459.5 -.1900000000D-02 .1000000000D-04 .2337550000D+02 .2866200000D+00 .2243000000D-02 .2400000000D-02 .3054260000D+01 .1525200000D+01 .5850600000D+01 -.2347800000D+01 .5100000000D-02 -.1300000000D-03 .7560300000D+01 .1256000000D+00 .1532000000D-02 .3200000000D-02 .1208547000D+01 .2412500000D+01 .2259000000D+00 -.3285100000D+01 -.1400000000D-02 -.1800000000D-03 .2231670000D+02 .3268900000D+00 .2158000000D-02 .4600000000D-02 .4655637000D+01 .2979800000D+01 .1217400000D+01 -.5023700000D+01 +2 14820050509200506182453499.5 -.1800000000D-02 .1100000000D-03 .2292200000D+02 .2738400000D+00 .1824000000D-02 .3800000000D-02 .6808850000D+00 .5238900000D+01 .3411300000D+01 -.5430400000D+01 .0000000000D+00 .1600000000D-03 .1097120000D+02 .1152200000D+00 .1432000000D-02 .3400000000D-02 .5822663000D+01 .5612900000D+01 .3617100000D+01 -.4124000000D+00 -.8400000000D-02 .1500000000D-03 .2134340000D+02 .3369100000D+00 .2070000000D-02 .2600000000D-02 .2150280000D+01 .5226000000D+00 .4923500000D+01 -.3269500000D+01 +2 14920050618200507282453539.5 .5100000000D-02 -.1100000000D-03 .2096280000D+02 .2775800000D+00 .1443000000D-02 .5300000000D-02 .4575037000D+01 .2771200000D+01 .8616000000D+00 -.3955200000D+01 .6600000000D-02 -.1100000000D-03 .1436290000D+02 .1254500000D+00 .1088000000D-02 .4500000000D-02 .3718938000D+01 .2624300000D+01 .6628000000D+00 -.3985100000D+01 -.2600000000D-02 -.8000000000D-04 .2138170000D+02 .3221000000D+00 .1909000000D-02 .1500000000D-02 .5913462000D+01 .4371000000D+01 .2255600000D+01 -.5278400000D+01 +2 15020050728200509062453579.5 .6000000000D-03 .1900000000D-03 .1908720000D+02 .2634400000D+00 .1397000000D-02 .3600000000D-02 .2140601000D+01 .3965000000D+00 .4097900000D+01 -.1815700000D+01 .2700000000D-02 .8000000000D-04 .1564270000D+02 .1180500000D+00 .7580000000D-03 .1700000000D-02 .1511221000D+01 .6200600000D+01 .3746400000D+01 -.1248700000D+01 -.2000000000D-02 -.2000000000D-04 .2226840000D+02 .2734800000D+00 .1716000000D-02 .1700000000D-02 .3467509000D+01 .1943600000D+01 .5639400000D+01 -.2515300000D+01 +2 15120050906200510162453619.5 .7200000000D-02 -.9000000000D-04 .1846420000D+02 .1730600000D+00 .2839000000D-02 .5500000000D-02 .6049042000D+01 .4426500000D+01 .1301800000D+01 -.5348500000D+01 .7100000000D-02 -.1300000000D-03 .1530530000D+02 .7504000000D-01 .8100000000D-03 .1600000000D-02 .5634592000D+01 .3764100000D+01 .3591000000D+00 -.5029800000D+01 -.4600000000D-02 .1700000000D-03 .2299200000D+02 .1715900000D+00 .2501000000D-02 .2300000000D-02 .1171483000D+01 .5880300000D+01 .2785100000D+01 -.5284700000D+01 +2 15220051016200511252453659.5 -.1140000000D-01 .8200000000D-03 .1841910000D+02 .1132900000D+00 .2720000000D-03 .6400000000D-02 .3996140000D+01 .5556100000D+01 .1364200000D+01 -.1385800000D+01 .1300000000D-02 .1600000000D-03 .1521600000D+02 .2611000000D-01 .1310000000D-03 .2600000000D-02 .3602192000D+01 .3675900000D+01 .3521000000D+00 -.5554600000D+01 -.3100000000D-02 .5000000000D-04 .2301370000D+02 .7335000000D-01 .7800000000D-04 .1210000000D-01 .5413818000D+01 .9696000000D+00 .2493000000D+01 -.2609400000D+01 +2 15320051125200601042453699.5 .4600000000D-02 -.4000000000D-04 .1859040000D+02 .4825000000D-01 .2547000000D-02 .2000000000D-02 .2307771000D+01 .3618300000D+01 .5797000000D+00 -.2797000000D+01 .4500000000D-02 .0000000000D+00 .1604140000D+02 .1907000000D-01 .9750000000D-03 .1500000000D-02 .1693664000D+01 .9565000000D+00 .6038600000D+01 -.2941800000D+01 .0000000000D+00 -.1500000000D-03 .2226850000D+02 .2602000000D-01 .2306000000D-02 .3200000000D-02 .3624090000D+01 .5655700000D+01 .2140800000D+01 -.5943100000D+01 +2 15420060104200602132453739.5 .4000000000D-03 .1800000000D-03 .1853210000D+02 .1580900000D+00 .1418000000D-02 .2300000000D-02 .2838170000D+00 .4986400000D+01 .4181700000D+01 -.3264000000D+00 .3800000000D-02 .2000000000D-04 .1613990000D+02 .9042000000D-01 .7590000000D-03 .3300000000D-02 .5945607000D+01 .4337300000D+01 .2853100000D+01 -.5991500000D+01 -.4600000000D-02 .1500000000D-03 .2223220000D+02 .1605100000D+00 .1259000000D-02 .4100000000D-02 .1591892000D+01 .1492000000D+00 .5499000000D+01 -.2555700000D+01 +2 15520060213200603252453779.5 .8200000000D-02 -.1300000000D-03 .1852210000D+02 .2525200000D+00 .1434000000D-02 .2900000000D-02 .4220296000D+01 .2710400000D+01 .1239100000D+01 -.4225800000D+01 .6700000000D-02 -.1200000000D-03 .1523820000D+02 .1167600000D+00 .1099000000D-02 .3400000000D-02 .3793764000D+01 .1810100000D+01 .6031900000D+01 -.3556800000D+01 -.3500000000D-02 .1700000000D-03 .2290760000D+02 .2336100000D+00 .1459000000D-02 .3500000000D-02 .5620653000D+01 .4146400000D+01 .2522800000D+01 -.1034200000D+01 +2 15620060325200605042453819.5 .3100000000D-02 .1200000000D-03 .1981330000D+02 .2868800000D+00 .1743000000D-02 .3600000000D-02 .1757146000D+01 .3613000000D+00 .4780700000D+01 -.1868300000D+01 .1500000000D-02 .8000000000D-04 .1265380000D+02 .1114000000D+00 .1264000000D-02 .2600000000D-02 .1652789000D+01 .5305400000D+01 .3195600000D+01 -.5245000000D+00 .2000000000D-03 .7000000000D-04 .2342520000D+02 .2573300000D+00 .1656000000D-02 .1700000000D-02 .3297957000D+01 .1749800000D+01 .5900000000D-02 -.5623000000D+00 +2 15720060504200606132453859.5 .5500000000D-02 -.5000000000D-04 .2196910000D+02 .2772400000D+00 .1889000000D-02 .4400000000D-02 .5608336000D+01 .4215800000D+01 .2222200000D+01 -.5738500000D+01 .4600000000D-02 -.1100000000D-03 .8880000000D+01 .1077400000D+00 .1188000000D-02 .2000000000D-02 .6003119000D+01 .2348300000D+01 .2698000000D+00 -.3888500000D+01 .0000000000D+00 .2000000000D-03 .2324370000D+02 .2698400000D+00 .1703000000D-02 .1500000000D-02 .9485000000D+00 .5600100000D+01 .3875300000D+01 -.1220200000D+01 +2 15820060613200607232453899.5 .4600000000D-02 -.6000000000D-04 .2335080000D+02 .2533900000D+00 .1742000000D-02 .2500000000D-02 .3247034000D+01 .1725800000D+01 .6082500000D+01 -.3372700000D+01 -.7000000000D-03 .1500000000D-03 .7410100000D+01 .1043500000D+00 .1195000000D-02 .2700000000D-02 .4514954000D+01 .5712300000D+01 .3634200000D+01 -.1184600000D+01 .6600000000D-02 -.3000000000D-04 .2237730000D+02 .2827900000D+00 .1725000000D-02 .1900000000D-02 .4849098000D+01 .3177300000D+01 .1474600000D+01 -.1937700000D+01 +2 15920060723200609012453939.5 .1300000000D-02 .1000000000D-04 .2315220000D+02 .2427800000D+00 .1564000000D-02 .3200000000D-02 .9238290000D+00 .5527000000D+01 .3772600000D+01 -.1474400000D+01 .4100000000D-02 -.6000000000D-04 .1037590000D+02 .1028900000D+00 .1244000000D-02 .1400000000D-02 .2835578000D+01 .2765200000D+01 .8773000000D+00 -.5022200000D+01 .4300000000D-02 .1000000000D-03 .2137170000D+02 .2968800000D+00 .1776000000D-02 .3300000000D-02 .2419591000D+01 .7786000000D+00 .5328300000D+01 -.1386200000D+01 +2 16020060901200610112453979.5 .4000000000D-03 -.6000000000D-04 .2162640000D+02 .2517700000D+00 .1574000000D-02 .2700000000D-02 .4870814000D+01 .3104300000D+01 .1529300000D+01 -.6171200000D+01 .0000000000D+00 .1800000000D-03 .1384850000D+02 .1201200000D+00 .1246000000D-02 .1400000000D-02 .7721590000D+00 .6155300000D+01 .4429100000D+01 -.2249200000D+01 .3000000000D-02 .1300000000D-03 .2099430000D+02 .3088600000D+00 .1862000000D-02 .3000000000D-02 .6231539000D+01 .4670400000D+01 .2859000000D+01 -.6142200000D+01 +2 16120061011200611202454019.5 -.2800000000D-02 .0000000000D+00 .1957550000D+02 .2821500000D+00 .1772000000D-02 .2000000000D-02 .2461642000D+01 .7290000000D+00 .5484800000D+01 -.3762400000D+01 .7000000000D-02 -.1300000000D-03 .1580950000D+02 .1448300000D+00 .1321000000D-02 .6000000000D-03 .4842869000D+01 .3432200000D+01 .1537200000D+01 -.5581200000D+01 .6700000000D-02 -.1100000000D-03 .2162020000D+02 .3125800000D+00 .2001000000D-02 .2700000000D-02 .3752353000D+01 .2261200000D+01 .4023000000D+00 -.3060600000D+01 +2 16220061120200612302454059.5 -.7200000000D-02 .1100000000D-03 .1840740000D+02 .3280400000D+00 .2074000000D-02 .2500000000D-02 .6210226000D+01 .4639400000D+01 .2930900000D+01 -.9406000000D+00 .2400000000D-02 .9000000000D-04 .1562410000D+02 .1495500000D+00 .1674000000D-02 .2600000000D-02 .2584002000D+01 .7227000000D+00 .4846500000D+01 -.1898900000D+01 .0000000000D+00 .9000000000D-04 .2276630000D+02 .3097800000D+00 .2195000000D-02 .6200000000D-02 .1298474000D+01 .6094000000D+01 .4251300000D+01 -.1384800000D+01 +2 16320061230200702082454099.5 -.9000000000D-03 -.2200000000D-03 .1968430000D+02 .3543000000D+00 .2488000000D-02 .1300000000D-02 .3605580000D+01 .2207200000D+01 .2118000000D+00 -.2855600000D+01 .6800000000D-02 -.1900000000D-03 .1281980000D+02 .1326800000D+00 .1836000000D-02 .4500000000D-02 .3821570000D+00 .4010900000D+01 .1899600000D+01 -.4965800000D+01 .9000000000D-03 -.9000000000D-04 .2345030000D+02 .3118300000D+00 .2389000000D-02 .4000000000D-02 .5151165000D+01 .3592900000D+01 .1802700000D+01 -.6063400000D+01 +2 16420070208200703202454139.5 -.8700000000D-02 .2300000000D-03 .2237960000D+02 .3267300000D+00 .2628000000D-02 .4000000000D-02 .1080239000D+01 .5947900000D+01 .3895000000D+01 -.3188000000D+00 -.7000000000D-03 .1400000000D-03 .8361100000D+01 .1350000000D+00 .1700000000D-02 .4300000000D-02 .4797894000D+01 .8459000000D+00 .5016600000D+01 -.2075700000D+01 -.4400000000D-02 .6000000000D-04 .2304390000D+02 .3279300000D+00 .2466000000D-02 .3500000000D-02 .2710548000D+01 .1063800000D+01 .5589500000D+01 -.2891300000D+01 +2 16520070320200704292454179.5 -.1100000000D-02 -.2000000000D-04 .2348240000D+02 .2910800000D+00 .2271000000D-02 .3500000000D-02 .4939421000D+01 .3327000000D+01 .1447400000D+01 -.4042700000D+01 .4900000000D-02 -.1100000000D-03 .8492200000D+01 .1269100000D+00 .1773000000D-02 .4600000000D-02 .3432610000D+01 .4054900000D+01 .1935200000D+01 -.5182100000D+01 -.8200000000D-02 .1400000000D-03 .2186340000D+02 .3517500000D+00 .2413000000D-02 .3900000000D-02 .2182550000D+00 .4834300000D+01 .3019900000D+01 -.9672000000D+00 +2 16620070429200706082454219.5 -.2700000000D-02 .1800000000D-03 .2218860000D+02 .2885600000D+00 .1968000000D-02 .3500000000D-02 .2542560000D+01 .7740000000D+00 .5339400000D+01 -.1912700000D+01 .1000000000D-02 .1300000000D-03 .1275780000D+02 .1286600000D+00 .1630000000D-02 .4000000000D-02 .1534506000D+01 .8977000000D+00 .5302200000D+01 -.2599000000D+01 -.3600000000D-02 -.8000000000D-04 .2112940000D+02 .3607200000D+00 .2331000000D-02 .1300000000D-02 .3947561000D+01 .2351900000D+01 .4236000000D+00 -.1243100000D+01 +2 16720070608200707182454259.5 .1200000000D-02 .9000000000D-04 .1982810000D+02 .3082000000D+00 .1828000000D-02 .4200000000D-02 .8967300000D-01 .4610500000D+01 .2873200000D+01 -.8930000000D-01 .5500000000D-02 -.6000000000D-04 .1546450000D+02 .1504000000D+00 .1432000000D-02 .4000000000D-02 .5609789000D+01 .4262300000D+01 .2265500000D+01 -.5886400000D+01 -.9100000000D-02 .2600000000D-03 .2167840000D+02 .3423700000D+00 .2218000000D-02 .3100000000D-02 .1393993000D+01 .6163600000D+01 .4151000000D+01 -.8186000000D+00 +2 16820070718200708272454299.5 .7800000000D-02 -.1000000000D-03 .1844920000D+02 .3218300000D+00 .1728000000D-02 .3200000000D-02 .3820332000D+01 .2211300000D+01 .2068000000D+00 -.3884000000D+01 .4100000000D-02 .1000000000D-04 .1555680000D+02 .1416300000D+00 .1373000000D-02 .1800000000D-02 .3345977000D+01 .1506000000D+01 .5535800000D+01 -.2958900000D+01 -.5000000000D-03 -.3000000000D-04 .2282260000D+02 .3061500000D+00 .1952000000D-02 .1600000000D-02 .5196484000D+01 .3684700000D+01 .1619000000D+01 -.3447400000D+01 +2 16920070827200710062454339.5 .2700000000D-02 .2000000000D-03 .1938410000D+02 .2915500000D+00 .1661000000D-02 .3100000000D-02 .1269630000D+01 .6101100000D+01 .3664000000D+01 -.1371300000D+01 .5400000000D-02 -.8000000000D-04 .1334540000D+02 .1049500000D+00 .9240000000D-03 .1400000000D-02 .1153897000D+01 .4951600000D+01 .2598200000D+01 -.5423700000D+01 -.4800000000D-02 .2700000000D-03 .2345870000D+02 .2638700000D+00 .1508000000D-02 .5500000000D-02 .2802380000D+01 .1217400000D+01 .5207100000D+01 -.1614100000D+01 +2 17020071006200711152454379.5 .1030000000D-01 -.1800000000D-03 .2126190000D+02 .2057200000D+00 .1990000000D-02 .2600000000D-02 .5165790000D+01 .3726900000D+01 .7449000000D+00 -.5716700000D+01 .2400000000D-02 .1000000000D-04 .1030100000D+02 .6997000000D-01 .7820000000D-03 .1900000000D-02 .5412684000D+01 .2229500000D+01 .5037400000D+01 -.2344500000D+01 -.1400000000D-02 .1400000000D-03 .2337430000D+02 .2051200000D+00 .1862000000D-02 .5500000000D-02 .5003690000D+00 .5119000000D+01 .2075700000D+01 -.6123500000D+01 +2 17120071115200712252454419.5 .2100000000D-02 .1500000000D-03 .2207250000D+02 .2417000000D-01 .2229000000D-02 .5800000000D-02 .3020109000D+01 .1507900000D+01 .4908400000D+01 -.2739000000D+00 .7100000000D-02 -.2100000000D-03 .8668200000D+01 .4433000000D-01 .1081000000D-02 .2400000000D-02 .3464883000D+01 .1697200000D+01 .3136200000D+01 -.4072400000D+01 -.5700000000D-02 .3400000000D-03 .2315590000D+02 .3601000000D-01 .2090000000D-02 .5700000000D-02 .4644583000D+01 .3363200000D+01 .6268000000D+01 -.2109900000D+01 +2 17220071225200802032454459.5 .7800000000D-02 -.1300000000D-03 .2118840000D+02 .1528100000D+00 .2487000000D-02 .1500000000D-02 .1215570000D+01 .3128100000D+01 .6208000000D+01 -.4791100000D+01 .6000000000D-02 -.1400000000D-03 .1011870000D+02 .9012000000D-01 .1190000000D-02 .1800000000D-02 .1327129000D+01 .9838000000D+00 .4240500000D+01 -.2176700000D+01 -.2100000000D-02 .1300000000D-03 .2347230000D+02 .1219000000D+00 .2179000000D-02 .3800000000D-02 .2808081000D+01 .4421000000D+01 .1274400000D+01 -.6076400000D+01 +2 17320080203200803142454499.5 .2000000000D-03 .2600000000D-03 .2028860000D+02 .7388000000D-01 .1673000000D-02 .5900000000D-02 .5682159000D+01 .4357100000D+01 .3948700000D+01 -.2714000000D+00 .4400000000D-02 -.6000000000D-04 .1170530000D+02 .2619000000D-01 .7790000000D-03 .2400000000D-02 .5629379000D+01 .3534500000D+01 .2160000000D+01 -.5757200000D+01 -.3500000000D-02 .2000000000D-03 .2343880000D+02 .6906000000D-01 .1578000000D-02 .2000000000D-02 .9567080000D+00 .5766100000D+01 .5338900000D+01 -.3463700000D+01 +2 17420080314200804232454539.5 .7600000000D-02 -.1100000000D-03 .2122600000D+02 .2054600000D+00 .1204000000D-02 .3400000000D-02 .3511715000D+01 .2146900000D+01 .6806000000D+00 -.4143100000D+01 .1400000000D-02 .4000000000D-04 .1006150000D+02 .7191000000D-01 .8230000000D-03 .2300000000D-02 .3669524000D+01 .5345000000D+00 .5095500000D+01 -.2682800000D+01 .2100000000D-02 -.2000000000D-04 .2339980000D+02 .1876600000D+00 .1279000000D-02 .4000000000D-03 .5109972000D+01 .3542400000D+01 .2293800000D+01 -.4394500000D+01 +2 17520080423200806022454579.5 .2700000000D-02 .9000000000D-04 .2273490000D+02 .2349700000D+00 .1491000000D-02 .4700000000D-02 .1213310000D+01 .6063800000D+01 .4244900000D+01 -.1700800000D+01 .2900000000D-02 -.5000000000D-04 .7518200000D+01 .9025000000D-01 .9870000000D-03 .2000000000D-02 .1925758000D+01 .4033100000D+01 .2087000000D+01 -.5973800000D+01 .5500000000D-02 -.7000000000D-04 .2295660000D+02 .2412100000D+00 .1487000000D-02 .4000000000D-03 .2837042000D+01 .1200000000D+01 .5914800000D+01 -.3526600000D+01 +2 17620080602200807122454619.5 .5000000000D-02 -.8000000000D-04 .2346350000D+02 .2331800000D+00 .1534000000D-02 .2800000000D-02 .5190762000D+01 .3620800000D+01 .1827900000D+01 -.2166000000D+00 .2100000000D-02 .0000000000D+00 .7944400000D+01 .9554000000D-01 .1143000000D-02 .2400000000D-02 .4434570000D+00 .1199200000D+01 .5497900000D+01 -.3580000000D+01 .3800000000D-02 .8000000000D-04 .2206700000D+02 .2720800000D+00 .1612000000D-02 .2800000000D-02 .4835190000D+00 .5103000000D+01 .3447400000D+01 -.4901900000D+01 +2 17720080712200808212454659.5 .1800000000D-02 .0000000000D+00 .2283800000D+02 .2366600000D+00 .1514000000D-02 .2100000000D-02 .2885252000D+01 .1179500000D+01 .5794500000D+01 -.3781600000D+01 .1800000000D-02 .3000000000D-04 .1132880000D+02 .1037100000D+00 .1245000000D-02 .8000000000D-03 .4893812000D+01 .4574400000D+01 .2750500000D+01 -.5952700000D+01 .8800000000D-02 -.1200000000D-03 .2122520000D+02 .2932900000D+00 .1716000000D-02 .4000000000D-02 .4346217000D+01 .2720500000D+01 .1012600000D+01 -.3971000000D+01 +2 17820080821200809302454699.5 -.2000000000D-02 .5000000000D-04 .2113110000D+02 .2563200000D+00 .1590000000D-02 .2200000000D-02 .5442730000D+00 .5057300000D+01 .3515600000D+01 -.2068700000D+01 .5700000000D-02 -.1000000000D-03 .1445550000D+02 .1287400000D+00 .1281000000D-02 .1300000000D-02 .2777548000D+01 .1743200000D+01 .6254400000D+01 -.4075900000D+01 .5800000000D-02 .0000000000D+00 .2108330000D+02 .3065800000D+00 .1893000000D-02 .2100000000D-02 .1877760000D+01 .3372000000D+00 .4846300000D+01 -.1976300000D+01 +2 17920080930200811092454739.5 -.1000000000D-03 -.1600000000D-03 .1916560000D+02 .2936900000D+00 .1848000000D-02 .1900000000D-02 .4392396000D+01 .2682700000D+01 .1161900000D+01 -.6259100000D+01 .1600000000D-02 .1300000000D-03 .1596830000D+02 .1543000000D+00 .1425000000D-02 .1700000000D-02 .5454370000D+00 .5322800000D+01 .3314800000D+01 -.5960500000D+01 .7100000000D-02 -.1200000000D-03 .2186570000D+02 .3131800000D+00 .2125000000D-02 .4400000000D-02 .5685591000D+01 .4208600000D+01 .2371400000D+01 -.5571900000D+01 +2 18020081109200812192454779.5 -.7300000000D-02 .1000000000D-03 .1847820000D+02 .3407300000D+00 .2258000000D-02 .2400000000D-02 .1822265000D+01 .2998000000D+00 .4844000000D+01 -.2023400000D+01 .8900000000D-02 -.2400000000D-03 .1524110000D+02 .1533600000D+00 .1810000000D-02 .4400000000D-02 .4564580000D+01 .2553300000D+01 .3429000000D+00 -.3771400000D+01 .7200000000D-02 -.2200000000D-03 .2298140000D+02 .3170500000D+00 .2352000000D-02 .5800000000D-02 .3233436000D+01 .1737900000D+01 .6168100000D+01 -.3758200000D+01 +2 18120081219200901282454819.5 -.4800000000D-02 -.4000000000D-04 .2035220000D+02 .3579700000D+00 .2768000000D-02 .2700000000D-02 .5495103000D+01 .4124800000D+01 .2102100000D+01 -.5319100000D+01 -.1600000000D-02 .2100000000D-03 .1175360000D+02 .1393500000D+00 .1852000000D-02 .4900000000D-02 .2395481000D+01 .5729500000D+01 .3607200000D+01 -.5155000000D+00 -.1900000000D-02 .7000000000D-04 .2346130000D+02 .3248600000D+00 .2494000000D-02 .1900000000D-02 .7943530000D+00 .5489700000D+01 .3691000000D+01 -.1665900000D+01 +2 18220090128200903092454859.5 -.6800000000D-02 .1100000000D-03 .2291500000D+02 .3224300000D+00 .2736000000D-02 .5300000000D-02 .2987297000D+01 .1535400000D+01 .5789800000D+01 -.2278800000D+01 .6400000000D-02 -.2300000000D-03 .7569100000D+01 .1431100000D+00 .1774000000D-02 .4200000000D-02 .6986650000D+00 .2565500000D+01 .3739000000D+00 -.3690100000D+01 .2300000000D-02 -.2900000000D-03 .2280050000D+02 .3433700000D+00 .2521000000D-02 .4200000000D-02 .4613721000D+01 .2943200000D+01 .1181700000D+01 -.4983600000D+01 +2 18320090309200904182454899.5 -.6400000000D-02 .1800000000D-03 .2329960000D+02 .2952800000D+00 .2251000000D-02 .4100000000D-02 .5688110000D+00 .5180100000D+01 .3328000000D+01 -.5670000000D-01 -.3400000000D-02 .2700000000D-03 .9634000000D+01 .1313100000D+00 .1812000000D-02 .5000000000D-02 .5555023000D+01 .5715500000D+01 .3635600000D+01 -.8061000000D+00 -.6400000000D-02 .6000000000D-04 .2157280000D+02 .3624200000D+00 .2500000000D-02 .1700000000D-02 .2087240000D+01 .4318000000D+00 .4892900000D+01 -.3440100000D+01 +2 18420090418200905282454939.5 .5000000000D-03 -.1000000000D-04 .2147820000D+02 .3004000000D+00 .1967000000D-02 .2300000000D-02 .4436083000D+01 .2645900000D+01 .9513000000D+00 -.4264800000D+01 .5600000000D-02 -.1200000000D-03 .1388730000D+02 .1440900000D+00 .1601000000D-02 .2800000000D-02 .3512066000D+01 .2579700000D+01 .6956000000D+00 -.4300100000D+01 -.3100000000D-02 -.1000000000D-03 .2114520000D+02 .3638900000D+00 .2467000000D-02 .2300000000D-02 .5792720000D+01 .4233300000D+01 .2295900000D+01 -.4696100000D+01 +2 18520090528200907072454979.5 .0000000000D+00 .1800000000D-03 .1915670000D+02 .3228700000D+00 .1946000000D-02 .4300000000D-02 .1936088000D+01 .2147000000D+00 .4784900000D+01 -.2105500000D+01 -.9000000000D-03 .2400000000D-03 .1585130000D+02 .1616700000D+00 .1507000000D-02 .4000000000D-02 .1255640000D+01 .6006500000D+01 .3912400000D+01 -.1453700000D+01 -.2500000000D-02 -.5000000000D-04 .2200430000D+02 .3436800000D+00 .2363000000D-02 .2900000000D-02 .3241776000D+01 .1747800000D+01 .6020400000D+01 -.2815900000D+01 +2 18620090707200908162455019.5 .5400000000D-02 .1000000000D-04 .1853430000D+02 .3377900000D+00 .2042000000D-02 .3300000000D-02 .5616463000D+01 .4097500000D+01 .2139400000D+01 -.1922000000D+00 .7300000000D-02 -.1800000000D-03 .1499720000D+02 .1417400000D+00 .1548000000D-02 .8000000000D-03 .5266788000D+01 .3193500000D+01 .9556000000D+00 -.3907800000D+01 -.4500000000D-02 .1300000000D-03 .2312330000D+02 .3132400000D+00 .2106000000D-02 .3700000000D-02 .7680750000D+00 .5526100000D+01 .3524800000D+01 -.5573400000D+01 +2 18720090816200909252455059.5 .4800000000D-02 .9000000000D-04 .2038120000D+02 .3105200000D+00 .2011000000D-02 .1100000000D-02 .3052426000D+01 .1667200000D+01 .5765600000D+01 -.2893300000D+01 -.8000000000D-03 .1600000000D-03 .1169150000D+02 .1120100000D+00 .1187000000D-02 .2000000000D-02 .3120998000D+01 .1836000000D+00 .4323900000D+01 -.8323000000D+00 .2700000000D-02 -.1000000000D-03 .2347880000D+02 .2861600000D+00 .1718000000D-02 .5300000000D-02 .4641218000D+01 .3029300000D+01 .1035300000D+01 -.4041300000D+01 +2 18820090925200911042455099.5 .4600000000D-02 .6000000000D-04 .2257570000D+02 .2502100000D+00 .1563000000D-02 .8000000000D-03 .6396910000D+00 .5476200000D+01 .3110600000D+01 -.5973400000D+01 .4500000000D-02 -.1600000000D-03 .8051500000D+01 .9327000000D-01 .7680000000D-03 .1900000000D-02 .1308632000D+01 .3535600000D+01 .1184200000D+01 -.3978800000D+01 .1000000000D-03 .1300000000D-03 .2299150000D+02 .2590000000D+00 .1309000000D-02 .3200000000D-02 .2270597000D+01 .5938000000D+00 .4643300000D+01 -.1865500000D+01 +2 18920091104200912142455139.5 .9400000000D-02 -.1900000000D-03 .2347450000D+02 .1836500000D+00 .1401000000D-02 .2000000000D-02 .4647160000D+01 .3035800000D+01 .1002000000D+00 -.2311900000D+01 -.6000000000D-03 .9000000000D-04 .7480100000D+01 .6076000000D-01 .7220000000D-03 .9000000000D-03 .6058581000D+01 .8264000000D+00 .4055800000D+01 -.1094200000D+01 .6800000000D-02 -.1400000000D-03 .2228730000D+02 .2101600000D+00 .1635000000D-02 .5300000000D-02 .6235364000D+01 .4551100000D+01 .1566900000D+01 -.5519400000D+01 +2 19020091214201001232455179.5 .6800000000D-02 -.7000000000D-04 .2339250000D+02 .6725000000D-01 .2076000000D-02 .2300000000D-02 .2515750000D+01 .9306000000D+00 .4049700000D+01 -.5802800000D+01 .0000000000D+00 .5000000000D-04 .8245800000D+01 .6900000000D-02 .1138000000D-02 .2600000000D-02 .4274415000D+01 .4961000000D+00 .1880800000D+01 -.3561300000D+01 .2400000000D-02 .4000000000D-04 .2201140000D+02 .6829000000D-01 .2470000000D-02 .1500000000D-02 .4059848000D+01 .2574000000D+01 .5583900000D+01 -.3900600000D+01 +2 19120100123201003042455219.5 .1460000000D-01 -.4800000000D-03 .2347810000D+02 .1226300000D+00 .1447000000D-02 .6500000000D-02 .6232260000D+00 .2245800000D+01 .5259200000D+01 -.3986700000D+01 .0000000000D+00 .8000000000D-04 .6818300000D+01 .1040500000D+00 .9450000000D-03 .4200000000D-02 .2209526000D+01 .9070000000D-01 .2904200000D+01 -.2348800000D+01 .3900000000D-02 -.9000000000D-04 .2246270000D+02 .1459200000D+00 .1642000000D-02 .7100000000D-02 .2196262000D+01 .3706700000D+01 .5369000000D+00 -.5700500000D+01 +2 19220100304201004132455259.5 .6400000000D-02 -.7000000000D-04 .2322050000D+02 .2263000000D-01 .1723000000D-02 .4800000000D-02 .5103012000D+01 .3736900000D+01 .3432700000D+01 -.6010000000D+01 .4200000000D-02 -.1300000000D-03 .6367100000D+01 .1690000000D-01 .8380000000D-03 .1700000000D-02 .6164597000D+01 .5148700000D+01 .1318400000D+01 -.4120400000D+01 -.1500000000D-02 .2100000000D-03 .2278320000D+02 .1994000000D-01 .1918000000D-02 .2300000000D-02 .4249610000D+00 .5357300000D+01 .4888600000D+01 -.2288000000D+00 +2 19320100413201005232455299.5 .9600000000D-02 -.2300000000D-03 .2336270000D+02 .1587800000D+00 .1048000000D-02 .4800000000D-02 .3038462000D+01 .1543500000D+01 .3052000000D+00 -.4218700000D+01 -.9000000000D-03 .1200000000D-03 .6960400000D+01 .5790000000D-01 .5850000000D-03 .1700000000D-02 .4353638000D+01 .5418800000D+01 .4032200000D+01 -.1842300000D+01 .4100000000D-02 -.1000000000D-04 .2246230000D+02 .1696000000D+00 .1286000000D-02 .1700000000D-02 .4631928000D+01 .3003200000D+01 .2024200000D+01 -.4576700000D+01 +2 19420100523201007022455339.5 .3600000000D-02 .1000000000D-04 .2334450000D+02 .2036600000D+00 .1257000000D-02 .2000000000D-02 .8240870000D+00 .5483200000D+01 .3908000000D+01 -.2930400000D+01 .2400000000D-02 -.5000000000D-04 .9104600000D+01 .8396000000D-01 .9370000000D-03 .1400000000D-02 .2628411000D+01 .2822300000D+01 .1066000000D+01 -.5826100000D+01 .4000000000D-02 .5000000000D-04 .2171710000D+02 .2412700000D+00 .1448000000D-02 .2200000000D-02 .2354713000D+01 .7162000000D+00 .5544400000D+01 -.1952100000D+01 +2 19520100702201008112455379.5 .4100000000D-02 -.1100000000D-03 .2237700000D+02 .2269000000D+00 .1423000000D-02 .2100000000D-02 .4830520000D+01 .3100000000D+01 .1556100000D+01 -.5488900000D+01 -.7000000000D-03 .1300000000D-03 .1239670000D+02 .1037800000D+00 .1154000000D-02 .1500000000D-02 .6486750000D+00 .4530000000D-01 .4642300000D+01 -.1634800000D+01 .3400000000D-02 .1200000000D-03 .2110590000D+02 .2814200000D+00 .1656000000D-02 .3500000000D-02 .6249184000D+01 .4655000000D+01 .2994800000D+01 -.6242400000D+01 +2 19620100811201009202455419.5 .2300000000D-02 -.1300000000D-03 .2056790000D+02 .2575600000D+00 .1658000000D-02 .2900000000D-02 .2486140000D+01 .7301000000D+00 .5523700000D+01 -.4388600000D+01 .3400000000D-02 -.1000000000D-04 .1503650000D+02 .1324600000D+00 .1283000000D-02 .9000000000D-03 .4771553000D+01 .3598500000D+01 .1862500000D+01 -.5282000000D+00 .9000000000D-02 -.1300000000D-03 .2123090000D+02 .3035600000D+00 .1863000000D-02 .2300000000D-02 .3798072000D+01 .2274500000D+01 .5080000000D+00 -.3808200000D+01 +2 19720100920201010302455459.5 -.2600000000D-02 .0000000000D+00 .1878820000D+02 .3050200000D+00 .1978000000D-02 .2000000000D-03 .2592600000D-01 .4645100000D+01 .3086300000D+01 -.1616000000D+00 .1300000000D-02 .1200000000D-03 .1600580000D+02 .1556200000D+00 .1550000000D-02 .3500000000D-02 .2522763000D+01 .9268000000D+00 .5172500000D+01 -.1985900000D+01 .3200000000D-02 .1100000000D-03 .2216560000D+02 .3133900000D+00 .2148000000D-02 .4600000000D-02 .1333978000D+01 .6136600000D+01 .4319000000D+01 -.1753800000D+01 +2 19820101030201012092455499.5 .2300000000D-02 -.3500000000D-03 .1871150000D+02 .3559700000D+00 .2387000000D-02 .3700000000D-02 .3715097000D+01 .2236500000D+01 .3987000000D+00 -.3883600000D+01 .3600000000D-02 -.3000000000D-04 .1461030000D+02 .1501000000D+00 .1987000000D-02 .4400000000D-02 .2614080000D+00 .4386700000D+01 .2186300000D+01 -.5740400000D+01 .4800000000D-02 -.8000000000D-04 .2319350000D+02 .3191100000D+00 .2469000000D-02 .4100000000D-02 .5167475000D+01 .3657400000D+01 .1840300000D+01 -.5936600000D+01 +2 19920101209201101182455539.5 -.1030000000D-01 .2100000000D-03 .2110580000D+02 .3592200000D+00 .2829000000D-02 .2800000000D-02 .1114914000D+01 .6016400000D+01 .3959100000D+01 -.3746000000D+00 .0000000000D+00 .9000000000D-04 .1046880000D+02 .1407100000D+00 .1939000000D-02 .5800000000D-02 .4435473000D+01 .1207300000D+01 .5383000000D+01 -.2360700000D+01 .4000000000D-03 -.1000000000D-04 .2339230000D+02 .3322700000D+00 .2651000000D-02 .2600000000D-02 .2719853000D+01 .1117600000D+01 .5613600000D+01 -.3350700000D+01 diff --git a/GUI/xephem/auxil/mars_db b/GUI/xephem/auxil/mars_db new file mode 100644 index 0000000..40ef7cb --- /dev/null +++ b/GUI/xephem/auxil/mars_db @@ -0,0 +1,855 @@ +# Mars features database built 9 Jan 2004 from +# http://planetarynames.wr.usgs.gov/mars/marsTOC.html +# Planetographic Latitude with West Longitudes. +# Features with diameter < 50 km are removed. + +# Name | Latitude, degs +N | Longitude, degs +W | Diameter, km | Feature Type + +# Lander sites from various Web maps. +Pathfinder | 19 | 33 | 0 | Landing site +Viking 1 | 20 | 46 | 0 | Landing site +Viking 2 | 48 | 226 | 0 | Landing site +Mars Polar Lander | -76 | 195 | 0 | Landing site +Beagle 2 | 11 | 270 | 0 | Landing site +Spirit | -14.7 | 185 | 0 | Landing site +Opportunity | -2 | 6 | 0 | Landing site +Phoenix | 68 | -234 | 0 | Landing site +Curiosity | -4.5895 | 222.5583 | 0 | Landing site + +Aeolis | -5.0 | 215.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Aeria | 10.0 | 310.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Aetheria | 40.0 | 230.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Aethiopis | 10.0 | 230.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Amazonis | 0.0 | 140.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Amenthes | 5.0 | 250.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Aonium Sinus | -45.0 | 105.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Arabia | 20.0 | 330.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Arcadia | 45.0 | 100.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Argyre | -45.0 | 25.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Arnon | 48.0 | 335.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Aurorae Sinus | -15.0 | 50.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Ausonia | -40.0 | 250.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Baltia | 60.0 | 50.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Boreosyrtis | 55.0 | 290.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Candor | 3.0 | 75.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Casius | 40.0 | 260.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Cebrenia | 50.0 | 210.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Cecropia | 60.0 | 320.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Ceraunius | 20.0 | 93.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Cerberus | 15.0 | 205.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Chalce | -50.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Chersonesus | -50.0 | 260.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Chryse | 10.0 | 30.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Chrysokeras | -50.0 | 110.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Claritas | -35.0 | 110.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Copais Palus | 55.0 | 280.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Coprates | -15.0 | 65.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Cyclopia | -5.0 | 230.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Cydonia | 40.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Deltoton Sinus | -4.0 | 305.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Depressio | -60.0 | 340.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Deucalionis | -15.0 | 340.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Deuteronilus | 35.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Diacria | 50.0 | 180.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Dioscuria | 50.0 | 320.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Edom | 0.0 | 345.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Electris | -45.0 | 190.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Elysium | 25.0 | 210.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Eridania | -45.0 | 220.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Eunostos | 22.0 | 120.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Euphrates | 20.0 | 335.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Gehon | 15.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Hellas | -40.0 | 290.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Hellespontus | -50.0 | 325.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Hesperia | -20.0 | 240.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Hiddekel | 15.0 | 345.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Hyperboreus | 75.0 | 60.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Iapygia | -20.0 | 295.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Icaria | -40.0 | 130.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +II Thyle I | -70.0 | 180.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Ismenius Lacus | 40.0 | 330.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Jamuna | 10.0 | 40.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Juventae Fons | -5.0 | 63.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Laestrygon | 0.0 | 200.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Lemuria | 70.0 | 200.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Libya | 0.0 | 270.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Lunae Palus | 15.0 | 65.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Acidalium | 45.0 | 30.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Australe | -60.0 | 10.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Boreum | 60.0 | 180.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Chronium | -58.0 | 210.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Cimmerium | -20.0 | 220.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Erythraeum | -25.0 | 40.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Hadriacum | -40.0 | 270.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Serpentis | -30.0 | 320.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Sirenum | -30.0 | 155.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Mare Tyrrhenum | -20.0 | 255.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Margaritifer | -10.0 | 25.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Memnonia | -20.0 | 150.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Meroe | 35.0 | 285.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Moab | 20.0 | 350.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Moeris Lacus | 8.0 | 270.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Nectar | -28.0 | 72.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Neith Regio | 38.0 | 272.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Nepenthes | 20.0 | 260.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Nereidum Fretum | -45.0 | 55.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Niliacus Lacus | 30.0 | 30.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Nilokeras | 30.0 | 55.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Nilosyrtis | 42.0 | 290.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Nix Olympica | 20.0 | 130.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Noachis | -45.0 | 330.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Ogygis Regio | -45.0 | 65.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Olympia | 80.0 | 200.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Ophir | -10.0 | 65.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Ortygia | 60.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Oxia Palus | 8.0 | 18.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Oxus | 20.0 | 12.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Panchaia | 60.0 | 200.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Pandorae Fretum | -25.0 | 316.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Phaethontis | -50.0 | 155.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Phison | 20.0 | 320.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Phlegra | 31.3 | 187.8 | 134.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Phoenicis Lacus | -12.0 | 110.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Phrixi Regio | -40.0 | 70.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Promethei Sinus | -65.0 | 280.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Propontis | 45.0 | 185.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Protei Regio | -23.0 | 50.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Protonilus | 42.0 | 315.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Pyrrhae Regio | -15.0 | 38.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Scandia | 60.5 | 147.9 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Sinai | -20.0 | 70.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Sinus Meridiani | -5.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Sinus Sabaeus | -8.0 | 340.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Sithonius Lacus | 45.0 | 245.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Solis Lacus | -28.0 | 90.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Styx | 30.0 | 200.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Syria | -20.0 | 100.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Syrtis Major | 10.0 | 290.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Tanais | 50.0 | 70.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Tempe | 40.0 | 70.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Tharsis | 0.0 | 0.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Thaumasia | -35.0 | 85.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Thoth | 30.0 | 255.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Thymiamata | 10.0 | 10.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Tithonius Lacus | -5.0 | 85.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Tractus Albus | 30.0 | 80.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Trinacria | -25.0 | 268.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Trivium | 20.0 | 198.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Uchronia | 70.0 | 260.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Umbra | 50.0 | 290.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Utopia | 50.0 | 250.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Vulcani Pelagus | -35.0 | 15.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Xanthe | 10.0 | 50.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Yaonis Regio | -40.0 | 320.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Zephyria | 0.0 | 195.0 | 0.0 | Albedo Feature -- Geographic area distinguished by amount of reflected light +Acheron Catena | 37.6 | 101.0 | 491.0 | Catena, catenae -- Chain of craters +Alba Catena | 35.3 | 114.7 | 144.0 | Catena, catenae -- Chain of craters +Artynia Catena | 47.9 | 119.6 | 263.0 | Catena, catenae -- Chain of craters +Baphyras Catena | 39.1 | 84.3 | 95.0 | Catena, catenae -- Chain of craters +Ceraunius | 37.4 | 108.2 | 50.0 | Catena, catenae -- Chain of craters +Coprates Catena | -15.1 | 62.2 | 511.0 | Catena, catenae -- Chain of craters +Cyane Catena | 36.6 | 118.4 | 203.0 | Catena, catenae -- Chain of craters +Ganges Catena | -2.8 | 68.7 | 284.0 | Catena, catenae -- Chain of craters +Labeatis | 19.7 | 93.3 | 214.0 | Catena, catenae -- Chain of craters +Ophir Catenae | -9.6 | 59.4 | 577.0 | Catena, catenae -- Chain of craters +Phlegethon | 39.2 | 103.3 | 391.0 | Catena, catenae -- Chain of craters +Stygis Catena | 23.5 | 209.5 | 66.0 | Catena, catenae -- Chain of craters +Tithoniae | -5.4 | 82.4 | 567.0 | Catena, catenae -- Chain of craters +Tractus Catena | 28.1 | 102.7 | 897.0 | Catena, catenae -- Chain of craters +Argyre Cavi | -48.8 | 40.3 | 60.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Ausonia Cavus | -32.2 | 263.6 | 50.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Avernus Cavi | -3.6 | 187.5 | 93.4 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Cavi Angusti | -78.6 | 76.8 | 675.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Hyperborei Cavi | 80.0 | 50.3 | 75.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Octantis Cavi | -53.0 | 46.1 | 65.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Peraea Cavus | -29.9 | 264.8 | 55.2 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Scandia Cavi | 77.3 | 150.3 | 425.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Sisyphi Cavi | -73.1 | 6.2 | 430.0 | Cavus, cavi -- Hollows, irregular steep-sided depressions usually in arrays or clusters +Aram Chaos | 2.6 | 21.5 | 277.0 | Chaos -- Distinctive area of broken terrain +Aromatum Chaos | -1.1 | 43.0 | 91.5 | Chaos -- Distinctive area of broken terrain +Arsinoes Chaos | -7.7 | 28.0 | 230.0 | Chaos -- Distinctive area of broken terrain +Atlantis Chaos | -34.7 | 177.6 | 162.0 | Chaos -- Distinctive area of broken terrain +Aureum Chaos | -4.4 | 27.0 | 368.0 | Chaos -- Distinctive area of broken terrain +Aurorae Chaos | -9.0 | 35.3 | 750.0 | Chaos -- Distinctive area of broken terrain +Candor Chaos | -7.0 | 72.6 | 97.0 | Chaos -- Distinctive area of broken terrain +Echus Chaos | 10.9 | 74.8 | 473.0 | Chaos -- Distinctive area of broken terrain +Eos Chaos | -16.8 | 46.9 | 490.0 | Chaos -- Distinctive area of broken terrain +Galaxias Chaos | 34.1 | 213.6 | 234.0 | Chaos -- Distinctive area of broken terrain +Gorgonum Chaos | -37.5 | 170.9 | 149.0 | Chaos -- Distinctive area of broken terrain +Hellas Chaos | -47.8 | 296.0 | 595.0 | Chaos -- Distinctive area of broken terrain +Hydaspis Chaos | 3.2 | 27.1 | 355.0 | Chaos -- Distinctive area of broken terrain +Hydraotes Chaos | 0.8 | 35.4 | 417.5 | Chaos -- Distinctive area of broken terrain +Iani Chaos | -2.8 | 17.5 | 434.0 | Chaos -- Distinctive area of broken terrain +Ister Chaos | 13.0 | 56.4 | 103.4 | Chaos -- Distinctive area of broken terrain +Margaritifer | -8.7 | 21.6 | 390.0 | Chaos -- Distinctive area of broken terrain +Nilus Chaos | 25.6 | 77.2 | 283.0 | Chaos -- Distinctive area of broken terrain +Pyrrhae Chaos | -10.5 | 28.5 | 189.0 | Chaos -- Distinctive area of broken terrain +Arsia Chasmata | -7.6 | 119.3 | 81.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Ascraeus | 8.8 | 105.7 | 110.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Baetis Chasma | -4.4 | 65.0 | 93.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Candor Chasma | -6.6 | 70.9 | 813.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Capri Chasma | -9.9 | 43.3 | 1275.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Chasma Australe | -82.3 | 265.6 | 380.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Chasma Boreale | 83.0 | 47.1 | 560.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Coprates Chasma | -13.4 | 61.4 | 966.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Echus Chasma | 2.7 | 80.2 | 413.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Elysium Chasma | 22.5 | 218.5 | 129.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Eos Chasma | -12.1 | 39.7 | 1413.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Ganges Chasma | -8.0 | 48.1 | 584.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Hebes Chasma | -1.1 | 76.2 | 319.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Hyblaeus Chasma | 22.2 | 218.8 | 58.5 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Hydrae Chasma | -6.9 | 62.1 | 59.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Ius Chasma | -7.0 | 85.8 | 938.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Juventae Chasma | -3.5 | 61.4 | 320.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Melas Chasma | -10.4 | 72.7 | 547.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Ophir Chasma | -4.0 | 72.5 | 317.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Tithonium | -4.6 | 84.7 | 810.0 | Chasma, chasmata -- A deep, elongated, steep-sided depression +Abalos Colles | 77.0 | 72.0 | 245.0 | Colles -- Small hills or knobs +Acidalia Colles | 50.9 | 23.1 | 360.0 | Colles -- Small hills or knobs +Alpheus Colles | -40.0 | 300.3 | 628.0 | Colles -- Small hills or knobs +Arena Colles | 25.5 | 277.5 | 580.0 | Colles -- Small hills or knobs +Ariadnes Colles | -34.8 | 187.6 | 182.0 | Colles -- Small hills or knobs +Astapus Colles | 35.5 | 272.3 | 580.0 | Colles -- Small hills or knobs +Avernus Colles | -1.6 | 189.0 | 244.0 | Colles -- Small hills or knobs +Colles Nili | 39.0 | 297.1 | 645.0 | Colles -- Small hills or knobs +Cydonia Colles | 39.4 | 12.2 | 365.0 | Colles -- Small hills or knobs +Deuteronilus | 42.3 | 338.3 | 62.0 | Colles -- Small hills or knobs +Galaxias Colles | 37.2 | 214.3 | 613.0 | Colles -- Small hills or knobs +Ortygia Colles | 54.1 | 9.6 | 268.0 | Colles -- Small hills or knobs +Oxia Colles | 21.7 | 26.7 | 569.0 | Colles -- Small hills or knobs +Scandia Colles | 66.4 | 137.2 | 1365.0 | Colles -- Small hills or knobs +Tartarus Colles | 20.0 | 187.0 | 1750.0 | Colles -- Small hills or knobs +Adams | 31.1 | 197.0 | 94.9 | Crater, craters -- A circular depression +Agassiz | -70.1 | 89.0 | 117.7 | Crater, craters -- A circular depression +Alexey Tolstoy | -47.8 | 234.8 | 95.0 | Crater, craters -- A circular depression +Alitus | -35.2 | 38.2 | 50.0 | Crater, craters -- A circular depression +Aniak | -32.2 | 69.6 | 51.0 | Crater, craters -- A circular depression +Antoniadi | 21.5 | 299.2 | 394.0 | Crater, craters -- A circular depression +Arago | 10.2 | 330.2 | 154.0 | Crater, craters -- A circular depression +Arkhangelsky | -41.4 | 24.8 | 125.0 | Crater, craters -- A circular depression +Arrhenius | -40.3 | 237.4 | 129.0 | Crater, craters -- A circular depression +Babakin | -36.4 | 71.6 | 78.0 | Crater, craters -- A circular depression +Bakhuysen | -23.3 | 344.4 | 161.0 | Crater, craters -- A circular depression +Baldet | 23.0 | 294.6 | 180.0 | Crater, craters -- A circular depression +Baltisk | -42.7 | 54.7 | 52.0 | Crater, craters -- A circular depression +Bamberg | 40.0 | 3.2 | 58.3 | Crater, craters -- A circular depression +Barabashov | 47.7 | 68.8 | 125.6 | Crater, craters -- A circular depression +Barnard | -61.4 | 298.4 | 125.0 | Crater, craters -- A circular depression +Barsukov | 8.0 | 29.1 | 71.7 | Crater, craters -- A circular depression +Becquerel | 22.3 | 8.0 | 171.2 | Crater, craters -- A circular depression +Beer | -14.6 | 8.2 | 89.8 | Crater, craters -- A circular depression +Bernard | -23.6 | 154.3 | 131.0 | Crater, craters -- A circular depression +Bianchini | -64.2 | 95.4 | 76.0 | Crater, craters -- A circular depression +Bjerknes | -43.4 | 188.6 | 94.0 | Crater, craters -- A circular depression +Boeddicker | -15.0 | 197.7 | 109.0 | Crater, craters -- A circular depression +Bond | -33.2 | 36.0 | 110.6 | Crater, craters -- A circular depression +Bouguer | -18.7 | 332.8 | 107.0 | Crater, craters -- A circular depression +Bozkir | -44.5 | 32.2 | 84.0 | Crater, craters -- A circular depression +Brashear | -54.2 | 119.2 | 79.0 | Crater, craters -- A circular depression +Briault | -10.2 | 270.4 | 96.6 | Crater, craters -- A circular depression +Bunge | -34.2 | 48.7 | 73.7 | Crater, craters -- A circular depression +Burroughs | -72.4 | 243.0 | 125.7 | Crater, craters -- A circular depression +Burton | -14.1 | 156.4 | 123.0 | Crater, craters -- A circular depression +Byrd | -65.5 | 232.2 | 126.8 | Crater, craters -- A circular depression +Campbell | -54.7 | 194.6 | 129.0 | Crater, craters -- A circular depression +Cantoura | 15.0 | 51.8 | 51.4 | Crater, craters -- A circular depression +Cassini | 23.8 | 328.2 | 412.0 | Crater, craters -- A circular depression +Cerulli | 32.5 | 337.9 | 130.0 | Crater, craters -- A circular depression +Chamberlin | -66.1 | 124.5 | 120.4 | Crater, craters -- A circular depression +Charlier | -68.7 | 168.7 | 113.1 | Crater, craters -- A circular depression +Chekalin | -24.5 | 26.9 | 89.3 | Crater, craters -- A circular depression +Chia | 1.6 | 59.8 | 96.0 | Crater, craters -- A circular depression +Chimbote | -1.5 | 39.8 | 67.2 | Crater, craters -- A circular depression +Chinju | -4.6 | 42.2 | 66.6 | Crater, craters -- A circular depression +Clark | -55.6 | 133.4 | 98.0 | Crater, craters -- A circular depression +Coblentz | -55.3 | 90.3 | 112.0 | Crater, craters -- A circular depression +Cobres | -11.8 | 153.8 | 94.0 | Crater, craters -- A circular depression +Columbus | -29.8 | 166.1 | 119.0 | Crater, craters -- A circular depression +Comas Sola | -19.9 | 158.5 | 127.0 | Crater, craters -- A circular depression +Copernicus | -49.2 | 169.2 | 294.0 | Crater, craters -- A circular depression +Crommelin | 5.1 | 10.2 | 113.9 | Crater, craters -- A circular depression +Cruls | -43.3 | 197.1 | 88.0 | Crater, craters -- A circular depression +Curie | 29.1 | 4.8 | 114.1 | Crater, craters -- A circular depression +Da Vinci | 1.4 | 39.4 | 100.2 | Crater, craters -- A circular depression +Daly | -66.5 | 23.1 | 90.5 | Crater, craters -- A circular depression +Dana | -72.7 | 32.8 | 91.7 | Crater, craters -- A circular depression +Darwin | -57.3 | 19.5 | 178.0 | Crater, craters -- A circular depression +Dawes | -9.3 | 322.0 | 191.0 | Crater, craters -- A circular depression +de Vaucouleurs | -13.5 | 189.1 | 293.0 | Crater, craters -- A circular depression +Dejnev | -25.5 | 164.8 | 156.0 | Crater, craters -- A circular depression +Denning | -17.7 | 326.6 | 165.0 | Crater, craters -- A circular depression +Dinorwic | -30.4 | 101.6 | 55.8 | Crater, craters -- A circular depression +Dokuchaev | -61.0 | 127.2 | 78.0 | Crater, craters -- A circular depression +Douglass | -51.8 | 70.6 | 94.0 | Crater, craters -- A circular depression +Du Martheray | 5.5 | 266.5 | 102.0 | Crater, craters -- A circular depression +Du Toit | -71.8 | 49.6 | 83.0 | Crater, craters -- A circular depression +Eddie | 12.4 | 217.9 | 89.0 | Crater, craters -- A circular depression +Escalante | 0.2 | 244.7 | 79.3 | Crater, craters -- A circular depression +Eudoxus | -44.9 | 147.5 | 98.0 | Crater, craters -- A circular depression +Fesenkov | 21.8 | 86.7 | 87.0 | Crater, craters -- A circular depression +Flammarion | 25.4 | 311.8 | 173.0 | Crater, craters -- A circular depression +Flaugergues | -17.0 | 340.8 | 245.0 | Crater, craters -- A circular depression +Focas | 33.9 | 347.3 | 76.5 | Crater, craters -- A circular depression +Fontana | -63.2 | 72.2 | 80.0 | Crater, craters -- A circular depression +Fournier | -4.4 | 287.4 | 118.0 | Crater, craters -- A circular depression +Gale | -5.5 | 222.3 | 155.3 | Crater, craters -- A circular depression +Galilaei | 5.7 | 27.0 | 137.3 | Crater, craters -- A circular depression +Galle | -51.2 | 30.9 | 230.0 | Crater, craters -- A circular depression +Gandzani | 34.5 | 91.0 | 54.8 | Crater, craters -- A circular depression +Gilbert | -68.2 | 273.7 | 126.4 | Crater, craters -- A circular depression +Gill | 15.9 | 354.6 | 83.0 | Crater, craters -- A circular depression +Gledhill | -53.5 | 273.0 | 82.5 | Crater, craters -- A circular depression +Globe | -23.9 | 27.4 | 51.7 | Crater, craters -- A circular depression +Graff | -21.4 | 206.3 | 158.0 | Crater, craters -- A circular depression +Green | -52.7 | 8.4 | 184.0 | Crater, craters -- A circular depression +Gusev | -14.7 | 184.6 | 166.0 | Crater, craters -- A circular depression +Hadley | -19.5 | 203.1 | 119.0 | Crater, craters -- A circular depression +Haldane | -53.1 | 230.9 | 78.7 | Crater, craters -- A circular depression +Hale | -36.1 | 36.5 | 149.0 | Crater, craters -- A circular depression +Halley | -48.7 | 59.3 | 84.5 | Crater, craters -- A circular depression +Hartwig | -39.0 | 16.0 | 105.0 | Crater, craters -- A circular depression +Heaviside | -70.7 | 95.3 | 87.4 | Crater, craters -- A circular depression +Heinlein | -64.8 | 243.8 | 88.0 | Crater, craters -- A circular depression +Helmholtz | -45.8 | 21.3 | 111.5 | Crater, craters -- A circular depression +Henry | 10.9 | 336.7 | 171.0 | Crater, craters -- A circular depression +Herschel | -14.9 | 230.3 | 304.5 | Crater, craters -- A circular depression +Hipparchus | -44.8 | 151.4 | 93.0 | Crater, craters -- A circular depression +Holden | -26.4 | 34.0 | 153.8 | Crater, craters -- A circular depression +Holmes | -75.0 | 293.2 | 122.0 | Crater, craters -- A circular depression +Hooke | -45.2 | 44.4 | 139.0 | Crater, craters -- A circular depression +Huggins | -49.4 | 204.4 | 90.0 | Crater, craters -- A circular depression +Hussey | -53.8 | 126.7 | 99.0 | Crater, craters -- A circular depression +Hutton | -71.8 | 255.4 | 99.0 | Crater, craters -- A circular depression +Huxley | -63.0 | 259.2 | 107.0 | Crater, craters -- A circular depression +Huygens | -14.3 | 304.6 | 470.0 | Crater, craters -- A circular depression +Ibragimov | -25.7 | 59.7 | 86.0 | Crater, craters -- A circular depression +Innsbruck | -6.5 | 40.0 | 61.1 | Crater, craters -- A circular depression +Isil | -27.3 | 272.2 | 82.0 | Crater, craters -- A circular depression +Janssen | 2.7 | 322.5 | 158.0 | Crater, craters -- A circular depression +Jarry-Desloges | -9.5 | 276.3 | 92.0 | Crater, craters -- A circular depression +Jeans | -69.8 | 205.9 | 80.2 | Crater, craters -- A circular depression +Joly | -74.7 | 42.7 | 79.9 | Crater, craters -- A circular depression +Jones | -19.1 | 19.9 | 94.0 | Crater, craters -- A circular depression +Kaiser | -46.6 | 340.9 | 207.0 | Crater, craters -- A circular depression +Kamativi | -20.7 | 260.1 | 59.0 | Crater, craters -- A circular depression +Kamloops | -53.8 | 32.6 | 65.0 | Crater, craters -- A circular depression +Kantang | -24.7 | 17.6 | 54.8 | Crater, craters -- A circular depression +Kashira | -27.3 | 18.4 | 68.5 | Crater, craters -- A circular depression +Kasimov | -24.9 | 23.0 | 91.3 | Crater, craters -- A circular depression +Keeler | -61.0 | 151.3 | 95.0 | Crater, craters -- A circular depression +Kepler | -47.1 | 219.1 | 233.0 | Crater, craters -- A circular depression +Kinkora | -25.2 | 247.2 | 54.3 | Crater, craters -- A circular depression +Kipini | 26.1 | 31.6 | 73.6 | Crater, craters -- A circular depression +Knobel | -6.7 | 226.8 | 128.6 | Crater, craters -- A circular depression +Korolev | 73.0 | 195.5 | 84.2 | Crater, craters -- A circular depression +Koval'sky | -30.2 | 141.5 | 309.0 | Crater, craters -- A circular depression +Krishtofovich | -48.5 | 262.8 | 112.0 | Crater, craters -- A circular depression +Kuiper | -57.4 | 157.3 | 87.0 | Crater, craters -- A circular depression +Kunowsky | 57.1 | 9.7 | 67.4 | Crater, craters -- A circular depression +Labria | -35.3 | 48.1 | 54.0 | Crater, craters -- A circular depression +Lambert | -20.2 | 334.7 | 92.0 | Crater, craters -- A circular depression +Lamont | -58.6 | 113.6 | 76.0 | Crater, craters -- A circular depression +Lampland | -35.9 | 79.6 | 79.0 | Crater, craters -- A circular depression +Lassell | -20.9 | 62.5 | 92.0 | Crater, craters -- A circular depression +Lasswitz | -9.4 | 221.8 | 111.0 | Crater, craters -- A circular depression +Lau | -74.4 | 107.8 | 104.9 | Crater, craters -- A circular depression +Le Verrier | -38.0 | 342.9 | 140.0 | Crater, craters -- A circular depression +Li Fan | -47.2 | 153.2 | 104.8 | Crater, craters -- A circular depression +Liais | -75.4 | 252.8 | 132.0 | Crater, craters -- A circular depression +Liu Hsin | -53.6 | 171.6 | 137.0 | Crater, craters -- A circular depression +Lockyer | 28.0 | 199.5 | 71.0 | Crater, craters -- A circular depression +Lohse | -43.7 | 16.8 | 155.5 | Crater, craters -- A circular depression +Lomonosov | 65.2 | 9.2 | 153.0 | Crater, craters -- A circular depression +Lorica | -20.0 | 28.4 | 67.6 | Crater, craters -- A circular depression +Lowell | -52.3 | 81.4 | 203.0 | Crater, craters -- A circular depression +Luzin | 27.3 | 328.8 | 97.0 | Crater, craters -- A circular depression +Lyell | -70.1 | 15.6 | 131.0 | Crater, craters -- A circular depression +Lyot | 50.8 | 330.7 | 236.0 | Crater, craters -- A circular depression +Magadi | -34.9 | 46.2 | 53.0 | Crater, craters -- A circular depression +Magelhaens | -32.7 | 174.8 | 105.0 | Crater, craters -- A circular depression +Maggini | 28.0 | 350.6 | 143.0 | Crater, craters -- A circular depression +Main | -76.6 | 310.9 | 109.0 | Crater, craters -- A circular depression +Mandora | 12.3 | 53.7 | 59.4 | Crater, craters -- A circular depression +Maraldi | -62.2 | 32.0 | 124.0 | Crater, craters -- A circular depression +Marca | -10.1 | 158.3 | 81.0 | Crater, craters -- A circular depression +Mariner | -35.1 | 164.5 | 170.0 | Crater, craters -- A circular depression +Marth | 13.0 | 3.5 | 98.4 | Crater, craters -- A circular depression +Martz | -35.3 | 215.9 | 97.0 | Crater, craters -- A circular depression +Masursky | 12.1 | 32.4 | 117.9 | Crater, craters -- A circular depression +Maunder | -50.0 | 358.5 | 107.5 | Crater, craters -- A circular depression +McLaughlin | 22.1 | 22.5 | 96.2 | Crater, craters -- A circular depression +Mellish | -72.8 | 24.0 | 101.7 | Crater, craters -- A circular depression +Mendel | -59.1 | 199.0 | 78.6 | Crater, craters -- A circular depression +Mie | 48.5 | 220.4 | 104.0 | Crater, craters -- A circular depression +Millman | -54.3 | 149.8 | 75.0 | Crater, craters -- A circular depression +Millochau | -21.4 | 275.0 | 115.0 | Crater, craters -- A circular depression +Mitchel | -67.7 | 283.9 | 138.4 | Crater, craters -- A circular depression +Molesworth | -27.7 | 210.9 | 181.0 | Crater, craters -- A circular depression +Montevallo | 15.4 | 54.4 | 51.9 | Crater, craters -- A circular depression +Morella | -9.7 | 51.5 | 78.9 | Crater, craters -- A circular depression +Moreux | 42.1 | 315.6 | 138.0 | Crater, craters -- A circular depression +Mutch | 0.6 | 55.3 | 211.0 | Crater, craters -- A circular depression +Nansen | -50.3 | 140.6 | 81.0 | Crater, craters -- A circular depression +Newcomb | -24.4 | 359.0 | 252.0 | Crater, craters -- A circular depression +Newton | -40.8 | 158.1 | 298.0 | Crater, craters -- A circular depression +Nicholson | 0.2 | 164.6 | 102.5 | Crater, craters -- A circular depression +Niesten | -28.3 | 302.3 | 115.0 | Crater, craters -- A circular depression +Novara | -25.1 | 10.7 | 86.9 | Crater, craters -- A circular depression +Orson Welles | -0.2 | 45.9 | 124.5 | Crater, craters -- A circular depression +Ostrov | -26.8 | 28.2 | 73.0 | Crater, craters -- A circular depression +Ottumwa | 24.8 | 55.8 | 53.2 | Crater, craters -- A circular depression +Oudemans | -10.0 | 91.9 | 124.0 | Crater, craters -- A circular depression +Palos | -2.7 | 249.2 | 55.1 | Crater, craters -- A circular depression +Pasteur | 19.4 | 335.5 | 113.0 | Crater, craters -- A circular depression +Perepelkin | 52.8 | 64.6 | 112.0 | Crater, craters -- A circular depression +Peridier | 25.7 | 276.2 | 100.0 | Crater, craters -- A circular depression +Perrotin | -2.9 | 78.0 | 84.0 | Crater, craters -- A circular depression +Peta | -21.5 | 9.2 | 80.5 | Crater, craters -- A circular depression +Pettit | 12.3 | 174.0 | 98.1 | Crater, craters -- A circular depression +Phillips | -66.7 | 45.1 | 190.2 | Crater, craters -- A circular depression +Pickering | -33.9 | 132.8 | 115.0 | Crater, craters -- A circular depression +Playfair | -78.1 | 126.2 | 64.2 | Crater, craters -- A circular depression +Pollack | -7.9 | 334.8 | 96.0 | Crater, craters -- A circular depression +Porter | -50.8 | 113.9 | 105.0 | Crater, craters -- A circular depression +Poynting | 8.4 | 112.9 | 74.0 | Crater, craters -- A circular depression +Proctor | -48.0 | 330.5 | 168.2 | Crater, craters -- A circular depression +Ptolemaeus | -46.2 | 157.6 | 185.0 | Crater, craters -- A circular depression +Pulawy | -36.8 | 76.7 | 51.5 | Crater, craters -- A circular depression +Quenisset | 34.6 | 319.4 | 138.0 | Crater, craters -- A circular depression +Rabe | -43.9 | 325.1 | 108.0 | Crater, craters -- A circular depression +Radau | 17.1 | 4.8 | 114.5 | Crater, craters -- A circular depression +Rayleigh | -75.6 | 240.9 | 148.7 | Crater, craters -- A circular depression +Redi | -60.6 | 267.3 | 62.0 | Crater, craters -- A circular depression +Renaudot | 42.4 | 297.4 | 64.0 | Crater, craters -- A circular depression +Reuyl | -9.8 | 193.2 | 85.9 | Crater, craters -- A circular depression +Reykholt | 40.8 | 86.3 | 53.2 | Crater, craters -- A circular depression +Reynolds | -75.1 | 157.9 | 97.5 | Crater, craters -- A circular depression +Richardson | -72.6 | 180.4 | 95.9 | Crater, craters -- A circular depression +Ritchey | -28.8 | 51.0 | 79.0 | Crater, craters -- A circular depression +Roddenberry | -49.8 | 4.6 | 141.0 | Crater, craters -- A circular depression +Ross | -57.8 | 108.0 | 85.0 | Crater, craters -- A circular depression +Rossby | -47.9 | 192.2 | 82.5 | Crater, craters -- A circular depression +Rudaux | 38.3 | 309.1 | 107.0 | Crater, craters -- A circular depression +Russell | -54.9 | 347.6 | 139.7 | Crater, craters -- A circular depression +Rutherford | 19.2 | 10.7 | 110.5 | Crater, craters -- A circular depression +Sagan | 10.8 | 30.7 | 98.1 | Crater, craters -- A circular depression +Savich | -27.8 | 264.0 | 188.3 | Crater, craters -- A circular depression +Schaeberle | -24.7 | 309.9 | 160.0 | Crater, craters -- A circular depression +Schiaparelli | -2.7 | 343.3 | 471.0 | Crater, craters -- A circular depression +Schmidt | -72.3 | 78.1 | 212.5 | Crater, craters -- A circular depression +Schroeter | -1.9 | 304.4 | 292.0 | Crater, craters -- A circular depression +Sebec | -39.9 | 260.7 | 64.0 | Crater, craters -- A circular depression +Secchi | -58.3 | 258.1 | 234.0 | Crater, craters -- A circular depression +Semeykin | 41.8 | 351.4 | 76.0 | Crater, craters -- A circular depression +Sharonov | 27.3 | 58.6 | 102.0 | Crater, craters -- A circular depression +Shatskiy | -32.7 | 14.9 | 72.5 | Crater, craters -- A circular depression +Sklodowska | 33.7 | 2.9 | 124.0 | Crater, craters -- A circular depression +Slipher | -47.8 | 84.6 | 127.0 | Crater, craters -- A circular depression +Smith | -66.1 | 102.9 | 75.5 | Crater, craters -- A circular depression +South | -77.1 | 338.0 | 107.1 | Crater, craters -- A circular depression +Spallanzani | -58.3 | 273.7 | 72.5 | Crater, craters -- A circular depression +Stege | 3.8 | 59.6 | 77.5 | Crater, craters -- A circular depression +Steno | -68.0 | 115.6 | 106.9 | Crater, craters -- A circular depression +Stokes | 55.9 | 188.8 | 66.0 | Crater, craters -- A circular depression +Stoney | -69.8 | 138.6 | 171.0 | Crater, craters -- A circular depression +Suess | -67.1 | 178.6 | 79.2 | Crater, craters -- A circular depression +Sumgin | -37.0 | 48.8 | 85.0 | Crater, craters -- A circular depression +Sytinskaya | 42.7 | 53.1 | 93.2 | Crater, craters -- A circular depression +Tecolote | -24.8 | 106.9 | 51.0 | Crater, craters -- A circular depression +Teisserenc de | 0.4 | 315.0 | 119.0 | Crater, craters -- A circular depression +Terby | -28.3 | 285.9 | 174.0 | Crater, craters -- A circular depression +Tibrikot | 12.6 | 55.0 | 61.9 | Crater, craters -- A circular depression +Tikhonravov | 13.5 | 324.2 | 386.0 | Crater, craters -- A circular depression +Tikhov | -51.1 | 254.3 | 111.0 | Crater, craters -- A circular depression +Timbuktu | -5.7 | 37.6 | 73.0 | Crater, craters -- A circular depression +Timoshenko | 42.0 | 64.1 | 88.5 | Crater, craters -- A circular depression +Trouvelot | 16.2 | 13.1 | 154.7 | Crater, craters -- A circular depression +Trumpler | -61.8 | 150.8 | 78.0 | Crater, craters -- A circular depression +Tuscaloosa | 0.0 | 331.3 | 60.0 | Crater, craters -- A circular depression +Tuskegee | -2.9 | 36.2 | 66.7 | Crater, craters -- A circular depression +Tycho Brahe | -49.8 | 213.9 | 106.0 | Crater, craters -- A circular depression +Tyndall | 40.0 | 190.1 | 86.8 | Crater, craters -- A circular depression +Very | -49.6 | 177.1 | 114.0 | Crater, craters -- A circular depression +Vinogradov | -20.2 | 37.7 | 223.5 | Crater, craters -- A circular depression +Vinogradsky | -56.5 | 216.2 | 64.0 | Crater, craters -- A circular depression +Virrat | -31.1 | 103.0 | 53.6 | Crater, craters -- A circular depression +Vishniac | -76.7 | 276.1 | 86.1 | Crater, craters -- A circular depression +Voeykov | -32.4 | 76.2 | 76.0 | Crater, craters -- A circular depression +Vogel | -37.1 | 13.4 | 121.0 | Crater, craters -- A circular depression +Wahoo | 23.5 | 33.8 | 67.2 | Crater, craters -- A circular depression +Wallace | -52.9 | 249.4 | 173.0 | Crater, craters -- A circular depression +Wegener | -64.6 | 4.0 | 76.8 | Crater, craters -- A circular depression +Weinbaum | -65.7 | 245.5 | 89.4 | Crater, craters -- A circular depression +Wells | -60.2 | 237.9 | 103.0 | Crater, craters -- A circular depression +Wien | -10.8 | 220.4 | 120.4 | Crater, craters -- A circular depression +Williams | -18.7 | 164.3 | 126.0 | Crater, craters -- A circular depression +Wirtz | -48.6 | 26.0 | 129.0 | Crater, craters -- A circular depression +Wislicenus | -18.4 | 348.6 | 139.0 | Crater, craters -- A circular depression +Wright | -58.9 | 151.0 | 115.0 | Crater, craters -- A circular depression +Aesacus Dorsum | 37.2 | 206.9 | 264.0 | Dorsum, dorsa -- Ridge +Arcadia Dorsa | 55.0 | 140.0 | 1900.0 | Dorsum, dorsa -- Ridge +Arena Dorsum | 12.8 | 291.1 | 360.0 | Dorsum, dorsa -- Ridge +Auxo Dorsum | -56.0 | 41.8 | 70.0 | Dorsum, dorsa -- Ridge +Avernus Dorsa | -6.9 | 189.3 | 383.0 | Dorsum, dorsa -- Ridge +Cerberus Dorsa | -13.8 | 254.6 | 604.0 | Dorsum, dorsa -- Ridge +Charis Dorsum | -56.2 | 41.6 | 230.0 | Dorsum, dorsa -- Ridge +Cleia Dorsum | -55.5 | 45.7 | 78.0 | Dorsum, dorsa -- Ridge +Dorsa Argentea | -77.9 | 33.2 | 360.0 | Dorsum, dorsa -- Ridge +Dorsa Brevia | -71.3 | 297.1 | 670.0 | Dorsum, dorsa -- Ridge +Eumenides | 4.5 | 156.5 | 566.0 | Dorsum, dorsa -- Ridge +Felis Dorsa | -22.1 | 65.9 | 783.0 | Dorsum, dorsa -- Ridge +Gordii Dorsum | 4.5 | 144.1 | 493.5 | Dorsum, dorsa -- Ridge +Hegemone Dorsum | -55.1 | 45.2 | 155.0 | Dorsum, dorsa -- Ridge +Hesperia Dorsa | -23.4 | 246.9 | 817.2 | Dorsum, dorsa -- Ridge +Hyblaeus Dorsa | 11.0 | 231.0 | 875.0 | Dorsum, dorsa -- Ridge +Isidis Dorsa | 12.2 | 271.8 | 1100.0 | Dorsum, dorsa -- Ridge +Juventae Dorsa | -0.1 | 71.4 | 519.0 | Dorsum, dorsa -- Ridge +Melas Dorsa | -18.5 | 71.7 | 560.0 | Dorsum, dorsa -- Ridge +Nilus Dorsa | 20.5 | 79.3 | 272.0 | Dorsum, dorsa -- Ridge +Pasithea Dorsum | -55.5 | 41.9 | 250.0 | Dorsum, dorsa -- Ridge +Phaenna Dorsum | -54.3 | 43.1 | 151.0 | Dorsum, dorsa -- Ridge +Phlegra Dorsa | 23.0 | 184.0 | 3250.0 | Dorsum, dorsa -- Ridge +Sacra Dorsa | 9.9 | 66.3 | 1630.0 | Dorsum, dorsa -- Ridge +Sinai Dorsa | -13.6 | 79.6 | 473.0 | Dorsum, dorsa -- Ridge +Solis Dorsa | -23.3 | 79.8 | 878.0 | Dorsum, dorsa -- Ridge +Styx Dorsum | 31.1 | 208.2 | 83.0 | Dorsum, dorsa -- Ridge +Tyrrhena Dorsa | -24.0 | 244.4 | 762.7 | Dorsum, dorsa -- Ridge +Uranius Dorsum | 24.1 | 75.0 | 503.0 | Dorsum, dorsa -- Ridge +Xanthe Dorsa | 30.0 | 35.0 | 2700.0 | Dorsum, dorsa -- Ridge +Zea Dorsa | -48.9 | 279.5 | 265.0 | Dorsum, dorsa -- Ridge +Galaxias | 31.2 | 216.6 | 600.0 | Fluctus -- Flow terrain +Tantalus | 36.0 | 96.0 | 860.0 | Fluctus -- Flow terrain +Acheron Fossae | 37.6 | 135.8 | 718.0 | Fossa, fossae -- Long, narrow, shallow depression +Aganippe Fossa | -8.3 | 126.2 | 532.0 | Fossa, fossae -- Long, narrow, shallow depression +Alba Fossae | 54.2 | 104.8 | 2080.0 | Fossa, fossae -- Long, narrow, shallow depression +Albor Fossae | 18.2 | 209.3 | 131.0 | Fossa, fossae -- Long, narrow, shallow depression +Amenthes Fossae | 8.8 | 258.2 | 889.0 | Fossa, fossae -- Long, narrow, shallow depression +Calydon Fossa | -7.5 | 88.1 | 352.0 | Fossa, fossae -- Long, narrow, shallow depression +Ceraunius | 29.5 | 109.0 | 1137.0 | Fossa, fossae -- Long, narrow, shallow depression +Cerberus Fossae | 8.5 | 196.0 | 1215.0 | Fossa, fossae -- Long, narrow, shallow depression +Claritas Fossae | -31.5 | 104.1 | 2050.0 | Fossa, fossae -- Long, narrow, shallow depression +Coloe Fossae | 36.5 | 302.9 | 590.0 | Fossa, fossae -- Long, narrow, shallow depression +Coracis Fossae | -35.9 | 80.6 | 780.0 | Fossa, fossae -- Long, narrow, shallow depression +Cyane Fossae | 32.5 | 120.1 | 938.0 | Fossa, fossae -- Long, narrow, shallow depression +Echus Fossae | 2.9 | 76.9 | 400.0 | Fossa, fossae -- Long, narrow, shallow depression +Elysium Fossae | 24.8 | 213.7 | 1175.0 | Fossa, fossae -- Long, narrow, shallow depression +Erythraea Fossa | -27.5 | 31.0 | 152.0 | Fossa, fossae -- Long, narrow, shallow depression +Fortuna Fossae | 4.2 | 93.1 | 330.0 | Fossa, fossae -- Long, narrow, shallow depression +Galaxias Fossae | 36.6 | 218.2 | 532.0 | Fossa, fossae -- Long, narrow, shallow depression +Gigas Fossae | 3.2 | 129.8 | 191.0 | Fossa, fossae -- Long, narrow, shallow depression +Gordii Fossae | 15.0 | 127.6 | 339.0 | Fossa, fossae -- Long, narrow, shallow depression +Halex Fossae | 27.4 | 126.4 | 137.0 | Fossa, fossae -- Long, narrow, shallow depression +Hephaestus | 21.1 | 237.5 | 604.0 | Fossa, fossae -- Long, narrow, shallow depression +Hyblaeus Fossae | 21.4 | 222.7 | 400.0 | Fossa, fossae -- Long, narrow, shallow depression +Icaria Fossae | -46.4 | 123.8 | 2280.0 | Fossa, fossae -- Long, narrow, shallow depression +Ismeniae Fossae | 41.6 | 322.3 | 270.0 | Fossa, fossae -- Long, narrow, shallow depression +Jovis Fossae | 19.9 | 116.6 | 332.0 | Fossa, fossae -- Long, narrow, shallow depression +Labeatis Fossae | 25.5 | 84.1 | 1560.0 | Fossa, fossae -- Long, narrow, shallow depression +Mangala Fossa | -17.5 | 146.0 | 688.0 | Fossa, fossae -- Long, narrow, shallow depression +Mareotis Fossae | 44.0 | 75.3 | 1860.0 | Fossa, fossae -- Long, narrow, shallow depression +Medusae Fossae | -3.2 | 163.0 | 333.0 | Fossa, fossae -- Long, narrow, shallow depression +Melas Fossae | -26.8 | 72.3 | 600.0 | Fossa, fossae -- Long, narrow, shallow depression +Memnonia Fossae | -23.6 | 154.4 | 1597.0 | Fossa, fossae -- Long, narrow, shallow depression +Nectaris Fossae | -24.5 | 57.4 | 650.0 | Fossa, fossae -- Long, narrow, shallow depression +Nia Fossae | -14.9 | 72.3 | 384.0 | Fossa, fossae -- Long, narrow, shallow depression +Nili Fossae | 22.8 | 283.2 | 667.0 | Fossa, fossae -- Long, narrow, shallow depression +Nilokeras Fossa | 25.0 | 57.8 | 265.0 | Fossa, fossae -- Long, narrow, shallow depression +Noctis Fossae | -2.8 | 98.7 | 725.0 | Fossa, fossae -- Long, narrow, shallow depression +Oceanidum Fossa | -62.0 | 29.4 | 153.0 | Fossa, fossae -- Long, narrow, shallow depression +Olympica Fossae | 25.0 | 114.1 | 420.0 | Fossa, fossae -- Long, narrow, shallow depression +Oti Fossae | -9.3 | 116.8 | 370.0 | Fossa, fossae -- Long, narrow, shallow depression +Pavonis Fossae | 4.1 | 111.5 | 168.0 | Fossa, fossae -- Long, narrow, shallow depression +Pyramus Fossae | 51.0 | 294.2 | 270.0 | Fossa, fossae -- Long, narrow, shallow depression +Sacra Fossae | 21.7 | 68.5 | 950.0 | Fossa, fossae -- Long, narrow, shallow depression +Sirenum Fossae | -34.9 | 160.9 | 2735.0 | Fossa, fossae -- Long, narrow, shallow depression +Stygis Fossae | 26.9 | 210.3 | 370.0 | Fossa, fossae -- Long, narrow, shallow depression +Tanais Fossae | 39.2 | 86.6 | 165.5 | Fossa, fossae -- Long, narrow, shallow depression +Tantalus Fossae | 50.9 | 97.5 | 2400.0 | Fossa, fossae -- Long, narrow, shallow depression +Tempe Fossae | 40.2 | 71.4 | 2000.0 | Fossa, fossae -- Long, narrow, shallow depression +Thaumasia | -47.5 | 92.7 | 1028.0 | Fossa, fossae -- Long, narrow, shallow depression +Tithoniae | -3.5 | 82.0 | 820.0 | Fossa, fossae -- Long, narrow, shallow depression +Tractus Fossae | 26.0 | 101.4 | 390.0 | Fossa, fossae -- Long, narrow, shallow depression +Tyrrhena Fossae | -22.5 | 254.3 | 287.0 | Fossa, fossae -- Long, narrow, shallow depression +Ulysses Fossae | 10.2 | 123.4 | 851.4 | Fossa, fossae -- Long, narrow, shallow depression +Uranius Fossae | 25.7 | 90.1 | 394.0 | Fossa, fossae -- Long, narrow, shallow depression +Zephyrus Fossae | 24.2 | 216.3 | 295.0 | Fossa, fossae -- Long, narrow, shallow depression +Candor Labes | -4.8 | 76.2 | 130.0 | Labes -- Landslide +Ius Labes | -7.6 | 78.6 | 53.0 | Labes -- Landslide +Melas Labes | -8.6 | 71.7 | 90.0 | Labes -- Landslide +Ophir Labes | -11.1 | 68.5 | 89.0 | Labes -- Landslide +Adamas | 35.7 | 254.3 | 750.0 | Labyrinthus, labyrinthi -- Complex of intersecting valleys +Cydonia | 41.5 | 12.0 | 356.0 | Labyrinthus, labyrinthi -- Complex of intersecting valleys +Hyperboreus | 80.2 | 60.2 | 115.0 | Labyrinthus, labyrinthi -- Complex of intersecting valleys +Noctis | -7.0 | 102.2 | 1263.0 | Labyrinthus, labyrinthi -- Complex of intersecting valleys +Acidalia Mensa | 47.0 | 25.4 | 233.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Aeolis Mensae | -2.9 | 219.6 | 820.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Amazonis Mensa | -2.0 | 147.5 | 500.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Ausonia Mensa | -30.3 | 262.3 | 103.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Baetis Mensa | -5.2 | 72.6 | 187.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Candor Mensa | -6.3 | 73.6 | 120.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Capri Mensa | -14.0 | 47.4 | 275.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Cydonia Mensae | 34.0 | 13.0 | 800.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Deuteronilus | 43.9 | 337.4 | 937.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Eos Mensa | -11.0 | 42.2 | 390.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Hebes Mensa | -1.1 | 76.8 | 109.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Labeatis Mensa | 25.7 | 74.6 | 120.8 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Lunae Mensa | 24.2 | 62.6 | 117.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Nepenthes | 8.8 | 240.9 | 2170.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Nilokeras | 31.3 | 52.0 | 463.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Nilosyrtis | 35.0 | 292.1 | 705.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Nilus Mensae | 22.5 | 72.1 | 210.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Protonilus | 44.2 | 310.6 | 1050.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Sacra Mensa | 24.7 | 68.1 | 580.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Tempe Mensa | 28.1 | 71.7 | 58.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Zephyria Mensae | -11.5 | 187.9 | 330.0 | Mensa, mensae -- A flat-topped prominence with cliff-like edges +Anseris Mons | -30.1 | 273.4 | 58.0 | Mons, montes -- Mountain +Arsia Mons | -8.4 | 121.1 | 475.0 | Mons, montes -- Mountain +Ascraeus Mons | 11.9 | 104.5 | 460.0 | Mons, montes -- Mountain +Ausonia Montes | -27.7 | 261.2 | 158.0 | Mons, montes -- Mountain +Australe Montes | -80.3 | 345.9 | 387.0 | Mons, montes -- Mountain +Centauri Montes | -38.9 | 264.8 | 270.0 | Mons, montes -- Mountain +Chalce Montes | -54.0 | 37.9 | 95.0 | Mons, montes -- Mountain +Charitum Montes | -58.3 | 40.2 | 850.0 | Mons, montes -- Mountain +Coronae Montes | -34.9 | 273.6 | 236.0 | Mons, montes -- Mountain +Echus Montes | 8.2 | 78.0 | 395.0 | Mons, montes -- Mountain +Elysium Mons | 25.0 | 213.1 | 410.0 | Mons, montes -- Mountain +Erebus Montes | 36.0 | 175.0 | 785.0 | Mons, montes -- Mountain +Euripus Mons | -45.1 | 255.0 | 91.0 | Mons, montes -- Mountain +Geryon Montes | -7.8 | 82.0 | 359.0 | Mons, montes -- Mountain +Gonnus Mons | 41.6 | 91.0 | 57.0 | Mons, montes -- Mountain +Hellas Montes | -37.9 | 262.3 | 153.0 | Mons, montes -- Mountain +Hellespontus | -44.7 | 317.2 | 729.6 | Mons, montes -- Mountain +Hibes Montes | 3.7 | 188.7 | 137.0 | Mons, montes -- Mountain +Libya Montes | 2.8 | 271.1 | 1170.0 | Mons, montes -- Mountain +Nereidum Montes | -38.9 | 44.0 | 1130.0 | Mons, montes -- Mountain +Olympus Mons | 18.6 | 134.0 | 648.0 | Mons, montes -- Mountain +Pavonis Mons | 0.8 | 113.4 | 375.0 | Mons, montes -- Mountain +Phlegra Montes | 41.1 | 194.8 | 1352.0 | Mons, montes -- Mountain +Sisyphi Montes | -69.9 | 346.1 | 200.0 | Mons, montes -- Mountain +Tanaica Montes | 39.8 | 91.1 | 177.0 | Mons, montes -- Mountain +Tartarus Montes | 16.0 | 193.0 | 1070.0 | Mons, montes -- Mountain +Tharsis Montes | 1.2 | 112.5 | 1840.0 | Mons, montes -- Mountain +Tyrrhena Mons | -24.4 | 258.9 | 107.1 | Mons, montes -- Mountain +Alba Patera | 40.8 | 109.6 | 530.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Amphitrites | -59.0 | 299.1 | 135.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Apollinaris | -9.4 | 185.6 | 296.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Biblis Patera | 2.7 | 124.6 | 171.5 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Diacria Patera | 34.9 | 132.6 | 65.5 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Hadriaca Patera | -32.4 | 268.2 | 575.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Issedon Paterae | 38.6 | 90.5 | 58.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Malea Patera | -63.7 | 308.1 | 242.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Meroe Patera | 7.0 | 291.4 | 50.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Nili Patera | 9.0 | 293.0 | 70.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Orcus Patera | 14.3 | 181.5 | 375.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Peneus Patera | -58.1 | 307.5 | 133.6 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Pityusa Patera | -67.0 | 323.1 | 230.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Tyrrhena Patera | -21.6 | 253.5 | 473.4 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Ulysses Patera | 2.9 | 121.6 | 101.7 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Uranius Patera | 27.1 | 92.2 | 274.0 | Patera, paterae -- An irregular crater, or a complex one with scalloped edges +Aonia Planum | -58.0 | 79.0 | 650.0 | Planum, plana -- Plateau or high plain +Argentea Planum | -70.0 | 68.0 | 1500.0 | Planum, plana -- Plateau or high plain +Ascuris Planum | 40.7 | 80.8 | 500.0 | Planum, plana -- Plateau or high plain +Aurorae Planum | -10.5 | 49.2 | 600.0 | Planum, plana -- Plateau or high plain +Bosporos Planum | -34.5 | 64.9 | 700.0 | Planum, plana -- Plateau or high plain +Daedalia Planum | -22.0 | 128.0 | 1800.0 | Planum, plana -- Plateau or high plain +Hesperia Planum | -22.5 | 250.0 | 1700.0 | Planum, plana -- Plateau or high plain +Icaria Planum | -43.5 | 106.5 | 650.0 | Planum, plana -- Plateau or high plain +Lucus Planum | -4.0 | 178.0 | 864.0 | Planum, plana -- Plateau or high plain +Lunae Planum | 10.5 | 66.0 | 1800.0 | Planum, plana -- Plateau or high plain +Malea Planum | -65.0 | 295.0 | 900.0 | Planum, plana -- Plateau or high plain +Meridiani | 0.2 | 2.5 | 1100.0 | Planum, plana -- Plateau or high plain +Ophir Planum | -8.8 | 57.5 | 650.0 | Planum, plana -- Plateau or high plain +Parva Planum | -76.0 | 103.0 | 750.0 | Planum, plana -- Plateau or high plain +Planum Angustum | -79.8 | 83.5 | 200.0 | Planum, plana -- Plateau or high plain +Planum Australe | -84.0 | 200.0 | 1450.0 | Planum, plana -- Plateau or high plain +Planum Boreum | 88.0 | 345.0 | 1100.0 | Planum, plana -- Plateau or high plain +Planum Chronium | -60.0 | 220.0 | 550.0 | Planum, plana -- Plateau or high plain +Promethei | -79.0 | 270.0 | 850.0 | Planum, plana -- Plateau or high plain +Sinai Planum | -13.5 | 88.0 | 900.0 | Planum, plana -- Plateau or high plain +Sisyphi Planum | -70.0 | 355.0 | 1100.0 | Planum, plana -- Plateau or high plain +Solis Planum | -25.5 | 86.5 | 1700.0 | Planum, plana -- Plateau or high plain +Syria Planum | -13.2 | 103.9 | 740.0 | Planum, plana -- Plateau or high plain +Syrtis Major | 8.5 | 290.5 | 1350.0 | Planum, plana -- Plateau or high plain +Thaumasia | -24.7 | 64.3 | 650.0 | Planum, plana -- Plateau or high plain +Acidalia | 47.0 | 22.0 | 2300.0 | Planitia, planitiae -- Low plain +Amazonis | 25.0 | 164.0 | 2800.0 | Planitia, planitiae -- Low plain +Arcadia | 47.0 | 168.0 | 2200.0 | Planitia, planitiae -- Low plain +Argyre Planitia | -50.0 | 44.0 | 800.0 | Planitia, planitiae -- Low plain +Chryse Planitia | 27.0 | 40.0 | 1700.0 | Planitia, planitiae -- Low plain +Elysium | 2.0 | 205.0 | 3000.0 | Planitia, planitiae -- Low plain +Hellas Planitia | -43.0 | 290.0 | 2200.0 | Planitia, planitiae -- Low plain +Isidis Planitia | 13.0 | 273.0 | 1200.0 | Planitia, planitiae -- Low plain +Utopia Planitia | 50.0 | 242.0 | 3200.0 | Planitia, planitiae -- Low plain +Amenthes Rupes | 1.6 | 249.5 | 331.0 | Rupes -- Scarp +Argyre Rupes | -62.7 | 68.2 | 267.0 | Rupes -- Scarp +Arimanes Rupes | -9.7 | 147.9 | 181.0 | Rupes -- Scarp +Avernus Rupes | -9.6 | 187.1 | 212.0 | Rupes -- Scarp +Bosporos Rupes | -43.2 | 57.6 | 507.0 | Rupes -- Scarp +Chalcoporos | -55.7 | 339.5 | 401.0 | Rupes -- Scarp +Claritas Rupes | -26.0 | 105.4 | 924.0 | Rupes -- Scarp +Cydnus Rupes | 56.0 | 244.0 | 1600.0 | Rupes -- Scarp +Elysium Rupes | 25.4 | 212.0 | 130.0 | Rupes -- Scarp +Hephaestus | 22.0 | 243.0 | 1750.0 | Rupes -- Scarp +Morpheos Rupes | -36.4 | 234.5 | 353.0 | Rupes -- Scarp +Ogygis Rupes | -33.4 | 54.5 | 255.0 | Rupes -- Scarp +Olympus Rupes | 18.6 | 134.0 | 1800.0 | Rupes -- Scarp +Panchaia Rupes | 64.0 | 230.0 | 1500.0 | Rupes -- Scarp +Phison Rupes | 26.7 | 309.6 | 177.0 | Rupes -- Scarp +Pityusa Rupes | -64.4 | 330.6 | 390.0 | Rupes -- Scarp +Promethei Rupes | -75.5 | 269.4 | 1248.0 | Rupes -- Scarp +Rupes Tenuis | 81.0 | 65.0 | 185.0 | Rupes -- Scarp +Tartarus Rupes | -6.6 | 184.4 | 89.7 | Rupes -- Scarp +Thyles Rupes | -69.8 | 229.1 | 675.0 | Rupes -- Scarp +Ulyxis Rupes | -68.6 | 200.1 | 390.0 | Rupes -- Scarp +Utopia Rupes | 40.0 | 270.0 | 2550.0 | Rupes -- Scarp +Charybdis | -24.8 | 340.0 | 552.0 | Scopulus, scopuli -- Lobate or irregular scarp +Coronae | -33.8 | 295.2 | 253.5 | Scopulus, scopuli -- Lobate or irregular scarp +Eridania | -53.8 | 221.0 | 939.0 | Scopulus, scopuli -- Lobate or irregular scarp +Nilokeras | 31.9 | 56.2 | 765.0 | Scopulus, scopuli -- Lobate or irregular scarp +Oenotria | -11.1 | 283.1 | 1360.0 | Scopulus, scopuli -- Lobate or irregular scarp +Scylla Scopulus | -25.4 | 341.7 | 445.0 | Scopulus, scopuli -- Lobate or irregular scarp +Tartarus | -4.3 | 182.8 | 219.0 | Scopulus, scopuli -- Lobate or irregular scarp +Xanthe Scopulus | 19.5 | 52.6 | 57.0 | Scopulus, scopuli -- Lobate or irregular scarp +Amazonis Sulci | -2.8 | 145.4 | 250.0 | Sulcus, sulci -- Subparallel furrows and ridges +Apollinaris | -11.5 | 182.6 | 178.0 | Sulcus, sulci -- Subparallel furrows and ridges +Arsia Sulci | -6.1 | 128.9 | 475.0 | Sulcus, sulci -- Subparallel furrows and ridges +Ascraeus Sulci | 12.1 | 108.8 | 102.0 | Sulcus, sulci -- Subparallel furrows and ridges +Cyane Sulci | 25.7 | 128.7 | 340.0 | Sulcus, sulci -- Subparallel furrows and ridges +Gigas Sulci | 10.0 | 127.8 | 398.0 | Sulcus, sulci -- Subparallel furrows and ridges +Lycus Sulci | 24.6 | 141.1 | 1350.0 | Sulcus, sulci -- Subparallel furrows and ridges +Medusae Sulci | -5.0 | 160.1 | 190.0 | Sulcus, sulci -- Subparallel furrows and ridges +Memnonia Sulci | -6.8 | 175.3 | 450.0 | Sulcus, sulci -- Subparallel furrows and ridges +Pavonis Sulci | 4.0 | 116.5 | 429.0 | Sulcus, sulci -- Subparallel furrows and ridges +Sacra Sulci | 22.4 | 74.7 | 900.0 | Sulcus, sulci -- Subparallel furrows and ridges +Sulci Gordii | 18.9 | 125.5 | 400.0 | Sulcus, sulci -- Subparallel furrows and ridges +Aonia Terra | -62.0 | 100.0 | 4000.0 | Terra, terrae -- Extensive land mass +Arabia Terra | 23.0 | 355.0 | 5100.0 | Terra, terrae -- Extensive land mass +Margaritifer | -5.0 | 25.0 | 2600.0 | Terra, terrae -- Extensive land mass +Noachis Terra | -45.0 | 350.0 | 4800.0 | Terra, terrae -- Extensive land mass +Promethei Terra | -58.0 | 260.0 | 3300.0 | Terra, terrae -- Extensive land mass +Tempe Terra | 40.0 | 71.0 | 2573.0 | Terra, terrae -- Extensive land mass +Terra Cimmeria | -35.0 | 215.0 | 5400.0 | Terra, terrae -- Extensive land mass +Terra Sabaea | 2.0 | 318.0 | 4700.0 | Terra, terrae -- Extensive land mass +Terra Sirenum | -40.0 | 150.0 | 3900.0 | Terra, terrae -- Extensive land mass +Tyrrhena Terra | -15.0 | 270.0 | 2300.0 | Terra, terrae -- Extensive land mass +Xanthe Terra | 3.0 | 48.0 | 2465.0 | Terra, terrae -- Extensive land mass +Albor Tholus | 19.0 | 209.6 | 170.0 | Tholus, tholi -- Small domical mountain or hill +Ceraunius | 24.2 | 97.4 | 130.0 | Tholus, tholi -- Small domical mountain or hill +Hecates Tholus | 32.4 | 209.8 | 183.0 | Tholus, tholi -- Small domical mountain or hill +Issedon Tholus | 36.3 | 95.0 | 52.0 | Tholus, tholi -- Small domical mountain or hill +Jovis Tholus | 18.4 | 117.5 | 58.0 | Tholus, tholi -- Small domical mountain or hill +Scandia Tholi | 74.0 | 162.0 | 480.0 | Tholus, tholi -- Small domical mountain or hill +Tharsis Tholus | 13.5 | 90.8 | 158.0 | Tholus, tholi -- Small domical mountain or hill +Uranius Tholus | 26.4 | 97.7 | 62.0 | Tholus, tholi -- Small domical mountain or hill +Abalos Undae | 78.4 | 88.2 | 455.0 | Undae -- Dunes +Hyperboreae | 81.9 | 48.6 | 500.0 | Undae -- Dunes +Olympia Undae | 81.5 | 180.0 | 1100.0 | Undae -- Dunes +Abus Vallis | -5.6 | 147.3 | 58.0 | Vallis, valles -- Valley +Allegheny | -9.2 | 54.0 | 200.0 | Vallis, valles -- Valley +Al-Qahira | -18.4 | 197.5 | 555.0 | Vallis, valles -- Valley +Apsus Vallis | 35.1 | 225.0 | 120.0 | Vallis, valles -- Valley +Arda Valles | -20.8 | 32.3 | 186.0 | Vallis, valles -- Valley +Ares Vallis | 10.4 | 25.8 | 1700.0 | Vallis, valles -- Valley +Arnus Vallis | 14.1 | 289.5 | 280.0 | Vallis, valles -- Valley +Athabasca | 8.6 | 205.0 | 285.0 | Vallis, valles -- Valley +Auqakuh Vallis | 30.4 | 299.9 | 312.0 | Vallis, valles -- Valley +Axius Valles | -56.0 | 289.9 | 349.0 | Vallis, valles -- Valley +Bahram Vallis | 20.7 | 57.5 | 302.0 | Vallis, valles -- Valley +Brazos Valles | -6.3 | 341.1 | 458.0 | Vallis, valles -- Valley +Buvinda Vallis | 33.4 | 208.1 | 119.6 | Vallis, valles -- Valley +Chico Valles | -67.0 | 153.5 | 450.0 | Vallis, valles -- Valley +Clanis Valles | 33.5 | 301.6 | 58.0 | Vallis, valles -- Valley +Clasia Vallis | 34.1 | 303.1 | 125.0 | Vallis, valles -- Valley +Clota Vallis | -25.8 | 20.6 | 112.0 | Vallis, valles -- Valley +Cusus Valles | 14.5 | 309.5 | 249.0 | Vallis, valles -- Valley +Dao Vallis | -38.7 | 272.1 | 816.0 | Vallis, valles -- Valley +Dittaino Valles | -1.5 | 67.0 | 138.0 | Vallis, valles -- Valley +Doanus Vallis | -63.3 | 25.6 | 131.0 | Vallis, valles -- Valley +Drava Valles | -49.0 | 193.7 | 150.0 | Vallis, valles -- Valley +Drilon Vallis | 7.3 | 52.4 | 94.0 | Vallis, valles -- Valley +Durius Valles | -17.6 | 187.9 | 223.0 | Vallis, valles -- Valley +Dzigai Vallis | -58.8 | 36.6 | 326.0 | Vallis, valles -- Valley +Elaver Vallis | -9.5 | 49.5 | 160.0 | Vallis, valles -- Valley +Enipeus Vallis | 37.0 | 93.1 | 357.0 | Vallis, valles -- Valley +Evros Vallis | -12.7 | 346.1 | 335.0 | Vallis, valles -- Valley +Frento Vallis | -50.3 | 14.5 | 277.0 | Vallis, valles -- Valley +Granicus Valles | 30.0 | 229.0 | 750.0 | Vallis, valles -- Valley +Harmakhis | -40.8 | 269.6 | 475.0 | Vallis, valles -- Valley +Hebrus Valles | 20.2 | 233.4 | 317.0 | Vallis, valles -- Valley +Her Desher | -25.4 | 48.0 | 107.0 | Vallis, valles -- Valley +Himera Valles | -21.6 | 22.8 | 160.0 | Vallis, valles -- Valley +Hrad Vallis | 38.7 | 224.7 | 825.0 | Vallis, valles -- Valley +Huo Hsing | 30.5 | 293.4 | 318.0 | Vallis, valles -- Valley +Hypanis Valles | 9.6 | 46.7 | 231.0 | Vallis, valles -- Valley +Iberus Vallis | 21.5 | 208.0 | 80.2 | Vallis, valles -- Valley +Indus Vallis | 19.3 | 321.3 | 307.0 | Vallis, valles -- Valley +Ituxi Vallis | 25.4 | 207.0 | 62.0 | Vallis, valles -- Valley +Kasei Valles | 24.6 | 65.0 | 1780.0 | Vallis, valles -- Valley +Labou Vallis | -8.7 | 154.5 | 222.0 | Vallis, valles -- Valley +Ladon Valles | -22.6 | 28.7 | 278.0 | Vallis, valles -- Valley +Licus Vallis | -2.9 | 233.9 | 219.1 | Vallis, valles -- Valley +Liris Valles | -10.7 | 302.1 | 613.0 | Vallis, valles -- Valley +Lobo Vallis | 27.2 | 61.2 | 102.0 | Vallis, valles -- Valley +Locras Valles | 8.7 | 312.3 | 314.0 | Vallis, valles -- Valley +Loire Valles | -18.3 | 16.7 | 720.0 | Vallis, valles -- Valley +Louros Valles | -8.5 | 82.0 | 517.0 | Vallis, valles -- Valley +Ma'adim Vallis | -21.8 | 182.7 | 825.0 | Vallis, valles -- Valley +Mad Vallis | -56.5 | 283.9 | 524.0 | Vallis, valles -- Valley +Maja Valles | 12.6 | 58.3 | 1516.0 | Vallis, valles -- Valley +Mamers Valles | 40.3 | 342.2 | 1020.0 | Vallis, valles -- Valley +Mangala Valles | -11.6 | 151.0 | 828.0 | Vallis, valles -- Valley +Marte Vallis | 15.0 | 176.5 | 1185.0 | Vallis, valles -- Valley +Matrona Vallis | -7.7 | 183.9 | 51.0 | Vallis, valles -- Valley +Maumee Valles | 19.7 | 53.2 | 350.0 | Vallis, valles -- Valley +Mawrth Vallis | 22.6 | 16.5 | 636.0 | Vallis, valles -- Valley +Minio Vallis | -4.3 | 151.8 | 88.0 | Vallis, valles -- Valley +Mosa Vallis | -14.9 | 337.8 | 171.0 | Vallis, valles -- Valley +Naktong Vallis | 5.3 | 327.1 | 494.0 | Vallis, valles -- Valley +Nanedi Valles | 4.9 | 49.0 | 508.0 | Vallis, valles -- Valley +Naro Vallis | -4.0 | 299.4 | 393.0 | Vallis, valles -- Valley +Nia Vallis | -54.1 | 34.7 | 133.0 | Vallis, valles -- Valley +Nicer Vallis | -7.3 | 158.2 | 54.0 | Vallis, valles -- Valley +Niger Vallis | -35.4 | 267.8 | 333.0 | Vallis, valles -- Valley +Nirgal Vallis | -28.4 | 42.0 | 496.0 | Vallis, valles -- Valley +Ochus Valles | 7.2 | 45.1 | 104.0 | Vallis, valles -- Valley +Oltis Valles | -23.9 | 21.7 | 173.0 | Vallis, valles -- Valley +Osuga Valles | -15.3 | 38.6 | 185.0 | Vallis, valles -- Valley +Pallacopas | -55.3 | 21.0 | 660.0 | Vallis, valles -- Valley +Patapsco Vallis | 24.0 | 207.5 | 153.0 | Vallis, valles -- Valley +Protva Valles | -29.2 | 60.6 | 260.0 | Vallis, valles -- Valley +Ravi Vallis | -0.2 | 40.7 | 205.5 | Vallis, valles -- Valley +Ravius Valles | 46.5 | 111.3 | 233.0 | Vallis, valles -- Valley +Reull Vallis | -42.6 | 255.9 | 945.0 | Vallis, valles -- Valley +Rhabon Valles | 21.4 | 91.5 | 247.0 | Vallis, valles -- Valley +Rubicon Valles | 45.0 | 117.0 | 240.0 | Vallis, valles -- Valley +Sabis Vallis | -5.3 | 152.5 | 206.0 | Vallis, valles -- Valley +Sabrina Vallis | 11.2 | 49.0 | 237.0 | Vallis, valles -- Valley +Samara Valles | -25.1 | 19.1 | 615.0 | Vallis, valles -- Valley +Scamander | 16.0 | 331.5 | 204.0 | Vallis, valles -- Valley +Sepik Vallis | -0.9 | 65.8 | 56.0 | Vallis, valles -- Valley +Shalbatana | 7.8 | 42.1 | 963.0 | Vallis, valles -- Valley +Simud Vallis | 10.2 | 37.5 | 775.0 | Vallis, valles -- Valley +Stura Vallis | 22.9 | 217.6 | 75.0 | Vallis, valles -- Valley +Surinda Valles | -29.2 | 35.1 | 95.0 | Vallis, valles -- Valley +Surius Vallis | -61.8 | 48.4 | 570.0 | Vallis, valles -- Valley +Tader Valles | -49.1 | 152.5 | 200.0 | Vallis, valles -- Valley +Tagus Valles | -6.8 | 245.6 | 155.4 | Vallis, valles -- Valley +Teviot Vallis | -43.7 | 257.9 | 140.0 | Vallis, valles -- Valley +Tinjar Valles | 38.0 | 235.8 | 425.0 | Vallis, valles -- Valley +Tinto Vallis | -4.0 | 248.6 | 146.5 | Vallis, valles -- Valley +Tisia Valles | -11.9 | 314.3 | 399.0 | Vallis, valles -- Valley +Tiu Valles | 15.9 | 35.7 | 1720.0 | Vallis, valles -- Valley +Trebia Valles | 32.4 | 210.0 | 183.0 | Vallis, valles -- Valley +Tyras Vallis | 8.4 | 50.2 | 68.0 | Vallis, valles -- Valley +Uzboi Vallis | -29.8 | 37.1 | 366.0 | Vallis, valles -- Valley +Valles | -13.9 | 59.2 | 3769.0 | Vallis, valles -- Valley +Varus Valles | -8.7 | 156.2 | 92.0 | Vallis, valles -- Valley +Vedra Valles | 19.4 | 55.6 | 115.0 | Vallis, valles -- Valley +Verde Vallis | -0.5 | 330.2 | 95.0 | Vallis, valles -- Valley +Vichada Valles | -19.6 | 271.9 | 430.0 | Vallis, valles -- Valley +Vistula Valles | 13.7 | 51.9 | 190.0 | Vallis, valles -- Valley +Warrego Valles | -42.2 | 93.0 | 188.0 | Vallis, valles -- Valley +Vastitas | 67.5 | 180.0 | 4100.0 | Vastitas, vastitates -- Extensive plain + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: mars_db,v $ $Date: 2012/08/17 01:57:20 $ $Revision: 1.12 $ $Name: $ diff --git a/GUI/xephem/auxil/marsmap.jpg b/GUI/xephem/auxil/marsmap.jpg new file mode 100644 index 0000000..552b313 Binary files /dev/null and b/GUI/xephem/auxil/marsmap.jpg differ diff --git a/GUI/xephem/auxil/moon.fts b/GUI/xephem/auxil/moon.fts new file mode 100644 index 0000000..8f4c129 Binary files /dev/null and b/GUI/xephem/auxil/moon.fts differ diff --git a/GUI/xephem/auxil/mpcorb2edb.pl b/GUI/xephem/auxil/mpcorb2edb.pl new file mode 100755 index 0000000..39d8f46 --- /dev/null +++ b/GUI/xephem/auxil/mpcorb2edb.pl @@ -0,0 +1,265 @@ +#!/usr/bin/perl +# convert MPCORB.DAT to 2 .edb files. +# Usage: [-f] +# if -f then use ftp to get the script from harvard, else read it from stdin. +# is a prefix used in naming the generated .edb files. +# Two files are created: +# .edb contains only those asteroids which might ever be brighter +# than $dimmag (set below); +# _dim.edb contains the remaining asteroids. +# +# mpcorb.dat is a service of the Minor Planet Center, +# http://cfa-www.harvard.edu/cfa/ps/mpc.html. +# +# Copyright (c) 2000 Elwood Downey +# 16 Mar 1999: first draft +# 17 Mar 1999: change output filename +# 4 Apr 2000: update arg handling and support new MPC file format. +# 6 Oct 2000: add -f +# 30 Jan 2003: add XCN. +# 24 Sep 2004: only remove files if downloaded fresh +# 1 Nov 2012: change from ftp to curl for better error handling. +# 4 Jul 2014: change download site + +# grab RCS version +my $ver = '$Revision: 1.3 $'; +$ver =~ s/\$//g; +my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst, $me); +my $XCN=<$brtfn" or die "Can not create $brtfn\n"; +$dimfn = "$fnbase"."_dim.edb";# name of file for dim asteroids +open DIM, ">$dimfn" or die "Can not create $dimfn\n"; +print "Creating $brtfn and $dimfn..\n"; + +# build some common boilerplate +($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime; +$year += 1900; +$mon += 1; +$from = "# Data is from ftp://cfa-ftp.harvard.edu/pub/MPCORB/MPCORB.DAT\n"; +$what = "# Generated by mpcorb2edb.pl $ver, (c) 2000 Elwood Downey\n"; +$when = "# Processed $year-$mon-$mday $hour:$min:$sec UTC\n"; + +# add boilerplate to each file +print BRT "# Asteroids ever brighter than $dimmag.\n"; +print BRT $from; +print BRT $what; +print BRT $when; +print BRT $XCN; + + +print DIM "# Asteroids never brighter than $dimmag.\n"; +print DIM $from; +print DIM $what; +print DIM $when; +print DIM $XCN; +# process each mpcorb.dat entry +while (<$srcfd>) { + chomp(); + if (/^-----------/) { + $sawstart = 1; + next; + } + next unless ($sawstart); + + # build the name + $name = &s(167, &min(length(),194)); + $name =~ s/[\(\)]//g; + $name =~ s/^ *//; + $name =~ s/ *$//; + next if ($name eq ""); + + # gather the orbital params + $i = &s(60,68) + 0; + $O = &s(49,57) + 0; + $o = &s(38,46) + 0; + $a = &s(93,103) + 0; + $e = &s(71,79) + 0; + $M = &s(27,35) + 0; + $H = &s(9,13) + 0; + $H = 100 if ($H == 0); # beware blank field + $G = &s(15,19) + 0; + + $cent = &s(21,21); + $TY = &s(22,23) + 0; + $TY += 1800 if ($cent =~ /I/i); + $TY += 1900 if ($cent =~ /J/i); + $TY += 2000 if ($cent =~ /K/i); + $TM = &mpcdecode (&s(24,24)) + 0; + $TD = &mpcdecode (&s(25,25)) + 0; + + # decide whether it's ever bright + $per = $a*(1 - $e); + $aph = $a*(1 + $e); + if ($per < 1.1 && $aph > .9) { + $fd = BRT; # might be in the back yard some day :-) + } else { + $maxmag = $H + 5*&log10($per*&absv($per-1)); + $fd = $maxmag > $dimmag ? DIM : BRT; + } + + # print + print $fd "$name"; + print $fd ",e,$i,$O,$o,$a,0,$e,$M,$TM/$TD/$TY,2000.0,$H,$G\n"; +} + +# remove fetched files, if new +if (defined($fetchok)) { + unlink $MPCFILE; + unlink $MPCZIPFILE; +} + +print "Done\n"; +exit 0; + +# like substr($_,first,last), but one-based. +sub s +{ + substr ($_, $_[0]-1, $_[1]-$_[0]+1); +} + +# return log base 10 +sub log10 +{ + .43429*log($_[0]); +} + +# return absolute value +sub absv +{ + $_[0] < 0 ? -$_[0] : $_[0]; +} + +# return decoded value +sub mpcdecode +{ + my $x = $_[0]; + $x =~ /\d/ ? $x : sprintf "%d", 10 + ord ($x) - ord ("A"); +} + +# return min of two values +sub min +{ + $_[0] < $_[1] ? $_[0] : $_[1]; +} + +# print usage message then die +sub usage +{ + my $base = $0; + $base =~ s#.*/##; + print "Usage: $base [-f] \n"; + print "$ver\n"; + print "Purpose: convert $MPCFILE to 2 .edb files.\n"; + print "Options:\n"; + print " -f: first $MPCFILE from $MPCSITE, else read from stdin\n"; + print "Creates two files:\n"; + print " .edb: all asteroids ever brighter than $dimmag\n"; + print " _dim.edb: all asteroids never brighter than $dimmag\n"; + + exit 1; +} + +# get and unzip the data +sub fetch +{ + # transfer + print "Getting $MPCFTPDIR/$MPCZIPFILE from $MPCSITE...\n"; + $cmd = "curl -connect-timeout 10 -s -u 'anonymous:xephem\@clearskyinstitute.com' $MPCSITE/$MPCFTPDIR/$MPCZIPFILE > $MPCZIPFILE"; + print "$cmd\n"; + !system "$cmd" or exit(1); + + # extract into current dir + print "Decompressing $MPCZIPFILE...\n"; + unlink $MPCFILE; # avoid unzip asking OK to overwrite + !system "gunzip $MPCZIPFILE" or die "$MPCZIPFILE: gunzip failed\n"; + -s $MPCFILE or die "$MPCFILE: failed to create from unzip $MPCZIPFILE\n"; + + # flag + $fetchok = 1; +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: mpcorb2edb.pl,v $ $Date: 2014/07/11 02:46:32 $ $Revision: 1.3 $ $Name: $ diff --git a/GUI/xephem/auxil/nearth.gif b/GUI/xephem/auxil/nearth.gif new file mode 100644 index 0000000..18cc435 Binary files /dev/null and b/GUI/xephem/auxil/nearth.gif differ diff --git a/GUI/xephem/auxil/sample.hzn b/GUI/xephem/auxil/sample.hzn new file mode 100644 index 0000000..ad34781 --- /dev/null +++ b/GUI/xephem/auxil/sample.hzn @@ -0,0 +1,364 @@ +# This is a sample of a horizon profile. +# The format is a list of az alt, one per line, separated by spaces or tabs. +# Entries need not be evenly spaced or even sorted in any way. +# Lines of any other form (such as this one) are ignored. +1 24.4 +2 24.5 +3 31 +4 31 +5 31 +6 31 +7 26.1 +8 26.2 +9 26.3 +10 26.4 +11 26.5 +12 29.6 +13 29.7 +14 29.8 +15 29.9 +16 30.0 +17 30.1 +18 30.2 +19 30.3 +20 30.4 +21 30.5 +22 30.6 +23 30.7 +24 30.8 +25 30.9 +26 31.0 +27 31.1 +28 31.2 +29 31.3 +30 31.4 +31 31.5 +32 31.6 +33 31.7 +34 31.8 +35 31.9 +36 32.0 +37 32.1 +38 32.2 +39 32.3 +40 32.4 +41 32.6 +42 32.8 +43 33 +44 33.1 +45 33.2 +46 33.4 +47 33.6 +48 33.8 +49 30 +50 30.2 +51 30.4 +52 30.6 +53 30.8 +54 30.9 +55 31 +56 34 +57 35 +58 35 +59 36 +60 36 +61 37 +62 37 +63 38 +64 38 +65 39 +66 39 +67 40 +68 40 +69 41 +70 41 +71 42 +72 42 +73 43 +74 43 +75 44 +76 44 +77 45 +78 45 +79 46 +80 46 +81 47 +82 47 +83 48 +84 48 +85 49 +86 49 +87 50 +88 52 +89 52 +90 56 +91 60 +92 64 +93 68 +94 71 +95 73 +96 75 +97 77 +98 78 +99 78 +100 79 +101 79 +102 79 +103 79 +104 80 +105 80 +106 80 +107 81 +108 81 +109 81 +110 80 +111 80 +112 80 +113 80 +114 79 +115 79 +116 79 +117 79 +118 79 +119 78 +120 78 +121 78 +122 78 +123 77 +124 77 +125 76 +126 76 +127 75 +128 75 +129 74 +130 74 +131 73 +132 73 +133 72 +134 72 +135 71 +136 70 +137 68 +138 61 +139 52 +140 48 +141 46 +142 45 +143 41 +144 40 +145 39 +146 38 +147 37 +148 36 +149 35 +150 34 +151 33 +152 31 +153 30 +154 29 +155 28 +156 27 +157 26 +158 26 +159 23 +160 22 +161 22 +162 21 +163 21 +164 20 +165 20 +166 19 +167 19 +168 19 +169 18 +170 18 +171 17 +172 17 +173 16 +174 16 +175 16 +176 17 +177 17 +178 19 +179 19 +180 22 +181 25 +182 22 +183 22 +184 19 +185 16 +186 14 +187 12 +188 11 +189 11 +190 13 +191 15 +192 17 +193 15 +194 15 +195 17 +196 19 +197 21 +198 23 +199 24 +200 25 +201 26 +202 27 +203 28 +204 29 +205 39 +206 39 +207 49 +208 49 +209 53 +210 53 +211 55 +212 55 +213 56 +214 56 +215 57 +216 59 +217 60 +218 61 +219 61 +220 61 +221 61 +222 61 +223 61 +224 60 +225 60 +226 60 +227 59 +228 59 +229 57 +230 57 +231 56 +232 55 +233 54 +234 53 +235 52 +236 51 +237 50 +238 49 +239 48 +240 47 +241 46 +242 45 +243 44 +244 43 +245 41 +246 39 +247 37 +248 35 +249 34 +250 34 +251 33 +252 33 +253 32 +254 32 +255 31 +256 30 +257 29 +258 28 +259 27 +260 26 +261 25 +262 24 +263 23 +264 22 +265 21 +266 20 +267 19 +268 17 +269 15 +270 13 +271 11 +272 9 +273 9 +274 9 +275 9 +276 10 +277 13 +278 16 +279 13 +280 10 +281 10 +282 10 +283 10 +284 12 +285 14 +286 15 +287 15 +288 15 +289 15 +290 15 +291 12 +292 13 +293 14 +294 15 +295 16 +296 17 +297 18 +298 19 +299 20 +300 21 +301 20 +302 19 +303 18 +304 17 +305 16 +306 15 +307 14 +308 13. +309 19.5 +310 19.7 +311 19.9 +312 20.1 +313 20.3 +314 20.5 +315 20.7 +316 20.9 +317 21.1 +318 21.3 +319 21.5 +320 21.7 +321 21.9 +322 22.1 +323 22.3 +324 22.5 +325 20 +326 20.6 +327 20.7 +328 20.8 +329 20.9 +330 21.0 +331 24.1 +332 24.2 +333 24.3 +334 24.4 +335 24.5 +336 24.6 +337 24.7 +338 24.8 +339 24.9 +340 25.0 +341 25.1 +342 25.2 +343 25.3 +344 25.4 +345 25.5 +346 25.6 +347 25.7 +348 25.8 +349 25.9 +350 26.0 +351 26.1 +352 26.2 +353 26.3 +354 26.4 +355 26.5 +356 26.6 +357 25.0 +358 24.1 +359 24.2 +360 24.3 diff --git a/GUI/xephem/auxil/saturn00.gif b/GUI/xephem/auxil/saturn00.gif new file mode 100644 index 0000000..418e572 Binary files /dev/null and b/GUI/xephem/auxil/saturn00.gif differ diff --git a/GUI/xephem/auxil/saturn04.gif b/GUI/xephem/auxil/saturn04.gif new file mode 100644 index 0000000..7f8b89a Binary files /dev/null and b/GUI/xephem/auxil/saturn04.gif differ diff --git a/GUI/xephem/auxil/saturn10.gif b/GUI/xephem/auxil/saturn10.gif new file mode 100644 index 0000000..2940151 Binary files /dev/null and b/GUI/xephem/auxil/saturn10.gif differ diff --git a/GUI/xephem/auxil/saturn16.gif b/GUI/xephem/auxil/saturn16.gif new file mode 100644 index 0000000..feacc93 Binary files /dev/null and b/GUI/xephem/auxil/saturn16.gif differ diff --git a/GUI/xephem/auxil/saturn20.gif b/GUI/xephem/auxil/saturn20.gif new file mode 100644 index 0000000..583723a Binary files /dev/null and b/GUI/xephem/auxil/saturn20.gif differ diff --git a/GUI/xephem/auxil/saturn24.gif b/GUI/xephem/auxil/saturn24.gif new file mode 100644 index 0000000..f0ff233 Binary files /dev/null and b/GUI/xephem/auxil/saturn24.gif differ diff --git a/GUI/xephem/auxil/saturne.1020 b/GUI/xephem/auxil/saturne.1020 new file mode 100644 index 0000000..1915d12 --- /dev/null +++ b/GUI/xephem/auxil/saturne.1020 @@ -0,0 +1,522 @@ + 6 8 2 76 117 156 197 242 300 484 6.6670 4.5860 3.3280 2.2960 1.3910 .3940 .3940 .0790 55.0100.0105.0100.0 90.0 70.0 22.0105.0 523 2455197.500 2010 +1 220100101201002252455197.3 -.3304500000D+01 .9176000000D-01 .1845030000D+03 .4687000000D-01 .2502000000D-02 .1694300000D+01 -.8559870000D+00 -.7633000000D+00 -.5125100000D+01 -.4645600000D+01 .2010000000D-01 .8780000000D-02 .1798080000D+02 .9555000000D-01 .7080000000D-03 .1854000000D+00 -.1876130000D+00 -.2481000000D+00 -.3179000000D+01 -.4028100000D+01 .4610800000D+01 .1233000000D-01 .1849099000D+03 .1114500000D+00 .7440000000D-03 .1772300000D+01 -.5570261000D+01 -.3875400000D+01 -.4500100000D+01 -.3136600000D+01 +1 320100225201004212455252.3 .1985200000D+01 .6318000000D-01 .1843834000D+03 .2612300000D+00 .1458000000D-02 .1659900000D+01 -.4841713000D+01 -.3316400000D+01 -.3396000000D+00 -.1040700000D+01 .5290000000D+00 .1080000000D-02 .2115030000D+02 .2686000000D-01 .5510000000D-03 .1909000000D+00 -.4240152000D+01 -.5364200000D+01 -.1580500000D+01 -.5262000000D+00 .5179800000D+01 -.7021000000D-01 .1853032000D+03 .3229600000D+00 .2459000000D-02 .1694800000D+01 -.3269793000D+01 -.1625400000D+01 -.4623200000D+01 -.5750600000D+01 +1 420100421201006152455307.3 .5516300000D+01 -.2564000000D-01 .1844628000D+03 .8421000000D-01 .2666000000D-02 .1753900000D+01 -.2525523000D+01 -.1506500000D+01 -.4380800000D+01 -.3781800000D+01 .5947000000D+00 -.9340000000D-02 .2039450000D+02 .4453000000D-01 .6970000000D-03 .1830000000D+00 -.2004477000D+01 -.5278400000D+01 -.2044000000D+00 -.3204900000D+01 .1039300000D+01 -.9017000000D-01 .1860407000D+03 .1541200000D+00 .3626000000D-02 .1661300000D+01 -.9543640000D+00 -.5101000000D+01 -.2080400000D+01 -.2184600000D+01 +1 520100615201008092455362.3 .3859500000D+01 -.7923000000D-01 .1846067000D+03 .2556300000D+00 .1675000000D-02 .1711000000D+01 -.2829150000D+00 -.1682600000D+01 -.2472700000D+01 -.3231000000D+00 .3380000000D-01 -.8940000000D-02 .1770360000D+02 .9434000000D-01 .4070000000D-03 .1604000000D+00 -.5894648000D+01 -.3767400000D+01 -.5849200000D+01 -.5723200000D+01 -.4009200000D+01 -.2665000000D-01 .1861492000D+03 .2964900000D+00 .7840000000D-03 .1622200000D+01 -.4990995000D+01 -.5017000000D+00 -.5553500000D+01 -.5046700000D+01 +1 620100809201010032455417.3 -.6276000000D+00 -.7180000000D-01 .1845316000D+03 .4113400000D+00 .1566000000D-02 .1687800000D+01 -.4401694000D+01 -.5806900000D+01 -.1179700000D+01 -.3187900000D+01 -.4652000000D+00 -.6800000000D-03 .1683300000D+02 .6389000000D-01 .8670000000D-03 .1668000000D+00 -.3367805000D+01 -.2157600000D+01 -.4171500000D+01 -.2006500000D+01 -.5448300000D+01 .3995000000D-01 .1853855000D+03 .4894100000D+00 .1635000000D-02 .1683700000D+01 -.2823457000D+01 -.4475400000D+01 -.1183600000D+01 -.1582800000D+01 +1 720101003201011272455472.3 -.4677200000D+01 -.1217000000D-01 .1848536000D+03 .3170100000D+00 .3300000000D-03 .1702900000D+01 -.2265106000D+01 -.3790900000D+01 -.5776100000D+01 -.6046100000D+01 -.5058000000D+00 .7430000000D-02 .1990560000D+02 .1093500000D+00 .4340000000D-03 .2104000000D+00 -.1035863000D+01 -.1336400000D+01 -.2113400000D+01 -.4861400000D+01 -.3101500000D+01 .8165000000D-01 .1843065000D+03 .4312300000D+00 .2542000000D-02 .1702500000D+01 -.6833080000D+00 -.2205700000D+01 -.4984200000D+01 -.4428000000D+01 +1 820101127201101212455527.3 -.5309700000D+01 .5395000000D-01 .1854103000D+03 .1376200000D+00 .1232000000D-02 .1670400000D+01 -.9705300000D-01 -.1850900000D+01 -.5295400000D+01 -.2474800000D+01 -.8610000000D-01 .1332000000D-01 .2638320000D+02 .1630000000D+00 .7060000000D-03 .2840000000D+00 -.5166875000D+01 -.5508400000D+01 -.2590600000D+01 -.1338500000D+01 .1518300000D+01 .6365000000D-01 .1836531000D+03 .1984600000D+00 .2386000000D-02 .1690800000D+01 -.4796902000D+01 -.1048000000D+00 -.3119000000D+01 -.9144000000D+00 +1 920110121201103172455582.3 -.2185000000D+01 .9522000000D-01 .1858321000D+03 .1319200000D+00 .1921000000D-02 .1700300000D+01 -.4142460000D+01 -.1912900000D+01 -.3401700000D+01 -.5178900000D+01 .7253000000D+00 .5880000000D-02 .3302810000D+02 .9361000000D-01 .1242000000D-02 .3254000000D+00 -.2961096000D+01 -.2884900000D+01 -.3120000000D-01 -.4003000000D+01 .5205600000D+01 -.9840000000D-02 .1828233000D+03 .6512000000D-01 .1937000000D-02 .1730900000D+01 -.2555258000D+01 -.1399900000D+01 -.6313000000D+00 -.3604900000D+01 +1 1020110317201105112455637.3 .3277900000D+01 .4137000000D-01 .1857204000D+03 .2187300000D+00 .9790000000D-03 .1686800000D+01 -.1831411000D+01 -.3290000000D-01 -.2519300000D+01 -.1575300000D+01 .1020800000D+01 -.1230000000D-01 .3455840000D+02 .5303000000D-01 .3830000000D-03 .2947000000D+00 -.6654480000D+00 -.4580700000D+01 -.4150200000D+01 -.3563000000D+00 .4489000000D+01 -.8393000000D-01 .1824947000D+03 .2093300000D+00 .1126000000D-02 .1650600000D+01 -.2461700000D+00 -.5109300000D+01 -.2376800000D+01 -.6265000000D+01 +1 1120110511201107052455692.3 .5563800000D+01 -.4482000000D-01 .1855300000D+03 .4745000000D-01 .2180000000D-02 .1747800000D+01 -.5803979000D+01 -.3295200000D+01 -.7923000000D+00 -.4275700000D+01 .2862000000D+00 -.1624000000D-01 .3148650000D+02 .8369000000D-01 .3140000000D-03 .2727000000D+00 -.4611875000D+01 -.2289600000D+01 -.5173200000D+01 -.3061500000D+01 -.3580000000D+00 -.7946000000D-01 .1822727000D+03 .9418000000D-01 .3068000000D-02 .1646700000D+01 -.4222158000D+01 -.3970400000D+01 -.7180000000D-01 -.2726100000D+01 +1 1220110705201108292455747.3 .2872900000D+01 -.8494000000D-01 .1854811000D+03 .2825200000D+00 .1058000000D-02 .1705700000D+01 -.3570792000D+01 -.5130900000D+01 -.5561200000D+01 -.8474000000D+00 -.6358000000D+00 -.4680000000D-02 .2927070000D+02 .6330000000D-01 .1140000000D-02 .2705000000D+00 -.2257373000D+01 -.5172000000D+00 -.3307400000D+01 -.5802300000D+01 -.4820300000D+01 -.5890000000D-02 .1823370000D+03 .1977300000D+00 .3183000000D-02 .1648200000D+01 -.1998443000D+01 -.3254200000D+01 -.3968400000D+01 -.5575200000D+01 +1 1320110829201110232455802.3 -.1906400000D+01 -.5830000000D-01 .1856424000D+03 .4281500000D+00 .5720000000D-03 .1686700000D+01 -.1410106000D+01 -.3015800000D+01 -.5652100000D+01 -.3722600000D+01 -.8748000000D+00 .5980000000D-02 .3037960000D+02 .5553000000D-01 .1219000000D-02 .2893000000D+00 -.6266913000D+01 -.4437000000D+00 -.1004400000D+01 -.2243800000D+01 -.5068600000D+01 .5407000000D-01 .1828760000D+03 .3221600000D+00 .1225000000D-02 .1639800000D+01 -.6125137000D+01 -.1423500000D+01 -.1681700000D+01 -.2098000000D+01 +1 1420111023201112172455857.3 -.5241500000D+01 .5480000000D-02 .1855542000D+03 .4361300000D+00 .2684000000D-02 .1760800000D+01 -.5549204000D+01 -.8143000000D+00 -.3748700000D+01 -.2787000000D+00 -.5423000000D+00 .1594000000D-01 .3528030000D+02 .1585700000D+00 .5430000000D-03 .3446000000D+00 -.4131449000D+01 -.4889900000D+01 -.3763100000D+01 -.5136500000D+01 -.1935400000D+01 .8170000000D-01 .1828663000D+03 .3307600000D+00 .1648000000D-02 .1631800000D+01 -.3979978000D+01 -.5846400000D+01 -.3159600000D+01 -.4948600000D+01 +1 1520111217201202102455912.3 -.4854900000D+01 .6867000000D-01 .1850262000D+03 .2380300000D+00 .3455000000D-02 .1693300000D+01 -.3373684000D+01 -.4844400000D+01 -.1635100000D+01 -.3010300000D+01 .3823000000D+00 .1808000000D-01 .4334300000D+02 .1681300000D+00 .1299000000D-02 .4253000000D+00 -.1995208000D+01 -.2416600000D+01 -.6186200000D+01 -.1622600000D+01 .2694600000D+01 .4657000000D-01 .1812370000D+03 .2012800000D+00 .3056000000D-02 .1629000000D+01 -.1795323000D+01 -.3797700000D+01 -.5253000000D+00 -.1428400000D+01 +1 1620120210201204052455967.3 -.8401000000D+00 .8991000000D-01 .1844113000D+03 .1334800000D+00 .1981000000D-02 .1664100000D+01 -.1128461000D+01 -.2011000000D+00 -.4978500000D+01 -.5689600000D+01 .1438800000D+01 -.3920000000D-02 .4980690000D+02 .6801000000D-01 .1191000000D-02 .4979000000D+00 -.6028473000D+01 -.5288700000D+01 -.3432500000D+01 -.4249700000D+01 .5370800000D+01 -.3039000000D-01 .1792641000D+03 .1224800000D+00 .1685000000D-02 .1756200000D+01 -.5828411000D+01 -.3741000000D+01 -.4848200000D+01 -.4077400000D+01 +1 1720120405201205302456022.3 .4326000000D+01 .1963000000D-01 .1845047000D+03 .3272600000D+00 .3300000000D-02 .1655200000D+01 -.5100580000D+01 -.3663600000D+01 -.5823000000D+00 -.2097600000D+01 .1145100000D+01 -.2504000000D-01 .4980290000D+02 .1202800000D+00 .3690000000D-03 .4588000000D+00 -.3684073000D+01 -.1488400000D+01 -.5886600000D+01 -.6247000000D+00 .3461200000D+01 -.8933000000D-01 .1791555000D+03 .2377400000D+00 .1881000000D-02 .1685300000D+01 -.3516150000D+01 -.1914500000D+01 -.4881800000D+01 -.4835000000D+00 +1 1820120530201207242456077.3 .5277600000D+01 -.6122000000D-01 .1850346000D+03 .9723000000D-01 .4105000000D-02 .1712200000D+01 -.2796583000D+01 -.1590200000D+01 -.4471400000D+01 -.4780600000D+01 -.2854000000D+00 -.1704000000D-01 .4570910000D+02 .1118100000D+00 .1048000000D-02 .3997000000D+00 -.1327455000D+01 -.5103500000D+01 -.2144000000D+01 -.3305300000D+01 -.1663600000D+01 -.6353000000D-01 .1804422000D+03 .3214000000D-01 .2603000000D-02 .1604200000D+01 -.1215558000D+01 -.4514500000D+01 -.2517400000D+01 -.3244200000D+01 +1 1920120724201209172456132.3 .1655600000D+01 -.8437000000D-01 .1856536000D+03 .2341300000D+00 .2200000000D-02 .1691200000D+01 -.5739580000D+00 -.2256500000D+01 -.1989600000D+01 -.1342800000D+01 -.1220500000D+01 .1650000000D-02 .4302390000D+02 .4837000000D-01 .9470000000D-03 .3965000000D+00 -.5317613000D+01 -.1089800000D+01 -.6069000000D+01 -.6149800000D+01 -.5220100000D+01 .1180000000D-01 .1810859000D+03 .3699200000D+00 .5460000000D-03 .1661000000D+01 -.5276618000D+01 -.6097000000D+00 -.2925700000D+01 -.6128100000D+01 +1 2020120917201211112456187.3 -.3059000000D+01 -.4343000000D-01 .1859034000D+03 .4332300000D+00 .7410000000D-03 .1661000000D+01 -.4699763000D+01 -.6750000000D-01 -.3397800000D+01 -.4225000000D+01 -.1112600000D+01 .1317000000D-01 .4409530000D+02 .1762000000D+00 .3940000000D-03 .4238000000D+00 -.3151810000D+01 -.4279800000D+01 -.2988200000D+01 -.2758100000D+01 -.4432900000D+01 .6423000000D-01 .1801106000D+03 .4904300000D+00 .2373000000D-02 .1626000000D+01 -.3120716000D+01 -.4692900000D+01 -.1040700000D+01 -.2669900000D+01 +1 2120121111201301052456242.3 -.5507300000D+01 .2271000000D-01 .1857516000D+03 .3670000000D+00 .2082000000D-02 .1766300000D+01 -.2557346000D+01 -.4252600000D+01 -.1283900000D+01 -.7668000000D+00 -.3793000000D+00 .2519000000D-01 .5001370000D+02 .2445300000D+00 .1054000000D-02 .5024000000D+00 -.1060931000D+01 -.1735700000D+01 -.5155800000D+01 -.5617600000D+01 -.7440000000D+00 .7743000000D-01 .1777390000D+03 .3676900000D+00 .2758000000D-02 .1602100000D+01 -.9765390000D+00 -.2456400000D+01 -.5013600000D+01 -.5464700000D+01 +1 2220130105201303012456297.3 -.4131000000D+01 .8051000000D-01 .1857037000D+03 .1280300000D+00 .2432000000D-02 .1715100000D+01 -.3749030000D+00 -.2135100000D+01 -.5276200000D+01 -.3511000000D+01 .1090400000D+01 .1530000000D-01 .5890360000D+02 .1699500000D+00 .1525000000D-02 .5694000000D+00 -.5182294000D+01 -.5224700000D+01 -.2589500000D+01 -.2049000000D+01 .3645500000D+01 .2808000000D-01 .1751322000D+03 .7595000000D-01 .1194000000D-02 .1582500000D+01 -.5077509000D+01 -.4157000000D+00 -.3166500000D+01 -.1933900000D+01 +1 2320130301201304252456352.3 .4797000000D+00 .8170000000D-01 .1861397000D+03 .1790600000D+00 .1407000000D-02 .1696400000D+01 -.4397711000D+01 -.2474100000D+01 -.3602000000D+01 -.6161400000D+01 .1969900000D+01 -.1798000000D-01 .6429170000D+02 .1372800000D+00 .1355000000D-02 .5941000000D+00 -.2890973000D+01 -.1602300000D+01 -.5896000000D+01 -.4620900000D+01 .5225400000D+01 -.4752000000D-01 .1736488000D+03 .1893700000D+00 .2830000000D-03 .1626000000D+01 -.2820776000D+01 -.1383000000D+01 -.5261100000D+01 -.4580000000D+01 +1 2420130425201306192456407.3 .5136000000D+01 -.5360000000D-02 .1862551000D+03 .1751500000D+00 .8050000000D-03 .1708100000D+01 -.2071517000D+01 -.2905000000D+00 -.3134600000D+01 -.2593800000D+01 .8416000000D+00 -.3238000000D-01 .6276030000D+02 .1777500000D+00 .1158000000D-02 .5474000000D+00 -.5241980000D+00 -.4657200000D+01 -.2077000000D+01 -.9730000000D+00 .2335100000D+01 -.9129000000D-01 .1745399000D+03 .2536700000D+00 .2638000000D-02 .1616800000D+01 -.5042380000D+00 -.5307300000D+01 -.1987500000D+01 -.9925000000D+00 +1 2520130619201308132456462.3 .4682800000D+01 -.7393000000D-01 .1857243000D+03 .1132600000D+00 .1072000000D-02 .1663800000D+01 -.6054875000D+01 -.1380100000D+01 -.1596600000D+01 -.5320900000D+01 -.9698000000D+00 -.1231000000D-01 .5761600000D+02 .9550000000D-01 .1392000000D-02 .5016000000D+00 -.4465319000D+01 -.1700300000D+01 -.5567400000D+01 -.3709900000D+01 -.2809200000D+01 -.4587000000D-01 .1761658000D+03 .5453000000D-01 .2507000000D-02 .1604400000D+01 -.4492779000D+01 -.5098400000D+01 -.6264100000D+01 -.3752800000D+01 +1 2620130813201310072456517.3 .4172000000D+00 -.8055000000D-01 .1848419000D+03 .3940100000D+00 .1877000000D-02 .1674300000D+01 -.3844641000D+01 -.5231100000D+01 -.6595000000D+00 -.1869500000D+01 -.1636300000D+01 .8350000000D-02 .5458240000D+02 .9140000000D-01 .1416000000D-02 .5139000000D+00 -.2240161000D+01 -.3936900000D+01 -.3208700000D+01 -.3071000000D+00 -.5343900000D+01 .2933000000D-01 .1771154000D+03 .2542900000D+00 .1713000000D-02 .1661900000D+01 -.2285411000D+01 -.3861900000D+01 -.4083500000D+01 -.3334000000D+00 +1 2720131007201312012456572.3 -.4094900000D+01 -.2526000000D-01 .1846603000D+03 .4091000000D+00 .1492000000D-02 .1683000000D+01 -.1701166000D+01 -.3116700000D+01 -.4802300000D+01 -.4740800000D+01 -.1163900000D+01 .2162000000D-01 .5697240000D+02 .1988500000D+00 .6590000000D-03 .5305000000D+00 -.1301190000D+00 -.1215200000D+01 -.2192000000D+00 -.3203200000D+01 -.3580300000D+01 .7140000000D-01 .1768633000D+03 .3581900000D+00 .9500000000D-04 .1582000000D+01 -.1337420000D+00 -.1889000000D+01 -.5553400000D+01 -.3184100000D+01 +1 2820131201201401252456627.3 -.5527500000D+01 .3939000000D-01 .1850912000D+03 .3146400000D+00 .1520000000D-02 .1751000000D+01 -.5842541000D+01 -.1010000000D+01 -.3793300000D+01 -.1244200000D+01 .6080000000D-01 .2997000000D-01 .6480360000D+02 .1991500000D+00 .1361000000D-02 .6144000000D+00 -.4304506000D+01 -.5067800000D+01 -.2782300000D+01 -.6027800000D+01 .4521000000D+00 .6715000000D-01 .1747445000D+03 .3402500000D+00 .2270000000D-02 .1552900000D+01 -.4266642000D+01 -.6265200000D+01 -.3304700000D+01 -.5988900000D+01 +1 2920140125201403212456682.3 -.3191600000D+01 .8858000000D-01 .1854015000D+03 .7332000000D-01 .2180000000D-02 .1711200000D+01 -.3650583000D+01 -.5239200000D+01 -.2123700000D+01 -.3997000000D+01 .1828700000D+01 .5990000000D-02 .7293600000D+02 .1061500000D+00 .2020000000D-02 .6883000000D+00 -.2091245000D+01 -.2162700000D+01 -.6248000000D+01 -.2450800000D+01 .4286700000D+01 .9790000000D-02 .1713857000D+03 .1989200000D+00 .3681000000D-02 .1557500000D+01 -.2071996000D+01 -.4098700000D+01 -.7677000000D+00 -.2463500000D+01 +1 3020140321201405152456737.3 .1920700000D+01 .6406000000D-01 .1851850000D+03 .2126200000D+00 .6470000000D-03 .1700400000D+01 -.1376748000D+01 -.6210400000D+01 -.4993100000D+01 -.3939000000D+00 .2122100000D+01 -.3097000000D-01 .7575640000D+02 .1313800000D+00 .9410000000D-03 .7001000000D+00 -.6053488000D+01 -.4291500000D+01 -.3240600000D+01 -.4981400000D+01 .4826600000D+01 -.6199000000D-01 .1696028000D+03 .9208000000D-01 .1869000000D-02 .1565500000D+01 -.6091083000D+01 -.4438800000D+01 -.4711000000D+01 -.5050900000D+01 +1 3120140515201407092456792.3 .5549300000D+01 -.2756000000D-01 .1849728000D+03 .3089700000D+00 .3839000000D-02 .1749400000D+01 -.5335797000D+01 -.3766400000D+01 -.5830000000D+00 -.3101700000D+01 .2723000000D+00 -.3356000000D-01 .7228410000D+02 .1498600000D+00 .9940000000D-03 .6627000000D+00 -.3684959000D+01 -.1372500000D+01 -.5366200000D+01 -.1346000000D+01 .1137000000D+01 -.8635000000D-01 .1706602000D+03 .1789800000D+00 .1639000000D-02 .1588400000D+01 -.3771185000D+01 -.2660300000D+01 -.5893600000D+01 -.1459600000D+01 +1 3220140709201409022456847.3 .3780500000D+01 -.8203000000D-01 .1854177000D+03 .1940000000D-01 .3938000000D-02 .1657000000D+01 -.3048255000D+01 -.5731000000D+00 -.4509200000D+01 -.5819400000D+01 -.1578400000D+01 -.5420000000D-02 .6667340000D+02 .7882000000D-01 .1545000000D-02 .5918000000D+00 -.1379379000D+01 -.4237100000D+01 -.2596100000D+01 -.4168200000D+01 -.3761000000D+01 -.2563000000D-01 .1727511000D+03 .8471000000D-01 .2827000000D-02 .1568000000D+01 -.1485085000D+01 -.2061500000D+01 -.3460200000D+01 -.4273100000D+01 +1 3320140902201410272456902.3 -.8953000000D+00 -.7007000000D-01 .1862405000D+03 .3153400000D+00 .1843000000D-02 .1635500000D+01 -.8476340000D+00 -.2668000000D+01 -.1753400000D+01 -.2377900000D+01 -.1864600000D+01 .1459000000D-01 .6444750000D+02 .1882900000D+00 .6400000000D-03 .6245000000D+00 -.5485930000D+01 -.6244000000D+00 -.6236900000D+01 -.7924000000D+00 -.5153800000D+01 .4287000000D-01 .1737168000D+03 .3216700000D+00 .1648000000D-02 .1644800000D+01 -.5565036000D+01 -.7510000000D+00 -.1966600000D+01 -.8264000000D+00 +1 3420141027201412212456957.3 -.4818200000D+01 -.8030000000D-02 .1865677000D+03 .5119700000D+00 .2425000000D-02 .1647800000D+01 -.4982901000D+01 -.4189000000D+00 -.3722600000D+01 -.5288000000D+01 -.1022300000D+01 .3012000000D-01 .6830340000D+02 .2631900000D+00 .8710000000D-03 .6756000000D+00 -.3391329000D+01 -.4395600000D+01 -.1701400000D+01 -.3685900000D+01 -.2584600000D+01 .7277000000D-01 .1721542000D+03 .3968900000D+00 .1100000000D-02 .1584100000D+01 -.3416950000D+01 -.5074800000D+01 -.9737000000D+00 -.3678300000D+01 +1 3520141221201502142457012.3 -.5252700000D+01 .5381000000D-01 .1859143000D+03 .4070500000D+00 .3873000000D-02 .1703000000D+01 -.2835352000D+01 -.4493000000D+01 -.1329800000D+01 -.1747400000D+01 .7100000000D+00 .2946000000D-01 .7612300000D+02 .2023300000D+00 .1801000000D-02 .7391000000D+00 -.1255526000D+01 -.1780800000D+01 -.5264800000D+01 -.1873000000D+00 .1514100000D+01 .5558000000D-01 .1685796000D+03 .3132800000D+00 .1822000000D-02 .1531400000D+01 -.1271547000D+01 -.2950200000D+01 -.5772700000D+01 -.2076000000D+00 +1 3620150214201504102457067.3 -.2091400000D+01 .9078000000D-01 .1852122000D+03 .9140000000D-01 .3192000000D-02 .1723900000D+01 -.6343850000D+00 -.1893500000D+01 -.5121600000D+01 -.4455300000D+01 .2408300000D+01 -.7370000000D-02 .8213880000D+02 .1221300000D+00 .1143000000D-02 .7828000000D+00 -.5297972000D+01 -.4306900000D+01 -.2405300000D+01 -.2885400000D+01 .4681900000D+01 -.6500000000D-02 .1658403000D+03 .2852000000D-01 .1291000000D-02 .1561900000D+01 -.5366748000D+01 -.1232400000D+01 -.4184900000D+01 -.2971600000D+01 +1 3720150410201506042457122.3 .3105600000D+01 .4606000000D-01 .1851386000D+03 .2488100000D+00 .2980000000D-03 .1668200000D+01 -.4634053000D+01 -.3065300000D+01 -.6493000000D+00 -.8389000000D+00 .1898000000D+01 -.4008000000D-01 .8268670000D+02 .2127400000D+00 .1292000000D-02 .7359000000D+00 -.2961940000D+01 -.1118200000D+01 -.4928500000D+01 -.5448100000D+01 .4222000000D+01 -.7254000000D-01 .1663164000D+03 .2659500000D+00 .1000000000D-02 .1538700000D+01 -.3094978000D+01 -.1605300000D+01 -.4269900000D+01 -.5589500000D+01 +1 3820150604201507292457177.3 .5653000000D+01 -.4807000000D-01 .1852133000D+03 .1685500000D+00 .2063000000D-02 .1744000000D+01 -.2302412000D+01 -.8405000000D+00 -.4086700000D+01 -.3548700000D+01 -.4299000000D+00 -.2947000000D-01 .7848630000D+02 .1855400000D+00 .2278000000D-02 .6857000000D+00 -.6054120000D+00 -.4520300000D+01 -.1811300000D+01 -.1808200000D+01 -.4060000000D-01 -.7898000000D-01 .1691010000D+03 .2621000000D+00 .3358000000D-02 .1550000000D+01 -.7665350000D+00 -.5429700000D+01 -.2021000000D+01 -.1971900000D+01 +1 3920150729201509222457232.3 .2731100000D+01 -.8565000000D-01 .1849671000D+03 .1676200000D+00 .1959000000D-02 .1715400000D+01 -.2297200000D-01 -.1342000000D+01 -.2113400000D+01 -.6140000000D-01 -.2015800000D+01 .1400000000D-02 .7362910000D+02 .1317000000D+00 .1645000000D-02 .6362000000D+00 -.4617675000D+01 -.6474000000D+00 -.5301800000D+01 -.4649500000D+01 -.4427000000D+01 -.6520000000D-02 .1714656000D+03 .1146300000D+00 .1547000000D-02 .1504900000D+01 -.4761114000D+01 -.3317000000D+00 -.6068400000D+01 -.4780600000D+01 +1 4020150922201511162457287.3 -.2094300000D+01 -.5843000000D-01 .1845248000D+03 .4224000000D+00 .1986000000D-02 .1677400000D+01 -.4119913000D+01 -.5492800000D+01 -.8333000000D+00 -.2903500000D+01 -.1940800000D+01 .2240000000D-01 .7300690000D+02 .2400300000D+00 .8070000000D-03 .6828000000D+00 -.2473869000D+01 -.3888900000D+01 -.2061100000D+01 -.1252400000D+01 -.4707600000D+01 .5342000000D-01 .1712048000D+03 .3772300000D+00 .3060000000D-03 .1556200000D+01 -.2563103000D+01 -.4307100000D+01 -.3536000000D+00 -.1317200000D+01 +1 4120151116201601102457342.3 -.5353400000D+01 .1003000000D-01 .1845977000D+03 .3744100000D+00 .1076000000D-02 .1681700000D+01 -.1988246000D+01 -.3425200000D+01 -.4953900000D+01 -.5774800000D+01 -.6576000000D+00 .3651000000D-01 .7818070000D+02 .2498100000D+00 .1421000000D-02 .7504000000D+00 -.3690740000D+00 -.1368700000D+01 -.4797900000D+01 -.4133200000D+01 -.1613500000D+01 .7213000000D-01 .1683482000D+03 .4492800000D+00 .1624000000D-02 .1554700000D+01 -.4211310000D+00 -.2135200000D+01 -.4856800000D+01 -.4185100000D+01 +1 4220160110201603052457397.3 -.4738000000D+01 .6679000000D-01 .1852747000D+03 .2090300000D+00 .1039000000D-02 .1674700000D+01 -.6123643000D+01 -.1432400000D+01 -.4705200000D+01 -.2229700000D+01 .1436300000D+01 .2188000000D-01 .8487590000D+02 .1051000000D+00 .1545000000D-02 .7879000000D+00 -.4480479000D+01 -.5036100000D+01 -.2407900000D+01 -.5936000000D+00 .2422400000D+01 .4275000000D-01 .1651476000D+03 .3239200000D+00 .2388000000D-02 .1511200000D+01 -.4564216000D+01 -.1350000000D-01 -.3167100000D+01 -.7169000000D+00 +1 4320160305201604292457452.3 -.8801000000D+00 .8882000000D-01 .1856207000D+03 .8554000000D-01 .1912000000D-02 .1700700000D+01 -.3908111000D+01 -.1460900000D+01 -.2996400000D+01 -.4943700000D+01 .2697100000D+01 -.2162000000D-01 .8764310000D+02 .7189000000D-01 .1314000000D-02 .8212000000D+00 -.2207285000D+01 -.6660000000D+00 -.6192600000D+01 -.3247300000D+01 .4917100000D+01 -.2216000000D-01 .1640421000D+03 .9351000000D-01 .3121000000D-02 .1556300000D+01 -.2365688000D+01 -.3600100000D+01 -.7250000000D+00 -.3440800000D+01 +1 4420160429201606232457507.3 .4200800000D+01 .2166000000D-01 .1854040000D+03 .2473600000D+00 .6330000000D-03 .1689000000D+01 -.1607705000D+01 -.6138200000D+01 -.1570900000D+01 -.1336200000D+01 .1365000000D+01 -.4266000000D-01 .8550430000D+02 .1486800000D+00 .6570000000D-03 .7634000000D+00 -.6149405000D+01 -.4110600000D+01 -.2146200000D+01 -.5852400000D+01 .3542400000D+01 -.8239000000D-01 .1652080000D+03 .2015100000D+00 .8900000000D-03 .1499100000D+01 -.7747100000D-01 -.5089600000D+01 -.4007200000D+01 -.6071600000D+01 +1 4520160623201608172457562.3 .5353300000D+01 -.6417000000D-01 .1851565000D+03 .1916400000D+00 .2972000000D-02 .1775200000D+01 -.5561553000D+01 -.3802200000D+01 -.5976000000D+00 -.4008600000D+01 -.1064100000D+01 -.2319000000D-01 .8077070000D+02 .6548000000D-01 .1226000000D-02 .7127000000D+00 -.3817102000D+01 -.9372000000D+00 -.5405300000D+01 -.2261800000D+01 -.1242000000D+01 -.6576000000D-01 .1668653000D+03 .1903100000D+00 .2619000000D-02 .1503600000D+01 -.4025700000D+01 -.3041800000D+01 -.6248100000D+01 -.2468000000D+01 +1 4620160817201610112457617.3 .1554700000D+01 -.8492000000D-01 .1854358000D+03 .1597400000D+00 .2195000000D-02 .1712900000D+01 -.3294535000D+01 -.4977900000D+01 -.4788100000D+01 -.5397000000D+00 -.2327700000D+01 .9290000000D-02 .7727590000D+02 .1311400000D+00 .1254000000D-02 .7032000000D+00 -.1592792000D+01 -.2996800000D+01 -.3153600000D+01 -.5150000000D+01 -.4911300000D+01 .1309000000D-01 .1677821000D+03 .9532000000D-01 .3806000000D-02 .1512400000D+01 -.1751919000D+01 -.2367800000D+01 -.3793000000D+01 -.5282200000D+01 +1 4720161011201612052457672.3 -.3199000000D+01 -.4173000000D-01 .1858581000D+03 .4123200000D+00 .2720000000D-03 .1655700000D+01 -.1117320000D+01 -.2785500000D+01 -.1948900000D+01 -.3407800000D+01 -.1802500000D+01 .2961000000D-01 .7922060000D+02 .2234900000D+00 .2970000000D-03 .7599000000D+00 -.5751122000D+01 -.5381000000D+00 -.2074600000D+01 -.1715600000D+01 -.4071500000D+01 .6037000000D-01 .1673595000D+03 .2851700000D+00 .2114000000D-02 .1512700000D+01 -.5852428000D+01 -.1190300000D+01 -.1546100000D+01 -.1802300000D+01 +1 4820161205201701292457727.3 -.5570100000D+01 .2596000000D-01 .1858919000D+03 .5112900000D+00 .2872000000D-02 .1732500000D+01 -.5263008000D+01 -.6031000000D+00 -.3622600000D+01 -.6278900000D+01 -.7210000000D-01 .3775000000D-01 .8497750000D+02 .1577500000D+00 .8660000000D-03 .8037000000D+00 -.3620912000D+01 -.4568700000D+01 -.1567900000D+01 -.4551700000D+01 -.5958000000D+00 .6753000000D-01 .1653750000D+03 .3831500000D+00 .9590000000D-03 .1482700000D+01 -.3720429000D+01 -.5535000000D+01 -.3379000000D+01 -.4673000000D+01 +1 4920170129201703252457782.3 -.4027600000D+01 .7612000000D-01 .1849899000D+03 .3322300000D+00 .3895000000D-02 .1687900000D+01 -.3106179000D+01 -.4670500000D+01 -.1421700000D+01 -.2738400000D+01 .2080400000D+01 .8980000000D-02 .8878430000D+02 .1945000000D-01 .1224000000D-02 .8032000000D+00 -.1413004000D+01 -.2331000000D+01 -.5701400000D+01 -.1010200000D+01 .3192900000D+01 .3089000000D-01 .1638912000D+03 .3015800000D+00 .3010000000D-02 .1479000000D+01 -.1577889000D+01 -.3276900000D+01 -.3269000000D+00 -.1205500000D+01 +1 5020170325201705192457837.3 .3972000000D+00 .7986000000D-01 .1838489000D+03 .6604000000D-01 .2918000000D-02 .1660500000D+01 -.8817310000D+00 -.7687000000D+00 -.5108300000D+01 -.5404200000D+01 .2558900000D+01 -.3110000000D-01 .8784550000D+02 .1353500000D+00 .1180000000D-03 .8392000000D+00 -.5410418000D+01 -.3349000000D+01 -.7348000000D+00 -.3661600000D+01 .4987000000D+01 -.3835000000D-01 .1646142000D+03 .3110000000D-01 .2243000000D-02 .1624100000D+01 -.5651057000D+01 -.4182300000D+01 -.4318900000D+01 -.3897000000D+01 +1 5120170519201707132457892.3 .4950100000D+01 .2900000000D-03 .1836483000D+03 .3357200000D+00 .2152000000D-02 .1638100000D+01 -.4861910000D+01 -.3448400000D+01 -.5660000000D+00 -.1800500000D+01 .7007000000D+00 -.4057000000D-01 .8456250000D+02 .1634900000D+00 .1456000000D-02 .7800000000D+00 -.3080763000D+01 -.9430000000D+00 -.4277700000D+01 -.3600000000D-01 .2640600000D+01 -.8664000000D-01 .1666060000D+03 .3013200000D+00 .9630000000D-03 .1589200000D+01 -.3345595000D+01 -.1780900000D+01 -.4701500000D+01 -.2677000000D+00 +1 5220170713201709062457947.3 .4796400000D+01 -.7643000000D-01 .1843071000D+03 .1938600000D+00 .3923000000D-02 .1720900000D+01 -.2534536000D+01 -.1214100000D+01 -.4266800000D+01 -.4470600000D+01 -.1571600000D+01 -.1568000000D-01 .8154030000D+02 .7480000000D-01 .2034000000D-02 .7123000000D+00 -.7798300000D+00 -.4040400000D+01 -.1755500000D+01 -.2747300000D+01 -.2336500000D+01 -.4983000000D-01 .1682007000D+03 .2107300000D+00 .3269000000D-02 .1499100000D+01 -.1006106000D+01 -.5494500000D+01 -.2318300000D+01 -.2942100000D+01 +1 5320170906201710312458002.3 .3125000000D+00 -.7961000000D-01 .1849198000D+03 .1656500000D+00 .2887000000D-02 .1732600000D+01 -.2795500000D+00 -.1722400000D+01 -.2001400000D+01 -.9967000000D+00 -.2422800000D+01 .1610000000D-01 .8107390000D+02 .1971200000D+00 .8220000000D-03 .7253000000D+00 -.4857711000D+01 -.1438000000D+00 -.4632800000D+01 -.5659200000D+01 -.5054000000D+01 .2836000000D-01 .1683226000D+03 .2306700000D+00 .8700000000D-03 .1504100000D+01 -.5017132000D+01 -.6124000000D+00 -.2790000000D-01 -.5800400000D+01 +1 5420171031201712252458057.3 -.4091400000D+01 -.2592000000D-01 .1852202000D+03 .4311900000D+00 .5030000000D-03 .1671900000D+01 -.4395593000D+01 -.5965600000D+01 -.1302800000D+01 -.3871000000D+01 -.1491800000D+01 .3628000000D-01 .8412470000D+02 .2531600000D+00 .1575000000D-02 .7672000000D+00 -.2718666000D+01 -.3983200000D+01 -.8773000000D+00 -.2212700000D+01 -.3342300000D+01 .6400000000D-01 .1659598000D+03 .4881300000D+00 .1330000000D-02 .1479800000D+01 -.2843346000D+01 -.4520600000D+01 -.9273000000D+00 -.2357300000D+01 +1 5520171225201802182458112.3 -.5525000000D+01 .4082000000D-01 .1850373000D+03 .3847300000D+00 .1157000000D-02 .1744900000D+01 -.2264300000D+01 -.3909400000D+01 -.8249000000D+00 -.4504000000D+00 .6138000000D+00 .3260000000D-01 .8748610000D+02 .1503500000D+00 .2054000000D-02 .8061000000D+00 -.5580150000D+00 -.1726700000D+01 -.4600700000D+01 -.4954400000D+01 .2912000000D+00 .6470000000D-01 .1633792000D+03 .4904100000D+00 .2658000000D-02 .1488200000D+01 -.7228490000D+00 -.2199900000D+01 -.5011800000D+01 -.5182300000D+01 +1 5620180218201804142458167.3 -.3133700000D+01 .8271000000D-01 .1847661000D+03 .1823200000D+00 .2152000000D-02 .1692900000D+01 -.1012200000D+00 -.1912100000D+01 -.5153200000D+01 -.3206500000D+01 .2441000000D+01 -.4420000000D-02 .8712490000D+02 .4131000000D-01 .7550000000D-03 .7772000000D+00 -.4613931000D+01 -.2132900000D+01 -.1945700000D+01 -.1386600000D+01 .3948600000D+01 .1685000000D-01 .1640300000D+03 .2263000000D+00 .2228000000D-02 .1507200000D+01 -.4865095000D+01 -.6012500000D+01 -.2923700000D+01 -.1689100000D+01 +1 5720180414201806082458222.3 .1585000000D+01 .6862000000D-01 .1847992000D+03 .1421400000D+00 .1945000000D-02 .1680300000D+01 -.4145153000D+01 -.2056800000D+01 -.3294100000D+01 -.5855900000D+01 .2146400000D+01 -.3590000000D-01 .8348740000D+02 .1046500000D+00 .1990000000D-03 .7660000000D+00 -.2323015000D+01 -.7790000000D-01 -.3501500000D+01 -.4036500000D+01 .4927400000D+01 -.5498000000D-01 .1667865000D+03 .1478500000D+00 .1716000000D-02 .1577400000D+01 -.2633598000D+01 -.1675600000D+01 -.3505000000D+00 -.4344400000D+01 +1 5820180608201808022458277.3 .5488000000D+01 -.2416000000D-01 .1852034000D+03 .2387600000D+00 .7960000000D-03 .1696400000D+01 -.1824781000D+01 -.3670000000D-01 -.1965900000D+01 -.2263100000D+01 .4750000000D-01 -.3557000000D-01 .8022880000D+02 .6811000000D-01 .9840000000D-03 .7441000000D+00 -.1218800000D-01 -.4398900000D+01 -.1398700000D+01 -.4562000000D+00 .1603800000D+01 -.8825000000D-01 .1683607000D+03 .3278700000D+00 .1759000000D-02 .1551900000D+01 -.3102140000D+00 -.5074400000D+01 -.2174200000D+01 -.7186000000D+00 +1 5920180802201809262458332.3 .3980800000D+01 -.8427000000D-01 .1852548000D+03 .4361000000D-01 .1771000000D-02 .1678800000D+01 -.5781624000D+01 -.3692000000D+01 -.9174000000D+00 -.4941100000D+01 -.1927300000D+01 -.8430000000D-02 .7942980000D+02 .7350000000D-01 .8780000000D-03 .7320000000D+00 -.4025102000D+01 -.5030000000D+01 -.5689800000D+01 -.3232700000D+01 -.3373400000D+01 -.3065000000D-01 .1679334000D+03 .1306300000D+00 .3057000000D-02 .1516400000D+01 -.4255589000D+01 -.2809300000D+01 -.6063200000D+01 -.3422500000D+01 +1 6020180926201811202458387.3 -.8675000000D+00 -.7166000000D-01 .1849310000D+03 .3256500000D+00 .1260000000D-02 .1699300000D+01 -.3538862000D+01 -.5011500000D+01 -.6239100000D+01 -.1472000000D+01 -.2392200000D+01 .2510000000D-01 .8136610000D+02 .1606300000D+00 .8560000000D-03 .7743000000D+00 -.1839606000D+01 -.2786300000D+01 -.4209900000D+01 -.6107700000D+01 -.5011100000D+01 .4229000000D-01 .1663772000D+03 .1527700000D+00 .3176000000D-02 .1534000000D+01 -.2007745000D+01 -.3592100000D+01 -.3768300000D+01 -.6262900000D+01 +1 6120181120201901142458442.3 -.4843100000D+01 -.7110000000D-02 .1845452000D+03 .4449400000D+00 .1417000000D-02 .1685000000D+01 -.1384410000D+01 -.2865400000D+01 -.4642300000D+01 -.4357500000D+01 -.9307000000D+00 .3834000000D-01 .8506870000D+02 .1206200000D+00 .7230000000D-03 .7738000000D+00 -.5967831000D+01 -.8375000000D+00 -.2999600000D+01 -.2625000000D+01 -.2545800000D+01 .6757000000D-01 .1653617000D+03 .3678500000D+00 .1136000000D-02 .1466900000D+01 -.6138586000D+01 -.1531400000D+01 -.9826000000D+00 -.2831200000D+01 +1 6220190114201903102458497.3 -.5253800000D+01 .5372000000D-01 .1843068000D+03 .4048100000D+00 .2043000000D-02 .1749600000D+01 -.5534381000D+01 -.7747000000D+00 -.3559700000D+01 -.8908000000D+00 .1267200000D+01 .2158000000D-01 .8579000000D+02 .7725000000D-01 .2520000000D-03 .7589000000D+00 -.3774072000D+01 -.3126000000D+00 -.1836400000D+01 -.5359900000D+01 .1255300000D+01 .5852000000D-01 .1663873000D+03 .3772100000D+00 .2207000000D-02 .1485900000D+01 -.4017736000D+01 -.5691300000D+01 -.3177600000D+01 -.5665400000D+01 +1 6320190310201905042458552.3 -.2107400000D+01 .8546000000D-01 .1836824000D+03 .1788900000D+00 .2676000000D-02 .1710600000D+01 -.3361650000D+01 -.4860400000D+01 -.1704300000D+01 -.3649500000D+01 .2444200000D+01 -.1605000000D-01 .8152750000D+02 .1501000000D+00 .9580000000D-03 .7070000000D+00 -.1521221000D+01 -.4727800000D+01 -.1020200000D+01 -.1810800000D+01 .4608900000D+01 .2600000000D-03 .1693582000D+03 .2176100000D+00 .3896000000D-02 .1540100000D+01 -.1849221000D+01 -.3371200000D+01 -.4074000000D+00 -.2164100000D+01 +1 6420190504201906282458607.3 .2812900000D+01 .5045000000D-01 .1833557000D+03 .1404900000D+00 .1839000000D-02 .1666900000D+01 -.1110125000D+01 -.6243800000D+01 -.5256600000D+01 -.4230000000D-01 .1516400000D+01 -.3469000000D-01 .7582860000D+02 .9388000000D-01 .1116000000D-02 .6971000000D+00 -.5520846000D+01 -.2666800000D+01 -.5440000000D+01 -.4436900000D+01 .4599000000D+01 -.7066000000D-01 .1714640000D+03 .1104200000D+00 .2343000000D-02 .1615000000D+01 -.5875968000D+01 -.4256700000D+01 -.4230800000D+01 -.4750100000D+01 +1 6520190628201908222458662.3 .5641300000D+01 -.4382000000D-01 .1836164000D+03 .3746100000D+00 .3303000000D-02 .1696400000D+01 -.5072168000D+01 -.3620800000D+01 -.5327000000D+00 -.2735600000D+01 -.4912000000D+00 -.2926000000D-01 .7426500000D+02 .1757000000D-01 .7270000000D-03 .7158000000D+00 -.3240338000D+01 -.2645400000D+01 -.3879000000D+01 -.8711000000D+00 .3914000000D+00 -.8185000000D-01 .1713131000D+03 .2682300000D+00 .1142000000D-02 .1632800000D+01 -.3542660000D+01 -.1880100000D+01 -.5460900000D+01 -.1112300000D+01 +1 6620190822201910162458717.3 .2937200000D+01 -.8750000000D-01 .1845120000D+03 .1496100000D+00 .4661000000D-02 .1668700000D+01 -.2755879000D+01 -.1285400000D+01 -.4323800000D+01 -.5401000000D+01 -.2136400000D+01 .2700000000D-03 .7690400000D+02 .8772000000D-01 .6310000000D-03 .6993000000D+00 -.9917590000D+00 -.1698500000D+01 -.2553800000D+01 -.3684900000D+01 -.4206700000D+01 -.1084000000D-01 .1695624000D+03 .8992000000D-01 .3192000000D-02 .1519200000D+01 -.1216818000D+01 -.5533800000D+01 -.2811300000D+01 -.3878300000D+01 +1 6720191016201912102458772.3 -.2053000000D+01 -.5867000000D-01 .1853611000D+03 .2177200000D+00 .2772000000D-02 .1660700000D+01 -.5266260000D+00 -.2306500000D+01 -.1875200000D+01 -.1917500000D+01 -.2104900000D+01 .3134000000D-01 .8080730000D+02 .1595700000D+00 .9950000000D-03 .7593000000D+00 -.5074926000D+01 -.6262300000D+01 -.2677300000D+01 -.2516000000D+00 -.4729700000D+01 .5184000000D-01 .1677602000D+03 .3188700000D+00 .9760000000D-03 .1572200000D+01 -.5267475000D+01 -.6201000000D+00 -.8588000000D+00 -.4501000000D+00 +1 6820191210202002032458827.3 -.5277100000D+01 .9350000000D-02 .1856216000D+03 .4813900000D+00 .1536000000D-02 .1622300000D+01 -.4655078000D+01 -.1267000000D+00 -.3655400000D+01 -.4831800000D+01 -.2448000000D+00 .3446000000D-01 .8212980000D+02 .1183100000D+00 .1635000000D-02 .7510000000D+00 -.2887096000D+01 -.4538400000D+01 -.4652000000D+00 -.3033800000D+01 -.1700700000D+01 .7008000000D-01 .1670102000D+03 .4956300000D+00 .1438000000D-02 .1568400000D+01 -.3125682000D+01 -.4602700000D+01 -.1129600000D+01 -.3318500000D+01 +1 6920200203202003292458882.3 -.4727000000D+01 .6412000000D-01 .1845721000D+03 .4206500000D+00 .3106000000D-02 .1705900000D+01 -.2515656000D+01 -.4240400000D+01 -.1178300000D+01 -.1333400000D+01 .1701700000D+01 .7860000000D-02 .7802540000D+02 .1196600000D+00 .8830000000D-03 .6695000000D+00 -.6676220000D+00 -.3445600000D+01 -.4589800000D+01 -.5708700000D+01 .2261100000D+01 .5090000000D-01 .1690989000D+03 .4030600000D+00 .2832000000D-02 .1564500000D+01 -.1000644000D+01 -.2232800000D+01 -.5214800000D+01 -.6129400000D+01 +1 7020200329202005232458937.3 -.9984000000D+00 .8444000000D-01 .1838316000D+03 .1552900000D+00 .3221000000D-02 .1736200000D+01 -.3323760000D+00 -.1933300000D+01 -.5076100000D+01 -.4068500000D+01 .2087700000D+01 -.2122000000D-01 .7009270000D+02 .1255500000D+00 .6700000000D-03 .6062000000D+00 -.4698348000D+01 -.1694700000D+01 -.5391900000D+01 -.2150800000D+01 .5163200000D+01 -.1939000000D-01 .1727725000D+03 .1024100000D+00 .1617000000D-02 .1606500000D+01 -.5102034000D+01 -.5318700000D+01 -.2817900000D+01 -.2599500000D+01 +1 7120200523202007172458992.3 .3807000000D+01 .3189000000D-01 .1843200000D+03 .1970100000D+00 .9320000000D-03 .1669800000D+01 -.4351092000D+01 -.2717900000D+01 -.3023900000D+01 -.4395000000D+00 .8696000000D+00 -.3031000000D-01 .6484720000D+02 .2012000000D-01 .1030000000D-02 .6034000000D+00 -.2442290000D+01 -.6211700000D+01 -.2851900000D+01 -.4852000000D+01 .3962700000D+01 -.8282000000D-01 .1749675000D+03 .2783200000D+00 .8440000000D-03 .1601600000D+01 -.2828340000D+01 -.1311200000D+01 -.5330900000D+01 -.5200800000D+01 +1 7220200717202009102459047.3 .5558500000D+01 -.6338000000D-01 .1851006000D+03 .2274100000D+00 .1056000000D-02 .1723700000D+01 -.2017150000D+01 -.3743000000D+00 -.3472400000D+01 -.3125400000D+01 -.8805000000D+00 -.2337000000D-01 .6668500000D+02 .1020600000D+00 .7200000000D-03 .6553000000D+00 -.1897170000D+00 -.6275900000D+01 -.1562600000D+01 -.1302700000D+01 -.8922000000D+00 -.7198000000D-01 .1742541000D+03 .3643000000D+00 .3479000000D-02 .1598000000D+01 -.4902170000D+00 -.4991000000D+01 -.1888000000D+01 -.1557500000D+01 +1 7320200910202011042459102.3 .1793400000D+01 -.8668000000D-01 .1849388000D+03 .7188000000D-01 .1737000000D-02 .1687300000D+01 -.5988579000D+01 -.1008100000D+01 -.1667500000D+01 -.5884900000D+01 -.2173800000D+01 .9420000000D-02 .7243500000D+02 .1100300000D+00 .6370000000D-03 .6761000000D+00 -.4225201000D+01 -.4610300000D+01 -.6287000000D+00 -.4087000000D+01 -.4820300000D+01 .8050000000D-02 .1719209000D+03 .8411000000D-01 .2955000000D-02 .1520600000D+01 -.4458753000D+01 -.1358200000D+01 -.5698000000D+01 -.4316200000D+01 +1 7420201104202012292459157.3 -.3085700000D+01 -.4515000000D-01 .1840502000D+03 .4046600000D+00 .1957000000D-02 .1658900000D+01 -.3773271000D+01 -.5180000000D+01 -.6174000000D+00 -.2404800000D+01 -.1597200000D+01 .3503000000D-01 .7620620000D+02 .6711000000D-01 .1079000000D-02 .7119000000D+00 -.2006599000D+01 -.3191900000D+01 -.5252000000D+01 -.6040000000D+00 -.4298200000D+01 .6174000000D-01 .1701859000D+03 .3289300000D+00 .1200000000D-02 .1577600000D+01 -.2247766000D+01 -.3913500000D+01 -.3279200000D+01 -.8727000000D+00 +1 7520201229202102222459212.3 -.5560800000D+01 .2685000000D-01 .1831385000D+03 .4088700000D+00 .1683000000D-02 .1654800000D+01 -.1633592000D+01 -.3039000000D+01 -.4717900000D+01 -.5271300000D+01 .4378000000D+00 .2476000000D-01 .7442830000D+02 .1246700000D+00 .5680000000D-03 .6754000000D+00 -.6072653000D+01 -.2697700000D+01 -.3351000000D+01 -.3392700000D+01 -.7601000000D+00 .7243000000D-01 .1716226000D+03 .4400500000D+00 .1267000000D-02 .1604700000D+01 -.1117860000D+00 -.1607000000D+01 -.5021800000D+01 -.3755000000D+01 +2 7620100101201004112455197.4 .1587700000D+01 .9000000000D-03 .2378289000D+03 .1679000000D-01 .1427000000D-02 .6454000000D+00 -.3157130000D+00 -.2744300000D+01 -.5105100000D+01 -.5772700000D+01 .1808000000D+00 -.2590000000D-02 .2580390000D+02 .1505000000D-01 .8690000000D-03 .7010000000D-01 -.5669668000D+01 -.1749000000D+01 -.1786700000D+01 -.4165400000D+01 -.2135000000D+00 -.8850000000D-02 .2372127000D+03 .2063000000D-01 .1131000000D-02 .6295000000D+00 -.5024145000D+01 -.4276600000D+01 -.3346000000D+01 -.4210900000D+01 +2 7720100411201007202455297.4 .1389800000D+01 -.9760000000D-02 .2373774000D+03 .1316700000D+00 .3325000000D-02 .5385000000D+00 -.3384910000D+00 -.5169200000D+01 -.1975800000D+01 -.2169000000D+00 .6360000000D-01 -.8800000000D-03 .2003950000D+02 .1361600000D+00 .1332000000D-02 .5000000000D-01 -.6084146000D+01 -.1767500000D+01 -.4973200000D+01 -.5809000000D+01 -.1187700000D+01 -.4920000000D-02 .2378203000D+03 .1228700000D+00 .3245000000D-02 .5693000000D+00 -.5047515000D+01 -.3616300000D+01 -.4054000000D+00 -.4892600000D+01 +2 7820100720201010282455397.4 .5962000000D+00 -.9690000000D-02 .2375286000D+03 .5645000000D+00 .7990000000D-03 .5160000000D+00 -.4924590000D+00 -.2045500000D+01 -.3521400000D+01 -.1244200000D+01 -.9210000000D-01 -.9000000000D-03 .2068930000D+02 .1514400000D+00 .5060000000D-03 .9480000000D-01 -.6199875000D+01 -.5147300000D+01 -.6248100000D+01 -.3002000000D+00 -.1543000000D+01 -.2610000000D-02 .2377997000D+03 .5733000000D+00 .8150000000D-03 .4981000000D+00 -.5200051000D+01 -.4967000000D+00 -.2233600000D+01 -.5901300000D+01 +2 7920101028201102052455497.4 -.2191000000D+00 -.7750000000D-02 .2380651000D+03 .5636900000D+00 .2943000000D-02 .5502000000D+00 -.8037240000D+00 -.2418800000D+01 -.5540100000D+01 -.2129600000D+01 -.2509000000D+00 -.5800000000D-03 .3511660000D+02 .2043400000D+00 .1171000000D-02 .1086000000D+00 -.5901825000D+01 -.5747000000D+01 -.2568500000D+01 -.9389000000D+00 -.1631400000D+01 .1080000000D-02 .2360720000D+03 .5579000000D+00 .2949000000D-02 .5190000000D+00 -.5508403000D+01 -.8924000000D+00 -.4004300000D+01 -.5684000000D+00 +2 8020110205201105162455597.4 -.1127800000D+01 -.3420000000D-02 .2378519000D+03 .1611400000D+00 .6800000000D-04 .5229000000D+00 -.9924260000D+00 -.5716900000D+01 -.3613200000D+01 -.2699500000D+01 -.2902000000D+00 .4600000000D-03 .4411660000D+02 .9504000000D-01 .2760000000D-03 .6640000000D-01 -.5953569000D+01 -.2714900000D+01 -.1816500000D+01 -.1998200000D+01 -.1744000000D+01 .1462000000D-01 .2347681000D+03 .1939200000D+00 .4240000000D-03 .5554000000D+00 -.5698526000D+01 -.4117500000D+01 -.6816000000D+00 -.1080500000D+01 +2 8120110516201108242455697.4 -.1661200000D+01 -.1680000000D-02 .2377140000D+03 .3553000000D-01 .2979000000D-02 .6231000000D+00 -.1003898000D+01 -.2165400000D+01 -.2682800000D+01 -.3698800000D+01 -.1871000000D+00 .2170000000D-02 .3390240000D+02 .6527000000D-01 .1227000000D-02 .7320000000D-01 -.6120772000D+01 -.2404800000D+01 -.5925000000D+01 -.2321200000D+01 -.3297000000D+00 .7940000000D-02 .2360059000D+03 .5946000000D-01 .2744000000D-02 .6183000000D+00 -.5707803000D+01 -.5449000000D+00 -.1197100000D+01 -.2098000000D+01 +2 8220110824201112022455797.4 -.1732400000D+01 .2840000000D-02 .2381777000D+03 .6248700000D+00 .8150000000D-03 .6362000000D+00 -.1210016000D+01 -.2815000000D+01 -.5351500000D+01 -.4685400000D+01 .1160000000D-01 .2140000000D-02 .4000020000D+02 .1978500000D+00 .3020000000D-03 .1186000000D+00 -.6223616000D+01 -.6253400000D+01 -.2029200000D+01 -.3128600000D+01 .6209000000D+00 .3010000000D-02 .2350909000D+03 .6225000000D+00 .1058000000D-02 .6160000000D+00 -.5913624000D+01 -.1262200000D+01 -.3640000000D+01 -.3109600000D+01 +2 8320111202201203112455897.4 -.1442700000D+01 .7910000000D-02 .2382773000D+03 .4429300000D+00 .3146000000D-02 .5918000000D+00 -.1514993000D+01 -.3126900000D+01 -.6268200000D+01 -.5611000000D+01 .2440000000D+00 .1680000000D-02 .5801240000D+02 .1575600000D+00 .1267000000D-02 .1513000000D+00 -.6682600000D-01 -.3989000000D+00 -.3481000000D+01 -.4115600000D+01 .1039900000D+01 .5660000000D-02 .2312737000D+03 .4335100000D+00 .3064000000D-02 .5678000000D+00 -.6219904000D+01 -.1642300000D+01 -.4801500000D+01 -.4071000000D+01 +2 8420120311201206192455997.4 -.5001000000D+00 .1123000000D-01 .2380667000D+03 .3039600000D+00 .1840000000D-02 .5700000000D+00 -.1647563000D+01 -.8810000000D-01 -.3267500000D+01 -.2214000000D+00 .3437000000D+00 .2800000000D-03 .6125870000D+02 .1492600000D+00 .6380000000D-03 .1673000000D+00 -.1695630000D+00 -.3460600000D+01 -.7334000000D+00 -.4922600000D+01 .1393700000D+01 .5090000000D-02 .2306206000D+03 .2889000000D+00 .1721000000D-02 .5502000000D+00 -.6879600000D-01 -.4814800000D+01 -.1574500000D+01 -.4959200000D+01 +2 8520120619201209272456097.4 .5848000000D+00 .6430000000D-02 .2379207000D+03 .2179000000D+00 .2312000000D-02 .5185000000D+00 -.1670884000D+01 -.3165400000D+01 -.3472800000D+01 -.9219000000D+00 .3964000000D+00 -.3800000000D-03 .5200760000D+02 .4193000000D-01 .9010000000D-03 .1240000000D+00 -.2644550000D+00 -.1223900000D+01 -.6680000000D+00 -.5943300000D+01 .1780800000D+01 -.8040000000D-02 .2321270000D+03 .2128100000D+00 .2371000000D-02 .4813000000D+00 -.9279000000D-01 -.1499400000D+01 -.2088700000D+01 -.5565500000D+01 +2 8620120927201301052456197.4 .1132300000D+01 .5960000000D-02 .2381626000D+03 .6802000000D+00 .1669000000D-02 .5123000000D+00 -.1923424000D+01 -.3518800000D+01 -.1036000000D+00 -.1894300000D+01 .4332000000D+00 -.2830000000D-02 .6256490000D+02 .2317400000D+00 .6250000000D-03 .1463000000D+00 -.4476400000D+00 -.9521000000D+00 -.3640300000D+01 -.6127000000D+00 .1226600000D+01 -.7980000000D-02 .2300417000D+03 .6462800000D+00 .1475000000D-02 .4720000000D+00 -.3473360000D+00 -.2029400000D+01 -.4813800000D+01 -.3506000000D+00 +2 8720130105201304152456297.4 .1736300000D+01 -.3900000000D-03 .2381916000D+03 .2751500000D+00 .2784000000D-02 .5972000000D+00 -.2215098000D+01 -.3790500000D+01 -.6470000000D+00 -.2741400000D+01 .1750000000D+00 -.2450000000D-02 .7740730000D+02 .9435000000D-01 .1098000000D-02 .1872000000D+00 -.6590400000D+00 -.1405900000D+01 -.4396100000D+01 -.1168200000D+01 .5416000000D+00 -.7950000000D-02 .2253044000D+03 .2884400000D+00 .2929000000D-02 .5789000000D+00 -.6413020000D+00 -.2318300000D+01 -.5486000000D+01 -.1200900000D+01 +2 8820130415201307242456397.4 .1865000000D+01 -.8450000000D-02 .2383399000D+03 .3131800000D+00 .2984000000D-02 .5969000000D+00 -.2292459000D+01 -.6881000000D+00 -.3833500000D+01 -.3494800000D+01 -.2086000000D+00 -.1540000000D-02 .7569750000D+02 .1409700000D+00 .1040000000D-02 .1558000000D+00 -.7375720000D+00 -.4159400000D+01 -.1321600000D+01 -.1912800000D+01 -.5299000000D+00 -.7310000000D-02 .2259325000D+03 .2916200000D+00 .2728000000D-02 .5676000000D+00 -.7177480000D+00 -.5553800000D+01 -.2362200000D+01 -.1899500000D+01 +2 8920130724201311012456497.4 .8855000000D+00 -.4750000000D-02 .2380111000D+03 .4073300000D+00 .1465000000D-02 .6162000000D+00 -.2356824000D+01 -.3886300000D+01 -.4454100000D+01 -.4598000000D+01 -.3324000000D+00 -.3130000000D-02 .7065760000D+02 .1200900000D+00 .6230000000D-03 .2053000000D+00 -.8364600000D+00 -.1605600000D+01 -.1987200000D+01 -.2941900000D+01 -.1285600000D+01 -.4790000000D-02 .2273823000D+03 .3724300000D+00 .1690000000D-02 .5722000000D+00 -.7824270000D+00 -.2372400000D+01 -.2928100000D+01 -.3037700000D+01 +2 9020131101201402092456597.4 .2297000000D+00 -.4570000000D-02 .2383558000D+03 .6842600000D+00 .2385000000D-02 .6101000000D+00 -.2650945000D+01 -.4254800000D+01 -.9740000000D+00 -.5589200000D+01 -.5935000000D+00 -.1160000000D-02 .8280810000D+02 .2370500000D+00 .8370000000D-03 .2369000000D+00 -.1075361000D+01 -.1982500000D+01 -.4901600000D+01 -.3958000000D+01 -.1688300000D+01 .8600000000D-03 .2237978000D+03 .6619600000D+00 .2244000000D-02 .5628000000D+00 -.1080934000D+01 -.2804300000D+01 -.5874100000D+01 -.4048000000D+01 +2 9120140209201405202456697.4 -.1435000000D+00 -.1438000000D-01 .2384818000D+03 .8151000000D-01 .1885000000D-02 .4815000000D+00 -.2914015000D+01 -.4725400000D+01 -.1437700000D+01 -.1431000000D+00 -.7099000000D+00 .3790000000D-02 .9193880000D+02 .2522000000D-01 .7340000000D-03 .2107000000D+00 -.1293375000D+01 -.2620700000D+01 -.5231600000D+01 -.4857600000D+01 -.1583000000D+01 .5760000000D-02 .2196797000D+03 .8433000000D-01 .1968000000D-02 .4761000000D+00 -.1352129000D+01 -.2824200000D+01 -.6107100000D+01 -.4836300000D+01 +2 9220140520201408282456797.4 -.1345400000D+01 -.4780000000D-02 .2381554000D+03 .2161500000D+00 .3426000000D-02 .5386000000D+00 -.2945411000D+01 -.1377300000D+01 -.4519400000D+01 -.8147000000D+00 -.3958000000D+00 .3640000000D-02 .8769400000D+02 .9380000000D-01 .1242000000D-02 .2019000000D+00 -.1339904000D+01 -.4958700000D+01 -.2227700000D+01 -.5530400000D+01 -.9907000000D+00 .8240000000D-02 .2214524000D+03 .2266800000D+00 .3388000000D-02 .5017000000D+00 -.1380785000D+01 -.6252100000D+01 -.3057900000D+01 -.5521300000D+01 +2 9320140828201412062456897.4 -.1939300000D+01 .4660000000D-02 .2378060000D+03 .5342400000D+00 .1121000000D-02 .5515000000D+00 -.3068176000D+01 -.4591500000D+01 -.5691200000D+01 -.1655200000D+01 .1070000000D-01 .1930000000D-02 .8719080000D+02 .1882400000D+00 .4500000000D-03 .1897000000D+00 -.1472094000D+01 -.2490400000D+01 -.3432200000D+01 -.1232000000D+00 -.1656000000D+00 .6300000000D-02 .2217866000D+03 .5164900000D+00 .8780000000D-03 .5058000000D+00 -.1500623000D+01 -.3149000000D+01 -.4085700000D+01 -.1171000000D+00 +2 9420141206201503162456997.4 -.1735800000D+01 .5710000000D-02 .2382465000D+03 .6235000000D+00 .2930000000D-02 .5503000000D+00 -.3386738000D+01 -.4999600000D+01 -.1807700000D+01 -.2704900000D+01 .2382000000D+00 .3530000000D-02 .9730240000D+02 .2362600000D+00 .1167000000D-02 .2366000000D+00 -.1747358000D+01 -.2972700000D+01 -.6019600000D+01 -.1067300000D+01 .3821000000D+00 .7690000000D-02 .2177259000D+03 .6131400000D+00 .2942000000D-02 .5190000000D+00 -.1827789000D+01 -.3507800000D+01 -.3385000000D+00 -.1156600000D+01 +2 9520150316201506242457097.4 -.1060900000D+01 .5640000000D-02 .2381071000D+03 .1102100000D+00 .6700000000D-03 .6974000000D+00 -.3600629000D+01 -.1928900000D+01 -.2150800000D+01 -.3545000000D+01 .6355000000D+00 .1410000000D-02 .1011267000D+03 .5340000000D-01 .2020000000D-03 .2816000000D+00 -.1939216000D+01 -.6279200000D+01 -.5210400000D+01 -.1829900000D+01 .1364700000D+01 .2090000000D-02 .2158767000D+03 .1445700000D+00 .3440000000D-03 .6412000000D+00 -.2052775000D+01 -.6117000000D+00 -.1480000000D+00 -.1998000000D+01 +2 9620150624201510022457197.4 -.1967000000D+00 .1130000000D-01 .2378625000D+03 .6932000000D-01 .3396000000D-02 .5688000000D+00 -.3604581000D+01 -.2396900000D+01 -.5288700000D+01 -.4422000000D+01 .7287000000D+00 -.1270000000D-02 .9749650000D+02 .2333000000D-01 .1246000000D-02 .2383000000D+00 -.1961951000D+01 -.5396500000D+01 -.3164200000D+01 -.2741100000D+01 .1590500000D+01 -.1660000000D-02 .2172472000D+03 .7093000000D-01 .3217000000D-02 .5071000000D+00 -.2047846000D+01 -.8566000000D+00 -.3768600000D+01 -.2840300000D+01 +2 9720151002201601102457297.4 .7374000000D+00 .7370000000D-02 .2381648000D+03 .6400500000D+00 .8300000000D-03 .5543000000D+00 -.3787275000D+01 -.5370000000D+01 -.1088900000D+01 -.5484600000D+01 .5711000000D+00 -.1090000000D-02 .1000646000D+03 .2579800000D+00 .4720000000D-03 .2475000000D+00 -.2139123000D+01 -.3395400000D+01 -.5613200000D+01 -.3831600000D+01 .1230300000D+01 -.5500000000D-03 .2162801000D+03 .6274000000D+00 .8740000000D-03 .4876000000D+00 -.2231552000D+01 -.3866800000D+01 -.6147400000D+01 -.3969400000D+01 +2 9820160110201604192457397.4 .1379600000D+01 .3060000000D-02 .2380504000D+03 .5261600000D+00 .3411000000D-02 .5421000000D+00 -.4111882000D+01 -.5740200000D+01 -.2599100000D+01 -.5700000000D-01 .4303000000D+00 -.3450000000D-02 .1061181000D+03 .1948000000D+00 .1286000000D-02 .2415000000D+00 -.2427838000D+01 -.3911500000D+01 -.7184000000D+00 -.4648000000D+01 .1045900000D+01 -.6380000000D-02 .2138826000D+03 .4939700000D+00 .3210000000D-02 .4910000000D+00 -.2569146000D+01 -.4200200000D+01 -.1058200000D+01 -.4799900000D+01 +2 9920160419201607282457497.4 .1818700000D+01 -.4700000000D-02 .2376409000D+03 .2765600000D+00 .1064000000D-02 .4728000000D+00 -.4267094000D+01 -.2700700000D+01 -.5875700000D+01 -.7391000000D+00 .1487000000D+00 -.6620000000D-02 .1066094000D+03 .1155600000D+00 .6140000000D-03 .2138000000D+00 -.2568880000D+01 -.7426000000D+00 -.3940200000D+01 -.5289300000D+01 .6457000000D+00 -.1623000000D-01 .2141715000D+03 .2886200000D+00 .1259000000D-02 .4067000000D+00 -.2729058000D+01 -.1077000000D+01 -.4147100000D+01 -.5371600000D+01 +2 10020160728201611052457597.4 .1437800000D+01 -.3750000000D-02 .2377587000D+03 .1218000000D+00 .3029000000D-02 .6005000000D+00 -.4272807000D+01 -.5688000000D+01 -.6017400000D+01 -.1522300000D+01 -.4998000000D+00 -.2300000000D-02 .1049402000D+03 .7136000000D-01 .1056000000D-02 .2563000000D+00 -.2592767000D+01 -.3895600000D+01 -.4197200000D+01 -.6115500000D+01 -.9044000000D+00 -.3520000000D-02 .2138510000D+03 .1288400000D+00 .2681000000D-02 .5393000000D+00 -.2726222000D+01 -.4115600000D+01 -.4541800000D+01 -.6266000000D+01 +2 10120161105201702132457697.4 .9967000000D+00 -.6630000000D-02 .2381441000D+03 .7190300000D+00 .1462000000D-02 .6043000000D+00 -.4515823000D+01 -.6140100000D+01 -.2670300000D+01 -.2546500000D+01 -.7944000000D+00 .7100000000D-03 .1076060000D+03 .2888100000D+00 .7770000000D-03 .2767000000D+00 -.2823384000D+01 -.4291700000D+01 -.5848000000D+00 -.8520000000D+00 -.1448000000D+01 .8800000000D-03 .2129348000D+03 .6633500000D+00 .1377000000D-02 .5453000000D+00 -.2976274000D+01 -.4576900000D+01 -.1031400000D+01 -.1019700000D+01 +2 10220170213201705242457797.4 .2995000000D+00 -.9860000000D-02 .2374918000D+03 .3569900000D+00 .3202000000D-02 .5856000000D+00 -.4831785000D+01 -.1407000000D+00 -.3279500000D+01 -.3591100000D+01 -.7711000000D+00 .4500000000D-03 .1083683000D+03 .1342700000D+00 .1186000000D-02 .2725000000D+00 -.3105191000D+01 -.4863400000D+01 -.1717000000D+01 -.1867600000D+01 -.1497200000D+01 -.8600000000D-03 .2130517000D+03 .3322400000D+00 .2995000000D-02 .5365000000D+00 -.3300622000D+01 -.4874500000D+01 -.1742200000D+01 -.2060000000D+01 +2 10320170524201709012457897.4 -.8899000000D+00 -.7310000000D-02 .2373768000D+03 .3596300000D+00 .2786000000D-02 .6502000000D+00 -.4926707000D+01 -.3369400000D+01 -.2372000000D+00 -.4368500000D+01 -.5962000000D+00 .2600000000D-02 .1080453000D+03 .1234600000D+00 .1082000000D-02 .2846000000D+00 -.3196666000D+01 -.1655600000D+01 -.4695900000D+01 -.2635400000D+01 -.1297200000D+01 .3370000000D-02 .2134196000D+03 .3206100000D+00 .2421000000D-02 .5768000000D+00 -.3394207000D+01 -.1723900000D+01 -.4871300000D+01 -.2840000000D+01 +2 10420170901201712102457997.4 -.1502500000D+01 -.2320000000D-02 .2373793000D+03 .3533000000D+00 .2050000000D-02 .5079000000D+00 -.4963969000D+01 -.1976000000D+00 -.6416000000D+00 -.5225700000D+01 -.3493000000D+00 .5540000000D-02 .1088560000D+03 .1580200000D+00 .8890000000D-03 .2255000000D+00 -.3254861000D+01 -.4592600000D+01 -.5511900000D+01 -.3565100000D+01 -.9185000000D+00 .1024000000D-01 .2120800000D+03 .3086900000D+00 .2049000000D-02 .4324000000D+00 -.3430962000D+01 -.4908600000D+01 -.5417300000D+01 -.3749300000D+01 +2 10520171210201803202458097.4 -.1573300000D+01 -.1950000000D-02 .2374522000D+03 .7456500000D+00 .2482000000D-02 .4959000000D+00 -.5260135000D+01 -.5875000000D+00 -.3569100000D+01 -.6252200000D+01 .1088000000D+00 .3390000000D-02 .1094293000D+03 .2877500000D+00 .9840000000D-03 .2334000000D+00 -.3528208000D+01 -.5263200000D+01 -.1846100000D+01 -.4469900000D+01 -.1613000000D+00 .7500000000D-02 .2128554000D+03 .6676300000D+00 .2075000000D-02 .4785000000D+00 -.3732444000D+01 -.5314300000D+01 -.2034600000D+01 -.4752900000D+01 +2 10620180320201806282458197.4 -.1831700000D+01 .9670000000D-02 .2372510000D+03 .1415900000D+00 .2342000000D-02 .5687000000D+00 -.5546953000D+01 -.8775000000D+00 -.3992700000D+01 -.6237000000D+00 .4482000000D+00 .2190000000D-02 .1054830000D+03 .6317000000D-01 .9760000000D-03 .2605000000D+00 -.3777648000D+01 -.5706300000D+01 -.2613100000D+01 -.5161700000D+01 .5815000000D+00 .5420000000D-02 .2147262000D+03 .1559000000D+00 .2408000000D-02 .5046000000D+00 -.4020687000D+01 -.5499800000D+01 -.2357600000D+01 -.5385300000D+01 +2 10720180628201810062458297.4 -.1013200000D+01 .1260000000D-01 .2373536000D+03 .3002700000D+00 .3592000000D-02 .5776000000D+00 -.5586224000D+01 -.3984200000D+01 -.8489000000D+00 -.1421900000D+01 .7683000000D+00 .5000000000D-04 .1069406000D+03 .1065400000D+00 .1384000000D-02 .2568000000D+00 -.3826759000D+01 -.2702100000D+01 -.5592600000D+01 -.5989800000D+01 .1382300000D+01 .1660000000D-02 .2139836000D+03 .2673900000D+00 .3195000000D-02 .4956000000D+00 -.4060318000D+01 -.2383800000D+01 -.5572600000D+01 -.6211600000D+01 +2 10820181006201901142458397.4 .3740000000D+00 .3320000000D-02 .2370446000D+03 .5380400000D+00 .1157000000D-02 .6440000000D+00 -.5680024000D+01 -.9398000000D+00 -.1912000000D+01 -.2471000000D+01 .7489000000D+00 -.8800000000D-03 .1088775000D+03 .2169600000D+00 .6400000000D-03 .2914000000D+00 -.3933788000D+01 -.5557400000D+01 -.5455000000D+00 -.7377000000D+00 .1520400000D+01 .5400000000D-03 .2129998000D+03 .4631500000D+00 .1086000000D-02 .5822000000D+00 -.4156168000D+01 -.5701800000D+01 -.6264200000D+01 -.9529000000D+00 +2 10920190114201904242458497.4 .8868000000D+00 .4000000000D-02 .2371487000D+03 .6642400000D+00 .2922000000D-02 .6030000000D+00 -.6006768000D+01 -.1338400000D+01 -.4415700000D+01 -.3489100000D+01 .6539000000D+00 -.4110000000D-02 .1044256000D+03 .2606300000D+00 .1192000000D-02 .2600000000D+00 -.4226075000D+01 -.6250900000D+01 -.3021700000D+01 -.1760000000D+01 .1508900000D+01 -.4580000000D-02 .2159001000D+03 .6089400000D+00 .2680000000D-02 .5634000000D+00 -.4483413000D+01 -.6037300000D+01 -.2872400000D+01 -.1942700000D+01 +2 11020190424201908022458597.4 .1163100000D+01 .9050000000D-02 .2371462000D+03 .6964000000D-01 .1090000000D-02 .5400000000D+00 -.6239381000D+01 -.4361100000D+01 -.4832200000D+01 -.4474900000D+01 .2244000000D+00 -.4140000000D-02 .9792390000D+02 .3047000000D-01 .4150000000D-03 .2107000000D+00 -.4428795000D+01 -.3606800000D+01 -.3607900000D+01 -.2550600000D+01 .9751000000D+00 -.1054000000D-01 .2184847000D+03 .6334000000D-01 .1044000000D-02 .5089000000D+00 -.4716056000D+01 -.3253300000D+01 -.2782400000D+01 -.2886100000D+01 +2 11120190802201911102458697.4 .1792200000D+01 -.4280000000D-02 .2366712000D+03 .1518900000D+00 .3705000000D-02 .5255000000D+00 -.6242993000D+01 -.4801700000D+01 -.1598700000D+01 -.5030400000D+01 -.2541000000D+00 -.2890000000D-02 .1027011000D+03 .7611000000D-01 .1493000000D-02 .2260000000D+00 -.4454382000D+01 -.3945900000D+01 -.2110000000D+00 -.3274000000D+01 -.9780000000D-01 -.7430000000D-02 .2161965000D+03 .1435900000D+00 .3435000000D-02 .4828000000D+00 -.4720246000D+01 -.3008700000D+01 -.6255500000D+01 -.3558800000D+01 +2 11220191110202002182458797.4 .1580800000D+01 -.8900000000D-02 .2367179000D+03 .6341800000D+00 .9720000000D-03 .4717000000D+00 -.1212700000D+00 -.1674100000D+01 -.3499300000D+01 -.5964400000D+01 -.5179000000D+00 -.1730000000D-02 .1031700000D+03 .2606600000D+00 .6770000000D-03 .2215000000D+00 -.4614253000D+01 -.2000000000D+00 -.2290700000D+01 -.4113700000D+01 -.7934000000D+00 -.5490000000D-02 .2161724000D+03 .5923500000D+00 .5940000000D-03 .4624000000D+00 -.4879929000D+01 -.1205000000D+00 -.2156700000D+01 -.4473400000D+01 +2 11320200218202005282458897.4 .9454000000D+00 -.8320000000D-02 .2369347000D+03 .5440600000D+00 .3200000000D-02 .5542000000D+00 -.4510320000D+00 -.2066600000D+01 -.5192700000D+01 -.7203000000D+00 -.6207000000D+00 -.5300000000D-03 .9332050000D+02 .2040200000D+00 .1219000000D-02 .2216000000D+00 -.4900450000D+01 -.9111000000D+00 -.4041400000D+01 -.5044500000D+01 -.1289300000D+01 -.3960000000D-02 .2207564000D+03 .5039400000D+00 .2977000000D-02 .5204000000D+00 -.5207813000D+01 -.4159000000D+00 -.3538300000D+01 -.5431600000D+01 +2 11420200528202009052458997.4 -.1096000000D+00 -.6530000000D-02 .2368206000D+03 .2152900000D+00 .3540000000D-03 .6483000000D+00 -.6216020000D+00 -.5278300000D+01 -.1987800000D+01 -.1301500000D+01 -.7671000000D+00 .3950000000D-02 .8787600000D+02 .1048200000D+00 .2900000000D-03 .2682000000D+00 -.5048992000D+01 -.4306900000D+01 -.3097000000D+00 -.5873300000D+01 -.1891800000D+01 .5620000000D-02 .2231350000D+03 .2352400000D+00 .7250000000D-03 .5924000000D+00 -.5379316000D+01 -.3665300000D+01 -.7872000000D+00 -.6067500000D+01 +2 11520200905202012142459097.4 -.9837000000D+00 -.8080000000D-02 .2364977000D+03 .6438000000D-01 .3272000000D-02 .5998000000D+00 -.6224650000D+00 -.1700700000D+01 -.2370500000D+01 -.2381900000D+01 -.3822000000D+00 .2930000000D-02 .9548070000D+02 .7038000000D-01 .1227000000D-02 .2339000000D+00 -.5077065000D+01 -.5934900000D+01 -.1256100000D+01 -.5933000000D+00 -.1238300000D+01 .5500000000D-02 .2196003000D+03 .6904000000D-01 .2796000000D-02 .5629000000D+00 -.5380540000D+01 -.6848000000D+00 -.6778000000D+00 -.8583000000D+00 +2 11620201214202103242459197.4 -.1616800000D+01 -.2160000000D-02 .2370007000D+03 .6976700000D+00 .1279000000D-02 .5979000000D+00 -.8497180000D+00 -.2461400000D+01 -.5191300000D+01 -.3424900000D+01 -.8300000000D-02 .1150000000D-02 .9160810000D+02 .2604800000D+00 .7890000000D-03 .1965000000D+00 -.5288046000D+01 -.1176400000D+01 -.3569600000D+01 -.1600900000D+01 -.5437000000D+00 .3300000000D-02 .2215812000D+03 .6578600000D+00 .1353000000D-02 .5805000000D+00 -.5605768000D+01 -.8225000000D+00 -.3587700000D+01 -.1878800000D+01 +3 11720100101201004162455197.3 -.4200000000D-01 .1850000000D-02 .2948735000D+03 .2012800000D+00 .1767000000D-02 .1463000000D+00 -.5447152000D+01 -.3855800000D+01 -.3748100000D+01 -.4335800000D+01 .1060000000D-01 -.7200000000D-03 .3151210000D+02 .4958000000D-01 .9630000000D-03 .6400000000D-01 -.4339503000D+01 -.1379300000D+01 -.4250000000D+00 -.1189900000D+01 -.1563000000D+00 .2500000000D-03 .2933630000D+03 .2118400000D+00 .1582000000D-02 .1878000000D+00 -.3871309000D+01 -.2426900000D+01 -.2086100000D+01 -.2652200000D+01 +3 11820100416201007302455302.3 -.1910000000D-01 -.5000000000D-04 .2945729000D+03 .3660800000D+00 .3900000000D-02 .3950000000D-01 -.1450580000D+01 -.6148900000D+01 -.3009600000D+01 -.3100600000D+01 -.1300000000D-02 .1700000000D-03 .2042090000D+02 .1501800000D+00 .1641000000D-02 .1230000000D-01 -.7764620000D+00 -.2925500000D+01 -.6067900000D+01 -.5869500000D+01 .1310000000D-01 -.6700000000D-03 .2947117000D+03 .3628400000D+00 .3851000000D-02 .2960000000D-01 -.6160810000D+01 -.4593600000D+01 -.1451300000D+01 -.1870600000D+01 +3 11920100730201011122455407.3 .1071000000D+00 -.5600000000D-03 .2947307000D+03 .4957300000D+00 .4090000000D-03 .1023000000D+00 -.3880251000D+01 -.5464200000D+01 -.1410000000D+01 -.5756800000D+01 -.4960000000D-01 .2800000000D-03 .2146590000D+02 .2190300000D+00 .3350000000D-03 .4830000000D-01 -.3121230000D+01 -.2267800000D+01 -.3793500000D+01 -.2641700000D+01 -.1050000000D-01 .1050000000D-02 .2944926000D+03 .4782700000D+00 .5230000000D-03 .8300000000D-01 -.2306489000D+01 -.3893300000D+01 -.5778500000D+01 -.4540100000D+01 +3 12020101112201102252455512.3 -.4890000000D-01 .5400000000D-03 .2948031000D+03 .4047900000D+00 .3811000000D-02 .2670000000D-01 -.1801400000D+00 -.1771300000D+01 -.4913000000D+01 -.2081800000D+01 .2490000000D-01 -.2500000000D-03 .4177190000D+02 .2155600000D+00 .1587000000D-02 .1210000000D-01 -.5175057000D+01 -.5035800000D+01 -.1925600000D+01 -.5561100000D+01 .5600000000D-02 -.1500000000D-03 .2923142000D+03 .4008300000D+00 .3778000000D-02 .2390000000D-01 -.4886646000D+01 -.2791000000D+00 -.3402400000D+01 -.1148500000D+01 +3 12120110225201106102455617.3 -.1360000000D-01 -.1280000000D-02 .2952864000D+03 .5626600000D+00 .1805000000D-02 .1640000000D+00 -.2605374000D+01 -.9733000000D+00 -.4171000000D+01 -.1384400000D+01 .1010000000D-01 .4900000000D-03 .4737460000D+02 .1906300000D+00 .6770000000D-03 .7080000000D-01 -.1276955000D+01 -.4255200000D+01 -.1350200000D+01 -.4583700000D+01 .2008000000D+00 -.1350000000D-02 .2913693000D+03 .5765600000D+00 .2009000000D-02 .1726000000D+00 -.1028502000D+01 -.5771400000D+01 -.2705500000D+01 -.5853000000D+01 +3 12220110610201109232455722.3 .7620000000D-01 -.9600000000D-03 .2943955000D+03 .5035000000D-01 .2602000000D-02 .8120000000D-01 -.4892761000D+01 -.6082900000D+01 -.3066000000D+00 -.1839000000D+00 -.3490000000D-01 .3900000000D-03 .3555810000D+02 .4083000000D-01 .1164000000D-02 .3440000000D-01 -.3799383000D+01 -.3495100000D+01 -.3606700000D+01 -.3299900000D+01 .5300000000D-01 .4800000000D-03 .2931106000D+03 .3441000000D-01 .2591000000D-02 .1012000000D+00 -.3316863000D+01 -.4612800000D+01 -.5055500000D+01 -.5149300000D+01 +3 12320110923201201062455827.3 -.1007000000D+00 .9900000000D-03 .2948413000D+03 .5990200000D+00 .2050000000D-02 .9000000000D-01 -.1135449000D+01 -.2736200000D+01 -.5791700000D+01 -.3195600000D+01 .3230000000D-01 -.5500000000D-03 .5163170000D+02 .2921800000D+00 .7530000000D-03 .3490000000D-01 -.6146707000D+01 -.6106500000D+01 -.2852200000D+01 -.6226000000D+00 -.6090000000D-01 -.3900000000D-03 .2909196000D+03 .5692200000D+00 .1885000000D-02 .1090000000D+00 -.5839576000D+01 -.1260100000D+01 -.4277800000D+01 -.2002500000D+01 +3 12420120106201204202455932.3 -.8650000000D-01 -.3900000000D-03 .2945181000D+03 .2806000000D-01 .2953000000D-02 .1379000000D+00 -.3690850000D+01 -.4419100000D+01 -.2014800000D+01 -.2528400000D+01 .3440000000D-01 -.1200000000D-03 .7400740000D+02 .7954000000D-01 .1208000000D-02 .4890000000D-01 -.2282236000D+01 -.1911000000D+01 -.5511000000D+01 -.6132100000D+01 .2840000000D-01 -.1330000000D-02 .2858705000D+03 .2878000000D-01 .2987000000D-02 .9750000000D-01 -.2109884000D+01 -.4305100000D+01 -.5944000000D+00 -.1110000000D+01 +3 12520120420201208032456037.3 .2660000000D-01 -.2500000000D-03 .2948684000D+03 .5270800000D+00 .3872000000D-02 .3720000000D-01 -.6010720000D+01 -.4393900000D+01 -.1253100000D+01 -.4913900000D+01 -.1650000000D-01 .1000000000D-03 .6919030000D+02 .1575300000D+00 .1463000000D-02 .1960000000D-01 -.4641912000D+01 -.1648100000D+01 -.4711300000D+01 -.1598300000D+01 -.6310000000D-01 .7500000000D-03 .2872011000D+03 .5239700000D+00 .3845000000D-02 .1920000000D-01 -.4428648000D+01 -.2898000000D+01 -.6057000000D+01 -.3178000000D+01 +3 12620120803201211162456142.3 -.5650000000D-01 .1230000000D-02 .2943755000D+03 .3814100000D+00 .9460000000D-03 .8330000000D-01 -.2099960000D+01 -.3623100000D+01 -.4218400000D+01 -.4156600000D+01 .7500000000D-02 -.5000000000D-03 .6862400000D+02 .1917600000D+00 .4250000000D-03 .3660000000D-01 -.7583680000D+00 -.7208000000D+00 -.1584500000D+01 -.1388300000D+01 -.1085000000D+00 .3100000000D-03 .2873673000D+03 .3731700000D+00 .8900000000D-03 .1140000000D+00 -.5172920000D+00 -.2213500000D+01 -.2727600000D+01 -.2524000000D+01 +3 12720121116201303012456247.3 .3820000000D-01 -.7100000000D-03 .2949919000D+03 .5287300000D+00 .3588000000D-02 .4540000000D-01 -.4679148000D+01 -.6275500000D+01 -.3129100000D+01 -.5586000000D+00 .7200000000D-02 .1100000000D-03 .9137000000D+02 .2377300000D+00 .1403000000D-02 .2500000000D-01 -.3203775000D+01 -.3477400000D+01 -.5789000000D+00 -.4656900000D+01 .7330000000D-01 -.3600000000D-03 .2807933000D+03 .5240000000D+00 .3466000000D-02 .6530000000D-01 -.3098999000D+01 -.4869400000D+01 -.1697700000D+01 -.5349100000D+01 +3 12820130301201306142456352.3 .2037000000D+00 -.8700000000D-03 .2947935000D+03 .4540000000D+00 .4730000000D-03 .2053000000D+00 -.8724720000D+00 -.5595600000D+01 -.3168600000D+01 -.5746100000D+01 -.6690000000D-01 .5800000000D-03 .1024442000D+03 .1679900000D+00 .2660000000D-03 .6710000000D-01 -.5616132000D+01 -.3405400000D+01 -.1026900000D+01 -.3156500000D+01 .5000000000D-03 .1700000000D-02 .2771216000D+03 .4136200000D+00 .1620000000D-03 .1720000000D+00 -.5580865000D+01 -.4045800000D+01 -.2107100000D+01 -.4537500000D+01 +3 12920130614201309272456457.3 .8100000000D-02 .7200000000D-03 .2947877000D+03 .1744400000D+00 .3517000000D-02 .6550000000D-01 -.3145156000D+01 -.1616100000D+01 -.4741500000D+01 -.5025400000D+01 -.1430000000D-01 -.1900000000D-03 .9253840000D+02 .5987000000D-01 .1270000000D-02 .2930000000D-01 -.1633316000D+01 -.5898200000D+01 -.2187300000D+01 -.2120900000D+01 -.5950000000D-01 .5600000000D-03 .2800737000D+03 .1569600000D+00 .3426000000D-02 .5980000000D-01 -.1567304000D+01 -.1329000000D+00 -.3301400000D+01 -.3198000000D+01 +3 13020130927201401102456562.3 -.2670000000D-01 -.9100000000D-03 .2949322000D+03 .5766100000D+00 .1143000000D-02 .1067000000D+00 -.5627880000D+01 -.9290000000D+00 -.3800100000D+01 -.1603800000D+01 .3990000000D-01 .0000000000D+00 .1013236000D+03 .2240900000D+00 .5490000000D-03 .5250000000D-01 -.4066020000D+01 -.4594300000D+01 -.1220600000D+01 -.5423700000D+01 .1137000000D+00 -.9800000000D-03 .2773440000D+03 .5945600000D+00 .1241000000D-02 .1037000000D+00 -.4055544000D+01 -.5781100000D+01 -.2408600000D+01 -.6092200000D+01 +3 13120140110201404252456667.3 .1660000000D-01 -.6300000000D-03 .2948584000D+03 .2307400000D+00 .3843000000D-02 .4240000000D-01 -.1925364000D+01 -.3500500000D+01 -.3483000000D+00 -.5653000000D+00 .5000000000D-03 .3800000000D-03 .1161783000D+03 .7320000000D-01 .1403000000D-02 .2500000000D-01 -.2866620000D+00 -.7445000000D+00 -.4294600000D+01 -.5040300000D+01 .1590000000D-01 .5600000000D-03 .2711663000D+03 .2418300000D+00 .3764000000D-02 .5910000000D-01 -.3667020000D+00 -.2002300000D+01 -.5144500000D+01 -.5645600000D+01 +3 13220140425201408082456772.3 -.1563000000D+00 .1240000000D-02 .2948909000D+03 .6323400000D+00 .3453000000D-02 .1071000000D+00 -.4288697000D+01 -.2681800000D+01 -.5832600000D+01 -.2775500000D+01 .3620000000D-01 -.4200000000D-03 .1138919000D+03 .2409100000D+00 .1302000000D-02 .3160000000D-01 -.2635511000D+01 -.4159000000D+00 -.3540400000D+01 -.4297000000D+00 -.4120000000D-01 -.3600000000D-03 .2728189000D+03 .5992700000D+00 .3213000000D-02 .1166000000D+00 -.2731804000D+01 -.1192200000D+01 -.4349900000D+01 -.1622200000D+01 +3 13320140808201411212456877.3 -.9230000000D-01 -.2300000000D-03 .2947806000D+03 .2394700000D+00 .1878000000D-02 .1284000000D+00 -.3272220000D+00 -.1863000000D+01 -.2104500000D+01 -.2216400000D+01 .4930000000D-01 -.2600000000D-03 .1077778000D+03 .9625000000D-01 .7030000000D-03 .4750000000D-01 -.4970954000D+01 -.5666000000D+01 -.6250000000D-01 -.5896600000D+01 .7040000000D-01 -.1250000000D-02 .2744911000D+03 .2452700000D+00 .1837000000D-02 .9090000000D-01 -.5048928000D+01 -.3451000000D+00 -.6967000000D+00 -.7042000000D+00 +3 13420141121201503062456982.3 .6820000000D-01 .7000000000D-04 .2948303000D+03 .6138100000D+00 .3080000000D-02 .9600000000D-01 -.2895416000D+01 -.4515900000D+01 -.1362500000D+01 -.5244900000D+01 -.3930000000D-01 .4500000000D-03 .1177316000D+03 .2292400000D+00 .1207000000D-02 .2960000000D-01 -.1220747000D+01 -.2370600000D+01 -.5454900000D+01 -.3197300000D+01 -.6660000000D-01 .9600000000D-03 .2710913000D+03 .6084900000D+00 .3080000000D-02 .6420000000D-01 -.1342956000D+01 -.3020900000D+01 -.6142000000D+01 -.3610500000D+01 +3 13520150306201506192457087.3 -.4800000000D-01 .1920000000D-02 .2947703000D+03 .2517100000D+00 .1598000000D-02 .1554000000D+00 -.5420327000D+01 -.3829300000D+01 -.3703300000D+01 -.4311900000D+01 -.5240000000D-01 -.1700000000D-03 .1220513000D+03 .9882000000D-01 .4780000000D-03 .7500000000D-01 -.3723923000D+01 -.1881200000D+01 -.1403600000D+01 -.2253400000D+01 -.1653000000D+00 .3500000000D-03 .2687758000D+03 .2533400000D+00 .1439000000D-02 .1926000000D+00 -.3874392000D+01 -.2438700000D+01 -.2047900000D+01 -.2641300000D+01 +3 13620150619201510022457192.3 -.1610000000D-01 -.1300000000D-03 .2947404000D+03 .3786400000D+00 .4153000000D-02 .3650000000D-01 -.1412581000D+01 -.6120300000D+01 -.2979300000D+01 -.3038000000D+01 .8900000000D-02 -.1500000000D-03 .1166608000D+03 .1216600000D+00 .1569000000D-02 .9800000000D-02 -.6027167000D+01 -.4033500000D+01 -.8610000000D+00 -.6494000000D+00 .1690000000D-01 -.6700000000D-03 .2712120000D+03 .3744400000D+00 .4030000000D-02 .2600000000D-01 -.6143123000D+01 -.4610300000D+01 -.1485700000D+01 -.1920600000D+01 +3 13720151002201601152457297.3 .1274000000D+00 -.6600000000D-03 .2949832000D+03 .5569300000D+00 .5400000000D-03 .1243000000D+00 -.3846864000D+01 -.5440500000D+01 -.1505600000D+01 -.5750000000D+01 -.3100000000D-01 .6600000000D-03 .1187290000D+03 .2324900000D+00 .4130000000D-03 .3660000000D-01 -.2190402000D+01 -.3308500000D+01 -.5465200000D+01 -.3899800000D+01 -.4100000000D-02 .1130000000D-02 .2701173000D+03 .5188200000D+00 .4650000000D-03 .9690000000D-01 -.2292062000D+01 -.3939400000D+01 -.6091700000D+01 -.4570800000D+01 +3 13820160115201604292457402.3 -.3930000000D-01 .6400000000D-03 .2946786000D+03 .4131100000D+00 .4182000000D-02 .8800000000D-02 -.1637260000D+00 -.1756600000D+01 -.4897700000D+01 -.1692100000D+01 -.3500000000D-02 -.2000000000D-04 .1266732000D+03 .1599700000D+00 .1576000000D-02 .1150000000D-01 -.4773892000D+01 -.6140100000D+01 -.3074800000D+01 -.2043700000D+01 .6000000000D-02 .0000000000D+00 .2668320000D+03 .3905700000D+00 .3943000000D-02 .8400000000D-02 -.4898696000D+01 -.2436000000D+00 -.3369200000D+01 -.1226200000D+01 +3 13920160429201608122457507.3 -.6000000000D-02 -.1330000000D-02 .2952329000D+03 .6191000000D+00 .2152000000D-02 .1660000000D+00 -.2578691000D+01 -.9503000000D+00 -.4138200000D+01 -.1345400000D+01 .7340000000D-01 -.2700000000D-03 .1280010000D+03 .2275400000D+00 .8990000000D-03 .7100000000D-01 -.9075580000D+00 -.5504600000D+01 -.2313000000D+01 -.5506100000D+01 .2026000000D+00 -.1310000000D-02 .2661383000D+03 .6016200000D+00 .2237000000D-02 .1731000000D+00 -.1030965000D+01 -.5727000000D+01 -.2672000000D+01 -.5826500000D+01 +3 14020160812201611252457612.3 .9210000000D-01 -.1070000000D-02 .2946426000D+03 .7966000000D-01 .2863000000D-02 .9540000000D-01 -.4858782000D+01 -.6115600000D+01 -.3076000000D+00 -.1357000000D+00 .1200000000D-02 .4800000000D-03 .1275456000D+03 .6194000000D-01 .1080000000D-02 .4320000000D-01 -.3217343000D+01 -.3716400000D+01 -.4780200000D+01 -.4680200000D+01 .6170000000D-01 .5100000000D-03 .2659511000D+03 .5966000000D-01 .2757000000D-02 .1113000000D+00 -.3305454000D+01 -.5035100000D+01 -.5008600000D+01 -.5199700000D+01 +3 14120161125201703102457717.3 -.1088000000D+00 .1170000000D-02 .2950167000D+03 .6794200000D+00 .2589000000D-02 .9460000000D-01 -.1120239000D+01 -.2736300000D+01 -.5801100000D+01 -.3254500000D+01 -.2560000000D-01 -.1800000000D-03 .1339575000D+03 .2506600000D+00 .1064000000D-02 .5020000000D-01 -.5743149000D+01 -.8635000000D+00 -.3909500000D+01 -.1990900000D+01 -.5510000000D-01 -.3900000000D-03 .2632629000D+03 .6270900000D+00 .2258000000D-02 .1062000000D+00 -.5856545000D+01 -.1218400000D+01 -.4320000000D+01 -.1926200000D+01 +3 14220170310201706232457822.3 -.1075000000D+00 -.2900000000D-03 .2940861000D+03 .4306000000D-01 .2907000000D-02 .1588000000D+00 -.3684626000D+01 -.2664100000D+01 -.1989300000D+01 -.2523900000D+01 .2130000000D-01 -.6000000000D-03 .1361713000D+03 .4065000000D-01 .1096000000D-02 .4580000000D-01 -.1986769000D+01 -.5382000000D+00 -.4430000000D+00 -.9192000000D+00 .3900000000D-01 -.1370000000D-02 .2624807000D+03 .1652000000D-01 .2793000000D-02 .1064000000D+00 -.2148464000D+01 -.7984000000D+00 -.4774000000D+00 -.1007400000D+01 +3 14320170623201710062457927.3 .3040000000D-01 -.2600000000D-03 .2945950000D+03 .5575500000D+00 .4348000000D-02 .3870000000D-01 -.5986971000D+01 -.4379100000D+01 -.1239900000D+01 -.4919700000D+01 -.2730000000D-01 .3500000000D-03 .1378396000D+03 .2297100000D+00 .1685000000D-02 .7000000000D-02 -.4292196000D+01 -.2782900000D+01 -.5823400000D+01 -.2804400000D+01 -.6360000000D-01 .7600000000D-03 .2616046000D+03 .5138500000D+00 .4095000000D-02 .1950000000D-01 -.4450461000D+01 -.2816900000D+01 -.5977400000D+01 -.2946700000D+01 +3 14420171006201801192458032.3 -.6200000000D-01 .1530000000D-02 .2941048000D+03 .4692800000D+00 .8830000000D-03 .1025000000D+00 -.2082316000D+01 -.3628000000D+01 -.4455700000D+01 -.4178900000D+01 -.5120000000D-01 .4000000000D-04 .1401247000D+03 .1708300000D+00 .4870000000D-03 .6140000000D-01 -.3853990000D+00 -.1822000000D+01 -.3341000000D+01 -.2344200000D+01 -.1230000000D+00 .3200000000D-03 .2604484000D+03 .4477000000D+00 .5800000000D-03 .1306000000D+00 -.5487970000D+00 -.2142900000D+01 -.2556900000D+01 -.2480800000D+01 +3 14520180119201805042458137.3 .2580000000D-01 -.5200000000D-03 .2938023000D+03 .5479200000D+00 .4008000000D-02 .3360000000D-01 -.4686523000D+01 -.2040000000D-01 -.3153700000D+01 -.7501000000D+00 .3390000000D-01 -.3400000000D-03 .1387305000D+03 .1823900000D+00 .1516000000D-02 .2050000000D-01 -.2936635000D+01 -.4967600000D+01 -.1621800000D+01 -.5952500000D+01 .4860000000D-01 -.2900000000D-03 .2619812000D+03 .5108800000D+00 .3668000000D-02 .4310000000D-01 -.3165677000D+01 -.4683900000D+01 -.1580100000D+01 -.5120000000D+01 +3 14620180504201808172458242.3 .2177000000D+00 -.9100000000D-03 .2930568000D+03 .5172800000D+00 .7900000000D-03 .2170000000D+00 -.8720070000D+00 -.5589200000D+01 -.2854500000D+01 -.5738300000D+01 -.5000000000D-03 .6600000000D-03 .1345645000D+03 .2141000000D+00 .2400000000D-03 .6860000000D-01 -.5367487000D+01 -.3914000000D+01 -.8576000000D+00 -.4500400000D+01 -.3090000000D-01 .1780000000D-02 .2650489000D+03 .4502300000D+00 .4610000000D-03 .1622000000D+00 -.5639052000D+01 -.3972600000D+01 -.1219000000D+01 -.4356800000D+01 +3 14720180817201811302458347.3 .1330000000D-01 .9200000000D-03 .2931506000D+03 .1416200000D+00 .3828000000D-02 .8510000000D-01 -.3134880000D+01 -.1650500000D+01 -.4759800000D+01 -.5009000000D+01 -.3870000000D-01 .2200000000D-03 .1378569000D+03 .5855000000D-01 .1462000000D-02 .3980000000D-01 -.1362325000D+01 -.1889000000D+00 -.3325600000D+01 -.2884500000D+01 -.7320000000D-01 .6100000000D-03 .2625062000D+03 .1134100000D+00 .3400000000D-02 .7350000000D-01 -.1617324000D+01 -.1075000000D+00 -.3178400000D+01 -.3132200000D+01 +3 14820181130201903152458452.3 -.4030000000D-01 -.8000000000D-03 .2930692000D+03 .6632900000D+00 .1692000000D-02 .1154000000D+00 -.5640785000D+01 -.9612000000D+00 -.3933400000D+01 -.1689800000D+01 .4810000000D-01 -.6200000000D-03 .1346840000D+03 .2599900000D+00 .8390000000D-03 .3890000000D-01 -.3844271000D+01 -.5882300000D+01 -.2143100000D+01 -.1425000000D+00 .1121000000D+00 -.9100000000D-03 .2649582000D+03 .6184400000D+00 .1680000000D-02 .1016000000D+00 -.4126067000D+01 -.5635000000D+01 -.2428700000D+01 -.5989400000D+01 +3 14920190315201906282458557.3 .2240000000D-01 -.8100000000D-03 .2927359000D+03 .1802700000D+00 .3776000000D-02 .5530000000D-01 -.1949713000D+01 -.3503800000D+01 -.3607000000D+00 -.7166000000D+00 .1420000000D-01 .1400000000D-03 .1224342000D+03 .1024500000D+00 .1406000000D-02 .2870000000D-01 -.1032830000D+00 -.2836500000D+01 -.5465100000D+01 -.5625400000D+01 .3020000000D-01 .5200000000D-03 .2706730000D+03 .1620500000D+00 .3418000000D-02 .7420000000D-01 -.4321350000D+00 -.1642800000D+01 -.4970100000D+01 -.5550700000D+01 +3 15020190628201910112458662.3 -.1597000000D+00 .1310000000D-02 .2929878000D+03 .6563700000D+00 .3889000000D-02 .1073000000D+00 -.4297682000D+01 -.2690900000D+01 -.5833600000D+01 -.2776900000D+01 -.2400000000D-01 -.8000000000D-04 .1219699000D+03 .2320200000D+00 .1438000000D-02 .4960000000D-01 -.2460268000D+01 -.1270200000D+01 -.4416900000D+01 -.1730500000D+01 -.2050000000D-01 -.4800000000D-03 .2713795000D+03 .5916400000D+00 .3408000000D-02 .1023000000D+00 -.2777962000D+01 -.1067500000D+01 -.4214400000D+01 -.1497400000D+01 +3 15120191011202001242458767.3 -.1200000000D+00 -.1200000000D-03 .2930958000D+03 .3268900000D+00 .1602000000D-02 .1550000000D+00 -.3427980000D+00 -.1890500000D+01 -.2195800000D+01 -.2254700000D+01 .3860000000D-01 -.7200000000D-03 .1253004000D+03 .1486000000D+00 .7880000000D-03 .4640000000D-01 -.4813324000D+01 -.4091000000D+00 -.1343300000D+01 -.7436000000D+00 .8290000000D-01 -.1370000000D-02 .2688238000D+03 .2978400000D+00 .1466000000D-02 .9990000000D-01 -.5104264000D+01 -.2344000000D+00 -.6157000000D+00 -.6010000000D+00 +3 15220200124202005082458872.3 .5930000000D-01 -.1100000000D-03 .2934104000D+03 .6065200000D+00 .3392000000D-02 .7290000000D-01 -.2932072000D+01 -.4545200000D+01 -.1401700000D+01 -.5319700000D+01 .6000000000D-02 .3100000000D-03 .1141928000D+03 .2616500000D+00 .1296000000D-02 .3800000000D-01 -.1099051000D+01 -.3474100000D+01 -.1681000000D+00 -.4783100000D+01 -.5730000000D-01 .7300000000D-03 .2741010000D+03 .5543300000D+00 .3160000000D-02 .4570000000D-01 -.1403928000D+01 -.2881100000D+01 -.6036700000D+01 -.3503300000D+01 +3 15320200508202008212458977.3 -.4950000000D-01 .1890000000D-02 .2937320000D+03 .3040300000D+00 .1232000000D-02 .1559000000D+00 -.5443760000D+01 -.3848600000D+01 -.3675600000D+01 -.4316600000D+01 -.6270000000D-01 .4300000000D-03 .1030178000D+03 .9437000000D-01 .5150000000D-03 .7070000000D-01 -.3593985000D+01 -.2626500000D+01 -.2803400000D+01 -.3059000000D+01 -.1573000000D+00 .1200000000D-03 .2777844000D+03 .2985600000D+00 .1048000000D-02 .1871000000D+00 -.3908742000D+01 -.2330900000D+01 -.1736600000D+01 -.2531800000D+01 +3 15420200821202012042459082.3 -.3600000000D-01 -.2000000000D-04 .2935991000D+03 .3395400000D+00 .4268000000D-02 .5450000000D-01 -.1430243000D+01 -.6150600000D+01 -.3008800000D+01 -.3010500000D+01 .1090000000D-01 -.4200000000D-03 .1127010000D+03 .1315600000D+00 .1657000000D-02 .1940000000D-01 -.5906439000D+01 -.5148100000D+01 -.1855800000D+01 -.1719500000D+01 .1360000000D-01 -.7500000000D-03 .2740183000D+03 .3210600000D+00 .3973000000D-02 .3760000000D-01 -.6181471000D+01 -.4481000000D+01 -.1358100000D+01 -.1788900000D+01 +3 15520201204202103192459187.3 .1272000000D+00 -.8600000000D-03 .2939618000D+03 .6052900000D+00 .9990000000D-03 .1156000000D+00 -.3882285000D+01 -.5482400000D+01 -.1994000000D+01 -.5815700000D+01 .2830000000D-01 .2500000000D-03 .1117993000D+03 .2322800000D+00 .6170000000D-03 .5170000000D-01 -.2080954000D+01 -.4310500000D+01 -.2280000000D+00 -.5166900000D+01 -.1160000000D-01 .1090000000D-02 .2742656000D+03 .5456100000D+00 .7820000000D-03 .8880000000D-01 -.2348179000D+01 -.3817500000D+01 -.2898000000D+00 -.4469200000D+01 +4 15620100101201004112455197.4 -.1051700000D+01 -.1800000000D-03 .3770279000D+03 .4405000000D-01 .2869000000D-02 .5711000000D+00 .5349526000D+01 .3743700000D+01 .6732000000D+00 -.4092900000D+01 -.7530000000D-01 .6600000000D-03 .4111210000D+02 .2715000000D-01 .1340000000D-02 .8460000000D-01 .6272957000D+01 .3622600000D+01 .3941000000D+01 -.1898300000D+01 .4356000000D+00 .3530000000D-02 .3760716000D+03 .1590000000D-01 .2458000000D-02 .2413000000D+00 .6408040000D+00 .5893500000D+01 .2201300000D+01 -.2323700000D+01 +4 15720100411201007202455297.4 -.9853000000D+00 .1150000000D-02 .3766017000D+03 .3286600000D+00 .5045000000D-02 .4017000000D+00 .2529844000D+01 .4096600000D+01 .9520000000D+00 -.3552400000D+01 -.5470000000D-01 .2200000000D-03 .3195860000D+02 .2071800000D+00 .2148000000D-02 .4120000000D-01 .3068364000D+01 .1103500000D+01 .4203700000D+01 -.3032700000D+01 .7259000000D+00 .1570000000D-02 .3772257000D+03 .3161000000D+00 .4891000000D-02 .4454000000D+00 .4103661000D+01 .5635800000D+01 .2504000000D+01 -.1899500000D+01 +4 15820100720201010282455397.4 -.9208000000D+00 .1100000000D-03 .3763093000D+03 .7475100000D+00 .1254000000D-02 .4285000000D+00 .5891785000D+01 .4350400000D+01 .3342900000D+01 -.2980300000D+01 -.1150000000D-01 .7600000000D-03 .3300670000D+02 .2572400000D+00 .7410000000D-03 .3980000000D-01 .1822610000D+00 .1277400000D+01 .8210000000D-01 -.4100900000D+01 .8997000000D+00 -.1320000000D-02 .3774466000D+03 .7367900000D+00 .1165000000D-02 .4484000000D+00 .1183027000D+01 .5876700000D+01 .4799800000D+01 -.1885800000D+01 +4 15920101028201102052455497.4 -.8982000000D+00 .0000000000D+00 .3770982000D+03 .8690800000D+00 .4397000000D-02 .4303000000D+00 .2800601000D+01 .1201200000D+01 .4373000000D+01 -.3310400000D+01 .4780000000D-01 .8100000000D-03 .5587330000D+02 .3221700000D+00 .1855000000D-02 .9440000000D-01 .3985727000D+01 .4174400000D+01 .1090600000D+01 -.1642500000D+01 .7817000000D+00 .9100000000D-03 .3746020000D+03 .8628500000D+00 .4407000000D-02 .3412000000D+00 .4379615000D+01 .2694200000D+01 .5853400000D+01 -.1401300000D+01 +4 16020110205201105162455597.4 -.8400000000D+00 .2370000000D-02 .3779049000D+03 .2801700000D+00 .3530000000D-03 .3333000000D+00 .6087986000D+01 .1477200000D+01 .9821000000D+00 -.3481800000D+01 .8690000000D-01 .4000000000D-04 .7002790000D+02 .1609200000D+00 .2170000000D-03 .1749000000D+00 .1135971000D+01 .4480600000D+01 .4884400000D+01 -.1663800000D+01 .7389000000D+00 .4310000000D-02 .3710971000D+03 .2708100000D+00 .3800000000D-03 .4802000000D+00 .1384987000D+01 .2789100000D+01 .3691200000D+01 -.9444000000D+00 +4 16120110516201108242455697.4 -.6294000000D+00 .1460000000D-02 .3768342000D+03 .7769000000D-01 .4566000000D-02 .3450000000D+00 .3288213000D+01 .4587100000D+01 .1639200000D+01 -.2447400000D+01 .9640000000D-01 .3000000000D-03 .5351100000D+02 .8731000000D-01 .1885000000D-02 .7660000000D-01 .4453717000D+01 .1747800000D+01 .4672300000D+01 -.1550900000D+01 .1023500000D+01 .1040000000D-02 .3742066000D+03 .8819000000D-01 .4570000000D-02 .4663000000D+00 .4865667000D+01 .6041300000D+01 .3156500000D+01 -.9140000000D+00 +4 16220110824201112022455797.4 -.5421000000D+00 -.7100000000D-03 .3771480000D+03 .8828800000D+00 .1111000000D-02 .5439000000D+00 .3142300000D+00 .5029200000D+01 .2881600000D+01 -.2187700000D+01 .1608000000D+00 .9300000000D-03 .6326790000D+02 .3153200000D+00 .6470000000D-03 .7170000000D-01 .1578373000D+01 .1661300000D+01 .5945200000D+01 -.3310000000D-01 .1155900000D+01 -.1570000000D-02 .3730191000D+03 .8528500000D+00 .9710000000D-03 .3262000000D+00 .1891908000D+01 .2376000000D+00 .4442000000D+01 -.6787000000D+00 +4 16320111202201203112455897.4 -.6040000000D+00 .1150000000D-02 .3775748000D+03 .7216900000D+00 .5023000000D-02 .3767000000D+00 .3503587000D+01 .1902300000D+01 .5046700000D+01 -.2096800000D+01 .2480000000D+00 .3400000000D-03 .9196020000D+02 .2519700000D+00 .2012000000D-02 .1142000000D+00 .4949544000D+01 .4602800000D+01 .1532400000D+01 -.5868000000D+00 .1025300000D+01 .6700000000D-03 .3667147000D+03 .7099700000D+00 .4950000000D-02 .4048000000D+00 .5081795000D+01 .3380600000D+01 .2256000000D+00 -.3758000000D+00 +4 16420120311201206192455997.4 -.5261000000D+00 .4570000000D-02 .3775336000D+03 .5017100000D+00 .2308000000D-02 .2677000000D+00 .5612290000D+00 .2165100000D+01 .5307700000D+01 -.1222300000D+01 .2877000000D+00 -.7400000000D-03 .9734280000D+02 .2372000000D+00 .9170000000D-03 .1081000000D+00 .2039164000D+01 .5059500000D+01 .1737200000D+01 -.1065200000D+01 .1002900000D+01 .2350000000D-02 .3654907000D+03 .4617900000D+00 .1932000000D-02 .4873000000D+00 .2141388000D+01 .3627100000D+01 .4773000000D+00 -.3890000000D+00 +4 16520120619201209272456097.4 -.2004000000D+00 .1450000000D-02 .3773268000D+03 .1914800000D+00 .3760000000D-02 .4167000000D+00 .4037343000D+01 .2587700000D+01 .2307300000D+01 -.1196200000D+01 .2659000000D+00 .2200000000D-03 .8266880000D+02 .4243000000D-01 .1454000000D-02 .6790000000D-01 .5443467000D+01 .4949400000D+01 .5055500000D+01 -.5870000000D-01 .1162100000D+01 .1400000000D-03 .3681998000D+03 .1838000000D+00 .3852000000D-02 .3732000000D+00 .5616030000D+01 .4225100000D+01 .3753000000D+01 -.7380000000D-01 +4 16620120927201301052456197.4 -.9630000000D-01 -.1410000000D-02 .3780071000D+03 .9717500000D+00 .2005000000D-02 .4646000000D+00 .1015156000D+01 .5697100000D+01 .2879500000D+01 -.1424700000D+01 .3255000000D+00 .8600000000D-03 .9942140000D+02 .3523800000D+00 .9360000000D-03 .1705000000D+00 .2492674000D+01 .2047500000D+01 .5731800000D+01 -.5670900000D+01 .1237500000D+01 -.1230000000D-02 .3644544000D+03 .9382600000D+00 .1807000000D-02 .4212000000D+00 .2591904000D+01 .9048000000D+00 .4426500000D+01 -.5638900000D+01 +4 16720130105201304152456297.4 -.1816000000D+00 .1430000000D-02 .3775716000D+03 .4754600000D+00 .4789000000D-02 .3781000000D+00 .4213572000D+01 .2632200000D+01 .5771300000D+01 -.1020300000D+01 .4065000000D+00 -.3000000000D-04 .1228996000D+03 .1524100000D+00 .1784000000D-02 .1625000000D+00 .5769541000D+01 .5002300000D+01 .2006500000D+01 -.5614400000D+01 .1172800000D+01 -.2900000000D-03 .3572548000D+03 .4742500000D+00 .4833000000D-02 .4486000000D+00 .5786330000D+01 .4105200000D+01 .9408000000D+00 -.5522300000D+01 +4 16820130415201307242456397.4 -.2880000000D-01 .3940000000D-02 .3775112000D+03 .5417300000D+00 .4031000000D-02 .4750000000D+00 .1331897000D+01 .2918800000D+01 .6056800000D+01 -.4327000000D+00 .4070000000D+00 -.8200000000D-03 .1200025000D+03 .2308500000D+00 .1581000000D-02 .8550000000D-01 .2885209000D+01 .5623600000D+01 .2335400000D+01 -.5141100000D+01 .1149600000D+01 -.4200000000D-03 .3586634000D+03 .5447400000D+00 .3964000000D-02 .2549000000D+00 .2903792000D+01 .4409500000D+01 .1291400000D+01 -.5471500000D+01 +4 16920130724201311012456497.4 .2565000000D+00 .9000000000D-03 .3774387000D+03 .4388700000D+00 .2883000000D-02 .4748000000D+00 .4773798000D+01 .3262500000D+01 .2898300000D+01 -.4036000000D+00 .3744000000D+00 .1100000000D-03 .1121233000D+03 .1544800000D+00 .1053000000D-02 .1287000000D+00 .1522700000D-01 .5693200000D+01 .5277500000D+01 -.4791800000D+01 .1127700000D+01 -.5000000000D-03 .3602414000D+03 .4426100000D+00 .2813000000D-02 .2456000000D+00 .6731700000D-01 .4778000000D+01 .4300600000D+01 -.4930200000D+01 +4 17020131101201402092456597.4 .3447000000D+00 -.1490000000D-02 .3782275000D+03 .9982700000D+00 .3167000000D-02 .3332000000D+00 .1710830000D+01 .9110000000D-01 .3344000000D+01 -.1800000000D+00 .4142000000D+00 .6600000000D-03 .1310273000D+03 .3690000000D+00 .1344000000D-02 .2063000000D+00 .3289065000D+01 .2429100000D+01 .5832300000D+01 -.4930100000D+01 .1146200000D+01 -.3100000000D-03 .3543097000D+03 .9823200000D+00 .3138000000D-02 .5156000000D+00 .3281943000D+01 .1585900000D+01 .4863700000D+01 -.4861600000D+01 +4 17120140209201405202456697.4 .3360000000D+00 .8700000000D-03 .3773966000D+03 .1693100000D+00 .3695000000D-02 .3797000000D+00 .4934840000D+01 .3426700000D+01 .2652000000D+00 -.5825400000D+01 .4487000000D+00 -.8000000000D-04 .1456819000D+03 .3748000000D-01 .1194000000D-02 .1779000000D+00 .2697100000D+00 .5207200000D+01 .2562600000D+01 -.4756700000D+01 .1135200000D+01 -.5500000000D-03 .3486511000D+03 .1451500000D+00 .3502000000D-02 .5337000000D+00 .2121970000D+00 .4861000000D+01 .1677300000D+01 -.4739400000D+01 +4 17220140520201408282456797.4 .5307000000D+00 .1950000000D-02 .3777294000D+03 .4483100000D+00 .5058000000D-02 .4187000000D+00 .2104457000D+01 .3692800000D+01 .5481000000D+00 -.5787500000D+01 .3980000000D+00 -.4800000000D-03 .1390092000D+03 .1694300000D+00 .1882000000D-02 .1460000000D+00 .3709469000D+01 .6183800000D+01 .2889400000D+01 -.4027200000D+01 .1038500000D+01 -.1290000000D-02 .3511788000D+03 .4545000000D+00 .5005000000D-02 .3432000000D+00 .3669113000D+01 .5142700000D+01 .2015700000D+01 -.4009900000D+01 +4 17320140828201412062456897.4 .6692000000D+00 .2400000000D-03 .3772194000D+03 .6772500000D+00 .1897000000D-02 .3290000000D+00 .5496426000D+01 .3965100000D+01 .3285200000D+01 -.5853700000D+01 .3787000000D+00 -.1000000000D-04 .1383128000D+03 .2552800000D+00 .7660000000D-03 .1908000000D+00 .8093500000D+00 .6201500000D+01 .5248000000D+01 -.3887400000D+01 .9491000000D+00 -.6500000000D-03 .3514726000D+03 .6713400000D+00 .1634000000D-02 .3847000000D+00 .7813300000D+00 .5424700000D+01 .4735300000D+01 -.3648700000D+01 +4 17420141206201503162456997.4 .7091000000D+00 -.6500000000D-03 .3777170000D+03 .9608100000D+00 .4368000000D-02 .4326000000D+00 .2402569000D+01 .7856000000D+00 .3968100000D+01 -.5213900000D+01 .3945000000D+00 .3200000000D-03 .1544936000D+03 .3594500000D+00 .1738000000D-02 .1745000000D+00 .4041979000D+01 .2830300000D+01 .6089600000D+01 -.3972300000D+01 .9353000000D+00 .4100000000D-03 .3453352000D+03 .9407500000D+00 .4373000000D-02 .4032000000D+00 .3961315000D+01 .2275300000D+01 .5446400000D+01 -.4073200000D+01 +4 17520150316201506242457097.4 .7825000000D+00 .1160000000D-02 .3778276000D+03 .1714600000D+00 .1581000000D-02 .6464000000D+00 .5666922000D+01 .1042500000D+01 .9533000000D+00 -.4914300000D+01 .3604000000D+00 -.1000000000D-03 .1603651000D+03 .7542000000D-01 .4280000000D-03 .1223000000D+00 .1047577000D+01 .3107700000D+01 .3326000000D+01 -.3327100000D+01 .8688000000D+00 .5000000000D-04 .3418425000D+03 .1940700000D+00 .1248000000D-02 .2977000000D+00 .9325330000D+00 .2341300000D+01 .2619200000D+01 -.3910600000D+01 +4 17620150624201510022457197.4 .9443000000D+00 .9200000000D-03 .3772610000D+03 .2347200000D+00 .5268000000D-02 .4376000000D+00 .2869853000D+01 .4364800000D+01 .1249500000D+01 -.4708200000D+01 .2796000000D+00 -.2700000000D-03 .1546301000D+03 .7646000000D-01 .1961000000D-02 .1760000000D+00 .4513466000D+01 .3585000000D+00 .3362100000D+01 -.2856900000D+01 .7029000000D+00 -.5500000000D-03 .3446497000D+03 .2352500000D+00 .5066000000D-02 .3618000000D+00 .4425759000D+01 .5873500000D+01 .2750000000D+01 -.2979500000D+01 +4 17720151002201601102457297.4 .9829000000D+00 -.2700000000D-03 .3771252000D+03 .8914800000D+00 .1183000000D-02 .2590000000D+00 .6202525000D+01 .4641900000D+01 .3027200000D+01 -.4175000000D+01 .2783000000D+00 -.1800000000D-03 .1585657000D+03 .3426400000D+00 .6830000000D-03 .1907000000D+00 .1566396000D+01 .3824000000D+00 .4918200000D+01 -.3032000000D+01 .6841000000D+00 -.5300000000D-03 .3433172000D+03 .8450800000D+00 .7990000000D-03 .4428000000D+00 .1472962000D+01 .6106400000D+01 .4451300000D+01 -.2967500000D+01 +4 17820160110201604192457397.4 .9658000000D+00 .4700000000D-03 .3771573000D+03 .8373600000D+00 .5302000000D-02 .4477000000D+00 .3092064000D+01 .1479000000D+01 .4628600000D+01 -.4322400000D+01 .2788000000D+00 -.2100000000D-03 .1681100000D+03 .3124200000D+00 .1997000000D-02 .1551000000D+00 .4776740000D+01 .3278600000D+01 .1858000000D+00 -.2686800000D+01 .6845000000D+00 -.1400000000D-03 .3393093000D+03 .7872000000D+00 .5009000000D-02 .3238000000D+00 .4634913000D+01 .2996500000D+01 .6134200000D+01 -.2827800000D+01 +4 17920160419201607282457497.4 .1026600000D+01 .2280000000D-02 .3773645000D+03 .4805600000D+00 .1365000000D-02 .5537000000D+00 .1263670000D+00 .1753100000D+01 .4949200000D+01 -.4376100000D+01 .1896000000D+00 -.5600000000D-03 .1686216000D+03 .1631500000D+00 .4790000000D-03 .2221000000D+00 .1828451000D+01 .3612400000D+01 .3991000000D+00 -.1959400000D+01 .5047000000D+00 -.4500000000D-03 .3386872000D+03 .4260800000D+00 .1066000000D-02 .3805000000D+00 .1668534000D+01 .3211200000D+01 .6165000000D+01 -.1998100000D+01 +4 18020160728201611052457597.4 .1135300000D+01 .1030000000D-02 .3769434000D+03 .7177000000D-01 .4636000000D-02 .3704000000D+00 .3620470000D+01 .2479500000D+01 .1910800000D+01 -.3759800000D+01 .8990000000D-01 -.2800000000D-03 .1661850000D+03 .4594000000D-01 .1809000000D-02 .2312000000D+00 .5297480000D+01 .4515100000D+01 .3738000000D+01 -.1883700000D+01 .2958000000D+00 .1300000000D-03 .3392389000D+03 .4611000000D-01 .4523000000D-02 .4444000000D+00 .5164751000D+01 .4076100000D+01 .3444400000D+01 -.1927000000D+01 +4 18120161105201702132457697.4 .1178200000D+01 -.6600000000D-03 .3771971000D+03 .1041140000D+01 .1949000000D-02 .4599000000D+00 .6087340000D+00 .5295600000D+01 .2642600000D+01 -.3098200000D+01 .1029000000D+00 -.3000000000D-03 .1706959000D+03 .4030800000D+00 .9300000000D-03 .1423000000D+00 .2298935000D+01 .8371000000D+00 .4665400000D+01 -.1923600000D+01 .3730000000D+00 -.3300000000D-03 .3378371000D+03 .9517000000D+00 .1560000000D-02 .3050000000D+00 .2147195000D+01 .5311000000D+00 .4076700000D+01 -.2161300000D+01 +4 18220170213201705242457797.4 .1144700000D+01 .3800000000D-03 .3765447000D+03 .5931900000D+00 .5315000000D-02 .4309000000D+00 .3783946000D+01 .2178400000D+01 .5315800000D+01 -.3194100000D+01 .1036000000D+00 -.8700000000D-03 .1718950000D+03 .2253500000D+00 .2007000000D-02 .1514000000D+00 .5510386000D+01 .3776100000D+01 .6495000000D+00 -.1436600000D+01 .4198000000D+00 -.1790000000D-02 .3377082000D+03 .5523000000D+00 .4978000000D-02 .3064000000D+00 .5315224000D+01 .3752900000D+01 .6095000000D+00 -.1707600000D+01 +4 18320170524201709012457897.4 .1124600000D+01 .1910000000D-02 .3762583000D+03 .6116500000D+00 .3773000000D-02 .2657000000D+00 .8832050000D+00 .2466200000D+01 .5604600000D+01 -.2986200000D+01 -.1440000000D-01 -.1160000000D-02 .1714863000D+03 .2175400000D+00 .1406000000D-02 .2497000000D+00 .2613222000D+01 .4162100000D+01 .1106300000D+01 -.1243300000D+01 .1589000000D+00 -.2130000000D-02 .3386000000D+03 .5529700000D+00 .3272000000D-02 .5290000000D+00 .2415298000D+01 .4076000000D+01 .9187000000D+00 -.1359400000D+01 +4 18420170901201712102457997.4 .1143900000D+01 .1340000000D-02 .3766403000D+03 .3734100000D+00 .3579000000D-02 .3575000000D+00 .4350880000D+01 .2845000000D+01 .2524500000D+01 -.2368700000D+01 -.1245000000D+00 -.3200000000D-03 .1726635000D+03 .1733300000D+00 .1439000000D-02 .2221000000D+00 .6062651000D+01 .4768700000D+01 .3998300000D+01 -.1110600000D+01 -.7960000000D-01 .1000000000D-03 .3362471000D+03 .3441900000D+00 .3381000000D-02 .4734000000D+00 .5885697000D+01 .4404700000D+01 .4055800000D+01 -.1231800000D+01 +4 18520171210201803202458097.4 .1248900000D+01 -.9500000000D-03 .3770038000D+03 .1085220000D+01 .3244000000D-02 .5083000000D+00 .1286263000D+01 .5945900000D+01 .2964400000D+01 -.2426500000D+01 -.9920000000D-01 -.3200000000D-03 .1731677000D+03 .4203200000D+00 .1330000000D-02 .1448000000D+00 .3019381000D+01 .1288700000D+01 .4748000000D+01 -.4215000000D+00 .2570000000D-01 -.1000000000D-03 .3371482000D+03 .9882500000D+00 .2850000000D-02 .2747000000D+00 .2814518000D+01 .1248900000D+01 .4551800000D+01 -.5996000000D+00 +4 18620180320201806282458197.4 .1266900000D+01 -.1490000000D-02 .3756287000D+03 .2715400000D+00 .4286000000D-02 .4267000000D+00 .4487230000D+01 .2949500000D+01 .6078300000D+01 -.2309500000D+01 -.9370000000D-01 -.1250000000D-02 .1671420000D+03 .1056100000D+00 .1662000000D-02 .1778000000D+00 .6254543000D+01 .4308400000D+01 .1143700000D+01 -.1930000000D-01 .7790000000D-01 -.2620000000D-02 .3408323000D+03 .2508500000D+00 .4015000000D-02 .3403000000D+00 .6011645000D+01 .4484300000D+01 .1364200000D+01 -.2025000000D+00 +4 18720180628201810062458297.4 .1129100000D+01 -.7000000000D-04 .3760314000D+03 .5517500000D+00 .5188000000D-02 .4046000000D+00 .1646211000D+01 .3228700000D+01 .8730000000D-01 -.1584200000D+01 -.2275000000D+00 -.1140000000D-02 .1694585000D+03 .2112900000D+00 .2057000000D-02 .1753000000D+00 .3402805000D+01 .4649000000D+01 .1655400000D+01 -.2248000000D+00 -.2150000000D+00 -.2540000000D-02 .3396057000D+03 .5226100000D+00 .4851000000D-02 .3639000000D+00 .3170182000D+01 .4859100000D+01 .1688900000D+01 -.4844000000D+00 +4 18820181006201901142458397.4 .1025100000D+01 .1330000000D-02 .3758801000D+03 .6533100000D+00 .2299000000D-02 .5153000000D+00 .5061410000D+01 .3524200000D+01 .2967000000D+01 -.1428500000D+01 -.3133000000D+00 -.2100000000D-03 .1724649000D+03 .2845600000D+00 .1026000000D-02 .1378000000D+00 .5267920000D+00 .5201800000D+01 .4037900000D+01 -.1071000000D+00 -.4047000000D+00 -.3600000000D-03 .3374210000D+03 .6187900000D+00 .1899000000D-02 .3089000000D+00 .3059340000D+00 .5080900000D+01 .4541800000D+01 -.3968000000D+00 +4 18920190114201904242458497.4 .1178800000D+01 -.1010000000D-02 .3762747000D+03 .1017410000D+01 .4275000000D-02 .3843000000D+00 .1960298000D+01 .3322000000D+00 .3523900000D+01 -.1514100000D+01 -.2749000000D+00 -.2200000000D-03 .1654322000D+03 .3917800000D+00 .1673000000D-02 .1946000000D+00 .3740213000D+01 .1729600000D+01 .4985200000D+01 -.5608900000D+01 -.3475000000D+00 .1000000000D-04 .3418961000D+03 .9406100000D+00 .3977000000D-02 .4257000000D+00 .3484854000D+01 .1956900000D+01 .5162700000D+01 -.5906100000D+01 +4 19020190424201908022458597.4 .1241500000D+01 -.3300000000D-02 .3755433000D+03 .5458000000D-01 .2519000000D-02 .2311000000D+00 .5207074000D+01 .3905000000D+00 .5681000000D+00 -.8360000000D+00 -.2832000000D+00 -.8900000000D-03 .1554788000D+03 .3396000000D-01 .9020000000D-03 .2518000000D+00 .7326230000D+00 .1518300000D+01 .1637100000D+01 -.5389900000D+01 -.3932000000D+00 -.1340000000D-02 .3464576000D+03 .8048000000D-01 .1993000000D-02 .5345000000D+00 .4456730000D+00 .2144100000D+01 .2185400000D+01 -.5665600000D+01 +4 19120190802201911102458697.4 .9650000000D+00 -.1250000000D-02 .3755716000D+03 .3545900000D+00 .5717000000D-02 .4051000000D+00 .2404077000D+01 .3948100000D+01 .8097000000D+00 -.5624000000D+00 -.4118000000D+00 -.3600000000D-03 .1630177000D+03 .1452300000D+00 .2214000000D-02 .1580000000D+00 .4192886000D+01 .5003200000D+01 .2163500000D+01 -.5217600000D+01 -.6384000000D+00 -.1110000000D-02 .3427616000D+03 .3217800000D+00 .5175000000D-02 .3378000000D+00 .3926985000D+01 .5629600000D+01 .2429700000D+01 -.5478500000D+01 +4 19220191110202002182458797.4 .8121000000D+00 .1000000000D-02 .3752336000D+03 .8792800000D+00 .1228000000D-02 .4982000000D+00 .5755795000D+01 .4199200000D+01 .2802300000D+01 -.7800000000D+00 -.4324000000D+00 .6000000000D-04 .1637286000D+03 .3529600000D+00 .8620000000D-03 .1147000000D+00 .1261998000D+01 .5632500000D+01 .3824200000D+01 -.4708100000D+01 -.6942000000D+00 -.7800000000D-03 .3428570000D+03 .8096700000D+00 .7980000000D-03 .2849000000D+00 .9957240000D+00 .5773100000D+01 .4362300000D+01 -.5067300000D+01 +4 19320200218202005282458897.4 .9595000000D+00 -.9400000000D-03 .3755523000D+03 .8644700000D+00 .4920000000D-02 .3724000000D+00 .2640356000D+01 .1025100000D+01 .4179500000D+01 -.2472000000D+00 -.3800000000D+00 .0000000000D+00 .1481005000D+03 .3294300000D+00 .1918000000D-02 .1912000000D+00 .4474994000D+01 .2162100000D+01 .5288800000D+01 -.4755200000D+01 -.7073000000D+00 -.1700000000D-03 .3503524000D+03 .7994100000D+00 .4576000000D-02 .4299000000D+00 .4166802000D+01 .2660200000D+01 .5822600000D+01 -.5093600000D+01 +4 19420200528202009052458997.4 .9404000000D+00 -.2960000000D-02 .3759836000D+03 .3637500000D+00 .1770000000D-03 .5412000000D+00 .5941979000D+01 .1311000000D+01 .5163300000D+01 -.5700300000D+01 -.4209000000D+00 -.1000000000D-04 .1389327000D+03 .1605400000D+00 .9100000000D-04 .1974000000D+00 .1517955000D+01 .2141600000D+01 .5698400000D+01 -.4733300000D+01 -.8768000000D+00 .4200000000D-03 .3532343000D+03 .3315200000D+00 .3850000000D-03 .3778000000D+00 .1187752000D+01 .2876800000D+01 .5140500000D+01 -.5016700000D+01 +4 19520200905202012142459097.4 .5950000000D+00 -.5200000000D-03 .3750015000D+03 .5622000000D-01 .5099000000D-02 .4841000000D+00 .3152754000D+01 .4054700000D+01 .1464500000D+01 -.5769400000D+01 -.5027000000D+00 .5300000000D-03 .1513178000D+03 .7449000000D-01 .2010000000D-02 .1280000000D+00 .4978805000D+01 .4796300000D+01 .2603900000D+01 -.3976700000D+01 -.9987000000D+00 .2700000000D-03 .3483192000D+03 .4706000000D-01 .4689000000D-02 .2980000000D+00 .4676417000D+01 .1545000000D+00 .3146700000D+01 -.4319200000D+01 +4 19620201214202103242459197.4 .5215000000D+00 .5000000000D-03 .3752297000D+03 .1008190000D+01 .1722000000D-02 .3027000000D+00 .1574890000D+00 .4858200000D+01 .2299300000D+01 -.6117200000D+01 -.4480000000D+00 .3500000000D-03 .1453826000D+03 .3762700000D+00 .9280000000D-03 .1581000000D+00 .1999537000D+01 .6029000000D+01 .3672900000D+01 -.3519100000D+01 -.9433000000D+00 -.9300000000D-03 .3514205000D+03 .9093200000D+00 .1362000000D-02 .4430000000D+00 .1682608000D+01 .1928000000D+00 .3851300000D+01 -.4111700000D+01 +5 19720100101201004012455197.4 -.3945000000D+00 .4310000000D-02 .5264005000D+03 .6796000000D-01 .4719000000D-02 .5062000000D+00 .3160772000D+01 .2122300000D+01 .4846200000D+01 .3600700000D+01 .1601000000D+00 -.2030000000D-02 .5631840000D+02 .3936000000D-01 .2022000000D-02 .1169000000D+00 .4143210000D+01 .1002900000D+01 .1808000000D+01 .4234000000D+00 .6875000000D+00 .1660000000D-02 .5250021000D+03 .8613000000D-01 .4690000000D-02 .3304000000D+00 .4738128000D+01 .3353700000D+01 .3120000000D-01 -.1438800000D+01 +5 19820100401201006302455287.4 -.1724000000D+00 .1450000000D-02 .5264356000D+03 .6739200000D+00 .6701000000D-02 .3116000000D+00 .2744104000D+01 .4339700000D+01 .1192500000D+01 .2683400000D+01 .3930000000D-01 -.5900000000D-03 .4369030000D+02 .3354100000D+00 .2943000000D-02 .2890000000D-01 .3415663000D+01 .1313900000D+01 .4429400000D+01 -.1884000000D+00 .6668000000D+00 .3000000000D-03 .5266244000D+03 .6381300000D+00 .6370000000D-02 .2737000000D+00 .4318544000D+01 .5872300000D+01 .2736000000D+01 -.2247200000D+01 +5 19920100630201009282455377.4 .4620000000D-01 -.2470000000D-02 .5257656000D+03 .6807000000D+00 .3146000000D-02 .2588000000D+00 .2283501000D+01 .7539000000D+00 .3849000000D+00 .1003400000D+01 -.5250000000D-01 .1310000000D-02 .4143950000D+02 .2611100000D+00 .1369000000D-02 .8760000000D-01 .2793072000D+01 .4003400000D+01 .3382800000D+01 .3107000000D+01 .6688000000D+00 -.2370000000D-02 .5270565000D+03 .6490600000D+00 .3305000000D-02 .1517000000D+00 .3857246000D+01 .2283300000D+01 .1931800000D+01 .2233000000D+01 +5 20020100928201012272455467.4 -.1631000000D+00 .3100000000D-03 .5270096000D+03 .1231820000D+01 .3627000000D-02 .1411000000D+00 .1649960000D+01 .5280000000D-01 .3353400000D+01 -.1331000000D+00 .6580000000D-01 -.5300000000D-03 .6473080000D+02 .4844800000D+00 .1657000000D-02 .9740000000D-01 .2761218000D+01 .3107600000D+01 .2135000000D+00 .1083800000D+01 .7538000000D+00 -.2750000000D-02 .5244192000D+03 .1234420000D+01 .3691000000D-02 .2542000000D+00 .3227759000D+01 .1561600000D+01 .4829000000D+01 .1199100000D+01 +5 20120101227201103272455557.4 -.2301000000D+00 -.1740000000D-02 .5266651000D+03 .4137000000D+00 .6388000000D-02 .2392000000D+00 .1020855000D+01 .5764400000D+01 .2608300000D+01 -.6200000000D-02 .4840000000D-01 .9100000000D-03 .9481670000D+02 .1191700000D+00 .2638000000D-02 .3990000000D-01 .2365301000D+01 .2435500000D+01 .5615300000D+01 -.2101200000D+01 .4299000000D+00 .9300000000D-03 .5193081000D+03 .3940700000D+00 .6122000000D-02 .1319000000D+00 .2598910000D+01 .9905000000D+00 .4112800000D+01 .1445800000D+01 +5 20220110327201106252455647.4 -.2112000000D+00 -.2260000000D-02 .5267370000D+03 .7658300000D+00 .5269000000D-02 .2431000000D+00 .5698480000D+00 .2140500000D+01 .5266900000D+01 -.4980000000D+00 .5890000000D-01 .8900000000D-03 .8542880000D+02 .3610400000D+00 .2315000000D-02 .6680000000D-01 .1873175000D+01 .5217400000D+01 .2005800000D+01 -.2433700000D+01 .3893000000D+00 .1730000000D-02 .5213013000D+03 .7571000000D+00 .5319000000D-02 .1079000000D+00 .2148302000D+01 .3678000000D+01 .5319000000D+00 .5162000000D+00 +5 20320110625201109232455737.4 -.3194000000D+00 .1590000000D-02 .5265575000D+03 .4101200000D+00 .4499000000D-02 .3896000000D+00 .1457890000D+00 .4885500000D+01 .4712900000D+01 -.2549500000D+01 .1038000000D+00 -.8200000000D-03 .7228690000D+02 .1504600000D+00 .1797000000D-02 .8760000000D-01 .1341931000D+01 .1619100000D+01 .1338300000D+01 .1927000000D+00 .6657000000D+00 -.6700000000D-03 .5228153000D+03 .3953900000D+00 .4489000000D-02 .2701000000D+00 .1722286000D+01 .1832000000D+00 .6151200000D+01 -.8866000000D+00 +5 20420110923201112222455827.4 -.4463000000D+00 .6000000000D-03 .5269731000D+03 .1238960000D+01 .2534000000D-02 .3358000000D+00 .5820432000D+01 .4229600000D+01 .1371600000D+01 .2853500000D+01 .1392000000D+00 .5000000000D-04 .9912610000D+02 .4773800000D+00 .1299000000D-02 .6160000000D-01 .9028690000D+00 .8329000000D+00 .4445900000D+01 -.1473500000D+01 .4688000000D+00 .1610000000D-02 .5189593000D+03 .1204330000D+01 .2259000000D-02 .3870000000D+00 .1115385000D+01 .5708900000D+01 .2896500000D+01 -.2257000000D+01 +5 20520111222201203212455917.4 -.3726000000D+00 .7000000000D-04 .5273300000D+03 .6964900000D+00 .6979000000D-02 .2096000000D+00 .5173785000D+01 .3586200000D+01 .4454000000D+00 .1436700000D+01 .1110000000D+00 -.1800000000D-03 .1322137000D+03 .2344900000D+00 .2759000000D-02 .6610000000D-01 .3764740000D+00 .6261400000D+01 .3201600000D+01 .2861900000D+01 .4915000000D+00 -.4900000000D-03 .5106800000D+03 .6966400000D+00 .7013000000D-02 .1942000000D+00 .4670410000D+00 .5081400000D+01 .1922000000D+01 .2853400000D+01 +5 20620120321201206192456007.4 -.2304000000D+00 .9300000000D-03 .5272017000D+03 .7255000000D+00 .3213000000D-02 .1388000000D+00 .4685190000D+01 .6278900000D+01 .3114700000D+01 .1057000000D+00 .6610000000D-01 -.7400000000D-03 .1311400000D+03 .3217000000D+00 .1404000000D-02 .9040000000D-01 .6174471000D+01 .2840500000D+01 .5852800000D+01 .1433700000D+01 .6886000000D+00 -.4360000000D-02 .5111750000D+03 .7589700000D+00 .3433000000D-02 .3164000000D+00 .6259692000D+01 .1433300000D+01 .4484700000D+01 .9068000000D+00 +5 20720120619201209172456097.4 -.3744000000D+00 -.1230000000D-02 .5270730000D+03 .1095900000D+00 .5767000000D-02 .2157000000D+00 .4284763000D+01 .2916000000D+01 .2613700000D+01 .8620000000D-01 .1017000000D+00 .6200000000D-03 .1137458000D+03 .3432000000D-01 .2230000000D-02 .4700000000D-02 .5716642000D+01 .5461400000D+01 .5381700000D+01 .1639200000D+01 .3622000000D+00 .1420000000D-02 .5148567000D+03 .1241400000D+00 .5548000000D-02 .1562000000D+00 .5862750000D+01 .4406700000D+01 .4104600000D+01 .2115600000D+01 +5 20820120917201212162456187.4 -.2809000000D+00 -.3590000000D-02 .5275636000D+03 .1171510000D+01 .1185000000D-02 .2407000000D+00 .3708000000D+01 .2108700000D+01 .6016900000D+01 -.3720000000D+00 .4250000000D-01 .1190000000D-02 .1331409000D+03 .4519100000D+00 .9050000000D-03 .3290000000D-01 .5194314000D+01 .4806500000D+01 .2508300000D+01 -.2549800000D+01 .3318000000D+00 -.7500000000D-03 .5104478000D+03 .1156190000D+01 .1433000000D-02 .1767000000D+00 .5283736000D+01 .3606900000D+01 .1283200000D+01 .6181000000D+00 +5 20920121216201303162456277.4 -.4151000000D+00 -.1070000000D-02 .5274762000D+03 .9508700000D+00 .7120000000D-02 .1810000000D+00 .3050256000D+01 .1448300000D+01 .4589800000D+01 -.2132400000D+01 .1060000000D+00 -.9000000000D-04 .1647864000D+03 .3275000000D+00 .2689000000D-02 .6130000000D-01 .4609781000D+01 .3913500000D+01 .8531000000D+00 -.5716000000D+00 .3438000000D+00 -.9400000000D-03 .5012965000D+03 .9264000000D+00 .6924000000D-02 .2248000000D+00 .4622095000D+01 .2919600000D+01 .6049400000D+01 -.6187000000D+00 +5 21020130316201306142456367.4 -.8108000000D+00 .4440000000D-02 .5278949000D+03 .6156800000D+00 .1057000000D-02 .4897000000D+00 .2520106000D+01 .4099000000D+01 .6168000000D+00 .3143500000D+01 .2113000000D+00 -.5600000000D-03 .1703377000D+03 .2520100000D+00 .5070000000D-03 .8730000000D-01 .4097708000D+01 .4590000000D+00 .3271700000D+01 -.1199000000D+01 .2572000000D+00 .4880000000D-02 .4985724000D+03 .5760800000D+00 .7270000000D-03 .4902000000D+00 .4090240000D+01 .5490000000D+01 .1637200000D+01 -.2222800000D+01 +5 21120130614201309122456457.4 -.3674000000D+00 -.9900000000D-03 .5270897000D+03 .1778200000D+00 .6563000000D-02 .2102000000D+00 .2133334000D+01 .3607900000D+01 .5207000000D+00 .1625100000D+01 .7320000000D-01 .2300000000D-03 .1537489000D+03 .6545000000D-01 .2462000000D-02 .8470000000D-01 .3673197000D+01 .9310000000D-01 .3085500000D+01 .3408800000D+01 .4088000000D+00 -.1550000000D-02 .5044405000D+03 .1878400000D+00 .6607000000D-02 .1255000000D+00 .3707167000D+01 .5114400000D+01 .1995500000D+01 .3156200000D+01 +5 21220130912201312112456547.4 -.4096000000D+00 .1900000000D-03 .5275013000D+03 .1062610000D+01 .1330000000D-02 .1265000000D+00 .1591409000D+01 .2200000000D-01 .5135200000D+01 .4819000000D+00 .1289000000D+00 -.1020000000D-02 .1647318000D+03 .4040800000D+00 .8260000000D-03 .9760000000D-01 .3149461000D+01 .2508400000D+01 .9578000000D+00 .1535400000D+01 .4941000000D+00 -.3660000000D-02 .5009532000D+03 .1067940000D+01 .9870000000D-03 .1946000000D+00 .3164754000D+01 .1476400000D+01 .2584000000D+00 .1324000000D+01 +5 21320131211201403112456637.4 -.5856000000D+00 .1660000000D-02 .5278298000D+03 .1134160000D+01 .6496000000D-02 .1194000000D+00 .9304450000D+00 .5590300000D+01 .2460600000D+01 -.1037600000D+01 .1444000000D+00 -.6400000000D-03 .1915120000D+03 .4106500000D+00 .2525000000D-02 .8590000000D-01 .2537183000D+01 .1577700000D+01 .4806300000D+01 .8855000000D+00 .3241000000D+00 -.1110000000D-02 .4915943000D+03 .1110490000D+01 .6465000000D-02 .1676000000D+00 .2495436000D+01 .8041000000D+00 .3949100000D+01 .1032300000D+01 +5 21420140311201406092456727.4 -.3180000000D+00 -.5350000000D-02 .5269347000D+03 .3507900000D+00 .2164000000D-02 .4226000000D+00 .3598000000D+00 .1800800000D+01 .2262100000D+01 .7060000000D-01 -.3160000000D-01 .1580000000D-02 .2006207000D+03 .1554500000D+00 .5120000000D-03 .4360000000D-01 .1988955000D+01 .4322000000D+01 .4626600000D+01 .3072300000D+01 -.1520000000D-01 .5200000000D-03 .4879572000D+03 .3289000000D+00 .1962000000D-02 .1963000000D+00 .1922879000D+01 .3361700000D+01 .3563700000D+01 .1024700000D+01 +5 21520140609201409072456817.4 -.5493000000D+00 .1800000000D-03 .5272964000D+03 .4679500000D+00 .7185000000D-02 .2379000000D+00 .6255202000D+01 .1540500000D+01 .4680900000D+01 -.1948000000D+01 .1106000000D+00 -.1900000000D-03 .1882888000D+03 .1598200000D+00 .2636000000D-02 .7650000000D-01 .1577105000D+01 .3962800000D+01 .7601000000D+00 -.1434000000D+00 .2379000000D+00 .1000000000D-04 .4925770000D+03 .4598300000D+00 .6979000000D-02 .2077000000D+00 .1537801000D+01 .3003800000D+01 .6144800000D+01 -.4226000000D+00 +5 21620140907201412062456907.4 -.6988000000D+00 .1690000000D-02 .5269984000D+03 .9393500000D+00 .2130000000D-02 .3792000000D+00 .5753526000D+01 .4192700000D+01 .3597000000D+01 .3226600000D+01 .1403000000D+00 -.3100000000D-03 .1920958000D+03 .3567500000D+00 .1081000000D-02 .1115000000D+00 .1074741000D+01 .2371000000D+00 .5409000000D+01 -.1320300000D+01 .1998000000D+00 .9300000000D-03 .4914296000D+03 .8904700000D+00 .2195000000D-02 .3320000000D+00 .1035809000D+01 .5645300000D+01 .5170100000D+01 -.1943300000D+01 +5 21720141206201503062456997.4 -.6405000000D+00 -.7500000000D-03 .5275373000D+03 .1266380000D+01 .5646000000D-02 .2721000000D+00 .5094477000D+01 .3483700000D+01 .4006000000D+00 .1821400000D+01 .2530000000D-01 .8100000000D-03 .2126307000D+03 .4681200000D+00 .2155000000D-02 .1687000000D+00 .4534930000D+00 .5546200000D+01 .2540800000D+01 .3606600000D+01 -.6700000000D-02 .1490000000D-02 .4833391000D+03 .1234080000D+01 .5511000000D-02 .3641000000D+00 .3695400000D+00 .4961200000D+01 .1834300000D+01 .3510400000D+01 +5 21820150306201506042457087.4 -.5647000000D+00 .2530000000D-02 .5264073000D+03 .2181000000D-01 .4651000000D-02 .1700000000D-01 .4489928000D+01 .4610700000D+01 .6118500000D+01 .6029000000D+00 .1365000000D+00 -.1590000000D-02 .2211806000D+03 .2430000000D-01 .1540000000D-02 .1069000000D+00 .6153397000D+01 .2036900000D+01 .1939200000D+01 .1267800000D+01 .2997000000D+00 -.2990000000D-02 .4794285000D+03 .5437000000D-01 .4232000000D-02 .2198000000D+00 .6039913000D+01 .5001000000D+00 .1402200000D+01 .1134500000D+01 +5 21920150604201509022457177.4 -.5653000000D+00 .7100000000D-03 .5269425000D+03 .6952900000D+00 .6969000000D-02 .1186000000D+00 .4083800000D+01 .5654000000D+01 .2515900000D+01 -.9100000000D-02 .7690000000D-01 -.3800000000D-03 .2148109000D+03 .2467800000D+00 .2648000000D-02 .7980000000D-01 .5734554000D+01 .1506000000D+01 .4650100000D+01 .1311700000D+01 .1612000000D+00 -.9400000000D-03 .4822256000D+03 .6846900000D+00 .6829000000D-02 .1654000000D+00 .5638839000D+01 .8812000000D+00 .4011400000D+01 .1271400000D+01 +5 22020150902201512012457267.4 -.5036000000D+00 -.2800000000D-02 .5271373000D+03 .7244400000D+00 .3647000000D-02 .2994000000D+00 .3623336000D+01 .2056800000D+01 .1753200000D+01 -.1073000000D+00 -.5300000000D-02 .7300000000D-03 .2141635000D+03 .2988900000D+00 .1363000000D-02 .4330000000D-01 .5265124000D+01 .4228600000D+01 .3480900000D+01 .2095600000D+01 -.3400000000D-01 -.2100000000D-03 .4818354000D+03 .6970600000D+00 .3338000000D-02 .1629000000D+00 .5179334000D+01 .3564800000D+01 .3208400000D+01 .1208700000D+01 +5 22120151201201602292457357.4 -.4247000000D+00 -.2180000000D-02 .5269653000D+03 .1369290000D+01 .4665000000D-02 .1863000000D+00 .2976238000D+01 .1360600000D+01 .4598500000D+01 -.1090600000D+01 .3020000000D-01 -.1150000000D-02 .2278564000D+03 .5065500000D+00 .1802000000D-02 .1295000000D+00 .4644762000D+01 .3288900000D+01 .4217000000D+00 .1766000000D+00 .1350000000D-01 -.2950000000D-02 .4769867000D+03 .1271790000D+01 .4201000000D-02 .2807000000D+00 .4524255000D+01 .2866400000D+01 .6099200000D+01 .8370000000D-01 +5 22220160229201605292457447.4 -.7391000000D+00 .8100000000D-03 .5264841000D+03 .3158600000D+00 .6265000000D-02 .3186000000D+00 .2340277000D+01 .7867000000D+00 .3931200000D+01 .3257600000D+01 -.2950000000D-01 .1040000000D-02 .2330119000D+03 .1198600000D+00 .2362000000D-02 .1478000000D+00 .4034940000D+01 .2499400000D+01 .5729700000D+01 -.1697500000D+01 -.1960000000D+00 .2830000000D-02 .4737971000D+03 .3125200000D+00 .6159000000D-02 .3480000000D+00 .3880953000D+01 .2396600000D+01 .5479600000D+01 -.1897200000D+01 +5 22320160529201608272457537.4 -.7612000000D+00 .1010000000D-02 .5267858000D+03 .8355600000D+00 .6051000000D-02 .2987000000D+00 .1904975000D+01 .3505200000D+01 .3603000000D+00 .2407300000D+01 -.3000000000D-02 .1020000000D-02 .2311460000D+03 .3003000000D+00 .2271000000D-02 .1615000000D+00 .3592185000D+01 .5343900000D+01 .2241000000D+01 -.2432700000D+01 -.1609000000D+00 .3370000000D-02 .4749734000D+03 .8065000000D+00 .5723000000D-02 .4074000000D+00 .3447104000D+01 .4993300000D+01 .1822500000D+01 -.2622300000D+01 +5 22420160827201611252457627.4 -.5231000000D+00 .3900000000D-03 .5265373000D+03 .4687100000D+00 .5044000000D-02 .1443000000D+00 .1481004000D+01 .6266300000D+01 .5960900000D+01 .1102600000D+01 .5340000000D-01 -.1500000000D-02 .2303079000D+03 .2048100000D+00 .1905000000D-02 .6980000000D-01 .3156202000D+01 .1964800000D+01 .1445700000D+01 .1917400000D+01 .1097000000D+00 -.3550000000D-02 .4748293000D+03 .4585200000D+00 .4554000000D-02 .1351000000D+00 .3028679000D+01 .1422900000D+01 .1268400000D+01 .1589100000D+01 +5 22520161125201702232457717.4 -.7066000000D+00 .3410000000D-02 .5269963000D+03 .1373520000D+01 .3178000000D-02 .8380000000D-01 .8552480000D+00 .5516900000D+01 .2598600000D+01 -.1510500000D+01 .4330000000D-01 -.8600000000D-03 .2369493000D+03 .5380700000D+00 .1545000000D-02 .6910000000D-01 .2549134000D+01 .1042400000D+01 .4610300000D+01 .1378700000D+01 .1800000000D-01 -.2000000000D-02 .4723606000D+03 .1293550000D+01 .3200000000D-02 .1602000000D+00 .2394712000D+01 .7866000000D+00 .4121200000D+01 .1183700000D+01 +5 22620170223201705242457807.4 -.5005000000D+00 -.1070000000D-02 .5258315000D+03 .6462200000D+00 .7450000000D-02 .2140000000D+00 .1957970000D+00 .4904400000D+01 .1762100000D+01 -.3350000000D+00 -.7510000000D-01 -.4000000000D-04 .2372251000D+03 .2423900000D+00 .2756000000D-02 .9320000000D-01 .1918712000D+01 .1889000000D+00 .3354700000D+01 .1132300000D+01 -.2405000000D+00 -.4600000000D-03 .4727076000D+03 .5984100000D+00 .6867000000D-02 .1956000000D+00 .1729276000D+01 .1807000000D+00 .3317100000D+01 .8818000000D+00 +5 22720170524201708222457897.4 -.3158000000D+00 -.4920000000D-02 .5263370000D+03 .8705500000D+00 .4320000000D-02 .3245000000D+00 .6003815000D+01 .1296100000D+01 .4372000000D+01 -.4083000000D+00 -.1135000000D+00 -.1300000000D-03 .2367174000D+03 .3063500000D+00 .1551000000D-02 .1240000000D+00 .1444294000D+01 .2950900000D+01 .6157400000D+01 .3959000000D+00 -.3070000000D+00 -.1130000000D-02 .4727105000D+03 .7696100000D+00 .3659000000D-02 .3031000000D+00 .1255238000D+01 .2861900000D+01 .5960700000D+01 .3530000000D+00 +5 22820170822201711202457987.4 -.7509000000D+00 .2150000000D-02 .5256858000D+03 .1947900000D+00 .6151000000D-02 .3778000000D+00 .5610880000D+01 .4192800000D+01 .3917700000D+01 .3544700000D+01 -.1820000000D-01 .1000000000D-04 .2388259000D+03 .9620000000D-01 .2445000000D-02 .1293000000D+00 .1032295000D+01 .6271300000D+01 .5523600000D+01 -.1156400000D+01 -.1827000000D+00 .8700000000D-03 .4715343000D+03 .1580700000D+00 .5896000000D-02 .2763000000D+00 .8643850000D+00 .5582700000D+01 .5485800000D+01 -.1543700000D+01 +5 22920171120201802182458077.4 -.6742000000D+00 .5000000000D-04 .5261393000D+03 .1333060000D+01 .2144000000D-02 .2948000000D+00 .5013298000D+01 .3420100000D+01 .8389000000D+00 .2187300000D+01 -.1382000000D+00 .7700000000D-03 .2404001000D+03 .5312100000D+00 .1131000000D-02 .1914000000D+00 .4506040000D+00 .5062800000D+01 .2622500000D+01 -.2449200000D+01 -.3797000000D+00 .1670000000D-02 .4713864000D+03 .1246650000D+01 .1815000000D-02 .4138000000D+00 .2640620000D+00 .4959400000D+01 .2159100000D+01 -.2533400000D+01 +5 23020180218201805192458167.4 -.5274000000D+00 -.1700000000D-03 .5255353000D+03 .9127900000D+00 .7577000000D-02 .2250000000D+00 .4340469000D+01 .2730000000D+01 .5871700000D+01 .1144200000D+01 -.1207000000D+00 -.1700000000D-03 .2341383000D+03 .3465000000D+00 .2876000000D-02 .8720000000D-01 .6090673000D+01 .4190900000D+01 .1046500000D+01 .2906500000D+01 -.3598000000D+00 .0000000000D+00 .4749487000D+03 .8404300000D+00 .6996000000D-02 .2151000000D+00 .5868459000D+01 .4339700000D+01 .1199800000D+01 .2783100000D+01 +5 23120180519201808172458257.4 -.6354000000D+00 .4610000000D-02 .5247638000D+03 .6980900000D+00 .1410000000D-02 .1656000000D+00 .3822638000D+01 .5348300000D+01 .1863700000D+01 -.2345700000D+01 -.1300000000D-02 -.8200000000D-03 .2318221000D+03 .2704300000D+00 .6400000000D-03 .7460000000D-01 .5581286000D+01 .5524000000D+00 .3692100000D+01 .1284900000D+01 -.6780000000D-01 -.2340000000D-02 .4766482000D+03 .6621000000D+00 .1583000000D-02 .2288000000D+00 .5351206000D+01 .7363000000D+00 .3678300000D+01 .8806000000D+00 +5 23220180817201811152458347.4 -.5059000000D+00 -.1450000000D-02 .5254183000D+03 .1384100000D+00 .7354000000D-02 .2817000000D+00 .3444995000D+01 .4913400000D+01 .1820700000D+01 -.2550000000D-01 -.1501000000D+00 .2700000000D-03 .2383253000D+03 .6664000000D-01 .2791000000D-02 .8780000000D-01 .5181988000D+01 .5632000000D+01 .3293600000D+01 .1703000000D+01 -.3926000000D+00 .8000000000D-04 .4721842000D+03 .1244200000D+00 .6646000000D-02 .1791000000D+00 .4973649000D+01 .2756000000D+00 .3396900000D+01 .1365500000D+01 +5 23320181115201902132458437.4 -.3563000000D+00 -.1820000000D-02 .5252412000D+03 .1256700000D+01 .1232000000D-02 .2746000000D+00 .2885865000D+01 .1294000000D+01 .5573900000D+01 -.7262000000D+00 -.1162000000D+00 -.1270000000D-02 .2375161000D+03 .4833200000D+00 .9930000000D-03 .1712000000D+00 .4631370000D+01 .2833200000D+01 .9791000000D+00 .4693000000D+00 -.3773000000D+00 -.2610000000D-02 .4735629000D+03 .1121820000D+01 .9570000000D-03 .3046000000D+00 .4412784000D+01 .2877400000D+01 .1099800000D+01 .3440000000D+00 +5 23420190213201905142458527.4 -.4072000000D+00 .3900000000D-03 .5251045000D+03 .1108930000D+01 .7083000000D-02 .2491000000D+00 .2206894000D+01 .5978000000D+00 .3751300000D+01 -.2573300000D+01 -.1170000000D+00 -.6800000000D-03 .2246156000D+03 .4256200000D+00 .2724000000D-02 .1291000000D+00 .3987833000D+01 .1891700000D+01 .5027700000D+01 -.6691000000D+00 -.4108000000D+00 -.1730000000D-02 .4802907000D+03 .1020100000D+01 .6479000000D-02 .2456000000D+00 .3733622000D+01 .2210600000D+01 .5359700000D+01 -.7788000000D+00 +5 23520190514201908122458617.4 -.5939000000D+00 -.1550000000D-02 .5245076000D+03 .4302300000D+00 .1436000000D-02 .3207000000D+00 .1649984000D+01 .3211600000D+01 .3405800000D+01 .2273500000D+01 -.2993000000D+00 .2100000000D-02 .2168561000D+03 .1841100000D+00 .5350000000D-03 .2176000000D+00 .3445796000D+01 .4332800000D+01 .4912800000D+01 -.2404500000D+01 -.7555000000D+00 .5760000000D-02 .4836607000D+03 .4218000000D+00 .1398000000D-02 .5719000000D+00 .3174762000D+01 .4779600000D+01 .5387700000D+01 -.2465500000D+01 +5 23620190812201911102458707.4 -.4806000000D+00 .2400000000D-03 .5247975000D+03 .4369600000D+00 .7798000000D-02 .2133000000D+00 .1268787000D+01 .2806700000D+01 .5955200000D+01 .1575800000D+01 -.1402000000D+00 -.3800000000D-03 .2280345000D+03 .1754400000D+00 .3031000000D-02 .8160000000D-01 .3043636000D+01 .3935100000D+01 .1027300000D+01 .3189200000D+01 -.4103000000D+00 -.7000000000D-03 .4781445000D+03 .3983200000D+00 .7136000000D-02 .1949000000D+00 .2794668000D+01 .4497300000D+01 .1307400000D+01 .2954800000D+01 +5 23720191110202002082458797.4 -.5584000000D+00 .4080000000D-02 .5251710000D+03 .1071020000D+01 .1709000000D-02 .1180000000D-01 .7527300000D+00 .5445200000D+01 .4697100000D+01 -.8978000000D+00 -.1054000000D+00 -.5700000000D-03 .2275913000D+03 .4245200000D+00 .1122000000D-02 .4820000000D-01 .2529283000D+01 .6139000000D+00 .5444400000D+01 .2184900000D+01 -.3044000000D+00 -.2540000000D-02 .4781744000D+03 .9931400000D+00 .1382000000D-02 .1759000000D+00 .2277654000D+01 .7932000000D+00 .6226400000D+01 .1422600000D+01 +5 23820200208202005082458887.4 -.4950000000D+00 .2500000000D-02 .5247475000D+03 .1251440000D+01 .6229000000D-02 .1500000000D+00 .7943800000D-01 .4744800000D+01 .1627300000D+01 -.1066100000D+01 -.2264000000D+00 .1000000000D-02 .2091916000D+03 .4653500000D+00 .2300000000D-02 .7240000000D-01 .1894001000D+01 .5883700000D+01 .2784500000D+01 .2322500000D+01 -.5333000000D+00 .3500000000D-03 .4877438000D+03 .1128790000D+01 .5565000000D-02 .1398000000D+00 .1606401000D+01 .1083000000D+00 .3292400000D+01 .1062300000D+01 +5 23920200508202008062458977.4 -.4180000000D-01 -.3650000000D-02 .5246067000D+03 .1373500000D+00 .3700000000D-02 .3048000000D+00 .5768644000D+01 .9169000000D+00 .1185900000D+01 -.5553000000D+00 -.1148000000D+00 -.1860000000D-02 .1937528000D+03 .6478000000D-01 .1617000000D-02 .2168000000D+00 .1331303000D+01 .1486800000D+01 .2244600000D+01 .5263000000D+00 -.5775000000D+00 -.2710000000D-02 .4931060000D+03 .9303000000D-01 .3704000000D-02 .3937000000D+00 .1016154000D+01 .2498800000D+01 .2817000000D+01 .4748000000D+00 +5 24020200806202011042459067.4 -.3200000000D+00 -.9200000000D-03 .5245765000D+03 .6731300000D+00 .7574000000D-02 .2447000000D+00 .5370648000D+01 .6763000000D+00 .3815400000D+01 -.2125100000D+01 -.1865000000D+00 -.4200000000D-03 .2069434000D+03 .2813800000D+00 .2950000000D-02 .1361000000D+00 .9082570000D+00 .1658400000D+01 .4950600000D+01 -.3955000000D+00 -.5788000000D+00 -.6300000000D-03 .4881499000D+03 .6107700000D+00 .6865000000D-02 .2747000000D+00 .6148200000D+00 .2330800000D+01 .5444300000D+01 -.5949000000D+00 +5 24120201104202102022459157.4 -.5118000000D+00 .1180000000D-02 .5243529000D+03 .8522200000D+00 .2945000000D-02 .3207000000D+00 .4896907000D+01 .3351700000D+01 .2847600000D+01 .2636200000D+01 -.2713000000D+00 .1280000000D-02 .2107895000D+03 .3363100000D+00 .1295000000D-02 .1673000000D+00 .4299840000D+00 .4628700000D+01 .3651800000D+01 -.2255200000D+01 -.6960000000D+00 .2200000000D-02 .4864848000D+03 .7904300000D+00 .2578000000D-02 .4334000000D+00 .1416840000D+00 .4942300000D+01 .4634600000D+01 -.2280600000D+01 +6 24220100101201003122455197.3 -.2288980000D+02 .2301000000D-01 .1219199600D+04 .2962700000D+00 .1512400000D-01 .1760840000D+02 .5833616000D+01 .4254300000D+01 .1132900000D+01 .2699000000D+01 .2942900000D+01 -.1257000000D-01 .1285444000D+03 .5622000000D-01 .6203000000D-02 .1753100000D+01 .5236000000D+00 .1494800000D+01 .4333500000D+01 .3620000000D+01 .4733810000D+02 .1784000000D-01 .1216718800D+04 .2382500000D+00 .1399000000D-01 .1753140000D+02 .1125903000D+01 .5867100000D+01 .2680200000D+01 .4268600000D+01 +6 24320100312201005212455267.3 -.2079050000D+02 .6173000000D-01 .1218846900D+04 .1865210000D+01 .8710000000D-02 .1762240000D+02 .2038484000D+01 .3623500000D+01 .4116000000D+00 .1384600000D+01 .1804200000D+01 -.2509000000D-01 .1092510000D+03 .8122600000D+00 .4479000000D-02 .1410400000D+01 .2835600000D+01 .5577000000D+00 .3607300000D+01 .1972300000D+01 .4884220000D+02 .1752000000D-01 .1219698600D+04 .1859270000D+01 .9064000000D-02 .1759710000D+02 .3613052000D+01 .5193200000D+01 .2032000000D+01 .2954800000D+01 +6 24420100521201007302455337.3 -.1682280000D+02 -.2524000000D-01 .1218477000D+04 .3156300000D+00 .1527500000D-01 .1755170000D+02 .4556280000D+01 .6155300000D+01 .2990000000D+01 .1200000000D-01 .2211000000D+00 .1499000000D-01 .9238490000D+02 .4323000000D-01 .6496000000D-02 .1379900000D+01 .4985047000D+01 .3212800000D+01 .6218800000D+01 .5439000000D+00 .5012900000D+02 -.1074000000D-01 .1220420800D+04 .3017700000D+00 .1468400000D-01 .1755370000D+02 .6129503000D+01 .1287400000D+01 .4492300000D+01 .1579900000D+01 +6 24520100730201010082455407.3 -.1896190000D+02 -.8842000000D-01 .1218330500D+04 .1881990000D+01 .5014000000D-02 .1756250000D+02 .6788590000D+00 .5416000000D+01 .4884000000D+01 .4814600000D+01 .1446900000D+01 .4056000000D-01 .1055719000D+03 .8941200000D+00 .2262000000D-02 .1875200000D+01 .1396592000D+01 .2345300000D+01 .1305700000D+01 .5786100000D+01 .4954030000D+02 -.4765000000D-01 .1219583200D+04 .1803510000D+01 .5284000000D-02 .1755940000D+02 .2253227000D+01 .6572000000D+00 .1594000000D+00 .1014000000D+00 +6 24620101008201012172455477.3 -.2528450000D+02 -.7982000000D-01 .1219311600D+04 .2507150000D+01 .7573000000D-02 .1753260000D+02 .3001782000D+01 .1430400000D+01 .4769700000D+01 .3301300000D+01 .4287600000D+01 .3056000000D-01 .1602019000D+03 .1077510000D+01 .3918000000D-02 .2760300000D+01 .4157410000D+01 .4501900000D+01 .1627200000D+01 .4567600000D+01 .4605320000D+02 -.4645000000D-01 .1212595600D+04 .2511390000D+01 .8079000000D-02 .1743570000D+02 .4579674000D+01 .2933400000D+01 .6250000000D+01 .4876800000D+01 +6 24720101217201102252455547.3 -.3091580000D+02 -.5640000000D-02 .1220595700D+04 .1342450000D+01 .1743800000D-01 .1753330000D+02 .5336629000D+01 .3742100000D+01 .6009000000D+00 .1846400000D+01 .6342000000D+01 -.5300000000D-03 .2150871000D+03 .4915200000D+00 .7187000000D-02 .3186200000D+01 .3894190000D+00 .4311000000D+00 .3576600000D+01 .3202900000D+01 .4237840000D+02 -.4250000000D-02 .1203723100D+04 .1290550000D+01 .1668700000D-01 .1736860000D+02 .6312570000D+00 .5240800000D+01 .2089200000D+01 .3424700000D+01 +6 24820110225201105062455617.3 -.3139820000D+02 .6532000000D-01 .1220052900D+04 .1429580000D+01 .1414000000D-02 .1757530000D+02 .1490880000D+01 .3050700000D+01 .4125500000D+01 .5097000000D+00 .6338700000D+01 -.2524000000D-01 .2158426000D+03 .6476300000D+00 .9060000000D-03 .2799400000D+01 .2836007000D+01 .6036000000D+01 .2013200000D+01 .1807000000D+01 .4221690000D+02 .4367000000D-01 .1203521100D+04 .1352250000D+01 .1713000000D-02 .1745640000D+02 .3069551000D+01 .4571400000D+01 .5073100000D+01 .2086700000D+01 +6 24920110506201107152455687.3 -.2677760000D+02 .6140000000D-02 .1220271400D+04 .1270530000D+01 .1613600000D-01 .1750650000D+02 .4020785000D+01 .5634600000D+01 .2497800000D+01 .5458900000D+01 .4578300000D+01 .1170000000D-02 .1746037000D+03 .4512600000D+00 .6924000000D-02 .2448200000D+01 .5252380000D+01 .2399200000D+01 .5558900000D+01 .3914000000D+00 .4531060000D+02 .2380000000D-02 .1210140300D+04 .1250270000D+01 .1584100000D-01 .1747580000D+02 .5598397000D+01 .8344000000D+00 .3966400000D+01 .7545000000D+00 +6 25020110715201109232455757.3 -.2651470000D+02 -.6438000000D-01 .1219128900D+04 .1116860000D+01 .9678000000D-02 .1753390000D+02 .1938810000D+00 .4974400000D+01 .4678800000D+01 .4015600000D+01 .4770000000D+01 .2737000000D-01 .1762536000D+03 .5748000000D+00 .3738000000D-02 .2894600000D+01 .1419900000D+01 .1768800000D+01 .1206900000D+01 .5318600000D+01 .4565480000D+02 -.5110000000D-01 .1210154800D+04 .1107040000D+01 .9315000000D-02 .1740900000D+02 .1771800000D+01 .1461000000D+00 .6220700000D+01 .5597600000D+01 +6 25120110923201112022455827.3 -.3116730000D+02 -.8244000000D-01 .1220275400D+04 .2448090000D+01 .3026000000D-02 .1757560000D+02 .2540945000D+01 .9679000000D+00 .4776800000D+01 .2506500000D+01 .6706600000D+01 .2584000000D-01 .2312605000D+03 .1051490000D+01 .2434000000D-02 .3815500000D+01 .3909897000D+01 .3908500000D+01 .1477500000D+01 .3939600000D+01 .4195630000D+02 -.6814000000D-01 .1199998700D+04 .2449240000D+01 .3614000000D-02 .1717400000D+02 .4119521000D+01 .2460300000D+01 .9000000000D-02 .4089700000D+01 +6 25220111202201202102455897.3 -.3711700000D+02 -.2705000000D-01 .1221492400D+04 .2098240000D+01 .1559200000D-01 .1758750000D+02 .4859414000D+01 .3262000000D+01 .1294000000D+00 .1017900000D+01 .8416200000D+01 .4140000000D-02 .2949727000D+03 .7916300000D+00 .6389000000D-02 .4466700000D+01 .4841400000D-01 .6039800000D+01 .2938900000D+01 .2517800000D+01 .3663400000D+02 -.3211000000D-01 .1186180600D+04 .2038400000D+01 .1486500000D-01 .1696440000D+02 .1527590000D+00 .4731900000D+01 .1584700000D+01 .2598400000D+01 +6 25320120210201204202455967.3 -.3931660000D+02 .3894000000D-01 .1221326100D+04 .4261200000D+00 .1040400000D-01 .1762270000D+02 .9641330000D+00 .2546700000D+01 .2575700000D+01 .5922100000D+01 .8727200000D+01 -.9360000000D-02 .3186107000D+03 .2286000000D+00 .3634000000D-02 .4392900000D+01 .2470179000D+01 .5336900000D+01 .5349600000D+01 .1133800000D+01 .3407660000D+02 .4658000000D-01 .1178697000D+04 .3846200000D+00 .1102600000D-01 .1704100000D+02 .2540431000D+01 .3820700000D+01 .4136600000D+01 .1218900000D+01 +6 25420120420201206292456037.3 -.3621170000D+02 .3055000000D-01 .1221691000D+04 .1833600000D+01 .1256200000D-01 .1759900000D+02 .3475057000D+01 .5090000000D+01 .1957700000D+01 .4609500000D+01 .7965700000D+01 -.6370000000D-02 .2873147000D+03 .6890200000D+00 .5442000000D-02 .3907400000D+01 .4947637000D+01 .1614400000D+01 .4798800000D+01 .6063400000D+01 .3780000000D+02 .2185000000D-01 .1187377000D+04 .1844500000D+01 .1283100000D-01 .1708660000D+02 .5051599000D+01 .2610000000D+00 .3364500000D+01 .6190800000D+01 +6 25520120629201209072456107.3 -.3404820000D+02 -.3480000000D-01 .1220208300D+04 .1680600000D+00 .1399300000D-01 .1760620000D+02 .5976527000D+01 .4762400000D+01 .4316100000D+01 .3213700000D+01 .7588700000D+01 .1208000000D-01 .2665440000D+03 .1836100000D+00 .5303000000D-02 .4028600000D+01 .1130247000D+01 .1331200000D+01 .8037000000D+00 .4669100000D+01 .3976670000D+02 -.3970000000D-01 .1192184300D+04 .2096900000D+00 .1313800000D-01 .1705420000D+02 .1271609000D+01 .5985500000D+01 .5803800000D+01 .4793600000D+01 +6 25620120907201211162456177.3 -.3660120000D+02 -.7351000000D-01 .1220899800D+04 .2139320000D+01 .3229000000D-02 .1761960000D+02 .2077481000D+01 .5102000000D+00 .6079300000D+01 .1724900000D+01 .8481000000D+01 .1510000000D-01 .3028328000D+03 .9150100000D+00 .2011000000D-02 .4783000000D+01 .3558942000D+01 .3319200000D+01 .1770800000D+01 .3236000000D+01 .3685840000D+02 -.8039000000D-01 .1183257400D+04 .2119880000D+01 .3488000000D-02 .1685750000D+02 .3654392000D+01 .1983900000D+01 .1190300000D+01 .3298200000D+01 +6 25720121116201301252456247.3 -.4187760000D+02 -.3944000000D-01 .1221577100D+04 .2527370000D+01 .1138800000D-01 .1756070000D+02 .4394154000D+01 .2805400000D+01 .6026600000D+01 .2144000000D+00 .9368200000D+01 .6400000000D-03 .3630242000D+03 .9499500000D+00 .4756000000D-02 .5512200000D+01 .5938655000D+01 .5411800000D+01 .2456500000D+01 .1774400000D+01 .3060280000D+02 -.5965000000D-01 .1166959800D+04 .2468300000D+01 .1076200000D-01 .1661090000D+02 .5967145000D+01 .4254600000D+01 .1152800000D+01 .1781400000D+01 +6 25820130125201304052456317.3 -.4489950000D+02 .8310000000D-02 .1221665900D+04 .7541100000D+00 .1665900000D-01 .1761160000D+02 .4588650000D+00 .5135600000D+01 .2006500000D+01 .5069600000D+01 .9297100000D+01 -.5000000000D-04 .3994192000D+03 .2255200000D+00 .6040000000D-02 .5723800000D+01 .2039328000D+01 .1284900000D+01 .4530300000D+01 .3635000000D+00 .2590060000D+02 .1713000000D-01 .1153800700D+04 .7102400000D+00 .1592400000D-01 .1660470000D+02 .2028360000D+01 .4069000000D+00 .3513800000D+01 .3521000000D+00 +6 25920130405201306142456387.3 -.4421390000D+02 .4330000000D-01 .1221716700D+04 .1750480000D+01 .4190000000D-02 .1755470000D+02 .2927473000D+01 .4517600000D+01 .1250600000D+01 .3753200000D+01 .9420600000D+01 -.4890000000D-02 .3883417000D+03 .6724800000D+00 .2206000000D-02 .5334700000D+01 .4503059000D+01 .7700000000D+00 .3826600000D+01 .5306000000D+01 .2794080000D+02 .4202000000D-01 .1157949000D+04 .1797830000D+01 .5203000000D-02 .1669600000D+02 .4497151000D+01 .5973000000D+01 .2642200000D+01 .5317400000D+01 +6 26020130614201308232456457.3 -.4114910000D+02 -.7890000000D-02 .1221070600D+04 .8412200000D+00 .1649200000D-01 .1753380000D+02 .5456282000D+01 .7283000000D+00 .3873100000D+01 .2400100000D+01 .9229800000D+01 .2830000000D-02 .3590363000D+03 .2360600000D+00 .6171000000D-02 .5193800000D+01 .7206850000D+00 .3134600000D+01 .2085000000D+00 .3940000000D+01 .3161280000D+02 -.1270000000D-01 .1166873600D+04 .7970200000D+00 .1587200000D-01 .1674890000D+02 .7467750000D+00 .2201100000D+01 .5316900000D+01 .3966900000D+01 +6 26120130823201311012456527.3 -.4167840000D+02 -.5623000000D-01 .1221179100D+04 .1567470000D+01 .7598000000D-02 .1752100000D+02 .1604004000D+01 .5150000000D-01 .6042300000D+01 .9391000000D+00 .9444100000D+01 .2820000000D-02 .3723126000D+03 .6782500000D+00 .2959000000D-02 .5702500000D+01 .3158112000D+01 .2727500000D+01 .1885100000D+01 .2505000000D+01 .3060560000D+02 -.8069000000D-01 .1162942700D+04 .1538220000D+01 .7676000000D-02 .1664650000D+02 .3176619000D+01 .1497000000D+01 .1246700000D+01 .2504800000D+01 +6 26220131101201401102456597.3 -.4563010000D+02 -.4165000000D-01 .1221215000D+04 .2648170000D+01 .6376000000D-02 .1745570000D+02 .3933577000D+01 .2356100000D+01 .5804500000D+01 .5701400000D+01 .9438400000D+01 -.8960000000D-02 .4204721000D+03 .9956500000D+00 .3111000000D-02 .6358200000D+01 .5526011000D+01 .4798500000D+01 .2197200000D+01 .1025300000D+01 .2437950000D+02 -.8151000000D-01 .1147370000D+04 .2598690000D+01 .5941000000D-02 .1635980000D+02 .5501496000D+01 .3798600000D+01 .8430000000D+00 .9809000000D+00 +6 26320140110201403212456667.3 -.4878230000D+02 -.6980000000D-02 .1221407200D+04 .1733870000D+01 .1746200000D-01 .1751160000D+02 .6254203000D+01 .4655600000D+01 .1512300000D+01 .4228200000D+01 .8631400000D+01 -.5990000000D-02 .4595067000D+03 .5948600000D+00 .6350000000D-02 .6705100000D+01 .1596879000D+01 .6022000000D+00 .3795800000D+01 .5860100000D+01 .1808900000D+02 -.2507000000D-01 .1132309200D+04 .1667140000D+01 .1665200000D-01 .1628660000D+02 .1532648000D+01 .6130000000D+01 .2969300000D+01 .5787600000D+01 +6 26420140321201405302456737.3 -.4969130000D+02 .3736000000D-01 .1220548800D+04 .1042010000D+01 .6239000000D-02 .1744200000D+02 .2387565000D+01 .3913900000D+01 .4199500000D+01 .2878000000D+01 .8466700000D+01 .4590000000D-02 .4644503000D+03 .4308800000D+00 .1582000000D-02 .6539500000D+01 .4021750000D+01 .6240600000D+01 .2146000000D+00 .4504800000D+01 .1687510000D+02 .5251000000D-01 .1130001200D+04 .1045540000D+01 .5567000000D-02 .1633940000D+02 .3947443000D+01 .5409100000D+01 .5638400000D+01 .4442300000D+01 +6 26520140530201408082456807.3 -.4705370000D+02 .6180000000D-02 .1221016000D+04 .1669440000D+01 .1568100000D-01 .1744630000D+02 .4915840000D+01 .2091000000D+00 .3344300000D+01 .1557300000D+01 .9004100000D+01 .5470000000D-02 .4419473000D+03 .5694800000D+00 .5928000000D-02 .6277200000D+01 .2497290000D+00 .2498800000D+01 .5747800000D+01 .3168700000D+01 .2139320000D+02 .2106000000D-01 .1138533800D+04 .1624580000D+01 .1530700000D-01 .1640480000D+02 .1969750000D+00 .1691800000D+01 .4802200000D+01 .3125100000D+01 +6 26620140808201410172456877.3 -.4633690000D+02 -.3352000000D-01 .1220960800D+04 .7370800000D+00 .1225500000D-01 .1751400000D+02 .1113389000D+01 .5884300000D+01 .5696200000D+01 .1371000000D+00 .9343700000D+01 -.6670000000D-02 .4373102000D+03 .3550100000D+00 .4494000000D-02 .6506300000D+01 .2721243000D+01 .2195200000D+01 .1588100000D+01 .1759300000D+01 .2294160000D+02 -.6708000000D-01 .1140340500D+04 .7250800000D+00 .1193900000D-01 .1633790000D+02 .2678794000D+01 .9823000000D+00 .9259000000D+00 .1707000000D+01 +6 26720141017201412262456947.3 -.4863760000D+02 -.3468000000D-01 .1220702800D+04 .2483890000D+01 .2769000000D-02 .1746990000D+02 .3470971000D+01 .1904900000D+01 .1482000000D+00 .4909000000D+01 .8702400000D+01 -.2006000000D-01 .4686789000D+03 .9457600000D+00 .2195000000D-02 .6979100000D+01 .5100187000D+01 .4192100000D+01 .2333600000D+01 .2744000000D+00 .1778950000D+02 -.9333000000D-01 .1128423000D+04 .2437830000D+01 .1742000000D-02 .1605690000D+02 .5032150000D+01 .3351600000D+01 .1357900000D+01 .1884000000D+00 +6 26820141226201503062457017.3 -.5129910000D+02 -.6090000000D-02 .1221127300D+04 .2402270000D+01 .1444500000D-01 .1752820000D+02 .5778975000D+01 .4172800000D+01 .1055400000D+01 .3402400000D+01 .7070200000D+01 -.1947000000D-01 .5023511000D+03 .8773800000D+00 .5573000000D-02 .7324200000D+01 .1154396000D+01 .6239700000D+01 .3192600000D+01 .5075600000D+01 .1061570000D+02 -.6194000000D-01 .1114900700D+04 .2329270000D+01 .1410000000D-01 .1594510000D+02 .1049198000D+01 .5663100000D+01 .2522800000D+01 .4958000000D+01 +6 26920150306201505152457087.3 -.5221560000D+02 .1652000000D-01 .1219585300D+04 .7220000000D-01 .1430300000D-01 .1754410000D+02 .1863020000D+01 .9854000000D+00 .3500500000D+01 .2006800000D+01 .5755100000D+01 .1001000000D-01 .5135891000D+03 .2556000000D-01 .5019000000D-02 .7303200000D+01 .3537647000D+01 .3143000000D+00 .5482400000D+01 .3686000000D+01 .6239400000D+01 .3883000000D-01 .1109078800D+04 .9427000000D-01 .1395200000D-01 .1588850000D+02 .3412119000D+01 .2515200000D+01 .4999600000D+01 .3563100000D+01 +6 27020150515201507242457157.3 -.5095000000D+02 .4470000000D-02 .1220308900D+04 .2038700000D+01 .1050300000D-01 .1751250000D+02 .4361260000D+01 .5939800000D+01 .2744300000D+01 .6966000000D+00 .6717800000D+01 .1486000000D-01 .5039528000D+03 .7247800000D+00 .3909000000D-02 .7107700000D+01 .6028674000D+01 .1735100000D+01 .4950000000D+01 .2359600000D+01 .9876700000D+01 .4545000000D-01 .1113580600D+04 .1911070000D+01 .9475000000D-02 .1594720000D+02 .5913397000D+01 .1152100000D+01 .4217700000D+01 .2255300000D+01 +6 27120150724201510022457227.3 -.5018230000D+02 -.1089000000D-01 .1220310000D+04 .2927200000D+00 .1625000000D-01 .1759780000D+02 .5996210000D+00 .2059500000D+01 .5267200000D+01 .5610400000D+01 .7812700000D+01 -.8260000000D-02 .4933227000D+03 .1066800000D+00 .5925000000D-02 .7142600000D+01 .2251861000D+01 .3315800000D+01 .1078700000D+01 .9837000000D+00 .1358600000D+02 -.3774000000D-01 .1118059200D+04 .2489300000D+00 .1527000000D-01 .1596690000D+02 .2155058000D+01 .3776900000D+01 .4933000000D+00 .8827000000D+00 +6 27220151002201512112457297.3 -.5090980000D+02 -.2170000000D-01 .1220012400D+04 .2037410000D+01 .5901000000D-02 .1751180000D+02 .2999556000D+01 .1445000000D+01 .9194000000D+00 .4123100000D+01 .7098600000D+01 -.2777000000D-01 .5080362000D+03 .7958600000D+00 .2677000000D-02 .7434500000D+01 .4660097000D+01 .3590000000D+01 .2571200000D+01 .5794800000D+01 .1057050000D+02 -.9273000000D-01 .1111500400D+04 .1993760000D+01 .4715000000D-02 .1580310000D+02 .4552218000D+01 .2903300000D+01 .2536000000D+01 .5671800000D+01 +6 27320151211201602192457367.3 -.5261660000D+02 .5020000000D-02 .1220575400D+04 .2770800000D+01 .9948000000D-02 .1751950000D+02 .5311010000D+01 .3702100000D+01 .6668000000D+00 .2597900000D+01 .4869900000D+01 -.3247000000D-01 .5313221000D+03 .1041440000D+01 .4180000000D-02 .7688500000D+01 .7124890000D+00 .5646900000D+01 .2792700000D+01 .4291800000D+01 .3393600000D+01 -.8691000000D-01 .1102111000D+04 .2641200000D+01 .9619000000D-02 .1573610000D+02 .5725560000D+00 .5222800000D+01 .2172800000D+01 .4136700000D+01 +6 27420160219201604292457437.3 -.5246870000D+02 .1890000000D-02 .1218728200D+04 .1207490000D+01 .1824700000D-01 .1751260000D+02 .1356720000D+01 .6061300000D+01 .2921300000D+01 .1155700000D+01 .2473900000D+01 .4700000000D-03 .5401098000D+03 .4274800000D+00 .6697000000D-02 .7724700000D+01 .3061902000D+01 .1536400000D+01 .4744500000D+01 .2857200000D+01 -.3010300000D+01 .1890000000D-02 .1097631600D+04 .1125740000D+01 .1699700000D-01 .1574080000D+02 .2895237000D+01 .1349500000D+01 .4475600000D+01 .2686400000D+01 +6 27520160429201607082457507.3 -.5230970000D+02 -.3780000000D-02 .1219190700D+04 .1666230000D+01 .9410000000D-03 .1746270000D+02 .3805498000D+01 .5390800000D+01 .1491600000D+01 .6109700000D+01 .2860700000D+01 .1992000000D-01 .5380096000D+03 .6032400000D+00 .2760000000D-03 .7653100000D+01 .5512733000D+01 .9301000000D+00 .2747700000D+01 .1520400000D+01 -.1947900000D+01 .5125000000D-01 .1098632700D+04 .1523250000D+01 .1581000000D-02 .1573520000D+02 .5344636000D+01 .5893000000D+00 .2128400000D+01 .1361800000D+01 +6 27620160708201609162457577.3 -.5231850000D+02 .5600000000D-03 .1219425000D+04 .1308680000D+01 .1775300000D-01 .1749530000D+02 .6061400000D-01 .1639900000D+01 .4781700000D+01 .4780800000D+01 .4551800000D+01 .1980000000D-02 .5330569000D+03 .4602500000D+00 .6498000000D-02 .7668800000D+01 .1752568000D+01 .3412700000D+01 .4147000000D+00 .1787000000D+00 .2551200000D+01 .4320000000D-02 .1100828600D+04 .1208240000D+01 .1645500000D-01 .1582600000D+02 .1603807000D+01 .3163000000D+01 .6276000000D+01 .3370000000D-01 +6 27720160916201611252457647.3 -.5219860000D+02 -.7350000000D-02 .1219030400D+04 .1310380000D+01 .1083200000D-01 .1745230000D+02 .2512349000D+01 .9696000000D+00 .7359000000D+00 .3329700000D+01 .4538700000D+01 -.2859000000D-01 .5372671000D+03 .5347600000D+00 .4080000000D-02 .7791200000D+01 .4202243000D+01 .3006300000D+01 .2403700000D+01 .5023200000D+01 .2495500000D+01 -.7916000000D-01 .1098621600D+04 .1278060000D+01 .9515000000D-02 .1572330000D+02 .4055229000D+01 .2445200000D+01 .2299500000D+01 .4865800000D+01 +6 27820161125201702032457717.3 -.5282340000D+02 .2126000000D-01 .1219386700D+04 .2832290000D+01 .5229000000D-02 .1742150000D+02 .4844130000D+01 .3244700000D+01 .4887000000D+00 .1799300000D+01 .2214900000D+01 -.4027000000D-01 .5486933000D+03 .1070630000D+01 .2778000000D-02 .7898300000D+01 .2687330000D+00 .5070900000D+01 .2683300000D+01 .3517100000D+01 -.3730200000D+01 -.9839000000D-01 .1094504700D+04 .2626150000D+01 .4599000000D-02 .1570890000D+02 .9720200000D-01 .4786800000D+01 .2021500000D+01 .3330800000D+01 +6 27920170203201704142457787.3 -.5135760000D+02 .8470000000D-02 .1217523000D+04 .2114800000D+01 .1749900000D-01 .1740780000D+02 .8663960000D+00 .5556600000D+01 .2428200000D+01 .3104000000D+00 -.7332000000D+00 -.1649000000D-01 .5495837000D+03 .7763200000D+00 .6431000000D-02 .7883400000D+01 .2597527000D+01 .8939000000D+00 .4087600000D+01 .2048400000D+01 -.1093640000D+02 -.4015000000D-01 .1094927200D+04 .1928480000D+01 .1572400000D-01 .1580400000D+02 .2396794000D+01 .8408000000D+00 .3984200000D+01 .1841000000D+01 +6 28020170414201706232457857.3 -.5092560000D+02 -.9150000000D-02 .1217256600D+04 .6485300000D+00 .1029000000D-01 .1738260000D+02 .3261545000D+01 .4835800000D+01 .4883100000D+01 .5225300000D+01 -.1609100000D+01 .1680000000D-01 .5453071000D+03 .2580300000D+00 .3798000000D-02 .7852100000D+01 .5003072000D+01 .1453000000D+00 .3077000000D+00 .6801000000D+00 -.1309720000D+02 .4046000000D-01 .1096862100D+04 .6188700000D+00 .9504000000D-02 .1573710000D+02 .4790552000D+01 .6282100000D+01 .2752000000D+00 .4748000000D+00 +6 28120170623201709012457927.3 -.5159580000D+02 -.1066000000D-01 .1217754300D+04 .1968400000D+01 .1444500000D-01 .1743910000D+02 .5784655000D+01 .1087100000D+01 .4219300000D+01 .3916100000D+01 -.1043000000D+00 .1844000000D-01 .5487513000D+03 .7522700000D+00 .5612000000D-02 .7938700000D+01 .1230937000D+01 .2724200000D+01 .5920100000D+01 .5644000000D+01 -.9420800000D+01 .4446000000D-01 .1095040600D+04 .1856300000D+01 .1383900000D-01 .1574580000D+02 .1032540000D+01 .2636900000D+01 .5741400000D+01 .5454900000D+01 +6 28220170901201711102457997.3 -.5203890000D+02 .3170000000D-02 .1217762500D+04 .3431100000D+00 .1529800000D-01 .1744420000D+02 .2003186000D+01 .4994000000D+00 .3638000000D+00 .2516900000D+01 .1044500000D+01 -.2147000000D-01 .5528331000D+03 .1711300000D+00 .5764000000D-02 .7970700000D+01 .3723207000D+01 .2670400000D+01 .1982100000D+01 .4244000000D+01 -.6542600000D+01 -.5374000000D-01 .1092645000D+04 .3402100000D+00 .1392200000D-01 .1568830000D+02 .3536371000D+01 .1935400000D+01 .1924800000D+01 .4052200000D+01 +6 28320171110201801192458067.3 -.5186870000D+02 .3754000000D-01 .1217629300D+04 .2559900000D+01 .2840000000D-02 .1743000000D+02 .4371760000D+01 .2792800000D+01 .1410000000D+01 .1001400000D+01 -.7771000000D+00 -.4001000000D-01 .5549860000D+03 .9680100000D+00 .2291000000D-02 .7907200000D+01 .6102780000D+01 .4489200000D+01 .2981200000D+01 .2750200000D+01 -.1094090000D+02 -.9593000000D-01 .1092605900D+04 .2318580000D+01 .2330000000D-02 .1568230000D+02 .5900873000D+01 .4345800000D+01 .3289400000D+01 .2533800000D+01 +6 28420180119201803302458137.3 -.4928840000D+02 .3150000000D-01 .1216325400D+04 .2663020000D+01 .1355900000D-01 .1749750000D+02 .3876860000D+00 .5077000000D+01 .2003800000D+01 .5766500000D+01 -.3701400000D+01 -.2760000000D-01 .5457332000D+03 .1008110000D+01 .5216000000D-02 .7723500000D+01 .2143540000D+01 .2856000000D+00 .3555100000D+01 .1257600000D+01 -.1795190000D+02 -.7113000000D-01 .1098705700D+04 .2432470000D+01 .1223500000D-01 .1580540000D+02 .1913328000D+01 .3751000000D+00 .3548600000D+01 .1015300000D+01 +6 28520180330201806082458207.3 -.4719090000D+02 -.6930000000D-02 .1215551200D+04 .5454900000D+00 .1695200000D-01 .1746100000D+02 .2736673000D+01 .1171900000D+01 .4313400000D+01 .4351500000D+01 -.5528900000D+01 .6720000000D-02 .5315961000D+03 .1951100000D+00 .6291000000D-02 .7616700000D+01 .4511267000D+01 .2545300000D+01 .5752500000D+01 .6129700000D+01 -.2267450000D+02 .1674000000D-01 .1105459500D+04 .4850600000D+00 .1526200000D-01 .1579050000D+02 .4261254000D+01 .2851500000D+01 .5948000000D+01 .5879500000D+01 +6 28620180608201808172458277.3 -.4760910000D+02 -.3773000000D-01 .1215225900D+04 .1986160000D+01 .6416000000D-02 .1753700000D+02 .5217861000D+01 .4945000000D+00 .3468400000D+01 .3039700000D+01 -.4848400000D+01 .2378000000D-01 .5363579000D+03 .7694800000D+00 .2511000000D-02 .7779000000D+01 .7036370000D+00 .1983400000D+01 .5079200000D+01 .4803500000D+01 -.2092630000D+02 .6112000000D-01 .1103759500D+04 .1848260000D+01 .6211000000D-02 .1572090000D+02 .4592070000D+00 .2120400000D+01 .5174000000D+01 .4566600000D+01 +6 28720180817201810262458347.3 -.4981350000D+02 .4670000000D-02 .1216351500D+04 .7456200000D+00 .1820100000D-01 .1751500000D+02 .1468955000D+01 .3040200000D+01 .6178400000D+01 .1689200000D+01 -.3106900000D+01 -.8110000000D-02 .5490490000D+03 .2875800000D+00 .6961000000D-02 .7889200000D+01 .3222642000D+01 .4412600000D+01 .1420000000D+01 .3445100000D+01 -.1645910000D+02 -.1923000000D-01 .1096871100D+04 .6713200000D+00 .1656800000D-01 .1570590000D+02 .2994982000D+01 .4686600000D+01 .1494900000D+01 .3216200000D+01 +6 28820181026201901042458417.3 -.4953840000D+02 .4769000000D-01 .1215747200D+04 .1944350000D+01 .7006000000D-02 .1746740000D+02 .3887560000D+01 .2338200000D+01 .1860400000D+01 .2079000000D+00 -.3961200000D+01 -.3125000000D-01 .5487721000D+03 .7397200000D+00 .3231000000D-02 .7730700000D+01 .5644463000D+01 .3892200000D+01 .3131200000D+01 .1976200000D+01 -.1837820000D+02 -.8055000000D-01 .1097128500D+04 .1739520000D+01 .6673000000D-02 .1573890000D+02 .5411920000D+01 .3895400000D+01 .3620000000D+01 .1730100000D+01 +6 28920190104201903152458487.3 -.4631740000D+02 .5835000000D-01 .1215362700D+04 .2865600000D+01 .8513000000D-02 .1751070000D+02 .6198724000D+01 .4608000000D+01 .1671300000D+01 .4963700000D+01 -.6328000000D+01 -.2803000000D-01 .5305724000D+03 .1103060000D+01 .3662000000D-02 .7394600000D+01 .1696615000D+01 .5984300000D+01 .3215000000D+01 .4718000000D+00 -.2437710000D+02 -.8565000000D-01 .1107330700D+04 .2626860000D+01 .7809000000D-02 .1597050000D+02 .1439334000D+01 .6213000000D+01 .3211200000D+01 .1985000000D+00 +6 29020190315201905242458557.3 -.4214630000D+02 .8530000000D-02 .1214745200D+04 .1571630000D+01 .1812800000D-01 .1742560000D+02 .2232764000D+01 .6386000000D+00 .3779800000D+01 .3500700000D+01 -.8224100000D+01 -.4640000000D-02 .5028603000D+03 .5896700000D+00 .6782000000D-02 .7122600000D+01 .4040121000D+01 .1879400000D+01 .5036800000D+01 .5307300000D+01 -.3032770000D+02 -.1360000000D-01 .1119935600D+04 .1428050000D+01 .1642000000D-01 .1609440000D+02 .3757193000D+01 .2299400000D+01 .5442900000D+01 .5018700000D+01 +6 29120190524201908022458627.3 -.4127830000D+02 -.5196000000D-01 .1213810200D+04 .1313410000D+01 .4174000000D-02 .1743780000D+02 .4660057000D+01 .6197700000D+01 .3071000000D+00 .2157600000D+01 -.8330600000D+01 .1207000000D-01 .4977280000D+03 .4775700000D+00 .2012000000D-02 .7303500000D+01 .1902440000D+00 .1169000000D+01 .1506400000D+01 .3953200000D+01 -.3081570000D+02 .4836000000D-01 .1123015700D+04 .1148170000D+01 .4252000000D-02 .1608390000D+02 .6185643000D+01 .1590900000D+01 .1725500000D+01 .3673300000D+01 +6 29220190802201910112458697.3 -.4486800000D+02 -.7900000000D-02 .1215303200D+04 .1682360000D+01 .1778100000D-01 .1747960000D+02 .9129630000D+00 .2510100000D+01 .5654000000D+01 .8419000000D+00 -.7226000000D+01 .6280000000D-02 .5195309000D+03 .6375200000D+00 .6597000000D-02 .7550200000D+01 .2707126000D+01 .3802600000D+01 .7091000000D+00 .2624800000D+01 -.2684650000D+02 .1860000000D-01 .1113000000D+04 .1485270000D+01 .1555700000D-01 .1596480000D+02 .2437162000D+01 .4145900000D+01 .9984000000D+00 .2359700000D+01 +6 29320191011201912202458767.3 -.4550130000D+02 .4598000000D-01 .1214257900D+04 .1024150000D+01 .1230200000D-01 .1739350000D+02 .3386074000D+01 .1886000000D+01 .1612400000D+01 .5687900000D+01 -.7048800000D+01 -.1715000000D-01 .5266909000D+03 .3981100000D+00 .4802000000D-02 .7428700000D+01 .5174001000D+01 .3291400000D+01 .2862500000D+01 .1195600000D+01 -.2606910000D+02 -.5566000000D-01 .1109116200D+04 .9152800000D+00 .1134800000D-01 .1599890000D+02 .4908977000D+01 .3430600000D+01 .3325200000D+01 .9228000000D+00 +6 29420191220202002282458837.3 -.4238430000D+02 .7950000000D-01 .1214662400D+04 .2740490000D+01 .3685000000D-02 .1740510000D+02 .5727429000D+01 .4143400000D+01 .1684000000D+01 .4163400000D+01 -.8493400000D+01 -.1964000000D-01 .5044704000D+03 .1064310000D+01 .2391000000D-02 .6984300000D+01 .1252983000D+01 .5399100000D+01 .3202600000D+01 .5984800000D+01 -.3041320000D+02 -.8500000000D-01 .1120037800D+04 .2520600000D+01 .3393000000D-02 .1629620000D+02 .9687150000D+00 .5774800000D+01 .3215000000D+01 .5685400000D+01 +6 29520200228202005082458907.3 -.3664470000D+02 .3644000000D-01 .1214134700D+04 .2295030000D+01 .1574500000D-01 .1737150000D+02 .1746937000D+01 .1511000000D+00 .3308400000D+01 .2662400000D+01 -.9768300000D+01 -.7970000000D-02 .4638461000D+03 .8640800000D+00 .5802000000D-02 .6468000000D+01 .3588526000D+01 .1225500000D+01 .4406200000D+01 .4516600000D+01 -.3637020000D+02 -.3939000000D-01 .1137432800D+04 .2062710000D+01 .1389300000D-01 .1647160000D+02 .3273996000D+01 .1818300000D+01 .4995600000D+01 .4192500000D+01 +6 29620200508202007172458977.3 -.3380830000D+02 -.3786000000D-01 .1213907100D+04 .1911200000D+00 .1259300000D-01 .1740870000D+02 .4124194000D+01 .5671600000D+01 .5727300000D+01 .1270100000D+01 -.1009930000D+02 -.6400000000D-03 .4406151000D+03 .7009000000D-01 .5125000000D-02 .6472900000D+01 .5986588000D+01 .6280100000D+01 .5528000000D+00 .3127900000D+01 -.3875600000D+02 .2312000000D-01 .1146784600D+04 .1183300000D+00 .1230100000D-01 .1650360000D+02 .5654967000D+01 .9551000000D+00 .1107800000D+01 .2803900000D+01 +6 29720200717202009252459047.3 -.3688010000D+02 -.3558000000D-01 .1214888900D+04 .2049700000D+01 .1178600000D-01 .1743940000D+02 .3473440000D+00 .1960500000D+01 .5104300000D+01 .6250800000D+01 -.1010020000D+02 .1114000000D-01 .4612658000D+03 .8023800000D+00 .4581000000D-02 .6873000000D+01 .2192183000D+01 .3015400000D+01 .6097200000D+01 .1801000000D+01 -.3672490000D+02 .4703000000D-01 .1138861000D+04 .1833490000D+01 .1027600000D-01 .1635820000D+02 .1875485000D+01 .3582400000D+01 .3925000000D+00 .1495800000D+01 +6 29820200925202012042459117.3 -.3942100000D+02 .3015000000D-01 .1213517200D+04 .1022800000D+00 .1670100000D-01 .1739640000D+02 .2864088000D+01 .3866300000D+01 .1221500000D+01 .4864000000D+01 -.9523300000D+01 -.4250000000D-02 .4838817000D+03 .4227000000D-01 .6328000000D-02 .6892400000D+01 .4691677000D+01 .4686700000D+01 .2353900000D+01 .4162000000D+00 -.3384750000D+02 -.2719000000D-01 .1129343200D+04 .7291000000D-01 .1510600000D-01 .1628590000D+02 .4389698000D+01 .6131600000D+01 .2916200000D+01 .1115000000D+00 +6 29920201204202102122459187.3 -.3734460000D+02 .8959000000D-01 .1214234300D+04 .2303070000D+01 .3591000000D-02 .1746080000D+02 .5251082000D+01 .3675700000D+01 .2926300000D+01 .3362600000D+01 -.1005460000D+02 -.6220000000D-02 .4660875000D+03 .8989600000D+00 .2358000000D-02 .6390000000D+01 .8095180000D+00 .4797900000D+01 .3566500000D+01 .5230600000D+01 -.3618360000D+02 -.7222000000D-01 .1136563600D+04 .2117780000D+01 .3390000000D-02 .1651240000D+02 .4953360000D+00 .5337800000D+01 .4503300000D+01 .4899200000D+01 +7 30020100101201001232455197.4 -.1709738000D+03 .1139125000D+02 .1563877800D+04 .1750166200D+03 .4955542000D+01 .9779200000D+01 .1904271000D+01 .6258900000D+01 .3801300000D+01 .1041300000D+01 -.2998750000D+02 .1538790000D+01 .1489604000D+03 .1644544000D+02 .4625720000D+00 .1031800000D+01 .2991918000D+01 .1098700000D+01 .4947700000D+01 .2181100000D+01 -.2422281000D+03 .1067045000D+02 .1496068400D+04 .1695310500D+03 .4826899000D+01 .1062740000D+02 .3513513000D+01 .1623800000D+01 .5478200000D+01 .2625900000D+01 +7 30120100123201002142455219.4 -.1606601000D+03 .1183721000D+02 .1520591200D+04 .1680563600D+03 .4930061000D+01 .9362300000D+01 .2141970000D+01 .2707000000D+00 .4123100000D+01 .1748400000D+01 -.2971370000D+02 .1656870000D+01 .1419882000D+03 .1540151000D+02 .4495150000D+00 .9290000000D+00 .3215386000D+01 .1359900000D+01 .5235200000D+01 .2883700000D+01 -.2248825000D+03 .9852560000D+01 .1461660900D+04 .1640636000D+03 .4863188000D+01 .1042430000D+02 .3753978000D+01 .1924600000D+01 .5808500000D+01 .3319100000D+01 +7 30220100214201003082455241.4 -.1736428000D+03 .1432299000D+02 .1490994200D+04 .1587376200D+03 .4739496000D+01 .9057700000D+01 .2374108000D+01 .5470000000D+00 .4427800000D+01 .2571100000D+01 -.2873810000D+02 .1773820000D+01 .1288343000D+03 .1362724000D+02 .4115740000D+00 .8435000000D+00 .3404185000D+01 .1589600000D+01 .5502600000D+01 .3556000000D+01 -.2020978000D+03 .8388860000D+01 .1444343200D+04 .1604247400D+03 .4965090000D+01 .1002410000D+02 .4006747000D+01 .2229500000D+01 .6139400000D+01 .4000100000D+01 +7 30320100308201003302455263.4 -.1905957000D+03 .1719343000D+02 .1459673500D+04 .1476587900D+03 .4468617000D+01 .9852400000D+01 .2611042000D+01 .8292000000D+00 .4753200000D+01 .3366800000D+01 -.2526100000D+02 .1696710000D+01 .1144475000D+03 .1199896000D+02 .3775440000D+00 .7185000000D+00 .3564120000D+01 .1785000000D+01 .5729300000D+01 .4134100000D+01 -.1575605000D+03 .4740340000D+01 .1463159500D+04 .1606354400D+03 .5145132000D+01 .8728400000D+01 .4263344000D+01 .2506600000D+01 .1433000000D+00 .4748800000D+01 +7 30420100330201004212455285.4 -.1881022000D+03 .1836377000D+02 .1430556800D+04 .1399145500D+03 .4379959000D+01 .1028470000D+02 .2866598000D+01 .1135500000D+01 .5107800000D+01 .4040600000D+01 -.1975120000D+02 .1422040000D+01 .1031477000D+03 .1088527000D+02 .3562760000D+00 .5818000000D+00 .3695801000D+01 .1944200000D+01 .5905600000D+01 .4718900000D+01 -.9888860000D+02 -.4682600000D+00 .1503353400D+04 .1609954400D+03 .5242938000D+01 .8152000000D+01 .4507872000D+01 .2745500000D+01 .3884000000D+00 .5669500000D+01 +7 30520100421201005132455307.4 -.1602286000D+03 .1728404000D+02 .1420454200D+04 .1387695200D+03 .4569629000D+01 .9645600000D+01 .3135403000D+01 .1442700000D+01 .5443900000D+01 .4725300000D+01 -.1367890000D+02 .1040230000D+01 .9716160000D+02 .1027285000D+02 .3466950000D+00 .5279000000D+00 .3820202000D+01 .2093400000D+01 .6065700000D+01 .5404700000D+01 -.4851500000D+02 -.5202580000D+01 .1532759100D+04 .1582268100D+03 .5197688000D+01 .9340300000D+01 .4737477000D+01 .2969300000D+01 .6310000000D+00 .2216000000D+00 +7 30620100513201006042455329.4 -.1214513000D+03 .1525783000D+02 .1430932000D+04 .1410155300D+03 .4844619000D+01 .9294300000D+01 .3393637000D+01 .1716400000D+01 .5732300000D+01 .5481300000D+01 -.8412100000D+01 .6489200000D+00 .9604970000D+02 .9960800000D+01 .3435800000D+00 .5882000000D+00 .3977179000D+01 .2275900000D+01 .6266500000D+01 .6100700000D+01 -.2184680000D+02 -.7987120000D+01 .1536926700D+04 .1530760700D+03 .5109854000D+01 .1043670000D+02 .4959033000D+01 .3201600000D+01 .8979000000D+00 .8734000000D+00 +7 30720100604201006262455351.4 -.9136960000D+02 .1408840000D+02 .1442369700D+04 .1411703200D+03 .4999217000D+01 .9799700000D+01 .3623581000D+01 .1955300000D+01 .5995200000D+01 .6170400000D+01 -.5041200000D+01 .3407300000D+00 .9784200000D+02 .9754250000D+01 .3438550000D+00 .6818000000D+00 .4195798000D+01 .2530200000D+01 .2751000000D+00 .4370000000D+00 -.1521030000D+02 -.9049310000D+01 .1526718400D+04 .1481330800D+03 .5083852000D+01 .1080460000D+02 .5174018000D+01 .3439200000D+01 .1176100000D+01 .1475000000D+01 +7 30820100626201007182455373.4 -.7877000000D+02 .1461911000D+02 .1438001600D+04 .1372994400D+03 .5012394000D+01 .1008910000D+02 .3825628000D+01 .2178300000D+01 .6260800000D+01 .4652000000D+00 -.3794200000D+01 .1448800000D+00 .1021419000D+03 .9805460000D+01 .3586830000D+00 .7358000000D+00 .4481336000D+01 .2867900000D+01 .6645000000D+00 .1074200000D+01 -.1152730000D+02 -.9864660000D+01 .1518203000D+04 .1438249700D+03 .5067480000D+01 .1118270000D+02 .5373246000D+01 .3656300000D+01 .1433900000D+01 .2051300000D+01 +7 30920100718201008092455395.4 -.7759160000D+02 .1632667000D+02 .1420502700D+04 .1314686700D+03 .4989731000D+01 .9840800000D+01 .4008991000D+01 .2395200000D+01 .2480000000D+00 .1017700000D+01 -.3305500000D+01 -.4892000000D-01 .1116787000D+03 .1051293000D+02 .4005170000D+00 .8155000000D+00 .4807551000D+01 .3233000000D+01 .1072800000D+01 .1783300000D+01 .6087600000D+01 -.1194898000D+02 .1515177900D+04 .1378706400D+03 .4903247000D+01 .1163000000D+02 .5545129000D+01 .3831200000D+01 .1659000000D+01 .2540500000D+01 +7 31020100809201008312455417.4 -.7314740000D+02 .1785377000D+02 .1406772700D+04 .1266910400D+03 .4998235000D+01 .9784000000D+01 .4180453000D+01 .2594900000D+01 .4987000000D+00 .1575000000D+01 -.1084600000D+01 -.4562600000D+00 .1291198000D+03 .1176092000D+02 .4514700000D+00 .9892000000D+00 .5117868000D+01 .3533000000D+01 .1418200000D+01 .2410700000D+01 .4461530000D+02 -.1596457000D+02 .1510714300D+04 .1282125500D+03 .4495063000D+01 .1137710000D+02 .5686376000D+01 .3960500000D+01 .1864800000D+01 .2933000000D+01 +7 31120100831201009222455439.4 -.5105230000D+02 .1781178000D+02 .1413834600D+04 .1242850500D+03 .4985707000D+01 .1029780000D+02 .4340383000D+01 .2753600000D+01 .7024000000D+00 .2064300000D+01 .4944000000D+01 -.1260790000D+01 .1530993000D+03 .1286709000D+02 .4762390000D+00 .1132400000D+01 .5371665000D+01 .3736600000D+01 .1704200000D+01 .2874300000D+01 .9945330000D+02 -.2153898000D+02 .1497520100D+04 .1151015700D+03 .3883287000D+01 .9990300000D+01 .5804350000D+01 .4053900000D+01 .2076600000D+01 .3278900000D+01 +7 31220100922201010142455461.4 -.3276600000D+01 .1534504000D+02 .1448859300D+04 .1238409900D+03 .4847501000D+01 .1077990000D+02 .4485682000D+01 .2854100000D+01 .8488000000D+00 .2429400000D+01 .1506170000D+02 -.2486570000D+01 .1792690000D+03 .1333854000D+02 .4572410000D+00 .1101100000D+01 .5572288000D+01 .3866900000D+01 .1977200000D+01 .3257700000D+01 .1584736000D+03 -.2760999000D+02 .1473707800D+04 .1007905000D+03 .3213128000D+01 .7774600000D+01 .5912809000D+01 .4127500000D+01 .2322200000D+01 .3651500000D+01 +7 31320101014201011052455483.4 .7025220000D+02 .1029643000D+02 .1507616600D+04 .1247451800D+03 .4522550000D+01 .1050200000D+02 .4615428000D+01 .2898300000D+01 .9406000000D+00 .2685300000D+01 .2740350000D+02 -.3959810000D+01 .2034092000D+03 .1321341000D+02 .4072970000D+00 .8838000000D+00 .5745066000D+01 .3960700000D+01 .2286400000D+01 .3681900000D+01 .2076969000D+03 -.3293102000D+02 .1442751500D+04 .8816644000D+02 .2658850000D+01 .5584100000D+01 .6026930000D+01 .4202400000D+01 .2616600000D+01 .4151400000D+01 +7 31420101105201011272455505.4 .1632772000D+03 .3078720000D+01 .1578583000D+04 .1268799600D+03 .4024064000D+01 .9211600000D+01 .4733561000D+01 .2903900000D+01 .9822000000D+00 .2857300000D+01 .3868910000D+02 -.5369720000D+01 .2230106000D+03 .1291217000D+02 .3598180000D+00 .6335000000D+00 .5915422000D+01 .4057700000D+01 .2651200000D+01 .4325100000D+01 .2355691000D+03 -.3645995000D+02 .1411802100D+04 .7967956000D+02 .2331152000D+01 .4446400000D+01 .6159823000D+01 .4303100000D+01 .2931600000D+01 .4823200000D+01 +7 31520101127201012192455527.4 .2661319000D+03 -.5577830000D+01 .1647875500D+04 .1301406200D+03 .3421958000D+01 .7121700000D+01 .4847642000D+01 .2896600000D+01 .9738000000D+00 .2943300000D+01 .4545010000D+02 -.6376240000D+01 .2375432000D+03 .1297149000D+02 .3399410000D+00 .5869000000D+00 .6101159000D+01 .4193800000D+01 .3005800000D+01 .5159100000D+01 .2347287000D+03 -.3751992000D+02 .1390443700D+04 .7704306000D+02 .2208606000D+01 .4453200000D+01 .3707600000D-01 .4446300000D+01 .3193600000D+01 .5416700000D+01 +7 31620101219201101102455549.4 .3681758000D+03 -.1483488000D+02 .1702397400D+04 .1338068100D+03 .2814886000D+01 .4799700000D+01 .4966522000D+01 .2901500000D+01 .9107000000D+00 .2876900000D+01 .4515370000D+02 -.6711160000D+01 .2480618000D+03 .1386871000D+02 .3405420000D+00 .6703000000D+00 .2726500000D-01 .4380400000D+01 .3233200000D+01 .5677900000D+01 .2016054000D+03 -.3575409000D+02 .1389570900D+04 .8133943000D+02 .2190746000D+01 .4534300000D+01 .2279130000D+00 .4626000000D+01 .3344400000D+01 .5749200000D+01 +7 31720110110201102012455571.4 .4586518000D+03 -.2380469000D+02 .1731126900D+04 .1364830100D+03 .2305307000D+01 .3239000000D+01 .5099157000D+01 .2939100000D+01 .7949000000D+00 .2497100000D+01 .3691680000D+02 -.6245780000D+01 .2561861000D+03 .1584641000D+02 .3457450000D+00 .6582000000D+00 .2579850000D+00 .4592500000D+01 .3277700000D+01 .5833400000D+01 .1351461000D+03 -.3098890000D+02 .1419433300D+04 .9292593000D+02 .2222216000D+01 .4098400000D+01 .4451330000D+00 .4817400000D+01 .3368300000D+01 .5822400000D+01 +7 31820110201201102232455593.4 .5259214000D+03 -.3144489000D+02 .1726033900D+04 .1365805600D+03 .1957972000D+01 .3237500000D+01 .5254945000D+01 .3027700000D+01 .6700000000D+00 .2042800000D+01 .2184000000D+02 -.5030630000D+01 .2626209000D+03 .1869040000D+02 .3641520000D+00 .5700000000D+00 .4990390000D+00 .4796600000D+01 .3161800000D+01 .5607400000D+01 .3659380000D+02 -.2318936000D+02 .1485665500D+04 .1111112600D+03 .2348578000D+01 .3628200000D+01 .6782070000D+00 .4999200000D+01 .3279800000D+01 .5548500000D+01 +7 31920110223201103172455615.4 .5568341000D+03 -.3644981000D+02 .1685435100D+04 .1333713500D+03 .1745634000D+01 .3502100000D+01 .5444646000D+01 .3189000000D+01 .6499000000D+00 .2017900000D+01 .2925600000D+01 -.3306590000D+01 .2661545000D+03 .2171977000D+02 .4155050000D+00 .6581000000D+00 .7355250000D+00 .4979500000D+01 .2995900000D+01 .5118400000D+01 -.8809080000D+02 -.1267691000D+02 .1582684700D+04 .1337160200D+03 .2670271000D+01 .4556000000D+01 .9133300000D+00 .5166000000D+01 .3140000000D+01 .5107500000D+01 +7 32020110317201104082455637.4 .5394515000D+03 -.3746065000D+02 .1621355200D+04 .1289327900D+03 .1633522000D+01 .3021300000D+01 .5679077000D+01 .3447900000D+01 .8773000000D+00 .2477600000D+01 -.1586390000D+02 -.1441050000D+01 .2646057000D+03 .2411670000D+02 .4900630000D+00 .9448000000D+00 .9563150000D+00 .5146500000D+01 .2898700000D+01 .4913000000D+01 -.2241286000D+03 -.5554000000D+00 .1688071400D+04 .1566290400D+03 .3194422000D+01 .6728200000D+01 .1139806000D+01 .5325100000D+01 .3040000000D+01 .4965200000D+01 +7 32120110408201104302455659.4 .4703402000D+03 -.3375965000D+02 .1563957000D+04 .1295072000D+03 .1835950000D+01 .3433000000D+01 .5960846000D+01 .3805500000D+01 .1365400000D+01 .3538900000D+01 -.3139150000D+02 .2303300000D+00 .2574852000D+03 .2540144000D+02 .5561320000D+00 .1201000000D+01 .1158962000D+01 .5309400000D+01 .2896800000D+01 .4965800000D+01 -.3470749000D+03 .1110481000D+02 .1766696800D+04 .1743477300D+03 .3750218000D+01 .8583900000D+01 .1355669000D+01 .5491200000D+01 .3032900000D+01 .5061400000D+01 +7 32220110430201105222455681.4 .3617318000D+03 -.2604373000D+02 .1546536700D+04 .1409194000D+03 .2582060000D+01 .6299600000D+01 .6270979000D+01 .4196000000D+01 .1826000000D+01 .4259700000D+01 -.4242550000D+02 .1527810000D+01 .2471278000D+03 .2563186000D+02 .5944430000D+00 .1310400000D+01 .1350130000D+01 .5483100000D+01 .2976100000D+01 .5167700000D+01 -.4300741000D+03 .1983522000D+02 .1788180900D+04 .1824239600D+03 .4112226000D+01 .9085800000D+01 .1568123000D+01 .5683500000D+01 .3131700000D+01 .5322400000D+01 +7 32320110522201106132455703.4 .2410222000D+03 -.1652969000D+02 .1572840700D+04 .1600254300D+03 .3603012000D+01 .9407800000D+01 .2891460000D+00 .4538700000D+01 .2134700000D+01 .4665300000D+01 -.4887280000D+02 .2391450000D+01 .2367379000D+03 .2517387000D+02 .6048250000D+00 .1266500000D+01 .1544212000D+01 .5687600000D+01 .3136800000D+01 .5524900000D+01 -.4568449000D+03 .2395504000D+02 .1746801100D+04 .1807135200D+03 .4202059000D+01 .8386100000D+01 .1788872000D+01 .5921500000D+01 .3343300000D+01 .5784200000D+01 +7 32420110613201107052455725.4 .1401554000D+03 -.8069290000D+01 .1608877100D+04 .1769892900D+03 .4484245000D+01 .1111610000D+02 .5554740000D+00 .4821500000D+01 .2373200000D+01 .5032800000D+01 -.5075340000D+02 .2799670000D+01 .2286919000D+03 .2451728000D+02 .6019480000D+00 .1186000000D+01 .1759190000D+01 .5947100000D+01 .3399300000D+01 .6102800000D+01 -.4315143000D+03 .2356878000D+02 .1666940500D+04 .1743424300D+03 .4186469000D+01 .8041900000D+01 .2025907000D+01 .6213200000D+01 .3664000000D+01 .1819000000D+00 +7 32520110705201107272455747.4 .8025260000D+02 -.2720860000D+01 .1616644300D+04 .1847440500D+03 .4995196000D+01 .1113260000D+02 .7870330000D+00 .5075000000D+01 .2608000000D+01 .5475500000D+01 -.4877150000D+02 .2812830000D+01 .2254737000D+03 .2437586000D+02 .6177990000D+00 .1287000000D+01 .2005372000D+01 .6269800000D+01 .3765100000D+01 .5529000000D+00 -.3776539000D+03 .2060436000D+02 .1585818900D+04 .1695759200D+03 .4303765000D+01 .8963400000D+01 .2274024000D+01 .2533000000D+00 .4039400000D+01 .8701000000D+00 +7 32620110727201108182455769.4 .6094160000D+02 -.6720900000D+00 .1587370800D+04 .1834156600D+03 .5175265000D+01 .1045920000D+02 .9983600000D+00 .5327500000D+01 .2869900000D+01 .6040400000D+01 -.4539570000D+02 .2664490000D+01 .2299723000D+03 .2534117000D+02 .6789020000D+00 .1544400000D+01 .2271322000D+01 .3373000000D+00 .4165500000D+01 .1221600000D+01 -.3256086000D+03 .1773426000D+02 .1524736500D+04 .1673257400D+03 .4532314000D+01 .9753900000D+01 .2514124000D+01 .5634000000D+00 .4388200000D+01 .1455700000D+01 +7 32720110818201109092455791.4 .6207190000D+02 -.2784900000D+00 .1543586100D+04 .1782697600D+03 .5234102000D+01 .1001860000D+02 .1201550000D+01 .5585200000D+01 .3152200000D+01 .3848000000D+00 -.4404870000D+02 .2688140000D+01 .2424950000D+03 .2704707000D+02 .7647990000D+00 .1723600000D+01 .2529130000D+01 .6642000000D+00 .4525800000D+01 .1851900000D+01 -.2951744000D+03 .1679056000D+02 .1478549900D+04 .1634390100D+03 .4646090000D+01 .9563400000D+01 .2729617000D+01 .8362000000D+00 .4687900000D+01 .2058700000D+01 +7 32820110909201110012455813.4 .5794340000D+02 .7111900000D+00 .1515457100D+04 .1738836200D+03 .5306246000D+01 .9295000000D+01 .1397714000D+01 .5829400000D+01 .3418400000D+01 .1013500000D+01 -.4629910000D+02 .3059120000D+01 .2595314000D+03 .2854171000D+02 .8366640000D+00 .1835900000D+01 .2763987000D+01 .9562000000D+00 .4849400000D+01 .2553800000D+01 -.2851295000D+03 .1773816000D+02 .1434497600D+04 .1555739600D+03 .4559968000D+01 .9290500000D+01 .2922694000D+01 .1083900000D+01 .4968400000D+01 .2751700000D+01 +7 32920111001201110232455835.4 .3462720000D+02 .3572820000D+01 .1514544600D+04 .1704058200D+03 .5341065000D+01 .7980600000D+01 .1581296000D+01 .6040400000D+01 .3643200000D+01 .1741200000D+01 -.4979100000D+02 .3592390000D+01 .2777479000D+03 .2963050000D+02 .8970640000D+00 .2035200000D+01 .2987328000D+01 .1235900000D+01 .5169900000D+01 .3273700000D+01 -.2772981000D+03 .1895791000D+02 .1392907400D+04 .1465694900D+03 .4429726000D+01 .9563400000D+01 .3111099000D+01 .1330000000D+01 .5257300000D+01 .3438300000D+01 +7 33020111023201111142455857.4 -.1713300000D+01 .7787380000D+01 .1527728000D+04 .1655636900D+03 .5250970000D+01 .7676400000D+01 .1753139000D+01 .6223700000D+01 .3841700000D+01 .2642700000D+01 -.4979320000D+02 .3865590000D+01 .2975431000D+03 .3109700000D+02 .9841820000D+00 .2166700000D+01 .3217479000D+01 .1515700000D+01 .5485200000D+01 .3937600000D+01 -.2522594000D+03 .1863182000D+02 .1367657000D+04 .1413285300D+03 .4460406000D+01 .9411200000D+01 .3311437000D+01 .1581800000D+01 .5545200000D+01 .4070300000D+01 +7 33120111114201112062455879.4 -.3176050000D+02 .1160386000D+02 .1533638900D+04 .1583922200D+03 .5058128000D+01 .9064700000D+01 .1925488000D+01 .1254000000D+00 .4053800000D+01 .3443300000D+01 -.4348120000D+02 .3602950000D+01 .3210181000D+03 .3346106000D+02 .1109713000D+01 .2073100000D+01 .3457087000D+01 .1780100000D+01 .5764400000D+01 .4651800000D+01 -.2048305000D+03 .1617275000D+02 .1370232700D+04 .1414539600D+03 .4672029000D+01 .8505000000D+01 .3525044000D+01 .1823900000D+01 .5803800000D+01 .4766000000D+01 +7 33220111206201112282455901.4 -.3953810000D+02 .1351643000D+02 .1522959600D+04 .1504572000D+03 .4889949000D+01 .1025560000D+02 .2113551000D+01 .3404000000D+00 .4310600000D+01 .4079000000D+01 -.3301610000D+02 .2968380000D+01 .3461964000D+03 .3593037000D+02 .1232109000D+01 .2076800000D+01 .3693510000D+01 .2016800000D+01 .6007900000D+01 .5500600000D+01 -.1478390000D+03 .1263102000D+02 .1393402200D+04 .1435588500D+03 .4903320000D+01 .8264700000D+01 .3741054000D+01 .2046700000D+01 .6035800000D+01 .5583400000D+01 +7 33320111228201201192455923.4 -.2589350000D+02 .1352662000D+02 .1504532300D+04 .1441271800D+03 .4847311000D+01 .1059850000D+02 .2323052000D+01 .5884000000D+00 .4604900000D+01 .4701400000D+01 -.2403140000D+02 .2448910000D+01 .3654950000D+03 .3707581000D+02 .1301307000D+01 .2392300000D+01 .3918946000D+01 .2241700000D+01 .6253600000D+01 .6281600000D+01 -.1018982000D+03 .9821290000D+01 .1413837300D+04 .1429718900D+03 .5004859000D+01 .9215200000D+01 .3953087000D+01 .2265300000D+01 .6276600000D+01 .4560000000D-01 +7 33420120119201202102455945.4 -.8898300000D+01 .1324606000D+02 .1491158300D+04 .1389791300D+03 .4842669000D+01 .1097700000D+02 .2544128000D+01 .8431000000D+00 .4904700000D+01 .5340700000D+01 -.2048960000D+02 .2396680000D+01 .3723103000D+03 .3633528000D+02 .1310964000D+01 .2623900000D+01 .4139904000D+01 .2481100000D+01 .2529000000D+00 .6441000000D+00 -.7916660000D+02 .8856100000D+01 .1414435200D+04 .1383233800D+03 .4985119000D+01 .9918600000D+01 .4167015000D+01 .2504000000D+01 .2753000000D+00 .6731000000D+00 +7 33520120210201203032455967.4 -.1066150000D+02 .1473989000D+02 .1480463800D+04 .1309902300D+03 .4656210000D+01 .1142510000D+02 .2760252000D+01 .1081000000D+01 .5204900000D+01 .5911000000D+01 -.2066920000D+02 .2654180000D+01 .3679654000D+03 .3453018000D+02 .1295664000D+01 .2643200000D+01 .4366756000D+01 .2740700000D+01 .5661000000D+00 .1283300000D+01 -.7289930000D+02 .9155590000D+01 .1402820500D+04 .1325249200D+03 .4973807000D+01 .1003540000D+02 .4392248000D+01 .2768100000D+01 .5920000000D+00 .1302900000D+01 +7 33620120303201203252455989.4 -.4011270000D+02 .1894082000D+02 .1456808400D+04 .1171400500D+03 .4209460000D+01 .1079490000D+02 .2965698000D+01 .1307900000D+01 .5540100000D+01 .1290000000D+00 -.1821200000D+02 .2631000000D+01 .3603874000D+03 .3271124000D+02 .1265539000D+01 .2721400000D+01 .4597772000D+01 .2985900000D+01 .8598000000D+00 .1918500000D+01 -.6041790000D+02 .8658180000D+01 .1405712700D+04 .1287740500D+03 .4991767000D+01 .1056910000D+02 .4626750000D+01 .3023200000D+01 .8953000000D+00 .1935300000D+01 +7 33720120325201204162456011.4 -.8423810000D+02 .2476884000D+02 .1413004500D+04 .9997922000D+02 .3732601000D+01 .8893500000D+01 .3171763000D+01 .1551900000D+01 .5947400000D+01 .6780000000D+00 -.7546300000D+01 .1791310000D+01 .3557259000D+03 .3091480000D+02 .1181315000D+01 .2832100000D+01 .4815399000D+01 .3167000000D+01 .1092700000D+01 .2426200000D+01 -.1808120000D+02 .5150770000D+01 .1441533100D+04 .1261709900D+03 .4841122000D+01 .1141600000D+02 .4852107000D+01 .3217800000D+01 .1143300000D+01 .2447600000D+01 +7 33820120416201205082456033.4 -.1151907000D+03 .2968426000D+02 .1365629400D+04 .8684744000D+02 .3548777000D+01 .7387200000D+01 .3395648000D+01 .1829900000D+01 .9670000000D-01 .1396100000D+01 .1162760000D+02 .7748000000D-01 .3536654000D+03 .2877533000D+02 .1018509000D+01 .2661900000D+01 .5003564000D+01 .3267000000D+01 .1263800000D+01 .2788800000D+01 .6201660000D+02 -.2182530000D+01 .1500063400D+04 .1217774700D+03 .4328890000D+01 .1118030000D+02 .5049979000D+01 .3328900000D+01 .1333000000D+01 .2819100000D+01 +7 33920120508201205302456055.4 -.1081345000D+03 .3127938000D+02 .1347215100D+04 .8379628000D+02 .3620010000D+01 .7689300000D+01 .3641024000D+01 .2095100000D+01 .4285000000D+00 .2089300000D+01 .3499240000D+02 -.2128880000D+01 .3514213000D+03 .2647043000D+02 .8040600000D+00 .2133400000D+01 .5163243000D+01 .3307100000D+01 .1395100000D+01 .3065800000D+01 .1665548000D+03 -.1218443000D+02 .1553082400D+04 .1150937700D+03 .3482501000D+01 .9205700000D+01 .5219246000D+01 .3372500000D+01 .1483200000D+01 .3110000000D+01 +7 34020120530201206212456077.4 -.5521750000D+02 .2860638000D+02 .1380101800D+04 .9053378000D+02 .3653481000D+01 .8348600000D+01 .3888351000D+01 .2273400000D+01 .6116000000D+00 .2518300000D+01 .5763700000D+02 -.4369620000D+01 .3484435000D+03 .2447541000D+02 .5859910000D+00 .1411200000D+01 .5307886000D+01 .3326600000D+01 .1514200000D+01 .3313200000D+01 .2706176000D+03 -.2254079000D+02 .1578580100D+04 .1079573800D+03 .2515507000D+01 .6059200000D+01 .5372369000D+01 .3388100000D+01 .1618100000D+01 .3386500000D+01 +7 34120120621201207132456099.4 .3416440000D+02 .2229558000D+02 .1458180800D+04 .1032757500D+03 .3516791000D+01 .7957300000D+01 .4111673000D+01 .2363400000D+01 .6695000000D+00 .2744700000D+01 .7667650000D+02 -.6360900000D+01 .3463709000D+03 .2308185000D+02 .3999380000D+00 .6946000000D+00 .5452384000D+01 .3363700000D+01 .1652600000D+01 .3599900000D+01 .3526252000D+03 -.3114557000D+02 .1572178200D+04 .1019779600D+03 .1665266000D+01 .2844800000D+01 .5523346000D+01 .3421100000D+01 .1764100000D+01 .3763700000D+01 +7 34220120713201208042456121.4 .1429148000D+03 .1374773000D+02 .1556717100D+04 .1187498100D+03 .3279290000D+01 .6518000000D+01 .4300349000D+01 .2409900000D+01 .6296000000D+00 .2810400000D+01 .9105230000D+02 -.7985090000D+01 .3471021000D+03 .2237935000D+02 .2648960000D+00 .1503000000D+00 .5607441000D+01 .3446400000D+01 .1850500000D+01 .4480200000D+01 .4024038000D+03 -.3689329000D+02 .1543263400D+04 .9779855000D+02 .1079471000D+01 .8724000000D+00 .5681150000D+01 .3503600000D+01 .1946200000D+01 .5043600000D+01 +7 34320120804201208262456143.4 .2556041000D+03 .4288650000D+01 .1652421400D+04 .1346948800D+03 .3080884000D+01 .4860900000D+01 .4458799000D+01 .2447600000D+01 .5165000000D+00 .2644600000D+01 .1003235000D+03 -.9181220000D+01 .3519433000D+03 .2246087000D+02 .1926530000D+00 .2883000000D+00 .5778621000D+01 .3589600000D+01 .2130300000D+01 .3423000000D+00 .4198561000D+03 -.3961658000D+02 .1505839000D+04 .9593995000D+02 .7988160000D+00 .1447100000D+01 .5849100000D+01 .3645600000D+01 .2147200000D+01 .1757000000D+00 +7 34420120826201209172456165.4 .3622587000D+03 -.5198860000D+01 .1731845800D+04 .1495860400D+03 .3028949000D+01 .4385800000D+01 .4596308000D+01 .2492400000D+01 .3676000000D+00 .2202600000D+01 .1038332000D+03 -.9865280000D+01 .3618540000D+03 .2359432000D+02 .1892100000D+00 .3731000000D+00 .5967387000D+01 .3793800000D+01 .2370900000D+01 .7427000000D+00 .4092776000D+03 -.3959750000D+02 .1472116900D+04 .9727100000D+02 .7937370000D+00 .1494000000D+01 .6027081000D+01 .3838600000D+01 .2269400000D+01 .6030000000D+00 +7 34520120917201210092456187.4 .4570821000D+03 -.1418301000D+02 .1788899100D+04 .1623365100D+03 .3145477000D+01 .5598800000D+01 .4721625000D+01 .2550800000D+01 .2331000000D+00 .1889500000D+01 .1004218000D+03 -.9901350000D+01 .3779809000D+03 .2627085000D+02 .2555850000D+00 .1466000000D+00 .6172327000D+01 .4042400000D+01 .2431000000D+01 .1334400000D+01 .3745751000D+03 -.3713106000D+02 .1451116600D+04 .1028453400D+03 .1032238000D+01 .4555000000D+00 .6213959000D+01 .4063500000D+01 .2292500000D+01 .1154200000D+01 +7 34620121009201210312456209.4 .5349682000D+03 -.2217496000D+02 .1819705500D+04 .1718947300D+03 .3366875000D+01 .7231600000D+01 .4842696000D+01 .2627900000D+01 .1537000000D+00 .1861200000D+01 .8866990000D+02 -.9123740000D+01 .4018579000D+03 .3103244000D+02 .4039630000D+00 .4816000000D+00 .1059580000D+00 .4303600000D+01 .2407500000D+01 .4026000000D+01 .3177411000D+03 -.3236956000D+02 .1449823300D+04 .1135295300D+03 .1507529000D+01 .1676300000D+01 .1249880000D+00 .4297500000D+01 .2299200000D+01 .4031900000D+01 +7 34720121031201211222456231.4 .5886422000D+03 -.2846131000D+02 .1819856900D+04 .1770910100D+03 .3584600000D+01 .8268300000D+01 .4968267000D+01 .2732300000D+01 .1524000000D+00 .2007300000D+01 .6782280000D+02 -.7424250000D+01 .4345082000D+03 .3804422000D+02 .6433670000D+00 .1414900000D+01 .3266890000D+00 .4546800000D+01 .2403100000D+01 .4333900000D+01 .2405815000D+03 -.2546257000D+02 .1472798800D+04 .1293734700D+03 .2201262000D+01 .4547400000D+01 .3232910000D+00 .4521100000D+01 .2329700000D+01 .4312300000D+01 +7 34820121122201212142456253.4 .6086250000D+03 -.3208424000D+02 .1786113200D+04 .1771805200D+03 .3702966000D+01 .8317900000D+01 .5109239000D+01 .2878600000D+01 .2460000000D+00 .2306900000D+01 .3928050000D+02 -.4894920000D+01 .4740909000D+03 .4663486000D+02 .9556080000D+00 .2524000000D+01 .5413940000D+00 .4759900000D+01 .2438900000D+01 .4566800000D+01 .1483482000D+03 -.1688048000D+02 .1518176200D+04 .1487730500D+03 .3047791000D+01 .7721800000D+01 .5202360000D+00 .4724900000D+01 .2388000000D+01 .4542700000D+01 +7 34920121214201301052456275.4 .5870209000D+03 -.3217342000D+02 .1722161100D+04 .1731617600D+03 .3717306000D+01 .7857300000D+01 .5278210000D+01 .3085100000D+01 .4555000000D+00 .2818600000D+01 .7872600000D+01 -.1956100000D+01 .5135849000D+03 .5513169000D+02 .1285013000D+01 .3499900000D+01 .7435510000D+00 .4950600000D+01 .2515000000D+01 .4811400000D+01 .5290780000D+02 -.7710980000D+01 .1572732300D+04 .1680323300D+03 .3911294000D+01 .1042230000D+02 .7110110000D+00 .4912700000D+01 .2475700000D+01 .4785800000D+01 +7 35020130105201301272456297.4 .5245173000D+03 -.2859272000D+02 .1644477300D+04 .1688567100D+03 .3783005000D+01 .8431700000D+01 .5485054000D+01 .3361900000D+01 .7861000000D+00 .3515200000D+01 -.1863250000D+02 .6752400000D+00 .5416003000D+03 .6127351000D+02 .1549190000D+01 .4004100000D+01 .9350690000D+00 .5138400000D+01 .2637400000D+01 .5115300000D+01 -.2761780000D+02 .3545300000D+00 .1612484300D+04 .1820775400D+03 .4601724000D+01 .1183010000D+02 .8961150000D+00 .5099400000D+01 .2602000000D+01 .5084500000D+01 +7 35120130127201302182456319.4 .4363200000D+03 -.2252083000D+02 .1578274300D+04 .1687992500D+03 .4097040000D+01 .1049060000D+02 .5727681000D+01 .3689000000D+01 .1178100000D+01 .4148900000D+01 -.3278290000D+02 .2274910000D+01 .5478273000D+03 .6331239000D+02 .1680570000D+01 .3936300000D+01 .1126493000D+01 .5347400000D+01 .2821700000D+01 .5542600000D+01 -.7526440000D+02 .5587750000D+01 .1613443100D+04 .1867726500D+03 .4961062000D+01 .1170030000D+02 .1083693000D+01 .5306600000D+01 .2784700000D+01 .5500100000D+01 +7 35220130218201303122456341.4 .3507400000D+03 -.1639167000D+02 .1537369100D+04 .1724209200D+03 .4574181000D+01 .1221520000D+02 .5986496000D+01 .4020000000D+01 .1544000000D+01 .4678900000D+01 -.3259770000D+02 .2592460000D+01 .5308148000D+03 .6138807000D+02 .1683971000D+01 .3675100000D+01 .1332282000D+01 .5599300000D+01 .3084600000D+01 .6144700000D+01 -.8372170000D+02 .7279090000D+01 .1569547100D+04 .1822020500D+03 .4999931000D+01 .1102400000D+02 .1287019000D+01 .5556500000D+01 .3043900000D+01 .6089300000D+01 +7 35320130312201304032456363.4 .2952708000D+03 -.1268712000D+02 .1508120700D+04 .1731750300D+03 .4884225000D+01 .1242190000D+02 .6238929000D+01 .4329600000D+01 .1871100000D+01 .5244100000D+01 -.2441970000D+02 .2144970000D+01 .5010949000D+03 .5767512000D+02 .1640867000D+01 .3649200000D+01 .1560734000D+01 .5895500000D+01 .3414700000D+01 .5499000000D+00 -.6734730000D+02 .6613430000D+01 .1503986000D+04 .1737730600D+03 .4937096000D+01 .1111890000D+02 .1515571000D+01 .5854500000D+01 .3374900000D+01 .4968000000D+00 +7 35420130403201304252456385.4 .2763636000D+03 -.1208978000D+02 .1468851800D+04 .1669356700D+03 .4881701000D+01 .1210520000D+02 .1989320000D+00 .4633000000D+01 .2202800000D+01 .5931900000D+01 -.1919330000D+02 .1917110000D+01 .4733469000D+03 .5416617000D+02 .1606964000D+01 .3564200000D+01 .1802237000D+01 .6201400000D+01 .3751600000D+01 .1212700000D+01 -.5586030000D+02 .6272430000D+01 .1454234000D+04 .1670314000D+03 .4946624000D+01 .1124460000D+02 .1761890000D+01 .6168900000D+01 .3721600000D+01 .1168200000D+01 +7 35520130425201305172456407.4 .2716032000D+03 -.1267409000D+02 .1425171400D+04 .1582566300D+03 .4800675000D+01 .1238150000D+02 .4484240000D+00 .4951500000D+01 .2563100000D+01 .3653000000D+00 -.2357660000D+02 .2560460000D+01 .4534951000D+03 .5068227000D+02 .1545303000D+01 .3194800000D+01 .2035118000D+01 .1931000000D+00 .4047000000D+01 .1946300000D+01 -.7186370000D+02 .8432240000D+01 .1434997200D+04 .1610247300D+03 .4907886000D+01 .1045050000D+02 .2003457000D+01 .1719000000D+00 .4028600000D+01 .1902300000D+01 +7 35620130517201306082456429.4 .2482191000D+03 -.1147966000D+02 .1410232800D+04 .1549184800D+03 .4925268000D+01 .1195010000D+02 .7122200000D+00 .5266400000D+01 .2906800000D+01 .1039400000D+01 -.3439220000D+02 .3851730000D+01 .4376447000D+03 .4647033000D+02 .1426873000D+01 .3110900000D+01 .2253009000D+01 .4404000000D+00 .4320700000D+01 .2802900000D+01 -.1095001000D+03 .1275163000D+02 .1426598900D+04 .1519339300D+03 .4668725000D+01 .1034030000D+02 .2230212000D+01 .4268000000D+00 .4309000000D+01 .2764500000D+01 +7 35720130608201306302456451.4 .1937800000D+03 -.7293020000D+01 .1442019100D+04 .1574320400D+03 .5186329000D+01 .1042580000D+02 .9737200000D+00 .5535500000D+01 .3180900000D+01 .1811600000D+01 -.4230000000D+02 .4978240000D+01 .4227419000D+03 .4230983000D+02 .1309549000D+01 .3435000000D+01 .2473978000D+01 .7001000000D+00 .4626000000D+01 .3560600000D+01 -.1389320000D+03 .1663768000D+02 .1407658700D+04 .1409508500D+03 .4365972000D+01 .1150990000D+02 .2457609000D+01 .6880000000D+00 .4614000000D+01 .3541400000D+01 +7 35820130630201307222456473.4 .1272016000D+03 -.1754530000D+01 .1494180800D+04 .1596472800D+03 .5347847000D+01 .1029520000D+02 .1214112000D+01 .5758800000D+01 .3408600000D+01 .2723400000D+01 -.4026330000D+02 .5293280000D+01 .4127838000D+03 .4005246000D+02 .1287531000D+01 .3520400000D+01 .2718109000D+01 .9979000000D+00 .4974500000D+01 .4211500000D+01 -.1348565000D+03 .1776173000D+02 .1383534100D+04 .1338188900D+03 .4297405000D+01 .1181640000D+02 .2704062000D+01 .9808000000D+00 .4955800000D+01 .4208000000D+01 +7 35920130722201308132456495.4 .7961580000D+02 .2279310000D+01 .1524720600D+04 .1572632600D+03 .5340438000D+01 .1175470000D+02 .1436695000D+01 .5976600000D+01 .3649900000D+01 .3496600000D+01 -.2903280000D+02 .4837460000D+01 .4143613000D+03 .4049603000D+02 .1379045000D+01 .3351200000D+01 .2980819000D+01 .1304900000D+01 .5309900000D+01 .4919500000D+01 -.9977980000D+02 .1623373000D+02 .1373911300D+04 .1331631300D+03 .4517908000D+01 .1115500000D+02 .2963836000D+01 .1278100000D+01 .5281900000D+01 .4922000000D+01 +7 36020130813201309042456517.4 .6546550000D+02 .3368820000D+01 .1520542200D+04 .1516583900D+03 .5301477000D+01 .1246530000D+02 .1655707000D+01 .6219500000D+01 .3936100000D+01 .4143000000D+01 -.1619140000D+02 .4284420000D+01 .4269594000D+03 .4203517000D+02 .1498149000D+01 .3464200000D+01 .3234464000D+01 .1580700000D+01 .5605700000D+01 .5678300000D+01 -.6035430000D+02 .1438812000D+02 .1378045800D+04 .1338810900D+03 .4745332000D+01 .1126440000D+02 .3210137000D+01 .1542900000D+01 .5568700000D+01 .5671900000D+01 +7 36120130904201309262456539.4 .7055650000D+02 .2675050000D+01 .1503563300D+04 .1465824000D+03 .5350180000D+01 .1255150000D+02 .1874346000D+01 .1919000000D+00 .4238400000D+01 .4795700000D+01 -.1032410000D+02 .4427970000D+01 .4411468000D+03 .4225857000D+02 .1558859000D+01 .3764000000D+01 .3459801000D+01 .1830300000D+01 .5899800000D+01 .4640000000D-01 -.4356700000D+02 .1468299000D+02 .1370792200D+04 .1291273800D+03 .4730159000D+01 .1175820000D+02 .3425587000D+01 .1780300000D+01 .5853100000D+01 .2640000000D-01 +7 36220130926201310182456561.4 .6403750000D+02 .2971940000D+01 .1500147600D+04 .1419331600D+03 .5341655000D+01 .1318760000D+02 .2077279000D+01 .4132000000D+00 .4507300000D+01 .5411000000D+01 -.1432140000D+02 .5563460000D+01 .4487386000D+03 .4044968000D+02 .1565480000D+01 .3730800000D+01 .3662432000D+01 .2084800000D+01 .6233600000D+01 .6305000000D+00 -.5536270000D+02 .1772294000D+02 .1335702200D+04 .1179578200D+03 .4523346000D+01 .1113770000D+02 .3616295000D+01 .2020200000D+01 .6176300000D+01 .5950000000D+00 +7 36320131018201311092456583.4 .2146680000D+02 .6579640000D+01 .1513719100D+04 .1336603700D+03 .4999084000D+01 .1358390000D+02 .2245930000D+01 .5649000000D+00 .4732200000D+01 .5894100000D+01 -.2262790000D+02 .7206660000D+01 .4518148000D+03 .3813178000D+02 .1591912000D+01 .3491500000D+01 .3859947000D+01 .2355800000D+01 .3104000000D+00 .1280400000D+01 -.7759430000D+02 .2189445000D+02 .1286391300D+04 .1056987600D+03 .4370464000D+01 .9891400000D+01 .3799887000D+01 .2276500000D+01 .2460000000D+00 .1225000000D+01 +7 36420131109201312012456605.4 -.5939470000D+02 .1388045000D+02 .1529144300D+04 .1197234700D+03 .4222524000D+01 .1228760000D+02 .2378865000D+01 .6432000000D+00 .4939400000D+01 .6276200000D+01 -.2450450000D+02 .8357790000D+01 .4612016000D+03 .3723244000D+02 .1657283000D+01 .3629100000D+01 .4062347000D+01 .2601300000D+01 .6243000000D+00 .1954600000D+01 -.8189010000D+02 .2455845000D+02 .1256015100D+04 .9818801000D+02 .4356190000D+01 .9692500000D+01 .3988381000D+01 .2514800000D+01 .5598000000D+00 .1893400000D+01 +7 36520131201201312232456627.4 -.1591105000D+03 .2328425000D+02 .1531235400D+04 .1027782300D+03 .3180799000D+01 .9213100000D+01 .2493542000D+01 .6647000000D+00 .5177200000D+01 .3698000000D+00 -.1072160000D+02 .8097810000D+01 .4868479000D+03 .3809770000D+02 .1679857000D+01 .4019000000D+01 .4262117000D+01 .2755100000D+01 .8414000000D+00 .2460200000D+01 -.4733600000D+02 .2365010000D+02 .1271753600D+04 .9670492000D+02 .4294747000D+01 .1033350000D+02 .4178349000D+01 .2672100000D+01 .7805000000D+00 .2409800000D+01 +7 36620131223201401142456649.4 -.2491619000D+03 .3230888000D+02 .1514051000D+04 .8751133000D+02 .2206057000D+01 .5651700000D+01 .2614719000D+01 .6673000000D+00 .5517300000D+01 .9071000000D+00 .2131010000D+02 .6070960000D+01 .5290745000D+03 .4017265000D+02 .1581692000D+01 .4013900000D+01 .4444858000D+01 .2800100000D+01 .9600000000D+00 .2785400000D+01 .3016300000D+02 .1857376000D+02 .1336784600D+04 .9975801000D+02 .4002451000D+01 .1019350000D+02 .4357493000D+01 .2726700000D+01 .9034000000D+00 .2745000000D+01 +7 36720140114201402052456671.4 -.3056211000D+03 .3879953000D+02 .1482140400D+04 .7711729000D+02 .1624714000D+01 .3793100000D+01 .2763892000D+01 .7136000000D+00 .6000800000D+01 .1852100000D+01 .6701630000D+02 .2565920000D+01 .5785167000D+03 .4324912000D+02 .1363268000D+01 .3348000000D+01 .4606791000D+01 .2778300000D+01 .9872000000D+00 .2988000000D+01 .1398826000D+03 .1008011000D+02 .1432221500D+04 .1064513900D+03 .3472121000D+01 .8579500000D+01 .4520189000D+01 .2715100000D+01 .9372000000D+00 .2954400000D+01 +7 36820140205201402272456693.4 -.3160687000D+03 .4156284000D+02 .1449333800D+04 .7297355000D+02 .1479177000D+01 .4184900000D+01 .2953469000D+01 .8621000000D+00 .1607000000D+00 .2679800000D+01 .1179344000D+03 -.1748880000D+01 .6226566000D+03 .4701662000D+02 .1092340000D+01 .2206600000D+01 .4756004000D+01 .2748900000D+01 .9131000000D+00 .3052800000D+01 .2644776000D+03 -.4358800000D+00 .1531662600D+04 .1158606200D+03 .2837613000D+01 .5859100000D+01 .4671602000D+01 .2692800000D+01 .8769000000D+00 .3030600000D+01 +7 36920140227201403212456715.4 -.2784358000D+03 .4026823000D+02 .1434841500D+04 .7669124000D+02 .1489924000D+01 .4265800000D+01 .3184166000D+01 .1113500000D+01 .3481000000D+00 .3078000000D+01 .1655093000D+03 -.6147730000D+01 .6515341000D+03 .5056311000D+02 .8646420000D+00 .1119400000D+01 .4903851000D+01 .2752400000D+01 .7190000000D+00 .2690300000D+01 .3872378000D+03 -.1157189000D+02 .1612828300D+04 .1259451900D+03 .2292371000D+01 .3157800000D+01 .4821238000D+01 .2698200000D+01 .7066000000D+00 .2736800000D+01 +7 37020140321201404122456737.4 -.1966777000D+03 .3505306000D+02 .1456556200D+04 .8985196000D+02 .1533730000D+01 .3048200000D+01 .3444126000D+01 .1400600000D+01 .2669000000D+00 .3179600000D+01 .2031327000D+03 -.1002076000D+02 .6599837000D+03 .5280289000D+02 .7521710000D+00 .1180300000D+01 .5059843000D+01 .2805500000D+01 .4534000000D+00 .1753500000D+01 .4945057000D+03 -.2211936000D+02 .1660960100D+04 .1341472800D+03 .2005827000D+01 .3046700000D+01 .4977789000D+01 .2747800000D+01 .4555000000D+00 .1840600000D+01 +7 37120140412201405042456759.4 -.7841670000D+02 .2631646000D+02 .1522520400D+04 .1116959500D+03 .1774194000D+01 .1691000000D+01 .3711736000D+01 .1657300000D+01 .7900000000D-02 .2281200000D+01 .2264105000D+03 -.1289323000D+02 .6478017000D+03 .5305971000D+02 .7331850000D+00 .1809100000D+01 .5231282000D+01 .2915000000D+01 .2730000000D+00 .1599600000D+01 .5743484000D+03 -.3091367000D+02 .1668291900D+04 .1383297600D+03 .1974396000D+01 .4794100000D+01 .5148387000D+01 .2848900000D+01 .2564000000D+00 .1619200000D+01 +7 37220140504201405262456781.4 .6405070000D+02 .1486244000D+02 .1623669300D+04 .1387639000D+03 .2373321000D+01 .4346000000D+01 .3964438000D+01 .1866400000D+01 .6059200000D+01 .1477400000D+01 .2330505000D+03 -.1442535000D+02 .6197693000D+03 .5146532000D+02 .7220230000D+00 .2057600000D+01 .5424427000D+01 .3089100000D+01 .2829000000D+00 .1801800000D+01 .6156871000D+03 -.3673226000D+02 .1635446300D+04 .1376933100D+03 .2001441000D+01 .5756500000D+01 .5339769000D+01 .3010800000D+01 .2280000000D+00 .1783200000D+01 +7 37320140526201406172456803.4 .2124809000D+03 .2107580000D+01 .1734189400D+04 .1660376000D+03 .3220300000D+01 .8115500000D+01 .4189025000D+01 .2039800000D+01 .5955900000D+01 .1506100000D+01 .2229820000D+03 -.1445609000D+02 .5854276000D+03 .4924840000D+02 .6868490000D+00 .1886600000D+01 .5644370000D+01 .3338600000D+01 .5190000000D+00 .2259900000D+01 .6107310000D+03 -.3854046000D+02 .1575461900D+04 .1340869200D+03 .1952668000D+01 .5499800000D+01 .5558067000D+01 .3247300000D+01 .4168000000D+00 .2186300000D+01 +7 37420140617201407092456825.4 .3444023000D+03 -.9999210000D+01 .1821612100D+04 .1882450200D+03 .4065009000D+01 .1120680000D+02 .4385072000D+01 .2196100000D+01 .5956300000D+01 .1674800000D+01 .1982879000D+03 -.1303964000D+02 .5571134000D+03 .4863189000D+02 .7076370000D+00 .1862900000D+01 .5891495000D+01 .3660100000D+01 .9852000000D+00 .3075200000D+01 .5591993000D+03 -.3596095000D+02 .1514044300D+04 .1326917200D+03 .1978269000D+01 .5215800000D+01 .5804671000D+01 .3560200000D+01 .8425000000D+00 .2932500000D+01 +7 37520140709201407312456847.4 .4383225000D+03 -.1943933000D+02 .1860317100D+04 .2014254000D+03 .4687138000D+01 .1278190000D+02 .4561372000D+01 .2354100000D+01 .6032500000D+01 .1920700000D+01 .1628667000D+03 -.1044068000D+02 .5455323000D+03 .5166513000D+02 .9067490000D+00 .2731000000D+01 .6155246000D+01 .4010200000D+01 .1489400000D+01 .3849700000D+01 .4708649000D+03 -.2960582000D+02 .1478909400D+04 .1392762900D+03 .2426881000D+01 .7120600000D+01 .6069110000D+01 .3910800000D+01 .1355500000D+01 .3739000000D+01 +7 37620140731201408222456869.4 .4794341000D+03 -.2468939000D+02 .1840287200D+04 .2043138000D+03 .4978092000D+01 .1273630000D+02 .4730865000D+01 .2532900000D+01 .6180100000D+01 .2271700000D+01 .1226271000D+03 -.7155030000D+01 .5539581000D+03 .5830988000D+02 .1262556000D+01 .4086800000D+01 .1299190000D+00 .4326200000D+01 .1843000000D+01 .4322300000D+01 .3648595000D+03 -.2107368000D+02 .1480869600D+04 .1542324600D+03 .3298904000D+01 .1050340000D+02 .4496600000D-01 .4233500000D+01 .1737400000D+01 .4249000000D+01 +7 37720140822201409132456891.4 .4650901000D+03 -.2528495000D+02 .1770814700D+04 .1992976800D+03 .5001032000D+01 .1208860000D+02 .4906212000D+01 .2748800000D+01 .1242000000D+00 .2775800000D+01 .8542150000D+02 -.3897580000D+01 .5751513000D+03 .6618688000D+02 .1651307000D+01 .5243400000D+01 .3604920000D+00 .4585100000D+01 .2084200000D+01 .4679300000D+01 .2656247000D+03 -.1258935000D+02 .1503613300D+04 .1712627500D+03 .4242124000D+01 .1335250000D+02 .2760080000D+00 .4498000000D+01 .1995000000D+01 .4617500000D+01 +7 37820140913201410052456913.4 .4077938000D+03 -.2215182000D+02 .1677757700D+04 .1917879600D+03 .4979640000D+01 .1250060000D+02 .5094525000D+01 .3005900000D+01 .4264000000D+00 .3389500000D+01 .5957510000D+02 -.1464500000D+01 .5952220000D+03 .7226405000D+02 .1957037000D+01 .5801600000D+01 .5575200000D+00 .4804600000D+01 .2286500000D+01 .5047100000D+01 .1958606000D+03 -.6336360000D+01 .1515348400D+04 .1825914600D+03 .4932290000D+01 .1456490000D+02 .4713910000D+00 .4718200000D+01 .2201600000D+01 .4981700000D+01 +7 37920141005201410272456935.4 .3333041000D+03 -.1748279000D+02 .1591779500D+04 .1866810900D+03 .5113255000D+01 .1403330000D+02 .5291165000D+01 .3283400000D+01 .7564000000D+00 .3959200000D+01 .5051480000D+02 -.4201700000D+00 .6022217000D+03 .7458002000D+02 .2115235000D+01 .5802400000D+01 .7297790000D+00 .5014400000D+01 .2498800000D+01 .5507600000D+01 .1678814000D+03 -.3624400000D+01 .1491652100D+04 .1838469900D+03 .5215529000D+01 .1426260000D+02 .6386200000D+00 .4922400000D+01 .2408400000D+01 .5427300000D+01 +7 38020141027201411182456957.4 .2720292000D+03 -.1398415000D+02 .1530412800D+04 .1837582200D+03 .5331091000D+01 .1495760000D+02 .5479237000D+01 .3543100000D+01 .1051600000D+01 .4467800000D+01 .5692330000D+02 -.7301300000D+00 .5937872000D+03 .7333749000D+02 .2147388000D+01 .5772700000D+01 .8928430000D+00 .5239100000D+01 .2749700000D+01 .6086800000D+01 .1768356000D+03 -.4210960000D+01 .1431738100D+04 .1761662600D+03 .5160822000D+01 .1375150000D+02 .7927500000D+00 .5136100000D+01 .2647000000D+01 .5990000000D+01 +7 38120141118201412102456979.4 .2451801000D+03 -.1361139000D+02 .1489360900D+04 .1781971700D+03 .5369930000D+01 .1445310000D+02 .5642705000D+01 .3763500000D+01 .1294600000D+01 .5023600000D+01 .6946280000D+02 -.1615370000D+01 .5793814000D+03 .7079828000D+02 .2149809000D+01 .6050500000D+01 .1060326000D+01 .5484600000D+01 .3035200000D+01 .4134000000D+00 .2005565000D+03 -.6219000000D+01 .1360390800D+04 .1653881700D+03 .5014376000D+01 .1401950000D+02 .9488360000D+00 .5369800000D+01 .2921000000D+01 .3118000000D+00 +7 38220141210201501012457001.4 .2520388000D+03 -.1636160000D+02 .1453652100D+04 .1666051000D+03 .5092222000D+01 .1393430000D+02 .5784045000D+01 .3956300000D+01 .1515800000D+01 .5709600000D+01 .7473410000D+02 -.1882830000D+01 .5742896000D+03 .6931377000D+02 .2194999000D+01 .6122000000D+01 .1235319000D+01 .5726000000D+01 .3307400000D+01 .9956000000D+00 .2091866000D+03 -.6959160000D+01 .1314265900D+04 .1577692700D+03 .4987770000D+01 .1407820000D+02 .1114185000D+01 .5605900000D+01 .3191100000D+01 .8870000000D+00 +7 38320150101201501232457023.4 .2677463000D+03 -.1999129000D+02 .1415547900D+04 .1515096500D+03 .4660080000D+01 .1494950000D+02 .5928556000D+01 .4157500000D+01 .1763100000D+01 .1376000000D+00 .6381020000D+02 -.6926400000D+00 .5870550000D+03 .6902478000D+02 .2249585000D+01 .5602400000D+01 .1409552000D+01 .5928600000D+01 .3521900000D+01 .1651200000D+01 .1823972000D+03 -.4488860000D+01 .1316633100D+04 .1547864000D+03 .5055986000D+01 .1284740000D+02 .1284317000D+01 .5810300000D+01 .3409600000D+01 .1513600000D+01 +7 38420150123201502142457045.4 .2577238000D+03 -.2126064000D+02 .1384447400D+04 .1404861600D+03 .4446964000D+01 .1588690000D+02 .6110522000D+01 .4402400000D+01 .2061400000D+01 .7641000000D+00 .3990120000D+02 .1719190000D+01 .6104272000D+03 .6822366000D+02 .2239474000D+01 .5349200000D+01 .1579234000D+01 .6094200000D+01 .3694300000D+01 .2483200000D+01 .1248734000D+03 .9216600000D+00 .1356662800D+04 .1529272400D+03 .5054095000D+01 .1183930000D+02 .1453571000D+01 .5977000000D+01 .3581000000D+01 .2317700000D+01 +7 38520150214201503082457067.4 .2037412000D+03 -.1830876000D+02 .1383804500D+04 .1398546500D+03 .4680779000D+01 .1503850000D+02 .6233200000D-01 .4682100000D+01 .2366100000D+01 .1415300000D+01 .1784650000D+02 .4038140000D+01 .6264267000D+03 .6554179000D+02 .2149755000D+01 .6086200000D+01 .1759204000D+01 .6270100000D+01 .3891500000D+01 .3284700000D+01 .6713170000D+02 .6611740000D+01 .1394835400D+04 .1480874300D+03 .4896426000D+01 .1317450000D+02 .1631320000D+01 .6146000000D+01 .3765900000D+01 .3142700000D+01 +7 38620150308201503302457089.4 .1235512000D+03 -.1254386000D+02 .1422374000D+04 .1463262800D+03 .5131253000D+01 .1421790000D+02 .3280090000D+00 .4952600000D+01 .2635600000D+01 .2212400000D+01 .1292380000D+02 .4853650000D+01 .6233500000D+03 .6162174000D+02 .2061090000D+01 .6628300000D+01 .1975209000D+01 .2322000000D+00 .4182800000D+01 .3945700000D+01 .4493190000D+02 .9316840000D+01 .1396991100D+04 .1398824200D+03 .4693371000D+01 .1468880000D+02 .1840948000D+01 .9470000000D-01 .4039200000D+01 .3816800000D+01 +7 38720150330201504212457111.4 .6280030000D+02 -.8063280000D+01 .1462450000D+04 .1485839900D+03 .5360739000D+01 .1534210000D+02 .5915160000D+00 .5213700000D+01 .2912900000D+01 .2998000000D+01 .2641640000D+02 .3988720000D+01 .6089802000D+03 .5898790000D+02 .2088414000D+01 .6401900000D+01 .2239555000D+01 .5564000000D+00 .4555200000D+01 .4635100000D+01 .6766940000D+02 .8055340000D+01 .1370477400D+04 .1333366200D+03 .4712689000D+01 .1444560000D+02 .2099657000D+01 .4135000000D+00 .4410200000D+01 .4490700000D+01 +7 38820150421201505132457133.4 .5716020000D+02 -.8288040000D+01 .1452531500D+04 .1403093100D+03 .5263615000D+01 .1573900000D+02 .8506530000D+00 .5514400000D+01 .3272700000D+01 .3662400000D+01 .4164930000D+02 .2929070000D+01 .5995458000D+03 .5785434000D+02 .2168181000D+01 .6386500000D+01 .2525235000D+01 .8861000000D+00 .4918800000D+01 .5396700000D+01 .1030914000D+03 .5652330000D+01 .1354448200D+04 .1312655200D+03 .4933490000D+01 .1431380000D+02 .2389015000D+01 .7559000000D+00 .4789000000D+01 .5253000000D+01 +7 38920150513201506042457155.4 .9420180000D+02 -.1238468000D+02 .1398837900D+04 .1288441000D+03 .5244782000D+01 .1432040000D+02 .1126125000D+01 .5884400000D+01 .3717900000D+01 .4374900000D+01 .3763670000D+02 .3642830000D+01 .5932821000D+03 .5393629000D+02 .2074163000D+01 .6613300000D+01 .2783163000D+01 .1161800000D+01 .5258900000D+01 .6050100000D+01 .1004019000D+03 .6793530000D+01 .1357115000D+04 .1252020100D+03 .4845233000D+01 .1510680000D+02 .2657671000D+01 .1042900000D+01 .5132900000D+01 .5931800000D+01 +7 39020150604201506262457177.4 .1165091000D+03 -.1529940000D+02 .1371337000D+04 .1241249700D+03 .5454712000D+01 .1419560000D+02 .1417086000D+01 .6240700000D+01 .4121400000D+01 .5165900000D+01 .9135800000D+01 .6736440000D+01 .5747032000D+03 .4468800000D+02 .1757782000D+01 .5890400000D+01 .2998831000D+01 .1406100000D+01 .5659000000D+01 .3210000000D+00 .3736940000D+02 .1374369000D+02 .1340920500D+04 .1065837000D+03 .4169969000D+01 .1401520000D+02 .2879242000D+01 .1277700000D+01 .5511200000D+01 .2014000000D+00 +7 39120150626201507182457199.4 .6979430000D+02 -.1198225000D+02 .1419192400D+04 .1218356100D+03 .5332487000D+01 .1527370000D+02 .1678461000D+01 .1692000000D+00 .4400900000D+01 .5771800000D+01 -.2774050000D+02 .1084816000D+02 .5423071000D+03 .3355189000D+02 .1480033000D+01 .4391400000D+01 .3202648000D+01 .1685500000D+01 .6194600000D+01 .9855000000D+00 -.5584330000D+02 .2398054000D+02 .1285543800D+04 .8030647000D+02 .3388778000D+01 .1056330000D+02 .3077984000D+01 .1519200000D+01 .6024800000D+01 .8207000000D+00 +7 39220150718201508092457221.4 -.5288190000D+02 -.1508220000D+01 .1515352300D+04 .1153474900D+03 .4494200000D+01 .1405940000D+02 .1876488000D+01 .2097000000D+00 .4581600000D+01 .6178700000D+01 -.4930450000D+02 .1382017000D+02 .5147163000D+03 .2674902000D+02 .1459404000D+01 .3754600000D+01 .3434056000D+01 .2024100000D+01 .4328000000D+00 .1866400000D+01 -.1220180000D+03 .3228150000D+02 .1220463300D+04 .6065097000D+02 .3176235000D+01 .8337700000D+01 .3296634000D+01 .1819600000D+01 .3034000000D+00 .1694700000D+01 +7 39320150809201508312457243.4 -.2124031000D+03 .1280225000D+02 .1603296200D+04 .1079994200D+03 .3159072000D+01 .9939300000D+01 .2027188000D+01 .1352000000D+00 .4701400000D+01 .2342000000D+00 -.4153720000D+02 .1426772000D+02 .5148331000D+03 .2692133000D+02 .1510478000D+01 .4126900000D+01 .3698341000D+01 .2272100000D+01 .7401000000D+00 .2532800000D+01 -.1220216000D+03 .3480146000D+02 .1197822400D+04 .5711669000D+02 .3271352000D+01 .8966300000D+01 .3551646000D+01 .2088200000D+01 .6622000000D+00 .2442400000D+01 +7 39420150831201509222457265.4 -.3589793000D+03 .2645220000D+02 .1648972200D+04 .1046166200D+03 .1806166000D+01 .4770000000D+01 .2163641000D+01 .4790000000D-01 .4771100000D+01 .6680000000D+00 -.5752900000D+01 .1215384000D+02 .5500379000D+03 .3221520000D+02 .1439076000D+01 .4041900000D+01 .3957805000D+01 .2340000000D+01 .8514000000D+00 .2904700000D+01 -.5552340000D+02 .3111479000D+02 .1244540600D+04 .6728374000D+02 .3141365000D+01 .9030700000D+01 .3813254000D+01 .2195600000D+01 .7994000000D+00 .2857900000D+01 +7 39520150922201510142457287.4 -.4626987000D+03 .3657128000D+02 .1649865300D+04 .1044013700D+03 .7934700000D+00 .1539000000D+01 .2307714000D+01 .3470000000D-01 .4724100000D+01 .2206700000D+01 .4724890000D+02 .8317950000D+01 .6077498000D+03 .4063877000D+02 .1261251000D+01 .3109100000D+01 .4179598000D+01 .2334900000D+01 .8080000000D+00 .3110900000D+01 .5162240000D+02 .2324794000D+02 .1341024400D+04 .8529194000D+02 .2766311000D+01 .7187300000D+01 .4043456000D+01 .2215800000D+01 .7676000000D+00 .3091000000D+01 +7 39620151014201511052457309.4 -.5190187000D+03 .4253402000D+02 .1622012400D+04 .1050143800D+03 .2989290000D+00 .3314700000D+01 .2466262000D+01 .1166000000D+00 .4115800000D+01 .3581200000D+01 .1059945000D+03 .3704390000D+01 .6700848000D+03 .5047237000D+02 .1095763000D+01 .1695900000D+01 .4361887000D+01 .2339800000D+01 .6166000000D+00 .3066600000D+01 .1712237000D+03 .1359213000D+02 .1449777200D+04 .1062535300D+03 .2405310000D+01 .4147300000D+01 .4232927000D+01 .2234700000D+01 .5860000000D+00 .3117200000D+01 +7 39720151105201511272457331.4 -.5364201000D+03 .4493938000D+02 .1583721000D+04 .1061317700D+03 .3319310000D+00 .4423200000D+01 .2637790000D+01 .2758000000D+00 .3481900000D+01 .4089500000D+01 .1632728000D+03 -.1085340000D+01 .7256214000D+03 .6028740000D+02 .1061690000D+01 .1085100000D+01 .4516067000D+01 .2372200000D+01 .3251000000D+00 .1951400000D+01 .2867000000D+03 .3615250000D+01 .1546991600D+04 .1268972700D+03 .2313723000D+01 .2104200000D+01 .4390663000D+01 .2273800000D+01 .3052000000D+00 .2188800000D+01 +7 39820151127201512192457353.4 -.5225421000D+03 .4438604000D+02 .1548419700D+04 .1089577300D+03 .4519420000D+00 .4259800000D+01 .2820603000D+01 .4922000000D+00 .3866000000D+01 .4603600000D+01 .2158073000D+03 -.5773100000D+01 .7695191000D+03 .6917517000D+02 .1191021000D+01 .2448000000D+01 .4652441000D+01 .2427300000D+01 .6740000000D-01 .1457700000D+01 .3927267000D+03 -.6163600000D+01 .1625495000D+04 .1457427500D+03 .2565732000D+01 .4666200000D+01 .4527196000D+01 .2330000000D+01 .4770000000D-01 .1454900000D+01 +7 39920151219201601102457375.4 -.4785511000D+03 .4094339000D+02 .1527458600D+04 .1157337500D+03 .7799650000D+00 .3548800000D+01 .3016223000D+01 .7504000000D+00 .4501000000D+01 .5420400000D+01 .2612091000D+03 -.1013409000D+02 .7990972000D+03 .7639513000D+02 .1413198000D+01 .3915200000D+01 .4779175000D+01 .2501400000D+01 .6209400000D+01 .1536800000D+01 .4875047000D+03 -.1551456000D+02 .1683477300D+04 .1618894600D+03 .3040463000D+01 .7969800000D+01 .4650941000D+01 .2399700000D+01 .6176000000D+01 .1491200000D+01 +7 40020160110201602012457397.4 -.4018393000D+03 .3436139000D+02 .1533615300D+04 .1292745300D+03 .1492877000D+01 .4798200000D+01 .3225875000D+01 .1027600000D+01 .4904700000D+01 .2405000000D+00 .2954056000D+03 -.1376309000D+02 .8110617000D+03 .8107157000D+02 .1629265000D+01 .4926000000D+01 .4905487000D+01 .2599300000D+01 .6180700000D+01 .1736900000D+01 .5656355000D+03 -.2386141000D+02 .1715689000D+04 .1738698700D+03 .3554018000D+01 .1054200000D+02 .4770631000D+01 .2486800000D+01 .6124200000D+01 .1665900000D+01 +7 40120160201201602232457419.4 -.2931493000D+03 .2469211000D+02 .1576865100D+04 .1508170700D+03 .2555153000D+01 .8728200000D+01 .3444247000D+01 .1291500000D+01 .5136900000D+01 .8794000000D+00 .3124146000D+03 -.1605112000D+02 .8022887000D+03 .8243234000D+02 .1757407000D+01 .5243500000D+01 .5043887000D+01 .2735700000D+01 .6254000000D+01 .2031500000D+01 .6157605000D+03 -.3005668000D+02 .1712589000D+04 .1796435800D+03 .3929340000D+01 .1176510000D+02 .4897832000D+01 .2603800000D+01 .6164300000D+01 .1921700000D+01 +7 40220160223201603162457441.4 -.1634070000D+03 .1290728000D+02 .1652605100D+04 .1775099500D+03 .3811461000D+01 .1334400000D+02 .3659505000D+01 .1523000000D+01 .5300600000D+01 .1254100000D+01 .3065888000D+03 -.1639070000D+02 .7733923000D+03 .8063240000D+02 .1766970000D+01 .5002800000D+01 .5210092000D+01 .2933200000D+01 .1615000000D+00 .2483600000D+01 .6238324000D+03 -.3266409000D+02 .1667007400D+04 .1780132000D+03 .4045934000D+01 .1154250000D+02 .5047734000D+01 .2772000000D+01 .2210000000D-01 .2302600000D+01 +7 40320160316201604072457463.4 -.3621350000D+02 .1145170000D+01 .1733404300D+04 .2023588800D+03 .4992951000D+01 .1691170000D+02 .3862230000D+01 .1727500000D+01 .5448600000D+01 .1568700000D+01 .2763949000D+03 -.1453039000D+02 .7328030000D+03 .7773062000D+02 .1732923000D+01 .5037000000D+01 .5418907000D+01 .3212400000D+01 .4984000000D+00 .3140500000D+01 .5811070000D+03 -.3068442000D+02 .1585446900D+04 .1711300100D+03 .3952163000D+01 .1106510000D+02 .5237135000D+01 .3016600000D+01 .2941000000D+00 .2884300000D+01 +7 40420160407201604292457485.4 .5733720000D+02 -.7727870000D+01 .1776835600D+04 .2170190800D+03 .5783775000D+01 .1822100000D+02 .4053590000D+01 .1927300000D+01 .5615700000D+01 .1921000000D+01 .2279857000D+03 -.1092318000D+02 .6964018000D+03 .7723761000D+02 .1830374000D+01 .6149000000D+01 .5672547000D+01 .3561300000D+01 .9462000000D+00 .3804300000D+01 .4938010000D+03 -.2446575000D+02 .1495615900D+04 .1657961300D+03 .3960993000D+01 .1251640000D+02 .5475879000D+01 .3345500000D+01 .7045000000D+00 .3575700000D+01 +7 40520160429201605212457507.4 .9297030000D+02 -.1140482000D+02 .1750321300D+04 .2166564500D+03 .5999605000D+01 .1751310000D+02 .4245302000D+01 .2151100000D+01 .5835800000D+01 .2395600000D+01 .1757959000D+03 -.6814010000D+01 .6766228000D+03 .8046547000D+02 .2114444000D+01 .7607500000D+01 .5947061000D+01 .3916500000D+01 .1365500000D+01 .4318000000D+01 .3880734000D+03 -.1622708000D+02 .1433325600D+04 .1682707700D+03 .4372863000D+01 .1553810000D+02 .5750325000D+01 .3712700000D+01 .1150600000D+01 .4148300000D+01 +7 40620160521201606122457529.4 .7044640000D+02 -.9743920000D+01 .1658442900D+04 .2046183600D+03 .5793386000D+01 .1706140000D+02 .4452866000D+01 .2424900000D+01 .6139700000D+01 .3025500000D+01 .1375259000D+03 -.3811640000D+01 .6682415000D+03 .8387026000D+02 .2391613000D+01 .8272600000D+01 .6203379000D+01 .4224600000D+01 .1692500000D+01 .4778500000D+01 .3025218000D+03 -.9456040000D+01 .1406274300D+04 .1749079000D+03 .4953405000D+01 .1748440000D+02 .6020500000D+01 .4046800000D+01 .1516500000D+01 .4629300000D+01 +7 40720160612201607042457551.4 .2002160000D+02 -.5446950000D+01 .1548494200D+04 .1914545100D+03 .5613914000D+01 .1837920000D+02 .4682372000D+01 .2746400000D+01 .2311000000D+00 .3671000000D+01 .1243601000D+03 -.2996410000D+01 .6535088000D+03 .8290561000D+02 .2464338000D+01 .8003000000D+01 .1385290000D+00 .4491200000D+01 .1973100000D+01 .5313100000D+01 .2672804000D+03 -.7032770000D+01 .1382359600D+04 .1751767700D+03 .5209133000D+01 .1725640000D+02 .6253287000D+01 .4328600000D+01 .1812600000D+01 .5152900000D+01 +7 40820160704201607262457573.4 -.1314810000D+02 -.2714430000D+01 .1475840900D+04 .1843233800D+03 .5684657000D+01 .1933330000D+02 .4915083000D+01 .3060800000D+01 .5859000000D+00 .4237300000D+01 .1331738000D+03 -.4169280000D+01 .6237741000D+03 .7701075000D+02 .2331671000D+01 .7799000000D+01 .3295980000D+00 .4752300000D+01 .2269400000D+01 .5968500000D+01 .2829651000D+03 -.9238820000D+01 .1331128800D+04 .1643982600D+03 .4984694000D+01 .1657560000D+02 .1664490000D+00 .4588200000D+01 .2102100000D+01 .5800200000D+01 +7 40920160726201608172457595.4 .1610900000D+01 -.4552370000D+01 .1456573300D+04 .1792842300D+03 .5718579000D+01 .1818010000D+02 .5116707000D+01 .3307700000D+01 .8504000000D+00 .4827200000D+01 .1477257000D+03 -.5905760000D+01 .5900855000D+03 .7013246000D+02 .2177931000D+01 .8259800000D+01 .5185880000D+00 .5033500000D+01 .2607000000D+01 .3369000000D+00 .3180298000D+03 -.1338080000D+02 .1261541900D+04 .1487217800D+03 .4593066000D+01 .1734790000D+02 .3514660000D+00 .4860000000D+01 .2428700000D+01 .1914000000D+00 +7 41020160817201609082457617.4 .5908260000D+02 -.1071147000D+02 .1464604300D+04 .1697211100D+03 .5432948000D+01 .1689000000D+02 .5276082000D+01 .3485200000D+01 .1043100000D+01 .5556400000D+01 .1487943000D+03 -.6449350000D+01 .5744231000D+03 .6692802000D+02 .2175965000D+01 .8430700000D+01 .7219270000D+00 .5312400000D+01 .2928200000D+01 .9139000000D+00 .3291279000D+03 -.1554473000D+02 .1214953500D+04 .1389170000D+03 .4472091000D+01 .1799680000D+02 .5494010000D+00 .5140000000D+01 .2759600000D+01 .7819000000D+00 +7 41120160908201609302457639.4 .1210670000D+03 -.1781999000D+02 .1466891000D+04 .1556640000D+03 .4923397000D+01 .1808730000D+02 .5418972000D+01 .3641400000D+01 .1229300000D+01 .2460000000D-01 .1266709000D+03 -.4860120000D+01 .5906853000D+03 .6820701000D+02 .2302043000D+01 .7673400000D+01 .9299990000D+00 .5533500000D+01 .3154500000D+01 .1532500000D+01 .2903319000D+03 -.1325837000D+02 .1227693300D+04 .1394838200D+03 .4692390000D+01 .1662530000D+02 .7596380000D+00 .5376500000D+01 .3008400000D+01 .1377100000D+01 +7 41220160930201610222457661.4 .1422668000D+03 -.2167076000D+02 .1450600500D+04 .1432127500D+03 .4562391000D+01 .1962580000D+02 .5584764000D+01 .3838900000D+01 .1476000000D+01 .6463000000D+00 .8817430000D+02 -.1696020000D+01 .6298844000D+03 .7103099000D+02 .2429792000D+01 .7066000000D+01 .1122843000D+01 .5689900000D+01 .3301900000D+01 .2313400000D+01 .2109779000D+03 -.7208290000D+01 .1293669700D+04 .1454973800D+03 .5001792000D+01 .1483780000D+02 .9604340000D+00 .5545700000D+01 .3167100000D+01 .2119500000D+01 +7 41320161022201611132457683.4 .1024213000D+03 -.2018197000D+02 .1432278100D+04 .1395850000D+03 .4695105000D+01 .1893670000D+02 .5796058000D+01 .4101100000D+01 .1779300000D+01 .1243100000D+01 .5298510000D+02 .1270690000D+01 .6652671000D+03 .7199466000D+02 .2474395000D+01 .7732100000D+01 .1301225000D+01 .5835200000D+01 .3453300000D+01 .3092700000D+01 .1298638000D+03 -.8308500000D+00 .1363751300D+04 .1490502500D+03 .5168486000D+01 .1555940000D+02 .1142617000D+01 .5689300000D+01 .3310200000D+01 .2914700000D+01 +7 41420161113201612052457705.4 .2333080000D+02 -.1507624000D+02 .1438094400D+04 .1451617300D+03 .5226731000D+01 .1757780000D+02 .6036593000D+01 .4375700000D+01 .2063900000D+01 .1946200000D+01 .3999040000D+02 .2272220000D+01 .6743472000D+03 .6972552000D+02 .2445321000D+01 .8400600000D+01 .1486183000D+01 .6033600000D+01 .3689200000D+01 .3721700000D+01 .8852810000D+02 .2051360000D+01 .1386978900D+04 .1454729600D+03 .5132262000D+01 .1706700000D+02 .1320911000D+01 .5869600000D+01 .3520800000D+01 .3561600000D+01 +7 41520161205201612272457727.4 -.4325990000D+02 -.1093047000D+02 .1459659800D+04 .1492717800D+03 .5621493000D+01 .1817150000D+02 .6263462000D+01 .4614600000D+01 .2317100000D+01 .2666700000D+01 .5221440000D+02 .9444200000D+00 .6582238000D+03 .6629157000D+02 .2465050000D+01 .8066700000D+01 .1698125000D+01 .3090000000D-01 .4026000000D+01 .4340800000D+01 .1006261000D+03 .5020000000D-01 .1353975900D+04 .1372249400D+03 .5092547000D+01 .1666440000D+02 .1517300000D+01 .6127200000D+01 .3835700000D+01 .4158800000D+01 +7 41620161227201701182457749.4 -.5110610000D+02 -.1202935000D+02 .1451737600D+04 .1400177000D+03 .5451923000D+01 .1870460000D+02 .1690750000D+00 .4835400000D+01 .2600900000D+01 .3255800000D+01 .7213570000D+02 -.1174730000D+01 .6400333000D+03 .6449656000D+02 .2588898000D+01 .7714300000D+01 .1932533000D+01 .3423000000D+00 .4379000000D+01 .5052800000D+01 .1388069000D+03 -.4467430000D+01 .1305587500D+04 .1312708700D+03 .5276805000D+01 .1558370000D+02 .1738447000D+01 .1535000000D+00 .4194900000D+01 .4844900000D+01 +7 41720170118201702092457771.4 .5145800000D+01 -.1908623000D+02 .1386954300D+04 .1167235100D+03 .4881190000D+01 .1648710000D+02 .3335410000D+00 .5094600000D+01 .2995400000D+01 .3812700000D+01 .7291430000D+02 -.1595680000D+01 .6391103000D+03 .6234387000D+02 .2609897000D+01 .8109000000D+01 .2150096000D+01 .5869000000D+00 .4672100000D+01 .5707500000D+01 .1504558000D+03 -.6665160000D+01 .1293150800D+04 .1276120800D+03 .5426764000D+01 .1614420000D+02 .1957508000D+01 .4189000000D+00 .4503700000D+01 .5527900000D+01 +7 41820170209201703032457793.4 .8153810000D+02 -.2829884000D+02 .1293672700D+04 .9240890000D+02 .4587952000D+01 .1329170000D+02 .5119690000D+00 .5444500000D+01 .3496400000D+01 .4533000000D+01 .3819740000D+02 .1333560000D+01 .6511936000D+03 .5536520000D+02 .2287069000D+01 .7905400000D+01 .2315494000D+01 .7179000000D+00 .4925200000D+01 .6200100000D+01 .9369080000D+02 -.2445340000D+01 .1326764200D+04 .1177130100D+03 .4996521000D+01 .1645690000D+02 .2134467000D+01 .5679000000D+00 .4750100000D+01 .6046300000D+01 +7 41920170303201703252457815.4 .1116533000D+03 -.3360014000D+02 .1243036800D+04 .8134488000D+02 .4728079000D+01 .1309360000D+02 .7386390000D+00 .5800900000D+01 .3924000000D+01 .5340800000D+01 -.2488810000D+02 .7179720000D+01 .6597542000D+03 .4353400000D+02 .1638645000D+01 .6123700000D+01 .2440417000D+01 .7324000000D+00 .5226600000D+01 .3637000000D+00 -.3137630000D+02 .8629280000D+01 .1374994100D+04 .9830108000D+02 .3803748000D+01 .1374400000D+02 .2265678000D+01 .5827000000D+00 .4991000000D+01 .1836000000D+00 +7 42020170325201704162457837.4 .5026570000D+02 -.3055054000D+02 .1297281800D+04 .8248844000D+02 .4611465000D+01 .1391920000D+02 .1001106000D+01 .5947500000D+01 .4177100000D+01 .5894500000D+01 -.9000030000D+02 .1370260000D+02 .6531301000D+03 .3180360000D+02 .9908790000D+00 .3619200000D+01 .2572524000D+01 .6511000000D+00 .5773100000D+01 .1023500000D+01 -.1800465000D+03 .2289822000D+02 .1399290900D+04 .7714211000D+02 .2259060000D+01 .8500600000D+01 .2389370000D+01 .4763000000D+00 .5360700000D+01 .6991000000D+00 +7 42120170416201705082457859.4 -.9943050000D+02 -.1891202000D+02 .1449688600D+04 .9185871000D+02 .3833415000D+01 .1193840000D+02 .1250497000D+01 .5875900000D+01 .4277500000D+01 .6243700000D+01 -.1289681000D+03 .1834837000D+02 .6320877000D+03 .2464372000D+02 .7965370000D+00 .2716900000D+01 .2761960000D+01 .6086000000D+00 .3394000000D+00 .2180500000D+01 -.2915796000D+03 .3497908000D+02 .1379354600D+04 .6325105000D+02 .1266968000D+01 .4693900000D+01 .2554192000D+01 .3617000000D+00 .6192300000D+01 .1770900000D+01 +7 42220170508201705302457881.4 -.2937221000D+03 -.2161390000D+01 .1628914800D+04 .1096179100D+03 .2648276000D+01 .7033300000D+01 .1468255000D+01 .5767000000D+01 .4200200000D+01 .1995000000D+00 -.1276697000D+03 .1967408000D+02 .6130120000D+03 .2300652000D+02 .8672400000D+00 .3223300000D+01 .3033004000D+01 .8377000000D+00 .8198000000D+00 .2963700000D+01 -.3255372000D+03 .4095921000D+02 .1330352700D+04 .5684769000D+02 .1327259000D+01 .5537100000D+01 .2792976000D+01 .4586000000D+00 .7421000000D+00 .2872900000D+01 +7 42320170530201706212457903.4 -.4804149000D+03 .1518714000D+02 .1763640100D+04 .1297412700D+03 .1736815000D+01 .1369300000D+01 .1668285000D+01 .5742500000D+01 .3788900000D+01 .6133100000D+01 -.8924770000D+02 .1769379000D+02 .6181666000D+03 .2855354000D+02 .7997600000D+00 .2864400000D+01 .3362863000D+01 .1264400000D+01 .8939000000D+00 .3380600000D+01 -.2777251000D+03 .3990762000D+02 .1298533400D+04 .5914973000D+02 .1350960000D+01 .5762900000D+01 .3104289000D+01 .8426000000D+00 .9669000000D+00 .3396500000D+01 +7 42420170621201707132457925.4 -.6247873000D+03 .2983258000D+02 .1822308800D+04 .1445946500D+03 .1735555000D+01 .4324800000D+01 .1865645000D+01 .5809600000D+01 .3214600000D+01 .4282400000D+01 -.2629260000D+02 .1326706000D+02 .6551269000D+03 .4080218000D+02 .6569680000D+00 .1384100000D+01 .3694233000D+01 .1609600000D+01 .5691000000D+00 .3651600000D+01 -.1693434000D+03 .3309481000D+02 .1323476400D+04 .7573640000D+02 .1082751000D+01 .3554600000D+01 .3446019000D+01 .1293900000D+01 .7145000000D+00 .3780300000D+01 +7 42520170713201708042457947.4 -.7133411000D+03 .4010707000D+02 .1809550400D+04 .1510337500D+03 .2133724000D+01 .7644200000D+01 .2067722000D+01 .5947900000D+01 .3019000000D+01 .4503000000D+01 .4815090000D+02 .7376370000D+01 .7126368000D+03 .5608521000D+02 .7728750000D+00 .8426000000D+00 .3983723000D+01 .1844900000D+01 .6245200000D+01 .1066500000D+01 -.2735150000D+02 .2244083000D+02 .1406385300D+04 .1035316800D+03 .1214386000D+01 .5928000000D+00 .3764278000D+01 .1625800000D+01 .6261300000D+01 .3508000000D+00 +7 42620170804201708262457969.4 -.7438775000D+03 .4527488000D+02 .1748314300D+04 .1502342100D+03 .2330610000D+01 .8810300000D+01 .2279172000D+01 .6149800000D+01 .3103200000D+01 .4855300000D+01 .1238016000D+03 .8759600000D+00 .7738829000D+03 .7133032000D+02 .1199543000D+01 .3282100000D+01 .4220351000D+01 .2019200000D+01 .5937300000D+01 .1199800000D+01 .1254184000D+03 .9748740000D+01 .1519558400D+04 .1350729800D+03 .2098377000D+01 .5490700000D+01 .4029964000D+01 .1853100000D+01 .5872300000D+01 .1061300000D+01 +7 42720170826201709172457991.4 -.7183509000D+03 .4506768000D+02 .1669658800D+04 .1469228800D+03 .2282104000D+01 .8328000000D+01 .2505197000D+01 .1368000000D+00 .3399900000D+01 .5376100000D+01 .1916377000D+03 -.5391730000D+01 .8243419000D+03 .8426886000D+02 .1697040000D+01 .5458000000D+01 .4411636000D+01 .2163300000D+01 .5869300000D+01 .1428200000D+01 .2692327000D+03 -.3209240000D+01 .1629115100D+04 .1643092400D+03 .3204961000D+01 .1028620000D+02 .4241442000D+01 .2021700000D+01 .5790700000D+01 .1325500000D+01 +7 42820170917201710092458013.4 -.6436542000D+03 .3984115000D+02 .1607231200D+04 .1484754600D+03 .2348567000D+01 .8448900000D+01 .2746603000D+01 .4664000000D+00 .3913300000D+01 .6144500000D+01 .2425704000D+03 -.1051940000D+02 .8529502000D+03 .9308949000D+02 .2108588000D+01 .6892900000D+01 .4572163000D+01 .2298900000D+01 .5906300000D+01 .1678700000D+01 .3850599000D+03 -.1455815000D+02 .1706478100D+04 .1866445200D+03 .4192227000D+01 .1387810000D+02 .4411127000D+01 .2163200000D+01 .5817700000D+01 .1573600000D+01 +7 42920171009201710312458035.4 -.5346121000D+03 .3084759000D+02 .1585522500D+04 .1603986500D+03 .2992529000D+01 .1147690000D+02 .2991900000D+01 .8040000000D+00 .4446500000D+01 .5727000000D+00 .2687870000D+03 -.1369131000D+02 .8534864000D+03 .9676407000D+02 .2348870000D+01 .7362200000D+01 .4718569000D+01 .2446200000D+01 .6012400000D+01 .1982500000D+01 .4564052000D+03 -.2257334000D+02 .1733480400D+04 .1991413400D+03 .4866460000D+01 .1560790000D+02 .4555826000D+01 .2301800000D+01 .5904000000D+01 .1849600000D+01 +7 43020171031201711222458057.4 -.4136312000D+03 .2016779000D+02 .1605126700D+04 .1807423100D+03 .4101573000D+01 .1597170000D+02 .3219979000D+01 .1092400000D+01 .4805900000D+01 .1033900000D+01 .2666081000D+03 -.1446238000D+02 .8266334000D+03 .9563979000D+02 .2406297000D+01 .7122600000D+01 .4866636000D+01 .2624300000D+01 .6190000000D+01 .2391900000D+01 .4737639000D+03 -.2614404000D+02 .1705455300D+04 .2012978500D+03 .5156550000D+01 .1560690000D+02 .4692084000D+01 .2457500000D+01 .6046600000D+01 .2200900000D+01 +7 43120171122201712142458079.4 -.3063882000D+03 .1027552000D+02 .1641213400D+04 .2016042500D+03 .5232481000D+01 .1964450000D+02 .3414732000D+01 .1319300000D+01 .5038400000D+01 .1377800000D+01 .2386840000D+03 -.1296996000D+02 .7807101000D+03 .9170243000D+02 .2358318000D+01 .6984000000D+01 .5028541000D+01 .2847200000D+01 .1672000000D+00 .2933600000D+01 .4382767000D+03 -.2513984000D+02 .1632149600D+04 .1955874600D+03 .5142611000D+01 .1505080000D+02 .4833951000D+01 .2647300000D+01 .6256500000D+01 .2672000000D+01 +7 43220171214201801052458101.4 -.2354519000D+03 .3415920000D+01 .1659176300D+04 .2148464000D+03 .6032009000D+01 .2128020000D+02 .3574120000D+01 .1505100000D+01 .5219600000D+01 .1712900000D+01 .1942248000D+03 -.9965000000D+01 .7293629000D+03 .8786282000D+02 .2340888000D+01 .7657000000D+01 .5208617000D+01 .3111900000D+01 .4967000000D+00 .3507900000D+01 .3629193000D+03 -.2053966000D+02 .1535605000D+04 .1870150300D+03 .5046682000D+01 .1563880000D+02 .4990574000D+01 .2879100000D+01 .2548000000D+00 .3230300000D+01 +7 43320180105201801272458123.4 -.2136617000D+03 .9643900000D+00 .1633403900D+04 .2157222400D+03 .6319141000D+01 .2096510000D+02 .3707243000D+01 .1677600000D+01 .5397700000D+01 .2114300000D+01 .1469916000D+03 -.6639140000D+01 .6855826000D+03 .8596753000D+02 .2432009000D+01 .8748300000D+01 .5398280000D+01 .3389100000D+01 .8335000000D+00 .3998600000D+01 .2709450000D+03 -.1430604000D+02 .1443431600D+04 .1807453600D+03 .5103612000D+01 .1765590000D+02 .5161839000D+01 .3140100000D+01 .5759000000D+00 .3754200000D+01 +7 43420180127201802182458145.4 -.2384658000D+03 .2873360000D+01 .1559314400D+04 .2045336800D+03 .6126712000D+01 .2022930000D+02 .3828949000D+01 .1863300000D+01 .5608200000D+01 .2629100000D+01 .1113607000D+03 -.4273570000D+01 .6546777000D+03 .8506543000D+02 .2556988000D+01 .9327800000D+01 .5577316000D+01 .3639400000D+01 .1116900000D+01 .4434900000D+01 .1911786000D+03 -.8971620000D+01 .1376799300D+04 .1781200300D+03 .5328808000D+01 .1946160000D+02 .5334751000D+01 .3395300000D+01 .8741000000D+00 .4209800000D+01 +7 43520180218201803122458167.4 -.2891021000D+03 .7376440000D+01 .1457915600D+04 .1870823700D+03 .5720016000D+01 .2088750000D+02 .3956828000D+01 .2083100000D+01 .5874700000D+01 .3211400000D+01 .9724310000D+02 -.3777100000D+01 .6326290000D+03 .8237422000D+02 .2569770000D+01 .9027100000D+01 .5727600000D+01 .3846300000D+01 .1341600000D+01 .4913300000D+01 .1494966000D+03 -.6874280000D+01 .1339274000D+04 .1751012300D+03 .5475875000D+01 .1956630000D+02 .5489359000D+01 .3613300000D+01 .1114000000D+01 .4671600000D+01 +7 43620180312201804032458189.4 -.3303595000D+03 .1128928000D+02 .1371423900D+04 .1724021400D+03 .5467089000D+01 .2236370000D+02 .4106500000D+01 .2335300000D+01 .6179300000D+01 .3759800000D+01 .1053078000D+03 -.5240470000D+01 .6121322000D+03 .7604739000D+02 .2394157000D+01 .8509900000D+01 .5849590000D+01 .4023500000D+01 .1542000000D+01 .5519400000D+01 .1571541000D+03 -.9088380000D+01 .1317722000D+04 .1661519300D+03 .5283559000D+01 .1839810000D+02 .5616212000D+01 .3790200000D+01 .1308700000D+01 .5242100000D+01 +7 43720180403201804252458211.4 -.3260320000D+03 .1120864000D+02 .1345171200D+04 .1663328400D+03 .5504934000D+01 .2224270000D+02 .4280404000D+01 .2577300000D+01 .1659000000D+00 .4289900000D+01 .1247928000D+03 -.7713460000D+01 .5898013000D+03 .6706087000D+02 .2094386000D+01 .8875300000D+01 .5968476000D+01 .4207900000D+01 .1770800000D+01 .6201700000D+01 .2004593000D+03 -.1444723000D+02 .1294779900D+04 .1498015600D+03 .4724554000D+01 .1844830000D+02 .5730894000D+01 .3953100000D+01 .1502700000D+01 .5938700000D+01 +7 43820180425201805172458233.4 -.2607213000D+03 .5518770000D+01 .1394751500D+04 .1664049000D+03 .5616956000D+01 .2012840000D+02 .4463017000D+01 .2762600000D+01 .3518000000D+00 .4926600000D+01 .1367443000D+03 -.9470610000D+01 .5699580000D+03 .5935434000D+02 .1868907000D+01 .9727200000D+01 .6126903000D+01 .4445300000D+01 .2074100000D+01 .5303000000D+00 .2410972000D+03 -.1950501000D+02 .1262179000D+04 .1313716900D+03 .4101830000D+01 .2038940000D+02 .5873082000D+01 .4153600000D+01 .1759200000D+01 .3182000000D+00 +7 43920180517201806082458255.4 -.1585594000D+03 -.3806850000D+01 .1481820500D+04 .1655272400D+03 .5551039000D+01 .1953800000D+02 .4643812000D+01 .2904700000D+01 .4898000000D+00 .5730200000D+01 .1242288000D+03 -.8925350000D+01 .5664008000D+03 .5774125000D+02 .1916346000D+01 .9645600000D+01 .7450000000D-01 .4738400000D+01 .2405700000D+01 .1109300000D+01 .2357146000D+03 -.2026257000D+02 .1234311700D+04 .1213898100D+03 .3922837000D+01 .2108180000D+02 .6085971000D+01 .4434800000D+01 .2098200000D+01 .9061000000D+00 +7 44020180608201806302458277.4 -.7705050000D+02 -.1162261000D+02 .1536475800D+04 .1587704600D+03 .5270033000D+01 .2188090000D+02 .4838815000D+01 .3074600000D+01 .6764000000D+00 .1940000000D+00 .8602680000D+02 -.5899720000D+01 .5931435000D+03 .6278648000D+02 .2196422000D+01 .8704000000D+01 .3584910000D+00 .5014000000D+01 .2664700000D+01 .1811500000D+01 .1697229000D+03 -.1526670000D+02 .1248641600D+04 .1267229100D+03 .4378868000D+01 .1918970000D+02 .8982500000D-01 .4750000000D+01 .2416400000D+01 .1564900000D+01 +7 44120180630201807222458299.4 -.6679290000D+02 -.1319753000D+02 .1521550400D+04 .1488574300D+03 .5067825000D+01 .2265650000D+02 .5078920000D+01 .3350500000D+01 .1003000000D+01 .8253000000D+00 .4244870000D+02 -.2219180000D+01 .6375453000D+03 .6863003000D+02 .2461153000D+01 .8735800000D+01 .6377170000D+00 .5244500000D+01 .2878100000D+01 .2637200000D+01 .7794460000D+02 -.7618640000D+01 .1312288700D+04 .1390446500D+03 .5008346000D+01 .1815210000D+02 .3935000000D+00 .5021500000D+01 .2666500000D+01 .2378100000D+01 +7 44220180722201808132458321.4 -.1237374000D+03 -.8658420000D+01 .1477430000D+04 .1461462600D+03 .5386691000D+01 .2073920000D+02 .5374718000D+01 .3726000000D+01 .1421000000D+01 .1518200000D+01 .2219930000D+02 -.5761300000D+00 .6608709000D+03 .6888825000D+02 .2519546000D+01 .9506800000D+01 .8898470000D+00 .5487400000D+01 .3147000000D+01 .3343100000D+01 .2290840000D+02 -.3141650000D+01 .1359887000D+04 .1423524200D+03 .5243338000D+01 .1947310000D+02 .6643620000D+00 .5272200000D+01 .2931100000D+01 .3126600000D+01 +7 44320180813201809042458343.4 -.1843701000D+03 -.3658470000D+01 .1465984500D+04 .1502143400D+03 .5928949000D+01 .2027790000D+02 .5678925000D+01 .4075100000D+01 .1785500000D+01 .2301900000D+01 .3690130000D+02 -.2192600000D+01 .6426659000D+03 .6361081000D+02 .2464028000D+01 .9071200000D+01 .1138662000D+01 .5812700000D+01 .3544100000D+01 .3973300000D+01 .4070900000D+02 -.5449500000D+01 .1329061500D+04 .1314700200D+03 .5067496000D+01 .1905380000D+02 .9114650000D+00 .5576800000D+01 .3304100000D+01 .3753800000D+01 +7 44420180904201809262458365.4 -.1767820000D+03 -.4885640000D+01 .1472705700D+04 .1436662600D+03 .5839491000D+01 .2115670000D+02 .5921393000D+01 .4330100000D+01 .2095200000D+01 .2952100000D+01 .6769320000D+02 -.5495100000D+01 .6072072000D+03 .5926508000D+02 .2555736000D+01 .8016400000D+01 .1407741000D+01 .6211500000D+01 .4001200000D+01 .4715600000D+01 .1051945000D+03 -.1249309000D+02 .1244273000D+04 .1181068000D+03 .5068495000D+01 .1645980000D+02 .1166832000D+01 .5970100000D+01 .3775100000D+01 .4454200000D+01 +7 44520180926201810182458387.4 -.8151520000D+02 -.1445218000D+02 .1441872100D+04 .1170456400D+03 .4887449000D+01 .1890870000D+02 .6088753000D+01 .4527800000D+01 .2455000000D+01 .3481100000D+01 .7880380000D+02 -.7237690000D+01 .5965306000D+03 .5799611000D+02 .2687449000D+01 .8171800000D+01 .1672626000D+01 .2524000000D+00 .4360800000D+01 .5474600000D+01 .1464410000D+03 -.1800344000D+02 .1193890000D+04 .1132800200D+03 .5374330000D+01 .1585120000D+02 .1431647000D+01 .5600000000D-01 .4180600000D+01 .5247800000D+01 +7 44620181018201811092458409.4 .5321100000D+02 -.2826333000D+02 .1365431400D+04 .8033453000D+02 .3839688000D+01 .1374910000D+02 .6224271000D+01 .4735200000D+01 .2985600000D+01 .4108900000D+01 .4583110000D+02 -.5048430000D+01 .6226523000D+03 .5441885000D+02 .2495127000D+01 .8364700000D+01 .1875990000D+01 .3889000000D+00 .4599300000D+01 .6014700000D+01 .1051263000D+03 -.1634732000D+02 .1233672900D+04 .1097518600D+03 .5282975000D+01 .1678740000D+02 .1657344000D+01 .2443000000D+00 .4444300000D+01 .5851300000D+01 +7 44720181109201812012458431.4 .1502427000D+03 -.3931848000D+02 .1287090800D+04 .5296592000D+02 .3583857000D+01 .1089250000D+02 .1052960000D+00 .5010500000D+01 .3579800000D+01 .5008600000D+01 -.2647320000D+02 .8732600000D+00 .6642045000D+03 .4729472000D+02 .1884213000D+01 .6880400000D+01 .2009577000D+01 .3277000000D+00 .4769500000D+01 .1317000000D+00 -.2585480000D+02 -.6427910000D+01 .1340169900D+04 .1010507700D+03 .4375153000D+01 .1509790000D+02 .1813779000D+01 .2191000000D+00 .4604700000D+01 .6261400000D+01 +7 44820181201201812232458453.4 .1581216000D+03 -.4263842000D+02 .1264699600D+04 .4685424000D+02 .3651743000D+01 .1161880000D+02 .3312630000D+00 .5230300000D+01 .3946000000D+01 .5750100000D+01 -.1104070000D+03 .8195630000D+01 .6949921000D+03 .4183812000D+02 .1075984000D+01 .4067200000D+01 .2117142000D+01 .1287000000D+00 .4923000000D+01 .5692000000D+00 -.2034072000D+03 .8274040000D+01 .1455534200D+04 .9454661000D+02 .2900653000D+01 .1015410000D+02 .1928780000D+01 .3910000000D-01 .4693700000D+01 .3417000000D+00 +7 44920181223201901142458475.4 .7658490000D+02 -.3772960000D+02 .1329451600D+04 .5986602000D+02 .3323438000D+01 .1099900000D+02 .5919360000D+00 .5243700000D+01 .4079300000D+01 .6186600000D+01 -.1769635000D+03 .1434008000D+02 .7003204000D+03 .4070361000D+02 .3673270000D+00 .1617000000D+01 .2242830000D+01 .6252600000D+01 .5143000000D+01 .1546200000D+01 -.3704042000D+03 .2281238000D+02 .1533888300D+04 .9664896000D+02 .1404956000D+01 .4207100000D+01 .2044107000D+01 .6147400000D+01 .4667000000D+01 .9023000000D+00 +7 45020190114201902052458497.4 -.6014710000D+02 -.2726889000D+02 .1459123000D+04 .8552963000D+02 .2639261000D+01 .7617400000D+01 .8386940000D+00 .5223600000D+01 .4010800000D+01 .2032000000D+00 -.2126226000D+03 .1801154000D+02 .6816246000D+03 .4095325000D+02 .9440200000D-01 .1850200000D+01 .2408267000D+01 .6262300000D+01 .1538500000D+01 .3142800000D+01 -.4909185000D+03 .3394169000D+02 .1559337300D+04 .1025070600D+03 .4486600000D+00 .2381600000D+01 .2183955000D+01 .6103100000D+01 .3891600000D+01 .2993300000D+01 +7 45120190205201902272458519.4 -.2173384000D+03 -.1413861000D+02 .1607785000D+04 .1163869700D+03 .2078603000D+01 .2551900000D+01 .1054487000D+01 .5255900000D+01 .3671100000D+01 .2797000000D+00 -.2192578000D+03 .1925206000D+02 .6509635000D+03 .4071867000D+02 .2617680000D+00 .2476600000D+01 .2615475000D+01 .1517000000D+00 .2104400000D+01 .3832100000D+01 -.5574927000D+03 .4085155000D+02 .1541470500D+04 .1064546700D+03 .7236680000D+00 .5128200000D+01 .2354884000D+01 .6191700000D+01 .2781300000D+01 .3887500000D+01 +7 45220190227201903212458541.4 -.3776421000D+03 .1920400000D+00 .1746425700D+04 .1474499800D+03 .2234252000D+01 .3575500000D+01 .1244774000D+01 .5328500000D+01 .3164500000D+01 .4310300000D+01 -.2031685000D+03 .1850297000D+02 .6217654000D+03 .4096056000D+02 .2202240000D+00 .2279200000D+01 .2859098000D+01 .4504000000D+00 .2546800000D+01 .4416800000D+01 -.5738267000D+03 .4367811000D+02 .1498561200D+04 .1075536200D+03 .9898660000D+00 .6288400000D+01 .2557872000D+01 .1052000000D+00 .2831600000D+01 .4405000000D+01 +7 45320190321201904122458563.4 -.5321252000D+03 .1489208000D+02 .1859498200D+04 .1754392800D+03 .3060750000D+01 .9186400000D+01 .1417641000D+01 .5424700000D+01 .2877400000D+01 .4444800000D+01 -.1671476000D+03 .1590802000D+02 .6068480000D+03 .4422021000D+02 .1788950000D+00 .1639900000D+01 .3134018000D+01 .8331000000D+00 .4226700000D+01 .5381900000D+01 -.5378903000D+03 .4200492000D+02 .1452290300D+04 .1088618200D+03 .9500330000D+00 .5677900000D+01 .2798543000D+01 .4090000000D+00 .3289100000D+01 .5036900000D+01 +7 45420190412201905042458585.4 -.6633830000D+03 .2824944000D+02 .1926033400D+04 .1958448400D+03 .3990423000D+01 .1344490000D+02 .1583031000D+01 .5544400000D+01 .2815300000D+01 .4701100000D+01 -.1119356000D+03 .1144614000D+02 .6184919000D+03 .5302134000D+02 .6092620000D+00 .2515100000D+01 .3426253000D+01 .1216300000D+01 .5054000000D+01 .4408000000D+00 -.4436699000D+03 .3502882000D+02 .1434703100D+04 .1180002300D+03 .1148823000D+01 .5511200000D+01 .3080571000D+01 .8028000000D+00 .4265600000D+01 .6115600000D+01 +7 45520190504201905262458607.4 -.7421371000D+03 .3735558000D+02 .1921127000D+04 .2035466400D+03 .4561745000D+01 .1508740000D+02 .1757321000D+01 .5705600000D+01 .2894700000D+01 .5030200000D+01 -.4239300000D+02 .5493700000D+01 .6596376000D+03 .6682682000D+02 .1240575000D+01 .4884500000D+01 .3706391000D+01 .1526000000D+01 .5289700000D+01 .1052000000D+01 -.2968183000D+03 .2301235000D+02 .1477062400D+04 .1413940700D+03 .2271600000D+01 .9538200000D+01 .3384316000D+01 .1193500000D+01 .4916100000D+01 .7431000000D+00 +7 45620190526201906172458629.4 -.7423975000D+03 .3950512000D+02 .1839578600D+04 .1977853900D+03 .4576493000D+01 .1430310000D+02 .1962504000D+01 .5939900000D+01 .3112700000D+01 .5518800000D+01 .2888650000D+02 -.8366300000D+00 .7148069000D+03 .8154527000D+02 .1895080000D+01 .7142900000D+01 .3950883000D+01 .1763800000D+01 .5446800000D+01 .1416700000D+01 -.1259847000D+03 .8378420000D+01 .1572003900D+04 .1736848300D+03 .3807371000D+01 .1507930000D+02 .3669754000D+01 .1504400000D+01 .5211500000D+01 .1217100000D+01 +7 45720190617201907092458651.4 -.6625646000D+03 .3419755000D+02 .1717592800D+04 .1872416800D+03 .4329418000D+01 .1417310000D+02 .2216584000D+01 .6274500000D+01 .3510300000D+01 .6233700000D+01 .8425990000D+02 -.5927540000D+01 .7566694000D+03 .9208146000D+02 .2389111000D+01 .8368700000D+01 .4160983000D+01 .1969500000D+01 .5605300000D+01 .1757800000D+01 .2350620000D+02 -.4804690000D+01 .1663279100D+04 .2011476700D+03 .5134678000D+01 .1885830000D+02 .3913871000D+01 .1748000000D+01 .5413000000D+01 .1575200000D+01 +7 45820190709201907312458673.4 -.5335712000D+03 .2400142000D+02 .1619079800D+04 .1859519000D+03 .4530135000D+01 .1745980000D+02 .2512652000D+01 .3952000000D+00 .4034000000D+01 .6392000000D+00 .1093322000D+03 -.8413480000D+01 .7637380000D+03 .9527660000D+02 .2599393000D+01 .8384700000D+01 .4354665000D+01 .2182900000D+01 .5804700000D+01 .2177500000D+01 .1114634000D+03 -.1280428000D+02 .1690192500D+04 .2129834100D+03 .5838582000D+01 .1962740000D+02 .4123786000D+01 .1968300000D+01 .5612100000D+01 .1961000000D+01 +7 45920190731201908222458695.4 -.4057416000D+03 .1344674000D+02 .1578642100D+04 .1966362900D+03 .5322152000D+01 .2150800000D+02 .2806406000D+01 .7683000000D+00 .4478300000D+01 .1134700000D+01 .1014703000D+03 -.7982100000D+01 .7341598000D+03 .9198376000D+02 .2561295000D+01 .8060300000D+01 .4551492000D+01 .2433900000D+01 .6077300000D+01 .2736900000D+01 .1241295000D+03 -.1422808000D+02 .1633376200D+04 .2079328200D+03 .5872326000D+01 .1858490000D+02 .4319159000D+01 .2203300000D+01 .5855200000D+01 .2459400000D+01 +7 46020190822201909132458717.4 -.3230176000D+03 .6670930000D+01 .1567847200D+04 .2069592000D+03 .6059073000D+01 .2327770000D+02 .3050474000D+01 .1057200000D+01 .4786100000D+01 .1553900000D+01 .7169620000D+02 -.5585210000D+01 .6857558000D+03 .8655787000D+02 .2466074000D+01 .8532800000D+01 .4761110000D+01 .2729900000D+01 .1443000000D+00 .3354500000D+01 .7914820000D+02 -.1056581000D+02 .1522169700D+04 .1939875100D+03 .5578126000D+01 .1847620000D+02 .4515956000D+01 .2474000000D+01 .6166200000D+01 .3061300000D+01 +7 46120190913201910052458739.4 -.3035295000D+03 .5559790000D+01 .1538127300D+04 .2058438700D+03 .6263610000D+01 .2260650000D+02 .3232729000D+01 .1282100000D+01 .5023100000D+01 .2011200000D+01 .3839450000D+02 -.2887760000D+01 .6418925000D+03 .8300677000D+02 .2479543000D+01 .9501500000D+01 .4973795000D+01 .3035900000D+01 .5075000000D+00 .3882200000D+01 .1306480000D+02 -.5102450000D+01 .1408926300D+04 .1817328300D+03 .5409904000D+01 .2013060000D+02 .4716213000D+01 .2768500000D+01 .2349000000D+00 .3624700000D+01 +7 46220191005201910272458761.4 -.3362819000D+03 .9339130000D+01 .1470720600D+04 .1920944100D+03 .5928476000D+01 .2162810000D+02 .3368766000D+01 .1480700000D+01 .5249500000D+01 .2560000000D+01 .1803860000D+02 -.1417020000D+01 .6148825000D+03 .8127609000D+02 .2556804000D+01 .9849000000D+01 .5162441000D+01 .3294800000D+01 .7982000000D+00 .4336200000D+01 -.3710700000D+02 -.1236810000D+01 .1334441900D+04 .1756896000D+03 .5499179000D+01 .2149730000D+02 .4903577000D+01 .3039100000D+01 .5477000000D+00 .4095700000D+01 +7 46320191027201911182458783.4 -.3902137000D+03 .1532678000D+02 .1382523100D+04 .1723253000D+03 .5370130000D+01 .2231560000D+02 .3483322000D+01 .1682500000D+01 .5501400000D+01 .3138100000D+01 .1848400000D+02 -.1928890000D+01 .6020543000D+03 .7855667000D+02 .2545413000D+01 .9231600000D+01 .5304572000D+01 .3479600000D+01 .9973000000D+00 .4816700000D+01 -.4782840000D+02 -.1179300000D+01 .1309391800D+04 .1724112300D+03 .5606792000D+01 .2098690000D+02 .5054674000D+01 .3242600000D+01 .7703000000D+00 .4550900000D+01 +7 46420191118201912102458805.4 -.4278524000D+03 .2014328000D+02 .1308880200D+04 .1559240300D+03 .4989470000D+01 .2377460000D+02 .3601224000D+01 .1896200000D+01 .5774100000D+01 .3650600000D+01 .3674130000D+02 -.4180810000D+01 .5944292000D+03 .7305655000D+02 .2373220000D+01 .8415900000D+01 .5402559000D+01 .3602300000D+01 .1134300000D+01 .5408800000D+01 -.1563300000D+02 -.5313180000D+01 .1320999700D+04 .1668021800D+03 .5491878000D+01 .1923770000D+02 .5161531000D+01 .3373500000D+01 .9119000000D+00 .5090000000D+01 +7 46520191210202001012458827.4 -.4194531000D+03 .2099864000D+02 .1284612100D+04 .1495047100D+03 .4990618000D+01 .2373470000D+02 .3738504000D+01 .2097600000D+01 .6009900000D+01 .4119000000D+01 .6086000000D+02 -.7084540000D+01 .5842585000D+03 .6536063000D+02 .2088281000D+01 .8473600000D+01 .5482523000D+01 .3698000000D+01 .1254600000D+01 .6066200000D+01 .4260410000D+02 -.1213527000D+02 .1348159500D+04 .1572028400D+03 .5123389000D+01 .1870280000D+02 .5240673000D+01 .3458100000D+01 .1010500000D+01 .5741000000D+01 +7 46620200101202001232458849.4 -.3549259000D+03 .1680458000D+02 .1326731900D+04 .1532794000D+03 .5284051000D+01 .2161700000D+02 .3893060000D+01 .2251800000D+01 .6162000000D+01 .4642800000D+01 .7530320000D+02 -.9186530000D+01 .5672996000D+03 .5761461000D+02 .1813477000D+01 .9116300000D+01 .5581291000D+01 .3817700000D+01 .1415100000D+01 .3623000000D+00 .9533060000D+02 -.1873972000D+02 .1369303700D+04 .1454179300D+03 .4652458000D+01 .2046660000D+02 .5324153000D+01 .3543300000D+01 .1121100000D+01 .8580000000D-01 +7 46720200123202002142458871.4 -.2512688000D+03 .8906990000D+01 .1418756500D+04 .1619201700D+03 .5656233000D+01 .1973770000D+02 .4050765000D+01 .2361600000D+01 .6254400000D+01 .5310500000D+01 .6845870000D+02 -.9356410000D+01 .5454122000D+03 .5245914000D+02 .1689308000D+01 .9147500000D+01 .5731653000D+01 .4010400000D+01 .1657600000D+01 .8734000000D+00 .1087372000D+03 -.2192664000D+02 .1370084200D+04 .1352165600D+03 .4333581000D+01 .2215350000D+02 .5446032000D+01 .3687900000D+01 .1308400000D+01 .6167000000D+00 +7 46820200214202003072458893.4 -.1493932000D+03 .8768000000D+00 .1510738100D+04 .1676621500D+03 .5887568000D+01 .2078230000D+02 .4205926000D+01 .2469600000D+01 .7340000000D-01 .6022700000D+01 .3967660000D+02 -.7450190000D+01 .5283499000D+03 .5181789000D+02 .1785861000D+01 .8277600000D+01 .5944239000D+01 .4271700000D+01 .1941500000D+01 .1434800000D+01 .6480650000D+02 -.1985200000D+02 .1357081800D+04 .1318025700D+03 .4446972000D+01 .2158010000D+02 .5629062000D+01 .3925400000D+01 .1588800000D+01 .1141900000D+01 +7 46920200307202003292458915.4 -.9647370000D+02 -.3020060000D+01 .1545333100D+04 .1641614800D+03 .5842984000D+01 .2268100000D+02 .4370408000D+01 .2632000000D+01 .2623000000D+00 .3375000000D+00 .1624100000D+01 -.4562050000D+01 .5248447000D+03 .5441184000D+02 .1998221000D+01 .7559500000D+01 .6191637000D+01 .4536500000D+01 .2198900000D+01 .2126400000D+01 -.2213050000D+02 -.1359558000D+02 .1357912800D+04 .1378812500D+03 .5022793000D+01 .1983620000D+02 .5866352000D+01 .4212900000D+01 .1887000000D+01 .1781000000D+01 +7 47020200329202004202458937.4 -.1159967000D+03 -.5299200000D+00 .1501189700D+04 .1527976400D+03 .5712165000D+01 .2203130000D+02 .4567468000D+01 .2899500000D+01 .5906000000D+00 .8993000000D+00 -.2512590000D+02 -.2569880000D+01 .5272294000D+03 .5542180000D+02 .2111681000D+01 .7772000000D+01 .1442710000D+00 .4774400000D+01 .2446300000D+01 .2817400000D+01 -.1038128000D+03 -.7422930000D+01 .1382936900D+04 .1455421100D+03 .5589876000D+01 .2001090000D+02 .6114189000D+01 .4478300000D+01 .2155400000D+01 .2498200000D+01 +7 47120200420202005122458959.4 -.1822414000D+03 .6174110000D+01 .1423343100D+04 .1442221500D+03 .5925227000D+01 .1983250000D+02 .4813556000D+01 .3265300000D+01 .1008200000D+01 .1579500000D+01 -.2434750000D+02 -.3034480000D+01 .5156704000D+03 .5077311000D+02 .2002621000D+01 .7769900000D+01 .3501280000D+00 .5024900000D+01 .2763200000D+01 .3394000000D+01 -.1226379000D+03 -.6668320000D+01 .1391496500D+04 .1399496700D+03 .5543020000D+01 .2101450000D+02 .4695700000D-01 .4717400000D+01 .2442200000D+01 .3112400000D+01 +7 47220200512202006032458981.4 -.2242016000D+03 .1065729000D+02 .1392675700D+04 .1418880800D+03 .6272611000D+01 .2000590000D+02 .5082585000D+01 .3606500000D+01 .1379100000D+01 .2328300000D+01 .3190600000D+01 -.6018610000D+01 .4821100000D+03 .4163920000D+02 .1814078000D+01 .6634500000D+01 .5496840000D+00 .5368900000D+01 .3237500000D+01 .3990100000D+01 -.5575220000D+02 -.1373708000D+02 .1333442600D+04 .1150827700D+03 .4838442000D+01 .1894580000D+02 .2327100000D+00 .4994400000D+01 .2854200000D+01 .3667200000D+01 +7 47320200603202006252459003.4 -.1710930000D+03 .6198890000D+01 .1434341300D+04 .1313098600D+03 .5862425000D+01 .2069010000D+02 .5308212000D+01 .3810400000D+01 .1673500000D+01 .2912900000D+01 .3580670000D+02 -.9654330000D+01 .4459208000D+03 .3494685000D+02 .1847719000D+01 .5542400000D+01 .7885940000D+00 .5840900000D+01 .3793500000D+01 .4799500000D+01 .5366180000D+02 -.2507890000D+02 .1219632000D+04 .8478689000D+02 .4364329000D+01 .1457910000D+02 .4338360000D+00 .5414100000D+01 .3451400000D+01 .4388800000D+01 +7 47420200625202007172459025.4 -.1340670000D+02 -.8596240000D+01 .1493879600D+04 .1038100800D+03 .4315465000D+01 .1711260000D+02 .5468909000D+01 .3850800000D+01 .1979500000D+01 .3386800000D+01 .4184170000D+02 -.1104479000D+02 .4455463000D+03 .3423807000D+02 .1988192000D+01 .5930400000D+01 .1080746000D+01 .6211700000D+01 .4197600000D+01 .5595800000D+01 .1154905000D+03 -.3261338000D+02 .1138439600D+04 .7195103000D+02 .4616501000D+01 .1363050000D+02 .7055230000D+00 .5909000000D+01 .3984800000D+01 .5300900000D+01 +7 47520200717202008082459047.4 .1775484000D+03 -.2767562000D+02 .1508593900D+04 .7234408000D+02 .2419461000D+01 .1010400000D+02 .5615728000D+01 .3721500000D+01 .2531800000D+01 .4018700000D+01 .1769600000D+01 -.8231200000D+01 .5010607000D+03 .3489455000D+02 .1838370000D+01 .6032700000D+01 .1361063000D+01 .6263600000D+01 .4420300000D+01 .6101500000D+01 .6024110000D+02 -.2968105000D+02 .1188820500D+04 .7383260000D+02 .4557749000D+01 .1464190000D+02 .1028215000D+01 .6092600000D+01 .4278000000D+01 .5931100000D+01 +7 47620200808202008302459069.4 .3031669000D+03 -.4200748000D+02 .1463005900D+04 .5429100000D+02 .1803796000D+01 .6702900000D+01 .5817460000D+01 .3573500000D+01 .3544900000D+01 .5248500000D+01 -.7537580000D+02 -.1759750000D+01 .5859751000D+03 .3719425000D+02 .1314170000D+01 .4434600000D+01 .1582939000D+01 .6075600000D+01 .4502100000D+01 .1789000000D+00 -.1051857000D+03 -.1627698000D+02 .1360273200D+04 .8287593000D+02 .3595562000D+01 .1209360000D+02 .1312466000D+01 .5949400000D+01 .4382600000D+01 .3550000000D-01 +7 47720200830202009212459091.4 .3133185000D+03 -.4640676000D+02 .1406852000D+04 .5037120000D+02 .2018818000D+01 .8002300000D+01 .6107829000D+01 .3784800000D+01 .4083400000D+01 .6140100000D+01 -.1596523000D+03 .5846030000D+01 .6560382000D+03 .4323747000D+02 .6771880000D+00 .1752600000D+01 .1771863000D+01 .5905600000D+01 .4332900000D+01 .5562000000D+00 -.3124041000D+03 .1887200000D+01 .1545272500D+04 .1019607000D+03 .2207808000D+01 .6209100000D+01 .1537908000D+01 .5782200000D+01 .4258800000D+01 .3324000000D+00 +7 47820200921202010132459113.4 .2262356000D+03 -.4168517000D+02 .1409772600D+04 .6368358000D+02 .1737657000D+01 .6893100000D+01 .1706420000D+00 .4276100000D+01 .4147500000D+01 .3352000000D+00 -.2245165000D+03 .1217659000D+02 .6868366000D+03 .4931057000D+02 .4045960000D+00 .8158000000D+00 .1961047000D+01 .5890600000D+01 .3411800000D+01 .3675500000D+01 -.4948169000D+03 .1885040000D+02 .1663947100D+04 .1228760900D+03 .1389986000D+01 .3972000000D+00 .1735242000D+01 .5750200000D+01 .3644800000D+01 .4704500000D+01 +7 47920201013202011042459135.4 .8636350000D+02 -.3122241000D+02 .1487944100D+04 .9351238000D+02 .1259017000D+01 .2875600000D+01 .5035950000D+00 .4656700000D+01 .3696000000D+01 .7834000000D+00 -.2603114000D+03 .1619140000D+02 .6799924000D+03 .5224366000D+02 .5942740000D+00 .2441500000D+01 .2164316000D+01 .6004700000D+01 .2908100000D+01 .4202000000D+01 -.6248694000D+03 .3184295000D+02 .1703642000D+04 .1375432700D+03 .1703373000D+01 .5365100000D+01 .1925378000D+01 .5826900000D+01 .3057200000D+01 .4239200000D+01 +7 48020201104202011262459157.4 -.7479670000D+02 -.1756736000D+02 .1612656500D+04 .1305379200D+03 .1696780000D+01 .2983100000D+01 .7848080000D+00 .4903900000D+01 .2909800000D+01 .3935600000D+01 -.2678857000D+03 .1775081000D+02 .6487093000D+03 .5203373000D+02 .7104920000D+00 .3012400000D+01 .2385864000D+01 .6215500000D+01 .2993900000D+01 .4652800000D+01 -.7004819000D+03 .4027914000D+02 .1683574300D+04 .1442614200D+03 .2204411000D+01 .8362800000D+01 .2116646000D+01 .5974500000D+01 .2970900000D+01 .4586400000D+01 +7 48120201126202012182459179.4 -.2386703000D+03 -.2389870000D+01 .1749980900D+04 .1681042800D+03 .2963225000D+01 .9303800000D+01 .1010293000D+01 .5081500000D+01 .2642500000D+01 .4315600000D+01 -.2494320000D+03 .1687055000D+02 .6082505000D+03 .5068632000D+02 .6942000000D+00 .2747800000D+01 .2631673000D+01 .2369000000D+00 .3379400000D+01 .5277800000D+01 -.7201051000D+03 .4365314000D+02 .1626162000D+04 .1445581800D+03 .2414690000D+01 .9080200000D+01 .2318674000D+01 .6188900000D+01 .3132300000D+01 .5029200000D+01 +7 48220201218202101092459201.4 -.3838643000D+03 .1218268000D+02 .1864773800D+04 .2001425500D+03 .4317195000D+01 .1471490000D+02 .1190957000D+01 .5227000000D+01 .2617500000D+01 .4598000000D+01 -.2086525000D+03 .1377246000D+02 .5746475000D+03 .5161021000D+02 .7477120000D+00 .2806500000D+01 .2903083000D+01 .6168000000D+00 .4060900000D+01 .6237800000D+01 -.6795732000D+03 .4131052000D+02 .1558499100D+04 .1435487500D+03 .2406817000D+01 .8606800000D+01 .2544597000D+01 .2022000000D+00 .3517800000D+01 .5696100000D+01 +7 48320210109202101312459223.4 -.4831086000D+03 .2336134000D+02 .1922500800D+04 .2205317000D+03 .5342476000D+01 .1780310000D+02 .1344438000D+01 .5368400000D+01 .2687100000D+01 .4891500000D+01 -.1545361000D+03 .9234160000D+01 .5584340000D+03 .5679081000D+02 .1073874000D+01 .4198100000D+01 .3180943000D+01 .9905000000D+00 .4652800000D+01 .7321000000D+00 -.5845069000D+03 .3359257000D+02 .1515156600D+04 .1498546900D+03 .2703344000D+01 .1027960000D+02 .2797108000D+01 .5631000000D+00 .4095500000D+01 .2552000000D+00 +8 48420100101201004162455197.3 .7252730000D+02 -.5874900000D+00 .3413641000D+04 .3616970000D+01 .3601200000D-01 .5031670000D+02 .8837150000D+00 .1069600000D+01 .3385500000D+01 .4820400000D+01 .2570710000D+02 -.2456000000D+00 .8962206000D+03 .9620700000D+00 .2008000000D-01 .1362020000D+02 .3278424000D+01 .3619600000D+01 .6127600000D+01 .9386000000D+00 .3199882000D+03 -.3250980000D+01 .3449155700D+04 .8120900000D+01 .8872000000D-01 .5326810000D+02 .2466413000D+01 .1838300000D+01 .4950200000D+01 .1136000000D+00 +8 48520100416201007302455302.3 .7681330000D+02 -.7409000000D+00 .3529359200D+04 .2706410000D+01 .2997000000D-01 .4954030000D+02 .3004039000D+01 .4508600000D+01 .1183000000D+01 .2619300000D+01 .3221190000D+02 -.3393400000D+00 .8249989000D+03 .2406330000D+01 .2496000000D-01 .1111880000D+02 .5405852000D+01 .1655200000D+01 .4929400000D+01 .5083700000D+01 .2270429000D+03 -.1481550000D+01 .3607146300D+04 .5146720000D+01 .3467700000D-01 .4782330000D+02 .4527643000D+01 .5564000000D+00 .3686200000D+01 .4186600000D+01 +8 48620100730201011122455407.3 .8421380000D+02 -.1210960000D+01 .3537983500D+04 .4958770000D+01 .1638200000D-01 .4952050000D+02 .4992371000D+01 .2923900000D+01 .4681900000D+01 .3126000000D+00 .3498510000D+02 -.2131200000D+00 .8266662000D+03 .2906820000D+01 .1168300000D-01 .1324170000D+02 .1129622000D+01 .6737000000D+00 .5222200000D+01 .2555800000D+01 .2453204000D+03 -.1932770000D+01 .3450488800D+04 .1274340000D+01 .4287600000D-01 .5066340000D+02 .2397840000D+00 .4720900000D+01 .5267800000D+01 .1802600000D+01 +8 48720101112201102252455512.3 -.2347720000D+02 .3110400000D+00 .3498532800D+04 .7005040000D+01 .5152500000D-01 .4999110000D+02 .5668980000D+00 .5192000000D+01 .2126300000D+01 .4258100000D+01 .5046830000D+02 -.3087400000D+00 .1042085800D+04 .3251690000D+01 .2569200000D-01 .1563860000D+02 .2948111000D+01 .1876700000D+01 .5104800000D+01 .3448000000D+00 .1964219000D+03 -.9111400000D+00 .3462829300D+04 .7416340000D+01 .4780900000D-01 .4932560000D+02 .2102183000D+01 .7249000000D+00 .3975800000D+01 .5804300000D+01 +8 48820110225201106102455617.3 .5865400000D+02 -.1217240000D+01 .3440488700D+04 .4961000000D+01 .3671100000D-01 .5014050000D+02 .2547291000D+01 .3392800000D+01 .5859900000D+01 .2035100000D+01 .3163100000D+02 .2565000000D-01 .1064349700D+04 .2792530000D+01 .1227900000D-01 .1411310000D+02 .4894384000D+01 .5632000000D+00 .3472900000D+01 .4435300000D+01 .1647435000D+03 -.5603100000D+00 .3492057400D+04 .4559070000D+01 .1831600000D-01 .4883930000D+02 .4057896000D+01 .5402800000D+01 .9266000000D+00 .3561400000D+01 +8 48920110610201109232455722.3 -.2195020000D+02 .5248200000D+00 .3448594200D+04 .1826670000D+01 .4809200000D-01 .4937730000D+02 .4666165000D+01 .5358900000D+01 .2864700000D+01 .6077800000D+01 .4275920000D+02 -.2330300000D+00 .9694317000D+03 .1020080000D+01 .1852600000D-01 .1494570000D+02 .7665190000D+00 .1252100000D+01 .5694900000D+01 .2110700000D+01 .2585094000D+03 -.2139620000D+01 .3458728900D+04 .5256630000D+01 .7384800000D-01 .5244400000D+02 .6161589000D+01 .1774300000D+01 .4992000000D+01 .1341000000D+01 +8 49020110923201201062455827.3 -.3883640000D+02 .2154300000D+00 .3495637900D+04 .7998640000D+01 .2317900000D-01 .4878660000D+02 .3025560000D+00 .4927300000D+01 .2082600000D+01 .3781000000D+01 .5579490000D+02 -.2575400000D+00 .1104194300D+04 .3827290000D+01 .1497400000D-01 .1621290000D+02 .2674822000D+01 .1589400000D+01 .5120200000D+01 .6123200000D+01 .1979695000D+03 -.1098530000D+01 .3435587300D+04 .7352420000D+01 .2031500000D-01 .4671730000D+02 .1826871000D+01 .4942000000D+00 .4788200000D+01 .5309800000D+01 +8 49120120106201204202455932.3 -.8515070000D+02 .1010520000D+01 .3484221800D+04 .2697250000D+01 .5216400000D-01 .4769020000D+02 .2133794000D+01 .6063100000D+01 .3408800000D+01 .1435400000D+01 .6482510000D+02 -.4332300000D+00 .1225237700D+04 .1073460000D+01 .2167600000D-01 .1649700000D+02 .4487868000D+01 .2547800000D+01 .6233700000D+01 .3766900000D+01 .2401678000D+03 -.1986370000D+01 .3544703900D+04 .6724180000D+01 .8605000000D-01 .4956690000D+02 .3674230000D+01 .1971600000D+01 .5360500000D+01 .2889700000D+01 +8 49220120420201208032456037.3 -.1578005000D+03 .2532100000D+01 .3315225800D+04 .1098973000D+02 .9217000000D-01 .5262820000D+02 .4220952000D+01 .5368900000D+01 .2393700000D+01 .5517800000D+01 .8305180000D+02 -.7892900000D+00 .1134093800D+04 .4079380000D+01 .3430500000D-01 .1767870000D+02 .2754740000D+00 .2006600000D+01 .5361800000D+01 .1622100000D+01 .2083450000D+03 -.1050090000D+01 .3459343600D+04 .9517450000D+01 .6571200000D-01 .5331620000D+02 .5714219000D+01 .1149300000D+01 .4418700000D+01 .8216000000D+00 +8 49320120803201211162456142.3 -.1114835000D+03 .1362620000D+01 .3510734100D+04 .7469860000D+01 .2566500000D-01 .4922690000D+02 .3224400000D-01 .4774200000D+01 .2708300000D+01 .3353700000D+01 .7507490000D+02 -.5248400000D+00 .1157516000D+04 .3326750000D+01 .1474600000D-01 .1629170000D+02 .2394840000D+01 .1457400000D+01 .5651600000D+01 .5678300000D+01 .1967842000D+03 -.1067340000D+01 .3415227400D+04 .4227460000D+01 .3751300000D-01 .4611590000D+02 .1531203000D+01 .5249000000D+00 .5565500000D+01 .4841500000D+01 +8 49420121116201303012456247.3 -.2575973000D+03 .3652680000D+01 .3623051900D+04 .1163349000D+02 .1028170000D+00 .4286640000D+02 .1812218000D+01 .5520100000D+01 .2468200000D+01 .8177000000D+00 .9028060000D+02 -.6445800000D+00 .1308217900D+04 .3717230000D+01 .2779600000D-01 .1728110000D+02 .4185071000D+01 .2249200000D+01 .5448200000D+01 .3133300000D+01 .1100821000D+03 .6406200000D+00 .3468780300D+04 .6548090000D+01 .4182800000D-01 .4721540000D+02 .3349857000D+01 .1404000000D+01 .4245800000D+01 .2364400000D+01 +8 49520130301201306142456352.3 -.2160206000D+03 .2675430000D+01 .3274690100D+04 .1032636000D+02 .5543400000D-01 .5656310000D+02 .3752119000D+01 .4881600000D+01 .1770200000D+01 .4910200000D+01 .8478970000D+02 -.5085700000D+00 .1249233200D+04 .3318680000D+01 .1384700000D-01 .2054110000D+02 .6084056000D+01 .1381900000D+01 .4539300000D+01 .1029000000D+01 .3799250000D+02 .1958770000D+01 .3372583300D+04 .6163820000D+01 .4696200000D-01 .5379690000D+02 .5289926000D+01 .5950500000D+01 .2343200000D+01 .1430000000D+00 +8 49620130614201309272456457.3 -.1704467000D+03 .2126600000D+01 .3475684200D+04 .3342330000D+01 .3709600000D-01 .5046120000D+02 .5954576000D+01 .5074200000D+01 .3018900000D+01 .2880500000D+01 .6214680000D+02 -.1704100000D+00 .1241732400D+04 .5920400000D+00 .1294500000D-01 .1766680000D+02 .1993373000D+01 .2387400000D+01 .2208000000D+00 .5165100000D+01 .9856550000D+02 .7532100000D+00 .3493011900D+04 .1551740000D+01 .2556000000D-01 .5062810000D+02 .1140940000D+01 .3493900000D+01 .5934500000D+01 .4330800000D+01 +8 49720130927201401102456562.3 -.1983163000D+03 .2093700000D+01 .3580220300D+04 .9289950000D+01 .5652200000D-01 .4356060000D+02 .1565016000D+01 .5425900000D+01 .1905900000D+01 .3520000000D+00 .5614100000D+02 .1071200000D+00 .1299588200D+04 .2302740000D+01 .4757000000D-02 .1715910000D+02 .3912403000D+01 .2159300000D+01 .3996500000D+01 .2711300000D+01 -.7851000000D+01 .2712530000D+01 .3425070900D+04 .3872380000D+01 .6142200000D-01 .4314300000D+02 .3049581000D+01 .1315000000D+00 .2478200000D+01 .1933000000D+01 +8 49820140110201404252456667.3 -.1219421000D+03 .4442200000D+00 .3391134600D+04 .3310740000D+01 .3572200000D-01 .5189780000D+02 .3411678000D+01 .2271900000D+01 .5231300000D+01 .4265100000D+01 .3606820000D+02 .4344000000D+00 .1292604500D+04 .2038420000D+01 .2013500000D-01 .1907860000D+02 .5760801000D+01 .4568700000D+01 .1539000000D+01 .2993000000D+00 -.6917200000D+01 .2268720000D+01 .3327829000D+04 .7156830000D+01 .5402900000D-01 .5182870000D+02 .4940094000D+01 .4286700000D+01 .1242300000D+01 .5716500000D+01 +8 49920140425201408082456772.3 -.1514876000D+03 .1249820000D+01 .3422026500D+04 .4572450000D+01 .2905600000D-01 .5370980000D+02 .5471126000D+01 .3051000000D+00 .2928600000D+01 .2230100000D+01 .3221650000D+02 .5084500000D+00 .1317888300D+04 .2001390000D+01 .6737000000D-02 .2117410000D+02 .1503063000D+01 .3615400000D+01 .1218200000D+01 .4547700000D+01 -.1852850000D+02 .2810650000D+01 .3574030400D+04 .2392360000D+01 .2935100000D-01 .5725810000D+02 .6890340000D+00 .3644000000D+01 .2429500000D+01 .3754000000D+01 +8 50020140808201411212456877.3 -.8371320000D+02 -.3056400000D+00 .3449370300D+04 .1260660000D+01 .4426200000D-01 .4606120000D+02 .1268983000D+01 .4661200000D+01 .6270300000D+01 .6247500000D+01 .2818620000D+02 .6339200000D+00 .1289288500D+04 .5380300000D+00 .2279200000D-01 .1710050000D+02 .3586945000D+01 .5198600000D+01 .2250000000D+01 .2313500000D+01 -.3327780000D+02 .2894100000D+01 .3444540600D+04 .6125840000D+01 .8480800000D-01 .4275820000D+02 .2727236000D+01 .5175800000D+01 .1923200000D+01 .1468500000D+01 +8 50120141121201503062456982.3 -.5886590000D+02 -.8835600000D+00 .3459863100D+04 .1000630000D+02 .4788000000D-01 .4611960000D+02 .3155970000D+01 .1570900000D+01 .4891000000D+01 .3712700000D+01 .2125640000D+02 .6703600000D+00 .1294172200D+04 .3910010000D+01 .2009500000D-01 .1721000000D+02 .5494702000D+01 .4084400000D+01 .1499900000D+01 .6008100000D+01 .2511480000D+02 .1331410000D+01 .3353351100D+04 .8099800000D+01 .2978800000D-01 .4870880000D+02 .4655874000D+01 .3505000000D+01 .9534000000D+00 .5190300000D+01 +8 50220150306201506192457087.3 -.4356450000D+02 -.1416160000D+01 .3510075400D+04 .3425860000D+01 .5125500000D-01 .5630930000D+02 .4999484000D+01 .1651000000D+01 .6103000000D+01 .1496700000D+01 .3635500000D+01 .1041530000D+01 .1313648000D+04 .2102300000D+01 .3155100000D-01 .2084920000D+02 .1068287000D+01 .4854200000D+01 .2347500000D+01 .3867800000D+01 -.3802500000D+02 .2561000000D+01 .3536665400D+04 .4816650000D+01 .7877200000D-01 .5468740000D+02 .2667800000D+00 .4951700000D+01 .2110700000D+01 .3076000000D+01 +8 50320150619201510022457192.3 .3671300000D+01 -.2072950000D+01 .3324553400D+04 .9512660000D+01 .9224200000D-01 .4836780000D+02 .8484350000D+00 .2137800000D+01 .5495800000D+01 .5765000000D+01 .5161200000D+01 .9588600000D+00 .1254540600D+04 .4000980000D+01 .3613200000D-01 .1723140000D+02 .3151836000D+01 .4700900000D+01 .1805300000D+01 .1794200000D+01 .1724990000D+02 .1440910000D+01 .3454672000D+04 .8263810000D+01 .6958600000D-01 .4656900000D+02 .2332981000D+01 .4250900000D+01 .1229300000D+01 .9195000000D+00 +8 50420151002201601152457297.3 -.8663600000D+01 -.1903720000D+01 .3482773300D+04 .1081335000D+02 .3891100000D-01 .4441620000D+02 .2904588000D+01 .1393000000D+01 .5170500000D+01 .3228000000D+01 .3062870000D+02 .4206600000D+00 .1283701300D+04 .3086080000D+01 .1441000000D-01 .1697960000D+02 .5213492000D+01 .3781400000D+01 .1863500000D+01 .5569400000D+01 .8119540000D+02 .3083000000D-01 .3420629700D+04 .6322610000D+01 .8125000000D-02 .4693850000D+02 .4377581000D+01 .2907900000D+01 .1448900000D+01 .4769200000D+01 +8 50520160115201604292457402.3 -.1257480000D+02 -.2155240000D+01 .3571963500D+04 .8538360000D+01 .8133000000D-01 .5224660000D+02 .4668356000D+01 .2443000000D+01 .5731600000D+01 .9342000000D+00 .3597560000D+02 .1981100000D+00 .1230427400D+04 .2942240000D+01 .2329800000D-01 .1706510000D+02 .7265000000D+00 .4781300000D+01 .1782900000D+01 .3294100000D+01 .8073550000D+02 -.4464100000D+00 .3464354800D+04 .5378410000D+01 .4564300000D-01 .4980860000D+02 .6191718000D+01 .4450000000D+01 .1226700000D+01 .2437400000D+01 +8 50620160429201608122457507.3 -.3297440000D+02 -.1379700000D+01 .3337617800D+04 .1029467000D+02 .5524300000D-01 .4866690000D+02 .3663600000D+00 .1618400000D+01 .4700400000D+01 .5099200000D+01 .4586730000D+02 .2774000000D-01 .1159367200D+04 .2676080000D+01 .1027100000D-01 .1668270000D+02 .2707259000D+01 .3741200000D+01 .4191000000D+00 .1099000000D+01 .1399084000D+03 -.1350660000D+01 .3383989900D+04 .7073870000D+01 .4642000000D-01 .5011050000D+02 .1907038000D+01 .2870700000D+01 .5664000000D+01 .3042000000D+00 +8 50720160812201611252457612.3 -.3671190000D+02 -.1538900000D+01 .3458596800D+04 .3966060000D+01 .3040400000D-01 .4664110000D+02 .2555865000D+01 .1456100000D+01 .6255500000D+01 .2771900000D+01 .5712080000D+02 -.1408400000D+00 .1247828300D+04 .4525300000D+00 .1067500000D-01 .1676860000D+02 .4847282000D+01 .3033400000D+01 .2695500000D+01 .5149100000D+01 .1375230000D+03 -.1271040000D+01 .3513592000D+04 .2954890000D+01 .1236900000D-01 .4593420000D+02 .4038347000D+01 .1806100000D+01 .3049200000D+01 .4328600000D+01 +8 50820161125201703102457717.3 -.8238420000D+02 -.8878500000D+00 .3518182600D+04 .8421490000D+01 .3229200000D-01 .4788530000D+02 .4412389000D+01 .2570100000D+01 .5508400000D+01 .4466000000D+00 .4535260000D+02 -.9694000000D-01 .1184387800D+04 .3179790000D+01 .9616000000D-02 .1517390000D+02 .4483700000D+00 .4527000000D+01 .1676900000D+01 .2821000000D+01 .1174303000D+03 -.1482930000D+01 .3463756400D+04 .5513030000D+01 .2330400000D-01 .4840030000D+02 .5913882000D+01 .4017100000D+01 .1570000000D-01 .1940300000D+01 +8 50920170310201706232457822.3 -.1323727000D+03 .2800000000D-03 .3449830500D+04 .1942770000D+01 .3930000000D-01 .4850380000D+02 .6257795000D+01 .5722900000D+01 .1949200000D+01 .4444700000D+01 .4325700000D+02 -.6913000000D-01 .1032954600D+04 .7653100000D+00 .1615000000D-01 .1452560000D+02 .2303551000D+01 .3782000000D+00 .3455000000D+01 .4892000000D+00 .1047291000D+03 -.1239670000D+01 .3401640100D+04 .4109780000D+01 .4237400000D-01 .4913370000D+02 .1514376000D+01 .1234700000D+01 .3977100000D+01 .5995100000D+01 +8 51020170623201710062457927.3 -.7327290000D+02 -.1230600000D+01 .3434130600D+04 .6356160000D+01 .5643400000D-01 .4937400000D+02 .2087309000D+01 .3218300000D+01 .4520000000D-01 .2269600000D+01 .3209510000D+02 .1437300000D+00 .1074586000D+04 .2627180000D+01 .2081600000D-01 .1582540000D+02 .4397531000D+01 .5180700000D+01 .2066000000D+01 .4601200000D+01 .8571770000D+02 -.8979500000D+00 .3503790000D+04 .3964980000D+01 .2740900000D-01 .4731680000D+02 .3604644000D+01 .5202900000D+01 .1704100000D+01 .3794900000D+01 +8 51120171006201801192458032.3 -.8771030000D+02 -.8951500000D+00 .3531511100D+04 .5908770000D+01 .7706000000D-02 .4727500000D+02 .4131408000D+01 .2259200000D+01 .3947300000D+01 .1700000000D-02 .3675600000D+02 -.5201000000D-01 .1130404600D+04 .2349470000D+01 .5395000000D-02 .1417260000D+02 .1598750000D+00 .4250600000D+01 .2897000000D+01 .2369400000D+01 .1120208000D+03 -.1634950000D+01 .3492005800D+04 .3530440000D+01 .3078700000D-01 .4869950000D+02 .5631709000D+01 .3307000000D+01 .5000500000D+01 .1500300000D+01 +8 51220180119201805042458137.3 -.1010991000D+03 -.8782300000D+00 .3497295400D+04 .5385280000D+01 .3289500000D-01 .4747690000D+02 .5943657000D+01 .4187500000D+01 .7698000000D+00 .3878100000D+01 .5464680000D+02 -.6104900000D+00 .9290441000D+03 .1890720000D+01 .4059000000D-02 .1236330000D+02 .1993370000D+01 .6089900000D+01 .3139100000D+01 .2900000000D-02 .1042036000D+03 -.2008310000D+01 .3393701100D+04 .5142700000D+01 .1682400000D-01 .4676240000D+02 .1209456000D+01 .3331000000D+00 .4128400000D+01 .5479100000D+01 +8 51320180504201808172458242.3 -.4411320000D+02 -.1813010000D+01 .3410365400D+04 .6964460000D+01 .4981100000D-01 .5170060000D+02 .1619225000D+01 .2335200000D+01 .5019600000D+01 .1678700000D+01 .4204300000D+02 -.4056300000D+00 .8506962000D+03 .1547390000D+01 .1599200000D-01 .1321820000D+02 .3933357000D+01 .3751400000D+01 .6023600000D+01 .3953300000D+01 .8487720000D+02 -.1770730000D+01 .3510681100D+04 .2904040000D+01 .5089600000D-01 .4943880000D+02 .3170425000D+01 .3361500000D+01 .5799100000D+01 .3183600000D+01 +8 51420180817201811302458347.3 -.1118839000D+03 -.5304700000D+00 .3542608000D+04 .1989080000D+01 .3546700000D-01 .4898680000D+02 .3755623000D+01 .6141600000D+01 .2458200000D+01 .5807900000D+01 .5917790000D+02 -.6064700000D+00 .9690031000D+03 .1493380000D+01 .1665500000D-01 .1409500000D+02 .6022843000D+01 .1510300000D+01 .4347600000D+01 .1818400000D+01 .1351420000D+03 -.2354860000D+01 .3562898900D+04 .6580140000D+01 .6241600000D-01 .5194660000D+02 .5255503000D+01 .1476100000D+01 .4610900000D+01 .1048900000D+01 +8 51520181130201903152458452.3 -.1429519000D+03 -.3790000000D-01 .3512834300D+04 .6669060000D+01 .3438000000D-02 .4717090000D+02 .5691893000D+01 .4120400000D+01 .1907100000D+01 .3428200000D+01 .6317520000D+02 -.9099800000D+00 .8492348000D+03 .1344150000D+01 .1464700000D-01 .1040010000D+02 .1714553000D+01 .5956000000D+01 .5321900000D+01 .5888500000D+01 .1115906000D+03 -.2497140000D+01 .3384847000D+04 .3946240000D+01 .4043500000D-01 .4441310000D+02 .9407700000D+00 .2719000000D+00 .5356700000D+01 .5006900000D+01 +8 51620190315201906282458557.3 -.1961494000D+03 .1072690000D+01 .3584252900D+04 .5820000000D+01 .7117000000D-01 .4920050000D+02 .1240694000D+01 .5744400000D+01 .2789700000D+01 .1025800000D+01 .4411220000D+02 -.5735600000D+00 .6862393000D+03 .2886440000D+01 .2668900000D-01 .8738300000D+01 .3544415000D+01 .1242300000D+01 .4512600000D+01 .3194500000D+01 .7914550000D+02 -.2010960000D+01 .3543157900D+04 .8265780000D+01 .8122900000D-01 .5077980000D+02 .2824830000D+01 .1531100000D+01 .4834300000D+01 .2538900000D+01 +8 51720190628201910112458662.3 -.2332094000D+03 .1528600000D+01 .3480892900D+04 .1079309000D+02 .6878800000D-01 .5496780000D+02 .3262439000D+01 .4898800000D+01 .1939400000D+01 .5210400000D+01 .4105930000D+02 -.4601100000D+00 .6882985000D+03 .2535540000D+01 .1040300000D-01 .1301550000D+02 .5508772000D+01 .3789000000D+00 .3818000000D+01 .1170300000D+01 .5525550000D+02 -.1307460000D+01 .3596054100D+04 .8178140000D+01 .4101000000D-01 .5536090000D+02 .4818598000D+01 .6529000000D+00 .4133100000D+01 .5249000000D+00 +8 51820191011202001242458767.3 -.1935575000D+03 .9170200000D+00 .3502970300D+04 .3848100000D+01 .3774200000D-01 .4771730000D+02 .5400063000D+01 .4388300000D+01 .3186500000D+01 .3011900000D+01 .3833360000D+02 -.5041600000D+00 .7474716000D+03 .2018400000D+00 .1944000000D-01 .9337000000D+01 .1369216000D+01 .5412300000D+01 .5092300000D+01 .5386900000D+01 .3763860000D+02 -.1249930000D+01 .3460729300D+04 .1162580000D+01 .4769900000D-01 .4614260000D+02 .6430790000D+00 .5689000000D+00 .5295500000D+01 .4537900000D+01 +8 51920200124202005082458872.3 -.2869827000D+03 .2613870000D+01 .3710860700D+04 .1314182000D+02 .8987700000D-01 .4549400000D+02 .9630730000D+00 .5235900000D+01 .2194100000D+01 .4391000000D+00 .8100000000D-01 .9845000000D-01 .5636737000D+03 .3500370000D+01 .1635200000D-01 .5390600000D+01 .3172238000D+01 .2819000000D+00 .3341400000D+01 .2804100000D+01 -.3840870000D+02 -.6405000000D-01 .3566489900D+04 .8562060000D+01 .4623100000D-01 .4801210000D+02 .2522275000D+01 .7830000000D+00 .3874500000D+01 .2034500000D+01 +8 52020200508202008212458977.3 -.2580669000D+03 .2034450000D+01 .3510791400D+04 .7464740000D+01 .2917700000D-01 .5911750000D+02 .2810822000D+01 .4596000000D+01 .2252000000D+01 .4544300000D+01 -.6695600000D+01 .1507200000D+00 .3738363000D+03 .9665400000D+00 .8166000000D-02 .7076400000D+01 .5053657000D+01 .4847000000D+01 .6192900000D+01 .2216000000D+00 -.1148890000D+03 .1171480000D+01 .3486957100D+04 .4177110000D+01 .1606900000D-01 .5550740000D+02 .4413203000D+01 .5452400000D+01 .1394100000D+01 .6105500000D+01 +8 52120200821202012042459082.3 -.2438721000D+03 .1861020000D+01 .3462080600D+04 .5917060000D+01 .7017200000D-01 .5033050000D+02 .5003504000D+01 .5680400000D+01 .2843900000D+01 .2519000000D+01 .1503680000D+02 -.1284600000D+00 .5077604000D+03 .1982220000D+01 .2287600000D-01 .7996700000D+01 .9032220000D+00 .1357900000D+01 .4520800000D+01 .4699900000D+01 -.6214990000D+02 .4379300000D+00 .3533992500D+04 .3154110000D+01 .3861000000D-01 .5135290000D+02 .2650130000D+00 .1633400000D+01 .4720000000D+01 .4039500000D+01 +8 52220201204202103192459187.3 -.2830603000D+03 .2479440000D+01 .3721755100D+04 .1221946000D+02 .5665400000D-01 .4555600000D+02 .7035100000D+00 .4966900000D+01 .1839000000D+01 .6259800000D+01 -.2532050000D+02 .4769600000D+00 .4721024000D+03 .3319800000D+01 .1096800000D-01 .4148400000D+01 .2798128000D+01 .5923800000D+01 .2190600000D+01 .2530600000D+01 -.1555998000D+03 .1881930000D+01 .3617394100D+04 .7135930000D+01 .4826900000D-01 .4501750000D+02 .2230490000D+01 .6121300000D+01 .2400900000D+01 .1618100000D+01 diff --git a/GUI/xephem/auxil/saturne.9910 b/GUI/xephem/auxil/saturne.9910 new file mode 100644 index 0000000..e316d34 --- /dev/null +++ b/GUI/xephem/auxil/saturne.9910 @@ -0,0 +1,565 @@ + 6 8 2 82 126 168 212 261 324 524 6.6670 4.5860 3.3280 2.2960 1.3910 .3940 .3940 .0790 55.0100.0105.0100.0 90.0 70.0 22.0105.0 566 2451179.500 1999 +1 219990101199902252451179.3 .4885100000D+01 .6020000000D-02 .1850229000D+03 .2426300000D+00 .1658000000D-02 .1659400000D+01 -.3926760000D+00 -.1760500000D+01 -.2919700000D+01 -.5533600000D+01 -.6957000000D+00 .1813000000D-01 .4101210000D+02 .1149300000D+00 .1648000000D-02 .3990000000D+00 -.2070012000D+01 -.3573200000D+01 -.2179300000D+01 -.9516000000D+00 .2490400000D+01 -.8460000000D-01 .1810908000D+03 .1188500000D+00 .2362000000D-02 .1656900000D+01 -.5106395000D+01 -.4913000000D+00 -.5333000000D+00 -.3951700000D+01 +1 319990225199904212451234.3 .5116400000D+01 -.6326000000D-01 .1841932000D+03 .4065700000D+00 .2323000000D-02 .1658300000D+01 -.4502154000D+01 -.5831700000D+01 -.1002700000D+01 -.2127300000D+01 .3459000000D+00 .2189000000D-01 .4678920000D+02 .2183800000D+00 .5590000000D-03 .4833000000D+00 -.6241467000D+01 -.4410000000D+00 -.5444900000D+01 -.3846400000D+01 -.2322600000D+01 -.4957000000D-01 .1799438000D+03 .3758500000D+00 .4360000000D-03 .1664700000D+01 -.2922724000D+01 -.4716200000D+01 -.4717600000D+01 -.5474000000D+00 +1 419990421199906152451289.3 .1509400000D+01 -.7760000000D-01 .1847016000D+03 .3688300000D+00 .8990000000D-03 .1683600000D+01 -.2371582000D+01 -.3820100000D+01 -.5505300000D+01 -.4950300000D+01 .1628000000D+01 .3310000000D-02 .5873510000D+02 .2149000000D+00 .8570000000D-03 .5651000000D+00 -.4056850000D+01 -.4191200000D+01 -.1485200000D+01 -.3338000000D+00 -.5028900000D+01 .1093000000D-01 .1766106000D+03 .4272100000D+00 .1042000000D-02 .1566300000D+01 -.7854260000D+00 -.2638700000D+01 -.6059000000D+01 -.3403200000D+01 +1 519990615199908092451344.3 -.2939200000D+01 -.4740000000D-01 .1854528000D+03 .2125300000D+00 .1152000000D-02 .1724100000D+01 -.2179970000D+00 -.1811000000D+01 -.5105900000D+01 -.1441100000D+01 .1798200000D+01 -.2930000000D-01 .6830680000D+02 .9549000000D-01 .1418000000D-02 .6511000000D+00 -.1798413000D+01 -.1718400000D+01 -.5553400000D+01 -.3038300000D+01 -.4425200000D+01 .6529000000D-01 .1732351000D+03 .3764100000D+00 .3551000000D-02 .1595900000D+01 -.4922107000D+01 -.4541000000D+00 -.3674500000D+01 -.6220100000D+01 +1 619990809199910032451399.3 -.5590800000D+01 .3191000000D-01 .1856936000D+03 .2818000000D-01 .2457000000D-02 .1686800000D+01 -.4283765000D+01 -.8891000000D+00 -.2904000000D+01 -.4176900000D+01 .5230000000D-01 -.2906000000D-01 .7016260000D+02 .6626000000D-01 .1089000000D-02 .6333000000D+00 -.5780178000D+01 -.3506900000D+01 -.2972600000D+01 -.5664100000D+01 -.6516000000D+00 .7902000000D-01 .1720138000D+03 .1027900000D+00 .3774000000D-02 .1583600000D+01 -.2718652000D+01 -.4062600000D+01 -.1163700000D+01 -.2625900000D+01 +1 719991003199911272451454.3 -.3681400000D+01 .9390000000D-01 .1852885000D+03 .3018500000D+00 .1033000000D-02 .1789300000D+01 -.1989216000D+01 -.4001000000D+00 -.3498800000D+01 -.5578000000D+00 -.1577200000D+01 -.2040000000D-02 .6496290000D+02 .1475200000D+00 .4610000000D-03 .5711000000D+00 -.3461254000D+01 -.6112000000D+00 -.4895300000D+01 -.1966500000D+01 .3945200000D+01 .2312000000D-01 .1736255000D+03 .2180500000D+00 .1316000000D-02 .1586700000D+01 -.4255890000D+00 -.5506500000D+01 -.4297700000D+01 -.5201500000D+01 +1 819991127200001212451509.3 .1811700000D+01 .6423000000D-01 .1855465000D+03 .2348000000D+00 .4099000000D-02 .1753800000D+01 -.5943639000D+01 -.4224100000D+01 -.1043700000D+01 -.3263100000D+01 -.1631500000D+01 .1976000000D-01 .5753810000D+02 .9317000000D-01 .1346000000D-02 .5131000000D+00 -.1185556000D+01 -.3830500000D+01 -.1900900000D+01 -.4793100000D+01 .5130200000D+01 -.6535000000D-01 .1755489000D+03 .2337200000D+00 .3849000000D-02 .1585900000D+01 -.4371909000D+01 -.3249600000D+01 -.1235000000D+00 -.1656700000D+01 +1 920000121200003162451564.3 .5320100000D+01 -.1317000000D-01 .1859888000D+03 .1502200000D+00 .3110000000D-02 .1620100000D+01 -.3681675000D+01 -.5560600000D+01 -.5026500000D+01 -.6028900000D+01 -.5311000000D+00 .2649000000D-01 .5636940000D+02 .1557000000D+00 .7360000000D-03 .5549000000D+00 -.5297063000D+01 -.6183400000D+01 -.5682200000D+01 -.1403900000D+01 .1299000000D+01 -.7787000000D-01 .1760926000D+03 .1363800000D+00 .3258000000D-02 .1613100000D+01 -.2103727000D+01 -.3491600000D+01 -.4135700000D+01 -.4452300000D+01 +1 1020000316200005102451619.3 .4505300000D+01 -.7088000000D-01 .1865193000D+03 .4837900000D+00 .1212000000D-02 .1653200000D+01 -.1511424000D+01 -.3258700000D+01 -.7473000000D+00 -.2660600000D+01 .1019000000D+01 .2190000000D-01 .6414950000D+02 .2318900000D+00 .5190000000D-03 .6585000000D+00 -.3150765000D+01 -.3583900000D+01 -.2213000000D+00 -.4241400000D+01 -.3140400000D+01 -.3527000000D-01 .1737764000D+03 .3787100000D+00 .1441000000D-02 .1611800000D+01 -.6216896000D+01 -.1626000000D+01 -.2195800000D+01 -.1026000000D+01 +1 1120000510200007042451674.3 .4420000000D+00 -.7357000000D-01 .1860840000D+03 .5332700000D+00 .3104000000D-02 .1671800000D+01 -.5660686000D+01 -.1009900000D+01 -.4051900000D+01 -.5507400000D+01 .2244900000D+01 -.1056000000D-01 .7419330000D+02 .1657700000D+00 .1253000000D-02 .7014000000D+00 -.9560800000D+00 -.1307800000D+01 -.4503100000D+01 -.7344000000D+00 -.5016900000D+01 .2228000000D-01 .1699939000D+03 .4616800000D+00 .1281000000D-02 .1520200000D+01 -.4095584000D+01 -.5835300000D+01 -.2765200000D+01 -.3908900000D+01 +1 1220000704200008282451729.3 -.3755500000D+01 -.3393000000D-01 .1851164000D+03 .3652900000D+00 .3984000000D-02 .1696600000D+01 -.3507809000D+01 -.5020900000D+01 -.1748800000D+01 -.1951800000D+01 .1594400000D+01 -.3675000000D-01 .7915370000D+02 .3099000000D-01 .1007000000D-02 .7413000000D+00 -.5001030000D+01 -.4558700000D+01 -.1890600000D+01 -.3455100000D+01 -.3764800000D+01 .6980000000D-01 .1676911000D+03 .2750900000D+00 .2183000000D-02 .1590800000D+01 -.1962873000D+01 -.3554200000D+01 -.6083000000D+00 -.4443000000D+00 +1 1320000828200010222451784.3 -.5630500000D+01 .4885000000D-01 .1844672000D+03 .6501000000D-01 .2273000000D-02 .1674700000D+01 -.1293652000D+01 -.8710000000D+00 -.5520500000D+01 -.4671600000D+01 -.5387000000D+00 -.2666000000D-01 .7767010000D+02 .1106100000D+00 .3800000000D-03 .7056000000D+00 -.2732411000D+01 -.1715000000D+00 -.4238200000D+01 -.6144200000D+01 .2909000000D+00 .7273000000D-01 .1688902000D+03 .6645000000D-01 .1850000000D-02 .1615100000D+01 -.6039561000D+01 -.4740700000D+01 -.4703500000D+01 -.3152000000D+01 +1 1420001022200012162451839.3 -.2753300000D+01 .9729000000D-01 .1849420000D+03 .3022300000D+00 .1268000000D-02 .1693400000D+01 -.5275625000D+01 -.3798000000D+01 -.1048500000D+01 -.1026600000D+01 -.2003600000D+01 .3860000000D-02 .7276750000D+02 .1417200000D+00 .1527000000D-02 .6353000000D+00 -.4446170000D+00 -.4088800000D+01 -.1288300000D+01 -.2504500000D+01 .4434100000D+01 .5870000000D-02 .1714514000D+03 .3793000000D+00 .1931000000D-02 .1584700000D+01 -.3730609000D+01 -.2135200000D+01 -.5029900000D+01 -.5741600000D+01 +1 1520001216200102092451894.3 .2877100000D+01 .4983000000D-01 .1851483000D+03 .1570200000D+00 .3620000000D-02 .1759900000D+01 -.2943394000D+01 -.1671200000D+01 -.4739900000D+01 -.3748700000D+01 -.1742800000D+01 .2809000000D-01 .6910040000D+02 .7828000000D-01 .1855000000D-02 .6141000000D+00 -.4462737000D+01 -.6035000000D+00 -.4767300000D+01 -.5306700000D+01 .4570200000D+01 -.7511000000D-01 .1733210000D+03 .1834100000D+00 .3062000000D-02 .1545800000D+01 -.1382913000D+01 -.5663500000D+01 -.2623100000D+01 -.2189900000D+01 +1 1620010209200104052451949.3 .5508800000D+01 -.2901000000D-01 .1850359000D+03 .2707500000D+00 .2049000000D-02 .1690100000D+01 -.6931930000D+00 -.2111200000D+01 -.2814200000D+01 -.2842000000D+00 -.1611000000D+00 .3323000000D-01 .7125830000D+02 .1758400000D+00 .6860000000D-03 .6582000000D+00 -.2265512000D+01 -.3229100000D+01 -.1606800000D+01 -.1854600000D+01 .2561000000D+00 -.6936000000D-01 .1720915000D+03 .2941900000D+00 .8700000000D-03 .1492300000D+01 -.5402942000D+01 -.9881000000D+00 -.7958000000D+00 -.5012100000D+01 +1 1720010405200105302452004.3 .3802300000D+01 -.7699000000D-01 .1847445000D+03 .4238700000D+00 .1638000000D-02 .1700700000D+01 -.4824164000D+01 -.6269300000D+01 -.1148400000D+01 -.3181200000D+01 .1759200000D+01 .1415000000D-01 .7864330000D+02 .2087800000D+00 .1234000000D-02 .7541000000D+00 -.9059800000D-01 -.8643000000D+00 -.4002100000D+01 -.4653400000D+01 -.3620600000D+01 -.2488000000D-01 .1681278000D+03 .5462500000D+00 .1385000000D-02 .1518800000D+01 -.3249923000D+01 -.4951500000D+01 -.1270300000D+01 -.1579000000D+01 +1 1820010530200107242452059.3 -.5866000000D+00 -.6789000000D-01 .1851582000D+03 .3793600000D+00 .2580000000D-03 .1675200000D+01 -.2703185000D+01 -.4325100000D+01 -.1447900000D+01 -.6034100000D+01 .2523200000D+01 -.2348000000D-01 .8442840000D+02 .1097100000D+00 .1404000000D-02 .7792000000D+00 -.4179433000D+01 -.5028700000D+01 -.1274700000D+01 -.1170900000D+01 -.4958700000D+01 .3281000000D-01 .1648511000D+03 .4901200000D+00 .1922000000D-02 .1507600000D+01 -.1148415000D+01 -.2676300000D+01 -.5456500000D+01 -.4475000000D+01 +1 1920010724200109172452114.3 -.4410800000D+01 -.1886000000D-01 .1854339000D+03 .2213700000D+00 .2105000000D-02 .1658100000D+01 -.5516280000D+00 -.2409300000D+01 -.5884600000D+01 -.2489300000D+01 .1157100000D+01 -.3861000000D-01 .8461270000D+02 .7466000000D-01 .5670000000D-03 .7783000000D+00 -.1959702000D+01 -.4316400000D+01 -.5899200000D+01 -.3899200000D+01 -.3128200000D+01 .7299000000D-01 .1654603000D+03 .2865200000D+00 .2944000000D-02 .1572900000D+01 -.5300030000D+01 -.3634000000D+00 -.3549100000D+01 -.9762000000D+00 +1 2020010917200111112452169.3 -.5484000000D+01 .6499000000D-01 .1857692000D+03 .7018000000D-01 .3275000000D-02 .1697500000D+01 -.4609063000D+01 -.1734100000D+01 -.3401900000D+01 -.5218500000D+01 -.1062300000D+01 -.2217000000D-01 .8061370000D+02 .6849000000D-01 .4800000000D-03 .7471000000D+00 -.6001140000D+01 -.2589700000D+01 -.4733000000D+01 -.3349000000D+00 .1150700000D+01 .6563000000D-01 .1674807000D+03 .1013300000D+00 .2380000000D-02 .1581700000D+01 -.3077434000D+01 -.2247400000D+01 -.1090600000D+01 -.3670300000D+01 +1 2120011111200201052452224.3 -.1659800000D+01 .9365000000D-01 .1857011000D+03 .2779200000D+00 .6840000000D-03 .1738600000D+01 -.2296224000D+01 -.6012000000D+00 -.3199600000D+01 -.1546000000D+01 -.2292300000D+01 .1025000000D-01 .7740210000D+02 .1968000000D-01 .3560000000D-03 .6926000000D+00 -.3734477000D+01 -.1354200000D+01 -.4198400000D+01 -.3031000000D+01 .4875600000D+01 -.1512000000D-01 .1685542000D+03 .3106800000D+00 .1423000000D-02 .1496100000D+01 -.7535040000D+00 -.5569800000D+01 -.3080300000D+01 -.1140000000D-01 +1 2220020105200203012452279.3 .3726800000D+01 .3447000000D-01 .1856835000D+03 .7361000000D-01 .2601000000D-02 .1761000000D+01 -.6249109000D+01 -.4321300000D+01 -.1415700000D+01 -.4254500000D+01 -.1685900000D+01 .3715000000D-01 .7739600000D+02 .8774000000D-01 .1063000000D-02 .7266000000D+00 -.1471588000D+01 -.1605500000D+01 -.3108700000D+01 -.5836700000D+01 .3875500000D+01 -.7914000000D-01 .1675772000D+03 .1791600000D+00 .4655000000D-02 .1518800000D+01 -.4695592000D+01 -.3380000000D+01 -.2915000000D+00 -.2746200000D+01 +1 2320020301200204252452334.3 .5523200000D+01 -.4475000000D-01 .1854079000D+03 .2998600000D+00 .1879000000D-02 .1668200000D+01 -.4011686000D+01 -.5524300000D+01 -.6054300000D+01 -.8428000000D+00 .4624000000D+00 .3275000000D-01 .8193840000D+02 .1440600000D+00 .1140000000D-02 .7709000000D+00 -.5541857000D+01 -.5958600000D+01 -.1351100000D+01 -.2353200000D+01 -.6728000000D+00 -.5978000000D-01 .1657795000D+03 .1963500000D+00 .3606000000D-02 .1468000000D+01 -.2458834000D+01 -.4176600000D+01 -.4160000000D+01 -.5562700000D+01 +1 2420020425200206192452389.3 .2973800000D+01 -.7762000000D-01 .1853831000D+03 .5192200000D+00 .1037000000D-02 .1715400000D+01 -.1866050000D+01 -.3452400000D+01 -.5737800000D+01 -.3730800000D+01 .2331100000D+01 .2700000000D-02 .8757290000D+02 .9498000000D-01 .1037000000D-02 .8017000000D+00 -.3351663000D+01 -.4221400000D+01 -.5801200000D+01 -.5119300000D+01 -.3995500000D+01 -.1501000000D-01 .1640977000D+03 .4291000000D+00 .1259000000D-02 .1444700000D+01 -.3283960000D+00 -.2049600000D+01 -.1258100000D+01 -.2146900000D+01 +1 2520020619200208132452444.3 -.1499400000D+01 -.6056000000D-01 .1846208000D+03 .5063500000D+00 .2455000000D-02 .1738400000D+01 -.6029903000D+01 -.1292900000D+01 -.4120500000D+01 -.3035000000D+00 .2408800000D+01 -.3172000000D-01 .8872600000D+02 .1352400000D+00 .2310000000D-03 .7693000000D+00 -.1157836000D+01 -.3423100000D+01 -.6196700000D+01 -.1677100000D+01 -.4811800000D+01 .4119000000D-01 .1648665000D+03 .4789100000D+00 .2784000000D-02 .1462900000D+01 -.4510220000D+01 -.6173900000D+01 -.3397600000D+01 -.5070800000D+01 +1 2620020813200210072452499.3 -.4909000000D+01 -.4560000000D-02 .1839081000D+03 .3109800000D+00 .3628000000D-02 .1679700000D+01 -.3880667000D+01 -.5299200000D+01 -.2072700000D+01 -.3064900000D+01 .5987000000D+00 -.3517000000D-01 .8432890000D+02 .1687100000D+00 .1133000000D-02 .7453000000D+00 -.5241162000D+01 -.1402300000D+01 -.4493300000D+01 -.4425000000D+01 -.2472100000D+01 .7612000000D-01 .1670688000D+03 .2642600000D+00 .3746000000D-02 .1546000000D+01 -.2362656000D+01 -.3903000000D+01 -.8733000000D+00 -.1527300000D+01 +1 2720021007200212012452554.3 -.5116300000D+01 .7583000000D-01 .1838051000D+03 .1560100000D+00 .1580000000D-02 .1696500000D+01 -.1655638000D+01 -.5775000000D+00 -.5553200000D+01 -.5789600000D+01 -.1416500000D+01 -.1796000000D-01 .7984400000D+02 .7169000000D-01 .1431000000D-02 .7671000000D+00 -.3029011000D+01 -.5456700000D+01 -.2316600000D+01 -.8497000000D+00 .1983400000D+01 .5479000000D-01 .1685360000D+03 .8474000000D-01 .2587000000D-02 .1638900000D+01 -.1247330000D+00 -.4749900000D+01 -.4709900000D+01 -.4175400000D+01 +1 2820021201200301252452609.3 -.6280000000D+00 .8917000000D-01 .1846145000D+03 .4063700000D+00 .3291000000D-02 .1672900000D+01 -.5622065000D+01 -.4092100000D+01 -.9685000000D+00 -.2134700000D+01 -.2412000000D+01 .1713000000D-01 .8022350000D+02 .7305000000D-01 .6310000000D-03 .7437000000D+00 -.7692930000D+00 -.6114400000D+01 -.1373400000D+01 -.3557900000D+01 .5019200000D+01 -.2990000000D-01 .1679499000D+03 .3489600000D+00 .2209000000D-02 .1530700000D+01 -.4077959000D+01 -.2372900000D+01 -.5672500000D+01 -.5442000000D+00 +1 2920030125200303212452664.3 .4412400000D+01 .1894000000D-01 .1852227000D+03 .1601800000D+00 .5051000000D-02 .1711500000D+01 -.3295666000D+01 -.1744100000D+01 -.4839200000D+01 -.4796600000D+01 -.1388600000D+01 .4287000000D-01 .8431390000D+02 .6937000000D-01 .4540000000D-03 .7813000000D+00 -.4766421000D+01 -.4899300000D+01 -.5950400000D+01 -.5370000000D-01 .3146300000D+01 -.7893000000D-01 .1660729000D+03 .8554000000D-01 .2937000000D-02 .1502900000D+01 -.1742913000D+01 -.5327600000D+01 -.3148300000D+01 -.3314600000D+01 +1 3020030321200305152452719.3 .5284200000D+01 -.5551000000D-01 .1857360000D+03 .3155900000D+00 .1884000000D-02 .1637800000D+01 -.1068129000D+01 -.2826400000D+01 -.2354100000D+01 -.1391500000D+01 .1098400000D+01 .2737000000D-01 .8862150000D+02 .1411800000D+00 .1131000000D-02 .8209000000D+00 -.2524451000D+01 -.3554200000D+01 -.5929100000D+01 -.2886200000D+01 -.1365900000D+01 -.5356000000D-01 .1635209000D+03 .4071400000D+00 .7030000000D-03 .1508200000D+01 -.5804137000D+01 -.1127400000D+01 -.1956800000D+01 -.6202700000D+01 +1 3120030515200307092452774.3 .2120100000D+01 -.7701000000D-01 .1852223000D+03 .5307300000D+00 .8210000000D-03 .1669100000D+01 -.5212659000D+01 -.6075000000D+00 -.3816000000D+01 -.4282900000D+01 .2600600000D+01 -.9060000000D-02 .8952730000D+02 .1648300000D+00 .1515000000D-02 .7900000000D+00 -.3270450000D+00 -.2000400000D+01 -.3874700000D+01 -.5644200000D+01 -.4319800000D+01 -.7480000000D-02 .1627277000D+03 .5754700000D+00 .2084000000D-02 .1480000000D+01 -.3687276000D+01 -.5110900000D+01 -.1402200000D+01 -.2788300000D+01 +1 3220030709200309022452829.3 -.2264100000D+01 -.5386000000D-01 .1845027000D+03 .4968700000D+00 .2586000000D-02 .1737400000D+01 -.3098141000D+01 -.4749000000D+01 -.1640900000D+01 -.8611000000D+00 .2017300000D+01 -.3408000000D-01 .8478480000D+02 .1680800000D+00 .6980000000D-03 .7341000000D+00 -.4435577000D+01 -.3259000000D+00 -.1350500000D+01 -.2165600000D+01 -.4719200000D+01 .5214000000D-01 .1652683000D+03 .4056300000D+00 .2014000000D-02 .1521800000D+01 -.1588266000D+01 -.2800500000D+01 -.5353600000D+01 -.5656600000D+01 +1 3320030902200310272452884.3 -.5275500000D+01 .1103000000D-01 .1845605000D+03 .2303900000D+00 .3000000000D-02 .1678300000D+01 -.9453240000D+00 -.2574400000D+01 -.5774300000D+01 -.3634300000D+01 .9510000000D-01 -.3041000000D-01 .7798810000D+02 .1434400000D+00 .9210000000D-03 .6954000000D+00 -.2270243000D+01 -.4577900000D+01 -.2004700000D+01 -.4946600000D+01 -.1713400000D+01 .7781000000D-01 .1690703000D+03 .1254700000D+00 .1607000000D-02 .1553300000D+01 -.5713010000D+01 -.4524000000D+00 -.3657600000D+01 -.2094000000D+01 +1 3420031027200312212452939.3 -.4666900000D+01 .8640000000D-01 .1852435000D+03 .7887000000D-01 .2832000000D-02 .1725400000D+01 -.4987343000D+01 -.3178400000D+01 -.3469900000D+01 -.2580000000D-01 -.1634600000D+01 -.1378000000D-01 .7547530000D+02 .3537000000D-01 .1013000000D-02 .7315000000D+00 -.7571300000D-01 -.3233000000D+00 -.5767300000D+01 -.1398700000D+01 .2792600000D+01 .4350000000D-01 .1702875000D+03 .2212900000D+00 .2350000000D-03 .1582800000D+01 -.3462091000D+01 -.1758800000D+01 -.1001700000D+01 -.4750800000D+01 +1 3520031221200402142452994.3 .4246000000D+00 .8041000000D-01 .1852238000D+03 .2578000000D+00 .1136000000D-02 .1699000000D+01 -.2658782000D+01 -.1116800000D+01 -.4629100000D+01 -.2680500000D+01 -.2402100000D+01 .2627000000D-01 .7972320000D+02 .1441400000D+00 .2810000000D-03 .7562000000D+00 -.4082585000D+01 -.3406100000D+01 -.5848200000D+01 -.4120400000D+01 .5145100000D+01 -.4673000000D-01 .1684895000D+03 .3245200000D+00 .2528000000D-02 .1502500000D+01 -.1127975000D+01 -.5506900000D+01 -.2359900000D+01 -.1152000000D+01 +1 3620040214200404092453049.3 .4923500000D+01 .3500000000D-02 .1846860000D+03 .6968000000D-01 .2314000000D-02 .1657700000D+01 -.3382180000D+00 -.1328800000D+01 -.2408300000D+01 -.5400200000D+01 -.8610000000D+00 .4385000000D-01 .8555790000D+02 .1128400000D+00 .1491000000D-02 .8152000000D+00 -.1775909000D+01 -.1300000000D+01 -.4003900000D+01 -.5567000000D+00 .2416800000D+01 -.7845000000D-01 .1651453000D+03 .5430000000D-01 .3523000000D-02 .1515300000D+01 -.5094322000D+01 -.2146200000D+01 -.2055000000D+00 -.3883700000D+01 +1 3720040409200406032453104.3 .4989600000D+01 -.6625000000D-01 .1835420000D+03 .3720200000D+00 .2977000000D-02 .1649500000D+01 -.4411923000D+01 -.5733400000D+01 -.6212000000D+00 -.1994300000D+01 .1657900000D+01 .1645000000D-01 .8826410000D+02 .5206000000D-01 .1206000000D-02 .8176000000D+00 -.5808739000D+01 -.1469500000D+01 -.1865700000D+01 -.3372700000D+01 -.2036600000D+01 -.4859000000D-01 .1643097000D+03 .3539400000D+00 .1429000000D-02 .1525100000D+01 -.2895459000D+01 -.4490500000D+01 -.4103900000D+01 -.4893000000D+00 +1 3820040603200407282453159.3 .1224600000D+01 -.7446000000D-01 .1833413000D+03 .4630000000D+00 .1361000000D-02 .1669300000D+01 -.2288215000D+01 -.3772100000D+01 -.4933400000D+01 -.4858700000D+01 .2509600000D+01 -.1852000000D-01 .8489610000D+02 .1902700000D+00 .4350000000D-03 .7211000000D+00 -.3611874000D+01 -.6098900000D+01 -.5729700000D+01 -.6182800000D+01 -.4721200000D+01 .4700000000D-02 .1671150000D+03 .4631400000D+00 .6660000000D-03 .1498600000D+01 -.7769530000D+00 -.2269000000D+01 -.5773100000D+01 -.3383800000D+01 +1 3920040728200409212453214.3 -.3031300000D+01 -.4456000000D-01 .1838893000D+03 .3815800000D+00 .9950000000D-03 .1703400000D+01 -.1744740000D+00 -.1741200000D+01 -.4941000000D+01 -.1413200000D+01 .1437900000D+01 -.3101000000D-01 .7649810000D+02 .2770000000D+00 .1353000000D-02 .6562000000D+00 -.1449299000D+01 -.3909800000D+01 -.1001900000D+01 -.2753400000D+01 -.4471100000D+01 .6211000000D-01 .1715408000D+03 .4283700000D+00 .3056000000D-02 .1596300000D+01 -.4935660000D+01 -.1673000000D+00 -.3370700000D+01 -.6239200000D+01 +1 4020040921200411152453269.3 -.5516000000D+01 .2701000000D-01 .1847313000D+03 .1947400000D+00 .3118000000D-02 .1672000000D+01 -.4292812000D+01 -.5965200000D+01 -.2882900000D+01 -.4202500000D+01 -.2922000000D+00 -.2493000000D-01 .6889680000D+02 .1923800000D+00 .2272000000D-02 .6182000000D+00 -.5584681000D+01 -.1372400000D+01 -.4774200000D+01 -.5553600000D+01 -.8607000000D+00 .7724000000D-01 .1736249000D+03 .2141000000D+00 .3806000000D-02 .1596700000D+01 -.2756642000D+01 -.4227100000D+01 -.9951000000D+00 -.2684600000D+01 +1 4120041115200501092453324.3 -.3923800000D+01 .9111000000D-01 .1847378000D+03 .1962700000D+00 .9090000000D-03 .1794000000D+01 -.2042346000D+01 -.4451000000D+00 -.5081000000D+00 -.6008000000D+00 -.1757900000D+01 -.6600000000D-02 .6867970000D+02 .1035600000D+00 .1708000000D-02 .6480000000D+00 -.3387705000D+01 -.3704300000D+01 -.2064400000D+01 -.1917600000D+01 .3616800000D+01 .2777000000D-01 .1727260000D+03 .9242000000D-01 .2359000000D-02 .1554200000D+01 -.4993550000D+00 -.5167400000D+01 -.4686600000D+01 -.5280700000D+01 +1 4220050109200503052453379.3 .1437900000D+01 .6980000000D-01 .1849364000D+03 .3599100000D+00 .3418000000D-02 .1777900000D+01 -.5996861000D+01 -.4300600000D+01 -.1065500000D+01 -.3277800000D+01 -.2113500000D+01 .3210000000D-01 .7534900000D+02 .2149900000D+00 .1332000000D-02 .7024000000D+00 -.1087400000D+01 -.4846000000D+00 -.3842700000D+01 -.4615600000D+01 .5071800000D+01 -.5804000000D-01 .1694488000D+03 .2712800000D+00 .3103000000D-02 .1506600000D+01 -.4458494000D+01 -.2858000000D+01 -.6270900000D+01 -.1702600000D+01 +1 4320050305200504292453434.3 .5268700000D+01 -.1278000000D-01 .1850473000D+03 .6332000000D-01 .4251000000D-02 .1619400000D+01 -.3687516000D+01 -.1143300000D+01 -.5065900000D+01 -.5985900000D+01 -.1905000000D+00 .3768000000D-01 .8157290000D+02 .9264000000D-01 .1924000000D-02 .7496000000D+00 -.5046789000D+01 -.4368800000D+01 -.1231900000D+01 -.1057400000D+01 .1639100000D+01 -.7727000000D-01 .1670233000D+03 .3976000000D-01 .3538000000D-02 .1543400000D+01 -.2162645000D+01 -.3085600000D+01 -.3782800000D+01 -.4477200000D+01 +1 4420050429200506232453489.3 .4438200000D+01 -.7140000000D-01 .1850935000D+03 .4375100000D+00 .9870000000D-03 .1626900000D+01 -.1483407000D+01 -.3274000000D+01 -.1791300000D+01 -.2615500000D+01 .1960200000D+01 .3860000000D-02 .8101350000D+02 .9621000000D-01 .1554000000D-02 .7422000000D+00 -.2789291000D+01 -.5170600000D+01 -.5507600000D+01 -.3841600000D+01 -.2771400000D+01 -.4278000000D-01 .1681356000D+03 .3467200000D+00 .1670000000D-02 .1602000000D+01 -.6256458000D+01 -.1292200000D+01 -.1919900000D+01 -.1053900000D+01 +1 4520050623200508172453544.3 .3530000000D+00 -.7161000000D-01 .1843732000D+03 .6099500000D+00 .2619000000D-02 .1646100000D+01 -.5637495000D+01 -.9779000000D+00 -.3992900000D+01 -.5504300000D+01 .2071400000D+01 -.2172000000D-01 .7316030000D+02 .2419500000D+00 .1320000000D-03 .6142000000D+00 -.6026650000D+00 -.3121500000D+01 -.3330100000D+01 -.3907000000D+00 -.5093200000D+01 .1878000000D-01 .1722996000D+03 .4464000000D+00 .9480000000D-03 .1571400000D+01 -.4128190000D+01 -.5530000000D+01 -.1968700000D+01 -.3946200000D+01 +1 4620050817200510112453599.3 -.3714600000D+01 -.3432000000D-01 .1839011000D+03 .5012600000D+00 .3869000000D-02 .1678100000D+01 -.3516299000D+01 -.5004700000D+01 -.1667900000D+01 -.2001300000D+01 .8403000000D+00 -.2511000000D-01 .6247930000D+02 .2324600000D+00 .1068000000D-02 .5356000000D+00 -.4751957000D+01 -.8587000000D+00 -.4365000000D+01 -.3270000000D+01 -.4009500000D+01 .7144000000D-01 .1758906000D+03 .3114600000D+00 .1381000000D-02 .1666500000D+01 -.1992873000D+01 -.3423800000D+01 -.1541000000D+00 -.4980000000D+00 +1 4720051011200512052453654.3 -.5621100000D+01 .4323000000D-01 .1839450000D+03 .1530100000D+00 .2728000000D-02 .1676800000D+01 -.1345411000D+01 -.2441400000D+01 -.5602400000D+01 -.4767300000D+01 -.5702000000D+00 -.1913000000D-01 .5661130000D+02 .8643000000D-01 .1684000000D-02 .5314000000D+00 -.2625635000D+01 -.4541600000D+01 -.2106900000D+01 -.6081800000D+01 .1314000000D+00 .7393000000D-01 .1775891000D+03 .8326000000D-01 .1759000000D-02 .1666700000D+01 -.6090542000D+01 -.1681000000D+01 -.4648800000D+01 -.3242300000D+01 +1 4820051205200601292453709.3 -.3107200000D+01 .9502000000D-01 .1844060000D+03 .2106500000D+00 .9830000000D-03 .1696200000D+01 -.5367998000D+01 -.3954200000D+01 -.2845800000D+01 -.1135500000D+01 -.1676500000D+01 .3300000000D-03 .5934510000D+02 .1436500000D+00 .6030000000D-03 .5870000000D+00 -.4001090000D+00 -.6122600000D+01 -.5971800000D+01 -.2414300000D+01 .4320900000D+01 .1265000000D-01 .1770434000D+03 .2392100000D+00 .8200000000D-03 .1607600000D+01 -.3827928000D+01 -.1859700000D+01 -.4118800000D+01 -.5869100000D+01 +1 4920060129200603252453764.3 .2444100000D+01 .5681000000D-01 .1842320000D+03 .2910800000D+00 .3270000000D-02 .1732100000D+01 -.3035991000D+01 -.1567700000D+01 -.4825600000D+01 -.3814400000D+01 -.1608700000D+01 .3542000000D-01 .6751540000D+02 .1805300000D+00 .8970000000D-03 .6453000000D+00 -.4344196000D+01 -.3507600000D+01 -.5213000000D+00 -.5108400000D+01 .4906700000D+01 -.7167000000D-01 .1749321000D+03 .2301800000D+00 .2600000000D-02 .1576100000D+01 -.1502977000D+01 -.5584800000D+01 -.2274200000D+01 -.2306900000D+01 +1 5020060325200605192453819.3 .5470300000D+01 -.2795000000D-01 .1836326000D+03 .9834000000D-01 .2867000000D-02 .1671700000D+01 -.7393700000D+00 -.2037100000D+01 -.2571100000D+01 -.3065000000D+00 .4623000000D+00 .2582000000D-01 .7220790000D+02 .2886000000D-01 .1378000000D-02 .6267000000D+00 -.2006255000D+01 -.8810000000D-01 -.4684200000D+01 -.1556300000D+01 .7870000000D+00 -.7721000000D-01 .1731795000D+03 .1699200000D+00 .1312000000D-02 .1531800000D+01 -.5498553000D+01 -.9275000000D+00 -.1764000000D+00 -.5084100000D+01 +1 5120060519200607132453874.3 .3812800000D+01 -.7765000000D-01 .1829247000D+03 .3691500000D+00 .2116000000D-02 .1686500000D+01 -.4836331000D+01 -.6259800000D+01 -.7566000000D+00 -.3196100000D+01 .1874800000D+01 -.5910000000D-02 .6803190000D+02 .1958700000D+00 .5520000000D-03 .5915000000D+00 -.6035172000D+01 -.2415700000D+01 -.2833700000D+01 -.4327900000D+01 -.3577200000D+01 -.3299000000D-01 .1745809000D+03 .4516400000D+00 .1206000000D-02 .1601400000D+01 -.3309452000D+01 -.4715000000D+01 -.9146000000D+00 -.1628600000D+01 +1 5220060713200609062453929.3 -.6111000000D+00 -.6739000000D-01 .1838014000D+03 .4143300000D+00 .2610000000D-03 .1665300000D+01 -.2714038000D+01 -.4283400000D+01 -.4515600000D+01 -.6077200000D+01 .1463400000D+01 -.2075000000D-01 .5718650000D+02 .2670400000D+00 .5270000000D-03 .4880000000D+00 -.3864927000D+01 -.1341000000D+00 -.3074700000D+01 -.9172000000D+00 -.5369900000D+01 .3628000000D-01 .1775285000D+03 .4433000000D+00 .1873000000D-02 .1628800000D+01 -.1174318000D+01 -.2491200000D+01 -.4742300000D+01 -.4515900000D+01 +1 5320060906200610312453984.3 -.4399300000D+01 -.1927000000D-01 .1851729000D+03 .3096500000D+00 .1683000000D-02 .1647900000D+01 -.5814640000D+00 -.2322200000D+01 -.5953600000D+01 -.2577400000D+01 .3298000000D+00 -.1831000000D-01 .4686540000D+02 .1999100000D+00 .1534000000D-02 .4146000000D+00 -.1754418000D+01 -.4114600000D+01 -.1131500000D+01 -.3790200000D+01 -.3303900000D+01 .7776000000D-01 .1801017000D+03 .3286900000D+00 .2014000000D-02 .1701600000D+01 -.5313495000D+01 -.4290000000D+00 -.3247700000D+01 -.1032000000D+01 +1 5420061031200612252454039.3 -.5488200000D+01 .5911000000D-01 .1858670000D+03 .1585100000D+00 .3720000000D-02 .1683900000D+01 -.4672280000D+01 -.4524000000D+00 -.3423700000D+01 -.5346800000D+01 -.7111000000D+00 -.1257000000D-01 .4314970000D+02 .5258000000D-01 .1515000000D-02 .4179000000D+00 -.5891581000D+01 -.7977000000D+00 -.4998000000D+01 -.2917000000D+00 .1219600000D+01 .6735000000D-01 .1807433000D+03 .9634000000D-01 .2235000000D-02 .1707100000D+01 -.3119702000D+01 -.4396800000D+01 -.1212500000D+01 -.3771600000D+01 +1 5520061225200702182454094.3 -.2029900000D+01 .9311000000D-01 .1852317000D+03 .1718600000D+00 .1413000000D-02 .1723800000D+01 -.2398026000D+01 -.5791000000D+00 -.1049800000D+01 -.1676500000D+01 -.1461500000D+01 .9520000000D-02 .4699680000D+02 .1635700000D+00 .7700000000D-03 .4526000000D+00 -.3611311000D+01 -.3221700000D+01 -.1565500000D+01 -.2926800000D+01 .5043100000D+01 -.8440000000D-02 .1798819000D+03 .1572100000D+00 .8800000000D-03 .1603600000D+01 -.8511410000D+00 -.5559900000D+01 -.4706300000D+01 -.1593000000D+00 +1 5620070218200704142454149.3 .3367300000D+01 .4073000000D-01 .1844689000D+03 .1831700000D+00 .1942000000D-02 .1764100000D+01 -.6881300000D-01 -.4588300000D+01 -.1490100000D+01 -.4341200000D+01 -.8639000000D+00 .3041000000D-01 .5431220000D+02 .1880500000D+00 .2113000000D-02 .5049000000D+00 -.1251951000D+01 -.6078000000D+00 -.4008800000D+01 -.5568000000D+01 .4446100000D+01 -.8203000000D-01 .1777804000D+03 .2386900000D+00 .3615000000D-02 .1630400000D+01 -.4817990000D+01 -.3360300000D+01 -.2260000000D+00 -.2883900000D+01 +1 5720070414200706082454204.3 .5522600000D+01 -.4444000000D-01 .1836714000D+03 .1354300000D+00 .2542000000D-02 .1656200000D+01 -.4071305000D+01 -.5508400000D+01 -.5866400000D+01 -.8964000000D+00 .9108000000D+00 .1136000000D-01 .5680950000D+02 .6183000000D-01 .1951000000D-02 .4828000000D+00 -.5208716000D+01 -.2965600000D+01 -.1372100000D+01 -.1983600000D+01 -.3291000000D+00 -.7259000000D-01 .1778173000D+03 .4974000000D-01 .3828000000D-02 .1611900000D+01 -.2546580000D+01 -.3191500000D+01 -.4096300000D+01 -.5648100000D+01 +1 5820070608200708022454259.3 .2965000000D+01 -.7940000000D-01 .1838776000D+03 .4387700000D+00 .7040000000D-03 .1705500000D+01 -.1890112000D+01 -.3426100000D+01 -.4955600000D+01 -.3775100000D+01 .1489000000D+01 -.1224000000D-01 .5024180000D+02 .2028300000D+00 .5890000000D-03 .4005000000D+00 -.2968050000D+01 -.5870200000D+01 -.4892400000D+01 -.4741500000D+01 -.4401500000D+01 -.1730000000D-01 .1805804000D+03 .2727400000D+00 .2024000000D-02 .1613000000D+01 -.3589070000D+00 -.1889700000D+01 -.1740900000D+01 -.2177700000D+01 +1 5920070802200709262454314.3 -.1618200000D+01 -.6028000000D-01 .1842606000D+03 .4945700000D+00 .1944000000D-02 .1739400000D+01 -.6042218000D+01 -.1247600000D+01 -.3874300000D+01 -.3593000000D+00 .7671000000D+00 -.1495000000D-01 .3907540000D+02 .2405500000D+00 .1150000000D-02 .3027000000D+00 -.8156940000D+00 -.3532100000D+01 -.5291000000D+00 -.1368700000D+01 -.5295900000D+01 .5155000000D-01 .1834645000D+03 .4343200000D+00 .1734000000D-02 .1620100000D+01 -.4494973000D+01 -.6205600000D+01 -.3558600000D+01 -.5090700000D+01 +1 6020070926200711202454369.3 -.4984700000D+01 -.2680000000D-02 .1844003000D+03 .3677700000D+00 .2966000000D-02 .1682800000D+01 -.3900326000D+01 -.5339200000D+01 -.1975500000D+01 -.3150300000D+01 -.5050000000D-01 -.1131000000D-01 .3062970000D+02 .1219400000D+00 .1513000000D-02 .2705000000D+00 -.4984618000D+01 -.1252800000D+01 -.4382400000D+01 -.4216800000D+01 -.2351800000D+01 .8078000000D-01 .1841922000D+03 .3653700000D+00 .3173000000D-02 .1676300000D+01 -.2340715000D+01 -.4025300000D+01 -.9426000000D+00 -.1581800000D+01 +1 6120071120200801142454424.3 -.5095600000D+01 .7239000000D-01 .1840944000D+03 .5689000000D-01 .1660000000D-02 .1707300000D+01 -.1704135000D+01 -.1837900000D+01 -.5785700000D+01 -.5904900000D+01 -.7142000000D+00 -.3700000000D-02 .2878850000D+02 .4187000000D-01 .9850000000D-03 .3025000000D+00 -.2769064000D+01 -.1920100000D+01 -.2297600000D+01 -.6095000000D+00 .2324700000D+01 .5631000000D-01 .1839634000D+03 .1165300000D+00 .3190000000D-02 .1758100000D+01 -.1397610000D+00 -.1847200000D+01 -.4856600000D+01 -.4278000000D+01 +1 6220080114200803092454479.3 -.8458000000D+00 .8876000000D-01 .1841790000D+03 .3061700000D+00 .1525000000D-02 .1678300000D+01 -.5709010000D+01 -.4140000000D+01 -.1073100000D+01 -.2269100000D+01 -.9226000000D+00 .1297000000D-01 .3302350000D+02 .1497800000D+00 .3170000000D-03 .3266000000D+00 -.4198710000D+00 -.6115900000D+01 -.2971900000D+01 -.3181600000D+01 .5462300000D+01 -.2818000000D-01 .1835421000D+03 .2124100000D+00 .2510000000D-03 .1671500000D+01 -.4148040000D+01 -.2495900000D+01 -.5941500000D+01 -.6734000000D+00 +1 6320080309200805032454534.3 .4211200000D+01 .2290000000D-01 .1841574000D+03 .2739000000D+00 .4469000000D-02 .1694500000D+01 -.3383761000D+01 -.1736000000D+01 -.4831600000D+01 -.4904400000D+01 -.1234000000D+00 .1962000000D-01 .3924130000D+02 .9203000000D-01 .1275000000D-02 .3580000000D+00 -.4341083000D+01 -.3543200000D+01 -.8082000000D+00 -.5863200000D+01 .3722100000D+01 -.9070000000D-01 .1831616000D+03 .1323800000D+00 .1929000000D-02 .1683600000D+01 -.1827923000D+01 -.6272100000D+01 -.3108900000D+01 -.3401900000D+01 +1 6420080503200806272454589.3 .5303000000D+01 -.5831000000D-01 .1845318000D+03 .1592900000D+00 .2467000000D-02 .1632800000D+01 -.1113391000D+01 -.3034400000D+01 -.2271100000D+01 -.1450800000D+01 .9897000000D+00 -.1730000000D-02 .3932290000D+02 .1039700000D+00 .8610000000D-03 .3264000000D+00 -.2024807000D+01 -.5066400000D+01 -.5115500000D+01 -.2408700000D+01 -.1512300000D+01 -.6435000000D-01 .1829863000D+03 .2153000000D+00 .1218000000D-02 .1701600000D+01 -.5840914000D+01 -.9297000000D+00 -.1812400000D+01 -.6230900000D+01 +1 6520080627200808212454644.3 .1964600000D+01 -.8032000000D-01 .1848628000D+03 .4240900000D+00 .2470000000D-03 .1671000000D+01 -.5217785000D+01 -.5723000000D+00 -.4404000000D+01 -.4316000000D+01 .8296000000D+00 -.1120000000D-01 .3116050000D+02 .2066700000D+00 .4540000000D-03 .2415000000D+00 -.6069013000D+01 -.2662900000D+01 -.5054300000D+01 -.5149600000D+01 -.5059800000D+01 .4000000000D-03 .1834563000D+03 .4481700000D+00 .1814000000D-02 .1658200000D+01 -.3656847000D+01 -.5054700000D+01 -.8614000000D+00 -.2771300000D+01 +1 6620080821200810152454699.3 -.2609900000D+01 -.5048000000D-01 .1852442000D+03 .4631000000D+00 .1842000000D-02 .1747300000D+01 -.3081710000D+01 -.4709700000D+01 -.1546600000D+01 -.8960000000D+00 .1906000000D+00 -.8460000000D-02 .2109690000D+02 .1574500000D+00 .1095000000D-02 .1675000000D+00 -.3895363000D+01 -.4835000000D+00 -.3260500000D+01 -.1621800000D+01 -.4964600000D+01 .6577000000D-01 .1837714000D+03 .3930100000D+00 .1824000000D-02 .1671000000D+01 -.1518810000D+01 -.2847100000D+01 -.4782100000D+01 -.5636600000D+01 +1 6720081015200812092454754.3 -.5407200000D+01 .1685000000D-01 .1853708000D+03 .2903500000D+00 .2303000000D-02 .1686000000D+01 -.9304920000D+00 -.2563600000D+01 -.5707600000D+01 -.3699400000D+01 -.2710000000D+00 -.3740000000D-02 .1547960000D+02 .4972000000D-01 .8870000000D-03 .1351000000D+00 -.1659056000D+01 -.5463900000D+01 -.1275100000D+01 -.4332000000D+01 -.1195600000D+01 .8024000000D-01 .1846874000D+03 .2135600000D+00 .8610000000D-03 .1681900000D+01 -.5650950000D+01 -.7997000000D+00 -.3684200000D+01 -.2114400000D+01 +1 6820081209200902022454809.3 -.4463500000D+01 .8353000000D-01 .1854164000D+03 .7545000000D-01 .3139000000D-02 .1726100000D+01 -.5000894000D+01 -.6825000000D+00 -.3499900000D+01 -.1297000000D+00 -.4883000000D+00 .4170000000D-02 .1599870000D+02 .8529000000D-01 .3010000000D-03 .1696000000D+00 -.5513484000D+01 -.4840900000D+01 -.6259900000D+01 -.6184000000D+00 .3410400000D+01 .4103000000D-01 .1853983000D+03 .5711000000D-01 .8780000000D-03 .1725700000D+01 -.3439643000D+01 -.1671100000D+01 -.2307700000D+01 -.4806600000D+01 +1 6920090202200903292454864.3 .4407000000D+00 .7932000000D-01 .1846789000D+03 .1721700000D+00 .7380000000D-03 .1694500000D+01 -.2710116000D+01 -.1162300000D+01 -.4640000000D+00 -.2786700000D+01 -.2356000000D+00 .1133000000D-01 .2040490000D+02 .1032900000D+00 .6340000000D-03 .2123000000D+00 -.3137249000D+01 -.3091400000D+01 -.6273100000D+01 -.3294900000D+01 .5668200000D+01 -.5240000000D-01 .1857951000D+03 .2355900000D+00 .8710000000D-03 .1680100000D+01 -.1149699000D+01 -.5648300000D+01 -.1671500000D+01 -.1229900000D+01 +1 7020090329200905232454919.3 .4917100000D+01 .2310000000D-02 .1839081000D+03 .7288000000D-01 .1728000000D-02 .1651600000D+01 -.3886410000D+00 -.5614400000D+01 -.2442200000D+01 -.5462200000D+01 .4322000000D+00 .4820000000D-02 .2408980000D+02 .3529000000D-01 .1336000000D-02 .2115000000D+00 -.8643860000D+00 -.9146000000D+00 -.4181700000D+01 -.5929700000D+01 .2591800000D+01 -.9273000000D-01 .1852861000D+03 .1572600000D+00 .2920000000D-02 .1730100000D+01 -.5113821000D+01 -.3430600000D+01 -.2637000000D+00 -.3923800000D+01 +1 7120090523200907172454974.3 .4912000000D+01 -.7245000000D-01 .1833159000D+03 .2144500000D+00 .3069000000D-02 .1653900000D+01 -.4418117000D+01 -.5452500000D+01 -.4235000000D+00 -.2022100000D+01 .6693000000D+00 -.8670000000D-02 .2214550000D+02 .1081000000D+00 .4710000000D-03 .1646000000D+00 -.4860743000D+01 -.1977000000D+01 -.1768600000D+01 -.2311700000D+01 -.2728500000D+01 -.5007000000D-01 .1854539000D+03 .1554600000D+00 .2277000000D-02 .1740200000D+01 -.2856523000D+01 -.4607500000D+01 -.4235000000D+01 -.4609000000D+00 +1 7220090717200909102455029.3 .7635000000D+00 -.7652000000D-01 .1841642000D+03 .3445000000D+00 .1890000000D-02 .1680600000D+01 -.2249586000D+01 -.3642500000D+01 -.4535500000D+01 -.4863400000D+01 .1517000000D+00 -.7410000000D-02 .1517680000D+02 .1542700000D+00 .7790000000D-03 .1072000000D+00 -.2492855000D+01 -.6009700000D+01 -.2452200000D+01 -.4884900000D+01 -.5450500000D+01 .2074000000D-01 .1859494000D+03 .3675100000D+00 .6050000000D-03 .1645900000D+01 -.6789880000D+00 -.2351000000D+01 -.1778900000D+01 -.3319000000D+01 +1 7320090910200911042455084.3 -.3601600000D+01 -.3610000000D-01 .1851007000D+03 .3449900000D+00 .2150000000D-03 .1717700000D+01 -.1111840000D+00 -.1663900000D+01 -.3605000000D+01 -.1411000000D+01 -.2445000000D+00 -.1290000000D-02 .1016060000D+02 .8143000000D-01 .9640000000D-03 .1064000000D+00 -.6191887000D+01 -.4319500000D+01 -.1793000000D+00 -.1038300000D+01 -.4259700000D+01 .7459000000D-01 .1863092000D+03 .4657400000D+00 .2469000000D-02 .1702300000D+01 -.4817576000D+01 -.2411000000D+00 -.3491200000D+01 -.6188600000D+01 +1 7420091104200912292455139.3 -.5568800000D+01 .3581000000D-01 .1855354000D+03 .2579300000D+00 .2431000000D-02 .1671000000D+01 -.4233075000D+01 -.5947600000D+01 -.2900000000D+01 -.4223900000D+01 -.3204000000D+00 .5180000000D-02 .1207030000D+02 .1023100000D+00 .2030000000D-03 .1445000000D+00 -.3633412000D+01 -.3418500000D+01 -.5000300000D+01 -.3651000000D+01 .4020000000D-01 .7503000000D-01 .1856742000D+03 .3338000000D+00 .3799000000D-02 .1704700000D+01 -.2653769000D+01 -.4256200000D+01 -.1043100000D+01 -.2677700000D+01 +1 7520091229201002222455194.3 -.3497700000D+01 .8940000000D-01 .1849629000D+03 .4735000000D-01 .1574000000D-02 .1771900000D+01 -.2011773000D+01 -.8960000000D-01 -.5892000000D+00 -.6486000000D+00 -.1450000000D-01 .9110000000D-02 .1757880000D+02 .1081900000D+00 .8570000000D-03 .1837000000D+00 -.1338428000D+01 -.1358200000D+01 -.4260400000D+01 -.3460000000D-01 .4360600000D+01 .1991000000D-01 .1848587000D+03 .5898000000D-01 .3255000000D-02 .1677600000D+01 -.4306020000D+00 -.1423400000D+01 -.4886600000D+01 -.5310600000D+01 +1 7620100222201004182455249.3 .1732900000D+01 .6590000000D-01 .1847985000D+03 .2888600000D+00 .1722000000D-02 .1787200000D+01 -.6000239000D+01 -.4278600000D+01 -.8344000000D+00 -.3333800000D+01 .5126000000D+00 .1640000000D-02 .2101610000D+02 .2447000000D-01 .5360000000D-03 .1890000000D+00 -.5393475000D+01 -.6079700000D+01 -.2366400000D+01 -.2747200000D+01 .5384700000D+01 -.6977000000D-01 .1843645000D+03 .2646600000D+00 .1891000000D-02 .1652700000D+01 -.4418952000D+01 -.3109700000D+01 -.4541000000D+00 -.1720200000D+01 +1 7720100418201006122455304.3 .5367700000D+01 -.1926000000D-01 .1851303000D+03 .1719600000D+00 .3809000000D-02 .1644000000D+01 -.3683584000D+01 -.1866000000D+01 -.4992200000D+01 -.6006900000D+01 .5957000000D+00 -.8540000000D-02 .2047170000D+02 .4445000000D-01 .4700000000D-03 .1727000000D+00 -.3163995000D+01 -.3807000000D+00 -.1253800000D+01 -.5440900000D+01 .1257000000D+01 -.8837000000D-01 .1846925000D+03 .1407300000D+00 .3503000000D-02 .1692100000D+01 -.2105103000D+01 -.8105000000D+00 -.3857900000D+01 -.4440700000D+01 +1 7820100612201008062455359.3 .4144100000D+01 -.8051000000D-01 .1860118000D+03 .2535400000D+00 .1528000000D-02 .1644400000D+01 -.1432915000D+01 -.3315500000D+01 -.2146700000D+01 -.2580400000D+01 .8750000000D-01 -.9940000000D-02 .1788840000D+02 .1060300000D+00 .5300000000D-03 .1583000000D+00 -.7829930000D+00 -.4904800000D+01 -.9975000000D+00 -.1758300000D+01 -.3782600000D+01 -.3297000000D-01 .1848198000D+03 .1895000000D+00 .2599000000D-02 .1755200000D+01 -.6141674000D+01 -.1215100000D+01 -.1794400000D+01 -.9658000000D+00 +1 7920100806201009302455414.3 -.4656000000D+00 -.6974000000D-01 .1859819000D+03 .4959200000D+00 .1712000000D-02 .1655900000D+01 -.5542252000D+01 -.8948000000D+00 -.3894500000D+01 -.5455000000D+01 -.4571000000D+00 -.7900000000D-03 .1681410000D+02 .7282000000D-01 .1013000000D-02 .1635000000D+00 -.4536917000D+01 -.3155400000D+01 -.5338600000D+01 -.4312100000D+01 -.5489400000D+01 .3819000000D-01 .1848202000D+03 .4040400000D+00 .4620000000D-03 .1674900000D+01 -.3973334000D+01 -.5548500000D+01 -.8753000000D+00 -.3839000000D+01 +1 8020100930201011242455469.3 -.4402700000D+01 -.2035000000D-01 .1852276000D+03 .4937400000D+00 .3192000000D-02 .1686700000D+01 -.3400701000D+01 -.4933600000D+01 -.1533200000D+01 -.1954800000D+01 -.5125000000D+00 .6840000000D-02 .1971870000D+02 .9246000000D-01 .6810000000D-03 .2118000000D+00 -.2190134000D+01 -.2415000000D+01 -.3045600000D+01 -.7561000000D+00 -.3296000000D+01 .8006000000D-01 .1843055000D+03 .3591300000D+00 .1035000000D-02 .1718700000D+01 -.1833585000D+01 -.3403600000D+01 -.6187900000D+01 -.4127000000D+00 +1 8120101124201101182455524.3 -.5492600000D+01 .5413000000D-01 .1845460000D+03 .2362400000D+00 .2519000000D-02 .1685700000D+01 -.1238602000D+01 -.2549600000D+01 -.5453000000D+01 -.4743800000D+01 -.1205000000D+00 .1328000000D-01 .2608990000D+02 .1512200000D+00 .4470000000D-03 .2665000000D+00 -.3229300000D-01 -.3751000000D+00 -.3898400000D+01 -.3555700000D+01 .1302900000D+01 .6526000000D-01 .1839355000D+03 .1645300000D+00 .1682000000D-02 .1718100000D+01 -.5949554000D+01 -.1505900000D+01 -.4754200000D+01 -.3191200000D+01 +2 8219990101199904112451179.4 -.5897000000D+00 .4230000000D-02 .2377127000D+03 .3120800000D+00 .2146000000D-02 .6393000000D+00 -.6194130000D+01 -.1367200000D+01 -.1887500000D+01 -.2897900000D+01 -.2819000000D+00 -.3170000000D-02 .5863660000D+02 .6944000000D-01 .9090000000D-03 .1605000000D+00 -.1602809000D+01 -.2228300000D+01 -.2313600000D+01 -.4379100000D+01 .1573100000D+01 .2090000000D-02 .2310089000D+03 .2972800000D+00 .2109000000D-02 .6277000000D+00 -.4615945000D+01 -.6205400000D+01 -.3012000000D+00 -.1332000000D+01 +2 8319990411199907202451279.4 .3390000000D-01 .4770000000D-02 .2383179000D+03 .6873800000D+00 .1744000000D-02 .6198000000D+00 -.1935860000D+00 -.1792900000D+01 -.4671000000D+01 -.3933000000D+01 -.5449000000D+00 -.7100000000D-03 .7148470000D+02 .2410800000D+00 .6560000000D-03 .2046000000D+00 -.1810839000D+01 -.2500400000D+01 -.5288900000D+01 -.5410500000D+01 .1798500000D+01 -.3350000000D-02 .2276100000D+03 .6931000000D+00 .1870000000D-02 .5915000000D+00 -.4900040000D+01 -.3284000000D+00 -.3270800000D+01 -.2354400000D+01 +2 8419990720199910282451379.4 .5646000000D+00 .1042000000D-01 .2382643000D+03 .2661300000D+00 .2972000000D-02 .5788000000D+00 -.4837670000D+00 -.2093600000D+01 -.5237500000D+01 -.4889100000D+01 -.5844000000D+00 .2630000000D-02 .8481150000D+02 .8452000000D-01 .1093000000D-02 .2084000000D+00 -.2037945000D+01 -.2881200000D+01 -.5870400000D+01 -.1207000000D+00 .1473600000D+01 -.4770000000D-02 .2226699000D+03 .2502000000D+00 .2810000000D-02 .5150000000D+00 -.5199179000D+01 -.5851000000D+00 -.3749900000D+01 -.3305400000D+01 +2 8519991028200002052451479.4 .1425400000D+01 .4620000000D-02 .2382186000D+03 .3331300000D+00 .3386000000D-02 .5614000000D+00 -.5492330000D+00 -.5234400000D+01 -.2089100000D+01 -.5662200000D+01 -.3208000000D+00 .4030000000D-02 .8239300000D+02 .1395500000D+00 .1228000000D-02 .2117000000D+00 -.2106823000D+01 -.5743200000D+01 -.2876600000D+01 -.8799000000D+00 .7104000000D+00 -.7980000000D-02 .2235922000D+03 .3551900000D+00 .3531000000D-02 .5297000000D+00 -.5264804000D+01 -.3797700000D+01 -.6250000000D+00 -.4099800000D+01 +2 8620000205200005152451579.4 .1891300000D+01 -.5610000000D-02 .2379930000D+03 .4597400000D+00 .1612000000D-02 .4714000000D+00 -.6239480000D+00 -.2139300000D+01 -.2846600000D+01 -.1858000000D+00 .5320000000D-01 .2440000000D-02 .7886920000D+02 .1599000000D+00 .5780000000D-03 .1794000000D+00 -.2202175000D+01 -.3080800000D+01 -.3661900000D+01 -.1878600000D+01 -.8000000000D-03 -.8690000000D-02 .2244418000D+03 .4708700000D+00 .1371000000D-02 .4678000000D+00 -.5333174000D+01 -.6488000000D+00 -.1461000000D+01 -.4832300000D+01 +2 8720000515200008232451679.4 .1520400000D+01 -.4790000000D-02 .2385051000D+03 .6951800000D+00 .2426000000D-02 .5256000000D+00 -.9393990000D+00 -.2562900000D+01 -.5595300000D+01 -.1221400000D+01 .2778000000D+00 .3800000000D-02 .9107500000D+02 .2604700000D+00 .1016000000D-02 .1986000000D+00 -.2468264000D+01 -.3528800000D+01 -.1823000000D+00 -.2733900000D+01 -.6096000000D+00 -.7670000000D-02 .2201325000D+03 .6763500000D+00 .2438000000D-02 .4553000000D+00 -.5658787000D+01 -.1053700000D+01 -.4069600000D+01 -.5904900000D+01 +2 8820000823200012012451779.4 .1096900000D+01 -.8860000000D-02 .2377975000D+03 .8542000000D-01 .2282000000D-02 .6330000000D+00 -.1203671000D+01 -.2573100000D+01 -.5836900000D+01 -.1899600000D+01 .7035000000D+00 -.3200000000D-03 .9856050000D+02 .1357000000D-01 .6610000000D-03 .2440000000D+00 -.2696920000D+01 -.4436100000D+01 -.5300000000D+00 -.3378600000D+01 -.1489400000D+01 .7100000000D-03 .2173214000D+03 .6401000000D-01 .2031000000D-02 .5828000000D+00 -.5932956000D+01 -.1427000000D+01 -.4485100000D+01 -.3450000000D+00 +2 8920001201200103112451879.4 -.4080000000D-01 -.1061000000D-01 .2379886000D+03 .2435500000D+00 .4027000000D-02 .5911000000D+00 -.1222606000D+01 -.5971100000D+01 -.2820100000D+01 -.2803800000D+01 .7054000000D+00 -.1670000000D-02 .9492190000D+02 .8772000000D-01 .1465000000D-02 .2344000000D+00 -.2729969000D+01 -.3316000000D+00 -.3780100000D+01 -.4293400000D+01 -.1652700000D+01 .3260000000D-02 .2185907000D+03 .2399800000D+00 .3828000000D-02 .5569000000D+00 -.5946891000D+01 -.4497400000D+01 -.1330900000D+01 -.1237800000D+01 +2 9020010311200106192451979.4 -.1078000000D+01 -.4610000000D-02 .2382768000D+03 .6178100000D+00 .8470000000D-03 .6221000000D+00 -.1357594000D+01 -.2945200000D+01 -.4148800000D+01 -.3895700000D+01 .4786000000D+00 -.7800000000D-03 .9567070000D+02 .2442600000D+00 .5100000000D-03 .2695000000D+00 -.2869856000D+01 -.4001500000D+01 -.5610100000D+01 -.5329200000D+01 -.1135100000D+01 .8600000000D-03 .2180410000D+03 .5919100000D+00 .9870000000D-03 .5646000000D+00 -.6081060000D+01 -.1414500000D+01 -.2782400000D+01 -.2336700000D+01 +2 9120010619200109272452079.4 -.1590300000D+01 -.9700000000D-03 .2382932000D+03 .6812000000D+00 .3189000000D-02 .6155000000D+00 -.1699732000D+01 -.3337300000D+01 -.1649000000D+00 -.4854000000D+01 .3415000000D+00 -.2800000000D-02 .1042240000D+03 .2512400000D+00 .1187000000D-02 .2688000000D+00 -.3172492000D+01 -.4569700000D+01 -.1308100000D+01 -.3640000000D-01 -.8728000000D+00 .5040000000D-02 .2147969000D+03 .6295900000D+00 .2871000000D-02 .5453000000D+00 -.1528860000D+00 -.1809500000D+01 -.4914500000D+01 -.3312800000D+01 +2 9220010927200201052452179.4 -.1551600000D+01 .0000000000D+00 .2377897000D+03 .1568500000D+00 .5070000000D-03 .4754000000D+00 -.1930996000D+01 -.4107000000D+00 -.1090000000D-01 -.5671700000D+01 .1299000000D+00 -.7620000000D-02 .1063437000D+03 .5532000000D-01 .1760000000D-03 .2185000000D+00 -.3373725000D+01 -.1330800000D+01 -.2116700000D+01 -.9291000000D+00 -.5254000000D+00 .1723000000D-01 .2139954000D+03 .1122800000D+00 .8420000000D-03 .4224000000D+00 -.3879330000D+00 -.4971200000D+01 -.5299300000D+01 -.4248400000D+01 +2 9320020105200204152452279.4 -.1464800000D+01 .6330000000D-02 .2377889000D+03 .5588000000D-01 .3865000000D-02 .5395000000D+00 -.1921822000D+01 -.6384000000D+00 -.3581400000D+01 -.3800000000D-02 -.5523000000D+00 -.1520000000D-02 .1041910000D+03 .9250000000D-02 .1453000000D-02 .2352000000D+00 -.3387681000D+01 -.2670500000D+01 -.4878400000D+01 -.1463900000D+01 .9940000000D+00 .2820000000D-02 .2140700000D+03 .7429000000D-01 .3730000000D-02 .4880000000D+00 -.3766820000D+00 -.5568100000D+01 -.2112900000D+01 -.4700400000D+01 +2 9420020415200207242452379.4 -.9238000000D+00 .8520000000D-02 .2377676000D+03 .7387800000D+00 .1141000000D-02 .5493000000D+00 -.2127153000D+01 -.3709300000D+01 -.5911000000D+01 -.1006600000D+01 -.8045000000D+00 .8500000000D-03 .1067085000D+03 .2884000000D+00 .6700000000D-03 .2393000000D+00 -.3587049000D+01 -.4984900000D+01 -.7413000000D+00 -.2433200000D+01 .1470900000D+01 -.7700000000D-03 .2134416000D+03 .6634300000D+00 .8460000000D-03 .4753000000D+00 -.5863930000D+00 -.2198000000D+01 -.4246100000D+01 -.5731600000D+01 +2 9520020724200211012452479.4 -.2872000000D+00 .1011000000D-01 .2375007000D+03 .6015300000D+00 .3641000000D-02 .5611000000D+00 -.2481810000D+01 -.4091200000D+01 -.9327000000D+00 -.2024100000D+01 -.7783000000D+00 .9000000000D-03 .1088270000D+03 .2296500000D+00 .1382000000D-02 .2622000000D+00 -.3901558000D+01 -.5625300000D+01 -.2453600000D+01 -.3459300000D+01 .1551000000D+01 -.7400000000D-03 .2129876000D+03 .5539400000D+00 .3343000000D-02 .5000000000D+00 -.9500570000D+00 -.2545200000D+01 -.5679600000D+01 -.5445000000D+00 +2 9620021101200302092452579.4 .1116700000D+01 .2430000000D-02 .2378824000D+03 .3429300000D+00 .1472000000D-02 .7192000000D+00 -.2661779000D+01 -.1004400000D+01 -.4099600000D+01 -.2794400000D+01 -.6469000000D+00 .2770000000D-02 .1074121000D+03 .1092900000D+00 .4450000000D-03 .3161000000D+00 -.4062053000D+01 -.2643800000D+01 -.5675600000D+01 -.4221000000D+01 .1447800000D+01 -.4160000000D-02 .2133420000D+03 .2786700000D+00 .9230000000D-03 .6484000000D+00 -.1130729000D+01 -.5830700000D+01 -.2849800000D+01 -.1238000000D+01 +2 9720030209200305202452679.4 .1397200000D+01 .4740000000D-02 .2370850000D+03 .1867000000D+00 .3040000000D-02 .5414000000D+00 -.2652901000D+01 -.4001900000D+01 -.4503400000D+01 -.3861000000D+01 -.2885000000D+00 .5400000000D-02 .1088614000D+03 .8781000000D-01 .1288000000D-02 .2614000000D+00 -.4080465000D+01 -.5261300000D+01 -.6009500000D+01 -.5264300000D+01 .7673000000D+00 -.9270000000D-02 .2123658000D+03 .1423700000D+00 .3014000000D-02 .4936000000D+00 -.1120276000D+01 -.2585800000D+01 -.2878200000D+01 -.2312200000D+01 +2 9820030520200308282452779.4 .1577600000D+01 .2090000000D-02 .2374669000D+03 .7825100000D+00 .1656000000D-02 .5585000000D+00 -.2921597000D+01 -.4513000000D+01 -.8478000000D+00 -.4898500000D+01 .2072000000D+00 .2060000000D-02 .1096362000D+03 .3189400000D+00 .8430000000D-03 .2364000000D+00 -.4331188000D+01 -.6030600000D+01 -.2317300000D+01 -.6273500000D+01 -.6460000000D-01 -.4520000000D-02 .2127277000D+03 .7203300000D+00 .1367000000D-02 .4928000000D+00 -.1392088000D+01 -.2981700000D+01 -.5778300000D+01 -.3364400000D+01 +2 9920030828200312062452879.4 .1689200000D+01 -.6820000000D-02 .2372871000D+03 .4587300000D+00 .3739000000D-02 .5312000000D+00 -.3264048000D+01 -.4889100000D+01 -.1749700000D+01 -.5712900000D+01 .4483000000D+00 .2200000000D-02 .1049102000D+03 .1751400000D+00 .1442000000D-02 .2287000000D+00 -.4633227000D+01 -.3479000000D+00 -.3516900000D+01 -.7805000000D+00 -.5337000000D+00 -.6710000000D-02 .2152442000D+03 .4211000000D+00 .3447000000D-02 .4928000000D+00 -.1740045000D+01 -.3263300000D+01 -.1168000000D+00 -.4184900000D+01 +2 10020031206200403152452979.4 .1301100000D+01 -.1733000000D-01 .2374834000D+03 .4023900000D+00 .2877000000D-02 .4394000000D+00 -.3377836000D+01 -.1715500000D+01 -.4827300000D+01 -.9830000000D-01 .6455000000D+00 .1520000000D-02 .1038779000D+03 .1640800000D+00 .1214000000D-02 .2295000000D+00 -.4742322000D+01 -.3610200000D+01 -.2691000000D+00 -.1417500000D+01 -.1146300000D+01 -.4480000000D-02 .2157715000D+03 .3890500000D+00 .2779000000D-02 .4349000000D+00 -.1856406000D+01 -.1682000000D+00 -.3361900000D+01 -.4849800000D+01 +2 10120040315200406232453079.4 -.3703000000D+00 -.2700000000D-02 .2366642000D+03 .3629100000D+00 .2413000000D-02 .6130000000D+00 -.3403248000D+01 -.4858400000D+01 -.5441600000D+01 -.9213000000D+00 .8020000000D+00 -.1950000000D-02 .1080047000D+03 .1673100000D+00 .9010000000D-03 .2785000000D+00 -.4785948000D+01 -.6190000000D-01 -.9887000000D+00 -.2300000000D+01 -.1641600000D+01 .1660000000D-02 .2134748000D+03 .3408000000D+00 .1960000000D-02 .5438000000D+00 -.1877807000D+01 -.3410600000D+01 -.3699600000D+01 -.5682600000D+01 +2 10220040623200410012453179.4 -.8634000000D+00 -.3440000000D-02 .2372394000D+03 .7603800000D+00 .2001000000D-02 .6011000000D+00 -.3715811000D+01 -.5335000000D+01 -.1952500000D+01 -.1998800000D+01 .6412000000D+00 -.4290000000D-02 .1035265000D+03 .3021800000D+00 .1004000000D-02 .2638000000D+00 -.5069149000D+01 -.7687000000D+00 -.3487100000D+01 -.3387300000D+01 -.1568300000D+01 .5500000000D-02 .2160982000D+03 .7155600000D+00 .2002000000D-02 .5404000000D+00 -.2191364000D+01 -.3719600000D+01 -.3817000000D+00 -.4840000000D+00 +2 10320041001200501092453279.4 -.1311300000D+01 -.6040000000D-02 .2366997000D+03 .2698300000D+00 .3277000000D-02 .6148000000D+00 -.4027109000D+01 -.5601800000D+01 -.2463300000D+01 -.3029700000D+01 .2412000000D+00 -.2970000000D-02 .9330000000D+02 .9857000000D-01 .1247000000D-02 .2333000000D+00 -.5334131000D+01 -.1389300000D+01 -.4621100000D+01 -.4390900000D+01 -.1017200000D+01 .6920000000D-02 .2208137000D+03 .2292600000D+00 .2788000000D-02 .5788000000D+00 -.2502044000D+01 -.3970300000D+01 -.8063000000D+00 -.1511900000D+01 +2 10420050109200504192453379.4 -.1765700000D+01 .2320000000D-02 .2366666000D+03 .3584600000D+00 .3863000000D-02 .6208000000D+00 -.4082286000D+01 -.2519000000D+01 -.5656800000D+01 -.3780200000D+01 -.2175000000D+00 -.2940000000D-02 .9555080000D+02 .1557000000D+00 .1550000000D-02 .2476000000D+00 -.5399933000D+01 -.4636400000D+01 -.1178700000D+01 -.5113600000D+01 -.5100000000D-02 .8030000000D-02 .2198732000D+03 .3407300000D+00 .3664000000D-02 .5705000000D+00 -.2558448000D+01 -.8024000000D+00 -.4008900000D+01 -.2204000000D+01 +2 10520050419200507282453479.4 -.1510800000D+01 .6920000000D-02 .2367919000D+03 .5261100000D+00 .1473000000D-02 .5064000000D+00 -.4164723000D+01 -.5712700000D+01 -.1834000000D+00 -.4749000000D+01 -.4479000000D+00 -.2680000000D-02 .9937080000D+02 .2189000000D+00 .8680000000D-03 .1829000000D+00 -.5497182000D+01 -.1000100000D+01 -.2561700000D+01 -.5944400000D+01 .6342000000D+00 .8250000000D-02 .2175263000D+03 .4983700000D+00 .1190000000D-02 .4501000000D+00 -.2640918000D+01 -.4102000000D+01 -.4948500000D+01 -.3223100000D+01 +2 10620050728200511052453579.4 -.8875000000D+00 .5130000000D-02 .2370227000D+03 .7366800000D+00 .2747000000D-02 .5182000000D+00 -.4501669000D+01 -.6129100000D+01 -.2901100000D+01 -.5714300000D+01 -.6165000000D+00 .1800000000D-03 .8886490000D+02 .2633300000D+00 .9890000000D-03 .1692000000D+00 -.5791868000D+01 -.1869500000D+01 -.4788600000D+01 -.5743000000D+00 .1193300000D+01 .5710000000D-02 .2227659000D+03 .6707800000D+00 .2495000000D-02 .5039000000D+00 -.2974353000D+01 -.4471000000D+01 -.1203100000D+01 -.4245500000D+01 +2 10720051105200602132453679.4 -.4308000000D+00 .1147000000D-01 .2364887000D+03 .4533000000D-01 .1942000000D-02 .5420000000D+00 -.4773175000D+01 -.5936500000D+01 -.3089700000D+01 -.4130000000D-01 -.6058000000D+00 .2720000000D-02 .7635260000D+02 .2292000000D-01 .9980000000D-03 .2141000000D+00 -.6000647000D+01 -.1926300000D+01 -.5591800000D+01 -.1302500000D+01 .1918300000D+01 -.6630000000D-02 .2275859000D+03 .5099000000D-01 .1770000000D-02 .4990000000D+00 -.3236591000D+01 -.5143200000D+01 -.1590300000D+01 -.4764100000D+01 +2 10820060213200605242453779.4 .8482000000D+00 .8010000000D-02 .2366518000D+03 .2043800000D+00 .3988000000D-02 .6010000000D+00 -.4788199000D+01 -.3232200000D+01 -.9420000000D-01 -.9668000000D+00 -.4133000000D+00 .2830000000D-02 .8351800000D+02 .1254500000D+00 .1539000000D-02 .2205000000D+00 -.6050021000D+01 -.5856100000D+01 -.2243300000D+01 -.2245200000D+01 .1467900000D+01 -.6290000000D-02 .2246160000D+03 .1751900000D+00 .3580000000D-02 .5486000000D+00 -.3256880000D+01 -.1478300000D+01 -.4745700000D+01 -.5701500000D+01 +2 10920060524200609012453879.4 .1658400000D+01 .6600000000D-03 .2368516000D+03 .6436800000D+00 .7510000000D-03 .6305000000D+00 -.4937898000D+01 -.2451000000D+00 -.1836100000D+01 -.1985100000D+01 -.7030000000D-01 .1610000000D-02 .8420100000D+02 .2198100000D+00 .7490000000D-03 .2028000000D+00 -.6203398000D+01 -.2117200000D+01 -.3827500000D+01 -.3316700000D+01 .6845000000D+00 -.3030000000D-02 .2243075000D+03 .5799000000D+00 .8440000000D-03 .5954000000D+00 -.3408703000D+01 -.4876200000D+01 -.5300000000D-02 -.4492000000D+00 +2 11020060901200612102453979.4 .1840700000D+01 -.2640000000D-02 .2369310000D+03 .6435100000D+00 .3155000000D-02 .5982000000D+00 -.5279771000D+01 -.6130000000D+00 -.3720200000D+01 -.2977000000D+01 .7120000000D-01 .2660000000D-02 .6776000000D+02 .2385800000D+00 .1211000000D-02 .1518000000D+00 -.1807440000D+00 -.3003900000D+01 -.6136900000D+01 -.4335600000D+01 .2386000000D+00 -.7130000000D-02 .2302441000D+03 .5838300000D+00 .2782000000D-02 .5936000000D+00 -.3740269000D+01 -.5264000000D+01 -.2085600000D+01 -.1441800000D+01 +2 11120061210200703202454079.4 .1347200000D+01 -.2920000000D-02 .2370865000D+03 .1847600000D+00 .3000000000D-04 .5523000000D+00 -.5497010000D+01 -.3865800000D+01 -.5554000000D+00 -.4009800000D+01 .3662000000D+00 .1610000000D-02 .5620190000D+02 .8648000000D-01 .3060000000D-03 .1020000000D+00 -.3191200000D+00 -.3745000000D+00 -.1670000000D+00 -.4995300000D+01 -.4255000000D+00 -.1360000000D-01 .2328668000D+03 .1278400000D+00 .3790000000D-03 .5834000000D+00 -.3947168000D+01 -.2198400000D+01 -.2115100000D+01 -.2436000000D+01 +2 11220070320200706282454179.4 .8922000000D+00 -.9930000000D-02 .2364157000D+03 .2444000000D-01 .3310000000D-02 .5263000000D+00 -.5494871000D+01 -.5739800000D+01 -.9054000000D+00 -.4550700000D+01 .5443000000D+00 -.1740000000D-02 .6728310000D+02 .8862000000D-01 .1424000000D-02 .1435000000D+00 -.3940620000D+00 -.8030000000D+00 -.3288600000D+01 -.5639200000D+01 -.1596700000D+01 .3300000000D-03 .2297442000D+03 .6480000000D-02 .3210000000D-02 .4810000000D+00 -.3955623000D+01 -.3300800000D+01 -.5554500000D+01 -.3049300000D+01 +2 11320070628200710062454279.4 .1191000000D+00 -.9730000000D-02 .2365572000D+03 .6803900000D+00 .1140000000D-02 .4946000000D+00 -.5703644000D+01 -.9832000000D+00 -.3345000000D+01 -.5548200000D+01 .3541000000D+00 -.1580000000D-02 .6252530000D+02 .2247900000D+00 .6400000000D-03 .1357000000D+00 -.5742570000D+00 -.3271800000D+01 -.5300400000D+01 -.1779000000D+00 -.1734000000D+01 .2260000000D-02 .2315105000D+03 .6270300000D+00 .8790000000D-03 .5017000000D+00 -.4160241000D+01 -.5668600000D+01 -.1678800000D+01 -.4071400000D+01 +2 11420071006200801142454379.4 -.6428000000D+00 -.7820000000D-02 .2370337000D+03 .5034600000D+00 .3267000000D-02 .5444000000D+00 -.6029715000D+01 -.1343200000D+01 -.4473600000D+01 -.2523000000D+00 .1075000000D+00 -.8200000000D-03 .4286040000D+02 .1967100000D+00 .1405000000D-02 .1067000000D+00 -.7262150000D+00 -.4007100000D+01 -.8986000000D+00 -.1017900000D+01 -.1586000000D+01 .4570000000D-02 .2356851000D+03 .4825900000D+00 .3122000000D-02 .5719000000D+00 -.4473502000D+01 -.6019500000D+01 -.2864600000D+01 -.4955700000D+01 +2 11520080114200804232454479.4 -.1775100000D+01 .2570000000D-02 .2376226000D+03 .3003700000D+00 .1538000000D-02 .6408000000D+00 -.6182308000D+01 -.4485900000D+01 -.1282300000D+01 -.8187000000D+00 .1400000000D+00 -.4070000000D-02 .3654320000D+02 .1679300000D+00 .4730000000D-03 .1518000000D+00 -.7949630000D+00 -.1040000000D+01 -.3911400000D+01 -.2191100000D+01 -.1102500000D+01 .1017000000D-01 .2363133000D+03 .2711100000D+00 .1375000000D-02 .6034000000D+00 -.4623516000D+01 -.3003900000D+01 -.6266800000D+01 -.5562900000D+01 +2 11620080423200808012454579.4 -.1577100000D+01 -.5800000000D-03 .2365866000D+03 .2020900000D+00 .2477000000D-02 .6140000000D+00 -.6194158000D+01 -.1312900000D+01 -.1767700000D+01 -.1949800000D+01 -.2624000000D+00 -.6000000000D-04 .4820540000D+02 .5497000000D-01 .1122000000D-02 .9290000000D-01 -.9498440000D+00 -.2569600000D+01 -.4424900000D+01 -.3123400000D+01 .1040000000D+00 .9090000000D-02 .2345112000D+03 .1877200000D+00 .2372000000D-02 .6095000000D+00 -.4641884000D+01 -.6145700000D+01 -.4330000000D-01 -.3961000000D+00 +2 11720080801200811092454679.4 -.1410200000D+01 .2410000000D-02 .2371674000D+03 .6726800000D+00 .1411000000D-02 .6049000000D+00 -.1644340000D+00 -.1753000000D+01 -.4502600000D+01 -.2951000000D+01 -.3339000000D+00 .2790000000D-02 .3779900000D+02 .2234100000D+00 .5930000000D-03 .3900000000D-01 -.1068602000D+01 -.4390400000D+01 -.4159000000D+00 -.3752400000D+01 .1011300000D+01 .3640000000D-02 .2366384000D+03 .6577300000D+00 .1450000000D-02 .6151000000D+00 -.4888315000D+01 -.1723000000D+00 -.3000400000D+01 -.1393100000D+01 +2 11820081109200902172454779.4 -.1131900000D+01 .1098000000D-01 .2374516000D+03 .3479000000D+00 .3066000000D-02 .5508000000D+00 -.4648740000D+00 -.2075900000D+01 -.5223800000D+01 -.3830700000D+01 -.1093000000D+00 .4200000000D-03 .2187120000D+02 .1381500000D+00 .1458000000D-02 .4910000000D-01 -.8049800000D+00 -.4964200000D+01 -.1857700000D+01 -.3788900000D+01 .1398800000D+01 .3880000000D-02 .2382277000D+03 .3290200000D+00 .2877000000D-02 .5530000000D+00 -.5180310000D+01 -.4887000000D+00 -.3626400000D+01 -.2217200000D+01 +2 11920090217200905282454879.4 -.1941000000D+00 .1413000000D-01 .2374356000D+03 .3117700000D+00 .2637000000D-02 .5082000000D+00 -.5599130000D+00 -.5213500000D+01 -.2061800000D+01 -.4604900000D+01 .1840000000D-01 -.1310000000D-02 .2147770000D+02 .1866600000D+00 .9100000000D-03 .7190000000D-01 -.9063270000D+00 -.1833800000D+01 -.4856100000D+01 -.4467300000D+01 .1620300000D+01 -.1070000000D-02 .2382983000D+03 .3165300000D+00 .2770000000D-02 .5085000000D+00 -.5276408000D+01 -.3641800000D+01 -.5200000000D+00 -.2991600000D+01 +2 12020090528200909052454979.4 .1182600000D+01 .1770000000D-02 .2369495000D+03 .3449800000D+00 .1866000000D-02 .5323000000D+00 -.6136570000D+00 -.2106000000D+01 -.2614700000D+01 -.5286000000D+01 -.7630000000D-01 .2780000000D-02 .2772950000D+02 .6715000000D-01 .9590000000D-03 .8650000000D-01 -.1274008000D+01 -.4408800000D+01 -.5566000000D+01 -.5960400000D+01 .1516800000D+01 -.7160000000D-02 .2373838000D+03 .3608800000D+00 .1577000000D-02 .5420000000D+00 -.5330649000D+01 -.5489000000D+00 -.1059000000D+01 -.3756500000D+01 +2 12120090905200912142455079.4 .1535800000D+01 .1300000000D-02 .2377143000D+03 .6578700000D+00 .1914000000D-02 .5326000000D+00 -.8989020000D+00 -.2509000000D+01 -.5490700000D+01 -.7930000000D-01 .1453000000D+00 .3000000000D-03 .1914480000D+02 .2238500000D+00 .6450000000D-03 .5700000000D-01 -.9018950000D+00 -.5511800000D+01 -.2073100000D+01 -.1899000000D+00 .9767000000D+00 -.9810000000D-02 .2381676000D+03 .6508100000D+00 .2009000000D-02 .5509000000D+00 -.5610549000D+01 -.9223000000D+00 -.3846000000D+01 -.4759800000D+01 +2 12220091214201003242455179.4 .1770900000D+01 -.1070000000D-02 .2375122000D+03 .1703900000D+00 .2404000000D-02 .6478000000D+00 -.1168975000D+01 -.2670800000D+01 -.5830200000D+01 -.1007700000D+01 .1200000000D+00 -.1190000000D-02 .2519400000D+02 .5534000000D-01 .1231000000D-02 .4490000000D-01 -.2786200000D+00 -.5735700000D+01 -.2632400000D+01 -.6017700000D+01 -.2510000000D-01 -.7350000000D-02 .2375154000D+03 .1512100000D+00 .2150000000D-02 .6403000000D+00 -.5876488000D+01 -.1254300000D+01 -.4392600000D+01 -.5703500000D+01 +2 12320100324201007022455279.4 .1503300000D+01 -.8620000000D-02 .2374726000D+03 .2405800000D+00 .3266000000D-02 .6056000000D+00 -.1218015000D+01 -.5952300000D+01 -.2807400000D+01 -.1754600000D+01 .7010000000D-01 -.8600000000D-03 .2117440000D+02 .1731200000D+00 .1242000000D-02 .3040000000D-01 -.5540990000D+00 -.2641100000D+01 -.5827400000D+01 -.1317500000D+01 -.1054600000D+01 -.5830000000D-02 .2379118000D+03 .2319100000D+00 .3192000000D-02 .5884000000D+00 -.5926901000D+01 -.4377800000D+01 -.1229200000D+01 -.1921000000D+00 +2 12420100702201010102455379.4 .5994000000D+00 -.7670000000D-02 .2375605000D+03 .4894900000D+00 .9630000000D-03 .5501000000D+00 -.1323806000D+01 -.2887900000D+01 -.3642300000D+01 -.2838800000D+01 -.1790000000D-01 -.1500000000D-02 .1974180000D+02 .1115600000D+00 .6320000000D-03 .8180000000D-01 -.8647240000D+00 -.5959700000D+01 -.3513000000D+00 -.1645800000D+01 -.1461800000D+01 -.4310000000D-02 .2377894000D+03 .4879600000D+00 .1109000000D-02 .5560000000D+00 -.6033563000D+01 -.1284700000D+01 -.2369300000D+01 -.1283300000D+01 +2 12520101010201101182455479.4 -.1927000000D+00 -.5820000000D-02 .2380264000D+03 .6321800000D+00 .2663000000D-02 .5594000000D+00 -.1628405000D+01 -.3247700000D+01 -.6150000000D-01 -.3806600000D+01 -.1719000000D+00 -.1900000000D-02 .3178880000D+02 .2259500000D+00 .1014000000D-02 .1188000000D+00 -.5151060000D+00 -.2568000000D+00 -.3311100000D+01 -.2494600000D+01 -.1687600000D+01 .6600000000D-03 .2367445000D+03 .6086600000D+00 .2493000000D-02 .5565000000D+00 -.5112500000D-01 -.1718600000D+01 -.4778600000D+01 -.2219400000D+01 +3 12619990101199904162451179.3 .6880000000D-01 -.1330000000D-02 .2946166000D+03 .1174400000D+00 .2624000000D-02 .9410000000D-01 -.5203124000D+01 -.2472000000D+00 -.6718000000D+00 -.6399000000D+00 .2040000000D-01 -.5700000000D-03 .7774430000D+02 .7119000000D-01 .1029000000D-02 .4060000000D-01 -.5868550000D+00 -.2237000000D+00 -.1200100000D+01 -.1051200000D+01 .1028000000D+00 -.1000000000D-04 .2845509000D+03 .1157600000D+00 .2569000000D-02 .1307000000D+00 -.3626241000D+01 -.5250000000D+01 -.5441100000D+01 -.5458700000D+01 +3 12719990416199907302451284.3 -.7020000000D-01 .1040000000D-02 .2951929000D+03 .6382200000D+00 .2269000000D-02 .7610000000D-01 -.1468965000D+01 -.3069700000D+01 -.6118200000D+01 -.3712300000D+01 .4900000000D-02 .3500000000D-03 .9341020000D+02 .2452000000D+00 .8990000000D-03 .3750000000D-01 -.3043599000D+01 -.3521100000D+01 -.3189000000D+00 -.4799800000D+01 -.8670000000D-01 .5000000000D-04 .2800074000D+03 .6336100000D+00 .2188000000D-02 .1053000000D+00 -.6181867000D+01 -.1634300000D+01 -.4714200000D+01 -.2293000000D+01 +3 12819990730199911122451389.3 -.9280000000D-01 .0000000000D+00 .2946342000D+03 .2149000000D-01 .3112000000D-02 .1372000000D+00 -.4030374000D+01 -.4568200000D+01 -.2369600000D+01 -.2805600000D+01 -.2590000000D-01 .4400000000D-03 .1075391000D+03 .3273000000D-01 .1119000000D-02 .4290000000D-01 -.5534982000D+01 -.4459700000D+01 -.3052800000D+01 -.3665400000D+01 -.3200000000D-02 -.1380000000D-02 .2748444000D+03 .3934000000D-01 .3277000000D-02 .1079000000D+00 -.2469391000D+01 -.3916100000D+01 -.9145000000D+00 -.1590000000D+01 +3 12919991112200002252451494.3 .5480000000D-01 -.7100000000D-03 .2951255000D+03 .5674000000D+00 .4537000000D-02 .3470000000D-01 -.5862600000D-01 -.4734900000D+01 -.1593300000D+01 -.5072700000D+01 .2900000000D-01 -.3300000000D-03 .1003656000D+03 .2069500000D+00 .1717000000D-02 .1260000000D-01 -.1569892000D+01 -.5450500000D+01 -.2291800000D+01 -.5005800000D+01 -.4750000000D-01 .6500000000D-03 .2775958000D+03 .5649400000D+00 .4513000000D-02 .1560000000D-01 -.4779242000D+01 -.3259300000D+01 -.1206000000D+00 -.4162500000D+01 +3 13020000225200006092451599.3 -.1370000000D-01 .1140000000D-02 .2947145000D+03 .4734900000D+00 .8560000000D-03 .1004000000D+00 -.2441233000D+01 -.3985600000D+01 -.4772300000D+01 -.4636500000D+01 .3190000000D-01 .1600000000D-03 .9825390000D+02 .1881200000D+00 .4360000000D-03 .5040000000D-01 -.3964564000D+01 -.4675800000D+01 -.5893100000D+01 -.5229800000D+01 -.1299000000D+00 .9000000000D-03 .2783145000D+03 .4788200000D+00 .6620000000D-03 .1103000000D+00 -.8763930000D+00 -.2550600000D+01 -.3387900000D+01 -.2826400000D+01 +3 13120000609200009222451704.3 .9900000000D-02 -.6200000000D-03 .2949055000D+03 .5773600000D+00 .3775000000D-02 .5650000000D-01 -.5046596000D+01 -.3680000000D+00 -.3503900000D+01 -.1051500000D+01 -.3270000000D-01 .1700000000D-03 .1126574000D+03 .2180400000D+00 .1391000000D-02 .3040000000D-01 -.2508010000D+00 -.1324000000D+01 -.4488000000D+01 -.2248600000D+01 .7720000000D-01 -.4600000000D-03 .2730903000D+03 .5589000000D+00 .3685000000D-02 .6590000000D-01 -.3490584000D+01 -.5192500000D+01 -.2044600000D+01 -.5572900000D+01 +3 13220000922200101052451809.3 .2352000000D+00 -.1690000000D-02 .2946121000D+03 .5003300000D+00 .4550000000D-03 .2314000000D+00 -.1251760000D+01 -.5956300000D+01 -.3420100000D+01 -.6068400000D+01 .2440000000D-01 -.7800000000D-03 .1172605000D+03 .1674700000D+00 .1680000000D-03 .7240000000D-01 -.2728707000D+01 -.6966000000D+00 -.4282600000D+01 -.9803000000D+00 .7840000000D-01 .1610000000D-02 .2714467000D+03 .4467400000D+00 .3370000000D-03 .2278000000D+00 -.5979741000D+01 -.4443800000D+01 -.2871100000D+01 -.4870000000D+01 +3 13320010105200104202451914.3 .5140000000D-01 .6000000000D-03 .2947886000D+03 .1476400000D+00 .3961000000D-02 .1066000000D+00 -.3509736000D+01 -.2003500000D+01 -.5124100000D+01 -.5290000000D+01 .3880000000D-01 -.1100000000D-03 .1105120000D+03 .2824000000D-01 .1423000000D-02 .4430000000D-01 -.5025826000D+01 -.3696500000D+01 -.6132400000D+01 -.5802100000D+01 -.6810000000D-01 .1110000000D-02 .2733399000D+03 .1419100000D+00 .3821000000D-02 .7730000000D-01 -.1946771000D+01 -.5332000000D+00 -.3677300000D+01 -.3652700000D+01 +3 13420010420200108032452019.3 -.7610000000D-01 -.4100000000D-03 .2949637000D+03 .6724300000D+00 .1346000000D-02 .1215000000D+00 -.6018588000D+01 -.1336000000D+01 -.4210900000D+01 -.1995900000D+01 -.5070000000D-01 .4800000000D-03 .1185138000D+03 .2823800000D+00 .7120000000D-03 .4490000000D-01 -.1249870000D+01 -.2331900000D+01 -.5106600000D+01 -.2973100000D+01 .8540000000D-01 -.1120000000D-02 .2704911000D+03 .6552000000D+00 .1387000000D-02 .8600000000D-01 -.4457408000D+01 -.6144000000D+01 -.2734100000D+01 -.2819000000D+00 +3 13520010803200111162452124.3 .8200000000D-02 -.7000000000D-03 .2947242000D+03 .3159600000D+00 .4448000000D-02 .2410000000D-01 -.2342732000D+01 -.3912200000D+01 -.7660000000D+00 -.1209000000D+01 -.1000000000D-02 -.2600000000D-03 .1283261000D+03 .1150400000D+00 .1643000000D-02 .2280000000D-01 -.3830430000D+01 -.5025300000D+01 -.2068400000D+01 -.2401800000D+01 -.1800000000D-02 .4200000000D-03 .2657990000D+03 .2987000000D+00 .4139000000D-02 .4090000000D-01 -.7913680000D+00 -.2410000000D+01 -.5523700000D+01 -.5952100000D+01 +3 13620011116200203012452229.3 -.1745000000D+00 .1810000000D-02 .2949871000D+03 .7384200000D+00 .4180000000D-02 .1199000000D+00 -.4715044000D+01 -.3088600000D+01 -.6230100000D+01 -.3262200000D+01 .1420000000D-01 .2000000000D-03 .1298186000D+03 .2620500000D+00 .1502000000D-02 .5260000000D-01 -.6202949000D+01 -.4442400000D+01 -.1174200000D+01 -.4696800000D+01 -.1208000000D+00 .2300000000D-03 .2656979000D+03 .6732700000D+00 .3791000000D-02 .1572000000D+00 -.3161974000D+01 -.1560400000D+01 -.4747300000D+01 -.1923900000D+01 +3 13720020301200206142452334.3 -.1443000000D+00 .4900000000D-03 .2948393000D+03 .3335400000D+00 .1904000000D-02 .1462000000D+00 -.7430500000D+00 -.2283300000D+01 -.2623900000D+01 -.2527400000D+01 -.4550000000D-01 .6900000000D-03 .1301730000D+03 .1503000000D+00 .7890000000D-03 .4450000000D-01 -.2250307000D+01 -.3152200000D+01 -.4271700000D+01 -.3690700000D+01 .2870000000D-01 -.1290000000D-02 .2644745000D+03 .3131000000D+00 .1915000000D-02 .1076000000D+00 -.5470043000D+01 -.7957000000D+00 -.1089600000D+01 -.1282800000D+01 +3 13820020614200209272452439.3 .9930000000D-01 -.3500000000D-03 .2948812000D+03 .7069200000D+00 .3185000000D-02 .1029000000D+00 -.3344071000D+01 -.4978100000D+01 -.1805000000D+01 -.5592300000D+01 .8400000000D-02 -.4600000000D-03 .1376099000D+03 .2520100000D+00 .1319000000D-02 .3430000000D-01 -.4810078000D+01 -.1740000000D-01 -.3061700000D+01 -.1328400000D+01 -.3350000000D-01 .9300000000D-03 .2616233000D+03 .6770300000D+00 .2952000000D-02 .6740000000D-01 -.1800879000D+01 -.3421400000D+01 -.2521000000D+00 -.4117100000D+01 +3 13920020927200301102452544.3 .3400000000D-01 .1990000000D-02 .2942328000D+03 .1763200000D+00 .2493000000D-02 .1945000000D+00 -.5897807000D+01 -.4377500000D+01 -.4160300000D+01 -.4867400000D+01 .6930000000D-01 -.3800000000D-03 .1377141000D+03 .1140800000D+00 .7610000000D-03 .7990000000D-01 -.1035257000D+01 -.5827800000D+01 -.5710800000D+01 -.6111400000D+01 -.1635000000D+00 .9300000000D-03 .2615910000D+03 .1776700000D+00 .2072000000D-02 .1908000000D+00 -.4369607000D+01 -.2885000000D+01 -.2578300000D+01 -.2986000000D+01 +3 14020030110200304252452649.3 -.3490000000D-01 .3300000000D-03 .2940942000D+03 .4407500000D+00 .4979000000D-02 .4610000000D-01 -.1883946000D+01 -.3146000000D+00 -.3460500000D+01 -.3349800000D+01 -.9300000000D-02 .4500000000D-03 .1394899000D+03 .1886700000D+00 .1932000000D-02 .1840000000D-01 -.3312030000D+01 -.1855500000D+01 -.4921600000D+01 -.4990000000D+01 .6600000000D-02 -.8300000000D-03 .2609051000D+03 .4014000000D+00 .4626000000D-02 .4630000000D-01 -.3537720000D+00 -.5010900000D+01 -.1887200000D+01 -.2321500000D+01 +3 14120030425200308082452754.3 .1203000000D+00 -.1230000000D-02 .2940766000D+03 .6474200000D+00 .7290000000D-03 .1044000000D+00 -.4325562000D+01 -.5916200000D+01 -.1750000000D+01 -.6190000000D+01 -.1810000000D-01 -.3600000000D-03 .1407549000D+03 .2297500000D+00 .6340000000D-03 .5010000000D-01 -.5737453000D+01 -.1082300000D+01 -.3049300000D+01 -.1811400000D+01 .4690000000D-01 .6600000000D-03 .2603611000D+03 .5931500000D+00 .4070000000D-03 .1084000000D+00 -.2801369000D+01 -.4352500000D+01 -.2316000000D+00 -.4953400000D+01 +3 14220030808200311212452859.3 -.7070000000D-01 .6900000000D-03 .2933364000D+03 .5445300000D+00 .4539000000D-02 .4110000000D-01 -.6750870000D+00 -.2296800000D+01 -.5434500000D+01 -.2784500000D+01 .2760000000D-01 -.1400000000D-03 .1349738000D+03 .1954900000D+00 .1655000000D-02 .2930000000D-01 -.2025896000D+01 -.4263000000D+01 -.8707000000D+00 -.5274200000D+01 -.1900000000D-02 -.1200000000D-03 .2644008000D+03 .5015600000D+00 .4143000000D-02 .3940000000D-01 -.5442892000D+01 -.6255000000D+00 -.3813000000D+01 -.1342000000D+01 +3 14320031121200403052452964.3 -.1530000000D+00 -.7600000000D-03 .2933705000D+03 .6485500000D+00 .2005000000D-02 .2627000000D+00 -.3123357000D+01 -.1519000000D+01 -.4784600000D+01 -.1869400000D+01 -.8160000000D-01 .9100000000D-03 .1294764000D+03 .2684200000D+00 .8980000000D-03 .8040000000D-01 -.4447031000D+01 -.3089600000D+01 -.6253600000D+01 -.3376100000D+01 .2267000000D+00 -.2200000000D-02 .2675856000D+03 .6256600000D+00 .2073000000D-02 .2007000000D+00 -.1611132000D+01 -.6209000000D+01 -.3113400000D+01 -.3510000000D-01 +3 14420040305200406182453069.3 .6020000000D-01 -.1490000000D-02 .2927266000D+03 .8823000000D-01 .3301000000D-02 .1079000000D+00 -.5386182000D+01 -.2803000000D+00 -.8507000000D+00 -.8779000000D+00 -.5140000000D-01 -.2000000000D-04 .1339610000D+03 .3872000000D-01 .1274000000D-02 .6650000000D-01 -.4503270000D+00 -.2036800000D+01 -.2649400000D+01 -.2297800000D+01 .1123000000D+00 -.1000000000D-03 .2648145000D+03 .7593000000D-01 .2887000000D-02 .1347000000D+00 -.3871727000D+01 -.5218500000D+01 -.5459200000D+01 -.5532900000D+01 +3 14520040618200410012453174.3 -.5850000000D-01 .1220000000D-02 .2931276000D+03 .7413300000D+00 .2259000000D-02 .8510000000D-01 -.1665650000D+01 -.3267800000D+01 -.6264000000D+01 -.4032000000D+01 .5330000000D-01 -.3700000000D-03 .1268764000D+03 .2990600000D+00 .9490000000D-03 .5030000000D-01 -.2986678000D+01 -.5181200000D+01 -.1564100000D+01 -.5923200000D+01 -.8560000000D-01 .3000000000D-04 .2688479000D+03 .6595400000D+00 .2005000000D-02 .1063000000D+00 -.1494920000D+00 -.1647800000D+01 -.4743200000D+01 -.2309600000D+01 +3 14620041001200501142453279.3 -.7290000000D-01 .2000000000D-03 .2927533000D+03 .1240400000D+00 .3888000000D-02 .1164000000D+00 -.4265371000D+01 -.5701900000D+01 -.2640500000D+01 -.3031100000D+01 .7600000000D-02 .4800000000D-03 .1113531000D+03 .9805000000D-01 .1592000000D-02 .4190000000D-01 -.5541870000D+01 -.1970800000D+01 -.4740700000D+01 -.5326000000D+01 -.2600000000D-02 -.1260000000D-02 .2753169000D+03 .1205100000D+00 .3682000000D-02 .9170000000D-01 -.2739273000D+01 -.3908800000D+01 -.9751000000D+00 -.1740700000D+01 +3 14720050114200504292453384.3 .9460000000D-01 -.9300000000D-03 .2934380000D+03 .6531600000D+00 .4827000000D-02 .6290000000D-01 -.3044570000D+00 -.4979200000D+01 -.1836100000D+01 -.5132600000D+01 .1040000000D-01 -.2500000000D-03 .1141046000D+03 .2361200000D+00 .1846000000D-02 .2140000000D-01 -.1609718000D+01 -.6047000000D+00 -.3690400000D+01 -.1343700000D+01 -.5960000000D-01 .7700000000D-03 .2741971000D+03 .6102000000D+00 .4455000000D-02 .3100000000D-01 -.5061734000D+01 -.3340600000D+01 -.2008000000D+00 -.3681700000D+01 +3 14820050429200508122453489.3 .1720000000D-01 .1030000000D-02 .2931667000D+03 .4700800000D+00 .1119000000D-02 .1162000000D+00 -.2667513000D+01 -.4205100000D+01 -.4846000000D+01 -.4819900000D+01 .5860000000D-01 -.6200000000D-03 .1176696000D+03 .2083600000D+00 .6920000000D-03 .4570000000D-01 -.3997846000D+01 -.6025400000D+01 -.1107900000D+01 -.5600000000D-02 -.1262000000D+00 .8900000000D-03 .2722827000D+03 .4348700000D+00 .8620000000D-03 .1069000000D+00 -.1139415000D+01 -.2606200000D+01 -.3159800000D+01 -.2826700000D+01 +3 14920050812200511252453594.3 -.9100000000D-02 -.5600000000D-03 .2936509000D+03 .6313000000D+00 .3696000000D-02 .6980000000D-01 -.5283762000D+01 -.6038000000D+00 -.3736600000D+01 -.1382000000D+01 -.2640000000D-01 .5200000000D-03 .1028737000D+03 .2731000000D+00 .1470000000D-02 .3330000000D-01 -.3038780000D+00 -.2841900000D+01 -.5849700000D+01 -.3908200000D+01 .8400000000D-01 -.5200000000D-03 .2783345000D+03 .5795300000D+00 .3453000000D-02 .7460000000D-01 -.3748079000D+01 -.5239600000D+01 -.2113800000D+01 -.5676900000D+01 +3 15020051125200603102453699.3 .2054000000D+00 -.2020000000D-02 .2936458000D+03 .4306900000D+00 .3840000000D-03 .2154000000D+00 -.1511376000D+01 -.6201900000D+01 -.5606000000D+01 -.6880000000D-01 -.8830000000D-01 .7000000000D-04 .9118600000D+02 .1400100000D+00 .3370000000D-03 .1022000000D+00 -.2784651000D+01 -.2129700000D+01 -.1754800000D+01 -.2457400000D+01 .9300000000D-01 .1420000000D-02 .2821520000D+03 .3700000000D+00 .6830000000D-03 .2233000000D+00 -.6250587000D+01 -.4594700000D+01 -.3829500000D+01 -.4964900000D+01 +3 15120060310200606232453804.3 .5970000000D-01 .3700000000D-03 .2936479000D+03 .2144200000D+00 .4090000000D-02 .1005000000D+00 -.3768754000D+01 -.2217300000D+01 -.5364100000D+01 -.5482700000D+01 .1760000000D-01 -.5100000000D-03 .1049303000D+03 .1015300000D+00 .1648000000D-02 .3030000000D-01 -.5088489000D+01 -.4622100000D+01 -.1319500000D+01 -.1048900000D+01 -.5200000000D-01 .9400000000D-03 .2768354000D+03 .1959600000D+00 .3818000000D-02 .6550000000D-01 -.2231885000D+01 -.5826000000D+00 -.3727500000D+01 -.3755100000D+01 +3 15220060623200610062453909.3 -.9090000000D-01 -.1300000000D-03 .2937238000D+03 .6396400000D+00 .1125000000D-02 .1208000000D+00 -.6259250000D+01 -.1577500000D+01 -.4411500000D+01 -.2154500000D+01 .2000000000D-03 .4900000000D-03 .1003349000D+03 .2446900000D+00 .6950000000D-03 .4210000000D-01 -.1276186000D+01 -.3809300000D+01 -.5917300000D+01 -.4723800000D+01 .7910000000D-01 -.1120000000D-02 .2789754000D+03 .6065500000D+00 .1112000000D-02 .8310000000D-01 -.4720611000D+01 -.6184800000D+01 -.2728900000D+01 -.3387000000D+00 +3 15320061006200701192454014.3 .1250000000D-01 -.6100000000D-03 .2934719000D+03 .3463400000D+00 .4216000000D-02 .1100000000D-01 -.2580880000D+01 -.4157100000D+01 -.1008800000D+01 -.1415000000D+01 -.1090000000D-01 .1100000000D-03 .7953460000D+02 .1833800000D+00 .1749000000D-02 .1210000000D-01 -.3782651000D+01 -.6407000000D+00 -.3530700000D+01 -.1995600000D+01 -.1200000000D-01 .3500000000D-03 .2856128000D+03 .3197900000D+00 .3902000000D-02 .2750000000D-01 -.1036282000D+01 -.2453300000D+01 -.5636900000D+01 -.5943900000D+01 +3 15420070119200705042454119.3 -.1411000000D+00 .1750000000D-02 .2936367000D+03 .6824000000D+00 .3433000000D-02 .1247000000D+00 -.4972053000D+01 -.3333300000D+01 -.1954000000D+00 -.3622500000D+01 .8520000000D-01 -.6100000000D-03 .7840450000D+02 .2654700000D+00 .1308000000D-02 .6740000000D-01 -.6143452000D+01 -.5676900000D+01 -.2632300000D+01 -.5820500000D+01 -.1313000000D+00 .2300000000D-03 .2864453000D+03 .6120500000D+00 .3086000000D-02 .1578000000D+00 -.3426144000D+01 -.1709400000D+01 -.4881700000D+01 -.1996300000D+01 +3 15520070504200708172454224.3 -.1372000000D+00 .7100000000D-03 .2930776000D+03 .2456000000D+00 .1946000000D-02 .1271000000D+00 -.9922810000D+00 -.2526200000D+01 -.2789000000D+01 -.2728300000D+01 .2470000000D-01 .2600000000D-03 .9003220000D+02 .8340000000D-01 .1056000000D-02 .5420000000D-01 -.2195723000D+01 -.4971800000D+01 -.5465200000D+01 -.5100300000D+01 .1840000000D-01 -.1130000000D-02 .2825554000D+03 .2222100000D+00 .1924000000D-02 .9820000000D-01 -.5738712000D+01 -.7825000000D+00 -.1148200000D+01 -.1343400000D+01 +3 15620070817200711302454329.3 .9030000000D-01 -.4600000000D-03 .2932128000D+03 .6362100000D+00 .2715000000D-02 .8820000000D-01 -.3565726000D+01 -.5185200000D+01 -.2013200000D+01 -.5708900000D+01 -.5150000000D-01 .1000000000D-03 .7087050000D+02 .3046500000D+00 .9210000000D-03 .5780000000D-01 -.4636663000D+01 -.1645100000D+01 -.4477200000D+01 -.2418500000D+01 -.2040000000D-01 .8700000000D-03 .2885728000D+03 .5877200000D+00 .2513000000D-02 .6440000000D-01 -.2019748000D+01 -.3499900000D+01 -.3219000000D+00 -.4367700000D+01 +3 15720071130200803142454434.3 .5040000000D-01 .1430000000D-02 .2930448000D+03 .1097200000D+00 .2459000000D-02 .1635000000D+00 -.6111456000D+01 -.4676000000D+01 -.4381300000D+01 -.5087400000D+01 -.6200000000D-02 -.6900000000D-03 .4952600000D+02 .5046000000D-01 .1236000000D-02 .6210000000D-01 -.6450050000D+00 -.4715000000D+01 -.9158000000D+00 -.1584700000D+01 -.1269000000D+00 .1020000000D-02 .2926393000D+03 .1393500000D+00 .2063000000D-02 .1449000000D+00 -.4556338000D+01 -.3080900000D+01 -.2778700000D+01 -.3165600000D+01 +3 15820080314200806272454539.3 -.2150000000D-01 .2600000000D-03 .2928529000D+03 .4391000000D+00 .4281000000D-02 .1770000000D-01 -.2121434000D+01 -.5274000000D+00 -.3668100000D+01 -.3586200000D+01 -.6500000000D-02 .2100000000D-03 .5870140000D+02 .1521400000D+00 .1754000000D-02 .1070000000D-01 -.3049431000D+01 -.3038400000D+01 -.6280900000D+01 -.5734900000D+01 .1790000000D-01 -.6700000000D-03 .2913335000D+03 .4112300000D+00 .3960000000D-02 .2170000000D-01 -.5700810000D+00 -.5188900000D+01 -.2033900000D+01 -.2716700000D+01 +3 15920080627200810102454644.3 .9210000000D-01 -.1120000000D-02 .2929381000D+03 .5109300000D+00 .4600000000D-03 .8680000000D-01 -.4538592000D+01 -.6098500000D+01 -.1575100000D+01 -.4740000000D-01 -.5260000000D-01 .3900000000D-03 .5590850000D+02 .2474700000D+00 .4650000000D-03 .4490000000D-01 -.5434869000D+01 -.2533000000D+01 -.3741100000D+01 -.2814000000D+01 .4960000000D-01 .5400000000D-03 .2917044000D+03 .4572200000D+00 .4730000000D-03 .1004000000D+00 -.2986538000D+01 -.4466600000D+01 -.5971000000D+01 -.5011000000D+01 +3 16020081010200901232454749.3 -.6500000000D-01 .6100000000D-03 .2936050000D+03 .4681700000D+00 .3824000000D-02 .3800000000D-01 -.8501960000D+00 -.2440000000D+01 -.5587400000D+01 -.2966500000D+01 .3860000000D-01 -.3400000000D-03 .3228800000D+02 .2914200000D+00 .1702000000D-02 .2630000000D-01 -.1229880000D+01 -.5327600000D+01 -.2245700000D+01 -.5914600000D+01 -.2350000000D-01 .2000000000D-04 .2948026000D+03 .4330100000D+00 .3587000000D-02 .4850000000D-01 -.5566638000D+01 -.8628000000D+00 -.4008600000D+01 -.1722000000D+01 +3 16120090123200905082454854.3 -.1591000000D+00 -.3200000000D-03 .2940904000D+03 .5315900000D+00 .1345000000D-02 .2223000000D+00 -.3296708000D+01 -.1706200000D+01 -.5030700000D+01 -.2022700000D+01 .4490000000D-01 .3900000000D-03 .2578550000D+02 .1618200000D+00 .3490000000D-03 .9150000000D-01 -.3277357000D+01 -.4712300000D+01 -.1908100000D+01 -.4926100000D+01 .1625000000D+00 -.1890000000D-02 .2952017000D+03 .5393100000D+00 .1445000000D-02 .1654000000D+00 -.1727792000D+01 -.1019000000D+00 -.3304500000D+01 -.2940000000D+00 +3 16220090508200908212454959.3 .2340000000D-01 -.1080000000D-02 .2934742000D+03 .2632000000D-01 .2953000000D-02 .8530000000D-01 -.5576513000D+01 -.5069700000D+01 -.9599000000D+00 -.1105600000D+01 -.3140000000D-01 .4400000000D-03 .3137370000D+02 .3315000000D-01 .1309000000D-02 .3230000000D-01 -.6111578000D+01 -.2591300000D+01 -.3886800000D+01 -.3515400000D+01 .9070000000D-01 -.1200000000D-03 .2945137000D+03 .1522000000D-01 .2750000000D-02 .1078000000D+00 -.4010947000D+01 -.3307200000D+01 -.5648900000D+01 -.5617300000D+01 +3 16320090821200912042455064.3 -.5010000000D-01 .1080000000D-02 .2942312000D+03 .5938600000D+00 .1726000000D-02 .7580000000D-01 -.1811150000D+01 -.3390300000D+01 -.1080000000D+00 -.4120500000D+01 .2540000000D-01 -.5800000000D-03 .2205120000D+02 .2910100000D+00 .6750000000D-03 .3770000000D-01 -.1797928000D+01 -.1300000000D-01 -.2858000000D+01 -.8952000000D+00 -.9310000000D-01 .2300000000D-03 .2952271000D+03 .5697300000D+00 .1652000000D-02 .1059000000D+00 -.2410110000D+00 -.1860100000D+01 -.4867000000D+01 -.2471900000D+01 +3 16420091204201003192455169.3 -.6300000000D-01 .3100000000D-03 .2944577000D+03 .1021500000D+00 .3299000000D-02 .9230000000D-01 -.4376755000D+01 -.5836400000D+01 -.2757100000D+01 -.3126800000D+01 .2020000000D-01 -.1400000000D-03 .3003720000D+02 .1046100000D+00 .1578000000D-02 .3460000000D-01 -.3336910000D+01 -.2433300000D+01 -.5822100000D+01 -.1020000000D+00 -.9900000000D-02 -.1080000000D-02 .2938195000D+03 .1132900000D+00 .3353000000D-02 .8840000000D-01 -.2800766000D+01 -.4350200000D+01 -.1214200000D+01 -.1971300000D+01 +3 16520100319201007022455274.3 .8810000000D-01 -.7200000000D-03 .2947668000D+03 .5675400000D+00 .3790000000D-02 .6310000000D-01 -.4299530000D+00 -.5103700000D+01 -.1966500000D+01 -.5213000000D+01 -.3690000000D-01 .2000000000D-03 .2366210000D+02 .2249500000D+00 .1520000000D-02 .3680000000D-01 -.5825031000D+01 -.1900300000D+01 -.5047800000D+01 -.1942400000D+01 -.4210000000D-01 .6500000000D-03 .2946668000D+03 .5615900000D+00 .3738000000D-02 .3930000000D-01 -.5139890000D+01 -.3541000000D+01 -.3975000000D+00 -.3881000000D+01 +3 16620100702201010152455379.3 .2180000000D-01 .8200000000D-03 .2943143000D+03 .3305200000D+00 .1175000000D-02 .9740000000D-01 -.2785930000D+01 -.4316300000D+01 -.4711200000D+01 -.4885400000D+01 -.2000000000D-03 -.4500000000D-03 .1945220000D+02 .1427400000D+00 .6980000000D-03 .4100000000D-01 -.2225185000D+01 -.1045100000D+01 -.1729500000D+01 -.1565400000D+01 -.1087000000D+00 .9000000000D-03 .2948295000D+03 .3380800000D+00 .1073000000D-02 .9290000000D-01 -.1212592000D+01 -.2769600000D+01 -.3308300000D+01 -.2953700000D+01 +3 16720101015201101282455484.3 -.8300000000D-02 -.5200000000D-03 .2947434000D+03 .5385700000D+00 .3199000000D-02 .6680000000D-01 -.5358558000D+01 -.6705000000D+00 -.3804200000D+01 -.1387400000D+01 .1630000000D-01 .1600000000D-03 .3582090000D+02 .2629900000D+00 .1269000000D-02 .3810000000D-01 -.4148886000D+01 -.3915200000D+01 -.7714000000D+00 -.4888700000D+01 .8880000000D-01 -.7100000000D-03 .2933876000D+03 .5360400000D+00 .3235000000D-02 .7060000000D-01 -.3782969000D+01 -.5470300000D+01 -.2306100000D+01 -.5901500000D+01 +4 16819990101199904112451179.4 .1171700000D+01 -.1200000000D-02 .3774234000D+03 .3098800000D+00 .3678000000D-02 .4316000000D+00 .1377894000D+01 .6175400000D+01 .5876000000D+01 -.2716700000D+01 .1103000000D+00 -.2000000000D-04 .9303080000D+02 .9755000000D-01 .1381000000D-02 .1316000000D+00 .5974110000D+01 .5582200000D+01 .5337300000D+01 -.3988200000D+01 -.4720000000D+00 -.1000000000D-04 .3655789000D+03 .3112100000D+00 .3710000000D-02 .3182000000D+00 .2957099000D+01 .1470700000D+01 .1001200000D+01 -.5425000000D+00 +4 16919990411199907202451279.4 .1069400000D+01 .1260000000D-02 .3781275000D+03 .1024310000D+01 .2396000000D-02 .3275000000D+00 .4610331000D+01 .3001400000D+01 .1073000000D+00 -.2315900000D+01 .1312000000D+00 .5400000000D-03 .1130956000D+03 .3777900000D+00 .1121000000D-02 .1639000000D+00 .2994071000D+01 .2376100000D+01 .5962300000D+01 -.4321800000D+01 -.5087000000D+00 .1030000000D-02 .3603526000D+03 .1005860000D+01 .2346000000D-02 .4774000000D+00 .6186143000D+01 .4493300000D+01 .1645000000D+01 -.1010600000D+01 +4 17019990720199910282451379.4 .1125000000D+01 -.2900000000D-03 .3775825000D+03 .4511400000D+00 .4958000000D-02 .4267000000D+00 .1523014000D+01 .6228600000D+01 .3088400000D+01 -.2018000000D+01 .1638000000D+00 .7000000000D-03 .1344061000D+03 .1414000000D+00 .1766000000D-02 .1356000000D+00 .6251956000D+01 .5320400000D+01 .2344000000D+01 -.3871500000D+01 -.4133000000D+00 -.1540000000D-02 .3531010000D+03 .4398000000D+00 .4903000000D-02 .4077000000D+00 .3091012000D+01 .1415600000D+01 .4531400000D+01 -.7863000000D+00 +4 17119991028200002052451479.4 .1102800000D+01 -.2630000000D-02 .3777669000D+03 .5925600000D+00 .4887000000D-02 .3701000000D+00 .4935366000D+01 .2512000000D+00 .3389400000D+01 -.1928300000D+01 .2499000000D+00 .9000000000D-04 .1305970000D+03 .2369100000D+00 .1895000000D-02 .1634000000D+00 .3376530000D+01 .5962600000D+01 .2700300000D+01 -.3204400000D+01 -.6292000000D+00 -.1390000000D-02 .3546969000D+03 .6117600000D+00 .4966000000D-02 .4418000000D+00 .2191460000D+00 .1723600000D+01 .4883900000D+01 -.6074700000D+01 +4 17220000205200005152451579.4 .9330000000D+00 -.6500000000D-03 .3772829000D+03 .5799500000D+00 .2706000000D-02 .2699000000D+00 .2084773000D+01 .5695000000D+00 .7620000000D-01 -.1563700000D+01 .3044000000D+00 .2000000000D-04 .1251317000D+03 .2165800000D+00 .1015000000D-02 .1732000000D+00 .5047040000D+00 .6077600000D+01 .5368800000D+01 -.3210400000D+01 -.8246000000D+00 .1170000000D-02 .3561633000D+03 .5871300000D+00 .2480000000D-02 .4781000000D+00 .3658592000D+01 .2044900000D+01 .1488100000D+01 -.5990700000D+01 +4 17320000515200008232451679.4 .8592000000D+00 .1230000000D-02 .3779509000D+03 .1050210000D+01 .3419000000D-02 .4614000000D+00 .5275653000D+01 .3660700000D+01 .6407000000D+00 -.1275600000D+01 .3194000000D+00 .5900000000D-03 .1446989000D+03 .3931800000D+00 .1453000000D-02 .1272000000D+00 .3747060000D+01 .2701900000D+01 .6095800000D+01 -.3182100000D+01 -.7432000000D+00 .1700000000D-03 .3492507000D+03 .1035400000D+01 .3478000000D-02 .3244000000D+00 .5579370000D+00 .5147100000D+01 .2122500000D+01 -.1826000000D+00 +4 17420000823200012012451779.4 .8589000000D+00 -.4900000000D-03 .3775321000D+03 .1698500000D+00 .4094000000D-02 .5759000000D+00 .2209297000D+01 .6429000000D+00 .3800400000D+01 -.1183500000D+01 .3339000000D+00 .1140000000D-02 .1562156000D+03 .4138000000D-01 .1301000000D-02 .1269000000D+00 .7156210000D+00 .5567200000D+01 .2815800000D+01 -.2436700000D+01 -.6854000000D+00 -.2640000000D-02 .3439320000D+03 .1348700000D+00 .3695000000D-02 .2307000000D+00 .3761936000D+01 .2220300000D+01 .5276900000D+01 -.6062300000D+01 +4 17520001201200103112451879.4 .7081000000D+00 -.1670000000D-02 .3776169000D+03 .4866100000D+00 .6041000000D-02 .3803000000D+00 .5671032000D+01 .9687000000D+00 .4106400000D+01 -.6755000000D+00 .4079000000D+00 .4400000000D-03 .1506444000D+03 .1710900000D+00 .2243000000D-02 .1788000000D+00 .4164501000D+01 .1054000000D+00 .3155700000D+01 -.2190800000D+01 -.9201000000D+00 -.8600000000D-03 .3463594000D+03 .4845700000D+00 .5892000000D-02 .4287000000D+00 .9461890000D+00 .2433000000D+01 .5580400000D+01 -.5354900000D+01 +4 17620010311200106192451979.4 .5936000000D+00 .3100000000D-03 .3770751000D+03 .8257600000D+00 .1788000000D-02 .3806000000D+00 .2765375000D+01 .1225900000D+01 .2810000000D+00 -.7520000000D-01 .4787000000D+00 -.1300000000D-03 .1519477000D+03 .3188300000D+00 .8540000000D-03 .1543000000D+00 .1253107000D+01 .1986000000D+00 .5212700000D+01 -.2228700000D+01 -.1039600000D+01 .1690000000D-02 .3461183000D+03 .7995500000D+00 .1380000000D-02 .4428000000D+00 .4324940000D+01 .2676900000D+01 .1807100000D+01 -.5357400000D+01 +4 17720010619200109272452079.4 .6014000000D+00 .5300000000D-03 .3773228000D+03 .1035960000D+01 .4618000000D-02 .4652000000D+00 .5926356000D+01 .4311400000D+01 .1226000000D+01 -.5512000000D+00 .4700000000D+00 .5000000000D-03 .1653086000D+03 .3927800000D+00 .1830000000D-02 .1401000000D+00 .4456064000D+01 .3046600000D+01 .2070000000D-01 -.1661800000D+01 -.8917000000D+00 -.6700000000D-03 .3407428000D+03 .9912100000D+00 .4506000000D-02 .2752000000D+00 .1191210000D+01 .5811700000D+01 .2700500000D+01 -.4992600000D+01 +4 17820010927200201052452179.4 .5603000000D+00 -.2510000000D-02 .3776121000D+03 .1993600000D+00 .1801000000D-02 .4582000000D+00 .2892305000D+01 .4581000000D+01 .4415300000D+01 -.7642000000D+00 .4459000000D+00 .1370000000D-02 .1680622000D+03 .7282000000D-01 .5750000000D-03 .2283000000D+00 .1449134000D+01 .3227500000D+01 .3364700000D+01 -.1274800000D+01 -.8080000000D+00 -.3930000000D-02 .3384087000D+03 .1921900000D+00 .1648000000D-02 .4002000000D+00 .4432978000D+01 .5838800000D+01 .6219300000D+01 -.4373200000D+01 +4 17920020105200204152452279.4 .3061000000D+00 -.1620000000D-02 .3768957000D+03 .2282600000D+00 .6002000000D-02 .3449000000D+00 .1083060000D+00 .1562400000D+01 .4751200000D+01 -.6012200000D+01 .5137000000D+00 .3400000000D-03 .1651961000D+03 .7302000000D-01 .2301000000D-02 .2167000000D+00 .4925575000D+01 .2189000000D+00 .3516800000D+01 -.1230000000D+01 -.1023400000D+01 -.8900000000D-03 .3398845000D+03 .2318900000D+00 .5767000000D-02 .4385000000D+00 .1653560000D+01 .3128800000D+01 .6278200000D+01 -.4403500000D+01 +4 18020020415200207242452379.4 .2181000000D+00 .1240000000D-02 .3769965000D+03 .1021220000D+01 .1423000000D-02 .5400000000D+00 .3420516000D+01 .1848000000D+01 .1330000000D-01 -.5596900000D+01 .5785000000D+00 -.4100000000D-03 .1691709000D+03 .3998200000D+00 .8750000000D-03 .1387000000D+00 .1960597000D+01 .5812000000D+00 .4992800000D+01 -.8928000000D+00 -.1136500000D+01 .1480000000D-02 .3385359000D+03 .9406900000D+00 .9280000000D-03 .2921000000D+00 .4961850000D+01 .3342000000D+01 .1523100000D+01 -.4366000000D+01 +4 18120020724200211012452479.4 .3245000000D+00 -.6800000000D-03 .3767033000D+03 .9476000000D+00 .5694000000D-02 .3453000000D+00 .2835460000D+00 .4948400000D+01 .1822300000D+01 -.5811300000D+01 .5400000000D+00 .2700000000D-03 .1725860000D+03 .3584500000D+00 .2156000000D-02 .1897000000D+00 .5145822000D+01 .3425900000D+01 .3125000000D+00 -.5780000000D+00 -.1003800000D+01 -.8100000000D-03 .3376534000D+03 .8698400000D+00 .5232000000D-02 .3810000000D+00 .1814730000D+01 .2193000000D+00 .3364500000D+01 -.3994400000D+01 +4 18220021101200302092452579.4 .2974000000D+00 -.5420000000D-02 .3764644000D+03 .5455200000D+00 .1489000000D-02 .1070000000D+00 .3580497000D+01 .5186900000D+01 .2049600000D+01 -.5008200000D+01 .4947000000D+00 .8300000000D-03 .1706815000D+03 .1821600000D+00 .4320000000D-03 .2542000000D+00 .2181641000D+01 .3661600000D+01 .6175000000D+00 -.6802000000D+00 -.9198000000D+00 -.2590000000D-02 .3387932000D+03 .4568900000D+00 .9190000000D-03 .5612000000D+00 .5113476000D+01 .4694000000D+00 .3415100000D+01 -.3962100000D+01 +4 18320030209200305202452679.4 -.6500000000D-01 -.1640000000D-02 .3764884000D+03 .1100000000D+00 .5093000000D-02 .3763000000D+00 .8056680000D+00 .5825800000D+01 .5361400000D+01 -.4707500000D+01 .5366000000D+00 -.6000000000D-04 .1725614000D+03 .7776000000D-01 .2041000000D-02 .1863000000D+00 .5662536000D+01 .4834500000D+01 .3796100000D+01 -.4440000000D+00 -.1048600000D+01 -.3900000000D-03 .3363102000D+03 .8642000000D-01 .4869000000D-02 .4108000000D+00 .2338173000D+01 .1118900000D+01 .6299000000D+00 -.3731900000D+01 +4 18420030520200308282452779.4 -.1543000000D+00 .1890000000D-02 .3768224000D+03 .1135940000D+01 .2015000000D-02 .5196000000D+00 .4054601000D+01 .2450400000D+01 .6149900000D+01 -.4945700000D+01 .5737000000D+00 -.6500000000D-03 .1736282000D+03 .4440600000D+00 .1067000000D-02 .1778000000D+00 .2644132000D+01 .9586000000D+00 .4879000000D+01 -.5915500000D+01 -.1148700000D+01 .7400000000D-03 .3368705000D+03 .1023520000D+01 .1583000000D-02 .3441000000D+00 .5581887000D+01 .4021200000D+01 .1426100000D+01 -.2966300000D+01 +4 18520030828200312062452879.4 .7700000000D-02 -.1520000000D-02 .3759963000D+03 .7475100000D+00 .6055000000D-02 .3665000000D+00 .9210090000D+00 .5592100000D+01 .2449500000D+01 -.4597600000D+01 .5172000000D+00 -.1200000000D-03 .1662307000D+03 .2831900000D+00 .2298000000D-02 .1966000000D+00 .5835512000D+01 .3835000000D+01 .6627000000D+00 -.5879100000D+01 -.1106900000D+01 .5000000000D-04 .3412664000D+03 .6825500000D+00 .5543000000D-02 .3858000000D+00 .2444747000D+01 .9228000000D+00 .4069100000D+01 -.3031100000D+01 +4 18620031206200403152452979.4 -.6480000000D-01 -.5490000000D-02 .3754534000D+03 .6940200000D+00 .4120000000D-02 .4662000000D+00 .4281926000D+01 .5863400000D+01 .2707900000D+01 -.3845300000D+01 .4781000000D+00 -.2500000000D-03 .1648228000D+03 .2592500000D+00 .1524000000D-02 .1313000000D+00 .2919932000D+01 .4121900000D+01 .1140400000D+01 -.6131300000D+01 -.1061900000D+01 .7200000000D-03 .3429805000D+03 .6339800000D+00 .3656000000D-02 .2994000000D+00 .5805647000D+01 .1268300000D+01 .4394800000D+01 -.3399800000D+01 +4 18720040315200406232453079.4 -.4214000000D+00 -.1070000000D-02 .3758173000D+03 .4178100000D+00 .3863000000D-02 .5062000000D+00 .1478193000D+01 .6269600000D+01 .5901100000D+01 -.3915500000D+01 .4633000000D+00 -.4600000000D-03 .1707468000D+03 .1950800000D+00 .1583000000D-02 .1019000000D+00 .9582100000D-01 .4909800000D+01 .3959400000D+01 -.5426600000D+01 -.1020900000D+01 .2000000000D-03 .3379910000D+03 .3937400000D+00 .3467000000D-02 .2305000000D+00 .3003862000D+01 .1560300000D+01 .1196800000D+01 -.2704300000D+01 +4 18820040623200410012453179.4 -.4996000000D+00 .2020000000D-02 .3763548000D+03 .1152410000D+01 .2904000000D-02 .3683000000D+00 .4678265000D+01 .3056300000D+01 .1508000000D+00 -.4023500000D+01 .4687000000D+00 -.8000000000D-03 .1639469000D+03 .4417500000D+00 .1284000000D-02 .2138000000D+00 .3322706000D+01 .1313800000D+01 .4912400000D+01 -.4986300000D+01 -.1088300000D+01 -.1600000000D-03 .3424772000D+03 .1052860000D+01 .2616000000D-02 .4937000000D+00 .6201808000D+01 .4689500000D+01 .1813500000D+01 -.2145800000D+01 +4 18920041001200501092453279.4 -.3888000000D+00 -.1120000000D-02 .3752098000D+03 .4552100000D+00 .5437000000D-02 .3434000000D+00 .1568689000D+01 .6282100000D+01 .3140600000D+01 -.3454800000D+01 .4138000000D+00 -.5800000000D-03 .1479337000D+03 .1714700000D+00 .2149000000D-02 .2091000000D+00 .2607470000D+00 .4290300000D+01 .1053200000D+01 -.4878900000D+01 -.1132900000D+01 .9100000000D-03 .3501004000D+03 .4114100000D+00 .4949000000D-02 .4854000000D+00 .3093989000D+01 .1606300000D+01 .4766800000D+01 -.2030300000D+01 +4 19020050109200504192453379.4 -.5521000000D+00 -.2820000000D-02 .3755780000D+03 .6437000000D+00 .5660000000D-02 .4697000000D+00 .4992200000D+01 .3092000000D+00 .3449400000D+01 -.3236100000D+01 .3654000000D+00 -.8200000000D-03 .1515892000D+03 .2679600000D+00 .2235000000D-02 .1205000000D+00 .3672736000D+01 .4529000000D+01 .1575600000D+01 -.4230700000D+01 -.1038600000D+01 .2120000000D-02 .3485997000D+03 .6061300000D+00 .5318000000D-02 .2612000000D+00 .2319990000D+00 .1982200000D+01 .5091400000D+01 -.1422800000D+01 +4 19120050419200507282453479.4 -.7470000000D+00 -.3000000000D-03 .3750236000D+03 .6715200000D+00 .2559000000D-02 .4285000000D+00 .2135618000D+01 .6141000000D+00 .2130000000D-01 -.3272000000D+01 .3093000000D+00 -.6400000000D-03 .1578860000D+03 .2765300000D+00 .1206000000D-02 .1404000000D+00 .8038810000D+00 .5214500000D+01 .3976200000D+01 -.3779000000D+01 -.9098000000D+00 .3800000000D-03 .3453310000D+03 .6300800000D+00 .2115000000D-02 .3196000000D+00 .3660242000D+01 .2198000000D+01 .1672700000D+01 -.1090700000D+01 +4 19220050728200511052453579.4 -.7979000000D+00 .1470000000D-02 .3757107000D+03 .1088030000D+01 .3759000000D-02 .3747000000D+00 .5307258000D+01 .3687800000D+01 .6491000000D+00 -.2647900000D+01 .2934000000D+00 -.7900000000D-03 .1408776000D+03 .4101000000D+00 .1498000000D-02 .1958000000D+00 .4020809000D+01 .1636300000D+01 .4985000000D+01 -.4235500000D+01 -.9431000000D+00 -.7800000000D-03 .3533530000D+03 .1018560000D+01 .3609000000D-02 .4862000000D+00 .5538130000D+00 .5335400000D+01 .2313700000D+01 -.1451100000D+01 +4 19320051105200602132453679.4 -.8060000000D+00 -.4400000000D-03 .3754139000D+03 .1173000000D+00 .3844000000D-02 .5403000000D+00 .2238579000D+01 .6752000000D+00 .3839800000D+01 -.2170200000D+01 .2450000000D+00 -.6200000000D-03 .1207953000D+03 .2974000000D-01 .1546000000D-02 .1848000000D+00 .1007988000D+01 .5275800000D+01 .1488000000D+01 -.4244700000D+01 -.9578000000D+00 .5600000000D-03 .3600938000D+03 .7880000000D-01 .3187000000D-02 .4310000000D+00 .3771694000D+01 .2368700000D+01 .5522800000D+01 -.1321900000D+01 +4 19420060213200605242453779.4 -.9578000000D+00 -.8900000000D-03 .3752570000D+03 .4421500000D+00 .6058000000D-02 .4316000000D+00 .5707764000D+01 .9947000000D+00 .4133200000D+01 -.2133100000D+01 .1661000000D+00 -.5400000000D-03 .1322616000D+03 .2100900000D+00 .2367000000D-02 .1447000000D+00 .4444975000D+01 .4881900000D+01 .1986200000D+01 -.3239200000D+01 -.7659000000D+00 .1180000000D-02 .3562068000D+03 .3991200000D+00 .5512000000D-02 .3753000000D+00 .9554400000D+00 .2703700000D+01 .5790800000D+01 -.4658000000D+00 +4 19520060524200609012453879.4 -.1007400000D+01 .1700000000D-03 .3748277000D+03 .8480000000D+00 .1492000000D-02 .2544000000D+00 .2790335000D+01 .1245500000D+01 .1429000000D+00 -.2074100000D+01 .1192000000D+00 -.5900000000D-03 .1334820000D+03 .3160500000D+00 .1003000000D-02 .1745000000D+00 .1525550000D+01 .5516600000D+01 .3953200000D+01 -.2885200000D+01 -.6938000000D+00 .2800000000D-03 .3560347000D+03 .7809000000D+00 .1184000000D-02 .4619000000D+00 .4320619000D+01 .2854300000D+01 .1851100000D+01 -.3253000000D+00 +4 19620060901200612102453979.4 -.1023100000D+01 .3800000000D-03 .3754284000D+03 .9767500000D+00 .4584000000D-02 .4935000000D+00 .5953930000D+01 .4346900000D+01 .1248800000D+01 -.1722000000D+01 .9460000000D-01 -.4800000000D-03 .1073125000D+03 .3714600000D+00 .1855000000D-02 .1024000000D+00 .4769775000D+01 .1959700000D+01 .5127500000D+01 -.3546100000D+01 -.7023000000D+00 -.6700000000D-03 .3651567000D+03 .9169000000D+00 .4347000000D-02 .3662000000D+00 .1211866000D+01 .5971800000D+01 .2871900000D+01 -.4256000000D+00 +4 19720061210200703202454079.4 -.1072100000D+01 -.1230000000D-02 .3761347000D+03 .2411800000D+00 .1095000000D-02 .7032000000D+00 .2933806000D+01 .4619100000D+01 .4402900000D+01 -.1597900000D+01 .3540000000D-01 .3000000000D-04 .8907480000D+02 .1393600000D+00 .4760000000D-03 .4370000000D-01 .1824106000D+01 .1829600000D+01 .2071000000D+01 -.3943400000D+01 -.5886000000D+00 .1600000000D-03 .3687220000D+03 .2115800000D+00 .1023000000D-02 .2925000000D+00 .4482492000D+01 .6109700000D+01 .2545000000D+00 -.5927700000D+01 +4 19820070320200706282454179.4 -.1152800000D+01 -.7800000000D-03 .3750746000D+03 .1396400000D+00 .5271000000D-02 .4438000000D+00 .1434660000D+00 .1536000000D+01 .4778700000D+01 -.1225000000D+01 -.3810000000D-01 .0000000000D+00 .1069372000D+03 .1233400000D+00 .2158000000D-02 .1228000000D+00 .5242911000D+01 .5128200000D+01 .2374100000D+01 -.2054700000D+01 -.3647000000D+00 .3000000000D-03 .3644008000D+03 .1317500000D+00 .4967000000D-02 .4339000000D+00 .1683262000D+01 .3377400000D+01 .1703000000D+00 -.5639700000D+01 +4 19920070628200710062454279.4 -.1177400000D+01 .3900000000D-03 .3753384000D+03 .9466800000D+00 .1227000000D-02 .3613000000D+00 .3450517000D+01 .1881300000D+01 .6099900000D+01 -.5607000000D+00 -.4230000000D-01 -.4000000000D-03 .9929700000D+02 .3385900000D+00 .8350000000D-03 .1412000000D+00 .2295045000D+01 .5799800000D+01 .3898400000D+01 -.2117100000D+01 -.3750000000D+00 .2400000000D-03 .3668469000D+03 .8714500000D+00 .1041000000D-02 .4136000000D+00 .4992929000D+01 .3506600000D+01 .1539300000D+01 -.5851000000D+01 +4 20020071006200801142454379.4 -.1160500000D+01 -.4300000000D-03 .3758459000D+03 .8153000000D+00 .5158000000D-02 .4496000000D+00 .3381030000D+00 .5017600000D+01 .1885000000D+01 -.8445000000D+00 -.6280000000D-01 -.5000000000D-04 .6816930000D+02 .3142400000D+00 .2237000000D-02 .2710000000D-01 .5639985000D+01 .2342400000D+01 .5440300000D+01 -.1280100000D+01 -.3812000000D+00 .3900000000D-03 .3737904000D+03 .7630600000D+00 .4793000000D-02 .3796000000D+00 .1892845000D+01 .3395000000D+00 .3493100000D+01 -.5422500000D+01 +4 20120080114200804232454479.4 -.1143000000D+01 -.2120000000D-02 .3758632000D+03 .4966400000D+00 .1863000000D-02 .4119000000D+00 .3656830000D+01 .5265800000D+01 .2125000000D+01 -.9322000000D+00 -.1275000000D+00 .5700000000D-03 .5814270000D+02 .2573500000D+00 .6680000000D-03 .9310000000D-01 .2772689000D+01 .2445500000D+01 .5526400000D+01 -.4640000000D+00 -.1784000000D+00 .1470000000D-02 .3754046000D+03 .4218500000D+00 .1389000000D-02 .5902000000D+00 .5219009000D+01 .6385000000D+00 .3698400000D+01 -.4882400000D+01 +4 20220080423200808012454579.4 -.1171700000D+01 -.1130000000D-02 .3755775000D+03 .1611400000D+00 .4065000000D-02 .3431000000D+00 .8602430000D+00 .5713200000D+01 .5428100000D+01 -.8340000000D-01 -.1622000000D+00 .4500000000D-03 .7616160000D+02 .5096000000D-01 .1830000000D-02 .1163000000D+00 .6103717000D+01 .4669700000D+01 .2728400000D+01 -.1053400000D+01 .5810000000D-01 .3800000000D-03 .3713904000D+03 .1501400000D+00 .3978000000D-02 .5335000000D+00 .2412224000D+01 .1108800000D+01 .7396000000D+00 -.4784900000D+01 +4 20320080801200811092454679.4 -.1241500000D+01 .6100000000D-03 .3761894000D+03 .9834900000D+00 .1817000000D-02 .4983000000D+00 .4120301000D+01 .2528200000D+01 .6094300000D+01 -.6033900000D+01 -.1132000000D+00 -.1800000000D-03 .5980120000D+02 .3585100000D+00 .8100000000D-03 .5110000000D-01 .3211050000D+01 .6108400000D+01 .3663900000D+01 -.1488900000D+01 .1760000000D-01 .2600000000D-03 .3747404000D+03 .9227900000D+00 .1644000000D-02 .2986000000D+00 .5677916000D+01 .4144700000D+01 .1548100000D+01 -.4617900000D+01 +4 20420081109200902172454779.4 -.1226100000D+01 .2000000000D-03 .3763182000D+03 .5795700000D+00 .5027000000D-02 .4247000000D+00 .1025494000D+01 .5716500000D+01 .2573700000D+01 -.5999700000D+01 -.1063000000D+00 -.2000000000D-04 .3459970000D+02 .2153800000D+00 .2288000000D-02 .3480000000D-01 .6829270000D+00 .2821900000D+01 .5926200000D+01 -.5787100000D+01 -.1150000000D-01 .1900000000D-02 .3775744000D+03 .5604400000D+00 .4850000000D-02 .3743000000D+00 .2593640000D+01 .1006000000D+01 .4148500000D+01 -.4287700000D+01 +4 20520090217200905282454879.4 -.1122600000D+01 -.8700000000D-03 .3760606000D+03 .5541400000D+00 .3744000000D-02 .3284000000D+00 .4405388000D+01 .5994000000D+01 .2841700000D+01 -.5361800000D+01 -.1533000000D+00 .3600000000D-03 .3421570000D+02 .2972900000D+00 .1512000000D-02 .8160000000D-01 .4058744000D+01 .3095600000D+01 .6238300000D+01 -.2014000000D+00 .2237000000D+00 .2920000000D-02 .3781419000D+03 .5292000000D+00 .3573000000D-02 .5392000000D+00 .5972956000D+01 .1356400000D+01 .4497800000D+01 -.4236700000D+01 +4 20620090528200909052454979.4 -.1063900000D+01 -.1070000000D-02 .3759475000D+03 .3990600000D+00 .2977000000D-02 .4431000000D+00 .1574903000D+01 .6280000000D-01 .6029800000D+01 -.5090300000D+01 -.1666000000D+00 .8100000000D-03 .4402520000D+02 .1016200000D+00 .1432000000D-02 .5240000000D-01 .9090500000D+00 .3800400000D+01 .3038900000D+01 -.5974000000D+00 .4649000000D+00 .7200000000D-03 .3762386000D+03 .4034500000D+00 .2830000000D-02 .4443000000D+00 .3140377000D+01 .1688900000D+01 .1236600000D+01 -.3989800000D+01 +4 20720090905200912142455079.4 -.1181600000D+01 .9100000000D-03 .3768967000D+03 .9734700000D+00 .2651000000D-02 .4441000000D+00 .4801537000D+01 .3194800000D+01 .2177000000D+00 -.5262900000D+01 -.6550000000D-01 .1000000000D-04 .3053000000D+02 .3662200000D+00 .1114000000D-02 .5260000000D-01 .4793541000D+01 .1944000000D+00 .3601200000D+01 -.3810700000D+01 .4354000000D+00 .9000000000D-04 .3777445000D+03 .9469300000D+00 .2586000000D-02 .4035000000D+00 .8987800000D-01 .4773000000D+01 .1877100000D+01 -.3216300000D+01 +4 20820091214201003242455179.4 -.1213500000D+01 .2270000000D-02 .3766567000D+03 .2945200000D+00 .4152000000D-02 .3427000000D+00 .1734570000D+01 .1899000000D+00 .3331900000D+01 -.5007200000D+01 -.9600000000D-02 -.5200000000D-03 .4005570000D+02 .8455000000D-01 .1883000000D-02 .7960000000D-01 .2619143000D+01 .3411400000D+01 .2544000000D+00 -.4008500000D+01 .4090000000D+00 .2150000000D-02 .3764856000D+03 .2789300000D+00 .3976000000D-02 .4721000000D+00 .3309934000D+01 .1685100000D+01 .4816900000D+01 -.2983200000D+01 +4 20920100324201007022455279.4 -.9993000000D+00 .1160000000D-02 .3768637000D+03 .4738500000D+00 .4760000000D-02 .4475000000D+00 .5166884000D+01 .4873000000D+00 .3622600000D+01 -.4379700000D+01 -.5440000000D-01 .1000000000D-03 .3366060000D+02 .2665000000D+00 .2005000000D-02 .1410000000D-01 .5830392000D+01 .3752300000D+01 .5805000000D+00 -.3374500000D+01 .6568000000D+00 .2360000000D-02 .3771328000D+03 .4672100000D+00 .4710000000D-02 .3635000000D+00 .4574300000D+00 .2020700000D+01 .5169400000D+01 -.3028700000D+01 +4 21020100702201010102455379.4 -.8411000000D+00 -.6900000000D-03 .3761935000D+03 .6018600000D+00 .1976000000D-02 .5231000000D+00 .2289685000D+01 .7682000000D+00 .1982000000D+00 -.4303800000D+01 -.5680000000D-01 .1040000000D-02 .3168840000D+02 .1915100000D+00 .9910000000D-03 .6620000000D-01 .2750547000D+01 .4024100000D+01 .3230000000D+01 -.2267200000D+01 .8156000000D+00 .7700000000D-03 .3773811000D+03 .6033700000D+00 .1826000000D-02 .3134000000D+00 .3864313000D+01 .2307800000D+01 .1655100000D+01 -.2708700000D+01 +4 21120101010201101182455479.4 -.9752000000D+00 .1010000000D-02 .3772198000D+03 .9312500000D+00 .3600000000D-02 .3361000000D+00 .5493538000D+01 .3887600000D+01 .8127000000D+00 -.4018300000D+01 .7710000000D-01 .1600000000D-03 .5073410000D+02 .3487700000D+00 .1534000000D-02 .9000000000D-01 .3280300000D+00 .6099000000D+00 .3861300000D+01 -.3071800000D+01 .8156000000D+00 -.3500000000D-03 .3753602000D+03 .9324900000D+00 .3687000000D-02 .5180000000D+00 .7897500000D+00 .5401100000D+01 .2339300000D+01 -.2374700000D+01 +5 21219990101199904012451179.4 .7828000000D+00 -.1980000000D-02 .5269287000D+03 .2893900000D+00 .5604000000D-02 .5225000000D+00 .3249630000D+01 .1725000000D+01 .1564700000D+01 .7685000000D+00 .2155000000D+00 -.1050000000D-02 .1327857000D+03 .1189100000D+00 .2047000000D-02 .1532000000D+00 .1560076000D+01 .1321600000D+01 .1038100000D+01 -.8370000000D-01 -.7818000000D+00 .9200000000D-03 .5103504000D+03 .2726500000D+00 .5595000000D-02 .3765000000D+00 .4827369000D+01 .3288500000D+01 .2986900000D+01 .2431200000D+01 +5 21319990401199906302451269.4 .8802000000D+00 -.3600000000D-03 .5272782000D+03 .1299300000D+01 .2104000000D-02 .4495000000D+00 .2644948000D+01 .1056800000D+01 .4675600000D+01 -.1741000000D+00 .2036000000D+00 .1800000000D-03 .1571468000D+03 .4846400000D+00 .1218000000D-02 .1405000000D+00 .1018486000D+01 .5039000000D+00 .4372500000D+01 -.1722900000D+01 -.5362000000D+00 -.5700000000D-03 .5040593000D+03 .1264620000D+01 .1838000000D-02 .4617000000D+00 .4221300000D+01 .2508400000D+01 .6140900000D+01 .1077700000D+01 +5 21419990630199909282451359.4 .8666000000D+00 .1400000000D-03 .5275671000D+03 .9166900000D+00 .7304000000D-02 .3365000000D+00 .1979644000D+01 .3783000000D+00 .3522200000D+01 -.1410200000D+01 .1643000000D+00 .2500000000D-03 .1867985000D+03 .3159000000D+00 .2719000000D-02 .1434000000D+00 .4210030000D+00 .5842200000D+01 .2779600000D+01 .3348700000D+01 -.4021000000D+00 -.5500000000D-03 .4933898000D+03 .9093200000D+00 .7248000000D-02 .3585000000D+00 .3549177000D+01 .1851600000D+01 .4976200000D+01 .1768000000D+00 +5 21519990928199912272451449.4 .6841000000D+00 -.2340000000D-02 .5270853000D+03 .6783500000D+00 .1442000000D-02 .1547000000D+00 .1458395000D+01 .3035000000D+01 .6048000000D+01 .3588300000D+01 .1999000000D+00 -.1790000000D-02 .1904059000D+03 .2768400000D+00 .7370000000D-03 .1528000000D+00 .6195195000D+01 .2348700000D+01 .5187800000D+01 .1387400000D+01 -.7710000000D+00 .4980000000D-02 .4921883000D+03 .7228600000D+00 .1862000000D-02 .3756000000D+00 .3023333000D+01 .4459100000D+01 .1004400000D+01 -.2084700000D+01 +5 21619991227200003262451539.4 .7983000000D+00 .1290000000D-02 .5273152000D+03 .8203000000D-01 .7231000000D-02 .3390000000D+00 .1076244000D+01 .2362800000D+01 .5713800000D+01 .3310600000D+01 .1641000000D+00 .8500000000D-03 .1752678000D+03 .1448000000D-01 .2643000000D-02 .6490000000D-01 .5781917000D+01 .1721000000D+01 .5010400000D+01 .2040400000D+01 -.3847000000D+00 -.1260000000D-02 .4969885000D+03 .6522000000D-01 .6924000000D-02 .2586000000D+00 .2648382000D+01 .3798100000D+01 .9090000000D+00 -.1125200000D+01 +5 21720000326200006242451629.4 .6987000000D+00 .3580000000D-02 .5276206000D+03 .1240770000D+01 .1161000000D-02 .3493000000D+00 .5089660000D+00 .5196700000D+01 .3462000000D+01 .2586300000D+01 .1159000000D+00 .6300000000D-03 .1895342000D+03 .4766500000D+00 .1038000000D-02 .5160000000D-01 .5237529000D+01 .4436700000D+01 .2466900000D+01 .8140000000D+00 -.3474000000D+00 .1610000000D-02 .4921393000D+03 .1211210000D+01 .1275000000D-02 .2809000000D+00 .2076491000D+01 .3976000000D+00 .4842800000D+01 -.2521700000D+01 +5 21820000624200009222451719.4 .7587000000D+00 .1790000000D-02 .5273219000D+03 .1189870000D+01 .7027000000D-02 .2443000000D+00 .6112651000D+01 .4496800000D+01 .1364200000D+01 .1147700000D+01 .1496000000D+00 -.6800000000D-03 .2140567000D+03 .4191800000D+00 .2575000000D-02 .1395000000D+00 .4607700000D+01 .3462800000D+01 .4169000000D+00 -.3733000000D+00 -.2954000000D+00 .2310000000D-02 .4828243000D+03 .1133710000D+01 .6637000000D-02 .3263000000D+00 .1387025000D+01 .5980500000D+01 .2841200000D+01 .2710000000D+01 +5 21920000922200012212451809.4 .1270500000D+01 -.4100000000D-02 .5274027000D+03 .4320600000D+00 .1730000000D-02 .5939000000D+00 .5540992000D+01 .8126000000D+00 .1115700000D+01 -.1080000000D-01 .1711000000D+00 .1360000000D-02 .2201211000D+03 .1585900000D+00 .5980000000D-03 .2030000000D+00 .4057911000D+01 .6174600000D+01 .6278100000D+01 -.1814200000D+01 -.5690000000D-01 -.6890000000D-02 .4789495000D+03 .3905400000D+00 .2264000000D-02 .6477000000D+00 .8095520000D+00 .2162000000D+01 .2647500000D+01 .9832000000D+00 +5 22020001221200103212451899.4 .7936000000D+00 .4400000000D-03 .5269617000D+03 .4410300000D+00 .8204000000D-02 .3156000000D+00 .5162866000D+01 .4224000000D+00 .3571900000D+01 -.1290100000D+01 .1522000000D+00 -.1000000000D-03 .2104877000D+03 .1471900000D+00 .3047000000D-02 .1308000000D+00 .3656993000D+01 .5720100000D+01 .2606100000D+01 .3538100000D+01 -.3752000000D+00 .1280000000D-02 .4837369000D+03 .4417800000D+00 .8094000000D-02 .2309000000D+00 .4383560000D+00 .1929200000D+01 .5054100000D+01 .1990000000D+00 +5 22120010321200106192451989.4 .7969000000D+00 -.5100000000D-03 .5272080000D+03 .1109010000D+01 .2147000000D-02 .2073000000D+00 .4640752000D+01 .3075700000D+01 .2221200000D+01 -.2416600000D+01 .2080000000D+00 -.1720000000D-02 .2162937000D+03 .4366600000D+00 .1103000000D-02 .1247000000D+00 .3141043000D+01 .2077400000D+01 .7814000000D+00 .1797300000D+01 -.4618000000D+00 .4540000000D-02 .4810923000D+03 .1095990000D+01 .1580000000D-02 .2339000000D+00 .6198556000D+01 .4537900000D+01 .3767600000D+01 -.1499600000D+01 +5 22220010619200109172452079.4 .1008100000D+01 -.2730000000D-02 .5272947000D+03 .1370310000D+01 .5881000000D-02 .1941000000D+00 .3958029000D+01 .2325500000D+01 .5514500000D+01 .2148000000D+01 .1667000000D+00 -.6500000000D-03 .2324173000D+03 .5146700000D+00 .2362000000D-02 .1173000000D+00 .2495257000D+01 .1114200000D+01 .4407400000D+01 .1204900000D+01 -.2301000000D+00 .1580000000D-02 .4744922000D+03 .1304420000D+01 .5746000000D-02 .2429000000D+00 .5502305000D+01 .3858100000D+01 .7598000000D+00 -.2070600000D+01 +5 22320010917200112162452169.4 .6292000000D+00 .4900000000D-02 .5259674000D+03 .4916000000D-01 .5374000000D-02 .4196000000D+00 .3338628000D+01 .3416400000D+01 .5038900000D+01 .2997300000D+01 -.2800000000D-02 .4300000000D-03 .2365110000D+03 .1594000000D-01 .1820000000D-02 .1106000000D+00 .1904366000D+01 .4715900000D+01 .3637500000D+01 .8370000000D+00 .1075000000D+00 .2800000000D-03 .4724573000D+03 .2747000000D-01 .5071000000D-02 .3039000000D+00 .4877757000D+01 .4313300000D+01 .2122000000D+00 -.2432400000D+01 +5 22420011216200203162452259.4 .8512000000D+00 .9800000000D-03 .5265917000D+03 .7935600000D+00 .8602000000D-02 .2901000000D+00 .2941406000D+01 .4521800000D+01 .1378500000D+01 .1399600000D+01 .9420000000D-01 .2200000000D-03 .2333778000D+03 .2740800000D+00 .3191000000D-02 .1273000000D+00 .1491767000D+01 .3270600000D+01 .1869000000D+00 -.2540000000D+00 -.6260000000D-01 -.2800000000D-03 .4739159000D+03 .7425300000D+00 .8032000000D-02 .2931000000D+00 .4483606000D+01 .6039900000D+01 .2886000000D+01 .2751200000D+01 +5 22520020316200206142452349.4 .1059300000D+01 -.2120000000D-02 .5260586000D+03 .9268400000D+00 .3336000000D-02 .4846000000D+00 .2472850000D+01 .9257000000D+00 .4213000000D+00 .9900000000D-02 .1453000000D+00 -.1600000000D-03 .2349095000D+03 .3646200000D+00 .1569000000D-02 .1860000000D+00 .1016127000D+01 .6048500000D+01 .5131100000D+01 -.1611600000D+01 -.1003000000D+00 -.5700000000D-03 .4732942000D+03 .8545000000D+00 .3214000000D-02 .4247000000D+00 .4015868000D+01 .2395300000D+01 .2056300000D+01 .1170900000D+01 +5 22620020614200209122452439.4 .9295000000D+00 .1010000000D-02 .5264829000D+03 .1471580000D+01 .4600000000D-02 .3875000000D+00 .1797255000D+01 .1826000000D+00 .3491100000D+01 -.1461000000D+01 -.1120000000D-01 .4400000000D-03 .2418061000D+03 .5738700000D+00 .1932000000D-02 .2227000000D+00 .3730470000D+00 .5052500000D+01 .2179500000D+01 .3542100000D+01 .1726000000D+00 -.8300000000D-03 .4707371000D+03 .1393050000D+01 .4388000000D-02 .4537000000D+00 .3331205000D+01 .1716500000D+01 .4945900000D+01 .3093000000D+00 +5 22720020912200212112452529.4 .9165000000D+00 -.2140000000D-02 .5249276000D+03 .4692100000D+00 .7781000000D-02 .1424000000D+00 .1141334000D+01 .5874700000D+01 .2718400000D+01 -.2531100000D+01 .5930000000D-01 -.3600000000D-03 .2394127000D+03 .1669000000D+00 .2814000000D-02 .1087000000D+00 .6030644000D+01 .4267800000D+01 .1168300000D+01 .2123000000D+01 .3150000000D-01 .8100000000D-03 .4723401000D+03 .4155400000D+00 .7024000000D-02 .2489000000D+00 .2667326000D+01 .1180300000D+01 .4312900000D+01 -.1300700000D+01 +5 22820021211200303112452619.4 .8853000000D+00 -.2940000000D-02 .5252171000D+03 .9788200000D+00 .7195000000D-02 .1258000000D+00 .7014730000D+00 .2267900000D+01 .5402100000D+01 .1992100000D+01 .1120000000D+00 -.9000000000D-03 .2402490000D+03 .3700300000D+00 .2873000000D-02 .1385000000D+00 .5584819000D+01 .7874000000D+00 .3994400000D+01 .1087100000D+01 -.9390000000D-01 .1730000000D-02 .4722839000D+03 .9243500000D+00 .6906000000D-02 .2858000000D+00 .2229599000D+01 .3873700000D+01 .7044000000D+00 -.2267200000D+01 +5 22920030311200306092452709.4 .7484000000D+00 .3040000000D-02 .5255512000D+03 .6112700000D+00 .5159000000D-02 .3693000000D+00 .2847490000D+00 .5015600000D+01 .4762100000D+01 .2834300000D+01 -.3000000000D-01 .2500000000D-03 .2427199000D+03 .2641500000D+00 .2028000000D-02 .9360000000D-01 .5152031000D+01 .3780400000D+01 .3023400000D+01 .1217800000D+01 .1930000000D+00 .5900000000D-03 .4696542000D+03 .5611700000D+00 .4681000000D-02 .2202000000D+00 .1813491000D+01 .2928000000D+00 .1730000000D-01 -.2299400000D+01 +5 23020030609200309072452799.4 .6711000000D+00 .1220000000D-02 .5252216000D+03 .1517510000D+01 .3394000000D-02 .2228000000D+00 .5916234000D+01 .4309500000D+01 .1476300000D+01 .1478700000D+01 .3500000000D-01 -.1830000000D-02 .2417458000D+03 .5806100000D+00 .1495000000D-02 .1919000000D+00 .4526533000D+01 .2739100000D+01 .1617000000D+00 .1700000000D-02 .1455000000D+00 .3690000000D-02 .4719560000D+03 .1371360000D+01 .2826000000D-02 .3216000000D+00 .1157120000D+01 .5878000000D+01 .3017500000D+01 .2975100000D+01 +5 23120030907200312062452889.4 .7798000000D+00 .7000000000D-04 .5245713000D+03 .8448100000D+00 .8458000000D-02 .3056000000D+00 .5233362000D+01 .3635400000D+01 .4941000000D+00 -.1246000000D+00 -.6090000000D-01 -.4000000000D-04 .2303393000D+03 .3244600000D+00 .3250000000D-02 .1484000000D+00 .3881431000D+01 .1865500000D+01 .4990500000D+01 -.1495400000D+01 .3500000000D+00 -.5000000000D-04 .4776876000D+03 .7803000000D+00 .7825000000D-02 .3045000000D+00 .4717340000D+00 .5250700000D+01 .2110700000D+01 .1435600000D+01 +5 23220031206200403052452979.4 .1011200000D+01 .4700000000D-03 .5244805000D+03 .9326800000D+00 .4345000000D-02 .4103000000D+00 .4741272000D+01 .5460000000D-01 .3175000000D+01 -.1228900000D+01 -.1850000000D+00 .2970000000D-02 .2292333000D+03 .3752200000D+00 .1767000000D-02 .2973000000D+00 .3389980000D+01 .4524400000D+01 .1392000000D+01 .3613200000D+01 .5832000000D+00 -.7050000000D-02 .4785089000D+03 .8937100000D+00 .4204000000D-02 .6828000000D+00 .6260439000D+01 .1632700000D+01 .4660400000D+01 .3804000000D+00 +5 23320040305200406032453069.4 .7447000000D+00 -.1500000000D-02 .5246643000D+03 .2139400000D+00 .6879000000D-02 .1712000000D+00 .4359106000D+01 .2953200000D+01 .2636300000D+01 -.2241000000D+01 .5360000000D-01 -.1770000000D-02 .2379698000D+03 .1211100000D+00 .2571000000D-02 .8680000000D-01 .2988325000D+01 .1666400000D+01 .8766000000D+00 .1831600000D+01 .6340000000D-01 .3660000000D-02 .4729968000D+03 .2177100000D+00 .6044000000D-02 .2171000000D+00 .5881665000D+01 .4382000000D+01 .4281800000D+01 -.1466800000D+01 +5 23420040603200409012453159.4 .8862000000D+00 -.3960000000D-02 .5248454000D+03 .1435430000D+01 .1885000000D-02 .1571000000D+00 .3748170000D+01 .2139400000D+01 .5968500000D+01 .2025500000D+01 -.3120000000D-01 -.2000000000D-03 .2316742000D+03 .5553900000D+00 .1344000000D-02 .6850000000D-01 .2395329000D+01 .4431000000D+00 .4519800000D+01 .1821800000D+01 .1984000000D+00 .2020000000D-02 .4770711000D+03 .1309690000D+01 .1827000000D-02 .2273000000D+00 .5268078000D+01 .3766200000D+01 .1280800000D+01 -.2064000000D+01 +5 23520040901200411302453249.4 .7566000000D+00 -.1620000000D-02 .5241305000D+03 .1133040000D+01 .8112000000D-02 .2355000000D+00 .3053316000D+01 .1441400000D+01 .4583400000D+01 .1598400000D+01 -.1372000000D+00 .7300000000D-03 .2113565000D+03 .4245900000D+00 .3040000000D-02 .5270000000D-01 .1745673000D+01 .5740600000D+01 .2572800000D+01 .1111800000D+01 .4434000000D+00 -.3500000000D-03 .4873061000D+03 .1019370000D+01 .7265000000D-02 .1833000000D+00 .4576437000D+01 .3078200000D+01 .6232000000D+01 .3343700000D+01 +5 23620041130200502282453339.4 .2108000000D+00 .5730000000D-02 .5245851000D+03 .7146000000D+00 .1036000000D-02 .2879000000D+00 .2506100000D+01 .4082900000D+01 .4455000000D+00 .2572100000D+01 -.2540000000D-01 -.2540000000D-02 .2025532000D+03 .2736500000D+00 .3260000000D-03 .2759000000D+00 .1215637000D+01 .1921400000D+01 .4001500000D+01 .2738000000D+00 .4619000000D+00 .3660000000D-02 .4899287000D+03 .6009700000D+00 .5870000000D-03 .4572000000D+00 .4031443000D+01 .5695200000D+01 .1528000000D+01 .3370300000D+01 +5 23720050228200505292453429.4 .8217000000D+00 -.1560000000D-02 .5236897000D+03 .1838900000D+00 .7863000000D-02 .3750000000D+00 .2137609000D+01 .3558200000D+01 .5079000000D+00 .1199000000D+00 -.1159000000D+00 .7800000000D-03 .2187277000D+03 .9828000000D-01 .3123000000D-02 .1545000000D+00 .8163890000D+00 .1198700000D+01 .4858700000D+01 -.1632700000D+01 .4326000000D+00 -.1300000000D-02 .4834469000D+03 .1755900000D+00 .7314000000D-02 .3467000000D+00 .3659778000D+01 .5402300000D+01 .2159400000D+01 .1360200000D+01 +5 23820050529200508272453519.4 .7170000000D+00 -.2700000000D-03 .5242195000D+03 .1262420000D+01 .1527000000D-02 .3486000000D+00 .1576762000D+01 .6281900000D+01 .4806700000D+01 -.1299600000D+01 -.1693000000D+00 .5900000000D-03 .2121810000D+03 .4960000000D+00 .1169000000D-02 .1660000000D+00 .2689130000D+00 .4394500000D+01 .2610200000D+01 .3611500000D+01 .5663000000D+00 -.1180000000D-02 .4864372000D+03 .1170520000D+01 .1058000000D-02 .4487000000D+00 .3100902000D+01 .1616400000D+01 .1245000000D+00 .4150000000D+00 +5 23920050827200511252453609.4 .4686000000D+00 .1480000000D-02 .5244529000D+03 .1279800000D+01 .6728000000D-02 .4216000000D+00 .8858450000D+00 .5543800000D+01 .2422700000D+01 -.2402700000D+01 -.1221000000D+00 -.8300000000D-03 .1840258000D+03 .4797000000D+00 .2575000000D-02 .7780000000D-01 .5913267000D+01 .3378000000D+01 .2582000000D+00 .1978200000D+01 .6586000000D+00 -.1600000000D-03 .4982002000D+03 .1181360000D+01 .6300000000D-02 .3151000000D+00 .2415852000D+01 .9253000000D+00 .4098000000D+01 -.6200000000D+00 +5 24020051125200602232453699.4 .7727000000D+00 -.5750000000D-02 .5236257000D+03 .2924600000D+00 .3249000000D-02 .2941000000D+00 .2929240000D+00 .1681000000D+01 .2128000000D+01 .1089500000D+01 -.1379000000D+00 .1800000000D-02 .1654686000D+03 .1253200000D+00 .1412000000D-02 .1053000000D+00 .5363729000D+01 .5517600000D+01 .6076500000D+01 .3274000000D+01 .3626000000D+00 -.1400000000D-03 .5043214000D+03 .2532600000D+00 .2720000000D-02 .2157000000D+00 .1830544000D+01 .3546000000D+01 .3655100000D+01 -.2248800000D+01 +5 24120060223200605242453789.4 .4981000000D+00 .4700000000D-03 .5238422000D+03 .5493100000D+00 .8322000000D-02 .2074000000D+00 .6194736000D+01 .1485900000D+01 .4625500000D+01 .2419500000D+01 -.1218000000D+00 -.1200000000D-03 .1845220000D+03 .2449500000D+00 .3270000000D-02 .9130000000D-01 .4938452000D+01 .5418400000D+01 .2447700000D+01 .1123900000D+01 .5421000000D+00 .1000000000D-03 .4976465000D+03 .4948400000D+00 .7537000000D-02 .2112000000D+00 .1441734000D+01 .3164400000D+01 .6272300000D+01 -.2488400000D+01 +5 24220060524200608222453879.4 .3564000000D+00 .9300000000D-03 .5235779000D+03 .1048280000D+01 .2078000000D-02 .2120000000D+00 .5689689000D+01 .4130400000D+01 .3399500000D+01 .1856600000D+01 -.8080000000D-01 -.1170000000D-02 .1835984000D+03 .3905700000D+00 .1252000000D-02 .1695000000D+00 .4435301000D+01 .2044600000D+01 .8988000000D+00 .2413000000D+00 .5371000000D+00 .2560000000D-02 .4982891000D+03 .9377000000D+00 .2146000000D-02 .3032000000D+00 .9370500000D+00 .5761100000D+01 .5145700000D+01 .3122600000D+01 +5 24320060822200611202453969.4 .3565000000D+00 -.1910000000D-02 .5245120000D+03 .1334890000D+01 .5251000000D-02 .2922000000D+00 .5013674000D+01 .3409100000D+01 .3550000000D+00 .2501000000D+00 -.6470000000D-01 .1000000000D-04 .1506960000D+03 .5169900000D+00 .2137000000D-02 .1008000000D+00 .3829353000D+01 .1037400000D+01 .4292500000D+01 -.1068800000D+01 .4890000000D+00 .2980000000D-02 .5092004000D+03 .1253510000D+01 .4890000000D-02 .2381000000D+00 .2716510000D+00 .5040400000D+01 .1966500000D+01 .2280900000D+01 +5 24420061120200702182454059.4 .2937000000D+00 .3200000000D-02 .5238611000D+03 .1628700000D+00 .5820000000D-02 .3849000000D+00 .4390597000D+01 .2957800000D+01 .6006900000D+01 -.1497600000D+01 -.1499000000D+00 -.5400000000D-03 .1227036000D+03 .4755000000D-01 .2405000000D-02 .4650000000D-01 .3288562000D+01 .1063700000D+01 .3503900000D+01 .3381700000D+01 .9039000000D+00 -.3410000000D-02 .5161282000D+03 .1239900000D+00 .5154000000D-02 .4887000000D+00 .5937961000D+01 .4631500000D+01 .1423600000D+01 .4916000000D+00 +5 24520070218200705192454149.4 .3819000000D+00 .1210000000D-02 .5241149000D+03 .7721700000D+00 .7403000000D-02 .3266000000D+00 .3974346000D+01 .5552100000D+01 .2412000000D+01 -.2244000000D+01 -.1539000000D+00 .2100000000D-03 .1383413000D+03 .3516900000D+00 .3011000000D-02 .7170000000D-01 .2819449000D+01 .3057100000D+01 .9200000000D-02 .2873900000D+01 .7109000000D+00 -.1610000000D-02 .5124328000D+03 .7189400000D+00 .6969000000D-02 .3380000000D+00 .5518386000D+01 .9639000000D+00 .4081800000D+01 -.3839000000D+00 +5 24620070519200708172454239.4 .4813000000D+00 -.4040000000D-02 .5241659000D+03 .7427000000D+00 .3488000000D-02 .1035000000D+00 .3520436000D+01 .1956400000D+01 .1653100000D+01 .2100200000D+01 -.1005000000D+00 .7500000000D-03 .1462889000D+03 .2649500000D+00 .1699000000D-02 .5150000000D-01 .2343113000D+01 .6022100000D+01 .5211400000D+01 .3131800000D+01 .4708000000D+00 .1590000000D-02 .5096379000D+03 .6923900000D+00 .3251000000D-02 .2236000000D+00 .5061151000D+01 .3633100000D+01 .3206700000D+01 -.1926700000D+01 +5 24720070817200711152454329.4 .4223000000D+00 -.2990000000D-02 .5245922000D+03 .1346580000D+01 .3892000000D-02 .2135000000D+00 .2871376000D+01 .1272100000D+01 .4564700000D+01 .1482100000D+01 -.1751000000D+00 .1530000000D-02 .1138156000D+03 .5255500000D+00 .1587000000D-02 .7390000000D-01 .1793945000D+01 .4978700000D+01 .2086700000D+01 .2936800000D+01 .6863000000D+00 -.1590000000D-02 .5185040000D+03 .1240980000D+01 .3405000000D-02 .9400000000D-01 .4421786000D+01 .2895400000D+01 .6248300000D+01 .3271200000D+01 +5 24820071115200802132454419.4 .7610000000D-01 .3400000000D-03 .5250071000D+03 .5042400000D+00 .6871000000D-02 .2027000000D+00 .2226731000D+01 .6618000000D+00 .3806900000D+01 .1368100000D+01 -.1990000000D-01 -.3400000000D-03 .7922670000D+02 .1802000000D+00 .3030000000D-02 .7550000000D-01 .1339679000D+01 .4335500000D+01 .1083900000D+01 .3352000000D+00 .6164000000D+00 .1530000000D-02 .5236337000D+03 .4896200000D+00 .6642000000D-02 .2786000000D+00 .3786037000D+01 .2285100000D+01 .5430300000D+01 .3152200000D+01 +5 24920080213200805132454509.4 .2200000000D-02 .1310000000D-02 .5251062000D+03 .8258800000D+00 .5511000000D-02 .2172000000D+00 .1768911000D+01 .3380000000D+01 .2341000000D+00 .6226000000D+00 .2070000000D-01 -.1420000000D-02 .8599780000D+02 .4087600000D+00 .2442000000D-02 .1199000000D+00 .8203120000D+00 .6564000000D+00 .3812800000D+01 -.2954000000D+00 .5652000000D+00 .3260000000D-02 .5228776000D+03 .7898900000D+00 .5234000000D-02 .3299000000D+00 .3325527000D+01 .4975800000D+01 .1796600000D+01 .2711700000D+01 +5 25020080513200808112454599.4 .2914000000D+00 -.2600000000D-03 .5246535000D+03 .4053200000D+00 .4874000000D-02 .2899000000D+00 .1351548000D+01 .6132200000D+01 .5878000000D+01 -.1036700000D+01 -.1550000000D+00 .8600000000D-03 .1026578000D+03 .1401000000D+00 .2084000000D-02 .6940000000D-01 .3166470000D+00 .3778300000D+01 .3092900000D+01 -.2647600000D+01 .7787000000D+00 -.2270000000D-02 .5196337000D+03 .4039800000D+00 .4470000000D-02 .4194000000D+00 .2906060000D+01 .1442800000D+01 .1235900000D+01 .6078000000D+00 +5 25120080811200811092454689.4 .4800000000D-01 .1110000000D-02 .5255076000D+03 .1266440000D+01 .2239000000D-02 .4066000000D+00 .7378560000D+00 .5418600000D+01 .2611300000D+01 -.2237700000D+01 -.2700000000D-01 -.6400000000D-03 .7560990000D+02 .4976400000D+00 .1061000000D-02 .6990000000D-01 .6150658000D+01 .2675100000D+01 .1373000000D+00 .7230000000D+00 .7859000000D+00 -.4400000000D-03 .5243378000D+03 .1212170000D+01 .2357000000D-02 .3144000000D+00 .2297818000D+01 .7577000000D+00 .4331900000D+01 -.4127000000D+00 +5 25220081109200902072454779.4 .1360000000D-01 -.1000000000D-04 .5256930000D+03 .7931500000D+00 .7220000000D-02 .2379000000D+00 .8182700000D-01 .4779300000D+01 .1637400000D+01 .3093200000D+01 -.1470000000D-01 -.8000000000D-04 .4507170000D+02 .3043200000D+00 .3233000000D-02 .2090000000D-01 .6049806000D+01 .1886100000D+01 .4989300000D+01 -.2074900000D+01 .6921000000D+00 -.1100000000D-03 .5273335000D+03 .7602600000D+00 .6869000000D-02 .2207000000D+00 .1650464000D+01 .6200000000D-01 .3204900000D+01 -.1590600000D+01 +5 25320090207200905082454869.4 .3082000000D+00 -.4070000000D-02 .5262438000D+03 .7585200000D+00 .3109000000D-02 .2857000000D+00 .5862130000D+01 .1164700000D+01 .4204100000D+01 .9092000000D+00 -.1362000000D+00 .2100000000D-02 .4283690000D+02 .3873600000D+00 .1435000000D-02 .1683000000D+00 .5609208000D+01 .4510000000D+01 .1192500000D+01 .3336000000D+01 .6104000000D+00 -.2530000000D-02 .5269380000D+03 .6782500000D+00 .2576000000D-02 .1480000000D-01 .1149019000D+01 .2734400000D+01 .5803400000D+01 .2959900000D+01 +5 25420090508200908062454959.4 -.6410000000D-01 .9400000000D-03 .5250258000D+03 .9248000000D-01 .5805000000D-02 .2067000000D+00 .5468356000D+01 .4167100000D+01 .3814500000D+01 .1993400000D+01 .1480000000D-01 -.7300000000D-03 .5828730000D+02 .2137000000D-01 .2508000000D-02 .9740000000D-01 .4794944000D+01 .2791100000D+01 .9331000000D+00 .5345000000D+00 .6543000000D+00 .1350000000D-02 .5260997000D+03 .7451000000D-01 .5760000000D-02 .2866000000D+00 .7500590000D+00 .5705100000D+01 .5398200000D+01 .3316100000D+01 +5 25520090806200911042455049.4 -.6660000000D-01 -.1710000000D-02 .5258371000D+03 .1152370000D+01 .1283000000D-02 .2563000000D+00 .4892853000D+01 .3319600000D+01 .1162700000D+01 .5868000000D+00 .2150000000D-01 .6300000000D-03 .4436730000D+02 .4599200000D+00 .8800000000D-03 .3880000000D-01 .4580514000D+01 .4064000000D+00 .4647400000D+01 -.9016000000D+00 .5299000000D+00 .2280000000D-02 .5273201000D+03 .1127640000D+01 .1219000000D-02 .2767000000D+00 .1793160000D+00 .4877300000D+01 .2706200000D+01 .2622800000D+01 +5 25620091104201002022455139.4 -.9570000000D-01 -.1680000000D-02 .5266100000D+03 .9906800000D+00 .6673000000D-02 .2739000000D+00 .4234439000D+01 .2625800000D+01 .5772200000D+01 -.4722000000D+00 .1960000000D-01 .7400000000D-03 .4646400000D+02 .3851900000D+00 .2960000000D-02 .2790000000D-01 .4972303000D+01 .5806300000D+01 .2666600000D+01 .3503100000D+01 .5672000000D+00 .5200000000D-03 .5265821000D+03 .9755600000D+00 .6601000000D-02 .2095000000D+00 .5809057000D+01 .4174500000D+01 .1033500000D+01 .1014700000D+01 +5 25720100202201005032455229.4 -.3290000000D+00 .6190000000D-02 .5260203000D+03 .5065600000D+00 .6350000000D-03 .5660000000D+00 .3690210000D+01 .5191900000D+01 .2157000000D+00 -.2275800000D+01 .1109000000D+00 -.2720000000D-02 .5498550000D+02 .2774500000D+00 .4290000000D-03 .1696000000D+00 .4653540000D+01 .2096000000D+01 .3785600000D+01 .4756000000D+00 .9100000000D+00 -.1820000000D-02 .5257968000D+03 .4983000000D+00 .2880000000D-03 .3882000000D+00 .5267542000D+01 .5252000000D+00 .2430300000D+01 -.1915000000D+00 +5 25820100503201008012455319.4 -.3040000000D-01 -.1630000000D-02 .5260702000D+03 .2339600000D+00 .6672000000D-02 .1297000000D+00 .3302285000D+01 .4861400000D+01 .1715400000D+01 .3299300000D+01 -.8200000000D-02 .7700000000D-03 .4043100000D+02 .1389600000D+00 .2872000000D-02 .6120000000D-01 .3774399000D+01 .1863000000D+01 .4950300000D+01 -.2168600000D+01 .5759000000D+00 .1200000000D-03 .5268575000D+03 .2251100000D+00 .6420000000D-02 .1946000000D+00 .4875113000D+01 .5800000000D-01 .3242100000D+01 -.1297500000D+01 +5 25920100801201010302455409.4 .2780000000D-01 -.3250000000D-02 .5260516000D+03 .1025840000D+01 .1159000000D-02 .1621000000D+00 .2769191000D+01 .1200800000D+01 .1474000000D+00 .1624800000D+01 -.3960000000D-01 .1450000000D-02 .4590230000D+02 .4071200000D+00 .7640000000D-03 .1045000000D+00 .3495086000D+01 .4389700000D+01 .2945800000D+01 .3399700000D+01 .6257000000D+00 -.2050000000D-02 .5267298000D+03 .9774400000D+00 .1497000000D-02 .7480000000D-01 .4343363000D+01 .2739800000D+01 .1750000000D+01 -.2132900000D+01 +5 26020101030201101282455499.4 -.1561000000D+00 -.5500000000D-03 .5269719000D+03 .1131890000D+01 .5871000000D-02 .1573000000D+00 .2113354000D+01 .5152000000D+00 .3688900000D+01 .1292900000D+01 .5850000000D-01 -.2100000000D-03 .7770700000D+02 .4329600000D+00 .2526000000D-02 .4910000000D-01 .3349401000D+01 .3504700000D+01 .4281000000D+00 .1782100000D+01 .6891000000D+00 -.2640000000D-02 .5226983000D+03 .1125560000D+01 .5770000000D-02 .9420000000D-01 .3691871000D+01 .2003500000D+01 .5153700000D+01 .2089200000D+01 +6 26119990101199903122451179.3 .4106630000D+02 .2828000000D-01 .1220745500D+04 .1451700000D+00 .1563600000D-01 .1754230000D+02 .2430637000D+01 .1160400000D+01 .7870000000D+00 .5738800000D+01 .7101200000D+01 .5550000000D-02 .2988084000D+03 .1901700000D+00 .5740000000D-02 .4500500000D+01 .7693780000D+00 .8786000000D+00 .3255000000D+00 .4085500000D+01 -.3257560000D+02 .4931000000D-01 .1183873000D+04 .2028600000D+00 .1471600000D-01 .1691400000D+02 .4008164000D+01 .2557000000D+01 .2227900000D+01 .1026800000D+01 +6 26219990312199905212451249.3 .4320120000D+02 .6117000000D-01 .1221163400D+04 .2335560000D+01 .3274000000D-02 .1752210000D+02 .4809563000D+01 .3242600000D+01 .2356400000D+01 .4239600000D+01 .7579200000D+01 .2710000000D-02 .3365140000D+03 .9765400000D+00 .2356000000D-02 .5283500000D+01 .3185579000D+01 .2827200000D+01 .1188800000D+01 .2636100000D+01 -.2900210000D+02 .9996000000D-01 .1173932000D+04 .2301710000D+01 .3459000000D-02 .1673840000D+02 .1017160000D+00 .4704700000D+01 .3854300000D+01 .5806600000D+01 +6 26319990521199907302451319.3 .4738880000D+02 .3188000000D-01 .1221400600D+04 .2651720000D+01 .1062500000D-01 .1745450000D+02 .8327330000D+00 .5532000000D+01 .2510700000D+01 .2717800000D+01 .7527600000D+01 -.7260000000D-02 .3968052000D+03 .9829500000D+00 .4400000000D-02 .6001100000D+01 .5546983000D+01 .4884600000D+01 .1983700000D+01 .1162600000D+01 -.2146880000D+02 .7256000000D-01 .1155927100D+04 .2620550000D+01 .1043700000D-01 .1647040000D+02 .2403440000D+01 .6929000000D+00 .3889800000D+01 .4282100000D+01 +6 26419990730199910082451389.3 .4971070000D+02 -.1890000000D-02 .1221450800D+04 .1052380000D+01 .1809400000D-01 .1751380000D+02 .3170722000D+01 .1581600000D+01 .4724600000D+01 .1277100000D+01 .6820500000D+01 .9000000000D-03 .4326268000D+03 .3265300000D+00 .6390000000D-02 .6235400000D+01 .1634457000D+01 .7468000000D+00 .3974800000D+01 .6024700000D+01 -.1584760000D+02 -.7240000000D-02 .1142245800D+04 .9874800000D+00 .1709200000D-01 .1644380000D+02 .4736176000D+01 .3068900000D+01 .6191600000D+01 .2839800000D+01 +6 26519991008199912172451459.3 .4985380000D+02 -.4052000000D-01 .1221213800D+04 .1769860000D+01 .2568000000D-02 .1743590000D+02 .5627912000D+01 .9129000000D+00 .3584000000D+01 .6240800000D+01 .7161400000D+01 .1680000000D-02 .4261491000D+03 .6891200000D+00 .1732000000D-02 .5911300000D+01 .4090800000D+01 .1950000000D+00 .3152500000D+01 .4687100000D+01 -.1720490000D+02 -.5616000000D-01 .1145059500D+04 .1805530000D+01 .3330000000D-02 .1655940000D+02 .9101710000D+00 .2401100000D+01 .5278400000D+01 .1523500000D+01 +6 26619991217200002252451529.3 .4727680000D+02 .4500000000D-02 .1221294000D+04 .1034760000D+01 .1894800000D-01 .1743860000D+02 .1881655000D+01 .3450600000D+01 .3090000000D+00 .4894800000D+01 .7564600000D+01 -.1000000000D-04 .3976606000D+03 .3024000000D+00 .6947000000D-02 .5749200000D+01 .3201330000D+00 .2585400000D+01 .5941400000D+01 .3330600000D+01 -.2194190000D+02 .1322000000D-01 .1154037300D+04 .1005380000D+01 .1856000000D-01 .1658570000D+02 .3451834000D+01 .4909600000D+01 .1741000000D+01 .1813000000D+00 +6 26720000225200005052451599.3 .4758600000D+02 .4130000000D-01 .1221147800D+04 .1742090000D+01 .8260000000D-02 .1747640000D+02 .4314004000D+01 .2765500000D+01 .2418300000D+01 .3425400000D+01 .7604500000D+01 -.1146000000D-01 .4102149000D+03 .7358600000D+00 .3365000000D-02 .6242300000D+01 .2756588000D+01 .2192000000D+01 .1271500000D+01 .1887400000D+01 -.2093490000D+02 .9910000000D-01 .1150124300D+04 .1709480000D+01 .8060000000D-02 .1643800000D+02 .5883087000D+01 .4200800000D+01 .3942500000D+01 .4996400000D+01 +6 26820000505200007142451669.3 .5029070000D+02 .2631000000D-01 .1221034900D+04 .2842090000D+01 .5796000000D-02 .1744510000D+02 .3479690000D+00 .5054000000D+01 .2348800000D+01 .1893000000D+01 .6569400000D+01 -.2211000000D-01 .4567815000D+03 .1069120000D+01 .3033000000D-02 .6833200000D+01 .5108740000D+01 .4216700000D+01 .1729100000D+01 .3914000000D+00 -.1356980000D+02 .9780000000D-01 .1133378900D+04 .2807900000D+01 .5759000000D-02 .1611510000D+02 .1911531000D+01 .2226000000D+00 .3629000000D+01 .3457500000D+01 +6 26920000714200009222451739.3 .5220380000D+02 .4000000000D-04 .1221154800D+04 .2073280000D+01 .1739200000D-01 .1750950000D+02 .2654339000D+01 .1050900000D+01 .4196100000D+01 .4028000000D+00 .4770700000D+01 -.1255000000D-01 .4923156000D+03 .7344500000D+00 .6449000000D-02 .7155600000D+01 .1163066000D+01 .6277900000D+01 .3190800000D+01 .5207500000D+01 -.6141400000D+01 .4008000000D-01 .1119108000D+04 .2008700000D+01 .1685600000D-01 .1602710000D+02 .4209934000D+01 .2534900000D+01 .5658900000D+01 .1961500000D+01 +6 27020000922200012012451809.3 .5285980000D+02 -.2351000000D-01 .1219832100D+04 .7850900000D+00 .1008000000D-01 .1750250000D+02 .5051295000D+01 .2532000000D+00 .5166000000D+00 .5323500000D+01 .4063900000D+01 .1476000000D-01 .4991892000D+03 .3262000000D+00 .3137000000D-02 .7048100000D+01 .3571344000D+01 .5642900000D+01 .5674100000D+01 .3845900000D+01 -.3502000000D+01 -.6177000000D-01 .1115567600D+04 .7386900000D+00 .9906000000D-02 .1600860000D+02 .3211630000D+00 .1765900000D+01 .1958700000D+01 .6042000000D+00 +6 27120001201200102092451879.3 .5137410000D+02 -.4400000000D-03 .1220825800D+04 .2031680000D+01 .1790000000D-01 .1748830000D+02 .1296701000D+01 .2880300000D+01 .6013700000D+01 .4014500000D+01 .5400300000D+01 .9170000000D-02 .4822001000D+03 .7014500000D+00 .6644000000D-02 .6825000000D+01 .6085579000D+01 .1871900000D+01 .5119000000D+01 .2518300000D+01 -.8773300000D+01 -.2730000000D-01 .1122482800D+04 .1946570000D+01 .1716800000D-01 .1607730000D+02 .2854048000D+01 .4367400000D+01 .1193400000D+01 .5579800000D+01 +6 27220010209200104202451949.3 .5104450000D+02 .1672000000D-01 .1220470000D+04 .7593600000D+00 .1421400000D-01 .1758040000D+02 .3789230000D+01 .2293900000D+01 .2076800000D+01 .2598300000D+01 .6063000000D+01 -.1956000000D-01 .4772608000D+03 .3611200000D+00 .5266000000D-02 .7015000000D+01 .2284085000D+01 .1625200000D+01 .9636000000D+00 .1106100000D+01 -.1096820000D+02 .7897000000D-01 .1124569200D+04 .7590700000D+00 .1338800000D-01 .1601310000D+02 .5348397000D+01 .3667700000D+01 .3602600000D+01 .4159500000D+01 +6 27320010420200106292452019.3 .5205200000D+02 .1052000000D-01 .1220316800D+04 .2710920000D+01 .3308000000D-02 .1749940000D+02 .6137951000D+01 .4568600000D+01 .3125400000D+01 .1075600000D+01 .4523300000D+01 -.3550000000D-01 .5045987000D+03 .1046600000D+01 .2502000000D-02 .7409000000D+01 .4652479000D+01 .3557700000D+01 .1799600000D+01 .5888100000D+01 -.5121000000D+01 .1089200000D+00 .1113004400D+04 .2655530000D+01 .2225000000D-02 .1579560000D+02 .1408791000D+01 .6038800000D+01 .4324500000D+01 .2626000000D+01 +6 27420010629200109072452089.3 .5280750000D+02 -.1534000000D-01 .1220600900D+04 .2777280000D+01 .1345800000D-01 .1752560000D+02 .2146206000D+01 .5336000000D+00 .3725900000D+01 .5832100000D+01 .1723400000D+01 -.2923000000D-01 .5307510000D+03 .1031230000D+01 .5291000000D-02 .7665500000D+01 .6886530000D+00 .5597900000D+01 .2620200000D+01 .4384700000D+01 .3144800000D+01 .7605000000D-01 .1102559000D+04 .2645750000D+01 .1292400000D-01 .1573790000D+02 .3691043000D+01 .2053900000D+01 .5230700000D+01 .1089300000D+01 +6 27520010907200111162452159.3 .5202230000D+02 -.1260000000D-02 .1218681500D+04 .6414600000D+00 .1865500000D-01 .1752870000D+02 .4488469000D+01 .2952900000D+01 .6082600000D+01 .4415700000D+01 -.4512000000D+00 .1104000000D-01 .5377613000D+03 .2174900000D+00 .6822000000D-02 .7665400000D+01 .3049760000D+01 .1509200000D+01 .4766800000D+01 .2972000000D+01 .8809000000D+01 -.2859000000D-01 .1098504600D+04 .6087600000D+00 .1763800000D-01 .1572310000D+02 .6027955000D+01 .4556000000D+01 .1350000000D+01 .5949200000D+01 +6 27620011116200201252452229.3 .5203020000D+02 .1124000000D-01 .1219734700D+04 .2260340000D+01 .9317000000D-02 .1748270000D+02 .6873160000D+00 .2282700000D+01 .5371100000D+01 .3107200000D+01 .7444000000D+00 .2015000000D-01 .5339278000D+03 .8114900000D+00 .3263000000D-02 .7575000000D+01 .5528129000D+01 .9915000000D+00 .4142000000D+01 .1651500000D+01 .5649500000D+01 -.4977000000D-01 .1100295300D+04 .2095170000D+01 .8295000000D-02 .1573390000D+02 .2228815000D+01 .3770800000D+01 .4720000000D+00 .4646400000D+01 +6 27720020125200204052452299.3 .5255170000D+02 -.1570000000D-02 .1219420700D+04 .5475200000D+00 .1952000000D-01 .1752260000D+02 .3225768000D+01 .4742000000D+01 .1620700000D+01 .1749600000D+01 .2452700000D+01 -.1371000000D-01 .5286233000D+03 .1891100000D+00 .7142000000D-02 .7636700000D+01 .1767104000D+01 .3052000000D+01 .3870000000D+00 .2840000000D+00 .1206700000D+01 .3689000000D-01 .1102588900D+04 .4700600000D+00 .1793500000D-01 .1580410000D+02 .4771651000D+01 .5620000000D-01 .3132800000D+01 .3286200000D+01 +6 27820020405200206142452369.3 .5232610000D+02 -.8670000000D-02 .1219094100D+04 .2208450000D+01 .7191000000D-02 .1744690000D+02 .5627534000D+01 .4066800000D+01 .3588600000D+01 .2524000000D+00 .1336700000D+01 -.4035000000D-01 .5388391000D+03 .8789700000D+00 .3210000000D-02 .7815900000D+01 .4175311000D+01 .2901600000D+01 .1873800000D+01 .5089800000D+01 .4120600000D+01 .1029100000D+00 .1097703100D+04 .2134130000D+01 .5788000000D-02 .1568870000D+02 .8872100000D+00 .5565400000D+01 .5140800000D+01 .1787200000D+01 +6 27920020614200208232452439.3 .5161740000D+02 -.3959000000D-01 .1219224300D+04 .3124910000D+01 .8612000000D-02 .1742880000D+02 .1641038000D+01 .3660000000D-01 .3402600000D+01 .4988000000D+01 -.1850200000D+01 -.3959000000D-01 .5507747000D+03 .1175670000D+01 .3722000000D-02 .7897800000D+01 .2123230000D+00 .4945400000D+01 .2288100000D+01 .3569200000D+01 .1199220000D+02 .9555000000D-01 .1094103200D+04 .2891710000D+01 .7728000000D-02 .1571140000D+02 .3175677000D+01 .1583400000D+01 .4918900000D+01 .2338000000D+00 +6 28020020823200211012452509.3 .4876990000D+02 -.8640000000D-02 .1217069900D+04 .1909950000D+01 .2024200000D-01 .1740480000D+02 .3943828000D+01 .2358000000D+01 .5505300000D+01 .3510700000D+01 -.4764700000D+01 -.8980000000D-02 .5480863000D+03 .6962300000D+00 .7405000000D-02 .7858900000D+01 .2539296000D+01 .7851000000D+00 .3963800000D+01 .2109900000D+01 .1900690000D+02 .2258000000D-01 .1095906300D+04 .1729020000D+01 .1816000000D-01 .1582110000D+02 .5472942000D+01 .3932500000D+01 .7869000000D+00 .5038600000D+01 +6 28120021101200301102452579.3 .4853470000D+02 .2133000000D-01 .1217324200D+04 .1346020000D+01 .5844000000D-02 .1738160000D+02 .7778700000D-01 .1661000000D+01 .1784100000D+01 .2168400000D+01 -.4997000000D+01 .1997000000D-01 .5443899000D+03 .5288300000D+00 .2096000000D-02 .7858300000D+01 .4963009000D+01 .7460000000D-01 .4844000000D+00 .7625000000D+00 .1962710000D+02 -.4802000000D-01 .1097319200D+04 .1287430000D+01 .5284000000D-02 .1573430000D+02 .1605984000D+01 .3160900000D+01 .3615400000D+01 .3698700000D+01 +6 28220030110200303212452649.3 .5028660000D+02 .6470000000D-02 .1217826300D+04 .1788210000D+01 .2049700000D-01 .1742670000D+02 .2622724000D+01 .4208800000D+01 .1068700000D+01 .8532000000D+00 -.3114700000D+01 .6500000000D-02 .5504098000D+03 .6763300000D+00 .7809000000D-02 .7976000000D+01 .1209007000D+01 .2654400000D+01 .5889900000D+01 .5720500000D+01 .1507620000D+02 -.1712000000D-01 .1093982100D+04 .1662440000D+01 .1913900000D-01 .1575200000D+02 .4154195000D+01 .5758300000D+01 .2592100000D+01 .2389700000D+01 +6 28320030321200305302452719.3 .5044130000D+02 -.2231000000D-01 .1217477800D+04 .1294350000D+01 .1271600000D-01 .1743140000D+02 .5090847000D+01 .3542000000D+01 .3343300000D+01 .5692000000D+01 -.2854900000D+01 -.3354000000D-01 .5550852000D+03 .5300400000D+00 .4959000000D-02 .7982600000D+01 .3672609000D+01 .2266500000D+01 .1643000000D+01 .4283600000D+01 .1423140000D+02 .8027000000D-01 .1091373400D+04 .1227220000D+01 .1136100000D-01 .1568330000D+02 .3396160000D+00 .5075600000D+01 .4906600000D+01 .9414000000D+00 +6 28420030530200308082452789.3 .4864890000D+02 -.6427000000D-01 .1217182200D+04 .3067400000D+01 .4334000000D-02 .1742420000D+02 .1132486000D+01 .5830800000D+01 .3517600000D+01 .4147000000D+01 -.5562300000D+01 -.3849000000D-01 .5535280000D+03 .1165780000D+01 .2673000000D-02 .7834600000D+01 .6015611000D+01 .4292500000D+01 .2239900000D+01 .2766300000D+01 .2049250000D+02 .9730000000D-01 .1094362700D+04 .2782850000D+01 .3056000000D-02 .1574650000D+02 .2659441000D+01 .1112200000D+01 .5049700000D+01 .5677100000D+01 +6 28520030808200310172452859.3 .4406280000D+02 -.4357000000D-01 .1215630800D+04 .2703430000D+01 .1612400000D-01 .1749500000D+02 .3416071000D+01 .1823400000D+01 .5014300000D+01 .2626100000D+01 -.8354400000D+01 -.2040000000D-01 .5363214000D+03 .1026360000D+01 .6196000000D-02 .7566500000D+01 .2044556000D+01 .8400000000D-01 .3306800000D+01 .1273400000D+01 .2753530000D+02 .5966000000D-01 .1104042600D+04 .2466490000D+01 .1462000000D-01 .1590800000D+02 .4940546000D+01 .3416800000D+01 .2938000000D+00 .4157800000D+01 +6 28620031017200312262452929.3 .4131580000D+02 .1905000000D-01 .1214910000D+04 .1483700000D+00 .1755500000D-01 .1745710000D+02 .5772879000D+01 .4379400000D+01 .1098300000D+01 .1228700000D+01 -.9675700000D+01 .9620000000D-02 .5196280000D+03 .3585000000D-01 .6417000000D-02 .7497700000D+01 .4419396000D+01 .2539500000D+01 .5605300000D+01 .6159900000D+01 .3134270000D+02 -.2719000000D-01 .1111652600D+04 .1013400000D+00 .1537200000D-01 .1587280000D+02 .1013677000D+01 .3230000000D-01 .2739400000D+01 .2756800000D+01 +6 28720031226200403052452999.3 .4294730000D+02 .4614000000D-01 .1215009100D+04 .2353190000D+01 .1375900000D-01 .1754090000D+02 .1995435000D+01 .3567500000D+01 .3749000000D+00 .6212200000D+01 -.8742000000D+01 .1805000000D-01 .5308756000D+03 .9165100000D+00 .5375000000D-02 .7734100000D+01 .6309210000D+00 .1846400000D+01 .5003600000D+01 .4843300000D+01 .2861970000D+02 -.5131000000D-01 .1106829900D+04 .2182360000D+01 .1305200000D-01 .1575870000D+02 .3519347000D+01 .5197500000D+01 .2019700000D+01 .1456500000D+01 +6 28820040305200405142453069.3 .4557120000D+02 -.2187000000D-01 .1215790600D+04 .2485000000D-01 .1800700000D-01 .1750510000D+02 .4521641000D+01 .3759400000D+01 .2906400000D+01 .4831100000D+01 -.7468000000D+01 -.1782000000D-01 .5453681000D+03 .7649000000D-01 .7026000000D-02 .7800300000D+01 .3142433000D+01 .2802800000D+01 .1159400000D+01 .3457700000D+01 .2499500000D+02 .4470000000D-01 .1098756900D+04 .2509000000D-01 .1644900000D-01 .1577110000D+02 .6046242000D+01 .4068500000D+01 .4510400000D+01 .7320000000D-01 +6 28920040514200407232453139.3 .4374690000D+02 -.7963000000D-01 .1215111800D+04 .2578380000D+01 .4854000000D-02 .1746670000D+02 .6142700000D+00 .5337800000D+01 .4420600000D+01 .3314900000D+01 -.9018600000D+01 -.2580000000D-01 .5378207000D+03 .9969900000D+00 .2678000000D-02 .7491600000D+01 .5529495000D+01 .3627000000D+01 .2382700000D+01 .1962400000D+01 .2870810000D+02 .8247000000D-01 .1103634400D+04 .2328680000D+01 .3951000000D-02 .1588420000D+02 .2137538000D+01 .6351000000D+00 .1190000000D-01 .4836800000D+01 +6 29020040723200410012453209.3 .3816730000D+02 -.8140000000D-01 .1214726300D+04 .3043550000D+01 .1039900000D-01 .1751660000D+02 .2901725000D+01 .1309100000D+01 .4616200000D+01 .1776100000D+01 -.1097200000D+02 -.1471000000D-01 .5069251000D+03 .1171710000D+01 .4350000000D-02 .6992200000D+01 .1564552000D+01 .5701400000D+01 .2871400000D+01 .4518000000D+00 .3477290000D+02 .7245000000D-01 .1119102400D+04 .2791450000D+01 .9617000000D-02 .1617780000D+02 .4426224000D+01 .2934000000D+01 .6199800000D+01 .3295700000D+01 +6 29120041001200412102453279.3 .3238750000D+02 -.3620000000D-02 .1214193500D+04 .1483380000D+01 .2058400000D-01 .1743560000D+02 .5216531000D+01 .3629700000D+01 .4892000000D+00 .3189000000D+00 -.1193520000D+02 -.1770000000D-02 .4709369000D+03 .5543000000D+00 .7735000000D-02 .6686600000D+01 .3909611000D+01 .1602400000D+01 .4737600000D+01 .5293600000D+01 .3977760000D+02 .4210000000D-02 .1134276200D+04 .1332600000D+01 .1844100000D-01 .1630400000D+02 .4600950000D+00 .5297800000D+01 .2157400000D+01 .1839500000D+01 +6 29220041210200502182453349.3 .3201410000D+02 .7447000000D-01 .1213500300D+04 .1844220000D+01 .1814000000D-02 .1744580000D+02 .1374530000D+01 .2930700000D+01 .5034900000D+01 .5276300000D+01 -.1183010000D+02 .2790000000D-02 .4697774000D+03 .6844400000D+00 .9380000000D-03 .6987100000D+01 .7053900000D-01 .8983000000D+00 .2345400000D+01 .3950300000D+01 .3943950000D+02 -.4287000000D-01 .1135387000D+04 .1611700000D+01 .7390000000D-03 .1624970000D+02 .2902717000D+01 .4608700000D+01 .6046800000D+01 .5094000000D+00 +6 29320050218200504292453419.3 .3703680000D+02 -.1760000000D-02 .1214763500D+04 .1333040000D+01 .2066000000D-01 .1748300000D+02 .3922213000D+01 .5519100000D+01 .2375500000D+01 .3947800000D+01 -.1131630000D+02 -.1540000000D-02 .4998914000D+03 .5169200000D+00 .7904000000D-02 .7242900000D+01 .2593078000D+01 .3544300000D+01 .4509000000D+00 .2610600000D+01 .3575930000D+02 .3100000000D-02 .1122288600D+04 .1178630000D+01 .1836800000D-01 .1613560000D+02 .5447167000D+01 .8851000000D+00 .4013800000D+01 .5467100000D+01 +6 29420050429200507082453489.3 .3666130000D+02 -.7696000000D-01 .1213663700D+04 .1676440000D+01 .9904000000D-02 .1739740000D+02 .8090600000D-01 .4836200000D+01 .4455900000D+01 .2478000000D+01 -.1167330000D+02 -.7580000000D-02 .5002018000D+03 .6688300000D+00 .3868000000D-02 .6945800000D+01 .5035555000D+01 .2942600000D+01 .2292600000D+01 .1157700000D+01 .3653490000D+02 .5595000000D-01 .1122095400D+04 .1533680000D+01 .8718000000D-02 .1624210000D+02 .1605416000D+01 .1467000000D+00 .6208400000D+01 .3998800000D+01 +6 29520050708200509162453559.3 .3122850000D+02 -.1063600000D+00 .1214237500D+04 .2987750000D+01 .5141000000D-02 .1741510000D+02 .2395309000D+01 .8095000000D+00 .4450800000D+01 .9372000000D+00 -.1241760000D+02 .1080000000D-02 .4623424000D+03 .1161740000D+01 .2847000000D-02 .6279100000D+01 .1097150000D+01 .5036300000D+01 .2705500000D+01 .5941500000D+01 .4088050000D+02 .6598000000D-01 .1138627900D+04 .2747130000D+01 .4783000000D-02 .1660730000D+02 .3923429000D+01 .2459800000D+01 .6079900000D+01 .2464900000D+01 +6 29620050916200511252453629.3 .2354630000D+02 -.4317000000D-01 .1213882000D+04 .2360570000D+01 .1767000000D-01 .1738810000D+02 .4690435000D+01 .3099300000D+01 .6255700000D+01 .5717400000D+01 -.1219110000D+02 .7800000000D-03 .4085016000D+03 .9043900000D+00 .6735000000D-02 .5639700000D+01 .3435972000D+01 .8467000000D+00 .3989600000D+01 .4479500000D+01 .4542350000D+02 .2754000000D-01 .1158831200D+04 .2116950000D+01 .1547600000D-01 .1679480000D+02 .6223513000D+01 .4763700000D+01 .1649800000D+01 .9715000000D+00 +6 29720051125200602032453699.3 .2030020000D+02 .5627000000D-01 .1214154000D+04 .4953300000D+00 .1208600000D-01 .1743260000D+02 .7879180000D+00 .2373400000D+01 .2401700000D+01 .4335600000D+01 -.1188620000D+02 -.1175000000D-01 .3823204000D+03 .2180100000D+00 .4857000000D-02 .5718400000D+01 .5841717000D+01 .6096700000D+01 .2817000000D+00 .3096700000D+01 .4678740000D+02 -.1582000000D-01 .1167088400D+04 .3951500000D+00 .1197600000D-01 .1680660000D+02 .2325535000D+01 .3936000000D+01 .4110000000D+01 .5876500000D+01 +6 29820060203200604142453769.3 .2483210000D+02 .3782000000D-01 .1214934100D+04 .2127170000D+01 .1642200000D-01 .1746150000D+02 .3309544000D+01 .4931200000D+01 .1800200000D+01 .3036500000D+01 -.1270830000D+02 .1600000000D-02 .4140852000D+03 .8574400000D+00 .6682000000D-02 .6218700000D+01 .2050509000D+01 .2701900000D+01 .5823300000D+01 .1764700000D+01 .4512940000D+02 -.2993000000D-01 .1157022600D+04 .1925710000D+01 .1475200000D-01 .1663920000D+02 .4842873000D+01 .2763000000D+00 .3399600000D+01 .4570000000D+01 +6 29920060414200606232453839.3 .2724910000D+02 -.5347000000D-01 .1213291500D+04 .4691000000D+00 .1527200000D-01 .1741220000D+02 .5812443000D+01 .4374200000D+01 .4128400000D+01 .1625200000D+01 -.1279240000D+02 .5660000000D-02 .4357762000D+03 .2104300000D+00 .5776000000D-02 .6102500000D+01 .4537348000D+01 .2301300000D+01 .1865400000D+01 .3641000000D+00 .4358070000D+02 .2658000000D-01 .1148875300D+04 .4602000000D+00 .1343700000D-01 .1661210000D+02 .1060350000D+01 .5941300000D+01 .5824400000D+01 .3162400000D+01 +6 30020060623200609012453909.3 .2332560000D+02 -.1136500000D+00 .1214150300D+04 .2578130000D+01 .2862000000D-02 .1749100000D+02 .1890683000D+01 .3153000000D+00 .5363100000D+01 .1067000000D+00 -.1258510000D+02 .1841000000D-01 .4027666000D+03 .1023760000D+01 .2342000000D-02 .5362100000D+01 .6419540000D+00 .4361400000D+01 .2884300000D+01 .5179000000D+01 .4591520000D+02 .4774000000D-01 .1160728400D+04 .2372310000D+01 .3043000000D-02 .1688130000D+02 .3425216000D+01 .1984500000D+01 .7265000000D+00 .1652100000D+01 +6 30120060901200611102453979.3 .1517390000D+02 -.8070000000D-01 .1213841400D+04 .2749230000D+01 .1226300000D-01 .1750510000D+02 .4187100000D+01 .2609700000D+01 .5855600000D+01 .4868400000D+01 -.1116910000D+02 .1686000000D-01 .3380955000D+03 .1105820000D+01 .5008000000D-02 .4446500000D+01 .3000234000D+01 .1692000000D+00 .3441400000D+01 .3723500000D+01 .4917650000D+02 .3118000000D-01 .1181267300D+04 .2499060000D+01 .1051900000D-01 .1707750000D+02 .5728859000D+01 .4250700000D+01 .1209600000D+01 .1355000000D+00 +6 30220061110200701192454049.3 .9243200000D+01 .1385000000D-01 .1215151100D+04 .8828500000D+00 .1819200000D-01 .1756330000D+02 .2420490000D+00 .4911800000D+01 .1785100000D+01 .3434100000D+01 -.9776800000D+01 -.7130000000D-02 .2869717000D+03 .3306900000D+00 .7396000000D-02 .4136900000D+01 .5400860000D+01 .2477300000D+01 .5559200000D+01 .2310800000D+01 .5100610000D+02 -.1010000000D-02 .1193863700D+04 .8334700000D+00 .1705100000D-01 .1716050000D+02 .1790351000D+01 .3159000000D+00 .3466900000D+01 .4984600000D+01 +6 30320070119200703302454119.3 .1060910000D+02 .7563000000D-01 .1214965100D+04 .1913320000D+01 .4926000000D-02 .1756170000D+02 .2709264000D+01 .4306900000D+01 .1050400000D+01 .2119000000D+01 -.1051430000D+02 -.1618000000D-01 .2988288000D+03 .8291900000D+00 .2698000000D-02 .4658400000D+01 .1565984000D+01 .1812300000D+01 .4734600000D+01 .9549000000D+00 .5106910000D+02 -.3235000000D-01 .1191400000D+04 .1849660000D+01 .5720000000D-02 .1707650000D+02 .4255349000D+01 .5945400000D+01 .2653900000D+01 .3666900000D+01 +6 30420070330200706082454189.3 .1575870000D+02 -.1646000000D-01 .1214048500D+04 .7979500000D+00 .1848900000D-01 .1752980000D+02 .5244150000D+01 .5224000000D+00 .3668000000D+01 .7670000000D+00 -.1168530000D+02 .5770000000D-02 .3411571000D+03 .2991000000D+00 .7408000000D-02 .4872600000D+01 .4053496000D+01 .4411400000D+01 .1233300000D+01 .5864400000D+01 .4910900000D+02 .4820000000D-02 .1180083800D+04 .6992100000D+00 .1649600000D-01 .1694380000D+02 .5033750000D+00 .2189800000D+01 .5335200000D+01 .2310700000D+01 +6 30520070608200708172454259.3 .1442900000D+02 -.1026700000D+00 .1214296500D+04 .1859710000D+01 .6627000000D-02 .1757440000D+02 .1381895000D+01 .6109100000D+01 .5716800000D+01 .5574700000D+01 -.1137310000D+02 .3045000000D-01 .3271935000D+03 .7714300000D+00 .3168000000D-02 .4268700000D+01 .2057040000D+00 .3666100000D+01 .2981900000D+01 .4438900000D+01 .4979150000D+02 .2431000000D-01 .1183589200D+04 .1690390000D+01 .6868000000D-02 .1713300000D+02 .2924996000D+01 .1499600000D+01 .1038000000D+01 .8366000000D+00 +6 30620070817200710262454329.3 .7072700000D+01 -.1029600000D+00 .1214477500D+04 .2750250000D+01 .6609000000D-02 .1753020000D+02 .3698522000D+01 .2132600000D+01 .5619500000D+01 .4051100000D+01 -.9187300000D+01 .3434000000D-01 .2626616000D+03 .1161360000D+01 .3212000000D-02 .3252300000D+01 .2610456000D+01 .5818100000D+01 .3160100000D+01 .3033400000D+01 .5147860000D+02 .1890000000D-01 .1199439000D+04 .2564470000D+01 .5790000000D-02 .1735870000D+02 .5249571000D+01 .3753900000D+01 .9323000000D+00 .5601400000D+01 +6 30720071026200801042454399.3 -.5714000000D+00 -.2674000000D-01 .1216505000D+04 .1839620000D+01 .1732700000D-01 .1752160000D+02 .6013512000D+01 .4404600000D+01 .1256600000D+01 .2571800000D+01 -.6526100000D+01 .7410000000D-02 .1954721000D+03 .7555800000D+00 .7486000000D-02 .2602600000D+01 .5069003000D+01 .1701100000D+01 .4805800000D+01 .1669400000D+01 .5255390000D+02 -.1880000000D-02 .1211564200D+04 .1750170000D+01 .1644900000D-01 .1749770000D+02 .1288898000D+01 .6037500000D+01 .2902100000D+01 .4126800000D+01 +6 30820080104200803142454469.3 -.2701600000D+01 .7548000000D-01 .1215396600D+04 .9711900000D+00 .7126000000D-02 .1757290000D+02 .2139658000D+01 .3659800000D+01 .3943200000D+01 .1216300000D+01 -.5935800000D+01 -.3111000000D-01 .1786833000D+03 .4631400000D+00 .2910000000D-02 .2837000000D+01 .1248996000D+01 .8605000000D+00 .1426500000D+01 .2565000000D+00 .5264420000D+02 -.6490000000D-02 .1213954800D+04 .9344000000D+00 .6258000000D-02 .1748090000D+02 .3699794000D+01 .5351600000D+01 .5435400000D+01 .2769700000D+01 +6 30920080314200805232454539.3 .2940600000D+01 .2015000000D-01 .1215664900D+04 .1735640000D+01 .1716300000D-01 .1749300000D+02 .4667329000D+01 .6266400000D+01 .3126300000D+01 .6181900000D+01 -.8204100000D+01 -.5010000000D-02 .2210893000D+03 .7092700000D+00 .7401000000D-02 .3356200000D+01 .3652927000D+01 .3630500000D+01 .4533000000D+00 .5134400000D+01 .5220940000D+02 -.3820000000D-02 .1207355900D+04 .1580350000D+01 .1537900000D-01 .1737840000D+02 .6223698000D+01 .1617100000D+01 .4767500000D+01 .1447800000D+01 +6 31020080523200808012454609.3 .4486300000D+01 -.7467000000D-01 .1214702500D+04 .8780400000D+00 .1131600000D-01 .1750100000D+02 .8634900000D+00 .5654000000D+01 .5405500000D+01 .4755000000D+01 -.8667500000D+01 .3156000000D-01 .2351890000D+03 .4164200000D+00 .4750000000D-02 .3073200000D+01 .6104243000D+01 .2960900000D+01 .2671400000D+01 .3756500000D+01 .5217040000D+02 .3030000000D-02 .1204419100D+04 .7692900000D+00 .1135200000D-01 .1746870000D+02 .2417087000D+01 .1001000000D+01 .7645000000D+00 .2390000000D-01 +6 31120080801200810102454679.3 -.9410000000D+00 -.1077700000D+00 .1215566800D+04 .2458430000D+01 .2595000000D-02 .1749230000D+02 .3216842000D+01 .1656800000D+01 .6134000000D+01 .3242700000D+01 -.6427300000D+01 .4452000000D-01 .1847391000D+03 .1089150000D+01 .2047000000D-02 .2156300000D+01 .2305251000D+01 .5196800000D+01 .3305800000D+01 .2480400000D+01 .5241050000D+02 .2900000000D-03 .1212647200D+04 .2343100000D+01 .2620000000D-02 .1759380000D+02 .4776572000D+01 .3263900000D+01 .1413600000D+01 .4806100000D+01 +6 31220081010200812192454749.3 -.9003400000D+01 -.5717000000D-01 .1217873000D+04 .2380900000D+01 .1325800000D-01 .1750220000D+02 .5526640000D+01 .3921900000D+01 .7976000000D+00 .1734300000D+01 -.3030300000D+01 .2248000000D-01 .1197623000D+03 .1018520000D+01 .5989000000D-02 .1477200000D+01 .4973968000D+01 .1042200000D+01 .4204400000D+01 .1411500000D+01 .5211730000D+02 -.1331000000D-01 .1220155900D+04 .2272210000D+01 .1253500000D-01 .1762230000D+02 .8099840000D+00 .5523700000D+01 .2436300000D+01 .3306200000D+01 +6 31320081219200902272454819.3 -.1350380000D+02 .3674000000D-01 .1217362800D+04 .2304500000D+00 .1442500000D-01 .1754850000D+02 .1606363000D+01 .1371000000D+00 .3216300000D+01 .3284000000D+00 -.1217000000D+01 -.2045000000D-01 .9560190000D+02 .5882000000D-01 .6091000000D-02 .1414700000D+01 .1464757000D+01 .4291500000D+01 .3421000000D+00 .8540000000D-01 .5110490000D+02 .9440000000D-02 .1221232600D+04 .2810600000D+00 .1467800000D-01 .1768340000D+02 .3177028000D+01 .1659500000D+01 .4781100000D+01 .1900100000D+01 +6 31420090227200905082454889.3 -.1014300000D+02 .4672000000D-01 .1217831800D+04 .1971190000D+01 .1007600000D-01 .1750690000D+02 .4095567000D+01 .5704600000D+01 .2545300000D+01 .5296800000D+01 -.3012200000D+01 -.1804000000D-01 .1065708000D+03 .8740600000D+00 .5076000000D-02 .1762700000D+01 .3682781000D+01 .2810900000D+01 .5860400000D+01 .4706900000D+01 .5209290000D+02 -.1090000000D-02 .1220736500D+04 .1826550000D+01 .8758000000D-02 .1759710000D+02 .5664365000D+01 .9860000000D+00 .4066100000D+01 .5856000000D+00 +6 31520090508200907172454959.3 -.6360700000D+01 -.3482000000D-01 .1215937700D+04 .2677400000D+00 .1530100000D-01 .1752780000D+02 .3321340000D+00 .1647700000D+01 .4972400000D+01 .3921400000D+01 -.4529000000D+01 .1959000000D-01 .1344384000D+03 .3584000000D-01 .6471000000D-02 .1841500000D+01 .5933011000D+01 .5035700000D+01 .2116500000D+01 .3296300000D+01 .5240290000D+02 -.6410000000D-02 .1218439900D+04 .2601400000D+00 .1466500000D-01 .1759450000D+02 .1897017000D+01 .3412900000D+01 .3245000000D+00 .5492900000D+01 +6 31620090717200909252455029.3 -.8997200000D+01 -.9799000000D-01 .1216870200D+04 .1920160000D+01 .4974000000D-02 .1758500000D+02 .2734395000D+01 .1178200000D+01 .7229000000D+00 .2441400000D+01 -.3089900000D+01 .4498000000D-01 .1132668000D+03 .8974000000D+00 .2393000000D-02 .1382800000D+01 .2251624000D+01 .4577900000D+01 .3672700000D+01 .2298900000D+01 .5191410000D+02 -.1686000000D-01 .1220081900D+04 .1850940000D+01 .4960000000D-02 .1759180000D+02 .4301843000D+01 .2768700000D+01 .2177400000D+01 .4016800000D+01 +6 31720090925200912042455099.3 -.1632400000D+02 -.7515000000D-01 .1218790600D+04 .2575850000D+01 .8275000000D-02 .1757770000D+02 .5055044000D+01 .3463100000D+01 .4436000000D+00 .9250000000D+00 .2860000000D+00 .3191000000D-01 .9156550000D+02 .1134520000D+01 .4152000000D-02 .1499800000D+01 .5359138000D+01 .4419000000D+00 .3778300000D+01 .1600500000D+01 .5032580000D+02 -.3037000000D-01 .1221334700D+04 .2461320000D+01 .7596000000D-02 .1751040000D+02 .3440000000D+00 .5026400000D+01 .2093300000D+01 .2502400000D+01 +6 31820091204201002122455169.3 -.2208570000D+02 -.8140000000D-02 .1219337400D+04 .1315680000D+01 .1683500000D-01 .1764730000D+02 .1104566000D+01 .5787100000D+01 .2640600000D+01 .5754900000D+01 .2724200000D+01 -.2900000000D-03 .1215506000D+03 .5110800000D+00 .7310000000D-02 .1830700000D+01 .2014167000D+01 .2687000000D+01 .5807500000D+01 .4276000000D+00 .4798210000D+02 -.4480000000D-02 .1217550700D+04 .1299570000D+01 .1658600000D-01 .1752970000D+02 .2680485000D+01 .1067100000D+01 .4204600000D+01 .1050900000D+01 +6 31920100212201004232455239.3 -.2218980000D+02 .5713000000D-01 .1219436100D+04 .1393750000D+01 .1245000000D-02 .1761690000D+02 .3542142000D+01 .5138000000D+01 .5538900000D+01 .4420300000D+01 .2483100000D+01 -.2542000000D-01 .1218478000D+03 .6615200000D+00 .6920000000D-03 .1525100000D+01 .4471987000D+01 .2019100000D+01 .4144000000D+01 .5164800000D+01 .4843780000D+02 .1013000000D-01 .1217036000D+04 .1362180000D+01 .2008000000D-02 .1748350000D+02 .5117905000D+01 .3352000000D+00 .1365000000D+01 .5994600000D+01 +6 32020100423201007022455309.3 -.1754180000D+02 .4490000000D-02 .1218025800D+04 .1268420000D+01 .1637700000D-01 .1760470000D+02 .6071986000D+01 .1351400000D+01 .4490600000D+01 .3084600000D+01 .4431000000D+00 .1430000000D-02 .9511460000D+02 .4808500000D+00 .7285000000D-02 .1352800000D+01 .3152580000D+00 .4619200000D+01 .1461300000D+01 .3544100000D+01 .4976810000D+02 .3520000000D-02 .1220310100D+04 .1213860000D+01 .1554600000D-01 .1751800000D+02 .1362563000D+01 .2916300000D+01 .6054000000D+01 .4657000000D+01 +6 32120100702201009102455379.3 -.1722690000D+02 -.7665000000D-01 .1218317500D+04 .1158470000D+01 .9205000000D-02 .1761900000D+02 .2244268000D+01 .6958000000D+00 .5209000000D+00 .1647400000D+01 .5917000000D+00 .3672000000D-01 .9614820000D+02 .5906800000D+00 .3776000000D-02 .1600700000D+01 .2773102000D+01 .3954500000D+01 .3547900000D+01 .2424800000D+01 .4982910000D+02 -.2761000000D-01 .1220186800D+04 .1110820000D+01 .9278000000D-02 .1753770000D+02 .3817883000D+01 .2260200000D+01 .2002900000D+01 .3217800000D+01 +6 32220100910201011192455449.3 -.2293590000D+02 -.8052000000D-01 .1219363400D+04 .2475240000D+01 .3480000000D-02 .1755400000D+02 .4590092000D+01 .3014000000D+01 .4103000000D+00 .1349000000D+00 .3309900000D+01 .3282000000D-01 .1343414000D+03 .1109410000D+01 .2586000000D-02 .2403200000D+01 .5602830000D+01 .6151700000D+01 .3640800000D+01 .1306500000D+01 .4747120000D+02 -.4731000000D-01 .1216213500D+04 .2381740000D+01 .3191000000D-02 .1739970000D+02 .6166024000D+01 .4537900000D+01 .2170600000D+01 .1707200000D+01 +6 32320101119201101282455519.3 -.2910200000D+02 -.3839000000D-01 .1220478600D+04 .2071260000D+01 .1494100000D-01 .1760930000D+02 .6250780000D+00 .5310200000D+01 .2171700000D+01 .4929500000D+01 .5801000000D+01 .1035000000D-01 .1972532000D+03 .8301100000D+00 .6531000000D-02 .3120700000D+01 .1914370000D+01 .2021500000D+01 .5178000000D+01 .6263100000D+01 .4390880000D+02 -.3441000000D-01 .1207090700D+04 .2021190000D+01 .1436400000D-01 .1734610000D+02 .2203001000D+01 .5287000000D+00 .3673100000D+01 .2185000000D+00 +7 32419990101199901232451179.4 .4715819000D+03 -.3144555000D+02 .1706377400D+04 .1089373600D+03 .9272770000D+00 .2357200000D+01 .5249304000D+01 .2971600000D+01 .1361500000D+01 .4697600000D+01 -.1187190000D+02 .8667390000D+01 .3400534000D+03 .1643305000D+02 .7407430000D+00 .2359800000D+01 .3751624000D+01 .1996200000D+01 .9145000000D+00 .3161100000D+01 .2933740000D+02 -.3290667000D+02 .1350183900D+04 .6737535000D+02 .2882744000D+01 .9330700000D+01 .6627080000D+00 .5174800000D+01 .4055800000D+01 .2340000000D-01 +7 32519990123199902142451201.4 .5605317000D+03 -.4096511000D+02 .1692593700D+04 .1123681900D+03 .4710340000D+00 .3660600000D+01 .5417949000D+01 .3015500000D+01 .6300000000D-01 .3396000000D+00 .2480630000D+02 .5983810000D+01 .3799381000D+03 .2386442000D+02 .6224950000D+00 .1469900000D+01 .4014701000D+01 .2071600000D+01 .7969000000D+00 .3377200000D+01 -.1121170000D+03 -.2144562000D+02 .1477615400D+04 .9508244000D+02 .2292440000D+01 .5522600000D+01 .9148110000D+00 .5221000000D+01 .3886400000D+01 .2227000000D+00 +7 32619990214199903082451223.4 .5964193000D+03 -.4587147000D+02 .1644351400D+04 .1134057100D+03 .8234670000D+00 .5669100000D+01 .5614926000D+01 .3172500000D+01 .5926500000D+01 .9545000000D+00 .7001890000D+02 .2441020000D+01 .4347349000D+03 .3325581000D+02 .5537400000D+00 .3753000000D+00 .4245688000D+01 .2148600000D+01 .4059000000D+00 .2484800000D+01 -.2659740000D+03 -.7911670000D+01 .1613298800D+04 .1253293900D+03 .2032574000D+01 .1391700000D+01 .1130540000D+01 .5287500000D+01 .3448100000D+01 .5562400000D+01 +7 32719990308199903302451245.4 .5789179000D+03 -.4588720000D+02 .1585515100D+04 .1140306000D+03 .8984770000D+00 .5573700000D+01 .5845556000D+01 .3441300000D+01 .6247600000D+01 .1536300000D+01 .1217867000D+03 -.1903830000D+01 .4965336000D+03 .4393152000D+02 .6987900000D+00 .1695300000D+01 .4447665000D+01 .2239400000D+01 .6210300000D+01 .1315100000D+01 -.4181916000D+03 .6532190000D+01 .1732309200D+04 .1545642200D+03 .2536874000D+01 .5722200000D+01 .1318242000D+01 .5375200000D+01 .3018800000D+01 .4456100000D+01 +7 32819990330199904212451267.4 .5012824000D+03 -.4010954000D+02 .1547830800D+04 .1211028400D+03 .1010152000D+01 .4553600000D+01 .6116356000D+01 .3818400000D+01 .9160000000D+00 .2594600000D+01 .1745455000D+03 -.6646910000D+01 .5541994000D+03 .5435531000D+02 .1026820000D+01 .3339200000D+01 .4629931000D+01 .2350700000D+01 .6003400000D+01 .1505400000D+01 -.5529842000D+03 .2042225000D+02 .1813557600D+04 .1787381600D+03 .3462265000D+01 .1054070000D+02 .1488325000D+01 .5484200000D+01 .2854600000D+01 .4641100000D+01 +7 32919990421199905132451289.4 .3628680000D+03 -.2818199000D+02 .1569643700D+04 .1435752300D+03 .2115788000D+01 .8074900000D+01 .1338060000D+00 .4226900000D+01 .1691300000D+01 .3792000000D+01 .2153166000D+03 -.1063641000D+02 .5916474000D+03 .6177470000D+02 .1337958000D+01 .4353900000D+01 .4810144000D+01 .2503200000D+01 .6026600000D+01 .1828100000D+01 -.6409994000D+03 .3088231000D+02 .1829022000D+04 .1919539500D+03 .4223783000D+01 .1313230000D+02 .1656381000D+01 .5630000000D+01 .2885100000D+01 .4955400000D+01 +7 33019990513199906042451311.4 .1909664000D+03 -.1238842000D+02 .1656440300D+04 .1789049900D+03 .3852962000D+01 .1443620000D+02 .4249830000D+00 .4564100000D+01 .2022600000D+01 .4352400000D+01 .2275884000D+03 -.1229115000D+02 .5961444000D+03 .6399745000D+02 .1472352000D+01 .4409800000D+01 .5015737000D+01 .2735300000D+01 .6233100000D+01 .2346000000D+01 -.6484818000D+03 .3444794000D+02 .1760478800D+04 .1904677100D+03 .4455266000D+01 .1290700000D+02 .1846412000D+01 .5845900000D+01 .3075600000D+01 .5447700000D+01 +7 33119990604199906262451333.4 .4323210000D+02 .1991910000D+01 .1746449000D+04 .2101810500D+03 .5409801000D+01 .1886380000D+02 .6741840000D+00 .4826300000D+01 .2240400000D+01 .4764300000D+01 .2040101000D+03 -.1077818000D+02 .5734804000D+03 .6289078000D+02 .1478725000D+01 .4567000000D+01 .5273816000D+01 .3086000000D+01 .3725000000D+00 .3164500000D+01 -.5659567000D+03 .2976332000D+02 .1631807100D+04 .1802122900D+03 .4316580000D+01 .1271330000D+02 .2083640000D+01 .6169100000D+01 .3458000000D+01 .6225000000D+01 +7 33219990626199907182451355.4 -.2303750000D+02 .9438050000D+01 .1756391500D+04 .2210216600D+03 .6151048000D+01 .1944740000D+02 .8867690000D+00 .5067900000D+01 .2466600000D+01 .5250300000D+01 .1569510000D+03 -.7057320000D+01 .5492783000D+03 .6406466000D+02 .1634718000D+01 .6032200000D+01 .5581336000D+01 .3520500000D+01 .9288000000D+00 .3940200000D+01 -.4290580000D+03 .1965553000D+02 .1510268700D+04 .1758203700D+03 .4509080000D+01 .1595190000D+02 .2370283000D+01 .2971000000D+00 .3981100000D+01 .7206000000D+00 +7 33319990718199908092451377.4 .6338000000D+01 .8203260000D+01 .1660616200D+04 .2095610700D+03 .6024376000D+01 .1863770000D+02 .1091799000D+01 .5345600000D+01 .2770400000D+01 .5932200000D+01 .1138639000D+03 -.3550650000D+01 .5400658000D+03 .6809636000D+02 .1944499000D+01 .7336500000D+01 .5882530000D+01 .3913100000D+01 .1376700000D+01 .4516500000D+01 -.3057451000D+03 .1013753000D+02 .1443386800D+04 .1809843300D+03 .5156983000D+01 .1927310000D+02 .2661323000D+01 .6873000000D+00 .4433000000D+01 .1305400000D+01 +7 33419990809199908312451399.4 .8602470000D+02 .2041500000D+01 .1518400300D+04 .1906954400D+03 .5677416000D+01 .2026870000D+02 .1316430000D+01 .5686700000D+01 .3174500000D+01 .4010000000D+00 .9794330000D+02 -.2411030000D+01 .5319703000D+03 .6858858000D+02 .2080181000D+01 .7349300000D+01 .6123405000D+01 .4216000000D+01 .1696800000D+01 .5113500000D+01 -.2535140000D+03 .6549000000D+01 .1404942100D+04 .1811581400D+03 .5495931000D+01 .1950810000D+02 .2902395000D+01 .9957000000D+00 .4761300000D+01 .1892300000D+01 +7 33519990831199909222451421.4 .1402868000D+03 -.2251680000D+01 .1424150100D+04 .1800603300D+03 .5681091000D+01 .2201820000D+02 .1557847000D+01 .6037700000D+01 .3576700000D+01 .1042700000D+01 .1101468000D+03 -.3829150000D+01 .5074597000D+03 .6239120000D+02 .1921409000D+01 .7107500000D+01 .2888000000D-01 .4481600000D+01 .1996900000D+01 .5865900000D+01 -.2787737000D+03 .9732510000D+01 .1347531500D+04 .1665854600D+03 .5139967000D+01 .1890160000D+02 .3092468000D+01 .1262000000D+01 .5059500000D+01 .2631000000D+01 +7 33619990922199910142451443.4 .1184580000D+03 .1274900000D+00 .1418467000D+04 .1753849700D+03 .5739588000D+01 .2087510000D+02 .1778462000D+01 .2340000000D-01 .3860900000D+01 .1700100000D+01 .1293169000D+03 -.5950310000D+01 .4720297000D+03 .5370315000D+02 .1675262000D+01 .7691200000D+01 .2165590000D+00 .4774300000D+01 .2357500000D+01 .3274000000D+00 -.3323762000D+03 .1542679000D+02 .1272480000D+04 .1453434300D+03 .4526124000D+01 .2067710000D+02 .3278990000D+01 .1552500000D+01 .5415700000D+01 .3386900000D+01 +7 33719991014199911052451465.4 .3254520000D+02 .8403020000D+01 .1459686700D+04 .1666702600D+03 .5431571000D+01 .1989550000D+02 .1961494000D+01 .2060000000D+00 .4052200000D+01 .2507100000D+01 .1309728000D+03 -.6528980000D+01 .4481369000D+03 .4908841000D+02 .1607419000D+01 .7890700000D+01 .4473120000D+00 .5093500000D+01 .2731000000D+01 .9486000000D+00 -.3483704000D+03 .1766602000D+02 .1229486100D+04 .1343948700D+03 .4381148000D+01 .2199510000D+02 .3510818000D+01 .1879800000D+01 .5802300000D+01 .4018400000D+01 +7 33819991105199911272451487.4 -.5576410000D+02 .1718300000D+02 .1483779800D+04 .1527367500D+03 .4875555000D+01 .2213930000D+02 .2138071000D+01 .3774000000D+00 .4249800000D+01 .3274000000D+01 .1074507000D+03 -.4783930000D+01 .4523610000D+03 .5001782000D+02 .1713297000D+01 .7070400000D+01 .7083880000D+00 .5355800000D+01 .2989000000D+01 .1592800000D+01 -.2962910000D+03 .1357470000D+02 .1266668000D+04 .1398581600D+03 .4788676000D+01 .2038120000D+02 .3781375000D+01 .2160000000D+01 .6081300000D+01 .4659500000D+01 +7 33919991127199912192451509.4 -.8769800000D+02 .2114133000D+02 .1468360000D+04 .1409338500D+03 .4543866000D+01 .2379330000D+02 .2347991000D+01 .6170000000D+00 .4539000000D+01 .3876600000D+01 .7101160000D+02 -.1750310000D+01 .4767788000D+03 .5280408000D+02 .1836392000D+01 .6501300000D+01 .9508840000D+00 .5538100000D+01 .3148700000D+01 .2359900000D+01 -.2017163000D+03 .5393590000D+01 .1366648400D+04 .1516357600D+03 .5286291000D+01 .1891150000D+02 .4036971000D+01 .2354300000D+01 .6251200000D+01 .5429100000D+01 +7 34019991219200001102451531.4 -.5056550000D+02 .1900982000D+02 .1445504500D+04 .1399686100D+03 .4813872000D+01 .2257800000D+02 .2600558000D+01 .9242000000D+00 .4880100000D+01 .4452700000D+01 .4066040000D+02 .8675700000D+00 .4992464000D+03 .5409224000D+02 .1890563000D+01 .6982400000D+01 .1158615000D+01 .5698200000D+01 .3305700000D+01 .3071300000D+01 -.1188305000D+03 -.1893860000D+01 .1455736000D+04 .1580999600D+03 .5541794000D+01 .2037620000D+02 .4253711000D+01 .2517000000D+01 .1250000000D+00 .6161400000D+01 +7 34120000110200002012451553.4 .2273390000D+02 .1366619000D+02 .1452450200D+04 .1490603000D+03 .5486251000D+01 .2101320000D+02 .2861858000D+01 .1212300000D+01 .5165300000D+01 .5099500000D+01 .2849040000D+02 .1932590000D+01 .5065556000D+03 .5314660000D+02 .1889115000D+01 .7487200000D+01 .1348713000D+01 .5892100000D+01 .3528100000D+01 .3623700000D+01 -.8641880000D+02 -.4575690000D+01 .1480693900D+04 .1554957200D+03 .5537320000D+01 .2187760000D+02 .4446648000D+01 .2706500000D+01 .3410000000D+00 .4444000000D+00 +7 34220000201200002232451575.4 .8501720000D+02 .9366390000D+01 .1480079600D+04 .1571692200D+03 .6023032000D+01 .2154650000D+02 .3086100000D+01 .1435700000D+01 .5388300000D+01 .5729200000D+01 .3526660000D+02 .1301970000D+01 .5010596000D+03 .5153089000D+02 .1921368000D+01 .7350300000D+01 .1540806000D+01 .6143000000D+01 .3826900000D+01 .4126900000D+01 -.1066157000D+03 -.2248820000D+01 .1444694100D+04 .1482020400D+03 .5521879000D+01 .2122290000D+02 .4635550000D+01 .2947700000D+01 .6299000000D+00 .9486000000D+00 +7 34320000223200003162451597.4 .1036347000D+03 .9120380000D+01 .1489597800D+04 .1548047600D+03 .6088433000D+01 .2259710000D+02 .3255756000D+01 .1615100000D+01 .5598600000D+01 .6231000000D+01 .5273380000D+02 -.3494500000D+00 .4945300000D+03 .5134510000D+02 .2059334000D+01 .6984200000D+01 .1739753000D+01 .1417000000D+00 .4145200000D+01 .4677600000D+01 -.1527893000D+03 .2799270000D+01 .1387099400D+04 .1428819600D+03 .5716641000D+01 .1962020000D+02 .4826278000D+01 .3218400000D+01 .9395000000D+00 .1490100000D+01 +7 34420000316200004072451619.4 .7176340000D+02 .1362097000D+02 .1456679300D+04 .1401076900D+03 .5702752000D+01 .2185490000D+02 .3380697000D+01 .1786500000D+01 .5844300000D+01 .3642000000D+00 .6833580000D+02 -.1929860000D+01 .4984130000D+03 .5272466000D+02 .2251533000D+01 .7121300000D+01 .1930211000D+01 .3921000000D+00 .4415600000D+01 .5251500000D+01 -.1892982000D+03 .7343930000D+01 .1346799800D+04 .1409273300D+03 .6011989000D+01 .1919560000D+02 .5006419000D+01 .3460400000D+01 .1204200000D+01 .2053400000D+01 +7 34520000407200004292451641.4 .5040700000D+01 .2150424000D+02 .1386167300D+04 .1177739600D+03 .5167254000D+01 .1912240000D+02 .3481186000D+01 .1983800000D+01 .6158200000D+01 .7899000000D+00 .7014620000D+02 -.2361080000D+01 .5163945000D+03 .5348186000D+02 .2360090000D+01 .7708200000D+01 .2087405000D+01 .5666000000D+00 .4623700000D+01 .5736600000D+01 -.1878776000D+03 .8718390000D+01 .1339599300D+04 .1377804000D+03 .6090847000D+01 .1993810000D+02 .5154811000D+01 .3629900000D+01 .1406200000D+01 .2534400000D+01 +7 34620000429200005212451663.4 -.6826700000D+02 .3021269000D+02 .1303109200D+04 .9577482000D+02 .4850456000D+01 .1608050000D+02 .3579657000D+01 .2228900000D+01 .2422000000D+00 .1310600000D+01 .5100050000D+02 -.9505000000D+00 .5443495000D+03 .5135021000D+02 .2270354000D+01 .7966700000D+01 .2198312000D+01 .6560000000D+00 .4791100000D+01 .6109700000D+01 -.1358488000D+03 .5589900000D+01 .1360168900D+04 .1288762500D+03 .5718961000D+01 .2001750000D+02 .5259680000D+01 .3714700000D+01 .1562900000D+01 .2903900000D+01 +7 34720000521200006122451685.4 -.1177403000D+03 .3693244000D+02 .1239864600D+04 .8101513000D+02 .4850178000D+01 .1486480000D+02 .3696645000D+01 .2496100000D+01 .5834000000D+00 .1911400000D+01 .1099360000D+02 .2373300000D+01 .5752514000D+03 .4586088000D+02 .1949958000D+01 .7315700000D+01 .2270940000D+01 .6601000000D+00 .4949000000D+01 .1434000000D+00 -.3741040000D+02 -.1887230000D+01 .1395492600D+04 .1138098000D+03 .4856612000D+01 .1813120000D+02 .5327556000D+01 .3713700000D+01 .1699800000D+01 .3209600000D+01 +7 34820000612200007042451707.4 -.1198277000D+03 .3941060000D+02 .1225686500D+04 .7492845000D+02 .4901378000D+01 .1541220000D+02 .3842945000D+01 .2687600000D+01 .8344000000D+00 .2432100000D+01 -.4246450000D+02 .7037590000D+01 .6022842000D+03 .3867764000D+02 .1457140000D+01 .5739600000D+01 .2327815000D+01 .5751000000D+00 .5140500000D+01 .4820000000D+00 .8958020000D+02 -.1233084000D+02 .1432187800D+04 .9648930000D+02 .3637172000D+01 .1424440000D+02 .5378570000D+01 .3624800000D+01 .1848000000D+01 .3518300000D+01 +7 34920000704200007262451729.4 -.6390440000D+02 .3651116000D+02 .1277042600D+04 .7529816000D+02 .4691283000D+01 .1554900000D+02 .4012333000D+01 .2721400000D+01 .9906000000D+00 .2811200000D+01 -.9705000000D+02 .1202104000D+02 .6193126000D+03 .3259721000D+02 .9266020000D+00 .3789400000D+01 .2396046000D+01 .4168000000D+00 .5456900000D+01 .9768000000D+00 .2195322000D+03 -.2364020000D+02 .1456970400D+04 .8265680000D+02 .2308994000D+01 .9386500000D+01 .5437617000D+01 .3466200000D+01 .2066500000D+01 .3936900000D+01 +7 35020000726200008172451751.4 .4580820000D+02 .2839889000D+02 .1388949600D+04 .8242004000D+02 .4094810000D+01 .1373510000D+02 .4188632000D+01 .2624000000D+01 .1063900000D+01 .3101700000D+01 -.1396926000D+03 .1620898000D+02 .6222236000D+03 .2928245000D+02 .5620660000D+00 .2586100000D+01 .2500398000D+01 .2730000000D+00 .6100700000D+01 .1851200000D+01 .3264542000D+03 -.3363511000D+02 .1458597700D+04 .7531592000D+02 .1204988000D+01 .5620600000D+01 .5527893000D+01 .3315700000D+01 .2538100000D+01 .4711700000D+01 +7 35120000817200009082451773.4 .1935269000D+03 .1625238000D+02 .1535896900D+04 .9772535000D+02 .3192847000D+01 .9782800000D+01 .4362263000D+01 .2504300000D+01 .1040100000D+01 .3352600000D+01 -.1608012000D+03 .1875532000D+02 .6119112000D+03 .2794918000D+02 .5176680000D+00 .2770700000D+01 .2659516000D+01 .2711000000D+00 .6265000000D+00 .2758700000D+01 .3906857000D+03 -.4063431000D+02 .1433812300D+04 .7223444000D+02 .8185700000D+00 .5338600000D+01 .5667876000D+01 .3280100000D+01 .3557400000D+01 .5772800000D+01 +7 35220000908200009302451795.4 .3593030000D+03 .1608920000D+01 .1684480400D+04 .1190060500D+03 .2250494000D+01 .4368400000D+01 .4535004000D+01 .2445400000D+01 .8293000000D+00 .3552900000D+01 -.1562111000D+03 .1923875000D+02 .5959774000D+03 .2779805000D+02 .5526460000D+00 .3005600000D+01 .2883160000D+01 .4772000000D+00 .1042900000D+01 .3329700000D+01 .4016806000D+03 -.4365911000D+02 .1392533500D+04 .7045938000D+02 .9937210000D+00 .6313100000D+01 .5870245000D+01 .3422000000D+01 .4234800000D+01 .1714000000D+00 +7 35320000930200010222451817.4 .5248972000D+03 -.1412487000D+02 .1805290800D+04 .1414699700D+03 .1824519000D+01 .1718800000D+01 .4713018000D+01 .2462500000D+01 .2928000000D+00 .1168500000D+01 -.1257113000D+03 .1751155000D+02 .5871372000D+03 .3047854000D+02 .4527750000D+00 .2424400000D+01 .3168637000D+01 .8640000000D+00 .1117500000D+01 .3787200000D+01 .3546106000D+03 -.4205337000D+02 .1358905400D+04 .7200237000D+02 .9380040000D+00 .5766400000D+01 .6140425000D+01 .3758300000D+01 .4439900000D+01 .6690000000D+00 +7 35420001022200011132451839.4 .6706914000D+03 -.2928394000D+02 .1873075700D+04 .1596978500D+03 .2290944000D+01 .6996400000D+01 .4902405000D+01 .2547000000D+01 .6115700000D+01 .1221900000D+01 -.7059200000D+02 .1347843000D+02 .5992871000D+03 .3875923000D+02 .2887450000D+00 .9199000000D+00 .3495267000D+01 .1293000000D+01 .4021000000D+00 .4503700000D+01 .2453000000D+03 -.3496342000D+02 .1369669200D+04 .8497496000D+02 .5026210000D+00 .2986800000D+01 .1862520000D+00 .4219500000D+01 .3951900000D+01 .1327700000D+01 +7 35520001113200012052451861.4 .7663749000D+03 -.4093437000D+02 .1864281400D+04 .1677759100D+03 .2918733000D+01 .1022270000D+02 .5113545000D+01 .2703900000D+01 .6032600000D+01 .1545300000D+01 .5012000000D+01 .7271220000D+01 .6392427000D+03 .5276574000D+02 .6422440000D+00 .1769100000D+01 .3822542000D+01 .1637400000D+01 .5736800000D+01 .8052000000D+00 .7526050000D+02 -.2184786000D+02 .1458073800D+04 .1153745000D+03 .1159115000D+01 .3430400000D+01 .5362470000D+00 .4634600000D+01 .2540300000D+01 .3719900000D+01 +7 35620001205200012272451883.4 .7740427000D+03 -.4507227000D+02 .1775963500D+04 .1632352600D+03 .3038664000D+01 .1018270000D+02 .5367788000D+01 .2969600000D+01 .6227200000D+01 .2042000000D+01 .8904060000D+02 -.1858500000D+00 .6949991000D+03 .6880933000D+02 .1292381000D+01 .4430900000D+01 .4111786000D+01 .1891900000D+01 .5636500000D+01 .1269000000D+01 -.1308363000D+03 -.4312830000D+01 .1609080300D+04 .1563316100D+03 .2795585000D+01 .9895600000D+01 .8535230000D+00 .4933700000D+01 .2430600000D+01 .4335600000D+01 +7 35720001227200101182451905.4 .6750008000D+03 -.3922386000D+02 .1659996600D+04 .1565683600D+03 .2811114000D+01 .9409400000D+01 .5688311000D+01 .3392100000D+01 .4898000000D+00 .2956300000D+01 .1601467000D+03 -.6968990000D+01 .7374021000D+03 .8121311000D+02 .1871881000D+01 .6323200000D+01 .4356188000D+01 .2106100000D+01 .5720200000D+01 .1621100000D+01 -.3168938000D+03 .1281357000D+02 .1742873000D+04 .1915180900D+03 .4367142000D+01 .1505720000D+02 .1116591000D+01 .5165100000D+01 .2518500000D+01 .4701300000D+01 +7 35820010118200102092451927.4 .4986756000D+03 -.2542759000D+02 .1605883700D+04 .1681549100D+03 .3466463000D+01 .1374270000D+02 .6057879000D+01 .3900600000D+01 .1254600000D+01 .3891600000D+01 .1957527000D+03 -.1089117000D+02 .7402489000D+03 .8552124000D+02 .2157981000D+01 .6704700000D+01 .4579603000D+01 .2335800000D+01 .5905700000D+01 .2060300000D+01 -.4186400000D+03 .2346582000D+02 .1774076200D+04 .2063402300D+03 .5231753000D+01 .1648740000D+02 .1345669000D+01 .5393600000D+01 .2696000000D+01 .5121600000D+01 +7 35920010209200103032451949.4 .3189574000D+03 -.1018915000D+02 .1633402300D+04 .1954633900D+03 .4979983000D+01 .1938300000D+02 .1173870000D+00 .4316500000D+01 .1743800000D+01 .4450100000D+01 .1860453000D+03 -.1085222000D+02 .7013155000D+03 .8222108000D+02 .2136640000D+01 .6320900000D+01 .4816149000D+01 .2634200000D+01 .6225900000D+01 .2732900000D+01 -.4063745000D+03 .2440273000D+02 .1683127800D+04 .1992404500D+03 .5246175000D+01 .1536660000D+02 .1575616000D+01 .5675000000D+01 .2990000000D+01 .5747700000D+01 +7 36020010303200103252451971.4 .2123246000D+03 -.7086000000D+00 .1655560900D+04 .2132494800D+03 .6058768000D+01 .2138130000D+02 .3817190000D+00 .4618200000D+01 .2047400000D+01 .4935800000D+01 .1434555000D+03 -.7801950000D+01 .6474663000D+03 .7772057000D+02 .2088919000D+01 .7116000000D+01 .5085343000D+01 .3019500000D+01 .4130000000D+00 .3537600000D+01 -.3094626000D+03 .1776282000D+02 .1532320900D+04 .1845465500D+03 .5006329000D+01 .1627180000D+02 .1829564000D+01 .6035400000D+01 .3423700000D+01 .2570000000D+00 +7 36120010325200104162451993.4 .2081103000D+03 -.1511500000D+00 .1597362500D+04 .2080055300D+03 .6170131000D+01 .2039220000D+02 .5815170000D+00 .4878300000D+01 .2325700000D+01 .5543600000D+01 .9754250000D+02 -.4354170000D+01 .6119590000D+03 .7746744000D+02 .2255502000D+01 .8592600000D+01 .5361669000D+01 .3413100000D+01 .8831000000D+00 .4176600000D+01 -.1987483000D+03 .9716620000D+01 .1409198500D+04 .1773494900D+03 .5163142000D+01 .1911530000D+02 .2091941000D+01 .1332000000D+00 .3882900000D+01 .9146000000D+00 +7 36220010416200105082452015.4 .2718123000D+03 -.5831560000D+01 .1474565600D+04 .1876227100D+03 .5701703000D+01 .2069740000D+02 .7542550000D+00 .5154700000D+01 .2655600000D+01 .6270900000D+01 .7641380000D+02 -.3113960000D+01 .6010344000D+03 .7817552000D+02 .2428037000D+01 .8936100000D+01 .5585917000D+01 .3714100000D+01 .1213500000D+01 .4749600000D+01 -.1397842000D+03 .6259440000D+01 .1345950800D+04 .1744194500D+03 .5425555000D+01 .1976830000D+02 .2310739000D+01 .4341000000D+00 .4218100000D+01 .1479600000D+01 +7 36320010508200105302452037.4 .3320798000D+03 -.1145591000D+02 .1366139100D+04 .1701274200D+03 .5404540000D+01 .2252310000D+02 .9287160000D+00 .5449700000D+01 .3015800000D+01 .6349000000D+00 .8762990000D+02 -.4882430000D+01 .5976944000D+03 .7433303000D+02 .2352526000D+01 .8484200000D+01 .5736152000D+01 .3921300000D+01 .1444200000D+01 .5439400000D+01 -.1523692000D+03 .9390000000D+01 .1315396300D+04 .1644558000D+03 .5238253000D+01 .1831730000D+02 .2457640000D+01 .6350000000D+00 .4439700000D+01 .2139300000D+01 +7 36420010530200106212452059.4 .3311122000D+03 -.1167774000D+02 .1341489200D+04 .1647974200D+03 .5503757000D+01 .2218260000D+02 .1106012000D+01 .5695200000D+01 .3290300000D+01 .1214300000D+01 .1142179000D+03 -.8197980000D+01 .5902819000D+03 .6628874000D+02 .2078358000D+01 .8983300000D+01 .5850203000D+01 .4093700000D+01 .1661800000D+01 .6203200000D+01 -.2043066000D+03 .1633632000D+02 .1288769000D+04 .1463486000D+03 .4618787000D+01 .1858080000D+02 .2561163000D+01 .7846000000D+00 .4625000000D+01 .2904200000D+01 +7 36520010621200107132452081.4 .2604023000D+03 -.5485480000D+01 .1405360600D+04 .1669346400D+03 .5686110000D+01 .1986470000D+02 .1267777000D+01 .5845600000D+01 .3437600000D+01 .1891100000D+01 .1285836000D+03 -.1053415000D+02 .5807516000D+03 .5915886000D+02 .1865183000D+01 .1000510000D+02 .5988151000D+01 .4297200000D+01 .1930800000D+01 .5580000000D+00 -.2395335000D+03 .2197668000D+02 .1259277300D+04 .1286526200D+03 .4031157000D+01 .2070910000D+02 .2678181000D+01 .9525000000D+00 .4850800000D+01 .3562700000D+01 +7 36620010713200108042452103.4 .1604429000D+03 .3639210000D+01 .1500971300D+04 .1686957900D+03 .5727052000D+01 .1986050000D+02 .1412195000D+01 .5943300000D+01 .3528800000D+01 .2683500000D+01 .1130881000D+03 -.1017445000D+02 .5806671000D+03 .5795347000D+02 .1928613000D+01 .9936500000D+01 .6186317000D+01 .4548600000D+01 .2219500000D+01 .1128600000D+01 -.2177901000D+03 .2244375000D+02 .1240085100D+04 .1212837400D+03 .3956816000D+01 .2114450000D+02 .2852125000D+01 .1183400000D+01 .5132100000D+01 .4122400000D+01 +7 36720010804200108262452125.4 .8930380000D+02 .1045978000D+02 .1559779000D+04 .1651773000D+03 .5596530000D+01 .2248020000D+02 .1560811000D+01 .6066700000D+01 .3665600000D+01 .3357400000D+01 .7173770000D+02 -.7339790000D+01 .6010512000D+03 .6284140000D+02 .2221623000D+01 .9077500000D+01 .1444010000D+00 .4791100000D+01 .2447200000D+01 .1785700000D+01 -.1392813000D+03 .1747398000D+02 .1255590500D+04 .1275862500D+03 .4460275000D+01 .1947060000D+02 .3081814000D+01 .1441100000D+01 .5390700000D+01 .4735200000D+01 +7 36820010826200109172452147.4 .8409590000D+02 .1149193000D+02 .1551099300D+04 .1569939600D+03 .5457217000D+01 .2356530000D+02 .1740182000D+01 .6277700000D+01 .3919800000D+01 .3907500000D+01 .2605140000D+02 -.3888770000D+01 .6339527000D+03 .6863604000D+02 .2513045000D+01 .9097100000D+01 .3813000000D+00 .4995400000D+01 .2633400000D+01 .2521500000D+01 -.4179810000D+02 .1028625000D+02 .1307422200D+04 .1397133900D+03 .5124539000D+01 .1883870000D+02 .3324646000D+01 .1669300000D+01 .5599900000D+01 .5451700000D+01 +7 36920010917200110092452169.4 .1388936000D+03 .7105130000D+01 .1501274200D+04 .1513088600D+03 .5636552000D+01 .2218940000D+02 .1965125000D+01 .3012000000D+00 .4272600000D+01 .4483400000D+01 .1033000000D+00 -.2000860000D+01 .6535057000D+03 .6972996000D+02 .2610705000D+01 .9901300000D+01 .5912090000D+00 .5195300000D+01 .2848700000D+01 .3147200000D+01 .2411370000D+02 .5424010000D+01 .1353772100D+04 .1450173900D+03 .5463744000D+01 .2036180000D+02 .3544578000D+01 .1876600000D+01 .5813900000D+01 .6104200000D+01 +7 37020011009200110312452191.4 .2095815000D+03 .1204330000D+01 .1465735900D+04 .1526004100D+03 .6132000000D+01 .2131270000D+02 .2220282000D+01 .6288000000D+00 .4618600000D+01 .5146700000D+01 .5465300000D+01 -.2801440000D+01 .6408139000D+03 .6464207000D+02 .2514455000D+01 .9891900000D+01 .7873670000D+00 .5444000000D+01 .3156700000D+01 .3669800000D+01 .2592830000D+02 .5977690000D+01 .1345802900D+04 .1367836700D+03 .5317619000D+01 .2094530000D+02 .3742607000D+01 .2111800000D+01 .6101200000D+01 .3518000000D+00 +7 37120011031200111222452213.4 .2399468000D+03 -.1061420000D+01 .1468739400D+04 .1526389500D+03 .6393213000D+01 .2248700000D+02 .2459042000D+01 .8935000000D+00 .4906000000D+01 .5760700000D+01 .3437470000D+02 -.5697320000D+01 .6019362000D+03 .5733217000D+02 .2438514000D+01 .8805500000D+01 .9966620000D+00 .5780100000D+01 .3569700000D+01 .4230000000D+01 -.3077620000D+02 .1169630000D+02 .1275835800D+04 .1199833400D+03 .5040233000D+01 .1896730000D+02 .3943792000D+01 .2428200000D+01 .2211000000D+00 .8849000000D+00 +7 37220011122200112142452235.4 .1955499000D+03 .3617310000D+01 .1480846600D+04 .1397500800D+03 .5933486000D+01 .2277520000D+02 .2645117000D+01 .1082800000D+01 .5172000000D+01 .6239700000D+01 .6437250000D+02 -.8739750000D+01 .5649200000D+03 .5340979000D+02 .2542104000D+01 .8024100000D+01 .1233557000D+01 .6157500000D+01 .3982000000D+01 .4902700000D+01 -.1040123000D+03 .1901898000D+02 .1189791900D+04 .1077796100D+03 .5140482000D+01 .1666020000D+02 .4172468000D+01 .2820900000D+01 .6685000000D+00 .1539500000D+01 +7 37320011214200201052452257.4 .8512660000D+02 .1466256000D+02 .1463915300D+04 .1122202000D+03 .4833684000D+01 .1985880000D+02 .2782572000D+01 .1224800000D+01 .5492200000D+01 .3848000000D+00 .7187480000D+02 -.9813550000D+01 .5578785000D+03 .5282186000D+02 .2658383000D+01 .8381100000D+01 .1474123000D+01 .1566000000D+00 .4286000000D+01 .5524700000D+01 -.1399954000D+03 .2318684000D+02 .1154743700D+04 .1055034900D+03 .5466813000D+01 .1688940000D+02 .4421272000D+01 .3156000000D+01 .1018200000D+01 .2212800000D+01 +7 37420020105200201272452279.4 -.4655620000D+02 .2811464000D+02 .1411012800D+04 .7907685000D+02 .3743123000D+01 .1494780000D+02 .2902205000D+01 .1355700000D+01 .5952900000D+01 .9031000000D+00 .4575150000D+02 -.7869840000D+01 .5856338000D+03 .5138063000D+02 .2549007000D+01 .8670500000D+01 .1672134000D+01 .2755000000D+00 .4484100000D+01 .5966700000D+01 -.1054112000D+03 .2112983000D+02 .1200798400D+04 .1048382900D+03 .5436143000D+01 .1795910000D+02 .4643822000D+01 .3318600000D+01 .1240800000D+01 .2705700000D+01 +7 37520020127200202182452301.4 -.1484442000D+03 .3925765000D+02 .1344600200D+04 .5250019000D+02 .3334030000D+01 .1167350000D+02 .3038515000D+01 .1517900000D+01 .2186000000D+00 .1626600000D+01 -.9023900000D+01 -.3295030000D+01 .6325977000D+03 .4799760000D+02 .2161943000D+01 .7840600000D+01 .1812700000D+01 .2440000000D+00 .4614100000D+01 .1200000000D-01 -.3018300000D+01 .1294710000D+02 .1301929600D+04 .1006222800D+03 .4798255000D+01 .1698420000D+02 .4808132000D+01 .3309300000D+01 .1373400000D+01 .3050800000D+01 +7 37620020218200203122452323.4 -.1897700000D+03 .4507564000D+02 .1298355900D+04 .4052734000D+02 .3419513000D+01 .1175700000D+02 .3211834000D+01 .1715800000D+01 .6194000000D+00 .2329000000D+01 -.7789090000D+02 .2644630000D+01 .6808953000D+03 .4508968000D+02 .1598690000D+01 .5939100000D+01 .1916288000D+01 .1067000000D+00 .4701100000D+01 .3179000000D+00 .1380220000D+03 .1128910000D+01 .1413492200D+04 .9666540000D+02 .3714100000D+01 .1350910000D+02 .4925111000D+01 .3179000000D+01 .1442100000D+01 .3341300000D+01 +7 37720020312200204032452345.4 -.1674836000D+03 .4502557000D+02 .1298809000D+04 .4383539000D+02 .3406378000D+01 .1231870000D+02 .3416662000D+01 .1843900000D+01 .8227000000D+00 .2793800000D+01 -.1455551000D+03 .8595170000D+01 .7187094000D+03 .4479536000D+02 .1002996000D+01 .3596100000D+01 .2009715000D+01 .6231100000D+01 .4746500000D+01 .7118000000D+00 .2830445000D+03 -.1128491000D+02 .1503331700D+04 .9766746000D+02 .2504196000D+01 .8668800000D+01 .5021282000D+01 .3017300000D+01 .1442600000D+01 .3663700000D+01 +7 37820020403200204252452367.4 -.9733020000D+02 .4030621000D+02 .1350918200D+04 .5838942000D+02 .3097619000D+01 .1125480000D+02 .3628646000D+01 .1884600000D+01 .8863000000D+00 .3119500000D+01 -.2014939000D+03 .1361974000D+02 .7407389000D+03 .4663804000D+02 .4909840000D+00 .1703200000D+01 .2111676000D+01 .6136300000D+01 .4683600000D+01 .1534800000D+01 .4075074000D+03 -.2212346000D+02 .1557656400D+04 .1030009000D+03 .1458219000D+01 .4000900000D+01 .5117245000D+01 .2910900000D+01 .1304900000D+01 .4219900000D+01 +7 37920020425200205172452389.4 -.1415000000D+00 .3264427000D+02 .1438601900D+04 .7961169000D+02 .2597380000D+01 .8450900000D+01 .3827497000D+01 .1914700000D+01 .8270000000D+00 .3396600000D+01 -.2414934000D+03 .1734569000D+02 .7469779000D+03 .4894084000D+02 .1779240000D+00 .1689800000D+01 .2231391000D+01 .6134100000D+01 .3926000000D+01 .2980300000D+01 .5019258000D+03 -.3055690000D+02 .1577062300D+04 .1092930400D+03 .8379560000D+00 .2314600000D+01 .5223861000D+01 .2887300000D+01 .7937000000D+00 .5872900000D+01 +7 38020020517200206082452411.4 .1096335000D+03 .2324396000D+02 .1541940400D+04 .1041384800D+03 .2131535000D+01 .4414300000D+01 .4008628000D+01 .1964900000D+01 .6039000000D+00 .3657100000D+01 -.2658139000D+03 .1980075000D+02 .7403134000D+03 .5066861000D+02 .2800100000D+00 .2579800000D+01 .2371856000D+01 .6214000000D+01 .2852300000D+01 .3727700000D+01 .5678308000D+03 -.3675017000D+02 .1569147100D+04 .1143821200D+03 .8795320000D+00 .4560300000D+01 .5345083000D+01 .2934800000D+01 .9120000000D-01 .5956000000D+00 +7 38120020608200206302452433.4 .2284835000D+03 .1234450000D+02 .1651256500D+04 .1306886500D+03 .2035356000D+01 .5033000000D+00 .4176169000D+01 .2035300000D+01 .1943000000D+00 .1097500000D+01 -.2750446000D+03 .2103005000D+02 .7240723000D+03 .5155741000D+02 .4190200000D+00 .3076800000D+01 .2535703000D+01 .8310000000D-01 .2837500000D+01 .4235700000D+01 .6083361000D+03 -.4100397000D+02 .1540868800D+04 .1174302800D+03 .1195183000D+01 .6434600000D+01 .5483524000D+01 .3040200000D+01 .6155800000D+01 .1093800000D+01 +7 38220020630200207222452455.4 .3586094000D+03 -.3261700000D+00 .1764003700D+04 .1589055800D+03 .2581278000D+01 .5989900000D+01 .4334123000D+01 .2119700000D+01 .6095600000D+01 .1117100000D+01 -.2661229000D+03 .2071821000D+02 .7027077000D+03 .5213173000D+02 .4535780000D+00 .2915000000D+01 .2731568000D+01 .3194000000D+00 .3162700000D+01 .4781000000D+01 .6183223000D+03 -.4283065000D+02 .1496601000D+04 .1182225900D+03 .1405732000D+01 .7061200000D+01 .5647634000D+01 .3212100000D+01 .6246400000D+01 .1557500000D+01 +7 38320020722200208132452477.4 .4941683000D+03 -.1428134000D+02 .1868241000D+04 .1863825700D+03 .3583980000D+01 .1137350000D+02 .4485745000D+01 .2217900000D+01 .5921200000D+01 .1375500000D+01 -.2324472000D+03 .1818288000D+02 .6864330000D+03 .5475785000D+02 .4934330000D+00 .2447500000D+01 .2972616000D+01 .6568000000D+00 .3958300000D+01 .5694000000D+01 .5817007000D+03 -.4065511000D+02 .1446708000D+04 .1188710900D+03 .1436352000D+01 .6344900000D+01 .5855022000D+01 .3483100000D+01 .3503000000D+00 .2209500000D+01 +7 38420020813200209042452499.4 .6084831000D+03 -.2703852000D+02 .1930398100D+04 .2065860100D+03 .4575374000D+01 .1508370000D+02 .4639606000D+01 .2343000000D+01 .5914600000D+01 .1671500000D+01 -.1704081000D+03 .1297236000D+02 .6921845000D+03 .6339502000D+02 .9106260000D+00 .3704600000D+01 .3257626000D+01 .1049000000D+01 .4743900000D+01 .5422000000D+00 .4823544000D+03 -.3278374000D+02 .1420412000D+04 .1270466500D+03 .1742867000D+01 .7003600000D+01 .6120677000D+01 .3864200000D+01 .1090500000D+01 .3263900000D+01 +7 38520020904200209262452521.4 .6571014000D+03 -.3430536000D+02 .1907383800D+04 .2113900800D+03 .5064116000D+01 .1565580000D+02 .4815323000D+01 .2526700000D+01 .6047200000D+01 .2083700000D+01 -.8897480000D+02 .5778770000D+01 .7278257000D+03 .7824155000D+02 .1649805000D+01 .6444300000D+01 .3552690000D+01 .1396400000D+01 .5119700000D+01 .1148300000D+01 .3262123000D+03 -.1946399000D+02 .1454089300D+04 .1504447300D+03 .2936205000D+01 .1188010000D+02 .1442910000D+00 .4267800000D+01 .1686700000D+01 .4062200000D+01 +7 38620020926200210182452543.4 .6060236000D+03 -.3252998000D+02 .1788960400D+04 .2002002600D+03 .4903058000D+01 .1448170000D+02 .5042789000D+01 .2817700000D+01 .7570000000D-01 .2767100000D+01 -.1301890000D+02 -.1189940000D+01 .7709711000D+03 .9250874000D+02 .2357700000D+01 .8509900000D+01 .3819475000D+01 .1676000000D+01 .5358200000D+01 .1576700000D+01 .1570692000D+03 -.4468070000D+01 .1535731000D+04 .1812567100D+03 .4486344000D+01 .1704670000D+02 .4416430000D+00 .4601700000D+01 .2019400000D+01 .4548600000D+01 +7 38720021018200211092452565.4 .4699501000D+03 -.2252238000D+02 .1636786700D+04 .1882354100D+03 .4755669000D+01 .1665640000D+02 .5344234000D+01 .3243200000D+01 .6045000000D+00 .3631200000D+01 .2770990000D+02 -.5159780000D+01 .7808181000D+03 .9790419000D+02 .2707089000D+01 .8775400000D+01 .4056769000D+01 .1938200000D+01 .5600900000D+01 .2072800000D+01 .4254060000D+02 .6024170000D+01 .1584011500D+04 .1995098100D+03 .5506386000D+01 .1877900000D+02 .7012460000D+00 .4883800000D+01 .2280300000D+01 .5025200000D+01 +7 38820021109200212012452587.4 .3225218000D+03 -.1066956000D+02 .1541911000D+04 .1906243400D+03 .5325981000D+01 .2086240000D+02 .5688022000D+01 .3706800000D+01 .1157100000D+01 .4304500000D+01 .2076360000D+02 -.4829210000D+01 .7386397000D+03 .9246972000D+02 .2631000000D+01 .8273600000D+01 .4295062000D+01 .2248600000D+01 .5936300000D+01 .2792300000D+01 .2629370000D+02 .7747240000D+01 .1528138700D+04 .1935899800D+03 .5557109000D+01 .1762880000D+02 .9420050000D+00 .5182200000D+01 .2590700000D+01 .5687200000D+01 +7 38920021201200212232452609.4 .2502703000D+03 -.4972430000D+01 .1504028700D+04 .1939881600D+03 .5851354000D+01 .2164090000D+02 .5991603000D+01 .4081600000D+01 .1557500000D+01 .4917400000D+01 -.1396380000D+02 -.1851860000D+01 .6725647000D+03 .8378814000D+02 .2464686000D+01 .9054100000D+01 .4564205000D+01 .2641200000D+01 .1165000000D+00 .3598800000D+01 .8367880000D+02 .2598830000D+01 .1394470400D+04 .1739161000D+03 .5118181000D+01 .1828830000D+02 .1200726000D+01 .5553700000D+01 .3022900000D+01 .2260000000D+00 +7 39020021223200301142452631.4 .2783511000D+03 -.8204060000D+01 .1448467500D+04 .1801243600D+03 .5550082000D+01 .2038530000D+02 .6225178000D+01 .4385900000D+01 .1891400000D+01 .5680600000D+01 -.3672360000D+02 .1632700000D+00 .6323370000D+03 .7987537000D+02 .2503936000D+01 .9817400000D+01 .4847797000D+01 .3035600000D+01 .5659000000D+00 .4271200000D+01 .1348649000D+03 -.2236610000D+01 .1288555000D+04 .1613692700D+03 .5030433000D+01 .2011710000D+02 .1483767000D+01 .5958800000D+01 .3493000000D+01 .9338000000D+00 +7 39120030114200302052452653.4 .3470166000D+03 -.1538269000D+02 .1361554000D+04 .1562571200D+03 .4853162000D+01 .2171170000D+02 .1507740000D+00 .4696800000D+01 .2269900000D+01 .2027000000D+00 -.2246200000D+02 -.1224420000D+01 .6325629000D+03 .7789440000D+02 .2529249000D+01 .9112400000D+01 .5085213000D+01 .3316600000D+01 .8632000000D+00 .4967700000D+01 .1160685000D+03 -.6664600000D+00 .1274232100D+04 .1576014600D+03 .5142244000D+01 .1904240000D+02 .1739403000D+01 .6268100000D+01 .3823100000D+01 .1607100000D+01 +7 39220030205200302272452675.4 .3705057000D+03 -.1880874000D+02 .1306898400D+04 .1434417700D+03 .4666561000D+01 .2278040000D+02 .3866280000D+00 .5028000000D+01 .2665300000D+01 .8625000000D+00 .1797440000D+02 -.5221310000D+01 .6472274000D+03 .7286829000D+02 .2346360000D+01 .8752300000D+01 .5263311000D+01 .3498400000D+01 .1061300000D+01 .5813400000D+01 .3499720000D+02 .7017260000D+01 .1313165200D+04 .1510156400D+03 .4929132000D+01 .1745300000D+02 .1932976000D+01 .1738000000D+00 .4020400000D+01 .2430100000D+01 +7 39320030227200303212452697.4 .3131948000D+03 -.1503731000D+02 .1341314700D+04 .1485853000D+03 .5084017000D+01 .2066030000D+02 .6434540000D+00 .5293300000D+01 .2932000000D+01 .1521100000D+01 .5160490000D+02 -.8897810000D+01 .6515129000D+03 .6603225000D+02 .2090032000D+01 .9750800000D+01 .5430946000D+01 .3673900000D+01 .1275500000D+01 .2885000000D+00 -.4610920000D+02 .1534722000D+02 .1340331400D+04 .1395854600D+03 .4471872000D+01 .1899180000D+02 .2098286000D+01 .3271000000D+00 .4198100000D+01 .3235200000D+01 +7 39420030321200304122452719.4 .2083521000D+03 -.6862120000D+01 .1440699900D+04 .1603032000D+03 .5599026000D+01 .1892460000D+02 .8750230000D+00 .5466800000D+01 .3084100000D+01 .2317100000D+01 .5350030000D+02 -.9903720000D+01 .6436563000D+03 .6186007000D+02 .2013515000D+01 .1009700000D+02 .5635540000D+01 .3920200000D+01 .1575100000D+01 .8970000000D+00 -.7057210000D+02 .1904425000D+02 .1332124500D+04 .1296472500D+03 .4197008000D+01 .2036500000D+02 .2284488000D+01 .5364000000D+00 .4455200000D+01 .3861400000D+01 +7 39520030412200305042452741.4 .1191502000D+03 .2179000000D-01 .1524674900D+04 .1661313200D+03 .5863047000D+01 .2044550000D+02 .1067959000D+01 .5614900000D+01 .3231700000D+01 .3066000000D+01 .2436800000D+02 -.8151130000D+01 .6397908000D+03 .6328943000D+02 .2219670000D+01 .9304700000D+01 .5880594000D+01 .4213400000D+01 .1889800000D+01 .1528100000D+01 -.2872360000D+02 .1693262000D+02 .1312913700D+04 .1283046600D+03 .4431526000D+01 .1927150000D+02 .2509169000D+01 .8157000000D+00 .4772700000D+01 .4458000000D+01 +7 39620030504200305262452763.4 .8853580000D+02 .1571790000D+01 .1538279300D+04 .1618387900D+03 .5849385000D+01 .2172170000D+02 .1242543000D+01 .5801000000D+01 .3452900000D+01 .3645500000D+01 -.1415630000D+02 -.5489690000D+01 .6486189000D+03 .6752796000D+02 .2517790000D+01 .8910300000D+01 .6123862000D+01 .4470700000D+01 .2143200000D+01 .2238100000D+01 .4440040000D+02 .1193861000D+02 .1314820300D+04 .1349627800D+03 .5008954000D+01 .1803490000D+02 .2745433000D+01 .1089200000D+01 .5052500000D+01 .5132900000D+01 +7 39720030526200306172452785.4 .1152231000D+03 -.2285910000D+01 .1488772600D+04 .1525143500D+03 .5841331000D+01 .2063530000D+02 .1420456000D+01 .6050600000D+01 .3759000000D+01 .4186700000D+01 -.3718930000D+02 -.4150420000D+01 .6561846000D+03 .6846824000D+02 .2643797000D+01 .9381900000D+01 .4042300000D-01 .4674400000D+01 .2364600000D+01 .2865100000D+01 .9941810000D+02 .8450460000D+01 .1332823400D+04 .1396182500D+03 .5417763000D+01 .1871750000D+02 .2948974000D+01 .1305400000D+01 .5280500000D+01 .5777200000D+01 +7 39820030617200307092452807.4 .1626957000D+03 -.8329830000D+01 .1425697300D+04 .1459676300D+03 .6069017000D+01 .1910760000D+02 .1606711000D+01 .4810000000D-01 .4082900000D+01 .4790600000D+01 -.3240040000D+02 -.5295510000D+01 .6437698000D+03 .6281724000D+02 .2503033000D+01 .9356100000D+01 .1907750000D+00 .4859400000D+01 .2615600000D+01 .3357500000D+01 .1034814000D+03 .9508480000D+01 .1334599000D+04 .1331704100D+03 .5316998000D+01 .1937740000D+02 .3099937000D+01 .1478200000D+01 .5505300000D+01 .6281800000D+01 +7 39920030709200307312452829.4 .1850379000D+03 -.1231654000D+02 .1397030500D+04 .1428339800D+03 .6322674000D+01 .1936110000D+02 .1783888000D+01 .2840000000D+00 .4349600000D+01 .5386700000D+01 -.4879900000D+01 -.8526600000D+01 .6082914000D+03 .5214027000D+02 .2221709000D+01 .8196400000D+01 .3118330000D+00 .5070100000D+01 .2949200000D+01 .3825200000D+01 .5452900000D+02 .1543136000D+02 .1300581100D+04 .1144871400D+03 .4762636000D+01 .1790530000D+02 .3208979000D+01 .1643500000D+01 .5784800000D+01 .4329000000D+00 +7 40020030731200308222452851.4 .1512050000D+03 -.1119661000D+02 .1418048600D+04 .1370371800D+03 .6192031000D+01 .2019660000D+02 .1927142000D+01 .4239000000D+00 .4547200000D+01 .5851600000D+01 .2862380000D+02 -.1236246000D+02 .5629174000D+03 .4116747000D+02 .2032262000D+01 .6679300000D+01 .4326030000D+00 .5341900000D+01 .3361000000D+01 .4393100000D+01 -.2297540000D+02 .2411323000D+02 .1238736800D+04 .8978850000D+02 .4151194000D+01 .1471950000D+02 .3302673000D+01 .1840800000D+01 .6161300000D+01 .9198000000D+00 +7 40120030822200309132452873.4 .5624780000D+02 -.4197360000D+01 .1474614900D+04 .1248763600D+03 .5467540000D+01 .1924280000D+02 .2029907000D+01 .4580000000D+00 .4700800000D+01 .6202300000D+01 .4979330000D+02 -.1513542000D+02 .5272411000D+03 .3428280000D+02 .2019508000D+01 .6061500000D+01 .5793570000D+00 .5647200000D+01 .3744200000D+01 .5058600000D+01 -.9285980000D+02 .3230846000D+02 .1174481600D+04 .6850212000D+02 .3898274000D+01 .1219980000D+02 .3412836000D+01 .2098900000D+01 .3090000000D+00 .1553400000D+01 +7 40220030913200310052452895.4 -.8097500000D+02 .7307200000D+01 .1541541500D+04 .1090019600D+03 .4229201000D+01 .1574840000D+02 .2108953000D+01 .3916000000D+00 .4843100000D+01 .2328000000D+00 .4671670000D+02 -.1572059000D+02 .5179450000D+03 .3214596000D+02 .2037440000D+01 .6315900000D+01 .7608220000D+00 .5860100000D+01 .4011700000D+01 .5611900000D+01 -.1230095000D+03 .3704133000D+02 .1137859500D+04 .5759867000D+02 .3965155000D+01 .1209920000D+02 .3565375000D+01 .2368100000D+01 .6653000000D+00 .2207200000D+01 +7 40320031005200310272452917.4 -.2282349000D+03 .2067330000D+02 .1593319000D+04 .9544973000D+02 .2750940000D+01 .1060160000D+02 .2190747000D+01 .2526000000D+00 .5022500000D+01 .6122000000D+00 .1673460000D+02 -.1380953000D+02 .5419888000D+03 .3309913000D+02 .1933666000D+01 .6320900000D+01 .9606010000D+00 .5899500000D+01 .4167900000D+01 .5992200000D+01 -.9580300000D+02 .3656048000D+02 .1154434500D+04 .5734292000D+02 .3963934000D+01 .1280000000D+02 .3764420000D+01 .2507200000D+01 .8916000000D+00 .2682400000D+01 +7 40420031027200311182452939.4 -.3521921000D+03 .3303685000D+02 .1610405000D+04 .8757617000D+02 .1397998000D+01 .5906000000D+01 .2299703000D+01 .1202000000D+00 .5378800000D+01 .1300500000D+01 -.3524990000D+02 -.9767170000D+01 .5938040000D+03 .3679717000D+02 .1671578000D+01 .5474900000D+01 .1155486000D+01 .5818600000D+01 .4235300000D+01 .6274700000D+01 -.1121980000D+02 .3064354000D+02 .1233334800D+04 .6562293000D+02 .3639337000D+01 .1211090000D+02 .3987865000D+01 .2486100000D+01 .1005700000D+01 .3011100000D+01 +7 40520031118200312102452961.4 -.4279136000D+03 .4211131000D+02 .1587029100D+04 .8321208000D+02 .7200720000D+00 .4939400000D+01 .2453942000D+01 .9380000000D-01 .1160000000D+00 .2466400000D+01 -.1004708000D+03 -.4297800000D+01 .6593667000D+03 .4334651000D+02 .1302931000D+01 .3821400000D+01 .1336995000D+01 .5725000000D+01 .4205300000D+01 .2315000000D+00 .1162814000D+03 .2034756000D+02 .1357969400D+04 .8155320000D+02 .2998848000D+01 .9423500000D+01 .4208616000D+01 .2417100000D+01 .1012000000D+01 .3266500000D+01 +7 40620031210200401012452983.4 -.4438305000D+03 .4658048000D+02 .1536860900D+04 .7959495000D+02 .9078230000D+00 .6287600000D+01 .2663247000D+01 .2323000000D+00 .9804000000D+00 .3208000000D+01 -.1694444000D+03 .1832630000D+01 .7229532000D+03 .5158757000D+02 .9396360000D+00 .1699400000D+01 .1509590000D+01 .5685100000D+01 .4007000000D+01 .4289000000D+00 .2645044000D+03 .7454310000D+01 .1493958100D+04 .1022788900D+03 .2260812000D+01 .5251200000D+01 .4414891000D+01 .2389600000D+01 .8603000000D+00 .3463200000D+01 +7 40720040101200401232453005.4 -.4017014000D+03 .4610109000D+02 .1489628300D+04 .7896715000D+02 .9473160000D+00 .6327300000D+01 .2924706000D+01 .5436000000D+00 .1167800000D+01 .3665700000D+01 -.2336007000D+03 .7910980000D+01 .7715740000D+03 .5962561000D+02 .7619260000D+00 .5322000000D+00 .1679937000D+01 .5710000000D+01 .3562500000D+01 .4237500000D+01 .4111310000D+03 -.6138170000D+01 .1607818900D+04 .1232315600D+03 .1821236000D+01 .8273000000D+00 .4607434000D+01 .2420500000D+01 .4760000000D+00 .2820400000D+01 +7 40820040123200402142453027.4 -.3119588000D+03 .4100711000D+02 .1477094800D+04 .8761555000D+02 .6788090000D+00 .4394200000D+01 .3218816000D+01 .9540000000D+00 .8414000000D+00 .4125700000D+01 -.2860070000D+03 .1329723000D+02 .7972659000D+03 .6578336000D+02 .8610610000D+00 .2419100000D+01 .1852149000D+01 .5789800000D+01 .3155600000D+01 .4272800000D+01 .5393588000D+03 -.1886381000D+02 .1679613100D+04 .1405943300D+03 .1976080000D+01 .4154900000D+01 .4789699000D+01 .2497800000D+01 .5750000000D-01 .1163100000D+01 +7 40920040214200403072453049.4 -.1868070000D+03 .3187842000D+02 .1517571600D+04 .1088235800D+03 .8771720000D+00 .1636200000D+01 .3514787000D+01 .1331100000D+01 .6039300000D+01 .5522000000D+01 -.3211614000D+03 .1739682000D+02 .7976291000D+03 .6899594000D+02 .1048558000D+01 .3706900000D+01 .2029775000D+01 .5918000000D+01 .3029100000D+01 .4551800000D+01 .6381302000D+03 -.2952804000D+02 .1703148800D+04 .1520696600D+03 .2441578000D+01 .7647600000D+01 .4965138000D+01 .2610400000D+01 .6157400000D+01 .1367200000D+01 +7 41020040307200403292453071.4 -.3772770000D+02 .1944100000D+02 .1608855500D+04 .1396902700D+03 .1962095000D+01 .5459900000D+01 .3784433000D+01 .1615400000D+01 .5671000000D+01 .8455000000D+00 -.3336684000D+03 .1957836000D+02 .7751794000D+03 .6903574000D+02 .1151822000D+01 .4119400000D+01 .2220831000D+01 .6103000000D+01 .3115300000D+01 .4914200000D+01 .6972007000D+03 -.3694282000D+02 .1679773500D+04 .1565086400D+03 .2823344000D+01 .9526900000D+01 .5140821000D+01 .2760500000D+01 .6170100000D+01 .1665500000D+01 +7 41120040329200404202453093.4 .1191872000D+03 .5062940000D+01 .1726900100D+04 .1738879900D+03 .3350025000D+01 .1103290000D+02 .4013579000D+01 .1824900000D+01 .5631600000D+01 .1244000000D+01 -.3184117000D+03 .1923108000D+02 .7382719000D+03 .6722131000D+02 .1139211000D+01 .3778500000D+01 .2439357000D+01 .8580000000D-01 .3409200000D+01 .5474000000D+01 .7043053000D+03 -.3973456000D+02 .1617267500D+04 .1544758800D+03 .2939967000D+01 .9518100000D+01 .5330751000D+01 .2968100000D+01 .5750000000D-01 .2088400000D+01 +7 41220040420200405122453115.4 .2570957000D+03 -.8720310000D+01 .1829371200D+04 .2032568700D+03 .4666942000D+01 .1548640000D+02 .4204969000D+01 .1996500000D+01 .5686900000D+01 .1547300000D+01 -.2746338000D+03 .1615907000D+02 .7024720000D+03 .6714139000D+02 .1178653000D+01 .3906800000D+01 .2695824000D+01 .4425000000D+00 .3944800000D+01 .5770000000D-01 .6510273000D+03 -.3689921000D+02 .1536474900D+04 .1504742800D+03 .2894339000D+01 .8910000000D+01 .5552047000D+01 .3260300000D+01 .4212000000D+00 .2768900000D+01 +7 41320040512200406032453137.4 .3420122000D+03 -.1856182000D+02 .1870018000D+04 .2196587800D+03 .5555834000D+01 .1734640000D+02 .4373866000D+01 .2166300000D+01 .5806100000D+01 .1886600000D+01 -.2112578000D+03 .1108627000D+02 .6837510000D+03 .7218468000D+02 .1514998000D+01 .5558000000D+01 .2977433000D+01 .8294000000D+00 .4507300000D+01 .8043000000D+00 .5446362000D+03 -.2889798000D+02 .1472526700D+04 .1531052000D+03 .3167352000D+01 .1084130000D+02 .5809857000D+01 .3628000000D+01 .9518000000D+00 .3588200000D+01 +7 41420040603200406252453159.4 .3492161000D+03 -.2183611000D+02 .1823342100D+04 .2192936800D+03 .5822595000D+01 .1671500000D+02 .4541150000D+01 .2368400000D+01 .6004000000D+01 .2358600000D+01 -.1473579000D+03 .5726330000D+01 .6815264000D+03 .8021220000D+02 .2018804000D+01 .7353800000D+01 .3245960000D+01 .1161200000D+01 .4886300000D+01 .1295100000D+01 .4152009000D+03 -.1835247000D+02 .1451585500D+04 .1663828600D+03 .4030004000D+01 .1492890000D+02 .6080207000D+01 .3993700000D+01 .1424700000D+01 .4182600000D+01 +7 41520040625200407172453181.4 .2827518000D+03 -.1850182000D+02 .1706147000D+04 .2069740400D+03 .5654924000D+01 .1619390000D+02 .4725960000D+01 .2629600000D+01 .2200000000D-01 .3017400000D+01 -.1042111000D+03 .2073450000D+01 .6745159000D+03 .8481967000D+02 .2368069000D+01 .7968700000D+01 .3472100000D+01 .1426800000D+01 .5153800000D+01 .1740200000D+01 .3078049000D+03 -.9392150000D+01 .1457557900D+04 .1814971400D+03 .4981107000D+01 .1775240000D+02 .3951700000D-01 .4294700000D+01 .1751000000D+01 .4644700000D+01 +7 41620040717200408082453203.4 .1817787000D+03 -.1180844000D+02 .1574771700D+04 .1941404500D+03 .5546889000D+01 .1786720000D+02 .4933814000D+01 .2944100000D+01 .4033000000D+00 .3700700000D+01 -.9255270000D+02 .1218180000D+01 .6426777000D+03 .8196400000D+02 .2399252000D+01 .7468400000D+01 .3658877000D+01 .1667300000D+01 .5407600000D+01 .2295200000D+01 .2593582000D+03 -.5551230000D+01 .1443388500D+04 .1855699600D+03 .5431620000D+01 .1785720000D+02 .2352410000D+00 .4542400000D+01 .2009500000D+01 .5152600000D+01 +7 41720040808200408302453225.4 .1032672000D+03 -.6826490000D+01 .1485858400D+04 .1871106600D+03 .5684886000D+01 .1927130000D+02 .5143384000D+01 .3251100000D+01 .7591000000D+00 .4288200000D+01 -.1046077000D+03 .2558900000D+01 .5885888000D+03 .7343938000D+02 .2202922000D+01 .7160100000D+01 .3831186000D+01 .1928200000D+01 .5712000000D+01 .2999500000D+01 .2733803000D+03 -.7392620000D+01 .1382946000D+04 .1746856400D+03 .5255650000D+01 .1711570000D+02 .3982010000D+00 .4781600000D+01 .2280800000D+01 .5811700000D+01 +7 41820040830200409212453247.4 .8710410000D+02 -.7277120000D+01 .1451272700D+04 .1801159400D+03 .5687507000D+01 .1827810000D+02 .5321418000D+01 .3491700000D+01 .1022700000D+01 .4909900000D+01 -.1185908000D+03 .4144750000D+01 .5366817000D+03 .6515892000D+02 .2028994000D+01 .7495300000D+01 .4016350000D+01 .2223900000D+01 .6069400000D+01 .3681900000D+01 .3131682000D+03 -.1174162000D+02 .1300669200D+04 .1574635800D+03 .4858914000D+01 .1802610000D+02 .5608950000D+00 .5049800000D+01 .2608400000D+01 .2413000000D+00 +7 41920040921200410132453269.4 .1276537000D+03 -.1282368000D+02 .1441948300D+04 .1663370300D+03 .5265096000D+01 .1734680000D+02 .5466209000D+01 .3674800000D+01 .1229700000D+01 .5693400000D+01 -.1139051000D+03 .4035340000D+01 .5137105000D+03 .6137441000D+02 .2007719000D+01 .7291900000D+01 .4221185000D+01 .2503700000D+01 .1009000000D+00 .4302400000D+01 .3243651000D+03 -.1362159000D+02 .1254331700D+04 .1472202700D+03 .4760700000D+01 .1876890000D+02 .7517910000D+00 .5335300000D+01 .2945000000D+01 .8750000000D+00 +7 42020041013200411042453291.4 .1756784000D+03 -.1907150000D+02 .1425765200D+04 .1481980000D+03 .4635642000D+01 .1911750000D+02 .5619211000D+01 .3865700000D+01 .1465700000D+01 .1897000000D+00 -.8587750000D+02 .1681610000D+01 .5259365000D+03 .6097915000D+02 .2043370000D+01 .6422500000D+01 .4426002000D+01 .2710700000D+01 .3096000000D+00 .5031900000D+01 .2752285000D+03 -.9922480000D+01 .1285119100D+04 .1480675100D+03 .4980843000D+01 .1717900000D+02 .9681210000D+00 .5574600000D+01 .3193100000D+01 .1545500000D+01 +7 42120041104200411262453313.4 .1755078000D+03 -.2084561000D+02 .1399242600D+04 .1358383900D+03 .4355730000D+01 .2027880000D+02 .5831906000D+01 .4136800000D+01 .1796700000D+01 .8409000000D+00 -.4891310000D+02 -.1708500000D+01 .5540246000D+03 .6065761000D+02 .2028780000D+01 .6437300000D+01 .4621478000D+01 .2873500000D+01 .4727000000D+00 .5902000000D+01 .1841023000D+03 -.2049970000D+01 .1369885400D+04 .1523167300D+03 .5178137000D+01 .1597880000D+02 .1185768000D+01 .5754800000D+01 .3364300000D+01 .2394100000D+01 +7 42220041126200412182453335.4 .1120844000D+03 -.1654227000D+02 .1396922500D+04 .1379151100D+03 .4748142000D+01 .1878320000D+02 .6117581000D+01 .4472500000D+01 .2154200000D+01 .1529800000D+01 -.2558270000D+02 -.4094500000D+01 .5721344000D+03 .5863103000D+02 .1962836000D+01 .7328000000D+01 .4829798000D+01 .3075900000D+01 .7021000000D+00 .3573000000D+00 .1073455000D+03 .4971630000D+01 .1434609500D+04 .1508667900D+03 .5132670000D+01 .1773260000D+02 .1403930000D+01 .5942300000D+01 .3562400000D+01 .3210400000D+01 +7 42320041218200501092453357.4 .2753110000D+02 -.9859090000D+01 .1437993200D+04 .1479020600D+03 .5373189000D+01 .1802350000D+02 .1434630000D+00 .4782600000D+01 .2456800000D+01 .2346500000D+01 -.2888850000D+02 -.4203550000D+01 .5722942000D+03 .5636651000D+02 .1966647000D+01 .7484800000D+01 .5080624000D+01 .3379700000D+01 .1059700000D+01 .9988000000D+00 .9134170000D+02 .6778120000D+01 .1429970600D+04 .1426990100D+03 .4977326000D+01 .1866810000D+02 .1647657000D+01 .6213200000D+01 .3880100000D+01 .3872500000D+01 +7 42420050109200501312453379.4 -.1427730000D+02 -.6764100000D+01 .1470497400D+04 .1492971700D+03 .5585508000D+01 .1922750000D+02 .4219090000D+00 .5060200000D+01 .2757500000D+01 .3077900000D+01 -.5025440000D+02 -.2684810000D+01 .5706124000D+03 .5688088000D+02 .2142240000D+01 .7095000000D+01 .5372106000D+01 .3743300000D+01 .1459400000D+01 .1720700000D+01 .1291224000D+03 .3739670000D+01 .1384405800D+04 .1366060600D+03 .5108234000D+01 .1735580000D+02 .1931370000D+01 .2893000000D+00 .4290100000D+01 .4560200000D+01 +7 42520050131200502222453401.4 .1341970000D+02 -.1008975000D+02 .1437692100D+04 .1368277600D+03 .5362475000D+01 .1860890000D+02 .6690710000D+00 .5365100000D+01 .3137300000D+01 .3686400000D+01 -.6496870000D+02 -.1715530000D+01 .5809776000D+03 .5823477000D+02 .2309063000D+01 .7390800000D+01 .5651603000D+01 .4052600000D+01 .1793600000D+01 .2454000000D+01 .1660307000D+03 .6866900000D+00 .1360763000D+04 .1360612500D+03 .5430345000D+01 .1698150000D+02 .2221821000D+01 .6305000000D+00 .4658800000D+01 .5310000000D+01 +7 42620050222200503162453423.4 .7733710000D+02 -.1716852000D+02 .1359697700D+04 .1217899000D+03 .5276414000D+01 .1607570000D+02 .9108230000D+00 .5727600000D+01 .3585100000D+01 .4346900000D+01 -.5316390000D+02 -.3139000000D+01 .5915765000D+03 .5485555000D+02 .2211248000D+01 .7668200000D+01 .5868410000D+01 .4272000000D+01 .2084700000D+01 .3021900000D+01 .1496048000D+03 .2481860000D+01 .1368646400D+04 .1307460500D+03 .5338601000D+01 .1772540000D+02 .2459378000D+01 .8698000000D+00 .4950100000D+01 .5922600000D+01 +7 42720050316200504072453445.4 .1170295000D+03 -.2258910000D+02 .1308883500D+04 .1152723600D+03 .5503688000D+01 .1523330000D+02 .1153696000D+01 .6065500000D+01 .3966600000D+01 .5078600000D+01 -.1590150000D+02 -.6942810000D+01 .5852436000D+03 .4537486000D+02 .1850176000D+01 .6758500000D+01 .6024616000D+01 .4435100000D+01 .2414400000D+01 .3496400000D+01 .7033360000D+02 .1019742000D+02 .1372393400D+04 .1135661700D+03 .4596345000D+01 .1651540000D+02 .2624940000D+01 .1014200000D+01 .5224400000D+01 .1029000000D+00 +7 42820050407200504292453467.4 .9180010000D+02 -.2246163000D+02 .1332360200D+04 .1141059700D+03 .5557811000D+01 .1618180000D+02 .1370485000D+01 .6259000000D+01 .4211900000D+01 .5648500000D+01 .2863160000D+02 -.1151230000D+02 .5613599000D+03 .3357538000D+02 .1473130000D+01 .5055400000D+01 .6155577000D+01 .4584700000D+01 .2854700000D+01 .4045500000D+01 -.4097410000D+02 .2116990000D+02 .1352509500D+04 .8894274000D+02 .3542146000D+01 .1288670000D+02 .2744907000D+01 .1094800000D+01 .5563400000D+01 .5562000000D+00 +7 42920050429200505212453489.4 -.6511000000D+00 -.1626887000D+02 .1419534300D+04 .1126423600D+03 .5108863000D+01 .1589890000D+02 .1536388000D+01 .5800000000D-02 .4346700000D+01 .6022000000D+01 .6047930000D+02 -.1499053000D+02 .5317007000D+03 .2438296000D+02 .1301905000D+01 .3936400000D+01 .1486500000D-01 .4751500000D+01 .3343000000D+01 .4786900000D+01 -.1422060000D+03 .3155551000D+02 .1316767600D+04 .6619976000D+02 .2739876000D+01 .9044300000D+01 .2857259000D+01 .1140100000D+01 .6020900000D+01 .1167100000D+01 +7 43020050521200506122453511.4 -.1352920000D+03 -.6007040000D+01 .1531692200D+04 .1121738500D+03 .4236668000D+01 .1332670000D+02 .1657540000D+01 .6207200000D+01 .4399200000D+01 .9500000000D-02 .6924770000D+02 -.1633660000D+02 .5093926000D+03 .2052815000D+02 .1266166000D+01 .3905000000D+01 .1875980000D+00 .4916800000D+01 .3695100000D+01 .5473900000D+01 -.2044075000D+03 .3858741000D+02 .1283527400D+04 .5230115000D+02 .2456175000D+01 .7583700000D+01 .2989654000D+01 .1190600000D+01 .2062000000D+00 .1954800000D+01 +7 43120050612200507042453533.4 -.2803973000D+03 .5626650000D+01 .1634800300D+04 .1156622000D+03 .3213229000D+01 .9186000000D+01 .1755312000D+01 .6092300000D+01 .4371300000D+01 .2399000000D+00 .5577900000D+02 -.1552763000D+02 .5017110000D+03 .2177287000D+02 .1194855000D+01 .3921900000D+01 .3840610000D+00 .5019500000D+01 .3867700000D+01 .5911900000D+01 -.2192665000D+03 .4133346000D+02 .1270006100D+04 .4944869000D+02 .2411995000D+01 .7957000000D+01 .3150779000D+01 .1289200000D+01 .5121000000D+00 .2571100000D+01 +7 43220050704200507262453555.4 -.4123670000D+03 .1658635000D+02 .1710176000D+04 .1225893500D+03 .2309212000D+01 .4602300000D+01 .1847676000D+01 .6010600000D+01 .4234900000D+01 .4613000000D+00 .2747710000D+02 -.1317043000D+02 .5073081000D+03 .2634224000D+02 .1047851000D+01 .3390700000D+01 .5838120000D+00 .5070600000D+01 .3897200000D+01 .6198400000D+01 -.1936828000D+03 .4026543000D+02 .1285537600D+04 .5637041000D+02 .2304803000D+01 .7871900000D+01 .3332378000D+01 .1425200000D+01 .6436000000D+00 .2963200000D+01 +7 43320050726200508172453577.4 -.5203454000D+03 .2593151000D+02 .1752960000D+04 .1303039300D+03 .1726918000D+01 .3929000000D+00 .1944854000D+01 .5986100000D+01 .3951700000D+01 .5911000000D+00 -.7479000000D+01 -.9988010000D+01 .5194553000D+03 .3239247000D+02 .8780640000D+00 .2383500000D+01 .7720260000D+00 .5117100000D+01 .3796100000D+01 .1109000000D+00 -.1397958000D+03 .3637969000D+02 .1329157700D+04 .7027275000D+02 .2089104000D+01 .6575200000D+01 .3520408000D+01 .1561800000D+01 .6337000000D+00 .3245500000D+01 +7 43420050817200509082453599.4 -.6028219000D+03 .3354873000D+02 .1765929700D+04 .1367011300D+03 .1558241000D+01 .3066500000D+01 .2051799000D+01 .6014800000D+01 .3589800000D+01 .4120300000D+01 -.4373830000D+02 -.6485820000D+01 .5322463000D+03 .3866539000D+02 .7630200000D+00 .1164900000D+01 .9458390000D+00 .5178800000D+01 .3565000000D+01 .1182000000D+00 -.6672810000D+02 .3044260000D+02 .1394450600D+04 .8862503000D+02 .1871648000D+01 .4187300000D+01 .3705833000D+01 .1689300000D+01 .4799000000D+00 .3447000000D+01 +7 43520050908200509302453621.4 -.6603344000D+03 .3949934000D+02 .1752802800D+04 .1405790400D+03 .1676137000D+01 .5575300000D+01 .2172498000D+01 .6089800000D+01 .3343700000D+01 .4388100000D+01 -.7941190000D+02 -.2878820000D+01 .5437153000D+03 .4463725000D+02 .7630780000D+00 .6132000000D+00 .1108451000D+01 .5256700000D+01 .3269000000D+01 .4977600000D+01 .2278680000D+02 .2266162000D+02 .1476742400D+04 .1101770300D+03 .1846160000D+01 .1122200000D+01 .3886422000D+01 .1811600000D+01 .1849000000D+00 .3104600000D+01 +7 43620050930200510222453643.4 -.6887490000D+03 .4339367000D+02 .1715475100D+04 .1411956100D+03 .1836431000D+01 .6871200000D+01 .2314351000D+01 .6216100000D+01 .3289900000D+01 .4701700000D+01 -.1144944000D+03 .7810200000D+00 .5545296000D+03 .5018840000D+02 .8794690000D+00 .1747000000D+01 .1263553000D+01 .5347700000D+01 .3036200000D+01 .4512600000D+01 .1299985000D+03 .1287947000D+02 .1574017900D+04 .1344325300D+03 .2207235000D+01 .3363500000D+01 .4062526000D+01 .1931800000D+01 .6152200000D+01 .1242500000D+01 +7 43720051022200511132453665.4 -.6765192000D+03 .4410462000D+02 .1658092300D+04 .1389822600D+03 .1877940000D+01 .6723700000D+01 .2491079000D+01 .1330000000D+00 .3445400000D+01 .5138300000D+01 -.1485237000D+03 .4405290000D+01 .5649426000D+03 .5511539000D+02 .1060116000D+01 .2895000000D+01 .1414930000D+01 .5452000000D+01 .2922300000D+01 .4635600000D+01 .2529834000D+03 .1215230000D+01 .1679410800D+04 .1599637000D+03 .2944217000D+01 .7691600000D+01 .4234419000D+01 .2052600000D+01 .5960600000D+01 .1345200000D+01 +7 43820051113200512052453687.4 -.6094375000D+03 .4015867000D+02 .1597705900D+04 .1380717400D+03 .1896742000D+01 .6090600000D+01 .2719697000D+01 .4359000000D+00 .3882700000D+01 .5906300000D+01 -.1785125000D+03 .7688920000D+01 .5724576000D+03 .5879811000D+02 .1237865000D+01 .3692800000D+01 .1569634000D+01 .5579000000D+01 .2917500000D+01 .4863600000D+01 .3782131000D+03 -.1114677000D+02 .1771666700D+04 .1827690400D+03 .3825168000D+01 .1147190000D+02 .4404344000D+01 .2182400000D+01 .5906200000D+01 .1557600000D+01 +7 43920051205200512272453709.4 -.4835614000D+03 .3090048000D+02 .1569533000D+04 .1470049500D+03 .2420524000D+01 .8288500000D+01 .3004593000D+01 .8249000000D+00 .4504400000D+01 .5668000000D+00 -.1980328000D+03 .1002627000D+02 .5718056000D+03 .6031333000D+02 .1345601000D+01 .3914800000D+01 .1741557000D+01 .5750600000D+01 .3021500000D+01 .5201500000D+01 .4774754000D+03 -.2162078000D+02 .1815339900D+04 .1964997000D+03 .4514939000D+01 .1342220000D+02 .4580632000D+01 .2338900000D+01 .5963800000D+01 .1841800000D+01 +7 44020051227200601182453731.4 -.3197349000D+03 .1787849000D+02 .1600928500D+04 .1693237800D+03 .3626834000D+01 .1294790000D+02 .3316791000D+01 .1208300000D+01 .4963700000D+01 .1158000000D+01 -.1991479000D+03 .1067394000D+02 .5590918000D+03 .5942259000D+02 .1352635000D+01 .3694000000D+01 .1951239000D+01 .6001400000D+01 .3269400000D+01 .5752600000D+01 .5179143000D+03 -.2707483000D+02 .1780390500D+04 .1963009700D+03 .4734475000D+01 .1298770000D+02 .4779242000D+01 .2550300000D+01 .6137700000D+01 .2267100000D+01 +7 44120060118200602092453753.4 -.1651485000D+03 .5129220000D+01 .1664321800D+04 .1941039000D+03 .4903565000D+01 .1644380000D+02 .3609950000D+01 .1527000000D+01 .5264200000D+01 .1585400000D+01 -.1785513000D+03 .9296550000D+01 .5393714000D+03 .5818342000D+02 .1350532000D+01 .3954000000D+01 .2215113000D+01 .7260000000D-01 .3700200000D+01 .2542000000D+00 .4848825000D+03 -.2592091000D+02 .1674340000D+04 .1852102600D+03 .4545259000D+01 .1196900000D+02 .5018626000D+01 .2848700000D+01 .1781000000D+00 .2937600000D+01 +7 44220060209200603032453775.4 -.6941550000D+02 -.2875780000D+01 .1690111800D+04 .2062087400D+03 .5640053000D+01 .1696620000D+02 .3865752000D+01 .1804300000D+01 .5526100000D+01 .2046500000D+01 -.1444927000D+03 .6613510000D+01 .5265262000D+03 .5982803000D+02 .1509459000D+01 .5070900000D+01 .2519266000D+01 .4829000000D+00 .4209600000D+01 .9423000000D+00 .4000824000D+03 -.1988739000D+02 .1552033000D+04 .1751765100D+03 .4461419000D+01 .1333390000D+02 .5302375000D+01 .3231900000D+01 .6419000000D+00 .3705200000D+01 +7 44320060303200603252453797.4 -.5013170000D+02 -.4381600000D+01 .1640293800D+04 .2012343000D+03 .5707956000D+01 .1587360000D+02 .4098193000D+01 .2086500000D+01 .5824300000D+01 .2655500000D+01 -.1145916000D+03 .4241940000D+01 .5247054000D+03 .6324988000D+02 .1760141000D+01 .5858100000D+01 .2812056000D+01 .8492000000D+00 .4618500000D+01 .1483400000D+01 .3127759000D+03 -.1337215000D+02 .1468753700D+04 .1736609100D+03 .4784439000D+01 .1553300000D+02 .5597947000D+01 .3622600000D+01 .1099800000D+01 .4317300000D+01 +7 44420060325200604162453819.4 -.7978280000D+02 -.1696360000D+01 .1545580900D+04 .1882618100D+03 .5513795000D+01 .1593710000D+02 .4326526000D+01 .2396700000D+01 .6181200000D+01 .3358200000D+01 -.1027621000D+03 .3519790000D+01 .5194461000D+03 .6360297000D+02 .1869754000D+01 .5721200000D+01 .3054106000D+01 .1143800000D+01 .4931600000D+01 .2058700000D+01 .2668414000D+03 -.1048692000D+02 .1423650200D+04 .1731450500D+03 .5082325000D+01 .1576200000D+02 .5855627000D+01 .3945600000D+01 .1451800000D+01 .4880300000D+01 +7 44520060416200605082453841.4 -.1074178000D+03 .6317800000D+00 .1470805400D+04 .1787891100D+03 .5488462000D+01 .1646840000D+02 .4551610000D+01 .2705600000D+01 .2530000000D+00 .3992200000D+01 -.1077694000D+03 .4419590000D+01 .4988751000D+03 .5913451000D+02 .1778210000D+01 .5402900000D+01 .3253295000D+01 .1406500000D+01 .5228800000D+01 .2764100000D+01 .2716394000D+03 -.1230327000D+02 .1381837400D+04 .1646234000D+03 .4966342000D+01 .1477980000D+02 .6059697000D+01 .4207500000D+01 .1741700000D+01 .5547600000D+01 +7 44620060508200605302453863.4 -.9560690000D+02 -.8519200000D+00 .1453322600D+04 .1743603600D+03 .5565811000D+01 .1527280000D+02 .4753775000D+01 .2955100000D+01 .5242000000D+00 .4613800000D+01 -.1150839000D+03 .5654650000D+01 .4690746000D+03 .5288448000D+02 .1628802000D+01 .5504400000D+01 .3443773000D+01 .1676800000D+01 .5554700000D+01 .3472700000D+01 .2991148000D+03 -.1643350000D+02 .1331340600D+04 .1500608900D+03 .4587331000D+01 .1502560000D+02 .6236021000D+01 .4453900000D+01 .2037200000D+01 .6280000000D+01 +7 44720060530200606212453885.4 -.4433990000D+02 -.6249060000D+01 .1478331500D+04 .1695386600D+03 .5480068000D+01 .1358810000D+02 .4922001000D+01 .3132500000D+01 .7124000000D+00 .5379800000D+01 -.1096758000D+03 .5818650000D+01 .4458936000D+03 .4882742000D+02 .1572377000D+01 .5309000000D+01 .3651902000D+01 .1949000000D+01 .5869700000D+01 .4100800000D+01 .3067589000D+03 -.1902049000D+02 .1294032100D+04 .1391050000D+03 .4390545000D+01 .1571510000D+02 .1387740000D+00 .4713200000D+01 .2352900000D+01 .6410000000D+00 +7 44820060621200607132453907.4 .1329440000D+02 -.1258112000D+02 .1505414700D+04 .1614497100D+03 .5202039000D+01 .1427700000D+02 .5073805000D+01 .3281900000D+01 .8814000000D+00 .6201600000D+01 -.8807820000D+02 .4512240000D+01 .4377243000D+03 .4762230000D+02 .1597772000D+01 .4524300000D+01 .3873392000D+01 .2181000000D+01 .6108500000D+01 .4787400000D+01 .2689598000D+03 -.1759798000D+02 .1300013200D+04 .1386060000D+03 .4601963000D+01 .1473340000D+02 .3499770000D+00 .4965000000D+01 .2629400000D+01 .1260500000D+01 +7 44920060713200608042453929.4 .3862380000D+02 -.1622858000D+02 .1506574900D+04 .1520075900D+03 .4935285000D+01 .1578370000D+02 .5239399000D+01 .3464000000D+01 .1102600000D+01 .5857000000D+00 -.5998520000D+02 .2543460000D+01 .4361226000D+03 .4683432000D+02 .1604846000D+01 .4054500000D+01 .4087719000D+01 .2368400000D+01 .9300000000D-02 .5622900000D+01 .1949383000D+03 -.1282219000D+02 .1352830100D+04 .1455880600D+03 .5025479000D+01 .1315700000D+02 .5690800000D+00 .5176500000D+01 .2837500000D+01 .2007900000D+01 +7 45020060804200608262453951.4 .1737400000D+02 -.1569814000D+02 .1486652400D+04 .1457551000D+03 .4931314000D+01 .1565470000D+02 .5437128000D+01 .3706500000D+01 .1393100000D+01 .1196500000D+01 -.3906710000D+02 .1129910000D+01 .4251984000D+03 .4423576000D+02 .1537351000D+01 .4207900000D+01 .4291374000D+01 .2556200000D+01 .2138000000D+00 .1040000000D+00 .1208732000D+03 -.7875590000D+01 .1415435200D+04 .1510841800D+03 .5336408000D+01 .1359390000D+02 .7745210000D+00 .5362100000D+01 .3027200000D+01 .2809500000D+01 +7 45120060826200609172453973.4 -.2926230000D+02 -.1274736000D+02 .1471262200D+04 .1444916900D+03 .5185931000D+01 .1493860000D+02 .5657506000D+01 .3974500000D+01 .1695600000D+01 .1873700000D+01 -.3171970000D+02 .8700400000D+00 .3988883000D+03 .3987525000D+02 .1427288000D+01 .4122900000D+01 .4499670000D+01 .2791300000D+01 .4953000000D+00 .7354000000D+00 .8208410000D+02 -.5991550000D+01 .1441480600D+04 .1488147000D+03 .5385964000D+01 .1474920000D+02 .9672000000D+00 .5564900000D+01 .3264500000D+01 .3466700000D+01 +7 45220060917200610092453995.4 -.6033630000D+02 -.1106953000D+02 .1469495300D+04 .1423525500D+03 .5328055000D+01 .1535680000D+02 .5869153000D+01 .4214300000D+01 .1971900000D+01 .2539500000D+01 -.3305940000D+02 .1341780000D+01 .3664644000D+03 .3565430000D+02 .1350183000D+01 .3698500000D+01 .4725019000D+01 .3077700000D+01 .8383000000D+00 .1385500000D+01 .8602250000D+02 -.7945510000D+01 .1419526600D+04 .1403536300D+03 .5327846000D+01 .1440120000D+02 .1163322000D+01 .5816900000D+01 .3578300000D+01 .4065800000D+01 +7 45320061009200610312454017.4 -.4488620000D+02 -.1361676000D+02 .1460636800D+04 .1311364400D+03 .5008452000D+01 .1546140000D+02 .6049856000D+01 .4416100000D+01 .2252500000D+01 .3081500000D+01 -.3234380000D+02 .1561830000D+01 .3423453000D+03 .3272105000D+02 .1306266000D+01 .3502400000D+01 .4956261000D+01 .3355100000D+01 .1162400000D+01 .2066300000D+01 .1060802000D+03 -.1136743000D+02 .1383801900D+04 .1325485000D+03 .5391298000D+01 .1357600000D+02 .1373876000D+01 .6102000000D+01 .3923400000D+01 .4732300000D+01 +7 45420061031200611222454039.4 .1571190000D+02 -.2048902000D+02 .1423135900D+04 .1095638400D+03 .4300067000D+01 .1343150000D+02 .6207697000D+01 .4610300000D+01 .2606200000D+01 .3576700000D+01 -.2150960000D+02 .7585600000D+00 .3329550000D+03 .3016349000D+02 .1214897000D+01 .3502400000D+01 .5162748000D+01 .3553400000D+01 .1424700000D+01 .2621600000D+01 .9998140000D+02 -.1230673000D+02 .1382382600D+04 .1281063700D+03 .5445949000D+01 .1407080000D+02 .1588249000D+01 .6330000000D-01 .4219900000D+01 .5378600000D+01 +7 45520061122200612142454061.4 .8816970000D+02 -.2883171000D+02 .1361531900D+04 .8534135000D+02 .3711882000D+01 .1022950000D+02 .9099700000D-01 .4844700000D+01 .3076100000D+01 .4199900000D+01 .3430000000D+00 -.1199760000D+01 .3351801000D+03 .2697781000D+02 .1030235000D+01 .3195700000D+01 .5328532000D+01 .3655400000D+01 .1649700000D+01 .3036400000D+01 .3827270000D+02 -.7809340000D+01 .1432662900D+04 .1228760500D+03 .5105653000D+01 .1452590000D+02 .1781681000D+01 .2027000000D+00 .4441200000D+01 .5859000000D+01 +7 45620061214200701052454083.4 .1273863000D+03 -.3454319000D+02 .1308416300D+04 .7011148000D+02 .3619131000D+01 .8951900000D+01 .3007280000D+00 .5137200000D+01 .3545400000D+01 .5008900000D+01 .2855350000D+02 -.3928570000D+01 .3435291000D+03 .2341044000D+02 .7785410000D+00 .2444000000D+01 .5467997000D+01 .3681400000D+01 .1896100000D+01 .3412100000D+01 -.7731590000D+02 .2313570000D+01 .1510043800D+04 .1142362500D+03 .4194055000D+01 .1282520000D+02 .1945190000D+01 .2289000000D+00 .4607900000D+01 .6211100000D+01 +7 45720070105200701272454105.4 .1019549000D+03 -.3455365000D+02 .1308486300D+04 .7021592000D+02 .3694224000D+01 .9731500000D+01 .5619950000D+00 .5383000000D+01 .3849300000D+01 .5634400000D+01 .5648300000D+02 -.6842960000D+01 .3537985000D+03 .2033657000D+02 .5301120000D+00 .1495500000D+01 .5610071000D+01 .3674200000D+01 .2259000000D+01 .3918000000D+01 -.2160848000D+03 .1552037000D+02 .1572834200D+04 .1048792100D+03 .2898039000D+01 .8871900000D+01 .2094610000D+01 .1815000000D+00 .4752800000D+01 .2477000000D+00 +7 45820070127200702182454127.4 .9046700000D+01 -.2824431000D+02 .1384910000D+04 .8295448000D+02 .3515956000D+01 .9576200000D+01 .8407540000D+00 .5491800000D+01 .3974400000D+01 .5986300000D+01 .7756480000D+02 -.9333570000D+01 .3631569000D+03 .1842037000D+02 .3791390000D+00 .9180000000D+00 .5780916000D+01 .3707000000D+01 .2834900000D+01 .4912300000D+01 -.3371030000D+03 .2809176000D+02 .1591034900D+04 .9775105000D+02 .1608478000D+01 .4211100000D+01 .2253852000D+01 .1408000000D+00 .4924000000D+01 .7042000000D+00 +7 45920070218200703122454149.4 -.1286067000D+03 -.1732417000D+02 .1513920600D+04 .1030155900D+03 .3083245000D+01 .7523100000D+01 .1094428000D+01 .5528600000D+01 .3943700000D+01 .6157300000D+01 .8646260000D+02 -.1084942000D+02 .3710435000D+03 .1802702000D+02 .3587040000D+00 .1080700000D+01 .5993869000D+01 .3858600000D+01 .3376900000D+01 .5873400000D+01 -.4109917000D+03 .3706972000D+02 .1562559900D+04 .9250535000D+02 .6898130000D+00 .1718100000D+01 .2439762000D+01 .1891000000D+00 .5266300000D+01 .2196200000D+01 +7 46020070312200704032454171.4 -.2788739000D+03 -.4509340000D+01 .1647264800D+04 .1250227300D+03 .2679376000D+01 .4527600000D+01 .1308720000D+01 .5565700000D+01 .3769800000D+01 .6059800000D+01 .8089570000D+02 -.1105807000D+02 .3798226000D+03 .1971330000D+02 .3678800000D+00 .1172300000D+01 .6242920000D+01 .4130700000D+01 .3561000000D+01 .2110000000D-01 -.4306085000D+03 .4134278000D+02 .1510763400D+04 .8889961000D+02 .3610250000D+00 .2909100000D+01 .2655888000D+01 .3612000000D+00 .6029200000D+01 .3317000000D+01 +7 46120070403200704252454193.4 -.4170052000D+03 .7959850000D+01 .1750544100D+04 .1446440500D+03 .2567215000D+01 .3221400000D+01 .1489774000D+01 .5624500000D+01 .3521400000D+01 .5283600000D+01 .6275210000D+02 -.9986660000D+01 .3918629000D+03 .2377247000D+02 .3698770000D+00 .8421000000D+00 .2215790000D+00 .4427200000D+01 .3401600000D+01 .1848000000D+00 -.4056544000D+03 .4134881000D+02 .1465869700D+04 .8938440000D+02 .4174030000D+00 .3033600000D+01 .2892935000D+01 .6355000000D+00 .6193900000D+01 .3740000000D+01 +7 46220070425200705172454215.4 -.5308941000D+03 .1886839000D+02 .1812823900D+04 .1597081900D+03 .2751190000D+01 .5218900000D+01 .1647268000D+01 .5703800000D+01 .3324400000D+01 .4802800000D+01 .3648310000D+02 -.7933810000D+01 .4061026000D+03 .2940305000D+02 .4316820000D+00 .3249000000D+00 .4711840000D+00 .4675700000D+01 .3056500000D+01 .5685100000D+01 -.3498877000D+03 .3804282000D+02 .1448132900D+04 .9676491000D+02 .6982350000D+00 .1649000000D+01 .3135280000D+01 .9481000000D+00 .5835700000D+01 .4178200000D+01 +7 46320070517200706082454237.4 -.6159010000D+03 .2765026000D+02 .1835769000D+04 .1695749000D+03 .3053176000D+01 .7448100000D+01 .1789882000D+01 .5800900000D+01 .3236000000D+01 .4828500000D+01 .6821500000D+01 -.5290250000D+01 .4186004000D+03 .3528178000D+02 .5840170000D+00 .9252000000D+00 .6950560000D+00 .4871400000D+01 .2802200000D+01 .4525700000D+01 -.2732107000D+03 .3218976000D+02 .1464786500D+04 .1115780400D+03 .1283063000D+01 .1211600000D+01 .3368739000D+01 .1236000000D+01 .5637200000D+01 .4986000000D+00 +7 46420070608200706302454259.4 -.6686566000D+03 .3386970000D+02 .1823912200D+04 .1742271500D+03 .3313533000D+01 .8724300000D+01 .1926493000D+01 .5919500000D+01 .3249000000D+01 .5017700000D+01 -.2187790000D+02 -.2471150000D+01 .4245313000D+03 .4018457000D+02 .7736790000D+00 .1787500000D+01 .8914970000D+00 .5032300000D+01 .2699900000D+01 .4561700000D+01 -.1819200000D+03 .2433671000D+02 .1513728000D+04 .1321932100D+03 .2104919000D+01 .4592100000D+01 .3583924000D+01 .1473200000D+01 .5584400000D+01 .1049000000D+01 +7 46520070630200707222454281.4 -.6847139000D+03 .3700914000D+02 .1782354300D+04 .1742068200D+03 .3454145000D+01 .8868400000D+01 .2067342000D+01 .6069800000D+01 .3357300000D+01 .5327800000D+01 -.4554120000D+02 .9455000000D-01 .4194422000D+03 .4311063000D+02 .9368270000D+00 .2421800000D+01 .1066107000D+01 .5176900000D+01 .2695800000D+01 .4728100000D+01 -.8295800000D+02 .1515111000D+02 .1584872300D+04 .1556929500D+03 .3064415000D+01 .8306000000D+01 .3776333000D+01 .1664200000D+01 .5597800000D+01 .1305800000D+01 +7 46620070722200708132454303.4 -.6610253000D+03 .3668039000D+02 .1719718400D+04 .1713033800D+03 .3502108000D+01 .8436500000D+01 .2222935000D+01 .6264700000D+01 .3567900000D+01 .5804500000D+01 -.6061030000D+02 .2004220000D+01 .4002656000D+03 .4337527000D+02 .1026026000D+01 .2656800000D+01 .1228810000D+01 .5323500000D+01 .2759600000D+01 .4958400000D+01 .1276340000D+02 .5701250000D+01 .1660169800D+04 .1782148100D+03 .4027977000D+01 .1154480000D+02 .3946484000D+01 .1825500000D+01 .5650100000D+01 .1537700000D+01 +7 46720070813200709042454325.4 -.6001913000D+03 .3300685000D+02 .1650521100D+04 .1688846400D+03 .3607996000D+01 .8826500000D+01 .2400630000D+01 .2261000000D+00 .3877600000D+01 .1555000000D+00 -.6515840000D+02 .2998430000D+01 .3669538000D+03 .4089293000D+02 .1020650000D+01 .2481400000D+01 .1392458000D+01 .5491500000D+01 .2888700000D+01 .5278300000D+01 .9047960000D+02 -.2556720000D+01 .1716572400D+04 .1954434000D+03 .4831742000D+01 .1355650000D+02 .4099869000D+01 .1976200000D+01 .5737800000D+01 .1793800000D+01 +7 46820070904200709262454347.4 -.5138774000D+03 .2694497000D+02 .1592026400D+04 .1703246600D+03 .3944167000D+01 .1076570000D+02 .2599415000D+01 .5048000000D+00 .4233200000D+01 .7528000000D+00 -.6006420000D+02 .3083280000D+01 .3237571000D+03 .3642585000D+02 .9380780000D+00 .2099200000D+01 .1571184000D+01 .5701200000D+01 .3096100000D+01 .5748300000D+01 .1357426000D+03 -.8157140000D+01 .1733411300D+04 .2038663000D+03 .5332864000D+01 .1397180000D+02 .4245958000D+01 .2135400000D+01 .5868400000D+01 .2119000000D+01 +7 46920070926200710182454369.4 -.4224444000D+03 .2027277000D+02 .1553867300D+04 .1755774400D+03 .4478510000D+01 .1298970000D+02 .2807467000D+01 .7845000000D+00 .4560300000D+01 .1229600000D+01 -.4921300000D+02 .2563410000D+01 .2787480000D+03 .3146060000D+02 .8309560000D+00 .1847600000D+01 .1775964000D+01 .5966300000D+01 .3392700000D+01 .9590000000D-01 .1414290000D+03 -.1027247000D+02 .1702317200D+04 .2025989900D+03 .5492497000D+01 .1328000000D+02 .4396439000D+01 .2321500000D+01 .6055500000D+01 .2565600000D+01 +7 47020071018200711092454391.4 -.3490535000D+03 .1507435000D+02 .1528861400D+04 .1799810500D+03 .4954270000D+01 .1400810000D+02 .3009084000D+01 .1042800000D+01 .4838700000D+01 .1676600000D+01 -.3803700000D+02 .1918660000D+01 .2406637000D+03 .2744874000D+02 .7532880000D+00 .1824400000D+01 .2005495000D+01 .6274900000D+01 .3750300000D+01 .7360000000D+00 .1142736000D+03 -.9338520000D+01 .1634907200D+04 .1946254000D+03 .5433830000D+01 .1279780000D+02 .4562254000D+01 .2546900000D+01 .2430000000D-01 .3142500000D+01 +7 47120071109200712012454413.4 -.3088316000D+03 .1275614000D+02 .1498717200D+04 .1781158500D+03 .5132274000D+01 .1363480000D+02 .3198187000D+01 .1285200000D+01 .5098400000D+01 .2200800000D+01 -.3098100000D+02 .1571760000D+01 .2145280000D+03 .2484020000D+02 .7141590000D+00 .1796700000D+01 .2239720000D+01 .3010000000D+00 .4099600000D+01 .1308100000D+01 .7589670000D+02 -.7196600000D+01 .1560717800D+04 .1853867000D+03 .5366951000D+01 .1309470000D+02 .4748068000D+01 .2806800000D+01 .3227000000D+00 .3753900000D+01 +7 47220071201200712232454435.4 -.2982789000D+03 .1305258000D+02 .1453590700D+04 .1691576000D+03 .5009760000D+01 .1319400000D+02 .3385463000D+01 .1536200000D+01 .5381500000D+01 .2846600000D+01 -.2951920000D+02 .1693610000D+01 .2001960000D+03 .2313951000D+02 .6872420000D+00 .1678200000D+01 .2453485000D+01 .5764000000D+00 .4404500000D+01 .1908900000D+01 .5407920000D+02 -.6345460000D+01 .1509815000D+04 .1780512000D+03 .5359676000D+01 .1296510000D+02 .4946877000D+01 .3072100000D+01 .6188000000D+00 .4351200000D+01 +7 47320071223200801142454457.4 -.2938960000D+03 .1384494000D+02 .1407632600D+04 .1587395300D+03 .4851156000D+01 .1345310000D+02 .3592293000D+01 .1816300000D+01 .5706000000D+01 .3518000000D+01 -.3205230000D+02 .2173450000D+01 .1953712000D+03 .2190853000D+02 .6604400000D+00 .1651000000D+01 .2642101000D+01 .8244000000D+00 .4688500000D+01 .2604000000D+01 .6568710000D+02 -.8396650000D+01 .1489343700D+04 .1705265300D+03 .5256589000D+01 .1183420000D+02 .5146048000D+01 .3315300000D+01 .8821000000D+00 .5037400000D+01 +7 47420080114200802052454479.4 -.2666803000D+03 .1243727000D+02 .1393161800D+04 .1541737600D+03 .4919191000D+01 .1296440000D+02 .3831615000D+01 .2110700000D+01 .6031300000D+01 .4164500000D+01 -.3518150000D+02 .2718980000D+01 .1985789000D+03 .2127087000D+02 .6516740000D+00 .1830200000D+01 .2827207000D+01 .1076600000D+01 .4991100000D+01 .3291900000D+01 .1019695000D+03 -.1268625000D+02 .1479378900D+04 .1595032000D+03 .4934339000D+01 .1152470000D+02 .5345944000D+01 .3544200000D+01 .1136200000D+01 .5870000000D+01 +7 47520080205200802272454501.4 -.2064004000D+03 .7785690000D+01 .1427718800D+04 .1560234600D+03 .5146986000D+01 .1128000000D+02 .4090481000D+01 .2379100000D+01 .2260000000D-01 .4920200000D+01 -.3507660000D+02 .2976700000D+01 .2095243000D+03 .2174829000D+02 .6930750000D+00 .1996100000D+01 .3038729000D+01 .1353000000D+01 .5314600000D+01 .3917400000D+01 .1319674000D+03 -.1649802000D+02 .1457727900D+04 .1464315500D+03 .4543233000D+01 .1266400000D+02 .5566435000D+01 .3799800000D+01 .1436300000D+01 .3598000000D+00 +7 47620080227200803202454523.4 -.1336846000D+03 .1687930000D+01 .1484360900D+04 .1578177800D+03 .5280175000D+01 .1090870000D+02 .4346393000D+01 .2616600000D+01 .2649000000D+00 .5833800000D+01 -.2956610000D+02 .2730430000D+01 .2278622000D+03 .2357325000D+02 .7911060000D+00 .1948300000D+01 .3285653000D+01 .1634100000D+01 .5614400000D+01 .4605700000D+01 .1281752000D+03 -.1734536000D+02 .1428885800D+04 .1376779900D+03 .4417111000D+01 .1283970000D+02 .5826829000D+01 .4110400000D+01 .1799600000D+01 .1034800000D+01 +7 47720080320200804112454545.4 -.8279640000D+02 -.2701950000D+01 .1516142600D+04 .1546611000D+03 .5233016000D+01 .1212150000D+02 .4596445000D+01 .2861300000D+01 .5359000000D+00 .3485000000D+00 -.2082910000D+02 .2163870000D+01 .2494761000D+03 .2574519000D+02 .8965130000D+00 .1936100000D+01 .3545889000D+01 .1891700000D+01 .5877300000D+01 .5449300000D+01 .9280900000D+02 -.1539854000D+02 .1417415000D+04 .1367312600D+03 .4637926000D+01 .1183570000D+02 .6116845000D+01 .4441000000D+01 .2161200000D+01 .1772000000D+01 +7 47820080411200805032454567.4 -.6789890000D+02 -.3960390000D+01 .1510421200D+04 .1485177800D+03 .5172179000D+01 .1245820000D+02 .4850287000D+01 .3140200000D+01 .8619000000D+00 .1034200000D+01 -.1485130000D+02 .1826280000D+01 .2642153000D+03 .2645427000D+02 .9433890000D+00 .2148800000D+01 .3796532000D+01 .2138300000D+01 .6149900000D+01 .6241400000D+01 .5570960000D+02 -.1338222000D+02 .1424388900D+04 .1376505000D+03 .4872447000D+01 .1168820000D+02 .1160210000D+00 .4741100000D+01 .2484900000D+01 .2561100000D+01 +7 47920080503200805252454589.4 -.6966190000D+02 -.3725570000D+01 .1495463700D+04 .1435849200D+03 .5211491000D+01 .1229230000D+02 .5104104000D+01 .3427400000D+01 .1197300000D+01 .1736700000D+01 -.1506380000D+02 .2048110000D+01 .2641197000D+03 .2507262000D+02 .9243290000D+00 .2185000000D+01 .4040276000D+01 .2408700000D+01 .1958000000D+00 .6311000000D+00 .4514870000D+02 -.1395758000D+02 .1419575400D+04 .1326685200D+03 .4851148000D+01 .1190890000D+02 .3676310000D+00 .5016000000D+01 .2811400000D+01 .3238900000D+01 +7 48020080525200806162454611.4 -.5303430000D+02 -.5181170000D+01 .1496757400D+04 .1383644400D+03 .5128241000D+01 .1277270000D+02 .5333928000D+01 .3664900000D+01 .1487700000D+01 .2378800000D+01 -.1797930000D+02 .2515600000D+01 .2521528000D+03 .2276038000D+02 .8853960000D+00 .2008900000D+01 .4290763000D+01 .2707100000D+01 .5634000000D+00 .1338600000D+01 .6198190000D+02 -.1731273000D+02 .1387480800D+04 .1220865500D+03 .4692368000D+01 .1096470000D+02 .5963760000D+00 .5297500000D+01 .3177600000D+01 .3866300000D+01 +7 48120080616200807082454633.4 .3330100000D+01 -.1038473000D+02 .1508177700D+04 .1278826700D+03 .4636137000D+01 .1262470000D+02 .5520251000D+01 .3823800000D+01 .1736300000D+01 .2869500000D+01 -.1633050000D+02 .2533980000D+01 .2380292000D+03 .2063872000D+02 .8306730000D+00 .1963000000D+01 .4545838000D+01 .2973400000D+01 .8875000000D+00 .2046000000D+01 .7961990000D+02 -.2105634000D+02 .1352116200D+04 .1128651200D+03 .4654191000D+01 .9898500000D+01 .8195720000D+00 .5583300000D+01 .3546800000D+01 .4570700000D+01 +7 48220080708200807302454655.4 .9232460000D+02 -.1884174000D+02 .1509805600D+04 .1115047600D+03 .3746683000D+01 .1056010000D+02 .5669088000D+01 .3913400000D+01 .1987400000D+01 .3275300000D+01 -.6102700000D+01 .1675470000D+01 .2265185000D+03 .1848136000D+02 .7120730000D+00 .1910200000D+01 .4783652000D+01 .3135500000D+01 .1118500000D+01 .2568400000D+01 .6512790000D+02 -.2207317000D+02 .1353731100D+04 .1097499200D+03 .4688396000D+01 .1023640000D+02 .1039864000D+01 .5812600000D+01 .3837400000D+01 .5235000000D+01 +7 48320080730200808212454677.4 .1859891000D+03 -.2809457000D+02 .1492045300D+04 .9395062000D+02 .2771090000D+01 .7167300000D+01 .5804928000D+01 .3964000000D+01 .2301600000D+01 .3732700000D+01 .1002070000D+02 .1274500000D+00 .2138665000D+03 .1594797000D+02 .5205090000D+00 .1545400000D+01 .4992559000D+01 .3184700000D+01 .1263700000D+01 .2923300000D+01 .1365600000D+01 -.1855925000D+02 .1411153300D+04 .1117460000D+03 .4528948000D+01 .1074470000D+02 .1242525000D+01 .5930700000D+01 .4015400000D+01 .5684200000D+01 +7 48420080821200809122454699.4 .2546444000D+03 -.3541120000D+02 .1460534900D+04 .8081950000D+02 .2085669000D+01 .4383100000D+01 .5953309000D+01 .4025600000D+01 .2710400000D+01 .4466100000D+01 .2520130000D+02 -.1504650000D+01 .1945508000D+03 .1329258000D+02 .3071470000D+00 .9351000000D+00 .5190141000D+01 .3177600000D+01 .1340600000D+01 .3204600000D+01 -.1055366000D+03 -.1078820000D+02 .1508871300D+04 .1170783300D+03 .4068198000D+01 .9851400000D+01 .1415991000D+01 .5950900000D+01 .4088900000D+01 .5952600000D+01 +7 48520080912200810042454721.4 .2814237000D+03 -.3912834000D+02 .1430631100D+04 .7532911000D+02 .1814302000D+01 .3861000000D+01 .6128811000D+01 .4150100000D+01 .3098300000D+01 .5371700000D+01 .3352830000D+02 -.2647960000D+01 .1677132000D+03 .1069914000D+02 .1342450000D+00 .3478000000D+00 .5412121000D+01 .3211000000D+01 .1363300000D+01 .3546400000D+01 -.2343343000D+03 -.4604500000D+00 .1614734500D+04 .1251098200D+03 .3430858000D+01 .7534400000D+01 .1564222000D+01 .5929700000D+01 .4065900000D+01 .6078500000D+01 +7 48620081004200810262454743.4 .2645208000D+03 -.3891703000D+02 .1419030000D+04 .7849913000D+02 .1760690000D+01 .4021900000D+01 .4823900000D-01 .4343300000D+01 .3297600000D+01 .5875200000D+01 .3310250000D+02 -.3056800000D+01 .1384003000D+03 .8244170000D+01 .3320400000D-01 .8630000000D-01 .5698108000D+01 .3394200000D+01 .1541900000D+01 .5469000000D+01 -.3622309000D+03 .1048288000D+02 .1701545900D+04 .1344183000D+03 .2838235000D+01 .4811700000D+01 .1699159000D+01 .5919100000D+01 .3949200000D+01 .5980200000D+01 +7 48720081026200811172454765.4 .2105503000D+03 -.3523347000D+02 .1436444100D+04 .8986811000D+02 .1788727000D+01 .3365200000D+01 .2677050000D+00 .4561200000D+01 .3287300000D+01 .6010400000D+01 .2579440000D+02 -.2817250000D+01 .1150321000D+03 .6586540000D+01 .3134900000D-01 .1685000000D+00 .6071183000D+01 .3823900000D+01 .3067300000D+01 .6232300000D+01 -.4732370000D+03 .2062416000D+02 .1755158600D+04 .1427099900D+03 .2462855000D+01 .3444300000D+01 .1831973000D+01 .5944700000D+01 .3766900000D+01 .5447100000D+01 +7 48820081117200812092454787.4 .1271781000D+03 -.2866855000D+02 .1485606100D+04 .1077889700D+03 .1964129000D+01 .2448100000D+01 .4915850000D+00 .4765400000D+01 .3137100000D+01 .5586000000D+01 .1531840000D+02 -.2197020000D+01 .1038392000D+03 .6726420000D+01 .7822400000D-01 .1321000000D+00 .2055430000D+00 .4385800000D+01 .2964600000D+01 .5817500000D+01 -.5582187000D+03 .2910043000D+02 .1771635400D+04 .1479888200D+03 .2326317000D+01 .4272900000D+01 .1971427000D+01 .6014200000D+01 .3600300000D+01 .5018300000D+01 +7 48920081209200812312454809.4 .2075940000D+02 -.1972211000D+02 .1562616600D+04 .1300591000D+03 .2389064000D+01 .3687000000D+01 .7103800000D+00 .4946300000D+01 .2965700000D+01 .4874000000D+01 .5375400000D+01 -.1493580000D+01 .1031100000D+03 .8202000000D+01 .1380950000D+00 .2022000000D+00 .5619580000D+00 .4784600000D+01 .2851100000D+01 .4891200000D+01 -.6105627000D+03 .3522702000D+02 .1752268400D+04 .1491434400D+03 .2304461000D+01 .5251900000D+01 .2126111000D+01 .6133500000D+01 .3537500000D+01 .5032800000D+01 +7 49020081231200901222454831.4 -.1006933000D+03 -.9057080000D+01 .1656037600D+04 .1538581400D+03 .3040097000D+01 .6552600000D+01 .9185970000D+00 .5109300000D+01 .2861800000D+01 .4748400000D+01 -.1718900000D+01 -.9153900000D+00 .1067681000D+03 .9886150000D+01 .1984040000D+00 .3773000000D+00 .7979730000D+00 .5003900000D+01 .2820900000D+01 .4692000000D+01 -.6232706000D+03 .3822994000D+02 .1702989000D+04 .1465043800D+03 .2266875000D+01 .5300700000D+01 .2306360000D+01 .3230000000D-01 .3631400000D+01 .5314700000D+01 +7 49120090122200902132454853.4 -.2233740000D+03 .2125220000D+01 .1744853900D+04 .1753169100D+03 .3765365000D+01 .9293900000D+01 .1115264000D+01 .5265300000D+01 .2843200000D+01 .4851800000D+01 -.5851100000D+01 -.5013800000D+00 .1126774000D+03 .1152044000D+02 .2543570000D+00 .5735000000D+00 .9245360000D+00 .5117200000D+01 .2811600000D+01 .4716300000D+01 -.5910299000D+03 .3742305000D+02 .1638680000D+04 .1429938400D+03 .2238011000D+01 .4843300000D+01 .2522286000D+01 .2919000000D+00 .3920100000D+01 .5914600000D+01 +7 49220090213200903072454875.4 -.3276152000D+03 .1205676000D+02 .1802491900D+04 .1901209200D+03 .4364417000D+01 .1091600000D+02 .1304268000D+01 .5428400000D+01 .2901800000D+01 .5056200000D+01 -.8754500000D+01 -.1342500000D+00 .1231460000D+03 .1345120000D+02 .3149960000D+00 .8009000000D+00 .9870450000D+00 .5177400000D+01 .2790900000D+01 .4817300000D+01 -.5162911000D+03 .3277118000D+02 .1584609600D+04 .1441526000D+03 .2466274000D+01 .5801500000D+01 .2775486000D+01 .6214000000D+00 .4366400000D+01 .4608000000D+00 +7 49320090307200903292454897.4 -.3943151000D+03 .1896419000D+02 .1809205900D+04 .1955551900D+03 .4689061000D+01 .1104420000D+02 .1492967000D+01 .5613500000D+01 .3035200000D+01 .5362200000D+01 -.1208920000D+02 .3043200000D+00 .1390518000D+03 .1584126000D+02 .3892560000D+00 .1036000000D+01 .1043377000D+01 .5234600000D+01 .2778200000D+01 .4984500000D+01 -.4138162000D+03 .2535759000D+02 .1563712600D+04 .1537559900D+03 .3120707000D+01 .8539800000D+01 .3049354000D+01 .9683000000D+00 .4790900000D+01 .1055000000D+01 +7 49420090329200904202454919.4 -.4148311000D+03 .2197247000D+02 .1765403000D+04 .1926736900D+03 .4745363000D+01 .1026550000D+02 .1688637000D+01 .5832800000D+01 .3246400000D+01 .5808300000D+01 -.1535060000D+02 .7488900000D+00 .1554738000D+03 .1808714000D+02 .4640770000D+00 .1185200000D+01 .1131081000D+01 .5327500000D+01 .2820700000D+01 .5238900000D+01 -.3077252000D+03 .1719338000D+02 .1575519200D+04 .1686592600D+03 .3979054000D+01 .1121570000D+02 .3314436000D+01 .1276400000D+01 .5103800000D+01 .1453000000D+01 +7 49520090420200905122454941.4 -.3957159000D+03 .2157331000D+02 .1692281500D+04 .1860432200D+03 .4702868000D+01 .9902900000D+01 .1893963000D+01 .6087600000D+01 .3528400000D+01 .1028000000D+00 -.1649340000D+02 .9975900000D+00 .1648232000D+03 .1921832000D+02 .5098980000D+00 .1181700000D+01 .1259668000D+01 .5474400000D+01 .2945700000D+01 .5619300000D+01 -.2215847000D+03 .1036619000D+02 .1595071200D+04 .1815992500D+03 .4713232000D+01 .1261440000D+02 .3549773000D+01 .1535000000D+01 .5346300000D+01 .1808100000D+01 +7 49620090512200906032454963.4 -.3551252000D+03 .1934103000D+02 .1617830400D+04 .1803962400D+03 .4745924000D+01 .1049730000D+02 .2103451000D+01 .7760000000D-01 .3844400000D+01 .6827000000D+00 -.1444130000D+02 .9336500000D+00 .1628861000D+03 .1878440000D+02 .5114880000D+00 .1091900000D+01 .1429988000D+01 .5682700000D+01 .3160700000D+01 .6160900000D+01 -.1687123000D+03 .6148560000D+01 .1596089600D+04 .1875497400D+03 .5148636000D+01 .1261900000D+02 .3753430000D+01 .1763300000D+01 .5568200000D+01 .2204700000D+01 +7 49720090603200906252454985.4 -.3141351000D+03 .1716435000D+02 .1559462300D+04 .1768850000D+03 .4884796000D+01 .1108820000D+02 .2304576000D+01 .3401000000D+00 .4142800000D+01 .1193600000D+01 -.1050550000D+02 .6584800000D+00 .1512160000D+03 .1715741000D+02 .4805140000D+00 .1025500000D+01 .1644301000D+01 .5953000000D+01 .3457300000D+01 .5264000000D+00 -.1481298000D+03 .4576780000D+01 .1570358900D+04 .1862244100D+03 .5303816000D+01 .1198380000D+02 .3935312000D+01 .1982800000D+01 .5798900000D+01 .2683400000D+01 +7 49820090625200907172455007.4 -.2879016000D+03 .1643812000D+02 .1517505600D+04 .1730331300D+03 .4973395000D+01 .1085460000D+02 .2485908000D+01 .5728000000D+00 .4400700000D+01 .1700500000D+01 -.7378200000D+01 .4080000000D+00 .1346238000D+03 .1498308000D+02 .4334040000D+00 .9451000000D+00 .1904120000D+01 .6273400000D+01 .3805700000D+01 .1197300000D+01 -.1465817000D+03 .4572040000D+01 .1529745700D+04 .1809584200D+03 .5325621000D+01 .1151770000D+02 .4106939000D+01 .2204400000D+01 .6044900000D+01 .3219900000D+01 +7 49920090717200908082455029.4 -.2798977000D+03 .1751400000D+02 .1482791800D+04 .1661921700D+03 .4894472000D+01 .1018070000D+02 .2646208000D+01 .7784000000D+00 .4631500000D+01 .2287800000D+01 -.6830900000D+01 .3466100000D+00 .1171454000D+03 .1258084000D+02 .3715480000D+00 .8086000000D+00 .2211679000D+01 .3518000000D+00 .4188900000D+01 .1969000000D+01 -.1450574000D+03 .4486630000D+01 .1496161000D+04 .1758059500D+03 .5358303000D+01 .1106190000D+02 .4274914000D+01 .2423000000D+01 .6000000000D-02 .3757000000D+01 +7 50020090808200908302455051.4 -.2807344000D+03 .1955817000D+02 .1448683300D+04 .1565418800D+03 .4682348000D+01 .1007680000D+02 .2796918000D+01 .9755000000D+00 .4863700000D+01 .2943000000D+01 -.8327100000D+01 .4363000000D+00 .1012099000D+03 .1019828000D+02 .3009890000D+00 .7580000000D+00 .2584339000D+01 .7884000000D+00 .4662300000D+01 .2901200000D+01 -.1279833000D+03 .2921360000D+01 .1486682600D+04 .1725841300D+03 .5428004000D+01 .9910000000D+01 .4439103000D+01 .2622900000D+01 .2232000000D+00 .4314900000D+01 +7 50120090830200909212455073.4 -.2737562000D+03 .2102702000D+02 .1417768100D+04 .1472640700D+03 .4502532000D+01 .1044170000D+02 .2956149000D+01 .1185000000D+01 .5117100000D+01 .3560900000D+01 -.9482100000D+01 .4706500000D+00 .9091110000D+02 .8772700000D+01 .2648290000D+00 .8035000000D+00 .3056203000D+01 .1363500000D+01 .5308500000D+01 .3757400000D+01 -.9154960000D+02 -.5025900000D+00 .1501875100D+04 .1701556100D+03 .5457591000D+01 .8362600000D+01 .4597305000D+01 .2796000000D+01 .4069000000D+00 .5011200000D+01 +7 50220090921200910132455095.4 -.2454518000D+03 .2060378000D+02 .1400489200D+04 .1421801800D+03 .4516384000D+01 .1017300000D+02 .3137811000D+01 .1413400000D+01 .5383600000D+01 .4145600000D+01 -.8336000000D+01 .2774500000D+00 .9302400000D+02 .9362700000D+01 .3026480000D+00 .7631000000D+00 .3595049000D+01 .1967000000D+01 .5941500000D+01 .4577800000D+01 -.4637210000D+02 -.4862120000D+01 .1525430800D+04 .1662605400D+03 .5375866000D+01 .8125600000D+01 .4752908000D+01 .2954700000D+01 .5792000000D+00 .5868100000D+01 +7 50320091013200911042455117.4 -.1953812000D+03 .1812524000D+02 .1405577200D+04 .1422019800D+03 .4720882000D+01 .9202100000D+01 .3341926000D+01 .1647100000D+01 .5638100000D+01 .4811400000D+01 -.5430700000D+01 -.8753000000D-01 .1076279000D+03 .1115703000D+02 .3732310000D+00 .7357000000D+00 .4072411000D+01 .2419600000D+01 .1057000000D+00 .5572400000D+01 -.1099360000D+02 -.8482350000D+01 .1536651100D+04 .1597789500D+03 .5196204000D+01 .9393500000D+01 .4917007000D+01 .3126600000D+01 .7779000000D+00 .3390000000D+00 +7 50420091104200911262455139.4 -.1388705000D+03 .1487884000D+02 .1426433700D+04 .1437038400D+03 .4939304000D+01 .8906300000D+01 .3556557000D+01 .1874100000D+01 .5880900000D+01 .5590500000D+01 -.3193200000D+01 -.3879100000D+00 .1255733000D+03 .1272746000D+02 .4319200000D+00 .8669000000D+00 .4448864000D+01 .2768700000D+01 .4733000000D+00 .2297000000D+00 .1583900000D+01 -.1014992000D+02 .1527275800D+04 .1518476900D+03 .5019800000D+01 .1032290000D+02 .5102322000D+01 .3336400000D+01 .1030500000D+01 .9648000000D+00 +7 50520091126200912182455161.4 -.9716850000D+02 .1275677000D+02 .1440920900D+04 .1417052500D+03 .5001874000D+01 .9548100000D+01 .3773400000D+01 .2105300000D+01 .6144400000D+01 .3020000000D-01 -.3180300000D+01 -.4562300000D+00 .1394486000D+03 .1362260000D+02 .4739050000D+00 .9799000000D+00 .4767607000D+01 .3089400000D+01 .8354000000D+00 .1013300000D+01 -.4369100000D+01 -.1021564000D+02 .1508109500D+04 .1446484100D+03 .4929003000D+01 .1050950000D+02 .5312841000D+01 .3583000000D+01 .1327200000D+01 .1598400000D+01 +7 50620091218201001092455183.4 -.8040690000D+02 .1271061000D+02 .1432956200D+04 .1349838600D+03 .4925752000D+01 .9713100000D+01 .3997856000D+01 .2364000000D+01 .1772000000D+00 .6775000000D+00 -.3759300000D+01 -.4180600000D+00 .1478018000D+03 .1393514000D+02 .4983790000D+00 .1055700000D+01 .5052996000D+01 .3378100000D+01 .1169100000D+01 .1770900000D+01 -.7494500000D+01 -.1064436000D+02 .1494753700D+04 .1376779300D+03 .4815823000D+01 .1082850000D+02 .5537095000D+01 .3835300000D+01 .1634000000D+01 .2243300000D+01 +7 50720100109201001312455205.4 -.7534270000D+02 .1357317000D+02 .1415791300D+04 .1277003000D+03 .4876839000D+01 .9441800000D+01 .4241246000D+01 .2651600000D+01 .5307000000D+00 .1372200000D+01 -.1488200000D+01 -.5831700000D+00 .1507368000D+03 .1344079000D+02 .4789510000D+00 .1135200000D+01 .5295291000D+01 .3590600000D+01 .1436000000D+01 .2408900000D+01 .1543730000D+02 -.1367670000D+02 .1485167400D+04 .1266711900D+03 .4435743000D+01 .1093330000D+02 .5757409000D+01 .4065300000D+01 .1947300000D+01 .2804900000D+01 +7 50820100131201002222455227.4 -.5042300000D+02 .1242223000D+02 .1426373600D+04 .1240244000D+03 .4842215000D+01 .1000440000D+02 .4500890000D+01 .2916800000D+01 .8530000000D+00 .2055000000D+01 .4897100000D+01 -.1085530000D+01 .1467318000D+03 .1192437000D+02 .3994080000D+00 .1059800000D+01 .5482379000D+01 .3705700000D+01 .1638400000D+01 .2870600000D+01 .6838860000D+02 -.1987036000D+02 .1460646200D+04 .1090304500D+03 .3742944000D+01 .9503100000D+01 .5971291000D+01 .4280200000D+01 .2317400000D+01 .3311700000D+01 +7 50920100222201003162455249.4 .2149340000D+02 .6596210000D+01 .1485568900D+04 .1225183500D+03 .4530866000D+01 .1058380000D+02 .4752540000D+01 .3093200000D+01 .1093900000D+01 .2553100000D+01 .1277100000D+02 -.1710440000D+01 .1355431000D+03 .9894060000D+01 .2890960000D+00 .7826000000D+00 .5620863000D+01 .3740900000D+01 .1801600000D+01 .3236300000D+01 .1263753000D+03 -.2708631000D+02 .1413294100D+04 .8930046000D+02 .3112094000D+01 .6853900000D+01 .6199372000D+01 .4521200000D+01 .2803200000D+01 .3946300000D+01 +7 51020100316201004072455271.4 .1396023000D+03 -.4088460000D+01 .1569120400D+04 .1201297100D+03 .3761330000D+01 .9389600000D+01 .4976222000D+01 .3170400000D+01 .1252900000D+01 .2879900000D+01 .1868700000D+02 -.2162430000D+01 .1209065000D+03 .8117800000D+01 .1934530000D+00 .4562000000D+00 .5727927000D+01 .3744800000D+01 .1958800000D+01 .3601900000D+01 .1491823000D+03 -.3158133000D+02 .1368264100D+04 .7775640000D+02 .2954419000D+01 .5650800000D+01 .1846280000D+00 .4820400000D+01 .3300600000D+01 .4851900000D+01 +7 51120100407201004292455293.4 .2730454000D+03 -.1696685000D+02 .1630458700D+04 .1167409400D+03 .2707134000D+01 .6362100000D+01 .5177558000D+01 .3199500000D+01 .1344600000D+01 .3095700000D+01 .2176960000D+02 -.2386150000D+01 .1081004000D+03 .6862450000D+01 .1293380000D+00 .2174000000D+00 .5824643000D+01 .3771300000D+01 .2166300000D+01 .4106900000D+01 .1097411000D+03 -.3055385000D+02 .1371865900D+04 .8163978000D+02 .3041930000D+01 .6378600000D+01 .4912240000D+00 .5106900000D+01 .3600000000D+01 .5508400000D+01 +7 51220100429201005212455315.4 .3828612000D+03 -.2838996000D+02 .1642075500D+04 .1129944600D+03 .1730042000D+01 .2900200000D+01 .5375604000D+01 .3253500000D+01 .1382800000D+01 .3171700000D+01 .2271420000D+02 -.2486770000D+01 .9985850000D+02 .6031420000D+01 .9114000000D-01 .1145000000D+00 .5948574000D+01 .3863300000D+01 .2515300000D+01 .5085700000D+01 .1128720000D+02 -.2384950000D+02 .1445025700D+04 .9825744000D+02 .3022094000D+01 .6398400000D+01 .7947520000D+00 .5294500000D+01 .3678400000D+01 .5765600000D+01 +7 51320100521201006122455337.4 .4454777000D+03 -.3589793000D+02 .1610285200D+04 .1092189600D+03 .1098654000D+01 .7722000000D+00 .5585150000D+01 .3383400000D+01 .1413200000D+01 .2388800000D+01 .2103750000D+02 -.2460230000D+01 .9604370000D+02 .5653720000D+01 .8161100000D-01 .1268000000D+00 .6153565000D+01 .4088900000D+01 .2972600000D+01 .5814400000D+01 -.1206214000D+03 -.1344150000D+02 .1560135000D+04 .1204324600D+03 .2939883000D+01 .5418500000D+01 .1057378000D+01 .5411500000D+01 .3596400000D+01 .5717400000D+01 +7 51420100612201007042455359.4 .4579993000D+03 -.3885317000D+02 .1561647500D+04 .1072191400D+03 .8875230000D+00 .9529000000D+00 .5810329000D+01 .3600900000D+01 .1569400000D+01 .1511000000D+01 .1499870000D+02 -.2156400000D+01 .9772810000D+02 .6219800000D+01 .1013620000D+00 .1449000000D+00 .1881820000D+00 .4480100000D+01 .3177000000D+01 .5559300000D+01 -.2574110000D+03 -.1779770000D+01 .1673828600D+04 .1422863400D+03 .2992438000D+01 .4983100000D+01 .1273138000D+01 .5506500000D+01 .3440500000D+01 .5383800000D+01 +7 51520100704201007262455381.4 .4293325000D+03 -.3776654000D+02 .1523138900D+04 .1101193200D+03 .1085703000D+01 .6365000000D+00 .6045888000D+01 .3880200000D+01 .1845700000D+01 .2652300000D+01 .3400700000D+01 -.1435990000D+01 .1091799000D+03 .8379950000D+01 .1488400000D+00 .2823000000D+00 .5786950000D+00 .4889500000D+01 .3104600000D+01 .4975200000D+01 -.3788324000D+03 .9265190000D+01 .1758149400D+04 .1602547600D+03 .3229794000D+01 .6032700000D+01 .1453071000D+01 .5602600000D+01 .3309800000D+01 .5107600000D+01 +7 51620100726201008172455403.4 .3712017000D+03 -.3353158000D+02 .1511197400D+04 .1199441300D+03 .1628938000D+01 .2263000000D+01 .6280979000D+01 .4170700000D+01 .2059600000D+01 .3984800000D+01 -.1320520000D+02 -.2964400000D+00 .1325050000D+03 .1197229000D+02 .2306890000D+00 .5762000000D+00 .9488900000D+00 .5196400000D+01 .3012800000D+01 .4876700000D+01 -.4732448000D+03 .1850605000D+02 .1802699400D+04 .1726286900D+03 .3540442000D+01 .7470300000D+01 .1609994000D+01 .5708900000D+01 .3255900000D+01 .5083900000D+01 +7 51720100817201009082455425.4 .2949294000D+03 -.2712231000D+02 .1529229000D+04 .1358583400D+03 .2395885000D+01 .5051900000D+01 .2203570000D+00 .4429800000D+01 .2200000000D+01 .4322800000D+01 -.3242360000D+02 .1098700000D+01 .1635587000D+03 .1618967000D+02 .3367850000D+00 .9029000000D+00 .1252025000D+01 .5430100000D+01 .3012600000D+01 .4999700000D+01 -.5342827000D+03 .2520086000D+02 .1807190000D+04 .1789763600D+03 .3797307000D+01 .8299700000D+01 .1754958000D+01 .5831900000D+01 .3283800000D+01 .5229600000D+01 +7 51820100908201009302455447.4 .2118535000D+03 -.1960086000D+02 .1568975100D+04 .1546909200D+03 .3254427000D+01 .7978000000D+01 .4215690000D+00 .4644800000D+01 .2309400000D+01 .4554900000D+01 -.5074940000D+02 .2472770000D+01 .1955763000D+03 .2019763000D+02 .4436510000D+00 .1143400000D+01 .1500813000D+01 .5640900000D+01 .3104500000D+01 .5242400000D+01 -.5593039000D+03 .2894903000D+02 .1777176500D+04 .1799729100D+03 .3941414000D+01 .8312800000D+01 .1897488000D+01 .5978700000D+01 .3387700000D+01 .5507300000D+01 +7 51920100930201010222455469.4 .1333965000D+03 -.1209357000D+02 .1614785600D+04 .1725612500D+03 .4072594000D+01 .1037870000D+02 .5989920000D+00 .4824800000D+01 .2413100000D+01 .4776900000D+01 -.6465590000D+02 .3529490000D+01 .2232002000D+03 .2345510000D+02 .5328290000D+00 .1249100000D+01 .1721790000D+01 .5861400000D+01 .3281200000D+01 .5617100000D+01 -.5498514000D+03 .2974935000D+02 .1722824500D+04 .1774055100D+03 .3998690000D+01 .7962600000D+01 .2045408000D+01 .6155500000D+01 .3563600000D+01 .5927800000D+01 +7 52020101022201011132455491.4 .6979630000D+02 -.5651680000D+01 .1649735700D+04 .1861240700D+03 .4734247000D+01 .1178790000D+02 .7565300000D+00 .4986300000D+01 .2526400000D+01 .5023700000D+01 -.7184680000D+02 .4068150000D+01 .2440370000D+03 .2590336000D+02 .6052040000D+00 .1316200000D+01 .1934548000D+01 .6107100000D+01 .3536900000D+01 .6148900000D+01 -.5123106000D+03 .2806567000D+02 .1657544500D+04 .1738032600D+03 .4058684000D+01 .8098700000D+01 .2203724000D+01 .7990000000D-01 .3801200000D+01 .1795000000D+00 +7 52120101113201012052455513.4 .2800240000D+02 -.1039430000D+01 .1661296700D+04 .1933339100D+03 .5165543000D+01 .1209510000D+02 .9022640000D+00 .5145700000D+01 .2661600000D+01 .5326600000D+01 -.7218460000D+02 .4072720000D+01 .2584117000D+03 .2786101000D+02 .6789040000D+00 .1508800000D+01 .2147543000D+01 .9180000000D-01 .3844900000D+01 .4639000000D+00 -.4574746000D+03 .2478891000D+02 .1594797400D+04 .1713697600D+03 .4206994000D+01 .9076000000D+01 .2373242000D+01 .3104000000D+00 .4073700000D+01 .7096000000D+00 +7 52220101205201012272455535.4 .9397000000D+01 .1492100000D+01 .1645507500D+04 .1939841700D+03 .5361932000D+01 .1165860000D+02 .1046141000D+01 .5317100000D+01 .2829500000D+01 .5715500000D+01 -.6770870000D+02 .3719720000D+01 .2675968000D+03 .2953675000D+02 .7632610000D+00 .1791300000D+01 .2358815000D+01 .3624000000D+00 .4155300000D+01 .9906000000D+00 -.3986750000D+03 .2106798000D+02 .1543522600D+04 .1706347400D+03 .4442228000D+01 .1025970000D+02 .2550369000D+01 .5486000000D+00 .4347000000D+01 .1171100000D+01 +7 52320101227201101182455557.4 .8607500000D+01 .2332150000D+01 .1608665000D+04 .1898061700D+03 .5394752000D+01 .1114820000D+02 .1197807000D+01 .5510500000D+01 .3035800000D+01 .6195600000D+01 -.6171030000D+02 .3299700000D+01 .2717073000D+03 .3059674000D+02 .8372110000D+00 .1958500000D+01 .2560600000D+01 .6143000000D+00 .4431900000D+01 .1457300000D+01 -.3486552000D+03 .1802637000D+02 .1504730800D+04 .1700408200D+03 .4665987000D+01 .1087200000D+02 .2729666000D+01 .7823000000D+00 .4604000000D+01 .1609400000D+01 +8 52419990101199904162451179.3 .2573780000D+02 .1008600000D+00 .3489453900D+04 .2029510000D+01 .2492200000D-01 .4698970000D+02 .5867118000D+01 .3562700000D+01 .4627200000D+01 .5618900000D+01 .7828650000D+02 -.6915500000D+00 .1215268700D+04 .1560540000D+01 .1694800000D-01 .1575600000D+02 .5051609000D+01 .2474500000D+01 .4903800000D+01 .4820300000D+01 -.3158934000D+03 .3238930000D+01 .3664704600D+04 .8622240000D+01 .4343400000D-01 .4307410000D+02 .1091224000D+01 .4857600000D+01 .1600900000D+01 .8255000000D+00 +8 52519990416199907302451284.3 .2399720000D+02 .7045000000D+00 .3473237200D+04 .7539130000D+01 .2226800000D-01 .4746320000D+02 .1459253000D+01 .5940000000D+01 .2538600000D+01 .3218500000D+01 .7603660000D+02 -.5036500000D+00 .1238581600D+04 .2008300000D+01 .4207000000D-02 .1800680000D+02 .6317770000D+00 .5854400000D+01 .4644100000D+01 .2341900000D+01 -.2340564000D+03 .2116480000D+01 .3416027700D+04 .4176440000D+01 .2800300000D-01 .4942700000D+02 .2938961000D+01 .9059000000D+00 .2657600000D+01 .4683700000D+01 +8 52619990730199911122451389.3 .1427007000D+03 -.1383500000D+01 .3455488600D+04 .5375670000D+01 .7135400000D-01 .5049510000D+02 .3323604000D+01 .2005500000D+01 .5220000000D+01 .9353000000D+00 .1136546000D+03 -.1147620000D+01 .1280620100D+04 .3211910000D+01 .3478700000D-01 .1934270000D+02 .2536788000D+01 .1612000000D+01 .4858900000D+01 .1781000000D+00 -.2566652000D+03 .2475510000D+01 .3310716300D+04 .7508460000D+01 .6544700000D-01 .4880580000D+02 .4836051000D+01 .4402800000D+01 .1163100000D+01 .2502400000D+01 +8 52719991112200002252451494.3 .9083020000D+02 -.4232400000D+00 .3442005100D+04 .7492150000D+01 .5258300000D-01 .4766890000D+02 .5382903000D+01 .7691000000D+00 .3956200000D+01 .5078600000D+01 .7308410000D+02 -.4021700000D+00 .1300216900D+04 .2494980000D+01 .1720800000D-01 .1724600000D+02 .4575407000D+01 .3699000000D+00 .3642600000D+01 .4248400000D+01 -.1661797000D+03 .8445000000D+00 .3488680700D+04 .4992190000D+01 .3295700000D-01 .4703920000D+02 .6169510000D+00 .2340000000D+01 .5264000000D+01 .2598000000D+00 +8 52820000225200006092451599.3 .5793940000D+02 .3329800000D+00 .3449030100D+04 .4793970000D+01 .1492300000D-01 .4662310000D+02 .1164385000D+01 .5773300000D+01 .5844100000D+01 .2728300000D+01 .8291290000D+02 -.5934600000D+00 .1269300100D+04 .9639700000D+00 .1529700000D-01 .1847070000D+02 .3244230000D+00 .5747100000D+01 .4991600000D+01 .1858800000D+01 -.2058303000D+03 .1790220000D+01 .3443389700D+04 .3314660000D+01 .3572100000D-01 .4853500000D+02 .2641050000D+01 .3035000000D+00 .1804400000D+01 .4225500000D+01 +8 52920000609200009222451704.3 .1324833000D+03 -.5125300000D+00 .3460122800D+04 .9182660000D+01 .4970500000D-01 .4848140000D+02 .2992944000D+01 .1412400000D+01 .4688100000D+01 .3771000000D+00 .6820380000D+02 -.3037800000D+00 .1300971600D+04 .2846280000D+01 .1400900000D-01 .1803680000D+02 .2161022000D+01 .6093000000D+00 .4034500000D+01 .5851700000D+01 -.1321116000D+03 .7858400000D+00 .3404450600D+04 .6993380000D+01 .3000800000D-01 .4698580000D+02 .4482952000D+01 .3057100000D+01 .6275100000D+01 .1876900000D+01 +8 53020000922200101052451809.3 .3399240000D+02 .1168830000D+01 .3373190800D+04 .5400550000D+01 .4017500000D-01 .4893890000D+02 .4900209000D+01 .5615100000D+01 .1685700000D+01 .4426500000D+01 .6153230000D+02 -.2748500000D+00 .1277959700D+04 .9859600000D+00 .1147800000D-01 .1766620000D+02 .4077504000D+01 .5078300000D+01 .2410000000D-01 .3595800000D+01 -.1550092000D+03 .1461560000D+01 .3448311900D+04 .2703210000D+01 .4860700000D-01 .4821010000D+02 .1260230000D+00 .4595000000D+00 .2634900000D+01 .5896200000D+01 +8 53120010105200104202451914.3 .1559917000D+03 -.1222410000D+01 .3377233800D+04 .5342870000D+01 .7619800000D-01 .4895130000D+02 .7511630000D+00 .2110600000D+01 .5489600000D+01 .2190700000D+01 .8689390000D+02 -.6488000000D+00 .1289017100D+04 .2072740000D+01 .2737900000D-01 .1901180000D+02 .6195498000D+01 .1571300000D+01 .4863000000D+01 .1376800000D+01 -.1680659000D+03 .1304580000D+01 .3468743400D+04 .4634140000D+01 .5679100000D-01 .4884220000D+02 .2240567000D+01 .4418900000D+01 .1139800000D+01 .3735700000D+01 +8 53220010420200108032452019.3 .1411151000D+03 -.4674900000D+00 .3446864600D+04 .8829900000D+01 .2072600000D-01 .4607280000D+02 .2703692000D+01 .1225400000D+01 .5346700000D+01 .6168600000D+01 .6730880000D+02 -.3397400000D+00 .1290101300D+04 .2768050000D+01 .1004100000D-01 .1684600000D+02 .1863389000D+01 .3057000000D+00 .4908000000D+01 .5348100000D+01 -.7746350000D+02 .8678000000D-01 .3453120400D+04 .7537390000D+01 .8418000000D-02 .4649090000D+02 .4190323000D+01 .2533800000D+01 .5859600000D+01 .1358800000D+01 +8 53320010803200111162452124.3 .2360609000D+03 -.2068330000D+01 .3576427700D+04 .8721070000D+01 .9301500000D-01 .4660850000D+02 .4484936000D+01 .2397700000D+01 .5770800000D+01 .3698600000D+01 .8135930000D+02 -.6313500000D+00 .1249984900D+04 .3501940000D+01 .3267500000D-01 .1666480000D+02 .3676800000D+01 .1549500000D+01 .4920000000D+01 .2855800000D+01 -.7577380000D+02 .2006200000D+00 .3473957800D+04 .5962120000D+01 .6143700000D-01 .4843830000D+02 .6004807000D+01 .4355700000D+01 .1263500000D+01 .5240300000D+01 +8 53420011116200203012452229.3 .2831798000D+03 -.2827140000D+01 .3330250600D+04 .1493620000D+02 .1012960000D+00 .5487580000D+02 .1924570000D+00 .1715700000D+01 .5043100000D+01 .1615300000D+01 .4892150000D+02 .8165000000D-01 .1193399700D+04 .3284610000D+01 .1946100000D-01 .1880730000D+02 .5687055000D+01 .5725000000D+00 .3731200000D+01 .8067000000D+00 .2339580000D+02 -.1854650000D+01 .3374232000D+04 .9176010000D+01 .6884100000D-01 .5065820000D+02 .1750945000D+01 .2907400000D+01 .5990600000D+01 .3117300000D+01 +8 53520020301200206142452334.3 .1745654000D+03 -.8592700000D+00 .3439421000D+04 .4958810000D+01 .3619300000D-01 .4561600000D+02 .2368832000D+01 .1222400000D+01 .6243000000D+01 .5699200000D+01 .6152240000D+02 -.2649500000D+00 .1245939300D+04 .1256550000D+01 .1613100000D-01 .1617490000D+02 .1520617000D+01 .2335000000D+00 .5300200000D+01 .4865400000D+01 -.2727150000D+02 -.5865500000D+00 .3492368200D+04 .4494130000D+01 .1076500000D-01 .4736620000D+02 .3859168000D+01 .2033900000D+01 .2254800000D+01 .8905000000D+00 +8 53620020614200209272452439.3 .2548269000D+03 -.1876460000D+01 .3621690700D+04 .1245103000D+02 .7289000000D-01 .4483860000D+02 .4177480000D+01 .2125400000D+01 .5209000000D+01 .3100300000D+01 .3904500000D+01 .7061300000D+00 .1146641000D+04 .2665190000D+01 .1657400000D-01 .1370670000D+02 .3308034000D+01 .4792000000D+00 .3066100000D+01 .2408100000D+01 .1129253000D+03 -.2907770000D+01 .3514552000D+04 .7210190000D+01 .6918400000D-01 .4249750000D+02 .5649179000D+01 .3055700000D+01 .5855700000D+01 .4706400000D+01 +8 53720020927200301102452544.3 .1606245000D+03 -.1124000000D-01 .3445229700D+04 .2876940000D+01 .2660800000D-01 .5501550000D+02 .6019001000D+01 .5377000000D+00 .2154700000D+01 .8934000000D+00 -.7213400000D+01 .7887900000D+00 .9853433000D+03 .1869760000D+01 .1383200000D-01 .1596360000D+02 .5231069000D+01 .4935700000D+01 .1253500000D+01 .6236900000D+01 .1494651000D+03 -.3252140000D+01 .3290061600D+04 .8549180000D+01 .5780800000D-01 .5510500000D+02 .1280046000D+01 .1753300000D+01 .4765700000D+01 .2354800000D+01 +8 53820030110200304252452649.3 .2028283000D+03 -.1095030000D+01 .3436078800D+04 .4907930000D+01 .5887600000D-01 .4907190000D+02 .1895440000D+01 .2904000000D+01 .6191900000D+01 .5144800000D+01 .3163140000D+02 .1904700000D+00 .1105608900D+04 .1458240000D+01 .1679100000D-01 .1657760000D+02 .1045337000D+01 .1898900000D+01 .4989000000D+01 .4271400000D+01 .4310170000D+02 -.1542750000D+01 .3529961900D+04 .1305490000D+01 .2044900000D-01 .5150000000D+02 .3417561000D+01 .5445200000D+01 .1386400000D+01 .3782000000D+00 +8 53920030425200308082452754.3 .1583552000D+03 .1084700000D+00 .3531216400D+04 .6615930000D+01 .2190000000D-01 .4481810000D+02 .3870797000D+01 .1918200000D+01 .3451300000D+01 .2681700000D+01 -.2716280000D+02 .1136660000D+01 .1072787100D+04 .2897250000D+01 .2323800000D-01 .1186420000D+02 .2962951000D+01 .5871400000D+01 .2069900000D+01 .1991300000D+01 .1660822000D+03 -.3459510000D+01 .3575817900D+04 .8461770000D+01 .8134600000D-01 .4065480000D+02 .5343490000D+01 .2452900000D+01 .5209000000D+01 .4208200000D+01 +8 54020030808200311212452859.3 .9571190000D+02 .1068530000D+01 .3496009800D+04 .9265090000D+01 .6017100000D-01 .4840310000D+02 .5686588000D+01 .4326700000D+01 .1346500000D+01 .1798000000D+00 .1830360000D+02 .8885000000D-01 .8673831000D+03 .2722440000D+01 .1679800000D-01 .1055930000D+02 .4816841000D+01 .2258800000D+01 .5370000000D+01 .5675900000D+01 .6048750000D+02 -.9771800000D+00 .3428282100D+04 .5477460000D+01 .2822100000D-01 .5028370000D+02 .9235480000D+00 .6046300000D+01 .2878300000D+01 .1735400000D+01 +8 54120031121200403052452964.3 .1500373000D+03 .2947000000D+00 .3525401000D+04 .4367280000D+01 .1385100000D-01 .5661570000D+02 .1342855000D+01 .2837800000D+01 .4087300000D+01 .4388600000D+01 -.3352770000D+02 .1163770000D+01 .8291114000D+03 .1734890000D+01 .2370700000D-01 .1412500000D+02 .5297720000D+00 .6008900000D+01 .2468800000D+01 .3468200000D+01 .1483036000D+03 -.2900390000D+01 .3532854100D+04 .2906550000D+01 .5521700000D-01 .5554560000D+02 .2924465000D+01 .2830200000D+01 .5528400000D+01 .5982300000D+01 +8 54220040305200406182453069.3 .5378520000D+02 .2064080000D+01 .3458450400D+04 .4998360000D+01 .8568800000D-01 .4562580000D+02 .3462217000D+01 .5237100000D+01 .2225400000D+01 .2246800000D+01 -.1144640000D+02 .6453800000D+00 .9232204000D+03 .1788250000D+01 .1923600000D-01 .1142280000D+02 .2576533000D+01 .4796900000D+01 .9994000000D+00 .1402400000D+01 .1055610000D+03 -.1824220000D+01 .3576898000D+04 .5483090000D+01 .6012500000D-01 .4503750000D+02 .4996505000D+01 .1531900000D+01 .4341300000D+01 .3718900000D+01 +8 54320040618200410012453174.3 .9031730000D+02 .1039370000D+01 .3502727800D+04 .1077043000D+02 .3734000000D-01 .4663160000D+02 .5394747000D+01 .4011500000D+01 .1457700000D+01 .5936400000D+01 .1631270000D+02 -.1323000000D-01 .7748928000D+03 .3557440000D+01 .7671000000D-02 .8136800000D+01 .4488712000D+01 .1819400000D+01 .5087300000D+01 .5248900000D+01 .1022810000D+02 .3592900000D+00 .3512933100D+04 .8449130000D+01 .2219600000D-01 .4686440000D+02 .6397330000D+00 .5347100000D+01 .2347200000D+01 .1246500000D+01 +8 54420041001200501142453279.3 .9423200000D+01 .2625070000D+01 .3693642600D+04 .8899580000D+01 .1045750000D+00 .5469940000D+02 .9156050000D+00 .5173700000D+01 .2359200000D+01 .3716200000D+01 -.6235800000D+01 .2426100000D+00 .5236912000D+03 .1863070000D+01 .2183900000D-01 .6530200000D+01 .2020300000D-01 .3908900000D+01 .7071000000D+00 .2780900000D+01 .6177330000D+02 -.2223500000D+00 .3540930900D+04 .3881110000D+01 .5537800000D-01 .5175310000D+02 .2472335000D+01 .9400000000D+00 .4101800000D+01 .5238900000D+01 +8 54520050114200504292453384.3 .4860550000D+02 .1692060000D+01 .3481712300D+04 .1185965000D+02 .8487600000D-01 .4832030000D+02 .2947490000D+01 .4578200000D+01 .1595700000D+01 .1600000000D+01 .4205420000D+02 -.5420600000D+00 .5538280000D+03 .3831880000D+01 .3137000000D-01 .9486300000D+01 .2116400000D+01 .2274900000D+01 .5503600000D+01 .6313000000D+00 -.5204950000D+02 .1662660000D+01 .3426926900D+04 .9482630000D+01 .7858300000D-01 .5097640000D+02 .4539557000D+01 .5720600000D+01 .2660900000D+01 .3169900000D+01 +8 54620050429200508122453489.3 .1012389000D+03 .7095500000D+00 .3512554400D+04 .6520510000D+01 .2505400000D-01 .4799110000D+02 .5069073000D+01 .3797700000D+01 .2376200000D+01 .5470200000D+01 .5110300000D+01 .1168500000D+00 .6324766000D+03 .2123040000D+01 .5658000000D-02 .6916300000D+01 .4120339000D+01 .1275300000D+01 .1710300000D+01 .4721100000D+01 -.5708800000D+01 .9295800000D+00 .3558162200D+04 .6408950000D+01 .5037000000D-02 .4677760000D+02 .3337390000D+00 .4973800000D+01 .3090600000D+01 .7774000000D+00 +8 54720050812200511252453594.3 .6479740000D+02 .1089040000D+01 .3639710600D+04 .1064562000D+02 .6330200000D-01 .4993200000D+02 .5971220000D+00 .5071300000D+01 .2009500000D+01 .3167800000D+01 .4246000000D+01 -.2144000000D-01 .3596981000D+03 .3178750000D+01 .1269800000D-01 .3294200000D+01 .5863262000D+01 .3041400000D+01 .6149700000D+01 .2377300000D+01 -.2950300000D+02 .1976770000D+01 .3601447600D+04 .7128460000D+01 .5218000000D-01 .5095840000D+02 .2130994000D+01 .6248800000D+01 .2892700000D+01 .4680300000D+01 +8 54820051125200603102453699.3 .1729625000D+03 -.9642900000D+00 .3515977100D+04 .3808770000D+01 .3792700000D-01 .4976860000D+02 .2494930000D+01 .3081100000D+01 .5191500000D+01 .8953000000D+00 -.3080280000D+02 .7281500000D+00 .2193829000D+03 .1324390000D+01 .2530500000D-01 .3096500000D+01 .1338751000D+01 .6151900000D+01 .2595500000D+01 .5804800000D+01 -.1039350000D+02 .1304850000D+01 .3433084700D+04 .6632500000D+01 .3807200000D-01 .4946940000D+02 .4056129000D+01 .4834300000D+01 .1148900000D+01 .2497400000D+01 +8 54920060310200606232453804.3 .9295090000D+02 .7641700000D+00 .3512967200D+04 .3717320000D+01 .5699400000D-01 .5067460000D+02 .4636887000D+01 .5659700000D+01 .2815200000D+01 .4971400000D+01 -.1521730000D+02 .3342400000D+00 .3406735000D+03 .1605400000D+01 .2167700000D-01 .4804300000D+01 .3526187000D+01 .4527300000D+01 .1230500000D+01 .4044200000D+01 .1264420000D+02 .1039990000D+01 .3571486700D+04 .7000700000D+00 .3036200000D-01 .4848440000D+02 .6211368000D+01 .9382000000D+00 .4284700000D+01 .2541000000D+00 +8 55020060623200610062453909.3 .1153017000D+03 -.6008000000D-01 .3584121800D+04 .7471640000D+01 .9881000000D-02 .4840960000D+02 .3032490000D+00 .4891200000D+01 .1803700000D+01 .2652300000D+01 -.3721100000D+01 .5747000000D-01 .2476489000D+03 .3072930000D+01 .5552000000D-02 .1330700000D+01 .5439622000D+01 .2786900000D+01 .1059200000D+01 .2256700000D+01 -.9096900000D+01 .1877840000D+01 .3620952900D+04 .7192340000D+01 .2940400000D-01 .5026550000D+02 .1852771000D+01 .6030100000D+01 .2265400000D+01 .4215800000D+01 +8 55120061006200701192454014.3 .5083900000D+02 .9934000000D+00 .3589743100D+04 .4736540000D+01 .5197000000D-01 .4848590000D+02 .2106136000D+01 .7300000000D-02 .3226000000D+01 .2692000000D+00 -.6714300000D+01 .4222000000D-01 .1062815000D+03 .2773320000D+01 .2425200000D-01 .2037500000D+01 .5424597000D+01 .4307600000D+01 .1135200000D+01 .3224300000D+01 .4262870000D+02 .1284760000D+01 .3500827200D+04 .2763220000D+01 .2364500000D-01 .4823250000D+02 .3682564000D+01 .2438000000D+01 .5107500000D+01 .1887600000D+01 +8 55220070119200705042454119.3 .2094280000D+02 .1482170000D+01 .3453914100D+04 .9487000000D+01 .6215100000D-01 .5216000000D+02 .4129141000D+01 .5264700000D+01 .2044900000D+01 .4406500000D+01 .3691250000D+02 -.7860200000D+00 .9123870000D+02 .3812280000D+01 .2912400000D-01 .1781700000D+01 .8324910000D+00 .2694800000D+01 .5777900000D+01 .2084900000D+01 -.3323570000D+02 .2761590000D+01 .3513632200D+04 .6507210000D+01 .6748100000D-01 .5078190000D+02 .5738193000D+01 .6224900000D+01 .2861300000D+01 .5916100000D+01 +8 55320070504200708172454224.3 .1355706000D+03 -.6824100000D+00 .3573200400D+04 .1637640000D+01 .3157600000D-01 .4983480000D+02 .6240089000D+01 .3830500000D+01 .5021400000D+01 .2157500000D+01 -.1498000000D+00 -.2975000000D-01 .1112746000D+03 .1239700000D+01 .1058000000D-01 .6805000000D+00 .4218890000D+01 .2254900000D+01 .1977800000D+01 .4424500000D+01 .3815800000D+01 .1896830000D+01 .3652819800D+04 .4743750000D+01 .2742500000D-01 .5096090000D+02 .1523527000D+01 .5245800000D+01 .1238600000D+01 .3757800000D+01 +8 55420070817200711302454329.3 .1117591000D+03 -.6872700000D+00 .3537153300D+04 .5995600000D+01 .5637000000D-02 .4781760000D+02 .1834732000D+01 .3027000000D+00 .3981900000D+01 .6078000000D+01 .2811090000D+02 -.5019100000D+00 .2490525000D+03 .2734600000D+01 .1244300000D-01 .4698400000D+01 .4553436000D+01 .3483700000D+01 .5941600000D+01 .2052000000D+01 -.2584890000D+02 .2967160000D+01 .3467381200D+04 .8926000000D+00 .4127800000D-01 .4469200000D+02 .3370902000D+01 .1424900000D+01 .2425500000D+01 .1352500000D+01 +8 55520071130200803142454434.3 .1663977000D+03 -.1957140000D+01 .3601939400D+04 .4985310000D+01 .7938000000D-01 .5033470000D+02 .3721417000D+01 .2250100000D+01 .5608900000D+01 .3718400000D+01 .9347800000D+01 -.5213000000D-01 .4192908000D+03 .1171190000D+01 .1856500000D-01 .5767100000D+01 .6203056000D+01 .6906000000D+00 .3161600000D+01 .2049000000D+00 -.3361840000D+02 .3048790000D+01 .3454637200D+04 .8348060000D+01 .8362300000D-01 .5450930000D+02 .5310648000D+01 .4823800000D+01 .1644700000D+01 .5264700000D+01 +8 55620080314200806272454539.3 .1821431000D+03 -.1820850000D+01 .3565061500D+04 .9004600000D+01 .7077700000D-01 .5475010000D+02 .5777821000D+01 .1459200000D+01 .4797100000D+01 .1623000000D+01 -.1384310000D+02 .2280100000D+00 .3317911000D+03 .2537630000D+01 .2450800000D-01 .3958400000D+01 .2153473000D+01 .4796900000D+01 .1724100000D+01 .4328700000D+01 .5222490000D+02 .1295370000D+01 .3645365000D+04 .5048120000D+01 .3289100000D-01 .5345430000D+02 .1088831000D+01 .3350400000D+01 .1809000000D+00 .3239600000D+01 +8 55720080627200810102454644.3 .2187751000D+03 -.2909970000D+01 .3411671300D+04 .6232450000D+01 .6771700000D-01 .4648800000D+02 .1563898000D+01 .1105900000D+01 .5546900000D+01 .5686400000D+01 .5968800000D+01 -.1606000000D-01 .3493202000D+03 .2133810000D+01 .6531000000D-02 .5547500000D+01 .4167341000D+01 .3460600000D+01 .3442100000D+01 .1609300000D+01 .4963580000D+02 .1589250000D+01 .3519092200D+04 .1477320000D+01 .4157800000D-01 .4605760000D+02 .3093885000D+01 .1142600000D+01 .1777400000D+01 .8762000000D+00 +8 55820081010200901232454749.3 .1994807000D+03 -.2679240000D+01 .3652712800D+04 .1319115000D+02 .9837500000D-01 .4809930000D+02 .3420234000D+01 .1668300000D+01 .5027800000D+01 .3055500000D+01 -.2574050000D+02 .6278600000D+00 .6024056000D+03 .4420580000D+01 .3300800000D-01 .1014890000D+02 .5912125000D+01 .5010300000D+01 .1953500000D+01 .5454100000D+01 .2073049000D+03 -.1291560000D+01 .3608869600D+04 .8819670000D+01 .7103000000D-01 .4810830000D+02 .4939028000D+01 .2937700000D+01 .6109900000D+01 .4682200000D+01 +8 55920090123200905082454854.3 .1554905000D+03 -.1783000000D+01 .3566235900D+04 .8877770000D+01 .4115700000D-01 .6025060000D+02 .5301706000D+01 .1088200000D+01 .4955500000D+01 .1006500000D+01 .8286900000D+01 -.9476000000D-01 .6849925000D+03 .2745480000D+01 .1047600000D-01 .1017280000D+02 .1485750000D+01 .3821100000D+01 .4295000000D+00 .3667900000D+01 .1882187000D+03 -.7249200000D+00 .3496253300D+04 .6990690000D+01 .2403400000D-01 .5749320000D+02 .5997660000D+00 .2030500000D+01 .5080600000D+01 .2549100000D+01 +8 56020090508200908212454959.3 .1952060000D+03 -.2597100000D+01 .3381321300D+04 .6740670000D+01 .8716700000D-01 .4726890000D+02 .1194656000D+01 .1853100000D+01 .5507500000D+01 .5185400000D+01 -.8857200000D+01 .3151900000D+00 .5387935000D+03 .7091600000D+00 .2086100000D-01 .7042700000D+01 .3686330000D+01 .5004000000D+01 .2809700000D+01 .1259300000D+01 .1921371000D+03 -.1006550000D+01 .3542180000D+04 .1926340000D+01 .4121200000D-01 .5080410000D+02 .2765718000D+01 .2396200000D+01 .5298000000D+00 .4264000000D+00 +8 56120090821200912042455064.3 .1147917000D+03 -.1233890000D+01 .3597673800D+04 .1050796000D+02 .4211500000D-01 .4681180000D+02 .3137179000D+01 .1330300000D+01 .4567600000D+01 .2604900000D+01 .1097280000D+02 .1830000000D-02 .7033840000D+03 .3441580000D+01 .1096100000D-01 .1093930000D+02 .5572348000D+01 .4589200000D+01 .1097200000D+01 .4948600000D+01 .3116923000D+03 -.3035980000D+01 .3712072000D+04 .1253584000D+02 .7827800000D-01 .4339050000D+02 .4653045000D+01 .2356200000D+01 .5418500000D+01 .4176800000D+01 +8 56220091204201003192455169.3 .7146370000D+02 -.8350200000D+00 .3527665200D+04 .2699340000D+01 .4381600000D-01 .5495030000D+02 .4946835000D+01 .2417100000D+01 .6037500000D+01 .3336000000D+00 .4547390000D+02 -.4750900000D+00 .8698814000D+03 .1573710000D+01 .1542500000D-01 .1455580000D+02 .1061430000D+01 .1238800000D+01 .4061600000D+01 .2711800000D+01 .2734100000D+03 -.2271410000D+01 .3418871300D+04 .2607170000D+01 .1634500000D-01 .5654600000D+02 .1876330000D+00 .1606600000D+01 .1647000000D+00 .1816900000D+01 +8 56320100319201007022455274.3 .5553160000D+02 -.1539400000D+00 .3449764000D+04 .6435500000D+01 .4333700000D-01 .5321410000D+02 .7444230000D+00 .1946300000D+01 .4961400000D+01 .4543900000D+01 .1272730000D+02 -.6460000000D-02 .8393251000D+03 .2420980000D+01 .1739800000D-01 .1227710000D+02 .3157378000D+01 .5280000000D+01 .2097000000D+01 .7576000000D+00 .3148128000D+03 -.3158680000D+01 .3439209100D+04 .7461760000D+01 .7719200000D-01 .5467840000D+02 .2330182000D+01 .2658800000D+01 .5845600000D+01 .6147700000D+01 +8 56420100702201010152455379.3 .1176270000D+02 .4679900000D+00 .3545316100D+04 .3984250000D+01 .2664800000D-01 .4664790000D+02 .2814662000D+01 .4919000000D+00 .2239400000D+01 .2207500000D+01 .5181000000D+02 -.6786000000D+00 .8416632000D+03 .1440390000D+01 .1894400000D-01 .1099890000D+02 .5216629000D+01 .3286400000D+01 .5328800000D+01 .4541300000D+01 .3211408000D+03 -.3065010000D+01 .3721696800D+04 .1027063000D+02 .5515600000D-01 .4394310000D+02 .4355368000D+01 .1913200000D+01 .4891900000D+01 .3702800000D+01 +8 56520101015201101282455484.3 -.4715040000D+02 .1013530000D+01 .3419811000D+04 .5871580000D+01 .1628200000D-01 .4909360000D+02 .4683471000D+01 .3444000000D+01 .8679000000D+00 .6018400000D+01 .6540120000D+02 -.6777900000D+00 .9520396000D+03 .2732220000D+01 .1066400000D-01 .1581940000D+02 .7496880000D+00 .4556000000D+00 .4282400000D+01 .2045700000D+01 .2784224000D+03 -.2443880000D+01 .3438706000D+04 .2626130000D+01 .3226100000D-01 .5227550000D+02 .6172972000D+01 .3902100000D+01 .6036900000D+01 .1287600000D+01 diff --git a/GUI/xephem/auxil/starcensus.txt b/GUI/xephem/auxil/starcensus.txt new file mode 100644 index 0000000..af20131 --- /dev/null +++ b/GUI/xephem/auxil/starcensus.txt @@ -0,0 +1,5146 @@ +0000+49 BD 49 4329 +0000+55 FI CAS +0000+63 NSV 25 +0000-14 NSV 24 +0001+19 MARK 335 +0001+26 TT PEG +0001-33 SW SCL +0002+61 LD 74 +0002-26 SY SCL +0003+28 ALPHA AND +0003+52 LD 77 +0003+58 BETA CAS +0003-39 V SCL +0004+51 SS CAS +0004+51B 128 COMP S +0004+54 TT CAS +0004+62 KN CAS +0004+63 V641 CAS +0004-86 RU OCT +0006+29 VAR62 AND +0006+47 TAV0008+47 +0006+63 LD 78 +0006-12 WW CET +0007+73 RV CEP +0008+14 GAMMA PEG +0008+62 UX CAS +0008+62B 92 VAR? N +0009+28 UW AND +0009+46 VZ AND +0009+55 FM CAS +0009+57 SY CAS +0009+63 V642 CAS +0010+46 X AND +0010-32 S SCL +0012+49 ST CAS +0012+56 DK CAS +0012+65 V513 CAS +0013+40 HP AND +0013+41 TAV0016+41 +0013+58 TV CAS +0013+59 V377 CAS +0014+21 QR AND +0014+44 VX AND +0014-74 VV TUC +0015+55 V592 CAS +0015-62 CPD -62 25 +0015-74 VW TUC +0016+58 FQ CAS +0016-20 T CET +0017+26 T AND +0017+55 T CAS +0017+55B NSV 148 +0017+55C 94 COMP E +0017+58 FR CAS +0017+61 V410 CAS +0017-12 HD 35 +0018+38 R AND +0018-62 S TUC +0019+53 NQ CAS +0019+73 TZ CEP +0019-09 S CET +0020+50 TU CAS +0021+58 LD 83 +0021+59 CTM1 CAS +0021+60 V379 CAS +0022+17 TV PSC +0022+30 YZ AND +0022+30B VAR? SW +0022+35 AQ AND +0022-01 NEW UG CET +0022-12 AG CET +0023+58 RXJ0028.8+ +0024+25 PX AND +0024+29 CSV 100032 +0024+59 DL CAS +0024-38A T SCL +0024-38B RR SCL +0025+61 VX CAS +0025-46 T PHE +0026+14 T PSC +0026+14B STAR SW +0026+41 LS AND +0026+43 HQ AND +0027+25A TU AND +0027+25B DZ AND +0027+25C EE AND +0027+25D NSV 193 +0027+25E NSV 189 +0027+25F SUSP CIF +0028-33 W SCL +0029+60 NSV 203 +0030+57 UW CAS +0030+62 V446 CAS +0030-50 U PHE +0030-73 VZ TUC +0031+48 V752 CAS +0031+59 TAV0033+59 +0031+62 TY CAS +0031+62B 91 VAR? S +0031+79 Y CEP +0032+45 BZ AND +0032+56 FX CAS +0032+60 KP CAS +0034+55 ALPHA CAS +0034+79 NSV 251 +0035+42 HV AND +0035-34 Z SCL +0036+26 LL AND +0037+40 S AND +0037-10 AI CET +0039+40 EG AND +0039+52 V720 CAS +0040+47 U CAS +0041+14 NSV 293 +0041+32 RW AND +0041+81 RX CEP +0043+56 NSV 305 +0043+56B GX CAS +0044+35 V AND +0044+35B 120 VAR? E +0044+59 XY CAS +0044-35 X SCL +0045+33 RR AND +0045+62 VY CAS +0045-10 OB-081 CET +0046+53 V452 CAS +0046+59 V451 CAS +0047+46A RV CAS +0047+46B IZ CAS +0047+49 NSV 332 +0048+12 MARK 1502 +0049+23 NSV 343 +0049+58 W CAS +0049-70 TZ TUC +0050+59 LD 90 +0050+60 GAMMA CAS +0053+59 IV AND +0053+60 AV CAS +0053+63 LD 93 +0054+27 W PSC +0054+27B VAR E +0054+27C VAR? E +0054+56 HL CAS +0054-75 U TUC +0056+59 SAO 21947 +0056-08 SN 1998DN +0056-72 HD 5980 +0057+45 EH AND +0057-72 RY TUC +0058+31 SN 1998EF +0058+40 RX AND +0058+40B NSV 389 +0058+40C 133 COMP N +0058+40D 121 COMP S +0059+07 70 PSC +0059+53 V723 CAS +0059+53B 104 COMP W +0059+53C 83 VAR? E +0059+53D 116 VAR? S +0100+53 V456 CAS +0100+63 V487 CAS +0101+42 IZ AND +0101+45 EI AND +0101+53 V417 CAS +0101-02 Z CET +0101-02B 138 COMP W +0103+59 HT CAS +0103+59B 115 COMP S +0104+27 RZ PSC +0104+27B VAR PSC +0104+35 BETA AND +0105+01 NSV 422 +0105+03 XY PSC +0105+53 HV CAS +0105+64 RU CAS +0106+21A X PSC +0106+21B UX PSC +0106+21C VAR? SW +0106+21D 145 COMP S +0106+34 FN AND +0106+61 V418 CAS +0106-14 AM CET +0106-30 U SCL +0107+57 NSV 436 +0108+26 RT PSC +0108+26B 86 COMP SE +0108+63 LD 96 +0108+84 RU CEP +0109+37 FO AND +0109+40 U AND +0109+40B STAR SW +0109+40C 96 COMP N +0109-02 AN CET +0109-57 RS PHE +0110+25 Z PSC +0110+41A UZ AND +0110+41B EK AND +0110+55A VZ CAS +0111+58 BQ CAS +0111+61 V538 CAS +0111-18 WX CET +0112+08 S PSC +0112+57 V465 CAS +0112+63 V635 CAS +0112+63B ISV0115+63 +0112+65 250114+650 +0112+72 S CAS +0113+55 AA CAS +0113+79 AE CEP +0115-56 W PHE +0116+09 AH PSC +0116+38 TX AND +0116+60 XZ CAS +0117+06 AR PSC +0117+12 U PSC +0117+12B VAR? PSC +0117+24 TZ PSC +0118+21 RW PSC +0118+60 BT CAS +0119+59 DELTA CAS +0120+20 RX PSC +0120+20B VAR? S +0120+31 TY PSC +0120-04 NSV 504 +0121-06 SN 1998DM +0122+16 ST PSC +0122+30 AS PSC +0122+49 EM AND +0122+61 V390 CAS +0122+88 ALPHA UMI +0122-33 R SCL +0122-33B RS SCL +0123+50 RZ PER +0124+57 KU CAS +0124+57B VAR? CAS +0124+57C VAR? CAS +0125+02 R PSC +0125+35 RXJ0131.4+ +0126+30 TU TRI +0126+30B NSV 534 +0126-43 SY PHE +0127+46 SX AND +0127+46B VAR? SW +0127+57 WW CAS +0129-43 SZ PHE +0130+31 TW TRI +0130+50 KT PER +0130+50B 129 VAR? N +0130+53 AX PER +0130+57 RW CAS +0131+11 PI PSC +0131+29 TX TRI +0131+55 PT CAS +0131-75 RY HYI +0132+05 SN 1998ES +0132+38 RU AND +0133+00 SW CET +0133+00B 99 VAR? SW +0133+38 Y AND +0133+60 V770 CAS +0134-18 UV CET +0136+47 NSV 596 +0136+59 LD 100 +0137+48 NSV 602 +0137+50 PHI PER +0137-68 BL HYI +0139+37 AR AND +0139+37B SUSP RIP +0139+37C OW AND +0141+18 SV PSC +0142-75 R50 +0143+11 SN 673 +0144+53 TT PER +0144+59 VV CAS +0144-05 AQ CET +0146+67 NSV 650 +0147+63 EPS CAS +0148+69 V391 CAS +0149+58 X CAS +0149+58B 110 COMP E +0149-49 RT PHE +0150+23 RR ARI +0151+33 T TRI +0151+54 V437 PER +0152+33 UZ TRI +0152+52 V471 PER +0152+54 U PER +0152+54B 87 VAR? SW +0152+54C 90 COMP SW +0152-68 ETA1 HYI +0153+44 V370 AND +0154+57 V666 CAS +0154+58 LD 102 +0154+70 V393 CAS +0155+05 TT PSC +0155+56 V PER +0155+57 TY PER +0156+02 NSV 705 +0156+54 XX PER +0157+15 RY ARI +0157+32 NSV 707 +0159+12 S ARI +0159+40 AH AND +0159+56 CN PER +0200+57 VX PER +0201+14 TT ARI +0201+14B 93 VAR? SW +0201+22 KAPPA ARI +0201-10 UZ CET +0201-78 TV HYI +0202+27 Z TRI +0202-57 Y ERI +0203+56A UV PER +0203+56B KK PER +0203+56E 136 COMP W +0204+48 RV AND +0205+56 UW PER +0206+57A TZ PER +0206+57B VAR NE +0207-63 WX HYI +0208+57 HD 13658 +0209+11 V ARI +0209+56 V356 PER +0209+78 AG CEP +0209-01 MARK 590 +0210+24 R ARI +0210+24B 123 COMP E +0210+56 CSV 5971 +0210+58 PP PER +0210+58B VAR? PER +0211+37 AK 79 AND +0211+40 KV AND +0211+43A W AND +0211+43B 127 VAR? S +0211+43C 97 VAR? E +0211+43D VAR? NE +0211+49 TAVJ0218+5 +0211+56 BU PER +0211+63 NSV 783 +0211+78 NSV 786 +0211-10 NSV 768 +0211-20 RY CET +0212+58 T PER +0212+81 Z CEP +0213+56A AD PER +0213+56B FZ PER +0213+56C NSV 809 +0213+59 HD 14242 +0214+56 V424 PER +0214+57 PR PER +0214-03 OMI CET +0215+31 RT TRI +0215+44 VAR X +0215+56A RS PER +0215+56B SU PER +0215+58 S PER +0215+58B 83 VAR? N +0215+58C VAR? SE +0215+58D VAR? W +0215+58E VAR? S +0215+58F VAR? NE +0215+58G VAR? SSE +0215+58H 62 COMP SW +0215+58I 89 COMP W +0216+42 3C 66A +0216+56A V361 PER +0216+56B V439 PER +0217+70 AM CAS +0217-10 TZ CET +0218+57 HD 14826 +0219+27 RW TRI +0219+32 WY TRI +0219+37 BI AND +0219+59 SZ CAS +0219-79 SY HYI +0220+37 FS AND +0220-00 R CET +0220-00B 114 COMP S +0221+32A S TRI +0221+32B - TRI NW +0221+32C VAR? NE +0221+32D - TRI SE +0221+50 RR PER +0222-00 RS CET +0222-60 S HOR +0223+39 PQ AND +0223+62 V676 CAS +0224+45 CQ AND +0224-26 R FOR +0226+46 AX AND +0226+46B 116 COMP S +0226-69 NSV 840 +0227+45 UX AND +0227-41 X ERI +0228+55 DY PER +0228-13 U CET +0228-13B 73 COMP SE +0228-13C VAR? NW +0229+40 KW AND +0229+80 RR CEP +0231+33 R TRI +0231+33B 106 COMP W +0231+33C 15 TRI +0231+33D NSV 860 +0231+33E 92 COMP W +0231+33F 67 COMP NW +0231+56 YZ PER +0231-07 SN 991 +0232+38A UY AND +0232+38B VAR? W +0232+38C BD 38 526 +0232+60 V615 CAS +0232+60B VAR SW +0233+16 AO 0235+16 +0233-63 RS HOR +0234+61 GT0236+610 +0235+30 Y ARI +0235+34 W TRI +0235+42 NSV 895 +0235+60 MWC 56 +0235-54 SW HOR +0236+35 PU PER +0236+37 PV PER +0236-01 NSV 893 +0237+35 TV PER +0237+35B 110 COMP N +0237+36 NGC 1058 +0237-00 NGC 1068 +0238-26 X FOR +0239+11 RU ARI +0239+33 UW TRI +0240-29 ST FOR +0241+34 V368 PER +0241+36 TX PER +0241+39 AH PER +0241+57 NSV 929 +0241-00 SN 1087 +0241-08 SN 1084 +0242+10 WX ARI +0242+16 SU ARI +0242+17 T ARI +0242+17B NSV 931 +0242+17C NSV 937 +0242+17D NSV 944 +0242+37 AI PER +0242-13 CU ERI +0243+37 PY PER +0243+56A W PER +0243+56B EO PER +0243+56C VAR? S +0243+56D VAR? E +0243+56E 110 COMP E +0243+57 V648 CAS +0243+68 SU CAS +0243-12 Z ERI +0243-64 RU HOR +0244+38 IN PER +0244+56 ZZ PER +0244+58 V502 CAS +0245-59 X HOR +0246+36 PZ PER +0247+52 TAU PER +0247-08 RR ERI +0249-38 SY FOR +0250+17 RZ ARI +0250+36 V372 PER +0250-50 R HOR +0253+42 IV PER +0253+43 AE PER +0254+69 NSV 1020 +0254-13 DR ERI +0255+48 AL PER +0255+64 -CAS1 +0255+64B V664 CAS +0257-51 T HOR +0258+38 RHO PER +0259+19 RT ARI +0259+19B STAR B NE +0259+19C STAR E E +0259+19D STAR F SE +0300+46 V400 PER +0300+46B VAR NW +0300+46C 133 COMP N +0300+46D 135 COMP S +0300+46E 137 COMP S +0301+40 BETA PER +0301-59 V HOR +0302+26 Z ARI +0303+45 V409 PER +0304+13 ST ARI +0304+57 V623 CAS +0305+14 U ARI +0305+14B 122 COMP W +0305+14C 150 COMP S +0305-10 CP ERI +0306+47 V410 PER +0306-24 TW ERI +0308+46 AA PER +0309+42 QY PER +0309+42B VAR PER +0309+60 VAR62 CAM +0309-22 EF ERI +0310+41 V374 PER +0310-57 TW HOR +0311+44 SAO 38709 +0311+70 V667 CAS +0312+32 GSC2345189 +0312+59 NSV 1101 +0313+31 UZ PER +0313+32 TW PER +0313+32B 91 COMP SW +0313+32C 93 COMP SE +0313+41 NGC 1275 +0313+60 VAR64 CAM +0314+28 W ARI +0314-01 X CET +0314-01B 90 COMP SE +0314-01B 90 COMP SE +0316+41 V336 PER +0317-21 VW ERI +0319+19 SV ARI +0319+47 V384 PER +0319-37A SN 1316 I +0319-37B SN 1316 II +0320+43 Y PER +0320+43B 94 COMP NW +0321+33 NSV 1151 +0322+44 VW PER +0322-34 VX FOR +0323+35 R PER +0323+39 RU PER +0324+43 GK PER +0324+43B 91 COMP NW +0324+44 TASV0327+4 +0324+58 AF CAM +0325+42 SAO 38922 +0326-56 RT HOR +0328-26 RZ FOR +0329-16 RT ERI +0329-36 SN 1365 +0330+52 NSV 1199 +0331+00 V711 TAU +0332-35 SN 1380 +0333+62A U CAM +0333+62B CSV 328 +0333+80 SS CEP +0334+32 IP PER +0334+51 V466 PER +0335+36 AF PER +0335-55 NSV 1214 +0336-11 VY ERI +0338+21 V701 TAU +0338+23 16 TAU +0338+23B 17 TAU +0338-47 SN 1433 +0339+22 NSV 1280 +0339+24 21 TAU +0339+29 OV TAU +0340+23 23 TAU +0340+34 SZ PER +0340+67 CG CAM +0340-25 U FOR +0341+23 FL TAU +0341-24 S FOR +0341-45 SN 1448 +0342+23 SY TAU +0342+24 NSV 1316 +0343+22B NSV 1346 +0343+23 BU TAU +0343+23B 75 VAR? SE +0343+23C VAR? W ETA +0343+23D NSV 1321 +0343+24 II TAU +0343+38 XY PER +0343+47 MR PER +0343-07 BR ERI +0344+16 V471 TAU +0345+01 NSV 1381 +0345+32 RX PER +0346+33 AZ PER +0346+58 RW CAM +0346-01 SU ERI +0346-25 U ERI +0346-62A RV RET +0346-62B RW RET +0346-67 RX RET +0347+07 X TAU +0347+11 IK TAU +0347+19 BL TAU +0347+25 NSV 1391 +0347-57 RY RET +0348+15 UY TAU +0348-09 SW ERI +0348-09B VAR ERI +0349+30 X PER +0349-46 U HOR +0351-24 T ERI +0351-55 SV RET +0352-01 BD 01 565 +0355+12 LAMBDA TAU +0355+19 WW TAU +0355-82 NSV 1440 +0356+20 AK TAU +0356+58 RX CAM +0357+16 TZ TAU +0357+61 UV CAM +0357-23 SN 1187 +0357-66 NSV 1432 +0358-55 T RET +0359-16 V ERI +0400+53 XX CAM +0401+06 XY TAU +0401+06B 121 VAR? S +0401+06C VAR? W +0401+47 MX PER +0401+50 FO PER +0401-10 CY ERI +0402+26A TX TAU +0402+26B TV TAU +0403-55 SS DOR +0404+41 SW PER +0404+50 CTM2 PER +0404+51 FR PER +0404+51B 9M STAR N +0404+51C 109 COMP E +0404-08 DD ERI +0405-82 NSV 1440 +0406-15 XZ ERI +0407-25 W ERI +0407-25B 110 COMP E +0408+62 ZZ CAM +0408-33 SN 1532 +0409+23 NSV 1529 +0409+50 SY PER +0409-33 SAO 194835 +0409-71 VW HYI +0410-07 OMI2 ERI +0411+50 NS PER +0411+55 CI CAM +0412+28 V410 TAU +0412+48 AS PER +0412+57 TW CAM +0412-25 AU ERI +0413+21 V724 TAU +0413+28 BP TAU +0413-18 RS ERI +0413-18B 76 COMP +0413-18C VAR? NE +0414+68 SX CAM +0415+20 V1100 TAU +0415+28 RY TAU +0415+28B 96 VAR? W +0415+32 V518 PER +0415-02 DQ ERI +0415-18 AV ERI +0416+19 T TAU +0416+19B 108 COMP W +0416-60 ST RET +0416-62 SN 1559 +0417+22 SAO 76588 +0417-05 RW ERI +0418-13 AH ERI +0418-54 RZ DOR +0418-82 U MEN +0419+00 PKS0422+00 +0419+16 VX TAU +0419+16B VAR? W +0419+16C STAR C NE +0420+18 NSV 1597 +0420+25A DF TAU +0420+25B DG TAU +0421+64 RY CAM +0422+09 R TAU +0422+15 W TAU +0422+39A GI PER +0422+39B GY PER +0422+48 BM PER +0422+57 RV CAM +0423+09 S TAU +0423+21 NSV 1612 +0423+38 GZ PER +0423+39 NSV 1624 +0424+18 UX TAU +0424+25 DK TAU +0425+17 CSV 6110 +0425+17B V718 TAU +0425+18 XZ TAU +0425+18B HL TAU +0426+17 GG TAU +0426+25 UZ TAU +0426+25B BD 25 719 +0426-54 ST DOR +0427+05 BW TAU +0427+25 DL TAU +0430+16 ALPHA TAU +0430+23 NSV 1663 +0430+26 V833 TAU +0430+65 T CAM +0431+18 SZ TAU +0432+00 NSV 1671 +0432+08 RX TAU +0432+74 X CAM +0432-63 R RET +0432-63B SU RET +0433+22 VY TAU +0433+51 NSV 1665 +0434+50 FY PER +0435+47 V392 PER +0435-62 R DOR +0437+22 NSV 1702 +0437-38 R CAE +0438-05 SN 1643 +0439+74 NSV 1723 +0440+47 GSC3347149 +0440+68 ST CAM +0441+26 RV TAU +0441+36 AW PER +0441+79 XY CAM +0441-24 NSV 1710 +0442+18 EO ERI +0442+40 NSV 1725 +0442+40B HR PER +0442+42 SV PER +0442+74 AP CAM +0443+28 AO TAU +0443-36 T CAE +0443-49 R PIC +0444+66 BD 66 360 +0444-06 SN 1667 +0444-52 NSV 1721 +0444-59 T DOR +0445+00 HD 30796 +0445+02 EP ORI +0445+15 BR ORI +0445+16 NSV 1739 +0445+28 TT TAU +0445+30 UY AUR +0445+46 TASV0449+4 +0445-55 SU DOR +0445-76 TU MEN +0446+14 OMI1 ORI +0446+17 V TAU +0446+38 HV AUR +0446+41 EY AUR +0446+41B VAR? NW +0446+49 AU AUR +0446+69 CC CAM +0448+30 GM AUR +0449+02 PI5 ORI +0449+07 FG ORI +0449+10 PI1 ORI +0449+30A SU AUR +0449+30B AB AUR +0450+33 NSV 1778 +0450+48A TV AUR +0450+48B 97 VAR? S +0450+48C 92 COMP SW +0450-07 SX ERI +0450-16 R ERI +0451+48 TY AUR +0452+40 AN AUR +0452+56 TX CAM +0453+04 UGC 3223 +0453+07 R ORI +0453+07B 103 COMP E +0453+31 V337 AUR +0454+39 RX AUR +0454+43 EPS AUR +0454-14 V? LEP +0454-16 NSV 1793 +0455+40 ZETA AUR +0455+50 EL AUR +0455-12 S ERI +0455-14 R LEP +0456+24 V1062 TAU +0457+15 GP ORI +0457+26 HW TAU +0457+26B 11M* E HW +0458+51 9 AUR +0458+55 HD 32456 +0459+35 AQ AUR +0459-03 UX ORI +0500+01 W ORI +0500+01B 61 COMP NW +0500+01C 75 COMP N +0500+01D NSV 1806 +0500+03A V ORI +0500+03B NSV 1824 +0500+03C 90 COMP SE +0500+68 UX CAM +0500-22 T LEP +0500-22B 121 COMP E +0501+30 RW AUR +0501+37 DM AUR +0501-04 AQ ERI +0502+38 TX AUR +0502+55 CK CAM +0503+49 BK AUR +0503-12 NSV 1842 +0503-71 HD 269006 +0504+31 DU AUR +0504+45 TMZ V124 +0504-05 SY ERI +0504-59 TMZ V13 +0504-70 N MEN 91 +0505+42 SY AUR +0506-05 AR ERI +0506-05B STAR A W +0506-11 RX LEP +0506-67 HV 5637 +0508+40 UZ AUR +0508+49 UX AUR +0508-48 S PIC +0509+03 EU ORI +0509+34 AE AUR +0509+45 ALPHA AUR +0509+53 R AUR +0509-08 NSV 1882 +0509-64A U DOR +0509-64B HV 2886 +0510+11 V431 ORI +0511+00 FN ORI +0511+35 DY AUR +0511-00 V1193 ORI +0511-00B AKN 120 +0512+30 GS AUR +0512+33 BS 1732 +0512-47 T PIC +0513+16 XX TAU +0513-16 X LEP +0514-07 NSV 1927 +0514-22 RZ LEP +0514-66 RY DOR +0515+32 UV AUR +0515-33 T COL +0516+01 GR ORI +0517-08 IRC 10086 +0518+00 BI ORI +0518+14 GV ORI +0518-69 S DOR +0518-73 RS MEN +0519+01 NSV 1967 +0519+35 NSV 1971 +0519+50 AC AUR +0519-06 EX ORI +0519-69 N LMC 92 +0520+29 SAO 77179 +0520+34A S AUR +0520+34B 19 AUR +0520+34C VAR NW +0520+34D 116 COMP W +0520+36 W AUR +0520-39 SW COL +0521+07 BD 07 896 +0521+34 OP AUR +0521+42 Y AUR +0521-00 DH ORI +0522+11A CO ORI +0522+15 YY TAU +0522+17 SAO 94573 +0522+33 QZ AUR +0523+11A GW ORI +0523+72 RR CAM +0524+34 OT AUR +0524+38 V428 AUR +0524-01 CI ORI +0524-03 V1159 ORI +0524-04A S ORI +0524-04B NSV 2014 +0524-04C VAR? SE +0524-04D 94 COMP SE +0525+04 CK ORI +0525+04B 65 COMP SW +0525+09 V650 ORI +0525+10 V451 ORI +0525+12A HI ORI +0525+12B HK ORI +0525+18 DV TAU +0525+30 T AUR +0525-32 TV COL +0526+03 33 ORI +0526+05 BD 05 948 +0526+07 BK ORI +0526+07B 88 COMP E +0526+07C 99 VAR? N +0526+09 V998 ORI +0526+11 NSV 2079 +0526+18 CE TAU +0526+36 V363 AUR +0526+36B VAR? S +0526-00 DELTA ORI +0526-03 NSV 2075 +0527+07 RT ORI +0527+34 EH AUR +0527-02 RY ORI +0527-66 V2724 LMC +0527-70 N LMC 95 +0527-71 W MEN +0528+01 V371 ORI +0528+25 AD TAU +0528-04 HV ORI +0528-05 OR NEB GP1 +0528-69 HD 269582 +0529+08 NSV 2258 +0529+24 CQ TAU +0529-05 OR NEB GP2 +0530+26 NSV 2426 +0530+39 AV AUR +0530+68 S CAM +0530+68B NSV 2544 +0530+68C 84 COMP NE +0530+68D 95 COMP W +0530-04 OR NEB GP3 +0530-05 OR NEB GP4 +0530-05A T ORI +0530-05B 90 COMP NE +0530-05C 127 COMP N +0530-05D 116 COMP S +0530-09 V653 ORI +0531+06 BN ORI +0531+21 ZETA TAU +0531+69 SN 1998EB +0531-02 PQ ORI +0531-05 OR NEB GP5 +0531-06G BD ORI +0531-06K PR ORI +0531-06L V380 ORI +0531-25 SZ LEP +0531-30 RV COL +0532+26 V725 TAU +0532-01 X ORI +0532-05 OR NEB GP6 +0532-06 OR NEB GP8 +0532-06A BE ORI +0532-06B BF ORI +0532-06D V586 ORI +0532-55 Z PIC +0532-62 BETA DOR +0532-68 HD 269700 +0533+04 OMEGA ORI +0533+16 NSV 2501 +0533+26 RR TAU +0533+26D VAR? SW +0533+28 AW AUR +0533+29 HH AUR +0533+37 RU AUR +0533+37B 116 COMP S +0533+60 BY CAM +0533-04 V1143 ORI +0533-05 OR NEB GP7 +0533-58 TW PIC +0534+28 AB TAU +0534+31A NO AUR +0534+31B NSV 2537 +0534+68 CRAGG1 CAM +0534-02 BG ORI +0534-66 A 0538-66 +0534-69 SN LMC 87 +0535+12 NSV 2557 +0535+16 NSV 2560 +0535+31 U AUR +0535+31B 67 COMP SW +0535+38 SZ AUR +0535+68 AU CAM +0535-09 V350 ORI +0535-55 RY PIC +0536+14 FX ORI +0536+14B 97 COMP NE +0536-04 Y ORI +0536-04B VAR? NW +0536-69 NSV 2499 +0537+32 VAR AUR +0537-69 HD 269858 +0538+00A GT ORI +0538+00B NSV 2599 +0538+43 WZ AUR +0539+00 V351 ORI +0539+00B 93 COMP SE +0539+09 FU ORI +0539+09B 87 COMP SW +0539+09C 89 COMP SW +0539+13 ST TAU +0539+15 CP TAU +0539+15B 89 VAR? NW +0539+18 EU TAU +0539+20 Y TAU +0539+24 TU TAU +0540+12 QS ORI +0540+21 NSV 2626 +0540+54 V437 AUR +0540-41 TX COL +0540-46 W PIC +0541+27 AW TAU +0541+28 FS AUR +0541+30 FU AUR +0541+54 TAVJ0550+5 +0541-64 SN 2082 +0541-69A HDE 269858 +0541-69B CPD 69420 +0542+22 V421 TAU +0543+19 SU TAU +0543-09 NSV 2641 +0543-31 S COL +0544+15 EM TAU +0544-64 HV 12842 +0546+14 SAO 94937 +0546+15A Z TAU +0546+15B RS TAU +0546+15C RU TAU +0546+15D COMPAN. Z +0546+33 NSV 2681 +0546-29 R COL +0546-75 R MEN +0547+15 SAO 94983 +0547+19 VAR ORI +0547-05 CN ORI +0548+41 XY AUR +0548-01 NSV 2721 +0549+07 ALPHA ORI +0549+20A U ORI +0549+20C 106 VAR? S +0549+20D BD 20 1171 +0549+20E 103 COMP S +0549+28 HDE 249119 +0549+32 AY AUR +0549+32B STAR A SE +0549+32C STAR B SE +0549+45 TW AUR +0549+48 LO AUR +0549+74 V CAM +0549-06 UV ORI +0551+20 NSV 2736 +0551+22 BQ ORI +0552+55 TAV0556+55 +0553+35 CO AUR +0553+53 Z AUR +0553+53B 108 COMP E +0553+53C 85 COMP E +0553+53D 105 COMP S +0554+20 V529 ORI +0554+39 AZ AUR +0554+41 KK AUR +0556+10 DP ORI +0556+46A RS AUR +0556+46B SV AUR +0556+46C 95 COMP NE +0556-02 V352 ORI +0556-86 R OCT +0557+16 RR ORI +0557+16B VAR1 NW +0557+16C VAR2 NW +0557+28 BS AUR +0557+42 YY AUR +0557+47 XZ AUR +0557+47B 10.2 COMP +0557-23 SN 2139 +0558+23 1 GEM +0559+36 KP AUR +0600+13 DY ORI +0600-16 SS LEP +0601-24 S LEP +0602+22 SS GEM +0602+22B 109 VAR? W +0602+22C 85 VAR? W +0602+34 NSV 2841 +0602+46 VY AUR +0602+47 GSC3378485 +0603+23 PU GEM +0604+09 CT ORI +0604+26 TU GEM +0604+43 RR AUR +0604+43B VAR SW +0604+50 X AUR +0604+50B 122 COMP S +0604+50C 102 COMP S +0605+09 GQ ORI +0605+21 TV GEM +0605+23 WY GEM +0605+47 SS AUR +0605+47B 138 VAR? S +0605+47C 108 COMP E +0606+21 NSV 2859 +0606+22 BU GEM +0606+22B 72 COMP E +0606+45 VV AUR +0606+45B NSV 2872 +0606-50 RW PUP +0607+20 NSV 2869 +0607+27 SU GEM +0607+46A ST AUR +0607+46B VZ AUR +0608+22 ETA GEM +0608+28 V392 AUR +0608-48 V347 PUP +0608-60 RW PIC +0609+15 V344 ORI +0609+15B VAR NW +0609+28 KR AUR +0609-45 DZ PUP +0610-01 V345 ORI +0611+15 CZ ORI +0611+22 BD 22 1257 +0611-16 NSV 2891 +0612+75 W CAM +0612-59 V PIC +0613+23 LU GEM +0613-16 TY CMA +0613-17A UY CMA +0613-17B VAR A +0613-17C STAR NW +0613-17D 112 COMP N +0613-30 EH CMA +0614+14 BD 14 1247 +0614-17A UZ CMA +0614-17B VAR B +0614-17C VAR CMA +0614-26 U CMA +0615+05 V1056 ORI +0615-02 NSV 2918 +0616+06 SV MON +0616+14 RS ORI +0616+22 MU GEM +0616+47 V AUR +0616+47B STAR NW +0616+47C STAR NE +0616-11 FR CMA +0616-61 RZ PIC +0617+03 FU MON +0617+25 ZZ GEM +0617+49 PSI1 AUR +0617-00 V616 MON +0617-02 V MON +0618+24 CD GEM +0618+50 GO AUR +0618+50B 110 VAR N +0618+58 SAO 25733 +0618+71 BZ CAM +0619+07 T MON +0619+14 BL ORI +0619+25 VV GEM +0619+45 BW AUR +0619+47 GQ AUR +0620+05 KT MON +0620+30 QV AUR +0620+47 AG AUR +0620+61 V LYN +0621+05 SW MON +0621+14 NSV 2967 +0622+30 RT AUR +0622+30B 66 COMP SE +0622-81 AH MEN +0623-12 FS CMA +0624+22 CI GEM +0624+27 DW GEM +0625+05 AX MON +0625+17 OW GEM +0625+64 RT CAM +0625+74 SU CAM +0626+31 AL AUR +0626+55 7 LYN +0627+42 RV AUR +0628+45 TU AUR +0628-08 Z MON +0629+00 V492 MON +0629+08 - MON +0629+15 W GEM +0629+26 KN GEM +0629+38 UU AUR +0629-18 HS CMA +0629-43 NU PUP +0630+18 CT GEM +0630+26A BR GEM +0631+00 CW MON +0631+18 EQ GEM +0631+59 U LYN +0632+01 CX MON +0632+18 UV GEM +0632-01 SY MON +0632-01B 112 COMP W +0633+08 R MON +0633+08B NGC 2261 +0633+09 RZ MON +0633-01 NSV 3057 +0633-29 NSV 3051 +0633-62 NSV 3043 +0634+10 V650 MON +0634+18 CY GEM +0634+31 SY GEM +0634+44A AA AUR +0634+44B 114 VAR? S +0634+44C VAR? SE +0634-62 RR PIC +0635+09 S MON +0635+31 VW GEM +0635+58 S LYN +0635+58B 129 COMP W +0635+87 CSV 100754 +0636+38 GR AUR +0637+15 TMZ V12 +0637+25 EPS GEM +0637+30 DM GEM +0638-01 BT MON +0639+09 FX MON +0639+12 AT GEM +0639+18 IQ GEM +0639-42 RV PUP +0640+13A UY GEM +0640+15 UX GEM +0640+18 RT GEM +0640+30 X GEM +0640+30B 115 COMP N +0640+30C 128 COMP S +0640+30D NSV 3188 +0640+30E 117 COMP S +0640+30F 95 COMP SW +0640-16 HL CMA +0640-16B VAR S +0641+01 NGC 2282 +0641+08 ST MON +0641+08B 11.7 COMP +0641+28 IR GEM +0641+28B VAR? S +0641+28C 149 COMP N +0641-36 CH PUP +0642+01 MR MON +0642+17 FF GEM +0642+48 CD AUR +0643+01 PZ MON +0643+05 V613 MON +0643+16 FI GEM +0643+32 IS GEM +0645+16 IT GEM +0645-37 ST PUP +0645-44 HD 49798 +0646+04 SX MON +0646+05A CG MON +0646+05B DL MON +0646+05C NSV 3239 +0646+34 THETA GEM +0646-32 KAPPA CMA +0647+16 KZ GEM +0647+84 SN 2268 +0647-07 W MON +0648+32 DN GEM +0648+46 CE AUR +0648-04 GY MON +0650+06 CL MON +0650+41 UW AUR +0651+00 TY MON +0651+06A CO MON +0651+06B NSV 3290 +0651+07 BG MON +0651+11 Y MON +0652+03 AZ MON +0652+06 SAO 114689 +0652+31 FW GEM +0652-08 X MON +0652-08C NSV 3299 +0652-09 EQ MON +0652-10 V644 MON +0653+06 RV MON +0653+09 UY MON +0653+26 SW GEM +0653+55 R LYN +0653+87 OV CEP +0653-08 V523 MON +0655+10A BI MON +0655+10B NSV 3330 +0655+10C NSV 3333 +0655+10D 131 COMP E +0655+10F 114 COMP W +0655+10G 113 COMP N +0655+10H 118 * NE +0655+10I IY MON +0655+30 RS GEM +0656+17 NP GEM +0656-03 V614 MON +0656-08 AC MON +0656-14 RV CMA +0657-18 SV CMA +0657-27 SIGMA CMA +0657-66 T VOL +0658+12 GH GEM +0658+12B GY GEM +0658+20 ZETA GEM +0659+10A BC GEM +0659+10B NSV 3369 +0659-11 Z CMA +0659-23 CG CMA +0700+37 ET AUR +0700+46 SN 1998AN +0700-66 U VOL +0701+09 V CMI +0701+09B 109 COMP W +0701+22A R GEM +0701+22B Z GEM +0701+22C TW GEM +0701+22D NSV 3394 +0701+22E VAR? SE +0701+28 AM GEM +0701-28 UV CMA +0701-35 NSV 3379 +0702+05 RS MON +0702-07 RY MON +0703+10 R CMI +0703+10B 82 VAR? SW +0703-11 W CMA +0703-11B 85 COMP NE +0703-11C SAO 152426 +0704+01 AD CMI +0704+68 AA CAM +0704-00 V651 MON +0705+04 WW CMI +0705-58 AC CAR +0706+07 WX CMI +0706-19A SY CMA +0706-19B 12.7 COMP +0706-19C 12.2 COMP +0707+14 VX GEM +0707+16 BQ GEM +0707+17 UZ GEM +0707-01 AH MON +0707-72 R VOL +0708-15 HI CAS +0709+08 AQ CMI +0709-25 CO CMA +0710+26 WZ GEM +0710+39 HT AUR +0710+39B VAR? +0710+39C 100 COMP N +0710+39D 98 COMP E +0710+39E 118 COMP E +0710+39F 122 COMP N +0710+39G 124 COMP W +0710+39H STAR A NW +0710+39I 110 COMP N +0710+69 RU CAM +0710+71 S5 0716+71 +0710+80 SN 2336 +0710+82 VZ CAM +0710-26A OMEGA CMA +0710-26B EW CMA +0710-44 L2 PUP +0710-45 L1 PUP +0711+03 WY CMI +0711+24 RV GEM +0711-11 RY CMA +0712+01 RR MON +0713+02 WZ CMI +0714+25 BM GEM +0714-24 TAU CMA +0714-26 WZ CMA +0715-19 NSV 3539 +0716+28 AW GEM +0717+13 V GEM +0717-14 TW CMA +0717-25 T CMA +0717-25B MZ CMA +0718+09 ZZ CMI +0718+15 OT GEM +0718-25 VY CMA +0718-25B NSV 3564 +0719+27 IOTA GEM +0719+33 XX GEM +0719+33B VAR? SE +0719+47 SN UGC3845 +0719-03 BS MON +0720+46 Y LYN +0720-02 V686 MON +0720-03 BX MON +0720-03B VAR MON +0720-05 TT MON +0720-05B 10.9 COMP +0720-16 FW CMA +0721+40 NEW UG AUR +0721+41 VX AUR +0721+48 NSV 3597 +0721-03 V467 MON +0721-06 GI MON +0721-07 V694 MON +0722+40 HM AUR +0722-25 SS CMA +0722-25B VZ CMA +0723-09 SAO 134724 +0724-04 RX MON +0724-04B VAR NW +0724-25 LSS 437 +0725+06 SV CMI +0725+24 NQ GEM +0725-19 CL PUP +0726+10 BG CMI +0726-09 U MON +0726-09B 66 COMP SW +0727+08 S CMI +0727+08B 100 VAR? N +0727-19 VW PUP +0727-34 RY PUP +0728+11 T CMI +0728+11B NSV 3643 +0728+11C 134 COMP S +0728+32 YY GEM +0728-20A X PUP +0728-20B Z PUP +0728-21 VX PUP +0729-14 KQ PUP +0730+00 AI CMI +0731+17 BN GEM +0731-73 S VOL +0732+17 OI+158 +0732+34 ST GEM +0732-46 PP PUP +0733+36 RU LYN +0733+36B 135 COMP S +0734+01 PKS0736+01 +0734-00A GK MON +0734-00B V470 MON +0734-00C VAR N +0734-00D 133 COMP E +0734-28 VZ PUP +0735+08 U CMI +0735+20 Y GEM +0736-31 R PUP +0737+23 S GEM +0737+23B VAR? N +0737+29 SIGMA GEM +0737-10 SU MON +0737-25 WX PUP +0738-12 GL PUP +0739+03 YZ CMI +0739+14 BE GEM +0739+31 AU GEM +0739-13 UX PUP +0740+73 SN 2441 +0741-12 UY PUP +0741-39 RZ PUP +0741-62 IY CAR +0742-26 SS PUP +0742-41 W PUP +0742-52 V436 CAR +0743+23 T GEM +0743-25 AD PUP +0743-48 S PUP +0744-23 BV PUP +0744-23B BV PUP A +0744-40 T PUP +0745+15 PQ GEM +0746+03 BC CMI +0746+60 SBS0755+60 +0747+01B AE CMI +0747+13 TASVJ0752+ +0748+01 VX CMI +0748+63 RXJ0757.0+ +0749+22 U GEM +0749+22B NSV 3808 +0749-31 HS PUP +0750-24 BX PUP +0750-27 ET PUP +0750-77 V CHA +0751+20 OI090.4CNC +0751+21 XY GEM +0751-28 HU PUP +0751-29 QV PUP +0752+73 SW CAM +0753+16 DW CNC +0753+20 BP GEM +0753-43 SU PUP +0753-51 HD 65425 +0753-58 V341 CAR +0754-04 BC MON +0754-28 AQ PUP +0754-39 AP PUP +0754-43 ?? PUP +0756-05 BD MON +0756-12 U PUP +0757+36 SV LYN +0759+85 FF CEP +0759-28 HZ PUP +0759-36 AR PUP +0801+31 VZ GEM +0801+65 RZ UMA +0801-38 RT PUP +0802-28 WRAY15-157 +0803+14 ST CNC +0803+14B 125 COMP W +0803+14C 129 COMP W +0803+14D STAR C +0803+19 RV CNC +0803+62 SU UMA +0803-22 RU PUP +0804+28 YZ CNC +0804+28B 132 COMP +0804+28C 128 COMP +0804+28D 133 COMP +0804+28E 117 VAR? W +0805+19 VV CNC +0805+23 RR CNC +0805+23B VAR? SW +0805-35 FK PUP +0805-43 BK VEL +0805-46 BL VEL +0806-37 AS PUP +0806-43 NSV 3933 +0807+14 SU CNC +0807-34 V351 PUP +0807-43 NSV 3936 +0807-47 AX VEL +0808+08 TV CNC +0808+10 VW CNC +0808+25 RX CNC +0808+37 RT LYN +0808-30 LS 992 +0808-34 Y PUP +0808-35 CP PUP +0808-35B COMPAN. CP +0808-36 AT PUP +0808-46 AH VEL +0809-24 CD PUP +0809-26 DY PUP +0809-34 RS PUP +0809-76 Z CHA +0809-76B CPD-76 499 +0809-76C - CHA +0810+40 W LYN +0810-18 VV PUP +0810-41 RX PUP +0810-44 AI VEL +0810-47 BN VEL +0811+12 R CNC +0811+12B 81 VAR? E +0811+12C 73 COMP S +0812+11 BD 12 1812 +0812-13 SV PUP +0812-48 IX VEL +0813-34 TU PUP +0814+03 RY HYA +0814+73 Z CAM +0814-35 NSV 3997 +0815+14 SZ CNC +0815+51 BH LYN +0816+05 FZ HYA +0816+15 Z CNC +0816+17 V CNC +0816+17B 119 VAR? E +0816+17C VAR? NE +0816+17D 93 COMP N +0816+33 T LYN +0817-10 GG HYA +0817-10B GG HYA A +0819+35 X LYN +0819+35B VAR NE +0819-08 FK HYA +0819-60 NSV 4052 +0821+13 BP CNC +0821+21 SN 1999AA +0821+73 FBS0827+73 +0822+25 AT CNC +0822+61 OMI UMA +0824-05 RT HYA +0824-76 R CHA +0825-30 U PYX +0826-59 V CAR +0827-27 AS 201 +0828-44 CT VEL +0829+20 DE CNC +0829+53 SW UMA +0829+53B VAR? NW +0829+53C STAR E +0829+53E SUS RIP NW +0829+53F 138 COMP N +0829+53G 143 COMP N +0829+53I 139 COMP N +0829+53J NSV 4147 +0829+53K EQ UMA +0829-59 IZ CAR +0830+13 UY CNC +0830+19 U CNC +0830+21 CC CNC +0830-76 W CHA +0831+26 AA CNC +0831+48 EI UMA +0833+21 UV CNC +0833+50 X UMA +0833-36 NSV 4154 +0833-43 RZ VEL +0833-46 EN VEL +0833-47 BB VEL +0833-59 KK CAR +0834-09 RV HYA +0834-47 T VEL +0835+10 VZ CNC +0835-16 AK HYA +0836+79 RS CAM +0837+20 XX CNC +0837+28 EG CNC +0838-47 EP VEL +0839-32 NSV 4223 +0840-47 SW VEL +0841-27 R PYX +0841-46 SX VEL +0845+03 CT HYA +0846+28 BO CNC +0846+58 BZ UMA +0846+58B VAR SW +0848+03 S HYA +0848-76 - CHA +0849+11 AK CNC +0849+17 X CNC +0849+20 OJ 287 CNC +0849-34 V PYX +0850-08 T HYA +0850-08B VAR? SE +0850-08C VAR? NE +0850-08D 115 VAR? W +0851+20 T CNC +0852+11 RT CNC +0852-02 WW HYA +0853+14 NSV 4331 +0853+18 HR 3577 +0853-00 TU HYA +0853-58 KW CAR +0854-24 VZ PYX +0854-41 CU VEL +0855+18 SY CNC +0855+18B 115 COMP N +0855+18C 121 COMP S +0855+18D VAR? NW +0855-52 CQ VEL +0856+40 BI LYN +0856+41 BP LYN +0857+38 SAO 61226 +0857+39 UX LYN +0857+60 TT UMA +0857+60B SN 2726 +0857-59 AL CAR +0858+21 TZ CNC +0900-24 S PYX +0900-31 T PYX +0900-31B VAR W +0900-58 KZ CAR +0901+51 V UMA +0904+19 RXJ0909.8+ +0904+25 W CNC +0904+25B 136 VAR? W +0904+31 RS CNC +0905+07 SN 2775 +0905+51 DI UMA +0905+67 RX UMA +0905-65 LM CAR +0908+57 NSV 4427 +0908-13 WX HYA +0908-43 SY VEL +0909-06 MM HYA +0910+29 TMZ V36 +0911+51 RT UMA +0911-04 UZ HYA +0912-29 X PYX +0913-65 RU CAR +0914+34 BK LYN +0914+57 CG UMA +0914-28 Y PYX +0915+00 IN HYA +0916+31 AR CNC +0916-27 RS PYX +0916-49 RW VEL +0918-29 RV PYX +0918-52 WY VEL +0918-68 RW CAR +0920-23 IL HYA +0920-48 RS VEL +0921+14 NSV 4490 +0922+36 RS LMI +0922-29 RW PYX +0923-53 GL VEL +0924+21A TU LEO +0924+21B 138 VAR? W +0924-51 NSV 4499 +0924-63 IW CAR +0925+50 UMA 6 +0925-51 Y VEL +0925-62 MN CAR +0926-73 UU CAR +0927+20 AB LEO +0927-61 KR CAR +0928-56 N VEL +0929-62 R CAR +0930-14 X HYA +0931+78 Y DRA +0931-39 RR ANT +0932-53 UU VEL +0932-59 H CAR +0933-20 ST HYA +0934-44 CC VEL +0934-53 N? VEL 87 +0937+20 RS LEO +0937+54 YY UMA +0937-48 KM VEL +0937-62 NSV 4581 +0939+05 SN 2962 +0939+34 R LMI +0939+34B VAR? NW +0939+34C 132 COMP E +0939+52 ER UMA +0939-22 AD HYA +0939-45 FI VEL +0940+45 DV UMA +0940-23 RR HYA +0940-62 NT CAR +0940-63 KL CAR +0941+33 HD 84615 +0941-05 TT SEX +0941-37 NSV 4617 +0942+11 R LEO +0942+11B 88 VAR? NE +0942+11D 77 COMP S +0942+11E 75 COMP S +0942+11F 97 COMP SE +0942-62 L CAR +0943-48 FL VEL +0944+12 NSV 4637 +0944+40 NSV 4641 +0944-41 CE VEL +0945+12 X LEO +0945+12B VAR? SW +0945+12C VAR? SE +0945+12D VAR? NW +0945+34 RZ LMI +0945+34B SN 3021 +0945-01 W SEX +0945-23 AG HYA +0946+27 Z LEO +0946-22 Y HYA +0946-41 SU VEL +0946-44 SZ VEL +0946-51 DW VEL +0947+35 S LMI +0947+69 SN 3031 +0947+69B D VAR NW +0947+69C VAR? S +0947-23 DL HYA +0948+10 DV LEO +0948+36 U LMI +0948-49 DY VEL +0949+01 SN 3044 +0949+50 SY UMA +0949-52 FP VEL +0949-53 Z VEL +0949-62 KM CAR +0950-24 IX HYA +0951-41 X VEL +0951-49 EE VEL +0951-58 C CAR +0952-57 GX CAR +0954+21 V LEO +0954+25 NSV 4696 +0954-58 RR CAR +0954-61 NSV 4688 +0955-50 FR VEL +0955-63 RV CAR +0956+34 RU LMI +0956+66 PG1000+667 +0956-59 SZ CAR +0958+14 RY LEO +0958+14B 115 COMP W +0958-62 GY CAR +0959+68 CH UMA +0959-46 NSV 4721 +1000-70 KN CAR +1002+17 DD LEO +1002+20 YY LEO +1002-29 X ANT +1003-52 CM VEL +1004-69 OY CAR +1005+03 Z SEX +1005-37 R ANT +1006-10 NSV 4773 +1006-61 S CAR +1006-61B V337 CAR +1006-64 KO CAR +1007+73 CP DRA +1007-09 RT SEX +1007-57 NSV 4775 +1008+60 U UMA +1008+73 SN 3147 +1008-57 QY CAR +1009+03 SN 3169 +1009+73 DH DRA +1009-44 MM VEL +1010+31 RW LMI +1010-02 SW SEX +1010-58A Z CAR +1010-58B AF CAR +1010-60 SU CAR +1011+72 CI UMA +1011-53 W VEL +1013-49 XZ VEL +1014+20 AD LEO +1014+20B NSV 4823 +1014+53 SBS1017+53 +1014-08 RW SEX +1015-60 AP CAR +1016-34 V ANT +1016-54 RY VEL +1016-59 EV CAR +1017+30 RV LMI +1017+44 NSV 4838 +1017-34 AC ANT +1017-60 HQ CAR +1017-61 TT CAR +1018+14 U LEO +1018+20 NGC 3227 +1018+34 SAO 62021 +1018-06 X SEX +1018-60 AQ CAR +1019-59 HR CAR +1020-59 CK CAR +1021-35 VZ ANT +1021-59 AT CAR +1022-61 AU CAR +1023-59 UW CAR +1024+30 NSV 4874 +1024-58 YZ CAR +1024-58B EP CAR +1026-46 RT VEL +1027+59 DW UMA +1028+31 SS LMI +1028-61 UY CAR +1029+00 S SEX +1029-83 X OCT +1030+37 SN 3294 +1030-39 U ANT +1030-53 TV VEL +1031-60 TU CAR +1032+54 SN 3310 +1032-11 FF HYA +1032-12 U HYA +1032-60 UZ CAR +1032-70 RZ CAR +1033-56 LS 1698 +1034+68 - UMA +1035-60 HW CAR +1035-79 RX CHA +1036+32 RX LMI +1036-54 UX VEL +1037+04 NSV 4945 +1037+58 TMZ V85 +1037+69 R UMA +1037-58 FU CAR +1038+67 VY UMA +1039+26 W LMI +1040+55 SV UMA +1040+63 SN 3359 +1040-55 SV VEL +1040-57 VY CAR +1040-58 RT CAR +1041+12 SN 1998BU +1041+14 SN 3367 +1041+17 SN 3370 +1041-55 AD VEL +1041-59 ETA CAR +1042-57 SX CAR +1042-58 BO CAR +1042-65 TZ CAR +1043+36 NSV 4977 +1043-40 CH VEL +1044-53 WX VEL +1045-54 UZ VEL +1045-56 VV VEL +1045-78 ST CHA +1046-20 V HYA +1046-28 RS HYA +1046-59 IX CAR +1047-58 FI CAR +1047-58B WW CAR +1047-59 VZ CAR +1048+14 W LEO +1048+27 SN 3451 +1048+72 VX UMA +1048-52 SS VEL +1048-56 AG VEL +1048-72 TY CAR +1049+30 SX LMI +1049+37 EL UMA +1049-52 RU VEL +1049-58 WX CAR +1050+06 VY LEO +1050-40 GN VEL +1050-48 KV VEL +1050-60A WZ CAR +1050-60B CL CAR +1050-61 BZ CAR +1051+50 CY UMA +1051-59 T CAR +1052+70 VW UMA +1052-36 UX ANT +1052-59 AG CAR +1052-60 IO CAR +1053+55 NSV 5035 +1053-28 EC10560-29 +1053-59 U CAR +1053-64 XX CAR +1055+56 NSV 5053 +1055-17 R CRT +1057+62 ALPHA UMA +1058+29 SN 3510 +1058+38 MARK 421 +1058+45 AN UMA +1058-02 SX LEO +1058-21 TU CRT +1058-63 XY CAR +1058-72 PR CAR +1058-73 PS CAR +1059-66 KV CAR +1100+25 ST LMI +1100+44 WX UMA +1100+44B WX UMA B +1100-60 XZ CAR +1100-60B CH CAR +1101+02 -LEO1 +1101+49 CV UMA +1101-68 QU CAR +1102+02 PG1104+02 +1102-54 RW CEN +1103+72 NGC 3516 +1103-61 RS CAR +1104-60 V432 CAR +1105+06 S LEO +1105+55 TASV1108+5 +1105+56 NGC 3556 +1105-35 V433 CEN +1105-58 ER CAR +1107-06 U CRT +1107-06B 127 COMP S +1107-35 V434 CEN +1108-28 FP HYA +1109-25 HY HYA +1109-37 V436 CEN +1109-57 GK CAR +1110+43 AR UMA +1110-00 TT LEO +1110-59 FR CAR +1110-61 DH CAR +1110-76 YY CHA +1111-57 SY CAR +1112+32 XI UMA +1112-21 RX CRT +1112-69 DI CAR +1114+66 SZ UMA +1115+13 SN 3627 +1115+13B NGC 3627 +1115-61 RY CAR +1115-61B STAR NE +1116-60 V779 CEN +1116-61 RS CEN +1116-75 BX CHA +1118+17 TZ LEO +1120-35 V442 CEN +1120-60 AY CEN +1120-68 GU MUS +1121-25 HZ HYA +1121-76 Y CHA +1122+15 AF LEO +1122+45 ST UMA +1122+59 SN 1998T +1123+29 SN 3687 +1125+69 LAMBDA DRA +1126-11 RR CRT +1127-58 OMI1 CEN +1127-64A SY MUS +1129+23 AO LEO +1129-11 TT CRT +1132+02 RZ LEO +1132+02B 125 COMP S +1133+03 T LEO +1134-61 HD 101390 +1135+11 AI LEO +1135+12 SN 3810 +1135+13 AK LEO +1135+76 CT DRA +1136+39 RU UMA +1136+39B VAR? E +1136-62 UZ CEN +1137+72 DO DRA +1137-62 V772 CEN +1139-60 MT CEN +1140+36 TV UMA +1140+48 SN 1998S +1140-03 TW VIR +1140-03B VAR? NW +1141+58 WW UMA +1141-62 V830 CEN +1142+44 AZ UMA +1143-61 V801 CEN +1144-41 X CEN +1144-62 BK CEN +1146-05 TY VIR +1146-10 RU CRT +1146-41 V422 CEN +1147+38 NSV 5374 +1147+49 BC UMA +1147-66 GQ MUS +1148-58 AD CEN +1150-58 W CEN +1151+16 WX LEO +1151+55 SN 1998AQ +1151+58 Z UMA +1151+58B 72 COMP E +1151+58C 83 COMP SE +1151-65 N MUS 98 +1152-78 T CHA +1153+44 NGC 4013 * +1154+19 GK COM +1154+29 4C 29.45 +1154+29B VAR? SE +1154-18 SN 1996W +1155-09 SV VIR +1155-18 TW CRV +1156+09 X VIR +1156-18 SN 4038 +1156-31 NSV 5428 +1157+62 SN 4041 +1157-63 Y CRU +1158+44 NGC 4051 +1159+03 TZ VIR +1159+19 R COM +1159-05 RX VIR +1200+12 SU VIR +1200+12B 100 COMP S +1200-61 DI CRU +1201+44 SU CVN +1202-06 RW VIR +1202-43 V650 CEN +1204+20 SW COM +1204+58 TZ UMA +1204-44 RU CEN +1205+20 SY COM +1205+39 NGC 4151 +1205+39B 115 COMP N +1205-61 CP CRU +1205-63 Z CRU +1206-58 W CRU +1207-43 MU CEN +1207-49 V368 CEN +1207-69 S MUS +1209-05 T VIR +1209-50 TV CEN +1210+53 EG UMA +1210+57 DELTA UMA +1210-50 V493 CEN +1211-55 BH CRU +1212-45 V370 CEN +1212-62 SU CRU +1212-63 AO CRU +1212-67 EPS MUS +1213+22 TW COM +1213+40 NSV 5543 +1214+02 SNMGC 32 1 +1214+49 SAO 44127 +1214-18 R CRV +1215+61 RY UMA +1215-08 CH VIR +1215-17 TV CRV +1215-44 V372 CEN +1215-48 SX CEN +1215-59 NSV 5568 +1215-61 T CRU +1216+28 W COM +1217+16 SN 4321 +1217-62 BI CRU +1218+43 AI CVN +1218-35 XZ CEN +1218-48 V428 CEN +1218-61 R CRU +1219+06 FK VIR +1219-48 S CEN +1220+01 SS VIR +1220+13 SN 4374 +1220+43 HD 108100 +1220-45 V373 CEN +1220-59 ST CRU +1221+15 SN 4419 +1221+31 SN 4414 +1221+69 SS DRA +1221-62 BP CRU +1222+09 SN 4411B +1222+19 TV COM +1222-58 BL CRU +1224+02 3C 273 VIR +1224+02B 129 COMP +1224-22 SN 1998BN +1225+04 BK VIR +1225+32 T CVN +1225+69 CQ DRA +1225-63 AP CRU +1226+01 SN 4493 +1226+12 CV VIR +1226+29 SN 4495 +1226-57 U CRU +1226-57B VAR CRU +1226-57C U CRU P +1226-58 BG CRU +1227+14 AL COM +1227-17 VAR CRV +1228+07 CI VIR +1228+08 NSV 5717 +1228-03 Y VIR +1228-54 U CEN +1229+02 SN 4536 +1229+03 SN 4527 +1229+08 SN 4526 +1229+38 AM CVN +1229-17 U CRV +1229-64 RT CRU +1229-67 BO MUS +1230-53 AL CEN +1230-54 YY CEN +1230-54B VAR SE +1231+12 SN 4564 +1231+60 T UMA +1231+60B 107 VAR? E +1232-16 S CRV +1233+07 R VIR +1233+12 SN 4579 +1233+66 RV DRA +1233+66B 92 COMP S +1234+21 IR COM +1234+59 RS UMA +1234+60 NSV 5827 +1235+56 Y UMA +1235-17A V CRV +1235-17B VAR? SE +1235-59 AG CRU +1236-33 V591 CEN +1236-34 V451 CEN +1236-59 CH CRU +1236-68 R MUS +1236-68B EG MUS +1237+13 SN 4639 +1237-53 UW CEN +1237-68 V? MUS +1238-62 CD CRU +1238-68 HD 110716 +1238-68B HD 110717 +1239+37 TX CVN +1239+37B 103 COMP N +1239+41 NSV 5902 +1239+61 S UMA +1239+61B VAR? SE +1240+45 Y CVN +1240-58 X CRU +1241+55 SN 4675 +1241-11 SN 4680 +1241-59 ESB 365 +1242+04 RU VIR +1242+38 U CVN +1242-69 RV MUS +1243-02 SN 4691 +1243-61 RX CRU +1244-08 SN 4699 +1244-14 SV CRV +1245+49 NSV 5976 +1245-29 CM HYA +1246+06 U VIR +1247+69 SAO 15921 +1247-00 SN 4753 +1247-28 EX HYA +1247-69 EF MUS +1248-57 S CRU +1248-68 NSV 6021 +1249+56 EPS UMA +1250+03 SAO 119665 +1250+27 REJ1255+26 +1250+47 TU CVN +1250+47B 62 VAR? +1250-57 V CRU +1250-60 VAR CRU +1251+27 GO COM +1251-32 V485 CEN +1252+66 RY DRA +1253+08 CN VIR +1253+23 T COM +1253-05 3C 279 VIR +1254+28 SN 4874 +1254+38 TT CVN +1255+14 SN 4902 +1255+28 X COM +1255-17 BZ VIR +1256-59 V888 CEN +1256-63 LS 2883 +1256-64 X MUS +1257+05 RT VIR +1257-29 SW HYA +1258+07 CO VIR +1258-55 AF CEN +1259-07 SN 4948 +1259-64A Y MUS +1300+18 GP COM +1301+23 FS COM +1301-04 NSV 6095 +1301-05 YY VIR +1302-12 RV VIR +1302-12B ? VIR +1303-04 - VIR +1303-56 CS CEN +1303-59 WW CEN +1305+18 ALPHA COM +1305+32 AU CVN +1305+47 SY CVN +1306+37 SN 5005 +1306-62 WX CEN +1307-01 SAO 139219 +1307-56A AW CEN +1307-56B DF CEN +1307-60 NN CEN +1308+36 SN 5033 +1308-02 SW VIR +1310-36 NSV 6160 +1310-44 UY CEN +1311+07 FH VIR +1311+42 SN 5055 +1311-55 VAR? CEN +1311-61 V396 CEN +1312-26 SN 5061 +1312-83 U OCT +1313-60A TT CEN +1313-60B V398 CEN +1313-73 T MUS +1314-55 V840 CEN +1315+02 HV VIR +1315+46 V CVN +1315+46B 69 COMP N +1315+46C 78 COMP NE +1315-57 NS CEN +1315-60 UU CEN +1316+44 AV CVN +1316-19 NSV 6206 +1317-41 V803 CEN +1318+47 HD 116475 +1318-64 U MUS +1319-42 SN 5128 +1319-42B VAR CEN A +1319-53 DY CEN +1320-02 W VIR +1320-46B V1OMECEN +1320-46C V2OMECEN +1320-46D V17OMECEN +1320-46E V29OMECEN +1320-46F V53OMECEN +1320-46G V138OMECEN +1320-46H V148OMECEN +1320-46I V162OMECEN +1320-46J V164OMECEN +1321+55 G UMA +1322+62 RR UMA +1322-02 V VIR +1322-61 J CEN B +1324-22 R HYA +1324-77 S CHA +1325+41 VX CVN +1325+47 SN 5194 +1325-23 SS HYA +1325-54 BV CEN +1326-29 LY HYA +1327-06 S VIR +1327-06B 61 VAR? NW +1328-24 RW HYA +1329-12 NSV 6316 +1330+08 FP VIR +1330-53 CC CEN +1331-08 - VIR +1331-08B VAR? VIR +1331-19 SX VIR +1331-29 SN 5236 +1331-33 HD 118010 +1331-53 CD CEN +1331-53B CE CEN +1331-55 RV CEN +1332+52 UX UMA +1332+73 T UMI +1332+73B 99 COMP SE +1333-30 V663 CEN +1333-34 HD 118319 +1333-49 VX CEN +1333-49A V744 CEN +1334-31 SN 5253 +1335-61 OW CEN +1336+74 V UMI +1336-18 RY VIR +1336-30 V664 CEN +1336-33 T CEN +1337+55 NSV 6389 +1338-07 HS VIR +1339+22 DK BOO +1340+00 WZ VIR +1340-62A V766 CEN +1340-62B VAR? CEN +1341-62 V868 CEN +1342-36 RT CEN +1342-37 AN CEN +1343+61 SN 5308 +1343-27 W HYA +1343-41 MU CEN +1343-69 Z CIR +1344+08 CR BOO +1344+34 RT CVN +1344+40 R CVN +1344+40B 98 VAR? NW +1344+40C 96 COMP SW +1344+40D 91 COMP E +1344-01 CE VIR +1345-36 RX CEN +1345-69 RU CIR +1346-77 T APS +1347+40 NSV 6474 +1347-28 NSV 6481 +1347-46 V767 CEN +1350-57 V412 CEN +1351+14 SX BOO +1351+40 SN 5371 +1351-26 GH HYA +1352+27 NSV 6502 +1352-30 TW CEN +1352-64 BW CIR +1353-04 SY VIR +1353-04B 95 COMP W +1353-04C 95 COMP E +1353-04D 91 COMP SW +1353-04E 100 COMP E +1353-04F 108 COMP E +1353-69 ST CIR +1355+28 WY BOO +1355-69 SY CIR +1355-76 THETA APS +1356+38 NSV 6519 +1356-70 SZ CIR +1356-71 X APS +1357+08 AA BOO +1358+29 RZ BOO +1358+35 SN 1998D +1358-09 TV VIR +1358-70A Z APS +1358-70B RR APS +1359+54 SN 5457 +1359-08 RR VIR +1359-35 AQ CEN +1400-71 RT APS +1401+13 Z BOO +1402+28 OQ 203 +1402-44 V834 CEN +1403-39 V500 CEN +1404+53 CT BOO +1405-12A Z VIR +1405-12B AL VIR +1405-28 RU HYA +1405-58 V760 CEN +1406-04 SN 5493 +1406-10 DN VIR +1406-39A V502 CEN +1406-39B V504 CEN +1406-45 V505 CEN +1407-13 EV VIR +1408-45 V507 CEN +1408-45B HD 124448 +1408-61 V417 CEN +1409+19 T BOO +1409-59 R CEN +1410+10 IS BOO +1410+69 NSV 6593 +1410-05 CF VIR +1410-40 V510 CEN +1411+19 ALPHA BOO +1411+19B CN BOO +1411+34 DR BOO +1411-21 IV VIR +1411-78 NSV 6609 +1412-14 AN VIR +1412-59 HD 125072 +1413+25 NGC 5548 +1413-63 V418 CEN +1415+67 U UMI +1415+67B 86 VAR E +1415+67C 114 COMP S +1415+67D 84 COMP NE +1415-49 T LUP +1415-63 V340 CEN +1416+04 AO VIR +1416-01 NSV 6638 +1416-47 RS LUP +1417+20 Y BOO +1417+29 CSV 7128 +1417+29B CI BOO +1417-63 KQ CEN +1418+26 UV BOO +1418+54 NSV 6645 +1418+67 NSV 6640 +1418-63 V341 CEN +1419+26 RX BOO +1419+26B 76 COMP NW +1419+54 S BOO +1419+54B VAR SE +1419+54C 82 VAR? NW +1419+54D 106 COMP N +1419-69 WZ CIR +1421+54 NSV 6661 +1422+04 AE VIR +1422+05 RS VIR +1422+72 RV UMI +1422-38 V520 CEN +1422-62 V645 CEN +1422-70 RX APS +1423+07 AP VIR +1423-71 RY APS +1424-25 GY HYA +1424-48 RT LUP +1424-63 NSV 6692 +1425+39 V BOO +1425+39B 113 VAR SE +1425+39C 92 COMP NW +1425+84 R CAM +1425+84B 69 COMP E +1425-29 Y CEN +1425-50 HY LUP +1425-56 V CEN +1425-71 ST APS +1426+39 NSV 6696 +1426-40 V530 CEN +1427+76 NSV 6687 +1427-60 TX CEN +1427-60B V798 CEN +1428-39 V854 CEN +1428-57 V842 CEN +1429-42 Z LUP +1429-61 V737 CEN +1429-72 SV APS +1430+37 NSV 6718 +1430-40 V532 CEN +1432+24 RXJ1437.0+ +1432+27 R BOO +1434-17 V LIB +1435+32 RV BOO +1436-63 BY CIR +1436-68 AE CIR +1437+32 RW BOO +1437-19A SX LIB +1437-19B GS LIB +1437-19C VAR? A +1438+14 S10808 +1438+35 MARK 478 +1438+37 SAO 64289 +1439+22A UZ BOO +1439+22B UZ BOO? +1439+22C STAR SE +1439+26 W BOO +1440+02 SN 5746 +1440-31 V553 CEN +1440-59 AR CIR +1441+15 NSV 6796 +1441+56 UV DRA +1441-68 AK CIR +1442+05 BG VIR +1443+39 RR BOO +1443+39B 87 COMP SW +1443+39C 95 VAR? NW +1443+39D 94 COMP SE +1443-56 NSV 6819 +1445+23 RY BOO +1446+23 VAR? 8.1 +1446-46A S LUP +1446-46B X LUP +1446-76 R APS +1448+64 RXJ1450.5+ +1448-62 THETA CIR +1449+16 CE BOO +1449+18 U BOO +1452-12 FY LIB +1452-31 V822 CEN +1452-54 Y LUP +1453+25 NSV 6869 +1454+41 TT BOO +1454-71 HD 132483 +1455-29 BE CEN +1455-29B NSV 6883 +1455-71 V APS +1456+66 RR UMI +1458+32 NSV 6900 +1458+40 BETA BOO +1459-71 S APS +1459-71B 103 VAR W +1500-18 RT LIB +1500-68 T TRA +1502+01 SN1987B +1502-20 YY LIB +1504-69 X TRA +1505-19 T LIB +1505-64 EK TRA +1506-05 Y LIB +1506-19 IOTA LIB +1506-48 AG LUP +1507+19 FL SER +1507-01 - LIB +1508+23 NY SER +1508-01 Y SER +1508-50 W LUP +1510+83 Z UMI +1510-66 R TRA +1511+02 Z SER +1511-09 BETA LIB +1511-24 AP LIB +1513+29 RX CRB +1513+36 RT BOO +1513+36B 116 VAR? S +1514+15 TMZ V45 +1514-08 FZ LIB +1514-24 GW LIB +1515-20 S LIB +1516+59 NSV 7030 +1517+14 S SER +1517+31 S CRB +1517+31B 122 COMP E +1517-23 RW LIB +1518+31 UU CRB +1518-22 RS LIB +1518-75 AG APS +1522+45 GRB 990123 +1523+19 WX SER +1523+62 ES DRA +1524-00 AM SER +1524-20 NSV 7114 +1527+03 WW SER +1527-13 EC1533-140 +1527-14 RU LIB +1527-14B 114 COMP N +1527-14C 76 COMP SW +1528-49A R NOR +1528-49B VAR2 NOR +1529-40 BR LUP +1529-49A VAR1 NOR +1529-49B VAR3 NOR +1530-20 X LIB +1531+15 TAU4 SER +1531+26 RU CRB +1532+37 SAO 64803 +1532+60 DM DRA +1532-15 W LIB +1532-51 V342 NOR +1532-52 IM NOR +1533+19 LX SER +1533+30 65 COMP +1533+78A S UMI +1533+78C 116 VAR? E +1533+78D 106 VAR? S +1533+78E 121 COMP E +1533-50 LILLER OBJ +1533-65 HK TRA +1534-54 U NOR +1536+57 NSV 7187 +1536+79 NSV 7155 +1536-20A U LIB +1536-20B RX LIB +1536-20C VAR? SW +1536-54 T NOR +1537+36 SS CRB +1537+38 RR CRB +1537+38B 78 COMP SW +1537+38C STAR SE +1537+39 SW CRB +1537+58 NSV 7192 +1538+64 VY DRA +1538-01 BG SER +1538-01B VAR? SER +1540-20 Z LIB +1541+14 CT SER +1542-42 AB NOR +1543+38 Y CRB +1543-19 DN LIB +1544+26B NSV 7378 +1544+28A R CRB +1544+28B TT CRB +1544+28C THETA CRB +1544+28D VAR? NE +1545+36 X CRB +1546+15 R SER +1546+15B VAR? SW +1546+38 ST CRB +1546+39 V CRB +1546+39B 85 COMP N +1546-54 SY NOR +1547+48 ST HER +1547-15 R LIB +1547-36 R LUP +1548+19 MR SER +1549+26 BD 26 2749 +1550+27 RXJ1554.2+ +1550-18 RR LIB +1550-21 V1026 SCO +1550-37 RU LUP +1551+09 RU SER +1551+43 2 HER +1552+21 HAD V04 +1552+29 Z CRB +1552+72 SS UMI +1552-14 FX LIB +1552-40 RY LUP +1552-63 S TRA +1553-23 BK SCO +1554+20A AH SER +1554+20B VAR? E +1554+36 RS CRB +1554-29 U LUP +1555+02 BC SER +1555+26 T CRB +1555+26B NSV 7378 +1555+26C NSV 7373 +1555+26D NSV 7370 +1555+26E 107 COMPNN +1555+26F NSV 7394 +1556+33 VW CRB +1556-40 EX LUP +1556-73 HM APS +1557-23 TY SCO +1558-23 RZ SCO +1558-23B STAR SW +1558-62 U TRA +1559+47 X HER +1559-23C V864 SCO +1559-51B V345 NOR +1600-21 Z SCO +1600-22 GL SCO +1601+18 R HER +1601+50 RR HER +1601+67 AG DRA +1601+67B VAR NE +1601+67C 94 COMP S +1601-38 V856 SCO +1601-73 BM APS +1602+10 U SER +1602+10B 140 COMP N +1602-21A X SCO +1602-21B UV SCO +1602-21C 127 COMP N +1602-21D STAR N +1602-21E STAR NW +1602-48 V NOR +1603+25 SX HER +1604-22 TW SCO +1604-73 VZ APS +1605-19 W SCO +1605-24 RX SCO +1606+25 RU HER +1606+25B 124 VAR? S +1606+25C 84 COMP E +1606+25D VAR? SE +1606+25E 102 COMP S +1606+25F 110 COMP S +1606+25G VNL SUSP +1606-19 AN SCO +1606-21C 12.7* +1606-53 V341 NOR +1606-59 CS NOR +1607+10 DN HER +1607+23 LQ HER +1608+25 VV HER +1608+25E 140 COMP N +1608-28 V893 SCO +1609-52 W NOR +1609-58 DM NOR +1610+34 SIGMA CRB +1610-57 S NOR +1610-73 BT APS +1611+33 SX CRB +1611+38 W CRB +1611-22A R SCO +1611-22B S SCO +1611-22C T SCO +1611-59 DW NOR +1612+07 SAO 14466 +1612-54 HP NOR +1612-58 DX NOR +1612-59 DZ NOR +1613+26 NP HER +1613+26B VAR? NW +1613+26C VAR? NE +1613+26D 115 COMP W +1614+55 CR DRA +1614-02 X SER +1614-15 V818 SCO +1614-52 HY NOR +1614-75 BY APS +1615+60 AT DRA +1615-59 RT NOR +1616+34 AH CRB +1616-07 W OPH +1616-17 U SCO +1616-65 EI TRA +1617+19 GAMMA HER +1617+19B V589 HER +1617-51 X NOR +1617-55 IK NOR +1617-59 ER NOR +1618+19 NSV 7682 +1618-65 IU TRA +1619-29 PKS1622-29 +1619-74 WW APS +1620+19 CSV 7350 +1620-04 V699 OPH +1620-22 TU OPH +1621+19 U HER +1621+19B 74 VAR? NW +1621+19C NSV 7735 +1621+19D 73 COMP NW +1621+19E 77 COMP E +1621+39 V844 HER +1621-12 V OPH +1621-18 CHI OPH +1622-38 N983 SCO +1622-59 FS NOR +1623-19 Y SCO +1623-26 ALPHA SCO +1623-58 RY NOR +1624-12 - OPH +1624-53 RZ NOR +1624-74 FV APS +1625+42 G HER +1625-62 RT TRA +1626+21 V592 HER +1626+23 DO HER +1626+23B VAR? NW +1626+23C 140 COMP S +1626-64A DO TRA +1626-64B HN TRA +1628+07A SS HER +1628+07B NSV 7814 +1628+39 GN HER +1628-15 T OPH +1628-16 S OPH +1628-55 X ARA +1628-64 DT TRA +1628-68 RU TRA +1629+38 UY HER +1629-48 HDE 331015 +1630-31 ST SCO +1630-52 LO ARA +1630-59 Y ARA +1630-68 EF TRA +1631+12 V849 HER +1631+37 W HER +1631+38 TZ HER +1631+72 R UMI +1631+72B 99 VAR? SE +1631+72C 96 VAR? NE +1631-10 ZETA OPH +1632+07 Y HER +1632+38 UU HER +1632+66 R DRA +1632+66B 98 COMP NW +1632-59 YY ARA +1633+08 V544 HER +1633+57 ST DRA +1633+60 TX DRA +1634+14 AS HER +1634-59 YZ ARA +1635+72 VAR KIN +1635-26 AX SCO +1635-62 KX TRA +1636+49 42 HER +1636-46 V823 ARA +1639+08 V548 HER +1639+40 3C 345 +1639-67 V TRA +1640+12 UV HER +1640+25 AH HER +1640+25B 121 COMP S +1640+25C VAR? NW +1640+25D 116 COMP E +1640+25E 142 COMP N +1640+25F 128 COMP S +1640+25G J1802 HER +1640+55 S DRA +1640-27 AC SCO +1641-67 W TRA +1642+72 AZ DRA +1643-14 AS 209 +1643-19 RR OPH +1644+03 TT OPH +1644+03B 97 COMP SE +1644+42 V636 HER +1644-25A AF SCO +1644-25B DX SCO +1645-25 AS 210 +1646+08 NSV 8001 +1646+57 AH DRA +1646-06 V2045 OPH +1646-25 EM SCO +1646-56 Z ARA +1647+05 RX OPH +1647+05B 118 VAR? E +1647+05C 131 COMP S +1647+15 S HER +1647-39 V1033 SCO +1648-29 V840 OPH +1648-30A CL SCO +1648-30B EQ SCO +1648-30C HK SCO +1648-30D HL SCO +1648-32 SS SCO +1648-36 AK SCO +1648-44 RS SCO +1649-30 V380 SCO +1649-30B HN SCO +1650+07 V970 OPH +1650+07B 116 COMP W +1650+39 MARK 501 +1650-30 RR SCO +1650-30B CM SCO +1650-30C 99 COMP E +1651+49 AI HER +1651+77 RW UMI +1651-30 EV SCO +1651-33 RV SCO +1652+09 KAPPA OPH +1652-02 SS OPH +1652-02B 93 COMP SW +1653+22 MV HER +1653-12 V841 OPH +1653-13 V854 OPH +1654+04 V855 OPH +1654+12 V440 OPH +1654+35 HZ HER +1654-12 PR OPH +1654-54 T ARA +1655-48 GX 339-4 +1656+31 RV HER +1656+31B 101 COMP S +1656+31C 118 COMP W +1656-36 RT SCO +1657+22 SY HER +1657+52 WZ DRA +1658-11 YZ OPH +1659+05 TX OPH +1659+35 NSV 8159 +1659-12 UX OPH +1659-26 BF OPH +1700-33 V455 SCO +1700-35 V956 SCO +1700-43 V992 SCO +1701-31 TU SCO +1701-32 FQ SCO +1702+17 VY HER +1702+24 V934 HER +1702-15 R OPH +1702-15B 92 VAR? SW +1702-15C VAR? SW +1702-17 HEN 1341 +1702-25 V2051 OPH +1702-61 SZ ARA +1703-27 CSV 2979 +1703-33 V461 SCO +1703-86 Z OCT +1704-32 AH SCO +1705+18 BG HER +1705-29 V2214 OPH +1705-33 V465 SCO +1705-58 V499 ARA +1705-62 CW ARA +1706+27A RT HER +1706+27B CX HER +1707+08 V447 OPH +1707+16 V463 HER +1707+40 V939 HER +1707+64 TV DRA +1707-28 V516 OPH +1707-29 KM OPH +1707-65 NSV 8383 +1708-33 RW SCO +1709+33 V795 HER +1709-28 V517 OPH +1709-32 V727 SCO +1709-75 DT APS +1710+11 V438 OPH +1710+14 ALPHA HER +1710+36 UW HER +1710-37 V470 SCO +1711+04 UY OPH +1711+49 PG1712+493 +1711+57 TT DRA +1711+57B 79 COMP NE +1711+57C 93 COMP NE +1711+57D VAR? NE +1711-32 V473 SCO +1712+24 V360 HER +1713-51 RY ARA +1713-63 DR ARA +1714+01 Z OPH +1714+01B 86 COMP SW +1714+02 V2113 OPH +1714+08 V744 OPH +1714-26 V2264 OPH +1715+07 V746 OPH +1715+41 V825 HER +1715+43 V818 HER +1715+60 VW DRA +1715-45 V636 SCO +1715-63 EH ARA +1716+22 FO HER +1716+24 CSV 3127 +1717+07 UZ OPH +1717+07B VAR? NE +1717+14 AG OPH +1717+23 RS HER +1717+23B VAR? E +1717+23C V478 HER +1717+27 V393 HER +1717-12 RY SER +1718+15 BI HER +1718-14 SS SER +1718-24 BB OPH +1718-24B V2109 OPH +1718-43 SW SCO +1719+04A V759 OPH +1719+04B VAR S +1719+04C VAR? N +1719+04D VAR? NW +1719-23 V2295 OPH +1719-35 V478 SCO +1719-47 AN ARA +1720-21 V906 OPH +1720-43 LR SCO +1720-63 EV ARA +1720-63B SUSP ARA +1721+03 VV OPH +1721+46 WW HER +1721-02 V453 OPH +1721-10 SW SER +1721-46 AQ ARA +1721-63 FG ARA +1722+04 VW OPH +1722-46 AR ARA +1723-19 TW OPH +1723-42 MM SCO +1723-46 AT ARA +1723-64 RV ARA +1724-33 V482 SCO +1724-33B V965 SCO +1724-86 S OCT +1724-86B 130 COMP N +1725+02 V767 OPH +1725+50 OT+546 HER +1725+83 Y UMI +1725-46 AX ARA +1725-62 FV ARA +1726+10 V1063 OPH +1726+18 UZ HER +1726+83 FBS1719+83 +1726-16 V442 OPH +1726-19 N OPH 98 +1726-32 V731 SCO +1726-46 AY ARA +1727+06 V772 OPH +1727-47 AZ ARA +1727-56 GH ARA +1728+09A RU OPH +1728+09B VAR? NE +1728+26 LU HER +1729+03 VZ OPH +1729+23 GP HER +1729-19 V2313 OPH +1729-45 V993 SCO +1730-32 V449 SCO +1730-47 BF ARA +1731-35 V1037 SCO +1731-45 V728 SCO +1731-63 GU ARA +1731-63B GV ARA +1731-63C SUSP ARA +1732+18 FR HER +1732+23 V503 HER +1732+54 SY DRA +1732-22 V794 OPH +1732-62A GZ ARA +1732-62B HH ARA +1733-32 V862 SCO +1733-43 NV SCO +1733-45 BI ARA +1733-47 AE ARA +1734-11 RT SER +1734-32 BM SCO +1734-57 V PAV +1735+57 TY DRA +1735-32 V703 SCO +1735-34 V721 SCO +1735-43 RU SCO +1736+46 NSV 9501 +1736-43 TV SCO +1737-22 V2110 OPH +1737-35 KP SCO +1737-58 TW PAV +1738+13 BS 6600 +1738+17 AL HER +1738+23 V660 HER +1738-06 XX OPH +1738-27 V3892 SGR +1739-18 SZ SGR +1740+21 CF HER +1740+21B STAR NE +1740-18 VAR SGR +1740-35 SX SCO +1740-52 RZ ARA +1740-52B V338 ARA +1740-58 RZ PAV +1741+82 FBS1735+82 +1741-27 X SGR +1741-35 SV SCO +1741-36 FZ SCO +1741-36B V707 SCO +1741-62 W PAV +1742+50 SAO 30548 +1742-18 V3888 SGR +1742-23 V753 SGR +1742-62 UV PAV +1743+26 BK HER +1743-35 V396 SCO +1743-35B V723 SCO +1743-57 SY PAV +1744+22 SU HER +1744+22B 102 COMP N +1744+22C 111 COMP E +1744-06 RS OPH +1744-06B 120 COMP N +1744-20 V1172 SGR +1744-27 V759 SGR +1744-33 RY SCO +1744-34 V709 SCO +1745+06 V380 OPH +1745-28 KW SGR +1745-32 V977 SCO +1745-35 V407 SCO +1745-35B V382 SCO +1745-35C V720 SCO +1745-51 U ARA +1745-51B 86 COMP S +1746+06 V381 OPH +1746+45 V337 HER +1746-14 LW SER +1746-17 V4334 SGR +1746-31 V744 SCO +1747+07 V564 OPH +1747+48 V744 HER +1747-02 V533 OPH +1747-06 Y OPH +1747-29 V4092 SGR +1747-30 N SCO 97 +1747-34 V711 SCO +1747-34A SY SCO +1747-34B BN SCO +1747-34C V420 SCO +1748-33 CR SCO +1748-33B V745 SCO +1748-34 TX SCO +1748-51 PQ ARA +1749-28 V781 SGR +1749-29 97-BLG-56 +1749-31 N SCO 98 +1749-33 AI SCO +1750+07 RW OPH +1750+18 SN 1998BP +1750-31 V960 SCO +1750-33 V715 SCO +1751+03 SV OPH +1751+03B COMP F +1751+11 RT OPH +1751+26 V441 HER +1751-14 MU SER +1751-28 V990 SGR +1751-34 V716 SCO +1752+04 NSV 9910 +1752+05 V389 OPH +1752-28 V3889 SGR +1752-29 V4338 SGR +1752-36 V1275 SGR +1753+29 AU HER +1753+42 AQ HER +1753+45 OP HER +1753-25 VAR SGR +1753-27 V999 SGR +1753-29 V735 SGR +1753-30 V787 SGR +1753-32 V4135 SGR +1753-34 FT SGR +1753-34B FL SGR +1753-39 V394 CRA +1753-50 KT ARA +1754+04 V395 OPH +1754+23A FU HER +1754+23C 128 COMP N +1754+23D STAR NW +1754+58A T DRA +1754+58B UY DRA +1754+58C 131 COMP W +1754-34A FU SGR +1754-34B V551 SGR +1755+04 V2048 OPH +1755+05 V569 OPH +1755+19 RY HER +1755+23 WY HER +1755+54 UW DRA +1755-04 SAO 142012 +1755-26 KY SGR +1755-35 V384 SCO +1756+19 BL HER +1756+54 V DRA +1756-23 V1950 SGR +1756-50 LM ARA +1757+18 WZ HER +1757+18B V884 HER +1757-23 V1951 SGR +1757-24 SV SGR +1757-26 AT SGR +1758+11 V2104 OPH +1758+66 NGC 6532 +1758-22 AV SGR +1758-29 W SGR +1758-32 V1783 SGR +1758-39 W CRA +1759+04 V2335 OPH +1759-27 V1573 SGR +1759-31 V1012 SGR +1759-38 RR CRA +1800+28 EX HER +1800-27 V1014 SGR +1800-28 V737 SGR +1800-36 V615 SGR +1800-37 GG CRA +1800-38 PS CRA +1800-54 KY ARA +1801+22 RW HER +1801+31 FG HER +1801-22 N SGR 89 +1801-35 V617 SGR +1801-36 V618 SGR +1801-37 GR CRA +1801-37B GM CRA +1802+20A DE HER +1802+20B DF HER +1802+20C VAR? W BSF +1802+20D 117 COMP W +1802+39 VW HER +1802-22 VX SGR +1802-32 V1015 SGR +1802-34 V630 SGR +1802-37 WX CRA +1802-37A GU CRA +1802-37B GY CRA +1802-43 TT CRA +1803+05 V426 OPH +1803+28 OMI HER +1803+31 VAR61 HER +1803+46 NSV 10240 +1803-25 V4157 SGR +1803-36 FX SGR +1803-38 V335 CRA +1803-41 V416 CRA +1803-42 V417 CRA +1803-63 R PAV +1804+38 PR HER +1804+41 V566 HER +1804+42 V529 HER +1804+45 DQ HER +1804+45B 107 COMP S +1804+67 EX DRA +1804-26 V1280 SGR +1804-28 V2506 SGR +1804-36A V653 SGR +1804-36B V655 SGR +1804-38 V343 CRA +1804-42 TW CRA +1805+18 XZ HER +1805+18B VAR? E +1805+18C 136 COMP W +1805+18D 112 COMP E +1805+18E VAR? NW +1805+18F STAR SW +1805+31 T HER +1805+31B VAR? E +1805+65 W DRA +1805-14 UZ SER +1805-14B 126 COMP S +1805-29 AO SGR +1805-36 V725 SGR +1805-36B VAR? SGR +1806+66 X DRA +1806-11 AS 289 +1806-27 V1577 SGR +1806-29 V4327 SGR +1806-30 V739 SGR +1807+18 NQ HER +1807+27 IRAS18095+ +1807+31 OTS1809+31 +1807+69 3C 371 DRA +1807-23 AP SGR +1807-25 V3795 SGR +1807-27 V1830 SGR +1807-27B V1953 SGR +1807-31 V1175 SGR +1807-32 V4160 SGR +1807-42 Y CRA +1807-54 AY TEL +1807-56 AZ TEL +1808-27 V2293 SGR +1808-29 VZ SGR +1808-29B V2756 SGR +1808-29C V1581 SGR +1808-37 AL CRA +1808-42 V426 CRA +1809+11 V849 OPH +1809-00 FG SER +1809-00B AZ SER +1809-23 V1583 SGR +1809-27 V2323 SGR +1809-29 V1582 SGR +1809-30 V4074 SGR +1809-35 V2838 SGR +1809-65 DF PAV +1810+00 V498 OPH +1810+10 V406 OPH +1810+20 YY HER +1810+20B 118 COMP W +1810+31 TV HER +1810+31B 126 VAR? E +1810-00 BB SER +1810-29 V1585 SGR +1810-36 GI SGR +1810-42 V387 CRA +1810-43 V427 CRA +1810-56 VV TEL +1810-66 AR PAV +1811+03 RY OPH +1811+03B 113 VAR? W +1811+36 W LYR +1811+36B KAPPA LYR +1811+36C 87 COMP SE +1811+36D 94 COMP W +1811+36E 112 COMP S +1811+36F 108 COMP E +1811+36G STAR SW +1811+36H 78 COMP NE +1811+41 V533 HER +1811+41B VAR NORTH +1811-19 WZ SGR +1811-23 FM SGR +1811-28 V2905 SGR +1811-41 V543 CRA +1811-46 RS TEL +1811-46B NSV 10529 +1811-46C VAR? SE +1812+36 HU LYR +1812-25A V506 SGR +1812-25B V507 SGR +1812-36 LM SGR +1812-36B LL SGR +1813+06 BC OPH +1813+17 IQ HER +1813+34 HX LYR +1813+40 TX LYR +1813+46 HI LYR +1813+49 AM HER +1813-24 V4065 SGR +1813-24B OB SUSPECT +1813-25 V1016 SGR +1814+06 AY OPH +1814+31 AO LYR +1814-41 V430 CRA +1814-56 HD 168476 +1814-61 XI PAV +1815+12 V450 OPH +1815+12B VAR? NW +1815+22 AA HER +1815+24 V632 HER +1815+50 DV DRA +1815-16 V4029 SGR +1815-16B V4030 SGR +1815-18 Y SGR +1815-24 V1860 SGR +1815-25 V4028 SGR +1815-25A V441 SGR +1815-25B V511 SGR +1815-25C XZ SGR +1815-27 N SGR 98 +1815-31 V3804 SGR +1815-55 WW TEL +1816+04 V915 OPH +1816+31 TU LYR +1816+31B 111 COMP N +1816-25 GO SGR +1816-27 WW SGR +1816-55 WY TEL +1817+04 DI SER +1817+30 TV LYR +1817+38 V391 LYR +1817-04 LANNING 17 +1817-12 FR SCT +1817-18 V4361 SGR +1817-23 V4171 SGR +1817-27 V1978 SGR +1817-28 V4169 SGR +1817-30 AZ SGR +1817-33 LN SGR +1817-33B V1869 SGR +1817-45A V576 CRA +1817-45B V581 CRA +1817-56 RZ TEL +1817-76 VV OCT +1818+15 SN 1998V +1818+23 V443 HER +1818+23B 118 COMP N +1818+28 AZ HER +1818+28B VAR? NE +1818+28C 113 COMP N +1818+46 MX LYR +1818+50 EO DRA +1818+59 RU DRA +1818-12 V376 SCT +1818-16 V355 SGR +1818-24 GU SGR +1818-30 V1872 SGR +1819+05 DK SER +1819+18 DG HER +1819-16 XX SGR +1819-23 V1658 SGR +1819-25 V4019 SGR +1819-28 V4018 SGR +1819-29 V3941 SGR +1819-33 V1874 SGR +1819-53 BG TEL +1820+11 V578 OPH +1820+38 NSV 10756 +1820+39 TW LYR +1820+39B IR LYR +1820-21 V1984 SGR +1820-27 BS SGR +1821+03 V988 OPH +1821+11 V2204 OPH +1821+31 IS LYR +1821+72 RT DRA +1821-27A LP SGR +1821-27B V1988 SGR +1821-27C V3928 SGR +1821-33 RV SGR +1821-34 V1883 SGR +1822+00 D SER +1822+03 HD 170137 +1822+05 BL SER +1822+15 NSV 10836 +1822+23 3C 379 +1822+24 SV HER +1822+31 IT LYR +1822+69 AP DRA +1822-21 HS SGR +1822-27 LQ SGR +1822-33 V1884 SGR +1822-62 NU PAV +1823+06 T SER +1823+50 CZ DRA +1823-11 TX SCT +1823-27 V1994 SGR +1823-56 SS TEL +1824+11 V602 OPH +1824-16 SS SGR +1824-17 V4362 SGR +1824-24 V3890 SGR +1825+02 FH SER +1825+32 IX LYR +1825-22 V1677 SGR +1825-29 V1017 SGR +1825-29B LR SGR +1825-32 V2572 SGR +1825-33 V934 SGR +1825-34 V910 SGR +1825-54 YY TEL +1826+04 TY OPH +1826+06 BI OPH +1826+21 AC HER +1826+37 KL LYR +1826-09 VW SCT +1826-19 U SGR +1826-22 V2002 SGR +1827-20 V4049 SGR +1827-20A V3876 SGR +1827-20B V1907 SGR +1827-20C V1683 SGR +1827-25 V1905 SGR +1827-32 V911 SGR +1828+03 AG SER +1828+36 T LYR +1828-26 V4077 SGR +1829+16 DS HER +1829+16B VAR? HER +1829+18 TAV1831+19 +1829+22 V774 HER +1829+25 BM HER +1829+42 OP LYR +1829-13 FV SCT +1829-30 IW SGR +1830+24A CH HER +1830+24B 161 COMP S +1830+24C 122 VAR? N +1830+32 KZ LYR +1830-18 V3645 SGR +1830-36 V942 SGR +1830-37 BP CRA +1831+25 BN HER +1831+38 LL LYR +1831+38B VAR A +1831+38C VAR B +1831+38D 107 COMP E +1831+38E 136 COMP E +1831+46 SZ LYR +1831+49A SV DRA +1831+49B NSV 11055 +1831+51 BY DRA +1831-30 V947 SGR +1831-71 ZETA PAV +1832+24 CI HER +1832+25 RZ HER +1832+27 CE LYR +1832-06 EW SCT +1832-08 Y SCT +1832-23 V4021 SGR +1832-36 V742 SGR +1832-57 BG PAV +1833+08 X OPH +1833+08B VAR? NE +1833+11 V2303 OPH +1833-20 V1702 SGR +1833-81 TY OCT +1834+11 V2303 OPH +1834+39 XY LYR +1834+39B 63 COMP SE +1834-06 XX SCT +1834-20 KO SGR +1834-23 V348 SGR +1834-23B V2023 SGR +1834-37A U CRA +1834-37E AM CRA +1834-57 BD PAV +1835+31 LT LYR +1835-04 RR SCT +1835-06 CK SCT +1835-37 V693 CRA +1836+32 CM LYR +1836+66 CSV 4305 +1836-04 RU SCT +1836-04B TY SCT +1836-09 DELTA SCT +1836-20 V1707 SGR +1836-22 V1927 SGR +1836-22B V349 SGR +1836-38 V446 CRA +1836-45 RW TEL +1837+00 HK AQL +1837+28 SY LYR +1837+31 EY LYR +1837-05 Z SCT +1837-19 V3879 SGR +1837-21 V1930 SGR +1837-21B V1710 SGR +1838+30 VX LYR +1838-07 SS SCT +1838-21 MV SGR +1838-21B VAR? W +1838-23 KV SGR +1838-37 V644 CRA +1838-38 RT CRA +1839+15 V827 HER +1839+22 AE HER +1839+22B VAR E +1839+22C VAR? NE +1839+35 AX LYR +1839+35B FM LYR +1839+36 HK LYR +1839-20 V350 SGR +1839-38 CD CRA +1840+07 RZ OPH +1840+08 T AQL +1840+12 QX HER +1840+23A DW HER +1840+23B VAR? NW +1840+40 MP LYR +1840+74 RS DRA +1840-06 GL SCT +1840-08 V368 SCT +1840-38 V CRA +1841+12 V838 HER +1841+12B BB HER +1841+34 RY LYR +1841+37 AY LYR +1841+37B VAR? SE +1841+37D 142 COMP E +1841+37E STAR W +1841+43 V344 LYR +1841-05 N? SCT 81 +1841-08 V444 SCT +1841-22 V1939 SGR +1841-25 V522 SGR +1842+10 V474 AQL +1842+12 KZ HER +1842+36 SV LYR +1842+43 RW LYR +1842-02 AB AQL +1842-05 R SCT +1842-05B 56 COMP NE +1842-12 V SCT +1842-20 MWC 960 +1842-22 NT SGR +1843+00 V603 AQL +1843+19 MZ HER +1843-16 YZ SGR +1843-20 NW SGR +1843-23 V1216 SGR +1843-62 LAMBDA PAV +1844-06 V443 SCT +1844-08 S SCT +1844-08B 82 COMP E +1844-08C 95 COMP NE +1844-10 RT SCT +1844-21 V4332 SGR +1844-38 V384 CRA +1845+53 BZ DRA +1845-20 BB SGR +1845-38 AA CRA +1846+28 CV LYR +1846+33 BETA LYR +1846-01 CI AQL +1846-38 UZ CRA +1846-67 KAPPA PAV +1847+12 LO HER +1847-24 OQ SGR +1848+11 VW AQL +1848+26 CY LYR +1848+33 HM LYR +1848+48 TU DRA +1848-19 FN SGR +1848-19B V4368 SGR +1848-19C NSV 11479 +1848-31 V1223 SGR +1849+10 V913 AQL +1849+29 HR LYR +1849-16 UX SGR +1849-19 V2070 SGR +1850+27 BE LYR +1850+32 RX LYR +1850+36 SU LYR +1850+36B 114 COMP E +1850+40 WY LYR +1850-03 EL AQL +1850-04 EU SCT +1850-07 V373 SCT +1850-08 T SCT +1851+10 V800 AQL +1851+29 SW LYR +1851+31 SX LYR +1851+32 FF LYR +1851+36 DELTA2 LYR +1851-10 RW SCT +1852+00 UW AQL +1852+06 V840 AQL +1852+13 V446 HER +1852+43 R LYR +1852+51 BG DRA +1852-00 V493 AQL +1852-28 - SGR +1853+16 EU AQL +1853+17 FF AQL +1853+28 BI LYR +1853+31 OQ LYR +1853-05 FS SCT +1853-23 AR SGR +1854+14 UV AQL +1854+30 DM LYR +1854+31 DL LYR +1854-01 VX AQL +1854-37A S CRA +1854-37B TY CRA +1855+30 BK LYR +1855-12A ST SGR +1855-37A R CRA +1855-37B T CRA +1856+00 V336 AQL +1856+34 Z LYR +1856+42 V358 LYR +1856-04 V604 AQL +1856-13 V1059 SGR +1856-17 DW SGR +1857+37 RT LYR +1857+37B 120 COMP W +1857+37C 105 COMP N +1857-07 VY AQL +1857-17 V919 SGR +1857-22 SU SGR +1858+12 V915 AQL +1858+25 BL LYR +1858+42 V493 LYR +1858-51 BL TEL +1859+01 SZ AQL +1859+16 V1413 AQL +1859+33 V494 LYR +1859+47 WZ LYR +1859-05 V AQL +1859-46 RX TEL +1900+17A V338 AQL +1900+17B V807 AQL +1900+17C VAR? SW +1900+21 QV VUL +1900+21B VAR? NW +1900+27 BM LYR +1900-01 V1425 AQL +1901+08 R AQL +1901+08B VAR S +1901+08C 88 COMP SE +1901+08D 95 COMP SS +1901+08E 107 COMP N +1901+08F 76 COMP NW +1901+08G STAR SW +1901+08H 78 COMP NW +1901+08I 79 COMP NW +1901+08J 85 COMP W +1901+08K 85 COMP SW +1901+08L 126 COMP S +1901+08M 66 COMP NW +1901+08N KKA SUSP +1901+27 UU LYR +1901-29 AG SGR +1902+07 V844 AQL +1902+10 V841 AQL +1902+31 BP LYR +1903+01 TT AQL +1903+17 SV SGE +1903+17B 94 COMP N +1903+29 DW LYR +1903+33 AB LYR +1903+34 AD LYR +1903-17 V1089 SGR +1903-50 SN 1998DQ +1904+10 FM AQL +1904+30 XZ LYR +1904+39 V398 LYR +1904+43 MV LYR +1904+43B VAR? SW +1904+43C NSV 11753 +1904+43D 129 COMP S +1904+43E 129 COMP W +1904+43F 120 COMP E +1904-05 IR AQL +1904-20 V1157 SGR +1905+27 TY LYR +1905+27B 109 COMP S +1905+29A V LYR +1905+29B VZ LYR +1905+29C 96 COMP WW +1905+29D 92 COMP WW +1905+29E 92 COMP W +1905+30 BR LYR +1905+42 V363 LYR +1905+52 CG DRA +1906+04 V1343 AQL +1906+27A UV LYR +1906+27B FK LYR +1906+27C GZ LYR +1906+29 V419 LYR +1906+43 ST LYR +1906-19 V353 SGR +1907+01 KQ AQL +1907+01B V351 AQL +1907+03 FN AQL +1907+22 RT VUL +1907+28 UW LYR +1907+29 EE LYR +1907+38 EG LYR +1907+38B EF LYR +1907-21 TW SGR +1907-33 V2408 SGR +1908+01 V1419 AQL +1908+02 V842 AQL +1908+32 V369 LYR +1908-17 TX SGR +1908-18 RX SGR +1908-19A RW SGR +1908-19B BH SGR +1909+04 XY AQL +1909+04B VAR B +1909+04C VAR A +1909+12 V1315 AQL +1909+25 S LYR +1909+26 X LYR +1909+30 BT LYR +1909+31 EL LYR +1909+33 RS LYR +1909+41 RU LYR +1909+65 SZ DRA +1909+67 U DRA +1909-00 IV AQL +1909-07 TY AQL +1909-31 V344 SGR +1910+00 V354 AQL +1910+27 AI LYR +1910+33B WW LYR +1910+38 NSV 11839 +1910+46 SS LYR +1910+46 SS LYR +1910+46B 136 COMP N +1910-07 W AQL +1910-08 WW AQL +1910-17 T SGR +1910-19 R SGR +1910-19B VAR W +1910-33 RY SGR +1910-33B 102 CMP EE +1910-39 RU CRA +1911+03 V1378 AQL +1911+62 AD DRA +1911-00 FO AQL +1911-17 AL SGR +1911-24 TY SGR +1911-24B 136 COMP S +1912+00 V355 AQL +1912+01 V356 AQL +1912+04 V1301 AQL +1912+21 CG VUL +1912+27 V473 LYR +1912+37 NSV 11873 +1912-00 FP AQL +1913+01 V605 AQL +1913+30 V433 LYR +1913+50 TZ CYG +1913-16 V1942 SGR +1913-19 S SGR +1913-21 Z SGR +1913-31 SW SGR +1913-33 V345 SGR +1914+00A CY AQL +1914+00B V528 AQL +1914+00C V529 AQL +1914+03 ER AQL +1914+27 EP LYR +1914+42 HN LYR +1914-31 V3955 SGR +1915+17 W SGE +1915+19A NX SGE +1915+19B OO SGE +1915+28 PW LYR +1915+29 PX LYR +1915+29B 106 COMP N +1915+29C VAR? E +1915+32 AM LYR +1915-00 V606 AQL +1915-01 V530 AQL +1915-04 TAV1918-04 +1915-50 NT TEL +1916+19 OO VUL +1916+29A AV CYG +1916+29B V1105 CYG +1916+37 U LYR +1916+40 ER LYR +1916+41 HO LYR +1916-00 V358 AQL +1916-28 V730 SGR +1916-32 AM SGR +1917+17 T SGE +1917+19 OR VUL +1917+29 DV CYG +1917+42 NSV 11944 +1918+02 V1370 AQL +1918+02B VAR W +1918+05A EM AQL +1918+06B V531 AQL +1918+19A OX VUL +1918+19B OW VUL +1918+26 IP VUL +1918+29 V1254 CYG +1918+31 AN LYR +1919+03 FU AQL +1919+04 V1229 AQL +1919+04B 126 COMP E +1919+24 V335 VUL +1919+26 IQ VUL +1919+28 DW CYG +1919-20 TT SGR +1920+02 - AQL +1920+19 OZ VUL +1920+28 V1114 CYG +1920+29 BF CYG +1920+29B VAR? E +1920+29C VAR? NW +1920+29E 125 COMP N +1920+41 FP LYR +1920+52 V1113 CYG +1920-10 DH AQL +1920-10B STAR B +1921+07 V368 AQL +1921+21 WW VUL +1921+21B 110 COMP N +1921+50 CH CYG +1921+50B VAR? NE +1921+50C KIS SUSP 1 +1921+50D KIS SUSP 2 +1921+50E KIS SUSP 3 +1921+50F KIS SUSP 4 +1921+50G 86 COMP SE +1921+50H KIS SUSP 5 +1921+50I KIS SUSP 6 +1921+50J KIS SUSP 7 +1921+50K 74 COMP SE +1921-18 AN SGR +1922+01 TU AQL +1922+02 V370 AQL +1922+11 V1302 AQL +1922+11B IRC 10420 +1922+27 PW VUL +1922+42B 6.2 COMP +1923+04 DM AQL +1923+29 FK CYG +1923+31 DZ CYG +1923+33 FL CYG +1923+42 HQ LYR +1923+59 SCHWARTZ * +1924+20 NQ VUL +1924+32 HH CYG +1924+54 USNO 1425 +1924+71 YZ DRA +1924-07 U AQL +1925+01 GH AQL +1925+02 NVS 12088 +1925+03 V923 AQL +1925+28 V868 CYG +1925+28B V1505 CYG +1925+42 V1504 CYG +1925+45 AW CYG +1925+76 UX DRA +1926+02 GI AQL +1926+29A FM CYG +1926+29B FN CYG +1926-06 DO AQL +1927+01 GL AQL +1927+33 V792 CYG +1927+34 DD CYG +1927+45 AF CYG +1927+45B 76 COMP SE +1927+49 V1123 CYG +1927-16 V3790 SGR +1927-53 SN 1998BW +1928+03 V1294 AQL +1928+04 V1293 AQL +1928+05 V450 AQL +1928+31 V1125 CYG +1928+43 UV CYG +1928+47 VAR? CYG +1928+50 SAO 31729 +1928-16 AQ SGR +1929+14 KX AQL +1929+28 TY CYG +1929+28B HN CYG +1929+30 FQ CYG +1929+33 V793 CYG +1929+36 HM CYG +1929+48 V390 CYG +1929-07 V1414 AQL +1930+14 EY AQL +1930+23 V336 VUL +1930+30 HR CYG +1930+31 V795 CYG +1930+38 HQ CYG +1931+10B LO AQL +1931+29 EG CYG +1931+53 TAV1933+53 +1932+02 V1141 AQL +1932+20 U VUL +1932+22 CN VUL +1932+27 EH CYG +1932+34 FS CYG +1932+39 HS CYG +1933+00 V419 AQL +1933+11 RT AQL +1933+12A LR AQL +1933+12B LS AQL +1933+28 V368 CYG +1933+46 CTM3 CYG +1934+08A EZ AQL +1934+08B 113 VAR? E +1934+11A SV AQL +1934+11B LW AQL +1934+12 V1289 AQL +1934+17 HS SGE +1934+28 BG CYG +1934+28B 103 COMP E +1934+28C 101 COMP S +1934+28D 116 COMP S +1934+30 EM CYG +1934+30B 140 COMP N +1934+30C 126 COMP N +1934+31 HT CYG +1934+38 V1266 CYG +1934+48 V927 CYG +1934+49 R CYG +1934+49B NSV 12218 +1934+56 NSV 12220 +1935+09 RV AQL +1935+09B VAR? NE +1935+09C 119 COMP N +1935+11 MN AQL +1935+12 LY AQL +1935+22 CL VUL +1935+30 V930 CYG +1935+50 NSV 12247 +1935-03 GV AQL +1936+01A DT AQL +1936+01B V400 AQL +1936+11 MS AQL +1936+28 HY CYG +1936+31 HV CYG +1936+32 HW CYG +1936+33A HX CYG +1936+43 V462 CYG +1936-03 CG AQL +1937+01 V890 AQL +1937+11 V925 AQL +1937+13 MU AQL +1937+16 HM SGE +1937+16B - SGE +1937+21 FY VUL +1937+31 FU CYG +1937+32 TT CYG +1937+32B 69 COMP NE +1937-10 NGC 6814 +1938+13 MW AQL +1938+18 CV SGE +1938+22 CM VUL +1938+38C V946 CYG +1938+48 V391 CYG +1939+31 FW CYG +1939+34 IM CYG +1939+34B V1990 CYG +1939+35 IL CYG +1939+54 V369 CYG +1939+55 V1351 CYG +1939-11 DX AQL +1939-72 T PAV +1940+04 NO AQL +1940+27 YZ VUL +1940+29 SU CYG +1940+32 V1991 CYG +1940+33 SAO 68764 +1940+34 IN CYG +1940+39 FX CYG +1940+48 RT CYG +1940+48B 103 VAR? E +1940+48C STAR NE +1940+67 ZZ DRA +1940-42 V3885 SGR +1941+18 QW SGE +1941+27 AH VUL +1941+28 LU VUL +1941+30 V977 CYG +1941+31A EQ CYG +1941+31C FY CYG +1941+34 IP CYG +1941+35 V1285 CYG +1941+40 V973 CYG +1941-11 DY AQL +1942+12 NW AQL +1942+16 UV SGE +1942+19 RZ VUL +1942+22 BR VUL +1942+27 AI VUL +1943+11 NY AQL +1943+11B RY AQL +1943+17 AB SGE +1943+26 LV VUL +1943+26B VAR? SE +1943+27 CK VUL +1943+32 IQ CYG +1943+35 V686 CYG +1943+48 TU CYG +1943+49 CS CYG +1943-07 GX AQL +1943-50 W TEL +1944+12 ST AQL +1944+14 OQ AQL +1944+15A OR AQL +1944+15B OS AQL +1944+15C OT AQL +1944+18A AC SGE +1944+18B AE SGE +1944+18C AF SGE +1944+27 S VUL +1944+36A V811 CYG +1944+36B V1152 CYG +1944+36C STAR NW +1944+42 V1154 CYG +1944-07 GY AQL +1945+29 V1995 CYG +1945+32 NSV 12439 +1945+41 XY CYG +1945+42 DF CYG +1945+42B 126 VAR? S +1946+02 V553 AQL +1946+04 X AQL +1946+12A SW AQL +1946+12B SX AQL +1946+13 TW AQL +1946+14A OW AQL +1946+14B OX AQL +1946+14C 101 COMP N +1946+14D 115 COMP W +1946+18 RU SGE +1946+32 CHI CYG +1946+32B VAR? SW +1946+32C 12M STAR W +1946+32D 116 COMP S +1946+35 CI CYG +1946+52 V697 CYG +1946-11 V1162 AQL +1946-59 S PAV +1947+00 ETA AQL +1947+08 V500 AQL +1947+16 WY AQL +1947+16B RV SGE +1947+19 DO VUL +1947+27 SV VUL +1947+31 ET CYG +1947+32 EU CYG +1947+38 FZ CYG +1947+38B NT CYG +1947+38C V1509 CYG +1947+38E 125 COMP S +1947+58 V542 CYG +1948+02 V345 AQL +1948+12 PQ AQL +1948+18 RW SGE +1948+20 S10943 +1948+22 NS VUL +1948+34 V480 CYG +1948+38C NW CYG +1948+38E V1252 CYG +1948+38F 125 COMP S +1948-77 UU OCT +1949+09 RZ AQL +1949+12 V425 AQL +1949+17A Y SGE +1949+17B SW SGE +1949+17C AN SGE +1949+17D AO SGE +1949+18B SX SGE +1949+29 EV CYG +1949+31 IX CYG +1949+33 V449 CYG +1949+35 V1454 CYG +1949+36 AG CYG +1949+36B V465 CYG +1949+53 BS CYG +1949-29 RR SGR +1949-70 BQ PAV +1949-73 EPS PAV +1950+18 TT SGE +1950+32A EY CYG +1950+32B EY CYG N +1950+32C VAR? SE +1950+32D VAR? SW +1950+35 V1819 CYG +1950+35B 128 COMP W +1950+55 CU CYG +1950+55B CU CYG A +1950+55C CU CYG P +1950+55D 127 COMP N +1950+56 V392 CYG +1950+56B 105 COMP S +1951+06 V426 AQL +1951+10 V725 AQL +1951+14 V498 AQL +1951+16 S SGE +1951+21 DD VUL +1951+32 V468 CYG +1951+32B V467 CYG +1951+36A IZ CYG +1951+36B V1163 CYG +1951+56 V544 CYG +1951+66 BO DRA +1951-09 UU AQL +1951-11 V1407 AQL +1951-42 RU SGR +1952+17 AS SGE +1952+18 RX SGE +1952+19A RR SGE +1952+19B RS SGE +1952+39 V1165 CYG +1952-02 RR AQL +1952-02B STAR SE +1952-09 PX AQL +1952-11 CGSS 1175 +1952-39 V4140 SGR +1953+15 VY SGE +1953+16 RY SGE +1953+17 TV SGE +1953+17B AV SGE +1953+26 X VUL +1953+37 PX CYG +1953+39 V1016 CYG +1953+39B 103 COMP W +1953+39C V738 CYG +1953+39D V1169 CYG +1953+77 AB DRA +1953+77B 136 COMP N +1953-08 RS AQL +1953-08B VAR? SE +1953-08C 114 COMP E +1953-08D 144 COMP E +1953-57 RY PAV +1954+15 V429 AQL +1954+16 AW SGE +1954+16B AR SGE +1954+17 TW SGE +1954+32 KL CYG +1954+32B V1172 CYG +1954+34 V1357 CYG +1954+44 AX CYG +1955+10 PV AQL +1955+17 VZ SGE +1955+22 SW VUL +1955+33 V482 CYG +1955+37 QZ CYG +1955+51 CM CYG +1955+53A CQ CYG +1955+53B V476 CYG +1955+53C 124 COMP W +1956+15 V433 AQL +1956+35 KM CYG +1956+35B VAR? NW +1956+36 V698 CYG +1956+38 V337 CYG +1956+38B V338 CYG +1956-56 RR TEL +1957+16 VX SGE +1957+33 V485 CYG +1957+35 V1173 CYG +1957+39B GK CYG +1957+39C V417 CYG +1957+50 BT CYG +1957-70 GS PAV +1958+16 RZ SGE +1958+17 BH SGE +1958+19 TX SGE +1958+20A BF SGE +1958+20B BG SGE +1958+29 V1027 CYG +1958+35 V823 CYG +1958+42 V1675 CYG +1958+49 Z CYG +1958+51 CF CYG +1958+56 V1028 CYG +1958+56B 140 COMP N +1958-55 S TEL +1959+16 TY SGE +1959+17 BL SGE +1959+21A RV VUL +1959+21B RW VUL +1959+21C HU SGE +1959+37 V1303 CYG +1959+40 V452 CYG +2000+19 BM SGE +2000+20 X SGE +2000+33 CD CYG +2000+36 AA CYG +2000+40 GN CYG +2000+56 NSV 12759 +2000+56B V549 CYG +2000-27 V1943 SGR +2001+03 TX AQL +2001+17 NSV 12786 +2001+22 QQ VUL +2001+32 V550 CYG +2001+58 XX CYG +2001-56 BP TEL +2001-57 BR PAV +2002+09 HI AQL +2002+12 SY AQL +2002+33 V1363 CYG +2002+48 V394 CYG +2002+50 BU CYG +2002+50B VAR? SW +2002+50C 133 COMP E +2002+50D 98 COMP SE +2002-49 PKS2005-48 +2003+07 V1292 AQL +2003+17 WZ SGE +2003+17B 116 COMP W +2003+36 NSV 12819 +2003+57 S CYG +2003-17 2006-1725 +2003-60 X PAV +2004+35 V425 CYG +2004+58 V1514 CYG +2004+73 AQ DRA +2004-55 GX TEL +2005+25 W VUL +2005+36 V1624 CYG +2005+36B V402 CYG +2005+43 V395 CYG +2005+66 AA DRA +2005-00 EI AQL +2005-13 ST CAP +2005-14 R CAP +2006+18 EZ SGE +2006+35 RY CYG +2006+41 AY CYG +2006+47 SV CYG +2007+06 TV AQL +2007+06B 138 VAR? E +2007+06C 116 COMP N +2007+15A S AQL +2007+15B RW AQL +2007+15C VAR? N +2007+20 FG SGE +2007+20A ST SGE +2007+20C VAR? N +2007+20D VAR? E +2007+35A V429 CYG +2007+35B V430 CYG +2007+35C V492 CYG +2007+47 RX CYG +2007-47 R TEL +2008+12 RU AQL +2008+15 V1101 AQL +2008+36 KT CYG +2008+42 V1316 CYG +2008+66 NSV 12872 +2008-05 EK AQL +2008-14 TW CAP +2008-16 TU CAP +2008-22 W CAP +2008-44 RZ SGR +2009+04 WZ AQL +2009+16 R SGE +2009+16B 84 COMP W +2009+16C 86 COMP SW +2009+16D 81 COMP NW +2009+16E KIS SUSP S +2009+38 RS CYG +2009+38B 90 COMP SE +2009+38C 69 COMP NE +2009+38D 74 COMP SW +2009+38E 83 COMP SW +2009+38F 82 COMP SW +2009+49 AC CYG +2009+49B CX CYG +2009-06 Z AQL +2009-13 RX CAP +2009-60 SU PAV +2010+08 R DEL +2010+08B 97 COMP N +2010+36 V1664 CYG +2010+36B V1679 CYG +2011+30 SX CYG +2011-21 RT CAP +2011-39 RT SGR +2011-52 X TEL +2012+07 QZ AQL +2012+07B STAR ENE +2012+09 RU DEL +2012+09B 132 COMP N +2012+59 V786 CYG +2012-03 V794 AQL +2012-06 PY AQL +2013+26 CH VUL +2013+38 V1377 CYG +2013+76 SZ CEP +2013-16 AE CAP +2014+34 AU CYG +2014+37A P CYG +2014+37B WX CYG +2014+37C VAR SW +2014+37D 98 COMP E +2014+37E VAR NW +2014+37F 130 COMP N +2014+37G 111 COMP N +2014+37H 112 COMP E +2014+37I NSV 13007 +2014+52 V767 CYG +2015+20 V SGE +2015+20B VAR? SE +2015+20C VAR? SW +2015+20D * SAM +2015+20E 123 COMP N +2015+59 CN CYG +2015+59B VAR? N +2015+81 NSV 12920 +2016+20 NSV 13022 +2016+21 PU VUL +2016+46 V497 CYG +2016+47 U CYG +2016+47B VAR NW +2016+47C 100 COMP E +2016+79 BD CEP +2017+36B BI CYG +2017+37A BC CYG +2017+37B NSV 13034 +2017+49 LD 22 +2018+00 V865 AQL +2018+17 VW DEL +2018+40 V405 CYG +2018+40B V1654 CYG +2019+68 AC DRA +2019-44 V2276 SGR +2020+15 EZ DEL +2020+16 CM DEL +2020+33 V404 CYG +2020+38 V1322 CYG +2020+41 V1515 CYG +2021+12 RW DEL +2021+20 FW DEL +2021-28 T MIC +2021-52 KK TEL +2022+12 TV DEL +2022+14 WX DEL +2022+18 IO DEL +2022+27 QU VUL +2022+38 KY CYG +2022-28 RS MIC +2022-40 U MIC +2023+36 V441 CYG +2023+40 KZ CYG +2023+43 V503 CYG +2023+43B STAR A +2024+09 CT DEL +2024+10 XY DEL +2024+12 XZ DEL +2024+15 RS DEL +2024-40 SW MIC +2025+01 KN AQL +2025+09 RY DEL +2025+09B VAR SE +2025+10 NSV 13114 +2025+12 RX DEL +2025+12B VAR? NE +2025+39 RW CYG +2025+74 UU DRA +2025-56 TT IND +2026+11 RZ DEL +2026+16 IS DEL +2026-22 RU CAP +2026-45 TU IND +2027+32A AD CYG +2027+32B AI CYG +2027+52 V1974 CYG +2028+09 CZ DEL +2028+17 Z DEL +2028+17B AE DEL +2028+17C VAR SE +2028+17D 104 COMP E +2028+66 IN CEP +2029+02 V1330 AQL +2029+18 AG DEL +2029+19 NSV 13150 +2029+40 V1478 CYG +2029+46 SZ CYG +2029+54 ST CYG +2029+62 BF CEP +2030+07 TW DEL +2030+46 TV CYG +2030+46B V2015 CYG +2030+53 BV CYG +2031+19 LT DEL +2031+50 KPD 2032 +2031-30 RT MIC +2032+13 HO DEL +2032+22 SZ VUL +2032+25 TT VUL +2032+26 V VUL +2032+59 SN 6946 +2033+17B EU DEL +2033+26 BD VUL +2033+61 TAV2034+61 +2034+13 AN DEL +2034+19 EP DEL +2034+22A RU VUL +2034+22B TU VUL +2034+22C 97 VAR? NW +2034+22D 93 COMP S +2034+22E 89 COMP SW +2034+22F IL VUL +2034+49 V747 CYG +2034+59 V778 CYG +2034-29 R MIC +2034-70 MV PAV +2035+13 SS DEL +2035+13B AP DEL +2035+13C DN DEL +2035+13D DO DEL +2035+17 AO DEL +2035+37A FF CYG +2035+37B VAR? CYG +2035+37C VAR CYG +2035+37D VAR? SE +2035+37E VAR? NW +2035-01 AE AQR +2035-01B 112 COMP S +2035-01C 109 COMP E +2035-32 HD 196982 +2036+11 Y DEL +2036+16 AQ DEL +2036+18 SZ DEL +2037+17 NSV 13234 +2037+17B LU DEL +2037+18 HR DEL +2037+18B 104 COMP W +2037+19 NSV 13242 +2037+25 TY VUL +2037+34 HE2-468CYG +2038+16 S DEL +2038+16B VAR NW +2038+16C MEZ'S * +2038+18 LQ DEL +2038+20 UU VUL +2038+20B 116 COMP E +2038+35 V568 CYG +2038+38 V446 CYG +2038+47 V CYG +2038-11 MARK 509 +2038-32 AT MIC +2039+18 ES DEL +2039+20 BF VUL +2039+20B 128 COMP N +2039+35 X CYG +2039+37 DR CYG +2039+37B * E OF 112 +2039+42 DG CYG +2039-05 Y AQR +2039-31 AU MIC +2040+11 ST DEL +2040+16 T DEL +2040+16B NSV 13285 +2040+17 U DEL +2040+17B KP DEL +2040+44 NSV 13262 +2041+02 V AQR +2041+04 BR DEL +2041-04 W AQR +2042+31 GP CYG +2042+39 V1489 CYG +2042+44A RR CYG +2042+44B BZ CYG +2042+53 V1525 CYG +2042-15 U CAP +2043+18 V DEL +2043+34 T CYG +2043+41 V516 CYG +2043+45 CY CYG +2044+22 FI VUL +2044+31 AM CYG +2044+31B 117 COMP S +2044+67 NGC 7023 +2044-00 NSV 13326 +2044-05 T AQR +2044-75 RR OCT +2045+03 TX DEL +2045+15 DY DEL +2045+45 V1661 CYG +2046+14 DZ DEL +2046+50 V750 CYG +2047+14 AZ DEL +2047+27 T VUL +2047+31 AO CYG +2047+33 AN CYG +2047+35 V1329 CYG +2047+35B VAR? NE +2047-63 U PAV +2048+15 BB DEL +2048+22 RX VUL +2048+26 UW VUL +2048+35 V1330 CYG +2048+35B 104 VAR? E +2048+35C VAR? N +2048+43 V751 CYG +2048+46 RZ CYG +2048+46B V1395 CYG +2048-28 RX MIC +2049-54 S IND +2050+17 X DEL +2050+17B VAR? SW +2050+17C STAR SW +2050+17D 113 COMP E +2050+27 32 VUL +2050+28 BW VUL +2050+30A UX CYG +2050+30B AP CYG +2050+30C 99 VAR? S +2050+43 V348 CYG +2051+26 UY VUL +2051+44 V1711 CYG +2051-40 RY MIC +2052+15 NSV 13430 +2052+23 UZ VUL +2052+33 AQ CYG +2052+47 MWC 358 +2053+25 VW VUL +2053+30 AS CYG +2053+32 AT CYG +2053+39 VX CYG +2053-07 VV AQR +2053-15 AB CAP +2053-75 AO OCT +2054+35 V450 CYG +2054+46 AZ CYG +2055+13 SW DEL +2055+26 TAVJ2059+2 +2055+43 V1057 CYG +2055+43B 126 COMP E +2055+47 DH CYG +2055-01 VW AQR +2056+42 TX CYG +2056+47 V832 CYG +2056-27 RR CAP +2056-49 RZ IND +2057+22 NSV 13475 +2057+44 CO CYG +2057+49 V1331 CYG +2057+75 NSV 13442 +2057-82 T OCT +2058+30 DI CYG +2058+34 V523 CYG +2058+45 V407 CYG +2058-33 X MIC +2059+23A R VUL +2059+23B VZ VUL +2059+23C DY VUL +2100+33 GQ CYG +2100+36 GR CYG +2100+39 VY CYG +2100+42 V1059 CYG +2100+67 NSV 13489 +2100-34 Y MIC +2101+00 EV AQR +2101+29 TW CYG +2101+65 FX CEP +2101-01 TX AQR +2101-16 RS CAP +2101-24 V CAP +2102+30 DT CYG +2102+45 V1225 CYG +2102-21 X CAP +2103+31 CT CYG +2103+36 V1060 CYG +2103+36B V1804 CYG +2103+82 X CEP +2103-05 BK AQR +2103-40 AK MIC +2104+05 RR EQU +2104+08 Z EQU +2104+08B VAR? N +2104+15 TZ PEG +2104+29 V389 CYG +2104+36 V1062 CYG +2104+45 V358 CYG +2105+12 AM PEG +2105+25 DZ VUL +2105+26 WX VUL +2105+37 LD 42 +2105+47 V573 CYG +2105+58 UY CEP +2105+58B VAR? NE +2105+87 X UMI +2105+87B 11.6? UMI +2105-04 RS AQR +2105-16 Z CAP +2106+12 AN PEG +2106+30 V360 CYG +2106+46 V577 CYG +2106-09 VY AQR +2107+12 NEW UG PEG +2107-14 RX AQR +2107-53 W IND +2107-59 EUVEJ2115- +2108+12 R EQU +2108+18 AS PEG +2108+28 CZ CYG +2108+28B 119 VAR? E +2108+36 DU CYG +2108+36B 117 COMP N +2108+47 V1500 CYG +2108+47B 9.0 COMP +2108+68 T CEP +2108+68B NSV 13565 +2108+68C 75 COMP E +2108+68D SUSP KIS +2108+68E 71 COMP SW +2108+68F NSV 13560 +2109-02 BL AQR +2109-03 RR AQR +2109-43 RR MIC +2110+08 RV EQU +2110+08B T EQU +2110+13 EF PEG +2110+59 NSV 13609 +2111+37 V479 CYG +2111+43 V1554 CYG +2111-02 AC AQR +2113+07 RU EQU +2113-45 T IND +2114+23 NSV 13653 +2114+28 BB CYG +2114+45 V592 CYG +2115+41 BH CYG +2115+46 CE CYG +2115-70 Y PAV +2116+14 X PEG +2116+55 FZ CEP +2116+60 NSV 13656 +2116+62 ALPHA CEP +2116-14 CV AQR +2116-14B 127 VAR? E +2116-15 T CAP +2116-42 W MIC +2117+21 SW PEG +2117+31 V363 CYG +2117+61 LO CEP +2117-03 DL AQR +2117-41 V MIC +2118+00 RW AQR +2118+40 V1070 CYG +2118+41 YY CYG +2119-69 SX PAV +2120+37 V473 CYG +2120-30 S MIC +2120-30B 97 COMP NE +2121+77 GH CEP +2122+08 EG PEG +2122+16 TV PEG +2122+34 V1666 CYG +2123+62 SW CEP +2123-54 X IND +2124+17 AP PEG +2124+21 NSV 13740 +2124+59 NSV 13729 +2125+26 SN 1998EY +2125+30 GS CYG +2125+46 BK CYG +2125+54 NSV 13745 +2125+69 AX CEP +2125-03 VZ AQR +2125-03B 130 VAR? S +2126+10 UU PEG +2126+43 V1566 CYG +2126-42 CI GRU +2127+46 BL CYG +2127+70 BETA CEP +2128+75 EI CEP +2128-14 Y CAP +2129+02 WW AQR +2129+45 NSV 13784 +2129+53 NSV 13781 +2130+27 FZ PEG +2130+38 V1426 CYG +2130+45 RHO CYG +2130+48 V1081 CYG +2130-14 UU CAP +2131+39 V632 CYG +2131+39B STAR B E +2131+40 V630 CYG +2131+40B STAR S +2131+40C V1338 CYG +2132+31 AB CYG +2132+44 W CYG +2132+44B 66 COMP NE +2133+44 CP CYG +2133+67 NSV 13807 +2134+45 V1568 CYG +2134+47 V637 CYG +2134+57 GL CEP +2135+42 UU CYG +2135+44 V539 CYG +2136+02 S190 +2136+53 NSV 13832 +2136+56 GS 2138+56 +2136+78 S CEP +2136-48 RS GRU +2137+35 V460 CYG +2137+42 Q CYG +2137+48 V1251 CYG +2137+49 V410 CYG +2137+53 RU CYG +2137-53 Y IND +2138+22 VX PEG +2138+31A V1760 CYG +2138+31B VAR B CYG +2138+43 SS CYG +2138+43B V1668 CYG +2138+43C VAR? NW +2138+43D 123 COMP N +2138+43E 113 COMP E +2138+43F 114 COMP E +2138+43G 120 COMP W +2138+43H NSV 13834 +2138+43I 84 COMP NE +2138+43J OME'S * +2138+43K 80 COMP SE +2138+44 V1571 CYG +2138+45 V1339 CYG +2138+53 NSV 13852 +2139+09 EPS PEG +2139+37 RV CYG +2139+37B VAR? CYG +2139+40 NSV 13857 +2140+12 TU PEG +2140+24 RR PEG +2140+37 V1341 CYG +2140+45 HD 206635 +2140+58 MU CEP +2140-72 AY IND +2141+46 BN CYG +2141+48 V1089 CYG +2141-36 RY PSA +2142+23 DX PEG +2142+47 LP CYG +2142-47 R GRU +2143+06 EV PEG +2143+73 PQ CEP +2144+20 HO PEG +2144+43 WY CYG +2144+43B 130 VAR SE +2144+43C 92 COMP NE +2144+43D 91 COMP SE +2144+43E 84 COMP SW +2144+64 RT CEP +2145+16 NSV 13891 +2146+12 AG PEG +2146+19 HR 8248 +2147+13 LS PEG +2147+42 VZ CYG +2148+49 GU CYG +2148+70 VZ CEP +2149+48 LS CYG +2149+48B BP CYG +2149+48C 113 VAR? S +2149+49 LT CYG +2150+52 MWC 645 +2150-69 RW IND +2151+22 RX PEG +2151+47 LV CYG +2151+50 LW CYG +2151+51 BQ CYG +2152+35 WW PEG +2152+47A LX CYG +2152+47B LY CYG +2152+47C VAR? SE +2152+47D COMP A +2152+47E STAR NE +2152+64 MWC 381 +2152-15 OX-192 CAP +2153+49 MM CYG +2153+51 V1404 CYG +2153+63 VV CEP +2153-30 PKS2155-30 +2154+45A MP CYG +2154+45B VAR CYG +2154+52 MQ CYG +2154+60 IR CEP +2154+63 Q1995/033 +2155+05 NSV 13992 +2155+23 NSV 13991 +2155+45A GW CYG +2155+45B MS CYG +2155+48A FG CYG +2155+48B NSV 13967 +2155+86 TY CEP +2156+05 V PEG +2156+32 WY PEG +2156+42 BG LAC +2156+48 NSV 13994 +2156-28 U PSA +2157+01 VY PEG +2157+34 WZ PEG +2157-17 U AQR +2157-31 TT PSA +2158+13 DG PEG +2158+13B 106 COMP N +2158+13C 116 COMP E +2158+31 OY-302 PEG +2158+41 BL LAC +2158+48 GY CYG +2158+48B 118 COMP N +2158+56 YY CEP +2158-28 S PSA +2158-75 V OCT +2159+27 TW PEG +2159+27B 81 COMP SE +2159+27C 83 COMP +2159+34 RT PEG +2159+34B 111 COMP W +2159+34C 98 COMP NW +2159+35 UV PEG +2159+54 IU CEP +2159+69 BH CEP +2200-67 SS IND +2201+33A RY PEG +2201+33B RZ PEG +2201+34A SV PEG +2201+34B SY PEG +2201+34C VAR? +2201+46 HK LAC +2201+46B HT LAC +2201+51 PS LAC +2201+53 IV CEP +2201+53B 125 COMP S +2202+11 IU PEG +2202+17 NSV 14039 +2202+28 AZ PEG +2202+34 SZ PEG +2202+47B CT LAC +2203+37 W LAC +2203+37B 107 VAR? N +2203+46 AQ LAC +2203+47 AP LAC +2203+59 TASV2204+5 +2203-04 UU AQR +2203-47 NGC 7213 +2204+12 T PEG +2204+45 AR LAC +2204+53 2206+54CEP +2205+50 Y LAC +2205+55 EE CEP +2206+13 Y PEG +2206+72 DM CEP +2207+14 RS PEG +2207+54 AB CEP +2208+38 DH LAC +2208+43A RS LAC +2208+43B RY LAC +2208+56 CU CEP +2209+12 RU PEG +2209+12B VAR? SE +2209+12C 95 COMP SE +2209+56 N? CEP 83 +2209-80 EPS OCT +2210+26 AI PEG +2210+54 KM LAC +2210+62 SY CEP +2212+55 CP LAC +2212-08 FO AQR +2212-30 R PSA +2213+02 UW PEG +2213+13 TX PEG +2213-21 X AQR +2214+43 V366 LAC +2214+56 YZ CEP +2214+56B 106 COMP +2214+69 BO CEP +2214-60 AA TUC +2215+01 HL AQR +2215-61 UU TUC +2216-46 PI1 GRU +2217+45 FW LAC +2217-22 RT AQR +2217-22B 97 COMP SW +2219+52 MN LAC +2219+55A RW CEP +2219+55B SU LAC +2219+73 SV CEP +2219-38 T GRU +2219-38B VAR? NE +2219-38C VAR? ENE +2219-48 S GRU +2220+50 MR LAC +2220+55 BT LAC +2221+29 RV PEG +2221+34 CSV 8761 +2224+39 S LAC +2224+39B 99 COMP NE +2224+50 BU LAC +2224+55 NQ LAC +2224+57 DO CEP +2224-27 NSV 14175 +2225+57 DELTA CEP +2225+64 BS CEP +2226+05 MN PEG +2226+56 ST CEP +2228+55 QZ LAC +2228+57 KY CEP +2228-67 R IND +2229+24 SS PEG +2229+24B 93 COMP NW +2229+56 NSV 14213 +2229+56B V351 CEP +2230+53 VW LAC +2231+52 RZ LAC +2231+52B DI LAC +2231-65 UV TUC +2232+01 CY AQR +2232+47B BM AND +2232+57 W CEP +2233-21 FL AQR +2234+56 NSV 14260 +2234-62 T TUC +2236+56 Z LAC +2236-47 BETA GRU +2237+55 RR LAC +2237-21 SZ AQR +2238+09 NSV 14284 +2238+27 BD PEG +2238+41 R LAC +2238+41B STAR SW +2238+51 AO LAC +2240+49 RW LAC +2240+49A RV LAC +2241-43 RZ GRU +2241-43B NSV 14319 +2241-87 RT OCT +2242+43 EV LAC +2242+43B 108 COMP E +2242+58 CR CEP +2243+46 NSV 14321 +2243+54 U LAC +2243-65 X TUC +2244+24 EX PEG +2244+26 ST PEG +2244+55 V LAC +2244-27 TY PSA +2245+17 SX PEG +2245+40 RX LAC +2245+52 DK LAC +2245+55 X LAC +2245+58 AL CEP +2245+58B VAR CEP +2245+58C 11.0 COMP +2246+17 AF PEG +2246+54 EG LAC +2246+59 CV CEP +2246+62 GD 552 +2246+65 IOTA CEP +2247+51 CL LAC +2247+60 MW CEP +2247+63 VX CEP +2248-34 ST PSA +2249+15 3C 454.3 +2249+60 V386 CEP +2249-30 V PSA +2250+19 GO PEG +2250+36 TU LAC +2250-03 AO PSC +2251+24 SX LAC +2251+47 RU LAC +2251-20 S AQR +2252+17 BI PEG +2252+48 EW LAC +2252+58 DI CEP +2252-36 SN IC 5270 +2253+10 VAR63 PEG +2253+42 TV AND +2253+42B 102 COMP E +2253+84 AR CEP +2255+15 SN 7448 +2255+42 SZ AND +2255+56 V509 CAS +2256+45 BC AND +2256+82 NSV 14381 +2257+41 OMI AND +2257+45 VY AND +2257+51 BQ AND +2257-64 BR TUC +2258+08 NGC 7469 +2258+10 AK PEG +2258+16 PG2300+166 +2258+27 BETA PEG +2258+59 UV CAS +2258+59B AS CEP +2258+59C NSV 14398 +2258+59D NSV 14402 +2258-35 PI PSA +2259+14 RW PEG +2259+14B ALPHA PEG +2259+48 AZ AND +2259+52 V425 CAS +2300+48 OR AND +2300-22 ER AQR +2301+10 R PEG +2301+10B 77 VAR? NE +2302+08 NSV 14428 +2302+58 SW CAS +2303-30 Y SCL +2304+08 GZ PEG +2304+70 UZ CEP +2305+10 NSV 14446 +2305+52 RZ AND +2306+11 DHK PEG 3 +2306+66 CG CEP +2307+46 OS AND +2307+52 SS AND +2307+59 V CAS +2307+59B 93 COMP N +2308+01 SAO 128046 +2308+56 LM CAS +2308+60 OQ CEP +2309+04 SN 1998DH +2309-57 YZ TUC +2310+40 TY AND +2310+40B 92 COMP E +2310+40C 103 COMP W +2310+40D 99 COMP +2310+50 CL AND +2311+10 EO PEG +2311-08 CHI AQR +2311-64 Y TUC +2312+25 EZ PEG +2312+59 V563 CAS +2313+46 AO AND +2313+48 AI AND +2313+85 V362 CEP +2313-00 MARK 530 +2313-09 SN 7606 +2313-42 PKS2316-42 +2314+25 W PEG +2315+08 S PEG +2315+39 RY AND +2315+46 EU AND +2315+48 BE AND +2315-06 NSV 14515 +2316+49 AK AND +2316+49B 116 COMP S +2316+82 AN CEP +2316-18 XY AQR +2318+17 IP PEG +2318+17B COMP A +2318+17C COMP B +2318+39 BU AND +2318+78 RY CEP +2318+81 NSV 14522 +2319+46 TASV2321+4 +2319-17 RU AQR +2321+44 AL AND +2322+49 BV AND +2322-48 RU PHE +2323-30 VY SCL +2324+85 NSV 14566 +2325+43 DX AND +2325+48 DL AND +2326+19 EQ PEG +2326+27 HR 8933 +2326+42 BG AND +2326+42B 126 COMP S +2327+48 NSV 14607 +2327+61 DS CAS +2327-46 V PHE +2327-54 SN 7689 +2328+48 Z AND +2328+48B 104 COMP +2328+48C 88 COMP SW +2328+48D SUSP ROD +2328+48E 103 COMP N +2328+48F 91 COMP NW +2328-45 AN PHE +2331+09 FF PEG +2332+32 SU PEG +2332+45 LAMBDA AND +2332+46 GG AND +2332+47 BY AND +2332+56 DU CAS +2332+61 RS CAS +2333+35 ST AND +2333+55 LS CAS +2334+51 SV CAS +2334+59 DX CAS +2335+12 HX PEG +2335+29 PG2337+300 +2336+47 WY AND +2337+56 V705 CAS +2338+34 CM AND +2338+60 PY CAS +2338-15 R AQR +2338-15B 101 VAR? S +2338-15C 107 COMP S +2339+56 Z CAS +2339+61 PZ CAS +2339+61B 112 COMP W +2339+61C 88 COMP W +2339+84 NSV 14680 +2339-16 NSV 14689 +2341+02 TX PSC +2341+53 RT CAS +2341-42 SX PHE +2342+58 TAU CAS +2343+15 DL PEG +2343+50 V630 CAS +2344+01 NSV 14719 +2345+46 TZ AND +2345+50 CS CAS +2346+02 22 PSC +2346+08 HH PEG +2346+29 DU PEG +2346+59 BC CAS +2346+61 BB CAS +2347+54 EQ CAS +2347+58 RY CAS +2347+66 TASVJ2352+ +2347-16 Z AQR +2347-39 J2353-3851 +2348+22 NSV 26158 +2348+60 TZ CAS +2348+75 TX CEP +2348-39 RXJ2353.0 +2349+27 VAR62 PEG +2349+44 GL AND +2349+56 RHO CAS +2349-00 XZ PSC +2350+28 II PEG +2350+48 RS AND +2350+53 RR CAS +2351+82 V CEP +2351-50 R PHE +2352+31 YY AND +2352+55 WY CAS +2352+55B 137 COMP W +2352+61 CTM4 CAS +2352+62 DD CAS +2352-09 V CET +2352-65 R TUC +2353+50 R CAS +2353+50B 105 COMP E +2353+60A CE CAS A +2353+60B CE CAS B +2353+60C CF CAS +2353+60D 108 COMP X +2353-40 RR PHE +2353-53 Z PHE +2353-57 S PHE +2354+56A V532 CAS +2354+56B V533 CAS +2355+25 Z PEG +2355-77 BE OCT +2356+59 WZ CAS +2356+59B 72 COMP NE +2356+64 NSV 14802 +2357+48 IW CAS +2357-15 W CET +2358+55A Y CAS +2358+55B 150 COMP S +2359+39 SV AND +2359+43 SU AND +2359+54 DI CAS +2006-172 2003-17 +2206+54C 2204+53 +2231+06P 2226+05 diff --git a/GUI/xephem/auxil/uranus.1020 b/GUI/xephem/auxil/uranus.1020 new file mode 100644 index 0000000..55637c2 --- /dev/null +++ b/GUI/xephem/auxil/uranus.1020 @@ -0,0 +1,172 @@ + 7 5 2 18 35 54 74 2.4930 1.5162 .7217 .4667 4.4880 258. 242. 223. 206. 41. 173 2455197.500 2010 +1 220100101201009162455197.1 -.1009200000D+01 .6650000000D-02 .5245550000D+02 .2768700000D+00 .7340000000D-03 .4106000000D+00 -.5336232000D+01 -.3814000000D+00 -.3572700000D+01 -.6781000000D+00 -.1075400000D+01 .4740000000D-02 .1842091000D+03 .9239000000D-01 .1600000000D-03 .3609000000D+00 -.1933963000D+01 -.3859000000D+00 -.3650500000D+01 -.4536000000D+00 -.8050000000D-01 -.1370000000D-02 .1907561000D+03 .4176000000D-01 .1320000000D-03 .4246000000D+00 -.3521545000D+01 -.4640000000D+00 -.2854200000D+01 -.7726000000D+00 +1 320100916201106012455455.1 .1401000000D+00 .2630000000D-02 .6165350000D+02 .9604000000D-01 .6980000000D-03 .5920000000D+00 -.3336795000D+01 -.1118800000D+01 -.4343500000D+01 -.3996700000D+01 -.4566000000D+00 .1710000000D-02 .1839722000D+03 .1140100000D+00 .4550000000D-03 .7550000000D-01 -.5842044000D+01 -.1159200000D+01 -.4328600000D+01 -.5326000000D+00 .2228000000D+00 -.1660000000D-02 .1878303000D+03 .8537000000D-01 .2890000000D-03 .1959000000D+00 -.1180763000D+01 -.2526700000D+01 -.5355600000D+01 -.3537200000D+01 +1 420110601201202142455713.1 -.6868000000D+00 .9030000000D-02 .7435090000D+02 .1034700000D+00 .2170000000D-03 .4362000000D+00 -.1304181000D+01 -.5464800000D+01 -.2536700000D+01 -.3893100000D+01 -.7214000000D+00 .5420000000D-02 .1853318000D+03 .1926000000D-01 .2080000000D-03 .3735000000D+00 -.3522664000D+01 -.1222800000D+01 -.4954200000D+01 -.3730500000D+01 -.5553000000D+00 .3700000000D-02 .1820239000D+03 .3868000000D-01 .2030000000D-03 .9650000000D-01 -.5174370000D+01 -.4393200000D+01 -.6760000000D+00 -.4113700000D+01 +1 520120214201210292455971.1 -.1008000000D+00 .1770000000D-02 .6795230000D+02 .2438200000D+00 .8060000000D-03 .1875000000D+00 -.5180058000D+01 -.6067100000D+01 -.2944500000D+01 -.8542000000D+00 -.7898000000D+00 .4330000000D-02 .1839862000D+03 .1189800000D+00 .3230000000D-03 .7680000000D-01 -.1263304000D+01 -.6120800000D+01 -.3031600000D+01 -.6124900000D+01 -.4413000000D+00 .1120000000D-02 .1858757000D+03 .1035900000D+00 .3140000000D-03 .4124000000D+00 -.2899281000D+01 -.2563000000D+00 -.3243900000D+01 -.5646000000D+00 +1 620121029201307142456229.1 .1179100000D+01 -.4590000000D-02 .7199940000D+02 .6711000000D-01 .1920000000D-03 .6927000000D+00 -.2930127000D+01 -.4027500000D+01 -.3463700000D+01 -.3879400000D+01 .4280000000D-01 -.6900000000D-03 .1848329000D+03 .6470000000D-01 .3440000000D-03 .9450000000D-01 -.5198025000D+01 -.5291000000D+00 -.3707600000D+01 -.4585300000D+01 .1424000000D+00 -.6400000000D-03 .1832001000D+03 .7481000000D-01 .3150000000D-03 .2660000000D+00 -.5631840000D+00 -.2240100000D+01 -.4837400000D+01 -.3757000000D+01 +1 720130714201403292456487.1 .6101000000D+00 -.1260000000D-02 .9367150000D+02 .1892200000D+00 .6810000000D-03 .3940000000D+00 -.8538210000D+00 -.4596200000D+01 -.1517900000D+01 -.3744500000D+01 -.1100000000D-02 .9700000000D-03 .1859368000D+03 .5266000000D-01 .6400000000D-04 .3397000000D+00 -.2852774000D+01 -.4552600000D+01 -.1510800000D+01 -.3644600000D+01 -.4553000000D+00 .3510000000D-02 .1723353000D+03 .7685000000D-01 .2550000000D-03 .2310000000D+00 -.4532689000D+01 -.4784000000D+01 -.1179300000D+01 -.3647500000D+01 +1 820140329201412122456745.1 .9406000000D+00 -.7000000000D-02 .9047880000D+02 .1613500000D+00 .6920000000D-03 .3203000000D+00 -.4857273000D+01 -.5253100000D+01 -.2167900000D+01 -.9675000000D+00 -.1924000000D+00 .7700000000D-03 .1857618000D+03 .1056400000D+00 .3710000000D-03 .5170000000D-01 -.5890650000D+00 -.5380300000D+01 -.2243000000D+01 -.2584300000D+01 -.8650000000D-01 -.1580000000D-02 .1736946000D+03 .1132200000D+00 .4360000000D-03 .3922000000D+00 -.2267777000D+01 -.6043600000D+01 -.2788400000D+01 -.6025000000D+00 +1 920141212201508272457003.1 .1526300000D+01 -.9180000000D-02 .8716040000D+02 .1909300000D+00 .3280000000D-03 .4293000000D+00 -.2489400000D+01 -.3429200000D+01 -.6192000000D+00 -.3753400000D+01 .4027000000D+00 -.3410000000D-02 .1854795000D+03 .1829000000D-01 .1720000000D-03 .1085000000D+00 -.4558383000D+01 -.4986700000D+01 -.2735100000D+01 -.4433900000D+01 .6265000000D+00 -.4060000000D-02 .1762165000D+03 .9175000000D-01 .1920000000D-03 .2577000000D+00 -.6231937000D+01 -.2754500000D+01 -.5138600000D+01 -.3910500000D+01 +1 1020150827201605112457261.1 .6257000000D+00 -.4280000000D-02 .1097456000D+03 .1859600000D+00 .8280000000D-03 .7630000000D-01 -.3461900000D+00 -.3998500000D+01 -.9604000000D+00 -.3062600000D+01 .3866000000D+00 -.2460000000D-02 .1872493000D+03 .9486000000D-01 .2590000000D-03 .2263000000D+00 -.2198591000D+01 -.3933400000D+01 -.8982000000D+00 -.3674200000D+01 -.2292000000D+00 .1530000000D-02 .1610592000D+03 .1245700000D+00 .4940000000D-03 .1657000000D+00 -.3896240000D+01 -.4387900000D+01 -.1010600000D+01 -.3263700000D+01 +1 1120160511201701242457519.1 .8176000000D+00 -.8610000000D-02 .1140592000D+03 .6630000000D-01 .3830000000D-03 .6337000000D+00 -.4401805000D+01 -.4146400000D+01 -.1375900000D+01 -.8270000000D+00 .1478000000D+00 -.2110000000D-02 .1881281000D+03 .8256000000D-01 .3570000000D-03 .1288000000D+00 -.6210160000D+01 -.4628900000D+01 -.1536300000D+01 -.1740700000D+01 .7020000000D-01 -.4070000000D-02 .1564374000D+03 .7318000000D-01 .3840000000D-03 .5354000000D+00 -.1622097000D+01 -.5674500000D+01 -.2345400000D+01 -.7565000000D+00 +1 1220170124201710092457777.1 .8481000000D+00 -.6240000000D-02 .1071246000D+03 .2261800000D+00 .5720000000D-03 .6940000000D-01 -.2034525000D+01 -.2799000000D+01 -.6054500000D+01 -.2915400000D+01 .3673000000D+00 -.3800000000D-02 .1868261000D+03 .3086000000D-01 .8800000000D-04 .1730000000D-01 -.3915535000D+01 -.3228800000D+01 -.1457700000D+01 -.5690000000D+00 .7838000000D+00 -.6360000000D-02 .1635198000D+03 .1618400000D+00 .3620000000D-03 .1887000000D+00 -.5614689000D+01 -.2649400000D+01 -.5649100000D+01 -.4070800000D+01 +1 1320171009201806242458035.1 -.5383000000D+00 .2850000000D-02 .1218052000D+03 .7837000000D-01 .5570000000D-03 .2375000000D+00 -.6085432000D+01 -.3109300000D+01 -.2604000000D+00 -.7641000000D+00 .2604000000D+00 -.2120000000D-02 .1887027000D+03 .8842000000D-01 .2680000000D-03 .7760000000D-01 -.1563525000D+01 -.3291600000D+01 -.2512000000D+00 -.4167100000D+01 -.5109000000D+00 .2610000000D-02 .1498845000D+03 .1073300000D+00 .5580000000D-03 .7140000000D-01 -.3261814000D+01 -.4015200000D+01 -.5681000000D+00 -.2238100000D+01 +1 1420180624201903092458293.1 -.4634000000D+00 .4400000000D-03 .1366762000D+03 .8983000000D-01 .2280000000D-03 .6898000000D+00 -.3872788000D+01 -.1480500000D+01 -.4912400000D+01 -.6733000000D+00 -.3610000000D-01 -.8400000000D-03 .1896198000D+03 .4653000000D-01 .2530000000D-03 .2174000000D+00 -.5562121000D+01 -.3948300000D+01 -.8720000000D+00 -.1115100000D+01 -.5216000000D+00 -.8700000000D-03 .1353271000D+03 .7037000000D-01 .2220000000D-03 .7391000000D+00 -.9675110000D+00 -.4988000000D+00 -.2991000000D+01 -.7575000000D+00 +1 1520190309201911222458551.1 -.1921000000D+00 .1550000000D-02 .1289505000D+03 .2021800000D+00 .6690000000D-03 .4500000000D-02 -.1555478000D+01 -.2051900000D+01 -.5251100000D+01 -.2848200000D+01 .8110000000D-01 -.1800000000D-02 .1889001000D+03 .2980000000D-01 .4300000000D-04 .1762000000D+00 -.3277500000D+01 -.2201800000D+01 -.6164600000D+01 -.9734000000D+00 .2403000000D+00 -.2720000000D-02 .1438600000D+03 .2079400000D+00 .6430000000D-03 .1587000000D+00 -.4976329000D+01 -.2100900000D+01 -.5164400000D+01 -.4278800000D+01 +1 1620191122202008062458809.1 -.1168600000D+01 .8720000000D-02 .1344652000D+03 .8504000000D-01 .2720000000D-03 .1410000000D+00 -.5525907000D+01 -.7080000000D+00 -.5205700000D+01 -.6533000000D+00 -.1780000000D-01 .4000000000D-04 .1896739000D+03 .7397000000D-01 .2340000000D-03 .6980000000D-01 -.9422890000D+00 -.2529300000D+01 -.5732900000D+01 -.4637000000D+01 -.1089500000D+01 .7430000000D-02 .1374484000D+03 .3913000000D-01 .3740000000D-03 .2000000000D-02 -.2634553000D+01 -.4444800000D+01 -.6700000000D-02 -.3388300000D+01 +1 1720200806202104212459067.1 -.9707000000D+00 .6550000000D-02 .1549256000D+03 .1685500000D+00 .6120000000D-03 .3915000000D+00 -.3321023000D+01 -.7797000000D+00 -.4074900000D+01 -.4395000000D+00 -.3687000000D+00 .2270000000D-02 .1904455000D+03 .1500000000D-01 .1640000000D-03 .1132000000D+00 -.4929731000D+01 -.2992900000D+01 -.7940000000D-01 -.7444000000D+00 -.1134500000D+01 .4770000000D-02 .1129731000D+03 .1738400000D+00 .5550000000D-03 .7326000000D+00 -.2955410000D+00 -.4912000000D+00 -.3524500000D+01 -.7135000000D+00 +2 1820100101201008312455197.5 -.3704000000D+00 -.1810000000D-02 .7355460000D+02 .3262000000D+00 .7860000000D-03 .4458000000D+00 -.3338292000D+01 -.4567100000D+01 -.1422500000D+01 -.2688200000D+01 -.5043000000D+00 -.1110000000D-02 .2567390000D+03 .1031300000D+00 .1730000000D-03 .4193000000D+00 -.6184772000D+01 -.4509200000D+01 -.1242400000D+01 -.2232000000D+00 .1653600000D+01 -.2300000000D-02 .2654291000D+03 .4238000000D-01 .7800000000D-04 .7614000000D+00 -.1493717000D+01 -.4908200000D+01 -.9970000000D+00 -.1898700000D+01 +2 1920100831201104302455439.5 -.3651000000D+00 .2480000000D-02 .8867800000D+02 .2328800000D+00 .1260000000D-02 .5781000000D+00 -.1178718000D+01 -.5242100000D+01 -.2125100000D+01 -.5275000000D+01 -.3314000000D+00 -.1390000000D-02 .2563081000D+03 .1352500000D+00 .5400000000D-03 .6486000000D+00 -.3636569000D+01 -.5291700000D+01 -.2175900000D+01 -.1893500000D+01 .1543300000D+01 -.3400000000D-03 .2604786000D+03 .9574000000D-01 .3520000000D-03 .5382000000D+00 -.5261866000D+01 -.5800000000D-02 -.2838500000D+01 -.3122000000D+01 +2 2020110430201112282455681.5 -.1509800000D+01 .1032000000D-01 .9741230000D+02 .9727000000D-01 .5930000000D-03 .2048700000D+01 -.5120332000D+01 -.5200700000D+01 -.2307400000D+01 -.5655000000D+01 -.8468000000D+00 .2700000000D-02 .2570691000D+03 .8055000000D-01 .4590000000D-03 .1499000000D+00 -.1145126000D+01 -.5720800000D+01 -.2630300000D+01 -.3604400000D+01 .1111600000D+01 .2210000000D-02 .2563441000D+03 .4316000000D-01 .2640000000D-03 .7242000000D+00 -.2787742000D+01 -.7339000000D+00 -.3743100000D+01 -.4829400000D+01 +2 2120111228201208262455923.5 -.1276100000D+01 .5960000000D-02 .8986050000D+02 .3351300000D+00 .7930000000D-03 .1128400000D+01 -.2499787000D+01 -.3570900000D+01 -.4831000000D+00 -.5835900000D+01 -.1095300000D+01 .2940000000D-02 .2558383000D+03 .9184000000D-01 .1490000000D-03 .7742000000D+00 -.4960988000D+01 -.3674100000D+01 -.8129000000D+00 -.5107100000D+01 .1073200000D+01 .1500000000D-03 .2612134000D+03 .9900000000D-01 .2290000000D-03 .4716000000D+00 -.3064310000D+00 -.3396100000D+01 -.6111500000D+01 -.5764900000D+01 +2 2220120826201304252456165.5 -.3013000000D+00 .6500000000D-03 .1130039000D+03 .2411700000D+00 .1179000000D-02 .3043000000D+00 -.2619390000D+00 -.4063700000D+01 -.9799000000D+00 -.2796700000D+01 -.9778000000D+00 .1540000000D-02 .2578651000D+03 .1440400000D+00 .5140000000D-03 .8155000000D+00 -.2409674000D+01 -.4073800000D+01 -.9417000000D+00 -.5533000000D+01 .1486900000D+01 -.1540000000D-02 .2499240000D+03 .1052500000D+00 .4270000000D-03 .5949000000D+00 -.4075826000D+01 -.4774000000D+01 -.1361500000D+01 -.1451400000D+01 +2 2320130425201312232456407.5 -.4280000000D+00 .4260000000D-02 .1201345000D+03 .1378500000D+00 .7820000000D-03 .7421000000D+00 -.4128467000D+01 -.4790400000D+01 -.1643600000D+01 -.5128100000D+01 -.7848000000D+00 .1250000000D-02 .2581022000D+03 .9977000000D-01 .4900000000D-03 .5813000000D+00 -.6215825000D+01 -.4754100000D+01 -.1611900000D+01 -.2220000000D-01 .1233900000D+01 .2080000000D-02 .2459688000D+03 .1003800000D+00 .4950000000D-03 .1077000000D+00 -.1607591000D+01 -.5549000000D+01 -.2303700000D+01 -.1006500000D+01 +2 2420131223201408222456649.5 -.8941000000D+00 .6400000000D-02 .1122706000D+03 .2262700000D+00 .3690000000D-03 .1657100000D+01 -.1581895000D+01 -.2555100000D+01 -.6089500000D+01 -.5697200000D+01 -.9679000000D+00 .2000000000D-02 .2574993000D+03 .3682000000D-01 .1190000000D-03 .2874000000D+00 -.3737162000D+01 -.2878500000D+01 -.1530500000D+01 -.6843000000D+00 .6690000000D+00 .4870000000D-02 .2500280000D+03 .8539000000D-01 .6600000000D-04 .9254000000D+00 -.5401921000D+01 -.2401600000D+01 -.5119800000D+01 -.5178200000D+01 +2 2520140822201504212456891.5 -.6156000000D+00 .2260000000D-02 .1392113000D+03 .2645700000D+00 .1188000000D-02 .5880000000D+00 -.5544615000D+01 -.3005500000D+01 -.6195500000D+01 -.1990000000D+00 -.1083800000D+01 .1970000000D-02 .2600668000D+03 .1200100000D+00 .3790000000D-03 .1985000000D+00 -.1194526000D+01 -.3027300000D+01 -.6254900000D+01 -.3523500000D+01 .1000700000D+01 .5400000000D-03 .2332680000D+03 .1636100000D+00 .6550000000D-03 .3982000000D+00 -.2883429000D+01 -.3327500000D+01 -.6281200000D+01 -.4958300000D+01 +2 2620150421201512192457133.5 .2115000000D+00 -.2370000000D-02 .1421468000D+03 .1544100000D+00 .7580000000D-03 .8859000000D+00 -.3095402000D+01 -.3482700000D+01 -.3976000000D+00 -.2476000000D+01 -.9061000000D+00 .9000000000D-04 .2600754000D+03 .9478000000D-01 .4190000000D-03 .4315000000D+00 -.5007996000D+01 -.3544700000D+01 -.4215000000D+00 -.4492000000D+01 .1580500000D+01 -.3020000000D-02 .2317058000D+03 .1085900000D+00 .5170000000D-03 .4708000000D+00 -.4142400000D+00 -.3984800000D+01 -.8379000000D+00 -.2069600000D+01 +2 2720151219201608172457375.5 .2227000000D+00 -.1310000000D-02 .1351592000D+03 .2047200000D+00 .2060000000D-03 .4434000000D+00 -.5640740000D+00 -.1254400000D+01 -.4432600000D+01 -.3792400000D+01 -.8866000000D+00 .3500000000D-03 .2599458000D+03 .5580000000D-02 .1620000000D-03 .7252000000D+00 -.2521294000D+01 -.2925600000D+01 -.1043800000D+01 -.5665300000D+01 .1418400000D+01 .2100000000D-03 .2366096000D+03 .1169200000D+00 .2480000000D-03 .3561000000D+00 -.4205665000D+01 -.7129000000D+00 -.2792900000D+01 -.8228000000D+00 +2 2820160817201704162457617.5 -.3143000000D+00 .6600000000D-03 .1657018000D+03 .2351500000D+00 .9720000000D-03 .5026000000D+00 -.4485422000D+01 -.1876300000D+01 -.5098800000D+01 -.5535300000D+01 -.9709000000D+00 .1060000000D-02 .2619458000D+03 .6935000000D-01 .1530000000D-03 .6168000000D+00 -.6275542000D+01 -.1819200000D+01 -.5206100000D+01 -.2524000000D+00 .6993000000D+00 .3350000000D-02 .2135730000D+03 .1636600000D+00 .6210000000D-03 .4380000000D+00 -.1693489000D+01 -.2090400000D+01 -.5096900000D+01 -.5782300000D+01 +2 2920170416201712142457859.5 .7190000000D-01 -.4520000000D-02 .1634705000D+03 .2289400000D+00 .9800000000D-03 .8013000000D+00 -.2016262000D+01 -.2386300000D+01 -.5544700000D+01 -.1948700000D+01 -.1039800000D+01 -.3500000000D-03 .2619128000D+03 .8932000000D-01 .3500000000D-03 .5565000000D+00 -.3811778000D+01 -.2438600000D+01 -.5595500000D+01 -.2203100000D+01 .1048100000D+01 -.1840000000D-02 .2147432000D+03 .2034200000D+00 .8650000000D-03 .4667000000D+00 -.5511506000D+01 -.2708000000D+01 -.5813000000D+01 -.3041100000D+01 +2 3020171214201808132458101.5 .6021000000D+00 -.7470000000D-02 .1619322000D+03 .1784900000D+00 .2610000000D-03 .1503800000D+01 -.5782385000D+01 -.5063000000D+00 -.4458600000D+01 -.2395900000D+01 -.7919000000D+00 -.2390000000D-02 .2615145000D+03 .4143000000D-01 .1970000000D-03 .8582000000D+00 -.1313104000D+01 -.2335700000D+01 -.5790900000D+01 -.2984500000D+01 .1935100000D+01 -.7210000000D-02 .2162019000D+03 .9709000000D-01 .7700000000D-04 .9984000000D+00 -.3017140000D+01 -.6250300000D+01 -.4876000000D+00 -.2688300000D+01 +2 3120180813201904122458343.5 .1352000000D+00 -.3000000000D-02 .1914917000D+03 .2403500000D+00 .9180000000D-03 .7744000000D+00 -.3404153000D+01 -.7491000000D+00 -.3971800000D+01 -.2944300000D+01 -.8630000000D+00 -.1790000000D-02 .2643023000D+03 .4881000000D-01 .7300000000D-04 .3798000000D+00 -.5085528000D+01 -.7689000000D+00 -.4541300000D+01 -.4353800000D+01 .1386600000D+01 -.2410000000D-02 .1874761000D+03 .2200400000D+00 .7850000000D-03 .2248000000D+00 -.4923000000D+00 -.7083000000D+00 -.3713700000D+01 -.1760300000D+01 +2 3220190412201912102458585.5 -.4023000000D+00 -.2250000000D-02 .1858291000D+03 .2372100000D+00 .9530000000D-03 .3422000000D+00 -.9190910000D+00 -.1422200000D+01 -.4585800000D+01 -.3734900000D+01 -.1204300000D+01 .3200000000D-03 .2641648000D+03 .5085000000D-01 .1660000000D-03 .6764000000D+00 -.2623375000D+01 -.1234300000D+01 -.4458900000D+01 -.5977100000D+01 .6376000000D+00 .8000000000D-04 .1934331000D+03 .2405900000D+00 .9460000000D-03 .3346000000D+00 -.4313509000D+01 -.1482500000D+01 -.4611300000D+01 -.8037000000D+00 +2 3320191210202008082458827.5 .3830000000D-01 -.6990000000D-02 .1877112000D+03 .8051000000D-01 .3760000000D-03 .9643000000D+00 -.4709799000D+01 -.6109600000D+01 -.4666500000D+01 -.2343600000D+01 -.1173400000D+01 -.6600000000D-03 .2640553000D+03 .6337000000D-01 .2220000000D-03 .5038000000D+00 -.1198570000D+00 -.1644600000D+01 -.4898400000D+01 -.1351500000D+01 .1000300000D+01 -.5750000000D-02 .1913286000D+03 .4091000000D-01 .5070000000D-03 .1168900000D+01 -.1808406000D+01 -.3908600000D+01 -.5397500000D+01 -.2518100000D+01 +2 3420200808202104072459069.5 .1476000000D+00 -.6260000000D-02 .2125904000D+03 .1918200000D+00 .7260000000D-03 .1334400000D+01 -.2304713000D+01 -.6199200000D+01 -.3191100000D+01 -.2258900000D+01 -.1065200000D+01 -.2450000000D-02 .2654693000D+03 .2767000000D-01 .2130000000D-03 .1020600000D+01 -.3918545000D+01 -.1779900000D+01 -.5201600000D+01 -.2548000000D+01 .1404500000D+01 -.7090000000D-02 .1608318000D+03 .2028200000D+00 .6500000000D-03 .1456800000D+01 -.5562111000D+01 -.6016400000D+01 -.2821000000D+01 -.2819300000D+01 +3 3520100101201008122455197.5 -.4356000000D+00 .4310000000D-02 .1220281000D+03 .5381900000D+00 .1252000000D-02 .3036000000D+00 .4751860000D+01 .3476600000D+01 .3395000000D+00 -.4310000000D+01 .8144000000D+00 .3900000000D-02 .4205683000D+03 .2157400000D+00 .3720000000D-03 .2910000000D+00 .1899859000D+01 .3508600000D+01 .4501000000D+00 -.2112000000D+00 -.6873000000D+00 .5800000000D-03 .4355465000D+03 .9870000000D-01 .1270000000D-03 .5938000000D+00 .3075490000D+00 .2777300000D+01 .1460000000D+00 -.1763600000D+01 +3 3620100812201103232455420.5 .1664000000D+00 -.1550000000D-02 .1497164000D+03 .4668800000D+00 .2111000000D-02 .5642000000D+00 .1954181000D+01 .4198600000D+01 .1060700000D+01 -.3649800000D+01 .1374000000D+01 -.2110000000D-02 .4211636000D+03 .1899200000D+00 .8340000000D-03 .4787000000D+00 .5827369000D+01 .4183900000D+01 .1043400000D+01 -.5001400000D+01 -.9684000000D+00 .1850000000D-02 .4253275000D+03 .1263400000D+00 .5360000000D-03 .3351000000D+00 .4198031000D+01 .3508100000D+01 .4328000000D+00 -.6140700000D+01 +3 3720110323201111012455643.5 -.1225000000D+00 -.4700000000D-03 .1498824000D+03 .4529200000D+00 .2040000000D-02 .2043000000D+00 .5810639000D+01 .4951500000D+01 .1801300000D+01 -.3258000000D+01 .1119400000D+01 -.6000000000D-04 .4206931000D+03 .2362800000D+00 .9330000000D-03 .7482000000D+00 .3400247000D+01 .4918400000D+01 .1785000000D+01 -.3819600000D+01 -.5535000000D+00 -.6200000000D-03 .4256590000D+03 .1765300000D+00 .7150000000D-03 .3958000000D+00 .1767139000D+01 .4224300000D+01 .1221600000D+01 -.4609900000D+01 +3 3820111101201206112455866.5 -.8990000000D+00 .6160000000D-02 .1483598000D+03 .1975000000D-01 .1122000000D-02 .8250000000D-01 .3398741000D+01 .3283300000D+01 .2454700000D+01 -.4842000000D+01 .7556000000D+00 .2440000000D-02 .4213356000D+03 .1985000000D-01 .5860000000D-03 .4962000000D+00 .9878250000D+00 .5340200000D+01 .2452200000D+01 -.2243900000D+01 -.9605000000D+00 .2540000000D-02 .4250361000D+03 .3661000000D-01 .5340000000D-03 .3032000000D+00 .5640711000D+01 .4610700000D+01 .1893600000D+01 -.4149500000D+01 +3 3920120611201301202456089.5 -.7095000000D+00 .7610000000D-02 .1916043000D+03 .2043100000D+00 .1990000000D-03 .2198000000D+00 .7302230000D+00 .3151000000D+01 .7830000000D-01 -.4982500000D+01 .9045000000D+00 .3370000000D-02 .4227870000D+03 .3171000000D-01 .1310000000D-03 .5303000000D+00 .4906949000D+01 .3436200000D+01 .2879600000D+01 -.6268000000D+00 -.7798000000D+00 .1920000000D-02 .4062083000D+03 .7262000000D-01 .1980000000D-03 .4961000000D+00 .3237608000D+01 .3553200000D+01 .1438800000D+01 -.2746800000D+01 +3 4020130120201308312456312.5 .5100000000D-01 .1910000000D-02 .1677321000D+03 .5282300000D+00 .1362000000D-02 .3646000000D+00 .4721791000D+01 .3881900000D+01 .7190000000D+00 -.3874100000D+01 .1203300000D+01 .5400000000D-03 .4213707000D+03 .1989300000D+00 .4030000000D-03 .3845000000D+00 .2456914000D+01 .3901400000D+01 .7390000000D+00 -.5498600000D+01 -.7263000000D+00 .2680000000D-02 .4193260000D+03 .2254700000D+00 .5070000000D-03 .3346000000D+00 .8044950000D+00 .3578300000D+01 .6021000000D+00 -.8164000000D+00 +3 4120130831201404112456535.5 .2951000000D+00 -.2290000000D-02 .2058967000D+03 .4288200000D+00 .2056000000D-02 .3339000000D+00 .2126569000D+01 .4647900000D+01 .1496300000D+01 -.3402000000D+01 .1342200000D+01 -.8500000000D-03 .4245159000D+03 .1745100000D+00 .7880000000D-03 .8666000000D+00 .9171200000D-01 .4657100000D+01 .1524800000D+01 -.4092600000D+01 -.4963000000D+00 .0000000000D+00 .3982881000D+03 .2051500000D+00 .9710000000D-03 .3271000000D+00 .4697336000D+01 .4260000000D+01 .1170200000D+01 -.5076500000D+01 +3 4220140411201411202456758.5 -.2148000000D+00 .1430000000D-02 .2101649000D+03 .3938600000D+00 .1900000000D-02 .1925000000D+00 .5964832000D+01 .5376300000D+01 .2216700000D+01 -.3471000000D+01 .1145900000D+01 -.6000000000D-04 .4250570000D+03 .1790200000D+00 .7240000000D-03 .4344000000D+00 .3951410000D+01 .5411600000D+01 .2238400000D+01 -.2525900000D+01 -.4888000000D+00 .5400000000D-03 .3955797000D+03 .2440000000D+00 .1099000000D-02 .4106000000D+00 .2269375000D+01 .4961100000D+01 .1917900000D+01 -.4494100000D+01 +3 4320141120201507012456981.5 -.7448000000D+00 .7080000000D-02 .2045262000D+03 .9360000000D-01 .7520000000D-03 .2570000000D+00 .3569348000D+01 .2901400000D+01 .2890700000D+01 -.5741200000D+01 .9631000000D+00 .2240000000D-02 .4248922000D+03 .9320000000D-02 .4190000000D-03 .3325000000D+00 .1533543000D+01 .4192300000D+01 .2840300000D+01 -.1221000000D+01 -.8698000000D+00 .3740000000D-02 .3980213000D+03 .3284000000D-01 .6720000000D-03 .5519000000D+00 .6140225000D+01 .3999900000D+01 .2471500000D+01 -.3132400000D+01 +3 4420150701201602092457204.5 -.1754000000D+00 .4820000000D-02 .2533343000D+03 .2495900000D+00 .4960000000D-03 .3132000000D+00 .9985350000D+00 .3478500000D+01 .3022000000D+00 -.4276800000D+01 .1111000000D+01 .1840000000D-02 .4282629000D+03 .1995000000D-01 .8500000000D-04 .6020000000D+00 .5440060000D+01 .3344500000D+01 .3756800000D+01 -.2224000000D+00 -.5548000000D+00 .3460000000D-02 .3646609000D+03 .1408100000D+00 .2590000000D-03 .1667000000D+00 .3744425000D+01 .3689600000D+01 .9475000000D+00 -.1630600000D+01 +3 4520160209201609192457427.5 .3916000000D+00 -.5300000000D-03 .2293300000D+03 .4967900000D+00 .1376000000D-02 .2360000000D+00 .4929083000D+01 .4309100000D+01 .1127400000D+01 -.3427400000D+01 .1274100000D+01 .1200000000D-03 .4260363000D+03 .1515900000D+00 .3160000000D-03 .7074000000D+00 .2999527000D+01 .4313800000D+01 .1088800000D+01 -.4378300000D+01 -.2278000000D+00 .8000000000D-03 .3831736000D+03 .3436900000D+00 .9060000000D-03 .2188000000D+00 .1306466000D+01 .4142300000D+01 .1071300000D+01 -.5976200000D+01 +3 4620160919201704302457650.5 .1959000000D+00 -.1300000000D-02 .2659281000D+03 .3839300000D+00 .1964000000D-02 .3041000000D+00 .2424475000D+01 .5063900000D+01 .1905700000D+01 -.3214900000D+01 .1343700000D+01 -.1070000000D-02 .4291969000D+03 .1129400000D+00 .5230000000D-03 .3882000000D+00 .6178150000D+00 .5097900000D+01 .1920400000D+01 -.3182100000D+01 -.1637000000D+00 -.8600000000D-03 .3541649000D+03 .2854600000D+00 .1428000000D-02 .4503000000D+00 .5201205000D+01 .4921100000D+01 .1806200000D+01 -.4820700000D+01 +3 4720170430201712092457873.5 -.2110000000D+00 .2620000000D-02 .2747777000D+03 .3157900000D+00 .1643000000D-02 .1926000000D+00 .6260181000D+01 .5788300000D+01 .2611100000D+01 -.5742200000D+01 .1158700000D+01 -.1600000000D-03 .4301430000D+03 .1207500000D+00 .4810000000D-03 .3688000000D+00 .4479348000D+01 .5820600000D+01 .2625700000D+01 -.1848400000D+01 -.5439000000D+00 .2980000000D-02 .3468034000D+03 .2908400000D+00 .1438000000D-02 .3969000000D+00 .2779363000D+01 .5550500000D+01 .2472900000D+01 -.3411200000D+01 +3 4820171209201807202458096.5 -.4658000000D+00 .6120000000D-02 .2658903000D+03 .1505000000D+00 .4190000000D-03 .2312000000D+00 .3867991000D+01 .3203900000D+01 .3367900000D+01 -.5070000000D+01 .1015000000D+01 .2090000000D-02 .4297844000D+03 .5690000000D-02 .2490000000D-03 .5057000000D+00 .2061959000D+01 .2060500000D+01 .3415500000D+01 -.4749000000D+00 -.5460000000D+00 .4370000000D-02 .3542533000D+03 .8733000000D-01 .6050000000D-03 .2148000000D+00 .3621310000D+00 .3549000000D+01 .3013300000D+01 -.2678800000D+01 +3 4920180720201902282458319.5 .3567000000D+00 .1310000000D-02 .3132501000D+03 .2579600000D+00 .6450000000D-03 .3546000000D+00 .1347257000D+01 .3855700000D+01 .6518000000D+00 -.4031300000D+01 .1294400000D+01 -.2300000000D-03 .4337128000D+03 .1838000000D-01 .8000000000D-04 .5278000000D+00 .5948551000D+01 .2723600000D+01 .4846600000D+01 -.4930100000D+01 -.5070000000D-01 .1960000000D-02 .3083394000D+03 .2167300000D+00 .5150000000D-03 .1451000000D+00 .4263488000D+01 .4054600000D+01 .9990000000D+00 -.5165000000D+00 +3 5020190228201910092458542.5 .4462000000D+00 -.1250000000D-02 .2925021000D+03 .4541700000D+00 .1364000000D-02 .3998000000D+00 .5247623000D+01 .4709000000D+01 .1512300000D+01 -.3003800000D+01 .1283500000D+01 -.3000000000D-03 .4321586000D+03 .6543000000D-01 .8900000000D-04 .3544000000D+00 .3517769000D+01 .4718700000D+01 .1098700000D+01 -.3473200000D+01 .3746000000D+00 -.2490000000D-02 .3306455000D+03 .4507900000D+00 .1265000000D-02 .4069000000D+00 .1822108000D+01 .4721400000D+01 .1621300000D+01 -.5357700000D+01 +3 5120191009202005192458765.5 .2720000000D+00 -.1540000000D-02 .3233711000D+03 .3233600000D+00 .1757000000D-02 .2402000000D+00 .2781360000D+01 .5463700000D+01 .2298000000D+01 -.6407000000D+00 .1176400000D+01 -.7700000000D-03 .4340088000D+03 .4450000000D-01 .1890000000D-03 .2501000000D+00 .1117306000D+01 .5357600000D+01 .2073600000D+01 -.2152000000D+01 -.2330000000D+00 .1350000000D-02 .2965047000D+03 .3428200000D+00 .1852000000D-02 .5262000000D+00 .5720661000D+01 .5438100000D+01 .2314000000D+01 -.3880300000D+01 +3 5220200519202012282458988.5 -.4202000000D+00 .5160000000D-02 .3355234000D+03 .2234400000D+00 .1285000000D-02 .3221000000D+00 .3316360000D+00 .6210100000D+01 .2983000000D+01 -.5422500000D+01 .1180600000D+01 .4400000000D-03 .4344568000D+03 .5889000000D-01 .1830000000D-03 .3690000000D+00 .4974707000D+01 .6238800000D+01 .2890400000D+01 -.1291600000D+01 -.2390000000D+00 .3060000000D-02 .2820388000D+03 .3067200000D+00 .1631000000D-02 .2261000000D+00 .3305240000D+01 .6073200000D+01 .2981300000D+01 -.1989600000D+01 +3 5320201228202108082459211.5 .3680000000D-01 .2880000000D-02 .3248692000D+03 .1800700000D+00 .1660000000D-03 .3430000000D+00 .4222392000D+01 .3547400000D+01 .4062100000D+01 -.4328800000D+01 .1103900000D+01 .2000000000D-04 .4342569000D+03 .2332000000D-01 .1140000000D-03 .4560000000D+00 .2561742000D+01 .1184800000D+01 .3939100000D+01 -.5636500000D+01 -.2432000000D+00 .4610000000D-02 .2941613000D+03 .1593200000D+00 .4540000000D-03 .2117000000D+00 .8805220000D+00 .3814900000D+01 .3629100000D+01 -.8666000000D+00 +4 5420100101201007262455197.4 -.2592000000D+00 .4700000000D-02 .1618529000D+03 .6526300000D+00 .1301000000D-02 .3557000000D+00 .4438119000D+01 .3177100000D+01 .2320000000D-01 .4946500000D+01 -.3733000000D+00 .3310000000D-02 .5623685000D+03 .2603600000D+00 .4370000000D-03 .4912000000D+00 .1597240000D+01 .3165900000D+01 .1040000000D-01 .5939600000D+01 -.1310300000D+01 .8100000000D-03 .5823074000D+03 .1109100000D+00 .1000000000D-03 .6582000000D+00 .4774000000D-02 .2498500000D+01 .5962200000D+01 .5115900000D+01 +4 5520100726201102172455403.4 .2839000000D+00 -.6600000000D-03 .2031986000D+03 .5989100000D+00 .2327000000D-02 .8189000000D+00 .5942927000D+01 .1952300000D+01 .5084000000D+01 .6206000000D+01 .1080000000D-01 -.1200000000D-03 .5631814000D+03 .2512600000D+00 .8840000000D-03 .1273000000D+00 .3553189000D+01 .1937600000D+01 .5080400000D+01 .5182600000D+01 -.8077000000D+00 -.1580000000D-02 .5682435000D+03 .1437500000D+00 .5030000000D-03 .5661000000D+00 .1918326000D+01 .1330100000D+01 .4590900000D+01 .2458900000D+01 +4 5620110217201109112455609.4 .5274000000D+00 -.1860000000D-02 .1871370000D+03 .7581800000D+00 .2613000000D-02 .1622000000D+00 .1652947000D+01 .6543000000D+00 .3791300000D+01 .4692000000D+00 .2293000000D+00 -.6700000000D-03 .5629245000D+03 .3246300000D+00 .1062000000D-02 .5527000000D+00 .5420246000D+01 .6738000000D+00 .3812200000D+01 .1615200000D+01 -.1132000000D+01 -.7300000000D-03 .5746104000D+03 .2313200000D+00 .7650000000D-03 .4070000000D+00 .3799267000D+01 .1468000000D+00 .3337300000D+01 .6120900000D+01 +4 5720110911201204042455815.4 .3738000000D+00 -.5000000000D-03 .2158169000D+03 .5380500000D+00 .3044000000D-02 .1347000000D+00 .3367921000D+01 .5703700000D+01 .2548700000D+01 .6056400000D+01 -.1324000000D+00 .8300000000D-03 .5638076000D+03 .2527200000D+00 .1312000000D-02 .5041000000D+00 .1068543000D+01 .5706300000D+01 .2549700000D+01 .5511300000D+01 -.1057400000D+01 -.2800000000D-03 .5626066000D+03 .1792800000D+00 .9780000000D-03 .5642000000D+00 .5706749000D+01 .5124800000D+01 .2065300000D+01 .3253200000D+01 +4 5820120404201210272456021.4 .4552000000D+00 -.1540000000D-02 .2260457000D+03 .5757500000D+00 .2809000000D-02 .1567000000D+00 .5204144000D+01 .4450000000D+01 .1302400000D+01 .5484200000D+01 .1618000000D+00 .5100000000D-03 .5646510000D+03 .2577400000D+00 .1213000000D-02 .6444000000D+00 .2965990000D+01 .4455400000D+01 .1311100000D+01 .2655100000D+01 -.1054500000D+01 -.7400000000D-03 .5575879000D+03 .2394900000D+00 .1140000000D-02 .3061000000D+00 .1313843000D+01 .3963300000D+01 .8736000000D+00 .1650000000D+01 +4 5920121027201305212456227.4 .6367000000D+00 -.2380000000D-02 .2260515000D+03 .1322000000D+00 .2066000000D-02 .6972000000D+00 .8186630000D+00 .3239900000D+01 .3700000000D-01 .2253700000D+01 .5600000000D-01 -.6500000000D-03 .5646573000D+03 .9182000000D-01 .9590000000D-03 .5067000000D+00 .4861383000D+01 .3185200000D+01 .3380000000D-01 .5631000000D+00 -.1150800000D+01 -.6100000000D-03 .5572824000D+03 .8701000000D-01 .9520000000D-03 .2394000000D+00 .3210416000D+01 .2520300000D+01 .5890700000D+01 .4297300000D+01 +4 6020130521201312132456433.4 .2424000000D+00 .1280000000D-02 .2709027000D+03 .1511500000D+00 .1578000000D-02 .3217000000D+00 .2550644000D+01 .1969200000D+01 .5071100000D+01 .3171200000D+01 .8220000000D-01 .1180000000D-02 .5674612000D+03 .9227000000D-01 .7590000000D-03 .4721000000D+00 .5070380000D+00 .1961600000D+01 .5087400000D+01 .3244600000D+01 -.1123800000D+01 .1350000000D-02 .5342746000D+03 .8676000000D-01 .8000000000D-03 .8645000000D+00 .5115121000D+01 .1352300000D+01 .4623800000D+01 .2726500000D+01 +4 6120131213201407072456639.4 -.1195000000D+00 .6230000000D-02 .2449452000D+03 .3255900000D+00 .3020000000D-03 .6482000000D+00 .4527500000D+01 .3740800000D+01 .4007600000D+01 .4081500000D+01 -.1633000000D+00 .3340000000D-02 .5654576000D+03 .9508000000D-01 .2420000000D-03 .2642000000D+00 .2377499000D+01 .3698800000D+01 .4011500000D+01 .1752700000D+01 -.1419700000D+01 .2000000000D-02 .5488337000D+03 .1255000000D+00 .3430000000D-03 .5576000000D+00 .7147730000D+00 .3646000000D+01 .3373500000D+01 .5788600000D+01 +4 6220140707201501292456845.4 .2958000000D+00 .1900000000D-02 .3098562000D+03 .3356700000D+00 .6530000000D-03 .9339000000D+00 .6240598000D+01 .2508500000D+01 .5593500000D+01 .5911900000D+01 .9130000000D-01 .4500000000D-03 .5704995000D+03 .9436000000D-01 .6300000000D-04 .8174000000D+00 .4321622000D+01 .2527400000D+01 .5416500000D+01 .5686100000D+01 -.9830000000D+00 .1300000000D-03 .5093813000D+03 .1825500000D+00 .3420000000D-03 .1963000000D+00 .2631277000D+01 .2454200000D+01 .5928600000D+01 .3994000000D+01 +4 6320150129201508232457051.4 .8827000000D+00 -.2790000000D-02 .2763901000D+03 .6234800000D+00 .1418000000D-02 .4956000000D+00 .1926010000D+01 .1249800000D+01 .4368400000D+01 .6166500000D+01 .3600000000D+00 .5000000000D-04 .5682232000D+03 .2009400000D+00 .3920000000D-03 .4245000000D+00 .6186713000D+01 .1290800000D+01 .4394900000D+01 .2387700000D+01 -.9874000000D+00 -.1250000000D-02 .5316644000D+03 .3514100000D+00 .7170000000D-03 .6372000000D+00 .4508232000D+01 .1108000000D+01 .4308700000D+01 .8493000000D+00 +4 6420150823201603162457257.4 .9279000000D+00 -.2840000000D-02 .3344110000D+03 .5742500000D+00 .2392000000D-02 .3749000000D+00 .3689733000D+01 .6274300000D+01 .3115100000D+01 .2128800000D+01 .2417000000D+00 -.1160000000D-02 .5733093000D+03 .1921400000D+00 .7120000000D-03 .7151000000D+00 .1839428000D+01 .1920000000D-01 .3147600000D+01 .3616000000D+00 -.8326000000D+00 -.2050000000D-02 .4911585000D+03 .3621600000D+00 .1472000000D-02 .1423000000D+00 .1440070000D+00 .6117600000D+01 .3018300000D+01 .4077700000D+01 +4 6520160316201610082457463.4 .5474000000D+00 .1800000000D-03 .3183506000D+03 .6790700000D+00 .2503000000D-02 .1837000000D+00 .5606669000D+01 .5032100000D+01 .1876800000D+01 .4801800000D+01 .4756000000D+00 -.5600000000D-03 .5716595000D+03 .2050500000D+00 .6950000000D-03 .3846000000D+00 .3716299000D+01 .5066500000D+01 .1906600000D+01 .3620800000D+01 -.1104400000D+01 .1160000000D-02 .5033703000D+03 .4835800000D+00 .1758000000D-02 .6701000000D+00 .2024320000D+01 .4896400000D+01 .1775500000D+01 .2693500000D+01 +4 6620161008201705022457669.4 .8025000000D+00 -.1290000000D-02 .3473348000D+03 .4252500000D+00 .2652000000D-02 .5112000000D+00 .1166226000D+01 .3791600000D+01 .6288000000D+00 .3049800000D+01 .1508000000D+00 .6100000000D-03 .5739758000D+03 .1505200000D+00 .7960000000D-03 .4137000000D+00 .5630677000D+01 .3837700000D+01 .6571000000D+00 .1203600000D+01 -.1166600000D+01 .4000000000D-04 .4802683000D+03 .3192000000D+00 .1939000000D-02 .3956000000D+00 .3933858000D+01 .3590000000D+01 .5012000000D+00 .3899000000D+00 +4 6720170502201711242457875.4 .6382000000D+00 -.2000000000D-04 .3656787000D+03 .4555700000D+00 .2373000000D-02 .2937000000D+00 .3020828000D+01 .2520100000D+01 .5638500000D+01 .1341800000D+01 .3379000000D+00 -.2000000000D-04 .5758631000D+03 .1336500000D+00 .6410000000D-03 .4416000000D+00 .1243008000D+01 .2579000000D+01 .5685000000D+01 .5648200000D+01 -.8687000000D+00 -.1000000000D-03 .4648500000D+03 .3989500000D+00 .2038000000D-02 .6412000000D+00 .5828148000D+01 .2375100000D+01 .5533400000D+01 .2970800000D+01 +4 6820171124201806182458081.4 .4481000000D+00 .3410000000D-02 .3602964000D+03 .4618000000D-01 .1588000000D-02 .6422000000D+00 .4926997000D+01 .1764000000D+01 .4417600000D+01 .3860400000D+01 .3242000000D+00 .8600000000D-03 .5749994000D+03 .4424000000D-01 .4710000000D-03 .4635000000D+00 .3135766000D+01 .1601300000D+01 .4518800000D+01 .3041500000D+01 -.1475400000D+01 .4010000000D-02 .4690201000D+03 .7407000000D-01 .1492000000D-02 .1446000000D+00 .1439079000D+01 .8489000000D+00 .4282100000D+01 .1147700000D+01 +4 6920180618201901102458287.4 .5260000000D+00 .2740000000D-02 .4101544000D+03 .4760000000D-01 .9900000000D-03 .4387000000D+00 .4559870000D+00 .5578000000D+00 .3226100000D+01 .5342000000D+01 .2307000000D+00 .4300000000D-03 .5787373000D+03 .5054000000D-01 .3710000000D-03 .7896000000D+00 .5043773000D+01 .1519000000D+00 .3251400000D+01 .6910000000D-01 -.1197200000D+01 .3520000000D-02 .4211903000D+03 .6057000000D-01 .9950000000D-03 .7215000000D+00 .3355462000D+01 .5820700000D+01 .2971800000D+01 .5147900000D+01 +4 7020190110201908042458493.4 .9259000000D+00 -.8300000000D-03 .3817096000D+03 .3469700000D+00 .6400000000D-04 .8491000000D+00 .2389075000D+01 .1808700000D+01 .4284100000D+01 .6053200000D+01 .5337000000D+00 .0000000000D+00 .5770189000D+03 .4028000000D-01 .6700000000D-04 .4195000000D+00 .6445220000D+00 .1559200000D+01 .2534000000D+01 .4110500000D+01 -.8794000000D+00 -.3600000000D-03 .4500778000D+03 .2924300000D+00 .2100000000D-03 .3904000000D+00 .5232256000D+01 .1931900000D+01 .1302300000D+01 .4605000000D+00 +4 7120190804202002262458699.4 .1500200000D+01 -.5620000000D-02 .4428590000D+03 .3367300000D+00 .8750000000D-03 .4075000000D+00 .4196930000D+01 .4984000000D+00 .3542800000D+01 .2302700000D+01 .3687000000D+00 -.9700000000D-03 .5816394000D+03 .2442000000D-01 .8800000000D-04 .3754000000D+00 .2552915000D+01 .6193500000D+01 .1550400000D+01 .9251000000D+00 -.3733000000D+00 -.4930000000D-02 .3834818000D+03 .3426300000D+00 .8350000000D-03 .7782000000D+00 .8834770000D+00 .6193000000D+00 .3811100000D+01 .6923000000D+00 +4 7220200226202009192458905.4 .9594000000D+00 -.1270000000D-02 .4142974000D+03 .5636900000D+00 .1473000000D-02 .3496000000D+00 .6123464000D+01 .5570000000D+01 .2405300000D+01 .1675800000D+01 .4726000000D+00 .3300000000D-03 .5795742000D+03 .4699000000D-01 .1060000000D-03 .4540000000D+00 .4436572000D+01 .5252000000D+01 .1760500000D+01 .5341500000D+01 -.7577000000D+00 -.9000000000D-04 .4174170000D+03 .6020700000D+00 .1478000000D-02 .7516000000D+00 .2750282000D+01 .5667700000D+01 .2555800000D+01 .2991900000D+01 +4 7320200919202104132459111.4 .8510000000D+00 .1170000000D-02 .4621968000D+03 .4676300000D+00 .2116000000D-02 .7375000000D+00 .1674687000D+01 .4332500000D+01 .1165000000D+01 .3667300000D+01 .3540000000D+00 .4100000000D-03 .5823298000D+03 .3145000000D-01 .9800000000D-04 .3982000000D+00 .5555300000D-01 .4062000000D+01 .1690000000D+00 .3297300000D+01 -.1098200000D+01 .1360000000D-02 .3583225000D+03 .5394800000D+00 .2382000000D-02 .1959000000D+00 .4685287000D+01 .4406200000D+01 .1282700000D+01 .2254300000D+01 +5 7420100101201002112455197.0 -.7120000000D-01 .1800000000D-03 .4464790000D+02 .2210650000D+01 .3536700000D-01 .1932000000D+00 .1778805000D+01 .2130000000D-01 .4104600000D+01 -.3294300000D+01 .5140000000D-01 -.3600000000D-03 .1271107000D+03 .6189940000D+01 .1023120000D+00 .3686000000D+00 .5469862000D+01 .3749300000D+01 .1523800000D+01 -.1281000000D+00 .2654000000D+00 -.1310000000D-02 .1344505000D+03 .7065880000D+01 .1084970000D+00 .3690000000D+00 .3873768000D+01 .2057500000D+01 .5998500000D+01 -.2166000000D+00 +5 7520100211201003242455238.0 -.8180000000D-01 .1200000000D-03 .4690110000D+02 .2358150000D+01 .3768400000D-01 .2129000000D+00 .1749219000D+01 .6275900000D+01 .4069500000D+01 -.3317900000D+01 .4300000000D-01 -.8500000000D-03 .1268226000D+03 .6150360000D+01 .1015990000D+00 .3409000000D+00 .5508520000D+01 .3793600000D+01 .1567100000D+01 -.9480000000D-01 .2292000000D+00 .5000000000D-04 .1337352000D+03 .6957550000D+01 .1060740000D+00 .3751000000D+00 .3900853000D+01 .2084000000D+01 .6028200000D+01 -.2870000000D+00 +5 7620100324201005042455279.0 -.9020000000D-01 .2900000000D-03 .5002990000D+02 .2491110000D+01 .3918900000D-01 .2250000000D+00 .1711029000D+01 .6235000000D+01 .4025200000D+01 -.3312000000D+01 .1230000000D-01 -.2000000000D-03 .1265841000D+03 .6132860000D+01 .1015650000D+00 .3128000000D+00 .5561821000D+01 .3853200000D+01 .1623900000D+01 -.1227000000D+00 .2448000000D+00 -.1040000000D-02 .1326293000D+03 .6814320000D+01 .1029480000D+00 .3756000000D+00 .3938378000D+01 .2121100000D+01 .6072400000D+01 -.2072000000D+00 +5 7720100504201006142455320.0 -.8710000000D-01 .3100000000D-03 .5303020000D+02 .2578830000D+01 .3974900000D-01 .2259000000D+00 .1696407000D+01 .6213600000D+01 .3999800000D+01 -.3318400000D+01 .1030000000D-01 -.9000000000D-03 .1264107000D+03 .6159790000D+01 .1025980000D+00 .2860000000D+00 .5626160000D+01 .3921800000D+01 .1685700000D+01 -.5020000000D-01 .2205000000D+00 .6000000000D-04 .1314222000D+03 .6686500000D+01 .1003090000D+00 .3869000000D+00 .3987277000D+01 .2171200000D+01 .6131300000D+01 -.2620000000D+00 +5 7820100614201007252455361.0 -.7730000000D-01 .3300000000D-03 .5487100000D+02 .2588020000D+01 .3909500000D-01 .2169000000D+00 .1718329000D+01 .6225400000D+01 .4009700000D+01 -.3317500000D+01 -.2980000000D-01 .2000000000D-03 .1263218000D+03 .6224050000D+01 .1043990000D+00 .2536000000D+00 .5692458000D+01 .3988800000D+01 .1744000000D+01 -.1096000000D+00 .2505000000D+00 -.8800000000D-03 .1307536000D+03 .6613530000D+01 .9871900000D-01 .4114000000D+00 .4042390000D+01 .2227300000D+01 .6197000000D+01 -.2022000000D+00 +5 7920100725201009042455402.0 -.6710000000D-01 .5300000000D-03 .5485490000D+02 .2519250000D+01 .3766700000D-01 .1997000000D+00 .1778629000D+01 .6279200000D+01 .4065200000D+01 -.3293900000D+01 -.1720000000D-01 -.9200000000D-03 .1262210000D+03 .6316640000D+01 .1067380000D+00 .2370000000D+00 .5751199000D+01 .4045000000D+01 .1789500000D+01 -.6275800000D+01 .2528000000D+00 -.1800000000D-03 .1309345000D+03 .6624930000D+01 .9887200000D-01 .4415000000D+00 .4097202000D+01 .2282500000D+01 .6258700000D+01 -.2288000000D+00 +5 8020100904201010152455443.0 -.4700000000D-01 .1900000000D-03 .5318040000D+02 .2411480000D+01 .3636100000D-01 .1801000000D+00 .1868116000D+01 .9090000000D-01 .4170500000D+01 -.3315700000D+01 -.4160000000D-01 .3400000000D-03 .1261214000D+03 .6398500000D+01 .1086480000D+00 .2268000000D+00 .5794532000D+01 .4084300000D+01 .1820400000D+01 -.1095000000D+00 .2750000000D+00 -.6700000000D-03 .1319757000D+03 .6700570000D+01 .1000640000D+00 .4676000000D+00 .4143755000D+01 .2325500000D+01 .2030000000D-01 -.2070000000D+00 +5 8120101015201011252455484.0 -.4420000000D-01 .4200000000D-03 .5102540000D+02 .2351450000D+01 .3669600000D-01 .1703000000D+00 .1965143000D+01 .2084000000D+00 .4297000000D+01 -.3257900000D+01 -.1390000000D-01 -.8700000000D-03 .1259639000D+03 .6444800000D+01 .1096110000D+00 .2339000000D+00 .5822292000D+01 .4109500000D+01 .1839500000D+01 -.6273100000D+01 .2738000000D+00 -.4900000000D-03 .1331577000D+03 .6786460000D+01 .1013920000D+00 .4813000000D+00 .4178549000D+01 .2354500000D+01 .4710000000D-01 -.2182000000D+00 +5 8220101125201101052455525.0 -.3630000000D-01 -.7000000000D-04 .4988120000D+02 .2388770000D+01 .3877400000D-01 .1722000000D+00 .2035284000D+01 .2991000000D+00 .4386800000D+01 -.3303500000D+01 -.4540000000D-01 .4600000000D-03 .1258485000D+03 .6438030000D+01 .1091890000D+00 .2165000000D+00 .5842944000D+01 .4129500000D+01 .1857700000D+01 -.1069000000D+00 .2721000000D+00 -.6800000000D-03 .1338403000D+03 .6819740000D+01 .1016120000D+00 .4871000000D+00 .4203101000D+01 .2373700000D+01 .6370000000D-01 -.2185000000D+00 +5 8320110105201102152455566.0 -.5560000000D-01 .4100000000D-03 .5046070000D+02 .2501880000D+01 .4156800000D-01 .1885000000D+00 .2055299000D+01 .3311000000D+00 .4412500000D+01 -.3245300000D+01 -.2990000000D-01 -.8800000000D-03 .1257054000D+03 .6404570000D+01 .1081140000D+00 .2025000000D+00 .5868171000D+01 .4156300000D+01 .1883200000D+01 -.6242500000D+01 .2671000000D+00 -.9500000000D-03 .1336766000D+03 .6774220000D+01 .1005220000D+00 .4815000000D+00 .4224825000D+01 .2393100000D+01 .8350000000D-01 -.2044000000D+00 +5 8420110215201103282455607.0 -.5660000000D-01 -.5000000000D-04 .5263160000D+02 .2637660000D+01 .4384800000D-01 .2061000000D+00 .2036652000D+01 .3158000000D+00 .4395400000D+01 -.3323000000D+01 -.6430000000D-01 .2700000000D-03 .1256609000D+03 .6368970000D+01 .1069640000D+00 .1682000000D+00 .5906829000D+01 .4196700000D+01 .1922800000D+01 -.8490000000D-01 .2417000000D+00 -.4200000000D-03 .1327313000D+03 .6655920000D+01 .9814300000D-01 .4767000000D+00 .4251735000D+01 .2420200000D+01 .1151000000D+00 -.2337000000D+00 +5 8520110328201105082455648.0 -.7410000000D-01 .5800000000D-03 .5567560000D+02 .2759860000D+01 .4532900000D-01 .2224000000D+00 .2010955000D+01 .2890000000D+00 .4368800000D+01 -.3261900000D+01 -.5880000000D-01 -.8200000000D-03 .1256769000D+03 .6366260000D+01 .1065820000D+00 .1489000000D+00 .5960288000D+01 .4251200000D+01 .1973000000D+01 -.6178200000D+01 .2421000000D+00 -.1020000000D-02 .1312234000D+03 .6495260000D+01 .9523700000D-01 .4708000000D+00 .4289078000D+01 .2460500000D+01 .1655000000D+00 -.1901000000D+00 +5 8620110508201106182455689.0 -.5990000000D-01 .1000000000D-04 .5858200000D+02 .2837090000D+01 .4571900000D-01 .2226000000D+00 .2006226000D+01 .2770000000D+00 .4356800000D+01 -.3322100000D+01 -.9810000000D-01 .1900000000D-03 .1258571000D+03 .6400700000D+01 .1070120000D+00 .1039000000D+00 .6024713000D+01 .4313400000D+01 .2028900000D+01 -.6242300000D+01 .2173000000D+00 -.1500000000D-03 .1296161000D+03 .6344690000D+01 .9272500000D-01 .4713000000D+00 .4337593000D+01 .2514800000D+01 .2330000000D+00 -.2229000000D+00 +5 8720110618201107292455730.0 -.6540000000D-01 .7100000000D-03 .6030770000D+02 .2845470000D+01 .4509900000D-01 .2147000000D+00 .2033860000D+01 .2951000000D+00 .4372300000D+01 -.3245200000D+01 -.1049000000D+00 -.4600000000D-03 .1260200000D+03 .6475070000D+01 .1083360000D+00 .8090000000D-01 .6091077000D+01 .4374700000D+01 .2081000000D+01 -.5945700000D+01 .2399000000D+00 -.1170000000D-02 .1285876000D+03 .6251420000D+01 .9155500000D-01 .4764000000D+00 .4392946000D+01 .2577900000D+01 .3110000000D+00 -.1596000000D+00 +5 8820110729201109082455771.0 -.3990000000D-01 .6000000000D-04 .6020710000D+02 .2781920000D+01 .4364400000D-01 .1928000000D+00 .2095772000D+01 .3485000000D+00 .4423600000D+01 -.3322000000D+01 -.1264000000D+00 .1400000000D-03 .1261571000D+03 .6566970000D+01 .1101190000D+00 .4800000000D-01 .6150498000D+01 .4426800000D+01 .2124000000D+01 -.5859600000D+01 .2226000000D+00 .5000000000D-04 .1286191000D+03 .6250470000D+01 .9203800000D-01 .4956000000D+00 .4448582000D+01 .2639400000D+01 .3830000000D+00 -.2233000000D+00 +5 8920110908201110192455812.0 -.3550000000D-01 .5600000000D-03 .5842140000D+02 .2687480000D+01 .4249600000D-01 .1729000000D+00 .2182811000D+01 .4383000000D+00 .4512900000D+01 -.3240200000D+01 -.1273000000D+00 -.1400000000D-03 .1261320000D+03 .6654850000D+01 .1118090000D+00 .4740000000D-01 .6194808000D+01 .4464000000D+01 .2152500000D+01 -.5617700000D+01 .2611000000D+00 -.1250000000D-02 .1296847000D+03 .6319100000D+01 .9361100000D-01 .5215000000D+00 .4496262000D+01 .2688000000D+01 .4364000000D+00 -.1584000000D+00 +5 9020111019201111292455853.0 -.1370000000D-01 .2000000000D-04 .5611610000D+02 .2641040000D+01 .4289700000D-01 .1511000000D+00 .2276416000D+01 .5461000000D+00 .4617400000D+01 -.3286400000D+01 -.1297000000D+00 .3000000000D-04 .1260620000D+03 .6698830000D+01 .1125330000D+00 .3860000000D-01 .6223773000D+01 .4488400000D+01 .2171900000D+01 -.5441700000D+01 .2405000000D+00 .1000000000D-04 .1309890000D+03 .6408440000D+01 .9517400000D-01 .5375000000D+00 .4532660000D+01 .2720500000D+01 .4669000000D+00 -.2160000000D+00 +5 9120111129201201092455894.0 -.1700000000D-01 .3300000000D-03 .5476920000D+02 .2687460000D+01 .4513500000D-01 .1476000000D+00 .2344339000D+01 .6319000000D+00 .4693700000D+01 -.3211500000D+01 -.1332000000D+00 .1700000000D-03 .1259500000D+03 .6692190000D+01 .1119810000D+00 .3560000000D-01 .6244687000D+01 .4507800000D+01 .2189300000D+01 -.5440200000D+01 .2660000000D+00 -.1430000000D-02 .1317804000D+03 .6445320000D+01 .9563800000D-01 .5380000000D+00 .4558394000D+01 .2741300000D+01 .4856000000D+00 -.1532000000D+00 +5 9220120109201202192455935.0 -.1660000000D-01 .2000000000D-04 .5517110000D+02 .2801090000D+01 .4800900000D-01 .1540000000D+00 .2367829000D+01 .6668000000D+00 .4721000000D+01 -.3267000000D+01 -.1269000000D+00 -.1300000000D-03 .1259345000D+03 .6649620000D+01 .1105610000D+00 .3680000000D-01 .6270194000D+01 .4533600000D+01 .2215700000D+01 -.4865100000D+01 .2251000000D+00 -.8000000000D-04 .1315831000D+03 .6408040000D+01 .9474000000D-01 .5293000000D+00 .4581486000D+01 .2761800000D+01 .5049000000D+00 -.2248000000D+00 +5 9320120219201203312455976.0 -.2810000000D-01 .3100000000D-03 .5717640000D+02 .2931870000D+01 .5044300000D-01 .1717000000D+00 .2355605000D+01 .6612000000D+00 .4714100000D+01 -.3238200000D+01 -.1498000000D+00 .3700000000D-03 .1260534000D+03 .6608860000D+01 .1089730000D+00 .3460000000D-01 .2494500000D-01 .4571000000D+01 .2253400000D+01 -.4120200000D+01 .2369000000D+00 -.1400000000D-02 .1304623000D+03 .6288620000D+01 .9262600000D-01 .5196000000D+00 .4608926000D+01 .2790600000D+01 .5387000000D+00 -.1625000000D+00 +5 9420120331201205112456017.0 -.3020000000D-01 .2300000000D-03 .6008260000D+02 .3046720000D+01 .5193000000D-01 .1816000000D+00 .2338082000D+01 .6436000000D+00 .4698700000D+01 -.3261100000D+01 -.1460000000D+00 -.4500000000D-03 .1263527000D+03 .6591320000D+01 .1078780000D+00 .7280000000D-01 .7766400000D-01 .4621300000D+01 .2302700000D+01 -.3918400000D+01 .1967000000D+00 -.2100000000D-03 .1286080000D+03 .6134800000D+01 .9030300000D-01 .5034000000D+00 .4647686000D+01 .2835500000D+01 .5926000000D+00 -.2081000000D+00 +5 9520120511201206212456058.0 -.3080000000D-01 .3200000000D-03 .6286140000D+02 .3116180000D+01 .5231000000D-01 .1863000000D+00 .2338420000D+01 .6386000000D+00 .4694900000D+01 -.3247000000D+01 -.1812000000D+00 .5100000000D-03 .1267655000D+03 .6610560000D+01 .1074900000D+00 .9100000000D-01 .1403900000D+00 .4678400000D+01 .2356600000D+01 -.3530600000D+01 .2029000000D+00 -.1180000000D-02 .1266910000D+03 .5985070000D+01 .8850500000D-01 .4876000000D+00 .4697107000D+01 .2895700000D+01 .6667000000D+00 -.1481000000D+00 +5 9620120621201208012456099.0 -.2480000000D-01 .2900000000D-03 .6449930000D+02 .3121680000D+01 .5155900000D-01 .1766000000D+00 .2369580000D+01 .6591000000D+00 .4713000000D+01 -.3251000000D+01 -.1739000000D+00 -.4900000000D-03 .1271643000D+03 .6664090000D+01 .1080110000D+00 .1314000000D+00 .2060520000D+00 .4736100000D+01 .2409000000D+01 -.3656700000D+01 .1752000000D+00 -.2400000000D-03 .1253672000D+03 .5904330000D+01 .8826300000D-01 .4782000000D+00 .4754616000D+01 .2966800000D+01 .7505000000D+00 -.1904000000D+00 +5 9720120801201209112456140.0 -.9500000000D-02 .1100000000D-03 .6434780000D+02 .3059860000D+01 .4997900000D-01 .1576000000D+00 .2431309000D+01 .7102000000D+00 .4759600000D+01 -.3259100000D+01 -.2192000000D+00 .8100000000D-03 .1274684000D+03 .6740890000D+01 .1090770000D+00 .1572000000D+00 .2648790000D+00 .4784900000D+01 .2451500000D+01 -.3427900000D+01 .1888000000D+00 -.9000000000D-03 .1252689000D+03 .5909570000D+01 .8959100000D-01 .4860000000D+00 .4811792000D+01 .3035800000D+01 .8291000000D+00 -.1505000000D+00 +5 9820120911201210222456181.0 -.1500000000D-02 .3900000000D-03 .6253470000D+02 .2974370000D+01 .4863100000D-01 .1304000000D+00 .2516939000D+01 .7913000000D+00 .4834200000D+01 -.3204800000D+01 -.2037000000D+00 -.4200000000D-03 .1275483000D+03 .6814640000D+01 .1103050000D+00 .1845000000D+00 .3098560000D+00 .4821500000D+01 .2481700000D+01 -.3563600000D+01 .1869000000D+00 -.4800000000D-03 .1262894000D+03 .5998660000D+01 .9208600000D-01 .4995000000D+00 .4862296000D+01 .3091500000D+01 .8858000000D+00 -.1680000000D+00 +5 9920121022201212022456222.0 .1870000000D-01 -.2000000000D-04 .6017090000D+02 .2934940000D+01 .4878500000D-01 .1063000000D+00 .2606616000D+01 .8869000000D+00 .4920700000D+01 -.3247600000D+01 -.2294000000D+00 .9000000000D-03 .1275083000D+03 .6851950000D+01 .1107230000D+00 .1840000000D+00 .3392230000D+00 .4845300000D+01 .2501700000D+01 -.3406800000D+01 .1976000000D+00 -.6900000000D-03 .1277389000D+03 .6095860000D+01 .9409200000D-01 .5138000000D+00 .4900123000D+01 .3127100000D+01 .9186000000D+00 -.1577000000D+00 +5 10020121202201301122456263.0 .1670000000D-01 .3700000000D-03 .5871450000D+02 .2987740000D+01 .5086300000D-01 .9580000000D-01 .2673150000D+01 .9641000000D+00 .4985400000D+01 -.3119500000D+01 -.1979000000D+00 -.2700000000D-03 .1274076000D+03 .6838410000D+01 .1100710000D+00 .1899000000D+00 .3609370000D+00 .4865600000D+01 .2521200000D+01 -.3555300000D+01 .1956000000D+00 -.6900000000D-03 .1286073000D+03 .6147080000D+01 .9487900000D-01 .5170000000D+00 .4927858000D+01 .3149800000D+01 .9368000000D+00 -.1635000000D+00 +5 10120130112201302222456304.0 .2940000000D-01 -.1600000000D-03 .5899430000D+02 .3104680000D+01 .5375500000D-01 .9370000000D-01 .2697889000D+01 .9986000000D+00 .5011400000D+01 -.3219300000D+01 -.2250000000D+00 .1020000000D-02 .1274653000D+03 .6786190000D+01 .1083790000D+00 .2005000000D+00 .3859340000D+00 .4890700000D+01 .2548700000D+01 -.3406500000D+01 .1803000000D+00 -.5000000000D-03 .1284329000D+03 .6111450000D+01 .9398700000D-01 .5072000000D+00 .4951766000D+01 .3170400000D+01 .9560000000D+00 -.1728000000D+00 +5 10220130222201304042456345.0 .1420000000D-01 .4900000000D-03 .6087800000D+02 .3238770000D+01 .5633900000D-01 .1048000000D+00 .2690454000D+01 .9983000000D+00 .5008800000D+01 -.3093600000D+01 -.2063000000D+00 -.1500000000D-03 .1276566000D+03 .6726960000D+01 .1064580000D+00 .2241000000D+00 .4229960000D+00 .4927800000D+01 .2589300000D+01 -.3498400000D+01 .1752000000D+00 -.1050000000D-02 .1271535000D+03 .6010110000D+01 .9229200000D-01 .4874000000D+00 .4981195000D+01 .3201500000D+01 .9879000000D+00 -.1480000000D+00 +5 10320130404201305152456386.0 .2220000000D-01 -.9000000000D-04 .6368020000D+02 .3350310000D+01 .5789500000D-01 .1122000000D+00 .2677081000D+01 .9871000000D+00 .5000300000D+01 -.3240400000D+01 -.2293000000D+00 .7200000000D-03 .1280815000D+03 .6683880000D+01 .1047390000D+00 .2467000000D+00 .4736540000D+00 .4976000000D+01 .2641200000D+01 -.3392800000D+01 .1434000000D+00 -.3300000000D-03 .1251500000D+03 .5869170000D+01 .9029000000D-01 .4627000000D+00 .5021285000D+01 .3248300000D+01 .1040100000D+01 -.1797000000D+00 +5 10420130515201306252456427.0 .8500000000D-02 .5400000000D-03 .6636050000D+02 .3418030000D+01 .5831600000D-01 .1209000000D+00 .2680895000D+01 .9866000000D+00 .5000800000D+01 -.3118700000D+01 -.2218000000D+00 -.7000000000D-04 .1285712000D+03 .6672380000D+01 .1037310000D+00 .2720000000D+00 .5345670000D+00 .5032000000D+01 .2699100000D+01 -.3440200000D+01 .1410000000D+00 -.1140000000D-02 .1230077000D+03 .5748740000D+01 .8929600000D-01 .4406000000D+00 .5073181000D+01 .3313400000D+01 .1111400000D+01 -.1278000000D+00 +5 10520130625201308052456468.0 .2870000000D-01 -.2300000000D-03 .6796600000D+02 .3418580000D+01 .5742000000D-01 .1087000000D+00 .2712931000D+01 .1007500000D+01 .5020200000D+01 -.3240800000D+01 -.2507000000D+00 .6200000000D-03 .1290751000D+03 .6691620000D+01 .1034490000D+00 .3052000000D+00 .5981580000D+00 .5088100000D+01 .2755400000D+01 -.3380300000D+01 .1023000000D+00 -.8000000000D-04 .1215513000D+03 .5695790000D+01 .8979100000D-01 .4148000000D+00 .5133081000D+01 .3389100000D+01 .1192500000D+01 -.1688000000D+00 +5 10620130805201309152456509.0 .2410000000D-01 .4000000000D-03 .6779980000D+02 .3354800000D+01 .5560600000D-01 .9380000000D-01 .2773550000D+01 .1054300000D+01 .5061500000D+01 -.3080100000D+01 -.2612000000D+00 .2800000000D-03 .1293754000D+03 .6737940000D+01 .1039450000D+00 .3328000000D+00 .6561320000D+00 .5137400000D+01 .2803000000D+01 -.3391700000D+01 .1150000000D+00 -.1220000000D-02 .1213760000D+03 .5743860000D+01 .9223700000D-01 .4048000000D+00 .5193402000D+01 .3463800000D+01 .1266600000D+01 -.9530000000D-01 +5 10720130915201310262456550.0 .4550000000D-01 -.2000000000D-03 .6600230000D+02 .3261400000D+01 .5375100000D-01 .6460000000D-01 .2855433000D+01 .1125500000D+01 .5126700000D+01 -.3217600000D+01 -.2723000000D+00 .4500000000D-03 .1294947000D+03 .6790740000D+01 .1046890000D+00 .3559000000D+00 .7009340000D+00 .5174200000D+01 .2836700000D+01 -.3388200000D+01 .9050000000D-01 .9000000000D-04 .1224960000D+03 .5862170000D+01 .9538800000D-01 .4049000000D+00 .5246169000D+01 .3522200000D+01 .1320500000D+01 -.1706000000D+00 +5 10820131026201312062456591.0 .4760000000D-01 .3100000000D-03 .6359450000D+02 .3216370000D+01 .5339300000D-01 .4480000000D-01 .2940568000D+01 .1208500000D+01 .5200800000D+01 -.2899100000D+01 -.2759000000D+00 .5900000000D-03 .1294321000D+03 .6817850000D+01 .1049510000D+00 .3619000000D+00 .7309500000D+00 .5199100000D+01 .2859600000D+01 -.3378200000D+01 .1207000000D+00 -.1150000000D-02 .1240546000D+03 .5985930000D+01 .9805900000D-01 .4224000000D+00 .5285782000D+01 .3559900000D+01 .1351000000D+01 -.9720000000D-01 +5 10920131206201401162456632.0 .6750000000D-01 -.1100000000D-03 .6210390000D+02 .3262820000D+01 .5501000000D-01 .2150000000D-01 .3003759000D+01 .1275800000D+01 .5257900000D+01 -.2781000000D+01 -.2659000000D+00 .4300000000D-03 .1293461000D+03 .6796680000D+01 .1042000000D+00 .3681000000D+00 .7527740000D+00 .5220300000D+01 .2881500000D+01 -.3395300000D+01 .9410000000D-01 .1700000000D-03 .1250543000D+03 .6046580000D+01 .9891700000D-01 .4195000000D+00 .5314807000D+01 .3582300000D+01 .1368000000D+01 -.1671000000D+00 +5 11020140116201402262456673.0 .6730000000D-01 .2200000000D-03 .6231620000D+02 .3382280000D+01 .5778700000D-01 .2490000000D-01 .3028214000D+01 .1307500000D+01 .5281100000D+01 -.2341500000D+01 -.2716000000D+00 .1000000000D-02 .1293526000D+03 .6735600000D+01 .1025520000D+00 .3675000000D+00 .7774500000D+00 .5246700000D+01 .2912900000D+01 -.3354900000D+01 .1127000000D+00 -.1140000000D-02 .1248942000D+03 .6021450000D+01 .9816500000D-01 .4120000000D+00 .5339674000D+01 .3603000000D+01 .1384600000D+01 -.9390000000D-01 +5 11120140226201404082456714.0 .7090000000D-01 .0000000000D+00 .6417980000D+02 .3519500000D+01 .6041500000D-01 .2190000000D-01 .3023261000D+01 .1309800000D+01 .5281700000D+01 -.2503000000D+01 -.2487000000D+00 .2100000000D-03 .1295482000D+03 .6662780000D+01 .1006070000D+00 .3817000000D+00 .8133570000D+00 .5285000000D+01 .2958200000D+01 -.3406400000D+01 .7680000000D-01 .4000000000D-04 .1235911000D+03 .5924540000D+01 .9618800000D-01 .3854000000D+00 .5370445000D+01 .3632500000D+01 .1413000000D+01 -.1728000000D+00 +5 11220140408201405192456755.0 .6680000000D-01 .1800000000D-03 .6694160000D+02 .3637990000D+01 .6215200000D-01 .3240000000D-01 .3012782000D+01 .1302800000D+01 .5275800000D+01 -.2622200000D+01 -.2687000000D+00 .1100000000D-02 .1299332000D+03 .6597630000D+01 .9876400000D-01 .3967000000D+00 .8621360000D+00 .5334100000D+01 .3016100000D+01 -.3337900000D+01 .8020000000D-01 -.1060000000D-02 .1214785000D+03 .5799910000D+01 .9425300000D-01 .3639000000D+00 .5411900000D+01 .3679300000D+01 .1459400000D+01 -.9690000000D-01 +5 11320140519201406292456796.0 .6810000000D-01 .5000000000D-04 .6963940000D+02 .3705920000D+01 .6260600000D-01 .3100000000D-01 .3018581000D+01 .1305000000D+01 .5279300000D+01 -.2672200000D+01 -.2496000000D+00 -.1000000000D-04 .1303539000D+03 .6557240000D+01 .9756300000D-01 .4192000000D+00 .9209230000D+00 .5392000000D+01 .3081700000D+01 -.3388100000D+01 .4010000000D-01 -.1600000000D-03 .1192875000D+03 .5704790000D+01 .9324200000D-01 .3239000000D+00 .5466418000D+01 .3743300000D+01 .1522800000D+01 -.1435000000D+00 +5 11420140629201408092456837.0 .7170000000D-01 -.6000000000D-04 .7123410000D+02 .3705380000D+01 .6166600000D-01 .2900000000D-01 .3049956000D+01 .1325400000D+01 .5297800000D+01 -.2692400000D+01 -.2835000000D+00 .1210000000D-02 .1307391000D+03 .6544180000D+01 .9705100000D-01 .4344000000D+00 .9826920000D+00 .5450200000D+01 .3146700000D+01 -.3308500000D+01 .3110000000D-01 -.8600000000D-03 .1178258000D+03 .5688460000D+01 .9407300000D-01 .2943000000D+00 .5528357000D+01 .3818400000D+01 .1594300000D+01 -.6830000000D-01 +5 11520140809201409192456878.0 .7050000000D-01 .0000000000D+00 .7109120000D+02 .3630820000D+01 .5956600000D-01 .1990000000D-01 .3107981000D+01 .1368000000D+01 .5336900000D+01 -.2184200000D+01 -.2649000000D+00 -.1100000000D-03 .1309401000D+03 .6565440000D+01 .9739300000D-01 .4576000000D+00 .1039954000D+01 .5502600000D+01 .3201700000D+01 -.3384100000D+01 .2900000000D-02 -.2000000000D-03 .1177660000D+03 .5773670000D+01 .9672800000D-01 .2644000000D+00 .5591360000D+01 .3891300000D+01 .1660300000D+01 -.1096000000D+00 +5 11620140919201410302456919.0 .8480000000D-01 -.2800000000D-03 .6926320000D+02 .3523070000D+01 .5723700000D-01 .1540000000D-01 .3184385000D+01 .1430200000D+01 .5395200000D+01 -.8782000000D+00 -.3054000000D+00 .1310000000D-02 .1310004000D+03 .6597010000D+01 .9793200000D-01 .4786000000D+00 .1084468000D+01 .5541300000D+01 .3241200000D+01 -.3313300000D+01 -.6000000000D-03 -.4700000000D-03 .1190410000D+03 .5929100000D+01 .1003750000D+00 .2607000000D+00 .5645368000D+01 .3948500000D+01 .1707800000D+01 -.6490000000D-01 +5 11720141030201412102456960.0 .8670000000D-01 .1900000000D-03 .6681870000D+02 .3455660000D+01 .5620600000D-01 .4420000000D-01 .3263134000D+01 .1502400000D+01 .5463300000D+01 -.5933000000D+00 -.2813000000D+00 .5000000000D-04 .1308599000D+03 .6616920000D+01 .9826700000D-01 .4904000000D+00 .1115061000D+01 .5569000000D+01 .3268200000D+01 -.3375400000D+01 -.1500000000D-02 -.3000000000D-03 .1208213000D+03 .6079090000D+01 .1032970000D+00 .2593000000D+00 .5686461000D+01 .3984400000D+01 .1734400000D+01 -.7280000000D-01 +5 11820141210201501202457001.0 .1087000000D+00 -.2500000000D-03 .6526240000D+02 .3486230000D+01 .5724200000D-01 .6060000000D-01 .3320617000D+01 .1560700000D+01 .5515500000D+01 -.3133000000D+00 -.3014000000D+00 .1420000000D-02 .1307479000D+03 .6591880000D+01 .9763100000D-01 .4859000000D+00 .1136903000D+01 .5591400000D+01 .3293500000D+01 -.3310600000D+01 -.6000000000D-03 -.1400000000D-03 .1219543000D+03 .6149810000D+01 .1042780000D+00 .2660000000D+00 .5715148000D+01 .4005300000D+01 .1748700000D+01 -.8120000000D-01 +5 11920150120201503022457042.0 .1045000000D+00 .3000000000D-03 .6548380000D+02 .3600010000D+01 .5976200000D-01 .7590000000D-01 .3343445000D+01 .1589700000D+01 .5538800000D+01 -.4931000000D+00 -.2620000000D+00 .2200000000D-03 .1306943000D+03 .6535270000D+01 .9641100000D-01 .4820000000D+00 .1161608000D+01 .5620300000D+01 .3328300000D+01 -.3375100000D+01 .5900000000D-02 -.4000000000D-03 .1218403000D+03 .6121480000D+01 .1032210000D+00 .2576000000D+00 .5740692000D+01 .4023900000D+01 .1763500000D+01 -.6540000000D-01 +5 12020150302201504122457083.0 .1238000000D+00 -.3400000000D-03 .6741570000D+02 .3744610000D+01 .6240000000D-01 .7660000000D-01 .3339499000D+01 .1592600000D+01 .5539500000D+01 -.3334000000D+00 -.2760000000D+00 .1370000000D-02 .1308503000D+03 .6457790000D+01 .9476600000D-01 .4849000000D+00 .1196128000D+01 .5659800000D+01 .3378200000D+01 -.3317400000D+01 -.1600000000D-01 .9000000000D-04 .1204849000D+03 .6016700000D+01 .1008210000D+00 .2368000000D+00 .5771468000D+01 .4051300000D+01 .1788800000D+01 -.1023000000D+00 +5 12120150412201505232457124.0 .1109000000D+00 .3500000000D-03 .7027510000D+02 .3871660000D+01 .6429500000D-01 .7990000000D-01 .3331589000D+01 .1588700000D+01 .5536200000D+01 -.5301000000D+00 -.2499000000D+00 .4000000000D-03 .1310669000D+03 .6390950000D+01 .9356200000D-01 .4907000000D+00 .1243791000D+01 .5713100000D+01 .3442600000D+01 -.3352600000D+01 -.1540000000D-01 -.7300000000D-03 .1183295000D+03 .5889740000D+01 .9828300000D-01 .2055000000D+00 .5814429000D+01 .4094500000D+01 .1829800000D+01 -.1710000000D-01 +5 12220150523201507032457165.0 .1240000000D+00 -.4200000000D-03 .7305690000D+02 .3946960000D+01 .6486000000D-01 .7130000000D-01 .3338412000D+01 .1592400000D+01 .5540400000D+01 -.3304000000D+00 -.2601000000D+00 .1050000000D-02 .1313601000D+03 .6338640000D+01 .9276100000D-01 .4957000000D+00 .1300728000D+01 .5773900000D+01 .3515200000D+01 -.3310800000D+01 -.5170000000D-01 .9000000000D-04 .1161298000D+03 .5794720000D+01 .9663800000D-01 .1692000000D+00 .5869481000D+01 .4153800000D+01 .1886400000D+01 -.9270000000D-01 +5 12320150703201508132457206.0 .1065000000D+00 .1900000000D-03 .7470930000D+02 .3947330000D+01 .6400100000D-01 .7410000000D-01 .3369357000D+01 .1613100000D+01 .5559400000D+01 -.5334000000D+00 -.2469000000D+00 .4500000000D-03 .1315362000D+03 .6318860000D+01 .9284800000D-01 .5028000000D+00 .1361807000D+01 .5837300000D+01 .3587400000D+01 -.3331900000D+01 -.5520000000D-01 -.8300000000D-03 .1147378000D+03 .5788460000D+01 .9692300000D-01 .1362000000D+00 .5932981000D+01 .4223600000D+01 .1950900000D+01 -.6191400000D+01 +5 12420150813201509232457247.0 .1234000000D+00 -.6600000000D-03 .7459850000D+02 .3866400000D+01 .6177100000D-01 .7950000000D-01 .3423604000D+01 .1651600000D+01 .5595800000D+01 -.2739000000D+00 -.2587000000D+00 .7700000000D-03 .1316025000D+03 .6325060000D+01 .9343700000D-01 .5160000000D+00 .1418317000D+01 .5893400000D+01 .3649300000D+01 -.3314200000D+01 -.1051000000D+00 .3600000000D-03 .1148629000D+03 .5889740000D+01 .9922100000D-01 .9410000000D-01 .5996358000D+01 .4291000000D+01 .2010500000D+01 -.1580000000D-01 +5 12520150923201511032457288.0 .1123000000D+00 .4000000000D-04 .7271050000D+02 .3740270000D+01 .5913600000D-01 .9670000000D-01 .3493834000D+01 .1707600000D+01 .5651400000D+01 -.3774000000D+00 -.2657000000D+00 .7600000000D-03 .1314891000D+03 .6355420000D+01 .9450000000D-01 .5288000000D+00 .1463683000D+01 .5937300000D+01 .3694300000D+01 -.3314400000D+01 -.9790000000D-01 -.7400000000D-03 .1163924000D+03 .6067870000D+01 .1027870000D+00 .8280000000D-01 .6050833000D+01 .4343700000D+01 .2052500000D+01 -.5920700000D+01 +5 12620151103201512142457329.0 .1292000000D+00 -.4100000000D-03 .7017510000D+02 .3647410000D+01 .5753000000D-01 .1166000000D+00 .3564392000D+01 .1771000000D+01 .5716300000D+01 -.2277000000D+00 -.2646000000D+00 .6100000000D-03 .1313291000D+03 .6372620000D+01 .9499000000D-01 .5366000000D+00 .1494571000D+01 .5966800000D+01 .3724000000D+01 -.3327800000D+01 -.1220000000D+00 .5600000000D-03 .1184284000D+03 .6231200000D+01 .1056820000D+00 .6950000000D-01 .6090891000D+01 .4375900000D+01 .2075800000D+01 -.6223800000D+01 +5 12720151214201601242457370.0 .1300000000D+00 .1400000000D-03 .6853710000D+02 .3655710000D+01 .5806300000D-01 .1376000000D+00 .3615448000D+01 .1823300000D+01 .5768100000D+01 -.3023000000D+00 -.2649000000D+00 .1060000000D-02 .1311629000D+03 .6358200000D+01 .9484800000D-01 .5356000000D+00 .1517015000D+01 .5991600000D+01 .3750800000D+01 -.3309800000D+01 -.9110000000D-01 -.5200000000D-03 .1196820000D+03 .6306550000D+01 .1066400000D+00 .8770000000D-01 .6119068000D+01 .4394600000D+01 .2087700000D+01 -.5955800000D+01 +5 12820160124201603052457411.0 .1507000000D+00 -.2700000000D-03 .6882690000D+02 .3760090000D+01 .6022000000D-01 .1560000000D+00 .3635148000D+01 .1849100000D+01 .5791600000D+01 -.2509000000D+00 -.2382000000D+00 .5100000000D-03 .1311000000D+03 .6310260000D+01 .9400000000D-01 .5259000000D+00 .1541197000D+01 .6021200000D+01 .3786200000D+01 -.3334000000D+01 -.1126000000D+00 .7100000000D-03 .1195923000D+03 .6264460000D+01 .1052120000D+00 .7040000000D-01 .6143819000D+01 .4411100000D+01 .2101200000D+01 -.6223300000D+01 +5 12920160305201604152457452.0 .1533000000D+00 .2000000000D-04 .7089480000D+02 .3909400000D+01 .6283800000D-01 .1636000000D+00 .3632253000D+01 .1853400000D+01 .5794200000D+01 -.2976000000D+00 -.2403000000D+00 .1400000000D-02 .1311548000D+03 .6252640000D+01 .9327800000D-01 .5152000000D+00 .1575275000D+01 .6063600000D+01 .3836800000D+01 -.3289700000D+01 -.9460000000D-01 -.3900000000D-03 .1181081000D+03 .6139210000D+01 .1022510000D+00 .6660000000D-01 .6174511000D+01 .4436300000D+01 .2124700000D+01 -.5856400000D+01 +5 13020160415201605262457493.0 .1588000000D+00 -.2100000000D-03 .7396730000D+02 .4047840000D+01 .6483200000D-01 .1669000000D+00 .3626864000D+01 .1851700000D+01 .5792300000D+01 -.2807000000D+00 -.2051000000D+00 .2900000000D-03 .1313063000D+03 .6201200000D+01 .9276800000D-01 .5069000000D+00 .1621746000D+01 .6118200000D+01 .3900400000D+01 -.3341200000D+01 -.1171000000D+00 .4000000000D-03 .1158353000D+03 .5980800000D+01 .9879500000D-01 .3110000000D-01 .6217289000D+01 .4476200000D+01 .2164600000D+01 -.5917900000D+01 +5 13120160526201607062457534.0 .1558000000D+00 -.1600000000D-03 .7690920000D+02 .4135140000D+01 .6560800000D-01 .1632000000D+00 .3635861000D+01 .1857600000D+01 .5797900000D+01 -.2890000000D+00 -.2180000000D+00 .1420000000D-02 .1314464000D+03 .6166820000D+01 .9296800000D-01 .5059000000D+00 .1677756000D+01 .6182700000D+01 .3973000000D+01 -.3276000000D+01 -.1179000000D+00 -.3900000000D-03 .1135087000D+03 .5860650000D+01 .9623700000D-01 .3080000000D-01 .6272445000D+01 .4531400000D+01 .2218900000D+01 -.4855300000D+01 +5 13220160706201608162457575.0 .1536000000D+00 -.3000000000D-03 .7870560000D+02 .4141610000D+01 .6489000000D-01 .1647000000D+00 .3666482000D+01 .1878400000D+01 .5817200000D+01 -.2793000000D+00 -.1831000000D+00 .5000000000D-04 .1314767000D+03 .6160950000D+01 .9378500000D-01 .4980000000D+00 .1738502000D+01 .6249400000D+01 .4044800000D+01 -.3327200000D+01 -.1529000000D+00 .1700000000D-03 .1121580000D+03 .5829610000D+01 .9550300000D-01 .5020000000D-01 .5233400000D-01 .4596100000D+01 .2282200000D+01 -.3709400000D+01 +5 13320160816201609262457616.0 .1539000000D+00 -.5400000000D-03 .7861350000D+02 .4060400000D+01 .6278400000D-01 .1631000000D+00 .3717597000D+01 .1915000000D+01 .5853000000D+01 -.2362000000D+00 -.2074000000D+00 .1380000000D-02 .1313956000D+03 .6183980000D+01 .9532800000D-01 .4973000000D+00 .1795524000D+01 .2740000000D-01 .4107200000D+01 -.3255600000D+01 -.1743000000D+00 -.1200000000D-03 .1123759000D+03 .5920100000D+01 .9707000000D-01 .8680000000D-01 .1146020000D+00 .4658400000D+01 .2339700000D+01 -.3635400000D+01 +5 13420160926201611062457657.0 .1428000000D+00 -.2100000000D-03 .7669500000D+02 .3924160000D+01 .6009600000D-01 .1728000000D+00 .3781629000D+01 .1966500000D+01 .5906900000D+01 -.2702000000D+00 -.1812000000D+00 -.6000000000D-04 .1312238000D+03 .6226140000D+01 .9684600000D-01 .4986000000D+00 .1842076000D+01 .7410000000D-01 .4152000000D+01 -.3332700000D+01 -.1938000000D+00 .1400000000D-03 .1141563000D+03 .6094220000D+01 .1001560000D+00 .1177000000D+00 .1674820000D+00 .4706800000D+01 .2380500000D+01 -.3547700000D+01 +5 13520161106201612172457698.0 .1549000000D+00 -.5100000000D-03 .7404700000D+02 .3811360000D+01 .5821700000D-01 .1873000000D+00 .3844171000D+01 .2023800000D+01 .5971000000D+01 -.1997000000D+00 -.2110000000D+00 .1360000000D-02 .1310243000D+03 .6254370000D+01 .9786400000D-01 .5104000000D+00 .1873737000D+01 .1063000000D+00 .4182300000D+01 -.3267100000D+01 -.2021000000D+00 .3300000000D-03 .1163974000D+03 .6264160000D+01 .1029220000D+00 .1233000000D+00 .2057340000D+00 .4735500000D+01 .2400500000D+01 -.3533400000D+01 +5 13620161217201701272457739.0 .1544000000D+00 .9000000000D-04 .7235280000D+02 .3797570000D+01 .5836100000D-01 .2108000000D+00 .3888348000D+01 .2072200000D+01 .6024500000D+01 -.2545000000D+00 -.1790000000D+00 .1300000000D-03 .1308536000D+03 .6256030000D+01 .9802100000D-01 .5031000000D+00 .1897084000D+01 .1317000000D+00 .4207100000D+01 -.3324900000D+01 -.1897000000D+00 .1900000000D-03 .1178003000D+03 .6333820000D+01 .1037110000D+00 .1267000000D+00 .2324640000D+00 .4752100000D+01 .2411000000D+01 -.3576700000D+01 +5 13720170127201703092457780.0 .1793000000D+00 -.4800000000D-03 .7270700000D+02 .3889920000D+01 .6020700000D-01 .2259000000D+00 .3905257000D+01 .2096800000D+01 .6050900000D+01 -.1935000000D+00 -.1890000000D+00 .1380000000D-02 .1308055000D+03 .6227980000D+01 .9774100000D-01 .4915000000D+00 .1920791000D+01 .1615000000D+00 .4239200000D+01 -.3261400000D+01 -.1899000000D+00 .7100000000D-03 .1176000000D+03 .6276520000D+01 .1020020000D+00 .1156000000D+00 .2560980000D+00 .4767000000D+01 .2423000000D+01 -.3489200000D+01 +5 13820170309201704192457821.0 .1732000000D+00 .1500000000D-03 .7498920000D+02 .4041740000D+01 .6274100000D-01 .2402000000D+00 .3904141000D+01 .2103200000D+01 .6056500000D+01 -.2760000000D+00 -.1489000000D+00 .2600000000D-03 .1308660000D+03 .6196960000D+01 .9744500000D-01 .4700000000D+00 .1954521000D+01 .2027000000D+00 .4283100000D+01 -.3321500000D+01 -.1659000000D+00 .4000000000D-04 .1159037000D+03 .6118480000D+01 .9852100000D-01 .1265000000D+00 .2866430000D+00 .4791900000D+01 .2448100000D+01 -.3588900000D+01 +5 13920170419201705302457862.0 .1950000000D+00 -.6500000000D-03 .7832200000D+02 .4189720000D+01 .6475200000D-01 .2466000000D+00 .3902293000D+01 .2103900000D+01 .6056900000D+01 -.2052000000D+00 -.1492000000D+00 .1170000000D-02 .1309918000D+03 .6170810000D+01 .9756000000D-01 .4578000000D+00 .1999478000D+01 .2565000000D+00 .4339800000D+01 -.3266300000D+01 -.1852000000D+00 .7800000000D-03 .1133199000D+03 .5922120000D+01 .9432200000D-01 .1382000000D+00 .3291540000D+00 .4830500000D+01 .2489400000D+01 -.3414000000D+01 +5 14020170530201707102457903.0 .1788000000D+00 .7000000000D-04 .8147930000D+02 .4288600000D+01 .6572700000D-01 .2512000000D+00 .3914646000D+01 .2113600000D+01 .6065500000D+01 -.2731000000D+00 -.1199000000D+00 .4800000000D-03 .1310752000D+03 .6171500000D+01 .9834000000D-01 .4369000000D+00 .2055412000D+01 .3201000000D+00 .4403200000D+01 -.3293300000D+01 -.1742000000D+00 -.2600000000D-03 .1107325000D+03 .5754570000D+01 .9086400000D-01 .1700000000D+00 .3840960000D+00 .4885200000D+01 .2548700000D+01 -.3501400000D+01 +5 14120170710201708202457944.0 .1919000000D+00 -.8600000000D-03 .8343250000D+02 .4304650000D+01 .6520500000D-01 .2451000000D+00 .3946189000D+01 .2135400000D+01 .6086500000D+01 -.1846000000D+00 -.1147000000D+00 .8400000000D-03 .1310844000D+03 .6194090000D+01 .9978100000D-01 .4227000000D+00 .2115565000D+01 .3869000000D+00 .4467500000D+01 -.3256000000D+01 -.2121000000D+00 .6800000000D-03 .1091770000D+03 .5681620000D+01 .8917700000D-01 .1965000000D+00 .4458940000D+00 .4948100000D+01 .2616600000D+01 -.3347700000D+01 +5 14220170820201709302457985.0 .1659000000D+00 -.9000000000D-04 .8341860000D+02 .4232330000D+01 .6343800000D-01 .2425000000D+00 .3995721000D+01 .2172400000D+01 .6123000000D+01 -.2625000000D+00 -.9970000000D-01 .4600000000D-03 .1309852000D+03 .6247900000D+01 .1018000000D+00 .4075000000D+00 .2174064000D+01 .4485000000D+00 .4523700000D+01 -.3273700000D+01 -.2112000000D+00 -.3500000000D-03 .1093594000D+03 .5739240000D+01 .9002300000D-01 .2363000000D+00 .5066300000D+00 .5009600000D+01 .2679600000D+01 -.3452800000D+01 +5 14320170930201711102458026.0 .1778000000D+00 -.8900000000D-03 .8151950000D+02 .4095690000D+01 .6089800000D-01 .2443000000D+00 .4054449000D+01 .2220300000D+01 .6176000000D+01 -.1773000000D+00 -.9350000000D-01 .3900000000D-03 .1308267000D+03 .6310170000D+01 .1038000000D+00 .4042000000D+00 .2221691000D+01 .4968000000D+00 .4565900000D+01 -.3267900000D+01 -.2592000000D+00 .9200000000D-03 .1112676000D+03 .5897600000D+01 .9254200000D-01 .2689000000D+00 .5568600000D+00 .5054900000D+01 .2721100000D+01 -.3348900000D+01 +5 14420171110201712212458067.0 .1628000000D+00 -.6000000000D-04 .7878730000D+02 .3974110000D+01 .5912500000D-01 .2551000000D+00 .4110383000D+01 .2275300000D+01 .6241100000D+01 -.2318000000D+00 -.9950000000D-01 .7300000000D-03 .1306503000D+03 .6363290000D+01 .1052100000D+00 .4018000000D+00 .2255690000D+01 .5299000000D+00 .4593100000D+01 -.3254800000D+01 -.2450000000D+00 -.7000000000D-04 .1136721000D+03 .6060990000D+01 .9511200000D-01 .2885000000D+00 .5929580000D+00 .5082000000D+01 .2740500000D+01 -.3438900000D+01 +5 14520171221201801312458108.0 .1818000000D+00 -.5400000000D-03 .7707780000D+02 .3943450000D+01 .5905800000D-01 .2709000000D+00 .4148634000D+01 .2320800000D+01 .1420000000D-01 -.1782000000D+00 -.8720000000D-01 .2700000000D-03 .1305464000D+03 .6377200000D+01 .1055570000D+00 .3991000000D+00 .2279209000D+01 .5546000000D+00 .4615400000D+01 -.3281200000D+01 -.2585000000D+00 .1120000000D-02 .1151477000D+03 .6125350000D+01 .9570400000D-01 .2816000000D+00 .6178700000D+00 .5096000000D+01 .2748200000D+01 -.3354600000D+01 +5 14620180131201803132458149.0 .1810000000D+00 .0000000000D+00 .7750740000D+02 .4025520000D+01 .6075600000D-01 .2890000000D+00 .4164397000D+01 .2347100000D+01 .4540000000D-01 -.2265000000D+00 -.9030000000D-01 .9500000000D-03 .1305348000D+03 .6369470000D+01 .1054190000D+00 .3881000000D+00 .2303227000D+01 .5824000000D+00 .4641900000D+01 -.3243600000D+01 -.2191000000D+00 .1500000000D-03 .1147937000D+03 .6053310000D+01 .9391400000D-01 .2711000000D+00 .6413450000D+00 .5111200000D+01 .2760400000D+01 -.3439400000D+01 +5 14720180313201804232458190.0 .2011000000D+00 -.5100000000D-03 .8001090000D+02 .4172120000D+01 .6304500000D-01 .3061000000D+00 .4165740000D+01 .2355800000D+01 .5570000000D-01 -.1981000000D+00 -.5230000000D-01 .3000000000D-04 .1306542000D+03 .6353170000D+01 .1051330000D+00 .3629000000D+00 .2335554000D+01 .6197000000D+00 .4678900000D+01 -.3286600000D+01 -.2252000000D+00 .1090000000D-02 .1127868000D+03 .5867450000D+01 .9007300000D-01 .2671000000D+00 .6719640000D+00 .5136200000D+01 .2787300000D+01 -.3358400000D+01 +5 14820180423201806032458231.0 .2010000000D+00 -.2500000000D-03 .8353970000D+02 .4325010000D+01 .6511500000D-01 .3166000000D+00 .4169185000D+01 .2362300000D+01 .6180000000D-01 -.2196000000D+00 -.5540000000D-01 .1190000000D-02 .1308108000D+03 .6354720000D+01 .1053300000D+00 .3382000000D+00 .2379759000D+01 .6689000000D+00 .4725100000D+01 -.3208200000D+01 -.2027000000D+00 .2600000000D-03 .1097200000D+03 .5632320000D+01 .8556500000D-01 .2718000000D+00 .7154220000D+00 .5178200000D+01 .2836200000D+01 -.3403100000D+01 +5 14920180603201807142458272.0 .2047000000D+00 -.5100000000D-03 .8691270000D+02 .4430370000D+01 .6612500000D-01 .3210000000D+00 .4185891000D+01 .2375500000D+01 .7470000000D-01 -.2067000000D+00 -.1500000000D-01 -.4000000000D-04 .1309728000D+03 .6372320000D+01 .1059220000D+00 .3102000000D+00 .2434087000D+01 .7270000000D+00 .4779000000D+01 -.3285800000D+01 -.2111000000D+00 .6500000000D-03 .1066911000D+03 .5421080000D+01 .8159300000D-01 .2842000000D+00 .7707260000D+00 .5235700000D+01 .2905300000D+01 -.3351400000D+01 +5 15020180714201808242458313.0 .1976000000D+00 -.5000000000D-03 .8899690000D+02 .4457940000D+01 .6591800000D-01 .3183000000D+00 .4220309000D+01 .2401500000D+01 .1000000000D+00 -.2036000000D+00 -.2370000000D-01 .1140000000D-02 .1310289000D+03 .6420670000D+01 .1073360000D+00 .2933000000D+00 .2494209000D+01 .7896000000D+00 .4834200000D+01 -.3178700000D+01 -.2121000000D+00 .2100000000D-03 .1047384000D+03 .5306240000D+01 .7954700000D-01 .3050000000D+00 .8326350000D+00 .5303400000D+01 .2986600000D+01 -.3363700000D+01 +5 15120180824201810042458354.0 .1888000000D+00 -.5100000000D-03 .8910790000D+02 .4396180000D+01 .6444000000D-01 .3139000000D+00 .4269290000D+01 .2439300000D+01 .1385000000D+00 -.2029000000D+00 .2220000000D-01 -.3500000000D-03 .1310560000D+03 .6493300000D+01 .1092540000D+00 .2620000000D+00 .2553424000D+01 .8483000000D+00 .4884700000D+01 -.3268300000D+01 -.2355000000D+00 .4100000000D-03 .1047346000D+03 .5327920000D+01 .7992500000D-01 .3390000000D+00 .8917710000D+00 .5367300000D+01 .3060200000D+01 -.3346400000D+01 +5 15220181004201811142458395.0 .1862000000D+00 -.7500000000D-03 .8724300000D+02 .4271470000D+01 .6242700000D-01 .3080000000D+00 .4325201000D+01 .2487900000D+01 .1931000000D+00 -.1753000000D+00 .6000000000D-02 .9500000000D-03 .1309995000D+03 .6582820000D+01 .1114660000D+00 .2512000000D+00 .2603189000D+01 .8956000000D+00 .4922400000D+01 -.3140600000D+01 -.2582000000D+00 .5300000000D-03 .1065881000D+03 .5464860000D+01 .8223900000D-01 .3695000000D+00 .9399570000D+00 .5414300000D+01 .3107900000D+01 -.3340600000D+01 +5 15320181114201812252458436.0 .1730000000D+00 -.2300000000D-03 .8454870000D+02 .4152610000D+01 .6092400000D-01 .3113000000D+00 .4376264000D+01 .2541000000D+01 .2580000000D+00 -.2103000000D+00 .3180000000D-01 -.3800000000D-03 .1309584000D+03 .6648360000D+01 .1128930000D+00 .2386000000D+00 .2638956000D+01 .9281000000D+00 .4948400000D+01 -.3267000000D+01 -.2621000000D+00 .4300000000D-03 .1091257000D+03 .5619750000D+01 .8454200000D-01 .3898000000D+00 .9737120000D+00 .5439200000D+01 .3125700000D+01 -.3367600000D+01 +5 15420181225201902042458477.0 .1873000000D+00 -.6400000000D-03 .8284800000D+02 .4115650000D+01 .6101400000D-01 .3249000000D+00 .4411006000D+01 .2587000000D+01 .3172000000D+00 -.1672000000D+00 .8200000000D-02 .8700000000D-03 .1308971000D+03 .6677940000D+01 .1133970000D+00 .2448000000D+00 .2663615000D+01 .9520000000D+00 .4968000000D+01 -.3151800000D+01 -.2639000000D+00 .9500000000D-03 .1106348000D+03 .5680070000D+01 .8506600000D-01 .3878000000D+00 .9975450000D+00 .5451700000D+01 .3130700000D+01 -.3341300000D+01 +5 15520190204201903172458518.0 .1836000000D+00 -.2000000000D-04 .8334900000D+02 .4186580000D+01 .6259200000D-01 .3429000000D+00 .4426806000D+01 .2615700000D+01 .3536000000D+00 -.2111000000D+00 .3910000000D-01 -.2600000000D-03 .1309835000D+03 .6674260000D+01 .1130340000D+00 .2229000000D+00 .2687510000D+01 .9766000000D+00 .4991100000D+01 -.3244300000D+01 -.2337000000D+00 .4500000000D-03 .1101337000D+03 .5598090000D+01 .8316700000D-01 .3755000000D+00 .1021103000D+01 .5466600000D+01 .3141900000D+01 -.3374800000D+01 +5 15620190317201904272458559.0 .2075000000D+00 -.8200000000D-03 .8595690000D+02 .4324860000D+01 .6482800000D-01 .3570000000D+00 .4432226000D+01 .2630000000D+01 .3715000000D+00 -.1599000000D+00 .3480000000D-01 .7200000000D-03 .1311314000D+03 .6666400000D+01 .1125410000D+00 .2072000000D+00 .2718310000D+01 .1009100000D+01 .5021400000D+01 -.3126200000D+01 -.2289000000D+00 .1190000000D-02 .1077155000D+03 .5394760000D+01 .7940900000D-01 .3551000000D+00 .1053318000D+01 .5494700000D+01 .3173700000D+01 -.3318600000D+01 +5 15720190427201906072458600.0 .1937000000D+00 -.2000000000D-04 .8960990000D+02 .4474960000D+01 .6680000000D-01 .3690000000D+00 .4441547000D+01 .2642000000D+01 .3839000000D+00 -.2258000000D+00 .6370000000D-01 -.5000000000D-04 .1313762000D+03 .6663580000D+01 .1121060000D+00 .1716000000D+00 .2760541000D+01 .1051800000D+01 .5061700000D+01 -.3201800000D+01 -.1921000000D+00 .2100000000D-03 .1041453000D+03 .5138320000D+01 .7500500000D-01 .3454000000D+00 .1099157000D+01 .5542200000D+01 .3231900000D+01 -.3381300000D+01 +5 15820190607201907182458641.0 .2133000000D+00 -.1020000000D-02 .9307360000D+02 .4580080000D+01 .6789000000D-01 .3771000000D+00 .4463481000D+01 .2661200000D+01 .4040000000D+00 -.1605000000D+00 .7170000000D-01 .5100000000D-03 .1315735000D+03 .6682700000D+01 .1121580000D+00 .1508000000D+00 .2812654000D+01 .1103400000D+01 .5108200000D+01 -.3090000000D+01 -.2036000000D+00 .1060000000D-02 .1005713000D+03 .4901100000D+01 .7126500000D-01 .3447000000D+00 .1156757000D+01 .5607900000D+01 .3316700000D+01 -.3303900000D+01 +5 15920190718201908282458682.0 .1885000000D+00 -.9000000000D-04 .9521300000D+02 .4616190000D+01 .6793900000D-01 .3761000000D+00 .4501679000D+01 .2692600000D+01 .4349000000D+00 -.2138000000D+00 .9710000000D-01 .1500000000D-03 .1317884000D+03 .6726230000D+01 .1128010000D+00 .1126000000D+00 .2871856000D+01 .1159900000D+01 .5158300000D+01 -.3072400000D+01 -.1840000000D+00 -.1000000000D-04 .9813210000D+02 .4763620000D+01 .6956100000D-01 .3547000000D+00 .1220375000D+01 .5685500000D+01 .3415800000D+01 -.3357400000D+01 +5 16020190828201910082458723.0 .2003000000D+00 -.1120000000D-02 .9541960000D+02 .4567840000D+01 .6695300000D-01 .3667000000D+00 .4551719000D+01 .2734200000D+01 .4782000000D+00 -.1413000000D+00 .1162000000D+00 .1100000000D-03 .1319429000D+03 .6802990000D+01 .1142270000D+00 .8980000000D-01 .2930807000D+01 .1214300000D+01 .5204200000D+01 -.2974900000D+01 -.2161000000D+00 .9600000000D-03 .9780450000D+02 .4765080000D+01 .7032300000D-01 .3733000000D+00 .1279452000D+01 .5757800000D+01 .3504900000D+01 -.3282100000D+01 +5 16120191008201911182458764.0 .1693000000D+00 -.1000000000D-03 .9366810000D+02 .4464780000D+01 .6552300000D-01 .3563000000D+00 .4606768000D+01 .2784400000D+01 .5328000000D+00 -.2120000000D+00 .1237000000D+00 .1200000000D-03 .1320941000D+03 .6895420000D+01 .1160720000D+00 .6650000000D-01 .2982301000D+01 .1259800000D+01 .5241300000D+01 -.2798400000D+01 -.2098000000D+00 -.6000000000D-04 .9955560000D+02 .4891620000D+01 .7281600000D-01 .3999000000D+00 .1326287000D+01 .5808300000D+01 .3558000000D+01 -.3356800000D+01 +5 16220191118201912292458805.0 .1817000000D+00 -.9400000000D-03 .9108850000D+02 .4358320000D+01 .6454500000D-01 .3560000000D+00 .4654914000D+01 .2837500000D+01 .5971000000D+00 -.1480000000D+00 .1403000000D+00 -.3300000000D-03 .1321770000D+03 .6973900000D+01 .1175060000D+00 .5470000000D-01 .3019703000D+01 .1291500000D+01 .5266000000D+01 -.2833500000D+01 -.2437000000D+00 .1110000000D-02 .1021693000D+03 .5036170000D+01 .7498200000D-01 .4231000000D+00 .1357497000D+01 .5831300000D+01 .3574500000D+01 -.3300300000D+01 +5 16320191229202002082458846.0 .1664000000D+00 -.1000000000D-03 .8941710000D+02 .4329120000D+01 .6504800000D-01 .3626000000D+00 .4688594000D+01 .2885400000D+01 .6556000000D+00 -.1951000000D+00 .1269000000D+00 .3300000000D-03 .1322479000D+03 .7007060000D+01 .1179120000D+00 .5350000000D-01 .3045784000D+01 .1314500000D+01 .5285100000D+01 -.2503100000D+01 -.2204000000D+00 .2500000000D-03 .1036942000D+03 .5095880000D+01 .7539900000D-01 .4247000000D+00 .1380473000D+01 .5841600000D+01 .3574700000D+01 -.3354800000D+01 +5 16420200208202003202458887.0 .1855000000D+00 -.7800000000D-03 .8996250000D+02 .4392220000D+01 .6675200000D-01 .3757000000D+00 .4705424000D+01 .2917200000D+01 .6959000000D+00 -.1482000000D+00 .1450000000D+00 -.4700000000D-03 .1323473000D+03 .7002830000D+01 .1173480000D+00 .3820000000D-01 .3068663000D+01 .1336200000D+01 .5305500000D+01 -.2743400000D+01 -.2206000000D+00 .1170000000D-02 .1030793000D+03 .5008620000D+01 .7343100000D-01 .4060000000D+00 .1404374000D+01 .5855400000D+01 .3584200000D+01 -.3302200000D+01 +5 16520200320202004302458928.0 .1767000000D+00 -.1900000000D-03 .9255010000D+02 .4524140000D+01 .6901600000D-01 .3879000000D+00 .4715675000D+01 .2937300000D+01 .7191000000D+00 -.1925000000D+00 .1289000000D+00 .4700000000D-03 .1325118000D+03 .6981990000D+01 .1163880000D+00 .4450000000D-01 .3097756000D+01 .1364800000D+01 .5333300000D+01 -.2060400000D+01 -.1796000000D+00 .3700000000D-03 .1003089000D+03 .4806040000D+01 .6993500000D-01 .3792000000D+00 .1439494000D+01 .5887300000D+01 .3618600000D+01 -.3350700000D+01 +5 16620200430202006102458969.0 .1889000000D+00 -.7700000000D-03 .9617540000D+02 .4661380000D+01 .7090400000D-01 .4000000000D+00 .4730065000D+01 .2955000000D+01 .7392000000D+00 -.1615000000D+00 .1684000000D+00 -.6900000000D-03 .1327446000D+03 .6962570000D+01 .1152830000D+00 .2250000000D-01 .3136619000D+01 .1401800000D+01 .5369200000D+01 -.1077200000D+01 -.1701000000D+00 .9100000000D-03 .9629440000D+02 .4544510000D+01 .6593000000D-01 .3564000000D+00 .1488704000D+01 .5941600000D+01 .3686000000D+01 -.3306400000D+01 +5 16720200610202007212459010.0 .1805000000D+00 -.5000000000D-03 .9953130000D+02 .4768680000D+01 .7223000000D-01 .4041000000D+00 .4757832000D+01 .2981700000D+01 .7657000000D+00 -.1766000000D+00 .1577000000D+00 .6400000000D-03 .1329675000D+03 .6955200000D+01 .1144500000D+00 .6480000000D-01 .3185831000D+01 .1447800000D+01 .5413100000D+01 -.9239000000D+00 -.1468000000D+00 .4700000000D-03 .9218990000D+02 .4314810000D+01 .6309100000D-01 .3388000000D+00 .1551237000D+01 .6019900000D+01 .3783800000D+01 -.3321500000D+01 +5 16820200721202008312459051.0 .1784000000D+00 -.6700000000D-03 .1016639000D+03 .4808030000D+01 .7254200000D-01 .4016000000D+00 .4799375000D+01 .3018400000D+01 .8025000000D+00 -.1612000000D+00 .1995000000D+00 -.6600000000D-03 .1332263000D+03 .6971440000D+01 .1140890000D+00 .7750000000D-01 .3242077000D+01 .1498900000D+01 .5461200000D+01 -.3566000000D+00 -.1432000000D+00 .5600000000D-03 .8935140000D+02 .4183220000D+01 .6232300000D-01 .3326000000D+00 .1618162000D+01 .6110100000D+01 .3896100000D+01 -.3298000000D+01 +5 16920200831202010112459092.0 .1678000000D+00 -.6200000000D-03 .1019079000D+03 .4781200000D+01 .7215700000D-01 .3921000000D+00 .4851840000D+01 .3065000000D+01 .8483000000D+00 -.1613000000D+00 .1885000000D+00 .5500000000D-03 .1334836000D+03 .7024690000D+01 .1146910000D+00 .1130000000D+00 .3300309000D+01 .1550600000D+01 .5507700000D+01 -.5664000000D+00 -.1436000000D+00 .4300000000D-03 .8871180000D+02 .4198680000D+01 .6411800000D-01 .3407000000D+00 .1679190000D+01 .6193500000D+01 .3992500000D+01 -.3296900000D+01 +5 17020201011202011212459133.0 .1529000000D+00 -.4200000000D-03 .1003303000D+03 .4700100000D+01 .7128500000D-01 .3789000000D+00 .4906575000D+01 .3117000000D+01 .9025000000D+00 -.1672000000D+00 .2358000000D+00 -.9600000000D-03 .1338131000D+03 .7106110000D+01 .1159320000D+00 .1376000000D+00 .3352077000D+01 .1594200000D+01 .5545200000D+01 -.2851000000D+00 -.1517000000D+00 .3000000000D-03 .9036960000D+02 .4325970000D+01 .6709000000D-01 .3609000000D+00 .1724285000D+01 .6247200000D+01 .4047300000D+01 -.3303300000D+01 +5 17120201121202101012459174.0 .1524000000D+00 -.7800000000D-03 .9789810000D+02 .4625520000D+01 .7109700000D-01 .3693000000D+00 .4954515000D+01 .3171600000D+01 .9614000000D+00 -.1417000000D+00 .2194000000D+00 .2600000000D-03 .1340307000D+03 .7182600000D+01 .1171770000D+00 .1611000000D+00 .3391032000D+01 .1626200000D+01 .5571300000D+01 -.4450000000D+00 -.1695000000D+00 .7000000000D-03 .9299330000D+02 .4472900000D+01 .6944500000D-01 .3802000000D+00 .1753283000D+01 .6268600000D+01 .4059500000D+01 -.3288000000D+01 +5 17220210101202102112459215.0 .1390000000D+00 -.2000000000D-03 .9635800000D+02 .4609640000D+01 .7198200000D-01 .3695000000D+00 .4987683000D+01 .3219100000D+01 .1015000000D+01 -.1769000000D+00 .2385000000D+00 -.8700000000D-03 .1341933000D+03 .7215730000D+01 .1174620000D+00 .1648000000D+00 .3417547000D+01 .1648300000D+01 .5590500000D+01 -.2874000000D+00 -.1613000000D+00 .3000000000D-03 .9461240000D+02 .4524010000D+01 .6947900000D-01 .3842000000D+00 .1773949000D+01 .6273200000D+01 .4054300000D+01 -.3325600000D+01 diff --git a/GUI/xephem/auxil/uranus.9910 b/GUI/xephem/auxil/uranus.9910 new file mode 100644 index 0000000..52c2516 --- /dev/null +++ b/GUI/xephem/auxil/uranus.9910 @@ -0,0 +1,188 @@ + 7 5 2 20 39 59 81 2.4930 1.5162 .7217 .4667 4.4880 258. 242. 223. 206. 41. 189 2451178.500 1999 +1 219981231199909152451178.1 .3461000000D+00 -.1050000000D-02 .1152731000D+03 .2411300000D+00 .8390000000D-03 .1168000000D+00 -.1299408000D+01 -.3964900000D+01 -.7944000000D+00 -.2537900000D+01 .7430000000D-01 -.4700000000D-03 .1905676000D+03 .4670000000D-01 .1130000000D-03 .2383000000D+00 -.5909846000D+01 -.3982800000D+01 -.6805000000D+00 -.4346200000D+01 -.2755000000D+00 .4600000000D-02 .1530009000D+03 .1735900000D+00 .5770000000D-03 .1406000000D+00 -.1140650000D+01 -.7314000000D+00 -.3969000000D+01 -.8169000000D+00 +1 319990915200005302451436.1 .3460000000D+00 -.5190000000D-02 .1107120000D+03 .7677000000D-01 .2480000000D-03 .7467000000D+00 -.5282446000D+01 -.1094700000D+01 -.2214700000D+01 -.8041000000D+00 -.1755000000D+00 -.5300000000D-03 .1901068000D+03 .8031000000D-01 .3060000000D-03 .2468000000D+00 -.3578965000D+01 -.5166500000D+01 -.1944300000D+01 -.1192400000D+01 -.5210000000D-01 .4690000000D-02 .1567028000D+03 .7055000000D-01 .3040000000D-03 .3952000000D+00 -.5082421000D+01 -.6265900000D+01 -.4039100000D+01 -.3685800000D+01 +1 420000530200102122451694.1 .8483000000D+00 -.4950000000D-02 .8650800000D+02 .1995000000D+00 .7350000000D-03 .3147000000D+00 -.3146737000D+01 -.2531500000D+01 -.5591300000D+01 -.4143000000D+01 .2947000000D+00 -.4040000000D-02 .1888461000D+03 .3069000000D-01 .2700000000D-04 .1360000000D+00 -.1266652000D+01 -.2735200000D+01 -.3203100000D+01 -.3291400000D+01 -.8420000000D-01 .4040000000D-02 .1729447000D+03 .1048300000D+00 .3540000000D-03 .2041000000D+00 -.2766860000D+01 -.5728900000D+01 -.2880200000D+01 -.4312700000D+01 +1 520010212200110282451952.1 -.7110000000D+00 .5370000000D-02 .8822640000D+02 .1360700000D+00 .6170000000D-03 .1098000000D+00 -.8824040000D+00 -.3490700000D+01 -.2756000000D+00 -.9555000000D+00 .2110000000D-01 -.1430000000D-02 .1887284000D+03 .8921000000D-01 .3160000000D-03 .2661000000D+00 -.5287897000D+01 -.3597300000D+01 -.4399000000D+00 -.4217700000D+01 .4587000000D+00 -.3500000000D-03 .1717258000D+03 .9865000000D-01 .3900000000D-03 .7350000000D-01 -.4977490000D+00 -.5986100000D+01 -.2935900000D+01 -.5113200000D+01 +1 620011028200207132452210.1 -.5264000000D+00 .8700000000D-03 .9276040000D+02 .2072600000D+00 .3680000000D-03 .7905000000D+00 -.4798751000D+01 -.9085000000D+00 -.3869900000D+01 -.7655000000D+00 -.2883000000D+00 -.1440000000D-02 .1889553000D+03 .3047000000D-01 .2100000000D-03 .4480000000D+00 -.2973354000D+01 -.4978200000D+01 -.1521000000D+01 -.6954000000D+00 .8099000000D+00 -.2740000000D-02 .1692922000D+03 .8841000000D-01 .2220000000D-03 .2652000000D+00 -.4470932000D+01 -.4707700000D+01 -.2117500000D+01 -.3405500000D+01 +1 720020713200303282452468.1 -.4240000000D-01 .2340000000D-02 .7219960000D+02 .1857200000D+00 .8950000000D-03 .4242000000D+00 -.2709299000D+01 -.1952800000D+01 -.5048000000D+01 -.4058200000D+01 .3860000000D-01 -.3030000000D-02 .1876783000D+03 .8491000000D-01 .2230000000D-03 .1556000000D+00 -.6291880000D+00 -.2149200000D+01 -.5185600000D+01 -.1511900000D+01 .8141000000D+00 -.3740000000D-02 .1804192000D+03 .1026700000D+00 .3740000000D-03 .2305000000D+00 -.2130768000D+01 -.4481100000D+01 -.1665600000D+01 -.3627200000D+01 +1 820030328200312112452726.1 -.1529500000D+01 .1270000000D-01 .6365360000D+02 .1232000000D-01 .2170000000D-03 .8140000000D-01 -.5751930000D+00 -.8118000000D+00 -.5698700000D+01 -.4492100000D+01 -.5839000000D+00 .2440000000D-02 .1865057000D+03 .6464000000D-01 .3210000000D-03 .2006000000D+00 -.4631494000D+01 -.2988300000D+01 -.6087600000D+01 -.3894500000D+01 .8136000000D+00 -.4860000000D-02 .1846527000D+03 .7169000000D-01 .3280000000D-03 .9990000000D-01 -.6144292000D+01 -.4566100000D+01 -.1652400000D+01 -.5981500000D+01 +1 920031211200408252452984.1 -.8551000000D+00 .5100000000D-02 .7325850000D+02 .2859400000D+00 .7750000000D-03 .5554000000D+00 -.4407751000D+01 -.4929000000D+00 -.3634000000D+01 -.7000000000D+00 -.9257000000D+00 .2930000000D-02 .1877144000D+03 .6803000000D-01 .1070000000D-03 .4309000000D+00 -.2351414000D+01 -.4550000000D+00 -.3438600000D+01 -.4627000000D+00 .7611000000D+00 -.4870000000D-02 .1802162000D+03 .8254000000D-01 .2330000000D-03 .1591000000D+00 -.3852213000D+01 -.3709400000D+01 -.9871000000D+00 -.9557000000D+00 +1 1020040825200505102453242.1 .1653000000D+00 .2820000000D-02 .6055080000D+02 .9335000000D-01 .7120000000D-03 .6843000000D+00 -.2317753000D+01 -.1536800000D+01 -.4579400000D+01 -.3930300000D+01 -.3866000000D+00 .6200000000D-03 .1860362000D+03 .1039700000D+00 .4050000000D-03 .8190000000D-01 -.6275127000D+01 -.1508600000D+01 -.4609800000D+01 -.8536000000D+00 .5137000000D+00 -.3400000000D-02 .1861281000D+03 .9035000000D-01 .3100000000D-03 .1197000000D+00 -.1507664000D+01 -.3417400000D+01 -.5650000000D+00 -.2161400000D+01 +1 1120050510200601232453500.1 -.9625000000D+00 .1051000000D-01 .5028650000D+02 .1179600000D+00 .2480000000D-03 .3283000000D+00 -.4128140000D+00 -.5483900000D+01 -.2339200000D+01 -.3952100000D+01 -.8820000000D+00 .5470000000D-02 .1854359000D+03 .8530000000D-02 .1760000000D-03 .3039000000D+00 -.3957285000D+01 -.1613300000D+01 -.5385100000D+01 -.3590300000D+01 .1510000000D+00 -.1700000000D-02 .1900208000D+03 .3866000000D-01 .2280000000D-03 .1349000000D+00 -.5504474000D+01 -.3566800000D+01 -.7158000000D+00 -.4748000000D+00 +1 1220060123200610082453758.1 -.1422000000D+00 .1550000000D-02 .5542930000D+02 .2580400000D+00 .8660000000D-03 .3065000000D+00 -.4215525000D+01 -.6248000000D+01 -.3099100000D+01 -.6964000000D+00 -.9340000000D+00 .4100000000D-02 .1853540000D+03 .1250600000D+00 .3510000000D-03 .1703000000D+00 -.1700320000D+01 -.6220000000D-01 -.3220900000D+01 -.2283000000D+00 .6020000000D-01 -.1210000000D-02 .1886438000D+03 .5446000000D-01 .1270000000D-03 .2954000000D+00 -.3226038000D+01 -.2129400000D+01 -.5457800000D+01 -.4312000000D+00 +1 1320061008200706232454016.1 .1096400000D+01 -.3520000000D-02 .5219140000D+02 .7177000000D-01 .1960000000D-03 .8054000000D+00 -.1995762000D+01 -.3721300000D+01 -.4160300000D+01 -.3855100000D+01 -.1264000000D+00 -.5000000000D-04 .1852555000D+03 .6646000000D-01 .3680000000D-03 .1398000000D+00 -.5635271000D+01 -.1013100000D+01 -.4080600000D+01 -.4506500000D+01 -.1224000000D+00 .1000000000D-02 .1893616000D+03 .7355000000D-01 .2820000000D-03 .7150000000D-01 -.8926050000D+00 -.2323700000D+01 -.5550600000D+01 -.1663900000D+01 +1 1420070623200803072454274.1 .2936000000D+00 .7600000000D-03 .5109540000D+02 .2007900000D+00 .7260000000D-03 .3496000000D+00 -.2851970000D+00 -.4749300000D+01 -.1602900000D+01 -.3715700000D+01 -.3775000000D+00 .2750000000D-02 .1843407000D+03 .6364000000D-01 .1030000000D-03 .2989000000D+00 -.3283398000D+01 -.4799600000D+01 -.1479400000D+01 -.3529800000D+01 -.4836000000D+00 .3080000000D-02 .1909770000D+03 .2478000000D-01 .4900000000D-04 .7910000000D-01 -.4861053000D+01 -.4333000000D+00 -.5791900000D+01 -.1246400000D+01 +1 1520080307200811202454532.1 .9414000000D+00 -.7360000000D-02 .4998910000D+02 .1631000000D+00 .7200000000D-03 .3786000000D+00 -.4254618000D+01 -.5519800000D+01 -.2392900000D+01 -.8238000000D+00 -.3433000000D+00 .4400000000D-03 .1840796000D+03 .1212800000D+00 .4420000000D-03 .1001000000D+00 -.1019308000D+01 -.5692000000D+01 -.2535300000D+01 -.1281500000D+01 -.1719000000D+00 .4500000000D-03 .1910024000D+03 .7875000000D-01 .2610000000D-03 .2315000000D+00 -.2596668000D+01 -.8685000000D+00 -.3979500000D+01 -.2287000000D+00 +1 1620081120200908052454790.1 .1598200000D+01 -.9110000000D-02 .4995710000D+02 .2089000000D+00 .3400000000D-03 .5525000000D+00 -.1804591000D+01 -.3427800000D+01 -.4344000000D+00 -.3773000000D+01 .4084000000D+00 -.3880000000D-02 .1844096000D+03 .1870000000D-01 .1220000000D-03 .2451000000D+00 -.4993102000D+01 -.3436300000D+01 -.3268500000D+01 -.4233500000D+01 -.3010000000D-01 .1250000000D-02 .1910956000D+03 .4663000000D-01 .2370000000D-03 .1047000000D+00 -.2758990000D+00 -.2028700000D+01 -.4960300000D+01 -.4190600000D+01 +1 1720090805201004202455048.1 .4791000000D+00 -.3340000000D-02 .5906390000D+02 .2009900000D+00 .9090000000D-03 .8490000000D-01 -.2459000000D-01 -.4188000000D+01 -.1084800000D+01 -.2515100000D+01 .1002000000D+00 -.1280000000D-02 .1839043000D+03 .1200700000D+00 .3790000000D-03 .2095000000D+00 -.2614333000D+01 -.4192100000D+01 -.1057900000D+01 -.3645500000D+01 -.4810000000D+00 .3650000000D-02 .1890467000D+03 .6278000000D-01 .1370000000D-03 .8780000000D-01 -.4227264000D+01 -.5516900000D+01 -.1953700000D+01 -.1941200000D+01 +1 1820100420201101032455306.1 .9258000000D+00 -.9870000000D-02 .6243570000D+02 .5350000000D-01 .3830000000D-03 .6928000000D+00 -.4164222000D+01 -.4473400000D+01 -.1682100000D+01 -.7867000000D+00 .7790000000D-01 -.3550000000D-02 .1845847000D+03 .8616000000D-01 .4140000000D-03 .2708000000D+00 -.3303570000D+00 -.4961500000D+01 -.1858400000D+01 -.1232200000D+01 .1200000000D-01 -.1230000000D-02 .1869091000D+03 .6797000000D-01 .2920000000D-03 .1354000000D+00 -.1957398000D+01 -.2229000000D+00 -.3239900000D+01 -.5156000000D+00 +1 1920110103201109182455564.1 .1039400000D+01 -.7320000000D-02 .5792870000D+02 .2599600000D+00 .6580000000D-03 .1632000000D+00 -.1680384000D+01 -.2884800000D+01 -.6089000000D+01 -.3564500000D+01 .5468000000D+00 -.5940000000D-02 .1835962000D+03 .8125000000D-01 .1200000000D-03 .1344000000D+00 -.4335729000D+01 -.2971600000D+01 -.1796000000D+00 -.3949200000D+01 .4254000000D+00 -.2290000000D-02 .1897993000D+03 .6504000000D-01 .1640000000D-03 .3037000000D+00 -.5943259000D+01 -.2944600000D+01 -.5610100000D+01 -.4130600000D+01 +2 2019981231199908302451178.5 .5279000000D+00 .2300000000D-03 .1609693000D+03 .3547100000D+00 .1243000000D-02 .2265000000D+00 -.4845060000D+00 -.3099600000D+01 -.6221700000D+01 -.5620600000D+01 .5748000000D+00 .1120000000D-02 .2649596000D+03 .4119000000D-01 .1190000000D-03 .3069000000D+00 -.5093218000D+01 -.3241200000D+01 -.4780000000D-01 -.3741600000D+01 .1273300000D+01 -.2040000000D-02 .2138060000D+03 .2225700000D+00 .7740000000D-03 .4004000000D+00 -.3179420000D+00 -.4560000000D-01 -.3222500000D+01 -.3581300000D+01 +2 2119990830200004282451420.5 .1734300000D+01 -.5880000000D-02 .1513591000D+03 .2599000000D-01 .5550000000D-03 .9839000000D+00 -.4305363000D+01 -.5776000000D+01 -.7553000000D+00 -.2342000000D+01 .6187000000D+00 .2700000000D-03 .2647118000D+03 .7996000000D-01 .2940000000D-03 .5704000000D+00 -.2586974000D+01 -.4115600000D+01 -.8483000000D+00 -.4914400000D+01 .6306000000D+00 .1940000000D-02 .2203940000D+03 .6296000000D-01 .4440000000D-03 .6830000000D+00 -.4090774000D+01 -.5789600000D+01 -.3471600000D+01 -.6072900000D+01 +2 2220000428200012262451662.5 .1114900000D+01 .8700000000D-03 .1231616000D+03 .1681100000D+00 .4360000000D-03 .6330000000D-01 -.1987164000D+01 -.1046400000D+01 -.3955000000D+01 -.5473000000D+00 .7193000000D+00 .9500000000D-03 .2623275000D+03 .1985000000D-01 .1880000000D-03 .7584000000D+00 -.9915600000D-01 -.5658300000D+01 -.1860600000D+01 -.5809900000D+01 .8159000000D+00 .2700000000D-03 .2399550000D+03 .8211000000D-01 .1900000000D-03 .5236000000D+00 -.1591419000D+01 -.4610800000D+01 -.2027400000D+01 -.9434000000D+00 +2 2320001226200108252451904.5 .3381000000D+00 .2210000000D-02 .1351076000D+03 .3490300000D+00 .1120000000D-02 .5255000000D+00 -.5712326000D+01 -.2004500000D+01 -.5154600000D+01 -.5538400000D+01 .4847000000D+00 .1770000000D-02 .2636051000D+03 .5942000000D-01 .1520000000D-03 .5488000000D+00 -.3915884000D+01 -.2115800000D+01 -.5290000000D+01 -.2516000000D+00 .9132000000D+00 .1450000000D-02 .2318781000D+03 .1789700000D+00 .5550000000D-03 .2217000000D+00 -.5411862000D+01 -.5065000000D+01 -.1963000000D+01 -.2717600000D+01 +2 2420010825200204242452146.5 .1273900000D+01 -.7400000000D-02 .1205449000D+03 .1135900000D+00 .9960000000D-03 .1206200000D+01 -.3297622000D+01 -.2592100000D+01 -.5710800000D+01 -.2566500000D+01 .6221000000D+00 -.7000000000D-03 .2626177000D+03 .9670000000D-01 .3860000000D-03 .6797000000D+00 -.1399659000D+01 -.2880600000D+01 -.5926700000D+01 -.2374800000D+01 .8099000000D+00 .3980000000D-02 .2405551000D+03 .1039400000D+00 .5250000000D-03 .7919000000D+00 -.2894799000D+01 -.4933500000D+01 -.2182600000D+01 -.4927600000D+01 +2 2520020424200212222452388.5 .1878000000D+01 -.9390000000D-02 .9750880000D+02 .1465300000D+00 .3250000000D-03 .1784000000D+01 -.1003700000D+01 -.4295000000D+00 -.3659300000D+01 -.2541500000D+01 .9986000000D+00 -.3130000000D-02 .2609372000D+03 .5920000000D-02 .1230000000D-03 .9279000000D+00 -.5186842000D+01 -.1167700000D+01 -.2832000000D+00 -.3004100000D+01 .7987000000D+00 .3630000000D-02 .2531183000D+03 .6199000000D-01 .2610000000D-03 .1093300000D+01 -.4091320000D+00 -.4107900000D+01 -.1593700000D+01 -.5451300000D+01 +2 2620021222200308212452630.5 .1013500000D+01 -.2830000000D-02 .1117193000D+03 .3858500000D+00 .1145000000D-02 .3060000000D+00 -.4692102000D+01 -.8084000000D+00 -.3923200000D+01 -.2283000000D+01 .6874000000D+00 -.6000000000D-03 .2622927000D+03 .9327000000D-01 .2270000000D-03 .5784000000D+00 -.2727072000D+01 -.7611000000D+00 -.3786700000D+01 -.5100500000D+01 .1075300000D+01 .2490000000D-02 .2463152000D+03 .1368400000D+00 .4020000000D-03 .7358000000D+00 -.4221143000D+01 -.3958400000D+01 -.9364000000D+00 -.4090000000D-01 +2 2720030821200404192452872.5 .2407000000D+00 -.2100000000D-02 .9397620000D+02 .1607500000D+00 .1122000000D-02 .3359000000D+00 -.2358773000D+01 -.1708700000D+01 -.4745800000D+01 -.1920800000D+01 .3509000000D+00 .4300000000D-03 .2600613000D+03 .1032100000D+00 .4320000000D-03 .7739000000D+00 -.2001350000D+00 -.1713300000D+01 -.4815100000D+01 -.6126800000D+01 .1247600000D+01 .2260000000D-02 .2548854000D+03 .9659000000D-01 .4370000000D-03 .3630000000D+00 -.1707918000D+01 -.3923000000D+01 -.1085200000D+01 -.8073000000D+00 +2 2820040419200412172453114.5 .8517000000D+00 -.8250000000D-02 .8097910000D+02 .1588000000D-01 .3230000000D-03 .1716700000D+01 -.1254240000D+00 -.8806000000D+00 -.5080100000D+01 -.2499100000D+01 .5228000000D+00 -.3250000000D-02 .2585001000D+03 .4974000000D-01 .3540000000D-03 .9759000000D+00 -.3987638000D+01 -.2262700000D+01 -.5394700000D+01 -.2064800000D+01 .1252200000D+01 .2640000000D-02 .2606369000D+03 .4350000000D-01 .2940000000D-03 .3335000000D+00 -.5508433000D+01 -.4079300000D+01 -.1111600000D+01 -.4556900000D+01 +2 2920041217200508162453356.5 .1114200000D+01 -.7190000000D-02 .9019560000D+02 .3659300000D+00 .9940000000D-03 .1070700000D+01 -.3770494000D+01 -.6088700000D+01 -.2986000000D+01 -.2640600000D+01 .8813000000D+00 -.5170000000D-02 .2589927000D+03 .9772000000D-01 .2260000000D-03 .1500400000D+01 -.1522572000D+01 -.6281800000D+01 -.3301500000D+01 -.2632100000D+01 .1476900000D+01 .1370000000D-02 .2575882000D+03 .6890000000D-01 .1870000000D-03 .6525000000D+00 -.3034001000D+01 -.2846700000D+01 -.8690000000D-01 -.4714900000D+01 +2 3020050816200604152453598.5 -.2321000000D+00 .2230000000D-02 .7539140000D+02 .1979800000D+00 .1159000000D-02 .7400000000D+00 -.1581966000D+01 -.3280000000D+00 -.3484200000D+01 -.5703400000D+01 .3499000000D+00 -.1280000000D-02 .2579737000D+03 .1372800000D+00 .5460000000D-03 .5226000000D+00 -.5266983000D+01 -.4754000000D+00 -.3574800000D+01 -.3910100000D+01 .1594300000D+01 -.2700000000D-03 .2633425000D+03 .9095000000D-01 .3030000000D-03 .3289000000D+00 -.5187250000D+00 -.2483300000D+01 -.5881700000D+01 -.5739900000D+01 +2 3120060415200612132453840.5 -.7762000000D+00 .1950000000D-02 .7090670000D+02 .2311000000D-01 .3510000000D-03 .3008000000D+00 -.5669885000D+01 -.2248400000D+01 -.4485400000D+01 -.6100000000D-02 -.3004000000D+00 .1000000000D-02 .2571126000D+03 .4870000000D-01 .3470000000D-03 .8145000000D+00 -.2773742000D+01 -.1275300000D+01 -.4381400000D+01 -.5638000000D+01 .1738800000D+01 -.1320000000D-02 .2655759000D+03 .5005000000D-01 .2670000000D-03 .6287000000D+00 -.4328447000D+01 -.2650800000D+01 -.5922200000D+01 -.1369000000D+01 +2 3220061213200708122454082.5 .1534000000D+00 -.4460000000D-02 .7324980000D+02 .3016600000D+00 .6350000000D-03 .9052000000D+00 -.2952548000D+01 -.4847700000D+01 -.1712600000D+01 -.2560900000D+01 .4230000000D-01 -.2300000000D-02 .2580922000D+03 .7608000000D-01 .6500000000D-04 .5027000000D+00 -.3110450000D+00 -.4809800000D+01 -.1347000000D+01 -.1113500000D+01 .1771200000D+01 -.1670000000D-02 .2639997000D+03 .3049000000D-01 .9000000000D-04 .7555000000D+00 -.1849925000D+01 -.1434800000D+01 -.5364900000D+01 -.2211000000D+01 +2 3320070812200804102454324.5 -.8900000000D-01 .1420000000D-02 .6997280000D+02 .2595500000D+00 .1315000000D-02 .4058000000D+00 -.9311660000D+00 -.5549400000D+01 -.2404900000D+01 -.5033600000D+01 .7640000000D-01 -.1930000000D-02 .2566731000D+03 .1383700000D+00 .5220000000D-03 .7974000000D+00 -.4047343000D+01 -.5658400000D+01 -.2512700000D+01 -.2297100000D+01 .1613100000D+01 -.7000000000D-04 .2656993000D+03 .7606000000D-01 .1920000000D-03 .4566000000D+00 -.5617364000D+01 -.8938000000D+00 -.4047400000D+01 -.3714800000D+01 +2 3420080410200812082454566.5 -.1341300000D+01 .9320000000D-02 .7141060000D+02 .1100300000D+00 .6430000000D-03 .1863200000D+01 -.4917435000D+01 -.5685700000D+01 -.2718500000D+01 -.5644400000D+01 -.4597000000D+00 .1980000000D-02 .2565388000D+03 .8876000000D-01 .4790000000D-03 .4088000000D+00 -.1560679000D+01 -.6104400000D+01 -.2993200000D+01 -.3925800000D+01 .1471800000D+01 .2500000000D-03 .2654121000D+03 .5378000000D-01 .2730000000D-03 .6263000000D+00 -.3146669000D+01 -.1519400000D+01 -.4637100000D+01 -.4984400000D+01 +2 3520081208200908072454808.5 -.1091200000D+01 .4770000000D-02 .7061810000D+02 .3249700000D+00 .6820000000D-03 .9409000000D+00 -.2224193000D+01 -.3769000000D+01 -.6232000000D+00 -.5871500000D+01 -.6902000000D+00 .1650000000D-02 .2564063000D+03 .8221000000D-01 .7700000000D-04 .7350000000D+00 -.5375952000D+01 -.3775200000D+01 -.6233000000D+00 -.5126800000D+01 .1549900000D+01 -.1980000000D-02 .2666452000D+03 .3297000000D-01 .1820000000D-03 .2579000000D+00 -.6601000000D+00 -.2791500000D+01 -.5378000000D+01 -.8982000000D+00 +2 3620090807201004062455050.5 -.2250000000D+00 .6800000000D-03 .8222550000D+02 .2623300000D+00 .1211000000D-02 .2644000000D+00 -.2138260000D+00 -.4372300000D+01 -.1259600000D+01 -.2779500000D+01 -.5692000000D+00 .7200000000D-03 .2561443000D+03 .1456600000D+00 .5010000000D-03 .5980000000D+00 -.2819618000D+01 -.4380600000D+01 -.1230300000D+01 -.5937600000D+01 .1784300000D+01 -.2510000000D-02 .2633484000D+03 .7125000000D-01 .1940000000D-03 .8654000000D+00 -.4434052000D+01 -.5711400000D+01 -.2298200000D+01 -.1902800000D+01 +2 3720100406201012042455292.5 -.5087000000D+00 .5540000000D-02 .8530150000D+02 .1920000000D+00 .9700000000D-03 .9650000000D+00 -.4088756000D+01 -.5055000000D+01 -.1905500000D+01 -.5310100000D+01 -.5490000000D+00 .1910000000D-02 .2561148000D+03 .1245500000D+00 .5780000000D-03 .5351000000D+00 -.3467430000D+00 -.5092800000D+01 -.1941200000D+01 -.2258000000D+00 .1380000000D+01 .1040000000D-02 .2619766000D+03 .8287000000D-01 .3690000000D-03 .2476000000D+00 -.1967920000D+01 -.6099000000D+01 -.2890500000D+01 -.2963800000D+01 +2 3820101204201108032455534.5 -.1039200000D+01 .7960000000D-02 .8145750000D+02 .2232200000D+00 .3400000000D-03 .1882800000D+01 -.1506781000D+01 -.2874800000D+01 -.2673000000D+00 -.5703200000D+01 -.8821000000D+00 .3420000000D-02 .2557618000D+03 .4006000000D-01 .1560000000D-03 .2704000000D+00 -.4148482000D+01 -.3293000000D+01 -.1873300000D+01 -.5749000000D+01 .9283000000D+00 .3340000000D-02 .2632690000D+03 .3874000000D-01 .8600000000D-04 .9122000000D+00 -.5760370000D+01 -.2463800000D+01 -.4321200000D+01 -.5045200000D+01 +3 3919981231199908112451178.5 -.2634000000D+00 -.2530000000D-02 .2636198000D+03 .5866600000D+00 .2066000000D-02 .2137000000D+00 .2279238000D+01 .5942900000D+01 .2827500000D+01 -.4076800000D+01 .1054700000D+01 -.2200000000D-02 .4354987000D+03 .8693000000D-01 .2270000000D-03 .5259000000D+00 .3946897000D+01 .5932200000D+01 .2956700000D+01 -.1985200000D+01 -.1021700000D+01 .1800000000D-03 .3500757000D+03 .3810000000D+00 .1303000000D-02 .2970000000D+00 .2436300000D+01 .2785100000D+01 .5872600000D+01 -.3831400000D+01 +3 4019990811200003212451401.5 -.7256000000D+00 .3360000000D-02 .2397902000D+03 .2587300000D+00 .1891000000D-02 .3256000000D+00 .6093209000D+01 .3044000000D+00 .3476300000D+01 -.1624600000D+01 .6429000000D+00 .5100000000D-03 .4336467000D+03 .6657000000D-01 .3390000000D-03 .3986000000D+00 .1543956000D+01 .2738000000D+00 .3499800000D+01 -.5720000000D+00 -.7365000000D+00 -.2540000000D-02 .3671188000D+03 .1714800000D+00 .1200000000D-02 .4521000000D+00 .3966600000D-01 .3552200000D+01 .3466000000D+00 -.2469800000D+01 +3 4120000321200010302451624.5 -.3278000000D+00 .2010000000D-02 .2104380000D+03 .1188500000D+00 .1055000000D-02 .4907000000D+00 .3575040000D+01 .9680000000D+00 .4188200000D+01 -.5198000000D+00 .9433000000D+00 -.1290000000D-02 .4321748000D+03 .6813000000D-01 .3250000000D-03 .4611000000D+00 .5409111000D+01 .9432000000D+00 .4169100000D+01 -.5706600000D+01 -.1194700000D+01 -.8100000000D-03 .3867190000D+03 .1001100000D+00 .6890000000D-03 .2014000000D+00 .3913477000D+01 .4615400000D+01 .1261800000D+01 -.4420000000D+00 +3 4220001030200106102451847.5 .3920000000D+00 -.3950000000D-02 .2303044000D+03 .3544600000D+00 .2960000000D-03 .2575000000D+00 .1229840000D+01 .5018100000D+01 .2191200000D+01 -.6012900000D+01 .6816000000D+00 .1440000000D-02 .4332472000D+03 .3368000000D-01 .1600000000D-03 .5629000000D+00 .2983235000D+01 .5037500000D+01 .4649900000D+01 -.4155000000D+01 -.1388500000D+01 .2860000000D-02 .3743992000D+03 .1802200000D+00 .2130000000D-03 .2675000000D+00 .1484221000D+01 .1690400000D+01 .3946400000D+01 -.6034800000D+01 +3 4320010610200201192452070.5 .3421000000D+00 -.5930000000D-02 .1789225000D+03 .4639600000D+00 .1661000000D-02 .2989000000D+00 .4879997000D+01 .5714000000D+01 .2583600000D+01 -.4631000000D+01 .1173700000D+01 -.2690000000D-02 .4283815000D+03 .8678000000D-01 .2690000000D-03 .5094000000D+00 .5944070000D+00 .5787300000D+01 .2690800000D+01 -.2214200000D+01 -.1374400000D+01 .2940000000D-02 .4066481000D+03 .2161700000D+00 .7600000000D-03 .3192000000D+00 .5380154000D+01 .2524800000D+01 .5628600000D+01 -.4434600000D+01 +3 4420020119200208302452293.5 -.3003000000D+00 -.8100000000D-03 .1939951000D+03 .5956200000D+00 .2209000000D-02 .1730000000D+00 .2531556000D+01 .3960000000D-01 .3196700000D+01 -.2812400000D+01 .8910000000D+00 -.4600000000D-03 .4305351000D+03 .1910700000D+00 .6100000000D-03 .4612000000D+00 .4438114000D+01 .6245500000D+01 .3154500000D+01 -.8800000000D+00 -.8268000000D+00 -.5500000000D-03 .3977278000D+03 .2602600000D+00 .9090000000D-03 .5982000000D+00 .2944274000D+01 .3422600000D+01 .1957000000D+00 -.3134600000D+01 +3 4520020830200304102452516.5 -.5341000000D+00 .3510000000D-02 .1761075000D+03 .2184100000D+00 .1826000000D-02 .4239000000D+00 .4125900000D-01 .7339000000D+00 .3894700000D+01 -.8931000000D+00 .8607000000D+00 -.2000000000D-03 .4286204000D+03 .9378000000D-01 .6210000000D-03 .3173000000D+00 .2042813000D+01 .7029000000D+00 .3845100000D+01 -.5958500000D+01 -.9678000000D+00 -.1120000000D-02 .4066481000D+03 .9618000000D-01 .7420000000D-03 .3840000000D+00 .5425120000D+00 .4314000000D+01 .1036700000D+01 -.1329200000D+01 +3 4620030410200311192452739.5 .3056000000D+00 -.1750000000D-02 .1484749000D+03 .7015000000D-01 .9110000000D-03 .4211000000D+00 .3703176000D+01 .1310500000D+01 .4621900000D+01 -.4067000000D+00 .9080000000D+00 .8300000000D-03 .4261627000D+03 .6769000000D-01 .4360000000D-03 .4106000000D+00 .5927236000D+01 .1353300000D+01 .4565300000D+01 -.4991200000D+01 -.1085200000D+01 .7500000000D-03 .4204808000D+03 .7111000000D-01 .4640000000D-03 .3397000000D+00 .4415063000D+01 .5489600000D+01 .2060000000D+01 -.5914800000D+01 +3 4720031119200406292452962.5 .5740000000D+00 -.5760000000D-02 .1659063000D+03 .4244400000D+00 .5570000000D-03 .2195000000D+00 .1437423000D+01 .5418500000D+01 .2418000000D+01 -.5503600000D+01 .1227900000D+01 -.2310000000D-02 .4291215000D+03 .1008700000D+00 .6300000000D-04 .3661000000D+00 .3490339000D+01 .5409100000D+01 .4616100000D+01 -.2739600000D+01 -.1198500000D+01 .2210000000D-02 .4121388000D+03 .1310000000D+00 .2180000000D-03 .3151000000D+00 .1987296000D+01 .2308100000D+01 .4743600000D+01 -.5091300000D+01 +3 4820040629200502072453185.5 .2229000000D+00 -.4720000000D-02 .1272592000D+03 .5012300000D+00 .1914000000D-02 .9450000000D-01 .4907722000D+01 .6081100000D+01 .2950700000D+01 -.3743500000D+01 .1173300000D+01 -.2000000000D-02 .4240172000D+03 .1654300000D+00 .5970000000D-03 .3486000000D+00 .1124788000D+01 .6019800000D+01 .2910400000D+01 -.1630300000D+01 -.9877000000D+00 .1330000000D-02 .4308146000D+03 .1342000000D+00 .4880000000D-03 .7454000000D+00 .5878271000D+01 .3181900000D+01 .6283000000D+01 -.3503400000D+01 +3 4920050207200509182453408.5 -.4023000000D+00 .1230000000D-02 .1353349000D+03 .5722900000D+00 .2228000000D-02 .2634000000D+00 .2593294000D+01 .4487000000D+00 .3597700000D+01 -.1055900000D+01 .8878000000D+00 -.2800000000D-03 .4251061000D+03 .2489800000D+00 .8620000000D-03 .4480000000D+00 .4965211000D+01 .4151000000D+00 .3574800000D+01 -.5019000000D+00 -.7620000000D+00 -.6400000000D-03 .4273734000D+03 .1375800000D+00 .4620000000D-03 .5027000000D+00 .3446362000D+01 .4269500000D+01 .9471000000D+00 -.1445600000D+01 +3 5020050918200604292453631.5 -.1252000000D+00 .1480000000D-02 .1263819000D+03 .1671200000D+00 .1690000000D-02 .3565000000D+00 .6988100000D-01 .1172200000D+01 .4329200000D+01 -.7660000000D+00 .9464000000D+00 .8800000000D-03 .4237816000D+03 .9182000000D-01 .7610000000D-03 .5269000000D+00 .2569084000D+01 .1198500000D+01 .4317700000D+01 -.5231400000D+01 -.9128000000D+00 -.3200000000D-03 .4299968000D+03 .6280000000D-01 .4580000000D-03 .3024000000D+00 .1040440000D+01 .5312700000D+01 .2026300000D+01 -.3419000000D+00 +3 5120060429200612082453854.5 .6857000000D+00 -.4920000000D-02 .1158422000D+03 .1642000000D-01 .7100000000D-03 .2922000000D+00 .3543140000D+01 .7141000000D+00 .5026600000D+01 -.7240000000D-01 .1223700000D+01 -.1450000000D-02 .4210258000D+03 .5325000000D-01 .4440000000D-03 .1721000000D+00 .1862330000D+00 .1700600000D+01 .4998500000D+01 -.2889800000D+01 -.9364000000D+00 .1380000000D-02 .4353064000D+03 .6264000000D-01 .3340000000D-03 .4575000000D+00 .4912449000D+01 .5060000000D-01 .3048700000D+01 -.5578200000D+01 +3 5220061208200707192454077.5 .5982000000D+00 -.6580000000D-02 .1199089000D+03 .4793700000D+00 .8230000000D-03 .1180000000D+00 .1401658000D+01 .5806200000D+01 .2729400000D+01 -.5713800000D+01 .1373600000D+01 -.2980000000D-02 .4236873000D+03 .1785000000D+00 .1890000000D-03 .3362000000D+00 .4021229000D+01 .5775200000D+01 .2852300000D+01 -.2292200000D+01 -.8714000000D+00 .8700000000D-03 .4325776000D+03 .6667000000D-01 .1370000000D-03 .6742000000D+00 .2485637000D+01 .3293500000D+01 .5421500000D+01 -.3749200000D+01 +3 5320070719200802272454300.5 .1140000000D-01 -.2720000000D-02 .1154794000D+03 .5073700000D+00 .2065000000D-02 .1924000000D+00 .4692474000D+01 .1707000000D+00 .3324400000D+01 -.8436000000D+00 .1093600000D+01 -.1250000000D-02 .4207565000D+03 .2017000000D+00 .7740000000D-03 .5093000000D+00 .1670908000D+01 .1749000000D+00 .3331400000D+01 -.8776000000D+00 -.6161000000D+00 -.8600000000D-03 .4363996000D+03 .5233000000D-01 .1690000000D-03 .3831000000D+00 .9078000000D-01 .4548600000D+01 .1309100000D+01 -.2261400000D+01 +3 5420080227200810072454523.5 -.3916000000D+00 .2260000000D-02 .1149198000D+03 .5301200000D+00 .2167000000D-02 .3699000000D+00 .2362151000D+01 .8774000000D+00 .4016800000D+01 -.1027800000D+01 .1047500000D+01 -.7100000000D-03 .4210409000D+03 .2546300000D+00 .9410000000D-03 .4695000000D+00 .5516153000D+01 .8637000000D+00 .4013400000D+01 -.5631000000D+01 -.7819000000D+00 -.1700000000D-03 .4368156000D+03 .1102200000D+00 .3410000000D-03 .5878000000D+00 .3944182000D+01 .5790100000D+01 .2702900000D+01 -.9038000000D+00 +3 5520081007200905182454746.5 .3276000000D+00 -.1580000000D-02 .1152777000D+03 .1085300000D+00 .1516000000D-02 .2502000000D+00 .6141327000D+01 .1601200000D+01 .4765200000D+01 -.5030000000D+00 .1010300000D+01 .1080000000D-02 .4211160000D+03 .7929000000D-01 .7880000000D-03 .1294000000D+00 .3115122000D+01 .1578900000D+01 .4748800000D+01 -.4232700000D+01 -.7992000000D+00 .8400000000D-03 .4362133000D+03 .5278000000D-01 .3970000000D-03 .5241000000D+00 .1536919000D+01 .2027000000D+00 .3478500000D+01 -.5867500000D+01 +3 5620090518200912272454969.5 .8901000000D+00 -.7510000000D-02 .1368808000D+03 .7107000000D-01 .4310000000D-03 .2340000000D+00 .3334692000D+01 .5709500000D+01 .5364900000D+01 -.2762000000D+00 .1515000000D+01 -.3660000000D-02 .4198655000D+03 .1869000000D-01 .3400000000D-03 .2697000000D+00 .7433990000D+00 .2002100000D+01 .5417500000D+01 -.2852500000D+01 -.6352000000D+00 .1500000000D-03 .4312134000D+03 .4250000000D-01 .2210000000D-03 .6163000000D+00 .5410691000D+01 .4729000000D+00 .3991700000D+01 -.4120500000D+01 +3 5720091227201008072455192.5 .4222000000D+00 -.5920000000D-02 .1205114000D+03 .5137600000D+00 .1067000000D-02 .1396000000D+00 .1151364000D+01 .6185200000D+01 .3065600000D+01 -.5795400000D+01 .1301600000D+01 -.1820000000D-02 .4206012000D+03 .2177400000D+00 .3540000000D-03 .4323000000D+00 .4571737000D+01 .6179900000D+01 .3080100000D+01 -.1643700000D+01 -.2624000000D+00 -.3090000000D-02 .4363010000D+03 .9196000000D-01 .1190000000D-03 .3848000000D+00 .2982612000D+01 .5567300000D+01 .3355300000D+01 -.2558800000D+01 +3 5820100807201103182455415.5 -.2148000000D+00 .2000000000D-04 .1505617000D+03 .4831500000D+00 .2094000000D-02 .3015000000D+00 .4615303000D+01 .5679000000D+00 .3715500000D+01 -.1158900000D+01 .1173900000D+01 -.2220000000D-02 .4213322000D+03 .2071800000D+00 .8550000000D-03 .7076000000D+00 .2222781000D+01 .5850000000D+00 .3750100000D+01 -.8950000000D-01 -.7608000000D+00 .3200000000D-03 .4253341000D+03 .1097800000D+00 .4450000000D-03 .3453000000D+00 .5875100000D+00 .2760000000D-01 .3242500000D+01 -.1288200000D+01 +4 5919981231199907252451178.4 -.1722000000D+00 -.1810000000D-02 .3528978000D+03 .7636800000D+00 .2649000000D-02 .2271000000D+00 .2766042000D+01 .1334000000D+00 .3284500000D+01 .2626700000D+01 -.2442000000D+00 -.7500000000D-03 .5817678000D+03 .7586000000D-01 .2150000000D-03 .4808000000D+00 .4437088000D+01 .2166000000D+00 .3482900000D+01 .7700000000D-02 -.8224000000D+00 .1020000000D-02 .4677271000D+03 .4966900000D+00 .1700000000D-02 .3219000000D+00 .2925511000D+01 .3231200000D+01 .7440000000D-01 .3774600000D+01 +4 6019990725200002162451384.4 -.5392000000D+00 .3900000000D-03 .3138796000D+03 .5213500000D+00 .3000000000D-02 .1070000000D+00 .4590869000D+01 .5158100000D+01 .2032200000D+01 .2596100000D+01 -.1823000000D+00 .9700000000D-03 .5799238000D+03 .7443000000D-01 .3220000000D-03 .4476000000D+00 .5646300000D-01 .5086400000D+01 .2069900000D+01 .3072000000D+01 -.8801000000D+00 .1250000000D-02 .4962722000D+03 .3458900000D+00 .1923000000D-02 .3172000000D+00 .4839403000D+01 .2058200000D+01 .5143800000D+01 .2089900000D+01 +4 6120000216200009092451590.4 -.2862000000D+00 -.1810000000D-02 .3002584000D+03 .5888000000D+00 .2875000000D-02 .1196000000D+00 .1623940000D+00 .3879000000D+01 .7535000000D+00 .1765000000D+01 -.3900000000D+00 .2800000000D-03 .5790232000D+03 .1196500000D+00 .5370000000D-03 .4978000000D+00 .1944770000D+01 .3802200000D+01 .6786000000D+00 .6281000000D+00 -.8525000000D+00 .1500000000D-03 .5058015000D+03 .3294100000D+00 .1587000000D-02 .3848000000D+00 .4472460000D+00 .8334000000D+00 .3960700000D+01 .6001800000D+01 +4 6220000909200104032451796.4 -.2878000000D+00 -.1090000000D-02 .2998308000D+03 .1520400000D+00 .2221000000D-02 .8154000000D+00 .2060534000D+01 .2471400000D+01 .5738500000D+01 .2540500000D+01 -.4040000000D-01 -.7400000000D-03 .5789143000D+03 .7229000000D-01 .5350000000D-03 .1216000000D+00 .3841205000D+01 .2398600000D+01 .5658200000D+01 .4716000000D+01 -.7604000000D+00 .8100000000D-03 .5050806000D+03 .8338000000D-01 .1161000000D-02 .1464000000D+00 .2341945000D+01 .6153700000D+01 .2735500000D+01 .3836000000D+01 +4 6320010403200110262452002.4 -.7601000000D+00 .3630000000D-02 .2507582000D+03 .1523200000D+00 .1633000000D-02 .3292000000D+00 .3810184000D+01 .1308900000D+01 .4497300000D+01 .3398100000D+01 -.3940000000D+00 .1640000000D-02 .5751397000D+03 .5706000000D-01 .4750000000D-03 .2146000000D+00 .5747766000D+01 .1219300000D+01 .4414900000D+01 .2462200000D+01 -.8720000000D+00 -.1010000000D-02 .5357795000D+03 .8880000000D-01 .8480000000D-03 .6753000000D+00 .4249728000D+01 .4857000000D+01 .1587700000D+01 .5058000000D+00 +4 6420011026200205202452208.4 -.7725000000D+00 .5010000000D-02 .2794735000D+03 .3466200000D+00 .3630000000D-03 .6067000000D+00 .5787177000D+01 .3297000000D+01 .3062100000D+01 .4781200000D+01 -.3180000000D+00 .9100000000D-03 .5778224000D+03 .3213000000D-01 .3210000000D-03 .5877000000D+00 .1344349000D+01 .3695600000D+01 .3022100000D+01 .5999300000D+01 -.4635000000D+00 -.2690000000D-02 .5190140000D+03 .1715800000D+00 .1860000000D-03 .2920000000D+00 .6130733000D+01 .1060000000D-01 .1292700000D+01 .2817100000D+01 +4 6520020520200212122452414.4 -.2042000000D+00 -.1030000000D-02 .2137788000D+03 .3607200000D+00 .6840000000D-03 .9398000000D+00 .1155505000D+01 .2045500000D+01 .5276000000D+01 .6236400000D+01 .3050000000D-01 -.9700000000D-03 .5716260000D+03 .8374000000D-01 .9800000000D-04 .1442000000D+00 .3269706000D+01 .2049100000D+01 .5620000000D+01 .4424400000D+01 -.1086600000D+01 .1170000000D-02 .5555428000D+03 .1353700000D+00 .2050000000D-03 .5264000000D+00 .1765388000D+01 .5246000000D+01 .1787100000D+01 .2398000000D+01 +4 6620021212200307062452620.4 .1859000000D+00 -.3660000000D-02 .2459942000D+03 .7025000000D+00 .1598000000D-02 .4167000000D+00 .3181183000D+01 .7323000000D+00 .3883600000D+01 .9143000000D+00 -.1341000000D+00 -.1480000000D-02 .5744285000D+03 .1778800000D+00 .3130000000D-03 .6751000000D+00 .5138176000D+01 .6614000000D+00 .3849700000D+01 .6340000000D+00 -.1059000000D+01 .1570000000D-02 .5395970000D+03 .2636400000D+00 .6290000000D-03 .9790000000D-01 .3641129000D+01 .4015600000D+01 .7566000000D+00 .6027000000D+01 +4 6720030706200401282452826.4 -.9130000000D-01 -.1660000000D-02 .1917299000D+03 .6431500000D+00 .2673000000D-02 .4823000000D+00 .4810497000D+01 .5764500000D+01 .2629400000D+01 .2662700000D+01 .4320000000D-01 -.5900000000D-03 .5696657000D+03 .1988200000D+00 .7380000000D-03 .2770000000D+00 .7881260000D+00 .5709300000D+01 .2595800000D+01 .4034700000D+01 -.1035600000D+01 .1550000000D-02 .5659952000D+03 .2281300000D+00 .9150000000D-03 .2665000000D+00 .5556882000D+01 .2852000000D+01 .5914000000D+01 .3532100000D+01 +4 6820040128200408212453032.4 -.4299000000D+00 .1940000000D-02 .2045317000D+03 .7869300000D+00 .2912000000D-02 .2389000000D+00 .4976250000D+00 .4495200000D+01 .1359500000D+01 .3238700000D+01 -.3359000000D+00 .8400000000D-03 .5713088000D+03 .2679500000D+00 .9340000000D-03 .1628000000D+00 .2662715000D+01 .4435700000D+01 .1294400000D+01 .3294700000D+01 -.1100100000D+01 .7200000000D-03 .5599721000D+03 .2259800000D+00 .8070000000D-03 .5674000000D+00 .1155045000D+01 .1725000000D+01 .4829300000D+01 .4633000000D+00 +4 6920040821200503152453238.4 -.2075000000D+00 -.3700000000D-03 .1806333000D+03 .5036200000D+00 .3108000000D-02 .3597000000D+00 .2230255000D+01 .3213900000D+01 .8680000000D-01 .2680900000D+01 -.1304000000D+00 .1800000000D-03 .5686332000D+03 .1901600000D+00 .1067000000D-02 .3462000000D+00 .4580873000D+01 .3173400000D+01 .4580000000D-01 .6206500000D+01 -.9461000000D+00 .1360000000D-02 .5697684000D+03 .1530200000D+00 .8640000000D-03 .3257000000D+00 .3060788000D+01 .5846000000D+00 .3633000000D+01 .4535200000D+01 +4 7020050315200510072453444.4 -.2175000000D+00 .7800000000D-03 .1688927000D+03 .5514300000D+00 .2891000000D-02 .2643000000D+00 .3988513000D+01 .1965000000D+01 .5105100000D+01 .2183500000D+01 -.1423000000D+00 .5100000000D-03 .5672649000D+03 .2283200000D+00 .1157000000D-02 .3849000000D+00 .1998990000D+00 .1903600000D+01 .5049000000D+01 .3815200000D+01 -.1103800000D+01 .0000000000D+00 .5749375000D+03 .1311900000D+00 .6400000000D-03 .2472000000D+00 .4953824000D+01 .5825700000D+01 .2637300000D+01 .9656000000D+00 +4 7120051007200605012453650.4 -.5789000000D+00 .5070000000D-02 .1726125000D+03 .6210000000D-01 .1980000000D-02 .4738000000D+00 .5925469000D+01 .6614000000D+00 .3855500000D+01 .4409400000D+01 -.2764000000D+00 .7900000000D-03 .5678379000D+03 .6769000000D-01 .8870000000D-03 .3195000000D+00 .2090160000D+01 .5455000000D+00 .3786800000D+01 .1881000000D+00 -.7842000000D+00 -.9500000000D-03 .5731483000D+03 .4632000000D-01 .4640000000D-03 .3980000000D+00 .5635030000D+00 .5376300000D+01 .1636000000D+01 .2947000000D+00 +4 7220060501200611232453856.4 -.1951000000D+00 .1400000000D-02 .1522820000D+03 .5129000000D-01 .1238000000D-02 .7953000000D+00 .1111813000D+01 .5597500000D+01 .2558100000D+01 .5769900000D+01 -.5610000000D-01 .1070000000D-02 .5643047000D+03 .5018000000D-01 .6360000000D-03 .6524000000D+00 .4024770000D+01 .5580100000D+01 .2496000000D+01 .5065800000D+01 -.1042800000D+01 -.1900000000D-03 .5823659000D+03 .3383000000D-01 .3270000000D-03 .1983000000D+00 .2468863000D+01 .3742600000D+01 .4607000000D+00 .3160200000D+01 +4 7320061123200706172454062.4 .3611000000D+00 -.3260000000D-02 .1606665000D+03 .4191000000D+00 .4900000000D-04 .6822000000D+00 .3259081000D+01 .1355300000D+01 .5553000000D+00 .3490000000D+00 -.8050000000D-01 -.1420000000D-02 .5659650000D+03 .1285900000D+00 .1960000000D-03 .1731000000D+00 .5889200000D+01 .1298600000D+01 .1254000000D+01 .4501000000D+00 -.9357000000D+00 -.1000000000D-02 .5786439000D+03 .6009000000D-01 .1800000000D-03 .4328000000D+00 .4350913000D+01 .4945700000D+01 .4532000000D+00 .1105700000D+01 +4 7420070617200801092454268.4 .5138000000D+00 -.5200000000D-02 .1541771000D+03 .4442000000D+00 .1140000000D-02 .6203000000D+00 .4576891000D+01 .5590000000D-01 .3189600000D+01 .2007600000D+01 .3657000000D+00 -.3280000000D-02 .5629933000D+03 .1669800000D+00 .3350000000D-03 .2456000000D+00 .1560775000D+01 .2770000000D-01 .3157100000D+01 .1282800000D+01 -.1077600000D+01 .1400000000D-02 .5836321000D+03 .4538000000D-01 .1600000000D-04 .4276000000D+00 .6264684000D+01 .4569800000D+01 .1245400000D+01 .4437900000D+01 +4 7520080109200808022454474.4 -.1243000000D+00 .1680000000D-02 .1511576000D+03 .7389800000D+00 .1907000000D-02 .5725000000D+00 .4669940000D+00 .5110500000D+01 .1977300000D+01 .2888700000D+01 -.2285000000D+00 .1100000000D-02 .5642348000D+03 .2942400000D+00 .6830000000D-03 .5947000000D+00 .3417842000D+01 .5081100000D+01 .1956700000D+01 .3720200000D+01 -.1248400000D+01 .9000000000D-03 .5840070000D+03 .9121000000D-01 .1690000000D-03 .1942000000D+00 .1859584000D+01 .3562800000D+01 .1771000000D+00 .1355400000D+01 +4 7620080802200902242454680.4 -.3066000000D+00 .2750000000D-02 .1620801000D+03 .6295800000D+00 .2810000000D-02 .4253000000D+00 .1900859000D+01 .3829100000D+01 .6905000000D+00 .3730500000D+01 -.1553000000D+00 .5700000000D-03 .5627343000D+03 .2709200000D+00 .1123000000D-02 .1967000000D+00 .5366225000D+01 .3813100000D+01 .6815000000D+00 .1875500000D+01 -.8105000000D+00 -.8100000000D-03 .5815290000D+03 .1040000000D+00 .3850000000D-03 .3883000000D+00 .3772075000D+01 .2510500000D+01 .5700800000D+01 .6180900000D+01 +4 7720090224200909182454886.4 -.1900000000D-02 .1210000000D-02 .1582642000D+03 .7580900000D+00 .2963000000D-02 .1953000000D+00 .3867122000D+01 .2572600000D+01 .5708500000D+01 .8759000000D+00 .7130000000D-01 -.7000000000D-04 .5628127000D+03 .3402000000D+00 .1279000000D-02 .4747000000D+00 .9591620000D+00 .2555900000D+01 .5693100000D+01 .4809100000D+01 -.1163500000D+01 .5000000000D-04 .5829345000D+03 .1493800000D+00 .5650000000D-03 .2268000000D+00 .5655904000D+01 .1642400000D+01 .4833200000D+01 .4910400000D+01 +4 7820090918201004122455092.4 -.1060000000D-01 .1930000000D-02 .1693567000D+03 .4287200000D+00 .2961000000D-02 .1274000000D+00 .5589666000D+01 .1339200000D+01 .4471300000D+01 .4365700000D+01 -.1753000000D+00 .5200000000D-03 .5624832000D+03 .2075700000D+00 .1301000000D-02 .1772000000D+00 .2878341000D+01 .1302200000D+01 .4444100000D+01 .2923200000D+01 -.9461000000D+00 -.3400000000D-03 .5794978000D+03 .1083800000D+00 .6210000000D-03 .3775000000D+00 .1276063000D+01 .2424000000D+00 .3527500000D+01 .8786000000D+00 +4 7920100412201011042455298.4 .2800000000D-01 .2080000000D-02 .1860789000D+03 .4536200000D+00 .2555000000D-02 .3774000000D+00 .1028911000D+01 .5770000000D-01 .3195700000D+01 .5413300000D+01 .1787000000D+00 -.7000000000D-04 .5627482000D+03 .2203000000D+00 .1191000000D-02 .2079000000D+00 .4791330000D+01 .4470000000D-01 .3183000000D+01 .6069700000D+01 -.1032400000D+01 -.1800000000D-03 .5740926000D+03 .1342400000D+00 .7080000000D-03 .6210000000D+00 .3170043000D+01 .5558900000D+01 .2477100000D+01 .5032400000D+01 +4 8020101104201105292455504.4 .3031000000D+00 -.2200000000D-03 .1776174000D+03 .3190000000D-01 .1597000000D-02 .6891000000D+00 .2993259000D+01 .2033500000D+01 .1918900000D+01 .6178600000D+01 .3570000000D-01 -.1100000000D-02 .5628256000D+03 .2162000000D-01 .8020000000D-03 .4234000000D+00 .3910750000D+00 .4914100000D+01 .1915700000D+01 .4953100000D+01 -.1014000000D+01 -.1210000000D-02 .5762519000D+03 .3560000000D-01 .5990000000D-03 .2876000000D+00 .5061383000D+01 .4096900000D+01 .1294200000D+01 .1486300000D+01 +5 8119981231199902102451178.0 -.4241000000D+00 .5100000000D-03 .8965530000D+02 .4409720000D+01 .6483700000D-01 .3229000000D+00 .1416259000D+01 .5848700000D+01 .3563800000D+01 -.3346800000D+01 .1339000000D+00 -.4300000000D-03 .1322766000D+03 .6982940000D+01 .1160910000D+00 .1150000000D-01 .3129269000D+01 .1391400000D+01 .5356200000D+01 -.5126700000D+01 -.4631000000D+00 .4000000000D-04 .1032531000D+03 .4952180000D+01 .7522900000D-01 .3696000000D+00 .1617673000D+01 .6130300000D+01 .3920200000D+01 -.3333700000D+01 +5 8219990210199903232451219.0 -.4093000000D+00 .1130000000D-02 .8576100000D+02 .4180400000D+01 .6106300000D-01 .2996000000D+00 .1426245000D+01 .5860200000D+01 .3580300000D+01 -.3296500000D+01 .1876000000D+00 -.1490000000D-02 .1321501000D+03 .6928810000D+01 .1142720000D+00 .4550000000D-01 .3167152000D+01 .1428000000D+01 .5392900000D+01 -.5549200000D+01 -.4790000000D+00 .6500000000D-03 .1064180000D+03 .5054740000D+01 .7697600000D-01 .3766000000D+00 .1658714000D+01 .6177600000D+01 .3973000000D+01 -.3296700000D+01 +5 8319990323199905032451260.0 -.3734000000D+00 .5200000000D-03 .8191110000D+02 .3942660000D+01 .5748900000D-01 .2775000000D+00 .1449241000D+01 .5900300000D+01 .3638200000D+01 -.3329900000D+01 .1968000000D+00 -.1900000000D-03 .1320811000D+03 .6901090000D+01 .1130780000D+00 .6260000000D-01 .3218558000D+01 .1477000000D+01 .5440700000D+01 -.6277700000D+01 -.4729000000D+00 .2800000000D-03 .1091850000D+03 .5149480000D+01 .7863800000D-01 .3791000000D+00 .1711004000D+01 .6229800000D+01 .4025600000D+01 -.3323600000D+01 +5 8419990503199906132451301.0 -.3626000000D+00 .6700000000D-03 .7948270000D+02 .3769150000D+01 .5529400000D-01 .2638000000D+00 .1491547000D+01 .5971700000D+01 .3738600000D+01 -.3290200000D+01 .2575000000D+00 -.1490000000D-02 .1322248000D+03 .6922400000D+01 .1128800000D+00 .9710000000D-01 .3277794000D+01 .1531100000D+01 .5491700000D+01 -.6031600000D+01 -.4748000000D+00 .4600000000D-03 .1107063000D+03 .5198440000D+01 .7966200000D-01 .3804000000D+00 .1767777000D+01 .6281800000D+01 .4076000000D+01 -.3313800000D+01 +5 8519990613199907242451342.0 -.3520000000D+00 .2300000000D-03 .7923640000D+02 .3727770000D+01 .5566400000D-01 .2633000000D+00 .1554398000D+01 .6065300000D+01 .3858000000D+01 -.3309900000D+01 .2629000000D+00 -.3000000000D-03 .1325646000D+03 .6990920000D+01 .1137960000D+00 .1140000000D+00 .3336609000D+01 .1583400000D+01 .5538500000D+01 -.8800000000D-01 -.4659000000D+00 .3900000000D-03 .1105066000D+03 .5198850000D+01 .8005000000D-01 .3778000000D+00 .1822087000D+01 .4590000000D-01 .4118900000D+01 -.3326700000D+01 +5 8619990724199909032451383.0 -.3621000000D+00 .1900000000D-03 .8108430000D+02 .3818660000D+01 .5814500000D-01 .2786000000D+00 .1625954000D+01 .6152300000D+01 .3955900000D+01 -.3303600000D+01 .3245000000D+00 -.1810000000D-02 .1330968000D+03 .7078830000D+01 .1150950000D+00 .1463000000D+00 .3386709000D+01 .1625600000D+01 .5575000000D+01 -.6202100000D+01 -.4491000000D+00 .2300000000D-03 .1087905000D+03 .5142550000D+01 .7954900000D-01 .3712000000D+00 .1865876000D+01 .8520000000D-01 .4156200000D+01 -.3339800000D+01 +5 8719990903199910142451424.0 -.3813000000D+00 .3400000000D-03 .8372970000D+02 .3977210000D+01 .6124600000D-01 .3011000000D+00 .1689232000D+01 .6208700000D+01 .4004800000D+01 -.3300500000D+01 .3215000000D+00 -.5400000000D-03 .1335465000D+03 .7154960000D+01 .1162640000D+00 .1596000000D+00 .3425061000D+01 .1657200000D+01 .5601300000D+01 -.1256000000D+00 -.4412000000D+00 .6300000000D-03 .1064441000D+03 .5069070000D+01 .7900500000D-01 .3607000000D+00 .1897806000D+01 .1220000000D+00 .4194100000D+01 -.3318100000D+01 +5 8819991014199911242451465.0 -.3874000000D+00 .1400000000D-03 .8540650000D+02 .4085050000D+01 .6277400000D-01 .3183000000D+00 .1730953000D+01 .6228200000D+01 .4009400000D+01 -.3334400000D+01 .3564000000D+00 -.1730000000D-02 .1338623000D+03 .7190620000D+01 .1165390000D+00 .1704000000D+00 .3452898000D+01 .1680000000D+01 .5621100000D+01 -.6262900000D+01 -.4158000000D+00 .1000000000D-04 .1049491000D+03 .5021290000D+01 .7896900000D-01 .3524000000D+00 .1921574000D+01 .1602000000D+00 .4238600000D+01 -.3353500000D+01 +5 8919991124200001042451506.0 -.3924000000D+00 .6700000000D-03 .8486670000D+02 .4071830000D+01 .6206400000D-01 .3201000000D+00 .1751701000D+01 .6225800000D+01 .3992100000D+01 -.3312500000D+01 .3425000000D+00 -.6600000000D-03 .1339175000D+03 .7174860000D+01 .1157140000D+00 .1665000000D+00 .3476722000D+01 .1701300000D+01 .5641500000D+01 -.1142000000D+00 -.4175000000D+00 .6000000000D-03 .1052837000D+03 .5044410000D+01 .8013400000D-01 .3491000000D+00 .1945913000D+01 .2029000000D+00 .4287200000D+01 -.3303700000D+01 +5 9020000104200002142451547.0 -.3628000000D+00 .2500000000D-03 .8208460000D+02 .3928390000D+01 .5924700000D-01 .3020000000D+00 .1760867000D+01 .6220000000D+01 .3978300000D+01 -.3353200000D+01 .3776000000D+00 -.1630000000D-02 .1338717000D+03 .7111390000D+01 .1137650000D+00 .1838000000D+00 .3505035000D+01 .1728400000D+01 .5670400000D+01 -.5800000000D-02 -.3897000000D+00 -.2900000000D-03 .1073778000D+03 .5126950000D+01 .8194100000D-01 .3416000000D+00 .1978432000D+01 .2489000000D+00 .4337200000D+01 -.3356600000D+01 +5 9120000214200003262451588.0 -.3469000000D+00 .8800000000D-03 .7797680000D+02 .3707540000D+01 .5560800000D-01 .2742000000D+00 .1770874000D+01 .6230900000D+01 .3991500000D+01 -.3306200000D+01 .3867000000D+00 -.8300000000D-03 .1337281000D+03 .7034520000D+01 .1114920000D+00 .1995000000D+00 .3545166000D+01 .1767400000D+01 .5712300000D+01 -.8410000000D-01 -.4005000000D+00 .7300000000D-03 .1102483000D+03 .5240340000D+01 .8415700000D-01 .3358000000D+00 .2022756000D+01 .3004000000D+00 .4387800000D+01 -.3288600000D+01 +5 9220000326200005062451629.0 -.3043000000D+00 .1600000000D-03 .7394350000D+02 .3481290000D+01 .5226600000D-01 .2459000000D+00 .1793487000D+01 .6272100000D+01 .4047700000D+01 -.3371200000D+01 .4207000000D+00 -.1220000000D-02 .1337163000D+03 .6979920000D+01 .1096700000D+00 .2287000000D+00 .3598012000D+01 .1817300000D+01 .5765300000D+01 -.5450000000D-01 -.3685000000D+00 -.4400000000D-03 .1128027000D+03 .5342740000D+01 .8606600000D-01 .3296000000D+00 .2077882000D+01 .3556000000D+00 .4439800000D+01 -.3382800000D+01 +5 9320000506200006162451670.0 -.2923000000D+00 .7100000000D-03 .7129490000D+02 .3327550000D+01 .5071900000D-01 .2258000000D+00 .1836814000D+01 .6750000000D-01 .4149000000D+01 -.3295800000D+01 .4461000000D+00 -.9300000000D-03 .1338698000D+03 .6975290000D+01 .1089130000D+00 .2514000000D+00 .3658009000D+01 .1872000000D+01 .5821300000D+01 -.8130000000D-01 -.3804000000D+00 .6500000000D-03 .1141968000D+03 .5415280000D+01 .8771700000D-01 .3303000000D+00 .2137527000D+01 .4121000000D+00 .4489400000D+01 -.3303000000D+01 +5 9420000616200007272451711.0 -.2598000000D+00 -.1700000000D-03 .7085530000D+02 .3305550000D+01 .5171100000D-01 .2117000000D+00 .1902805000D+01 .1709000000D+00 .4269400000D+01 -.3362600000D+01 .4784000000D+00 -.1060000000D-02 .1342718000D+03 .7017250000D+01 .1092050000D+00 .2826000000D+00 .3716087000D+01 .1923300000D+01 .5871600000D+01 -.9710000000D-01 -.3414000000D+00 -.6300000000D-03 .1141132000D+03 .5441820000D+01 .8857300000D-01 .3209000000D+00 .2194284000D+01 .4621000000D+00 .4532100000D+01 -.3390600000D+01 +5 9520000727200009062451752.0 -.2703000000D+00 .4600000000D-03 .7253740000D+02 .3417300000D+01 .5494200000D-01 .2148000000D+00 .1978999000D+01 .2680000000D+00 .4366500000D+01 -.3272400000D+01 .5122000000D+00 -.1380000000D-02 .1347685000D+03 .7083440000D+01 .1100570000D+00 .3020000000D+00 .3764815000D+01 .1964700000D+01 .5910500000D+01 -.8430000000D-01 -.3486000000D+00 .5200000000D-03 .1126714000D+03 .5422280000D+01 .8875900000D-01 .3121000000D+00 .2239868000D+01 .5037000000D+00 .4566700000D+01 -.3308200000D+01 +5 9620000906200010172451793.0 -.2611000000D+00 -.4300000000D-03 .7510250000D+02 .3582410000D+01 .5830300000D-01 .2292000000D+00 .2046432000D+01 .3282000000D+00 .4414200000D+01 -.3373300000D+01 .5183000000D+00 -.9500000000D-03 .1352334000D+03 .7140550000D+01 .1108130000D+00 .3205000000D+00 .3801639000D+01 .1995600000D+01 .5938500000D+01 -.1427000000D+00 -.3105000000D+00 -.5700000000D-03 .1107037000D+03 .5376870000D+01 .8844600000D-01 .2979000000D+00 .2273287000D+01 .5392000000D+00 .4599900000D+01 -.3407800000D+01 +5 9720001017200011272451834.0 -.2856000000D+00 .3500000000D-03 .7669030000D+02 .3684920000D+01 .5987700000D-01 .2509000000D+00 .2089941000D+01 .3479000000D+00 .4418000000D+01 -.3303300000D+01 .5441000000D+00 -.1660000000D-02 .1355108000D+03 .7158910000D+01 .1107350000D+00 .3281000000D+00 .3828798000D+01 .2018300000D+01 .5960000000D+01 -.9360000000D-01 -.3115000000D+00 .4400000000D-03 .1094365000D+03 .5355920000D+01 .8872900000D-01 .2899000000D+00 .2298253000D+01 .5759000000D+00 .4636800000D+01 -.3323100000D+01 +5 9820001127200101072451875.0 -.2722000000D+00 -.2500000000D-03 .7604290000D+02 .3657980000D+01 .5877100000D-01 .2547000000D+00 .2111043000D+01 .3414000000D+00 .4398700000D+01 -.3373800000D+01 .5308000000D+00 -.8100000000D-03 .1355343000D+03 .7123070000D+01 .1095960000D+00 .3329000000D+00 .3853163000D+01 .2041500000D+01 .5984400000D+01 -.1529000000D+00 -.2743000000D+00 -.4500000000D-03 .1098361000D+03 .5395030000D+01 .8987400000D-01 .2732000000D+00 .2324807000D+01 .6160000000D+00 .4677900000D+01 -.3390600000D+01 +5 9920010107200102172451916.0 -.2719000000D+00 .4300000000D-03 .7311380000D+02 .3503280000D+01 .5562000000D-01 .2439000000D+00 .2118070000D+01 .3305000000D+00 .4381000000D+01 -.3320400000D+01 .5587000000D+00 -.1850000000D-02 .1353855000D+03 .7038370000D+01 .1073830000D+00 .3319000000D+00 .3883056000D+01 .2071600000D+01 .6019500000D+01 -.6940000000D-01 -.2682000000D+00 .2500000000D-03 .1117825000D+03 .5489050000D+01 .9177900000D-01 .2612000000D+00 .2359141000D+01 .6611000000D+00 .4721400000D+01 -.3321300000D+01 +5 10020010217200103302451957.0 -.2391000000D+00 -.3000000000D-04 .6886870000D+02 .3280170000D+01 .5161800000D-01 .2184000000D+00 .2125528000D+01 .3352000000D+00 .4387200000D+01 -.3390500000D+01 .5409000000D+00 -.5600000000D-03 .1351575000D+03 .6938990000D+01 .1049530000D+00 .3411000000D+00 .3925318000D+01 .2115000000D+01 .6069800000D+01 -.1633000000D+00 -.2356000000D+00 -.4200000000D-03 .1144388000D+03 .5607980000D+01 .9383300000D-01 .2432000000D+00 .2406280000D+01 .7116000000D+00 .4768100000D+01 -.3399600000D+01 +5 10120010330200105102451998.0 -.2187000000D+00 .3900000000D-03 .6471360000D+02 .3061700000D+01 .4822500000D-01 .1911000000D+00 .2144590000D+01 .3729000000D+00 .4435400000D+01 -.3344000000D+01 .5877000000D+00 -.1810000000D-02 .1350471000D+03 .6857370000D+01 .1028720000D+00 .3624000000D+00 .3979455000D+01 .2168300000D+01 .6131700000D+01 -.7690000000D-01 -.2190000000D+00 -.9000000000D-04 .1167767000D+03 .5723200000D+01 .9585700000D-01 .2327000000D+00 .2463454000D+01 .7673000000D+00 .4816700000D+01 -.3366600000D+01 +5 10220010510200106202452039.0 -.1842000000D+00 .8000000000D-04 .6197340000D+02 .2927290000D+01 .4673200000D-01 .1609000000D+00 .2187423000D+01 .4514000000D+00 .4527400000D+01 -.3382500000D+01 .5809000000D+00 -.3500000000D-03 .1350639000D+03 .6824890000D+01 .1019840000D+00 .3853000000D+00 .4039998000D+01 .2227100000D+01 .6197200000D+01 -.1628000000D+00 -.1939000000D+00 -.3300000000D-03 .1181473000D+03 .5817760000D+01 .9761500000D-01 .2164000000D+00 .2526031000D+01 .8235000000D+00 .4863400000D+01 -.3397900000D+01 +5 10320010620200107312452080.0 -.1622000000D+00 .1500000000D-03 .6146540000D+02 .2926930000D+01 .4792500000D-01 .1402000000D+00 .2255173000D+01 .5587000000D+00 .4640400000D+01 -.3345500000D+01 .6314000000D+00 -.1720000000D-02 .1353392000D+03 .6839600000D+01 .1020420000D+00 .4044000000D+00 .4097219000D+01 .2280100000D+01 .6254800000D+01 -.8400000000D-01 -.1724000000D+00 -.5100000000D-03 .1182272000D+03 .5873700000D+01 .9884700000D-01 .2099000000D+00 .2584098000D+01 .8737000000D+00 .4903200000D+01 -.3404800000D+01 +5 10420010731200109102452121.0 -.1449000000D+00 -.9000000000D-04 .6310050000D+02 .3060670000D+01 .5133900000D-01 .1315000000D+00 .2336966000D+01 .6596000000D+00 .4731500000D+01 -.3363900000D+01 .6199000000D+00 -.3800000000D-03 .1357120000D+03 .6887710000D+01 .1028320000D+00 .4208000000D+00 .4144713000D+01 .2323100000D+01 .1490000000D-01 -.1774000000D+00 -.1610000000D+00 -.3700000000D-03 .1171492000D+03 .5883470000D+01 .9929000000D-01 .1972000000D+00 .2631518000D+01 .9143000000D+00 .4935500000D+01 -.3399600000D+01 +5 10520010910200110212452162.0 -.1387000000D+00 -.3200000000D-03 .6563270000D+02 .3237600000D+01 .5494500000D-01 .1409000000D+00 .2408472000D+01 .7216000000D+00 .4775700000D+01 -.3369200000D+01 .6632000000D+00 -.1800000000D-02 .1361141000D+03 .6925140000D+01 .1032920000D+00 .4392000000D+00 .4179456000D+01 .2353200000D+01 .4490000000D-01 -.1137000000D+00 -.1306000000D+00 -.8100000000D-03 .1155750000D+03 .5863180000D+01 .9916900000D-01 .1854000000D+00 .2665393000D+01 .9475000000D+00 .4964200000D+01 -.3452200000D+01 +5 10620011021200112012452203.0 -.1497000000D+00 -.1400000000D-03 .6717080000D+02 .3340980000D+01 .5659100000D-01 .1560000000D+00 .2454435000D+01 .7394000000D+00 .4776300000D+01 -.3342200000D+01 .6451000000D+00 -.6500000000D-03 .1362619000D+03 .6930080000D+01 .1032000000D+00 .4460000000D+00 .4205885000D+01 .2377800000D+01 .6970000000D-01 -.1753000000D+00 -.1238000000D+00 -.5000000000D-04 .1146182000D+03 .5859230000D+01 .9929800000D-01 .1648000000D+00 .2691682000D+01 .9797000000D+00 .4994600000D+01 -.3381700000D+01 +5 10720011201200201112452244.0 -.1498000000D+00 -.4600000000D-03 .6641750000D+02 .3298480000D+01 .5530900000D-01 .1698000000D+00 .2473081000D+01 .7281000000D+00 .4754200000D+01 -.3393900000D+01 .6627000000D+00 -.1680000000D-02 .1362128000D+03 .6878350000D+01 .1019170000D+00 .4422000000D+00 .4230359000D+01 .2402700000D+01 .9850000000D-01 -.1208000000D+00 -.8540000000D-01 -.8200000000D-03 .1151008000D+03 .5901500000D+01 .1000600000D+00 .1526000000D+00 .2718354000D+01 .1014900000D+01 .5029000000D+01 -.3499400000D+01 +5 10820020111200202212452285.0 -.1559000000D+00 -.1000000000D-04 .6334490000D+02 .3127680000D+01 .5180600000D-01 .1679000000D+00 .2475522000D+01 .7093000000D+00 .4730800000D+01 -.3356600000D+01 .6365000000D+00 -.7700000000D-03 .1359087000D+03 .6784710000D+01 .9997300000D-01 .4337000000D+00 .4262208000D+01 .2438100000D+01 .1412000000D+00 -.1662000000D+00 -.7890000000D-01 .6000000000D-04 .1169245000D+03 .5991390000D+01 .1014340000D+00 .1337000000D+00 .2753960000D+01 .1055900000D+01 .5067600000D+01 -.3376700000D+01 +5 10920020221200204032452326.0 -.1330000000D+00 -.3600000000D-03 .5899840000D+02 .2890800000D+01 .4737600000D-01 .1511000000D+00 .2474775000D+01 .7034000000D+00 .4728100000D+01 -.3425500000D+01 .6485000000D+00 -.1400000000D-02 .1355501000D+03 .6670760000D+01 .9771400000D-01 .4351000000D+00 .4306137000D+01 .2486200000D+01 .2010000000D+00 -.1314000000D+00 -.2200000000D-01 -.1130000000D-02 .1193699000D+03 .6101280000D+01 .1029080000D+00 .1128000000D+00 .2801634000D+01 .1103100000D+01 .5110700000D+01 -.3609700000D+01 +5 11020020403200205142452367.0 -.1216000000D+00 .2200000000D-03 .5480520000D+02 .2671110000D+01 .4359400000D-01 .1239000000D+00 .2485656000D+01 .7300000000D+00 .4763100000D+01 -.3364800000D+01 .6441000000D+00 -.9000000000D-03 .1351844000D+03 .6581630000D+01 .9630000000D-01 .4410000000D+00 .4362354000D+01 .2547300000D+01 .2745000000D+00 -.1495000000D+00 -.1300000000D-01 .4000000000D-04 .1215296000D+03 .6213490000D+01 .1044340000D+00 .8430000000D-01 .2860069000D+01 .1156000000D+01 .5156400000D+01 -.3417100000D+01 +5 11120020514200206242452408.0 -.8660000000D-01 -.1900000000D-03 .5208410000D+02 .2536160000D+01 .4161100000D-01 .9620000000D-01 .2521762000D+01 .8002000000D+00 .4844400000D+01 -.3488200000D+01 .6535000000D+00 -.8600000000D-03 .1350282000D+03 .6537360000D+01 .9584100000D-01 .4531000000D+00 .4423477000D+01 .2611200000D+01 .3494000000D+00 -.1510000000D+00 .3950000000D-01 -.1290000000D-02 .1228915000D+03 .6309030000D+01 .1057900000D+00 .7480000000D-01 .2922882000D+01 .1209500000D+01 .5201400000D+01 -.3848100000D+01 +5 11220020624200208042452449.0 -.6860000000D-01 .2700000000D-03 .5158000000D+02 .2541510000D+01 .4239100000D-01 .7050000000D-01 .2589684000D+01 .9052000000D+00 .4950600000D+01 -.3371100000D+01 .6645000000D+00 -.8500000000D-03 .1350742000D+03 .6546310000D+01 .9651700000D-01 .4677000000D+00 .4480707000D+01 .2669300000D+01 .4141000000D+00 -.1491000000D+00 .3880000000D-01 -.2200000000D-03 .1231470000D+03 .6380420000D+01 .1069790000D+00 .5630000000D-01 .2981753000D+01 .1257900000D+01 .5239800000D+01 -.3515500000D+01 +5 11320020804200209142452490.0 -.3200000000D-01 -.4300000000D-03 .5323280000D+02 .2680930000D+01 .4551300000D-01 .5390000000D-01 .2676530000D+01 .1006900000D+01 .5039200000D+01 -.3583300000D+01 .6687000000D+00 -.5500000000D-03 .1353042000D+03 .6583110000D+01 .9746500000D-01 .4816000000D+00 .4526560000D+01 .2713500000D+01 .4608000000D+00 -.1706000000D+00 .8650000000D-01 -.1570000000D-02 .1224706000D+03 .6408600000D+01 .1074690000D+00 .5160000000D-01 .3029231000D+01 .1296100000D+01 .5270500000D+01 -.4096300000D+01 +5 11420020914200210252452531.0 -.3140000000D-01 -.5000000000D-04 .5576560000D+02 .2868120000D+01 .4916200000D-01 .5330000000D-01 .2753995000D+01 .1069200000D+01 .5079100000D+01 -.3329700000D+01 .6881000000D+00 -.1210000000D-02 .1355331000D+03 .6617040000D+01 .9828500000D-01 .4902000000D+00 .4559896000D+01 .2745400000D+01 .4927000000D+00 -.1446000000D+00 .8370000000D-01 -.4100000000D-03 .1212887000D+03 .6404990000D+01 .1073830000D+00 .2630000000D-01 .3063198000D+01 .1326400000D+01 .5296100000D+01 -.3774600000D+01 +5 11520021025200212052452572.0 -.2540000000D-01 -.7500000000D-03 .5728270000D+02 .2971860000D+01 .5091800000D-01 .6860000000D-01 .2801423000D+01 .1084300000D+01 .5075600000D+01 -.3525000000D+01 .6702000000D+00 -.4500000000D-03 .1356248000D+03 .6615500000D+01 .9817200000D-01 .4924000000D+00 .4585054000D+01 .2770000000D+01 .5181000000D+00 -.1949000000D+00 .1190000000D+00 -.1280000000D-02 .1206295000D+03 .6399190000D+01 .1071160000D+00 .3390000000D-01 .3088858000D+01 .1354200000D+01 .5323200000D+01 -.4741800000D+01 +5 11620021205200301152452613.0 -.4710000000D-01 -.3100000000D-03 .5641830000D+02 .2924950000D+01 .4980400000D-01 .8790000000D-01 .2816232000D+01 .1066800000D+01 .5046300000D+01 -.3361700000D+01 .6796000000D+00 -.1460000000D-02 .1354674000D+03 .6563200000D+01 .9723400000D-01 .4886000000D+00 .4609862000D+01 .2797900000D+01 .5503000000D+00 -.1442000000D+00 .1247000000D+00 -.3600000000D-03 .1211224000D+03 .6429520000D+01 .1072740000D+00 .1610000000D-01 .3115012000D+01 .1384700000D+01 .5353600000D+01 -.5246600000D+01 +5 11720030115200302252452654.0 -.4700000000D-01 -.7000000000D-03 .5325690000D+02 .2741030000D+01 .4623200000D-01 .9400000000D-01 .2808682000D+01 .1036400000D+01 .5013300000D+01 -.3474100000D+01 .6390000000D+00 -.3200000000D-03 .1350511000D+03 .6472820000D+01 .9569000000D-01 .4734000000D+00 .4643272000D+01 .2837400000D+01 .5977000000D+00 -.1965000000D+00 .1684000000D+00 -.1100000000D-02 .1228101000D+03 .6490290000D+01 .1076900000D+00 .4390000000D-01 .3149775000D+01 .1421200000D+01 .5389800000D+01 -.5698900000D+01 +5 11820030225200304072452695.0 -.5400000000D-01 -.2200000000D-03 .4886460000D+02 .2494580000D+01 .4165500000D-01 .8840000000D-01 .2792074000D+01 .1014000000D+01 .4995600000D+01 -.3396600000D+01 .6474000000D+00 -.1550000000D-02 .1345197000D+03 .6372240000D+01 .9444100000D-01 .4584000000D+00 .4689622000D+01 .2892800000D+01 .6642000000D+00 -.1271000000D+00 .1948000000D+00 -.6600000000D-03 .1249264000D+03 .6569020000D+01 .1082110000D+00 .5640000000D-01 .3196413000D+01 .1464900000D+01 .5431200000D+01 -.6062100000D+01 +5 11920030407200305182452736.0 -.4050000000D-01 -.3400000000D-03 .4475280000D+02 .2262840000D+01 .3743600000D-01 .7060000000D-01 .2784190000D+01 .1021200000D+01 .5015500000D+01 -.3522800000D+01 .6046000000D+00 .1000000000D-04 .1340078000D+03 .6301790000D+01 .9398600000D-01 .4495000000D+00 .4748148000D+01 .2960200000D+01 .7419000000D+00 -.2142000000D+00 .2316000000D+00 -.9600000000D-03 .1268474000D+03 .6646310000D+01 .1087440000D+00 .8720000000D-01 .3253819000D+01 .1515100000D+01 .5477900000D+01 -.6132900000D+01 +5 12020030518200306282452777.0 -.2560000000D-01 .3000000000D-04 .4212260000D+02 .2116750000D+01 .3487700000D-01 .4740000000D-01 .2805028000D+01 .1076600000D+01 .5085400000D+01 -.3504100000D+01 .6262000000D+00 -.1240000000D-02 .1336745000D+03 .6276040000D+01 .9470200000D-01 .4560000000D+00 .4810488000D+01 .3030300000D+01 .8202000000D+00 -.1395000000D+00 .2665000000D+00 -.1020000000D-02 .1280728000D+03 .6722360000D+01 .1094050000D+00 .1061000000D+00 .3315534000D+01 .1566200000D+01 .5523300000D+01 -.6183800000D+01 +5 12120030628200308082452818.0 .4200000000D-02 -.4000000000D-04 .4167520000D+02 .2104360000D+01 .3486700000D-01 .2060000000D-01 .2869183000D+01 .1177000000D+01 .5192500000D+01 -.3899700000D+01 .5953000000D+00 .2900000000D-03 .1335404000D+03 .6304120000D+01 .9625800000D-01 .4597000000D+00 .4868316000D+01 .3092400000D+01 .8848000000D+00 -.2118000000D+00 .2901000000D+00 -.9300000000D-03 .1285001000D+03 .6783940000D+01 .1101450000D+00 .1293000000D+00 .3373464000D+01 .1612800000D+01 .5563300000D+01 -.6279900000D+01 +5 12220030808200309182452859.0 .3170000000D-01 -.9000000000D-04 .4328000000D+02 .2232380000D+01 .3742800000D-01 .9000000000D-02 .2962750000D+01 .1282700000D+01 .5285500000D+01 -.5150200000D+01 .6231000000D+00 -.1000000000D-02 .1336359000D+03 .6352510000D+01 .9797100000D-01 .4662000000D+00 .4913071000D+01 .3138700000D+01 .9305000000D+00 -.1420000000D+00 .3220000000D+00 -.1490000000D-02 .1281093000D+03 .6819240000D+01 .1105470000D+00 .1400000000D+00 .3419859000D+01 .1649200000D+01 .5593600000D+01 -.6223000000D+01 +5 12320030918200310292452900.0 .4710000000D-01 -.2900000000D-03 .4578370000D+02 .2416990000D+01 .4089800000D-01 .1120000000D-01 .3049851000D+01 .1348500000D+01 .5326700000D+01 -.5834600000D+01 .5957000000D+00 .2700000000D-03 .1337814000D+03 .6394690000D+01 .9902400000D-01 .4680000000D+00 .4945202000D+01 .3170100000D+01 .9593000000D+00 -.2236000000D+00 .3208000000D+00 -.8600000000D-03 .1273085000D+03 .6819960000D+01 .1104310000D+00 .1528000000D+00 .3453121000D+01 .1677800000D+01 .5619300000D+01 -.7650000000D-01 +5 12420031029200312092452941.0 .5000000000D-01 -.6600000000D-03 .4726030000D+02 .2530470000D+01 .4295000000D-01 .9500000000D-02 .3100439000D+01 .1361000000D+01 .5315200000D+01 -.4451000000D+01 .6124000000D+00 -.9900000000D-03 .1338267000D+03 .6393250000D+01 .9909500000D-01 .4714000000D+00 .4968717000D+01 .3194500000D+01 .9836000000D+00 -.1647000000D+00 .3559000000D+00 -.1610000000D-02 .1268401000D+03 .6809540000D+01 .1098770000D+00 .1681000000D+00 .3477534000D+01 .1702200000D+01 .5644100000D+01 -.6257600000D+01 +5 12520031209200401192452982.0 .3000000000D-01 -.5500000000D-03 .4638770000D+02 .2492200000D+01 .4229300000D-01 .2300000000D-01 .3109009000D+01 .1334000000D+01 .5273500000D+01 -.3511600000D+01 .5764000000D+00 -.1200000000D-03 .1336062000D+03 .6354860000D+01 .9842400000D-01 .4583000000D+00 .4994275000D+01 .3223600000D+01 .1014000000D+01 -.2134000000D+00 .3538000000D+00 -.5100000000D-03 .1272944000D+03 .6810940000D+01 .1093740000D+00 .1840000000D+00 .3502344000D+01 .1729900000D+01 .5674000000D+01 -.1082000000D+00 +5 12620040119200402292453023.0 .1580000000D-01 -.7800000000D-03 .4324940000D+02 .2317860000D+01 .3921200000D-01 .4250000000D-01 .3083071000D+01 .1285300000D+01 .5221100000D+01 -.3570200000D+01 .5658000000D+00 -.8900000000D-03 .1331774000D+03 .6281380000D+01 .9744400000D-01 .4384000000D+00 .5028794000D+01 .3266000000D+01 .1060900000D+01 -.1687000000D+00 .3999000000D+00 -.1620000000D-02 .1286423000D+03 .6829470000D+01 .1088090000D+00 .1981000000D+00 .3535012000D+01 .1763200000D+01 .5709800000D+01 -.6256500000D+01 +5 12720040229200404102453064.0 -.4100000000D-02 -.4000000000D-03 .3905370000D+02 .2078210000D+01 .3495300000D-01 .4630000000D-01 .3037227000D+01 .1236400000D+01 .5180100000D+01 -.3443500000D+01 .5225000000D+00 -.1900000000D-03 .1326019000D+03 .6216490000D+01 .9698000000D-01 .4129000000D+00 .5078075000D+01 .3325100000D+01 .1124100000D+01 -.2130000000D+00 .3990000000D+00 -.4200000000D-03 .1303021000D+03 .6855690000D+01 .1083250000D+00 .2140000000D+00 .3579940000D+01 .1805700000D+01 .5753900000D+01 -.1227000000D+00 +5 12820040410200405212453105.0 -.1000000000D-02 -.4600000000D-03 .3528620000D+02 .1851030000D+01 .3077700000D-01 .4050000000D-01 .2992769000D+01 .1211800000D+01 .5173500000D+01 -.3610000000D+01 .4988000000D+00 -.3600000000D-03 .1320706000D+03 .6180640000D+01 .9745000000D-01 .3955000000D+00 .5138437000D+01 .3395800000D+01 .1197800000D+01 -.1947000000D+00 .4609000000D+00 -.1810000000D-02 .1317876000D+03 .6883090000D+01 .1077920000D+00 .2438000000D+00 .3635016000D+01 .1854200000D+01 .5803400000D+01 -.5900000000D-02 +5 12920040521200407012453146.0 .2800000000D-02 .3000000000D-04 .3299840000D+02 .1694560000D+01 .2779000000D-01 .2120000000D-01 .2984088000D+01 .1242000000D+01 .5227300000D+01 -.3617700000D+01 .4764000000D+00 -.1900000000D-03 .1316798000D+03 .6203610000D+01 .9917900000D-01 .3823000000D+00 .5203298000D+01 .3468400000D+01 .1268300000D+01 -.2021000000D+00 .4647000000D+00 -.4600000000D-03 .1327260000D+03 .6916270000D+01 .1077010000D+00 .2686000000D+00 .3694898000D+01 .1906000000D+01 .5854400000D+01 -.1311000000D+00 +5 13020040701200408112453187.0 .3040000000D-01 -.1100000000D-03 .3261950000D+02 .1654970000D+01 .2696900000D-01 .1320000000D-01 .3039067000D+01 .1337100000D+01 .5339100000D+01 -.5131500000D+01 .4587000000D+00 .2100000000D-03 .1315369000D+03 .6263290000D+01 .1014750000D+00 .3811000000D+00 .5261237000D+01 .3530700000D+01 .1326000000D+01 -.2147000000D+00 .5160000000D+00 -.1790000000D-02 .1331387000D+03 .6954460000D+01 .1078940000D+00 .2890000000D+00 .3750843000D+01 .1951900000D+01 .5898400000D+01 -.3670000000D-01 +5 13120040811200409212453228.0 .5170000000D-01 .1600000000D-03 .3402930000D+02 .1752480000D+01 .2878000000D-01 .2610000000D-01 .3146292000D+01 .1457200000D+01 .5451900000D+01 -.6273300000D+01 .4588000000D+00 -.5000000000D-04 .1315739000D+03 .6339950000D+01 .1037110000D+00 .3828000000D+00 .5305995000D+01 .3576300000D+01 .1365100000D+01 -.1986000000D+00 .5072000000D+00 -.6500000000D-03 .1329563000D+03 .6986260000D+01 .1082780000D+00 .2989000000D+00 .3796289000D+01 .1989000000D+01 .5932100000D+01 -.1449000000D+00 +5 13220040921200411012453269.0 .8190000000D-01 -.4500000000D-03 .3632340000D+02 .1926900000D+01 .3198700000D-01 .3930000000D-01 .3252496000D+01 .1535900000D+01 .5501900000D+01 -.6185100000D+01 .4364000000D+00 .5800000000D-03 .1317039000D+03 .6388570000D+01 .1048990000D+00 .3819000000D+00 .5336313000D+01 .3605700000D+01 .1390400000D+01 -.2357000000D+00 .5463000000D+00 -.1880000000D-02 .1324769000D+03 .6989940000D+01 .1081090000D+00 .3155000000D+00 .3828238000D+01 .2015800000D+01 .5957700000D+01 -.7370000000D-01 +5 13320041101200412122453310.0 .7750000000D-01 -.3400000000D-03 .3773880000D+02 .2053810000D+01 .3442100000D-01 .3090000000D-01 .3311861000D+01 .1549500000D+01 .5483800000D+01 -.1452000000D+00 .4428000000D+00 -.4400000000D-03 .1317270000D+03 .6400470000D+01 .1050870000D+00 .3748000000D+00 .5359341000D+01 .3628700000D+01 .1410200000D+01 -.1882000000D+00 .5378000000D+00 -.8400000000D-03 .1321058000D+03 .6972510000D+01 .1075580000D+00 .3247000000D+00 .3851770000D+01 .2039900000D+01 .5983400000D+01 -.1415000000D+00 +5 13420041212200501222453351.0 .6720000000D-01 -.8400000000D-03 .3700460000D+02 .2046790000D+01 .3459600000D-01 .1300000000D-01 .3310321000D+01 .1508200000D+01 .5422000000D+01 -.5787200000D+01 .4032000000D+00 .4800000000D-03 .1315705000D+03 .6366040000D+01 .1042740000D+00 .3625000000D+00 .5384397000D+01 .3656200000D+01 .1437500000D+01 -.2593000000D+00 .5617000000D+00 -.1520000000D-02 .1324196000D+03 .6947690000D+01 .1065820000D+00 .3343000000D+00 .3874946000D+01 .2065600000D+01 .6013400000D+01 -.9330000000D-01 +5 13520050122200503042453392.0 .3490000000D-01 -.5500000000D-03 .3426080000D+02 .1913990000D+01 .3260400000D-01 .1360000000D-01 .3253454000D+01 .1431700000D+01 .5340500000D+01 -.3421100000D+01 .3953000000D+00 -.6800000000D-03 .1311822000D+03 .6317200000D+01 .1034800000D+00 .3430000000D+00 .5420530000D+01 .3698400000D+01 .1479000000D+01 -.1890000000D+00 .5602000000D+00 -.8900000000D-03 .1332947000D+03 .6923540000D+01 .1054610000D+00 .3384000000D+00 .3906177000D+01 .2098700000D+01 .6052000000D+01 -.1269000000D+00 +5 13620050304200504142453433.0 .1810000000D-01 -.7100000000D-03 .3083850000D+02 .1720570000D+01 .2935900000D-01 .2750000000D-01 .3155959000D+01 .1341000000D+01 .5262100000D+01 -.3625100000D+01 .3273000000D+00 .7000000000D-03 .1307314000D+03 .6279880000D+01 .1031440000D+00 .3097000000D+00 .5471668000D+01 .3756300000D+01 .1535800000D+01 -.2822000000D+00 .5853000000D+00 -.1310000000D-02 .1343690000D+03 .6894730000D+01 .1041240000D+00 .3534000000D+00 .3948879000D+01 .2140900000D+01 .6100200000D+01 -.1061000000D+00 +5 13720050414200505252453474.0 .3000000000D-03 -.2400000000D-03 .2811430000D+02 .1533940000D+01 .2588900000D-01 .2910000000D-01 .3051854000D+01 .1268400000D+01 .5214700000D+01 -.3438600000D+01 .3132000000D+00 -.5500000000D-03 .1303140000D+03 .6289630000D+01 .1040390000D+00 .2787000000D+00 .5534401000D+01 .3825400000D+01 .1599300000D+01 -.1878000000D+00 .6045000000D+00 -.1180000000D-02 .1351871000D+03 .6868380000D+01 .1030220000D+00 .3678000000D+00 .4002184000D+01 .2192000000D+01 .6157600000D+01 -.1092000000D+00 +5 13820050525200507052453515.0 .4900000000D-02 -.2000000000D-03 .2672780000D+02 .1392080000D+01 .2292400000D-01 .2180000000D-01 .2998593000D+01 .1257000000D+01 .5234300000D+01 -.3800700000D+01 .2544000000D+00 .1000000000D-02 .1300906000D+03 .6345580000D+01 .1058540000D+00 .2570000000D+00 .5600537000D+01 .3894300000D+01 .1660700000D+01 -.3241000000D+00 .6195000000D+00 -.9300000000D-03 .1357088000D+03 .6858170000D+01 .1024060000D+00 .3891000000D+00 .4060206000D+01 .2245900000D+01 .6216700000D+01 -.1368000000D+00 +5 13920050705200508152453556.0 .1760000000D-01 .1500000000D-03 .2654210000D+02 .1326860000D+01 .2138500000D-01 .6600000000D-02 .3042004000D+01 .1338300000D+01 .5340700000D+01 -.4726200000D+01 .2571000000D+00 -.1300000000D-03 .1300123000D+03 .6440900000D+01 .1084550000D+00 .2508000000D+00 .5659198000D+01 .3953300000D+01 .1709600000D+01 -.2062000000D+00 .6473000000D+00 -.1300000000D-02 .1359481000D+03 .6871150000D+01 .1024730000D+00 .4084000000D+00 .4114985000D+01 .2295100000D+01 .6268800000D+01 -.1152000000D+00 +5 14020050815200509252453597.0 .4840000000D-01 .0000000000D+00 .2745770000D+02 .1375780000D+01 .2220400000D-01 .2550000000D-01 .3170758000D+01 .1481100000D+01 .5484300000D+01 -.6084700000D+01 .2147000000D+00 .1280000000D-02 .1301309000D+03 .6535220000D+01 .1107040000D+00 .2420000000D+00 .5703758000D+01 .3995100000D+01 .1743100000D+01 -.3203000000D+00 .6507000000D+00 -.7700000000D-03 .1359099000D+03 .6895660000D+01 .1028420000D+00 .4251000000D+00 .4159419000D+01 .2333700000D+01 .2430000000D-01 -.1566000000D+00 +5 14120050925200511052453638.0 .7210000000D-01 -.1100000000D-03 .2912030000D+02 .1523000000D+01 .2498600000D-01 .3920000000D-01 .3311032000D+01 .1592900000D+01 .5564500000D+01 -.2560000000D-01 .2247000000D+00 .1300000000D-03 .1302584000D+03 .6597690000D+01 .1120080000D+00 .2385000000D+00 .5733004000D+01 .4022000000D+01 .1763400000D+01 -.2102000000D+00 .6779000000D+00 -.1660000000D-02 .1356303000D+03 .6903910000D+01 .1029660000D+00 .4316000000D+00 .4191002000D+01 .2361900000D+01 .5290000000D-01 -.1120000000D+00 +5 14220051105200512162453679.0 .7930000000D-01 -.4200000000D-03 .3034100000D+02 .1664590000D+01 .2783600000D-01 .3870000000D-01 .3389029000D+01 .1619800000D+01 .5551900000D+01 -.8360000000D-01 .1940000000D+00 .1050000000D-02 .1303390000D+03 .6604640000D+01 .1118460000D+00 .2295000000D+00 .5755113000D+01 .4042300000D+01 .1781300000D+01 -.3303000000D+00 .6583000000D+00 -.6100000000D-03 .1353792000D+03 .6888600000D+01 .1025550000D+00 .4373000000D+00 .4214122000D+01 .2385600000D+01 .7860000000D-01 -.1819000000D+00 +5 14320051216200601262453720.0 .6670000000D-01 -.6400000000D-03 .2998800000D+02 .1711280000D+01 .2919400000D-01 .2050000000D-01 .3376149000D+01 .1567500000D+01 .5474100000D+01 -.3830000000D-01 .1884000000D+00 .7000000000D-04 .1302081000D+03 .6572980000D+01 .1108330000D+00 .2205000000D+00 .5779809000D+01 .4068000000D+01 .1805500000D+01 -.2494000000D+00 .6843000000D+00 -.1760000000D-02 .1354966000D+03 .6847720000D+01 .1015530000D+00 .4424000000D+00 .4236530000D+01 .2411100000D+01 .1098000000D+00 -.1156000000D+00 +5 14420060126200603082453761.0 .3970000000D-01 -.6500000000D-03 .2832450000D+02 .1658010000D+01 .2881400000D-01 .2500000000D-02 .3277447000D+01 .1461900000D+01 .5366400000D+01 -.4209200000D+01 .1432000000D+00 .6300000000D-03 .1299830000D+03 .6527980000D+01 .1095730000D+00 .1923000000D+00 .5817098000D+01 .4107100000D+01 .1843400000D+01 -.3370000000D+00 .6577000000D+00 -.4500000000D-03 .1358597000D+03 .6793100000D+01 .1002460000D+00 .4426000000D+00 .4266802000D+01 .2445400000D+01 .1513000000D+00 -.1787000000D+00 +5 14520060308200604182453802.0 .1390000000D-01 -.5800000000D-03 .2665230000D+02 .1558400000D+01 .2726500000D-01 .2210000000D-01 .3121518000D+01 .1332800000D+01 .5256900000D+01 -.3471300000D+01 .1068000000D+00 .3000000000D-03 .1296998000D+03 .6506700000D+01 .1089530000D+00 .1636000000D+00 .5869054000D+01 .4161200000D+01 .1893600000D+01 -.3128000000D+00 .6864000000D+00 -.1800000000D-02 .1362378000D+03 .6723000000D+01 .9874200000D-01 .4394000000D+00 .4308313000D+01 .2490100000D+01 .2059000000D+00 -.9940000000D-01 +5 14620060418200605292453843.0 -.5500000000D-02 -.3600000000D-03 .2598170000D+02 .1456170000D+01 .2512800000D-01 .3030000000D-01 .2972095000D+01 .1223000000D+01 .5178000000D+01 -.3465300000D+01 .6140000000D-01 .5800000000D-03 .1295400000D+03 .6528170000D+01 .1093260000D+00 .1266000000D+00 .5933155000D+01 .4225000000D+01 .1951200000D+01 -.4053000000D+00 .6573000000D+00 -.2600000000D-03 .1363658000D+03 .6662020000D+01 .9762500000D-01 .4415000000D+00 .4360860000D+01 .2545400000D+01 .2710000000D+00 -.1897000000D+00 +5 14720060529200607092453884.0 -.8200000000D-02 -.1700000000D-03 .2608550000D+02 .1362920000D+01 .2275200000D-01 .2910000000D-01 .2900253000D+01 .1178000000D+01 .5161500000D+01 -.3562400000D+01 .1520000000D-01 .8600000000D-03 .1295100000D+03 .6600720000D+01 .1108040000D+00 .1022000000D+00 .5999574000D+01 .4288400000D+01 .2005500000D+01 -.4808000000D+00 .6952000000D+00 -.1600000000D-02 .1363907000D+03 .6620100000D+01 .9710900000D-01 .4571000000D+00 .4417881000D+01 .2604100000D+01 .3400000000D+00 -.1175000000D+00 +5 14820060709200608192453925.0 .1800000000D-02 .1100000000D-03 .2623030000D+02 .1287130000D+01 .2075900000D-01 .1480000000D-01 .2941098000D+01 .1232600000D+01 .5236800000D+01 -.3808000000D+01 -.7400000000D-02 .6100000000D-03 .1296408000D+03 .6705000000D+01 .1129800000D+00 .7600000000D-01 .6058799000D+01 .4342000000D+01 .2049400000D+01 -.4729000000D+00 .6779000000D+00 -.1600000000D-03 .1363653000D+03 .6622870000D+01 .9760100000D-01 .4718000000D+00 .4472705000D+01 .2659400000D+01 .4010000000D+00 -.1873000000D+00 +5 14920060819200609292453966.0 .3040000000D-01 .0000000000D+00 .2633570000D+02 .1276360000D+01 .2039900000D-01 .1320000000D-01 .3077985000D+01 .1376800000D+01 .5386100000D+01 -.5541400000D+01 -.3980000000D-01 .1350000000D-02 .1298273000D+03 .6807440000D+01 .1150200000D+00 .7580000000D-01 .6102460000D+01 .4379800000D+01 .2078500000D+01 -.6380000000D+00 .7127000000D+00 -.1390000000D-02 .1364194000D+03 .6646030000D+01 .9838400000D-01 .4831000000D+00 .4517019000D+01 .2701700000D+01 .4463000000D+00 -.1271000000D+00 +5 15020060929200611092454007.0 .5280000000D-01 .5000000000D-04 .2686500000D+02 .1369880000D+01 .2236700000D-01 .2850000000D-01 .3242099000D+01 .1524500000D+01 .5508600000D+01 -.2440000000D-01 -.3470000000D-01 .6600000000D-03 .1299993000D+03 .6867750000D+01 .1160880000D+00 .6350000000D-01 .6131294000D+01 .4404400000D+01 .2097300000D+01 -.4469000000D+00 .6913000000D+00 -.2700000000D-03 .1363378000D+03 .6670230000D+01 .9900900000D-01 .4880000000D+00 .4549373000D+01 .2732300000D+01 .4766000000D+00 -.1950000000D+00 +5 15120061109200612202454048.0 .7230000000D-01 -.4600000000D-03 .2758700000D+02 .1513470000D+01 .2543300000D-01 .3550000000D-01 .3340620000D+01 .1583100000D+01 .5527900000D+01 -.6263300000D+01 -.7110000000D-01 .1570000000D-02 .1300795000D+03 .6869590000D+01 .1156820000D+00 .6510000000D-01 .6152249000D+01 .4422900000D+01 .2113600000D+01 -.7884000000D+00 .7105000000D+00 -.1330000000D-02 .1362301000D+03 .6658910000D+01 .9881100000D-01 .4930000000D+00 .4572284000D+01 .2755800000D+01 .5023000000D+00 -.1501000000D+00 +5 15220061220200701302454089.0 .5990000000D-01 -.3900000000D-03 .2781190000D+02 .1619990000D+01 .2799400000D-01 .2500000000D-01 .3327439000D+01 .1544400000D+01 .5464700000D+01 -.2140000000D+00 -.6750000000D-01 .2700000000D-03 .1300147000D+03 .6825740000D+01 .1142090000D+00 .3960000000D-01 .6176989000D+01 .4446900000D+01 .2137400000D+01 -.5580000000D+00 .6887000000D+00 -.6200000000D-03 .1361288000D+03 .6622330000D+01 .9819300000D-01 .4895000000D+00 .4595152000D+01 .2782600000D+01 .5328000000D+00 -.1838000000D+00 +5 15320070130200703122454130.0 .4340000000D-01 -.7300000000D-03 .2778280000D+02 .1665470000D+01 .2934400000D-01 .6400000000D-02 .3214931000D+01 .1441700000D+01 .5363500000D+01 -.5603000000D+01 -.1191000000D+00 .1380000000D-02 .1298889000D+03 .6768290000D+01 .1123330000D+00 .4700000000D-01 .6213804000D+01 .4483200000D+01 .2173800000D+01 -.1335100000D+01 .6869000000D+00 -.1100000000D-02 .1360803000D+03 .6552130000D+01 .9698300000D-01 .4802000000D+00 .4624765000D+01 .2817500000D+01 .5750000000D+00 -.1577000000D+00 +5 15420070312200704222454171.0 .1270000000D-01 -.4000000000D-03 .2836700000D+02 .1674740000D+01 .2959200000D-01 .1620000000D-01 .3060963000D+01 .1321200000D+01 .5263000000D+01 -.3288800000D+01 -.1296000000D+00 .1500000000D-03 .1297737000D+03 .6734720000D+01 .1110220000D+00 .1790000000D-01 .6266161000D+01 .4533900000D+01 .2222700000D+01 -.2163200000D+01 .6634000000D+00 -.7100000000D-03 .1358089000D+03 .6471290000D+01 .9587900000D-01 .4676000000D+00 .4666397000D+01 .2865700000D+01 .6319000000D+00 -.1754000000D+00 +5 15520070422200706022454212.0 .1700000000D-02 -.5600000000D-03 .2974330000D+02 .1662270000D+01 .2884600000D-01 .2840000000D-01 .2939652000D+01 .1225300000D+01 .5191900000D+01 -.3596000000D+01 -.2042000000D+00 .1600000000D-02 .1298364000D+03 .6744010000D+01 .1105910000D+00 .6430000000D-01 .4644500000D-01 .4592700000D+01 .2277700000D+01 -.2548900000D+01 .6500000000D+00 -.6700000000D-03 .1353439000D+03 .6392940000D+01 .9508500000D-01 .4591000000D+00 .4718401000D+01 .2924900000D+01 .7015000000D+00 -.1743000000D+00 +5 15620070602200707132454253.0 -.1010000000D-01 -.4000000000D-04 .3104090000D+02 .1620160000D+01 .2722000000D-01 .2920000000D-01 .2898176000D+01 .1187500000D+01 .5171600000D+01 -.3432800000D+01 -.2211000000D+00 .3600000000D-03 .1299916000D+03 .6801820000D+01 .1112990000D+00 .8240000000D-01 .1124260000D+00 .4651500000D+01 .2330400000D+01 -.3112600000D+01 .6465000000D+00 -.7900000000D-03 .1348561000D+03 .6356020000D+01 .9547300000D-01 .4567000000D+00 .4776280000D+01 .2990800000D+01 .7753000000D+00 -.1640000000D+00 +5 15720070713200708232454294.0 .4100000000D-02 -.1500000000D-03 .3140030000D+02 .1547470000D+01 .2511700000D-01 .2300000000D-01 .2945915000D+01 .1226700000D+01 .5221200000D+01 -.3879800000D+01 -.2760000000D+00 .1670000000D-02 .1302642000D+03 .6891280000D+01 .1127410000D+00 .1135000000D+00 .1704850000D+00 .4700800000D+01 .2372700000D+01 -.2938100000D+01 .6347000000D+00 -.1300000000D-03 .1346867000D+03 .6364760000D+01 .9665100000D-01 .4629000000D+00 .4831514000D+01 .3051300000D+01 .8406000000D+00 -.1966000000D+00 +5 15820070823200710032454335.0 .2120000000D-01 .1900000000D-03 .3084600000D+02 .1493230000D+01 .2385800000D-01 .7100000000D-02 .3067908000D+01 .1343200000D+01 .5341100000D+01 -.4722500000D+01 -.2736000000D+00 .6800000000D-03 .1304870000D+03 .6984580000D+01 .1143710000D+00 .1148000000D+00 .2136270000D+00 .4736200000D+01 .2400900000D+01 -.3179900000D+01 .6492000000D+00 -.7100000000D-03 .1348024000D+03 .6410290000D+01 .9833900000D-01 .4747000000D+00 .4877137000D+01 .3099000000D+01 .8883000000D+00 -.1652000000D+00 +5 15920071003200711132454376.0 .5560000000D-01 -.1800000000D-03 .3032060000D+02 .1528340000D+01 .2477600000D-01 .2570000000D-01 .3217174000D+01 .1485000000D+01 .5469900000D+01 -.6018700000D+01 -.3101000000D+00 .1820000000D-02 .1306915000D+03 .7035970000D+01 .1150950000D+00 .1310000000D+00 .2413740000D+00 .4758600000D+01 .2418800000D+01 -.3042500000D+01 .6296000000D+00 .1300000000D-03 .1349684000D+03 .6450250000D+01 .9939300000D-01 .4781000000D+00 .4910174000D+01 .3131000000D+01 .9190000000D+00 -.2096000000D+00 +5 16020071113200712242454417.0 .7090000000D-01 -.1700000000D-03 .3042690000D+02 .1653400000D+01 .2761800000D-01 .3690000000D-01 .3317102000D+01 .1566900000D+01 .5523400000D+01 -.7920000000D-01 -.3059000000D+00 .9300000000D-03 .1307140000D+03 .7026890000D+01 .1144650000D+00 .1313000000D+00 .2615950000D+00 .4776500000D+01 .2435300000D+01 -.3178500000D+01 .6452000000D+00 -.1050000000D-02 .1349747000D+03 .6461220000D+01 .9978300000D-01 .4758000000D+00 .4934021000D+01 .3155500000D+01 .9422000000D+00 -.1575000000D+00 +5 16120071224200802032454458.0 .7520000000D-01 -.5400000000D-03 .3108990000D+02 .1798080000D+01 .3085700000D-01 .3610000000D-01 .3318456000D+01 .1558900000D+01 .5495300000D+01 -.3220000000D-01 -.3280000000D+00 .1410000000D-02 .1306578000D+03 .6964320000D+01 .1125820000D+00 .1455000000D+00 .2854830000D+00 .4799800000D+01 .2460500000D+01 -.3098500000D+01 .6075000000D+00 .1300000000D-03 .1348274000D+03 .6430600000D+01 .9920500000D-01 .4676000000D+00 .4956860000D+01 .3180600000D+01 .9684000000D+00 -.2297000000D+00 +5 16220080203200803152454499.0 .5830000000D-01 -.4500000000D-03 .3235420000D+02 .1918050000D+01 .3342900000D-01 .2000000000D-01 .3237231000D+01 .1491400000D+01 .5426400000D+01 -.1357000000D+00 -.3405000000D+00 .9000000000D-03 .1305310000D+03 .6886340000D+01 .1102370000D+00 .1541000000D+00 .3217550000D+00 .4835200000D+01 .2498500000D+01 -.3151500000D+01 .6134000000D+00 -.1190000000D-02 .1344340000D+03 .6365730000D+01 .9830800000D-01 .4584000000D+00 .4986311000D+01 .3215700000D+01 .1006700000D+01 -.1604000000D+00 +5 16320080315200804252454540.0 .4430000000D-01 -.6200000000D-03 .3444390000D+02 .2003590000D+01 .3489700000D-01 .7600000000D-02 .3132924000D+01 .1409700000D+01 .5356800000D+01 -.5637700000D+01 -.3741000000D+00 .1070000000D-02 .1305260000D+03 .6823830000D+01 .1082080000D+00 .1829000000D+00 .3729420000D+00 .4884000000D+01 .2549900000D+01 -.3156500000D+01 .5572000000D+00 .2400000000D-03 .1337071000D+03 .6287380000D+01 .9736700000D-01 .4348000000D+00 .5027932000D+01 .3264400000D+01 .1059800000D+01 -.2315000000D+00 +5 16420080425200806052454581.0 .2800000000D-01 -.3600000000D-03 .3688830000D+02 .2048870000D+01 .3511000000D-01 .9200000000D-02 .3062051000D+01 .1349800000D+01 .5310200000D+01 -.3767600000D+01 -.4144000000D+00 .1210000000D-02 .1306263000D+03 .6802710000D+01 .1070370000D+00 .2081000000D+00 .4348490000D+00 .4940700000D+01 .2607500000D+01 -.3154600000D+01 .5563000000D+00 -.1060000000D-02 .1327813000D+03 .6223900000D+01 .9725100000D-01 .4128000000D+00 .5080170000D+01 .3326600000D+01 .1125800000D+01 -.1532000000D+00 +5 16520080605200807162454622.0 .2490000000D-01 -.3600000000D-03 .3871250000D+02 .2035620000D+01 .3397500000D-01 .1480000000D-01 .3052107000D+01 .1333300000D+01 .5302800000D+01 -.4027000000D+01 -.4391000000D+00 .8700000000D-03 .1308600000D+03 .6827440000D+01 .1069750000D+00 .2409000000D+00 .4991490000D+00 .4997800000D+01 .2663400000D+01 -.3230800000D+01 .5048000000D+00 .5200000000D-03 .1320254000D+03 .6207180000D+01 .9814100000D-01 .3955000000D+00 .5138955000D+01 .3394900000D+01 .1195700000D+01 -.2519000000D+00 +5 16620080716200808262454663.0 .3140000000D-01 -.1600000000D-03 .3910520000D+02 .1965640000D+01 .3187500000D-01 .1290000000D-01 .3105451000D+01 .1370800000D+01 .5344400000D+01 -.4277700000D+01 -.4834000000D+00 .1510000000D-02 .1311279000D+03 .6889540000D+01 .1077440000D+00 .2665000000D+00 .5557070000D+00 .5045100000D+01 .2707700000D+01 -.3191500000D+01 .5159000000D+00 -.6200000000D-03 .1317802000D+03 .6246250000D+01 .1002180000D+00 .3970000000D+00 .5195119000D+01 .3459300000D+01 .1258400000D+01 -.1724000000D+00 +5 16720080826200810062454704.0 .5030000000D-01 -.4000000000D-04 .3820050000D+02 .1885360000D+01 .3002700000D-01 .1570000000D-01 .3211161000D+01 .1463500000D+01 .5440000000D+01 -.5701600000D+01 -.4886000000D+00 .8200000000D-03 .1313432000D+03 .6959570000D+01 .1088640000D+00 .2858000000D+00 .5976090000D+00 .5079500000D+01 .2737600000D+01 -.3270200000D+01 .4839000000D+00 .6700000000D-03 .1320630000D+03 .6325870000D+01 .1025810000D+00 .3964000000D+00 .5242635000D+01 .3509300000D+01 .1303500000D+01 -.2420000000D+00 +5 16820081006200811162454745.0 .8050000000D-01 -.2000000000D-03 .3704370000D+02 .1878740000D+01 .3006600000D-01 .3630000000D-01 .3336059000D+01 .1581100000D+01 .5553100000D+01 -.6102100000D+01 -.5206000000D+00 .1860000000D-02 .1314555000D+03 .6997120000D+01 .1092810000D+00 .2889000000D+00 .6242620000D+00 .5100900000D+01 .2756000000D+01 -.3195300000D+01 .4988000000D+00 -.3600000000D-03 .1324982000D+03 .6395530000D+01 .1043440000D+00 .4002000000D+00 .5276483000D+01 .3542600000D+01 .1331600000D+01 -.1765000000D+00 +5 16920081116200812272454786.0 .9850000000D-01 -.1500000000D-03 .3672410000D+02 .1977590000D+01 .3237400000D-01 .5530000000D-01 .3425482000D+01 .1663200000D+01 .5619100000D+01 -.8800000000D-01 -.5000000000D+00 .7700000000D-03 .1314149000D+03 .6977030000D+01 .1085540000D+00 .2906000000D+00 .6438320000D+00 .5119400000D+01 .2774100000D+01 -.3296700000D+01 .4718000000D+00 .5000000000D-03 .1327146000D+03 .6425020000D+01 .1048530000D+00 .3949000000D+00 .5301280000D+01 .3565300000D+01 .1350800000D+01 -.2459000000D+00 +5 17020081227200902062454827.0 .1143000000D+00 -.5600000000D-03 .3754490000D+02 .2134280000D+01 .3570700000D-01 .6230000000D-01 .3439548000D+01 .1675300000D+01 .5615800000D+01 -.4210000000D-01 -.5334000000D+00 .1940000000D-02 .1312936000D+03 .6901130000D+01 .1064940000D+00 .2974000000D+00 .6668380000D+00 .5142600000D+01 .2801300000D+01 -.3199100000D+01 .4682000000D+00 -.2800000000D-03 .1325573000D+03 .6401100000D+01 .1043250000D+00 .3898000000D+00 .5323482000D+01 .3588300000D+01 .1372400000D+01 -.2032000000D+00 +5 17120090206200903192454868.0 .1048000000D+00 -.3400000000D-03 .3944260000D+02 .2290910000D+01 .3880200000D-01 .5730000000D-01 .3391631000D+01 .1638600000D+01 .5574600000D+01 -.1610000000D+00 -.5167000000D+00 .5300000000D-03 .1311053000D+03 .6801750000D+01 .1040110000D+00 .3069000000D+00 .7023210000D+00 .5179700000D+01 .2844800000D+01 -.3290900000D+01 .4349000000D+00 .6000000000D-04 .1319731000D+03 .6344820000D+01 .1032470000D+00 .3695000000D+00 .5353173000D+01 .3620400000D+01 .1403600000D+01 -.2350000000D+00 +5 17220090319200904292454909.0 .1021000000D+00 -.7000000000D-03 .4217160000D+02 .2416820000D+01 .4087000000D-01 .4480000000D-01 .3328058000D+01 .1588800000D+01 .5529200000D+01 -.6239900000D+01 -.5598000000D+00 .1780000000D-02 .1310413000D+03 .6712040000D+01 .1016430000D+00 .3184000000D+00 .7520080000D+00 .5229000000D+01 .2902000000D+01 -.3189600000D+01 .4059000000D+00 -.9000000000D-04 .1309800000D+03 .6272240000D+01 .1022290000D+00 .3467000000D+00 .5393787000D+01 .3666600000D+01 .1449400000D+01 -.2212000000D+00 +5 17320090429200906092454950.0 .8540000000D-01 -.3000000000D-03 .4500630000D+02 .2489980000D+01 .4157100000D-01 .3310000000D-01 .3291159000D+01 .1556500000D+01 .5502600000D+01 -.8660000000D-01 -.5513000000D+00 .4100000000D-03 .1310687000D+03 .6661490000D+01 .1002390000D+00 .3343000000D+00 .8125840000D+00 .5287700000D+01 .2967000000D+01 -.3295500000D+01 .3693000000D+00 .4000000000D-04 .1298156000D+03 .6225180000D+01 .1020180000D+00 .3160000000D+00 .5446565000D+01 .3726500000D+01 .1507300000D+01 -.2397000000D+00 +5 17420090609200907202454991.0 .9340000000D-01 -.6900000000D-03 .4695790000D+02 .2489550000D+01 .4067300000D-01 .3180000000D-01 .3299502000D+01 .1555900000D+01 .5505600000D+01 -.5977700000D+01 -.6056000000D+00 .1710000000D-02 .1312387000D+03 .6652530000D+01 .9969800000D-01 .3635000000D+00 .8749400000D+00 .5344900000D+01 .3029100000D+01 -.3222500000D+01 .3258000000D+00 .4700000000D-03 .1289589000D+03 .6229930000D+01 .1030520000D+00 .2911000000D+00 .5505438000D+01 .3793500000D+01 .1570300000D+01 -.2624000000D+00 +5 17520090720200908302455032.0 .8940000000D-01 -.1100000000D-03 .4729010000D+02 .2414950000D+01 .3852100000D-01 .3240000000D-01 .3355610000D+01 .1595800000D+01 .5547800000D+01 -.6248200000D+01 -.6062000000D+00 .5200000000D-03 .1313525000D+03 .6685160000D+01 .1002270000D+00 .3880000000D+00 .9304270000D+00 .5394700000D+01 .3080200000D+01 -.3300600000D+01 .3097000000D+00 .4000000000D-04 .1288102000D+03 .6306530000D+01 .1054500000D+00 .2714000000D+00 .5563579000D+01 .3857100000D+01 .1626200000D+01 -.2290000000D+00 +5 17620090830200910102455073.0 .1128000000D+00 -.4700000000D-03 .4615390000D+02 .2313630000D+01 .3622700000D-01 .4710000000D-01 .3449688000D+01 .1675000000D+01 .5631800000D+01 -.6068500000D+01 -.6433000000D+00 .1560000000D-02 .1314661000D+03 .6730580000D+01 .1009490000D+00 .4039000000D+00 .9712130000D+00 .5429100000D+01 .3113600000D+01 -.3249500000D+01 .2797000000D+00 .9100000000D-03 .1293692000D+03 .6418570000D+01 .1082330000D+00 .2701000000D+00 .5612019000D+01 .3906400000D+01 .1667300000D+01 -.2871000000D+00 +5 17720091010200911202455114.0 .1260000000D+00 -.1000000000D-04 .4463400000D+02 .2273760000D+01 .3558400000D-01 .6600000000D-01 .3557126000D+01 .1774900000D+01 .5734500000D+01 -.6710000000D-01 -.6302000000D+00 .7300000000D-03 .1314449000D+03 .6756860000D+01 .1013280000D+00 .4068000000D+00 .9976570000D+00 .5452000000D+01 .3134500000D+01 -.3307200000D+01 .2883000000D+00 .1100000000D-03 .1301128000D+03 .6519390000D+01 .1103880000D+00 .2714000000D+00 .5647655000D+01 .3939000000D+01 .1692200000D+01 -.2180000000D+00 +5 17820091120200912312455155.0 .1595000000D+00 -.5000000000D-03 .4403480000D+02 .2344520000D+01 .3723400000D-01 .9210000000D-01 .3635702000D+01 .1849200000D+01 .5802700000D+01 -.3090000000D-01 -.6471000000D+00 .1560000000D-02 .1313466000D+03 .6727510000D+01 .1004650000D+00 .4090000000D+00 .1016504000D+01 .5470200000D+01 .3154100000D+01 -.3270400000D+01 .2519000000D+00 .1200000000D-02 .1305631000D+03 .6561370000D+01 .1110050000D+00 .2674000000D+00 .5672672000D+01 .3960100000D+01 .1709000000D+01 -.3056000000D+00 +5 17920091231201002102455196.0 .1687000000D+00 -.2200000000D-03 .4484300000D+02 .2494620000D+01 .4030700000D-01 .1059000000D+00 .3656158000D+01 .1870600000D+01 .5813200000D+01 -.1458000000D+00 -.6355000000D+00 .1060000000D-02 .1310881000D+03 .6648080000D+01 .9873500000D-01 .4060000000D+00 .1039594000D+01 .5496600000D+01 .3186200000D+01 -.3292100000D+01 .2593000000D+00 -.1500000000D-03 .1304491000D+03 .6545030000D+01 .1103490000D+00 .2550000000D+00 .5695250000D+01 .3980300000D+01 .1726000000D+01 -.2109000000D+00 +5 18020100210201003232455237.0 .1799000000D+00 -.6300000000D-03 .4697030000D+02 .2662560000D+01 .4340300000D-01 .1085000000D+00 .3628457000D+01 .1850700000D+01 .5787600000D+01 -.8830000000D-01 -.6364000000D+00 .1170000000D-02 .1308461000D+03 .6540940000D+01 .9644300000D-01 .4056000000D+00 .1074626000D+01 .5535900000D+01 .3235500000D+01 -.3283200000D+01 .2119000000D+00 .1050000000D-02 .1297872000D+03 .6478720000D+01 .1087200000D+00 .2412000000D+00 .5723856000D+01 .4008200000D+01 .1752600000D+01 -.3437000000D+00 +5 18120100323201005032455278.0 .1717000000D+00 -.3600000000D-03 .4990420000D+02 .2804930000D+01 .4564600000D-01 .9950000000D-01 .3589629000D+01 .1820600000D+01 .5757000000D+01 -.1401000000D+00 -.6364000000D+00 .1060000000D-02 .1306557000D+03 .6442570000D+01 .9453300000D-01 .4077000000D+00 .1124123000D+01 .5589700000D+01 .3301400000D+01 -.3278000000D+01 .2062000000D+00 -.2400000000D-03 .1286164000D+03 .6403540000D+01 .1071850000D+00 .2195000000D+00 .5764066000D+01 .4050100000D+01 .1791900000D+01 -.2307000000D+00 +5 18220100503201006132455319.0 .1761000000D+00 -.7100000000D-03 .5282880000D+02 .2888130000D+01 .4646100000D-01 .9380000000D-01 .3571735000D+01 .1804000000D+01 .5741900000D+01 -.5430000000D-01 -.6380000000D+00 .7500000000D-03 .1305783000D+03 .6375400000D+01 .9332700000D-01 .4169000000D+00 .1183781000D+01 .5651800000D+01 .3375000000D+01 -.3295300000D+01 .1368000000D+00 .1170000000D-02 .1273824000D+03 .6352840000D+01 .1063200000D+00 .1852000000D+00 .5816392000D+01 .4105300000D+01 .1843900000D+01 -.3988000000D+00 +5 18320100613201007242455360.0 .1721000000D+00 -.4800000000D-03 .5471780000D+02 .2889170000D+01 .4563700000D-01 .8640000000D-01 .3590427000D+01 .1814100000D+01 .5753000000D+01 -.7270000000D-01 -.6604000000D+00 .1200000000D-02 .1305385000D+03 .6351580000D+01 .9323700000D-01 .4296000000D+00 .1245901000D+01 .5714700000D+01 .3446600000D+01 -.3268200000D+01 .1189000000D+00 -.2000000000D-04 .1265466000D+03 .6369720000D+01 .1069680000D+00 .1483000000D+00 .5875737000D+01 .4168100000D+01 .1900300000D+01 -.2642000000D+00 +5 18420100724201009032455401.0 .1753000000D+00 -.5400000000D-03 .5492750000D+02 .2805350000D+01 .4339100000D-01 .8650000000D-01 .3647358000D+01 .1856500000D+01 .5798400000D+01 -.3920000000D-01 -.6570000000D+00 .3500000000D-03 .1305074000D+03 .6367420000D+01 .9386100000D-01 .4474000000D+00 .1301182000D+01 .5767800000D+01 .3504000000D+01 -.3325800000D+01 .6280000000D-01 .1260000000D-02 .1266283000D+03 .6458640000D+01 .1090030000D+00 .1250000000D+00 .5934689000D+01 .4228100000D+01 .1952600000D+01 -.5087000000D+00 +5 18520100903201010142455442.0 .1830000000D+00 -.4400000000D-03 .5356930000D+02 .2683860000D+01 .4081700000D-01 .9320000000D-01 .3734352000D+01 .1930500000D+01 .5880600000D+01 -.3730000000D-01 -.6864000000D+00 .1240000000D-02 .1304442000D+03 .6399300000D+01 .9475300000D-01 .4650000000D+00 .1342268000D+01 .5805800000D+01 .3543000000D+01 -.3281000000D+01 .5940000000D-01 .3300000000D-03 .1274795000D+03 .6597980000D+01 .1119030000D+00 .1138000000D+00 .5984689000D+01 .4275600000D+01 .1990400000D+01 -.3128000000D+00 +5 18620101014201011242455483.0 .1970000000D+00 -.2600000000D-03 .5177250000D+02 .2612550000D+01 .3963800000D-01 .1137000000D+00 .3830004000D+01 .2020900000D+01 .5981100000D+01 -.9170000000D-01 -.6685000000D+00 .2700000000D-03 .1303014000D+03 .6416510000D+01 .9508100000D-01 .4700000000D+00 .1369001000D+01 .5830400000D+01 .3566600000D+01 -.3335700000D+01 .2370000000D-01 .1390000000D-02 .1286122000D+03 .6718530000D+01 .1141490000D+00 .1078000000D+00 .6021882000D+01 .4306800000D+01 .2014000000D+01 -.5029000000D+00 +5 18720101124201101042455524.0 .2235000000D+00 -.4500000000D-03 .5090370000D+02 .2652970000D+01 .4072000000D-01 .1372000000D+00 .3900758000D+01 .2090600000D+01 .6053500000D+01 -.7830000000D-01 -.6882000000D+00 .1560000000D-02 .1300965000D+03 .6387410000D+01 .9452900000D-01 .4635000000D+00 .1388393000D+01 .5851200000D+01 .3589600000D+01 -.3273200000D+01 .2410000000D-01 .6600000000D-03 .1292649000D+03 .6775830000D+01 .1149120000D+00 .1045000000D+00 .6047682000D+01 .4326800000D+01 .2028400000D+01 -.3459000000D+00 +5 18820110104201102142455565.0 .2354000000D+00 -.1800000000D-03 .5161870000D+02 .2785810000D+01 .4335600000D-01 .1570000000D+00 .3923605000D+01 .2115800000D+01 .6072400000D+01 -.1596000000D+00 -.6488000000D+00 .2500000000D-03 .1298038000D+03 .6317240000D+01 .9317900000D-01 .4534000000D+00 .1412257000D+01 .5880000000D+01 .3624000000D+01 -.3352200000D+01 .2600000000D-02 .1160000000D-02 .1292392000D+03 .6750930000D+01 .1139260000D+00 .9700000000D-01 .6070483000D+01 .4345100000D+01 .2044500000D+01 -.5170000000D+00 diff --git a/GUI/xephem/auxil/wmm.cof b/GUI/xephem/auxil/wmm.cof new file mode 100644 index 0000000..f4d2f40 --- /dev/null +++ b/GUI/xephem/auxil/wmm.cof @@ -0,0 +1,93 @@ + 2015.0 WMM-2015 12/15/2014 + 1 0 -29438.5 0.0 10.7 0.0 + 1 1 -1501.1 4796.2 17.9 -26.8 + 2 0 -2445.3 0.0 -8.6 0.0 + 2 1 3012.5 -2845.6 -3.3 -27.1 + 2 2 1676.6 -642.0 2.4 -13.3 + 3 0 1351.1 0.0 3.1 0.0 + 3 1 -2352.3 -115.3 -6.2 8.4 + 3 2 1225.6 245.0 -0.4 -0.4 + 3 3 581.9 -538.3 -10.4 2.3 + 4 0 907.2 0.0 -0.4 0.0 + 4 1 813.7 283.4 0.8 -0.6 + 4 2 120.3 -188.6 -9.2 5.3 + 4 3 -335.0 180.9 4.0 3.0 + 4 4 70.3 -329.5 -4.2 -5.3 + 5 0 -232.6 0.0 -0.2 0.0 + 5 1 360.1 47.4 0.1 0.4 + 5 2 192.4 196.9 -1.4 1.6 + 5 3 -141.0 -119.4 0.0 -1.1 + 5 4 -157.4 16.1 1.3 3.3 + 5 5 4.3 100.1 3.8 0.1 + 6 0 69.5 0.0 -0.5 0.0 + 6 1 67.4 -20.7 -0.2 0.0 + 6 2 72.8 33.2 -0.6 -2.2 + 6 3 -129.8 58.8 2.4 -0.7 + 6 4 -29.0 -66.5 -1.1 0.1 + 6 5 13.2 7.3 0.3 1.0 + 6 6 -70.9 62.5 1.5 1.3 + 7 0 81.6 0.0 0.2 0.0 + 7 1 -76.1 -54.1 -0.2 0.7 + 7 2 -6.8 -19.4 -0.4 0.5 + 7 3 51.9 5.6 1.3 -0.2 + 7 4 15.0 24.4 0.2 -0.1 + 7 5 9.3 3.3 -0.4 -0.7 + 7 6 -2.8 -27.5 -0.9 0.1 + 7 7 6.7 -2.3 0.3 0.1 + 8 0 24.0 0.0 0.0 0.0 + 8 1 8.6 10.2 0.1 -0.3 + 8 2 -16.9 -18.1 -0.5 0.3 + 8 3 -3.2 13.2 0.5 0.3 + 8 4 -20.6 -14.6 -0.2 0.6 + 8 5 13.3 16.2 0.4 -0.1 + 8 6 11.7 5.7 0.2 -0.2 + 8 7 -16.0 -9.1 -0.4 0.3 + 8 8 -2.0 2.2 0.3 0.0 + 9 0 5.4 0.0 0.0 0.0 + 9 1 8.8 -21.6 -0.1 -0.2 + 9 2 3.1 10.8 -0.1 -0.1 + 9 3 -3.1 11.7 0.4 -0.2 + 9 4 0.6 -6.8 -0.5 0.1 + 9 5 -13.3 -6.9 -0.2 0.1 + 9 6 -0.1 7.8 0.1 0.0 + 9 7 8.7 1.0 0.0 -0.2 + 9 8 -9.1 -3.9 -0.2 0.4 + 9 9 -10.5 8.5 -0.1 0.3 + 10 0 -1.9 0.0 0.0 0.0 + 10 1 -6.5 3.3 0.0 0.1 + 10 2 0.2 -0.3 -0.1 -0.1 + 10 3 0.6 4.6 0.3 0.0 + 10 4 -0.6 4.4 -0.1 0.0 + 10 5 1.7 -7.9 -0.1 -0.2 + 10 6 -0.7 -0.6 -0.1 0.1 + 10 7 2.1 -4.1 0.0 -0.1 + 10 8 2.3 -2.8 -0.2 -0.2 + 10 9 -1.8 -1.1 -0.1 0.1 + 10 10 -3.6 -8.7 -0.2 -0.1 + 11 0 3.1 0.0 0.0 0.0 + 11 1 -1.5 -0.1 0.0 0.0 + 11 2 -2.3 2.1 -0.1 0.1 + 11 3 2.1 -0.7 0.1 0.0 + 11 4 -0.9 -1.1 0.0 0.1 + 11 5 0.6 0.7 0.0 0.0 + 11 6 -0.7 -0.2 0.0 0.0 + 11 7 0.2 -2.1 0.0 0.1 + 11 8 1.7 -1.5 0.0 0.0 + 11 9 -0.2 -2.5 0.0 -0.1 + 11 10 0.4 -2.0 -0.1 0.0 + 11 11 3.5 -2.3 -0.1 -0.1 + 12 0 -2.0 0.0 0.1 0.0 + 12 1 -0.3 -1.0 0.0 0.0 + 12 2 0.4 0.5 0.0 0.0 + 12 3 1.3 1.8 0.1 -0.1 + 12 4 -0.9 -2.2 -0.1 0.0 + 12 5 0.9 0.3 0.0 0.0 + 12 6 0.1 0.7 0.1 0.0 + 12 7 0.5 -0.1 0.0 0.0 + 12 8 -0.4 0.3 0.0 0.0 + 12 9 -0.4 0.2 0.0 0.0 + 12 10 0.2 -0.9 0.0 0.0 + 12 11 -0.9 -0.2 0.0 0.0 + 12 12 0.0 0.7 0.0 0.0 +999999999999999999999999999999999999999999999999 +999999999999999999999999999999999999999999999999 diff --git a/GUI/xephem/auxil/xephem_sites b/GUI/xephem/auxil/xephem_sites new file mode 100644 index 0000000..9d4240f --- /dev/null +++ b/GUI/xephem/auxil/xephem_sites @@ -0,0 +1,552 @@ +# xephem sites file. +# +# The format of this file is extended from that with the xsat program and many +# cities included here are from the sample included therewith. Xsat included +# the following notice: +# +# Copyright 1992 by David A. Curry +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that copyright +# notice and this permission notice appear in supporting documentation. The +# author makes no representations about the suitability of this software for +# any purpose. It is provided "as is" without express or implied warranty. +# +# Many of the observatory sites are transcribed, with permission, from the table +# beginning on page 28 in the July 1993 issue of Sky and Telescope. Any +# descrepencies or unfaithful interpretations of the information provided +# therein are strictly the fault of the author of xephem. +# +# City, State or Country, or site name ; Latitude ; Longitude ; Elev ; TZ + +AAO Coonabarabran, NSW, Australia ; 31 16 38 S ; 149 3 58 E ; 1164 ; EST-10EDT,M10.5.0,M3.5.0 +ATCA Mopra, Australia ; 31 16 10 S ; 149 05 54 E ; 837.9; EST-10EDT,M10.5.0,M3.5.0 +ATCA Narrabri, Australia ; 30 18 52 S ; 149 34 1 E ; 210.8 ; EST-10EDT,M10.5.0,M3.5.0 +Aachen, Germany ; 50 46 0 N ; 6 6 0 E ; 285.0 ; CET-1CEST,M3.5.0,M10.5.0 +Aberdeen, Scotland ; 57 12 25 N ; 02 11 92 W ; -1.0 ; GMT0BST,M3.5.0,M10.5.0 +Abilene, Texas ; 32 27 5 N ; 99 43 51 W ; 521.2 ; CST6CDT +Adelaide SA, Australia ; 34 55 0 S ; 138 35 0 E ; 72 ; CST-9:30CDT,M10.5.0,M3.5.0 +Akron, Ohio ; 41 5 0 N ; 81 30 44 W ; 266.4 ; EST5EDT +Albany, New York ; 42 39 1 N ; 73 45 1 W ; 6.1 ; EST5EDT +Albuquerque, New Mexico ; 35 5 1 N ; 106 39 5 W ;1507.2 ; MST7MDT +Alice Springs, NT, Australia ; 23 48 30 S ; 133 54 3 E ; 609 ; CST-9:30 +Allegheny Observatory ; 40 29 0 N ; 80 1 0 W ; 380 ; EST5EDT +Allentown, Pennsylvania ; 40 36 11 N ; 75 28 6 W ; 77.7 ; EST5EDT +Altoona, Pennsylvania ; 40 30 55 N ; 78 24 3 W ; 359.7 ; EST5EDT +Amarillo, Texas ; 35 12 27 N ; 101 50 4 W ;1123.2 ; CST6CDT +Amsterdam, Netherlands ; 52 22 0 N ; 04 54 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Anchorage, Alaska ; 61 10 0 N ; 149 59 0 W ; 36.0 ; YST9YDT +Ann Arbor, Michigan ; 42 16 59 N ; 83 44 52 W ; 268.2 ; EST5EDT +Antwerp, Belgium ; 51 10 16 N ; 04 24 21 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Apache Point Observatory, New Mexico ; 32 46 49 N ; 105 49 13 W ; 2788 ; MST7MDT +Archenhold-Sternwarte ; 52 29 0 N ; 13 29 0 E ; 41 ; CET-1CEST,M3.5.0,M10.5.0 +Arecibo Radiotelescope, Puerto Rico ; 18 21 14 N ; 66 45 19 W ; 496 ; AST4 +Argus Radio Telescope (NAAPO) ; 40 00 09 N ; 83 02 41 W ; 248.5 ; EST5EDT4,M4.1.0,M10.5.0 +Arlington, Virginia ; 38 52 0 N ; 77 7 0 W ; 9.1 ; EST5EDT +Asheville, North Carolina ; 35 35 42 N ; 82 33 26 W ; 605.0 ; EST5EDT +Ashland, Kentucky ; 38 28 36 N ; 82 38 23 W ; 163.4 ; EST5EDT +Astronomisches Inst. Univ. Obs. ; 48 14 0 N ; 16 20 0 E ; 241 ; CET-1CEST,M3.5.0,M10.5.0 +Astrophys. Research Consortium (ARC) ; 32 46 49 N ; 105 49 13 W ; 2788 ; MST7MDT +Athens, Greece ; 37 58 0 N ; 23 44 0 E ; 91.4 ; EET-2EETDST,M3.5.0,M10.5.0 +Atlanta, Georgia ; 33 45 10 N ; 84 23 37 W ; 320.0 ; EST5EDT +Atlantic City, New Jersey ; 39 21 32 N ; 74 25 53 W ; 3.0 ; EST5EDT +Augusta, Georgia ; 33 28 20 N ; 81 58 0 W ; 43.6 ; EST5EDT +Augusta, Maine ; 44 18 53 N ; 69 46 29 W ; 13.7 ; EST5EDT +Austin, Texas ; 30 16 9 N ; 97 44 37 W ; 153.9 ; CST6CDT +BIMA, Hat Creek, California ; 40 49 00 N ; 121 28 00 W ; 1043.0; PST8PDT +Bakersfield, California ; 35 22 31 N ; 119 1 18 W ; 121.9 ; PST8PDT +Baltimore, Maryland ; 39 17 36 N ; 76 36 45 W ; 6.1 ; EST5EDT +Bangkok, Thailand ; 13 44 0 N ; 100 30 0 E ; -1.0 ; TST-7 +Bangor, Maine ; 44 48 13 N ; 68 46 18 W ; 6.1 ; EST5EDT +Barcelona, Spain ; 41 23 0 N ; 02 9 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Barcelona, Venezuela ; 10 08 06 N ; 64 10 07 W ; 4.1 ; VET4 +Barquisimeto, Venezuela ; 10 03 57 N ; 69 18 46 W ; 596.9 ; VET4 +Baton Rouge, Louisiana ; 30 26 58 N ; 91 11 0 W ; 17.4 ; CST6CDT +Battle Creek, Michigan ; 42 18 58 N ; 85 10 48 W ; 249.9 ; EST5EDT +Batumi, Georgia ; 43 40 0 N ; 40 0 0 E ; -1.0 ; EST-5EDT +Bay City, Michigan ; 43 36 4 N ; 83 53 15 W ; 181.4 ; EST5EDT +Beaumont, Texas ; 30 5 20 N ; 94 6 9 W ; 6.1 ; CST6CDT +Beijing, China ; 39 54 0 N ; 116 28 0 E ; 182.9 ; CST-8 +Beirut, Lebanon ; 33 54 0 N ; 35 28 0 E ; -1.0 ; CET-2CDT,M3.5.0,M10.5.0 +Belfast, Northern Ireland ; 54 35 0 N ; 05 50 0 W ; -1.0 ; GMT0BST,M3.5.0,M10.5.0 +Bellingham, Washington ; 48 45 34 N ; 122 28 36 W ; 18.3 ; PST8PDT +Bentley WA, Australia ; 31 58 43 S ; 115 48 55 E ; 76 ; WST-8 +Berkeley, California ; 37 52 10 N ; 122 16 17 W ; 12.2 ; PST8PDT +Berlin, Germany ; 52 31 0 N ; 13 25 0 E ; 81.0 ; CET-1CEST,M3.5.0,M10.5.0 +Bethlehem, Pennsylvania ; 40 37 16 N ; 75 22 34 W ; 71.6 ; EST5EDT +Billings, Montana ; 45 47 0 N ; 108 30 4 W ; 951.0 ; MST7MDT +Biloxi, Mississippi ; 30 23 48 N ; 88 53 0 W ; 6.1 ; CST6CDT +Binghamton, New York ; 42 6 3 N ; 75 54 47 W ; 263.7 ; EST5EDT +Birmingham, Alabama ; 33 31 1 N ; 86 48 36 W ; 182.9 ; CST6CDT +Bisei Spaceguard Center ; 34 40 20 N ; 133 32 40 E ; 400 ; JST-9 +Bismarck, North Dakota ; 46 48 23 N ; 100 47 17 W ; 510.2 ; CST6CDT +Bloomington, Illinois ; 40 28 58 N ; 88 59 36 W ; 243.8 ; CST6CDT +Bogota, Colombia ; 04 38 0 N ; 74 5 0 W ; -1.0 ; WBT5 +Boise, Idaho ; 43 37 7 N ; 116 11 58 W ; 824.2 ; MST7MDT +Bombay, India ; 19 5 3 N ; 72 51 3 E ; -1.0 ; IST-5:30 +Bonn, Germany ; 50 44 0 N ; 7 6 0 E ; 60.0 ; CET-1CEST,M3.5.0,M10.5.0 +Bordeaux, France ; 44 50 0 N ; 0 35 0 W ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Boston, Massachusetts ; 42 21 24 N ; 71 3 25 W ; 6.4 ; EST5EDT +Bowling Green, Kentucky ; 36 59 41 N ; 86 26 33 W ; 155.4 ; CST6CDT +Bratislava, Slovak Republic ; 48 10 0 N ; 17 7 0 E ; -1.0 ; CET-2CDT,M3.5.0,M10.5.0 +Brattleboro, Vermont ; 42 51 6 N ; 72 33 48 W ; 91.4 ; EST5EDT +Bremen, Germany ; 53 4 33 N ; 8 48 26 E ; 11.0 ; CET-1CEST,M3.5.0,M10.5.0 +Brest, France ; 48 23 0 N ; 4 29 0 W ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Bridgeport, Connecticut ; 41 10 49 N ; 73 11 22 W ; 3.0 ; EST5EDT +Brisbane Qld, Australia ; 27 30 0 S ; 153 0 0 E ; 24 ; EST-10 +Brockton, Massachusetts ; 42 5 2 N ; 71 1 25 W ; 39.6 ; EST5EDT +Broken Hill NSW, Australia ; 31 57 0 S ; 141 26 0 E ; 72 ; CST-9:30CDT,M10.5.0,M3.5.0 +Brownsville, Texas ; 25 54 7 N ; 97 29 58 W ; 10.7 ; CST6CDT +Brussels, Belgium ; 50 50 20 N ; 04 38 12 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Bucharest, Romania ; 44 25 50 N ; 26 6 50 E ; 75.0 ; EET-2EETDST,M3.5.0,M10.5.0 +Budapest, Hungary ; 47 30 0 N ; 19 5 0 E ; -1.0 ; CET-2CDT,M3.5.0,M10.5.0 +Buenos Aires, Argentina ; 34 34 0 S ; 58 3 0 W ; -1.0 ; AST3 +Buffalo, New York ; 42 52 52 N ; 78 52 21 W ; 178.3 ; EST5EDT +Burlington, Vermont ; 44 28 34 N ; 73 12 46 W ; 33.5 ; EST5EDT +Butte, Montana ; 46 1 6 N ; 112 32 11 W ;1757.2 ; MST7MDT +Buxton, North Carolina ; 35 15 45 N ; 75 33 40 W ; 2.0 ; EST5EDT +Byurakan Observatory ; 40 20 0 N ; 44 18 0 E ; 1500 ; MSK-3MSD,M3.5.0,M10.5.0 +Cairns Qld , Australia ; 16 55 0 S ; 145 46 0 E ; 0 ; EST-10 +Cairo, Egypt ; 31 15 0 N ; 31 3 0 E ; -1.0 ; EST-2EDT1,121,274 +Calar Alto Observatory ; 37 13 0 N ; 2 32 0 W ; 2168 ; CET-1CEST,M3.5.0,M10.5.0 +Cambridge, England ; 52 10 0 N ; 00 6 0 E ; -1.0 ; GMT0BST,M3.5.0,M10.5.0 +Cambridge, Massachusetts ; 42 22 1 N ; 71 6 22 W ; 6.1 ; EST5EDT +Camden, New Jersey ; 39 56 41 N ; 75 7 14 W ; 9.1 ; EST5EDT +Canada-France-Hawaii Tel. (CFHT) ; 19 49 36 N ; 155 28 18 W ; 4200 ; HST10 +Canberra ACT, Australia ; 35 14 24 S ; 149 7 12 E ; 609 ; EST-10EDT,M10.5.0,M3.5.0 +Canton, Ohio ; 40 47 50 N ; 81 22 37 W ; 313.9 ; EST5EDT +Capetown, South Africa ; 33 56 0 S ; 18 22 15 E ; -1.0 ; SAT-2 +Caracas, Venezuela ; 10 30 24 N ; 66 55 40 W ; 914.4 ; VET4 +Carmel-by-the-Sea, California ; 36 33 32 N ; 121 55 79 W ; 5.0 ; PST8PDT +Carson City, Nevada ; 39 10 0 N ; 119 46 0 W ;1426.5 ; PST8PDT +Casey Observatory, AAT ; 66 12 0 S ; 110 21 0 E ; -1 ; WST-8 +Catalina Observatory, Mt. Bigelow ; 32 25 0 N ; 110 43 54 W ; 2510 ; PST8PDT +Cedar Rapids, Iowa ; 41 58 1 N ; 91 39 53 W ; 222.5 ; CST6CDT +Central Coast (Erina) NSW, Australia ; 33 26 0 S ; 151 23 0 E ; 6 ; EST-10EDT,M10.5.0,M3.5.0 +Central Islip, New York ; 40 47 24 N ; 73 12 0 W ; 24.4 ; EST5EDT +Cerro Tololo Inter-American Obs. ; 30 9 54 S ; 70 48 54 W ; 2215 ; WST4WDT,M9.5.0,M3.2.0 +Champaign, Illinois ; 40 7 5 N ; 88 14 48 W ; 225.6 ; CST6CDT +Charleston, South Carolina ; 32 46 35 N ; 79 55 53 W ; 2.7 ; EST5EDT +Charleston, West Virginia ; 38 21 1 N ; 81 37 52 W ; 183.2 ; EST5EDT +Charlotte, North Carolina ; 35 13 44 N ; 80 50 45 W ; 219.5 ; EST5EDT +Chattanooga, Tennessee ; 35 2 41 N ; 85 18 32 W ; 205.7 ; EST5EDT +Cheyenne, Wyoming ; 41 8 9 N ; 104 49 7 W ;1859.3 ; MST7MDT +Chicago, Illinois ; 41 52 28 N ; 87 38 22 W ; 181.4 ; CST6CDT +Cincinnatti, Ohio ; 39 6 7 N ; 84 30 35 W ; 271.6 ; EST5EDT +Cleveland, Ohio ; 41 29 51 N ; 81 41 50 W ; 201.2 ; EST5EDT +Cologne, Germany ; 50 57 0 N ; 6 57 0 E ; 81.0 ; CET-1CEST,M3.5.0,M10.5.0 +Colorado Springs, Colorado ; 38 50 7 N ; 104 49 16 W ;1822.7 ; MST7MDT +Columbia, Missouri ; 38 57 3 N ; 92 19 46 W ; 222.5 ; CST6CDT +Columbia, South Carolina ; 34 0 2 N ; 81 2 0 W ; 57.9 ; EST5EDT +Columbus Project ; 32 42 0 N ; 109 51 0 W ; 3170 ; PST8PDT +Columbus, Georgia ; 32 28 7 N ; 84 59 24 W ; 80.8 ; EST5EDT +Columbus, Ohio ; 39 57 47 N ; 83 0 17 W ; 237.8 ; EST5EDT +Concord, New Hampshire ; 43 12 22 N ; 71 32 25 W ; 88.4 ; EST5EDT +# Entry for Copenhagen is the old Round Tower Observatory. +Copenhagen, Denmark ; 55 40 55 N ; 12 34 37 E ; 40.0 ; CET-1CEST,M3.5.0,M10.5.0 +Corpus Christi, Texas ; 27 47 51 N ; 97 23 45 W ; 10.7 ; CST6CDT +Crete, Greece ; 35 20 0 N ; 25 9 0 E ; -1.0 ; EET-2EETDST,M3.5.0,M10.5.0 +Crimean Astrophysical Obs. ; 44 44 0 N ; 34 0 0 E ; -1 ; CET-2CDT,M3.5.0,M10.5.0 +Dallas, Texas ; 32 47 9 N ; 96 47 37 W ; 132.6 ; CST6CDT +Darwin, NT, Australia ; 12 24 58 S ; 130 52 53 E ; 0 ; CST-9:30 +Davenport, Iowa ; 41 31 19 N ; 90 34 33 W ; 179.8 ; CST6CDT +Davis Observatory, AAT ; 68 35 0 S ; 77 58 0 E ; -1 ; AAT-6 +Dayton, Ohio ; 39 45 32 N ; 84 11 43 W ; 307.6 ; EST5EDT +Daytona Beach, Florida ; 29 12 44 N ; 81 1 10 W ; 2.1 ; EST5EDT +Decatur, Illinois ; 39 50 42 N ; 88 56 47 W ; 207.9 ; CST6CDT +Denver, Colorado ; 39 44 58 N ; 104 59 22 W ;1609.3 ; MST7MDT +Des Moines, Iowa ; 41 35 14 N ; 93 37 0 W ; 245.4 ; CST6CDT +Detroit, Michigan ; 42 19 48 N ; 83 2 57 W ; 211.3 ; EST5EDT +Dodge City, Kansas ; 37 45 17 N ; 100 1 9 W ; 755.9 ; CST6CDT +Dominion Astrophysical Observatory ; 48 31 18 N ; 123 25 0 W ; 229 ; PST8PDT +Dominion Radio Astro. Observatory ; 49 20 0 N ; 119 36 0 W ; 545 ; PST8PDT +Dortmund, Germany ; 51 31 0 N ; 7 28 0 E ; 76.0 ; CET-1CEST,M3.5.0,M10.5.0 +Dublin, Ireland ; 53 18 56 N ; 06 14 21 W ; -1.0 ; GMT0BST,M3.5.0,M10.5.0 +Dubuque, Iowa ; 42 29 55 N ; 90 40 8 W ; 189.0 ; CST6CDT +Duluth, Minnesota ; 46 46 56 N ; 92 6 24 W ; 185.9 ; CST6CDT +Durham, North Carolina ; 36 0 0 N ; 78 54 45 W ; 123.4 ; EST5EDT +Dusseldorf, Germany ; 51 13 32 N ; 6 46 58 E ; 38.0 ; CET-1CEST,M3.5.0,M10.5.0 +ESO 1-meter Schmidt Telescope ; 29 15 0 S ; 70 44 0 W ; 2318 ; WST4WDT,M9.5.0,M3.2.0 +Eau Claire, Wisconsin ; 44 48 31 N ; 91 29 49 W ; 240.8 ; CST6CDT +Edinburgh, Scotland ; 55 55 0 N ; 03 10 0 W ; -1.0 ; GMT0BST,M3.5.0,M10.5.0 +Edmonton Alberta, Canada ; 53 33 47 N ; 113 36 48 W ; -1.0 ; MST7MDT +Effelsberg 100m Radiotelescope ; 50 31 36 N ; 06 51 18 E ; 369 ; CET-1CEST,M3.5.0,M10.5.0 +El Manzano, Venezuela ; 10 02 26 N ; 69 17 58 W ; 604.0 ; VET4 +El Paso, Texas ; 31 45 36 N ; 106 29 11 W ;1126.2 ; MST7MDT +Elizabeth, New Jersey ; 40 39 43 N ; 74 12 59 W ; 6.4 ; EST5EDT +Enid, Oklahoma ; 36 23 40 N ; 97 52 35 W ; 378.0 ; CST6CDT +Erie, Pennsylvania ; 42 7 15 N ; 80 4 57 W ; 208.8 ; EST5EDT +Essen, Germany ; 51 27 0 N ; 7 1 0 E ; 116.0 ; CET-1CEST,M3.5.0,M10.5.0 +Etscorn Campus Observatory ; 34 4 22 N ; 106 54 50 W ;1423.7 ; MST7MDT +Eugene, Oregon ; 44 3 16 N ; 123 5 30 W ; 128.6 ; PST8PDT +Eureka, California ; 40 48 8 N ; 124 9 46 W ; 13.7 ; PST8PDT +European Southern Observatory (NTT) ; 29 15 24 S ; 70 43 48 W ; 2347 ; CLT4CLST3,M10.5.0,M3.5.0 +European Southern Observatory (VLT) ; 24 37 38 S ; 70 24 15 W ; 2653.0; CLT4CLST3,M10.5.0,M3.5.0 +Evansville, Indiana ; 37 58 20 N ; 87 34 21 W ; 117.3 ; CST6CDT +Fabra-ROA at Montsec, Spain ; 42 03 6 N ; 0 43 46 W ; 1570.0 ; CET-1CEST,M3.5.0,M10.5.0 +Fall River, Massachusetts ; 41 42 6 N ; 71 9 18 W ; 12.2 ; EST5EDT +Fargo, North Dakota ; 46 52 30 N ; 96 47 18 W ; 274.3 ; CST6CDT +Flagstaff, Arizona ; 35 11 36 N ; 111 39 6 W ;2103.1 ; MST7 +Flint, Michigan ; 43 0 50 N ; 83 41 33 W ; 228.6 ; EST5EDT +Fort Smith, Arkansas ; 35 23 10 N ; 94 25 36 W ; 134.1 ; CST6CDT +Fort Wayne, Indiana ; 41 4 21 N ; 85 8 26 W ; 240.8 ; EST5 +Fort Worth, Texas ; 32 44 55 N ; 97 19 44 W ; 204.2 ; CST6CDT +Frankfurt, Germany ; 50 7 0 N ; 08 41 0 E ; 112.0 ; CET-1CEST,M3.5.0,M10.5.0 +Fremont Peak Observatory, CA, USA ; 36 45 37 N ; 121 29 55 W ; 838 ; PST8PDT +Fresno, California ; 36 44 12 N ; 119 47 11 W ; 86.9 ; PST8PDT +Gadsden, Alabama ; 34 0 57 N ; 86 0 41 W ; 169.2 ; CST6CDT +Gainesville, Florida ; 29 38 56 N ; 82 19 19 W ; 53.3 ; EST5EDT +Gallup, New Mexico ; 35 31 30 N ; 108 44 30 W ;1993.4 ; MST7MDT +Galveston, Texas ; 29 18 10 N ; 94 47 43 W ; 1.5 ; CST6CDT +Gary, Indiana ; 41 36 12 N ; 87 20 19 W ; 179.8 ; CST6CDT +Gemini Telescope (north) ; 19 49 0 N ; 155 28 0 W ; 4100 ; HST10 +Gemini Telescope (south) ; 30 21 0 S ; 70 49 0 W ; 2725 ; WST4WDT,M9.5.0,M3.2.0 +Geneva, Switzerland ; 46 14 0 N ; 06 6 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Gillam Manitoba, Canada ; 56 22 48 N ; 94 38 24 W ; 145.0 ; CST6CDT +Grand Junction, Colorado ; 39 4 6 N ; 108 33 54 W ;1399.0 ; MST7MDT +Grand Rapids, Michigan ; 42 58 3 N ; 85 40 13 W ; 185.9 ; EST5EDT +Graz, Austria ; 47 4 1 N ; 15 27 0 E ; 357.0 ; CET-1CEST,M3.5.0,M10.5.0 +Great Falls, Montana ; 47 29 33 N ; 111 18 23 W ;1018.0 ; MST7MDT +Green Bay, Wisconsin ; 44 30 48 N ; 88 0 50 W ; 179.8 ; CST6CDT +Greensboro, North Carolina ; 36 4 17 N ; 79 47 25 W ; 255.7 ; EST5EDT +Greenville, South Carolina ; 34 50 50 N ; 82 24 1 W ; 294.4 ; EST5EDT +Greenwich, England ; 51 30 0 N ; 00 0 0 W ; 74.7 ; GMT0BST,M3.5.0,M10.5.0 +Groton, New York ; 42 35 26 N ; 72 33 20 W ; 250.0 ; EST5EDT +Guatemala City, Guatemala ; 14 38 0 N ; 90 22 0 W ; -1.0 ; CST6CDT +Gulfport, Mississippi ; 30 22 4 N ; 89 5 36 W ; 6.1 ; CST6CDT +Halifax Nova Scotia, Canada ; 44 38 55 N ; 63 34 25 W ; -1.0 ; AST5ADT +Hamburg, Germany ; 53 33 0 N ; 9 59 0 E ; 6.0 ; CET-1CEST,M3.5.0,M10.5.0 +Hamilton, Ohio ; 39 23 59 N ; 84 33 47 W ; 182.9 ; EST5EDT +Hanging Rock, Victoria, Australia ; 37 19 81 S ; 144 35 66 E ; 1143 ; EST-10EDT,M10.5.0,M3.5.0 +Hannover, Germany ; 52 22 28 N ; 9 44 19 E ; 55.0 ; CET-1CEST,M3.5.0,M10.5.0 +Harare, Zimbabwe ; 17 50 0 S ; 31 3 0 E ; -1.0 ; SAT-2 +Harrisburg, Pennsylvania ; 40 15 43 N ; 76 52 59 W ; 111.3 ; EST5EDT +Hartford, Connecticut ; 41 46 12 N ; 72 40 49 W ; 12.2 ; EST5EDT +Helena, Montana ; 46 35 33 N ; 112 2 24 W ;1266.4 ; MST7MDT +Helsinki, Finland ; 60 10 0 N ; 24 50 0 E ; -1.0 ; EET-2EETDST,M3.5.0,M10.5.0 +Hobart Tas, Australia ; 42 50 0 S ; 147 20 0 E ; 151 ; EST-10EDT,M10.1.0,M3.5.0 +Holyoke, Massachusetts ; 42 12 29 N ; 72 36 36 W ; 35.1 ; EST5EDT +Honolulu, Hawaii ; 21 18 22 N ; 157 51 35 W ; 6.4 ; HST10 +Houston, Texas ; 29 45 26 N ; 95 21 37 W ; 12.2 ; CST6CDT +Huntington, West Virginia ; 38 25 12 N ; 82 26 33 W ; 172.2 ; EST5EDT +Huntsville, Alabama ; 34 44 18 N ; 86 35 19 W ; 195.1 ; CST6CDT +Ilford NSW, Australia ; 32 58 0 S ; 149 52 0 E ; 825 ; EST-10EDT,M10.5.0,M3.5.0 +Indianapolis, Indiana ; 39 46 7 N ; 86 9 46 W ; 216.4 ; EST5 +Iowa City, Iowa ; 41 39 37 N ; 91 31 53 W ; 208.8 ; CST6CDT +Isaac Newton Telescope (98-inch) ; 28 46 0 N ; 17 53 0 W ; 2336 ; AST1ADT,M3.5.0,M10.5.0 +Jackson, Michigan ; 42 14 43 N ; 84 24 22 W ; 286.5 ; EST5EDT +Jackson, Mississippi ; 32 17 56 N ; 90 11 6 W ; 90.8 ; CST6CDT +Jacksonville, Florida ; 30 19 44 N ; 81 39 42 W ; 6.1 ; EST5EDT +Jakarta, Indonesia ; 06 11 0 S ; 106 50 0 E ; -1.0 ; PST-7 +Jersey City, New Jersey ; 40 43 50 N ; 74 3 56 W ; 6.1 ; EST5EDT +Jerusalem, Israel ; 31 47 0 N ; 35 13 0 E ; 762.0 ; IST-2IDT,M3.5.0,M9.1.0 +Johannesburg, South Africa ; 26 10 0 S ; 28 2 0 E ; 234.7 ; SAT-2 +Johnstown, Pennsylvania ; 40 19 35 N ; 78 55 3 W ; 361.2 ; EST5EDT +Joplin, Missouri ; 37 5 26 N ; 94 30 0 W ; 301.8 ; CST6CDT +Juneau, Alaska ; 58 18 12 N ; 134 24 30 W ; 15.2 ; YST9YDT +KHBI, Saipan, MI ; 15 7 20 N ; 145 41 37 E ; -1 ; PST-9 +Kalamazoo, Michigan ; 42 17 29 N ; 85 35 14 W ; 230.1 ; EST5EDT +Kansas City, Kansas ; 39 7 4 N ; 94 38 24 W ; 228.6 ; CST6CDT +Kansas City, Missouri ; 39 7 56 N ; 94 35 20 W ; 228.6 ; CST6CDT +Karl Schwarzschild Observatorium ; 50 59 0 N ; 11 43 0 E ; 331 ; CET-1CEST,M3.5.0,M10.5.0 +Kenosha, Wisconsin ; 42 35 43 N ; 87 50 11 W ; 185.9 ; CST6CDT +Kensington NSW, Australia ; 33 52 0 S ; 151 13 0 E ; 6 ; EST-10EDT,M10.5.0,M3.5.0 +Key West, Florida ; 24 33 30 N ; 81 48 12 W ; 1.5 ; EST5EDT +Kiso Observatory ; 35 48 0 N ; 137 38 0 E ; 1130 ; JST-9 +Kitt Peak National Obs. ; 31 58 48 N ; 111 36 0 W ; 2120 ; MST7 +Knoxville, Tennessee ; 35 57 39 N ; 83 55 7 W ; 271.3 ; EST5EDT +Kuala Lumpur, Malaysia ; 03 8 0 N ; 101 42 0 E ; -1.0 ; MYT-8 +Lafayette, Indiana ; 40 25 11 N ; 86 53 39 W ; 167.6 ; EST5 +Lancaster, Pennsylvania ; 40 2 25 N ; 76 18 29 W ; 108.2 ; EST5EDT +Lansing, Michigan ; 42 44 1 N ; 84 33 15 W ; 253.0 ; EST5EDT +Laredo, Texas ; 27 30 22 N ; 99 30 30 W ; 134.1 ; CST6CDT +Large Binocular Telescope ; 32 42 05 N ; 109 53 21 W ; 3221 ; MST7 +Large Earth-based Solar Tel. (LEST) ; 28 46 0 N ; 17 53 0 W ; 2400 ; AST1ADT,M3.5.0,M10.5.0 +Las Campanas Observatory ; 29 0 12 S ; 70 42 6 W ; 2282 ; WST4WDT,M9.5.0,M3.2.0 +Las Vegas, Nevada ; 36 10 20 N ; 115 8 37 W ; 618.7 ; PST8PDT +Lawrence, Massachusetts ; 42 42 16 N ; 71 10 8 W ; 19.8 ; EST5EDT +Leander McCormick Observatory ; 38 2 0 N ; 78 31 0 W ; 264 ; EST5EDT +Learmonth Solar Observatory ; 22 14 0 S ; 114 5 0 E ; 20 ; WST-8 +Lexington, Kentucky ; 38 2 50 N ; 84 29 46 W ; 291.1 ; EST5EDT +Lick Observatory ; 37 21 0 N ; 121 38 0 W ; 1290 ; PST8PDT +Lille, France ; 50 38 0 N ; 3 4 0 E ; -1 ; CET-1CEST,M3.5.0,M10.5.0 +Lima, Ohio ; 40 44 35 N ; 84 6 20 W ; 263.7 ; EST5EDT +Lincoln, Nebraska ; 40 48 59 N ; 96 42 15 W ; 350.5 ; CST6CDT +Lisbon, Portugal ; 38 43 0 N ; 09 8 0 W ; -1.0 ; WET0WETDST,M3.5.0,M10.5.0 +Little Rock, Arkansas ; 34 44 42 N ; 92 16 37 W ; 87.2 ; CST6CDT +London, England ; 51 30 30 N ; 00 11 0 W ; -1.0 ; GMT0BST,M3.5.0,M10.5.0 +Long Beach, California ; 33 46 14 N ; 118 11 18 W ; 10.7 ; PST8PDT +Longyearbyen, Norway ; 78 12 09 N ; 15 49 44 E ; 13.0 ; MET-1MET(DST),M3.5.0,M10.5.0 +Lorain, Ohio ; 41 28 5 N ; 82 10 49 W ; 185.9 ; EST5EDT +Los Angeles, California ; 34 3 15 N ; 118 14 28 W ; 103.6 ; PST8PDT +Louisville, Kentucky ; 38 14 47 N ; 85 45 49 W ; 137.2 ; EST5EDT +Lowell, Massachusetts ; 42 38 25 N ; 71 19 14 W ; 30.5 ; EST5EDT +Lubbock, Texas ; 33 35 5 N ; 101 50 33 W ; 973.8 ; CST6CDT +Lund, Sweden ; 55 69 0 N ; 13 18 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Luxembourg, Luxembourg ; 49 37 0 N ; 06 9 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +MMT ; 31 41 0 N ; 110 53 0 W ; 2608 ; MST7 +Macon, Georgia ; 32 50 12 N ; 83 37 36 W ; 102.1 ; EST5EDT +Macquarie Island, AAT ; 54 30 0 S ; 158 57 0 E ; -1 ; NZT-12NZS,M10.1.0,M3.2.0 +Madison, Wisconsin ; 43 4 23 N ; 89 22 55 W ; 262.1 ; CST6CDT +Madrid, Spain ; 40 25 0 N ; 03 42 0 W ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Magdalena Ridge Obs, NM, USA ; 33 59 6 N ; 107 11 21 W ; 3235 ; MST7MDT +Managua, Nicaragua ; 13 16 0 N ; 87 40 0 W ; -1.0 ; CST6 +Manchester, New Hampshire ; 42 59 26 N ; 71 27 41 W ; 53.3 ; EST5EDT +Marseille, France ; 43 17 0 N ; 5 22 0 E ; -1 ; CET-1CEST,M3.5.0,M10.5.0 +Marshall, Texas ; 32 33 0 N ; 94 23 0 W ; 125.0 ; CST6CDT +Mauna Kea Observatory (NASA IRTF) ; 19 50 0 N ; 155 28 0 W ; 4208 ; HST10 +Mawson Observatory, AAT ; 67 36 0 S ; 62 53 0 E ; -1 ; AAT-6 +McDonald Observatory ; 30 40 18 N ; 104 1 18 W ; 2075 ; CST6CDT +Melbourne Vic, Australia ; 37 48 0 S ; 144 58 0 E ; 9 ; EST-10EDT,M10.5.0,M3.5.0 +Memphis, Tennessee ; 35 8 46 N ; 90 3 13 W ; 83.8 ; CST6CDT +Menville, France ; 43 40 41 N ; 1 11 40 E ; 135.0 ; CET-1CEST,M3.5.0,M10.5.0 +Merida, Venezuela ; 08 35 56 N ; 71 09 12 W ; 1603. ; VET4 +Meriden, Connecticut ; 41 32 6 N ; 72 47 30 W ; 57.9 ; EST5EDT +Metepec, Puebla, Mexico ; 18 55 93 N ; 98 28 01 W ; 1956 ; CST6CDT +Miami, Florida ; 25 46 37 N ; 80 11 32 W ; 3.0 ; EST5EDT +Michigan-Dartmouth-MIT Obs. ; 31 57 0 N ; 111 37 0 W ; 1938 ; MST7 +Milano, Italy ; 45 26 35 N ; 09 11 9 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Milwaukee, Wisconsin ; 43 2 19 N ; 87 54 15 W ; 193.5 ; CST6CDT +Minneapolis, Minnesota ; 44 58 57 N ; 93 15 43 W ; 248.4 ; CST6CDT +Minot, North Dakota ; 48 14 9 N ; 101 17 38 W ; 472.4 ; CST6CDT +Mobile, Alabama ; 30 41 36 N ; 88 2 33 W ; 1.5 ; CST6CDT +Moline, Illinois ; 41 30 31 N ; 90 30 49 W ; 178.3 ; CST6CDT +Monte Alban, Oaxaca, Mexico ; 17 02 67 N ; 96 46 13 W ; 1700 ; CST6CDT +Monterey, California ; 36 37 46 N ; 121 50 50 W ; 5.0 ; PST8PDT +Montgomery, Alabama ; 32 22 33 N ; 86 18 31 W ; 48.8 ; CST6CDT +Montpelier, Vermont ; 44 15 36 N ; 72 34 41 W ; 147.8 ; EST5EDT +Montreal Quebec, Canada ; 45 30 24 N ; 73 34 2 W ; -1.0 ; EST5EDT +Moratuwa, Sri Lanka ; 06 45 0 N ; 79 55 0 E ; -1.0 ; IST-5:30 +Moscow, Russia ; 55 45 0 N ; 37 42 0 E ; 120.1 ; MSK-3MSD,M3.5.0,M10.5.0 +Mount Wilson Observatory ; 34 13 0 N ; 118 3 0 W ; 1742 ; PST8PDT +Mt. Stromlo Observatory ; 35 19 15 S ; 149 1 28 E ; 767 ; EST-10EDT,M10.5.0,M3.5.0 +Mudgee NSW, Australia ; 32 36 0 S ; 150 52 12 E ; 582 ; EST-10EDT,M10.5.0,M3.5.0 +Muncie, Indiana ; 40 11 28 N ; 85 23 16 W ; 289.6 ; CST6 +Munich, Germany ; 48 8 0 N ; 11 34 0 E ; 519 ; CET-1CEST,M3.5.0,M10.5.0 +Nancay Radiotelescope, France ; 47 22 48 N ; 02 11 48 E ; 150 ; CET-1CEST,M3.5.0,M10.5.0 +Naples, Italy ; 40 51 46 N ; 14 15 18 E ; 150 ; CET-1CEST,M3.5.0,M10.5.0 +Nashville, Tennessee ; 36 9 33 N ; 86 46 55 W ; 137.2 ; CST6CDT +Natchez, Mississippi ; 31 33 48 N ; 91 23 30 W ; 64.0 ; CST6CDT +National Astronomy Obs. (Japan) ; 19 49 0 N ; 155 28 0 W ; 4215 ; HST10 +New Bedford, Massachusetts ; 41 38 13 N ; 70 55 41 W ; 4.6 ; EST5EDT +New Britain, Connecticut ; 41 40 8 N ; 72 46 59 W ; 61.0 ; EST5EDT +New Delhi, India ; 28 38 0 N ; 77 12 0 E ; 234.7 ; IST-5:30 +New Haven, Connecticut ; 41 18 25 N ; 72 55 30 W ; 12.2 ; EST5EDT +New Orleans, Louisiana ; 29 56 53 N ; 90 4 10 W ; 1.5 ; CST6CDT +New York, New York ; 40 45 6 N ; 73 59 39 W ; 16.8 ; EST5EDT +Newark, New Jersey ; 40 44 14 N ; 74 10 19 W ; 16.8 ; EST5EDT +Newcastle NSW, Australia ; 32 52 0 S ; 151 49 0 E ; 1 ; EST-10EDT,M10.5.0,M3.5.0 +Niagara Falls, New York ; 43 5 34 N ; 79 3 26 W ; 173.7 ; EST5EDT +Nordic Optical Telescope ; 28 45 0 N ; 17 53 0 W ; 2382 ; AST1ADT,M3.5.0,M10.5.0 +Norfolk, Virginia ; 36 51 10 N ; 76 17 21 W ; 3.0 ; EST5EDT +North Liberty Radio Observatory ; 41 46 17 N ; 91 34 26 W ; 240.0 ; CST6CDT +OAB, Brera (MI), Italy ; 45 27 59 N ; 9 11 30 E ; 147 ; CET-1CEST,M3.5.0,M10.5.0 +OAB, Merate (LC), Italy ; 45 41 54 N ; 9 25 45 E ; 334 ; CET-1CEST,M3.5.0,M10.5.0 +Oakland, California ; 37 48 3 N ; 122 15 54 W ; 7.6 ; PST8PDT +Oaxaca, Oaxaca, Mexico ; 17 03 45 N ; 96 43 85 W ; 1625 ; CST6CDT +Obs. Astro. Nacional, San Pedro Martir ; 31 1 45 N ; 115 29 12 W ; 2830 ; PST8PDT +Obs. Astro. Nacional, Tonantzintla ; 19 1 58 N ; 98 18 50 W ; -1 ; CST6CDT +Observatoire Royal de Belgique ; 50 48 0 N ; 4 21 0 E ; 105 ; CET-1CEST,M3.5.0,M10.5.0 +Observatoire de Besancon ; 47 14 50 N ; 5 59 23 E ; 360 ; CET-1CEST,M3.5.0,M10.5.0 +Observatoire de Calern ; 43 45 18 N ; 6 56 18 E ; 1270 ; CET-1CEST,M3.5.0,M10.5.0 +Observatoire de Nice ; 43 43 0 N ; 7 18 0 E ; 372 ; CET-1CEST,M3.5.0,M10.5.0 +Observatoire de Paris ; 48 48 0 N ; 2 14 0 E ; 162 ; CET-1CEST,M3.5.0,M10.5.0 +Ogden, Utah ; 41 13 31 N ; 111 58 21 W ;1309.1 ; MST7MDT +Oklahoma City, Oklahoma ; 35 28 26 N ; 97 31 4 W ; 364.2 ; CST6CDT +Old Royal Observatory ; 51 29 0 N ; 0 0 0 W ; 47 ; GMT0BST,M3.5.0,M10.5.0 +Omaha, Nebraska ; 41 15 42 N ; 95 56 14 W ; 317.0 ; CST6CDT +Orlando, Florida ; 28 32 42 N ; 81 22 38 W ; 21.3 ; EST5EDT +Oschin 48-inch Telescope ; 33 21 0 N ; 116 51 0 W ; 1706 ; PST8PDT +Oslo, Norway ; 59 55 0 N ; 10 45 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Ottawa, Ontario, Canada ; 45 24 0 N ; 75 39 0 W ; -1.0 ; EST5EDT +Paducah, Kentucky ; 37 5 13 N ; 88 25 56 W ; 105.2 ; CST6CDT +Palomar Observatory (200 inch) ; 33 21 0 N ; 116 52 0 W ; 1706 ; PST8PDT +Paris, France ; 48 50 14 N ; 02 20 14 E ; 91.4 ; CET-1CEST,M3.5.0,M10.5.0 +Parkes Radiotelescope, Australia ; 33 0 0 S ; 148 15 42 E ; 392 ; EST-10EDT,M10.5.0,M3.5.0 +Pasadena, California ; 34 8 44 N ; 118 8 41 W ; 253.0 ; PST8PDT +Paterson, New Jersey ; 40 55 1 N ; 74 10 21 W ; 30.5 ; EST5EDT +Pensacola, Florida ; 30 24 51 N ; 87 12 56 W ; 4.6 ; CST6CDT +Peoria, Illinois ; 40 41 42 N ; 89 35 33 W ; 143.3 ; CST6CDT +Perth, WA, Australia ; 31 56 29 S ; 115 57 55 E ; 67 ; WST-8 +Philadelphia, Pennsylvania ; 39 56 58 N ; 75 9 21 W ; 30.5 ; EST5EDT +Phoenix, Arizona ; 33 27 12 N ; 112 4 28 W ; 332.2 ; MST7 +Pierre, South Dakota ; 44 22 18 N ; 100 20 54 W ; 451.1 ; CST6CDT +Pittsburgh, Pennsylvania ; 40 29 19 N ; 80 0 0 W ; 227.1 ; EST5EDT +Pittsfield, Massachusetts ; 42 26 53 N ; 73 15 14 W ; 309.4 ; EST5EDT +Pocatello, Idaho ; 42 51 38 N ; 112 27 1 W ;1359.4 ; MST7MDT +Port Arthur, Texas ; 29 52 30 N ; 93 56 15 W ; 3.0 ; CST6CDT +Portland, Maine ; 43 39 33 N ; 70 15 19 W ; 7.6 ; EST5EDT +Portland, Oregon ; 45 31 6 N ; 122 40 35 W ; 23.5 ; PST8PDT +Portsmouth, New Hampshire ; 43 4 30 N ; 70 45 24 W ; 6.1 ; EST5EDT +Portsmouth, Virginia ; 36 50 7 N ; 76 18 14 W ; 3.0 ; EST5EDT +Prague, Czech Republic ; 50 5 0 N ; 14 24 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Pretoria, South Africa ; 26 10 0 S ; 28 2 0 E ; -1.0 ; SAT-2 +Providence, Rhode Island ; 41 49 32 N ; 71 24 41 W ; 24.4 ; EST5EDT +Provo, Utah ; 40 14 6 N ; 111 39 24 W ;1386.8 ; MST7MDT +Prude Ranch, Fort Davis, TX ; 30 36 38 N ; 103 57 07 W ;1539.2 ; CST6CDT +Puebla, Puebla, Mexico ; 19 02 43 N ; 98 11 83 W ; 2195 ; CST6CDT +Pueblo, Colorado ; 38 16 17 N ; 104 36 33 W ;1429.5 ; MST7MDT +Racine, Wisconsin ; 42 43 49 N ; 87 47 12 W ; 192.0 ; CST6CDT +Radioastrophysical Observatory ; 56 47 0 N ; 24 24 0 E ; 75 ; CET-1CEST,M3.5.0,M10.5.0 +Rainwater Observatory, French Camp, MS ; 33 17 15 N ; 89 23 05 W ; 120.0 ; CST6CDT +Raleigh, North Carolina ; 35 46 38 N ; 78 38 21 W ; 111.3 ; EST5EDT +Rankin Inlet Nunavut, Canada ; 62 49 12 N ; 92 06 36 W ; 19.0 ; CST6CDT +Rapid City, South Dakota ; 44 4 52 N ; 103 13 11 W ; 984.5 ; MST7MDT +Reading, Pennsylvania ; 40 20 9 N ; 75 55 40 W ; 80.8 ; EST5EDT +Real Observario de la Armada, Spain ; 36 27 52 N ; 6 12 18 W ; 30.0 ; CET-1CEST,M3.5.0,M10.5.0 +Reno, Nevada ; 39 31 27 N ; 119 48 40 W ;1368.6 ; PST8PDT +Reykjavik, Iceland ; 64 7 47 N ; 21 56 13 W ; -1.0 ; GMT0 +Richmond, Virginia ; 37 32 15 N ; 77 26 9 W ; 48.8 ; EST5EDT +Rio de Janeiro, Brazil ; 22 53 43 S ; 43 13 22 W ; 9.1 ; EBT3EDT,M10.2.0,M2.1.0 +Roanoke, Virginia ; 37 16 13 N ; 79 56 44 W ; 275.8 ; EST5EDT +Rochester, Minnesota ; 44 1 21 N ; 92 28 3 W ; 301.8 ; CST6CDT +Rochester, New York ; 43 9 41 N ; 77 36 21 W ; 157.0 ; EST5EDT +Rockford, Illinois ; 42 16 7 N ; 89 5 48 W ; 217.9 ; CST6CDT +Rome, Italy ; 41 53 0 N ; 12 30 0 E ; 29.0 ; CET-1CEST,M3.5.0,M10.5.0 +Roque de los Muchachos, La Palma ; 28 45 30 N ; 17 52 48 W ; 2327 ; AST1ADT,M3.5.0,M10.5.0 +Royal Greenwich Observatory ; 50 52 0 N ; 20 0 E ; 34 ; GMT0BST,M3.5.0,M10.5.0 +Sacramento, California ; 38 34 57 N ; 121 29 41 W ; 9.1 ; PST8PDT +Saginaw, Michigan ; 43 25 52 N ; 83 56 5 W ; 181.4 ; EST5EDT +Saint Cloud, Minnesota ; 45 34 0 N ; 94 10 24 W ; 317.0 ; CST6CDT +Saint Joseph, Missouri ; 39 45 57 N ; 94 51 2 W ; 259.1 ; CST6CDT +Saint Louis, Missouri ; 38 37 45 N ; 90 12 22 W ; 138.7 ; CST6CDT +Saint Lucia Qld, Australia ; 27 30 2 S ; 153 0 41 E ; 24 ; EST-10 +Saint Paul, Minnesota ; 44 57 19 N ; 93 6 7 W ; 237.7 ; CST6CDT +Saint Petersburg, Florida ; 27 46 18 N ; 82 38 19 W ; 6.1 ; EST5EDT +Salem, Oregon ; 44 56 24 N ; 123 1 59 W ; 47.2 ; PST8PDT +Salina, Kansas ; 38 50 36 N ; 97 36 46 W ; 374.6 ; CST6CDT +Salt Lake City, Utah ; 40 45 23 N ; 111 53 26 W ;1338.1 ; MST7MDT +Salzburg, Austria ; 47 47 44 N ; 13 03 16 E ; 424.0 ; CET-1CEST,M3.5.0,M10.5.0 +San Angelo, Texas ; 31 27 39 N ; 100 26 3 W ; 562.4 ; CST6CDT +San Antonio, Texas ; 29 25 37 N ; 98 29 6 W ; 198.1 ; CST6CDT +San Bernardino, California ; 34 6 30 N ; 117 17 28 W ; 329.2 ; PST8PDT +San Diego, California ; 32 42 53 N ; 117 9 21 W ; 6.1 ; PST8PDT +San Francisco, California ; 37 46 39 N ; 122 24 40 W ; 19.8 ; PST8PDT +San Jose, California ; 37 20 16 N ; 121 53 24 W ; 27.4 ; PST8PDT +San Juan, Puerto Rico ; 18 28 0 N ; 66 7 0 W ; -1.0 ; AST4 +Santa Barbara, California ; 34 25 18 N ; 119 41 55 W ; 30.5 ; PST8PDT +Santa Cruz, California ; 36 58 18 N ; 122 1 18 W ; 6.1 ; PST8PDT +Santa Fe, New Mexico ; 35 41 11 N ; 105 56 10 W ;2118.4 ; MST7MDT +Santiago, Chile ; 33 27 0 S ; 70 33 0 W ; -1.0 ; WST4WDT,M9.5.0,M3.2.0 +Santo Domingo, Dominican Republic ; 18 30 0 N ; 69 57 0 W ; -1.0 ; DRT4 +Sapporo, Japan ; 43 4 0 N ; 141 20 0 E ; -1.0 ; JST-9 +Sarasota, Florida ; 27 20 5 N ; 82 32 30 W ; 6.1 ; EST5EDT +Savannah, Georgia ; 32 4 42 N ; 81 5 37 W ; 6.1 ; EST5EDT +Schenectady, New York ; 42 48 42 N ; 73 55 42 W ; 74.7 ; EST5EDT +Scranton, Pennsylvania ; 41 24 32 N ; 75 39 46 W ; 221.0 ; EST5EDT +Seattle, Washington ; 47 36 32 N ; 122 20 12 W ; 3.0 ; PST8PDT +Sheboygan, Wisconsin ; 43 45 3 N ; 87 42 52 W ; 192.0 ; CST6CDT +Sheridan, Wyoming ; 44 47 55 N ; 106 57 10 W ;1140.0 ; MST7MDT +Shreveport, Louisiana ; 32 30 46 N ; 93 44 58 W ; 62.2 ; CST6CDT +Siding Spring Observatory ; 31 16 24 S ; 149 3 41 E ; 1149 ; EST-10EDT,M10.5.0,M3.5.0 +Singapore, Singapore ; 01 25 0 N ; 103 50 0 E ; -1.0 ; SST-8 +Sioux City, Iowa ; 42 29 46 N ; 96 24 30 W ; 338.3 ; CST6CDT +Sioux Falls, South Dakota ; 43 32 35 N ; 96 43 35 W ; 425.2 ; CST6CDT +Socorro, NM ; 34 3 11 N ; 106 53 28 W ; 1420 ; MST7MDT +Sofia, Bulgaria ; 42 40 0 N ; 23 18 0 E ; -1.0 ; EET-3EDT,M3.5.0,M10.5.0 +Somerville, Massachusetts ; 42 23 15 N ; 71 6 7 W ; 4.0 ; EST5EDT +South Bend, Indiana ; 41 40 33 N ; 86 15 1 W ; 216.4 ; EST5 +Space Telescope Science Inst. ; 39 18 0 N ; 76 37 0 W ; 6.1 ; EST5EDT +Spartanburg, South Carolina ; 34 57 3 N ; 81 56 6 W ; 266.7 ; EST5EDT +Special Astrophysical Obs. ; 43 39 0 N ; 41 26 0 E ; 2100 ; MSK-3MSD,M3.5.0,M10.5.0 +Spokane, Washington ; 47 39 32 N ; 117 25 33 W ; 576.1 ; PST8PDT +Springfield, Illinois ; 39 47 58 N ; 89 38 51 W ; 185.9 ; CST6CDT +Springfield, Massachusetts ; 42 6 21 N ; 72 35 32 W ; 25.9 ; EST5EDT +Springfield, Missouri ; 37 13 3 N ; 93 17 32 W ; 396.2 ; CST6CDT +Springfield, Ohio ; 39 55 38 N ; 83 48 29 W ; 298.7 ; EST5EDT +St. Petersburg, Russia ; 59 55 0 N ; 30 15 0 E ; -1.0 ; MSK-3MSD,M3.5.0,M10.5.0 +Stamford, Connecticut ; 41 3 9 N ; 73 32 24 W ; 10.7 ; EST5EDT +Steubenville, Ohio ; 40 21 42 N ; 80 36 53 W ; 201.2 ; EST5EDT +Stockholm, Sweden ; 59 35 0 N ; 18 6 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Stockton, California ; 37 57 30 N ; 121 17 16 W ; 6.1 ; PST8PDT +Strasbourg, France ; 48 35 0 N ; 7 45 0 E ; -1 ; CET-1CEST,M3.5.0,M10.5.0 +Stuttgart, Germany ; 48 47 0 N ; 9 11 0 E ; 245.0 ; CET-1CEST,M3.5.0,M10.5.0 +Superior, Wisconsin ; 46 43 14 N ; 92 6 7 W ; 192.0 ; CST6CDT +Surfers Paradise Qld, Australia ; 28 00 2 S ; 153 26 0 E ; 0 ; EST-10 +Sydney NSW, Australia ; 33 52 0 S ; 151 12 0 E ; 60 ; EST-10EDT,M10.5.0,M3.5.0 +Syracuse, New York ; 43 3 4 N ; 76 9 14 W ; 121.9 ; EST5EDT +Tacoma, Washington ; 47 14 59 N ; 122 26 15 W ; 33.5 ; PST8PDT +Taipei, Taiwan ; 25 2 0 N ; 121 31 0 E ; -1.0 ; TST-8 +Tallahassee, Florida ; 30 26 30 N ; 84 16 56 W ; 45.7 ; EST5EDT +Tallinn, Estonia ; 59 27 0 N ; 24 45 0 E ; -1.0 ; EET-2EETDST,M3.5.0,M10.5.0 +Tampa, Florida ; 27 56 58 N ; 82 27 25 W ; 4.6 ; EST5EDT +Telescopio Nazionale Galileo ; 28 46 0 N ; 17 53 0 W ; 2400 ; AST1ADT,M3.5.0,M10.5.0 +Terre Haute, Indiana ; 39 28 3 N ; 87 24 26 W ; 151.2 ; EST5 +Texarkana, Texas ; 33 25 48 N ; 94 2 30 W ; 98.8 ; CST6CDT +Tokyo, Japan ; 35 45 0 N ; 139 45 0 E ; 9.1 ; JST-9 +Toledo, Ohio ; 41 39 14 N ; 83 32 39 W ; 208.5 ; EST5EDT +Topeka, Kansas ; 39 3 16 N ; 95 40 23 W ; 283.5 ; CST6CDT +Toronto Ontario, Canada ; 43 39 10 N ; 79 23 0 W ; 91.4 ; EST5EDT +Torun Radiotelescope, Poland ; 52 54 38 N ; 18 33 50 E ; 127.7 ; CET-2/CEST-2,M3.5.0,M10.5.0 +Torus Observatory ; 47 10 58 N ; 122 7 57 W ; 250 ; PST8PDT +Trenton, New Jersey ; 40 13 14 N ; 74 46 13 W ; 10.7 ; EST5EDT +Tromso, Norway ; 69 41 0 N ; 18 95 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +Troy, New York ; 42 43 45 N ; 73 40 58 W ; 10.7 ; EST5EDT +Tucson, Arizona ; 32 13 15 N ; 110 58 8 W ; 728.5 ; MST7 +Tulsa, Oklahoma ; 36 9 12 N ; 95 59 34 W ; 245.1 ; CST6CDT +U. S. Naval Observatory ; 38 55 0 N ; 77 4 0 W ; 92 ; MST7 +United Kingdom Infrared Tel. (UKIRT) ; 19 50 0 N ; 155 28 0 W ; 4194 ; HST10 +United Kingdom Schmidt Tel. Unit ; 31 16 0 S ; 149 4 0 E ; 1145 ; EST-10EDT,M10.5.0,M3.5.0 +Univ. of BC and Laval Univ. ; 49 7 0 N ; 122 35 0 W ; 50 ; PST8PDT +Uppsala University Observatory ; 59 30 0 N ; 17 36 0 E ; 33 ; CET-1CEST,M3.5.0,M10.5.0 +Urbana, Illinois ; 40 6 42 N ; 88 12 6 W ; 221.0 ; CST6CDT +Utica, New York ; 43 6 12 N ; 75 13 33 W ; 126.5 ; EST5EDT +Vatican Advanced Technology Telescope ; 32 42 5 N ; 109 53 33 W ; 3178 ; MST7 +VLA, New Mexico ; 34 04 44 N ; 107 37 04 W ; 2124.0; MST7MDT +VLBA, Brewster, WA ; 48 07 52 N ; 119 40 55 W ; 255 ; PST8PDT +VLBA, Fort Davis, TX ; 30 38 05 N ; 103 56 39 W ; 1615 ; CST6CDT +VLBA, Hancock, NH ; 42 56 00 N ; 71 59 11 W ; 309 ; EST5EDT +VLBA, Kitt Peak, AZ ; 31 57 22 N ; 111 36 42 W ; 1916 ; MST7 +VLBA, Los Alamos, NM ; 35 46 30 N ; 106 14 42 W ; 1967 ; MST7MDT +VLBA, Mauna Kea, HI ; 19 48 15 N ; 155 27 28 W ; 3720 ; HST10 +VLBA, N. Liberty, IA ; 41 46 17 N ; 91 34 26 W ; 241 ; CST6CDT +VLBA, Owens Vly., CA ; 37 13 54 N ; 118 16 33 W ; 1207 ; PST8PDT +VLBA, Pie Town, NM ; 34 18 03 N ; 108 07 07 W ; 2371 ; MST7MDT +VLBA, St. Croix, VI ; 17 45 30 N ; 64 35 02 W ; 16 ; AST4 +Vainu Bappu Observatory ; 12 35 0 N ; 78 50 0 E ; 725 ; IST-5:30 +Vancouver British Columbia, Canada ; 49 16 32 N ; 123 8 31 W ; -1.0; PST8PDT +Varna, Bulgaria ; 43 12 0 N ; 27 57 0 E ; -1.0 ; CET-2CDT,M3.5.0,M10.5.0 +Venezuela 1-meter Schmidt ; 8 47 0 N ; 70 52 0 W ; 3610 ; AST4 +Victoria British Columbia, Canada ; 48 30 0 N ; 123 25 0 W ; -1.0 ; PST8PDT +Vienna, Austria ; 48 12 0 N ; 16 22 0 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 +W. M. Keck Observatory ; 19 49 0 N ; 155 28 0 W ; 4150 ; HST10 +WIYN Observatory ; 31 57 0 N ; 111 36 0 W ; 2089 ; MST7 +WSHB, Cyprus Creek, South Carolina ; 32 41 2 N ; 81 7 51 W ; -1 ; EST5EDT +Waco, Texas ; 31 33 12 N ; 97 8 0 W ; 123.4 ; CST6CDT +Walla Walla, Washington ; 46 4 8 N ; 118 20 24 W ; 285.3 ; PST8PDT +Warsaw, Poland ; 52 15 0 N ; 21 0 0 E ; 109.7 ; CET-2/CEST-2,M3.5.0,M10.5.0 +Washington, DC ; 38 53 51 N ; 77 0 33 W ; 7.6 ; EST5EDT +Waterbury, Connecticut ; 41 33 13 N ; 73 2 31 W ; 79.2 ; EST5EDT +Waterloo, Iowa ; 42 29 40 N ; 92 20 20 W ; 259.1 ; CST6CDT +Wellington, New Zealand ; 41 17 25 S ; 174 46 7 E ; -1.0 ; NZT-12NZD,M10.1.0,M3.2.0 +West Palm Beach, Florida ; 26 42 36 N ; 80 3 7 W ; 4.6 ; EST5EDT +Wheeling, West Virginia ; 40 4 3 N ; 80 43 20 W ; 198.1 ; EST5EDT +White Plains, New York ; 41 2 0 N ; 73 45 48 W ; 67.1 ; EST5EDT +Wichita Falls, Texas ; 33 54 34 N ; 98 29 28 W ; 288.0 ; CST6CDT +Wichita, Kansas ; 37 41 30 N ; 97 20 16 W ; 393.2 ; CST6CDT +Wilkes-Barre, Pennsylvania ; 41 14 32 N ; 75 53 17 W ; 195.1 ; EST5EDT +William Herschel Telescope ; 28 46 0 N ; 17 53 0 W ; 2332 ; AST1ADT,M3.5.0,M10.5.0 +Wilmington, Delaware ; 39 44 46 N ; 75 32 51 W ; 41.1 ; EST5EDT +Wilmington, North Carolina ; 34 14 14 N ; 77 56 58 W ; 10.7 ; EST5EDT +Winer Mobile Observatory ; 31 39 56 N ; 110 36 06 W ; 1479 ; MST7 +Winnipeg Manitoba, Canada ; 49 50 0 N ; 97 7 0 W ; -1.0 ; CST6CDT +Winston-Salem, North Carolina ; 36 5 52 N ; 80 14 42 W ; 262.1 ; EST5EDT +Wodonga Vic, Australia ; 36 10 0 S ; 146 50 0 E ; 153 ; EST-10EDT,M10.5.0,M3.5.0 +Wollongong NSW, Australia ; 34 24 0 S ; 150 54 0 E ; 20 ; EST-10EDT,M10.5.0,M3.5.0 +Worcester, Massachusetts ; 42 15 37 N ; 71 48 17 W ; 144.8 ; EST5EDT +Wyoming Infrared Observatory ; 41 5 54 N ; 105 58 36 W ; 2943 ; MST7MDT +Yakima, Washington ; 46 36 9 N ; 120 30 39 W ; 323.1 ; PST8PDT +Yerkes Observatory ; 42 34 0 N ; 88 33 0 W ; 334 ; CST6CDT +Yonkers, New York ; 40 55 55 N ; 73 53 54 W ; 3.0 ; EST5EDT +York, Pennsylvania ; 39 57 35 N ; 76 43 36 W ; 112.8 ; EST5EDT +Youngstown, Ohio ; 41 5 57 N ; 80 39 2 W ; 256.0 ; EST5EDT +Yuma, Arizona ; 32 42 54 N ; 114 37 24 W ; 48.8 ; MST7 +Zagreb, Croatia ; 45 48 43 N ; 15 58 52 E ; 135 ; CET-1CEST,M3.5.0,M10.5.0 +Zanesville, Ohio ; 39 56 18 N ; 82 0 30 W ; 219.5 ; EST5EDT +Zentralinstitut fur Astrophysik ; 52 23 0 N ; 13 4 0 E ; 107 ; CET-1CEST,M3.5.0,M10.5.0 +Zurich, Switzerland ; 47 22 40 N ; 08 33 4 E ; -1.0 ; CET-1CEST,M3.5.0,M10.5.0 + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: xephem_sites,v $ $Date: 2013/01/14 04:25:47 $ $Revision: 1.46 $ $Name: $ + diff --git a/GUI/xephem/auxil/xephem_skyhist b/GUI/xephem/auxil/xephem_skyhist new file mode 100644 index 0000000..a4ac73d --- /dev/null +++ b/GUI/xephem/auxil/xephem_skyhist @@ -0,0 +1,67 @@ +# skyview history file +Version 5 +:0 +Sky above - annotated +3.14159 3.14159 1.5708 6 6 6 1 0 1 0 1 + 15:00:00 + 1:00:00 +600 600 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 32 64 32 32 48 10 20 19 0 1 +00111111 +00000000000000000000000000000000000000000000000000000000000000000101101110111111111111100100000000000000000000000000000000000000 +:1 +Sky above - clean +3.14159 3.14159 1.5708 6 6 6 1 0 1 0 1 + 15:00:00 + 1:00:00 +600 600 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 48 10 20 19 0 1 +00111111 +00000000000000000000000000000000000000000000000000000000000000000101101110111111111111100100000000000000000000000000000000000000 +:2 +360 equator +3.14159 0 0 7 7 7 2 0 1 0 1 + 30:00:00 + 2:00:00 +818 409 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 32 64 32 32 7 3 6 7 0 1 +00111111 +10000000000000000000000000000000000000000000000000000000000000000111101110111111111111100100000000000000000000000000000000000000 +:3 +North horizon +1.22173 0 0.610865 6 6 7 1 0 1 1 1 + 10:00:00 + 20:00:00 +826 413 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 32 64 32 32 26 3 11 10 0 1 +00111111 +10000000000000000000000000000000000000000000000000000000000000000111101110111111111111100000000000000000000000000000000000000000 +:4 +East horizon +1.22173 1.5708 0.610865 6 6 7 1 0 1 1 1 + 10:00:00 + 20:00:00 +826 413 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 32 64 32 32 26 3 11 10 0 1 +00111111 +10000000000000000000000000000000000000000000000000000000000000000111101110111111111111100000000000000000000000000000000000000000 +:5 +South horizon +1.22173 3.14159 0.610865 6 6 7 1 0 1 1 1 + 10:00:00 + 20:00:00 +826 413 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 32 64 32 32 26 3 11 10 0 1 +00111111 +10000000000000000000000000000000000000000000000000000000000000000111101110111111111111100000000000000000000000000000000000000000 +:6 +West horizon +1.22173 4.71239 0.610865 6 6 7 1 0 1 1 1 + 10:00:00 + 20:00:00 +826 413 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 32 64 32 32 26 3 11 10 0 1 +00111111 +10000000000000000000000000000000000000000000000000000000000000000111101110111111111111100000000000000000000000000000000000000000 +:7 +360 Horizon +1.5708 0 0.929388 7 7 7 2 0 1 0 1 + 30:00:00 + 2:00:00 +1060 265 1 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 32 64 32 32 7 3 6 7 0 1 +00111111 +10000000000000000000000000000000000000000000000000000000000000000111101110111111111111100100000000000000000000000000000000000000 +# end diff --git a/GUI/xephem/broadcast.c b/GUI/xephem/broadcast.c new file mode 100644 index 0000000..8d70932 --- /dev/null +++ b/GUI/xephem/broadcast.c @@ -0,0 +1,220 @@ +/* functions which connect to many other functions */ + +#include +#include +#include +#include + +#include +#include +#include + +#include "xephem.h" + + +/* called to set or unset the watch cursor on all menus. + * allow for nested requests. + */ +void +watch_cursor(want) +int want; +{ + static Cursor wc; + static int nreqs; + Cursor c; + + if (!wc) + wc = XCreateFontCursor (XtD, XC_watch); + + if (want) { + if (nreqs++ > 0) + return; + c = wc; + } else { + if (--nreqs > 0) + return; + c = (Cursor)0; + } + + XPS_cursor(c); + av_cursor(c); + ano_cursor(c); + c_cursor(c); + cc_cursor(c); + db_cursor(c); + dm_cursor(c); + e_cursor(c); + fav_cursor(c); + fs_cursor(c); + gal_cursor(c); + sun_cursor(c); + hzn_cursor(c); + jm_cursor(c); + lst_cursor(c); + m_cursor(c); + main_cursor(c); + mars_cursor(c); + marsm_cursor(c); + ml_cursor(c); + msg_cursor(c); + ng_cursor(c); + obj_cursor(c); + ol_cursor(c); + plt_cursor(c); + pm_cursor(c); + sc_cursor(c); + se_cursor(c); + sf_cursor(c); + si_cursor(c); + sl_cursor(c); + sm_cursor(c); + sr_cursor(c); + srch_cursor(c); + ss_cursor(c); + sv_cursor(c); + svf_cursor(c); + svh_cursor(c); + um_cursor(c); + v_cursor(c); + wdb_cursor(c); + + XFlush (XtD); + XmUpdateDisplay (toplevel_w); +} + +/* update stuff on all major views because time has changed */ +void +all_update(np, how_much) +Now *np; +int how_much; +{ + watch_cursor (1); + + dm_update (np, how_much); + mars_update (np, how_much); + marsm_update (np, how_much); + ng_update (np, how_much); + e_update (np, how_much); + jm_update (np, how_much); + sm_update (np, how_much); + um_update (np, how_much); + ss_update (np, how_much); + sun_update (np, how_much); + sv_update (np, how_much); + m_update (np, how_much); + c_update (np, how_much); + cc_update (np, how_much); + + watch_cursor (0); +} + +/* tell everyone who might care that the favorites list has changed. + */ +void +all_newfavs() +{ + /* special prep */ + dm_newfavs(); + e_newfavs(); + ng_newfavs(); + + /* otherwise just like changing the db */ + all_newdb (0); +} + +/* tell everyone who might care that the db beyond the builtin objs has changed. + * appended is true if it grew; else it was deleted. + */ +void +all_newdb(appended) +int appended; +{ + watch_cursor (1); + + /* fav must be first because some other modules may recheck favs + * list as they respond to db changes + */ + fav_newdb(); + + obj_newdb(appended); + sm_newdb(appended); + jm_newdb(appended); + ss_newdb(appended); + um_newdb(appended); + marsm_newdb(appended); + sv_newdb(appended); + db_newdb (appended); + m_newdb (appended); + e_newdb (appended); + + watch_cursor (0); +} + +/* inform all menus that have something selectable for plotting/listing/srching + * wether we are now in a mode that they should report when those fields are + * selected. + */ +void +all_selection_mode(whether) +int whether; +{ + dm_selection_mode(whether); + mm_selection_mode(whether); + jm_selection_mode(whether); + mars_selection_mode(whether); + e_selection_mode(whether); + sm_selection_mode(whether); + um_selection_mode(whether); + marsm_selection_mode(whether); + srch_selection_mode(whether); + m_selection_mode(whether); +} + +/* inform all potentially interested parties of the name of a field that + * it might want to use for latter. + * this is just to collect in one place all the modules that gather care. + */ +void +register_selection (name) +char *name; +{ + plt_selection (name); + lst_selection (name); + srch_selection (name); +} + +/* if we are plotting/listing/searching, send the current field info to them. + * N.B. only send `value' to plot and search if logv is not 0. + */ +void +field_log (w, value, logv, str) +Widget w; +double value; +int logv; +char *str; +{ + char *name; + + if (!any_ison()) + return; + + get_something (w, XmNuserData, (XtArgVal)&name); + if (name) { + if (logv) { + plt_log (name, value); + srch_log (name, value); + } + lst_log (name, str); + } +} + +/* return !0 if any of the button/data capture tools are active, else 0. + */ +int +any_ison() +{ + return (srch_ison() || plot_ison() || listing_ison()); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: broadcast.c,v $ $Date: 2007/07/09 18:22:45 $ $Revision: 1.31 $ $Name: $"}; diff --git a/GUI/xephem/calmenu.c b/GUI/xephem/calmenu.c new file mode 100644 index 0000000..d802b6f --- /dev/null +++ b/GUI/xephem/calmenu.c @@ -0,0 +1,548 @@ +/* stuff to control the calendar in the main menu. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static void today_cb (Widget w, XtPointer client, XtPointer call); +static void date_changed_cb (Widget w, XtPointer client, XtPointer call); +static void mm_nfmoon (double jd, double tzone, int m, int f, int nd); + +#define CAL_ROWS 6 /* rows in the date matrix */ +#define CAL_COLS 7 /* columns in the date matrix */ +#define NYEARS 12 /* num entries in the year pulldown */ +#define NMONTHS 12 /* num entries in the month pulldown */ +static Widget m_w, mmenu_w[NMONTHS]; /* month cascade btn and pulldwn menu */ +static Widget y_w, ymenu_w[NYEARS]; /* year cascade btn and pulldwn menu */ +static Widget d_w[CAL_ROWS*CAL_COLS]; /* pushbtns in the date matrix */ +static Widget tz_w; /* timezone + title label */ + +/* must all be fixed-width since XmMENU_BAR RowColumns don't allow for resizing. + */ +static char mnames[][10] = { + "January ", "February ", "March ", "April ", "May ", "June ", + "July ", "August ", "September", "October ", "November ", "December " +}; + +typedef struct { + char name[3]; + Widget w; +} DOW; +static DOW dnames[CAL_COLS] = { + {"Su"}, {"Mo"}, {"Tu"}, {"We"}, {"Th"}, {"Fr"}, {"Sa"} +}; + +enum {DAY, MONTH, YEAR}; + +typedef enum { + BACKBACK, BACK, TONOW, FORW, FORWFORW +} TodayCuts; + +static Pixel fg_pix, bg_pix; /* used to reverse colors "today" */ + +#define NO_DATE (999) /* anything outside -31..31 */ + +/* create a calendar from parent and return the outtermost widget. + */ +Widget +calm_create (parent) +Widget parent; +{ + Arg args[20]; + Widget form_w; + Widget rc_w; + Widget mb_w; + Widget menu_w; + Widget bw, fw; + Widget w; + int n; + int i; + + /* create the outter form */ + + n = 0; + form_w = XmCreateForm (parent, "CalForm", args, n); + + /* put a timezone and title at the top */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + tz_w = XmCreateLabel (form_w, "Calendar", args, n); + wtip (tz_w, "Controls to set the date"); + XtManageChild (tz_w); + + /* create a menu bar for the Month and Year menus */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tz_w); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 3); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + mb_w = XmCreateMenuBar (form_w, "MB", args, n); + XtManageChild (mb_w); + + /* create the Month and Year cascade button/pulldown menu */ + + n = 0; + menu_w = XmCreatePulldownMenu (mb_w, "MonthPD", args, n); + /* managed by the CascadeButton */ + + for (i = 0; i < NMONTHS; i++) { + n = 0; + XtSetArg (args[n], XmNuserData, i+1); n++; + w = XmCreatePushButton (menu_w, mnames[i], args, n); + XtAddCallback (w, XmNactivateCallback, date_changed_cb, + (XtPointer)MONTH); + XtManageChild (w); + mmenu_w[i] = w; + } + + n = 0; + XtSetArg (args[n], XmNsubMenuId, menu_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + m_w = XmCreateCascadeButton (mb_w, "MonthCB", args, n); + XtManageChild (m_w); + wtip (m_w, "Click to set the month by picking from a list"); + + n = 0; + menu_w = XmCreatePulldownMenu (mb_w, "YearPD", args, n); + /* managed by the CascadeButton */ + + for (i = 0; i < NYEARS; i++) { + n = 0; + w = XmCreatePushButton (menu_w, "YearPB", args, n); + XtAddCallback (w, XmNactivateCallback, date_changed_cb, + (XtPointer)YEAR); + XtManageChild (w); + ymenu_w[i] = w; + } + + n = 0; + XtSetArg (args[n], XmNsubMenuId, menu_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + y_w = XmCreateCascadeButton (mb_w, "YearCB", args, n); + XtManageChild (y_w); + wtip (y_w, "Click to set a recent year by picking from a list"); + + /* slide to the right */ + + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)y_w); + + /* create the rowcol for the main date matrix */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNnumColumns, CAL_ROWS+1); n++; /* +1 for dnames*/ + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNspacing, 0); n++; + rc_w = XmCreateRowColumn (form_w, "CalRC", args, n); + XtManageChild (rc_w); + + /* add the fixed day abbreviations */ + + for (i = 0; i < XtNumber(dnames); i++) { + n = 0; + dnames[i].w = XmCreateLabel (rc_w, "XX", args, n); + XtManageChild (dnames[i].w); + } + + /* add the calendar entries proper */ + + for (i = 0; i < CAL_ROWS*CAL_COLS; i++) { + n = 0; + XtSetArg (args[n], XmNrecomputeSize, False); n++; /* SLOW!! */ + d_w[i] = XmCreatePushButton (rc_w, "CD", args, n); + XtAddCallback (d_w[i], XmNactivateCallback, date_changed_cb, + (XtPointer)DAY); + XtManageChild (d_w[i]); + } + + /* add the Now and surrounding buttons */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreatePushButton (form_w, "<<", args, n); + XtManageChild (w); + XtAddCallback (w, XmNactivateCallback, today_cb, (XtPointer)BACKBACK); + wtip (w, "Move back one week"); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + bw = XmCreatePushButton (form_w, "<", args, n); + XtManageChild (bw); + XtAddCallback (bw, XmNactivateCallback, today_cb, (XtPointer)BACK); + wtip (bw, "Move back one day"); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreatePushButton (form_w, ">>", args, n); + XtManageChild (w); + XtAddCallback (w, XmNactivateCallback, today_cb, (XtPointer)FORWFORW); + wtip (w, "Move forward one week"); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, w); n++; + fw = XmCreatePushButton (form_w, ">", args, n); + XtManageChild (fw); + XtAddCallback (fw, XmNactivateCallback, today_cb, (XtPointer)FORW); + wtip (fw, "Move forward one day"); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, bw); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, fw); n++; + w = XmCreatePushButton (form_w, "Now", args, n); + XtManageChild (w); + XtAddCallback (w, XmNactivateCallback, today_cb, (XtPointer)TONOW); + wtip (w, "Set time and date from computer clock"); + + get_something (d_w[0], XmNforeground, (XtArgVal)&fg_pix); + get_something (d_w[0], XmNbackground, (XtArgVal)&bg_pix); + + return (form_w); +} + +/* called when new resources have been set so we can update fg/bg_pix */ +void +calm_newres() +{ + Widget middle = d_w[CAL_COLS*CAL_ROWS/2]; + + get_something (middle, XmNforeground, (XtArgVal)&fg_pix); + get_something (middle, XmNbackground, (XtArgVal)&bg_pix); +} + +/* set the calendar to the time of the given Now *np. + * use local time if PREF_ZONE is PREF_LOCALTZ + * only really do it if f_ison() changed or f_ison() now and day changed. + */ +void +calm_set (np) +Now *np; +{ + static double last_jd = -1e5; + static double last_tz = 1e10; + static PrefWeekStart last_wkstart = PREF_SUN; + static int last_zp = -1; + static int wason = -1; + int f; /* day of week of first day of month Sun=0 */ + int nd; /* number of days in this month */ + double jd; /* current mjd; corrected for TZ if PREF_LOCALTZ */ + double jd0; /* mjd of first day of the month */ + Pixel om_pix; + int localtz; + char buf[64]; + int zonepref; + int m, y; + double d; + int ison, new; + int i; + + /* preliminaries for time zone */ + zonepref = pref_get(PREF_ZONE); + localtz = (zonepref == PREF_LOCALTZ); + jd = localtz ? mjd - tz/24.0 : mjd; + + /* set name of current timezone preference in title */ + fs_tz (buf, zonepref, np); + (void) strcat (buf, " Calendar"); + f_showit (tz_w, buf); + + /* proceed if f_ison() changed or on and things have changed */ + ison = f_ison(); + new = ison != wason || tz != last_tz || last_zp != zonepref + || (ison && mjd_day(last_jd) != mjd_day(jd)) + || pref_get (PREF_WEEKSTART) != last_wkstart; + wason = ison; + last_tz = tz; + last_zp = zonepref; + last_wkstart = pref_get (PREF_WEEKSTART); + if (!new) + return; + + /* remember the new jd we are working on */ + last_jd = jd; + + /* get today's month, day, year */ + mjd_cal (jd, &m, &d, &y); + + /* label the month */ + f_showit (m_w, mnames[m-1]); + + /* label the year and set the menu entries around it */ + (void) sprintf (buf, "%d", y); + f_showit (y_w, buf); + for (i = 0; i < NYEARS; i++) { + int ty = (y - NYEARS/3) + i; /* current year about 1/3 down list */ + (void) sprintf (buf, "%d", ty); + f_showit (ymenu_w[i], buf); + set_something (ymenu_w[i], XmNuserData, (XtArgVal)ty); + } + + /* find day of week of first day of month */ + cal_mjd (m, 1.0, y, &jd0); + if (mjd_dow (jd0, &f) < 0) { + /* can't figure it out - too hard before Gregorian */ + for (i = 0; i < CAL_ROWS*CAL_COLS; i++) { + set_something (d_w[i], XmNuserData, (XtArgVal)NO_DATE); + f_showit (d_w[i], " "); + } + return; + } + + /* slip f one if start weeks on sat or mon, and + * print names of days slipped too + */ + switch (pref_get(PREF_WEEKSTART)) { + case PREF_SAT: + f = (f+1)%7; + for (i = 0; i < XtNumber(dnames); i++) + set_xmstring(dnames[i].w, XmNlabelString, dnames[(i+6)%7].name); + break; + case PREF_SUN: + /* f is ok */ + for (i = 0; i < XtNumber(dnames); i++) + set_xmstring(dnames[i].w, XmNlabelString, dnames[i].name); + break; + case PREF_MON: + f = (f+6)%7; /* really (f-1)%7 */ + for (i = 0; i < XtNumber(dnames); i++) + set_xmstring(dnames[i].w, XmNlabelString, dnames[(i+1)%7].name); + break; + } + + /* find number of days in this month */ + mjd_dpm (jd0, &nd); + + /* print the calendar. + * set userData to the day of the month. + */ + (void) get_color_resource (d_w[0], "CalOtherMonthColor", &om_pix); + for (i = 0; i < CAL_ROWS*CAL_COLS; i++) { + int date = i-f+1; + if (i < f || i > f + nd - 1) { + /* prev or next month */ + double tmpjd, tmpd; + int tmpm, tmpy; + cal_mjd (m, (double)(date), y, &tmpjd); + mjd_cal (tmpjd, &tmpm, &tmpd, &tmpy); + (void) sprintf (buf, "%2d", (int)floor(tmpd+0.5)); + set_something (d_w[i], XmNforeground, (XtArgVal)om_pix); + set_something (d_w[i], XmNbackground, (XtArgVal)bg_pix); + } else { + (void) sprintf (buf, "%2d", date); + if (date == (int)d) { + /* reverse colors on today */ + set_something (d_w[i], XmNforeground, (XtArgVal)bg_pix); + set_something (d_w[i], XmNbackground, (XtArgVal)fg_pix); + } else { + set_something (d_w[i], XmNforeground, (XtArgVal)fg_pix); + set_something (d_w[i], XmNbackground, (XtArgVal)bg_pix); + } + } + + f_showit (d_w[i], buf); + set_something (d_w[i], XmNuserData, (XtArgVal)(date)); + } + + /* over print the new and full moons for days near this month. + * TODO: don't really know which dates to use here (see moonnf()) + * so try several to be fairly safe. have to go back to 4/29/1988 + * to find the full moon on 5/1 for example. + */ + mm_nfmoon (jd0-15, tz, m, f, nd); + mm_nfmoon (jd0-3, tz, m, f, nd); + mm_nfmoon (jd0+15, tz, m, f, nd); + mm_nfmoon (jd0+30, tz, m, f, nd); +} + +/* called when Now or its helpers are pressed. + * client is one of TodayCuts. + * set m/d/y but retain any partion day. + */ +/* ARGSUSED */ +static void +today_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + TodayCuts c = (TodayCuts)client; + Now *np = mm_get_now(); + Now now; + double newmjd; + + switch (c) { + case BACKBACK: + newmjd = mjd - 7; + break; + + case BACK: + newmjd = mjd - 1; + break; + + case TONOW: + time_fromsys (&now); + newmjd = now.n_mjd; + break; + + case FORW: + newmjd = mjd + 1; + break; + + case FORWFORW: + newmjd = mjd + 7; + break; + + default: + newmjd = mjd; + break; + } + + /* this always wants UTC */ + mm_newcaldate (newmjd); +} + +/* called when any of the calendar pushbuttons is activated. + * client is one of DAY, MONTH or YEAR. + * userData is new value, ie, a month, day or year. + * N.B. we honor PREF_ZONE + */ +/* ARGSUSED */ +static void +date_changed_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Now *np = mm_get_now(); + int code = (long int)client; + double jd; + double newmjd; + int localtz; + int x; + int m, y; + double d; + + get_something (w, XmNuserData, (XtArgVal)&x); + if (x == NO_DATE) + return; + + localtz = pref_get (PREF_ZONE) == PREF_LOCALTZ; + jd = localtz ? mjd - tz/24.0 : mjd; + + mjd_cal (jd, &m, &d, &y); + + switch (code) { + case MONTH: + cal_mjd (x, d, y, &newmjd); + break; + case DAY: + d = x + mjd_hr(jd)/24.0; /* preserve any partial day */ + cal_mjd (m, d, y, &newmjd); + break; + case YEAR: + cal_mjd (m, d, x, &newmjd); + break; + } + + if (localtz) + newmjd += tz/24.0; + + /* this function always wants UTC */ + mm_newcaldate (newmjd); +} + +/* print the new and full moons for the months surrounding jd, where + * m is the month-of-year for the current month and f is index into d_w[] + * of the first day of this month and nd is number of days of month `m'. + */ +static void +mm_nfmoon (jd, tzone, m, f, nd) +double jd; +double tzone; +int m, f, nd; +{ + static char nms[] = "NM", fms[] = "FM"; + double jdn, jdf; /* mjd of new and full moons near jd */ + int mm, ym; + double dm; + int ndays; + int di; + + moonnf (jd, &jdn, &jdf); + if (pref_get(PREF_ZONE) == PREF_LOCALTZ) { + jdn -= tzone/24.0; + jdf -= tzone/24.0; + } + + mjd_cal (jdn, &mm, &dm, &ym); + if ((mm == m - 1) || (mm == 12 && m == 1)) { + mjd_dpm (jdn, &ndays); + dm -= ndays; + } else if ((mm == m + 1) || (mm == 1 && m == 12)) { + dm += nd; + } else if (mm != m) + dm = -f; + di = (int)floor(dm + f - 1); + if (di >= 0 && di < CAL_ROWS*CAL_COLS) + f_showit (d_w[di], nms); + + mjd_cal (jdf, &mm, &dm, &ym); + if ((mm == m - 1) || (mm == 12 && m == 1)) { + mjd_dpm (jdf, &ndays); + dm -= ndays; + } else if ((mm == m + 1) || (mm == 1 && m == 12)) { + dm += nd; + } else if (mm != m) + dm = -f; + di = (int)floor(dm + f - 1); + if (di >= 0 && di < CAL_ROWS*CAL_COLS) + f_showit (d_w[di], fms); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: calmenu.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.21 $ $Name: $"}; diff --git a/GUI/xephem/catalogs/._Messier.edb b/GUI/xephem/catalogs/._Messier.edb new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/catalogs/._Messier.edb differ diff --git a/GUI/xephem/catalogs/._SKY2k65.edb b/GUI/xephem/catalogs/._SKY2k65.edb new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/catalogs/._SKY2k65.edb differ diff --git a/GUI/xephem/catalogs/Messier.edb b/GUI/xephem/catalogs/Messier.edb new file mode 100644 index 0000000..bc4e053 --- /dev/null +++ b/GUI/xephem/catalogs/Messier.edb @@ -0,0 +1,198 @@ +# ================================================================================ +# The Messier Catalogue Charles Messier (1784) +# ================================================================================ +# +# Catalogue des nebuleuses et des amas d'etoiles. +# Published in: Connaissance des Temps, 1784, Paris. +# Reproduced in: Mallas J.H.,Kreimer E. 1978, The Messier Album, +# Sky Corp, Cambridge. +# ** Digital version by Wolfgang Steinicke, 2005. www.ngcic.org. +# Other modifications based on the SEDS database. +# +# ================================================================================ +# XEphem Catalog Notes. (XCN) Processed: 2005-5-29 13:38:21 UTC +# --------------------------- Generated by: messier.pl +# The Messier Catalogue. Revision: 1.9 +# +# 1. We have taken account of Vancouleurs and Hubble categories with precedence +# over whatever explicit category placed in the S-column. +# Also note for this release the following conventions: +# +# A-) Trumpler Classification System for Open Clusters: +# Original XEphem +# I --> T1 +# II --> T2 +# III --> T3 +# IV --> T4 +# +# B-) Globular Clusters Concentration Class: +# Original XEphem +# I to IX --> G1 to G9 and then: +# X --> G0 +# XI --> Ga +# XII --> Gb +# +# C-) Galaxy Sub-Types: +# Original XEphem +# Sab --> S1 +# Sbc --> S2 +# Scd --> S3 +# SBa --> S4 +# SBb --> S5 +# SBc --> S6 +# SBd --> S7 +# SBab --> S8 +# SBbc --> S9 +# SBcd --> Sx +# E0- --> E- +# E-SO --> ES +# E-SO/P --> Ep +# E/SB --> Eb +# SO-a --> So +# SB0 --> Sy +# SBm --> SM +# Irr --> Ir +# IBm --> Im +# IBm/P --> IM +# SBc/P --> CB +# Sbc/P --> Cb +# SB? --> s? +# SB0-a --> a0 +# SBa/P --> Pa +# E/P --> PE +# Sc/P --> Pc +# SB/P --> PB +# Sb/P --> Pb +# Ring --> Ri +# C/P --> PC +# S/P --> PS +# E1/P --> P1 +# S0/P --> P0 +# Sa/P --> pa +# E/SO --> es +# SBb/P --> Bb +# SBm/P --> Bm +# +# Data Translation: Guillermo Andrade (gandrade@usermail.com). +# ================================================================================ +# *** DISCLAIMER *** +# No warranty of any kind or extent is made by Clear Sky Institute Inc. or Elwood +# Downey in regard of the accuracy, fidelity, integrity or fitness of the database +# described in this document.The data contained in this file may be the product of +# scientific and/or personal research, therefore such information does not belong +# to Clear Sky Institute Inc. nor to any of its personnel or associates. +# The distribution and/or storage of this file with commercial purposes, is not +# allowed, except with permission of the author. +# -------------------------------------------------------------------------------- +# *** To be distributed with XEphem 3.7 commercial version *** +# ================================================================================ +M1|NGC 1952|LBN 833|Sh2-244|CED 53|Taurus A,f|R|SN,5:34:31.9,22:0:52,8.4,2000,360 +M2|NGC 7089|GCL 121,f|C|G2,21:33:27.2,-0:49:22,6.6,2000,960 +M3|NGC 5272|GCL 25,f|C|G6,13:42:11.2,28:22:34,6.3,2000,1080 +M4|NGC 6121|GCL 41|ESO 517-SC1,f|C|G9,16:23:35.5,-26:31:29,5.4,2000,2160 +M5|NGC 5904|GCL 34,f|C|G5,15:18:33.8,2:5:0,5.7,2000,1380 +M6|NGC 6405|OCL 1030|ESO 455-SC30|Butterly cluster,f|O|T3,17:40:20,-32:15:0,4.2,2000,1980 +M7|NGC 6475|OCL 1028|ESO 394-SC9|Ptolemy's cluster,f|O|T2,17:53:50,-34:47:36,3.3,2000,4500 +M8|NGC 6523|LBN 25|Lagoon nebula,f|N|EN,18:3:42,-24:22:48,5,2000,2700 +M9|NGC 6333|GCL 60|ESO 587-SC5,f|C|G8,17:19:11.8,-18:30:57,7.8,2000,720 +M10|NGC 6254|GCL 49,f|C|G7,16:57:8.9,-4:5:56,6.6,2000,1200 +M11|NGC 6705|OCL 76|Wild Duck cluster,f|O|T1,18:51:5,-6:16:12,5.8,2000,660 +M12|NGC 6218|GCL 46,f|C|G9,16:47:14.5,-1:56:50,6.1,2000,960 +M13|NGC 6205|GCL 45|Hercules cluster,f|C|G5,16:41:41.5,36:27:39,5.8,2000,1200 +M14|NGC 6402|GCL 72,f|C|G8,17:37:36.1,-3:14:43,7.6,2000,660 +M15|NGC 7078|GCL 120,f|C|G4,21:29:58.3,12:10:3,6.3,2000,1080 +M16|NGC 6611|OCL 54|LBN 67|with Eagle nebula,f|O|T2,18:18:48,-13:48:24,6,2000,480 +M17|NGC 6618|OCL 44|LBN 60|Sh2-45,f|U|EN,18:20:47,-16:10:18,6,2000,1200 +M18|NGC 6613|OCL 40,f|O|T2,18:19:58,-17:6:6,6.9,2000,420 +M19|NGC 6273|GCL 52|ESO 518-SC7,f|C|G8,17:2:37.7,-26:16:3,6.8,2000,1020 +M20|NGC 6514|OCL 23|ESO 521-N*13|LBN 27,f|U|EN,18:2:42,-22:58:18,6.3,2000,1200 +M21|NGC 6531|OCL 26|ESO 521-SC19,f|O|T1,18:4:13.3,-22:29:24,5.9,2000,960 +M22|NGC 6656|GCL 99|ESO 523-SC4,f|C|G7,18:36:24.2,-23:54:10,5.2,2000,1920 +M23|NGC 6494|OCL 30|ESO 589-SC22,f|O|T3,17:57:4,-18:59:0,5.5,2000,1500 +M24|IC 4715|ESO 591-**1,f|S|A0,18:18:48,-18:33:0,15.99,2000,5400 +M25|IC 4725|OCL 38|ESO 591-SC6,f|O|T1,18:31:48,-19:6:48,4.6,2000,1560 +M26|NGC 6694|OCL 67,f|O|T1,18:45:18,-9:22:50,8,2000,600 +M27|NGC 6853|PK 60+3.1,f|P|PN,19:59:36.3,22:43:18,7.4,2000,402 +M28|NGC 6626|GCL 94|ESO 522-SC23,f|C|G4,18:24:32.9,-24:52:10,6.9,2000,828 +M29|NGC 6913|OCL 168,f|O|T3,20:23:58,38:30:30,6.6,2000,600 +M30|NGC 7099|GCL 122|ESO 531-SC21,f|C|G5,21:40:22,-23:10:43,6.9,2000,720 +M31|NGC 224|UGC 454|MCG 7-2-16|ZWG 535.17|PGC2557 N,f|G|Sb,0:42:44.3,41:16:8,3.5,2000,11346|3702|35 +M32|NGC 221|UGC 452|MCG 7-2-15|ZWG 535.16|PGC2555 N,f|H|E2,0:42:41.8,40:51:57,8.1,2000,510|390|179 +M33|NGC 598|UGC 1117|MCG 5-4-69|ZWG 502.110|PGC5818 N,f|G|Sc,1:33:51.9,30:39:29,5.5,2000,4122|2496|23 +M34|NGC 1039|OCL 382,f|O|T2,2:42:5,42:45:42,5.2,2000,1500 +M35|NGC 2168|OCL 466,f|O|T3,6:9:0,24:21:0,5.1,2000,1500 +M36|NGC 1960|OCL 445,f|O|T2,5:36:17.7,34:8:27,6,2000,600 +M37|NGC 2099|OCL 451,f|O|T2,5:52:18.3,32:33:11,5.6,2000,900 +M38|NGC 1912|OCL 433,f|O|T3,5:28:40,35:50:54,6.4,2000,900 +M39|NGC 7092|OCL 211,f|O|T3,21:31:42,48:25:0,4.6,2000,1860 +M40,f|D|G5,12:22:15.69,58:05:04.1,8.4,2000,49|0|83 +M41|NGC 2287|OCL 597|ESO 557-SC14,f|O|T2,6:46:0,-20:45:24,4.5,2000,2340 +M42|NGC 1976|LBN 974|Orion nebula,f|N|EN,5:35:17.1,-5:23:25,4,2000,3900 +M43|NGC 1982|CED 55G,f|N|EN,5:35:31.3,-5:16:3,9,2000,1200 +M44|NGC 2632|OCL 507|Praesepe,f|O|T2,8:39:57.2,19:40:21,3.1,2000,4200 +M45,f|U,03:47:0,24:07,1.6,2000,6600 +M46|NGC 2437|OCL 601,f|O|T3,7:41:46.8,-14:48:36,6.1,2000,1200 +M47|NGC 2422|NGC 2478|OCL 596,f|O|T3,7:36:35,-14:28:47,4.4,2000,1500 +M48|NGC 2548|OCL 584,f|O|T1,8:13:43.1,-5:45:2,5.8,2000,1800 +M49|NGC 4472|UGC 7629|MCG 1-32-83|ZWG 42.134|PGC41220 N,f|H|E2,12:29:46.7,8:0:0,8.3,2000,612|498|155 +M50|NGC 2323|OCL 559,f|O|T2,7:2:42,-8:23:0,5.9,2000,900 +M51|NGC 5194|UGC 8493|MCG 8-25-12|Whirlpool galaxy|PGC47404 N,f|G|S2,13:29:52.6,47:11:44,8.1,2000,672|414|7 +M52|NGC 7654|OCL 260,f|O|T1,23:24:48,61:35:36,6.9,2000,960 +M53|NGC 5024|GCL 22,f|C|G5,13:12:55.3,18:10:11,7.7,2000,780 +M54|NGC 6715|GCL 104|ESO 458-SC8,f|C|G3,18:55:3.3,-30:28:40,7.7,2000,720 +M55|NGC 6809|GCL 113|ESO 460-SC21,f|C|Ga,19:39:59.4,-30:57:42,6.3,2000,1140 +M56|NGC 6779|GCL 110,f|C|G0,19:16:35.5,30:11:7,8.4,2000,528 +M57|NGC 6720|PK 63+13.1,f|P|PN,18:53:35.1,33:1:47,8.8,2000,180|144|55 +M58|NGC 4579|UGC 7796|MCG 2-32-160|VCC 1727|PGC42168 N,f|G|S5,12:37:43.7,11:49:6,9.6,2000,360|288|95 +M59|NGC 4621|UGC 7858|MCG 2-32-183|ZWG 70.223|PGC42628 N,f|H|E5,12:42:2.2,11:38:50,9.7,2000,324|222|165 +M60|NGC 4649|UGC 7898|MCG 2-33-2|KCPG 353B|PGC42831 N,f|H|E2,12:43:39.8,11:33:11,8.8,2000,456|372|105 +M61|NGC 4303|UGC 7420|MCG 1-32-22|VCC 508|PGC40001 N,f|G|S9,12:21:54.9,4:28:22,9.3,2000,390|354|162 +M62|NGC 6266|GCL 51|ESO 453-SC14,f|C|G4,17:1:12.6,-30:6:42,6.4,2000,900 +M63|NGC 5055|UGC 8334|MCG 7-27-54|Sunflower galaxy|PGC46153 N,f|G|S2,13:15:49,42:1:59,8.5,2000,756|432|105 +M64|NGC 4826|UGC 8062|MCG 4-31-1|Black Eye galaxy|PGC44182 N,f|G|S1,12:56:43.8,21:40:59,8.5,2000,600|324|115 +M65|NGC 3623|UGC 6328|MCG 2-29-18|ARP 317|PGC34612 N,f|G|Sa,11:18:55.6,13:5:27,9.2,2000,588|174|174 +M66|NGC 3627|UGC 6346|MCG 2-29-19|ARP 317|PGC34695 N,f|G|Sb,11:20:15.1,12:59:24,8.9,2000,546|246|173 +M67|NGC 2682|OCL 549,f|O|T2,8:51:0,11:48:0,6.9,2000,1500 +M68|NGC 4590|GCL 20|ESO 506-SC30,f|C|G0,12:39:28,-26:44:32,7.3,2000,660 +M69|NGC 6634|NGC 6637|GCL 96|ESO 457-SC14,f|C|G5,18:31:23.2,-32:20:51,7.6,2000,426 +M70|NGC 6681|GCL 101|ESO 458-SC3,f|C|G5,18:43:12.7,-32:17:29,7.8,2000,480 +M71|NGC 6838|GCL 115,f|C|GC,19:53:46.1,18:46:44,8.4,2000,432 +M72|NGC 6981|GCL 118,f|C|G9,20:53:27.9,-12:32:11,9.2,2000,396 +M73|NGC 6994|OCL 89,f|O|T4,20:58:56,-12:38:7,8.9,2000,84 +M74|NGC 628|UGC 1149|MCG 3-5-11|ZWG 460.14|PGC5974 N,f|G|Sc,1:36:41.7,15:47:0,9.1,2000,630|570|25 +M75|NGC 6864|GCL 116|ESO 595-SC13,f|C|G1,20:6:4.8,-21:55:15,8.6,2000,408 +M76|NGC 650|NGC 651|PK 130-10.1,f|P|PN,1:42:18.1,51:34:17,10.1,2000,195 +M77|NGC 1068|UGC 2188|MCG 0-7-83|ZWG 388.98|PGC10266 N,f|G|Pb,2:42:40.8,-0:0:46,8.9,2000,426|360|70 +M78|NGC 2068|DG 80,f|F|RN,5:46:45,0:4:48,8,2000,480 +M79|NGC 1904|ESO 487-SC7|GCL 10,f|C|G5,5:24:10.6,-24:31:25,7.7,2000,576 +M80|NGC 6093|GCL 39|ESO 516-SC11,f|C|G2,16:17:2.5,-22:58:28,7.3,2000,600 +M81|NGC 3031|UGC 5318|MCG 12-10-10|Bode's nebulae|PGC28630 N,f|G|Sb,9:55:33.5,69:4:2,7,2000,1494|690|157 +M82|NGC 3034|UGC 5322|MCG 12-10-11|ARP 337|Ursa Major A|PGC28655 N,f|G|Sd,9:55:54,69:40:59,8.6,2000,672|258|65 +M83|NGC 5236|ESO 444-81|MCG -5-32-50|UGCA 366|PGC48082 N,f|G|Sc,13:37:0.2,-29:52:2,7.5,2000,774|690|44 +M84|NGC 4374|UGC 7494|MCG 2-32-34|PGC40455 N,f|H|E1,12:25:3.6,12:53:13,9.2,2000,390|336|135 +M85|NGC 4382|UGC 7508|MCG 3-32-29|KCPG 334A|VCC 798|PGC40515 N,f|G|So,12:25:23.9,18:11:27,9.1,2000,426|330|5 +M86|NGC 4406|UGC 7532|MCG 2-32-46|ZWG 70.72|PGC40653 N,f|H|E3,12:26:11.5,12:56:47,8.9,2000,534|348|130 +M87|NGC 4486|UGC 7654|MCG 2-32-105|3C 274|PGC41361 N,f|H|PE,12:30:49.4,12:23:26,8.6,2000,498|396|170 +M88|NGC 4501|UGC 7675|MCG 3-32-59|ZWG 99.76|PGC41517 N,f|G|Sb,12:31:59,14:25:11,9.4,2000,408|222|140 +M89|NGC 4552|UGC 7760|MCG 2-32-149|ZWG 70.184|PGC41968 N,f|H|E,12:35:39.9,12:33:22,9.9,2000,210 +M90|NGC 4569|UGC 7786|MCG 2-32-155|IRAS12343+1326|PGC42089 N,f|G|S8,12:36:50,13:9:50,9.4,2000,570|264|23 +M91|NGC 4548|UGC 7753|MCG 3-32-75|VCC 1615|PGC41934 N,f|G|S5,12:35:26.4,14:29:47,10.1,2000,312|252|150 +M92|NGC 6341|GCL 59,f|C|G4,17:17:7.3,43:8:13,6.5,2000,840 +M93|NGC 2447|OCL 649|ESO 493-SC7,f|O|T4,7:44:30,-23:51:24,6.2,2000,600 +M94|NGC 4736|UGC 7996|MCG 7-26-58|ZWG 217.1|PGC43495 N,f|G|S1,12:50:53.1,41:7:17,8.1,2000,864|726|117 +M95|NGC 3351|UGC 5850|MCG 2-28-1|ZWG 66.4|PGC32007 N,f|G|S5,10:43:57.8,11:42:12,9.8,2000,444|300|13 +M96|NGC 3368|UGC 5882|MCG 2-28-6|ZWG 66.13|PGC32192 N,f|G|S8,10:46:45.8,11:49:12,9.3,2000,468|312|176 +M97|NGC 3587|PK 148+57.1,f|P|PN,11:14:47.7,55:1:10,9.9,2000,170 +M98|NGC 4192|UGC 7231|MCG 3-31-79|VCC 92|PGC39028 N,f|G|S5,12:13:47.8,14:53:58,10.1,2000,588|168|155 +M99|NGC 4254|UGC 7345|MCG 3-31-99|Pinwheel galaxy|PGC39578 N,f|G|Sc,12:18:49.3,14:25:3,9.7,2000,318|276|51 +M100|NGC 4321|UGC 7450|MCG 3-32-15|KUG 1220+160|PGC40153 N,f|G|S9,12:22:54.9,15:49:22,9.3,2000,450|366|30 +M101|NGC 5457|UGC 8981|MCG 9-23-28|VV 344|PGC50063 N,f|G|Sc,14:3:12.4,54:20:58,7.5,2000,1728|1614|26 +M102|NGC 5866|UGC 9723|MCG 9-25-17|ZWG 274.16|PGC53933 N,f|G|So,15:6:29.4,55:45:49,9.9,2000,390|186|128 +M103|NGC 581|OCL 326,f|O|T3,1:33:23,60:39:0,7.4,2000,360 +M104|NGC 4594|MCG -2-32-20|UGCA 293|Sombrero galaxy|PGC42407 N,f|G|Sa,12:39:59.3,-11:37:21,8.3,2000,516|252|89 +M105|NGC 3379|UGC 5902|MCG 2-28-11|ZWG 66.18|PGC32256 N,f|H|E1,10:47:49.5,12:34:52,9.5,2000,318|288|71 +M106|NGC 4258|UGC 7353|MCG 8-22-104|ZWG 244.3|PGC39600 N,f|G|S9,12:18:57.8,47:18:25,8.3,2000,1116|432|150 +M107|NGC 6171|GCL 44,f|C|G0,16:32:31.9,-13:3:11,7.8,2000,780 +M108|NGC 3556|UGC 6225|MCG 9-18-98|KARA 469|PGC34030 N,f|G|Sc,11:11:29.4,55:40:22,9.9,2000,516|144|80 +M109|NGC 3992|UGC 6937|MCG 9-20-44|ZWG 269.23|PGC37617 N,f|G|S9,11:57:35.4,53:22:25,9.8,2000,450|264|68 +M110|NGC 205|UGC 426|MCG 7-2-14|ZWG 535.14|PGC2429 N,f|H|E5,0:40:22.1,41:41:7,7.9,2000,1170|690|170 diff --git a/GUI/xephem/catalogs/SKY2k65.edb b/GUI/xephem/catalogs/SKY2k65.edb new file mode 100644 index 0000000..f3de970 --- /dev/null +++ b/GUI/xephem/catalogs/SKY2k65.edb @@ -0,0 +1,8997 @@ +# V/109 SKY2000 Catalog Version 4 (6.5 Mag limited version) +# ================================================================================ +# SKY2000 Master Catalog, Version 4 +# Myers J.R., Sande C.B., Miller A.C., Warren Jr. W.H., Tracewell D.A. +# +# ================================================================================ +# ADC_Keywords: Positional data; Cross identifications; Combined data; Surveys; +# +# Description: +# The SKYMAP Star Catalog System consists of a Master Catalog stellar +# database and a collection of utility software designed to create and +# maintain the database and to generate derivative mission star catalogs +# (run catalogs). It contains an extensive compilation of information on +# almost 300000 stars brighter than 8.0 mag. +# +# The original SKYMAP Master Catalog was generated in the early 1970's. +# Incremental updates and corrections were made over the following years +# but the first complete revision of the source data occurred with +# Version 4.0. This revision also produced a unique, consolidated source +# of astrometric information which can be used by the astronomical +# community. The derived quantities were removed and wideband and +# photometric data in the R (red) and I (infrared) systems were added. +# +# Version 4 of the SKY2000 Master Catalog was completed in April 2002; +# it marks the global replacement of the variability identifier and +# variability data fields. More details can be found in the description +# file sky2kv4.pdf. +# +# This version supersedes the previous versions 1(V/95), 2(V/102), +# and 3(V/105). +# +# -------------------------------------------------------------------------------- +# +# See also: +# http://mmfd.gsfc.nasa.gov/dist/generalProducts/attitude/ATT_SKYMAP.html : +# Flight Dynamics' star catalog database +# -------------------------------------------------------------------------------- +# +# Acknowledgements; +# It is a pleasure to thank Chris Sande and Wayne H. Warren Jr +# for giving a copy of their files. +# +# History: +# The catalog was split into 24 parts at CDS, to avoid too large files. +# * 03-Apr-2002: The unit of the proper motion in RA has been corrected +# from arcsec/yr to s/yr +# ================================================================================ +# (End) Francois Ochsenbein [CDS] 16-Sep-2001 +# ================================================================================ +# XEphem Catalog Notes. (XCN) Processed: 2005-6-16 4:3:38 UTC +# --------------------------- Generated by: skylim.pl +# SKY2000 Catalog, Version 4 Revision: 1.0 +# -------------------------------------------------------------------------------- +# The Sky2000 Master Database consist in one of the finest data collections avail- +# able of up-to-date positional data, spectral classification and proper motion +# for almost 300.000 stars. In our humble opinion, this catalog serves not only as +# a General purpose tool for mapping the sky for the average amateur observer, but +# can also be used as a very specialized tool in respect of variable stars and +# other studies. +# THIS IS A MODIFIED VERSION OF SKY2000. It is limited to objects of magnitude 6.5 +# and brighter. +# +# The *only* minor addition to this catalog was a small list of common, uncommon +# rare names. +# +# 1. The Sky View will show names in accord to the following precedence rules: +# a. Common Name (Historical, Arabic and other popular designations). +# b. Bayer/Flamsteeed. +# c. Variable Name. +# d. SAO Number. +# e. Durchmusterung number and supplement letter. +# f. Uncommon Name (not so popular or obscure alternative names). +# g. Henry Draper Number (both HD and HDE). +# h. AG3 designation. +# i. Positions and Proper Motion Catalog (PPM). +# j. Bright Star Catalog. +# k. ICRS identifier. +# 2. Common Names were checked against the following sources: +# a) FK5 - SAO - HD - Common Name Cross Index (Smith 1996). +# Available at ADC under IV/22. +# b) Star Names: Their Lore and Meaning. By Richard Allen (Dover +# Books Publications). +# c) Burnham's Celestial Handbook. Written by Robert Burnham +# Jr. (Dover Books Publications). +# d) Yale Bright Star Catalog Notes 1992. +# e) Sterne. Mosaik Verlag Ed. Munich. +# 3. Common Names are bound to have ERRORS!. This database probably has ERRORS!. +# Though we tried to clean all mistakes from it... +# +# 4. Variable names are all set to capital letters so to improve AVVSO compatabi- +# lity (also due the traditional use of such chars). +# 5. Whenever possible, we tried to follow the rules and recomendations contained +# in the Second Reference Dictionary of the Nomenclature of Celestial Objects, +# by Lortet et.al. Publication Speciale du C.D.S., No.24, Vol. +# ** Please see the Readme.txt in the /catalogs shared directory to obtain further +# information in respect of nomenclature. +# News: +# +# 13/6/2005: More common names added. Several databases errors fixed. +# +# ________________________________________________________________________________ +# Data Translation: Guillermo Andrade (gandrade@usermail.com) +# Note: This is a limited demo version. +# ================================================================================ +# *** DISCLAIMER *** +# No warranty of any kind or extent is made by Clear Sky Institute Inc. or Elwood +# Downey in regard of the accuracy, fidelity, integrity or fitness of the database +# described in this document. The data contained in this file may the product of +# scientific and/or personal research, therefore such information does not belong +# to Clear Sky Institute Inc. nor to any of its personnel or associates. +# The distribution and/or storage of this file with commercial purposes, is not +# allowed, except with permission of the author. +# -------------------------------------------------------------------------------- +# *** To be distributed with XEphem *** +# ================================================================================ +SAO 231888|CD-4415420|J000019.09-441726.0,f|D|G3,0:0:19.10|58.41,-44:17:26.02|-108.6,6.29,2000 +HD 224758|BD+26 4727|PPM 89312|J000023.90+265505.1,f|S|F7,0:0:23.90|42.26,26:55:5.19|-53.5,6.44,2000 +V26193|HD 224784|BD+58 2685|AG+59 1670|J000030.88+593334.8,f|V|G9,0:0:30.89|-80.63,59:33:34.85|-24.1,6.18,2000 +CG AND|BD+44 4538|PPM 42458|J000043.63+451512.0,f|V|B9,0:0:43.63|17.42,45:15:12.00|0.2,6.36,2000 +Phe Tau|SAO 231895|HD 224834|CD-4914316|J000104.58-484835.5,f|S|G8,0:1:4.58|-17.88,-48:48:35.55|-6.8,5.71,2000 +BD+49 4309|PPM 42464|J000119.25+495853.6,f|S|G7,0:1:19.25|13.31,49:58:53.61|-11.2,6.22,2000 +V26195|HD 224865|CD-5113743|J000120.11-502014.5,f|V|M2,0:1:20.12|7.37,-50:20:14.54|10.6,5.54,2000 +Oct Theta|HD 224889|CP-77 1596|J000135.70-770356.6,f|S|K3,0:1:35.70|-56.51,-77:3:56.61|-177,4.79,2000 +V26197|HD 224893|BD+60 2657|PPM 11865|J000137.01+611322.0,f|V|F0,0:1:37.02|-2.82,61:13:22.08|-1.3,5.58,2000 +BD+72 1135|PPM 4264|J000139.45+733642.6,f|S|A1,0:1:39.46|75.54,73:36:42.65|-12.4,6.50,2000 +BD+41 4920|PPM 42476|J000143.84+422201.7,f|S|B9,0:1:43.85|5.10,42:22:1.72|-1.8,6.25,2000 +Psc 29|V14804|HD 224926|SD-03 5749|PPM 181771|J000149.44-030139.0,f|V|B7,0:1:49.45|18.87,-3:1:39.01|-10.3,5.13,2000 +Psc 30|YY PSC|HD 224935|SD-06 6345|PPM 181772|J000157.61-060050.6,f|V|M3,0:1:57.62|46.69,-6:0:50.66|-41.3,4.40,2000 +Peg 85A|V14809|BD+26 4734|PPM 89344|J000210.15+270456.1,f|D|G5,0:2:10.16|778.61,27:4:56.12|-918.8,5.80,2000 +Scl Zeta|CD-3019790|J000219.92-294313.4,f|D|B4,0:2:19.92|9.64,-29:43:13.49|14,5.04,2000 +Psc 31|SAO 128544|HD 224995|BD+08 5164|J000224.16+085724.5,f|S|A6,0:2:24.17|-0.89,8:57:24.57|-4.1,6.33,2000 +Psc 32|SAO 128547|BD+07 5121|J000229.70+082907.6,f|S|F0,0:2:29.70|-93.61,8:29:7.67|-47.5,5.70,2000 +BD+65 1987|PPM 11882|J000236.08+660556.2,f|D|G8,0:2:36.09|3.34,66:5:56.28|1.1,5.84,2000 +SD-20 6703|PPM 242448|J000257.48-200245.1,f|S|F6,0:2:57.49|100.33,-20:2:45.18|79,6.25,2000 +CD-2417960|J000307.85-240842.5,f|S|G5,0:3:7.86|59.27,-24:8:42.52|-3.1,6.46,2000 +V0639 CAS|BD+62 2356|PPM 11889|J000325.72+633825.9,f|D|B3,0:3:25.73|-3.26,63:38:25.99|-1.8,6.27,2000 +Cet 2|HD 225132|SD-18 6417|J000344.38-172009.5,f|S|B9,0:3:44.39|28.49,-17:20:9.56|-7.3,4.55,2000 +V0398 CEP|HD 225136|BD+65 1993|PPM 11897|J000351.63+664243.8,f|V|M4,0:3:51.64|7.89,66:42:43.86|-8.1,6.33,2000 +Cas 9A|V15009|BD+61 2586|J000413.66+621715.5,f|D|A1,0:4:13.66|-0.98,62:17:15.59|-0.4,5.87,2000 +HD 225197|SD-17 6868|J000419.79-163144.5,f|S|K2,0:4:19.79|53.78,-16:31:44.53|-60.3,5.78,2000 +CD-2918950|PPM 242471|J000420.31-291607.7,f|S|A0,0:4:20.32|29.18,-29:16:7.76|3.4,6.38,2000 +Cet 3|V13|HD 225212|SD-11 6194|J000430.11-103034.2,f|V|K3,0:4:30.12|-6.49,-10:30:34.28|-11.9,4.94,2000 +V15012|HD 225218|BD+41 4933|PPM 42539|J000436.58+420533.1,f|D|B9,0:4:36.59|-11.91,42:5:33.11|-12.7,6.13,2000 +SAO 255631|HD 225253|CP-72 2800|PPM 366779|J000441.30-712612.8,f|S|B8,0:4:41.31|29.99,-71:26:12.81|-13.6,5.59,2000 +HD 225216|BD+66 1679|J000441.98+670959.2,f|S|K1,0:4:41.98|95.58,67:9:59.20|23.8,5.69,2000 +HD 225239|BD+33 4828|J000453.76+343935.2,f|S|G2,0:4:53.76|769.16,34:39:35.27|100.5,6.11,2000 +HD 225276|BD+25 5068|PPM 89386|J000456.00+263855.5,f|D|K4,0:4:56.00|112.35,26:38:55.55|-14.5,6.25,2000 +HD 225292|BD+26 4744|J000501.18+274029.2,f|S|G5,0:5:1.19|83.42,27:40:29.22|-6.6,6.47,2000 +SAO 128569|HD 6|BD-01 4525|PPM 174662|HR 2|J000503.82-003010.9,f|S|G5,0:5:3.82|44.85,-0:30:10.93|-53.5,6.31,2000 +V0567 CAS|HD 225289|BD+60 2667|PPM 11913|J000506.14+611850.2,f|V|B8,0:5:6.15|14.26,61:18:50.29|2.2,5.80,2000 +Psc 33|BC PSC|SAO 128572|HD 28|SD-06 6357|PPM 181831|HR 3|J000520.14-054227.4,f|V|K0,0:5:20.14|-8.36,-5:42:27.43|88.2,4.62,2000 +Peg 86|HD 87|BD+12 5063|PPM 116122|HR 4|J000541.96+132346.5,f|S|G5,0:5:41.96|42.61,13:23:46.56|-6.5,5.55,2000 +V0640 CAS|HD 123|BD+57 2865|HR 5|J000615.81+582612.2,f|D|G5,0:6:15.81|247.40,58:26:12.24|17.8,6.19,2000 +SAO 214963|HD 142|CD-4914337|HR 6|J000619.17-490430.6,f|D|G1,0:6:19.18|575.22,-49:4:30.69|-39.9,5.71,2000 +Cas 10|V15021|HD 144|BD+63 2107|HR 7|J000626.53+641146.2,f|V|B9,0:6:26.54|9.73,64:11:46.21|0,5.57,2000 +V33|HD 166|BD+28 4704|HR 8|J000636.78+290117.4,f|D|K0,0:6:36.78|379.99,29:1:17.41|-178.3,6.07,2000 +CD-23 4|PPM 242517|HR 9|J000650.08-230627.1,f|S|A7,0:6:50.09|97.27,-23:6:27.14|-47.1,6.19,2000 +HD 256|SD-18 6428|J000718.26-172313.1,f|S|A6,0:7:18.27|-10.74,-17:23:13.16|17,6.21,2000 +4 Cet|V15027|SAO 128595|HD 315|SD-03 2|PPM 181879|HR 11|J000744.11-023255.2,f|V|B8,0:7:44.11|30.12,-2:32:55.25|2.8,6.44,2000 +HD 319|CD-23 13|HR 12|J000746.89-223030.8,f|D|A2,0:7:46.90|70.12,-22:30:30.82|-34.7,5.94,2000 +SAO 192367|HD 344|CD-34 17|PPM 275726|HR 13|J000803.48-333145.5,f|S|K1,0:8:3.49|-42.76,-33:31:45.57|3.2,5.66,2000 +5 Cet|AP PSC|HD 352|SD-03 3|PPM 181887|HR 14|J000812.09-022651.7,f|V|K2,0:8:12.10|7.19,-2:26:51.76|-4.9,6.21,2000 +SD-09 5|PPM 181892|HR 16|J000817.53-084926.8,f|S|G5,0:8:17.53|-34.09,-8:49:26.80|-35.7,5.99,2000 +Alpheratz|And Alpha-21|Alpha Andromedae|HD 358|BD+28 4|PPM 89441|HR 15|J000823.25+290525.5,f|D|B9,0:8:23.26|135.67,29:5:25.55|-163,2.06,2000 +HD 371|BD+62 5|PPM 11954|J000832.85+631214.5,f|S|G2,0:8:32.86|-9.47,63:12:14.54|-3.5,6.43,2000 +CF CET|SD-18 3|HR 18|J000833.49-173441.3,f|V|M0,0:8:33.50|14.87,-17:34:41.36|-47.3,6.12,2000 +BD+35 8|HR 17|J000840.93+363737.6,f|S|F8,0:8:40.94|-114.72,36:37:37.65|-124.6,6.22,2000 +HD 417|BD+24 3|PPM 89448|HR 19|J000852.13+252746.7,f|S|K0,0:8:52.14|104.55,25:27:46.74|54.8,6.25,2000 +HD 434|BD+27 3|PPM 89451|J000900.16+281451.1,f|S|A3,0:9:0.16|5.95,28:14:51.15|-5.6,6.47,2000 +SAO 231943|HD 469|CP-54 19|PPM 329972|HR 23|J000902.38-540006.9,f|D|G4,0:9:2.39|46.81,-54:0:6.99|9.4,6.33,2000 +Peg 87|HD 448|BD+17 7|PPM 116172|HR 22|J000902.42+181243.0,f|S|G9,0:9:2.42|140.92,18:12:43.07|-25.6,5.56,2000 +Caph|Al Sanam al Nakah|Cas Beta-11A|Beta Cassiopeiae|HD 432|BD+58 3|HR 21|J000910.68+590859.2,f|D|F2,0:9:10.69|523.36,59:8:59.21|-180.4,2.28,2000 +HD 431|BD+78 1|J000920.17+794252.3,f|D|A7,0:9:20.18|106.17,79:42:52.36|-39.4,6.04,2000 +Scl Kappa1|HD 493|CD-28 16|PPM 242561|HR 24|J000921.06-275916.5,f|D|F2,0:9:21.07|72.59,-27:59:16.54|-10,5.44,2000 +Phe Epsilon|SAO 214983|HD 496|CD-46 18|HR 25|J000924.64-454450.7,f|S|K0,0:9:24.64|122.15,-45:44:50.73|-180.1,3.88,2000 +HD 565|CP-62 9|PPM 351661|J000952.11-621748.4,f|S|A6,0:9:52.12|17.29,-62:17:48.46|17.5,6.34,2000 +Oct Gamma3|SAO 258215|HD 636|CP-82 4|PPM 375917|J001002.17-821326.5,f|S|G8,0:10:2.18|-21.65,-82:13:26.57|-20.4,5.28,2000 +Psc 34|V15036|BD+10 8|PPM 116192|HR 26|J001002.20+110844.9,f|D|B9,0:10:2.20|29.73,11:8:44.93|1.6,5.54,2000 +V15038|SAO 128621|HD 587|SD-06 11|PPM 181928|HR 29|J001018.86-051454.9,f|V|K1,0:10:18.87|34.95,-5:14:54.92|-29,5.85,2000 +And 22|HD 571|BD+45 17|PPM 42645|HR 27|J001019.24+460420.1,f|S|F2,0:10:19.25|4.47,46:4:20.18|0.2,5.03,2000 +SAO 147127|HD 645|SD-13 13|HR 31|J001042.83-123447.6,f|S|K0,0:10:42.83|149.33,-12:34:47.63|-38.2,5.87,2000 +Cet 6|SAO 147133|HD 693|SD-16 17|HR 33|J001115.85-152804.7,f|S|F7,0:11:15.86|-84.14,-15:28:4.72|-269.3,4.90,2000 +Scl Kappa2|CD-28 26|PPM 242592|HR 34|J001134.42-274759.0,f|D|K5,0:11:34.42|4.64,-27:47:59.05|17.1,5.41,2000 +Scl Theta|SAO 192388|HD 739|CD-35 42|HR 35|J001144.00-350759.2,f|S|F4,0:11:44.01|169.04,-35:7:59.23|113.8,5.24,2000 +HD 743|BD+47 21|PPM 42674|HR 36|J001159.08+480908.6,f|S|K5,0:11:59.09|60.54,48:9:8.63|10.4,6.17,2000 +V15047|SAO 147144|HD 787|SD-18 14|HR 37|J001209.98-175617.8,f|V|K5,0:12:9.99|60.51,-17:56:17.80|-24.7,5.27,2000 +Algenib|Peg Gamma-88A|Gamma Pegasi|HD 886|BD+14 14|PPM 116243|HR 39|J001314.15+151100.9,f|D|B2,0:13:14.15|4.78,15:11:0.94|-8.2,2.83,2000 +V15054|SAO 258217|CP-85 2|PPM 375924|HR 47|J001319.62-845938.3,f|V|M0,0:13:19.62|10.97,-84:59:38.32|17.4,5.79,2000 +HD 895|BD+26 13|PPM 89523|J001323.92+265915.1,f|D|G3,0:13:23.92|-15.64,26:59:15.16|-32.7,6.27,2000 +And 23|BD+40 29|HR 41|J001330.84+410207.3,f|S|F0,0:13:30.84|-122.76,41:2:7.33|-146.9,5.72,2000 +V96|HD 942|CD-26 56|PPM 242631|HR 42|J001342.24-260120.4,f|V|K5,0:13:42.24|37.61,-26:1:20.44|-78.7,5.95,2000 +SAO 166131|HD 943|CD-26 57|PPM 242632|HR 43|J001344.37-261705.8,f|S|K5,0:13:44.38|-3.23,-26:17:5.85|9.9,6.13,2000 +HD 952|BD+32 21|PPM 65114|HR 44|J001402.28+331221.7,f|S|A1,0:14:2.28|-7.66,33:12:21.74|-18.8,6.23,2000 +AD CET|SAO 128655|SD-08 26|HR 46|J001427.62-074649.9,f|D|M3,0:14:27.63|61.08,-7:46:49.92|2.4,5.15,2000 +Peg Chi-89|V99|BD+19 27|PPM 89542|HR 45|J001436.16+201224.1,f|V|M2,0:14:36.16|90.65,20:12:24.13|1.9,4.80,2000 +Cet 7|AE CET|SAO 147169|SD-19 21|HR 48|J001438.41-185558.3,f|V|M3,0:14:38.42|-27.10,-18:55:58.32|-73.8,4.46,2000 +SD-10 30|HR 51|J001454.51-093410.4,f|S|B9,0:14:54.51|22.63,-9:34:10.46|-8.5,5.77,2000 +V15056|BD+21 13|PPM 89549|HR 49|J001455.89+221703.2,f|V|A1,0:14:55.90|45.11,22:17:3.21|-11,6.25,2000 +SAO 192418|CD-35 65|PPM 275835|HR 54|J001458.26-345415.2,f|S|K3,0:14:58.26|76.52,-34:54:15.20|-12,6.17,2000 +Psc 35A|UU PSC|BD+08 19|PPM 143293|J001458.83+084915.4,f|D|F0,0:14:58.84|97.68,8:49:15.46|-25,6.02,2000 +BD+30 26|PPM 65129|HR 52|J001506.95+313208.6,f|S|K5,0:15:6.95|33.24,31:32:8.61|-5.4,6.33,2000 +BD+26 23|PPM 89554|HR 53|J001510.56+271700.3,f|D|A1,0:15:10.56|14.66,27:17:0.38|-15.4,6.35,2000 +S SCL|SAO 192424|HD 1115|CD-32 69|PPM 275844|J001522.26-320242.9,f|V|M7,0:15:22.27|37.76,-32:2:42.99|-2.2,6.19,2000 +HD 1142|BD+60 16|J001554.84+610000.6,f|S|G8,0:15:54.85|-20.94,61:0:0.62|-10.3,6.44,2000 +HD 1221|CP-76 19|PPM 366853|HR 58|J001554.89-755441.8,f|S|G8,0:15:54.89|-17.82,-75:54:41.81|-2.4,6.48,2000 +HD 1187|CD-32 72|PPM 275854|HR 57|J001608.86-312647.0,f|D|K5,0:16:8.87|117.86,-31:26:47.02|-27.1,5.65,2000 +HD 1141|BD+76 5|HR 55|J001613.93+765702.7,f|D|B8,0:16:13.94|19.78,76:57:2.72|-3.1,6.40,2000 +HD 1185|BD+42 41|PPM 42761|HR 56|J001621.52+433542.1,f|D|A2,0:16:21.53|35.63,43:35:42.18|-23.4,6.15,2000 +Psc 36|HD 1227|BD+07 27|HR 59|J001634.04+081424.5,f|S|G8,0:16:34.04|-28.06,8:14:24.55|-14.7,6.12,2000 +V113|SAO 166167|HD 1256|SD-21 24|PPM 242681|HR 61|J001642.34-201236.2,f|V|B8,0:16:42.34|-6.90,-20:12:36.22|-1.5,6.50,2000 +V15065|BD+48 60|PPM 42776|J001653.95+492742.8,f|V|Ma,0:16:53.96|-16.28,49:27:42.89|-5.6,6.49,2000 +HD 1239|BD+60 21|J001657.04+613159.4,f|D|G8,0:16:57.04|-6.01,61:31:59.47|-3.5,5.74,2000 +And Theta-24A|V116|BD+37 34|PPM 65154|HR 63|J001705.49+384053.8,f|D|A2,0:17:5.50|-50.00,38:40:53.89|-17.9,4.62,2000 +HD 1279|BD+47 50|PPM 42778|HR 62|J001709.04+475650.6,f|S|B7,0:17:9.04|4.02,47:56:50.66|-4,5.86,2000 +HD 1343|SD-19 30|HR 66|J001732.70-190303.9,f|S|F4,0:17:32.70|20.42,-19:3:3.93|-2.4,6.46,2000 +AO CAS|HD 1337|BD+50 46|HR 65|J001743.06+512559.1,f|V|O9,0:17:43.06|-4.21,51:25:59.12|-1.6,6.11,2000 +HD 1367|BD+00 28|PPM 143346|HR 67|J001747.69+014119.4,f|S|K0,0:17:47.70|90.11,1:41:19.42|9.2,6.19,2000 +HD 1419|BD+10 25|PPM 116319|HR 69|J001817.24+111222.3,f|S|K0,0:18:17.25|-32.81,11:12:22.37|-28.6,6.06,2000 +And Sigma-25|V118|BD+35 44|PPM 65183|HR 68|J001819.65+364706.8,f|V|A2,0:18:19.66|-66.55,36:47:6.81|-42.5,4.51,2000 +HD 1439|BD+30 35|PPM 65189|HR 71|J001838.25+313102.0,f|S|A0,0:18:38.26|58.05,31:31:2.02|-2.9,5.88,2000 +HD 1461|SD-08 38|HR 72|J001841.86-080310.8,f|S|G3,0:18:41.87|417.64,-8:3:10.80|-144.2,6.47,2000 +And 26|HD 1438|BD+42 48|J001842.16+434728.1,f|D|B8,0:18:42.17|23.28,43:47:28.11|-2.7,6.11,2000 +HD 1483|CD-43 64|HR 73|J001842.56-431408.0,f|S|K2,0:18:42.56|50.27,-43:14:8.05|-0.1,6.33,2000 +Shemali|Deneb Kaitos Shemali|Cet Iota-8A|V123|SAO 128694|HD 1522|SD-09 48|PPM 182115|HR 74|J001925.67-084926.1,f|D|K1,0:19:25.67|-14.38,-8:49:26.12|-37.8,3.55,2000 +HD 1527|BD+39 56|PPM 42818|HR 75|J001941.55+404346.0,f|S|K1,0:19:41.56|-25.35,40:43:46.06|-19,6.35,2000 +Tuc Zeta|SAO 248163|HD 1581|CP-65 13|PPM 351761|HR 77|J002004.26-645229.2,f|S|F9,0:20:4.26|1707.33,-64:52:29.25|1165.6,4.23,2000 +V128|BD+30 42|PPM 65213|HR 78|J002024.40+305608.2,f|V|B7,0:20:24.40|15.31,30:56:8.21|-0.6,5.88,2000 +BD+48 84|PPM 42833|J002030.92+485807.0,f|S|G0,0:20:30.93|8.07,48:58:7.08|-3.4,6.47,2000 +Psc 41|V132|HD 1635|BD+07 36|PPM 143399|J002035.86+081124.9,f|V|K3,0:20:35.86|-4.45,8:11:24.98|9.6,5.38,2000 +Tuc Pi|SAO 248167|HD 1685|CP-70 12|PPM 351766|HR 83|J002039.03-693729.6,f|S|B9,0:20:39.04|-4.02,-69:37:29.69|-0.6,5.50,2000 +V15075|HD 1632|BD+32 45|PPM 65218|HR 79|J002045.51+325440.2,f|V|K5,0:20:45.52|-29.47,32:54:40.27|-17.3,5.81,2000 +And Rho-27|HD 1671|BD+37 45|PPM 65222|HR 82|J002107.26+375806.9,f|S|F5,0:21:7.27|58.30,37:58:6.97|-39.7,5.16,2000 +SAO 255663|CP-78 9|PPM 366888|HR 87|J002128.78-772536.7,f|S|K3,0:21:28.78|14.24,-77:25:36.74|-6.4,5.97,2000 +Scl Iota|HD 1737|CD-29 86|PPM 242755|HR 84|J002131.19-285853.2,f|S|G5,0:21:31.20|32.80,-28:58:53.29|-71.5,5.17,2000 +T CET|SD-20 50|PPM 242758|HR 85|J002146.27-200328.8,f|V|M5,0:21:46.27|62.70,-20:3:28.89|-12.8,5.72,2000 +Psc 42|HD 1796|BD+12 25|PPM 116394|HR 86|J002225.48+132856.9,f|D|K3,0:22:25.48|63.74,13:28:56.96|22.4,6.25,2000 +Cet 9A|BE CET|SAO 147237|HD 1835|SD-13 60|HR 88|J002251.78-121233.9,f|D|G2,0:22:51.79|394.23,-12:12:33.98|60.5,6.38,2000 +V15084|SAO 147241|HD 1879|SD-16 58|J002304.39-155633.2,f|V|M2,0:23:4.40|76.73,-15:56:33.20|25,6.44,2000 +V0746 CAS|HD 1976|BD+51 62|PPM 25297|HR 91|J002415.65+520111.6,f|D|B5,0:24:15.65|13.66,52:1:11.66|-4.4,5.59,2000 +SAO 128743|SD-03 49|PPM 182216|HR 94|J002429.64-021308.6,f|S|K1,0:24:29.65|-34.47,-2:13:8.63|-42.4,6.08,2000 +BD+13 46|PPM 116422|J002438.15+141855.8,f|S|K0,0:24:38.16|15.12,14:18:55.85|-2.6,6.46,2000 +Cas 12|BD+61 69|HR 93|J002447.50+614951.8,f|S|B9,0:24:47.51|13.67,61:49:51.81|-2.5,5.39,2000 +V159|BD+52 61|HR 96|J002506.41+530248.4,f|V|B9,0:25:6.41|25.79,53:2:48.43|0.3,5.73,2000 +Psc 44|V15087|HD 2114|BD+01 57|PPM 143479|HR 97|J002524.20+015622.8,f|V|G5,0:25:24.21|-14.39,1:56:22.89|-12.9,5.77,2000 +Hyi Beta|V161|HD 2151|CP-77 16|PPM 366918|HR 98|J002545.07-771515.2,f|V|G1,0:25:45.07|2219.86,-77:15:15.28|325.3,2.82,2000 +Phe Kappa|HD 2262|CD-44 101|J002612.20-434047.3,f|S|A7,0:26:12.20|106.09,-43:40:47.39|32.8,3.95,2000 +Ankaa|Nair al Zaurak|Phe Alpha|HD 2261|CD-42 116|HR 99|J002617.05-421821.5,f|S|K0,0:26:17.05|232.74,-42:18:21.53|-353.6,2.40,2000 +V15091|SAO 147275|HD 2268|SD-19 58|J002621.75-184137.0,f|V|M2,0:26:21.75|21.60,-18:41:37.08|-12.1,6.28,2000 +Cet 10|V15093|HD 2273|BD-00 63|J002637.41-000258.3,f|V|G6,0:26:37.41|69.60,-0:2:58.32|1.5,6.20,2000 +SAO 166282|HD 2363|CD-26 138|J002714.70-253249.8,f|S|G8,0:27:14.71|32.89,-25:32:49.81|-15.3,5.98,2000 +HD 2358|BD+15 59|PPM 116467|J002731.06+160131.7,f|D|A7,0:27:31.07|89.82,16:1:31.74|9.9,6.44,2000 +Scl Eta|Eta Sculptoris|SAO 192545|HD 2429|CD-33 152|J002755.69-330025.8,f|S|M4,0:27:55.70|-20.50,-33:0:25.80|-50.4,4.87,2000 +BD+18 51|PPM 116476|J002758.46+193050.5,f|S|K0,0:27:58.47|-22.34,19:30:50.54|-17.3,6.38,2000 +Psc 47|TV PSC|HD 2411|BD+17 55|PPM 116478|J002802.91+175335.2,f|V|M3,0:28:2.92|114.91,17:53:35.25|20.5,5.06,2000 +Psc 48|HD 2436|BD+15 63|PPM 116482|J002812.70+162642.2,f|S|K5,0:28:12.70|18.41,16:26:42.24|-14.6,6.05,2000 +HD 2421|BD+43 92|PPM 42973|J002813.65+442340.0,f|S|A2,0:28:13.65|84.14,44:23:40.03|-15.3,5.19,2000 +HD 2454|BD+09 47|PPM 116483|J002820.05+101123.4,f|S|F6,0:28:20.05|32.77,10:11:23.45|-203.1,6.05,2000 +SAO 166296|HD 2475|SD-21 57|PPM 242868|J002821.09-202006.1,f|D|G0,0:28:21.09|-118.15,-20:20:6.14|-112.7,6.44,2000 +CD-40 93|J002826.52-395454.0,f|S|M0,0:28:26.52|135.99,-39:54:54.01|-41.4,5.42,2000 +HD 2529|CD-51 113|HR 111|J002843.12-503158.2,f|S|K0,0:28:43.13|159.42,-50:31:58.29|-5.3,6.27,2000 +BD+36 66|PPM 65357|J002856.66+365358.9,f|S|G5,0:28:56.66|-4.44,36:53:58.90|-2.8,6.29,2000 +SD-15 84|HR 115|J002951.89-145150.7,f|S|F2,0:29:51.90|147.16,-14:51:50.79|-34,6.15,2000 +Cet 12A|SAO 128791|HD 2637|SD-04 54|PPM 182329|HR 117|J003002.35-035726.3,f|D|M0,0:30:2.36|8.68,-3:57:26.39|-14.5,5.73,2000 +And 28A|GN AND|HD 2628|BD+28 75|PPM 89834|HR 114|J003007.36+294505.6,f|D|A7,0:30:7.37|43.63,29:45:5.60|-57.2,5.22,2000 +HD 2626|BD+59 68|HR 113|J003019.93+595839.1,f|D|B9,0:30:19.93|16.29,59:58:39.20|-3.9,5.95,2000 +SAO 166318|HD 2696|CD-24 179|PPM 242897|HR 118|J003022.65-234715.6,f|S|A5,0:30:22.65|-26.90,-23:47:15.65|14,5.17,2000 +SAO 215119|HD 2726|CD-48 102|J003026.11-481253.6,f|S|F2,0:30:26.12|163.42,-48:12:53.68|-87.3,5.67,2000 +BB PHE|HD 2724|CD-41 116|HR 119|J003027.82-405622.5,f|V|F2,0:30:27.83|-3.29,-40:56:22.51|16.2,6.18,2000 +HD 2589|BD+76 10|PPM 4399|HR 112|J003055.07+770109.8,f|S|K0,0:30:55.08|340.40,77:1:9.86|-34.4,6.19,2000 +Phe Lambda1|SAO 215131|HD 2834|CD-49 115|HR 125|J003124.98-484812.6,f|D|A0,0:31:24.98|140.79,-48:48:12.65|19.5,4.76,2000 +Cas 13|V15102|HD 2729|BD+65 67|PPM 12282|HR 121|J003125.23+663110.6,f|V|B6,0:31:25.23|19.36,66:31:10.62|-3.9,6.18,2000 +HD 2767|BD+32 80|PPM 65391|HR 122|J003125.63+333453.9,f|D|K1,0:31:25.64|49.61,33:34:53.91|-16.3,5.87,2000 +Tuc Beta1|HD 2884|CP-63 50|PPM 351869|HR 126|J003132.66-625729.5,f|D|B9,0:31:32.67|82.52,-62:57:29.58|-54.4,4.34,2000 +Tuc Beta2|HD 2885|CD-63 8|HR 127|J003133.46-625756.0,f|D|A2,0:31:33.47|87.95,-62:57:56.02|-45.8,4.51,2000 +HD 2774|BD+52 92|PPM 25436|HR 124|J003141.15+525022.2,f|S|K2,0:31:41.16|-55.36,52:50:22.30|-13.1,5.60,2000 +Cas Lambda-14|V15106|HD 2772|BD+53 82|PPM 25439|HR 123|J003146.35+543120.2,f|D|B8,0:31:46.36|40.74,54:31:20.24|-14.8,4.74,2000 +Psc 51A|V15113|HD 2913|BD+06 64|PPM 143599|HR 132|J003223.78+065719.6,f|D|B9,0:32:23.78|45.86,6:57:19.67|3.5,5.67,2000 +Psc 52A|BD+19 79|PPM 89892|HR 131|J003235.48+201739.5,f|D|K0,0:32:35.49|136.75,20:17:39.54|-48.1,5.37,2000 +Tuc Beta3|CP-63 52|PPM 351888|HR 136|J003243.90-630153.3,f|D|A0,0:32:43.91|86.12,-63:1:53.40|-49.9,5.07,2000 +HD 2942|BD+27 84|HR 134|J003249.08+281648.8,f|D|K0,0:32:49.09|-4.23,28:16:48.87|6.1,6.28,2000 +Cas Kappa-15|Kappa Cassiopeiae|BD+62 102|J003259.99+625554.4,f|S|B1,0:32:59.99|4.03,62:55:54.42|-2.1,4.19,2000 +HD 2952|BD+54 101|PPM 25465|HR 135|J003310.39+545341.9,f|S|K0,0:33:10.39|70.04,54:53:41.95|-39.4,5.92,2000 +BD+70 24|PPM 4414|HR 129|J003319.26+705854.6,f|D|A0,0:33:19.27|35.39,70:58:54.64|-1.8,6.41,2000 +Tuc Theta|Theta Tucanae|SAO 255679|HD 3112|CP-71 20|PPM 366965|HR 139|J003323.35-711558.4,f|S|A7,0:33:23.36|73.52,-71:15:58.49|-13,6.12,2000 +SAO 166367|CD-30 156|PPM 242961|HR 138|J003341.04-293329.8,f|S|K2,0:33:41.04|-27.92,-29:33:29.80|-29.3,5.55,2000 +Cas 16|BD+65 70|PPM 12315|HR 137|J003424.91+664501.2,f|S|B9,0:34:24.92|23.86,66:45:1.24|-0.3,6.48,2000 +HD 3158|CP-53 117|J003427.83-522223.1,f|S|F3,0:34:27.83|227.75,-52:22:23.12|38.2,5.57,2000 +HD 3166|BD+12 57|PPM 116594|HR 141|J003455.36+132216.0,f|S|K0,0:34:55.36|-74.13,13:22:16.09|-54.5,6.39,2000 +Cet 13A|BU CET|SAO 128839|HD 3196|SD-04 62|HR 142|J003514.88-033534.2,f|D|F8,0:35:14.88|407.65,-3:35:34.26|-36.5,5.20,2000 +Cet 14|SAO 128843|HD 3229|BD-01 68|HR 143|J003532.83-003020.1,f|S|F5,0:35:32.83|143.39,-0:30:20.20|-61.9,5.94,2000 +V219|CP-55 117|HR 148|J003533.33-544918.7,f|V|K0,0:35:33.34|22.47,-54:49:18.74|-51.3,6.06,2000 +Phe Lambda2|SAO 215157|CD-48 121|HR 147|J003541.17-480003.2,f|S|F6,0:35:41.18|47.17,-48:0:3.26|-101.4,5.52,2000 +HD 3268|BD+12 59|PPM 116613|HR 145|J003554.80+131225.4,f|S|F7,0:35:54.80|-133.18,13:12:25.44|-179,6.33,2000 +HD 3325|SD-15 109|J003603.15-145822.9,f|S|G9,0:36:3.16|-64.77,-14:58:22.93|-59.2,6.44,2000 +BG CET|HD 3326|CD-23 220|HR 151|J003606.85-225032.4,f|V|A6,0:36:6.86|-71.47,-22:50:32.40|-50.4,6.06,2000 +BD+53 102|HR 144|J003608.31+541006.4,f|S|B7,0:36:8.31|23.01,54:10:6.42|-1.5,5.09,2000 +HD 3283|BD+59 84|PPM 12343|HR 146|J003627.34+601934.3,f|S|A4,0:36:27.35|3.04,60:19:34.37|-1.1,5.80,2000 +SAO 248225|HD 3444|CP-65 58|PPM 351932|J003637.65-650728.0,f|S|K2,0:36:37.65|41.90,-65:7:28.00|-8.5,6.42,2000 +V15135|HD 3346|BD+43 113|PPM 43119|HR 152|J003646.44+442918.9,f|V|K6,0:36:46.44|-36.70,44:29:18.91|31.8,5.15,2000 +Psc 53|AG PSC|HD 3379|BD+14 76|PPM 116623|HR 155|J003647.31+151354.2,f|V|B2,0:36:47.31|0.87,15:13:54.21|-14.2,5.88,2000 +And Pi-29A|V227|HD 3369|BD+32 101|HR 154|J003652.84+334309.6,f|D|B5,0:36:52.85|15.22,33:43:9.64|-3.6,4.35,2000 +Cas Zeta-17|V225|BD+53 105|PPM 25529|HR 153|J003658.28+535348.8,f|V|B2,0:36:58.28|17.77,53:53:48.87|-9.2,3.68,2000 +HD 3411|BD+23 84|HR 156|J003707.18+240050.8,f|S|K2,0:37:7.19|-18.63,24:0:50.89|-46,6.17,2000 +SAO 232114|HD 3488|CP-55 130|HR 162|J003718.24-542337.7,f|S|K0,0:37:18.25|70.04,-54:23:37.75|-3.8,6.40,2000 +SAO 166418|HD 3443|CD-25 225|HR 159|J003720.70-244602.1,f|D|G8,0:37:20.70|1422.09,-24:46:2.16|-17.1,5.60,2000 +HD 3421|BD+34 86|PPM 65488|HR 157|J003721.21+352358.2,f|S|G2,0:37:21.22|-9.17,35:23:58.20|-3.6,5.43,2000 +HD 3457|BD+02 80|PPM 143688|HR 161|J003730.49+030807.2,f|S|K4,0:37:30.49|90.31,3:8:7.26|-60.2,6.42,2000 +And Epsilon-30|HD 3546|BD+28 103|HR 163|J003833.34+291842.3,f|S|G6,0:38:33.35|-229.42,29:18:42.30|-254.1,4.35,2000 +SAO 166443|CD-25 234|J003848.78-250628.1,f|D|K4,0:38:48.78|56.50,-25:6:28.15|-21.7,6.41,2000 +HD 3574|BD+48 192|PPM 43163|HR 164|J003909.89+492116.5,f|D|K7,0:39:9.89|7.91,49:21:16.52|-2.7,5.44,2000 +And Delta-31A|V15142|HD 3627|BD+30 91|PPM 65514|HR 165|J003919.67+305139.6,f|D|K3,0:39:19.68|115.37,30:51:39.69|-83.1,3.27,2000 +Psc 54|V245|HD 3651|BD+20 85|HR 166|J003921.80+211501.7,f|D|K0,0:39:21.81|-461.06,21:15:1.70|-370.9,5.88,2000 +V235|BD+81 13|PPM 118|HR 158|J003947.24+822937.5,f|V|F5,0:39:47.25|-113.67,82:29:37.55|77.2,6.40,2000 +SAO 215185|CD-45 201|HR 171|J003951.94-444746.6,f|S|K1,0:39:51.95|42.68,-44:47:46.65|16.7,6.00,2000 +Psc 55|BD+20 87|HR 167|J003955.57+212618.5,f|D|K0,0:39:55.57|28.48,21:26:18.58|-28.5,5.43,2000 +SAO 232143|HD 3823|CP-60 46a|HR 176|J004025.66-592716.5,f|S|G1,0:40:25.67|883.24,-59:27:16.58|443.1,5.90,2000 +SAO 147395|HD 3794|SD-17 109|HR 172|J004028.58-163100.0,f|D|G5,0:40:28.58|41.99,-16:31:0.03|-32.3,6.49,2000 +Schedar|Cas Alpha-18A|Alpha Cassiopeiae|HD 3712|BD+55 139|PPM 25578|HR 168|J004030.44+563214.3,f|D|K0,0:40:30.44|50.37,56:32:14.39|-32.2,2.25,2000 +SAO 166475|HD 3795|CD-24 263|HR 173|J004032.80-234817.5,f|S|G3,0:40:32.81|635.55,-23:48:17.55|-363.3,6.15,2000 +V15147|SAO 128891|SD-05 101|PPM 182517|HR 174|J004042.37-042106.6,f|D|K0,0:40:42.37|-15.26,-4:21:6.63|-14.5,5.90,2000 +And 32|HD 3817|BD+38 90|PPM 65538|HR 175|J004107.18+392731.1,f|S|G8,0:41:7.18|-14.36,39:27:31.19|-3,5.31,2000 +Phe Mu|SAO 215194|HD 3919|CD-46 180|J004119.55-460506.0,f|S|G8,0:41:19.55|-28.92,-46:5:6.03|1,4.60,2000 +V258|HD 3883|BD+23 94|HR 178|J004136.04+243744.4,f|D|A7,0:41:36.04|104.72,24:37:44.43|-23.4,6.06,2000 +Phe Xi|Xi Phoenicis|SAO 232152|CP-57 143|HR 183|J004146.39-563004.7,f|D|Ap,0:41:46.40|90.16,-56:30:4.74|57.3,5.71,2000 +HD 3856|BD+65 83|HR 177|J004203.42+660851.3,f|S|G9,0:42:3.42|-9.77,66:8:51.33|-8.6,5.82,2000 +Cas Xi-19|V260|BD+49 164|HR 179|J004203.89+503045.0,f|V|B2,0:42:3.90|12.30,50:30:45.09|-6.5,4.81,2000 +Tuc Rho|SAO 248237|CP-66 47|HR 187|J004228.37-652804.9,f|S|F6,0:42:28.37|54.12,-65:28:4.91|41.1,5.39,2000 +HD 3924|BD+57 132|PPM 25613|HR 181|J004231.04+584512.2,f|S|B9,0:42:31.04|29.41,58:45:12.28|-8.5,6.18,2000 +SAO 248238|CP-60 48|PPM 351984|HR 186|J004241.94-601546.1,f|S|K5,0:42:41.95|263.69,-60:15:46.11|-51.7,5.99,2000 +Scl Lambda1|CD-39 175|PPM 276292|HR 185|J004242.89-382748.5,f|D|A0,0:42:42.89|2.47,-38:27:48.54|-6.3,6.08,2000 +Phe Eta|SAO 232162|CP-58 42|HR 191|J004321.23-572747.0,f|D|A0,0:43:21.24|-5.16,-57:27:47.02|15.5,4.37,2000 +Cas Pi-20|Pi Cassiopeiae|BD+46 146|HR 184|J004328.06+470128.3,f|S|A5,0:43:28.07|-24.54,47:1:28.37|-37.2,4.96,2000 +Diphda|Deneb Kaitos|Difda al Thani|Rana Secunda|Cet Beta-16|V272|HD 4128|SD-18 115|HR 188|J004335.37-175911.7,f|V|G9,0:43:35.37|232.84,-17:59:11.78|32.7,2.05,2000 +SAO 147422|HD 4145|SD-12 126|J004350.08-120042.5,f|S|K2,0:43:50.09|-0.88,-12:0:42.52|-207.8,6.00,2000 +Cet Phi-17|V278|SAO 147423|HD 4188|SD-11 128|HR 194|J004411.40-103634.3,f|V|K0,0:44:11.40|-6.93,-10:36:34.38|-113.9,4.77,2000 +Scl Lambda2|HD 4211|CD-39 181|PPM 276315|HR 195|J004412.09-382518.0,f|S|K1,0:44:12.10|247.02,-38:25:18.07|120.7,5.90,2000 +HD 4142|BD+47 181|PPM 43261|HR 189|J004426.19+475150.3,f|S|B5,0:44:26.19|-39.75,47:51:50.34|8.5,5.66,2000 +SAO 248243|HD 4294|CP-63 72|HR 199|J004431.65-622951.3,f|D|F5,0:44:31.65|103.14,-62:29:51.33|6.3,6.06,2000 +Cas Omicron-22|Omicron Cassiopeiae|BD+47 183|PPM 43265|HR 193|J004443.51+481703.7,f|D|B5,0:44:43.52|17.77,48:17:3.71|-7.6,4.48,2000 +SAO 166528|HD 4247|CD-22 239|PPM 243183|HR 197|J004444.39-220022.0,f|S|F1,0:44:44.40|-66.06,-22:0:22.09|81.2,5.23,2000 +SAO 215221|HD 4293|CD-43 207|HR 198|J004457.05-424035.6,f|S|F0,0:44:57.05|-89.11,-42:40:35.61|-96.1,5.94,2000 +SAO 232168|CP-54 166|J004459.94-534253.6,f|S|F7,0:44:59.94|223.44,-53:42:53.62|2.2,6.15,2000 +HD 4222|BD+54 143|PPM 25648|HR 196|J004517.17+551317.0,f|D|A2,0:45:17.17|-28.32,55:13:17.02|-5.3,5.42,2000 +V15165|SAO 128935|SD-05 120|PPM 182626|J004524.12-043744.9,f|V|M0,0:45:24.13|37.08,-4:37:44.98|37.7,6.14,2000 +Cet 18A|SAO 147432|SD-13 128|J004528.68-125250.9,f|D|G0,0:45:28.69|-32.32,-12:52:50.91|-205.7,6.15,2000 +Cas 21|YZ CAS|HD 4161|BD+74 27|PPM 4492|HR 192|J004539.07+745917.0,f|D|A2,0:45:39.08|-14.92,74:59:17.06|-21.9,5.65,2000 +SAO 147436|HD 4338|SD-17 132|J004541.70-162527.1,f|D|F1,0:45:41.71|12.09,-16:25:27.19|-6.1,6.50,2000 +SAO 215232|HD 4391|CD-48 176|J004545.59-473307.1,f|D|G1,0:45:45.59|183.95,-47:33:7.15|78.4,5.80,2000 +HD 4335|BD+44 160|PPM 43294|J004610.81+445141.3,f|S|B9,0:46:10.81|17.65,44:51:41.39|-4.6,6.03,2000 +SAO 166555|HD 4398|CD-23 293|PPM 243215|J004611.75-223119.5,f|S|G3,0:46:11.75|197.17,-22:31:19.55|-12.3,5.50,2000 +Psc 57|V293|BD+14 111|PPM 116756|HR 211|J004632.95+152831.8,f|V|M4,0:46:32.96|-29.49,15:28:31.82|-44.2,5.41,2000 +HD 4295|BD+68 49|PPM 12459|J004638.50+691931.4,f|S|F3,0:46:38.51|166.87,69:19:31.47|15.3,6.40,2000 +HD 4362|BD+58 101|J004642.45+593428.3,f|S|G0,0:46:42.46|-5.93,59:34:28.34|-0.9,6.41,2000 +Psc 58|HD 4482|BD+11 96|PPM 116764|HR 213|J004701.45+115825.8,f|S|G8,0:47:1.46|53.85,11:58:25.86|-35.1,5.51,2000 +Psc 59|XX PSC|BD+18 101|PPM 116766|HR 214|J004713.62+193443.3,f|V|F0,0:47:13.63|107.69,19:34:43.33|6.7,6.12,2000 +And Zeta-34A|Zeta Andromedae|BD+23 106|HR 215|J004720.32+241601.8,f|D|K1,0:47:20.33|-101.19,24:16:1.84|-81.9,4.09,2000 +Psc 60|HD 4526|BD+05 104|PPM 143892|HR 216|J004723.63+064427.4,f|S|G8,0:47:23.63|14.45,6:44:27.44|-10.3,5.98,2000 +SAO 147451|HD 4585|SD-18 127|HR 218|J004743.22-180340.8,f|S|K3,0:47:43.22|30.23,-18:3:40.82|34.4,5.70,2000 +Cas 23|HD 4382|BD+74 29|J004746.05+745051.2,f|S|B8,0:47:46.05|15.02,74:50:51.26|-5.9,5.43,2000 +SAO 166585|HD 4622|SD-22 134|PPM 243252|J004801.06-214320.9,f|S|B9,0:48:1.07|24.94,-21:43:20.97|-7.2,5.57,2000 +BD+71 37|HR 212|J004809.13+724028.1,f|S|K0,0:48:9.14|133.70,72:40:28.13|9.9,5.86,2000 +Psc 62|HD 4627|BD+06 105|HR 221|J004817.41+071759.7,f|S|G8,0:48:17.41|111.59,7:17:59.74|3.4,5.92,2000 +HD 4628|BD+04 123|HR 222|J004822.97+051650.2,f|D|K2,0:48:22.98|758.02,5:16:50.21|-1141.3,5.75,2000 +Hyi Lambda|HD 4815|CP-75 64|HR 236|J004835.41-745524.3,f|S|K5,0:48:35.42|133.20,-74:55:24.38|-34.6,5.08,2000 +Psc Delta-63|HD 4656|BD+06 107|PPM 143916|HR 224|J004840.94+073506.2,f|D|K4,0:48:40.94|83.12,7:35:6.29|-50.5,4.42,2000 +Cas Nu-25|V302|HD 4636|BD+50 147|PPM 25711|HR 223|J004850.02+505805.4,f|V|B9,0:48:50.02|30.32,50:58:5.40|-9.8,4.91,2000 +SAO 215245|HD 4737|CD-47 229|HR 229|J004856.72-464151.5,f|S|G8,0:48:56.73|-10.60,-46:41:51.53|20.8,6.28,2000 +Psc 64A|HD 4676|BD+16 76|PPM 116793|HR 225|J004858.70+165626.3,f|D|F8,0:48:58.71|-2.30,16:56:26.32|-201.6,5.07,2000 +Cas Eta-24A|Eta Cassiopeiae|HD 4614|BD+57 150|PPM 25718|HR 219|J004906.29+574854.6,f|D|F9,0:49:6.29|1087.09,57:48:54.67|-559.7,3.45,2000 +HD 4732|CD-24 345|PPM 243277|HR 228|J004913.94-240812.0,f|D|K2,0:49:13.95|77.48,-24:8:12.02|-59.6,5.90,2000 +SAO 147464|SD-14 145|HR 227|J004925.61-133340.5,f|D|K5,0:49:25.62|103.38,-13:33:40.59|-105.8,5.60,2000 +HD 4772|CD-24 347|PPM 243285|HR 232|J004933.42-232143.7,f|S|A3,0:49:33.43|-12.26,-23:21:43.72|-14.2,6.29,2000 +And Nu-35|V15178|HD 4727|BD+40 171|PPM 43365|HR 226|J004948.84+410444.0,f|V|B5,0:49:48.85|22.73,41:4:44.08|-18.1,4.54,2000 +Psc 65B|HD 4757|BD+26 131|J004952.87+274238.9,f|D|F4,0:49:52.87|87.78,27:42:38.90|-11.9,5.55,2000 +Psc 65A|HD 4758|BD+26 131|HR 231|J004953.16+274237.0,f|D|F5,0:49:53.17|86.58,27:42:37.03|-10.2,5.55,2000 +AZ PHE|SAO 215254|HD 4849|CD-44 216|HR 239|J005003.76-432341.7,f|V|A9,0:50:3.77|13.41,-43:23:41.72|9.7,6.48,2000 +Cet Phi-19|V316|HD 4813|SD-11 153|HR 235|J005007.59-103839.5,f|V|F7,0:50:7.59|-224.67,-10:38:39.57|-228.4,5.17,2000 +GO AND|HD 4778|BD+44 176|PPM 43369|HR 234|J005018.26+450008.1,f|V|A0,0:50:18.26|60.77,45:0:8.13|6.9,6.13,2000 +Phe Rho|Rho Phoenicis|HD 4919|CD-51 209|HR 242|J005041.18-505912.5,f|S|F2,0:50:41.19|62.98,-50:59:12.54|44.7,5.23,2000 +V317|HD 4775|BD+63 99|PPM 12515|HR 233|J005043.61+641451.1,f|D|G0,0:50:43.61|29.39,64:14:51.18|-12.9,5.37,2000 +V0526 CAS|HD 4818|BD+50 161|PPM 25752|HR 238|J005057.39+513028.9,f|V|F2,0:50:57.40|137.99,51:30:28.92|-0.5,6.37,2000 +V319|HD 4817|BD+61 178|PPM 12522|HR 237|J005116.38+614819.7,f|V|K2,0:51:16.38|-2.06,61:48:19.78|-1.9,6.07,2000 +HD 4928|BD+02 118|PPM 143981|HR 243|J005118.32+032306.0,f|S|K0,0:51:18.32|22.16,3:23:6.07|-63.6,6.38,2000 +HD 4881|BD+50 164|PPM 25762|HR 241|J005133.78+513417.1,f|S|B9,0:51:33.79|-3.17,51:34:17.14|-11,6.22,2000 +SAO 166647|CD-24 376|PPM 243345|HR 247|J005240.62-240021.0,f|D|K2,0:52:40.62|37.27,-24:0:21.04|33.6,5.47,2000 +Cet 20|HD 5112|BD-01 114|HR 248|J005300.49-010839.3,f|S|M0,0:53:0.49|6.45,-1:8:39.34|-16.3,4.76,2000 +BD+60 124|HR 244|J005304.19+610726.2,f|D|F8,0:53:4.20|-68.45,61:7:26.29|169.7,4.80,2000 +SAO 166652|CD-25 338B|J005312.51-244631.3,f|D|A0,0:53:12.52|104.46,-24:46:31.36|40,6.44,2000 +HD 5118|BD+36 148|PPM 65736|HR 249|J005328.22+372505.5,f|S|K5,0:53:28.22|11.20,37:25:5.55|-44.4,6.06,2000 +BQ TUC|SAO 248276|HD 5276|CP-63 83|HR 257|J005337.87-625216.8,f|V|M4,0:53:37.87|74.42,-62:52:16.87|0.7,5.75,2000 +HD 5128|BD+51 179|J005347.59+524121.4,f|D|A5,0:53:47.60|75.19,52:41:21.46|-21,6.31,2000 +Cet 21|HD 5268|SD-09 181|HR 255|J005417.59-084426.3,f|S|G5,0:54:17.59|17.05,-8:44:26.38|-47.3,6.16,2000 +Psc 66A|HD 5267|BD+18 122|PPM 116875|HR 254|J005435.22+191118.3,f|D|A1,0:54:35.23|11.05,19:11:18.30|-7.7,5.80,2000 +HD 4853|BD+82 20|PPM 161|J005453.09+834226.7,f|S|A4,0:54:53.09|62.00,83:42:26.77|-10.7,5.59,2000 +And 36A|V343|HD 5286|BD+22 146|HR 258|J005458.10+233742.0,f|D|K1,0:54:58.11|137.01,23:37:42.01|-45.6,5.50,2000 +Cas Upsilon-26A|HD 5234|BD+58 134|PPM 25833|HR 253|J005500.15+585821.7,f|D|K2,0:55:0.16|-32.24,58:58:21.71|-40.7,4.82,2000 +Tuc Lambda2|SAO 248281|HD 5457|CP-70 40|J005500.31-693137.5,f|S|K2,0:55:0.31|7.92,-69:31:37.50|-43.4,5.46,2000 +V15198|HD 5273|BD+47 242|PPM 43449|HR 256|J005505.20+484042.6,f|V|M2,0:55:5.20|-23.47,48:40:42.67|-11.6,6.29,2000 +V346|HD 5316|BD+23 126|HR 259|J005514.67+243325.4,f|V|M4,0:55:14.67|23.47,24:33:25.42|-14.1,6.24,2000 +HD 5384|SD-08 167|PPM 182831|HR 263|J005542.40-072049.7,f|S|K5,0:55:42.40|-6.99,-7:20:49.74|-44.8,5.87,2000 +V15206|SAO 166686|HD 5445|CD-28 288|HR 268|J005555.53-274633.0,f|V|M0,0:55:55.54|10.75,-27:46:33.02|-5.1,6.12,2000 +Psc 67|HD 5382|BD+26 151|HR 262|J005558.50+271233.7,f|S|A5,0:55:58.51|-19.88,27:12:33.77|11.1,6.08,2000 +Cet Phi-22|SAO 147519|HD 5437|SD-12 162|HR 267|J005601.49-111559.4,f|S|K4,0:56:1.49|-26.77,-11:15:59.49|-8,5.34,2000 +HD 5418|BD+13 127|PPM 116896|J005609.12+135707.0,f|S|G5,0:56:9.12|-1.89,13:57:7.06|-2.9,6.44,2000 +HD 5343|BD+57 172|PPM 25849|J005612.97+575947.6,f|S|K3,0:56:12.97|41.81,57:59:47.61|-15.9,6.19,2000 +Cas Upsilon-28|HD 5395|BD+58 138|PPM 25854|HR 265|J005639.90+591051.8,f|S|G8,0:56:39.91|-92.60,59:10:51.80|-45.3,4.63,2000 +Cas Gamma-27A|Gamma Cassiopeiae|HD 5394|BD+59 144|PPM 12597|HR 264|J005642.53+604300.2,f|D|B0,0:56:42.53|25.68,60:43:0.27|-3.8,2.18,2000 +And Mu-37A|HD 5448|BD+37 175|PPM 65785|HR 269|J005645.21+382957.6,f|D|A5,0:56:45.21|152.73,38:29:57.64|36.8,3.87,2000 +BD+59 146|HR 266|J005646.97+602146.0,f|D|B9,0:56:46.97|27.37,60:21:46.21|-4.8,5.55,2000 +HD 5357|BD+67 81|HR 261|J005655.14+684632.3,f|S|F4,0:56:55.15|97.58,68:46:32.37|-35.1,6.39,2000 +And Eta-38|HD 5516|BD+22 153|HR 271|J005712.40+232503.5,f|D|G8,0:57:12.40|-43.77,23:25:3.53|-46.1,4.40,2000 +HD 5459|BD+60 137|PPM 12611|J005719.60+612518.8,f|S|G8,0:57:19.61|59.99,61:25:18.82|-15.5,6.44,2000 +HD 5526|BD+45 237|HR 272|J005739.64+455021.7,f|S|K2,0:57:39.65|11.29,45:50:21.76|-6.6,6.09,2000 +Psc 68|HD 5575|BD+28 157|HR 274|J005750.15+285931.9,f|S|G5,0:57:50.15|5.25,28:59:31.98|-7.8,5.43,2000 +HD 5612|BD+12 119|PPM 116929|HR 276|J005754.51+134145.1,f|S|G8,0:57:54.51|-5.98,13:41:45.11|-5.8,6.29,2000 +BD+33 140|PPM 65815|HR 275|J005814.21+335703.1,f|S|K0,0:58:14.22|35.21,33:57:3.18|-71.9,5.99,2000 +HD 5641|BD+20 131|HR 277|J005818.89+212416.1,f|D|A2,0:58:18.89|-9.64,21:24:16.18|-3.5,6.46,2000 +SAO 248293|HD 5771|CP-61 50|PPM 352122|HR 281|J005822.22-604146.4,f|S|A3,0:58:22.23|42.14,-60:41:46.46|23.3,6.24,2000 +BD+65 115|PPM 12628|HR 273|J005831.06+662106.4,f|S|A0,0:58:31.06|43.44,66:21:6.46|-13.2,5.97,2000 +Scl Alpha|Alpha Sculptoris|SAO 166716|HD 5737|CD-30 297|PPM 243446|J005836.36-292126.8,f|S|B7,0:58:36.36|22.49,-29:21:26.82|6.3,4.31,2000 +Cet Phi-23|SAO 147546|HD 5722|SD-12 173|HR 279|J005843.86-112247.9,f|S|G7,0:58:43.87|-33.23,-11:22:47.91|-15,5.62,2000 +WW PSC|BD+05 131|PPM 144137|HR 284|J005949.68+062859.6,f|D|M2,0:59:49.69|20.12,6:28:59.61|-5.3,6.16,2000 +HD 5789|BD+43 193A|HR 283|J010003.55+444247.6,f|D|B9,1:0:3.56|14.71,44:42:47.67|-25.2,6.07,2000 +HD 5715|BD+70 65|HR 278|J010031.00+705858.7,f|S|A4,1:0:31.00|76.69,70:58:58.76|-6.5,6.40,2000 +Scl Xi|CD-39 260|PPM 276598|HR 288|J010118.27-385459.4,f|S|K0,1:1:18.28|66.99,-38:54:59.50|49.9,5.59,2000 +HD 5927|BD+48 320|J010127.04+493239.1,f|D|G5,1:1:27.04|4.38,49:32:39.19|-2.7,6.48,2000 +SAO 147572|SD-17 180|J010138.64-161556.0,f|S|K2,1:1:38.64|72.00,-16:15:56.06|-91.6,6.47,2000 +Phe Omega|SAO 232268|HD 6192|CP-57 220|HR 295|J010201.82-570008.6,f|S|G8,1:2:1.82|6.45,-57:0:8.60|16.5,6.10,2000 +BD+50 202|PPM 25939|HR 287|J010218.46+510205.7,f|S|A3,1:2:18.46|-4.15,51:2:5.78|-13.4,6.48,2000 +Scl Sigma|ig Scl|SAO 192884|HD 6178|CD-32 410|PPM 276619|HR 293|J010226.43-313307.2,f|S|A2,1:2:26.43|81.04,-31:33:7.22|15.3,5.51,2000 +CC TUC|HD 6311|CP-66 80|PPM 352172|J010242.90-652721.9,f|V|M2,1:2:42.91|8.54,-65:27:21.97|3.7,6.29,2000 +Psc Sigma-69|HD 6118|BD+31 168|PPM 65899|HR 291|J010249.09+314815.3,f|S|B9,1:2:49.10|15.55,31:48:15.35|-30.4,5.50,2000 +SAO 215343|HD 6245|CD-47 313|HR 299|J010249.18-462350.3,f|S|G8,1:2:49.19|-2.17,-46:23:50.32|11,5.39,2000 +And 39|HD 6116|BD+40 209|PPM 43575|J010254.26+412042.5,f|D|A5,1:2:54.26|-17.00,41:20:42.57|-17,5.94,2000 +Psc Epsilon-71|HD 6186|BD+07 153|HR 294|J010256.60+075324.4,f|S|G9,1:2:56.61|-80.53,7:53:24.49|25.9,4.28,2000 +Cet 25|SD-05 177|PPM 182973|HR 296|J010302.53-045011.7,f|D|K0,1:3:2.54|-117.03,-4:50:11.76|-102.9,5.40,2000 +SAO 166774|HD 6269|CD-30 325|PPM 243529|J010317.69-293133.0,f|S|G5,1:3:17.70|-102.72,-29:31:33.05|-31.8,6.29,2000 +BD+60 157|PPM 12695|HR 292|J010337.00+610429.3,f|D|F0,1:3:37.01|-1.52,61:4:29.36|-3,5.96,2000 +Cet 26A|HD 6288|BD+00 174|PPM 144221|J010349.02+012200.6,f|D|F1,1:3:49.03|122.37,1:22:0.65|-40.7,6.08,2000 +HD 6211|BD+51 220|PPM 25973|HR 298|J010402.38+523007.7,f|S|K2,1:4:2.39|1.46,52:30:7.78|-61,5.99,2000 +BD+60 158|HR 297|J010419.45+613448.6,f|S|F6,1:4:19.45|-79.88,61:34:48.66|-24.8,5.84,2000 +BD+28 174|J010427.62+293931.7,f|S|F7,1:4:27.63|85.12,29:39:31.70|-120.3,6.21,2000 +CD-34 411|PPM 276665|J010432.57-333158.2,f|D|K0,1:4:32.58|-44.26,-33:31:58.24|-23.5,6.46,2000 +Psc 73|HD 6386|BD+04 172|PPM 144243|J010452.63+053922.5,f|S|K5,1:4:52.64|29.11,5:39:22.54|-16.3,6.02,2000 +Psc 72|HD 6397|BD+14 163|J010505.35+145646.0,f|D|F4,1:5:5.36|6.96,14:56:46.08|53.3,5.64,2000 +Cet 27|HD 6482|SD-10 229|HR 315|J010536.88-095845.5,f|S|K0,1:5:36.88|-30.43,-9:58:45.56|-34.2,6.10,2000 +Psc Psi-74A|V397|HD 6456|BD+20 156|J010540.95+212823.4,f|D|A1,1:5:40.96|44.25,21:28:23.45|-14.3,5.32,2000 +Psc Psi-74B|HD 6457|BD+20 157|HR 311|J010541.71+212755.5,f|D|A0,1:5:41.71|53.88,21:27:55.59|-12.6,5.54,2000 +Psc 77A|HD 6479|BD+04 175|PPM 144254|HR 313|J010549.22+045430.1,f|D|F3,1:5:49.23|11.81,4:54:30.14|-119.3,6.35,2000 +Phe Beta|V400|SAO 215365|HD 6595|CD-47 324|HR 322|J010605.04-464306.2,f|D|G8,1:6:5.05|-70.14,-46:43:6.29|31.6,3.32,2000 +Cet 28|SD-10 230|HR 317|J010605.14-095021.6,f|S|A1,1:6:5.15|31.04,-9:50:21.68|5.9,5.58,2000 +SAO 166799|HD 6559|CD-24 484|PPM 243576|J010607.70-235932.8,f|S|G8,1:6:7.70|-40.97,-23:59:32.82|-33.6,6.12,2000 +HD 6476|BD+31 180|PPM 65954|J010611.20+321053.3,f|D|K3,1:6:11.20|7.36,32:10:53.35|-23.5,6.27,2000 +Psc 75|HD 6557|BD+12 135|HR 319|J010633.62+125721.7,f|S|G8,1:6:33.63|13.74,12:57:21.74|27.1,6.14,2000 +HD 6497|BD+56 196|HR 316|J010700.17+565605.9,f|S|K2,1:7:0.17|93.95,56:56:5.90|-108.6,6.41,2000 +BD+52 262|HR 318|J010709.45+532953.4,f|D|K2,1:7:9.46|16.86,53:29:53.47|-3.3,6.29,2000 +SAO 166814|HD 6668|CD-24 496|HR 325|J010712.92-235946.8,f|S|A7,1:7:12.92|74.41,-23:59:46.80|-31.8,6.36,2000 +Tuc Iota|Iota Tucanae|SAO 248324|HD 6793|CP-62 89|HR 332|J010718.66-614631.0,f|S|G5,1:7:18.66|73.78,-61:46:31.04|-11.2,5.35,2000 +Cet 30|SAO 147622|SD-10 238|HR 329|J010746.20-094707.9,f|S|F7,1:7:46.21|149.00,-9:47:7.98|17,5.71,2000 +Phe Upsilon|SAO 215374|HD 6767|CD-42 391|HR 331|J010747.85-412912.9,f|D|A3,1:7:47.86|38.43,-41:29:12.98|2.4,5.21,2000 +Psc Psi-79|HD 6695|BD+19 185|HR 328|J010757.16+204420.8,f|S|A3,1:7:57.16|85.43,20:44:20.80|-85.8,5.57,2000 +Cet 29|HD 6734|BD+01 212|PPM 144298|J010759.66+015934.9,f|S|K0,1:7:59.66|143.46,1:59:34.95|-432.9,6.46,2000 +And 41|HD 6658|BD+43 234|PPM 43666|HR 324|J010800.84+435631.5,f|S|A3,1:8:0.85|160.93,43:56:31.53|-61.3,5.04,2000 +Psc 78|BD+31 185|PPM 65983|HR 327|J010801.34+320043.6,f|S|F5,1:8:1.34|203.76,32:0:43.67|-25.6,6.23,2000 +Marfak|Cas Mu-30A|V405|HD 6582|BD+54 223|HR 321|J010816.39+545513.2,f|D|G5,1:8:16.39|3421.91,54:55:13.22|-1600.4,5.17,2000 +Psc 80A|V410|HD 6763|BD+04 190|J010822.19+053859.3,f|D|F0,1:8:22.20|-248.39,5:38:59.35|-165.5,5.51,2000 +Phe Zeta|Zeta Phoenicis|HD 6882|CP-55 241|HR 338|J010823.08-551444.7,f|D|B6,1:8:23.08|21.21,-55:14:44.74|29.7,3.98,2000 +HD 6676|BD+57 200|HR 326|J010833.46+581548.4,f|S|B8,1:8:33.47|17.12,58:15:48.42|-12.4,5.78,2000 +Deneb Algenubi|Cet Eta-31A|SAO 147632|SD-10 240|HR 334|J010835.39-101056.1,f|D|K2,1:8:35.39|215.85,-10:10:56.15|-138.3,3.46,2000 +HD 5848|BD+85 19|HR 285|J010844.87+861525.5,f|S|K2,1:8:44.88|80.34,86:15:25.52|-11.4,4.24,2000 +HD 6473|BD+79 29|HR 312|J010912.18+800041.6,f|S|A5,1:9:12.19|-30.96,80:0:41.69|-40,6.24,2000 +And Phi-42A|V15249|HD 6811|BD+46 275|PPM 43693|HR 335|J010930.12+471430.4,f|D|B7,1:9:30.13|3.77,47:14:30.45|-13,4.26,2000 +Mirak|Al Mizar|And Beta-43A|V414|BD+34 198|HR 337|J010943.92+353714.0,f|D|M0,1:9:43.92|175.58,35:37:14.01|-112.2,2.08,2000 +Psc Psi-81|BD+18 153|HR 339|J010949.20+193930.2,f|S|G0,1:9:49.20|-4.66,19:39:30.27|9.3,5.56,2000 +SAO 232324|CP-58 81|J011007.37-574139.9,f|S|G6,1:10:7.37|-2.89,-57:41:39.91|-114.7,6.42,2000 +HD 6966|BD+14 175|HR 344|J011011.44+154026.0,f|S|M0,1:10:11.44|20.36,15:40:26.08|-24.5,6.05,2000 +Cet 32|SAO 129154|HD 6976|SD-09 227|PPM 183112|HR 346|J011011.94-085422.0,f|S|K0,1:10:11.95|-19.56,-8:54:22.09|-39.2,6.39,2000 +And 44|BD+41 219|J011018.74+420453.3,f|S|F8,1:10:18.74|-135.82,42:4:53.31|-41.9,5.67,2000 +HD 6953|BD+24 186|HR 341|J011019.45+252727.9,f|S|K7,1:10:19.45|2.98,25:27:27.95|-113.8,5.80,2000 +Cet 33|V422|BD+01 221|PPM 144336|HR 347|J011033.55+022644.4,f|V|K4,1:10:33.55|-8.69,2:26:44.41|-15.9,5.95,2000 +Cas 31|HD 6829|BD+68 77|HR 336|J011039.32+684643.0,f|S|A0,1:10:39.32|35.24,68:46:43.03|-27.5,5.32,2000 +Cas Theta-33A|V423|HD 6961|BD+54 236|HR 343|J011106.16+550859.6,f|D|A7,1:11:6.16|226.63,55:8:59.64|-19.3,4.34,2000 +Psc 82|BD+30 181|HR 349|J011106.76+312529.0,f|S|F0,1:11:6.77|-8.70,31:25:29.05|-12,5.16,2000 +And 45|BD+36 201|HR 348|J011110.27+374326.8,f|D|B7,1:11:10.28|-15.54,37:43:26.84|-7,5.79,2000 +V424|BD+63 149|PPM 12787|HR 342|J011125.57+641209.6,f|V|B9,1:11:25.57|40.93,64:12:9.64|-19.3,5.56,2000 +Psc Chi-84|BD+20 172|HR 351|J011127.22+210204.7,f|S|G8,1:11:27.22|41.72,21:2:4.74|-10.6,4.66,2000 +BD+09 138|PPM 117123|J011128.97+101730.8,f|S|G8,1:11:28.97|10.92,10:17:30.87|-6.1,6.50,2000 +Psc Tau-83|BD+29 190|HR 352|J011139.63+300522.6,f|S|K0,1:11:39.64|74.24,30:5:22.70|-37.6,4.52,2000 +Cas 32|RU CAS|HD 6972|BD+64 127|PPM 12792|HR 345|J011141.40+650107.8,f|V|B9,1:11:41.40|23.88,65:1:7.87|-12.9,5.57,2000 +Cet 34|SAO 129169|HD 7147|SD-03 161|PPM 183147|HR 353|J011143.50-021503.8,f|S|K4,1:11:43.51|-57.86,-2:15:3.88|-22.2,5.93,2000 +HD 6798|BD+78 34|PPM 4627|HR 333|J011216.82+794026.2,f|S|A3,1:12:16.82|95.83,79:40:26.27|-4.9,5.59,2000 +HD 7158|BD+44 261|PPM 43748|HR 355|J011234.08+452015.1,f|S|M1,1:12:34.08|24.04,45:20:15.11|21,6.13,2000 +AI SCL|HD 7312|CD-38 420|HR 359|J011245.43-375123.3,f|V|F0,1:12:45.43|88.94,-37:51:23.32|-30.8,5.94,2000 +HD 7229|BD+29 195|HR 356|J011259.47+300351.2,f|D|G9,1:12:59.47|21.94,30:3:51.23|-32.3,6.23,2000 +V0761 CAS|HD 7157|BD+60 186|PPM 12817|HR 354|J011309.85+614222.2,f|D|B9,1:13:9.85|29.15,61:42:22.28|-6.4,6.45,2000 +Psc Zeta-86A|V15259|HD 7344|BD+06 174|HR 361|J011343.88+073431.2,f|D|A7,1:13:43.89|141.70,7:34:31.27|-55.6,5.20,2000 +Psc Phi-85A|HD 7318|BD+23 158|J011344.94+243501.3,f|D|K0,1:13:44.95|18.55,24:35:1.37|-21.3,4.67,2000 +Psc Zeta-86B|V442|HD 7345|BD+06 175|PPM 144381|HR 362|J011345.26+073441.7,f|D|F7,1:13:45.27|154.49,7:34:41.74|-47.1,6.23,2000 +DT PSC|HD 7351|BD+27 196|HR 363|J011404.90+283146.4,f|V|S3,1:14:4.91|63.13,28:31:46.47|-53.8,6.36,2000 +Psc 87|V445|HD 7374|BD+15 177|PPM 117157|HR 364|J011407.62+160800.5,f|V|B8,1:14:7.63|-30.55,16:8:0.52|-26.2,5.97,2000 +Cet 37A|V446|SAO 129193|HD 7439|SD-08 216|PPM 183194|HR 366|J011424.03-075522.1,f|D|F5,1:14:24.04|123.61,-7:55:22.17|277.6,5.15,2000 +Psc 88|HD 7446|BD+06 181|HR 367|J011442.39+065942.4,f|S|G5,1:14:42.39|-13.70,6:59:42.49|-24.7,6.04,2000 +Cet 38|SAO 129196|HD 7476|BD-01 162|PPM 174869|HR 368|J011449.17-005825.6,f|D|F5,1:14:49.17|-14.55,-0:58:25.66|205.5,5.70,2000 +Phe Nu|SAO 215428|CD-46 346|J011511.12-453153.9,f|D|F8,1:15:11.12|664.51,-45:31:53.99|178.1,4.97,2000 +Tuc Kappa|V454|SAO 248346|HD 7788|CP-69 45A|PPM 352298|HR 377|J011546.16-685233.3,f|D|F6,1:15:46.16|411.11,-68:52:33.34|127.5,4.25,2000 +V0762 CAS|HD 7389|BD+70 90|PPM 4642|HR 365|J011611.90+714437.8,f|V|K1,1:16:11.91|-1.60,71:44:37.86|-1.2,5.91,2000 +HD 6319|BD+86 17|PPM 232|J011613.19+870843.7,f|S|K5,1:16:13.19|49.99,87:8:43.79|-20.2,6.19,2000 +HD 7578|BD+32 223|PPM 66125|HR 371|J011618.92+330652.9,f|S|K1,1:16:18.92|28.02,33:6:52.99|-35.9,6.05,2000 +HD 7238|BD+79 36|PPM 4645|HR 357|J011630.87+795436.0,f|S|F5,1:16:30.88|-48.27,79:54:36.05|59,6.27,2000 +Cet 39|AY CET|HD 7672|SD-03 172|HR 373|J011636.28-023001.3,f|D|G6,1:16:36.29|-100.55,-2:30:1.33|-64,5.43,2000 +HD 7916|CP-67 81|PPM 352312|J011703.75-662352.2,f|D|A0,1:17:3.76|53.03,-66:23:52.27|15,6.23,2000 +HD 7647|BD+44 271|PPM 43822|HR 372|J011705.06+445407.1,f|S|K5,1:17:5.06|11.79,44:54:7.17|-40.3,6.13,2000 +HD 7724|BD+30 196|HR 374|J011724.11+314440.6,f|S|K0,1:17:24.11|-44.65,31:44:40.62|3.3,6.36,2000 +Psc 89|BD+02 185|PPM 144457|HR 378|J011747.95+033652.0,f|S|A3,1:17:47.96|-48.35,3:36:52.08|-22.4,5.15,2000 +HD 7758|BD+46 319|PPM 43846|HR 376|J011810.14+472510.9,f|S|K1,1:18:10.15|7.71,47:25:10.94|-4.2,6.26,2000 +V0465 CAS|HD 7733|BD+57 237|J011813.88+574811.3,f|V|Mb,1:18:13.88|-7.67,57:48:11.40|-1.2,6.39,2000 +HD 7853|BD+36 220|HR 379|J011847.00+372310.5,f|D|A5,1:18:47.01|-8.70,37:23:10.59|-11.3,6.48,2000 +Psc Upsilon-90|HD 7964|BD+26 220|HR 383|J011927.99+271550.6,f|S|A3,1:19:28.00|26.27,27:15:50.61|-11.6,4.75,2000 +Cet 42A|V15288|SAO 129235|BD-01 171|PPM 174879|HR 385|J011948.29-003032.5,f|D|G8,1:19:48.30|5.40,-0:30:32.50|-13.9,6.25,2000 +Cas Phi-34A|V15283|HD 7927|BD+57 260|PPM 26234|HR 382|J012004.91+581353.7,f|D|F0,1:20:4.92|-1.34,58:13:53.80|-2.2,5.00,2000 +HD 7732|BD+76 40|PPM 4667|HR 375|J012019.40+773414.4,f|S|G5,1:20:19.40|-18.47,77:34:14.46|89.5,6.32,2000 +SAO 147746|HD 8121|SD-11 248|HR 388|J012027.80-111420.3,f|S|K1,1:20:27.81|-50.61,-11:14:20.40|-75.9,6.16,2000 +SAO 129239|SD-04 185|PPM 183326|HR 387|J012034.57-031449.1,f|S|K1,1:20:34.57|-1.95,-3:14:49.16|4.3,6.25,2000 +Cas 35A|V474|BD+63 176|PPM 12912|HR 384|J012105.26+643929.2,f|D|A2,1:21:5.27|59.71,64:39:29.27|-23.5,6.33,2000 +Psc 91|HD 8126|BD+27 215|HR 389|J012107.37+284417.5,f|S|K5,1:21:7.37|28.54,28:44:17.55|-75.2,5.22,2000 +HD 7925|BD+75 59|PPM 4674|HR 381|J012159.10+761419.6,f|S|F0,1:21:59.11|67.87,76:14:19.70|-34.3,6.37,2000 +Adhil|And Xi-46|BD+44 287|PPM 43919|J012220.41+453143.6,f|S|K0,1:22:20.42|32.26,45:31:43.60|8.7,4.87,2000 +SAO 147767|SD-19 229|HR 394|J012230.48-190452.3,f|D|F6,1:22:30.48|-58.40,-19:4:52.35|-64.9,6.46,2000 +Cet 43|V487|SAO 129262|HD 8335|BD-01 179|PPM 174891|HR 393|J012234.83-002658.8,f|V|K5,1:22:34.83|23.55,-0:26:58.82|-12,6.49,2000 +HD 8334|BD+00 223|PPM 144524|HR 392|J012236.95+014334.7,f|S|K5,1:22:36.95|65.52,1:43:34.80|-44.8,6.20,2000 +HD 8272|BD+57 274|PPM 26275|HR 391|J012321.41+580834.7,f|D|F4,1:23:21.42|132.29,58:8:34.78|-90.7,6.36,2000 +V15295|HD 8388|BD+19 226|HR 397|J012324.94+202808.2,f|V|K5,1:23:24.95|-5.62,20:28:8.28|-9.3,5.98,2000 +V15297|HD 8498|CD-31 562|PPM 276984|J012330.95-305644.2,f|V|K5,1:23:30.96|-15.57,-30:56:44.22|-45.8,5.83,2000 +HD 8375|BD+33 220|PPM 66232|HR 396|J012337.47+341445.1,f|S|G8,1:23:37.48|231.87,34:14:45.19|117.6,6.28,2000 +And 47|HD 8374|BD+36 237|PPM 66233|HR 395|J012340.61+374253.7,f|S|A2,1:23:40.62|81.76,37:42:53.79|-19.6,5.59,2000 +V15291|BD+77 49|PPM 4681|HR 386|J012346.80+784333.8,f|V|A0,1:23:46.80|-4.28,78:43:33.80|3.2,6.08,2000 +Cet Theta-45A|SAO 129274|HD 8512|SD-08 244|PPM 183392|J012401.40-081059.7,f|D|K0,1:24:1.41|-78.39,-8:10:59.72|-206.9,3.61,2000 +Cet 44|AV CET|SAO 129275|HD 8511|SD-08 243|PPM 183393|J012402.53-080026.6,f|D|F0,1:24:2.54|179.73,-8:0:26.70|-67.3,6.22,2000 +SAO 129277|HD 8556|SD-07 223|PPM 183398|J012420.51-065452.5,f|D|F3,1:24:20.52|46.31,-6:54:52.52|25.5,5.92,2000 +SAO 147793|HD 8589|SD-16 237|J012439.93-153937.6,f|S|G5,1:24:39.93|29.90,-15:39:37.67|-20.2,6.18,2000 +SAO 215492|HD 8651|CD-42 493|J012440.78-412933.1,f|S|K0,1:24:40.79|16.97,-41:29:33.17|-36.9,5.42,2000 +SAO 215494|HD 8681|CD-45 463|HR 411|J012441.91-443142.8,f|S|K1,1:24:41.91|-10.05,-44:31:42.87|-19.4,6.25,2000 +HD 8599|SD-03 195|J012448.68-025054.9,f|S|G8,1:24:48.68|10.79,-2:50:54.92|-28,6.16,2000 +SAO 248381|CP-65 130|PPM 352396|J012505.30-642210.1,f|S|K5,1:25:5.31|23.16,-64:22:10.12|-17.1,5.91,2000 +HD 8634|BD+22 226|J012535.67+233041.4,f|S|F5,1:25:35.68|34.11,23:30:41.47|-22.2,6.19,2000 +Cet 46|SD-15 266|HR 412|J012537.23-143555.6,f|S|K2,1:25:37.23|42.53,-14:35:55.67|-17.3,4.91,2000 +HD 8424|BD+70 102|PPM 4691|HR 398|J012546.31+705847.5,f|S|A0,1:25:46.32|9.34,70:58:47.59|-13.9,6.35,2000 +Ruchbah|Ksora|Rucha|Rucba|Cas Delta-37|Delta Cassiopeiae|HD 8538|BD+59 248|PPM 12969|J012548.95+601407.0,f|D|A5,1:25:48.95|297.27,60:14:7.02|-49.5,2.68,2000 +V504|SAO 129292|HD 8713|SD-04 207|PPM 183425|J012552.36-035538.6,f|V|K0,1:25:52.36|60.76,-3:55:38.61|-26.3,6.50,2000 +Cas Psi-36A|HD 8491|BD+67 123|HR 399|J012556.02+680748.0,f|D|K0,1:25:56.02|75.10,68:7:48.05|26.8,4.72,2000 +HD 8673|BD+33 228|PPM 66283|J012608.78+343446.9,f|S|F7,1:26:8.79|235.64,34:34:46.92|-85,6.34,2000 +Psc Rho-93|V506|HD 8723|BD+18 187|PPM 117332|HR 413|J012615.26+191020.4,f|V|F2,1:26:15.26|-26.78,19:10:20.44|10.2,5.35,2000 +HD 8671|BD+42 302|PPM 43979|J012618.68+432727.8,f|S|F7,1:26:18.69|108.34,43:27:27.86|-60.5,5.98,2000 +HD 8733|BD+19 238|J012623.59+200414.8,f|S|K0,1:26:23.60|55.51,20:4:14.89|-40.1,6.44,2000 +V15305|HD 8779|BD-01 189|HR 416|J012627.34-002356.5,f|V|K0,1:26:27.35|50.10,-0:23:56.52|-19.7,6.43,2000 +Psc 94|HD 8763|BD+18 189|PPM 117343|HR 414|J012641.67+191425.5,f|S|K1,1:26:41.68|50.84,19:14:25.52|-58.7,5.50,2000 +Cet 47|V512|SAO 147812|HD 8829|SD-13 262|HR 421|J012651.56-130323.4,f|V|F0,1:26:51.57|14.47,-13:3:23.44|9,5.51,2000 +HD 8774|BD+33 234|HR 415|J012706.32+342239.1,f|S|F7,1:27:6.33|160.94,34:22:39.19|-10.8,6.26,2000 +HD 8896|CD-22 503|PPM 243977|J012723.30-222017.6,f|D|K0,1:27:23.31|-1.66,-22:20:17.64|-84.3,6.42,2000 +V15307|BD+40 289|HR 418|J012726.67+410604.1,f|D|A7,1:27:26.67|9.83,41:6:4.17|24.7,6.42,2000 +And Omega-48A|HD 8799|BD+44 307|HR 417|J012739.38+452424.0,f|D|F5,1:27:39.38|357.00,45:24:24.07|-109.3,4.83,2000 +SAO 147819|HD 8921|SD-11 272|HR 425|J012746.54-105405.6,f|D|K4,1:27:46.54|179.11,-10:54:5.70|15.8,6.17,2000 +Phe Gamma|Gamma Phoenicis|SAO 215516|CD-43 449|HR 429|J012821.92-431905.6,f|S|M0,1:28:21.93|-18.23,-43:19:5.64|-207.7,3.44,2000 +V519|HD 8949|BD+07 213|PPM 144642|HR 426|J012822.91+075740.8,f|D|K1,1:28:22.91|110.82,7:57:40.87|-8.6,6.21,2000 +AW PHE|SAO 215525|HD 9184|CD-47 440|HR 435|J012930.53-464523.1,f|V|M2,1:29:30.54|2.36,-46:45:23.12|16.7,6.26,2000 +Cet 48|HD 9132|SD-22 254|HR 433|J012936.13-213745.6,f|D|A1,1:29:36.14|55.64,-21:37:45.62|3.2,5.11,2000 +HD 9151|CD-26 491|J012942.81-253703.8,f|S|K1,1:29:42.81|37.74,-25:37:3.90|12.8,6.37,2000 +Psc 97|VX PSC|BD+17 210|PPM 117382|HR 432|J012952.86+182120.4,f|V|A4,1:29:52.86|59.08,18:21:20.41|-2.6,6.02,2000 +And 49|BD+46 370|J013006.10+470026.1,f|S|K0,1:30:6.10|0.61,47:0:26.18|-42.5,5.26,2000 +Psc Mu-98A|HD 9138|BD+05 194|HR 434|J013011.11+060837.7,f|D|K3,1:30:11.12|293.21,6:8:37.75|-46.4,4.84,2000 +HD 9228|CD-26 502|HR 436|J013022.90-261228.2,f|D|K4,1:30:22.91|43.74,-26:12:28.26|1.4,5.93,2000 +BD+65 175|HR 428|J013052.11+660553.1,f|S|A2,1:30:52.12|74.82,66:5:53.12|-11.2,6.15,2000 +Cas 38|BD+69 102|PPM 4717|HR 427|J013113.75+701552.5,f|S|F6,1:31:13.76|137.52,70:15:52.57|-76,5.83,2000 +Phe Delta|SAO 215536|HD 9362|CD-49 425|J013115.10-490421.7,f|S|G9,1:31:15.10|138.26,-49:4:21.73|154.2,3.94,2000 +Psc Eta-99|V532|BD+14 231|PPM 117418|HR 437|J013129.00+152044.9,f|D|G7,1:31:29.01|25.75,15:20:44.96|-3.3,3.63,2000 +SAO 215539|HD 9414|CD-46 420|HR 443|J013139.00-453432.5,f|S|A2,1:31:39.01|-11.55,-45:34:32.56|4.8,6.15,2000 +SAO 193163|HD 9377|CD-30 506|HR 441|J013143.24-301659.0,f|S|K0,1:31:43.25|-4.40,-30:16:59.09|-64.3,5.79,2000 +HD 9298|BD+34 265|PPM 66368|HR 438|J013207.57+344759.8,f|S|B7,1:32:7.58|-9.61,34:47:59.86|-5.3,6.38,2000 +SAO 215547|HD 9544|CD-50 411|HR 447|J013236.36-494339.7,f|S|F4,1:32:36.37|-28.22,-49:43:39.77|-73.5,6.27,2000 +SAO 193173|HD 9525|CD-37 589|PPM 277123|HR 445|J013256.05-365154.8,f|S|K0,1:32:56.05|0.12,-36:51:54.83|-20.3,5.50,2000 +HD 9496|BD+07 229|PPM 144733|J013318.27+081231.4,f|D|K0,1:33:18.28|18.85,8:12:31.46|-31.6,6.32,2000 +HD 9352|BD+57 320|PPM 26459|HR 439|J013325.71+581938.4,f|D|K0,1:33:25.71|3.78,58:19:38.40|-4.7,5.72,2000 +SAO 255794|CP-79 40|HR 467|J013339.17-783017.3,f|D|K0,1:33:39.17|-30.97,-78:30:17.35|-137.4,6.11,2000 +SAO 129371|HD 9562|SD-07 256|PPM 183575|HR 448|J013342.83-070131.2,f|S|G2,1:33:42.84|176.86,-7:1:31.23|-81.5,5.76,2000 +HD 5914|BD+88 4|HR 286|J013350.72+890056.3,f|S|A3,1:33:50.72|64.92,89:0:56.30|-32.4,6.47,2000 +Cas Chi-39|BD+58 260|PPM 26471|HR 442|J013355.87+591355.3,f|S|G9,1:33:55.88|-43.05,59:13:55.34|-23.2,4.69,2000 +KK AND|HD 9531|BD+36 277|HR 446|J013416.60+371413.7,f|V|B9,1:34:16.61|12.66,37:14:13.73|-21,5.90,2000 +Cet 49|SAO 147886|HD 9672|SD-16 265|HR 451|J013437.77-154034.8,f|S|A3,1:34:37.78|94.74,-15:40:34.89|-2.7,5.62,2000 +BD+17 224|J013449.06+182737.8,f|S|M2,1:34:49.07|30.16,18:27:37.84|-65.9,5.90,2000 +V15333|SAO 193188|HD 9742|CD-32 613|PPM 277143|HR 453|J013450.78-315332.3,f|V|K0,1:34:50.78|-69.79,-31:53:32.34|-42.3,6.11,2000 +SAO 129387|SD-04 237|J013451.31-033126.0,f|S|K0,1:34:51.32|12.58,-3:31:26.00|-33.3,6.45,2000 +SAO 167153|HD 9731|CD-24 666|J013451.57-234158.8,f|D|K2,1:34:51.57|25.13,-23:41:58.85|12.9,6.40,2000 +V561|HD 9896|CP-58 123|PPM 331164|J013515.02-580822.1,f|V|F2,1:35:15.02|284.01,-58:8:22.11|-33,6.02,2000 +Psc 101|V559|HD 9766|BD+13 240|PPM 117482|HR 455|J013546.44+143941.1,f|V|B9,1:35:46.44|3.92,14:39:41.12|-7.6,6.22,2000 +SAO 215573|HD 9895|CD-40 395|PPM 277163|J013550.56-395649.6,f|S|F2,1:35:50.57|-44.04,-39:56:49.65|-49,6.43,2000 +HD 9712|BD+40 328|PPM 44187|HR 452|J013552.57+410435.1,f|S|G9,1:35:52.58|144.40,41:4:35.11|0.7,6.39,2000 +BD+16 176|PPM 117485|HR 457|J013554.75+172601.8,f|S|F0,1:35:54.76|149.12,17:26:1.83|21.2,5.95,2000 +Cet 50|HD 9856|SD-16 270|HR 459|J013558.96-152400.6,f|S|K1,1:35:58.97|19.09,-15:24:0.66|13.5,5.41,2000 +Scl Tau|CD-30 540|PPM 244126|HR 462|J013608.50-295426.3,f|D|F2,1:36:8.51|119.62,-29:54:26.34|48,5.70,2000 +OP AND|HD 9746|BD+47 460|HR 454|J013627.19+484321.9,f|V|K5,1:36:27.20|-16.33,48:43:21.99|-18.7,6.21,2000 +CY PSC|HD 9889|BD+07 240|J013643.52+074953.5,f|V|Ma,1:36:43.53|4.46,7:49:53.50|9.1,6.40,2000 +V15347|SAO 232477|CP-58 126|PPM 331188|HR 468|J013644.79-581615.4,f|V|M3,1:36:44.80|23.35,-58:16:15.48|0.8,6.20,2000 +And Upsilon-50A|HD 9826|BD+40 332|PPM 44216|HR 458|J013647.84+412419.6,f|D|F8,1:36:47.84|-172.59,41:24:19.65|-381,4.10,2000 +Psc Pi-102|HD 9919|BD+11 205|PPM 117498|HR 463|J013705.91+120829.5,f|S|F0,1:37:5.92|-74.94,12:8:29.52|10,5.55,2000 +SAO 258273|CP-85 17|HR 525|J013728.00-844610.5,f|S|G8,1:37:28.00|34.69,-84:46:10.54|23.5,5.67,2000 +SAO 129412|SD-10 343|PPM 183658|HR 466|J013737.70-092413.6,f|D|F7,1:37:37.70|249.35,-9:24:13.62|111,6.25,2000 +Achernar|Eri Alpha|V15353|SAO 232481|CP-57 334|PPM 331199|HR 472|J013742.84-571412.3,f|V|B3,1:37:42.85|87.99,-57:14:12.33|-40.1,0.54,2000 +SAO 129415|SD-04 249|J013752.06-032626.4,f|S|K5,1:37:52.07|26.35,-3:26:26.44|-10.6,6.46,2000 +SAO 258271|CP-83 27|HR 512|J013755.56-825829.9,f|S|G2,1:37:55.56|122.29,-82:58:29.98|120.7,5.88,2000 +51 And|And 51|HD 9927|BD+47 467|PPM 44238|HR 464|J013759.55+483741.5,f|S|K3,1:37:59.56|60.87,48:37:41.57|-112.4,3.59,2000 +BD+57 349|HR 461|J013807.56+575839.4,f|S|G5,1:38:7.57|3.02,57:58:39.47|-5.5,5.54,2000 +SAO 193224|CD-37 620|HR 471|J013827.48-363141.7,f|S|K0,1:38:27.48|-13.26,-36:31:41.70|-122.4,5.94,2000 +Cas 40|V567|HD 9774|BD+72 86|PPM 4754|HR 456|J013830.91+730224.1,f|D|G7,1:38:30.92|-11.81,73:2:24.14|-13.2,5.28,2000 +GY AND|HD 9996|BD+44 341|PPM 44258|HR 465|J013831.82+452358.9,f|V|B9,1:38:31.82|-16.22,45:23:58.94|0.6,6.40,2000 +SAO 167198|SD-22 272|PPM 244176|HR 473|J013851.78-211631.3,f|S|A4,1:38:51.79|129.57,-21:16:31.38|37.1,5.58,2000 +And Chi-52|BD+43 343|PPM 44275|HR 469|J013921.00+442310.1,f|S|G8,1:39:21.00|-20.47,44:23:10.19|15,5.01,2000 +Psc 105|BD+15 245|PPM 117547|HR 475|J013940.81+162421.0,f|S|K2,1:39:40.82|82.45,16:24:21.09|-11.6,5.99,2000 +p Eridani b|CP-56 329B|HR 487|J013947.54-561147.0,f|D|K5,1:39:47.54|286.07,-56:11:47.04|16.7,5.85,2000 +p Eridani a|CP-56 329A|HR 486|J013947.83-561136.0,f|D|K0,1:39:47.83|286.10,-56:11:36.04|16.7,5.76,2000 +BD+53 363|PPM 26599|J014013.10+535205.8,f|S|K5,1:40:13.10|-16.19,53:52:5.80|-4.6,6.36,2000 +And Tau-53|V584|BD+39 378|PPM 44297|HR 477|J014034.81+403437.3,f|D|B8,1:40:34.82|16.63,40:34:37.38|-23.5,4.97,2000 +BD+08 258|PPM 144862|J014034.92+084538.7,f|S|F2,1:40:34.93|68.34,8:45:38.77|1.9,6.34,2000 +BD+42 345|PPM 44298|HR 476|J014039.64+431751.6,f|S|A5,1:40:39.65|111.03,43:17:51.67|-31.6,5.64,2000 +BD+25 276|HR 484|J014118.37+254444.5,f|D|F2,1:41:18.38|118.36,25:44:44.56|-40.6,6.21,2000 +Hyi Tau1|CP-79 44|PPM 367365|HR 516|J014121.47-790853.5,f|D|G6,1:41:21.47|59.76,-79:8:53.52|22.1,6.35,2000 +Psc Nu-106|BD+04 293|PPM 144883|HR 489|J014125.89+052915.4,f|S|K3,1:41:25.89|-22.70,5:29:15.41|3.6,4.44,2000 +SAO 193255|CD-38 584|PPM 277264|HR 494|J014127.32-380758.1,f|S|F2,1:41:27.32|50.26,-38:7:58.18|56.5,6.19,2000 +BD+29 286|PPM 66531|HR 485|J014139.23+300249.6,f|S|K0,1:41:39.24|-8.05,30:2:49.63|-6.5,5.96,2000 +SAO 147962|SD-12 315|HR 492|J014144.83-111928.8,f|D|F5,1:41:44.83|60.16,-11:19:28.81|-411.7,5.80,2000 +BD+41 328|PPM 44319|HR 483|J014147.14+423648.1,f|D|G1,1:41:47.14|791.39,42:36:48.13|-180.2,4.96,2000 +SAO 248421|CP-61 130|PPM 352532|J014147.96-604721.6,f|S|K2,1:41:47.97|12.81,-60:47:21.62|-40.5,5.70,2000 +SAO 193261|CD-37 650|PPM 277271|HR 498|J014202.99-364956.2,f|S|A1,1:42:2.99|-29.29,-36:49:56.30|-16.7,5.71,2000 +BD+34 297|PPM 66538|J014203.49+351444.5,f|S|B9,1:42:3.49|49.37,35:14:44.55|-24.7,5.64,2000 +Scl Pi|SAO 193263|CD-32 666|PPM 277274|HR 497|J014208.59-321937.0,f|S|K0,1:42:8.59|-74.78,-32:19:37.09|-46.4,5.26,2000 +V15363|BD+57 370p|PPM 26638|HR 482|J014217.70+583739.8,f|D|B8,1:42:17.70|15.38,58:37:39.86|-8.2,6.36,2000 +Cas 43|V0557 CAS|BD+67 149|PPM 13184|HR 478|J014220.52+680234.8,f|V|A0,1:42:20.53|53.06,68:2:34.88|-10.3,5.57,2000 +CP-54 365|PPM 331261|J014229.31-534427.0,f|S|F9,1:42:29.32|166.96,-53:44:27.00|-106.7,5.52,2000 +Psc 107A|V600|BD+19 279|HR 493|J014229.76+201606.6,f|D|K1,1:42:29.76|-302.11,20:16:6.62|-677.5,5.24,2000 +SAO 129465|SD-04 260|PPM 183757|J014243.51-034124.7,f|S|K3,1:42:43.51|-11.68,-3:41:24.72|-34.4,4.99,2000 +Cas 42|V590|BD+69 114|PPM 4775|J014255.86+703721.0,f|V|B9,1:42:55.86|76.64,70:37:21.09|-13.6,5.18,2000 +BD+60 312|PPM 13195|HR 488|J014258.32+612515.8,f|S|B7,1:42:58.32|2.44,61:25:15.86|-9.3,6.33,2000 +BD+44 354|PPM 44355|HR 495|J014316.50+451921.5,f|S|K2,1:43:16.50|139.01,45:19:21.54|5.1,6.32,2000 +Cas 44A|BD+59 307|HR 491|J014319.75+603304.7,f|D|B8,1:43:19.75|13.57,60:33:4.80|-15.8,5.78,2000 +Per Phi|Phi Persei|BD+49 444|HR 496|J014339.63+504119.4,f|S|B2,1:43:39.64|24.04,50:41:19.44|-13.6,4.04,2000 +BD+31 301|PPM 66569|J014350.14+321131.2,f|S|G8,1:43:50.14|-5.97,32:11:31.25|1.4,6.31,2000 +SAO 129477|SD-05 309|PPM 183783|J014354.79-044555.8,f|S|K0,1:43:54.80|-23.92,-4:45:55.85|-30.8,6.19,2000 +Cet Tau-52|V15373|SAO 147986|SD-16 295|J014404.08-155614.9,f|D|G8,1:44:4.08|-1722.01,-15:56:14.93|854.2,3.49,2000 +V0773 CAS|BD+56 330|PPM 26687|HR 499|J014417.96+573211.8,f|D|A3,1:44:17.96|46.70,57:32:11.82|-18.4,6.21,2000 +BD+45 432|PPM 44374|J014426.52+460822.8,f|S|K5,1:44:26.53|-7.07,46:8:22.89|-31.6,6.31,2000 +SAO 129482|SD-07 287|PPM 183795|J014443.67-064558.1,f|D|G0,1:44:43.68|11.02,-6:45:58.19|4.7,6.45,2000 +BD+56 334|PPM 26699|J014446.17+570521.2,f|S|A2,1:44:46.17|18.09,57:5:21.21|1.8,6.24,2000 +Psc 109|BD+19 282|J014455.82+200459.3,f|S|G3,1:44:55.82|-45.08,20:4:59.34|-105.4,6.29,2000 +Psc Omicron-110|V615|BD+08 273|Torcularis Septentrionalis|J014523.63+090927.8,f|V|G8,1:45:23.63|70.79,9:9:27.85|39,4.27,2000 +Scl Epsilon|V15385|SAO 167275|CD-25 704|PPM 244279|HR 514|J014538.75-250309.3,f|D|F1,1:45:38.76|159.53,-25:3:9.40|-72.4,5.33,2000 +SD-06 336|PPM 183822|HR 513|J014559.26-054359.8,f|S|K4,1:45:59.26|-9.10,-5:43:59.88|-29.7,5.36,2000 +SAO 167279|CD-27 595|PPM 244283|HR 517|J014601.05-272055.7,f|S|F2,1:46:1.06|97.93,-27:20:55.79|-45.1,6.39,2000 +V15387|SAO 232519|CD-51 419|PPM 331315|HR 519|J014605.96-504858.5,f|V|M3,1:46:5.97|43.69,-50:48:58.52|-17.5,5.49,2000 +CP-54 377|PPM 331316|J014606.26-533119.3,f|S|A1,1:46:6.26|126.45,-53:31:19.33|59,5.04,2000 +CD-42 633|HR 524|J014716.70-414535.7,f|S|K5,1:47:16.70|12.08,-41:45:35.73|48.8,6.17,2000 +BD+63 238|PPM 13257|HR 511|J014744.83+635109.0,f|D|K0,1:47:44.83|582.03,63:51:9.00|-246.9,5.62,2000 +Hyi Tau2|CP-80 35|J014746.44-801034.7,f|D|F0,1:47:46.44|-71.74,-80:10:34.72|-58.4,6.05,2000 +CD-37 687|PPM 277342|HR 528|J014747.76-370934.1,f|S|K0,1:47:47.77|0.84,-37:9:34.14|20.4,6.32,2000 +BD+45 447|PPM 44428|HR 518|J014748.01+461347.0,f|S|F6,1:47:48.01|12.87,46:13:47.10|-55.5,6.32,2000 +Ari 4|BD+16 203|PPM 117685|HR 522|J014810.93+165719.9,f|S|B9,1:48:10.94|55.81,16:57:19.98|-33,5.86,2000 +BD+02 270|PPM 144998|HR 527|J014826.01+034107.6,f|S|G9,1:48:26.02|-9.13,3:41:7.61|17.7,5.91,2000 +BD+37 372|HR 521|J014838.92+375710.3,f|S|K0,1:48:38.92|111.89,37:57:10.33|-27,5.94,2000 +BD+31 316|PPM 66632|HR 523|J014841.56+324124.7,f|S|F8,1:48:41.56|-166.76,32:41:24.75|297.4,5.79,2000 +BD+47 508|PPM 44468|HR 526|J014915.54+475348.9,f|D|A3,1:49:15.54|-20.21,47:53:48.93|-11.5,6.41,2000 +V15393|HD 11183|CD-31 753|PPM 277365|HR 532|J014919.42-310420.8,f|V|K2,1:49:19.42|85.57,-31:4:20.87|-16.5,6.35,2000 +Cet Chi-53A|HD 11171|SD-11 352|HR 531|J014935.10-104111.0,f|D|F3,1:49:35.10|-148.87,-10:41:11.08|-94.5,4.66,2000 +SAO 193326|HD 11262|CD-39 553|PPM 277374|HR 535|J014948.86-382410.0,f|D|F8,1:49:48.86|2.12,-38:24:10.07|282.4,6.38,2000 +Ari 1A|HD 11154|BD+21 243A|PPM 91119|J015008.57+221631.2,f|D|K1,1:50:8.57|-14.30,22:16:31.22|-7.6,5.83,2000 +SAO 215673|HD 11332|CD-48 487|HR 537|J015020.18-474859.0,f|S|K1,1:50:20.18|115.73,-47:48:59.01|48.3,6.14,2000 +54 Cet|V635|HD 11257|BD+10 252|PPM 117718|HR 534|J015051.97+110236.1,f|V|F2,1:50:51.97|-69.34,11:2:36.16|-27.8,5.93,2000 +BD PHE|SAO 232542|HD 11413|CD-50 514|PPM 331382|HR 541|J015054.43-501222.0,f|V|A1,1:50:54.44|-48.00,-50:12:22.09|-4.3,5.94,2000 +HD 11151|BD+51 416|PPM 26817|HR 529|J015057.12+515600.3,f|S|F5,1:50:57.13|41.16,51:56:0.30|-115.5,5.96,2000 +SAO 215679|HD 11421|CD-40 465|J015126.35-395009.3,f|S|K1,1:51:26.36|15.78,-39:50:9.37|-24.7,6.43,2000 +Baten Kaitos|Cet Zeta-55A|V638|HD 11353|SD-11 359|HR 539|J015127.63-102006.1,f|D|K0,1:51:27.63|38.81,-10:20:6.14|-38,3.73,2000 +SAO 129539|HD 11365|SD-07 310|J015137.80-065226.9,f|S|K0,1:51:37.80|4.17,-6:52:26.91|-9.4,6.42,2000 +HD 11396|SD-16 322|J015146.09-153850.9,f|S|M2,1:51:46.10|13.43,-15:38:50.93|1.5,6.44,2000 +Per 1|V0436 PER|HD 11241|BD+54 396|PPM 26835|HR 533|J015159.32+550850.5,f|V|B1,1:51:59.32|12.52,55:8:50.59|-8.3,5.53,2000 +Per 2|V15397|HD 11291|BD+50 379|PPM 26838|HR 536|J015209.37+504734.0,f|V|B9,1:52:9.37|18.39,50:47:34.06|-28.7,5.70,2000 +HD 11335|BD+50 381|PPM 26852|HR 538|J015250.72+512829.4,f|S|A3,1:52:50.72|-13.64,51:28:29.41|-6.8,6.28,2000 +BK CET|HD 11522|SD-17 336|HR 547|J015252.11-165545.2,f|V|F0,1:52:52.11|41.33,-16:55:45.30|-51.9,5.79,2000 +Atria|Caput Trianguli|Ras al Muthallah|Elmuthalleth|Metallah|Tri Alpha-2A|Alpha Trianguli|HD 11443|BD+28 312|PPM 91161|HR 544|J015304.90+293443.7,f|D|F6,1:53:4.91|12.00,29:34:43.78|-233.7,3.42,2000 +And 55|HD 11428|BD+40 394|PPM 44535|HR 543|J015317.34+404347.2,f|D|K5,1:53:17.34|-9.66,40:43:47.24|-4.2,5.40,2000 +SAO 193368|HD 11643|CD-39 573|PPM 277435|HR 554|J015323.17-383540.6,f|S|K1,1:53:23.17|128.73,-38:35:40.67|29.5,6.09,2000 +Mesarthim|Ari Gamma-5A|Gamma Arietis|BD+18 243|HR 546|J015331.81+191737.8,f|D|A1,1:53:31.81|79.42,19:17:37.87|-99.1,3.88,2000 +Ari Gamma-5B|BD+18 243|HR 545|J015331.82+191745.4,f|D|B9,1:53:31.82|82.54,19:17:45.40|-106.9,4.64,2000 +Psc Xi-111|V654|HD 11559|BD+02 290|HR 549|J015333.35+031115.1,f|V|G9,1:53:33.35|23.66,3:11:15.13|23.9,4.62,2000 +Phe Psi|Psi Phoenicis|SAO 215696|HD 11695|CD-46 552|HR 555|J015338.74-461809.6,f|S|M4,1:53:38.74|-92.44,-46:18:9.61|-91.5,4.43,2000 +BD+54 408|PPM 26869|J015348.51+553551.5,f|S|A5,1:53:48.51|47.46,55:35:51.50|-13,6.44,2000 +Phe Phi|SAO 215697|HD 11753|CD-43 583|HR 558|J015422.03-422949.0,f|S|A3,1:54:22.03|-34.29,-42:29:49.02|-28.3,5.12,2000 +Segin|Navi|Cas Epsilon-45|V652|HD 11415|BD+62 320|PPM 13322|HR 542|J015423.72+634012.3,f|V|B3,1:54:23.73|32.00,63:40:12.37|-18.7,3.35,2000 +Sheratan|Al Sheratain|Ari Beta-6|V658|HD 11636|BD+20 306|PPM 91184|HR 553|J015438.40+204828.9,f|V|A5,1:54:38.41|96.33,20:48:28.93|-108.8,2.66,2000 +V15404|HD 11613|BD+39 434|PPM 44563|HR 551|J015453.78+404207.3,f|V|K2,1:54:53.78|44.24,40:42:7.32|-68.5,6.26,2000 +Hyi Eta2|HD 11977|CP-68 101|PPM 352648|J015456.13-673850.2,f|S|G8,1:54:56.13|75.99,-67:38:50.29|73.2,4.69,2000 +HD 11624|BD+36 346|PPM 66747|HR 552|J015457.66+370741.8,f|S|K0,1:54:57.66|37.19,37:7:41.84|-18.5,6.28,2000 +SAO 248464|HD 11995|CP-61 157|PPM 352657|HR 571|J015546.48-605139.5,f|S|F0,1:55:46.48|14.17,-60:51:39.51|66.8,6.06,2000 +Hyi Sigma|SAO 255835|HD 12363|CP-78 42|PPM 367467|HR 593|J015550.54-782054.7,f|S|F5,1:55:50.55|103.00,-78:20:54.77|53.1,6.15,2000 +Ari 7|RR ARI|HD 11763|BD+22 284|HR 559|J015551.03+233438.3,f|V|K1,1:55:51.04|12.10,23:34:38.36|-8.9,5.75,2000 +V667|BD+01 347|J015553.83+015059.9,f|D|F7,1:55:53.83|158.47,1:50:59.94|190.4,6.05,2000 +V15405|HD 11727|BD+36 354|HR 556|J015554.48+371640.0,f|D|M5,1:55:54.48|9.43,37:16:40.03|-6.3,5.90,2000 +Eri Chi|V671|SAO 232573|HD 11937|CP-52 241|PPM 331456|HR 566|J015557.47-513632.0,f|D|G8,1:55:57.47|681.23,-51:36:32.02|284.3,3.72,2000 +Cas Omega-46|V659|HD 11529|BD+67 169|HR 548|J015600.02+684106.8,f|V|B8,1:56:0.03|13.85,68:41:6.87|-9.7,4.98,2000 +And 56A|HD 11749|BD+36 355|PPM 66775|HR 557|J015609.36+371506.5,f|D|K0,1:56:9.36|182.92,37:15:6.59|10.5,5.69,2000 +SAO 232574|HD 11965|CD-50 545|J015609.40-495011.2,f|S|B8,1:56:9.41|14.32,-49:50:11.21|14,6.38,2000 +Cet 56|SAO 167416|CD-23 721|PPM 244461|HR 565|J015640.19-223136.4,f|S|K4,1:56:40.20|62.21,-22:31:36.43|-30.2,4.90,2000 +SAO 232581|CP-52 242|PPM 331475|HR 573|J015659.98-514558.4,f|S|F6,1:56:59.98|348.86,-51:45:58.48|249.4,6.10,2000 +SAO 148123|HD 11964|SD-10 403|J015709.60-101432.7,f|D|G5,1:57:9.61|-368.43,-10:14:32.74|-243.2,6.42,2000 +SAO 215715|CD-47 597|HR 574|J015710.08-472306.9,f|S|G7,1:57:10.08|101.66,-47:23:7.00|8.8,4.84,2000 +Ari Iota-8|BD+17 289|PPM 117816|HR 563|J015721.05+174903.1,f|S|G8,1:57:21.05|34.27,17:49:3.11|-23.7,5.10,2000 +V15408|HD 11928|BD+27 310|PPM 91231|HR 564|J015743.74+274815.7,f|V|M2,1:57:43.74|13.40,27:48:15.77|-58.8,5.86,2000 +SAO 248472|CP-66 123|PPM 352673|HR 584|J015753.33-652528.9,f|S|G8,1:57:53.34|-24.58,-65:25:28.92|-6.5,6.36,2000 +Ari Lambda-9A|HD 11973|BD+22 288|PPM 91235|HR 569|J015755.71+233545.8,f|D|F0,1:57:55.72|-91.55,23:35:45.82|-14.5,4.77,2000 +HD 11884|BD+46 485|PPM 44623|J015759.23+470543.8,f|S|K0,1:57:59.24|7.25,47:5:43.87|-6.8,6.45,2000 +SAO 193422|HD 12135|CD-33 682|PPM 277513|HR 576|J015826.68-330400.4,f|D|K0,1:58:26.68|4.15,-33:4:0.43|-20.3,6.37,2000 +V678|HD 11857|BD+60 398|PPM 13373|HR 561|J015833.23+614152.0,f|V|B5,1:58:33.23|12.94,61:41:52.04|-11.4,6.02,2000 +Per 3|HD 11949|BD+48 576|PPM 44638|HR 568|J015833.50+491215.6,f|S|K0,1:58:33.51|6.27,49:12:15.67|41.2,5.71,2000 +SAO 148139|HD 12116|SD-12 367|J015845.99-111803.4,f|S|G5,1:58:46.00|72.22,-11:18:3.44|-88.5,6.47,2000 +Hyi Alpha|SAO 248474|HD 12311|CP-62 162|PPM 352685|HR 591|J015846.19-613411.4,f|S|F0,1:58:46.19|262.51,-61:34:11.49|26.9,2.86,2000 +BD+11 261|HR 578|J015925.88+121741.5,f|S|A6,1:59:25.89|7.91,12:17:41.55|-33.4,6.09,2000 +HD 12139|BD+20 322|HR 577|J015935.68+210330.8,f|D|K0,1:59:35.68|140.82,21:3:30.85|-14.4,5.89,2000 +HD 11946|BD+63 265|PPM 13392|HR 567|J015938.03+643717.7,f|D|A0,1:59:38.04|35.74,64:37:17.77|-15.2,5.29,2000 +SAO 215726|HD 12296|CD-42 684|HR 588|J015938.81-420149.9,f|S|K1,1:59:38.81|-50.58,-42:1:49.91|-99.8,5.57,2000 +SAO 248476|HD 12477|CP-66 125|J015941.12-660359.6,f|S|K1,1:59:41.13|34.02,-66:3:59.61|6.2,6.09,2000 +Cet 57|V15418|SAO 167466|HD 12255|SD-21 356|PPM 244523|HR 583|J015946.19-204928.3,f|V|M1,1:59:46.20|17.95,-20:49:28.34|15.2,5.44,2000 +Cet Upsilon-59|SAO 167471|HD 12274|SD-21 358|PPM 244533|HR 585|J020000.30-210440.1,f|S|M0,2:0:0.31|132.97,-21:4:40.19|-24.5,4.00,2000 +Psc 112|V691|HD 12235|BD+02 311|PPM 145195|HR 582|J020009.15+030549.2,f|V|G2,2:0:9.16|231.26,3:5:49.25|-255.2,5.88,2000 +AR CET|SAO 129624|HD 12292|SD-09 380|PPM 184124|HR 587|J020026.82-083125.9,f|D|M3,2:0:26.82|86.78,-8:31:25.94|-19.3,5.51,2000 +For Pi|SAO 193455|HD 12438|CD-30 703|PPM 277557|HR 594|J020114.72-300006.5,f|S|G5,2:1:14.72|-108.73,-30:0:6.59|-108.8,5.36,2000 +Phe Chi|V15428|SAO 215739|HD 12524|CD-45 659|J020142.37-444248.6,f|V|K5,2:1:42.38|-31.77,-44:42:48.63|-48.8,5.14,2000 +A Cas|Cas 48A|V694|HD 12111|BD+70 153|PPM 4877|HR 575|J020157.45+705425.2,f|D|A3,2:1:57.45|-54.46,70:54:25.27|-10.7,4.52,2000 +Psc Alpha-113B|Alpha Piscium|HD 12446|BD+02 317|PPM 145227|HR 595|J020202.69+024549.6,f|D|A3,2:2:2.70|35.36,2:45:49.65|-19.6,3.82,2000 +Al Rischa|Okda|Alrescha|Katain|Psc Alpha-113A|Alpha Piscium|HD 12447|BD+02 317|PPM 145227|HR 596|J020202.82+024549.5,f|D|A0,2:2:2.82|33.26,2:45:49.53|-0.4,3.82,2000 +Per 4|V15424|BD+53 439|J020218.10+542915.1,f|V|B8,2:2:18.11|33.81,54:29:15.15|-3.4,5.00,2000 +SAO 167511|HD 12563|CD-30 714|PPM 244582|J020228.26-293956.3,f|S|A3,2:2:28.26|-15.77,-29:39:56.31|9.5,6.41,2000 +V15429|HD 12479|BD+12 271|PPM 117893|J020235.07+132836.1,f|V|M2,2:2:35.08|-0.15,13:28:36.18|-5,6.00,2000 +SAO 167516|HD 12596|CD-24 872|PPM 244592|J020251.73-235311.8,f|S|K2,2:2:51.74|-39.50,-23:53:11.86|-32,6.31,2000 +Cas 52|HD 12279|BD+64 282|PPM 13421|HR 586|J020252.47+645405.2,f|S|A1,2:2:52.48|-12.60,64:54:5.28|-11.7,6.00,2000 +BD+77 73|PPM 4885|HR 572|J020257.02+775458.5,f|S|K0,2:2:57.03|-5.34,77:54:58.55|-5,6.05,2000 +Tri Epsilon-3|V707|HD 12471|BD+32 369|HR 599|J020257.95+331702.8,f|D|A2,2:2:57.96|-16.05,33:17:2.89|-6.8,5.52,2000 +HD 12583|SD-16 356|J020258.56-151821.3,f|S|G3,2:2:58.57|25.61,-15:18:21.36|7.3,5.86,2000 +Cas 53|BD+63 274|PPM 13423|HR 589|J020300.18+642324.0,f|S|B8,2:3:0.19|-0.97,64:23:24.07|-2,5.62,2000 +HD 12173|BD+73 108|PPM 4887|HR 579|J020310.45+735102.0,f|D|A5,2:3:10.45|-27.16,73:51:2.05|1.9,6.18,2000 +Cet 60|V15431|SAO 129655|HD 12573|BD-00 307|PPM 145248|J020311.65+000742.6,f|V|A5,2:3:11.65|75.90,0:7:42.62|21.7,5.43,2000 +Cas 50|HD 12216|BD+71 117|PPM 4888|J020326.10+722516.6,f|S|A2,2:3:26.11|-43.99,72:25:16.66|22.5,3.95,2000 +Ari 10A|HD 12558|BD+25 341|PPM 91322|J020339.34+255607.6,f|D|F8,2:3:39.34|125.72,25:56:7.70|9.3,5.69,2000 +V15432|SAO 129665|HD 12642|SD-04 324|PPM 184185|HR 611|J020340.48-040612.6,f|V|M1,2:3:40.49|6.58,-4:6:12.66|-62.7,5.62,2000 +HD 12594|BD+17 307|PPM 117912|J020342.60+181511.6,f|S|K5,2:3:42.61|-8.69,18:15:11.66|-20.8,6.22,2000 +Cet 61A|V711|SAO 129667|HD 12641|BD-01 285|J020348.17-002024.9,f|D|G4,2:3:48.17|82.80,-0:20:24.90|-43.1,5.95,2000 +Almach|Almaak|Alamak|Almaach|And Gamma-57A|HD 12533|BD+41 395|PPM 44721|J020353.95+421947.0,f|D|K3,2:3:53.95|43.14,42:19:47.01|-50.9,2.17,2000 +And Gamma-57B|HD 12534|BD+41 395|J020354.71+421951.4,f|D|B8,2:3:54.72|43.14,42:19:51.41|-50.9,4.84,2000 +V715|SD-12 382|J020412.46-115135.1,f|V|K4,2:4:12.47|55.34,-11:51:35.17|-3.2,6.46,2000 +For Nu|Nu Fornacis|SAO 167532|HD 12767|CD-29 706|PPM 244617|HR 612|J020429.43-291748.5,f|S|B9,2:4:29.44|12.56,-29:17:48.55|8.5,4.70,2000 +HD 12894|CP-55 385|PPM 331583|J020435.11-545254.0,f|S|F2,2:4:35.12|75.76,-54:52:54.08|-24.7,6.45,2000 +BD+07 321|PPM 145273|J020451.01+074408.3,f|S|K0,2:4:51.01|29.58,7:44:8.39|-0.2,6.43,2000 +Cas 47A|BD+76 63|PPM 4895|HR 581|J020507.42+771652.8,f|D|F0,2:5:7.42|138.90,77:16:52.83|-47.6,5.27,2000 +Cas 49A|HD 12339|BD+75 86|PPM 4897|HR 592|J020531.54+760654.2,f|D|G8,2:5:31.55|-12.20,76:6:54.22|-20.5,5.22,2000 +WZ PSC|HD 12872|BD+07 324|PPM 145285|HR 614|J020612.26+081453.2,f|V|M2,2:6:12.26|-14.10,8:14:53.21|-11.6,6.31,2000 +SAO 129695|HD 12923|BD-00 318|PPM 145289|HR 616|J020629.30+000207.3,f|S|K0,2:6:29.31|64.20,0:2:7.38|6.5,6.29,2000 +Ari Kappa-12|HD 12869|BD+21 279|PPM 91364|HR 613|J020633.92+223853.9,f|S|A2,2:6:33.93|20.63,22:38:53.94|-35.8,5.03,2000 +Ari 11|HD 12885|BD+25 349|PPM 91368|HR 615|J020649.23+254216.3,f|D|B9,2:6:49.23|18.52,25:42:16.39|-14.5,6.02,2000 +SD-19 386|J020652.05-190819.9,f|S|K1,2:6:52.05|148.37,-19:8:19.93|-36.2,6.39,2000 +Hamal|Arietis|Hamul|Ari Alpha-13|V725|HD 12929|BD+22 306|PPM 91373|HR 617|J020710.40+232744.7,f|V|K2,2:7:10.41|190.71,23:27:44.72|-145.8,2.02,2000 +SAO 215777|HD 13218|CD-42 727|J020805.68-415249.5,f|S|A4,2:8:5.68|-16.19,-41:52:49.51|-11.3,6.50,2000 +And 58|BD+37 486|PPM 66995|J020829.25+375132.6,f|S|A5,2:8:29.26|154.19,37:51:32.68|-43.6,4.79,2000 +BD+43 431|PPM 44795|HR 619|J020833.55+442733.9,f|S|G8,2:8:33.56|14.13,44:27:33.94|-47.4,6.38,2000 +V0472 PER|HD 12953|BD+57 494|PPM 27162|HR 618|J020840.57+582524.9,f|V|A1,2:8:40.58|-0.79,58:25:24.96|-1.6,5.72,2000 +V732|SAO 148237|HD 13215|SD-18 374|PPM 211139|HR 625|J020845.66-174644.9,f|V|M2,2:8:45.66|-10.86,-17:46:44.96|-21,6.08,2000 +SAO 215785|HD 13336|CD-44 632|HR 632|J020909.29-433059.7,f|S|K1,2:9:9.29|-48.30,-43:30:59.74|-51.4,5.84,2000 +BD+16 247|PPM 117986|HR 624|J020923.11+171327.1,f|S|F5,2:9:23.11|136.11,17:13:27.11|-186.2,6.42,2000 +HD 12467|BD+80 64|PPM 378|HR 597|J020925.31+811745.4,f|S|A1,2:9:25.31|-34.14,81:17:45.40|7.1,6.05,2000 +Ari 14A|HD 13174|BD+25 355|HR 623|J020925.33+255623.6,f|D|F2,2:9:25.34|77.56,25:56:23.61|-33.1,4.98,2000 +Tri Beta-4|V15447|HD 13161|BD+34 381|HR 622|J020932.62+345914.2,f|V|A5,2:9:32.63|148.82,34:59:14.27|-39.1,3.02,2000 +SAO 167599|CD-24 921|PPM 244712|J020934.80-242044.8,f|S|F4,2:9:34.80|-31.02,-24:20:44.83|-42,6.48,2000 +SAO 215793|HD 13387|CD-41 598|J020948.46-405159.4,f|S|F3,2:9:48.47|48.55,-40:51:59.40|-22.5,6.50,2000 +SAO 215794|HD 13423|CD-44 638|HR 636|J021004.81-434856.0,f|S|G8,2:10:4.81|50.22,-43:48:56.07|-7.3,6.32,2000 +HD 13137|BD+53 460|PPM 27199|HR 621|J021007.75+535035.1,f|S|G8,2:10:7.75|26.37,53:50:35.13|-45.1,6.30,2000 +SAO 232658|HD 13445|CD-51 532|PPM 331669|HR 637|J021025.93-504925.4,f|S|K1,2:10:25.93|2092.60,-50:49:25.41|654.5,6.12,2000 +Ari 15|AV ARI|HD 13325|BD+18 277|HR 631|J021037.59+193001.2,f|V|M3,2:10:37.60|88.80,19:30:1.22|-27.1,5.71,2000 +And 59A|HD 13294|BD+38 425|HR 628|J021052.82+390222.2,f|D|B9,2:10:52.83|-8.04,39:2:22.29|-21.5,6.08,2000 +Ari 16|HD 13363|BD+25 362|PPM 91423|HR 633|J021112.05+255612.9,f|S|K3,2:11:12.05|-8.90,25:56:12.98|-7,6.01,2000 +Cet 64|HD 13421|BD+07 347|HR 635|J021121.07+083411.2,f|S|G0,2:11:21.08|-141.21,8:34:11.30|-114.3,5.64,2000 +SAO 148262|HD 13456|SD-10 447|PPM 211189|HR 638|J021122.22-100307.7,f|S|F5,2:11:22.23|-27.32,-10:3:7.78|-171.2,6.00,2000 +Tri 5|V740|HD 13372|BD+30 347|HR 634|J021125.02+313135.0,f|V|A1,2:11:25.02|35.42,31:31:35.03|-10.2,6.23,2000 +Per 5|V15451|HD 13267|BD+56 438|PPM 27224|HR 627|J021129.19+573843.9,f|D|B5,2:11:29.19|-0.72,57:38:43.96|-1.8,6.41,2000 +SAO 148264|HD 13511|SD-18 381|PPM 211193|J021133.50-174434.7,f|S|M1,2:11:33.50|53.15,-17:44:34.77|4.6,6.50,2000 +Cet 63|SAO 129739|HD 13468|SD-02 375|HR 639|J021135.83-014931.5,f|S|G5,2:11:35.84|-11.24,-1:49:31.55|-33.2,5.94,2000 +HD 13546|BD+02 347|J021215.76+024443.9,f|S|G5,2:12:15.77|13.18,2:44:43.98|12.2,6.50,2000 +Tri 6A|TZ TRI|BD+29 371|HR 642|J021222.28+301811.0,f|D|G5,2:12:22.28|-64.62,30:18:11.04|-61.1,5.15,2000 +HD 13522|BD+23 297|PPM 91444|HR 644|J021237.53+241004.0,f|S|K0,2:12:37.54|41.60,24:10:4.00|-6.3,5.97,2000 +Cet 66A|SAO 129752|HD 13612|SD-03 336|PPM 184347|J021247.54-022337.0,f|D|F8,2:12:47.54|374.37,-2:23:37.09|-73.1,5.65,2000 +Ari Eta-17|HD 13555|BD+20 348|PPM 91445|HR 646|J021248.08+211239.5,f|S|F5,2:12:48.09|162.49,21:12:39.58|4.1,5.23,2000 +V15448|HD 12927|BD+79 63|PPM 4928|J021249.90+794129.5,f|D|A5,2:12:49.91|-22.25,79:41:29.54|24.5,6.45,2000 +For Mu|SAO 193573|CD-31 882|PPM 277734|HR 652|J021254.47-304325.7,f|S|B9,2:12:54.47|15.34,-30:43:25.77|7.2,5.27,2000 +Cet Xi1-65|V749|HD 13611|BD+08 345|HR 649|J021259.99+085048.1,f|D|G7,2:12:60.00|-26.23,8:50:48.18|-14.4,4.37,2000 +SAO 167637|HD 13692|SD-21 396|PPM 244777|HR 651|J021300.98-210000.4,f|S|G9,2:13:0.99|55.87,-21:0:0.49|40.8,5.87,2000 +Ari 19|V748|HD 13596|BD+14 357|HR 648|J021303.30+151647.4,f|V|M0,2:13:3.31|99.26,15:16:47.49|-20.9,5.71,2000 +And 60|V746|BD+43 447|PPM 44882|HR 643|J021313.32+441353.9,f|V|K3,2:13:13.32|-20.64,44:13:53.95|-15.3,4.83,2000 +HD 13222|BD+73 121|PPM 4931|HR 626|J021321.14+740139.7,f|S|G8,2:13:21.15|47.05,74:1:39.80|-36.8,6.26,2000 +6 Per|V747|BD+50 481|PPM 27263|HR 645|J021336.34+510356.9,f|D|G8,2:13:36.34|347.46,51:3:56.95|-170.8,5.31,2000 +V15458|HD 13476|BD+57 519|PPM 27266|HR 641|J021341.61+583338.1,f|V|A3,2:13:41.61|-0.08,58:33:38.11|-0.5,6.46,2000 +SAO 129765|HD 13763|SD-09 429|PPM 184374|J021353.55-090352.6,f|S|K0,2:13:53.55|1.33,-9:3:52.67|20.5,6.43,2000 +HD 13594|BD+46 536|PPM 44899|HR 647|J021402.45+472903.2,f|D|F4,2:14:2.46|-82.11,47:29:3.27|-60.1,6.07,2000 +Hyi Pi1|V767|SAO 248518|HD 14141|CP-68 126|PPM 352823|HR 667|J021414.54-675029.1,f|V|M1,2:14:14.54|25.18,-67:50:29.19|45.7,5.57,2000 +Cas 55A|V753|HD 13474|BD+65 239|PPM 13532|J021429.09+663127.9,f|D|G0,2:14:29.09|-6.93,66:31:27.94|-5.6,6.06,2000 +SAO 215831|CD-41 621|HR 659|J021431.94-411000.3,f|S|G8,2:14:31.95|-20.89,-41:10:0.35|-26.1,5.91,2000 +HD 13747|BD+28 374|PPM 91473|J021437.98+284128.2,f|S|G5,2:14:37.98|159.08,28:41:28.27|-99.2,6.35,2000 +Hyi Pi2|SAO 248521|HD 14287|CP-68 128|PPM 352831|HR 678|J021528.62-674446.9,f|S|K2,2:15:28.62|43.00,-67:44:46.92|-12.7,5.67,2000 +Ari 21|HD 13872|BD+24 329|PPM 91494|HR 657|J021542.77+250234.8,f|D|F6,2:15:42.77|-88.74,25:2:34.88|-87.2,5.58,2000 +Ari 20|HD 13871|BD+25 373|PPM 91496|HR 656|J021546.05+254658.5,f|S|F6,2:15:46.05|176.40,25:46:58.58|-66.4,5.79,2000 +Tri 7|HD 13869|BD+32 409|PPM 67133|HR 655|J021556.28+332132.0,f|S|A0,2:15:56.28|-14.91,33:21:32.02|-33.3,5.25,2000 +HD 13818|BD+47 590|PPM 44931|HR 653|J021557.73+474842.9,f|S|G9,2:15:57.73|45.13,47:48:42.98|-49.6,6.38,2000 +Eri Phi|SAO 232696|HD 14228|CP-52 285|PPM 331742|HR 674|J021630.58-513043.7,f|D|B8,2:16:30.59|90.74,-51:30:43.79|-21.9,3.55,2000 +HD 12918|BD+82 51|PPM 397|J021645.57+833341.0,f|S|K0,2:16:45.57|58.28,83:33:41.09|-43,6.43,2000 +V0551 PER|HD 13854|BD+56 471|HR 654|J021651.71+570318.8,f|D|B1,2:16:51.72|-0.90,57:3:18.89|-0.8,6.50,2000 +Cet 67|SAO 129798|HD 14129|SD-07 393|PPM 184435|HR 666|J021659.04-062519.6,f|S|G8,2:16:59.04|93.16,-6:25:19.62|-106.9,5.50,2000 +Tri Delta-8A|HD 13974|BD+33 395|PPM 67162|J021703.23+341327.2,f|D|G0,2:17:3.23|1151.59,34:13:27.23|-246.4,4.87,2000 +Tri Gamma-9|BD+33 397|HR 664|J021718.86+335049.8,f|S|A1,2:17:18.87|44.97,33:50:49.90|-52.4,4.01,2000 +Per 8|HD 13982|BD+57 535|PPM 27384|HR 661|J021759.88+575359.3,f|S|K3,2:17:59.89|60.82,57:53:59.35|5,5.75,2000 +HD 14214|BD+01 410|PPM 145462|HR 672|J021801.43+014528.0,f|S|G0,2:18:1.44|365.98,1:45:28.09|371.2,5.60,2000 +Per 7A|HD 13994|BD+56 486|PPM 27387|HR 662|J021804.58+573058.7,f|D|G7,2:18:4.58|-13.45,57:30:58.76|-1.8,5.99,2000 +Ari Theta-22|HD 14191|BD+19 340|HR 669|J021807.53+195404.1,f|S|A1,2:18:7.54|-16.08,19:54:4.19|0.9,5.58,2000 +Tri 10|HD 14252|BD+27 360|HR 675|J021856.99+283833.6,f|D|A2,2:18:56.99|6.71,28:38:33.63|0,5.30,2000 +HD 14262|BD+22 329|PPM 91551|HR 676|J021857.94+231004.1,f|S|A1,2:18:57.95|-17.65,23:10:4.13|-8.6,6.45,2000 +SAO 167697|HD 14412|CD-26 828|PPM 244874|HR 683|J021858.50-255644.4,f|S|G5,2:18:58.50|-218.10,-25:56:44.47|444.5,6.34,2000 +HD 14213|BD+45 589|PPM 44985|HR 671|J021910.82+462820.1,f|S|A4,2:19:10.82|-23.76,46:28:20.14|-12,6.21,2000 +And 62|HD 14212|BD+46 552|PPM 44986|J021916.79+472247.9,f|S|A1,2:19:16.80|-60.03,47:22:47.90|-6.1,5.32,2000 +Mira|Cet Omicron-68A|Omicron Ceti|SAO 129825|HD 14386|SD-03 353|PPM 184482|HR 681|J021920.79-025839.5,f|D|M5,2:19:20.79|10.34,-2:58:39.51|-239.5,4.95,2000 +HD 14221|BD+48 648|PPM 44989|HR 673|J021922.67+485719.6,f|S|F4,2:19:22.68|-98.60,48:57:19.67|72.4,6.42,2000 +CD-42 785|HR 686|J021924.76-415054.1,f|S|K2,2:19:24.77|4.92,-41:50:54.12|27.6,6.35,2000 +HD 14417|SD-05 438|PPM 184492|HR 684|J021940.77-042044.0,f|S|A3,2:19:40.78|31.56,-4:20:44.06|3.3,6.50,2000 +SAO 232717|HD 14641|CP-56 413|PPM 331776|HR 688|J021954.27-555641.2,f|D|K5,2:19:54.27|23.35,-55:56:41.27|18.7,5.81,2000 +HD 14372|BD+46 557|HR 679|J022041.51+471838.8,f|S|B5,2:20:41.51|13.02,47:18:38.89|-10.4,6.17,2000 +And 63|PZ AND|HD 14392|BD+49 640|PPM 27476|HR 682|J022058.20+500905.2,f|V|B9,2:20:58.21|38.83,50:9:5.28|-31.2,5.57,2000 +Hyi Delta|SAO 248545|CP-69 113|PPM 352886|J022144.94-683933.9,f|S|A3,2:21:44.94|-50.06,-68:39:33.91|2.4,4.08,2000 +V15490|HD 14433|BD+56 568|PPM 27512|J022155.43+571434.4,f|V|A1,2:21:55.44|-1.22,57:14:34.50|-1.8,6.40,2000 +Cet 69|V805|HD 14652|BD-00 355|PPM 145523|HR 689|J022156.62+002344.4,f|V|M2,2:21:56.63|-13.35,0:23:44.43|-6.8,5.30,2000 +SAO 148354|HD 14691|SD-11 448|PPM 211424|HR 692|J022201.53-104639.1,f|S|F0,2:22:1.53|153.40,-10:46:39.12|-81.9,5.43,2000 +SAO 148356|HD 14728|SD-18 409|PPM 211427|HR 693|J022204.98-173943.8,f|S|K0,2:22:4.98|9.00,-17:39:43.81|-58.1,5.88,2000 +SAO 215878|HD 14832|CD-43 724|HR 698|J022211.75-431159.3,f|S|K0,2:22:11.75|60.69,-43:11:59.32|43.5,6.30,2000 +Cet 70|V15493|SAO 129858|BD-01 322|HR 691|J022212.39-005305.4,f|V|F0,2:22:12.40|-17.70,-0:53:5.47|-46,5.43,2000 +Per 9|V0474 PER|HD 14489|BD+55 598|PPM 27527|HR 685|J022221.43+555044.3,f|D|A2,2:22:21.43|0.34,55:50:44.35|-1.2,5.20,2000 +For Kappa|SAO 167736|CD-24 1038|PPM 244936|HR 695|J022232.54-234858.7,f|S|G0,2:22:32.55|197.33,-23:48:58.77|-4.4,5.20,2000 +V15494|HD 14622|BD+40 500|HR 687|J022250.30+412346.6,f|D|F0,2:22:50.30|-74.15,41:23:46.67|-97.7,5.80,2000 +Hyi Kappa|V15503|HD 15248|CP-74 194|PPM 367632|HR 715|J022252.30-733844.8,f|V|K1,2:22:52.31|-81.60,-73:38:44.85|11.8,5.99,2000 +SAO 232736|HD 14943|CD-51 571|PPM 331828|J022254.67-510531.6,f|S|A5,2:22:54.67|22.14,-51:5:31.66|66,5.90,2000 +SAO 148366|SD-19 444|PPM 211448|HR 697|J022257.62-182117.9,f|S|G5,2:22:57.63|131.69,-18:21:17.94|-132.7,6.23,2000 +V0440 PER|HD 14662|BD+54 535|PPM 27565|J022351.74+552153.5,f|D|F7,2:23:51.74|-2.13,55:21:53.50|-2.8,6.30,2000 +SAO 167757|HD 14988|CD-26 857|PPM 244963|J022420.11-255050.8,f|S|K3,2:24:20.12|32.53,-25:50:50.85|16.1,6.45,2000 +And 64|BD+49 649|PPM 27578|HR 694|J022424.91+500023.5,f|S|G8,2:24:24.92|24.58,50:0:23.57|-35.8,5.19,2000 +SAO 215892|CD-41 681|J022433.88-405025.6,f|S|G2,2:24:33.88|228.89,-40:50:25.65|109.4,6.18,2000 +Ari Xi-24|HD 14951|BD+09 316|J022449.05+103638.0,f|S|B7,2:24:49.06|19.61,10:36:38.03|-13.6,5.48,2000 +Hor Lambda|SAO 248555|HD 15233|CP-60 199|PPM 352913|HR 714|J022453.91-601843.0,f|S|F2,2:24:53.91|-71.10,-60:18:43.01|-131,5.37,2000 +Cet 71|SAO 129888|SD-03 374|J022458.38-024648.1,f|S|A0,2:24:58.39|1.80,-2:46:48.11|-6.6,6.34,2000 +Per 10|V0554 PER|HD 14818|BD+55 612|PPM 27598|HR 696|J022516.02+563635.3,f|V|B2,2:25:16.03|-0.41,56:36:35.36|-0.7,6.27,2000 +TZ HOR|SAO 248556|HD 15379|CP-67 154|PPM 352919|HR 722|J022526.45-662938.4,f|V|M5,2:25:26.45|-20.70,-66:29:38.49|1.2,6.43,2000 +And 65A|HD 14872|BD+49 656|HR 699|J022537.42+501643.0,f|D|K4,2:25:37.42|23.77,50:16:43.07|-14.4,4.72,2000 +Cet Rho-72|SAO 148385|SD-12 451|J022557.00-121725.7,f|S|B9,2:25:57.01|-11.72,-12:17:25.73|-11.4,4.88,2000 +AB CET|SAO 148386|HD 15144|SD-15 426|J022600.34-152028.4,f|D|A6,2:26:0.35|-44.26,-15:20:28.49|-54.1,5.86,2000 +SAO 167795|SD-20 455|HR 713|J022635.21-200233.4,f|S|K2,2:26:35.22|86.24,-20:2:33.42|101.5,5.89,2000 +Eri Kappa|V15515|HD 15371|CD-48 637|HR 721|J022659.12-474213.8,f|V|B5,2:26:59.12|19.99,-47:42:13.82|-5.4,4.25,2000 +V15509|HD 15152|BD+26 409|PPM 91682|HR 711|J022707.23+270044.6,f|V|K5,2:27:7.24|-28.46,27:0:44.62|-75.2,6.11,2000 +Ari 25|HD 15228|BD+09 323|PPM 118239|J022723.38+101153.9,f|S|F5,2:27:23.39|-294.96,10:11:53.98|-202.1,6.46,2000 +Tri 11|HD 15176|BD+31 427|PPM 67351|HR 712|J022727.77+314804.6,f|S|K5,2:27:27.77|-23.84,31:48:4.61|-28.2,5.56,2000 +And 66|V15512|HD 15138|BD+49 666|PPM 27645|J022751.77+503411.9,f|V|F4,2:27:51.78|31.53,50:34:11.91|-90.5,6.17,2000 +HD 15328|BD+01 431|HR 719|J022759.92+015739.0,f|D|K0,2:27:59.93|-0.75,1:57:39.05|-14.2,6.49,2000 +For Phi|SAO 193723|HD 15427|CD-34 905|PPM 277981|HR 724|J022801.70-334839.7,f|S|A2,2:28:1.70|18.57,-33:48:39.74|5.5,5.13,2000 +SAO 248567|HD 15646|CP-64 174|PPM 352949|HR 734|J022804.38-641759.1,f|S|A0,2:28:4.39|34.22,-64:17:59.17|6.2,6.36,2000 +Cet Xi2-73|HD 15318|BD+07 388|PPM 145611|HR 718|J022809.54+082736.1,f|S|B9,2:28:9.54|41.69,8:27:36.19|-14.5,4.28,2000 +Tri 12|HD 15257|BD+29 417|HR 717|J022809.98+294009.5,f|S|F0,2:28:9.98|-14.86,29:40:9.59|-85.5,5.29,2000 +SAO 193727|HD 15471|CD-31 990|HR 727|J022835.43-310608.8,f|S|K2,2:28:35.43|-36.48,-31:6:8.80|-17.7,6.11,2000 +Tri 13|HD 15335|BD+29 423|PPM 91715|J022848.49+295554.3,f|S|G0,2:28:48.49|-65.39,29:55:54.34|72.5,5.90,2000 +Cas Iota|Iota Cassiopeiae|BD+66 213|J022903.94+672408.9,f|D|A5,2:29:3.95|-27.90,67:24:8.91|37.1,4.63,2000 +HD 15385|BD+22 354|PPM 91723|HR 723|J022913.68+232808.4,f|S|A5,2:29:13.68|85.44,23:28:8.49|-21.1,6.19,2000 +HD 15453|BD+08 385|PPM 145637|HR 725|J022935.35+093356.2,f|D|K2,2:29:35.36|-2.22,9:33:56.27|2,6.09,2000 +HD 15464|BD+33 445|HR 726|J023016.60+335001.3,f|S|K1,2:30:16.61|70.02,33:50:1.35|-55.6,6.26,2000 +HD 15524|BD+24 358|HR 728|J023032.35+251406.1,f|D|F6,2:30:32.35|61.74,25:14:6.13|-72.9,5.89,2000 +SAO 167839|HD 15652|CD-23 947|HR 735|J023032.79-223243.1,f|S|M1,2:30:32.79|6.65,-22:32:43.15|-31.4,6.16,2000 +Ari 26|UU ARI|BD+19 365|PPM 118291|HR 729|J023038.41+195119.0,f|V|A9,2:30:38.42|80.98,19:51:19.08|-36.1,6.14,2000 +V846|HD 15633|BD-00 378|PPM 145662|HR 732|J023045.20+001520.6,f|V|A7,2:30:45.20|-51.90,0:15:20.70|-52.2,6.01,2000 +Ari 27|HD 15596|BD+17 380|PPM 118294|HR 731|J023054.39+174213.8,f|S|G5,2:30:54.40|33.01,17:42:13.88|-82.8,6.23,2000 +HD 15694|BD+01 438|PPM 145672|HR 737|J023130.09+021601.8,f|S|K3,2:31:30.10|22.78,2:16:1.85|-10.4,5.26,2000 +Hyi Mu|SAO 255898|HD 16522|CP-79 66|PPM 367696|HR 776|J023140.54-790633.7,f|S|G8,2:31:40.54|137.14,-79:6:33.77|-54.4,5.27,2000 +Polaris|Alruccabah|Cynosura|Phoenice|Lodestar|Tramontana|Pole Star|Yilduz|Mismar|UMi Alpha-1A|Alpha Ursae Minoris|BD+88 8|PPM 431|HR 424|J023149.08+891550.7,f|D|F7,2:31:49.08|44.22,89:15:50.79|-11.8,2.00,2000 +Cet Sigma-76|SAO 148445|HD 15798|SD-15 449|J023205.22-151440.8,f|S|F4,2:32:5.23|-80.90,-15:14:40.84|-146.8,4.74,2000 +Tri 14|V15539|HD 15656|BD+35 497|PPM 67436|HR 736|J023206.17+360850.1,f|V|K5,2:32:6.17|47.84,36:8:50.18|16.4,5.15,2000 +Cet 75|SAO 129959|HD 15779|BD-01 353|PPM 175128|HR 739|J023209.42-010205.6,f|S|G5,2:32:9.42|-26.55,-1:2:5.63|-32.3,5.36,2000 +SAO 193759|HD 15889|CD-36 957|HR 742|J023214.76-362538.3,f|S|G8,2:32:14.76|57.09,-36:25:38.31|12.5,6.28,2000 +HD 15755|BD+33 454|PPM 67459|HR 738|J023252.61+343232.6,f|S|K0,2:32:52.62|-54.74,34:32:32.67|-19.2,5.84,2000 +Ari 29|HD 15814|BD+14 419|PPM 118324|HR 741|J023254.14+150204.3,f|S|F8,2:32:54.14|-15.50,15:2:4.39|36.9,6.00,2000 +For Lambda1|SAO 193763|HD 15975|CD-35 877|HR 744|J023307.02-343859.8,f|S|K0,2:33:7.03|-17.40,-34:38:59.88|-17.9,5.90,2000 +SAO 167878|HD 15996|SD-20 480|PPM 245141|HR 745|J023340.22-200006.9,f|S|K0,2:33:40.22|-36.65,-20:0:6.92|-79.9,6.19,2000 +For Omega|SAO 167882|CD-28 819A|PPM 245146|HR 749|J023350.70-281356.4,f|D|B9,2:33:50.70|-12.69,-28:13:56.44|-1.4,4.97,2000 +SAO 232818|CD-51 611|PPM 331976|HR 755|J023354.60-510536.7,f|S|F6,2:33:54.61|-8.67,-51:5:36.77|-20.6,6.24,2000 +Cet 77|SAO 129984|SD-08 484|HR 752|J023442.62-075134.0,f|D|K5,2:34:42.63|60.33,-7:51:34.00|-64.4,5.73,2000 +BD+06 392|PPM 145726|HR 751|J023504.13+072815.5,f|S|G5,2:35:4.13|-9.67,7:28:15.57|-124.5,6.17,2000 +BD+39 573|PPM 67498|HR 746|J023527.90+393951.7,f|D|B9,2:35:27.90|16.28,39:39:51.77|-33.4,6.35,2000 +BD+36 519|HR 748|J023538.74+371844.1,f|D|K3,2:35:38.74|-0.95,37:18:44.15|-11.4,5.71,2000 +Tri 15A|V866|BD+34 469|J023546.81+344115.2,f|D|M3,2:35:46.81|19.61,34:41:15.21|-51.2,5.39,2000 +Cet Nu-78|HD 16161|BD+04 418|PPM 145738|HR 754|J023552.47+053535.6,f|D|G8,2:35:52.47|-28.96,5:35:35.69|-22.8,4.88,2000 +Cet 80A|V15552|HD 16212|SD-08 489|HR 759|J023600.04-074953.7,f|D|M0,2:36:0.05|-33.58,-7:49:53.75|-59.3,5.53,2000 +BD+06 398|PPM 145742|HR 753|J023604.89+065312.7,f|D|K3,2:36:4.89|1806.22,6:53:12.73|1442.4,5.79,2000 +For Iota1|SAO 193795|CD-30 958|PPM 278116|HR 767|J023609.26-300241.9,f|S|G8,2:36:9.27|-15.97,-30:2:41.92|-5.8,5.73,2000 +V872|HD 16247|BD+07 402|PPM 145746|HR 766|J023635.07+074348.0,f|V|K5,2:36:35.07|-56.18,7:43:48.09|-21.2,5.81,2000 +Ari 31|HD 16234|BD+11 360|PPM 118379|HR 763|J023637.91+122651.4,f|D|F7,2:36:37.92|279.47,12:26:51.50|-85.4,5.65,2000 +HD 16187|BD+30 418|HR 757|J023643.03+313627.6,f|S|K0,2:36:43.03|-25.29,31:36:27.60|0.5,6.07,2000 +HD 16176|BD+38 515|PPM 67525|HR 756|J023657.18+384400.8,f|S|F5,2:36:57.19|145.09,38:44:0.89|-165.4,5.91,2000 +For Lambda2|SAO 193811|HD 16417|CD-35 903|PPM 278138|HR 772|J023658.60-343440.7,f|S|G5,2:36:58.61|-18.28,-34:34:40.72|-259.9,5.78,2000 +Ari 30A|HD 16246|BD+24 376|PPM 91832|HR 765|J023700.52+243850.0,f|D|F6,2:37:0.52|137.15,24:38:50.00|-14.2,6.48,2000 +BD+32 473|HR 761|J023706.57+325327.9,f|S|F8,2:37:6.57|82.75,32:53:27.93|30.7,6.23,2000 +Hor Eta|SAO 232835|HD 16555|CP-53 457|HR 778|J023724.37-523235.1,f|S|A6,2:37:24.37|111.29,-52:32:35.11|1.1,5.30,2000 +BD+65 280|PPM 13771|HR 747|J023736.06+654443.2,f|S|K5,2:37:36.07|42.95,65:44:43.21|-8.9,5.79,2000 +Cet 81|SD-04 436|PPM 184843|HR 771|J023741.80-032346.2,f|S|G5,2:37:41.80|38.93,-3:23:46.23|-44.1,5.65,2000 +HD 16399|BD+07 405|PPM 145768|J023800.75+074142.9,f|S|F6,2:38:0.75|87.70,7:41:42.99|-41.5,6.38,2000 +BD+72 140|HR 743|J023802.03+724905.7,f|S|G8,2:38:2.03|-28.89,72:49:5.71|15.2,5.18,2000 +HD 16327|BD+37 588|PPM 67555|HR 768|J023817.83+374336.1,f|D|F6,2:38:17.83|-38.44,37:43:36.17|-44.2,6.18,2000 +For Iota2|SAO 193829|HD 16538|CD-30 973|PPM 278169|HR 777|J023818.66-301138.6,f|S|F4,2:38:18.66|98.66,-30:11:38.62|-74,5.84,2000 +V15556|SAO 193834|HD 16589|CD-38 875|PPM 278173|J023824.83-375925.9,f|V|G0,2:38:24.83|114.20,-37:59:25.96|-62.3,6.48,2000 +BD+37 591|PPM 67563|HR 769|J023827.95+380520.9,f|S|B9,2:38:27.95|11.92,38:5:20.91|-9.7,6.29,2000 +HD 16467|BD+02 406|HR 775|J023836.80+032635.5,f|D|G9,2:38:36.80|34.89,3:26:35.54|7.9,6.22,2000 +Ari Nu-32|HD 16432|BD+21 362|HR 773|J023848.99+215741.0,f|S|A7,2:38:48.99|-7.09,21:57:41.07|-15.1,5.45,2000 +Cet Delta-82|Delta Ceti|HD 16582|BD-00 406|PPM 145784|HR 779|J023928.95+001942.6,f|S|B2,2:39:28.96|14.40,0:19:42.64|-2.5,4.07,2000 +Cet Epsilon-83|SAO 148528|SD-12 501|PPM 211811|HR 781|J023933.83-115219.7,f|D|F5,2:39:33.84|172.04,-11:52:19.79|-236.3,4.83,2000 +Hyi Epsilon|SAO 248621|HD 16978|CP-68 161|J023935.36-681601.0,f|S|B9,2:39:35.36|87.42,-68:16:1.01|0.6,4.11,2000 +SAO 215996|HD 16754|CD-43 814|HR 789|J023947.99-425330.0,f|D|A2,2:39:47.99|92.09,-42:53:30.01|-15.1,4.74,2000 +HD 16673|SD-10 525|PPM 184889|HR 784|J024012.42-092710.3,f|S|F6,2:40:12.42|-138.49,-9:27:10.35|-78.7,5.80,2000 +HD 16647|BD+05 374|PPM 145798|HR 783|J024015.69+060642.9,f|S|F3,2:40:15.69|51.46,6:6:43.00|-3.8,6.26,2000 +Hor Zeta|SAO 232857|CP-55 446|J024039.61-543259.6,f|S|F4,2:40:39.61|32.80,-54:32:59.68|5.2,5.22,2000 +Eri Iota|SAO 215999|HD 16815|CD-40 689|PPM 278212|HR 794|J024040.03-395119.3,f|S|K0,2:40:40.03|135.19,-39:51:19.35|-27.3,4.12,2000 +Ari 33A|HD 16628|BD+26 443x|HR 782|J024041.07+270339.3,f|D|A3,2:40:41.08|64.52,27:3:39.39|-27.3,5.30,2000 +Cet 84|V893|HD 16765|BD-01 377|PPM 175164|J024113.99-004144.3,f|D|F7,2:41:14.00|218.98,-0:41:44.35|-125.3,5.76,2000 +HD 16825|SD-15 478|PPM 211864|HR 796|J024134.12-143257.3,f|S|F5,2:41:34.13|-5.81,-14:32:57.39|55.9,5.98,2000 +HD 16824|SD-03 421|PPM 184921|HR 795|J024148.32-031249.7,f|S|G5,2:41:48.33|-11.08,-3:12:49.71|-12.5,6.06,2000 +SAO 193873|HD 16975|CD-38 894|PPM 278246|J024206.60-382301.2,f|S|G8,2:42:6.61|20.46,-38:23:1.27|13,5.99,2000 +CD-47 832|J024208.44-463127.9,f|S|K1,2:42:8.44|10.01,-46:31:27.99|-94.3,6.10,2000 +Per 12|V896|HD 16739|BD+39 610|PPM 45381|HR 788|J024214.91+401138.1,f|D|F9,2:42:14.92|-16.84,40:11:38.20|-182.3,4.90,2000 +Ari Mu-34A|HD 16811|BD+19 403|PPM 91916|HR 793|J024221.93+200041.2,f|D|A0,2:42:21.94|27.48,20:0:41.27|-46.1,5.74,2000 +V899|HD 16861|BD+10 360|PPM 118474|HR 797|J024228.93+104430.2,f|V|A2,2:42:28.94|-24.32,10:44:30.21|-23.4,6.32,2000 +Hor Iota|SAO 232864|CD-51 641|J024233.46-504801.0,f|S|G0,2:42:33.47|333.71,-50:48:1.06|219.2,5.40,2000 +HD 16735|BD+52 616|HR 787|J024259.52+533133.9,f|D|K0,2:42:59.52|57.16,53:31:33.98|-31.7,5.84,2000 +BD+47 683|HR 792|J024301.85+481554.8,f|D|G5,2:43:1.86|5.99,48:15:54.88|-4,6.31,2000 +Per 11|HD 16727|BD+54 598|HR 785|J024302.83+550621.6,f|S|B7,2:43:2.84|34.75,55:6:21.67|-21.3,5.76,2000 +Al Kaff|Kaffaljidhma|Al Kaff al Jidhmah|Cet Gamma-86|BD+02 422|J024318.03+031408.9,f|D|A3,2:43:18.04|-146.47,3:14:8.95|-145.3,3.47,2000 +CD-41 769|HR 814|J024320.23-403140.4,f|D|B9,2:43:20.24|14.71,-40:31:40.46|14.1,6.35,2000 +V911|SAO 248632|HD 17326|CP-67 181|HR 823|J024326.61-664251.3,f|D|F5,2:43:26.61|98.55,-66:42:51.31|-80.7,6.26,2000 +Ari 35|BD+27 424|PPM 91923|J024327.11+274225.7,f|S|B3,2:43:27.11|3.45,27:42:25.73|-10,4.65,2000 +SD-03 426|PPM 184953|J024328.91-023153.2,f|S|K0,2:43:28.91|18.13,-2:31:53.23|17.4,6.49,2000 +HD 16955|BD+25 441|PPM 91931|J024351.24+253818.0,f|D|A2,2:43:51.24|-5.27,25:38:18.03|4.4,6.40,2000 +Per 14|BD+43 566|PPM 45426|J024405.15+441749.3,f|S|G0,2:44:5.16|2.04,44:17:49.34|-6.1,5.44,2000 +Cet Pi-89|SAO 148575|SD-14 519|PPM 211922|HR 811|J024407.34-135131.3,f|S|B7,2:44:7.35|-7.57,-13:51:31.31|-8.4,4.25,2000 +SAO 232871|HD 17254|CP-53 475|HR 821|J024410.57-523414.1,f|S|A2,2:44:10.57|-23.34,-52:34:14.15|-14.8,6.15,2000 +Per Theta-13A|V902|HD 16895|BD+48 746|PPM 45428|HR 799|J024411.98+491342.4,f|D|F8,2:44:11.99|334.03,49:13:42.41|-90,4.11,2000 +Ari 36|V15567|BD+17 426|PPM 118499|J024419.11+174550.1,f|V|K2,2:44:19.11|36.57,17:45:50.14|-35.8,6.39,2000 +SAO 193888|HD 17168|CD-33 943|PPM 278284|HR 817|J024420.53-323128.9,f|S|A1,2:44:20.54|25.29,-32:31:28.98|-22,6.22,2000 +Ari Omicron-37|BD+14 457|J024432.97+151842.7,f|S|B9,2:44:32.97|4.34,15:18:42.70|-15.6,5.78,2000 +V15564|HD 16769|BD+67 224|PPM 13849|HR 791|J024449.69+674928.6,f|V|A5,2:44:49.70|17.49,67:49:28.67|-32.6,5.95,2000 +Cet Mu-87A|V909|BD+09 359|HR 813|J024456.54+100650.9,f|D|F0,2:44:56.54|285.15,10:6:50.92|-30.4,4.27,2000 +Ari 38|UV ARI|BD+11 377|HR 812|J024457.58+122644.7,f|V|A7,2:44:57.58|124.06,12:26:44.74|-84.8,5.19,2000 +Eri Tau-1|SAO 148584|SD-19 518|HR 818|J024506.18-183421.2,f|S|F6,2:45:6.19|330.87,-18:34:21.23|36.3,4.47,2000 +HD 17163|BD+04 437|PPM 145873|HR 816|J024520.90+044241.8,f|S|F5,2:45:20.91|69.36,4:42:41.87|-41.6,6.04,2000 +Hor Gamma|SAO 248642|CP-64 196|PPM 353112|HR 833|J024527.47-634216.3,f|D|G8,2:45:27.48|19.40,-63:42:16.39|-8.8,5.75,2000 +Hyi Zeta|SAO 248644|HD 17566|CP-68 169|PPM 353113|HR 837|J024532.63-673659.8,f|S|A2,2:45:32.63|66.49,-67:36:59.82|44,4.84,2000 +CD-22 943|PPM 245394|HR 826|J024645.10-213822.2,f|S|F3,2:46:45.10|76.13,-21:38:22.28|16.8,6.47,2000 +HD 17228|BD+35 553|PPM 67734|HR 819|J024658.32+355900.6,f|S|G8,2:46:58.32|53.16,35:59:0.68|-4.1,6.27,2000 +BD+34 513|PPM 67738|J024703.57+353316.8,f|D|A9,2:47:3.57|-39.17,35:33:16.85|-54.8,6.29,2000 +HD 17438|CD-23 1061|HR 827|J024711.12-222908.7,f|S|F2,2:47:11.13|-18.99,-22:29:8.70|-39.5,6.46,2000 +HD 17245|BD+43 576|PPM 45493|J024731.15+441619.9,f|D|G2,2:47:31.15|-0.21,44:16:19.91|-7,6.48,2000 +HD 16458|BD+80 86|PPM 475|HR 774|J024747.70+812654.5,f|S|G8,2:47:47.71|18.78,81:26:54.51|-78.4,5.78,2000 +Ari 39|HD 17361|BD+28 462|PPM 91982|HR 824|J024754.54+291449.6,f|S|K1,2:47:54.54|148.42,29:14:49.62|-125.8,4.52,2000 +Ari 40|V937|HD 17459|BD+17 442|PPM 118572|HR 828|J024832.08+181701.6,f|V|K1,2:48:32.09|42.59,18:17:1.65|-32.8,5.83,2000 +VZ ARI|HD 17471|BD+24 396|PPM 91996|J024845.90+251117.0,f|V|A0,2:48:45.90|54.16,25:11:17.03|-3.9,5.90,2000 +RZ CAS|HD 17138|BD+69 179|PPM 13884|HR 815|J024855.51+693803.4,f|V|A3,2:48:55.51|2.87,69:38:3.44|37.5,6.27,2000 +Hor Nu|SAO 248656|HD 17848|CP-63 188|PPM 353156|HR 852|J024901.48-624823.4,f|S|A2,2:49:1.49|94.53,-62:48:23.48|29,5.26,2000 +For Beta|SAO 193931|HD 17652|CD-32 1025|PPM 278384|HR 841|J024905.41-322421.2,f|D|G8,2:49:5.42|87.00,-32:24:21.23|159,4.46,2000 +Ari Pi-42A|V944|HD 17543|BD+16 355|PPM 118581|HR 836|J024917.55+172751.5,f|D|B6,2:49:17.56|3.72,17:27:51.51|-14.6,5.32,2000 +HD 17484|BD+36 566|PPM 67792|HR 831|J024926.91+371935.0,f|S|F6,2:49:26.91|-20.28,37:19:35.08|-3.2,6.45,2000 +V0480 PER|HD 17378|BD+56 718|HR 825|J024930.73+570503.5,f|V|A5,2:49:30.74|-0.82,57:5:3.54|-1.5,6.28,2000 +For Gamma1|HD 17713|CD-25 1120|PPM 245454|HR 844|J024950.96-243337.1,f|D|K1,2:49:50.96|-49.93,-24:33:37.12|-128.2,6.15,2000 +For Gamma2|HD 17729|CD-28 903|PPM 245456|HR 845|J024954.18-275631.1,f|S|A0,2:49:54.18|46.51,-27:56:31.13|22.2,5.39,2000 +Ari 41A|V951|HD 17573|BD+26 471|HR 838|J024959.03+271537.8,f|D|B8,2:49:59.03|65.47,27:15:37.83|-116.6,3.62,2000 +For Eta2|HD 17793|CD-36 1067|HR 848|J025014.78-355037.0,f|D|K0,2:50:14.78|51.56,-35:50:37.09|20.3,5.93,2000 +Hyi Nu|SAO 255929|HD 18293|CP-75 204|PPM 367814|HR 872|J025028.46-750401.0,f|S|K3,2:50:28.46|-33.94,-75:4:1.01|-27.2,4.74,2000 +Per 16A|V956|HD 17584|BD+37 646|PPM 67819|J025035.05+381907.1,f|D|F2,2:50:35.06|195.71,38:19:7.12|-108.9,4.22,2000 +BD+36 569|J025035.29+365653.9,f|S|G0,2:50:35.29|-8.39,36:56:53.98|-129.1,6.45,2000 +For Eta3|SAO 193944|HD 17829|CD-36 1070|PPM 278416|HR 851|J025040.40-354033.0,f|S|K5,2:50:40.41|3.90,-35:40:33.06|-54.4,5.48,2000 +Per Eta-15A|V15587|BD+55 714|Miram|HR 834|J025041.81+555343.7,f|D|K3,2:50:41.81|16.65,55:53:43.79|-13.8,3.76,2000 +HD 17864|CD-40 736|PPM 278419|HR 853|J025047.80-395556.0,f|S|A0,2:50:47.81|42.33,-39:55:56.01|-10.2,6.37,2000 +Angetenar|Anchat|Al Anchat al Nahr|Eri Tau-2|HD 17824|SD-21 509|PPM 245481|J025102.32-210014.4,f|D|K0,2:51:2.32|-39.07,-21:0:14.47|-16.6,4.77,2000 +Ari Sigma-43|HD 17769|BD+14 480|HR 847|J025129.58+150455.4,f|S|B7,2:51:29.59|31.28,15:4:55.45|-23.3,5.52,2000 +Per 17|V963|BD+34 527|HR 843|J025130.83+350335.0,f|V|K5,2:51:30.84|9.33,35:3:35.07|-63,4.55,2000 +HD 17656|BD+46 648|PPM 45595|HR 842|J025141.73+465030.9,f|S|G8,2:51:41.73|-26.27,46:50:30.98|-25.8,5.87,2000 +HD 17581|BD+57 651|HR 839|J025145.88+581851.4,f|D|A1,2:51:45.88|-32.07,58:18:51.45|-2.4,6.45,2000 +SAO 193951|HD 17926|CD-31 1148|PPM 278444|HR 858|J025156.24-304852.2,f|S|F8,2:51:56.25|123.03,-30:48:52.27|105,6.39,2000 +SU CAS|HD 17463|BD+68 200|PPM 13918|HR 829|J025158.75+685318.5,f|V|F5,2:51:58.75|2.00,68:53:18.59|-8.2,5.94,2000 +V982|SAO 248673|HD 18185|CP-63 197|PPM 353196|HR 866|J025219.02-625434.4,f|V|K1,2:52:19.03|61.96,-62:54:34.50|6.3,6.02,2000 +EP ERI|SAO 148647|HD 17925|SD-13 544|PPM 212115|HR 857|J025232.12-124610.9,f|V|K2,2:52:32.13|398.05,-12:46:10.97|-189.5,6.05,2000 +Sigma Eri|HD 17943|SD-10 569|HR 859|J025250.73-092628.4,f|S|A7,2:52:50.74|110.09,-9:26:28.45|39.6,6.34,2000 +V971|HD 17743|BD+52 640|HR 846|J025252.02+525950.4,f|D|B8,2:52:52.02|0.18,52:59:50.50|-15.3,6.35,2000 +SAO 248676|HD 18292|CP-65 201|J025254.63-652719.0,f|S|K0,2:52:54.64|-6.42,-65:27:19.05|-14.7,6.46,2000 +HD 17918|BD+15 400|PPM 118634|HR 856|J025311.69+162900.4,f|S|F5,2:53:11.70|64.44,16:29:0.45|-63,6.30,2000 +V15600|HD 17818|BD+47 723|HR 849|J025321.07+483411.8,f|D|G5,2:53:21.07|3.57,48:34:11.84|-12.3,6.23,2000 +For Psi|SAO 193965|HD 18149|CD-38 948|PPM 278467|HR 863|J025334.39-382613.2,f|S|F6,2:53:34.40|58.86,-38:26:13.21|34.3,5.93,2000 +SAO 168121|CD-22 984|PPM 245531|HR 862|J025335.32-222234.7,f|S|K0,2:53:35.32|85.58,-22:22:34.71|-76.1,5.93,2000 +Per 20A|V977|BD+37 655|PPM 67877|HR 855|J025342.61+382014.9,f|D|F4,2:53:42.62|47.65,38:20:14.97|-78.5,5.35,2000 +V15609|SAO 232933|HD 18265|CD-51 683|PPM 332241|HR 871|J025406.46-505217.0,f|V|K4,2:54:6.47|-2.27,-50:52:17.05|7.2,6.21,2000 +Per Tau-18A|Tau Persei|HD 17878|BD+52 641A|HR 854|J025415.46+524544.9,f|D|G4,2:54:15.46|-2.00,52:45:44.92|-4.5,3.94,2000 +Ari Rho-45|RZ ARI|HD 18191|BD+17 457|PPM 118672|HR 867|J025548.49+181953.9,f|V|M6,2:55:48.50|-8.12,18:19:53.90|-14.9,5.82,2000 +HD 17948|BD+60 591|PPM 13962|J025556.92+613116.0,f|D|F4,2:55:56.92|145.05,61:31:16.10|30.8,5.59,2000 +HD 18262|BD+07 450|J025613.76+082253.6,f|S|F7,2:56:13.77|69.90,8:22:53.63|-88.3,5.97,2000 +V985|HD 17958|BD+63 369|PPM 13968|HR 861|J025624.65+641956.7,f|D|K3,2:56:24.65|-3.83,64:19:56.79|-1,6.20,2000 +Azha|Eri Eta-3|V988|HD 18322|SD-09 553|HR 874|J025625.64-085353.3,f|V|K1,2:56:25.65|77.80,-8:53:53.32|-220,3.90,2000 +Ari Rho-46|V15612|HD 18256|BD+17 458|PPM 118684|HR 869|J025626.15+180123.2,f|V|F6,2:56:26.15|281.29,18:1:23.23|-218.8,5.59,2000 +HD 18155|BD+46 658|PPM 45684|HR 865|J025633.30+470950.4,f|D|K5,2:56:33.30|-2.75,47:9:50.42|1.1,6.03,2000 +HD 18331|SD-04 502|HR 875|J025637.42-034244.3,f|S|A1,2:56:37.42|-35.77,-3:42:44.35|-43.3,5.17,2000 +HD 18153|BD+50 665|PPM 28115|HR 864|J025650.65+511540.6,f|S|K5,2:56:50.66|0.75,51:15:40.62|-27.7,6.21,2000 +EH CET|HD 18345|BD+03 410|HR 877|J025704.57+043003.7,f|V|M4,2:57:4.58|20.79,4:30:3.71|24.4,6.19,2000 +HD 18466|CD-30 1122|PPM 245617|HR 884|J025712.90-295119.0,f|S|A2,2:57:12.90|-16.39,-29:51:19.04|-5.5,6.29,2000 +Per 21|LT PER|HD 18296|BD+31 509|PPM 67948|HR 873|J025717.28+315603.1,f|V|B9,2:57:17.28|3.06,31:56:3.19|-31.1,5.10,2000 +Eri 4|SAO 168183|HD 18454|CD-24 1336|PPM 245622|HR 883|J025723.76-235143.7,f|S|A5,2:57:23.77|101.51,-23:51:43.79|-35.8,5.44,2000 +HD 18546|CD-38 976|HR 893|J025732.62-381127.3,f|S|A0,2:57:32.63|2.59,-38:11:27.33|11.1,6.42,2000 +HD 18339|BD+38 599|PPM 67956|HR 876|J025802.32+383653.7,f|S|K5,2:58:2.33|-5.04,38:36:53.73|-17.8,6.04,2000 +Ari 47|V15614|BD+20 480|HR 878|J025805.22+204007.4,f|V|F5,2:58:5.22|234.80,20:40:7.44|-31.6,5.80,2000 +Eri 6|SAO 168191|HD 18535|CD-24 1343|PPM 245638|HR 889|J025805.73-233621.6,f|S|K2,2:58:5.73|72.02,-23:36:21.64|52,5.81,2000 +Acamar|Akhir an Nahr|Eri Theta1|V1002|SAO 216113|HD 18622|CD-40 771A|HR 897|J025815.67-401816.8,f|D|A5,2:58:15.67|-53.54,-40:18:16.82|25.7,3.22,2000 +Eri Theta2|V1002|SAO 216114|HD 18623|CD-40 771B|HR 898|J025816.40-401816.9,f|D|A1,2:58:16.40|-52.73,-40:18:16.91|17.1,4.31,2000 +HD 18543|SD-03 470|PPM 185242|HR 892|J025842.07-024658.3,f|D|A2,2:58:42.08|-28.77,-2:46:58.36|-63,5.24,2000 +Per Pi-22|HD 18411|BD+39 681|Gorgonea Secunda|PPM 67966|HR 879|J025845.67+393945.8,f|S|A2,2:58:45.67|25.87,39:39:45.82|-40.7,4.69,2000 +HD 18557|SD-10 585|PPM 185244|HR 895|J025847.30-094635.4,f|S|A2,2:58:47.30|-8.28,-9:46:35.42|-16.4,6.15,2000 +Hor Beta|HD 18866|CP-64 215|PPM 353263|J025847.79-640416.6,f|S|A3,2:58:47.80|22.96,-64:4:16.62|5.4,4.98,2000 +Per 24|HD 18449|BD+34 550|HR 882|J025903.67+351059.2,f|S|K2,2:59:3.68|-46.46,35:10:59.26|5.8,4.94,2000 +CD-29 1106|PPM 245656|J025906.49-285425.9,f|S|K1,2:59:6.49|1.71,-28:54:25.97|-54.7,6.14,2000 +Ari Epsilon-48B|V1001|HD 18519|BD+20 484B|PPM 92122|HR 887|J025912.67+212024.2,f|D|A2,2:59:12.68|-12.99,21:20:24.26|-6.6,4.63,2000 +Ari Epsilon-48A|V1001|BD+20 484A|PPM 92122|HR 888|J025912.72+212025.5,f|D|A2,2:59:12.73|-12.99,21:20:25.54|-6.6,4.63,2000 +For Zeta|HD 18692|CD-25 1191|PPM 245667|J025936.18-251626.8,f|D|F2,2:59:36.18|181.76,-25:16:26.88|84.7,5.70,2000 +HD 18735|CD-33 1042|PPM 278573|J025938.30-323025.9,f|S|A0,2:59:38.30|7.34,-32:30:25.91|9.7,6.31,2000 +V1004|HD 18482|BD+40 639|PPM 45737|HR 886|J025939.87+410158.5,f|V|K2,2:59:39.88|14.71,41:1:58.59|-46.4,5.88,2000 +Eri 5|V1008|HD 18633|SD-03 475|PPM 185272|HR 899|J025941.15-022753.8,f|V|B9,2:59:41.16|-4.50,-2:27:53.83|-20.8,5.55,2000 +Cet Lambda-91|BD+08 455|PPM 146124|HR 896|J025942.90+085426.5,f|S|B6,2:59:42.90|9.19,8:54:26.51|-14.9,4.71,2000 +HD 18474|BD+46 669|HR 885|J025949.79+471314.4,f|S|G5,2:59:49.79|11.92,47:13:14.49|22.4,5.49,2000 +HD 18552|BD+37 675|PPM 67993|HR 894|J030011.89+380754.2,f|S|B8,3:0:11.89|18.17,38:7:54.27|-27.8,6.13,2000 +BD+10 401|PPM 118745|J030044.14+105213.3,f|S|K5,3:0:44.14|81.31,10:52:13.40|-34.4,5.95,2000 +Eri 7|CV ERI|SD-03 478|PPM 185291|J030050.87-025243.0,f|V|M1,3:0:50.88|7.49,-2:52:43.02|9.7,6.12,2000 +HD 18537|BD+51 665A|PPM 28164|J030052.21+522106.2,f|D|B7,3:0:52.21|31.24,52:21:6.28|-22,5.26,2000 +Eri Rho-8|HD 18784|SD-08 562|PPM 185294|J030110.02-073946.8,f|S|G9,3:1:10.02|97.82,-7:39:46.84|-72.1,5.75,2000 +For Epsilon|SAO 168238|CD-28 987|HR 914|J030137.63-280529.5,f|S|G5,3:1:37.64|283.05,-28:5:29.59|-440.9,5.88,2000 +HD 18832|BD+04 485|PPM 146163|J030152.30+052010.1,f|S|K0,3:1:52.30|43.31,5:20:10.14|19.7,6.25,2000 +Ari 49|V1021|HD 18769|BD+25 477|PPM 92159|J030154.14+262744.4,f|V|A3,3:1:54.14|-13.83,26:27:44.47|4.9,5.92,2000 +SAO 148721|HD 18885|SD-10 594|HR 912|J030156.11-095741.0,f|S|G5,3:1:56.12|43.58,-9:57:41.06|-5.5,5.83,2000 +HD 18894|SD-07 537|PPM 185312|HR 913|J030209.27-062940.3,f|S|G0,3:2:9.28|80.48,-6:29:40.36|-143.7,6.20,2000 +Hyi Theta|SAO 255945|CP-72 219|PPM 367896|HR 939|J030215.44-715408.8,f|D|B3,3:2:15.45|27.17,-71:54:8.84|15.9,5.51,2000 +Menkar|Mekab|Monkar|Cet Alpha-92|Alpha Ceti|HD 18884|BD+03 419|PPM 146172|HR 911|J030216.77+040523.0,f|S|M1,3:2:16.77|-11.82,4:5:23.04|-78.8,2.55,2000 +Cet 93|HD 18883|BD+03 420|PPM 146174|J030222.51+042110.3,f|S|B7,3:2:22.52|16.75,4:21:10.38|5.6,5.62,2000 +Eri Tau-11|SAO 168249|HD 18978|CD-24 1387|HR 919|J030223.50-233728.0,f|S|A4,3:2:23.50|-145.95,-23:37:28.10|-55.8,4.09,2000 +Eri Rho-9|HD 18953|SD-08 568|PPM 185323|HR 917|J030242.27-074107.6,f|D|K0,3:2:42.27|26.31,-7:41:7.70|-3.6,5.33,2000 +HD 19141|CD-47 932|HR 929|J030255.86-465830.1,f|S|K2,3:2:55.86|24.77,-46:58:30.13|2.4,5.80,2000 +HD 18928|BD+27 468|PPM 92179|HR 916|J030330.15+281611.6,f|S|F0,3:3:30.16|66.85,28:16:11.66|-20.6,6.37,2000 +Hor Mu|SAO 232981|HD 19319|CP-60 236|PPM 332347|HR 934|J030336.81-594415.9,f|S|F0,3:3:36.82|-72.80,-59:44:15.99|-63.9,5.12,2000 +V0509 PER|HD 18878|BD+47 760|J030356.74+475054.5,f|V|F0,3:3:56.74|-8.76,47:50:54.53|-6.1,6.47,2000 +Eri Rho-10|SD-08 572|PPM 185352|HR 925|J030416.51-073603.0,f|S|A8,3:4:16.52|65.42,-7:36:3.08|17.4,5.26,2000 +HD 19121|BD+01 534|HR 926|J030438.06+015148.9,f|S|K0,3:4:38.07|26.24,1:51:48.97|-0.7,6.05,2000 +Per Gamma-23A|Gamma Persei|HD 18925|BD+52 654A|HR 915|J030447.79+533023.1,f|D|G8,3:4:47.79|0.54,53:30:23.18|-4.2,2.94,2000 +Per Rho-25|Rho Persei|BD+38 630|Gorgonea Tertia|HR 921|J030510.59+385024.9,f|S|M4,3:5:10.59|128.75,38:50:24.99|-106.6,3.41,2000 +SD-08 577|PPM 185369|J030511.29-081627.2,f|S|K0,3:5:11.30|61.16,-8:16:27.29|22.3,6.31,2000 +BD+40 664|PPM 45824|HR 923|J030521.01+403455.8,f|S|K0,3:5:21.01|-25.06,40:34:55.85|-4.3,6.06,2000 +Ari 52A|HD 19134|BD+24 431|PPM 92197|HR 927|J030526.70+251518.6,f|D|B7,3:5:26.70|7.73,25:15:18.70|-8.5,5.46,2000 +BD+56 767|HR 918|J030532.41+564220.5,f|S|G9,3:5:32.41|-13.50,56:42:20.59|70.3,4.77,2000 +HD 18991|BD+55 738|J030540.16+560408.2,f|S|G9,3:5:40.17|17.33,56:4:8.28|-24.3,6.11,2000 +V15625|HD 18438|BD+78 103|PPM 5183|HR 881|J030607.84+792506.7,f|D|M1,3:6:7.84|-34.65,79:25:6.73|10.3,5.52,2000 +BD+12 436|PPM 118814|HR 931|J030623.68+131114.1,f|S|K3,3:6:23.69|-3.36,13:11:14.10|-62.7,5.64,2000 +V15634|HD 19349|SD-06 606|PPM 185399|HR 935|J030633.49-060518.7,f|D|M3,3:6:33.49|7.16,-6:5:18.80|-5.1,5.26,2000 +BD+63 390|HR 922|J030718.99+640327.3,f|S|B9,3:7:19.00|-13.65,64:3:27.34|-3.2,5.89,2000 +Ari 53|UW ARI|HD 19374|BD+17 493|PPM 118828|HR 938|J030725.67+175247.9,f|V|B1,3:7:25.67|-23.55,17:52:47.98|9.3,6.14,2000 +BN HYI|SAO 255962|CP-79 91A|PPM 367933|HR 981|J030732.14-785921.2,f|D|F2,3:7:32.14|79.07,-78:59:21.28|73.6,5.67,2000 +V0521 PER|HD 19279|BD+46 692|HR 933|J030747.34+471831.3,f|V|A3,3:7:47.34|3.97,47:18:31.35|1.5,6.38,2000 +SAO 248742|CP-69 174|PPM 353349|HR 959|J030748.93-691553.7,f|S|K1,3:7:48.94|-37.39,-69:15:53.71|15.1,6.12,2000 +SAO 168321|HD 19545|CD-28 1028|PPM 245846|HR 943|J030750.84-274952.1,f|S|A5,3:7:50.85|65.66,-27:49:52.14|-20.6,6.18,2000 +HD 19268|BD+51 681|PPM 28239|J030803.85+521248.6,f|S|B5,3:8:3.85|23.53,52:12:48.64|-21.6,6.33,2000 +Algol|Gorgonea Prima|Gorgona|El Ghoul|Per Beta-26A|Beta Persei|HD 19356|BD+40 673|PPM 45864|HR 936|J030810.13+405720.3,f|D|B8,3:8:10.13|2.38,40:57:20.33|-1.4,2.11,2000 +Ari 54|V15637|BD+18 414|PPM 118844|J030821.10+184742.1,f|V|M0,3:8:21.11|37.91,18:47:42.19|-14.3,6.25,2000 +HD 19525|BD+07 478|PPM 146278|HR 942|J030838.79+082815.8,f|S|G9,3:8:38.79|-3.41,8:28:15.85|73.3,6.28,2000 +V0801 CAS|HD 19243|BD+61 525|J030854.17+622304.5,f|V|B1,3:8:54.18|-2.02,62:23:4.55|-0.2,6.50,2000 +Per Iota|HD 19373|BD+49 857|PPM 45875|HR 937|J030904.01+493647.7,f|D|G0,3:9:4.02|1262.23,49:36:47.80|-91.6,4.05,2000 +HD 19549|BD+20 514|PPM 92243|J030920.13+204540.0,f|S|K2,3:9:20.13|51.48,20:45:40.04|-11.8,6.42,2000 +Per Kappa-27|V1055|HD 19476|BD+44 631|PPM 45885|HR 941|J030929.77+445127.1,f|D|K0,3:9:29.77|173.00,44:51:27.16|-142.1,3.79,2000 +Ari 55|HD 19548|BD+28 499|PPM 92246|HR 944|J030936.74+290437.4,f|S|B8,3:9:36.74|22.16,29:4:37.49|-13.2,5.75,2000 +BD+27 480|PPM 92256|HR 945|J031008.83+274911.1,f|S|A0,3:10:8.84|17.64,27:49:11.16|-50.9,6.42,2000 +HD 19637|BD+26 516|PPM 92264|HR 946|J031027.04+265346.4,f|S|K3,3:10:27.05|2.81,26:53:46.44|66.9,6.03,2000 +SAO 216197|HD 19948|CD-49 884|J031027.25-484402.9,f|S|K1,3:10:27.25|16.72,-48:44:2.96|-25,6.11,2000 +SAO 168354|HD 19826|CD-24 1480|HR 953|J031035.38-234418.7,f|S|K0,3:10:35.39|60.42,-23:44:18.77|31.2,6.38,2000 +HD 19698|BD+11 445|PPM 118883|HR 948|J031038.79+115221.4,f|S|B8,3:10:38.79|30.68,11:52:21.46|-27,5.97,2000 +HD 19439|BD+64 375|PPM 14121|J031100.73+645346.5,f|S|A4,3:11:0.74|-49.00,64:53:46.56|-14.8,6.50,2000 +SAO 148816|SD-13 604|PPM 212538|J031105.28-131551.4,f|S|G0,3:11:5.28|26.86,-13:15:51.42|8.1,6.37,2000 +SAO 148821|HD 19887|SD-16 587|PPM 212547|HR 957|J031116.72-160129.8,f|S|K0,3:11:16.73|-25.66,-16:1:29.88|-11.1,6.25,2000 +Per Omega-28|HD 19656|BD+39 724|Gorgonea Quarta|PPM 68182|HR 947|J031117.38+393641.6,f|D|K1,3:11:17.38|-26.23,39:36:41.70|4.8,4.61,2000 +V15646|HD 19836|SD-04 540|PPM 185494|HR 955|J031118.77-034841.7,f|D|M1,3:11:18.78|-4.19,-3:48:41.74|-16.7,6.09,2000 +HD 19789|BD+12 452|PPM 118896|HR 952|J031121.91+130252.2,f|S|K0,3:11:21.92|-15.64,13:2:52.24|17.1,6.11,2000 +Botein|Ari Delta-57|V1066|HD 19787|BD+19 477|PPM 118897|HR 951|J031137.76+194336.0,f|V|K0,3:11:37.77|154.61,19:43:36.04|-8.4,4.35,2000 +V1042|HD 18778|BD+80 97|PPM 538|J031142.67+812814.5,f|D|A7,3:11:42.67|-45.63,81:28:14.55|-0.9,5.91,2000 +HD 19275|BD+73 168|HR 932|J031156.26+742337.1,f|S|A2,3:11:56.27|14.45,74:23:37.17|-86.2,4.84,2000 +Fornacis|For Alpha|SAO 168373|CD-29 1177|PPM 245929|HR 963|J031204.52-285915.4,f|D|F8,3:12:4.53|371.45,-28:59:15.43|612.3,3.80,2000 +HD 19736|BD+41 631|PPM 45917|J031209.55+422233.2,f|S|B4,3:12:9.56|16.40,42:22:33.26|-17.2,6.15,2000 +Ari 56|SX ARI|HD 19832|BD+26 523|PPM 92289|HR 954|J031214.24+271525.0,f|V|B9,3:12:14.25|11.73,27:15:25.09|-18.3,5.78,2000 +CD-44 1025|HR 968|J031225.74-442510.7,f|D|F7,3:12:25.75|82.71,-44:25:10.78|-2.6,6.03,2000 +EL CET|HD 19926|BD+06 496|PPM 146333|HR 958|J031226.36+063939.1,f|V|K1,3:12:26.37|-8.05,6:39:39.18|-1.3,5.57,2000 +HD 19735|BD+47 779|PPM 45922|HR 949|J031226.42+474333.1,f|D|K5,3:12:26.42|73.25,47:43:33.15|-84.9,6.32,2000 +TW HOR|CP-57 513|PPM 332477|HR 977|J031233.16-571917.5,f|V|C7,3:12:33.16|18.63,-57:19:17.58|13.6,5.78,2000 +Cet 94|HD 19994|BD-01 457|PPM 175267|HR 962|J031246.43-011145.9,f|D|F8,3:12:46.44|193.46,-1:11:45.96|-69.2,5.07,2000 +V15655|SAO 194163|CD-36 1208|PPM 278818|J031301.48-355637.2,f|V|B8,3:13:1.49|-0.85,-35:56:37.28|7.7,6.29,2000 +HD 19845|BD+47 782|HR 956|J031323.87+481037.0,f|S|G9,3:13:23.87|16.90,48:10:37.03|-18.8,5.92,2000 +V1082|SAO 168397|CD-30 1238|PPM 245973|HR 974|J031337.94-294814.8,f|V|K1,3:13:37.95|15.49,-29:48:14.87|-3.1,6.17,2000 +BD+18 432|PPM 118924|J031354.88+185824.0,f|S|K5,3:13:54.89|25.67,18:58:24.01|10.5,6.50,2000 +Ari Zeta-58|BD+20 527|PPM 92319|HR 972|J031454.09+210239.9,f|S|A1,3:14:54.10|-29.82,21:2:39.99|-77.2,4.88,2000 +BD+41 638|PPM 45964|HR 966|J031456.58+423013.0,f|S|K1,3:14:56.59|52.75,42:30:13.09|7.2,6.07,2000 +CD-26 1210|PPM 245999|J031500.27-260601.6,f|S|A5,3:15:0.27|-10.64,-26:6:1.65|-21.8,6.25,2000 +BD+30 512|PPM 68258|HR 971|J031520.43+303324.0,f|S|A1,3:15:20.44|-16.53,30:33:24.08|6,5.61,2000 +BD+32 591|PPM 68267|HR 975|J031547.14+325124.1,f|D|F4,3:15:47.14|-8.95,32:51:24.16|19,6.31,2000 +V15657|BD+56 798|PPM 28337|HR 964|J031547.97+570826.2,f|D|A0,3:15:47.97|-1.95,57:8:26.23|-2,5.82,2000 +Eri Zeta-13|V1088|SD-09 624|PPM 185579|HR 984|J031550.02-084911.0,f|V|A5,3:15:50.02|-3.85,-8:49:11.03|45.5,4.81,2000 +Hyi Iota|SAO 255973|CP-77 134|PPM 367983|J031557.66-772318.4,f|S|F4,3:15:57.66|113.19,-77:23:18.43|62,5.51,2000 +V1090|SD-06 636|PPM 185583|HR 983|J031600.85-055507.3,f|D|B9,3:16:0.85|9.85,-5:55:7.34|-3.6,6.20,2000 +V0423 PER|BD+34 610|PPM 68274|HR 976|J031601.86+344118.6,f|D|A1,3:16:1.86|41.44,34:41:18.65|-39.4,6.24,2000 +V15659|BD+44 648|PPM 45984|HR 973|J031604.45+452046.0,f|V|M2,3:16:4.46|31.94,45:20:46.08|-33.7,6.16,2000 +BD+50 729|PPM 28342|HR 969|J031612.20+505615.5,f|S|G6,3:16:12.20|-1.32,50:56:15.59|-19.2,5.05,2000 +V15661|SD-06 638|PPM 185591|J031621.72-054349.6,f|V|K5,3:16:21.72|22.09,-5:43:49.67|-20.2,6.34,2000 +V0573 PER|BD+31 576|PPM 68287|HR 978|J031635.18+321102.4,f|V|G8,3:16:35.19|-4.06,32:11:2.46|-83.1,6.00,2000 +Eri 14|SD-09 627|PPM 185595|HR 988|J031635.76-090916.8,f|S|F1,3:16:35.77|1.48,-9:9:16.83|28.9,6.16,2000 +BD+39 743|HR 979|J031711.45+402858.7,f|D|B9,3:17:11.46|13.92,40:28:58.72|-31.1,6.44,2000 +SAO 216246|CD-48 900|HR 998|J031726.59-474505.9,f|S|K2,3:17:26.60|-6.86,-47:45:5.99|30.3,5.84,2000 +BD+65 338|PPM 14194|HR 967|J031731.52+653930.1,f|D|A3,3:17:31.53|-10.33,65:39:30.12|6.9,6.47,2000 +BD+30 520|J031740.04+310737.3,f|S|G0,3:17:40.05|-103.11,31:7:37.37|-56.7,6.40,2000 +BD+38 690|HR 986|J031745.75+391700.1,f|S|A2,3:17:45.75|22.29,39:17:0.14|-16.7,5.98,2000 +Ret Zeta1|V15672|CP-63 217|PPM 353436|J031746.16-623431.1,f|D|G2,3:17:46.16|1337.74,-62:34:31.16|648.8,5.53,2000 +Per 30|BD+43 674|HR 982|J031747.35+440130.0,f|S|B8,3:17:47.35|26.64,44:1:30.09|-23.7,5.49,2000 +SAO 248776|CP-67 217|PPM 353439|J031759.07-665536.6,f|S|A3,3:17:59.07|57.14,-66:55:36.67|13.1,6.03,2000 +SAO 168449|CD-29 1216|HR 993|J031802.59-284749.4,f|S|F3,3:18:2.60|155.37,-28:47:49.47|-16.1,5.92,2000 +Ret Zeta2|SAO 248774|CP-62 265|PPM 353441|J031812.81-623022.9,f|D|G1,3:18:12.82|1331.01,-62:30:22.91|647,5.24,2000 +Eri 15|SAO 168452|CD-22 1146|HR 994|J031822.10-223040.0,f|D|G6,3:18:22.11|14.13,-22:30:40.03|10.9,4.87,2000 +Cet 95A|BD-01 469|PPM 175279|HR 992|J031822.42-005549.0,f|D|G9,3:18:22.43|251.67,-0:55:49.04|-60.6,5.42,2000 +Per 29|BD+49 899|PPM 28374|HR 987|J031837.74+501319.8,f|S|B3,3:18:37.74|22.46,50:13:19.83|-25.1,5.17,2000 +SAO 148897|SD-19 651|PPM 212728|HR 997|J031841.14-183335.2,f|D|F0,3:18:41.15|124.85,-18:33:35.26|-63.3,5.83,2000 +BD+33 619|HR 991|J031843.82+341321.5,f|S|K2,3:18:43.82|1.24,34:13:21.55|-8.7,4.82,2000 +Per 31|BD+49 902|PPM 28382|HR 989|J031907.63+500541.8,f|S|B5,3:19:7.64|22.42,50:5:41.88|-25.3,5.04,2000 +Cet Kappa-96A|Kappa1 Ceti|BD+02 518|PPM 146448|HR 996|J031921.69+032212.7,f|D|G5,3:19:21.70|268.93,3:22:12.71|93.5,4.85,2000 +Eri Tau-16|Tau4 Eridani|SD-22 584|J031931.00-214528.3,f|D|M3,3:19:31.00|51.41,-21:45:28.31|32.2,3.74,2000 +AI FOR|SAO 168462|CD-24 1578|J031934.90-240722.4,f|V|M2,3:19:34.91|5.89,-24:7:22.45|-22.7,5.65,2000 +SAO 216263|CD-43 1028|J031955.65-430411.2,f|S|G8,3:19:55.65|3037.18,-43:4:11.22|726.5,4.26,2000 +Ari 59|BD+26 540|PPM 92397|HR 995|J031955.79+270416.0,f|S|G6,3:19:55.80|-24.71,27:4:16.08|-71.1,5.92,2000 +BK CAM|BD+65 340|PPM 14217|HR 985|J031959.27+653908.2,f|D|B2,3:19:59.27|11.26,65:39:8.25|-14.3,4.74,2000 +V1094|HD 19978|BD+77 115|PPM 5249|HR 961|J032019.75+774405.0,f|D|A6,3:20:19.76|64.91,77:44:5.07|-66.2,5.45,2000 +BD+28 516|HR 999|J032020.36+290254.4,f|S|K3,3:20:20.36|-8.26,29:2:54.45|-16.4,4.46,2000 +Ari 60|BD+25 536|J032025.57+253945.8,f|S|K5,3:20:25.57|11.36,25:39:45.86|-93.3,6.14,2000 +SAO 168475|CD-27 1183|PPM 246123|J032045.20-263623.4,f|S|F7,3:20:45.20|41.58,-26:36:23.42|22.8,6.41,2000 +Cet Kappa-97|SAO 111142|BD+03 461|PPM 146481|J032106.80+034032.2,f|S|G8,3:21:6.80|55.98,3:40:32.23|-25.2,5.68,2000 +Ari Tau-61|Tau1 Arietis|BD+20 543|PPM 92422|J032113.62+210849.5,f|D|B5,3:21:13.62|21.68,21:8:49.51|-22.4,5.31,2000 +SAO 168482|CD-24 1600|PPM 246138|J032124.01-233806.4,f|S|G6,3:21:24.01|-24.19,-23:38:6.49|-18.9,5.50,2000 +Per 32|V1107|BD+42 750|J032126.55+431946.7,f|V|A3,3:21:26.56|-60.45,43:19:46.74|-0.4,4.95,2000 +SAO 216278|CD-48 930|J032133.43-474635.9,f|S|K0,3:21:33.43|7.06,-47:46:35.98|-13,6.40,2000 +BD+48 893|J032152.53+490415.2,f|D|F6,3:21:52.53|180.91,49:4:15.26|-63.5,5.94,2000 +Ari 62|BD+27 500|PPM 92435|J032211.89+273627.1,f|S|G5,3:22:11.89|4.39,27:36:27.19|-9.9,5.55,2000 +SAO 168493|CD-26 1257|PPM 246155|J032216.28-253516.0,f|S|A0,3:22:16.29|5.14,-25:35:16.09|0.7,6.35,2000 +Ari Tau-63|BD+20 551|PPM 92448|J032245.24+204431.4,f|S|K3,3:22:45.24|-49.24,20:44:31.45|-14.9,5.08,2000 +V0575 PER|BD+48 899|J032313.19+491247.7,f|V|B5,3:23:13.19|20.68,49:12:47.77|-25,5.33,2000 +SD-08 643|PPM 185716|J032317.70-074738.7,f|D|G2,3:23:17.70|2.08,-7:47:38.75|-219.5,6.22,2000 +SAO 111162|BD+00 581|PPM 146516|J032336.30+005436.3,f|S|K0,3:23:36.30|-5.10,0:54:36.31|-92.2,6.48,2000 +SAO 111161|BD+04 532|PPM 146517|J032338.98+045255.5,f|D|G1,3:23:38.99|-6.87,4:52:55.58|-2.6,6.40,2000 +V15683|SAO 194268|HD 21149|CD-33 1202|J032344.62-324225.5,f|V|K3,3:23:44.62|19.69,-32:42:25.52|1.8,6.50,2000 +SAO 248797|HD 21563|CP-70 230|J032402.31-693728.5,f|S|G0,3:24:2.31|22.09,-69:37:28.58|18.4,6.14,2000 +BD+12 473|J032410.12+123746.5,f|S|K0,3:24:10.13|25.91,12:37:46.52|-21.3,6.05,2000 +Ari 64|BD+24 481|PPM 92472|J032418.47+244326.6,f|S|K5,3:24:18.47|15.67,24:43:26.63|-51.4,5.50,2000 +Mirfak|Algenib|Mirphak|Per Alpha-33|V1125|BD+49 917|PPM 46127|J032419.37+495140.2,f|D|F5,3:24:19.37|24.08,49:51:40.25|-26,1.81,2000 +Ari 65|BD+20 556|PPM 92473|J032426.11+204812.5,f|S|A1,3:24:26.12|2.52,20:48:12.56|-9.8,6.08,2000 +V15681|BD+33 636|PPM 68426|J032429.70+333209.4,f|D|A0,3:24:29.70|31.88,33:32:9.46|-23,5.80,2000 +CQ CAM|BD+64 391|PPM 14269|J032440.55+643509.5,f|V|M0,3:24:40.56|-3.22,64:35:9.59|0.1,5.17,2000 +Tau Omicron-1|V1134|SAO 111172|BD+08 511|PPM 146534|J032448.79+090143.9,f|V|G6,3:24:48.79|-74.22,9:1:43.93|-80.3,3.61,2000 +HD 21722|CP-69 192|J032536.25-692011.1,f|S|F3,3:25:36.25|-0.42,-69:20:11.17|64.8,5.96,2000 +For Chi1|V1142|SAO 194289|HD 21423|CD-36 1290|J032555.84-355515.1,f|V|A1,3:25:55.84|36.32,-35:55:15.19|-4.7,6.39,2000 +V0576 PER|BD+48 913|PPM 46159|J032557.38+490714.7,f|V|B7,3:25:57.38|22.78,49:7:14.72|-27.1,6.08,2000 +SAO 216316|HD 21473|CD-42 1115|J032611.78-413812.9,f|S|A0,3:26:11.78|19.62,-41:38:12.98|27,6.33,2000 +SAO 168544|CD-27 1228|PPM 246241|J032622.52-271902.9,f|S|G5,3:26:22.52|7.73,-27:19:2.92|53.5,5.93,2000 +UX ARI|HD 21242|BD+28 532|J032635.38+284254.3,f|V|G5,3:26:35.39|41.31,28:42:54.31|-104.3,6.49,2000 +Tau Xi-2|Xi Tauri|SAO 111195|HD 21364|BD+09 439|PPM 146568|J032710.15+094357.6,f|S|B9,3:27:10.15|53.67,9:43:57.65|-38.1,3.73,2000 +HD 21379|BD+12 477|J032718.67+124407.0,f|S|A0,3:27:18.68|11.41,12:44:7.04|-7.5,6.29,2000 +For Chi2|V15697|SAO 194312|HD 21574|CD-36 1306|J032733.42-354052.7,f|V|K2,3:27:33.42|76.76,-35:40:52.77|6.4,5.70,2000 +SAO 148972|SD-11 667|J032800.94-111711.7,f|S|K2,3:28:0.95|-1.47,-11:17:11.76|-46.4,5.74,2000 +HD 21278|BD+48 920|J032803.06+490346.3,f|S|B5,3:28:3.07|21.92,49:3:46.32|-26.8,4.99,2000 +BD+33 656|PPM 68486|J032820.69+334827.2,f|S|A2,3:28:20.70|28.17,33:48:27.21|-57.4,5.72,2000 +BD+59 657|J032823.59+601520.3,f|D|B9,3:28:23.59|23.07,60:15:20.36|-22.3,6.50,2000 +Ari 66A|HD 21467|BD+22 495|PPM 92534|J032826.56+224814.4,f|D|K0,3:28:26.57|0.00,22:48:14.42|-111.4,6.04,2000 +V15696|HD 21362|BD+49 944|PPM 46227|J032852.32+495054.1,f|V|B6,3:28:52.33|22.54,49:50:54.18|-25.6,5.59,2000 +SAO 111215|HD 21585|BD+02 552|J032903.80+031455.3,f|S|G5,3:29:3.80|-2.40,3:14:55.34|7.3,6.41,2000 +CS CAM|HD 21291|BD+59 660|J032904.13+595625.1,f|D|B9,3:29:4.13|-0.83,59:56:25.19|-1.9,4.26,2000 +Per 34|HD 21428|BD+49 945|PPM 46235|J032922.05+493032.2,f|D|B3,3:29:22.05|22.21,49:30:32.21|-29.2,4.69,2000 +Ret Kappa|SAO 248819|CP-63 234|PPM 353551|J032922.67-625615.0,f|D|F5,3:29:22.68|383.06,-62:56:15.10|373.1,4.71,2000 +HD 21455|BD+46 760|PPM 46236|J032926.28+465616.3,f|D|B7,3:29:26.28|22.33,46:56:16.33|-28.6,6.23,2000 +SAO 148985|HD 21688|SD-13 662|J032936.02-124029.0,f|S|A5,3:29:36.03|7.76,-12:40:29.05|5,5.58,2000 +V15706|HD 21665|SD-07 606|PPM 185842|J032939.13-064816.0,f|V|G5,3:29:39.14|-84.90,-6:48:16.05|-89.9,5.99,2000 +CE CAM|HD 21389|BD+58 607|PPM 28511|J032954.74+585243.4,f|V|A0,3:29:54.74|-1.94,58:52:43.50|-1.1,4.60,2000 +SAO 216347|HD 21882|CD-43 1085|J032955.14-423803.3,f|S|A5,3:29:55.15|-59.48,-42:38:3.32|-1.4,5.77,2000 +SAO 255998|HD 22676|CP-78 101|J032958.89-782106.6,f|S|G8,3:29:58.89|-11.27,-78:21:6.66|-26.7,5.68,2000 +V1159|HD 21447|BD+54 684|PPM 28513|J033000.18+552706.5,f|D|A1,3:30:0.18|-45.42,55:27:6.51|-11.8,5.10,2000 +V1158|HD 21427|BD+58 608|PPM 28518|J033010.94+592157.4,f|D|A2,3:30:10.95|14.06,59:21:57.41|-50.3,6.23,2000 +V1179|HD 21899|CD-41 1029|J033013.57-412211.7,f|V|F7,3:30:13.58|-10.36,-41:22:11.78|-172.8,6.12,2000 +V0805 CAS|HD 21179|BD+71 201|J033019.39+715150.0,f|V|M2,3:30:19.40|3.88,71:51:50.03|0.1,6.39,2000 +Tau 4|HD 21686|BD+10 452|PPM 119132|J033024.46+112011.1,f|S|A0,3:30:24.47|-11.77,11:20:11.19|-16.1,5.13,2000 +Per Sigma-35|V1167|HD 21552|BD+47 843|PPM 46257|J033034.48+475942.7,f|V|K3,3:30:34.48|1.61,47:59:42.78|18.1,4.34,2000 +HD 21551|BD+47 844|J033036.95+480612.9,f|S|B8,3:30:36.95|21.24,48:6:12.95|-24,5.82,2000 +TU HOR|SAO 216357|HD 21981|CD-47 1071|J033036.95-472230.4,f|V|A1,3:30:36.95|64.60,-47:22:30.45|20,5.98,2000 +Eri 17|SD-05 674|PPM 185854|J033037.05-050430.5,f|S|B9,3:30:37.06|13.30,-5:4:30.52|7.3,4.74,2000 +HD 21755|BD+05 502|PPM 146629|J033045.41+061119.3,f|S|G8,3:30:45.42|42.35,6:11:19.33|-16.8,5.92,2000 +SAO 248825|HD 22252|CP-66 195|PPM 353561|J033051.70-662922.9,f|S|B8,3:30:51.71|16.99,-66:29:22.97|1.7,5.81,2000 +Tau 5|HD 21754|BD+12 486|PPM 119139|J033052.37+125612.0,f|S|K0,3:30:52.38|19.01,12:56:12.04|-1.6,4.13,2000 +V1173|BD+48 938|PPM 46275|J033129.33+491235.1,f|V|A0,3:31:29.34|-14.90,49:12:35.17|-1.3,6.29,2000 +HD 21684|BD+40 772|PPM 46277|J033130.29+404535.7,f|S|A5,3:31:30.30|25.22,40:45:35.76|-41.9,6.50,2000 +HD 21661|BD+48 942|PPM 46284|J033149.03+492403.9,f|S|B9,3:31:49.04|-1.66,49:24:3.94|-1,6.42,2000 +SAO 168612|HD 21997|CD-26 1333|PPM 246344|J033153.64-253650.9,f|S|A3,3:31:53.65|53.43,-25:36:50.94|-15,6.37,2000 +V0396 PER|HD 21699|BD+47 847|PPM 46292|J033208.60+480124.5,f|V|B8,3:32:8.60|22.87,48:1:24.51|-23.8,5.47,2000 +BD+84 59|PPM 599|HR 965|J033220.12+845439.7,f|S|G5,3:32:20.13|62.36,84:54:39.74|-133,5.61,2000 +Per 36|V1182|BD+45 778|PPM 46297|J033226.25+460324.7,f|V|F4,3:32:26.26|-52.77,46:3:24.70|-74.7,5.31,2000 +V15715|SAO 233152|HD 22231|CD-50 1071|PPM 332729|J033234.80-502243.1,f|V|K2,3:32:34.80|94.22,-50:22:43.13|83.2,5.66,2000 +Tau 6|SAO 111246|HD 21933|BD+08 528|PPM 146652|J033235.94+092224.3,f|S|B9,3:32:35.95|32.56,9:22:24.38|-49.2,5.76,2000 +KP PER|BD+44 734|PPM 46298|J033238.97+445120.7,f|V|B2,3:32:38.98|1.17,44:51:20.73|-6.4,6.43,2000 +V15713|HD 21856|BD+34 674|PPM 68561|J033240.01+352742.2,f|V|B1,3:32:40.02|-6.72,35:27:42.23|3.7,5.91,2000 +SAO 248834|HD 22382|CP-61 267|J033251.55-610100.7,f|S|K0,3:32:51.56|77.48,-61:1:0.74|47.4,6.42,2000 +Eri Epsilon-18|Epsilon Eridani|SD-09 697|J033255.84-092729.7,f|D|K2,3:32:55.84|-976.39,-9:27:29.74|18,3.73,2000 +HD 21769|BD+58 619|PPM 28553|J033332.20+584554.8,f|D|A4,3:33:32.20|13.07,58:45:54.87|-45.6,6.42,2000 +IW PER|HD 21912|BD+39 811|PPM 68571|J033335.03+395358.1,f|V|A5,3:33:35.04|17.03,39:53:58.12|-46,5.80,2000 +HD 21819|BD+54 693|PPM 28555|J033339.05+545829.4,f|S|A3,3:33:39.06|-41.32,54:58:29.48|-1.6,5.98,2000 +HD 21794|BD+57 730|PPM 28556|J033341.24+575207.4,f|D|F7,3:33:41.24|7.02,57:52:7.41|36.8,6.38,2000 +Eri Tau-19|SAO 168634|SD-22 628|PPM 246387|J033347.27-213758.3,f|S|B8,3:33:47.28|44.90,-21:37:58.38|-27.5,4.27,2000 +SAO 194375|HD 22262|CD-31 1450|J033356.78-310448.3,f|D|F5,3:33:56.79|-44.58,-31:4:48.35|89,6.21,2000 +BD+17 575|PPM 119185|J033408.37+174958.1,f|S|K1,3:34:8.38|95.53,17:49:58.18|-310.6,6.16,2000 +Tau 7A|V1192|BD+23 473|J033426.62+242751.8,f|D|A3,3:34:26.62|2.73,24:27:51.81|-34,5.99,2000 +V15719|SAO 194379|HD 22322|CD-32 1358|PPM 279176|J033433.58-315229.2,f|D|K3,3:34:33.59|15.41,-31:52:29.28|-1.1,6.41,2000 +HD 22243|SD-10 704|PPM 185933|J033437.47-095205.7,f|S|A2,3:34:37.47|20.10,-9:52:5.74|5,6.25,2000 +SAO 111273|HD 22211|BD+05 511|PPM 146696|J033449.08+062503.6,f|S|G0,3:34:49.08|-23.40,6:25:3.69|-17,6.49,2000 +SAO 168648|HD 22333|CD-26 1348|J033452.40-253458.1,f|S|K0,3:34:52.41|51.55,-25:34:58.17|33.4,6.48,2000 +HD 22379|SD-05 696|PPM 185965|J033557.24-050729.8,f|S|K0,3:35:57.25|-5.38,-5:7:29.84|-4.1,6.50,2000 +SD-11 696|PPM 213132|J033557.66-111137.6,f|S|G5,3:35:57.67|23.69,-11:11:37.62|80.6,5.58,2000 +Eri 20|EG ERI|SD-17 699|PPM 213138|J033617.41-172801.4,f|V|B9,3:36:17.41|33.34,-17:28:1.45|-9.7,5.25,2000 +Per Psi-37|Psi Persei|HD 22192|BD+47 857|PPM 46366|J033629.37+481133.4,f|S|B5,3:36:29.38|21.40,48:11:33.48|-27.6,4.32,2000 +HD 23474|CP-78 105|HR 1154|J033630.12-781923.0,f|S|K2,3:36:30.13|-14.30,-78:19:23.08|6.5,6.30,2000 +V0711 TAU|SAO 111291|HD 22468|BD+00 616|PPM 146726|J033647.28+003515.9,f|D|G9,3:36:47.29|-33.00,0:35:15.93|-163.5,5.90,2000 +Tau 10|SAO 111292|HD 22484|BD-00 572|PPM 146728|J033652.38+002405.9,f|S|F9,3:36:52.38|-232.64,0:24:5.98|-482,4.30,2000 +HD 22663|CD-40 1008|J033705.68-401628.3,f|S|K1,3:37:5.68|2.75,-40:16:28.36|-14.2,4.59,2000 +HD 22522|BD+14 586|PPM 119236|J033747.83+152549.9,f|S|A5,3:37:47.83|22.41,15:25:49.99|-29.5,6.41,2000 +BD+42 795|PPM 46386|J033800.18+423458.2,f|S|B8,3:38:0.18|19.11,42:34:58.23|-24.6,6.41,2000 +HD 22316|BD+56 826|PPM 28599|J033819.73+565557.7,f|S|B9,3:38:19.73|26.93,56:55:57.77|-34.9,6.29,2000 +HD 22675|SD-07 647|J033829.25-072330.7,f|S|G5,3:38:29.25|-1.04,-7:23:30.71|-63.2,5.85,2000 +For Tau|HD 22789|CD-28 1225|PPM 246487|HR 1114|J033847.67-275634.9,f|S|A0,3:38:47.67|21.60,-27:56:34.99|25.9,6.01,2000 +V1213|HD 22615|BD+20 602|PPM 92695|J033900.06+205456.7,f|V|A3,3:39:0.06|-4.62,20:54:56.75|-34.3,6.49,2000 +Eri 21|HD 22713|SD-06 713|HR 1111|J033901.11-053734.3,f|S|K1,3:39:1.12|-13.58,-5:37:34.35|-207.1,5.97,2000 +BD+75 143|PPM 5334|J033925.08+754422.6,f|S|G9,3:39:25.08|-5.73,75:44:22.64|8.7,6.25,2000 +HD 22799|SD-10 717|HR 1117|J033925.40-102614.2,f|S|G5,3:39:25.41|-26.55,-10:26:14.20|-103.7,6.18,2000 +HD 22695|BD+16 484|PPM 119253|J033925.75+163212.0,f|D|K0,3:39:25.75|40.41,16:32:12.07|-33.3,6.18,2000 +HD 22798|SD-03 591|HR 1116|J033938.34-032334.8,f|S|G5,3:39:38.35|-14.37,-3:23:34.84|-68.9,6.22,2000 +Tau 12|SAO 111334|HD 22796|BD+02 581|PPM 146789|HR 1115|J033951.12+030324.7,f|S|G5,3:39:51.12|-36.55,3:3:24.71|8.3,5.55,2000 +HD 22819|BD-01 519|PPM 175352|HR 1119|J033959.56-010716.4,f|S|K1,3:39:59.57|33.44,-1:7:16.41|-6.4,6.12,2000 +SD-15 634|PPM 213229|J034011.43-151335.5,f|S|G5,3:40:11.44|-3.76,-15:13:35.52|-14.1,6.34,2000 +Eri 22|FY ERI|SD-05 715|HR 1121|J034038.33-051238.5,f|V|B9,3:40:38.33|0.15,-5:12:38.54|-3.6,5.53,2000 +Tau 11|BD+24 529|PPM 92732|HR 1118|J034046.30+251946.1,f|S|A2,3:40:46.31|9.63,25:19:46.17|-14,6.11,2000 +V1225|BD+37 811|PPM 68686|HR 1113|J034107.85+373448.7,f|V|B7,3:41:7.86|22.82,37:34:48.71|-27.3,5.55,2000 +SD-12 689|PPM 213254|HR 1125|J034113.79-114808.7,f|D|F5,3:41:13.80|81.05,-11:48:8.70|29.8,6.49,2000 +BD CAM|HD 22649|BD+62 597|PPM 14446|J034209.32+631300.5,f|V|S3,3:42:9.32|-16.97,63:13:0.50|19.3,5.10,2000 +For Delta|SAO 194467|HD 23227|CD-32 1430|PPM 279334|HR 1134|J034214.90-315618.1,f|S|B5,3:42:14.90|5.22,-31:56:18.10|14.2,4.98,2000 +Tau 13|BD+19 578|PPM 119296|HR 1126|J034218.94+194200.9,f|S|B9,3:42:18.95|5.79,19:42:0.91|-13.2,5.69,2000 +Per 40|HD 22951|BD+33 698|HR 1123|J034222.64+335754.0,f|D|B0,3:42:22.65|4.35,33:57:54.09|-5.2,4.98,2000 +SAO 258356|HD 25887|CP-85 44|PPM 376328|HR 1271|J034232.83-851543.0,f|D|B9,3:42:32.84|20.99,-85:15:43.07|24.3,6.40,2000 +HD 22764|BD+59 699|PPM 28639|HR 1112|J034242.73+595809.8,f|D|K3,3:42:42.73|0.53,59:58:9.81|2.8,5.74,2000 +SAO 194475|HD 23319|CD-37 1415|PPM 279348|HR 1143|J034250.05-371848.6,f|D|K2,3:42:50.06|-90.79,-37:18:48.67|-71.4,4.59,2000 +Per Delta-39|Delta Persei|HD 22928|BD+47 876|PPM 46457|HR 1122|J034255.50+474715.1,f|D|B5,3:42:55.50|23.78,47:47:15.19|-41.9,3.02,2000 +Eri Delta-23|Delta Eridani|HD 23249|SD-10 728|Rana|HR 1136|J034314.90-094548.2,f|S|K0,3:43:14.90|-91.65,-9:45:48.22|742.2,3.53,2000 +SAO 149132|HD 23281|SD-10 729|PPM 213312|HR 1139|J034333.83-102908.3,f|S|A5,3:43:33.83|-7.96,-10:29:8.38|-20.2,5.60,2000 +Tau 14|HD 23183|BD+19 582|PPM 119311|HR 1132|J034347.21+193954.1,f|S|G8,3:43:47.21|115.68,19:39:54.12|-56.6,6.14,2000 +SAO 216459|CD-41 1119|HR 1157|J034406.37-403937.0,f|D|K1,3:44:6.38|25.03,-40:39:37.04|-83.6,6.50,2000 +BD+48 984|PPM 46475|HR 1127|J034406.42+483125.1,f|D|K4,3:44:6.43|0.00,48:31:25.16|-12,6.05,2000 +Ret Beta|SAO 248877|HD 23817|CP-65 263|PPM 353699|HR 1175|J034411.97-644824.8,f|S|K2,3:44:11.98|308.40,-64:48:24.85|78.7,3.84,2000 +Atik|Al Atik|Ati|Per Omicron-38|Omicron Persei|BD+31 642|PPM 68738|HR 1131|J034419.13+321717.6,f|D|B1,3:44:19.13|8.12,32:17:17.69|-10.3,3.86,2000 +HD 23258|BD+20 621|PPM 92798|HR 1137|J034428.20+205543.4,f|S|A0,3:44:28.20|26.62,20:55:43.45|-13.8,6.09,2000 +Eri 24|HD 23363|BD-01 526|PPM 175367|HR 1146|J034430.51-010947.1,f|S|B7,3:44:30.51|3.60,-1:9:47.13|-5.3,5.24,2000 +HD 23193|BD+36 742|PPM 68741|HR 1133|J034431.43+362736.3,f|S|A3,3:44:31.43|48.26,36:27:36.37|-41.4,5.60,2000 +SAO 233252|HD 23697|CP-54 589|PPM 332917|HR 1168|J034433.89-541626.4,f|D|K2,3:44:33.89|25.49,-54:16:26.50|65.5,6.34,2000 +HD 23139|BD+45 804|PPM 46481|J034440.90+460559.3,f|S|A7,3:44:40.91|-1.56,46:5:59.33|-23.7,6.10,2000 +Celaeno|Celeno|Lost Pleiad|Tau 16|V1262|HD 23288|BD+23 505|J034448.21+241722.0,f|V|B7,3:44:48.22|20.78,24:17:22.09|-44,5.46,2000 +SAO 216469|CD-48 1069|HR 1167|J034450.48-480340.6,f|S|G8,3:44:50.48|19.95,-48:3:40.67|-74.2,6.49,2000 +Electra|Tau 17|V15755|BD+23 507|HR 1142|J034452.53+240648.0,f|V|B6,3:44:52.54|21.50,24:6:48.02|-44.9,3.71,2000 +Eri 25|HD 23413|BD-00 593|PPM 175371|J034456.49-001748.1,f|S|K4,3:44:56.50|60.60,-0:17:48.19|-1.9,5.56,2000 +Tau 18|HD 23324|BD+24 546|PPM 92817|HR 1144|J034509.73+245021.3,f|S|B8,3:45:9.74|19.06,24:50:21.34|-46.6,5.66,2000 +Per Nu-41A|V1261|BD+42 815|PPM 46487|HR 1135|J034511.63+423442.7,f|D|F5,3:45:11.63|-14.58,42:34:42.77|1.8,3.78,2000 +Taygeta|Taygete|Tau 19A|V1264|HD 23338|BD+24 547|PPM 92818|HR 1145|J034512.49+242802.1,f|D|B6,3:45:12.49|19.39,24:28:2.20|-41.6,4.30,2000 +HD 23719|CD-47 1147|HR 1169|J034515.87-472134.1,f|S|K1,3:45:15.88|-3.05,-47:21:34.11|-9,5.72,2000 +CT HYI|HD 24188|CP-72 262|J034523.73-713929.2,f|V|Ap,3:45:23.74|21.15,-71:39:29.28|43,6.27,2000 +BD+38 803|PPM 68755|J034537.08+384034.5,f|S|K2,3:45:37.09|-29.98,38:40:34.55|17.9,6.44,2000 +Tau 29A|V15765|HD 23466|BD+05 539|PPM 146887|HR 1153|J034540.44+060259.9,f|D|B3,3:45:40.44|20.58,6:2:59.97|-15.6,5.34,2000 +Maia|Tau 20|V1279|BD+23 516|PPM 92841|HR 1149|J034549.60+242203.8,f|V|B8,3:45:49.61|21.04,24:22:3.90|-45,3.88,2000 +Asterope|Sterope I|Tau 21|V1283|HD 23432|BD+24 553|PPM 92844|HR 1151|J034554.47+243316.2,f|V|B8,3:45:54.48|19.51,24:33:16.24|-45.4,5.77,2000 +BD+45 811|PPM 46499|HR 1141|J034559.25+454054.8,f|D|B6,3:45:59.26|17.50,45:40:54.84|-18.4,5.66,2000 +V15751|BD+66 284|HR 1124|J034600.93+671205.7,f|V|F0,3:46:0.94|82.07,67:12:5.78|-113.4,5.79,2000 +BD+62 604|PPM 14471|HR 1129|J034602.33+632042.1,f|D|G0,3:46:2.33|-0.94,63:20:42.17|-8.4,4.81,2000 +Tau 22|HD 23441|BD+24 556|Sterope II|HR 1152|J034602.90+243140.4,f|S|A0,3:46:2.90|19.79,24:31:40.43|-44.4,6.44,2000 +Eri Pi-26|Pi Eridani|SAO 149158|HD 23614|SD-12 707|HR 1162|J034608.53-120605.7,f|S|M2,3:46:8.54|55.59,-12:6:5.72|60,4.43,2000 +HD 23526|BD+06 583|PPM 146896|HR 1159|J034609.36+064812.6,f|S|G9,3:46:9.36|-1.79,6:48:12.67|-55.4,5.92,2000 +Merope|Tau 23|V0971 TAU|BD+23 522|PPM 92859|HR 1156|J034619.57+235654.0,f|V|B6,3:46:19.57|21.11,23:56:54.09|-42.7,4.17,2000 +For Sigma|HD 23738|CD-29 1413|PPM 246675|HR 1171|J034627.42-292017.3,f|S|A3,3:46:27.43|7.19,-29:20:17.36|3.8,5.92,2000 +Eri Tau-27|SAO 168827|HD 23754|CD-23 1565|PPM 246687|HR 1173|J034650.88-231459.0,f|S|F3,3:46:50.89|-159.87,-23:14:59.00|-528.5,4.22,2000 +Hyi Gamma|V15811|HD 24512|CP-74 276|PPM 368176|J034714.34-741420.2,f|V|M2,3:47:14.34|51.05,-74:14:20.26|115.3,3.26,2000 +Tau 24B|HD 23629|BD+23 536|PPM 92888|J034721.03+240658.5,f|D|A4,3:47:21.03|17.80,24:6:58.59|-42,6.31,2000 +Alcyone|Tau Eta-25A|V15775|BD+23 541|PPM 92898|HR 1165|J034729.07+240618.4,f|D|B7,3:47:29.08|19.31,24:6:18.49|-43.1,2.87,2000 +HD 23383|BD+55 824|PPM 28693|HR 1147|J034732.14+555519.0,f|S|B9,3:47:32.15|27.15,55:55:19.06|-36.6,6.10,2000 +Eri Tau-28|V15784|SAO 168836|HD 23878|CD-24 1877|PPM 246698|HR 1181|J034739.65-235228.8,f|V|A2,3:47:39.65|48.01,-23:52:28.84|49,5.24,2000 +HD 23626|BD+31 650|HR 1164|J034749.02+321143.4,f|S|G0,3:47:49.02|-23.74,32:11:43.49|-34.3,6.26,2000 +SAO 194537|HD 23958|CD-36 1453|PPM 279455|HR 1186|J034749.61-360620.8,f|S|B8,3:47:49.61|12.48,-36:6:20.82|18.3,6.21,2000 +For Rho|V1337|SAO 194535|CD-30 1497|PPM 279461|HR 1184|J034756.04-301004.3,f|V|G6,3:47:56.04|26.20,-30:10:4.38|-231.1,5.53,2000 +V1316|HD 23712|BD+24 571|J034806.54+245918.3,f|V|K4,3:48:6.54|-27.87,24:59:18.30|-28.2,6.47,2000 +Tau 30|V1327|HD 23793|BD+10 486|PPM 119373|HR 1174|J034816.26+110835.8,f|D|B3,3:48:16.27|28.26,11:8:35.86|-29.8,5.08,2000 +HD 23552|BD+50 825|J034818.07+504412.3,f|D|B8,3:48:18.07|-7.59,50:44:12.36|-2,6.14,2000 +V1321|HD 23753|BD+22 563|PPM 92918|HR 1172|J034820.81+232516.4,f|V|B8,3:48:20.82|19.13,23:25:16.50|-46.8,5.45,2000 +CD-38 1297B|HR 1189|J034835.47-373719.2,f|D|A1,3:48:35.48|64.51,-37:37:19.23|-10.9,5.32,2000 +V15793|SAO 168851|HD 23978|SD-21 703|PPM 246722|HR 1187|J034835.70-205410.7,f|V|K5,3:48:35.70|-29.85,-20:54:10.72|-16.7,5.82,2000 +V1359|SAO 194551|CD-38 1297A|PPM 279479|J034835.87-373712.5,f|D|B9,3:48:35.88|75.80,-37:37:12.56|-10.7,4.75,2000 +SAO 111433|HD 23887|BD-00 602|PPM 146935|HR 1182|J034838.95+001340.2,f|S|K3,3:48:38.95|65.55,0:13:40.28|-6,5.91,2000 +Tau 26|HD 23822|BD+23 556|J034856.94+235125.6,f|S|F0,3:48:56.94|46.92,23:51:25.69|-56.5,6.48,2000 +V0376 PER|HD 23728|BD+43 818|PPM 46552|J034908.11+435747.1,f|V|A9,3:49:8.12|-7.02,43:57:47.14|29.5,5.95,2000 +Atlas|Tau 27|V1345|BD+23 557|PPM 92934|HR 1178|J034909.74+240312.2,f|D|B8,3:49:9.74|17.81,24:3:12.30|-44.7,3.63,2000 +Tau 28|BU TAU|HD 23862|BD+23 558|PPM 92936|J034911.21+240812.1,f|V|B8,3:49:11.22|18.75,24:8:12.16|-46.7,5.06,2000 +HD 23277|BD+70 257|HR 1138|J034913.73+705215.7,f|S|A2,3:49:13.74|20.89,70:52:15.78|-62.7,5.40,2000 +HD 23594|BD+56 846|PPM 28726|HR 1161|J034919.75+570705.7,f|D|A0,3:49:19.76|28.34,57:7:5.76|-24.4,6.46,2000 +V15809|SAO 194559|CD-36 1467|PPM 279496|HR 1195|J034927.24-361200.9,f|V|G9,3:49:27.25|-49.39,-36:12:0.90|-56.6,4.17,2000 +BE CAM|HD 23475|BD+65 369|HR 1155|J034931.28+653133.5,f|V|M2,3:49:31.28|-2.49,65:31:33.50|-14,4.42,2000 +Per 42|V0467 PER|HD 23848|BD+32 667|HR 1177|J034932.68+330528.9,f|V|A3,3:49:32.69|-18.10,33:5:28.98|0.3,5.15,2000 +HD 23523|BD+62 612|HR 1158|J034936.58+631749.1,f|S|A5,3:49:36.59|-21.97,63:17:49.16|-46.6,5.83,2000 +V15798|HD 23923|BD+23 563|PPM 92951|HR 1183|J034943.53+234242.6,f|V|B8,3:49:43.53|16.48,23:42:42.68|-44.5,6.18,2000 +V15801|BD+21 535|PPM 92958|HR 1185|J034955.07+221438.9,f|V|B8,3:49:55.07|23.88,22:14:38.95|-45.9,6.08,2000 +V15796|HD 23838|BD+44 801|PPM 46561|HR 1176|J035004.42+445804.2,f|V|G2,3:50:4.42|-37.78,44:58:4.28|-26.8,5.66,2000 +BD-01 544|PPM 175391|J035016.16-013121.2,f|D|F2,3:50:16.16|102.26,-1:31:21.27|25.1,6.49,2000 +V1366|HD 23985|BD+25 624|PPM 92967|HR 1188|J035018.93+253445.6,f|D|A2,3:50:18.94|30.17,25:34:45.66|-130.9,5.23,2000 +Cam Gamma|BD+70 259|PPM 5388|HR 1148|J035021.50+711956.1,f|D|A2,3:50:21.51|18.29,71:19:56.16|-42,4.62,2000 +V0766 TAU|HD 24155|BD+12 516|PPM 119411|HR 1194|J035115.86+130245.8,f|V|B9,3:51:15.87|20.60,13:2:45.88|-22.2,6.30,2000 +HD 23662|BD+68 286|PPM 14526|HR 1166|J035141.77+683026.9,f|S|B9,3:51:41.78|15.94,68:30:26.95|-20.9,6.31,2000 +V15818|HD 24131|BD+33 728|PPM 68848|HR 1191|J035153.71+342132.8,f|D|B1,3:51:53.72|4.33,34:21:32.83|-4.2,5.79,2000 +Tau 31|SAO 111469|HD 24263|BD+06 594|PPM 146986|HR 1199|J035200.22+063205.6,f|D|B5,3:52:0.23|7.60,6:32:5.67|-2.8,5.69,2000 +HD 24167|BD+30 582|HR 1197|J035204.44+311006.8,f|S|A5,3:52:4.45|-12.32,31:10:6.88|-36.3,6.22,2000 +Eri 30|HD 24388|SD-05 769|PPM 186281|J035241.65-052140.5,f|D|B8,3:52:41.66|3.29,-5:21:40.53|-7.1,5.49,2000 +V15826|HD 24357|BD+16 523|PPM 119433|J035310.04+171937.5,f|V|F4,3:53:10.05|143.91,17:19:37.50|-29.9,5.97,2000 +SAO 149229|HD 24497|SD-18 691|PPM 213527|J035312.93-182604.0,f|S|K5,3:53:12.93|2.85,-18:26:4.01|1.2,6.23,2000 +CD-47 1187|HR 1216|J035333.31-465337.2,f|S|K2,3:53:33.32|17.63,-46:53:37.23|-35.2,5.92,2000 +V1391|HD 24368|BD+25 641|J035334.47+254058.3,f|V|A2,3:53:34.48|21.09,25:40:58.38|-34.2,6.35,2000 +BD+48 1015|PPM 46612|HR 1198|J035338.70+483901.7,f|S|K0,3:53:38.70|37.76,48:39:1.78|-30.1,5.76,2000 +HD 24626|CD-35 1455|PPM 279581|HR 1214|J035338.94-344356.2,f|S|B6,3:53:38.95|32.05,-34:43:56.27|-0.8,5.10,2000 +Eri Tau-33|Tau8 Eridani|SAO 168925|HD 24587|CD-24 1945|PPM 246826|HR 1213|J035342.70-243644.0,f|V|B6,3:53:42.70|30.96,-24:36:44.03|-7.2,4.64,2000 +HD 24141|BD+57 752|PPM 28763|HR 1192|J035343.28+575830.5,f|S|A5,3:53:43.29|85.11,57:58:30.51|-93.8,5.79,2000 +Per Zeta-44A|V1397|HD 24398|BD+31 666|PPM 68893|J035407.92+315301.0,f|D|B1,3:54:7.92|4.46,31:53:1.09|-9.2,2.88,2000 +Eri 32B|HD 24554|SD-03 631B|HR 1211|J035417.40-025710.3,f|D|A2,3:54:17.41|26.36,-2:57:10.31|1.5,6.08,2000 +Eri 32A|V15841|HD 24555|SD-03 631A|PPM 186311|HR 1212|J035417.50-025717.0,f|D|G8,3:54:17.50|26.36,-2:57:17.03|1.5,4.72,2000 +V1414|SAO 216546|HD 24744|CD-40 1128|HR 1219|J035423.16-402125.2,f|D|K0,3:54:23.16|-22.06,-40:21:25.23|8.3,5.71,2000 +V1419|SAO 233321|HD 24863|CP-53 628|HR 1227|J035433.96-524125.5,f|D|A4,3:54:33.96|27.00,-52:41:25.53|-39.2,6.47,2000 +DO ERI|SAO 149251|HD 24712|SD-12 752|PPM 213583|HR 1217|J035516.12-120556.7,f|V|A5,3:55:16.13|-77.00,-12:5:56.78|-22.1,5.99,2000 +BD+47 912|PPM 46639|J035558.17+475217.1,f|S|B6,3:55:58.17|17.61,47:52:17.11|-20.6,5.39,2000 +SAO 248912|CP-63 275|PPM 353813|HR 1236|J035603.98-632749.3,f|S|K1,3:56:3.99|70.37,-63:27:49.38|52.8,6.14,2000 +V15845|SAO 149267|HD 24834|SD-14 783|PPM 213613|J035627.66-133551.1,f|V|M5,3:56:27.66|9.33,-13:35:51.11|4.2,6.37,2000 +V1418|BD+34 768|PPM 68922|HR 1215|J035628.68+350451.2,f|V|B1,3:56:28.69|2.58,35:4:51.24|-4,5.50,2000 +HD 24164|BD+71 222|PPM 5422|HR 1196|J035630.23+714917.7,f|S|A5,3:56:30.24|-52.27,71:49:17.78|-10,6.31,2000 +Per 43A|HD 24546|BD+50 860|PPM 28799|J035636.52+504143.3,f|D|F5,3:56:36.52|94.16,50:41:43.37|-127.9,5.28,2000 +DL ERI|HD 24832|SD-10 793|PPM 186369|HR 1225|J035637.93-094503.0,f|V|F1,3:56:37.93|51.15,-9:45:3.04|5.4,6.19,2000 +Tau 32|BD+22 605|HR 1218|J035652.07+222840.6,f|S|F2,3:56:52.08|69.44,22:28:40.70|-114.8,5.62,2000 +SAO 111516|HD 24817|BD+05 564|HR 1224|J035701.71+060223.8,f|S|A2,3:57:1.72|37.29,6:2:23.88|-68,6.08,2000 +Tau 33|V0817 TAU|HD 24769|BD+22 607|HR 1221|J035703.80+231031.9,f|V|B9,3:57:3.81|8.96,23:10:31.98|-17,6.05,2000 +BD+60 768|PPM 14574|J035708.28+610631.9,f|D|K3,3:57:8.29|-3.41,61:6:31.98|-14.1,5.03,2000 +HD 24479|BD+62 628|PPM 14575|J035725.44+630420.1,f|S|B9,3:57:25.45|7.61,63:4:20.15|6,4.95,2000 +BD+24 599|HR 1222|J035726.38+242742.9,f|S|K0,3:57:26.38|-6.01,24:27:42.98|-7.3,6.18,2000 +Per Epsilon-45A|Epsilon Persei|BD+39 895|PPM 46661|J035751.23+400036.7,f|D|B0,3:57:51.23|12.64,40:0:36.77|-24.1,2.91,2000 +Zaurak|Eri Gamma-34|Gamma Eridani|SAO 149283|SD-13 781|PPM 213659|HR 1231|J035801.76-133030.6,f|D|M0,3:58:1.77|60.53,-13:30:30.66|-111.3,2.96,2000 +HD 24843|BD+38 827|PPM 68954|HR 1226|J035829.16+385024.9,f|S|K1,3:58:29.16|41.01,38:50:24.91|-39.3,6.32,2000 +SAO 233347|HD 25346|CP-57 606|HR 1245|J035842.90-570608.4,f|S|F2,3:58:42.90|25.83,-57:6:8.49|11.6,6.05,2000 +Ret Delta|V15864|SAO 248918|HD 25422|CP-61 290|PPM 353843|HR 1247|J035844.74-612400.6,f|V|M2,3:58:44.75|9.77,-61:24:0.67|-14.4,4.56,2000 +SD-05 789|PPM 186413|HR 1232|J035852.39-052811.8,f|S|G9,3:58:52.39|-46.74,-5:28:11.81|-174,5.84,2000 +Menkib|Menchib|Per Xi-46|Xi Persei|HD 24912|BD+35 775|PPM 68961|HR 1228|J035857.90+354727.7,f|S|O7,3:58:57.90|1.95,35:47:27.72|2.3,4.05,2000 +V15860|SAO 149299|HD 25165|SD-12 766|PPM 213689|HR 1235|J035930.13-123427.9,f|V|K5,3:59:30.13|-1.46,-12:34:27.93|-38.1,5.59,2000 +V15859|BD+09 524|PPM 119523|HR 1233|J035940.49+101949.4,f|V|F5,3:59:40.49|133.11,10:19:49.45|-3.5,6.35,2000 +Eri Tau-36|Tau9 Eridani|HD 25267|CD-24 2022|PPM 246961|J035955.48-240058.3,f|V|B6,3:59:55.48|11.37,-24:0:58.38|17.1,4.63,2000 +HD 25175|BD+16 544|PPM 119533|HR 1237|J040036.88+171747.9,f|S|A0,4:0:36.89|2.58,17:17:47.98|-30.8,6.31,2000 +SAO 194689|HD 25371|CD-30 1597|PPM 279725|HR 1246|J040040.65-302926.5,f|S|A2,4:0:40.66|47.44,-30:29:26.51|5.2,5.93,2000 +Tau Lambda-35|Lambda Tauri|BD+12 539|PPM 119535|HR 1239|J040040.81+122925.2,f|S|B3,4:0:40.82|-8.20,12:29:25.25|-12,3.42,2000 +BD+17 666|PPM 119539|HR 1238|J040048.76+181138.4,f|D|F4,4:0:48.77|129.53,18:11:38.40|-28.3,5.87,2000 +Ret Gamma|Gamma Reticuli|SAO 248925|CP-62 312|PPM 353858|HR 1264|J040053.80-620933.4,f|S|M4,4:0:53.81|1.82,-62:9:33.42|35,4.51,2000 +HD 25152|BD+36 805|HR 1234|J040114.83+365922.1,f|S|A0,4:1:14.83|-6.11,36:59:22.12|-2.7,6.41,2000 +Ret Iota|SAO 248927|HD 25728|CP-61 293|PPM 353861|HR 1266|J040118.15-610443.7,f|S|K4,4:1:18.15|66.67,-61:4:43.76|94.5,4.96,2000 +Eri 35|V15869|BD-01 572|PPM 175427|HR 1244|J040132.05-013258.7,f|V|B5,4:1:32.05|28.04,-1:32:58.77|-13.8,5.28,2000 +SAO 111566|BD+09 528|PPM 147134|HR 1243|J040146.13+095952.8,f|D|B5,4:1:46.14|5.61,9:59:52.86|1.1,5.68,2000 +HD 25457|BD-00 632|HR 1249|J040236.74-001608.1,f|S|F5,4:2:36.74|151.20,-0:16:8.12|-252,5.39,2000 +Tau Nu-38|SAO 111579|BD+05 581|PPM 147155|HR 1251|J040309.38+055921.4,f|S|A1,4:3:9.38|5.52,5:59:21.50|-1.6,3.90,2000 +V15882|HD 25631|SD-20 769|HR 1258|J040324.74-200837.6,f|V|B2,4:3:24.75|-0.14,-20:8:37.67|-1.4,6.46,2000 +Tau 40|V1133 TAU|SAO 111585|HD 25558|BD+05 584|PPM 147165|HR 1253|J040344.60+052608.2,f|V|B3,4:3:44.60|1.19,5:26:8.25|-5.4,5.32,2000 +SAO 111586|BD+07 592|PPM 147171|HR 1254|J040356.60+081150.1,f|S|F2,4:3:56.60|168.36,8:11:50.17|28,5.45,2000 +SAO 149345|SD-16 770|PPM 213796|HR 1263|J040408.70-163519.4,f|S|K2,4:4:8.71|93.87,-16:35:19.42|-61.6,6.37,2000 +HD 25621|BD+02 645|PPM 147177|HR 1257|J040409.87+024937.0,f|S|F6,4:4:9.88|149.52,2:49:37.01|-125.7,5.35,2000 +Tau 36A|V15883|HD 25555|BD+23 609|PPM 93212|HR 1252|J040421.67+240621.5,f|D|G0,4:4:21.67|-0.27,24:6:21.57|-13.8,5.51,2000 +V15891|SAO 149351|HD 25723|SD-13 806|HR 1265|J040422.71-124732.2,f|V|K5,4:4:22.72|15.80,-12:47:32.26|18,5.62,2000 +HD 25291|BD+58 690|PPM 28889|HR 1242|J040427.16+590919.8,f|S|F0,4:4:27.16|-1.77,59:9:19.83|-0.4,5.04,2000 +SD-20 774|HR 1267|J040440.90-202254.7,f|S|K0,4:4:40.90|17.15,-20:22:54.71|-13.8,6.11,2000 +Tau 37A|BD+21 585|PPM 93219|HR 1256|J040441.71+220454.9,f|D|K0,4:4:41.72|91.74,22:4:54.93|-58.5,4.35,2000 +Tau 39A|V1452|BD+21 587|PPM 93234|HR 1262|J040520.25+220032.0,f|D|G5,4:5:20.26|172.58,22:0:32.06|-130.1,5.89,2000 +HD 25945|CD-27 1540|HR 1275|J040537.43-273906.5,f|S|F1,4:5:37.44|200.50,-27:39:6.51|94.2,5.59,2000 +SAO 169111|HD 25944|SD-20 780|HR 1274|J040546.71-203045.2,f|S|G5,4:5:46.71|-27.25,-20:30:45.23|-10.8,6.34,2000 +SD-09 811|PPM 186539|HR 1272|J040556.50-085121.9,f|S|A3,4:5:56.51|22.82,-8:51:21.98|-8.6,6.26,2000 +V15881|HD 25274|BD+68 303|PPM 14637|HR 1241|J040603.18+684047.9,f|V|K2,4:6:3.18|7.31,68:40:47.90|3,5.87,2000 +Per Lambda-47|HD 25642|BD+49 1101|PPM 28916|HR 1261|J040635.04+502104.5,f|S|A0,4:6:35.04|-13.02,50:21:4.54|-36.4,4.28,2000 +Tau 41|GS TAU|HD 25823|BD+27 633|PPM 93256|HR 1268|J040636.41+273559.6,f|V|B9,4:6:36.41|22.20,27:35:59.65|-50.2,5.18,2000 +BD+53 732|PPM 28917|HR 1255|J040636.63+540031.1,f|S|K0,4:6:36.64|55.36,54:0:31.19|-91,6.32,2000 +HD 25425|BD+65 391|PPM 14647|HR 1248|J040638.84+653114.8,f|S|A3,4:6:38.84|20.26,65:31:14.87|-25.5,6.14,2000 +Tau Psi-42|HD 25867|BD+28 619|PPM 93264|HR 1269|J040700.45+290004.6,f|S|F1,4:7:0.45|-94.06,29:0:4.68|4.9,5.22,2000 +HD 25225|BD+73 210|PPM 5477|J040710.77+740001.2,f|S|K0,4:7:10.78|26.50,74:0:1.29|-65.2,6.49,2000 +SAO 248945|HD 26491|CP-64 305|HR 1294|J040721.54-641320.2,f|S|G3,4:7:21.54|185.91,-64:13:20.25|336.8,6.38,2000 +V1466|BD+14 657|PPM 119638|HR 1279|J040741.98+150946.0,f|D|F3,4:7:41.98|127.12,15:9:46.04|-22.8,6.06,2000 +BD+16 560|J040759.41+172023.6,f|D|K5,4:7:59.42|7.73,17:20:23.63|-10.1,5.92,2000 +Per 49|HD 25975|BD+37 881|HR 1277|J040815.38+374338.9,f|S|K1,4:8:15.39|-100.37,37:43:38.97|-197,6.07,2000 +Per 50|V0582 PER|HD 25998|BD+37 882|PPM 69137|HR 1278|J040836.61+380223.0,f|V|F7,4:8:36.62|163.97,38:2:23.04|-203.5,5.52,2000 +Per 48|MX PER|BD+47 939|PPM 46825|HR 1273|J040839.69+474245.0,f|V|B3,4:8:39.69|20.19,47:42:45.05|-33.3,4.01,2000 +HD 26171|BD+13 648|PPM 119653|HR 1284|J040901.56+132353.8,f|S|B9,4:9:1.57|14.74,13:23:53.81|-7.3,5.95,2000 +Tau Omega-43|HD 26162|BD+19 672|PPM 119655|HR 1283|J040909.96+193633.1,f|S|K2,4:9:9.97|107.39,19:36:33.18|-31.6,5.51,2000 +GU ERI|SAO 149412|HD 26326|SD-16 796|PPM 213911|HR 1288|J040917.83-162309.1,f|V|B4,4:9:17.84|-1.01,-16:23:9.15|1,5.44,2000 +HD 25948|BD+54 740|PPM 28949|HR 1276|J040922.23+544943.9,f|S|F5,4:9:22.23|71.89,54:49:43.90|-93.2,6.26,2000 +HD 25877|BD+59 759|PPM 28952|J040927.57+595429.0,f|S|G8,4:9:27.57|-4.14,59:54:29.05|-2.1,6.29,2000 +SAO 111634|HD 26292|BD+02 655|PPM 147262|J040943.00+031921.7,f|S|F2,4:9:43.01|-50.91,3:19:21.71|-60.9,6.49,2000 +BD+86 51|PPM 696|J041001.63+863734.0,f|S|F5,4:10:1.64|142.69,86:37:34.10|-87.6,5.84,2000 +BD+80 125A|PPM 697|J041002.74+804155.2,f|D|G8,4:10:2.74|-11.56,80:41:55.25|3,5.13,2000 +Eri 37|SD-07 758|PPM 186621|J041022.52-065525.8,f|S|G8,4:10:22.52|3.42,-6:55:25.87|-12,5.44,2000 +HD 26575|CD-35 1588|PPM 279926|HR 1299|J041045.87-351625.6,f|S|G9,4:10:45.87|-20.08,-35:16:25.63|-26,6.45,2000 +HD 26464|SD-09 837|PPM 186627|HR 1293|J041047.76-084911.3,f|S|G5,4:10:47.76|48.03,-8:49:11.33|2.8,5.68,2000 +Tau 44|IM TAU|HD 26322|BD+26 686|HR 1287|J041049.86+262851.4,f|V|F2,4:10:49.86|-30.88,26:28:51.43|-36.1,5.40,2000 +Hor Delta|SAO 216682|HD 26612|CD-42 1400|J041050.58-415936.8,f|S|A9,4:10:50.59|199.11,-41:59:36.89|69.1,4.93,2000 +HD 26311|BD+33 807|PPM 69185|HR 1286|J041059.02+333512.4,f|S|K1,4:10:59.02|-1.50,33:35:12.45|-8.9,5.73,2000 +Tau 45|SAO 111648|HD 26462|BD+05 601|PPM 147283|HR 1292|J041120.28+053122.9,f|D|F4,4:11:20.28|146.91,5:31:22.97|5,5.71,2000 +GW ERI|HD 26591|SD-20 801|PPM 247222|J041136.20-202122.1,f|V|A2,4:11:36.20|45.71,-20:21:22.16|49.8,5.79,2000 +Beid|Eri Omicron-38|Omicron1 Eridani|HD 26574|SD-07 764|PPM 186646|HR 1298|J041151.94-065015.2,f|V|F2,4:11:51.94|11.91,-6:50:15.29|81.3,4.04,2000 +HD 26584|SD-09 843|PPM 186648|J041156.13-085014.9,f|D|G5,4:11:56.14|61.51,-8:50:14.95|7,6.45,2000 +SAO 149446|HD 26625|SD-17 816|PPM 213983|J041200.27-171629.0,f|S|K0,4:12:0.27|21.06,-17:16:29.04|-54.2,6.40,2000 +HD 26546|BD+16 569|PPM 119695|HR 1295|J041231.35+171638.8,f|S|K0,4:12:31.35|49.13,17:16:38.85|-19.6,6.09,2000 +V1137 TAU|HD 26571|BD+22 649|PPM 93337|HR 1297|J041251.24+222448.4,f|V|B9,4:12:51.24|-3.74,22:24:48.45|-10.6,6.15,2000 +BD+68 310|PPM 14712|HR 1282|J041251.82+683004.1,f|S|K0,4:12:51.82|-33.31,68:30:4.16|8.9,6.33,2000 +Tau 46|SAO 111672|BD+07 617|PPM 147321|J041333.10+074257.7,f|D|F2,4:13:33.10|-4.01,7:42:57.76|4.5,5.29,2000 +HD 26676|BD+09 549|PPM 119712|J041334.57+101244.8,f|S|B8,4:13:34.57|26.28,10:12:44.85|-25.2,6.25,2000 +HD 26927|CD-40 1286|HR 1323|J041335.72-402127.9,f|S|K3,4:13:35.72|10.74,-40:21:27.95|30.9,6.36,2000 +GY ERI|HD 26739|BD-01 600|PPM 175468|HR 1312|J041338.14-010859.0,f|V|B5,4:13:38.15|4.65,-1:8:59.05|-4.7,6.44,2000 +BD+71 239|PPM 5517|HR 1281|J041344.82+720734.1,f|S|K1,4:13:44.82|8.52,72:7:34.13|-34.1,6.04,2000 +BD+12 564|PPM 119715|J041349.83+124513.3,f|S|K0,4:13:49.84|11.56,12:45:13.32|-16.6,6.24,2000 +Tau 47A|SAO 111674|HD 26722|BD+08 652|PPM 147325|HR 1311|J041356.38+091549.7,f|D|G3,4:13:56.39|-9.47,9:15:49.77|-30.6,4.89,2000 +BD+37 897|PPM 69228|J041359.69+375801.7,f|S|G9,4:13:59.69|-49.31,37:58:1.73|4.6,6.47,2000 +Hor Alpha|HD 26967|CD-42 1425|HR 1326|J041400.11-421739.7,f|S|K1,4:14:0.11|41.94,-42:17:39.73|-203.7,3.86,2000 +Eri 39A|SAO 149478|HD 26846|SD-10 867|HR 1318|J041423.68-101522.6,f|D|K3,4:14:23.69|-7.68,-10:15:22.62|-162.1,4.90,2000 +Ret Alpha|SAO 248969|HD 27256|CP-62 332|PPM 353975|HR 1336|J041425.48-622825.8,f|D|G8,4:14:25.48|41.66,-62:28:25.89|49.7,3.34,2000 +HD 26793|BD+09 550|PPM 119729|HR 1315|J041436.23+100041.0,f|S|B9,4:14:36.23|-6.65,10:0:41.06|-13.4,5.22,2000 +SAO 248973|CP-62 334|PPM 353979|J041448.54-621130.5,f|D|K0,4:14:48.55|-2.94,-62:11:30.52|97.9,5.45,2000 +BD+37 899|PPM 69243|J041452.06+373233.6,f|S|G5,4:14:52.07|-8.92,37:32:33.61|-4.3,6.31,2000 +Per 52|HD 26673|BD+40 912|PPM 46911|J041453.31+402901.2,f|S|G5,4:14:53.32|9.70,40:29:1.22|-21.6,4.70,2000 +Per Mu-51A|V1518|BD+48 1063|PPM 46912|J041453.86+482433.5,f|D|G0,4:14:53.86|5.08,48:24:33.59|-17.4,4.15,2000 +V15924|HD 26553|BD+57 785|HR 1296|J041501.79+572737.3,f|V|A4,4:15:1.80|-3.07,57:27:37.30|-0.5,6.08,2000 +Keid|Eri Omicron-40A|V15931|HD 26965|SD-07 780|HR 1325|J041516.32-073910.3,f|D|K0,4:15:16.32|-2239.77,-7:39:10.34|-3420.4,4.42,2000 +V0774 TAU|SAO 111698|HD 26923|BD+05 614|PPM 147353|HR 1322|J041528.80+061112.6,f|D|G0,4:15:28.80|-109.31,6:11:12.69|-108.4,6.32,2000 +Tau Mu-49|SAO 111696|HD 26912|BD+08 657|PPM 147354|J041532.05+085332.4,f|S|B3,4:15:32.06|20.45,8:53:32.48|-21.8,4.29,2000 +Tau 48A|V1099 TAU|HD 26911|BD+15 603|PPM 119741|HR 1319|J041546.28+152402.5,f|D|F5,4:15:46.28|114.39,15:24:2.50|-22.1,6.30,2000 +Dor Gamma|Gamma Doradus|SAO 233457|CD-51 1066|PPM 333343|HR 1338|J041601.58-512911.9,f|S|F0,4:16:1.59|100.60,-51:29:11.93|184.2,4.26,2000 +TT RET|SAO 248977|HD 27463|CP-61 317|PPM 353985|HR 1357|J041620.97-605654.5,f|D|Ap,4:16:20.98|43.70,-60:56:54.54|25,6.36,2000 +Ret Epsilon|SAO 233463|HD 27442|CP-59 324|PPM 333351|HR 1355|J041629.02-591807.7,f|D|K2,4:16:29.03|-48.01,-59:18:7.76|-167.8,4.44,2000 +HD 26764|BD+53 750|HR 1314|J041643.08+533642.4,f|S|A2,4:16:43.09|-17.00,53:36:42.48|-1.7,5.20,2000 +BD+61 687|PPM 14735|J041653.55+615059.9,f|S|B5,4:16:53.56|6.09,61:50:59.96|-21.4,5.69,2000 +HD 26755|BD+57 787|HR 1313|J041708.09+575137.2,f|S|K1,4:17:8.10|24.18,57:51:37.28|-50.1,5.72,2000 +Tau Omega-50A|V15938|BD+20 724|PPM 93391|HR 1329|J041715.66+203442.9,f|D|A3,4:17:15.66|-40.86,20:34:42.93|-61.5,4.92,2000 +HD 27179|SD-06 862|PPM 186759|HR 1332|J041719.22-062819.8,f|S|G5,4:17:19.22|-15.20,-6:28:19.84|-7.3,5.94,2000 +Ret Theta|V1556|SAO 248986|HD 27657|CP-63 316A|HR 1372|J041740.27-631519.4,f|D|B9,4:17:40.27|5.47,-63:15:19.46|35.5,6.05,2000 +BD+80 127|PPM 716|J041751.80+803208.8,f|S|K0,4:17:51.80|-11.62,80:32:8.82|9.3,6.41,2000 +Eri Upsilon-41A|V15947|HD 27376|CD-34 1614|HR 1347|J041753.66-334754.0,f|D|B9,4:17:53.66|62.33,-33:47:54.05|-6.8,3.56,2000 +Men Delta|V1591|SAO 258372|HD 28525|CP-80 116|PPM 376397|HR 1426|J041759.27-801250.5,f|V|K2,4:17:59.27|28.25,-80:12:50.52|61,5.69,2000 +V0545 PER|BD+41 844|PPM 46963|HR 1328|J041808.11+420828.1,f|V|B9,4:18:8.11|23.02,42:8:28.17|-35.8,6.21,2000 +b PER|HD 26961|BD+49 1150|HR 1324|J041814.61+501743.8,f|V|A2,4:18:14.62|46.57,50:17:43.81|-56.4,4.60,2000 +GZ ERI|SAO 169317|HD 27362|SD-21 831|PPM 247372|HR 1345|J041816.07-204254.9,f|V|G8,4:18:16.08|4.91,-20:42:54.94|19.2,6.05,2000 +Tau 51A|HD 27176|BD+21 618|HR 1331|J041823.20+213445.4,f|D|F0,4:18:23.20|96.39,21:34:45.47|-33.9,5.64,2000 +SAO 169325|HD 27411|CD-23 1856|PPM 247381|HR 1353|J041837.49-225810.9,f|S|A3,4:18:37.49|51.93,-22:58:11.00|43.9,6.08,2000 +SAO 233476|CP-53 679|PPM 333381|HR 1365|J041840.02-525136.3,f|D|F7,4:18:40.03|45.83,-52:51:36.35|73.1,6.09,2000 +SAO 194923|CD-34 1626A|HR 1359|J041902.88-335416.6,f|D|A3,4:19:2.89|-2.12,-33:54:16.62|4.5,6.50,2000 +BD+49 1155|J041913.23+500255.3,f|S|A7,4:19:13.24|62.90,50:2:55.30|-58.7,5.47,2000 +SAO 216749|HD 27588|CD-44 1503|HR 1364|J041916.69-441604.5,f|D|K2,4:19:16.70|63.16,-44:16:4.51|-36.6,5.33,2000 +Tau 53|V1024 TAU|HD 27295|BD+20 733|PPM 93419|HR 1339|J041926.09+210832.3,f|V|B9,4:19:26.10|29.52,21:8:32.30|-42.7,5.50,2000 +Tau 56|V0724 TAU|BD+21 623|PPM 93421|HR 1341|J041936.70+214624.5,f|V|A0,4:19:36.71|29.81,21:46:24.57|-41.4,5.36,2000 +HD 27386|BD+09 562|PPM 119789|HR 1349|J041937.41+100717.1,f|S|K0,4:19:37.42|-16.98,10:7:17.17|-40.9,6.28,2000 +Hyadum I|Tau Gamma-54A|V1553|HD 27371|BD+15 612|PPM 119792|HR 1346|J041947.60+153739.5,f|D|G9,4:19:47.60|115.28,15:37:39.51|-23.9,3.65,2000 +Tau 57|V0483 TAU|HD 27397|BD+13 663|PPM 119796|HR 1351|J041957.70+140206.7,f|D|F0,4:19:57.70|115.40,14:2:6.72|-19.9,5.58,2000 +HD 27349|BD+31 757|PPM 69332|HR 1344|J042009.94+315711.4,f|S|K5,4:20:9.95|-1.15,31:57:11.43|-13.2,6.19,2000 +V1550|HD 27192|BD+50 973|HR 1333|J042011.51+505515.3,f|V|B1,4:20:11.51|0.57,50:55:15.36|-7.6,5.55,2000 +HD 27278|BD+41 852|PPM 46992|HR 1337|J042014.42+414829.0,f|S|K0,4:20:14.43|16.10,41:48:29.05|-34.5,5.95,2000 +Tau Phi-52A|HD 27382|BD+27 655|PPM 93431|HR 1348|J042021.21+272102.7,f|D|K1,4:20:21.22|-29.04,27:21:2.71|-77,4.95,2000 +Per 54|HD 27348|BD+34 860|HR 1343|J042024.63+343400.2,f|D|G8,4:20:24.64|-24.95,34:34:0.21|-7,4.93,2000 +HD 27429|BD+18 624|HR 1354|J042025.10+184433.3,f|S|F3,4:20:25.11|119.60,18:44:33.39|-48.2,6.10,2000 +Tau 58|V0696 TAU|HD 27459|BD+14 682|HR 1356|J042036.31+150543.6,f|V|F0,4:20:36.31|108.76,15:5:43.63|-20.7,5.26,2000 +EK ERI|SAO 131129|HD 27536|SD-06 875|PPM 186813|HR 1362|J042038.64-061445.5,f|V|G8,4:20:38.64|92.45,-6:14:45.58|-55.7,6.15,2000 +SAO 169354|HD 27616|SD-20 831|PPM 247421|HR 1367|J042039.01-203822.6,f|S|A2,4:20:39.01|26.11,-20:38:22.64|-9.4,5.38,2000 +BD+64 433|PPM 14767|HR 1327|J042040.32+650825.5,f|S|G5,4:20:40.33|-28.50,65:8:25.59|-4.7,5.26,2000 +SAO 111756|HD 27497|BD+05 631|PPM 147442|J042041.24+060750.8,f|S|G8,4:20:41.25|-13.12,6:7:50.87|-44.8,5.76,2000 +EM ERI|SAO 131132|HD 27563|SD-07 798|PPM 186815|HR 1363|J042042.83-073532.9,f|V|B5,4:20:42.83|4.46,-7:35:32.98|-1.1,5.85,2000 +HD 27483|BD+13 665|HR 1358|J042052.72+135151.9,f|S|F6,4:20:52.72|105.29,13:51:51.94|-18,6.16,2000 +Men Nu|SAO 258378|HD 29116|CP-81 115|HR 1456|J042058.06-813447.7,f|S|F0,4:20:58.07|9.07,-81:34:47.71|126.1,5.77,2000 +HD 27611|BD-00 687|HR 1366|J042127.03-000553.4,f|D|K3,4:21:27.04|-19.80,-0:5:53.41|-124.7,5.86,2000 +V1574|SAO 169368|CD-26 1642|HR 1374|J042131.31-254342.8,f|D|F0,4:21:31.32|37.03,-25:43:42.89|-50.4,6.09,2000 +Per 53|V0469 PER|HD 27396|BD+46 872|J042133.16+462955.9,f|V|B4,4:21:33.17|21.37,46:29:55.96|-35,4.82,2000 +SAO 131143|SD-06 879|J042137.51-061703.0,f|S|A0,4:21:37.51|5.22,-6:17:3.02|-13.9,6.45,2000 +V1558|HD 27245|BD+60 800|PPM 14778|HR 1335|J042147.65+604408.2,f|V|M0,4:21:47.65|56.68,60:44:8.25|-113.7,5.40,2000 +HD 27322|BD+56 905|HR 1342|J042151.80+563022.7,f|S|A3,4:21:51.81|-14.57,56:30:22.74|7.1,5.91,2000 +Ret Eta|CP-63 324|HR 1395|J042153.32-632311.0,f|S|G8,4:21:53.33|85.20,-63:23:11.01|174.4,5.24,2000 +Tau 60A|V0775 TAU|HD 27628|BD+13 668|PPM 119827|HR 1368|J042203.51+140437.9,f|D|A3,4:22:3.52|114.07,14:4:37.91|-21.4,5.72,2000 +V15956|HD 27639|BD+20 744A|PPM 93455|J042222.72+204917.0,f|D|M0,4:22:22.73|-1.96,20:49:17.10|-1,5.91,2000 +V15956|BD+20 744B|PPM 93455|J042222.75+204915.2,f|D|A,|0.00,4:22:22.76|-2.1,20:49:15.21|-1,6.22 +Tau Chi-59A|V15957|HD 27638|BD+25 707p|PPM 93459|HR 1369|J042234.94+253745.5,f|D|B9,4:22:34.94|20.42,25:37:45.53|-17.9,5.38,2000 +Hyadum II|Tau Delta-61|V1582|HD 27697|BD+17 712|PPM 119835|HR 1373|J042256.09+173233.0,f|D|G9,4:22:56.09|107.70,17:32:33.05|-28.8,3.76,2000 +BD+59 793|HR 1352|J042257.94+593658.2,f|D|A4,4:22:57.95|35.96,59:36:58.26|-44.1,6.18,2000 +V1588|SAO 169391|HD 27881|CD-25 1862|PPM 247465|HR 1384|J042305.67-245331.7,f|V|K5,4:23:5.67|19.59,-24:53:31.77|-15.6,5.81,2000 +SAO 194971|HD 27941|CD-35 1687|HR 1386|J042307.75-353241.3,f|D|K1,4:23:7.76|-1.59,-35:32:41.34|10.3,6.37,2000 +Tau 63|V15964|HD 27749|BD+16 586|HR 1376|J042325.06+164638.1,f|V|A1,4:23:25.06|105.13,16:46:38.13|-27.6,5.63,2000 +V1141 TAU|HD 27742|BD+20 751|PPM 93481|HR 1375|J042332.36+205855.3,f|V|B8,4:23:32.37|15.97,20:58:55.36|-35.1,6.00,2000 +BD+42 946|HR 1371|J042335.81+422540.4,f|D|A1,4:23:35.82|21.04,42:25:40.47|-34.1,6.23,2000 +Eri Xi-42|V1590|SAO 131176|HD 27861|SD-04 818|PPM 186874|HR 1383|J042340.85-034443.6,f|V|A2,4:23:40.85|-47.90,-3:44:43.69|-56.7,5.17,2000 +Tau 66|SAO 111791|BD+09 570|HR 1381|J042351.82+092739.4,f|D|A3,4:23:51.83|-21.01,9:27:39.48|-6.7,5.11,2000 +Tau 62A|HD 27778|BD+23 684|HR 1378|J042359.76+241803.5,f|D|B3,4:23:59.76|4.51,24:18:3.57|-12.9,6.33,2000 +Eri 43|SAO 194984|CD-34 1664|HR 1393|J042402.21-340100.6,f|S|K4,4:24:2.22|73.73,-34:1:0.65|57.6,3.96,2000 +Tau Delta-64A|HD 27819|BD+17 714|PPM 119852|J042405.76+172638.8,f|D|A7,4:24:5.76|110.05,17:26:38.87|-33.5,4.80,2000 +BD+11 604|PPM 119856|J042414.48+120928.7,f|S|K0,4:24:14.48|15.84,12:9:28.75|-22.2,6.41,2000 +Per 55|HD 27777|BD+33 853|PPM 69391|HR 1377|J042429.15+340750.7,f|S|B8,4:24:29.16|20.49,34:7:50.73|-34.2,5.73,2000 +Per 56|HD 27786|BD+33 854|PPM 69394|HR 1379|J042437.46+335734.8,f|D|F4,4:24:37.46|54.74,33:57:34.87|-83.1,5.79,2000 +BD+18 633|PPM 119867|HR 1385|J042457.12+190231.2,f|S|F4,4:24:57.13|110.74,19:2:31.25|-32.5,5.97,2000 +V16000|HD 28413|CP-61 335|HR 1416|J042505.33-611417.4,f|V|K4,4:25:5.34|-18.84,-61:14:17.50|21.7,5.93,2000 +V15991|HD 28246|CD-44 1546|J042519.11-440939.2,f|V|F6,4:25:19.12|27.33,-44:9:39.23|65.6,6.38,2000 +Tau Kappa-65A|V1593|HD 27934|BD+21 642|HR 1387|J042522.16+221737.9,f|D|A7,4:25:22.17|105.48,22:17:37.95|-44.1,4.21,2000 +Tau Kappa-67|V1594|HD 27946|BD+21 643|HR 1388|J042525.01+221159.9,f|D|A7,4:25:25.02|112.49,22:11:59.99|-47.1,5.27,2000 +Tau Delta-68A|V0776 TAU|HD 27962|BD+17 719|PPM 119872|HR 1389|J042529.38+175540.4,f|D|A2,4:25:29.38|108.32,17:55:40.48|-32.5,4.31,2000 +Tau 70A|V15985|HD 27991|BD+15 621|PPM 119877|HR 1391|J042537.31+155627.5,f|D|F7,4:25:37.32|104.57,15:56:27.58|-28.8,6.45,2000 +SAO 111814|BD+04 691|PPM 147541|J042601.34+042224.4,f|S|K0,4:26:1.35|22.88,4:22:24.43|-16,6.33,2000 +HD 27971|BD+31 776|J042606.30+312620.0,f|S|K1,4:26:6.31|76.66,31:26:20.08|-121.5,5.28,2000 +Tau Upsilon-69|Upsilon Tauri|BD+22 696|PPM 93517|HR 1392|J042618.46+224848.8,f|D|A8,4:26:18.46|108.68,22:48:48.90|-45.8,4.29,2000 +Tau 71|V0777 TAU|BD+15 625|PPM 119892|HR 1394|J042620.74+153705.7,f|D|F0,4:26:20.74|114.70,15:37:5.75|-33.3,4.49,2000 +V1143 TAU|SAO 111817|HD 28114|BD+08 687|PPM 147546|HR 1397|J042621.10+083524.9,f|V|B6,4:26:21.10|3.41,8:35:24.97|-5.5,6.07,2000 +Tau Pi-73|V15993|BD+14 697|PPM 119898|HR 1396|J042636.37+144249.6,f|V|G7,4:26:36.37|-7.54,14:42:49.62|-31.2,4.69,2000 +SAO 169455|HD 28312|CD-24 2343|PPM 247556|J042656.92-240452.7,f|D|A2,4:26:56.93|-6.85,-24:4:52.76|-14.1,6.12,2000 +SAO 111827|HD 28191|BD+01 753|PPM 147559|J042700.69+020445.8,f|S|K1,4:27:0.70|73.75,2:4:45.87|-62,6.22,2000 +HD 27855|BD+57 800|PPM 29154|HR 1382|J042700.87+573507.0,f|D|A0,4:27:0.87|7.48,57:35:7.04|-16.8,6.28,2000 +HD 26836|BD+80 133|PPM 739|HR 1317|J042702.94+804926.9,f|S|G5,4:27:2.94|12.94,80:49:26.97|-20.9,5.40,2000 +HD 28454|CD-47 1383|HR 1418|J042705.97-465651.0,f|S|F5,4:27:5.97|66.46,-46:56:51.02|-275.4,6.11,2000 +Tau 72|V15998|HD 28149|BD+22 699|PPM 93527|HR 1399|J042717.44+225946.8,f|V|B7,4:27:17.45|-0.41,22:59:46.81|-13.3,5.52,2000 +HD 28217|BD+10 577|PPM 119911|J042728.76+111244.2,f|D|B8,4:27:28.77|-2.50,11:12:44.30|-13.2,5.87,2000 +HD 28732|CP-62 357|PPM 354131|HR 1435|J042746.02-623116.3,f|D|K0,4:27:46.03|-11.77,-62:31:16.34|3.5,5.74,2000 +HD 28226|BD+21 647|PPM 93535|J042800.78+213711.6,f|D|A5,4:28:0.78|98.87,21:37:11.66|-40.6,5.71,2000 +HD 28322|BD+01 755|PPM 147577|HR 1413|J042803.63+015130.9,f|S|G9,4:28:3.64|28.63,1:51:30.98|9.6,6.15,2000 +RV CAE|SAO 216821|HD 28552|CD-42 1510|HR 1429|J042809.46-415735.3,f|V|M1,4:28:9.46|-14.72,-41:57:35.40|2.6,6.41,2000 +V0408 CEP|HD 26356|BD+83 104|PPM 741|HR 1289|J042813.27+834828.0,f|V|B5,4:28:13.27|-4.22,83:48:28.05|11.3,5.51,2000 +Tau 76|V16013|HD 28294|BD+14 702|PPM 119926|J042823.40+144427.5,f|V|F0,4:28:23.40|109.67,14:44:27.51|-21.3,5.91,2000 +Tau 75|V1609|HD 28292|BD+16 605|PPM 119929|J042826.37+162134.8,f|V|K1,4:28:26.37|8.06,16:21:34.82|17.8,4.97,2000 +44 Eri|SAO 111845|HD 28375|BD+01 757|PPM 147584|HR 1415|J042832.11+012250.9,f|S|B3,4:28:32.12|17.69,1:22:50.95|-22,5.54,2000 +Tau Theta-77B|V16016|BD+15 631|PPM 119933|HR 1411|J042834.49+155743.8,f|D|G9,4:28:34.50|104.70,15:57:43.85|-15,3.84,2000 +Ain|Oculus Boreus|Tau Epsilon-74|BD+18 640|PPM 119934|J042836.99+191049.5,f|D|G9,4:28:37.00|107.25,19:10:49.55|-36.8,3.54,2000 +SAO 149668|HD 28479|SD-19 931|PPM 214381|HR 1421|J042839.03-192731.9,f|S|K1,4:28:39.04|37.76,-19:27:31.95|-113.5,5.94,2000 +Tau Theta-78A|Theta2 Tauri|HD 28319|BD+15 632|PPM 119937|HR 1412|J042839.74+155215.1,f|D|A7,4:28:39.74|108.64,15:52:15.18|-26.4,3.41,2000 +Tau 79|V16022|HD 28355|BD+12 598|HR 1414|J042850.16+130251.3,f|V|A7,4:28:50.16|105.21,13:2:51.37|-15.1,5.02,2000 +HD 28271|BD+30 665A|PPM 69432|J042851.99+302141.3,f|D|F7,4:28:51.99|23.04,30:21:41.37|-20.3,6.37,2000 +DU ERI|SAO 149674|HD 28497|SD-13 893|PPM 214397|HR 1423|J042906.92-130254.1,f|V|B1,4:29:6.93|0.29,-13:2:54.13|-1,5.60,2000 +SAO 216832|CD-46 1427|HR 1433|J042920.08-463054.9,f|S|K1,4:29:20.09|51.92,-46:30:54.97|36.7,6.12,2000 +HD 26659|BD+82 113|PPM 748|J043000.36+832025.3,f|S|G8,4:30:0.36|-46.72,83:20:25.36|102,5.47,2000 +BD+09 590|PPM 119958|HR 1425|J043002.28+101543.9,f|S|G8,4:30:2.29|-25.09,10:15:43.97|-78.4,6.47,2000 +Tau 80|HD 28485|BD+15 636|PPM 119962|HR 1422|J043008.59+153816.2,f|D|F0,4:30:8.60|107.61,15:38:16.23|-23.9,5.64,2000 +SAO 149682|HD 28625|SD-13 896|PPM 214418|HR 1431|J043010.00-133532.5,f|S|G5,4:30:10.00|17.93,-13:35:32.54|0.6,6.21,2000 +V1627|HD 28527|BD+15 637|PPM 119967|HR 1427|J043033.63+161138.4,f|D|A6,4:30:33.63|105.01,16:11:38.45|-25.1,4.77,2000 +Tau 83|V16041|HD 28556|BD+13 690|J043037.36+134327.8,f|D|F0,4:30:37.36|108.12,13:43:27.85|-19.7,5.40,2000 +HD 28459|BD+32 806|PPM 69458|HR 1419|J043038.40+322727.9,f|S|B9,4:30:38.41|7.97,32:27:27.96|-19.2,6.18,2000 +Tau 81|V16040|HD 28546|BD+15 639|PPM 119971|HR 1428|J043038.88+154130.7,f|D|A5,4:30:38.89|104.12,15:41:30.77|-24.3,5.46,2000 +HD 28776|CD-35 1768|HR 1439|J043040.33-353912.6,f|D|K0,4:30:40.33|1.46,-35:39:12.62|31.2,5.95,2000 +HD 28568|BD+15 640|PPM 119973|J043046.79+160855.3,f|D|F5,4:30:46.80|98.26,16:8:55.31|-22.8,6.50,2000 +Cae Delta|V16066|HD 28873|CD-45 1567|HR 1443|J043050.09-445713.4,f|V|B2,4:30:50.10|2.44,-44:57:13.50|-2.5,5.07,2000 +Tau 84|V1146 TAU|HD 28595|BD+14 711|PPM 119976|J043107.19+150618.1,f|V|M3,4:31:7.19|42.72,15:6:18.13|-52.8,6.31,2000 +HD 28763|SD-13 904|PPM 214445|HR 1438|J043125.85-133839.1,f|D|A3,4:31:25.85|-17.49,-13:38:39.20|-42,6.25,2000 +Tau 85|V1640|HD 28677|BD+15 645|PPM 119991|HR 1432|J043151.75+155105.6,f|V|F4,4:31:51.76|107.64,15:51:5.62|-32.4,6.01,2000 +Eri 45|HD 28749|BD-00 713|PPM 175558|HR 1437|J043152.66-000238.4,f|S|K3,4:31:52.67|-3.75,-0:2:38.44|-8.2,4.90,2000 +V0492 PER|HD 28591|BD+36 903|PPM 69477|J043156.94+364433.6,f|V|G5,4:31:56.95|4.21,36:44:33.68|-67.7,6.37,2000 +Cam 1A|DL CAM|HD 28446|BD+53 779A|HR 1417|J043201.83+535438.9,f|D|B0,4:32:1.84|-3.18,53:54:38.99|-6,5.77,2000 +SAO 111879|HD 28736|BD+05 674|PPM 147652|HR 1436|J043204.80+052436.1,f|S|F5,4:32:4.81|114.09,5:24:36.13|6.2,6.37,2000 +DZ ERI|SAO 131279|HD 28843|SD-03 809|HR 1441|J043237.55-031234.3,f|D|B9,4:32:37.55|17.97,-3:12:34.35|-16.7,5.76,2000 +SAO 149725|SD-11 900|PPM 214492|HR 1447|J043322.08-104707.2,f|S|K0,4:33:22.09|-0.88,-10:47:7.20|30,6.06,2000 +Per 57A|BD+42 990|PPM 47169|HR 1434|J043324.90+430350.0,f|D|F0,4:33:24.90|5.70,43:3:50.02|5.3,6.09,2000 +Eri Upsilon-50|V1650|CD-30 1883|PPM 247723|HR 1453|J043330.55-294559.3,f|V|K0,4:33:30.55|-114.32,-29:45:59.37|-271.6,4.51,2000 +BD+72 227|PPM 5639|J043330.67+723142.9,f|D|A8,4:33:30.68|29.36,72:31:42.98|-90.8,5.94,2000 +HD 28867|BD+17 750|HR 1442|J043333.04+180100.2,f|D|B9,4:33:33.05|12.41,18:1:0.20|-16.7,6.24,2000 +V1659|HD 29399|CP-63 342|PPM 354196|HR 1475|J043333.95-624925.2,f|D|K1,4:33:33.95|-117.22,-62:49:25.24|-19.3,5.78,2000 +BD+09 600|HR 1446|J043348.17+092448.8,f|S|G8,4:33:48.18|-6.22,9:24:48.84|-23,6.02,2000 +Tau Rho-86|Rho Tauri|BD+14 720|HR 1444|J043350.91+145039.9,f|S|A8,4:33:50.92|103.67,14:50:39.93|-25.9,4.65,2000 +Eri 46|EH ERI|SD-07 838|HR 1449|J043354.72-064420.0,f|D|B9,4:33:54.73|-2.68,-6:44:20.07|-4.8,5.73,2000 +Dor Alpha|Alpha Doradus|SAO 233564|CP-55 663|PPM 333592|HR 1465|J043359.77-550241.9,f|D|A0,4:33:59.78|58.10,-55:2:41.91|12.7,3.26,2000 +SAO 111896|HD 28978|BD+05 679|PPM 147685|HR 1448|J043408.26+053407.0,f|S|A2,4:34:8.27|-15.53,5:34:7.02|-7.8,5.68,2000 +Eri 47|DV ERI|SAO 131315|SD-08 887|HR 1451|J043411.62-081352.8,f|V|M3,4:34:11.63|-22.42,-8:13:52.87|2.9,5.20,2000 +SAO 131316|SD-09 930|HR 1452|J043411.77-085812.9,f|S|K4,4:34:11.77|-36.30,-8:58:12.93|-112.2,5.23,2000 +SAO 131317|SD-07 841|J043414.19-065016.1,f|S|K2,4:34:14.19|-23.23,-6:50:16.11|-37.8,6.06,2000 +HD 28929|BD+28 666|HR 1445|J043437.99+285740.1,f|D|B9,4:34:37.99|-0.66,28:57:40.14|-21.9,5.89,2000 +SAO 169581|HD 29163|CD-24 2433|PPM 247742|J043438.14-240225.7,f|S|K1,4:34:38.14|14.93,-24:2:25.80|18.1,6.39,2000 +SAO 169584|HD 29184|SD-20 880|PPM 214537|HR 1461|J043500.71-195516.9,f|S|K3,4:35:0.71|102.95,-19:55:16.98|56.3,6.12,2000 +Theemim|Beemim|Eri Upsilon-52|SAO 195148|HD 29291|CD-30 1901|HR 1464|J043533.03-303344.4,f|S|G8,4:35:33.04|-48.95,-30:33:44.43|-12.8,3.81,2000 +Tau 88A|V1658|BD+09 607|HR 1458|J043539.26+100938.8,f|D|A5,4:35:39.26|44.88,10:9:38.82|-52.4,4.25,2000 +BD+19 742|HR 1455|J043542.56+195254.4,f|S|G8,4:35:42.56|-21.86,19:52:54.45|-16.5,6.34,2000 +Aldebaran|Cor Tauri|Parilicium|Tau Alpha-87A|Alpha Tauri|HD 29139|BD+16 629|HR 1457|J043555.23+163033.4,f|D|K5,4:35:55.24|62.85,16:30:33.48|-189.4,0.99,2000 +V16108|SAO 131344|HD 29227|SD-03 830|PPM 187117|HR 1462|J043601.67-033641.9,f|D|B7,4:36:1.67|1.05,-3:36:41.91|-7.9,6.35,2000 +Eri Nu-48|Nu Eridani|SAO 131346|HD 29248|SD-03 834|PPM 187123|HR 1463|J043619.14-032108.8,f|D|B2,4:36:19.14|1.80,-3:21:8.85|-4.5,3.93,2000 +BD+63 515|PPM 14913|J043624.19+641541.7,f|S|A1,4:36:24.20|-26.06,64:15:41.77|-7.4,5.91,2000 +V1116 TAU|HD 29169|BD+23 715|PPM 93628|HR 1459|J043629.13+232027.0,f|V|F5,4:36:29.14|110.04,23:20:27.08|-53.9,6.02,2000 +Per 58A|BD+40 1000A|PPM 47216|HR 1454|J043641.42+411553.3,f|D|K4,4:36:41.43|-5.41,41:15:53.31|-19.2,4.25,2000 +R DOR|HD 29712|CP-62 372|PPM 354226|HR 1492|J043645.59-620437.7,f|D|M8,4:36:45.59|-68.49,-62:4:37.76|-71.2,5.44,2000 +SAO 195163|HD 29435|CD-30 1911|HR 1476|J043650.93-304300.4,f|S|B9,4:36:50.93|-13.54,-30:43:0.40|6.7,6.28,2000 +49 Eri|V1671|SAO 111928|HD 29335|BD+00 798|PPM 147738|HR 1469|J043713.67+005953.9,f|V|B7,4:37:13.67|-4.95,0:59:53.93|-5.3,5.32,2000 +SZ TAU|BD+18 661|J043714.77+183234.9,f|V|F5,4:37:14.78|-3.70,18:32:34.91|-6.8,6.49,2000 +SAO 216899|HD 29559|CD-42 1572|J043719.26-415222.5,f|S|A3,4:37:19.27|24.80,-41:52:22.60|49.4,6.41,2000 +Eri 51|SAO 131358|HD 29391|SD-02 963|PPM 187138|HR 1474|J043736.13-022824.7,f|D|F0,4:37:36.13|43.31,-2:28:24.77|-64.2,5.22,2000 +Tau 89|V16124|HD 29375|BD+15 661|HR 1472|J043809.44+160159.8,f|D|F0,4:38:9.45|113.03,16:1:59.85|-40.4,5.78,2000 +Tau 90A|HD 29388|BD+12 618|HR 1473|J043809.46+123039.0,f|D|A6,4:38:9.46|101.77,12:30:39.02|-14.9,4.27,2000 +Eri 53|SAO 149781|SD-14 933|Sceptrum|HR 1481|J043810.82-141814.4,f|D|K1,4:38:10.82|-77.91,-14:18:14.47|-178.1,3.87,2000 +HU TAU|HD 29365|BD+20 785|PPM 93646|HR 1471|J043815.82+204105.0,f|V|B8,4:38:15.83|-13.89,20:41:5.00|-8.2,5.86,2000 +SAO 256116|CP-77 181|PPM 368483|HR 1531|J043821.72-773921.6,f|S|K2,4:38:21.73|-7.02,-77:39:21.61|-10.5,6.05,2000 +V16134|SAO 149789|HD 29573|SD-12 955|PPM 214621|HR 1483|J043853.55-120723.2,f|V|A2,4:38:53.56|-65.11,-12:7:23.26|-17.7,5.01,2000 +CD-51 1207|PPM 333666|HR 1498|J043904.30-514021.9,f|S|K2,4:39:4.30|13.58,-51:40:21.91|18.1,6.44,2000 +SAO 111954|HD 29499|BD+07 681|PPM 147781|J043906.15+075215.5,f|D|A5,4:39:6.16|91.83,7:52:15.52|-4.6,5.37,2000 +Tau Sigma-91B|HD 29479|BD+15 665|HR 1478|J043909.21+154759.4,f|D|A4,4:39:9.22|32.47,15:47:59.44|-77.7,5.09,2000 +Tau Sigma-92A|HD 29488|BD+15 666|HR 1479|J043916.50+155504.7,f|D|A5,4:39:16.50|82.37,15:55:4.72|-19.5,4.67,2000 +SAO 149797|HD 29613|SD-14 936|PPM 214632|HR 1487|J043919.71-142133.0,f|S|K1,4:39:19.71|121.05,-14:21:33.09|-125.4,5.46,2000 +HD 29459|BD+24 674|PPM 93661|HR 1477|J043923.14+251305.7,f|S|A5,4:39:23.15|16.83,25:13:5.79|-11.7,6.21,2000 +SAO 131392|BD-01 689|HR 1488|J043947.22-010308.8,f|S|K0,4:39:47.22|22.80,-1:3:8.85|-8.8,6.10,2000 +Cam 3|V1681|HD 29317|BD+52 865|PPM 29295|HR 1467|J043954.68+530446.3,f|D|K0,4:39:54.68|-7.39,53:4:46.33|-15.9,5.08,2000 +Cam 2A|HD 29316|BD+53 794|PPM 29298|HR 1466|J043958.08+532822.4,f|D|A8,4:39:58.08|48.39,53:28:22.45|-123,5.37,2000 +Tau 93|V16138|HD 29589|BD+11 639|HR 1484|J044003.41+121151.3,f|V|B8,4:40:3.42|-1.32,12:11:51.39|-13,5.46,2000 +HD 29737|CD-24 2488|PPM 247865|HR 1495|J044006.80-242856.5,f|S|G6,4:40:6.80|-69.89,-24:28:56.53|17.7,5.57,2000 +Eri 54|DM ERI|SAO 149818|HD 29755|SD-19 988|PPM 214663|HR 1496|J044026.51-194017.3,f|D|M4,4:40:26.51|28.25,-19:40:17.37|-97.1,4.34,2000 +Cae Alpha|V16147|SAO 216926|HD 29875|CD-42 1587|J044033.71-415149.5,f|D|F2,4:40:33.71|-141.20,-41:51:49.51|-75,4.45,2000 +HD 29646|BD+28 680|J044119.76+283653.9,f|D|A2,4:41:19.76|37.40,28:36:53.98|-30,5.73,2000 +HD 29526|BD+48 1128|PPM 47275|HR 1482|J044124.12+481803.1,f|S|A0,4:41:24.13|44.70,48:18:3.17|-44.2,5.65,2000 +HD 29645|BD+37 954|PPM 69587|HR 1489|J044150.25+381648.6,f|S|G0,4:41:50.26|241.50,38:16:48.66|-97.9,5.97,2000 +Cae Beta|SAO 195239|HD 29992|CD-37 1867|J044203.48-370839.4,f|S|F1,4:42:3.48|46.87,-37:8:39.47|193.1,5.04,2000 +Tau Tau-94A|HD 29763|BD+22 739|HR 1497|J044214.70+225724.9,f|D|B3,4:42:14.70|-2.90,22:57:24.94|-20.3,4.27,2000 +Pic Lambda|SAO 233638|CD-50 1471|PPM 333719|HR 1516|J044246.42-502852.8,f|S|K0,4:42:46.42|-35.89,-50:28:52.80|34.6,5.30,2000 +Per 59|HD 29722|BD+43 1043|PPM 47288|HR 1494|J044254.32+432154.4,f|S|A1,4:42:54.33|34.68,43:21:54.50|-52.1,5.30,2000 +Men Mu|SAO 256122|CP-71 282|HR 1541|J044303.96-705551.6,f|S|B8,4:43:3.96|9.31,-70:55:51.70|34.8,5.53,2000 +CD-30 1968|J044309.29-304556.0,f|S|K2,4:43:9.29|-30.29,-30:45:56.01|-66.4,5.66,2000 +Tau 95|HD 29859|BD+23 733|HR 1499|J044313.75+240520.1,f|S|F7,4:43:13.76|15.61,24:5:20.11|-18.3,6.15,2000 +HD 29721|BD+49 1230|PPM 47292|HR 1493|J044321.59+495825.6,f|D|B9,4:43:21.59|-5.21,49:58:25.64|-15.3,5.87,2000 +SAO 216961|CD-41 1549|HR 1518|J044344.27-410353.2,f|S|K3,4:43:44.27|11.20,-41:3:53.24|10.5,6.23,2000 +HD 29867|BD+32 827|J044348.24+325155.6,f|S|A8,4:43:48.24|-45.74,32:51:55.65|-44.5,6.50,2000 +Eri 56|DX ERI|SAO 131451|SD-08 929|J044405.32-083012.8,f|V|B2,4:44:5.32|4.45,-8:30:12.85|1.5,5.78,2000 +SAO 149856|SD-18 906|PPM 214748|HR 1513|J044407.98-183959.7,f|S|A3,4:44:7.98|52.15,-18:39:59.71|-17.6,5.53,2000 +HD 29866|BD+40 1032|J044413.01+404711.2,f|S|B8,4:44:13.02|11.13,40:47:11.24|-23.1,6.10,2000 +Dor Kappa|V16162|SAO 233664|CP-59 376|PPM 333743|J044421.15-594357.8,f|V|A8,4:44:21.15|29.33,-59:43:57.84|44.2,5.28,2000 +V1705|BD+10 621|J044425.82+110846.0,f|D|F0,4:44:25.83|98.90,11:8:46.09|-13.5,5.39,2000 +V1718|CP-63 365|J044457.90-631346.9,f|V|K0,4:44:57.90|-9.59,-63:13:46.97|-3,6.47,2000 +SAO 169727|SD-21 966|PPM 247975|HR 1521|J044504.16-211700.1,f|S|K5,4:45:4.16|16.91,-21:17:0.18|-17.1,5.70,2000 +Eri Mu-57|SAO 131468|SD-03 876|PPM 187297|J044530.15-031516.7,f|S|B5,4:45:30.15|17.22,-3:15:16.77|-13.5,4.02,2000 +BD+23 739|PPM 93742|HR 1512|J044542.46+233740.7,f|S|B5,4:45:42.47|9.48,23:37:40.78|-16.8,6.34,2000 +SAO 195278|CD-39 1624|HR 1526|J044555.45-392123.8,f|S|K1,4:45:55.45|-58.11,-39:21:23.83|-19,6.05,2000 +HD 29329|BD+76 174|PPM 5698|HR 1468|J044600.57+763639.7,f|S|F7,4:46:0.58|74.96,76:36:39.75|-136.2,6.47,2000 +BD+11 646|HR 1519|J044601.74+114220.1,f|D|A2,4:46:1.74|67.42,11:42:20.13|-7.1,5.35,2000 +BD+18 719|HR 1517|J044616.82+184404.8,f|S|K4,4:46:16.83|73.01,18:44:4.89|-69.8,5.98,2000 +SAO 131481|SD-03 884|PPM 187318|HR 1522|J044624.16-025716.3,f|S|A2,4:46:24.16|20.22,-2:57:16.32|-55.1,6.33,2000 +EX ERI|SAO 169752|CD-28 1735|HR 1525|J044625.74-280514.7,f|V|A3,4:46:25.75|-4.10,-28:5:14.80|18.2,6.18,2000 +BD+40 1045|PPM 47344|HR 1514|J044644.47+401845.3,f|S|G9,4:46:44.48|9.04,40:18:45.33|-37.1,5.99,2000 +Eri 58|V16168|SAO 149888|SD-17 954|PPM 214826|HR 1532|J044736.29-165604.0,f|V|G2,4:47:36.29|130.44,-16:56:4.04|169.2,5.49,2000 +Cae Zeta|CD-30 2011|HR 1539|J044749.57-300113.3,f|S|K1,4:47:49.58|28.96,-30:1:13.34|92.8,6.35,2000 +Cam 4A|BD+56 973|PPM 29395|HR 1511|J044800.27+564525.8,f|D|A3,4:48:0.27|53.04,56:45:25.86|-146.4,5.28,2000 +BD+55 928|HR 1515|J044807.02+553609.4,f|S|F0,4:48:7.03|79.32,55:36:9.40|-96.4,6.32,2000 +Eri 59|V16170|SD-16 956|PPM 214851|HR 1538|J044832.53-161946.1,f|V|F6,4:48:32.53|7.05,-16:19:46.14|39.7,5.76,2000 +SD-05 1044|PPM 187358|HR 1536|J044836.38-054026.5,f|S|F8,4:48:36.39|312.71,-5:40:26.56|-249.3,5.77,2000 +BD+03 681|HR 1534|J044844.62+033518.6,f|S|K1,4:48:44.62|-1.20,3:35:18.70|-15.4,6.03,2000 +HD 29678|BD+75 189|PPM 5719|HR 1491|J044850.35+755628.3,f|D|A9,4:48:50.35|37.57,75:56:28.39|-133.3,5.97,2000 +BD+31 816|PPM 69664|HR 1529|J044912.84+312614.5,f|S|K2,4:49:12.85|16.77,31:26:14.55|-102.8,5.57,2000 +BD+32 840|PPM 69666|HR 1528|J044919.07+323517.4,f|S|A8,4:49:19.08|25.78,32:35:17.49|-31.7,5.83,2000 +SAO 149916|SD-14 970|PPM 214877|HR 1545|J044942.24-134610.8,f|S|F5,4:49:42.24|-119.90,-13:46:10.81|-172.4,6.27,2000 +Tau 96A|BD+15 687|HR 1537|J044944.08+155415.1,f|D|K5,4:49:44.08|3.89,15:54:15.20|-6.9,6.09,2000 +Tabit|Ori Pi3-1|V1731|BD+06 762|HR 1543|J044950.41+065740.5,f|D|F6,4:49:50.41|463.36,6:57:40.59|11.6,3.19,2000 +BD+37 969|1 Aur|PPM 69675|HR 1533|J044954.63+372917.7,f|S|K3,4:49:54.64|-38.44,37:29:17.79|38.5,4.87,2000 +Eri 60|V1740|SAO 149924|SD-16 964|PPM 214891|HR 1549|J045011.61-161301.7,f|V|K0,4:50:11.62|44.94,-16:13:1.77|51.3,5.03,2000 +CD-41 1593|HR 1557|J045016.18-411915.0,f|D|F2,4:50:16.18|-3.04,-41:19:15.05|66.6,6.07,2000 +BD+70 322|J045036.38+705629.5,f|S|A0,4:50:36.39|1.71,70:56:29.50|-20.2,6.35,2000 +Ori Pi2-2|SAO 112124|BD+08 777|HR 1544|J045036.72+085400.6,f|S|A1,4:50:36.72|-0.89,8:54:0.63|-31.6,4.36,2000 +Pic Iota|CP-53 760A|PPM 333835|HR 1563|J045055.30-532741.4,f|D|F0,4:50:55.31|-79.12,-53:27:41.43|87.8,5.62,2000 +Pic Iota|CP-53 760B|PPM 333836|HR 1564|J045056.49-532734.9,f|D|F4,4:50:56.49|-87.34,-53:27:34.91|84.9,6.38,2000 +BD+48 1162|HR 1535|J045109.32+484426.4,f|S|G9,4:51:9.33|-43.03,48:44:26.46|-30.3,5.64,2000 +Ori Pi4-3|V1742|SAO 112142|BD+05 745|HR 1552|J045112.36+053618.3,f|V|B2,4:51:12.36|-3.58,5:36:18.37|1,3.68,2000 +Tau 97|V0480 TAU|BD+18 743|HR 1547|J045122.46+185023.5,f|D|A7,4:51:22.46|79.64,18:50:23.50|-32.8,5.09,2000 +SAO 195357|CD-35 1962|HR 1559|J045128.21-345422.7,f|D|A1,4:51:28.21|25.71,-34:54:22.70|-24.9,5.83,2000 +BD+09 668|HR 1553|J045143.38+095830.2,f|S|B5,4:51:43.38|2.36,9:58:30.28|-7.3,6.11,2000 +BD+13 728|J045149.98+133918.5,f|D|F5,4:51:49.99|106.84,13:39:18.56|-16,6.26,2000 +V16174|BD+63 543|HR 1527|J045205.21+633019.5,f|D|M3,4:52:5.22|38.14,63:30:19.52|-94.3,5.47,2000 +Ori Omicron-4|Omicron1 Orionis|BD+14 777|HR 1556|J045231.96+141502.3,f|V|S3,4:52:31.96|-2.62,14:15:2.31|-56.1,4.74,2000 +Aur 2|BD+36 952|PPM 69715|HR 1551|J045237.98+364211.4,f|S|K2,4:52:37.98|-25.98,36:42:11.47|-3.9,4.78,2000 +BD+27 701|PPM 93846|HR 1554|J045247.11+275350.9,f|S|F2,4:52:47.12|44.68,27:53:50.95|-35.8,5.97,2000 +BD+42 1081|PPM 47447|J045247.75+423511.8,f|S|A3,4:52:47.76|-11.04,42:35:11.85|0.1,5.69,2000 +Eri Omega-61|SAO 131568|SD-05 1068|PPM 187434|J045253.66-052709.7,f|S|F4,4:52:53.67|-18.07,-5:27:9.70|25,4.38,2000 +SAO 256139|HD 31975|CP-72 332|PPM 368575|J045305.64-722427.6,f|S|F6,4:53:5.64|-46.15,-72:24:27.65|270.7,6.29,2000 +BD+52 891|PPM 29467|HR 1546|J045309.78+525028.1,f|S|A2,4:53:9.78|-14.04,52:50:28.16|-12.4,6.40,2000 +Ori 5|V1755|SAO 112179|HD 31139|BD+02 800|PPM 148121|HR 1562|J045322.77+023029.6,f|V|M1,4:53:22.77|29.67,2:30:29.61|-16.4,5.33,2000 +V1777|SAO 249138|HD 31754|CP-66 338|PPM 354392|HR 1598|J045330.49-664031.4,f|V|M0,4:53:30.50|4.51,-66:40:31.49|10.4,6.43,2000 +Cam Alpha-9|V16180|BD+66 358|HR 1542|J045403.01+662033.6,f|V|O9,4:54:3.01|0.48,66:20:33.64|7.3,4.31,2000 +Ori Pi5-8|Pi5 Orionis|SAO 112197|HD 31237|BD+02 810|PPM 148148|HR 1567|J045415.09+022626.4,f|V|B3,4:54:15.10|1.50,2:26:26.42|0.2,3.71,2000 +Ori 6|V16191|HD 31283|BD+11 675|HR 1569|J045446.89+112533.6,f|D|A3,4:54:46.90|-16.32,11:25:33.62|13.6,5.19,2000 +V1763|HD 31296|BD+07 755|HR 1571|J045447.78+074644.7,f|V|K5,4:54:47.78|-21.70,7:46:44.75|-27.1,5.33,2000 +HD 31331|BD+00 893|PPM 148162|HR 1574|J045450.70+002801.8,f|S|B5,4:54:50.71|-0.45,0:28:1.80|-4.9,5.99,2000 +BD+43 1116|PPM 47482|HR 1558|J045451.24+440339.1,f|S|A0,4:54:51.24|21.34,44:3:39.10|-56.4,6.07,2000 +SAO 233733|HD 31746|CP-58 437|PPM 333886|HR 1597|J045453.03-583251.5,f|S|F3,4:54:53.04|100.97,-58:32:51.55|68.3,6.12,2000 +Ori Pi1-7A|HD 31295|BD+09 683|J045453.72+100902.9,f|D|A0,4:54:53.73|40.01,10:9:3.00|-128.4,4.66,2000 +HD 31529|CD-39 1691|HR 1584|J045454.81-393742.9,f|S|K3,4:54:54.81|-6.24,-39:37:42.99|22.3,6.10,2000 +HD 31236|BD+19 811|HR 1566|J045458.36+192907.3,f|S|F3,4:54:58.36|63.35,19:29:7.40|-28.4,6.36,2000 +Cam 5|BD+55 941|PPM 29478|HR 1555|J045503.12+551532.7,f|D|B9,4:55:3.13|-16.16,55:15:32.79|-8.6,5.53,2000 +SAO 149985|HD 31414|SD-16 991|HR 1579|J045506.82-164426.4,f|S|G5,4:55:6.82|4.88,-16:44:26.41|-8.9,5.70,2000 +Men Eta|V16210|SAO 256145|CP-75 290|PPM 368588|HR 1629|J045511.20-745612.6,f|V|K4,4:55:11.20|27.60,-74:56:12.67|61.9,5.46,2000 +R ERI|SAO 149988|HD 31444|SD-16 992|HR 1581|J045518.64-162503.9,f|V|G5,4:55:18.65|11.80,-16:25:3.95|36.5,5.72,2000 +HD 31373|BD+14 787|HR 1576|J045550.15+150225.0,f|S|B9,4:55:50.15|-4.49,15:2:25.00|-11.5,5.79,2000 +HD 31411|BD+05 769|PPM 148183|HR 1578|J045558.35+052356.4,f|S|A0,4:55:58.35|-18.97,5:23:56.49|-14,6.50,2000 +HD 31134|BD+52 898|PPM 29495|HR 1561|J045607.07+525211.1,f|S|A2,4:56:7.07|-2.63,52:52:11.14|18.1,5.75,2000 +SAO 112225|HD 31423|BD+07 759|J045608.96+075416.9,f|S|F5,4:56:8.97|-92.86,7:54:16.91|-42.9,6.43,2000 +HD 31362|BD+24 709|HR 1575|J045615.57+243531.9,f|S|F0,4:56:15.58|-22.37,24:35:31.99|-14.2,6.33,2000 +HD 31327|BD+35 930|PPM 69764|HR 1573|J045620.08+361006.7,f|S|B2,4:56:20.09|0.12,36:10:6.73|-3.9,6.09,2000 +Ori Omicron-9A|HD 31421|BD+13 740|J045622.27+133052.0,f|D|K2,4:56:22.27|-77.74,13:30:52.08|-46,4.08,2000 +Eri 62A|SAO 131614|HD 31512|SD-05 1091|PPM 187487|HR 1582|J045624.18-051016.8,f|D|B6,4:56:24.19|-5.68,-5:10:16.88|-2.3,5.50,2000 +Aur Iota-3|V1778|HD 31398|BD+32 855|Hassaleh|PPM 69775|HR 1577|J045659.61+330957.9,f|V|K3,4:56:59.62|3.64,33:9:57.92|-18.5,2.68,2000 +SAO 131625|HD 31623|BD-01 762|PPM 175683|HR 1591|J045717.19-010402.1,f|S|F2,4:57:17.19|-36.29,-1:4:2.13|-27.1,6.24,2000 +Cam 7A|V16198|HD 31278|BD+53 829|HR 1568|J045717.19+534507.5,f|D|A1,4:57:17.20|-24.21,53:45:7.56|7.5,4.46,2000 +HD 31539|BD+16 672|HR 1585|J045722.34+170913.2,f|S|K5,4:57:22.34|-11.18,17:9:13.24|-12.3,5.49,2000 +HD 31726|SD-14 1003|HR 1595|J045744.68-141354.9,f|S|B1,4:57:44.69|-0.29,-14:13:54.91|-12.2,6.15,2000 +Tau 99A|HD 31553|BD+23 777|PPM 93923|HR 1586|J045748.64+235654.8,f|D|G5,4:57:48.65|2.60,23:56:54.82|-9.4,5.81,2000 +Tau 98A|HD 31592|BD+24 717|PPM 93929|J045809.39+250301.4,f|D|A0,4:58:9.39|26.23,25:3:1.46|-47.6,5.79,2000 +HD 31739|SD-02 1080|PPM 175685|HR 1596|J045810.91-021245.8,f|D|A2,4:58:10.91|12.29,-2:12:45.86|12.7,6.34,2000 +Ori Pi6-10|V1786|SAO 112281|HD 31767|BD+01 872|PPM 148255|J045832.90+014250.4,f|V|K2,4:58:32.90|-1.65,1:42:50.46|-7.9,4.46,2000 +Men Xi|SAO 258395|HD 34172|CP-82 106|PPM 376489|HR 1716|J045850.96-822813.8,f|S|G8,4:58:50.96|-5.11,-82:28:13.85|4.1,5.84,2000 +V1788|HD 31764|BD+14 796|J045859.41+143235.6,f|D|B7,4:58:59.41|6.24,14:32:35.66|-2.1,6.06,2000 +V1793|HD 31925|SD-16 1013|J045901.36-162233.6,f|D|F3,4:59:1.36|-121.61,-16:22:33.70|127.5,5.68,2000 +Aur Omega-4|V16207|HD 31647|BD+37 1005|HR 1592|J045915.40+375324.8,f|D|A1,4:59:15.41|46.29,37:53:24.88|-97.8,4.99,2000 +Cam 8|HD 31579|BD+52 906|PPM 29523|HR 1588|J045946.32+530919.6,f|S|K4,4:59:46.33|-13.22,53:9:19.62|-11.2,6.09,2000 +Eri 63|SD-10 1066|PPM 215131|J045950.45-101547.9,f|S|G4,4:59:50.45|19.48,-10:15:47.97|-136.8,5.39,2000 +Eri 64|S ERI|SD-12 1047|PPM 215134|HR 1611|J045955.73-123214.6,f|V|F0,4:59:55.74|40.41,-12:32:14.70|-86.9,4.78,2000 +SAO 256153|HD 33519|CP-78 165|PPM 368618|HR 1682|J050013.23-781800.0,f|D|K5,5:0:13.23|-18.52,-78:18:0.03|1,6.29,2000 +Aur 5|HD 31761|BD+39 1133|PPM 69817|HR 1599|J050018.33+392340.9,f|D|F5,5:0:18.34|-10.90,39:23:40.92|-1.2,5.98,2000 +BD+80 155|PPM 834|HR 1523|J050020.72+811138.7,f|S|K3,5:0:20.72|0.99,81:11:38.72|27.5,5.09,2000 +Aur 6|BD+39 1134|PPM 69818|J050023.21+393916.7,f|S|K4,5:0:23.22|0.81,39:39:16.75|-2.7,6.44,2000 +SAO 131684|HD 32115|SD-02 1095|PPM 175699|HR 1613|J050039.80-020357.7,f|S|A8,5:0:39.81|-12.89,-2:3:57.72|-3.1,6.31,2000 +V16219|SAO 131688|HD 32147|SD-05 1123|PPM 187577|HR 1614|J050049.00-054513.2,f|V|K3,5:0:49.00|550.71,-5:45:13.23|-1109.2,6.23,2000 +SAO 169981|SD-20 990|PPM 248333|HR 1621|J050125.58-200306.9,f|S|B9,5:1:25.58|36.64,-20:3:6.91|-15.5,4.90,2000 +Eri Psi-65|V16224|HD 32249|SD-07 948|PPM 187595|HR 1617|J050126.34-071026.2,f|V|B3,5:1:26.34|-0.30,-7:10:26.28|5.2,4.79,2000 +HD 32453|CD-39 1744|HR 1631|J050134.52-394304.9,f|S|G5,5:1:34.52|-4.38,-39:43:4.96|33.3,6.02,2000 +HD 31662|BD+60 853|HR 1593|J050136.04+610440.7,f|D|F4,5:1:36.04|16.39,61:4:40.79|-179.3,6.04,2000 +V1806|SAO 112334|HD 32263|BD+00 923|HR 1618|J050150.35+004319.6,f|V|K0,5:1:50.35|4.80,0:43:19.60|-22.8,5.91,2000 +Almaaz|Al Anz|Aur Epsilon-7A|Epsilon Aurigae|HD 31964|BD+43 1166|PPM 47627|J050158.13+434923.9,f|D|F0,5:1:58.13|0.22,43:49:23.91|-2.3,3.03,2000 +SAO 169997|HD 32436|CD-26 1975|PPM 248347|HR 1628|J050209.82-261630.1,f|S|K1,5:2:9.82|85.81,-26:16:30.11|-76.6,5.01,2000 +V16208|HD 31312|BD+74 229|HR 1572|J050219.81+741609.7,f|V|K5,5:2:19.81|11.83,74:16:9.72|40.8,6.05,2000 +HD 32515|CD-31 2163|HR 1635|J050222.80-314616.7,f|S|G8,5:2:22.80|-6.50,-31:46:16.80|85.3,5.92,2000 +Sadatoni|Haedi|Hoedus I|Haedus|Saclateni|Aur Zeta-8|Zeta Aurigae|BD+40 1142|PPM 47641|HR 1612|J050228.68+410433.0,f|S|K4,5:2:28.69|8.93,41:4:33.02|-21.4,3.76,2000 +Men Beta|SAO 256154|HD 33285|CP-71 309|PPM 368632|HR 1677|J050242.99-711851.4,f|S|G8,5:2:43.00|-3.56,-71:18:51.48|10.7,5.30,2000 +Lep 1|CD-22 1960|PPM 248369|HR 1634|J050244.98-224742.1,f|S|K1,5:2:44.98|61.26,-22:47:42.19|14.6,5.74,2000 +SAO 131715|HD 32393|SD-04 1019|PPM 187623|HR 1625|J050245.39-041236.4,f|S|K0,5:2:45.39|42.19,-4:12:36.43|2,5.86,2000 +Pic Eta1|HD 32743|CD-49 1541|HR 1649|J050248.68-490905.0,f|D|F2,5:2:48.69|-43.95,-49:9:5.07|27.2,5.38,2000 +HD 31675|BD+66 370|PPM 15115|HR 1594|J050250.43+664922.7,f|S|F5,5:2:50.44|67.60,66:49:22.71|-335.2,6.20,2000 +Tau Iota-102|BD+21 751|J050305.74+213523.8,f|S|A7,5:3:5.75|68.90,21:35:23.86|-40.8,4.62,2000 +V1810|HD 32188|BD+41 1044|PPM 47658|HR 1615|J050318.63+412629.9,f|V|A2,5:3:18.64|-1.12,41:26:29.93|-2.9,6.12,2000 +Cam Beta-10A|V16223|BD+60 856|J050325.09+602632.0,f|D|G1,5:3:25.09|-6.14,60:26:32.08|-14.8,4.03,2000 +HD 32612|SD-14 1027|PPM 215219|J050352.12-142212.8,f|S|B2,5:3:52.12|1.31,-14:22:12.83|3.1,6.42,2000 +HD 32667|CD-24 2795|PPM 248396|HR 1645|J050353.27-242317.3,f|S|A3,5:3:53.27|25.68,-24:23:17.34|-38.4,5.59,2000 +SAO 217153|CD-41 1690|HR 1651|J050353.95-414441.8,f|S|F8,5:3:53.95|22.83,-41:44:41.82|159.2,6.32,2000 +V16217|HD 31563|BD+73 264|HR 1587|J050412.79+734549.9,f|V|K0,5:4:12.80|14.18,73:45:49.99|-18.8,6.22,2000 +BD+30 772|PPM 69883|HR 1626|J050414.56+302940.5,f|S|K0,5:4:14.57|12.02,30:29:40.52|-13.2,6.17,2000 +HD 32482|BD+21 755|HR 1633|J050421.58+211640.5,f|S|K0,5:4:21.59|15.24,21:16:40.55|-25.2,6.19,2000 +Cae Gamma1|SAO 195532|HD 32831|CD-35 2089|HR 1652|J050424.40-352858.7,f|D|K3,5:4:24.40|126.17,-35:28:58.72|-44.4,4.57,2000 +Cae Gamma2|X CAE|SAO 195534|HD 32846|CD-35 2090|HR 1653|J050426.15-354218.3,f|V|F1,5:4:26.16|28.50,-35:42:18.39|40.6,6.33,2000 +Ori 11|V1032 ORI|HD 32549|BD+15 732|HR 1638|J050434.14+152414.7,f|V|A0,5:4:34.15|18.37,15:24:14.78|-31,4.67,2000 +BD+73 265|PPM 5824|HR 1589|J050439.66+740401.0,f|D|A1,5:4:39.67|7.04,74:4:1.04|-15.9,6.10,2000 +SAO 131742|HD 32686|SD-03 998|PPM 187671|HR 1646|J050454.52-030222.8,f|S|B5,5:4:54.53|1.65,-3:2:22.83|-1,6.04,2000 +Pic Eta2|V1827|SAO 217164|CD-49 1562|HR 1663|J050458.01-493440.2,f|V|K5,5:4:58.01|68.76,-49:34:40.22|-3,5.04,2000 +V16242|SAO 233814|HD 33116|CP-54 768|HR 1667|J050500.60-542426.6,f|V|M2,5:5:0.61|0.00,-54:24:26.64|6.5,6.27,2000 +CD-26 2005|PPM 248422|HR 1655|J050516.19-260908.6,f|S|K2,5:5:16.20|10.50,-26:9:8.61|-62.1,5.71,2000 +W ORI|HD 32736|BD+00 939|PPM 148421|HR 1648|J050523.71+011039.4,f|V|C5,5:5:23.72|3.90,1:10:39.46|-3.8,5.87,2000 +Lep Epsilon-2|V1826|HD 32887|SD-22 1000|PPM 248426|HR 1654|J050527.66-222215.7,f|V|K5,5:5:27.66|19.28,-22:22:15.72|-72.4,3.18,2000 +Dor Zeta|SAO 233822|HD 33262|CP-57 735|HR 1674|J050530.65-572821.7,f|S|F7,5:5:30.66|-31.86,-57:28:21.73|117.4,4.71,2000 +BD+35 973|PPM 69911|HR 1639|J050600.92+355610.9,f|S|A5,5:6:0.92|-17.00,35:56:10.96|-13,6.50,2000 +Cam 11A|BV CAM|HD 32343|BD+58 804|HR 1622|J050608.45+585820.5,f|D|B2,5:6:8.45|-6.19,58:58:20.54|-7.7,5.23,2000 +HD 33875|CP-73 286|PPM 368651|J050609.29-730215.6,f|S|A1,5:6:9.30|17.46,-73:2:15.62|62.3,6.27,2000 +Cam 12B|BM CAM|HD 32357|BD+58 805|HR 1623|J050612.13+590116.8,f|D|K0,5:6:12.14|-1.85,59:1:16.82|-26.2,6.11,2000 +HD 32356|BD+60 857|HR 1624|J050629.70+611011.1,f|S|K5,5:6:29.71|41.95,61:10:11.12|-75.9,6.00,2000 +Aur Eta-10|V1822|BD+41 1058|Hoedus II|PPM 47723|HR 1641|J050630.89+411404.1,f|V|B3,5:6:30.89|30.57,41:14:4.11|-68.4,3.17,2000 +HD 32996|SD-13 1063|PPM 215294|HR 1661|J050636.74-130721.4,f|S|A0,5:6:36.74|20.16,-13:7:21.44|14.8,6.05,2000 +Aur 9A|V0398 AUR|HD 32537|BD+51 1024|PPM 29613|HR 1637|J050640.63+513551.7,f|D|F0,5:6:40.63|-29.35,51:35:51.79|-174,4.98,2000 +Eri 66|EN ERI|SAO 131777|HD 32964|SD-04 1044|PPM 187715|HR 1657|J050645.65-043918.5,f|D|B9,5:6:45.65|10.02,-4:39:18.59|0,5.10,2000 +HD 32655|BD+42 1170|PPM 47726|HR 1644|J050649.55+431028.9,f|S|F2,5:6:49.56|-3.94,43:10:28.94|-1.6,6.21,2000 +SD-19 1102|J050709.75-192330.7,f|D|G0,5:7:9.75|-41.74,-19:23:30.73|269.7,6.46,2000 +V16248|SD-12 1076|PPM 215314|HR 1665|J050724.96-122928.5,f|V|F7,5:7:24.96|136.05,-12:29:28.57|-107.1,5.96,2000 +Tau 104A|HD 32923|BD+18 779|HR 1656|J050727.00+183842.1,f|D|G4,5:7:27.01|536.11,18:38:42.19|18.5,4.92,2000 +WZ DOR|SAO 249198|HD 33684|CP-63 420|PPM 354554|HR 1695|J050734.02-632358.8,f|V|M3,5:7:34.03|12.56,-63:23:58.84|-44.7,5.21,2000 +Ori 13A|SAO 112436|BD+09 736|PPM 148478|HR 1662|J050738.31+092818.4,f|D|G1,5:7:38.31|-5.62,9:28:18.41|-382.4,6.17,2000 +Tau 106|HD 32977|BD+20 885|HR 1658|J050748.39+202506.1,f|S|A5,5:7:48.40|-49.06,20:25:6.16|-31.3,5.29,2000 +V1842|HD 33162|SD-12 1080|PPM 215324|J050749.80-123533.5,f|V|M1,5:7:49.81|-21.96,-12:35:33.57|-88.9,6.33,2000 +Cursa|Dhalim|Kursa|Eri Beta-67|V1841|SAO 131794|HD 33111|SD-05 1162|PPM 187729|HR 1666|J050750.98-050511.2,f|D|A3,5:7:50.99|-83.37,-5:5:11.21|-75.4,2.79,2000 +Ori 14|BD+08 866|PPM 148485|HR 1664|J050752.89+082954.3,f|D|F0,5:7:52.89|35.01,8:29:54.34|-59.5,5.35,2000 +Tau 105A|V1155 TAU|HD 32991|BD+21 766|J050755.43+214217.3,f|D|B2,5:7:55.44|1.81,21:42:17.36|-6.2,5.84,2000 +Tau 103A|BD+24 755|HR 1659|J050806.62+241554.6,f|D|B2,5:8:6.62|1.78,24:15:54.63|-5.3,5.51,2000 +HD 33238|SD-15 950|PPM 215331|J050813.25-150543.2,f|S|K1,5:8:13.26|-1.88,-15:5:43.27|1.9,6.40,2000 +V16251|HD 33224|SD-08 1037|PPM 187737|HR 1671|J050820.19-083955.1,f|D|B8,5:8:20.19|3.71,-8:39:55.17|-20.8,5.81,2000 +Eri 68|SAO 131813|HD 33256|SD-04 1056|PPM 187747|HR 1673|J050843.69-042722.3,f|S|F2,5:8:43.70|55.63,-4:27:22.35|16,5.12,2000 +HD 33121|BD+19 853|J050850.43+195135.4,f|S|G5,5:8:50.43|6.21,19:51:35.50|-13.9,6.50,2000 +Eri Lambda-69|Lambda Eridani|SAO 131824|HD 33328|SD-08 1040|PPM 187755|HR 1679|J050908.78-084514.6,f|S|B2,5:9:8.78|0.00,-8:45:14.69|-2,4.26,2000 +Ori 16A|V1849|SAO 112467|HD 33254|BD+09 743|PPM 148524|HR 1672|J050919.64+094946.4,f|D|A2,5:9:19.64|63.55,9:49:46.48|-7.9,5.43,2000 +HD 32518|BD+69 302|PPM 15168|HR 1636|J050936.71+693821.8,f|S|K1,5:9:36.72|60.43,69:38:21.84|-63.6,6.43,2000 +Ori 15|HD 33276|BD+15 752|HR 1676|J050941.95+153550.0,f|D|F2,5:9:41.96|-7.08,15:35:50.04|-16.1,4.82,2000 +HD 32715|BD+64 500|PPM 15171|HR 1647|J050944.50+645510.1,f|S|F6,5:9:44.51|-16.72,64:55:10.17|-182.2,6.36,2000 +V1156 TAU|BD+27 732A|PPM 94124|J050945.09+280149.6,f|D|A5,5:9:45.09|55.87,28:1:49.66|-60.6,6.02,2000 +SAO 131834|HD 33419|BD-00 867|PPM 175748|HR 1681|J051003.26-003355.1,f|S|K0,5:10:3.26|2.10,-0:33:55.16|-50.8,6.11,2000 +BD+37 1067|PPM 69993|HR 1669|J051018.80+371806.6,f|D|K3,5:10:18.81|2.62,37:18:6.67|1.1,6.46,2000 +HD 33167|BD+46 970|PPM 47798|HR 1668|J051042.91+465743.4,f|S|F5,5:10:42.92|57.33,46:57:43.45|-150.2,5.68,2000 +HD 33667|CD-26 2045|PPM 248543|HR 1694|J051044.59-255437.6,f|S|K1,5:10:44.59|-1.48,-25:54:37.66|26.5,6.40,2000 +SAO 131847|HD 33555|SD-02 1161|PPM 175755|HR 1685|J051058.02-021514.8,f|S|K1,5:10:58.02|85.58,-2:15:14.81|-150.5,6.24,2000 +SAO 131852|SD-02 1165|PPM 187787|HR 1687|J051119.17-022926.8,f|S|F5,5:11:19.18|81.52,-2:29:26.82|1.4,5.90,2000 +RX LEP|HD 33664|SD-12 1092|PPM 215397|HR 1693|J051122.87-115056.7,f|V|M6,5:11:22.87|31.71,-11:50:56.72|56.9,5.69,2000 +V16257|HD 33463|BD+29 833|PPM 94163|J051138.31+295412.8,f|V|M2,5:11:38.31|7.67,29:54:12.89|-23.1,6.43,2000 +HD 33554|BD+15 759|HR 1684|J051141.56+160244.4,f|S|K5,5:11:41.56|3.46,16:2:44.42|6.3,5.17,2000 +HD 33646|BD+00 975|PPM 148581|HR 1691|J051145.35+010213.2,f|D|G5,5:11:45.35|0.90,1:2:13.30|-11.1,6.03,2000 +Lep Iota-3|SD-12 1095|PPM 215426|HR 1696|J051217.90-115209.1,f|D|B8,5:12:17.90|24.95,-11:52:9.19|-31.2,4.47,2000 +BN CAM|BD+73 274|PPM 5879|HR 1643|J051222.45+735648.0,f|V|B9,5:12:22.46|4.31,73:56:48.03|-28.8,5.44,2000 +SAO 131873|HD 33833|SD-06 1109|HR 1697|J051248.12-060325.8,f|S|G7,5:12:48.13|21.93,-6:3:25.89|-31.5,5.90,2000 +Lep Mu-5|Mu Leporis|SD-16 1072|PPM 215444|J051255.90-161219.6,f|S|B9,5:12:55.90|45.66,-16:12:19.69|-16.1,3.29,2000 +HD 33266|BD+61 766|HR 1675|J051302.81+615100.1,f|S|A2,5:13:2.81|-12.17,61:51:0.14|1.8,6.17,2000 +Lep Kappa-4|V16265|HD 33949|SD-13 1092|J051313.87-125628.6,f|D|B9,5:13:13.88|-12.28,-12:56:28.65|-1.3,4.43,2000 +HD 33632|BD+37 1091|J051317.44+372014.3,f|D|F6,5:13:17.45|-144.78,37:20:14.31|-135.1,6.48,2000 +Ori Rho-17A|V1872|SAO 112528|HD 33856|BD+02 888|PPM 148614|HR 1698|J051317.48+025140.5,f|D|K1,5:13:17.48|3.00,2:51:40.56|4.9,4.48,2000 +Aur Mu-11|HD 33641|BD+38 1063|HR 1689|J051325.71+382904.1,f|S|A4,5:13:25.72|-18.67,38:29:4.19|-72.4,4.83,2000 +Cam 14|HD 33296|BD+62 734|HR 1678|J051331.24+624128.0,f|S|A7,5:13:31.24|-37.37,62:41:28.07|0.8,6.49,2000 +SAO 112535|HD 33883|BD+01 938|PPM 148621|J051331.55+015803.6,f|D|F7,5:13:31.56|6.00,1:58:3.66|-0.1,6.11,2000 +SAO 131887|HD 33948|SD-08 1059|PPM 187818|J051333.27-080851.9,f|S|B5,5:13:33.28|-3.56,-8:8:51.95|-1.3,6.37,2000 +Dor Theta|SAO 249225|HD 34649|CP-67 401|PPM 354621|HR 1744|J051345.45-671106.9,f|S|K2,5:13:45.45|18.20,-67:11:6.92|39,4.80,2000 +V1874|SAO 112543|HD 33946|BD+00 988|PPM 148634|J051347.25+003337.5,f|V|M0,5:13:47.25|9.15,0:33:37.52|-17.7,6.33,2000 +SAO 233886|HD 34347|CP-52 677|PPM 334166|HR 1727|J051353.33-520150.7,f|S|K3,5:13:53.33|0.18,-52:1:50.72|-14,6.03,2000 +SD-14 1074|PPM 215471|J051359.94-143624.7,f|S|F2,5:13:59.95|11.47,-14:36:24.74|-1.8,6.23,2000 +SAO 195683|HD 34266|CD-36 2127|PPM 281218|HR 1721|J051428.84-355837.1,f|S|G8,5:14:28.85|11.29,-35:58:37.19|14.2,5.74,2000 +Rigel|Algebar|Elgebar|Ori Beta-19A|Beta Orionis|SD-08 1063|PPM 187839|HR 1713|J051432.27-081205.9,f|D|B8,5:14:32.27|1.93,-8:12:5.91|-0.6,0.28,2000 +HD 32781|BD+76 190|J051435.52+762821.9,f|D|A0,5:14:35.52|-8.60,76:28:21.94|-3.3,6.39,2000 +V1880|SAO 112556|BD+04 877|PPM 148653|J051444.04+050922.1,f|V|K5,5:14:44.05|-7.02,5:9:22.14|8.7,5.49,2000 +HD 33654|BD+53 872|HR 1692|J051444.27+531250.2,f|S|A0,5:14:44.27|-1.89,53:12:50.22|0.3,6.16,2000 +HD 33618|BD+59 857|HR 1688|J051511.40+592420.4,f|S|K2,5:15:11.40|20.15,59:24:20.47|-12.8,6.14,2000 +SAO 131917|BD-01 837|PPM 175774|HR 1717|J051518.50-012432.5,f|S|F0,5:15:18.50|-35.54,-1:24:32.54|8.8,6.15,2000 +CD-27 2161|HR 1723|J051524.37-265636.6,f|S|B9,5:15:24.37|10.83,-26:56:36.63|-29.4,5.06,2000 +Aur 14A|KW AUR|HD 33959|BD+32 922|J051524.39+324115.3,f|D|Am,5:15:24.39|-27.02,32:41:15.36|12.5,4.99,2000 +SAO 256172|HD 35184|CP-73 294|J051524.83-733518.5,f|S|A6,5:15:24.84|-22.29,-73:35:18.51|5.9,6.50,2000 +Tau 108|BD+22 864|HR 1711|J051527.65+221705.4,f|D|A2,5:15:27.65|-9.99,22:17:5.49|-6.6,6.27,2000 +SAO 233895|HD 34587|CP-52 683|PPM 334185|HR 1742|J051538.81-521055.8,f|S|K2,5:15:38.81|14.53,-52:10:55.84|21.1,6.45,2000 +Ori 18|BD+11 756|HR 1718|J051604.13+112028.8,f|S|A0,5:16:4.13|-8.53,11:20:28.87|-6.5,5.53,2000 +HD 34318|SD-11 1117|PPM 215518|J051610.55-112109.1,f|D|G8,5:16:10.56|-0.29,-11:21:9.19|4.5,6.46,2000 +AE AUR|BD+34 980|HR 1712|J051618.14+341844.3,f|D|O9,5:16:18.15|-4.09,34:18:44.34|43.2,6.00,2000 +V16276|SAO 112588|HD 34317|BD+01 957|HR 1724|J051641.04+015650.3,f|V|A0,5:16:41.04|-10.79,1:56:50.38|-6.6,6.41,2000 +Capella|Alhajoth|Aur Alpha-13A|V1897|BD+45 1077|PPM 47925|J051641.35+455952.7,f|D|G8,5:16:41.36|75.55,45:59:52.77|-427.1,0.08,2000 +Col Omicron|SAO 195721|HD 34642|CD-35 2214|PPM 281278|HR 1743|J051729.09-345342.7,f|S|K0,5:17:29.09|93.75,-34:53:42.75|-336.5,4.82,2000 +Ori Tau-20A|SAO 131952|SD-07 1028|HR 1735|J051736.38-065039.8,f|D|B5,5:17:36.39|-15.34,-6:50:39.87|-9.6,3.60,2000 +V1913|HD 34538|SD-13 1116|PPM 215549|HR 1737|J051740.24-133111.3,f|V|A5,5:17:40.24|-7.58,-13:31:11.37|-48.5,5.49,2000 +Aur 16|V1909|HD 34334|BD+33 1000|HR 1726|J051810.56+332217.8,f|D|K2,5:18:10.57|29.81,33:22:17.81|-161,4.54,2000 +HD 33541|BD+73 280|HR 1683|J051813.23+731605.0,f|S|A0,5:18:13.24|-7.95,73:16:5.06|-26.8,5.82,2000 +PU AUR|HD 34269|BD+42 1239|PPM 47955|HR 1722|J051815.69+424731.6,f|V|M4,5:18:15.70|18.16,42:47:31.60|-30.5,5.64,2000 +Aur 17|AR AUR|HD 34364|BD+33 1002|HR 1728|J051818.89+334602.4,f|V|B9,5:18:18.90|15.09,33:46:2.45|-29.1,6.15,2000 +HD 34332|BD+40 1240|PPM 47964|HR 1725|J051840.32+402754.4,f|S|K0,5:18:40.33|3.54,40:27:54.45|-13.7,6.19,2000 +HD 34721|SD-18 1051|PPM 215575|HR 1747|J051850.47-180748.1,f|D|G0,5:18:50.47|385.04,-18:7:48.18|61.3,5.96,2000 +IQ AUR|HD 34452|BD+33 1008|HR 1732|J051900.02+334454.2,f|V|A0,5:19:0.03|13.59,33:44:54.22|-29.6,5.38,2000 +Aur Lambda-15A|HD 34411|BD+39 1248|PPM 47977|HR 1729|J051908.47+400556.5,f|D|G1,5:19:8.47|519.31,40:5:56.59|-664.7,4.69,2000 +Ori 21|V1922|SAO 112624|HD 34658|BD+02 916|PPM 148749|HR 1746|J051911.21+023544.9,f|V|F5,5:19:11.22|-18.13,2:35:44.90|-53.3,5.34,2000 +HD 34579|BD+19 893|PPM 94261|HR 1741|J051914.69+200804.5,f|D|G8,5:19:14.69|-34.08,20:8:4.55|-26.5,6.10,2000 +Tau 109|HD 34559|BD+21 816|PPM 94262|HR 1739|J051916.60+220547.3,f|S|G8,5:19:16.60|19.60,22:5:47.38|-81.1,4.95,2000 +YZ LEP|HD 34798|SD-18 1055|HR 1753|J051917.43-183111.7,f|D|B3,5:19:17.44|2.28,-18:31:11.71|9,6.35,2000 +Pic Zeta|SAO 233926|CD-50 1723|PPM 334234|HR 1767|J051922.13-503621.4,f|S|F7,5:19:22.13|23.04,-50:36:21.48|227.4,5.44,2000 +HD 34868|CD-27 2204|PPM 248751|HR 1758|J051923.68-272207.9,f|S|A0,5:19:23.68|-3.46,-27:22:7.98|-8.1,5.98,2000 +Aur 18|HD 34499|BD+33 1010|HR 1734|J051923.74+335907.5,f|D|A7,5:19:23.74|26.62,33:59:7.51|-4.3,6.49,2000 +Cam 15|DV CAM|HD 34233|BD+57 874|PPM 29748|HR 1719|J051927.85+580702.5,f|V|B5,5:19:27.86|6.26,58:7:2.51|-18.3,6.13,2000 +Lep Lambda-6|HD 34816|SD-13 1127|PPM 215598|HR 1756|J051934.52-131036.4,f|S|B0,5:19:34.52|-2.48,-13:10:36.44|-4.7,4.28,2000 +SAO 131983|HD 34748|BD-01 859|PPM 175797|HR 1748|J051935.28-012442.8,f|S|B1,5:19:35.28|2.10,-1:24:42.81|1.6,6.34,2000 +Lep Nu-7|HD 34863|SD-12 1132|HR 1757|J051959.02-121856.1,f|S|B7,5:19:59.02|-12.16,-12:18:56.11|8,5.29,2000 +Aur 19|V1925|HD 34578|BD+33 1013|J052000.92+335728.9,f|V|A5,5:20:0.92|0.00,33:57:28.99|-3.7,5.04,2000 +HD 34498|BD+44 1170|PPM 47996|HR 1733|J052002.31+442531.3,f|S|K0,5:20:2.32|0.21,44:25:31.38|-19.3,6.48,2000 +V16284|HD 34557|BD+40 1253|PPM 47999|HR 1738|J052014.66+410510.3,f|V|A3,5:20:14.67|-18.09,41:5:10.36|-52.2,5.47,2000 +SAO 195763|CD-34 2198|PPM 281333|HR 1766|J052020.70-344155.8,f|S|F2,5:20:20.71|4.44,-34:41:55.88|-2.3,6.35,2000 +HD 34255|BD+62 742|PPM 15258|J052022.61+623913.3,f|S|K4,5:20:22.61|-3.03,62:39:13.36|-2.3,5.63,2000 +SD-05 1225|PPM 187964|HR 1759|J052026.40-052203.1,f|D|B8,5:20:26.41|-4.18,-5:22:3.10|-4.7,6.42,2000 +V1940|HD 34968|SD-21 1135|PPM 248771|HR 1762|J052026.91-211423.1,f|D|A0,5:20:26.92|10.77,-21:14:23.15|-9.9,4.74,2000 +BD+66 385|PPM 15259|J052040.68+664448.7,f|S|G5,5:20:40.68|-7.58,66:44:48.76|24.3,6.41,2000 +SAO 112653|HD 34878|BD+02 924|PPM 148796|J052043.76+023241.2,f|S|G5,5:20:43.76|31.62,2:32:41.21|20.5,6.44,2000 +BD+19 902|HR 1755|J052056.61+194851.6,f|S|K0,5:20:56.61|-3.81,19:48:51.65|-9,6.20,2000 +HD 34762|BD+27 758|PPM 94294|J052059.33+275726.1,f|S|B9,5:20:59.33|-14.97,27:57:26.14|-14.6,6.36,2000 +BD+29 869|PPM 94297|HR 1752|J052112.68+293411.5,f|S|A1,5:21:12.69|-1.57,29:34:11.58|-0.2,5.66,2000 +AN COL|HD 35165|CD-34 2207|PPM 281348|HR 1772|J052116.86-342042.1,f|D|B5,5:21:16.86|0.62,-34:20:42.19|6.2,6.08,2000 +BD-00 929|HR 1764|J052131.84-002459.3,f|D|B3,5:21:31.84|-0.30,-0:24:59.37|1.2,5.66,2000 +SAO 112667|HD 34989|BD+08 933|PPM 148818|HR 1763|J052143.56+082542.8,f|S|B1,5:21:43.56|-2.23,8:25:42.80|-3,5.79,2000 +Ori 22|V16291|BD-00 930|HR 1765|J052145.74-002256.8,f|V|B2,5:21:45.75|0.45,-0:22:56.88|1.7,4.72,2000 +HD 35162|CD-24 3023A|PPM 248798|HR 1771|J052146.25-244622.7,f|D|G7,5:21:46.25|-20.57,-24:46:22.73|-13,5.06,2000 +Aur Rho-20|HD 34759|BD+41 1162|HR 1749|J052148.41+414816.4,f|S|B3,5:21:48.42|13.42,41:48:16.46|-37.4,5.21,2000 +HD 35137|SD-17 1098|PPM 215655|J052155.30-173613.0,f|S|K0,5:21:55.31|6.00,-17:36:13.07|6.3,6.47,2000 +Pic Kappa|SAO 233952|CP-56 840|J052222.14-560803.8,f|S|B8,5:22:22.15|-5.02,-56:8:3.84|21.8,6.10,2000 +HD 33564|BD+79 169|PPM 5936|HR 1686|J052233.53+791352.1,f|D|F6,5:22:33.53|-78.62,79:13:52.13|161.1,5.09,2000 +Ori 23A|V16294|SAO 112697|HD 35149|BD+03 871|PPM 148857|J052250.00+033240.0,f|D|B1,5:22:50.00|-1.95,3:32:40.03|1.8,4.98,2000 +BD+40 1268|J052250.31+410145.3,f|S|A3,5:22:50.31|-12.45,41:1:45.34|2.9,5.54,2000 +HD 35386|CD-26 2185|PPM 248826|HR 1785|J052311.99-264219.5,f|S|F6,5:23:11.99|21.57,-26:42:19.56|23,6.49,2000 +HD 35281|SD-08 1107|HR 1778|J052318.51-082456.1,f|D|B8,5:23:18.51|-1.78,-8:24:56.14|-2.9,6.15,2000 +Aur 22|BD+28 788|PPM 94324|HR 1768|J052322.87+285612.3,f|S|B9,5:23:22.87|14.57,28:56:12.34|-31.9,6.45,2000 +SW COL|HD 35515|CD-39 1940|PPM 281389|HR 1793|J052324.02-394042.3,f|V|M1,5:23:24.02|26.67,-39:40:42.32|5,5.75,2000 +Cam 16|HD 34787|BD+57 879|PPM 29792|HR 1751|J052327.84+573239.8,f|D|A0,5:23:27.84|14.97,57:32:39.82|-56,5.25,2000 +Lep 8|HD 35337|SD-14 1119|PPM 215692|HR 1783|J052330.15-135538.4,f|S|B2,5:23:30.16|1.02,-13:55:38.47|-0.9,5.24,2000 +HD 35242|BD+05 905|PPM 148872|HR 1777|J052331.06+051923.1,f|S|A2,5:23:31.07|-30.47,5:19:23.11|16.6,6.34,2000 +Tau 110|HD 35189|BD+16 765|HR 1774|J052337.70+164157.4,f|S|A2,5:23:37.71|-27.44,16:41:57.47|-21.9,6.10,2000 +V16300|HD 35299|BD-00 936|PPM 175816|HR 1781|J052342.30-000935.3,f|V|B1,5:23:42.31|1.20,-0:9:35.34|-2.1,5.69,2000 +HD 35317|BD-01 882|PPM 175818|HR 1782|J052351.32-005159.8,f|D|F7,5:23:51.33|-5.70,-0:51:59.84|1,6.13,2000 +Ori 29|HD 35369|SD-07 1064|HR 1784|J052356.82-074829.0,f|S|G8,5:23:56.83|-13.97,-7:48:29.03|-44.8,4.14,2000 +Tau 111A|V1119 TAU|HD 35296|BD+17 920|J052425.46+172300.7,f|D|F8,5:24:25.46|250.37,17:23:0.72|-7.4,5.00,2000 +SD-17 1117|PPM 215723|HR 1792|J052428.48-165832.8,f|S|A1,5:24:28.49|34.72,-16:58:32.81|-15.9,5.65,2000 +Ori Eta-28A|Eta Orionis|HD 35411|SD-02 1235|HR 1788|J052428.61-022349.7,f|D|B1,5:24:28.62|-0.60,-2:23:49.73|-3.2,3.39,2000 +Ori 27|V16301|BD-01 886|PPM 175819|HR 1787|J052428.90-005328.7,f|V|G9,5:24:28.91|-5.10,-0:53:28.78|140.2,5.07,2000 +SAO 112729|BD+02 947|HR 1786|J052436.10+022111.3,f|S|B4,5:24:36.10|-0.30,2:21:11.39|-1,6.32,2000 +HD 35238|BD+31 954|HR 1775|J052438.42+311326.0,f|S|K1,5:24:38.42|-30.27,31:13:26.08|-8.7,6.29,2000 +HD 35239|BD+31 955|HR 1776|J052438.51+310835.3,f|S|B9,5:24:38.52|-10.66,31:8:35.33|-6.2,5.94,2000 +Aur Sigma-21A|HD 35186|BD+37 1175|HR 1773|J052439.14+372307.2,f|D|K4,5:24:39.14|-0.24,37:23:7.24|-12.1,4.99,2000 +BD+36 1122|J052444.80+361159.8,f|S|K2,5:24:44.80|-0.24,36:11:59.80|-9,6.48,2000 +Ori Psi-25|V1086 ORI|SAO 112734|HD 35439|BD+01 1005|HR 1789|J052444.82+015047.2,f|V|B1,5:24:44.83|0.15,1:50:47.20|-0.6,4.89,2000 +Pic Theta|SAO 233965|CP-52 718|PPM 334321|HR 1818|J052446.28-521858.5,f|D|A0,5:24:46.28|-5.23,-52:18:58.51|-27.7,6.24,2000 +SAO 217325|HD 35765|CD-44 2036|HR 1813|J052455.57-441332.4,f|S|K1,5:24:55.58|-2.04,-44:13:32.46|8.6,6.08,2000 +V16288|BD+73 285|PPM 5949|J052459.41+734225.9,f|V|Ma,5:24:59.42|-8.16,73:42:25.91|-1,6.49,2000 +HD 35536|SD-10 1178|PPM 215733|HR 1799|J052501.74-101943.9,f|S|K5,5:25:1.74|3.10,-10:19:43.99|-17.1,5.59,2000 +Bellatrix|Amazon Star|Ori Gamma-24|V1972|HD 35468|BD+06 919|PPM 148916|J052507.86+062058.9,f|D|B2,5:25:7.86|-8.80,6:20:58.93|-13.3,1.66,2000 +HD 35575|BD-01 889|PPM 175822|J052536.49-012928.6,f|S|B3,5:25:36.50|1.50,-1:29:28.66|-0.5,6.43,2000 +V1975|SAO 112752|HD 35588|BD+00 1056|PPM 148931|J052547.01+003112.8,f|V|B2,5:25:47.02|2.40,0:31:12.88|0,6.16,2000 +HD 35736|SD-19 1173|HR 1812|J052559.82-194143.4,f|D|F2,5:25:59.83|3.39,-19:41:43.44|-19.1,5.82,2000 +SD-05 1247|J052602.36-053106.6,f|S|B9,5:26:2.36|7.47,-5:31:6.61|1.1,6.24,2000 +Tau 113|V16308|HD 35532|BD+16 775|HR 1798|J052605.72+164200.5,f|V|B2,5:26:5.72|0.29,16:42:0.58|-5.1,6.24,2000 +Alnath|El Nath|Nath|Tau Beta-112|HD 35497|BD+28 795|PPM 94361|HR 1791|J052617.51+283626.8,f|D|B7,5:26:17.51|23.31,28:36:26.82|-174.2,1.68,2000 +Dor Lambda|SAO 233981|HD 36189|CP-59 472|PPM 334348|HR 1836|J052619.26-585445.0,f|S|G6,5:26:19.27|-8.21,-58:54:45.07|32.2,5.13,2000 +SAO 112767|HD 35656|BD+06 923|PPM 148951|J052638.82+065207.1,f|S|A0,5:26:38.83|9.68,6:52:7.17|-32.5,6.41,2000 +BD+34 1040|HR 1795|J052648.80+342330.5,f|S|A0,5:26:48.80|-0.25,34:23:30.52|-7.3,5.93,2000 +Ori Psi-30A|Psi Orionis|SAO 112775|HD 35715|BD+02 962|HR 1811|J052650.22+030544.4,f|D|B2,5:26:50.23|0.30,3:5:44.43|-1.1,4.61,2000 +HD 35521|BD+33 1045|HR 1796|J052651.28+331544.1,f|S|K0,5:26:51.28|9.91,33:15:44.13|-12.1,6.17,2000 +HD 35519|BD+35 1102|HR 1794|J052654.31+352726.1,f|S|K7,5:26:54.32|-14.54,35:27:26.18|-12,6.15,2000 +SAO 249281|HD 36584|CP-68 375|PPM 354763|HR 1859|J052659.80-683721.1,f|D|F0,5:26:59.80|-10.83,-68:37:21.16|-19.8,6.09,2000 +V16310|SD-12 1169|PPM 215789|HR 1817|J052704.76-115403.4,f|V|F5,5:27:4.76|17.17,-11:54:3.47|-49.3,6.30,2000 +CD-41 1884|HR 1827|J052705.32-405636.6,f|D|A7,5:27:5.32|3.29,-40:56:36.63|108.5,5.86,2000 +BD+30 898|J052708.27+301230.9,f|S|B9,5:27:8.27|0.26,30:12:30.97|-4.5,5.73,2000 +Tau 115A|HD 35671|BD+17 928|J052710.09+175743.9,f|D|B5,5:27:10.09|7.85,17:57:43.98|-21.1,5.41,2000 +HD 35693|BD+15 822|J052713.89+151527.4,f|S|A1,5:27:13.89|-5.50,15:15:27.47|-10.1,6.18,2000 +SAO 112784|HD 35775|BD+02 965|PPM 148973|J052715.40+022028.3,f|S|K0,5:27:15.40|5.85,2:20:28.32|-2,6.37,2000 +HD 35991|SD-21 1174|PPM 248918|HR 1823|J052736.50-212232.5,f|S|G5,5:27:36.50|18.44,-21:22:32.57|32.2,6.07,2000 +Tau 114A|BD+21 847|J052738.08+215613.0,f|D|B2,5:27:38.09|1.81,21:56:13.07|-7,4.88,2000 +Aur Phi-24A|BD+34 1048|J052738.88+342833.2,f|D|K3,5:27:38.89|-1.48,34:28:33.21|-38.8,5.06,2000 +Tau 116|BD+15 826|HR 1814|J052745.60+155226.5,f|S|B9,5:27:45.61|4.33,15:52:26.59|-21.3,5.52,2000 +HD 35681|BD+33 1053|J052800.93+334549.3,f|D|F5,5:28:0.94|20.08,33:45:49.33|-209.3,6.41,2000 +SAO 112794|HD 35912|BD+01 1021|PPM 148989|J052801.47+011753.7,f|S|B2,5:28:1.47|-0.30,1:17:53.70|1.1,6.40,2000 +Tau 117|V16312|BD+17 931|HR 1816|J052801.61+171420.8,f|V|M1,5:28:1.61|16.48,17:14:20.87|-46.2,5.77,2000 +Nihal|Nibal|Lep Beta-9A|SD-20 1096|PPM 248938|HR 1829|J052814.72-204533.9,f|D|G5,5:28:14.72|-5.05,-20:45:33.99|-85.9,2.84,2000 +SAO 195887|HD 36187|CD-37 2220|PPM 281495|HR 1835|J052815.33-371350.7,f|S|A1,5:28:15.34|11.94,-37:13:50.76|67.8,5.57,2000 +BD+13 903|HR 1819|J052834.77+134044.3,f|S|A4,5:28:34.77|10.35,13:40:44.33|-15.1,6.35,2000 +SAO 132157|SD-03 1115|HR 1826|J052856.91-031826.7,f|D|A0,5:28:56.91|-3.29,-3:18:26.70|-7,6.39,2000 +Tau 118A|V2009|HD 35943|BD+25 839A|HR 1821|J052916.50+250900.7,f|D|B8,5:29:16.50|11.41,25:9:0.78|-37.4,5.85,2000 +V2022|HD 36134|SD-03 1116|PPM 188111|J052923.68-032647.0,f|V|K1,5:29:23.69|-28.00,-3:26:47.02|-9.5,5.80,2000 +HD 35984|BD+29 909|HR 1822|J052940.65+291111.2,f|S|F6,5:29:40.65|28.94,29:11:11.27|-46.9,6.20,2000 +V16319|SAO 132175|BD-00 970|PPM 175865|J052941.62-004809.0,f|D|A8,5:29:41.62|48.30,-0:48:9.04|-39.2,6.50,2000 +Ori 31|CI ORI|SAO 132176|HD 36167|BD-01 913|PPM 175866|HR 1834|J052943.98-010532.0,f|D|K5,5:29:43.98|0.15,-1:5:32.06|-26.1,4.70,2000 +HD 36166|BD+01 1032|HR 1833|J052954.77+014721.3,f|S|B2,5:29:54.77|1.65,1:47:21.34|-0.3,5.76,2000 +SAO 217368|HD 36553|CD-47 1884|HR 1856|J053009.47-470439.5,f|D|G3,5:30:9.48|20.84,-47:4:39.56|-131.9,5.46,2000 +Cam 17|V2003|HD 35583|BD+62 759|PPM 15329|J053010.20+630401.9,f|V|M1,5:30:10.20|-5.91,63:4:1.99|-4.8,5.44,2000 +TZ MEN|SAO 258418|CP-84 75|PPM 376559|J053013.88-844706.3,f|V|B9,5:30:13.89|-6.84,-84:47:6.37|44.3,6.19,2000 +SAO 249297|HD 36876|CP-64 452|PPM 354799|HR 1882|J053015.87-635539.6,f|D|F0,5:30:15.87|4.42,-63:55:39.67|59.3,6.20,2000 +CK ORI|SAO 112837|HD 36217|BD+04 949|HR 1837|J053019.92+041217.2,f|V|K2,5:30:19.92|17.35,4:12:17.26|-25.3,6.20,2000 +SAO 132192|HD 36285|SD-07 1099|PPM 188125|J053020.75-072605.3,f|S|B2,5:30:20.75|0.59,-7:26:5.32|0.2,6.33,2000 +HD 36162|BD+15 837|HR 1832|J053026.16+152137.6,f|S|A3,5:30:26.17|-13.45,15:21:37.62|-38.6,5.94,2000 +BD+22 925|PPM 94431|HR 1831|J053043.34+222744.1,f|S|K0,5:30:43.35|42.83,22:27:44.12|-20.5,6.29,2000 +BD+39 1322|HR 1825|J053045.08+394933.2,f|D|G9,5:30:45.08|23.39,39:49:33.30|-35.6,6.37,2000 +Ori 32|SAO 112849|HD 36267|BD+05 939|HR 1839|J053047.05+055653.3,f|D|B5,5:30:47.05|6.56,5:56:53.30|-32.5,4.23,2000 +BD+41 1206|PPM 48174|HR 1824|J053048.65+412743.1,f|S|K0,5:30:48.65|2.02,41:27:43.18|-34.4,5.99,2000 +Lep 10|HD 36473|SD-20 1105|HR 1849|J053107.62-205149.1,f|S|A0,5:31:7.63|5.05,-20:51:49.17|-43,5.54,2000 +Col Epsilon|SAO 195924|HD 36597|CD-35 2348|PPM 281547|HR 1862|J053112.75-352813.8,f|S|K1,5:31:12.76|28.34,-35:28:13.87|-34.1,3.87,2000 +Ori 33A|SAO 112861|HD 36351|BD+03 948|HR 1842|J053114.53+031731.6,f|D|B1,5:31:14.53|1.35,3:17:31.68|-0.9,5.46,2000 +SD-06 1207|PPM 188141|HR 1848|J053120.89-064230.1,f|S|B2,5:31:20.89|1.64,-6:42:30.16|1.1,6.21,2000 +SAO 217382|HD 36734|CD-46 1892|J053136.00-455531.1,f|S|K3,5:31:36.00|18.57,-45:55:31.14|36.1,5.85,2000 +HD 32196|BD+85 74|PPM 915|HR 1616|J053148.14+855618.7,f|S|A5,5:31:48.14|17.26,85:56:18.70|-76.9,6.50,2000 +Men Gamma|HD 37763|CP-76 333|PPM 368822|HR 1953|J053153.01-762027.4,f|D|K2,5:31:53.02|143.17,-76:20:27.47|287.7,5.18,2000 +Thabit|Ori Upsilon-36|V16333|SAO 132222|HD 36512|SD-07 1106|PPM 188149|HR 1855|J053155.86-071805.5,f|V|B0,5:31:55.86|-0.60,-7:18:5.53|-4.4,4.61,2000 +Mintaka|SAO 132220|Mintika|Ori Delta-34A|Delta Orionis|HD 36486|BD-00 983|PPM 175888|HR 1852|J053200.39-001756.6,f|D|O9,5:32:0.40|1.65,-0:17:56.69|0.6,2.23,2000 +Tau 119|CE TAU|HD 36389|BD+18 875|HR 1845|J053212.75+183539.2,f|V|M2,5:32:12.75|-0.28,18:35:39.24|-4.5,4.36,2000 +V16329|BD+16 794A|HR 1847|J053214.14+170329.2,f|D|B7,5:32:14.14|-4.30,17:3:29.26|-10.9,6.06,2000 +BD+16 794B|J053214.56+170321.7,f|D|B9,5:32:14.57|-4.30,17:3:21.77|-10.9,6.46,2000 +Cam 18|V2058|BD+57 889|PPM 29884|HR 1828|J053233.80+571315.8,f|V|F8,5:32:33.80|112.07,57:13:15.86|-224.6,6.46,2000 +SAO 132233|HD 36558|BD-00 986|PPM 149111|J053237.97+000042.9,f|S|K5,5:32:37.98|18.90,0:0:42.96|-12.1,6.18,2000 +SAO 132234|HD 36591|BD-01 935|PPM 175892|HR 1861|J053241.35-013530.5,f|D|B1,5:32:41.35|-2.10,-1:35:30.59|0.7,5.34,2000 +Aur Chi-25|V16332|HD 36371|BD+32 1024|HR 1843|J053243.67+321131.2,f|V|B5,5:32:43.67|-1.78,32:11:31.28|-4,4.74,2000 +Arneb|Lep Alpha-11A|HD 36673|SD-17 1166|PPM 215925|HR 1865|J053243.81-174920.2,f|D|F0,5:32:43.82|3.28,-17:49:20.24|1.5,2.59,2000 +SAO 195948|HD 36848|CD-38 2085|PPM 281583|HR 1877|J053251.41-383048.1,f|S|K2,5:32:51.41|50.47,-38:30:48.14|-10.6,5.45,2000 +HD 37297|CP-64 456|PPM 354831|HR 1917|J053259.56-641339.0,f|S|G8,5:32:59.57|33.13,-64:13:39.06|-1.3,5.34,2000 +SAO 195952|HD 36874|CD-35 2367|HR 1881|J053307.38-350821.7,f|S|K0,5:33:7.39|99.97,-35:8:21.75|-28.1,5.76,2000 +HD 36484|BD+32 1028|J053327.40+324804.2,f|S|A2,5:33:27.40|-4.41,32:48:4.25|-57.4,6.47,2000 +VV ORI|SAO 132255|HD 36695|BD-01 943|HR 1868|J053331.44-010921.8,f|V|B1,5:33:31.45|-0.60,-1:9:21.86|-0.5,5.36,2000 +Tau 120|V0960 TAU|HD 36576|BD+18 877|HR 1858|J053331.62+183224.8,f|V|B2,5:33:31.63|0.14,18:32:24.83|0,5.67,2000 +Dor Beta|Beta Doradus|SAO 249311|CP-62 487|PPM 354837|HR 1922|J053337.51-622923.3,f|S|F6,5:33:37.52|1.04,-62:29:23.37|12.6,3.76,2000 +HD 36499|BD+34 1083|HR 1854|J053338.21+344332.0,f|S|A3,5:33:38.21|-14.55,34:43:32.05|-14.1,6.28,2000 +HD 36589|BD+20 989|PPM 94484|J053338.83+202827.1,f|S|B6,5:33:38.84|2.95,20:28:27.18|-7.5,6.19,2000 +HD 37226|CP-54 854|PPM 334437|HR 1912|J053344.36-545408.2,f|D|F8,5:33:44.36|65.98,-54:54:8.24|10.4,6.43,2000 +Ori 35|HD 36653|BD+14 947|HR 1864|J053354.28+141820.0,f|S|B3,5:33:54.28|-2.03,14:18:20.08|-5.7,5.60,2000 +SAO 132271|HD 36814|SD-07 1119|PPM 188183|J053402.47-070125.5,f|S|K0,5:34:2.47|-12.36,-7:1:25.50|-40.5,6.45,2000 +SAO 132269|HD 36779|BD-01 949|PPM 175913|HR 1873|J053403.89-010208.6,f|D|B2,5:34:3.89|3.00,-1:2:8.62|-2.9,6.24,2000 +BD-01 950|PPM 175914|HR 1874|J053404.04-012812.9,f|S|K5,5:34:4.05|-13.95,-1:28:12.91|-20,5.91,2000 +Ori 38|HD 36777|BD+03 964|PPM 149141|HR 1872|J053416.77+034600.8,f|S|A2,5:34:16.77|-29.34,3:46:0.82|-15.8,5.33,2000 +SAO 132277|BD-00 1000|PPM 175922|J053429.28-000044.4,f|S|G5,5:34:29.29|-4.50,-0:0:44.44|-3.2,6.27,2000 +WX MEN|HD 37993|CP-73 316|PPM 368845|HR 1964|J053444.78-734428.5,f|V|M3,5:34:44.78|0.04,-73:44:28.60|37.1,5.84,2000 +Ori Phi-37|SAO 112914|HD 36822|BD+09 877|PPM 149155|HR 1876|J053449.23+092922.4,f|D|B0,5:34:49.24|-1.18,9:29:22.48|-2.5,4.41,2000 +SAO 249314|CP-61 488|HR 1936|J053457.43-611033.7,f|S|G5,5:34:57.43|-7.45,-61:10:33.77|-26.7,6.32,2000 +SAO 132298|HD 36959|SD-06 1233|HR 1886|J053501.00-060033.3,f|D|B1,5:35:1.01|1.04,-6:0:33.37|-0.3,5.64,2000 +SD-06 1234|HR 1887|J053502.68-060007.2,f|D|B0,5:35:2.68|0.60,-6:0:7.30|0.7,4.76,2000 +Meissa|Heka|Ori Lambda-39A|SAO 112921|HD 36861|BD+09 879A|PPM 149166|HR 1879|J053508.27+095602.9,f|D|O8,5:35:8.28|-1.03,9:56:2.97|-1.9,3.39,2000 +Ori Lambda-39B|HD 36862|BD+09 879B|PPM 149166|J053508.48+095606.1,f|D|B0,5:35:8.48|-1.03,9:56:6.10|-1.9,5.61,2000 +HD 36881|BD+10 818|PPM 121138|HR 1883|J053513.23+101424.3,f|D|B9,5:35:13.24|1.48,10:14:24.33|-3.8,5.62,2000 +SAO 195986|HD 37192|CD-33 2414|PPM 281635|J053515.47-330447.0,f|S|K2,5:35:15.47|28.66,-33:4:47.01|117.2,5.76,2000 +Ori Theta-41C|SAO 132314|SD-05 1315C|PPM 188218|HR 1895|J053516.46-052322.9,f|D|O6,5:35:16.47|-0.90,-5:23:22.91|0.1,5.13,2000 +SAO 132319|SD-04 1184|PPM 188222|HR 1891|J053522.31-042527.5,f|D|B2,5:35:22.32|-0.45,-4:25:27.55|1.5,6.26,2000 +Ori Theta-43A|SAO 132321|SD-05 1319|PPM 188223|HR 1897|J053522.90-052457.8,f|D|O9,5:35:22.90|1.64,-5:24:57.81|1.5,5.07,2000 +Ori 42A|SD-04 1185|PPM 188224|HR 1892|J053523.16-045018.0,f|D|B1,5:35:23.16|4.33,-4:50:18.09|-7.2,4.60,2000 +Nair|Nair al Saif|Hatysa|Ori Iota-44A|SAO 132323|SD-06 1241|PPM 188225|HR 1899|J053525.98-055435.6,f|D|O9,5:35:25.98|2.24,-5:54:35.65|-0.6,2.78,2000 +SAO 132322|SD-05 1320|PPM 188226|J053526.40-052500.7,f|D|B1,5:35:26.40|0.75,-5:25:0.78|0.2,6.40,2000 +Tau 121|HD 36819|BD+23 954|PPM 94529|HR 1875|J053527.13+240222.5,f|S|B2,5:35:27.13|14.93,24:2:22.52|-20.2,5.38,2000 +V16549|SAO 132325|SD-04 1186|PPM 188228|HR 1898|J053531.07-042150.5,f|D|B2,5:35:31.08|3.74,-4:21:50.57|1.1,6.46,2000 +V1377 ORI|SAO 132332|SD-03 1146|PPM 188235|J053535.90-031510.2,f|D|B3,5:35:35.90|0.90,-3:15:10.22|-1,6.41,2000 +Men Iota|Iota Mensae|SAO 256214|CP-78 195|PPM 368853|HR 1991|J053536.16-784915.0,f|S|B8,5:35:36.17|12.56,-78:49:15.02|18.2,6.05,2000 +Ori 45A|SAO 132336|SD-04 1188|PPM 188236|J053539.48-045121.8,f|D|F0,5:35:39.48|-1.49,-4:51:21.84|8.1,5.24,2000 +HD 36859|BD+27 806|HR 1878|J053555.49+273944.4,f|S|K0,5:35:55.50|-27.10,27:39:44.45|-31.5,6.26,2000 +TX PIC|SAO 217422|HD 37434|CD-47 1940|HR 1927|J053602.84-471849.4,f|V|K2,5:36:2.85|-8.75,-47:18:49.49|-8,6.10,2000 +HD 37286|CD-28 2298|PPM 249114|HR 1915|J053610.29-284228.8,f|S|A2,5:36:10.30|25.52,-28:42:28.86|-3.9,6.27,2000 +Alnilam|Ori Epsilon-46|Epsilon Orionis|SAO 132346|HD 37128|BD-01 969|PPM 175945|J053612.81-011206.9,f|D|B0,5:36:12.81|1.50,-1:12:6.91|-1.1,1.72,2000 +HD 36719|BD+47 1178|HR 1869|J053615.95+474255.0,f|S|F0,5:36:15.96|14.43,47:42:55.05|-19.6,6.11,2000 +HD 36678|BD+54 914|PPM 29923|HR 1866|J053635.21+542543.1,f|S|M0,5:36:35.22|-7.16,54:25:43.17|-10.6,5.73,2000 +SAO 132359|SD-06 1255|PPM 188255|HR 1911|J053635.69-060353.1,f|D|B1,5:36:35.69|0.00,-6:3:53.11|0.4,5.76,2000 +HD 36891|BD+40 1346|PPM 48282|HR 1884|J053652.41+401056.5,f|S|G3,5:36:52.42|-4.35,40:10:56.55|-4.2,6.09,2000 +Ori Phi-40|SAO 112958|BD+09 898|PPM 149219|J053654.38+091726.4,f|S|K0,5:36:54.39|96.81,9:17:26.42|-304.2,4.09,2000 +AZ DOR|SAO 249322|HD 37935|CP-66 439|PPM 354869|J053654.97-663337.0,f|V|B9,5:36:54.98|-6.09,-66:33:37.03|10.8,6.29,2000 +Tau 122|HD 37147|BD+16 822|PPM 121184|J053703.73+170225.1,f|S|F0,5:37:3.74|42.88,17:2:25.17|-34.9,5.53,2000 +V16591|HD 37171|BD+10 828|PPM 121185|J053704.38+110206.0,f|V|K4,5:37:4.38|52.27,11:2:6.02|-16.2,5.98,2000 +SD-11 1238|HR 1919|J053708.77-114631.8,f|S|A2,5:37:8.77|20.56,-11:46:31.86|-22.7,6.10,2000 +BD+26 870|PPM 94572|J053708.89+265527.1,f|D|B9,5:37:8.90|16.99,26:55:27.20|-19.9,5.88,2000 +Men Pi|SAO 258421|CP-80 161|PPM 376576|J053709.89-802808.8,f|S|G1,5:37:9.89|311.88,-80:28:8.84|1050.2,5.65,2000 +Cam 19|BD+64 536|PPM 15373|HR 1857|J053715.06+640916.8,f|D|A0,5:37:15.07|1.05,64:9:16.88|-66.4,6.17,2000 +HD 36496|BD+66 401|PPM 15374|HR 1853|J053716.02+664148.1,f|D|A8,5:37:16.03|-16.38,66:41:48.15|-8.3,6.25,2000 +Col Nu1|CD-27 2389|PPM 249131|HR 1926|J053716.50-275216.9,f|S|F0,5:37:16.51|20.82,-27:52:16.90|-67.1,6.15,2000 +SAO 112966|HD 37232|BD+08 1016|PPM 149227|HR 1913|J053719.31+085706.7,f|S|B2,5:37:19.31|-0.59,8:57:6.75|-2.3,6.12,2000 +V2467|SAO 132375|SD-06 1262|HR 1918|J053727.35-055618.2,f|V|B1,5:37:27.36|2.54,-5:56:18.21|-2.2,6.03,2000 +Tau Zeta-123|Zeta Tauri|BD+21 908|PPM 94584|J053738.68+210833.1,f|S|B4,5:37:38.69|2.38,21:8:33.18|-18,3.00,2000 +Col Nu2|HD 37495|CD-28 2321|PPM 249139|HR 1935|J053744.61-284122.8,f|S|F4,5:37:44.62|-38.03,-28:41:22.89|42.6,5.28,2000 +HD 37138|BD+33 1102|J053745.80+333333.0,f|S|K0,5:37:45.81|16.62,33:33:33.00|5,6.35,2000 +V2483|SAO 132387|HD 37356|SD-04 1196|HR 1923|J053753.38-044850.5,f|V|B2,5:37:53.39|-2.54,-4:48:50.52|0.9,6.19,2000 +SAO 112979|BD+07 953|PPM 149251|J053801.11+073229.1,f|S|B8,5:38:1.12|11.45,7:32:29.11|-14.7,5.87,2000 +HD 37781|CD-50 1864|J053817.42-503827.5,f|S|A0,5:38:17.42|-0.76,-50:38:27.58|19.1,6.43,2000 +V16607|HD 37481|SD-06 1275|PPM 188299|HR 1933|J053837.97-063426.2,f|V|B1,5:38:37.97|0.45,-6:34:26.25|-0.4,5.96,2000 +Aur 26A|V2485|HD 37269|BD+30 963|HR 1914|J053838.08+302932.6,f|D|F9,5:38:38.08|-21.20,30:29:32.61|-12,5.41,2000 +HD 37717|CD-40 1999|HR 1947|J053843.52-404226.3,f|S|B8,5:38:43.52|-2.27,-40:42:26.30|21.2,5.81,2000 +Ori Sigma-48A|V16610|HD 37468|SD-02 1326|HR 1931|J053844.76-023600.2,f|D|O9,5:38:44.77|4.65,-2:36:0.25|-0.4,3.80,2000 +Ori 49|SAO 132411|SD-07 1142|HR 1937|J053853.08-071246.1,f|S|A4,5:38:53.08|-15.03,-7:12:46.18|-49.6,4.79,2000 +HD 37329|BD+26 884|HR 1921|J053857.37+263705.0,f|S|G9,5:38:57.37|13.54,26:37:5.05|-10.5,6.44,2000 +BD+41 1240|PPM 48329|J053908.69+412130.8,f|S|K0,5:39:8.70|-30.74,41:21:30.82|-119.5,6.46,2000 +Ori Omega-47|Omega Orionis|BD+04 1002|PPM 149277|HR 1934|J053911.14+040717.2,f|S|B3,5:39:11.15|0.75,4:7:17.28|0.1,4.54,2000 +HD 37643|SD-17 1199|HR 1944|J053916.22-175057.8,f|D|B7,5:39:16.22|-7.00,-17:50:57.87|2.8,6.40,2000 +V0433 AUR|HD 37367|BD+29 947|PPM 94619|HR 1924|J053918.31+291254.7,f|V|B2,5:39:18.31|-1.44,29:12:54.77|-7.3,5.99,2000 +HD 37439|BD+21 918|PPM 94621|HR 1929|J053927.10+214546.5,f|S|A1,5:39:27.11|2.93,21:45:46.54|-32.1,6.43,2000 +SAO 132425|HD 37635|SD-09 1197|HR 1942|J053930.84-094223.8,f|S|B7,5:39:30.84|5.47,-9:42:23.86|-8.9,6.49,2000 +SAO 132424|HD 37594|SD-03 1166|PPM 188321|J053931.15-033352.9,f|S|A8,5:39:31.15|-3.89,-3:33:52.94|2.1,5.98,2000 +Col Alpha|V2549|HD 37795|CD-34 2375|PPM 281732|HR 1956|J053938.93-340426.7,f|D|B7,5:39:38.94|-0.12,-34:4:26.79|-24.1,2.66,2000 +HD 36384|BD+74 252|HR 1844|J053943.70+750237.9,f|S|M0,5:39:43.70|-7.32,75:2:37.94|25.4,6.18,2000 +Tau 125|HD 37438|BD+25 902|PPM 94625|HR 1928|J053944.19+255349.5,f|S|B3,5:39:44.20|9.72,25:53:49.53|-23.8,5.17,2000 +HD 37811|CD-32 2479|PPM 281735|HR 1958|J053949.84-323745.1,f|S|G6,5:39:49.84|-15.92,-32:37:45.18|-31.6,5.44,2000 +V2537|HD 37519|BD+31 1048|HR 1938|J054035.90+312129.5,f|V|B9,5:40:35.91|-5.00,31:21:29.51|-8.9,6.04,2000 +V16627|SAO 132441|HD 37744|SD-02 1337|J054037.29-024930.8,f|V|B1,5:40:37.30|1.65,-2:49:30.85|2,6.21,2000 +NO AUR|HD 37536|BD+31 1049|HR 1939|J054042.05+315514.1,f|V|M2,5:40:42.05|0.51,31:55:14.19|-4.3,6.23,2000 +Alnitak|Alnitah|Ori Zeta-50A|V2553|SAO 132444|HD 37742|SD-02 1338A|HR 1948|J054045.52-015633.2,f|D|O9,5:40:45.53|4.05,-1:56:33.26|2.5,1.74,2000 +Ori Zeta-50B|HD 37743|SD-02 1338B|HR 1949|J054045.57-015635.5,f|D|B0,5:40:45.57|4.05,-1:56:35.59|2.5,4.21,2000 +V1051 ORI|SD-10 1258|PPM 216116|HR 1957|J054046.19-102431.1,f|V|B9,5:40:46.19|-1.62,-10:24:31.19|0,6.47,2000 +V2556|SAO 132445|HD 37756|BD-01 1004|PPM 175997|HR 1952|J054050.71-010743.6,f|V|B2,5:40:50.71|-1.80,-1:7:43.63|-0.7,4.94,2000 +HD 37788|BD+00 1152|PPM 149312|HR 1955|J054105.59+002015.9,f|S|F0,5:41:5.60|12.30,0:20:15.91|27.8,5.93,2000 +Tau 126A|V2560|HD 37711|BD+16 841|PPM 121263|HR 1946|J054117.71+163202.9,f|D|B3,5:41:17.72|5.46,16:32:2.93|-14.5,4.84,2000 +V16618|HD 37394|BD+53 934|PPM 29972|HR 1925|J054120.33+532851.8,f|D|K1,5:41:20.34|2.68,53:28:51.81|-523.6,6.20,2000 +HD 37646|BD+29 953|PPM 94671|HR 1945|J054120.97+292914.7,f|D|B8,5:41:20.98|16.32,29:29:14.71|-25.7,6.38,2000 +CD-33 2483|PPM 281767|HR 1966|J054126.92-332402.6,f|S|A0,5:41:26.93|5.01,-33:24:2.67|-12.3,6.35,2000 +V16637|SAO 132465|SD-02 1346|PPM 188361|HR 1959|J054140.33-025347.2,f|D|A9,5:41:40.34|50.49,-2:53:47.25|23.7,6.42,2000 +HD 37971|SD-16 1208|PPM 216141|HR 1962|J054141.51-164332.9,f|S|B3,5:41:41.51|-3.88,-16:43:32.99|5.4,6.21,2000 +HD 37784|BD+22 996|HR 1954|J054203.98+223937.1,f|S|K2,5:42:3.99|-0.42,22:39:37.17|-25.1,6.35,2000 +HD 38138|CD-30 2571|HR 1972|J054211.57-303207.5,f|S|A0,5:42:11.58|-5.68,-30:32:7.59|8.1,6.18,2000 +Lep 12|CD-22 2400|PPM 249258|HR 1968|J054213.95-222225.3,f|S|A2,5:42:13.96|-0.14,-22:22:25.38|8.9,5.88,2000 +Phaet|Phact|Phad|SD-17 1214|PPM 216154|HR 1965|J054214.47-173149.3,f|S|K0,5:42:14.48|-16.73,-17:31:49.35|5.2,6.14,2000 +WZ COL|CD-34 2401|PPM 281781|HR 1973|J054215.19-344004.1,f|V|B9,5:42:15.19|5.06,-34:40:4.12|51.3,5.29,2000 +HD 37289|BD+65 485|HR 1916|J054226.44+654151.5,f|S|K5,5:42:26.45|-0.25,65:41:51.54|-21.5,5.62,2000 +Ori 51|HD 37984|BD+01 1105|PPM 149342|HR 1963|J054228.63+012828.6,f|S|K1,5:42:28.63|-55.33,1:28:28.66|-14.9,4.90,2000 +SAO 132477|SD-06 1293|PPM 188378|HR 1967|J054253.91-064746.1,f|D|F3,5:42:53.92|12.21,-6:47:46.18|60.6,5.97,2000 +Cam 24|BD+56 1050A|HR 1941|J054301.67+563453.4,f|S|K0,5:43:1.67|16.11,56:34:53.48|28.7,6.05,2000 +V1197 ORI|BD-01 1012|J054309.31-013647.6,f|V|K4,5:43:9.32|4.80,-1:36:47.69|-29.1,6.31,2000 +V0731 TAU|HD 37967|BD+23 1015|PPM 94739|HR 1961|J054319.50+231215.7,f|V|B2,5:43:19.50|6.48,23:12:15.74|-15.8,6.24,2000 +SD-18 1172|PPM 216182|HR 1975|J054321.67-183326.9,f|S|A0,5:43:21.67|18.49,-18:33:26.91|-13.2,5.74,2000 +SAO 196116|HD 38385|CD-39 2140|HR 1981|J054330.18-392424.8,f|S|F3,5:43:30.19|48.45,-39:24:24.87|3.9,6.25,2000 +V2613|SAO 217497|HD 38458|CD-45 2131|HR 1984|J054341.13-454958.3,f|V|A9,5:43:41.14|24.46,-45:49:58.31|97.6,6.38,2000 +Cam 23|HD 37638|BD+61 816|PPM 15426|HR 1943|J054408.44+612835.5,f|S|G5,5:44:8.45|-11.10,61:28:35.53|1.1,6.16,2000 +HD 38392|SD-22 1210|HR 1982|J054426.53-222518.6,f|D|K2,5:44:26.53|-309.35,-22:25:18.63|-353.4,6.16,2000 +Lep Gamma-13A|HD 38393|SD-22 1211|HR 1983|J054427.79-222654.1,f|D|F6,5:44:27.79|-292.38,-22:26:54.18|-368.5,3.60,2000 +HD 38382|SD-20 1171|J054428.39-200735.6,f|S|G0,5:44:28.39|-18.31,-20:7:35.66|37.1,6.35,2000 +Dor Delta|SAO 249346|CP-65 496|PPM 354937|J054446.37-654407.8,f|S|A7,5:44:46.38|-28.36,-65:44:7.89|6.1,4.34,2000 +HD 38263|BD+12 884|PPM 121351|J054501.28+125317.9,f|S|A3,5:45:1.29|-19.74,12:53:17.99|-13.5,6.48,2000 +BD+03 1025|HR 1978|J054501.79+040029.2,f|D|F5,5:45:1.79|-11.07,4:0:29.20|-34,6.10,2000 +Aur Omicron-27|V16651|BD+49 1398|PPM 48417|HR 1971|J054554.03+494934.5,f|V|A2,5:45:54.04|-11.22,49:49:34.52|-11.3,5.46,2000 +Col Mu|V2630|SAO 196149|HD 38666|CD-32 2538|PPM 281849|HR 1996|J054559.89-321823.1,f|V|O9,5:45:59.90|3.04,-32:18:23.17|-22.6,5.16,2000 +SAO 132515|HD 38495|SD-04 1235|PPM 188423|HR 1986|J054602.86-041606.5,f|D|K1,5:46:2.87|9.57,-4:16:6.54|-68.3,6.31,2000 +SAO 217521|HD 38871|CD-46 1999|J054627.37-463549.8,f|D|K0,5:46:27.37|7.83,-46:35:49.85|16.3,5.30,2000 +Cam 26|V2615|BD+56 1058|HR 1969|J054630.39+560656.0,f|V|A4,5:46:30.39|20.15,56:6:56.07|-58.9,5.93,2000 +SAO 113119|HD 38529|BD+01 1126|PPM 149432|HR 1988|J054634.91+011005.4,f|S|G4,5:46:34.91|-80.08,1:10:5.50|-141.8,5.93,2000 +Tau 129|HD 38478|BD+15 926|PPM 121387|HR 1985|J054645.49+154920.9,f|S|B8,5:46:45.50|5.34,15:49:20.99|-3,6.00,2000 +SAO 113124|HD 38527|BD+09 954|PPM 149443|HR 1987|J054652.13+093120.4,f|D|G8,5:46:52.13|-33.28,9:31:20.43|-64.5,5.78,2000 +Lep Zeta-14|HD 38678|SD-14 1232|PPM 216268|HR 1998|J054657.34-144919.0,f|S|A3,5:46:57.34|-14.79,-14:49:19.02|-1.2,3.55,2000 +HD 38229|BD+51 1111|J054700.04+513115.1,f|S|G5,5:47:0.04|-14.09,51:31:15.13|-39.8,6.48,2000 +CD-28 2449|PPM 249391|J054704.57-283820.0,f|S|B5,5:47:4.58|-5.27,-28:38:20.09|10.3,6.22,2000 +HD 38713|SD-16 1244|PPM 216274|J054707.80-161417.0,f|S|G2,5:47:7.80|-9.07,-16:14:17.08|-9.7,6.16,2000 +Tau 131A|V16668|HD 38545|BD+14 1025|PPM 121393|HR 1989|J054713.15+142918.0,f|D|A3,5:47:13.15|3.78,14:29:18.01|-42.3,5.73,2000 +SAO 234137|CP-54 892|PPM 334621|J054713.33-542138.6,f|S|K3,5:47:13.33|5.51,-54:21:38.62|1.3,6.18,2000 +HD 38358|BD+42 1396|PPM 48445|HR 1979|J054714.68+423136.2,f|S|K0,5:47:14.69|6.96,42:31:36.29|-86.6,6.30,2000 +Pic Beta|V16683|SAO 234134|CD-51 1620|PPM 334622|J054717.08-510359.4,f|V|A5,5:47:17.09|4.62,-51:3:59.45|82,3.86,2000 +SAO 196171|HD 38885|CD-35 2509|PPM 281875|J054718.68-354026.6,f|S|K1,5:47:18.69|-3.66,-35:40:26.67|59.9,6.29,2000 +Tau 130|HD 38558|BD+17 1004|PPM 121397|J054726.19+174344.9,f|S|F0,5:47:26.20|-2.00,17:43:44.91|-4.8,5.48,2000 +V1031 ORI|HD 38735|SD-10 1281|PPM 216283|J054726.89-103158.6,f|D|A4,5:47:26.89|-11.50,-10:31:58.66|-17,6.06,2000 +HD 38524|BD+25 978|PPM 94875|J054734.66+253407.0,f|S|K1,5:47:34.67|1.89,25:34:7.04|-7.1,6.48,2000 +Tau 133A|HD 38622|BD+13 979|HR 1993|J054742.90+135358.5,f|D|B2,5:47:42.91|3.49,13:53:58.56|-13.3,5.28,2000 +Saiph|Ori Kappa-53|V2641|SAO 132542|HD 38771|SD-09 1235|PPM 188455|J054745.38-094010.5,f|V|B0,5:47:45.39|1.63,-9:40:10.58|-1.2,2.06,2000 +Ori 52|BD+06 1027|PPM 149476|HR 1999|J054800.23+062714.9,f|D|A5,5:48:0.23|4.02,6:27:14.96|-22.2,5.30,2000 +BD+20 1105|HR 1997|J054822.36+205210.1,f|D|B9,5:48:22.37|8.13,20:52:10.11|-17.9,6.03,2000 +V16682|SAO 132554|HD 38858|SD-04 1244|PPM 188472|J054834.94-040540.7,f|V|G4,5:48:34.94|62.39,-4:5:40.73|-230.6,6.39,2000 +Tau 132A|V2650|HD 38751|BD+24 970|PPM 94921|J054900.96+243403.1,f|D|G9,5:49:0.97|12.14,24:34:3.13|-8.2,4.89,2000 +HD 38284|BD+62 784|PPM 15465|HR 1976|J054904.65+624829.4,f|D|A4,5:49:4.65|-18.85,62:48:29.48|-2.4,6.20,2000 +Aur Tau-29A|HD 38656|BD+39 1418|HR 1995|J054910.43+391051.8,f|D|G8,5:49:10.44|-28.37,39:10:51.86|-25.6,4.52,2000 +Tau 134|HD 38899|BD+12 912|PPM 121441|J054932.93+123904.7,f|D|B9,5:49:32.93|-21.66,12:39:4.76|-17.4,4.88,2000 +SAO 217559|HD 39312|CD-44 2274|J054934.12-445231.4,f|S|K1,5:49:34.13|-3.08,-44:52:31.42|5.8,6.37,2000 +SD-14 1251|PPM 216329|J054936.54-142901.1,f|D|G5,5:49:36.54|-21.06,-14:29:1.20|-47.6,5.49,2000 +Pic Gamma|SAO 234154|HD 39523|CP-56 946|PPM 334652|J054949.66-560959.9,f|S|K1,5:49:49.66|81.60,-56:9:59.99|-71.8,4.50,2000 +CD-23 3135|PPM 249457|J054953.49-225818.7,f|S|A2,5:49:53.50|-15.33,-22:58:18.74|21.4,5.87,2000 +Dor Epsilon|V2693|SAO 249368|HD 39844|CP-66 463|PPM 354994|J054953.52-665404.2,f|V|B6,5:49:53.52|-22.13,-66:54:4.27|18.1,5.10,2000 +SAO 113179|BD+09 978|PPM 149523|J055002.68+095216.3,f|S|G8,5:50:2.69|14.78,9:52:16.39|-1.7,5.80,2000 +SAO 113186|BD+04 1052|PPM 149532|J055013.06+042524.2,f|S|K5,5:50:13.06|7.93,4:25:24.26|-38.3,5.95,2000 +Men Kappa|SAO 256248|CP-79 202|HR 2125|J055016.78-792140.9,f|S|B9,5:50:16.79|-4.51,-79:21:40.91|65.9,5.46,2000 +SAO 234162|HD 39547|CP-52 791|PPM 334666|J055028.82-524604.3,f|D|K0,5:50:28.82|-7.53,-52:46:4.32|10.7,6.34,2000 +Tau 135|BD+14 1041|PPM 121457|J055028.90+141820.1,f|S|G5,5:50:28.91|4.36,14:18:20.19|-37.4,6.18,2000 +V16690|SAO 113198|HD 39118|BD+01 1148|PPM 149543|J055030.02+020128.9,f|V|G8,5:50:30.03|0.45,2:1:28.92|-6.9,5.98,2000 +SAO 234169|CP-52 794|PPM 334674|J055053.22-520631.9,f|S|G8,5:50:53.22|2.40,-52:6:31.94|-76.3,5.16,2000 +HD 38765|BD+51 1117|J055056.37+513052.5,f|S|K1,5:50:56.37|165.60,51:30:52.50|-47.5,6.30,2000 +Wazn|Col Beta|HD 39425|CD-35 2546|PPM 281952|J055057.59-354605.9,f|S|K2,5:50:57.59|55.74,-35:46:5.91|404.7,3.11,2000 +BD+27 888|PPM 94967|J055058.10+275804.3,f|D|G5,5:50:58.11|-3.05,27:58:4.30|11.6,5.58,2000 +Aur Upsilon-31|V2661|HD 38944|BD+37 1336|J055102.43+371820.0,f|V|M0,5:51:2.44|36.99,37:18:20.06|-44.8,4.73,2000 +Lep Delta-15|HD 39364|SD-20 1211|PPM 249494|J055119.29-205244.7,f|S|K0,5:51:19.30|229.01,-20:52:44.72|-647.9,3.78,2000 +Ori 55|V2677|SAO 132591|HD 39291|SD-07 1187|PPM 188526|J055121.98-073104.8,f|V|B2,5:51:21.98|0.74,-7:31:4.81|-0.2,5.35,2000 +SAO 249376|HD 39963|CP-64 486|J055123.09-640200.8,f|S|G8,5:51:23.09|-8.01,-64:2:0.84|16.8,6.34,2000 +V0440 AUR|BD+32 1109|J055125.74+320728.8,f|D|M3,5:51:25.75|7.50,32:7:28.90|-1,6.29,2000 +HD 39385|CD-22 2534|PPM 249499|J055128.61-225537.0,f|S|K0,5:51:28.61|-4.01,-22:55:37.01|-42.5,6.16,2000 +Aur Nu-32|BD+39 1429|J055129.39+390854.5,f|D|K0,5:51:29.40|8.49,39:8:54.53|0.4,3.97,2000 +HD 39543|CD-29 2556|J055159.58-292657.9,f|S|K3,5:51:59.59|-1.57,-29:26:57.93|-11,6.45,2000 +HD 39421|SD-09 1255|PPM 188544|J055207.72-090230.8,f|S|A2,5:52:7.73|-2.96,-9:2:30.84|32.3,5.96,2000 +Cam 30|HD 38831|BD+58 863|J055217.25+585750.7,f|S|A0,5:52:17.25|-1.55,58:57:50.72|-21,6.14,2000 +V2714|SAO 234181|HD 39937|CP-57 901|PPM 334695|J055220.20-570922.2,f|V|F7,5:52:20.20|17.98,-57:9:22.29|-78.6,5.94,2000 +Tau 137|V0809 TAU|HD 39317|BD+14 1060|PPM 121511|J055222.29+141018.4,f|V|B9,5:52:22.29|-17.45,14:10:18.43|-2.9,5.60,2000 +V16714|HD 39286|BD+19 1110|PPM 121513|J055223.40+195204.2,f|V|G2,5:52:23.41|-5.64,19:52:4.25|-3.1,6.00,2000 +Ori 56|V2690|BD+01 1151|PPM 149576|J055226.43+015118.4,f|D|K1,5:52:26.44|-7.05,1:51:18.48|-9.9,4.75,2000 +SAO 196266|CD-37 2457|PPM 281984|J055233.18-373751.8,f|D|K1,5:52:33.19|30.77,-37:37:51.83|-29.8,5.62,2000 +HD 39182|BD+39 1435|J055239.66+393428.9,f|S|A2,5:52:39.67|-0.92,39:34:28.94|-7.3,6.41,2000 +V2681|HD 39225|BD+33 1179|J055240.09+335502.8,f|V|M1,5:52:40.09|18.17,33:55:2.86|8.5,6.05,2000 +HD 38645|BD+68 412|PPM 15493|HR 1994|J055255.49+682817.5,f|S|G9,5:52:55.49|3.36,68:28:17.55|-45.1,6.21,2000 +Col Lambda|Lambda Columbae|SAO 196276|HD 39764|CD-33 2599|PPM 281997|J055306.88-334804.8,f|S|B5,5:53:6.88|-4.49,-33:48:4.90|32.4,4.87,2000 +Tau 136|V2696|HD 39357|BD+27 899|J055319.64+273644.1,f|V|A0,5:53:19.65|3.85,27:36:44.14|-9.6,4.56,2000 +CP-63 498|J055406.05-630522.6,f|S|K2,5:54:6.05|120.10,-63:5:22.66|573.4,4.65,2000 +HD 39632|BD+10 927|PPM 121568|J055413.35+103511.0,f|S|G9,5:54:13.35|0.00,10:35:11.05|-7.4,6.11,2000 +HD 39891|CD-29 2595|PPM 249562|J055414.02-290849.9,f|D|F3,5:54:14.02|-32.62,-29:8:49.91|-42.6,6.34,2000 +SAO 113253|HD 39685|BD+03 1071|J055415.75+031332.3,f|S|K0,5:54:15.76|60.20,3:13:32.31|-52.3,6.31,2000 +Ori Chi-54|Chi1 Orionis|HD 39587|BD+20 1162|J055422.98+201634.2,f|V|G0,5:54:22.98|-163.22,20:16:34.23|-98.9,4.40,2000 +SAO 217612|CD-49 1945|J055441.11-493737.2,f|S|B3,5:54:41.12|-5.25,-49:37:37.23|13.8,6.11,2000 +V16728|HD 39853|SD-11 1321|PPM 216439|J055443.63-114627.0,f|V|K5,5:54:43.63|75.62,-11:46:27.09|28.3,5.62,2000 +SAO 113265|HD 39775|BD+00 1208|PPM 149635|J055444.03+005807.0,f|S|K0,5:54:44.04|-2.85,0:58:7.01|0,5.97,2000 +SAO 234199|CP-52 805|J055450.09-523807.7,f|S|F0,5:54:50.09|-17.21,-52:38:7.73|243.5,5.29,2000 +Aur Xi-30|V16718|HD 39283|BD+55 1027|J055450.78+554225.0,f|V|A2,5:54:50.78|-3.63,55:42:25.01|17.2,4.97,2000 +V16734|CD-39 2260|J055452.48-395728.2,f|V|M0,5:54:52.48|-12.76,-39:57:28.29|21.6,5.56,2000 +Ori 57|V2722|HD 39698|BD+19 1126|PPM 121581|J055456.68+194458.6,f|V|B2,5:54:56.69|0.42,19:44:58.61|-4.1,5.91,2000 +Cam 31|TU CAM|BD+59 920|J055457.82+595318.1,f|V|A2,5:54:57.83|2.03,59:53:18.12|-18.5,5.20,2000 +HD 39586|BD+31 1139|J055458.98+314205.3,f|S|A5,5:54:58.99|-45.05,31:42:5.38|-179.8,5.91,2000 +Betelgeuse|Beteiguex|Al Mankib|Ori Alpha-58A|Alpha Orionis|SAO 113271|BD+07 1055|PPM 149643|J055510.30+072425.4,f|D|M1,5:55:10.31|27.37,7:24:25.43|10.9,0.57,2000 +Col Xi|SAO 196316|CD-37 2487|J055529.91-370714.4,f|S|K1,5:55:29.92|36.60,-37:7:14.40|-24.1,4.96,2000 +SAO 132652|SD-04 1289|PPM 188595|J055530.17-043659.5,f|S|K5,5:55:30.17|27.06,-4:36:59.56|-20.5,5.87,2000 +SAO 132653|HD 39927|SD-04 1291|PPM 188597|J055535.36-044718.9,f|S|A2,5:55:35.37|-13.90,-4:47:18.91|-29.5,6.28,2000 +U ORI|HD 39816|BD+20 1171a|J055549.16+201030.6,f|V|M6,5:55:49.17|-13.66,20:10:30.69|-6.2,6.01,2000 +CD-22 2593|PPM 249611|J055614.27-225023.9,f|D|K0,5:56:14.27|117.78,-22:50:23.91|32.8,5.97,2000 +Col Sigma|CD-31 2848|J055620.94-312256.7,f|S|F2,5:56:20.94|1.41,-31:22:56.79|5.9,5.52,2000 +Lep Eta-16|SD-14 1286|PPM 216474|J055624.29-141003.7,f|S|F1,5:56:24.29|-42.18,-14:10:3.72|139,3.72,2000 +SAO 113284|HD 39985|BD+09 1016|PPM 149668|J055628.03+093033.8,f|S|A0,5:56:28.04|0.30,9:30:33.82|-9.9,5.98,2000 +HD 39866|BD+28 952|PPM 95117|J055633.76+285632.1,f|S|A2,5:56:33.77|1.18,28:56:32.16|-2.2,6.36,2000 +CD-23 3263|PPM 249623|J055634.43-231255.1,f|S|K0,5:56:34.44|12.68,-23:12:55.12|30,6.37,2000 +SAO 196335|CD-31 2854|J055649.00-315834.4,f|S|G8,5:56:49.01|3.31,-31:58:34.49|12.7,6.43,2000 +BD+11 975|PPM 121631|J055649.45+113115.8,f|S|K2,5:56:49.45|105.97,11:31:15.81|-56.7,5.89,2000 +V16735|BD+24 1033|PPM 95124|J055656.11+241458.8,f|V|A0,5:56:56.12|1.50,24:14:58.88|-2.7,6.04,2000 +V2753|SAO 234224|CP-53 978|PPM 334762|HR 2114|J055714.37-532532.4,f|D|K5,5:57:14.37|9.47,-53:25:32.50|-0.1,6.46,2000 +Col Gamma|V16739|SAO 196352|CD-35 2612|J055732.21-351659.8,f|D|B2,5:57:32.21|-2.69,-35:16:59.81|11.2,4.36,2000 +HD 39429|BD+66 413|PPM 15524|J055735.01+660545.9,f|S|K0,5:57:35.02|49.05,66:5:45.96|-12.1,6.24,2000 +BD+01 1168|PPM 149697|J055754.49+011327.5,f|S|M0,5:57:54.49|-23.39,1:13:27.52|1.3,6.21,2000 +Tau 139|BD+25 1052|PPM 95153|J055759.65+255714.0,f|S|B0,5:57:59.66|-2.83,25:57:14.08|-1.7,4.83,2000 +V16738|BD-01 1078|J055811.71-005938.4,f|V|K0,5:58:11.71|11.25,-0:59:38.47|-20.6,6.20,2000 +Ori 59A|V1004 ORI|SAO 113315|BD+01 1171|J055824.44+015013.5,f|D|A5,5:58:24.44|6.00,1:50:13.59|-7.8,5.90,2000 +SAO 217648|CD-44 2363|HR 2117|J055837.54-440204.4,f|S|G8,5:58:37.55|-12.08,-44:2:4.42|9.5,5.81,2000 +Ori 60|V16744|SAO 113321|BD+00 1239|PPM 149713|J055849.57+003310.7,f|D|A1,5:58:49.57|-15.60,0:33:10.73|2.4,5.22,2000 +BD+12 968|PPM 121688|J055853.23+124829.7,f|D|K2,5:58:53.24|-8.63,12:48:29.75|2.8,5.74,2000 +Mon 1|V0474 MON|SAO 132714|SD-09 1284|PPM 188655|J055901.07-092256.0,f|V|F2,5:59:1.08|18.50,-9:22:56.01|14.2,6.15,2000 +Mon 2|SAO 132715|SD-09 1285|PPM 188657|J055904.31-093329.7,f|S|A6,5:59:4.31|8.43,-9:33:29.70|-45.5,5.04,2000 +Col Eta|CD-42 2266|J055908.80-424854.4,f|S|K0,5:59:8.81|18.49,-42:48:54.49|-11.5,3.94,2000 +BD+49 1428|PPM 48613|J055921.77+495528.3,f|S|G5,5:59:21.78|-4.54,49:55:28.34|-2.5,5.91,2000 +Aur Delta-33A|BD+54 970|J055931.63+541704.7,f|D|K0,5:59:31.64|86.34,54:17:4.76|-134.1,3.73,2000 +Menkalinan|Menkalina|Aur Beta-34A|Beta Aurigae|BD+44 1328|PPM 48617|J055931.72+445650.7,f|D|A2,5:59:31.72|-56.37,44:56:50.76|-0.9,1.90,2000 +Aur Theta-37A|Theta Aurigae|BD+37 1380|J055943.26+371245.3,f|D|A0,5:59:43.27|42.05,37:12:45.31|-73.6,2.65,2000 +BD+55 1036|J055945.82+551915.0,f|S|A5,5:59:45.83|-2.82,55:19:15.09|-88.4,6.41,2000 +BD+54 971|J055947.94+543249.2,f|S|K2,5:59:47.95|-1.22,54:32:49.23|-42.1,6.13,2000 +Aur Pi-35|Pi Aurigae|BD+45 1217|PPM 48624|J055956.09+455612.2,f|S|M3,5:59:56.10|-2.40,45:56:12.25|-7.3,4.33,2000 +V2770|SAO 132732|SD-03 1256|PPM 188676|HR 2113|J060003.34-030427.3,f|V|K1,6:0:3.35|6.89,-3:4:27.31|-72.7,4.53,2000 +AC LEP|SD-12 1337|PPM 216566|HR 2118|J060017.65-125400.1,f|V|F0,6:0:17.66|-6.58,-12:54:0.12|-50.3,6.20,2000 +BD+44 1332|PPM 48635|J060018.89+443531.2,f|D|K2,6:0:18.90|-31.19,44:35:31.25|-38.7,6.23,2000 +SAO 234251|HD 41214|CD-51 1713|HR 2138|J060049.17-511258.7,f|S|A0,6:0:49.17|-29.69,-51:12:58.75|96,5.66,2000 +Aur 36|V0444 AUR|BD+47 1227|PPM 48649|J060058.56+475406.9,f|V|B9,6:0:58.56|3.02,47:54:6.92|-21,5.72,2000 +V16751|BD+27 945|PPM 95226|HR 2111|J060100.45+273420.5,f|D|B9,6:1:0.45|0.53,27:34:20.50|-1.9,6.06,2000 +BD+31 1164|J060110.04+310204.2,f|S|A2,6:1:10.04|-18.77,31:2:4.26|0,6.19,2000 +SAO 171138|CD-25 2865|PPM 249727|HR 2129|J060113.09-252503.9,f|S|A1,6:1:13.10|-12.19,-25:25:3.95|-20.7,6.05,2000 +SAO 196413|CD-33 2681|PPM 282173|HR 2131|J060116.29-335442.6,f|S|K5,6:1:16.30|5.48,-33:54:42.61|-26.4,5.53,2000 +BD+85 80|PPM 983|HR 1885|J060120.27+851055.6,f|S|M0,6:1:20.27|14.66,85:10:55.61|-1.9,6.12,2000 +141 Tau|BD+22 1140|PPM 95249|HR 2116|J060141.62+222403.6,f|S|B8,6:1:41.63|-6.24,22:24:3.60|-17.4,6.36,2000 +BD+48 1333|PPM 48665|J060143.05+485734.0,f|S|K0,6:1:43.06|7.09,48:57:34.00|-9.9,5.97,2000 +Mon 3A|V16760|SD-10 1349|HR 2128|J060150.42-103552.5,f|D|B5,6:1:50.42|-6.93,-10:35:52.55|3.6,5.00,2000 +SW PIC|SAO 249424|HD 41586|CP-60 537|PPM 355142|HR 2151|J060209.33-600548.5,f|V|M4,6:2:9.34|16.68,-60:5:48.59|7.8,6.47,2000 +Ori Mu-61A|V2792|SAO 113389|BD+09 1064|HR 2124|J060222.99+093850.1,f|D|A2,6:2:23.00|14.20,9:38:50.20|-37.4,4.13,2000 +HD 41125|SD-14 1315|PPM 216627|HR 2136|J060233.81-142949.7,f|S|G5,6:2:33.81|11.76,-14:29:49.77|11.8,6.19,2000 +BD+47 1236|PPM 48679|J060245.14+474834.3,f|S|F5,6:2:45.14|32.24,47:48:34.30|92.6,6.50,2000 +V16759|BD+49 1441|PPM 48681|HR 2112|J060248.60+495420.4,f|V|B9,6:2:48.60|14.39,49:54:20.44|-43.8,6.05,2000 +BD+43 1421|PPM 48684|HR 2115|J060253.49+432242.0,f|S|K0,6:2:53.50|8.61,43:22:42.00|-28.9,6.37,2000 +BD+32 1166|PPM 71144|HR 2122|J060255.17+323808.5,f|S|F4,6:2:55.17|81.47,32:38:8.51|-211.6,6.23,2000 +V16758|BD+56 1086|J060304.31+570105.9,f|V|G5,6:3:4.32|9.31,57:1:5.93|-45.6,6.48,2000 +HD 41312|CD-26 2675|PPM 249776|J060315.60-261704.3,f|D|K3,6:3:15.60|66.17,-26:17:4.36|84.8,5.04,2000 +Aur 38|BD+42 1473|PPM 48696|HR 2119|J060317.95+425441.6,f|S|K0,6:3:17.96|105.03,42:54:41.63|-132.8,6.09,2000 +BD+11 1009|PPM 121823|HR 2133|J060324.76+114051.8,f|S|A0,6:3:24.77|-11.90,11:40:51.83|-5,6.09,2000 +Ori 64|V2803|BD+19 1186|PPM 121825|J060327.36+194126.0,f|D|B8,6:3:27.37|9.89,19:41:26.02|-20.3,5.15,2000 +Ori Chi-62|Chi2 Orionis|HD 41117|BD+20 1233|PPM 95316|HR 2135|J060355.18+200818.4,f|V|B2,6:3:55.18|2.25,20:8:18.43|-2.8,4.64,2000 +Gem 1A|V16765|HD 41116|BD+23 1170|PPM 95324|HR 2134|J060407.20+231547.9,f|D|K1,6:4:7.21|-18.33,23:15:47.99|-128.8,4.18,2000 +V0696 MON|SAO 132793|HD 41335|SD-06 1391|PPM 188753|HR 2142|J060413.50-064232.1,f|V|B2,6:4:13.50|-3.58,-6:42:32.19|3.6,5.26,2000 +V16770|SAO 196459|HD 41534|CD-32 2743|PPM 282235|HR 2149|J060420.26-321020.7,f|D|B2,6:4:20.27|-15.62,-32:10:20.75|120.8,5.65,2000 +CD-45 2300|HR 2157|J060428.43-450211.7,f|D|G0,6:4:28.44|-82.04,-45:2:11.77|246.4,6.34,2000 +V2804|BD+51 1146p|HR 2123|J060429.10+513424.2,f|D|A7,6:4:29.11|2.33,51:34:24.22|-42.8,6.40,2000 +HD 41742|CD-45 2302|HR 2158|J060440.10-450444.1,f|D|F4,6:4:40.10|-79.97,-45:4:44.15|254.3,5.96,2000 +Ori 63|SAO 113429|HD 41361|BD+05 1085|PPM 149864|HR 2144|J060458.18+052511.8,f|S|G5,6:4:58.18|-7.91,5:25:11.89|-0.2,5.66,2000 +Ori 66|BD+04 1116|PPM 149865|HR 2145|J060458.36+040931.2,f|S|G4,6:4:58.36|0.30,4:9:31.22|-2.4,5.63,2000 +Lep 17|SS LEP|HD 41511|SD-16 1349|PPM 216686|HR 2148|J060459.12-162903.9,f|V|A2,6:4:59.13|-5.61,-16:29:3.96|-3.2,4.97,2000 +HD 41162|BD+37 1405|PPM 71184|HR 2137|J060502.58+375751.4,f|D|K0,6:5:2.58|-3.07,37:57:51.41|-6.5,6.33,2000 +Aur 39|V2812|BD+42 1477|PPM 48723|HR 2132|J060503.38+425853.8,f|V|F3,6:5:3.38|-44.66,42:58:53.89|-144.2,5.90,2000 +BD+59 937|HR 2121|J060508.22+592335.5,f|S|K1,6:5:8.23|2.67,59:23:35.56|-49.6,6.32,2000 +BD+75 247|PPM 6187|J060509.34+753509.3,f|S|K5,6:5:9.35|10.98,75:35:9.31|-10,6.27,2000 +V16773|HD 41547|SD-10 1368|PPM 216697|J060527.03-101433.3,f|V|F5,6:5:27.03|21.40,-10:14:33.34|26,5.88,2000 +SAO 196483|HD 41759|CD-35 2684|PPM 282258|J060527.17-353049.1,f|S|A1,6:5:27.18|13.92,-35:30:49.13|16.1,5.80,2000 +V16767|HD 41269|BD+33 1236|PPM 71196|HR 2139|J060533.89+333556.5,f|V|B9,6:5:33.90|-3.75,33:35:56.58|-9.1,6.22,2000 +SAO 171231|HD 41843|CD-29 2769|PPM 249837|HR 2164|J060605.53-294531.0,f|S|A1,6:6:5.54|10.94,-29:45:31.05|-41.7,5.79,2000 +BD+35 1334|PPM 71211|HR 2141|J060608.53+352315.8,f|D|G0,6:6:8.54|-124.24,35:23:15.87|-295.3,6.13,2000 +Lep Theta-18|HD 41695|SD-14 1331|HR 2155|J060609.32-145606.9,f|S|A1,6:6:9.32|-16.81,-14:56:6.92|13.2,4.67,2000 +Dor Eta1|SAO 249448|HD 42525|CP-66 493|PPM 355182|HR 2194|J060609.38-660222.6,f|S|A0,6:6:9.38|13.52,-66:2:22.64|28,5.70,2000 +V0394 AUR|HD 41429|BD+29 1112|PPM 95388|HR 2146|J060622.44+293044.6,f|D|M3,6:6:22.45|12.66,29:30:44.69|-4.7,6.06,2000 +SAO 171236|HD 41841|CD-23 3431|PPM 249849|HR 2163|J060632.09-230639.0,f|D|A2,6:6:32.10|-10.35,-23:6:39.05|-28.6,5.46,2000 +Aur 40|V16774|HD 41357|BD+38 1377|PPM 71223|HR 2143|J060635.09+382857.5,f|V|A4,6:6:35.10|10.80,38:28:57.52|-52.7,5.35,2000 +SAO 132841|HD 41692|SD-04 1362|HR 2154|J060638.73-041137.8,f|D|B5,6:6:38.74|-6.73,-4:11:37.81|-4.7,5.37,2000 +BD+63 630|PPM 15592|HR 2126|J060639.15+632713.8,f|S|K0,6:6:39.15|-35.53,63:27:13.82|8.7,6.42,2000 +Col Pi1|CD-42 2343|HR 2171|J060641.04-421755.6,f|S|A2,6:6:41.04|-34.73,-42:17:55.70|-2.9,6.16,2000 +YY LEP|SAO 171251|HD 41933|SD-21 1353|PPM 249863|HR 2166|J060657.51-214844.2,f|V|M4,6:6:57.51|-6.13,-21:48:44.28|-3.7,5.79,2000 +SAO 217724|HD 42168|CD-45 2317|HR 2178|J060701.89-450529.4,f|S|K1,6:7:1.89|79.74,-45:5:29.43|46.2,6.47,2000 +V2845|SAO 249451|CP-62 582|PPM 355194|HR 2196|J060703.38-620916.4,f|V|K2,6:7:3.39|21.44,-62:9:16.49|-69.7,5.04,2000 +V2836|CD-34 2655|PPM 282288|J060703.67-341843.2,f|V|B4,6:7:3.67|2.85,-34:18:43.27|0.4,5.85,2000 +HD 41467|BD+41 1357|HR 2147|J060726.75+415115.4,f|S|K0,6:7:26.76|-2.35,41:51:15.41|-19.8,6.15,2000 +Col Theta|SAO 196514|HD 42167|CD-37 2609|PPM 282299|HR 2177|J060731.63-371510.5,f|S|B9,6:7:31.63|0.84,-37:15:10.51|0.3,5.00,2000 +Ori Nu-67|HD 41753|BD+14 1152|HR 2159|J060734.32+144606.4,f|S|B3,6:7:34.32|4.93,14:46:6.50|-21.2,4.42,2000 +Lep 19|V16782|SAO 151142|SD-19 1361|PPM 216753|HR 2168|J060741.63-190957.1,f|V|M2,6:7:41.64|12.75,-19:9:57.12|56.7,5.28,2000 +Col Pi2|CD-42 2351|HR 2181|J060752.85-420914.5,f|D|A0,6:7:52.86|-11.12,-42:9:14.56|-17.4,5.50,2000 +HD 41636|BD+41 1365|PPM 48774|HR 2153|J060823.13+410320.6,f|S|G9,6:8:23.14|0.90,41:3:20.61|-49.3,6.34,2000 +SAO 217735|HD 42448|CD-44 2452|HR 2187|J060834.62-442122.3,f|D|B8,6:8:34.63|-9.76,-44:21:22.36|6.7,6.26,2000 +Dor Nu|SAO 249461|CP-68 474|PPM 355211|HR 2221|J060844.26-685036.2,f|S|B8,6:8:44.26|-50.89,-68:50:36.27|19.7,5.05,2000 +SAO 132884|HD 42132|SD-06 1424|PPM 188848|J060847.70-064916.9,f|S|G5,6:8:47.70|-30.23,-6:49:16.94|8.1,6.46,2000 +SAO 171293|SD-22 1327|PPM 249913|J060857.86-222538.6,f|S|A0,6:8:57.86|-3.88,-22:25:38.68|-52.8,5.49,2000 +HD 42111|BD+02 1139|PPM 149973|HR 2174|J060857.90+022958.8,f|D|A3,6:8:57.90|-1.80,2:29:58.89|-14.2,5.69,2000 +SAO 151173|HD 42327|SD-18 1316|HR 2182|J060920.19-180734.9,f|D|B9,6:9:20.20|3.56,-18:7:34.99|-21.3,6.36,2000 +SAO 217747|HD 42683|CD-49 2084|J060923.42-493346.1,f|S|F7,6:9:23.42|-10.70,-49:33:46.19|75,6.49,2000 +V16789|BD+22 1198|PPM 95514|HR 2169|J060932.43+221124.9,f|V|K4,6:9:32.44|-6.94,22:11:24.94|-5,5.93,2000 +SAO 151178|HD 42341|SD-14 1348|PPM 216798|HR 2183|J060934.52-143504.6,f|S|K2,6:9:34.52|-15.68,-14:35:4.63|29.6,5.56,2000 +HD 42278|SD-05 1523|PPM 188863|HR 2179|J060936.25-054241.1,f|S|F3,6:9:36.25|64.78,-5:42:41.14|1.8,6.16,2000 +Gem 3A|PU GEM|BD+23 1226|PPM 95522|HR 2173|J060943.98+230648.4,f|D|B2,6:9:43.98|-1.10,23:6:48.48|-1.4,5.76,2000 +SAO 171318|HD 42486|CD-26 2761|PPM 249936|HR 2192|J060947.14-264203.9,f|S|G8,6:9:47.15|-17.96,-26:42:3.91|13.1,6.28,2000 +SAO 171317|HD 42443|CD-22 2806|PPM 249937|HR 2186|J060947.94-224627.5,f|D|F6,6:9:47.95|77.59,-22:46:27.53|78.7,5.71,2000 +Cam 37|HD 41597|BD+58 897|HR 2152|J060959.01+585608.4,f|S|G8,6:9:59.01|17.65,58:56:8.50|18.8,5.35,2000 +AF COL|SAO 217753|HD 42682|CD-40 2291|J061010.40-402113.6,f|V|M2,6:10:10.40|-20.92,-40:21:13.65|73.1,5.56,2000 +Men Alpha|SAO 256274|HD 43834|CP-74 374|HR 2261|J061014.47-744510.9,f|S|G6,6:10:14.47|121.85,-74:45:10.96|-212.8,5.07,2000 +Pic Delta|Delta Pictoris|SAO 234359|HD 42933|CP-54 980|PPM 334955|HR 2212|J061017.90-545807.1,f|S|B3,6:10:17.91|-4.13,-54:58:7.12|6.5,4.72,2000 +V2866|SAO 171339|HD 42621|CD-27 2780|PPM 249954|J061034.68-270915.6,f|V|K1,6:10:34.68|-9.08,-27:9:15.63|-57.2,5.70,2000 +SAO 217758|HD 42834|CD-45 2349|HR 2211|J061039.92-451655.1,f|S|A0,6:10:39.93|-1.06,-45:16:55.16|7.8,6.29,2000 +V0653 MON|SAO 132924|HD 42536|SD-06 1439|PPM 188881|HR 2195|J061101.21-064515.1,f|V|A0,6:11:1.21|-4.62,-6:45:15.20|-11.6,6.17,2000 +V16797|HD 42351|BD+18 1112|HR 2184|J061101.77+180749.6,f|V|K1,6:11:1.77|1.85,18:7:49.67|-2.4,6.35,2000 +SAO 171356|HD 42729|CD-26 2784|PPM 249975|J061113.65-262855.5,f|S|A0,6:11:13.66|0.81,-26:28:55.56|5.4,6.08,2000 +Dor Eta2|V2873|SAO 249469|HD 43455|CP-65 561|PPM 355229|HR 2245|J061114.98-653521.9,f|V|M2,6:11:14.98|-23.00,-65:35:21.90|118.3,5.02,2000 +HD 42477|BD+13 1151|HR 2191|J061127.91+133818.8,f|S|A0,6:11:27.91|-4.96,13:38:18.82|-17.8,6.05,2000 +Gem 5|HD 42398|BD+24 1151|PPM 95574|HR 2185|J061132.30+242512.9,f|S|K0,6:11:32.31|0.96,24:25:12.91|-52,5.83,2000 +Aur 41A|HD 42127|BD+48 1352A|HR 2176|J061136.59+484239.5,f|D|A3,6:11:36.59|14.35,48:42:39.56|-55.9,6.17,2000 +V0638 MON|SAO 132941|HD 42657|SD-04 1393|PPM 188896|J061143.71-043955.5,f|D|B9,6:11:43.72|-7.18,-4:39:55.58|-3.4,6.21,2000 +BD+52 1041|HR 2172|J061145.91+523849.8,f|S|A5,6:11:45.91|4.10,52:38:49.87|-73.1,6.28,2000 +SAO 132944|SD-06 1446|PPM 188897|J061151.81-063301.0,f|S|B2,6:11:51.81|-3.58,-6:33:1.03|-1.8,5.06,2000 +Ori Xi-70A|BD+14 1187|HR 2199|J061156.39+141231.5,f|D|B3,6:11:56.40|-1.60,14:12:31.55|-20.2,4.46,2000 +Ori 68A|BD+19 1253|HR 2193|J061201.34+194725.9,f|D|B9,6:12:1.34|1.98,19:47:25.95|-11.8,5.76,2000 +Ori 69|HD 42545|BD+16 1035|HR 2198|J061203.27+160749.4,f|S|B5,6:12:3.28|5.62,16:7:49.46|-16.8,4.96,2000 +Gem 6|BU GEM|HD 42543|BD+22 1220|PPM 95595|HR 2197|J061219.09+225430.6,f|V|M1,6:12:19.10|-0.97,22:54:30.65|-2.2,6.36,2000 +HD 42471|BD+32 1217|PPM 71342|HR 2189|J061220.12+324136.1,f|S|M2,6:12:20.12|-8.71,32:41:36.17|-4,5.79,2000 +Cam 36|HD 41927|BD+65 517|PPM 15639|HR 2165|J061251.06+654306.3,f|S|K1,6:12:51.06|7.22,65:43:6.32|-31.8,5.35,2000 +V1389 ORI|SAO 113592|HD 42787|BD+06 1160|J061259.57+060058.5,f|V|Ma,6:12:59.57|10.74,6:0:58.53|-13.1,6.47,2000 +V1357 ORI|BD+10 1050|J061312.50+103737.7,f|V|G2,6:13:12.50|78.14,10:37:37.72|-297.1,6.43,2000 +V16808|SAO 171428|HD 43162|CD-23 3577|HR 2225|J061345.29-235142.9,f|V|G5,6:13:45.30|-47.05,-23:51:42.98|110.9,6.37,2000 +HD 42466|BD+51 1163|HR 2188|J061345.34+511020.8,f|S|K1,6:13:45.34|-2.07,51:10:20.89|-63.6,6.07,2000 +SAO 132994|SD-03 1345|PPM 188936|HR 2218|J061354.23-034428.9,f|S|G8,6:13:54.23|-18.41,-3:44:28.95|20.3,5.83,2000 +HD 42954|BD+17 1182|PPM 122145|HR 2214|J061428.58+175422.8,f|D|A5,6:14:28.58|-2.85,17:54:22.87|-10.6,5.88,2000 +HD 43157|SD-04 1421|PPM 188947|HR 2224|J061436.70-043406.4,f|D|B5,6:14:36.70|-6.58,-4:34:6.45|2.4,5.83,2000 +Ori 71A|BD+19 1270|J061450.87+190923.2,f|D|F6,6:14:50.88|-95.79,19:9:23.21|-181.6,5.21,2000 +Mon Gamma-5|HD 43232|SD-06 1469|PPM 188954|HR 2227|J061451.33-061629.1,f|D|K1,6:14:51.33|-6.11,-6:16:29.19|-20.1,3.98,2000 +Propus|Praepes|Tejat Prior|Gem Eta-7|Eta Geminorium|HD 42995|BD+22 1241|PPM 95649|HR 2216|J061452.65+223024.4,f|D|M2,6:14:52.66|-62.50,22:30:24.48|-10.2,3.30,2000 +V16811|SAO 171458|HD 43396|SD-20 1336|HR 2242|J061508.40-201619.8,f|V|K0,6:15:8.40|2.39,-20:16:19.87|30.7,5.87,2000 +V2878|HD 43112|BD+13 1173|HR 2222|J061508.47+135103.9,f|D|B1,6:15:8.47|24.18,13:51:3.96|10.7,5.91,2000 +SAO 151274|HD 43429|SD-18 1352|HR 2243|J061517.72-182837.7,f|S|K0,6:15:17.72|19.49,-18:28:37.78|-61.5,5.99,2000 +Aur Kappa-44|V2877|BD+29 1154|PPM 95662|HR 2219|J061522.68+292953.0,f|V|G9,6:15:22.69|-70.89,29:29:53.07|-261.7,4.33,2000 +Ori 72|HD 43153|BD+16 1060|PPM 122173|HR 2223|J061525.12+160835.4,f|S|B7,6:15:25.13|1.58,16:8:35.43|-12.7,5.34,2000 +HD 43362|SD-08 1368|PPM 188969|HR 2237|J061526.15-090208.7,f|D|B9,6:15:26.15|-13.33,-9:2:8.72|-2.5,6.09,2000 +HD 43319|SD-04 1431|PPM 188972|HR 2234|J061529.67-045452.9,f|D|A5,6:15:29.67|22.72,-4:54:52.99|-34.4,6.00,2000 +HD 43318|BD-00 1234|PPM 176187|HR 2233|J061534.26-003043.8,f|S|F6,6:15:34.27|-158.09,-0:30:43.88|-218.3,5.62,2000 +HD 43285|BD+06 1172|HR 2231|J061540.17+060358.1,f|S|B6,6:15:40.18|-0.75,6:3:58.20|-17.4,6.06,2000 +Cam 40|HD 42633|BD+60 938|J061540.54+595956.3,f|D|K3,6:15:40.54|28.58,59:59:56.31|-24.1,5.35,2000 +SAO 151283|HD 43445|SD-13 1411|PPM 216922|HR 2244|J061544.88-134306.2,f|S|B9,6:15:44.89|12.24,-13:43:6.29|-11.1,5.01,2000 +Ori 73|HD 43247|BD+12 1081|PPM 122187|HR 2229|J061544.96+123303.8,f|S|B9,6:15:44.96|-3.22,12:33:3.84|-1.5,5.48,2000 +SAO 113656|HD 43358|BD+01 1275|HR 2236|J061553.97+011008.6,f|D|F5,6:15:53.98|-6.45,1:10:8.66|30.4,6.36,2000 +V2891|SAO 151294|HD 43544|SD-16 1415|PPM 216935|HR 2249|J061607.69-163704.8,f|V|B2,6:16:7.69|-9.20,-16:37:4.82|0.9,5.97,2000 +SAO 234418|CP-59 619|HR 2274|J061618.78-591248.6,f|D|G0,6:16:18.79|-45.53,-59:12:48.61|-316.9,6.42,2000 +Gem 8|V16812|HD 43261|BD+24 1182|J061619.04+235812.0,f|V|G8,6:16:19.05|-13.71,23:58:12.10|-8.6,6.08,2000 +HD 43335|BD+17 1191|HR 2235|J061623.79+171053.7,f|S|K5,6:16:23.79|-0.29,17:10:53.79|-9.6,6.38,2000 +Ori 74A|HD 43386|BD+12 1084|HR 2241|J061626.61+121619.7,f|D|F5,6:16:26.62|83.11,12:16:19.79|186.3,5.04,2000 +Col Kappa|V2897|SAO 196643|HD 43785|CD-35 2800|PPM 282461|HR 2256|J061633.13-350825.8,f|V|K0,6:16:33.14|0.37,-35:8:25.87|87.6,4.37,2000 +SAO 196646|HD 43847|CD-39 2491|PPM 282463|HR 2262|J061635.58-391551.8,f|S|A2,6:16:35.59|-15.33,-39:15:51.82|-18.8,6.00,2000 +Gem 9|PX GEM|HD 43384|BD+23 1275|J061658.70+234427.2,f|V|B3,6:16:58.71|0.00,23:44:27.27|-2.6,6.29,2000 +SAO 196653|HD 43899|CD-37 2707|HR 2263|J061701.23-374414.8,f|S|K1,6:17:1.23|1.30,-37:44:14.80|83.9,5.54,2000 +HD 43745|CD-22 2917|HR 2254|J061703.59-224254.8,f|D|G0,6:17:3.60|127.43,-22:42:54.83|-258.6,6.07,2000 +Ori 75A|SAO 113675|HD 43525|BD+09 1173|HR 2247|J061706.61+095632.6,f|D|A2,6:17:6.62|5.17,9:56:32.61|-59.9,5.40,2000 +V16821|SAO 196659|CD-37 2708|PPM 282475|HR 2265|J061709.56-371512.5,f|V|A3,6:17:9.57|-5.49,-37:15:12.59|-22.6,5.88,2000 +V2896|SAO 113683|HD 43587|BD+05 1168|HR 2251|J061716.13+050600.4,f|D|F9,6:17:16.14|-189.45,5:6:0.40|171.2,5.71,2000 +V2903|SAO 151322|HD 43827|SD-16 1426|PPM 216967|J061741.72-164857.2,f|V|K3,6:17:41.72|-14.93,-16:48:57.27|2.1,5.15,2000 +V16827|HD 44267|CP-52 902|HR 2278|J061751.74-524358.9,f|V|K2,6:17:51.75|8.54,-52:43:58.91|1,6.39,2000 +Lyn 1|UW LYN|HD 42973|BD+61 869|PPM 15671|HR 2215|J061754.82+613055.0,f|V|M3,6:17:54.82|-9.59,61:30:55.03|-2.4,5.03,2000 +HD 43683|BD+14 1235|PPM 122243|HR 2253|J061805.60+142258.2,f|D|A3,6:18:5.61|-4.79,14:22:58.29|4.3,6.13,2000 +SAO 151334|HD 43955|SD-19 1407|PPM 216981|HR 2266|J061813.72-195801.1,f|S|B2,6:18:13.73|-5.78,-19:58:1.11|7.2,5.51,2000 +Aur 43|BD+46 1124|PPM 48942|HR 2239|J061816.86+462137.5,f|S|K2,6:18:16.87|12.53,46:21:37.60|-130.4,6.33,2000 +HD 43821|BD+09 1184|HR 2259|J061840.35+090249.8,f|S|K0,6:18:40.35|1.33,9:2:49.86|-42,6.24,2000 +V2912|SAO 151346|SD-14 1400|PPM 216999|HR 2268|J061848.79-150129.8,f|V|M0,6:18:48.79|1.01,-15:1:29.83|16.7,6.05,2000 +HD 43993|SD-09 1411|HR 2267|J061850.58-092324.0,f|S|K1,6:18:50.58|4.29,-9:23:24.07|-22.7,5.36,2000 +HD 42818|BD+69 371|PPM 15683|J061850.77+691911.2,f|S|A0,6:18:50.78|-1.64,69:19:11.23|-101.7,4.77,2000 +V2915|SAO 171549|SD-20 1355|HR 2271|J061858.97-205532.2,f|V|B4,6:18:58.98|-3.36,-20:55:32.20|3.9,5.78,2000 +V1155 ORI|HD 43819|BD+17 1203|HR 2258|J061901.84+171930.9,f|V|B9,6:19:1.84|-8.73,17:19:30.93|-4.8,6.28,2000 +SD-08 1386|J061907.93-083509.6,f|S|B9,6:19:7.93|-19.58,-8:35:9.64|2.2,6.23,2000 +Lyn 2|UZ LYN|HD 43378|BD+59 959|HR 2238|J061937.38+590039.4,f|V|A2,6:19:37.39|-3.48,59:0:39.47|24.4,4.45,2000 +V16832|SAO 171571|HD 44225|CD-22 2955|J061938.17-220611.2,f|V|K3,6:19:38.17|-37.11,-22:6:11.23|10.3,6.26,2000 +SAO 196686|HD 44323|CD-34 2795|PPM 282514|HR 2279|J061940.95-342347.7,f|S|B9,6:19:40.96|4.46,-34:23:47.73|1.8,5.76,2000 +Mon 7|SAO 133114|HD 44112|SD-07 1373|HR 2273|J061942.79-074922.4,f|S|B2,6:19:42.80|-4.31,-7:49:22.47|0.7,5.26,2000 +V2918|SAO 133118|HD 44131|SD-02 1564|HR 2275|J061959.60-025640.1,f|V|M1,6:19:59.60|-7.34,-2:56:40.17|-1,4.92,2000 +V2917|BD+14 1247|PPM 122298|HR 2269|J062004.22+143904.0,f|V|K3,6:20:4.22|-6.24,14:39:4.06|-17.3,5.68,2000 +Furud|CMa Zeta-1|V2927|SAO 196698|CD-30 3038|PPM 282532|HR 2282|J062018.79-300348.1,f|D|B2,6:20:18.79|8.05,-30:3:48.12|3.8,3.02,2000 +HD 44379|CD-23 3729|J062035.15-233816.6,f|S|K0,6:20:35.16|-20.75,-23:38:16.67|-65.7,6.49,2000 +V2931|CD-34 2806|PPM 282541|HR 2288|J062036.23-340838.9,f|V|B1,6:20:36.24|0.37,-34:8:38.92|19.9,5.54,2000 +V2930|SAO 151391|HD 44394|SD-11 1459|J062105.43-114902.3,f|V|K5,6:21:5.43|3.08,-11:49:2.37|2,6.36,2000 +BD+29 1190|PPM 95824|HR 2272|J062111.91+293226.9,f|S|A1,6:21:11.92|9.53,29:32:26.95|-45.7,6.41,2000 +FR CMA|HD 44458|SD-11 1460|HR 2284|J062124.71-114623.6,f|D|B1,6:21:24.72|-4.26,-11:46:23.66|2.4,5.59,2000 +V2932|SAO 113758|HD 44333|BD+02 1197|J062125.77+021606.7,f|D|A4,6:21:25.77|-12.59,2:16:6.72|-28.3,6.29,2000 +HD 44234|BD+17 1214|PPM 122334|HR 2277|J062125.92+174548.6,f|S|A5,6:21:25.93|20.14,17:45:48.61|-42.3,6.29,2000 +Aur 45|BD+53 1008|HR 2264|J062146.12+532707.8,f|S|F5,6:21:46.13|22.24,53:27:7.84|-88.9,5.34,2000 +Lyn 4A|HD 43812|BD+59 964|HR 2257|J062203.55+592219.5,f|D|A3,6:22:3.55|-5.58,59:22:19.56|0.6,6.09,2000 +Col Delta|SAO 196735|HD 44762|CD-33 2927|PPM 282573|HR 2296|J062206.82-332611.0,f|S|G7,6:22:6.83|-24.16,-33:26:11.04|-52.5,3.85,2000 +HD 44497|BD+12 1123|PPM 122364|HR 2287|J062236.39+123412.8,f|S|F0,6:22:36.39|-53.58,12:34:12.86|-32,6.00,2000 +Dor Pi1|SAO 249532|HD 45669|CP-69 607|PPM 355337|HR 2352|J062238.27-695902.5,f|S|K5,6:22:38.27|25.98,-69:59:2.56|34.8,5.55,2000 +Mirzam|Murzim|CMa Beta-2|Beta Canis Majoris|SAO 151428|HD 44743|SD-17 1467|HR 2294|J062241.98-175721.3,f|D|B1,6:22:41.99|-3.42,-17:57:21.30|-0.5,1.96,2000 +Pic Nu|SAO 234473|HD 45229|CP-56 1072|PPM 335136|J062255.82-562211.8,f|S|A0,6:22:55.83|-40.21,-56:22:11.89|-20,5.61,2000 +Calx|Tejat Posterior|Pish Pai|Gem Mu-13A|Mu Geminorium|HD 44478|BD+22 1304|PPM 95868|HR 2286|J062257.62+223048.9,f|D|M3,6:22:57.63|56.81,22:30:48.91|-108.8,2.90,2000 +V16859|SAO 249531|HD 45461|CP-63 561|PPM 355342|HR 2337|J062301.45-634059.2,f|V|M1,6:23:1.45|-17.09,-63:40:59.29|16.5,6.29,2000 +BD+57 963|J062306.36+565834.8,f|S|K0,6:23:6.37|-0.65,56:58:34.85|-72.7,6.50,2000 +SAO 196759|HD 44956|CD-31 3245|J062314.47-314725.1,f|S|G8,6:23:14.47|-43.22,-31:47:25.12|0.8,6.32,2000 +V16847|BD+03 1221|HR 2292|J062318.49+034552.1,f|V|B3,6:23:18.49|1.65,3:45:52.16|-9.6,6.39,2000 +V0721 MON|HD 44816|SD-09 1444|PPM 189122|J062335.91-095229.0,f|V|K5,6:23:35.92|-2.81,-9:52:29.02|4.8,6.16,2000 +SAO 234475|HD 45291|CP-52 913|PPM 335142|HR 2322|J062337.79-521051.2,f|S|G8,6:23:37.79|-16.28,-52:10:51.29|-14.3,5.97,2000 +Mon Epsilon-8A|HD 44769|BD+04 1236|HR 2298|J062346.08+043534.3,f|D|A5,6:23:46.09|-20.93,4:35:34.31|10.8,4.41,2000 +HD 44891|SD-14 1428|PPM 217127|J062346.14-150416.5,f|S|K2,6:23:46.14|0.14,-15:4:16.52|1.8,6.24,2000 +SAO 234482|CP-58 692|PPM 335146|HR 2336|J062346.92-583237.9,f|S|A3,6:23:46.93|9.55,-58:32:37.94|25.5,6.47,2000 +V16856|SAO 171688|CD-25 3189|HR 2311|J062355.91-253439.4,f|V|K5,6:23:55.92|3.52,-25:34:39.47|-40.9,5.61,2000 +Canopus|Suhel|Suhail|Car Alpha|HD 45348|CP-52 914|PPM 335149|HR 2326|J062357.10-524144.3,f|S|F0,6:23:57.11|20.00,-52:41:44.38|23.7,-0.46,2000 +SAO 196774|HD 45145|CD-36 2873|PPM 282622|HR 2316|J062401.00-364227.9,f|D|G6,6:24:1.01|-12.75,-36:42:27.95|54.7,5.62,2000 +SAO 113817|HD 44783|BD+08 1316|J062402.28+085306.0,f|S|B8,6:24:2.28|-10.82,8:53:6.05|-9,6.23,2000 +SAO 151458|HD 44951|SD-11 1478|PPM 217143|J062410.32-113148.3,f|S|K3,6:24:10.32|-55.56,-11:31:48.32|-32.1,5.21,2000 +SAO 249535|HD 45557|CP-60 608|PPM 355353|HR 2345|J062413.84-601652.7,f|S|A0,6:24:13.84|-30.79,-60:16:52.77|30,5.78,2000 +V16857|SAO 151461|HD 44996|SD-12 1470|PPM 217144|J062420.57-125742.9,f|D|B5,6:24:20.58|-3.36,-12:57:42.98|3.7,6.13,2000 +SAO 249539|CP-63 568|PPM 355358|HR 2354|J062426.59-632544.1,f|S|G3,6:24:26.60|19.39,-63:25:44.15|-116,6.45,2000 +BD+25 1255|PPM 95919|J062443.74+250255.3,f|S|K0,6:24:43.75|1.77,25:2:55.37|-1.7,6.33,2000 +SAO 171711|HD 45184|CD-28 2981|HR 2318|J062443.87-284648.4,f|S|G2,6:24:43.88|-164.86,-28:46:48.41|-120.7,6.37,2000 +CD-40 2440|HR 2323|J062444.49-401702.3,f|S|B9,6:24:44.50|-2.63,-40:17:2.33|-3.7,6.30,2000 +HD 44867|BD+16 1135|PPM 122426|J062452.76+160325.6,f|S|G9,6:24:52.77|23.35,16:3:25.67|-41.4,6.34,2000 +Aur Psi-46|Psi1 Aurigae|HD 44537|BD+49 1488|HR 2289|J062453.90+491716.4,f|V|K5,6:24:53.90|0.78,49:17:16.41|-2.5,4.95,2000 +V16868|SAO 249542|HD 45796|CP-63 572|PPM 355368|J062455.79-634941.3,f|V|B6,6:24:55.80|-5.43,-63:49:41.32|12.2,6.26,2000 +T MON|SAO 113845|BD+07 1273|J062513.00+070508.5,f|V|F7,6:25:13.00|2.83,7:5:8.57|-1.5,6.26,2000 +SAO 133229|BD-00 1287|PPM 176254|HR 2313|J062516.54-005645.1,f|S|F8,6:25:16.55|238.32,-0:56:45.18|-218,5.88,2000 +BL ORI|HD 44984|BD+14 1283|PPM 122445|J062528.17+144319.1,f|V|C6,6:25:28.17|-3.05,14:43:19.17|-4.6,6.30,2000 +Dor Pi2|HD 46116|CP-69 614|HR 2377|J062528.62-694125.0,f|S|G8,6:25:28.63|-13.28,-69:41:25.08|200.8,5.38,2000 +HD 45383|CD-34 2864|PPM 282657|HR 2329|J062530.00-350350.9,f|D|K3,6:25:30.01|0.12,-35:3:50.95|-46.2,6.25,2000 +HD 44927|BD+23 1347|PPM 95944|J062532.93+231937.8,f|D|A2,6:25:32.94|-5.92,23:19:37.81|-16.6,6.06,2000 +SAO 217922|HD 45572|CD-48 2308|HR 2348|J062543.65-481036.8,f|D|B9,6:25:43.65|-3.80,-48:10:36.83|-20.3,5.79,2000 +SAO 133238|HD 45168|SD-03 1425|PPM 189154|HR 2317|J062547.13-035320.5,f|S|G9,6:25:47.13|-7.78,-3:53:20.52|-3,6.32,2000 +BD+11 1169|PPM 122462|J062552.32+110733.1,f|S|A0,6:25:52.33|-7.65,11:7:33.18|-9.6,6.39,2000 +SAO 133246|HD 45239|SD-07 1422|PPM 189159|HR 2321|J062558.82-075341.9,f|S|A4,6:25:58.83|-0.30,-7:53:41.94|-3.5,6.41,2000 +SAO 133248|HD 45215|SD-03 1430|PPM 189166|J062609.55-033056.4,f|S|G5,6:26:9.55|-92.08,-3:30:56.49|65.1,6.43,2000 +RR LYN|HD 44691|BD+56 1125|HR 2291|J062625.83+561706.3,f|V|A3,6:26:25.84|-25.23,56:17:6.35|21.6,5.54,2000 +SAO 133257|HD 45321|SD-04 1510|PPM 189171|HR 2325|J062634.44-043550.6,f|S|B2,6:26:34.44|-3.74,-4:35:50.64|-2.6,6.15,2000 +BD-01 1242|PPM 176266|HR 2324|J062639.58-013026.4,f|S|A3,6:26:39.59|-10.05,-1:30:26.41|-29.4,5.88,2000 +SAO 151512|SD-14 1450|J062642.65-143612.3,f|S|K0,6:26:42.66|2.18,-14:36:12.34|-11.7,6.33,2000 +V16865|SAO 133263|SD-07 1429|PPM 189173|HR 2328|J062644.85-073042.9,f|D|A0,6:26:44.85|4.61,-7:30:42.97|-11.8,6.33,2000 +Lyn 5A|BD+58 927|HR 2293|J062648.87+582502.6,f|D|K4,6:26:48.87|-5.50,58:25:2.67|-1.8,5.19,2000 +Mon 9|SAO 133267|HD 45418|SD-04 1514|PPM 189176|J062700.87-042120.3,f|S|B4,6:27:0.88|-4.94,-4:21:20.37|-4.1,6.50,2000 +SAO 234519|HD 45984|CP-57 1001|PPM 335191|HR 2369|J062704.12-580007.6,f|S|K3,6:27:4.13|-8.50,-58:0:7.62|-4.4,5.82,2000 +SAO 196842|CD-37 2837|PPM 282696|HR 2353|J062707.58-375343.8,f|D|F3,6:27:7.58|-1.42,-37:53:43.83|44.8,6.49,2000 +SAO 171774|HD 45588|CD-25 3237|HR 2349|J062711.36-255123.3,f|D|F9,6:27:11.37|-171.56,-25:51:23.39|-215.8,6.06,2000 +77 Ori|HD 45416|BD+00 1426|HR 2334|J062713.76+001757.2,f|S|K1,6:27:13.76|2.85,0:17:57.29|-8.3,5.19,2000 +78 Ori|SAO 133269|HD 45433|BD-00 1299|PPM 176271|HR 2335|J062715.59-001633.5,f|S|K5,6:27:15.59|1.65,-0:16:33.60|-5.2,5.55,2000 +HD 45415|BD+02 1237|HR 2333|J062720.45+025429.8,f|S|G9,6:27:20.45|-43.44,2:54:29.84|13,5.55,2000 +HD 45192|BD+32 1300|PPM 71634|HR 2319|J062735.52+323346.6,f|S|K0,6:27:35.52|6.95,32:33:46.60|-67.6,6.46,2000 +Gem 16|HD 45394|BD+20 1428|J062756.67+202946.7,f|S|A2,6:27:56.67|-29.08,20:29:46.75|12.9,6.22,2000 +Mon 10A|HD 45546|SD-04 1526|PPM 189195|HR 2344|J062757.56-044543.7,f|D|B2,6:27:57.57|-4.19,-4:45:43.76|-3.1,5.05,2000 +CMa Lambda|SAO 196857|HD 45813|CD-32 3066|PPM 282725|HR 2361|J062810.20-323448.2,f|S|B4,6:28:10.21|-13.78,-32:34:48.25|24.2,4.47,2000 +HD 44472|BD+70 401|PPM 6311|HR 2285|J062814.48+703207.1,f|D|A4,6:28:14.48|-0.75,70:32:7.15|11.8,6.04,2000 +SAO 113929|HD 45563|BD+02 1244|HR 2347|J062816.76+015445.6,f|D|B9,6:28:16.77|-6.75,1:54:45.65|-15.3,6.47,2000 +HD 45512|BD+10 1149|PPM 122526|HR 2342|J062818.81+101814.0,f|S|K2,6:28:18.81|27.89,10:18:14.02|-43.7,6.15,2000 +BD+16 1159|PPM 122532|J062828.05+161418.1,f|S|G5,6:28:28.05|-91.16,16:14:18.19|-48.6,6.24,2000 +Aur 48|RT AUR|HD 45412|BD+30 1238|PPM 71665|HR 2332|J062834.08+302934.9,f|V|F8,6:28:34.09|0.39,30:29:34.92|-15,5.75,2000 +SAO 151546|HD 45765|SD-17 1506|PPM 217239|HR 2359|J062837.41-172757.6,f|S|G5,6:28:37.42|16.88,-17:27:57.63|9.8,5.76,2000 +IY CMA|SAO 196861|HD 45871|CD-32 3072|PPM 282733|HR 2364|J062839.24-322216.6,f|D|B4,6:28:39.24|-2.15,-32:22:16.61|7.6,5.75,2000 +SAO 217951|HD 45983|CD-40 2482|HR 2368|J062842.42-410429.5,f|S|F2,6:28:42.43|39.58,-41:4:29.56|13.9,6.33,2000 +Mon Beta-11A|Beta Monocerotis|SAO 133316|HD 45725|SD-06 1574|HR 2356|J062849.07-070159.0,f|D|B3,6:28:49.07|-7.00,-7:1:59.02|-5,4.64,2000 +Mon Beta-11A|Beta Monocerotis|SAO 133317|HD 45726|SD-06 1575A|HR 2357|J062849.42-070203.8,f|D|B3,6:28:49.42|-7.00,-7:2:3.88|-5,5.01,2000 +Mon Beta-11B|Beta Monocerotis|SAO 133317|HD 45727|SD-06 1575B|HR 2358|J062849.61-070204.7,f|D|B3,6:28:49.61|-7.00,-7:2:4.76|-5,5.34,2000 +Gem Nu-18A|HD 45542|BD+20 1441|HR 2343|J062857.78+201243.6,f|D|B6,6:28:57.79|-6.05,20:12:43.68|-14.1,4.14,2000 +V16875|HD 45724|BD+02 1253|HR 2355|J062914.81+023846.3,f|D|M5,6:29:14.81|-2.25,2:38:46.30|-39.9,6.18,2000 +V3000|SAO 234541|HD 46355|CP-56 1095|PPM 335223|HR 2389|J062928.49-565109.9,f|V|K0,6:29:28.50|-38.14,-56:51:9.96|32.3,5.20,2000 +V16887|SAO 234539|HD 46273|CD-50 2241|HR 2384|J062949.06-501420.7,f|D|F2,6:29:49.07|-67.54,-50:14:20.70|-51.8,5.29,2000 +Aur 47|HD 45466|BD+46 1149|HR 2338|J063002.97+464107.9,f|S|K5,6:30:2.97|-6.69,46:41:7.99|7.5,5.87,2000 +SAO 249568|CP-65 610|PPM 355437|J063003.01-653405.6,f|S|F0,6:30:3.01|1.12,-65:34:5.67|59.8,6.27,2000 +SAO 151573|HD 45976|SD-09 1493|PPM 217281|HR 2367|J063011.27-100453.4,f|S|K0,6:30:11.28|-7.24,-10:4:53.44|-2.3,5.91,2000 +V16880|SAO 151577|SD-19 1464|PPM 217282|J063011.81-191253.6,f|V|M0,6:30:11.82|6.37,-19:12:53.60|-22,6.45,2000 +V16882|SAO 151585|SD-13 1519|PPM 217292|HR 2373|J063034.88-130853.4,f|D|B1,6:30:34.89|-4.82,-13:8:53.42|1.4,6.16,2000 +SAO 171866|HD 46189|CD-27 3051|J063046.28-274610.4,f|S|B2,6:30:46.29|-7.57,-27:46:10.47|5.9,5.92,2000 +Lyn 6|BD+58 932|HR 2331|J063047.10+580945.4,f|D|K0,6:30:47.11|-29.99,58:9:45.48|-338.9,5.86,2000 +SAO 217986|HD 46365|CD-40 2512|J063059.89-405458.5,f|S|K3,6:30:59.89|-6.12,-40:54:58.51|10.9,6.17,2000 +V16885|HD 45995|BD+11 1204|PPM 122591|J063109.56+111504.9,f|D|B2,6:31:9.56|4.56,11:15:4.95|-2.5,6.15,2000 +HD 45951|BD+17 1275|PPM 122593|HR 2366|J063110.03+165618.6,f|D|K2,6:31:10.03|-1.43,16:56:18.64|-53,6.20,2000 +AE PIC|SAO 249572|HD 46792|CP-61 669|PPM 355451|J063110.63-615246.3,f|V|B3,6:31:10.64|-9.54,-61:52:46.36|10.7,6.15,2000 +SAO 196897|HD 46349|CD-35 2947|PPM 282776|HR 2388|J063113.09-351531.8,f|S|G8,6:31:13.10|-2.45,-35:15:31.82|8.6,5.83,2000 +SAO 234551|HD 46569|CD-51 1946|PPM 335243|J063118.31-514933.4,f|S|F8,6:31:18.32|102.53,-51:49:33.43|104.6,5.58,2000 +HD 46184|SD-12 1518|PPM 217312|HR 2379|J063123.04-122331.0,f|D|K3,6:31:23.04|42.05,-12:23:31.03|-17.9,5.16,2000 +KM CMA|HD 46347|CD-32 3121|PPM 282783|J063123.99-325206.7,f|V|M4,6:31:24.00|-17.01,-32:52:6.78|6.9,6.34,2000 +SX COL|HD 46431|CD-36 2962|PPM 282785|HR 2393|J063134.94-365624.0,f|V|M1,6:31:34.95|1.56,-36:56:24.10|69.7,6.29,2000 +Gem 19|BD+16 1178|HR 2371|J063137.43+155412.6,f|S|A8,6:31:37.43|-7.79,15:54:12.61|-13.3,6.38,2000 +BD+11 1209|PPM 122614|HR 2375|J063148.29+113239.8,f|S|A3,6:31:48.30|17.64,11:32:39.88|28.2,5.22,2000 +SAO 133369|HD 46229|SD-08 1462|PPM 189268|HR 2381|J063150.06-080929.6,f|S|K5,6:31:50.06|-9.21,-8:9:29.65|-22.2,5.42,2000 +CMa Xi1-4A|Xi1 Canis Majoris|SAO 171895|HD 46328|CD-23 3991|HR 2387|J063151.36-232506.3,f|D|B0,6:31:51.37|-2.75,-23:25:6.32|6.5,4.33,2000 +Pic Mu|V16917|SAO 234564|CP-58 722|PPM 335251|HR 2412|J063158.31-584513.8,f|D|B9,6:31:58.31|-0.70,-58:45:13.81|2.4,5.72,2000 +Gem 21A|HD 46136|BD+17 1286A|PPM 122629|J063218.54+174703.6,f|D|F8,6:32:18.55|36.42,17:47:3.66|26,6.26,2000 +Mon 12|V3017|HD 46241|BD+04 1304|HR 2382|J063219.20+045121.5,f|V|K0,6:32:19.21|-35.57,4:51:21.60|1.6,5.85,2000 +SAO 196917|HD 46568|CD-37 2889|PPM 282797|HR 2399|J063221.38-374148.1,f|S|G8,6:32:21.39|73.35,-37:41:48.13|-77.4,5.25,2000 +SAO 133382|SD-05 1678|HR 2386|J063223.12-055207.7,f|D|F0,6:32:23.13|-0.90,-5:52:7.75|-41.8,5.61,2000 +HD 46178|BD+11 1213|PPM 122633|HR 2378|J063223.27+114024.6,f|D|K0,6:32:23.27|1.62,11:40:24.67|-35.4,6.05,2000 +WW AUR|BD+32 1324|PPM 71742|HR 2372|J063227.18+322717.6,f|V|A3,6:32:27.18|-26.45,32:27:17.63|-17.5,5.82,2000 +V16912|SAO 196919|HD 46547|CD-31 3407A|HR 2397|J063238.97-320149.6,f|D|B2,6:32:38.98|-2.80,-32:1:49.61|2.9,5.72,2000 +HR CMA|SAO 151625|SD-11 1520|PPM 217337|HR 2392|J063246.87-110958.9,f|V|G9,6:32:46.87|-15.89,-11:9:58.97|6.2,6.26,2000 +Mon 13|V16904|BD+07 1337|HR 2385|J063254.22+071958.6,f|V|A0,6:32:54.23|-3.87,7:19:58.67|-5.8,4.51,2000 +HD 46727|CD-38 2730|PPM 282811|J063310.23-383730.6,f|S|G8,6:33:10.24|-0.94,-38:37:30.68|-18.5,6.43,2000 +SAO 234574|CP-52 947|HR 2416|J063326.28-521945.2,f|S|G8,6:33:26.28|-32.91,-52:19:45.24|34.4,6.19,2000 +SD-20 1437|J063326.67-205526.2,f|S|G5,6:33:26.67|-17.79,-20:55:26.26|-27.5,6.40,2000 +HD 46374|BD+14 1339|PPM 122668|HR 2391|J063336.16+140918.5,f|S|K5,6:33:36.16|-14.25,14:9:18.59|-87,5.56,2000 +HD 46487|BD-01 1274|PPM 176316|HR 2395|J063337.92-011312.5,f|S|B5,6:33:37.92|2.10,-1:13:12.55|-17.7,5.09,2000 +SAO 196945|HD 46815|CD-36 2990|HR 2411|J063349.48-361355.3,f|S|K3,6:33:49.48|-15.37,-36:13:55.30|98,5.41,2000 +Lyn 7|BQ LYN|BD+55 1093|HR 2376|J063432.79+552110.9,f|V|K0,6:34:32.80|2.73,55:21:10.95|5.2,6.45,2000 +SAO 196955|HD 46936|CD-32 3168|PPM 282843|HR 2415|J063435.33-324258.5,f|S|B8,6:34:35.33|3.16,-32:42:58.52|2.7,5.62,2000 +Mon 14|V3031|HD 46642|BD+07 1357|J063446.31+073420.9,f|D|A0,6:34:46.32|-16.80,7:34:20.93|-7.4,6.46,2000 +SAO 234589|CP-52 953|PPM 335291|HR 2435|J063458.57-525832.1,f|S|A0,6:34:58.58|-7.68,-52:58:32.19|11.3,4.38,2000 +CMa Xi2-5|SAO 171982|HD 46933|SD-22 1458|HR 2414|J063503.38-225753.2,f|S|A0,6:35:3.39|13.12,-22:57:53.26|16.5,4.53,2000 +Aur 49|V3032|HD 46553|BD+28 1168|PPM 96215|HR 2398|J063512.06+280120.3,f|V|A0,6:35:12.06|-0.40,28:1:20.33|-12.5,5.27,2000 +HD 46769|BD+00 1491|J063515.82+005324.7,f|S|B8,6:35:15.83|-3.30,0:53:24.78|-2.3,5.80,2000 +BD+10 1186|J063517.59+095918.0,f|S|K4,6:35:17.60|0.30,9:59:18.01|-7.7,5.89,2000 +V16928|SAO 196978|HD 47144|CD-36 3009|PPM 282865|HR 2424|J063524.21-364647.5,f|D|A0,6:35:24.22|-8.29,-36:46:47.57|20.8,5.79,2000 +SAO 171992|SD-21 1514|J063530.81-220632.5,f|S|K0,6:35:30.82|9.59,-22:6:32.59|-21.4,6.31,2000 +SAO 196987|CD-35 3005|PPM 282875|HR 2431|J063554.03-360519.1,f|D|G0,6:35:54.03|-59.88,-36:5:19.11|-73,6.37,2000 +CMa Nu1-6A|SAO 151694|HD 47138|SD-18 1480|PPM 217418|HR 2423|J063622.85-183935.6,f|D|G8,6:36:22.85|-11.80,-18:39:35.65|16.8,5.70,2000 +UU AUR|HD 46687|BD+38 1539|PPM 71846|J063632.83+382643.8,f|D|C5,6:36:32.84|-1.76,38:26:43.80|-21.4,5.43,2000 +SAO 133469|SD-05 1710|PPM 189354|HR 2418|J063635.33-051240.1,f|S|B8,6:36:35.33|2.99,-5:12:40.12|-14.3,5.52,2000 +CMa Nu2-7|V3047|SD-19 1502|PPM 217422|HR 2429|J063641.03-191521.1,f|V|K1,6:36:41.04|62.31,-19:15:21.16|-69.9,3.95,2000 +V16934|HD 47247|CD-22 3272|HR 2433|J063641.06-223653.0,f|D|B5,6:36:41.06|-8.03,-22:36:53.03|7.7,6.41,2000 +V16932|HD 47182|SD-13 1570|PPM 217427|HR 2428|J063646.59-131915.7,f|V|K5,6:36:46.60|-2.19,-13:19:15.73|-24.3,5.95,2000 +HD 47475|CD-41 2488|HR 2445|J063651.27-413325.7,f|S|K0,6:36:51.28|1.23,-41:33:25.71|5.6,6.35,2000 +HD 47463|CD-38 2782|HR 2444|J063701.88-380847.4,f|D|K0,6:37:1.89|-1.53,-38:8:47.42|45.2,6.03,2000 +CD-36 3031|PPM 282911|HR 2446|J063713.83-365926.3,f|D|B7,6:37:13.83|-9.82,-36:59:26.34|13.6,5.73,2000 +Plaskett's Star|V0640 MON|SAO 114146|HD 47129|BD+06 1309|HR 2422|J063724.04+060807.3,f|V|O8,6:37:24.04|-1.79,6:8:7.38|0.7,6.06,2000 +BD+24 1328|PPM 96264|HR 2417|J063727.28+243527.0,f|S|A3,6:37:27.29|-3.96,24:35:27.06|2.6,6.48,2000 +HD 47156|BD+10 1201|HR 2426|J063736.89+105111.8,f|S|K0,6:37:36.89|-38.01,10:51:11.86|-32.7,6.38,2000 +Lyn 11|BD+56 1136|J063738.38+565127.1,f|S|A2,6:37:38.39|-9.27,56:51:27.11|9.8,5.88,2000 +SAO 114154|BD+02 1315|J063740.32+024214.9,f|S|K1,6:37:40.33|-39.41,2:42:14.97|-49.4,6.17,2000 +SAO 151725|HD 47366|SD-12 1566|PPM 217452|HR 2437|J063740.79-125906.4,f|S|K0,6:37:40.79|9.21,-12:59:6.42|-124.8,6.11,2000 +Lyn 8A|BD+61 893|HR 2394|J063741.38+612852.4,f|D|G8,6:37:41.39|-208.19,61:28:52.44|-274.6,5.94,2000 +Alhena|Gem Gamma-24A|BD+16 1223|PPM 122774|HR 2421|J063742.70+162357.3,f|D|A1,6:37:42.70|-2.01,16:23:57.31|-66.9,2.02,2000 +Pup Nu|V3062|CD-43 2576|HR 2451|J063745.67-431145.3,f|V|B8,6:37:45.67|-0.44,-43:11:45.36|-4,3.18,2000 +HD 47536|CD-32 3216|PPM 282919|HR 2447|J063747.61-322023.0,f|S|K2,6:37:47.62|108.99,-32:20:23.05|64.1,5.26,2000 +V0731 MON|SAO 114162|BD+05 1334|HR 2432|J063752.70+045724.0,f|V|B1,6:37:52.70|-0.15,4:57:24.01|1.3,6.18,2000 +CMa Nu3-8|HD 47442|SD-18 1492|HR 2443|J063753.42-181414.9,f|S|K0,6:37:53.42|-6.84,-18:14:14.92|-8.5,4.43,2000 +HD 45947|BD+73 340|PPM 6369|HR 2365|J063754.89+734144.2,f|S|F2,6:37:54.89|-169.54,73:41:44.29|2.7,6.25,2000 +HD 48189|CP-61 688|PPM 355527|HR 2468|J063800.36-613200.1,f|D|G1,6:38:0.36|-50.05,-61:32:0.19|72.7,6.18,2000 +SAO 133511|SD-02 1691|PPM 176357|J063820.45-023238.0,f|S|K2,6:38:20.46|-14.39,-2:32:38.03|6.5,6.12,2000 +HD 47579|CD-23 4144|J063822.90-233449.1,f|S|G5,6:38:22.91|-1.92,-23:34:49.16|-8.1,6.49,2000 +Aur 53|HD 47152|BD+29 1293|PPM 96293|HR 2425|J063823.00+285903.7,f|D|B9,6:38:23.00|-18.76,28:59:3.72|-15.5,5.75,2000 +SAO 151737|HD 47561|SD-16 1554|PPM 217469|HR 2448|J063835.42-165224.7,f|S|A1,6:38:35.43|-8.33,-16:52:24.77|-24.8,6.02,2000 +HD 47973|CD-48 2417|HR 2462|J063837.63-481312.6,f|D|G8,6:38:37.64|3.90,-48:13:12.66|19.8,5.03,2000 +V0689 MON|SAO 114191|HD 47432|BD+01 1443|HR 2442|J063838.18+013648.6,f|V|O9,6:38:38.19|0.15,1:36:48.67|-2.4,6.24,2000 +Aur 51|BD+39 1690|PPM 71893|HR 2419|J063839.53+392327.0,f|S|K5,6:38:39.54|-22.03,39:23:27.07|-107.5,5.70,2000 +Aur Psi-52|BD+40 1665|PPM 71895|J063849.18+395409.2,f|S|B8,6:38:49.18|-8.40,39:54:9.21|-12,5.35,2000 +HD 47358|BD+22 1416|HR 2436|J063905.30+220151.1,f|S|G9,6:39:5.30|13.21,22:1:51.17|-24.2,6.09,2000 +SAO 151751|HD 47667|SD-14 1525|PPM 217486|J063916.71-140844.7,f|S|K2,6:39:16.72|4.65,-14:8:44.75|-7,4.82,2000 +Aur Psi-50A|HD 47174|BD+42 1585|PPM 49219|HR 2427|J063919.82+422919.9,f|D|K2,6:39:19.83|-1.00,42:29:19.96|-55.7,4.79,2000 +HD 47415|BD+24 1343|PPM 96322|HR 2439|J063931.48+243600.5,f|S|F8,6:39:31.48|19.37,24:36:0.58|90.2,6.43,2000 +Aur 54|V3065|HD 47395|BD+28 1196|PPM 96324|HR 2438|J063933.12+281547.2,f|D|B7,6:39:33.12|-5.68,28:15:47.28|-9.8,6.06,2000 +HD 47827|CD-23 4172|HR 2455|J063936.22-234144.3,f|D|A0,6:39:36.22|4.40,-23:41:44.38|-7.8,6.05,2000 +HD 47946|CD-30 3386|PPM 282961|J063942.66-302813.7,f|S|K0,6:39:42.66|-7.37,-30:28:13.77|-191.9,5.71,2000 +HD 47575|BD+13 1356|PPM 122832|HR 2449|J063947.71+125857.9,f|D|A2,6:39:47.72|-15.06,12:58:57.97|-14.1,5.98,2000 +BD+44 1506|PPM 49227|HR 2434|J063957.88+440050.8,f|S|K1,6:39:57.89|22.33,44:0:50.81|4.1,6.35,2000 +Men Zeta|SAO 258451|CP-80 196|HR 2559|J064002.89-804848.9,f|S|A5,6:40:2.89|-5.08,-80:48:48.93|53.4,5.61,2000 +HD 45866|BD+78 227|PPM 6388|HR 2363|J064028.87+775944.8,f|S|K5,6:40:28.88|14.26,77:59:44.82|-6,5.73,2000 +SAO 114244|HD 47756|BD+06 1338|HR 2454|J064031.94+062216.5,f|S|B8,6:40:31.95|-2.68,6:22:16.50|-0.1,6.50,2000 +BD+71 359|PPM 6389|HR 2396|J064032.25+714455.6,f|S|K0,6:40:32.25|4.23,71:44:55.63|10.7,5.86,2000 +SAO 256326|HD 49268|CP-71 476|PPM 369259|J064057.60-714630.6,f|D|K1,6:40:57.60|22.14,-71:46:30.69|-40.8,6.50,2000 +Mon 15A|S MON|SAO 114258|HD 47839|BD+10 1220|HR 2456|J064058.66+095344.7,f|D|O7,6:40:58.66|-0.74,9:53:44.72|-2.5,4.67,2000 +SAO 114269|HD 47964|BD+00 1546|HR 2461|J064105.44+002943.1,f|S|B8,6:41:5.44|-7.50,0:29:43.15|-5,5.79,2000 +SAO 218126|HD 48383|CD-40 2625|HR 2475|J064114.16-402059.4,f|D|B4,6:41:14.17|-5.72,-40:20:59.45|10.6,6.15,2000 +V17110|HD 47886|BD+11 1273|PPM 122874|HR 2458|J064117.22+110011.5,f|V|M1,6:41:17.22|5.01,11:0:11.51|7.5,6.20,2000 +Gem 25A|HD 47731|BD+28 1207|PPM 96376|HR 2453|J064120.89+281147.8,f|D|G5,6:41:20.90|0.53,28:11:47.90|-2.5,6.43,2000 +HD 47863|BD+16 1242|PPM 122879|HR 2457|J064121.94+162351.5,f|S|A1,6:41:21.94|-4.75,16:23:51.54|-4.2,6.29,2000 +BD+36 1482|PPM 71947|HR 2452|J064137.75+355554.9,f|S|F8,6:41:37.76|-17.85,35:55:54.94|-25.9,6.48,2000 +SAO 133585|HD 48217|SD-09 1601|PPM 189456|HR 2469|J064156.38-091003.1,f|S|M0,6:41:56.39|34.95,-9:10:3.13|-46.1,5.21,2000 +SAO 114293|BD+06 1351|HR 2467|J064159.23+062043.5,f|S|O6,6:41:59.23|0.75,6:20:43.53|2.4,6.38,2000 +Gem 26|BD+17 1357|HR 2466|J064224.32+173843.0,f|S|A2,6:42:24.33|7.00,17:38:43.09|-86.9,5.29,2000 +V3181|SD-22 1505|HR 2481|J064246.04-222654.9,f|D|F2,6:42:46.04|-54.07,-22:26:54.92|100.9,6.23,2000 +Aur Psi-55|HD 47914|BD+44 1518|PPM 49271|HR 2459|J064304.97+443128.0,f|S|K5,6:43:4.97|-45.02,44:31:28.02|-30.3,5.03,2000 +SAO 114312|HD 48348|BD+03 1371|HR 2474|J064306.61+030201.6,f|S|K0,6:43:6.61|9.29,3:2:1.68|-9.3,6.18,2000 +BD+37 1567|PPM 71988|HR 2464|J064313.74+370850.5,f|S|K0,6:43:13.74|25.23,37:8:50.55|-22.5,6.21,2000 +SAO 197134|HD 48797|CD-39 2798|HR 2488|J064323.35-391135.2,f|S|A8,6:43:23.35|-2.91,-39:11:35.23|-15.1,6.29,2000 +HD 49947|CP-72 522|PPM 369277|HR 2531|J064336.75-730705.5,f|S|G8,6:43:36.76|12.41,-73:7:5.55|-98.3,6.36,2000 +V17164|SAO 114324|HD 48434|BD+04 1414|PPM 151123|HR 2479|J064338.64+035557.1,f|V|B0,6:43:38.65|-0.60,3:55:57.10|-2.9,5.88,2000 +Mebsuta|Meboula|Melucta|Gem Epsilon-27A|V3183|HD 48329|BD+25 1406|PPM 96453|HR 2473|J064355.92+250752.0,f|D|G8,6:43:55.93|-5.98,25:7:52.05|-12.8,3.01,2000 +Gem 30|HD 48433|BD+13 1390|PPM 122951|HR 2478|J064359.29+131340.8,f|D|K0,6:43:59.29|-2.34,13:13:40.86|-51.8,4.49,2000 +HD 47979|BD+53 1056|HR 2463|J064411.51+531745.3,f|S|K0,6:44:11.51|34.70,53:17:45.38|-201,6.29,2000 +HD 48272|BD+36 1494|HR 2471|J064412.52+360633.3,f|S|A2,6:44:12.52|5.21,36:6:33.33|-0.1,6.38,2000 +SAO 234683|HD 49219|CP-54 1097|J064412.79-544143.8,f|D|B5,6:44:12.79|-16.64,-54:41:43.83|6.7,6.47,2000 +CMa 10|FT CMA|SAO 197149|HD 48917|CD-30 3484|HR 2492|J064428.46-310413.8,f|D|B2,6:44:28.47|-3.08,-31:4:13.88|6.2,5.23,2000 +Gem 28|V3188|BD+29 1327|PPM 96473|J064445.45+285815.3,f|V|K4,6:44:45.46|-8.79,28:58:15.35|-23.7,5.42,2000 +SAO 172264|HD 48938|CD-27 3248|HR 2493|J064451.95-272029.9,f|S|G2,6:44:51.95|-6.13,-27:20:30.00|293.9,6.44,2000 +SAO 256331|CP-70 560|PPM 369289|HR 2536|J064455.64-702601.5,f|S|K3,6:44:55.65|-15.57,-70:26:1.53|5.9,6.10,2000 +Sirius|Canicula|Aschere|Dog Star|CMa Alpha-9A|V17173|SAO 151881|HD 48915|SD-16 1591|PPM 217626|HR 2491|J064508.91-164258.0,f|D|A1,6:45:8.92|-546.06,-16:42:58.02|-1223.1,-1.43,2000 +Alzirr|Gem Xi-31|V3193|HD 48737|BD+13 1396|PPM 122983|HR 2484|J064517.36+125344.1,f|V|F5,6:45:17.36|-115.22,12:53:44.13|-190.9,3.34,2000 +SAO 197171|CD-31 3640|J064522.93-314737.1,f|S|F6,6:45:22.94|-204.88,-31:47:37.18|-304.1,5.92,2000 +SAO 172273|CD-23 4325|HR 2495|J064523.36-232744.7,f|S|K0,6:45:23.36|-19.68,-23:27:44.76|23.4,6.04,2000 +HP CMA|SAO 197177|HD 49131|CD-30 3505A|J064531.18-305656.3,f|D|B2,6:45:31.19|-3.09,-30:56:56.33|4.2,5.70,2000 +SAO 234699|HD 49517|CP-52 998|PPM 335459|HR 2515|J064553.71-522434.8,f|S|K3,6:45:53.72|-3.57,-52:24:34.89|9.1,5.78,2000 +Gem 32|V3197|HD 48843|BD+12 1275|PPM 122997|HR 2489|J064554.19+124136.8,f|V|A9,6:45:54.20|-2.20,12:41:36.82|-2.6,6.47,2000 +SAO 151895|SD-14 1573|PPM 217647|HR 2498|J064559.39-144746.0,f|S|A2,6:45:59.39|-11.02,-14:47:46.06|-17.6,5.30,2000 +V0339 PUP|SAO 197195|HD 49336|CD-37 3065|J064612.14-374631.1,f|V|B4,6:46:12.15|-8.54,-37:46:31.17|9.5,6.20,2000 +Lyn 12A|BD+59 1015A|J064614.13+592630.0,f|D|A3,6:46:14.13|-18.15,59:26:30.01|-8.7,4.87,2000 +HD 46588|BD+79 212|PPM 6423|J064614.15+793353.3,f|S|F8,6:46:14.15|-99.03,79:33:53.32|-603.6,5.45,2000 +BD+59 1015B|J064614.36+592630.5,f|D|A2,6:46:14.36|-17.01,59:26:30.54|3.7,6.02,2000 +Mon 16|SAO 114388|HD 48977|BD+08 1486|PPM 151214|HR 2494|J064632.41+083513.7,f|S|B2,6:46:32.42|-5.04,8:35:13.75|-6.8,5.91,2000 +SAO 151911|HD 49147|SD-09 1644|PPM 217668|J064639.01-100626.4,f|S|B9,6:46:39.02|-10.78,-10:6:26.50|0.8,5.66,2000 +Aur Psi-56A|HD 48682|BD+43 1595|PPM 49322|HR 2483|J064644.33+433438.7,f|D|G0,6:46:44.34|-0.33,43:34:38.74|165.5,5.25,2000 +Lyn 13|HD 48432|BD+57 1004|HR 2477|J064649.50+571009.0,f|S|K0,6:46:49.51|13.91,57:10:9.03|-38.8,5.34,2000 +CMa 11|SAO 151919|HD 49229|SD-14 1584|PPM 217672|J064651.09-142533.4,f|S|B9,6:46:51.09|-3.20,-14:25:33.49|10.2,5.28,2000 +V17196|HD 49689|CD-51 2078|PPM 335469|HR 2523|J064652.67-511556.4,f|V|K1,6:46:52.67|-22.06,-51:15:56.40|-89.6,5.38,2000 +CP-86 105|PPM 376717|HR 2848|J064658.57-870129.8,f|S|F3,6:46:58.57|4.64,-87:1:29.87|4.2,6.47,2000 +CMa 12|HK CMA|SAO 172318|HD 49333|SD-20 1576|J064701.48-210055.4,f|V|B7,6:47:1.48|-15.12,-21:0:55.45|6.2,6.07,2000 +V0448 CAR|HD 49877|CP-55 1063|PPM 335476|HR 2526|J064718.70-553223.9,f|V|K5,6:47:18.71|-0.85,-55:32:23.96|25.1,5.60,2000 +Mon 17|HD 49161|BD+08 1496|PPM 151239|J064719.83+080214.1,f|S|K4,6:47:19.83|-23.32,8:2:14.11|-11.8,4.77,2000 +SAO 197215|HD 49591|CD-37 3080|PPM 283127|HR 2518|J064721.39-375546.9,f|D|B9,6:47:21.40|-9.94,-37:55:46.91|-10.6,5.27,2000 +BD+18 1349|HR 2499|J064723.45+181136.4,f|D|A2,6:47:23.46|0.00,18:11:36.43|-43.1,6.36,2000 +V3213|SAO 133679|HD 49331|SD-08 1558|PPM 189527|J064737.22-085954.6,f|V|M1,6:47:37.22|-4.15,-8:59:54.61|-0.6,5.09,2000 +Aur Psi-57|HD 48781|BD+48 1436|PPM 49341|HR 2487|J064739.57+484722.1,f|S|K0,6:47:39.58|-5.24,48:47:22.11|6.4,5.22,2000 +Mon 18|SAO 114428|HD 49293|BD+02 1397|PPM 151262|J064751.64+022443.7,f|S|K0,6:47:51.65|-13.04,2:24:43.77|-12.4,4.47,2000 +Pic Alpha|SAO 249647|CP-61 720|PPM 355624|J064811.45-615629.0,f|S|A7,6:48:11.45|-68.37,-61:56:29.01|242,3.25,2000 +HD 48767|BD+55 1122B|HR 2485|J064812.29+554215.1,f|D|F5,6:48:12.29|57.73,55:42:15.10|-104.8,6.41,2000 +V3202|HD 48766|BD+55 1122A|HR 2486|J064812.82+554216.1,f|D|F5,6:48:12.83|57.73,55:42:16.15|-104.8,6.27,2000 +SAO 133687|HD 49434|BD-01 1386|PPM 176439|HR 2514|J064819.06-011908.1,f|S|F1,6:48:19.07|-37.79,-1:19:8.12|-34.3,5.75,2000 +V17203|SAO 151962|HD 49662|SD-14 1599|PPM 217716|HR 2522|J064857.73-150841.0,f|D|B6,6:48:57.74|-0.58,-15:8:41.01|-6,5.40,2000 +V0715 MON|SAO 114465|HD 49567|BD+01 1531|PPM 151313|HR 2517|J064903.65+010007.4,f|V|B3,6:49:3.66|-0.90,1:0:7.43|-3,6.16,2000 +SAO 133718|HD 49643|SD-02 1776|HR 2521|J064916.40-021619.3,f|D|B8,6:49:16.41|-8.84,-2:16:19.37|-4.3,5.76,2000 +IS GEM|BD+32 1414|PPM 72126|HR 2512|J064941.31+323624.3,f|V|K3,6:49:41.31|-39.68,32:36:24.32|-50.7,5.72,2000 +SAO 172389|HD 49891|CD-23 4438|HR 2528|J064944.00-240433.8,f|D|A0,6:49:44.00|0.96,-24:4:33.84|-13.6,6.50,2000 +Gem 33|OV GEM|BD+16 1298|HR 2519|J064949.83+161210.3,f|D|B7,6:49:49.84|-14.98,16:12:10.40|-10.4,5.87,2000 +CMa Kappa-13|Kappa Canis Majoris|SAO 197258|CD-32 3404|PPM 283177|HR 2538|J064950.45-323030.5,f|S|B1,6:49:50.46|-9.23,-32:30:30.52|4,3.53,2000 +V0415 CAR|SAO 234737|CP-53 1168|HR 2554|J064951.31-533720.8,f|V|G6,6:49:51.31|-2.31,-53:37:20.82|17.6,4.41,2000 +SAO 218235|CD-46 2703|PPM 311162|HR 2548|J064954.61-463652.4,f|S|F5,6:49:54.62|-0.52,-46:36:52.42|374.4,5.15,2000 +Pup Tau|SAO 234735|CD-50 2415|HR 2553|J064956.16-503652.4,f|S|K1,6:49:56.17|34.26,-50:36:52.41|-65.9,2.94,2000 +SAO 249654|CP-60 712|PPM 355638|HR 2562|J065001.01-601456.9,f|S|F7,6:50:1.01|4.84,-60:14:56.93|107.9,6.11,2000 +SAO 151992|SD-16 1624|HR 2535|J065021.76-170504.3,f|S|K0,6:50:21.77|-6.74,-17:5:4.40|1.3,5.78,2000 +HZ CMA|SAO 197263|CD-31 3717|PPM 283184|HR 2545|J065023.34-314221.8,f|D|B6,6:50:23.35|-1.66,-31:42:21.81|15.1,5.74,2000 +Gem 35|HD 49738|BD+13 1434|PPM 123125|HR 2525|J065025.49+132447.4,f|S|K5,6:50:25.50|-1.90,13:24:47.44|-7.6,5.68,2000 +CD-25 3691|HR 2544|J065036.95-254642.2,f|S|B2,6:50:36.96|-4.19,-25:46:42.22|6.1,6.32,2000 +V0592 MON|SAO 133761|HD 49976|SD-07 1592|PPM 189593|HR 2534|J065042.30-080227.5,f|V|A2,6:50:42.30|-8.91,-8:2:27.59|3,6.31,2000 +Aur Psi-58A|BD+41 1536|PPM 49381|HR 2516|J065045.94+414652.4,f|D|K3,6:50:45.94|-23.94,41:46:52.43|-138,4.98,2000 +HD 49933|BD-00 1462|PPM 176472|J065049.83-003227.1,f|D|F2,6:50:49.83|22.20,-0:32:27.18|-187.1,5.78,2000 +SAO 197277|CD-34 3140|PPM 283195|HR 2549|J065052.35-342202.3,f|S|K5,6:50:52.35|4.58,-34:22:2.35|0.9,4.99,2000 +Cam 42|HD 48879|BD+67 454|PPM 15925|J065057.08+673418.9,f|S|B4,6:50:57.09|0.92,67:34:18.96|4.6,5.14,2000 +Vol Iota|SAO 256344|HD 51557|CP-70 572|J065126.98-705748.2,f|S|B7,6:51:26.99|4.01,-70:57:48.28|25.6,5.40,2000 +SAO 218261|CD-48 2556|PPM 311199|HR 2563|J065132.57-481733.9,f|S|K2,6:51:32.58|18.96,-48:17:33.92|-10.4,6.41,2000 +Gem 36|BD+21 1405|PPM 96639|HR 2529|J065133.04+214540.1,f|D|A2,6:51:33.05|-6.13,21:45:40.13|-34.5,5.27,2000 +SAO 114525|BD+03 1437|HR 2543|J065139.37+030231.1,f|S|A2,6:51:39.38|4.19,3:2:31.17|-29.7,6.37,2000 +SAO 197291|CD-36 3189|HR 2558|J065142.42-361348.9,f|S|A3,6:51:42.42|-40.53,-36:13:48.97|-59.1,5.95,2000 +HD 49968|BD+23 1518|PPM 96653|HR 2533|J065159.98+233606.1,f|S|K5,6:51:59.99|-39.31,23:36:6.18|-10.1,5.67,2000 +SD-05 1845|PPM 189628|HR 2552|J065222.86-051858.5,f|S|K0,6:52:22.86|-22.10,-5:18:58.60|-13.7,6.29,2000 +SAO 234764|CP-59 716|PPM 335552|HR 2592|J065245.42-592028.3,f|S|A3,6:52:45.42|-14.84,-59:20:28.30|38.2,6.42,2000 +SAO 218278|CD-43 2756|PPM 311217|HR 2579|J065247.13-435832.1,f|D|B8,6:52:47.14|2.37,-43:58:32.14|5.4,6.47,2000 +Gem Theta-34A|BD+34 1481|PPM 72194|J065247.33+335740.5,f|D|A3,6:52:47.34|-2.61,33:57:40.51|-47.7,3.61,2000 +SAO 114556|BD+08 1543|PPM 151446|HR 2551|J065249.46+082249.3,f|S|F0,6:52:49.47|-32.94,8:22:49.34|-30.9,5.75,2000 +KX CMA|CD-26 3529|PPM 251179|HR 2567|J065300.30-265727.4,f|D|M4,6:53:0.30|-9.36,-26:57:27.48|-65.3,6.43,2000 +Aur 59A|OX AUR|BD+39 1771|PPM 72197|HR 2539|J065301.41+385208.9,f|D|F2,6:53:1.41|-3.39,38:52:8.97|7.2,6.10,2000 +V3250|BD+35 1511|PPM 72198|HR 2542|J065303.53+354716.7,f|V|K3,6:53:3.54|-1.58,35:47:16.78|-5.4,6.02,2000 +Lyn 14A|HD 49618|BD+59 1028|J065305.05+592654.7,f|D|G4,6:53:5.06|-13.42,59:26:54.70|-50,5.36,2000 +HD 49949|BD+45 1359|PPM 49411|HR 2532|J065307.57+445023.7,f|S|A8,6:53:7.58|5.42,44:50:23.79|-58.4,6.24,2000 +Aur 60|BD+38 1636|HR 2541|J065313.40+382616.8,f|D|F5,6:53:13.40|42.30,38:26:16.85|-178.9,6.33,2000 +SD-18 1591|PPM 217818|HR 2565|J065318.81-190157.9,f|S|F1,6:53:18.81|-48.92,-19:1:57.95|6.5,5.65,2000 +SD-18 1594|PPM 217819|HR 2566|J065321.84-185558.2,f|S|A5,6:53:21.84|-9.93,-18:55:58.24|35.2,6.13,2000 +BD+11 1344|HR 2555|J065322.40+105947.9,f|S|K0,6:53:22.40|-0.44,10:59:47.94|-120.1,6.29,2000 +CMa 15|EY CMA|SD-20 1616|PPM 251197|HR 2571|J065332.90-201327.3,f|V|B1,6:53:32.91|-5.21,-20:13:27.31|4.1,4.82,2000 +SAO 172524|CD-28 3554|PPM 251199|HR 2576|J065333.94-283223.2,f|S|G5,6:53:33.94|282.78,-28:32:23.26|-441.9,6.04,2000 +Cam 43|BD+69 394|PPM 15946|HR 2511|J065342.24+685317.9,f|S|B7,6:53:42.25|4.54,68:53:17.91|7.3,5.11,2000 +SAO 172531|CD-24 4565|HR 2578|J065355.45-243219.5,f|S|A0,6:53:55.45|-4.23,-24:32:19.52|1.4,6.23,2000 +Aur Psi-61|BD+38 1638|PPM 72214|HR 2547|J065357.07+383018.0,f|S|B9,6:53:57.07|-0.47,38:30:18.07|-27.7,6.45,2000 +SAO 234774|HD 51266|CD-50 2458|PPM 335573|HR 2594|J065402.25-503641.7,f|S|K0,6:54:2.26|-55.68,-50:36:41.76|222.7,6.25,2000 +CMa Omicron-16|Omicron1 Canis Majoris|SAO 172542|CD-24 4567|PPM 251217|J065407.95-241103.1,f|V|K2,6:54:7.95|-3.42,-24:11:3.16|5,3.84,2000 +SAO 133855|SD-05 1863|PPM 189664|J065408.59-055107.8,f|D|A6,6:54:8.59|-11.19,-5:51:7.88|5.6,6.46,2000 +CMa Theta-14|SD-11 1681|PPM 217841|HR 2574|J065411.39-120219.0,f|S|K4,6:54:11.40|-139.07,-12:2:19.06|-14.5,4.07,2000 +BD-00 1487|PPM 176522|HR 2572|J065424.66-010737.1,f|S|A4,6:54:24.67|13.95,-1:7:37.18|-14.3,5.45,2000 +NP PUP|SAO 218296|CD-42 2818|PPM 311251|HR 2591|J065426.68-422156.0,f|V|C7,6:54:26.68|-1.33,-42:21:56.06|19.6,6.35,2000 +Gem 38A|V3266|BD+13 1462|PPM 123242|HR 2564|J065438.63+131040.1,f|D|F0,6:54:38.64|70.25,13:10:40.18|-77.8,4.70,2000 +V3271|SAO 133881|BD-01 1446|PPM 176526|HR 2577|J065442.04-014523.3,f|V|B3,6:54:42.04|1.05,-1:45:23.35|-0.1,6.27,2000 +SD-02 1827|PPM 189689|HR 2582|J065458.91-024812.9,f|S|G5,6:54:58.92|-5.24,-2:48:12.92|-0.5,6.02,2000 +CMa 17A|SAO 172569|SD-20 1624|PPM 251247|HR 2588|J065502.73-202417.5,f|D|A3,6:55:2.74|0.42,-20:24:17.55|-10.4,5.80,2000 +V0352 AUR|BD+44 1551|PPM 49434|HR 2557|J065514.65+435436.1,f|V|A9,6:55:14.66|1.62,43:54:36.11|-7,6.16,2000 +BD+46 1202|PPM 49435|HR 2556|J065515.18+454935.0,f|S|K0,6:55:15.19|-31.15,45:49:35.07|-73.8,6.32,2000 +Gem 37|V17225|BD+25 1496|HR 2569|J065518.66+252232.5,f|V|G0,6:55:18.67|-35.78,25:22:32.51|25.1,5.75,2000 +SAO 114626|BD+08 1562|PPM 151536|HR 2584|J065534.61+081927.4,f|S|A0,6:55:34.62|-23.01,8:19:27.43|-1.9,6.28,2000 +CMa Pi-19|V3285|SAO 172579|HD 51199|SD-19 1610|PPM 251258|J065537.43-200811.3,f|D|F5,6:55:37.43|51.40,-20:8:11.39|39.8,4.68,2000 +V17239|SAO 172588|HD 51283|CD-22 3720|PPM 251265|HR 2595|J065546.92-225629.1,f|V|B3,6:55:46.93|-3.32,-22:56:29.18|4.2,5.31,2000 +V17241|SAO 197371|HD 51411|CD-31 3808|PPM 283297|HR 2598|J065554.77-314724.6,f|D|B3,6:55:54.77|-8.16,-31:47:24.65|6.7,6.35,2000 +CMa Mu-18A|SAO 152123|SD-13 1741|PPM 217894|HR 2593|J065606.64-140236.3,f|D|G5,6:56:6.65|-1.75,-14:2:36.35|6.9,4.97,2000 +CMa Iota-20|Iota Canis Majoris|SAO 152126|SD-16 1661|PPM 217897|HR 2596|J065608.22-170315.2,f|S|B3,6:56:8.22|-2.44,-17:3:15.27|1.9,4.39,2000 +V17249|SAO 218324|HD 51799|CD-48 2601|PPM 311283|J065615.99-484316.1,f|V|M1,6:56:15.99|1.58,-48:43:16.12|8.4,4.95,2000 +BD+10 1335|PPM 151572|HR 2589|J065625.83+095723.6,f|S|B8,6:56:25.83|-16.10,9:57:23.68|-9,5.92,2000 +Aur Psi9|V17232|BD+46 1203|PPM 49458|HR 2568|J065632.05+461626.3,f|V|B8,6:56:32.06|-3.63,46:16:26.39|5,5.85,2000 +Men Theta|SAO 256355|HD 54239|CP-79 238|HR 2689|J065634.47-792512.6,f|S|B9,6:56:34.48|-1.54,-79:25:12.70|-1.6,5.46,2000 +SAO 197388|HD 51682|CD-35 3225|PPM 283313|J065645.70-352028.8,f|S|K2,6:56:45.70|-2.32,-35:20:28.80|5.5,6.27,2000 +BD+46 1205|PPM 49463|HR 2573|J065656.05+464219.2,f|S|K5,6:56:56.05|-92.68,46:42:19.27|-76.3,5.88,2000 +SAO 133937|HD 51424|SD-07 1642|PPM 189728|HR 2599|J065700.09-081045.4,f|S|K0,6:57:0.10|-2.08,-8:10:45.46|-11.8,6.34,2000 +V3289|BD+33 1433|PPM 72259|HR 2586|J065700.51+334051.7,f|V|G5,6:57:0.52|-24.46,33:40:51.74|1,5.92,2000 +V3280|BD+57 1017|HR 2561|J065713.13+573347.8,f|V|K3,6:57:13.14|13.11,57:33:47.83|15.6,6.02,2000 +Lyn 15A|BD+58 982|J065716.60+582521.9,f|D|G5,6:57:16.61|6.60,58:25:21.93|-123.5,4.36,2000 +V17255|HD 51825|CD-35 3233|PPM 283326|HR 2612|J065717.57-353025.8,f|D|F8,6:57:17.58|-57.51,-35:30:25.86|11.2,6.23,2000 +BD+12 1361|HR 2597|J065725.58+115427.1,f|S|F2,6:57:25.59|0.59,11:54:27.19|-3.1,6.28,2000 +SAO 172644|HD 51733|CD-24 4648|PPM 251319|J065733.90-243751.0,f|D|F5,6:57:33.91|-96.26,-24:37:51.03|88.4,5.45,2000 +Lyn 16|V3293|BD+45 1367|PPM 49476|HR 2585|J065737.10+450538.7,f|V|A2,6:57:37.11|-21.71,45:5:38.74|-3.2,4.90,2000 +V17257|HD 51823|CD-27 3460|PPM 251324|HR 2611|J065742.63-273215.0,f|V|B2,6:57:42.63|-9.04,-27:32:15.02|7.6,6.22,2000 +V3316|SAO 172656|HD 51925|CD-26 3646|PPM 251329|HR 2614|J065807.55-270951.8,f|D|B2,6:58:7.55|-2.54,-27:9:51.85|4.3,6.36,2000 +SAO 197427|CD-33 3389|PPM 283354|HR 2619|J065825.09-340642.1,f|S|B3,6:58:25.09|-16.52,-34:6:42.12|7.2,5.07,2000 +SAO 172669|CD-25 3864|PPM 251344|HR 2616|J065835.89-252450.9,f|D|B3,6:58:35.90|-6.64,-25:24:50.97|5.3,5.59,2000 +V17271|SAO 234825|HD 52622|CP-56 1211|PPM 335636|HR 2638|J065836.36-562341.4,f|V|F2,6:58:36.37|-22.83,-56:23:41.46|-34.1,6.46,2000 +Adhara|Al 'Adhara|CMa Epsilon-21|SAO 172676|CD-28 3666|PPM 251347|HR 2618|J065837.54-285819.5,f|D|B2,6:58:37.55|2.62,-28:58:19.50|2.3,1.53,2000 +SAO 114713|HD 51693|BD+07 1539|PPM 151655|J065838.91+073720.2,f|S|A3,6:58:38.91|-30.63,7:37:20.28|-21.2,6.26,2000 +SAO 234826|CP-55 1116|PPM 335637|HR 2634|J065839.74-554344.8,f|S|K2,6:58:39.74|-64.11,-55:43:44.84|-80.9,6.26,2000 +HD 52362|CD-45 2850|HR 2626|J065841.72-454603.3,f|S|A0,6:58:41.73|-13.60,-45:46:3.33|-4.1,6.21,2000 +SAO 197432|CD-30 3757|HR 2621|J065843.69-305952.9,f|D|B3,6:58:43.70|-10.80,-30:59:52.93|6.6,6.40,2000 +Gem 39|V17256|BD+26 1405|PPM 96832|J065847.41+260451.8,f|D|F7,6:58:47.41|-162.21,26:4:51.88|94.1,6.20,2000 +SAO 114722|HD 51814|BD+03 1488|PPM 151661|J065857.02+033608.4,f|D|G8,6:58:57.02|-3.59,3:36:8.48|-3.7,5.95,2000 +Aur 62|BD+38 1656|PPM 72294|J065902.84+380308.3,f|S|K2,6:59:2.85|-42.88,38:3:8.34|-122.7,6.02,2000 +SAO 114731|HD 51892|BD+07 1544|PPM 151677|HR 2613|J065920.17+071901.0,f|S|B7,6:59:20.17|-8.78,7:19:1.08|-7.8,6.34,2000 +Gem 40|HD 51688|BD+26 1411|PPM 96855|J065927.93+255451.0,f|D|B8,6:59:27.93|-4.59,25:54:51.02|-6.6,6.40,2000 +HD 52273|SD-21 1689|PPM 251378|HR 2623|J065939.25-213610.3,f|S|B2,6:59:39.25|-2.93,-21:36:10.38|4.9,6.25,2000 +CP-67 686|PPM 355751|HR 2662|J065950.53-675459.1,f|S|K3,6:59:50.54|-27.01,-67:54:59.19|234.2,5.17,2000 +HD 49878|BD+77 266|HR 2527|J070004.03+765838.6,f|S|K4,7:0:4.04|73.18,76:58:38.67|-13.9,4.54,2000 +SAO 172718|HD 52348|SD-19 1644|PPM 251398|HR 2625|J070008.28-200930.3,f|S|B4,7:0:8.28|-5.91,-20:9:30.33|5.3,6.31,2000 +Gem 41|V17270|BD+16 1354|PPM 123372|HR 2615|J070015.82+160444.3,f|V|K3,7:0:15.82|-0.43,16:4:44.39|-3,5.72,2000 +HD 52265|SD-05 1910|PPM 189798|HR 2622|J070018.03-052201.7,f|S|G0,7:0:18.04|-115.74,-5:22:1.78|80.4,6.30,2000 +HD 52312|SD-08 1662|HR 2624|J070023.75-082424.5,f|D|B9,7:0:23.76|-7.12,-8:24:24.55|1.7,5.95,2000 +SAO 172749|HD 52619|CD-28 3711|PPM 251424|HR 2637|J070042.51-282922.4,f|S|F5,7:0:42.51|-23.47,-28:29:22.47|-41.5,6.29,2000 +SAO 197475|CD-33 3415|HR 2641|J070049.74-332755.9,f|S|G8,7:0:49.75|13.14,-33:27:55.91|78.2,6.40,2000 +V17286|SAO 234854|CD-51 2224|PPM 335666|HR 2652|J070051.48-512409.3,f|V|M1,7:0:51.48|-21.62,-51:24:9.30|20.1,5.16,2000 +V3349|SAO 234863|HD 53349|CP-58 820|HR 2661|J070105.11-585623.7,f|V|A8,7:1:5.11|-56.88,-58:56:23.77|147.8,6.01,2000 +LS CMA|SAO 172763|CD-25 3911|PPM 251438|J070105.94-251256.2,f|V|B2,7:1:5.95|-4.61,-25:12:56.28|4.7,5.64,2000 +BD+70 430|PPM 6515|HR 2581|J070121.41+704829.8,f|D|K5,7:1:21.42|12.77,70:48:29.86|-15.8,5.68,2000 +CMa Sigma-22A|ig CMa|SAO 172797|HD 52877|CD-27 3544|PPM 251469|HR 2646|J070143.14-275605.3,f|D|K7,7:1:43.15|-5.96,-27:56:5.39|4.6,3.47,2000 +HD 52611|BD-01 1509|HR 2636|J070152.91-012045.1,f|D|G5,7:1:52.92|13.80,-1:20:45.18|-39.3,6.19,2000 +V3341|HD 52666|SD-05 1926|PPM 189831|HR 2639|J070156.38-054319.4,f|V|M2,7:1:56.38|-14.48,-5:43:19.43|6.6,5.22,2000 +SAO 218396|HD 53253|CD-43 2882|PPM 311388|HR 2658|J070215.47-432413.9,f|S|A0,7:2:15.48|1.85,-43:24:13.93|-0.3,6.44,2000 +HD 52556|BD+15 1431|PPM 123418|HR 2632|J070217.49+152009.6,f|S|K5,7:2:17.49|4.77,15:20:9.63|-25,5.77,2000 +Gem Omega-42|Omega Geminorium|HD 52497|BD+24 1502|PPM 96934|J070224.78+241255.6,f|S|G5,7:2:24.78|-6.43,24:12:55.60|-0.4,5.18,2000 +NP GEM|HD 52554|BD+17 1479|PPM 123424|HR 2631|J070225.53+174519.8,f|V|Ma,7:2:25.53|21.00,17:45:19.88|27.2,6.02,2000 +V17288|BD+16 1363|PPM 123427|HR 2635|J070233.28+164028.0,f|V|M2,7:2:33.29|-11.93,16:40:28.01|-7.3,5.86,2000 +Mon 19|V0637 MON|HD 52918|SD-04 1788|PPM 189857|HR 2648|J070254.77-041421.2,f|V|B1,7:2:54.78|-4.79,-4:14:21.23|2.8,4.98,2000 +CMa Omicron-24|Omicron2 Canis Majoris|SAO 172839|HD 53138|CD-23 4797|PPM 251514|HR 2653|J070301.47-234959.8,f|V|B3,7:3:1.47|-1.51,-23:49:59.85|4.3,3.04,2000 +V0450 CAR|HD 53921|CP-58 826|PPM 335698|HR 2674|J070315.09-591041.1,f|D|B9,7:3:15.10|-9.99,-59:10:41.19|10.9,5.65,2000 +SAO 114835|HD 52913|BD+09 1496|HR 2647|J070317.91+090818.0,f|S|A3,7:3:17.92|-23.55,9:8:18.08|3.1,5.96,2000 +HD 52711|BD+29 1441|HR 2643|J070330.45+292013.4,f|S|G4,7:3:30.46|155.74,29:20:13.49|-828,5.94,2000 +BD+11 1428|PPM 123452|HR 2649|J070338.07+105706.5,f|S|K3,7:3:38.07|-2.06,10:57:6.54|-12,5.12,2000 +Muliphein|Mirza|Isis|CMa Gamma-23|V17305|HD 53244|SD-15 1625|HR 2657|J070345.49-153759.8,f|V|B8,7:3:45.49|-0.87,-15:37:59.83|-11.2,4.11,2000 +HD 52976|BD+12 1406|PPM 123454|HR 2651|J070351.59+123539.2,f|S|K5,7:3:51.60|-6.73,12:35:39.27|-6.9,6.00,2000 +SAO 218427|HD 53811|CD-49 2587|PPM 311418|HR 2672|J070353.60-493502.1,f|S|A4,7:3:53.61|-53.68,-49:35:2.11|139,4.93,2000 +SAO 218421|CD-43 2906|PPM 311421|HR 2667|J070357.31-433628.9,f|D|G1,7:3:57.32|-102.75,-43:36:28.94|388.9,5.54,2000 +SD-09 1818|HR 2656|J070357.45-100725.5,f|S|B9,7:3:57.46|-5.46,-10:7:25.55|0.7,6.44,2000 +V17330|SAO 218424|CD-42 2929|PPM 311424|HR 2666|J070402.79-422014.2,f|V|A2,7:4:2.79|-18.18,-42:20:14.22|71.5,5.21,2000 +V17314|SAO 134133|SD-05 1943|PPM 189876|HR 2655|J070405.24-051926.3,f|V|K3,7:4:5.25|-3.58,-5:19:26.32|-3.2,5.61,2000 +Mekbuda|Gem Zeta-43A|Zeta Geminorium|HD 52973|BD+20 1687|PPM 96982|J070406.53+203413.0,f|D|F7,7:4:6.53|-5.76,20:34:13.07|-1,4.01,2000 +V0386 CAR|HD 54118|CP-56 1232|PPM 335714|HR 2683|J070418.33-564459.0,f|V|A0,7:4:18.33|11.02,-56:44:59.01|2.9,5.16,2000 +HD 53629|SD-21 1732|PPM 251585|HR 2664|J070447.05-220154.0,f|S|K0,7:4:47.05|14.46,-22:1:54.08|-35.5,6.08,2000 +BD+47 1391|PPM 49577|HR 2645|J070508.98+474630.1,f|S|B9,7:5:8.99|0.30,47:46:30.16|0.1,6.38,2000 +HD 54179|CD-50 2561|PPM 335725|HR 2687|J070516.37-502136.1,f|S|K3,7:5:16.37|-24.40,-50:21:36.15|39.6,6.46,2000 +Gem 44|HD 53257|BD+22 1566|HR 2659|J070518.36+223814.8,f|S|B8,7:5:18.37|-0.97,22:38:14.85|-9.3,6.01,2000 +SAO 197557|HD 53952|CD-34 3327A|PPM 283489|HR 2677|J070532.01-344639.7,f|D|F2,7:5:32.02|-41.15,-34:46:39.72|40.1,6.42,2000 +SAO 114899|BD+09 1510|HR 2663|J070539.02+091108.8,f|S|M0,7:5:39.03|41.91,9:11:8.88|-15,5.75,2000 +V17291|BD+70 432|HR 2617|J070551.67+704354.9,f|V|K0,7:5:51.67|31.28,70:43:54.93|-6.7,6.49,2000 +IL CMA|SAO 197566|CD-30 3907|PPM 283499|J070600.48-303920.5,f|V|B3,7:6:0.49|-8.26,-30:39:20.56|7.4,6.34,2000 +BD+60 1026|HR 2642|J070601.23+594806.6,f|S|G8,7:6:1.24|22.03,59:48:6.66|-2.9,6.40,2000 +SAO 197572|HD 54153|CD-38 3163|HR 2685|J070602.26-382258.2,f|S|G0,7:6:2.27|6.70,-38:22:58.27|14.2,6.09,2000 +V3373|HD 53329|BD+34 1524|PPM 72433|J070611.59+342826.2,f|V|G8,7:6:11.59|-55.03,34:28:26.28|-49.1,5.55,2000 +HD 55151|CP-68 591|PPM 355827|HR 2712|J070614.31-685015.2,f|S|K0,7:6:14.31|5.47,-68:50:15.29|-1.3,6.47,2000 +SAO 152393|HD 53975|SD-12 1788|PPM 218163|HR 2679|J070635.96-122338.2,f|S|O7,7:6:35.97|-3.66,-12:23:38.22|1.8,6.49,2000 +FN CMA|SAO 152394|HD 53974|SD-11 1790|PPM 218164|HR 2678|J070640.76-111738.4,f|D|B0,7:6:40.77|-3.24,-11:17:38.45|2,5.43,2000 +SAO 172986|HD 54173|CD-24 4868|PPM 251659|HR 2686|J070652.47-245738.0,f|S|K2,7:6:52.48|-12.51,-24:57:38.06|3.8,6.08,2000 +SAO 114935|HD 53929|BD+05 1543|PPM 151953|HR 2676|J070706.47+045438.0,f|S|B9,7:7:6.47|-16.29,4:54:38.09|-6.7,6.10,2000 +V17352|SAO 218465|HD 54475|CD-40 2930|PPM 311477|HR 2691|J070707.07-405335.7,f|V|B3,7:7:7.08|-10.66,-40:53:35.77|11.3,5.79,2000 +HD 54732|CD-51 2306|PPM 335759|HR 2698|J070713.28-515805.8,f|S|K0,7:7:13.29|-11.92,-51:58:5.82|43,5.96,2000 +SAO 234944|HD 54967|CP-59 771|PPM 335761|J070716.27-594259.0,f|S|B3,7:7:16.28|-7.34,-59:42:59.10|9.3,6.46,2000 +HD 53686|BD+34 1530|PPM 72457|HR 2665|J070722.39+340033.4,f|S|K5,7:7:22.40|-18.28,34:0:33.44|-30.4,5.92,2000 +FV CMA|CD-23 4908|PPM 251675|J070722.58-235026.5,f|V|B2,7:7:22.59|-2.61,-23:50:26.60|5.1,5.76,2000 +HD 53744|BD+28 1314|HR 2669|J070724.87+281036.1,f|S|B9,7:7:24.88|-7.14,28:10:36.10|-0.4,6.47,2000 +SAO 114947|BD+07 1607|PPM 151978|HR 2682|J070749.48+072816.3,f|S|K5,7:7:49.49|6.69,7:28:16.37|-33.3,5.74,2000 +HD 53899|BD+34 1533|PPM 72472|HR 2673|J070813.27+334956.5,f|S|K0,7:8:13.27|-7.73,33:49:56.60|-28.2,6.30,2000 +Gem 45A|HD 54131|BD+16 1397|PPM 123576|HR 2684|J070822.03+155550.4,f|D|G8,7:8:22.04|-5.05,15:55:50.43|-103.5,5.49,2000 +Wesen|Al Wazn|Al Wazor|CMa Delta-25|V3424|CD-26 3916|PPM 251718|HR 2693|J070823.48-262335.5,f|D|F8,7:8:23.48|-2.82,-26:23:35.52|3.3,1.84,2000 +HD 53925|BD+37 1660|PPM 72481|HR 2675|J070836.24+372642.3,f|S|K1,7:8:36.24|-6.31,37:26:42.34|-14.9,6.19,2000 +Vol Gamma1|SAO 256373|HD 55864|CP-70 600B|PPM 369421|HR 2735|J070842.37-702949.5,f|D|F2,7:8:42.37|17.18,-70:29:49.52|104.1,5.62,2000 +Vol Gamma2|V3448|SAO 256374|HD 55865|CP-70 600A|PPM 369422|HR 2736|J070844.86-702956.1,f|D|K0,7:8:44.87|23.73,-70:29:56.15|108.1,3.76,2000 +V3431|SAO 197632|HD 54893|CD-39 3105|PPM 283569|J070851.06-393920.3,f|V|B2,7:8:51.07|-10.97,-39:39:20.36|7,4.83,2000 +HD 54662|SD-10 1892|PPM 218242|HR 2694|J070920.25-102047.6,f|S|O6,7:9:20.25|-0.59,-10:20:47.63|3.7,6.24,2000 +OS CMA|SAO 152477|HD 54764|SD-16 1802|PPM 218247|HR 2699|J070933.36-161404.2,f|D|B1,7:9:33.36|-1.30,-16:14:4.23|-0.6,6.06,2000 +LZ CMA|HD 54912|CD-25 4120|PPM 251771|J070943.02-251351.7,f|D|B2,7:9:43.02|-4.88,-25:13:51.72|4,5.69,2000 +HD 54563|BD+21 1528|PPM 97133|HR 2692|J071006.67+211449.1,f|S|G9,7:10:6.68|-174.62,21:14:49.15|-473.1,6.42,2000 +SAO 152497|HD 54958|SD-18 1711|PPM 218264|J071009.36-184108.3,f|D|F0,7:10:9.36|11.65,-18:41:8.30|-16.7,6.22,2000 +Mon 20A|SAO 134282|SD-04 1840|PPM 189987|J071013.68-041413.5,f|D|K0,7:10:13.68|0.00,-4:14:13.58|217.9,4.92,2000 +SAO 173122|CD-27 3710|PPM 251792|J071019.32-272929.4,f|S|G8,7:10:19.32|-9.45,-27:29:29.47|1.9,5.45,2000 +SAO 218514|HD 55526|CD-48 2765|PPM 311545|HR 2719|J071047.48-485555.5,f|S|K2,7:10:47.48|-17.25,-48:55:55.55|197,5.11,2000 +SD-03 1781|J071103.05-035352.8,f|S|K0,7:11:3.05|-12.27,-3:53:52.85|-8.2,6.50,2000 +Gem Tau-46A|V3437|HD 54719|BD+30 1439|PPM 72528|HR 2697|J071108.37+301442.5,f|D|K2,7:11:8.37|-30.97,30:14:42.59|-48.4,4.39,2000 +Gem 47|V17371|BD+27 1327|PPM 97154|J071123.06+265123.7,f|V|A4,7:11:23.07|-20.61,26:51:23.71|-33.5,5.76,2000 +Mon 21|V0571 MON|SAO 134316|BD-00 1634|PPM 176739|J071123.61-001806.9,f|V|A8,7:11:23.62|-27.45,-0:18:6.94|-9.1,5.43,2000 +Aur 63|HD 54716|BD+39 1882|PPM 72547|HR 2696|J071139.32+391913.9,f|S|K3,7:11:39.33|44.21,39:19:13.98|2.1,4.89,2000 +SAO 173168|HD 55344|SD-20 1767|PPM 251844|HR 2716|J071141.60-205259.0,f|S|A0,7:11:41.61|-9.25,-20:52:59.03|21.6,5.84,2000 +HD 55111|BD+05 1577|PPM 152128|J071151.38+053916.9,f|S|A1,7:11:51.38|-12.24,5:39:16.93|-5.2,6.08,2000 +Mon Delta-22|HD 55185|BD-00 1636|PPM 176744|HR 2714|J071151.86-002933.9,f|D|A2,7:11:51.86|-0.30,-0:29:33.95|6.7,4.15,2000 +SAO 249774|HD 56239|CP-62 789|PPM 355882|HR 2754|J071201.97-631124.2,f|D|A0,7:12:1.98|-2.30,-63:11:24.21|-2,6.04,2000 +SAO 197686|HD 55568|CD-30 4081|PPM 283631|J071204.08-304916.9,f|S|A8,7:12:4.09|-43.67,-30:49:16.91|23.1,6.09,2000 +HD 55184|BD+05 1580|PPM 152133|HR 2713|J071207.49+052827.6,f|S|K0,7:12:7.49|-20.46,5:28:27.65|-6.3,6.16,2000 +CMa 26|MM CMA|SAO 173193|HD 55522|CD-25 4191|HR 2718|J071212.21-255633.3,f|V|B2,7:12:12.21|-5.26,-25:56:33.32|8.6,5.91,2000 +SAO 218525|HD 55719|CD-40 2987|PPM 311569|HR 2727|J071215.80-402955.7,f|S|A3,7:12:15.81|-18.82,-40:29:55.71|-12.4,5.30,2000 +V0363 PUP|SAO 197694|HD 55718|CD-36 3421|PPM 283641|HR 2726|J071225.82-363239.7,f|D|B3,7:12:25.82|-9.76,-36:32:39.77|7.5,5.94,2000 +Gem 48|BD+24 1558|PPM 97187|J071226.37+240742.9,f|S|F5,7:12:26.38|-15.74,24:7:42.94|-44.9,5.85,2000 +QW PUP|SAO 218537|HD 55892|CD-46 2977|PPM 311577|J071233.62-464533.4,f|V|F0,7:12:33.63|-135.64,-46:45:33.50|106.8,4.50,2000 +HD 55589|SD-11 1849|PPM 218343|HR 2723|J071307.19-111504.8,f|S|K0,7:13:7.19|-2.80,-11:15:4.83|8,5.76,2000 +OU PUP|SAO 218546|CD-44 3223|HR 2746|J071313.35-451057.8,f|V|A0,7:13:13.35|-24.85,-45:10:57.86|-88.2,4.89,2000 +Gem 51A|BQ GEM|HD 55383|BD+16 1417|HR 2717|J071322.27+160932.2,f|D|M4,7:13:22.27|14.70,16:9:32.22|-41.8,5.06,2000 +UY LYN|HD 54895|BD+51 1295|J071323.40+512543.4,f|V|M3,7:13:23.40|8.23,51:25:43.48|13.4,5.49,2000 +V3467|HD 55762|CD-22 4195|J071324.02-224027.2,f|V|K2,7:13:24.03|24.64,-22:40:27.27|-39.1,5.98,2000 +L 2|SAO 218549|CD-44 3227|PPM 311594|HR 2748|J071332.31-443823.0,f|D|M5,7:13:32.32|107.16,-44:38:23.06|325.3,4.51,2000 +GY CMA|SAO 173244|HD 55857|CD-27 3789|HR 2734|J071336.44-272122.8,f|V|B0,7:13:36.45|-3.20,-27:21:22.90|5.8,6.11,2000 +V17389|SAO 173247|HD 55856|CD-22 4204|PPM 251917|HR 2733|J071348.38-225420.8,f|D|B2,7:13:48.39|-3.59,-22:54:20.80|3.2,6.36,2000 +V17391|SAO 197722|HD 55985|CD-30 4146|PPM 283672|HR 2743|J071357.33-302023.2,f|V|B2,7:13:57.34|-4.14,-30:20:23.25|4.3,6.32,2000 +BD+72 352|PPM 6596|HR 2681|J071358.03+714859.7,f|S|K0,7:13:58.04|23.40,71:48:59.70|18.5,6.36,2000 +SAO 134391|HD 55775|SD-03 1804|HR 2731|J071410.85-035406.4,f|D|K5,7:14:10.85|-34.27,-3:54:6.40|-8.1,5.96,2000 +CMa 27|EW CMA|SAO 173264|CD-26 4057|PPM 251933|HR 2745|J071415.21-262109.0,f|D|B3,7:14:15.21|-6.59,-26:21:9.07|3.9,4.45,2000 +SAO 134395|HD 55832|SD-09 1921|HR 2732|J071415.51-095651.1,f|S|K3,7:14:15.52|-4.73,-9:56:51.12|2.8,5.90,2000 +SAO 115119|HD 55751|BD+03 1609|HR 2729|J071420.06+030641.0,f|S|K2,7:14:20.06|-5.24,3:6:41.09|-3,5.35,2000 +SAO 152598|HD 55879|SD-10 1933|PPM 218372|HR 2739|J071428.25-101858.4,f|S|B0,7:14:28.25|-3.84,-10:18:58.48|1.6,6.01,2000 +BD+12 1469|HR 2728|J071432.62+120656.9,f|S|G6,7:14:32.62|-50.16,12:6:56.97|-17,5.70,2000 +SAO 218567|HD 56456|CD-48 2807|PPM 311614|HR 2762|J071438.14-481618.9,f|D|B8,7:14:38.14|-4.19,-48:16:18.94|0.6,4.75,2000 +Gem 52|V3469|HD 55621|BD+25 1618|PPM 97241|HR 2725|J071441.97+245305.9,f|D|M1,7:14:41.98|54.84,24:53:5.94|-89.5,5.84,2000 +PR PUP|HD 56455|CD-46 3000|PPM 311616|HR 2761|J071446.01-465058.8,f|V|A0,7:14:46.02|-10.16,-46:50:58.82|0.1,5.72,2000 +CMa Omega-28|Omega Canis Majoris|SAO 173282|HD 56139|CD-26 4073|PPM 251951|HR 2749|J071448.65-264621.6,f|S|B2,7:14:48.65|-11.52,-26:46:21.60|7.7,4.04,2000 +SAO 173283|CD-26 4074|PPM 251952|J071451.16-270216.7,f|S|K4,7:14:51.16|-40.75,-27:2:16.78|-29.7,5.58,2000 +SAO 218568|CD-41 2906|PPM 311619|HR 2759|J071457.15-412535.0,f|S|B4,7:14:57.15|3.37,-41:25:35.02|9.6,5.95,2000 +Mon 24|SAO 134414|BD+00 1871|PPM 176787|HR 2744|J071519.40-000940.6,f|D|G5,7:15:19.41|-8.25,-0:9:40.62|4,6.42,2000 +V17400|SAO 197756|HD 56342|CD-30 4184|HR 2756|J071521.07-304111.2,f|V|B3,7:15:21.07|-13.03,-30:41:11.21|11.4,5.35,2000 +CP-52 1123|PPM 335875|HR 2767|J071521.22-522957.2,f|S|K1,7:15:21.23|-42.19,-52:29:57.21|120.1,5.96,2000 +V3486|SAO 115159|BD+08 1712|PPM 152262|HR 2747|J071539.43+075839.8,f|V|M4,7:15:39.43|23.62,7:58:39.87|2.2,5.83,2000 +SAO 152621|SD-10 1945|PPM 218394|HR 2752|J071543.24-103500.9,f|S|K0,7:15:43.24|29.19,-10:35:0.98|-1,5.94,2000 +SAO 173319|HD 56341|CD-23 5173|PPM 251989|HR 2755|J071547.29-234425.0,f|S|A0,7:15:47.30|-14.01,-23:44:25.01|12.8,6.34,2000 +HD 55575|BD+47 1419|PPM 49716|HR 2721|J071550.13+471423.8,f|S|G0,7:15:50.14|29.43,47:14:23.87|-186.1,5.55,2000 +Lyn 18|BD+59 1065|HR 2715|J071554.90+593814.8,f|S|K2,7:15:54.90|-101.07,59:38:14.88|-258.7,5.20,2000 +Gem 53|V3485|BD+28 1350|PPM 97273|HR 2738|J071557.16+275350.7,f|V|M1,7:15:57.17|-14.05,27:53:50.71|-3.2,5.75,2000 +V17405|SAO 152641|SD-15 1734|PPM 218414|HR 2758|J071614.55-153508.4,f|V|A2,7:16:14.55|-44.36,-15:35:8.48|-14.1,5.45,2000 +SAO 218589|HD 56813|CD-46 3023|HR 2771|J071615.47-464628.3,f|S|K4,7:16:15.47|1.64,-46:46:28.32|32.1,5.64,2000 +SAO 197785|HD 56733|CD-38 3288|PPM 283734|HR 2769|J071631.85-381908.1,f|S|B4,7:16:31.85|-7.88,-38:19:8.14|4.9,5.81,2000 +V17409|HD 56618|CD-27 3852|HR 2766|J071634.99-275252.2,f|V|M3,7:16:34.99|-12.46,-27:52:52.24|38.8,4.67,2000 +V3503|SAO 173349|HD 56577|CD-23 5189|HR 2764|J071636.83-231856.1,f|D|K3,7:16:36.83|-4.96,-23:18:56.14|3,4.82,2000 +SAO 173353|HD 56578|CD-23 5192|J071638.35-231839.3,f|D|F5,7:16:38.36|-33.61,-23:18:39.38|46.6,5.95,2000 +V17413|HD 56779|CD-36 3485|PPM 283738|J071649.40-363533.4,f|V|B2,7:16:49.41|-10.36,-36:35:33.48|6.2,5.02,2000 +Vol Delta|HD 57623|CP-67 730|J071649.82-675725.7,f|S|F6,7:16:49.82|-4.11,-67:57:25.75|8.5,3.97,2000 +SAO 197789|HD 56731|CD-30 4234|PPM 283743|HR 2768|J071657.21-305349.2,f|D|A9,7:16:57.22|2.32,-30:53:49.24|-27.2,6.30,2000 +HD 56176|BD+26 1508|J071703.40+264122.1,f|S|G7,7:17:3.40|57.23,26:41:22.18|-131.6,6.40,2000 +Pup Pi|Pi Puppis|SAO 197795|HD 56855|CD-36 3489|PPM 283747|HR 2773|J071708.55-370550.8,f|D|K3,7:17:8.56|-10.53,-37:5:50.89|7,2.71,2000 +V17414|SAO 134474|HD 56614|SD-06 2032|HR 2765|J071731.66-064047.9,f|V|K2,7:17:31.66|-25.33,-6:40:47.99|12.1,6.30,2000 +HD 55866|BD+52 1188|HR 2737|J071733.71+520751.8,f|S|K5,7:17:33.72|-0.64,52:7:51.86|-17.8,5.94,2000 +HD 56171|BD+39 1908|PPM 72643|J071742.64+385234.5,f|S|K0,7:17:42.65|-4.55,38:52:34.55|-29.3,6.49,2000 +SAO 173411|HD 56876|CD-26 4140|HR 2774|J071748.01-264751.2,f|S|B2,7:17:48.01|-0.80,-26:47:51.20|1.6,6.44,2000 +Aur 64|HD 56221|BD+41 1630|PPM 49746|HR 2753|J071802.21+405300.2,f|S|A5,7:18:2.21|-15.08,40:53:0.21|12.2,5.87,2000 +HD 56386|BD+31 1529|PPM 72652|HR 2757|J071804.09+305721.1,f|S|A0,7:18:4.09|-4.89,30:57:21.14|-22.4,6.20,2000 +SAO 218618|HD 57197|CD-43 3093|PPM 311669|HR 2789|J071804.24-435912.4,f|S|B8,7:18:4.25|-9.82,-43:59:12.43|-5.6,5.85,2000 +Gem Lambda-54|V3512|HD 56537|BD+16 1443|PPM 123822|HR 2763|J071805.57+163225.3,f|D|A3,7:18:5.58|-46.16,16:32:25.38|-37.9,3.58,2000 +NV PUP|SAO 197824|CD-36 3512|PPM 283776|HR 2787|J071818.39-364402.2,f|D|B2,7:18:18.39|-11.30,-36:44:2.26|1.9,4.71,2000 +HD 56169|BD+49 1612|PPM 49757|HR 2751|J071831.97+492753.1,f|S|A4,7:18:31.98|-1.36,49:27:53.12|3.9,5.02,2000 +SAO 197836|CD-38 3309|PPM 283786|HR 2791|J071833.51-391237.0,f|S|A1,7:18:33.51|-10.00,-39:12:37.03|9,5.25,2000 +NW PUP|SAO 197837|HD 57219|CD-36 3519|J071838.18-364433.8,f|D|B2,7:18:38.19|-10.10,-36:44:33.85|5.9,5.10,2000 +CMa 29|UW CMA|SAO 173444|CD-24 5173|PPM 252112|HR 2781|J071840.37-243331.3,f|V|O7,7:18:40.38|-2.87,-24:33:31.32|2.7,4.92,2000 +CMa Tau-30A|Tau Canis Majoris|SAO 173446|CD-24 5176|PPM 252114|HR 2782|J071842.48-245715.7,f|D|O9,7:18:42.48|-1.77,-24:57:15.71|3.7,4.40,2000 +V17424|SAO 173453|HD 57146|CD-26 4164|HR 2786|J071851.27-263509.0,f|V|G2,7:18:51.27|-7.78,-26:35:9.08|6.7,5.29,2000 +V17425|HD 57118|SD-19 1813|HR 2785|J071901.91-191649.0,f|V|F0,7:19:1.92|-2.41,-19:16:49.09|3.1,6.10,2000 +V17430|SAO 197842|HD 57299|CD-33 3696|PPM 283798|HR 2794|J071913.68-334337.7,f|V|K2,7:19:13.69|-15.34,-33:43:37.80|-8.4,6.31,2000 +SAO 115263|HD 56989|BD+02 1640|PPM 152385|HR 2778|J071922.37+024426.4,f|S|G9,7:19:22.37|-2.25,2:44:26.50|-10.8,5.90,2000 +R CMA|SAO 152724|HD 57167|SD-16 1898|PPM 218497|HR 2788|J071928.18-162342.8,f|V|F1,7:19:28.18|165.34,-16:23:42.88|-136.4,5.72,2000 +SAO 115269|BD+07 1684|HR 2779|J071947.64+070834.6,f|S|F8,7:19:47.65|61.17,7:8:34.61|-59.2,5.91,2000 +BD+15 1541|PPM 123867|J072006.84+150834.5,f|S|A2,7:20:6.84|2.61,15:8:34.54|-18.1,6.46,2000 +Wasat|Gem Delta-55|HD 56986|BD+22 1645|HR 2777|J072007.37+215856.3,f|D|F2,7:20:7.38|-18.78,21:58:56.35|-7.8,3.54,2000 +V17441|HD 57852|CP-52 1153A|PPM 335952|HR 2813|J072021.42-521841.4,f|D|F0,7:20:21.42|-35.21,-52:18:41.49|147.5,5.98,2000 +SAO 235116|HD 57917|CD-51 2445|HR 2815|J072038.80-520509.3,f|S|B9,7:20:38.81|-8.20,-52:5:9.33|0.5,5.38,2000 +HQ CMA|SAO 173522|HD 57593|CD-26 4223|PPM 252187|J072054.91-265749.8,f|D|B2,7:20:54.92|-4.95,-26:57:49.82|5.6,6.00,2000 +SAO 152749|HD 57478|SD-14 1846|PPM 218523|HR 2796|J072058.28-142137.7,f|S|G5,7:20:58.29|-10.46,-14:21:37.76|-0.4,5.58,2000 +HD 56941|BD+42 1699|PPM 49785|HR 2775|J072103.09+423921.2,f|S|K0,7:21:3.10|-17.65,42:39:21.29|-35.6,6.33,2000 +MZ CMA|SAO 173529|HD 57615|CD-25 4400|PPM 252195|J072104.33-255329.9,f|V|M3,7:21:4.33|-11.88,-25:53:29.92|13.4,5.89,2000 +HD 56963|BD+45 1422|PPM 49789|HR 2776|J072117.49+451341.5,f|S|A7,7:21:17.50|-49.55,45:13:41.52|12.1,5.75,2000 +Gem 56A|V3550|HD 57423|BD+20 1775|PPM 97421|HR 2795|J072156.86+202637.1,f|D|M0,7:21:56.86|-62.12,20:26:37.17|-24,5.09,2000 +V17444|HD 57682|SD-08 1872|J072202.05-085845.7,f|V|O9,7:22:2.05|9.33,-8:58:45.76|14.2,6.42,2000 +Aur 65A|HD 57264|BD+37 1707|PPM 72715|HR 2793|J072202.61+364538.1,f|D|K0,7:22:2.62|-98.66,36:45:38.10|-22.1,5.13,2000 +SAO 115335|BD+00 1915|PPM 152483|J072203.47+001037.6,f|S|B8,7:22:3.48|1.95,0:10:37.63|-2,5.98,2000 +HD 57263|BD+39 1927|PPM 72719|HR 2792|J072213.40+385945.3,f|S|K1,7:22:13.41|0.93,38:59:45.40|-37.4,6.40,2000 +SAO 152776|HD 57821|SD-18 1806|PPM 218547|HR 2812|J072213.52-190059.7,f|S|B7,7:22:13.53|-1.70,-19:0:59.76|-6.4,4.97,2000 +Cam 47|BD+60 1048|HR 2772|J072217.18+595407.1,f|D|A8,7:22:17.18|-1.73,59:54:7.19|15.4,6.37,2000 +SAO 134585|SD-02 2079|J072218.59-025845.0,f|S|F5,7:22:18.59|-0.75,-2:58:45.03|-6.3,6.25,2000 +V3560|SAO 134588|HD 57749|SD-05 2089|HR 2811|J072225.38-055858.1,f|V|F3,7:22:25.39|-12.53,-5:58:58.18|-8.4,5.84,2000 +SAO 115351|BD+00 1916|J072228.31+004202.9,f|S|G5,7:22:28.32|38.40,0:42:2.99|-49.9,6.45,2000 +Lyn 19A|BD+55 1192B|HR 2784|J072252.05+551653.0,f|D|B8,7:22:52.05|-11.19,55:16:53.01|-32,5.80,2000 +NO CMA|SAO 197925|HD 58155|CD-31 4437|PPM 283892|HR 2819|J072300.69-315525.6,f|V|B5,7:23:0.70|-8.53,-31:55:25.61|3.7,5.42,2000 +Gem 58|HD 57744|BD+23 1698|PPM 97452|J072328.13+225643.2,f|S|A1,7:23:28.14|-25.97,22:56:43.26|-35.9,6.18,2000 +Gem 57|HD 57727|BD+25 1660|PPM 97453|J072328.51+250301.9,f|S|G8,7:23:28.51|-66.59,25:3:1.91|-28.4,5.03,2000 +V17453|SAO 173622|HD 58215|CD-27 4020|PPM 252283|HR 2822|J072328.99-275003.4,f|V|K2,7:23:28.99|26.40,-27:50:3.46|-4.1,5.36,2000 +SAO 197938|HD 58286|CD-31 4454|HR 2823|J072331.89-321207.4,f|S|B3,7:23:31.90|-7.87,-32:12:7.44|4.6,5.40,2000 +SAO 197951|CD-35 3569|PPM 283916|HR 2829|J072358.33-355016.1,f|D|B7,7:23:58.33|-9.61,-35:50:16.16|15.4,6.31,2000 +Aludra|CMa Eta-31|Eta Canis Majoris|SAO 173651|CD-29 4328|PPM 252311|HR 2827|J072405.70-291811.1,f|D|B5,7:24:5.70|-3.79,-29:18:11.17|6.7,2.46,2000 +Aur 66|HD 57669|BD+40 1852|PPM 49822|J072408.46+404020.6,f|S|K1,7:24:8.47|-3.30,40:40:20.60|-21.1,5.19,2000 +SAO 173656|HD 58346|CD-22 4462|HR 2826|J072417.23-225445.9,f|S|B9,7:24:17.23|-4.42,-22:54:45.93|2.8,6.21,2000 +OT GEM|BD+15 1564|PPM 123969|HR 2817|J072427.64+153101.9,f|V|B2,7:24:27.65|-1.45,15:31:1.90|-1.5,6.46,2000 +Gem 59|HD 57927|BD+27 1374|PPM 97472|HR 2816|J072433.45+273816.2,f|S|A5,7:24:33.45|14.35,27:38:16.28|15.5,5.78,2000 +CP-71 574|PPM 369527|J072437.12-712814.3,f|S|A3,7:24:37.13|7.67,-71:28:14.37|41,6.49,2000 +FW CMA|SAO 152834|HD 58343|SD-15 1810|HR 2825|J072440.18-161205.3,f|V|B2,7:24:40.19|-4.61,-16:12:5.30|-20.2,5.20,2000 +V3584|SAO 197964|HD 58535|CD-31 4482|PPM 283937|HR 2834|J072443.85-314832.0,f|D|K0,7:24:43.85|-21.42,-31:48:32.06|8.7,5.34,2000 +V17463|SAO 152837|HD 58439|SD-18 1825|PPM 218612|HR 2831|J072450.88-190044.2,f|D|A2,7:24:50.88|-2.98,-19:0:44.21|3.8,6.28,2000 +HD 57646|BD+52 1205|PPM 31112|J072457.08+515314.1,f|S|K5,7:24:57.09|9.44,51:53:14.13|-35.1,5.80,2000 +CMi 1|HD 58187|BD+11 1578|PPM 123974|J072458.17+114010.2,f|S|A5,7:24:58.18|-16.31,11:40:10.29|-14.9,5.37,2000 +HD 58461|SD-13 2001|PPM 218618|HR 2832|J072508.31-134507.1,f|S|F0,7:25:8.32|-202.96,-13:45:7.12|-0.9,5.79,2000 +SAO 173691|HD 58585|SD-21 1925|PPM 252359|HR 2839|J072519.97-215857.3,f|D|A8,7:25:19.98|-1.67,-21:58:57.33|3,6.04,2000 +V17418|BD+81 242|PPM 1228|J072521.96+811526.8,f|V|A0,7:25:21.96|-2.30,81:15:26.84|-31.8,6.29,2000 +SAO 173697|HD 58612|CD-24 5366|PPM 252363|HR 2841|J072525.26-251303.9,f|S|B7,7:25:25.27|-8.69,-25:13:3.96|-0.9,5.79,2000 +Men Epsilon|SAO 256415|CP-78 265|PPM 369536|HR 2919|J072538.09-790539.0,f|S|K2,7:25:38.10|-29.88,-79:5:39.08|6,5.53,2000 +CMi Epsilon-2|SAO 115425|HD 58367|BD+09 1643|PPM 152614|HR 2828|J072538.89+091633.9,f|S|G6,7:25:38.90|-2.96,9:16:33.95|-8.7,4.99,2000 +V17473|SAO 197986|HD 58766|CD-31 4506|PPM 283954|HR 2847|J072542.97-314419.3,f|V|B2,7:25:42.98|-8.80,-31:44:19.39|4.6,6.31,2000 +Gem Iota-60|BD+28 1385|PPM 97492|HR 2821|J072543.59+274753.0,f|S|G9,7:25:43.60|-121.28,27:47:53.09|-84.4,3.79,2000 +SAO 134654|HD 58526|SD-05 2112|HR 2833|J072551.20-054629.8,f|S|G3,7:25:51.20|-5.97,-5:46:29.86|-2.9,5.97,2000 +SAO 235192|HD 59219|CD-50 2761|HR 2862|J072621.85-510106.5,f|S|K0,7:26:21.85|-5.47,-51:1:6.53|6.1,5.08,2000 +HD 58552|BD+10 1532|HR 2836|J072627.78+103629.0,f|S|A2,7:26:27.79|-35.97,10:36:29.04|0.2,6.38,2000 +HD 58599|BD+11 1588|J072641.21+110031.7,f|S|B6,7:26:41.21|-5.45,11:0:31.80|-10.4,6.38,2000 +CD-33 3813|PPM 283968|HR 2856|J072642.46-340826.4,f|S|B2,7:26:42.47|-8.07,-34:8:26.49|6.4,5.90,2000 +Lyn 21|V3585|HD 58142|BD+49 1623|PPM 49857|HR 2818|J072642.85+491241.4,f|V|A1,7:26:42.85|-10.78,49:12:41.50|-48.6,4.62,2000 +Gem 61|V3592|HD 58579|BD+20 1805|HR 2837|J072656.33+201527.2,f|V|F2,7:26:56.33|2.25,20:15:27.20|-10.4,5.94,2000 +FY CMA|SAO 173752|HD 58978|CD-22 4526|PPM 252419|HR 2855|J072659.48-230509.6,f|V|B0,7:26:59.48|-6.62,-23:5:9.68|4,5.62,2000 +NR CMA|SAO 152894|HD 58954|SD-17 1980|PPM 218671|HR 2853|J072707.98-175153.5,f|D|A5,7:27:7.99|-3.28,-17:51:53.50|1.6,5.62,2000 +Gomeisa|Algomeyla|CMi Beta-3A|Beta Canis Minoris|SAO 115456|HD 58715|BD+08 1774|PPM 152663|HR 2845|J072709.04+081721.5,f|D|B8,7:27:9.04|-50.32,8:17:21.54|-38.5,2.89,2000 +HD 57742|BD+66 502|PPM 16193|J072725.83+661953.6,f|S|B9,7:27:25.84|-3.25,66:19:53.66|-28.9,6.47,2000 +SAO 173778|HD 59136|CD-22 4540|PPM 252445|J072742.93-225133.1,f|S|B5,7:27:42.94|-1.24,-22:51:33.12|-0.4,5.98,2000 +Gem 63A|HD 58728|BD+21 1602|PPM 97529|HR 2846|J072744.36+212642.8,f|D|F5,7:27:44.36|-49.56,21:26:42.89|-123.9,5.24,2000 +V3600|SD-11 1951A|PPM 218687|HR 2859|J072751.66-113324.7,f|D|G8,7:27:51.66|-2.20,-11:33:24.72|-2.3,5.86,2000 +V3600|SD-11 1951B|PPM 218687|J072751.67-113325.5,f|D|A0,7:27:51.67|-2.20,-11:33:25.51|-2.3,5.86,2000 +V17483|SAO 173799|HD 59256|CD-28 4383|PPM 252458|HR 2863|J072759.16-290921.2,f|V|B9,7:27:59.16|-10.09,-29:9:21.23|2.3,5.55,2000 +SAO 173797|HD 59235|CD-26 4399|PPM 252461|J072801.92-265020.3,f|D|K4,7:28:1.93|11.78,-26:50:20.31|9,6.26,2000 +CMi Eta-5|SAO 115477|HD 58923|BD+07 1729|PPM 152689|HR 2851|J072802.07+065631.0,f|D|F0,7:28:2.07|-3.42,6:56:31.09|-44.9,5.24,2000 +CMi Gamma-4A|V17480|SAO 115478|HD 58972|BD+09 1660|PPM 152692|HR 2854|J072809.79+085531.9,f|D|K3,7:28:9.79|-59.27,8:55:31.91|10.8,4.33,2000 +HD 58898|BD+27 1395|J072839.90+273310.5,f|S|K0,7:28:39.90|17.02,27:33:10.58|24.2,6.38,2000 +BD+15 1579|HR 2858|J072847.25+150635.3,f|S|B9,7:28:47.25|-7.53,15:6:35.36|-15.4,6.23,2000 +HD 59499|CD-31 4590A|J072851.15-315054.2,f|D|B3,7:28:51.15|-11.59,-31:50:54.24|4.4,6.38,2000 +SAO 249864|CP-64 721|HR 2888|J072851.40-643035.2,f|S|K5,7:28:51.41|5.36,-64:30:35.30|-8.4,6.39,2000 +V17478|HD 58661|BD+48 1538|PPM 49891|HR 2844|J072851.48+481102.1,f|D|B9,7:28:51.48|-3.20,48:11:2.15|-44.4,5.71,2000 +HD 58681|BD+46 1273|PPM 49892|J072852.62+461852.6,f|S|K0,7:28:52.63|-41.65,46:18:52.62|-65.7,6.43,2000 +CD-31 4593|HR 2873|J072904.91-312722.3,f|S|B2,7:29:4.91|-10.49,-31:27:22.38|5.5,5.78,2000 +HD 59635|CD-38 3400|HR 2875|J072905.69-384843.4,f|S|B5,7:29:5.70|-21.04,-38:48:43.43|16.4,5.40,2000 +Gem Rho-62A|V17482|HD 58946|BD+32 1562|PPM 72843|HR 2852|J072906.71+314704.3,f|D|F0,7:29:6.72|159.38,31:47:4.38|193.8,4.18,2000 +Pup Sigma|ig Pup|SAO 218755|HD 59717|CD-43 3260A|PPM 311853|HR 2878|J072913.83-431805.1,f|D|K5,7:29:13.83|-59.82,-43:18:5.16|188.7,3.26,2000 +HD 59311|BD-01 1738|PPM 176957|HR 2865|J072918.66-015419.1,f|S|K5,7:29:18.67|-11.54,-1:54:19.18|-9,5.58,2000 +Gem 64|BD+28 1396|PPM 97566|HR 2857|J072920.44+280705.7,f|S|A4,7:29:20.44|-33.34,28:7:5.79|-52.9,5.07,2000 +SAO 152943|HD 59438|SD-14 1925|PPM 218724|HR 2868|J072921.86-145955.1,f|D|F7,7:29:21.86|-187.78,-14:59:55.16|-231.3,6.05,2000 +V17487|SAO 152941|HD 59381|SD-10 2067|PPM 218725|HR 2867|J072922.10-101935.9,f|V|K5,7:29:22.11|-6.94,-10:19:35.99|-2.7,5.73,2000 +SAO 134742|SD-07 1996|HR 2866|J072925.63-073304.2,f|S|F8,7:29:25.64|50.86,-7:33:4.21|125.9,5.87,2000 +CMi 6|V3609|HD 59294|BD+12 1567|HR 2864|J072947.78+120023.6,f|V|K1,7:29:47.78|1.32,12:0:23.63|-19.3,4.54,2000 +Gem 65A|HD 59148|BD+28 1400|PPM 97576|HR 2861|J072948.76+275458.1,f|D|K2,7:29:48.77|-23.99,27:54:58.13|-21.7,5.01,2000 +V17491|SAO 173864|HD 59612|CD-22 4587|PPM 252529|HR 2874|J072951.41-230127.4,f|D|A5,7:29:51.41|-2.62,-23:1:27.43|4.9,4.86,2000 +Lyn 22A|HD 58855|BD+49 1630|HR 2849|J072955.95+494020.8,f|D|F6,7:29:55.96|110.37,49:40:20.87|-82,5.36,2000 +SAO 235239|CP-52 1198|HR 2884|J072959.72-523904.1,f|S|K0,7:29:59.72|-22.48,-52:39:4.17|53.5,5.87,2000 +SAO 235252|CP-54 1294|HR 2892|J073030.91-542357.7,f|S|M1,7:30:30.92|13.27,-54:23:57.71|27.5,5.95,2000 +V17496|CD-30 4620|HR 2881|J073042.60-305744.2,f|V|G3,7:30:42.60|-11.70,-30:57:44.21|0.8,4.64,2000 +SAO 134774|HD 59669|SD-04 1979|HR 2876|J073051.13-051335.3,f|S|K0,7:30:51.13|-6.42,-5:13:35.38|-3.2,6.23,2000 +HD 58425|BD+68 480|PPM 16214|J073052.69+682756.2,f|S|K5,7:30:52.70|-2.20,68:27:56.23|-43.7,5.65,2000 +VZ CAM|HD 55966|BD+82 201|PPM 1245|HR 2742|J073104.46+822441.2,f|V|M4,7:31:4.46|-3.70,82:24:41.28|-42.3,4.89,2000 +BD+11 1598|J073108.78+111210.7,f|S|K0,7:31:8.78|-17.80,11:12:10.72|-14.2,6.38,2000 +HD 59686|BD+17 1596|PPM 124127|HR 2877|J073148.39+170509.7,f|S|K5,7:31:48.40|42.73,17:5:9.77|-75.4,5.44,2000 +V17502|HD 59984|SD-08 1964|HR 2883|J073205.76-085252.7,f|D|F5,7:32:5.76|-92.18,-8:52:52.77|-167.5,5.93,2000 +CMi Delta-7|SAO 115581|HD 59881|BD+02 1691|PPM 152819|J073205.94+015452.1,f|S|F0,7:32:5.95|-2.10,1:54:52.13|-0.6,5.24,2000 +CD-35 3659|HR 2895|J073222.27-355740.2,f|D|B9,7:32:22.27|-13.84,-35:57:40.28|4.2,6.36,2000 +SAO 173987|CD-24 5566|PPM 252649|J073309.77-244238.6,f|S|A7,7:33:9.78|-1.77,-24:42:38.63|20.1,5.85,2000 +CMi Delta-8|BD+03 1715|HR 2887|J073311.66+031725.3,f|S|F2,7:33:11.67|-15.72,3:17:25.36|42.8,5.59,2000 +V0376 PUP|CD-39 3398|J073313.15-400330.6,f|V|B8,7:33:13.16|-15.96,-40:3:30.68|5.7,6.26,2000 +SD-19 1944|PPM 218842|HR 2899|J073319.56-192445.0,f|S|K3,7:33:19.56|24.05,-19:24:45.09|-70.2,5.63,2000 +SD-14 1966|PPM 218843|HR 2897|J073322.18-142017.9,f|S|B1,7:33:22.19|-3.49,-14:20:17.91|-0.1,6.21,2000 +HD 59826|BD+37 1740|PPM 72911|J073324.82+371116.4,f|S|K0,7:33:24.83|-0.60,37:11:16.43|5.9,6.42,2000 +Gem 68|V3642|BD+16 1510|PPM 124164|HR 2886|J073336.48+154935.9,f|D|A1,7:33:36.48|-29.30,15:49:35.98|-12.6,5.27,2000 +KQ PUP|SD-14 1971A|PPM 218852|J073347.96-143126.0,f|V|M2,7:33:47.96|-7.70,-14:31:26.01|3.6,4.96,2000 +OW PUP|CD-36 3715|HR 2911|J073351.04-362018.2,f|V|B3,7:33:51.04|-8.58,-36:20:18.21|4.1,5.42,2000 +HD 59721|BD+51 1327|PPM 31187|J073351.51+511850.9,f|S|K0,7:33:51.52|-11.44,51:18:50.93|-22.6,6.44,2000 +SD-21 2007|PPM 252677|J073403.18-221745.8,f|S|F6,7:34:3.18|-40.39,-22:17:45.84|46.8,4.45,2000 +BD+10 1563|HR 2893|J073404.96+103405.0,f|S|A1,7:34:4.96|-30.67,10:34:5.08|-15.3,6.28,2000 +SAO 198138|CD-33 3926|HR 2913|J073412.82-332748.3,f|S|A9,7:34:12.83|-55.94,-33:27:48.35|63.3,6.11,2000 +CMi Delta-9A|SAO 115644|BD+03 1719|J073415.89+032218.2,f|D|A0,7:34:15.89|-3.14,3:22:18.21|-4.5,5.84,2000 +CD-23 5709A|PPM 252684|J073418.61-232825.1,f|D|F5,7:34:18.62|-88.74,-23:28:25.18|1,6.02,2000 +V17513|CD-23 5709B|PPM 252685|J073419.25-232829.6,f|D|F5,7:34:19.26|-85.03,-23:28:29.64|-12.8,5.83,2000 +CD-26 4574|PPM 252697|HR 2916|J073434.79-270044.1,f|S|K1,7:34:34.79|-46.91,-27:0:44.19|71.5,5.78,2000 +Castor|Apollo|Gem Alpha-66A|BD+32 1581A|HR 2891|J073435.86+315317.7,f|D|A1,7:34:35.86|-206.33,31:53:17.80|-148.2,1.58,2000 +Gem Alpha-66B|BD+32 1581B|PPM 72938|J073436.10+315318.5,f|D|A2,7:34:36.10|-206.33,31:53:18.57|-148.2,2.88,2000 +CD-51 2571|PPM 336173|HR 2925|J073439.58-512828.2,f|S|A1,7:34:39.58|-4.76,-51:28:28.26|8.5,6.30,2000 +BD+31 1620|PPM 72946|HR 2896|J073508.79+305739.3,f|D|K0,7:35:8.80|-25.21,30:57:39.40|5.8,5.34,2000 +SAO 256428|HD 62153|CP-73 457A|HR 2979|J073521.65-741629.8,f|D|B9,7:35:21.65|-3.62,-74:16:29.85|20.8,6.33,2000 +CD-28 4566|PPM 252722|HR 2922|J073522.89-282209.5,f|D|B8,7:35:22.89|-66.92,-28:22:9.56|-18.7,4.65,2000 +V3661|SAO 235336|HD 61248|CP-52 1231|HR 2934|J073539.72-523201.8,f|V|K3,7:35:39.72|23.45,-52:32:1.81|-11.6,4.93,2000 +Gem Upsilon-69|V3652|BD+27 1424|PPM 97726|J073555.34+265344.6,f|D|M0,7:35:55.35|-39.60,26:53:44.67|-108.1,4.07,2000 +CC LYN|BD+43 1711|PPM 49986|HR 2898|J073555.97+430151.4,f|D|F0,7:35:55.98|-26.10,43:1:51.45|-52.7,6.50,2000 +SAO 235343|HD 61394|CP-55 1282|HR 2941|J073601.60-555315.7,f|S|K1,7:36:1.60|-14.55,-55:53:15.75|10.4,6.40,2000 +V0378 PUP|SAO 153118|SD-14 1999|HR 2921|J073603.89-142933.9,f|D|B2,7:36:3.89|-6.24,-14:29:33.98|0.9,5.66,2000 +SD-21 2030|PPM 252756|HR 2923|J073607.41-220937.8,f|S|G5,7:36:7.41|-15.84,-22:9:37.82|-11.5,6.40,2000 +V17518|SAO 134883|SD-07 2065|J073616.69-081840.6,f|V|K2,7:36:16.70|46.46,-8:18:40.69|3.2,6.28,2000 +BD+46 1286|J073631.63+461049.0,f|S|M0,7:36:31.63|-28.35,46:10:49.04|-32.9,5.65,2000 +SAO 115693|BD+06 1729|PPM 152982|HR 2918|J073634.70+055143.8,f|S|G0,7:36:34.71|-108.78,5:51:43.82|27.7,5.91,2000 +PT PUP|SAO 153149|SD-19 1967|PPM 218927|HR 2928|J073641.03-194208.4,f|V|B2,7:36:41.03|-8.19,-19:42:8.42|6.2,5.71,2000 +SAO 218841|HD 61391|CD-48 3069|PPM 311974|J073643.91-484948.6,f|S|B9,7:36:43.92|-7.50,-48:49:48.60|0.9,5.69,2000 +BD+56 1227|PPM 31213|HR 2894|J073647.03+554518.2,f|S|K2,7:36:47.04|-10.89,55:45:18.22|-39,5.94,2000 +Mon 25A|V3665|SAO 134899|SD-03 1979|HR 2927|J073716.69-040639.5,f|D|F6,7:37:16.69|-67.48,-4:6:39.53|17.7,5.14,2000 +SAO 174141|HD 61227|CD-23 5791|HR 2933|J073716.92-234631.4,f|S|F0,7:37:16.93|-5.49,-23:46:31.44|5.5,6.37,2000 +BD+40 1903|PPM 49998|HR 2915|J073717.79+400131.3,f|S|Ma,7:37:17.79|-15.05,40:1:31.38|-49,6.34,2000 +SAO 198195|CD-34 3755|HR 2937|J073722.11-345806.7,f|D|B8,7:37:22.11|-13.64,-34:58:6.71|16.5,4.53,2000 +HD 61453|CD-37 3736|PPM 284183|HR 2945|J073745.02-380037.5,f|S|K4,7:37:45.02|-12.05,-38:0:37.53|60.3,6.38,2000 +V17522|BD+49 1653|HR 2914|J073753.84+484625.8,f|V|A5,7:37:53.85|-32.62,48:46:25.83|-28.5,5.91,2000 +BD+24 1727|HR 2926|J073814.36+242137.5,f|S|F0,7:38:14.37|10.79,24:21:37.59|19.9,6.38,2000 +m Pup|PU PUP|SAO 174175|HD 61429|CD-25 4828|PPM 252841|HR 2944|J073818.04-252153.2,f|D|B8,7:38:18.05|-2.30,-25:21:53.30|-6.7,4.69,2000 +MY PUP|SAO 218852|HD 61715|CD-48 3091|PPM 311992|HR 2957|J073818.20-483605.1,f|V|F4,7:38:18.21|-4.17,-48:36:5.17|5.1,5.68,2000 +SAO 198229|HD 61642|CD-38 3521|HR 2955|J073832.53-384653.3,f|S|G8,7:38:32.54|17.07,-38:46:53.35|-35.3,6.19,2000 +Gem 70A|BD+35 1662|PPM 72996|HR 2924|J073832.86+350254.7,f|D|K0,7:38:32.86|37.21,35:2:54.78|27.3,5.58,2000 +j Pup|SAO 198237|HD 61641|CD-36 3773|HR 2954|J073843.89-362948.5,f|S|B2,7:38:43.90|-6.87,-36:29:48.59|4.8,5.78,2000 +V0390 CAR|SAO 235391|HD 61966|CP-52 1242|PPM 336255|HR 2971|J073900.31-531624.0,f|D|B9,7:39:0.32|-17.58,-53:16:24.08|9.4,6.05,2000 +Gem Omicron-71|BD+34 1649|J073909.93+343503.6,f|S|F3,7:39:9.93|-35.94,34:35:3.65|-118,4.89,2000 +HD 61219|BD+24 1730|PPM 97796|HR 2931|J073912.00+241321.1,f|S|A2,7:39:12.01|-2.33,24:13:21.10|0.2,6.18,2000 +Procyon|Elgomaisa|Antecanis|CMi Alpha-10A|V3672|SAO 115756|HD 61421|BD+05 1739|HR 2943|J073918.11+051329.9,f|D|F5,7:39:18.12|-716.56,5:13:29.98|-1034.6,0.40,2000 +HD 61589|SD-16 2069|J073924.19-165050.2,f|S|K3,7:39:24.20|0.14,-16:50:50.25|-15.3,6.38,2000 +SAO 174219|HD 61672|CD-26 4722|HR 2956|J073926.98-265147.1,f|S|B7,7:39:26.98|-4.01,-26:51:47.17|-3.2,6.50,2000 +SAO 198253|HD 61831|CD-38 3531|PPM 284226|HR 2961|J073927.33-381828.8,f|S|B2,7:39:27.34|-21.30,-38:18:28.88|16,4.84,2000 +Gem 74|V3671|HD 61338|BD+18 1701|PPM 124288|HR 2938|J073928.59+174028.2,f|V|K5,7:39:28.59|2.29,17:40:28.27|1.3,5.04,2000 +SAO 198265|HD 61878|CD-37 3767|HR 2963|J073943.81-380821.4,f|D|B5,7:39:43.81|-22.53,-38:8:21.43|16.9,5.76,2000 +SAO 198268|HD 61899|CD-37 3768|PPM 284241|HR 2964|J073947.87-381538.3,f|S|B2,7:39:47.87|-10.36,-38:15:38.35|9.7,5.76,2000 +HD 61295|BD+32 1599|HR 2936|J073954.08+320035.0,f|S|F6,7:39:54.09|-15.01,32:0:35.02|-39.7,6.17,2000 +V468 PUP|SAO 198273|HD 61925|CD-37 3770|PPM 284247|HR 2968|J073957.99-373445.9,f|V|B6,7:39:57.99|-1.43,-37:34:45.92|-3.9,6.01,2000 +SAO 115773|HD 61563|BD+05 1742|J074006.99+051351.9,f|D|A0,7:40:6.99|-7.47,5:13:51.91|-28,6.01,2000 +SAO 153225|HD 61774|SD-19 2003|J074013.52-193939.1,f|D|K0,7:40:13.53|-3.67,-19:39:39.10|11.9,5.93,2000 +V17538|HD 61294|BD+38 1803|HR 2935|J074014.69+382040.3,f|V|M0,7:40:14.69|-40.23,38:20:40.34|-11.5,5.76,2000 +SAO 153224|SD-11 2054|J074021.01-114509.1,f|S|K2,7:40:21.01|-8.37,-11:45:9.19|-14,6.43,2000 +SAO 153227|HD 61772|SD-14 2082|HR 2959|J074023.21-151550.1,f|S|K3,7:40:23.21|-2.32,-15:15:50.11|-28,4.97,2000 +OV CEP|BD+87 51|PPM 1266|J074030.49+870112.3,f|V|M2,7:40:30.49|-53.48,87:1:12.33|-26.9,5.05,2000 +SAO 134969|HD 61749|SD-07 2118|HR 2958|J074035.52-081107.5,f|S|A3,7:40:35.52|21.23,-8:11:7.55|-29.4,6.03,2000 +BD+14 1721|HR 2953|J074047.18+134616.5,f|S|K0,7:40:47.18|-2.77,13:46:16.50|-7.9,6.20,2000 +Lyn 23|BD+57 1093|PPM 31255|HR 2929|J074049.53+570458.3,f|S|K5,7:40:49.53|-24.13,57:4:58.31|-4.4,6.08,2000 +BD+23 1780|PPM 97834|HR 2951|J074058.51+230106.6,f|S|K5,7:40:58.52|-7.18,23:1:6.70|-13,5.92,2000 +HD 61363|BD+48 1561|HR 2939|J074112.39+480753.5,f|S|K0,7:41:12.40|-52.66,48:7:53.52|-131,5.59,2000 +Mon Alpha-26|SAO 134986|HD 61935|SD-09 2172|J074114.83-093304.0,f|S|G9,7:41:14.83|-74.85,-9:33:4.07|-19.6,3.94,2000 +SAO 198298|HD 62226|CD-38 3556|PPM 284278|HR 2981|J074115.81-383200.7,f|S|B5,7:41:15.81|-20.77,-38:32:0.72|16.3,5.41,2000 +HD 62318|CD-44 3655|HR 2984|J074121.72-443755.8,f|S|B7,7:41:21.72|-0.11,-44:37:55.80|4.6,6.41,2000 +V17557|SAO 174298|SD-21 2077|PPM 252955|HR 2976|J074123.52-222012.1,f|V|M1,7:41:23.53|4.02,-22:20:12.20|12.9,6.18,2000 +V3689|SAO 115813|HD 61887|BD+03 1758|PPM 153144|HR 2966|J074135.15+033729.2,f|V|A0,7:41:35.16|-2.25,3:37:29.20|-20.1,5.96,2000 +Vol Zeta|SAO 256438|HD 63295|CP-72 627A|J074149.26-723621.9,f|D|K0,7:41:49.26|33.36,-72:36:21.95|15.3,3.95,2000 +V17555|HD 61885|BD+13 1737|PPM 124326|HR 2965|J074151.84+132849.6,f|V|M2,7:41:51.85|-35.59,13:28:49.63|-25,5.80,2000 +NZ GEM|HD 61913|BD+14 1729|PPM 124332|HR 2967|J074203.21+141230.6,f|V|M3,7:42:3.22|-1.02,14:12:30.61|-10.8,5.57,2000 +HD 62758|CP-58 967|PPM 336293|J074210.21-583751.3,f|S|B2,7:42:10.22|-5.39,-58:37:51.31|7,6.40,2000 +HD 61859|BD+34 1657|HR 2962|J074243.54+340000.7,f|S|F7,7:42:43.55|-83.57,34:0:0.79|-2.8,6.04,2000 +SAO 174356|HD 62412|CD-26 4824|HR 2988|J074248.15-262104.7,f|S|K1,7:42:48.15|-2.55,-26:21:4.77|-29.6,5.63,2000 +HD 62897|CP-57 1305|J074253.32-581348.2,f|S|K0,7:42:53.33|-31.99,-58:13:48.21|38.7,6.21,2000 +SAO 218923|HD 62644|CD-44 3675|HR 2998|J074257.09-451023.2,f|S|G6,7:42:57.10|-77.72,-45:10:23.23|-553.4,5.05,2000 +Lyn 24|HD 61497|BD+59 1103|PPM 31272|HR 2946|J074300.41+584237.2,f|D|A3,7:43:0.42|-37.00,58:42:37.30|-52.1,4.96,2000 +SAO 115839|HD 62264|BD+00 2054|PPM 153183|HR 2982|J074305.41+001121.5,f|D|K0,7:43:5.42|0.90,0:11:21.60|-12.9,6.21,2000 +SAO 198343|HD 62578|CD-35 3809|PPM 284329|HR 2994|J074311.98-360300.3,f|S|B5,7:43:11.98|-21.10,-36:3:0.32|14.2,5.60,2000 +Gem Sigma-75|ig Gem|BD+29 1590|PPM 97883|HR 2973|J074318.72+285300.6,f|D|K1,7:43:18.73|61.86,28:53:0.64|-231.3,4.25,2000 +HD 62141|BD+22 1756|PPM 97886|HR 2978|J074322.18+222358.0,f|S|K0,7:43:22.18|-22.61,22:23:58.10|16.3,6.24,2000 +Pup 1A|V3708|SAO 174391|HD 62576|CD-28 4767|HR 2993|J074332.38-282439.1,f|D|K3,7:43:32.39|-13.59,-28:24:39.19|29.8,4.61,2000 +SAO 218932|HD 62713|CD-40 3377|J074341.92-405601.4,f|S|K1,7:43:41.93|131.11,-40:56:1.49|-171.2,5.12,2000 +V17579|SAO 198352|HD 62712|CD-37 3820|PPM 284338|J074342.91-381206.7,f|V|B9,7:43:42.92|-21.45,-38:12:6.77|15.6,6.42,2000 +Pup 3|V17577|HD 62623|CD-28 4774|HR 2996|J074348.46-285717.3,f|V|A2,7:43:48.47|-4.59,-28:57:17.37|3.9,3.98,2000 +HD 61931|BD+50 1460|PPM 31285|HR 2969|J074404.17+502601.6,f|S|A0,7:44:4.18|-9.27,50:26:1.66|-27.8,5.33,2000 +Gem 76|V3703|HD 62285|BD+26 1633|HR 2983|J074406.91+254702.9,f|V|K4,7:44:6.91|-13.37,25:47:2.97|-21.2,5.29,2000 +AZ CMI|SAO 115864|HD 62437|BD+02 1761|PPM 153219|HR 2989|J074407.63+022419.5,f|V|F0,7:44:7.63|-18.13,2:24:19.52|-8.6,6.47,2000 +SAO 198366|HD 62781|CD-35 3825|J074409.68-360345.0,f|S|F2,7:44:9.69|-79.42,-36:3:45.02|85.8,5.80,2000 +SAO 249943|HD 63584|CP-69 770|PPM 356217|J074413.01-694917.7,f|S|A0,7:44:13.02|-46.72,-69:49:17.73|9.6,6.17,2000 +BD+13 1750|PPM 124382|HR 2987|J074414.05+125136.2,f|S|K0,7:44:14.06|-14.62,12:51:36.26|-18.4,6.40,2000 +Gem Kappa-77|HD 62345|BD+24 1759|HR 2985|J074426.85+242352.7,f|D|G8,7:44:26.85|-22.40,24:23:52.77|-56.2,3.57,2000 +V0390 PUP|SAO 174433|HD 62747|CD-24 5885|J074434.16-244026.6,f|V|B1,7:44:34.17|-4.23,-24:40:26.68|5.2,5.61,2000 +SAO 198379|HD 62893|CD-37 3841|PPM 284364|J074434.18-375634.5,f|S|B7,7:44:34.18|-22.24,-37:56:34.50|15.7,5.89,2000 +SAO 249944|HD 63513|CP-65 806|PPM 356221|J074443.85-660418.9,f|S|G6,7:44:43.85|-16.00,-66:4:18.96|47.4,6.39,2000 +c Pup|V3723|SAO 198398|CD-37 3863|PPM 284382|J074515.29-375806.9,f|V|K2,7:45:15.30|-10.76,-37:58:6.90|6,3.62,2000 +SAO 218955|HD 63118|CD-43 3534|PPM 312123|J074518.04-434509.2,f|S|B6,7:45:18.04|-9.43,-43:45:9.24|-2.8,6.02,2000 +Pollux|Hercules|Gem Beta-78A|V3712|BD+28 1463|PPM 97924|J074518.95+280134.3,f|D|K0,7:45:18.95|-625.64,28:1:34.31|-46,1.22,2000 +Pup 2A|SAO 153363|HD 62864|SD-14 2194|J074529.13-144125.9,f|D|A2,7:45:29.13|-15.09,-14:41:25.93|-21.4,6.05,2000 +CD-33 4113|J074535.02-341020.5,f|S|G0,7:45:35.02|-220.78,-34:10:20.51|1722.7,5.36,2000 +HD 63382|CP-56 1420|J074535.51-564321.2,f|D|F0,7:45:35.52|-4.03,-56:43:21.25|11,6.11,2000 +Pup 4|SAO 153372|HD 62952|SD-14 2199|PPM 219161|J074556.87-143349.6,f|S|F0,7:45:56.87|-11.18,-14:33:49.70|6.3,5.04,2000 +SD-06 2281|J074602.19-064621.0,f|S|K5,7:46:2.19|48.86,-6:46:21.04|-93.1,5.50,2000 +Gem 81|HD 62721|BD+18 1733|PPM 124413|J074607.44+183036.1,f|S|K4,7:46:7.45|-75.53,18:30:36.16|-51.5,4.87,2000 +V0392 PUP|SAO 198416|HD 63215|CD-37 3886|J074610.54-375601.2,f|V|B7,7:46:10.54|-19.52,-37:56:1.21|12.4,5.87,2000 +CMi 11|V3724|HD 62832|BD+11 1670|PPM 124416|J074616.20+104605.7,f|V|A1,7:46:16.20|-30.95,10:46:5.71|-24.5,5.25,2000 +Cam 49|BC CAM|BD+63 733|PPM 16344|HR 2977|J074627.41+624949.8,f|V|F0,7:46:27.41|-36.99,62:49:49.88|-61,6.47,2000 +SAO 198423|HD 63291|CD-37 3895|J074633.41-374621.2,f|S|K3,7:46:33.41|-50.15,-37:46:21.25|-31.5,6.31,2000 +V3721|HD 62647|BD+37 1769|HR 2999|J074639.28+373102.6,f|V|M2,7:46:39.28|30.22,37:31:2.62|12.7,5.17,2000 +Cam 51|BD+65 593|PPM 16345|HR 2975|J074640.07+652720.4,f|S|K5,7:46:40.08|28.16,65:27:20.43|18.4,5.94,2000 +SAO 153389|HD 63112|SD-12 2135|PPM 219182|J074644.71-124031.1,f|S|A0,7:46:44.71|-10.39,-12:40:31.13|-0.1,6.40,2000 +OX PUP|SAO 198435|CD-39 3595|PPM 284418|J074705.75-391951.5,f|V|B8,7:47:5.76|-22.16,-39:19:51.58|15.5,6.33,2000 +V17603|SAO 174533|HD 63271|CD-22 5140|J074712.55-223110.2,f|V|B2,7:47:12.55|-7.62,-22:31:10.24|10.3,5.90,2000 +SAO 198437|HD 63399|CD-35 3874|PPM 284424|J074714.59-360424.9,f|S|K1,7:47:14.59|-34.80,-36:4:24.96|27.1,6.45,2000 +V17607|SAO 198442|HD 63465|CD-38 3650|PPM 284426|J074724.99-383040.1,f|D|B2,7:47:24.99|-9.98,-38:30:40.12|4.7,5.08,2000 +Gem Pi-80A|V3729|HD 62898|BD+33 1585|J074730.32+332456.5,f|D|M1,7:47:30.32|-18.78,33:24:56.51|-28.6,5.14,2000 +HD 63578|CD-46 3435|PPM 312163|J074731.50-463630.5,f|S|B1,7:47:31.51|-3.61,-46:36:30.56|8,5.23,2000 +QY PUP|SD-15 2049|PPM 219195|J074738.52-155926.4,f|V|K1,7:47:38.53|-1.59,-15:59:26.48|3.6,6.32,2000 +V3741|HD 63323|SD-15 2052|J074745.20-160052.1,f|D|M2,7:47:45.21|-7.79,-16:0:52.14|-0.8,6.40,2000 +SAO 153413|SD-11 2106B|J074756.70-121132.3,f|D|F5,7:47:56.70|-117.59,-12:11:32.30|57.8,5.48,2000 +Pup 5A|SAO 153414|HD 63336|SD-11 2106A|J074756.71-121133.7,f|D|F5,7:47:56.72|-104.68,-12:11:33.74|77.4,5.62,2000 +Pup Omicron|Omicron Puppis|SAO 174558|HD 63462|CD-25 5081|PPM 253217|J074805.16-255613.8,f|D|B0,7:48:5.17|-10.25,-25:56:13.81|4.9,4.50,2000 +T PUP|CD-40 3490|PPM 312172|J074808.54-403908.5,f|V|M2,7:48:8.55|-3.30,-40:39:8.56|-26.6,6.16,2000 +SAO 235532|HD 63927|CP-56 1437B|J074819.43-562816.6,f|D|A1,7:48:19.44|-4.64,-56:28:16.60|7.3,6.30,2000 +SAO 235532|HD 63926|CP-56 1437A|J074819.50-562815.8,f|D|K0,7:48:19.50|-4.64,-56:28:15.87|7.3,6.30,2000 +HD 63744|CD-46 3451|PPM 312177|J074820.16-470439.8,f|S|K0,7:48:20.16|-101.33,-47:4:39.80|-78.4,4.69,2000 +Gem 82A|V17606|BD+23 1812|J074833.63+230827.4,f|D|G2,7:48:33.63|-10.90,23:8:27.45|-2,6.20,2000 +V17616|SAO 174592|CD-24 6022|J074901.67-245443.9,f|V|G1,7:49:1.67|-34.69,-24:54:43.95|14.7,5.32,2000 +HD 63352|BD+13 1772|PPM 124475|J074901.83+132218.7,f|S|K0,7:49:1.84|38.53,13:22:18.73|-7.9,6.07,2000 +SAO 235539|CP-56 1442|PPM 336415|J074906.71-562437.2,f|D|G5,7:49:6.72|-6.56,-56:24:37.30|10.2,5.58,2000 +QS PUP|HD 63949|CD-46 3460|PPM 312193|J074912.86-465127.7,f|V|B1,7:49:12.86|-3.28,-46:51:27.78|9.7,5.82,2000 +SAO 249975|HD 64185|CP-59 908|PPM 356272|J074912.90-601701.2,f|D|F1,7:49:12.90|-37.40,-60:17:1.28|140.1,5.78,2000 +HD 63922|CD-46 3458|PPM 312195|J074914.29-462223.5,f|D|B0,7:49:14.30|-4.66,-46:22:23.54|9,4.11,2000 +V0397 PUP|HD 63786|CD-34 3970|PPM 284466|J074914.64-351435.8,f|V|B9,7:49:14.65|-6.13,-35:14:35.83|8.9,5.94,2000 +Asmidiske|Pup Xi-7|V17618|CD-24 6030|PPM 253258|J074917.65-245135.2,f|D|G6,7:49:17.66|-5.58,-24:51:35.23|-0.7,3.33,2000 +HD 63948|CD-44 3762|J074928.28-444504.1,f|S|K0,7:49:28.28|-41.65,-44:45:4.17|28.7,6.32,2000 +SAO 153449|HD 63655|SD-12 2164|PPM 219243|J074928.80-132110.6,f|S|B8,7:49:28.81|-2.34,-13:21:10.61|-10.9,6.23,2000 +HD 63475|BD+13 1775|PPM 124483|J074932.31+124851.3,f|S|K0,7:49:32.31|-6.87,12:48:51.30|-18.5,6.41,2000 +V17624|SAO 198487|HD 63852|CD-32 4451|PPM 284474|J074935.40-331720.2,f|V|K5,7:49:35.40|-37.37,-33:17:20.22|1.8,5.60,2000 +V17619|SAO 153453|HD 63696|SD-13 2247|PPM 219248|J074939.97-140507.2,f|V|K5,7:49:39.98|-5.82,-14:5:7.29|-0.9,6.38,2000 +SAO 153456|HD 63734|SD-19 2083|PPM 219249|J074940.76-193019.8,f|S|K2,7:49:40.76|-59.10,-19:30:19.86|-14.2,6.50,2000 +SAO 249978|HD 64484|CP-65 827|PPM 356276|J074940.99-661145.5,f|S|B9,7:49:40.99|-1.82,-66:11:45.51|-0.6,5.78,2000 +Pup 6|SAO 153454|HD 63697|SD-16 2146|J074941.20-171342.2,f|S|K3,7:49:41.20|54.16,-17:13:42.27|-117.2,5.17,2000 +SAO 153468|HD 63822|SD-19 2089|PPM 219262|J075005.66-193124.7,f|S|K0,7:50:5.67|-7.63,-19:31:24.77|5.8,6.10,2000 +SAO 135158|HD 63752|SD-08 2096|J075010.57-091100.3,f|S|K3,7:50:10.58|0.00,-9:11:0.39|0.1,5.60,2000 +SAO 235552|HD 64225|CD-50 3004|J075023.82-503034.0,f|S|K2,7:50:23.82|-66.58,-50:30:34.09|-42.5,5.90,2000 +V17632|HD 64181|CD-44 3780|PPM 312221|J075042.50-443447.8,f|V|G6,7:50:42.51|-9.94,-44:34:47.80|13.6,6.46,2000 +HD 63799|BD+03 1818|PPM 153426|J075047.39+031638.1,f|D|K1,7:50:47.40|57.66,3:16:38.11|-29.5,6.18,2000 +HD 63798|BD+04 1833|PPM 153428|J075051.09+042734.2,f|S|G5,7:50:51.10|-15.10,4:27:34.25|48.4,6.50,2000 +HD 63838|BD+00 2108|PPM 153429|J075053.42+000446.4,f|S|K0,7:50:53.43|17.10,0:4:46.40|5.5,6.38,2000 +SAO 153479|HD 63894|SD-10 2253|PPM 219277|J075055.23-110742.9,f|S|K0,7:50:55.24|-0.88,-11:7:42.97|-33.2,6.16,2000 +SAO 174658|CD-24 6060|PPM 253316|J075100.08-243142.8,f|D|A0,7:51:0.08|-2.87,-24:31:42.81|-29.2,6.44,2000 +V3758|HD 63589|BD+33 1601|PPM 73167|J075102.35+331401.1,f|D|A2,7:51:2.36|-17.82,33:14:1.15|7,6.05,2000 +HD 63332|BD+54 1177|PPM 31335|J075105.71+540745.2,f|S|F6,7:51:5.71|-40.34,54:7:45.27|53.3,6.03,2000 +V17636|HD 64287|CD-42 3601|PPM 312232|J075120.33-430542.8,f|V|B2,7:51:20.34|-5.37,-43:5:42.84|5.9,6.34,2000 +QU PUP|HD 64365|CD-42 3610|J075140.35-425317.5,f|V|B2,7:51:40.36|-6.48,-42:53:17.53|8.1,6.05,2000 +Pup 8|SAO 153499|SD-12 2179|PPM 219297|J075140.88-124909.8,f|S|F2,7:51:40.89|8.19,-12:49:9.86|-5,6.37,2000 +CMi Zeta-13|HD 63975|BD+02 1808|PPM 153455|J075141.98+014600.7,f|S|B8,7:51:41.99|-13.94,1:46:0.73|-3.8,5.13,2000 +SAO 174679|HD 64152|SD-20 2235|PPM 253337|J075143.02-211025.1,f|S|G8,7:51:43.03|-45.74,-21:10:25.18|33.3,5.61,2000 +Pup 9|V17634|SD-13 2267|J075146.30-135352.9,f|D|G0,7:51:46.30|-68.44,-13:53:52.90|-344.8,5.17,2000 +HD 63889|BD+19 1854|PPM 124529|J075156.77+191930.3,f|S|K1,7:51:56.77|-48.55,19:19:30.30|-38.2,6.05,2000 +BC CMI|BD+03 1824|PPM 153472|J075207.18+031638.4,f|V|M4,7:52:7.19|49.12,3:16:38.43|-79,6.37,2000 +b Pup|CD-40 3579|PPM 312247|J075213.03-403432.8,f|S|K1,7:52:13.03|-13.90,-40:34:32.83|5.3,3.72,2000 +HD 64379|CD-34 4036|PPM 284526|J075215.66-344219.5,f|D|F5,7:52:15.66|-198.29,-34:42:19.59|238.1,5.01,2000 +Pup 10|V17639|HD 64238|SD-14 2250|PPM 219316|J075218.87-145046.2,f|V|F1,7:52:18.88|-7.68,-14:50:46.23|1.3,5.69,2000 +V0372 CAR|SAO 235579|HD 64722|CP-54 1420|PPM 336461|J075229.74-542201.7,f|V|B1,7:52:29.74|-5.42,-54:22:1.79|8,5.69,2000 +HD 63586|BD+55 1228|PPM 31345|J075236.43+551233.9,f|S|A0,7:52:36.43|-21.74,55:12:34.00|-42.2,6.36,2000 +QZ PUP|SAO 198545|CD-38 3769|PPM 284531|J075238.64-385146.1,f|V|B2,7:52:38.65|-9.46,-38:51:46.12|4,4.49,2000 +V3777|HD 64235|SD-05 2280|J075247.85-052541.7,f|D|F5,7:52:47.86|-21.35,-5:25:41.76|-28.8,5.77,2000 +SAO 198553|HD 64572|CD-36 3989|PPM 284539|J075303.50-362149.5,f|S|K0,7:53:3.51|-10.87,-36:21:49.57|1.8,5.43,2000 +V17652|CD-49 3137|PPM 312267|J075303.63-493646.9,f|V|B1,7:53:3.63|-8.46,-49:36:46.96|14.7,4.62,2000 +V17653|SAO 219111|CD-47 3396|PPM 312271|J075318.15-480610.5,f|V|B0,7:53:18.16|-4.91,-48:6:10.56|5.9,4.25,2000 +Gem Phi-83|HD 64145|BD+27 1499|J075329.81+264556.8,f|S|A3,7:53:29.81|-34.02,26:45:56.82|-31.2,4.98,2000 +V17656|SAO 198575|CD-35 4002|PPM 284563|J075411.00-355238.2,f|V|B2,7:54:11.01|-3.89,-35:52:38.23|3.4,5.48,2000 +Lyn 25|BD+47 1498|J075429.26+472309.5,f|S|K5,7:54:29.26|-16.05,47:23:9.54|3.6,6.25,2000 +SAO 198579|HD 64876|CD-34 4091|PPM 284568|J075439.91-345048.1,f|S|K4,7:54:39.92|-16.00,-34:50:48.17|-12,6.13,2000 +Lyn 26|HD 64144|BD+47 1499|J075442.69+473352.5,f|S|K3,7:54:42.70|-48.38,47:33:52.55|1.5,5.45,2000 +SAO 235615|HD 65273|CP-56 1468|PPM 336496|J075453.31-571810.1,f|S|K3,7:54:53.32|-69.28,-57:18:10.10|31.6,5.61,2000 +SAO 235612|HD 65189|CP-52 1333|PPM 336498|J075500.42-523459.9,f|S|B8,7:55:0.42|-13.58,-52:34:59.99|11.5,6.36,2000 +SAO 198591|HD 64974|CD-30 5275|J075513.84-305503.5,f|S|K4,7:55:13.85|-25.99,-30:55:3.52|27.6,6.44,2000 +HD 64685|BD+09 1815|PPM 153569|J075531.43+085146.2,f|S|F2,7:55:31.43|-6.97,8:51:46.22|-89.5,5.86,2000 +Gem 85|HD 64648|BD+20 1946|PPM 124599|J075539.89+195302.2,f|S|A0,7:55:39.90|-14.67,19:53:2.29|-39.8,5.38,2000 +DD LYN|HD 64491|BD+35 1705|PPM 73264|J075540.82+352445.6,f|V|A3,7:55:40.83|-55.99,35:24:45.66|-26.2,6.23,2000 +V17666|SAO 219157|HD 65211|CD-43 3737|PPM 312319|J075546.58-435042.1,f|D|B6,7:55:46.59|-12.44,-43:50:42.20|1.4,6.06,2000 +HD 65662|CP-60 935|J075618.64-603135.1,f|S|K3,7:56:18.65|-4.35,-60:31:35.17|10.6,5.73,2000 +PX PUP|HD 65183|CD-29 5189|PPM 284597|J075622.72-301704.4,f|V|M6,7:56:22.72|-1.55,-30:17:4.45|-14.4,6.39,2000 +SAO 116145|HD 64938|BD+04 1860|PPM 153597|J075623.90+042908.0,f|S|G8,7:56:23.91|-6.43,4:29:8.04|-7.3,6.16,2000 +Car Chi|Chi Carinae|SAO 235635|HD 65575|CP-52 1343|PPM 336522|HR 3117|J075646.71-525856.4,f|S|B3,7:56:46.71|-28.36,-52:58:56.50|16.8,3.46,2000 +Pup 11|SAO 174852|HD 65228|SD-22 2087|PPM 253514|J075651.53-225248.4,f|S|F7,7:56:51.54|-29.57,-22:52:48.43|12.3,4.20,2000 +V17672|SAO 219189|CD-43 3758|PPM 312349|HR 3114|J075657.80-433001.4,f|V|B2,7:56:57.80|-10.55,-43:30:1.48|5.3,5.35,2000 +SAO 219186|HD 65442|CD-42 3717|HR 3111|J075657.82-422423.3,f|S|K3,7:56:57.83|21.49,-42:24:23.31|16.4,6.08,2000 +Cnc 1|BD+16 1590|PPM 124632|J075659.45+154725.0,f|S|K3,7:56:59.45|-28.29,15:47:25.01|-41.6,5.81,2000 +CP-62 925|PPM 356365|HR 3139|J075712.75-631748.6,f|S|B8,7:57:12.76|-0.61,-63:17:48.60|19,6.14,2000 +SAO 116162|BD+09 1824|PPM 153623|J075715.87+083828.3,f|S|K0,7:57:15.88|-3.41,8:38:28.39|-23.2,6.03,2000 +SAO 116165|HD 65123|BD+01 1959|PPM 153624|J075716.29+010737.3,f|D|F7,7:57:16.29|-164.67,1:7:37.31|2.9,6.36,2000 +V17679|SAO 219197|HD 65551|CD-43 3766|PPM 312361|HR 3116|J075718.42-440635.4,f|D|B2,7:57:18.42|-11.52,-44:6:35.49|6.9,5.08,2000 +V17680|HD 65598|CD-47 3457|PPM 312362|HR 3118|J075720.06-475326.5,f|D|B5,7:57:20.07|-9.15,-47:53:26.54|9.5,6.22,2000 +V3830|SAO 198636|HD 65456|CD-29 5236|PPM 284622|HR 3113|J075740.10-302004.4,f|V|A2,7:57:40.11|-8.16,-30:20:4.45|7.1,4.79,2000 +CP-59 944|HR 3138|J075746.91-601811.0,f|D|G0,7:57:46.91|518.40,-60:18:11.06|118.9,5.60,2000 +SAO 219218|HD 65685|CD-45 3611|PPM 312378|HR 3121|J075751.71-453439.6,f|S|K2,7:57:51.72|-17.32,-45:34:39.61|31.3,5.12,2000 +HD 65638|CD-40 3691|PPM 312381|J075754.80-404703.6,f|S|K0,7:57:54.81|23.28,-40:47:3.67|3.6,6.46,2000 +BU CMI|SAO 116179|HD 65241|BD+07 1879|PPM 153643|J075805.89+071248.7,f|V|A0,7:58:5.90|-11.91,7:12:48.71|-10.3,6.42,2000 +V PUP|SAO 219226|HD 65818|CD-48 3349|PPM 312389|HR 3129|J075814.43-491441.6,f|D|B1,7:58:14.44|-7.44,-49:14:41.68|6.9,4.47,2000 +HD 64958|BD+44 1693|J075816.56+435838.5,f|S|K0,7:58:16.56|38.86,43:58:38.55|4.9,6.36,2000 +CMi 14A|SAO 116182|HD 65345|BD+02 1833|PPM 153647|J075820.65+021329.1,f|D|K0,7:58:20.65|-162.48,2:13:29.16|99.3,5.29,2000 +V3841|SAO 235646|HD 65867|CD-51 2784|PPM 336536|HR 3133|J075821.43-512654.4,f|V|A8,7:58:21.43|-42.63,-51:26:54.50|43.9,6.45,2000 +V17678|HD 65257|BD+16 1598|PPM 124673|J075831.47+163107.2,f|V|K0,7:58:31.47|-7.33,16:31:7.25|-4.4,6.02,2000 +V0374 CAR|HD 66194|CP-60 1006|HR 3147|J075850.55-604928.0,f|V|B2,7:58:50.55|-4.53,-60:49:28.06|10.7,5.78,2000 +CD-44 3920|HR 3137|J075901.80-451257.0,f|S|B4,7:59:1.80|-11.62,-45:12:57.04|7.9,5.97,2000 +Pup 12|SAO 174932|HD 65699|CD-22 5476|PPM 253595|HR 3123|J075905.71-231837.4,f|S|K0,7:59:5.71|-11.71,-23:18:37.42|2.8,5.09,2000 +SAO 219249|CD-49 3243|HR 3142|J075912.30-495836.6,f|D|B2,7:59:12.30|-5.40,-49:58:36.66|7.5,6.31,2000 +CD-49 3244|PPM 312412|HR 3143|J075913.55-495825.5,f|D|B2,7:59:13.56|-10.61,-49:58:25.58|7.3,6.33,2000 +SAO 256463|CP-72 654|PPM 369758|HR 3171|J075915.76-731439.0,f|S|A3,7:59:15.76|-6.79,-73:14:39.02|-20.3,6.33,2000 +SAO 198668|HD 65925|CD-38 3908|PPM 284653|J075928.36-391749.0,f|S|F5,7:59:28.37|-76.85,-39:17:49.04|-46.4,5.23,2000 +HD 65522|BD+13 1811|PPM 124698|HR 3115|J075935.05+131431.7,f|S|K5,7:59:35.05|-20.59,13:14:31.80|-16.2,6.06,2000 +V0460 CAR|HD 66342|CP-60 1018|PPM 356417|HR 3153|J075937.54-603513.4,f|V|M1,7:59:37.54|-3.54,-60:35:13.42|11.3,5.21,2000 +HD 66341|CP-59 954|PPM 356418|HR 3152|J075940.08-601226.4,f|S|B5,7:59:40.09|-4.40,-60:12:26.46|10.7,6.31,2000 +Mon 27|SAO 135345|HD 65695|SD-03 2157|HR 3122|J075944.15-034046.4,f|S|K2,7:59:44.15|-55.24,-3:40:46.50|-1.8,4.94,2000 +SAO 153687|SD-18 2118|PPM 219496|HR 3131|J075952.05-182357.2,f|S|A2,7:59:52.05|-7.26,-18:23:57.22|-35.1,4.61,2000 +BD+74 338|PPM 6879|J080011.73+735504.5,f|S|K3,8:0:11.74|-8.44,73:55:4.51|-37.4,5.35,2000 +SAO 219283|CD-48 3384|PPM 312438|HR 3148|J080014.68-485853.4,f|S|A2,8:0:14.69|-34.16,-48:58:53.43|43.9,6.01,2000 +V17714|HD 66591|CP-63 866|PPM 356424|HR 3159|J080019.96-633402.8,f|V|B3,8:0:19.97|-1.87,-63:34:2.84|19.3,4.81,2000 +PY PUP|SAO 219292|HD 66255|CD-48 3388|HR 3151|J080028.96-485218.3,f|V|A0,8:0:28.96|-6.02,-48:52:18.36|2.6,6.12,2000 +V0695 MON|SAO 135368|HD 65875|SD-02 2379|HR 3135|J080044.13-025254.9,f|V|B2,8:0:44.13|-5.69,-2:52:54.90|3,6.49,2000 +Cnc 3|HD 65759|BD+17 1731|PPM 124732|HR 3128|J080047.30+171831.3,f|S|K5,8:0:47.31|-10.31,17:18:31.33|-2.7,5.59,2000 +HD 65735|BD+20 1976|PPM 124734|HR 3125|J080048.10+194858.3,f|S|K1,8:0:48.10|8.75,19:48:58.38|-8,6.30,2000 +V17712|HD 66441|CP-53 1505|PPM 336575|HR 3156|J080049.93-540904.5,f|V|B5,8:0:49.94|-26.18,-54:9:4.59|8.6,5.85,2000 +Cnc Omega-2|HD 65714|BD+25 1812|PPM 98223|HR 3124|J080055.87+252334.2,f|S|G5,8:0:55.87|17.75,25:23:34.21|6.5,5.86,2000 +HD 65757|BD+23 1866|PPM 98225|HR 3127|J080100.78+233459.1,f|D|K1,8:1:0.78|-19.66,23:34:59.13|-28.2,6.36,2000 +SAO 135379|HD 65938|SD-06 2407|J080103.40-062509.1,f|S|G5,8:1:3.40|-76.17,-6:25:9.10|-46.2,6.46,2000 +Mon 28|V0645 MON|HD 65953|BD-00 1882|PPM 177237|HR 3141|J080113.33-012333.3,f|V|K4,8:1:13.33|65.98,-1:23:33.39|-75.7,4.68,2000 +SAO 116244|BD+05 1857|PPM 153737|HR 3136|J080113.89+045247.3,f|D|A1,8:1:13.89|-32.13,4:52:47.37|18.6,5.65,2000 +BD+59 1130|PPM 31429|J080120.77+590250.6,f|S|F2,8:1:20.78|25.30,59:2:50.63|32.6,5.78,2000 +V0461 CAR|SAO 235686|HD 66546|CP-54 1470|PPM 336582|HR 3157|J080123.04-543055.9,f|D|B2,8:1:23.04|-5.92,-54:30:55.91|5.2,6.12,2000 +Cnc 5|HD 65873|BD+16 1612|HR 3134|J080130.28+162719.1,f|S|B9,8:1:30.29|4.32,16:27:19.11|-5.9,5.99,2000 +CP-55 1419|PPM 336588|HR 3161|J080131.56-552716.7,f|S|B4,8:1:31.57|-15.40,-55:27:16.76|7.5,6.28,2000 +SAO 198714|HD 66358|CD-36 4116|HR 3154|J080137.52-371701.3,f|S|A3,8:1:37.53|-2.27,-37:17:1.39|5,5.91,2000 +Cam 53|AX CAM|HD 65339|BD+60 1105|PPM 16446|J080142.45+601927.6,f|D|A2,8:1:42.45|-33.57,60:19:27.67|-22.2,6.02,2000 +Cnc Omega-4A|HD 65856|BD+25 1816|PPM 98236|HR 3132|J080143.75+250522.0,f|D|A1,8:1:43.76|-23.37,25:5:22.07|11.7,6.32,2000 +V17707|SAO 116251|BD+09 1843|PPM 153749|HR 3144|J080150.72+085450.3,f|V|G0,8:1:50.73|-1.33,8:54:50.37|24.2,6.23,2000 +BD+35 1731|PPM 73358|J080155.18+352447.0,f|S|K0,8:1:55.18|-25.06,35:24:47.05|-6.8,6.34,2000 +V3872|SAO 198725|HD 66435|CD-36 4120|PPM 284712|HR 3155|J080206.13-370300.1,f|V|M1,8:2:6.13|3.47,-37:3:0.15|13.1,6.34,2000 +V17713|HD 66141|BD+02 1854|HR 3145|J080215.93+022004.4,f|D|K2,8:2:15.94|-28.03,2:20:4.45|105.5,4.39,2000 +HD 66242|SD-05 2339|J080225.96-062013.6,f|S|G0,8:2:25.97|6.26,-6:20:13.69|-11.3,6.33,2000 +HD 65448|BD+63 749|PPM 16452|HR 3112|J080230.80+630525.0,f|D|G1,8:2:30.81|-12.02,63:5:25.04|-13.8,6.08,2000 +54 Cam|AE LYN|HD 65626|BD+57 1118|PPM 31445|HR 3119|J080235.78+571625.0,f|V|F9,8:2:35.78|-38.28,57:16:25.06|-59.1,6.49,2000 +V0336 PUP|SAO 219339|HD 66624|CD-40 3776|HR 3162|J080244.78-411835.3,f|D|B9,8:2:44.78|-6.08,-41:18:35.38|15.2,5.51,2000 +SAO 198743|HD 66598|CD-32 4766|PPM 284732|J080304.16-322748.7,f|D|K2,8:3:4.16|-13.04,-32:27:48.77|9.6,5.81,2000 +SAO 219355|HD 66812|CD-42 3832|HR 3166|J080329.60-425653.9,f|S|G8,8:3:29.61|-18.56,-42:56:53.98|-2.7,6.28,2000 +6 Cnc|Gem Chi|HD 66216|BD+28 1532|PPM 98279|HR 3149|J080331.08+274739.5,f|D|K1,8:3:31.08|-28.53,27:47:39.60|-35.2,4.94,2000 +Naos|Suhail Hadar|Pup Zeta|Zeta Puppis|SAO 198752|HD 66811|CD-39 3939|PPM 312524|HR 3165|J080335.04-400011.3,f|S|O5,8:3:35.05|-30.79,-40:0:11.33|16.8,2.22,2000 +MZ PUP|SAO 198764|HD 66888|CD-32 4796|PPM 284752|J080416.18-324029.3,f|V|M1,8:4:16.19|-5.30,-32:40:29.38|7.5,5.23,2000 +Pup 14|SAO 153796|HD 66834|SD-19 2228|PPM 219618|HR 3168|J080441.41-194341.3,f|S|B3,8:4:41.42|-5.37,-19:43:41.33|3.4,6.11,2000 +HD 67249|CD-50 3138|PPM 336637|HR 3178|J080442.39-503525.4,f|S|G5,8:4:42.40|-8.57,-50:35:25.43|1.7,5.96,2000 +V0375 CAR|HD 67536|CP-62 953|PPM 356486|HR 3186|J080442.93-625010.8,f|D|B2,8:4:42.93|-5.62,-62:50:10.85|11.4,6.25,2000 +HD 66552|BD+19 1911|HR 3158|J080445.30+185031.2,f|S|B9,8:4:45.30|-25.70,18:50:31.27|-19.6,6.21,2000 +HD 64486|BD+79 265|J080447.06+792846.6,f|D|A0,8:4:47.07|-36.45,79:28:46.60|-53.8,5.40,2000 +SAO 235735|HD 67364|CP-52 1376|PPM 336643|J080503.70-530628.5,f|S|K3,8:5:3.71|2.43,-53:6:28.52|-3.1,5.51,2000 +Cnc 8|HD 66664|BD+13 1831|PPM 124826|HR 3163|J080504.48+130705.5,f|S|A1,8:5:4.49|-35.21,13:7:5.58|-63.9,5.15,2000 +MX VEL|HD 67341|CD-46 3764|PPM 312558|HR 3179|J080520.30-465842.2,f|V|B3,8:5:20.30|-6.04,-46:58:42.28|6.4,6.18,2000 +V3892|HD 66684|BD+27 1536|PPM 98327|HR 3164|J080537.05+273147.0,f|D|A0,8:5:37.06|5.32,27:31:47.05|-11.1,6.21,2000 +SAO 198791|HD 67243|CD-33 4525|PPM 284781|HR 3177|J080544.88-333409.9,f|D|G1,8:5:44.88|-7.62,-33:34:9.97|4.2,6.13,2000 +V17735|SAO 135488|BD-00 1903|PPM 177278|HR 3172|J080549.63-003423.9,f|V|K0,8:5:49.63|-13.50,-0:34:23.95|1.1,6.40,2000 +Cnc Mu1-9|BL CNC|HD 66875|BD+23 1887|PPM 98341|HR 3169|J080618.39+223807.7,f|V|M3,8:6:18.39|-7.48,22:38:7.76|-9,5.98,2000 +HD 67159|SD-08 2222|HR 3174|J080627.41-091440.0,f|D|B9,8:6:27.41|-5.77,-9:14:40.05|5.2,6.22,2000 +V3905|SAO 219422|HD 67582|CD-44 4051|PPM 312586|HR 3187|J080640.33-451557.6,f|V|K3,8:6:40.34|-5.28,-45:15:57.66|11,5.02,2000 +SAO 219427|HD 67621|CD-48 3480|PPM 312587|J080641.60-482950.6,f|S|B3,8:6:41.61|-6.96,-48:29:50.60|9.8,6.33,2000 +Lyn 28|HD 66824|BD+43 1770|HR 3167|J080709.94+431537.3,f|S|A1,8:7:9.94|-12.56,43:15:37.31|-34.4,6.35,2000 +HD 67456|SD-20 2395|PPM 253878|HR 3183|J080718.03-203315.6,f|S|A5,8:7:18.04|-10.39,-20:33:15.63|1.7,5.34,2000 +Pup Rho-15|Rho Puppis|SAO 175217|HD 67523|CD-23 6828|PPM 253887|HR 3185|J080732.64-241815.5,f|D|F6,8:7:32.65|-83.25,-24:18:15.57|46.4,2.83,2000 +Cnc Mu2-10|HD 67228|BD+22 1862|HR 3176|J080745.85+213454.5,f|S|G1,8:7:45.86|23.15,21:34:54.54|-67.2,5.30,2000 +Vol Epsilon|CP-68 736|PPM 356519|HR 3223|J080755.79-683701.4,f|D|B6,8:7:55.79|-29.86,-68:37:1.42|30.6,4.40,2000 +V17755|HD 68423|CP-63 896|PPM 356525|HR 3217|J080824.64-634802.9,f|V|B6,8:8:24.64|-7.68,-63:48:2.96|5.4,6.32,2000 +Lyn 27A|V17738|BD+51 1391|PPM 31498|HR 3173|J080827.44+513024.0,f|D|A2,8:8:27.45|-60.13,51:30:24.01|-2.2,4.80,2000 +Mon Zeta-29A|SAO 135551|HD 67594|SD-02 2450|HR 3188|J080835.64-025901.6,f|D|G2,8:8:35.65|-16.78,-2:59:1.63|-3.9,4.36,2000 +PQ PUP|SAO 198848|HD 67888|CD-37 4288|HR 3195|J080837.64-374052.3,f|V|B4,8:8:37.64|-7.84,-37:40:52.40|8.7,6.36,2000 +Cnc 12|HD 67483|BD+14 1831|HR 3184|J080842.44+133827.3,f|S|F3,8:8:42.45|2.62,13:38:27.30|-13.1,6.25,2000 +HD 67751|SD-19 2262|J080843.57-202147.4,f|D|A7,8:8:43.58|-7.31,-20:21:47.42|2.3,6.38,2000 +SAO 153887|HD 67725|SD-10 2400|PPM 219713|HR 3189|J080856.84-112022.7,f|S|A0,8:8:56.85|-14.85,-11:20:22.74|-2,6.31,2000 +HD 68456|CP-60 1074|PPM 356535|J080900.67-611808.7,f|S|F5,8:9:0.67|-155.08,-61:18:8.75|-297.7,4.75,2000 +Pup 16|HD 67797|SD-18 2190|PPM 219714|HR 3192|J080901.63-191442.0,f|S|B5,8:9:1.64|-9.91,-19:14:42.05|-5.5,4.40,2000 +NN VEL|SAO 219493|HD 68161|CD-48 3516|PPM 312653|J080909.50-484103.8,f|V|B8,8:9:9.51|-10.30,-48:41:3.88|-1.3,5.67,2000 +SAO 198859|HD 67977|CD-35 4256|PPM 284849|HR 3199|J080910.18-352718.0,f|S|G8,8:9:10.19|-0.49,-35:27:18.05|13.4,6.21,2000 +BD+42 1819|HR 3181|J080923.05+422550.1,f|S|K5,8:9:23.05|-10.96,42:25:50.19|-73.7,6.26,2000 +SAO 153898|SD-15 2280|PPM 219722|HR 3194|J080928.53-161456.1,f|D|B2,8:9:28.53|-8.78,-16:14:56.12|-6.2,5.66,2000 +Vel Gamma1|V3930|HD 68243|CD-46 3846|PPM 312661|J080929.32-472043.0,f|D|B1,8:9:29.32|2.03,-47:20:43.01|7,4.27,2000 +Suhail al Muhlif|Spectral Gem|Vel Gamma2|Gamma2 Velorum|HD 68273|CD-46 3847|PPM 312662|J080931.95-472011.7,f|D|WC,8:9:31.95|-5.90,-47:20:11.72|9.9,1.79,2000 +SAO 235784|HD 68434|CP-55 1467|PPM 336696|HR 3218|J080933.63-560507.3,f|S|A3,8:9:33.63|1.59,-56:5:7.38|37.1,5.66,2000 +HD 67542|BD+29 1696|PPM 98412|J080935.18+290535.0,f|S|G0,8:9:35.18|-10.62,29:5:35.07|-7.9,6.47,2000 +V17757|HD 68217|CD-43 3998|PPM 312664|J080935.91-440721.9,f|V|B2,8:9:35.91|-11.95,-44:7:21.98|2.5,5.19,2000 +IS VEL|SAO 219515|HD 68324|CD-47 3653|PPM 312672|HR 3213|J080943.15-475613.8,f|V|B1,8:9:43.15|-6.33,-47:56:13.89|9.6,5.23,2000 +V17743|HD 67224|BD+58 1102|HR 3175|J081003.77+581453.6,f|V|K5,8:10:3.78|-19.42,58:14:53.67|-74.2,5.90,2000 +BD+26 1728|PPM 98418|J081013.10+255040.1,f|D|K0,8:10:13.11|-15.12,25:50:40.13|-30.8,6.41,2000 +SAO 219538|HD 68478|CD-48 3556|PPM 312693|J081020.56-491414.4,f|S|B3,8:10:20.56|-9.99,-49:14:14.45|5.2,6.45,2000 +Cnc Psi-14A|V17752|HD 67767|BD+25 1865|PPM 98422|HR 3191|J081027.18+253026.4,f|D|G7,8:10:27.18|-71.89,25:30:26.40|-348.1,5.73,2000 +Pup 18|SAO 153924|HD 68146|SD-13 2420|PPM 219748|J081039.82-134757.1,f|D|F6,8:10:39.83|-250.55,-13:47:57.15|57.7,5.53,2000 +HD 67959|BD+15 1775|PPM 124962|HR 3198|J081058.88+143746.1,f|S|A1,8:10:58.88|-22.35,14:37:46.11|-16.8,6.22,2000 +SAO 198898|CD-36 4291|PPM 284891|HR 3219|J081101.68-371732.5,f|D|O9,8:11:1.68|-4.77,-37:17:32.54|5.8,6.46,2000 +V17784|SAO 219565|HD 68657|CD-48 3576|PPM 312718|HR 3227|J081110.78-482743.1,f|V|B3,8:11:10.79|-17.21,-48:27:43.18|4,5.82,2000 +Pup 19A|V17778|SAO 153942|SD-12 2385|PPM 219771|HR 3211|J081116.30-125537.1,f|D|G9,8:11:16.31|-26.02,-12:55:37.20|8.1,4.72,2000 +SAO 116444|BD+10 1746|J081116.59+094916.4,f|S|B6,8:11:16.60|-6.95,9:49:16.43|-16,6.09,2000 +NS PUP|HD 68553|CD-39 4084|HR 3225|J081121.49-393706.7,f|V|K4,8:11:21.49|-8.90,-39:37:6.76|3.1,4.42,2000 +V17785|SAO 219569|CD-42 3979|PPM 312726|HR 3226|J081125.89-425914.2,f|D|A5,8:11:25.89|-5.38,-42:59:14.20|4.6,4.76,2000 +SAO 135611|HD 68312|SD-07 2378|HR 3212|J081133.00-074621.1,f|S|G7,8:11:33.00|-42.95,-7:46:21.14|-25.8,5.35,2000 +AH VEL|SAO 219587|CD-46 3902|PPM 312739|HR 3232|J081159.96-463839.6,f|V|F7,8:11:59.97|-3.60,-46:38:39.66|7.6,5.76,2000 +V17792|SAO 219586|HD 68763|CD-43 4028|PPM 312743|J081206.05-432401.5,f|V|K3,8:12:6.06|-5.01,-43:24:1.58|4.4,6.45,2000 +Tegmine|Tegmen|Cnc Zeta-16A|HD 68257|BD+18 1867|PPM 124985|J081212.72+173851.9,f|D|F8,8:12:12.73|28.30,17:38:51.97|-150.9,5.63,2000 +Cnc Zeta-16B|HD 68255|BD+18 1867|PPM 124985|J081212.80+173851.6,f|D|F9,8:12:12.81|140.94,17:38:51.63|-126.1,6.02,2000 +Cnc Zeta-16C|HD 68256|BD+18 1867|J081213.18+173853.9,f|D|G5,8:12:13.18|79.90,17:38:53.99|-42.7,6.20,2000 +HD 68895|CD-45 3892|PPM 312754|HR 3234|J081230.79-461551.4,f|D|B5,8:12:30.79|-5.50,-46:15:51.43|9.3,6.02,2000 +HD 67447|BD+68 524|PPM 16517|HR 3182|J081248.78+682826.6,f|S|G7,8:12:48.79|-1.05,68:28:26.66|7.3,5.33,2000 +SAO 198942|HD 68862|CD-37 4394|PPM 284936|HR 3233|J081251.55-375528.0,f|S|A3,8:12:51.56|-3.90,-37:55:28.09|-1.2,6.39,2000 +HD 68461|BD+16 1662|HR 3222|J081259.73+163051.5,f|S|G8,8:12:59.73|-10.79,16:30:51.55|-12,6.04,2000 +Cnc 15|BM CNC|HD 68351|BD+30 1664|PPM 98473|HR 3215|J081308.86+293923.5,f|V|B9,8:13:8.87|-10.43,29:39:23.53|-20.5,5.62,2000 +Pup 20|V17797|SAO 153993|HD 68752|SD-15 2324|PPM 219825|HR 3229|J081319.96-154717.5,f|V|G5,8:13:19.97|-11.55,-15:47:17.60|-2.9,4.99,2000 +MX PUP|SAO 198957|CD-35 4349|PPM 284952|HR 3237|J081329.51-355358.2,f|V|B1,8:13:29.52|-7.29,-35:53:58.26|10.1,4.78,2000 +V3957|SAO 235819|HD 69194|CD-49 3430|PPM 336742|HR 3247|J081334.24-501145.8,f|V|M1,8:13:34.25|21.70,-50:11:45.86|-2,5.52,2000 +NO VEL|SAO 219629|HD 69144|CD-46 3929|PPM 312775|HR 3244|J081336.15-465929.8,f|D|B2,8:13:36.15|-10.33,-46:59:29.86|10.3,5.14,2000 +CD-33 4705|PPM 284956|HR 3238|J081341.07-333410.3,f|D|K2,8:13:41.07|33.75,-33:34:10.30|10,6.38,2000 +SAO 219631|HD 69168|CD-46 3931|J081345.65-463443.2,f|S|B4,8:13:45.65|-8.25,-46:34:43.26|4.3,6.49,2000 +V17787|BD+56 1278|PPM 31555|J081350.17+562708.0,f|V|G9,8:13:50.18|-21.47,56:27:8.09|-29.6,5.85,2000 +OS PUP|SAO 198969|CD-35 4358|PPM 284965|J081358.31-361920.2,f|D|B1,8:13:58.31|-8.70,-36:19:20.21|7.9,5.08,2000 +V17800|CD-35 4360|PPM 284966|HR 3241|J081358.70-362026.7,f|D|B2,8:13:58.70|-7.25,-36:20:26.80|7.7,6.09,2000 +SAO 219635|HD 69142|CD-39 4128|HR 3243|J081402.92-402052.4,f|D|K1,8:14:2.92|44.81,-40:20:52.41|-65.8,4.43,2000 +SAO 198972|CD-31 5742|PPM 284972|HR 3239|J081411.03-320826.5,f|D|B1,8:14:11.03|-6.99,-32:8:26.56|6.8,6.07,2000 +BD+18 1882|HR 3228|J081411.14+174033.4,f|D|A0,8:14:11.14|0.86,17:40:33.44|14.8,6.47,2000 +SAO 198979|HD 69123|CD-35 4365|PPM 284973|HR 3242|J081413.25-352924.0,f|S|K1,8:14:13.26|-46.17,-35:29:24.07|21.9,5.77,2000 +HD 68776|BD+13 1868|HR 3231|J081420.99+130253.8,f|D|G8,8:14:20.99|-18.85,13:2:53.86|-18.4,6.37,2000 +SAO 219657|CD-45 3914|J081423.87-455004.2,f|D|B2,8:14:23.87|-8.88,-45:50:4.28|10.7,5.85,2000 +V17804|SAO 219674|CD-46 3951|PPM 312822|J081451.24-462909.2,f|V|B3,8:14:51.24|-5.27,-46:29:9.21|7.9,6.44,2000 +HD 69863|CP-62 985A|PPM 356597|J081515.91-625456.3,f|D|A2,8:15:15.92|-26.84,-62:54:56.32|-11,5.25,2000 +SAO 235838|HD 69596|CD-50 3227|PPM 336764|HR 3256|J081523.25-502657.1,f|S|K3,8:15:23.26|-16.24,-50:26:57.20|-6.7,6.43,2000 +V17798|HD 68457|BD+60 1119|PPM 16546|HR 3221|J081550.50+602250.1,f|D|A7,8:15:50.50|-16.09,60:22:50.17|7.6,6.47,2000 +HD 69445|CD-30 5946|HR 3251|J081552.53-305533.4,f|D|G5,8:15:52.54|-49.67,-30:55:33.40|-12.3,6.22,2000 +V17810|HD 69511|CD-35 4401|HR 3253|J081558.82-355411.4,f|V|K2,8:15:58.82|-8.14,-35:54:11.49|6.6,6.14,2000 +Altarf|Al Tarf|Cnc Beta-17|V3973|SAO 116569|HD 69267|BD+09 1917|PPM 154193|HR 3249|J081630.92+091107.9,f|D|K4,8:16:30.92|-46.79,9:11:7.96|-48.7,3.52,2000 +HD 65299|BD+84 169|PPM 1375|J081653.90+840327.5,f|S|A3,8:16:53.91|-9.67,84:3:27.51|-19.1,6.46,2000 +Pup 21|V3986|HD 69665|SD-15 2362|PPM 219914|HR 3257|J081723.13-161706.4,f|V|A2,8:17:23.13|-11.81,-16:17:6.40|-7.7,6.31,2000 +SAO 116585|HD 69478|BD+09 1921|PPM 154215|HR 3252|J081731.65+085158.7,f|S|G8,8:17:31.65|-13.49,8:51:58.72|-6.5,6.27,2000 +Lyn 29|BD+60 1124|PPM 31582|HR 3235|J081750.41+593416.0,f|S|A7,8:17:50.41|-4.25,59:34:16.08|1.9,5.64,2000 +SAO 235872|CP-58 1095|PPM 336798|HR 3274|J081755.73-591000.5,f|D|F5,8:17:55.74|-49.05,-59:10:0.57|-25.9,6.46,2000 +SAO 175543|HD 69879|CD-29 5897|HR 3261|J081758.28-300013.3,f|S|K0,8:17:58.28|30.14,-30:0:13.31|3.8,6.42,2000 +HD 69629|BD+16 1679|J081814.42+154040.5,f|S|K0,8:18:14.42|-18.77,15:40:40.51|-4.7,6.42,2000 +V17811|HD 69149|BD+54 1215|PPM 31587|HR 3246|J081815.78+540837.3,f|V|K5,8:18:15.79|-21.26,54:8:37.31|-29.6,6.26,2000 +CD-35 4452|HR 3266|J081817.39-352706.1,f|S|K2,8:18:17.40|11.36,-35:27:6.13|1,5.58,2000 +CP-65 907|PPM 356631|J081818.80-653647.4,f|S|K1,8:18:18.81|20.69,-65:36:47.49|22.1,5.06,2000 +SD-12 2449|PPM 219933|HR 3259|J081823.94-123755.8,f|S|G7,8:18:23.95|279.27,-12:37:55.82|-989,5.95,2000 +Cha Alpha|SAO 256496|HD 71243|CP-76 507|PPM 369878|HR 3318|J081831.55-765511.0,f|S|F5,8:18:31.55|109.85,-76:55:11.00|106.9,4.06,2000 +CD-36 4449|J081833.31-363933.4,f|S|A7,8:18:33.31|-111.31,-36:39:33.44|100.6,4.45,2000 +SAO 219785|CD-47 3799|PPM 312929|J081905.58-481152.2,f|D|B3,8:19:5.58|-14.40,-48:11:52.27|9.4,6.44,2000 +HQ HYA|HD 69997|SD-09 2471|HR 3265|J081915.08-100956.7,f|V|F3,8:19:15.08|-44.88,-10:9:56.71|36.9,6.31,2000 +V17814|HD 69148|BD+62 991|PPM 16569|HR 3245|J081917.15+623025.7,f|V|G8,8:19:17.16|-20.50,62:30:25.77|8.4,5.73,2000 +CD-34 4627|HR 3273|J081929.51-343524.4,f|S|B9,8:19:29.51|-8.89,-34:35:24.49|4.3,6.44,2000 +HD 68375|BD+76 310|PPM 6995|HR 3216|J081932.28+754524.8,f|S|G8,8:19:32.29|32.29,75:45:24.87|15.8,5.56,2000 +Vol Kappa1|SAO 256497|CP-71 677|PPM 369893|J081948.96-713053.6,f|D|B9,8:19:48.96|-17.31,-71:30:53.66|37,5.34,2000 +BD+04 1954|PPM 154282|HR 3269|J081949.85+035652.8,f|D|G8,8:19:49.86|26.49,3:56:52.87|-22.1,6.05,2000 +Vol Kappa2|V17867|SAO 256499|CP-71 678|PPM 369896|J082000.52-713019.3,f|D|A0,8:20:0.53|-17.75,-71:30:19.36|35.1,5.63,2000 +Cnc Chi-18|V17848|HD 69897|BD+27 1589|HR 3262|J082003.86+271303.7,f|V|F6,8:20:3.86|-18.41,27:13:3.75|-376.2,5.13,2000 +SAO 135783|BD-00 1966|PPM 177397|HR 3271|J082012.99-005433.5,f|S|F9,8:20:13.00|39.30,-0:54:33.53|-86.5,6.18,2000 +SAO 135787|SD-04 2303|PPM 191215|HR 3272|J082017.02-051947.7,f|S|K2,8:20:17.02|14.94,-5:19:47.75|-43.3,6.10,2000 +HD 69994|BD+21 1817|HR 3264|J082020.97+204451.7,f|S|K1,8:20:20.97|64.81,20:44:51.80|-45.6,5.80,2000 +Lyn 30|HD 69548|BD+58 1112|PPM 31617|HR 3254|J082026.05+574435.8,f|S|F4,8:20:26.06|57.08,57:44:35.80|13.9,5.89,2000 +SAO 175634|CD-22 6017|HR 3276|J082027.34-225528.8,f|D|K0,8:20:27.35|-16.72,-22:55:28.85|0.1,6.12,2000 +HD 69682|BD+54 1217|PPM 31618|HR 3258|J082029.09+533426.7,f|S|F0,8:20:29.10|-64.93,53:34:26.73|-107.1,6.50,2000 +Cnc Lambda-19|BD+24 1909|PPM 98611|HR 3268|J082032.13+240120.3,f|S|B9,8:20:32.14|-20.69,24:1:20.33|-17.8,5.92,2000 +Cha Theta|CP-77 383|J082038.54-772904.1,f|D|K2,8:20:38.54|-129.08,-77:29:4.12|40.8,4.34,2000 +V17816|HD 68951|BD+72 409|HR 3236|J082040.32+722426.0,f|D|M0,8:20:40.32|2.54,72:24:26.04|-25,5.98,2000 +CP-63 940|PPM 356667|HR 3298|J082107.63-640621.6,f|S|G6,8:21:7.64|-7.60,-64:6:21.61|-20,6.11,2000 +V17866|SAO 235917|CP-57 1490|HR 3293|J082112.09-575823.5,f|V|B1,8:21:12.10|-3.10,-57:58:23.59|4.2,5.96,2000 +V17864|SAO 199119|CD-36 4513|PPM 285121|HR 3283|J082121.04-362903.0,f|D|B2,8:21:21.04|-8.08,-36:29:3.04|7,5.18,2000 +SD-19 2369|PPM 254329|HR 3279|J082121.22-200444.6,f|S|G2,8:21:21.22|-2.54,-20:4:44.61|-18.8,5.58,2000 +SAO 199118|CD-32 5185|PPM 285122|HR 3282|J082123.02-330315.7,f|S|K2,8:21:23.03|-11.32,-33:3:15.72|2.4,4.82,2000 +SAO 199123|CD-39 4245|PPM 285124|HR 3286|J082124.18-393714.5,f|S|A3,8:21:24.19|7.28,-39:37:14.57|6.5,6.16,2000 +SAO 154159|SD-17 2464|HR 3281|J082154.60-173510.8,f|S|K1,8:21:54.61|-92.37,-17:35:10.80|-13.9,5.71,2000 +Vol Eta|HD 71576|CP-72 694|HR 3334|J082204.45-732359.9,f|D|A0,8:22:4.46|-31.11,-73:23:59.95|30.2,5.29,2000 +BD+75 334|J082209.60+744913.3,f|D|K0,8:22:9.61|48.35,74:49:13.31|45.3,6.38,2000 +SAO 135832|SD-05 2512|PPM 191257|HR 3285|J082230.16-061044.9,f|S|A8,8:22:30.16|-59.20,-6:10:44.97|0.8,6.15,2000 +Avior|Car Epsilon|V4058|SAO 235932|HD 71129|CP-59 1032|PPM 336856|J082230.83-593034.1,f|V|K3,8:22:30.84|-25.34,-59:30:34.14|22.7,1.95,2000 +V17873|SAO 219848|CD-48 3734|PPM 312992|HR 3294|J082231.69-482925.3,f|D|B1,8:22:31.69|-6.26,-48:29:25.37|6.8,4.83,2000 +HD 69976|BD+61 1043|PPM 16593|HR 3263|J082244.06+603752.4,f|S|K0,8:22:44.07|9.12,60:37:52.45|-2.1,6.42,2000 +Pup 22|V4046|SAO 154177|SD-12 2490|HR 3289|J082246.84-130317.2,f|V|G5,8:22:46.85|-39.60,-13:3:17.25|-47.1,6.11,2000 +CD-25 5988|PPM 254381|HR 3291|J082249.93-262053.5,f|D|F3,8:22:49.94|-5.11,-26:20:53.59|6.2,5.89,2000 +Alsciaukat|Mabsuthat|Lyn 31|BN LYN|BD+43 1815|HR 3275|J082250.10+431117.2,f|V|K4,8:22:50.11|-25.59,43:11:17.27|-99.4,4.24,2000 +V17870|SD-07 2452|PPM 191264|HR 3288|J082254.09-073235.2,f|V|M1,8:22:54.10|-9.81,-7:32:35.23|6.3,5.94,2000 +SAO 235933|CD-51 2980|PPM 336864|J082255.15-520725.4,f|S|A0,8:22:55.16|-22.75,-52:7:25.43|19.5,5.90,2000 +V0436 PUP|SAO 199166|CD-37 4638|HR 3296|J082316.93-381709.8,f|V|M3,8:23:16.93|0.59,-38:17:9.88|-6.2,6.32,2000 +Cnc 20|BD+18 1930|PPM 125211|HR 3284|J082321.83+181955.9,f|S|A9,8:23:21.84|-53.54,18:19:55.92|-33.1,5.94,2000 +V17865|BD+53 1246|PPM 31648|HR 3277|J082348.50+531310.9,f|V|A3,8:23:48.50|-27.57,53:13:10.96|-98.4,5.52,2000 +Cnc 21|V17875|BD+11 1830|PPM 125216|J082355.21+103755.4,f|D|M2,8:23:55.21|3.69,10:37:55.42|-22.1,6.13,2000 +SAO 258496|HD 72922|CP-80 258|PPM 376927|HR 3393|J082419.82-805451.1,f|S|G8,8:24:19.82|-151.90,-80:54:51.13|213.1,5.69,2000 +HD 67934|BD+82 235|PPM 1391|HR 3197|J082433.02+822550.7,f|S|A2,8:24:33.02|-19.30,82:25:50.73|-25.9,6.28,2000 +Hya 1|SAO 135877|SD-03 2333|HR 3297|J082435.01-034504.4,f|S|F3,8:24:35.01|-211.05,-3:45:4.46|-25.8,5.62,2000 +SAO 135882|SD-04 2328|HR 3295|J082436.43-044301.1,f|S|F2,8:24:36.44|25.71,-4:43:1.20|-56.3,6.03,2000 +V17877|BD+42 1859|HR 3287|J082442.77+420018.8,f|D|K5,8:24:42.77|9.03,42:0:18.87|9.8,6.01,2000 +SAO 175777|HD 71141|CD-22 6115|J082455.17-230913.4,f|S|A2,8:24:55.18|-26.62,-23:9:13.48|29.7,5.67,2000 +V0438 PUP|CD-42 4219|HR 3322|J082457.20-424611.4,f|D|B3,8:24:57.21|-12.11,-42:46:11.40|6.8,5.97,2000 +SAO 175783|HD 71176|CD-23 7277|PPM 254457|HR 3315|J082503.73-240246.3,f|D|K4,8:25:3.74|-29.04,-24:2:46.37|20.5,5.29,2000 +BD+35 1819|PPM 73684|HR 3292|J082504.88+350041.0,f|S|K0,8:25:4.89|-12.41,35:0:41.07|-11.1,6.07,2000 +SAO 175792|HD 71196|SD-20 2522|PPM 254467|HR 3316|J082519.00-210245.4,f|S|F3,8:25:19.00|-34.44,-21:2:45.44|61.9,6.00,2000 +SAO 235959|CD-51 3004|PPM 336894|J082531.32-514338.6,f|D|B2,8:25:31.33|-14.68,-51:43:38.70|17.1,5.17,2000 +SAO 116747|BD+02 1965|PPM 154446|J082535.53+020607.9,f|S|K5,8:25:35.54|-21.44,2:6:7.95|-16.4,5.72,2000 +HD 71231|SD-16 2442|HR 3317|J082539.36-172621.8,f|S|K0,8:25:39.36|-11.59,-17:26:21.86|-0.7,6.43,2000 +V17882|SAO 135896|HD 71155|SD-03 2339|PPM 191324|HR 3314|J082539.63-035423.1,f|V|A0,8:25:39.63|-66.00,-3:54:23.12|-24.2,3.89,2000 +Vol Beta|V4088|HD 71878|CP-65 933|PPM 356715|HR 3347|J082544.19-660812.8,f|V|K1,8:25:44.19|-35.80,-66:8:12.80|-152.2,3.77,2000 +Cnc 25|BD+17 1842|PPM 125248|HR 3299|J082549.87+170246.5,f|S|F6,8:25:49.88|-192.74,17:2:46.56|-152.5,6.11,2000 +HD 71863|CP-64 878|PPM 356717|HR 3346|J082551.59-643602.2,f|S|G8,8:25:51.60|-15.06,-64:36:2.22|15.2,5.94,2000 +HD 71459|CD-41 4119|HR 3326|J082551.91-420911.0,f|S|B3,8:25:51.91|-16.46,-42:9:11.06|13.4,5.45,2000 +SAO 116752|HD 71115|BD+08 2053|PPM 154457|J082554.76+073352.2,f|D|G8,8:25:54.77|-33.75,7:33:52.22|-9.6,5.12,2000 +SAO 154244|HD 71267|SD-14 2517|J082555.59-145546.7,f|S|A5,8:25:55.59|-11.02,-14:55:46.78|38.7,5.96,2000 +SAO 235976|HD 71722|CP-52 1474|HR 3341|J082625.20-524826.9,f|S|A0,8:26:25.21|-37.99,-52:48:27.00|1,6.05,2000 +Hya 2|LM HYA|SAO 135916|HD 71297|SD-03 2345|PPM 191345|HR 3321|J082627.20-035914.9,f|D|A5,8:26:27.21|-34.27,-3:59:14.93|-73.8,5.59,2000 +Cnc Phi-22|BD+28 1602|J082627.70+275336.8,f|D|K5,8:26:27.71|-34.47,27:53:36.90|-114.9,5.58,2000 +V4085|SAO 154257|HD 71377|SD-12 2524|HR 3324|J082641.95-123204.5,f|V|K2,8:26:41.95|-92.10,-12:32:4.57|-25.7,5.52,2000 +Cnc 27|BP CNC|BD+13 1912|PPM 125269|HR 3319|J082643.93+123916.6,f|V|M3,8:26:43.94|-17.42,12:39:16.60|-103,5.58,2000 +Cnc Phi-23B|V4078|BD+27 1612B|J082646.83+265603.6,f|D|A6,8:26:46.83|-9.63,26:56:3.67|1.3,6.38,2000 +Cnc Phi-23A|V4078|HD 71151|BD+27 1612A|HR 3311|J082647.06+265607.7,f|D|A3,8:26:47.07|-9.63,26:56:7.76|1.3,6.17,2000 +SAO 235988|CP-52 1480|PPM 336917|J082657.74-524217.7,f|D|F6,8:26:57.75|-83.62,-52:42:17.78|-43.3,6.49,2000 +SAO 199246|HD 71622|CD-31 6079|PPM 285256|HR 3336|J082716.41-314021.8,f|S|G8,8:27:16.42|-22.60,-31:40:21.84|-4.3,6.33,2000 +HD 72337|CP-69 919|PPM 369948|J082716.75-700536.5,f|S|A0,8:27:16.76|-18.49,-70:5:36.53|46.6,5.52,2000 +GU VEL|HD 71935|CP-52 1484|PPM 336932|J082736.58-530518.5,f|V|A9,8:27:36.59|-67.66,-53:5:18.53|24.7,5.08,2000 +V17888|HD 71148|BD+46 1398|J082736.78+453910.7,f|V|G5,8:27:36.79|-18.98,45:39:10.75|-351.5,6.33,2000 +XY PYX|CD-34 4842A|PPM 285269|HR 3343|J082759.41-350649.5,f|D|B3,8:27:59.42|-6.87,-35:6:49.55|11,5.75,2000 +SAO 135956|HD 71665|SD-08 2374|HR 3338|J082819.78-084858.6,f|S|K0,8:28:19.79|15.27,-8:48:58.61|-40.8,6.43,2000 +LO HYA|SAO 135958|HD 71663|SD-02 2581|HR 3337|J082829.15-023101.6,f|D|A5,8:28:29.15|-10.34,-2:31:1.65|-10.6,6.42,2000 +HD 71815|CD-22 6201|PPM 254572|HR 3344|J082836.03-230415.5,f|S|A0,8:28:36.04|-30.08,-23:4:15.53|2,6.50,2000 +Cnc 28|CX CNC|HD 71496|BD+24 1931|PPM 98739|HR 3329|J082836.77+240841.7,f|V|F0,8:28:36.78|-39.15,24:8:41.76|-48,6.05,2000 +Cnc 29|HD 71555|BD+14 1899|HR 3333|J082837.33+141238.9,f|S|A5,8:28:37.34|-13.81,14:12:38.96|-13.1,5.96,2000 +SAO 135965|HD 71766|SD-09 2532|PPM 191392|HR 3342|J082851.00-094454.8,f|S|F2,8:28:51.00|-4.29,-9:44:54.90|5,6.00,2000 +SAO 219985|CD-47 4004|PPM 313129|HR 3358|J082904.75-475544.1,f|D|B2,8:29:4.75|-7.74,-47:55:44.12|6.7,5.33,2000 +V4106|SAO 219982|CD-43 4337|PPM 313133|HR 3356|J082907.57-440937.4,f|D|B2,8:29:7.58|-7.43,-44:9:37.45|7.5,5.84,2000 +V17903|SAO 219996|HD 72127|CD-44 4462A|PPM 313144|HR 3359|J082927.48-444329.3,f|D|B2,8:29:27.48|-5.86,-44:43:29.32|6.4,5.19,2000 +V0469 CAR|CP-53 1707|PPM 336959|J082929.79-541242.3,f|D|Ap,8:29:29.80|-21.14,-54:12:42.34|17,6.45,2000 +HD 72322|CP-54 1667|PPM 336963|HR 3368|J082936.38-551127.3,f|D|G0,8:29:36.39|-9.68,-55:11:27.37|-13.2,6.35,2000 +HD 72232|CD-45 4183|PPM 313152|HR 3363|J082945.63-461954.0,f|S|B5,8:29:45.63|-25.27,-46:19:54.09|14.5,5.98,2000 +BD+67 545|J082946.19+671750.7,f|S|G8,8:29:46.20|-65.13,67:17:50.79|10.7,5.88,2000 +Muscida|UMa Omicron-1A|V4093|HD 71369|BD+61 1054|PPM 16654|HR 3323|J083015.87+604305.4,f|D|G5,8:30:15.87|-134.33,60:43:5.41|-107.7,3.36,2000 +V4113|HD 72227|CD-31 6165|PPM 285317|HR 3362|J083028.61-320933.4,f|V|K2,8:30:28.61|-12.70,-32:9:33.43|1,5.60,2000 +CD-44 4477|HR 3371|J083039.22-444414.3,f|D|B4,8:30:39.23|-9.70,-44:44:14.35|4.9,6.33,2000 +HD 72485|CD-47 4048|PPM 313178|HR 3375|J083110.62-475159.8,f|S|B2,8:31:10.63|-13.79,-47:51:59.83|8.5,6.38,2000 +BD+37 1870|HR 3348|J083119.96+371553.7,f|S|A0,8:31:19.97|-14.56,37:15:53.79|-29.9,6.19,2000 +V17914|SAO 199329|HD 72436|CD-38 4566|PPM 285338|HR 3373|J083124.69-390350.7,f|D|B4,8:31:24.69|-5.94,-39:3:50.80|9.3,6.46,2000 +CP-53 1729|PPM 336991|HR 3382|J083129.58-542338.4,f|S|K3,8:31:29.59|15.46,-54:23:38.44|-43.1,6.33,2000 +Cnc Upsilon-30|V17909|BD+24 1940|PPM 98777|HR 3355|J083130.51+240451.9,f|V|F0,8:31:30.52|-82.17,24:4:51.98|-45.7,5.70,2000 +SAO 154359|SD-19 2438|HR 3367|J083130.92-193438.9,f|D|A0,8:31:30.93|-29.68,-19:34:38.93|-9.3,5.42,2000 +Cnc Theta-31|V17911|BD+18 1963|PPM 125369|HR 3357|J083135.73+180539.9,f|D|K5,8:31:35.73|-60.03,18:5:39.91|-56.5,5.35,2000 +HD 72115|BD+19 2027|PPM 125372|J083141.29+185915.8,f|S|K0,8:31:41.30|-25.81,18:59:15.84|-21.5,6.50,2000 +HD 72738|CP-52 1517A|PPM 336997|J083204.86-531242.7,f|D|A3,8:32:4.87|-16.17,-53:12:42.70|16.8,5.68,2000 +HD 72737|CP-52 1517B|PPM 336997|HR 3386|J083204.95-531242.9,f|D|K0,8:32:4.96|-16.17,-53:12:42.91|16.8,5.68,2000 +SAO 154373|HD 72462|SD-14 2564|HR 3374|J083233.36-150148.5,f|D|F0,8:32:33.36|-48.97,-15:1:48.52|22.2,6.39,2000 +V17912|HD 71952|BD+53 1259|PPM 31737|HR 3351|J083233.44+530653.4,f|V|K0,8:32:33.45|9.90,53:6:53.45|-74.1,6.24,2000 +Cnc 34|V17916|HD 72359|BD+10 1818|PPM 125394|HR 3372|J083239.87+100357.6,f|V|A1,8:32:39.87|5.91,10:3:57.63|-6.2,6.48,2000 +HD 72752|CD-46 4287|PPM 313213|J083240.50-470231.5,f|S|K2,8:32:40.50|-13.29,-47:2:31.59|9.6,6.49,2000 +SAO 256524|HD 73468|CP-72 713|PPM 369983|HR 3417|J083241.76-732124.4,f|S|G8,8:32:41.77|-54.26,-73:21:24.45|72.1,6.11,2000 +Cnc Eta-33|HD 72292|BD+20 2109|PPM 98797|HR 3366|J083242.49+202628.1,f|S|K3,8:32:42.50|-44.70,20:26:28.18|-44.7,5.34,2000 +SAO 199352|HD 72673|CD-31 6229|PPM 285366|HR 3384|J083251.49-313003.0,f|S|K0,8:32:51.50|-1113.58,-31:30:3.07|761.7,6.38,2000 +HD 71553|BD+69 472|PPM 16669|HR 3332|J083253.30+691911.6,f|S|K0,8:32:53.31|22.94,69:19:11.64|-25.2,6.30,2000 +HD 72184|BD+38 1920|PPM 73799|J083254.97+380058.9,f|S|K1,8:32:54.98|-104.59,38:0:58.92|-172.3,5.88,2000 +VX PYX|SAO 199353|HD 72688|CD-34 4959|PPM 285371|HR 3385|J083258.50-343802.5,f|V|K0,8:32:58.50|-18.27,-34:38:2.54|3.3,6.37,2000 +Cnc Upsilon-32|HD 72324|BD+24 1946|HR 3369|J083300.10+240505.2,f|S|G9,8:33:0.10|-64.64,24:5:5.25|-47.5,6.34,2000 +HD 72798|CD-45 4236|PPM 313229|J083301.85-454510.4,f|D|B5,8:33:1.86|-8.90,-45:45:10.46|9.1,6.36,2000 +HD 72626|CD-24 7089|HR 3381|J083304.84-243625.0,f|D|A8,8:33:4.85|2.45,-24:36:25.06|-28,6.22,2000 +V17922|SAO 199363|HD 72787|CD-37 4850|PPM 285376|HR 3388|J083319.86-382214.4,f|V|B2,8:33:19.86|-10.70,-38:22:14.43|5.7,6.47,2000 +Lyn 32|HD 72291|BD+36 1836|HR 3365|J083321.73+362611.1,f|S|F5,8:33:21.73|-145.05,36:26:11.15|2.6,6.20,2000 +CD-46 4300|PPM 313238|J083330.27-465814.3,f|S|K3,8:33:30.27|-2.87,-46:58:14.38|4.8,6.23,2000 +V4137|HD 72832|CD-38 4610|PPM 285383|HR 3389|J083338.43-385055.7,f|V|B5,8:33:38.43|-21.03,-38:50:55.73|7.4,5.92,2000 +HD 72561|BD+05 1997|PPM 154652|HR 3378|J083343.47+044525.2,f|S|G5,8:33:43.48|-14.35,4:45:25.20|-6.2,5.86,2000 +BD+13 1940|HR 3376|J083345.04+131526.3,f|S|K0,8:33:45.05|-32.27,13:15:26.32|-47.6,6.25,2000 +BD-01 2074|HR 3383|J083401.61-020905.5,f|S|A1,8:34:1.62|-33.43,-2:9:5.60|20.7,5.80,2000 +SAO 116894|HD 72617|BD+08 2077|PPM 154661|J083413.35+082708.4,f|D|F3,8:34:13.35|6.53,8:27:8.42|-14.4,6.04,2000 +V4143|SAO 199389|HD 72993|CD-37 4873|HR 3399|J083429.25-373640.2,f|D|K5,8:34:29.25|-11.53,-37:36:40.21|10.8,6.35,2000 +V4141|HD 72913|CD-26 6200|PPM 254771|J083429.70-270553.3,f|V|K3,8:34:29.70|-37.79,-27:5:53.38|15.4,6.40,2000 +SAO 199388|HD 72954|CD-32 5465|HR 3397|J083431.94-323555.4,f|D|G5,8:34:31.95|0.25,-32:35:55.43|-144.3,6.42,2000 +UMa 2|BD+65 638|HR 3354|J083436.12+650842.6,f|S|A2,8:34:36.12|-47.03,65:8:42.61|-42.5,5.46,2000 +HD 73155|CD-49 3646|J083443.59-495639.1,f|S|K1,8:34:43.60|-12.55,-49:56:39.13|17.7,4.98,2000 +Lyn 33|HD 72524|BD+36 1840|PPM 73821|HR 3377|J083443.88+362510.6,f|S|A2,8:34:43.88|-26.80,36:25:10.63|-41.2,5.76,2000 +HD 73121|CD-39 4519|PPM 285418|J083512.53-395813.6,f|S|G1,8:35:12.54|74.26,-39:58:13.63|42.6,6.45,2000 +CP-57 1590|HR 3415|J083515.55-581329.0,f|S|B3,8:35:15.56|-21.09,-58:13:29.05|11.6,5.25,2000 +HD 73389|CP-57 1591|HR 3414|J083519.70-580033.2,f|S|K0,8:35:19.71|53.80,-58:0:33.21|27.3,4.85,2000 +BD+03 2014|PPM 154696|HR 3392|J083524.95+024436.4,f|S|G9,8:35:24.96|-1.50,2:44:36.42|3.8,6.33,2000 +Hya 3|HV HYA|HD 72968|SD-07 2540|HR 3398|J083528.19-075856.2,f|V|A1,8:35:28.20|-21.98,-7:58:56.25|16.1,5.73,2000 +SAO 176131|CD-26 6225|J083528.70-265036.5,f|S|A1,8:35:28.70|-31.32,-26:50:36.55|18.7,5.95,2000 +SAO 116929|HD 72945|BD+07 1997A|HR 3395|J083550.97+063712.7,f|D|F8,8:35:50.97|-134.84,6:37:12.79|-131,5.91,2000 +HV VEL|CD-50 3417|HR 3413|J083552.02-505810.7,f|V|B8,8:35:52.03|-13.70,-50:58:10.75|10.5,5.79,2000 +HD 72943|BD+15 1851|PPM 125463|HR 3394|J083607.71+151849.0,f|S|F0,8:36:7.71|5.93,15:18:49.08|-23.2,6.32,2000 +HD 71973|BD+75 342|HR 3352|J083648.74+744325.2,f|D|A2,8:36:48.74|-16.05,74:43:25.24|-17.7,6.31,2000 +Cnc 36|V17934|SAO 116953|HD 73143|BD+10 1837|PPM 154746|J083705.77+093920.0,f|V|A3,8:37:5.77|-27.21,9:39:20.09|-6.8,5.92,2000 +HD 73887|CP-62 1058|PPM 356837|HR 3432|J083718.83-625112.4,f|D|K0,8:37:18.83|-10.95,-62:51:12.48|-21.9,5.46,2000 +HD 73281|SD-04 2401|PPM 191526|HR 3411|J083727.17-045602.3,f|S|K0,8:37:27.17|-2.24,-4:56:2.40|5.6,6.18,2000 +HD 73634|CD-42 4451|PPM 313335|HR 3426|J083738.63-425920.6,f|S|A6,8:37:38.63|-10.42,-42:59:20.69|9.5,4.14,2000 +Hya Delta-4|SAO 116965|HD 73262|BD+06 2001|PPM 154763|J083739.36+054213.6,f|D|A1,8:37:39.37|-70.30,5:42:13.61|-7,4.14,2000 +Pyx Eta|V17941|SAO 176189|HD 73495|CD-25 6356|PPM 254861|J083752.15-261517.9,f|D|A0,8:37:52.15|-23.41,-26:15:18.00|-12.2,5.25,2000 +HD 73192|BD+33 1728|PPM 73863|J083818.98+324807.2,f|S|K5,8:38:18.98|-24.33,32:48:7.27|-3,5.96,2000 +V17935|BD+53 1268|J083822.18+532405.5,f|V|G8,8:38:22.18|-76.28,53:24:5.54|-14.7,5.66,2000 +V17944|SAO 154492|SD-19 2489|HR 3425|J083840.29-194412.8,f|D|K5,8:38:40.29|9.74,-19:44:12.85|2.2,6.39,2000 +SAO 236142|HD 73952|CP-52 1565|HR 3435|J083844.80-530525.3,f|D|B8,8:38:44.81|-26.03,-53:5:25.37|21.7,6.46,2000 +Minchir|Al Minliar al Shuja|Hya Sigma-5|SAO 116988|HD 73471|BD+03 2026|PPM 154796|HR 3418|J083845.43+032029.1,f|S|K1,8:38:45.44|-19.02,3:20:29.17|-16.3,4.45,2000 +HD 73131|BD+53 1269|PPM 31786|J083859.88+525530.2,f|S|K0,8:38:59.89|-28.67,52:55:30.28|-28.4,6.33,2000 +Vol Theta|SAO 256535|CP-69 946|J083905.16-702312.2,f|D|A0,8:39:5.16|19.23,-70:23:12.28|-38.1,5.19,2000 +SAO 176226|HD 73752|CD-22 6442|J083907.90-223942.7,f|D|G6,8:39:7.90|-268.26,-22:39:42.75|424.1,5.05,2000 +SAO 176226|HD 73752|CD-22 6442|J083907.96-223941.4,f|D|G5,8:39:7.96|-226.59,-22:39:41.40|470.7,5.05,2000 +BD+60 1148|J083910.07+595620.8,f|S|A2,8:39:10.07|-27.43,59:56:20.85|-48.1,6.47,2000 +UMa Pi1-3|V17937|BD+65 643|Muscida b|HR 3391|J083911.70+650115.2,f|V|G1,8:39:11.70|-27.74,65:1:15.26|87.9,5.64,2000 +HD 74148|CP-59 1075|HR 3443|J083913.19-601902.2,f|D|A0,8:39:13.20|-41.23,-60:19:2.24|19.9,6.49,2000 +HD 73171|BD+53 1272|PPM 31792|J083917.62+524241.8,f|S|K5,8:39:17.62|-29.26,52:42:41.84|-31.4,5.91,2000 +SAO 199473|CD-36 4872|PPM 285498|HR 3434|J083922.09-363624.0,f|D|F1,8:39:22.09|-165.57,-36:36:24.07|55,6.12,2000 +HW VEL|SAO 236151|CP-53 1796|J083923.84-532623.1,f|V|B5,8:39:23.84|-23.95,-53:26:23.16|23.5,5.45,2000 +SAO 116997|HD 73599|BD+08 2099|PPM 154811|HR 3424|J083924.55+080103.3,f|S|K1,8:39:24.56|-29.71,8:1:3.36|-28.7,6.45,2000 +Pyx Zeta|V4186|SAO 176253|HD 73898|CD-29 6544|HR 3433|J083942.47-293339.9,f|D|G4,8:39:42.47|-25.44,-29:33:39.90|-91.3,4.88,2000 +HD 72582|BD+74 370|PPM 7117|HR 3379|J083942.60+733746.8,f|S|G7,8:39:42.61|-13.44,73:37:46.84|-99,6.15,2000 +NZ VEL|SAO 236157|HD 74146|CP-52 1579A|PPM 337114|HR 3442|J083957.59-530317.0,f|D|B4,8:39:57.60|-25.79,-53:3:17.03|21.5,5.18,2000 +Hya 6|SAO 154515|SD-11 2420|HR 3431|J084001.47-122831.3,f|S|K4,8:40:1.47|-79.82,-12:28:31.34|0.9,4.97,2000 +Pyx Beta|CD-34 5128|PPM 285512|HR 3438|J084006.14-351830.0,f|D|G7,8:40:6.14|9.67,-35:18:30.07|-21.2,3.97,2000 +Cnc 39A|V4179|HD 73665|BD+20 2158|PPM 98927|HR 3427|J084006.41+200028.0,f|D|G8,8:40:6.42|-34.95,20:0:28.04|-11.8,6.37,2000 +UMa Pi2-4|BD+64 698|Muscida c|PPM 16713|J084012.81+641940.5,f|S|K1,8:40:12.82|-59.39,64:19:40.57|26.4,4.59,2000 +V4197|SAO 236165|HD 74196|CP-52 1584|PPM 337126|HR 3448|J084017.46-530055.4,f|V|B7,8:40:17.46|-25.45,-53:0:55.43|23.2,5.56,2000 +Omicron Velorum|SAO 236164|HD 74195|CP-52 1583|PPM 337127|HR 3447|J084017.58-525518.7,f|S|B3,8:40:17.59|-24.60,-52:55:18.79|35.1,3.60,2000 +V17949|HD 73596|BD+32 1776|PPM 73899|HR 3423|J084018.28+315630.8,f|V|F5,8:40:18.29|-39.33,31:56:30.83|-31.3,6.21,2000 +NY VEL|CD-39 4653|PPM 313389|HR 3439|J084019.17-401549.9,f|D|B9,8:40:19.17|-55.97,-40:15:49.95|7.7,5.21,2000 +BD+20 2166|PPM 125573|HR 3428|J084022.08+194011.7,f|D|G9,8:40:22.09|-35.17,19:40:11.78|-13.2,6.43,2000 +Cnc Epsilon-41A|HD 73731|BD+20 2171|PPM 125577|HR 3429|J084027.01+193241.3,f|D|A8,8:40:27.01|-33.78,19:32:41.31|-13.6,6.29,2000 +V4198|HD 74167|CD-44 4679|PPM 313394|HR 3444|J084035.25-451127.9,f|V|M0,8:40:35.26|3.38,-45:11:27.97|5,5.67,2000 +V0343 CAR|SAO 236181|HD 74375|CP-59 1080|PPM 337131|HR 3457|J084037.02-594539.6,f|D|B1,8:40:37.03|-6.87,-59:45:39.61|4.9,4.33,2000 +V4199|CD-46 4438A|PPM 313395|HR 3445|J084037.56-463855.4,f|D|F3,8:40:37.57|-6.28,-46:38:55.48|4.3,3.81,2000 +SAO 236179|HD 74341|CP-57 1644|PPM 337133|HR 3455|J084043.52-573243.7,f|D|A3,8:40:43.53|-22.86,-57:32:43.76|17.5,6.34,2000 +Lyn 34|HD 73593|BD+46 1422|HR 3422|J084101.07+455002.4,f|S|G8,8:41:1.07|27.17,45:50:2.44|92.5,5.37,2000 +HD 74273|CD-48 4020|PPM 313411|HR 3453|J084105.32-485521.6,f|S|B1,8:41:5.32|-4.63,-48:55:21.65|3.6,5.89,2000 +HD 74272|CD-46 4448|PPM 313413|HR 3452|J084113.13-471901.6,f|S|A5,8:41:13.13|-10.47,-47:19:1.65|6.9,4.77,2000 +Cha Eta|SAO 256543|HD 75416|CP-78 372|J084119.51-785748.0,f|S|B8,8:41:19.51|-29.32,-78:57:48.09|27.6,5.46,2000 +Hya 9|SAO 154552|HD 74137|SD-15 2554|HR 3441|J084143.33-155636.1,f|D|G9,8:41:43.34|3.61,-15:56:36.18|-96.8,4.87,2000 +LN VEL|HD 74371|CD-44 4704|PPM 313429|HR 3456|J084156.90-452438.5,f|V|B6,8:41:56.91|-5.90,-45:24:38.57|5,5.24,2000 +SAO 154558|SD-11 2432|HR 3446|J084209.81-115757.6,f|S|A5,8:42:9.81|-28.03,-11:57:57.63|-14.4,6.46,2000 +HX VEL|HD 74455|CD-47 4251|PPM 313439|HR 3462|J084216.19-480556.7,f|D|B1,8:42:16.19|-4.91,-48:5:56.73|3.5,5.48,2000 +KT VEL|HD 74535|CP-52 1605|PPM 337166|HR 3466|J084218.99-530600.2,f|D|B8,8:42:18.99|-23.24,-53:6:0.20|24.1,5.49,2000 +HD 74622|CP-55 1688|PPM 337167|HR 3471|J084220.82-554628.4,f|S|K2,8:42:20.82|-73.99,-55:46:28.40|41.6,6.25,2000 +HY VEL|CP-52 1607|PPM 337171|HR 3467|J084225.38-530650.3,f|D|B3,8:42:25.39|-24.85,-53:6:50.34|23.2,4.83,2000 +SAO 199535|HD 74475|CD-35 4976|PPM 285558|HR 3463|J084256.99-355635.8,f|S|A0,8:42:57.00|-10.57,-35:56:35.88|20.2,6.42,2000 +HD 73971|BD+47 1606|HR 3436|J084300.15+465403.0,f|S|G8,8:43:0.15|-47.86,46:54:3.04|-61.6,6.22,2000 +RS CHA|SAO 256549|HD 75747|CP-78 378|HR 3524|J084312.21-790412.2,f|V|A5,8:43:12.21|-30.83,-79:4:12.29|28.1,6.07,2000 +Cnc 45|HD 74228|BD+13 1972|PPM 125651|J084312.32+124051.1,f|S|A3,8:43:12.33|-9.95,12:40:51.15|2.1,5.63,2000 +Hya Eta-7|Eta Hydrae|BD+03 2039|PPM 154889|HR 3454|J084313.47+032355.1,f|S|B3,8:43:13.48|-19.17,3:23:55.18|-1.3,4.29,2000 +Cnc Gamma-43A|HD 74198|BD+21 1895|Asellus Borealis|PPM 98985|HR 3449|J084317.14+212806.6,f|D|A1,8:43:17.15|-106.93,21:28:6.60|-39.3,4.67,2000 +Pyx Alpha|V4220|SAO 199546|HD 74575|CD-32 5651|PPM 285573|HR 3468|J084335.53-331110.9,f|V|B1,8:43:35.54|-14.31,-33:11:10.99|10.6,3.69,2000 +HD 74753|CD-49 3761|PPM 313484|HR 3476|J084340.27-494922.0,f|S|B0,8:43:40.27|-3.58,-49:49:22.09|3.7,5.15,2000 +SAO 136221|HD 74395|SD-06 2708|PPM 191645|HR 3459|J084340.37-071401.4,f|D|G1,8:43:40.37|-11.76,-7:14:1.43|-1.1,4.64,2000 +HD 75116|CP-67 990|PPM 356899|HR 3491|J084354.32-681241.6,f|S|K3,8:43:54.33|1.50,-68:12:41.69|26.8,6.31,2000 +HD 74393|BD+04 2029|HR 3458|J084359.77+042004.4,f|S|B9,8:43:59.78|-14.96,4:20:4.41|-6.3,6.36,2000 +HD 74772|CD-42 4569|HR 3477|J084423.94-423857.3,f|D|G6,8:44:23.95|-23.83,-42:38:57.39|19.5,4.06,2000 +HD 75171|CP-65 1013|HR 3495|J084429.95-654931.5,f|S|A4,8:44:29.96|-63.58,-65:49:31.54|104.2,6.03,2000 +Cnc Delta-47|HD 74442|BD+18 2027|Asellus Australis|PPM 125682|HR 3461|J084441.09+180915.5,f|D|K0,8:44:41.10|-17.10,18:9:15.51|-228.5,3.93,2000 +Vel Delta|delta Vel|SAO 236232|HD 74956|CP-54 1788|PPM 337198|HR 3485|J084442.22-544231.7,f|D|A1,8:44:42.23|28.77,-54:42:31.76|-104.1,1.94,2000 +Cnc 49|BI CNC|HD 74521|BD+10 1864|PPM 125684|HR 3465|J084445.03+100454.0,f|V|A1,8:44:45.04|-13.59,10:4:54.01|-17.4,5.63,2000 +V4232|SAO 199573|HD 74824|CD-36 4980|HR 3479|J084451.92-370850.0,f|V|B2,8:44:51.93|-8.25,-37:8:50.10|4.3,5.74,2000 +SD-20 2667|HR 3473|J084455.14-211004.1,f|S|A5,8:44:55.15|-24.62,-21:10:4.17|4.1,6.11,2000 +Hya 10|HD 74591|BD+06 2030|PPM 154933|HR 3469|J084501.28+054050.1,f|S|A6,8:45:1.28|2.54,5:40:50.12|-3.8,6.13,2000 +Cnc 46|HD 74485|BD+31 1876|PPM 73966|HR 3464|J084521.42+304151.9,f|S|G5,8:45:21.42|-3.22,30:41:51.91|-4.3,6.12,2000 +HD 74685|BD+05 2049|PPM 154946|J084534.86+043951.7,f|S|K0,8:45:34.86|43.65,4:39:51.76|-77.4,6.45,2000 +SAO 176439|HD 74879|CD-24 7377|HR 3483|J084549.28-252317.1,f|S|A2,8:45:49.28|-26.29,-25:23:17.12|7.6,6.07,2000 +V18046|SAO 256552|HD 76236|CP-79 352|HR 3543|J084555.15-793015.7,f|V|K5,8:45:55.15|-26.12,-79:30:15.74|81.3,5.78,2000 +CD-45 4517|PPM 313548|HR 3487|J084601.64-460229.4,f|S|A1,8:46:1.64|-12.29,-46:2:29.50|4.8,3.90,2000 +SAO 136254|HD 74794|BD-01 2125|PPM 177588|HR 3478|J084602.47-020255.1,f|S|K5,8:46:2.48|39.57,-2:2:55.16|46.7,5.69,2000 +SAO 154615|SD-10 2634|J084606.87-110024.3,f|D|K5,8:46:6.87|-29.60,-11:0:24.36|14.4,6.23,2000 +Hya 12|SAO 154622|HD 74918|SD-13 2673|HR 3484|J084622.53-133251.7,f|D|G8,8:46:22.54|17.64,-13:32:51.79|-6.2,4.32,2000 +CD-40 4602|PPM 313562|HR 3488|J084623.75-410731.4,f|S|B9,8:46:23.76|-21.36,-41:7:31.40|5.4,6.21,2000 +OP VEL|HD 75149|CD-45 4526|PPM 313566|HR 3494|J084630.54-455445.0,f|V|B3,8:46:30.55|-5.01,-45:54:45.02|4.9,5.47,2000 +Cnc Iota-48B|HD 74738|BD+29 1823|HR 3474|J084639.98+284554.2,f|D|A3,8:46:39.98|-24.19,28:45:54.21|-44,6.50,2000 +Cnc Iota-48A|V4238|HD 74739|BD+29 1824|HR 3475|J084641.82+284535.6,f|D|G8,8:46:41.82|-20.64,28:45:35.63|-44,4.02,2000 +V0344 CAR|SAO 236268|HD 75311|CP-56 1865|PPM 337235|HR 3498|J084642.54-564611.1,f|V|B3,8:46:42.55|-9.37,-56:46:11.19|8.6,4.50,2000 +Hya Epsilon-11A|Epsilon Hydrae|SAO 117112|HD 74874|BD+06 2036|HR 3482|J084646.51+062507.7,f|D|K1,8:46:46.51|-231.04,6:25:7.71|-40.2,3.40,2000 +AI PYX|HD 75112|CD-34 5243|PPM 285645|J084649.24-343722.6,f|V|B4,8:46:49.24|-12.84,-34:37:22.60|5.8,6.33,2000 +Cnc 50|HD 74873|BD+12 1904|PPM 125732|HR 3481|J084656.01+120635.8,f|S|A1,8:46:56.02|-65.26,12:6:35.83|-51.1,5.89,2000 +V18032|SAO 136276|HD 74988|BD-01 2130|HR 3486|J084714.98-015349.3,f|V|A3,8:47:14.99|-37.63,-1:53:49.32|11.1,5.28,2000 +HD 75276|CD-45 4541|HR 3496|J084718.84-460919.4,f|S|F2,8:47:18.85|-3.84,-46:9:19.49|5.2,5.75,2000 +SAO 154636|SD-16 2589|J084721.46-170310.3,f|D|G0,8:47:21.47|-12.05,-17:3:10.33|-10.4,6.50,2000 +HD 75289|CD-41 4507|HR 3497|J084740.38-414412.4,f|S|G0,8:47:40.39|-20.48,-41:44:12.45|-227.7,6.35,2000 +SAO 236284|HD 75466|CP-52 1675|PPM 337259|J084800.21-525100.5,f|S|B8,8:48:0.22|-24.91,-52:51:0.55|23.3,6.27,2000 +SAO 136287|SD-06 2727|PPM 191714|HR 3493|J084804.87-063331.8,f|S|K0,8:48:4.88|14.01,-6:33:31.82|-32.2,6.09,2000 +V18036|HD 75387|CD-41 4516|PPM 313619|J084808.77-422748.4,f|V|B2,8:48:8.78|-13.61,-42:27:48.41|7,6.42,2000 +Hya Rho-13|SAO 117146|HD 75137|BD+06 2040|HR 3492|J084825.97+055016.1,f|D|A0,8:48:25.97|-17.46,5:50:16.12|-29.8,4.35,2000 +SAO 136294|HD 75217|BD-00 2069|J084837.45-010241.4,f|S|K0,8:48:37.45|-50.84,-1:2:41.41|-1.4,6.42,2000 +BD+67 560|PPM 16779|J084849.25+664229.0,f|S|B8,8:48:49.25|-19.93,66:42:29.10|-35.3,6.20,2000 +Hya 14|KX HYA|HD 75333|SD-02 2699|PPM 191737|J084921.72-032634.8,f|V|B9,8:49:21.73|-19.61,-3:26:34.88|-21.7,5.30,2000 +CD-39 4838|PPM 313655|HR 3514|J084939.15-401912.5,f|S|A2,8:49:39.16|-9.72,-40:19:12.57|-0.8,5.47,2000 +SAO 176535|HD 75495|SD-20 2693|PPM 255211|J084944.94-210254.3,f|S|A7,8:49:44.94|4.90,-21:2:54.38|-56.6,6.48,2000 +CD-44 4861|J084947.63-451828.3,f|S|A2,8:49:47.64|-12.34,-45:18:28.35|14.4,4.95,2000 +V18070|SAO 256556|CP-72 747|HR 3544|J084950.12-723304.4,f|V|A2,8:49:50.13|-6.34,-72:33:4.46|8.1,6.11,2000 +V4268|SAO 199678|CD-32 5770|PPM 285724|HR 3512|J084951.49-324649.8,f|V|G5,8:49:51.50|-1.89,-32:46:49.89|-48.2,5.20,2000 +HZ VEL|SAO 199682|HD 75654|CD-38 4925|PPM 285725|HR 3517|J084952.35-390829.7,f|V|A5,8:49:52.35|-63.87,-39:8:29.77|41.1,6.38,2000 +SAO 176546|HD 75629|CD-28 6600|PPM 255218|HR 3513|J085002.23-292746.7,f|S|G8,8:50:2.23|-15.80,-29:27:46.79|5.4,5.87,2000 +HD 75759|CD-41 4560|PPM 313675|HR 3525|J085021.01-420523.2,f|S|B1,8:50:21.02|-6.01,-42:5:23.25|3.6,6.00,2000 +SAO 176554|HD 75649|CD-28 6610|PPM 255227|HR 3516|J085021.63-283703.4,f|S|B9,8:50:21.64|-19.75,-28:37:3.43|-6.6,6.17,2000 +Pyx Gamma|SAO 176559|HD 75691|CD-27 5986|PPM 255235|HR 3518|J085031.92-274235.4,f|S|K2,8:50:31.92|-133.46,-27:42:35.44|88.2,4.02,2000 +HD 75332|BD+33 1765|HR 3499|J085032.22+331706.1,f|S|F7,8:50:32.22|-62.19,33:17:6.19|-85,6.22,2000 +KX VEL|HD 75821|CD-46 4661|PPM 313681|HR 3527|J085033.46-463145.0,f|D|B0,8:50:33.46|-2.79,-46:31:45.07|3.8,5.11,2000 +HD 76143|CP-66 927|PPM 356963|HR 3537|J085034.81-664734.7,f|D|F5,8:50:34.82|92.62,-66:47:34.73|100.4,5.34,2000 +HD 75469|BD+19 2110|J085045.12+184955.8,f|S|A2,8:50:45.12|-11.78,18:49:55.86|-23.5,6.41,2000 +Cnc 54|HD 75528|BD+15 1917|PPM 125817|J085101.46+152102.3,f|S|G1,8:51:1.46|-118.18,15:21:2.34|72.5,6.37,2000 +Hya 15A|V4282|SAO 136345|HD 75737|SD-06 2743|PPM 191777|HR 3523|J085134.41-071038.0,f|D|A4,8:51:34.41|-48.81,-7:10:38.01|-5.3,5.57,2000 +SAO 236339|HD 76113|CP-57 1759|PPM 337312|HR 3536|J085136.51-573800.8,f|S|B8,8:51:36.52|-15.26,-57:38:0.88|15.6,5.59,2000 +CD-43 4711|PPM 313712|J085150.03-440903.3,f|S|B3,8:51:50.04|-12.92,-44:9:3.35|6.7,6.37,2000 +HD 75989|CD-40 4685|PPM 313714|J085155.59-405911.7,f|S|Ap,8:51:55.59|-9.51,-40:59:11.70|5.8,6.49,2000 +Lyn 35|BD+44 1794|J085156.83+434335.7,f|S|K0,8:51:56.83|-13.87,43:43:35.77|45.6,5.15,2000 +HD 75556|BD+42 1935|HR 3511|J085210.02+420009.8,f|S|K0,8:52:10.03|-32.77,42:0:9.85|-62,5.98,2000 +HD 75523|BD+45 1649|J085211.76+451846.1,f|S|K0,8:52:11.77|-11.08,45:18:46.15|-33.3,5.96,2000 +SAO 117214|HD 75811|BD+05 2074|PPM 155117|HR 3526|J085224.18+052025.1,f|D|A5,8:52:24.18|-1.94,5:20:25.12|-7.9,6.33,2000 +SAO 199728|CD-32 5814|PPM 285778|HR 3533|J085226.13-323033.5,f|S|K2,8:52:26.14|-11.89,-32:30:33.56|-8,6.47,2000 +Cnc 53|BO CNC|HD 75716|BD+28 1659|PPM 99114|HR 3521|J085228.58+281532.9,f|D|M3,8:52:28.59|-17.97,28:15:32.97|-7,6.29,2000 +HD 75916|SD-12 2716|HR 3529|J085230.76-131358.5,f|D|K0,8:52:30.76|29.06,-13:13:58.59|0.9,6.11,2000 +Cnc Sigma-51A|V18068|HD 75698|BD+33 1770|HR 3519|J085234.62+322826.9,f|D|A8,8:52:34.62|-3.80,32:28:26.96|13.9,5.67,2000 +Cnc Rho-55|HD 75732|BD+28 1660|PPM 99117|HR 3522|J085235.81+281950.9,f|D|G8,8:52:35.81|-485.49,28:19:50.95|-234.4,5.95,2000 +HD 76161|CD-47 4460|PPM 313727|HR 3539|J085238.60-482132.7,f|S|B3,8:52:38.61|-13.46,-48:21:32.75|0.3,5.90,2000 +V4288|SAO 199731|CD-36 5125|PPM 285782|HR 3534|J085238.69-363243.2,f|D|G8,8:52:38.70|-7.95,-36:32:43.23|-2.2,6.42,2000 +SAO 236362|CD-51 3303|PPM 337338|HR 3542|J085240.81-520744.0,f|D|A0,8:52:40.81|-16.48,-52:7:44.06|14.8,6.39,2000 +V18072|SAO 199737|CD-38 4980|PPM 285785|HR 3535|J085248.01-384326.7,f|V|M0,8:52:48.02|-3.04,-38:43:26.71|18.4,5.81,2000 +SAO 236368|HD 76346|CP-56 1918|PPM 337344|HR 3549|J085303.77-563858.1,f|S|A0,8:53:3.78|-22.84,-56:38:58.15|36.5,6.01,2000 +SAO 154714|SD-16 2618|J085305.31-165708.8,f|S|K1,8:53:5.31|-52.51,-16:57:8.90|-50.7,6.42,2000 +V18066|HD 75487|BD+59 1198|PPM 31884|J085305.94+590322.1,f|V|F5,8:53:5.95|15.50,59:3:22.10|-1.2,6.34,2000 +UMa 5|HD 75486|BD+62 1027|PPM 16813|J085322.55+615744.1,f|S|F2,8:53:22.56|-10.01,61:57:44.16|22.3,5.72,2000 +HD 76538|CP-59 1174|PPM 356997|J085348.65-602114.0,f|S|B5,8:53:48.66|-10.09,-60:21:14.07|9.2,5.78,2000 +CD-47 4480|PPM 313754|HR 3551|J085350.59-473114.8,f|D|A9,8:53:50.60|-5.98,-47:31:14.80|-23.9,5.31,2000 +CD-39 4924|PPM 313755|HR 3548|J085350.75-402651.1,f|S|K0,8:53:50.76|-6.39,-40:26:51.15|3.5,6.45,2000 +CY LYN|HD 75896|BD+36 1883|HR 3528|J085355.68+353217.8,f|V|A4,8:53:55.68|-26.24,35:32:17.86|-17.9,6.15,2000 +Cnc 57A|HD 75959|BD+31 1907|HR 3532|J085414.73+303444.8,f|D|G7,8:54:14.73|39.00,30:34:44.81|-25.6,5.42,2000 +V18076|SAO 136389|HD 76151|SD-04 2490|PPM 191823|HR 3538|J085417.94-052604.0,f|V|G2,8:54:17.95|-413.18,-5:26:4.05|30.4,6.00,2000 +V0473 CAR|CP-57 1790|PPM 337375|HR 3568|J085454.02-581422.7,f|V|B5,8:54:54.03|-20.21,-58:14:22.78|16.1,6.36,2000 +HD 76728|CP-60 1243|HR 3571|J085502.82-603840.5,f|D|B8,8:55:2.83|-28.16,-60:38:40.59|42.2,3.84,2000 +HD 76653|CP-54 1925|PPM 337381|J085511.78-545756.7,f|S|F6,8:55:11.78|24.20,-54:57:56.77|-91.2,5.71,2000 +SAO 154745|HD 76376|SD-17 2691|HR 3554|J085512.43-181428.2,f|D|K2,8:55:12.43|17.81,-18:14:28.28|7.1,5.74,2000 +IY VEL|HD 76566|CD-44 4951|PPM 313785|HR 3562|J085519.20-450230.0,f|D|B3,8:55:19.20|-13.14,-45:2:30.01|8.4,6.26,2000 +X CNC|HD 76221|BD+17 1973|HR 3541|J085522.88+171352.5,f|V|C5,8:55:22.88|-3.15,17:13:52.59|6.4,6.19,2000 +Hya Zeta-16|SAO 117264|HD 76294|BD+06 2060|PPM 155196|HR 3547|J085523.62+055644.0,f|S|G9,8:55:23.63|-99.81,5:56:44.03|14.7,3.12,2000 +Hya 17B|HD 76369|SD-07 2661B|PPM 191843|HR 3552|J085529.62-075812.0,f|D|A7,8:55:29.62|7.72,-7:58:12.06|-26.3,6.07,2000 +Pyx Delta|SAO 176697|HD 76483|CD-27 6072|PPM 255378|HR 3556|J085531.57-274054.7,f|D|A3,8:55:31.57|83.02,-27:40:54.74|-100.9,4.88,2000 +Cnc Rho-58|HD 76219|BD+28 1666|J085539.67+275538.9,f|S|G8,8:55:39.68|-14.98,27:55:38.93|-33.4,5.23,2000 +V18090|HD 76478|SD-14 2707|J085554.48-152622.3,f|V|K2,8:55:54.49|4.48,-15:26:22.33|-43.4,6.49,2000 +Cnc 60|V4308|HD 76351|BD+12 1941|PPM 125925|J085555.54+113733.6,f|V|K5,8:55:55.55|-13.37,11:37:33.68|-14.4,5.44,2000 +SAO 176711|HD 76512|CD-23 7902A|PPM 255397|HR 3559|J085555.90-234905.8,f|S|A7,8:55:55.90|-46.93,-23:49:5.89|45.6,6.39,2000 +SAO 236417|CP-52 1788|PPM 337395|HR 3574|J085619.26-524324.5,f|D|B5,8:56:19.26|-16.63,-52:43:24.51|14.6,4.71,2000 +HD 76292|BD+40 2125|HR 3546|J085630.51+401205.3,f|S|F3,8:56:30.52|-81.80,40:12:5.31|-38.3,5.90,2000 +V4321|SAO 154773|HD 76579|SD-16 2639|HR 3564|J085634.12-164231.4,f|V|K0,8:56:34.13|-8.91,-16:42:31.49|-27,5.95,2000 +SAO 117287|HD 76494|BD+04 2081|PPM 155224|HR 3557|J085637.03+041411.6,f|S|G8,8:56:37.04|1.05,4:14:11.69|-1.8,6.12,2000 +UMa 6|HD 75958|BD+65 673|HR 3531|J085637.44+643613.7,f|S|G6,8:56:37.44|-32.94,64:36:13.79|-81.9,5.57,2000 +Oct Zeta|SAO 258515|HD 79837|CP-85 183|HR 3678|J085640.98-853947.3,f|S|A8,8:56:40.99|-116.27,-85:39:47.35|33.8,5.43,2000 +HD 76291|BD+46 1459|HR 3545|J085649.95+453753.9,f|S|K1,8:56:49.95|-125.03,45:37:53.93|-44.8,5.73,2000 +Cnc Sigma-59|HD 76398|BD+33 1785|PPM 74114|HR 3555|J085656.59+325437.5,f|S|A7,8:56:56.60|-53.39,32:54:37.55|-65.6,5.44,2000 +V0376 CAR|SAO 236436|CP-58 1301A|HR 3582|J085658.41-591345.6,f|D|B2,8:56:58.42|-8.44,-59:13:45.62|8.7,4.91,2000 +BD+17 1979|PPM 125946|HR 3558|J085708.27+170837.5,f|S|K1,8:57:8.28|-41.42,17:8:37.50|-33,6.16,2000 +Cnc Omicron-62|HD 76543|BD+15 1945|PPM 125947|HR 3561|J085714.95+151921.9,f|S|A5,8:57:14.95|61.19,15:19:21.94|18.5,5.23,2000 +Cnc Omicron-63|HD 76582|BD+16 1864|PPM 125951|HR 3565|J085735.20+153452.6,f|S|F0,8:57:35.20|60.97,15:34:52.61|19,5.69,2000 +HD 76629|BD+09 2093|PPM 155243|HR 3567|J085742.02+092315.9,f|S|G8,8:57:42.02|-9.18,9:23:15.95|-5.8,6.19,2000 +CD-48 4282|PPM 313826|HR 3583|J085755.55-483422.4,f|S|G8,8:57:55.56|-16.38,-48:34:22.48|9.6,5.88,2000 +Cnc 61|HD 76572|BD+30 1795|PPM 74129|HR 3563|J085758.66+301401.7,f|D|F6,8:57:58.67|46.27,30:14:1.77|27.5,6.25,2000 +Acubens|Sartan|Az Zubana|Cnc Alpha-65|V4327|HD 76756|BD+12 1948|PPM 125972|HR 3572|J085829.22+115127.7,f|D|A5,8:58:29.22|41.40,11:51:27.72|-29.2,4.26,2000 +HD 76932|SD-15 2656|HR 3578|J085843.93-160757.8,f|S|F6,8:58:43.93|244.38,-16:7:57.82|213.4,5.82,2000 +FZ VEL|CD-46 4810|PPM 313837|HR 3588|J085852.35-471404.8,f|D|F0,8:58:52.35|-84.43,-47:14:4.88|55.7,5.17,2000 +FZ CNC|BD+18 2093|PPM 125983|HR 3577|J085910.72+180805.5,f|V|M4,8:59:10.73|-49.89,18:8:5.52|-68,6.35,2000 +Talitha|UMa Iota-9A|V4329|HD 76644|BD+48 1707|HR 3569|J085912.45+480230.5,f|D|A7,8:59:12.45|-441.07,48:2:30.57|-215.2,3.14,2000 +SAO 176789|CD-28 6793|PPM 255477|HR 3585|J085915.82-284821.6,f|S|G9,8:59:15.82|-43.77,-28:48:21.66|25.2,6.24,2000 +SAO 236475|CP-58 1327|HR 3598|J085924.18-590501.3,f|D|F3,8:59:24.18|-174.64,-59:5:1.36|281.8,5.16,2000 +BD+13 2021|PPM 125986|J085926.88+130427.8,f|S|K2,8:59:26.88|-17.83,13:4:27.81|-7,6.48,2000 +Cnc Sigma-64A|V18101|HD 76813|BD+32 1821|PPM 74152|HR 3575|J085932.65+322506.8,f|D|G8,8:59:32.65|-44.32,32:25:6.81|-34.6,5.23,2000 +SAO 154815|SD-18 2536|HR 3584|J085939.91-191228.9,f|S|F6,8:59:39.91|-39.95,-19:12:28.93|-97.4,6.19,2000 +V4346|HD 77258|CD-40 4810|PPM 313858|HR 3591|J090005.40-411512.9,f|V|G8,9:0:5.41|-40.71,-41:15:12.98|54.6,4.46,2000 +IU VEL|CD-42 4875|PPM 313861|HR 3593|J090022.25-431026.3,f|V|B2,9:0:22.26|-8.86,-43:10:26.37|0.5,6.06,2000 +HD 76944|BD+38 1986|PPM 74168|J090030.80+373615.6,f|S|K5,9:0:30.80|-13.19,37:36:15.67|1,6.21,2000 +HD 76943|BD+42 1956|HR 3579|J090038.37+414658.4,f|D|F5,9:0:38.37|-487.67,41:46:58.48|-219.3,3.97,2000 +HD 77615|CP-60 1283|J090045.74-605749.7,f|S|G8,9:0:45.74|-4.44,-60:57:49.78|7.8,5.79,2000 +V18118|HD 77887|CP-68 879|J090108.51-684102.0,f|V|M1,9:1:8.51|16.19,-68:41:2.10|1,5.89,2000 +SAO 176833|HD 77361|CD-26 6647|PPM 255522|HR 3597|J090111.42-263949.3,f|S|K1,9:1:11.42|26.54,-26:39:49.38|-53.5,6.20,2000 +IZ VEL|HD 77475|CD-41 4720|PPM 313879|J090120.86-415151.3,f|V|B5,9:1:20.86|-18.77,-41:51:51.32|14.8,5.55,2000 +Cnc 66A|BD+32 1829|PPM 74179|HR 3587|J090124.12+321508.2,f|D|A2,9:1:24.13|0.25,32:15:8.27|0.7,5.95,2000 +SAO 117351|BD+06 2087|PPM 155321|J090131.38+053827.5,f|S|K1,9:1:31.39|-29.26,5:38:27.55|-3.9,6.06,2000 +BD+40 2138|PPM 74182|HR 3586|J090140.76+394248.6,f|S|A9,9:1:40.76|-41.42,39:42:48.67|-76.5,6.40,2000 +OY VEL|SAO 236518|HD 77653|CD-51 3430|J090144.55-521119.2,f|D|B9,9:1:44.56|-14.71,-52:11:19.27|13.5,5.26,2000 +Cnc 67A|V18108|BD+28 1674|PPM 99246|HR 3589|J090148.83+275409.3,f|D|A8,9:1:48.84|-64.16,27:54:9.34|-77.9,6.06,2000 +SAO 136511|HD 77353|BD+00 2449|PPM 177714|HR 3596|J090157.98-002857.6,f|S|K0,9:1:57.99|-46.65,-0:28:57.62|69.2,5.63,2000 +CD-38 5154|PPM 285965|J090206.39-392407.7,f|S|K1,9:2:6.39|-41.49,-39:24:7.79|38.4,6.25,2000 +Vol Alpha|CP-65 1065|HR 3615|J090226.79-662345.8,f|S|A2,9:2:26.80|-2.04,-66:23:45.88|-95.8,4.00,2000 +UMa Rho-8|V4344|HD 76827|BD+68 551|PPM 16874|HR 3576|J090232.69+673746.6,f|V|M3,9:2:32.69|-22.09,67:37:46.63|18.2,4.77,2000 +Cnc Nu-69|V4356|BD+25 2029|PPM 99262|HR 3595|J090244.26+242710.4,f|V|A0,9:2:44.27|-2.59,24:27:10.49|-7.1,5.46,2000 +V18112|SAO 117369|HD 77445|BD+07 2066|PPM 155348|HR 3599|J090244.81+071753.7,f|V|K5,9:2:44.82|-9.37,7:17:53.76|1.4,5.85,2000 +SAO 236542|CP-53 2072|PPM 337521|HR 3611|J090305.33-533301.3,f|S|B6,9:3:5.33|-19.34,-53:33:1.34|9.4,6.39,2000 +UMa Kappa-12|V4357|HD 77327|BD+47 1633|HR 3594|J090337.53+470923.4,f|D|A1,9:3:37.53|-37.33,47:9:23.49|-55.4,3.58,2000 +BD+54 1272|PPM 31978|HR 3592|J090400.40+541701.9,f|S|A2,9:4:0.40|-1.40,54:17:1.99|4.1,5.74,2000 +V4371|CD-46 4882|PPM 313919|J090405.78-472629.2,f|V|B3,9:4:5.78|-11.06,-47:26:29.22|5.7,6.44,2000 +CD-46 4883|HR 3614|J090409.28-470551.8,f|S|K2,9:4:9.28|-46.87,-47:5:51.85|-9.6,3.75,2000 +SAO 236578|HD 78293|CP-57 1859|PPM 337556|HR 3622|J090447.96-575109.2,f|D|A8,9:4:47.97|-25.06,-57:51:9.26|22.7,6.44,2000 +BD+32 1837|PPM 74224|J090455.08+322236.5,f|S|A8,9:4:55.08|-58.91,32:22:36.60|-63.6,6.47,2000 +SAO 256582|HD 78791|CP-72 779|HR 3643|J090508.81-723609.7,f|S|F9,9:5:8.81|-8.43,-72:36:9.74|-4.7,4.47,2000 +BD+49 1801|J090524.09+483149.1,f|S|F6,9:5:24.10|-12.02,48:31:49.13|-18.2,5.48,2000 +V0345 CAR|SAO 256583|HD 78764|CP-70 861|HR 3642|J090538.37-703218.5,f|V|B2,9:5:38.37|-4.35,-70:32:18.59|9.9,4.67,2000 +Hya Omega-18|HD 77996|BD+05 2116|HR 3613|J090558.36+050532.3,f|S|K2,9:5:58.37|-18.97,5:5:32.34|-11,4.99,2000 +HD 78632|CP-63 1093|PPM 357124|HR 3632|J090607.63-642959.4,f|S|K3,9:6:7.64|18.60,-64:29:59.46|29.6,6.36,2000 +HD 77912|BD+39 2200|PPM 74244|HR 3612|J090631.76+382707.9,f|S|G7,9:6:31.77|-28.43,38:27:7.97|-14.3,4.56,2000 +V18138|SAO 236611|HD 78548|CP-55 1957|PPM 337593|HR 3629|J090634.03-554808.6,f|V|B2,9:6:34.03|-9.53,-55:48:8.68|7,6.10,2000 +HD 77692|BD+59 1217|J090643.14+592040.2,f|S|A2,9:6:43.14|-15.22,59:20:40.27|-14.3,6.44,2000 +NS HYA|SAO 117432|HD 78196|BD+02 2145|PPM 155442|HR 3618|J090659.93+012745.6,f|V|M1,9:6:59.94|-11.10,1:27:45.70|-15.9,6.19,2000 +Cnc Kappa-76|Kappa Cancri|HD 78316|BD+11 1984|PPM 126134|HR 3623|J090744.81+104005.4,f|S|B8,9:7:44.81|-20.34,10:40:5.49|-10,5.25,2000 +Alsuhail|Al Suhail al Wazn|Vel Lambda|Lambda Velorum|HD 78647|CD-42 4990|PPM 313999|HR 3634|J090759.75-432557.3,f|D|K4,9:7:59.76|-23.20,-43:25:57.32|14.3,2.21,2000 +Cnc Tau-72|HD 78235|BD+30 1817|PPM 99332|HR 3621|J090800.05+293915.2,f|S|G8,9:8:0.05|-31.02,29:39:15.25|3.4,5.42,2000 +Pyx Kappa|V4389|HD 78541|CD-25 6895|PPM 255695|HR 3628|J090802.88-255130.7,f|D|K4,9:8:2.88|35.77,-25:51:30.73|0.5,4.61,2000 +HD 78234|BD+33 1810|PPM 74265|J090804.15+323225.4,f|S|F2,9:8:4.16|-80.17,32:32:25.44|-23.6,6.48,2000 +UMa Sigma-11|BD+67 573|J090823.49+665223.6,f|S|K5,9:8:23.50|-23.04,66:52:23.64|-40.5,5.14,2000 +Hya 19|HD 78556|SD-08 2588|J090842.17-083522.2,f|D|B9,9:8:42.18|-21.21,-8:35:22.29|-4.4,5.62,2000 +HD 78676|CD-26 6766|PPM 255717|HR 3637|J090843.53-264603.3,f|S|A4,9:8:43.53|-44.73,-26:46:3.35|11.6,6.15,2000 +SAO 154944|HD 78614|SD-15 2712|PPM 221113|J090844.52-161638.3,f|S|K0,9:8:44.52|5.33,-16:16:38.35|-67.2,6.48,2000 +Cnc 75A|HD 78418|BD+27 1715|PPM 99345|HR 3626|J090847.33+263744.8,f|D|G5,9:8:47.33|-139.18,26:37:44.80|-370.4,5.96,2000 +HD 78366|BD+34 1949|PPM 74277|HR 3625|J090851.07+335255.9,f|S|F9,9:8:51.07|-191.03,33:52:55.98|-115.4,5.95,2000 +UMa 15|BD+52 1365|HR 3619|J090852.25+513616.7,f|S|F0,9:8:52.26|-137.79,51:36:16.73|-32.5,4.46,2000 +SD-17 2765|PPM 221125|HR 3638|J090904.20-181942.7,f|S|A2,9:9:4.21|-63.22,-18:19:42.77|20.9,5.73,2000 +SAO 154953|HD 78668|SD-11 2565|PPM 221134|HR 3636|J090911.51-122127.7,f|S|G6,9:9:11.51|20.81,-12:21:27.74|0.6,5.77,2000 +Cnc Xi-77|HD 78515|BD+22 2061|PPM 99352|HR 3627|J090921.53+220243.6,f|D|G9,9:9:21.53|-0.42,22:2:43.60|-0.7,5.15,2000 +Hya 20|SAO 136622|HD 78732|SD-08 2593|HR 3641|J090935.56-084715.5,f|S|G8,9:9:35.57|-17.79,-8:47:15.53|-7.1,5.46,2000 +CD-48 4471|HR 3647|J090944.99-492527.7,f|S|A9,9:9:45.00|-0.20,-49:25:27.78|-28.7,6.48,2000 +V18144|HD 78661|BD+12 1979|HR 3635|J090946.42+113351.7,f|V|F2,9:9:46.42|-44.53,11:33:51.76|-62.3,6.48,2000 +Pyx Epsilon|HD 78922|CD-29 7194A|PPM 286124|HR 3644|J090956.41-302155.4,f|D|A4,9:9:56.41|-2.20,-30:21:55.44|-48.9,5.60,2000 +V4404|SAO 236673|CD-51 3553|PPM 337655|J090957.06-520458.2,f|V|K0,9:9:57.06|-91.72,-52:4:58.30|54.7,6.21,2000 +Cnc 79|HD 78715|BD+22 2063|PPM 99359|J091020.85+215947.0,f|D|G5,9:10:20.86|3.48,21:59:47.09|4.4,6.02,2000 +UMa Sigma-13A|HD 78154|BD+67 577|PPM 16933|HR 3616|J091023.54+670802.4,f|D|F6,9:10:23.55|12.88,67:8:2.46|-90.9,4.82,2000 +RS CNC|HD 78712|BD+31 1946|PPM 74299|HR 3639|J091038.79+305747.3,f|V|M6,9:10:38.80|-9.39,30:57:47.30|-33.1,6.07,2000 +UMa Tau-14|V18142|HD 78362|BD+64 723|PPM 16936|HR 3624|J091055.06+633049.0,f|D|F3,9:10:55.06|99.14,63:30:49.08|-61,4.64,2000 +a Car|V0357 CAR|SAO 236693|HD 79351|CP-58 1419|PPM 337673|HR 3659|J091058.08-585800.8,f|V|B2,9:10:58.09|-17.71,-58:58:0.82|14.1,3.43,2000 +GX VEL|HD 79186|CD-44 5206|HR 3654|J091104.39-445204.4,f|V|B5,9:11:4.40|-4.47,-44:52:4.45|4.3,5.02,2000 +HD 77246|BD+81 282|PPM 1528|J091112.65+804944.0,f|S|F2,9:11:12.65|-20.66,80:49:44.08|-15,6.36,2000 +V18151|HD 79447|CP-61 1201|PPM 357174|HR 3663|J091116.72-621901.1,f|V|B3,9:11:16.72|-38.05,-62:19:1.12|15.9,3.96,2000 +HD 79275|CD-46 4987|HR 3658|J091133.38-463502.0,f|S|B2,9:11:33.38|-7.22,-46:35:2.08|7.7,5.78,2000 +HD 79241|CD-38 5358|PPM 286162|HR 3656|J091140.93-391531.8,f|S|B6,9:11:40.93|-20.67,-39:15:31.84|10.7,6.01,2000 +V18147|SAO 117487|BD+06 2120|PPM 155531|HR 3649|J091155.63+052807.0,f|V|A9,9:11:55.63|-96.46,5:28:7.06|-10.1,6.35,2000 +SAO 154989|HD 79181|SD-19 2644|PPM 221184|HR 3653|J091158.73-194451.4,f|S|G9,9:11:58.74|-55.91,-19:44:51.46|46.5,5.72,2000 +SAO 256594|CP-76 574|HR 3695|J091212.36-763946.9,f|S|K1,9:12:12.37|39.27,-76:39:46.90|-44,6.13,2000 +SAO 117492|BD+04 2139|PPM 155539|HR 3651|J091212.88+035201.1,f|S|A0,9:12:12.88|-50.73,3:52:1.12|-4.7,6.14,2000 +Cnc Pi1-81A|BD+15 2003|J091217.54+145945.7,f|D|G9,9:12:17.55|-524.51,14:59:45.73|245.1,6.50,2000 +Hya 21|KW HYA|SAO 136662|HD 79193|SD-06 2845|HR 3655|J091226.04-070635.3,f|V|A3,9:12:26.04|-19.80,-7:6:35.38|21.6,6.11,2000 +KL VEL|HD 79416|CD-43 5041|HR 3661|J091230.52-433647.7,f|D|B8,9:12:30.52|-22.37,-43:36:47.74|12.3,5.56,2000 +HD 79699|CP-60 1353|PPM 357196|J091250.59-605500.3,f|D|B9,9:12:50.60|-20.42,-60:55:0.40|21.3,6.36,2000 +SAO 236723|HD 79698|CP-58 1432|HR 3673|J091255.63-592450.1,f|S|G6,9:12:55.63|5.57,-59:24:50.14|15.7,5.54,2000 +Miaplacidus|Car Beta|CP-69 1023|HR 3685|J091311.97-694301.9,f|S|A2,9:13:11.98|-157.66,-69:43:1.95|108.9,1.67,2000 +HD 79524|CD-41 4904|HR 3668|J091318.66-421623.8,f|S|K2,9:13:18.66|-14.21,-42:16:23.84|62.4,6.27,2000 +SAO 177127|HD 79456|CD-29 7239|PPM 255826|J091321.55-293951.7,f|S|K5,9:13:21.55|25.16,-29:39:51.73|21.7,6.38,2000 +V4423|HD 79523|CD-38 5376|PPM 286199|HR 3667|J091325.82-383659.2,f|V|A0,9:13:25.82|-1.52,-38:36:59.30|-14.7,6.31,2000 +HD 79621|CD-46 5010|J091334.45-472018.2,f|S|B9,9:13:34.45|-25.01,-47:20:18.27|13.4,5.91,2000 +HD 79248|BD+21 1991|HR 3657|J091337.26+211659.5,f|S|A2,9:13:37.26|-15.51,21:16:59.54|-10.9,6.47,2000 +Lyn 36|V18152|HD 79158|BD+43 1893|HR 3652|J091348.20+431304.1,f|V|B8,9:13:48.21|-28.42,43:13:4.17|-36.2,5.30,2000 +HD 79481|SD-14 2786|PPM 221238|J091403.08-144141.4,f|S|G6,9:14:3.09|-7.11,-14:41:41.43|-16.3,6.46,2000 +V4428|HD 79694|CD-43 5068|HR 3672|J091408.21-440844.9,f|V|B5,9:14:8.21|-24.22,-44:8:44.96|13,5.85,2000 +V4429|SAO 236749|HD 79846|CP-55 2035|HR 3679|J091417.99-553410.6,f|V|G8,9:14:17.99|-32.91,-55:34:10.67|29.4,5.26,2000 +UMa 16|BD+62 1058|PPM 16969|HR 3648|J091420.54+612523.9,f|S|F9,9:14:20.54|-8.68,61:25:23.94|-31.8,5.19,2000 +Hya Theta-22A|V4425|SAO 117527|HD 79469|BD+02 2167|PPM 155592|HR 3665|J091421.85+021851.4,f|D|B9,9:14:21.86|112.56,2:18:51.41|-306.1,3.89,2000 +HD 79735|CD-42 5086|PPM 314112|HR 3674|J091424.48-431338.9,f|D|B4,9:14:24.48|-25.03,-43:13:38.97|12,5.25,2000 +CD-37 5578|PPM 286229|HR 3677|J091457.16-373608.6,f|S|G0,9:14:57.17|4.04,-37:36:8.60|-12.3,5.86,2000 +Cnc Pi2-82|HD 79554|BD+15 2009|PPM 126253|HR 3669|J091513.85+145629.4,f|S|K1,9:15:13.85|-39.57,14:56:29.42|-12.3,5.35,2000 +HD 79452|BD+35 1966|PPM 74363|HR 3664|J091514.24+343800.6,f|D|G6,9:15:14.25|-157.48,34:38:0.66|47.8,5.99,2000 +CD-45 4982|PPM 314129|J091514.63-453319.7,f|D|B8,9:15:14.63|-7.88,-45:33:19.79|-2,6.28,2000 +V18164|SAO 236772|CP-57 1949|PPM 337753|HR 3691|J091517.63-582318.1,f|V|B7,9:15:17.64|-17.22,-58:23:18.16|1.1,6.00,2000 +BD+84 196|PPM 1544|HR 3581|J091521.42+841051.6,f|S|F2,9:15:21.43|32.79,84:10:51.65|10.3,6.29,2000 +V4431|HD 79752|SD-14 2793|PPM 221265|HR 3675|J091524.94-150129.6,f|V|A0,9:15:24.95|-11.01,-15:1:29.67|-17,6.32,2000 +SAO 236777|CP-57 1951|HR 3693|J091534.71-573439.8,f|S|G8,9:15:34.71|-15.36,-57:34:39.87|8.3,6.31,2000 +HD 79917|CD-38 5408|PPM 286239|HR 3682|J091536.70-383411.7,f|S|K0,9:15:36.71|-71.19,-38:34:11.79|-10.1,4.92,2000 +CD-36 5505|PPM 286241|HR 3684|J091545.07-372447.3,f|D|F5,9:15:45.08|13.82,-37:24:47.32|-7.3,4.63,2000 +UMa 17|V4427|HD 79354|BD+57 1211|J091549.78+564429.0,f|V|K4,9:15:49.78|-24.84,56:44:29.06|-29.2,5.28,2000 +HD 78935|BD+73 452|PPM 7312|HR 3645|J091552.58+725646.7,f|S|F0,9:15:52.58|-85.34,72:56:46.77|-56,5.94,2000 +V4436|CD-44 5305|PPM 314143|HR 3688|J091604.02-445355.4,f|D|A1,9:16:4.03|-5.63,-44:53:55.40|4.4,6.05,2000 +UMa 18|DD UMA|HD 79439|BD+54 1285|HR 3662|J091611.32+540118.6,f|V|A5,9:16:11.33|49.17,54:1:18.69|59.8,4.82,2000 +V4440|SAO 236787|CP-57 1961|PPM 337769|HR 3696|J091612.07-573229.3,f|V|M0,9:16:12.07|-27.77,-57:32:29.30|-14.8,4.33,2000 +V4437|CD-43 5103|PPM 314148|HR 3692|J091623.03-441556.6,f|V|K3,9:16:23.04|-2.58,-44:15:56.65|4.7,5.11,2000 +Hya 24|SAO 136728|HD 79931|SD-08 2623|HR 3683|J091641.36-084441.1,f|S|B9,9:16:41.37|-16.01,-8:44:41.13|0,5.48,2000 +Hya 23|SAO 136725|SD-05 2762|HR 3681|J091641.73-062111.3,f|D|K2,9:16:41.74|24.90,-6:21:11.32|4.3,5.23,2000 +HD 79994|SD-10 2794|J091657.04-110611.2,f|S|K0,9:16:57.05|-7.65,-11:6:11.20|-69.3,6.46,2000 +CD-38 5430|PPM 286264|HR 3694|J091657.07-392405.5,f|S|K5,9:16:57.08|-29.79,-39:24:5.54|-34.6,5.31,2000 +Aspidiske|Scutulum|Turais|Car Iota|V4444|CP-58 1465|PPM 337789|HR 3699|J091705.40-591630.8,f|V|A8,9:17:5.41|-19.01,-59:16:30.82|13.1,2.25,2000 +SD-13 2808|PPM 221313|HR 3687|J091707.72-143426.6,f|S|K5,9:17:7.72|-17.28,-14:34:26.65|-4.6,5.84,2000 +CP-68 918|PPM 357254|HR 3712|J091717.22-684122.6,f|D|F4,9:17:17.23|-109.19,-68:41:22.69|-28.5,5.39,2000 +SAO 256599|CP-74 579|J091725.19-745339.5,f|D|A1,9:17:25.20|-16.34,-74:53:39.52|31.9,5.31,2000 +CP-74 580|HR 3721|J091727.56-744404.5,f|S|A0,9:17:27.57|-29.07,-74:44:4.53|35.2,5.87,2000 +HD 79763|BD+47 1658|PPM 51151|HR 3676|J091731.17+464902.0,f|S|A1,9:17:31.18|14.17,46:49:2.02|11.9,5.95,2000 +SAO 236819|CP-53 2281|J091742.28-542941.3,f|S|K3,9:17:42.29|-22.56,-54:29:41.38|11.8,6.32,2000 +BD+12 2009|PPM 126297|HR 3689|J091751.35+113004.1,f|D|A2,9:17:51.36|-14.99,11:30:4.12|-2.2,6.40,2000 +V0478 CAR|CP-66 1002|PPM 357262|HR 3713|J091751.65-670303.1,f|V|K2,9:17:51.66|-6.55,-67:3:3.13|12.7,6.13,2000 +SAO 236824|CD-50 4001|J091805.87-510303.0,f|S|B7,9:18:5.87|-21.03,-51:3:3.09|14.8,5.26,2000 +BD+35 1971|HR 3686|J091825.90+352150.6,f|D|A8,9:18:25.91|-48.20,35:21:50.69|-19,5.94,2000 +LR VEL|SAO 236837|CD-51 3693|J091842.35-513338.3,f|V|B6,9:18:42.36|-5.22,-51:33:38.34|3.5,5.90,2000 +Lyn 38A|BD+37 1965|J091850.64+364809.3,f|D|A3,9:18:50.64|-32.67,36:48:9.35|-123.8,3.82,2000 +SAO 236851|CP-54 2186|PPM 337834|HR 3717|J091932.47-551111.2,f|S|B5,9:19:32.47|-12.59,-55:11:11.30|8.2,6.29,2000 +SD-15 2763|PPM 221365|J091933.13-155004.7,f|D|K4,9:19:33.13|36.94,-15:50:4.79|-52.9,5.80,2000 +Hya 26|SD-11 2609|PPM 221371|J091946.38-115829.4,f|D|G8,9:19:46.38|-27.88,-11:58:29.47|12.2,4.78,2000 +CD-33 5973|PPM 286326|J091947.93-340612.0,f|S|B8,9:19:47.93|-12.79,-34:6:12.02|-9.7,6.40,2000 +HD 79517|BD+74 393|PPM 7342|HR 3666|J091955.69+740059.7,f|S|G8,9:19:55.70|-40.56,74:0:59.77|-63.9,6.42,2000 +Hya 27A|SAO 136768|SD-08 2643|PPM 192278|J092029.01-093320.5,f|D|G8,9:20:29.02|-13.46,-9:33:20.50|-26.8,4.81,2000 +CD-37 5668|PPM 286341|HR 3716|J092029.67-373454.0,f|S|K3,9:20:29.67|-17.36,-37:34:54.08|-21.8,6.04,2000 +BD+51 1495|HR 3697|J092043.76+511557.8,f|D|F3,9:20:43.76|-34.73,51:15:57.84|145.4,6.15,2000 +SAO 155114|SD-14 2828|PPM 221397|HR 3714|J092055.49-153704.1,f|S|F5,9:20:55.50|70.21,-15:37:4.17|-106.8,6.32,2000 +CP-61 1242|PPM 357293|HR 3728|J092056.81-622416.6,f|S|G6,9:20:56.81|-14.31,-62:24:16.68|0.2,4.80,2000 +BD+38 2025|J092059.37+381117.7,f|D|F2,9:20:59.37|-43.50,38:11:17.74|-20,6.12,2000 +Lyn Alpha-40|V4456|BD+35 1979|PPM 74424|J092103.30+342333.2,f|V|K7,9:21:3.30|-222.80,34:23:33.22|14.8,3.13,2000 +BD+45 1708|PPM 51192|J092123.60+452212.3,f|S|K0,9:21:23.60|-9.17,45:22:12.36|-20.2,6.41,2000 +BD+33 1848|PPM 74435|J092127.18+325407.7,f|S|K3,9:21:27.18|11.21,32:54:7.74|-22.8,6.17,2000 +Pyx Theta|V18180|SAO 177322|CD-25 7114|HR 3718|J092129.59-255755.5,f|V|M0,9:21:29.59|-12.27,-25:57:55.58|-9.2,4.71,2000 +CG UMA|BD+57 1214|PPM 32111|HR 3698|J092143.28+564157.1,f|V|M4,9:21:43.29|-10.54,56:41:57.19|-11.9,5.86,2000 +SAO 236887|HD 81157|CP-54 2213|PPM 337869|HR 3732|J092150.04-553052.8,f|S|A3,9:21:50.04|-64.29,-55:30:52.87|76.3,5.62,2000 +V18181|CD-41 5023|PPM 314241|HR 3726|J092150.98-421141.4,f|V|M1,9:21:50.99|60.23,-42:11:41.50|-50.3,5.58,2000 +Vel Kappa|SAO 236891|HD 81188|CP-54 2219|PPM 337874|HR 3734|J092206.81-550038.4,f|S|B2,9:22:6.82|-10.75,-55:0:38.41|11.2,2.48,2000 +V4473|HD 81136|CD-45 5099|PPM 314247|J092223.99-460250.8,f|V|G6,9:22:23.99|-3.02,-46:2:50.80|23.7,5.73,2000 +Pyx Lambda|SAO 177374|HD 81169|CD-28 7196|HR 3733|J092312.25-285001.9,f|S|G8,9:23:12.25|-128.64,-28:50:1.94|20.6,4.72,2000 +V4477|SAO 221126|HD 81347|CD-47 4890|PPM 314264|J092325.36-481712.9,f|V|B5,9:23:25.37|-12.18,-48:17:12.99|6.2,6.27,2000 +CP-59 1374|J092327.32-601808.3,f|S|K1,9:23:27.32|-10.26,-60:18:8.33|6.6,6.28,2000 +BD+25 2088|PPM 99537|HR 3723|J092331.77+251058.2,f|S|G5,9:23:31.78|-120.13,25:10:58.22|0.6,6.42,2000 +SAO 221131|HD 81369|CD-46 5146|PPM 314271|J092339.75-465431.5,f|S|B7,9:23:39.76|-19.27,-46:54:31.50|7.5,6.21,2000 +CD-37 5721|HR 3735|J092344.86-374524.8,f|S|A1,9:23:44.86|-80.76,-37:45:24.84|26.5,6.47,2000 +V18193|HD 81471|CD-51 3767|PPM 337914|HR 3739|J092359.33-514413.4,f|V|A7,9:23:59.33|-4.74,-51:44:13.49|4.4,6.09,2000 +HD 81613|CP-61 1265|PPM 357324|HR 3742|J092405.49-613856.0,f|S|K0,9:24:5.49|-0.85,-61:38:56.05|-47.5,5.99,2000 +Cha Iota|HD 82554|CP-80 350|HR 3795|J092409.22-804712.7,f|S|F3,9:24:9.22|-138.55,-80:47:12.75|135.4,5.34,2000 +HD 81411|CD-38 5541|PPM 286423|HR 3737|J092416.28-392531.8,f|D|A7,9:24:16.29|12.98,-39:25:31.86|-26,6.06,2000 +HD 81896|CP-69 1056|J092437.08-700432.8,f|S|K1,9:24:37.08|-42.99,-70:4:32.80|0.3,6.46,2000 +Minliar|Al Minliar al Asad|Leo Kappa-1A|HD 81146|BD+26 1939|HR 3731|J092439.25+261056.3,f|D|K2,9:24:39.26|-31.09,26:10:56.37|-48.1,4.47,2000 +BD+52 1389|PPM 32145|HR 3725|J092455.68+513426.0,f|D|G2,9:24:55.68|42.42,51:34:26.03|-7.9,6.36,2000 +GK VEL|SAO 221146|HD 81575|CD-43 5262|PPM 314288|J092507.85-435835.7,f|V|M3,9:25:7.86|-48.14,-43:58:35.77|40.8,6.37,2000 +Hya 28|V18195|SAO 136832|SD-04 2616|PPM 192352|HR 3738|J092524.03-050702.6,f|V|K5,9:25:24.04|-11.65,-5:7:2.62|-6.1,5.58,2000 +CP-61 1271|PPM 357345|HR 3752|J092527.23-615701.7,f|D|A4,9:25:27.23|-115.54,-61:57:1.71|56,5.78,2000 +HD 81361|BD+17 2078|PPM 126439|HR 3736|J092532.50+163508.1,f|S|G5,9:25:32.50|-82.52,16:35:8.12|-24.3,6.29,2000 +EZ UMA|BD+64 733|HR 3722|J092544.17+635627.3,f|V|K2,9:25:44.17|-12.59,63:56:27.38|-35.6,6.23,2000 +SAO 236972|HD 81848|CP-52 2360|PPM 337956|HR 3753|J092617.95-532244.0,f|S|B6,9:26:17.96|-19.95,-53:22:44.07|11.1,5.10,2000 +SAO 136844|HD 81567|BD-00 2195|PPM 177859|HR 3741|J092622.30-012750.6,f|S|K2,9:26:22.31|-1.35,-1:27:50.68|-5.2,5.99,2000 +SAO 221167|CD-39 5507|PPM 314313|HR 3746|J092628.45-403006.1,f|S|A7,9:26:28.46|11.75,-40:30:6.14|6.1,6.19,2000 +CP-64 1037|PPM 357356|HR 3761|J092644.09-645546.9,f|S|A3,9:26:44.09|-63.31,-64:55:46.92|64.2,6.05,2000 +V4492|SAO 177461|HD 81753|CD-28 7271|PPM 256174|HR 3745|J092644.90-284715.7,f|D|B6,9:26:44.90|-19.46,-28:47:15.71|-5.6,6.12,2000 +SAO 256623|CP-71 833|HR 3777|J092706.30-713606.8,f|S|K2,9:27:6.31|-102.45,-71:36:6.82|81,5.46,2000 +SAO 177469|HD 81799|SD-21 2802|PPM 256185|HR 3749|J092718.40-222037.6,f|S|K2,9:27:18.41|171.62,-22:20:37.62|-150.2,4.73,2000 +Alphard|Kalbelaphard|Cor Hydrae|Hya Alpha-30A|V4496|SAO 136871|HD 81797|SD-08 2680|PPM 192393|HR 3748|J092735.24-083930.9,f|D|K3,9:27:35.24|-14.53,-8:39:30.97|33.3,1.99,2000 +V18204|SAO 136872|SD-05 2802|PPM 192396|J092746.78-060416.2,f|D|G2,9:27:46.78|-232.84,-6:4:16.27|-65.2,5.39,2000 +SAO 256625|HD 82458|CP-71 835|J092749.04-714651.9,f|S|F3,9:27:49.04|-76.96,-71:46:51.97|42,6.32,2000 +BD+75 377|HR 3719|J092751.59+750554.0,f|S|A5,9:27:51.59|-15.39,75:5:54.03|17,6.20,2000 +Leo Omega-2|SAO 117717|HD 81858|BD+09 2188|PPM 155874|HR 3754|J092827.40+090324.4,f|D|F9,9:28:27.40|40.44,9:3:24.40|2.7,5.42,2000 +Leo 3|SAO 117718|HD 81873|BD+08 2226|PPM 155875|HR 3755|J092829.17+081117.8,f|D|K0,9:28:29.18|-28.65,8:11:17.87|-30.8,5.71,2000 +CP-66 1018|PPM 357376|HR 3783|J092830.54-664206.7,f|S|A0,9:28:30.55|-34.47,-66:42:6.76|45.8,5.90,2000 +HD 81688|BD+46 1509|PPM 51268|HR 3743|J092839.98+453605.3,f|D|K0,9:28:39.99|-6.40,45:36:5.34|-128.2,5.41,2000 +HD 82347|CP-61 1277|PPM 357379|HR 3776|J092847.10-621623.2,f|S|K1,9:28:47.10|-65.39,-62:16:23.28|28.4,5.90,2000 +SAO 136894|BD-00 2201|PPM 177878|HR 3758|J092902.29-011524.8,f|D|F0,9:29:2.30|-62.68,-1:15:24.89|1.2,6.28,2000 +Hya Tau-31A|V18209|SAO 136895|HD 81997|SD-02 2901|HR 3759|J092908.89-024608.2,f|D|F6,9:29:8.90|100.98,-2:46:8.27|-3.2,4.92,2000 +SAO 177521|SD-20 2915|PPM 256241|HR 3763|J092912.64-204456.8,f|S|M1,9:29:12.64|-19.08,-20:44:56.86|6.9,5.64,2000 +Ant Epsilon|CD-35 5724|PPM 286515|HR 3765|J092914.71-355704.8,f|S|K3,9:29:14.72|-24.77,-35:57:4.81|5.1,4.49,2000 +HD 82165|CD-37 5817|PPM 286516|HR 3766|J092916.17-382412.7,f|S|A7,9:29:16.17|-106.26,-38:24:12.75|3,6.15,2000 +SAO 136899|BD-01 2268|PPM 177884|J092924.44-021218.6,f|S|F0,9:29:24.44|-50.36,-2:12:18.62|1.8,6.14,2000 +SD-03 2693|PPM 192436|HR 3762|J092932.41-041447.8,f|S|G6,9:29:32.42|-30.37,-4:14:47.89|-52.7,6.25,2000 +V18208|BD+56 1388|PPM 32179|HR 3747|J092947.73+554442.8,f|V|F3,9:29:47.73|-132.22,55:44:42.84|-42.2,6.50,2000 +V18219|SAO 177541|CD-22 7295|PPM 256259|HR 3767|J092949.87-232043.2,f|V|K0,9:29:49.87|-3.86,-23:20:43.23|-1.1,6.25,2000 +SAO 177546|CD-26 7117|PPM 256263|J092954.50-263522.6,f|D|K3,9:29:54.50|-22.40,-26:35:22.62|0.7,5.49,2000 +HD 82419|CD-50 4204|HR 3784|J093005.11-513101.7,f|S|B8,9:30:5.11|-18.95,-51:31:1.79|11.9,5.45,2000 +SAO 155246|HD 82232|SD-14 2867|PPM 221615|HR 3772|J093022.48-153438.4,f|S|K5,9:30:22.48|-92.33,-15:34:38.47|-65.4,5.85,2000 +V0482 CAR|HD 82536|CP-57 2090|HR 3793|J093023.42-582142.6,f|D|M2,9:30:23.42|-28.80,-58:21:42.62|26.7,5.91,2000 +Vel Psi|V4513|SAO 221234|HD 82434|CD-39 5580|HR 3786|J093042.00-402800.3,f|D|F3,9:30:42.00|-147.10,-40:28:0.37|48.7,3.59,2000 +LMi 7A|BD+34 1999|PPM 74558|HR 3764|J093043.21+333920.5,f|D|G5,9:30:43.22|-20.98,33:39:20.56|-48.2,5.86,2000 +Ant Zeta1|HD 82384|CD-31 7355A|PPM 286548|HR 3781|J093046.09-315321.1,f|D|A0,9:30:46.10|24.58,-31:53:21.20|-20.9,6.18,2000 +N VEL|HD 82668|CP-56 2270|J093113.31-570203.7,f|V|K5,9:31:13.32|-32.57,-57:2:3.76|6.1,3.16,2000 +UMa 23A|V4506|HD 81937|BD+63 845|HR 3757|J093131.70+630342.6,f|D|F0,9:31:31.71|107.57,63:3:42.70|26.9,3.65,2000 +Ant Zeta2|HD 82513|CD-31 7369|PPM 286565|HR 3789|J093132.15-315218.5,f|S|A9,9:31:32.16|-49.17,-31:52:18.59|-0.1,5.91,2000 +LMi 8|V4510|HD 82198|BD+35 2015|PPM 74571|HR 3769|J093132.41+350611.7,f|V|M1,9:31:32.41|-55.22,35:6:11.78|-97.3,5.38,2000 +HD 82858|CP-66 1025|HR 3813|J093133.02-664308.4,f|S|K1,9:31:33.02|-17.90,-66:43:8.50|7.8,6.26,2000 +HD 82514|CD-35 5751|PPM 286566|J093133.04-354253.1,f|D|K4,9:31:33.05|156.62,-35:42:53.10|-173.4,5.85,2000 +SAO 256634|CP-72 835|HR 3821|J093136.27-730451.2,f|S|K4,9:31:36.27|-25.14,-73:4:51.29|2.4,5.47,2000 +SAO 155257|HD 82428|SD-09 2856|PPM 221639|HR 3785|J093138.98-103307.2,f|S|F0,9:31:38.99|33.03,-10:33:7.25|-17.7,6.14,2000 +Alterf|Leo Lambda-4|V4514|BD+23 2107|PPM 99651|HR 3773|J093143.22+225804.6,f|V|K4,9:31:43.23|-19.34,22:58:4.69|-39,4.30,2000 +SAO 155262|HD 82477|SD-09 2858|PPM 221648|HR 3788|J093155.70-102213.2,f|S|K0,9:31:55.71|-101.96,-10:22:13.23|20.9,6.12,2000 +Leo Xi-5|V4518|HD 82395|BD+11 2053|PPM 126547|HR 3782|J093156.73+111759.3,f|V|G9,9:31:56.74|-89.87,11:17:59.38|-84,4.97,2000 +Leo 6A|SAO 117751|HD 82381|BD+10 2014|HR 3779|J093157.57+094256.7,f|D|K2,9:31:57.58|-8.87,9:42:56.76|-13,5.07,2000 +Hya Tau-32|V18227|SAO 136932|HD 82446|BD-00 2211|PPM 177895|HR 3787|J093158.92-011104.7,f|V|A3,9:31:58.93|-11.40,-1:11:4.79|-3.9,4.55,2000 +S ANT|SAO 177619|CD-28 7373|PPM 256343|HR 3798|J093218.38-283739.9,f|V|A9,9:32:18.39|-88.87,-28:37:39.97|43.8,6.43,2000 +SAO 221262|HD 82694|CD-40 5284|PPM 314417|J093219.27-403857.6,f|D|G8,9:32:19.28|9.67,-40:38:57.61|-5.7,5.36,2000 +SAO 155273|HD 82573|SD-18 2708|PPM 221661|HR 3796|J093220.40-192401.0,f|S|A5,9:32:20.41|-33.67,-19:24:1.09|9.3,5.75,2000 +SAO 117757|HD 82543|BD+02 2217|PPM 155941|HR 3794|J093241.38+015150.9,f|D|F7,9:32:41.39|-27.59,1:51:50.91|-32.7,6.12,2000 +UMa Theta-25|V4519|HD 82328|BD+52 1401|HR 3775|J093251.43+514038.2,f|D|F6,9:32:51.43|-947.06,51:40:38.28|-535.6,3.18,2000 +SAO 155281|SD-12 2926|PPM 221675|J093255.77-133100.4,f|S|K5,9:32:55.77|-8.31,-13:31:0.49|1.1,5.95,2000 +SAO 136945|HD 82638|SD-07 2836|PPM 192498|J093301.97-083019.3,f|S|K0,9:33:1.97|-43.76,-8:30:19.35|-34.6,6.12,2000 +HD 82785|CD-38 5676|PPM 286598|HR 3812|J093307.68-390744.6,f|D|F0,9:33:7.68|-41.31,-39:7:44.66|39.1,6.42,2000 +BD+46 1521|PPM 51316|J093311.24+453049.5,f|S|K0,9:33:11.25|-15.66,45:30:49.53|-39.1,6.50,2000 +SAO 177642|HD 82734|SD-20 2936|PPM 256369|J093312.45-210656.6,f|S|K0,9:33:12.46|-20.15,-21:6:56.60|15.1,5.00,2000 +SAO 136951|HD 82674|SD-06 2939|J093319.90-071124.7,f|S|K0,9:33:19.91|-62.21,-7:11:24.74|-23.1,6.25,2000 +SAO 177649|HD 82747|CD-22 7357|PPM 256374|J093326.05-225149.9,f|S|A0,9:33:26.05|-70.07,-22:51:49.98|55.3,5.91,2000 +LMi 9|HD 82522|BD+37 1998|PPM 74596|HR 3791|J093330.36+362913.0,f|S|K3,9:33:30.36|40.28,36:29:13.02|-33.2,6.18,2000 +V18232|SAO 221288|HD 82984|CD-48 4802|PPM 314443|HR 3817|J093344.53-490018.2,f|D|B4,9:33:44.54|-23.42,-49:0:18.26|8.8,5.12,2000 +Cha Zeta|Zeta Chamaleontis|SAO 258538|HD 83979|CP-80 365|J093353.37-805628.5,f|S|B5,9:33:53.38|-34.62,-80:56:28.53|14.7,5.07,2000 +V18229|BD+24 2104|PPM 99684|J093359.14+232714.1,f|V|K7,9:33:59.14|-43.62,23:27:14.11|-82.7,6.26,2000 +CD-50 4270|HR 3819|J093408.79-511518.9,f|S|B1,9:34:8.79|-8.54,-51:15:18.96|6.4,5.01,2000 +LMi 10|SU LMI|HD 82635|BD+37 2004|J093413.38+362351.2,f|V|G7,9:34:13.38|6.88,36:23:51.21|-22.9,4.55,2000 +SAO 237117|HD 83183|CP-58 1576|HR 3825|J093426.65-591347.1,f|S|B5,9:34:26.65|-11.20,-59:13:47.11|6,4.10,2000 +UMa 24|DK UMA|BD+70 565|HR 3771|J093428.85+694949.2,f|V|G5,9:34:28.86|-63.93,69:49:49.23|77.6,4.56,2000 +Hya 33|SAO 136964|SD-05 2840|PPM 192526|HR 3814|J093432.64-055453.8,f|S|K1,9:34:32.65|10.74,-5:54:53.81|-58.3,5.56,2000 +UMa 26|HD 82621|BD+52 1402|PPM 32217|HR 3799|J093449.43+520305.3,f|S|A2,9:34:49.43|-65.03,52:3:5.32|-37.3,4.48,2000 +UMa 22|V18228|HD 82189|BD+72 462|PPM 7428|HR 3768|J093453.52+721220.4,f|V|F7,9:34:53.53|72.01,72:12:20.45|-76.1,5.77,2000 +HD 82741|BD+40 2224|PPM 74618|J093503.83+393717.3,f|S|G9,9:35:3.83|-29.69,39:37:17.38|20.7,4.81,2000 +CD-35 5803|PPM 286646|HR 3823|J093511.82-354925.5,f|S|F7,9:35:11.82|-73.95,-35:49:25.50|-2.1,6.47,2000 +SAO 155323|SD-18 2728|PPM 221743|HR 3822|J093533.80-193500.2,f|D|A2,9:35:33.80|-27.84,-19:35:0.22|-35.5,6.33,2000 +LMi 11|SV LMI|HD 82885|BD+36 1979|PPM 74631|HR 3815|J093539.50+354836.4,f|D|G8,9:35:39.50|-729.99,35:48:36.48|-260.6,5.39,2000 +Leo 7A|BD+15 2077|HR 3818|J093552.88+142246.5,f|D|A1,9:35:52.88|-41.27,14:22:46.52|-2.2,6.30,2000 +HD 82327|BD+74 402|PPM 7435|HR 3774|J093606.75+741907.7,f|S|B9,9:36:6.76|-15.57,74:19:7.70|-29,6.45,2000 +IM VEL|SAO 221339|HD 83368|CD-48 4831|PPM 314497|HR 3831|J093625.40-484504.2,f|D|Ap,9:36:25.41|-8.01,-48:45:4.25|-7.7,6.23,2000 +V4545|BD+31 2011|PPM 74645|J093642.85+310942.2,f|V|M2,9:36:42.85|2.31,31:9:42.24|-43.7,5.57,2000 +SAO 237144|HD 83465|CP-52 2612|HR 3837|J093646.28-525637.2,f|S|K0,9:36:46.29|-125.10,-52:56:37.21|97,6.18,2000 +SAO 221344|HD 83446|CD-48 4836|HR 3836|J093649.54-492118.0,f|D|A5,9:36:49.54|-130.53,-49:21:18.09|42.3,4.34,2000 +SAO 177748|HD 83332|CD-24 8272|PPM 256477|J093700.20-251748.3,f|S|K5,9:37:0.21|-62.65,-25:17:48.33|36.2,5.68,2000 +Leo 8|HD 83189|BD+17 2109|PPM 126628|HR 3826|J093702.58+162616.6,f|S|K5,9:37:2.58|-16.98,16:26:16.63|-3,5.73,2000 +HD 81817|BD+81 302|PPM 1634|HR 3751|J093705.28+811934.9,f|S|K3,9:37:5.29|-16.76,81:19:34.98|-15.9,4.26,2000 +CD-31 7458|PPM 286685|HR 3833|J093709.89-321043.1,f|S|K0,9:37:9.89|31.49,-32:10:43.13|-13.9,5.62,2000 +SAO 237149|CP-53 2646|PPM 338134|J093712.65-534006.6,f|D|A2,9:37:12.65|-23.99,-53:40:6.63|-9.1,5.47,2000 +Leo 10|V4551|BD+07 2160|HR 3827|J093712.66+065008.8,f|V|K1,9:37:12.67|-70.30,6:50:8.89|11,5.01,2000 +HD 83441|CD-35 5833|PPM 286696|HR 3835|J093728.40-360545.5,f|S|K2,9:37:28.40|-25.57,-36:5:45.58|-1.4,5.95,2000 +HD 82969|BD+60 1198|PPM 17127|J093737.50+601249.2,f|S|G5,9:37:37.51|-11.77,60:12:49.26|-32.3,6.44,2000 +HD 83352|SD-02 2939|PPM 192578|J093745.93-031014.3,f|S|K0,9:37:45.94|-10.03,-3:10:14.31|-13.9,6.47,2000 +Hya 34|HD 83373|SD-08 2725|HR 3832|J093751.50-092528.0,f|S|A1,9:37:51.51|-61.71,-9:25:28.01|7.7,6.40,2000 +SAO 221355|HD 83548|CD-42 5462|PPM 314518|HR 3842|J093801.45-431127.4,f|S|G8,9:38:1.45|24.06,-43:11:27.40|-31,5.50,2000 +Lyn 42|HD 83287|BD+40 2232|PPM 51369|HR 3829|J093821.77+401423.2,f|S|F0,9:38:21.78|-14.43,40:14:23.26|10.9,5.29,2000 +SAO 117821|HD 83425|BD+05 2207|HR 3834|J093827.28+043857.4,f|S|K3,9:38:27.29|-165.50,4:38:57.45|-49.9,4.67,2000 +V4577|HD 83944|CP-60 1477|PPM 357473|HR 3856|J093920.99-611941.0,f|V|B9,9:39:21.00|-34.91,-61:19:41.02|18.6,4.52,2000 +HD 83126|BD+67 602|PPM 17141|HR 3824|J093927.87+671620.0,f|S|K5,9:39:27.87|-27.76,67:16:20.03|-38.7,5.95,2000 +V4581|CP-62 1279|PPM 357476|J093945.12-625634.5,f|V|B8,9:39:45.13|-17.74,-62:56:34.52|18.5,6.41,2000 +Hya 37|OW HYA|SAO 155377|SD-09 2898|PPM 221831|HR 3846|J093947.41-103412.9,f|V|A0,9:39:47.41|-20.50,-10:34:12.97|6.1,6.33,2000 +Hya Iota-35|V4568|HD 83618|BD-00 2231|PPM 177936|HR 3845|J093951.36-010834.1,f|V|K2,9:39:51.36|47.84,-1:8:34.12|-62.9,3.90,2000 +Hya Kappa-38|V4576|SAO 155388|HD 83754|SD-13 2917|PPM 221846|HR 3849|J094018.36-141956.2,f|V|B5,9:40:18.36|-26.30,-14:19:56.25|-19.3,5.06,2000 +SAO 155387|HD 83731|SD-10 2888|PPM 221847|HR 3848|J094020.06-104609.0,f|S|A2,9:40:20.07|-8.40,-10:46:9.06|-0.7,6.36,2000 +SAO 237221|HD 84121|CP-57 2228|HR 3863|J094042.55-575900.7,f|D|A3,9:40:42.56|-43.82,-57:59:0.77|7.6,5.31,2000 +SAO 237224|HD 84152|CP-56 2435|HR 3864|J094102.18-571534.3,f|S|K0,9:41:2.19|76.26,-57:15:34.35|-41.6,5.80,2000 +Subra|Leo Omicron-14A|BD+10 2044A|HR 3852|J094109.03+095332.3,f|D|F6,9:41:9.03|-143.63,9:53:32.31|-37.4,3.53,2000 +HD 83564|BD+56 1397|PPM 32267|J094116.73+555159.3,f|S|K1,9:41:16.73|-30.47,55:51:59.37|-34.6,6.49,2000 +V18247|HD 83953|SD-22 2684|PPM 256576|HR 3858|J094117.00-233529.4,f|D|B6,9:41:17.01|-29.14,-23:35:29.45|3,4.77,2000 +DR LEO|HD 83787|BD+31 2026|PPM 74693|J094135.11+311640.1,f|D|K6,9:41:35.12|15.51,31:16:40.14|-9.6,5.88,2000 +Leo 13|HD 83821|BD+26 1991|PPM 99781|HR 3853|J094138.48+255446.3,f|S|K5,9:41:38.48|-18.75,25:54:46.35|-32.6,6.25,2000 +V18255|SAO 237237|HD 84228|CP-54 2594|PPM 338223|HR 3868|J094147.92-551249.5,f|V|B4,9:41:47.93|-12.32,-55:12:49.54|3.3,5.98,2000 +Lyn 43|BD+40 2241|PPM 74697|HR 3851|J094200.34+394528.2,f|S|G8,9:42:0.34|-49.58,39:45:28.26|-48.3,5.61,2000 +V0486 CAR|HD 84416|CP-66 1042|PPM 357498|J094212.96-665453.3,f|D|A0,9:42:12.97|-14.53,-66:54:53.35|-0.3,6.33,2000 +SAO 177866|HD 84117|CD-23 8646|HR 3862|J094214.41-235456.0,f|S|F9,9:42:14.42|-399.16,-23:54:56.05|263.2,4.92,2000 +HD 83489|BD+69 531|PPM 17164|HR 3838|J094214.82+691415.1,f|S|G5,9:42:14.82|-66.57,69:14:15.13|-69.4,5.72,2000 +HD 84224|CD-34 6097|PPM 286794|HR 3867|J094241.35-353006.1,f|S|Ap,9:42:41.35|-20.03,-35:30:6.15|7.5,6.39,2000 +LMi 13|V18253|HD 83951|BD+35 2042|PPM 74711|HR 3857|J094242.73+350536.1,f|V|F3,9:42:42.74|-20.01,35:5:36.13|-53,6.12,2000 +HD 83869|BD+49 1868|PPM 51425|HR 3854|J094243.09+482551.6,f|S|A1,9:42:43.09|-30.56,48:25:51.60|-23.8,6.37,2000 +UMa 27|BD+72 466|PPM 7471|HR 3839|J094257.18+721509.4,f|S|K0,9:42:57.19|-26.70,72:15:9.43|-27.5,5.14,2000 +HD 83886|BD+55 1345|PPM 32291|HR 3855|J094306.96+542149.3,f|S|A2,9:43:6.97|-31.90,54:21:49.33|-33.6,6.49,2000 +IP VEL|CD-50 4420|PPM 338247|HR 3872|J094327.58-511341.2,f|D|B6,9:43:27.59|-16.06,-51:13:41.29|8.4,6.16,2000 +Leo 15|BD+30 1901|HR 3861|J094333.26+295828.1,f|S|A2,9:43:33.26|-16.89,29:58:28.10|-103.5,5.64,2000 +SAO 237268|HD 84461|CP-53 2788|PPM 338252|HR 3875|J094342.23-535328.6,f|S|A0,9:43:42.23|-67.62,-53:53:28.62|32.7,5.55,2000 +Leo Psi-16|V4594|HD 84194|BD+14 2136|PPM 126738|HR 3866|J094343.90+140118.0,f|D|M2,9:43:43.90|5.24,14:1:18.09|-6.1,5.37,2000 +Ant Theta|HD 84367|CD-27 6881|PPM 256646|HR 3871|J094412.09-274610.0,f|D|A8,9:44:12.10|-53.09,-27:46:10.06|37.8,4.79,2000 +HD 84252|BD+19 2251|PPM 126749|HR 3869|J094430.00+185148.5,f|D|K0,9:44:30.00|-0.14,18:51:48.57|-55.2,6.48,2000 +HD 83962|BD+65 731|PPM 17177|HR 3859|J094436.54+645902.8,f|S|F3,9:44:36.55|-54.99,64:59:2.81|19.2,6.18,2000 +l CAR|CP-61 1333|PPM 357533|HR 3884|J094514.81-623028.4,f|V|G5,9:45:14.81|-12.88,-62:30:28.45|8.3,3.69,2000 +V18265|SAO 177939|HD 84567|CD-29 7758|PPM 286847|HR 3878|J094522.00-301209.9,f|V|B0,9:45:22.01|-11.54,-30:12:9.90|4.8,6.45,2000 +BD+78 317|PPM 7487|HR 3843|J094530.98+780804.9,f|S|K2,9:45:30.99|8.97,78:8:4.95|-1.6,6.24,2000 +V0487 CAR|SAO 237314|CP-56 2499|PPM 338299|HR 3883|J094540.61-571109.7,f|V|B8,9:45:40.62|-18.70,-57:11:9.76|7.8,6.47,2000 +Algenubi|Ras Elased Australis|Al Asad al Janubiyyah|Al Ashfar a|Leo Epsilon-17|V4613|HD 84441|BD+24 2129|PPM 99836|HR 3873|J094551.07+234627.3,f|V|G1,9:45:51.07|-46.12,23:46:27.32|-9.6,2.97,2000 +SAO 237321|CP-58 1640|HR 3887|J094555.70-584737.7,f|S|F5,9:45:55.71|-102.20,-58:47:37.78|70.9,6.22,2000 +V18266|SAO 117898|HD 84542|BD+07 2181|PPM 156172|HR 3876|J094610.04+064230.8,f|V|M1,9:46:10.04|5.66,6:42:30.80|-24,5.80,2000 +Cha Nu|SAO 256658|HD 85396|CP-76 598|J094620.63-764634.0,f|S|G8,9:46:20.63|83.52,-76:46:34.03|-57,5.44,2000 +Leo 18|HD 84561|BD+12 2090|PPM 126772|HR 3877|J094623.32+114836.1,f|S|K5,9:46:23.33|-15.42,11:48:36.16|17.3,5.66,2000 +BD+02 2246|PPM 156173|HR 3879|J094623.61+014708.1,f|S|F4,9:46:23.61|-54.72,1:47:8.11|-41.2,5.65,2000 +V18268|SAO 221484|HD 84816|CD-44 5846|PPM 314664|HR 3886|J094630.37-444518.2,f|V|B2,9:46:30.37|-13.10,-44:45:18.22|-0.4,5.56,2000 +CS UMA|HD 84335|BD+57 1231|PPM 32318|J094631.66+570741.0,f|V|M3,9:46:31.66|0.16,57:7:41.05|33.1,5.13,2000 +Car Upsilon|HD 85123|CP-64 1084A|J094706.12-650419.2,f|D|A6,9:47:6.12|-11.57,-65:4:19.22|5,3.01,2000 +Car Upsilon|HD 85124|CP-64 1084B|PPM 357553|HR 3891|J094706.75-650422.3,f|D|B7,9:47:6.75|-11.57,-65:4:22.31|5,5.99,2000 +HD 83727|BD+79 319|PPM 7493|HR 3847|J094718.05+790812.0,f|S|F0,9:47:18.06|-27.70,79:8:12.01|-25.9,6.09,2000 +Leo 19|HD 84722|BD+12 2095|J094725.96+113405.3,f|D|A7,9:47:25.97|-49.96,11:34:5.40|-4.8,6.44,2000 +HD 84737|BD+46 1551|PPM 51497|HR 3881|J094835.37+460115.6,f|S|G0,9:48:35.37|222.07,46:1:15.63|-92.6,5.09,2000 +CP-55 2548|HR 3895|J094839.99-562442.8,f|S|K0,9:48:40.00|-58.42,-56:24:42.80|14.8,6.05,2000 +CD-36 5955|PPM 286939|HR 3892|J094928.08-371112.3,f|S|K1,9:49:28.08|-88.91,-37:11:12.36|8.1,5.95,2000 +Leo 20|DG LEO|BD+21 2113|PPM 99888|HR 3889|J094950.09+211045.9,f|D|A7,9:49:50.10|-44.48,21:10:45.94|-18.5,6.08,2000 +HD 85296|CD-35 5961|PPM 286949|HR 3897|J094951.34-361606.4,f|S|K0,9:49:51.35|-18.02,-36:16:6.47|4.3,6.36,2000 +SAO 221523|HD 85355|CD-45 5470|PPM 314718|HR 3898|J094957.14-454357.8,f|D|B7,9:49:57.14|-24.92,-45:43:57.85|10.1,5.10,2000 +HD 84812|BD+66 637|PPM 17214|HR 3885|J095023.58+653535.6,f|S|A9,9:50:23.58|-58.51,65:35:35.62|-28.4,6.28,2000 +Sex 4|SAO 117937|HD 85217|BD+05 2240|HR 3893|J095030.08+042037.1,f|S|F7,9:50:30.08|-150.17,4:20:37.14|-50.9,6.25,2000 +V18286|SAO 221538|HD 85483|CD-46 5558|PPM 314734|J095041.93-465602.1,f|V|K0,9:50:41.94|-38.82,-46:56:2.12|32.7,5.72,2000 +HD 85656|CP-62 1335|HR 3914|J095055.58-624442.4,f|S|K1,9:50:55.58|-12.16,-62:44:42.42|8.5,5.55,2000 +UMa Upsilon-29|Upsilon Ursae Majoris|HD 84999|BD+59 1268|PPM 32349|HR 3888|J095059.35+590219.4,f|D|F2,9:50:59.36|-294.48,59:2:19.45|-151.8,3.78,2000 +SAO 256666|CP-79 457|J095100.77-800339.7,f|S|B8,9:51:0.78|-3.18,-80:3:39.80|15.3,6.50,2000 +Leo 23|V18283|HD 85268|BD+13 2164|PPM 126856|HR 3896|J095101.98+130358.4,f|V|M0,9:51:1.98|19.73,13:3:58.46|-7.4,6.44,2000 +SAO 237418|HD 85655|CP-58 1673|PPM 338395|HR 3913|J095112.06-592532.7,f|S|K2,9:51:12.07|28.38,-59:25:32.79|-41.6,5.78,2000 +Sex 6|SAO 137183|HD 85364|SD-03 2794|PPM 192823|HR 3899|J095114.03-041436.0,f|S|A8,9:51:14.03|13.76,-4:14:36.06|-28.3,6.03,2000 +SAO 221547|HD 85563|CD-45 5499|PPM 314745|J095119.72-461137.9,f|S|K2,9:51:19.72|-49.63,-46:11:37.94|33.8,5.62,2000 +SAO 137185|SD-05 2923|PPM 192825|J095121.61-061054.9,f|S|F8,9:51:21.62|-126.91,-6:10:54.94|53.7,6.43,2000 +Hya Upsilon-39|SAO 155542|HD 85444|SD-14 2963|PPM 222116|J095128.69-145047.7,f|S|G6,9:51:28.69|18.70,-14:50:47.77|-21.9,4.11,2000 +V4658|SAO 221553|HD 85622|CD-45 5508|PPM 314752|HR 3912|J095140.66-463251.4,f|V|G5,9:51:40.67|-24.45,-46:32:51.43|9.8,4.58,2000 +V18287|SAO 155545|HD 85461|SD-10 2940|J095141.21-112025.8,f|V|M5,9:51:41.22|31.62,-11:20:25.82|-39.8,6.50,2000 +Leo 22|HD 85376|BD+25 2169|PPM 99911|J095153.03+242343.3,f|S|A5,9:51:53.04|21.04,24:23:43.33|-174.6,5.29,2000 +SAO 155553|HD 85519|SD-15 2920|PPM 222129|J095159.53-163205.1,f|S|K0,9:51:59.53|13.23,-16:32:5.19|-67.5,6.08,2000 +UMa Phi-30|HD 85235|BD+54 1331|PPM 32355|HR 3894|J095206.37+540351.6,f|D|A3,9:52:6.37|8.63,54:3:51.65|15.7,4.56,2000 +BD+00 2573|PPM 156274|J095211.98+000432.1,f|S|G9,9:52:11.98|-25.95,0:4:32.20|-25.4,6.33,2000 +Sex 7|V4656|SAO 117959|BD+03 2280|PPM 156275|J095212.16+022714.8,f|V|A0,9:52:12.16|-185.08,2:27:14.87|95.4,6.02,2000 +Sex Gamma-8A|SAO 137199|HD 85558|SD-07 2909|PPM 192845|J095230.43-080618.1,f|D|A1,9:52:30.43|-61.78,-8:6:18.11|-47.2,5.08,2000 +Rasalas|Alshemali|Ras Elased Borealis|Al Ashfar b|Leo Mu-24|BD+26 2019|PPM 99922|J095245.81+260025.0,f|S|K2,9:52:45.82|-216.24,26:0:25.02|-54.9,3.88,2000 +HD 85725|CD-26 7505|PPM 256884|HR 3916|J095258.02-271955.8,f|D|G1,9:52:58.03|-278.10,-27:19:55.82|95.4,6.29,2000 +QZ VEL|SAO 237448|HD 85871|CP-54 2816|PPM 338432|J095300.09-552223.5,f|V|B1,9:53:0.09|-12.61,-55:22:23.55|3.7,6.50,2000 +V18292|SAO 117975|BD+06 2224|HR 3915|J095342.92+055730.8,f|V|M2,9:53:42.93|-2.98,5:57:30.86|1.7,5.94,2000 +V0335 VEL|SAO 237464|HD 85953|CD-50 4622|PPM 338448|HR 3924|J095350.09-510848.1,f|V|B2,9:53:50.10|-13.64,-51:8:48.17|0.6,5.94,2000 +SAO 178158|HD 85859|CD-25 7585|PPM 256918|HR 3919|J095412.31-255556.4,f|S|K2,9:54:12.32|-184.00,-25:55:56.44|56.6,4.87,2000 +SAO 221592|CD-44 5987A|PPM 314798|HR 3925|J095417.65-451700.6,f|D|B3,9:54:17.65|-17.20,-45:17:0.66|4.4,5.80,2000 +SAO 178164|SD-21 2935|PPM 256925|HR 3921|J095431.81-222914.8,f|S|A2,9:54:31.81|-26.06,-22:29:14.84|-1.3,6.23,2000 +SAO 237483|CD-49 4801|HR 3927|J095451.23-501438.2,f|S|A0,9:54:51.23|-37.03,-50:14:38.25|7.3,5.72,2000 +V18300|SAO 155588|HD 85951|SD-18 2810|PPM 222192|HR 3923|J095452.20-190033.6,f|V|M1,9:54:52.21|-46.09,-19:0:33.70|-37,4.93,2000 +HD 85583|BD+61 1151|PPM 17244|HR 3911|J095503.35+610658.0,f|D|K0,9:55:3.36|7.83,61:6:58.04|-3.2,6.30,2000 +UMa 31|SY UMA|HD 85795|BD+50 1698|PPM 51579|HR 3917|J095543.00+494911.4,f|V|A3,9:55:43.00|-3.48,49:49:11.43|19.7,5.28,2000 +V18305|SAO 221617|HD 86211|CD-40 5626|PPM 314831|J095605.33-404928.3,f|V|M1,9:56:5.33|-23.27,-40:49:28.36|-17.2,6.41,2000 +SAO 256672|CP-70 953|HR 3944|J095609.73-712321.4,f|S|B9,9:56:9.73|-15.37,-71:23:21.48|3.8,6.34,2000 +SAO 237514|HD 86352|CD-50 4662|PPM 338498|HR 3935|J095621.89-512010.1,f|S|B2,9:56:21.89|-7.59,-51:20:10.17|-1.7,6.38,2000 +BD+09 2262|PPM 156338|HR 3926|J095625.97+085559.3,f|S|K5,9:56:25.98|-84.76,8:55:59.37|20.4,5.85,2000 +HD 86267|CD-32 6895|HR 3932|J095635.49-332506.5,f|S|K1,9:56:35.49|34.30,-33:25:6.59|22,5.83,2000 +SAO 178214|HD 86266|CD-25 7622|HR 3931|J095646.84-263258.8,f|D|A4,9:56:46.84|-77.42,-26:32:58.82|29.7,6.28,2000 +Vel Phi|SAO 237522|CP-53 3075|J095651.74-543404.0,f|D|B5,9:56:51.74|-13.13,-54:34:4.05|2.8,3.54,2000 +SAO 178216|CD-26 7551|PPM 256982|HR 3933|J095654.09-272830.5,f|S|A4,9:56:54.09|-73.06,-27:28:30.55|23.8,6.31,2000 +V0492 CAR|HD 86659|CP-68 1011|PPM 357662|HR 3949|J095659.80-690606.4,f|V|B3,9:56:59.81|-17.87,-69:6:6.49|8.8,6.19,2000 +IV VEL|SAO 237526|HD 86466|CP-52 2980|PPM 338511|HR 3941|J095710.94-523819.6,f|V|B3,9:57:10.94|-8.83,-52:38:19.62|4.1,6.12,2000 +V18304|HD 85945|BD+58 1224|PPM 32387|HR 3922|J095713.61+572505.5,f|V|G6,9:57:13.61|35.78,57:25:5.50|-63.8,5.97,2000 +LMi 19|HD 86146|BD+41 2033|PPM 51593|HR 3928|J095741.05+410320.2,f|S|F6,9:57:41.05|-116.96,41:3:20.28|-26.3,5.11,2000 +SAO 221644|HD 86523|CD-47 5399|PPM 314866|HR 3943|J095742.59-482450.6,f|D|B3,9:57:42.60|-9.36,-48:24:50.67|-1.8,6.07,2000 +SAO 137256|HD 86341|BD-01 2329|J095743.90-015630.3,f|D|G8,9:57:43.90|8.84,-1:56:30.30|8.5,6.45,2000 +HD 86166|BD+46 1566|PPM 51596|HR 3929|J095756.84+452451.4,f|S|K0,9:57:56.85|6.42,45:24:51.47|-34.1,6.33,2000 +HD 86369|BD+09 2269|PPM 156374|HR 3938|J095807.63+081850.3,f|S|K5,9:58:7.63|17.66,8:18:50.32|-27,6.04,2000 +Leo Nu-27|BD+13 2183|HR 3937|J095813.37+122641.2,f|S|B9,9:58:13.38|-25.34,12:26:41.28|-16.1,5.26,2000 +HD 85841|BD+73 478|PPM 7546|HR 3918|J095822.77+725246.2,f|S|K5,9:58:22.77|-69.90,72:52:46.23|-36.5,5.84,2000 +V18312|HD 86358|BD+28 1824|PPM 99996|HR 3936|J095826.03+274532.3,f|V|F3,9:58:26.04|-116.54,27:45:32.40|-28.4,6.48,2000 +Ant Eta|HD 86629|CD-35 6050|PPM 287133|HR 3947|J095852.27-355327.5,f|D|F1,9:58:52.28|-89.56,-35:53:27.50|-16.3,5.23,2000 +OY HYA|SAO 178271|HD 86612|CD-23 8898|HR 3946|J095906.30-235702.7,f|V|B4,9:59:6.30|-23.17,-23:57:2.77|5.3,6.16,2000 +HD 86513|BD+30 1946|HR 3942|J095936.21+293842.8,f|S|G5,9:59:36.21|-94.38,29:38:42.84|-37.8,5.75,2000 +HD 86378|BD+57 1242|PPM 32417|HR 3939|J095951.68+564842.5,f|S|K5,9:59:51.69|-31.53,56:48:42.51|-28,5.49,2000 +Leo Pi-29|V4699|HD 86663|BD+08 2301|J100012.80+080239.2,f|V|M2,10:0:12.81|-30.00,8:2:39.20|-22.1,4.67,2000 +Cha Mu1|SAO 258554|HD 87971|CP-81 399|PPM 377132|HR 3983|J100043.78-821252.8,f|S|A0,10:0:43.79|-26.98,-82:12:52.81|31.1,5.52,2000 +LMi 20|HD 86728|BD+32 1964|HR 3951|J100100.65+315525.2,f|S|G3,10:1:0.66|-529.24,31:55:25.22|-428.9,5.38,2000 +HD 87122|CP-55 2794|PPM 338584|J100111.98-560547.6,f|D|B8,10:1:11.99|-27.44,-56:5:47.63|1,6.42,2000 +V18320|SAO 237612|HD 87152|CP-52 3087|PPM 338595|HR 3955|J100140.70-532150.8,f|V|B2,10:1:40.71|-16.56,-53:21:50.81|0.5,6.20,2000 +SAO 237621|HD 87238|CP-56 2770|HR 3957|J100158.04-572059.2,f|S|K1,10:1:58.05|-38.36,-57:20:59.24|22.8,6.20,2000 +HD 87283|CP-59 1695|PPM 357713|J100200.09-602515.2,f|S|A9,10:2:0.10|-7.40,-60:25:15.21|3.9,5.94,2000 +EO LEO|BD+22 2164|HR 3952|J100248.95+215657.3,f|V|B2,10:2:48.95|-13.77,21:56:57.33|-5.3,5.67,2000 +V4720|HD 87438|CP-61 1431|PPM 357723|HR 3967|J100249.41-620924.0,f|V|K3,10:2:49.41|-8.76,-62:9:24.00|3.9,6.40,2000 +V18326|HD 87436|CP-59 1752|PPM 357724|HR 3966|J100259.94-601043.2,f|V|A6,10:2:59.94|-6.86,-60:10:43.23|4.6,6.19,2000 +SAO 221728|HD 87363|CD-46 5759|PPM 314961|HR 3964|J100320.58-463810.2,f|S|A0,10:3:20.58|-28.43,-46:38:10.29|-10.8,6.11,2000 +HD 87543|CP-61 1441|PPM 357731|HR 3971|J100334.11-615302.5,f|D|B7,10:3:34.12|-17.74,-61:53:2.54|4.2,6.21,2000 +V18325|SAO 137326|HD 87262|SD-08 2836|HR 3959|J100340.98-093425.6,f|V|K0,10:3:40.99|-6.36,-9:34:25.65|-9.2,6.12,2000 +HD 87344|SD-17 3047|PPM 222396|HR 3963|J100402.81-180605.0,f|D|A0,10:4:2.81|-27.23,-18:6:5.06|3.7,6.24,2000 +Sex 13|BD+03 2311|PPM 156475|HR 3961|J100408.43+031203.7,f|S|F4,10:4:8.43|-73.68,3:12:3.80|-93.8,6.44,2000 +SAO 178367|HD 87427|CD-23 8973|PPM 257152|HR 3965|J100420.94-241707.9,f|S|A8,10:4:20.94|-117.31,-24:17:7.92|25.3,5.71,2000 +HD 87477|CD-39 6100|PPM 287242|HR 3968|J100423.36-395833.0,f|S|K1,10:4:23.36|-37.36,-39:58:33.09|0.5,6.41,2000 +HD 87141|BD+54 1348|PPM 32459|HR 3954|J100436.32+535330.1,f|S|F5,10:4:36.32|-22.54,53:53:30.18|-3.8,5.72,2000 +V4731|SAO 237675|HD 87652|CD-50 4791|PPM 338655|J100501.84-511849.0,f|D|B8,10:5:1.84|-33.75,-51:18:49.09|10.3,6.23,2000 +Hya Upsilon-40|V4725|SAO 155713|SD-12 3073|J100507.47-130352.6,f|V|B9,10:5:7.47|-37.55,-13:3:52.65|19.9,4.60,2000 +HD 87243|BD+53 1384|PPM 32471|HR 3958|J100510.38+522216.6,f|S|A5,10:5:10.38|-14.01,52:22:16.69|-4.9,6.31,2000 +CD-35 6130|PPM 287259|HR 3972|J100515.27-362303.7,f|S|K1,10:5:15.28|-7.00,-36:23:3.77|-12.2,6.27,2000 +BD+16 2077|HR 3969|J100540.91+154527.0,f|S|F2,10:5:40.92|-77.38,15:45:27.02|-7.2,6.37,2000 +R VEL|HD 87816|CD-51 4471|PPM 338668|HR 3978|J100607.21-521116.5,f|V|K1,10:6:7.21|-55.36,-52:11:16.58|16.2,6.50,2000 +SAO 221773|HD 87783|CD-46 5806|HR 3976|J100611.21-472211.9,f|D|K1,10:6:11.21|-10.87,-47:22:11.98|-53.5,5.09,2000 +Sex 14|SAO 118111|HD 87682|BD+06 2259|PPM 156524|HR 3973|J100647.42+053641.3,f|S|K1,10:6:47.42|-32.99,5:36:41.38|-16.3,6.19,2000 +SAO 155739|SD-16 2974|PPM 222476|HR 3977|J100709.49-170830.2,f|S|K5,10:7:9.50|15.48,-17:8:30.24|-56.2,5.58,2000 +Leo Eta-30|V4738|HD 87737|BD+17 2171|PPM 127121|HR 3975|J100719.95+164545.5,f|D|A0,10:7:19.95|-2.01,16:45:45.59|-0.5,3.52,2000 +LMi 21|V4736|HD 87696|BD+35 2110|HR 3974|J100725.76+351440.8,f|V|A7,10:7:25.76|50.96,35:14:40.90|0.6,4.49,2000 +SAO 221792|CD-47 5561|J100735.71-481538.9,f|S|B3,10:7:35.72|-15.98,-48:15:38.95|3.9,6.39,2000 +Leo 31|HD 87837|BD+10 2112|PPM 156539|J100754.27+095951.0,f|D|K3,10:7:54.27|-81.10,9:59:51.03|-64.2,4.37,2000 +Sex Alpha-15|SAO 137366|HD 87887|BD+00 2615|HR 3981|J100756.28-002217.8,f|S|A0,10:7:56.28|-26.25,-0:22:17.89|-3.7,4.48,2000 +V0495 CAR|HD 88158|CP-61 1479|PPM 357781|J100756.62-621317.0,f|V|Ap,10:7:56.63|-5.94,-62:13:17.10|7.8,6.45,2000 +CD-36 6156|PPM 287318|HR 3984|J100801.64-372000.4,f|S|K0,10:8:1.65|-27.43,-37:20:0.40|7,6.33,2000 +HD 87822|BD+32 1982|HR 3979|J100815.88+313614.5,f|D|F4,10:8:15.89|-79.97,31:36:14.59|-91.8,6.23,2000 +Regulus|Rex|Al Kalb Al Kalb|Kabeleced|Cor Leonis|Leo Alpha-32A|V4750|BD+12 2149|HR 3982|J100822.31+115801.9,f|D|B7,10:8:22.31|-249.46,11:58:1.95|4.9,1.41,2000 +V18323|HD 86321|BD+84 225|PPM 1724|HR 3934|J100834.39+835506.1,f|V|K0,10:8:34.39|-1.21,83:55:6.14|6.3,6.32,2000 +SAO 155763|SD-14 3036|PPM 222519|HR 3986|J100835.42-153642.9,f|S|A0,10:8:35.42|-37.42,-15:36:42.98|3.1,6.25,2000 +HD 88323|CP-65 1248|HR 3995|J100842.74-654855.5,f|D|K0,10:8:42.75|-62.86,-65:48:55.58|39,5.26,2000 +SAO 237736|CD-51 4507|PPM 338714|J100856.23-514840.5,f|S|B3,10:8:56.24|-14.56,-51:48:40.54|0.5,4.86,2000 +S CAR|HD 88366|CP-60 1701|PPM 357799|HR 3999|J100921.89-613256.4,f|V|M2,10:9:21.89|-93.69,-61:32:56.44|77.3,6.31,2000 +HD 88473|CP-68 1034|J100930.16-684058.0,f|D|A0,10:9:30.17|-19.74,-68:40:58.00|22.1,5.83,2000 +HD 88218|CD-35 6194|PPM 287351|HR 3992|J100931.76-355124.3,f|D|F8,10:9:31.77|-442.89,-35:51:24.37|16.3,6.16,2000 +SAO 155777|HD 88182|SD-11 2818|PPM 222544|HR 3988|J100956.48-120543.0,f|S|A5,10:9:56.49|-1.76,-12:5:43.10|-17.8,6.23,2000 +HD 88215|SD-12 3101|PPM 222549|HR 3991|J101005.88-124857.3,f|S|F5,10:10:5.89|-122.28,-12:48:57.32|-109.2,5.30,2000 +Sex 17A|SAO 137385|HD 88195|SD-07 2972|PPM 193145|HR 3989|J101007.54-082429.4,f|D|A1,10:10:7.54|-28.49,-8:24:29.41|-2.9,5.90,2000 +Hya Lambda-41A|SAO 155785|HD 88284|SD-11 2820|PPM 222562|HR 3994|J101035.27-122114.6,f|D|K0,10:10:35.28|-200.30,-12:21:14.70|-100.3,3.61,2000 +SAO 221832|HD 88399|CD-41 5658|J101037.71-414254.8,f|S|K2,10:10:37.72|28.10,-41:42:54.89|-129.1,5.98,2000 +Sex 18|V4767|SAO 137395|HD 88333|SD-07 2977|PPM 193163|HR 3996|J101055.86-082506.4,f|V|K2,10:10:55.86|-0.15,-8:25:6.46|-45.4,5.62,2000 +V18344|HD 88161|BD+41 2063|HR 3987|J101058.96+403941.7,f|V|K5,10:10:58.97|-8.99,40:39:41.79|2.4,6.32,2000 +V4764|HD 88231|BD+38 2110|HR 3993|J101112.77+372406.8,f|V|K5,10:11:12.78|-20.38,37:24:6.84|-29,5.84,2000 +HD 88372|SD-06 3096|PPM 193171|J101117.76-071859.8,f|S|A2,10:11:17.77|13.24,-7:18:59.85|-13.3,6.24,2000 +V0368 CAR|SAO 237773|HD 88647|CP-58 1979|PPM 338751|J101135.46-584939.9,f|V|M3,10:11:35.46|-24.61,-58:49:39.94|26.8,6.11,2000 +Leo 34|HD 88355|BD+14 2217|PPM 127187|HR 3998|J101138.21+132118.4,f|D|F7,10:11:38.21|38.82,13:21:18.40|-37.1,6.43,2000 +QY CAR|SAO 237776|HD 88661|CP-57 2781|PPM 338753|J101146.46-580337.9,f|V|B2,10:11:46.46|-10.71,-58:3:37.96|6.6,5.77,2000 +SAO 178526|HD 88522|CD-27 7266|PPM 257335|J101202.85-283621.4,f|D|A1,10:12:2.85|-39.90,-28:36:21.41|-0.3,6.28,2000 +V18349|SAO 237784|HD 88693|CD-51 4560|PPM 338764|J101222.92-520947.6,f|V|K2,10:12:22.92|-52.72,-52:9:47.67|45.2,6.16,2000 +HD 88595|SD-18 2870|PPM 222622|J101237.96-190910.9,f|S|F6,10:12:37.96|-219.06,-19:9:10.95|-95.8,6.46,2000 +Sex 19|SAO 118164|HD 88547|BD+05 2301|PPM 156613|J101248.36+043652.8,f|S|K5,10:12:48.36|-48.74,4:36:52.85|-4.4,5.78,2000 +SAO 237799|HD 88825|CP-59 1974|PPM 338775|J101301.14-595505.1,f|S|B4,10:13:1.15|-15.34,-59:55:5.12|2.6,6.10,2000 +SAO 178544|HD 88699|CD-26 7752|PPM 257358|J101319.44-270144.0,f|S|A9,10:13:19.45|-55.58,-27:1:44.01|35.8,6.22,2000 +CP-61 1517|PPM 357853|J101321.18-613931.7,f|S|B2,10:13:21.18|-15.81,-61:39:31.79|2.7,6.42,2000 +HD 88862|CP-55 3066|PPM 338787|J101322.28-563512.1,f|S|K2,10:13:22.29|-26.43,-56:35:12.11|0.6,6.47,2000 +LW VEL|HD 88824|CD-50 4924|PPM 338788|J101322.84-511358.6,f|V|A7,10:13:22.84|-39.73,-51:13:58.70|-13.6,5.28,2000 +HD 88742|CD-32 7158|PPM 287445|J101324.73-330154.2,f|S|G1,10:13:24.73|-369.85,-33:1:54.20|64.4,6.37,2000 +V4788|HD 88842|CD-51 4578|J101327.99-514520.8,f|D|A3,10:13:27.99|-53.30,-51:45:20.84|7,5.79,2000 +HD 88981|CP-65 1273|PPM 357856|J101330.63-662222.1,f|S|A3,10:13:30.63|-34.33,-66:22:22.12|11.5,5.15,2000 +Car Omega|CP-69 1178|J101344.21-700216.4,f|S|B8,10:13:44.22|-35.74,-70:2:16.45|7.6,3.30,2000 +SAO 221877|CD-39 6222|PPM 315142|J101345.92-402045.8,f|D|K1,10:13:45.92|-73.97,-40:20:45.80|8.5,5.91,2000 +V18354|HD 88639|BD+27 1862|J101349.70+270808.9,f|V|G3,10:13:49.71|-28.97,27:8:8.95|-3.3,6.05,2000 +SAO 221883|HD 88836|CD-39 6225|PPM 315148|J101356.55-401838.7,f|D|G8,10:13:56.56|-30.43,-40:18:38.79|-9.1,6.33,2000 +V18362|SAO 178558|CD-23 9119|PPM 257378|J101408.96-234850.2,f|V|M5,10:14:8.96|-24.43,-23:48:50.21|10.9,6.37,2000 +HD 88737|BD+21 2165|J101429.74+211005.0,f|S|F9,10:14:29.75|-143.24,21:10:5.01|-72.1,6.03,2000 +SAO 221895|HD 88955|CD-41 5713|PPM 315161|J101444.15-420718.9,f|S|A2,10:14:44.16|-150.64,-42:7:18.99|49.8,3.84,2000 +LMi 22|HD 88786|BD+32 2005|J101506.33+312805.0,f|S|G8,10:15:6.34|-36.46,31:28:5.04|-3.7,6.47,2000 +U UMA|HD 88651|BD+60 1246|J101507.66+595907.9,f|V|M0,10:15:7.67|14.26,59:59:7.94|5.1,6.19,2000 +V18366|SAO 237834|CP-54 3356|PPM 338814|J101516.63-545827.1,f|V|B2,10:15:16.64|-13.52,-54:58:27.15|3.2,6.15,2000 +CD-35 6260|PPM 287476|J101520.87-363103.7,f|S|K0,10:15:20.87|-28.57,-36:31:3.78|7.5,6.17,2000 +CD-42 6074|PPM 315178|J101531.56-430644.5,f|S|K4,10:15:31.57|22.45,-43:6:44.53|-52.7,5.57,2000 +SAO 237853|HD 89263|CP-59 2008|PPM 338832|J101603.18-595412.2,f|D|A5,10:16:3.18|-49.95,-59:54:12.24|20.2,6.23,2000 +SAO 155855|SD-10 3029|PPM 222699|J101608.99-111212.3,f|S|K0,10:16:9.00|-23.69,-11:12:12.31|-0.7,6.07,2000 +LMi 23|BD+30 1981|J101614.43+291837.8,f|S|A0,10:16:14.43|-71.28,29:18:37.80|-24.1,5.49,2000 +LMi 24|HD 88986|BD+29 2021|J101628.08+284056.9,f|S|G0,10:16:28.08|-62.38,28:40:56.92|-92.2,6.46,2000 +Leo 35B|BD+24 2207|J101632.28+233011.1,f|D|G1,10:16:32.29|-200.28,23:30:11.14|33.9,5.97,2000 +GY VEL|SAO 237858|HD 89273|CD-50 4990|PPM 338839|J101640.13-511216.6,f|V|M4,10:16:40.14|-39.94,-51:12:16.69|11.7,6.29,2000 +Leo 37|BD+14 2228|PPM 127263|J101640.73+134342.0,f|S|M1,10:16:40.74|-22.88,13:43:42.00|-15.2,5.42,2000 +Adhafera|Aldhafara|Leo Zeta-36A|V4804|BD+24 2209|J101641.41+232502.3,f|D|F0,10:16:41.42|19.82,23:25:2.32|-7.3,3.44,2000 +V18370|BD+26 2064|J101641.75+252214.5,f|V|K5,10:16:41.76|-128.49,25:22:14.54|3.2,5.84,2000 +V0337 CAR|HD 89388|CP-60 1817|PPM 357895|J101704.97-611956.2,f|D|K2,10:17:4.98|-24.25,-61:19:56.30|6.4,3.37,2000 +Tania Borealis|Al Kafzah al Thaniyah a|UMa Lambda-33|BD+43 2005|PPM 51795|J101705.79+425451.7,f|S|A2,10:17:5.79|-170.17,42:54:51.71|-42.6,3.44,2000 +Leo 39|HD 89125|BD+23 2207|J101714.53+230622.3,f|D|F8,10:17:14.54|-413.35,23:6:22.39|-97.2,5.82,2000 +SAO 221934|HD 89328|CD-46 5987|J101720.18-465005.7,f|S|A8,10:17:20.18|-22.68,-46:50:5.79|0.5,6.48,2000 +Sex Epsilon-22|SAO 137469|HD 89254|SD-07 3001|PPM 193276|J101737.80-080408.0,f|S|F2,10:17:37.80|-160.25,-8:4:8.09|2.8,5.24,2000 +UMa 32|V18372|HD 88983|BD+65 767|J101802.02+650630.0,f|V|A8,10:18:2.03|-89.46,65:6:30.06|-9.3,5.75,2000 +AG ANT|SAO 178644|HD 89353|CD-28 8070|J101807.59-285931.2,f|V|A0,10:18:7.59|-15.35,-28:59:31.20|10.9,5.52,2000 +SAO 221948|HD 89461|CD-41 5765|PPM 315228|J101828.24-414006.5,f|S|B9,10:18:28.24|-28.24,-41:40:6.56|3.1,5.97,2000 +HD 89442|CD-36 6281|J101837.85-364816.4,f|S|K2,10:18:37.85|-32.31,-36:48:16.46|10.3,6.30,2000 +V18376|HD 89569|CP-55 3220|PPM 338878|J101837.90-560637.4,f|V|F6,10:18:37.91|-239.29,-56:6:37.42|115.9,5.81,2000 +HD 89268|BD+47 1761|PPM 51814|J101858.72+464538.7,f|D|K1,10:18:58.73|-49.43,46:45:38.80|-31.9,6.42,2000 +HD 89344|BD+25 2231|J101900.70+244243.6,f|S|K0,10:19:0.71|-55.19,24:42:43.70|7.3,6.41,2000 +HD 89715|CP-64 1248|PPM 357917|J101904.78-644032.8,f|D|A1,10:19:4.79|-38.24,-64:40:32.81|15.6,6.42,2000 +HD 89715|CP-64 1248|PPM 357917|J101905.07-644034.5,f|D|A1,10:19:5.07|-35.16,-64:40:34.53|12.3,6.32,2000 +SAO 155894|HD 89455|SD-11 2851|PPM 222775|J101916.86-123141.2,f|D|A9,10:19:16.87|-17.72,-12:31:41.27|-13,6.03,2000 +HD 89319|BD+49 1940|PPM 51819|J101926.78+482348.3,f|S|K0,10:19:26.79|-105.97,48:23:48.34|-110.7,6.00,2000 +SD-04 2840|J101932.34-050622.1,f|S|K0,10:19:32.34|-41.09,-5:6:22.13|-70.8,6.37,2000 +GZ VEL|SAO 237916|HD 89682|CP-54 3474|PPM 338896|J101936.75-550145.4,f|V|K3,10:19:36.75|-14.79,-55:1:45.50|4,4.56,2000 +CP-64 1250|PPM 357926|J101942.03-650814.0,f|S|K2,10:19:42.03|-8.45,-65:8:14.06|2.1,6.32,2000 +Leo 40|V4822|HD 89449|BD+20 2466|PPM 127314|J101944.16+192815.2,f|V|F6,10:19:44.17|-229.95,19:28:15.29|-214.7,4.78,2000 +Algieba|Al Gieba|Leo Gamma-41A|V4823|HD 89484|BD+20 2467A|J101958.35+195029.3,f|D|K1,10:19:58.35|310.83,19:50:29.36|-152.9,2.23,2000 +Leo Gamma-41B|V4823|HD 89485|BD+20 2467B|J101958.61+195026.7,f|D|G7,10:19:58.62|306.32,19:50:26.70|-160.8,3.47,2000 +SAO 137495|HD 89565|SD-08 2897|PPM 193319|J101959.48-090332.4,f|S|F1,10:19:59.48|-63.40,-9:3:32.41|-71.7,6.31,2000 +HD 89389|BD+54 1366|PPM 32586|J102014.79+534645.8,f|S|F9,10:20:14.79|-88.10,53:46:45.81|49.9,6.46,2000 +V18381|HD 89736|CD-47 5790|PPM 315252|J102016.71-474156.7,f|V|K5,10:20:16.72|-9.09,-47:41:56.73|4,5.64,2000 +HD 89414|BD+54 1367|J102031.14+541300.6,f|S|K5,10:20:31.15|-34.91,54:13:0.62|-6,6.02,2000 +MV VEL|SAO 237959|CP-55 3286A|PPM 338934|J102054.79-560235.5,f|D|B3,10:20:54.80|-18.18,-56:2:35.59|1.5,4.50,2000 +EN UMA|HD 89343|BD+69 568|J102103.34+684451.5,f|V|A7,10:21:3.34|-54.64,68:44:51.54|-34.2,5.89,2000 +SAO 178721|HD 89816|SD-22 2904|PPM 257554|J102128.66-234239.0,f|S|A3,10:21:28.66|-49.85,-23:42:39.00|17.6,6.47,2000 +Leo 42|V4828|HD 89774|BD+15 2192|PPM 127335|J102150.30+145832.7,f|V|A1,10:21:50.30|-32.17,14:58:32.78|-11.3,6.17,2000 +CP-57 3069|PPM 338966|J102210.42-581556.0,f|S|G6,10:22:10.42|-48.29,-58:15:56.06|26.7,6.35,2000 +V18385|HD 89744|BD+41 2076|PPM 51848|J102210.56+411346.3,f|V|F7,10:22:10.56|-120.14,41:13:46.31|-138.6,5.74,2000 +V18389|SAO 155935|HD 89911|SD-19 2987|PPM 222856|J102212.93-195159.6,f|V|A1,10:22:12.94|-34.70,-19:51:59.65|9.2,6.13,2000 +V4837|SAO 221998|HD 89998|CD-41 5809|PPM 315286|J102219.58-413859.8,f|V|K1,10:22:19.58|-27.24,-41:38:59.86|60.8,4.82,2000 +Tania Australis|Al Kafzah al Thaniyah b|UMa Mu-34|V4829|HD 89758|BD+42 2115|J102219.74+412958.2,f|V|M0,10:22:19.74|-80.44,41:29:58.26|34.1,3.05,2000 +CP-66 1243|PPM 357955|J102258.14-665405.3,f|S|B8,10:22:58.15|-22.83,-66:54:5.39|11,4.97,2000 +Leo 43|SAO 118269|HD 89962|BD+07 2289|PPM 156774|J102300.44+063233.5,f|S|K3,10:23:0.45|-16.24,6:32:33.52|-98.7,6.08,2000 +LMi 27|BD+34 2120|PPM 75177|J102306.32+335429.3,f|S|A6,10:23:6.33|-14.19,33:54:29.32|-4.3,5.89,2000 +SAO 178759|CD-29 8306|PPM 287633|J102313.14-300944.1,f|S|F0,10:23:13.14|2.85,-30:9:44.15|-11.7,6.26,2000 +Sex 25|SS SEX|SAO 137533|SD-03 2911|PPM 193378|J102326.47-040426.5,f|V|B9,10:23:26.48|-50.57,-4:4:26.52|4.2,5.93,2000 +SAO 137532|BD-00 2332|PPM 178166|J102328.37-005408.0,f|S|G5,10:23:28.37|65.24,-0:54:8.08|-33.8,6.46,2000 +V18394|CD-37 6509|PPM 287637|J102329.29-380035.4,f|V|A8,10:23:29.30|-158.84,-38:0:35.42|-53.6,5.34,2000 +V18392|SAO 137534|SD-02 3132|PPM 193381|J102332.65-033834.2,f|V|K5,10:23:32.66|-11.83,-3:38:34.28|5.5,6.44,2000 +CD-41 5833|J102340.62-415711.4,f|S|G8,10:23:40.62|-112.89,-41:57:11.48|12.6,6.25,2000 +HD 89993|BD+30 2005|J102341.75+293657.0,f|S|G8,10:23:41.76|-7.95,29:36:57.08|-13.1,6.37,2000 +V4846|CP-57 3127|PPM 338996|J102350.63-575714.1,f|V|K4,10:23:50.63|-21.89,-57:57:14.16|-11.9,6.33,2000 +ET UMA|HD 89822|BD+66 664|PPM 17427|J102407.84+653359.1,f|V|A0,10:24:7.85|-8.93,65:33:59.12|-20.8,4.94,2000 +LMi 28|BD+34 2123|PPM 75186|J102408.60+334306.7,f|S|K5,10:24:8.60|-15.60,33:43:6.71|-1.9,5.52,2000 +SAO 118278|BD+03 2358|PPM 156794|J102413.17+022204.8,f|D|G9,10:24:13.18|44.21,2:22:4.87|-22.2,6.32,2000 +V4856|CP-73 733|J102423.70-740153.8,f|V|F2,10:24:23.71|-16.14,-74:1:53.80|-27.6,3.99,2000 +V18403|SAO 256711|CP-73 735|J102444.51-735818.2,f|V|A2,10:24:44.51|-24.85,-73:58:18.24|10.9,6.18,2000 +CP-57 3164|J102459.41-583434.6,f|S|F2,10:24:59.42|-74.06,-58:34:34.69|6.1,5.92,2000 +Leo 44|DE LEO|SAO 118286|BD+09 2351|PPM 156811|J102515.19+084705.4,f|V|M3,10:25:15.20|10.53,8:47:5.44|-38.6,5.62,2000 +CD-41 5850|PPM 315339|J102517.21-422802.6,f|S|G8,10:25:17.21|-1.77,-42:28:2.65|-12.5,6.18,2000 +V18399|SAO 137557|SD-06 3146|J102544.27-070335.3,f|V|K6,10:25:44.27|-135.17,-7:3:35.38|129,5.60,2000 +BD+36 2065|PPM 75212|J102544.92+352531.5,f|S|K1,10:25:44.92|-107.07,35:25:31.55|-58.1,6.47,2000 +LMi 30|BD+34 2128|PPM 75214|J102554.81+334746.0,f|S|F0,10:25:54.81|-75.29,33:47:46.03|-59,4.73,2000 +Hya Mu-42|V18402|SD-16 3052|PPM 222953|J102605.42-165010.6,f|V|K4,10:26:5.43|-128.50,-16:50:10.65|-80.1,3.82,2000 +CD-42 6222|PPM 315346|J102609.83-424418.5,f|S|K1,10:26:9.83|-95.30,-42:44:18.58|-39.2,6.13,2000 +SAO 137565|BD-00 2341|PPM 178185|J102636.91-005916.9,f|S|K5,10:26:36.91|-48.59,-0:59:17.00|9.2,6.32,2000 +CP-54 3651|J102648.92-545238.2,f|S|K3,10:26:48.92|-13.72,-54:52:38.29|5,5.56,2000 +BD+20 2487|PPM 127411|J102700.48+192152.3,f|S|K0,10:27:0.49|-59.44,19:21:52.34|-5.6,6.14,2000 +Ant Alpha|V4862|CD-30 8465|PPM 287713|J102709.10-310404.0,f|V|K4,10:27:9.10|-80.43,-31:4:4.00|9.6,4.27,2000 +V0399 CAR|CP-57 3256|J102724.47-573819.6,f|V|A9,10:27:24.47|-6.74,-57:38:19.70|3.7,4.68,2000 +CP-65 1354|PPM 357999|HR 4115|J102725.28-654216.7,f|S|A2,10:27:25.28|-81.90,-65:42:16.79|20.6,6.00,2000 +BD+42 2123|PPM 51894|J102728.04+413603.7,f|D|A2,10:27:28.04|-47.22,41:36:3.73|-72.7,6.01,2000 +Leo 45|CX LEO|BD+10 2152|PPM 156855|J102738.99+094544.6,f|D|A0,10:27:38.99|7.83,9:45:44.63|-6.3,6.01,2000 +V4869|CP-58 2227|HR 4114|J102752.73-584421.8,f|V|F2,10:27:52.73|-13.23,-58:44:21.85|2.2,3.83,2000 +LMi Beta-31|BD+37 2080|PPM 75233|J102752.99+364225.9,f|D|G9,10:27:53.00|-134.20,36:42:25.95|-113.6,4.21,2000 +V4868|CD-48 5655|PPM 315381|HR 4111|J102802.09-492420.8,f|V|K4,10:28:2.10|19.13,-49:24:20.88|-44.9,6.10,2000 +BD+49 1961|J102803.88+484705.6,f|D|F9,10:28:3.88|80.55,48:47:5.64|-881.8,6.44,2000 +V0507 CAR|CP-62 1595|J102818.26-630952.4,f|V|B2,10:28:18.26|-16.32,-63:9:52.45|3.3,6.44,2000 +BD+45 1832|J102836.51+451243.9,f|S|K0,10:28:36.52|-21.77,45:12:43.96|-21,6.36,2000 +V18414|SAO 137591|SD-03 2929|PPM 193464|J102843.96-034432.5,f|V|A1,10:28:43.96|0.75,-3:44:32.59|-28.3,6.04,2000 +V18422|CP-63 1440|J102852.57-641020.2,f|V|M0,10:28:52.58|-15.88,-64:10:20.20|2.8,5.30,2000 +V18423|CP-64 1310|J102903.74-651034.4,f|V|M1,10:29:3.75|54.41,-65:10:34.48|37.4,6.44,2000 +Sex Delta-29|SD-02 3155|PPM 178197|HR 4116|J102928.70-024420.6,f|S|B9,10:29:28.70|-48.84,-2:44:20.68|-12.8,5.19,2000 +V18421|SAO 178888|CD-29 8381|PPM 257735|HR 4117|J102928.97-293949.7,f|V|K5,10:29:28.97|-59.70,-29:39:49.80|8.9,5.57,2000 +Ant Delta|V4876|CD-29 8383|PPM 287759|HR 4118|J102935.37-303625.4,f|D|B9,10:29:35.38|-29.31,-30:36:25.43|2.4,5.58,2000 +HD 89571|BD+84 234|PPM 1796|J102941.46+841507.2,f|S|F0,10:29:41.46|-128.39,84:15:7.23|-39.6,5.52,2000 +UMa 35|BD+66 671|PPM 17471|J102954.43+653734.4,f|S|K5,10:29:54.44|5.20,65:37:34.44|-29.2,6.31,2000 +LMi 32|BD+39 2357|PPM 75259|HR 4113|J103006.44+385530.4,f|S|A4,10:30:6.45|-15.64,38:55:30.47|-4.6,5.79,2000 +V4881|HD 91272|CP-66 1291|HR 4129|J103008.78-665904.7,f|V|B4,10:30:8.79|-17.36,-66:59:4.75|5.2,6.19,2000 +Sex Beta-30|Beta Sextantis|BD+00 2663|HR 4119|J103017.47-003813.2,f|S|B6,10:30:17.48|-40.20,-0:38:13.29|-22.2,5.07,2000 +SAO 256722|HD 91375|CP-71 1034|HR 4138|J103020.12-715934.0,f|S|A1,10:30:20.13|27.96,-71:59:34.05|-30,4.72,2000 +BD+64 789|PPM 17477|J103026.58+641527.6,f|S|A7,10:30:26.59|-50.88,64:15:27.68|-50.7,6.09,2000 +UMa 36A|BD+56 1459|PPM 32668|HR 4112|J103037.57+555849.9,f|D|F8,10:30:37.58|-176.99,55:58:49.93|-33.5,4.83,2000 +V18432|CP-60 1945|HR 4128|J103039.24-612123.3,f|D|M2,10:30:39.25|3.02,-61:21:23.31|13.4,6.43,2000 +SAO 137614|SD-06 3173|HR 4122|J103058.76-073815.1,f|D|K5,10:30:58.76|-35.09,-7:38:15.18|-2,6.29,2000 +V18431|SD-12 3181|HR 4123|J103059.83-133518.4,f|V|B9,10:30:59.84|-33.53,-13:35:18.49|-0.8,5.60,2000 +V4886|SAO 256723|HD 91496|CP-72 981|HR 4142|J103102.05-731317.3,f|D|K4,10:31:2.06|-7.45,-73:13:17.36|7.6,4.93,2000 +V4864|BD+83 297|J103104.66+823330.9,f|V|F2,10:31:4.66|-79.20,82:33:30.91|20.4,5.26,2000 +Y Argus|SAO 238146|HD 91324|CP-53 3909A|PPM 339127|HR 4134|J103121.82-534255.7,f|D|F6,10:31:21.82|-418.72,-53:42:55.74|209.5,4.90,2000 +SAO 178938|CD-27 7503|PPM 257787|J103148.67-281413.5,f|S|F7,10:31:48.68|-81.14,-28:14:13.57|-4.6,6.05,2000 +LMi 33|BD+33 1999|PPM 75286|HR 4124|J103151.37+322246.3,f|D|A0,10:31:51.38|17.10,32:22:46.40|6.9,5.91,2000 +SAO 222125|HD 91356|CD-44 6582|PPM 315444|HR 4136|J103156.63-450410.7,f|D|B8,10:31:56.64|-19.92,-45:4:10.78|-1.7,6.07,2000 +V18434|SAO 222126|HD 91355|CD-44 6583|PPM 315446|HR 4135|J103157.43-450400.1,f|D|B6,10:31:57.44|-15.36,-45:4:0.16|1.4,5.71,2000 +PP CAR|HD 91465|CP-61 1704|J103201.46-614107.1,f|V|B4,10:32:1.46|-16.58,-61:41:7.20|11.4,3.37,2000 +Leo 46|ES LEO|HD 91232|BD+14 2255|PPM 127487|HR 4127|J103211.77+140814.1,f|V|M1,10:32:11.77|-40.87,14:8:14.17|24.7,5.44,2000 +SAO 222129|HD 91437|CD-43 6347|PPM 315454|HR 4139|J103233.61-443706.6,f|S|G6,10:32:33.61|-12.81,-44:37:6.63|-23.6,5.91,2000 +V18439|SAO 238168|HD 91533|CP-58 2285|PPM 339149|HR 4144|J103247.80-584000.2,f|V|A2,10:32:47.81|-6.55,-58:40:0.28|2.2,6.01,2000 +Leo Rho-47|Rho Leonis|SAO 118355|HD 91316|BD+10 2166|PPM 156938|HR 4133|J103248.67+091823.7,f|D|B1,10:32:48.67|-5.62,9:18:23.71|-3.6,3.85,2000 +SAO 222136|CD-46 6205A|PPM 315463|HR 4143|J103256.86-470012.0,f|D|K4,10:32:56.86|-24.04,-47:0:12.07|6.8,5.03,2000 +HD 91312|BD+41 2101|PPM 51942|HR 4132|J103313.88+402532.0,f|D|A7,10:33:13.89|-142.05,40:25:32.02|8,4.73,2000 +V0369 CAR|SAO 238182|HD 91619|CP-57 3431|PPM 339162|HR 4147|J103325.38-581124.5,f|V|B7,10:33:25.39|-7.75,-58:11:24.54|3.4,6.14,2000 +LMi 34|HD 91365|BD+35 2154|HR 4137|J103330.91+345919.3,f|S|A2,10:33:30.91|-28.76,34:59:19.30|-3.1,5.58,2000 +Hya 44|SAO 178979|SD-22 2946|PPM 257847|HR 4145|J103400.88-234442.5,f|D|K4,10:34:0.88|-10.43,-23:44:42.59|21.2,5.07,2000 +V4898|HD 91767|CP-60 1983|HR 4151|J103412.71-605915.4,f|V|K2,10:34:12.71|-8.73,-60:59:15.46|-0.2,6.24,2000 +Leo 48|SAO 118376|HD 91612|BD+07 2330|PPM 156974|HR 4146|J103448.01+065713.4,f|S|G8,10:34:48.01|-100.21,6:57:13.50|56.6,5.08,2000 +SAO 178993|CD-22 8332|PPM 257864|HR 4149|J103457.69-231034.4,f|S|F7,10:34:57.70|-99.70,-23:10:34.49|34,6.10,2000 +Leo 49|TX LEO|HD 91636|BD+09 2374|HR 4148|J103502.15+083901.5,f|D|A2,10:35:2.16|-52.79,8:39:1.53|-5.6,5.67,2000 +BD+76 393|PPM 7714|HR 4126|J103505.48+754246.6,f|S|G8,10:35:5.48|-45.57,75:42:46.61|-15,4.85,2000 +UMa 37|BD+57 1277|PPM 32699|HR 4141|J103509.69+570457.4,f|S|F1,10:35:9.69|65.62,57:4:57.49|37.1,5.16,2000 +CD-43 6395|HR 4154|J103510.41-433952.5,f|D|G7,10:35:10.41|-46.01,-43:39:52.51|30.9,6.11,2000 +U ANT|HD 91793|CD-38 6579|PPM 287864|HR 4153|J103512.85-393345.3,f|V|C5,10:35:12.85|-32.15,-39:33:45.32|3.3,5.54,2000 +CP-75 678|J103524.75-761832.3,f|S|K2,10:35:24.76|-17.82,-76:18:32.35|7.9,6.30,2000 +Cha Gamma|V4913|SAO 256731|CP-77 622|HR 4174|J103528.10-783628.0,f|V|M0,10:35:28.11|-38.01,-78:36:28.03|11.5,4.10,2000 +V4904|SAO 238222|HD 91942|CP-56 3544|HR 4159|J103535.29-573327.4,f|V|K3,10:35:35.30|-15.45,-57:33:27.49|-0.2,4.44,2000 +SD-17 3187|PPM 223175|HR 4152|J103538.86-183408.3,f|S|A7,10:35:38.86|5.26,-18:34:8.32|11.6,6.48,2000 +BD+81 343|PPM 1823|HR 4121|J103601.95+802940.6,f|S|G5,10:36:1.96|-18.06,80:29:40.66|-3.7,6.49,2000 +V4907|HD 91881|CD-26 8022|PPM 257888|HR 4157|J103604.50-264031.7,f|D|F5,10:36:4.51|2.14,-26:40:31.72|-79.5,6.33,2000 +Hya Phi2|V18452|SD-15 3087|PPM 223191|HR 4156|J103616.65-162039.5,f|D|M1,10:36:16.66|-30.37,-16:20:39.57|2.9,6.01,2000 +V4909|SAO 238242|CP-58 2371|PPM 339223|HR 4164|J103620.51-593351.8,f|V|K1,10:36:20.52|-39.89,-59:33:51.81|-39.9,5.08,2000 +LMi 35|HD 91752|BD+37 2100|J103621.42+361936.9,f|S|F3,10:36:21.42|36.98,36:19:36.94|-33.8,6.29,2000 +HD 91889|SD-11 2918|PPM 223198|HR 4158|J103632.38-121348.4,f|D|F7,10:36:32.38|268.56,-12:13:48.44|-672.3,5.72,2000 +V18459|CD-26 8033|PPM 257916|HR 4162|J103713.72-272445.4,f|V|M2,10:37:13.72|-113.05,-27:24:45.48|21.5,4.88,2000 +HD 92155|CP-53 4002|PPM 339245|J103716.11-535118.9,f|S|B3,10:37:16.11|-10.88,-53:51:18.94|2.2,6.42,2000 +SAO 222199|HD 92139|CD-47 6042|PPM 315541|HR 4167|J103718.14-481332.2,f|D|F4,10:37:18.14|-131.51,-48:13:32.23|-1.6,3.84,2000 +V0370 CAR|SAO 238271|CP-58 2411|PPM 339254|HR 4169|J103727.06-584400.0,f|V|A0,10:37:27.07|-7.47,-58:44:0.02|3.1,5.49,2000 +U HYA|SD-12 3218|PPM 223226|HR 4163|J103733.27-132304.3,f|V|C5,10:37:33.27|41.73,-13:23:4.35|-37.8,4.92,2000 +BD+34 2145|PPM 75361|J103752.26+340443.0,f|S|K0,10:37:52.26|-18.88,34:4:43.04|5.2,6.41,2000 +V0514 CAR|SAO 238278|HD 92287|CP-56 3588|PPM 339261|HR 4173|J103802.64-571522.7,f|V|B3,10:38:2.65|-15.58,-57:15:22.71|0.7,5.89,2000 +Hya Phi3|SAO 156122|HD 92214|SD-16 3100|PPM 223249|HR 4171|J103834.95-165235.6,f|S|G8,10:38:34.95|-98.61,-16:52:35.66|26.8,4.91,2000 +LMi 37|HD 92125|BD+32 2061|PPM 75369|HR 4166|J103843.21+315834.4,f|S|G2,10:38:43.21|0.13,31:58:34.45|7.2,4.68,2000 +V4922|SAO 238295|HD 92397|CP-58 2460A|PPM 339274|HR 4177|J103844.99-591058.7,f|D|K4,10:38:45.00|-14.29,-59:10:58.79|0.8,4.74,2000 +SAO 238296|HD 92399|CP-58 2462|PPM 339275|J103845.37-591544.7,f|S|B4,10:38:45.38|-14.26,-59:15:44.71|-0.2,6.48,2000 +SAO 222222|HD 92328|CD-42 6390|PPM 315571|HR 4175|J103850.31-424512.4,f|D|Am,10:38:50.31|-16.41,-42:45:12.45|-10.6,6.12,2000 +SAO 156124|HD 92245|SD-11 2925|PPM 223253|HR 4172|J103850.41-122637.0,f|S|A0,10:38:50.41|-46.87,-12:26:37.02|10.2,6.04,2000 +HD 92436|CP-58 2474|PPM 339284|HR 4179|J103859.61-584900.6,f|D|M1,10:38:59.62|-76.66,-58:49:0.67|13.1,5.99,2000 +BD+54 1387|PPM 32733|HR 4165|J103905.65+534005.8,f|S|K3,10:39:5.66|-90.11,53:40:5.88|-79.4,5.54,2000 +LMi 38|HD 92168|BD+38 2166|PPM 75376|HR 4168|J103907.63+375436.0,f|S|F9,10:39:7.63|-220.36,37:54:36.00|-45.7,5.84,2000 +SAO 256742|HD 92682|CP-73 758|HR 4186|J103915.89-742936.1,f|S|K3,10:39:15.90|-18.49,-74:29:36.18|0.1,6.09,2000 +HD 92449|CP-54 3915|J103918.39-553611.7,f|D|G2,10:39:18.39|-18.90,-55:36:11.77|4.3,4.28,2000 +HD 92536|CP-63 1542|PPM 358141|J103922.83-640642.4,f|S|B8,10:39:22.83|-16.96,-64:6:42.44|10.2,6.33,2000 +SAO 238313|HD 92463|CP-54 3916|PPM 339295|J103924.28-553625.6,f|D|B8,10:39:24.28|-17.54,-55:36:25.60|9.2,6.22,2000 +V0364 CAR|HD 92664|CP-64 1403|PPM 358153|HR 4185|J104011.43-650600.7,f|V|B9,10:40:11.44|-17.43,-65:6:0.75|12.9,5.51,2000 +HD 92589|CD-35 6646|PPM 287986|HR 4183|J104051.53-354430.1,f|D|G8,10:40:51.54|-26.66,-35:44:30.18|5.5,6.37,2000 +V0429 CAR|SAO 238353|CP-59 2450|PPM 339335|HR 4188|J104117.51-594036.8,f|V|WN,10:41:17.52|-7.80,-59:40:36.90|2.6,6.39,2000 +Sex 33|SAO 137728|HD 92588|BD-00 2364|PPM 178256|HR 4182|J104124.18-014429.3,f|S|K1,10:41:24.19|-136.89,-1:44:29.37|-119.1,6.25,2000 +HD 92354|BD+69 583|HR 4176|J104148.25+682636.5,f|S|K5,10:41:48.26|-29.43,68:26:36.60|-24.8,5.74,2000 +DR CHA|SAO 256745|HD 93237|CP-79 548|J104151.51-794659.8,f|V|B4,10:41:51.52|-17.51,-79:46:59.84|5.8,5.98,2000 +UMa 38|V4936|HD 92424|BD+66 678|PPM 17551|HR 4178|J104156.55+654258.6,f|V|K2,10:41:56.55|-162.73,65:42:58.61|-75,5.11,2000 +RX LMI|BD+32 2066|HR 4184|J104211.26+314149.1,f|D|M3,10:42:11.27|-3.19,31:41:49.19|-18.8,6.05,2000 +V0518 CAR|HD 92938|CP-63 1589|PPM 358176|HR 4196|J104214.12-642759.1,f|V|B4,10:42:14.12|-17.78,-64:27:59.13|11.3,4.76,2000 +SD-13 3197|PPM 223341|J104231.37-135828.2,f|S|K2,10:42:31.37|-14.85,-13:58:28.25|12.5,6.22,2000 +V0519 CAR|SAO 238379|HD 92964|CP-58 2581|HR 4198|J104240.56-591256.7,f|V|B2,10:42:40.57|-6.45,-59:12:56.73|2.3,5.40,2000 +HD 92845|CD-32 7572|HR 4194|J104243.18-324256.4,f|D|A0,10:42:43.19|-30.92,-32:42:56.42|-0.1,5.63,2000 +Car Theta|CP-63 1599|PPM 358184|HR 4199|J104257.40-642340.0,f|S|B0,10:42:57.40|-18.86,-64:23:40.02|12.1,2.74,2000 +LMi 40A|HD 92769|BD+27 1927|HR 4189|J104301.88+261932.0,f|D|A4,10:43:1.88|-99.62,26:19:32.08|-49.3,5.52,2000 +HD 92523|BD+69 586|HR 4181|J104304.03+690434.3,f|S|K3,10:43:4.04|0.27,69:4:34.37|-12.9,4.99,2000 +Sex 35A|SAO 118449|HD 92841|BD+05 2384A|HR 4193|J104320.91+044451.6,f|D|K3,10:43:20.92|19.73,4:44:51.61|-33,6.10,2000 +LMi 41|HD 92825|BD+23 2253|HR 4192|J104324.95+231118.2,f|S|A3,10:43:24.96|-116.65,23:11:18.26|8.3,5.08,2000 +V0520 CAR|CP-59 2532|J104332.28-603359.8,f|V|K4,10:43:32.29|-15.26,-60:33:59.83|3.1,4.56,2000 +HD 92787|BD+46 1657|HR 4191|J104332.89+461213.9,f|D|F5,10:43:32.89|-268.15,46:12:13.96|-66.1,5.19,2000 +UMa 39|HD 92728|BD+57 1286|PPM 32767|HR 4187|J104343.33+571157.1,f|S|A0,10:43:43.34|17.39,57:11:57.13|-51.7,5.79,2000 +V18496|HD 93163|CP-63 1619|J104351.19-641456.5,f|V|B2,10:43:51.19|-16.36,-64:14:56.55|4.1,5.76,2000 +V18488|SAO 238394|HD 93131|CP-59 2548|J104352.25-600704.0,f|V|WN,10:43:52.26|-6.58,-60:7:4.02|2,6.48,2000 +V18499|HD 93194|CP-63 1623|J104406.91-635739.8,f|V|B5,10:44:6.91|-17.05,-63:57:39.86|12,4.80,2000 +HD 92941|BD+20 2514|PPM 127658|HR 4197|J104414.54+194531.8,f|S|A5,10:44:14.55|-116.61,19:45:31.80|-20.6,6.27,2000 +HD 93344|CP-70 1183|HR 4211|J104420.02-705134.9,f|D|A5,10:44:20.02|-46.03,-70:51:35.00|0.9,6.24,2000 +QZ CAR|SAO 238414|CP-59 2572|PPM 339393|J104422.91-595935.9,f|D|O9,10:44:22.91|-7.13,-59:59:35.95|2.5,6.30,2000 +SAO 256752|HD 93372|CP-71 1118|HR 4213|J104426.96-722636.5,f|S|F6,10:44:26.96|-151.58,-72:26:36.59|53.3,6.27,2000 +SAO 256751|HD 93359|CP-70 1185|HR 4212|J104432.33-705118.9,f|D|A6,10:44:32.34|-47.91,-70:51:18.92|0.2,6.45,2000 +Car Eta|Eta Carinae|SAO 238429|CP-59 2620|J104503.58-594104.2,f|D|Pe,10:45:3.59|-8.33,-59:41:4.24|1,6.21,2000 +VY UMA|HD 92839|BD+68 617|HR 4195|J104504.02+672440.9,f|V|C6,10:45:4.03|4.38,67:24:40.98|0.7,5.99,2000 +Sex 36|SAO 118473|BD+03 2408|PPM 157147|J104509.45+022916.6,f|S|K4,10:45:9.46|-48.55,2:29:16.69|-23.9,6.27,2000 +Cha Delta1|SAO 258592|HD 93779|CP-79 554|HR 4231|J104516.31-802810.5,f|D|K0,10:45:16.31|-17.41,-80:28:10.55|-30.3,5.50,2000 +Cha Delta2|SAO 258593|HD 93845|CP-79 556|PPM 377263|HR 4234|J104547.00-803224.6,f|S|B2,10:45:47.00|-37.33,-80:32:24.68|6.2,4.45,2000 +LMi 42A|HD 93152|BD+31 2180|J104551.89+304056.3,f|D|A1,10:45:51.89|-26.57,30:40:56.33|-36.4,5.26,2000 +SAO 118483|HD 93244|BD+07 2356|PPM 157166|J104605.68+062223.4,f|S|K5,10:46:5.68|-6.71,6:22:23.46|-36.6,6.37,2000 +V18523|SAO 251115|CP-63 1646|PPM 358238|HR 4219|J104616.55-643052.4,f|V|B6,10:46:16.56|-15.81,-64:30:52.41|10.9,5.34,2000 +SAO 251113|CP-59 2671|PPM 358239|HR 4217|J104617.06-603610.3,f|D|A0,10:46:17.07|-43.81,-60:36:10.34|8.4,6.28,2000 +UMa 41|HD 93132|BD+58 1281|J104622.48+572157.2,f|S|M1,10:46:22.48|-53.15,57:21:57.29|-57.6,6.35,2000 +Leo 51|HD 93257|BD+19 2371|PPM 127683|J104624.54+185329.4,f|S|K2,10:46:24.55|94.09,18:53:29.48|-40.6,5.50,2000 +Leo 52|HD 93291|BD+14 2294|PPM 127684|J104625.27+141140.7,f|S|K0,10:46:25.28|-125.35,14:11:40.72|-64.9,5.48,2000 +SAO 251117|HD 93549|CP-63 1649|PPM 358242|J104629.58-641547.6,f|D|B7,10:46:29.59|-17.00,-64:15:47.67|9.2,5.23,2000 +SAO 222318|HD 93453|CD-42 6484|PPM 315714|J104637.14-431133.6,f|S|A4,10:46:37.14|0.87,-43:11:33.62|-55.1,6.30,2000 +Vel Mu|SAO 222321|HD 93497|CD-48 5913|PPM 315716|HR 4216|J104646.17-492512.9,f|D|G5,10:46:46.18|62.55,-49:25:12.92|-53.6,2.72,2000 +SAO 251121|HD 93649|CP-68 1302|PPM 358245|J104648.07-691235.2,f|S|A2,10:46:48.08|-7.88,-69:12:35.23|2.8,6.36,2000 +V18529|CP-63 1655|PPM 358246|HR 4222|J104651.21-642300.5,f|V|B3,10:46:51.22|-18.61,-64:23:0.51|9.3,4.85,2000 +SAO 156221|HD 93397|SD-16 3124|PPM 223444|HR 4214|J104652.05-171748.7,f|S|A3,10:46:52.06|-16.04,-17:17:48.75|-17.9,5.43,2000 +V18528|SAO 238468|HD 93563|CP-56 3800|PPM 339446|HR 4221|J104657.47-564525.8,f|V|B8,10:46:57.47|-21.21,-56:45:25.89|-0.6,5.14,2000 +SAO 251127|HD 93739|CP-68 1305|PPM 358252|J104730.60-692615.8,f|S|B2,10:47:30.60|-8.27,-69:26:15.84|0.3,6.35,2000 +V4975|HD 93662|CP-56 3821|PPM 339458|HR 4226|J104738.39-572802.6,f|V|M1,10:47:38.40|-11.94,-57:28:2.68|2.8,6.27,2000 +V4978|SAO 238483|HD 93695|CP-59 2713|PPM 339459|J104744.31-595230.9,f|V|B5,10:47:44.32|-15.51,-59:52:30.93|-0.1,6.47,2000 +SAO 251128|HD 93738|CP-63 1672|PPM 358257|J104753.52-641546.2,f|S|A0,10:47:53.53|-15.44,-64:15:46.26|9.7,6.46,2000 +V0522 CAR|SAO 238493|HD 93737|CP-59 2720|PPM 339469|HR 4228|J104805.40-595508.9,f|V|A0,10:48:5.41|-7.59,-59:55:8.99|2.7,6.02,2000 +HD 93657|CD-31 8536|PPM 288135|HR 4225|J104814.11-314116.2,f|S|A1,10:48:14.11|-29.23,-31:41:16.26|1.6,5.88,2000 +V18533|HD 93655|BD-01 2446|PPM 178297|HR 4224|J104840.55-015732.0,f|V|M2,10:48:40.56|-18.59,-1:57:32.02|7.9,5.92,2000 +HD 93427|BD+65 803|PPM 17598|HR 4215|J104849.86+650756.9,f|S|A1,10:48:49.87|5.11,65:7:56.97|7.4,6.40,2000 +LMi 43|HD 93636|BD+30 2072|HR 4223|J104857.22+292457.8,f|S|A5,10:48:57.23|-80.23,29:24:57.81|-37.7,6.15,2000 +Leo 53|BD+11 2283|HR 4227|J104915.43+103242.7,f|S|A2,10:49:15.43|-4.42,10:32:42.73|-24.4,5.32,2000 +SAO 238514|HD 93943|CP-58 2755|PPM 339488|HR 4239|J104924.43-591925.6,f|D|B9,10:49:24.44|-16.76,-59:19:25.65|-5.9,5.92,2000 +HD 93551|BD+64 810|J104928.80+634836.0,f|S|K0,10:49:28.80|-14.43,63:48:36.08|11.6,6.43,2000 +Hya Nu|SAO 156256|HD 93813|SD-15 3138|PPM 223512|HR 4232|J104937.48-161137.1,f|S|K1,10:49:37.49|92.77,-16:11:37.13|199,3.11,2000 +SAO 137815|HD 93833|SD-09 3147|PPM 193828|HR 4233|J104943.48-095109.7,f|S|G5,10:49:43.49|9.75,-9:51:9.70|-27.2,5.85,2000 +LMi 44|HD 93765|BD+28 1931|J104953.72+275826.2,f|S|F3,10:49:53.73|-10.60,27:58:26.21|31.2,6.05,2000 +CD-33 7288|PPM 288177|HR 4238|J104957.01-340329.4,f|S|A1,10:49:57.02|-40.14,-34:3:29.46|7,5.61,2000 +Sex 41A|SAO 137823|SD-08 3018|PPM 193838|HR 4237|J105018.05-085351.9,f|D|Am,10:50:18.06|-5.34,-8:53:51.95|-14.7,5.80,2000 +SAO 137834|SD-02 3236|PPM 193861|J105105.40-030533.6,f|S|K2,10:51:5.41|-54.07,-3:5:33.60|-10.9,5.95,2000 +UMa 43|HD 93859|BD+57 1294|PPM 32821|HR 4235|J105111.00+563456.1,f|S|K2,10:51:11.01|-69.48,56:34:56.10|5.5,5.66,2000 +UMa 42|HD 93875|BD+60 1296|PPM 32824|HR 4236|J105123.72+591912.4,f|S|K2,10:51:23.72|-29.70,59:19:12.43|-51.2,5.56,2000 +HD 94275|CP-56 3927|PPM 339514|J105146.87-571620.3,f|S|A5,10:51:46.88|-50.93,-57:16:20.33|-0.1,6.29,2000 +BD+01 2495|PPM 157292|HR 4244|J105213.69+010129.9,f|D|A3,10:52:13.69|2.55,1:1:29.90|-3.8,6.37,2000 +SAO 256768|HD 94717|CP-78 589|HR 4268|J105228.63-793333.9,f|S|K2,10:52:28.63|-11.28,-79:33:33.97|2.1,6.33,2000 +V0524 CAR|SAO 238557|HD 94367|CP-56 3947|PPM 339534|J105230.84-571425.4,f|V|B9,10:52:30.85|-6.74,-57:14:25.46|3.6,5.27,2000 +BD+53 1440|PPM 32841|HR 4242|J105232.05+523012.9,f|S|K2,10:52:32.06|-58.62,52:30:12.98|-51.9,6.44,2000 +SAO 118555|HD 94237|BD+00 2710|PPM 178316|HR 4245|J105236.09-001205.9,f|S|K5,10:52:36.09|-6.30,-0:12:5.96|-25.3,6.30,2000 +Praecipua|LMi 46|V4999|HD 94264|BD+34 2172|PPM 75534|HR 4247|J105318.70+341253.5,f|V|K0,10:53:18.71|92.53,34:12:53.54|-286.1,3.79,2000 +HD 94491|CP-58 2830|PPM 339545|J105321.16-585336.4,f|D|B5,10:53:21.17|-13.25,-58:53:36.43|3.3,6.25,2000 +SAO 137863|HD 94363|BD-01 2459|PPM 178321|HR 4249|J105324.96-021518.7,f|D|K0,10:53:24.96|-131.90,-2:15:18.75|-82,6.12,2000 +V5006|HD 94388|SD-19 3125|PPM 258261|HR 4251|J105329.53-200819.4,f|D|F6,10:53:29.53|80.55,-20:8:19.43|-239.1,5.23,2000 +V5011|SAO 238574|CP-58 2834|PPM 339549|HR 4257|J105329.65-585111.4,f|D|K1,10:53:29.66|79.76,-58:51:11.41|38.6,3.79,2000 +HD 94132|BD+70 634|PPM 17624|HR 4243|J105330.70+695113.9,f|D|G9,10:53:30.71|-397.49,69:51:13.97|-67.5,5.92,2000 +HD 94386|SD-14 3213|HR 4252|J105332.90-152644.9,f|S|K3,10:53:32.90|65.50,-15:26:44.97|-57.2,6.34,2000 +SAO 238575|CP-55 3952|J105333.40-562513.8,f|S|K2,10:53:33.40|-17.51,-56:25:13.80|5.2,6.41,2000 +UMa 44|HD 94247|BD+55 1418|PPM 32845|HR 4246|J105334.45+543506.4,f|S|K3,10:53:34.45|-66.84,54:35:6.46|-9.8,5.12,2000 +CP-70 1246|HR 4262|J105342.07-704313.2,f|D|B6,10:53:42.08|-29.47,-70:43:13.21|0.5,5.99,2000 +SAO 137871|BD-01 2460|PPM 178324|HR 4253|J105343.71-020745.1,f|S|G8,10:53:43.71|-83.34,-2:7:45.14|15,5.45,2000 +UMa Omega-45|HD 94334|BD+43 2058|PPM 52125|HR 4248|J105358.74+431123.8,f|S|A1,10:53:58.74|44.73,43:11:23.84|-24.4,4.67,2000 +HD 94481|SD-12 3293|PPM 223625|HR 4255|J105417.77-134528.9,f|S|G4,10:54:17.78|-6.41,-13:45:28.93|9.5,5.66,2000 +V18554|SAO 251173|HD 94683|CP-61 1960|PPM 358327|HR 4266|J105429.60-614935.8,f|D|K4,10:54:29.60|4.96,-61:49:35.84|-3.9,5.95,2000 +LMi 48|WW LMI|BD+26 2147|HR 4254|J105442.16+252926.6,f|V|A8,10:54:42.17|-54.29,25:29:26.60|-0.4,6.20,2000 +HD 94497|BD+34 2178|HR 4256|J105458.17+340205.2,f|S|G5,10:54:58.18|-57.68,34:2:5.27|-45.2,5.73,2000 +KQ VEL|SAO 222422|CD-41 6220|PPM 315855|HR 4263|J105501.00-421503.9,f|V|A0,10:55:1.00|-45.97,-42:15:3.95|-2.5,6.09,2000 +SAO 179334|HD 94619|SD-19 3134|PPM 258298|HR 4261|J105511.57-203953.8,f|S|K0,10:55:11.57|-11.37,-20:39:53.87|3.8,6.44,2000 +T CAR|SAO 251178|HD 94776|CP-59 2840|PPM 358333|HR 4271|J105517.22-603101.2,f|V|K0,10:55:17.22|-36.10,-60:31:1.21|84.3,5.93,2000 +SAO 222423|HD 94724|CD-42 6595|PPM 315858|J105527.20-430113.9,f|S|A0,10:55:27.21|-53.19,-43:1:13.90|8.5,6.42,2000 +Leo 54A|BD+25 2314A|HR 4259|J105536.79+244458.9,f|D|A1,10:55:36.80|-78.46,24:44:58.99|-14.9,4.47,2000 +Leo 54B|BD+25 2314B|J105537.24+244456.5,f|D|A2,10:55:37.25|-78.46,24:44:56.58|-14.9,6.29,2000 +Leo 55|SAO 118574|HD 94672|BD+01 2501|PPM 157341|HR 4265|J105542.39+004412.9,f|D|F2,10:55:42.40|103.04,0:44:12.92|-3.4,5.92,2000 +UMa 46|BD+34 2181|PPM 75557|HR 4258|J105544.38+333024.9,f|S|K1,10:55:44.38|-111.69,33:30:24.94|-27.6,5.03,2000 +Leo 56|VY LEO|SAO 118576|BD+06 2369|PPM 157344|HR 4267|J105601.46+061107.3,f|V|M5,10:56:1.47|-22.52,6:11:7.33|-5.5,5.98,2000 +HD 94669|BD+42 2162|HR 4264|J105614.51+420029.3,f|S|K2,10:56:14.52|14.38,42:0:29.36|-97.5,6.03,2000 +V18561|BD+23 2279|HR 4269|J105616.85+222106.0,f|V|K2,10:56:16.85|-36.21,22:21:6.06|8.2,6.15,2000 +LMi 50|HD 94747|BD+26 2152|J105634.42+253000.8,f|S|K1,10:56:34.43|-23.02,25:30:0.88|-7.9,6.36,2000 +Ant Iota|CD-36 6808|PPM 288317|HR 4273|J105643.05-370815.9,f|S|K1,10:56:43.05|74.98,-37:8:15.96|-124.5,4.60,2000 +IW VEL|SAO 238622|HD 94985|CD-50 5534|HR 4274|J105707.84-504554.0,f|V|A4,10:57:7.85|-37.57,-50:45:54.06|12.9,5.91,2000 +SAO 256775|CP-74 755|HR 4279|J105715.78-750559.1,f|S|K1,10:57:15.78|-11.15,-75:5:59.14|3.9,6.12,2000 +U CAR|SAO 238635|CP-59 2888|PPM 339614|HR 4276|J105748.18-594355.8,f|V|G3,10:57:48.19|-5.14,-59:43:55.88|2.1,6.34,2000 +V5041|HD 95221|CD-33 7401|PPM 288376|HR 4282|J105913.74-334415.3,f|D|F2,10:59:13.74|-4.49,-33:44:15.34|-58,5.73,2000 +Oct Eta|HD 96124|CP-83 386|HR 4312|J105913.76-843538.0,f|S|A1,10:59:13.77|-64.13,-84:35:38.02|-8,6.19,2000 +HD 95324|CP-60 2433|PPM 358377|J105914.01-611914.6,f|D|B8,10:59:14.01|-28.72,-61:19:14.66|1.9,6.19,2000 +V5038|BD+52 1528|PPM 32891|HR 4275|J105917.87+515256.4,f|V|K2,10:59:17.87|-18.06,51:52:56.49|-3.9,6.20,2000 +UMa 47|HD 95128|BD+41 2147|PPM 52175|HR 4277|J105927.97+402548.9,f|S|G1,10:59:27.97|-315.93,40:25:48.92|55.2,5.03,2000 +V18575|SAO 156372|HD 95234|SD-15 3174|HR 4284|J105930.92-162113.3,f|V|M2,10:59:30.93|-43.18,-16:21:13.32|-8.6,5.90,2000 +V18574|HD 95129|BD+36 2139|PPM 75599|HR 4278|J105932.78+360535.1,f|V|M2,10:59:32.79|67.27,36:5:35.16|-51.1,6.00,2000 +Alkes|Alkres|Crt Alpha-7|SAO 156375|HD 95272|SD-17 3273|PPM 223763|HR 4287|J105946.46-181755.6,f|S|K0,10:59:46.46|-462.42,-18:17:55.62|129.1,4.08,2000 +BD+78 367|PPM 7813|HR 4272|J105956.82+774612.6,f|S|G9,10:59:56.83|-70.29,77:46:12.63|-20.8,6.19,2000 +SAO 222485|HD 95347|CD-43 6692|HR 4292|J105959.37-434825.5,f|S|B8,10:59:59.38|-62.68,-43:48:25.60|10,5.81,2000 +SAO 238674|HD 95429|CD-51 5220|PPM 339659|HR 4296|J110008.27-514904.0,f|D|A3,11:0:8.28|-63.98,-51:49:4.08|2.8,6.16,2000 +SAO 222487|CD-41 6276|PPM 315943|HR 4293|J110009.26-421333.0,f|S|A3,11:0:9.26|22.99,-42:13:33.09|4.5,4.38,2000 +V18579|SAO 156382|HD 95314|SD-13 3271|PPM 223779|HR 4289|J110011.69-140500.1,f|V|K5,11:0:11.69|-8.73,-14:5:0.13|-28.7,5.85,2000 +HD 95212|BD+46 1680|PPM 52183|J110014.70+453134.5,f|S|K5,11:0:14.70|9.67,45:31:34.59|3,5.45,2000 +HD 95241|BD+43 2068|PPM 52185|HR 4285|J110020.67+425442.2,f|D|F9,11:0:20.68|-107.88,42:54:42.21|-122.1,6.03,2000 +HD 95233|BD+52 1529|HR 4283|J110025.55+513007.5,f|S|G9,11:0:25.55|-29.97,51:30:7.57|-16,6.41,2000 +Leo 58|HD 95345|BD+04 2407|PPM 157415|HR 4291|J110033.64+033702.9,f|S|K0,11:0:33.65|15.72,3:37:2.98|-16.2,4.85,2000 +SAO 238687|CP-52 4109|PPM 339671|J110036.24-530642.5,f|S|K3,11:0:36.25|-86.08,-53:6:42.59|15.4,6.45,2000 +HD 95456|CD-31 8696|HR 4298|J110040.78-315021.7,f|S|F8,11:0:40.78|-77.48,-31:50:21.73|103,6.07,2000 +Leo 59|SAO 118615|HD 95382|BD+06 2384|PPM 157421|HR 4294|J110044.80+060605.2,f|D|A5,11:0:44.80|-51.01,6:6:5.22|-22.2,5.00,2000 +UMa 49|BD+39 2400|PPM 75613|HR 4288|J110050.41+391243.5,f|S|F0,11:0:50.42|-80.89,39:12:43.53|-16.3,5.07,2000 +SAO 156396|HD 95441|SD-15 3178|HR 4297|J110057.38-154733.6,f|S|K0,11:0:57.39|86.60,-15:47:33.66|-36.8,6.35,2000 +HD 95256|BD+64 824|PPM 17679|HR 4286|J110105.65+632515.9,f|S|A2,11:1:5.66|-51.01,63:25:16.00|-51.4,6.37,2000 +Leo 61|V5059|SAO 137947|HD 95578|BD-01 2471|PPM 178358|HR 4299|J110149.67-022904.5,f|V|M0,11:1:49.67|9.59,-2:29:4.50|-36.1,4.72,2000 +Merak|Mirak|UMa Beta-48|V5053|HD 95418|BD+57 1302|PPM 32912|HR 4295|J110150.47+562256.7,f|V|A1,11:1:50.48|81.64,56:22:56.74|33.7,2.35,2000 +Leo 60|V18592|BD+20 2547|J110219.77+201047.4,f|V|A1,11:2:19.78|-9.57,20:10:47.43|39.6,4.41,2000 +SAO 179456|HD 95698|CD-26 8302|PPM 258448|J110224.45-264953.4,f|D|F1,11:2:24.45|67.86,-26:49:53.42|-123.7,6.21,2000 +SAO 137963|HD 95771|BD+00 2728|PPM 178367|J110314.54-004508.4,f|S|F0,11:3:14.54|-19.80,-0:45:8.44|-113.3,6.12,2000 +SAO 156421|SD-10 3184|J110314.87-111812.4,f|D|G7,11:3:14.88|-81.78,-11:18:12.49|-107.1,5.51,2000 +HD 95857|CD-31 8726|PPM 288455|J110316.05-315739.0,f|S|M1,11:3:16.06|-42.00,-31:57:39.06|-26.3,6.45,2000 +HD 95572|BD+70 645|PPM 7831|J110327.38+700150.6,f|S|K0,11:3:27.39|10.71,70:1:50.66|-33.2,6.45,2000 +SAO 156427|SD-12 3333|PPM 223869|J110336.53-132605.7,f|S|G5,11:3:36.54|4.23,-13:26:5.71|-3.8,6.34,2000 +Leo 62|SAO 118634|HD 95849|BD+00 2729|J110336.59-000002.9,f|S|K3,11:3:36.59|-60.30,-0:0:3.00|-0.4,5.94,2000 +Dubhe|Dubb|Ak|UMa Alpha-50|V5070|HD 95689|BD+62 1161|J110343.66+614503.7,f|D|K0,11:3:43.67|-136.45,61:45:3.72|-35.2,1.82,2000 +CP-57 4174|PPM 339717|J110400.22-575719.1,f|S|B3,11:4:0.23|-18.38,-57:57:19.19|0.7,6.16,2000 +SAO 222538|HD 96113|CD-47 6466|HR 4311|J110431.20-474044.7,f|S|A8,11:4:31.20|-115.43,-47:40:44.77|32.7,5.68,2000 +UMa 51A|HD 95934|BD+39 2414|PPM 75654|J110431.22+381428.9,f|D|A3,11:4:31.23|-72.10,38:14:28.91|1.4,6.03,2000 +HD 96146|CD-35 6954|PPM 288486|HR 4313|J110454.19-354816.8,f|S|A2,11:4:54.19|-21.65,-35:48:16.83|4.5,5.43,2000 +Leo Chi-63A|V5079|SAO 118648|BD+08 2455|PPM 157485|J110501.02+072009.6,f|D|F2,11:5:1.03|-344.41,7:20:9.63|-47.4,4.62,2000 +SAO 222548|HD 96224|CD-48 6157|HR 4316|J110504.11-492332.2,f|S|B9,11:5:4.11|-36.32,-49:23:32.28|11,6.10,2000 +Hya Chi1|SAO 179514|CD-26 8338|PPM 258519|HR 4314|J110519.90-271737.0,f|D|F3,11:5:19.91|-190.75,-27:17:37.00|-6.9,4.93,2000 +SAO 156448|SD-10 3190|PPM 223913|HR 4315|J110533.99-110520.0,f|S|F0,11:5:33.99|25.76,-11:5:20.04|-71.4,6.09,2000 +Hya Chi2|Chi2 Hydrae|SAO 179522|HD 96314|CD-26 8342|PPM 258531|HR 4317|J110557.57-271716.2,f|V|A0,11:5:57.57|34.39,-27:17:16.27|-17.1,5.71,2000 +SAO 238763|CD-50 5686|PPM 339753|HR 4318|J110605.74-511246.5,f|S|G8,11:6:5.74|-0.56,-51:12:46.51|-72.3,6.29,2000 +SAO 251267|HD 96568|CP-64 1630|HR 4326|J110624.25-645023.9,f|S|A3,11:6:24.25|-48.91,-64:50:23.90|-6.7,6.39,2000 +SAO 238775|HD 96484|CD-50 5693|PPM 339767|HR 4321|J110627.51-505724.2,f|S|K2,11:6:27.51|-55.27,-50:57:24.21|7.5,6.31,2000 +V5091|SAO 238779|HD 96544|CP-58 3112|PPM 339768|HR 4323|J110629.28-584030.0,f|D|K2,11:6:29.29|-10.06,-58:40:30.08|5.9,6.07,2000 +SAO 251269|HD 96566|CP-61 2067|PPM 358483|HR 4325|J110632.42-622526.8,f|S|G8,11:6:32.43|-36.80,-62:25:26.81|9.6,4.61,2000 +HD 96372|BD+18 2452|PPM 127977|J110644.02+174414.5,f|S|K5,11:6:44.03|25.57,17:44:14.51|-25.6,6.40,2000 +V18663|CP-70 1305|HR 4329|J110649.88-705240.5,f|D|B2,11:6:49.89|-22.55,-70:52:40.55|3.3,5.58,2000 +Leo 65|V5090|SAO 118668|HD 96436|BD+02 2387|PPM 157524|HR 4319|J110654.20+015719.8,f|D|G9,11:6:54.21|-383.03,1:57:19.89|-85.7,5.53,2000 +V0815 CEN|SAO 222581|HD 96616|CD-41 6343|HR 4327|J110716.69-423819.2,f|D|Ap,11:7:16.69|-82.10,-42:38:19.25|41.2,5.17,2000 +SAO 222583|CD-47 6525|J110734.13-483823.9,f|S|K3,11:7:34.13|-15.26,-48:38:23.94|23.1,6.42,2000 +Leo 64|HD 96528|BD+24 2318|HR 4322|J110739.70+231925.5,f|S|A5,11:7:39.71|-17.22,23:19:25.54|9.8,6.48,2000 +SAO 179568|HD 96723|CD-29 8877|PPM 258581|HR 4331|J110815.77-295820.9,f|S|A1,11:8:15.78|9.10,-29:58:20.95|-12.9,6.47,2000 +V0371 CAR|SAO 251286|HD 96919|CP-61 2075|PPM 358516|HR 4338|J110833.99-615649.8,f|V|B9,11:8:34.00|-5.86,-61:56:49.83|2,5.15,2000 +V0382 CAR|SAO 238813|HD 96918|CP-58 3189|HR 4337|J110835.38-585830.1,f|V|G4,11:8:35.39|-5.03,-58:58:30.13|2.1,3.92,2000 +V5101|SAO 179577|HD 96819|CD-27 7886|PPM 258592|HR 4334|J110843.99-280450.4,f|V|A1,11:8:44.00|-73.05,-28:4:50.41|-22.2,5.43,2000 +Leo 67|HD 96738|BD+25 2344|HR 4332|J110849.09+243930.4,f|D|A3,11:8:49.09|10.22,24:39:30.47|6.1,5.69,2000 +CO UMA|HD 96813|BD+37 2162|HR 4333|J110919.08+361833.7,f|V|M3,11:9:19.08|-44.00,36:18:33.76|-22.8,5.78,2000 +V5107|HD 96834|BD+43 2083|PPM 52276|HR 4336|J110938.50+431227.8,f|V|M2,11:9:38.50|-67.02,43:12:27.85|-6.4,5.91,2000 +EP UMA|BD+68 632|J110939.78+671236.7,f|V|F0,11:9:39.79|-87.44,67:12:36.75|-27.4,6.07,2000 +UMa Psi-52|HD 96833|BD+45 1897|PPM 52277|HR 4335|J110939.80+442954.5,f|S|K1,11:9:39.81|-62.38,44:29:54.55|-27.4,3.00,2000 +V5111|CD-31 8816|PPM 288575|HR 4339|J110953.39-322203.1,f|V|A2,11:9:53.39|17.48,-32:22:3.10|-29.6,5.78,2000 +HD 97472|CP-70 1336|HR 4349|J111129.54-712610.2,f|S|K2,11:11:29.54|-16.76,-71:26:10.28|4.1,6.34,2000 +Crt Beta-11|SAO 179624|HD 97277|SD-22 3095|PPM 258664|HR 4343|J111139.48-224933.0,f|S|A2,11:11:39.49|4.70,-22:49:33.05|-99.1,4.46,2000 +HD 97244|BD+15 2301|HR 4341|J111143.75+142400.5,f|S|A5,11:11:43.76|-60.29,14:24:0.55|-13.2,6.31,2000 +SAO 179628|HD 97344|CD-26 8412|PPM 258671|J111157.84-264822.0,f|S|K0,11:11:57.84|-27.04,-26:48:22.01|15.9,6.44,2000 +V0532 CAR|SAO 238855|HD 97451|CP-57 4405|PPM 339848|J111203.54-582524.0,f|V|M4,11:12:3.54|-49.72,-58:25:24.08|-0.8,6.33,2000 +SAO 222635|HD 97413|CD-45 6771|PPM 316155|J111210.20-461600.3,f|S|A1,11:12:10.20|-51.74,-46:16:0.34|5.6,6.28,2000 +V5119|HD 97138|BD+69 602|PPM 17763|J111210.93+681618.7,f|V|A3,11:12:10.94|27.71,68:16:18.73|6.6,6.41,2000 +V5129|HD 97393|CD-31 8847|HR 4346|J111214.79-322601.6,f|V|M1,11:12:14.79|11.65,-32:26:1.66|13.3,6.37,2000 +Crt Psi|SAO 156528|HD 97411|SD-17 3321|HR 4347|J111230.37-182959.5,f|D|A0,11:12:30.37|-19.63,-18:29:59.51|-25.5,6.10,2000 +HD 97334|BD+36 2162|PPM 75733|HR 4345|J111232.35+354850.6,f|D|G0,11:12:32.35|-248.51,35:48:50.69|-151.3,6.41,2000 +SAO 222639|HD 97495|CD-48 6263|J111233.05-490603.5,f|S|A3,11:12:33.06|-99.29,-49:6:3.59|33.7,5.37,2000 +SAO 179638|HD 97428|SD-20 3374|PPM 258681|HR 4348|J111234.80-214457.6,f|S|K0,11:12:34.80|12.82,-21:44:57.62|4.7,6.39,2000 +V0533 CAR|SAO 251316|HD 97534|CP-59 3190|PPM 358566|HR 4352|J111236.01-601903.4,f|D|A6,11:12:36.01|-6.24,-60:19:3.45|2.3,4.62,2000 +HD 97583|CP-63 1860|PPM 358568|HR 4355|J111245.20-641011.1,f|D|B8,11:12:45.21|-46.99,-64:10:11.17|5.4,5.22,2000 +SAO 222643|CD-49 5937|PPM 316167|HR 4353|J111256.71-494409.9,f|S|G8,11:12:56.72|-25.98,-49:44:9.92|6.4,6.12,2000 +V18698|SAO 222647|HD 97576|CD-43 6872|PPM 316173|HR 4354|J111314.68-442219.9,f|V|K5,11:13:14.69|-5.36,-44:22:19.98|1.9,5.77,2000 +V18700|SAO 238877|CP-58 3315|PPM 339871|HR 4361|J111330.78-593709.5,f|V|B1,11:13:30.78|-7.51,-59:37:9.54|-0.6,5.74,2000 +SAO 238878|HD 97651|CP-52 4350|PPM 339875|J111339.39-531354.5,f|S|K2,11:13:39.39|-16.43,-53:13:54.52|37.2,5.75,2000 +BD+41 2170|HR 4351|J111340.09+410519.8,f|D|K2,11:13:40.09|-13.68,41:5:19.81|16.3,6.34,2000 +Leo 69|SAO 118731|HD 97585|BD+00 2761|HR 4356|J111345.55-000410.2,f|S|A0,11:13:45.55|-48.15,-0:4:10.21|2.7,5.40,2000 +SAO 118735|BD+08 2476|PPM 157649|HR 4358|J111401.83+080338.5,f|D|K3,11:14:1.83|46.19,8:3:38.50|-106.8,5.79,2000 +Zosma|Dhur|Zubra|Zozca|Duhr|Leo Delta-68A|V5143|BD+21 2298|HR 4357|J111406.50+203125.3,f|D|A4,11:14:6.50|143.29,20:31:25.38|-130.4,2.56,2000 +Chertan|Coxa|Chort|Leo Theta-70|V5144|HD 97633|BD+16 2234|HR 4359|J111414.40+152546.4,f|V|A2,11:14:14.41|-58.99,15:25:46.45|-79.4,3.33,2000 +SAO 222671|HD 97866|CD-43 6899|HR 4364|J111454.12-434401.3,f|S|K4,11:14:54.12|-16.47,-43:44:1.33|1.9,6.20,2000 +Leo 72|FN LEO|HD 97778|BD+23 2322|HR 4362|J111512.22+230543.8,f|V|M3,11:15:12.23|-22.21,23:5:43.81|-9.5,4.57,2000 +SAO 238914|CP-56 4352|PPM 339913|J111542.74-572121.1,f|S|A3,11:15:42.75|-13.27,-57:21:21.18|-5.4,6.43,2000 +Leo 73|BD+14 2367|HR 4365|J111551.89+131827.2,f|D|K3,11:15:51.90|5.11,13:18:27.28|-6.2,5.31,2000 +HD 97855|BD+53 1480A|HR 4363|J111604.03+524623.3,f|D|F6,11:16:4.03|159.80,52:46:23.38|56.8,6.49,2000 +SAO 222687|CD-45 6837|PPM 316234|J111627.82-455248.0,f|D|F3,11:16:27.82|-139.82,-45:52:48.04|68.7,6.30,2000 +Leo Phi-74A|SD-02 3315|HR 4368|J111639.70-033905.7,f|D|A7,11:16:39.70|-108.23,-3:39:5.76|-35.8,4.47,2000 +HD 97989|BD+50 1807|PPM 52339|HR 4367|J111641.84+492834.5,f|S|K5,11:16:41.85|-85.18,49:28:34.50|-11,5.88,2000 +SV CRT|SD-06 3344|PPM 194312|HR 4369|J111658.17-070804.8,f|D|A8,11:16:58.18|-7.14,-7:8:4.88|7.7,6.11,2000 +HD 98161|CD-37 7146|PPM 288731|HR 4372|J111712.00-380051.7,f|S|A3,11:17:12.01|-71.62,-38:0:51.72|9.3,6.24,2000 +SAO 222695|HD 98176|CD-41 6450|PPM 316249|J111714.32-415603.5,f|S|A0,11:17:14.32|-53.90,-41:56:3.57|-9.1,6.45,2000 +Leo 75|SAO 118764|HD 98118|BD+02 2409|PPM 157698|HR 4371|J111717.40+020038.0,f|S|M0,11:17:17.40|55.17,2:0:38.00|-142.9,5.17,2000 +V0535 CAR|SAO 251341|HD 98292|CP-67 1703|HR 4379|J111719.04-674924.6,f|D|M2,11:17:19.04|14.15,-67:49:24.66|-6.6,6.08,2000 +HD 98221|CD-34 7345|PPM 288735|HR 4373|J111738.86-344414.4,f|S|F4,11:17:38.86|-27.61,-34:44:14.45|-16.8,6.44,2000 +Alula Australis|UMa Xi-53A|Xi Ursae Majoris|BD+32 2132|HR 4375|J111810.94+313145.6,f|D|F8,11:18:10.94|-429.60,31:31:45.25|-586,3.79,2000 +Alula Borealis|UMa Nu-54|V18715|HD 98262|BD+33 2098|HR 4377|J111828.73+330539.5,f|D|K3,11:18:28.74|-26.64,33:5:39.50|27.5,3.49,2000 +SAO 256823|HD 98617|CP-78 638|HR 4385|J111834.39-794007.1,f|S|A8,11:18:34.40|57.70,-79:40:7.13|-20.1,6.35,2000 +Leo 76|SAO 118778|HD 98366|BD+02 2411|PPM 157722|HR 4381|J111854.95+013901.4,f|S|K5,11:18:54.96|-38.23,1:39:1.42|-56,5.90,2000 +UMa 55|V18718|HD 98353|BD+38 2225|PPM 75796|J111907.90+381108.0,f|V|A1,11:19:7.90|-57.18,38:11:8.00|-68.1,4.76,2000 +SAO 251357|CP-63 1881|PPM 358636|HR 4384|J111916.43-643456.9,f|S|F6,11:19:16.43|-301.31,-64:34:56.97|43.9,5.99,2000 +Crt Delta-12|SD-13 3345|PPM 224248|HR 4382|J111920.44-144642.7,f|S|G9,11:19:20.45|-124.44,-14:46:42.75|206.6,3.57,2000 +SAO 256826|HD 98672|CP-74 801|HR 4387|J111936.52-750832.8,f|S|B9,11:19:36.53|-23.92,-75:8:32.83|-0.9,6.26,2000 +SAO 256827|HD 98671|CP-72 1124|J111950.75-725729.8,f|S|A0,11:19:50.75|-41.89,-72:57:29.85|-5.8,6.46,2000 +SAO 256828|HD 98695|CP-71 1238|HR 4389|J112004.11-715939.6,f|S|B4,11:20:4.12|-24.95,-71:59:39.61|-1.6,6.41,2000 +HD 98499|BD+67 692|PPM 17818|HR 4383|J112053.77+670602.6,f|S|K0,11:20:53.77|43.78,67:6:2.64|-50.2,6.20,2000 +Cen Pi|SAO 238986|HD 98718|CP-53 4498|PPM 339993|J112100.40-542927.6,f|D|B5,11:21:0.41|-35.29,-54:29:27.67|-2.2,3.89,2000 +Leo Sigma-77|HD 98664|BD+06 2437|PPM 157768|HR 4386|J112108.19+060145.5,f|S|B9,11:21:8.19|-91.74,6:1:45.56|-12.8,4.05,2000 +V18755|HD 98673|BD+57 1316|HR 4388|J112149.28+570429.4,f|V|A7,11:21:49.29|-58.29,57:4:29.49|5.8,6.43,2000 +SAO 256832|CP-76 662|HR 4397|J112156.89-773630.1,f|S|A5,11:21:56.90|-77.90,-77:36:30.13|-8.4,6.43,2000 +SAO 222751|HD 98892|CD-43 7006|PPM 316333|HR 4393|J112223.11-443845.3,f|S|G8,11:22:23.11|-44.82,-44:38:45.33|-31.7,6.11,2000 +UMa 56|HD 98839|BD+44 2083|PPM 52395|HR 4392|J112249.58+432857.7,f|S|G8,11:22:49.58|-36.90,43:28:57.73|-13.9,4.99,2000 +HD 98772|BD+65 828|PPM 17828|HR 4391|J112251.24+641949.8,f|S|A1,11:22:51.24|-4.48,64:19:49.85|35.4,6.03,2000 +CP-56 4449|HR 4398|J112308.13-564645.6,f|S|A4,11:23:8.13|-31.64,-56:46:45.68|5.7,5.82,2000 +HD 98993|CD-35 7163|PPM 288853|HR 4396|J112312.68-360953.1,f|D|K6,11:23:12.68|-26.52,-36:9:53.17|-0.6,5.00,2000 +SAO 118825|BD+00 2782|HR 4394|J112317.95+000755.3,f|S|K0,11:23:17.95|-39.60,0:7:55.38|-8,6.04,2000 +SAO 251383|CP-64 1657A|PPM 358676|J112321.40-645716.9,f|D|B5,11:23:21.40|-22.61,-64:57:16.97|7,5.80,2000 +Crt Lambda-13|SAO 156646|HD 98991|SD-17 3367|PPM 224336|HR 4395|J112321.88-184647.9,f|S|F5,11:23:21.88|-305.90,-18:46:47.90|-29.1,5.08,2000 +Leo Iota-78|V5184|BD+11 2348|HR 4399|J112355.45+103146.2,f|D|F4,11:23:55.45|140.69,10:31:46.23|-77.8,3.96,2000 +Leo 79|SAO 118831|BD+02 2418|PPM 157811|J112402.32+012427.9,f|S|G8,11:24:2.33|-16.50,1:24:27.96|0.7,5.39,2000 +SAO 256834|HD 99264|CP-71 1248|J112411.12-721523.7,f|S|B2,11:24:11.13|-26.01,-72:15:23.79|-2.5,5.59,2000 +SAO 222773|HD 99171|CD-41 6529|PPM 316373|J112422.05-424008.7,f|S|B2,11:24:22.05|-8.49,-42:40:8.77|-0.7,6.13,2000 +Crt Epsilon-14|SAO 156658|HD 99167|SD-10 3260|PPM 224361|J112436.59-105133.5,f|S|K5,11:24:36.59|-24.16,-10:51:33.56|24.5,4.81,2000 +Crt Gamma-15|SAO 156661|HD 99211|SD-16 3244|PPM 224369|J112452.92-174102.4,f|D|A5,11:24:52.92|-97.04,-17:41:2.44|3.2,4.08,2000 +HD 99196|BD+12 2335|PPM 128238|J112458.92+112549.0,f|S|K4,11:24:58.93|-101.89,11:25:49.05|-7.4,5.79,2000 +HD 99322|CD-35 7189|J112529.45-360347.0,f|S|K0,11:25:29.45|-107.67,-36:3:47.02|17.7,5.22,2000 +V18765|HD 99333|CD-37 7235|HR 4411|J112533.09-374451.2,f|D|M3,11:25:33.10|-41.75,-37:44:51.27|-11.5,5.92,2000 +Leo 81|HD 99285|BD+17 2356|PPM 128245|J112536.37+162723.5,f|D|F2,11:25:36.37|-141.12,16:27:23.54|-4.9,5.58,2000 +HD 99453|CP-63 1893|HR 4413|J112543.14-635820.9,f|S|F7,11:25:43.15|-314.36,-63:58:20.91|-65.5,5.17,2000 +Leo 80|SAO 118851|HD 99329|BD+04 2463|PPM 157849|J112550.05+035136.3,f|S|F3,11:25:50.05|-83.06,3:51:36.40|-34.7,6.35,2000 +HD 99283|BD+56 1518|J112557.10+555101.6,f|S|K0,11:25:57.11|-71.91,55:51:1.65|48.8,5.74,2000 +HD 99373|BD+34 2222|PPM 75871|HR 4412|J112625.55+332702.1,f|S|F7,11:26:25.56|-35.79,33:27:2.19|17.5,6.33,2000 +V18766|HD 99556|CP-60 2941|PPM 358715|HR 4415|J112635.41-610654.6,f|D|B3,11:26:35.42|-13.84,-61:6:54.60|1.8,5.29,2000 +Leo 83A|SAO 118864|HD 99491|BD+03 2502|PPM 157865|HR 4414|J112645.32+030047.1,f|D|K0,11:26:45.32|-726.34,3:0:47.17|181.9,6.47,2000 +HD 99574|CP-52 4567|HR 4417|J112647.26-530935.6,f|D|K0,11:26:47.27|-36.96,-53:9:35.62|18.6,5.81,2000 +Crt Kappa-16|SAO 156685|HD 99564|SD-11 3098|PPM 224419|HR 4416|J112709.51-122124.2,f|D|F4,11:27:9.52|-98.32,-12:21:24.30|23.8,5.93,2000 +SAO 138216|HD 99651|BD-00 2442|PPM 178498|HR 4419|J112753.71-014159.8,f|D|K5,11:27:53.71|-35.23,-1:41:59.81|3.1,6.26,2000 +Leo Tau-84A|SAO 118875|HD 99648|BD+03 2504|PPM 157884|HR 4418|J112756.24+025122.5,f|D|G7,11:27:56.24|17.38,2:51:22.55|-10.4,4.94,2000 +QT HYA|HD 99712|CD-34 7471|PPM 288956|J112758.67-351943.8,f|V|K5,11:27:58.67|9.18,-35:19:43.86|-0.1,6.43,2000 +V18769|SAO 256843|HD 99872|CP-71 1253|PPM 371123|HR 4425|J112818.41-722826.3,f|D|B3,11:28:18.41|-25.84,-72:28:26.32|-3.5,6.11,2000 +SAO 222813|CD-41 6565|HR 4423|J112835.07-424027.1,f|D|B9,11:28:35.08|-34.63,-42:40:27.13|6.3,5.14,2000 +UMa 57A|HD 99787|BD+40 2433|HR 4422|J112904.12+392013.1,f|D|A2,11:29:4.12|-53.83,39:20:13.11|13.2,5.36,2000 +HD 99747|BD+62 1183|PPM 17871|HR 4421|J112904.56+614642.1,f|S|F5,11:29:4.56|-113.92,61:46:42.12|239.6,5.84,2000 +V0808 CEN|SAO 251422|HD 99953|CP-62 2039|PPM 358744|J112915.13-633314.1,f|V|B2,11:29:15.14|-6.28,-63:33:14.18|1.3,6.48,2000 +V18774|SAO 179935|HD 99922|CD-2310009A|HR 4428|J112938.61-242750.4,f|D|A0,11:29:38.62|-49.70,-24:27:50.44|19.4,5.82,2000 +Leo 85|BD+16 2266|PPM 128298|HR 4426|J112941.84+152447.7,f|S|K3,11:29:41.85|-28.05,15:24:47.77|-47.7,5.73,2000 +HD 99859|BD+57 1324|PPM 33114|HR 4424|J112943.56+564415.2,f|S|A5,11:29:43.56|-89.51,56:44:15.26|-33.8,6.29,2000 +Leo 87|SAO 138238|HD 99998|SD-02 3360|HR 4432|J113018.89-030012.6,f|S|K3,11:30:18.89|19.77,-3:0:12.60|-17.1,4.76,2000 +EE UMA|HD 99967|BD+47 1880|J113024.82+463927.1,f|V|K2,11:30:24.83|-5.35,46:39:27.12|27.7,6.31,2000 +Leo 86|BD+19 2459|HR 4433|J113029.03+182435.2,f|S|K0,11:30:29.03|-81.55,18:24:35.28|25.9,5.55,2000 +UMa 58|HD 99984|BD+43 2122|HR 4431|J113031.13+431023.6,f|S|F4,11:30:31.13|-49.23,43:10:23.67|81.8,5.95,2000 +BD+48 1952|PPM 52484|HR 4435|J113052.94+475544.1,f|S|G9,11:30:52.95|-222.12,47:55:44.10|-75.3,6.40,2000 +V0809 CEN|SAO 251437|CP-60 3011|PPM 358769|HR 4438|J113115.04-611642.4,f|V|A3,11:31:15.04|-6.42,-61:16:42.47|2,6.35,2000 +Giausar|Juza|Gianfar|Giansar|Dra Lambda-1|V5231|BD+70 665|PPM 17889|HR 4434|J113124.22+691951.8,f|V|M0,11:31:24.22|-41.14,69:19:51.87|-18.8,3.81,2000 +Leo 88A|BD+15 2345A|PPM 128323|HR 4437|J113144.94+142152.2,f|D|G0,11:31:44.95|-327.82,14:21:52.22|-188.7,6.27,2000 +Cen Omicron1|Omicron1 Centauri|SAO 239145|CP-58 3692|HR 4441|J113146.06-592631.4,f|D|G3,11:31:46.07|-4.12,-59:26:31.42|1.1,5.09,2000 +SAO 179964|SD-19 3285|J113147.55-204635.2,f|S|F7,11:31:47.55|-118.09,-20:46:35.30|39.3,6.24,2000 +Cen Omicron2|Omicron2 Centauri|SAO 239146|CP-58 3693|HR 4442|J113148.79-593056.3,f|V|A2,11:31:48.80|-6.62,-59:30:56.33|0.7,5.19,2000 +V5230|HD 99945|BD+81 373|PPM 1983|HR 4429|J113150.53+810738.1,f|V|A2,11:31:50.53|-144.23,81:7:38.12|34.2,6.13,2000 +N Hya|SAO 179967|CD-28 8928B|PPM 259117|HR 4443|J113216.03-291547.9,f|D|F8,11:32:16.04|-23.16,-29:15:47.91|138.3,5.74,2000 +SAO 179968|CD-28 8928A|PPM 259116|HR 4444|J113216.40-291539.6,f|D|F8,11:32:16.40|-20.28,-29:15:39.68|144.4,5.64,2000 +SAO 251451|CP-66 1605|PPM 358788|HR 4448|J113219.99-665742.5,f|S|K1,11:32:20.00|-0.12,-66:57:42.56|4.7,5.89,2000 +BD+61 1246|PPM 17899|HR 4439|J113220.73+610457.0,f|D|F8,11:32:20.74|-14.22,61:4:57.07|-95.1,5.48,2000 +V18788|SAO 179969|CD-26 8620|HR 4445|J113223.28-264448.4,f|V|M1,11:32:23.28|-82.92,-26:44:48.50|19.7,6.17,2000 +SAO 138265|SD-07 3250|PPM 194572|HR 4446|J113247.53-074939.0,f|S|K4,11:32:47.54|-7.58,-7:49:39.08|0.4,5.92,2000 +V18789|SAO 222856|CD-39 7168|HR 4447|J113248.08-402610.2,f|V|K6,11:32:48.08|-74.90,-40:26:10.30|58.6,5.64,2000 +V5246|CD-30 9303|HR 4449|J113254.13-310514.0,f|V|M2,11:32:54.13|-28.52,-31:5:14.01|4,5.14,2000 +Hya Xi|V18790|CD-31 9083|J113300.11-315127.4,f|D|G7,11:33:0.12|-209.07,-31:51:27.45|-41.6,3.54,2000 +SD-15 3295|PPM 224579|HR 4451|J113314.82-161649.3,f|S|F9,11:33:14.82|20.01,-16:16:49.37|-44.1,6.05,2000 +V18794|SAO 118923|BD+03 2519|J113336.34+022956.5,f|V|K5,11:33:36.35|22.93,2:29:56.52|-15.9,6.47,2000 +SAO 222863|CD-39 7175|PPM 316518|HR 4453|J113337.19-403511.8,f|D|A2,11:33:37.20|-83.61,-40:35:11.89|27.1,5.41,2000 +BD+37 2195|PPM 75944|HR 4452|J113356.28+364856.2,f|S|K0,11:33:56.28|-126.21,36:48:56.21|-50.4,6.38,2000 +Leo 89|SAO 118929|BD+03 2521|PPM 157993|HR 4455|J113421.94+030336.5,f|S|F5,11:34:21.95|-181.69,3:3:36.60|-102.7,5.76,2000 +V18798|CD-32 8179|HR 4458|J113429.48-324952.8,f|D|K0,11:34:29.49|-671.04,-32:49:52.82|823.9,5.96,2000 +Leo 90A|BD+17 2374|PPM 128363|HR 4456|J113442.49+164748.8,f|D|B4,11:34:42.49|-8.76,16:47:48.89|-0.6,5.95,2000 +SAO 239189|CP-53 4637|J113445.65-541550.7,f|S|B9,11:34:45.66|-55.54,-54:15:50.73|16.6,4.62,2000 +V5253|SAO 222883|CD-48 6630|PPM 316543|HR 4462|J113456.85-490811.3,f|V|K1,11:34:56.85|-172.43,-49:8:11.37|188.1,5.50,2000 +SAO 138284|SD-03 3144|PPM 194612|J113458.90-042140.6,f|S|K0,11:34:58.90|-44.57,-4:21:40.65|-45.8,6.44,2000 +BD+21 2331|HR 4459|J113503.75+202629.5,f|S|G9,11:35:3.75|-58.61,20:26:29.56|-1.2,6.45,2000 +BD+55 1473|PPM 33154|HR 4457|J113504.90+544707.5,f|S|K0,11:35:4.91|10.64,54:47:7.51|18,5.63,2000 +V0763 CEN|SAO 222887|CD-46 7199|PPM 316549|HR 4463|J113513.28-472221.2,f|D|M3,11:35:13.28|-87.26,-47:22:21.29|-7.7,5.69,2000 +SAO 251469|CP-60 3090|PPM 358818|J113542.33-611716.3,f|D|A0,11:35:42.34|-6.99,-61:17:16.33|1.5,6.24,2000 +Cen Lambda|SAO 251472|CP-62 2127|HR 4467|J113546.88-630111.4,f|D|B9,11:35:46.88|-33.82,-63:1:11.43|-6.9,3.12,2000 +SAO 222895|CD-46 7205|PPM 316561|HR 4466|J113555.58-473829.9,f|S|A7,11:35:55.59|33.96,-47:38:29.91|-50.4,5.26,2000 +Dra 2|BD+70 670|PPM 17933|HR 4461|J113602.79+691922.6,f|S|K0,11:36:2.80|109.21,69:19:22.63|-126.4,5.20,2000 +BD+28 2022|HR 4465|J113617.95+274652.8,f|D|F0,11:36:17.95|19.77,27:46:52.86|20,5.82,2000 +SAO 251479|CP-60 3140|HR 4472|J113622.36-610308.7,f|S|B2,11:36:22.37|-12.92,-61:3:8.76|1.7,5.84,2000 +CD-32 8199|PPM 289127|HR 4469|J113634.94-333412.2,f|D|K0,11:36:34.94|29.37,-33:34:12.21|-34,5.71,2000 +CD-36 7291|PPM 289132|J113640.72-371413.8,f|S|A1,11:36:40.72|-26.75,-37:14:13.87|2.7,6.30,2000 +Crt Theta-21|SAO 138296|SD-08 3202|PPM 194645|HR 4468|J113640.91-094808.0,f|S|B9,11:36:40.91|-59.27,-9:48:8.09|2.8,4.69,2000 +Leo Upsilon-91|SAO 138298|BD-00 2458|PPM 178542|HR 4471|J113656.93-004925.4,f|S|G8,11:36:56.93|1.35,-0:49:25.50|43.4,4.30,2000 +SAO 251486|CP-60 3182|PPM 358838|HR 4475|J113700.52-611700.3,f|S|K0,11:37:0.52|-228.18,-61:17:0.39|1.7,5.13,2000 +CD-32 8202|PPM 289139|HR 4473|J113701.21-325917.4,f|S|F6,11:37:1.22|-9.69,-32:59:17.46|-77.4,6.33,2000 +Cha Pi|SAO 256857|CP-75 744|PPM 371181|HR 4479|J113715.63-755347.5,f|S|F1,11:37:15.64|-128.22,-75:53:47.56|-1.2,5.65,2000 +SAO 222917|CD-47 6997|PPM 316596|HR 4476|J113733.99-474450.3,f|S|K2,11:37:33.99|-68.58,-47:44:50.31|28.1,5.46,2000 +V18811|BD+78 392|J113742.31+773544.5,f|V|K5,11:37:42.32|1.80,77:35:44.52|2.2,6.49,2000 +CP-66 1629|PPM 358856|HR 4485|J113748.37-673713.3,f|S|K0,11:37:48.38|-84.12,-67:37:13.37|-10.5,5.94,2000 +BD+51 1679|PPM 33176|HR 4474|J113753.00+503705.5,f|S|G9,11:37:53.00|-47.30,50:37:5.56|-26.5,6.12,2000 +V18821|CP-61 2463|PPM 358861|HR 4487|J113807.29-614935.6,f|V|Ap,11:38:7.30|-62.04,-61:49:35.63|-3.5,5.14,2000 +V18818|SAO 118961|BD+09 2523|HR 4478|J113809.83+085301.6,f|V|K1,11:38:9.83|-58.39,8:53:1.65|6,6.19,2000 +V0871 CEN|SAO 251511|CP-62 2168|PPM 358865|J113820.36-632221.8,f|D|O7,11:38:20.36|-6.25,-63:22:21.89|1.5,6.50,2000 +UMa 59|BD+44 2110|PPM 52549|HR 4477|J113820.56+433731.5,f|S|F2,11:38:20.57|-146.15,43:37:31.54|-35,5.57,2000 +SAO 138314|BD-01 2546|PPM 178555|HR 4484|J113824.06-022609.2,f|D|G9,11:38:24.07|-38.96,-2:26:9.24|15.1,6.27,2000 +Vir Omega-1|Omega Virginis|SAO 118965|BD+08 2532|HR 4483|J113827.60+080803.4,f|S|M4,11:38:27.61|-3.42,8:8:3.48|6.3,5.32,2000 +BD+34 2242|HR 4482|J113832.32+333732.9,f|S|K2,11:38:32.32|-16.11,33:37:32.98|-13.7,6.28,2000 +UMa 60|BD+47 1894|PPM 52551|J113833.51+465003.1,f|S|F5,11:38:33.51|-35.40,46:50:3.15|-27.4,6.08,2000 +Crt Iota-24|SD-12 3466|PPM 224699|HR 4488|J113840.01-131206.9,f|D|F7,11:38:40.02|99.60,-13:12:6.99|126.2,5.49,2000 +BD+45 1947A|PPM 52553|HR 4486|J113844.90+450630.2,f|D|G0,11:38:44.90|-593.90,45:6:30.30|14.8,6.44,2000 +BD+65 843|PPM 17949|HR 4481|J113849.13+642049.0,f|D|A5,11:38:49.14|12.47,64:20:49.08|1.1,6.50,2000 +CD-24 9867|PPM 259265|HR 4489|J113900.44-244315.9,f|S|G5,11:39:0.44|30.79,-24:43:15.94|-240.2,6.41,2000 +GT MUS|SAO 251522|CP-64 1685|HR 4492|J113929.59-652351.9,f|D|G2,11:39:29.60|-30.47,-65:23:51.97|-11.4,5.09,2000 +VX CRT|SAO 156819|SD-15 3323|PPM 224733|HR 4491|J113950.33-163712.8,f|V|M3,11:39:50.33|-17.54,-16:37:12.83|-8.6,6.21,2000 +SD-13 3420|PPM 224734|J113951.12-142806.7,f|D|A1,11:39:51.12|-36.46,-14:28:6.71|-7.1,6.22,2000 +Hya Omicron|V18834|CD-34 7610|PPM 289215|HR 4494|J114012.78-344440.7,f|V|B9,11:40:12.79|-44.00,-34:44:40.77|-1.8,4.70,2000 +V18835|BD+58 1331|PPM 33192|HR 4493|J114027.42+575813.4,f|V|B9,11:40:27.43|-9.39,57:58:13.46|12.7,6.34,2000 +V0914 CEN|SAO 239284|CP-53 4691|HR 4497|J114042.48-535806.9,f|V|M1,11:40:42.48|-10.85,-53:58:6.98|-23.9,5.96,2000 +Leo 92|BD+22 2391|HR 4495|J114047.06+212109.8,f|S|K1,11:40:47.07|-61.05,21:21:9.83|-46,5.26,2000 +V18841|SAO 251535|CP-61 2514|PPM 358895|HR 4499|J114053.63-620524.3,f|V|G3,11:40:53.63|-15.03,-62:5:24.36|1.1,4.94,2000 +SAO 258621|CP-82 469|J114101.30-830559.7,f|D|K0,11:41:1.31|-59.61,-83:5:59.77|10.2,6.33,2000 +UMa 61|V5291|BD+35 2270|HR 4496|J114103.01+341205.8,f|D|G8,11:41:3.02|-13.89,34:12:5.89|-380.5,5.31,2000 +CD-28 9027|PPM 259312|HR 4498|J114108.39-291146.5,f|S|G0,11:41:8.40|-305.10,-29:11:46.59|225.6,6.43,2000 +CD-42 7155|PPM 316658|J114119.79-430544.4,f|S|A0,11:41:19.79|-82.37,-43:5:44.40|4.2,5.53,2000 +UMa 62A|BD+32 2179|J114134.25+314445.8,f|D|F4,11:41:34.26|-351.81,31:44:45.81|30.6,5.75,2000 +V18843|BD+55 1481|J114143.49+551019.2,f|V|K5,11:41:43.50|-19.70,55:10:19.24|7.3,6.27,2000 +CD-31 9181|PPM 289242|J114143.94-322957.8,f|D|K5,11:41:43.95|-5.57,-32:29:57.85|-33.4,5.21,2000 +SD-19 3326|PPM 259339|J114203.52-201739.0,f|S|K0,11:42:3.53|-8.02,-20:17:39.00|-53.9,6.21,2000 +SAO 256864|CP-74 839|J114214.91-751338.3,f|S|G1,11:42:14.92|43.18,-75:13:38.34|-5.8,6.47,2000 +Dra 3|BD+67 714|PPM 17979|J114228.36+664441.6,f|S|K3,11:42:28.36|-45.01,66:44:41.66|40.2,5.31,2000 +SAO 256865|CP-78 677|PPM 371214|J114254.93-791823.0,f|S|K0,11:42:54.93|127.51,-79:18:23.00|-11,6.38,2000 +CD-36 7371|PPM 289274|J114327.18-371124.5,f|S|K3,11:43:27.19|-19.00,-37:11:24.56|-21.8,5.98,2000 +V0810 CEN|SAO 251555|CP-61 2559|PPM 358925|HR 4511|J114331.19-622921.8,f|V|G0,11:43:31.19|-5.82,-62:29:21.82|1.1,5.01,2000 +V18869|SAO 251559|CP-62 2250|PPM 358931|HR 4513|J114352.84-625241.8,f|V|A2,11:43:52.84|13.47,-62:52:41.81|-15.3,6.10,2000 +SAO 138375|SD-05 3340|PPM 194769|J114355.12-064037.7,f|S|G5,11:43:55.12|56.17,-6:40:37.78|-41.8,6.05,2000 +BD+26 2250|HR 4512|J114413.16+251305.9,f|D|K5,11:44:13.16|-13.57,25:13:5.98|9.8,6.01,2000 +Crt Zeta-27|SAO 156869|SD-17 3460|PPM 224852|HR 4514|J114445.77-182102.4,f|S|G8,11:44:45.78|27.19,-18:21:2.44|-24.6,4.71,2000 +SAO 222997|CD-48 6777|PPM 316728|HR 4516|J114512.63-490411.4,f|S|K1,11:45:12.64|-23.00,-49:4:11.44|10.9,6.26,2000 +Vir Xi-2|BD+09 2545|PPM 158171|HR 4515|J114517.04+081529.2,f|S|A4,11:45:17.04|59.67,8:15:29.23|-22.8,4.84,2000 +Mus Lambda|SAO 251575|CP-66 1640|PPM 358955|J114536.41-664343.5,f|D|A7,11:45:36.42|-100.45,-66:43:43.55|33.2,3.63,2000 +V5317|CD-44 7564|PPM 316748|HR 4519|J114543.96-454124.4,f|V|B6,11:45:43.97|-41.70,-45:41:24.48|4.8,5.28,2000 +Vir Nu-3|Nu Virginis|BD+07 2479|PPM 158181|HR 4517|J114551.55+063145.7,f|S|M1,11:45:51.56|-19.67,6:31:45.76|-180,4.03,2000 +UMa Chi-63|V5319|BD+48 1966|HR 4518|J114603.01+474645.8,f|V|K0,11:46:3.01|-138.40,47:46:45.86|28.4,3.70,2000 +V5325|SAO 251579|CP-60 3325|PPM 358961|HR 4522|J114630.82-611042.2,f|D|G5,11:46:30.82|-21.84,-61:10:42.23|-16.2,4.11,2000 +CD-39 7301|PPM 316766|HR 4523|J114631.07-403001.2,f|S|G3,11:46:31.07|-1531.60,-40:30:1.27|403.5,4.89,2000 +BD+56 1544|PPM 33245|HR 4521|J114655.62+553741.4,f|S|K2,11:46:55.62|13.46,55:37:41.48|-31.9,5.25,2000 +CD-35 7438|PPM 289351|HR 4524|J114707.05-355424.7,f|S|G8,11:47:7.05|41.31,-35:54:24.70|-28.8,6.16,2000 +CD-29 9337|PPM 289357|HR 4525|J114715.80-301711.4,f|S|G5,11:47:15.81|-265.27,-30:17:11.44|-227.5,6.48,2000 +V0918 CEN|SAO 239373|CP-57 4989|HR 4526|J114719.14-574147.3,f|V|K5,11:47:19.14|-25.49,-57:41:47.40|20,5.42,2000 +Vir 4A|BD+09 2549|PPM 158223|HR 4528|J114754.90+081445.2,f|D|A0,11:47:54.90|-53.29,8:14:45.22|12.1,5.32,2000 +Leo 93A|DQ LEO|BD+21 2358|HR 4527|J114759.13+201308.1,f|D|G5,11:47:59.14|-145.54,20:13:8.15|-4,4.53,2000 +Mus Mu|Mu Muscae|SAO 251597|CP-66 1649|PPM 358988|J114814.53-664853.6,f|S|K4,11:48:14.54|30.77,-66:48:53.68|-16.3,4.74,2000 +SAO 156896|SD-09 3366|PPM 224935|HR 4529|J114823.48-101847.1,f|D|G0,11:48:23.49|-105.96,-10:18:47.18|-109.1,6.25,2000 +V5344|BD+15 2381|PPM 128566|HR 4531|J114838.70+141703.1,f|D|F0,11:48:38.71|-103.21,14:17:3.15|5.2,5.90,2000 +II HYA|CD-26 8789|PPM 259488|HR 4532|J114845.08-264459.1,f|V|M4,11:48:45.08|-34.83,-26:44:59.20|-9.7,5.11,2000 +BD+00 2843|HR 4533|J114901.28-001907.2,f|S|F7,11:49:1.28|-206.10,-0:19:7.21|3.4,6.15,2000 +Denebola|Deneb Aleet|Leo Beta-94A|Beta Leonis|BD+15 2383|PPM 128576|HR 4534|J114903.57+143419.4,f|D|A3,11:49:3.58|-498.97,14:34:19.42|-113.8,2.13,2000 +BD+17 2402|PPM 128581|HR 4535|J114914.78+161434.3,f|S|A3,11:49:14.79|38.16,16:14:34.37|-54,6.04,2000 +V5357|CP-63 1988|HR 4537|J114941.06-634718.5,f|V|B3,11:49:41.06|-17.95,-63:47:18.52|4.4,4.32,2000 +BD+35 2284|HR 4536|J114941.71+345554.3,f|S|F5,11:49:41.72|-118.18,34:55:54.33|7.7,5.73,2000 +CP-69 1595|PPM 371263|HR 4538|J114956.61-701332.8,f|S|G6,11:49:56.61|-7.61,-70:13:32.85|-2,4.97,2000 +SAO 156926|SD-15 3363|PPM 224987|HR 4539|J115019.60-155149.2,f|S|K0,11:50:19.60|-1.30,-15:51:49.20|16.2,6.13,2000 +V18951|CP-61 2677|HR 4541|J115027.27-623857.7,f|V|A2,11:50:27.28|-6.00,-62:38:57.77|0.9,5.70,2000 +CD-26 8807|PPM 259527|HR 4542|J115037.18-271640.5,f|S|G8,11:50:37.18|-83.32,-27:16:40.57|7.2,6.48,2000 +Zavijava|Zarijan|Zavijah|Minelauva|Alaraph|Vir Beta-5A|BD+02 2489|PPM 158259|J115041.71+014552.9,f|D|F9,11:50:41.72|740.95,1:45:52.98|-271.2,3.60,2000 +BD+13 2465|HR 4543|J115055.34+121644.5,f|D|F0,11:50:55.34|-136.60,12:16:44.53|27.2,6.37,2000 +SAO 138445|SD-04 3152|HR 4544|J115102.23-051959.9,f|D|K0,11:51:2.23|0.90,-5:19:59.99|0.9,5.63,2000 +CD-44 7614|PPM 316836|HR 4546|J115108.69-451024.4,f|S|K3,11:51:8.69|-72.43,-45:10:24.49|-8.6,4.46,2000 +BD+34 2264|PPM 76117|HR 4545|J115109.51+332230.0,f|D|A2,11:51:9.51|-5.51,33:22:30.05|20.6,6.23,2000 +V5365|SD-11 3190|HR 4547|J115121.89-121116.1,f|D|F1,11:51:21.90|-239.28,-12:11:16.12|45.5,6.35,2000 +CD-30 9506|HR 4548|J115141.60-305005.3,f|S|F7,11:51:41.61|-10.43,-30:50:5.31|-293.3,5.86,2000 +SAO 251617|CP-64 1724|HR 4549|J115151.22-651221.2,f|D|B4,11:51:51.23|-34.35,-65:12:21.28|-6.6,4.94,2000 +SAO 239443|CP-56 4836|HR 4551|J115210.27-565915.8,f|D|A2,11:52:10.28|-106.89,-56:59:15.87|35.1,5.56,2000 +Hya Beta|Beta Hydrae|CD-33 8018|PPM 289465|HR 4552|J115254.52-335429.2,f|D|B9,11:52:54.52|-58.01,-33:54:29.25|2.4,4.29,2000 +CF UMA|BD+38 2285|Groombridge 1830|PPM 76134|J115258.76+374307.2,f|V|G8,11:52:58.77|4003.73,37:43:7.24|-5814.7,6.43,2000 +CD-34 7760|PPM 289475|HR 4553|J115326.80-350359.9,f|S|A2,11:53:26.81|-79.07,-35:3:59.92|-29.9,6.17,2000 +Phecda|Phad|UMa Gamma-64|V5379|BD+54 1475|PPM 33292|HR 4554|J115349.84+534141.1,f|V|A0,11:53:49.85|107.73,53:41:41.14|11.2,2.43,2000 +IQ VIR|BD+01 2624|HR 4555|J115350.27+003307.6,f|V|F0,11:53:50.28|-41.85,0:33:7.61|2.9,6.31,2000 +SAO 239475|CP-56 4861|HR 4556|J115411.50-572436.7,f|S|A0,11:54:11.50|-9.70,-57:24:36.71|-2.8,6.05,2000 +CD-37 7536|PPM 289496|HR 4557|J115425.81-374456.1,f|D|F7,11:54:25.81|-331.03,-37:44:56.16|57.2,6.46,2000 +CD-25 8930|PPM 259621|HR 4558|J115442.53-254249.9,f|S|G4,11:54:42.54|48.92,-25:42:49.99|73.6,5.28,2000 +SAO 251637|CP-65 1744|J115444.63-662234.3,f|S|F2,11:54:44.64|14.49,-66:22:34.31|-65.4,6.37,2000 +V5385|CP-62 2408|HR 4563|J115500.01-631645.0,f|V|A3,11:55:0.01|-8.84,-63:16:45.05|-0.5,5.92,2000 +Vir 6|SAO 119111|BD+09 2560|PPM 158326|HR 4559|J115503.13+082638.1,f|S|K5,11:55:3.13|-30.42,8:26:38.20|15.5,5.58,2000 +V19016|BD+37 2230|PPM 76155|HR 4562|J115514.05+364522.9,f|V|M3,11:55:14.06|-63.09,36:45:22.96|-46,6.49,2000 +CD-27 8384|PPM 259648|HR 4565|J115540.13-282837.5,f|S|K5,11:55:40.13|3.82,-28:28:37.57|-27.2,5.91,2000 +Leo 95|BD+16 2319|PPM 128659|HR 4564|J115540.53+153848.5,f|D|A3,11:55:40.53|10.11,15:38:48.54|3.5,5.53,2000 +CD-38 7410|PPM 289524|HR 4568|J115554.77-394122.2,f|S|K0,11:55:54.77|60.60,-39:41:22.26|-17.1,6.13,2000 +UMa 66|BD+57 1343|HR 4566|J115558.41+563554.8,f|S|K1,11:55:58.42|7.68,56:35:54.81|-1.2,5.83,2000 +Crt Eta-30|V5392|SAO 156988|SD-16 3358|PPM 225124|HR 4567|J115600.95-170902.9,f|V|A0,11:56:0.95|-49.02,-17:9:2.98|-8.2,5.17,2000 +SAO 223127|CD-46 7521|PPM 316927|J115643.91-470420.5,f|S|F5,11:56:43.92|-126.48,-47:4:20.57|23.1,6.26,2000 +BD+62 1204|HR 4569|J115653.23+613257.1,f|S|G8,11:56:53.24|-30.51,61:32:57.17|-43.4,6.22,2000 +LV HYA|CD-32 8413|PPM 289551|HR 4571|J115703.74-331855.6,f|V|A0,11:57:3.75|-50.77,-33:18:55.66|-5.2,6.21,2000 +V5397|SAO 251659|CP-61 2829|HR 4573|J115740.00-622655.4,f|V|B3,11:57:40.01|-24.01,-62:26:55.49|-5.2,5.56,2000 +V19062|BD+33 2174|PPM 76185|HR 4574|J115807.17+321626.0,f|D|A9,11:58:7.17|-108.44,32:16:26.07|-62.4,6.43,2000 +V5402|SAO 239533|CP-55 4751|HR 4576|J115815.22-561902.3,f|V|B8,11:58:15.22|-21.55,-56:19:2.32|1.8,5.44,2000 +SAO 251664|CP-63 2073|HR 4578|J115847.66-642022.4,f|S|A3,11:58:47.66|-5.98,-64:20:22.42|-1.5,5.62,2000 +CD-25 8963|HR 4579|J115854.37-255431.8,f|D|A0,11:58:54.37|-27.93,-25:54:31.89|-22.5,6.42,2000 +SAO 119147|BD+01 2636|PPM 158389|J115903.33+003150.4,f|D|K2,11:59:3.34|-65.40,0:31:50.45|29.7,6.18,2000 +SD-09 3408|J115909.37-102833.2,f|S|K2,11:59:9.37|-9.00,-10:28:33.23|30.9,6.48,2000 +SAO 223151|CD-45 7438|PPM 316965|J115910.68-454955.9,f|S|B8,11:59:10.68|-30.10,-45:49:55.99|-8.5,6.35,2000 +SAO 239548|CD-51 6236|HR 4582|J115910.86-514148.3,f|S|K1,11:59:10.86|-15.43,-51:41:48.34|-5.2,6.03,2000 +BD+33 2176|PPM 76194|HR 4581|J115917.53+331001.2,f|D|K1,11:59:17.54|-0.13,33:10:1.21|-7.1,5.95,2000 +CP-62 2485|J115925.61-624951.4,f|S|A9,11:59:25.62|-5.48,-62:49:51.41|0.9,6.36,2000 +Cha Epsilon|SAO 256894|CP-77 772|PPM 371327|HR 4583|J115937.57-781318.6,f|D|B9,11:59:37.57|-41.24,-78:13:18.62|-8.5,4.91,2000 +Vir 7|SAO 119156|BD+04 2556|HR 4585|J115956.91+033918.7,f|S|A1,11:59:56.91|-19.31,3:39:18.71|-8.4,5.36,2000 +BD+34 2279|PPM 76199|HR 4584|J115957.37+340205.0,f|S|A9,11:59:57.38|-40.65,34:2:5.09|32.1,6.49,2000 +FR CAM|BD+81 389|HR 4586|J120018.60+805111.4,f|V|M2,12:0:18.60|-65.31,80:51:11.47|-37.6,6.22,2000 +SD-21 3443|HR 4588|J120042.22-215015.0,f|D|K0,12:0:42.22|-8.91,-21:50:15.00|-8.4,6.26,2000 +SD-09 3413|PPM 225244|HR 4587|J120044.45-102645.6,f|S|G8,12:0:44.45|142.06,-10:26:45.65|-483.3,5.54,2000 +31 Crt|TY CRV|SD-18 3295|PPM 225249|J120051.15-193932.3,f|V|B1,12:0:51.16|-16.81,-19:39:32.34|6.7,5.28,2000 +Vir Pi-8|SAO 119164|BD+07 2502|PPM 158416|HR 4589|J120052.39+063651.5,f|S|A5,12:0:52.39|-0.30,6:36:51.56|-29.7,4.66,2000 +SAO 138533|BD-00 2520|PPM 178659|HR 4591|J120101.73-014605.3,f|S|G5,12:1:1.74|-19.79,-1:46:5.40|-73.9,6.32,2000 +SAO 239589|CP-56 4954|HR 4592|J120129.19-573013.5,f|S|A0,12:1:29.19|-58.18,-57:30:13.60|-16.4,6.15,2000 +V19121|BD+36 2230|PPM 76223|HR 4593|J120139.47+360231.5,f|V|K0,12:1:39.47|-82.23,36:2:31.51|-78.8,5.59,2000 +UMa 67A|DP UMA|BD+43 2179|PPM 52766|HR 4594|J120206.78+430244.1,f|D|F0,12:2:6.79|-345.53,43:2:44.16|55.7,5.21,2000 +SAO 258632|CP-84 371|HR 4595|J120220.24-853754.3,f|D|K3,12:2:20.24|-56.44,-85:37:54.33|1.6,6.02,2000 +SAO 256897|CP-70 1454|PPM 371348|HR 4596|J120228.47-712920.3,f|S|K1,12:2:28.47|-62.20,-71:29:20.33|11,6.42,2000 +SAO 251699|CP-68 1604|PPM 359139|HR 4597|J120237.69-691132.2,f|S|B9,12:2:37.69|-39.06,-69:11:32.24|-6.9,5.89,2000 +SAO 138551|SD-06 3499|HR 4598|J120251.66-074101.0,f|S|K5,12:2:51.66|-34.19,-7:41:1.04|16.2,6.23,2000 +Cru Theta1|CP-62 2543|PPM 359149|HR 4599|J120301.50-631846.5,f|D|A5,12:3:1.50|-152.52,-63:18:46.55|6.1,4.33,2000 +SAO 223193|CD-41 6938|J120339.57-422602.6,f|S|F6,12:3:39.57|323.60,-42:26:2.60|-110.8,5.16,2000 +SAO 119189|BD+06 2543|PPM 158464|J120344.44+053327.9,f|S|F5,12:3:44.44|-149.00,5:33:27.90|-83.1,6.40,2000 +SAO 256898|CP-73 924|PPM 371354|J120344.50-741250.7,f|S|G6,12:3:44.51|-14.16,-74:12:50.75|-4.2,6.45,2000 +Com 2|BD+22 2437|J120416.59+212732.9,f|D|F0,12:4:16.60|35.18,21:27:32.95|-4.4,5.89,2000 +SAO 239632|CD-50 6630|J120416.70-512821.0,f|S|B9,12:4:16.70|-34.85,-51:28:21.06|-11.8,6.48,2000 +Cru Theta2|Theta2 Crucis|SAO 251717|CP-62 2561|PPM 359166|J120419.21-630956.5,f|V|B2,12:4:19.22|-17.20,-63:9:56.56|0,4.73,2000 +BD+86 176|J120428.11+853513.6,f|S|F6,12:4:28.11|-55.17,85:35:13.68|91,6.28,2000 +CP-67 1896|PPM 359171|J120438.88-681944.0,f|S|A0,12:4:38.89|-39.05,-68:19:44.08|-6.4,5.36,2000 +SAO 239644|CP-58 4058|J120445.25-591511.8,f|S|B9,12:4:45.25|-37.65,-59:15:11.83|-16.1,6.30,2000 +Cha Kappa|SAO 256899|CP-75 777|J120446.46-763108.6,f|S|K4,12:4:46.47|-77.49,-76:31:8.62|46.8,5.03,2000 +V19174|SAO 251723|CP-60 3697|PPM 359174|J120457.21-605805.7,f|V|M2,12:4:57.22|-25.04,-60:58:5.71|-5.6,5.98,2000 +Vir Omicron-9|SAO 119213|BD+09 2583|PPM 158495|J120512.53+084358.7,f|S|G8,12:5:12.54|-220.32,8:43:58.75|57.5,4.12,2000 +BD+77 461|J120515.11+765420.6,f|S|G8,12:5:15.12|147.21,76:54:20.64|-92.4,5.79,2000 +V19192|BD+63 999|PPM 18119|J120539.70+625559.2,f|D|K2,12:5:39.70|-48.80,62:55:59.23|-71.6,6.14,2000 +V19195|SAO 251734|CP-64 1791|PPM 359188|HR 4611|J120553.61-653248.7,f|V|B6,12:5:53.62|-5.96,-65:32:48.76|-1.4,6.31,2000 +V5456|CD-35 7694|PPM 289732|HR 4612|J120556.66-354138.1,f|D|B8,12:5:56.67|-34.60,-35:41:38.13|2.8,6.23,2000 +SAO 138585|SD-02 3460|PPM 178683|HR 4613|J120559.81-030753.7,f|S|G5,12:5:59.81|-27.71,-3:7:53.73|-19.8,6.37,2000 +SAO 251737|CP-67 1903|PPM 359191|HR 4614|J120619.92-683905.0,f|S|G3,12:6:19.93|-5.02,-68:39:5.06|-1.6,6.22,2000 +SAO 251738|CP-65 1788A|PPM 359192|HR 4615|J120623.00-654234.0,f|D|G8,12:6:23.00|-51.59,-65:42:34.08|-11.2,6.06,2000 +Cru Eta|SAO 251742|CP-63 2145|PPM 359197|HR 4616|J120652.89-643649.4,f|D|F2,12:6:52.90|34.28,-64:36:49.43|-37.5,4.14,2000 +CP-74 880|PPM 371384|HR 4617|J120749.87-752201.2,f|S|K2,12:7:49.88|-92.35,-75:22:1.27|19,5.16,2000 +SAO 239686|CD-50 6688|HR 4619|J120804.86-504549.0,f|D|B9,12:8:4.86|-37.95,-50:45:49.09|-7,6.36,2000 +V0863 CEN|SAO 239687|CD-49 6813|HR 4618|J120805.22-503940.6,f|D|B6,12:8:5.22|-34.04,-50:39:40.60|-9.9,4.46,2000 +SAO 223235|CD-47 7396|PPM 317118|J120814.71-484132.9,f|S|B9,12:8:14.71|-19.51,-48:41:32.95|-7,5.34,2000 +Cen Delta|Delta Centauri|SAO 239689|CD-50 6697|HR 4621|J120821.49-504320.7,f|D|B2,12:8:21.50|-47.58,-50:43:20.73|-6.4,2.58,2000 +SAO 251757|CP-60 3777|PPM 359211|HR 4622|J120824.73-605049.6,f|S|K3,12:8:24.73|-3.73,-60:50:49.66|0.2,6.21,2000 +Alchiba|Al Chiba|Al Minliar al Ghurab|Crv Alpha-1|CD-2410174|PPM 259912|HR 4623|J120824.81-244343.9,f|S|F2,12:8:24.82|100.14,-24:43:43.95|-39.3,4.04,2000 +V0788 CEN|SAO 223241|CD-43 7502|PPM 317127|HR 4624|J120853.80-441933.5,f|V|A2,12:8:53.80|-47.00,-44:19:33.56|-42.3,5.74,2000 +V0817 CEN|SAO 223242|CD-40 7128|PPM 317129|HR 4625|J120854.58-411353.7,f|V|B3,12:8:54.59|-12.07,-41:13:53.78|-8.3,5.52,2000 +Vir 10|SAO 119245|BD+02 2517|PPM 158569|HR 4626|J120941.30+015352.4,f|D|K3,12:9:41.31|42.13,1:53:52.40|-180.4,5.96,2000 +BD+75 469|HR 4627|J120947.07+743940.9,f|S|F6,12:9:47.07|-5.91,74:39:40.92|0.8,6.34,2000 +CD-34 7956|HR 4628|J121002.54-344217.0,f|D|A0,12:10:2.55|-45.01,-34:42:17.07|-2.3,6.16,2000 +Vir 11|SAO 119249|BD+06 2559|PPM 158575|HR 4629|J121003.41+054825.2,f|S|F2,12:10:3.42|-159.83,5:48:25.23|18.3,5.71,2000 +Minkar|Crv Epsilon-2|V5483|SD-21 3487|PPM 259949|J121007.48-223711.1,f|V|K2,12:10:7.48|-71.58,-22:37:11.16|10.6,3.01,2000 +Com 3|V19273|BD+17 2446|PPM 128836|HR 4632|J121031.62+164833.3,f|V|A4,12:10:31.63|-21.68,16:48:33.38|-2.2,6.40,2000 +CD-37 7714|PPM 289824|HR 4631|J121033.81-375213.2,f|S|A5,12:10:33.82|46.06,-37:52:13.26|-33.2,6.07,2000 +V5485|BD+28 2084|HR 4633|J121046.09+271653.4,f|V|A4,12:10:46.10|-10.40,27:16:53.42|-9.6,6.00,2000 +BD+82 356|HR 4639|J121059.98+814235.3,f|D|K5,12:10:59.99|-25.80,81:42:35.40|-1.7,5.96,2000 +SAO 251776|CP-67 1916|PPM 359236|J121101.22-681539.4,f|S|K0,12:11:1.22|1.44,-68:15:39.48|-13.2,6.48,2000 +Crv 3|CD-22 9308|PPM 259968|HR 4635|J121103.83-233608.7,f|S|A2,12:11:3.84|-65.56,-23:36:8.72|-20.6,5.46,2000 +SAO 251778|CP-60 3812|PPM 359237|HR 4634|J121105.10-611638.7,f|S|F2,12:11:5.11|-115.77,-61:16:38.73|-18.4,6.08,2000 +SAO 239735|CD-50 6752|HR 4637|J121131.48-512133.6,f|S|G6,12:11:31.48|-199.41,-51:21:33.60|-63.8,6.23,2000 +Cen Rho|V19284|SAO 239737|CD-51 6455|HR 4638|J121139.11-522206.4,f|V|B3,12:11:39.11|-42.13,-52:22:6.46|-18.4,3.96,2000 +UMa 68|BD+57 1359|PPM 33432|HR 4641|J121144.90+570315.8,f|S|K5,12:11:44.91|9.95,57:3:15.87|-15,6.33,2000 +Com 4|BD+26 2316|J121151.17+255213.0,f|S|K4,12:11:51.18|-38.06,25:52:13.01|-30.9,5.65,2000 +BD+29 2265|HR 4642|J121201.01+283210.7,f|D|F5,12:12:1.02|67.87,28:32:10.73|-61.9,6.46,2000 +Com 5|BD+21 2398|HR 4643|J121209.29+203231.4,f|S|G8,12:12:9.29|-14.19,20:32:31.43|-17.2,5.60,2000 +CO CAM|BD+78 412|HR 4646|J121211.94+773658.4,f|V|A5,12:12:11.94|10.52,77:36:58.47|20.2,5.15,2000 +V19293|CP-62 2624|PPM 359251|HR 4644|J121221.97-625702.7,f|V|B8,12:12:21.98|-5.18,-62:57:2.78|-0.1,5.95,2000 +S MUS|SAO 251791|CP-69 1646|PPM 371417|HR 4645|J121247.01-700906.4,f|V|F6,12:12:47.02|-7.64,-70:9:6.43|-0.3,6.07,2000 +V0335 HYA|CD-33 8252|HR 4647|J121312.94-340730.9,f|V|M4,12:13:12.94|-37.25,-34:7:30.98|6.2,6.46,2000 +CD-38 7581|PPM 289894|HR 4648|J121325.03-385545.0,f|S|B4,12:13:25.04|-29.06,-38:55:45.08|-11.7,5.77,2000 +Vir 12|BD+11 2440|PPM 128878|J121325.93+101544.4,f|S|A2,12:13:25.94|-94.46,10:15:44.43|-8,5.85,2000 +CD-33 8257|PPM 289896|HR 4651|J121336.80-334734.5,f|D|A0,12:13:36.81|11.22,-33:47:34.51|-15.4,6.41,2000 +SAO 256915|CP-77 804|PPM 371431|HR 4649|J121356.46-783426.1,f|S|K2,12:13:56.46|-4.31,-78:34:26.16|-19.6,6.34,2000 +SAO 223297|CD-45 7630|PPM 317217|HR 4652|J121402.69-454326.1,f|D|K3,12:14:2.70|-35.19,-45:43:26.11|4.4,5.31,2000 +DL CRU|CP-63 2203|PPM 359268|HR 4653|J121416.92-642430.6,f|V|B1,12:14:16.93|-5.31,-64:24:30.67|0.1,6.24,2000 +BD+54 1504|PPM 33461|HR 4654|J121443.40+532604.6,f|S|K5,12:14:43.41|-21.18,53:26:4.66|-18.3,6.18,2000 +SD-20 3606|HR 4655|J121459.58-205039.1,f|S|G5,12:14:59.58|1.40,-20:50:39.19|5.6,5.81,2000 +CD-28 9379|J121506.39-291414.1,f|S|K0,12:15:6.40|-28.67,-29:14:14.12|-26.3,6.50,2000 +BD+71 610|PPM 8119|HR 4659|J121508.49+701200.0,f|S|K5,12:15:8.49|-24.44,70:12:0.03|-28.3,5.73,2000 +Cru Delta|Delta Crucis|SAO 239791|CP-58 4189|HR 4656|J121508.71-584456.1,f|S|B2,12:15:8.72|-36.65,-58:44:56.14|-10.7,2.79,2000 +SAO 157168|SD-09 3468|PPM 225575|HR 4657|J121510.55-101844.6,f|D|F5,12:15:10.56|32.02,-10:18:44.64|-1012.4,6.11,2000 +UY UMI|BD+88 71|PPM 2113|HR 4686|J121520.27+874200.4,f|V|F2,12:15:20.28|-27.15,87:42:0.42|52,6.27,2000 +Megraz|Kaffa|UMa Delta-69A|V5513|BD+57 1363|PPM 33469|J121525.56+570157.4,f|D|A3,12:15:25.56|103.58,57:1:57.42|7.8,3.30,2000 +CD-41 7056|PPM 317243|HR 4658|J121530.44-415447.8,f|S|K0,12:15:30.45|-337.66,-41:54:47.80|-180.9,6.24,2000 +DK DRA|BD+73 549|PPM 8121|HR 4665|J121541.49+723304.3,f|V|K0,12:15:41.49|-9.22,72:33:4.31|-25.1,6.29,2000 +Gienah|Gienah Ghurab|Crv Gamma-4|V5515|SAO 157176|SD-16 3424|PPM 225593|HR 4662|J121548.37-173230.9,f|V|B8,12:15:48.37|-159.62,-17:32:30.95|22.3,2.59,2000 +Com 6|BD+15 2436|HR 4663|J121600.18+145356.6,f|S|A3,12:16:0.19|-80.60,14:53:56.65|-30.5,5.10,2000 +CVn 2A|BD+41 2284|PPM 52891|HR 4666|J121607.54+403936.6,f|D|M3,12:16:7.55|17.07,40:39:36.65|-32.1,5.67,2000 +Com 7|BD+24 2443|HR 4667|J121620.53+235643.4,f|S|G8,12:16:20.54|-26.87,23:56:43.47|-5.9,4.93,2000 +SAO 256919|CP-71 1323|PPM 371445|HR 4664|J121623.81-723652.1,f|S|A0,12:16:23.81|-32.18,-72:36:52.20|-16.3,6.21,2000 +V19344|BD+33 2213|PPM 76381|HR 4668|J121630.13+330341.4,f|V|K0,12:16:30.14|-54.94,33:3:41.50|-111.9,4.99,2000 +BD+87 107|PPM 2119|HR 4683|J121651.33+862608.9,f|S|F4,12:16:51.34|211.86,86:26:8.95|-10.1,6.33,2000 +V5527|SAO 157184|SD-15 3442|PPM 225621|J121703.33-164137.4,f|V|A2,12:17:3.33|-49.14,-16:41:37.45|2.1,6.06,2000 +SAO 251826|CP-64 1844|HR 4669|J121706.31-654134.6,f|S|A0,12:17:6.31|-37.60,-65:41:34.65|-9.3,6.06,2000 +BD+54 1510|PPM 33485|HR 4672|J121729.59+531128.7,f|S|K6,12:17:29.60|38.47,53:11:28.79|-45.5,5.80,2000 +BD+29 2275|HR 4673|J121730.57+285613.8,f|D|A4,12:17:30.58|-33.08,28:56:13.88|35.2,5.71,2000 +Mus Epsilon|Epsilon Muscae|CP-67 1931|HR 4671|J121734.27-675738.6,f|S|M5,12:17:34.28|-231.28,-67:57:38.65|-26.4,4.06,2000 +BD+15 2442|PPM 128927|HR 4676|J121744.26+150840.9,f|S|K4,12:17:44.26|34.60,15:8:40.92|-41.3,6.32,2000 +CD-35 7842|PPM 289974|HR 4675|J121747.26-360538.3,f|D|A0,12:17:47.27|-40.85,-36:5:38.33|-7.5,6.15,2000 +Cha Beta|V5532|SAO 256924|CP-78 741|PPM 371459|HR 4674|J121820.82-791844.0,f|V|B5,12:18:20.82|-38.08,-79:18:44.06|12,4.25,2000 +Cru Zeta|SAO 251841|CP-63 2235|PPM 359321|HR 4679|J121826.24-640011.0,f|D|B2,12:18:26.25|-33.20,-64:0:11.05|-10.4,4.05,2000 +BD+31 2350|J121831.62+301456.5,f|S|A9,12:18:31.62|76.58,30:14:56.57|-118.3,6.23,2000 +Vir 13|BD+00 2920|PPM 178747|HR 4681|J121840.31-004713.8,f|S|A5,12:18:40.32|33.45,-0:47:13.86|-16.2,5.91,2000 +BD+75 470|PPM 8128|HR 4687|J121849.98+750938.0,f|S|A1,12:18:49.98|-36.03,75:9:38.02|4.4,5.47,2000 +V5544|SAO 239838|CP-54 5113|HR 4682|J121859.75-550834.8,f|D|M1,12:18:59.76|-70.47,-55:8:34.81|-11.1,5.01,2000 +FM COM|BD+26 2326|HR 4684|J121902.02+260030.0,f|V|A5,12:19:2.03|-11.73,26:0:30.06|-9.1,6.44,2000 +Com 8|BD+23 2448|HR 4685|J121919.19+230204.8,f|S|A5,12:19:19.19|-13.11,23:2:4.82|-9.2,6.24,2000 +Com 9|BD+28 2106|HR 4688|J121929.52+280924.8,f|S|F8,12:19:29.53|-202.47,28:9:24.90|-125.7,6.38,2000 +CVn 3|V19360|BD+49 2130|PPM 52927|J121948.71+485902.9,f|V|M0,12:19:48.71|-14.47,48:59:2.94|6.8,5.29,2000 +Zaniah|Vir Eta-15|V5555|SAO 138721|BD+00 2926|PPM 178753|HR 4689|J121954.35-004000.4,f|D|A2,12:19:54.36|-59.10,-0:40:0.49|-23.1,3.89,2000 +SD-21 3511|HR 4691|J122010.76-221032.5,f|D|G3,12:20:10.77|-105.43,-22:10:32.52|-30.3,5.95,2000 +V5557|BD+26 2329|HR 4694|J122017.75+260006.7,f|V|F0,12:20:17.75|-140.88,26:0:6.75|19.1,6.15,2000 +V5559|BD+27 2114|HR 4693|J122019.67+263710.1,f|V|K3,12:20:19.68|-66.65,26:37:10.14|-110.4,5.52,2000 +Vir 16|V5558|SAO 119341|BD+04 2604|PPM 158745|HR 4695|J122020.98+031845.2,f|D|K0,12:20:20.98|-293.81,3:18:45.27|-62.9,4.97,2000 +SAO 251854|CP-65 1842|PPM 359341|HR 4692|J122028.22-655033.5,f|S|B9,12:20:28.22|-40.82,-65:50:33.56|-10.8,6.20,2000 +Crv Zeta-5|V19365|SD-21 3514|HR 4696|J122033.64-221257.2,f|D|B8,12:20:33.64|-109.70,-22:12:57.24|-27.7,5.21,2000 +Com 11|BD+18 2592|PPM 128975|HR 4697|J122043.02+174734.3,f|D|G8,12:20:43.03|-109.69,17:47:34.33|88.5,4.73,2000 +BD+16 2362|PPM 128976|J122048.71+153227.5,f|S|K0,12:20:48.72|-52.03,15:32:27.55|7.8,6.47,2000 +UMa 70|BD+58 1371|J122050.88+575150.8,f|S|K5,12:20:50.88|47.79,57:51:50.83|-70.5,5.52,2000 +V5564|SAO 157226|SD-12 3614|HR 4699|J122055.71-133356.6,f|D|K1,12:20:55.71|-5.10,-13:33:56.61|10.3,5.15,2000 +Cru Epsilon|V5568|SAO 251862|CP-59 4188|PPM 359351|J122121.60-602404.1,f|V|K3,12:21:21.61|-171.07,-60:24:4.13|91.8,3.59,2000 +BD+47 1955|PPM 52946|J122156.24+471055.9,f|S|K2,12:21:56.25|-57.81,47:10:55.93|-23.6,6.32,2000 +CP-55 5019|J122157.42-562227.7,f|S|K4,12:21:57.43|-10.80,-56:22:27.79|-0.8,5.89,2000 +Mus Zeta2|SAO 251866|CP-66 1747|PPM 359355|J122207.33-673119.5,f|D|A5,12:22:7.34|-31.26,-67:31:19.58|-5.2,5.16,2000 +BD+25 2498|J122210.82+244625.9,f|S|A0,12:22:10.83|-54.48,24:46:25.92|-4.5,6.18,2000 +Mus Zeta1|SAO 251868|CP-67 1939|PPM 359357|J122212.03-681826.3,f|S|K0,12:22:12.03|-2.44,-68:18:26.34|-48.1,5.74,2000 +Com 12A|V5581|BD+26 2337|J122230.31+255046.1,f|D|G0,12:22:30.31|-10.80,25:50:46.18|-8.9,4.80,2000 +Vir 17|BD+06 2599|PPM 158773|J122232.03+051819.6,f|D|F8,12:22:32.04|-166.53,5:18:19.60|-53.2,6.46,2000 +V19375|CP-56 5202|J122249.43-574034.0,f|V|B9,12:22:49.43|-37.70,-57:40:34.08|-12.7,5.38,2000 +SAO 251877|CP-66 1752|PPM 359373|J122313.88-673753.5,f|S|G8,12:23:13.89|-751.11,-67:37:53.57|257.1,6.36,2000 +SD-04 3268|PPM 195433|J122315.36-045828.2,f|S|K0,12:23:15.37|30.48,-4:58:28.21|-28.6,6.48,2000 +TT CRV|SAO 157253|SD-11 3291|PPM 225764|J122318.86-114843.6,f|V|M3,12:23:18.87|-51.09,-11:48:43.62|-10.5,6.49,2000 +Crv 6|CD-2410314|HR 4711|J122321.58-245026.4,f|S|K5,12:23:21.59|-21.37,-24:50:26.41|-19.6,5.66,2000 +x1 Cen|CD-34 8117|HR 4712|J122335.41-352445.6,f|S|B9,12:23:35.42|-41.20,-35:24:45.64|-7.5,5.32,2000 +CD-38 7700|HR 4713|J122336.74-391808.4,f|S|F2,12:23:36.74|-23.10,-39:18:8.50|4.9,6.39,2000 +CD-38 7701|HR 4714|J122344.74-385440.9,f|S|B9,12:23:44.74|-56.49,-38:54:40.97|-12.5,5.79,2000 +CVn 4|AI CVN|BD+43 2218|PPM 52962|HR 4715|J122347.01+423233.8,f|V|F3,12:23:47.01|-80.12,42:32:33.88|14.4,6.03,2000 +CD-29 9709|J122347.82-302007.4,f|D|K5,12:23:47.83|10.23,-30:20:7.49|-12.3,6.40,2000 +CVn 5|V19378|BD+52 1626|PPM 33536|HR 4716|J122401.49+513344.1,f|V|G6,12:24:1.49|13.15,51:33:44.12|11.3,4.76,2000 +Com 13|GN COM|BD+26 2344|HR 4717|J122418.52+260554.9,f|V|A3,12:24:18.52|-26.94,26:5:54.98|-3.1,5.15,2000 +SAO 223417|CD-40 7281A|PPM 317398|HR 4718|J122444.71-412303.4,f|D|K2,12:24:44.72|-67.30,-41:23:3.44|-69.9,6.32,2000 +UMa 71|V19385|BD+57 1373|PPM 33546|HR 4726|J122503.20+564640.1,f|V|M3,12:25:3.21|-14.22,56:46:40.18|-12.5,5.84,2000 +BD+64 896|PPM 18235|HR 4727|J122506.36+634810.0,f|D|G8,12:25:6.36|-15.56,63:48:10.01|2.8,6.31,2000 +SAO 223426|CD-41 7163|HR 4721|J122508.51-423051.5,f|S|G4,12:25:8.52|-134.45,-42:30:51.52|-22.3,6.11,2000 +SAO 157272|SD-10 3467|HR 4722|J122511.76-113638.1,f|S|A1,12:25:11.77|-59.07,-11:36:38.12|-31.9,5.95,2000 +BD+24 2455|HR 4725|J122515.10+235534.3,f|S|K0,12:25:15.11|56.76,23:55:34.33|-41.1,6.03,2000 +SAO 251893|CP-65 1862|PPM 359398|J122517.53-654611.4,f|S|G8,12:25:17.53|-63.28,-65:46:11.47|-99.2,6.30,2000 +CD-27 8670|HR 4723|J122518.41-274456.4,f|S|K1,12:25:18.41|2.39,-27:44:56.41|-1.2,6.09,2000 +x2 Cen|V5610|CD-34 8146|HR 4724|J122521.73-351111.1,f|V|B9,12:25:21.73|-40.58,-35:11:11.10|-6.5,5.71,2000 +SAO 258644|CP-85 343|PPM 377454|J122538.23-860902.2,f|S|K0,12:25:38.24|-4.91,-86:9:2.21|-6.6,6.33,2000 +CVn 6|BD+39 2521|HR 4728|J122550.93+390107.0,f|S|G9,12:25:50.94|-78.08,39:1:7.02|-34,5.02,2000 +Com 14|BD+28 2115|HR 4733|J122624.06+271605.6,f|S|F0,12:26:24.06|-14.80,27:16:5.66|-10.4,4.92,2000 +BD+72 565|PPM 8154|J122624.19+715547.3,f|S|G5,12:26:24.19|-150.28,71:55:47.38|-23.3,6.33,2000 +V19389|CP-62 2742|HR 4729|J122630.88-630719.9,f|D|B4,12:26:30.88|-40.89,-63:7:19.93|-1.9,4.80,2000 +SAO 239948|CD-50 6975|HR 4732|J122631.75-512702.2,f|D|B3,12:26:31.76|-31.03,-51:27:2.29|-9.8,4.82,2000 +Acrux|Cru Alpha1|CP-62 2745A|J122635.89-630556.7,f|D|B0,12:26:35.90|-35.36,-63:5:56.73|-14.7,1.28,2000 +Cru Alpha2|CP-62 2745B|HR 4731|J122636.44-630558.2,f|D|B1,12:26:36.44|-42.55,-63:5:58.28|-7.7,1.58,2000 +SAO 223443|CD-48 7426|PPM 317439|HR 4734|J122648.14-485447.4,f|S|G3,12:26:48.14|-642.05,-48:54:47.49|-79.2,6.26,2000 +CD-32 8713|HR 4735|J122651.69-324948.4,f|S|B9,12:26:51.69|-5.67,-32:49:48.44|-30.1,5.57,2000 +Com Gamma-15|BD+29 2288|HR 4737|J122656.27+281606.3,f|S|K1,12:26:56.27|-83.36,28:16:6.32|-81,4.34,2000 +Com 16|BD+27 2134|HR 4738|J122659.29+264932.5,f|S|A4,12:26:59.30|-11.65,26:49:32.52|-9.2,4.96,2000 +SAO 251911|CP-63 2283|PPM 359419|HR 4736|J122724.82-634720.3,f|S|B8,12:27:24.83|-13.78,-63:47:20.35|-10.9,6.03,2000 +BL CRU|CP-58 4289|HR 4739|J122728.85-585930.3,f|V|M4,12:27:28.86|-14.99,-58:59:30.32|5.3,5.48,2000 +UMa 73|BD+56 1598|PPM 33568|HR 4745|J122735.10+554245.8,f|S|M2,12:27:35.10|-20.96,55:42:45.81|-11.4,5.69,2000 +SAO 119413|BD+09 2628|PPM 158863|HR 4741|J122742.08+083637.2,f|S|G8,12:27:42.08|22.25,8:36:37.24|-11.2,6.35,2000 +SAO 157299|SD-15 3471|PPM 225872|HR 4742|J122749.44-163754.6,f|S|G3,12:27:49.45|-10.35,-16:37:54.64|3.9,6.30,2000 +FT VIR|SAO 138798|SD-03 3298|PPM 195518|HR 4746|J122751.54-043654.9,f|V|A8,12:27:51.55|-86.72,-4:36:55.00|2.3,6.21,2000 +Cen Sigma|SAO 223454|CD-49 7115|HR 4743|J122802.38-501350.2,f|S|B2,12:28:2.38|-32.53,-50:13:50.29|-12.4,3.91,2000 +CP-63 2297|HR 4744|J122819.26-642027.5,f|S|A0,12:28:19.26|-36.18,-64:20:27.56|-11.8,6.06,2000 +CD-38 7753|HR 4748|J122822.46-390228.2,f|S|B8,12:28:22.46|-28.66,-39:2:28.22|-14,5.46,2000 +SAO 251924|CP-61 3209|PPM 359434|HR 4747|J122825.68-614741.4,f|S|K2,12:28:25.69|-20.13,-61:47:41.43|-4.4,6.21,2000 +SAO 239977|CP-55 5084|HR 4749|J122833.59-562428.1,f|D|K0,12:28:33.59|-232.79,-56:24:28.14|-226.3,6.15,2000 +BD+27 2138|J122838.15+261337.0,f|S|A2,12:28:38.15|-17.63,26:13:37.05|-5.7,6.50,2000 +Com 17A|AI COM|BD+26 2354|HR 4752|J122854.70+255446.2,f|D|A1,12:28:54.70|-20.24,25:54:46.27|-15,5.25,2000 +Com 18|BD+24 2464|HR 4753|J122927.04+240632.1,f|S|F5,12:29:27.04|-18.07,24:6:32.13|1.8,5.48,2000 +Com 20|BD+21 2424|HR 4756|J122943.23+205345.9,f|S|A3,12:29:43.24|24.94,20:53:45.99|-31.3,5.68,2000 +Algorab|Algorel|Algores|Crv Delta-7A|V5656|SAO 157323|SD-15 3482|HR 4757|J122951.85-163055.5,f|D|B9,12:29:51.86|-209.96,-16:30:55.56|-139.3,2.97,2000 +V19402|SAO 239999|CP-55 5097|HR 4754|J122954.20-563129.7,f|V|M1,12:29:54.20|5.79,-56:31:29.79|12,5.79,2000 +UMa 74|V19408|BD+59 1444|PPM 33584|J122957.32+582420.6,f|V|A5,12:29:57.32|-66.80,58:24:20.67|88.8,5.36,2000 +V0928 CEN|SAO 223471|CD-41 7219|PPM 317496|HR 4755|J122957.88-414409.2,f|V|M3,12:29:57.89|4.93,-41:44:9.24|-16.1,6.03,2000 +CVn 7A|BD+52 1631|PPM 33586|HR 4761|J123002.82+513208.2,f|D|F6,12:30:2.83|-293.07,51:32:8.27|25.3,6.22,2000 +UMa 75|BD+59 1446|PPM 33587|HR 4762|J123004.25+584603.9,f|S|G8,12:30:4.26|31.19,58:46:3.98|-14.9,6.07,2000 +SAO 157326|SD-12 3647|PPM 225928|HR 4758|J123004.77-132335.4,f|D|G0,12:30:4.77|-261.64,-13:23:35.46|-54.2,6.40,2000 +Dra 4|CQ DRA|BD+70 700|PPM 18259|HR 4765|J123006.65+691204.0,f|V|M3,12:30:6.66|-63.12,69:12:4.04|-56.5,5.03,2000 +V5662|CD-2310572|HR 4759|J123017.44-234147.1,f|V|M0,12:30:17.45|-25.41,-23:41:47.11|0.7,5.63,2000 +BD+53 1554|PPM 33593|HR 4767|J123050.13+530435.7,f|S|F8,12:30:50.14|19.46,53:4:35.79|182.1,6.21,2000 +Com 21|UU COM|BD+25 2517|HR 4766|J123100.56+243401.8,f|V|A2,12:31:0.56|-12.01,24:34:1.80|-8.9,5.44,2000 +Gacrux|Cru Gamma|V5672|CP-56 5272|HR 4763|J123109.95-570647.5,f|D|M3,12:31:9.96|27.94,-57:6:47.56|-264.3,1.65,2000 +Cru Gamma|CP-56 5274|HR 4764|J123116.72-570452.8,f|D|A3,12:31:16.72|10.19,-57:4:52.88|-15.9,6.39,2000 +SAO 119453|BD+08 2609|PPM 158929|J123121.41+073615.5,f|S|K5,12:31:21.42|-20.96,7:36:15.51|10.7,6.05,2000 +SAO 138832|SD-04 3296|PPM 195577|HR 4772|J123138.72-050309.3,f|S|G5,12:31:38.72|-31.53,-5:3:9.33|30.8,6.18,2000 +BG CRU|CP-58 4344|HR 4768|J123140.32-592526.1,f|V|F7,12:31:40.33|-13.20,-59:25:26.12|-3.5,5.50,2000 +SAO 251946|CP-62 2805|PPM 359467|HR 4771|J123156.11-633021.0,f|S|A8,12:31:56.12|-28.91,-63:30:21.02|25.1,5.96,2000 +Crv Eta-8|V5690|SAO 157345|SD-15 3489|PPM 225971|HR 4775|J123204.22-161145.6,f|V|F2,12:32:4.23|-424.36,-16:11:45.63|-58.4,4.31,2000 +CD-31 9746|HR 4774|J123204.38-323201.5,f|S|A3,12:32:4.39|-24.15,-32:32:1.54|-12,6.47,2000 +SAO 256954|CP-72 1261|PPM 371537|HR 4769|J123209.97-730003.8,f|S|K1,12:32:9.98|40.74,-73:0:3.80|-5.3,5.88,2000 +Mus Gamma|Gamma Muscae|SAO 256955|CP-71 1336|HR 4773|J123228.01-720758.7,f|S|B5,12:32:28.01|-50.58,-72:7:58.76|-5.2,3.84,2000 +SD-20 3667|J123232.80-211243.6,f|S|K0,12:32:32.81|-138.44,-21:12:43.62|-45.7,6.40,2000 +SD-13 3552|PPM 225991|HR 4776|J123235.99-135132.7,f|S|F2,12:32:36.00|-146.65,-13:51:32.78|-53.9,5.74,2000 +Vir 20|BD+11 2473|PPM 129139|HR 4777|J123302.87+101744.4,f|S|G8,12:33:2.88|-50.18,10:17:44.42|4.3,6.29,2000 +V5715|SAO 157359|SD-18 3416|HR 4778|J123322.24-194733.1,f|V|F2,12:33:22.25|-30.06,-19:47:33.17|-25.8,6.27,2000 +Dra Kappa-5|Kappa Draconis|BD+70 703|PPM 18276|HR 4787|J123328.94+694717.6,f|S|B6,12:33:28.94|-58.15,69:47:17.66|11.4,3.89,2000 +Com 22|BD+25 2523|J123334.22+241658.7,f|S|A4,12:33:34.22|-10.94,24:16:58.74|-8.6,6.26,2000 +SAO 157361|SD-12 3659|HR 4779|J123334.25-124948.7,f|S|G8,12:33:34.26|-16.97,-12:49:48.73|51.6,5.59,2000 +BD+34 2332|PPM 76567|HR 4783|J123338.91+331451.3,f|S|K0,12:33:38.92|21.20,33:14:51.30|-31.4,5.42,2000 +Chara|CVn Beta-8A|V5725|BD+42 2321|HR 4785|J123344.54+412126.9,f|D|G0,12:33:44.54|-705.04,41:21:26.93|292.9,4.25,2000 +Vir 21|SAO 138845|SD-08 3372|PPM 195599|HR 4781|J123346.74-092707.4,f|S|A0,12:33:46.75|-82.27,-9:27:7.48|0.1,5.50,2000 +BD+34 2333|PPM 76569|HR 4784|J123347.41+332304.8,f|S|K0,12:33:47.41|5.39,33:23:4.81|-10.9,6.24,2000 +SAO 223516|CD-49 7195|PPM 317573|HR 4782|J123359.10-495435.3,f|D|F3,12:33:59.11|-165.18,-49:54:35.32|-48.2,6.39,2000 +Crv Beta-9|V5729|SD-22 3401|Kraz|HR 4786|J123423.23-232348.3,f|V|G5,12:34:23.23|0.83,-23:23:48.33|-56,2.66,2000 +SAO 223527|CD-43 7755|PPM 317586|HR 4788|J123442.39-444022.8,f|D|G1,12:34:42.39|-75.84,-44:40:22.86|-206.2,5.77,2000 +Dra 6|BD+70 705|PPM 8192|HR 4795|J123444.01+700118.3,f|S|K2,12:34:44.01|-30.39,70:1:18.37|-1.4,4.95,2000 +Com 23|BD+23 2475|HR 4789|J123451.08+223745.3,f|D|A0,12:34:51.08|-58.29,22:37:45.33|31.7,4.79,2000 +BO MUS|SAO 251957|CP-67 2005|PPM 359494|J123454.44-674524.8,f|V|M4,12:34:54.45|-11.87,-67:45:24.82|-2.4,6.22,2000 +Com 24B|V5745|BD+19 2584B|PPM 129165|HR 4791|J123506.36+182237.4,f|D|A9,12:35:6.36|24.77,18:22:37.43|12.8,6.49,2000 +Com 24A|V5748|BD+19 2584A|PPM 129167|HR 4792|J123507.75+182237.4,f|D|K2,12:35:7.76|-4.56,18:22:37.41|23.3,4.99,2000 +BD+22 2490|HR 4793|J123508.16+215252.9,f|S|K1,12:35:8.17|21.99,21:52:52.98|-19.6,5.86,2000 +SAO 251962|CP-61 3298|PPM 359498|J123529.45-615029.6,f|S|G3,12:35:29.45|-270.90,-61:50:29.67|-73.3,6.23,2000 +V19428|SAO 223542|CD-40 7376|HR 4794|J123545.53-410119.0,f|V|A7,12:35:45.53|-107.28,-41:1:19.00|1.1,5.12,2000 +TU CRV|SD-19 3521|HR 4797|J123558.79-203138.9,f|V|F0,12:35:58.79|33.29,-20:31:38.91|-50.4,6.20,2000 +CD-39 7717|HR 4796|J123601.03-395210.2,f|D|A0,12:36:1.03|-55.95,-39:52:10.22|-24,5.79,2000 +CD-49 7233|PPM 341132|J123646.60-502007.4,f|S|A0,12:36:46.60|-47.39,-50:20:7.42|-9.5,6.40,2000 +Vir 25|SAO 138873|SD-05 3535|HR 4799|J123647.35-054954.8,f|S|A3,12:36:47.35|-27.46,-5:49:54.83|-19.5,5.88,2000 +Com 25|BD+17 2504|PPM 129193|J123658.33+170522.3,f|S|K5,12:36:58.33|-35.70,17:5:22.33|-17.5,5.68,2000 +Mus Alpha|Alpha Muscae|SAO 251974|CP-68 1702|HR 4798|J123711.01-690808.0,f|D|B2,12:37:11.02|-39.85,-69:8:8.03|-12.4,2.69,2000 +Cen Tau|CD-47 7745|PPM 317627|J123742.16-483228.6,f|S|A2,12:37:42.16|-186.61,-48:32:28.69|-6.5,3.85,2000 +V19440|CD-26 9233|J123742.27-270819.9,f|D|F1,12:37:42.28|79.56,-27:8:20.00|-94.2,5.41,2000 +BD+04 2631|J123804.41+031656.7,f|S|A1,12:38:4.42|-29.05,3:16:56.80|-11.2,6.34,2000 +FW VIR|BD+02 2560|J123822.40+015116.7,f|V|M3,12:38:22.41|-79.46,1:51:16.78|-17.5,5.71,2000 +SAO 157415|SD-17 3668|PPM 226138|J123844.61-181500.3,f|S|A5,12:38:44.61|-122.65,-18:15:0.36|26.6,6.00,2000 +CVn 9|V19447|BD+41 2312|HR 4811|J123846.27+405228.7,f|V|A7,12:38:46.28|-24.27,40:52:28.79|-13.5,6.35,2000 +KY MUS|CP-66 1861|PPM 359532|J123852.35-671134.9,f|D|B1,12:38:52.36|-4.59,-67:11:34.97|-0.7,6.27,2000 +BD+23 2479|HR 4812|J123902.18+223934.1,f|D|K1,12:39:2.18|-42.08,22:39:34.19|-19.8,6.38,2000 +V5822|CD-29 9845|J123903.45-302520.5,f|V|K2,12:39:3.46|-38.67,-30:25:20.59|-15.6,5.86,2000 +Com 26|BD+21 2439|HR 4815|J123907.30+210345.2,f|S|G8,12:39:7.31|-77.41,21:3:45.21|-8.9,5.48,2000 +SAO 256967|CP-74 955|PPM 371589|J123914.57-752214.1,f|D|B8,12:39:14.57|-27.09,-75:22:14.14|-10,6.46,2000 +Vir Chi-26A|SAO 138892|SD-07 3452|PPM 195694|HR 4813|J123914.76-075944.0,f|D|K2,12:39:14.77|-77.24,-7:59:44.03|-24.7,4.65,2000 +AX CVN|BD+36 2295|PPM 76636|HR 4816|J123916.86+355707.0,f|V|A0,12:39:16.86|19.31,35:57:7.05|-2.6,6.40,2000 +V5835|CD-39 7748|HR 4817|J123952.52-395914.2,f|V|B8,12:39:52.53|-42.06,-39:59:14.29|-24.9,4.64,2000 +FH MUS|SAO 251987|CP-65 1941|PPM 359544|HR 4814|J123955.85-663040.0,f|V|B8,12:39:55.85|-34.26,-66:30:40.10|-6.6,6.26,2000 +VV CRV|SAO 157447|SD-12 3676B|HR 4821|J124115.95-130050.0,f|D|F3,12:41:15.95|-117.94,-13:0:50.04|7.9,5.17,2000 +VV CRV|SAO 157448|SD-12 3676A|PPM 226198|HR 4822|J124116.22-130053.6,f|D|F5,12:41:16.22|-121.74,-13:0:53.69|-0.8,5.98,2000 +CD-45 7944|PPM 317692|HR 4818|J124122.98-460844.0,f|S|K4,12:41:22.99|-70.98,-46:8:44.09|60,5.83,2000 +Cen Gamma|CD-48 7597|PPM 317697|HR 4819|J124131.03-485735.5,f|D|A1,12:41:31.04|-187.32,-48:57:35.60|-1.2,2.18,2000 +UMa 76|BD+63 1026|PPM 18337|HR 4833|J124133.91+624246.9,f|S|A2,12:41:33.91|-30.74,62:42:46.94|-17.7,6.02,2000 +Vir 27|GG VIR|BD+11 2484|PPM 129249|HR 4824|J124134.39+102534.5,f|D|A7,12:41:34.39|-106.07,10:25:34.57|0.7,6.22,2000 +Vir Gamma-29B|V5859|SAO 138917|BD-00 2601B|HR 4826|J124139.52-012657.9,f|D|F0,12:41:39.52|-523.93,-1:26:57.95|-39.1,3.50,2000 +Porrima|Arich|Vir Gamma-29A|V5859|SAO 138917|BD-00 2601A|HR 4825|J124139.64-012657.7,f|D|F0,12:41:39.64|-616.75,-1:26:57.75|60.7,3.48,2000 +SAO 157451|SD-18 3442|HR 4827|J124149.39-194532.7,f|S|F3,12:41:49.39|-179.99,-19:45:32.73|17.1,6.03,2000 +Vir Rho-30|Rho Virginis|BD+11 2485|PPM 129256|HR 4828|J124153.05+101408.2,f|S|A0,12:41:53.06|82.66,10:14:8.25|-89.5,4.87,2000 +CH CRU|CP-59 4393|HR 4823|J124156.56-594108.9,f|V|B6,12:41:56.57|-24.68,-59:41:8.95|-3.6,4.92,2000 +Vir 31|V5867|SAO 119538|BD+07 2568|HR 4829|J124157.11+064823.8,f|D|A2,12:41:57.12|-71.64,6:48:23.82|-11.2,5.58,2000 +R MUS|SAO 251996|CP-68 1731|PPM 359566|J124205.02-692427.1,f|V|F7,12:42:5.03|-4.54,-69:24:27.19|-1.2,6.31,2000 +SAO 223614|CD-48 7608|PPM 317714|HR 4831|J124235.45-484847.1,f|S|K0,12:42:35.45|-123.27,-48:48:47.19|-30.4,4.66,2000 +CP-55 5194|PPM 341224|HR 4832|J124249.75-555649.2,f|S|B9,12:42:49.76|-34.61,-55:56:49.20|-16.5,6.07,2000 +BZ CRU|CP-62 2898|PPM 359572|J124250.26-630331.0,f|V|B1,12:42:50.27|-13.32,-63:3:31.05|-3.5,5.31,2000 +V19467|BD+61 1312|PPM 18343|J124304.12+610919.5,f|D|K2,12:43:4.13|-51.38,61:9:19.51|19.9,6.38,2000 +CP-55 5197|PPM 341227|HR 4834|J124309.17-561034.4,f|S|B7,12:43:9.18|-31.14,-56:10:34.41|-11.4,5.99,2000 +CD-39 7785|PPM 317724|HR 4836|J124326.26-401040.2,f|S|A8,12:43:26.26|25.21,-40:10:40.26|-16.1,6.44,2000 +CP-58 4453|PPM 341233|HR 4835|J124328.32-585409.8,f|D|K0,12:43:28.32|-71.12,-58:54:9.87|-0.3,6.42,2000 +SAO 138933|BD-00 2603|PPM 178863|HR 4837|J124338.05-013437.1,f|S|G8,12:43:38.05|48.13,-1:34:37.19|-74.6,5.92,2000 +CD-35 8155|HR 4838|J124358.66-362056.9,f|S|A0,12:43:58.67|7.37,-36:20:56.95|-7.4,6.38,2000 +CD-27 8832|HR 4839|J124400.53-281926.2,f|S|K4,12:44:0.53|-29.58,-28:19:26.25|-39.4,5.45,2000 +HD 111112|BD+81 402|HR 4852|J124426.01+803715.6,f|S|A5,12:44:26.01|31.46,80:37:15.69|-42.6,6.33,2000 +BD+44 2221|PPM 53159|HR 4843|J124427.10+440610.8,f|S|F6,12:44:27.10|-30.27,44:6:10.81|2.9,6.34,2000 +CVn 10|BD+40 2570|HR 4845|J124459.40+391644.0,f|S|G0,12:44:59.41|-359.71,39:16:44.10|139.3,5.96,2000 +V19474|CP-68 1745|PPM 359599|HR 4841|J124502.05-684950.7,f|V|F6,12:45:2.06|-6.72,-68:49:50.70|-1.2,6.17,2000 +Y CVN|BD+46 1817|PPM 53169|HR 4846|J124507.82+452624.9,f|V|C5,12:45:7.83|-2.21,45:26:24.92|13.1,5.27,2000 +Vir 32|FM VIR|SAO 119574|BD+08 2639|PPM 159145|HR 4847|J124537.05+074023.9,f|V|F0,12:45:37.06|-108.97,7:40:23.97|4.5,5.21,2000 +Cru Iota|CP-60 4273|HR 4842|J124538.05-605852.7,f|D|K0,12:45:38.05|112.49,-60:58:52.75|-64.9,4.69,2000 +Mus Beta|CP-67 2064|PPM 359611|HR 4844|J124616.80-680629.2,f|D|B2,12:46:16.81|-40.38,-68:6:29.23|-10.3,3.08,2000 +Vir 33|BD+10 2468|PPM 159153|HR 4849|J124622.54+093222.8,f|D|K1,12:46:22.54|278.69,9:32:22.86|-455,5.66,2000 +V19477|CP-55 5215|PPM 341283|HR 4848|J124622.71-562919.7,f|D|B3,12:46:22.71|-33.13,-56:29:19.73|-14.6,4.62,2000 +Com 27|BD+17 2533|PPM 129321|HR 4851|J124638.76+163439.6,f|S|K3,12:46:38.76|12.51,16:34:39.69|17.4,5.11,2000 +CD-32 8912|J124646.22-331855.7,f|D|K3,12:46:46.23|11.66,-33:18:55.74|-28.3,5.87,2000 +EP VIR|SAO 119585|HD 111133|BD+06 2660|PPM 159165|HR 4854|J124702.30+055701.3,f|V|A0,12:47:2.31|29.99,5:57:1.34|-55.5,6.31,2000 +Vir 34|HD 111164|BD+12 2512|PPM 129331|HR 4855|J124713.64+115729.1,f|D|A3,12:47:13.64|44.76,11:57:29.12|-18.4,6.11,2000 +BD+63 1034|HR 4859|J124718.95+624652.1,f|S|A9,12:47:18.95|20.03,62:46:52.16|6.5,5.89,2000 +SAO 138967|HD 111199|SD-05 3569|PPM 195845|HR 4856|J124733.42-061806.3,f|D|F7,12:47:33.42|5.22,-6:18:6.31|-42.2,6.28,2000 +Dra 7|V19486|HD 111335|BD+67 764|PPM 18371|HR 4863|J124734.34+664725.0,f|V|K5,12:47:34.34|1.66,66:47:25.09|-4.7,5.43,2000 +Mimosa|Becrux|Cru Beta|Beta Crucis|HD 111123|CP-59 4451|HR 4853|J124743.26-594119.5,f|D|B0,12:47:43.26|-48.22,-59:41:19.55|-12.8,1.31,2000 +Vir 35|V5947|SAO 119596|HD 111239|BD+04 2653|HR 4858|J124751.41+033421.7,f|V|M3,12:47:51.41|-8.98,3:34:21.78|-2.1,6.44,2000 +HD 111226|CD-2410540|HR 4857|J124753.64-245105.9,f|S|B8,12:47:53.65|-41.51,-24:51:5.97|36.5,6.42,2000 +Com 28|BD+14 2546|PPM 129344|HR 4861|J124814.33+133310.8,f|S|A1,12:48:14.34|-48.41,13:33:10.87|-34,6.48,2000 +SAO 181114|HD 111295|CD-26 9340|J124826.25-273550.5,f|S|G5,12:48:26.26|-152.87,-27:35:50.58|-63.3,5.66,2000 +HD 111456|BD+61 1320|PPM 18377|HR 4867|J124839.46+601911.3,f|S|F5,12:48:39.46|107.77,60:19:11.36|-30.6,5.84,2000 +CVn 11|HD 111421|BD+49 2163|PPM 53192|HR 4866|J124841.80+482800.6,f|S|A6,12:48:41.80|-63.95,48:28:0.62|10.7,6.25,2000 +HD 111395|BD+25 2568|HR 4864|J124847.04+245024.8,f|S|G7,12:48:47.05|-334.59,24:50:24.81|-106.1,6.30,2000 +Com 29|HD 111397|BD+14 2549|PPM 129362|HR 4865|J124854.21+140721.3,f|S|A1,12:48:54.21|28.95,14:7:21.30|-20.2,5.71,2000 +BD+84 289|PPM 2216|HR 4892|J124906.67+832504.1,f|D|A0,12:49:6.68|-22.04,83:25:4.20|15.5,5.81,2000 +BD+84 290|PPM 2217|HR 4893|J124913.65+832446.4,f|D|A1,12:49:13.66|-28.15,83:24:46.44|17.6,5.31,2000 +Com 30|HD 111469|BD+28 2153|HR 4869|J124917.45+273308.5,f|D|A2,12:49:17.45|-92.96,27:33:8.56|21.7,5.76,2000 +V5976|HD 111572|BD+49 2165|J124938.03+484424.1,f|V|K1,12:49:38.04|-15.63,48:44:24.11|-7.5,6.50,2000 +SAO 256983|HD 111315|CP-71 1391|PPM 371654|HR 4862|J124944.96-715910.5,f|S|G8,12:49:44.97|10.53,-71:59:10.54|-5.9,5.55,2000 +V5983|BD+38 2373|PPM 76756|HR 4875|J125010.74+373100.9,f|V|A3,12:50:10.74|-88.64,37:31:0.97|21.8,5.88,2000 +HD 111591|BD+23 2502|HR 4873|J125017.29+225148.2,f|S|K0,12:50:17.30|104.63,22:51:48.27|-66.4,6.43,2000 +SAO 223698|HD 111519|CD-47 7893|PPM 317852|HR 4871|J125019.48-482734.3,f|S|A0,12:50:19.49|-48.05,-48:27:34.36|6.7,6.26,2000 +HD 111597|CD-33 8653|HR 4874|J125041.16-335957.4,f|D|A0,12:50:41.17|-29.10,-33:59:57.49|-14.3,4.91,2000 +HD 111588|CP-52 5947|PPM 341356|HR 4872|J125057.87-524714.7,f|S|A5,12:50:57.88|-27.21,-52:47:14.73|-12,5.71,2000 +DS CRU|HD 111613|CP-59 4494|PPM 359688|HR 4876|J125117.97-601947.2,f|V|A2,12:51:17.98|-5.27,-60:19:47.24|-1.1,5.75,2000 +V5994|SD-09 3569|PPM 226444|HR 4877|J125122.92-102017.5,f|D|G8,12:51:22.93|-8.85,-10:20:17.59|-3.4,6.47,2000 +Vir 37|SAO 119633|HD 111765|BD+03 2703|PPM 159246|HR 4878|J125136.88+030324.4,f|S|K5,12:51:36.89|-36.55,3:3:24.44|20.1,6.01,2000 +Com 31|V19505|HD 111812|BD+28 2156|HR 4883|J125141.92+273226.5,f|V|G0,12:51:41.92|-9.44,27:32:26.57|-8.8,4.93,2000 +V5999|HD 111774|CD-39 7879|HR 4879|J125156.92-394049.5,f|V|B8,12:51:56.93|-27.13,-39:40:49.55|-19,5.98,2000 +MO HYA|SAO 181169|HD 111786|CD-26 9369|HR 4881|J125157.89-264417.7,f|V|A0,12:51:57.90|-109.85,-26:44:17.79|31.8,6.14,2000 +V19504|HD 111775|CD-47 7917|PPM 317879|J125205.43-480539.4,f|V|A0,12:52:5.43|-44.18,-48:5:39.43|3.8,6.31,2000 +Com 32A|V19508|HD 111862|BD+17 2551|HR 4884|J125212.25+170426.1,f|D|M0,12:52:12.26|2.15,17:4:26.20|-5,6.31,2000 +CP-53 5359|PPM 341381|HR 4882|J125224.59-534947.7,f|D|G8,12:52:24.59|-17.44,-53:49:47.75|-1.7,6.27,2000 +HD 111893|BD+16 2430|HR 4886|J125227.49+160720.9,f|S|A7,12:52:27.50|-43.23,16:7:20.98|-12.7,6.30,2000 +HD 111884|CP-54 5360|HR 4885|J125304.16-545708.9,f|S|K2,12:53:4.17|-96.65,-54:57:8.90|4.7,5.91,2000 +SAO 223731|HD 111915|CD-48 7753|PPM 317896|HR 4888|J125306.90-485635.9,f|S|K3,12:53:6.91|-79.21,-48:56:35.93|-25.3,4.32,2000 +Vir 38|HD 111998|SD-02 3593|PPM 195932|HR 4891|J125311.15-033311.1,f|S|F5,12:53:11.16|-263.79,-3:33:11.15|-3.5,6.12,2000 +Com 35A|BD+22 2519A|HR 4894|J125317.74+211441.7,f|D|G7,12:53:17.74|-42.50,21:14:41.79|-32,4.92,2000 +V6008|CP-59 4529|PPM 359716|HR 4887|J125321.89-601942.5,f|V|B9,12:53:21.89|-4.16,-60:19:42.56|-1,5.76,2000 +HD 111968|CD-39 7893|PPM 317899|HR 4889|J125326.19-401043.9,f|S|A7,12:53:26.20|69.68,-40:10:43.94|-21.8,4.27,2000 +BD+20 2772|J125332.10+192851.8,f|S|G5,12:53:32.11|-150.32,19:28:51.82|-176.8,6.43,2000 +SD-03 3373|PPM 195939|HR 4896|J125338.12-041328.7,f|S|K0,12:53:38.12|3.89,-4:13:28.78|-62.7,6.44,2000 +Cru Kappa|V19540|HD 111973|CP-59 4555|PPM 359729|J125348.91-602234.4,f|V|B5,12:53:48.92|-3.04,-60:22:34.48|-1.7,5.90,2000 +Vir 41|BD+13 2602|PPM 129422|J125349.71+122506.2,f|S|A7,12:53:49.71|63.43,12:25:6.30|-35.1,6.24,2000 +Alioth|Aliath|UMa Epsilon-77|Epsilon Ursae Majoris|HD 112185|BD+56 1627|PPM 33769|J125401.74+555735.3,f|D|A0,12:54:1.75|111.76,55:57:35.36|-9,1.76,2000 +HD 112171|BD+34 2369|PPM 76798|J125413.08+333204.1,f|S|A7,12:54:13.09|-89.65,33:32:4.13|31.3,6.25,2000 +V6019|SAO 157584|HD 112131|SD-10 3570|J125418.65-113854.8,f|V|A2,12:54:18.66|-138.98,-11:38:54.85|10.6,6.00,2000 +Vir Psi-40|Psi Virginis|HD 112142|SD-08 3449|J125421.16-093220.3,f|S|M3,12:54:21.16|-18.19,-9:32:20.38|-19.7,4.79,2000 +Cru Mu1|V19544|CP-56 5487A|PPM 341411|HR 4898|J125435.62-571040.5,f|D|B2,12:54:35.62|-30.49,-57:10:40.53|-13.6,4.00,2000 +Cru Mu2|Mu2 Crucis|CP-56 5487B|PPM 341412|HR 4899|J125436.88-571007.2,f|D|B5,12:54:36.89|-32.37,-57:10:7.21|-10.9,5.12,2000 +Cru Lambda|Lambda Crucis|CP-58 4584|PPM 341414|HR 4897|J125439.18-590848.1,f|S|B4,12:54:39.18|-33.39,-59:8:48.12|-14.8,4.61,2000 +TU CVN|HD 112264|BD+47 2003|PPM 53252|J125456.52+471148.1,f|V|M5,12:54:56.52|-17.22,47:11:48.20|-6.5,5.85,2000 +SAO 223753|HD 112164|CD-43 7953|PPM 317927|J125458.51-440907.0,f|S|G1,12:54:58.51|-237.31,-44:9:7.08|-231,5.89,2000 +Oct Iota|SAO 258654|HD 111482|CP-84 407|PPM 377511|J125458.81-850724.1,f|D|K0,12:54:58.81|67.47,-85:7:24.13|22.1,5.46,2000 +V19550|HD 112213|CD-42 7975|PPM 317934|J125519.43-425456.6,f|V|M0,12:55:19.43|-37.79,-42:54:56.64|-12.6,5.46,2000 +Dra 8|IR DRA|HD 112429|BD+66 778|PPM 18423|HR 4916|J125528.54+652618.5,f|V|F0,12:55:28.55|-4.61,65:26:18.50|-30.4,5.23,2000 +Auva|Minelauva|Vir Delta-43|V6026|SAO 119674|BD+04 2669|PPM 159316|J125536.20+032350.8,f|D|M3,12:55:36.21|-471.52,3:23:50.89|-52.8,3.42,2000 +SAO 157599|SD-14 3605|PPM 226546|HR 4911|J125553.24-151937.2,f|S|A0,12:55:53.24|-19.10,-15:19:37.29|-1,6.20,2000 +V6024|HD 112244|CP-56 5498|PPM 341431|J125557.13-565008.9,f|D|O9,12:55:57.13|-5.09,-56:50:8.90|-0.8,5.38,2000 +CVn Alpha-12B|HD 112412|BD+39 2580B|PPM 76814|HR 4914|J125600.45+381853.6,f|D|F0,12:56:0.45|-203.84,38:18:53.69|88.3,5.48,2000 +Cor Carioli|CVn Alpha-12A|Alpha2 Canum Venaticorum|HD 112413|BD+39 2580A|PPM 76815|HR 4915|J125601.66+381906.1,f|D|A0,12:56:1.67|-233.49,38:19:6.17|55,2.89,2000 +HD 112486|BD+54 1556|HR 4917|J125617.56+540558.1,f|D|A5,12:56:17.56|-78.11,54:5:58.16|2.5,5.84,2000 +RY DRA|HD 112559|BD+66 780|PPM 18429|J125625.91+655939.8,f|V|C4,12:56:25.91|12.39,65:59:39.81|-9.8,6.37,2000 +SAO 256992|HD 112219|CP-71 1404|J125631.68-721106.7,f|S|G8,12:56:31.69|-15.97,-72:11:6.76|-12.1,5.93,2000 +V0823 CEN|HD 112381|CP-53 5397|PPM 341447|J125658.22-543514.4,f|V|A0,12:56:58.22|-33.72,-54:35:14.45|-15.4,6.49,2000 +V0945 CEN|CD-50 7394|PPM 341451|HR 4913|J125704.35-511155.5,f|V|B8,12:57:4.35|-29.51,-51:11:55.51|-14.8,5.17,2000 +V19560|BD+46 1833|PPM 53274|HR 4919|J125707.79+461036.4,f|V|K0,12:57:7.80|-9.45,46:10:36.44|-53.9,6.11,2000 +SAO 157618|HD 112495|SD-11 3398|PPM 226581|J125712.67-120401.0,f|S|K5,12:57:12.67|-17.16,-12:4:1.01|-9.6,6.36,2000 +SAO 181265|HD 112519|SD-21 3635|HR 4918|J125733.12-224512.5,f|S|G5,12:57:33.13|-58.37,-22:45:12.60|-13,6.31,2000 +HD 112826|BD+65 913|PPM 18444|J125818.85+645531.9,f|S|K0,12:58:18.85|-18.05,64:55:31.92|12.1,6.45,2000 +BD+76 473|HR 4927|J125847.33+752821.0,f|S|K0,12:58:47.33|13.17,75:28:21.03|13.8,6.00,2000 +Com 36|V6046|HD 112769|BD+18 2682|PPM 129486|J125855.44+172434.0,f|V|M1,12:58:55.44|-38.64,17:24:34.00|35,4.75,2000 +Vir 44|HD 112846|SD-03 3384|HR 4921|J125939.51-034842.9,f|D|A3,12:59:39.52|-48.19,-3:48:42.93|6.6,5.80,2000 +Dra 9|BD+67 773|PPM 18451|HR 4928|J125955.07+663550.1,f|S|K2,12:59:55.07|-139.77,66:35:50.18|-14.6,5.37,2000 +Com 37|V19571|HD 112989|BD+31 2434|PPM 76857|HR 4924|J130016.46+304706.0,f|D|G9,13:0:16.47|-21.65,30:47:6.08|-6.4,4.89,2000 +HD 112935|CD-32 9083|HR 4922|J130032.65-333018.9,f|S|F0,13:0:32.66|-74.17,-33:30:18.96|-71.8,6.02,2000 +Vir 46A|V6053|HD 112992|SD-02 3609|HR 4925|J130035.94-032206.5,f|D|K2,13:0:35.95|-19.47,-3:22:6.56|49.4,5.99,2000 +BD+19 2622|HR 4926|J130038.71+182222.8,f|D|F6,13:0:38.71|-234.60,18:22:22.83|59.3,6.21,2000 +UMa 78A|V6058|HD 113139|BD+57 1408|PPM 33822|HR 4931|J130043.69+562158.8,f|D|F2,13:0:43.70|108.34,56:21:58.82|2.7,4.94,2000 +Com 38|BD+17 2573|PPM 129516|HR 4929|J130109.61+170723.3,f|S|K0,13:1:9.61|-9.03,17:7:23.33|-23,5.97,2000 +HD 113337|BD+64 927|PPM 18458|HR 4934|J130146.92+633636.8,f|D|F6,13:1:46.93|-171.55,63:36:36.81|25.5,6.02,2000 +Vindemiatrix|Almuredin|Protrigetrix|Alaraph b|Vir Epsilon-47|V6064|HD 113226|BD+11 2529|PPM 129529|HR 4932|J130210.59+105732.9,f|D|G8,13:2:10.60|-275.09,10:57:32.94|20,2.84,2000 +Mus Delta|HD 112985|CP-70 1548|PPM 371724|HR 4923|J130216.26-713255.8,f|S|K2,13:2:16.26|263.58,-71:32:55.88|-23.3,3.61,2000 +LS MUS|CP-70 1553|PPM 371731|J130305.33-712832.6,f|V|B1,13:3:5.34|-11.20,-71:28:32.62|-2.4,5.96,2000 +Cen Xi1|HD 113314|CD-48 7887|HR 4933|J130333.30-493138.1,f|S|A0,13:3:33.31|-46.54,-49:31:38.15|-11.2,4.83,2000 +SAO 181357|HD 113415|SD-19 3629|HR 4935|J130346.11-203500.5,f|D|F7,13:3:46.12|142.11,-20:35:0.59|5.1,5.60,2000 +V0789 CEN|SAO 223881|HD 113523|CD-40 7662|HR 4938|J130448.23-411146.7,f|V|M3,13:4:48.24|-17.27,-41:11:46.76|-16.5,6.27,2000 +HD 113889|BD+73 583|PPM 8333|J130449.74+730129.9,f|D|F0,13:4:49.74|-19.05,73:1:29.91|9.6,6.47,2000 +V0947 CEN|SAO 223885|HD 113537|CD-46 8383|PPM 318112|J130506.65-470700.8,f|V|F4,13:5:6.66|-45.83,-47:7:0.88|-34,6.43,2000 +V6084|CD-51 7248|HR 4939|J130530.77-520656.3,f|V|M1,13:5:30.78|-51.95,-52:6:56.38|9,6.44,2000 +CVn 14|V6089|HD 113797|BD+36 2337|PPM 76921|HR 4943|J130544.43+354756.0,f|V|B9,13:5:44.44|-36.74,35:47:56.03|19.3,5.20,2000 +V19596|HD 113847|BD+46 1847|PPM 53359|HR 4945|J130552.26+451606.7,f|D|K1,13:5:52.27|-14.57,45:16:6.78|24.6,5.64,2000 +CD-47 8088|J130616.70-482747.8,f|D|B5,13:6:16.70|-29.74,-48:27:47.84|-14.7,4.71,2000 +Com 39|HD 113848|BD+21 2487|HR 4946|J130621.23+210912.2,f|D|F4,13:6:21.24|-69.11,21:9:12.23|-46.5,6.01,2000 +Com 40|FS COM|HD 113866|BD+23 2538|HR 4949|J130622.60+223658.2,f|V|M5,13:6:22.60|29.77,22:36:58.27|-42.7,5.64,2000 +HD 113994|BD+62 1275|PPM 18488|HR 4953|J130622.88+620230.7,f|S|G7,13:6:22.88|17.09,62:2:30.73|-43.4,6.15,2000 +V6092|HD 113778|CD-40 7682|PPM 318136|HR 4941|J130635.08-413518.3,f|V|K0,13:6:35.08|44.20,-41:35:18.39|-14.6,5.60,2000 +HD 113852|CD-35 8441|HR 4947|J130654.25-355143.3,f|S|A0,13:6:54.25|34.77,-35:51:43.32|-86.4,5.63,2000 +Cen Xi2|HD 113791|CD-49 7644|PPM 318144|HR 4942|J130654.63-495422.4,f|D|B1,13:6:54.64|-26.28,-49:54:22.49|-12.4,4.28,2000 +Com 41|HD 113996|BD+28 2185|HR 4954|J130710.72+273729.0,f|S|K5,13:7:10.73|33.23,27:37:29.07|-68.2,4.78,2000 +HD 113823|CP-59 4740|PPM 341615|HR 4944|J130724.29-595137.8,f|D|B9,13:7:24.30|-11.75,-59:51:37.84|-8.1,6.04,2000 +CP-52 6194|HR 4951|J130738.28-532735.1,f|S|B8,13:7:38.28|-36.88,-53:27:35.15|-20.4,5.71,2000 +BD+28 2187|HR 4956|J130753.63+273321.4,f|S|K4,13:7:53.63|-39.63,27:33:21.45|-61.9,6.17,2000 +Vir 49|SAO 157739|SD-09 3628|PPM 226835|HR 4955|J130753.81-104425.4,f|S|K0,13:7:53.81|16.06,-10:44:25.47|-9.4,5.16,2000 +Mus Theta|Theta Muscae|SAO 252162|CP-64 2183|HR 4952|J130807.15-651821.6,f|D|B0,13:8:7.15|-5.33,-65:18:21.68|-2.2,5.66,2000 +HD 113694|CP-77 887|PPM 371767|J130820.40-782645.7,f|D|A0,13:8:20.41|-38.85,-78:26:45.71|-24.9,6.43,2000 +V6103|SAO 252163|HD 113919|CP-67 2192|PPM 359894|J130827.82-674748.3,f|V|M1,13:8:27.83|-9.58,-67:47:48.34|0,6.36,2000 +SAO 139175|HD 114113|SD-08 3491|HR 4957|J130832.46-085903.7,f|S|K3,13:8:32.47|-36.15,-8:59:3.79|-64.2,5.57,2000 +Hya Psi-45|HD 114149|SD-22 3515|PPM 261261|HR 4958|J130903.27-230705.0,f|S|K1,13:9:3.27|-20.00,-23:7:5.05|-39.9,4.94,2000 +HD 114256|BD+10 2516|PPM 129623|J130912.43+100120.8,f|S|K0,13:9:12.44|22.75,10:1:20.89|0.2,5.79,2000 +SAO 139183|SD-08 3495|PPM 196221|HR 4959|J130914.23-093217.1,f|S|K0,13:9:14.24|-56.21,-9:32:17.15|0.5,6.31,2000 +HD 114357|BD+38 2407|HR 4964|J130938.64+372523.3,f|S|K3,13:9:38.65|-106.02,37:25:23.33|5.9,6.01,2000 +CVn 15B|HD 114376|BD+39 2611|PPM 76972|HR 4967|J130942.03+383201.9,f|D|B7,13:9:42.03|-14.78,38:32:1.99|6.2,6.28,2000 +Vir 50|V6114|HD 114287|SD-09 3636|PPM 226882|HR 4961|J130945.27-101945.5,f|V|K5,13:9:45.28|-15.05,-10:19:45.58|-7.3,5.96,2000 +V19637|HD 114326|BD+17 2595|PPM 129625|HR 4962|J130947.84+165055.0,f|V|K5,13:9:47.85|-65.61,16:50:55.00|-15.4,5.91,2000 +Vir Theta-51A|SAO 139189|SD-04 3430|PPM 196233|HR 4963|J130956.99-053220.4,f|D|A1,13:9:56.99|-35.09,-5:32:20.43|-32.8,4.39,2000 +Com Alpha-42A|V6116|HD 114378|BD+18 2697|Diadem|HR 4968|J130959.27+173145.9,f|D|F5,13:9:59.28|-445.98,17:31:45.95|129.7,4.32,2000 +CVn 17A|V19641|HD 114447|BD+39 2614|PPM 76982|HR 4971|J131003.21+382956.3,f|D|A9,13:10:3.22|-71.14,38:29:56.33|44.9,5.93,2000 +V0824 CEN|HD 114365|CD-51 7329|PPM 341672|HR 4965|J131058.43-523400.8,f|V|Ap,13:10:58.43|-35.19,-52:34:0.83|-17.9,6.04,2000 +HD 114435|CD-41 7648|PPM 318215|J131108.88-421358.4,f|S|F7,13:11:8.88|-76.63,-42:13:58.41|-26.1,5.79,2000 +SAO 223966|HD 114474|CD-42 8175|PPM 318227|HR 4973|J131123.21-432206.7,f|S|K1,13:11:23.22|-114.49,-43:22:6.79|-19.7,5.24,2000 +V19645|SAO 181446|HD 114576|CD-25 9653|PPM 261317|HR 4978|J131139.19-263306.1,f|D|A5,13:11:39.19|-71.79,-26:33:6.20|1.6,6.49,2000 +SAO 252185|HD 114371|CP-69 1772|HR 4966|J131151.44-695631.2,f|D|F3,13:11:51.44|35.03,-69:56:31.26|1.3,5.91,2000 +Com Beta-43|V19648|BD+28 2193|HR 4983|J131152.39+275241.4,f|D|F9,13:11:52.39|-801.91,27:52:41.46|882.7,4.25,2000 +SAO 252187|HD 114461|CP-62 3046|PPM 359932|HR 4972|J131153.06-631810.7,f|S|A8,13:11:53.07|-4.04,-63:18:10.77|-2.5,6.35,2000 +HD 114613|CD-37 8437|HR 4979|J131203.18-374810.8,f|S|G3,13:12:3.18|-382.46,-37:48:10.88|47,4.85,2000 +Vir 53A|V6136|SAO 157788|HD 114642|SD-15 3613|PPM 226937|HR 4981|J131203.54-161154.9,f|D|F5,13:12:3.54|96.22,-16:11:54.97|-287.2,5.04,2000 +HD 114724|BD+25 2610|HR 4984|J131208.40+241528.8,f|S|K1,13:12:8.41|-22.29,24:15:28.89|-41.8,6.31,2000 +V0831 CEN|HD 114529|CP-59 4815|PPM 341692|HR 4975|J131217.59-595514.0,f|D|B8,13:12:17.60|-28.57,-59:55:14.08|-17.5,4.59,2000 +V6153|HD 115337|BD+81 416|PPM 2292|J131225.43+802816.7,f|D|K0,13:12:25.43|-6.33,80:28:16.71|11.3,6.27,2000 +BD+12 2565|PPM 129659|HR 4986|J131232.92+113321.9,f|S|M0,13:12:32.92|-50.70,11:33:21.95|-30.6,5.76,2000 +SAO 252196|CP-65 2201|PPM 359945|HR 4977|J131248.80-661336.2,f|S|A0,13:12:48.80|25.34,-66:13:36.29|7.8,5.91,2000 +V19652|CD-42 8196|PPM 318251|HR 4982|J131250.83-424158.9,f|V|K0,13:12:50.84|-26.79,-42:41:58.99|-3.5,6.20,2000 +V19650|CP-59 4827|J131255.71-594859.7,f|D|G0,13:12:55.72|8.22,-59:48:59.78|-107.9,6.20,2000 +HD 114889|BD+19 2649|PPM 129669|HR 4992|J131312.40+184337.2,f|S|G8,13:13:12.40|-216.07,18:43:37.23|-49.3,6.11,2000 +HD 114772|CD-50 7589|HR 4985|J131323.34-504159.2,f|D|B9,13:13:23.35|-38.48,-50:41:59.24|-12.5,5.91,2000 +BD+40 2633|PPM 53432|HR 4997|J131342.94+400910.3,f|S|G8,13:13:42.94|-52.17,40:9:10.39|15.5,4.93,2000 +SAO 223989|HD 114873|CD-42 8213|PPM 318265|HR 4991|J131357.67-430820.7,f|S|K4,13:13:57.68|-150.06,-43:8:20.78|22.3,6.15,2000 +Vir 55|HD 114946|SD-19 3651|PPM 226982|HR 4995|J131410.89-195551.4,f|S|G7,13:14:10.90|-120.29,-19:55:51.41|159.7,5.32,2000 +HD 114835|CP-58 4738|PPM 341712|HR 4988|J131412.08-584102.1,f|S|K0,13:14:12.09|-55.28,-58:41:2.17|-11.7,5.90,2000 +HD 114837|CP-58 4740|PPM 341714|HR 4989|J131415.14-590611.6,f|D|F7,13:14:15.14|-249.63,-59:6:11.65|-154.6,4.91,2000 +HD 114533|CP-77 890|PPM 371799|HR 4976|J131417.33-782650.8,f|S|F8,13:14:17.33|-8.41,-78:26:50.83|-3.7,5.85,2000 +LN VIR|BD+12 2572|HR 4998|J131431.28+111953.9,f|D|M0,13:14:31.28|68.54,11:19:53.96|-52.8,5.64,2000 +HD 114971|CD-48 8050|PPM 318281|HR 4996|J131443.26-485725.2,f|S|K1,13:14:43.27|-108.74,-48:57:25.28|-89.5,5.84,2000 +CD-35 8547|PPM 291163|HR 4999|J131509.45-362217.0,f|S|K1,13:15:9.46|-43.72,-36:22:17.07|-21.4,6.17,2000 +Mus Eta|Eta Muscae|SAO 252224|HD 114911|CP-67 2224|PPM 359977|HR 4993|J131514.94-675340.5,f|D|B8,13:15:14.94|-36.92,-67:53:40.52|-10.6,4.78,2000 +SAO 252225|HD 114912|CP-69 1784|PPM 359978|HR 4994|J131525.59-694045.4,f|S|K2,13:15:25.60|-99.96,-69:40:45.42|-35.5,6.37,2000 +CVn 19|HD 115271|BD+41 2374|PPM 53451|J131531.95+405118.7,f|S|A7,13:15:31.95|-120.26,40:51:18.72|11.1,5.78,2000 +Vir 57|SAO 157823|SD-19 3653|J131558.77-195635.1,f|S|K1,13:15:58.77|304.71,-19:56:35.17|-115.4,5.22,2000 +HD 115319|BD+19 2655|PPM 129696|J131614.28+190306.2,f|S|G8,13:16:14.29|-96.84,19:3:6.24|7.3,6.45,2000 +HD 115612|BD+69 694|PPM 18548|J131628.63+682428.8,f|S|B9,13:16:28.63|-14.08,68:24:28.80|16.3,6.20,2000 +HD 115365|BD+20 2814|J131632.26+194707.0,f|S|F0,13:16:32.26|-110.09,19:47:7.04|29.5,6.43,2000 +SAO 252236|HD 115149|CP-64 2316|PPM 359992|J131644.90-650817.7,f|S|F5,13:16:44.91|-98.95,-65:8:17.73|-54.7,6.06,2000 +Vir 59|SAO 119847|HD 115383|BD+10 2531|PPM 159616|J131646.51+092526.9,f|D|G0,13:16:46.52|-334.57,9:25:26.96|190.7,5.20,2000 +CD-3010457|PPM 291197|J131653.13-313022.3,f|S|K1,13:16:53.13|34.66,-31:30:22.31|-49.3,5.12,2000 +V6164|HD 115211|CP-66 2142|PPM 359998|J131713.01-664700.3,f|V|K2,13:17:13.01|-15.26,-66:47:0.38|-6.3,4.85,2000 +HD 115331|CD-43 8165|PPM 318326|J131713.91-435846.1,f|S|A3,13:17:13.92|-3.99,-43:58:46.13|-15.5,5.82,2000 +HD 115478|BD+14 2591|PPM 129714|J131715.62+134032.7,f|S|K3,13:17:15.63|8.16,13:40:32.70|42.9,5.31,2000 +V6171|SAO 139264|HD 115488|BD+00 3040|J131729.85-004033.8,f|D|F0,13:17:29.85|-68.10,-0:40:33.83|-9.6,6.36,2000 +CVn 20|AO CVN|BD+41 2380|PPM 53473|J131732.54+403421.3,f|V|F3,13:17:32.54|-125.67,40:34:21.39|18.5,4.71,2000 +Vir Sigma-60|V6173|SAO 119855|HD 115521|BD+06 2722|J131736.28+052811.5,f|V|M1,13:17:36.28|-7.17,5:28:11.53|10,4.79,2000 +CVn 21|BK CVN|HD 115735|BD+50 1994|PPM 53482|J131814.51+494055.4,f|V|A0,13:18:14.51|-33.39,49:40:55.42|19.4,5.15,2000 +Vir 61A|SAO 157844|HD 115617|SD-17 3813|J131824.31-181840.3,f|D|G6,13:18:24.31|-1069.89,-18:18:40.31|-1063.8,4.74,2000 +HD 115723|BD+34 2410|J131827.72+340553.8,f|S|K4,13:18:27.73|29.19,34:5:53.89|4.6,5.79,2000 +HD 115529|CD-50 7660|PPM 341771|J131834.86-511708.7,f|S|A0,13:18:34.87|-26.83,-51:17:8.79|-11.9,6.19,2000 +CP-79 723|PPM 371831|J131848.27-795833.6,f|S|B9,13:18:48.28|-18.12,-79:58:33.66|-22.9,6.34,2000 +Hya Gamma-46|V6180|SAO 181543|HD 115659|SD-22 3554|PPM 261484|J131855.29-231017.4,f|D|G8,13:18:55.30|68.40,-23:10:17.44|-41.1,3.00,2000 +BD+35 2435|J131904.25+350740.7,f|D|F0,13:19:4.25|-29.93,35:7:40.72|17.5,6.01,2000 +HD 115439|CP-71 1458|PPM 371836|J131918.98-720208.1,f|S|K3,13:19:18.98|-5.64,-72:2:8.17|-51.4,6.04,2000 +CVn 23|BD+40 2647|J132018.95+400901.9,f|S|K1,13:20:18.95|-58.01,40:9:1.97|-3.3,5.60,2000 +HD 115778|CP-59 4912|PPM 341813|J132035.02-594622.0,f|D|F3,13:20:35.03|-31.64,-59:46:22.01|-9.2,6.20,2000 +Cen Iota|HD 115892|CD-36 8497|PPM 291265|J132035.81-364244.2,f|S|A2,13:20:35.82|-340.78,-36:42:44.26|-88,2.76,2000 +V0964 CEN|HD 115823|CP-52 6405|PPM 341815|J132037.82-524452.1,f|V|B6,13:20:37.82|-30.69,-52:44:52.17|-16.5,5.46,2000 +V6196|SAO 119889|HD 115995|BD+03 2758|PPM 159678|J132041.56+025632.2,f|D|A3,13:20:41.57|-62.32,2:56:32.24|-11.2,6.33,2000 +V6193|HD 115842|CP-55 5504|PPM 341819|J132048.33-554802.4,f|V|B0,13:20:48.34|-3.88,-55:48:2.48|4,6.04,2000 +HD 115912|CD-46 8580|PPM 318391|J132057.69-465248.0,f|S|K1,13:20:57.70|-74.13,-46:52:48.03|20.8,5.76,2000 +V6206|SAO 157879|SD-18 3587|PPM 227168|J132129.76-192921.4,f|V|A2,13:21:29.77|-77.21,-19:29:21.46|-2.8,6.21,2000 +SAO 119899|BD+02 2664|PPM 159692|J132141.64+020514.0,f|S|A2,13:21:41.64|-61.31,2:5:14.08|-52.4,5.69,2000 +V6210|BD+44 2269|PPM 53514|J132203.92+435412.1,f|V|A7,13:22:3.92|-61.71,43:54:12.16|18.7,6.34,2000 +Vir 64|HD 116235|BD+05 2737|J132209.68+050917.1,f|S|A2,13:22:9.69|-69.02,5:9:17.15|-35.6,5.88,2000 +V19748|CD-51 7465|PPM 341837|J132216.28-521058.6,f|V|B2,13:22:16.29|-4.51,-52:10:58.64|-2,5.85,2000 +V0790 CEN|SAO 252283|CP-60 4627|J132235.85-605819.6,f|D|B2,13:22:35.85|-6.55,-60:58:19.64|-16,6.22,2000 +SAO 252284|CP-60 4627A|J132237.93-605918.2,f|D|B3,13:22:37.94|-35.50,-60:59:18.21|-15.2,4.53,2000 +HD 116197|CD-47 8260|PPM 318417|J132252.51-475635.5,f|D|A4,13:22:52.51|16.58,-47:56:35.60|-0.7,6.21,2000 +V19747|HD 115967|CP-71 1467|PPM 371859|J132252.59-720848.1,f|D|B6,13:22:52.59|-17.75,-72:8:48.18|-15.5,6.06,2000 +Vir 63|V6213|SAO 157899|HD 116292|SD-16 3650|J132301.11-174406.9,f|V|K0,13:23:1.11|-50.15,-17:44:6.99|-28.7,5.36,2000 +V19757|HD 116226|CD-47 8261|PPM 318421|J132302.60-483346.0,f|V|B6,13:23:2.60|-8.84,-48:33:46.05|-2.3,6.37,2000 +V6212|HD 116278|CD-32 9322|PPM 291322|J132308.63-331123.5,f|V|M1,13:23:8.63|-17.95,-33:11:23.56|3.7,6.19,2000 +Vir 65|HD 116365|SD-04 3469|PPM 196458|J132318.89-045527.9,f|S|K3,13:23:18.89|-19.58,-4:55:27.94|-16.1,5.86,2000 +HD 116338|CD-49 7884|PPM 318436|J132352.11-494922.1,f|S|G8,13:23:52.11|-79.93,-49:49:22.12|-31.5,6.48,2000 +CL CVN|HD 116581|BD+37 2404|PPM 77152|J132353.92+370202.1,f|V|M3,13:23:53.93|14.61,37:2:2.11|-11.1,6.13,2000 +Mizar|Mirza|UMa Zeta-79A|V6224|HD 116656|BD+55 1598A|J132355.54+545531.3,f|D|A1,13:23:55.54|121.19,54:55:31.30|-22,2.22,2000 +UMa Zeta-79B|V6225|HD 116657|BD+55 1598B|J132356.32+545518.5,f|D|A1,13:23:56.33|121.20,54:55:18.56|-22,3.86,2000 +SAO 181615|HD 116429|SD-20 3818|J132357.08-205528.5,f|D|K1,13:23:57.08|-37.41,-20:55:28.51|-19.9,6.48,2000 +SAO 252293|HD 116243|CP-63 2732|J132400.48-643208.4,f|S|G6,13:24:0.48|29.09,-64:32:8.40|-21,4.53,2000 +HD 116594|BD+13 2663|PPM 129797|J132430.53+122554.5,f|S|K0,13:24:30.53|-11.72,12:25:54.60|35.8,6.44,2000 +Vir 66|SAO 139324|HD 116568|SD-04 3472|PPM 196481|J132433.22-050950.4,f|S|F3,13:24:33.23|157.76,-5:9:50.44|-36.2,5.77,2000 +V19784|BD+24 2578|J132506.67+235115.9,f|V|A3,13:25:6.68|-9.88,23:51:15.91|-8.1,5.76,2000 +Mus Iota1|HD 116244|CP-74 1057|PPM 371878|J132507.11-745316.1,f|S|K0,13:25:7.12|-108.29,-74:53:16.15|-132.1,5.04,2000 +Spica|Azimech|Spica Virginis|Alaraph c|Vir Alpha-67|Alpha Virginis|SAO 157923|HD 116658|SD-10 3672|PPM 227262|J132511.57-110940.7,f|D|B1,13:25:11.58|-42.53,-11:9:40.76|-31.7,1.06,2000 +Alcor|Saidak|UMa 80|V6238|HD 116842|BD+55 1603|J132513.53+545916.6,f|V|A5,13:25:13.54|120.32,54:59:16.65|-16.9,4.00,2000 +HD 116457|CP-63 2743|J132513.92-642906.5,f|D|F2,13:25:13.93|-154.29,-64:29:6.52|-21.4,5.32,2000 +V19780|HD 116458|CP-69 1838|PPM 371881|J132550.30-703738.0,f|V|Ap,13:25:50.30|-55.48,-70:37:38.09|1.1,5.66,2000 +BD+64 949|PPM 18596|J132559.85+631540.5,f|S|G6,13:25:59.86|-392.65,63:15:40.59|220.5,6.50,2000 +HD 116713|CD-39 8246|PPM 291381|J132607.76-394518.3,f|S|K0,13:26:7.77|168.36,-39:45:18.39|-58.6,5.11,2000 +V6254|HD 117187|BD+73 592|PPM 8414|J132608.06+722329.3,f|D|M1,13:26:8.07|22.64,72:23:29.31|-9.2,5.81,2000 +V6242|SAO 139337|HD 116831|BD-00 2686|J132611.41-011132.8,f|V|A7,13:26:11.41|-114.58,-1:11:32.90|5.2,5.97,2000 +HD 116957|BD+46 1868|PPM 53554|J132616.60+460140.9,f|S|K5,13:26:16.60|30.20,46:1:41.00|-20,5.88,2000 +Vir 68|V6244|SAO 157938|SD-11 3516|J132643.16-124227.5,f|V|M0,13:26:43.17|-128.62,-12:42:27.59|-21.2,5.26,2000 +SAO 224148|HD 116835|CD-40 7894|PPM 318494|J132656.11-412951.2,f|S|K3,13:26:56.12|-9.66,-41:29:51.22|1.1,5.66,2000 +HD 117566|BD+79 422|PPM 8418|J132656.80+783837.9,f|S|G2,13:26:56.80|-140.36,78:38:37.93|30.3,5.75,2000 +SAO 224149|HD 116836|CD-48 8202|PPM 318495|J132706.38-490837.4,f|D|A0,13:27:6.39|-14.82,-49:8:37.44|-5.6,6.31,2000 +HD 116873|CD-39 8260|PPM 318497|J132714.66-400945.5,f|D|G8,13:27:14.66|-17.65,-40:9:45.59|10.7,6.41,2000 +V19806|SAO 224151|HD 116862|CD-48 8206|PPM 318499|J132720.65-492252.6,f|V|B3,13:27:20.66|-3.71,-49:22:52.65|-2.9,6.27,2000 +Vir 69|V6253|SAO 157946|HD 116976|SD-15 3668|PPM 227314|J132727.16-155824.8,f|V|K0,13:27:27.16|-122.14,-15:58:24.88|21.6,4.75,2000 +V19833|HD 117242|BD+53 1622|J132759.62+524444.1,f|V|A8,13:27:59.63|-101.70,52:44:44.12|-22.3,6.35,2000 +V19823|SAO 181674|CD-25 9816|PPM 261689|J132801.88-262408.0,f|V|K5,13:28:1.88|-3.22,-26:24:8.05|-4.2,6.50,2000 +Vir 70A|HD 117176|BD+14 2621|PPM 129843|J132825.80+134643.6,f|D|G4,13:28:25.81|-234.84,13:46:43.63|-576.2,4.97,2000 +HD 117261|BD+41 2400|PPM 53573|J132826.24+404346.7,f|S|G8,13:28:26.24|12.39,40:43:46.73|-57.6,6.49,2000 +HD 117376|BD+60 1461|J132827.08+595644.8,f|D|A1,13:28:27.09|-78.05,59:56:44.83|34.5,5.46,2000 +HD 117361|BD+51 1847|J132845.82+504306.8,f|S|F0,13:28:45.83|35.71,50:43:6.85|-74.8,6.42,2000 +EZ MUS|SAO 252321|CP-68 1929|J132846.78-693737.7,f|V|Ap,13:28:46.79|-20.63,-69:37:37.75|-16.3,6.19,2000 +SAO 252329|CP-64 2418|J132907.90-644032.8,f|S|Ap,13:29:7.90|-60.76,-64:40:32.86|-7.1,6.09,2000 +Vir 71|BD+11 2575|PPM 129856|J132913.00+104905.9,f|S|K0,13:29:13.00|-60.26,10:49:5.92|-35.5,5.65,2000 +SAO 139359|HD 117267|BD-00 2694|J132914.91-012151.9,f|S|K0,13:29:14.92|-41.99,-1:21:51.94|-59,6.41,2000 +CD-50 7812|PPM 341953|J132925.25-510954.4,f|S|A1,13:29:25.25|-1.50,-51:9:54.48|-7.8,5.05,2000 +R HYA|SAO 181695|HD 117287|CD-22 9961|PPM 261719|J132942.78-231652.7,f|D|M7,13:29:42.78|-60.76,-23:16:52.79|11,6.43,2000 +SAO 119961|BD+06 2750|J132957.64+060048.7,f|S|K0,13:29:57.64|-14.92,6:0:48.72|59.6,6.50,2000 +SAO 119962|BD+07 2655|J133000.08+071043.8,f|S|K5,13:30:0.08|3.42,7:10:43.87|4.9,6.16,2000 +Vir 72|V6281|HD 117436|SD-05 3706|PPM 196572|J133025.72-062812.9,f|D|F2,13:30:25.72|44.27,-6:28:12.95|12.3,6.11,2000 +V6283|CD-38 8592|J133102.64-392426.2,f|D|G9,13:31:2.65|-15.65,-39:24:26.29|-11.3,3.90,2000 +BD+42 2405|PPM 53599|J133115.76+420622.1,f|S|K2,13:31:15.77|-95.48,42:6:22.15|27.7,6.07,2000 +SAO 181723|HD 117558|CD-27 9278|PPM 261751|J133133.16-280645.8,f|S|A1,13:31:33.17|-77.66,-28:6:45.87|2.1,6.49,2000 +Vir 74|V6297|HD 117675|SD-05 3714|J133157.88-061520.9,f|V|M2,13:31:57.89|-103.78,-6:15:20.94|-43.4,4.70,2000 +Vir 73|HX VIR|SAO 157987|HD 117661|SD-17 3877|PPM 227431|J133202.80-184343.9,f|D|F0,13:32:2.81|-96.60,-18:43:43.97|-17.8,6.01,2000 +HD 117597|CD-37 8695|PPM 291499|J133205.41-382355.8,f|S|K1,13:32:5.41|34.80,-38:23:55.84|-37.2,6.15,2000 +SAO 181735|HD 117718|CD-2810127|PPM 261768|J133234.46-293354.9,f|S|F3,13:32:34.47|-78.02,-29:33:54.95|7.9,6.45,2000 +SAO 181737|HD 117716|CD-2810128|J133235.89-284133.9,f|S|A1,13:32:35.90|-95.66,-28:41:33.97|-22.2,5.70,2000 +HD 117876|BD+25 2643|J133248.21+242048.2,f|D|G8,13:32:48.21|66.55,24:20:48.27|-192.2,6.10,2000 +Vir 75A|SAO 157998|HD 117789|SD-14 3739|PPM 227462|J133251.64-152146.8,f|D|K1,13:32:51.64|-77.24,-15:21:46.84|0.3,5.53,2000 +Vir 76|HD 117818|SD-09 3711|PPM 227467|J133258.07-100954.0,f|S|K0,13:32:58.07|-30.71,-10:9:54.00|-38,5.21,2000 +SAO 252361|HD 117651|CP-64 2465|J133335.87-653757.6,f|S|A0,13:33:35.87|-34.29,-65:37:57.68|-27.9,6.36,2000 +UMa 81|V6319|HD 118214|BD+56 1667|J133407.30+552054.3,f|V|A0,13:34:7.31|-18.68,55:20:54.36|-6.6,5.60,2000 +Vir 78|CW VIR|BD+04 2764|PPM 159871|J133407.93+033932.2,f|V|A1,13:34:7.93|43.86,3:39:32.28|-24,4.92,2000 +HD 118156|BD+39 2658|PPM 77269|J133421.86+384721.3,f|D|F0,13:34:21.87|21.16,38:47:21.36|23,6.37,2000 +CVn 24|V6322|HD 118232|BD+49 2227|PPM 53633|HR 5112|J133427.25+490057.5,f|V|A5,13:34:27.26|-128.28,49:0:57.50|27.4,4.67,2000 +SAO 224254|HD 117919|CD-47 8417|PPM 318631|J133428.96-481619.7,f|D|B8,13:34:28.96|-27.36,-48:16:19.78|-6.8,6.33,2000 +V6316|SD-12 3843|PPM 227511|J133440.44-131251.5,f|D|A2,13:34:40.45|-48.04,-13:12:51.56|-7.3,5.93,2000 +Heze|Vir Zeta-79|BD+00 3076|J133441.59-003544.9,f|S|A3,13:34:41.59|-278.83,-0:35:44.95|48.6,3.38,2000 +HD 118686|BD+77 516|PPM 8451|HR 5131|J133442.75+763248.1,f|S|K5,13:34:42.75|-25.27,76:32:48.16|0.9,6.47,2000 +V6315|CD-32 9459|PPM 291555|J133443.57-331839.0,f|V|K2,13:34:43.58|-52.40,-33:18:39.08|-12,6.47,2000 +BH CVN|HD 118216|BD+37 2426|PPM 77276|J133447.80+371056.6,f|V|F2,13:34:47.81|84.73,37:10:56.69|-9.8,4.94,2000 +Vir 80|SAO 139428|HD 118219|SD-04 3515|PPM 196665|HR 5111|J133531.29-052346.2,f|S|G6,13:35:31.30|15.53,-5:23:46.29|82.6,5.71,2000 +HD 118266|BD+10 2565|PPM 129931|HR 5114|J133533.42+101217.8,f|D|K1,13:35:33.42|88.28,10:12:17.86|-52.6,6.49,2000 +HD 118536|BD+50 2014|HR 5126|J133639.89+492911.9,f|S|K1,13:36:39.90|2.24,49:29:11.93|-14.8,6.48,2000 +HD 118349|CD-25 9900A|PPM 261849|J133648.44-262942.7,f|D|A7,13:36:48.45|-92.76,-26:29:42.71|15.4,5.72,2000 +HD 118319|CD-33 9189|HR 5117|J133650.57-342804.2,f|S|K0,13:36:50.57|-8.16,-34:28:4.22|-34.6,6.48,2000 +V6342|BD+25 2652|HR 5123|J133659.08+243647.8,f|V|M2,13:36:59.08|-25.91,24:36:47.87|-2.3,5.73,2000 +SAO 224275|HD 118338|CD-43 8418|PPM 318664|HR 5118|J133706.01-440835.5,f|S|G8,13:37:6.01|-51.02,-44:8:35.53|-14.3,5.96,2000 +BD+71 659|HR 5139|J133710.98+711432.1,f|S|K5,13:37:10.99|-36.27,71:14:32.11|-6,5.50,2000 +SAO 252387|HD 118261|CP-61 3841|HR 5113|J133712.38-614130.6,f|D|F6,13:37:12.39|149.73,-61:41:30.68|-116.8,5.63,2000 +SAO 224283|HD 118354|CD-45 8578|PPM 318672|HR 5121|J133723.47-462540.3,f|S|B8,13:37:23.47|-28.23,-46:25:40.37|-16,5.90,2000 +CVn 25A|HD 118623|BD+37 2433|PPM 77311|HR 5127|J133727.62+361741.6,f|D|A7,13:37:27.63|-94.78,36:17:41.63|23.6,4.91,2000 +HD 118384|CP-57 6169|HR 5122|J133807.62-582452.7,f|D|K1,13:38:7.63|-0.79,-58:24:52.73|-26.8,6.44,2000 +V19903|BD+15 2602|PPM 129964|HR 5129|J133807.88+141806.9,f|V|A9,13:38:7.89|40.99,14:18:6.93|-15,6.50,2000 +SAO 181825|HD 118646|CD-2810181|PPM 261894|HR 5128|J133842.06-293339.1,f|S|F5,13:38:42.07|-86.50,-29:33:39.12|-77.2,5.82,2000 +HD 118344|CP-69 1898|HR 5119|J133845.71-702641.3,f|S|K3,13:38:45.72|-65.72,-70:26:41.39|-31.6,6.10,2000 +CP-56 5856|HR 5124|J133848.95-573721.7,f|D|G5,13:38:48.95|-11.49,-57:37:21.78|-6.1,6.00,2000 +HD 118839|BD+19 2697|PPM 129973|HR 5137|J133902.28+181555.1,f|S|K3,13:39:2.28|-47.43,18:15:55.16|-20.2,6.46,2000 +DY CHA|HD 118285|CP-75 882|PPM 371973|HR 5115|J133911.99-754101.6,f|V|B8,13:39:12.00|-18.06,-75:41:1.64|-7.3,6.33,2000 +BD+52 1725|J133914.90+514815.1,f|S|K2,13:39:14.91|-14.84,51:48:15.17|5.6,6.50,2000 +UMa 82|V19914|BD+53 1640|PPM 34131|HR 5142|J133930.44+525516.3,f|V|A3,13:39:30.45|-136.02,52:55:16.35|56.4,5.47,2000 +V6363|HD 118889|BD+11 2589|PPM 129981|HR 5138|J133934.62+104446.4,f|D|F0,13:39:34.62|-113.03,10:44:46.41|-37.6,5.58,2000 +V0765 CEN|HD 118781|CD-39 8390|PPM 291667|HR 5135|J133940.84-394451.3,f|V|M4,13:39:40.84|-14.42,-39:44:51.31|-7.9,6.35,2000 +HD 118799|CD-39 8392|HR 5136|J133948.54-400306.1,f|S|K2,13:39:48.55|-47.42,-40:3:6.15|-55,5.60,2000 +Cen Epsilon|Epsilon Centauri|HD 118716|CP-52 6655|HR 5132|J133953.25-532759.0,f|D|B1,13:39:53.26|-14.64,-53:27:59.02|-12.8,2.28,2000 +V0744 CEN|SAO 224317|HD 118767|CD-49 8095|PPM 318713|HR 5134|J133959.80-495659.8,f|V|M5,13:39:59.81|-99.41,-49:56:59.84|18.7,5.85,2000 +HD 118666|CP-63 2896|J134010.70-643435.5,f|S|F3,13:40:10.71|-69.61,-64:34:35.59|0.5,5.79,2000 +BD+31 2526|PPM 77346|HR 5143|J134015.57+310043.3,f|S|K0,13:40:15.58|-72.76,31:0:43.33|91.9,6.21,2000 +CQ UMA|HD 119213|BD+57 1456|PPM 34137|HR 5153|J134021.38+571227.3,f|V|A2,13:40:21.38|-50.04,57:12:27.38|26.5,6.29,2000 +V19919|HD 119124|BD+51 1859|PPM 34138|HR 5148|J134023.23+503109.8,f|D|F7,13:40:23.23|-124.75,50:31:9.89|57.9,6.34,2000 +BD+28 2248|HR 5145|J134039.07+280354.5,f|D|K3,13:40:39.08|-69.89,28:3:54.59|9.9,6.21,2000 +Boo 1A|V19918|BD+20 2858|PPM 129992|HR 5144|J134040.46+195720.5,f|D|A1,13:40:40.47|-46.53,19:57:20.59|23.2,5.76,2000 +UMa 83|IQ UMA|HD 119228|BD+55 1625|PPM 34148|HR 5154|J134044.27+544053.8,f|V|M2,13:40:44.27|-19.16,54:40:53.88|-11.4,4.63,2000 +Oct Kappa|SAO 258674|HD 117374|CP-85 384|PPM 377597|J134055.47-854709.7,f|S|A2,13:40:55.48|-87.65,-85:47:9.76|-21,5.56,2000 +Boo 2|HD 119126|BD+23 2600|HR 5149|J134102.34+222944.7,f|S|G9,13:41:2.35|-15.24,22:29:44.76|-26.3,5.63,2000 +HD 119476|BD+65 953|PPM 18688|HR 5162|J134129.89+644920.6,f|S|A2,13:41:29.89|55.01,64:49:20.68|-11.7,5.84,2000 +Vir 82|V6390|HD 119149|SD-07 3674|PPM 196772|J134136.77-084210.7,f|V|M1,13:41:36.78|-91.63,-8:42:10.74|40.3,5.03,2000 +HD 118991|CP-53 5725A|PPM 342157|HR 5141|J134144.77-543333.9,f|D|B8,13:41:44.77|-43.66,-54:33:33.93|-24.6,5.23,2000 +V19920|HD 118978|CP-58 5059|PPM 342164|J134201.08-584713.4,f|V|B9,13:42:1.09|-30.70,-58:47:13.48|-11.7,5.39,2000 +V19932|HD 119288|BD+09 2798|PPM 159981|HR 5156|J134212.76+082318.2,f|V|F3,13:42:12.76|-377.81,8:23:18.22|-87.2,6.17,2000 +BD+83 397|J134223.09+824508.6,f|S|G9,13:42:23.09|32.66,82:45:8.67|-42.5,5.92,2000 +HD 119445|BD+42 2431|J134228.80+414027.4,f|S|G6,13:42:28.81|-86.38,41:40:27.41|12.3,6.30,2000 +BD+78 466|PPM 8479|HR 5184|J134239.20+780351.9,f|S|G5,13:42:39.20|-64.25,78:3:51.97|45.8,5.91,2000 +HD 119458|BD+35 2474|PPM 77376|HR 5161|J134243.43+345920.4,f|S|G6,13:42:43.43|13.03,34:59:20.48|11,5.98,2000 +V19933|HD 119193|CD-50 7983|PPM 342179|HR 5152|J134254.63-504724.8,f|V|M0,13:42:54.63|-8.82,-50:47:24.85|-15.8,6.43,2000 +SAO 224359|CD-40 8096|PPM 318766|HR 5155|J134255.02-412403.7,f|S|K0,13:42:55.02|-51.64,-41:24:3.76|-37.8,5.96,2000 +V19931|HD 119159|CP-56 5891|HR 5151|J134256.11-564604.6,f|V|B0,13:42:56.11|-7.40,-56:46:4.70|-4.8,6.01,2000 +Vir 84A|HD 119425|BD+04 2775|PPM 159997|HR 5159|J134303.71+033216.4,f|D|K2,13:43:3.71|-294.19,3:32:16.45|-72.9,5.35,2000 +SAO 224365|HD 119361|CD-41 8089|PPM 318775|HR 5157|J134340.08-420403.1,f|D|B8,13:43:40.08|-13.47,-42:4:3.10|-4.3,5.97,2000 +HD 119584|BD+23 2606|HR 5164|J134345.16+224201.5,f|S|K4,13:43:45.16|49.26,22:42:1.52|-37,6.11,2000 +SAO 139516|HD 119537|SD-04 3540|PPM 196818|HR 5163|J134354.23-052956.1,f|S|A1,13:43:54.24|-53.75,-5:29:56.16|-14.1,6.50,2000 +HD 119765|BD+52 1733|PPM 34176|HR 5169|J134354.77+520351.8,f|S|A1,13:43:54.78|-19.55,52:3:51.89|-5.8,6.02,2000 +V0827 CEN|HD 119419|CD-50 7998|HR 5158|J134416.00-510044.8,f|V|A0,13:44:16.00|-29.16,-51:0:44.84|-19.9,6.45,2000 +Vir 83|SAO 158131|SD-15 3731|PPM 227764|HR 5165|J134429.82-161044.6,f|S|G0,13:44:29.83|12.68,-16:10:44.66|-5.6,5.57,2000 +SAO 181921|HD 119623|CD-2411057|HR 5166|J134445.66-253003.3,f|S|K0,13:44:45.66|-57.67,-25:30:3.36|-22.2,6.20,2000 +HD 119992|BD+56 1683|PPM 34189|HR 5177|J134513.21+555245.6,f|S|F7,13:45:13.21|104.92,55:52:45.66|-358.9,6.47,2000 +HD 119784|BD+11 2599|J134513.43+101931.0,f|S|K2,13:45:13.44|-55.04,10:19:31.10|-44.8,6.42,2000 +Vir 85|SAO 158147|HD 119786|SD-15 3735|PPM 227795|J134535.06-154602.8,f|D|A2,13:45:35.07|-41.00,-15:46:2.88|-23.7,6.19,2000 +SAO 181931|HD 119752|CD-25 9972|HR 5167|J134536.89-260657.6,f|S|A1,13:45:36.89|-71.65,-26:6:57.63|-10.2,5.81,2000 +Cen 1|V19951|HD 119756|CD-32 9603|PPM 291783|HR 5168|J134541.24-330237.3,f|V|F3,13:45:41.25|-461.84,-33:2:37.40|-146.2,4.23,2000 +Vir 86A|SAO 158152|HD 119853|SD-11 3591|HR 5173|J134556.31-122535.5,f|D|G8,13:45:56.32|-19.19,-12:25:35.50|8,5.50,2000 +BD+41 2424|PPM 53731|HR 5179|J134613.54+410519.4,f|S|A5,13:46:13.55|-113.85,41:5:19.49|-42.3,5.89,2000 +SAO 241152|HD 119727|CP-54 5725|PPM 342236|J134614.50-544100.1,f|S|A1,13:46:14.51|-30.78,-54:41:0.12|-22.8,6.43,2000 +BD+39 2678|PPM 77421|J134619.06+383013.0,f|S|G9,13:46:19.06|-48.83,38:30:13.05|-12.6,5.92,2000 +UMa 84|CR UMA|BD+55 1634|HR 5187|J134635.65+542557.6,f|D|B9,13:46:35.66|-19.19,54:25:57.65|-4.5,5.69,2000 +V6434|SAO 241157|HD 119834|CD-50 8017|HR 5172|J134639.37-512557.9,f|D|G8,13:46:39.38|10.38,-51:25:57.96|-28,4.64,2000 +Boo 3|BD+26 2494|HR 5182|J134643.32+254208.0,f|S|G5,13:46:43.32|-18.38,25:42:8.05|-59.5,5.97,2000 +HD 119921|CD-35 8995|PPM 291811|HR 5174|J134656.35-361506.9,f|D|A0,13:46:56.35|-13.31,-36:15:6.96|-11.5,5.16,2000 +BD+07 2690|HR 5183|J134657.12+062101.3,f|D|G0,13:46:57.12|-511.34,6:21:1.35|-110,6.33,2000 +BD+39 2680|PPM 77425|HR 5186|J134659.77+383233.7,f|D|K0,13:46:59.77|-134.22,38:32:33.71|-21.7,5.50,2000 +SAO 139544|SD-08 3639|PPM 196876|HR 5178|J134713.40-094234.0,f|D|K5,13:47:13.41|-0.30,-9:42:34.03|-45,6.05,2000 +Boo Tau-4|V6444|BD+18 2782|HR 5185|J134715.74+172724.8,f|D|F6,13:47:15.74|-480.36,17:27:24.86|54.2,4.49,2000 +Vir 87|V6442|SAO 158165|SD-17 3932|HR 5181|J134725.39-175135.4,f|V|M2,13:47:25.39|60.82,-17:51:35.42|-31,5.42,2000 +SAO 241173|HD 119938|CD-49 8194|PPM 342256|HR 5175|J134727.63-501457.4,f|S|A3,13:47:27.64|58.89,-50:14:57.45|12.6,5.93,2000 +Alkaid|Benetnasch|Elkeid|UMa Eta-85|V6450|BD+50 2027|PPM 53742|HR 5191|J134732.43+491847.7,f|V|B3,13:47:32.44|-121.26,49:18:47.75|-15.6,1.86,2000 +SAO 241177|HD 119971|CD-49 8198|HR 5176|J134738.54-501914.4,f|S|K2,13:47:38.54|-141.27,-50:19:14.46|-6.3,5.46,2000 +BD+31 2547|PPM 77448|HR 5195|J134838.73+311124.7,f|S|K0,13:48:38.74|-4.49,31:11:24.74|37.8,5.61,2000 +Cen 2|V0806 CEN|CD-33 9358|PPM 291859|HR 5192|J134926.72-342702.7,f|V|M4,13:49:26.72|-42.55,-34:27:2.79|-59.9,4.29,2000 +Boo Upsilon-5|V6458|BD+16 2564|J134928.64+154752.4,f|V|K5,13:49:28.64|-93.67,15:47:52.46|40.8,4.04,2000 +Cen Nu|Nu Centauri|SAO 224469|CD-41 8171|PPM 318895|J134930.27-414115.7,f|S|B2,13:49:30.28|-25.99,-41:41:15.75|-20.4,3.40,2000 +Cen Mu|Mu Centauri|SAO 224471|CD-41 8172|PPM 318898|HR 5193|J134936.98-422825.4,f|D|B2,13:49:36.99|-23.90,-42:28:25.43|-19.2,3.47,2000 +Boo 6|BD+21 2578|J134942.83+211550.7,f|S|K4,13:49:42.83|21.11,21:15:50.78|17,4.91,2000 +BD+37 2457|PPM 77462|J134944.92+363758.1,f|S|A7,13:49:44.93|-79.81,36:37:58.16|24.2,6.44,2000 +BD+62 1318|PPM 18749|HR 5213|J134945.50+612921.5,f|S|G3,13:49:45.51|62.65,61:29:21.53|-95.7,5.97,2000 +Vir 89|SAO 158186|SD-17 3937|PPM 227897|HR 5196|J134952.28-180803.0,f|S|K0,13:49:52.28|-99.36,-18:8:3.00|-37.7,4.96,2000 +V6460|SAO 181999|CD-2810277|PPM 262138|HR 5197|J135006.50-290452.7,f|V|A0,13:50:6.51|-50.08,-29:4:52.76|-33.3,6.20,2000 +CD-39 8501|PPM 291875|HR 5198|J135019.39-395403.0,f|S|K1,13:50:19.40|6.67,-39:54:3.08|-8.9,6.43,2000 +BD+06 2800|J135024.67+052950.0,f|S|K0,13:50:24.68|10.45,5:29:50.01|0.7,6.00,2000 +BD+59 1533|PPM 34221|HR 5216|J135027.74+583222.0,f|S|A3,13:50:27.74|-21.29,58:32:22.05|12.2,6.45,2000 +HD 121146|BD+69 724|PPM 18761|HR 5227|J135059.11+681855.0,f|D|K2,13:50:59.12|-176.58,68:18:55.08|-58.1,6.40,2000 +V6468|BD+35 2493|PPM 77472|HR 5215|J135109.21+343951.8,f|V|M2,13:51:9.22|9.99,34:39:51.84|-53.8,5.90,2000 +CD-2311329|PPM 262173|J135120.32-242325.3,f|S|G5,13:51:20.33|-580.88,-24:23:25.32|-244.9,6.43,2000 +Dra 10A|CU DRA|BD+65 963|PPM 18763|HR 5226|J135125.93+644323.7,f|D|M3,13:51:25.94|1.47,64:43:23.78|-4.6,4.61,2000 +CD-35 9054|J135136.49-362559.8,f|S|F6,13:51:36.50|-110.67,-36:25:59.80|-113.8,6.35,2000 +SAO 224489|CD-46 8909|PPM 318927|J135147.21-465355.1,f|S|B2,13:51:47.22|-15.68,-46:53:55.20|-14.8,5.76,2000 +V19969|SAO 252481|CP-68 2014|HR 5194|J135147.43-692404.5,f|V|K5,13:51:47.43|3.96,-69:24:4.53|-4.8,5.75,2000 +AW CVN|BD+35 2496|PPM 77486|HR 5219|J135147.47+342639.2,f|V|M3,13:51:47.48|-20.53,34:26:39.27|-31.8,4.75,2000 +Cen 3A|V0983 CEN|CD-32 9676A|J135149.60-325938.7,f|D|B5,13:51:49.60|-35.73,-32:59:38.72|-30.1,4.55,2000 +Cen 3B|V19975|CD-32 9676B|HR 5211|J135150.20-325940.8,f|D|B8,13:51:50.20|-35.73,-32:59:40.88|-30.1,5.98,2000 +CD-3110706|PPM 291911|HR 5212|J135200.97-313709.1,f|D|F7,13:52:0.98|-32.19,-31:37:9.15|-29.2,6.12,2000 +SAO 241239|CP-52 6787A|J135204.86-524841.5,f|D|B9,13:52:4.86|-39.44,-52:48:41.51|-27.3,5.26,2000 +BD+12 2635|J135218.40+120954.4,f|S|A1,13:52:18.41|26.83,12:9:54.49|-9.7,6.10,2000 +HD 121197|BD+41 2434|PPM 53791|J135308.43+402016.7,f|S|K5,13:53:8.44|-8.58,40:20:16.72|-10.4,6.48,2000 +HD 121164|BD+29 2464|HR 5229|J135310.28+283853.2,f|S|A7,13:53:10.28|-121.50,28:38:53.27|28.5,5.91,2000 +Cen 4A|CD-3110729A|PPM 291934|HR 5221|J135312.53-315539.4,f|D|B4,13:53:12.54|-13.49,-31:55:39.40|-10.7,4.74,2000 +Boo 7|BD+18 2795|HR 5225|J135312.93+175558.3,f|S|G5,13:53:12.93|-33.54,17:55:58.33|5.3,5.71,2000 +CD-35 9090|PPM 291947|HR 5222|J135332.76-353951.2,f|D|F4,13:53:32.76|-82.38,-35:39:51.29|-22.3,5.56,2000 +SAO 241262|CP-52 6805|PPM 342356|HR 5217|J135343.09-532223.9,f|S|B5,13:53:43.09|-16.02,-53:22:23.96|-17.4,5.89,2000 +UMa 86|V19988|BD+54 1630|PPM 34254|HR 5238|J135351.01+534343.2,f|V|A0,13:53:51.01|-28.57,53:43:43.24|-6.2,5.70,2000 +CD-34 9223|PPM 291956|HR 5224|J135352.06-351851.7,f|S|K1,13:53:52.06|-295.35,-35:18:51.70|-69.8,6.17,2000 +V0767 CEN|SAO 224514|CD-46 8931|PPM 318958|HR 5223|J135357.24-470741.3,f|D|B2,13:53:57.24|-7.86,-47:7:41.39|-4.3,5.84,2000 +V19986|HD 121156|CD-27 9478|HR 5228|J135416.63-283410.5,f|V|K2,13:54:16.64|-168.88,-28:34:10.52|-66.4,6.05,2000 +Muphrid|Mufride|Boo Eta-8A|V19993|BD+19 2725|HR 5235|J135441.07+182351.7,f|D|G0,13:54:41.08|-60.92,18:23:51.78|-358.1,2.68,2000 +Vir 90|SAO 139613|HD 121299|BD-00 2758|HR 5232|J135442.14-013011.2,f|S|K2,13:54:42.15|-85.02,-1:30:11.25|-21.9,5.16,2000 +SAO 252511|CP-67 2426|HR 5218|J135449.11-673907.5,f|S|K2,13:54:49.11|-16.83,-67:39:7.56|-14.6,5.71,2000 +SAO 139618|HD 121325|SD-07 3728|HR 5233|J135458.20-080331.8,f|D|F8,13:54:58.20|-174.36,-8:3:31.87|-36.2,6.19,2000 +SAO 241294|CD-51 7832|PPM 342387|J135512.14-520938.9,f|S|B9,13:55:12.14|-29.45,-52:9:38.96|-21.6,5.66,2000 +Cen Zeta|SAO 224538|HD 121263|CD-46 8949|PPM 318991|HR 5231|J135532.38-471718.1,f|S|B2,13:55:32.39|-57.18,-47:17:18.15|-44.8,2.53,2000 +SAO 258683|CP-82 585|PPM 377623|HR 5188|J135538.87-823958.2,f|S|K2,13:55:38.87|-25.06,-82:39:58.28|-23.3,5.95,2000 +BD+14 2680|HR 5243|J135549.99+140323.4,f|S|F6,13:55:49.99|-291.02,14:3:23.41|9.2,6.17,2000 +HD 121682|BD+32 2411|PPM 77541|HR 5245|J135610.45+320157.3,f|S|F4,13:56:10.46|-118.64,32:1:57.35|48.3,6.31,2000 +SAO 224555|HD 121416|CD-45 8815|HR 5239|J135619.77-463534.6,f|S|K1,13:56:19.78|-138.64,-46:35:34.61|-90.3,5.82,2000 +HD 121336|CP-53 5805|HR 5234|J135619.96-540756.7,f|D|A1,13:56:19.97|-26.63,-54:7:56.71|-19.2,6.14,2000 +Vir 92|V19997|BD+01 2865|HR 5244|J135627.87+010302.0,f|V|A8,13:56:27.88|-28.05,1:3:2.09|13.7,5.90,2000 +SAO 241315|HD 121384|CP-54 5806|HR 5236|J135632.94-544216.7,f|D|G6,13:56:32.94|-41.34,-54:42:16.79|-225.9,6.01,2000 +Boo 9|V6502|BD+28 2278|HR 5247|J135634.18+272931.4,f|V|K3,13:56:34.18|28.21,27:29:31.50|-47.8,5.01,2000 +V19998|SAO 182123|HD 121699|CD-2210206|PPM 262311|HR 5246|J135727.72-230121.4,f|V|K0,13:57:27.73|-35.07,-23:1:21.47|9.1,6.13,2000 +BD+62 1325|HR 5256|J135732.05+612934.3,f|S|K3,13:57:32.06|-32.36,61:29:34.30|216.5,6.49,2000 +SAO 252531|HD 121474|CP-63 3070|HR 5241|J135738.88-634112.1,f|S|K1,13:57:38.88|-40.43,-63:41:12.11|-32.8,4.71,2000 +SAO 182126|HD 121758|CD-2510089|PPM 262317|J135758.87-255953.0,f|S|K1,13:57:58.88|27.50,-25:59:53.09|4.5,6.42,2000 +Cen Phi|V6509|SAO 224577|HD 121743|CD-41 8329|HR 5248|J135816.26-420602.7,f|V|B2,13:58:16.27|-23.71,-42:6:2.71|-19.8,3.82,2000 +Hya 47|SAO 182134|HD 121847|CD-2411202|PPM 262325|J135831.14-245820.0,f|S|B8,13:58:31.15|-49.90,-24:58:20.09|-29.3,5.21,2000 +SAO 252534|HD 121557|CP-65 2553|HR 5242|J135831.23-654802.3,f|D|K0,13:58:31.24|-30.56,-65:48:2.39|-37.9,6.23,2000 +Boo 10|HD 121996|BD+22 2650|HR 5255|J135838.92+214146.3,f|S|A0,13:58:38.92|-9.48,21:41:46.39|-42.1,5.76,2000 +BD+15 2651|HR 5254|J135839.90+143857.3,f|S|K5,13:58:39.91|-62.84,14:38:57.39|-58.6,6.00,2000 +Cen Upsilon1|V20006|SAO 224585|CD-44 9010|HR 5249|J135840.74-444812.9,f|V|B2,13:58:40.75|-27.99,-44:48:12.90|-21.7,3.86,2000 +SAO 241352|HD 121853|CD-49 8356|PPM 342447|HR 5251|J135917.48-502210.7,f|S|G8,13:59:17.48|28.51,-50:22:10.73|-16.7,5.92,2000 +SAO 139666|SD-02 3768|HR 5258|J135949.27-033259.2,f|S|F8,13:59:49.28|-29.64,-3:32:59.25|-56.3,6.40,2000 +Hya 48|SAO 182152|CD-2411215|PPM 262354|HR 5257|J140000.12-250037.4,f|S|F7,14:0:0.12|-194.11,-25:0:37.45|-91.8,5.77,2000 +SAO 252552|CP-60 5135|HR 5252|J140017.39-612851.7,f|S|F1,14:0:17.39|-64.46,-61:28:51.70|-35.2,6.48,2000 +HD 121439|CP-77 922|PPM 372119|J140032.81-783523.9,f|S|B9,14:0:32.81|-14.18,-78:35:23.93|-9,6.09,2000 +SAO 252554|HD 121932|CP-65 2573|HR 5253|J140052.44-661608.0,f|D|F2,14:0:52.45|-116.09,-66:16:8.08|-24.2,5.96,2000 +Boo 11|BD+28 2287|HR 5263|J140110.48+272311.7,f|S|A7,14:1:10.48|-79.25,27:23:11.74|19,6.23,2000 +CD-39 8628|HR 5259|J140119.05-401318.9,f|D|K1,14:1:19.06|-28.75,-40:13:19.00|0.6,6.12,2000 +HD 122365|BD+09 2835|HR 5262|J140120.42+085341.6,f|S|A2,14:1:20.43|32.90,8:53:41.66|-1.2,5.98,2000 +V20025|HD 122443|BD+18 2813|J140136.81+174006.2,f|V|G5,14:1:36.81|-45.88,17:40:6.21|-83.1,6.38,2000 +Vir Tau-93A|BD+02 2761|HR 5264|J140138.79+013240.3,f|D|A3,14:1:38.79|17.39,1:32:40.31|-21.2,4.24,2000 +Cen Upsilon2|SAO 224621|HD 122223|CD-44 9040|J140143.49-453612.3,f|S|F6,14:1:43.50|3.88,-45:36:12.31|-20.9,4.34,2000 +BD+69 733|PPM 18836|HR 5282|J140150.65+684043.2,f|S|K5,14:1:50.65|-33.71,68:40:43.23|-4.5,6.33,2000 +HD 122675|BD+46 1922|PPM 53882|HR 5271|J140212.18+454512.4,f|S|K2,14:2:12.19|28.68,45:45:12.45|-78.2,6.26,2000 +SAO 182182|CD-2610060|HR 5265|J140222.78-272547.1,f|S|K3,14:2:22.78|-32.35,-27:25:47.18|-4.1,5.47,2000 +V6526|HD 122563|BD+10 2617|J140231.84+094109.9,f|V|G8,14:2:31.85|-188.97,9:41:9.94|-70.1,6.21,2000 +HD 122866|BD+51 1889|PPM 34325|J140259.75+505818.5,f|S|A2,14:2:59.76|-18.14,50:58:18.51|-6.7,6.16,2000 +CD-3110859|PPM 292138|HR 5268|J140301.72-314102.5,f|D|F8,14:3:1.72|24.51,-31:41:2.53|66,6.18,2000 +HD 122577|SD-16 3785|J140304.06-172201.2,f|S|K2,14:3:4.07|-185.82,-17:22:1.25|-9.5,6.35,2000 +HD 122438|CP-55 5846|HR 5266|J140326.50-561248.3,f|S|K2,14:3:26.51|-66.40,-56:12:48.36|-21.6,5.93,2000 +V0828 CEN|SAO 224641|HD 122532|CD-40 8373|PPM 319129|HR 5269|J140327.46-412524.0,f|V|Ap,14:3:27.47|-33.74,-41:25:24.04|-16.5,6.09,2000 +HD 122742|BD+11 2625|HR 5273|J140332.35+104712.4,f|S|G8,14:3:32.35|85.32,10:47:12.40|-304.1,6.27,2000 +HD 122744|BD+08 2810|HR 5274|J140336.76+073246.2,f|S|G9,14:3:36.77|-38.51,7:32:46.21|-17.4,6.25,2000 +Agena|Hadar|Cen Beta|Beta Centauri|SAO 252582|HD 122451|CP-59 5365|HR 5267|J140349.40-602222.9,f|D|B1,14:3:49.40|-33.96,-60:22:22.94|-25.1,0.64,2000 +SD-21 3824|PPM 262433|HR 5272|J140353.08-222517.7,f|S|F5,14:3:53.09|-12.20,-22:25:17.77|5.9,6.30,2000 +HD 122797|BD+05 2836|HR 5275|J140355.75+045403.5,f|S|F4,14:3:55.76|-10.01,4:54:3.50|-2.8,6.24,2000 +SAO 139711|HD 122815|SD-04 3614|PPM 197161|HR 5276|J140414.55-052253.0,f|S|K0,14:4:14.56|-16.43,-5:22:53.10|-12.7,6.39,2000 +Thuban|Adib|Dragon's Tail|Dra Alpha-11|V6546|HD 123299|BD+65 978|PPM 18861|HR 5291|J140423.34+642233.0,f|V|A0,14:4:23.35|-56.50,64:22:33.06|17.2,3.65,2000 +SAO 158325|HD 122837|SD-14 3863|HR 5277|J140426.98-145818.1,f|S|G6,14:4:26.98|-35.36,-14:58:18.15|-21.4,6.35,2000 +BD+02 2768|HR 5283|J140437.42+021751.1,f|S|K0,14:4:37.43|-38.82,2:17:51.11|0.9,6.27,2000 +Aps Theta|Theta Apodis|SAO 257112|CP-76 799|PPM 372135|HR 5261|J140519.87-764748.3,f|S|M6,14:5:19.88|-87.40,-76:47:48.31|-31.2,5.69,2000 +V0992 CEN|HD 122844|CP-54 5887|PPM 342534|HR 5278|J140546.47-544009.7,f|V|A5,14:5:46.48|-53.00,-54:40:9.71|-25,6.20,2000 +Cen Chi|Chi Centauri|SAO 224673|CD-40 8405|HR 5285|J140602.76-411046.6,f|S|B2,14:6:2.77|-24.39,-41:10:46.68|-21.6,4.36,2000 +SAO 224676|CD-42 9027|PPM 319174|HR 5286|J140610.90-430530.1,f|S|G8,14:6:10.91|-6.68,-43:5:30.13|-34.2,6.19,2000 +Hya Pi-49|SAO 182244|HD 123123|CD-2610095|PPM 262489|HR 5287|J140622.29-264056.5,f|S|K2,14:6:22.30|43.02,-26:40:56.50|-140.8,3.26,2000 +V6544|SAO 241439|HD 122879|CP-59 5395|PPM 342547|HR 5281|J140625.15-594257.2,f|V|B0,14:6:25.16|-3.25,-59:42:57.26|-1.2,6.43,2000 +Menkent|Cen Theta-5|HD 123139|CD-35 9260|PPM 292214|HR 5288|J140640.94-362211.8,f|D|K0,14:6:40.95|-519.36,-36:22:11.84|-517.9,2.08,2000 +Vir 95|SAO 139736|HD 123255|SD-08 3697|J140642.82-091848.6,f|S|F2,14:6:42.82|-140.62,-9:18:48.66|4.1,5.46,2000 +UMi 3|BD+75 529|PPM 8573|J140656.36+743537.6,f|S|A7,14:6:56.37|-53.20,74:35:37.61|12.7,6.43,2000 +HD 123247|CD-48 8775|J140740.80-484214.4,f|S|B9,14:7:40.81|-35.54,-48:42:14.49|-27.7,6.43,2000 +HD 123227|CD-49 8475|J140741.52-495203.3,f|D|G3,14:7:41.53|-37.32,-49:52:3.39|106.4,6.49,2000 +BY BOO|HD 123657|BD+44 2325|HR 5299|J140755.75+435116.0,f|V|M4,14:7:55.76|11.68,43:51:16.03|-29.8,5.21,2000 +SAO 252616|HD 123151|CP-62 3941|HR 5289|J140814.29-631228.6,f|S|G8,14:8:14.30|19.20,-63:12:28.62|35.3,6.39,2000 +Boo 13|CF BOO|HD 123782|BD+50 2047|PPM 53944|J140817.30+492729.4,f|D|M1,14:8:17.30|-59.57,49:27:29.40|60.3,5.26,2000 +SAO 257116|HD 122862|CP-74 1142|PPM 372154|HR 5279|J140827.16-745101.0,f|S|G2,14:8:27.17|-242.30,-74:51:1.03|180.3,6.02,2000 +HD 123977|BD+60 1516|PPM 34372|J140846.04+592015.5,f|S|K0,14:8:46.05|-123.16,59:20:15.54|-20.8,6.47,2000 +UMi 4|HD 124547|BD+78 478|PPM 8579|HR 5321|J140850.92+773251.0,f|S|K3,14:8:50.93|-30.37,77:32:51.05|33.4,4.80,2000 +SAO 224721|HD 123445|CD-42 9065|PPM 319229|HR 5294|J140851.88-432814.8,f|D|B9,14:8:51.89|-19.27,-43:28:14.80|-17.4,6.18,2000 +V0883 CEN|SAO 241478|HD 123335|CP-58 5383|PPM 342583|HR 5292|J140856.25-591636.1,f|V|B5,14:8:56.25|-12.49,-59:16:36.16|-17,6.34,2000 +Vir 96|SAO 158385|SD-09 3865|PPM 228362|HR 5298|J140900.59-102004.3,f|S|G8,14:9:0.59|-6.20,-10:20:4.37|21.7,6.45,2000 +V0869 CEN|SAO 241491|HD 123515|CD-50 8294|PPM 342596|HR 5296|J140935.03-513016.8,f|D|B9,14:9:35.03|-32.68,-51:30:16.82|-11,5.96,2000 +SAO 241496|HD 123569|CP-52 7028|HR 5297|J140954.81-532620.2,f|D|G9,14:9:54.82|-144.21,-53:26:20.20|-90.5,4.74,2000 +Boo 12|HD 123999|BD+25 2737|J141023.93+250530.0,f|S|F9,14:10:23.93|-23.09,25:5:30.04|-60.1,4.82,2000 +SAO 257119|HD 123377|CP-69 2012|PPM 372168|HR 5293|J141030.90-701819.6,f|D|K4,14:10:30.90|-5.91,-70:18:19.67|-5.8,6.07,2000 +ET VIR|HD 123934|SD-15 3817|J141050.48-161807.3,f|V|M2,14:10:50.49|3.89,-16:18:7.31|-10.9,4.94,2000 +SAO 252636|HD 123492|CP-69 2014|HR 5295|J141101.87-694309.5,f|S|A6,14:11:1.88|-31.25,-69:43:9.54|-20.5,6.07,2000 +HD 124186|BD+32 2443|PPM 77723|J141115.12+321745.2,f|S|K4,14:11:15.12|-22.19,32:17:45.21|38.4,6.13,2000 +HD 124115|BD+02 2783|J141131.20+012144.6,f|S|F7,14:11:31.20|-128.36,1:21:44.63|31.1,6.41,2000 +V6593|BD+70 778|HR 5334|J141204.01+692557.1,f|V|M2,14:12:4.01|-26.14,69:25:57.17|-49.5,5.19,2000 +CU VIR|HD 124224|BD+03 2867|HR 5313|J141215.80+022433.9,f|D|A0,14:12:15.80|-44.66,2:24:33.96|-26.1,4.99,2000 +SAO 182343|HD 124162|CD-2311551|J141224.56-242148.0,f|S|K0,14:12:24.57|19.95,-24:21:48.07|-5.2,6.34,2000 +Hya 50|SAO 182349|CD-2610158|PPM 262637|HR 5312|J141246.02-271540.2,f|S|K3,14:12:46.02|-13.47,-27:15:40.27|-35.5,5.08,2000 +Vir Kappa-98|V20060|SAO 158427|HD 124294|SD-09 3878|HR 5315|J141253.74-101625.3,f|V|K2,14:12:53.75|8.12,-10:16:25.33|140.8,4.18,2000 +SAO 182354|HD 124281|CD-2610163|PPM 262646|HR 5314|J141313.25-263644.3,f|S|K0,14:13:13.26|13.14,-26:36:44.31|-17.9,6.24,2000 +SAO 241543|HD 124147|CP-53 5912|PPM 342652|J141316.40-533956.4,f|S|K5,14:13:16.41|-12.62,-53:39:56.43|-9.5,5.58,2000 +Boo Kappa-17A|Kappa2 Bootis|HD 124675|BD+52 1782A|Asellus Tertius|HR 5329|J141329.00+514723.8,f|D|A8,14:13:29.01|61.42,51:47:23.87|-10.6,4.52,2000 +V0716 CEN|SAO 241552|HD 124195|CP-54 5933|PPM 342658|HR 5311|J141339.82-543732.2,f|V|B5,14:13:39.83|-18.06,-54:37:32.26|-11.2,6.09,2000 +V20063|SAO 139798|HD 124425|BD-00 2796|PPM 179251|HR 5317|J141340.79-005043.6,f|V|F7,14:13:40.79|207.43,-0:50:43.66|-139.1,5.90,2000 +Boo 14|V6597|BD+13 2764|HR 5323|J141405.17+125733.9,f|V|F6,14:14:5.18|-254.06,12:57:34.00|-54.6,5.53,2000 +HD 124553|SD-05 3837|PPM 197336|HR 5322|J141421.30-055651.7,f|S|F9,14:14:21.31|-306.29,-5:56:51.78|83.6,6.37,2000 +HD 124755|BD+42 2472|HR 5335|J141423.54+413107.5,f|S|K5,14:14:23.55|-22.91,41:31:7.53|-106.3,6.23,2000 +HD 124678|BD+14 2718|J141435.60+135831.6,f|S|K2,14:14:35.61|-94.47,13:58:31.62|80.6,6.46,2000 +HD 124713|BD+22 2678|HR 5333|J141440.96+215224.2,f|S|A7,14:14:40.96|41.06,21:52:24.21|-7.2,6.38,2000 +SAO 224791|HD 124433|CD-41 8589|PPM 319325|HR 5318|J141442.66-415014.9,f|S|G8,14:14:42.66|-129.08,-41:50:14.98|-19.3,5.61,2000 +Boo 15|HD 124679|BD+10 2654|J141450.84+100602.1,f|D|K1,14:14:50.85|-22.45,10:6:2.20|-164.3,5.29,2000 +FS VIR|HD 124681|BD+04 2841|HR 5331|J141453.01+032009.1,f|V|M4,14:14:53.02|-50.02,3:20:9.16|-24.8,6.47,2000 +V0795 CEN|SAO 241563|HD 124367|CP-56 6206|PPM 342676|HR 5316|J141457.13-570510.0,f|D|B4,14:14:57.14|-23.96,-57:5:10.05|-21,5.05,2000 +SAO 182374|HD 124576|CD-2810528|PPM 262676|HR 5324|J141501.25-291654.8,f|S|A1,14:15:1.25|-37.68,-29:16:54.85|-14.4,6.10,2000 +SAO 241569|HD 124454|CP-52 7087|PPM 342682|HR 5319|J141521.30-533035.7,f|S|K3,14:15:21.31|-18.38,-53:30:35.79|-4.4,6.41,2000 +SAO 158448|HD 124683|SD-17 4046|PPM 228526|HR 5332|J141524.08-181202.4,f|S|A1,14:15:24.09|-45.46,-18:12:2.48|-11.5,5.53,2000 +SAO 224798|CD-44 9181|PPM 319343|HR 5325|J141538.68-450002.7,f|S|F9,14:15:38.68|127.49,-45:0:2.72|-137.6,6.31,2000 +Arcturus|Haris el Sema|Boo Alpha-16|V6603|HD 124897|BD+19 2777|J141539.67+191056.6,f|V|K1,14:15:39.67|-1093.42,19:10:56.69|-1999.4,0.16,2000 +Syrma|Vir Iota-99|V6604|SAO 139824|SD-05 3843|PPM 197358|HR 5338|J141600.86-060001.9,f|V|F6,14:16:0.87|-25.81,-6:0:1.97|-419.8,4.08,2000 +CN BOO|HD 124953|BD+19 2779|HR 5343|J141604.14+185442.4,f|V|A8,14:16:4.14|42.57,18:54:42.46|-33.9,5.97,2000 +Asellus|Asellus Secundus|Boo Iota-21A|Iota Bootis|HD 125161|BD+52 1784|PPM 34432|J141609.92+512202.0,f|D|A9,14:16:9.93|-150.03,51:22:2.03|89.4,4.75,2000 +SAO 139828|HD 124915|SD-05 3845|PPM 197365|HR 5341|J141621.38-063717.5,f|S|A9,14:16:21.38|-42.61,-6:37:17.56|-10.5,6.45,2000 +Boo Lambda-19|V6611|HD 125162|BD+46 1949|HR 5351|J141623.01+460517.9,f|V|A0,14:16:23.02|-187.47,46:5:17.90|159,4.18,2000 +HD 125111|BD+40 2760|HR 5347|J141624.27+394440.9,f|S|F2,14:16:24.27|-140.36,39:44:40.96|7,6.38,2000 +V6608|HD 124931|SD-02 3812|PPM 197371|HR 5342|J141630.16-031146.6,f|V|A1,14:16:30.17|-22.46,-3:11:46.70|-32.6,6.14,2000 +BD+20 2954|HR 5346|J141632.84+200718.6,f|D|F8,14:16:32.84|-135.91,20:7:18.65|-93.8,6.38,2000 +SAO 252678|HD 124471|CP-66 2490|J141638.71-663516.4,f|D|B1,14:16:38.72|-7.15,-66:35:16.42|-5.2,5.76,2000 +SAO 139834|HD 124973|SD-08 3737|PPM 197374|J141648.73-085304.1,f|S|K0,14:16:48.74|-16.89,-8:53:4.10|-14.4,6.49,2000 +V20066|SAO 257131|CP-77 940|PPM 372215|J141655.14-773951.1,f|V|K2,14:16:55.15|-5.86,-77:39:51.20|-2.9,6.47,2000 +SAO 158462|SD-17 4053|PPM 228564|HR 5344|J141703.78-183508.5,f|S|G5,14:17:3.79|-5.26,-18:35:8.52|-7.7,6.22,2000 +HD 125349|BD+51 1908|PPM 34445|J141721.13+511826.5,f|S|A2,14:17:21.14|-23.63,51:18:26.54|-8,6.19,2000 +CY BOO|BD+15 2690|HR 5352|J141728.45+151548.1,f|V|M3,14:17:28.45|15.34,15:15:48.17|7.7,5.85,2000 +BD+48 2188|HR 5363|J141749.19+480007.2,f|S|F5,14:17:49.20|-12.34,48:0:7.21|-38.1,6.32,2000 +V20079|HD 125351|BD+36 2468|HR 5361|J141759.81+353034.2,f|V|K0,14:17:59.82|4.88,35:30:34.22|14.2,4.81,2000 +SAO 139856|HD 125184|SD-06 3964|HR 5353|J141800.72-073232.5,f|D|G5,14:18:0.73|267.07,-7:32:32.60|-235,6.47,2000 +Aps Eta|SAO 258693|HD 123998|CP-80 706|PPM 377662|J141813.89-810027.9,f|S|A2,14:18:13.90|-19.95,-81:0:27.94|-65.4,4.90,2000 +CS VIR|SAO 158481|HD 125248|SD-18 3789|HR 5355|J141838.25-184257.4,f|V|A0,14:18:38.26|-65.64,-18:42:57.48|-35.4,5.86,2000 +HD 125632|BD+55 1678|PPM 34459|HR 5372|J141855.90+545149.5,f|S|A5,14:18:55.91|-18.73,54:51:49.51|-8.6,6.48,2000 +SAO 182433|HD 125276|CD-2510271|PPM 262764|HR 5356|J141900.89-254855.5,f|D|F5,14:19:0.90|-356.34,-25:48:55.53|366.8,5.88,2000 +Vir Lambda-100|V6621|SAO 158489|HD 125337|SD-12 4018|PPM 228615|HR 5359|J141906.59-132215.9,f|V|A2,14:19:6.59|-17.07,-13:22:15.94|29.4,4.52,2000 +SAO 182435|HD 125279|CD-2610223|J141907.15-270828.1,f|S|K5,14:19:7.16|-23.09,-27:8:28.13|3,6.36,2000 +Boo 18|HD 125451|BD+13 2782|HR 5365|J141916.28+130015.4,f|D|F5,14:19:16.28|105.96,13:0:15.48|-32.2,5.40,2000 +HD 125283|CD-36 9268|PPM 292483|HR 5357|J141923.87-370010.4,f|S|A2,14:19:23.88|-48.75,-37:0:10.46|-41.1,5.93,2000 +Lup Iota|V6620|SAO 224833|HD 125238|CD-45 9084|PPM 319397|HR 5354|J141924.22-460329.1,f|V|B2,14:19:24.22|-12.80,-46:3:29.14|-3.8,3.55,2000 +Vir Upsilon-102|V6629|SAO 139866|HD 125454|BD-01 2938|PPM 179274|HR 5366|J141932.47-021555.8,f|V|G9,14:19:32.48|-119.31,-2:15:55.87|-71.9,5.15,2000 +V6630|HD 125489|BD+01 2913|HR 5368|J141940.95+002303.6,f|V|A7,14:19:40.95|-37.35,0:23:3.60|-12.4,6.19,2000 +Boo 20|V6631|BD+16 2637|J141945.23+161825.0,f|V|K3,14:19:45.24|-140.94,16:18:25.01|60.3,4.84,2000 +HD 125642|BD+39 2750|PPM 77828|HR 5373|J141947.73+384738.5,f|S|A2,14:19:47.74|26.77,38:47:38.59|-10.2,6.32,2000 +HD 125158|CP-60 5294|HR 5349|J141951.50-611622.6,f|S|A3,14:19:51.50|-165.03,-61:16:22.70|-88.3,5.22,2000 +SAO 139868|SD-06 3972|PPM 197431|J141953.20-064446.2,f|S|G5,14:19:53.20|-90.72,-6:44:46.20|-23.5,6.44,2000 +V6633|HD 125658|BD+31 2605|PPM 77832|HR 5374|J142008.66+302544.8,f|V|A5,14:20:8.67|-9.31,30:25:44.86|-6.7,6.46,2000 +SAO 224838|HD 125383|CD-42 9235|HR 5362|J142009.70-430331.8,f|D|G8,14:20:9.70|-8.99,-43:3:31.84|7.7,5.55,2000 +SAO 241641|HD 125288|CP-55 5984|HR 5358|J142019.54-562311.3,f|S|B6,14:20:19.54|-9.30,-56:23:11.39|-7.6,4.35,2000 +Cen Psi|V20084|HD 125473|CD-37 9336|HR 5367|J142033.43-375307.0,f|D|A0,14:20:33.43|-64.52,-37:53:7.06|-11.4,4.05,2000 +V20085|SAO 224843|HD 125442|CD-44 9236|PPM 319412|HR 5364|J142042.58-451113.4,f|V|F0,14:20:42.58|37.21,-45:11:13.42|-73.6,4.78,2000 +HD 125745|CD-34 9570|PPM 292545|HR 5376|J142219.71-344712.4,f|S|B8,14:22:19.72|-26.24,-34:47:12.45|-0.3,5.57,2000 +Aps Epsilon|Epsilon Apodis|SAO 257142|HD 124771|CP-79 755|PPM 377674|HR 5336|J142223.16-800632.2,f|S|B4,14:22:23.16|-10.90,-80:6:32.20|-14.1,5.06,2000 +SAO 241673|HD 125628|CP-57 6619A|PPM 342793|HR 5371|J142237.06-582732.8,f|D|G8,14:22:37.07|-47.00,-58:27:32.82|17,4.92,2000 +HX LUP|HD 125721|CD-47 9082|PPM 319458|HR 5375|J142238.71-481911.4,f|D|B1,14:22:38.71|-6.28,-48:19:11.48|-4.4,6.12,2000 +V0761 CEN|HD 125823|CD-38 9329|HR 5378|J142302.23-393042.5,f|V|B7,14:23:2.24|-24.30,-39:30:42.55|-21.8,4.42,2000 +Hya 51|V6648|SAO 182483|HD 125932|CD-27 9803|PPM 262841|HR 5381|J142305.77-274514.4,f|V|K4,14:23:5.77|-201.64,-27:45:14.46|-116.6,4.79,2000 +V6653|HD 126141|BD+25 2770|HR 5387|J142306.82+252017.4,f|V|F5,14:23:6.82|-156.58,25:20:17.42|63.8,6.22,2000 +BD+01 2920|HR 5384|J142315.28+011429.6,f|S|G1,14:23:15.28|223.60,1:14:29.65|-477.5,6.26,2000 +SAO 224881|CD-46 9284|PPM 319469|J142315.35-472501.0,f|S|G8,14:23:15.35|-6.29,-47:25:1.06|-3.9,6.39,2000 +SAO 241686|CD-50 8501|HR 5377|J142320.25-504620.1,f|D|K2,14:23:20.25|-11.76,-50:46:20.11|-7.2,6.06,2000 +HD 126129|BD+09 2882|HR 5386|J142322.69+082647.8,f|D|A0,14:23:22.70|-75.23,8:26:47.82|-9.6,5.03,2000 +Lib 2|SAO 158528|SD-11 3729|PPM 228711|HR 5383|J142325.62-114250.5,f|S|G7,14:23:25.63|-7.20,-11:42:50.55|-58.7,6.22,2000 +SAO 241691|HD 125869|CP-52 7195|J142348.58-531034.4,f|S|K1,14:23:48.58|-58.08,-53:10:34.44|-9.5,5.99,2000 +V6654|BD+08 2857|HR 5388|J142400.87+081438.2,f|V|A3,14:24:0.88|-6.23,8:14:38.29|-14.3,5.94,2000 +V20098|BD+28 2318|J142401.98+272447.4,f|V|K4,14:24:1.98|-3.86,27:24:47.44|-4.4,6.40,2000 +HD 126248|BD+06 2875|HR 5392|J142411.34+054912.4,f|S|A5,14:24:11.34|-77.90,5:49:12.47|6.5,5.10,2000 +V6655|HD 126271|BD+08 2858|HR 5394|J142418.26+080504.5,f|V|K4,14:24:18.27|-120.14,8:5:4.54|-103.3,6.17,2000 +SAO 258697|HD 124639|CP-82 601|PPM 377678|HR 5327|J142422.07-825053.7,f|S|B8,14:24:22.07|-22.63,-82:50:53.70|-11,6.43,2000 +CD-43 9027|PPM 319497|J142440.81-441840.0,f|S|K0,14:24:40.81|-37.35,-44:18:40.08|-41,6.44,2000 +SAO 182517|HD 126218|CD-2411469|PPM 262884|J142448.62-244822.7,f|S|G8,14:24:48.63|-53.37,-24:48:22.72|-18.1,5.34,2000 +HD 126111|CD-45 9152|J142454.58-463143.4,f|S|M1,14:24:54.59|-23.01,-46:31:43.50|9.6,6.38,2000 +V20094|SAO 252735|HD 125835|CP-67 2574|HR 5379|J142506.32-681143.1,f|V|A3,14:25:6.33|-7.97,-68:11:43.20|-3.8,5.60,2000 +Boo Theta-23|V6669|BD+52 1804|Asellus Primus|J142511.79+515102.6,f|D|F7,14:25:11.80|-236.09,51:51:2.68|-399.1,4.05,2000 +HD 126597|BD+39 2764|J142529.15+382334.9,f|S|K3,14:25:29.15|6.00,38:23:34.99|-19.3,6.28,2000 +SAO 252737|CP-65 2718|HR 5382|J142539.74-661022.5,f|S|A3,14:25:39.74|-41.87,-66:10:22.52|-16,6.37,2000 +SAO 182535|CD-2610280|PPM 262914|HR 5399|J142547.76-265108.0,f|S|G7,14:25:47.77|-4.68,-26:51:8.07|-56.1,6.49,2000 +Lup Tau1|Tau1 Lupi|SAO 224919|HD 126341|CD-44 9322|PPM 319521|HR 5395|J142608.22-451317.1,f|D|B2,14:26:8.22|-13.52,-45:13:17.13|-14,4.56,2000 +Lup Tau2|HD 126354|CD-44 9323|PPM 319522|HR 5396|J142610.81-452245.4,f|D|F4,14:26:10.81|14.33,-45:22:45.42|-14.2,4.35,2000 +SAO 224923|HD 126386|CD-41 8757|PPM 319523|HR 5398|J142613.44-421906.9,f|S|K2,14:26:13.44|-111.91,-42:19:6.95|-51.5,6.33,2000 +Boo 22|V20109|HD 126661|BD+19 2810|J142627.36+191336.8,f|V|F0,14:26:27.36|-70.96,19:13:36.84|26.7,5.40,2000 +HD 126475|CD-39 8918|PPM 292641|J142649.87-395226.3,f|S|B7,14:26:49.87|-19.69,-39:52:26.36|-22.8,6.36,2000 +Oct Delta|V6636|SAO 258698|HD 124882|CP-83 557|HR 5339|J142655.23-834004.3,f|V|K2,14:26:55.23|-95.79,-83:40:4.38|-12.9,4.31,2000 +SAO 252745|HD 126241|CP-65 2732|HR 5391|J142707.08-654917.9,f|S|K3,14:27:7.09|-18.49,-65:49:17.93|-14.4,5.84,2000 +V20108|SAO 224929|CD-45 9188|PPM 319533|J142712.17-460803.3,f|D|A1,14:27:12.17|-152.49,-46:8:3.31|-78.1,5.82,2000 +Vir 104|SAO 139942|HD 126722|SD-05 3880|J142724.38-060713.1,f|S|A2,14:27:24.39|-62.19,-6:7:13.20|-57.8,6.17,2000 +UMi 5A|V6687|BD+76 527|PPM 8661|J142731.54+754145.5,f|D|K4,14:27:31.54|8.71,75:41:45.57|22.1,4.24,2000 +Hya 52A|V6674|HD 126769|CD-2810712|PPM 262974|J142810.42-292929.8,f|D|B8,14:28:10.43|-24.94,-29:29:29.89|-23.8,4.98,2000 +Vir Phi-105A|V6675|SAO 139951|HD 126868|BD-01 2957|PPM 179311|J142812.13-021340.6,f|D|G2,14:28:12.14|-140.89,-2:13:40.65|-2.9,4.84,2000 +BD+36 2495|PPM 77928|HR 5416|J142816.44+361149.3,f|S|K0,14:28:16.44|-21.67,36:11:49.30|3.7,6.21,2000 +Boo 24|V20116|HD 127243|BD+50 2084|PPM 54155|J142837.81+495041.4,f|V|G4,14:28:37.81|-304.50,49:50:41.47|-46.4,5.58,2000 +Vir 106|SAO 139957|HD 126927|SD-06 4009|PPM 197585|J142841.72-065401.9,f|S|K5,14:28:41.72|-14.00,-6:54:1.93|-50.3,5.42,2000 +SAO 241737|CP-58 5549|PPM 342868|J142843.49-591151.1,f|S|A0,14:28:43.50|-6.61,-59:11:51.17|-7.7,6.47,2000 +V20113|HD 126759|CD-47 9162|PPM 319563|J142851.90-475931.5,f|V|Ap,14:28:51.91|-22.49,-47:59:31.51|-19.2,6.40,2000 +HD 127334|BD+42 2508|PPM 54166|HR 5423|J142936.80+414745.2,f|S|G5,14:29:36.81|161.03,41:47:45.28|-220.9,6.36,2000 +SAO 257163|CP-76 826|PPM 372296|HR 5389|J142937.00-764344.6,f|S|K0,14:29:37.00|-27.55,-76:43:44.70|-28.3,6.06,2000 +V20122|BD+32 2482|PPM 77947|HR 5422|J142949.67+314728.2,f|D|A0,14:29:49.67|-19.76,31:47:28.28|7,6.06,2000 +HD 127167|BD+01 2941|HR 5418|J142950.51+004944.1,f|S|A5,14:29:50.52|15.75,0:49:44.14|7.3,5.97,2000 +V20117|SAO 224969|HD 126981|CD-44 9383|PPM 319585|HR 5412|J143008.62-451916.8,f|D|B8,14:30:8.63|-37.76,-45:19:16.88|-27.8,5.51,2000 +V20119|SAO 224972|HD 126983|CD-48 9098|HR 5413|J143020.94-493108.4,f|D|A1,14:30:20.95|-50.64,-49:31:8.46|-37.7,5.39,2000 +HD 127337|BD+05 2886|HR 5424|J143045.38+044620.2,f|D|K5,14:30:45.39|1.20,4:46:20.23|-12.7,6.01,2000 +HD 127821|BD+63 1136|HR 5436|J143046.07+631108.8,f|S|F4,14:30:46.07|-177.42,63:11:8.84|9.9,6.11,2000 +SAO 224982|HD 127152|CD-40 8729|PPM 319597|HR 5417|J143056.61-405042.4,f|S|K3,14:30:56.62|-13.05,-40:50:42.44|-4.2,6.38,2000 +HD 127193|CD-38 9430|PPM 292725|HR 5419|J143110.84-385210.9,f|S|K1,14:31:10.84|5.49,-38:52:10.95|28.2,5.99,2000 +SAO 252767|HD 126862|CP-67 2595|J143116.44-674301.9,f|D|K1,14:31:16.44|36.17,-67:43:1.91|-58.8,5.85,2000 +ER DRA|HD 127929|BD+60 1547|HR 5437|J143142.81+601332.2,f|V|F0,14:31:42.81|-48.42,60:13:32.29|19.7,6.27,2000 +Boo Rho-25|V6697|HD 127665|BD+31 2628|PPM 77975|HR 5429|J143149.78+302217.1,f|D|K3,14:31:49.79|-100.43,30:22:17.17|120.2,3.57,2000 +Seginus|Haris|Boo Gamma-27A|Gamma Bootis|HD 127762|BD+38 2565|PPM 77976|HR 5435|J143204.67+381829.7,f|D|A7,14:32:4.67|-115.58,38:18:29.71|151.9,3.04,2000 +V6699|HD 127726|BD+27 2388|HR 5433|J143220.22+264038.3,f|D|A7,14:32:20.22|-79.08,26:40:38.38|-13.7,6.01,2000 +BD+56 1746|PPM 34573|HR 5442|J143230.93+552352.8,f|S|K5,14:32:30.94|5.71,55:23:52.84|-14.8,5.72,2000 +Boo 26|HD 127739|BD+22 2715|HR 5434|J143232.54+221536.2,f|S|F2,14:32:32.54|-126.47,22:15:36.21|40.4,5.90,2000 +Lup Sigma|ig Lup|SAO 241781|HD 127381|CD-49 8831|HR 5425|J143237.05-502725.7,f|S|B2,14:32:37.06|-29.51,-50:27:25.77|-14.9,4.43,2000 +HD 127624|CD-3011519|HR 5428|J143309.65-304254.2,f|D|K0,14:33:9.65|40.36,-30:42:54.25|-39.7,6.10,2000 +CP BOO|HD 127986|BD+37 2545|PPM 77987|HR 5441|J143320.27+365732.4,f|V|F8,14:33:20.27|2.88,36:57:32.48|-73.8,6.40,2000 +SAO 241793|CP-52 7301|PPM 342931|HR 5427|J143329.96-524046.2,f|D|K0,14:33:29.97|-2.82,-52:40:46.28|-17.1,5.87,2000 +SAO 241792|HD 127486|CP-54 6053|PPM 342933|HR 5426|J143332.37-545955.0,f|S|F6,14:33:32.38|-93.44,-54:59:55.06|-5,5.86,2000 +HD 129245|BD+80 448|PPM 8692|HR 5479|J143338.29+793937.5,f|S|K3,14:33:38.29|-100.02,79:39:37.54|84,6.27,2000 +V20133|BD+33 2474|PPM 77998|HR 5445|J143411.70+323204.1,f|D|F5,14:34:11.71|106.10,32:32:4.12|5.7,6.32,2000 +HD 128332|BD+57 1519|PPM 34588|HR 5451|J143415.93+570354.9,f|S|F6,14:34:15.93|217.17,57:3:54.93|-232.5,6.47,2000 +V6718|HD 128198|BD+37 2551|HR 5448|J143438.50+363733.8,f|V|K4,14:34:38.50|-24.56,36:37:33.83|-46.6,6.00,2000 +CH BOO|HD 128333|BD+50 2095|PPM 54217|HR 5452|J143439.62+492206.0,f|V|M1,14:34:39.62|-45.81,49:22:6.08|50.4,5.74,2000 +Boo Sigma-28A|V6717|HD 128167|BD+30 2536|HR 5447|J143440.81+294442.4,f|D|F2,14:34:40.82|188.32,29:44:42.47|132.7,4.47,2000 +SAO 182676|HD 127964|SD-19 3903|PPM 263134|HR 5438|J143450.72-202621.7,f|S|A4,14:34:50.73|16.59,-20:26:21.77|-1.5,6.49,2000 +SAO 241811|HD 127724|CP-59 5642|HR 5432|J143517.04-600056.3,f|S|K2,14:35:17.04|-27.14,-60:0:56.32|-26.8,6.38,2000 +Cen Eta|Eta Centauri|HD 127972|CD-41 8917|J143530.42-420928.1,f|S|B1,14:35:30.42|-35.36,-42:9:28.17|-32.4,2.34,2000 +HD 127971|CD-40 8794|PPM 319681|HR 5439|J143531.48-413102.7,f|D|B7,14:35:31.48|-21.56,-41:31:2.77|-23.2,5.88,2000 +BD+23 2710|HR 5454|J143606.87+231501.2,f|S|K0,14:36:6.87|-9.51,23:15:1.29|27.2,6.38,2000 +V6724|CD-45 9293|PPM 319698|HR 5444|J143619.03-461443.6,f|D|K3,14:36:19.03|-31.22,-46:14:43.62|16.5,5.53,2000 +HD 128152|CD-39 9047|PPM 292846|HR 5446|J143624.10-393550.6,f|S|K1,14:36:24.10|-47.74,-39:35:50.67|-23.9,6.14,2000 +V20137|CD-39 9050|HR 5449|J143644.13-401241.6,f|V|B8,14:36:44.13|-22.68,-40:12:41.69|-22.1,5.74,2000 +SAO 158677|HD 128429|SD-11 3770|HR 5455|J143659.77-121819.2,f|S|F5,14:36:59.78|-870.97,-12:18:19.25|364.9,6.19,2000 +SAO 241848|HD 128154|CP-52 7350|PPM 342998|J143712.41-530338.8,f|S|K2,14:37:12.42|-10.73,-53:3:38.84|-15.9,6.49,2000 +HD 128266|CD-45 9302|PPM 319711|J143720.16-460800.4,f|D|G8,14:37:20.16|-7.28,-46:8:0.41|-5.7,5.43,2000 +HD 128563|BD+02 2844|J143728.46+021638.0,f|D|F8,14:37:28.47|-36.72,2:16:38.06|-73.2,6.45,2000 +SAO 252824|CP-67 2616|HR 5443|J143746.25-675555.2,f|S|F7,14:37:46.26|-348.28,-67:55:55.24|-281.4,6.05,2000 +Lup Rho|V6733|HD 128345|CD-48 9198|HR 5453|J143753.22-492532.9,f|V|B5,14:37:53.23|-27.81,-49:25:32.98|-29.1,4.05,2000 +V20147|BD+44 2376|PPM 54246|HR 5464|J143812.58+433831.6,f|V|K2,14:38:12.59|-102.91,43:38:31.67|31.8,5.72,2000 +BD+18 2906|HR 5462|J143813.98+181754.1,f|S|K5,14:38:13.99|-29.05,18:17:54.17|-64.5,5.91,2000 +HD 128998|BD+54 1693|PPM 34618|HR 5467|J143815.22+540124.0,f|S|A1,14:38:15.22|17.54,54:1:24.02|-19,5.82,2000 +HD 128488|CD-38 9529|PPM 292889|HR 5456|J143819.36-384739.0,f|S|K3,14:38:19.37|42.20,-38:47:39.06|-20.9,6.03,2000 +Boo 33|BD+45 2204|PPM 54257|HR 5468|J143850.22+442416.2,f|S|A1,14:38:50.23|-68.48,44:24:16.20|-18.4,5.40,2000 +HD 128582|CD-46 9469|PPM 319747|HR 5457|J143910.84-463504.1,f|S|F7,14:39:10.85|-198.14,-46:35:4.13|-215.8,6.06,2000 +HD 128617|CD-48 9218|PPM 319752|HR 5458|J143924.47-490319.1,f|S|F3,14:39:24.47|-189.03,-49:3:19.15|-125.2,6.38,2000 +Cen Alpha2|HD 128621|CP-60 5483B|J143935.08-605013.7,f|D|K1,14:39:35.08|-3600.98,-60:50:13.76|953.3,1.35,2000 +Rigel Kentaurus|Rigil Kent|Toliman|Cen Alpha1|V20145|SAO 252838|CP-60 5483A|HR 5459|J143936.49-605002.3,f|D|G2,14:39:36.49|-3679.33,-60:50:2.31|483,0.30,2000 +HD 129132|BD+22 2731|HR 5472|J144021.87+215833.1,f|D|G0,14:40:21.87|-14.61,21:58:33.12|40.4,6.13,2000 +SAO 241898|HD 128713|CP-55 6107|HR 5461|J144032.75-562626.7,f|S|K0,14:40:32.76|-12.69,-56:26:26.74|-8.4,6.31,2000 +HD 129153|BD+14 2769|HR 5473|J144042.39+133203.5,f|S|F0,14:40:42.39|53.81,13:32:3.57|-14.7,5.94,2000 +Boo Pi1-29A|V6762|HD 129174|BD+17 2768A|HR 5475|J144043.56+162505.9,f|D|B9,14:40:43.57|9.64,16:25:5.97|9.5,4.86,2000 +Boo Pi2-29B|V6763|HD 129175|BD+17 2768B|HR 5476|J144043.92+162504.0,f|D|A6,14:40:43.93|3.45,16:25:4.08|8.9,5.77,2000 +HD 128974|CD-35 9702|PPM 292931|HR 5466|J144101.39-360805.4,f|S|A0,14:41:1.39|-31.62,-36:8:5.49|-6.2,5.67,2000 +Boo Zeta-30B|HD 129246|BD+14 2770B|HR 5477|J144108.90+134342.2,f|D|A2,14:41:8.90|60.76,13:43:42.27|-24,3.78,2000 +Boo Zeta-30A|V6766|HD 129247|BD+14 2770A|HR 5478|J144108.95+134341.8,f|D|A2,14:41:8.95|52.31,13:43:41.88|-12.7,3.78,2000 +Boo 31|V6769|HD 129312|BD+08 2903|J144138.75+080942.3,f|V|G7,14:41:38.75|-10.25,8:9:42.35|3.3,4.86,2000 +Boo 32|HD 129336|BD+12 2729|HR 5481|J144143.52+113938.3,f|S|G8,14:41:43.52|-159.54,11:39:38.38|-112.3,5.55,2000 +HD 129161|CD-3011624|HR 5474|J144151.23-305559.3,f|D|Ap,14:41:51.24|-14.93,-30:55:59.36|-15,6.46,2000 +BD+21 2674|HR 5483|J144154.23+210724.8,f|S|G8,14:41:54.23|-10.35,21:7:24.83|-51.4,6.41,2000 +Lup Alpha|Alpha Lupi|SAO 225128|CD-46 9501|HR 5469|J144155.75-472317.5,f|D|B1,14:41:55.76|-21.12,-47:23:17.52|-24.2,2.29,2000 +SAO 241912|HD 128917|CP-58 5672|HR 5465|J144155.97-583656.9,f|S|F4,14:41:55.98|41.95,-58:36:56.99|-39.1,6.21,2000 +HD 129116|CD-37 9618|PPM 292953|HR 5471|J144157.59-374736.5,f|S|B3,14:41:57.59|-29.51,-37:47:36.59|-30.7,4.00,2000 +SAO 257182|HD 128294|CP-76 848|PPM 372368|J144159.70-770041.2,f|S|B9,14:41:59.71|-21.07,-77:0:41.23|-12.2,6.34,2000 +DL DRA|HD 129798|BD+61 1451|PPM 19112|HR 5492|J144203.24+611542.8,f|D|F2,14:42:3.25|76.02,61:15:42.90|-29.5,6.27,2000 +Cir Alpha|Alpha Circini|SAO 252853|HD 128898|CP-64 2977|HR 5463|J144230.41-645830.4,f|D|Ap,14:42:30.42|-192.64,-64:58:30.50|-234.1,3.18,2000 +Vir Mu-107|SD-05 3936|Rijl al Awwa|HR 5487|J144303.62-053929.5,f|S|F2,14:43:3.62|104.19,-5:39:29.54|-319.9,3.87,2000 +Lib 4|SAO 182795|HD 129433|CD-2411637|PPM 263299|HR 5484|J144313.55-245951.9,f|S|B9,14:43:13.55|-21.75,-24:59:51.91|-9.1,5.70,2000 +Boo 34|W BOO|HD 129712|BD+27 2413|J144325.36+263140.2,f|V|M3,14:43:25.36|-13.29,26:31:40.26|-16.7,4.81,2000 +V20165|CP-62 4257|J144328.13-625800.0,f|D|B3,14:43:28.13|-4.43,-62:58:0.03|-4.8,6.40,2000 +HD 129456|CD-34 9868|PPM 292985|HR 5485|J144339.44-351025.1,f|S|K3,14:43:39.44|-60.94,-35:10:25.16|-176.8,4.05,2000 +HD 129846|BD+41 2523|HR 5493|J144344.43+402733.3,f|S|K4,14:43:44.43|-13.35,40:27:33.31|20.8,5.71,2000 +SAO 241966|HD 129462|CP-57 6772|PPM 343124|HR 5486|J144455.47-582838.9,f|S|K0,14:44:55.47|-85.64,-58:28:38.97|-42.2,6.10,2000 +Boo Epsilon-36B|HD 129988|BD+27 2417|J144459.14+270429.9,f|D|A2,14:44:59.15|-50.62,27:4:29.91|20,4.66,2000 +HD 129685|CD-34 9888|HR 5489|J144459.20-351130.5,f|S|A0,14:44:59.20|10.05,-35:11:30.57|-2,4.93,2000 +Boo Epsilon-36A|HD 129989|BD+27 2417|Pulcherrima|Izar|J144459.21+270427.2,f|D|K0,14:44:59.22|-50.62,27:4:27.20|20,2.50,2000 +BU CIR|SAO 241971|HD 129557|CP-55 6150|PPM 343129|HR 5488|J144510.95-553605.9,f|D|B2,14:45:10.96|-6.44,-55:36:5.91|-7.7,6.10,2000 +V20175|BD-00 2867|PPM 179374|HR 5496|J144511.70-012503.1,f|V|M1,14:45:11.71|-56.68,-1:25:3.10|-0.7,6.06,2000 +V20179|BD+33 2489|PPM 78112|J144513.71+324718.0,f|V|M1,14:45:13.71|44.77,32:47:18.04|-67.7,6.27,2000 +Boo Omicron-35|HD 129972|BD+17 2780|J144514.46+165751.4,f|S|G8,14:45:14.46|-60.83,16:57:51.41|-50.7,4.60,2000 +SAO 252869|HD 129422|CP-62 4275|HR 5482|J144517.33-625232.3,f|D|A9,14:45:17.34|70.23,-62:52:32.33|-80.3,5.36,2000 +SAO 241976|HD 129624|CD-50 8791|PPM 343132|J144518.82-511853.7,f|S|K4,14:45:18.83|-20.44,-51:18:53.74|-14.9,6.45,2000 +BD+19 2854|J144520.58+185305.8,f|S|K0,14:45:20.58|9.23,18:53:5.84|18.8,6.15,2000 +Vir 108|HD 129956|BD+01 2972|J144530.20+004302.1,f|S|B9,14:45:30.21|-39.90,0:43:2.17|-7.9,5.68,2000 +Lib 5|SAO 158788|HD 129978|SD-14 4023|PPM 229252|J144557.75-152734.3,f|D|K1,14:45:57.76|-39.61,-15:27:34.35|1.6,6.34,2000 +Hya 54A|V20178|SAO 182855|HD 129926|CD-2411661A|PPM 263376|HR 5497|J144600.07-252635.4,f|D|F2,14:46:0.08|-151.57,-25:26:35.45|-109.1,5.08,2000 +EK BOO|BD+15 2758|HR 5512|J144605.94+150754.4,f|V|M5,14:46:5.95|-85.14,15:7:54.44|19.3,5.87,2000 +SAO 182857|HD 129944|SD-22 3844|PPM 263377|HR 5499|J144606.76-230910.8,f|S|G5,14:46:6.77|25.79,-23:9:10.86|-64,5.81,2000 +SAO 182858|SD-20 4087|PPM 263379|J144610.87-211033.5,f|D|F7,14:46:10.87|-77.21,-21:10:33.52|-95.1,6.43,2000 +Vir 109|V6794|BD+02 2862|HR 5511|J144614.92+015334.3,f|V|A0,14:46:14.92|-116.04,1:53:34.39|-21.8,3.73,2000 +SAO 225178|HD 129858|CD-46 9562|PPM 319872|HR 5494|J144628.99-472628.0,f|S|A1,14:46:28.99|-39.77,-47:26:28.02|-14.7,5.74,2000 +SAO 241992|HD 129893|CD-51 8457|HR 5495|J144701.29-522300.6,f|D|G8,14:47:1.29|-17.94,-52:23:0.66|-82.3,5.23,2000 +CD-37 9686|J144705.09-381726.2,f|S|K3,14:47:5.10|52.74,-38:17:26.30|-82.6,5.90,2000 +SAO 241995|HD 129932|CD-51 8461|PPM 343155|HR 5498|J144712.58-521218.9,f|D|A1,14:47:12.59|-6.62,-52:12:18.92|-2.9,6.07,2000 +SAO 182873|SD-20 4093|PPM 263395|HR 5513|J144713.64-211929.5,f|S|K5,14:47:13.65|-13.97,-21:19:29.54|2.8,6.05,2000 +Hya 55|V20183|SAO 182875|CD-2510534|PPM 263397|HR 5514|J144722.55-253727.3,f|V|A0,14:47:22.55|-7.84,-25:37:27.36|-13.9,5.62,2000 +SAO 225183|CD-43 9326|PPM 319887|J144732.09-433324.5,f|S|G8,14:47:32.10|-12.72,-43:33:24.50|-12.6,6.30,2000 +Hya 56|SAO 182882|CD-2510537|HR 5516|J144744.80-260515.0,f|S|G5,14:47:44.81|36.91,-26:5:15.00|-8.4,5.24,2000 +Aps Alpha|SAO 257193|CP-78 893|J144751.70-790241.1,f|S|K3,14:47:51.71|-5.67,-79:2:41.10|-15.8,3.81,2000 +SD-12 4134|PPM 229299|HR 5518|J144754.95-125024.0,f|S|K1,14:47:54.95|48.99,-12:50:24.02|-92.6,6.32,2000 +Hya 57|SAO 182883|CD-2610519|HR 5517|J144757.55-263846.1,f|S|B9,14:47:57.56|-10.59,-26:38:46.16|-8.8,5.77,2000 +BD+24 2779|HR 5524|J144823.34+242200.7,f|D|F2,14:48:23.34|-101.11,24:22:0.75|57.3,6.15,2000 +V0768 CEN|CD-36 9645|HR 5519|J144838.04-363804.9,f|V|M3,14:48:38.05|-13.00,-36:38:4.91|-46,6.00,2000 +CO CIR|SAO 252894|HD 129954|CP-66 2645|J144844.55-663536.8,f|D|B2,14:48:44.55|-7.51,-66:35:36.83|-11.1,5.89,2000 +BD-00 2886|PPM 179393|HR 5522|J144854.09-005051.5,f|S|B9,14:48:54.09|-8.55,-0:50:51.56|16.9,6.14,2000 +BD+38 2593|PPM 78156|HR 5529|J144906.74+374840.2,f|S|F2,14:49:6.74|-253.01,37:48:40.25|109.6,6.15,2000 +V6807|CP-56 6441|PPM 343186|HR 5515|J144907.05-564004.1,f|V|K1,14:49:7.06|-105.75,-56:40:4.18|-119.5,6.22,2000 +Boo 38|BD+46 1993|Marrha|Merga|El Mara el Musalsela|Falx Italica|PPM 54353|HR 5533|J144918.66+460658.3,f|S|F7,14:49:18.67|-7.38,46:6:58.34|-77.3,5.76,2000 +SAO 182898|CD-2311916|PPM 263433|HR 5521|J144918.74-241505.2,f|D|K5,14:49:18.75|-20.65,-24:15:5.29|-0.4,5.70,2000 +Lib Mu-7A|V6816|SAO 158821|SD-13 3986|HR 5523|J144919.05-140856.4,f|D|A1,14:49:19.05|-65.89,-14:8:56.48|-14.8,5.60,2000 +BD+51 1957|HR 5537|J144932.38+512228.2,f|D|F5,14:49:32.38|15.17,51:22:28.21|2.2,6.48,2000 +CP-68 2185|J144937.04-685610.2,f|S|B3,14:49:37.05|-9.76,-68:56:10.29|-13.4,6.50,2000 +Boo 39|BD+49 2326|PPM 54359|HR 5538|J144941.29+484314.8,f|D|F6,14:49:41.29|-76.89,48:43:14.89|99.1,5.68,2000 +BD+29 2581|HR 5532|J144958.39+283656.9,f|D|A4,14:49:58.40|18.83,28:36:56.99|-0.7,5.79,2000 +V20196|BD+24 2786|HR 5534|J145015.81+235442.6,f|V|G0,14:50:15.81|144.80,23:54:42.64|32.4,5.88,2000 +Hya 58|SAO 182911|CD-2710073|PPM 263452|HR 5526|J145017.30-275737.3,f|S|K2,14:50:17.31|-237.42,-27:57:37.34|-62.4,4.42,2000 +BD+83 431|HR 5596|J145020.42+823042.9,f|S|F9,14:50:20.42|177.65,82:30:43.00|-223.3,5.64,2000 +HD 131111|BD+37 2580|PPM 78166|HR 5541|J145029.64+371619.3,f|S|K0,14:50:29.65|-212.23,37:16:19.37|95.2,5.48,2000 +Lib Alpha-8B|SAO 158836|SD-15 3965|PPM 229365|J145041.18-155950.0,f|D|F4,14:50:41.18|-135.97,-15:59:50.05|-59.5,5.15,2000 +Kochab|Kocab|UMi Beta-7|V6846|HD 131873|BD+74 595|PPM 8758|HR 5563|J145042.32+740919.8,f|D|K4,14:50:42.33|-32.27,74:9:19.82|11.9,2.06,2000 +Lib Alpha-9A|V6827|SD-15 3966|Zubenelgenubi|Zuben El Genubi|Kiffa Australis|PPM 229372|HR 5531|J145052.71-160230.4,f|D|A3,14:50:52.71|-105.67,-16:2:30.40|-69,2.75,2000 +V20199|BD+00 3253|HR 5536|J145100.09-001526.9,f|V|K3,14:51:0.09|-32.10,-0:15:26.97|6.9,6.17,2000 +Lib 11|BD-01 2991|HR 5535|J145101.07-021756.9,f|S|G8,14:51:1.07|87.68,-2:17:56.94|-123.6,4.93,2000 +Boo Xi-37A|Xi Bootis|HD 131156|BD+19 2870|HR 5544|J145123.37+190601.6,f|D|G8,14:51:23.38|152.80,19:6:1.66|-71.3,4.67,2000 +BD+59 1615|HR 5552|J145126.43+591738.3,f|S|K4,14:51:26.44|-120.87,59:17:38.35|137,5.48,2000 +HD 129899|CP-76 894|PPM 372434|J145130.03-771033.4,f|S|A0,14:51:30.04|-14.28,-77:10:33.49|-10,6.44,2000 +Lup Omicron|V20197|SAO 225248|CD-43 9391|PPM 319975|HR 5528|J145138.30-433431.2,f|D|B5,14:51:38.31|-24.78,-43:34:31.30|-26.8,4.33,2000 +SD-17 4200|J145151.30-182119.1,f|S|K0,14:51:51.31|-13.24,-18:21:19.17|-1.2,6.27,2000 +HD 131117|CD-3011780|PPM 293164|HR 5542|J145233.10-303438.1,f|S|G1,14:52:33.10|-336.16,-30:34:38.11|-41.3,6.30,2000 +AX CIR|SAO 252928|CP-63 3436|HR 5527|J145235.25-634835.3,f|V|G3,14:52:35.26|-10.06,-63:48:35.38|-4.1,5.95,2000 +V1019 CEN|CD-37 9760|PPM 293171|HR 5543|J145251.07-374811.3,f|V|B7,14:52:51.07|-20.62,-37:48:11.38|-18,5.02,2000 +CP-72 1604|PPM 372446|J145313.57-731124.2,f|D|G7,14:53:13.57|18.35,-73:11:24.26|34.3,5.59,2000 +DE BOO|HD 131511|BD+19 2881|HR 5553|J145323.76+190910.0,f|V|K0,14:53:23.77|-442.80,19:9:10.07|216.9,5.99,2000 +Lib 12|SAO 182983|CD-2411735|PPM 263542|HR 5548|J145420.12-243831.9,f|S|K2,14:54:20.13|-11.04,-24:38:31.93|-27.5,5.26,2000 +Lib Xi1-13|SAO 158887|SD-11 3827|HR 5554|J145422.87-115354.0,f|S|G7,14:54:22.87|-55.63,-11:53:54.05|-7.1,5.79,2000 +HD 131432|CD-3210457|PPM 293212|HR 5549|J145437.91-331802.0,f|D|K2,14:54:37.91|-8.53,-33:18:2.07|-5.8,5.84,2000 +Cir Zeta|V20204|SAO 252951|CP-65 2918|HR 5539|J145442.58-655927.9,f|V|B3,14:54:42.58|-6.41,-65:59:27.94|-12.2,6.08,2000 +SAO 252948|CP-69 2146|J145454.03-695139.4,f|S|B5,14:54:54.04|-9.50,-69:51:39.44|-13,6.38,2000 +SAO 242111|HD 131342|CP-59 5753|HR 5546|J145534.56-600650.9,f|S|K2,14:55:34.56|-125.71,-60:6:50.99|-112.3,5.18,2000 +HD 131625|CD-3310169|PPM 293233|HR 5558|J145544.70-335120.8,f|D|A0,14:55:44.71|19.18,-33:51:20.83|-2,5.32,2000 +BD+32 2531|PPM 78231|HR 5569|J145558.59+321800.2,f|D|A2,14:55:58.59|-53.38,32:18:0.23|-3.2,6.13,2000 +HD 131951|BD+15 2796|HR 5567|J145613.23+142646.5,f|S|A0,14:56:13.23|-12.78,14:26:46.56|-0.1,5.91,2000 +HD 131562|CP-52 7634|PPM 343284|HR 5556|J145617.25-524834.3,f|S|A2,14:56:17.25|27.56,-52:48:34.37|7.9,5.39,2000 +HD 132254|BD+50 2126|PPM 54423|HR 5581|J145623.04+493742.4,f|S|F7,14:56:23.04|110.76,49:37:42.42|-226.5,5.64,2000 +HD 131774|CD-3210480|PPM 293249|HR 5562|J145630.86-323812.4,f|S|K3,14:56:30.87|-3.41,-32:38:12.42|-30.6,6.06,2000 +CD-47 9543B|J145631.84-475244.8,f|D|A0,14:56:31.84|-24.95,-47:52:44.84|-23.7,5.62,2000 +HD 131657|CD-47 9543A|HR 5559|J145632.05-475245.1,f|D|B9,14:56:32.05|-29.88,-47:52:45.11|-22.5,5.62,2000 +HD 131752|CD-38 9785|HR 5561|J145635.74-392457.6,f|S|A0,14:56:35.75|-38.82,-39:24:57.68|-21.2,6.36,2000 +SAO 252964|HD 131491|CP-61 4768|J145638.33-622151.8,f|D|B5,14:56:38.33|-9.11,-62:21:51.89|-4.1,6.39,2000 +Cir Theta|Theta Circini|SAO 252965|HD 131492|CP-62 4337|HR 5551|J145643.98-624651.6,f|D|B4,14:56:43.99|-12.42,-62:46:51.66|-11.8,5.08,2000 +Lib Xi2-15|SAO 158915|HD 131918|SD-10 3989|PPM 229522|HR 5564|J145646.11-112434.9,f|S|K4,14:56:46.11|7.94,-11:24:34.92|11.2,5.46,2000 +Lib 16|SD-03 3696|J145710.99-042047.2,f|S|F0,14:57:11.00|-97.82,-4:20:47.26|-154.6,4.47,2000 +HD 132146|BD+16 2715|HR 5575|J145711.67+162317.2,f|S|G5,14:57:11.68|-4.03,16:23:17.26|-5,5.72,2000 +HD 131919|CD-2811055|HR 5565|J145713.70-290927.6,f|S|B9,14:57:13.71|-17.29,-29:9:27.64|-29.4,6.28,2000 +HD 131977|SD-20 4125|HR 5568|J145727.99-212455.7,f|D|K4,14:57:28.00|1034.20,-21:24:55.71|-1725.5,5.75,2000 +In Virgo|V20215|HD 132132|BD+00 3277|PPM 179433|HR 5573|J145733.25-001003.4,f|D|K1,14:57:33.25|59.85,-0:10:3.40|-26.2,5.51,2000 +RR UMI|HD 132813|BD+66 878|PPM 19232|HR 5589|J145735.00+655556.8,f|V|M4,14:57:35.01|-78.24,65:55:56.86|32.5,4.69,2000 +R APS|SAO 257212|CP-76 924|PPM 372479|J145752.98-763945.5,f|V|K4,14:57:52.98|-68.58,-76:39:45.56|-16.1,5.37,2000 +SAO 225328|HD 131923|CD-48 9494|HR 5566|J145808.80-485146.8,f|S|G3,14:58:8.80|-15.49,-48:51:46.84|-337.1,6.35,2000 +Lup Beta|SAO 225335|CD-42 9853|HR 5571|J145831.92-430802.2,f|S|B2,14:58:31.93|-34.04,-43:8:2.26|-38.3,2.68,2000 +CD-39 9402|PPM 293298|HR 5572|J145836.52-395425.8,f|S|K2,14:58:36.53|-75.60,-39:54:25.82|-79.3,6.16,2000 +Hya 59|HD 132219|CD-2710148|PPM 263634|HR 5577|J145839.25-273926.3,f|D|A4,14:58:39.25|-47.56,-27:39:26.33|-8.6,5.67,2000 +HD 132375|SD-04 3783|HR 5583|J145852.78-045921.3,f|D|F8,14:58:52.78|-358.64,-4:59:21.32|-107.5,6.09,2000 +Lib 18A|SAO 158946|HD 132345|SD-10 3999|PPM 229579|HR 5582|J145853.58-110838.4,f|D|K3,14:58:53.58|-106.70,-11:8:38.45|-61.5,5.86,2000 +Cen Kappa|V6873|SAO 225344|CD-41 9342|HR 5576|J145909.68-420615.0,f|D|B2,14:59:9.68|-17.81,-42:6:15.07|-21.3,3.13,2000 +HD 132238|CD-37 9836|PPM 293312|HR 5579|J145913.92-375252.4,f|S|B8,14:59:13.93|-18.35,-37:52:52.44|-21.3,6.47,2000 +HD 132525|BD+05 2954|HR 5584|J145923.11+043403.9,f|S|M2,14:59:23.12|1.20,4:34:3.94|-4.8,5.92,2000 +SAO 225351|HD 132242|CD-42 9871|J145927.19-430935.3,f|S|F5,14:59:27.19|-9.74,-43:9:35.40|-8.5,6.11,2000 +Boo 40|HD 132772|BD+39 2820|HR 5588|J145936.94+391555.2,f|S|F0,14:59:36.95|-31.59,39:15:55.20|41.9,5.64,2000 +SAO 257219|HD 131551|CP-74 1281|HR 5555|J145955.75-750157.6,f|D|B9,14:59:55.76|-5.58,-75:1:57.61|-20.3,6.19,2000 +SAO 257218|HD 131425|CP-76 931|HR 5547|J150011.30-770937.9,f|S|G8,15:0:11.30|-13.33,-77:9:37.98|-10.3,5.93,2000 +BX BOO|BD+47 2192|HR 5597|J150038.71+471638.7,f|D|B9,15:0:38.72|-8.24,47:16:38.79|15.5,6.36,2000 +HD 132879|BD+22 2772|HR 5592|J150052.27+220244.1,f|S|K0,15:0:52.28|-4.45,22:2:44.12|6.3,6.28,2000 +Lib Delta-19A|Delta Librae|HD 132742|SD-07 3938|Zuben El Hakribi|PPM 198139|HR 5586|J150058.34-083108.1,f|D|B9,15:0:58.35|-66.16,-8:31:8.20|-3.4,4.95,2000 +CD-37 9863|PPM 293355|HR 5585|J150113.09-380330.2,f|S|K2,15:1:13.10|30.47,-38:3:30.23|-34.4,5.87,2000 +V6889|HD 132833|SD-02 3928|PPM 179455|J150119.82-024517.7,f|V|M0,15:1:19.83|28.62,-2:45:17.73|-22.4,5.52,2000 +V6899|HD 133388|BD+60 1582|J150127.09+601216.0,f|V|A4,15:1:27.09|-13.04,60:12:16.03|11.9,5.92,2000 +V6890|HD 132933|BD+00 3297|PPM 179457|HR 5594|J150148.91-000825.0,f|D|M0,15:1:48.92|6.45,-0:8:25.06|-15,5.72,2000 +Oct Pi1|SAO 258713|CP-82 629|PPM 377769|HR 5525|J150150.79-831339.5,f|S|G8,15:1:50.80|18.64,-83:13:39.53|53.3,5.65,2000 +Nekkar|Meres|Boo Beta-42|V6898|BD+40 2840|PPM 54491|J150156.76+402326.0,f|V|G8,15:1:56.76|-40.21,40:23:26.04|-29.2,3.48,2000 +HD 132763|CD-3310244|PPM 293372|HR 5587|J150158.08-342131.9,f|S|A8,15:1:58.08|-28.11,-34:21:31.95|-23.9,6.22,2000 +Hya 60|HD 132851|CD-2710183|PPM 263694|HR 5591|J150206.43-280338.2,f|S|A4,15:2:6.43|84.19,-28:3:38.20|-34.1,5.83,2000 +Boo Omega-41|HD 133124|BD+25 2861|J150206.50+250029.2,f|S|K4,15:2:6.51|-5.85,25:0:29.30|-48.6,4.79,2000 +HD 132953|SD-07 3944|PPM 198156|J150208.57-073431.0,f|S|B5,15:2:8.57|-22.90,-7:34:31.08|-2.8,6.39,2000 +Vir 110|V20230|HD 133165|BD+02 2905|J150254.03+020528.6,f|V|K0,15:2:54.04|-55.91,2:5:28.69|12.9,4.40,2000 +HD 132955|CD-3210560|PPM 293387|HR 5595|J150259.27-323835.8,f|D|B3,15:2:59.28|-21.09,-32:38:35.86|-19.7,5.44,2000 +V6908|HD 133392|BD+35 2642|J150306.05+351220.8,f|V|G5,15:3:6.06|-39.96,35:12:20.86|9.3,5.52,2000 +Boo 44A|i BOO|BD+48 2259|HR 5618|J150347.30+473914.6,f|D|F9,15:3:47.30|-436.29,47:39:14.62|18.9,4.83,2000 +HD 133994|BD+66 887|PPM 19276|HR 5629|J150357.76+655510.9,f|S|A2,15:3:57.77|22.95,65:55:10.97|-9.2,6.21,2000 +Brachium|Cornu|Zuben al Akrab|Lib Sigma-20|ig Lib|SAO 183139|HD 133216|CD-2411834|PPM 263746|J150404.21-251655.0,f|S|M2,15:4:4.22|-71.89,-25:16:55.07|-44.7,3.28,2000 +Boo Psi-43|HD 133582|BD+27 2447|HR 5616|J150426.74+265651.5,f|S|K2,15:4:26.74|-176.37,26:56:51.54|-4.5,4.51,2000 +GM LUP|SAO 225422|CD-40 9243|J150442.89-405140.7,f|V|M6,15:4:42.90|-4.88,-40:51:40.79|-36.2,6.39,2000 +Oct Pi2|SAO 258714|HD 131246|CP-82 636|PPM 377777|HR 5545|J150446.92-830217.9,f|S|G8,15:4:46.92|-8.65,-83:2:17.92|-17.7,5.64,2000 +Cir Eta|CP-63 3493|PPM 361174|HR 5593|J150448.18-640152.8,f|S|G8,15:4:48.19|102.92,-64:1:52.86|9.5,5.17,2000 +Lup Pi|SAO 225426|HD 133242|CD-46 9773A|J150507.08-470304.4,f|D|B5,15:5:7.09|-23.40,-47:3:4.48|-21.1,3.91,2000 +Lup Pi|SAO 225426|HD 133243|CD-46 9773B|J150507.23-470303.8,f|D|B5,15:5:7.24|-22.28,-47:3:3.83|-15.9,4.82,2000 +SAO 225435|CD-40 9257|J150519.16-410402.0,f|D|G8,15:5:19.17|22.62,-41:4:2.05|-0.8,5.14,2000 +Boo 47|V6934|HD 133962|BD+48 2262|PPM 54524|HR 5627|J150525.83+480903.5,f|D|A1,15:5:25.83|-65.25,48:9:3.50|29.7,5.59,2000 +HD 133469|CD-3011949|PPM 293438|J150533.90-303303.1,f|S|F6,15:5:33.91|10.59,-30:33:3.11|83.9,6.48,2000 +SAO 225439|HD 133399|CD-48 9606|J150602.41-485300.2,f|S|B3,15:6:2.41|-2.27,-48:53:0.21|-9.6,6.48,2000 +CD-3510035|PPM 293448|HR 5615|J150613.93-361552.5,f|S|K5,15:6:13.93|-23.58,-36:15:52.56|-5.7,6.29,2000 +BD+55 1730|PPM 34827|HR 5635|J150616.71+543322.7,f|S|G8,15:6:16.72|47.06,54:33:22.75|12.8,5.25,2000 +V6931|SAO 183176|SD-21 4030|J150627.14-220154.5,f|V|K5,15:6:27.14|69.94,-22:1:54.59|-52.1,6.14,2000 +HZ LUP|HD 133652|CD-3011960|PPM 293455|HR 5619|J150633.19-305506.5,f|V|A0,15:6:33.20|-23.03,-30:55:6.54|-28.7,5.98,2000 +BD+37 2608|PPM 78349|J150635.14+362721.8,f|S|F8,15:6:35.14|-64.30,36:27:21.82|40.4,6.36,2000 +Lib Nu-21|HD 133774|SD-15 4026|HR 5622|J150637.59-161524.5,f|S|K5,15:6:37.60|-36.43,-16:15:24.54|-23.3,5.19,2000 +SD-15 4028|PPM 229767|J150649.06-162903.7,f|D|A0,15:6:49.06|-62.28,-16:29:3.70|-16.7,6.41,2000 +SAO 242229|HD 133518|CD-51 8745|PPM 343417|J150655.97-520147.2,f|S|B2,15:6:55.97|-2.86,-52:1:47.21|-12.3,6.41,2000 +Boo 45A|V6945|BD+25 2873|HR 5634|J150718.06+245209.1,f|D|F5,15:7:18.07|184.81,24:52:9.10|-163.5,4.93,2000 +BD+19 2924|PPM 131141|HR 5633|J150720.36+182630.5,f|D|A3,15:7:20.37|43.12,18:26:30.57|-50,6.04,2000 +SAO 225456|HD 133631|CD-48 9630|HR 5617|J150725.95-490519.0,f|S|G8,15:7:25.95|22.30,-49:5:19.00|9.5,5.77,2000 +V20248|BD+06 3001|PPM 161289|HR 5631|J150740.32+052952.9,f|V|G7,15:7:40.32|-0.75,5:29:52.93|-22,6.17,2000 +HD 133557|CP-60 5637|J150756.16-610743.2,f|S|F2,15:7:56.17|-2.17,-61:7:43.29|-10.2,6.48,2000 +V6932|HD 133456|CP-64 3095|HR 5611|J150756.76-651631.6,f|V|K3,15:7:56.76|9.03,-65:16:31.62|-4.5,6.17,2000 +HR LUP|SAO 225474|CD-40 9305|HR 5624|J150812.12-403502.1,f|V|B8,15:8:12.12|-28.59,-40:35:2.15|-30.4,5.77,2000 +HD 134493|BD+50 2146|PPM 34845|HR 5648|J150819.53+500317.8,f|S|K0,15:8:19.54|-3.95,50:3:17.84|-21.2,6.33,2000 +Boo 46|BD+26 2656|HR 5638|J150823.78+261804.1,f|S|K2,15:8:23.78|1.21,26:18:4.15|-12.4,5.67,2000 +HD 134335|BD+25 2876|J150835.56+250631.0,f|D|K1,15:8:35.56|-1.90,25:6:31.09|-0.7,5.81,2000 +SAO 225479|HD 133937|CD-4210050|HR 5625|J150839.19-425204.5,f|S|B7,15:8:39.20|-20.56,-42:52:4.52|-21.3,5.83,2000 +Lup Lambda|SAO 225483|HD 133955|CD-44 9889|HR 5626|J150850.61-451647.5,f|D|B3,15:8:50.62|-18.05,-45:16:47.50|-34.2,4.06,2000 +HD 134323|BD+13 2901|PPM 131176|HR 5639|J150853.51+131406.8,f|S|G5,15:8:53.51|-45.26,13:14:6.87|74.3,6.15,2000 +HD 133792|CP-63 3518|PPM 361224|HR 5623|J150925.52-633834.5,f|S|A0,15:9:25.52|-10.79,-63:38:34.55|-20.2,6.25,2000 +HD 133683|CP-66 2725|PPM 361226|HR 5621|J150929.91-670502.8,f|S|F6,15:9:29.91|-3.97,-67:5:2.88|-2.6,5.77,2000 +HD 134255|CD-3810020|PPM 293514|HR 5636|J151007.32-384733.0,f|S|G8,15:10:7.32|-24.55,-38:47:33.04|-20.9,5.98,2000 +SAO 183237|HD 134373|CD-2510758|HR 5641|J151018.63-261957.4,f|S|K0,15:10:18.63|-32.13,-26:19:57.44|-8.4,5.75,2000 +HD 135384|BD+68 823|PPM 19322|HR 5672|J151044.42+674651.7,f|S|A8,15:10:44.43|21.67,67:46:51.73|-13,6.19,2000 +CP-60 5656|PPM 361241|HR 5632|J151044.74-612520.3,f|S|G2,15:10:44.74|-184.98,-61:25:20.35|-11.3,6.30,2000 +Oct Omega|SAO 258717|HD 131596|CP-84 490|PPM 377795|HR 5557|J151108.81-844716.1,f|S|B9,15:11:8.81|3.22,-84:47:16.12|4,5.88,2000 +SAO 242287|CP-54 6367|HR 5637|J151115.98-552045.7,f|D|G2,15:11:15.98|-3.84,-55:20:45.72|-7.4,5.46,2000 +SAO 225517|HD 134444|CD-44 9922|HR 5642|J151134.80-451638.8,f|D|K1,15:11:34.80|-14.67,-45:16:38.85|14.9,6.42,2000 +Lup Kappa1|SAO 225525|HD 134481|CD-48 9704|HR 5646|J151156.07-484416.1,f|D|B9,15:11:56.08|-96.55,-48:44:16.15|-48,3.86,2000 +Lup Kappa2|SAO 225526|HD 134482|CD-48 9705|HR 5647|J151157.67-484437.2,f|D|A3,15:11:57.68|-98.32,-48:44:37.27|-45.4,5.64,2000 +FL SER|HD 134943|BD+19 2935|PPM 131212|HR 5654|J151204.26+185833.7,f|D|M4,15:12:4.26|-16.45,18:58:33.71|11.4,5.95,2000 +HD 134758|SD-18 3997|J151212.01-190623.3,f|S|K4,15:12:12.01|-40.82,-19:6:23.34|-23.8,6.50,2000 +Lib Iota-24A|V6981|HD 134759|SD-19 4047|PPM 229892|HR 5652|J151213.29-194730.1,f|D|A0,15:12:13.29|-35.57,-19:47:30.16|-32.6,4.56,2000 +Lup Zeta|CD-51 8830|HR 5649|J151217.09-520557.2,f|D|G8,15:12:17.09|-113.98,-52:5:57.29|-71,3.41,2000 +SAO 225533|HD 134597|CD-47 9779|J151231.20-481308.3,f|S|K2,15:12:31.20|-24.49,-48:13:8.37|-41,6.33,2000 +SAO 257247|HD 133981|CP-72 1714|PPM 372581|HR 5628|J151233.97-724614.1,f|S|B8,15:12:33.98|-14.44,-72:46:14.16|-15.7,6.02,2000 +V20269|SAO 225539|HD 134687|CD-44 9932|HR 5651|J151249.58-443001.4,f|V|B3,15:12:49.59|-20.54,-44:30:1.49|-22.2,4.82,2000 +V20267|HD 134468|CP-61 4856|PPM 361267|HR 5645|J151301.02-614437.6,f|V|K4,15:13:1.02|-4.83,-61:44:37.61|-6.5,6.31,2000 +HD 134837|CD-3510119|PPM 293585|HR 5653|J151307.66-360529.1,f|S|B8,15:13:7.66|-22.91,-36:5:29.13|-22.9,6.09,2000 +SAO 183269|HD 134946|CD-2312133|PPM 263954|HR 5655|J151317.41-240029.9,f|S|B9,15:13:17.41|-22.88,-24:0:29.96|-20,6.47,2000 +Lib Iota-25|HD 134967|SD-19 4055|HR 5656|J151319.18-193851.2,f|S|A3,15:13:19.19|-48.03,-19:38:51.26|-48.6,6.08,2000 +Lib 23|SAO 183275|HD 134987|CD-2411928|PPM 263962|HR 5657|J151328.66-251833.6,f|S|G4,15:13:28.67|-399.08,-25:18:33.65|-75.1,6.47,2000 +HD 135263|BD+23 2789|HR 5665|J151331.87+225900.2,f|S|A2,15:13:31.87|49.58,22:59:0.23|100,6.31,2000 +BD+38 2629|PPM 78433|HR 5673|J151335.58+381552.9,f|S|K5,15:13:35.58|-6.95,38:15:52.92|-47.7,6.19,2000 +SAO 183285|CD-2510801|PPM 263974|HR 5658|J151353.31-261136.8,f|D|G5,15:13:53.31|-14.00,-26:11:36.85|-4.2,5.86,2000 +HD 134657|CP-60 5680|PPM 361278|J151359.18-612034.7,f|D|B5,15:13:59.18|-7.12,-61:20:34.72|-20.8,6.42,2000 +HD 135438|BD+32 2561|PPM 78436|HR 5674|J151406.04+314716.2,f|D|K5,15:14:6.04|42.20,31:47:16.24|-30.2,5.98,2000 +V20281|BD+42 2577|PPM 54618|HR 5677|J151410.31+421017.0,f|V|M2,15:14:10.31|23.79,42:10:17.07|-16.1,6.14,2000 +X TRA|HD 134453|CP-69 2267|PPM 372592|HR 5644|J151419.17-700446.1,f|V|C5,15:14:19.18|4.40,-70:4:46.11|-8.2,5.62,2000 +Boo Chi-48|BD+29 2640|HR 5676|J151429.15+290951.4,f|S|A2,15:14:29.16|-69.95,29:9:51.46|28.3,5.28,2000 +Lib 26|SAO 159122|SD-17 4285|PPM 229954|HR 5662|J151433.75-174606.8,f|S|B9,15:14:33.76|-14.57,-17:46:6.86|-15.9,6.19,2000 +Lup 1|HD 135153|CD-3111813|PPM 293614|J151437.31-313108.8,f|S|F1,15:14:37.32|-9.72,-31:31:8.84|1.8,4.92,2000 +BD+67 876|HR 5691|J151438.33+672048.2,f|S|F9,15:14:38.34|221.50,67:20:48.20|-392.3,5.15,2000 +HD 135367|SD-04 3840|PPM 198387|HR 5669|J151450.59-053009.1,f|S|K2,15:14:50.60|-28.07,-5:30:9.20|7,6.27,2000 +Ser 3|HD 135482|BD+05 2985|HR 5675|J151511.35+045621.7,f|S|K0,15:15:11.35|-23.01,4:56:21.71|3.9,5.34,2000 +Boo Delta-49A|V7002|HD 135722|BD+33 2561|PPM 78453|HR 5681|J151530.16+331853.4,f|D|G8,15:15:30.16|84.86,33:18:53.40|-110.6,3.47,2000 +Ser 4|HD 135559|BD+00 3327|PPM 161399|HR 5679|J151549.07+002219.6,f|S|A4,15:15:49.08|-107.25,0:22:19.70|12.8,5.63,2000 +HD 135944|BD+51 1990|PPM 34898|J151550.70+505618.4,f|D|G5,15:15:50.71|24.48,50:56:18.44|-45.9,6.48,2000 +HD 135615|BD+07 2926|J151553.56+062753.4,f|S|K0,15:15:53.57|-9.69,6:27:53.42|-19.2,6.47,2000 +HD 135235|CD-47 9824|HR 5663|J151553.66-480425.1,f|D|A3,15:15:53.67|5.11,-48:4:25.18|-8.4,5.97,2000 +HD 135345|CD-41 9682|HR 5667|J151604.02-412928.1,f|S|G5,15:16:4.02|-9.44,-41:29:28.20|-3.6,5.17,2000 +V20284|HD 135348|CD-43 9749|HR 5668|J151610.46-432905.9,f|V|B3,15:16:10.46|-7.84,-43:29:5.99|-7.8,6.05,2000 +SAO 183328|HD 135534|SD-21 4065|HR 5678|J151623.01-222357.8,f|S|K5,15:16:23.01|-33.84,-22:23:57.90|1.8,5.51,2000 +V20282|CP-60 5698|HR 5661|J151636.69-605414.3,f|D|B0,15:16:36.69|-1.53,-60:54:14.39|-4.1,5.76,2000 +SAO 225613|CD-47 9839|J151651.78-475152.3,f|S|G8,15:16:51.79|-63.00,-47:51:52.36|-19.5,6.46,2000 +SAO 225614|HD 135468|CD-45 9791|J151654.96-461208.4,f|S|F6,15:16:54.97|-132.78,-46:12:8.48|-26,6.44,2000 +Cir Delta|Delta Circini|CP-60 5701|PPM 361313|HR 5664|J151656.89-605726.1,f|D|O8,15:16:56.90|-2.04,-60:57:26.12|-4.1,5.08,2000 +Lib Beta-27|V7009|HD 135742|SD-08 3935|Zubenesch|Zuben El Chamali|Kiffa Borealis|PPM 198424|HR 5685|J151700.41-092258.5,f|V|B8,15:17:0.41|-96.34,-9:22:58.50|-20.8,2.61,2000 +UMi 11|HD 136726|BD+72 678|Pherkad Minor|HR 5714|J151705.88+714926.0,f|S|K4,15:17:5.89|3.74,71:49:26.04|9.4,5.01,2000 +Cir Beta|SAO 242384|HD 135379|CP-58 5875|J151730.84-584804.3,f|S|A3,15:17:30.85|-98.37,-58:48:4.35|-135.5,4.07,2000 +Cir Epsilon|HD 135291|CP-63 3544|HR 5666|J151738.89-633637.6,f|S|K2,15:17:38.89|2.13,-63:36:37.68|8.7,4.85,2000 +Lup 2|V7012|SAO 183346|HD 135758|CD-2911630|PPM 293678|HR 5686|J151749.83-300855.2,f|V|K0,15:17:49.84|-8.69,-30:8:55.22|-4.5,4.34,2000 +SAO 225631|CD-40 9481|HR 5682|J151809.41-410340.1,f|S|A5,15:18:9.42|41.40,-41:3:40.17|-10.5,6.29,2000 +V20292|HD 136138|BD+21 2755|HR 5692|J151824.50+203422.0,f|V|G8,15:18:24.50|-14.61,20:34:22.00|-13.1,5.69,2000 +BD+00 3337|PPM 179534|J151826.12-002740.4,f|S|K5,15:18:26.13|-11.55,-0:27:40.44|1.3,5.87,2000 +Lup Mu|SAO 225638|HD 135734|CD-47 9860|HR 5683|J151831.94-475230.3,f|D|B8,15:18:31.94|-27.67,-47:52:30.37|-45.7,4.28,2000 +HD 135896|CD-3012117|PPM 293691|HR 5688|J151841.30-311233.6,f|D|G6,15:18:41.30|-8.08,-31:12:33.65|-6.5,6.20,2000 +HD 135591|CP-60 5720|PPM 361337|J151849.14-602946.8,f|D|O7,15:18:49.14|-3.18,-60:29:46.80|-4.6,5.44,2000 +TrA Gamma|V7008|HD 135382|CP-68 2383|PPM 361338|HR 5671|J151854.58-684046.3,f|V|A1,15:18:54.58|-66.48,-68:40:46.36|-32,2.88,2000 +GG LUP|SAO 225647|HD 135876|CD-40 9496|HR 5687|J151856.37-404717.5,f|V|B7,15:18:56.37|-19.42,-40:47:17.60|-21.8,5.60,2000 +Ser 5A|MQ SER|BD+02 2944|PPM 161455|HR 5694|J151918.79+014555.4,f|D|F8,15:19:18.80|373.17,1:45:55.47|-513.6,5.05,2000 +BD+33 2574|J151930.04+323053.6,f|S|A2,15:19:30.05|-38.07,32:30:53.65|6.6,6.32,2000 +CD-3610062|PPM 293711|HR 5689|J151931.71-370549.7,f|S|G6,15:19:31.72|-78.60,-37:5:49.78|-145.4,6.18,2000 +V20299|HD 136729|BD+52 1869|HR 5715|J152005.15+515730.6,f|V|A4,15:20:5.15|10.91,51:57:30.65|11.3,5.65,2000 +CrB Omicron-1|V7032|HD 136512|BD+30 2647|J152008.55+293658.3,f|D|K0,15:20:8.56|-118.80,29:36:58.35|-42,5.51,2000 +V20291|SAO 253115|HD 135737|CP-67 2836|PPM 361364|HR 5684|J152040.54-672853.4,f|D|B3,15:20:40.55|-6.32,-67:28:53.49|-10.2,6.33,2000 +HD 136751|BD+44 2453|PPM 54681|HR 5716|J152041.68+442603.7,f|S|F3,15:20:41.68|41.99,44:26:3.75|-103.6,6.15,2000 +Pherkad|Pherkad Major|UMi Gamma-13|Gamma Ursae Minoris|HD 137422|BD+72 679|PPM 8887|HR 5735|J152043.71+715002.4,f|S|A3,15:20:43.72|-18.05,71:50:2.46|17.7,3.03,2000 +HD 136442|BD-01 3047|PPM 179546|J152047.02-022447.9,f|S|K0,15:20:47.02|-262.42,-2:24:47.99|-170.2,6.34,2000 +Lib 28|SAO 159187|HD 136366|SD-17 4312|J152053.67-180931.1,f|S|G8,15:20:53.68|-6.98,-18:9:31.17|-59.7,6.17,2000 +Lib Omicron-29|SAO 159191|SD-15 4083|J152101.37-153254.0,f|D|F0,15:21:1.38|27.17,-15:32:54.03|18.2,6.15,2000 +Ser 6A|V7037|HD 136514|BD+01 3067|PPM 161474|J152101.99+004255.2,f|D|K3,15:21:2.00|-42.45,0:42:55.21|-104.1,5.38,2000 +HD 136643|BD+25 2902|HR 5711|J152106.87+245728.8,f|S|K0,15:21:6.88|-26.52,24:57:28.87|-18.9,6.35,2000 +HD 136479|SD-05 4057|PPM 198488|J152107.61-054929.4,f|D|K1,15:21:7.61|-51.93,-5:49:29.47|-10.9,5.54,2000 +Lup Delta|Delta Lupi|SAO 225691|HD 136298|CD-40 9538|HR 5695|J152122.32-403851.0,f|S|B1,15:21:22.32|-19.12,-40:38:51.06|-24.1,3.22,2000 +SAO 225695|HD 136334|CD-40 9539|HR 5696|J152135.30-404458.1,f|S|A1,15:21:35.30|-16.25,-40:44:58.13|-26.9,6.20,2000 +Lup Nu2|SAO 225697|HD 136352|CD-47 9919|HR 5699|J152148.14-481903.4,f|S|G3,15:21:48.15|-1622.83,-48:19:3.46|-275,5.66,2000 +Lup Phi1|V20301|HD 136422|CD-3510236|J152148.37-361540.9,f|D|K4,15:21:48.37|-91.80,-36:15:40.95|-86,3.56,2000 +Boo 50|HD 136849|BD+33 2581|PPM 78532|HR 5718|J152148.57+325601.3,f|S|B9,15:21:48.58|-48.85,32:56:1.30|13.9,5.38,2000 +Lup Nu1|HD 136351|CD-47 9922|HR 5698|J152208.27-475540.0,f|S|F8,15:22:8.27|-141.42,-47:55:40.05|-132.6,4.99,2000 +Ser 7|HD 136831|BD+13 2928|PPM 131339|HR 5717|J152223.23+123403.0,f|S|A0,15:22:23.24|0.15,12:34:3.07|-4.5,6.29,2000 +HD 137389|BD+62 1410|PPM 19421|HR 5731|J152237.25+620249.4,f|S|A0,15:22:37.26|9.28,62:2:49.47|-38.5,5.99,2000 +V20306|BD+40 2877|PPM 78543|HR 5726|J152237.37+393453.2,f|V|K5,15:22:37.37|2.20,39:34:53.27|-13.8,5.54,2000 +HD 137443|BD+63 1192|PPM 19422|HR 5737|J152238.41+632029.1,f|S|K5,15:22:38.42|-15.14,63:20:29.18|-92.4,5.72,2000 +Lup Epsilon|V20302|SAO 225712|CD-4410066|J152240.86-444122.5,f|D|B2,15:22:40.87|-23.78,-44:41:22.59|-20.3,3.38,2000 +V7043|SAO 159212|SD-14 4188|J152301.78-150802.5,f|V|M0,15:23:1.78|0.29,-15:8:2.53|16.3,6.46,2000 +Lup Phi2|HD 136664|CD-3610103|PPM 293783|HR 5712|J152309.35-365130.5,f|S|B4,15:23:9.35|-18.00,-36:51:30.56|-21.5,4.53,2000 +SAO 253136|HD 136359|CP-60 5760|PPM 361391|J152310.50-603925.8,f|S|F7,15:23:10.50|-81.96,-60:39:25.83|-27.7,5.65,2000 +CrB Eta-2A|V7054|BD+30 2653A|HR 5727|J152312.31+301716.1,f|D|G0,15:23:12.31|125.77,30:17:16.12|-176.5,5.00,2000 +CrB Eta-2B|V7054|BD+30 2653B|HR 5728|J152312.38+301716.7,f|D|G3,15:23:12.38|169.94,30:17:16.77|-204.6,5.00,2000 +Cir Gamma|Gamma Circini|SAO 242463|HD 136415|CP-58 5908A|PPM 343673|J152322.64-591914.8,f|D|B5,15:23:22.65|-10.26,-59:19:14.83|-36.6,4.51,2000 +Gamma Circini|SAO 242463|HD 136416|CP-58 5908B|PPM 343673|J152322.66-591913.9,f|D|F7,15:23:22.67|-22.12,-59:19:13.99|-31,4.51,2000 +SAO 225721|CD-45 9880|J152324.98-460825.4,f|S|G8,15:23:24.98|-28.17,-46:8:25.50|-9.2,6.50,2000 +Ser 8|BD-00 2961|PPM 179561|HR 5721|J152343.71-010120.5,f|S|F0,15:23:43.71|76.79,-1:1:20.58|-28.2,6.11,2000 +SAO 159227|HD 136956|SD-11 3940|J152352.23-122210.2,f|S|G5,15:23:52.24|-37.66,-12:22:10.21|-36.5,5.72,2000 +BD+45 2284|PPM 54711|HR 5732|J152405.11+451615.7,f|S|K2,15:24:5.12|-14.57,45:16:15.71|2.3,6.06,2000 +Lib Epsilon-31|SAO 159234|SD-09 4138|HR 5723|J152411.88-101920.1,f|S|F5,15:24:11.89|-68.47,-10:19:20.16|-152.7,4.92,2000 +Boo Mu1-51A|V7063|HD 137391|BD+37 2636|Alkalaurops|Icalurus|Clava|Venabulum|PPM 78563|HR 5733|J152429.42+372237.8,f|D|F2,15:24:29.43|-147.69,37:22:37.80|84.7,4.30,2000 +Lup Upsilon|HD 136933|CD-39 9827|PPM 293811|HR 5719|J152445.00-394236.9,f|D|A0,15:24:45.01|-25.27,-39:42:36.97|-56.4,5.38,2000 +Edasich|Ed Asich|Al Dhiba|Dra Iota-12|V7077|HD 137759|BD+59 1654|PPM 34972|HR 5744|J152455.77+585757.8,f|D|K2,15:24:55.77|-8.27,58:57:57.84|17.3,3.30,2000 +CD-3810289|PPM 293825|HR 5724|J152520.21-384401.0,f|D|A0,15:25:20.22|-46.10,-38:44:1.03|-13.4,4.61,2000 +Ser Tau-9|V7074|HD 137471|BD+15 2858|PPM 131392|HR 5739|J152547.39+152540.9,f|V|M1,15:25:47.40|-14.03,15:25:40.93|-7.5,5.15,2000 +V20309|BD+19 2966|PPM 131395|J152553.27+192850.5,f|V|G0,15:25:53.27|-53.03,19:28:50.55|-7.2,6.25,2000 +V7058|SAO 253155|HD 136672|CP-67 2864|PPM 361437|HR 5713|J152614.72-681833.0,f|D|G8,15:26:14.72|123.08,-68:18:33.00|9.3,5.89,2000 +BD+34 2645|PPM 78581|HR 5741|J152617.38+342009.5,f|S|K4,15:26:17.38|-114.45,34:20:9.59|60.3,5.45,2000 +HD 137928|BD+54 1747|PPM 34983|HR 5748|J152632.19+540113.0,f|S|A2,15:26:32.19|17.89,54:1:13.06|-13.7,6.44,2000 +HD 137432|CD-3610161|PPM 293873|HR 5736|J152718.12-364603.2,f|D|B4,15:27:18.13|-21.27,-36:46:3.22|-24,5.45,2000 +LX TRA|SAO 253174|CP-64 3178|PPM 361455|HR 5725|J152733.08-643153.4,f|V|K5,15:27:33.08|-12.90,-64:31:53.41|-19.3,5.72,2000 +V20317|HD 137853|BD+25 2916|HR 5745|J152738.87+250605.8,f|V|M5,15:27:38.87|5.71,25:6:5.85|-12.7,6.01,2000 +Nusakan|CrB Beta-3|Beta Coronae Borealis|BD+29 2670|HR 5747|J152749.73+290620.5,f|D|F0,15:27:49.73|-181.39,29:6:20.53|86.8,3.66,2000 +V20322|HD 138265|BD+61 1509|PPM 19452|HR 5755|J152751.42+604012.7,f|V|K5,15:27:51.42|-16.90,60:40:12.78|-3.1,5.90,2000 +Lib Zeta-32|HD 137744|SD-16 4089|HR 5743|J152815.40-164259.3,f|S|K4,15:28:15.41|16.66,-16:42:59.34|-33.4,5.64,2000 +BP OCT|HD 129723|CP-87 235|PPM 377837|HR 5491|J152819.09-880758.8,f|V|A2,15:28:19.09|-88.79,-88:7:58.84|-80.6,6.49,2000 +SAO 242569|HD 137465|CD-51 9132|PPM 343776|HR 5738|J152827.21-513552.5,f|D|G2,15:28:27.21|-2.52,-51:35:52.56|-4.9,6.10,2000 +Ser 10|HD 137898|BD+02 2965|HR 5746|J152838.23+015031.4,f|S|A8,15:28:38.24|-84.56,1:50:31.49|-33.5,5.16,2000 +HD 138213|BD+47 2227|PPM 54762|HR 5752|J152844.39+471205.4,f|S|Am,15:28:44.39|-21.50,47:12:5.45|5,6.15,2000 +HD 138338|BD+55 1756|PPM 34998|HR 5759|J152856.82+551141.7,f|S|A3,15:28:56.82|-7.71,55:11:41.77|36.3,6.43,2000 +BD+16 2789|PPM 131445|J152912.11+162344.2,f|S|K0,15:29:12.12|-32.81,16:23:44.23|61,6.38,2000 +KQ LUP|HD 137785|CD-3810371|PPM 293914|J152919.27-383805.9,f|V|F2,15:29:19.27|-32.34,-38:38:6.00|-70.8,6.44,2000 +HD 138524|BD+62 1416|PPM 19461|HR 5768|J152921.09+620558.3,f|S|K4,15:29:21.09|-28.43,62:5:58.31|-8.9,6.31,2000 +V20321|SAO 225825|CD-4610100|HR 5742|J152924.26-464357.7,f|V|K4,15:29:24.27|-8.33,-46:43:57.73|-5.6,5.24,2000 +SAO 225846|HD 137919|CD-41 9965A|J153021.28-415508.4,f|D|B9,15:30:21.29|-21.43,-41:55:8.50|-26.2,6.37,2000 +HD 138341|BD+31 2742|PPM 78626|J153022.76+311709.3,f|S|A4,15:30:22.77|-17.95,31:17:9.35|-18.3,6.46,2000 +V7114|SAO 183533|SD-20 4246|PPM 264334|HR 5749|J153036.25-204342.7,f|V|A5,15:30:36.25|8.56,-20:43:42.79|-29.2,6.20,2000 +Lib Zeta-34|HD 138137|SD-16 4099|J153040.40-163634.0,f|S|G5,15:30:40.40|24.00,-16:36:34.07|-2.6,5.81,2000 +SAO 257284|HD 137366|CP-71 1852|PPM 372697|J153049.18-713914.8,f|S|B3,15:30:49.18|-6.99,-71:39:14.89|-21.8,6.39,2000 +Boo Nu1-52|V20324|HD 138481|BD+41 2609|HR 5763|J153055.75+404958.9,f|V|K4,15:30:55.76|11.01,40:49:58.97|-8.8,5.03,2000 +HD 138852|BD+64 1074|PPM 19473|HR 5785|J153055.76+641231.2,f|S|K0,15:30:55.76|-111.93,64:12:31.30|77.5,5.74,2000 +HD 138525|BD+37 2653|PPM 78642|HR 5769|J153122.30+363659.7,f|S|F6,15:31:22.31|-3.85,36:36:59.76|-25.5,6.39,2000 +UMi Theta-15|V20342|HD 139669|BD+77 592|PPM 8938|HR 5826|J153124.92+772057.6,f|V|K5,15:31:24.93|-46.88,77:20:57.67|5.3,4.99,2000 +Aps Kappa1|Kappa1 Apodis|SAO 257289|HD 137387|CP-72 1802|J153130.82-732322.5,f|D|B3,15:31:30.82|0.39,-73:23:22.53|-18.3,5.40,2000 +SAO 159317|HD 138268|SD-19 4128A|PPM 264349|HR 5756|J153143.40-200953.7,f|D|A8,15:31:43.41|-70.68,-20:9:53.72|-31.3,6.28,2000 +Boo Nu2-53|V20328|HD 138629|BD+41 2611|PPM 54799|HR 5774|J153146.98+405357.5,f|D|A5,15:31:46.98|-13.72,40:53:57.60|-14.9,5.00,2000 +HD 138221|CD-3210868|PPM 293961|HR 5753|J153150.22-325252.0,f|S|B7,15:31:50.23|-18.90,-32:52:52.00|-21.2,6.49,2000 +CD-3810425|PPM 293965|HR 5751|J153204.18-383721.1,f|S|A7,15:32:4.19|-51.10,-38:37:21.16|-70.5,6.23,2000 +Ser Tau-12|HD 138527|BD+16 2797|PPM 131484|J153209.67+160322.2,f|S|B9,15:32:9.68|-2.88,16:3:22.21|6.8,6.22,2000 +HD 138413|SD-19 4135|HR 5762|J153236.70-194013.6,f|S|A2,15:32:36.70|-18.93,-19:40:13.65|-39.5,5.50,2000 +Lib Zeta-35|V7126|SAO 159335|HD 138485|SD-16 4110|HR 5764|J153255.22-165110.2,f|V|B2,15:32:55.22|-10.62,-16:51:10.24|-15.3,5.50,2000 +CrB Theta-4A|Theta Coronae Borealis|HD 138749|BD+31 2750|PPM 78669|HR 5778|J153255.78+312132.8,f|D|B6,15:32:55.78|-19.60,31:21:32.88|-8.9,4.16,2000 +Ser 11|HD 138562|BD-00 2982|PPM 179591|HR 5772|J153257.93-011111.0,f|S|K0,15:32:57.94|-17.25,-1:11:11.04|-41.2,5.51,2000 +SAO 225898|HD 138395|CD-40 9731|J153324.32-402927.0,f|S|K0,15:33:24.32|40.15,-40:29:27.07|-62.9,6.40,2000 +BD+17 2880|HR 5783|J153352.70+170814.4,f|S|F3,15:33:52.71|-49.17,17:8:14.49|-48.7,6.50,2000 +V20331|CD-39 9970|HR 5767|J153401.70-400359.1,f|V|M2,15:34:1.71|-39.15,-40:3:59.16|-34.5,5.84,2000 +Lib 37|HD 138716|SD-09 4171|HR 5777|J153410.70-100352.3,f|S|K1,15:34:10.70|305.57,-10:3:52.30|-234.1,4.61,2000 +HD 138564|CD-3810464|HR 5773|J153420.85-392057.1,f|S|B9,15:34:20.85|-28.19,-39:20:57.16|-37.5,6.36,2000 +IU LIB|HD 138764|SD-08 4010|PPM 198725|J153426.51-091100.2,f|V|B6,15:34:26.51|-31.98,-9:11:0.30|-27.3,5.16,2000 +Lib 36|HD 138688|CD-2710443|HR 5775|J153437.32-280249.1,f|S|K4,15:34:37.32|16.68,-28:2:49.14|-31.2,5.13,2000 +Alphecca|Gnosia Stella Coronae|The Jewel|Ashtarot|CrB Alpha-5|Alpha Coronae Borealis|BD+27 2512|HR 5793|J153441.26+264252.8,f|S|A0,15:34:41.27|120.32,26:42:52.90|-89.4,2.22,2000 +Ser Delta-13A|Delta Serpentis|HD 138918|BD+11 2821A|PPM 131518|HR 5789|J153448.14+103219.9,f|D|F0,15:34:48.15|-72.70,10:32:19.92|3.2,4.12,2000 +Ser Delta-13B|HD 138917|BD+11 2821B|HR 5788|J153448.17+103215.9,f|D|F0,15:34:48.17|-72.70,10:32:15.93|3.2,5.13,2000 +Lup Gamma|Gamma Lupi|SAO 225938|CD-40 9760|HR 5776|J153508.44-411000.3,f|D|B2,15:35:8.45|-16.03,-41:10:0.33|-25.5,2.78,2000 +CrB Mu-6|V20348|HD 139153|BD+39 2889|PPM 78691|J153514.91+390036.2,f|V|M1,15:35:14.92|24.59,39:0:36.24|8.6,5.14,2000 +HD 139357|BD+54 1756|HR 5811|J153516.19+535519.7,f|S|K5,15:35:16.20|-17.93,53:55:19.72|2.1,5.97,2000 +Lib Gamma-38A|SD-14 4237|Zuben El Hakrabi|HR 5787|J153531.57-144722.3,f|D|G8,15:35:31.58|65.70,-14:47:22.33|6.9,3.92,2000 +Ser Tau-15|BD+18 3044|PPM 131527|HR 5795|J153533.23+173919.9,f|S|G5,15:35:33.23|-77.04,17:39:20.00|-13.3,6.10,2000 +HD 139284|BD+38 2678|J153549.19+382226.1,f|S|K2,15:35:49.19|10.11,38:22:26.14|-8.3,6.29,2000 +KT LUP|HD 138769|CD-4410239|HR 5781|J153553.24-445730.2,f|D|B3,15:35:53.25|-20.38,-44:57:30.20|-21.5,4.55,2000 +BD+11 2826|PPM 131532|HR 5796|J153553.36+111556.3,f|S|K5,15:35:53.37|-32.95,11:15:56.36|-11.8,6.05,2000 +V7163|HD 139493|BD+55 1766|HR 5818|J153557.03+543750.0,f|V|A2,15:35:57.04|-38.20,54:37:50.04|-0.6,5.77,2000 +V7149|HD 138923|CD-3210930|J153611.36-330534.1,f|D|B8,15:36:11.36|-20.36,-33:5:34.10|-24.5,6.26,2000 +V20341|SAO 225957|HD 138816|CD-4310036|HR 5784|J153612.09-442348.5,f|V|K4,15:36:12.10|-45.01,-44:23:48.56|-55.2,5.44,2000 +Ser Tau-18|HD 139225|BD+16 2807|PPM 131544|J153629.23+160708.7,f|S|F3,15:36:29.24|71.62,16:7:8.71|-5.5,5.94,2000 +Ser 16|V20352|HD 139195|BD+10 2884|PPM 131545|J153629.57+100036.6,f|V|K0,15:36:29.58|46.68,10:0:36.63|-114.7,5.26,2000 +TrA Epsilon|SAO 253226|HD 138538|CP-65 3102|PPM 361547|HR 5771|J153643.22-661901.3,f|D|K1,15:36:43.22|24.52,-66:19:1.33|-54.7,4.11,2000 +HD 139389|BD+30 2682|HR 5813|J153653.42+295928.2,f|S|F5,15:36:53.43|88.60,29:59:28.26|-57.4,6.46,2000 +Lib Upsilon-39|SAO 183619|CD-2710464|PPM 264451|HR 5794|J153701.44-280806.2,f|D|K3,15:37:1.45|-13.23,-28:8:6.29|-3.5,3.60,2000 +SAO 183631|CD-2511000|PPM 264463|J153728.49-261647.5,f|S|B7,15:37:28.50|-11.16,-26:16:47.51|-23.1,6.20,2000 +HD 139778|BD+54 1758|HR 5828|J153732.00+543031.4,f|S|K5,15:37:32.01|-35.18,54:30:31.44|-20.5,5.85,2000 +BD+69 806|PPM 19522|HR 5844|J153739.12+691700.0,f|S|K5,15:37:39.13|-49.14,69:17:0.04|52.1,5.64,2000 +SAO 183637|HD 139254|CD-2211100|PPM 264469|J153748.03-230830.1,f|S|K0,15:37:48.04|-31.72,-23:8:30.11|-75.2,5.79,2000 +Boo Phi-54|HD 139641|BD+40 2907|PPM 54863|HR 5823|J153749.59+402112.3,f|S|G7,15:37:49.60|60.47,40:21:12.36|59.6,5.26,2000 +Lup Omega|HD 139127|CD-4210601|HR 5797|J153803.20-423402.4,f|D|K4,15:38:3.21|-147.59,-42:34:2.45|56.4,4.34,2000 +SAO 183641|CD-2710478|PPM 264479|J153815.80-281223.9,f|S|K1,15:38:15.81|14.80,-28:12:24.00|-23.4,6.33,2000 +HD 139798|BD+47 2253|PPM 54871|J153816.22+464751.9,f|S|F2,15:38:16.23|97.14,46:47:51.91|-100.4,5.76,2000 +SAO 183646|HD 139329|SD-20 4285|J153816.28-210058.7,f|S|G5,15:38:16.28|63.85,-21:0:58.78|-71.4,5.82,2000 +BD+50 2206|HR 5835|J153834.19+502523.8,f|S|G8,15:38:34.20|-4.68,50:25:23.82|-28.2,5.84,2000 +Lib Tau-40|SAO 183649|HD 139365|CD-2911837|PPM 264487|HR 5812|J153839.36-294639.9,f|S|B2,15:38:39.37|-22.13,-29:46:39.91|-26.5,3.66,2000 +HD 139461|SD-08 4032|PPM 198815|HR 5816|J153840.08-084729.3,f|D|F6,15:38:40.08|16.75,-8:47:29.36|-27.3,6.48,2000 +HD 139271|CD-3810536|J153842.17-390739.8,f|D|A3,15:38:42.18|15.36,-39:7:39.84|5.2,6.06,2000 +HD 139761|BD+35 2711|PPM 78732|HR 5827|J153848.85+344030.1,f|S|K0,15:38:48.85|-6.54,34:40:30.14|-16.2,6.13,2000 +SAO 242793|HD 139129|CD-51 9324|HR 5798|J153849.47-522221.7,f|D|A0,15:38:49.47|-34.16,-52:22:21.70|-30.9,5.43,2000 +Lib 41|V7169|SAO 159411|HD 139446|SD-18 4118|HR 5814|J153854.55-191806.8,f|V|G8,15:38:54.56|84.23,-19:18:6.80|-75.2,5.36,2000 +V7192|BD+58 1583|HR 5841|J153909.51+575527.9,f|V|K1,15:39:9.52|-5.81,57:55:27.93|3.9,6.44,2000 +HD 138289|CP-77 1134|PPM 372752|HR 5757|J153918.39-775504.8,f|S|K2,15:39:18.40|-79.59,-77:55:4.81|-130.3,6.19,2000 +SAO 183665|HD 139518|CD-2211115|HR 5819|J153921.37-230900.8,f|S|A0,15:39:21.37|-29.65,-23:9:0.81|-21.8,6.34,2000 +CrB Zeta-7B|HD 139891|BD+37 2665B|HR 5833|J153922.24+363812.5,f|D|B9,15:39:22.24|-15.29,36:38:12.56|-6.5,5.93,2000 +CrB Zeta-7A|HD 139892|BD+37 2665A|HR 5834|J153922.67+363808.9,f|D|B7,15:39:22.67|-15.29,36:38:8.92|-6.5,5.00,2000 +Lup Psi-3|HD 139521|CD-3310631|J153945.97-342442.9,f|S|G8,15:39:45.98|5.69,-34:24:42.93|-13.7,4.66,2000 +HD 139211|CP-59 6206|J153956.54-595430.0,f|S|F6,15:39:56.54|-121.91,-59:54:30.02|-215.2,5.94,2000 +HD 139862|BD+12 2875|PPM 131592|HR 5831|J154010.34+120310.5,f|D|G7,15:40:10.35|-16.72,12:3:10.56|-8.2,6.23,2000 +HD 138965|CP-69 2422|PPM 372754|HR 5792|J154011.55-701340.3,f|S|A1,15:40:11.55|-41.41,-70:13:40.38|-55.1,6.42,2000 +HD 139613|CD-3012431|PPM 294116|HR 5822|J154015.52-311249.5,f|S|K2,15:40:15.53|-49.77,-31:12:49.58|-31.6,6.33,2000 +Lib 42|V20363|SAO 183686|HD 139663|CD-2312458|PPM 264535|HR 5824|J154016.89-234905.0,f|V|K3,15:40:16.90|-15.64,-23:49:5.08|-8.2,4.95,2000 +Aps Kappa2|CP-73 1625|PPM 372756|HR 5782|J154021.33-732648.0,f|D|B7,15:40:21.33|-12.78,-73:26:48.07|-20.7,5.65,2000 +HD 139599|CD-4710210|HR 5821|J154058.22-474409.9,f|D|K5,15:40:58.23|-36.22,-47:44:9.93|-42.7,6.23,2000 +Ser Tau-19|BD+16 2816|J154059.10+160128.5,f|S|G8,15:40:59.10|22.20,16:1:28.52|-16.8,5.99,2000 +HD 139664|CD-4410310|HR 5825|J154111.37-443940.3,f|S|F5,15:41:11.38|-168.68,-44:39:40.34|-265.7,4.65,2000 +Ser Iota-21A|BD+20 3138|HR 5842|J154133.04+194013.4,f|D|A1,15:41:33.05|-57.91,19:40:13.45|-38.6,4.51,2000 +Ser Chi-20|Chi Serpentis|BD+13 2982|PPM 131611|HR 5843|J154147.41+125051.0,f|S|A0,15:41:47.42|39.63,12:50:51.10|-4.6,5.33,2000 +HD 138867|CP-75 1222|PPM 372767|HR 5786|J154154.68-760455.0,f|S|B9,15:41:54.68|-8.19,-76:4:55.05|-39,5.95,2000 +Ser Tau-22|BD+18 3059|PPM 131613|HR 5845|J154154.71+182750.5,f|S|A2,15:41:54.71|-72.99,18:27:50.53|56.9,5.80,2000 +Lib Kappa-43|V7200|SAO 159442|HD 139997|SD-19 4188|HR 5838|J154156.79-194043.7,f|D|M0,15:41:56.80|-33.19,-19:40:43.78|-104.3,4.75,2000 +SAO 253259|HD 139471|CP-63 3643|PPM 361595|J154201.76-641049.0,f|S|K2,15:42:1.77|-2.09,-64:10:49.04|-4,6.48,2000 +HD 139871|CD-49 9909|HR 5832|J154237.22-492922.3,f|S|K2,15:42:37.23|-4.19,-49:29:22.39|-22.6,6.02,2000 +CD-3710441|PPM 294162|HR 5837|J154238.31-372529.7,f|S|G8,15:42:38.32|-50.39,-37:25:29.77|-16.1,5.24,2000 +Lup Psi-4|CD-3410494|PPM 294164|HR 5839|J154241.02-344237.4,f|S|B5,15:42:41.02|-23.92,-34:42:37.47|-30.4,4.73,2000 +CrB Gamma-8|Gamma Coronae Borealis|BD+26 2722|HR 5849|J154244.56+261744.2,f|D|B9,15:42:44.56|-112.56,26:17:44.30|50.7,3.82,2000 +BP BOO|BD+52 1898|HR 5857|J154250.75+522139.2,f|V|B9,15:42:50.76|-66.32,52:21:39.25|29.7,5.49,2000 +Oct Rho|SAO 258731|HD 137333|CP-84 510|PPM 377875|HR 5729|J154316.92-842754.9,f|S|A2,15:43:16.93|137.01,-84:27:54.98|96.8,5.57,2000 +SAO 159461|SD-14 4266|HR 5847|J154324.85-150235.6,f|S|K0,15:43:24.86|-3.91,-15:2:35.63|-95.4,6.31,2000 +SAO 253269|HD 139915|CP-59 6257|PPM 361612|HR 5836|J154355.27-601713.9,f|S|G0,15:43:55.28|-3.35,-60:17:13.98|-5,6.47,2000 +CrB Pi-9|BD+32 2621|PPM 78785|HR 5855|J154359.30+323056.9,f|S|G5,15:43:59.30|-28.84,32:30:56.91|-8.7,5.57,2000 +Ser Psi-23A|SAO 121152|BD+02 2989|HR 5853|J154401.81+023054.6,f|D|G2,15:44:1.82|-44.96,2:30:54.62|-144.7,5.87,2000 +UMi Zeta-16|V7263|BD+78 527|PPM 8992|J154403.51+774740.1,f|V|A3,15:44:3.52|20.07,77:47:40.17|-2.5,4.29,2000 +Lib Eta-44|SAO 159466|SD-15 4171|HR 5848|J154404.39-154022.2,f|S|F0,15:44:4.40|-34.52,-15:40:22.20|-63.5,5.42,2000 +Cor Serpentis|Unuk|Unukalhai|Unuk Elhaia|Ser Alpha-24A|V20391|SAO 121157|BD+06 3088|PPM 161854|HR 5854|J154416.07+062532.2,f|D|K2,15:44:16.07|134.60,6:25:32.26|44.1,2.63,2000 +V20386|SAO 226132|CD-4110245A|HR 5846|J154422.67-414908.7,f|D|A0,15:44:22.67|-17.66,-41:49:8.72|-29,6.09,2000 +Ser Tau-26|BD+17 2906|PPM 131656|HR 5858|J154442.13+171551.2,f|S|A0,15:44:42.13|-30.51,17:15:51.22|6.6,6.15,2000 +BD+05 3072|PPM 161874|HR 5859|J154523.48+052650.3,f|S|A0,15:45:23.48|27.18,5:26:50.33|-3.2,5.57,2000 +SAO 121173|BD+01 3125|PPM 161881|HR 5861|J154539.50+005327.7,f|S|K0,15:45:39.51|11.85,0:53:27.74|-4.4,6.34,2000 +Ser 25|PT SER|BD-01 3092|PPM 179639|HR 5863|J154605.63-014815.0,f|V|B8,15:46:5.64|-21.89,-1:48:15.09|-31.8,5.39,2000 +Ser Beta-28A|V20396|BD+15 2911|PPM 131676|HR 5867|J154611.25+152518.5,f|D|A2,15:46:11.26|68.54,15:25:18.57|-41.3,3.66,2000 +Ser Lambda-27|V7246|SAO 121186|BD+07 3023|PPM 161899|HR 5868|J154626.61+072111.0,f|V|G0,15:46:26.61|-225.53,7:21:11.06|-68.5,4.42,2000 +HD 141472|BD+55 1777|PPM 35126|HR 5878|J154634.75+552829.2,f|S|K5,15:46:34.76|-120.13,55:28:29.25|77.5,5.93,2000 +HD 141653|BD+63 1225|PPM 19587|HR 5886|J154640.00+623558.4,f|S|A2,15:46:40.01|39.97,62:35:58.41|-56.5,5.20,2000 +V7239|CD-3410524|PPM 294249|J154644.21-344056.8,f|D|B7,15:46:44.22|-19.86,-34:40:56.83|-26.6,5.61,2000 +SD-05 4161|PPM 198946|HR 5866|J154645.42-060713.2,f|S|K0,15:46:45.42|-11.93,-6:7:13.28|1.3,6.25,2000 +Ser Upsilon-31|HD 141187|BD+14 2939|J154717.31+140655.2,f|S|A3,15:47:17.32|-54.99,14:6:55.25|31.6,5.71,2000 +CD-3910157|HR 5862|J154725.51-401139.1,f|S|G5,15:47:25.52|-156.63,-40:11:39.16|-42.6,6.41,2000 +CD-3710500|PPM 294265|HR 5864|J154729.10-375458.7,f|D|G6,15:47:29.10|-416.78,-37:54:58.72|-213.9,6.01,2000 +HD 141675|BD+55 1779|HR 5887|J154737.92+552235.8,f|D|A3,15:47:37.93|12.61,55:22:35.86|4.8,5.88,2000 +SAO 253297|CP-65 3139A|PPM 361658|HR 5851|J154753.05-652632.2,f|D|A5,15:47:53.06|-27.99,-65:26:32.25|-41.7,6.07,2000 +SAO 253297|CP-65 3139B|PPM 361658|HR 5852|J154753.21-652633.7,f|D|F0,15:47:53.22|-27.99,-65:26:33.72|-34.8,6.39,2000 +HD 141456|BD+32 2631|HR 5877|J154801.79+314408.2,f|S|K5,15:48:1.79|1.79,31:44:8.21|-43.8,6.40,2000 +HD 141353|BD+14 2940|PPM 131714|HR 5874|J154813.30+134720.6,f|S|K5,15:48:13.31|-8.89,13:47:20.68|-105.4,5.98,2000 +R CRB|HD 141527|BD+28 2477|J154834.41+280924.2,f|V|G0,15:48:34.41|-2.12,28:9:24.30|-11.5,5.90,2000 +Ser Kappa-35|V7269|HD 141477|BD+18 3074|PPM 131722|HR 5879|J154844.37+180829.6,f|V|M0,15:48:44.38|-51.74,18:8:29.63|-88.7,4.09,2000 +CP-52 8912|HR 5865|J154850.41-522617.7,f|D|K2,15:48:50.42|2.29,-52:26:17.72|-11.8,6.05,2000 +HD 141378|SD-03 3829|HR 5875|J154856.79-034906.6,f|S|A5,15:48:56.80|-29.19,-3:49:6.65|6.2,5.53,2000 +CrB Delta-10|Delta Coronae Borealis|HD 141714|BD+26 2737|HR 5889|J154935.64+260406.2,f|S|G5,15:49:35.65|-79.90,26:4:6.22|-63.8,4.60,2000 +Ser Mu-32|HD 141513|SD-02 4052|PPM 198983|HR 5881|J154937.20-032548.7,f|S|A0,15:49:37.21|-98.07,-3:25:48.75|-27.4,3.55,2000 +SAO 226254|HD 141194|CD-4810349|HR 5871|J154957.49-485444.6,f|S|A1,15:49:57.50|-27.60,-48:54:44.67|-10.4,5.86,2000 +HD 141168|CP-52 8944|PPM 344263|HR 5869|J155007.08-531235.1,f|D|B9,15:50:7.08|-27.58,-53:12:35.17|-39.1,5.78,2000 +SAO 226263|HD 141296|CD-4510251|HR 5872|J155016.31-452406.1,f|D|A9,15:50:16.31|39.60,-45:24:6.17|-33.5,6.12,2000 +Ser Omega-34A|SAO 121215|BD+02 3007A|PPM 161962|HR 5888|J155017.54+021147.4,f|S|G8,15:50:17.55|30.13,2:11:47.43|-47.6,5.23,2000 +Ser Epsilon-37|SAO 121218|HD 141795|BD+04 3069|PPM 161966|HR 5892|J155048.96+042839.8,f|S|A2,15:50:48.97|128.01,4:28:39.83|61.9,3.71,2000 +Lup Chi-5|HD 141556|CD-3310754|PPM 294334|HR 5883|J155057.53-333737.7,f|S|B9,15:50:57.54|-5.87,-33:37:37.80|-24.9,3.96,2000 +Sco 1|SAO 183854|HD 141637|CD-2511131|PPM 264768|HR 5885|J155058.74-254504.6,f|S|B3,15:50:58.74|-13.65,-25:45:4.66|-24.9,4.65,2000 +V0360 NOR|HD 141318|CP-54 6711A|PPM 344285|HR 5873|J155106.80-550319.9,f|D|B2,15:51:6.80|-2.92,-55:3:19.92|-3.1,5.77,2000 +CrB Kappa-11|BD+36 2652|PPM 78878|J155113.93+353926.5,f|D|K1,15:51:13.93|-8.04,35:39:26.57|-347.4,4.81,2000 +Ser 36|V20418|HD 141851|SD-02 4058|HR 5895|J155115.59-030525.7,f|V|A3,15:51:15.59|-92.57,-3:5:25.79|-27.6,5.10,2000 +Ser Rho-38|V7300|HD 141992|BD+21 2829|HR 5899|J155115.90+205840.5,f|V|K4,15:51:15.91|-54.76,20:58:40.51|18,4.74,2000 +SAO 226295|HD 141544|CD-4610430|PPM 321115|HR 5882|J155131.41-470338.8,f|S|K2,15:51:31.42|-113.12,-47:3:38.88|-33.4,6.00,2000 +SAO 159544|HD 141853|SD-13 4269|HR 5896|J155138.39-140800.9,f|S|G8,15:51:38.40|-20.22,-14:8:0.90|-7,6.21,2000 +V7301|SAO 183873|HD 141832|CD-2912030|PPM 264794|HR 5893|J155212.79-295311.5,f|D|K1,15:52:12.80|-136.55,-29:53:11.59|-85.5,6.40,2000 +HD 142531|BD+56 1838|PPM 35171|HR 5922|J155216.55+554936.1,f|S|G5,15:52:16.56|-23.84,55:49:36.17|54.1,5.80,2000 +Her Chi-1|V20429|HD 142373|BD+42 2648|HR 5914|J155240.54+422705.4,f|V|F8,15:52:40.54|439.06,42:27:5.46|629.6,4.61,2000 +HD 142244|BD+17 2926|PPM 131771|J155256.11+172411.3,f|S|K0,15:52:56.12|-55.11,17:24:11.34|-8.2,6.29,2000 +Ser 39|V7313|HD 142267|BD+13 3024|PPM 131776|HR 5911|J155312.09+131147.8,f|D|G1,15:53:12.10|-150.57,13:11:47.84|-562.7,6.09,2000 +Lib Lambda-45|Lambda Librae|SAO 183895|SD-19 4249|PPM 264819|J155320.05-201001.3,f|S|B2,15:53:20.06|-3.66,-20:10:1.34|-19,5.03,2000 +V7299|SAO 253328|HD 141585|CP-62 4990|HR 5884|J155322.93-623623.6,f|V|K3,15:53:22.93|-5.25,-62:36:23.70|-14.1,6.20,2000 +HD 142357|BD+16 2840|HR 5913|J155334.87+160429.7,f|D|F5,15:53:34.87|21.33,16:4:29.76|-22.7,6.22,2000 +Sco 2|SAO 183896|HD 142114|CD-2412352|PPM 264824|J155336.71-251937.7,f|D|B2,15:53:36.72|-14.37,-25:19:37.71|-25.4,4.67,2000 +Lib Theta-46|SAO 159563|HD 142198|SD-16 4174|J155349.53-164345.4,f|S|G9,15:53:49.54|100.12,-16:43:45.46|135.3,4.13,2000 +HD 142165|CD-2412354|PPM 264828|J155353.91-243159.3,f|S|B6,15:53:53.91|-13.51,-24:31:59.37|-25.4,5.38,2000 +V1040 SCO|HD 142184|CD-2312569|J155355.86-235841.1,f|V|B2,15:53:55.86|-12.88,-23:58:41.14|-24.1,5.41,2000 +CD-2611096|PPM 264837|J155430.10-272019.0,f|S|B6,15:54:30.11|-13.46,-27:20:19.10|-26.4,6.15,2000 +QY SER|HD 142574|BD+20 3166|HR 5924|J155434.61+201839.4,f|V|K8,15:54:34.61|-83.84,20:18:39.49|43,5.44,2000 +Her 2|V7335|BD+43 2542|HR 5932|J155437.85+430818.8,f|V|M3,15:54:37.85|-33.27,43:8:18.84|66.1,5.36,2000 +Sco 3|V0927 SCO|SAO 183914|CD-2412365|PPM 264844|HR 5912|J155439.53-251437.4,f|V|B8,15:54:39.53|-12.35,-25:14:37.47|-25.5,5.87,2000 +Ser 40|FP SER|SAO 121254|BD+09 3116|HR 5919|J155440.27+083449.2,f|V|A7,15:54:40.28|2.37,8:34:49.21|-0.6,6.29,2000 +V7310|SAO 253344|HD 141913|CP-60 6191|HR 5898|J155452.63-604437.1,f|D|B9,15:54:52.64|-2.05,-60:44:37.14|-4,6.21,2000 +Lib 47|V7327|SAO 159572|HD 142378|SD-18 4195|HR 5915|J155500.36-192258.5,f|D|B5,15:55:0.36|-10.61,-19:22:58.53|-18.4,5.96,2000 +TrA Beta|SAO 253346|HD 141891|CP-63 3723|PPM 361732|HR 5897|J155508.56-632550.6,f|D|F2,15:55:8.56|-188.46,-63:25:50.62|-401.9,2.84,2000 +TrA Kappa|SAO 253342|HD 141767|CP-68 2585|PPM 361735|HR 5891|J155529.59-683610.8,f|S|G5,15:55:29.60|-8.92,-68:36:10.80|-6.3,5.10,2000 +Sco 4|SAO 183931|HD 142445|CD-2511190|PPM 264865|HR 5917|J155530.07-261557.5,f|S|A3,15:55:30.08|-34.97,-26:15:57.58|-29.9,5.63,2000 +CD-3012663|PPM 294421|HR 5916|J155530.53-310501.1,f|S|K4,15:55:30.54|30.32,-31:5:1.12|25,6.21,2000 +Her 4|V0839 HER|HD 142926|BD+42 2652|HR 5938|J155530.59+423358.2,f|V|B9,15:55:30.59|-23.31,42:33:58.30|16.8,5.75,2000 +V7318|SAO 253349|CP-59 6428|PPM 361736|J155532.36-601039.5,f|D|G5,15:55:32.37|-47.37,-60:10:39.53|-71.2,5.86,2000 +HD 142763|BD+19 3036|PPM 131815|HR 5931|J155539.85+183714.6,f|S|B8,15:55:39.85|-7.82,18:37:14.68|-10.7,6.26,2000 +CrB Lambda-12|V20448|BD+38 2712|PPM 78916|HR 5936|J155547.58+375649.0,f|D|F0,15:55:47.59|29.45,37:56:49.05|80.1,5.44,2000 +V20453|HD 143187|BD+59 1691|PPM 35197|HR 5949|J155549.62+585442.3,f|V|A0,15:55:49.62|-31.83,58:54:42.39|26.6,6.31,2000 +SAO 253353|HD 142139|CP-60 6208|PPM 361743|J155605.91-602856.9,f|S|A3,15:56:5.91|-36.51,-60:28:56.92|-70.9,5.75,2000 +HD 142448|CD-3910237|PPM 294433|HR 5918|J155606.83-395151.7,f|D|B6,15:56:6.84|4.03,-39:51:51.71|-17.7,6.04,2000 +HD 142542|CD-3112407|PPM 294436|HR 5923|J155614.02-314709.1,f|S|F6,15:56:14.03|47.81,-31:47:9.18|4.3,6.29,2000 +SAO 159584|SD-13 4290|HR 5927|J155614.43-142357.8,f|S|F7,15:56:14.43|41.41,-14:23:57.85|-77.2,6.32,2000 +Ser Gamma-41A|V7350|BD+16 2849|PPM 131822|HR 5933|J155627.18+153941.8,f|D|F6,15:56:27.18|311.25,15:39:41.82|-1282.2,3.85,2000 +HR LIB|SAO 159587|SD-14 4314|J155633.37-144945.9,f|V|A2,15:56:33.37|71.63,-14:49:45.98|-35.2,6.12,2000 +Sco Rho-5|V20445|SAO 183957|HD 142669|CD-2811714|HR 5928|J155653.07-291250.6,f|D|B2,15:56:53.08|-15.19,-29:12:50.66|-25.1,3.88,2000 +Lup Xi1|HD 142629|CD-3310826A|PPM 294448|HR 5925|J155653.49-335758.0,f|D|A3,15:56:53.50|23.76,-33:57:58.08|-46,5.09,2000 +Lup Xi2|CD-3310826B|PPM 294449|HR 5926|J155654.11-335751.4,f|D|B9,15:56:54.12|20.28,-33:57:51.41|-49.7,5.58,2000 +SAO 226392|HD 142529|CD-4710456|PPM 321221|HR 5921|J155703.85-480943.8,f|S|F1,15:57:3.86|-104.86,-48:9:43.87|-109.8,6.30,2000 +Ser Phi|BD+14 2969|PPM 131839|J155714.57+142452.1,f|S|K1,15:57:14.57|-120.87,14:24:52.13|87.3,5.54,2000 +HD 142691|CD-3510611|PPM 294459|HR 5929|J155721.32-361107.2,f|S|K0,15:57:21.33|-9.81,-36:11:7.24|-12.4,5.82,2000 +V20461|BD+40 2948|PPM 78931|J155729.82+394142.3,f|V|K0,15:57:29.82|-65.21,39:41:42.31|50,6.30,2000 +CrB Epsilon-13A|BD+27 2558|HR 5947|J155735.25+265240.3,f|D|K2,15:57:35.25|-76.53,26:52:40.37|-60.2,4.14,2000 +V7359|SAO 183972|HD 142883|SD-20 4364|PPM 264922|HR 5934|J155740.46-205859.0,f|V|B3,15:57:40.46|-9.94,-20:58:59.09|-22.4,5.85,2000 +CL DRA|HD 143466|BD+55 1793|PPM 35211|J155747.44+544459.1,f|V|F0,15:57:47.44|-150.20,54:44:59.15|106.5,4.96,2000 +Lib 48|FX LIB|HD 142983|SD-13 4302|HR 5941|J155811.36-141645.6,f|V|B5,15:58:11.37|-12.36,-14:16:45.69|-16.8,4.95,2000 +HD 142889|CD-3710620|PPM 294487|HR 5935|J155830.79-373013.9,f|S|K0,15:58:30.80|-12.85,-37:30:13.96|-21.9,6.31,2000 +V0913 SCO|SAO 183982|CD-2412427|PPM 264936|HR 5942|J155834.86-244953.3,f|V|B5,15:58:34.87|-11.44,-24:49:53.36|-24.1,5.44,2000 +Sco Pi-6|Pi Scorpii|SAO 183987|CD-2511228|HR 5944|J155851.11-260650.7,f|D|B1,15:58:51.11|-11.99,-26:6:50.78|-25.7,2.89,2000 +V20469|HD 143435|BD+37 2695|PPM 78947|HR 5957|J155857.71+363837.5,f|V|K5,15:58:57.71|25.15,36:38:37.59|27.7,5.59,2000 +SAO 253362|HD 142514|CP-64 3320|PPM 361773|J155858.14-650215.3,f|D|B7,15:58:58.15|-9.50,-65:2:15.31|-6.8,5.75,2000 +HD 143584|BD+50 2239|HR 5964|J155904.39+495251.7,f|S|F0,15:59:4.40|21.46,49:52:51.76|-55.6,6.04,2000 +SAO 226425|CD-4110478|PPM 321254|HR 5943|J155930.26-414439.9,f|S|K0,15:59:30.27|-37.72,-41:44:39.97|-16.5,4.99,2000 +SAO 243219|HD 142919|CP-53 6911|PPM 344459|HR 5937|J155954.14-540115.2,f|S|B5,15:59:54.14|-6.96,-54:1:15.28|-8,6.11,2000 +SAO 257341|HD 141846|CP-77 1181|PPM 372885|J155955.13-780138.1,f|D|F3,15:59:55.13|-1.68,-78:1:38.20|-73.5,6.42,2000 +V7375|SAO 226431|CD-4010113|PPM 321261|HR 5945|J155957.84-403911.1,f|V|K1,15:59:57.84|-1.82,-40:39:11.20|-8.1,6.49,2000 +Lup Eta|V20465|HD 143118|CD-3810797|PPM 294523|HR 5948|J160007.32-382348.1,f|D|B2,16:0:7.33|-16.58,-38:23:48.14|-27.1,3.43,2000 +Lib 49|SAO 159625|HD 143333|SD-16 4196|HR 5954|J160019.59-163200.0,f|D|F8,16:0:19.59|-636.59,-16:32:0.06|-397.9,5.46,2000 +Dschubba|Iclarkrau|Sco Delta-7|delta Sco|HD 143275|SD-22 4068|PPM 264979|HR 5953|J160020.00-223718.2,f|D|B0,16:0:20.00|-11.63,-22:37:18.23|-43.5,2.30,2000 +Lib 50|HD 143459|SD-07 4162|PPM 199195|HR 5959|J160047.63-082440.8,f|S|A0,16:0:47.63|-14.99,-8:24:40.87|-12,5.53,2000 +SAO 121315|HD 143553|BD+04 3096|PPM 162147|HR 5963|J160051.13+042538.5,f|S|K5,16:0:51.13|-43.07,4:25:38.51|75.2,5.82,2000 +SAO 226442|HD 143248|CD-4010120A|PPM 321275|HR 5952|J160053.70-402607.7,f|D|A0,16:0:53.71|15.07,-40:26:7.73|32.9,6.23,2000 +CrB Rho-15|HD 143761|BD+33 2663|PPM 78975|HR 5968|J160102.66+331812.6,f|D|G0,16:1:2.66|-196.95,33:18:12.63|-773,5.40,2000 +SAO 243246|CP-54 6922|PPM 344489|HR 5946|J160106.46-543440.4,f|S|A5,16:1:6.47|-38.43,-54:34:40.44|-41.2,6.12,2000 +S TRA|SAO 253377|HD 142941|CP-63 3765|HR 5939|J160110.71-634635.5,f|V|F8,16:1:10.72|-3.25,-63:46:35.54|-3.5,6.40,2000 +Her 5|V20477|HD 143666|BD+18 3101|PPM 131912|HR 5966|J160114.31+174906.2,f|V|G8,16:1:14.32|-46.13,17:49:6.23|152.8,5.11,2000 +CD-3112470|PPM 294547|HR 5956|J160119.55-315320.8,f|S|K4,16:1:19.55|9.68,-31:53:20.89|-1.3,6.32,2000 +CrB Iota-14|V7396|BD+30 2738|HR 5971|J160126.56+295103.8,f|V|A0,16:1:26.56|-38.25,29:51:3.82|-6.9,4.98,2000 +Dra Theta-13|HD 144284|BD+58 1608|PPM 35254|HR 5986|J160153.34+583354.9,f|S|F8,16:1:53.35|-320.11,58:33:54.91|335,4.01,2000 +SAO 243262|HD 143321|CD-5010074|J160204.47-510714.7,f|D|B5,16:2:4.48|-11.86,-51:7:14.78|-15.4,6.40,2000 +BD+53 1834|PPM 35257|HR 5981|J160205.55+525457.3,f|S|K5,16:2:5.56|1.81,52:54:57.30|-36.6,5.91,2000 +Ser Pi-44|HD 143894|BD+23 2886|HR 5972|J160217.69+224816.0,f|S|A3,16:2:17.69|4.56,22:48:16.03|24,4.82,2000 +X HER|BD+47 2291|PPM 55139|J160239.17+471425.2,f|V|Mc,16:2:39.17|-67.82,47:14:25.28|64.5,6.47,2000 +HD 143619|CD-2811817|HR 5965|J160239.42-290808.8,f|D|K3,16:2:39.42|34.59,-29:8:8.88|-9.5,6.07,2000 +Her Upsilon-6|BD+46 2142|PPM 55142|HR 5982|J160247.89+460212.1,f|S|B9,16:2:47.90|56.02,46:2:12.14|-61.3,4.72,2000 +HD 143238|CP-62 5122|PPM 361821|HR 5951|J160252.49-623229.7,f|S|B9,16:2:52.49|-30.92,-62:32:29.72|-26.7,6.25,2000 +V20497|HD 144542|BD+59 1697|PPM 35262|HR 5995|J160309.34+592438.6,f|V|M1,16:3:9.35|-18.55,59:24:38.66|-30.5,6.19,2000 +Nor Eta|SAO 226466|HD 143546|CD-4810512|HR 5962|J160312.89-491346.9,f|S|G8,16:3:12.90|41.14,-49:13:46.90|10.4,4.64,2000 +BD+37 2708|HR 5983|J160319.36+363754.4,f|D|A2,16:3:19.36|8.06,36:37:54.43|-13.5,5.81,2000 +HD 143787|CD-2511295|HR 5969|J160320.62-255154.8,f|S|K5,16:3:20.62|-67.89,-25:51:54.87|-37.6,4.97,2000 +V20485|HD 143699|CD-3810832|PPM 294599|HR 5967|J160324.18-383609.1,f|V|B6,16:3:24.19|-17.70,-38:36:9.15|-28.5,4.89,2000 +HD 145622|BD+77 616|J160331.35+764738.1,f|S|A3,16:3:31.35|-17.51,76:47:38.18|20.4,5.73,2000 +Nor Iota1|SAO 243279|HD 143474|CP-57 7500A|PPM 344521|HR 5961|J160332.07-574630.2,f|D|A7,16:3:32.08|-125.02,-57:46:30.27|-84.1,4.66,2000 +CD-3112505|J160334.35-320001.9,f|S|F4,16:3:34.36|-37.65,-32:0:1.94|-29.2,6.00,2000 +Ser 43|SAO 121339|BD+05 3131|PPM 162192|HR 5976|J160345.69+045912.6,f|D|G9,16:3:45.69|-38.11,4:59:12.60|17.3,6.07,2000 +CD-2412499|HR 5973|J160354.70-244334.7,f|S|K0,16:3:54.70|-4.22,-24:43:34.72|6,6.22,2000 +SAO 243283|HD 143548|CP-58 6604|PPM 344527|J160406.19-591034.2,f|S|K1,16:4:6.20|-4.69,-59:10:34.26|-4.1,6.38,2000 +V20490|CD-3211386|PPM 294617|HR 5974|J160417.81-331249.3,f|V|A9,16:4:17.82|-29.37,-33:12:49.39|-34.1,6.09,2000 +QY NOR|SAO 243296|HD 143658|CP-53 7015|PPM 344533|J160421.32-534237.3,f|V|B9,16:4:21.32|-3.11,-53:42:37.35|-17.2,6.48,2000 +Sco Xi|SAO 159665|SD-10 4237|HR 5978|J160422.13-112222.9,f|D|F5,16:4:22.14|-63.23,-11:22:22.99|-28,4.16,2000 +HD 143928|CD-3710680|PPM 294623|HR 5975|J160436.81-375146.6,f|D|F3,16:4:36.82|-128.49,-37:51:46.62|-116.2,5.91,2000 +Graffias|Acrab|Al Aqrab|Sco Beta-8A|V7424|SAO 159682|HD 144217|SD-19 4307|PPM 231174|HR 5984|J160526.23-194819.6,f|D|B1,16:5:26.23|-6.77,-19:48:19.63|-24.9,2.62,2000 +Sco Beta-8C|SAO 159683|HD 144218|SD-19 4308|PPM 231175|HR 5985|J160526.55-194806.6,f|D|B2,16:5:26.55|-34.58,-19:48:6.70|-7.5,4.91,2000 +SAO 121361|HD 144426|BD+08 3134|PPM 162223|HR 5992|J160537.93+080546.4,f|S|A3,16:5:37.94|7.57,8:5:46.49|0.8,6.27,2000 +HD 144362|SD-05 4234|PPM 199281|HR 5989|J160544.55-061728.0,f|D|F2,16:5:44.56|49.95,-6:17:28.06|5.8,6.36,2000 +SAO 257357|HD 143346|CP-72 1902|PPM 372933|HR 5955|J160555.81-722403.2,f|S|K1,16:5:55.82|-33.29,-72:24:3.23|71.5,5.69,2000 +SD-05 4235|PPM 199284|J160559.81-060823.1,f|D|K0,16:5:59.81|-34.15,-6:8:23.11|-5.3,6.40,2000 +V0929 SCO|SAO 184113|HD 144334|CD-2312700|PPM 265112|HR 5988|J160606.37-233622.7,f|V|B8,16:6:6.38|-11.00,-23:36:22.73|-29.2,5.90,2000 +HD 145454|BD+68 864|PPM 19733|J160619.67+674836.4,f|S|A0,16:6:19.68|-35.92,67:48:36.48|62.7,5.44,2000 +Nor Delta|HD 144197|CD-4410625|PPM 321365|J160629.43-451023.4,f|S|A3,16:6:29.44|17.45,-45:10:23.47|37,4.72,2000 +Lup Theta|V20503|HD 144294|CD-3610642|PPM 294664|HR 5987|J160635.54-364808.2,f|V|B2,16:6:35.54|-15.85,-36:48:8.24|-31.1,4.22,2000 +Sco Omega-9|SAO 184123|SD-20 4405|PPM 265127|HR 5993|J160648.42-204009.0,f|S|B1,16:6:48.43|-10.53,-20:40:9.09|-23.7,3.95,2000 +HD 144585|SD-13 4342|PPM 231226|HR 5996|J160703.36-140416.6,f|S|G2,16:7:3.37|-261.17,-14:4:16.65|11.8,6.33,2000 +HD 144415|CD-3610648|PPM 294675|HR 5991|J160716.21-364520.4,f|D|F1,16:7:16.21|52.52,-36:45:20.43|-56.5,5.71,2000 +V20515|HD 144889|BD+22 2926|J160722.17+214921.4,f|V|K4,16:7:22.18|-13.37,21:49:21.41|-43,6.17,2000 +SAO 243339|HD 144183|CP-55 7079|HR 5979|J160724.08-561127.4,f|S|F2,16:7:24.08|-0.83,-56:11:27.44|0.3,6.17,2000 +Sco Omega-10|V7454|SAO 184135|SD-20 4408|PPM 265145|HR 5997|J160724.32-205207.5,f|V|G4,16:7:24.33|43.73,-20:52:7.55|-45.3,4.32,2000 +Sco 11|SAO 159715|SD-12 4425|J160736.41-124443.4,f|D|B9,16:7:36.42|-41.70,-12:44:43.48|-27.6,5.76,2000 +Ser 45|HD 144874|BD+10 2958|PPM 162259|J160737.53+095330.2,f|S|A7,16:7:37.54|-20.84,9:53:30.27|-7.1,5.64,2000 +SAO 184142|HD 144661|CD-2412552|PPM 265154|HR 5998|J160751.88-242744.4,f|S|B7,16:7:51.89|-9.56,-24:27:44.46|-23.9,6.32,2000 +Mirfak|Her Kappa-7A|V7471|BD+17 2964|J160804.52+170249.1,f|D|G8,16:8:4.53|-34.27,17:2:49.13|-5.5,5.00,2000 +Her Kappa-7B|BD+17 2965|J160804.95+170315.7,f|D|K1,16:8:4.96|-20.65,17:3:15.77|-29.4,6.23,2000 +V20513|SAO 184144|CD-2511369|PPM 265162|J160807.58-261936.0,f|V|M2,16:8:7.59|99.76,-26:19:36.04|-5.8,5.37,2000 +Ser 47|FS SER|SAO 121383|BD+08 3141|PPM 162272|J160828.07+083203.5,f|V|M3,16:8:28.07|-13.65,8:32:3.52|-6.2,5.74,2000 +V7470|SAO 184164|HD 144844|CD-2312731|PPM 265182|J160843.72-234107.4,f|V|B9,16:8:43.72|-10.16,-23:41:7.50|-25.8,5.86,2000 +Her Phi-11|Phi Herculis|HD 145389|BD+45 2376|PPM 55199|J160846.17+445605.6,f|S|B9,16:8:46.18|-26.02,44:56:5.66|35.9,4.24,2000 +Her 8|V7477|HD 145122|BD+17 2967|J160846.63+171220.2,f|V|A0,16:8:46.63|-19.20,17:12:20.30|-30.7,6.13,2000 +CrB Tau-16|V7488|HD 145328|BD+36 2699|J160858.29+362927.3,f|D|K1,16:8:58.30|-40.76,36:29:27.40|343.5,4.73,2000 +BD+03 3132|J160858.87+032716.1,f|S|K5,16:8:58.88|-36.38,3:27:16.11|12.2,5.92,2000 +HD 145674|BD+58 1622|PPM 35323|J160902.89+575616.3,f|D|A1,16:9:2.89|-23.73,57:56:16.38|33.4,6.34,2000 +SAO 121392|HD 145148|BD+06 3169|PPM 162281|J160911.21+062243.3,f|S|K1,16:9:11.21|258.19,6:22:43.30|-746.7,5.94,2000 +Nor Iota2|SAO 243368|CP-57 7613|PPM 344612|HR 5994|J160918.54-575603.5,f|S|B9,16:9:18.55|-13.22,-57:56:3.54|-59.7,5.58,2000 +HD 145694|BD+56 1867|PPM 35328|J160925.97+554944.3,f|S|K0,16:9:25.97|-32.69,55:49:44.31|23.2,6.42,2000 +V20531|SD-03 3884|PPM 199363|J160950.51-032800.2,f|V|K4,16:9:50.52|-24.26,-3:28:0.23|0.6,5.39,2000 +HD 144987|CD-3310961|PPM 294744|J160952.58-333244.8,f|S|B8,16:9:52.59|-25.75,-33:32:44.90|-44.9,5.50,2000 +SAO 159745|SD-17 4502|J160955.27-182026.2,f|S|F4,16:9:55.27|-67.49,-18:20:26.23|-69.2,6.43,2000 +SAO 253444|HD 144481|CP-62 5202|PPM 361899|J160959.17-625801.7,f|S|A3,16:9:59.18|-12.75,-62:58:1.76|-60.7,6.50,2000 +UMi 19|HD 146926|BD+76 594|PPM 9128|J161049.52+755239.2,f|S|B8,16:10:49.53|-1.39,75:52:39.23|13.2,5.48,2000 +SAO 184197|CD-2912343|PPM 265228|J161102.06-292458.3,f|S|K3,16:11:2.07|-85.58,-29:24:58.39|-87.9,5.10,2000 +SAO 226564|HD 145191|CD-4010251|PPM 321468|J161117.70-410711.2,f|S|F0,16:11:17.71|-79.33,-41:7:11.29|-125.5,5.86,2000 +HD 145647|BD+17 2982|J161128.73+163956.4,f|S|A0,16:11:28.74|2.16,16:39:56.49|5.8,6.10,2000 +Her 10|LQ HER|HD 145713|BD+23 2909|J161138.03+232941.2,f|V|M4,16:11:38.04|-21.18,23:29:41.28|-11.7,5.82,2000 +V20545|BD+33 2696|J161139.59+332033.9,f|D|K2,16:11:39.60|5.14,33:20:33.95|14.2,6.30,2000 +HD 145931|BD+42 2683|PPM 55259|J161147.59+422228.4,f|D|K4,16:11:47.60|-6.98,42:22:28.45|24.7,5.87,2000 +HD 145849|BD+36 2706|PPM 79111|J161148.05+362530.3,f|D|K3,16:11:48.05|-8.93,36:25:30.34|-28,5.63,2000 +SAO 243422|CP-54 7185|PPM 344661|J161157.92-542110.5,f|S|B9,16:11:57.92|-10.75,-54:21:10.56|-15.9,6.49,2000 +Jabbah|Sco Nu-14A|SAO 159764|SD-19 4333|PPM 231336|J161159.73-192738.5,f|D|B3,16:11:59.73|-9.76,-19:27:38.55|-25.3,4.13,2000 +Sco Psi-15|SD-09 4324|PPM 231337|J161159.98-100351.3,f|S|A3,16:11:59.99|-21.86,-10:3:51.31|-28,4.94,2000 +HD 145957|BD+39 2961|PPM 79116|J161206.54+390319.8,f|S|K0,16:12:6.54|-3.96,39:3:19.89|-21.4,6.39,2000 +Sco 16|SD-08 4180|PPM 199398|J161207.31-083251.2,f|S|A4,16:12:7.32|44.35,-8:32:51.27|1.4,5.44,2000 +Sco 12|V7520|SAO 184217|HD 145483|CD-2811962|PPM 265252|J161216.03-282502.2,f|D|B9,16:12:16.04|-22.96,-28:25:2.30|-40.9,5.67,2000 +Sco 13|SAO 184221|HD 145482|CD-2710841|PPM 265254|J161218.20-275534.9,f|S|B2,16:12:18.20|-10.34,-27:55:34.94|-23.2,4.58,2000 +BD+67 930|J161225.35+670839.0,f|S|G8,16:12:25.36|-11.94,67:8:39.03|-42.6,6.21,2000 +UMi 20|HD 147142|BD+75 586|PPM 9132|J161232.09+751238.4,f|S|K2,16:12:32.10|-43.50,75:12:38.45|35.7,6.35,2000 +HD 145976|BD+27 2603|J161245.47+264014.0,f|D|F3,16:12:45.47|68.90,26:40:14.10|-31.7,6.48,2000 +HD 145788|SD-03 3891|PPM 199413|J161256.58-041314.9,f|S|A1,16:12:56.58|-29.77,-4:13:14.91|-19.8,6.25,2000 +Her 9|SAO 121431|HD 145892|BD+05 3165|PPM 162351|J161315.42+050115.9,f|S|K5,16:13:15.43|36.31,5:1:15.91|-5.1,5.46,2000 +V0367 NOR|SAO 243448|HD 145384|CP-53 7413|PPM 344686|J161316.96-534016.2,f|V|M0,16:13:16.97|-4.00,-53:40:16.22|-3.1,5.98,2000 +Nor Zeta|SAO 243449|HD 145361|CP-55 7229|PPM 344689|J161322.69-553227.4,f|S|F2,16:13:22.70|-100.49,-55:32:27.41|-41.9,5.79,2000 +Nor Kappa|SAO 243454|HD 145397|CP-54 7245|PPM 344692|J161328.72-543749.6,f|D|G8,16:13:28.73|-5.30,-54:37:49.68|-22.5,4.95,2000 +HD 145936|BD-01 3149|PPM 179749|J161338.59-012830.4,f|S|K0,16:13:38.60|-52.18,-1:28:30.48|3.1,6.46,2000 +V1051 SCO|SAO 184241|HD 145792|CD-2412623|J161345.49-242519.5,f|D|B5,16:13:45.50|-9.97,-24:25:19.53|-19.2,6.42,2000 +Sco Chi-17|SAO 159793|HD 145897|SD-11 4096|PPM 231387|J161350.90-115015.8,f|S|K3,16:13:50.91|-6.02,-11:50:15.89|-10.1,5.24,2000 +SAO 121443|BD+06 3184|PPM 162364|J161413.60+055406.6,f|S|K2,16:14:13.61|43.72,5:54:6.65|-21,6.29,2000 +Yed Prior|Oph Delta-1|V7556|SD-03 3903|PPM 199443|J161420.73-034139.5,f|D|M0,16:14:20.74|-45.80,-3:41:39.56|-142.9,2.73,2000 +HD 145838|CD-3211525|PPM 294827|J161422.36-330039.9,f|S|K0,16:14:22.37|-8.43,-33:0:39.92|-18.8,5.92,2000 +SAO 184253|HD 145964|SD-20 4444|PPM 265296|J161428.88-210627.4,f|S|A0,16:14:28.88|-16.09,-21:6:27.49|-29.7,6.42,2000 +HD 147321|BD+73 713|PPM 9145|J161433.44+732341.6,f|S|A3,16:14:33.44|-10.85,73:23:41.61|34.3,6.02,2000 +HD 145997|SD-18 4249|PPM 231413|J161439.24-183208.3,f|S|K2,16:14:39.24|-92.44,-18:32:8.34|-125.9,6.33,2000 +CrB Sigma-17A|TZ CRB|HD 146361|BD+34 2750A|J161440.85+335131.0,f|D|G0,16:14:40.85|-266.44,33:51:31.01|-86.9,5.54,2000 +SAO 184258|CD-2511453|J161453.42-252837.1,f|S|B7,16:14:53.43|-9.75,-25:28:37.11|-22.1,6.06,2000 +Nor Theta|HD 145842|CD-4710611|PPM 321528|J161515.31-472219.2,f|S|B8,16:15:15.32|-36.77,-47:22:19.28|-45.9,5.13,2000 +HD 145921|CD-4211132|PPM 321529|J161523.95-425357.9,f|S|K2,16:15:23.96|-29.23,-42:53:57.92|-4.9,6.14,2000 +TrA Delta|SAO 253474|HD 145544|CP-63 3854|PPM 361956|J161526.27-634108.4,f|D|G2,16:15:26.27|3.52,-63:41:8.45|-13.5,3.85,2000 +Her 16|HD 146388|BD+19 3075|PPM 132143|J161528.63+184829.1,f|S|K3,16:15:28.64|-68.44,18:48:29.11|-84.8,5.71,2000 +Sco 18|V7577|HD 146233|SD-07 4242|PPM 199464|J161537.27-082209.9,f|D|G2,16:15:37.27|232.10,-8:22:9.99|-495.8,5.49,2000 +HD 146537|BD+27 2613|J161547.32+272519.4,f|S|K2,16:15:47.32|-33.95,27:25:19.49|-39.1,6.14,2000 +V20554|HD 145782|CP-57 7716|PPM 344751|J161549.79-575444.4,f|V|A3,16:15:49.80|-12.11,-57:54:44.46|-49.9,5.63,2000 +V7578|SAO 159821|HD 146254|SD-14 4383|PPM 231438|J161551.49-145056.8,f|V|A0,16:15:51.50|6.52,-14:50:56.81|1.4,6.09,2000 +V0368 NOR|SAO 243526|CP-53 7594|PPM 344765|J161643.27-534839.9,f|V|M2,16:16:43.28|8.59,-53:48:39.99|-0.7,5.47,2000 +CrB Upsilon-18A|V7596|HD 146738|BD+29 2803|J161644.78+290900.9,f|D|A3,16:16:44.79|23.58,29:9:0.94|-17.1,5.79,2000 +HD 146514|SD-03 3910|PPM 199482|J161655.30-035712.0,f|S|A9,16:16:55.30|38.91,-3:57:12.05|6.7,6.18,2000 +SAO 243533|CP-53 7607|PPM 344769|J161658.92-534146.4,f|D|G6,16:16:58.93|-58.97,-53:41:46.44|-113,6.41,2000 +SAO 159829|HD 146436|SD-19 4350|PPM 265352|J161659.19-200614.7,f|S|G8,16:16:59.20|-5.78,-20:6:14.72|-7.1,6.42,2000 +Nor Gamma1|SAO 226619|HD 146143|CD-4910474|J161700.93-500405.2,f|S|F9,16:17:0.93|-2.21,-50:4:5.24|-4,4.98,2000 +V20557|SAO 253481|HD 145689|CP-67 3054|PPM 361973|J161705.41-675628.6,f|V|A4,16:17:5.41|-44.73,-67:56:28.63|-84.7,5.95,2000 +AT DRA|HD 147232|BD+60 1665|PPM 35382|J161715.34+594518.0,f|V|M4,16:17:15.35|6.80,59:45:18.08|25.6,5.43,2000 +SAO 243544|HD 146145|CP-52 9469|PPM 344779|J161720.91-530510.9,f|D|A8,16:17:20.92|-59.46,-53:5:10.99|-49.7,6.31,2000 +UMi Eta-21|BD+76 596|PPM 9157|HR 6116|J161730.28+754519.1,f|D|F5,16:17:30.29|-89.95,75:45:19.19|257.8,4.96,2000 +SAO 121478|BD+01 3194|PPM 162443|J161743.35+012948.1,f|S|K0,16:17:43.36|-16.04,1:29:48.17|-1.3,6.50,2000 +HD 147662|BD+68 868|PPM 19819|J161809.76+683316.3,f|S|K0,16:18:9.77|-24.68,68:33:16.36|44.9,6.36,2000 +HD 146624|CD-2812037|PPM 265379|J161817.89-283650.4,f|S|A0,16:18:17.90|-33.84,-28:36:50.47|-100.6,4.79,2000 +Yed Posterior|Oph Epsilon-2|HD 146791|SD-04 4086|J161819.28-044133.0,f|D|G9,16:18:19.29|82.37,-4:41:33.04|40.1,3.24,2000 +SAO 159846|SD-14 4398|PPM 231511|J161900.42-145222.1,f|S|K4,16:19:0.42|-21.17,-14:52:22.17|-1.1,6.00,2000 +HD 146834|SD-19 4357|PPM 265395|J161907.72-201305.0,f|S|K5,16:19:7.72|16.89,-20:13:5.06|-15.3,6.30,2000 +HD 147352|BD+49 2491|PPM 55338|J161911.21+490217.3,f|S|K5,16:19:11.21|-21.34,49:2:17.37|33.4,5.92,2000 +Nor Lambda|HD 146667|CD-4211188|PPM 321585|J161917.63-424026.2,f|D|A3,16:19:17.64|6.62,-42:40:26.30|-10.3,5.44,2000 +HD 146836|CD-3013041|PPM 294924|J161932.73-305424.1,f|D|F6,16:19:32.74|82.88,-30:54:24.18|21.8,5.50,2000 +Her Tau-22|Tau Herculis|HD 147394|BD+46 2169|PPM 55342|J161944.43+461848.1,f|D|B5,16:19:44.44|-13.16,46:18:48.12|39.3,3.90,2000 +Nor Gamma2|SAO 243643|HD 146686|CD-4910536|PPM 344876|J161950.42-500919.8,f|D|G8,16:19:50.42|-159.34,-50:9:19.83|-52.8,4.01,2000 +HD 147365|BD+40 3005|PPM 79227|J161955.14+394230.9,f|D|F3,16:19:55.14|-129.36,39:42:30.90|-2.5,5.49,2000 +V20590|HD 147266|BD+21 2902|J162004.27+210757.3,f|V|G8,16:20:4.28|-23.65,21:7:57.40|-51.9,6.04,2000 +Aps Delta1|Delta1 Apodis|HD 145366|CP-78 1092|J162020.80-784144.6,f|D|M5,16:20:20.81|-9.91,-78:41:44.68|-36.6,4.74,2000 +SAO 243654|CP-54 7493|PPM 344891|J162025.25-550822.9,f|S|K0,16:20:25.25|19.63,-55:8:22.94|-14.3,5.75,2000 +Aps Delta2|SAO 257381|HD 145388|CP-78 1093|J162026.85-784002.9,f|S|K3,16:20:26.86|-1.68,-78:40:2.98|-31,5.26,2000 +HD 146954|CD-3910412|PPM 294947|J162032.61-392549.2,f|D|B9,16:20:32.62|-14.13,-39:25:49.24|-45,6.11,2000 +Sco Omicron-19|V7632|SAO 184329|CD-2312849|PPM 265428|J162038.18-241009.5,f|V|A5,16:20:38.18|-4.24,-24:10:9.55|-14.7,4.59,2000 +Alniyat|Sco Sigma-20A|ig Sco|SAO 184336|HD 147165|CD-2511485|J162111.31-253534.0,f|D|B1,16:21:11.32|-10.01,-25:35:34.07|-18,2.91,2000 +HD 148293|BD+69 845|PPM 19847|HR 6126|J162148.71+690633.8,f|S|K2,16:21:48.71|-18.51,69:6:33.81|-10.6,5.27,2000 +Her Gamma-20A|Gamma Herculis|HD 147547|BD+19 3086|PPM 132244|J162155.21+190911.2,f|D|A9,16:21:55.21|-47.47,19:9:11.27|44.6,3.74,2000 +Ser Sigma-50|HD 147449|BD+01 3215|J162204.34+010144.5,f|S|F0,16:22:4.35|-155.97,1:1:44.54|48.1,4.82,2000 +CrB Xi-19A|V20606|HD 147677|BD+31 2845|PPM 79251|J162205.82+305331.1,f|D|G9,16:22:5.82|-97.31,30:53:31.18|107.7,4.85,2000 +CrB Nu1-20A|V7676|HD 147749|BD+34 2773|PPM 79256|J162221.42+334756.5,f|D|M2,16:22:21.43|5.48,33:47:56.59|-38.3,5.21,2000 +SAO 226693|HD 147152|CD-4910591|PPM 321642|J162227.99-493420.4,f|S|B6,16:22:28.00|-12.35,-49:34:20.48|-26,5.33,2000 +SAO 226696|HD 147225|CD-4310724|PPM 321643|J162229.06-435443.3,f|D|G3,16:22:29.07|-8.43,-43:54:43.38|-11.3,5.91,2000 +CrB Nu2-21B|V20608|HD 147767|BD+34 2774|J162229.21+334212.5,f|D|K5,16:22:29.22|-5.24,33:42:12.52|50,5.40,2000 +SAO 141129|BD-01 3174|PPM 179793|J162238.90-020447.5,f|S|B9,16:22:38.91|-7.79,-2:4:47.53|-7.4,6.25,2000 +23 Her|HD 147835|BD+32 2716|PPM 79263|J162256.49+321958.8,f|D|A4,16:22:56.50|22.18,32:19:58.85|-7.1,6.41,2000 +V20627|HD 148374|BD+62 1478|PPM 19866|J162347.13+614148.2,f|D|G5,16:23:47.13|-29.52,61:41:48.30|34,5.67,2000 +V20627|HD 148374|BD+62 1478|PPM 19866|J162347.15+614147.2,f|D|G8,16:23:47.15|-29.52,61:41:47.26|34,5.67,2000 +Dra Eta-14A|V7713|HD 148387|BD+61 1591|PPM 19869|HR 6132|J162359.48+613051.1,f|D|G8,16:23:59.49|-16.96,61:30:51.17|56.7,2.73,2000 +V7680|HD 147513|CD-3810983|J162401.28-391134.7,f|V|G5,16:24:1.29|72.66,-39:11:34.73|3.4,5.37,2000 +Oph Psi-4|SAO 159892|SD-19 4365|J162406.18-200214.3,f|S|K0,16:24:6.18|-21.42,-20:2:14.38|-47.5,4.49,2000 +Her 21|SAO 121568|HD 147869|BD+07 3164|PPM 162584|HR 6111|J162410.82+065653.5,f|S|A2,16:24:10.83|4.62,6:56:53.55|14.7,5.83,2000 +DQ DRA|BD+55 1845|PPM 35449|HR 6127|J162425.33+551218.3,f|V|A2,16:24:25.34|11.90,55:12:18.34|20.7,5.75,2000 +V20610|HD 147628|CD-3710778|J162431.75-373357.7,f|D|B8,16:24:31.75|-14.03,-37:33:57.76|-30.4,5.42,2000 +SAO 184368|HD 147722|CD-2912513B|J162439.75-294212.3,f|D|G0,16:24:39.76|79.09,-29:42:12.33|-103.7,5.40,2000 +V20614|SAO 184369|HD 147723|CD-2912513A|PPM 265498|J162439.77-294216.7,f|D|G0,16:24:39.77|69.31,-29:42:16.79|-82.1,5.40,2000 +HD 147614|CD-4510633|PPM 321681|J162454.15-452058.1,f|D|A2,16:24:54.15|21.40,-45:20:58.20|-15.2,6.33,2000 +SAO 253539|HD 147349|CP-62 5325|J162522.12-630730.7,f|S|A1,16:25:22.13|-19.19,-63:7:30.78|8.7,6.14,2000 +Her 25|HD 148283|BD+37 2750|HR 6123|J162524.16+372338.6,f|S|A5,16:25:24.17|2.62,37:23:38.69|0.2,5.54,2000 +Kajam|Caiam|Her Omega-24A|Omega Herculis|HD 148112|BD+14 3049|HR 6117|J162524.95+140159.7,f|D|B9,16:25:24.95|39.44,14:1:59.77|-59.9,4.58,2000 +Oph Rho-5B|SAO 184381|HD 147934|CD-2312861B|HR 6113|J162535.03-232646.9,f|D|B2,16:25:35.03|-13.76,-23:26:46.99|-27.2,5.74,2000 +Oph Rho-5A|SAO 184382|HD 147933|CD-2312861A|PPM 265516|HR 6112|J162535.11-232649.8,f|D|B2,16:25:35.12|-5.64,-23:26:49.84|-25,4.57,2000 +HD 149681|BD+79 498|HR 6173|J162543.18+785749.8,f|S|F0,16:25:43.18|-113.05,78:57:49.87|104.2,5.56,2000 +HD 148228|BD+11 2984|PPM 132324|HR 6121|J162611.38+112426.9,f|S|G8,16:26:11.39|-48.08,11:24:26.97|13,6.11,2000 +HD 148287|BD+02 3106|PPM 162648|HR 6124|J162650.07+022052.5,f|S|G8,16:26:50.07|20.98,2:20:52.60|-16.4,6.06,2000 +Oph Chi-7|Chi Ophiuchi|SAO 159918|HD 148184|SD-18 4282|HR 6118|J162701.43-182722.5,f|S|B2,16:27:1.43|-5.55,-18:27:22.50|-22.2,4.26,2000 +Nor Epsilon|SAO 226773|HD 147971|CD-4710765|PPM 321736|HR 6115|J162711.03-473317.2,f|D|B4,16:27:11.04|-13.77,-47:33:17.23|-20.6,4.53,2000 +V20644|SAO 121614|BD+03 3199|PPM 162664|J162732.27+025214.2,f|V|K5,16:27:32.27|6.44,2:52:14.28|-10.4,6.40,2000 +V2105 OPH|SAO 141186|HD 148349|SD-07 4292|PPM 199686|HR 6128|J162743.45-073552.5,f|V|M3,16:27:43.46|-0.89,-7:35:52.55|-153.4,5.25,2000 +Oph Upsilon-3A|V7738|SAO 141187|HD 148367|SD-08 4243|PPM 199688|HR 6129|J162748.18-082218.2,f|D|A3,16:27:48.19|-67.23,-8:22:18.23|-12.6,4.64,2000 +TrA Iota|Iota Trianguli Australis|SAO 253555|HD 147787|CP-63 3923|J162757.34-640328.5,f|D|F4,16:27:57.34|52.69,-64:3:28.59|26.1,5.29,2000 +Dra 15|HD 149212|BD+69 850|PPM 19895|HR 6161|J162759.01+684605.2,f|S|A0,16:27:59.01|-24.55,68:46:5.29|33.8,4.97,2000 +HD 148247|CD-3610783|HR 6122|J162814.46-371047.5,f|S|K1,16:28:14.47|15.06,-37:10:47.57|-26.9,5.79,2000 +SAO 243836|HD 147977|CP-58 6800|HR 6114|J162815.15-583559.2,f|S|B9,16:28:15.16|-22.20,-58:35:59.26|-35.3,5.68,2000 +TrA Zeta|SAO 253554|HD 147584|CP-69 2558|J162828.14-700503.8,f|S|F9,16:28:28.14|199.88,-70:5:3.84|110.8,4.91,2000 +SAO 121623|HD 148513|BD+00 3529|PPM 162683|HR 6136|J162833.98+003954.0,f|S|K4,16:28:33.98|7.05,0:39:54.01|-68,5.39,2000 +Her 30|g HER|HD 148783|BD+42 2714|PPM 55445|HR 6146|J162838.54+415254.0,f|V|M6,16:28:38.55|29.15,41:52:54.04|-5.5,4.90,2000 +SAO 121627|HD 148531|BD+00 3530|J162842.31+000317.4,f|S|K5,16:28:42.32|-61.65,0:3:17.48|-98.1,6.46,2000 +BD+51 2106|PPM 35484|J162843.44+512427.8,f|D|G9,16:28:43.44|34.25,51:24:27.86|7.1,6.30,2000 +Antares|Vespertilio|Cor Scorpii|Kalb al Akrab|Sco Alpha-21A|Alpha Scorpii|SAO 184415|HD 148478|CD-2611359A|PPM 265579|HR 6134|J162924.46-262555.2,f|D|M1,16:29:24.46|-10.21,-26:25:55.21|-23.2,1.07,2000 +QU NOR|SAO 226813|HD 148379|CD-4510697|PPM 321788|HR 6131|J162942.32-461435.6,f|V|B1,16:29:42.33|-3.42,-46:14:35.62|-3.8,5.35,2000 +V0378 NOR|SAO 243874|HD 148218|CP-57 8035|PPM 345112|J162945.21-574522.7,f|V|G8,16:29:45.22|-2.40,-57:45:22.76|-2.3,6.07,2000 +SAO 159948|SD-14 4433|J162946.92-143303.1,f|S|G2,16:29:46.92|33.68,-14:33:3.17|7.6,5.67,2000 +Her 34|BD+49 2514|HR 6156|J163006.03+485739.9,f|S|A1,16:30:6.04|-48.36,48:57:39.92|-56.5,6.44,2000 +Sco 22|V20658|SAO 184429|CD-2412695|PPM 265598|HR 6141|J163012.47-250654.8,f|V|B2,16:30:12.48|-3.40,-25:6:54.81|-26.5,4.79,2000 +Kornephoros|Rutilicus|Her Beta-27A|V7778|HD 148856|BD+21 2934|HR 6148|J163013.20+212922.6,f|D|G7,16:30:13.20|-98.40,21:29:22.61|-14.5,2.78,2000 +HD 148743|SD-07 4305|PPM 199723|HR 6144|J163030.01-073052.0,f|S|A7,16:30:30.02|2.53,-7:30:52.02|2.7,6.48,2000 +V7785|HD 148897|BD+20 3283|HR 6152|J163033.54+202845.0,f|V|G8,16:30:33.55|-89.51,20:28:45.08|-64.9,5.24,2000 +BD+77 627|PPM 9233|HR 6191|J163038.80+772647.4,f|S|K1,16:30:38.80|-103.74,77:26:47.45|272.9,6.36,2000 +SAO 253582|HD 148291|CP-61 5701|PPM 362127|HR 6125|J163049.35-613800.6,f|S|K1,16:30:49.36|-11.40,-61:38:0.61|-9,5.18,2000 +Marfik|Marsic|Oph Lambda-10A|V7784|SAO 121658|HD 148857|BD+02 3118|HR 6149|J163054.82+015902.1,f|D|A0,16:30:54.82|-31.33,1:59:2.12|-73,3.90,2000 +V20676|BD+35 2828|PPM 79391|HR 6157|J163102.78+351330.2,f|V|K5,16:31:2.78|-9.07,35:13:30.25|-16.8,6.28,2000 +Oph Phi-8A|SAO 159963|HD 148786|SD-16 4298|PPM 231795|HR 6147|J163108.36-163645.8,f|D|G8,16:31:8.37|-44.56,-16:36:45.84|-38,4.29,2000 +V20675|BD+22 2983|HR 6154|J163113.43+221143.6,f|V|K7,16:31:13.43|-10.28,22:11:43.65|7.8,5.77,2000 +SAO 184437|CD-2611379|PPM 265618|HR 6145|J163122.85-263215.5,f|S|K1,16:31:22.85|-28.18,-26:32:15.52|-37.6,6.08,2000 +CD-3411044|PPM 295143|HR 6143|J163122.93-344215.7,f|S|B2,16:31:22.93|-11.47,-34:42:15.72|-18.6,4.24,2000 +BD+72 734|PPM 9236|J163128.22+723644.4,f|S|K2,16:31:28.23|-36.94,72:36:44.42|55.7,6.28,2000 +V1058 SCO|SAO 226855|HD 148688|CD-4110695|PPM 321837|HR 6142|J163141.76-414901.7,f|D|B1,16:31:41.77|-3.47,-41:49:1.72|-1.1,5.32,2000 +BD+45 2422A|PPM 55489|HR 6162|J163147.22+453553.8,f|D|A4,16:31:47.23|-7.87,45:35:53.81|39.9,5.67,2000 +Oph Omega-9|Omega Ophiuchi|HD 148898|SD-21 4381|PPM 265642|HR 6153|J163208.19-212759.0,f|S|A7,16:32:8.20|20.24,-21:27:59.00|36.2,4.44,2000 +BD+61 1598|PPM 19934|J163225.68+604923.9,f|S|A2,16:32:25.68|20.62,60:49:23.96|-9.8,5.93,2000 +Her 28|SAO 121676|HD 149121|BD+05 3223|PPM 162766|HR 6158|J163235.68+053116.3,f|S|B9,16:32:35.69|15.53,5:31:16.39|-0.4,5.63,2000 +Her 29|V7812|HD 149161|BD+11 3008|PPM 132428|HR 6159|J163236.29+112916.9,f|V|K4,16:32:36.29|-178.45,11:29:16.95|-79.2,4.84,2000 +Aps Gamma|HD 147675|CP-78 1103|PPM 373122|J163327.08-785349.7,f|S|G8,16:33:27.08|-125.68,-78:53:49.73|-77.6,3.87,2000 +Nor Mu|Mu Normae|CD-4310900|PPM 321884|HR 6155|J163405.02-440243.1,f|S|B0,16:34:5.02|0.54,-44:2:43.13|-2.5,4.92,2000 +Her Sigma-35|V7837|BD+42 2724|HR 6168|J163406.18+422613.3,f|D|B9,16:34:6.18|-9.08,42:26:13.35|59.8,4.21,2000 +HD 148488|CP-70 2256|PPM 373127|HR 6135|J163419.34-705917.1,f|S|K0,16:34:19.34|-16.37,-70:59:17.15|-13.3,5.49,2000 +V7829|SAO 226926|HD 149174|CD-4410964|J163507.74-451439.7,f|V|K2,16:35:7.75|-30.52,-45:14:39.72|-62.1,6.43,2000 +HD 149632|BD+17 3053|PPM 132472|HR 6169|J163526.28+170326.4,f|D|A2,16:35:26.29|-8.32,17:3:26.43|-1.4,6.41,2000 +TrA Theta|SAO 253614|CP-65 3331|PPM 362183|HR 6151|J163544.81-652943.4,f|S|G8,16:35:44.82|33.91,-65:29:43.44|-28.8,5.50,2000 +Al Niyat|Sco Tau-23|SAO 184481|HD 149438|CD-2711015|HR 6165|J163552.95-281257.6,f|S|B0,16:35:52.95|-8.59,-28:12:57.66|-22.5,2.83,2000 +BD+46 2194|PPM 55531|HR 6183|J163611.20+463647.9,f|S|G8,16:36:11.20|-11.23,46:36:48.00|3.3,5.82,2000 +Dra 16C|BD+53 1875|PPM 35547|HR 6184|J163611.42+525400.1,f|D|B9,16:36:11.42|-12.94,52:54:0.17|28.7,5.52,2000 +Dra 17A|BD+53 1876A|PPM 35549|HR 6185|J163613.72+525527.9,f|D|B9,16:36:13.72|-12.30,52:55:27.92|27.4,5.08,2000 +Oph 12|V2133 OPH|SAO 141269|HD 149661|SD-02 4211|PPM 179865|HR 6171|J163621.44-021928.5,f|V|K2,16:36:21.45|455.18,-2:19:28.50|-307.6,5.77,2000 +V7844|HD 149447|CD-3411112|PPM 295235|HR 6166|J163622.47-351519.1,f|V|K6,16:36:22.47|14.70,-35:15:19.17|12.1,4.17,2000 +V0918 SCO|SAO 226953|CD-4211399|PPM 321934|HR 6164|J163622.56-425131.9,f|V|O9,16:36:22.56|-4.40,-42:51:31.90|-3,5.47,2000 +V0773 HER|HD 149822|BD+15 3029|PPM 132495|HR 6176|J163642.94+152950.8,f|V|B9,16:36:42.94|-14.74,15:29:50.84|-30.4,6.37,2000 +V20724|BD+63 1289|PPM 19971|HR 6198|J163654.99+630422.1,f|V|K5,16:36:54.99|4.28,63:4:22.17|-88.1,6.16,2000 +Oph Zeta-13|Zeta Ophiuchi|HD 149757|SD-10 4350|PPM 231915|HR 6175|J163709.53-103401.5,f|S|O9,16:37:9.54|13.12,-10:34:1.52|25.4,2.58,2000 +SAO 121738|BD+05 3240|PPM 162888|J163733.75+051639.0,f|S|K0,16:37:33.76|-7.77,5:16:39.09|-12.5,6.48,2000 +BD+13 3177|HR 6181|J163748.01+134113.3,f|S|F5,16:37:48.01|-32.06,13:41:13.32|-62.3,6.30,2000 +HD 151623|BD+79 511|PPM 9274|HR 6238|J163752.73+785507.2,f|S|G9,16:37:52.73|-24.19,78:55:7.20|42.5,6.32,2000 +BD+56 1907|HR 6199|J163800.46+560055.9,f|S|K1,16:38:0.47|6.04,56:0:55.94|62.1,5.28,2000 +V20720|SAO 141284|HD 149911|SD-06 4467|PPM 199844|HR 6179|J163801.55-063216.8,f|V|A0,16:38:1.55|-7.45,-6:32:16.85|-9.2,6.07,2000 +V1003 SCO|SAO 226989|HD 149711|CD-4310959|HR 6174|J163826.29-432354.3,f|D|B2,16:38:26.29|-11.66,-43:23:54.33|-20.6,5.86,2000 +Her 42|V7896|BD+49 2531|PPM 55566|J163844.84+485542.0,f|D|M2,16:38:44.85|-48.09,48:55:42.03|26.8,4.88,2000 +V7877|SAO 141291|SD-08 4282|PPM 199862|J163847.72-083706.9,f|V|K5,16:38:47.73|2.82,-8:37:7.00|-10.2,6.47,2000 +V20716|SAO 253638|HD 149485|CP-60 6594|PPM 362223|HR 6167|J163852.70-605925.4,f|V|B7,16:38:52.70|-3.64,-60:59:25.45|-34.4,6.16,2000 +HD 149886|CD-3610879|PPM 295311|HR 6178|J163905.22-371302.5,f|D|B9,16:39:5.23|-11.83,-37:13:2.53|-43.9,5.93,2000 +SAO 141298|SD-09 4430|PPM 199875|HR 6189|J163939.12-093316.5,f|S|F3,16:39:39.13|11.24,-9:33:16.52|-146.8,6.33,2000 +SAO 184541|SD-20 4537|PPM 265793|J164034.51-202431.1,f|S|G5,16:40:34.52|15.89,-20:24:31.14|28.4,6.25,2000 +Her 37A|SAO 121776|BD+04 3235|PPM 162961|HR 6195|J164038.68+041311.2,f|D|A1,16:40:38.69|-0.30,4:13:11.24|-10.7,5.78,2000 +V0872 ARA|HD 149989|CD-5110403|PPM 345296|J164044.40-512841.7,f|V|A8,16:40:44.40|12.43,-51:28:41.74|130.1,6.29,2000 +SAO 253651|HD 149837|CP-60 6603|PPM 362245|HR 6177|J164050.48-602647.1,f|D|F2,16:40:50.48|58.30,-60:26:47.19|-73,6.22,2000 +BD+12 3063|PPM 132557|J164051.34+122342.1,f|S|A3,16:40:51.34|-30.62,12:23:42.16|-5.5,6.08,2000 +Dra 18|BD+64 1145|HR 6223|J164055.11+643520.5,f|S|K0,16:40:55.12|-0.06,64:35:20.57|-16.2,4.84,2000 +SD-08 4287|PPM 199894|J164056.40-081834.6,f|S|K0,16:40:56.41|-11.28,-8:18:34.66|-0.7,6.49,2000 +BD+25 3115|J164100.58+245131.3,f|S|K2,16:41:0.58|-34.43,24:51:31.34|2,6.07,2000 +BD-00 3168|PPM 179891|J164111.54-010001.1,f|S|A7,16:41:11.54|20.25,-1:0:1.12|-11.5,6.26,2000 +SAO 121783|BD+01 3286|PPM 162976|J164116.73+011443.6,f|S|K0,16:41:16.73|-13.35,1:14:43.60|-16,6.39,2000 +Her Zeta-40|V7915|BD+31 2884|PPM 79555|HR 6212|J164117.16+313609.8,f|D|G0,16:41:17.16|-462.60,31:36:9.81|345.1,2.85,2000 +V20732|CD-4811070|HR 6187|J164120.41-484546.6,f|D|O5,16:41:20.41|-1.19,-48:45:46.64|5.5,5.57,2000 +TrA Eta1|SAO 253649|HD 149671|CP-68 2789|PPM 362256|HR 6172|J164123.10-681746.0,f|S|B7,16:41:23.11|-14.09,-68:17:46.04|-11.8,5.89,2000 +SD-17 4618|HR 6196|J164134.38-174431.8,f|S|G7,16:41:34.38|-21.72,-17:44:31.80|-0.9,4.92,2000 +SAO 184549|CD-2412765|HR 6193|J164136.17-242804.6,f|S|F0,16:41:36.18|-54.75,-24:28:4.67|-9.5,6.07,2000 +Her 39|BD+27 2668|HR 6213|J164136.69+265500.7,f|S|F2,16:41:36.70|0.94,26:55:0.77|-44.8,5.92,2000 +CD-4910890|HR 6188|J164140.22-493905.5,f|S|B1,16:41:40.23|-2.82,-49:39:5.59|-2.7,5.66,2000 +Oph 14|BD+01 3290|PPM 162985|J164142.48+011052.4,f|S|F2,16:41:42.48|-101.98,1:10:52.43|53.4,5.73,2000 +CD-3211913|PPM 295371|HR 6192|J164145.45-330844.7,f|S|G3,16:41:45.45|-58.78,-33:8:44.73|-56.8,5.84,2000 +SD-19 4406|J164153.69-195527.7,f|D|F4,16:41:53.69|28.20,-19:55:27.76|42,5.57,2000 +BD+50 2319|J164227.81+495611.1,f|S|F8,16:42:27.81|133.43,49:56:11.19|-107.8,6.47,2000 +V7904|SAO 253672|CP-62 5422|PPM 362279|J164248.41-623314.1,f|D|K3,16:42:48.42|-1.11,-62:33:14.15|-8.7,6.20,2000 +Her Eta-44A|V7934|BD+39 3029|PPM 79578|J164253.76+385520.1,f|D|G7,16:42:53.77|35.59,38:55:20.12|-85,3.48,2000 +V7945|HD 151199|BD+55 1872|PPM 35598|HR 6226|J164258.45+554124.4,f|V|A2,16:42:58.46|55.80,55:41:24.43|80.3,6.18,2000 +CD-4510858|HR 6197|J164303.56-460413.0,f|S|F5,16:43:3.57|-0.42,-46:4:13.05|-3.9,6.27,2000 +Aps Beta|SAO 257424|HD 149324|CP-77 1221|PPM 373182|HR 6163|J164304.65-773102.7,f|D|K0,16:43:4.66|-282.84,-77:31:2.77|-355,4.23,2000 +BD+77 634|HR 6267|J164306.28+773050.3,f|D|F4,16:43:6.29|56.40,77:30:50.30|206.5,6.02,2000 +V20735|SAO 253673|CP-67 3196|PPM 362284|HR 6182|J164322.13-672556.5,f|V|A0,16:43:22.14|15.60,-67:25:56.59|-31.1,6.02,2000 +CD-3113161|HR 6211|J164338.72-320621.4,f|S|B8,16:43:38.72|-9.40,-32:6:21.40|-23,6.47,2000 +SAO 227118|CD-4010649|J164345.67-410709.1,f|D|A4,16:43:45.68|-31.30,-41:7:9.13|-26.4,6.22,2000 +CD-3710942|PPM 295415|J164347.59-380922.8,f|D|B9,16:43:47.60|-9.67,-38:9:22.85|-43.2,6.05,2000 +BD+34 2830|PPM 79591|HR 6222|J164351.68+340219.6,f|S|F2,16:43:51.69|-72.96,34:2:19.69|57.6,6.02,2000 +V20747|SAO 227123|CD-4010653|J164354.07-410648.0,f|D|B6,16:43:54.08|-10.74,-41:6:48.04|-20.7,6.13,2000 +CP-5210161|J164439.74-530908.3,f|D|G8,16:44:39.74|-10.70,-53:9:8.33|-9.7,5.97,2000 +SAO 227146|CD-4010661|PPM 322118|HR 6214|J164442.59-405022.8,f|D|B3,16:44:42.59|-11.58,-40:50:22.83|-21.6,5.65,2000 +V7944|CD-2812358|PPM 265899|HR 6218|J164500.18-283034.7,f|D|A3,16:45:0.19|-28.21,-28:30:34.77|-0.5,5.99,2000 +HD 151388|BD+43 2642|PPM 55635|J164511.79+431301.8,f|S|K4,16:45:11.80|-8.64,43:13:1.81|-50.5,6.06,2000 +HD 151613|BD+57 1702|PPM 35619|HR 6237|J164517.81+564654.6,f|D|F2,16:45:17.82|26.30,56:46:54.69|70,4.85,2000 +V7950|BD+16 3013|PPM 132638|HR 6227|J164522.51+154443.0,f|V|M3,16:45:22.52|24.11,15:44:43.04|-50.6,5.63,2000 +Oph 16|V20762|SAO 121834|HD 151133|BD+01 3298|HR 6224|J164529.67+010112.5,f|V|B9,16:45:29.67|-3.90,1:1:12.58|6.6,6.02,2000 +Her 43A|V7952|SAO 121843|HD 151217|BD+08 3271|HR 6228|J164549.89+083457.4,f|D|K5,16:45:49.89|-2.82,8:34:57.42|15.7,5.14,2000 +UMi Epsilon-22|Epsilon Ursae Minoris|HD 153751|BD+82 498|PPM 2925|HR 6322|J164558.24+820214.1,f|D|G5,16:45:58.24|19.53,82:2:14.14|4.7,4.22,2000 +SAO 227172|CD-4611008|PPM 322146|J164606.37-463155.1,f|S|A1,16:46:6.37|-3.30,-46:31:55.19|-32.4,6.47,2000 +SAO 244122|CP-58 6889|PPM 345372|HR 6215|J164621.22-583012.9,f|S|B2,16:46:21.23|-2.19,-58:30:12.94|-10.8,5.74,2000 +LP TRA|SAO 253688|CP-66 3009|J164639.99-670634.8,f|D|Ap,16:46:39.99|-15.23,-67:6:34.89|-13.3,5.11,2000 +CD-3910677|PPM 295474|HR 6221|J164647.95-392237.0,f|S|K0,16:46:47.96|-17.62,-39:22:37.06|-26.2,5.49,2000 +Oph 19A|V7962|SAO 121859|HD 151431|BD+02 3175A|PPM 163115|HR 6232|J164709.75+020352.2,f|D|A3,16:47:9.75|-10.94,2:3:52.30|-15.2,6.07,2000 +V20763|SAO 244133|CP-58 6893|PPM 345385|HR 6219|J164719.65-582029.1,f|V|B0,16:47:19.66|-5.75,-58:20:29.19|-20.1,5.58,2000 +V0636 HER|HD 151732|BD+42 2749|PPM 55666|HR 6242|J164719.74+421420.1,f|V|M4,16:47:19.75|2.33,42:14:20.11|-25.3,5.92,2000 +Her 45|V0776 HER|SAO 121865|HD 151525|BD+05 3272|PPM 163126|HR 6234|J164746.41+051448.2,f|D|B9,16:47:46.42|-21.81,5:14:48.28|-38.7,5.22,2000 +HD 151627|BD+13 3225|PPM 132683|HR 6239|J164808.88+133525.0,f|S|G5,16:48:8.88|12.68,13:35:25.06|-17.3,6.38,2000 +HD 151527|SD-14 4486|PPM 232182|HR 6235|J164826.97-145433.9,f|S|A0,16:48:26.97|-17.10,-14:54:33.92|-8.8,6.04,2000 +TrA Alpha|CP-68 2822|HR 6217|J164839.89-690139.7,f|S|K2,16:48:39.89|17.88,-69:1:39.77|-32.9,1.91,2000 +Her 52A|V0637 HER|BD+46 2220|PPM 55686|HR 6254|J164914.21+455859.9,f|D|A2,16:49:14.22|22.83,45:58:59.96|-51.4,4.82,2000 +V1010 OPH|HD 151676|SD-15 4395|PPM 232198|J164927.67-154004.6,f|V|A5,16:49:27.67|1.01,-15:40:4.69|12.8,6.19,2000 +HD 151862|BD+13 3233|HR 6246|J164934.65+131540.1,f|D|A1,16:49:34.66|-29.05,13:15:40.11|-24.3,5.93,2000 +HD 152153|BD+43 2654|PPM 55693|HR 6256|J164940.56+432549.5,f|S|K0,16:49:40.57|-10.68,43:25:49.57|-9.4,6.17,2000 +Ara Eta|SAO 244168|HD 151249|CP-58 6906|PPM 345419|HR 6229|J164947.15-590228.9,f|D|K5,16:49:47.16|39.58,-59:2:28.96|-25.3,3.76,2000 +Oph 20|HD 151769|SD-10 4394|HR 6243|J164950.02-104658.7,f|S|F7,16:49:50.03|93.72,-10:46:58.80|-81.9,4.64,2000 +Sco Epsilon-26|V7983|CD-3411285|PPM 295532|HR 6241|J165009.81-341735.6,f|V|K2,16:50:9.81|-611.82,-34:17:35.63|-255.9,2.29,2000 +Her 47|V7990|SAO 121895|HD 151956|BD+07 3256|PPM 163177|J165019.38+071451.6,f|V|A3,16:50:19.38|51.78,7:14:51.66|-9,5.48,2000 +SAO 141393|SD-02 4259|HR 6248|J165022.25-023915.6,f|S|F1,16:50:22.25|2.40,-2:39:15.68|-44.9,6.32,2000 +HD 152262|BD+42 2753|HR 6264|J165036.09+415347.4,f|S|K5,16:50:36.09|-71.12,41:53:47.40|63,6.29,2000 +Her 50|V20792|HD 152173|BD+30 2884|HR 6258|J165038.95+294823.5,f|V|M1,16:50:38.96|-5.60,29:48:23.54|-3,5.72,2000 +HD 152224|BD+32 2795|PPM 79698|HR 6259|J165043.15+323313.2,f|S|K0,16:50:43.15|24.15,32:33:13.21|44.7,6.16,2000 +V20788|HD 151771|CD-3711023|PPM 295545|HR 6244|J165100.03-373052.2,f|D|B9,16:51:0.03|-6.42,-37:30:52.24|-12.6,6.22,2000 +Oph 21|SAO 121911|HD 152127|BD+01 3323|HR 6255|J165124.92+011257.4,f|D|A2,16:51:24.93|-17.25,1:12:57.41|-14,5.51,2000 +V0973 SCO|SAO 227313|CD-4110957|PPM 322283|HR 6245|J165133.72-411349.9,f|V|O8,16:51:33.72|0.56,-41:13:49.92|-0.4,5.25,2000 +Her 51|HD 152326|BD+24 3069|J165145.26+243923.1,f|S|K0,16:51:45.26|10.36,24:39:23.16|5.5,5.03,2000 +Sco Mu1|Mu1 Scorpii|CD-3711033|PPM 295564|HR 6247|J165152.23-380250.5,f|V|B1,16:51:52.23|-8.86,-38:2:50.57|-21.6,3.00,2000 +SAO 253717|HD 151441|CP-65 3365|PPM 362356|HR 6233|J165153.88-652231.6,f|S|B8,16:51:53.88|-1.19,-65:22:31.65|-13.4,6.13,2000 +Her 49|V0823 HER|BD+15 3066|PPM 132755|HR 6268|J165204.85+145827.1,f|V|B9,16:52:4.85|16.81,14:58:27.17|5.6,6.50,2000 +SAO 253718|CP-67 3232|HR 6231|J165217.70-674053.8,f|S|K2,16:52:17.70|-52.80,-67:40:53.88|-49.2,6.32,2000 +V0919 SCO|SAO 227328|HD 151932|CD-4110972|PPM 322298|HR 6249|J165219.24-415116.2,f|V|WN,16:52:19.25|-2.23,-41:51:16.25|-0.4,6.48,2000 +Sco Mu2|HD 151985|CD-3711037|PPM 295577|HR 6252|J165220.14-380103.1,f|S|B2,16:52:20.14|-12.88,-38:1:3.13|-23.8,3.56,2000 +V0911 SCO|SAO 227332|HD 151965|CD-4010841|J165227.41-404323.3,f|V|B9,16:52:27.42|-9.32,-40:43:23.35|-19.9,6.34,2000 +Her 53|HD 152598|BD+31 2925|PPM 79738|HR 6279|J165258.05+314206.0,f|D|F0,16:52:58.06|-91.12,31:42:6.03|-17.1,5.34,2000 +HD 152812|BD+47 2400|PPM 55743|HR 6286|J165317.55+472500.2,f|S|K2,16:53:17.56|-40.80,47:25:0.21|93.6,5.98,2000 +SAO 184754|HD 152311|SD-20 4572|HR 6269|J165325.22-202455.9,f|S|G3,16:53:25.22|-58.06,-20:24:56.00|-27.3,5.87,2000 +V1068 SCO|SAO 227359|HD 152161|CD-4211627|PPM 322331|HR 6257|J165342.42-430303.4,f|V|M3,16:53:42.42|-15.13,-43:3:3.49|-31.8,6.04,2000 +V0900 SCO|SAO 227374|HD 152235|CD-4111021|PPM 322341|HR 6261|J165358.85-415939.5,f|V|B1,16:53:58.85|-0.22,-41:59:39.58|-2.3,6.34,2000 +Sco Zeta1|Zeta1 Scorpii|SAO 227375|HD 152236|CD-4211633|PPM 322342|HR 6262|J165359.72-422143.2,f|V|B1,16:53:59.73|-0.44,-42:21:43.29|-2.2,4.77,2000 +SAO 244245|HD 151967|CP-57 8157|HR 6251|J165400.35-575434.2,f|S|M1,16:54:0.36|-40.80,-57:54:34.23|-122.5,5.92,2000 +Oph Iota-25|V8034|HD 152614|BD+10 3092|PPM 132794|HR 6281|J165400.47+100955.2,f|V|B8,16:54:0.47|-53.74,10:9:55.29|-34.7,4.37,2000 +SAO 227377|HD 152234|CD-4111024|PPM 322345|J165401.83-414823.0,f|D|B0,16:54:1.84|-1.79,-41:48:23.00|-2.5,5.45,2000 +V1007 SCO|SAO 227382|HD 152248|CD-4111033|PPM 322353|J165410.06-414930.1,f|D|O7,16:54:10.06|0.45,-41:49:30.14|-2.9,6.13,2000 +SAO 141427|HD 152569|BD-01 3268|PPM 179954|HR 6277|J165410.60-013644.2,f|D|F0,16:54:10.61|9.60,-1:36:44.30|-80.2,6.25,2000 +V8023|SAO 227383|HD 152249|CD-4111036|PPM 322355|HR 6263|J165411.63-415057.2,f|V|O9,16:54:11.63|-1.12,-41:50:57.22|-1,6.45,2000 +SAO 227392|HD 152293|CD-4211642|PPM 322365|HR 6266|J165426.94-422844.0,f|S|F5,16:54:26.94|0.55,-42:28:44.01|-6.3,5.85,2000 +SAO 227386|CD-4911036|PPM 322369|J165431.55-494238.8,f|S|K1,16:54:31.55|0.29,-49:42:38.88|-4.5,6.47,2000 +Sco Zeta2|V8028|HD 152334|CD-4211646|PPM 322371|HR 6271|J165435.00-422140.7,f|V|K4,16:54:35.01|-126.58,-42:21:40.73|-227.8,3.61,2000 +Oph 23|V20851|SAO 141431|SD-05 4374|J165435.69-060914.3,f|V|K2,16:54:35.69|-30.27,-6:9:14.34|-21.9,5.23,2000 +V20832|HD 152431|CD-3013594|PPM 295639|HR 6273|J165435.95-303514.4,f|V|A7,16:54:35.96|29.44,-30:35:14.43|-1.4,6.34,2000 +HD 152815|BD+21 3002|HR 6287|J165455.17+205730.5,f|S|G8,16:54:55.17|56.31,20:57:30.56|1.5,5.40,2000 +V8031|SAO 227425|CD-4010919|PPM 322393|HR 6272|J165458.50-410903.0,f|D|O8,16:54:58.51|-0.11,-41:9:3.09|-1.4,5.82,2000 +Her 56|HD 152863|BD+25 3156|HR 6292|J165502.16+254350.4,f|D|G5,16:55:2.16|20.13,25:43:50.45|-19.4,6.07,2000 +V20835|HD 152424|CD-4111068|PPM 322398|J165503.32-420526.9,f|V|O9,16:55:3.33|-0.67,-42:5:26.99|-2.7,6.32,2000 +V0644 HER|BD+13 3258|PPM 132819|J165515.99+133711.6,f|V|F3,16:55:15.99|37.03,13:37:11.68|-34.1,6.35,2000 +Her 54|HD 152879|BD+18 3266|HR 6293|J165522.16+182559.5,f|D|K4,16:55:22.17|-114.84,18:25:59.56|11.9,5.35,2000 +SAO 253734|CP-63 4032|PPM 362381|HR 6253|J165524.68-631610.7,f|D|A0,16:55:24.69|7.69,-63:16:10.77|-13.7,6.01,2000 +HD 152636|CD-3311570|PPM 295672|HR 6282|J165557.75-333024.7,f|S|K5,16:55:57.75|14.51,-33:30:24.75|6.5,6.31,2000 +Dra 19|V8078|HD 153597|BD+65 1157|HR 6315|J165601.68+650805.2,f|V|F6,16:56:1.69|238.04,65:8:5.26|50.8,4.88,2000 +HD 152781|SD-16 4371|PPM 232348|HR 6284|J165601.84-164822.5,f|D|K0,16:56:1.84|81.85,-16:48:22.55|31,6.33,2000 +V0846 ARA|HD 152478|CD-5010905|PPM 345531|HR 6274|J165608.84-504029.2,f|V|B3,16:56:8.84|-10.17,-50:40:29.24|-9.6,6.31,2000 +BD+73 751|PPM 9367|HR 6335|J165616.73+730740.3,f|S|F0,16:56:16.74|-0.87,73:7:40.32|-20.5,6.29,2000 +Dra 20A|V8081|HD 153697|BD+65 1159|HR 6319|J165625.26+650220.8,f|D|F1,16:56:25.27|-34.44,65:2:20.85|32.7,6.44,2000 +SAO 244285|HD 152527|CP-5210333|PPM 345535|HR 6275|J165628.76-521701.4,f|S|B9,16:56:28.77|-35.79,-52:17:1.49|-42.4,5.94,2000 +V0861 SCO|SAO 227473|HD 152667|CD-4010975|PPM 322438|HR 6283|J165635.97-404924.4,f|V|B0,16:56:35.98|0.34,-40:49:24.43|-0.2,6.18,2000 +Oph 24A|SAO 184822|HD 152849|CD-2211734|PPM 266171|HR 6291|J165648.03-230901.2,f|D|A0,16:56:48.04|-2.34,-23:9:1.25|-9.9,5.59,2000 +SAO 257446|CP-70 2326|PPM 373265|J165701.04-710641.9,f|D|A5,16:57:1.05|-8.45,-71:6:41.92|-35.9,6.46,2000 +SD-19 4471A|PPM 232367|HR 6294|J165703.98-193223.4,f|D|B6,16:57:3.98|-18.94,-19:32:23.48|-7,6.27,2000 +Sco 27|CD-3311590|HR 6288|J165711.17-331534.1,f|S|K5,16:57:11.18|5.90,-33:15:34.17|-9.6,5.48,2000 +SD-10 4417|PPM 232375|HR 6296|J165726.00-105748.1,f|S|G8,16:57:26.00|0.29,-10:57:48.14|-88.9,6.16,2000 +Her 57|HD 153287|BD+25 3166|J165731.04+252110.2,f|S|G5,16:57:31.05|8.00,25:21:10.23|15.9,6.27,2000 +HD 153226|BD+14 3155|PPM 132855|J165732.03+135302.8,f|S|K0,16:57:32.04|-80.96,13:53:2.81|69.7,6.36,2000 +Oph Kappa-27|Kappa Ophiuchi|SAO 121962|BD+09 3298|PPM 163313|HR 6299|J165740.09+092230.1,f|S|K2,16:57:40.10|-293.03,9:22:30.12|-9.7,3.19,2000 +HD 153312|BD+24 3095|J165742.30+242252.5,f|S|K0,16:57:42.31|6.42,24:22:52.54|-20.1,6.33,2000 +HD 153472|BD+42 2774|PPM 55811|HR 6313|J165750.17+423044.8,f|S|K3,16:57:50.18|-10.28,42:30:44.82|-41,6.36,2000 +SAO 244313|HD 152824|CD-5010924|HR 6289|J165817.93-503828.2,f|S|B9,16:58:17.94|-10.18,-50:38:28.27|-38.3,5.54,2000 +Ara Zeta|SAO 244315|HD 152786|CP-55 7766|PPM 345563|HR 6285|J165837.21-555924.5,f|S|K3,16:58:37.21|-18.29,-55:59:24.51|-35.3,3.11,2000 +HD 153229|SD-14 4509|PPM 232414|J165841.56-145210.8,f|S|F3,16:58:41.56|-2.03,-14:52:10.82|-25.1,6.47,2000 +V20871|CD-3711131|PPM 295736|HR 6298|J165852.25-373713.7,f|D|A3,16:58:52.25|3.21,-37:37:13.77|-28.1,6.05,2000 +HD 154319|BD+69 884|HR 6345|J165902.57+691110.4,f|S|K0,16:59:2.57|-0.16,69:11:10.49|-40.6,6.41,2000 +HD 153956|BD+56 1934|PPM 35752|J165921.51+564118.9,f|S|K5,16:59:21.51|-52.89,56:41:18.94|36.6,6.05,2000 +MX TRA|SAO 253756|HD 152564|CP-69 2666|PPM 362427|HR 6276|J165933.95-691605.3,f|V|Ap,16:59:33.96|-13.97,-69:16:5.39|-13.1,5.80,2000 +Ara Epsilon1|SAO 244331|CP-5210372|PPM 345574|HR 6295|J165935.04-530937.5,f|S|K4,16:59:35.05|1.17,-53:9:37.58|21.5,4.05,2000 +V20878|SAO 184892|HD 153336|CD-2412997|PPM 266246|J165957.70-250531.9,f|V|M3,16:59:57.71|2.72,-25:5:31.91|-15,5.90,2000 +SAO 244338|CP-54 7947|PPM 345585|HR 6297|J170006.27-543549.8,f|D|A5,17:0:6.28|-7.73,-54:35:49.84|-73,5.65,2000 +Oph 26|SAO 184897|HD 153363|CD-2413002|PPM 266252|J170009.51-245920.6,f|S|F4,17:0:9.51|49.08,-24:59:20.65|-54.9,5.74,2000 +SAO 227541|HD 153234|CD-4411339|J170014.24-445918.7,f|S|F3,17:0:14.25|-16.23,-44:59:18.77|-33.1,6.50,2000 +Her Epsilon-58|BD+31 2947|PPM 79844|HR 6324|J170017.37+305535.0,f|S|A0,17:0:17.37|-47.74,30:55:35.06|26.9,3.91,2000 +SAO 227542|HD 153221|CD-4811360|PPM 322511|J170026.96-483851.9,f|D|G8,17:0:26.96|-16.95,-48:38:51.93|-80.4,6.02,2000 +HD 153368|CD-3511236|PPM 295772|HR 6311|J170036.98-355602.8,f|S|K2,17:0:36.99|-8.02,-35:56:2.88|-64.4,5.94,2000 +HD 153834|BD+22 3045|HR 6325|J170058.13+223755.5,f|S|K5,17:0:58.14|-8.72,22:37:55.54|-23.3,5.66,2000 +CW OCT|SAO 258751|HD 148542|CP-86 333|HR 6139|J170058.51-862151.4,f|V|A2,17:0:58.52|8.21,-86:21:51.47|0,6.05,2000 +Oph 30|V8111|SAO 141483|HD 153687|SD-04 4215|HR 6318|J170103.60-041321.5,f|D|K4,17:1:3.60|-40.24,-4:13:21.52|-77.9,4.81,2000 +V8088|SAO 244356|CP-56 7940|J170107.02-563318.2,f|D|Ap,17:1:7.02|-2.48,-56:33:18.28|-25.6,6.44,2000 +HD 154391|BD+60 1728|HR 6348|J170116.92+603855.5,f|S|K1,17:1:16.92|-45.36,60:38:55.52|39.4,6.14,2000 +V0451 HER|HD 153882|BD+15 3095|PPM 132922|HR 6326|J170133.05+145658.9,f|D|B9,17:1:33.05|5.80,14:56:58.98|-1.1,6.28,2000 +Her 59|V20885|BD+33 2817|PPM 79867|HR 6332|J170136.36+333405.7,f|V|A3,17:1:36.36|2.50,33:34:5.77|0.3,5.28,2000 +V8183|HD 155154|BD+75 613|PPM 9394|HR 6379|J170140.11+751750.9,f|V|F0,17:1:40.11|14.16,75:17:50.99|-69.6,6.17,2000 +CD-5010955|PPM 345612|HR 6312|J170146.35-510751.5,f|D|A7,17:1:46.35|-11.01,-51:7:51.56|-42,6.42,2000 +V0828 ARA|SAO 244362|HD 153261|CP-58 6964|PPM 345613|J170147.38-585729.6,f|V|B2,17:1:47.39|-2.63,-58:57:29.68|-7.6,6.27,2000 +Oph 29|HD 153727|SD-18 4381|HR 6321|J170151.25-185307.9,f|S|K0,17:1:51.25|-30.51,-18:53:7.94|-17.2,6.29,2000 +HD 153613|CD-3113473|HR 6316|J170152.64-320836.6,f|D|B8,17:1:52.64|-9.65,-32:8:36.67|-48.4,5.02,2000 +HD 153914|BD+08 3337|PPM 163419|HR 6329|J170158.97+082702.4,f|D|A4,17:1:58.98|26.86,8:27:2.41|2.6,6.39,2000 +HD 154633|BD+64 1170|J170215.74+643602.6,f|S|G5,17:2:15.75|-20.33,64:36:2.66|34.3,6.09,2000 +HD 154126|BD+32 2835|PPM 79879|HR 6336|J170217.11+315302.8,f|S|K0,17:2:17.11|27.89,31:53:2.83|22.6,6.38,2000 +BD+25 3183|HR 6333|J170218.69+253020.2,f|S|G5,17:2:18.70|55.24,25:30:20.23|99.3,5.77,2000 +V8142|HD 154143|BD+14 3179|PPM 132946|HR 6337|J170307.87+140531.0,f|V|M3,17:3:7.87|25.90,14:5:31.01|-63.2,4.98,2000 +Ara Epsilon2|SAO 244388|CP-53 8316|PPM 345633|HR 6314|J170308.71-531413.3,f|D|F6,17:3:8.71|1.17,-53:14:13.30|-165.1,5.28,2000 +Her 61|V0931 HER|HD 154356|BD+35 2911|PPM 79896|HR 6346|J170330.21+352450.5,f|V|M4,17:3:30.21|28.97,35:24:50.58|-43.2,6.27,2000 +V8152|HD 154228|BD+13 3292|HR 6341|J170339.30+133619.2,f|D|A1,17:3:39.30|-21.43,13:36:19.25|-34,5.92,2000 +SAO 227588|HD 153791|CD-4611191|PPM 322556|HR 6323|J170341.68-470938.0,f|D|A2,17:3:41.68|-0.31,-47:9:38.06|5.3,6.07,2000 +V0923 SCO|CD-3711201|PPM 295844|HR 6327|J170350.94-380909.2,f|V|F4,17:3:50.94|90.47,-38:9:9.26|-34.7,5.91,2000 +BD+19 3218|PPM 132966|HR 6343|J170352.65+194125.8,f|D|K4,17:3:52.66|-22.88,19:41:25.85|8.6,6.40,2000 +HD 154431|BD+34 2890|HR 6351|J170353.57+344724.8,f|S|A5,17:3:53.58|-60.73,34:47:24.80|-6.1,6.09,2000 +HD 154278|BD+13 3295|PPM 132968|HR 6342|J170358.04+133402.7,f|D|K1,17:3:58.04|22.60,13:34:2.71|-130.2,6.06,2000 +HD 153716|CP-57 8265|PPM 345649|J170424.72-574243.8,f|S|B5,17:4:24.72|-3.53,-57:42:43.80|-24.4,5.74,2000 +HD 154441|BD+19 3220|PPM 132976|HR 6352|J170441.34+193556.7,f|D|B9,17:4:41.35|13.57,19:35:56.78|1.4,6.23,2000 +SAO 184999|SD-20 4627|PPM 266364|J170445.32-202940.9,f|S|B6,17:4:45.33|-5.48,-20:29:40.93|-24.6,6.30,2000 +V1073 SCO|CD-3311706|PPM 295869|HR 6334|J170449.35-340722.5,f|D|B1,17:4:49.35|1.99,-34:7:22.55|-3.2,4.86,2000 +V8185|HD 154732|BD+49 2583|HR 6363|J170449.77+484814.2,f|V|K1,17:4:49.77|26.77,48:48:14.25|-71.5,6.11,2000 +HD 154713|BD+44 2652|HR 6362|J170504.94+434844.0,f|S|A3,17:5:4.94|3.36,43:48:44.06|-0.1,6.45,2000 +CD-4511188|PPM 322571|HR 6331|J170505.36-453007.6,f|S|A2,17:5:5.37|-27.02,-45:30:7.66|-34.5,6.29,2000 +V2213 OPH|HD 154417|BD+00 3629|PPM 163495|HR 6349|J170516.81+004209.2,f|V|F8,17:5:16.82|-15.75,0:42:9.21|-335.1,6.00,2000 +Arrakis|Al Rakis|Dra Mu-21A|BD+54 1857A|J170520.11+542812.1,f|D|F7,17:5:20.12|-65.99,54:28:12.15|73.9,5.55,2000 +Dra Mu-21B|BD+54 1857B|HR 6369|J170520.20+542814.3,f|D|F7,17:5:20.20|-103.73,54:28:14.31|107.4,5.63,2000 +Her 60|HD 154494|BD+12 3142|PPM 132989|HR 6355|J170522.69+124426.9,f|D|A4,17:5:22.69|50.62,12:44:26.98|-11,4.88,2000 +SAO 141513|HD 154445|BD-00 3224|HR 6353|J170532.25-005331.4,f|S|B1,17:5:32.26|4.35,-0:53:31.45|-1.9,5.64,2000 +SAO 227615|HD 154153|CD-4311396|PPM 322584|HR 6338|J170548.47-440618.1,f|S|A4,17:5:48.47|11.42,-44:6:18.15|25,6.19,2000 +BD+09 3322|PPM 163519|HR 6358|J170609.64+094401.9,f|S|K5,17:6:9.65|7.84,9:44:1.93|5.4,6.37,2000 +HD 154418|SD-21 4512|J170611.80-213352.4,f|S|A3,17:6:11.80|-7.53,-21:33:52.50|-74.5,6.29,2000 +HD 154619|BD+10 3142|HR 6359|J170613.04+102713.9,f|S|G8,17:6:13.05|37.32,10:27:13.96|6.4,6.38,2000 +HD 154733|BD+22 3073|HR 6364|J170618.04+220502.9,f|D|K3,17:6:18.05|-97.85,22:5:2.95|-38.6,5.57,2000 +CD-3711274|HR 6344|J170620.18-371339.3,f|D|A2,17:6:20.19|-8.00,-37:13:39.32|-24.4,5.98,2000 +V1074 SCO|HD 154368|CD-3511306|HR 6347|J170628.36-352703.7,f|D|O9,17:6:28.37|2.44,-35:27:3.77|-3,6.17,2000 +SAO 141522|BD-01 3292|HR 6361|J170652.95-013922.2,f|D|A9,17:6:52.96|34.94,-1:39:22.27|-28.2,6.36,2000 +HD 154481|CD-2611896|PPM 266416|HR 6354|J170653.22-263046.8,f|S|A0,17:6:53.23|-2.68,-26:30:46.88|-12.7,6.27,2000 +BD+40 3103|PPM 55937|HR 6376|J170746.67+403057.7,f|S|A2,17:7:46.68|-37.06,40:30:57.79|-35.3,6.34,2000 +BD+31 2967|PPM 79956|J170800.69+311222.2,f|D|K3,17:8:0.69|-3.08,31:12:22.28|-19.4,6.43,2000 +BD+36 2827|PPM 79957|HR 6377|J170802.06+355606.6,f|D|A5,17:8:2.06|-24.29,35:56:6.62|-17.1,5.41,2000 +SAO 141528|HD 154895|BD-00 3230|HR 6367|J170813.65-010446.1,f|D|A1,17:8:13.65|-10.50,-1:4:46.11|-40.4,6.07,2000 +HD 154779|SD-17 4717|PPM 232651|HR 6365|J170814.85-173632.5,f|S|K0,17:8:14.86|4.58,-17:36:32.59|-35,5.98,2000 +HD 155328|BD+51 2178|PPM 35834|HR 6383|J170817.07+505032.1,f|D|A1,17:8:17.07|-7.67,50:50:32.18|25.7,6.46,2000 +Aldhibah|Eldsib|Dra Zeta-22|HD 155763|BD+65 1170|HR 6396|J170847.19+654252.8,f|D|B6,17:8:47.20|-20.79,65:42:52.86|19.2,3.18,2000 +HD 154783|CD-3013840|PPM 295967|HR 6366|J170847.53-302413.4,f|S|A/,17:8:47.54|-11.90,-30:24:13.43|-66.4,5.92,2000 +SAO 141535|HD 154962|SD-03 4063|HR 6372|J170854.51-035258.7,f|S|G5,17:8:54.52|-54.92,-3:52:58.77|-158.2,6.36,2000 +BD+40 3109|PPM 55963|HR 6388|J170933.24+404637.3,f|D|K3,17:9:33.25|-43.73,40:46:37.32|7.4,5.07,2000 +SD-10 4445|PPM 232685|HR 6375|J170947.95-103123.8,f|S|F5,17:9:47.95|54.71,-10:31:23.89|-108.6,5.43,2000 +SAO 253818|HD 154555|CP-61 5842|PPM 362533|HR 6356|J171006.27-614031.6,f|S|B8,17:10:6.28|-2.78,-61:40:31.64|-6.4,6.38,2000 +Sabik|Oph Eta-35A|HD 155125|SD-15 4467|PPM 232699|HR 6378|J171022.68-154329.6,f|D|A2,17:10:22.69|41.15,-15:43:29.68|97.7,2.43,2000 +HD 155711|BD+52 2032|HR 6395|J171030.63+522431.5,f|S|B9,17:10:30.63|-14.64,52:24:31.57|-8.8,6.30,2000 +SAO 227688|HD 154948|CD-4411502|PPM 322666|HR 6371|J171042.32-443327.7,f|D|G8,17:10:42.32|-33.24,-44:33:27.79|-69.1,5.06,2000 +Her 63|V0620 HER|HD 155514|BD+24 3140|HR 6391|J171103.16+241415.7,f|V|A8,17:11:3.16|-11.63,24:14:15.70|30.3,6.20,2000 +V0854 ARA|SAO 227699|CD-4811492|HR 6374|J171138.68-485224.2,f|V|M1,17:11:38.68|5.92,-48:52:24.24|-4.4,5.96,2000 +BD+49 2604|PPM 55997|HR 6399|J171140.27+494446.8,f|D|A5,17:11:40.27|19.29,49:44:46.88|18.7,6.16,2000 +SAO 122164|BD+08 3367|PPM 163642|J171145.23+075341.1,f|S|K0,17:11:45.24|33.13,7:53:41.14|13.6,6.34,2000 +Sco Eta|CD-4311485|PPM 322687|J171209.19-431421.0,f|S|F3,17:12:9.19|21.96,-43:14:21.08|-287.4,3.32,2000 +HD 155259|CD-3911182|HR 6381|J171216.20-393025.0,f|S|A1,17:12:16.20|-13.77,-39:30:25.02|-71.8,5.67,2000 +HD 155276|CD-3811632|HR 6382|J171216.56-384921.1,f|S|K0,17:12:16.57|17.41,-38:49:21.13|-47.6,6.29,2000 +SAO 257472|HD 154556|CP-70 2361|PPM 373365|HR 6357|J171219.93-704315.8,f|S|K1,17:12:19.93|49.03,-70:43:15.90|-78.2,6.21,2000 +SAO 185142|CD-2711516|PPM 266548|HR 6387|J171225.06-274543.6,f|S|B9,17:12:25.06|-7.96,-27:45:43.65|-48.4,6.12,2000 +Oph 37|HD 155644|BD+10 3165|PPM 133114|HR 6393|J171227.80+103506.6,f|D|M2,17:12:27.81|6.05,10:35:6.60|-25.2,5.33,2000 +HD 156295|BD+63 1336|HR 6421|J171232.57+625227.6,f|S|F0,17:12:32.58|15.94,62:52:27.61|48,5.55,2000 +CD-3212460|HR 6389|J171258.55-322617.9,f|D|B1,17:12:58.56|2.03,-32:26:18.00|-2,6.00,2000 +SAO 253827|CP-67 3296|PPM 362557|HR 6368|J171317.87-671147.7,f|D|K0,17:13:17.88|-156.27,-67:11:47.73|-90.1,5.88,2000 +V0829 ARA|SAO 244539|HD 155341|CP-56 8098|HR 6384|J171413.40-565318.6,f|V|M1,17:14:13.41|4.26,-56:53:18.70|-5.9,6.11,2000 +V0915 SCO|CD-3911212|HR 6392|J171427.65-394559.9,f|D|K0,17:14:27.65|-1.73,-39:45:59.94|-1.6,6.47,2000 +Rasalgethi|Ras Algethi|Her Alpha-64A|Alpha Herculis|BD+14 3207|J171438.85+142325.1,f|D|M5,17:14:38.86|-6.68,14:23:25.20|32.8,3.37,2000 +Her Alpha-64B|BD+14 3207|J171439.18+142323.9,f|D|G5,17:14:39.18|-6.68,14:23:23.98|32.8,5.33,2000 +Her Delta-65A|V8419|HD 156164|BD+25 3221|Sarin|J171501.91+245021.1,f|D|A3,17:15:1.91|-21.10,24:50:21.14|-157.7,3.13,2000 +Her Pi-67|V8431|HD 156283|BD+36 2844|HR 6418|J171502.83+364832.9,f|V|K3,17:15:2.83|-27.38,36:48:32.98|2.7,3.14,2000 +V1075 SCO|CD-3311875|HR 6397|J171519.24-333254.3,f|V|O7,17:15:19.25|0.13,-33:32:54.31|-3,5.62,2000 +SD-14 4585|PPM 232829|J171520.28-143502.9,f|D|K1,17:15:20.28|-18.87,-14:35:2.90|-5.9,6.00,2000 +Oph 36A|SAO 185198|HD 155886|CD-2612026A|PPM 266613|J171520.77-263606.1,f|D|K0,17:15:20.78|-506.44,-26:36:6.15|-1150.3,5.07,2000 +Oph 36B|SAO 185199|HD 155885|CD-2612026B|PPM 266613|J171520.97-263610.1,f|D|K1,17:15:20.98|-473.71,-26:36:10.19|-1143.9,4.33,2000 +HD 155826|CD-3811686|HR 6398|J171535.95-383538.0,f|D|F7,17:15:35.95|-169.88,-38:35:38.00|-388.8,5.95,2000 +HD 156284|BD+23 3070|HR 6419|J171541.46+234433.9,f|S|K2,17:15:41.47|-41.47,23:44:33.94|23.2,5.98,2000 +CD-3013968|PPM 296112|J171551.35-301238.6,f|S|B9,17:15:51.35|-14.39,-30:12:38.63|-45.3,6.20,2000 +V2215 OPH|SAO 185213|CD-2612036|PPM 266626|J171613.36-263246.1,f|D|K5,17:16:13.36|-479.72,-26:32:46.13|-1123.4,6.33,2000 +V2368 OPH|SAO 122224|BD+02 3283|PPM 163744|HR 6412|J171614.26+021110.3,f|V|A2,17:16:14.26|11.39,2:11:10.33|-17,6.19,2000 +HD 155974|CD-3511426|PPM 296118|J171621.60-354501.0,f|D|G0,17:16:21.60|-111.14,-35:45:1.07|-342.5,6.09,2000 +VW DRA|HD 156947|BD+60 1743|HR 6448|J171629.39+604014.2,f|V|K1,17:16:29.40|-40.85,60:40:14.21|14.4,6.32,2000 +U OPH|SAO 122226|HD 156247|BD+01 3408|PPM 163749|HR 6414|J171631.71+011237.9,f|D|B5,17:16:31.72|-4.35,1:12:37.96|-15.7,5.91,2000 +SAO 257478|HD 154972|CP-74 1610|PPM 373391|HR 6373|J171635.64-743158.8,f|S|A0,17:16:35.65|-23.88,-74:31:58.83|-52.4,6.23,2000 +Oph 41|SAO 141586|HD 156266|BD-00 3255|HR 6415|J171636.68-002643.0,f|D|K2,17:16:36.69|-33.15,-0:26:43.07|-63.9,4.74,2000 +SAO 141585|HD 156227|SD-06 4575|HR 6413|J171642.74-061441.9,f|S|K0,17:16:42.75|-8.80,-6:14:41.91|-7.6,6.08,2000 +UMi Lambda|Lambda Ursae Minoris|BD+88 112|HR 7394|J171656.46+890215.7,f|D|M1,17:16:56.46|-23.03,89:2:15.75|-3.1,6.34,2000 +CD-3212545|PPM 296131|J171703.64-323946.2,f|S|F6,17:17:3.65|-99.13,-32:39:46.22|-55.5,5.53,2000 +SAO 227778|HD 155985|CD-4411564|PPM 322765|J171705.54-444642.9,f|S|B0,17:17:5.54|1.60,-44:46:42.94|-3.5,6.49,2000 +Her 68|u HER|HD 156633|BD+33 2864|HR 6431|J171719.56+330600.3,f|D|B1,17:17:19.57|-3.64,33:6:0.36|-5.7,4.81,2000 +HD 156593|BD+23 3074|J171735.85+230526.2,f|S|K2,17:17:35.85|-2.90,23:5:26.26|-4.8,6.22,2000 +Her 69|V8489|HD 156729|BD+37 2864|HR 6436|J171740.25+371729.3,f|V|A2,17:17:40.25|-42.72,37:17:29.39|63.8,4.63,2000 +Oph Omicron-39A|SAO 185238|HD 156349|CD-2413255A|HR 6424|J171800.67-241712.8,f|D|K0,17:18:0.68|-59.48,-24:17:12.85|-7.7,5.11,2000 +HD 156653|BD+17 3216|PPM 133225|HR 6432|J171804.93+171904.3,f|S|A1,17:18:4.94|11.89,17:19:4.39|-11.1,6.01,2000 +HD 156462|SD-16 4470|PPM 232892|HR 6428|J171819.27-161842.7,f|S|M2,17:18:19.27|1.44,-16:18:42.76|10.5,6.29,2000 +V1077 SCO|HD 156325|CD-3212573|HR 6422|J171820.51-323311.1,f|D|B5,17:18:20.51|-2.15,-32:33:11.19|-7.4,6.37,2000 +HD 156891|BD+38 2910|HR 6444|J171823.27+384841.0,f|S|K0,17:18:23.27|-12.39,38:48:41.02|74.1,5.97,2000 +HD 156681|BD+11 3156|PPM 133229|HR 6433|J171836.99+105152.1,f|S|K4,17:18:36.99|8.10,10:51:52.11|-97.7,5.02,2000 +SAO 227813|HD 156293|CD-4311572|J171847.82-440747.0,f|S|B9,17:18:47.83|-11.74,-44:7:47.09|-16.1,5.75,2000 +HD 156874|BD+28 2719|HR 6443|J171848.52+284922.6,f|S|K0,17:18:48.53|47.97,28:49:22.68|-6.6,5.68,2000 +SAO 253867|HD 155951|CP-62 5518|PPM 362618|J171851.70-625228.4,f|S|K1,17:18:51.71|-58.54,-62:52:28.48|-24,6.50,2000 +V8482|HD 156384|CD-3411626|PPM 296186|HR 6426|J171857.17-345923.2,f|D|K3,17:18:57.18|1149.25,-34:59:23.25|-90.8,5.91,2000 +SAO 227816|HD 156274|CD-4611370|HR 6416|J171903.83-463810.4,f|D|G8,17:19:3.83|1035.19,-46:38:10.45|109.3,5.47,2000 +SAO 244613|CP-59 6954|PPM 345882|J171912.50-594140.6,f|D|K2,17:19:12.51|-1.74,-59:41:40.60|-8.4,5.90,2000 +SAO 244631|HD 156331|CD-4911324|PPM 345888|HR 6423|J171930.51-500349.5,f|D|F8,17:19:30.52|7.13,-50:3:49.55|-32.3,6.28,2000 +HD 158996|BD+80 544|HR 6529|J171937.11+800811.0,f|S|K5,17:19:37.11|18.50,80:8:11.04|0.2,5.72,2000 +HD 156717|SD-17 4773|PPM 232927|HR 6435|J171953.35-174523.5,f|D|A2,17:19:53.35|-3.14,-17:45:23.56|-26.6,6.03,2000 +SAO 141611|HD 156826|SD-05 4426|HR 6439|J171959.55-055503.0,f|S|G9,17:19:59.55|45.36,-5:55:3.03|-193.6,6.32,2000 +BD+25 3246|HR 6455|J172009.83+253215.3,f|S|A3,17:20:9.84|13.13,25:32:15.37|-16.9,5.37,2000 +V0656 HER|BD+18 3351|PPM 133269|HR 6452|J172018.87+180325.4,f|V|M2,17:20:18.87|8.98,18:3:25.49|-55.7,5.01,2000 +Her 74|V8556|HD 157325|BD+46 2293|HR 6464|J172021.12+461426.8,f|V|M0,17:20:21.12|-29.88,46:14:26.81|40.9,5.50,2000 +HD 157373|BD+48 2506|PPM 56115|HR 6467|J172033.77+481119.6,f|S|F4,17:20:33.78|207.20,48:11:19.65|-3.4,6.36,2000 +HD 156846|SD-19 4605|PPM 232949|HR 6441|J172034.31-192001.4,f|D|G3,17:20:34.31|-138.71,-19:20:1.49|-142.8,6.50,2000 +Her 72A|V8553|HD 157214|BD+32 2896|HR 6458|J172039.56+322803.8,f|D|G0,17:20:39.57|135.41,32:28:3.88|-1040.7,5.39,2000 +Ser Nu-53A|HD 156928|SD-12 4722|PPM 232954|HR 6446|J172049.66-125048.7,f|D|A2,17:20:49.66|42.70,-12:50:48.75|2.7,4.34,2000 +HD 156971|SD-10 4477|PPM 232957|HR 6449|J172052.63-104147.0,f|D|F1,17:20:52.63|51.88,-10:41:47.08|-22.6,6.46,2000 +Her 70A|HD 157198|BD+24 3167|HR 6457|J172054.20+242957.9,f|D|A2,17:20:54.21|-19.38,24:29:57.97|-1.9,5.13,2000 +Oph Xi-40|SAO 185296|HD 156897|SD-20 4731|PPM 266721|HR 6445|J172100.37-210646.5,f|D|F1,17:21:0.37|261.95,-21:6:46.56|-204.7,4.39,2000 +HD 157358|BD+28 2728|HR 6466|J172131.23+284529.1,f|D|G0,17:21:31.24|12.23,28:45:29.16|0.8,6.39,2000 +HD 157257|BD+16 3163|PPM 133289|HR 6463|J172133.44+164352.4,f|S|M2,17:21:33.44|-6.46,16:43:52.42|-15.5,6.36,2000 +SAO 185313|HD 156992|CD-2413288|PPM 266746|J172141.56-245421.9,f|S|K3,17:21:41.56|-34.28,-24:54:21.97|-38.5,6.36,2000 +V0819 HER|HD 157482|BD+40 3136|HR 6469|J172143.61+395828.7,f|D|G5,17:21:43.62|5.63,39:58:28.73|-65.6,5.56,2000 +HD 157681|BD+53 1937|PPM 35943|HR 6479|J172145.36+532513.5,f|S|K4,17:21:45.37|18.50,53:25:13.54|2.6,5.68,2000 +Aps Zeta|SAO 253882|HD 156277|CP-67 3310|PPM 362645|HR 6417|J172159.47-674614.4,f|S|K2,17:21:59.48|-37.11,-67:46:14.41|-7.8,4.76,2000 +Oph Theta-42|Theta Ophiuchi|CD-2413292|PPM 266753|HR 6453|J172200.57-245958.3,f|S|B2,17:22:0.58|-8.84,-24:59:58.36|-23.6,3.26,2000 +Aps Iota|V8509|SAO 257491|CP-69 2719|PPM 373425|HR 6411|J172205.86-700723.5,f|D|B9,17:22:5.87|-1.73,-70:7:23.54|-12,5.40,2000 +CD-3511505|PPM 296259|HR 6454|J172237.96-355438.5,f|S|F7,17:22:37.97|88.20,-35:54:38.52|96.2,6.41,2000 +V0975 SCO|CD-3711507|J172239.21-374816.6,f|D|B4,17:22:39.22|-1.54,-37:48:16.69|0.1,6.37,2000 +SAO 141642|HD 157347|SD-02 4343|HR 6465|J172251.28-022317.4,f|S|G5,17:22:51.29|49.91,-2:23:17.43|-107.5,6.29,2000 +CD-3711512|PPM 296269|HR 6456|J172254.74-371314.8,f|D|K1,17:22:54.75|19.95,-37:13:14.83|-38.4,5.92,2000 +SAO 244678|HD 156768|CP-57 8478|PPM 345944|HR 6438|J172255.22-580037.1,f|D|G8,17:22:55.22|-5.56,-58:0:37.18|-15.6,5.86,2000 +SAO 244685|HD 156854|CP-56 8191|PPM 345949|HR 6442|J172307.12-563131.9,f|S|G8,17:23:7.12|7.45,-56:31:31.97|3.8,5.77,2000 +Ara Iota|Iota Arae|SAO 227886|CD-4711484A|PPM 322888|HR 6451|J172316.07-472805.5,f|D|B2,17:23:16.08|-6.69,-47:28:5.51|-17.6,5.26,2000 +Oph 43|HD 157236|CD-2813081|HR 6459|J172321.59-280834.1,f|S|K5,17:23:21.59|0.40,-28:8:34.19|-29.3,5.30,2000 +Her Rho-75B|HD 157778|BD+37 2878|HR 6484|J172340.71+370848.4,f|D|A0,17:23:40.72|-38.62,37:8:48.44|9.2,5.40,2000 +Her Rho-75A|V8605|HD 157779|BD+37 2878|HR 6485|J172340.94+370845.4,f|D|B9,17:23:40.94|-38.62,37:8:45.41|9.2,4.51,2000 +SAO 122346|HD 157617|BD+08 3405|PPM 163928|HR 6476|J172357.61+085109.2,f|S|K5,17:23:57.62|4.30,8:51:9.25|-6.9,5.76,2000 +HD 156838|CP-62 5558|PPM 362673|J172401.07-625150.9,f|S|B2,17:24:1.08|0.68,-62:51:50.95|-9,5.69,2000 +Her 73|V8606|HD 157728|BD+23 3100|J172406.58+225737.0,f|V|F0,17:24:6.59|-43.51,22:57:37.03|-36.8,5.71,2000 +SAO 227911|HD 157243|CD-4411669|J172413.08-440945.2,f|S|B7,17:24:13.09|-6.89,-44:9:45.27|-30.4,5.11,2000 +HD 156942|CP-60 6800|PPM 362676|HR 6447|J172418.79-604025.6,f|S|B8,17:24:18.80|0.51,-60:40:25.68|-12.3,5.77,2000 +BD+37 2882|HR 6491|J172427.11+365706.9,f|D|G5,17:24:27.12|-25.17,36:57:6.95|44.6,6.26,2000 +BD+16 3174|PPM 133351|HR 6481|J172431.53+161803.6,f|S|A3,17:24:31.54|12.53,16:18:3.62|-28.8,5.75,2000 +HD 157741|BD+15 3179|PPM 133352|HR 6482|J172433.79+153621.7,f|D|B9,17:24:33.80|6.93,15:36:21.77|11,6.39,2000 +HD 157546|SD-18 4516|HR 6473|J172437.03-182644.7,f|S|B9,17:24:37.04|14.66,-18:26:44.74|-8,6.34,2000 +SAO 185367|HD 157527|SD-21 4597|PPM 266825|HR 6472|J172442.03-212629.3,f|D|G8,17:24:42.03|-14.94,-21:26:29.32|-27,5.83,2000 +HD 158633|BD+67 1014|HR 6518|J172500.09+671824.1,f|S|K0,17:25:0.10|-531.01,67:18:24.14|3.6,6.42,2000 +HD 157486|CD-3411674|J172502.66-344145.8,f|S|A0,17:25:2.67|-1.97,-34:41:45.80|-18.9,6.14,2000 +SAO 185374|HD 157588|CD-2413325|PPM 266836|HR 6474|J172506.23-241437.2,f|S|K5,17:25:6.24|21.61,-24:14:37.26|11.9,6.17,2000 +Ara Beta|SAO 244725|HD 157244|CP-55 8100|PPM 345989|HR 6461|J172517.98-553147.5,f|S|K3,17:25:17.99|-8.23,-55:31:47.58|-24.7,2.82,2000 +Ara Gamma|SAO 244726|HD 157246|CP-56 8225|PPM 345992|HR 6462|J172523.65-562239.8,f|D|B1,17:25:23.66|-0.75,-56:22:39.82|-15.9,3.32,2000 +HD 158259|BD+52 2057|J172524.05+524726.4,f|S|G0,17:25:24.06|-90.89,52:47:26.46|-50.6,6.47,2000 +BD+60 1754|HR 6511|J172541.35+600254.2,f|S|A1,17:25:41.35|-8.09,60:2:54.23|23.6,5.65,2000 +V0640 HER|HD 157967|BD+17 3241|PPM 133376|HR 6495|J172554.36+165503.2,f|D|M4,17:25:54.36|-13.92,16:55:3.28|16.4,6.17,2000 +SAO 141661|HD 157856|BD-01 3329|HR 6489|J172557.87-013906.3,f|S|F3,17:25:57.88|61.77,-1:39:6.40|52.2,6.45,2000 +Ara Kappa|SAO 244734|HD 157457|CD-5011269|PPM 345998|HR 6468|J172600.04-503800.6,f|D|G8,17:26:0.04|15.79,-50:38:0.64|9.2,5.20,2000 +BD+27 2809|HR 6499|J172600.86+265243.4,f|D|A5,17:26:0.87|7.89,26:52:43.44|20.3,6.38,2000 +HD 158485|BD+58 1731|PPM 35978|HR 6514|J172604.83+583906.8,f|S|A4,17:26:4.84|-8.82,58:39:6.82|13.7,6.50,2000 +SAO 122381|HD 157978|BD+07 3368|HR 6497|J172619.00+073544.3,f|S|B9,17:26:19.01|0.00,7:35:44.34|-7.8,6.07,2000 +Oph 44|HD 157792|CD-2413337|PPM 266866|HR 6486|J172622.21-241031.1,f|S|A3,17:26:22.22|-1.92,-24:10:31.11|-117.7,4.16,2000 +Oph Sigma-49|SAO 122387|HD 157999|BD+04 3422|HR 6498|J172630.88+040825.2,f|S|K2,17:26:30.88|1.20,4:8:25.30|7.1,4.32,2000 +SAO 141665|SD-04 4275|HR 6493|J172637.88-050511.7,f|S|F3,17:26:37.88|-91.59,-5:5:11.74|-42.8,4.54,2000 +Her 77|HD 158414|BD+48 2517|PPM 56194|J172644.24+481536.2,f|S|A4,17:26:44.24|0.20,48:15:36.23|-3,5.84,2000 +HD 158261|BD+34 2971|J172646.14+344144.8,f|S|A0,17:26:46.15|-27.63,34:41:44.89|43,5.94,2000 +HD 158148|BD+20 3481|J172649.12+200451.5,f|S|B5,17:26:49.13|0.14,20:4:51.52|16.1,5.52,2000 +SAO 227971|CD-4511531B|PPM 322964|J172651.78-455035.5,f|D|B9,17:26:51.79|-3.45,-45:50:35.56|-30.5,6.47,2000 +SAO 227972|HD 157661|CD-4511531A|PPM 322964|HR 6477|J172651.97-455034.9,f|D|B7,17:26:51.98|-6.48,-45:50:34.91|-27.6,5.60,2000 +HD 157864|CD-2512160|PPM 266878|J172655.29-255636.4,f|S|A0,17:26:55.30|-9.71,-25:56:36.47|-26.8,6.41,2000 +SAO 244749|HD 157599|CD-5110881|HR 6475|J172656.36-515655.7,f|S|B8,17:26:56.36|15.07,-51:56:55.75|-13.5,6.18,2000 +HD 157968|SD-12 4750|HR 6496|J172702.14-123044.9,f|S|F7,17:27:2.15|41.00,-12:30:44.96|-63.4,6.21,2000 +HD 157969|SD-15 4554|J172709.88-155112.0,f|S|K0,17:27:9.88|-6.06,-15:51:12.10|-8.5,6.49,2000 +SAO 244755|HD 157662|CD-5011283|HR 6478|J172712.46-503749.3,f|D|B9,17:27:12.46|3.04,-50:37:49.33|-1.9,5.91,2000 +Oph 45|SAO 185412|HD 157919|CD-2913557|PPM 266888|HR 6492|J172721.27-295201.3,f|S|F5,17:27:21.27|14.44,-29:52:1.32|-137.4,4.28,2000 +SAO 185417|HD 157955|CD-2913563|PPM 266892|HR 6494|J172737.55-294328.4,f|S|B9,17:27:37.55|-8.08,-29:43:28.44|-31.7,5.99,2000 +V2114 OPH|HD 158228|BD+08 3418|J172744.07+082631.3,f|V|K3,17:27:44.08|13.06,8:26:31.34|-42.1,6.49,2000 +SAO 244763|HD 157753|CP-5210662|HR 6483|J172757.60-521749.8,f|D|K2,17:27:57.60|-15.59,-52:17:49.80|-57,5.73,2000 +SAO 141679|SD-08 4444|J172802.33-081230.1,f|S|F5,17:28:2.34|-84.77,-8:12:30.14|-129.6,6.38,2000 +SAO 253928|HD 157524|CP-62 5590|PPM 362727|HR 6471|J172807.86-630210.4,f|S|B7,17:28:7.87|-9.86,-63:2:10.46|-22.7,6.22,2000 +HD 157819|CP-55 8144|HR 6487|J172838.91-551010.8,f|D|G8,17:28:38.91|3.08,-55:10:10.87|-8.8,5.92,2000 +SAO 122418|HD 158352|BD+00 3697|J172849.65+001950.2,f|S|A8,17:28:49.65|-64.80,0:19:50.25|19.9,5.42,2000 +CD-3611546|PPM 296389|J172856.08-364641.8,f|S|K0,17:28:56.09|-3.12,-36:46:41.81|-5,5.99,2000 +CD-4311741A|J172900.86-435826.1,f|D|B5,17:29:0.86|-3.45,-43:58:26.11|-8.1,6.30,2000 +HD 158156|CD-3811927|PPM 296399|J172925.61-383100.9,f|D|A2,17:29:25.61|22.89,-38:31:0.91|9.6,6.39,2000 +SAO 141691|HD 158463|SD-05 4450|HR 6512|J172947.34-055510.1,f|D|K0,17:29:47.35|-33.12,-5:55:10.12|-64.4,6.41,2000 +HD 158716|BD+12 3234|PPM 133469|HR 6521|J173022.65+115526.4,f|S|A1,17:30:22.65|11.74,11:55:26.45|14.1,6.47,2000 +HD 158614|BD-00 3300|HR 6516|J173023.79-010346.5,f|D|G9,17:30:23.80|-126.73,-1:3:46.52|-172,5.33,2000 +Rastaban|Alwaid|Asuia|Dra Beta-23A|HD 159181|BD+52 2065|HR 6536|J173025.96+521804.9,f|D|G2,17:30:25.96|-15.59,52:18:4.99|11.6,2.80,2000 +BD+39 3147|HR 6531|J173040.20+385255.9,f|S|F6,17:30:40.21|1.17,38:52:55.93|12.5,6.44,2000 +BD+57 1774|J173043.57+575236.5,f|S|K2,17:30:43.57|12.36,57:52:36.56|-13.8,6.21,2000 +Her Lambda-76|HD 158899|BD+26 3034|Maasym|Misam|HR 6526|J173044.31+260638.3,f|S|K3,17:30:44.31|18.32,26:6:38.32|16.8,4.39,2000 +Lesath|Lesuth|Sco Upsilon-34|CD-3711638|PPM 296424|J173045.83-371744.9,f|S|B2,17:30:45.84|-4.18,-37:17:44.92|-29.1,2.68,2000 +UMi 24|HD 166926|BD+86 272|HR 6811|J173047.58+865804.9,f|S|A2,17:30:47.59|56.09,86:58:4.97|9.7,5.77,2000 +HD 158974|BD+31 3047|HR 6528|J173055.37+310929.2,f|S|G8,17:30:55.37|3.85,31:9:29.30|15.6,5.63,2000 +Ara Delta|SAO 253945|CP-60 6842|PPM 362756|J173105.91-604101.8,f|D|B8,17:31:5.91|-53.69,-60:41:1.85|-99.4,3.60,2000 +SAO 122465|HD 158837|BD+02 3337|PPM 164135|HR 6524|J173121.33+024328.2,f|D|G8,17:31:21.33|-19.18,2:43:28.23|19.2,5.58,2000 +V0862 ARA|CP-56 8304|J173123.28-565515.4,f|V|B7,17:31:23.28|-0.82,-56:55:15.47|-4.2,5.99,2000 +Oph 51|HD 158643|CD-2313412|PPM 266959|HR 6519|J173124.95-235745.5,f|S|B9,17:31:24.95|4.93,-23:57:45.52|-25.9,4.80,2000 +NO APS|SAO 258769|HD 156513|CP-80 828|HR 6429|J173127.46-805132.8,f|V|M3,17:31:27.46|-2.26,-80:51:32.88|-43.3,5.87,2000 +SAO 185474|CD-2612152|PPM 266967|J173144.37-261610.9,f|S|B9,17:31:44.37|-2.82,-26:16:10.95|-22.6,6.06,2000 +HD 158619|CD-3312149|PPM 296449|HR 6517|J173147.35-334211.3,f|S|K2,17:31:47.36|-7.74,-33:42:11.37|-31.5,6.41,2000 +HD 158476|CD-4511626A|HR 6513|J173149.09-460212.4,f|D|F8,17:31:49.10|2.50,-46:2:12.42|-2.6,6.04,2000 +Her 78|HD 159139|BD+28 2767|HR 6533|J173149.57+282426.9,f|S|A1,17:31:49.58|7.52,28:24:27.00|25.6,5.66,2000 +Ara Alpha|Alpha Arae|HD 158427|CD-4911511|J173150.49-495234.1,f|D|B2,17:31:50.49|-31.32,-49:52:34.12|-67.2,2.85,2000 +Dra 27|HD 159966|BD+68 938|HR 6566|J173157.86+680806.0,f|D|G9,17:31:57.87|-13.57,68:8:6.09|132.7,5.08,2000 +Dra Nu1-24B|V9163|HD 159541|BD+55 1944|HR 6554|J173210.56+551103.2,f|D|A6,17:32:10.57|148.50,55:11:3.27|54.2,4.89,2000 +Yildun|Vildiur|Gildun|UMi Delta-23|BD+86 269|HR 6789|J173213.00+863511.2,f|S|A1,17:32:13.00|10.54,86:35:11.26|54,4.35,2000 +BD+12 3241|PPM 133514|HR 6532|J173214.88+115548.1,f|S|B9,17:32:14.88|2.64,11:55:48.17|16.3,6.42,2000 +Kuma|Dra Nu2-25A|V9164|BD+55 1945|HR 6555|J173216.02+551022.6,f|D|A4,17:32:16.03|143.75,55:10:22.65|62.5,4.86,2000 +V0949 SCO|HD 158741|CD-3411757|PPM 296463|HR 6522|J173224.62-341645.8,f|V|F2,17:32:24.63|-11.53,-34:16:45.86|-33.4,6.17,2000 +BD+41 2850|PPM 56289|J173307.25+411436.4,f|S|K1,17:33:7.26|-67.56,41:14:36.41|-62.1,5.73,2000 +HD 158799|CD-4111742|HR 6523|J173307.38-411023.0,f|S|B9,17:33:7.39|2.48,-41:10:23.04|-3.6,5.85,2000 +HD 159332|BD+19 3354|PPM 133533|HR 6541|J173322.82+191524.0,f|S|F6,17:33:22.82|-29.45,19:15:24.04|-91.3,5.65,2000 +SD-05 4461|HR 6534|J173329.84-054441.2,f|S|A5,17:33:29.84|-42.24,-5:44:41.29|-95.4,5.62,2000 +BD+57 1780|J173331.60+573331.4,f|D|G5,17:33:31.61|6.68,57:33:31.44|5.1,6.17,2000 +Shaula|Sco Lambda-35A|Lambda Scorpii|HD 158926|CD-3711673|PPM 296488|HR 6527|J173336.52-370613.7,f|D|B2,17:33:36.52|-8.85,-37:6:13.76|-30,1.63,2000 +HD 159353|BD+16 3218|PPM 133537|HR 6542|J173339.38+161903.1,f|S|K5,17:33:39.39|-5.61,16:19:3.19|-62.7,5.69,2000 +V0642 HER|HD 159354|BD+14 3279|HR 6543|J173342.77+145029.7,f|V|M4,17:33:42.78|22.04,14:50:29.75|-73.5,6.46,2000 +SAO 228126|CD-4811821|PPM 323117|J173416.86-483136.4,f|S|G6,17:34:16.86|-33.38,-48:31:36.44|39.6,6.33,2000 +Oph 53A|SAO 122526|BD+09 3424|PPM 164231|HR 6548|J173436.69+093512.1,f|D|A2,17:34:36.69|6.66,9:35:12.12|-9.8,5.80,2000 +V1036 SCO|HD 159176|CD-3212935|PPM 296513|HR 6535|J173442.49-323453.9,f|D|O7,17:34:42.49|3.67,-32:34:53.98|-1.7,5.69,2000 +HD 159358|SD-11 4411|PPM 233268|HR 6544|J173446.35-111431.1,f|D|B8,17:34:46.35|3.09,-11:14:31.20|3.2,5.54,2000 +Rasalhague|Ras Alhague|Oph Alpha-55|HD 159561|BD+12 3252|PPM 133563|HR 6556|J173456.07+123336.1,f|S|A5,17:34:56.07|110.10,12:33:36.12|-222.6,2.09,2000 +Dra 26A|BD+61 1678|HR 6573|J173459.59+615228.3,f|D|G0,17:34:59.59|277.40,61:52:28.39|-525.6,5.25,2000 +Oph 52|V2125 OPH|SAO 185526|HD 159376|SD-21 4659|HR 6545|J173518.49-220237.7,f|V|B8,17:35:18.50|-3.20,-22:2:37.76|-8.5,6.48,2000 +CP-53 8682|PPM 346132|J173519.90-532110.5,f|S|B9,17:35:19.91|-6.27,-53:21:10.54|-18.3,6.09,2000 +SAO 244866|HD 158895|CP-59 7071|PPM 346136|HR 6525|J173534.99-595046.0,f|S|B5,17:35:35.00|-4.29,-59:50:46.01|-7.3,6.27,2000 +Ara Sigma-1|SAO 228162|HD 159217|CD-4611661|PPM 323154|HR 6537|J173539.59-463020.4,f|S|A0,17:35:39.59|-25.09,-46:30:20.46|-38.3,4.58,2000 +HD 159925|BD+37 2908|HR 6563|J173542.37+371805.7,f|S|G9,17:35:42.37|9.43,37:18:5.74|3,6.13,2000 +HD 159312|CD-3711702|PPM 296539|HR 6539|J173543.06-372623.5,f|S|A0,17:35:43.07|-9.17,-37:26:23.56|-35.6,6.49,2000 +HD 159834|BD+21 3157|HR 6559|J173559.56+205946.4,f|D|A7,17:35:59.57|6.72,20:59:46.47|-15.1,6.10,2000 +HD 159926|BD+28 2787|HR 6564|J173608.10+281106.3,f|S|K5,17:36:8.10|1.72,28:11:6.33|29.6,6.40,2000 +V0959 HER|HD 159968|BD+27 2849|J173621.41+273359.8,f|V|M1,17:36:21.42|-4.65,27:33:59.90|-69.4,6.41,2000 +HD 159433|CD-3812044|PPM 296558|HR 6546|J173632.83-383807.1,f|S|K0,17:36:32.83|-18.51,-38:38:7.11|-182.3,4.27,2000 +BD+30 3033|J173636.74+304706.6,f|S|A5,17:36:36.75|30.54,30:47:6.64|-5.7,6.05,2000 +Her 82|BD+48 2542|HR 6574|J173637.65+483508.2,f|S|K5,17:36:37.65|31.75,48:35:8.28|64.1,5.36,2000 +BD+69 933|HR 6598|J173639.94+693414.6,f|S|F9,17:36:39.94|-53.72,69:34:14.63|-217.6,6.35,2000 +Dra Omega-28|BD+68 949|HR 6596|J173657.09+684528.6,f|D|F5,17:36:57.09|1.36,68:45:28.69|321.1,4.78,2000 +HD 161178|BD+72 800|PPM 9575|J173708.88+722720.8,f|S|G9,17:37:8.88|24.06,72:27:20.86|15.3,5.88,2000 +Sargas|Sco Theta|HD 159532|CD-4212312|PPM 323186|HR 6553|J173719.13-425952.1,f|S|F1,17:37:19.13|6.03,-42:59:52.17|-1,1.86,2000 +HD 159633|CD-3711723|PPM 296576|HR 6557|J173726.91-380358.9,f|S|G2,17:37:26.92|0.12,-38:3:58.91|-2.8,6.26,2000 +SAO 244894|HD 159463|CD-4911577|PPM 346156|HR 6547|J173727.31-500334.9,f|S|K0,17:37:27.31|0.87,-50:3:34.93|-89.5,5.89,2000 +Her 79|BD+24 3218|HR 6571|J173731.09+241835.9,f|S|A2,17:37:31.09|-6.15,24:18:35.97|9.3,5.76,2000 +Ser Xi-55|HD 159876|SD-15 4621|HR 6561|J173735.20-152354.8,f|D|F0,17:37:35.20|-39.34,-15:23:54.81|-61.3,3.54,2000 +HD 159877|SD-15 4622|PPM 233351|HR 6562|J173736.20-153415.7,f|S|F0,17:37:36.20|1.01,-15:34:15.74|-0.6,5.94,2000 +Oph Mu-57|SAO 141772|HD 159975|SD-08 4472|HR 6567|J173750.71-080707.5,f|S|B8,17:37:50.71|-11.73,-8:7:7.58|-20.4,4.62,2000 +Ara Pi|SAO 244896|HD 159492|CP-54 8403|PPM 346165|HR 6549|J173805.51-543001.5,f|S|A5,17:38:5.52|-49.65,-54:30:1.56|-149.5,5.25,2000 +CD-4212327|HR 6558|J173808.44-425248.9,f|S|B8,17:38:8.44|-4.62,-42:52:48.99|-29.6,6.09,2000 +SD-10 4528|PPM 233365|HR 6568|J173809.50-105534.5,f|S|K5,17:38:9.50|-14.43,-10:55:34.56|-8.6,5.74,2000 +SAO 185584|SD-21 4682|J173844.84-215445.5,f|S|G0,17:38:44.85|-33.96,-21:54:45.59|-13.7,6.22,2000 +BD+13 3421|PPM 133657|HR 6577|J173857.85+131945.3,f|S|F6,17:38:57.86|-20.58,13:19:45.34|43.5,6.14,2000 +BD+02 3373|PPM 164365|HR 6575|J173908.50+020140.9,f|D|K0,17:39:8.50|45.42,2:1:40.98|-22.5,6.26,2000 +Her Iota-85A|Iota Herculis|BD+46 2349|PPM 56383|HR 6588|J173927.88+460022.7,f|D|B3,17:39:27.89|-7.19,46:0:22.80|4,3.81,2000 +BD+31 3075|HR 6584|J173957.51+311208.8,f|S|M2,17:39:57.52|-9.37,31:12:8.89|11.2,6.06,2000 +SAO 141798|SD-02 4425|HR 6578|J174011.94-020908.2,f|S|K2,17:40:11.94|-6.60,-2:9:8.29|-10.3,6.18,2000 +Ara Lambda|SAO 228257|CD-4911616|HR 6569|J174023.82-492456.1,f|S|F3,17:40:23.83|104.32,-49:24:56.11|-177.7,4.76,2000 +BD+43 2781|PPM 56399|HR 6599|J174037.55+432814.3,f|S|K0,17:40:37.56|54.65,43:28:14.40|56.8,6.36,2000 +BD+31 3076|HR 6591|J174041.18+311714.9,f|D|K0,17:40:41.19|-59.48,31:17:14.92|-75.1,6.31,2000 +HD 159558|CP-67 3343|PPM 362853|J174044.50-675115.0,f|S|G8,17:40:44.50|-43.14,-67:51:15.02|-20.9,6.45,2000 +BM SCO|CD-3213142|PPM 296667|J174058.54-321252.0,f|V|K2,17:40:58.55|-2.03,-32:12:52.07|-6.6,6.02,2000 +BD+24 3225|HR 6592|J174105.48+243047.7,f|D|K1,17:41:5.49|-18.42,24:30:47.72|54.8,6.36,2000 +BD+15 3246|PPM 133697|HR 6589|J174110.99+151042.1,f|S|A1,17:41:10.99|-7.67,15:10:42.15|-4.8,6.34,2000 +SAO 228279|CD-4611747|PPM 323264|HR 6572|J174116.24-465518.5,f|S|A0,17:41:16.24|10.76,-46:55:18.59|-7.7,5.79,2000 +HD 161193|BD+51 2243|PPM 36121|J174121.77+514905.4,f|S|K5,17:41:21.78|-28.56,51:49:5.46|-0.3,5.99,2000 +Ser Omicron-56|Omicron Serpentis|SD-12 4808|PPM 233454|HR 6581|J174124.87-125231.1,f|S|A2,17:41:24.87|-72.24,-12:52:31.11|-55.2,4.24,2000 +SAO 122646|BD+06 3498|PPM 164427|J174132.32+061847.3,f|S|G7,17:41:32.32|-2.98,6:18:47.36|-3.2,5.96,2000 +Dziban|Dra Psi-31A|BD+72 804|HR 6636|J174156.35+720855.8,f|D|F5,17:41:56.36|26.62,72:8:55.84|-269.8,4.57,2000 +Dra Psi-31B|BD+72 805|HR 6637|J174158.10+720924.8,f|D|G0,17:41:58.10|34.98,72:9:24.88|-273.6,5.73,2000 +BD+16 3256|PPM 133718|HR 6594|J174158.63+155708.7,f|D|F4,17:41:58.63|-7.07,15:57:8.75|103,5.55,2000 +V0626 ARA|SAO 244954|CD-5011474|PPM 346228|HR 6576|J174203.61-503038.5,f|V|M3,17:42:3.62|2.19,-50:30:38.53|-15,6.34,2000 +Her 83|BD+24 3231|J174228.36+243350.6,f|D|K4,17:42:28.36|-55.25,24:33:50.61|-103.8,5.56,2000 +Sco Kappa|Kappa Scorpii|CD-3812137|J174229.27-390147.9,f|S|B1,17:42:29.27|-6.53,-39:1:47.94|-25.6,2.39,2000 +CD-3611804|HR 6583|J174251.09-365644.0,f|S|K5,17:42:51.10|8.39,-36:56:44.03|-23.5,5.53,2000 +HD 161369|BD+44 2757|PPM 56427|HR 6612|J174305.54+440503.5,f|S|K4,17:43:5.55|-42.34,44:5:3.55|34.7,6.39,2000 +CD-3213208|PPM 296714|HR 6587|J174306.86-330304.6,f|S|M1,17:43:6.86|-3.02,-33:3:4.64|-5.5,6.43,2000 +SAO 185655|CD-2711850|PPM 267186|HR 6593|J174317.70-275302.3,f|S|A9,17:43:17.71|4.11,-27:53:2.33|-3.7,6.40,2000 +Her 84|HD 161239|BD+24 3237|J174321.56+241940.1,f|S|G2,17:43:21.56|-116.73,24:19:40.16|72.3,5.73,2000 +HD 161149|BD+14 3321|PPM 133749|J174322.02+141742.6,f|S|F5,17:43:22.02|1.31,14:17:42.60|28,6.22,2000 +Oph 58|SD-21 4712|HR 6595|J174325.79-214059.4,f|S|F6,17:43:25.79|-97.99,-21:40:59.50|-44.6,4.87,2000 +Cebalrai|Cheleb|Kelb Alrai|Oph Beta-60|SAO 122671|BD+04 3489|PPM 164476|J174328.35+043402.2,f|S|K2,17:43:28.35|-40.67,4:34:2.29|158.8,2.77,2000 +SAO 141832|SD-07 4487|J174347.02-070446.5,f|S|B1,17:43:47.02|-7.15,-7:4:46.59|-10.4,6.30,2000 +SD-13 4732|PPM 233521|J174348.40-133031.3,f|S|F0,17:43:48.41|-71.17,-13:30:31.32|-110.9,6.37,2000 +HD 161693|BD+53 1978|HR 6618|J174359.17+534806.1,f|S|A2,17:43:59.18|13.29,53:48:6.17|-16.4,5.75,2000 +Ara Mu|SAO 244981|CD-5111094|PPM 346258|HR 6585|J174408.70-515002.5,f|S|G3,17:44:8.70|-15.11,-51:50:2.59|-191.2,5.12,2000 +V0624 HER|HD 161321|BD+14 3329|HR 6611|J174417.24+142436.2,f|D|A3,17:44:17.25|-3.63,14:24:36.24|14.6,6.20,2000 +Oph 61A|BD+02 3390|J174434.09+023445.9,f|D|A1,17:44:34.09|7.19,2:34:45.99|13.6,6.16,2000 +SAO 228363|CD-4212431|PPM 323342|HR 6597|J174442.00-424345.4,f|D|A1,17:44:42.01|5.18,-42:43:45.49|-1,5.88,2000 +SAO 244989|CP-57 8703|PPM 346273|HR 6586|J174455.86-573243.9,f|D|G8,17:44:55.86|18.11,-57:32:43.94|-12.3,5.97,2000 +HD 161695|BD+31 3090|HR 6619|J174540.23+313016.8,f|S|A0,17:45:40.23|4.60,31:30:16.84|-2.3,6.25,2000 +Pav Eta|CP-64 3662|PPM 362896|HR 6582|J174543.98-644325.9,f|S|K2,17:45:43.99|-11.08,-64:43:25.94|-56.4,3.59,2000 +Her Mu-86A|HD 161797|BD+27 2888|HR 6623|J174627.52+274314.4,f|D|G5,17:46:27.53|-291.46,27:43:14.43|-750,3.42,2000 +CD-3812189|PPM 296785|HR 6613|J174707.29-380643.7,f|D|B9,17:47:7.29|-3.42,-38:6:43.74|-27.6,6.41,2000 +HD 162132|BD+47 2537|PPM 56484|HR 6641|J174708.03+473644.0,f|S|A2,17:47:8.03|-13.95,47:36:44.07|6.6,6.47,2000 +HD 161833|BD+17 3334|PPM 133825|HR 6627|J174708.04+174149.2,f|D|A1,17:47:8.05|11.15,17:41:49.25|-11.2,5.62,2000 +Sgr 3|X SGR|SAO 185755|HD 161592|CD-2711930|HR 6616|J174733.62-274950.8,f|V|F7,17:47:33.62|-3.58,-27:49:50.84|-10.7,4.56,2000 +Sco Iota1|HD 161471|CD-4011838|PPM 323398|HR 6615|J174735.08-400737.1,f|D|F2,17:47:35.08|0.46,-40:7:37.19|-6.4,3.01,2000 +SD-14 4770|PPM 233599|J174736.77-144332.9,f|S|B9,17:47:36.78|-22.20,-14:43:32.97|-17.6,5.94,2000 +V9682|SAO 185765|HD 161664|CD-2212236|HR 6617|J174745.60-222840.0,f|V|G6,17:47:45.60|1.52,-22:28:40.05|-9.5,6.19,2000 +Oph Gamma-62|SAO 122754|HD 161868|BD+02 3403|PPM 164596|HR 6629|J174753.56+024226.1,f|S|A0,17:47:53.56|-23.22,2:42:26.19|-75.1,3.75,2000 +SAO 122766|HD 161941|BD+03 3493|HR 6633|J174820.24+034815.1,f|S|B9,17:48:20.24|14.67,3:48:15.17|7,6.23,2000 +BD+20 3570|HR 6638|J174824.76+203355.5,f|S|G5,17:48:24.77|25.00,20:33:55.59|5.5,5.70,2000 +V3894 SGR|SAO 185779|HD 161756|CD-2612367|PPM 267329|HR 6621|J174827.83-265829.8,f|V|B4,17:48:27.84|-1.20,-26:58:29.80|-5.5,6.33,2000 +CP-55 8312|PPM 346333|HR 6614|J174838.06-552406.2,f|S|A9,17:48:38.06|-21.38,-55:24:6.27|34.6,6.10,2000 +HD 162161|BD+19 3435|PPM 133863|HR 6642|J174847.87+191518.0,f|S|A1,17:48:47.87|-8.78,19:15:18.06|9.1,6.14,2000 +Her 87|HD 162211|BD+25 3353|HR 6644|J174849.14+253722.3,f|S|K0,17:48:49.15|-3.65,25:37:22.33|-38.5,5.10,2000 +Dra 30|V23994|HD 162579|BD+50 2468|PPM 36199|HR 6656|J174904.28+504651.8,f|V|A2,17:49:4.29|-51.88,50:46:51.87|218.2,5.02,2000 +CD-3114609|PPM 296839|HR 6628|J174910.47-314211.5,f|S|B8,17:49:10.48|4.21,-31:42:11.53|-7.9,4.81,2000 +SAO 122787|HD 162113|BD+02 3406|PPM 164641|HR 6639|J174919.04+015741.0,f|S|K0,17:49:19.04|-7.35,1:57:41.09|77.1,6.45,2000 +Dra 35|HD 163989|BD+76 667|PPM 9652|J174927.03+765746.3,f|S|F6,17:49:27.03|37.32,76:57:46.37|248,5.03,2000 +HD 161892|CD-3711907|PPM 296857|J174951.48-370235.8,f|D|K2,17:49:51.48|42.14,-37:2:35.89|27.8,3.19,2000 +HD 161475|CP-61 6051|PPM 362941|J174953.01-614252.9,f|S|B9,17:49:53.01|5.47,-61:42:52.94|-18.8,6.41,2000 +V9859|HD 164428|BD+78 616|PPM 9656|HR 6717|J175010.11+781823.5,f|V|K5,17:50:10.11|3.31,78:18:23.54|9.6,6.25,2000 +Sco Iota2|SAO 228466|HD 161912|CD-4011886|PPM 323443|HR 6631|J175011.11-400525.5,f|D|A2,17:50:11.11|3.67,-40:5:25.57|-2.7,4.81,2000 +HD 162555|BD+29 3126|HR 6654|J175022.89+291919.7,f|S|K1,17:50:22.89|30.86,29:19:19.71|47.9,5.52,2000 +V0539 ARA|HD 161783|CP-53 8799|PPM 346351|HR 6622|J175028.39-533644.6,f|D|B2,17:50:28.39|2.40,-53:36:44.66|-10.4,5.68,2000 +HD 162468|BD+12 3305|PPM 133888|J175043.60+115647.5,f|S|K1,17:50:43.60|-8.95,11:56:47.57|-33.3,6.19,2000 +BD+22 3227|HR 6655|J175048.38+221858.7,f|S|A9,17:50:48.38|16.79,22:18:58.79|-20.7,6.15,2000 +HD 161917|CP-53 8812|PPM 346364|HR 6632|J175111.04-530748.9,f|S|B9,17:51:11.05|15.75,-53:7:48.97|0.7,6.09,2000 +V24005|SAO 228489|HD 162189|CD-4011905|PPM 323467|HR 6643|J175132.53-404620.8,f|D|M2,17:51:32.53|-51.35,-40:46:20.86|-55,5.96,2000 +HD 161814|CP-60 6950|PPM 362959|HR 6624|J175135.47-600950.6,f|D|K0,17:51:35.47|-0.15,-60:9:50.60|-15.7,5.78,2000 +HD 162123|CD-4511958|PPM 323471|J175144.56-453602.5,f|S|G6,17:51:44.56|11.12,-45:36:2.54|-8,6.10,2000 +HD 162734|BD+15 3292|PPM 133916|HR 6665|J175158.46+151934.9,f|D|K0,17:51:58.46|-6.94,15:19:34.94|40.2,6.49,2000 +SAO 141913|HD 162596|BD-01 3412|HR 6659|J175159.44-011412.5,f|S|K0,17:51:59.45|-3.30,-1:14:12.50|2.4,6.32,2000 +BD+46 2379|PPM 56564|HR 6674|J175200.90+463836.8,f|S|K0,17:52:0.91|30.17,46:38:36.87|-115.8,6.38,2000 +V24022|HD 162989|BD+40 3228|HR 6673|J175204.72+395855.5,f|V|K5,17:52:4.72|-12.64,39:58:55.52|51.5,6.01,2000 +V0957 SCO|HD 162374|CD-3412165|PPM 296918|HR 6647|J175213.66-344757.1,f|V|B6,17:52:13.66|3.33,-34:47:57.11|-5.4,5.89,2000 +HD 162391|CD-3412170|PPM 296924|HR 6648|J175219.76-342500.6,f|S|G8,17:52:19.76|3.34,-34:25:0.63|-4.9,5.84,2000 +V9800|SAO 122861|HD 162774|BD+01 3528|PPM 164743|HR 6667|J175235.44+011818.0,f|V|K5,17:52:35.44|-32.69,1:18:18.05|-14.9,5.92,2000 +Y OPH|SAO 141926|HD 162714|SD-06 4672|HR 6661|J175238.70-060836.8,f|V|F8,17:52:38.70|-0.75,-6:8:36.88|-5.1,6.18,2000 +HD 162496|CD-3412186|PPM 296936|HR 6651|J175249.22-340653.3,f|S|K1,17:52:49.22|2.36,-34:6:53.40|-4.8,6.05,2000 +HD 162396|CD-4112139|HR 6649|J175252.58-415947.4,f|S|F8,17:52:52.58|141.80,-41:59:47.48|-190.5,6.20,2000 +HD 162517|CD-3512013|PPM 296939|HR 6653|J175257.60-353727.5,f|S|F2,17:52:57.60|9.27,-35:37:27.53|-54,6.02,2000 +V24020|HD 162757|SD-10 4560|HR 6666|J175303.53-105358.4,f|V|K5,17:53:3.54|43.60,-10:53:58.42|-30.2,6.19,2000 +HD 162917|BD+06 3566|PPM 164771|J175314.18+060605.1,f|S|F3,17:53:14.18|-127.82,6:6:5.13|69.9,5.77,2000 +Her 90|V9834|HD 163217|BD+40 3233|PPM 56583|HR 6677|J175318.02+400028.6,f|D|K1,17:53:18.03|7.81,40:0:28.65|50.4,5.17,2000 +HD 161955|CP-65 3507|PPM 362977|HR 6634|J175318.18-652918.9,f|S|K0,17:53:18.19|-22.90,-65:29:18.96|-64.9,6.46,2000 +HD 162586|CD-3412200|PPM 296948|HR 6657|J175319.57-344350.9,f|D|B8,17:53:19.57|1.60,-34:43:50.99|-8.1,6.11,2000 +HD 162587|CD-3412203|PPM 296951|HR 6658|J175323.47-345342.4,f|D|K3,17:53:23.47|2.34,-34:53:42.45|-6.2,5.59,2000 +Grumium|Genam|Nodus I|Dra Xi-32|V24040|HD 163588|BD+56 2033|HR 6688|J175331.72+565221.5,f|D|K2,17:53:31.73|93.62,56:52:21.51|78.4,3.74,2000 +HD 162678|CD-3412219|PPM 296958|J175345.48-344709.8,f|S|B9,17:53:45.49|0.00,-34:47:9.81|-6,6.38,2000 +V0906 SCO|HD 162724|CD-3412226|PPM 296963|HR 6662|J175354.77-344509.7,f|D|B9,17:53:54.77|2.46,-34:45:9.80|-4.7,6.00,2000 +V0951 SCO|HD 162725|CD-3412228|PPM 296965|HR 6663|J175358.13-344951.7,f|V|Ap,17:53:58.14|4.31,-34:49:51.79|-4.6,6.41,2000 +V2388 OPH|HD 163151|BD+11 3283|PPM 133974|HR 6676|J175414.16+110750.0,f|D|F5,17:54:14.17|-70.79,11:7:50.01|-163.1,6.26,2000 +BD+75 647|PPM 9679|HR 6735|J175426.71+751016.7,f|S|K0,17:54:26.72|-12.51,75:10:16.71|38.1,6.39,2000 +HD 162817|CD-3412244|HR 6668|J175427.12-342800.2,f|S|B9,17:54:27.12|1.86,-34:28:0.20|-4.6,6.11,2000 +SAO 185928|HD 162978|CD-2413615|PPM 267497|HR 6672|J175454.04-245313.5,f|S|O7,17:54:54.04|1.36,-24:53:13.54|-2.7,6.20,2000 +HD 162926|CD-3612008|PPM 296992|HR 6671|J175508.03-362832.3,f|S|B9,17:55:8.03|2.89,-36:28:32.32|-5.2,6.06,2000 +Dra Psi-34|HD 164613|BD+72 818|PPM 9681|HR 6725|J175511.15+720018.4,f|S|F2,17:55:11.15|8.02,72:0:18.46|-2.9,5.42,2000 +HD 163929|BD+55 1995|PPM 36257|HR 6699|J175523.65+555817.0,f|S|F0,17:55:23.65|35.67,55:58:17.02|124.5,6.10,2000 +Her 89|V0441 HER|BD+26 3120|HR 6685|J175525.18+260259.9,f|V|F2,17:55:25.19|4.45,26:2:59.97|5,5.47,2000 +HD 163547|BD+22 3237|HR 6687|J175550.81+222751.1,f|S|K5,17:55:50.81|-2.08,22:27:51.20|-0.2,5.62,2000 +HD 163245|SD-18 4686|PPM 233754|HR 6679|J175554.96-184807.7,f|S|A4,17:55:54.97|13.06,-18:48:7.76|-20.2,6.48,2000 +Her Theta-91|V9890|BD+37 2982|HR 6695|J175615.18+371501.9,f|V|K1,17:56:15.18|2.75,37:15:1.94|7.2,3.84,2000 +V2052 OPH|SAO 122935|HD 163472|BD+00 3813|PPM 164858|HR 6684|J175618.40+004013.2,f|V|B2,17:56:18.40|-3.75,0:40:13.28|-0.4,5.84,2000 +V24046|HD 163336|SD-15 4722|PPM 233766|HR 6681|J175619.03-154845.0,f|D|A1,17:56:19.04|-9.67,-15:48:45.08|-66.2,5.93,2000 +HD 162521|CP-65 3528|J175624.29-654318.2,f|S|F8,17:56:24.30|84.62,-65:43:18.26|-318.6,6.37,2000 +Etamin|Rasaben|Rastaban|Etanin|Zenith Star|Dra Gamma-33A|BD+51 2282|PPM 36267|J175636.36+512920.0,f|D|K5,17:56:36.37|-8.50,51:29:20.02|-23.1,2.23,2000 +SAO 185975|HD 163318|CD-2813878|PPM 267545|J175641.84-280355.4,f|S|A7,17:56:41.84|31.90,-28:3:55.42|-18.2,5.79,2000 +SAO 228562|HD 163145|CD-4412201|PPM 323563|HR 6675|J175647.42-442032.0,f|S|K2,17:56:47.42|-3.22,-44:20:32.09|-19.5,4.86,2000 +SAO 141979|HD 163532|SD-04 4376|HR 6686|J175647.74-040454.5,f|S|G5,17:56:47.74|-5.54,-4:4:54.56|-8.9,5.45,2000 +OP HER|BD+45 2627|PPM 56642|J175648.52+452103.0,f|V|M5,17:56:48.53|15.39,45:21:3.06|-31.5,6.33,2000 +SAO 228564|HD 163234|CD-4012001|PPM 323566|HR 6678|J175655.90-401820.3,f|S|K3,17:56:55.90|25.39,-40:18:20.32|2.1,6.45,2000 +V24053|SAO 122949|HD 163641|BD+06 3578|PPM 164876|J175655.97+062915.8,f|V|B9,17:56:55.98|19.82,6:29:15.83|-1.7,6.29,2000 +V24054|HD 163624|BD+00 3816|PPM 164879|HR 6689|J175704.31+000359.9,f|D|A3,17:57:4.31|20.55,0:3:59.99|-9.2,5.95,2000 +BD+24 3283|HR 6697|J175714.32+235945.2,f|D|G2,17:57:14.33|-17.27,23:59:45.20|73.7,6.33,2000 +HD 163772|BD+11 3299|HR 6696|J175726.98+110240.3,f|S|A1,17:57:26.98|-9.86,11:2:40.35|-10.3,6.34,2000 +SAO 257542|HD 161988|CP-76 1226|PPM 373648|HR 6635|J175741.68-761040.6,f|D|K2,17:57:41.69|1.15,-76:10:40.62|-1.3,6.07,2000 +SAO 245133|CP-56 8506|PPM 346442|J175742.73-565346.5,f|S|B4,17:57:42.74|-2.46,-56:53:46.51|-11.7,6.26,2000 +Her Xi-92|Xi Herculis|HD 163993|BD+29 3156|J175745.88+291452.3,f|S|G8,17:57:45.89|82.32,29:14:52.37|-18.7,3.70,2000 +V24051|SAO 228578|HD 163376|CD-4112231|HR 6682|J175747.80-414258.6,f|V|M0,17:57:47.81|-1.68,-41:42:58.66|-15.1,4.88,2000 +HD 163433|CD-3912058|HR 6683|J175757.79-390811.4,f|D|A0,17:57:57.79|-8.61,-39:8:11.48|-23.2,6.33,2000 +Her Nu-94|Nu Herculis|HD 164136|BD+30 3093|J175830.14+301121.3,f|S|F2,17:58:30.15|-0.52,30:11:21.40|3.2,4.41,2000 +HD 163685|CD-2813936|PPM 267596|HR 6692|J175839.04-284532.7,f|S|B3,17:58:39.05|-0.79,-28:45:32.72|-5.2,5.97,2000 +V24065|BD+36 2986|HR 6711|J175842.32+361716.0,f|V|G5,17:58:42.32|6.65,36:17:16.07|-49.1,6.03,2000 +V0771 HER|HD 164429|BD+45 2635|PPM 56677|HR 6718|J175852.30+452834.3,f|V|B9,17:58:52.31|0.42,45:28:34.39|27,6.49,2000 +HD 163652|CD-3612060|HR 6691|J175855.68-365130.1,f|D|G8,17:58:55.69|12.12,-36:51:30.15|13.5,5.74,2000 +Oph Nu-64|V24061|HD 163917|SD-09 4632|HR 6698|J175901.59-094625.0,f|V|G9,17:59:1.59|-10.35,-9:46:25.07|-116.1,3.32,2000 +HD 163755|CD-3015035A|HR 6693|J175905.28-301510.8,f|D|M1,17:59:5.28|2.46,-30:15:10.89|-8.3,5.16,2000 +SD-04 4384|J175936.76-044916.0,f|S|K5,17:59:36.76|-2.54,-4:49:16.05|-88.3,5.85,2000 +Sgr 4|HD 163955|CD-2313731|PPM 267632|J175947.55-234858.0,f|S|B9,17:59:47.55|-5.35,-23:48:58.08|-50.3,4.74,2000 +HD 164646|BD+45 2638|PPM 56691|HR 6728|J175956.20+453004.9,f|S|M0,17:59:56.21|3.89,45:30:4.96|-34,5.69,2000 +SD-20 4940|J180000.08-202022.3,f|S|K0,18:0:0.08|1.83,-20:20:22.38|-23.4,6.23,2000 +Her 93|HD 164349|BD+16 3335|HR 6713|J180003.41+164503.3,f|S|K0,18:0:3.42|-7.47,16:45:3.31|-10.6,4.67,2000 +Dra 40B|V10205|HD 166865|BD+79 570|PPM 3146|J180003.54+800003.0,f|D|F7,18:0:3.55|54.59,80:0:3.03|130.5,6.02,2000 +Dra 41A|HD 166866|BD+79 571|PPM 3147|J180009.22+800014.7,f|D|F7,18:0:9.22|46.92,80:0:14.74|124,5.68,2000 +V2126 OPH|HD 164258|BD+00 3832|PPM 164974|J180015.67+003746.1,f|V|A3,18:0:15.67|20.25,0:37:46.14|-2,6.37,2000 +Oph 66|V2048 OPH|HD 164284|BD+04 3570|PPM 164975|HR 6712|J180015.79+042207.0,f|V|B2,18:0:15.80|1.79,4:22:7.01|-13,4.79,2000 +V0974 HER|HD 164447|BD+19 3494|PPM 134113|J180027.65+193020.8,f|V|B8,18:0:27.66|5.23,19:30:20.83|0.8,6.42,2000 +Ser Zeta-57|HD 164259|SD-03 4217|J180029.01-034124.9,f|S|F2,18:0:29.01|154.18,-3:41:24.97|-44.4,4.63,2000 +HD 164614|BD+33 3006|HR 6726|J180036.37+331249.2,f|S|K5,18:0:36.37|-4.14,33:12:49.26|-23.6,6.01,2000 +Oph 67A|HD 164353|BD+02 3458|PPM 164987|HR 6714|J180038.71+025553.6,f|D|B5,18:0:38.72|0.45,2:55:53.64|-8.2,3.98,2000 +HD 164432|BD+06 3597|PPM 164995|HR 6719|J180052.85+061605.8,f|S|B2,18:0:52.86|0.89,6:16:5.86|-7,6.35,2000 +BD+15 3327|PPM 134124|HR 6722|J180057.27+150536.7,f|S|G5,18:0:57.27|-50.98,15:5:36.78|-99.3,6.29,2000 +Sgr 6|HD 164358|SD-17 4987|PPM 233913|HR 6715|J180123.12-170924.7,f|S|K3,18:1:23.12|-1.58,-17:9:24.73|-6.7,6.27,2000 +Her 95B|HD 164668|BD+21 3280|HR 6729|J180129.96+213543.4,f|D|G8,18:1:29.96|7.53,21:35:43.43|38.8,5.10,2000 +Her 95A|HD 164669|BD+21 3280|J180130.40+213544.8,f|D|A5,18:1:30.41|7.53,21:35:44.82|38.8,4.89,2000 +SAO 258779|HD 159517|CP-85 469|PPM 378145|HR 6552|J180134.17-851253.3,f|S|F5,18:1:34.18|-4.48,-85:12:53.38|-144.7,6.45,2000 +HD 164824|BD+33 3009|HR 6737|J180135.90+331840.5,f|D|K5,18:1:35.90|22.06,33:18:40.56|19.5,6.17,2000 +Oph 68A|HD 164577|BD+01 3560|HR 6723|J180145.19+011818.2,f|D|A2,18:1:45.20|15.45,1:18:18.27|-13.6,4.44,2000 +HD 164245|CD-3612115|PPM 297145|J180148.29-362240.3,f|S|B7,18:1:48.30|-7.37,-36:22:40.31|-25,6.31,2000 +SAO 186135|CD-2212441|HR 6716|J180154.38-224649.0,f|D|B0,18:1:54.38|-0.41,-22:46:49.07|-3,5.76,2000 +Her 96|V0820 HER|HD 164852|BD+20 3649|HR 6738|J180223.04+205001.0,f|V|B3,18:2:23.05|-1.82,20:50:1.07|-6.9,5.26,2000 +Her 97|BD+22 3260|HR 6741|J180230.15+225523.6,f|S|B3,18:2:30.15|-3.04,22:55:23.63|-5.5,6.22,2000 +Sgr 7|SAO 186163|HD 164584|CD-2413793|PPM 267736|HR 6724|J180251.09-241656.8,f|S|F3,18:2:51.10|0.68,-24:16:56.88|-17.7,5.37,2000 +Oph Tau-69B|HD 164764|SD-08 4549B|HR 6733|J180304.80-081048.9,f|D|F5,18:3:4.81|27.32,-8:10:48.90|-30.7,4.77,2000 +Oph Tau-69A|HD 164765|SD-08 4549A|HR 6734|J180304.91-081049.2,f|D|F2,18:3:4.92|15.14,-8:10:49.26|-37.6,4.77,2000 +V24246|HD 165358|BD+48 2627|PPM 56752|HR 6753|J180308.89+482751.3,f|D|A2,18:3:8.89|21.38,48:27:51.37|13.4,6.24,2000 +BD+19 3508|PPM 134177|HR 6744|J180314.56+193647.3,f|S|A0,18:3:14.56|-4.38,19:36:47.37|-0.5,6.42,2000 +Sgr 9|HD 164794|CD-2413814|PPM 267779|HR 6736|J180352.44-242138.6,f|S|O4,18:3:52.44|0.68,-24:21:38.63|-1.7,5.89,2000 +V0986 OPH|HD 165174|BD+01 3578|PPM 165117|HR 6747|J180437.35+015508.3,f|V|B0,18:4:37.36|0.00,1:55:8.37|-6.3,6.16,2000 +V0831 HER|HD 165373|BD+23 3254|HR 6754|J180440.20+235631.1,f|V|F0,18:4:40.21|16.31,23:56:31.20|-70.6,6.35,2000 +CD-3512229|HR 6739|J180450.37-355405.1,f|D|K2,18:4:50.38|-13.97,-35:54:5.19|-33.6,5.97,2000 +HD 165645|BD+41 2968|PPM 56787|HR 6767|J180500.79+415646.6,f|D|F0,18:5:0.80|-19.75,41:56:46.64|98.2,6.38,2000 +Sgr Gamma1|W SGR|SAO 186237|HD 164975|CD-2914447|PPM 267817|HR 6742|J180501.22-293448.3,f|D|F4,18:5:1.23|4.04,-29:34:48.31|-4.6,4.65,2000 +SAO 258787|HD 162337|CP-81 799|PPM 378153|HR 6646|J180526.85-812911.6,f|S|K3,18:5:26.86|28.45,-81:29:11.65|-49.3,6.35,2000 +Oph 70A|V2391 OPH|HD 165341|BD+02 3482|PPM 165145|HR 6752|J180527.28+023000.3,f|D|K0,18:5:27.29|124.53,2:30:0.36|-962.7,4.03,2000 +HD 165524|BD+21 3300|HR 6763|J180530.13+213847.8,f|S|K5,18:5:30.14|11.99,21:38:47.85|1.7,6.19,2000 +Nash|Alnasl|Alwazl|Nushaba|Zujj al Nushshabah|Nushaba|Sgr Gamma-10|V10173|HD 165135|CD-3015215|PPM 297231|HR 6746|J180548.48-302526.7,f|V|K0,18:5:48.49|-55.75,-30:25:26.73|-181.5,3.63,2000 +HD 165683|BD+32 3047|HR 6768|J180549.61+321350.4,f|S|K0,18:5:49.61|19.16,32:13:50.42|-20,5.72,2000 +Her 98|V10208|HD 165625|BD+22 3273|HR 6765|J180601.90+221307.9,f|V|M3,18:6:1.90|-13.33,22:13:7.96|-5.3,4.99,2000 +SD-08 4558|HR 6755|J180607.39-081926.2,f|S|B8,18:6:7.40|-2.52,-8:19:26.24|-16.7,5.85,2000 +HD 165462|BD-00 3414|HR 6757|J180607.42-002646.0,f|S|G9,18:6:7.43|-21.45,-0:26:46.06|-12.6,6.35,2000 +SAO 245238|HD 164896|CD-5111348|PPM 346572|J180609.21-514438.0,f|S|A2,18:6:9.22|3.25,-51:44:38.06|-6.5,6.47,2000 +HD 165438|SD-04 4395|HR 6756|J180615.19-044504.5,f|S|K1,18:6:15.20|142.61,-4:45:4.51|-30.4,5.74,2000 +V24262|HD 165185|CD-3612214|PPM 297246|HR 6748|J180623.71-360111.2,f|V|G5,18:6:23.72|105.43,-36:1:11.24|8,5.94,2000 +Ara Theta|SAO 245242|CD-5011720|PPM 346577|HR 6743|J180637.87-500529.3,f|S|B2,18:6:37.87|-8.47,-50:5:29.32|-9.3,3.67,2000 +HD 165189|CD-4312272A|PPM 323736|HR 6749|J180649.89-432530.7,f|D|A5,18:6:49.89|9.48,-43:25:30.78|-104.7,5.67,2000 +CD-4312272B|PPM 323736|J180649.91-432529.0,f|D|A5,18:6:49.91|-1.74,-43:25:29.08|-97.6,5.63,2000 +BD+50 2525|PPM 36381|J180653.47+504922.1,f|S|K0,18:6:53.48|4.74,50:49:22.16|92.2,6.30,2000 +Her 99A|BD+30 3128|HR 6775|J180701.53+303343.7,f|D|F7,18:7:1.54|-100.88,30:33:43.70|111.7,5.06,2000 +HD 165516|SD-21 4855|HR 6762|J180711.35-212638.1,f|S|B0,18:7:11.35|-0.28,-21:26:38.18|-2.2,6.27,2000 +Oph 71|BD+08 3582|J180718.36+084401.9,f|S|G8,18:7:18.36|9.79,8:44:1.92|30.2,4.64,2000 +SAO 123138|HD 165742|BD+02 3493|J180720.98+022854.0,f|S|K5,18:7:20.98|-2.40,2:28:54.01|29.9,6.50,2000 +Oph 72|SAO 123142|HD 165777|BD+09 3564|HR 6771|J180720.98+093349.8,f|D|A4,18:7:20.98|-61.68,9:33:49.85|79.7,3.72,2000 +BD+43 2892|HR 6791|J180728.74+432742.8,f|S|G8,18:7:28.74|1.96,43:27:42.81|-58,5.01,2000 +Her Omicron-103|Omicron Herculis|BD+28 2925|HR 6779|J180732.55+284544.9,f|D|B9,18:7:32.55|-0.13,28:45:44.96|7.5,3.84,2000 +HD 165687|SD-17 5028|HR 6769|J180748.34-170914.9,f|S|K1,18:7:48.34|-103.48,-17:9:14.97|58.1,5.51,2000 +SAO 254141|HD 164871|CP-64 3796|PPM 363155|J180748.36-643300.6,f|S|K2,18:7:48.36|-8.32,-64:33:0.64|-57.4,6.40,2000 +Her 100B|V10253|BD+26 3178|HR 6782|J180749.50+260550.4,f|D|A3,18:7:49.50|-10.51,26:5:50.42|29.8,5.83,2000 +Her 100A|V10253|BD+26 3178|HR 6781|J180749.56+260604.6,f|D|A3,18:7:49.56|-1.89,26:6:4.61|24.4,5.86,2000 +HD 166229|BD+36 3027|HR 6793|J180802.23+362404.5,f|S|K2,18:8:2.24|-95.02,36:24:4.55|-186.1,5.49,2000 +SAO 186328|HD 165634|CD-2814174|PPM 267912|HR 6766|J180804.97-282725.5,f|S|G7,18:8:4.98|24.79,-28:27:25.54|-31.6,4.56,2000 +SAO 228734|HD 165493|CD-4512215|HR 6759|J180830.10-454601.2,f|D|B7,18:8:30.11|-2.62,-45:46:1.25|-17.4,6.16,2000 +BD+14 3427|PPM 134313|HR 6784|J180833.73+141704.9,f|S|A5,18:8:33.74|-5.81,14:17:4.98|-0.5,6.33,2000 +Pav Pi|V10204|SAO 254147|CP-63 4292|PPM 363162|HR 6745|J180834.81-634006.7,f|V|A7,18:8:34.81|17.43,-63:40:6.79|-207.6,4.33,2000 +V4381 SGR|SAO 186343|HD 165784|SD-21 4866|PPM 267925|J180838.58-212658.4,f|V|A2,18:8:38.59|-0.98,-21:26:58.42|-2.3,6.50,2000 +Her 102|HD 166182|BD+20 3674|HR 6787|J180845.49+204852.4,f|D|B2,18:8:45.49|-2.66,20:48:52.41|-6.2,4.37,2000 +Her 101|BD+20 3675|HR 6794|J180852.86+200242.8,f|S|A8,18:8:52.86|8.45,20:2:42.84|-21.1,5.11,2000 +HD 166411|BD+30 3138|HR 6799|J180910.23+302810.3,f|S|K5,18:9:10.23|73.56,30:28:10.31|139.1,6.36,2000 +Oph 73A|V10287|SAO 123187|HD 166233|BD+03 3610|PPM 165283|HR 6795|J180933.89+035935.7,f|D|F2,18:9:33.89|50.13,3:59:35.79|-4.5,5.71,2000 +V10316|BD+38 3095|J180937.41+382727.9,f|V|K2,18:9:37.42|-316.20,38:27:28.00|-468.4,6.39,2000 +SAO 161125|SD-13 4863|PPM 234113|HR 6785|J180943.37-135603.9,f|S|K0,18:9:43.38|14.56,-13:56:3.97|-3.3,6.39,2000 +SAO 123198|HD 166285|BD+03 3613|PPM 165298|HR 6797|J180954.01+030711.3,f|D|F5,18:9:54.01|13.63,3:7:11.38|-193.5,5.67,2000 +SAO 245273|HD 165497|CP-59 7231|PPM 346621|J180957.56-590224.6,f|D|K4,18:9:57.56|-25.54,-59:2:24.66|-2.7,6.38,2000 +BD+36 3039|J180958.99+362758.6,f|S|G8,18:9:59.00|13.15,36:27:58.62|11.2,5.56,2000 +HD 165978|CD-3213814|PPM 297329|HR 6777|J180959.96-324310.6,f|S|K0,18:9:59.96|1.26,-32:43:10.69|-150,6.41,2000 +CD-3015316B|J181005.76-304339.1,f|D|A0,18:10:5.77|12.64,-30:43:39.17|-28.2,5.53,2000 +CD-3015316A|PPM 297335|J181005.81-304343.1,f|D|K1,18:10:5.81|12.64,-30:43:43.20|-28.2,5.62,2000 +V10311|BD+16 3390|PPM 134346|J181008.67+162834.8,f|D|F7,18:10:8.67|-1.73,16:28:34.80|-11.4,6.19,2000 +V10311|HD 166479|BD+16 3390|PPM 134346|J181008.72+162835.7,f|D|B9,18:10:8.73|-1.73,16:28:35.72|-11.4,6.19,2000 +Pav Iota|SAO 254157|HD 165499|CP-62 5797|PPM 363177|HR 6761|J181026.16-620007.9,f|S|G0,18:10:26.16|-77.60,-62:0:7.91|234.7,5.48,2000 +BD+54 1950|PPM 36415|HR 6817|J181031.64+541711.5,f|S|K1,18:10:31.64|108.14,54:17:11.59|246.9,5.97,2000 +SAO 123212|BD+03 3620|PPM 165327|J181040.29+031927.3,f|S|K2,18:10:40.30|18.87,3:19:27.32|-5.3,5.49,2000 +V10304|HD 166197|CD-3312917|PPM 297354|HR 6788|J181055.34-334800.2,f|V|B1,18:10:55.35|1.12,-33:48:0.25|-0.7,6.14,2000 +SAO 228774|CD-4712098|PPM 323816|HR 6778|J181104.40-473047.2,f|D|K1,18:11:4.40|-2.94,-47:30:47.23|-30,6.08,2000 +V24304|SAO 228778|HD 166114|CD-4112491|PPM 323817|HR 6786|J181105.56-412132.8,f|V|F2,18:11:5.56|32.43,-41:21:32.81|-38.3,5.86,2000 +HD 167387|BD+60 1813|HR 6827|J181107.15+602434.3,f|S|A1,18:11:7.15|-6.37,60:24:34.32|4.4,6.50,2000 +Tel Epsilon|SAO 228777|CD-4512251|PPM 323819|HR 6783|J181113.76-455715.9,f|D|K0,18:11:13.76|-16.27,-45:57:15.90|-37.3,4.52,2000 +SAO 161153|HD 166393|SD-19 4886|PPM 234154|HR 6798|J181114.78-195031.0,f|D|A4,18:11:14.78|-3.81,-19:50:31.05|-30.9,6.50,2000 +SAO 257569|HD 164712|CP-75 1410|PPM 373728|HR 6731|J181115.80-755329.4,f|D|K2,18:11:15.80|16.71,-75:53:29.44|-294.4,5.86,2000 +Sgr 11|SAO 186437|HD 166464|CD-2314047|J181143.33-234204.4,f|D|K0,18:11:43.33|7.83,-23:42:4.45|-27.8,4.96,2000 +V10363|HD 166988|BD+33 3044|HR 6814|J181145.12+332649.4,f|D|A3,18:11:45.12|13.52,33:26:49.41|12.1,5.99,2000 +Her 104|V0669 HER|BD+31 3199|HR 6815|J181154.15+312419.2,f|V|M3,18:11:54.16|-14.47,31:24:19.26|25.2,4.98,2000 +SAO 257571|HD 165259|CP-73 1888|PPM 373739|HR 6751|J181234.05-734020.7,f|D|F5,18:12:34.05|-54.86,-73:40:20.70|-262.7,5.90,2000 +BD+41 3011|HR 6824|J181242.61+410848.6,f|S|K0,18:12:42.62|-10.05,41:8:48.62|-44,6.35,2000 +BD+38 3113|HR 6826|J181304.81+384624.5,f|S|B9,18:13:4.82|-6.67,38:46:24.57|7.5,6.04,2000 +V0692 CRA|SAO 228815|HD 166596|CD-4112534|PPM 323855|J181312.69-412009.9,f|V|B2,18:13:12.70|-3.27,-41:20:10.00|-5.9,5.47,2000 +HD 167193|BD+21 3347|J181316.56+215249.1,f|S|K4,18:13:16.57|61.38,21:52:49.20|50.6,6.13,2000 +Sgr Mu-13A|Mu Sagittarii|SAO 186497|HD 166937|SD-21 4908|HR 6812|J181345.80-210331.8,f|D|B8,18:13:45.81|1.68,-21:3:31.80|-1.4,3.84,2000 +SAO 123271|HD 167162|BD+02 3537|PPM 165425|J181352.22+022336.4,f|S|K2,18:13:52.22|-1.35,2:23:36.47|-11.2,6.42,2000 +Dra 36|HD 168151|BD+64 1252|J181353.83+642350.2,f|S|F5,18:13:53.83|351.64,64:23:50.23|36,5.00,2000 +Sgr 14|V10393|SD-21 4916|HR 6816|J181415.90-214247.3,f|V|K3,18:14:15.90|-15.05,-21:42:47.39|-23.4,5.48,2000 +SAO 254179|HD 166251|CP-63 4334|PPM 363217|HR 6796|J181416.32-634122.8,f|S|K4,18:14:16.32|-26.33,-63:41:22.86|-58,6.47,2000 +Sgr 15|V24345|SAO 186543|HD 167264|SD-20 5054|PPM 268128|HR 6822|J181512.90-204341.7,f|V|B0,18:15:12.91|2.95,-20:43:41.77|-1.3,5.35,2000 +Sgr 16|SAO 186544|HD 167263|SD-20 5055|PPM 268129|HR 6823|J181512.97-202316.7,f|D|O9,18:15:12.97|2.81,-20:23:16.71|-1.9,5.98,2000 +Dra 37|HD 168653|BD+68 984|HR 6865|J181517.07+684520.9,f|S|K5,18:15:17.08|17.18,68:45:20.92|-63.7,5.96,2000 +V4387 SGR|SAO 161227|HD 167356|SD-18 4864|PPM 234244|HR 6825|J181530.76-183941.6,f|D|A0,18:15:30.76|0.57,-18:39:41.68|-2.2,6.07,2000 +BD+45 2684|HR 6847|J181532.46+451233.5,f|S|G2,18:15:32.46|-77.04,45:12:33.54|-114.4,6.30,2000 +V24354|HD 167965|BD+42 3035|PPM 56954|HR 6845|J181538.77+420933.6,f|V|B7,18:15:38.78|-2.89,42:9:33.64|1,5.57,2000 +SAO 254189|HD 166599|CP-63 4343|PPM 363234|J181540.61-630319.3,f|D|K0,18:15:40.62|-35.68,-63:3:19.32|-24,5.59,2000 +SAO 228851|CD-4412456|PPM 323894|HR 6818|J181553.44-441223.2,f|S|G8,18:15:53.45|69.25,-44:12:23.26|14.7,5.45,2000 +SAO 142185|HD 167564|SD-03 4259|J181557.93-033704.7,f|S|A4,18:15:57.93|-0.45,-3:37:4.77|-3.5,6.36,2000 +V2392 OPH|HD 167654|BD+02 3547|HR 6834|J181605.57+022239.0,f|V|M4,18:16:5.57|-6.89,2:22:39.06|-28.6,6.16,2000 +SAO 142189|HD 167768|SD-03 4263|J181653.10-030026.6,f|S|G3,18:16:53.10|18.13,-3:0:26.64|-273.3,6.01,2000 +SAO 245372|HD 167257|CD-5111460|PPM 346739|HR 6821|J181700.91-510405.7,f|S|B9,18:17:0.92|0.94,-51:4:5.78|-10.9,6.05,2000 +HD 168322|BD+40 3332|PPM 56971|HR 6853|J181706.81+405612.2,f|S|G8,18:17:6.81|-174.28,40:56:12.22|63.6,6.13,2000 +QV TEL|SAO 245369|HD 167128|CP-56 8706|PPM 346742|HR 6819|J181707.53-560124.0,f|V|B3,18:17:7.53|-5.37,-56:1:24.07|-13,5.37,2000 +SD-17 5112|PPM 234283|HR 6838|J181711.62-172225.9,f|S|K4,18:17:11.63|-1.72,-17:22:25.99|-14.2,5.80,2000 +SAO 186593|HD 167665|CD-2814408|PPM 268182|HR 6836|J181723.75-281720.3,f|S|G0,18:17:23.75|132.35,-28:17:20.31|-151.6,6.36,2000 +SAO 186594|HD 167666|CD-2814407|PPM 268183|HR 6835|J181724.08-283907.4,f|S|A5,18:17:24.09|10.53,-28:39:7.43|-14.4,6.18,2000 +V24362|SAO 142192|HD 167833|SD-09 4678|HR 6843|J181724.16-094530.8,f|V|A8,18:17:24.16|4.88,-9:45:30.88|-46.4,6.29,2000 +RS SGR|HD 167647|CD-3412673|HR 6833|J181736.24-340626.1,f|D|B3,18:17:36.25|-5.34,-34:6:26.13|-9.3,6.04,2000 +Sgr Eta|Eta Sagittarii|HD 167618|CD-3612423|HR 6832|J181737.63-364542.0,f|D|M3,18:17:37.64|-129.30,-36:45:42.07|-166.6,3.13,2000 +SAO 254196|HD 166841|CP-68 3081|PPM 363253|J181800.95-681345.3,f|D|B9,18:18:0.96|0.45,-68:13:45.33|-17,6.33,2000 +HD 168199|BD+13 3593|PPM 134522|HR 6851|J181802.94+134637.3,f|S|B5,18:18:2.94|-2.77,13:46:37.34|-7.2,6.30,2000 +SAO 186612|HD 167818|CD-2712684|HR 6842|J181803.19-270233.5,f|S|K3,18:18:3.19|4.54,-27:2:33.51|-2.8,4.65,2000 +BD+18 3623|PPM 134524|HR 6852|J181807.71+180754.0,f|S|B9,18:18:7.71|-3.14,18:7:54.09|2.6,6.24,2000 +V24387|HD 168323|BD+23 3299|HR 6854|J181807.72+231748.8,f|D|K5,18:18:7.73|11.85,23:17:48.86|-12,6.47,2000 +V24366|SAO 228895|HD 167756|CD-4213101|PPM 323942|HR 6839|J181840.15-421718.2,f|V|B0,18:18:40.16|3.77,-42:17:18.24|-5.8,6.30,2000 +SAO 186629|HD 167979|CD-2512995|HR 6846|J181841.75-253617.2,f|S|K5,18:18:41.76|-3.79,-25:36:17.25|-30.4,6.50,2000 +V24394|SAO 123353|HD 168387|BD+07 3629|HR 6857|J181909.53+071535.1,f|D|K2,18:19:9.54|-45.38,7:15:35.16|2,5.42,2000 +Her 105|HD 168532|BD+24 3381|J181910.68+242645.8,f|S|K3,18:19:10.68|8.47,24:26:45.81|5.4,5.28,2000 +HD 167425|CP-63 4370|PPM 363269|HR 6828|J181940.13-635311.6,f|D|F9,18:19:40.13|38.89,-63:53:11.62|-276.2,6.18,2000 +Lyr Kappa-1|V10657|HD 168775|BD+36 3094|HR 6872|J181951.70+360352.3,f|V|K2,18:19:51.71|-16.13,36:3:52.37|41.3,4.32,2000 +HD 168694|BD+29 3236|HR 6867|J181952.06+293959.0,f|S|K5,18:19:52.07|-2.48,29:39:59.01|3.6,6.00,2000 +BD+51 2357|PPM 36536|J181956.06+512052.1,f|S|K5,18:19:56.06|-36.26,51:20:52.16|-51.4,6.31,2000 +SAO 161348|HD 168415|SD-15 4927|PPM 234386|HR 6858|J182008.79-154954.1,f|S|K4,18:20:8.79|39.97,-15:49:54.11|-38.7,5.39,2000 +Her 106|V24405|BD+21 3390|HR 6868|J182017.91+215740.6,f|V|M1,18:20:17.91|17.53,21:57:40.67|-59.3,4.93,2000 +Dra Phi-43A|Phi Draconis|BD+71 889|PPM 9824|J182045.43+712016.1,f|D|A0,18:20:45.43|-5.90,71:20:16.13|35.8,4.23,2000 +Oph 74A|V24406|SAO 123377|HD 168656|BD+03 3680|PPM 165644|HR 6866|J182052.06+032237.7,f|D|G8,18:20:52.06|1.65,3:22:37.80|8.5,4.85,2000 +HD 168357|CD-3712457|PPM 297572|HR 6856|J182055.18-372915.5,f|S|K2,18:20:55.19|-1.67,-37:29:15.53|-7.3,6.43,2000 +Her 108|HD 168913|BD+29 3241|HR 6876|J182056.96+295132.1,f|S|A5,18:20:56.97|0.65,29:51:32.13|54.1,5.61,2000 +Kaus Media|Kaus Meridionalis|Media|Sgr Delta-19A|V24403|SAO 186681|HD 168454|CD-2914834|PPM 268275|HR 6859|J182059.64-294941.1,f|D|K2,18:20:59.64|29.93,-29:49:41.17|-26.4,2.70,2000 +Her 107|V10690|HD 168914|BD+28 2981|HR 6877|J182101.02+285211.8,f|V|A7,18:21:1.02|4.07,28:52:11.83|48.8,5.13,2000 +Dra Chi-44A|V10749|BD+72 839|HR 6927|J182103.38+724358.2,f|D|F7,18:21:3.38|531.04,72:43:58.23|-351.6,3.57,2000 +HD 169221|BD+49 2776|HR 6886|J182107.14+494331.6,f|S|K1,18:21:7.15|0.68,49:43:31.68|23.5,6.39,2000 +Ser Eta-58|V10675|SAO 142241|HD 168723|SD-02 4599|HR 6869|J182118.60-025355.7,f|D|K0,18:21:18.60|-547.55,-2:53:55.77|-700.7,3.25,2000 +Y SGR|SAO 161376|SD-18 4926|PPM 234421|HR 6863|J182122.98-185135.9,f|V|F8,18:21:22.99|-2.70,-18:51:36.00|-6.5,5.77,2000 +NW SER|SAO 123385|HD 168797|BD+05 3704|PPM 165661|HR 6873|J182128.40+052608.6,f|V|B3,18:21:28.40|-3.14,5:26:8.61|-8.1,6.15,2000 +V4028 SGR|SAO 186699|HD 168574|CD-2414219|PPM 268291|HR 6861|J182131.36-245454.9,f|V|M5,18:21:31.37|4.49,-24:54:54.99|-2.2,6.25,2000 +V24420|BD+49 2782|HR 6891|J182132.66+490717.7,f|V|M2,18:21:32.66|-24.15,49:7:17.74|51.1,5.03,2000 +HD 168646|CD-2814495|HR 6864|J182200.13-282547.8,f|S|A3,18:22:0.14|6.99,-28:25:47.87|-3.5,6.16,2000 +V24419|BD+23 3316|HR 6882|J182208.70+231706.6,f|V|M0,18:22:8.70|11.57,23:17:6.63|77.9,5.42,2000 +HD 168592|CD-3812729|HR 6862|J182218.57-383924.8,f|S|K4,18:22:18.57|-42.29,-38:39:24.82|-28.3,5.07,2000 +HD 169111|BD+11 3442|PPM 134626|HR 6883|J182235.31+120146.8,f|S|A2,18:22:35.32|8.95,12:1:46.85|14.6,5.98,2000 +HD 169191|BD+17 3555|PPM 134633|HR 6885|J182249.04+174935.8,f|S|K3,18:22:49.04|72.54,17:49:35.82|16.1,5.25,2000 +V4050 SGR|HD 168733|CD-3612524|PPM 297622|J182253.07-364010.4,f|V|B8,18:22:53.08|-1.68,-36:40:10.40|-26,5.35,2000 +V24421|SAO 161412|SD-10 4673|PPM 234458|HR 6878|J182302.10-101308.3,f|V|B9,18:23:2.11|9.30,-10:13:8.34|-22.2,6.34,2000 +HD 169223|BD+16 3478|PPM 134639|HR 6887|J182302.92+164116.8,f|S|K0,18:23:2.93|-11.35,16:41:16.80|-14.1,6.23,2000 +SAO 161415|SD-12 5024|PPM 234462|HR 6881|J182312.16-120053.1,f|S|B8,18:23:12.16|-8.22,-12:0:53.12|-19.6,5.71,2000 +Pav Xi|V10673|SAO 254226|HD 168339|CP-61 6140|HR 6855|J182313.62-612938.0,f|D|K4,18:23:13.62|0.50,-61:29:38.04|1.7,4.36,2000 +HD 168838|CD-3612537|PPM 297635|HR 6874|J182328.82-361416.7,f|S|K0,18:23:28.83|7.62,-36:14:16.75|5.3,5.52,2000 +Oct Phi|SAO 257584|HD 167468|CP-75 1417|HR 6829|J182336.44-750239.3,f|S|A0,18:23:36.45|4.49,-75:2:39.40|20.1,5.47,2000 +Sct Zeta|SAO 142267|HD 169156|SD-09 4712|HR 6884|J182339.58-085603.7,f|S|G9,18:23:39.58|51.86,-8:56:3.78|52.3,4.67,2000 +Her 109A|V10742|HD 169414|BD+21 3411|HR 6895|J182341.88+214611.1,f|D|K2,18:23:41.89|195.58,21:46:11.11|-242.9,3.85,2000 +HD 169885|BD+53 2079|PPM 36587|HR 6911|J182347.97+531803.0,f|S|A3,18:23:47.98|23.58,53:18:3.01|-10.7,6.36,2000 +Dra 39A|BD+58 1809|PPM 36589|HR 6923|J182354.60+584802.6,f|D|A1,18:23:54.61|-37.61,58:48:2.65|62.1,5.04,2000 +V10756|HD 169646|BD+38 3160|PPM 81288|J182357.28+384421.1,f|D|K4,18:23:57.28|7.84,38:44:21.16|13.6,6.39,2000 +SAO 142274|HD 169268|SD-03 4277|J182403.58-033459.3,f|S|F6,18:24:3.59|-16.77,-3:34:59.37|-47.4,6.36,2000 +HD 172864|BD+83 536|PPM 3224|J182409.27+831031.4,f|S|A2,18:24:9.27|18.39,83:10:31.44|-23.4,6.16,2000 +Kaus Australis|Sgr Epsilon-20|CD-3412784|PPM 297655|HR 6879|J182410.31-342304.6,f|D|B9,18:24:10.32|-39.61,-34:23:4.62|-124.1,1.81,2000 +Alathfar|Al Athfar|Lyr Mu-2|BD+39 3410|PPM 81293|J182413.78+393026.0,f|S|A3,18:24:13.79|-21.29,39:30:26.06|-4.6,5.12,2000 +V10724|SAO 228982|CD-4412569|HR 6875|J182418.24-440636.9,f|D|B2,18:24:18.24|1.08,-44:6:36.92|-22.6,5.24,2000 +SAO 228983|HD 168871|CD-4912105|J182433.13-493910.3,f|S|G2,18:24:33.14|33.02,-49:39:10.36|-150.2,6.45,2000 +SAO 142288|SD-07 4598|HR 6892|J182442.12-070433.3,f|S|K0,18:24:42.13|134.86,-7:4:33.37|-26.2,6.29,2000 +SAO 142294|HD 169493|BD-01 3486|HR 6898|J182457.20-013445.8,f|D|F6,18:24:57.21|6.00,-1:34:45.89|-4.1,6.19,2000 +HD 169718|BD+27 3016|J182458.46+272341.2,f|D|A0,18:24:58.46|1.60,27:23:41.22|-14.4,6.29,2000 +Sgr 18|HD 169233|CD-3015661|PPM 297678|HR 6888|J182501.42-304523.6,f|S|K0,18:25:1.43|-128.00,-30:45:23.65|-69.6,5.58,2000 +Sgr 21A|SAO 186794|SD-20 5134|PPM 268387|HR 6896|J182521.04-203230.0,f|D|K2,18:25:21.04|8.29,-20:32:30.04|-28.7,4.86,2000 +HD 169236|CD-3612589|PPM 297683|HR 6889|J182521.67-355931.2,f|S|K0,18:25:21.67|-34.71,-35:59:31.29|2.2,6.15,2000 +V0346 PAV|SAO 254237|CP-63 4406|PPM 363325|HR 6871|J182531.63-630117.5,f|V|A3,18:25:31.63|0.54,-63:1:17.52|-101.9,6.13,2000 +V2291 OPH|SAO 123462|HD 169689|BD+07 3682|J182538.79+080155.2,f|V|G9,18:25:38.80|-4.31,8:1:55.22|-7.4,5.66,2000 +HD 169398|CD-3412802|HR 6893|J182554.60-335644.5,f|S|B5,18:25:54.61|-1.62,-33:56:44.59|-10.9,6.32,2000 +BD+14 3533|PPM 134713|J182555.22+145758.4,f|S|B9,18:25:55.23|-7.54,14:57:58.44|-19.9,6.37,2000 +V24441|HD 169981|BD+29 3259|HR 6917|J182558.78+294944.1,f|V|A2,18:25:58.79|23.29,29:49:44.15|-24.5,5.82,2000 +Dra 42|BD+65 1271|HR 6945|J182559.13+653348.5,f|S|K1,18:25:59.14|106.54,65:33:48.53|-27.1,4.83,2000 +BD+26 3259|HR 6924|J182640.92+262657.1,f|D|B3,18:26:40.93|1.61,26:26:57.18|-6.2,6.50,2000 +CD-4812505|HR 6894|J182654.01-480702.0,f|S|K0,18:26:54.01|3.71,-48:7:2.07|-55.1,5.45,2000 +Tel Alpha|HD 169467|CD-4612379|HR 6897|J182658.41-455806.4,f|S|B3,18:26:58.42|-16.68,-45:58:6.45|-53.3,3.49,2000 +SAO 245474|HD 169326|CP-53 9129|PPM 346871|J182704.21-530636.7,f|S|K2,18:27:4.21|-12.61,-53:6:36.77|6,5.97,2000 +Ser 59A|d SER|SAO 123497|HD 169985|BD+00 3936|PPM 165855|HR 6918|J182712.50+001145.9,f|D|G0,18:27:12.51|-2.70,0:11:45.99|-8.8,5.20,2000 +BD+59 1899|PPM 36636|HR 6949|J182742.14+593256.8,f|S|K0,18:27:42.15|45.76,59:32:56.80|38.5,6.42,2000 +SAO 186837|HD 169851|CD-2613184|PPM 268434|J182743.75-263805.4,f|D|A8,18:27:43.75|-9.12,-26:38:5.44|-36.9,6.35,2000 +SAO 186838|CD-2914965|PPM 268436|J182749.48-294900.7,f|S|F9,18:27:49.48|-0.78,-29:49:0.71|15.2,5.91,2000 +SAO 123513|BD+03 3716|PPM 165877|HR 6925|J182750.32+034454.8,f|S|K3,18:27:50.32|-1.95,3:44:54.85|-8.1,6.05,2000 +V10835|SAO 161493|SD-17 5203|PPM 234567|HR 6919|J182756.47-174801.2,f|V|B8,18:27:56.48|-2.71,-17:48:1.28|-2.9,6.19,2000 +Kaus Borealis|Sgr Lambda-22|SAO 186841|HD 169916|CD-2513149|PPM 268438|HR 6913|J182758.24-252518.1,f|S|K1,18:27:58.24|-44.84,-25:25:18.12|-186.3,2.83,2000 +SAO 123516|BD+06 3790|PPM 165881|HR 6928|J182758.77+061138.7,f|S|B8,18:27:58.77|-1.19,6:11:38.77|-23.3,5.71,2000 +SAO 186843|HD 169938|CD-2613192|PPM 268443|HR 6914|J182806.16-264526.0,f|S|A3,18:28:6.17|-8.71,-26:45:26.08|-35.9,6.28,2000 +SAO 258795|HD 165338|CP-84 573|PPM 378194|J182806.42-842314.1,f|S|B8,18:28:6.42|13.14,-84:23:14.12|-9.1,6.49,2000 +HD 169853|CD-3912626|PPM 297764|J182827.11-385944.4,f|S|A2,18:28:27.11|-0.23,-38:59:44.41|-41.7,5.64,2000 +Tel Zeta|HD 169767|CD-4912153|PPM 324133|J182849.85-490414.1,f|S|G8,18:28:49.86|137.87,-49:4:14.12|-229.1,4.11,2000 +Sct Gamma|SD-14 5071|J182911.85-143356.9,f|S|A3,18:29:11.85|3.05,-14:33:56.93|-3.5,4.69,2000 +HD 169943|CD-4312564|PPM 324141|HR 6915|J182912.87-435045.3,f|S|G8,18:29:12.87|0.76,-43:50:45.38|22,6.36,2000 +SAO 258796|HD 167714|CP-80 849|PPM 378196|HR 6837|J182919.94-801357.7,f|S|K2,18:29:19.94|-23.33,-80:13:57.75|-63.4,5.95,2000 +BD+23 3347|HR 6943|J182935.71+235158.3,f|S|B6,18:29:35.71|0.00,23:51:58.33|-2,5.88,2000 +Ser 60|SAO 142348|SD-02 4641|HR 6935|J182940.97-015907.1,f|S|K0,18:29:40.98|29.68,-1:59:7.11|-33.8,5.38,2000 +BD+77 699|PPM 9885|J182944.96+773249.4,f|S|K5,18:29:44.97|1.58,77:32:49.45|-0.7,5.64,2000 +V0432 SCT|SAO 161528|SD-14 5077|PPM 234611|HR 6932|J182946.76-143455.1,f|V|B9,18:29:46.76|21.92,-14:34:55.15|15.1,6.03,2000 +CD-4712319|PPM 324154|HR 6922|J182955.94-471313.9,f|S|K2,18:29:55.94|29.54,-47:13:13.96|-13.4,5.68,2000 +HD 169836|CP-57 9063|PPM 346916|J182956.73-573123.3,f|D|K0,18:29:56.74|56.46,-57:31:23.32|-24.9,5.75,2000 +SD-18 4982|PPM 234623|HR 6933|J183011.86-184343.6,f|S|K5,18:30:11.86|33.67,-18:43:43.66|-90.5,5.63,2000 +SAO 142353|SD-05 4675|J183014.29-054327.0,f|S|G8,18:30:14.30|-2.24,-5:43:27.01|-16.9,6.27,2000 +V24480|BD+20 3821|J183041.65+204854.1,f|V|G8,18:30:41.65|16.26,20:48:54.17|-263.8,6.48,2000 +CD-4112871|PPM 324175|HR 6931|J183102.94-415449.8,f|S|A3,18:31:2.95|-3.01,-41:54:49.80|-31.5,6.02,2000 +BD+16 3529|PPM 134827|HR 6955|J183104.44+165542.8,f|S|A2,18:31:4.45|-33.01,16:55:42.80|-20.8,5.76,2000 +V24469|CD-3313281|PPM 297823|HR 6936|J183104.84-325920.8,f|D|A3,18:31:4.84|-1.51,-32:59:20.81|-46.5,5.39,2000 +Pav Nu|Nu Piscis Austrini|SAO 254273|HD 169978|CP-62 5879|PPM 363387|HR 6916|J183122.42-621641.8,f|S|B7,18:31:22.43|-0.98,-62:16:41.89|-45.6,4.62,2000 +V24483|SAO 161569|SD-10 4713|HR 6946|J183125.69-104745.0,f|D|B2,18:31:25.69|1.62,-10:47:45.01|-17.6,5.76,2000 +SAO 161564|SD-18 4988|PPM 234652|HR 6944|J183126.29-182409.7,f|D|A0,18:31:26.30|-6.97,-18:24:9.71|-21.4,5.13,2000 +Tel Delta1|CD-4512550|PPM 324193|HR 6934|J183145.43-455453.3,f|S|B6,18:31:45.43|-3.76,-45:54:53.33|-28.8,4.93,2000 +U SGR|SAO 161571|SD-19 5047|PPM 234663|HR 6947|J183153.33-190730.2,f|D|G1,18:31:53.33|-4.11,-19:7:30.26|-6.1,6.38,2000 +CD-4312600|PPM 324195|HR 6937|J183156.22-433026.5,f|S|K2,18:31:56.22|-1.09,-43:30:26.58|-7.5,5.69,2000 +Ser 61|SAO 142372|BD-01 3504|HR 6957|J183156.99-010010.7,f|S|A4,18:31:56.99|10.05,-1:0:10.72|-4.6,5.95,2000 +Tel Delta2|CD-4512556|PPM 324198|HR 6938|J183201.94-454526.5,f|S|B3,18:32:1.95|1.26,-45:45:26.57|-11.6,5.08,2000 +MV SER|BD+03 3737|HR 6958|J183206.88+033934.5,f|V|A0,18:32:6.89|9.28,3:39:34.57|3.2,6.42,2000 +SD-14 5098|PPM 234676|HR 6956|J183220.65-143839.3,f|S|A4,18:32:20.66|-3.19,-14:38:39.37|-21.1,6.36,2000 +CD-3912696|HR 6942|J183221.33-394214.4,f|S|A3,18:32:21.33|31.97,-39:42:14.40|-37.6,5.16,2000 +Dra 45|HD 171635|BD+56 2113|PPM 36692|HR 6978|J183234.52+570244.1,f|S|F7,18:32:34.52|0.33,57:2:44.16|-7.1,4.78,2000 +V0450 SCT|SAO 161587|SD-14 5099|PPM 234686|HR 6959|J183243.32-145156.3,f|V|K3,18:32:43.32|0.14,-14:51:56.38|-3.4,5.50,2000 +HD 171245|BD+23 3363|HR 6966|J183246.15+233700.4,f|S|K5,18:32:46.16|13.33,23:37:0.48|10.2,5.86,2000 +BD+30 3223|PPM 81464|HR 6968|J183249.95+303315.1,f|D|B8,18:32:49.96|13.43,30:33:15.15|11.6,5.47,2000 +CP-74 1682|PPM 373867|HR 6899|J183255.34-735756.1,f|S|K0,18:32:55.34|6.88,-73:57:56.15|-87.3,5.88,2000 +CD-3912704|PPM 297861|HR 6948|J183300.91-395331.2,f|S|F5,18:33:0.92|86.32,-39:53:31.28|-80.3,6.23,2000 +SAO 142386|HD 171149|SD-06 4791|HR 6963|J183322.70-055442.1,f|S|A0,18:33:22.71|-11.04,-5:54:42.18|-28.2,6.36,2000 +CrA Kappa1|CD-3812896|PPM 297868|HR 6952|J183323.08-384312.1,f|D|A0,18:33:23.09|10.06,-38:43:12.12|-12.5,6.28,2000 +CrA Kappa2|CD-3812895|PPM 297869|HR 6953|J183323.13-384333.5,f|D|B9,18:33:23.13|-0.59,-38:43:33.55|-21.8,5.61,2000 +V2393 OPH|SAO 123634|HD 171247|BD+08 3741|HR 6967|J183323.30+081605.7,f|D|B8,18:33:23.30|-0.89,8:16:5.70|-9.1,6.43,2000 +SAO 245547|CP-58 7418|PPM 346959|HR 6939|J183329.47-584231.6,f|S|G5,18:33:29.47|23.92,-58:42:31.62|-104.1,6.42,2000 +CrA Theta|SAO 229111|CD-4213378|PPM 324219|HR 6951|J183330.18-421845.0,f|S|G8,18:33:30.19|32.50,-42:18:45.03|-21,4.62,2000 +SD-14 5106|HR 6962|J183339.02-145113.0,f|S|A2,18:33:39.02|27.26,-14:51:13.01|-9.5,5.74,2000 +Sgr 24|SAO 186981|HD 171115|CD-2414472|PPM 268587|HR 6961|J183353.48-240156.2,f|S|K4,18:33:53.49|-3.01,-24:1:56.22|-7.1,5.50,2000 +HD 171779|BD+52 2238|HR 6983|J183356.68+522112.6,f|D|K0,18:33:56.68|-3.30,52:21:12.69|3,5.37,2000 +V24494|CD-3313338|PPM 297883|J183357.76-330059.6,f|V|B2,18:33:57.77|2.39,-33:0:59.62|-11.2,5.28,2000 +SAO 245559|CP-5211158|PPM 346973|HR 6954|J183431.11-525329.4,f|S|K2,18:34:31.12|-17.01,-52:53:29.47|-42,6.21,2000 +BD+10 3573|PPM 134929|HR 6976|J183447.49+105331.2,f|S|A1,18:34:47.49|6.92,10:53:31.24|3.8,6.48,2000 +V24511|SAO 161632|HD 171391|SD-11 4681|PPM 234743|J183502.39-105837.9,f|V|G8,18:35:2.39|49.04,-10:58:37.94|-5,5.13,2000 +Sct Alpha|V11056|HD 171443|SD-08 4638|HR 6973|J183512.42-081438.6,f|V|K3,18:35:12.43|-19.00,-8:14:38.66|-314.6,3.85,2000 +HD 171623|BD+18 3740|PPM 134941|HR 6977|J183512.60+181212.2,f|S|A0,18:35:12.60|21.23,18:12:12.28|7.5,5.79,2000 +V24520|BD+34 3245|HR 6984|J183513.50+342728.8,f|V|B5,18:35:13.51|2.84,34:27:28.88|8.4,6.10,2000 +V4190 SGR|HD 171369|SD-20 5189|PPM 268618|HR 6969|J183521.33-205025.5,f|V|F0,18:35:21.33|28.74,-20:50:25.59|-1.4,6.48,2000 +HD 171745|BD+23 3385|J183530.39+233619.9,f|D|G9,18:35:30.40|3.30,23:36:19.91|0.7,5.64,2000 +FR SER|SAO 123673|HD 171586|BD+04 3801|PPM 166144|J183536.49+045609.5,f|D|A2,18:35:36.49|30.64,4:56:9.56|-29.8,6.46,2000 +V11085|HD 171746|BD+16 3560|PPM 134947|HR 6981|J183553.22+165832.5,f|D|G2,18:35:53.22|49.06,16:58:32.51|-71.2,6.21,2000 +HD 171416|CD-2915123|PPM 268632|HR 6972|J183559.64-294156.7,f|S|K1,18:35:59.64|4.56,-29:41:56.77|-9.9,6.36,2000 +HD 172569|BD+65 1283|J183613.27+652919.3,f|S|F0,18:36:13.27|20.29,65:29:19.38|83.4,6.06,2000 +BD+09 3783|PPM 166169|HR 6985|J183627.83+090720.9,f|S|F5,18:36:27.83|-6.37,9:7:20.97|-133.9,5.38,2000 +V11113|BD+33 3154|PPM 81551|HR 6997|J183637.34+332808.5,f|D|B8,18:36:37.34|-9.01,33:28:8.53|-0.4,5.42,2000 +SAO 123693|HD 171834|BD+06 3855|PPM 166175|HR 6987|J183639.07+064018.4,f|D|F3,18:36:39.07|-30.69,6:40:18.50|-144.3,5.44,2000 +V0533 LYR|HD 172187|BD+43 3027|PPM 57314|J183645.54+431318.5,f|V|F0,18:36:45.55|21.86,43:13:18.53|-10.8,6.22,2000 +Vega|Fidis|Harp Star|Lyr Alpha-3A|Alpha Lyrae|HD 172167|BD+38 3238|PPM 81558|J183656.33+384701.2,f|D|A0,18:36:56.34|201.00,38:47:1.29|287.5,0.03,2000 +HD 171994|BD+16 3563|HR 6995|J183709.05+161153.8,f|S|G8,18:37:9.06|14.69,16:11:53.86|48.6,6.31,2000 +HD 172728|BD+62 1637|J183733.50+623135.7,f|S|A0,18:37:33.50|-8.37,62:31:35.73|52.6,5.74,2000 +V11122|SAO 142444|HD 171978|BD-00 3521|HR 6993|J183735.96-001834.1,f|V|A1,18:37:35.96|11.70,-0:18:34.10|-19.8,5.77,2000 +HD 171856|SD-21 5076|PPM 268681|HR 6988|J183754.42-212351.8,f|S|A8,18:37:54.43|-2.51,-21:23:51.81|-65.7,5.94,2000 +XY LYR|BD+39 3476|PPM 81583|J183806.47+394005.9,f|V|M4,18:38:6.48|6.70,39:40:5.97|8.6,6.14,2000 +SAO 142461|SD-03 4331|HR 6999|J183823.79-031137.1,f|D|F9,18:38:23.80|6.44,-3:11:37.16|33.6,6.48,2000 +HD 171961|CD-2314572|PPM 268694|J183830.71-233017.6,f|S|B8,18:38:30.72|-0.55,-23:30:17.62|-19.6,5.78,2000 +SD-21 5081|PPM 268697|HR 6998|J183853.40-210306.7,f|S|G4,18:38:53.40|-74.89,-21:3:6.74|-151.9,5.86,2000 +SAO 229165|HD 171819|CD-4812644|PPM 324294|HR 6986|J183914.29-475435.1,f|S|A7,18:39:14.29|26.44,-47:54:35.16|14.9,5.85,2000 +HD 172671|BD+40 3446|PPM 57344|J183933.03+405606.2,f|D|B9,18:39:33.03|14.84,40:56:6.23|-1.3,6.24,2000 +V0718 CRA|SAO 229172|HD 171967|CD-4312699|HR 6991|J183935.15-431109.1,f|V|M2,18:39:35.16|-31.50,-43:11:9.16|-42.2,5.43,2000 +SAO 123778|HD 172365|BD+05 3891|PPM 166311|J183936.87+051551.4,f|S|F8,18:39:36.88|1.79,5:15:51.43|2,6.38,2000 +SAO 123782|HD 172424|BD+07 3798|PPM 166324|J183951.59+072130.9,f|D|G8,18:39:51.60|-2.08,7:21:30.95|-45.8,6.27,2000 +V24545|HD 172883|BD+52 2263|PPM 36754|J183952.81+521145.8,f|V|A0,18:39:52.81|5.42,52:11:45.87|21.4,6.00,2000 +HD 172348|SD-07 4648|J184000.38-074726.8,f|D|K4,18:40:0.39|-21.10,-7:47:26.88|-37.3,5.82,2000 +HD 172631|BD+30 3262|PPM 81629|J184001.92+305058.0,f|S|K0,18:40:1.92|-13.14,30:50:58.09|34.2,6.43,2000 +HD 172741|BD+38 3254|PPM 81633|J184012.20+382201.9,f|S|A6,18:40:12.20|19.29,38:22:1.90|6.8,6.49,2000 +HD 173398|BD+62 1641|J184056.40+624458.0,f|S|K0,18:40:56.41|9.34,62:44:58.08|53.9,6.09,2000 +V11183|SAO 229194|HD 172223|CD-4812668|PPM 324338|J184130.68-480540.8,f|V|K2,18:41:30.68|-16.03,-48:5:40.87|-114.5,6.46,2000 +HD 172958|BD+31 3332|PPM 81662|J184141.31+313703.4,f|S|B8,18:41:41.31|8.30,31:37:3.40|6.3,6.41,2000 +HD 172594|SD-14 5156|J184142.46-143351.2,f|S|F2,18:41:42.46|1.45,-14:33:51.28|-0.8,6.44,2000 +Sgr 26|SAO 187146|HD 172546|CD-2314625|PPM 268762|J184151.62-235000.3,f|S|A2,18:41:51.63|30.73,-23:50:0.32|-28.1,6.21,2000 +BD+34 3285|PPM 81671|J184208.08+344446.7,f|D|B5,18:42:8.09|-0.12,34:44:46.70|-3.7,6.47,2000 +V24510|CP-81 813|PPM 378222|HR 6912|J184214.42-814829.2,f|V|B8,18:42:14.42|14.62,-81:48:29.21|-16.8,6.27,2000 +Sct Delta|Delta Scuti|SAO 142515|HD 172748|SD-09 4796|J184216.42-090309.1,f|D|F2,18:42:16.43|7.85,-9:3:9.18|2,4.71,2000 +SAO 254343|CP-64 3942|PPM 363525|HR 6996|J184222.62-643834.9,f|S|A5,18:42:22.62|-3.21,-64:38:34.96|-28.8,6.36,2000 +SAO 142525|HD 172831|SD-07 4670|J184236.11-070425.1,f|S|K0,18:42:36.12|-6.85,-7:4:25.16|-9,6.13,2000 +Dra 46A|V11273|HD 173524|BD+55 2107|PPM 36781|J184237.95+553222.0,f|D|B9,18:42:37.95|-2.63,55:32:22.05|23.4,5.03,2000 +V3879 SGR|SAO 161754|HD 172816|SD-19 5134|J184255.09-191703.1,f|V|M4,18:42:55.10|-12.60,-19:17:3.15|-33.3,6.43,2000 +Pav Zeta|HD 171759|CP-71 2353|PPM 373937|HR 6982|J184302.13-712541.2,f|D|K0,18:43:2.14|1.24,-71:25:41.21|-158.3,4.01,2000 +BD+70 1023|PPM 9972|J184310.35+704734.2,f|S|K2,18:43:10.35|5.63,70:47:34.26|-5.3,6.28,2000 +V11271|HD 173383|BD+39 3505|PPM 81699|J184316.57+391800.2,f|D|K5,18:43:16.57|-0.70,39:18:0.24|-6.4,6.44,2000 +HD 173664|BD+53 2126|PPM 36799|J184329.01+535218.3,f|S|A2,18:43:29.01|5.75,53:52:18.36|-12.3,6.20,2000 +Sct Epsilon|SAO 142546|SD-08 4686|J184331.25-081630.7,f|D|G8,18:43:31.25|21.23,-8:16:30.77|11.6,4.90,2000 +HD 173416|BD+36 3246|J184336.10+363323.7,f|S|K0,18:43:36.11|21.57,36:33:23.78|57.6,6.05,2000 +SAO 254353|HD 172211|CP-64 3943|PPM 363542|J184337.33-643305.1,f|S|K0,18:43:37.34|14.50,-64:33:5.13|-46.8,5.76,2000 +CrA Lambda|V11247|HD 172777|CD-3813036|J184346.94-381924.3,f|D|A2,18:43:46.94|1.18,-38:19:24.39|-53.8,5.12,2000 +SAO 142557|SD-06 4859|J184351.23-064905.2,f|S|F7,18:43:51.23|29.34,-6:49:5.23|-44.1,6.30,2000 +HD 173417|BD+31 3348|PPM 81713|J184351.59+315535.8,f|S|F1,18:43:51.59|-32.97,31:55:35.81|-126.1,5.68,2000 +HD 172875|CD-3612946|J184407.94-364306.0,f|S|K0,18:44:7.95|23.93,-36:43:6.01|-41.8,6.31,2000 +HD 173949|BD+60 1845|J184418.26+610253.3,f|D|G7,18:44:18.27|0.15,61:2:53.32|19.4,6.04,2000 +V24566|CD-3512876|J184419.36-353831.1,f|D|B2,18:44:19.36|1.22,-35:38:31.15|-27,4.86,2000 +Lyr Epsilon-4B|HD 173583|BD+39 3509B|J184420.31+394014.8,f|D|F1,18:44:20.31|1.62,39:40:14.85|47.2,6.00,2000 +Double Double|Lyr Epsilon-4A|HD 173582|BD+39 3509A|PPM 81725|J184420.34+394012.4,f|D|A4,18:44:20.35|10.51,39:40:12.44|60.2,5.01,2000 +Lyr Epsilon-5C|V11301|BD+39 3510|PPM 81726|J184422.78+393645.7,f|D|A8,18:44:22.78|5.89,39:36:45.80|51.8,5.21,2000 +Lyr Epsilon-5D|V11301|BD+39 3510D|PPM 81726|J184422.98+393646.0,f|D|F0,18:44:22.98|7.16,39:36:46.08|69.1,5.38,2000 +HD 173494|BD+23 3439|J184440.29+233523.5,f|S|F6,18:44:40.30|16.50,23:35:23.58|-85.6,6.31,2000 +Lyr Zeta-6A|V11308|HD 173648|BD+37 3222|J184446.35+373618.4,f|D|A4,18:44:46.36|29.23,37:36:18.41|26.6,4.34,2000 +Lyr Zeta-7D|V11311|HD 173649|BD+37 3223|PPM 81741|J184448.20+373540.6,f|D|F0,18:44:48.20|19.25,37:35:40.61|20.7,5.69,2000 +SAO 187216|HD 173117|CD-2513394|PPM 268836|J184449.60-250039.2,f|S|B5,18:44:49.60|-1.22,-25:0:39.29|-20.9,5.82,2000 +Aql 4|V11290|SAO 123879|BD+01 3766|PPM 166497|J184449.93+020336.1,f|V|B9,18:44:49.94|8.84,2:3:36.14|-15.1,5.02,2000 +BD+54 2034|PPM 36818|J184455.40+545349.8,f|S|G5,18:44:55.40|9.75,54:53:49.86|-1.9,6.26,2000 +HD 172991|CD-3912864|J184457.15-394110.2,f|S|K3,18:44:57.16|8.66,-39:41:10.28|-6.3,5.44,2000 +SAO 254359|CP-61 6229|PPM 363555|J184511.52-610542.7,f|S|K3,18:45:11.53|24.29,-61:5:42.71|-23.6,6.02,2000 +SAO 187234|HD 173282|SD-21 5131|PPM 268854|J184518.65-210005.8,f|S|F5,18:45:18.66|26.75,-21:0:5.82|-28.4,6.34,2000 +SAO 245681|HD 172781|CP-57 9180|PPM 347124|J184523.88-565255.0,f|S|K3,18:45:23.88|-41.72,-56:52:55.09|-20.9,6.22,2000 +SAO 254358|HD 172555|CP-64 3948|PPM 363559|J184526.90-645216.5,f|S|A5,18:45:26.90|32.68,-64:52:16.53|-148.7,4.78,2000 +SAO 123886|HD 173495|BD+05 3941|PPM 166515|J184528.36+053000.4,f|D|A1,18:45:28.36|15.53,5:30:0.46|2,5.82,2000 +HD 175938|BD+79 604|PPM 9988|J184538.10+795633.6,f|S|A8,18:45:38.10|12.44,79:56:33.62|67.6,6.40,2000 +Sgr Phi-27|SAO 187239|CD-2713170|PPM 268859|J184539.38-265926.8,f|S|B8,18:45:39.39|51.19,-26:59:26.80|0.5,3.17,2000 +Her 110A|V11323|HD 173667|BD+20 3926|J184539.72+203246.7,f|D|F6,18:45:39.73|-9.27,20:32:46.71|-335.6,4.21,2000 +BD+73 835|PPM 9991|HR 7117|J184546.76+740507.9,f|S|K0,18:45:46.77|5.14,74:5:7.99|82,5.24,2000 +SAO 245693|CD-5012122|PPM 347132|J184555.99-505221.7,f|S|B8,18:45:56.00|1.99,-50:52:21.77|-15.2,6.25,2000 +V4405 SGR|HD 173425|SD-19 5154|PPM 234997|J184601.14-193622.8,f|V|M4,18:46:1.15|-7.49,-19:36:22.88|5.3,6.43,2000 +BD+26 3349|J184604.48+263943.6,f|S|K2,18:46:4.48|18.63,26:39:43.67|24.4,4.83,2000 +HD 173936|BD+41 3137|PPM 57474|J184613.00+412630.5,f|S|B6,18:46:13.01|1.01,41:26:30.52|-0.1,6.07,2000 +Sgr 28|V24582|SAO 187255|CD-2213275|PPM 268874|J184620.60-222331.8,f|D|K4,18:46:20.61|32.04,-22:23:31.83|3.5,5.38,2000 +Dra 50|HD 175286|BD+75 682|PPM 9993|HR 7124|J184622.23+752602.2,f|S|A1,18:46:22.24|-12.18,75:26:2.27|68.6,5.37,2000 +Aql 5A|V24583|HD 173654|BD-01 3559|J184628.59-005742.0,f|D|A2,18:46:28.59|19.95,-0:57:42.09|-21.8,5.88,2000 +HD 173833|BD+18 3817|J184641.36+184221.2,f|S|K5,18:46:41.36|15.77,18:42:21.27|-24.7,6.19,2000 +CX DRA|HD 174237|BD+52 2280|PPM 36839|J184643.08+525916.6,f|V|B2,18:46:43.09|10.11,52:59:16.66|-4,5.91,2000 +V11333|SAO 161817|HD 173638|SD-10 4797|J184643.32-100730.1,f|D|F2,18:46:43.32|0.44,-10:7:30.17|-3.9,5.72,2000 +Her 111A|V24591|BD+18 3823|PPM 135215|J184701.27+181053.4,f|D|A5,18:47:1.27|83.80,18:10:53.47|119,4.35,2000 +Sct Beta|SAO 142618|HD 173764|SD-04 4582|J184710.47-044452.3,f|S|G4,18:47:10.47|-7.77,-4:44:52.32|-15.9,4.23,2000 +R SCT|HD 173819|SD-05 4760|J184728.95-054218.5,f|V|K0,18:47:28.95|-44.03,-5:42:18.53|-31.4,5.40,2000 +CrA Mu|SAO 229285|CD-4012807|PPM 324446|J184744.61-402422.2,f|S|G5,18:47:44.62|24.67,-40:24:22.20|-18.6,5.21,2000 +V24557|SAO 257625|CP-77 1314|PPM 373971|HR 6994|J184749.13-775205.6,f|V|F8,18:47:49.13|-26.51,-77:52:5.70|149.5,6.40,2000 +HD 174179|BD+31 3369|PPM 81823|J184757.37+314524.6,f|S|B3,18:47:57.37|0.13,31:45:24.61|-3.9,6.06,2000 +SAO 123928|HD 173954|BD+04 3884|PPM 166593|J184802.66+041429.1,f|S|K5,18:48:2.67|-4.94,4:14:29.12|14.3,6.19,2000 +HD 174481|BD+48 2770|PPM 57518|J184816.07+484603.2,f|S|A7,18:48:16.07|-18.49,48:46:3.20|48.7,6.12,2000 +BD+23 3461|J184816.40+233053.0,f|S|F8,18:48:16.40|25.31,23:30:53.09|-6.8,6.19,2000 +Pav Theta|SAO 254374|HD 173168|CP-65 3754|PPM 363593|J184837.90-650439.6,f|S|A8,18:48:37.91|-38.05,-65:4:39.65|-78.2,5.71,2000 +SD-06 4913|J184839.49-060015.5,f|D|A5,18:48:39.49|8.35,-6:0:15.52|32,6.50,2000 +SAO 161848|HD 173928|SD-18 5079|J184845.41-183604.1,f|D|G5,18:48:45.41|1.28,-18:36:4.14|2.6,6.50,2000 +CrA Eta1|SAO 229299|HD 173715|CD-4312841|PPM 324469|J184850.49-434048.1,f|S|A3,18:48:50.49|24.41,-43:40:48.17|-20.8,5.46,2000 +HD 174262|BD+19 3798|J184853.38+191943.3,f|S|A1,18:48:53.39|15.99,19:19:43.39|-21,5.90,2000 +HD 173791|CD-4512779|PPM 324479|J184927.34-454836.3,f|S|G8,18:49:27.34|74.86,-45:48:36.36|57.3,5.80,2000 +CrA Eta2|HD 173861|CD-4312854|J184934.99-432602.7,f|S|B9,18:49:35.00|-2.83,-43:26:2.77|-25.4,5.60,2000 +SAO 123947|BD+00 4027|PPM 166636|J184937.19+005010.3,f|S|A1,18:49:37.19|13.80,0:50:10.31|-15.8,6.24,2000 +Sgr 29|V11372|SAO 187324|HD 174116|SD-20 5277|PPM 268946|J184940.10-201928.7,f|D|K4,18:49:40.11|-1.83,-20:19:28.76|34.7,5.22,2000 +SAO 142661|SD-06 4922|J184940.95-055446.3,f|D|K2,18:49:40.96|0.30,-5:54:46.30|-11.7,5.98,2000 +HD 172881|CP-73 1939|PPM 373986|J184943.68-725944.6,f|D|B9,18:49:43.68|2.06,-72:59:44.60|-4.1,6.06,2000 +Lyr Nu1-8A|V11400|HD 174585|BD+32 3227|PPM 81881|J184945.91+324846.1,f|D|B3,18:49:45.91|1.89,32:48:46.15|-5.2,5.93,2000 +Lyr Nu2-9|BD+32 3228|PPM 81882|J184952.91+323303.8,f|D|A3,18:49:52.92|-11.76,32:33:3.81|-12.8,5.23,2000 +Sheliak|Lyr Beta-10A|Beta Lyrae|HD 174638|BD+33 3223A|PPM 81887|J185004.79+332145.6,f|D|B8,18:50:4.79|1.13,33:21:45.60|-4.5,3.52,2000 +SAO 161893|HD 174328|SD-13 5119|J185031.16-133420.1,f|S|K1,18:50:31.17|-5.40,-13:34:20.14|-8,6.48,2000 +HD 174569|BD+10 3685|PPM 135334|J185045.55+105835.0,f|D|K5,18:50:45.55|7.51,10:58:35.01|6.4,6.37,2000 +Sgr 30|SAO 187342|SD-22 4881|PPM 268964|J185050.49-220943.8,f|D|A7,18:50:50.49|-17.09,-22:9:43.88|-35.3,6.29,2000 +SAO 142692|HD 174464|SD-09 4859|J185058.50-094626.7,f|S|F2,18:50:58.51|6.36,-9:46:26.74|2.5,5.84,2000 +SAO 229318|HD 174152|CD-4113159A|J185058.65-410345.6,f|D|B5,18:50:58.65|4.86,-41:3:45.67|-3.7,6.49,2000 +Dra Omicron-47A|Omicron Draconis|BD+59 1925A|PPM 36888|HR 7125|J185112.09+592318.0,f|D|G9,18:51:12.10|77.53,59:23:18.06|25.4,4.64,2000 +Aql 8|HD 174589|SD-03 4392|J185122.15-031904.2,f|S|F2,18:51:22.16|0.60,-3:19:4.28|-21.3,6.07,2000 +HD 175225|BD+52 2294|PPM 36898|HR 7123|J185134.93+525830.4,f|S|G9,18:51:34.94|-65.12,52:58:30.42|245.2,5.52,2000 +HD 174881|BD+28 3104|HR 7112|J185135.89+284701.2,f|S|K1,18:51:35.89|0.92,28:47:1.22|4.7,6.21,2000 +HD 174959|BD+36 3295|PPM 81928|HR 7115|J185136.51+363220.7,f|S|B6,18:51:36.52|-5.18,36:32:20.73|-2.8,6.10,2000 +V0822 HER|HD 174853|BD+13 3787|PPM 135378|J185201.92+135756.3,f|V|B8,18:52:1.92|-5.68,13:57:56.33|-8.3,6.21,2000 +HD 175132|BD+41 3167|PPM 57582|HR 7118|J185207.24+412259.6,f|S|B9,18:52:7.25|-4.16,41:22:59.68|-1.5,6.28,2000 +SAO 229334|CD-4113180|J185211.93-414233.1,f|D|K3,18:52:11.94|-8.85,-41:42:33.10|-30.5,6.45,2000 +Pav Lambda|Lambda Piscis Austrini|SAO 254393|HD 173948|CP-62 5983|PPM 363636|J185213.03-621115.3,f|D|B2,18:52:13.03|-1.33,-62:11:15.34|-13.5,4.22,2000 +Her 112|HD 174933|BD+21 3582|HR 7113|J185216.42+212530.5,f|S|B9,18:52:16.43|-7.26,21:25:30.51|-10.1,5.41,2000 +V24617|SAO 229336|HD 174387|CD-4612669|PPM 324525|J185227.23-463542.4,f|V|M0,18:52:27.23|29.07,-46:35:42.43|0.1,5.51,2000 +SAO 187388|CD-2613562|J185228.31-263902.7,f|S|G8,18:52:28.31|-3.22,-26:39:2.77|-61,6.30,2000 +SAO 187389|HD 174631|CD-2915449|J185237.04-292246.8,f|S|K1,18:52:37.05|0.13,-29:22:46.83|-46.6,6.10,2000 +Tel Kappa|SAO 245772|HD 174295|CP-5211268|PPM 347228|J185239.64-520626.5,f|S|G8,18:52:39.64|38.42,-52:6:26.53|-95.7,5.18,2000 +SAO 229343|CD-4612676|J185259.90-463510.7,f|S|A1,18:52:59.90|4.64,-46:35:10.78|11.2,6.16,2000 +SAO 142741|HD 174866|SD-09 4876|J185301.80-093431.8,f|S|A7,18:53:1.81|22.48,-9:34:31.87|15.5,6.33,2000 +SAO 229342|HD 174474|CD-4812769|PPM 324531|J185302.34-482139.2,f|S|A2,18:53:2.35|-17.24,-48:21:39.29|-76.4,6.18,2000 +SAO 245783|CP-5211273|PPM 347235|J185312.00-515553.1,f|S|B4,18:53:12.00|1.20,-51:55:53.17|-12.2,6.30,2000 +HD 175535|BD+50 2686|PPM 36925|HR 7137|J185313.54+504229.5,f|S|G7,18:53:13.55|4.56,50:42:29.60|-27.8,4.91,2000 +Lyr Delta-11A|V11504|HD 175426|BD+36 3307|PPM 81988|HR 7131|J185343.55+365818.1,f|D|B2,18:53:43.56|1.44,36:58:18.20|-2.6,5.58,2000 +HD 175823|BD+57 1915|PPM 36932|HR 7153|J185346.30+572911.6,f|S|K5,18:53:46.31|21.45,57:29:11.61|-15.6,6.23,2000 +Sgr 33|SAO 187422|HD 174947|SD-21 5176|HR 7114|J185400.09-212135.4,f|S|K1,18:54:0.09|2.10,-21:21:35.44|-20.3,5.68,2000 +Ain|Ain al Rami|Sgr Nu1-32|SAO 187426|HD 174974|CD-2213399|HR 7116|J185410.17-224441.4,f|D|K2,18:54:10.18|2.91,-22:44:41.40|-5.7,4.85,2000 +HD 175443|BD+27 3150|HR 7132|J185413.24+275434.3,f|S|K4,18:54:13.25|-7.56,27:54:34.30|-71.2,5.64,2000 +Dra Upsilon-52|HD 176524|BD+71 915|J185423.85+711749.8,f|S|K0,18:54:23.85|48.58,71:17:49.89|42.1,4.82,2000 +Lyr Delta-12A|Delta2 Lyrae|HD 175588|BD+36 3319|HR 7139|J185430.28+365355.0,f|D|M4,18:54:30.28|-6.72,36:53:55.01|3.3,4.28,2000 +SAO 161964|HD 175156|SD-15 5143|HR 7119|J185443.11-153610.9,f|S|B5,18:54:43.11|-2.46,-15:36:10.93|-5.6,5.10,2000 +Her 113A|HD 175492|BD+22 3524|HR 7133|J185444.88+223842.2,f|D|G4,18:54:44.89|6.37,22:38:42.27|1,4.59,2000 +HD 175824|BD+48 2793|PPM 57626|HR 7154|J185447.12+485133.8,f|D|F3,18:54:47.13|-49.54,48:51:33.84|-132.7,5.84,2000 +Oct Chi|SAO 258799|HD 164461|CP-87 274|PPM 378246|HR 6721|J185447.13-873621.0,f|S|K3,18:54:47.14|-36.69,-87:36:21.04|-135.2,5.28,2000 +BD+41 3177|PPM 57629|HR 7146|J185452.17+413609.8,f|D|K0,18:54:52.18|-1.35,41:36:9.80|-2.3,5.46,2000 +HD 175635|BD+33 3257|J185452.51+335806.8,f|D|G8,18:54:52.52|-5.60,33:58:6.87|-1.8,6.01,2000 +Sgr Nu2-35|SAO 187445|CD-2213419|J185507.14-224016.7,f|S|K3,18:55:7.14|110.31,-22:40:16.78|-30.8,5.00,2000 +Nunki|Sadira|Sgr Sigma-34|SAO 187448|HD 175191|CD-2613595|HR 7121|J185515.92-261748.2,f|D|B2,18:55:15.93|13.85,-26:17:48.20|-52.7,2.07,2000 +Lyr 13|R LYR|HD 175865|BD+43 3117|PPM 57635|HR 7157|J185520.10+435645.9,f|V|M5,18:55:20.10|19.98,43:56:45.92|80.6,4.19,2000 +CD-3712970|PPM 298326|J185523.55-372311.7,f|S|K1,18:55:23.56|7.63,-37:23:11.77|-0.6,6.48,2000 +V11536|HD 175515|BD+06 3978|HR 7135|J185527.44+063655.0,f|V|K0,18:55:27.45|5.96,6:36:55.04|-88.8,5.58,2000 +SAO 161984|HD 175317|SD-16 5078|PPM 235236|HR 7126|J185531.00-162235.8,f|S|F4,18:55:31.01|-26.34,-16:22:35.88|-184,5.56,2000 +SAO 187468|CD-2314844|HR 7128|J185600.67-231025.5,f|S|B8,18:56:0.67|-1.65,-23:10:25.50|-13.7,5.93,2000 +HD 175743|BD+17 3779|PPM 135498|HR 7148|J185606.12+180619.4,f|S|K1,18:56:6.12|-47.33,18:6:19.48|-160.1,5.70,2000 +Alya|Alga|Ser Theta-63A|V11557|HD 175638|BD+04 3916|PPM 166832|HR 7141|J185613.18+041212.9,f|D|A5,18:56:13.18|37.70,4:12:12.94|27,4.61,2000 +Ser Theta-63B|HD 175639|BD+04 3917|PPM 166833|HR 7142|J185614.64+041207.6,f|D|A5,18:56:14.64|52.36,4:12:7.68|31.2,4.96,2000 +SAO 229383|HD 175219|CD-4213761|HR 7122|J185616.95-424238.4,f|S|K0,18:56:16.95|-27.00,-42:42:38.43|-30.5,5.35,2000 +SAO 142825|BD-01 3602|HR 7143|J185622.65-014759.5,f|S|B9,18:56:22.66|-3.00,-1:47:59.51|-19.7,6.21,2000 +HD 175679|BD+02 3730|PPM 166837|HR 7144|J185625.60+022816.2,f|D|G8,18:56:25.60|12.89,2:28:16.28|-5.6,6.14,2000 +HD 176598|BD+65 1309|PPM 21176|HR 7187|J185625.71+651529.1,f|S|G8,18:56:25.72|-15.82,65:15:29.10|-28.9,5.63,2000 +CD-3116152|PPM 298345|J185627.23-314120.4,f|S|K2,18:56:27.24|8.81,-31:41:20.49|-9.5,6.45,2000 +V0686 CRA|HD 175362|CD-3712982|PPM 298348|HR 7129|J185640.49-372035.6,f|V|B8,18:56:40.50|8.82,-37:20:35.67|-23.7,5.36,2000 +Dra 48|BD+57 1922|PPM 36964|HR 7175|J185645.05+574853.4,f|S|K1,18:56:45.05|-26.37,57:48:53.46|-59.4,5.67,2000 +SAO 254415|HD 174877|CP-62 6002|PPM 363675|HR 7111|J185654.70-624806.8,f|S|K3,18:56:54.70|3.43,-62:48:6.86|5.5,6.46,2000 +Pav Kappa|Kappa Piscis Austrini|SAO 254413|HD 174694|CP-67 3603|PPM 363676|J185657.02-671400.5,f|S|F5,18:56:57.03|-7.84,-67:14:0.58|16.7,4.40,2000 +BD+32 3267|HR 7162|J185701.61+325404.5,f|D|F9,18:57:1.61|202.89,32:54:4.58|-144,5.23,2000 +Sct Eta|SAO 142838|HD 175751|SD-06 4976|HR 7149|J185703.66-055046.7,f|S|K1,18:57:3.67|60.73,-5:50:46.73|-40.9,4.82,2000 +SAO 229397|HD 175395|CD-4412990|J185714.31-435501.2,f|S|B9,18:57:14.31|-0.11,-43:55:1.25|-27.6,6.28,2000 +Ser 64|HD 175869|BD+02 3738|PPM 166867|HR 7158|J185716.59+023207.2,f|S|B9,18:57:16.59|-4.65,2:32:7.25|-12.5,5.57,2000 +HD 176668|BD+62 1669|PPM 21183|HR 7191|J185717.34+622348.3,f|D|G5,18:57:17.34|5.84,62:23:48.38|-40.7,6.48,2000 +Sgr Xi1-36|SAO 187498|HD 175687|SD-20 5339|PPM 269124|HR 7145|J185720.47-203922.8,f|S|A0,18:57:20.48|-1.54,-20:39:22.84|-4.8,5.06,2000 +HD 175529|CD-3913012|HR 7136|J185734.39-394923.5,f|S|A3,18:57:34.39|2.53,-39:49:23.50|37.2,6.29,2000 +Sgr Xi2-37|HD 175775|SD-21 5201|PPM 269132|J185743.80-210623.9,f|S|K1,18:57:43.80|34.98,-21:6:23.95|-12.3,3.53,2000 +V0542 LYR|HD 176318|BD+38 3373|PPM 82111|HR 7174|J185801.89+381558.2,f|D|B7,18:58:1.90|-5.30,38:15:58.28|2.1,5.90,2000 +SAO 258814|HD 172226|CP-83 664|PPM 378256|J185810.11-832519.9,f|D|B9,18:58:10.12|16.91,-83:25:19.91|-13,6.36,2000 +FF AQL|HD 176155|BD+17 3799|HR 7165|J185814.74+172139.2,f|D|F8,18:58:14.75|0.14,17:21:39.28|-10,5.33,2000 +HD 175794|CD-3116189|HR 7151|J185821.27-310209.5,f|S|K3,18:58:21.28|-46.91,-31:2:9.51|-48.8,6.09,2000 +SAO 124112|BD+06 3989|HR 7163|J185823.70+061423.7,f|S|F5,18:58:23.70|-9.39,6:14:23.74|-107.2,6.21,2000 +SAO 187519|HD 175892|CD-2213478|PPM 269147|HR 7159|J185824.83-223146.1,f|S|A2,18:58:24.83|1.39,-22:31:46.17|13.4,6.15,2000 +Tel Lambda|SAO 245834|CP-53 9402|HR 7134|J185827.76-525619.0,f|S|A0,18:58:27.77|11.57,-52:56:19.06|-8.8,4.85,2000 +Pav Omega|V24632|SAO 254423|HD 175329|CP-60 7213|PPM 363691|HR 7127|J185836.44-601201.9,f|V|K2,18:58:36.45|-125.01,-60:12:1.98|32.5,5.13,2000 +CrA Epsilon|Epsilon Coronae Australis|HD 175813|CD-3713001|HR 7152|J185843.37-370626.4,f|S|F2,18:58:43.38|-132.31,-37:6:26.48|-110.5,4.83,2000 +V0543 LYR|BD+40 3544|HR 7179|J185846.58+404045.0,f|D|B3,18:58:46.59|1.48,40:40:45.10|-0.4,6.20,2000 +Aql 10|V1286 AQL|HD 176232|BD+13 3838|PPM 135566|HR 7167|J185846.92+135423.9,f|V|F0,18:58:46.92|0.87,13:54:23.93|-51.4,5.91,2000 +Sulafat|Lyr Gamma-14A|V11624|HD 176437|BD+32 3286|PPM 82139|HR 7178|J185856.62+324122.4,f|D|B9,18:58:56.62|-2.78,32:41:22.41|1.8,3.25,2000 +BD+50 2705|HR 7196|J185859.39+504832.9,f|S|G8,18:58:59.40|0.57,50:48:32.91|7.2,6.34,2000 +Aql 11A|V11618|BD+13 3841|PPM 135573|HR 7172|J185905.74+133720.0,f|D|F8,18:59:5.74|19.53,13:37:20.08|-124.9,5.27,2000 +V0545 LYR|HD 176582|BD+39 3602|PPM 82146|HR 7185|J185912.29+391302.3,f|V|B5,18:59:12.29|-0.12,39:13:2.36|-1.2,6.42,2000 +V24640|HD 176162|SD-13 5172|PPM 235313|HR 7166|J185923.79-125025.9,f|D|B5,18:59:23.80|-9.07,-12:50:25.90|-23.1,5.52,2000 +HD 176123|SD-18 5155|PPM 235316|HR 7164|J185926.77-183359.1,f|S|G3,18:59:26.78|-0.57,-18:33:59.16|-18.6,6.38,2000 +SAO 257644|CP-70 2593|J185929.26-702807.1,f|S|A8,18:59:29.27|-3.91,-70:28:7.15|-117.7,6.49,2000 +Al Okab Borealis|Deneb El Okab|Aql Epsilon-13A|HD 176411|BD+14 3736|PPM 135586|HR 7176|J185937.35+150405.8,f|D|K1,18:59:37.36|-52.72,15:4:5.87|-73.8,4.02,2000 +V24645|HD 176527|BD+26 3418|HR 7181|J185945.48+261349.4,f|V|K2,18:59:45.48|85.85,26:13:49.46|-11.3,5.26,2000 +V0387 VUL|HD 176541|BD+22 3549|HR 7183|J185958.10+224852.2,f|V|M3,18:59:58.11|-16.18,22:48:52.25|9.5,6.33,2000 +Lyr Lambda-15|V11641|BD+31 3424|PPM 82162|HR 7192|J190000.82+320843.8,f|V|K2,19:0:0.83|6.10,32:8:43.85|9.8,4.94,2000 +SAO 254426|CP-66 3404|J190003.56-663913.0,f|S|K0,19:0:3.56|12.30,-66:39:13.02|-42.6,5.98,2000 +BD+50 2708|J190013.67+503200.4,f|S|B2,19:0:13.68|7.06,50:32:0.48|3.2,5.38,2000 +SAO 187562|HD 176246|CD-2513614|PPM 269192|HR 7168|J190024.81-245631.8,f|S|K5,19:0:24.81|55.49,-24:56:31.82|41.2,6.36,2000 +Dra 49|HD 177249|BD+55 2137|HR 7218|J190043.45+553929.8,f|S|G6,19:0:43.45|-11.76,55:39:29.89|-7.4,5.52,2000 +HD 176896|BD+33 3287|J190055.20+334807.7,f|S|K5,19:0:55.20|5.61,33:48:7.77|3.1,6.05,2000 +CD-3713018|PPM 298436|J190104.29-370341.5,f|D|B8,19:1:4.30|-4.67,-37:3:41.60|-20.9,6.41,2000 +HD 176776|BD+19 3879|PPM 135637|HR 7198|J190105.43+191834.5,f|S|K1,19:1:5.43|8.07,19:18:34.58|-3.2,6.47,2000 +HD 176871|BD+26 3429|J190117.35+261729.0,f|S|B5,19:1:17.36|-0.81,26:17:29.08|-9.1,5.69,2000 +Lyr 16|V11677|HD 177196|BD+46 2602|PPM 57761|HR 7215|J190126.37+465605.3,f|D|A7,19:1:26.37|13.62,46:56:5.33|-86.1,5.01,2000 +HD 176593|SD-15 5185|PPM 235374|HR 7186|J190133.51-151657.4,f|S|G5,19:1:33.52|-5.35,-15:16:57.42|-1.3,6.31,2000 +SAO 187584|HD 176537|CD-2213527|PPM 269213|HR 7182|J190137.74-224143.3,f|S|K5,19:1:37.74|3.87,-22:41:43.31|0.7,6.23,2000 +Aql 12|V11655|SAO 142931|HD 176678|SD-05 4840|HR 7193|J190140.82-054420.8,f|V|K1,19:1:40.83|-24.18,-5:44:20.81|-39.7,4.02,2000 +BD+33 3295|HR 7212|J190148.36+333716.5,f|D|B5,19:1:48.37|0.37,33:37:16.53|-1,6.39,2000 +HD 176971|BD+22 3561|J190149.43+221551.8,f|S|A4,19:1:49.43|12.63,22:15:51.88|14.4,6.46,2000 +HD 177483|BD+52 2326|HR 7229|J190207.03+521539.8,f|D|G8,19:2:7.03|-7.44,52:15:39.81|-32.7,6.38,2000 +SAO 229446|HD 176425|CD-4213839|PPM 324699|HR 7177|J190208.52-415437.8,f|S|A0,19:2:8.52|30.47,-41:54:37.82|-10.2,6.22,2000 +SAO 124184|HD 176981|BD+08 3951|J190221.56+082224.7,f|S|K2,19:2:21.57|9.65,8:22:24.74|4,6.29,2000 +SAO 187599|CD-2513655|PPM 269227|HR 7195|J190227.67-245048.5,f|S|K3,19:2:27.68|-22.87,-24:50:48.57|-177.3,5.63,2000 +Ascella|Sgr Zeta-38A|HD 176687|CD-3016575|HR 7194|J190236.71-295248.3,f|D|A2,19:2:36.71|-14.05,-29:52:48.38|3.7,2.61,2000 +HD 177199|BD+19 3888|PPM 135695|HR 7216|J190252.62+193939.6,f|S|K1,19:2:52.62|6.36,19:39:39.64|-1.5,6.10,2000 +Aql 14|SAO 142959|HD 176984|SD-03 4460|J190254.49-034156.3,f|D|A1,19:2:54.50|11.38,-3:41:56.35|7,5.41,2000 +HD 176884|SD-19 5273|PPM 235418|J190303.80-191444.4,f|D|G6,19:3:3.81|2.69,-19:14:44.47|-11.4,6.01,2000 +CrA Zeta|SAO 229461|HD 176638|CD-4213855|HR 7188|J190306.87-420542.3,f|S|B9,19:3:6.88|55.76,-42:5:42.38|-45.3,4.74,2000 +SAO 162133|SD-19 5275|PPM 235424|J190306.99-190610.8,f|S|F5,19:3:7.00|12.61,-19:6:10.89|-3.5,6.36,2000 +V0701 CRA|HD 176723|CD-3813300|PPM 298484|HR 7197|J190317.69-381511.3,f|V|F0,19:3:17.70|13.31,-38:15:11.33|14.5,5.72,2000 +SAO 254446|HD 175986|CP-68 3180|PPM 363742|HR 7161|J190329.64-684519.9,f|D|F8,19:3:29.65|-20.82,-68:45:19.91|-4.5,5.87,2000 +V24669|HD 177178|BD+01 3865|HR 7214|J190332.25+014907.5,f|V|A4,19:3:32.25|23.69,1:49:7.56|-68.7,5.83,2000 +SAO 245899|HD 176664|CD-5111893|PPM 347398|J190357.55-510106.9,f|D|K0,19:3:57.56|40.39,-51:1:6.97|-147.7,5.93,2000 +SAO 245896|HD 176522|CP-58 7564|J190401.01-575735.8,f|S|G6,19:4:1.02|16.31,-57:57:35.86|4,6.30,2000 +CD-3116306|HR 7211|J190425.05-310249.4,f|S|A0,19:4:25.06|2.96,-31:2:49.48|-19.2,5.50,2000 +Sgr Omicron-39|V11703|SAO 187643|HD 177241|SD-21 5237|PPM 269274|HR 7217|J190440.98-214429.3,f|D|G9,19:4:40.98|76.21,-21:44:29.38|-58.1,3.77,2000 +Dra 51|BD+53 2178|HR 7251|J190455.16+532347.9,f|S|A0,19:4:55.17|-4.11,53:23:47.95|21,5.41,2000 +Aql 15A|SAO 142996|HD 177463|SD-04 4684|HR 7225|J190457.67-040153.1,f|D|K1,19:4:57.67|20.80,-4:1:53.11|-26.7,5.40,2000 +BD+31 3453|PPM 82283|HR 7237|J190457.87+314438.6,f|S|M0,19:4:57.88|75.52,31:44:38.66|-76.4,5.62,2000 +V24682|BD+30 3409|PPM 82284|HR 7238|J190458.28+304400.2,f|V|M2,19:4:58.29|21.79,30:44:0.22|-21.5,6.08,2000 +BD+49 2929|PPM 57828|HR 7252|J190509.83+495523.3,f|D|K3,19:5:9.84|-7.34,49:55:23.40|5.4,6.44,2000 +Al Okab Australis|Aql Zeta-17A|V11724|HD 177724|BD+13 3899|PPM 135773|HR 7235|J190524.60+135148.5,f|D|A0,19:5:24.61|-6.99,13:51:48.52|-95.3,2.99,2000 +V24680|SAO 162177|HD 177517|SD-15 5223|PPM 235477|J190541.17-153937.5,f|D|B9,19:5:41.18|0.72,-15:39:37.51|-10.4,5.94,2000 +V24688|BD+29 3472|HR 7244|J190547.12+295518.0,f|V|M0,19:5:47.13|-4.29,29:55:18.03|-11.4,6.32,2000 +Aql Lambda-16|HD 177756|SD-05 4876|HR 7236|J190614.93-045257.1,f|S|B9,19:6:14.94|-19.73,-4:52:57.20|-90.4,3.44,2000 +V0550 LYR|HD 178329|BD+41 3232|PPM 57856|HR 7258|J190617.03+412449.6,f|V|B3,19:6:17.04|1.24,41:24:49.61|-2.4,6.50,2000 +Tel Rho|V24678|SAO 245921|HD 177171|CP-5211356|PPM 347432|HR 7213|J190619.95-522027.2,f|V|F7,19:6:19.95|30.61,-52:20:27.28|-115.2,5.18,2000 +CrA Gamma|HD 177474|CD-3713048A|PPM 298559|HR 7226|J190625.11-370348.3,f|D|F8,19:6:25.11|96.95,-37:3:48.37|-279.7,4.23,2000 +CrA Gamma|HD 177475|CD-3713048B|PPM 298559|HR 7227|J190625.20-370348.7,f|D|F8,19:6:25.21|96.95,-37:3:48.73|-279.7,4.99,2000 +HD 178233|BD+28 3193|HR 7253|J190637.73+283742.9,f|S|F0,19:6:37.73|75.84,28:37:42.94|84.4,5.53,2000 +HD 178187|BD+24 3640|J190638.39+241502.8,f|S|A4,19:6:38.40|58.26,24:15:2.85|14.4,5.79,2000 +HD 177817|SD-16 5153|HR 7239|J190652.11-161345.3,f|D|B8,19:6:52.12|-1.30,-16:13:45.39|-16.6,6.03,2000 +HD 177565|CD-3713049|PPM 298566|HR 7232|J190652.46-374838.3,f|S|G5,19:6:52.46|-187.60,-37:48:38.37|-366.8,6.15,2000 +SAO 245925|HD 177365|CD-5012326|PPM 347438|J190654.81-501923.3,f|S|B9,19:6:54.81|-2.97,-50:19:23.32|-31.6,6.29,2000 +SAO 229493|CD-4812901|PPM 324782|HR 7223|J190655.60-481756.9,f|S|A0,19:6:55.61|12.67,-48:17:56.92|-12.3,5.96,2000 +Sgr Tau-40|SAO 187683|HD 177716|CD-2713564|PPM 269319|HR 7234|J190656.40-274013.5,f|S|K1,19:6:56.41|-50.75,-27:40:13.52|-250.5,3.32,2000 +Aql 18|Y AQL|HD 178125|BD+10 3787|HR 7248|J190658.60+110416.4,f|V|B8,19:6:58.60|-0.29,11:4:16.42|-31.5,5.08,2000 +V4198 SGR|HD 177863|SD-18 5206|PPM 235512|HR 7241|J190708.32-184417.4,f|V|B8,19:7:8.33|-1.99,-18:44:17.41|-17.7,6.29,2000 +Lyr Iota-18|Iota Lyrae|HD 178475|BD+35 3485|HR 7262|J190718.12+360600.5,f|D|B6,19:7:18.13|-0.61,36:6:0.57|-4.3,5.26,2000 +Lyr 17A|HD 178449|BD+32 3326|HR 7261|J190725.58+323006.2,f|D|F0,19:7:25.58|123.22,32:30:6.26|32.1,5.23,2000 +HD 177846|CD-2815403|PPM 269339|J190730.84-283812.4,f|S|K3,19:7:30.84|0.00,-28:38:12.48|-7.7,6.03,2000 +HD 178428|BD+16 3752|PPM 135832|J190757.32+165112.1,f|D|G4,19:7:57.32|65.61,16:51:12.19|-304.5,6.08,2000 +HD 178476|BD+21 3672|HR 7263|J190803.52+214156.1,f|S|F3,19:8:3.52|45.30,21:41:56.14|75.3,6.22,2000 +SAO 187718|CD-2415041|PPM 269357|HR 7246|J190814.56-243926.5,f|S|B9,19:8:14.56|6.13,-24:39:26.53|-8.9,6.29,2000 +V4024 SGR|SAO 162229|HD 178175|SD-19 5312|PPM 235542|HR 7249|J190816.70-191725.0,f|V|B2,19:8:16.70|5.24,-19:17:25.04|-1.1,5.58,2000 +CrA Delta|SAO 229513|HD 177873|CD-4013061|HR 7242|J190820.96-402948.1,f|S|K1,19:8:20.97|48.02,-40:29:48.13|-26.8,4.58,2000 +V1762 CYG|BD+52 2350|PPM 37123|HR 7275|J190825.78+522532.6,f|V|K1,19:8:25.79|-100.43,52:25:32.63|-55,5.90,2000 +SAO 245937|HD 177693|CP-55 9001|PPM 347459|HR 7233|J190852.32-554313.5,f|S|K1,19:8:52.33|58.46,-55:43:13.53|-115.6,6.45,2000 +Aql 19|SAO 124318|HD 178596|BD+05 4040|PPM 167256|HR 7266|J190859.91+060423.5,f|S|F0,19:8:59.91|-9.10,6:4:23.54|-78.3,5.23,2000 +Dra 59|V11824|BD+76 717|HR 7312|J190909.87+763337.8,f|V|A9,19:9:9.88|51.63,76:33:37.81|-119.8,5.12,2000 +Alphecca Meridiana|CrA Alpha|HD 178253|CD-3813350|PPM 298624|HR 7254|J190928.34-375416.1,f|S|A2,19:9:28.34|85.69,-37:54:16.11|-96.7,4.10,2000 +HD 178254|CD-4013074|PPM 298627|HR 7255|J190939.75-394938.0,f|S|K0,19:9:39.76|-4.84,-39:49:38.06|-21.7,6.44,2000 +Dra 55|HD 179933|BD+65 1326|PPM 21322|J190945.80+655842.6,f|S|A0,19:9:45.81|3.97,65:58:42.65|28.7,6.27,2000 +Albaldah|Al Baldah|Sgr Pi-41A|V11769|SAO 187756|HD 178524|SD-21 5275|PPM 269391|HR 7264|J190945.83-210125.0,f|D|F2,19:9:45.83|-1.12,-21:1:25.01|-36.8,2.90,2000 +HD 178555|SD-20 5415|PPM 235581|HR 7265|J190948.14-194813.1,f|D|K1,19:9:48.15|23.99,-19:48:13.17|-82.9,6.12,2000 +HD 178744|BD-00 3662|HR 7269|J190951.59-002541.2,f|S|B5,19:9:51.59|2.70,-0:25:41.21|-6.3,6.33,2000 +SAO 254475|HD 177389|CP-68 3185|PPM 363797|HR 7221|J190952.86-682528.0,f|S|G8,19:9:52.87|154.94,-68:25:28.01|-42.6,5.31,2000 +V24697|SAO 229531|HD 178322|CD-4213933|HR 7257|J190957.65-415332.1,f|V|B6,19:9:57.65|-0.22,-41:53:32.12|-11,5.86,2000 +CrA Beta|V24699|HD 178345|CD-3913146|PPM 298639|HR 7259|J191001.75-392026.8,f|V|K0,19:10:1.76|5.92,-39:20:26.87|-36.8,4.11,2000 +HD 178628|CD-3913156|PPM 298655|HR 7268|J191101.90-390016.9,f|S|B7,19:11:1.91|-0.23,-39:0:16.94|-9.5,6.35,2000 +SAO 187786|CD-2915804|PPM 269429|J191118.81-293008.2,f|S|B9,19:11:18.81|14.62,-29:30:8.25|-21.2,6.28,2000 +HD 179583|BD+40 3620|PPM 57966|HR 7284|J191123.16+402544.7,f|S|A3,19:11:23.16|8.79,40:25:44.74|-25.8,6.19,2000 +HD 179422|BD+26 3474|J191130.98+264409.1,f|S|F5,19:11:30.98|33.09,26:44:9.14|-31.9,6.34,2000 +Dra 53|V11819|BD+56 2209|PPM 37184|HR 7295|J191140.57+565133.1,f|V|G8,19:11:40.57|48.05,56:51:33.16|48,5.14,2000 +Lyr 19|V0471 LYR|HD 179527|BD+31 3497|PPM 82472|HR 7283|J191146.00+311700.4,f|V|B9,19:11:46.01|-3.20,31:17:0.44|-3.2,5.94,2000 +HD 179958|BD+49 2959a|PPM 57996|HR 7294|J191205.03+495120.7,f|D|G4,19:12:5.03|-205.02,49:51:20.72|624.3,6.50,2000 +SAO 187816|SD-21 5292|PPM 269457|HR 7276|J191228.03-213930.1,f|S|G5,19:12:28.04|31.79,-21:39:30.18|-22.3,6.39,2000 +Altais|Nodus Secundus|Dra Delta-57|BD+67 1129|PPM 21358|J191233.30+673941.5,f|D|G9,19:12:33.30|94.47,67:39:41.55|92.3,3.08,2000 +HD 179648|BD+21 3690|HR 7286|J191236.73+213316.4,f|S|A2,19:12:36.73|14.51,21:33:16.46|4.8,6.02,2000 +Aql 20|V11808|SAO 143134|SD-08 4887|HR 7279|J191240.71-075622.2,f|V|B3,19:12:40.71|12.63,-7:56:22.27|-7.1,5.36,2000 +SAO 245976|HD 178845|CD-5012377|HR 7271|J191246.13-502911.1,f|D|G8,19:12:46.14|44.76,-50:29:11.11|-42.1,6.12,2000 +SAO 187835|HD 179323|CD-2613936|HR 7277|J191313.66-255424.4,f|S|K1,19:13:13.67|-2.16,-25:54:24.43|-9.2,5.77,2000 +V11815|SAO 162326|HD 179497|SD-12 5311|PPM 235666|HR 7282|J191315.52-121657.3,f|V|K5,19:13:15.52|12.46,-12:16:57.30|-30.4,5.50,2000 +Aql 21|V1288 AQL|HD 179761|BD+02 3824|PPM 167421|HR 7287|J191342.70+021737.3,f|D|B8,19:13:42.70|5.85,2:17:37.35|-2.6,5.15,2000 +V11827|HD 179791|BD+05 4081|PPM 167423|HR 7288|J191344.02+053056.1,f|V|A2,19:13:44.03|7.47,5:30:56.18|-13.4,6.48,2000 +Aladfar|Lyr Eta-20A|V11839|BD+38 3490|PPM 82545|HR 7298|J191345.48+390845.4,f|D|B2,19:13:45.49|-1.63,39:8:45.49|-0.6,4.41,2000 +Dra 54|BD+57 1968|PPM 37213|J191355.14+574218.3,f|S|K2,19:13:55.15|-17.07,57:42:18.37|-63.2,5.00,2000 +SAO 229573|HD 179433|CD-4513054|HR 7281|J191439.56-451136.6,f|S|G8,19:14:39.56|48.10,-45:11:36.70|-39.6,5.91,2000 +V24722|BD+19 3956|HR 7299|J191502.69+201211.2,f|V|G8,19:15:2.69|4.08,20:12:11.24|-11.2,6.03,2000 +1 Sge|Sge 1|BD+20 4088|J191517.36+211355.6,f|S|A4,19:15:17.36|36.35,21:13:55.63|7.8,5.65,2000 +BD+49 2968|PPM 37239|HR 7311|J191519.17+500416.0,f|D|G8,19:15:19.18|-6.84,50:4:16.06|3.8,6.35,2000 +BD+14 3846|J191520.09+150501.1,f|D|G8,19:15:20.09|1.01,15:5:1.15|-11.2,5.58,2000 +V24724|BD+30 3491|PPM 82584|J191524.85+303134.9,f|V|M0,19:15:24.86|35.14,30:31:34.97|-26.2,5.89,2000 +Sgr Psi-42|SAO 187882|CD-2513866|PPM 269531|HR 7292|J191532.42-251524.0,f|D|G8,19:15:32.43|47.62,-25:15:24.06|-31.2,4.87,2000 +Dra Tau-60|V11898|HD 181984|BD+73 857|HR 7352|J191533.05+732119.6,f|V|K2,19:15:33.06|-116.61,73:21:19.68|104.3,4.45,2000 +SAO 187883|HD 179949|CD-2415161|PPM 269532|HR 7291|J191533.22-241045.6,f|S|F9,19:15:33.23|114.81,-24:10:45.67|-101.8,6.25,2000 +V24723|BD+18 4011|J191533.36+183058.8,f|D|M2,19:15:33.36|-10.53,18:30:58.87|10.1,6.47,2000 +V0473 LYR|BD+27 3314|J191559.49+275534.6,f|V|F6,19:15:59.49|5.04,27:55:34.69|0.7,6.18,2000 +Vul 1A|V11866|BD+21 3713|J191613.04+212325.5,f|D|B4,19:16:13.04|0.70,21:23:25.54|-6.1,4.77,2000 +SAO 229584|HD 179886|CD-4513072|PPM 324935|HR 7289|J191621.74-452757.7,f|S|K3,19:16:21.74|-2.00,-45:27:57.70|12.1,5.38,2000 +Lyr Theta-21A|V11873|BD+37 3398|PPM 82611|HR 7314|J191622.09+380801.4,f|D|K0,19:16:22.10|-0.47,38:8:1.43|1.2,4.34,2000 +BD+14 3852|J191626.78+143240.6,f|D|B9,19:16:26.79|9.15,14:32:40.62|0.2,5.68,2000 +Pav Tau|CP-69 2962|HR 7274|J191628.61-691126.9,f|S|A6,19:16:28.61|6.98,-69:11:26.97|-28.7,6.26,2000 +Aql 22|SAO 124455|BD+04 4045|PPM 167527|J191631.03+045005.2,f|S|A3,19:16:31.03|14.80,4:50:5.26|-10.4,5.58,2000 +R SGR|SAO 162394|SD-19 5367|J191641.79-191827.6,f|V|M2,19:16:41.80|11.61,-19:18:27.67|-13.2,6.10,2000 +BD+46 2658|HR 7322|J191651.38+465956.7,f|S|F6,19:16:51.39|-10.13,46:59:56.77|291.8,6.02,2000 +SAO 254514|HD 179419|CP-65 3783|PPM 363876|J191700.52-651339.7,f|S|B8,19:17:0.52|-4.02,-65:13:39.73|-24,6.41,2000 +Cyg Kappa-1|V11886|HD 181276|BD+53 2216|PPM 37265|HR 7328|J191706.16+532206.4,f|V|G9,19:17:6.17|60.23,53:22:6.45|122.9,3.80,2000 +SAO 254515|HD 179366|CP-66 3417|HR 7278|J191712.23-663939.7,f|D|A5,19:17:12.23|8.91,-66:39:39.77|-4.3,5.51,2000 +Sgr 43|V24731|SAO 162413|SD-19 5379|PPM 235771|J191738.07-185710.4,f|V|G8,19:17:38.08|-10.07,-18:57:10.47|-10.6,4.88,2000 +Vul 2|ES VUL|BD+22 3648|HR 7318|J191743.63+230131.9,f|D|B0,19:17:43.64|1.52,23:1:31.94|-3.7,5.48,2000 +SAO 124478|BD+01 3960|PPM 167577|HR 7313|J191748.18+020154.2,f|S|A1,19:17:48.19|2.70,2:1:54.22|-28.2,6.18,2000 +Aql Omega-25|BD+11 3790|HR 7315|J191748.99+113543.5,f|S|F0,19:17:49.00|0.29,11:35:43.52|12.6,5.30,2000 +CP-53 9513|PPM 347573|HR 7297|J191809.78-532313.5,f|S|F7,19:18:9.78|24.69,-53:23:13.51|-81.4,6.37,2000 +Aql 23A|V11889|SAO 124487|BD+00 4168|PPM 167594|HR 7319|J191832.49+010506.4,f|D|K2,19:18:32.50|11.25,1:5:6.46|17.9,5.10,2000 +HD 181597|BD+49 2977|PPM 58137|HR 7341|J191837.87+493410.0,f|S|K1,19:18:37.87|21.21,49:34:10.04|44.9,6.32,2000 +Aql 24A|SAO 124492|BD+00 4170|HR 7321|J191850.94+002020.4,f|D|K0,19:18:50.94|16.95,0:20:20.49|9.2,6.41,2000 +SAO 124497|HD 181122|BD+09 4057|HR 7325|J191852.75+093705.0,f|S|G9,19:18:52.75|2.81,9:37:5.05|-37.5,6.31,2000 +SAO 162462|SD-15 5310|PPM 235824|HR 7317|J191900.09-153211.6,f|D|K3,19:19:0.10|-88.88,-15:32:11.65|-281.3,6.07,2000 +BD+37 3413|PPM 82688|HR 7338|J191901.15+372643.2,f|S|A0,19:19:1.15|5.60,37:26:43.25|13.8,6.25,2000 +BD+54 2123|HR 7351|J191936.43+542233.5,f|S|A1,19:19:36.44|16.51,54:22:33.55|-28.5,6.23,2000 +HD 181655|BD+37 3417|HR 7345|J191938.99+371949.9,f|S|G8,19:19:39.00|-62.14,37:19:49.94|-183.1,6.28,2000 +Aql 28A|V1208 AQL|HD 181333|BD+12 3879|PPM 136121|HR 7331|J191939.34+122228.8,f|D|F0,19:19:39.35|4.25,12:22:28.85|16.7,5.53,2000 +SAO 211175|CD-3513393|PPM 298854|HR 7316|J191939.99-352517.2,f|S|B3,19:19:39.99|7.09,-35:25:17.23|-11.1,5.59,2000 +Aql Omega-29|HD 181383|BD+11 3802|PPM 136128|HR 7332|J191953.06+113205.8,f|S|A2,19:19:53.07|42.47,11:32:5.87|22.1,6.02,2000 +BD+57 1986|PPM 37318|HR 7356|J192016.03+573842.4,f|S|M1,19:20:16.03|28.34,57:38:42.47|4.9,5.92,2000 +Aql 26A|SAO 143286|HD 181391|SD-05 4936|HR 7333|J192032.90-052456.7,f|D|G8,19:20:32.90|113.49,-5:24:56.76|44.8,4.99,2000 +HD 181828|BD+34 3503|PPM 82734|HR 7346|J192033.05+351109.4,f|D|B9,19:20:33.06|5.52,35:11:9.45|1.2,6.30,2000 +Aql 27|SAO 143292|BD-01 3716|HR 7336|J192035.68-005331.7,f|S|B9,19:20:35.69|5.70,-0:53:31.78|3.1,5.47,2000 +SAO 187992|CD-2213846|PPM 269651|HR 7327|J192038.14-222409.1,f|S|F0,19:20:38.15|-10.40,-22:24:9.13|27.9,5.59,2000 +Dra Pi-58|V24767|HD 182564|BD+65 1345|PPM 21456|HR 7371|J192040.09+654252.3,f|V|A2,19:20:40.09|14.07,65:42:52.31|41.6,4.59,2000 +V24750|HD 181321|CD-3513422|PPM 298894|J192129.75-345900.5,f|V|G5,19:21:29.76|78.90,-34:59:0.56|-108.9,6.48,2000 +UX DRA|HD 183556|BD+76 734|J192135.51+763334.5,f|V|C5,19:21:35.52|-7.22,76:33:34.55|-0.8,6.24,2000 +V4199 SGR|SAO 162511|HD 181558|SD-19 5412|HR 7339|J192137.11-191404.0,f|D|B5,19:21:37.11|0.85,-19:14:4.00|-11.5,6.25,2000 +BD+79 628|HR 7423|J192140.31+793610.1,f|S|A3,19:21:40.31|22.74,79:36:10.19|-26.3,6.06,2000 +Sgr Rho-44|Rho1 Sagittarii|SAO 162512|HD 181577|SD-18 5322|PPM 235882|J192140.35-175049.9,f|V|F0,19:21:40.36|-26.99,-17:50:49.91|22.2,3.93,2000 +Sgr Upsilon-46|Upsilon Sagittarii|SAO 162518|HD 181615|SD-16 5283|PPM 235885|HR 7342|J192143.62-155718.0,f|S|B2,19:21:43.62|1.73,-15:57:18.06|-6.3,4.58,2000 +Sgr Rho-45|SAO 162521|HD 181645|SD-18 5325|PPM 235889|HR 7344|J192150.89-181830.1,f|S|G5,19:21:50.90|102.39,-18:18:30.20|-93,5.85,2000 +SAO 229643|CD-4214133|HR 7334|J192209.52-420057.6,f|S|K1,19:22:9.53|-55.83,-42:0:57.70|-30.8,6.33,2000 +SAO 143324|BD-00 3725|HR 7349|J192221.54-001508.4,f|S|G5,19:22:21.55|60.45,-0:15:8.44|-27.3,5.82,2000 +HD 182272|BD+33 3434|PPM 82791|HR 7359|J192233.35+333105.3,f|S|K0,19:22:33.35|3.50,33:31:5.39|-29.9,6.09,2000 +HD 181295|CD-5112054|PPM 347626|J192237.75-511352.5,f|S|F0,19:22:37.76|83.03,-51:13:52.59|-5.4,6.43,2000 +Arkab Prior|Sgr Beta1|SAO 229646|HD 181454|CD-4413277|HR 7337|J192238.29-442732.2,f|D|B9,19:22:38.29|7.28,-44:27:32.27|-22.4,4.01,2000 +SAO 124564|BD+09 4081|HR 7354|J192248.35+095447.3,f|S|F6,19:22:48.35|8.13,9:54:47.34|107.1,6.36,2000 +Vul 3|V0377 VUL|HD 182255|BD+25 3811|HR 7358|J192250.88+261544.6,f|V|B6,19:22:50.88|-1.75,26:15:44.65|-10.9,5.20,2000 +Tel Eta|HD 181296|CP-54 9339|HR 7329|J192251.20-542526.1,f|S|A0,19:22:51.21|25.57,-54:25:26.15|-83,5.03,2000 +SD-07 4942|HR 7353|J192304.44-072402.2,f|S|K0,19:23:4.45|15.17,-7:24:2.21|-21.5,6.31,2000 +Arkab Posterior|Urkab|Sgr Beta2|SAO 229654|HD 181623|CD-4513171|HR 7343|J192313.13-444759.2,f|S|F2,19:23:13.14|92.81,-44:47:59.20|-53.7,4.28,2000 +HD 182488|BD+32 3411|PPM 82821|HR 7368|J192334.01+331319.0,f|S|K0,19:23:34.01|82.07,33:13:19.08|162.9,6.36,2000 +HD 182422|BD+19 4000|HR 7364|J192346.92+201551.6,f|S|B9,19:23:46.93|3.10,20:15:51.68|0.4,6.40,2000 +Ruchbat|Alrami|Rukbat al Rami|Sgr Alpha|SAO 229659|HD 181869|CD-4013245|HR 7348|J192353.17-403657.3,f|S|B8,19:23:53.18|32.68,-40:36:57.38|-120.8,3.96,2000 +HD 182694|BD+43 3229|PPM 58264|HR 7382|J192356.50+432317.4,f|S|G7,19:23:56.50|16.35,43:23:17.41|-27.4,5.85,2000 +SAO 254551|CP-68 3218|PPM 363962|J192405.48-682215.8,f|S|K2,19:24:5.48|-20.79,-68:22:15.89|-0.8,6.34,2000 +HD 182635|BD+36 3539|PPM 82843|HR 7376|J192406.05+362707.5,f|S|K1,19:24:6.05|5.55,36:27:7.54|78.5,6.44,2000 +Cyg 2|HD 182568|BD+29 3584|HR 7372|J192407.57+293716.8,f|S|B3,19:24:7.58|10.56,29:37:16.82|10.9,4.99,2000 +HD 181925|CD-4313352|J192421.47-434319.4,f|S|M1,19:24:21.48|26.23,-43:43:19.43|-1.6,6.14,2000 +Sge 2A|BD+16 3839|PPM 136236|HR 7369|J192422.07+165615.7,f|D|A2,19:24:22.07|-6.03,16:56:15.80|-14.1,6.26,2000 +V24772|CD-2815767|PPM 269741|HR 7355|J192430.18-275157.4,f|V|B2,19:24:30.18|11.14,-27:51:57.40|-16.3,6.03,2000 +CH CYG|HD 182917|BD+49 2999|PPM 37375|J192433.06+501429.1,f|V|M7,19:24:33.07|-6.81,50:14:29.13|-19.8,6.17,2000 +Aql 31A|V11994|HD 182572|BD+11 3833|PPM 136256|HR 7373|J192458.20+115639.8,f|D|G7,19:24:58.20|721.43,11:56:39.90|643.7,5.16,2000 +SAO 143373|HD 182475|SD-05 4964|HR 7366|J192501.53-045304.3,f|S|A9,19:25:1.53|35.57,-4:53:4.33|7.9,6.50,2000 +HD 182286|CD-2916104|PPM 269757|J192504.04-291833.6,f|D|K3,19:25:4.04|-13.08,-29:18:33.69|-61.8,5.92,2000 +Sgr Chi-47|HD 182369|CD-2415303|PPM 269762|HR 7362|J192516.49-243030.8,f|D|A5,19:25:16.49|63.60,-24:30:30.87|-51.9,5.02,2000 +SAO 162595|HD 182477|SD-14 5428|HR 7367|J192521.59-135349.6,f|S|K3,19:25:21.59|52.86,-13:53:49.67|55.2,5.71,2000 +HD 182761|BD+19 4009|HR 7384|J192522.39+201618.2,f|S|A0,19:25:22.39|-5.91,20:16:18.22|-17.1,6.31,2000 +BD+24 3737|HR 7386|J192525.75+245445.9,f|D|F7,19:25:25.76|-177.26,24:54:45.99|-631.1,6.20,2000 +Vul 4A|HD 182762|BD+19 4010|PPM 136264|HR 7385|J192528.60+194754.1,f|D|K0,19:25:28.60|96.68,19:47:54.12|-71.5,5.15,2000 +Sgr Chi-49|V11992|HD 182416|CD-2415307|PPM 269765|HR 7363|J192529.65-235744.8,f|V|K4,19:25:29.66|-18.23,-23:57:44.84|-13.4,5.44,2000 +Aql Delta-30A|V12004|BD+02 3879|PPM 167816|HR 7377|J192529.90+030653.1,f|D|F3,19:25:29.90|253.13,3:6:53.19|80.7,3.37,2000 +Cyg 4|V1741 CYG|BD+36 3557|PPM 82895|HR 7395|J192609.12+361904.4,f|V|B9,19:26:9.13|4.23,36:19:4.43|13,5.18,2000 +HD 182645|SD-15 5348|PPM 235982|HR 7378|J192611.04-150311.7,f|S|B8,19:26:11.04|17.38,-15:3:11.71|-0.6,5.72,2000 +Vul 5|HD 182919|BD+19 4015|J192613.24+200551.8,f|S|A0,19:26:13.25|3.38,20:5:51.84|-36.1,5.60,2000 +Sgr 50|SAO 188121|HD 182629|SD-22 5105|PPM 269784|HR 7375|J192619.15-214636.0,f|S|K3,19:26:19.16|36.22,-21:46:36.09|-4.6,5.57,2000 +BD+12 3907|PPM 136286|HR 7389|J192624.13+130125.6,f|S|F6,19:26:24.14|14.18,13:1:25.69|59,5.76,2000 +HD 183611|BD+62 1716|PPM 21524|HR 7413|J192626.49+623325.7,f|S|K5,19:26:26.50|31.87,62:33:25.72|37.8,6.36,2000 +HD 182955|BD+19 4017|PPM 136291|HR 7391|J192628.68+195329.3,f|D|M0,19:26:28.69|0.71,19:53:29.38|-48.1,5.83,2000 +Aql Nu-32|V12021|SAO 124628|HD 182835|BD+00 4206|PPM 167857|HR 7387|J192631.08+002018.8,f|D|F2,19:26:31.09|-0.90,0:20:18.85|-2.3,4.68,2000 +SAO 188127|HD 182681|CD-2916140|PPM 269791|J192656.48-294435.6,f|S|B9,19:26:56.48|17.58,-29:44:35.61|-49.3,5.65,2000 +Cyg Iota-7|HD 183534|BD+52 2434|PPM 37426|J192725.95+521913.5,f|S|A1,19:27:25.96|-13.20,52:19:13.57|-27.6,5.73,2000 +V12049|HD 183144|BD+13 4020|PPM 136327|HR 7396|J192733.90+141656.9,f|V|B4,19:27:33.91|7.12,14:16:56.93|-4.3,6.32,2000 +V0558 LYR|HD 183362|BD+37 3465|PPM 82943|J192736.39+375628.3,f|V|B3,19:27:36.40|-0.95,37:56:28.31|-4.5,6.30,2000 +CP-54 9371|PPM 347716|J192748.11-541930.9,f|D|K4,19:27:48.12|-5.69,-54:19:30.98|10.3,5.69,2000 +SAO 124661|HD 183227|BD+02 3892|PPM 167915|HR 7397|J192820.79+025548.1,f|S|B6,19:28:20.80|2.70,2:55:48.11|-15.2,5.85,2000 +Vul Alpha-6A|V12069|HD 183439|BD+24 3759|Anser|J192842.32+243953.6,f|D|M0,19:28:42.33|-126.50,24:39:53.66|-107,4.44,2000 +Vul 8B|V24790|HD 183491|BD+24 3761|J192857.08+244607.4,f|D|K0,19:28:57.08|8.58,24:46:7.40|17,5.82,2000 +Aql 35|V1431 AQL|SAO 124675|HD 183324|BD+01 4010|PPM 167944|J192900.98+015701.6,f|V|A0,19:29:0.99|-0.45,1:57:1.61|-33.4,5.79,2000 +SAO 124681|HD 183387|BD-00 3760|PPM 167952|J192918.02+001445.8,f|S|K2,19:29:18.03|12.45,0:14:45.89|-10.4,6.25,2000 +Vul 7|V24792|HD 183537|BD+19 4039|J192920.89+201647.0,f|V|B5,19:29:20.90|2.95,20:16:47.05|-16.9,6.34,2000 +U AQL|SAO 143454|HD 183344|SD-07 4968|J192921.36-070238.7,f|D|F7,19:29:21.36|-0.30,-7:2:38.71|-9.4,6.37,2000 +HD 183492|BD+14 3936|PPM 136374|J192922.15+143545.6,f|S|K0,19:29:22.15|50.81,14:35:45.67|-23.7,5.57,2000 +SAO 229712|CD-4313395|HR 7392|J192923.84-432642.7,f|S|A0,19:29:23.85|93.00,-43:26:42.70|-114.9,5.71,2000 +Cyg Iota-10|BD+51 2605|PPM 37459|J192942.35+514347.2,f|S|A5,19:29:42.36|20.90,51:43:47.20|128.1,3.77,2000 +SAO 188192|HD 183275|CD-2714004|PPM 269861|HR 7398|J192952.18-265908.2,f|D|K3,19:29:52.19|22.19,-26:59:8.21|-43,5.49,2000 +SAO 246125|HD 182893|CP-55 9096|PPM 347741|HR 7388|J192952.61-552630.3,f|S|K0,19:29:52.61|23.82,-55:26:30.32|-66.5,6.14,2000 +V12088|SAO 124698|HD 183589|BD+02 3904|PPM 167984|HR 7412|J193010.53+025414.6,f|D|K5,19:30:10.54|2.25,2:54:14.66|-1.2,6.09,2000 +V0923 AQL|HD 183656|BD+03 4043|HR 7415|J193033.12+032639.8,f|V|A0,19:30:33.12|13.18,3:26:39.85|1.4,6.10,2000 +Tel Mu|SAO 246131|CP-55 9100|PPM 347752|HR 7393|J193034.61-550636.1,f|S|F5,19:30:34.61|38.70,-55:6:36.19|-13.3,6.30,2000 +Aql 36|V12093|SAO 143482|SD-03 4612|HR 7414|J193039.83-024719.9,f|V|M1,19:30:39.84|23.07,-2:47:19.99|-10.5,5.03,2000 +Albireo|Cyg Beta-6A|V12105|HD 183912|BD+27 3410|HR 7417|J193043.28+275734.8,f|D|K3,19:30:43.28|-7.15,27:57:34.85|-5.6,3.08,2000 +Cyg Beta-6B|HD 183914|BD+27 3411|HR 7418|J193045.39+275754.9,f|D|B8,19:30:45.40|-1.99,27:57:54.99|-1,5.10,2000 +HD 183986|BD+35 3658|HR 7419|J193046.83+361342.6,f|D|B9,19:30:46.83|0.73,36:13:42.61|-12,6.27,2000 +SAO 188219|HD 183545|SD-21 5410|PPM 269885|J193054.04-211844.0,f|S|A2,19:30:54.05|15.09,-21:18:44.05|-22,6.12,2000 +HD 184958|BD+70 1073|J193100.27+705921.6,f|S|K2,19:31:0.27|-10.90,70:59:21.62|33,6.06,2000 +V24786|CP-68 3251|HR 7383|J193110.97-682602.1,f|V|K4,19:31:10.97|17.20,-68:26:2.11|-13.4,5.98,2000 +V1817 CYG|HD 184398|BD+55 2215|PPM 37496|HR 7428|J193113.55+554354.6,f|V|K2,19:31:13.55|-2.70,55:43:54.61|-18.2,6.37,2000 +V24806|HD 184293|BD+49 3034|PPM 37499|HR 7427|J193119.33+501824.1,f|V|K5,19:31:19.33|-30.56,50:18:24.14|45.8,5.54,2000 +V24800|BD+26 3573|HR 7421|J193121.62+263701.8,f|V|K0,19:31:21.62|11.40,26:37:1.82|25.2,5.89,2000 +Cyg 8|HD 184171|BD+34 3590|HR 7426|J193146.32+342710.6,f|S|B3,19:31:46.32|1.11,34:27:10.69|-3.6,4.74,2000 +SAO 229734|HD 183577|CD-4413384|J193213.99-443246.9,f|S|F6,19:32:14.00|-138.44,-44:32:46.99|32.8,6.49,2000 +Alsafi|Athafi|Dra Sigma-61|V12176|HD 185144|BD+69 1053|HR 7462|J193221.59+693940.2,f|D|K0,19:32:21.59|598.26,69:39:40.23|-1738.7,4.67,2000 +SAO 246151|HD 183552|CP-53 9585|PPM 347792|HR 7411|J193253.82-531108.2,f|S|Fm,19:32:53.82|32.90,-53:11:8.22|-6.9,5.75,2000 +V1293 AQL|SAO 124777|BD+04 4152|J193307.76+050145.8,f|V|M5,19:33:7.77|-1.79,5:1:45.81|-0.6,6.43,2000 +HD 184936|BD+59 2060|PPM 21585|HR 7448|J193310.06+600931.2,f|D|K4,19:33:10.07|3.96,60:9:31.29|5.3,6.28,2000 +PW TEL|SAO 229741|CD-4513296|PPM 325215|HR 7416|J193321.62-451618.2,f|V|Ap,19:33:21.62|-16.26,-45:16:18.30|-24.5,5.59,2000 +V1743 CYG|HD 184786|BD+48 2914|HR 7442|J193341.60+491544.3,f|V|M4,19:33:41.61|3.03,49:15:44.35|-11.5,6.06,2000 +V0450 AQL|SAO 124789|HD 184313|BD+05 4190|J193346.03+052756.5,f|V|M5,19:33:46.03|-5.08,5:27:56.55|-23.7,6.47,2000 +Aql Mu-38A|V12155|SAO 124799|BD+07 4132|PPM 168141|HR 7429|J193405.35+072244.1,f|D|K3,19:34:5.35|212.72,7:22:44.19|-155.4,4.45,2000 +V4089 SGR|SAO 229746|CD-4013356|PPM 325228|HR 7422|J193408.48-400204.6,f|V|A3,19:34:8.49|4.48,-40:2:4.70|-2.1,5.91,2000 +V24820|BD+50 2815|PPM 37541|HR 7451|J193419.79+511411.8,f|V|F7,19:34:19.79|31.74,51:14:11.83|-188.1,5.72,2000 +V12153|SAO 188296|HD 184268|CD-2415421|PPM 269982|J193433.94-235131.7,f|V|K5,19:34:33.94|3.43,-23:51:31.79|-8,6.48,2000 +Vul 9A|V12173|BD+19 4063|PPM 136528|HR 7437|J193434.89+194624.2,f|D|B8,19:34:34.90|13.41,19:46:24.25|2.2,5.00,2000 +HD 184875|BD+42 3386|PPM 58526|HR 7444|J193441.25+422445.0,f|S|A2,19:34:41.26|2.55,42:24:45.03|-31.3,5.35,2000 +HD 185394|BD+63 1539|J193446.34+632603.0,f|S|K2,19:34:46.35|10.20,63:26:3.02|-3.3,6.50,2000 +Cyg 9A|V24817|HD 184759|BD+29 3651|HR 7441|J193450.92+292746.6,f|D|A0,19:34:50.93|15.15,29:27:46.64|17.8,5.41,2000 +HD 185114|BD+52 2463|J193501.23+523007.2,f|S|K0,19:35:1.23|1.46,52:30:7.27|-34.1,6.40,2000 +Aql 37|SAO 162792|HD 184492|SD-10 5122|J193507.25-103337.5,f|S|G8,19:35:7.26|6.93,-10:33:37.60|-3,5.13,2000 +Tel Iota|SAO 229751|HD 184127|CD-4813161|PPM 325242|HR 7424|J193512.98-480557.1,f|S|K0,19:35:12.99|-7.01,-48:5:57.13|-37.4,4.89,2000 +V24818|SAO 124823|HD 184663|BD+02 3932|HR 7438|J193525.13+025448.9,f|V|F6,19:35:25.13|11.24,2:54:48.98|53.2,6.38,2000 +SAO 143564|HD 184573|SD-07 4998|HR 7432|J193529.80-072737.0,f|S|K0,19:35:29.81|22.90,-7:27:37.02|-40,6.34,2000 +SAO 162797|HD 184574|SD-12 5461|PPM 236213|HR 7433|J193533.45-121511.2,f|S|K0,19:35:33.46|-7.77,-12:15:11.21|-19.9,6.28,2000 +Cyg 11|BD+36 3619|PPM 83189|HR 7457|J193548.30+365640.3,f|S|B8,19:35:48.30|3.96,36:56:40.34|-1.7,6.04,2000 +HD 185264|BD+49 3059|PPM 37571|HR 7465|J193555.94+501419.0,f|S|G9,19:35:55.95|-2.21,50:14:19.02|36.7,6.48,2000 +Sgr 51|V12183|SAO 188326|HD 184552|CD-2415442|HR 7431|J193601.65-244308.6,f|V|A7,19:36:1.65|6.13,-24:43:8.69|-26.4,5.65,2000 +V12199|HD 184961|BD+22 3741|HR 7452|J193608.35+223508.7,f|V|B9,19:36:8.35|3.46,22:35:8.75|-7.2,6.33,2000 +HD 184944|BD+14 3974|PPM 136589|HR 7449|J193615.68+142327.8,f|S|K0,19:36:15.69|13.66,14:23:27.85|-42.2,6.36,2000 +V4333 SGR|SD-19 5521|HR 7439|J193626.07-185110.5,f|V|F0,19:36:26.07|21.29,-18:51:10.52|-12.9,6.13,2000 +Cyg Theta-13A|HD 185395|BD+49 3062|PPM 37578|HR 7469|J193626.53+501315.9,f|D|F4,19:36:26.54|-8.16,50:13:15.97|263,4.50,2000 +HD 185351|BD+44 3185|PPM 58585|HR 7468|J193637.97+444141.7,f|S|G8,19:36:37.98|-94.58,44:41:41.77|-103.8,5.18,2000 +Sgr 52|V12191|SAO 188337|CD-2514184|J193642.43-245301.0,f|D|B9,19:36:42.43|68.72,-24:53:1.04|-23.2,4.61,2000 +Aql Iota-41|V12201|SAO 143597|BD-01 3782|HR 7447|J193643.27-011711.7,f|D|B5,19:36:43.28|1.95,-1:17:11.76|-20.8,4.36,2000 +BD+10 3984|HR 7456|J193652.45+111623.5,f|D|G0,19:36:52.45|9.12,11:16:23.54|3.2,5.98,2000 +Aql Kappa-39|V12204|HD 184915|SD-07 5006|HR 7446|J193653.44-070138.9,f|V|B0,19:36:53.45|1.34,-7:1:38.92|-2.7,4.97,2000 +SAO 162816|HD 184835|SD-18 5432|PPM 236251|HR 7443|J193703.34-181351.7,f|S|K3,19:37:3.34|10.54,-18:13:51.79|-13.8,5.65,2000 +HD 185268|BD+29 3670|HR 7466|J193709.61+292001.3,f|D|B5,19:37:9.62|0.92,29:20:1.32|-5.2,6.46,2000 +Sge Epsilon-4A|V12213|HD 185194|BD+16 3918|HR 7463|J193717.39+162746.0,f|D|G8,19:37:17.39|17.26,16:27:46.09|13.7,5.66,2000 +SAO 162827|HD 184985|SD-14 5479|PPM 236259|HR 7454|J193734.41-141806.4,f|S|F5,19:37:34.41|-104.36,-14:18:6.48|-146.7,5.47,2000 +HD 185435|BD+34 3637|PPM 83244|J193740.81+350121.1,f|S|K5,19:37:40.82|-7.62,35:1:21.13|-10.2,6.42,2000 +Aql 42|SAO 143621|HD 185124|SD-04 4861|J193747.31-043851.5,f|S|F3,19:37:47.32|104.80,-4:38:51.50|-53.6,5.45,2000 +HD 185657|BD+48 2922|PPM 58619|HR 7477|J193756.71+491703.8,f|D|G6,19:37:56.71|36.40,49:17:3.90|145.5,6.47,2000 +HD 185436|BD+20 4210|HR 7472|J193817.79+204700.2,f|S|K0,19:38:17.79|-6.87,20:47:0.21|-33.8,6.50,2000 +SAO 246188|HD 184585|CP-58 7627|PPM 347866|HR 7434|J193825.95-575900.0,f|S|K0,19:38:25.95|30.86,-57:59:0.03|-62.8,6.19,2000 +V1143 CYG|HD 185912|BD+54 2193|PPM 37619|HR 7484|J193841.18+545825.6,f|V|F6,19:38:41.18|35.38,54:58:25.66|163.9,5.89,2000 +SAO 124892|HD 185423|BD+03 4097|PPM 168322|HR 7471|J193848.99+032253.4,f|S|B3,19:38:48.99|1.35,3:22:53.48|0.2,6.37,2000 +Aql Sigma-44|ig Aql|BD+05 4225|PPM 168338|HR 7474|J193911.64+052351.9,f|D|B3,19:39:11.64|2.09,5:23:51.98|-3.8,5.18,2000 +Cyg Phi-12|HD 185734|BD+29 3684|HR 7478|J193922.60+300911.9,f|D|G8,19:39:22.61|1.95,30:9:11.96|36.1,4.68,2000 +V0340 SGE|HD 185622|BD+16 3936|PPM 136711|HR 7475|J193925.33+163416.0,f|D|K4,19:39:25.34|0.29,16:34:16.03|-6.4,6.37,2000 +Cyg 14|V24841|HD 185872|BD+42 3413|PPM 58649|HR 7483|J193926.48+424905.8,f|V|B9,19:39:26.49|23.77,42:49:5.80|27.3,5.41,2000 +HD 185955|BD+45 2940|PPM 58655|HR 7487|J193934.53+455726.7,f|S|G8,19:39:34.54|11.68,45:57:26.78|24.3,6.25,2000 +QQ TEL|HD 185139|CD-4513354|PPM 325328|HR 7461|J193941.77-451642.7,f|V|F2,19:39:41.78|-24.80,-45:16:42.78|6.1,6.24,2000 +HD 185837|BD+33 3547|PPM 83318|HR 7481|J193944.92+335844.1,f|D|A3,19:39:44.92|-3.61,33:58:44.18|12.2,6.11,2000 +Sgr 53|CD-2315618|J193949.46-232539.7,f|D|B9,19:39:49.46|7.98,-23:25:39.76|-37.2,6.33,2000 +SAO 254622|HD 184586|CP-66 3445|PPM 364118|HR 7435|J193952.18-664107.8,f|D|A1,19:39:52.18|35.15,-66:41:7.82|-40.3,6.37,2000 +Sham|Alsahm|Sge Alpha-5A|HD 185758|BD+17 4042|PPM 136737|HR 7479|J194005.79+180050.0,f|D|G1,19:40:5.79|15.12,18:0:50.01|-19.7,4.39,2000 +SAO 188419|HD 185467|CD-2315625|HR 7473|J194007.16-232544.7,f|S|K5,19:40:7.17|29.73,-23:25:44.71|-12.8,5.97,2000 +BD+60 1991|PPM 21674|J194013.19+603025.6,f|D|A5,19:40:13.20|3.25,60:30:25.61|-6.9,6.49,2000 +CP-54 9438|PPM 347891|HR 7459|J194018.71-542504.0,f|S|K0,19:40:18.72|76.46,-54:25:4.04|-11.8,6.25,2000 +V24848|HD 186121|BD+42 3419|PPM 58673|HR 7492|J194041.15+430440.1,f|V|M2,19:40:41.15|1.97,43:4:40.17|-0.8,6.19,2000 +Aql 45|SAO 143678|HD 185762|BD-00 3813|J194043.32-003716.4,f|D|A3,19:40:43.32|12.60,-0:37:16.44|24.5,5.66,2000 +Sgr 54A|V12275|SAO 162883|HD 185644|SD-16 5399|PPM 236337|HR 7476|J194043.38-161735.7,f|D|K2,19:40:43.38|69.68,-16:17:35.76|-50.2,5.30,2000 +V12300|HD 186155|BD+45 2949|PPM 58681|HR 7495|J194050.18+453129.7,f|D|F5,19:40:50.18|84.07,45:31:29.79|120.4,5.07,2000 +Sge Beta-6|HD 185958|BD+17 4048|PPM 136766|HR 7488|J194102.93+172833.7,f|S|G8,19:41:2.94|9.01,17:28:33.75|-33.9,4.38,2000 +QS AQL|HD 185936|BD+13 4098|PPM 136767|HR 7486|J194105.53+134856.3,f|D|B5,19:41:5.53|0.00,13:48:56.39|-11,6.00,2000 +BD+22 3767|J194114.64+222709.9,f|S|K0,19:41:14.65|0.42,22:27:9.98|-3.5,6.40,2000 +SAO 254627|HD 184996|CP-66 3447|HR 7455|J194137.26-655115.8,f|S|M0,19:41:37.26|14.48,-65:51:15.89|-71.8,6.09,2000 +Cyg 16A|BD+50 2847|PPM 37671|J194148.95+503130.2,f|D|G1,19:41:48.95|-147.71,50:31:30.22|-158.9,5.96,2000 +HD 186427|BD+50 2848|PPM 37673|J194151.97+503103.0,f|D|G3,19:41:51.97|-135.15,50:31:3.08|-163.5,6.21,2000 +BD+39 3878|HR 7499|J194157.61+401514.9,f|D|A6,19:41:57.62|-12.82,40:15:14.92|37.4,6.23,2000 +HD 185966|SD-09 5209|J194202.92-091137.1,f|S|K2,19:42:2.92|43.68,-9:11:37.16|-84.4,6.30,2000 +Aql 46|HD 186122|BD+11 3954|HR 7493|J194212.81+121135.7,f|S|B9,19:42:12.81|0.00,12:11:35.74|-8.4,6.33,2000 +Sgr 55|SAO 162915|SD-16 5413|PPM 236375|HR 7489|J194231.13-160726.3,f|S|F1,19:42:31.13|67.73,-16:7:26.39|-9.2,5.07,2000 +Aql Chi-47A|V12325|BD+11 3955|PPM 136831|HR 7497|J194234.00+114935.6,f|D|G0,19:42:34.01|3.38,11:49:35.70|-10.5,5.30,2000 +HD 186377|BD+32 3531|J194244.60+322536.2,f|S|A5,19:42:44.61|2.15,32:25:36.27|-1.2,5.93,2000 +BD+30 3706|PPM 83419|J194309.59+304040.4,f|S|A1,19:43:9.60|2.58,30:40:40.41|4.3,6.08,2000 +BD+38 3725|PPM 83421|J194310.76+384018.1,f|D|K0,19:43:10.77|6.91,38:40:18.17|0.3,6.38,2000 +BD+57 2057|PPM 37695|HR 7522|J194314.41+580059.8,f|S|G0,19:43:14.42|128.31,58:0:59.82|-55.6,6.30,2000 +SAO 162931|HD 186185|SD-15 5444|PPM 236398|HR 7496|J194333.53-152812.3,f|D|F5,19:43:33.53|135.60,-15:28:12.38|-185.2,5.49,2000 +CD-3713322|PPM 299319|HR 7491|J194337.61-373219.5,f|S|B8,19:43:37.62|1.07,-37:32:19.55|-17.4,6.14,2000 +HD 186815|BD+56 2291|HR 7526|J194339.49+570233.7,f|S|K2,19:43:39.50|3.43,57:2:33.77|23.6,6.29,2000 +Vul 10|HD 186486|BD+25 3933|J194342.92+254618.9,f|S|G8,19:43:42.93|11.62,25:46:18.94|23.1,5.49,2000 +V24864|HD 186619|BD+41 3469|PPM 58751|HR 7514|J194345.09+414623.1,f|V|M0,19:43:45.10|19.13,41:46:23.19|10.1,5.86,2000 +HD 186568|BD+33 3572|PPM 83442|HR 7512|J194351.45+340945.8,f|D|B8,19:43:51.45|6.45,34:9:45.81|4,6.07,2000 +PS VUL|HD 186518|BD+26 3654|J194355.97+270807.4,f|D|B7,19:43:55.97|0.80,27:8:7.43|-3.4,6.35,2000 +Cyg 15|HD 186675|BD+37 3586|PPM 83454|HR 7517|J194416.60+372115.6,f|S|G8,19:44:16.60|72.61,37:21:15.68|35.1,4.89,2000 +BD+68 1079|PPM 21724|HR 7545|J194418.41+692013.4,f|S|A2,19:44:18.42|8.79,69:20:13.43|-22.2,5.91,2000 +Aql Psi-48|HD 186547|BD+12 4059|PPM 136885|HR 7511|J194434.19+131810.0,f|S|B9,19:44:34.19|1.75,13:18:10.02|-10.8,6.26,2000 +V2090 CYG|BD+34 3691|PPM 83465|J194438.17+342450.9,f|V|M1,19:44:38.17|3.59,34:24:50.99|3.4,6.47,2000 +HD 186535|BD+08 4200|PPM 168561|J194441.29+084335.5,f|S|G8,19:44:41.30|37.36,8:43:35.54|-17.5,6.43,2000 +V0973 CYG|HD 186776|BD+40 3866|PPM 58777|HR 7523|J194449.04+404300.4,f|V|M3,19:44:49.04|-67.99,40:43:0.49|-24.8,6.40,2000 +Cyg Delta-18A|V12381|HD 186882|BD+44 3234|PPM 58782|HR 7528|J194458.47+450750.9,f|D|B9,19:44:58.48|43.18,45:7:50.91|48.4,2.91,2000 +BD+35 3786|HR 7529|J194539.65+360527.6,f|D|B9,19:45:39.65|2.18,36:5:27.68|6.6,6.38,2000 +Aql Upsilon-49|HD 186689|BD+07 4210|PPM 168596|HR 7519|J194539.94+073647.3,f|S|A3,19:45:39.95|53.82,7:36:47.37|0.1,5.89,2000 +V24881|HD 186927|BD+34 3701|PPM 83499|J194551.35+350045.9,f|D|K0,19:45:51.36|11.55,35:0:45.91|-6.4,6.10,2000 +SAO 143776|SD-03 4701|HR 7516|J194552.23-025300.4,f|S|B3,19:45:52.23|-2.70,-2:53:0.43|-1.5,6.48,2000 +SAO 211541|CD-3215443|PPM 299365|J194601.21-315430.8,f|S|B8,19:46:1.22|1.53,-31:54:30.86|-13.5,5.52,2000 +Tarazed|Reda|Aql Gamma-50|V24880|HD 186791|BD+10 4043|PPM 136931|HR 7525|J194615.57+103647.7,f|D|K3,19:46:15.58|15.78,10:36:47.74|-3.1,2.71,2000 +Sgr 56|SAO 162964|HD 186648|SD-20 5698|PPM 236458|HR 7515|J194621.73-194540.0,f|S|K0,19:46:21.74|-128.89,-19:45:40.01|-89.8,4.88,2000 +Cyg 17A|V24883|BD+33 3587|PPM 83516|HR 7534|J194625.60+334339.3,f|D|F7,19:46:25.60|23.08,33:43:39.35|-448.7,5.00,2000 +V24885|BD+32 3558|PPM 83524|HR 7535|J194635.00+325318.9,f|D|K3,19:46:35.01|-37.41,32:53:18.93|-5.9,6.18,2000 +CN DRA|HD 187764|BD+68 1082|PPM 21754|HR 7563|J194644.66+682616.7,f|V|F0,19:46:44.67|7.44,68:26:16.79|-1.7,6.34,2000 +Sge Delta-7A|Delta Sagittae|BD+18 4240|PPM 136976|HR 7536|J194723.25+183203.4,f|D|M2,19:47:23.26|-4.55,18:32:3.41|11.1,3.83,2000 +V24891|HD 187372|BD+47 2916|PPM 58843|HR 7547|J194726.82+475427.2,f|V|M2,19:47:26.83|-21.32,47:54:27.23|-37.7,6.14,2000 +HD 187235|BD+38 3758|HR 7543|J194727.77+382427.4,f|D|B8,19:47:27.78|4.47,38:24:27.41|-1.2,5.84,2000 +HD 187193|BD+25 3972|J194748.54+252302.6,f|S|K0,19:47:48.54|67.49,25:23:2.61|-22,6.01,2000 +Tel Nu|SAO 246271|HD 186543|CP-56 9290|J194801.19-562145.4,f|S|A7,19:48:1.20|92.40,-56:21:45.40|-137.4,5.34,2000 +SAO 162998|HD 186984|SD-14 5555|PPM 236514|HR 7532|J194803.02-134213.0,f|S|A6,19:48:3.02|25.65,-13:42:13.02|-25,6.10,2000 +Dra Epsilon-63|V12465|HD 188119|BD+69 1070|Tyl|Kin Yu|HR 7582|J194810.35+701604.5,f|D|G7,19:48:10.35|80.17,70:16:4.55|39,3.84,2000 +V24894|BD+10 4058|HR 7542|J194830.51+104138.7,f|V|F8,19:48:30.51|-2.36,10:41:38.76|-5.8,6.46,2000 +Aql Pi-52A|V12425|HD 187259|BD+11 3994A|HR 7544|J194842.05+114857.2,f|D|G2,19:48:42.06|16.00,11:48:57.23|-9.8,5.75,2000 +V12425|BD+11 3994B|J194842.15+114856.7,f|D|A1,19:48:42.15|16.00,11:48:56.79|-9.8,5.75,2000 +V24893|SD-12 5541|PPM 236528|J194850.17-121909.9,f|V|K5,19:48:50.17|-0.44,-12:19:9.91|-21.5,6.49,2000 +V1765 CYG|HD 187459|BD+33 3602|HR 7551|J194850.59+332614.2,f|V|B0,19:48:50.60|-3.63,33:26:14.22|-5.7,6.47,2000 +SAO 246277|HD 186756|CP-53 9678|HR 7521|J194855.08-525317.1,f|S|K1,19:48:55.09|15.48,-52:53:17.19|-47.9,6.27,2000 +Sge Zeta-8A|HD 187362|BD+18 4254|HR 7546|J194858.65+190831.4,f|D|A3,19:48:58.66|14.60,19:8:31.44|25.6,5.03,2000 +HD 187195|SD-11 5131|PPM 236532|HR 7541|J194902.20-105214.7,f|S|K5,19:49:2.20|30.79,-10:52:14.75|-21.3,6.00,2000 +CD-2916546|HR 7538|J194911.60-284720.3,f|S|F2,19:49:11.61|120.02,-28:47:20.30|-98.6,6.04,2000 +SAO 257736|HD 186219|CP-72 2445|PPM 374368|HR 7498|J194925.30-723012.1,f|S|A4,19:49:25.31|6.90,-72:30:12.16|14.7,5.40,2000 +V24907|HD 187638|BD+38 3772|PPM 83618|HR 7555|J194927.50+384236.5,f|D|G5,19:49:27.50|7.61,38:42:36.54|-9.4,6.12,2000 +SAO 254658|HD 186584|CP-67 3680|PPM 364219|HR 7513|J194953.41-664847.0,f|S|K4,19:49:53.42|-0.53,-66:48:47.05|9.8,6.43,2000 +V0379 VUL|BD+28 3493|HR 7556|J194954.72+282622.8,f|V|B5,19:49:54.72|1.71,28:26:22.83|-2.4,6.45,2000 +HD 187614|BD+26 3678|J194955.81+270506.6,f|S|G8,19:49:55.81|8.81,27:5:6.66|4.6,6.47,2000 +V12432|SAO 229887|CD-4713103|PPM 325524|HR 7537|J195014.05-473326.6,f|V|M1,19:50:14.06|8.50,-47:33:26.61|-13,5.92,2000 +V1339 AQL|SAO 125116|HD 187567|BD+07 4252|PPM 168764|HR 7554|J195017.47+075408.7,f|V|B2,19:50:17.48|-1.04,7:54:8.71|-4,6.49,2000 +SAO 254666|HD 186837|CP-61 6413|PPM 364229|HR 7527|J195021.75-610340.0,f|S|B5,19:50:21.76|3.41,-61:3:40.03|5.4,6.21,2000 +Cyg 19A|V1509 CYG|HD 187849|BD+38 3780|PPM 83662|HR 7566|J195033.99+384320.7,f|D|M2,19:50:34.00|12.64,38:43:20.71|105.9,5.19,2000 +V0380 CYG|HD 187879|BD+40 3902|PPM 58921|HR 7567|J195037.32+403559.1,f|V|B1,19:50:37.33|-2.16,40:35:59.13|-7.7,5.69,2000 +Cyg 20|V12481|BD+52 2547|HR 7576|J195037.72+525916.8,f|V|K3,19:50:37.72|-10.29,52:59:16.80|-68,5.02,2000 +SAO 246293|HD 186957|CP-59 7534|HR 7531|J195044.80-591137.2,f|D|A0,19:50:44.80|23.12,-59:11:37.20|-12.2,5.43,2000 +Aql 51|HD 187532|SD-11 5149|PPM 236571|HR 7553|J195046.78-104548.6,f|D|F0,19:50:46.78|-32.42,-10:45:48.64|31.8,5.39,2000 +V2093 CYG|BD+37 3636|HR 7568|J195046.87+374934.7,f|V|M4,19:50:46.87|4.86,37:49:34.77|4.4,6.19,2000 +Altair|Atair|Aql Alpha-53A|V24910|SAO 125122|HD 187642|BD+08 4236|PPM 168779|HR 7557|J195046.99+085205.9,f|D|A7,19:50:47.00|536.80,8:52:5.96|385.6,0.93,2000 +NZ PAV|SAO 254669|HD 186786|CP-65 3827|PPM 364234|HR 7524|J195101.23-653618.3,f|V|F2,19:51:1.24|99.68,-65:36:18.31|-158.1,6.03,2000 +Aql Omicron-54A|V24912|HD 187691|BD+10 4073|J195101.64+102456.6,f|D|F8,19:51:1.64|240.03,10:24:56.62|-134.5,5.12,2000 +Vul 12|V0395 VUL|HD 187811|BD+22 3833|HR 7565|J195104.10+223636.1,f|V|B2,19:51:4.11|23.40,22:36:36.17|-16.7,4.91,2000 +SAO 143853|SD-02 5133|HR 7559|J195111.09-022739.5,f|S|K5,19:51:11.10|-7.79,-2:27:39.56|-41.3,6.12,2000 +SAO 125139|HD 187753|BD+09 4288|HR 7562|J195117.73+093747.5,f|S|A1,19:51:17.73|7.39,9:37:47.59|-21.7,6.25,2000 +V24918|BD+47 2937|HR 7577|J195119.37+472238.1,f|V|F2,19:51:19.38|14.02,47:22:38.12|17.4,6.23,2000 +SAO 125141|HD 187734|BD+03 4172|PPM 168812|J195126.83+040519.0,f|D|A5,19:51:26.84|-5.69,4:5:19.07|-6.1,6.49,2000 +V3961 SGR|HD 187474|CD-4013514|PPM 299467|HR 7552|J195150.60-395227.7,f|V|A0,19:51:50.60|19.11,-39:52:27.72|-12.1,5.33,2000 +V24923|BD+46 2793|PPM 58954|HR 7589|J195159.06+470138.4,f|V|O9,19:51:59.07|-2.76,47:1:38.42|-4,5.64,2000 +V12498|HD 187982|BD+24 3914|HR 7573|J195201.59+245931.7,f|V|A1,19:52:1.59|-0.14,24:59:31.78|-3.9,5.60,2000 +V12490|HD 187923|BD+11 4019|PPM 137115|HR 7569|J195203.43+113741.9,f|D|G0,19:52:3.44|-345.27,11:37:41.98|-333.3,6.17,2000 +V12511|HD 188252|BD+47 2939|PPM 58957|HR 7591|J195207.16+475554.4,f|V|B2,19:52:7.17|-6.23,47:55:54.46|-9.8,5.91,2000 +Sgr 57|HD 187739|SD-19 5631|PPM 236612|HR 7561|J195212.00-190241.9,f|S|G5,19:52:12.00|-2.41,-19:2:41.97|-53.3,5.90,2000 +HD 188149|BD+36 3744|PPM 83731|HR 7583|J195216.41+362556.2,f|S|K4,19:52:16.41|12.67,36:25:56.26|4.4,6.11,2000 +Sge 9|QZ SGE|BD+18 4276|PPM 137126|HR 7574|J195221.76+184018.7,f|V|O7,19:52:21.77|-0.14,18:40:18.75|-10.5,6.25,2000 +Aql Eta-55|Eta Aquilae|SAO 125159|HD 187929|BD+00 4337|PPM 168843|J195228.36+010020.3,f|S|F6,19:52:28.37|6.90,1:0:20.38|-7.3,3.87,2000 +SAO 246311|CP-55 9221|HR 7548|J195237.72-545815.6,f|D|G8,19:52:37.72|20.49,-54:58:15.69|4.4,5.72,2000 +SAO 246312|HD 187421|CP-55 9222|HR 7549|J195239.11-545835.1,f|D|A2,19:52:39.12|6.28,-54:58:35.20|3.7,6.44,2000 +V0819 CYG|HD 188439|BD+47 2945|J195301.24+474827.7,f|V|B0,19:53:1.25|-7.35,47:48:27.79|-7.6,6.30,2000 +V0505 SGR|HD 187949|SD-14 5578|PPM 236638|HR 7571|J195306.38-143611.5,f|V|A0,19:53:6.39|-0.73,-14:36:11.55|-50.4,6.49,2000 +Cyg 23|HD 188665|BD+57 2084|PPM 37885|J195317.37+573124.5,f|S|B5,19:53:17.38|5.96,57:31:24.54|7.6,5.14,2000 +V1291 AQL|SAO 143883|SD-03 4742|HR 7575|J195318.73-030652.0,f|V|A5,19:53:18.74|21.72,-3:6:52.07|13.6,5.63,2000 +Vul 13|V24927|BD+23 3820|HR 7592|J195327.69+240446.6,f|D|B9,19:53:27.70|22.73,24:4:46.61|36.3,4.60,2000 +HD 188793|BD+59 2137|PPM 37892|HR 7611|J195335.42+594231.1,f|D|A3,19:53:35.43|42.14,59:42:31.18|55.6,6.06,2000 +Aql 56|SAO 143894|HD 188154|SD-08 5150|HR 7584|J195408.27-083427.1,f|D|K5,19:54:8.28|7.86,-8:34:27.16|-19,5.77,2000 +Aql Xi-59|BD+08 4261|PPM 168913|HR 7595|J195414.88+082741.2,f|S|G9,19:54:14.88|101.48,8:27:41.23|-81.3,4.72,2000 +V4200 SGR|SAO 188692|CD-2415668|HR 7578|J195417.74-235627.8,f|D|K3,19:54:17.75|-122.70,-23:56:27.85|-409.9,6.22,2000 +HD 188485|BD+23 3829|J195431.07+241909.7,f|S|A0,19:54:31.08|23.51,24:19:9.77|-0.8,5.57,2000 +Aql 57A|SAO 143898|HD 188293|SD-08 5154|HR 7593|J195437.65-081338.2,f|D|B7,19:54:37.65|8.17,-8:13:38.24|-25.7,5.69,2000 +Aql 57B|SAO 143899|HD 188294|SD-08 5155|HR 7594|J195438.06-081413.3,f|D|B8,19:54:38.06|4.01,-8:14:13.37|-30.2,6.44,2000 +SAO 125221|HD 188385|BD+06 4351|PPM 168928|HR 7598|J195440.20+070825.2,f|D|A2,19:54:40.20|29.17,7:8:25.27|0,6.14,2000 +SAO 254683|HD 187653|CP-61 6426|PPM 364269|HR 7558|J195440.44-611014.8,f|S|A4,19:54:40.44|-8.10,-61:10:14.85|9.4,6.21,2000 +Aql 58|SAO 125219|BD-00 3871|HR 7596|J195444.79+001625.0,f|S|A0,19:54:44.80|42.45,0:16:25.06|-13.2,5.63,2000 +BD+36 3766|J195448.25+365944.4,f|S|G1,19:54:48.25|11.14,36:59:44.43|8.5,5.79,2000 +SAO 211653|HD 188158|CD-3314560|HR 7585|J195505.10-330246.5,f|S|K2,19:55:5.10|-12.57,-33:2:46.51|-1.3,6.46,2000 +Sgr Iota|SAO 229927|HD 188114|CD-4214549|PPM 325624|HR 7581|J195515.69-415205.8,f|S|K0,19:55:15.70|23.35,-41:52:5.84|51.6,4.12,2000 +Alshain|Aql Beta-60A|V12557|SAO 125235|HD 188512|BD+06 4357|PPM 168947|J195518.79+062424.3,f|D|G8,19:55:18.79|46.36,6:24:24.35|-481.3,3.72,2000 +SAO 143911|SD-07 5102|HR 7599|J195519.49-064405.1,f|D|F2,19:55:19.50|16.24,-6:44:5.18|-58.7,6.50,2000 +HD 189127|BD+57 2092|PPM 37921|HR 7626|J195522.06+581500.6,f|S|G9,19:55:22.07|20.21,58:15:0.70|-75.2,6.10,2000 +Cyg Psi-24A|BD+52 2572|PPM 37926|HR 7619|J195537.78+522620.2,f|D|A4,19:55:37.79|-36.67,52:26:20.21|-31,4.91,2000 +Sgr Omega-58|SAO 188722|HD 188376|CD-2614637|Terebellum|HR 7597|J195550.35-261758.2,f|S|G5,19:55:50.36|204.00,-26:17:58.22|74.4,4.70,2000 +Cyg 22|V24943|HD 188892|BD+38 3817|PPM 83837|HR 7613|J195551.76+382912.1,f|V|B5,19:55:51.76|1.41,38:29:12.14|0.6,4.95,2000 +HD 189276|BD+58 2013|PPM 37931|HR 7633|J195555.37+585045.4,f|S|K4,19:55:55.38|-9.00,58:50:45.49|-20.9,4.97,2000 +Sge 10|S SGE|HD 188727|BD+16 4067|PPM 137241|J195601.26+163805.2,f|V|G5,19:56:1.26|1.01,16:38:5.28|-6.9,5.71,2000 +SAO 258844|HD 186154|CP-81 868|PPM 378397|HR 7494|J195601.69-812059.4,f|S|K3,19:56:1.70|20.03,-81:20:59.42|-0.7,6.38,2000 +Aql Phi-61|V24940|HD 188728|BD+11 4055|J195614.25+112525.3,f|V|A1,19:56:14.25|32.35,11:25:25.39|4.6,5.29,2000 +Cyg Eta-21A|V12586|HD 188947|BD+34 3798|PPM 83853|HR 7615|J195618.37+350500.3,f|D|K0,19:56:18.37|-34.00,35:5:0.33|-27.6,3.90,2000 +HD 189296|BD+56 2331|PPM 37938|HR 7634|J195619.05+564113.2,f|S|A4,19:56:19.05|29.33,56:41:13.26|17.1,6.16,2000 +BD+35 3878|PPM 83867|J195644.14+361502.1,f|S|B5,19:56:44.14|1.21,36:15:2.16|-0.2,6.02,2000 +HD 189253|BD+50 2930|PPM 37948|HR 7632|J195645.17+505409.0,f|S|A1,19:56:45.17|10.03,50:54:9.08|10.6,6.46,2000 +Sgr 59|V24941|SAO 188742|CD-2714399|Terebellum-2|J195656.83-271011.6,f|V|K2,19:56:56.83|9.61,-27:10:11.64|-15,4.53,2000 +SAO 246349|HD 188162|CP-59 7550|PPM 348125|HR 7587|J195706.31-585404.8,f|S|B9,19:57:6.31|23.55,-58:54:4.87|-14.9,5.25,2000 +HD 189178|BD+39 3968|AG+40 1935|HR 7628|J195713.86+402204.1,f|D|B5,19:57:13.87|7.09,40:22:4.17|-0.5,5.46,2000 +Sge 11|BD+16 4081|HR 7622|J195745.44+164720.9,f|S|B9,19:57:45.45|11.49,16:47:20.99|19.7,5.54,2000 +HD 189377|BD+41 3549|HR 7638|J195756.11+421538.7,f|D|A3,19:57:56.11|-5.22,42:15:38.77|-10.2,6.46,2000 +Sgr 61|SAO 163141|HD 188899|SD-15 5516|PPM 236747|HR 7614|J195757.03-152929.3,f|S|A3,19:57:57.03|17.78,-15:29:29.36|-93.7,5.01,2000 +BD+63 1584|PPM 21877|HR 7654|J195828.73+633202.8,f|S|A3,19:58:28.74|0.80,63:32:2.88|-27.6,6.15,2000 +HD 189395|BD+30 3837|PPM 83941|J195837.98+305901.1,f|S|B9,19:58:37.98|33.18,30:59:1.20|-2.6,5.51,2000 +SAO 254693|CP-69 3072|PPM 364315|HR 7579|J195841.29-690950.2,f|S|A3,19:58:41.29|69.20,-69:9:50.24|-100.6,5.73,2000 +BD+69 1084|HR 7666|J195841.85+702201.0,f|S|G8,19:58:41.85|40.47,70:22:1.01|58.1,6.33,2000 +Sge Gamma-12|V12638|HD 189319|BD+19 4229|PPM 137344|HR 7635|J195845.42+192931.7,f|V|M0,19:58:45.43|64.34,19:29:31.73|22.6,3.51,2000 +SAO 254696|HD 188164|CP-69 3073|PPM 364318|HR 7588|J195852.98-684545.3,f|S|A0,19:58:52.99|36.46,-68:45:45.30|-73.8,6.38,2000 +HD 188981|CD-3017525|PPM 299619|HR 7617|J195856.42-303218.1,f|S|K1,19:58:56.43|86.04,-30:32:18.18|-59.9,6.27,2000 +Sgr 60|SAO 188778|CD-2614682|Terebellum-3|HR 7618|J195857.19-261144.7,f|S|G6,19:58:57.20|34.46,-26:11:44.76|24.7,4.85,2000 +Vul 14|BD+22 3872|HR 7641|J195910.53+230604.6,f|S|F0,19:59:10.54|-70.78,23:6:4.61|3.1,5.68,2000 +V2100 CYG|HD 189775|BD+51 2728|PPM 37994|HR 7651|J195915.34+520320.4,f|V|B5,19:59:15.35|9.32,52:3:20.49|2.6,6.13,2000 +HD 189684|BD+45 3025|PPM 59137|HR 7646|J195920.42+454621.1,f|S|A5,19:59:20.42|11.51,45:46:21.15|-16.7,5.93,2000 +HD 189322|BD+00 4375|HR 7636|J195922.64+012239.7,f|S|G8,19:59:22.64|16.50,1:22:39.71|67.7,6.17,2000 +Dra 69C|V24987|BD+76 771|HR 7686|J195936.62+762853.0,f|D|M3,19:59:36.63|-26.86,76:28:53.01|-59.5,6.20,2000 +Sgr Theta1|V24951|SAO 211716|CD-3513831|PPM 299634|HR 7623|J195944.17-351634.7,f|V|B3,19:59:44.18|6.00,-35:16:34.70|-25.2,4.37,2000 +SAO 163168|SD-10 5238|HR 7637|J195947.34-095729.6,f|D|F8,19:59:47.35|-236.38,-9:57:29.62|-391.5,5.86,2000 +Sgr Theta2|V24954|SAO 211717|HD 189118|CD-3513832|PPM 299635|HR 7624|J195951.35-344152.0,f|D|A4,19:59:51.36|108.77,-34:41:52.08|-69.1,5.31,2000 +Cyg 25|V1746 CYG|HD 189687|BD+36 3806|PPM 83988|HR 7647|J195955.19+370234.3,f|V|B3,19:59:55.20|0.36,37:2:34.39|-0.2,5.15,2000 +Sge 13|VZ SGE|HD 189577|BD+17 4183|PPM 137383|HR 7645|J200003.30+173059.4,f|D|M4,20:0:3.31|1.72,17:30:59.44|-12.2,5.39,2000 +HD 189671|BD+25 4060|J200015.35+261116.3,f|D|G8,20:0:15.36|1.48,26:11:16.39|-7,6.50,2000 +SAO 211719|HD 189195|CD-3813802|PPM 299645|HR 7629|J200015.93-374206.1,f|D|G8,20:0:15.93|19.58,-37:42:6.19|-1.2,5.95,2000 +V12655|SAO 211724|HD 189245|CD-3414082|PPM 299648|HR 7631|J200020.25-334212.4,f|V|F7,20:0:20.25|130.78,-33:42:12.43|-289.3,5.65,2000 +Pav Mu1|HD 188584|CP-67 3695|PPM 364333|J200023.10-665657.6,f|S|K0,20:0:23.10|-3.70,-66:56:57.70|-194.3,5.76,2000 +SAO 229973|CD-4912949|PPM 325719|HR 7621|J200025.32-492103.4,f|S|K0,20:0:25.33|-76.61,-49:21:3.41|-2.9,6.18,2000 +V24956|SAO 229977|CD-4313735|HR 7627|J200026.48-430235.8,f|V|M0,20:0:26.49|22.03,-43:2:35.89|12.3,6.11,2000 +Pav Epsilon|V12598|SAO 257757|HD 188228|CP-73 2086|J200035.55-725437.8,f|V|A0,20:0:35.55|80.53,-72:54:37.81|-131.3,3.95,2000 +SAO 229981|HD 189198|CD-4513549|PPM 325731|J200048.32-450646.5,f|S|A8,20:0:48.33|3.39,-45:6:46.51|5.8,5.80,2000 +SAO 125355|HD 189695|BD+08 4300|PPM 169156|HR 7648|J200058.97+083327.8,f|S|K5,20:0:58.98|11.12,8:33:27.85|-14,5.90,2000 +Vul 15|NT VUL|HD 189849|BD+27 3587|HR 7653|J200106.04+274512.8,f|V|A4,20:1:6.05|58.01,27:45:12.86|3.8,4.66,2000 +HD 189942|BD+36 3820|HR 7655|J200115.30+370556.3,f|S|K0,20:1:15.31|40.80,37:5:56.39|50.9,6.22,2000 +Cyg 26A|BD+49 3158|J200121.56+500616.9,f|D|K1,20:1:21.56|16.36,50:6:16.90|6.1,5.06,2000 +SAO 188829|HD 189561|CD-2315935|HR 7643|J200123.84-224414.3,f|S|G7,20:1:23.85|9.82,-22:44:14.31|-11.6,6.01,2000 +SAO 229993|HD 189388|CD-4113807|PPM 325748|HR 7639|J200126.77-404851.6,f|S|A2,20:1:26.78|27.70,-40:48:51.61|-39.8,6.32,2000 +Dra 64|V24985|BD+64 1405|HR 7676|J200128.54+644915.5,f|D|M1,20:1:28.55|10.02,64:49:15.51|-12.5,5.23,2000 +HD 189944|BD+24 3975|HR 7656|J200144.71+244801.5,f|S|B4,20:1:44.71|6.67,24:48:1.52|-0.8,5.88,2000 +NU PAV|SAO 246389|HD 189124|CP-59 7564|PPM 348199|HR 7625|J200144.74-592233.2,f|V|M6,20:1:44.74|19.71,-59:22:33.22|-26.9,5.05,2000 +Pav Mu2|HD 188887|CP-67 3698|PPM 364354|HR 7612|J200152.46-665638.2,f|S|K2,20:1:52.46|38.48,-66:56:38.28|-71.5,5.33,2000 +Sgr 63|SAO 163195|HD 189741|SD-14 5618|PPM 236833|HR 7649|J200158.60-133813.9,f|S|A3,20:1:58.60|38.92,-13:38:13.98|10.4,5.70,2000 +Vul 16|BD+24 3977|HR 7657|J200201.43+245616.9,f|D|F2,20:2:1.43|89.63,24:56:16.95|69.7,5.26,2000 +Dra 65A|BD+64 1407|PPM 21927|HR 7682|J200220.21+643803.9,f|D|G5,20:2:20.22|41.96,64:38:3.91|11.2,6.26,2000 +Sgr 62|V3872 SGR|SAO 188844|HD 189763|CD-2816355|Terebellum-4|J200239.48-274235.4,f|V|M4,20:2:39.48|32.27,-27:42:35.44|14.4,4.49,2000 +BD+31 3905|J200248.81+315731.7,f|S|K1,20:2:48.81|11.33,31:57:31.79|12.8,6.38,2000 +Dra Rho-67A|BD+67 1222|PPM 21931|HR 7685|J200249.07+675224.8,f|D|K2,20:2:49.07|16.44,67:52:24.83|47.8,4.51,2000 +BD+18 4365|PPM 137514|HR 7662|J200316.39+183003.5,f|D|K3,20:3:16.40|11.38,18:30:3.57|-19.7,5.98,2000 +14 Sge|BD+15 4033|PPM 137524|HR 7664|J200330.01+160152.5,f|S|B9,20:3:30.02|5.05,16:1:52.52|-7.7,5.67,2000 +SAO 211767|HD 189831|CD-3813828|PPM 299717|HR 7652|J200333.45-375626.5,f|S|K5,20:3:33.46|64.71,-37:56:26.52|-85.4,4.76,2000 +BD+29 3872|J200337.40+295348.5,f|D|G6,20:3:37.41|683.35,29:53:48.50|-524.1,5.73,2000 +BD+22 3903|J200338.79+225627.8,f|S|K2,20:3:38.80|-18.79,22:56:27.81|-15.7,6.45,2000 +SAO 188863|CD-2214454|HR 7658|J200344.30-223544.1,f|S|F6,20:3:44.31|-38.50,-22:35:44.14|23.4,6.44,2000 +Sge 15A|V12757|BD+16 4121|HR 7672|J200406.22+170412.6,f|D|G1,20:4:6.22|-394.04,17:4:12.62|-406.4,5.79,2000 +Aql Tau-63|BD+06 4416|PPM 169262|HR 7669|J200408.31+071640.6,f|S|K5,20:4:8.32|14.28,7:16:40.68|13,5.52,2000 +V12746|SAO 211782|CD-3215682|PPM 299741|HR 7659|J200419.59-320322.6,f|D|K1,20:4:19.59|42.97,-32:3:22.66|-10.8,4.99,2000 +Aql 62|V24992|BD-01 3887|HR 7667|J200423.15-004233.5,f|V|K4,20:4:23.15|-2.25,-0:42:33.51|-118.3,5.68,2000 +BD+47 3004|PPM 59266|HR 7684|J200428.79+481346.7,f|S|A2,20:4:28.80|10.89,48:13:46.79|0.5,6.15,2000 +V1768 CYG|BD+31 3925|PPM 84148|HR 7678|J200436.17+321306.9,f|D|B1,20:4:36.17|-2.79,32:13:6.95|-11.1,5.65,2000 +HD 191174|BD+63 1593|PPM 21951|HR 7695|J200444.51+635324.7,f|D|A2,20:4:44.52|2.97,63:53:24.75|37.5,6.28,2000 +V25007|HD 191372|BD+67 1226|PPM 21958|J200453.39+680137.7,f|V|M3,20:4:53.39|-12.12,68:1:37.77|-9.8,6.33,2000 +V1401 AQL|SAO 163245|SD-12 5641|HR 7671|J200505.41-113557.8,f|D|F1,20:5:5.41|-0.59,-11:35:57.89|-15,6.39,2000 +V25002|BD+51 2763|PPM 38121|HR 7687|J200506.75+515021.8,f|V|M1,20:5:6.76|34.38,51:50:21.83|31.2,6.14,2000 +Sge Eta-16|V24997|BD+19 4277|PPM 137588|HR 7679|J200509.49+195927.8,f|V|K2,20:5:9.49|30.59,19:59:27.85|79.7,5.09,2000 +V25000|BD+38 3896|PPM 84163|HR 7683|J200509.78+382842.4,f|D|G5,20:5:9.78|263.39,38:28:42.45|111.6,6.20,2000 +BD+55 2324|PPM 38124|HR 7692|J200521.50+562029.1,f|S|F4,20:5:21.50|-0.42,56:20:29.12|80.2,6.19,2000 +V1472 AQL|BD+15 4040|PPM 137597|J200526.54+153001.4,f|D|M2,20:5:26.55|34.40,15:30:1.48|17.6,6.39,2000 +SAO 254721|HD 189567|CP-67 3703|HR 7644|J200532.76-671915.2,f|S|G3,20:5:32.76|844.63,-67:19:15.23|-674.6,6.08,2000 +Dra 66|HD 191277|BD+61 1970|PPM 21971|J200532.87+615943.5,f|S|K3,20:5:32.88|123.82,61:59:43.51|70.6,5.41,2000 +SD-04 5013|HR 7681|J200612.22-040441.5,f|S|K0,20:6:12.22|51.62,-4:4:41.55|-34.9,6.47,2000 +HD 191195|BD+52 2623|PPM 38144|HR 7697|J200613.84+530956.4,f|D|F5,20:6:13.85|212.85,53:9:56.48|255.2,5.82,2000 +Cyg 27A|V2008 CYG|BD+35 3959|HR 7689|J200621.76+355820.8,f|D|G8,20:6:21.77|-224.46,35:58:20.89|-440.6,5.39,2000 +Vul 17|BD+23 3896|HR 7688|J200653.40+233651.9,f|S|B3,20:6:53.41|15.12,23:36:51.93|0.5,5.08,2000 +Tel Xi|V12783|SAO 246443|CP-53 9794|PPM 348272|HR 7673|J200723.15-525250.8,f|V|M1,20:7:23.16|-12.76,-52:52:50.85|6.9,4.92,2000 +SAO 246444|CP-55 9317|PPM 348276|HR 7674|J200735.09-550057.6,f|S|F8,20:7:35.09|19.18,-55:0:57.64|36.2,6.26,2000 +HD 191243|BD+34 3881|PPM 84264|HR 7699|J200741.44+342522.4,f|S|B5,20:7:41.44|1.24,34:25:22.46|-6.1,6.15,2000 +Aql 64|BD-01 3899|J200801.82-004041.4,f|S|K1,20:8:1.82|116.54,-0:40:41.47|-67.9,5.97,2000 +V0344 SGE|HD 191178|BD+16 4153|PPM 137712|HR 7696|J200806.50+163951.8,f|V|M3,20:8:6.50|4.31,16:39:51.81|7.1,6.40,2000 +SAO 246453|CP-5211626|PPM 348286|J200809.54-523440.0,f|S|G3,20:8:9.55|-23.61,-52:34:40.06|-19.3,6.47,2000 +SAO 254731|CP-66 3473|HR 7663|J200820.46-662116.8,f|S|K5,20:8:20.47|-9.14,-66:21:16.89|-6.4,6.44,2000 +AV CAP|SD-10 5285|PPM 236994|HR 7694|J200831.27-100345.3,f|V|B9,20:8:31.27|6.20,-10:3:45.34|-34,6.19,2000 +HD 191263|BD+10 4189|PPM 137732|J200838.27+104333.1,f|S|B3,20:8:38.28|3.83,10:43:33.12|-1.8,6.34,2000 +Pav Delta|V12790|SAO 254733|CP-66 3474|PPM 364428|HR 7665|J200843.60-661055.4,f|V|G6,20:8:43.61|1210.53,-66:10:55.45|-1130.3,3.55,2000 +Cep Kappa-1A|BD+77 764|J200853.34+774241.1,f|D|B9,20:8:53.35|11.11,77:42:41.11|23.7,4.40,2000 +CD-4713262|PPM 325881|J200903.84-470404.5,f|S|K5,20:9:3.85|41.79,-47:4:4.55|-64.7,6.46,2000 +Cyg 28|V1624 CYG|BD+36 3907|PPM 84332|J200925.61+365022.6,f|V|B2,20:9:25.62|3.12,36:50:22.64|13,4.94,2000 +Sge Theta-17A|BD+20 4453A|J200956.64+205454.1,f|D|F5,20:9:56.65|58.85,20:54:54.10|98.4,6.49,2000 +Vul 18|V25030|HD 191747|BD+26 3815|HR 7711|J201033.53+265415.0,f|V|A3,20:10:33.54|18.33,26:54:15.01|12.9,5.52,2000 +HD 191814|BD+20 4462|HR 7713|J201103.54+210804.4,f|S|K0,20:11:3.54|23.23,21:8:4.48|31.2,6.24,2000 +V25020|CP-57 9622|PPM 348323|HR 7691|J201107.42-573127.2,f|D|B7,20:11:7.43|12.16,-57:31:27.26|-34.8,6.39,2000 +BE CAP|SAO 144144|HD 191639|SD-09 5382|J201110.07-085032.4,f|V|B1,20:11:10.08|1.33,-8:50:32.44|-2.1,6.46,2000 +V25026|SAO 211885|CD-3613940|J201111.93-360604.3,f|D|K3,20:11:11.94|457.15,-36:6:4.37|-1575.5,5.32,2000 +Aql Theta-65|V25032|HD 191692|BD-01 3911|J201118.28-004917.2,f|D|B9,20:11:18.29|35.55,-0:49:17.26|6.1,3.25,2000 +HD 191877|BD+21 4088|HR 7716|J201121.01+215229.7,f|S|B1,20:11:21.02|-4.73,21:52:29.77|-11.8,6.28,2000 +Dra 68|HD 192455|BD+61 1983|HR 7727|J201134.91+620442.7,f|D|F5,20:11:34.92|137.32,62:4:42.75|80.1,5.71,2000 +Vul 19|BD+26 3825|HR 7718|J201147.97+264832.3,f|S|K2,20:11:47.97|1.47,26:48:32.37|-10.4,5.49,2000 +Cap Xi1-1|SAO 163328|HD 191753|SD-12 5664|HR 7712|J201157.89-122332.6,f|S|K0,20:11:57.90|-6.89,-12:23:32.65|-18.6,6.34,2000 +Vul 20|V12890|BD+26 3828|HR 7719|J201200.70+262843.7,f|V|B7,20:12:0.70|4.43,26:28:43.70|-10.1,5.91,2000 +HD 191584|CD-4313855|PPM 325937|J201223.84-424648.2,f|S|K1,20:12:23.84|-18.06,-42:46:48.23|-100.8,6.20,2000 +Cap Xi2-2|SAO 163337|HD 191862|SD-13 5608|HR 7715|J201225.87-123702.9,f|D|F7,20:12:25.87|193.22,-12:37:2.99|-195.6,5.84,2000 +HD 192439|BD+51 2796|PPM 38241|HR 7726|J201231.71+512748.8,f|D|K2,20:12:31.72|-14.95,51:27:48.83|-15.3,6.04,2000 +SAO 125566|HD 191984|BD+00 4444B|PPM 169562|J201235.04+005158.9,f|D|A0,20:12:35.04|2.10,0:51:58.95|-19.8,6.24,2000 +SAO 125567|HD 191984|BD+00 4444A|PPM 169562|HR 7717|J201235.12+005201.3,f|D|B9,20:12:35.12|2.10,0:52:1.40|-19.8,6.24,2000 +V12900|SAO 144177|BD-00 3942|J201304.41-001950.8,f|V|K5,20:13:4.42|-13.80,-0:19:50.87|1.1,6.48,2000 +Aql 66|SAO 144181|BD-01 3920|J201313.88-010033.6,f|S|K5,20:13:13.88|24.90,-1:0:33.62|-30.1,5.46,2000 +Cyg 30D|V12926|HD 192514|BD+46 2881|PPM 59516|J201318.05+464856.4,f|D|A5,20:13:18.05|13.34,46:48:56.43|1.9,4.83,2000 +Cyg 33|V12935|HD 192696|BD+56 2376|PPM 38261|J201323.86+563403.8,f|V|A3,20:13:23.87|60.82,56:34:3.80|82.3,4.28,2000 +HD 192781|BD+60 2099|HR 7742|J201327.61+603826.0,f|S|K5,20:13:27.62|39.05,60:38:26.05|55.8,5.80,2000 +HD 191732|CD-4813464|PPM 325954|J201332.37-474247.6,f|S|K2,20:13:32.38|-5.85,-47:42:47.64|-42.8,6.47,2000 +Cyg 31A|V0695 CYG|HD 192577|BD+46 2882|PPM 59524|HR 7735|J201337.90+464428.7,f|D|K2,20:13:37.91|4.21,46:44:28.78|1.9,3.81,2000 +HD 192535|BD+42 3642|PPM 59529|HR 7733|J201342.81+432244.4,f|D|K4,20:13:42.81|-3.16,43:22:44.45|4,6.12,2000 +V25068|HD 192538|BD+36 3949|HR 7734|J201404.87+363617.5,f|V|A0,20:14:4.88|10.36,36:36:17.57|-5.6,6.48,2000 +Vul 21|NU VUL|HD 192518|BD+28 3675|HR 7731|J201414.52+284141.3,f|V|A7,20:14:14.53|12.24,28:41:41.34|-19,5.20,2000 +Aql Rho-67|HD 192425|BD+14 4227|PPM 137941|HR 7724|J201416.61+151151.3,f|S|A2,20:14:16.62|55.73,15:11:51.39|58,4.95,2000 +SAO 246495|HD 191829|CP-5211643|PPM 348372|HR 7714|J201419.02-522644.7,f|S|K4,20:14:19.03|20.85,-52:26:44.77|-52.7,5.64,2000 +SAO 254756|CP-63 4571|PPM 364487|J201426.90-632456.8,f|S|F0,20:14:26.91|-39.20,-63:24:56.84|30.8,6.09,2000 +Cyg 29A|V1644 CYG|BD+36 3955|HR 7736|J201432.03+364822.6,f|D|A2,20:14:32.03|69.18,36:48:22.69|68.7,4.95,2000 +QR VUL|HD 192685|BD+25 4165|HR 7739|J201515.89+253531.0,f|D|B3,20:15:15.90|6.90,25:35:31.05|-5,4.77,2000 +V12933|CD-2714659|HR 7722|J201517.39-270158.7,f|V|K0,20:15:17.39|1241.52,-27:1:58.72|-181.5,5.73,2000 +HD 192787|BD+33 3827|PPM 84563|HR 7743|J201523.76+334344.7,f|D|K0,20:15:23.77|-31.94,33:43:44.70|-117.8,5.71,2000 +V1488 Cyg|Cyg 32A|V1488 CYG|BD+47 3059|PPM 59586|HR 7751|J201528.32+474251.1,f|D|K4,20:15:28.32|3.84,47:42:51.15|1.2,4.00,2000 +Vul 22|QS VUL|HD 192713|BD+23 3944|HR 7741|J201530.23+233032.0,f|V|G3,20:15:30.24|2.61,23:30:32.06|-6.9,5.18,2000 +HD 192983|BD+49 3236|PPM 38295|HR 7755|J201543.25+501358.4,f|S|A2,20:15:43.25|15.54,50:13:58.45|15.1,6.37,2000 +Vul 23A|BD+27 3666|HR 7744|J201546.13+274851.2,f|D|K3,20:15:46.13|-34.36,27:48:51.30|5.8,4.52,2000 +HD 192433|CD-3017773|PPM 299968|HR 7725|J201550.60-300019.0,f|S|K4,20:15:50.61|33.77,-30:0:19.00|7.7,6.29,2000 +HD 192985|BD+45 3119|HR 7756|J201600.61+453446.2,f|S|F5,20:16:0.61|9.24,45:34:46.29|-54.9,5.87,2000 +HD 192934|BD+38 3977|PPM 84585|HR 7752|J201603.42+385352.8,f|S|A1,20:16:3.43|-1.05,38:53:52.84|-30.7,6.29,2000 +SAO 125628|HD 192699|BD+04 4395|PPM 169681|J201606.00+043450.8,f|S|G7,20:16:6.00|-40.67,4:34:50.86|-51.2,6.43,2000 +Sge 18|HD 192836|BD+21 4130|HR 7746|J201619.78+213555.3,f|S|K1,20:16:19.79|8.09,21:35:55.32|-25.7,6.12,2000 +Cap 3A|HD 192666|SD-12 5680|PPM 237176|HR 7738|J201622.80-122013.6,f|D|B9,20:16:22.81|6.74,-12:20:13.63|-17.1,6.31,2000 +V4434 SGR|SAO 211948|HD 192472|CD-3614011|HR 7728|J201623.61-362712.8,f|D|M4,20:16:23.61|1.69,-36:27:12.87|-15.9,6.39,2000 +HD 192987|BD+36 3978|PPM 84594|HR 7757|J201628.15+370323.0,f|S|B6,20:16:28.15|2.51,37:3:23.02|-0.8,6.47,2000 +Vul 24|HD 192944|BD+24 4075|HR 7753|J201647.08+244015.9,f|S|G8,20:16:47.09|14.45,24:40:15.97|-16.7,5.30,2000 +V12981|BD+39 4114|PPM 59634|HR 7759|J201655.28+402154.2,f|D|K3,20:16:55.29|2.06,40:21:54.27|-1.9,5.25,2000 +HD 193217|BD+42 3670|PPM 59651|HR 7762|J201729.05+424319.4,f|S|K4,20:17:29.06|2.75,42:43:19.42|-1.3,6.29,2000 +HD 193664|BD+66 1281|HR 7783|J201731.32+665113.2,f|S|G3,20:17:31.33|468.51,66:51:13.27|296.8,5.92,2000 +BD+28 3695|J201731.53+290851.2,f|D|G9,20:17:31.53|-9.17,29:8:51.23|22.1,6.26,2000 +Algedi|Prima Giedi|Cap Alpha-5A|V25076|SAO 163422|HD 192876|SD-12 5683|HR 7747|J201738.86-123029.5,f|D|G3,20:17:38.87|22.26,-12:30:29.56|0.8,4.24,2000 +Cyg 34|P CYG|HD 193237|BD+37 3871|PPM 84645|HR 7763|J201747.20+380158.5,f|V|B2,20:17:47.20|-3.54,38:1:58.55|-6.9,4.79,2000 +Cap 4|SAO 189114|HD 192879|SD-22 5384|HR 7748|J201801.39-214835.8,f|S|K0,20:18:1.40|35.37,-21:48:35.86|-24.7,5.86,2000 +Cap Alpha-6A|V25080|SAO 163427|HD 192947|SD-12 5685|Secunda Giedi|Gredi|PPM 237217|HR 7754|J201803.25-123241.4,f|D|G9,20:18:3.26|61.79,-12:32:41.47|2.9,3.58,2000 +V25092|HD 193322|BD+40 4103|HR 7767|J201806.98+404355.4,f|D|O9,20:18:6.99|-2.50,40:43:55.50|-6.5,5.84,2000 +HD 193592|BD+54 2329|PPM 38353|HR 7781|J201824.75+552349.5,f|D|A2,20:18:24.75|-7.58,55:23:49.54|-31.2,5.76,2000 +Cyg 36|HD 193369|BD+36 3998|PPM 84677|HR 7769|J201828.65+365959.2,f|S|A2,20:18:28.66|40.37,36:59:59.29|20.1,5.58,2000 +Cyg 35|V12994|BD+34 3967|PPM 84682|J201839.06+345857.9,f|V|F5,20:18:39.07|0.12,34:58:57.99|-3.8,5.18,2000 +V1773 CYG|HD 193536|BD+45 3139|PPM 59698|HR 7777|J201849.66+461919.8,f|V|B2,20:18:49.67|-4.45,46:19:19.90|-7.9,6.46,2000 +V25083|HD 192827|CD-4813509|HR 7745|J201855.97-474238.7,f|V|M1,20:18:55.98|12.31,-47:42:38.79|-2,6.29,2000 +V25100|HD 193469|BD+38 4003|PPM 84695|J201857.53+390015.0,f|D|K5,20:18:57.54|-2.10,39:0:15.06|-8.1,6.38,2000 +SAO 254772|HD 192531|CP-63 4576|PPM 364527|HR 7732|J201902.99-631350.6,f|S|K0,20:19:3.00|-8.78,-63:13:50.68|-74.4,6.28,2000 +HD 192886|CD-4713340|HR 7749|J201917.85-473449.0,f|S|F5,20:19:17.85|190.83,-47:34:49.04|-182.5,6.13,2000 +Cap Sigma-7A|SAO 163445|SD-19 5776|PPM 237241|HR 7761|J201923.60-190706.7,f|D|K3,20:19:23.60|7.94,-19:7:6.72|-10.9,5.27,2000 +HD 193373|BD+12 4289|PPM 138116|HR 7771|J201929.29+131300.3,f|S|M1,20:19:29.30|-14.89,13:13:0.36|-18.3,6.20,2000 +Dra 71|DE DRA|HD 193964|BD+61 2000|HR 7792|J201936.71+621526.9,f|V|B9,20:19:36.72|16.76,62:15:26.90|24.2,5.72,2000 +SAO 144296|HD 193329|BD-01 3951|HR 7768|J201943.26-010442.6,f|S|K0,20:19:43.26|41.54,-1:4:42.65|32.4,6.05,2000 +V1584 CYG|HD 193722|BD+46 2910|HR 7786|J201956.04+465014.3,f|V|B8,20:19:56.04|-1.64,46:50:14.35|5.8,6.49,2000 +V25101|HD 193472|BD+13 4360|PPM 138134|HR 7774|J202000.18+133253.1,f|V|A5,20:20:0.19|-2.62,13:32:53.13|-4,5.96,2000 +AC DRA|HD 194258|BD+68 1121|J202006.01+685249.1,f|V|M4,20:20:6.01|18.00,68:52:49.14|26.4,5.68,2000 +BD+38 4021|PPM 84739|HR 7784|J202015.21+392411.6,f|D|A1,20:20:15.22|-5.10,39:24:11.62|-22.8,6.22,2000 +HD 193556|BD+14 4263|PPM 138154|HR 7778|J202020.52+143409.3,f|S|G8,20:20:20.52|-3.19,14:34:9.33|6.2,6.17,2000 +HD 193579|BD+17 4294|PPM 138156|J202021.40+174734.5,f|S|K5,20:20:21.41|16.28,17:47:34.54|-30.9,5.82,2000 +HD 193944|BD+53 2384|PPM 38399|HR 7791|J202030.64+533544.4,f|D|K4,20:20:30.64|2.14,53:35:44.47|-2,6.20,2000 +V25094|SAO 246535|CP-55 9365|PPM 348461|HR 7758|J202032.31-550303.1,f|V|M0,20:20:32.32|11.60,-55:3:3.18|-32.4,6.27,2000 +Alshat|Cap Nu-8|SAO 163468|HD 193432|SD-13 5642|PPM 237275|HR 7773|J202039.81-124532.6,f|D|B9,20:20:39.82|15.65,-12:45:32.69|-14.6,4.76,2000 +Cap Beta2|SAO 163471|HD 193452|SD-15 5626|PPM 237281|HR 7775|J202046.54-144705.6,f|D|A0,20:20:46.55|42.64,-14:47:5.61|0.4,6.09,2000 +CD-3614057|HR 7765|J202051.89-354025.2,f|S|K3,20:20:51.90|36.31,-35:40:25.23|19.3,6.47,2000 +Dabih|Cap Beta-9A|V25105|SAO 163481|HD 193495|SD-15 5629|PPM 237293|HR 7776|J202100.67-144652.9,f|D|K0,20:21:0.68|48.44,-14:46:52.92|14,3.09,2000 +V25126|HD 194298|BD+63 1618|PPM 22123|J202111.52+635848.4,f|D|K5,20:21:11.52|6.12,63:58:48.44|14.5,5.69,2000 +SAO 254775|HD 192887|CP-67 3730|PPM 364541|J202128.25-664458.8,f|S|F6,20:21:28.25|-140.21,-66:44:58.88|3.2,6.50,2000 +SAO 246546|CD-5012929|HR 7766|J202141.03-495957.8,f|S|G0,20:21:41.03|-359.84,-49:59:57.90|-250.4,6.26,2000 +BD+40 4136|HR 7795|J202203.05+410755.6,f|S|G5,20:22:3.06|2.49,41:7:55.69|-3.7,6.40,2000 +Vul 25|V25118|HD 193911|BD+23 3986|HR 7789|J202203.43+242645.9,f|V|B8,20:22:3.43|1.91,24:26:45.96|-6.9,5.53,2000 +V13050|HD 194152|BD+45 3152|PPM 59794|HR 7798|J202205.36+454741.9,f|V|K0,20:22:5.37|25.10,45:47:41.98|39.7,5.58,2000 +Sadr|Sador|Sadir|Cyg Gamma-37A|V13048|BD+39 4159|PPM 59799|HR 7796|J202213.70+401524.0,f|D|F8,20:22:13.70|2.40,40:15:24.05|-0.9,2.23,2000 +Sgr Kappa1|HD 193571|CD-4214836|HR 7779|J202227.50-420258.3,f|D|A0,20:22:27.51|32.97,-42:2:58.37|-82,5.58,2000 +BD+30 4005|PPM 84817|HR 7797|J202237.30+311553.8,f|S|K2,20:22:37.31|-8.46,31:15:53.88|-22.6,6.08,2000 +V25127|HD 194193|BD+40 4141|PPM 59815|J202245.29+410133.6,f|V|K7,20:22:45.30|1.24,41:1:33.64|-49.7,5.94,2000 +BD+14 4275|HR 7793|J202252.36+143303.9,f|S|F8,20:22:52.37|78.98,14:33:3.95|-6.9,6.16,2000 +BD+42 3721|J202255.53+425900.7,f|D|K0,20:22:55.53|55.74,42:59:0.76|42.8,6.25,2000 +SAO 144361|HD 193896|SD-10 5369|HR 7788|J202300.79-093916.9,f|S|G5,20:23:0.79|27.06,-9:39:16.96|-16.3,6.30,2000 +SAO 125747|BD+04 4434|PPM 169926|HR 7794|J202310.69+052034.7,f|S|G8,20:23:10.69|-26.88,5:20:34.75|-37.1,5.30,2000 +V2119 CYG|HD 194335|BD+37 3916|PPM 84855|J202344.36+372835.2,f|V|B2,20:23:44.37|5.12,37:28:35.22|0.2,5.87,2000 +Cyg 39|HD 194317|BD+31 4062|PPM 84863|J202351.62+321124.6,f|S|K2,20:23:51.62|35.67,32:11:24.62|-5.8,4.43,2000 +Sgr Kappa2|CD-4214847|HR 7787|J202353.17-422522.3,f|D|A5,20:23:53.18|-11.07,-42:25:22.33|15,5.64,2000 +HD 194668|BD+53 2397|PPM 38458|HR 7815|J202432.36+533306.9,f|S|B9,20:24:32.36|8.29,53:33:6.96|12.6,6.50,2000 +V13064|SAO 125769|HD 194244|BD+00 4495|PPM 169968|J202437.49+010406.2,f|D|B9,20:24:37.50|7.95,1:4:6.26|5.5,6.15,2000 +V25140|SAO 125772|HD 194263|BD+00 4496|PPM 169973|J202441.75+012206.8,f|V|K5,20:24:41.76|5.70,1:22:6.83|-20.1,6.46,2000 +SAO 258856|CP-83 695|PPM 378451|HR 7698|J202454.92-831838.2,f|S|A2,20:24:54.92|23.66,-83:18:38.22|7.5,6.15,2000 +HD 194882|BD+59 2228|PPM 38479|HR 7818|J202505.01+593600.2,f|D|A2,20:25:5.01|1.97,59:36:0.30|-9.7,6.44,2000 +SAO 189264|HD 194215|CD-2917049|PPM 271117|J202526.82-283947.7,f|S|G8,20:25:26.83|11.71,-28:39:47.77|4.1,5.85,2000 +Peacock|Pav Alpha|V13060|SAO 246574|HD 193924|CP-57 9674|PPM 348537|J202538.85-564406.3,f|D|B2,20:25:38.86|7.73,-56:44:6.32|-86.2,1.92,2000 +V25151|HD 194577|BD+20 4559|PPM 111117|HR 7811|J202540.52+212434.7,f|V|G6,20:25:40.53|8.94,21:24:34.71|-8.7,5.69,2000 +SAO 144412|HD 194454|SD-03 4888|J202542.52-024801.3,f|S|K5,20:25:42.52|-4.94,-2:48:1.36|-40,6.10,2000 +V13076|SAO 125797|HD 194526|BD+09 4526|PPM 138328|J202544.11+100321.5,f|V|K5,20:25:44.12|20.97,10:3:21.60|-38.9,6.32,2000 +HD 194184|CD-4114024|PPM 326144|HR 7799|J202547.92-404746.2,f|S|K3,20:25:47.93|-105.38,-40:47:46.26|-86.8,6.09,2000 +HD 194616|BD+19 4408|PPM 138337|HR 7813|J202601.16+195155.7,f|S|K0,20:26:1.17|31.32,19:51:55.78|18.9,6.44,2000 +V25152|HD 194578|BD+13 4390|PPM 138338|J202601.59+135441.8,f|V|K5,20:26:1.60|25.19,13:54:41.80|-27.5,6.37,2000 +HD 194688|BD+16 4259|PPM 138344|HR 7816|J202623.15+171856.0,f|S|K0,20:26:23.15|4.44,17:18:56.01|-5.5,6.23,2000 +BD+56 2421|PPM 38515|HR 7827|J202623.47+563819.3,f|D|B9,20:26:23.47|9.98,56:38:19.31|8.4,6.38,2000 +SAO 212126|HD 194433|CD-3713741|J202652.94-372410.4,f|D|K2,20:26:52.95|-255.12,-37:24:10.46|-114.3,6.36,2000 +Cyg 43|V2121 CYG|BD+48 3128|PPM 59931|HR 7828|J202702.26+492300.1,f|V|F5,20:27:2.27|68.84,49:23:0.12|58.5,5.73,2000 +HD 194951|BD+33 3910|PPM 84973|HR 7823|J202707.77+341944.6,f|S|F1,20:27:7.77|1.49,34:19:44.65|-1.8,6.40,2000 +HD 194841|BD+20 4571|PPM 111169|J202714.18+202835.3,f|S|K0,20:27:14.19|0.56,20:28:35.35|-8.3,6.43,2000 +Cap Pi-10A|SAO 163592|HD 194636|SD-18 5685|PPM 237462|HR 7814|J202719.20-181242.1,f|D|B8,20:27:19.21|10.26,-18:12:42.20|-10.9,5.25,2000 +Cyg 40|BD+37 3941|PPM 84984|HR 7826|J202734.25+382625.1,f|S|A3,20:27:34.26|-23.03,38:26:25.19|-78.6,5.64,2000 +SAO 125841|HD 194937|BD+07 4477|J202807.53+082614.8,f|S|G9,20:28:7.54|40.80,8:26:14.81|16.9,6.23,2000 +Dra 75A|HD 196787|BD+80 659|PPM 3597|J202814.58+812521.7,f|D|G9,20:28:14.59|33.71,81:25:21.75|16.2,5.37,2000 +SAO 125843|HD 194953|BD+02 4175|HR 7824|J202816.79+025613.7,f|S|G8,20:28:16.79|38.95,2:56:13.78|3.7,6.21,2000 +Aql 68|SAO 144468|HD 194939|SD-03 4906|HR 7821|J202824.90-032128.0,f|D|B9,20:28:24.91|27.25,-3:21:28.06|-21.2,6.13,2000 +SAO 163612|HD 194918|SD-16 5609|PPM 237486|HR 7819|J202843.58-154429.3,f|S|K0,20:28:43.59|8.08,-15:44:29.40|-1.2,6.40,2000 +HD 194783|CD-3614166|HR 7817|J202846.73-353545.1,f|S|B8,20:28:46.74|1.71,-35:35:45.11|-20.8,6.09,2000 +Cap Rho-11|SAO 163614|HD 194943|SD-18 5689|PPM 237491|HR 7822|J202851.61-174849.2,f|D|F2,20:28:51.61|-15.85,-17:48:49.27|-7.7,4.80,2000 +BD+83 588|PPM 3599|J202902.94+833731.5,f|S|A3,20:29:2.94|23.43,83:37:31.50|-19.1,6.20,2000 +Cyg 42|HD 195324|BD+35 4141|HR 7835|J202920.39+362717.0,f|S|A1,20:29:20.39|2.53,36:27:17.02|-1.6,5.91,2000 +Cyg 41|V13111|HD 195295|BD+29 4057|HR 7834|J202923.73+302206.7,f|V|F5,20:29:23.74|6.86,30:22:6.80|-0.6,4.01,2000 +V13115|HD 195554|BD+55 2411|PPM 38568|HR 7843|J202927.11+560405.4,f|D|B9,20:29:27.11|4.61,56:4:5.49|4.6,5.90,2000 +Dra 74A|HD 196925|BD+80 660|J202927.56+810528.5,f|D|K0,20:29:27.57|67.06,81:5:28.60|221.7,5.97,2000 +SAO 189345|SD-22 5442|HR 7825|J202931.34-222329.6,f|S|M1,20:29:31.34|8.18,-22:23:29.64|-30.9,6.14,2000 +Cep Theta-2|HD 195725|BD+62 1821|PPM 22214|J202934.88+625938.7,f|S|A7,20:29:34.89|45.02,62:59:38.78|-13.3,4.21,2000 +Aql 69|SAO 144495|HD 195135|SD-03 4918|HR 7831|J202939.00-025307.9,f|S|K2,20:29:39.00|71.91,-2:53:7.91|-22.4,4.91,2000 +Cap Omicron-12A|SAO 163626|SD-19 5831|J202953.90-183459.4,f|D|A3,20:29:53.91|25.59,-18:34:59.44|-79.5,5.91,2000 +V25165|BD+45 3196|HR 7841|J202959.94+455542.8,f|V|K2,20:29:59.94|80.55,45:55:42.80|148.9,6.43,2000 +HD 196142|BD+72 957|HR 7868|J203000.71+723154.1,f|S|K5,20:30:0.72|-0.27,72:31:54.13|-24.4,6.22,2000 +Cyg Omega-45A|V2014 CYG|HD 195556|BD+48 3142|HR 7844|J203003.54+485705.6,f|D|B2,20:30:3.54|10.05,48:57:5.65|7.6,4.95,2000 +Del 1A|V13114|HD 195325|BD+10 4303|PPM 138473|HR 7836|J203017.96+105345.3,f|D|A1,20:30:17.96|19.30,10:53:45.33|3.5,6.06,2000 +SAO 189374|CD-2917122|HR 7832|J203056.80-290645.5,f|S|A5,20:30:56.80|18.48,-29:6:45.59|-6.3,6.35,2000 +HD 195479|BD+20 4602|PPM 111319|HR 7839|J203058.15+203622.1,f|D|A1,20:30:58.16|96.18,20:36:22.13|58.5,6.22,2000 +Cyg 44A|V25167|HD 195593|BD+36 4105|HR 7847|J203059.22+365609.0,f|D|F5,20:30:59.23|-0.24,36:56:9.02|-4.2,6.21,2000 +SAO 163645|SD-15 5696|PPM 237537|HR 7837|J203104.30-150322.2,f|D|G5,20:31:4.31|-39.54,-15:3:22.20|-48,6.12,2000 +Ruchbah|Al Rukbah al Dajajah|Cyg Omega-46|V13128|HD 195774|BD+48 3154|HR 7851|J203118.81+491313.0,f|D|M2,20:31:18.82|8.82,49:13:13.07|-31.3,5.45,2000 +BD+51 2882|HR 7854|J203121.15+521834.2,f|S|K0,20:31:21.15|40.63,52:18:34.29|63.3,6.21,2000 +Dra 73|AF DRA|BD+74 872|HR 7879|J203130.41+745716.6,f|V|A0,20:31:30.41|6.35,74:57:16.63|-16.5,5.19,2000 +BD+33 3938|PPM 85112|J203136.26+341949.3,f|S|F2,20:31:36.26|-6.57,34:19:49.34|-52.6,6.48,2000 +HD 195964|BD+56 2444|PPM 38616|J203146.50+564647.4,f|S|K5,20:31:46.50|-14.79,56:46:47.49|-6.5,6.15,2000 +HD 195692|BD+25 4272|PPM 111352|HR 7849|J203158.21+254817.9,f|D|Am,20:31:58.22|41.32,25:48:17.92|-20,6.37,2000 +SAO 125911|HD 195617|BD+01 4310A|J203220.41+020758.1,f|S|K2,20:32:20.41|29.83,2:7:58.11|1.2,6.47,2000 +SAO 163665|HD 195564|SD-10 5423|HR 7845|J203223.69-095112.1,f|D|G2,20:32:23.70|307.55,-9:51:12.18|106.1,5.66,2000 +SAO 189416|HD 195549|CD-2514854|PPM 271284|HR 7842|J203252.35-245637.7,f|S|A0,20:32:52.36|5.30,-24:56:37.79|-42.9,6.36,2000 +Deneb Dulfim|Deneb el Delphinus|Del Epsilon-2|V13137|BD+10 4321|PPM 138578|HR 7852|J203312.77+111811.7,f|V|B6,20:33:12.77|10.74,11:18:11.75|-28.5,4.04,2000 +SAO 258861|HD 193721|CP-81 901|PPM 378466|HR 7785|J203317.64-805753.5,f|D|G6,20:33:17.64|8.36,-80:57:53.51|-14.9,5.77,2000 +Cyg 47A|V2125 CYG|BD+34 4079|PPM 85166|HR 7866|J203354.18+351503.0,f|D|K2,20:33:54.19|-2.20,35:15:3.06|-5.4,4.65,2000 +V2015 CYG|HD 196178|BD+46 2977|J203354.84+464137.9,f|D|B9,20:33:54.84|9.67,46:41:37.92|1.8,5.78,2000 +Mic Nu|HD 195569|CD-4414020|PPM 326295|HR 7846|J203355.07-443057.7,f|S|K0,20:33:55.07|11.12,-44:30:57.77|-35.7,5.12,2000 +Del Eta-3|V13147|HD 195943|BD+12 4378|HR 7858|J203357.04+130138.1,f|V|A3,20:33:57.04|76.43,13:1:38.12|21.9,5.39,2000 +SAO 125961|BD+04 4486|J203359.92+045355.1,f|S|K0,20:33:59.92|4.78,4:53:55.19|-8.8,6.42,2000 +BD+20 4629|PPM 111418|HR 7862|J203409.98+205906.6,f|S|B3,20:34:9.98|6.72,20:59:6.67|-4.7,6.49,2000 +SAO 163686|HD 195838|SD-14 5781|HR 7855|J203411.69-134315.9,f|S|F6,20:34:11.70|69.22,-13:43:15.93|70.4,6.12,2000 +SAO 212249|HD 195843|CD-3018013|HR 7856|J203447.39-302824.4,f|S|B8,20:34:47.39|12.67,-30:28:24.50|-21.9,6.41,2000 +HD 196379|BD+51 2895|PPM 38659|HR 7876|J203450.40+515115.1,f|S|A9,20:34:50.40|-3.15,51:51:15.20|-5.4,6.19,2000 +SAO 212246|HD 195814|CD-3814108|HR 7853|J203455.47-380523.6,f|S|A8,20:34:55.48|18.65,-38:5:23.60|-11.5,6.45,2000 +SAO 257823|CP-71 2560|PPM 374699|J203506.27-711119.6,f|S|K2,20:35:6.27|-38.55,-71:11:19.60|12.3,6.34,2000 +Del Zeta-4|V13163|BD+14 4353|PPM 138649|HR 7871|J203518.53+144027.1,f|V|A3,20:35:18.54|45.13,14:40:27.17|11.7,4.66,2000 +SAO 163712|SD-17 6027|PPM 237641|HR 7865|J203532.25-163133.1,f|S|A7,20:35:32.26|84.13,-16:31:33.16|-27.6,6.19,2000 +Pav Phi1|SAO 254823|HD 195627|CP-61 6492|PPM 364659|HR 7848|J203534.85-603454.2,f|S|F1,20:35:34.85|70.14,-60:34:54.30|-185.6,4.76,2000 +CD-4414043|PPM 326326|J203547.80-442015.3,f|S|K1,20:35:47.81|-9.87,-44:20:15.38|15.4,6.37,2000 +CP-70 2792|PPM 364663|HR 7838|J203551.72-693638.1,f|S|K2,20:35:51.72|30.73,-69:36:38.11|-44.6,6.09,2000 +Vul 26|HD 196362|BD+25 4299|PPM 111474|HR 7874|J203608.33+255257.5,f|S|A5,20:36:8.34|23.62,25:52:57.53|12,6.41,2000 +SAO 254827|HD 195772|CP-63 4595|PPM 364672|J203638.33-630715.4,f|S|F2,20:36:38.34|10.17,-63:7:15.47|-81.6,6.35,2000 +Aql 70|SAO 144624|HD 196321|SD-03 4961|HR 7873|J203643.63-023259.8,f|S|K4,20:36:43.63|9.14,-2:32:59.85|-16,4.89,2000 +Vul 27|BD+25 4302|PPM 111513|J203704.67+262743.0,f|S|B9,20:37:4.67|16.25,26:27:43.01|-11.4,5.60,2000 +SAO 144632|HD 196426|BD-00 4056|HR 7878|J203718.38+000549.1,f|S|B8,20:37:18.38|5.25,0:5:49.12|-10.1,6.22,2000 +HD 196642|BD+37 4002|PPM 85259|HR 7888|J203723.58+381943.1,f|S|K0,20:37:23.58|13.77,38:19:43.20|-44,6.21,2000 +Cyg 48A|BD+31 4159|PPM 85268|HR 7885|J203731.77+313421.1,f|D|B8,20:37:31.78|8.95,31:34:21.14|-0.6,6.32,2000 +Rotanev|Venator|Del Beta-6A|HD 196524|BD+14 4369|HR 7882|J203732.94+143542.3,f|D|F5,20:37:32.94|119.76,14:35:42.33|-53.6,3.63,2000 +Ind Alpha|HD 196171|CD-4713477|PPM 326349|HR 7869|J203734.03-471729.4,f|D|K0,20:37:34.03|49.24,-47:17:29.41|66.1,3.11,2000 +Pav Rho|Rho Piscis Austrini|SAO 254835|HD 195961|CP-61 6495|PPM 364685|HR 7859|J203735.31-613147.7,f|S|F5,20:37:35.31|59.13,-61:31:47.71|-71.7,4.86,2000 +Del Iota-5|HD 196544|BD+10 4339|HR 7883|J203749.11+112239.6,f|S|A2,20:37:49.12|40.00,11:22:39.63|-8.5,5.43,2000 +HD 196385|CD-2514920|HR 7877|J203752.22-250633.1,f|S|F0,20:37:52.23|72.80,-25:6:33.19|-15.4,6.38,2000 +EU DEL|BD+17 4370|PPM 138735|HR 7886|J203754.72+181606.8,f|V|M6,20:37:54.73|36.18,18:16:6.89|61.2,6.22,2000 +V25170|SAO 258864|HD 194612|CP-81 906|PPM 378486|HR 7812|J203818.60-811720.6,f|V|K5,20:38:18.61|0.59,-81:17:20.63|-38.2,5.92,2000 +Aql 71|V13187|SAO 144649|HD 196574|BD-01 4016|HR 7884|J203820.28-010618.4,f|D|G7,20:38:20.28|15.60,-1:6:18.43|-17,4.31,2000 +Vul 29|HD 196724|BD+20 4658|PPM 111575|HR 7891|J203831.33+211204.2,f|S|A0,20:38:31.34|74.40,21:12:4.22|-2.5,4.81,2000 +Vul 28|BD+23 4084|PPM 111576|HR 7894|J203831.91+240657.4,f|S|B5,20:38:31.91|9.99,24:6:57.45|-7.8,5.06,2000 +HD 196753|BD+23 4085|PPM 111582|HR 7895|J203834.99+234049.7,f|S|K0,20:38:34.99|4.12,23:40:49.78|-5.3,5.94,2000 +Del Theta-8|HD 196725|BD+12 4411|PPM 138761|HR 7892|J203843.98+131854.4,f|S|K3,20:38:43.99|2.63,13:18:54.45|-0.4,5.69,2000 +HD 196852|BD+29 4121|J203859.51+302003.3,f|S|K2,20:38:59.52|-27.45,30:20:3.35|-65.5,5.68,2000 +BD+55 2444|PPM 38729|HR 7916|J203900.18+560017.4,f|S|F2,20:39:0.18|-5.54,56:0:17.46|-40.8,6.44,2000 +HD 196775|BD+15 4220|PPM 138768|HR 7899|J203904.96+155017.5,f|D|B3,20:39:4.97|-2.31,15:50:17.52|-15.1,5.98,2000 +SAO 144663|HD 196676|SD-05 5335|J203905.86-045546.1,f|S|K0,20:39:5.86|-1.64,-4:55:46.18|4.5,6.46,2000 +Del Kappa-7A|HD 196755|BD+09 4600|PPM 138772|HR 7896|J203907.78+100510.3,f|D|G2,20:39:7.78|323.57,10:5:10.33|21.1,5.07,2000 +V13201|HD 196821|BD+21 4305|PPM 111595|J203910.64+214902.8,f|V|A0,20:39:10.65|30.22,21:49:2.80|15.9,6.08,2000 +SAO 144666|HD 196712|SD-02 5328|J203913.25-022446.7,f|S|B7,20:39:13.25|8.09,-2:24:46.71|3.3,6.23,2000 +Tau Cap|Cap Tau-14A|SAO 163771|HD 196662|SD-15 5743|PPM 237734|HR 7889|J203916.31-145717.1,f|D|B6,20:39:16.32|2.61,-14:57:17.14|-19.7,5.26,2000 +Aqr 1A|HD 196758|BD-00 4064|HR 7897|J203924.89+002911.2,f|D|K1,20:39:24.89|103.05,0:29:11.20|-19.4,5.15,2000 +V2130 CYG|BD+40 4266|HR 7911|J203933.30+403445.9,f|D|B6,20:39:33.31|7.41,40:34:45.91|-1.5,6.11,2000 +Sualocin|Nicolaus|Del Alpha-9A|V13207|HD 196867|BD+15 4222|J203938.28+155443.4,f|D|B9,20:39:38.29|52.80,15:54:43.49|9.7,3.78,2000 +SAO 254844|HD 196317|CP-63 4602|HR 7872|J203951.75-625428.0,f|S|K1,20:39:51.76|32.31,-62:54:28.09|-83.9,6.22,2000 +HD 196885|BD+10 4351|PPM 138799|J203951.87+111458.7,f|D|F8,20:39:51.88|47.52,11:14:58.74|83.1,6.39,2000 +Pav Phi2|SAO 254846|HD 196378|CP-60 7419|HR 7875|J204002.63-603256.0,f|S|F8,20:40:2.64|312.93,-60:32:56.01|-569,5.12,2000 +Cap Upsilon-15|SAO 163779|HD 196777|SD-18 5738|PPM 237756|J204002.94-180819.1,f|S|M2,20:40:2.94|-22.81,-18:8:19.17|-21.6,5.15,2000 +HD 197139|BD+42 3818|HR 7919|J204003.15+432731.9,f|S|K2,20:40:3.16|-69.47,43:27:31.96|-56.7,5.98,2000 +SAO 189549|HD 196761|CD-2416193|PPM 271457|HR 7898|J204011.75-234625.9,f|S|G7,20:40:11.76|500.90,-23:46:25.92|460.8,6.36,2000 +HD 197373|BD+59 2272|HR 7925|J204017.89+603018.9,f|S|F6,20:40:17.89|13.74,60:30:18.95|185.7,6.02,2000 +SAO 212333|HD 196737|CD-3315119|HR 7893|J204019.82-332554.6,f|S|K1,20:40:19.83|22.91,-33:25:54.63|35.9,5.47,2000 +SAO 163783|HD 196857|SD-16 5663|PPM 237762|J204032.51-160727.0,f|S|G5,20:40:32.52|-68.16,-16:7:27.05|73.9,5.79,2000 +BD+29 4131|PPM 111653|HR 7917|J204036.27+294819.9,f|D|A2,20:40:36.28|20.56,29:48:19.99|43.1,6.03,2000 +BD+19 4484|HR 7914|J204045.14+195607.9,f|D|G5,20:40:45.14|119.15,19:56:7.93|312.3,6.43,2000 +HD 196748|CD-4215029|PPM 326395|J204055.62-422348.0,f|D|G6,20:40:55.62|15.07,-42:23:48.08|11.1,6.26,2000 +HD 197226|BD+38 4187|PPM 85347|HR 7922|J204100.36+390456.3,f|D|B6,20:41:0.36|5.47,39:4:56.36|-0.2,6.50,2000 +Cyg 49A|HD 197177|BD+31 4181A|HR 7921|J204102.54+321826.2,f|D|G8,20:41:2.54|2.92,32:18:26.23|-11.8,5.51,2000 +Del 10|V13227|HD 197121|BD+14 4393|PPM 138833|HR 7918|J204116.20+143458.3,f|V|K5,20:41:16.21|-8.56,14:34:58.37|0.4,6.01,2000 +SAO 212345|HD 196917|CD-3216130|J204123.65-313553.8,f|S|M0,20:41:23.66|110.90,-31:35:53.84|-60.4,5.76,2000 +SAO 189575|HD 196947|CD-2615192|PPM 271487|J204124.26-255959.6,f|S|K2,20:41:24.26|9.44,-25:59:59.68|-25.1,6.29,2000 +AV MIC|HD 196829|CD-4215034|J204124.66-420801.6,f|V|M3,20:41:24.67|48.94,-42:8:1.61|-33.2,6.33,2000 +Deneb|Deneb Cygni|Deneb el Adige|Arided|Aridif|Gallina|Arrioph|Cyg Alpha-50|Alpha Cygni|HD 197345|BD+44 3541|HR 7924|J204125.91+451649.2,f|D|A2,20:41:25.91|1.58,45:16:49.22|1.6,1.33,2000 +Oct Mu2|SAO 257836|CP-75 1644A|PPM 374746|HR 7864|J204144.09-752102.8,f|D|G5,20:41:44.09|151.44,-75:21:2.89|-161.5,6.44,2000 +HD 197392|BD+41 3856|HR 7926|J204156.50+414300.7,f|S|B8,20:41:56.50|4.03,41:43:0.75|1.1,5.68,2000 +Pav Upsilon|V13208|SAO 254854|HD 196519|CP-67 3754|PPM 364728|HR 7881|J204157.07-664538.4,f|V|B9,20:41:57.08|8.88,-66:45:38.45|-23.2,5.15,2000 +LU DEL|HD 197249|BD+17 4382|PPM 138856|HR 7923|J204158.16+173117.3,f|V|G8,20:41:58.17|16.59,17:31:17.36|43.1,6.24,2000 +Oct Mu1|SAO 257838|CP-76 1434|PPM 374751|HR 7863|J204202.98-761050.1,f|S|F4,20:42:2.99|190.83,-76:10:50.13|-9.4,5.99,2000 +Cyg 51A|HD 197511|BD+49 3353|PPM 38783|HR 7929|J204212.62+502024.1,f|D|B2,20:42:12.63|1.15,50:20:24.11|3.7,5.41,2000 +Dra 76|V13319|BD+81 718|PPM 3641|J204235.23+823152.1,f|V|A0,20:42:35.24|30.77,82:31:52.17|21.7,5.75,2000 +HD 197734|BD+60 2154|HR 7938|J204239.68+603604.7,f|S|A2,20:42:39.69|-3.83,60:36:4.74|-18.9,6.17,2000 +SAO 212369|CD-4013994|HR 7915|J204252.96-393331.7,f|S|K1,20:42:52.96|17.81,-39:33:31.79|-8.1,6.29,2000 +Cep 4|BD+66 1318|PPM 22346|HR 7945|J204311.02+663926.8,f|S|A8,20:43:11.02|25.14,66:39:26.81|34.7,5.59,2000 +V0379 CEP|BD+56 2477|J204313.68+570650.3,f|V|B2,20:43:13.68|-2.36,57:6:50.39|-3.4,6.34,2000 +X CYG|HD 197572|BD+35 4234|PPM 85419|HR 7932|J204324.19+353516.0,f|V|F7,20:43:24.19|-5.98,35:35:16.09|-3.3,6.48,2000 +Del Delta-11|Delta Delphini|HD 197461|BD+14 4403|HR 7928|J204327.53+150428.4,f|S|A7,20:43:27.53|-19.55,15:4:28.49|-41.7,4.43,2000 +Ind Eta|HD 197157|CP-5211752|PPM 348821|J204402.33-515515.4,f|S|A7,20:44:2.33|155.51,-51:55:15.49|-53.6,4.52,2000 +V0414 CEP|HD 197939|BD+55 2462|PPM 38823|HR 7944|J204422.05+562918.2,f|V|M3,20:44:22.05|9.86,56:29:18.26|-1.6,5.94,2000 +HD 198236|BD+69 1127|PPM 22363|HR 7967|J204433.03+694506.5,f|S|G8,20:44:33.03|-28.45,69:45:6.53|-36.1,6.50,2000 +Vul 30|HD 197752|BD+24 4229|HR 7939|J204452.50+251614.2,f|S|K1,20:44:52.51|-27.81,25:16:14.22|-177.6,4.92,2000 +Pav Beta|SAO 254862|CP-66 3501|PPM 364757|HR 7913|J204457.49-661211.5,f|S|A7,20:44:57.49|-42.43,-66:12:11.56|10.6,3.42,2000 +SAO 189641|CD-2715014|PPM 271564|HR 7931|J204513.12-271450.2,f|S|G8,20:45:13.12|-0.67,-27:14:50.21|7.4,6.50,2000 +Cep Eta-3|HD 198149|BD+61 2050|PPM 22372|HR 7957|J204517.37+615019.6,f|D|K0,20:45:17.38|86.08,61:50:19.61|818,3.42,2000 +BD+57 2240|HR 7955|J204521.12+573447.0,f|D|F8,20:45:21.13|-62.97,57:34:47.01|-235.6,4.52,2000 +Cyg 52|HD 197912|BD+30 4167|HR 7942|J204539.75+304310.9,f|D|K0,20:45:39.75|-7.99,30:43:10.97|24,4.23,2000 +Cap Psi-16|SAO 189664|HD 197692|CD-2515018|HR 7936|J204605.73-251615.2,f|S|F4,20:46:5.73|-51.41,-25:16:15.23|-156.7,4.15,2000 +Cap 17|SAO 189667|HD 197725|SD-22 5523|PPM 271593|HR 7937|J204609.98-213050.5,f|S|A0,20:46:9.99|23.44,-21:30:50.52|-17,5.91,2000 +Gienah Cygni|Cyg Epsilon-53A|HD 197989|BD+33 4018|PPM 85489|HR 7949|J204612.68+335812.9,f|D|K0,20:46:12.68|356.15,33:58:12.92|330.3,2.49,2000 +SAO 212417|HD 197649|CD-3614396|HR 7935|J204618.60-360712.5,f|S|F3,20:46:18.61|40.23,-36:7:12.55|-52.1,6.49,2000 +SAO 212416|CD-3913960|HR 7933|J204620.06-391157.3,f|S|B8,20:46:20.06|42.66,-39:11:57.34|-30.1,5.48,2000 +HD 198181|BD+52 2799|PPM 38855|HR 7962|J204621.20+525943.0,f|S|K0,20:46:21.20|-81.52,52:59:43.07|-104.5,6.35,2000 +HD 198151|BD+45 3270|HR 7958|J204638.59+463154.0,f|D|A3,20:46:38.59|-16.20,46:31:54.09|-14.8,6.31,2000 +Del Gamma-12B|HD 197963|BD+15 4255B|HR 7947|J204638.86+160726.8,f|D|F7,20:46:38.86|-6.05,16:7:26.88|-201.7,5.09,2000 +Del Gamma-12A|HD 197964|BD+15 4255A|PPM 138996|HR 7948|J204639.50+160727.4,f|D|K1,20:46:39.50|-25.94,16:7:27.47|-196.3,4.26,2000 +V25331|HD 197954|SD-03 5018|HR 7946|J204703.56-022912.8,f|V|K2,20:47:3.56|-19.78,-2:29:12.88|-21.5,6.28,2000 +T CYG|HD 198134|BD+33 4028|PPM 85521|HR 7956|J204710.75+342226.8,f|D|K3,20:47:10.75|39.25,34:22:26.84|8.2,4.93,2000 +V25337|HD 198237|BD+45 3275|HR 7966|J204720.76+453447.7,f|D|K3,20:47:20.77|4.20,45:34:47.76|-22.4,6.42,2000 +Cyg Lambda-54A|Lambda Cygni|HD 198183|BD+35 4267|PPM 85526|HR 7963|J204724.53+362926.5,f|D|B5,20:47:24.54|14.95,36:29:26.58|-8.2,4.57,2000 +V13369|HD 199437|BD+80 672|PPM 3655|J204733.45+803308.1,f|V|K1,20:47:33.46|-28.02,80:33:8.14|-36.9,5.36,2000 +Albali|Al Bali|Aqr Epsilon-2|SD-10 5506|J204740.55-092944.7,f|S|A1,20:47:40.55|31.96,-9:29:44.79|-35.3,3.77,2000 +Aqr 3|EN AQR|SAO 144814|SD-05 5378|HR 7951|J204744.23-050139.7,f|V|M3,20:47:44.24|-3.29,-5:1:39.72|-40.2,4.46,2000 +SAO 126221|BD+02 4250|HR 7954|J204747.87+031823.2,f|S|A0,20:47:47.88|37.74,3:18:23.28|9.7,6.39,2000 +Del 13|V13299|SAO 126222|BD+05 4613|HR 7953|J204748.33+060029.5,f|D|A0,20:47:48.33|8.80,6:0:29.55|-13,5.62,2000 +HD 198345|BD+47 3188|HR 7969|J204749.28+474954.7,f|D|K5,20:47:49.29|-8.66,47:49:54.73|-17.6,5.60,2000 +HD 198387|BD+51 2954|PPM 38879|HR 7972|J204752.96+522425.8,f|D|G7,20:47:52.96|72.02,52:24:25.80|-169.7,6.29,2000 +CD-4414143|PPM 326542|J204818.43-441148.5,f|S|K2,20:48:18.43|94.85,-44:11:48.59|-53.3,6.49,2000 +Mic Iota|HD 197937|CD-4414145|PPM 326547|HR 7943|J204829.14-435918.7,f|D|F1,20:48:29.14|175.80,-43:59:18.76|-112.2,5.11,2000 +HD 198513|BD+51 2957|HR 7978|J204842.74+515437.1,f|D|B8,20:48:42.74|6.38,51:54:37.19|2.4,6.38,2000 +Cyg 55|V1661 CYG|HD 198478|BD+45 3291|HR 7977|J204856.29+460650.8,f|D|B3,20:48:56.29|-2.91,46:6:50.88|-2.6,4.86,2000 +IQ AQR|SAO 144841|HD 198272|BD-01 4057|J204917.23-003348.0,f|V|M3,20:49:17.24|-26.70,-0:33:48.01|-25.4,6.35,2000 +V25362|HD 198781|BD+63 1663|HR 7993|J204917.38+640232.1,f|V|B0,20:49:17.39|-4.01,64:2:32.13|-4.8,6.46,2000 +SAO 189733|HD 198174|CD-2615282|PPM 271674|HR 7961|J204917.61-254652.4,f|S|B7,20:49:17.61|12.83,-25:46:52.46|-18.6,5.86,2000 +Pav Sigma|SAO 254871|HD 197635|CP-69 3138|PPM 364785|HR 7934|J204918.17-684635.4,f|S|K0,20:49:18.17|-64.56,-68:46:35.48|-49.8,5.41,2000 +SD-18 5783|PPM 237966|HR 7964|J204920.54-180209.0,f|D|K3,20:49:20.54|0.14,-18:2:9.08|-33.5,6.21,2000 +Ind Zeta|CD-4613718|PPM 326564|HR 7952|J204928.96-461336.5,f|S|K5,20:49:28.96|37.88,-46:13:36.57|27.3,4.89,2000 +Del 15A|BD+12 4472|HR 7973|J204937.76+123242.4,f|D|F5,20:49:37.77|54.03,12:32:42.46|97.5,6.01,2000 +Del 14|V13337|SAO 126265|HD 198391|BD+07 4556|HR 7974|J204948.26+075151.0,f|V|A1,20:49:48.26|26.15,7:51:51.07|12.4,6.32,2000 +V2136 CYG|HD 198625|BD+46 3067|HR 7983|J204954.64+463940.8,f|D|B4,20:49:54.65|4.53,46:39:40.81|3.9,6.34,2000 +Mic Alpha|V13329|SAO 212472|HD 198232|CD-3414660|HR 7965|J204958.08-334647.0,f|D|G7,20:49:58.08|3.74,-33:46:47.00|-20.2,4.90,2000 +SAO 126267|BD+05 4626|HR 7975|J204959.09+053240.4,f|D|K0,20:49:59.10|43.15,5:32:40.41|1,6.20,2000 +Cyg 56A|V25361|HD 198639|BD+43 3739|HR 7984|J205004.93+440333.4,f|D|A4,20:50:4.93|122.67,44:3:33.49|132.3,5.07,2000 +SAO 163924|HD 198431|SD-13 5773|PPM 237993|HR 7976|J205041.77-123241.6,f|S|K5,20:50:41.78|127.09,-12:32:41.66|-72.4,5.87,2000 +SAO 212487|HD 198356|CD-3216236|J205047.14-320316.5,f|S|K5,20:50:47.15|-8.26,-32:3:16.57|-63.3,6.41,2000 +SAO 212488|HD 198357|CD-3814250|HR 7971|J205100.75-375447.9,f|S|K3,20:51:0.76|-6.75,-37:54:47.99|-17.2,5.51,2000 +Aqr 4A|V13350|SAO 144877|HD 198571|SD-06 5604|HR 7982|J205125.74-053735.8,f|D|F5,20:51:25.75|95.84,-5:37:35.88|1.3,6.07,2000 +T VUL|HD 198726|BD+27 3890|HR 7988|J205128.23+281501.8,f|V|F5,20:51:28.24|3.96,28:15:1.82|-5.5,5.61,2000 +Ind Iota|SAO 246762|CP-5211782|PPM 348897|HR 7968|J205130.04-513629.4,f|S|K1,20:51:30.05|-0.28,-51:36:29.44|-5,5.06,2000 +SAO 254883|CP-62 6180A|PPM 364811|HR 7959|J205138.50-622545.6,f|D|A2,20:51:38.51|83.03,-62:25:45.61|-49.4,6.26,2000 +SAO 254884|HD 198161|CP-62 6180B|PPM 364811|J205138.85-622545.2,f|D|A2,20:51:38.86|82.06,-62:25:45.28|-45.4,6.48,2000 +Cap Omega-18|V13351|SAO 189781|HD 198542|CD-2715082|PPM 271732|J205149.29-265508.8,f|V|M0,20:51:49.29|-8.02,-26:55:8.88|-2.5,4.11,2000 +Mic Beta|SAO 212499|HD 198529|CD-3315245|HR 7979|J205158.76-331040.7,f|S|A2,20:51:58.76|7.16,-33:10:40.71|-5.6,6.06,2000 +BD+32 3974|PPM 85644|HR 7996|J205200.38+325056.0,f|S|B3,20:52:0.39|0.25,32:50:56.02|-8.7,6.42,2000 +Vul 31|V13373|BD+26 4017|HR 7995|J205207.67+270549.1,f|V|G7,20:52:7.68|-72.38,27:5:49.13|-61,4.57,2000 +Aqr 5|V13360|SAO 144889|HD 198667|SD-06 5606|HR 7985|J205208.69-053025.4,f|V|B9,20:52:8.69|1.19,-5:30:25.41|-6.2,5.55,2000 +Aqr Mu-6|SAO 144895|HD 198743|SD-09 5598|J205239.23-085859.9,f|D|A3,20:52:39.23|47.11,-8:58:59.94|-32.9,4.72,2000 +HD 198732|CD-2416328|PPM 271757|HR 7989|J205301.15-234659.5,f|D|K0,20:53:1.16|84.14,-23:46:59.53|-62.7,6.42,2000 +SAO 163953|SD-12 5854|HR 7994|J205305.59-113425.1,f|S|G1,20:53:5.60|40.41,-11:34:25.17|42.3,6.39,2000 +HD 198976|BD+29 4221|HR 7999|J205307.36+293856.7,f|S|K2,20:53:7.37|-4.82,29:38:56.75|-64.6,6.36,2000 +Cyg 57|V13388|BD+43 3755|J205314.75+442314.1,f|V|B5,20:53:14.75|11.26,44:23:14.14|-2.4,4.79,2000 +V13391|BD+44 3617|J205318.56+451054.0,f|V|K0,20:53:18.57|8.56,45:10:54.02|-4.4,5.46,2000 +SAO 212521|HD 198751|CD-3117917|HR 7991|J205324.96-304308.2,f|S|K1,20:53:24.96|34.17,-30:43:8.23|-18.4,6.35,2000 +SAO 212522|HD 198716|CD-4014078|HR 7987|J205340.18-394835.5,f|S|K2,20:53:40.19|44.25,-39:48:35.51|-97.2,5.34,2000 +V25388|BD+32 3980|PPM 85697|J205353.89+332616.4,f|D|K5,20:53:53.89|-20.65,33:26:16.41|34,5.47,2000 +SAO 144915|HD 198949|SD-07 5433|HR 7998|J205358.38-065322.0,f|S|F1,20:53:58.39|26.21,-6:53:22.06|-22.3,6.44,2000 +BY MIC|SAO 189815|HD 198853|CD-2816975|PPM 271775|HR 7997|J205406.56-275530.8,f|V|M4,20:54:6.57|-11.66,-27:55:30.86|-17.2,6.41,2000 +Vul 32|V13398|HD 199169|BD+27 3911|J205433.63+280327.4,f|V|K4,20:54:33.64|0.13,28:3:27.44|-4.2,5.00,2000 +SAO 246786|HD 198766|CD-5112748|HR 7992|J205435.10-504338.4,f|S|B5,20:54:35.11|10.73,-50:43:38.43|-15.9,6.23,2000 +BD+75 764|J205444.34+755532.0,f|S|G5,20:54:44.35|30.93,75:55:32.05|42.3,6.00,2000 +Cap 19|SAO 163975|SD-18 5805|J205447.81-175522.4,f|S|K0,20:54:47.82|-58.94,-17:55:22.42|-17,5.78,2000 +Ind Beta|SAO 246784|CP-58 7788|PPM 348943|HR 7986|J205448.60-582714.9,f|D|K1,20:54:48.60|21.03,-58:27:14.96|-24.8,3.65,2000 +Del 17|V13408|HD 199253|BD+13 4572|PPM 139287|J205536.69+134317.5,f|V|K0,20:55:36.69|18.36,13:43:17.53|-11.5,5.19,2000 +Del 16|HD 199254|BD+12 4501|J205538.57+123406.8,f|D|A4,20:55:38.57|31.18,12:34:6.81|21.1,5.54,2000 +SAO 126373|HD 199223|BD+03 4461|J205540.67+043157.8,f|D|G6,20:55:40.68|61.01,4:31:57.80|11.3,6.25,2000 +V2140 CYG|HD 199478|BD+46 3111|J205549.80+472503.5,f|V|B8,20:55:49.80|-2.84,47:25:3.56|-3.7,5.72,2000 +V25406|HD 199661|BD+56 2515|J205617.01+565315.0,f|V|B2,20:56:17.01|4.67,56:53:15.07|4.9,6.22,2000 +HD 199611|BD+50 3233|J205625.47+504342.9,f|D|F0,20:56:25.48|40.35,50:43:42.95|-21.2,5.84,2000 +HD 199612|BD+48 3249|J205625.89+491145.0,f|S|G8,20:56:25.90|11.37,49:11:45.05|6.8,5.92,2000 +HD 199579|BD+44 3639|J205634.77+445528.9,f|S|O6,20:56:34.78|-0.21,44:55:29.00|-2.2,5.97,2000 +V13412|SAO 189856|CD-2615344|PPM 271828|J205647.33-261746.9,f|V|F7,20:56:47.33|95.08,-26:17:46.96|-65.1,5.70,2000 +Aqr 7A|V13419|SAO 144968|HD 199345|SD-10 5553|J205654.02-094151.1,f|D|K5,20:56:54.03|-3.55,-9:41:51.16|-11.5,5.48,2000 +Cyg Nu-58|HD 199629|BD+40 4364|J205710.41+411001.7,f|S|A1,20:57:10.42|8.47,41:10:1.71|-24,3.94,2000 +SAO 126396|HD 199442|BD-00 4132|J205710.57+002749.6,f|D|K2,20:57:10.58|11.85,0:27:49.61|-63,6.06,2000 +HD 199443|SD-16 5741|PPM 238146|J205740.64-160153.5,f|S|A2,20:57:40.64|51.32,-16:1:53.54|1.7,5.88,2000 +Vul 33|HD 199697|BD+21 4424|J205816.35+221933.2,f|S|K3,20:58:16.35|-2.64,22:19:33.27|-4.1,5.29,2000 +BD+43 3777|J205819.46+442818.1,f|S|K0,20:58:19.46|101.58,44:28:18.16|69.7,5.56,2000 +Del 18A|HD 199665|BD+10 4425|PPM 139372|J205825.93+105021.4,f|D|G5,20:58:25.93|-48.03,10:50:21.43|-34.4,5.52,2000 +HD 199955|BD+49 3426|J205830.03+502742.4,f|D|B5,20:58:30.03|9.84,50:27:42.45|3.4,5.59,2000 +HD 199892|BD+41 3949|J205830.95+415623.7,f|S|B7,20:58:30.95|11.60,41:56:23.73|0.2,6.17,2000 +DV AQR|SD-15 5848|PPM 238168|J205841.84-142859.2,f|V|F0,20:58:41.84|-54.61,-14:28:59.26|-19.3,5.96,2000 +Equ Epsilon-1A|SAO 126428|HD 199766|BD+03 4473A|J205904.41+041736.7,f|D|F6,20:59:4.42|-113.38,4:17:36.78|-150.3,5.40,2000 +BD+41 3956|J205924.61+421928.0,f|S|B9,20:59:24.62|16.64,42:19:28.08|6.5,6.48,2000 +BD+58 2201|J205925.38+592618.9,f|S|K5,20:59:25.38|44.62,59:26:18.94|15.4,5.53,2000 +Cap 20|AO CAP|HD 199728|SD-19 5982|PPM 238194|J205936.13-190207.0,f|V|B9,20:59:36.14|8.79,-19:2:7.02|-20.8,6.27,2000 +Cyg 59A|V0832 CYG|BD+46 3133|J205949.55+473115.4,f|D|B1,20:59:49.56|7.29,47:31:15.41|2.5,4.76,2000 +HD 199684|CD-3614530|J205959.69-360746.7,f|S|F5,20:59:59.69|103.83,-36:7:46.71|-58.2,6.10,2000 +SAO 126447|HD 199942|BD+06 4718|J210003.98+073058.3,f|D|F1,21:0:3.98|48.03,7:30:58.31|7,5.99,2000 +HD 199623|CD-5112778|J210021.48-511555.1,f|S|F5,21:0:21.48|-88.51,-51:15:55.12|132.6,5.77,2000 +V13454|BD+18 4675|PPM 139436|J210027.68+191946.4,f|D|M3,21:0:27.69|-16.99,19:19:46.49|-59.7,5.71,2000 +Aqr 11|SD-05 5433|J210033.84-044348.9,f|S|G1,21:0:33.84|47.69,-4:43:48.94|-138.8,6.21,2000 +SAO 246824|HD 199642|CP-54 9785|J210043.42-534420.6,f|S|K5,21:0:43.42|13.31,-53:44:20.65|-23,6.27,2000 +HD 199947|SD-18 5831|PPM 238231|J210051.76-173151.2,f|S|K3,21:0:51.77|-31.04,-17:31:51.23|-17.4,6.06,2000 +Cyg 60|V1931 CYG|BD+45 3364|J210110.92+460920.7,f|D|B1,21:1:10.93|6.13,46:9:20.78|3.4,5.43,2000 +BD+35 4357|PPM 85878|J210112.86+360133.6,f|S|G5,21:1:12.86|-3.88,36:1:33.63|-6.4,6.00,2000 +Mic Gamma|V25422|SAO 212636|HD 199951|CD-3216353|J210117.46-321527.9,f|D|G6,21:1:17.46|-2.16,-32:15:27.96|-0.2,4.67,2000 +SAO 254918|HD 199475|CP-68 3398|J210128.00-681234.5,f|S|A2,21:1:28.01|-15.54,-68:12:34.53|5.3,6.36,2000 +SAO 189942|CD-2715197|PPM 271944|J210145.27-265251.5,f|S|A7,21:1:45.28|15.25,-26:52:51.58|-24.7,6.05,2000 +BD+56 2524|J210209.00+564010.6,f|D|B8,21:2:9.01|9.73,56:40:10.61|1.1,5.83,2000 +V25434|BD+38 4321|AG+39 2226|J210220.95+393032.5,f|D|K3,21:2:20.96|1.97,39:30:32.52|1.1,6.46,2000 +V1981 CYG|BD+44 3679|J210224.19+444727.5,f|V|M4,21:2:24.20|-6.07,44:47:27.53|-4.2,6.25,2000 +SAO 212653|CD-3914079|J210227.16-383151.4,f|S|K0,21:2:27.17|154.89,-38:31:51.49|-169.5,5.95,2000 +BD+45 3374|J210248.61+455056.0,f|D|B3,21:2:48.62|2.51,45:50:56.00|-3.9,6.50,2000 +Mic Zeta|SAO 212666|CD-3914089|J210257.95-383753.2,f|S|F3,21:2:57.95|-27.89,-38:37:53.21|-108.8,5.33,2000 +BD-01 4095|PPM 181169|J210259.62-005529.0,f|S|B6,21:2:59.63|7.20,-0:55:29.08|1.1,6.50,2000 +V25437|BD+14 4518|PPM 139517|J210301.79+144348.0,f|V|M1,21:3:1.79|25.68,14:43:48.09|4.8,6.34,2000 +SAO 126491|BD+00 4648|J210303.02+013155.4,f|D|F5,21:3:3.02|-110.51,1:31:55.42|-53,6.44,2000 +BD+38 4325|PPM 85924|J210304.83+383926.6,f|S|G8,21:3:4.84|18.51,38:39:26.69|-6.1,6.09,2000 +SAO 189966|CD-2817077|PPM 271972|J210310.19-274353.7,f|D|K0,21:3:10.19|35.18,-27:43:53.77|-36.4,6.25,2000 +BD+49 3448|J210326.09+502106.8,f|S|K0,21:3:26.09|64.51,50:21:6.89|45.8,6.37,2000 +BD+46 3159|J210343.46+465147.3,f|S|F0,21:3:43.47|-38.97,46:51:47.34|-57.6,6.33,2000 +BD+52 2859|J210347.62+531709.2,f|S|K0,21:3:47.63|42.15,53:17:9.24|32.1,5.92,2000 +BD+41 3987|J210352.13+413741.4,f|D|F3,21:3:52.14|-2.24,41:37:41.43|-53.3,6.33,2000 +Aqr 12A|SD-06 5664A|J210404.72-054923.0,f|D|G4,21:4:4.72|20.89,-5:49:23.04|-7,5.74,2000 +Cap Eta-22|SAO 189986|SD-20 6115|PPM 238322|J210424.30-195117.9,f|D|A5,21:4:24.30|-39.08,-19:51:17.97|-24.5,4.85,2000 +Equ 3|SAO 126518|BD+04 4606|PPM 171225|J210434.65+053010.3,f|D|K5,21:4:34.65|14.18,5:30:10.30|0.5,5.61,2000 +SAO 126519|BD+02 4297|PPM 171229|J210441.64+025632.1,f|S|K0,21:4:41.64|12.43,2:56:32.19|5.8,6.42,2000 +Oct Alpha|Alpha Octantis|SAO 257879|HD 199532|CP-77 1474|PPM 374864|J210443.06-770125.5,f|S|A7,21:4:43.06|13.84,-77:1:25.56|-369.4,5.13,2000 +SAO 126522|BD+01 4418|PPM 171234|J210445.37+021611.1,f|S|G5,21:4:45.38|94.58,2:16:11.18|-66.1,6.35,2000 +Cyg Xi-62|V13518|BD+43 3800|J210455.86+435540.2,f|V|K4,21:4:55.86|8.64,43:55:40.27|0.4,3.71,2000 +Ind Mu|SAO 246854|CP-55 9509|J210514.24-544337.3,f|S|K2,21:5:14.25|16.54,-54:43:37.35|-37.6,5.17,2000 +Equ 4|SAO 126535|BD+05 4697|PPM 171253|J210526.72+055729.5,f|D|F8,21:5:26.72|-117.41,5:57:29.52|-119.1,5.96,2000 +BD+77 800|HR 8112|J210529.26+780735.0,f|S|B8,21:5:29.26|19.04,78:7:35.01|28.7,5.92,2000 +Cap Theta-23|SAO 164132|SD-17 6174|PPM 238364|J210556.82-171358.2,f|S|A1,21:5:56.83|79.66,-17:13:58.30|-61.6,4.08,2000 +Mic Delta|CD-3018382|J210601.14-300730.4,f|S|K0,21:6:1.15|32.56,-30:7:30.43|-68.7,5.70,2000 +BD+70 1164|J210623.30+712554.4,f|S|F3,21:6:23.30|-48.19,71:25:54.47|-116,5.88,2000 +BD+26 4073|PPM 112454|J210623.47+265527.7,f|S|K0,21:6:23.48|43.47,26:55:27.70|-19,6.13,2000 +SAO 212716|CD-3216398|J210624.67-322029.8,f|S|K2,21:6:24.68|-4.94,-32:20:29.82|8.6,5.20,2000 +Mic Eta|CD-4114379|PPM 326857|J210625.52-412309.4,f|D|K3,21:6:25.52|29.26,-41:23:9.47|-12,5.52,2000 +DT CYG|BD+30 4318|J210630.24+311104.7,f|V|F7,21:6:30.24|3.98,31:11:4.76|-4.8,5.77,2000 +Cyg 63|V13548|BD+47 3292|J210636.09+473854.2,f|D|K4,21:6:36.09|6.47,47:38:54.25|-1,4.53,2000 +SAO 126546|BD+03 4501|PPM 171281|J210639.84+034811.2,f|S|K0,21:6:39.84|94.74,3:48:11.23|50.3,6.49,2000 +Cyg 61A|V1803 CYG|BD+38 4343|J210653.94+384457.8,f|D|K5,21:6:53.94|4156.90,38:44:57.90|3259.4,5.20,2000 +Cyg 61B|V13546|BD+38 4344|J210655.26+384431.4,f|D|K7,21:6:55.26|4109.24,38:44:31.40|3144.2,6.06,2000 +Cap 24|V25465|CD-2515235|J210707.66-250021.0,f|D|M1,21:7:7.67|-27.19,-25:0:21.07|-43.4,4.52,2000 +BD+15 4340|PPM 139637|J210733.64+153931.1,f|S|K2,21:7:33.64|47.37,15:39:31.17|-57.5,6.28,2000 +CD-4514200|PPM 326887|J210744.52-452246.0,f|S|A9,21:7:44.53|31.40,-45:22:46.09|-7.1,6.45,2000 +V13549|SAO 164156|SD-18 5862|J210744.69-172721.2,f|V|A0,21:7:44.69|29.91,-17:27:21.25|-46.6,6.18,2000 +SAO 126566|BD+06 4754|PPM 171321|J210828.13+065921.6,f|S|K5,21:8:28.14|-9.98,6:59:21.69|1.7,6.17,2000 +SAO 254941|CP-64 4094|PPM 364972|J210832.69-635541.7,f|S|K0,21:8:32.70|-6.33,-63:55:41.74|4.5,5.76,2000 +Cap Chi-25A|SD-21 5933|J210833.62-211137.2,f|D|A0,21:8:33.62|18.74,-21:11:37.21|-59.2,5.30,2000 +V0389 CYG|BD+29 4324|J210838.88+301220.2,f|D|B9,21:8:38.89|25.41,30:12:20.30|-20.8,5.70,2000 +Polaris Australis|Oct Sigma|ig Oct|SAO 258857|HD 177482|CP-89 47|PPM 378539|HR 7228|J210846.84-885723.3,f|S|F0,21:8:46.85|25.96,-88:57:23.40|5,5.45,2000 +SAO 212753|CD-3714135|J210922.33-364221.3,f|S|F7,21:9:22.34|32.59,-36:42:21.38|-132.3,6.48,2000 +CP-73 2192|J210922.44-731022.6,f|D|F8,21:9:22.45|461.32,-73:10:22.68|-287.2,5.67,2000 +Cap 27|V13566|SD-21 5940|J210932.99-203323.9,f|V|F1,21:9:33.00|118.54,-20:33:23.98|-135.6,6.26,2000 +Aqr Nu-13|SAO 164182|SD-11 5538|J210935.64-112218.0,f|S|G8,21:9:35.65|92.35,-11:22:18.09|-15.8,4.51,2000 +SAO 126587|BD+02 4311|PPM 171365|J210958.26+025637.2,f|S|F5,21:9:58.27|20.37,2:56:37.25|33.6,6.45,2000 +BD+52 2880|J211015.57+533347.1,f|S|B9,21:10:15.57|22.54,53:33:47.16|-3.7,5.75,2000 +Equ Gamma-5A|Gamma Equulei|SAO 126593|BD+09 4732|J211020.50+100753.6,f|D|F0,21:10:20.50|49.02,10:7:53.69|-151.9,4.71,2000 +BD+47 3322|J211030.95+474132.0,f|D|B6,21:10:30.96|-4.04,47:41:32.01|-3.7,6.50,2000 +Equ 6D|SAO 126597|BD+09 4735|PPM 139712|J211031.31+100256.1,f|D|A2,21:10:31.31|-0.30,10:2:56.12|17.2,6.08,2000 +SAO 145171|SD-09 5674|J211046.93-092114.6,f|S|K0,21:10:46.94|116.78,-9:21:14.67|-58.6,6.27,2000 +SAO 257893|CP-73 2195|J211120.93-723239.6,f|S|K1,21:11:20.93|33.88,-72:32:39.67|-30.5,6.18,2000 +EW AQR|SD-15 5908|J211141.33-142820.5,f|V|F0,21:11:41.34|38.49,-14:28:20.56|0.1,6.46,2000 +V13598|BD+59 2334|PPM 39225|HR 8119|J211148.23+595911.7,f|D|B0,21:11:48.24|-2.93,59:59:11.80|-3.6,5.73,2000 +V25506|CD-4014216|PPM 326968|J211213.71-401609.7,f|V|F5,21:12:13.71|57.45,-40:16:9.70|-219.4,5.83,2000 +Cyg Zeta-64A|BD+29 4348|PPM 86219|HR 8115|J211256.18+301336.8,f|D|G8,21:12:56.19|6.87,30:13:36.90|-68.1,3.20,2000 +SAO 212793|CD-3914152|J211303.06-392529.7,f|S|F5,21:13:3.07|187.36,-39:25:29.72|-114.4,5.26,2000 +CD-2817178|PPM 272213|J211317.33-273709.5,f|S|K5,21:13:17.33|98.88,-27:37:9.60|-112.8,5.41,2000 +CD-3614676|J211318.96-362524.6,f|S|K0,21:13:18.96|34.16,-36:25:24.70|3.6,5.96,2000 +Pav Omicron|V25504|SAO 257896|CP-70 2835|PPM 374914|J211320.50-700734.5,f|V|M1,21:13:20.51|41.41,-70:7:34.56|-20.3,5.08,2000 +BD+80 690|PPM 3728|HR 8174|J211321.58+811351.4,f|S|A3,21:13:21.58|-3.11,81:13:51.50|4.5,6.12,2000 +BD+36 4470|J211326.42+363759.7,f|S|F0,21:13:26.43|0.48,36:37:59.75|0.6,6.08,2000 +BD+15 4375|PPM 139777|HR 8116|J211328.78+155856.6,f|D|A7,21:13:28.78|36.05,15:58:56.66|-22.9,6.27,2000 +V25530|BD+63 1708|HR 8133|J211342.47+642414.1,f|D|G2,21:13:42.48|1.04,64:24:14.16|-113.8,6.39,2000 +BD+29 4354|PPM 112651|HR 8126|J211410.28+295403.4,f|S|G6,21:14:10.28|3.77,29:54:3.45|-0.8,6.18,2000 +Equ Delta-7A|SAO 126643|BD+09 4746|HR 8123|J211428.81+100025.0,f|D|F5,21:14:28.82|42.40,10:0:25.06|-303.4,4.50,2000 +V13614|SAO 145229|BD-00 4186|PPM 171472|HR 8121|J211437.04+000532.1,f|V|M1,21:14:37.05|36.45,0:5:32.12|-12.6,6.38,2000 +Cyg Tau-65A|Tau Cygni|BD+37 4240|J211447.49+380243.1,f|D|F2,21:14:47.49|195.74,38:2:43.14|410,3.74,2000 +V25528|SAO 164249|SD-17 6216|PPM 238586|HR 8122|J211506.61-172042.4,f|V|G5,21:15:6.62|0.00,-17:20:42.50|-19.9,6.05,2000 +CD-4114440|HR 8117|J211514.38-403021.8,f|S|K2,21:15:14.39|101.73,-40:30:21.83|6.1,6.21,2000 +BD+47 3348|PPM 61182|HR 8136|J211537.17+475826.3,f|S|B4,21:15:37.18|2.21,47:58:26.38|-2.8,6.44,2000 +Cap Phi-28|SD-21 5974|HR 8127|J211537.90-203906.1,f|S|G5,21:15:37.90|15.44,-20:39:6.11|-2.2,5.16,2000 +V25542|BD+76 833|HR 8168|J211542.45+770044.2,f|V|K5,21:15:42.45|22.96,77:0:44.27|14.6,5.91,2000 +Cap 29|V13620|SAO 164263|SD-15 5935|HR 8128|J211544.84-151017.4,f|V|M3,21:15:44.84|24.76,-15:10:17.40|5.1,5.33,2000 +SAO 246929|CP-5310015|PPM 349231|HR 8114|J211545.86-531547.1,f|D|A6,21:15:45.87|35.08,-53:15:47.13|-14.1,5.74,2000 +SAO 212843|CD-3614699|HR 8124|J211546.78-361238.5,f|S|K3,21:15:46.79|29.41,-36:12:38.55|-6.3,6.13,2000 +Equ Alpha-8A|SAO 126662|BD+04 4635|Kitalpha|Kitel Phard|HR 8131|J211549.43+051452.2,f|D|G0,21:15:49.43|59.60,5:14:52.24|-94.3,3.94,2000 +BD+43 3866|PPM 61211|J211617.12+441417.6,f|S|K0,21:16:17.13|14.94,44:14:17.60|10.7,6.38,2000 +IW AQR|SAO 145251|SD-09 5700|J211617.77-091252.7,f|V|Ma,21:16:17.78|-7.26,-9:12:52.76|3.5,6.48,2000 +BD+41 4067|PPM 61215|HR 8138|J211629.61+421506.4,f|S|K2,21:16:29.62|0.89,42:15:6.43|-15.7,6.21,2000 +SAO 145259|SD-02 5495|PPM 181231|HR 8132|J211639.47-013627.9,f|S|K0,21:16:39.47|23.09,-1:36:27.93|-16.9,6.49,2000 +BD+53 2588|HR 8147|J211702.05+535951.6,f|S|A1,21:17:2.05|37.83,53:59:51.70|39.5,6.13,2000 +SAO 164279|SD-13 5897|PPM 238627|HR 8134|J211713.53-131644.3,f|S|A2,21:17:13.54|-9.49,-13:16:44.36|-6.1,6.41,2000 +BD+55 2549|J211714.24+554752.8,f|S|K3,21:17:14.25|16.78,55:47:52.80|13.3,5.98,2000 +V0421 CEP|BD+57 2309|PPM 39313|HR 8153|J211718.79+583641.3,f|D|B2,21:17:18.79|-2.97,58:36:41.34|-2.7,6.43,2000 +BD+42 4046|PPM 61238|HR 8144|J211723.18+424100.8,f|S|B7,21:17:23.18|9.70,42:41:0.86|2.2,6.17,2000 +Cyg Sigma-67|V13640|BD+38 4431|PPM 86327|HR 8143|J211724.95+392340.8,f|V|B9,21:17:24.95|0.46,39:23:40.85|-3.6,4.26,2000 +Cyg Upsilon-66A|Upsilon Cygni|BD+34 4371|PPM 86342|HR 8146|J211755.07+345348.8,f|D|B2,21:17:55.08|11.93,34:53:48.83|6.9,4.42,2000 +Mic Epsilon|SAO 212874|CD-3216498|HR 8135|J211756.28-321021.1,f|S|A1,21:17:56.28|55.48,-32:10:21.14|-22.1,4.72,2000 +Cap 30|SAO 164286|SD-18 5903|PPM 238644|HR 8137|J211757.28-175906.4,f|S|B8,21:17:57.29|15.55,-17:59:6.50|-0.7,5.40,2000 +V13627|SAO 254966|CP-65 3900|HR 8125|J211800.48-644053.6,f|V|B8,21:18:0.49|17.00,-64:40:53.69|-28.6,6.33,2000 +Aqr 15|SAO 145278|SD-05 5512|HR 8141|J211811.07-043110.1,f|S|B5,21:18:11.07|11.81,-4:31:10.12|13.7,5.83,2000 +Cyg 68|V1809 CYG|BD+43 3877|HR 8154|J211827.18+435645.4,f|V|O7,21:18:27.19|4.54,43:56:45.40|-9.1,5.05,2000 +V0422 CEP|BD+60 2217|PPM 22752|J211832.42+611103.8,f|V|Mb,21:18:32.43|-7.74,61:11:3.82|-3.2,6.44,2000 +Alderamin|Cep Alpha-5A|V13660|BD+61 2111|PPM 22755|HR 8162|J211834.77+623508.0,f|D|A7,21:18:34.77|149.94,62:35:8.06|48.3,2.47,2000 +V25543|BD+10 4516|PPM 139919|HR 8149|J211852.02+111212.1,f|V|K5,21:18:52.03|21.19,11:12:12.14|15.5,5.97,2000 +CD-2917692|PPM 272326|HR 8142|J211854.17-284556.9,f|S|G8,21:18:54.18|-212.62,-28:45:56.95|-66.7,6.41,2000 +BD+40 4485|PPM 61269|HR 8155|J211855.32+410225.8,f|D|A5,21:18:55.33|-5.43,41:2:25.86|-4.7,6.15,2000 +V0381 CEP|BD+58 2249A|PPM 39339|HR 8164|J211915.68+583724.6,f|D|M1,21:19:15.69|-3.59,58:37:24.61|-3.3,5.71,2000 +V1334 CYG|BD+37 4271|PPM 86379|HR 8157|J211922.18+381414.9,f|D|F1,21:19:22.18|-0.24,38:14:14.90|-3.3,5.89,2000 +Cep 6|V0382 CEP|BD+64 1527|HR 8171|J211922.22+645218.6,f|V|B3,21:19:22.22|5.10,64:52:18.68|5.3,5.19,2000 +BD+48 3345|PPM 61283|HR 8161|J211928.75+493037.0,f|S|B6,21:19:28.75|14.51,49:30:37.06|2,5.75,2000 +Ind Theta|SAO 246965|CP-5310037A|PPM 349299|J211951.98-532657.9,f|D|A5,21:19:51.99|107.37,-53:26:57.94|-67.1,4.50,2000 +T IND|CD-4514302|HR 8145|J212009.48-450118.8,f|V|C7,21:20:9.48|1.06,-45:1:18.81|3,6.11,2000 +V25559|BD+21 4521|PPM 112813|HR 8158|J212014.07+220134.2,f|V|B6,21:20:14.07|4.03,22:1:34.27|5.6,6.29,2000 +BD+60 2227|PPM 22792|HR 8179|J212033.44+604523.0,f|S|G5,21:20:33.45|-43.01,60:45:23.06|-19.8,6.11,2000 +Mic Theta1|Theta1 Microscopii|CD-4114475|HR 8151|J212045.64-404834.0,f|V|Ap,21:20:45.64|76.18,-40:48:34.09|17.7,4.81,2000 +BD+31 4425|PPM 86421|HR 8166|J212050.05+322707.9,f|D|G8,21:20:50.05|58.60,32:27:8.00|-45.2,6.24,2000 +BD+39 4529|PPM 61317|J212101.42+402042.2,f|S|F8,21:21:1.42|-18.86,40:20:42.24|-208.9,6.40,2000 +Aqr 16|SAO 145317|SD-05 5524|J212104.31-043336.4,f|S|G5,21:21:4.32|-12.86,-4:33:36.45|11,5.86,2000 +34 Vul|BD+23 4294|PPM 112832|HR 8165|J212104.39+235121.4,f|S|K1,21:21:4.39|243.64,23:51:21.48|-120,5.59,2000 +Equ 9|V25566|SAO 126719|BD+06 4802|PPM 171619|HR 8163|J212104.82+072116.2,f|V|M2,21:21:4.82|41.21,7:21:16.21|-17.9,5.82,2000 +V13662|SAO 246983|CD-5013325|PPM 327113|HR 8152|J212116.60-495617.6,f|V|K3,21:21:16.60|-2.32,-49:56:17.69|-162,6.40,2000 +BD+32 4134|PPM 86431|HR 8169|J212121.93+323645.8,f|S|A1,21:21:21.94|14.40,32:36:45.84|-14.3,6.05,2000 +BD+48 3357|PPM 61342|HR 8185|J212200.41+492319.8,f|S|K0,21:22:0.42|37.49,49:23:19.85|61.5,5.68,2000 +Peg 1A|BD+19 4691|HR 8173|J212205.19+194816.2,f|D|K1,21:22:5.20|105.99,19:48:16.23|62.6,4.09,2000 +Cap Iota-32|Iota Capricorni|SAO 164346|SD-17 6245|PPM 238745|HR 8167|J212214.79-165004.3,f|S|G7,21:22:14.80|30.87,-16:50:4.35|5.3,4.29,2000 +BD+29 4397|PPM 86464|HR 8182|J212242.05+301835.5,f|S|K1,21:22:42.06|38.59,30:18:35.58|7.5,6.07,2000 +Equ Beta-10A|SAO 126749|BD+06 4811|PPM 171663|HR 8178|J212253.61+064840.1,f|D|A3,21:22:53.61|52.73,6:48:40.11|11.2,5.16,2000 +Aqr 17|SAO 145351|SD-09 5728|HR 8175|J212256.25-091909.5,f|S|M0,21:22:56.26|-27.38,-9:19:9.59|-23.4,5.98,2000 +V25570|CD-2316877|HR 8172|J212300.49-224008.5,f|V|M1,21:23:0.49|36.82,-22:40:8.57|0.4,5.62,2000 +BD+36 4543|PPM 86485|HR 8193|J212348.38+372105.3,f|D|K5,21:23:48.39|-5.96,37:21:5.33|-6.9,6.44,2000 +CD-2515399|PPM 272425|J212355.89-251208.9,f|S|K1,21:23:55.90|58.09,-25:12:8.94|-23.1,6.48,2000 +BD+23 4300|PPM 112921|J212358.82+241626.8,f|D|F1,21:23:58.83|136.46,24:16:26.89|18.1,5.70,2000 +BD+24 4394|PPM 112924|HR 8194|J212407.44+251844.7,f|D|A2,21:24:7.45|39.32,25:18:44.72|9,6.20,2000 +CD-2316889|PPM 272427|HR 8184|J212407.92-224449.5,f|S|K5,21:24:7.93|-21.58,-22:44:49.56|-12.4,6.38,2000 +Cap 33|V13683|SD-21 6007|PPM 272428|HR 8183|J212409.59-205106.7,f|V|K0,21:24:9.59|-7.71,-20:51:6.73|-126.9,5.37,2000 +Aqr 18|V13684|SAO 164364|SD-13 5923|PPM 238788|HR 8187|J212411.49-125241.1,f|D|F1,21:24:11.49|91.68,-12:52:41.19|9,5.49,2000 +Y PAV|CP-70 2844|PPM 365147|HR 8156|J212416.75-694401.9,f|V|C7,21:24:16.75|9.40,-69:44:1.98|-7.4,6.39,2000 +CD-4713796|PPM 327163|HR 8177|J212420.84-463652.9,f|S|A7,21:24:20.84|48.22,-46:36:52.94|-14.6,6.31,2000 +BD+23 4305|PPM 112931|HR 8197|J212423.13+243142.2,f|S|K0,21:24:23.13|34.93,24:31:42.22|-10,6.34,2000 +SAO 126774|BD+09 4800|HR 8191|J212424.56+101027.3,f|S|F5,21:24:24.56|70.87,10:10:27.31|20.1,6.32,2000 +Mic Theta2|CD-4114503|PPM 327164|J212424.81-410024.1,f|D|A0,21:24:24.82|26.37,-41:0:24.10|-0.2,5.78,2000 +BD+25 4531|PPM 112936|HR 8198|J212434.00+261028.4,f|S|A8,21:24:34.01|49.00,26:10:28.42|6.4,5.67,2000 +BD+79 707|HR 8239|J212449.55+803129.3,f|S|G5,21:24:49.55|42.62,80:31:29.38|-11.4,5.96,2000 +Aqr 20|SAO 145376|SD-04 5444|HR 8192|J212451.67-032354.0,f|S|F0,21:24:51.67|-6.59,-3:23:54.09|-50.3,6.39,2000 +Aqr 19|SAO 145382|SD-10 5668|HR 8195|J212513.02-094454.7,f|S|F0,21:25:13.03|16.71,-9:44:54.79|-169.5,5.72,2000 +Aqr 21|SAO 145384|SD-04 5446|HR 8199|J212516.95-033324.2,f|S|K4,21:25:16.96|-12.43,-3:33:24.29|-69.8,5.48,2000 +CP-72 2598|PPM 374994|HR 8159|J212518.04-714756.6,f|D|K2,21:25:18.05|17.38,-71:47:56.62|4.9,6.09,2000 +BD+46 3305|PPM 61427|J212519.54+464251.6,f|S|F0,21:25:19.55|188.62,46:42:51.63|48.2,5.60,2000 +Cyg 69A|V2157 CYG|BD+36 4557|J212547.02+364002.5,f|D|B0,21:25:47.03|6.86,36:40:2.59|-8.9,5.92,2000 +CD-2416641|PPM 272477|J212548.55-234919.5,f|S|K0,21:25:48.55|16.05,-23:49:19.55|-15.7,6.50,2000 +SAO 126789|BD-00 4215|PPM 171737|J212551.58+003203.6,f|S|A1,21:25:51.58|49.95,0:32:3.62|13.8,6.47,2000 +Ind Gamma|V13692|CP-55 9586|HR 8188|J212615.43-543937.6,f|V|F1,21:26:15.44|1.21,-54:39:37.65|38.7,6.09,2000 +SAO 212998|CD-3814551|J212622.87-374945.9,f|S|K2,21:26:22.87|167.05,-37:49:45.95|-10.9,5.64,2000 +Pav Gamma|V13689|SAO 254999|CP-65 3918|PPM 365174|HR 8181|J212626.60-652158.3,f|V|F6,21:26:26.61|81.09,-65:21:58.31|800.7,4.23,2000 +IK PEG|BD+18 4794|J212626.66+192232.3,f|V|A8,21:26:26.66|80.23,19:22:32.30|17.3,6.08,2000 +SAO 126794|BD+00 4726|PPM 171745|J212628.05+010612.0,f|S|F5,21:26:28.05|110.53,1:6:12.09|-161.7,6.12,2000 +Cap Zeta-34|V25596|CD-2215388|Schöenfeld 1886|PPM 272494|J212640.02-222440.7,f|D|G4,21:26:40.03|-2.63,-22:24:40.80|18.9,3.75,2000 +V25601|BD+52 2939|PPM 39471|HR 8218|J212644.96+525354.7,f|V|B6,21:26:44.97|15.65,52:53:54.73|5,6.00,2000 +V13718|BD+48 3390|PPM 61472|HR 8216|J212651.62+485006.6,f|V|A6,21:26:51.62|57.96,48:50:6.61|26,5.29,2000 +CD-4314539|PPM 327215|J212701.62-423252.5,f|D|A3,21:27:1.62|-49.29,-42:32:52.55|14.5,5.50,2000 +Cap 35|SD-21 6020|J212714.81-211146.3,f|S|K5,21:27:14.82|-24.61,-21:11:46.36|-34,5.77,2000 +Cyg 70|BD+36 4568|PPM 86599|HR 8215|J212721.36+370700.4,f|S|B3,21:27:21.37|2.51,37:7:0.47|2.7,5.30,2000 +V0426 CEP|BD+59 2383|PPM 39479|HR 8224|J212725.27+594500.2,f|D|M3,21:27:25.28|-21.76,59:45:0.27|-16,6.14,2000 +Vul 35|BD+26 4164|HR 8217|J212740.05+273630.9,f|S|A1,21:27:40.06|41.74,27:36:30.94|20.4,5.39,2000 +Cep 7|BD+66 1405|HR 8227|J212746.14+664832.7,f|S|B7,21:27:46.14|-10.22,66:48:32.74|-20.7,5.42,2000 +BD+31 4462|PPM 86617|J212808.25+321331.1,f|S|F0,21:28:8.25|134.00,32:13:31.19|79.4,5.75,2000 +V13727|SAO 126818|BD+07 4696|HR 8219|J212824.83+081144.3,f|V|Ma,21:28:24.84|6.83,8:11:44.32|-27.3,6.40,2000 +Alfirk|Cep Beta-8A|Beta Cephei|BD+69 1173|HR 8238|J212839.59+703338.5,f|D|B1,21:28:39.60|12.58,70:33:38.58|8.7,3.23,2000 +Cap 36|CD-2215402|HR 8213|J212843.40-214825.8,f|S|G7,21:28:43.40|133.97,-21:48:25.85|-5.5,4.51,2000 +SX PAV|CP-70 2850|PPM 365198|HR 8196|J212844.92-693019.3,f|V|M5,21:28:44.92|82.30,-69:30:19.39|-46.4,5.61,2000 +V13745|BD+54 2544|PPM 39496|HR 8226|J212852.73+552507.3,f|V|B8,21:28:52.74|15.67,55:25:7.33|14.1,6.14,2000 +NV PEG|BD+21 4555|HR 8223|J212859.77+221045.9,f|D|M4,21:28:59.78|33.20,22:10:45.97|13.1,5.94,2000 +V13738|BD+17 4592|HR 8221|J212859.91+175421.2,f|V|K5,21:28:59.92|-9.14,17:54:21.27|0.6,6.41,2000 +CP-54 9872|PPM 349434|HR 8211|J212900.14-534221.2,f|S|K2,21:29:0.15|70.14,-53:42:21.28|-25.5,6.38,2000 +Cyg 71|BD+45 3558|PPM 61551|HR 8228|J212926.94+463226.1,f|S|K0,21:29:26.95|43.33,46:32:26.11|104.1,5.23,2000 +SAO 126834|BD+05 4790|PPM 171818|J212934.49+063452.9,f|S|K0,21:29:34.50|4.47,6:34:52.96|-3.5,6.42,2000 +Peg 2|V25624|BD+23 4325|HR 8225|J212956.89+233819.8,f|D|M1,21:29:56.90|24.46,23:38:19.82|3.5,4.52,2000 +BD+52 2957|HR 8237|J213020.32+525728.7,f|S|A2,21:30:20.33|20.96,52:57:28.80|16.7,6.02,2000 +BD+59 2395|PPM 22962|HR 8243|J213059.29+602733.9,f|S|B1,21:30:59.29|-1.70,60:27:33.96|-3.3,5.54,2000 +BD+11 4583|HR 8231|J213109.62+120814.9,f|S|B9,21:31:9.63|18.18,12:8:14.91|-15.7,6.11,2000 +BD+51 3079|PPM 39549|HR 8242|J213127.46+523711.4,f|S|G2,21:31:27.46|0.64,52:37:11.48|-1.7,6.18,2000 +Sadalsuud|Saad el Sund|Aqr Beta-22A|SAO 145457|SD-06 5770|HR 8232|J213133.53-053416.2,f|D|G0,21:31:33.53|22.84,-5:34:16.22|-6.7,2.89,2000 +BD+23 4329|PPM 113144|J213150.15+235042.6,f|S|K0,21:31:50.15|8.78,23:50:42.65|7.1,6.42,2000 +V13686|SAO 258899|CP-85 519|PPM 378594|HR 8129|J213203.06-844836.2,f|V|K3,21:32:3.06|31.32,-84:48:36.25|-29.8,6.41,2000 +Gru Xi|CD-4114550|HR 8229|J213205.87-411045.5,f|S|K0,21:32:5.88|19.31,-41:10:45.52|10.7,5.29,2000 +PsA 6|V13762|CD-3415110|J213214.57-335640.6,f|D|A2,21:32:14.57|-5.85,-33:56:40.64|-4,5.97,2000 +CD-2515479|PPM 272625|HR 8235|J213233.26-243525.5,f|S|A7,21:32:33.26|68.88,-24:35:25.50|6.2,6.44,2000 +BD+49 3553|PPM 61648|HR 8246|J213256.59+495839.4,f|S|A0,21:32:56.59|15.82,49:58:39.47|11.9,5.77,2000 +CP-5310092|PPM 349487|HR 8233|J213317.61-524415.9,f|S|K4,21:33:17.61|-9.72,-52:44:15.98|-14,6.41,2000 +V13784|BD+45 3584|PPM 61662|HR 8248|J213317.88+455114.4,f|V|K1,21:33:17.88|-2.30,45:51:14.45|-4,6.23,2000 +CP-80 1017|PPM 378597|J213321.14-800221.7,f|D|A0,21:33:21.14|22.52,-80:2:21.70|-22.1,6.47,2000 +CD-4514367|PPM 327328|HR 8236|J213323.51-445055.3,f|S|K1,21:33:23.52|-18.93,-44:50:55.32|-2.3,5.57,2000 +CP-83 716|HR 8176|J213354.57-824059.1,f|S|B3,21:33:54.58|22.62,-82:40:59.10|-2.5,6.36,2000 +Cyg Rho-73|V13787|BD+44 3865|PPM 61674|HR 8252|J213358.85+453530.6,f|V|G8,21:33:58.85|-24.46,45:35:30.61|-93.9,3.99,2000 +CD-4314602|PPM 327342|HR 8241|J213417.15-425528.8,f|S|K1,21:34:17.16|-27.90,-42:55:28.84|-8.3,6.33,2000 +BD+51 3091|HR 8259|J213427.46+514154.4,f|S|B9,21:34:27.46|3.72,51:41:54.47|-1.8,6.17,2000 +BD+22 4431|PPM 113224|J213433.97+224516.2,f|S|F7,21:34:33.97|11.76,22:45:16.28|-53.5,6.47,2000 +IZ AQR|BD+01 4503|PPM 171943|J213442.76+014944.9,f|V|Mb,21:34:42.77|13.19,1:49:44.98|-11.4,6.49,2000 +BD+17 4606|J213445.91+181944.1,f|S|K2,21:34:45.91|37.02,18:19:44.15|11.4,6.49,2000 +Cyg 72|BD+37 4359|PPM 86752|HR 8255|J213446.56+383202.5,f|S|K0,21:34:46.56|116.87,38:32:2.59|93.3,4.87,2000 +Cap 37|SD-20 6237|HR 8245|J213451.05-200503.3,f|S|F1,21:34:51.05|-29.02,-20:5:3.39|44.4,5.70,2000 +V25679|CD-3018703|PPM 272683|HR 8244|J213453.00-294146.0,f|V|B8,21:34:53.00|14.33,-29:41:46.02|-15,6.44,2000 +CD-2416729|PPM 272695|HR 8247|J213515.95-232715.5,f|S|G5,21:35:15.96|78.02,-23:27:15.53|-14.3,6.39,2000 +SD-04 5489|HR 8251|J213517.62-035859.8,f|S|G5,21:35:17.62|-9.58,-3:58:59.90|-4.8,5.78,2000 +BD+27 4107|PPM 113251|HR 8257|J213519.11+281151.3,f|S|F0,21:35:19.12|138.94,28:11:51.38|-33.2,6.25,2000 +V0431 CEP|BD+67 1329|J213525.93+681309.4,f|V|Ap,21:35:25.94|17.81,68:13:9.44|15.7,6.47,2000 +BD+23 4346|PPM 113256|HR 8258|J213527.03+242707.7,f|D|A4,21:35:27.04|12.02,24:27:7.78|-10.8,6.23,2000 +W CYG|BD+44 3877|PPM 61734|HR 8262|J213602.49+452228.5,f|V|M5,21:36:2.50|64.49,45:22:28.53|1.9,6.01,2000 +PsA 8|CD-2615702|PPM 272711|HR 8253|J213610.97-261017.4,f|D|A7,21:36:10.97|107.83,-26:10:17.46|-24.3,5.74,2000 +BD+29 4456|PPM 86783|HR 8261|J213613.98+300319.5,f|D|G8,21:36:13.98|-52.45,30:3:19.52|59.7,6.25,2000 +PsA 7|SAO 213136|CD-3315664|HR 8256|J213648.80-330252.4,f|S|A7,21:36:48.80|74.06,-33:2:52.43|-1.9,6.11,2000 +Cyg 74|BD+39 4612|HR 8266|J213656.97+402448.6,f|S|A5,21:36:56.98|-1.48,40:24:48.67|12.5,5.05,2000 +Cap Epsilon-39A|Epsilon Capricorni|SD-20 6251|J213704.83-192757.6,f|D|B2,21:37:4.83|13.44,-19:27:57.64|0.8,4.52,2000 +CP CYG|BD+44 3889|PPM 61768|HR 8272|J213727.87+444147.5,f|V|A7,21:37:27.87|-1.07,44:41:47.58|-26.7,6.20,2000 +SAO 145533|BD-01 4180A|HR 8263|J213733.75-002326.0,f|D|A2,21:37:33.76|-22.95,-0:23:26.02|-27.8,6.22,2000 +BD+53 2659|PPM 39675|HR 8275|J213738.81+540231.9,f|S|K1,21:37:38.81|-4.93,54:2:31.92|-0.7,6.17,2000 +Peg 3A|BD+05 4830|HR 8265|J213743.64+063706.2,f|D|A2,21:37:43.65|57.96,6:37:6.21|-2.1,6.18,2000 +Aqr Xi-23|SAO 145537|SD-08 5701|HR 8264|J213745.10-075115.1,f|D|A7,21:37:45.11|114.27,-7:51:15.12|-24.4,4.69,2000 +Peg 5|V25705|BD+18 4827|HR 8267|J213745.42+191906.9,f|V|F1,21:37:45.43|99.51,19:19:6.99|13.4,5.46,2000 +Cep 9|V0337 CEP|BD+61 2169|HR 8279|J213755.22+620454.9,f|V|B2,21:37:55.22|-1.90,62:4:54.98|-2.8,4.79,2000 +CP-65 3937|PPM 365297|HR 8249|J213802.84-644927.0,f|S|A0,21:38:2.85|31.84,-64:49:27.00|-9.2,6.22,2000 +Peg 4|SAO 126956|BD+05 4834|J213831.93+054618.2,f|D|A9,21:38:31.94|112.68,5:46:18.27|28.6,5.67,2000 +BD+24 4445|PPM 113345|HR 8274|J213845.16+252955.7,f|S|G9,21:38:45.16|-2.03,25:29:55.79|4.7,6.20,2000 +SAO 257942|CP-79 1158|HR 8234|J213856.37-792633.3,f|S|F4,21:38:56.38|70.82,-79:26:33.30|-26.9,6.18,2000 +V25719|BD+56 2617|HR 8281|J213857.61+572920.5,f|D|O6,21:38:57.62|-1.69,57:29:20.54|-5,5.70,2000 +NZ PEG|BD+19 4754|PPM 113349|HR 8276|J213901.18+201555.6,f|V|F2,21:39:1.19|122.56,20:15:55.62|-1.1,5.78,2000 +SAO 213168|CD-3415163|HR 8268|J213906.11-334043.8,f|S|G8,21:39:6.12|71.65,-33:40:43.88|-42.8,6.28,2000 +SAO 164555|SD-11 5640|PPM 239151|HR 8273|J213928.10-103436.8,f|S|K0,21:39:28.11|27.43,-10:34:36.83|-52.3,6.07,2000 +Aqr 25|SAO 126965|BD+01 4517|HR 8277|J213933.26+021436.8,f|D|K0,21:39:33.27|-32.67,2:14:36.81|-84.2,5.10,2000 +V25715|SAO 247128|CP-5211911|PPM 349576|HR 8269|J213959.72-522132.4,f|V|F7,21:39:59.72|-18.78,-52:21:32.47|6.7,6.20,2000 +Nashira|Cap Gamma-40|Gamma Capricorni|SD-17 6340|PPM 239166|HR 8278|J214005.45-163944.3,f|S|F0,21:40:5.46|187.39,-16:39:44.31|-22.3,3.68,2000 +Cyg 75A|V13834|BD+42 4177|PPM 61846|HR 8284|J214011.10+431625.8,f|D|M1,21:40:11.11|60.50,43:16:25.82|16.1,5.10,2000 +SAO 247132|CP-56 9700|PPM 349584|HR 8271|J214033.71-554416.7,f|S|K0,21:40:33.71|18.49,-55:44:16.72|9.4,6.34,2000 +BD+54 2595|PPM 39744|J214043.30+545219.7,f|S|K0,21:40:43.31|8.03,54:52:19.74|3,6.16,2000 +Oct Nu|V25707|SAO 257948|CP-77 1510|HR 8254|J214128.64-772324.1,f|V|K0,21:41:28.65|64.84,-77:23:24.17|-240.4,3.74,2000 +Cap 42|BY CAP|SD-14 6102|HR 8283|J214132.85-140251.3,f|V|G2,21:41:32.86|-122.09,-14:2:51.40|-308.6,5.16,2000 +Cyg 76A|BD+40 4611|PPM 61876|HR 8291|J214134.25+404818.7,f|D|A2,21:41:34.26|-17.49,40:48:18.80|-47.7,6.08,2000 +Cep 11|BD+70 1193|HR 8317|J214155.29+711841.1,f|S|K0,21:41:55.29|119.49,71:18:41.10|94.5,4.54,2000 +Cap 41|CD-2317057|PPM 272831|HR 8285|J214200.69-231546.2,f|D|G9,21:42:0.70|91.09,-23:15:46.29|-95.5,5.24,2000 +V0460 CYG|BD+34 4500|HR 8297|J214201.08+353036.7,f|V|C6,21:42:1.08|5.49,35:30:36.72|1.9,5.98,2000 +Cyg Pi1-80|BD+50 3410|Azelfafage|PPM 39758|J214205.66+511122.6,f|S|B3,21:42:5.66|5.26,51:11:22.64|-2.1,4.68,2000 +V1339 CYG|BD+45 3637|PPM 61891|HR 8298|J214208.35+454556.5,f|V|M4,21:42:8.35|0.52,45:45:56.51|-19.8,6.22,2000 +Aqr 26|SAO 126997|BD+00 4770|PPM 172137|HR 8287|J214210.11+011706.9,f|S|K2,21:42:10.11|-5.85,1:17:6.91|-8.3,5.65,2000 +Peg 7|V13848|BD+05 4850|PPM 172141|HR 8289|J214215.45+054048.4,f|V|M2,21:42:15.45|11.19,5:40:48.49|-5.8,5.31,2000 +Cyg 77|BD+40 4615|J214222.96+410437.2,f|D|A0,21:42:22.96|30.19,41:4:37.23|2.3,5.73,2000 +V25740|BD+10 4604|HR 8292|J214232.95+104927.5,f|V|B5,21:42:32.96|17.39,10:49:27.53|-12.6,6.06,2000 +BD+48 3480|PPM 61911|J214238.81+493600.9,f|S|G8,21:42:38.81|3.01,49:36:0.93|-3.3,6.10,2000 +Cap Kappa-43|SAO 164593|SD-19 6152|PPM 239234|HR 8288|J214239.50-185158.7,f|S|G8,21:42:39.51|145.92,-18:51:58.76|-9.1,4.73,2000 +BD+58 2314|PPM 39774|HR 8312|J214245.36+591615.0,f|S|K1,21:42:45.37|-4.37,59:16:15.04|1.4,6.08,2000 +78 Dra|BD+71 1082|HR 8324|J214304.04+721912.3,f|S|K0,21:43:4.04|-43.23,72:19:12.30|-40.6,5.18,2000 +Cap 44|SD-15 6046|PPM 239245|HR 8295|J214304.39-142358.9,f|S|F0,21:43:4.40|-3.78,-14:23:58.95|20.4,5.89,2000 +V13857|BD+40 4623|PPM 61917|J214306.47+410917.8,f|V|M2,21:43:6.47|-15.92,41:9:17.89|-12.2,5.52,2000 +SD-20 6270|PPM 239248|HR 8293|J214313.53-193715.4,f|S|A3,21:43:13.53|83.22,-19:37:15.46|-12.4,6.22,2000 +Cyg 79A|BD+37 4408|PPM 86944|J214325.65+381700.9,f|D|A0,21:43:25.65|34.62,38:17:0.92|-4.9,5.70,2000 +Garnet Star|Cep Mu|Mu Cephei|BD+58 2316|PPM 39787|HR 8316|J214330.46+584648.1,f|D|M2,21:43:30.46|5.21,58:46:48.17|-2.9,4.02,2000 +BD+06 4889|PPM 172174|J214339.76+073143.1,f|S|K0,21:43:39.77|-28.11,7:31:43.16|-56.5,6.49,2000 +BD+22 4465|PPM 113487|J214358.10+224855.0,f|S|K2,21:43:58.11|-20.60,22:48:55.04|-43.5,6.43,2000 +SAO 247151|CP-57 9940|PPM 349623|J214359.03-571930.8,f|D|F6,21:43:59.03|-116.85,-57:19:30.89|-52.6,6.50,2000 +Cap 45|SAO 164612|SD-15 6052|PPM 239268|J214400.96-144457.7,f|S|F0,21:44:0.97|-22.48,-14:44:57.73|10.3,5.96,2000 +Cyg Mu2-78B|V25756|BD+28 4169B|J214408.46+284434.6,f|D|G2,21:44:8.46|278.03,28:44:34.62|-232.9,6.11,2000 +Cyg Mu1-78A|BD+28 4169A|J214408.57+284433.4,f|D|F6,21:44:8.58|260.27,28:44:33.48|-242.7,4.77,2000 +Enif|Enir|Os Pegasi|Fom|Al Anf|Peg Epsilon-8A|Epsilon Pegasi|BD+09 4891|PPM 172188|J214411.15+095230.0,f|D|K2,21:44:11.16|30.00,9:52:30.04|1.4,2.39,2000 +SAO 213248|CD-3914405|HR 8299|J214429.47-383309.1,f|S|G5,21:44:29.47|81.41,-38:33:9.11|-162.1,6.28,2000 +Peg 9|V13864|BD+16 4582|HR 8313|J214430.69+172100.0,f|V|G5,21:44:30.70|7.87,17:21:0.06|-10.8,4.34,2000 +HN PEG|BD+14 4668|HR 8314|J214431.32+144618.9,f|V|G0,21:44:31.33|231.05,14:46:18.98|-113.5,5.96,2000 +Peg Kappa-10A|V25758|BD+24 4463|HR 8315|J214438.74+253842.1,f|D|F5,21:44:38.74|46.65,25:38:42.11|13.5,4.15,2000 +BD+61 2193|PPM 23166|HR 8327|J214453.27+622738.0,f|D|O9,21:44:53.28|-2.98,62:27:38.04|-2.8,5.96,2000 +PsA Iota-9|SAO 213258|CD-3315734|J214456.80-330132.8,f|D|A0,21:44:56.81|31.82,-33:1:32.81|-94,4.34,2000 +Cap 46|SAO 145637|SD-09 5829|HR 8311|J214500.25-090456.7,f|S|G7,21:45:0.25|13.03,-9:4:56.74|-1.7,5.08,2000 +V25760|BD+51 3135|PPM 39827|J214512.39+521603.2,f|V|K2,21:45:12.40|-2.39,52:16:3.28|-0.8,6.40,2000 +CD-5013463|PPM 327529|J214518.73-492955.5,f|S|K1,21:45:18.73|71.21,-49:29:55.54|47.7,6.47,2000 +Cep Nu-10|Nu Cephei|BD+60 2288|PPM 23173|HR 8334|J214526.92+610714.9,f|S|A2,21:45:26.93|-3.12,61:7:14.90|-1.9,4.31,2000 +SAO 257955|CP-71 2632|PPM 375113|HR 8286|J214528.82-710031.8,f|S|B8,21:45:28.83|13.08,-71:0:31.86|-11.4,6.02,2000 +BD+35 4626|PPM 86987|J214544.51+355126.3,f|S|G8,21:45:44.51|91.79,35:51:26.32|11.1,6.45,2000 +Peg 12|BD+22 4472|PPM 113549|HR 8321|J214604.36+225655.9,f|S|K0,21:46:4.36|9.12,22:56:55.97|-2.4,5.27,2000 +Cap 47|AG CAP|SAO 145648|SD-09 5833|HR 8318|J214616.26-091633.3,f|V|M3,21:46:16.27|17.62,-9:16:33.37|7.8,6.03,2000 +BD+24 4473|PPM 113556|HR 8325|J214623.94+253348.6,f|S|K3,21:46:23.95|162.38,25:33:48.61|54,6.29,2000 +Cap Lambda-48|SAO 164639|SD-12 6087|PPM 239328|HR 8319|J214632.09-112157.4,f|S|A1,21:46:32.10|30.29,-11:21:57.44|-9.3,5.58,2000 +Cyg Pi2-81|BD+48 3504|HR 8335|J214647.60+491834.4,f|S|B3,21:46:47.61|3.62,49:18:34.46|-1.9,4.25,2000 +BD+69 1198|HR 8342|J214700.84+700903.1,f|S|A0,21:47:0.85|-10.44,70:9:3.18|-25.1,6.46,2000 +Deneb Algedi|Scheddi|Cap Delta-49A|Delta Capricorni|SAO 164644|SD-16 5943|PPM 239339|HR 8322|J214702.44-160738.2,f|D|A7,21:47:2.45|263.27,-16:7:38.23|-296.2,2.85,2000 +V372 PEG|BD+16 4598|J214704.75+171138.5,f|V|F3,21:47:4.76|103.75,17:11:38.55|-13.9,6.19,2000 +Peg 11|V25766|BD+02 4414|PPM 172247|HR 8328|J214713.96+024110.0,f|V|A1,21:47:13.96|6.29,2:41:10.05|-2.8,5.64,2000 +Cep 12|BD+60 2294|PPM 23195|HR 8339|J214725.29+604133.6,f|S|M1,21:47:25.30|-9.69,60:41:33.68|-1.8,5.52,2000 +SAO 145671|SD-06 5827|HR 8332|J214738.23-055500.4,f|S|A7,21:47:38.24|65.35,-5:55:0.49|15.8,6.17,2000 +PsA Theta-10A|SAO 213292|CD-3118466|HR 8326|J214744.14-305353.8,f|D|A2,21:47:44.15|-34.49,-30:53:53.90|0.6,5.02,2000 +BD+35 4643|HR 8336|J214808.39+363449.3,f|S|K5,21:48:8.39|-23.85,36:34:49.40|-6,6.26,2000 +CD-4713928|PPM 327579|HR 8323|J214815.75-471813.0,f|D|G0,21:48:15.75|165.70,-47:18:13.01|-295,5.57,2000 +BD+37 4427|HR 8338|J214829.35+383854.8,f|S|B8,21:48:29.36|24.02,38:38:54.87|-1.6,6.10,2000 +BD+66 1441|PPM 23214|J214908.09+664731.3,f|D|F3,21:49:8.09|-20.81,66:47:31.32|-66.3,6.48,2000 +V25773|BD+60 2300|PPM 23216|HR 8347|J214919.01+611621.9,f|V|M1,21:49:19.01|0.14,61:16:21.93|-23.1,6.19,2000 +BD+19 4793|PPM 113638|HR 8341|J214926.86+202744.8,f|S|B2,21:49:26.87|1.69,20:27:44.80|0.8,6.27,2000 +BD+40 4648|HR 8345|J214940.09+410855.6,f|S|A2,21:49:40.09|-2.94,41:8:55.63|-5.6,6.49,2000 +SAO 164679|SD-13 6027|HR 8337|J214941.01-124322.3,f|S|A3,21:49:41.02|-8.63,-12:43:22.31|20.8,6.31,2000 +Peg 14|BD+29 4525|HR 8343|J214950.69+301027.1,f|S|A1,21:49:50.69|18.93,30:10:27.17|-26.1,5.08,2000 +CP-65 3951|HR 8331|J215000.12-644245.1,f|S|K0,21:50:0.13|-3.59,-64:42:45.13|-38.3,5.62,2000 +Peg 13|V373 PEG|BD+16 4612|HR 8344|J215008.70+171709.2,f|D|F2,21:50:8.71|103.84,17:17:9.22|-29.2,5.34,2000 +SAO 164686|SD-17 6389|PPM 239414|J215012.98-165041.6,f|S|K0,21:50:12.98|18.38,-16:50:41.69|-5.6,6.38,2000 +Ind Omicron|CP-70 2873|PPM 365416|HR 8333|J215047.18-693745.8,f|S|K2,21:50:47.18|-24.75,-69:37:45.90|-4.7,5.51,2000 +Oct Lambda|SAO 258914|CP-83 722A|PPM 378641|J215054.56-824308.0,f|D|G8,21:50:54.56|68.15,-82:43:8.05|-33,5.29,2000 +V1619 CYG|BD+38 4621|HR 8349|J215104.98+393211.9,f|V|B9,21:51:4.98|8.79,39:32:11.97|3.6,6.21,2000 +BD+19 4797|HR 8348|J215134.24+194936.0,f|D|B8,21:51:34.25|20.46,19:49:36.05|13.3,5.78,2000 +BD+65 1664A|PPM 23242|HR 8361|J215137.24+654509.7,f|D|A1,21:51:37.24|-6.41,65:45:9.76|-20.8,6.38,2000 +BD+65 1664B|PPM 23242|J215137.37+654508.5,f|D|G5,21:51:37.38|-6.41,65:45:8.51|-20.8,6.38,2000 +SAO 164697|SD-19 6176|PPM 239446|HR 8346|J215141.74-183722.5,f|S|F0,21:51:41.75|144.14,-18:37:22.59|-77.2,6.19,2000 +V13909|BD+55 2639|PPM 39939|HR 8357|J215201.04+554748.2,f|D|B6,21:52:1.04|18.89,55:47:48.28|-0.5,5.69,2000 +BD+78 768|J215213.00+793306.3,f|S|K5,21:52:13.01|9.63,79:33:6.38|13.6,6.48,2000 +HO PEG|BD+20 5027|PPM 113692|J215218.18+211623.3,f|V|M4,21:52:18.18|15.93,21:16:23.39|24.5,6.35,2000 +Peg 15|V25778|BD+28 4215|PPM 113698|HR 8354|J215229.91+284736.7,f|V|F6,21:52:29.92|-58.63,28:47:36.74|-63.3,5.53,2000 +Peg 16|OQ PEG|BD+25 4635|PPM 113712|HR 8356|J215303.76+255530.5,f|V|B3,21:53:3.77|9.17,25:55:30.50|0.3,5.09,2000 +Cap Mu-51|V25781|SAO 164713|SD-14 6149|PPM 239478|HR 8351|J215317.77-133306.3,f|V|F1,21:53:17.77|313.08,-13:33:6.37|13.7,5.09,2000 +BD+18 4879|HR 8358|J215337.38+194006.3,f|S|A0,21:53:37.38|22.18,19:40:6.37|23.5,5.68,2000 +Gru Gamma|SAO 213374|CD-3714536|HR 8353|J215355.72-372153.4,f|S|B8,21:53:55.72|95.85,-37:21:53.47|-12.1,3.01,2000 +V25783|SAO 127141|BD+06 4919|HR 8359|J215357.76+065153.2,f|V|G0,21:53:57.77|79.38,6:51:53.30|14.1,6.15,2000 +SAO 145731|SD-04 5568|J215410.37-041634.2,f|S|K2,21:54:10.37|52.20,-4:16:34.25|-91.5,5.71,2000 +BD+19 4814A|HR 8364|J215417.41+194305.2,f|D|K0,21:54:17.42|-34.31,19:43:5.24|-12.4,6.34,2000 +V0438 CEP|BD+79 721|PPM 3865|J215426.55+801830.8,f|V|Mb,21:54:26.55|1.99,80:18:30.81|-14.5,6.46,2000 +SAO 145735|SD-03 5329|HR 8363|J215435.91-031804.5,f|D|F5,21:54:35.91|26.66,-3:18:4.58|-33,6.24,2000 +Cep 13|V13963|BD+55 2644|PPM 39991|HR 8371|J215453.15+563640.4,f|V|B8,21:54:53.15|-3.71,56:36:40.42|-2.2,5.80,2000 +CP-62 6277|PPM 365469|HR 8352|J215511.39-615311.7,f|D|F1,21:55:11.39|43.54,-61:53:11.79|-90.6,5.92,2000 +BD+60 2318|HR 8374|J215520.59+613230.5,f|S|G8,21:55:20.60|-2.50,61:32:30.52|-3,6.14,2000 +V13966|BD+64 1607|HR 8375|J215530.99+651914.9,f|D|B2,21:55:31.00|5.76,65:19:14.91|-1.4,5.95,2000 +CD-3118541|HR 8365|J215555.63-303621.3,f|S|G8,21:55:55.64|53.45,-30:36:21.31|-20,6.41,2000 +SAO 247229|CP-5310196|J215603.44-522749.5,f|S|G6,21:56:3.44|22.12,-52:27:49.53|-38.6,6.49,2000 +Ind Pi|CP-58 7911|HR 8362|J215614.05-575358.5,f|S|A3,21:56:14.06|16.10,-57:53:58.53|6.4,6.18,2000 +SAO 213414|CD-3714565|HR 8366|J215622.76-371513.1,f|S|A2,21:56:22.77|-25.19,-37:15:13.16|-9.6,5.46,2000 +V25793|BD+20 5046|PPM 113798|HR 8372|J215623.98+211423.4,f|V|K5,21:56:23.98|1.68,21:14:23.49|14.6,6.38,2000 +VV CEP|BD+62 2007|PPM 23328|HR 8383|J215639.14+633732.0,f|D|M2,21:56:39.14|-0.33,63:37:32.01|-3.8,5.17,2000 +Peg 17|BD+11 4696|HR 8373|J215656.37+120435.3,f|S|A2,21:56:56.37|-28.46,12:4:35.37|-13.9,5.55,2000 +BZ GRU|SAO 213427|CD-3814801|HR 8367|J215702.14-374448.6,f|V|F1,21:57:2.15|8.78,-37:44:48.64|5.1,6.18,2000 +BD+65 1691|PPM 23339|HR 8384|J215711.10+660922.1,f|S|B2,21:57:11.10|5.82,66:9:22.15|-0.3,6.43,2000 +V25805|BD+74 946|HR 8395|J215751.05+745948.1,f|V|K5,21:57:51.06|-3.42,74:59:48.17|-10.7,6.34,2000 +Ind Delta|SAO 247244|CP-55 9733|PPM 349835|HR 8368|J215755.07-545933.2,f|D|F0,21:57:55.07|43.03,-54:59:33.28|-3.7,4.41,2000 +SAO 145778|SD-06 5878|HR 8376|J215813.30-052529.7,f|S|F5,21:58:13.31|41.36,-5:25:29.72|-104.9,6.34,2000 +Ind Kappa1|BG IND|SAO 247247|CP-59 7744|PPM 349843|HR 8369|J215830.08-590043.7,f|V|F3,21:58:30.08|6.80,-59:0:43.71|28.7,6.14,2000 +BW CAP|SD-21 6131|PPM 273193|HR 8378|J215843.79-211058.6,f|V|M4,21:58:43.79|27.69,-21:10:58.60|-6.3,6.09,2000 +V25806|BD+62 2010|PPM 23356|HR 8388|J215853.52+624152.7,f|V|M3,21:58:53.52|12.04,62:41:52.75|14.1,6.00,2000 +SAO 145784|SD-05 5674|HR 8382|J215854.98-042223.1,f|D|K2,21:58:54.99|-1.05,-4:22:23.19|-252.8,6.24,2000 +Cep 16|BD+72 1009|J215914.96+731047.6,f|D|F5,21:59:14.97|-68.28,73:10:47.62|-159.8,5.04,2000 +SAO 213452|CD-3814820|HR 8379|J215917.91-382342.3,f|S|K0,21:59:17.91|42.44,-38:23:42.34|-1,5.50,2000 +Peg 18|SAO 127219|BD+06 4940|PPM 172531|HR 8385|J220007.92+064302.7,f|S|B3,22:0:7.93|14.60,6:43:2.77|0.7,6.00,2000 +SAO 247262|CP-56 9784|PPM 349864|HR 8381|J220024.24-555300.5,f|S|B9,22:0:24.25|23.73,-55:53:0.55|-14.4,6.02,2000 +BD+32 4316|HR 8391|J220026.70+330021.3,f|S|F5,22:0:26.70|-14.59,33:0:21.34|57.4,6.46,2000 +PsA Eta-12|V13993|CD-2918119|HR 8386|J220050.22-282713.4,f|D|B8,22:0:50.22|14.77,-28:27:13.45|0.3,5.43,2000 +Aqr 28|SAO 127235|BD-00 4296|PPM 172556|J220105.01+003616.9,f|S|K5,22:1:5.02|7.20,0:36:16.98|-11.6,5.60,2000 +Peg 20|BD+12 4737|HR 8392|J220105.34+130711.3,f|D|F4,22:1:5.35|57.56,13:7:11.36|-56.7,5.61,2000 +Peg 19|SAO 127239|BD+07 4779|PPM 172558|HR 8393|J220109.23+081525.7,f|S|K5,22:1:9.23|-7.42,8:15:25.79|-2.8,5.64,2000 +BD+52 3083|J220150.58+525256.1,f|S|B5,22:1:50.59|9.96,52:52:56.11|2.7,5.78,2000 +CP-78 1430|PPM 375221|J220152.61-773945.1,f|S|A5,22:1:52.62|-11.95,-77:39:45.16|-6.4,6.40,2000 +V14001|BD+10 4676|HR 8397|J220201.37+105825.7,f|V|B5,22:2:1.37|10.90,10:58:25.70|1.5,6.37,2000 +Mu Cep|Cep 14|LZ CEP|BD+57 2441|J220204.57+580001.3,f|V|O9,22:2:4.57|-3.50,58:0:1.32|-1.6,5.55,2000 +SAO 164827|SD-18 6056|HR 8394|J220211.85-175412.5,f|S|G5,22:2:11.85|117.61,-17:54:12.51|-59.9,6.29,2000 +V1942 CYG|BD+43 4119|J220256.66+443859.5,f|D|A0,22:2:56.66|-21.45,44:38:59.51|-32.3,5.60,2000 +SAO 257993|CP-76 1542|PPM 375229|J220303.80-760706.3,f|D|F3,22:3:3.81|27.82,-76:7:6.34|-66.3,5.94,2000 +Aqr 30|SAO 145836|SD-07 5688|J220316.45-063120.6,f|S|K0,22:3:16.46|47.84,-6:31:20.66|8.7,5.55,2000 +Aqr Omicron-31|Omicron Aquarii|SAO 145837|SD-02 5681|J220318.84-020919.3,f|S|B7,22:3:18.84|24.88,-2:9:19.31|-11.1,4.75,2000 +Peg 21|BD+10 4681|J220319.03+112311.5,f|S|B9,22:3:19.03|16.76,11:23:11.59|-1.6,5.83,2000 +Ind Epsilon|SAO 247287|CP-5710015|PPM 349918|HR 8387|J220321.65-564709.5,f|S|K4,22:3:21.66|3961.43,-56:47:9.51|-2538.3,4.72,2000 +BD+63 1802B|J220346.21+643741.4,f|D|F3,22:3:46.22|201.69,64:37:41.50|85.9,6.35,2000 +Cep Xi-17A|BD+63 1802A|Alkurhah|Al Kirdah|Kurhah|HR 8417|J220347.45+643740.6,f|D|A3,22:3:47.45|214.48,64:37:40.70|89.3,4.40,2000 +Cep 18|MO CEP|BD+62 2028|PPM 23421|HR 8416|J220352.97+630711.7,f|V|M5,22:3:52.98|36.69,63:7:11.71|58.3,5.29,2000 +PsA 13|V25822|SAO 213517|CD-3018985|J220423.83-295459.5,f|V|K5,22:4:23.84|2.86,-29:54:59.51|3.4,6.45,2000 +BD+32 4329|PPM 87366|HR 8412|J220434.51+325630.2,f|D|G5,22:4:34.52|6.17,32:56:30.28|-7.8,6.37,2000 +UU PSA|CD-2715757|J220436.76-264920.4,f|V|B4,22:4:36.77|12.58,-26:49:20.49|-9.5,5.96,2000 +Aqr 32|SAO 145853|BD-01 4242|PPM 181395|J220447.42-005422.8,f|S|A5,22:4:47.42|-20.10,-0:54:22.84|-42.6,5.28,2000 +Cep 20|V25825|BD+62 2029|PPM 23441|HR 8426|J220500.49+624708.4,f|V|K4,22:5:0.50|14.20,62:47:8.42|58.4,5.26,2000 +V25823|BD+14 4730|J220503.46+144857.3,f|V|Ma,22:5:3.46|-13.49,14:48:57.31|-14.9,6.40,2000 +Cep 19A|BD+61 2246|PPM 23444|HR 8428|J220508.78+621647.3,f|D|O9,22:5:8.79|-1.74,62:16:47.33|-3,5.12,2000 +BD+25 4671|HR 8415|J220511.33+264025.2,f|S|K2,22:5:11.33|28.42,26:40:25.28|29.2,5.75,2000 +HT LAC|BD+46 3574|HR 8421|J220516.50+464441.4,f|V|M4,22:5:16.50|-28.16,46:44:41.41|-20.2,6.21,2000 +Peg 23|BD+28 4284|HR 8419|J220534.67+285750.3,f|S|B9,22:5:34.67|30.05,28:57:50.33|-9.5,5.69,2000 +Peg Nu-22|V14020|SAO 127285|BD+04 4800|PPM 172643|HR 8413|J220540.75+050330.7,f|V|K4,22:5:40.75|101.60,5:3:30.71|101.2,4.85,2000 +Sadalmelik|Saad El Melik|Aqr Alpha-34|SAO 145862|BD-01 4246|HR 8414|J220547.03-001911.4,f|D|G2,22:5:47.04|17.85,-0:19:11.46|-9.9,2.94,2000 +V25828|BD+44 4041|HR 8422|J220550.44+450645.0,f|V|A0,22:5:50.45|13.13,45:6:45.01|-3.3,6.50,2000 +Ind Kappa2|CP-60 7541|PPM 349953|J220551.01-593809.8,f|S|K4,22:5:51.02|56.49,-59:38:9.86|-53.6,5.62,2000 +V0365 LAC|BD+47 3692|PPM 62472|HR 8427|J220551.21+481353.3,f|V|B2,22:5:51.22|-1.60,48:13:53.38|-4.3,6.27,2000 +V14028|BD+44 4043|PPM 62478|HR 8424|J220601.95+450051.6,f|V|K5,22:6:1.95|-9.33,45:0:51.65|-15.4,5.09,2000 +Gru Lambda|SAO 213543|CD-4014639|HR 8411|J220606.88-393236.0,f|S|K3,22:6:6.89|-24.18,-39:32:36.07|-125.2,4.46,2000 +BD+44 4044|PPM 62485|HR 8429|J220612.26+451455.2,f|S|A3,22:6:12.27|23.23,45:14:55.28|-5.5,6.19,2000 +V0444 CEP|BD+55 2679|HR 8434|J220613.56+562036.2,f|V|A0,22:6:13.57|16.38,56:20:36.23|2.6,6.39,2000 +Aqr Iota-33|SAO 164861|SD-14 6209|HR 8418|J220626.22-135210.8,f|S|B9,22:6:26.23|40.48,-13:52:10.85|-57.2,4.29,2000 +Peg Iota-24|V14034|BD+24 4533|J220700.66+252042.4,f|D|F5,22:7:0.67|296.74,25:20:42.40|26.9,3.77,2000 +BD+58 2393|HR 8442|J220709.63+585026.5,f|S|G6,22:7:9.63|-16.07,58:50:26.59|-22.3,6.35,2000 +V0399 LAC|BD+52 3114|HR 8443|J220725.58+531826.7,f|V|A3,22:7:25.59|-3.05,53:18:26.77|-3.8,6.18,2000 +BD+18 4930|HR 8435|J220728.59+192831.8,f|S|F5,22:7:28.59|121.90,19:28:31.89|36.8,5.74,2000 +OY PEG|BD+17 4693|HR 8436|J220729.96+180002.5,f|V|Ma,22:7:29.97|23.25,18:0:2.55|-33.2,6.33,2000 +Peg 25|V25838|BD+21 4695|HR 8438|J220750.30+214210.5,f|V|B7,22:7:50.30|-45.15,21:42:10.53|-68.3,5.79,2000 +Alnair|Al Nair|Gru Alpha|V14040|CD-4714063|PPM 327928|HR 8425|J220813.98-465739.5,f|D|B7,22:8:13.99|127.56,-46:57:39.51|-147.9,1.77,2000 +BD+49 3746|PPM 62516|HR 8445|J220816.28+494749.1,f|D|K5,22:8:16.29|1.55,49:47:49.16|-4.4,6.39,2000 +BD+24 4540|HR 8441|J220817.23+253236.6,f|S|F1,22:8:17.24|-26.93,25:32:36.68|-36.9,6.08,2000 +PsA Mu-14|V25837|SAO 213576|CD-3315922|HR 8431|J220823.00-325918.4,f|V|A2,22:8:23.01|80.02,-32:59:18.49|-28.9,4.50,2000 +PsA Upsilon|SAO 213577|CD-3415421|HR 8433|J220825.93-340237.8,f|S|M1,22:8:25.93|5.97,-34:2:37.83|-49.4,4.97,2000 +AR LAC|BD+45 3813|PPM 62525|HR 8448|J220840.81+454432.1,f|V|G2,22:8:40.82|-52.45,45:44:32.12|47.9,6.12,2000 +V25839|SAO 213583|CD-3315926|HR 8437|J220842.64-330732.4,f|V|A2,22:8:42.64|13.69,-33:7:32.49|24.9,6.38,2000 +Aqr 35|SAO 164888|SD-19 6227|HR 8439|J220858.99-183110.5,f|S|B2,22:8:58.99|0.14,-18:31:10.53|-7.5,5.80,2000 +Peg Pi1-27A|BD+32 4349|HR 8449|J220913.63+331020.4,f|D|G8,22:9:13.63|-60.01,33:10:20.41|-65.9,5.59,2000 +CD-2417029|PPM 273432|J220928.95-233932.7,f|S|G8,22:9:28.96|34.07,-23:39:32.79|3.3,6.37,2000 +Cep 24|BD+71 1111|HR 8468|J220948.43+722028.3,f|S|G7,22:9:48.43|33.40,72:20:28.34|3.1,4.80,2000 +V14049|SAO 213599|CD-3415430|HR 8444|J220955.70-340053.8,f|V|A5,22:9:55.70|-13.80,-34:0:53.88|28.3,5.38,2000 +CD-4814143|PPM 327961|J220957.88-480627.5,f|S|K3,22:9:57.88|68.61,-48:6:27.58|-62.7,6.43,2000 +Peg Pi2-29|BD+32 4352|PPM 87465|HR 8454|J220959.24+331041.6,f|S|F5,22:9:59.24|-12.30,33:10:41.61|-17.9,4.29,2000 +CD-2817622|PPM 273442|HR 8446|J221000.15-281732.7,f|S|A5,22:10:0.15|29.32,-28:17:32.77|24,6.44,2000 +PsA Tau-15|CD-3315941|HR 8447|J221008.78-323254.2,f|S|F6,22:10:8.78|428.63,-32:32:54.26|13.8,4.94,2000 +Biham|Baham|Peg Theta-26|V14057|BD+05 4961|PPM 172728|J221011.98+061152.3,f|V|A2,22:10:11.99|281.99,6:11:52.31|31.2,3.53,2000 +BD+71 1112|HR 8473|J221015.29+720640.5,f|S|B9,22:10:15.30|-8.48,72:6:40.55|-21.7,6.36,2000 +BD+18 4946|PPM 141134|HR 8455|J221019.02+193658.8,f|S|G0,22:10:19.02|92.12,19:36:58.82|-93.8,6.19,2000 +SAO 145914|SD-04 5623|HR 8451|J221021.10-035338.7,f|S|A1,22:10:21.11|16.31,-3:53:38.71|-44.2,6.29,2000 +BD+13 4861|PPM 141136|HR 8456|J221022.03+143747.4,f|D|K0,22:10:22.04|19.01,14:37:47.49|-25.1,6.36,2000 +Peg 28|BD+20 5093|PPM 114112|HR 8459|J221030.18+205840.7,f|S|A3,22:10:30.18|-2.80,20:58:40.74|-9.3,6.44,2000 +V25847|SAO 145916|SD-04 5625|HR 8453|J221033.74-041600.6,f|V|K0,22:10:33.75|72.40,-4:16:0.68|3.5,5.97,2000 +V25848|BD+10 4701|PPM 141144|HR 8458|J221037.43+113728.3,f|V|M1,22:10:37.43|-46.87,11:37:28.34|-54.4,5.78,2000 +Aqr 38|SD-12 6196|HR 8452|J221037.48-113353.7,f|S|B7,22:10:37.48|29.68,-11:33:53.78|8,5.44,2000 +BD+69 1228|HR 8474|J221038.79+700757.2,f|D|F2,22:10:38.79|-64.79,70:7:57.26|24.2,5.52,2000 +Cep Zeta-21|Zeta Cephei|BD+57 2475|HR 8465|J221051.27+581204.5,f|S|K1,22:10:51.28|13.36,58:12:4.54|4.5,3.34,2000 +BD+29 4604|PPM 87486|J221051.70+303310.8,f|S|A8,22:10:51.71|17.31,30:33:10.80|-17,6.30,2000 +SD-21 6173|PPM 273471|HR 8457|J221102.38-211358.0,f|S|F6,22:11:2.38|123.88,-21:13:58.04|-42.7,6.11,2000 +BD+50 3602|HR 8463|J221109.89+504924.2,f|D|A5,22:11:9.89|126.78,50:49:24.21|42.6,5.39,2000 +Cep Lambda-22|V14069|BD+58 2402|HR 8469|J221130.57+592452.1,f|V|O6,22:11:30.58|-7.25,59:24:52.16|-11.1,5.09,2000 +BD+56 2727|HR 8472|J221148.76+565021.6,f|D|F8,22:11:48.77|236.79,56:50:21.69|129.7,5.26,2000 +BD+15 4592|PPM 141171|HR 8461|J221151.33+160225.9,f|S|K1,22:11:51.33|-2.88,16:2:25.98|-18.8,5.93,2000 +CP-76 1549|HR 8432|J221154.98-760657.6,f|S|K0,22:11:54.98|-59.14,-76:6:57.68|-40.7,6.13,2000 +BD+58 2403|HR 8476|J221156.89+590504.4,f|S|K0,22:11:56.89|130.09,59:5:4.49|79.6,6.29,2000 +BD+60 2358|PPM 23552|HR 8479|J221202.01+604532.7,f|S|K1,22:12:2.02|1.17,60:45:32.74|9.5,5.36,2000 +BD+24 4548|PPM 114151|HR 8466|J221208.09+245702.3,f|S|K2,22:12:8.09|10.20,24:57:2.31|1.7,5.94,2000 +V25858|BD+62 2048|PPM 23557|HR 8483|J221222.45+631727.7,f|V|M3,22:12:22.45|3.71,63:17:27.73|-15.1,5.79,2000 +Aqr 39|V14068|SAO 164923|SD-14 6229|PPM 239931|HR 8462|J221225.75-141138.2,f|V|F2,22:12:25.76|26.03,-14:11:38.24|-47.5,6.05,2000 +SD-05 5732|HR 8467|J221243.86-044314.4,f|S|F7,22:12:43.87|-43.35,-4:43:14.45|-35.1,6.40,2000 +BD+33 4456|PPM 87524|HR 8475|J221247.82+343616.5,f|S|K2,22:12:47.82|19.38,34:36:16.53|-49.7,5.35,2000 +V14078|BD+72 1022|PPM 11122|HR 8493|J221252.76+731825.8,f|D|K0,22:12:52.77|21.50,73:18:25.89|20.6,6.08,2000 +CD-2616033|HR 8464|J221257.48-261940.0,f|S|A3,22:12:57.48|-25.54,-26:19:40.06|-28.5,6.19,2000 +BD+85 383|PPM 3919|HR 8546|J221310.61+860628.6,f|S|B9,22:13:10.62|51.31,86:6:28.64|40.3,5.27,2000 +BD+27 4280|PPM 114181|HR 8482|J221338.69+283628.8,f|S|K2,22:13:38.70|74.01,28:36:28.86|-4,5.87,2000 +CD-2515815|PPM 273524|J221344.43-251051.2,f|S|F6,22:13:44.43|71.13,-25:10:51.26|8.4,5.58,2000 +BD+44 4073|PPM 62654|HR 8487|J221349.24+452626.2,f|S|A0,22:13:49.24|73.46,45:26:26.21|4,5.53,2000 +HD 211242|BD+62 2053|PPM 23582|J221349.70+630944.4,f|S|B8,22:13:49.70|-8.40,63:9:44.41|-7.9,6.13,2000 +V14076|BD+38 4711|PPM 87555|HR 8485|J221352.73+394253.7,f|D|K2,22:13:52.73|37.62,39:42:53.74|15.6,4.50,2000 +Aqr 41A|SD-21 6180|PPM 273536|J221418.03-210428.4,f|D|K0,22:14:18.03|22.95,-21:4:28.44|55.4,5.32,2000 +PsA Lambda-16|CD-2817653|PPM 273537|HR 8478|J221418.75-274600.8,f|S|B8,22:14:18.75|22.83,-27:46:0.87|1.9,5.44,2000 +CD-4114804|HR 8477|J221438.65-412253.9,f|S|G5,22:14:38.65|570.40,-41:22:54.00|-791.1,6.23,2000 +HD 211211|BD+42 4333|PPM 62681|HR 8489|J221444.37+425714.0,f|S|A2,22:14:44.37|50.50,42:57:14.08|-22,5.72,2000 +Cep Epsilon-23A|Epsilon Cephei|HD 211336|BD+56 2741|HR 8494|J221502.18+570236.9,f|D|F0,22:15:2.19|476.46,57:2:36.91|50,4.18,2000 +CD-4514644|HR 8484|J221535.03-442705.3,f|S|G8,22:15:35.04|6.85,-44:27:5.40|-2.1,6.09,2000 +Gru Mu1|CD-4114810|HR 8486|J221536.92-412048.1,f|S|G8,22:15:36.92|46.06,-41:20:48.12|20.5,4.81,2000 +Lac 1|V25864|HD 211388|BD+37 4526|PPM 87596|HR 8498|J221558.17+374455.4,f|V|K3,22:15:58.18|8.78,37:44:55.45|0.8,4.12,2000 +HD 211287|BD+07 4834|PPM 172845|HR 8491|J221559.82+083258.4,f|S|A1,22:15:59.83|26.11,8:32:58.47|-10.3,6.20,2000 +Gru Mu2|CD-4215846|HR 8488|J221626.55-413738.0,f|S|G8,22:16:26.56|-13.57,-41:37:38.01|-9.5,5.11,2000 +HD 211554|BD+56 2746|J221626.56+571312.8,f|S|G8,22:16:26.56|47.35,57:13:12.86|5.4,5.88,2000 +HD 211432|BD+27 4288|PPM 114242|J221629.64+274814.5,f|S|G9,22:16:29.65|-14.99,27:48:14.51|-4.3,6.37,2000 +SAO 145989|HD 211356|SD-02 5726|HR 8495|J221633.65-013547.0,f|S|A5,22:16:33.65|-28.34,-1:35:47.00|-8.9,6.16,2000 +HD 211291|CD-2616057|PPM 273587|HR 8492|J221637.46-255353.3,f|S|K1,22:16:37.46|37.78,-25:53:53.38|-12.3,6.15,2000 +Aqr 42|SAO 164974|HD 211361|SD-13 6148|HR 8496|J221648.04-124953.1,f|S|K5,22:16:48.04|1.90,-12:49:53.17|4.7,5.34,2000 +Ancha|Aqr Theta-43|SAO 145991|HD 211391|SD-08 5845|HR 8499|J221650.03-074659.8,f|S|G9,22:16:50.04|118.89,-7:46:59.84|-21.9,4.17,2000 +V14095|SAO 145992|HD 211392|SD-09 5948|J221652.56-090224.2,f|V|K5,22:16:52.57|-58.07,-9:2:24.24|-12.1,5.79,2000 +HD 211364|CD-2317344|PPM 273597|HR 8497|J221659.83-230824.8,f|S|G5,22:16:59.84|77.66,-23:8:24.89|-61.1,6.18,2000 +Aqr 44|V14100|SAO 145993|HD 211434|SD-06 5960|J221706.49-052313.7,f|V|G6,22:17:6.50|-4.18,-5:23:13.79|19.5,5.75,2000 +BD+48 3665|PPM 62744|J221728.32+490737.0,f|D|G8,22:17:28.32|16.69,49:7:37.05|9,6.47,2000 +Oct Psi|CP-78 1442|HR 8471|J221750.59-773041.5,f|S|F3,22:17:50.60|-37.27,-77:30:41.59|14.3,5.48,2000 +HD 211575|BD-00 4333|PPM 181433|J221804.27-001415.5,f|S|F3,22:18:4.27|-41.40,-0:14:15.56|-54.7,6.39,2000 +Cep 25|HD 211833|BD+62 2059|PPM 23634|HR 8511|J221812.64+624815.7,f|S|K3,22:18:12.65|42.71,62:48:15.80|9.8,5.74,2000 +HD 211415|CP-5410055|J221815.61-533737.4,f|D|G3,22:18:15.62|439.89,-53:37:37.47|-632.6,5.40,2000 +Tuc Alpha|SAO 255193|HD 211416|CP-60 7561|PPM 365714|J221830.09-601534.5,f|S|K3,22:18:30.09|-71.51,-60:15:34.52|-38.2,2.86,2000 +HD 211797|BD+37 4537|PPM 87644|J221856.20+374609.4,f|D|A9,22:18:56.21|55.37,37:46:9.43|43.7,6.17,2000 +Aqr 45|SAO 164996|HD 211676|SD-14 6255|J221900.74-131817.9,f|S|G5,22:19:0.74|72.69,-13:18:17.98|-9.9,5.97,2000 +Oct Epsilon|Epsilon Octantis|SAO 258928|CP-81 995|PPM 378712|HR 8481|J222001.67-802623.0,f|S|M5,22:20:1.68|56.35,-80:26:23.09|-42.8,5.18,2000 +Aqr Rho-46|HD 211838|SD-08 5855|HR 8512|J222011.91-074915.9,f|S|B8,22:20:11.92|15.16,-7:49:15.97|1.6,5.35,2000 +Peg 30A|V14122|SAO 127453|HD 211924|BD+05 4998|PPM 172924|HR 8513|J222027.57+054722.1,f|D|B5,22:20:27.58|20.30,5:47:22.19|2.1,5.38,2000 +HD 211726|CP-58 7942|J222036.27-573035.2,f|S|K3,22:20:36.27|25.70,-57:30:35.22|-8.9,6.40,2000 +HD 212136|BD+57 2508|J222038.76+582435.6,f|S|G8,22:20:38.77|-3.38,58:24:35.66|21.2,6.45,2000 +BD+50 3673|HR 8519|J222039.52+505850.9,f|S|K2,22:20:39.52|2.55,50:58:50.93|-0.4,6.39,2000 +HD 211976|BD+07 4853|PPM 172935|HR 8514|J222055.79+081112.2,f|S|F6,22:20:55.80|43.65,8:11:12.27|21.6,6.17,2000 +Lac 2|V14130|BD+45 3894|PPM 62818|HR 8523|J222101.54+463211.6,f|D|B6,22:21:1.55|21.77,46:32:11.65|1.9,4.56,2000 +Peg 32A|BD+27 4299|PPM 114332|HR 8522|J222119.33+281949.9,f|D|B9,22:21:19.34|17.43,28:19:49.91|5.6,4.81,2000 +Peg 31|IN PEG|BD+11 4784|PPM 141365|J222131.07+121218.6,f|V|B2,22:21:31.07|6.16,12:12:18.67|5.5,4.82,2000 +Aqr 47|SD-22 5897|PPM 273696|HR 8516|J222135.56-213553.6,f|S|K2,22:21:35.57|-11.30,-21:35:53.63|-84.6,5.13,2000 +Sadachbia|Sadalachbia|Aqr Gamma-48|V14132|SD-02 5741|PPM 181446|HR 8518|J222139.37-012314.3,f|D|A0,22:21:39.38|129.26,-1:23:14.39|8.9,3.85,2000 +V0405 LAC|HD 212222|BD+41 4469|PPM 62836|HR 8528|J222150.87+420441.3,f|V|B5,22:21:50.87|15.70,42:4:41.36|-5.2,6.38,2000 +Gru Pi1|Pi1 Gruis|CD-4614292|HR 8521|J222244.20-455652.5,f|D|S5,22:22:44.21|27.85,-45:56:52.60|-10.9,6.13,2000 +HD 212334|BD+35 4785|J222250.28+363932.5,f|S|K0,22:22:50.28|4.69,36:39:32.57|53.4,6.43,2000 +HD 212454|BD+56 2765|HR 8535|J222300.18+571704.6,f|S|B8,22:23:0.19|17.51,57:17:4.60|4.8,6.18,2000 +HD 212495|BD+61 2291|PPM 23697|HR 8537|J222300.52+622509.6,f|S|A1,22:23:0.52|19.58,62:25:9.69|12,6.04,2000 +RW CEP|HD 212466|BD+55 2737|J222307.01+555747.6,f|V|G8,22:23:7.02|-2.94,55:57:47.63|-2.4,6.50,2000 +Gru Pi2|SAO 231111|HD 212132|CD-4614295|HR 8524|J222307.98-455542.5,f|D|F3,22:23:7.99|233.29,-45:55:42.56|-57.9,5.63,2000 +Aqr 49|HD 212271|CD-2515905|HR 8529|J222330.84-244545.5,f|S|G5,22:23:30.85|97.66,-24:45:45.58|-2.5,5.53,2000 +SD-07 5765|J222332.15-071139.9,f|S|G6,22:23:32.15|-6.25,-7:11:39.92|9,5.92,2000 +Lac Beta-3|HD 212496|BD+51 3358|HR 8538|J222333.62+521344.5,f|S|G9,22:23:33.62|-13.60,52:13:44.57|-186.4,4.43,2000 +Peg 33A|HD 212395|BD+20 5139|PPM 114367|HR 8532|J222339.56+205053.6,f|D|F7,22:23:39.56|335.17,20:50:53.63|-14.7,6.22,2000 +V25891|HD 212487|BD+37 4560|PPM 87726|HR 8536|J222354.25+383425.0,f|V|F5,22:23:54.25|255.65,38:34:25.00|123.5,6.18,2000 +Aqr 51A|SD-05 5780|HR 8533|J222406.88-045013.2,f|D|A0,22:24:6.88|26.31,-4:50:13.23|-7.8,5.79,2000 +Aqr 50|SD-14 6276|HR 8534|J222427.06-133145.7,f|S|G7,22:24:27.06|50.75,-13:31:45.73|14.2,5.77,2000 +Lac 4|HD 212593|BD+48 3715|HR 8541|J222430.99+492835.0,f|S|B9,22:24:30.99|-5.17,49:28:35.01|-3.4,4.60,2000 +Ind Nu|HD 211998|CP-72 2690|PPM 375345|HR 8515|J222436.88-721519.4,f|D|A3,22:24:36.88|1302.54,-72:15:19.48|-673.9,5.29,2000 +SAO 247441|CP-58 7954|HR 8531|J222456.39-574750.6,f|D|G3,22:24:56.39|180.74,-57:47:50.70|-331.3,5.32,2000 +HD 212211|CP-71 2686|PPM 375348|HR 8527|J222510.60-702553.8,f|S|F3,22:25:10.60|121.78,-70:25:53.84|-62.3,5.78,2000 +Aqr Pi-52|Pi Aquarii|HD 212571|BD+00 4872|HR 8539|J222516.62+012238.6,f|S|B1,22:25:16.62|18.44,1:22:38.64|3.4,4.81,2000 +BD+17 4746|PPM 141438|HR 8543|J222540.69+182639.5,f|S|K0,22:25:40.70|28.74,18:26:39.54|28.9,6.27,2000 +HD 212168|CP-75 1748|PPM 375351|HR 8526|J222551.15-750056.4,f|D|G3,22:25:51.16|58.56,-75:0:56.48|12.5,6.12,2000 +BD+70 1240|PPM 11217|HR 8557|J222600.81+704615.2,f|S|K5,22:26:0.82|19.71,70:46:15.23|5.3,5.47,2000 +SAO 191144|HD 212643|CD-2417171|PPM 273799|HR 8542|J222610.70-234056.8,f|S|A0,22:26:10.70|12.23,-23:40:56.81|-1.9,6.30,2000 +Aqr 53A|HD 212698|SD-17 6521|HR 8545|J222634.27-164431.6,f|D|G1,22:26:34.28|209.72,-16:44:31.70|4,6.27,2000 +Aqr 53B|HD 212697|SD-17 6520|HR 8544|J222634.29-164429.9,f|D|G2,22:26:34.30|287.57,-16:44:29.95|-43.7,5.55,2000 +Peg 34A|SAO 127529|HD 212754|BD+03 4705|HR 8548|J222637.38+042337.5,f|D|F7,22:26:37.39|286.41,4:23:37.56|52.9,5.77,2000 +Cep Rho-28|BD+78 796|PPM 11222|HR 8578|J222642.40+784709.0,f|S|A2,22:26:42.40|-14.09,78:47:9.07|-37.1,5.84,2000 +HD 212883|BD+36 4835|PPM 87781|HR 8549|J222645.55+372637.3,f|D|B2,22:26:45.56|-0.83,37:26:37.34|-5.2,6.49,2000 +Cep 26|V25905|BD+64 1664|PPM 23736|HR 8561|J222705.31+650756.1,f|V|B0,22:27:5.31|-0.76,65:7:56.17|-1.9,5.53,2000 +Tuc Delta|V14158|SAO 255222|HD 212581|CP-65 4044A|J222719.96-645758.8,f|D|B9,22:27:19.97|68.68,-64:57:58.88|10.2,4.50,2000 +HD 212978|BD+39 4841|PPM 87797|HR 8553|J222726.49+394836.0,f|S|B2,22:27:26.50|-0.58,39:48:36.09|-6.1,6.15,2000 +HD 212988|BD+31 4701|HR 8555|J222746.25+315024.1,f|S|K2,22:27:46.26|50.84,31:50:24.16|28.6,5.99,2000 +Peg 35A|HD 212943|BD+03 4710|HR 8551|J222751.52+044144.3,f|D|K1,22:27:51.52|77.29,4:41:44.39|-307.4,4.80,2000 +BD+26 4437|PPM 114464|J222811.12+270107.7,f|S|K0,22:28:11.13|-35.55,27:1:7.70|-33.4,6.50,2000 +HD 213242|BD+63 1852|PPM 23753|HR 8568|J222819.48+640506.5,f|S|K0,22:28:19.49|9.64,64:5:6.56|-31.4,6.29,2000 +SAO 255227|HD 212728|CP-68 3493|PPM 365818|HR 8547|J222837.67-672920.6,f|S|A4,22:28:37.67|151.44,-67:29:20.61|-70.7,5.57,2000 +Gru Nu|HD 212953|CD-3914723|HR 8552|J222839.20-390754.4,f|D|G9,22:28:39.21|37.23,-39:7:54.45|-160.7,5.47,2000 +Aqr Zeta-55B|BD-00 4365B|PPM 181465|HR 8558|J222849.89-000113.8,f|D|F6,22:28:49.89|239.70,-0:1:13.88|10.3,3.66,2000 +Aqr Zeta-55A|V25909|BD-00 4365A|PPM 181465|HR 8559|J222849.91-000111.8,f|D|F3,22:28:49.91|191.25,-0:1:11.90|37.5,4.10,2000 +Peg 36|SAO 127544|HD 213119|BD+08 4874|HR 8562|J222907.98+090744.5,f|S|K5,22:29:7.98|51.69,9:7:44.52|-20.5,5.58,2000 +V25915|BD+57 2547|J222909.24+582414.7,f|D|B7,22:29:9.25|16.50,58:24:14.76|4.7,6.27,2000 +HD 213179|BD+26 4439|PPM 114483|HR 8564|J222910.22+264547.5,f|S|K2,22:29:10.23|26.12,26:45:47.52|-4.4,5.77,2000 +Cep Delta-27A|Delta Cephei|BD+57 2548|HR 8571|J222910.26+582454.7,f|D|F5,22:29:10.27|16.50,58:24:54.72|3.6,4.07,2000 +Gru Delta1|V14169|SAO 231154|CD-4414931|PPM 328298|HR 8556|J222916.17-432944.0,f|D|G6,22:29:16.17|25.57,-43:29:44.03|-4.2,3.96,2000 +Lac 5A|V0412 LAC|BD+46 3719|HR 8572|J222931.82+474224.7,f|D|M0,22:29:31.82|-0.61,47:42:24.79|-3.4,4.35,2000 +Gru Delta2|Delta2 Gruis|SAO 231161|CD-4414935|J222945.43-434457.2,f|D|M4,22:29:45.43|-14.95,-43:44:57.20|1.8,4.15,2000 +V14175|SAO 191182|HD 213135|CD-2715932|PPM 273867|HR 8563|J222946.01-270626.2,f|V|F1,22:29:46.02|119.37,-27:6:26.22|-20.3,5.94,2000 +Cep Rho-29|HD 213798|BD+78 801|Al Kalb al Rai|PPM 11249|HR 8591|J222952.97+784927.4,f|S|A3,22:29:52.98|3.46,78:49:27.43|-21.7,5.45,2000 +Peg 37|SAO 127551|HD 213235|BD+03 4713|HR 8566|J222957.93+042554.0,f|D|F2,22:29:57.94|-18.84,4:25:54.08|-151.1,5.51,2000 +SAO 165123|HD 213198|SD-13 6204|HR 8565|J223001.48-125454.4,f|S|F3,22:30:1.48|160.97,-12:54:54.42|0.5,6.40,2000 +Peg 38|HD 213323|BD+31 4708|PPM 87852|HR 8574|J223001.81+323421.4,f|S|B9,22:30:1.81|30.97,32:34:21.50|-14,5.63,2000 +V0350 LAC|HD 213389|BD+48 3747|HR 8575|J223006.50+492123.0,f|D|K2,22:30:6.50|-25.11,49:21:23.08|-30.3,6.36,2000 +Aqr 56|SAO 165127|HD 213236|SD-15 6231|HR 8567|J223017.35-143508.6,f|S|B8,22:30:17.35|34.26,-14:35:8.64|-34.5,6.35,2000 +Lac 6|BD+42 4420|HR 8579|J223029.26+430724.1,f|S|B2,22:30:29.26|-2.08,43:7:24.15|-5.8,4.53,2000 +Aqr Sigma-57|SAO 165134|SD-11 5850|HR 8573|J223038.81-104040.6,f|S|A0,22:30:38.82|1.77,-10:40:40.62|-26.3,4.83,2000 +PsA Zeta|V14180|SAO 191196|HD 213296|CD-2616175|PPM 273895|J223053.77-260425.5,f|V|K1,22:30:53.77|39.21,-26:4:25.51|-75.5,6.44,2000 +Lac Alpha-7|HD 213558|BD+49 3875|HR 8585|J223117.50+501656.9,f|D|A1,22:31:17.50|137.26,50:16:56.97|17.2,3.78,2000 +SAO 146135|HD 213429|SD-07 5797|HR 8581|J223118.31-063318.5,f|S|F7,22:31:18.31|160.64,-6:33:18.55|-108.6,6.16,2000 +SAO 146136|HD 213428|SD-03 5460|J223118.41-025440.5,f|S|K0,22:31:18.42|-9.44,-2:54:40.59|-38.7,6.15,2000 +PsA Beta-17A|SAO 213883|HD 213398|CD-3217126|HR 8576|J223130.33-322045.8,f|D|A0,22:31:30.33|59.69,-32:20:45.86|-18.7,4.29,2000 +GX PEG|HD 213534|BD+28 4389|PPM 114531|HR 8584|J223134.35+293233.9,f|V|A5,22:31:34.35|-30.15,29:32:33.93|-33.2,6.34,2000 +Oct Upsilon|SAO 258932|HD 211539|CP-86 406|PPM 378733|J223137.51-855802.1,f|S|K0,22:31:37.52|-37.64,-85:58:2.11|61.3,5.76,2000 +Aqr 58|SAO 165147|HD 213464|SD-11 5855|HR 8583|J223141.32-105420.0,f|S|A8,22:31:41.32|71.14,-10:54:20.02|-39.8,6.38,2000 +BD+75 836|HR 8599|J223216.22+761335.1,f|S|A2,22:32:16.23|-19.96,76:13:35.19|-11.1,5.70,2000 +BD+53 2910|HR 8589|J223218.71+540213.3,f|S|G8,22:32:18.72|30.30,54:2:13.32|14.5,6.41,2000 +BD+39 4871|PPM 87893|HR 8588|J223226.37+394647.0,f|D|A6,22:32:26.38|4.73,39:46:47.04|-8.9,5.89,2000 +Peg 39|V25922|HD 213617|BD+19 4949|PPM 114549|HR 8586|J223235.48+201348.0,f|V|F1,22:32:35.48|166.64,20:13:48.07|30.5,6.44,2000 +HD 213644|BD+15 4670|PPM 141561|HR 8587|J223246.90+155147.7,f|S|K0,22:32:46.91|20.49,15:51:47.75|17.1,6.35,2000 +Tuc Nu|Nu Tucanae|SAO 255247|HD 213442|CP-62 6348|PPM 365871|HR 8582|J223300.06-615855.6,f|S|M4,22:33:0.06|40.80,-61:58:55.64|-20.1,4.95,2000 +HD 213973|BD+69 1262|HR 8595|J223302.91+695448.7,f|D|A9,22:33:2.91|128.63,69:54:48.76|71.2,6.01,2000 +BD+69 1263|HR 8598|J223316.82+702225.3,f|D|A0,22:33:16.83|40.26,70:22:25.37|13.4,6.32,2000 +V14213|BD+55 2769|HR 8594|J223340.64+563729.0,f|V|G8,22:33:40.65|78.47,56:37:29.05|41.1,5.73,2000 +Aqr 60A|HD 213789|SD-02 5781|PPM 181485|J223402.91-013427.3,f|D|G6,22:34:2.91|39.73,-1:34:27.37|-37.3,5.88,2000 +Aqr Upsilon-59|SAO 191235|HD 213845|SD-21 6251|HR 8592|J223441.63-204229.5,f|S|F4,22:34:41.64|221.55,-20:42:29.58|-146.6,5.21,2000 +Aqr Eta-62|SAO 146181|HD 213998|BD-00 4384|HR 8597|J223521.38-000702.9,f|S|B9,22:35:21.38|88.50,-0:7:2.99|-56.1,4.04,2000 +CP-79 1206|HR 8577|J223526.52-784617.7,f|S|K1,22:35:26.52|54.18,-78:46:17.71|-7.5,6.15,2000 +SAO 191246|HD 213986|CD-2417232|PPM 273998|HR 8596|J223536.37-235927.9,f|S|K5,22:35:36.38|25.90,-23:59:27.94|-6.3,5.97,2000 +Cep 31|BD+72 1049|PPM 11278|HR 8615|J223546.13+733835.4,f|S|F3,22:35:46.14|173.32,73:38:35.48|25.1,5.08,2000 +SAO 165178|SD-18 6154|J223548.80-172737.5,f|S|K4,22:35:48.80|-30.48,-17:27:37.53|-45.3,6.42,2000 +HD 214279|BD+55 2779|J223551.99+560414.0,f|S|A3,22:35:51.99|14.15,56:4:14.07|-0.7,6.38,2000 +HD 214167|BD+38 4808B|PPM 87962|J223552.09+393741.3,f|D|B2,22:35:52.09|-14.33,39:37:41.33|-5.7,6.42,2000 +Lac 8A|V14242|HD 214168|BD+38 4808A|PPM 87963|J223552.28+393803.5,f|D|B2,22:35:52.29|1.16,39:38:3.59|-4.4,5.71,2000 +HD 213884|CP-58 7971|HR 8593|J223552.93-575301.5,f|S|A5,22:35:52.93|87.96,-57:53:1.51|-9.9,6.23,2000 +V14243|BD+49 3903|J223553.38+500414.8,f|V|B3,22:35:53.38|6.16,50:4:14.84|0,6.29,2000 +BD+34 4728|PPM 87972|J223607.90+353439.0,f|S|K0,22:36:7.90|5.25,35:34:39.01|-58.5,6.11,2000 +Gru Sigma1|SAO 231211|CD-4114959|PPM 328426|J223629.30-403457.6,f|S|A3,22:36:29.31|46.14,-40:34:57.68|-72.2,6.28,2000 +SAO 213948|HD 214122|CD-3217161|J223635.44-313949.6,f|D|K1,22:36:35.44|-41.24,-31:39:49.64|-39.4,5.82,2000 +BD+10 4781|PPM 141633|J223636.33+114147.8,f|S|A1,22:36:36.33|-13.66,11:41:47.89|6.1,6.43,2000 +HD 214313|BD+34 4729|J223648.68+353908.7,f|S|K5,22:36:48.68|-5.24,35:39:8.71|-1.8,6.28,2000 +Gru Sigma2|SAO 231217|CD-4114963|PPM 328437|J223658.85-403527.7,f|D|A1,22:36:58.85|45.22,-40:35:27.72|-69.7,5.88,2000 +HD 214298|BD+11 4838|PPM 141642|J223704.84+123436.5,f|S|K5,22:37:4.85|-12.88,12:34:36.54|-32.5,6.29,2000 +BD+74 978|PPM 11293|HR 8625|J223712.96+752218.5,f|S|M1,22:37:12.97|44.70,75:22:18.52|7.8,5.79,2000 +Lac 9|HD 214454|BD+50 3770|HR 8613|J223722.41+513242.4,f|S|A8,22:37:22.42|-51.31,51:32:42.44|-103.3,4.65,2000 +Situla|Aqr Kappa-63|HD 214376|SD-04 5716|J223745.38-041341.0,f|D|K1,22:37:45.38|-68.36,-4:13:41.00|-120.5,5.03,2000 +HD 214558|BD+44 4185|HR 8617|J223817.40+451058.5,f|S|G2,22:38:17.40|-5.18,45:10:58.57|-6.7,6.39,2000 +V14255|SAO 146216|HD 214448|SD-08 5912|HR 8612|J223822.14-075351.2,f|D|G0,22:38:22.14|71.32,-7:53:51.21|-2.6,6.25,2000 +V0416 LAC|HD 214665|BD+56 2821|HR 8621|J223837.92+564744.2,f|D|M4,22:38:37.92|52.41,56:47:44.27|-32.3,5.18,2000 +Cep 30|HD 214734|BD+62 2102|HR 8627|J223839.05+633504.0,f|S|A3,22:38:39.05|-1.13,63:35:4.10|-20.2,5.20,2000 +SAO 191292|HD 214462|CD-2918414|HR 8614|J223844.67-284453.5,f|S|K1,22:38:44.67|-47.08,-28:44:53.57|-11.8,6.46,2000 +VZ PSA|SAO 213981|HD 214484|CD-3316160|HR 8616|J223851.46-330452.8,f|V|A2,22:38:51.47|4.27,-33:4:52.85|14.6,5.67,2000 +Peg 40|HD 214567|BD+18 5014|PPM 141681|HR 8618|J223852.59+193120.1,f|D|G8,22:38:52.59|-45.24,19:31:20.15|-94.2,5.84,2000 +Lac 10|V25932|BD+38 4826|HR 8622|J223915.67+390300.9,f|D|O9,22:39:15.68|-0.35,39:3:0.97|-5.7,4.89,2000 +HD 214714|BD+36 4902|HR 8626|J223934.33+373534.1,f|D|G3,22:39:34.33|11.17,37:35:34.14|1.2,6.03,2000 +HD 214599|CD-2817873|HR 8619|J223944.18-281932.3,f|D|K0,22:39:44.18|94.80,-28:19:32.38|-41.2,6.31,2000 +Peg 41|V25935|HD 214698|BD+18 5021|HR 8624|J223947.01+194052.0,f|V|A2,22:39:47.01|-2.12,19:40:52.05|-9.7,6.33,2000 +HD 214878|BD+53 2950|HR 8633|J224018.40+535045.3,f|S|K0,22:40:18.41|6.37,53:50:45.34|-18.3,5.93,2000 +V14266|CD-3118920|HR 8623|J224022.30-303931.9,f|V|K3,22:40:22.31|-107.61,-30:39:31.93|-209.5,5.88,2000 +Lac 11|HD 214868|BD+43 4266|HR 8632|J224030.85+441634.6,f|S|K2,22:40:30.86|94.19,44:16:34.70|10,4.50,2000 +PsA Epsilon-18|V14270|SAO 191318|HD 214748|CD-2716010|PPM 274114|HR 8628|J224039.34-270237.0,f|V|B8,22:40:39.34|22.04,-27:2:37.02|-0.9,4.19,2000 +SAO 146239|SD-04 5728|HR 8629|J224047.95-033315.2,f|D|F6,22:40:47.95|-11.23,-3:33:15.26|-43.2,6.32,2000 +SAO 247544|HD 214632|CP-58 7984|J224048.91-572520.3,f|S|K4,22:40:48.92|56.62,-57:25:20.36|-6.6,5.97,2000 +BD+13 4971|PPM 141726|HR 8631|J224052.68+143256.9,f|D|G4,22:40:52.68|272.23,14:32:56.98|123.5,5.74,2000 +Homam|Al Hammam|Peg Zeta-42|HD 214923|BD+10 4797|PPM 141743|HR 8634|J224127.72+104952.9,f|D|B8,22:41:27.72|77.35,10:49:52.91|-11,3.42,2000 +Lac 12|DD LAC|HD 214993|BD+39 4912|PPM 63267|J224128.65+401331.6,f|D|B2,22:41:28.65|-0.69,40:13:31.62|-5.9,5.24,2000 +HD 214979|BD+30 4771|HR 8638|J224131.30+305757.1,f|S|K5,22:41:31.31|48.75,30:57:57.10|1.1,6.37,2000 +BD+40 4885|PPM 63272|HR 8643|J224136.05+413256.8,f|S|G9,22:41:36.05|140.88,41:32:56.84|60,5.94,2000 +Peg Omicron-43|HD 214994|BD+28 4436|PPM 114731|HR 8641|J224145.40+291827.5,f|S|A1,22:41:45.41|-2.09,29:18:27.51|-20,4.80,2000 +HD 214995|BD+13 4974|PPM 141748|HR 8642|J224157.45+143059.0,f|S|K5,22:41:57.46|94.53,14:30:59.01|-21.2,5.92,2000 +LP AQR|SAO 146251|HD 214983|SD-05 5843|J224206.02-050607.1,f|D|Ma,22:42:6.03|68.88,-5:6:7.14|-53.3,6.27,2000 +HD 215159|BD+53 2960|HR 8648|J224220.80+535431.4,f|S|K2,22:42:20.81|-2.92,53:54:31.49|-8.4,6.11,2000 +PsA 19|V25945|SAO 191337|HD 214966|CD-3019267|PPM 274153|HR 8637|J224222.08-292139.7,f|V|M5,22:42:22.09|16.21,-29:21:39.77|-19.2,6.17,2000 +V14277|SAO 231257|HD 214953|CD-4714307|PPM 328535|HR 8635|J224236.88-471238.9,f|D|G0,22:42:36.88|6.11,-47:12:38.93|-331.4,6.00,2000 +Gru Beta|Beta Gruis|SAO 231258|HD 214952|CD-4714308|PPM 328536|HR 8636|J224240.05-465304.4,f|S|M4,22:42:40.05|135.63,-46:53:4.48|-4.5,2.12,2000 +V14278|HD 214987|CD-4415017|PPM 328538|HR 8639|J224243.08-441452.9,f|V|K0,22:42:43.08|33.74,-44:14:52.93|35.4,6.07,2000 +HD 215191|BD+37 4670|PPM 88118|HR 8651|J224255.44+374809.8,f|S|B1,22:42:55.45|-1.07,37:48:9.85|-5.3,6.43,2000 +Matar|Peg Eta-44A|V14285|HD 215182|BD+29 4741|PPM 88121|J224300.13+301316.4,f|D|G2,22:43:0.14|13.09,30:13:16.48|-26.1,2.94,2000 +V14290|HD 215242|BD+46 3803|HR 8652|J224304.35+471007.2,f|D|A1,22:43:4.36|2.24,47:10:7.23|-2.7,6.43,2000 +Aqr 67|SAO 146273|HD 215143|SD-07 5838|HR 8647|J224314.26-065746.5,f|S|A0,22:43:14.26|26.21,-6:57:46.57|-10.1,6.42,2000 +Gru Rho|SAO 231265|CD-4216049|PPM 328547|HR 8644|J224329.97-412451.6,f|D|K0,22:43:29.98|10.24,-41:24:51.65|-94,4.84,2000 +Aqr 66|V14291|SAO 165252|HD 215167|SD-19 6324|HR 8649|J224335.23-184949.3,f|V|K4,22:43:35.23|-31.38,-18:49:49.35|-28,4.68,2000 +HD 215359|BD+38 4855|HR 8654|J224405.21+392755.2,f|D|K5,22:44:5.22|7.64,39:27:55.25|-28.4,5.98,2000 +Lac 13|HD 215373|BD+41 4594|PPM 63335|HR 8656|J224405.47+414909.2,f|D|K0,22:44:5.48|-8.38,41:49:9.24|3.1,5.11,2000 +SAO 255299|HD 215121|CP-61 6676|HR 8646|J224416.47-602958.6,f|S|F3,22:44:16.47|2.95,-60:29:58.64|20.1,6.30,2000 +HD 215518|BD+51 3460|HR 8661|J224449.11+523101.9,f|S|K2,22:44:49.12|-5.11,52:31:1.95|6.6,6.41,2000 +HD 215473|BD+38 4858|PPM 88151|J224452.98+391203.6,f|S|K5,22:44:52.98|16.39,39:12:3.70|-20,6.45,2000 +HD 215588|BD+57 2595|J224503.63+580849.3,f|S|F5,22:45:3.63|-62.38,58:8:49.38|-137.2,6.45,2000 +Peg 45|BD+18 5046|PPM 141811|J224528.17+192159.6,f|S|G5,22:45:28.18|-26.04,19:21:59.62|58,6.27,2000 +HD 215549|BD+29 4753|PPM 88163|J224534.46+302633.2,f|D|K1,22:45:34.47|-250.88,30:26:33.21|-349.5,6.39,2000 +Gru Eta|HD 215369|CP-5410123|HR 8655|J224537.88-533000.4,f|D|K2,22:45:37.88|30.60,-53:30:0.44|17.3,4.85,2000 +SAO 231278|CD-4714320|PPM 328575|HR 8657|J224540.78-463250.3,f|S|K2,22:45:40.78|-29.40,-46:32:50.38|-11.4,5.50,2000 +Oct Beta|SAO 258941|HD 214846|CP-82 889|J224603.50-812253.8,f|S|A9,22:46:3.51|-55.34,-81:22:53.81|0.9,4.14,2000 +V14311|HD 215664|BD+43 4300|PPM 63383|HR 8666|J224610.22+443245.7,f|V|F0,22:46:10.22|142.82,44:32:45.80|32.1,5.84,2000 +V25954|SAO 231287|CD-5013788|PPM 328593|HR 8659|J224628.29-494108.8,f|V|K1,22:46:28.29|86.47,-49:41:8.84|-275.6,6.50,2000 +Peg Lambda-47|HD 215665|BD+22 4709|HR 8667|J224631.87+233356.3,f|S|G8,22:46:31.88|57.06,23:33:56.35|-10.5,3.96,2000 +Peg Xi-46A|V25957|HD 215648|BD+11 4875|PPM 141833|HR 8665|J224641.58+121022.3,f|D|F6,22:46:41.58|233.14,12:10:22.40|-492,4.21,2000 +HD 215669|CD-3415735|HR 8668|J224719.16-340942.1,f|S|K1,22:47:19.16|-62.56,-34:9:42.20|27,6.29,2000 +BD+57 2612|HR 8677|J224723.23+582858.9,f|S|B9,22:47:23.24|7.76,58:28:58.91|7.6,6.32,2000 +HD 216446|BD+82 703|J224729.06+830913.7,f|D|K3,22:47:29.06|23.66,83:9:13.79|47.2,4.78,2000 +Aqr 68|SAO 165293|HD 215721|SD-20 6486|J224733.12-193648.1,f|S|G7,22:47:33.12|-102.16,-19:36:48.15|-206,5.25,2000 +SAO 255316|HD 215562|CP-66 3709|J224735.66-653336.9,f|D|K1,22:47:35.66|-30.78,-65:33:36.91|-6.9,6.48,2000 +Aqr Tau-69|SAO 165298|HD 215766|SD-14 6346|HR 8673|J224742.76-140323.1,f|D|A0,22:47:42.77|28.96,-14:3:23.14|-9.4,5.68,2000 +SAO 191412|HD 215782|CD-2616324|PPM 274254|HR 8674|J224756.20-255443.3,f|S|G5,22:47:56.20|106.99,-25:54:43.30|-115.4,6.32,2000 +V14321|HD 215943|BD+36 4934|HR 8678|J224811.03+372500.0,f|V|G5,22:48:11.04|-42.53,37:25:0.08|-63.5,5.81,2000 +SAO 255321|HD 215682|CP-62 6369|HR 8669|J224821.38-614103.7,f|S|K0,22:48:21.39|73.07,-61:41:3.71|-3.3,6.37,2000 +Aqr 70|FM AQR|HD 215874|SD-11 5923|HR 8676|J224830.20-103319.7,f|V|A9,22:48:30.21|30.82,-10:33:19.72|7.6,6.19,2000 +Gru Epsilon|V14320|SAO 247593|HD 215789|CD-5113389|HR 8675|J224833.29-511900.7,f|V|A3,22:48:33.30|108.47,-51:19:0.71|-65.9,3.49,2000 +BD+62 2115|PPM 23967|HR 8683|J224844.25+625618.2,f|S|K0,22:48:44.26|13.85,62:56:18.28|-49.7,6.07,2000 +BD+53 2993|PPM 41125|HR 8682|J224847.89+542453.6,f|S|B5,22:48:47.90|13.27,54:24:53.61|-2.1,6.14,2000 +SAO 255324|HD 215769|CP-64 4300|J224855.27-634306.2,f|S|B9,22:48:55.28|2.32,-63:43:6.25|5,6.50,2000 +HD 215729|CP-71 2726|PPM 375481|HR 8672|J224917.47-702052.7,f|S|A2,22:49:17.47|12.96,-70:20:52.73|33,6.34,2000 +Aqr Tau-71A|V14329|SAO 165321|SD-14 6354|HR 8679|J224935.50-133533.4,f|D|M0,22:49:35.50|-12.54,-13:35:33.48|-38.8,4.04,2000 +Cep Iota-32|HD 216228|BD+65 1814|PPM 23981|HR 8694|J224940.81+661201.4,f|S|K0,22:49:40.82|-66.10,66:12:1.47|-124.7,3.50,2000 +HD 216174|BD+55 2820|PPM 41144|HR 8688|J224946.31+555409.9,f|S|K1,22:49:46.32|83.42,55:54:10.00|38,5.44,2000 +SAO 214119|CD-3316244|J224959.22-324819.8,f|D|F0,22:49:59.22|-29.50,-32:48:19.86|-40.9,6.34,2000 +Peg Mu-48|HD 216131|BD+23 4615|PPM 114859|HR 8684|J225000.19+243605.6,f|S|G8,22:50:0.19|144.16,24:36:5.68|-43.4,3.51,2000 +BD+49 3954|PPM 41153|HR 8692|J225010.09+504036.9,f|S|G4,22:50:10.09|3.71,50:40:36.90|-1,6.24,2000 +Lac 14|V0360 LAC|BD+41 4623|PPM 63477|J225021.77+415712.2,f|V|B3,22:50:21.77|8.25,41:57:12.22|-3.9,5.93,2000 +Oct Xi|Xi Octantis|SAO 258946|HD 215573|CP-80 1055|PPM 378777|HR 8663|J225022.81-800725.8,f|S|B6,22:50:22.81|20.14,-80:7:25.84|-12.8,5.32,2000 +SAO 214134|HD 216149|CD-3914848|HR 8685|J225102.15-390924.6,f|S|M0,22:51:2.16|18.26,-39:9:24.60|-6.5,5.40,2000 +HD 217157|BD+84 517|HR 8736|J225103.03+852225.4,f|S|K5,22:51:3.03|13.22,85:22:25.46|114.4,5.90,2000 +PsA 21|SAO 191444|CD-3019324|HR 8693|J225120.93-293210.7,f|S|G8,22:51:20.94|-7.57,-29:32:10.71|-14.5,5.99,2000 +BD+60 2450|HR 8696|J225122.62+614148.2,f|D|G8,22:51:22.63|97.15,61:41:48.27|42,5.83,2000 +SAO 255336|HD 216169|CP-60 7610|HR 8686|J225144.95-595252.8,f|S|K1,22:51:44.95|-42.38,-59:52:52.89|-4.7,6.46,2000 +Lac 15A|HD 216397|BD+42 4521|HR 8699|J225202.03+431844.7,f|D|M0,22:52:2.04|109.36,43:18:44.70|21.5,4.94,2000 +SAO 255339|HD 216187|CP-63 4826|HR 8689|J225210.01-631119.2,f|D|K0,22:52:10.01|26.39,-63:11:19.20|-40.7,6.15,2000 +Peg Sigma-49|HD 216385|BD+09 5122|PPM 173512|HR 8697|J225224.07+095008.3,f|D|F7,22:52:24.08|521.87,9:50:8.39|44.1,5.16,2000 +PsA Gamma-22|V14338|SAO 214153|HD 216336|CD-3316270|HR 8695|J225231.53-325231.8,f|D|A0,22:52:31.53|-33.38,-32:52:31.82|-22.2,4.51,2000 +Aqr Lambda-73|Lambda Aquarii|SAO 146362|HD 216386|SD-08 5968|HR 8698|J225236.87-073446.5,f|S|M2,22:52:36.88|19.48,-7:34:46.56|32.7,3.75,2000 +V25970|HD 216523|BD+49 3962|PPM 41211|J225252.24+502444.2,f|V|B8,22:52:52.25|15.77,50:24:44.23|-1.3,6.47,2000 +IM PEG|HD 216489|BD+16 4831|PPM 141947|J225302.26+165028.2,f|V|K1,22:53:2.27|-20.96,16:50:28.30|-27.6,5.89,2000 +HD 216595|BD+59 2595|J225303.78+600603.7,f|S|A5,22:53:3.78|12.79,60:6:3.70|2.2,6.01,2000 +V0377 LAC|HD 216538|BD+39 4957|PPM 63529|J225311.37+401002.5,f|V|B7,22:53:11.38|9.17,40:10:2.50|-8.9,6.33,2000 +Aqr 74|HI AQR|SAO 165359|HD 216494|SD-12 6371|J225328.70-113659.4,f|D|B9,22:53:28.70|23.07,-11:36:59.45|1.9,5.79,2000 +Gru Tau1|SAO 231343|HD 216435|CD-4913988|J225337.93-483553.8,f|S|G0,22:53:37.93|216.75,-48:35:53.83|-81.5,6.03,2000 +BD+43 4331|PPM 63541|J225340.15+444456.9,f|D|A3,22:53:40.16|-2.98,44:44:56.99|-15.7,5.81,2000 +SAO 165365|HD 216553|SD-19 6357|J225405.64-191030.5,f|S|K5,22:54:5.65|81.89,-19:10:30.54|-4.3,6.37,2000 +HD 216646|BD+39 4964|PPM 63549|HR 8712|J225406.98+402236.8,f|S|K0,22:54:6.99|97.13,40:22:36.86|28.9,5.82,2000 +HD 217382|BD+83 640|HR 8748|J225424.96+842046.2,f|S|K4,22:54:24.97|98.45,84:20:46.24|23.9,4.69,2000 +Aqr 78|SAO 146382|HD 216637|SD-07 5886|J225434.12-071216.6,f|S|K3,22:54:34.12|-15.18,-7:12:16.65|-35.1,6.19,2000 +HR PEG|HD 216672|BD+16 4833|PPM 141969|HR 8714|J225435.62+165630.6,f|V|S4,22:54:35.63|15.07,16:56:30.60|-8,6.46,2000 +Skat|Sheat|Aqr Delta-76|V14356|SAO 165375|HD 216627|SD-16 6173|J225439.01-154914.9,f|V|A3,22:54:39.01|-44.02,-15:49:14.95|-24.8,3.27,2000 +Ind Rho|HD 216437|CP-70 2971|PPM 375514|J225439.48-700425.3,f|S|G2,22:54:39.48|-43.20,-70:4:25.35|73.2,6.06,2000 +Aqr 77|V14358|SAO 165376|SD-17 6619|HR 8711|J225445.46-161619.0,f|V|K2,22:54:45.47|-223.62,-16:16:19.05|-88.6,5.54,2000 +Psc 1|SAO 127836|BD+00 4939|PPM 173553|HR 8715|J225459.48+010353.6,f|S|A7,22:54:59.49|20.40,1:3:53.66|5.5,6.11,2000 +HD 216756|BD+36 4956|PPM 88333|HR 8718|J225502.64+370436.5,f|S|F5,22:55:2.65|88.56,37:4:36.58|9.3,5.91,2000 +V14360|SAO 146388|HD 216718|SD-05 5885|HR 8716|J225510.96-045916.4,f|D|K0,22:55:10.96|29.14,-4:59:16.44|-8.5,5.75,2000 +Peg Rho-50|SAO 127839|HD 216735|BD+08 4961|PPM 173557|HR 8717|J225513.67+084858.1,f|S|A1,22:55:13.67|81.82,8:48:58.20|29,4.91,2000 +SAO 214182|HD 216666|CD-3714981|HR 8713|J225514.90-362318.8,f|S|K2,22:55:14.90|45.04,-36:23:18.89|0.6,6.41,2000 +SAO 191496|HD 216727|SD-20 6507|PPM 274382|J225530.59-200821.8,f|S|K4,22:55:30.60|43.94,-20:8:21.85|-15.3,6.35,2000 +HD 216831|BD+35 4917|PPM 88347|HR 8723|J225544.50+362105.0,f|D|B7,22:55:44.51|19.93,36:21:5.00|-1.5,5.74,2000 +SAO 214187|HD 216761|CD-3217312|HR 8719|J225551.53-313759.6,f|S|K3,22:55:51.53|-13.79,-31:37:59.63|-11,6.07,2000 +PsA Delta-23|SAO 214189|HD 216763|CD-3316303|J225556.89-323222.6,f|D|G8,22:55:56.90|10.87,-32:32:22.66|30.3,4.22,2000 +Lac 16A|EN LAC|HD 216916|BD+40 4949|HR 8725|J225623.63+413613.9,f|D|B2,22:56:23.63|-1.01,41:36:13.95|-4.3,5.60,2000 +TW PSA|SAO 214197|CD-3217321|HR 8721|J225624.05-313356.0,f|V|K4,22:56:24.05|330.51,-31:33:56.04|-159.9,6.48,2000 +V0424 LAC|HD 216946|BD+48 3887|HR 8726|J225625.99+494400.7,f|V|K5,22:56:26.00|0.10,49:44:0.76|-2.9,4.98,2000 +Gru Tau3|SAO 231364|HD 216823|CD-4814364|PPM 328779|HR 8722|J225647.79-475809.1,f|S|A3,22:56:47.80|-26.31,-47:58:9.20|1.8,5.71,2000 +EW LAC|BD+47 3985|PPM 63622|HR 8731|J225704.50+484102.6,f|V|B4,22:57:4.50|9.61,48:41:2.65|-5.4,5.34,2000 +HD 216953|SD-05 5894|HR 8727|J225717.19-044836.3,f|S|G9,22:57:17.20|-17.64,-4:48:36.34|-1.3,6.31,2000 +Peg 51|V14374|BD+19 5036|PPM 114985|HR 8729|J225727.98+204607.7,f|V|G2,22:57:27.98|208.14,20:46:7.80|61,5.45,2000 +BD+03 4799|J225732.80+034836.8,f|S|K1,22:57:32.80|67.65,3:48:36.87|31.7,6.28,2000 +Fomalhaut|Os Piscis Meridiani|Difda al Auwel|The First Frog|PsA Alpha-24|V14372|SAO 191524|HD 216956|CD-3019370|PPM 274426|HR 8728|J225739.04-293720.0,f|V|A3,22:57:39.05|329.25,-29:37:20.05|-164.2,1.23,2000 +BD+38 4904|HR 8733|J225740.73+391831.5,f|S|B2,22:57:40.74|0.46,39:18:31.60|-5.1,6.17,2000 +SAO 146412|SD-03 5539|HR 8734|J225815.54-022343.3,f|S|G8,22:58:15.54|-5.99,-2:23:43.39|-16,6.17,2000 +SAO 146415|HD 217131|SD-02 5858|PPM 181551|HR 8735|J225823.66-012436.7,f|S|F0,22:58:23.66|85.47,-1:24:36.75|-6.7,6.38,2000 +SAO 214215|CD-3615650|HR 8732|J225835.00-353123.6,f|S|F8,22:58:35.01|-5.98,-35:31:23.63|-112.3,6.15,2000 +V14379|HD 217166|BD+08 4973|HR 8737|J225835.08+092124.6,f|D|G2,22:58:35.08|396.80,9:21:24.69|-147.7,6.44,2000 +SAO 127874|HD 217186|BD+06 5092|PPM 173611|HR 8738|J225842.62+072024.2,f|S|A1,22:58:42.63|-29.31,7:20:24.27|-67.8,6.34,2000 +HD 217348|BD+59 2615|PPM 41341|HR 8745|J225909.00+594852.7,f|S|B9,22:59:9.01|5.88,59:48:52.76|-1.5,6.46,2000 +HD 217314|BD+51 3514|PPM 41342|HR 8744|J225910.34+523916.3,f|S|K2,22:59:10.34|-26.11,52:39:16.31|31.6,6.30,2000 +Peg 52|HD 217232|BD+10 4859|HR 8739|J225911.81+114343.8,f|D|A8,22:59:11.81|26.88,11:43:43.84|-40.1,5.77,2000 +Psc 2|SAO 127881|HD 217264|BD+00 4950|PPM 173624|HR 8742|J225927.45+005746.5,f|D|K5,22:59:27.46|90.14,0:57:46.54|-67.7,5.43,2000 +SAO 165425|HD 217251|SD-13 6318|HR 8741|J225935.67-130415.2,f|S|K5,22:59:35.67|-6.43,-13:4:15.22|-1.6,6.11,2000 +WX PSA|HD 217236|CD-3019383|PPM 274461|J225935.75-292744.3,f|V|A5,22:59:35.76|-6.79,-29:27:44.32|5.2,5.51,2000 +V0509 CAS|HD 217476|BD+56 2923|HR 8752|J230005.10+565643.3,f|V|G4,23:0:5.10|-2.95,56:56:43.35|-3.1,5.10,2000 +SAO 191554|CD-2516220|PPM 274468|HR 8743|J230005.78-250951.0,f|S|K5,23:0:5.79|35.16,-25:9:51.05|-79.5,5.66,2000 +SAO 191565|HD 217358|CD-2616419|PPM 274481|HR 8746|J230024.63-253736.6,f|S|K1,23:0:24.64|90.75,-25:37:36.65|-42.2,6.30,2000 +Psc 3|V25990|SAO 146443|HD 217428|BD-00 4443|PPM 173639|J230037.90+001109.1,f|V|G4,23:0:37.91|47.85,0:11:9.12|10.7,6.22,2000 +SAO 127894|HD 217459|BD+02 4594|PPM 173643|HR 8751|J230042.90+030042.4,f|S|K4,23:0:42.90|5.09,3:0:42.50|-83.6,5.84,2000 +Gru Zeta|HD 217364|CP-5310382|HR 8747|J230052.81-524514.8,f|S|G8,23:0:52.81|-65.09,-52:45:14.89|-12.9,4.12,2000 +SAO 247683|CD-5113446|HR 8749|J230107.57-505700.1,f|S|K3,23:1:7.58|88.17,-50:57:0.10|0.3,5.68,2000 +SAO 191581|HD 217484|CD-2918537|HR 8754|J230119.38-285114.2,f|S|K3,23:1:19.39|58.46,-28:51:14.26|-21.5,5.55,2000 +SAO 191585|HD 217498|CD-2317706|HR 8756|J230123.04-224727.2,f|S|A5,23:1:23.04|28.35,-22:47:27.21|-25.1,6.28,2000 +Aqr 81|SAO 146447|HD 217531|SD-07 5910|HR 8757|J230123.64-070340.1,f|S|K5,23:1:23.64|-16.23,-7:3:40.15|-7.8,6.22,2000 +V25997|HD 217673|BD+56 2927|PPM 41385|HR 8761|J230130.71+570619.6,f|V|K1,23:1:30.71|-4.40,57:6:19.65|-7.1,6.21,2000 +SAO 146451|HD 217563|SD-05 5910|HR 8759|J230131.71-044241.2,f|S|K0,23:1:31.71|14.05,-4:42:41.26|7.6,5.94,2000 +BD+02 4597|PPM 173662|J230143.58+033151.2,f|S|G5,23:1:43.58|32.34,3:31:51.28|-52.7,6.45,2000 +And Omicron-1A|Omicron Andromedae|HD 217675|BD+41 4664|PPM 63726|HR 8762|J230155.26+421933.5,f|D|B6,23:1:55.26|22.51,42:19:33.51|0.2,3.64,2000 +HD 217731|BD+43 4375|PPM 63734|J230211.32+443422.2,f|S|K0,23:2:11.33|10.47,44:34:22.29|-18,6.44,2000 +Aqr 82|V25999|SAO 146465|SD-07 5913|HR 8763|J230232.55-063426.4,f|V|M2,23:2:32.56|-7.30,-6:34:26.43|-33,6.18,2000 +SAO 214261|HD 217642|CD-3715047|J230234.09-362515.1,f|D|K1,23:2:34.10|42.49,-36:25:15.17|-30.6,6.46,2000 +And 2A|V14396|HD 217782|BD+41 4665|PPM 63742|HR 8766|J230236.38+424528.0,f|D|A3,23:2:36.38|55.73,42:45:28.06|-4.8,5.09,2000 +SD-21 6354|PPM 274532|HR 8764|J230244.25-205214.5,f|S|K0,23:2:44.25|-56.76,-20:52:14.56|-129.8,5.98,2000 +LN AND|HD 217811|BD+43 4378|PPM 63745|HR 8768|J230245.14+440331.5,f|D|B2,23:2:45.15|2.16,44:3:31.50|-6,6.42,2000 +HD 217944|BD+57 2676|HR 8778|J230321.38+583349.8,f|S|G8,23:3:21.39|48.35,58:33:49.88|-8.9,6.44,2000 +PsA Pi|Pi |SAO 214275|HD 217792|CD-3515630|HR 8767|J230329.81-344457.8,f|S|F0,23:3:29.82|74.81,-34:44:57.88|84.5,5.13,2000 +BD+66 1575|PPM 24155|HR 8779|J230332.88+671233.1,f|S|K3,23:3:32.88|23.13,67:12:33.16|10.2,5.23,2000 +Scheat|Alpheras|Menkib|Peg Beta-53A|Beta Pegasi|BD+27 4480|HR 8775|J230346.45+280458.0,f|D|M2,23:3:46.46|187.79,28:4:58.04|137.6,2.47,2000 +Psc Beta-4|V14410|SAO 127934|HD 217891|BD+03 4818|Fum al Samakah|HR 8773|J230352.61+034912.1,f|V|B6,23:3:52.61|12.87,3:49:12.16|-10.1,4.50,2000 +SAO 231419|HD 217842|CD-4216177|HR 8771|J230359.63-412844.0,f|S|K0,23:3:59.64|12.25,-41:28:44.03|55.9,5.79,2000 +SAO 127937|HD 217926|BD+05 5123|HR 8776|J230400.77+063658.8,f|S|F2,23:4:0.78|-28.46,6:36:58.82|7.4,6.43,2000 +And 3|BD+49 4028|PPM 41448|J230410.98+500307.5,f|S|K0,23:4:10.98|166.72,50:3:7.53|167.3,4.65,2000 +Gru Kappa|SAO 247711|CP-5410197|HR 8774|J230439.62-535753.6,f|S|K5,23:4:39.63|57.00,-53:57:53.66|-106.2,5.37,2000 +Markab|Peg Alpha-54|V14417|BD+14 4926|PPM 142158|HR 8781|J230445.65+151218.9,f|V|B9,23:4:45.65|61.08,15:12:18.95|-42.6,2.49,2000 +SAO 255395|HD 217831|CP-69 3301|PPM 366224|HR 8769|J230452.22-684912.8,f|S|F4,23:4:52.22|44.76,-68:49:12.81|63.4,5.52,2000 +BD+15 4760|PPM 142165|HR 8784|J230506.28+163346.2,f|S|G8,23:5:6.28|-186.48,16:33:46.21|-211,6.44,2000 +Aqr 83A|SAO 146498|SD-08 6018|HR 8782|J230509.78-074137.5,f|D|F2,23:5:9.78|121.74,-7:41:37.58|22.2,5.44,2000 +SAO 165481|SD-17 6661|PPM 241158|HR 8783|J230512.85-170445.3,f|D|K0,23:5:12.85|-41.73,-17:4:45.30|-40.2,6.15,2000 +BD+00 4963|PPM 173732|HR 8785|J230517.63+011825.6,f|S|G9,23:5:17.63|34.34,1:18:25.66|-21.2,6.39,2000 +HD 218235|BD+17 4866|PPM 142184|HR 8788|J230618.14+183103.9,f|S|F6,23:6:18.14|224.30,18:31:3.96|62.2,6.16,2000 +V26016|HD 218261|BD+19 5058|PPM 142187|HR 8792|J230631.88+195439.0,f|V|F7,23:6:31.89|287.29,19:54:39.07|4.8,6.44,2000 +Cas 1|HD 218376|BD+58 2545|PPM 41489|HR 8797|J230636.81+592511.1,f|S|B0,23:6:36.82|6.79,59:25:11.14|-2,4.85,2000 +Aqr 86|SAO 191651|CD-2417497|PPM 274599|HR 8789|J230640.84-234435.1,f|D|G6,23:6:40.84|59.86,-23:44:35.20|0.5,4.48,2000 +Gru Theta|SAO 231444|HD 218227|CD-4415149|PPM 328952|HR 8787|J230652.72-433113.2,f|D|F5,23:6:52.73|-48.40,-43:31:13.29|-14,4.33,2000 +Gru Upsilon|SAO 214313|HD 218242|CD-3914936|J230653.62-385332.2,f|D|A1,23:6:53.62|33.62,-38:53:32.25|5.8,5.63,2000 +Peg 55|V14428|SAO 127976|HD 218329|BD+08 4997|PPM 173762|HR 8795|J230700.25+092434.1,f|V|M1,23:7:0.26|6.81,9:24:34.17|-12.8,4.54,2000 +V26019|HD 218365|BD+34 4847|J230705.03+353811.3,f|V|K0,23:7:5.03|56.20,35:38:11.37|10.7,6.34,2000 +Peg 56|V14429|HD 218356|BD+24 4716|PPM 115152|HR 8796|J230706.73+252805.7,f|V|K0,23:7:6.74|0.27,25:28:5.73|-33.3,4.76,2000 +SAO 231445|HD 218255|CD-5013885|PPM 328955|HR 8791|J230709.44-493622.0,f|S|K4,23:7:9.44|8.85,-49:36:22.09|0.1,6.32,2000 +HD 218416|BD+52 3371|PPM 41497|J230710.05+524859.7,f|S|K0,23:7:10.05|2.36,52:48:59.76|12.9,6.13,2000 +BD+58 2546|PPM 41498|J230710.45+594338.6,f|S|B2,23:7:10.45|6.58,59:43:38.62|-1.8,6.42,2000 +V26018|SAO 247739|HD 218269|CD-5113471|HR 8793|J230714.77-504112.0,f|D|F6,23:7:14.77|-37.54,-50:41:12.05|-23.3,6.23,2000 +V0343 PEG|HD 218395|BD+32 4587A|HR 8798|J230727.72+324931.2,f|D|A4,23:7:27.72|-21.18,32:49:31.24|-11.5,6.35,2000 +V0342 PEG|HD 218396|BD+20 5278|PPM 115157|HR 8799|J230728.71+210803.3,f|V|A5,23:7:28.71|107.87,21:8:3.30|-50.1,5.96,2000 +And 4|V26024|HD 218452|BD+45 4149|J230739.26+462314.0,f|D|K5,23:7:39.27|-11.90,46:23:14.03|-30,5.30,2000 +And 5|BD+48 3944|PPM 63843|J230745.38+491744.7,f|S|F5,23:7:45.38|152.11,49:17:44.79|132.1,5.69,2000 +V26026|HD 218537|BD+62 2171|J230747.75+633800.4,f|D|B3,23:7:47.76|6.86,63:38:0.41|-2.1,6.26,2000 +Cep Pi-33A|HD 218658|BD+74 1006|HR 8819|J230753.85+752314.9,f|D|G2,23:7:53.85|5.75,75:23:14.99|-35.1,4.42,2000 +BD+63 1931|PPM 24212|HR 8811|J230757.20+641321.1,f|S|K0,23:7:57.21|8.87,64:13:21.12|-4.5,6.21,2000 +SAO 191674|HD 218434|CD-2918588|PPM 274627|J230821.06-284925.3,f|S|G9,23:8:21.07|-43.24,-28:49:25.31|-52.7,5.61,2000 +CP-80 1064|PPM 375595|HR 8786|J230823.83-792850.4,f|S|A3,23:8:23.84|92.62,-79:28:50.48|-36.5,6.12,2000 +HD 218288|CP-74 2054|PPM 375596|HR 8794|J230835.59-733510.0,f|S|K3,23:8:35.60|23.14,-73:35:10.02|-2.1,6.16,2000 +Psc 5|SAO 127993|HD 218527|BD+01 4686|PPM 173789|J230840.92+020740.3,f|S|G6,23:8:40.92|137.46,2:7:40.38|109,5.43,2000 +Aqr 88|SAO 191683|HD 218594|SD-21 6368|PPM 274643|HR 8812|J230926.79-211020.6,f|S|K1,23:9:26.80|55.95,-21:10:20.68|31.3,3.68,2000 +Peg 57A|GZ PEG|HD 218634|BD+07 4981|HR 8815|J230931.45+084037.7,f|D|M4,23:9:31.46|3.71,8:40:37.78|-4.5,5.03,2000 +Cas 2A|V26029|HD 218753|BD+58 2552|PPM 41538|HR 8822|J230944.13+591957.6,f|D|A5,23:9:44.14|0.15,59:19:57.69|1.2,5.69,2000 +SAO 191686|HD 218619|CD-2818099|HR 8813|J230944.63-280518.8,f|S|K2,23:9:44.63|18.92,-28:5:18.86|1.7,5.87,2000 +SAO 255418|HD 218497|CP-68 3560|PPM 366274|J230944.73-675234.6,f|S|F2,23:9:44.73|0.11,-67:52:34.62|-51.3,6.46,2000 +SAO 165522|HD 218639|SD-15 6360|PPM 241256|HR 8816|J230949.55-143037.9,f|S|A0,23:9:49.55|30.20,-14:30:37.99|-6.3,6.42,2000 +Aqr 89A|SAO 191687|CD-2317771|PPM 274652|HR 8817|J230954.90-222727.4,f|D|G2,23:9:54.90|35.90,-22:27:27.42|-7.8,4.72,2000 +SAO 231464|CD-4315281|HR 8814|J230957.36-425140.6,f|D|F4,23:9:57.36|-348.87,-42:51:40.65|-50.5,5.83,2000 +Peg 58|BD+09 5170|HR 8821|J231001.46+094919.4,f|S|B9,23:10:1.46|-17.74,9:49:19.50|-7.8,5.39,2000 +DL GRU|SAO 231465|HD 218655|CD-4115163|HR 8818|J231009.73-403529.5,f|V|M4,23:10:9.74|22.10,-40:35:29.57|-45.7,5.95,2000 +HD 218558|CP-67 3949|PPM 366278|J231012.33-665127.5,f|S|K0,23:10:12.34|236.34,-66:51:27.52|35.1,6.48,2000 +Gru Iota|SAO 231468|CD-4514947|J231021.53-451448.1,f|S|K1,23:10:21.54|132.43,-45:14:48.16|-26.3,3.88,2000 +And 6|BD+42 4592|PPM 63896|HR 8825|J231027.20+433239.2,f|S|F5,23:10:27.20|-202.23,43:32:39.23|-207.7,5.91,2000 +HD 218792|BD+16 4882|PPM 142252|HR 8824|J231042.63+173539.7,f|S|K4,23:10:42.64|24.31,17:35:39.74|-27.3,5.68,2000 +Peg 59|V26033|HD 218918|BD+07 4991|PPM 173843|HR 8826|J231144.18+084312.4,f|V|A5,23:11:44.19|-8.90,8:43:12.42|-5.1,5.16,2000 +Peg 60A|HD 218935|BD+26 4580|PPM 115237|HR 8827|J231149.19+265050.3,f|D|G8,23:11:49.19|-190.58,26:50:50.31|-111.1,6.20,2000 +SAO 258961|HD 218559|CP-81 1024|PPM 378814|J231212.53-805445.7,f|S|K4,23:12:12.53|26.96,-80:54:45.72|-11.5,6.43,2000 +And 7|BD+48 3964|PPM 63927|J231233.00+492422.3,f|S|F0,23:12:33.00|89.80,49:24:22.35|95.6,4.54,2000 +BD+28 4548|PPM 115256|HR 8831|J231303.98+292629.4,f|S|G8,23:13:3.99|-30.44,29:26:29.49|-40,6.35,2000 +Bradley 3077|V14458|HD 219134|BD+56 2966|PPM 41599|HR 8832|J231316.97+571006.0,f|D|K3,23:13:16.98|2074.54,57:10:6.08|294.7,5.57,2000 +HD 219139|BD+10 4902|HR 8833|J231326.50+110354.0,f|D|G8,23:13:26.50|-9.13,11:3:54.01|-6,5.86,2000 +HD 219196|BD+18 5125|PPM 142299|J231359.36+193802.0,f|S|K2,23:13:59.36|27.13,19:38:2.04|-7.4,6.48,2000 +SAO 255435|CP-63 4862|PPM 366322|HR 8829|J231406.58-624200.0,f|S|G8,23:14:6.59|477.52,-62:42:0.01|-425,6.13,2000 +BD+49 4071|PPM 41615|HR 8837|J231414.38+503704.4,f|S|A0,23:14:14.39|45.40,50:37:4.41|-7.1,6.32,2000 +Aqr Phi-90|V26044|SAO 146585|HD 219215|SD-06 6170|HR 8834|J231419.35-060256.4,f|V|M1,23:14:19.36|46.24,-6:2:56.41|-195.9,4.23,2000 +HD 219291|BD+28 4555|PPM 115279|HR 8838|J231421.71+294618.5,f|D|F6,23:14:21.72|-5.73,29:46:18.59|-7.6,6.41,2000 +BD+23 4704|PPM 115282|HR 8839|J231436.49+240610.4,f|S|K2,23:14:36.49|113.78,24:6:10.43|5.3,6.35,2000 +HD 219485|BD+73 1023|PPM 11553|HR 8844|J231437.10+741352.5,f|S|A0,23:14:37.11|41.33,74:13:52.57|5.5,5.89,2000 +SAO 165578|HD 219279|SD-11 6032|PPM 241368|HR 8836|J231440.17-104119.3,f|D|K5,23:14:40.17|-6.63,-10:41:19.37|-36,6.12,2000 +SAO 231512|HD 219263|CD-4115197|HR 8835|J231458.62-410619.4,f|S|K2,23:14:58.62|110.09,-41:6:19.43|-111.8,5.77,2000 +SAO 146593|SD-04 5852|J231534.25-032946.9,f|S|A3,23:15:34.26|-12.43,-3:29:46.97|-3.3,5.56,2000 +V0388 CEP|HD 219586|BD+70 1311|PPM 11562|HR 8851|J231537.73+705317.0,f|V|F0,23:15:37.74|17.04,70:53:17.09|-2.3,5.55,2000 +Aqr Psi-91A|SAO 146598|HD 219449|SD-09 6156|HR 8841|J231553.49-090515.8,f|D|K1,23:15:53.49|368.52,-9:5:15.85|-17,4.24,2000 +SAO 231532|CD-4514982|HR 8846|J231639.79-442920.9,f|D|K1,23:16:39.79|3.42,-44:29:21.00|-9.9,5.92,2000 +HD 219623|BD+52 3410|PPM 41654|HR 8853|J231642.30+531248.5,f|D|F7,23:16:42.30|111.74,53:12:48.51|-236.3,5.58,2000 +SAO 231533|HD 219531|CD-4115205|PPM 329131|HR 8847|J231649.82-411139.8,f|S|K0,23:16:49.83|-26.07,-41:11:39.82|15.4,6.48,2000 +Aqr Chi-92|Chi Aquarii|SAO 146612|HD 219576|SD-08 6076|J231650.93-074335.4,f|S|M3,23:16:50.94|-18.73,-7:43:35.41|-15.4,5.00,2000 +SAO 255446|HD 219482|CP-62 6412|PPM 366354|HR 8843|J231657.68-620004.3,f|S|F7,23:16:57.69|175.97,-62:0:4.31|-26.1,5.66,2000 +V26053|SAO 191792|CD-2918644|PPM 274796|J231708.75-282617.7,f|V|M1,23:17:8.76|39.04,-28:26:17.78|-99.8,6.26,2000 +Psc Gamma-6|HD 219615|BD+02 4648|PPM 173938|HR 8852|J231709.93+031656.2,f|S|G9,23:17:9.94|760.30,3:16:56.24|18,3.70,2000 +HD 219668|BD+44 4368|HR 8857|J231716.67+450951.0,f|S|K0,23:17:16.67|100.69,45:9:51.00|-62.2,6.47,2000 +HD 219841|BD+74 1016|PPM 11574|HR 8867|J231718.89+751756.4,f|S|A2,23:17:18.90|17.81,75:17:56.49|-3.1,6.35,2000 +Tuc Gamma|SAO 247814|HD 219571|CP-58 8062|HR 8848|J231725.77-581408.6,f|S|F1,23:17:25.77|-34.90,-58:14:8.64|79.6,4.00,2000 +V14483|HD 219659|SD-12 6461|HR 8856|J231740.08-114246.5,f|V|A1,23:17:40.08|41.27,-11:42:46.59|5.1,6.34,2000 +And 8A|V14484|HD 219734|BD+48 3991|J231744.64+490055.0,f|D|M2,23:17:44.65|34.53,49:0:55.08|6.7,4.83,2000 +Aqr Psi-93|Psi2 Aquarii|HD 219688|SD-09 6160|HR 8858|J231754.21-091057.0,f|V|B5,23:17:54.22|19.69,-9:10:57.05|-9.6,4.41,2000 +ET AND|HD 219749|BD+44 4373|HR 8861|J231756.01+452920.1,f|V|B9,23:17:56.01|23.98,45:29:20.13|-10,6.50,2000 +Gru Phi|SAO 231539|HD 219693|CD-4115211|PPM 329148|HR 8859|J231809.88-404927.7,f|S|F5,23:18:9.88|127.47,-40:49:27.70|-122.4,5.54,2000 +SAO 255455|HD 219644|CP-68 3567|PPM 366371|HR 8855|J231820.02-672816.2,f|S|K2,23:18:20.03|22.59,-67:28:16.24|17.7,6.14,2000 +And 9|AN AND|HD 219815|BD+40 5043|HR 8864|J231823.32+414625.2,f|V|A7,23:18:23.32|-9.62,41:46:25.23|-11,5.99,2000 +Cep Omicron-34A|V14495|HD 219916|BD+67 1514|HR 8872|J231837.49+680641.2,f|D|G8,23:18:37.49|54.86,68:6:41.20|10.9,4.86,2000 +Scl Gamma|SAO 214444|HD 219784|CD-3316476|HR 8863|J231849.44-323155.2,f|S|K1,23:18:49.44|19.60,-32:31:55.30|-78.6,4.41,2000 +Aqr Psi-95A|V14491|SAO 146635|HD 219832|SD-10 6094|HR 8865|J231857.67-093638.7,f|D|A0,23:18:57.68|43.48,-9:36:38.70|-7.8,5.01,2000 +SAO 191816|HD 219823|CD-2918654|PPM 274831|J231903.29-282316.2,f|S|K5,23:19:3.30|15.84,-28:23:16.25|10.1,6.50,2000 +Aqr 94A|SAO 165625|HD 219834|SD-14 6448A|PPM 241464|HR 8866|J231906.66-132730.7,f|D|G5,23:19:6.67|265.65,-13:27:30.79|-44.9,5.20,2000 +SAO 258127|HD 219572|CP-80 1067|PPM 375651|HR 8849|J231908.63-792820.6,f|S|K0,23:19:8.64|27.68,-79:28:20.67|11,6.33,2000 +Aqr 96|SAO 146639|HD 219877|SD-05 5966|HR 8868|J231923.97-050727.6,f|D|F3,23:19:23.98|200.94,-5:7:27.67|-20.4,5.58,2000 +SAO 165628|HD 219879|SD-18 6283|PPM 241468|HR 8869|J231924.10-180431.3,f|S|K5,23:19:24.11|3.99,-18:4:31.36|9.6,5.96,2000 +V26061|HD 219927|BD+34 4899|PPM 88722|HR 8873|J231927.41+344735.4,f|V|B8,23:19:27.41|16.51,34:47:35.46|-0.3,6.32,2000 +And 11|HD 219945|BD+47 4110|HR 8874|J231929.80+483731.1,f|S|K0,23:19:29.81|23.00,48:37:31.16|51.9,5.45,2000 +V26062|HD 219962|BD+47 4114|HR 8875|J231941.55+482251.3,f|D|K1,23:19:41.56|206.23,48:22:51.37|31.1,6.29,2000 +SAO 214459|HD 219912|CD-3415985|HR 8871|J231943.14-334228.9,f|D|K2,23:19:43.15|42.68,-33:42:28.99|-37.7,6.34,2000 +And 10|HD 219981|BD+41 4752|HR 8876|J231952.41+420440.9,f|S|M0,23:19:52.42|47.76,42:4:40.96|4.3,5.79,2000 +V26063|BD+61 2427|PPM 24376|HR 8881|J232014.37+615812.4,f|V|K1,23:20:14.38|6.98,61:58:12.46|-4.8,6.39,2000 +Psc 7|SAO 128126|BD+04 4997|PPM 173998|HR 8878|J232020.58+052252.7,f|S|K2,23:20:20.58|78.55,5:22:52.71|-59.4,5.07,2000 +BD+61 2428|PPM 24381|HR 8886|J232034.53+621247.7,f|D|K2,23:20:34.54|-1.40,62:12:47.75|-1,6.38,2000 +Peg Tau-62|Tau Pegasi|BD+22 4810|Salm|Kerb|El Khereb|PPM 115381|J232038.24+234425.2,f|S|A5,23:20:38.24|30.48,23:44:25.21|-9.1,4.59,2000 +V14515|SAO 146652|SD-06 6191|HR 8879|J232040.88-055428.7,f|V|K0,23:20:40.89|-102.65,-5:54:28.71|-60.2,6.16,2000 +BD+43 4440|HR 8884|J232044.09+440658.2,f|D|A5,23:20:44.10|-9.58,44:6:58.20|-36.8,6.25,2000 +Peg 63|BD+29 4908|PPM 88742|HR 8882|J232049.55+302453.7,f|S|M0,23:20:49.56|77.49,30:24:53.72|-68.8,5.58,2000 +SAO 247838|CD-5013948|HR 8877|J232050.17-501823.6,f|D|F5,23:20:50.18|49.72,-50:18:23.61|-74,6.06,2000 +And 12A|BD+37 4817|PPM 88745|HR 8885|J232053.26+381056.3,f|D|F5,23:20:53.26|129.58,38:10:56.37|-61.2,5.78,2000 +V26066|CD-2716284|PPM 274864|HR 8883|J232115.49-265912.3,f|V|G4,23:21:15.50|-19.65,-26:59:12.37|-11.2,5.66,2000 +Peg 64A|BD+31 4897|PPM 88761|HR 8887|J232154.93+314844.8,f|D|B6,23:21:54.93|10.32,31:48:44.87|-6.8,5.35,2000 +BD+25 4927|PPM 115419|J232228.57+255506.5,f|D|K3,23:22:28.58|2.29,25:55:6.54|-11,6.37,2000 +V26069|BD+59 2710|HR 8894|J232232.53+600800.5,f|V|K3,23:22:32.53|6.80,60:8:0.55|-1.6,5.53,2000 +Aqr 97|SAO 165658|SD-15 6406|PPM 241548|J232239.17-150221.5,f|D|A3,23:22:39.17|119.66,-15:2:21.60|17.5,5.21,2000 +Peg 65|BD+20 5317|PPM 115423|HR 8891|J232240.51+204943.3,f|S|B9,23:22:40.51|19.07,20:49:43.38|-11.3,6.29,2000 +DR TUC|SAO 255474|CP-60 7654|HR 8889|J232256.77-600321.0,f|V|M3,23:22:56.78|82.81,-60:3:21.03|-5.3,6.12,2000 +Aqr 98|SAO 191858|SD-20 6587|PPM 274885|HR 8892|J232258.22-200602.0,f|S|K1,23:22:58.23|-120.30,-20:6:2.09|-96.7,3.96,2000 +Peg 66|BD+11 4993|HR 8893|J232304.56+121850.0,f|S|K3,23:23:4.57|19.05,12:18:50.08|-17.2,5.08,2000 +SAO 128156|BD-00 4509|HR 8897|J232331.94+001728.7,f|D|K2,23:23:31.95|71.85,0:17:28.77|11.3,6.32,2000 +SAO 231587|CD-4315360|PPM 329241|HR 8896|J232345.42-430727.9,f|S|K3,23:23:45.42|18.94,-43:7:27.95|11.4,6.10,2000 +DQ GRU|SAO 247854|CP-5410281|HR 8895|J232354.52-534831.4,f|D|A4,23:23:54.52|73.87,-53:48:31.46|-34.8,6.13,2000 +SAO 191873|CD-2216306|PPM 274913|J232403.98-214627.8,f|D|F5,23:24:3.98|-66.17,-21:46:27.88|-77.4,6.50,2000 +SAO 165672|SD-19 6450|PPM 241574|J232407.85-184116.8,f|S|G8,23:24:7.86|165.25,-18:41:16.82|48.6,6.19,2000 +V0385 AND|BD+40 5065|PPM 64169|J232408.86+413646.3,f|V|Ma,23:24:8.87|-12.11,41:36:46.34|2.3,6.40,2000 +V26075|SAO 247858|CP-5212150|HR 8898|J232413.26-515328.2,f|V|M0,23:24:13.26|23.14,-51:53:28.23|-37,5.74,2000 +Cas 4A|V14549|BD+61 2444|PPM 24436|J232450.26+621658.1,f|D|M1,23:24:50.26|12.21,62:16:58.10|-13.3,4.97,2000 +Peg 67|BD+31 4904|J232450.83+322305.5,f|S|B9,23:24:50.83|16.47,32:23:5.57|2.8,5.56,2000 +SAO 247867|CP-5710268|J232519.46-565056.3,f|S|K0,23:25:19.47|85.23,-56:50:56.35|-20.7,5.60,2000 +Peg Upsilon-68|BD+22 4833|PPM 115465|J232522.78+232414.7,f|S|F8,23:25:22.78|193.14,23:24:14.76|36.5,4.43,2000 +Aqr 99|V14554|SD-21 6420|PPM 274952|J232602.78-203831.2,f|V|K4,23:26:2.79|-50.11,-20:38:31.25|-63,4.37,2000 +CD-2216320|J232635.47-214427.0,f|D|K0,23:26:35.47|57.54,-21:44:27.01|-1.7,6.44,2000 +Gru Omicron|SAO 247874|CP-5310461|J232636.57-524317.7,f|S|F4,23:26:36.58|33.16,-52:43:17.77|130.1,5.53,2000 +Psc Kappa-8A|Kappa Piscium|SAO 128186|BD+00 4998|HR 8911|J232655.95+011520.1,f|D|A0,23:26:55.96|85.63,1:15:20.19|-94.4,4.93,2000 +HD 221525|BD+86 344|PPM 4143|HR 8938|J232700.87+871827.0,f|S|A7,23:27:0.87|76.90,87:18:27.01|19.3,5.56,2000 +And 13|V0388 AND|BD+42 4672|HR 8913|J232707.40+425443.2,f|V|B9,23:27:7.40|87.45,42:54:43.24|17.1,5.75,2000 +SAO 255486|CP-67 3964|PPM 366441|J232707.42-663451.2,f|S|K4,23:27:7.43|-27.36,-66:34:51.23|-13,6.46,2000 +CD-5013976|J232709.10-500926.0,f|S|B9,23:27:9.11|29.60,-50:9:26.08|8.6,6.22,2000 +Psc 9|V14568|SAO 128188|BD+00 4999|HR 8912|J232714.79+010721.3,f|V|G7,23:27:14.79|46.49,1:7:21.39|-31.9,6.26,2000 +SAO 247882|CP-59 7890|J232714.99-582833.9,f|S|G8,23:27:14.99|52.47,-58:28:34.00|69.3,5.64,2000 +BD+69 1332|PPM 11633|HR 8918|J232716.62+702135.2,f|S|A6,23:27:16.63|120.95,70:21:35.22|-4.4,5.60,2000 +Peg 69|HV PEG|BD+24 4778|HR 8915|J232740.38+251002.2,f|V|A0,23:27:40.39|27.29,25:10:2.21|-36.1,5.99,2000 +Psc Theta-10|V26086|SAO 128196|BD+05 5173|HR 8916|J232758.09+062244.3,f|V|K0,23:27:58.10|-123.88,6:22:44.37|-43.3,4.28,2000 +Errai|Alrai|SAO 214561|CD-3615895|HR 8914|J232800.69-353240.1,f|S|K2,23:28:0.69|4.88,-35:32:40.15|1.3,6.33,2000 +Oct Tau|HD 219765|CP-88 204|PPM 378842|HR 8862|J232803.78-872855.9,f|S|K2,23:28:3.78|16.29,-87:28:55.97|11.5,5.50,2000 +SD-12 6496|PPM 241673|HR 8917|J232805.19-112659.1,f|S|G0,23:28:5.20|99.53,-11:26:59.11|-22,6.38,2000 +SAO 146729|SD-10 6120|HR 8921|J232900.66-091557.9,f|S|K0,23:29:0.66|-43.52,-9:15:57.98|-26.5,6.18,2000 +SAO 231622|CD-4515043|PPM 329322|J232900.82-442953.0,f|S|K2,23:29:0.83|37.66,-44:29:53.05|-13.4,6.44,2000 +CG TUC|SAO 255497|CP-63 4891|PPM 366458|HR 8919|J232900.98-630638.3,f|V|Ap,23:29:0.98|39.21,-63:6:38.36|-13.6,5.66,2000 +HD 221113|BD+22 4844|PPM 115529|HR 8922|J232905.67+230253.1,f|S|G9,23:29:5.68|-34.09,23:2:53.10|-84.9,6.46,2000 +Peg 70|HD 221115|BD+11 5009|PPM 142551|HR 8923|J232909.29+124537.9,f|S|G8,23:29:9.30|59.54,12:45:37.99|25.2,4.54,2000 +SAO 146733|HD 221147|SD-02 5973|PPM 181641|J232926.98-014728.3,f|S|K0,23:29:26.99|-14.39,-1:47:28.37|-22,6.35,2000 +V14588|SAO 146736|HD 221148|SD-05 5999|HR 8924|J232932.08-043157.8,f|V|K3,23:29:32.08|179.74,-4:31:57.89|-232,6.26,2000 +AR CAS|HD 221253|BD+57 2748|PPM 41873|HR 8926|J233001.94+583256.1,f|D|B3,23:30:1.94|18.71,58:32:56.11|4.2,4.89,2000 +HD 221246|BD+48 4070|PPM 64311|HR 8925|J233007.41+490759.3,f|S|K3,23:30:7.41|29.44,49:7:59.32|3,6.17,2000 +V26096|HD 221293|BD+37 4856|PPM 88886|HR 8927|J233039.56+383944.1,f|V|G9,23:30:39.56|30.92,38:39:44.11|17.1,6.07,2000 +SAO 146748|SD-07 6036|HR 8928|J233101.14-061717.0,f|S|K0,23:31:1.14|-10.59,-6:17:17.09|-29.7,6.39,2000 +And 14|V14599|HD 221345|BD+38 5023|PPM 88889|J233117.41+391410.3,f|V|K0,23:31:17.41|287.32,39:14:10.31|-83.8,5.23,2000 +SAO 231642|HD 221323|CD-4515055|PPM 329355|HR 8929|J233126.95-445036.8,f|S|K1,23:31:26.96|45.31,-44:50:36.88|-20.4,6.02,2000 +SAO 146752|HD 221356|SD-04 5896|HR 8931|J233131.50-040514.6,f|S|F8,23:31:31.50|178.64,-4:5:14.66|-192.8,6.49,2000 +Aqr 100|HD 221357|SD-22 6141|HR 8932|J233142.04-212210.0,f|S|A9,23:31:42.04|-0.98,-21:22:10.05|-7.2,6.24,2000 +V0354 PEG|HD 221394|BD+27 4568|PPM 115568|HR 8933|J233143.02+282412.5,f|V|A1,23:31:43.03|-29.95,28:24:12.56|-13.8,6.41,2000 +Psc 13|SAO 146756|BD-01 4450|PPM 181647|HR 8934|J233157.56-010509.1,f|S|K1,23:31:57.57|9.00,-1:5:9.19|16.2,6.39,2000 +HD 221493|BD+23 4759|PPM 115584|J233229.03+235036.9,f|S|K5,23:32:29.03|-2.06,23:50:36.99|-27.1,6.40,2000 +Scl Beta|V14608|SAO 214615|CD-3815527|HR 8937|J233258.25-374905.7,f|V|B9,23:32:58.26|96.45,-37:49:5.76|37.6,4.38,2000 +Aqr 101|SAO 191988|HD 221565|SD-21 6437|HR 8939|J233316.62-205452.2,f|D|A1,23:33:16.62|-2.52,-20:54:52.22|8.6,4.71,2000 +SAO 258154|CP-78 1473|PPM 375725|HR 8935|J233319.58-772307.1,f|S|G2,23:33:19.59|15.66,-77:23:7.18|1.8,5.82,2000 +Peg 71|HW PEG|HD 221615|BD+21 4952|PPM 115595|J233328.09+222955.5,f|V|M5,23:33:28.09|9.56,22:29:55.59|-17.5,5.41,2000 +V26102|HD 221661|BD+44 4441|PPM 64387|HR 8941|J233342.99+450329.1,f|V|G8,23:33:42.99|0.11,45:3:29.16|11.2,6.25,2000 +V26103|HD 221662|BD+20 5352|HR 8942|J233355.49+205027.3,f|V|M3,23:33:55.49|-12.34,20:50:27.36|-15.2,6.14,2000 +Peg 72|V14617|HD 221673|BD+30 4978|PPM 88932|HR 8943|J233357.18+311930.9,f|D|K4,23:33:57.19|50.23,31:19:31.00|-18.5,4.98,2000 +Psc 14|HD 221675|SD-02 5986|PPM 181656|HR 8944|J233409.01-011451.2,f|S|A2,23:34:9.02|107.37,-1:14:51.24|-13.2,5.89,2000 +And 15|V0340 AND|HD 221756|BD+39 5114|HR 8947|J233437.53+401411.1,f|V|A1,23:34:37.54|-17.75,40:14:11.19|-45.8,5.56,2000 +Peg 73|HD 221758|BD+32 4667|PPM 88936|HR 8948|J233438.20+332950.3,f|S|K5,23:34:38.20|-4.50,33:29:50.38|21.7,5.63,2000 +V26105|HD 221776|BD+37 4866|PPM 88941|J233446.74+380126.3,f|D|K7,23:34:46.74|10.63,38:1:26.40|11.1,6.18,2000 +HD 221745|SD-16 6314|PPM 241843|HR 8946|J233449.36-151445.6,f|S|K0,23:34:49.36|49.93,-15:14:45.62|-87.9,5.95,2000 +HD 221861|BD+70 1327|PPM 11681|HR 8952|J233459.04+713831.3,f|S|G9,23:34:59.04|5.24,71:38:31.36|-2.4,5.85,2000 +Phe Iota|Iota Phoenicis|SAO 231675|CD-4315420|PPM 329418|HR 8949|J233504.56-423654.2,f|D|A2,23:35:4.56|42.17,-42:36:54.27|10.8,4.71,2000 +HD 221833|BD+00 5018|PPM 174237|J233528.57+011847.3,f|S|K0,23:35:28.58|-47.84,1:18:47.31|-23.2,6.48,2000 +SAO 146795|HD 221835|SD-08 6142|HR 8951|J233532.07-072751.9,f|S|G5,23:35:32.07|0.30,-7:27:51.95|16.5,6.40,2000 +V26113|BD+23 4769|PPM 115637|HR 8953|J233555.94+243339.6,f|V|M1,23:35:55.94|0.95,24:33:39.64|10.2,6.45,2000 +Psc 16|SAO 128281|BD+01 4744|PPM 174256|HR 8954|J233623.28+020608.0,f|S|F6,23:36:23.29|-104.48,2:6:8.00|62.1,5.70,2000 +V26116|BD+32 4671|PPM 88962|HR 8955|J233630.51+325415.1,f|V|F6,23:36:30.51|-5.54,32:54:15.17|7.1,6.34,2000 +BD+43 4508|PPM 64452|HR 8962|J233732.04+442544.3,f|D|B8,23:37:32.04|15.21,44:25:44.38|-17,5.82,2000 +And Lambda-16A|Lambda Andromedae|BD+45 4283|PPM 64456|HR 8961|J233733.84+462729.3,f|D|G8,23:37:33.84|159.24,46:27:29.35|-421.5,3.87,2000 +SD-13 6439|PPM 241898|HR 8958|J233739.55-130336.8,f|D|G9,23:37:39.56|34.78,-13:3:36.88|25.8,5.66,2000 +Peg 74A|BD+16 4954|PPM 142691|J233739.74+164931.7,f|D|A1,23:37:39.74|132.09,16:49:31.78|-3.6,6.26,2000 +CD-4614720|PPM 329482|HR 8959|J233750.99-452932.4,f|S|A2,23:37:50.99|71.40,-45:29:32.47|-12.3,4.74,2000 +Peg 75|KS PEG|HD 222133|BD+17 4952|PPM 142695|HR 8963|J233756.80+182402.4,f|D|A1,23:37:56.80|48.53,18:24:2.40|17.6,5.49,2000 +HD 222125|SD-15 6464|J233803.03-150542.3,f|S|K0,23:38:3.03|82.26,-15:5:42.39|-111.4,6.38,2000 +And Iota-17|V14646|HD 222173|BD+42 4720|PPM 64473|HR 8965|J233808.20+431605.0,f|V|B8,23:38:8.20|27.74,43:16:5.06|-1.2,4.29,2000 +SAO 258166|CP-77 1583|PPM 375758|HR 8957|J233823.89-765210.3,f|S|K0,23:38:23.89|78.48,-76:52:10.39|-18.5,5.99,2000 +And 18|BD+49 4180|HR 8967|J233908.33+502818.2,f|S|B9,23:39:8.33|-16.71,50:28:18.24|-1.9,5.35,2000 +HD 222386|BD+74 1032|HR 8971|J233910.17+751734.3,f|S|A3,23:39:10.18|7.08,75:17:34.38|14,5.96,2000 +Cep Gamma-35|V14656|BD+76 928|HR 8974|J233920.84+773756.1,f|V|K1,23:39:20.85|-48.87,77:37:56.19|127.2,3.22,2000 +HD 222387|BD+73 1047|HR 8972|J233921.14+740009.4,f|S|G8,23:39:21.15|-8.52,74:0:9.46|5.6,5.98,2000 +Phe Theta|SAO 231719|HD 222287|CD-4714651A|HR 8966|J233927.94-463816.0,f|D|A8,23:39:27.94|22.45,-46:38:16.08|41,6.42,2000 +Aqr Omega-102|SAO 165818|HD 222345|SD-15 6471|PPM 241928|HR 8968|J233947.06-141319.8,f|S|F0,23:39:47.07|51.76,-14:13:19.84|-55.6,4.98,2000 +HD 222377|BD+08 5095|PPM 174311|J233955.04+094038.2,f|S|A2,23:39:55.04|89.16,9:40:38.26|-11.2,5.99,2000 +Psc Iota-17|V14657|HD 222368|BD+04 5035|PPM 174312|HR 8969|J233957.04+053734.6,f|D|F7,23:39:57.04|376.33,5:37:34.65|-437,4.14,2000 +HD 222399|BD+36 5098|HR 8973|J234002.81+373909.5,f|D|F2,23:40:2.82|-7.24,37:39:9.52|-80.1,6.50,2000 +And Kappa-19A|V26123|HD 222439|BD+43 4522|PPM 64525|HR 8976|J234024.50+442002.1,f|D|B9,23:40:24.51|81.33,44:20:2.15|-19,4.15,2000 +Scl Mu|V14661|HD 222433|CD-3217621|HR 8975|J234038.14-320423.2,f|V|K1,23:40:38.15|-91.39,-32:4:23.25|-53.5,5.31,2000 +HD 222451|BD+35 5074|HR 8977|J234040.63+364314.7,f|S|F1,23:40:40.64|234.58,36:43:14.76|23.6,6.24,2000 +SAO 165828|HD 222493|SD-12 6535|PPM 241961|HR 8979|J234108.91-114050.3,f|S|G9,23:41:8.91|68.45,-11:40:50.36|3.2,5.89,2000 +BD+48 4127|PPM 64544|HR 8981|J234126.78+493044.6,f|S|A4,23:41:26.79|-14.02,49:30:44.69|-19.5,6.27,2000 +Aqr 103|SAO 165834|HD 222547|SD-18 6357|PPM 241974|J234134.48-180137.4,f|S|K5,23:41:34.49|-40.79,-18:1:37.48|-72.3,5.35,2000 +Aqr 104A|V14671|SAO 165836|HD 222574|SD-18 6358|PPM 241983|HR 8982|J234145.80-174859.5,f|D|G0,23:41:45.81|14.00,-17:48:59.52|0.1,4.82,2000 +HD 222618|BD+56 3067|HR 8985|J234154.56+571535.8,f|S|G8,23:41:54.56|6.81,57:15:35.83|-5,6.24,2000 +V14672|SAO 128335|BD+06 5183|PPM 174347|HR 8983|J234156.68+071501.9,f|V|A3,23:41:56.69|-27.68,7:15:1.97|-40.9,5.90,2000 +Psc Lambda-18|SAO 128336|BD+00 5037|PPM 174348|HR 8984|J234202.80+014648.1,f|S|A7,23:42:2.81|-129.54,1:46:48.15|-154.9,4.50,2000 +V14674|HD 222641|BD+44 4473|PPM 64564|HR 8986|J234214.66+445930.1,f|V|K5,23:42:14.67|-19.20,44:59:30.17|-17.3,6.41,2000 +SAO 165841|HD 222643|SD-16 6345|PPM 241997|HR 8987|J234227.82-152652.9,f|S|K4,23:42:27.82|16.19,-15:26:52.92|-23.4,5.26,2000 +HD 222682|BD+60 2609|PPM 24655|J234231.45+614045.7,f|D|K2,23:42:31.46|39.49,61:40:45.71|-13.3,6.40,2000 +Aqr Omega-105|SAO 165842|HD 222661|SD-15 6476|HR 8988|J234243.34-143241.6,f|D|B9,23:42:43.34|98.30,-14:32:41.66|-66.8,4.49,2000 +HD 222683|BD+15 4872|PPM 142773|J234243.86+162008.5,f|S|G5,23:42:43.86|91.12,16:20:8.59|10.9,6.29,2000 +HD 222748|BD+51 3692|PPM 42125|J234305.05+515621.6,f|S|K0,23:43:5.06|30.15,51:56:21.61|-4.2,6.46,2000 +Peg 77|V14679|HD 222764|BD+09 5268|PPM 142782|HR 8991|J234322.35+101953.5,f|V|M2,23:43:22.36|4.87,10:19:53.53|11.4,5.10,2000 +Peg 78|HD 222842|BD+28 4627|PPM 115769|HR 8997|J234359.48+292141.2,f|D|K0,23:43:59.49|71.51,29:21:41.23|-40.8,4.94,2000 +SAO 231756|CD-4515114|PPM 329577|HR 8993|J234401.32-450459.2,f|S|K1,23:44:1.32|325.68,-45:4:59.24|1.9,6.09,2000 +SAO 255557|CP-65 4159|HR 8996|J234412.04-642416.0,f|S|K2,23:44:12.05|14.45,-64:24:16.02|34.6,5.72,2000 +Aqr 106|SAO 165854|HD 222847|SD-19 6500|HR 8998|J234412.07-181636.9,f|S|B9,23:44:12.08|27.63,-18:16:36.98|-3.8,5.24,2000 +SAO 258178|CP-71 2771|PPM 375797|HR 8994|J234425.43-702924.8,f|S|G8,23:44:25.43|245.17,-70:29:24.82|61.3,6.07,2000 +SAO 192116|HD 222872|CD-2616762|PPM 275288|HR 8999|J234429.06-261447.8,f|D|F4,23:44:29.06|-54.22,-26:14:47.87|-20.6,6.23,2000 +SAO 258179|CP-79 1239|HR 8995|J234440.84-784729.1,f|S|K1,23:44:40.85|54.96,-78:47:29.19|1.2,5.74,2000 +HD 222932|BD+55 3010|J234448.39+554758.8,f|S|G5,23:44:48.40|28.92,55:47:58.87|-2.6,6.45,2000 +Aqr 107A|V26139|SAO 165867|SD-19 6506A|J234600.92-184042.0,f|D|F2,23:46:0.92|131.87,-18:40:42.02|12,5.63,2000 +SAO 231769|CD-4015239|J234601.25-401057.2,f|S|A7,23:46:1.26|103.14,-40:10:57.23|-36,6.32,2000 +And Psi-20A|BD+45 4321|PPM 64635|J234602.04+462512.9,f|D|G3,23:46:2.05|9.10,46:25:12.99|-6.3,4.98,2000 +Psc 19|TX PSC|SAO 128374|BD+02 4709|PPM 174411|J234623.51+032912.5,f|V|C7,23:46:23.52|-35.04,3:29:12.52|-25,5.02,2000 +HD 223128|BD+65 1943|PPM 24711|J234636.73+664656.0,f|S|B2,23:46:36.74|7.51,66:46:56.08|-2.8,5.95,2000 +V26143|HD 223173|BD+56 3085|PPM 42199|J234701.91+572704.8,f|V|K3,23:47:1.92|4.12,57:27:4.89|-7.5,5.53,2000 +Cas Tau-5|V14707|HD 223165|BD+57 2804|J234703.45+583907.1,f|V|K1,23:47:3.45|60.71,58:39:7.16|56.7,4.88,2000 +SD-12 6559|J234715.91-115440.0,f|S|K5,23:47:15.91|-48.29,-11:54:40.05|-93.6,5.73,2000 +Phe Sigma|HD 223145|CD-5014047|PPM 351392|J234715.99-501335.2,f|S|B3,23:47:16.00|9.02,-50:13:35.26|-23.3,5.17,2000 +V14709|HD 223229|BD+46 4169|PPM 64658|J234733.04+464957.2,f|D|B3,23:47:33.05|1.23,46:49:57.23|-5,6.10,2000 +HD 223274|BD+67 1562|PPM 24729|J234754.77+674824.5,f|S|A1,23:47:54.77|14.56,67:48:24.51|-1.9,5.05,2000 +Psc 20A|SAO 146915|HD 223252|SD-03 5707|J234756.54-024541.7,f|D|G8,23:47:56.54|96.49,-2:45:41.75|5.5,5.50,2000 +V14715|SAO 146919|HD 223311|SD-07 6086|J234832.48-062249.5,f|V|K4,23:48:32.48|1.49,-6:22:49.53|-20.2,6.07,2000 +V0650 CAS|HD 223358|BD+64 1861|PPM 24745|J234839.05+645235.2,f|D|A0,23:48:39.05|17.13,64:52:35.22|-14.3,6.43,2000 +SAO 128393|HD 223346|BD+01 4773|PPM 174446|J234849.36+021251.8,f|S|F5,23:48:49.37|8.84,2:12:51.89|-35.2,6.46,2000 +V0566 CAS|HD 223385|BD+61 2533B|PPM 24748|J234850.11+621250.8,f|D|A3,23:48:50.11|-2.80,62:12:50.81|-1.4,5.43,2000 +Cas 6A|V0566 CAS|HD 223385|BD+61 2533A|PPM 24748|J234850.17+621252.2,f|D|A3,23:48:50.17|-2.80,62:12:52.26|-1.4,5.54,2000 +HD 223386|BD+59 2777|PPM 42235|J234853.96+595844.2,f|S|A0,23:48:53.97|50.51,59:58:44.29|15.2,6.33,2000 +Scl Delta|SAO 192167|HD 223352|CD-2818353|PPM 275366|J234855.54-280748.9,f|D|A0,23:48:55.55|100.00,-28:7:48.96|-104,4.58,2000 +HD 223421|BD+58 2653|PPM 42241|J234911.92+585747.5,f|S|F2,23:49:11.92|33.26,58:57:47.53|-8.4,6.36,2000 +Psc 21|HD 223438|BD+00 5054|PPM 174456|J234927.47+010434.0,f|S|A5,23:49:27.48|-0.30,1:4:34.07|-26.3,5.77,2000 +HD 223428|SD-16 6373|J234931.60-155140.5,f|S|K2,23:49:31.61|51.66,-15:51:40.60|-30.8,6.21,2000 +Peg 79|HD 223461|BD+28 4649|PPM 115865|J234939.39+285032.6,f|S|A2,23:49:39.39|62.81,28:50:32.60|25,5.96,2000 +OU AND|BD+35 5110|PPM 89159|J234940.96+362531.0,f|V|G1,23:49:40.96|0.24,36:25:31.01|-47.8,5.87,2000 +HD 223466|CD-2616796|PPM 275386|J234949.59-251952.8,f|D|A3,23:49:49.59|-24.27,-25:19:52.81|-18.9,6.43,2000 +SAO 165911|HD 223524|SD-10 6177|J235014.73-095826.8,f|S|K0,23:50:14.73|139.90,-9:58:26.89|78.3,5.93,2000 +HD 223552|BD+50 4165|J235022.23+513717.9,f|D|F3,23:50:22.23|121.16,51:37:17.98|-18.1,6.48,2000 +SAO 165915|HD 223559|SD-15 6507|PPM 242186|J235033.28-142405.3,f|S|K4,23:50:33.29|38.07,-14:24:5.36|-21.3,5.70,2000 +HD 223549|CD-4814620|J235035.63-472236.9,f|S|G8,23:50:35.64|7.82,-47:22:36.99|29.7,6.49,2000 +Peg 80|HH PEG|SAO 128421|HD 223637|BD+08 5127|PPM 174493|J235121.24+091848.0,f|V|M3,23:51:21.25|-9.92,9:18:48.06|-65.5,5.80,2000 +Aqr 108|ET AQR|SAO 165918|SD-19 6522|J235121.33-185432.9,f|V|B9,23:51:21.34|26.54,-18:54:32.99|-3.6,5.19,2000 +Psc 22|SAO 128427|HD 223719|BD+02 4725|J235157.83+025549.3,f|S|K4,23:51:57.84|14.68,2:55:49.38|-14.4,5.58,2000 +Oct Gamma1|SAO 258989|HD 223647|CP-82 905|PPM 378892|J235206.48-820107.7,f|S|G7,23:52:6.49|-49.07,-82:1:7.75|-20.9,5.11,2000 +V26157|HD 223755|BD+20 5386|J235223.39+214015.9,f|V|M2,23:52:23.39|-50.46,21:40:15.96|-5.9,6.13,2000 +HD 223778|BD+74 1047|PPM 11788|J235225.31+753240.5,f|D|K3,23:52:25.32|341.83,75:32:40.52|41.9,6.37,2000 +Peg Phi-81|Phi Pegasi|HD 223768|BD+18 5231|PPM 142928|J235229.28+190713.0,f|S|M2,23:52:29.29|-6.38,19:7:13.03|-34.2,5.08,2000 +SAO 165933|HD 223774|SD-15 6515|PPM 242236|J235229.99-141504.3,f|S|K3,23:52:29.99|-95.95,-14:15:4.38|-4.2,5.84,2000 +Peg 82|HT PEG|HD 223781|BD+10 5004|PPM 142929|J235237.10+105650.3,f|V|A4,23:52:37.10|-22.24,10:56:50.35|-3.5,5.31,2000 +SAO 146953|SD-09 6277|J235250.52-085948.3,f|S|K0,23:52:50.53|61.78,-8:59:48.32|-23.6,5.75,2000 +Psc 24A|SAO 146954|HD 223825|SD-03 5723|J235255.56-030919.7,f|D|G9,23:52:55.57|77.58,-3:9:19.73|-42.6,5.93,2000 +Psc 25|SAO 128436|HD 223855|BD+01 4792|PPM 174516|J235304.75+020526.2,f|S|A1,23:53:4.76|14.09,2:5:26.25|-10.9,6.30,2000 +SAO 192218|HD 223884|CD-2417897|PPM 275437|J235320.84-241345.3,f|S|A3,23:53:20.84|51.71,-24:13:45.33|-13.6,6.23,2000 +Cas Rho-7|Rho Cassiopeiae|BD+56 3111|PPM 42338|J235423.03+572957.7,f|S|G2,23:54:23.03|-4.51,57:29:57.78|-3.5,4.51,2000 +SAO 231842|CD-4015285|PPM 329774|J235438.62-401800.2,f|S|F8,23:54:38.62|367.45,-40:18:0.23|30.5,6.02,2000 +XZ PSC|SAO 146973|BD-00 4585|PPM 174549|J235446.62+000633.5,f|V|M5,23:54:46.62|-40.95,0:6:33.51|-14.6,5.86,2000 +Psc 26|SAO 128466|BD+06 5216|J235507.79+070415.4,f|S|B9,23:55:7.79|21.73,7:4:15.50|-18.3,6.21,2000 +AL SCL|HD 224113|CD-3217723|J235516.58-315517.2,f|V|B6,23:55:16.59|17.70,-31:55:17.28|0.8,6.10,2000 +HD 224128|BD+25 5042|PPM 115953|J235523.01+255717.9,f|S|K5,23:55:23.02|1.48,25:57:17.98|-10.5,6.50,2000 +HD 224165|BD+46 4214|J235533.47+472120.8,f|S|G8,23:55:33.48|-10.87,47:21:20.89|-7.4,6.00,2000 +V0373 CAS|HD 224151|BD+56 3115|PPM 42361|J235533.83+572443.8,f|V|B0,23:55:33.84|-3.15,57:24:43.80|-0.4,6.04,2000 +V0363 PEG|HD 224186|BD+14 5074|PPM 142976|J235554.68+151349.0,f|V|M3,23:55:54.68|80.62,15:13:49.05|-7.2,6.50,2000 +SAO 192252|HD 224283|CD-2516707|PPM 275485|J235629.94-244413.9,f|S|G5,23:56:29.95|5.59,-24:44:13.98|9.9,6.32,2000 +V26170|BD+21 4999|PPM 115976|J235641.50+223853.1,f|V|M2,23:56:41.50|-22.84,22:38:53.13|-6.5,6.17,2000 +V26172|HD 224342|BD+41 4902|PPM 64831|J235703.63+423929.6,f|V|F8,23:57:3.63|5.18,42:39:29.64|-2.4,6.03,2000 +V14772|SAO 192262|CD-2716494|PPM 275496|J235708.15-263724.4,f|V|K3,23:57:8.16|54.17,-26:37:24.41|21.1,6.25,2000 +V14773|HD 224355|BD+54 3076|PPM 42381|J235708.47+554220.5,f|V|F1,23:57:8.47|-20.45,55:42:20.54|-12.2,5.57,2000 +SAO 192264|HD 224349|SD-21 6500|PPM 275499|J235710.11-205001.1,f|S|G8,23:57:10.11|-34.91,-20:50:1.11|-14,6.44,2000 +HD 224361|CP-63 4940|PPM 366713|J235719.89-625723.7,f|S|A1,23:57:19.89|86.20,-62:57:23.70|11.6,5.96,2000 +Oct Gamma2|SAO 258996|HD 224362|CP-82 907|J235732.87-821011.2,f|S|K0,23:57:32.88|-26.63,-82:10:11.30|-25.2,5.73,2000 +BD+59 2795|J235733.53+600124.9,f|S|B9,23:57:33.53|12.59,60:1:24.96|-3.8,6.46,2000 +Tuc Eta|HD 224392|CP-64 4391|PPM 366716|J235735.07-641753.6,f|S|A1,23:57:35.08|78.84,-64:17:53.63|-61.1,5.00,2000 +Peg Psi-84|V14777|HD 224427|BD+24 4865|J235745.52+250829.0,f|D|M3,23:57:45.53|-36.12,25:8:29.04|-32.3,4.66,2000 +Cet 1|SAO 165972|HD 224481|SD-16 6394|PPM 242351|J235821.22-155050.9,f|S|K0,23:58:21.22|82.83,-15:50:50.94|-8.1,6.28,2000 +Psc 27A|V14785|HD 224533|SD-04 5996|J235840.37-033321.5,f|D|G9,23:58:40.38|-56.59,-3:33:21.54|-72.3,4.88,2000 +Phe Pi|HD 224554|CP-5310561|PPM 351542|J235855.77-524444.9,f|S|K0,23:58:55.78|57.93,-52:44:44.91|61.5,5.13,2000 +Cas Sigma-8A|HD 224572|BD+54 3082|PPM 42419|J235900.53+554517.7,f|D|B1,23:59:0.54|9.29,55:45:17.74|-5.1,4.88,2000 +Psc Omega-28|V14793|SAO 128513|HD 224617|BD+06 5227|PPM 174637|J235918.68+065147.9,f|V|F4,23:59:18.69|148.48,6:51:47.96|-112.2,4.03,2000 +BU SCL|SAO 192294|CD-3019765|PPM 275546|J235927.89-292906.6,f|V|K5,23:59:27.90|-7.83,-29:29:6.60|-6,5.59,2000 +HD 224635|BD+32 4747|J235929.29+334325.9,f|D|G0,23:59:29.29|-59.01,33:43:25.96|-105,6.49,2000 +Tuc Epsilon|SAO 255619|HD 224686|CP-66 3819|PPM 366744|J235954.97-653437.6,f|S|B9,23:59:54.98|48.62,-65:34:37.67|-22.3,4.50,2000 diff --git a/GUI/xephem/closemenu.c b/GUI/xephem/closemenu.c new file mode 100644 index 0000000..6b003bd --- /dev/null +++ b/GUI/xephem/closemenu.c @@ -0,0 +1,1228 @@ +/* code to handle the close objects menu. + * + * the basic idea is to sort all objects into bands of dec (or alt). + * then scan for pairs of close objects within one and adjacent bands. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +#define MINSEP degrad(.1) /* smallest sep we allow. + * this is not a hard limit, just a sanity + * check. as sep shrinks, we make more and + * more tiny little malloced bands. + */ + +/* record of a band. + * opp is malloced -- can hold nmem, nuse of which are in use. + */ +typedef struct { + int nuse; /* number of Obj * actually in use in opp now */ + int nmem; /* number of Obj * there is room for in opp now */ + Obj **opp; /* malloced list of Object pointers, or NULL */ +} Band; + +/* record of a pair. + * used to collect pairs as the bands are scanned. + */ +typedef struct { + Obj *op1, *op2; /* two objects */ + float sep; /* separation, rads (float to save memory) */ +} Pair; + +static void c_create_shell (void); +static void c_help_cb (Widget w, XtPointer client, XtPointer call); +static void c_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void c_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void c_close_cb (Widget w, XtPointer client, XtPointer call); +static void c_flist_cb (Widget w, XtPointer client, XtPointer call); +static void c_actlist_cb (Widget w, XtPointer client, XtPointer call); +static void c_skypoint_cb (Widget w, XtPointer client, XtPointer call); +static void c_go_cb (Widget w, XtPointer client, XtPointer call); +static int sky_point (void); +static void do_search (void); +static int get_options (double *sp, double *mp, int *wp, int *op); +static void free_band (Band bp[], int nb); +static int init_bands (double sep, double mag, Band **bpp); +static int add_obj (Band *bp, Obj *op); +static int find_close (Band bp[], int nb, double maxsep, int wander, int + ownmoons, Pair **ppp); +static int add_pair (Obj *op1, Obj *op2, double sep, Pair **ppp, + int *mp, int *np); +static int add_pair (Obj *op1, Obj *op2, double sep, Pair **ppp, + int *mp, int *np); +static int dspl_pairs (Pair p[], int np, double sep); + +static void c_create_flist_w (void); +static void c_flistok_cb (Widget w, XtPointer client, XtPointer call); +static void flistok_append_cb (void); +static void flistok_overwrite_cb (void); +static void make_flist (char *name, char *how); +static void write_flist (FILE *fp); + + +static Widget cshell_w; /* main shell */ +static Widget sep_w; /* text widget to hold max sep */ +static Widget mag_w; /* text widget to hold mag limit */ +static Widget timestmp_w; /* label for time stamp */ +static Widget count_w; /* label for count of objects in list */ +static Widget list_w; /* the list of close objects */ +static Widget flist_w; /* the file list dialog */ +static Widget wander_w; /* toggle to omit pairs of fixed objs*/ +static Widget ownmoons_w; /* toggle to omit a planet's own moons */ +static Widget autoup_w; /* toggle to automatically redo on updates */ +static Widget autols_w; /* toggle to automatically list on updates */ + +static char closecategory[] = "Close pairs"; /* Save category */ + +/* bring up Close pairs shell, creating if first time */ +void +c_manage() +{ + if (!cshell_w) { + c_create_shell(); + c_create_flist_w (); + } + XtPopup (cshell_w, XtGrabNone); + set_something (cshell_w, XmNiconic, (XtArgVal)False); +} + +/* called when time has advanced. + * compute a new Close list if desired. + */ +/* ARGSUSED */ +void +c_update (np, force) +Now *np; +int force; +{ + if (!isUp(cshell_w) || !XmToggleButtonGetState (autoup_w)) + return; + + do_search(); +} + + +/* called to put up or remove the watch cursor. */ +void +c_cursor (c) +Cursor c; +{ + Window win; + + if (cshell_w && (win = XtWindow(cshell_w)) != 0) { + Display *dsp = XtDisplay(cshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create a form in a shell to allow user to work with the list. */ +static void +c_create_shell () +{ + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "CloseObjects"}, + {"on Control...", "CloseObjects_control"}, + {"on Options...", "CloseObjects_options"}, + {"Misc...", "CloseObjects_misc"}, + }; + Widget mb_w, pd_w, cb_w; + Widget s_w; + XmString str; + Widget cform_w; + Widget w; + Arg args[20]; + int n; + int i; + + /* create outter shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Close Pairs"); n++; + XtSetArg (args[n], XmNiconName, "Close"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + cshell_w = XtCreatePopupShell ("CloseObjs", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (cshell_w); + set_something (cshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (cshell_w, XmNpopdownCallback, c_popdown_cb, NULL); + sr_reg (cshell_w, "XEphem*CloseObjs.width", closecategory, 0); + sr_reg (cshell_w, "XEphem*CloseObjs.height", closecategory, 0); + sr_reg (cshell_w, "XEphem*CloseObjs.x", closecategory, 0); + sr_reg (cshell_w, "XEphem*CloseObjs.y", closecategory, 0); + + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + cform_w = XmCreateForm(cshell_w, "CloseSh", args, n); + XtAddCallback (cform_w, XmNhelpCallback, c_help_cb, NULL); + XtManageChild (cform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (cform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* make the Go button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Run", args, n); + XtAddCallback (w, XmNactivateCallback, c_go_cb, 0); + wtip (w, "Perform one scan for close pairs"); + XtManageChild (w); + + /* make the sky point button */ + + n = 0; + w = XmCreatePushButton (pd_w, "SkyPt", args, n); + XtAddCallback (w, XmNactivateCallback, c_skypoint_cb, 0); + set_xmstring(w, XmNlabelString, "Sky point"); + wtip (w, "Center the Sky View on the pair selected in the list"); + XtManageChild (w); + + /* make the file list button */ + + n = 0; + w = XmCreatePushButton (pd_w, "File", args, n); + XtAddCallback (w, XmNactivateCallback, c_flist_cb, 0); + set_xmstring(w, XmNlabelString, "List to file..."); + wtip (w, "Save the current list to a file"); + XtManageChild (w); + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep3", args, n); + XtManageChild (w); + + /* add the close button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, c_close_cb, 0); + wtip (w, "Close this window"); + XtManageChild (w); + + /* make the options pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "OptionsPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'O'); n++; + cb_w = XmCreateCascadeButton (mb_w, "OptionsCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Options"); + XtManageChild (cb_w); + + /* make the auto update button */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + autoup_w = XmCreateToggleButton (pd_w, "AutoUp", args, n); + set_xmstring(autoup_w, XmNlabelString, "Auto run"); + wtip (autoup_w, "Whether to automatically perform a new scan after each Main menu Update."); + XtManageChild (autoup_w); + sr_reg (autoup_w, NULL, closecategory, 1); + + /* make the auto list button */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + autols_w = XmCreateToggleButton (pd_w, "AutoList", args, n); + set_xmstring(autols_w, XmNlabelString, "Auto list"); + wtip (autols_w, + "Whether to automatically append each new scan to the list file."); + XtManageChild (autols_w); + sr_reg (autols_w, NULL, closecategory, 1); + + /* make the button to omit fixed pairs */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + wander_w = XmCreateToggleButton (pd_w, "OmitFixedPairs", args, n); + set_xmstring(wander_w, XmNlabelString, "Omit fixed pairs"); + wtip (wander_w, "Whether pairs of Fixed objects are not shown."); + XtManageChild (wander_w); + sr_reg (wander_w, NULL, closecategory, 1); + + /* make the button to omit planets and their own satellites */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + ownmoons_w = XmCreateToggleButton (pd_w, "OmitOwnMoons", args, n); + set_xmstring(ownmoons_w, XmNlabelString, "Omit planet's own moons"); + wtip (ownmoons_w, + "Whether to skip pairs that are a planet and it's own moons."); + XtManageChild (ownmoons_w); + sr_reg (ownmoons_w, NULL, closecategory, 1); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, c_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make the separation label and entry field */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 47); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreateLabel (cform_w, "SepLabel", args, n); + set_xmstring (w, XmNlabelString, "Max Sep (degs): "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 53); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + sep_w = XmCreateTextField (cform_w, "Sep", args, n); + wtip (sep_w, "Enter desired max separation to list"); + XtManageChild (sep_w); + + /* make the limiting mag label and entry field */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 47); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreateLabel (cform_w, "MagLabel", args, n); + set_xmstring (w, XmNlabelString, "Mag limit: "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 53); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + mag_w = XmCreateTextField (cform_w, "Mag", args, n); + wtip (mag_w, "Enter desired limiting magnitude"); + XtManageChild (mag_w); + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mag_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNseparatorType, XmDOUBLE_LINE); n++; + s_w = XmCreateSeparator (cform_w, "Sep1", args, n); + XtManageChild (s_w); + + /* make the list count label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, s_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + count_w = XmCreateLabel (cform_w, "Count", args, n); + set_xmstring (count_w, XmNlabelString, "0 Pairs"); + XtManageChild (count_w); + + /* make the time stamp label at the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + timestmp_w = XmCreateLabel (cform_w, "TSL", args, n); + set_xmstring (timestmp_w, XmNlabelString, " -- "); + wtip (timestmp_w, "Date and Time for which data are computed"); + XtManageChild (timestmp_w); + + /* make the list between the count and the time */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, count_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, timestmp_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + XtSetArg (args[n], XmNlistSizePolicy, XmCONSTANT); n++; + list_w = XmCreateScrolledList (cform_w, "List", args, n); + XtAddCallback (list_w, XmNdefaultActionCallback, c_actlist_cb, NULL); + wtip (list_w, "The list of close pairs"); + XtManageChild (list_w); +} + +/* called when the general help key is pressed */ +/* ARGSUSED */ +static void +c_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Select desired max separation and viewpoint, then Control->Start to find all", +"pairs of objects separated by less than the given angular distance.", +}; + + hlp_dialog ("CloseObjects", msg, XtNumber(msg)); +} + +/* called when any of the individual help entries are selected. + * client contains the string for hlp_dialog(). + */ +/* ARGSUSED */ +static void +c_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback from file List control button. */ +/* ARGSUSED */ +static void +c_flist_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (flist_w); +} + +/* called when our toplevel shell is popped down */ +/* ARGSUSED */ +static void +c_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XtIsManaged(flist_w)) + XtUnmanageChild (flist_w); +} + +/* called when the Close pushbutton is activated */ +/* ARGSUSED */ +static void +c_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let the popdown do the rest of the work */ + XtPopdown (cshell_w); +} + +/* called when a list item is double-clicked */ +/* ARGSUSED */ +static void +c_actlist_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + (void) sky_point(); +} + +/* called when the Sky Point pushbutton is activated */ +/* ARGSUSED */ +static void +c_skypoint_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (sky_point() < 0) + xe_msg (1, "First select a line from the list."); +} + +/* called when the Perform Search pushbutton is activated */ +/* ARGSUSED */ +static void +c_go_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + do_search(); +} + +/* tell sky view to point to the first object named in the current selection. + * return 0 if ok, else -1. + */ +static int +sky_point() +{ + String sel; + char objname[MAXNM]; + XmStringTable si; + int sic; + DBScan dbs; + Obj *op; + int i; + + /* get the current select item, if any */ + get_something (list_w, XmNselectedItemCount, (XtArgVal)&sic); + if (sic < 1) + return (-1); + get_something (list_w, XmNselectedItems, (XtArgVal)&si); /* don't free*/ + XmStringGetLtoR (si[0], XmSTRING_DEFAULT_CHARSET, &sel); /* free */ + + /* extract the name of the first object -- see dspl_pairs's formating */ + (void) strncpy (objname, sel+7, sizeof(objname)); + XtFree (sel); + objname[sizeof(objname)-1] = '\0'; + for (i = MAXNM-2; i >= 0; --i) + if (objname[i] == ' ') + objname[i] = '\0'; + else + break; + + /* scan the db for the object */ + for (db_scaninit (&dbs, ALLM, NULL, 0); (op = db_scan(&dbs)) != NULL; ) + if (strcmp (op->o_name, objname) == 0) + break; + + /* point sky if found */ + if (op) + sv_point (op); + else + xe_msg (1, "Can not find `%s' in memory!", objname); + + return (0); +} + +/* given two pointers to Obj *, return how they sort by dec in qsort-style. + */ +static int +racmp_f (const void *v1, const void *v2) +{ + Obj *op1 = *((Obj **)v1); + Obj *op2 = *((Obj **)v2); + double ra1 = op1->s_ra; + double ra2 = op2->s_ra; + + if (ra1 < ra2) + return (-1); + if (ra1 > ra2) + return (1); + return (0); +} + +static void +do_search() +{ + int als = XmToggleButtonGetState(autols_w); + double sep; /* desired max separation, rads */ + double mag; /* limiting magnitude */ + int wander; /* 1 to limit list to at least one wanderer */ + int ownmoons; /* 1 to omit planet's own moons */ + Band *bp = NULL;/* malloced array of nb bands */ + int nb; /* number of dec (or alt) bands */ + Pair *pp = NULL;/* malloced list of close pairs */ + int np; /* number of pairs */ + + /* retrieve user option settings */ + if (get_options (&sep, &mag, &wander, &ownmoons) < 0) + return; + + /* ok, let's get to the real work */ + watch_cursor (1); + + /* compute band size, deal and sort objects into their own and adjacent + * bands. + */ + nb = init_bands (sep, mag, &bp); + if (nb < 0) { + watch_cursor (0); + return; + } + + /* look through bands for all pairs closer than sep. + * form sorted lists of them in malloced pp array. + */ + np = find_close (bp, nb, sep, wander, ownmoons, &pp); + + /* finished with the bands now */ + free_band (bp, nb); + + /* report what we found */ + if (np > 0) + (void) dspl_pairs (pp, np, sep); + else if (!als) + xe_msg (1, "No such pairs found."); + + /* add to file if on */ + if (als) + flistok_append_cb (); + + /* finished */ + if (pp) + free ((char *)pp); + watch_cursor (0); +} + +/* retrieve the desired separation and other user option settings. + * return 0 if ok, else -1 + */ +static int +get_options (sp, mp, wp, op) +double *sp; /* max separation, rads */ +double *mp; /* limiting magnitude */ +int *wp; /* wanderer flag */ +int *op; /* ownmoons flag */ +{ + char *str; + + str = XmTextFieldGetString (sep_w); + *sp = degrad(atod(str)); + XtFree (str); + if (*sp < MINSEP) { + xe_msg (1, "Please specify a max separation >= %g degrees.", + raddeg(MINSEP)); + return (-1); + } + + str = XmTextFieldGetString (mag_w); + *mp = atod(str); + XtFree (str); + + *wp = XmToggleButtonGetState (wander_w); + + *op = XmToggleButtonGetState (ownmoons_w); + + return (0); +} + +/* free a list of nb Bands, including their opp. + * allow for NULL pointers at any step. + */ +static void +free_band (bp, nb) +Band bp[]; +int nb; +{ + Band *bpsav = bp; + + if (!bp) + return; + + for (bp += nb; --bp >= bpsav; ) + if (bp->opp) + free ((char *)bp->opp); + + free ((char *)bpsav); +} + +/* given separation and other factors, build up the array of bands: + * find the number of bands and malloc array of bands at *bpp; + * deal each qualified object into its own and adjacent-up band; + * sort each band according to increasing ra (or az). + * if all ok return number of bands created at *bpp, else -1. + * N.B. caller must free_band(*bpp) if we return >= 0. + */ +static int +init_bands (sep, mag, bpp) +double sep; +double mag; +Band **bpp; +{ +#define BAND(x) ((int)floor(((x)+PI/2)/bandsiz)) + int topo = pref_get (PREF_EQUATORIAL) == PREF_TOPO; + double bandsiz; + Band *bp; + DBScan dbs; + int nobj; + int nb; + Obj *op; + int n, i; + + /* compute number of bands and band size */ + nb = (int)ceil(PI/sep); + if (nb < 1) { + xe_msg (1, "Please decrease max separation to < 180 degrees."); + return (-1); + } + bandsiz = PI/nb; + + /* malloc list of zero'd Bands */ + bp = (Band *) calloc (nb, sizeof(Band)); + if (!bp) { + xe_msg (1, + "Could not malloc %d bands -- try increasing max separation.", + nb); + return(-1); + } + + /* scan db and fill in bands. + * each object goes in its own band and the one adjacent. + * we do not include undefined user objects nor those too dim or low. + * we also check for entries with bogus bands but should never be any. + */ + nobj = db_n(); + n = 0; + for (db_scaninit(&dbs, ALLM, NULL, 0); (op = db_scan(&dbs)) != NULL; ) { + int b; + + pm_set (33 * n++ / nobj); /* about 0-33% of time here */ + + /* update object */ + db_update (op); + if (get_mag(op) > mag) + continue; + if (topo && op->s_alt < 0.0) + continue; + + /* find which band op fits into */ + b = BAND(op->s_dec); + if (b < 0 || b > nb) { + xe_msg (0, "%s is out of band: %d.", op->o_name, b); + continue; + } + + /* add op to its band */ + if (add_obj (&bp[b], op) < 0) { + free_band (bp, nb); + return (-1); + } + + /* unless we are at the top (N pole) add op to next band up too */ + if (b < nb-1 && add_obj (&bp[b+1], op) < 0) { + free_band (bp, nb); + return (-1); + } + } + + /* sort each band by ra (az) + */ + for (i = 0; i < nb; i++) + if (bp[i].nuse > 0) + qsort ((void *)bp[i].opp, bp[i].nuse, sizeof (Obj *), racmp_f); + + /* report answers and return */ + *bpp = bp; + return (nb); +} + +/* add one more op to Band bp, growing opp as necessary. + * return 0 if ok, else xe_msg() and -1. + */ +static int +add_obj (bp, op) +Band *bp; +Obj *op; +{ +#define BCHUNKS 32 /* grow the Obj * list at opp this much at a time */ + + /* init the list if this is the first time. */ + if (!bp->opp) { + char *newmem; + + newmem = malloc (BCHUNKS * sizeof(Obj *)); + if (!newmem) { + xe_msg (1, "Can not malloc temp Objects."); + return (-1); + } + + bp->opp = (Obj **) newmem; + bp->nmem = BCHUNKS; + bp->nuse = 0; + } + + /* grow the list if necessary */ + if (bp->nuse == bp->nmem) { + char *newmem; + + newmem = realloc((char *)bp->opp, (bp->nmem+BCHUNKS)*sizeof(Obj *)); + if (!newmem) { + xe_msg (1, "Can not realloc more temp Objects."); + return (-1); + } + + bp->opp = (Obj **) newmem; + bp->nmem += BCHUNKS; + } + + bp->opp[bp->nuse++] = op; + + return (0); +} + +/* malloc and fill *ppp with the close pairs in the sorted bands. + * return count of new items in *ppp if ok else -1. + * N.B. caller must free *ppp if it is != NULL no matter what we return. + */ +static int +find_close (bp, nb, maxsep, wander, ownmoons, ppp) +Band bp[]; /* list of bands to scan */ +int nb; /* number of bands */ +double maxsep; /* max sep we are looking for, rads */ +int wander; /* 1 if limit to pairs with at least one wanderer (ss object) */ +int ownmoons; /* 1 if limit planets with their own moons */ +Pair **ppp; /* return list of pairs we malloc */ +{ + double stopsep = maxsep*2.3; /* stop scan at maxsep*sqrt(1**2 + 2**2) */ + int m = 0; /* n pairs there are room for in *ppp */ + int n = 0; /* n pairs in use in *ppp */ + int b; + + + /* be sure everyone knows nothing has been malloced yet */ + *ppp = NULL; + + /* scan each band */ + for (b = 0; b < nb; b++, bp++) { + int nuse = bp->nuse; + int i; + + pm_set (33 + 33 * b / nb); /* about 33-66% more of time here */ + + /* compare against each object in this band */ + for (i = 0; i < nuse; i++) { + Obj *opi = bp->opp[i]; + int j; + + /* set up for finding sep -- see solve_sphere() -- i is c */ + double cc = sin(opi->s_dec); + double sc = cos(opi->s_dec); + + /* scan forward for close objects in the same band. + * wrap, but not so far as to reach self again. + * since bands are sorted we can cut off when find one too far. + * but this _can_ lead to dups for very short band lists. + */ + for (j = (i+1)%nuse; j != i; j = (j+1)%nuse) { + Obj *opj = bp->opp[j]; + double cb, sb; + double A, cA; + double sep, csep; + + /* omit if both are fixed and want at least one wanderer */ + if (wander && is_type(opi,FIXEDM) && is_type(opj,FIXEDM)) + continue; + + /* omit if both are in the same planet system */ + if (ownmoons && is_type(opi,PLANETM) && is_type(opj,PLANETM) + && opi->pl_code == opj->pl_code) + continue; + + /* find the exact separation */ + cb = sin(opj->s_dec); /* j is b */ + sb = cos(opj->s_dec); + A = opi->s_ra - opj->s_ra; + cA = cos(A); + csep = cb*cc + sb*sc*cA; + if (csep > 1.0) csep = 1.0; /* just paranoid */ + if (csep < -1.0) csep = -1.0; + sep = acos(csep); + + /* stop when we're so far from opi there can be no more */ + if (sep > stopsep) + break; + + if (sep <= maxsep) + if (add_pair (opi, opj, sep, ppp, &m, &n) < 0) + return (-1); + } + } + } + + return (n); +} + +/* add the two objects to the list of pairs. + * we malloc/realloc as needed to grow *ppp, updating {m,n}p. + * put the smaller of op1/2 in slot op1 for later dup checking. + * return 0 if ok, else -1. + * N.B. the caller must free *ppp if it is not NULL no matter what we return. + */ +static int +add_pair (op1, op2, sep, ppp, mp, np) +Obj *op1, *op2; /* the two objects to report */ +double sep; /* separation, rads */ +Pair **ppp; /* pointer to malloced list of lines */ +int *mp; /* pointer to number of Pairs already in *ppp */ +int *np; /* pointer to number of *ppp actually in use */ +{ +#define PCHUNKS 32 /* grow the report list this many at a time */ + Pair *newp; + + /* init the list if this is the first time. */ + if (!*ppp) { + char *newmem; + + newmem = malloc (PCHUNKS * sizeof(Pair)); + if (!newmem) { + xe_msg (1, "Can not malloc any Pairs."); + return (-1); + } + + *ppp = (Pair *) newmem; + *mp = PCHUNKS; + *np = 0; + } + + /* grow the list if necessary */ + if (*np == *mp) { + char *newmem; + + newmem = realloc((char *)*ppp, (*mp+PCHUNKS) * sizeof(Pair)); + if (!newmem) { + xe_msg (1, "Can not realloc more Pairs."); + return (-1); + } + + *ppp = (Pair *) newmem; + *mp += PCHUNKS; + } + + newp = &(*ppp)[*np]; + *np += 1; + + /* this lets us sort pairs of objects when their sep matches for + * later elimination of dups. + */ + if (op1 < op2) { + newp->op1 = op1; + newp->op2 = op2; + } else { + newp->op1 = op2; + newp->op2 = op1; + } + newp->sep = (float)sep; + + return (0); +} + +/* sort the two Pairs according to increasing separation in qsort() fashion + * then by memory location of op1 then op2 -- this way two pairs of the same + * objects will sort adjacent, and is used later to elminate dups. + */ +static int +pair_cmpf (const void *v1, const void *v2) +{ + Pair *p1 = (Pair *)v1; + Pair *p2 = (Pair *)v2; + double s1 = (double)p1->sep; + double s2 = (double)p2->sep; + + if (s1 < s2) + return (-1); + else if (s1 > s2) + return (1); + else { + Obj *opa, *opb; + + opa = p1->op1; + opb = p2->op1; + if (opa < opb) + return (-1); + else if (opa > opb) + return (1); + + opa = p1->op2; + opb = p2->op2; + if (opa < opb) + return (-1); + else if (opa > opb) + return (1); + else + return (0); + } +} + +/* fill the list widget with the given set of pairs. + * also update the attendent messages. + * return 0 if ok else -1. + */ +static int +dspl_pairs (pp, np, sep) +Pair pp[]; +int np; +double sep; +{ + XmString *xmstrtbl; + char buf[128]; + char sepstr[64]; + int ns; + int i; + + /* sort pairs by increasing separation then by object pointers */ + qsort ((void *)pp, np, sizeof(Pair), pair_cmpf); + + /* put into the list in one big push for best performance. + * beware of and remove any dups. + * ns ends up as the number of strings in xmstrtbl[]. + */ + xmstrtbl = (XmString *) malloc (np * sizeof(XmString)); + if (!xmstrtbl) { + xe_msg (1, "No memory for %d XmStrings", np); + return (-1); + } + for (ns = i = 0; i < np; i++) { + Pair *ppi = &pp[i]; + + pm_set (66 + 29 * i / np); /* about 66-95% time here */ + + /* can eliminate dups this way because of sort */ + if (i > 0) { + Pair *lpp = &pp[i-1]; + + if (ppi->op1 == lpp->op1 && ppi->op2 == lpp->op2) + continue; + } + + /* N.B. if you change this format, rework sky_point's extraction */ + + fs_pangle (sepstr, (double)ppi->sep); + (void) sprintf (buf, "%6.2f %-*.*s %6.2f %-*.*s %s", + get_mag(ppi->op1), + MAXNM-1, MAXNM-1, ppi->op1->o_name, + get_mag(ppi->op2), + MAXNM-1, MAXNM-1, ppi->op2->o_name, + sepstr); + xmstrtbl[ns++] = XmStringCreateSimple (buf); + } + + /* reload the list */ + XtUnmanageChild (list_w); + XmListDeleteAllItems (list_w); + XmListAddItems (list_w, xmstrtbl, ns, 0); + XtManageChild (list_w); + + /* finished with xmstrtbl */ + for (i = 0; i < ns; i++) + XmStringFree (xmstrtbl[i]); + free ((char *)xmstrtbl); + + /* update the messages */ + fs_pangle (sepstr, sep); + (void) sprintf (buf, "Found %d %s Pair%s <=%s", ns, + pref_get(PREF_EQUATORIAL)==PREF_TOPO ? "Topocentric" : "Geocentric", + ns==1 ? "" : "s", sepstr); + set_xmstring (count_w, XmNlabelString, buf); + timestamp (mm_get_now(), timestmp_w); + + pm_set (100); + + return (0); +} + +/* create the list filename prompt */ +static void +c_create_flist_w() +{ + Arg args[20]; + Widget tw; + int n; + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg(args[n], XmNmarginWidth, 20); n++; + XtSetArg(args[n], XmNmarginHeight, 20); n++; + flist_w = XmCreatePromptDialog (cshell_w, "CloseList", args,n); + set_something (flist_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (flist_w, XmNdialogTitle, "xephem Close list"); + set_xmstring (flist_w, XmNselectionLabelString, "File name:"); + tw = XmSelectionBoxGetChild(flist_w, XmDIALOG_TEXT); + defaultTextFN (tw, 1, "closelist.txt", NULL); + sr_reg (tw, NULL, closecategory, 1); + XtUnmanageChild (XmSelectionBoxGetChild(flist_w, XmDIALOG_HELP_BUTTON)); + XtAddCallback (flist_w, XmNokCallback, c_flistok_cb, NULL); + XtAddCallback (flist_w, XmNmapCallback, prompt_map_cb, NULL); +} + +/* called when the Ok button is hit in the file flist prompt */ +/* ARGSUSED */ +static void +c_flistok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024]; + int icount; + char *name; + + get_xmstring(w, XmNtextString, &name); + + if (strlen(name) == 0) { + xe_msg (1, "Please enter a file name."); + XtFree (name); + return; + } + + get_something (list_w, XmNitemCount, (XtArgVal)&icount); + if (icount == 0) { + xe_msg (1, "No items in list -- no file action."); + XtFree (name); + return; + } + + if (existd (name,NULL) == 0 && confirm()) { + (void) sprintf (buf, "%s exists:\nAppend or Overwrite?", name); + query (cshell_w, buf, "Append", "Overwrite", "Cancel", + flistok_append_cb, flistok_overwrite_cb, NULL); + } else + flistok_overwrite_cb(); + + XtFree (name); +} + +/* called when we want to append to a flist file */ +static void +flistok_append_cb () +{ + char *name; + + get_xmstring (flist_w, XmNtextString, &name); + make_flist (name, "a"); + XtFree (name); +} + +/* called when we want to ceate a new flist file */ +static void +flistok_overwrite_cb () +{ + char *name; + + get_xmstring (flist_w, XmNtextString, &name); + make_flist (name, "w"); + XtFree (name); +} + +/* open the named flist file "a" or "w" and fill it in. */ +static void +make_flist (name, how) +char *name; +char *how; +{ + FILE *fp = fopend (name, NULL, how); + + if (fp) { + write_flist (fp); + (void) fclose (fp); + } else { + XmToggleButtonSetState (autols_w, False, False); + XmToggleButtonSetState (autoup_w, False, False); + } +} + +/* write out all objects currently in the list, with header, to fp */ +static void +write_flist (fp) +FILE *fp; +{ + XmStringTable items; + int icount; + char *p; + int i; + + get_something (list_w, XmNitemCount, (XtArgVal)&icount); + if (icount <= 0) + return; + + watch_cursor(1); + + get_xmstring (count_w, XmNlabelString, &p); + (void) fprintf (fp, "%s", p); + XtFree (p); + get_xmstring (timestmp_w, XmNlabelString, &p); + (void) fprintf (fp, " at %s\n", p); + XtFree (p); + + get_something (list_w, XmNitems, (XtArgVal)&items); + + for (i = 0; i < icount; i++) { + XmStringGetLtoR (items[i], XmSTRING_DEFAULT_CHARSET, &p); + (void) fprintf (fp, "%s\n", p); + XtFree (p); + } + + watch_cursor(0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: closemenu.c,v $ $Date: 2004/03/16 18:44:38 $ $Revision: 1.19 $ $Name: $"}; diff --git a/GUI/xephem/compiler.c b/GUI/xephem/compiler.c new file mode 100644 index 0000000..ed4d4da --- /dev/null +++ b/GUI/xephem/compiler.c @@ -0,0 +1,591 @@ +/* module to compile and execute a c-style arithmetic expression. + * public entry points are compile_expr() and execute_expr(). + * + * field names are defined to be anything in double quotes when compiling. + * the compiler will build a table of names it sees; indexes into this table + * are part of the opcode. Field names are resolved when the expression is + * evaluated to avoid restricting when the fields are named and defined. + * + * one reason this is so nice and tight is that all opcodes are the same size + * (an int) and the tokens the parser returns are directly usable as opcodes. + * constants and variables are compiled as an opcode with an offset into the + * auxiliary consts and vars arrays. + */ + +#include +#include +#include +#include + +#include +#include + +#include "xephem.h" + + +static int next_token (void); +static int chk_funcs (void); +static void skip_double (void); +static int compile (int prec); +static int execute (double *result); +static int parse_fieldname (char name[], int len); + +/* parser tokens and opcodes, as necessary */ +#define HALT 0 /* good value for HALT since program is inited to 0 */ +/* binary operators (precedences in table, below) */ +#define ADD 1 +#define SUB 2 +#define MULT 3 +#define DIV 4 +#define AND 5 +#define OR 6 +#define GT 7 +#define GE 8 +#define EQ 9 +#define NE 10 +#define LT 11 +#define LE 12 +/* unary op, precedence in NEG_PREC #define, below */ +#define NEG 13 +/* symantically operands, ie, constants, variables and all functions */ +#define CONST 14 +#define VAR 15 +#define ABS 16 /* add functions if desired just like this is done */ +#define FLOOR 17 +#define SIN 18 +#define COS 19 +#define TAN 20 +#define ASIN 21 +#define ACOS 22 +#define ATAN 23 +#define PITOK 24 /* built-in constant, pi */ +#define DEGRAD 25 +#define RADDEG 26 +#define LOG 27 +#define LOG10 28 +#define EXP 29 +#define SQRT 30 +#define POW 31 +#define ATAN2 32 +/* purely tokens - never get compiled as such */ +#define LPAREN 255 +#define RPAREN 254 +#define COMMA 253 +#define ERR (-1) + +/* precedence of each of the binary operators. + * in case of a tie, compiler associates left-to-right. + * N.B. each entry's index must correspond to its #define! + */ +static int precedence[] = {0,5,5,6,6,2,1,4,4,3,3,4,4}; +#define NEG_PREC 7 /* negation is highest */ + +/* execute-time operand stack */ +#define MAX_STACK 16 +static double stack[MAX_STACK], *sp; + +/* space for compiled opcodes - the "program". + * opcodes go in lower 8 bits. + * when an opcode has an operand (as CONST and VAR) it is really an array + * index in the remaining upper bits. + */ +#define MAX_PROG 32 +static int program[MAX_PROG], *pc; +#define OP_SHIFT 8 +#define OP_MASK 0xff + +/* auxiliary operand info. + * the operands (all but lower 8 bits) of CONST and VAR are really indeces + * into these arrays. thus, no point in making them any longer than you have + * bits more than 8 in your machine's int to index into it, ie, make + * MAX_OPX <= 1 << ((sizeof(int)-1)*8) + */ +#define MAX_OPX 16 +#define MAXFLDLEN 32 /* longest allowed field name */ +typedef struct { + char v_name[MAXFLDLEN]; /* name of field */ + double v_v; /* last known value of this field */ +} Var; +static Var vars[MAX_OPX]; +static int nvars; /* number of vars[] in actual use */ +static double consts[MAX_OPX]; +static int nconsts; /* number of consts[] in actual use */ + + +/* these are global just for easy/rapid access */ +static int parens_nest; /* to check that parens end up nested */ +static char *err_msg; /* caller provides storage; we point at it with this */ +static char *cexpr, *lcexpr; /* pointers that move along caller's expression */ +static int good_prog; /* != 0 when program appears to be good */ + +/* compile the given c-style expression. + * return 0 and set good_prog if ok, + * else return -1 and a reason message in errbuf. + */ +int +compile_expr (ex, errbuf) +char *ex; +char *errbuf; +{ + /* init the globals. + * also delete any flogs used in the previous program. + */ + cexpr = ex; + err_msg = errbuf; + pc = program; + nvars = nconsts = 0; + parens_nest = 0; + + pc = program; + if (compile(0) == ERR) { + (void) sprintf (err_msg + strlen(err_msg), " near `%.10s'", lcexpr); + good_prog = 0; + return (-1); + } + if (pc == program) { + (void) sprintf (err_msg, "Null program"); + good_prog = 0; + return (-1); + } + *pc++ = HALT; + good_prog = 1; + return (0); +} + +/* execute the expression previously compiled with compile_expr(). + * return 0 with *vp set to the answer if ok, else return -1 with a reason + * why not message in errbuf. + */ +int +execute_expr (vp, errbuf) +double *vp; +char *errbuf; +{ + int s; + + err_msg = errbuf; + sp = stack + MAX_STACK; /* grows towards lower addresses */ + pc = program; + s = execute(vp); + if (s < 0) + good_prog = 0; + return (s); +} + +/* this is a way for the outside world to ask whether there is currently a + * reasonable program compiled and able to execute. + */ +int +prog_isgood() +{ + return (good_prog); +} + +/* called when each different field is written. + * this is just called by srch_log() to hide the fact from users of srch* + * that srch is really using our vars array to store values. + * since this gets called for all fields, it's not an error to not find name. + * don't stop when see the first one because a term might appear more than once. + */ +void +compiler_log (name, value) +char *name; +double value; +{ + Var *vp; + + for (vp = vars; vp < &vars[nvars]; vp++) + if (vp->v_name && strcmp (vp->v_name, name) == 0) + vp->v_v = value; +} + +/* get and return the opcode corresponding to the next token. + * leave with lcexpr pointing at the new token, cexpr just after it. + * also watch for mismatches parens and proper operator/operand alternation. + */ +static int +next_token () +{ + static char toomv[] = "More than %d variables"; + static char toomc[] = "More than %d constants"; + static char badop[] = "Illegal operator"; + int tok = ERR; /* just something illegal */ + char c; + + while (isspace(c = *cexpr)) + cexpr++; + lcexpr = cexpr++; + + /* mainly check for a binary operator */ + switch (c) { + case ',': tok = COMMA; break; + case '\0': --cexpr; tok = HALT; break; /* keep returning HALT */ + case '+': tok = ADD; break; /* compiler knows when it's really unary */ + case '-': tok = SUB; break; /* compiler knows when it's really negate */ + case '*': tok = MULT; break; + case '/': tok = DIV; break; + case '(': parens_nest++; tok = LPAREN; break; + case ')': + if (--parens_nest < 0) { + (void) sprintf (err_msg, "Too many right parens"); + return (ERR); + } else + tok = RPAREN; + break; + case '|': + if (*cexpr == '|') { cexpr++; tok = OR; } + else { (void) strcpy (err_msg, badop); return (ERR); } + break; + case '&': + if (*cexpr == '&') { cexpr++; tok = AND; } + else { (void) strcpy (err_msg, badop); return (ERR); } + break; + case '=': + if (*cexpr == '=') { cexpr++; tok = EQ; } + else { (void) strcpy (err_msg, badop); return (ERR); } + break; + case '!': + if (*cexpr == '=') { cexpr++; tok = NE; } + else { (void) strcpy (err_msg, badop); return (ERR); } + break; + case '<': + if (*cexpr == '=') { cexpr++; tok = LE; } + else tok = LT; + break; + case '>': + if (*cexpr == '=') { cexpr++; tok = GE; } + else tok = GT; + break; + } + + if (tok != ERR) + return (tok); + + /* not op so check for a constant, variable or function */ + if (isdigit(c) || c == '.') { + /* looks like a constant. + * leading +- already handled + */ + if (nconsts > MAX_OPX) { + (void) sprintf (err_msg, toomc, MAX_OPX); + return (ERR); + } + consts[nconsts] = atod (lcexpr); + tok = CONST | (nconsts++ << OP_SHIFT); + skip_double(); + } else if (isalpha(c)) { + /* check list of functions */ + tok = chk_funcs(); + if (tok == ERR) { + (void) sprintf (err_msg, "Bad function"); + return (ERR); + } + } else if (c == '"') { + /* a variable */ + if (nvars > MAX_OPX) { + (void) sprintf (err_msg, toomv, MAX_OPX); + return (ERR); + } + if (parse_fieldname (vars[nvars].v_name, MAXFLDLEN) < 0) { + (void) sprintf (err_msg, "Bad field"); + return (ERR); + } else + tok = VAR | (nvars++ << OP_SHIFT); + } + + if (tok != ERR) + return (tok); + + /* what the heck is it? */ + (void) sprintf (err_msg, "Syntax error"); + return (ERR); +} + +/* return funtion token, else ERR. + * if find one, update cexpr too. + */ +static int +chk_funcs() +{ + static struct { + char *st_name; + int st_tok; + } symtab[] = { + /* be sure to put short names AFTER longer ones. + * otherwise, order does not matter. + */ + {"abs", ABS}, {"floor", FLOOR}, {"acos", ACOS}, + {"asin", ASIN}, {"atan2", ATAN2}, {"atan", ATAN}, + {"cos", COS}, {"degrad", DEGRAD}, {"exp", EXP}, + {"log10", LOG10}, {"log", LOG}, {"pi", PITOK}, + {"pow", POW}, {"raddeg", RADDEG}, {"sin", SIN}, + {"sqrt", SQRT}, {"tan", TAN}, + }; + int i; + + for (i = 0; i < sizeof(symtab)/sizeof(symtab[0]); i++) { + int l = strlen (symtab[i].st_name); + if (strncmp (lcexpr, symtab[i].st_name, l) == 0) { + cexpr += l-1; + return (symtab[i].st_tok); + } + } + return (ERR); +} + +/* move cexpr on past a double. + * allow sci notation. + * no need to worry about a leading '-' or '+' but allow them after an 'e'. + * TODO: this handles all the desired cases, but also admits a bit too much + * such as things like 1eee2...3. geeze; to skip a double right you almost + * have to go ahead and crack it! + */ +static void +skip_double() +{ + int sawe = 0; /* so we can allow '-' or '+' right after an 'e' */ + + for (;;) { + char c = *cexpr; + if (isdigit(c) || c=='.' || (sawe && (c=='-' || c=='+'))) { + sawe = 0; + cexpr++; + } else if (c == 'e') { + sawe = 1; + cexpr++; + } else + break; + } +} + +/* call this whenever you want to dig out the next (sub)expression. + * keep compiling instructions as long as the operators are higher precedence + * than prec (or until see HALT, COMMA or RPAREN) then return that + * "look-ahead" token. + * if error, fill in a message in err_msg[] and return ERR. + */ +static int +compile (prec) +int prec; +{ + int expect_binop = 0; /* set after we have seen any operand. + * used by SUB so it can tell if it really + * should be taken to be a NEG instead. + */ + int tok = next_token (); + int *oldpc; + + for (;;) { + int p; + if (tok == ERR) + return (ERR); + if (pc - program >= MAX_PROG) { + (void) sprintf (err_msg, "Program is too long"); + return (ERR); + } + + /* check for special things like functions, constants and parens */ + switch (tok & OP_MASK) { + case COMMA: return (tok); + case HALT: return (tok); + case ADD: + if (expect_binop) + break; /* procede with binary addition */ + /* just skip a unary positive(?) */ + tok = next_token(); + if (tok == HALT) { + (void) sprintf (err_msg, "Term expected"); + return (ERR); + } + continue; + case SUB: + if (expect_binop) + break; /* procede with binary subtract */ + oldpc = pc; + tok = compile (NEG_PREC); + if (oldpc == pc) { + (void) sprintf (err_msg, "Term expected"); + return (ERR); + } + *pc++ = NEG; + expect_binop = 1; + continue; + /* one-arg functions */ + case ABS: case FLOOR: case SIN: case COS: case TAN: case ASIN: + case ACOS: case ATAN: case DEGRAD: case RADDEG: case LOG: + case LOG10: case EXP: case SQRT: + /* eat up the function's parenthesized argument */ + if (next_token() != LPAREN) { + (void) sprintf (err_msg, "Saw a built-in function: expecting ("); + return (ERR); + } + oldpc = pc; + if (compile (0) != RPAREN || oldpc == pc) { + (void) sprintf (err_msg, "1-arg function arglist error"); + return (ERR); + } + *pc++ = tok; + tok = next_token(); + expect_binop = 1; + continue; + /* two-arg functions */ + case POW: case ATAN2: + /* eat up the function's parenthesized arguments */ + if (next_token() != LPAREN) { + (void) sprintf (err_msg, "Saw a built-in function: expecting ("); + return (ERR); + } + oldpc = pc; + if (compile (0) != COMMA || oldpc == pc) { + (void) sprintf (err_msg, "1st of 2-arg function arglist error"); + return (ERR); + } + oldpc = pc; + if (compile (0) != RPAREN || oldpc == pc) { + (void) sprintf (err_msg, "2nd of 2-arg function arglist error"); + return (ERR); + } + *pc++ = tok; + tok = next_token(); + expect_binop = 1; + continue; + /* constants and variables are just like 0-arg functions w/o ()'s */ + case CONST: + case PITOK: + case VAR: + *pc++ = tok; + tok = next_token(); + expect_binop = 1; + continue; + case LPAREN: + oldpc = pc; + if (compile (0) != RPAREN) { + (void) sprintf (err_msg, "Unmatched left paren"); + return (ERR); + } + if (oldpc == pc) { + (void) sprintf (err_msg, "Null expression"); + return (ERR); + } + tok = next_token(); + expect_binop = 1; + continue; + case RPAREN: + return (RPAREN); + } + + /* everything else is a binary operator */ + p = precedence[tok]; + if (p > prec) { + int newtok; + oldpc = pc; + newtok = compile (p); + if (newtok == ERR) + return (ERR); + if (oldpc == pc) { + (void) strcpy (err_msg, "Term or factor expected"); + return (ERR); + } + *pc++ = tok; + expect_binop = 1; + tok = newtok; + } else + return (tok); + } +} + +/* "run" the program[] compiled with compile(). + * if ok, return 0 and the final result, + * else return -1 with a reason why not message in err_msg. + */ +static int +execute(result) +double *result; +{ + int instr; + + do { + instr = *pc++; + switch (instr & OP_MASK) { + /* put these in numberic order so hopefully even the dumbest + * compiler will choose to use a jump table, not a cascade of ifs. + */ + case HALT: break; /* outer loop will stop us */ + case ADD: sp[1] = sp[1] + sp[0]; sp++; break; + case SUB: sp[1] = sp[1] - sp[0]; sp++; break; + case MULT: sp[1] = sp[1] * sp[0]; sp++; break; + case DIV: sp[1] = sp[1] / sp[0]; sp++; break; + case AND: sp[1] = sp[1] && sp[0] ? 1 : 0; sp++; break; + case OR: sp[1] = sp[1] || sp[0] ? 1 : 0; sp++; break; + case GT: sp[1] = sp[1] > sp[0] ? 1 : 0; sp++; break; + case GE: sp[1] = sp[1] >= sp[0] ? 1 : 0; sp++; break; + case EQ: sp[1] = sp[1] == sp[0] ? 1 : 0; sp++; break; + case NE: sp[1] = sp[1] != sp[0] ? 1 : 0; sp++; break; + case LT: sp[1] = sp[1] < sp[0] ? 1 : 0; sp++; break; + case LE: sp[1] = sp[1] <= sp[0] ? 1 : 0; sp++; break; + case NEG: *sp = -*sp; break; + case CONST: *--sp = consts[instr >> OP_SHIFT]; break; + case VAR: *--sp = vars[instr>>OP_SHIFT].v_v; break; + case PITOK: *--sp = 4.0*atan(1.0); break; + case ABS: *sp = fabs (*sp); break; + case FLOOR: *sp = floor (*sp); break; + case SIN: *sp = sin (*sp); break; + case COS: *sp = cos (*sp); break; + case TAN: *sp = tan (*sp); break; + case ASIN: *sp = asin (*sp); break; + case ACOS: *sp = acos (*sp); break; + case ATAN: *sp = atan (*sp); break; + case DEGRAD:*sp *= atan(1.0)/45.0; break; + case RADDEG:*sp *= 45.0/atan(1.0); break; + case LOG: *sp = log (*sp); break; + case LOG10: *sp = log10 (*sp); break; + case EXP: *sp = exp (*sp); break; + case SQRT: *sp = sqrt (*sp); break; + case POW: sp[1] = pow (sp[1], sp[0]); sp++; break; + case ATAN2: sp[1] = atan2 (sp[1], sp[0]); sp++; break; + default: + (void) sprintf (err_msg, "Bug! bad opcode: 0x%x", instr); + return (-1); + } + if (sp < stack) { + (void) sprintf (err_msg, "Runtime stack overflow"); + return (-1); + } else if (sp - stack > MAX_STACK) { + (void) sprintf (err_msg, "Bug! runtime stack underflow"); + return (-1); + } + } while (instr != HALT); + + /* result should now be on top of stack */ + if (sp != &stack[MAX_STACK - 1]) { + (void) sprintf (err_msg, "Bug! stack has %d items", + (int)(MAX_STACK - (sp-stack))); + return (-1); + } + *result = *sp; + return (0); +} + +/* starting with lcexpr pointing at a string expected to be a field name, + * ie, at a '"', fill into up to the next '"' into name[], including trailing 0. + * if there IS no '"' within len-1 chars, return -1, else 0. + * when return, leave lcexpr alone but move cexpr to just after the second '"'. + */ +static int +parse_fieldname (name, len) +char name[]; +int len; +{ + char c = '\0'; + + cexpr = lcexpr + 1; + while (--len > 0 && (c = *cexpr++) != '"' && c) + *name++ = c; + if (len == 0 || c != '"') + return (-1); + *name = '\0'; + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: compiler.c,v $ $Date: 2012/08/17 01:58:40 $ $Revision: 1.6 $ $Name: $"}; diff --git a/GUI/xephem/coordsmenu.c b/GUI/xephem/coordsmenu.c new file mode 100644 index 0000000..59d860b --- /dev/null +++ b/GUI/xephem/coordsmenu.c @@ -0,0 +1,735 @@ +/* implement the manual sky coords conversion tool */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static void cc_create (void); +static void cc_point_cb (Widget w, XtPointer client, XtPointer call); +static void cc_getsky_cb (Widget w, XtPointer client, XtPointer call); +static void cc_eyep_cb (Widget w, XtPointer client, XtPointer call); +static void cc_canonFormat_cb (Widget w, XtPointer client, XtPointer call); +static void cc_vchg_cb (Widget w, XtPointer client, XtPointer call); +static void cc_help_cb (Widget w, XtPointer client, XtPointer call); +static void cc_close_cb (Widget w, XtPointer client, XtPointer call); +static void cc_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void cc_newval (Widget w); +static void canonAll (void); +static void canonFmt (char buf[], double v, int h); +static void reFormat (Widget w, int h); + +static Widget ccshell_w; /* main shell */ +static Widget ccalt_w; /* TF */ +static Widget ccaz_w; /* TF */ +static Widget ccra_w; /* TF */ +static Widget ccdec_w; /* TF */ +static Widget ccglat_w; /* TF */ +static Widget ccglng_w; /* TF */ +static Widget cceclat_w; /* TF */ +static Widget cceclng_w; /* TF */ +static Widget ccdt_w; /* time stamp label */ +static Widget ccral_w; /* RA epoch label */ +static Widget cclra_w; /* TF, epoch local to this window */ +static Widget ccldec_w; /* TF, RA local to this window */ +static Widget ccle_w; /* TF, Dec local to this window */ +static Widget lastchg_w; /* which ever TF was last edited */ + +static int block_vchg; /* set to block valueChanged callback */ + +static char cccategory[] = "Coordinate converter"; /* Save category */ + +/* bring up the Manual dialog */ +void +cc_manage () +{ + if (!ccshell_w) { + cc_create(); + cc_newval (ccra_w); + cc_canonFormat_cb (NULL, NULL, NULL); + } + + XtPopup (ccshell_w, XtGrabNone); + set_something (ccshell_w, XmNiconic, (XtArgVal)False); +} + +/* new main Now: hold ra/dec and update alt/az */ +void +cc_update (np, how_much) +Now *np; +int how_much; +{ + if (!isUp(ccshell_w)) + return; + + cc_newval (lastchg_w); +} + +/* called to put up or remove the watch cursor. */ +void +cc_cursor (c) +Cursor c; +{ + Window win; + + if (ccshell_w && (win = XtWindow(ccshell_w)) != 0) { + Display *dsp = XtDisplay(ccshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the Manual entry dialog */ +static void +cc_create() +{ + typedef struct { + char *label; /* label */ + char *def; /* default value */ + Widget *wp; /* TF widget */ + char *tip; /* widget tip */ + } CCMField; + static CCMField ccfields[] = { + {"RA @ ", " 00:00:00.00", &cclra_w, + "RA, hours @ Equinox at left"}, + {"Declination:", " 00:00:00.00", &ccldec_w, + "Dec, degrees @ Equinox at left"}, + {"RA @ XXXXXX", " 00:00:00.00", &ccra_w, + "RA, hours @ Equinox in Main"}, + {"Declination:", " 00:00:00.00", &ccdec_w, + "Dec, degrees @ Equinox in Main"}, + {"Altitude:", " 00:00:00.00", &ccalt_w, + "Altitude, degrees"}, + {"Azimuth:", " 00:00:00.00", &ccaz_w, + "Azimuth, degrees E of N"}, + {"Galactic lat:", " 00:00:00.00", &ccglat_w, + "Galactic latitude, degrees"}, + {"Galactic lng:", " 00:00:00.00", &ccglng_w, + "Galactic longitude, degrees"}, + {"Ecliptic lat:", " 00:00:00.00", &cceclat_w, + "Ecliptic latitude, degrees"}, + {"Ecliptic lng:", " 00:00:00.00", &cceclng_w, + "Ecliptic longitude, degrees"}, + }; + Widget w; + Widget cc_w, rc_w; + Arg args[20]; + int i; + int n; + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Coordinate converter"); n++; + XtSetArg (args[n], XmNiconName, "Coords"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + ccshell_w = XtCreatePopupShell ("CoordsConv", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (ccshell_w); + set_something (ccshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (ccshell_w, XmNpopdownCallback, cc_popdown_cb, 0); + sr_reg (ccshell_w, "XEphem*CoordsConv.x", cccategory, 0); + sr_reg (ccshell_w, "XEphem*CoordsConv.y", cccategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 20); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNfractionBase, 67); n++; + cc_w = XmCreateForm (ccshell_w, "CCForm", args, n); + XtAddCallback (cc_w, XmNhelpCallback, cc_help_cb, 0); + XtManageChild (cc_w); + + /* main table in a RC */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 8); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, (XtNumber(ccfields)+1)/2); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + rc_w = XmCreateRowColumn (cc_w, "CCMRC", args, n); + XtManageChild (rc_w); + + /* add the field entries */ + for (i = 0; i < XtNumber(ccfields); i++) { + CCMField *ccp = &ccfields[i]; + + if (ccp->wp == &cclra_w) { + /* special case for local epoch */ + Widget hrc_w; + + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + hrc_w = XmCreateRowColumn (rc_w, "CHRC", args, n); + XtManageChild (hrc_w); + + n = 0; + w = XmCreateLabel (hrc_w, "EL", args, n); + set_xmstring (w, XmNlabelString, ccp->label); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNcolumns, 6); n++; + ccle_w = XmCreateTextField (hrc_w, "Equinox", args, n); + wtip (ccle_w,"Precession year or EOD for apparent"); + XtAddCallback (ccle_w, XmNactivateCallback, cc_vchg_cb, 0); + sr_reg (ccle_w, NULL, cccategory, 1); + XtManageChild (ccle_w); + + n = 0; + w = XmCreateLabel (hrc_w, "CCC", args, n); + set_xmstring (w, XmNlabelString, ":"); + XtManageChild (w); + + } else { + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreateLabel (rc_w, "CCM", args, n); + set_xmstring (w, XmNlabelString, ccp->label); + XtManageChild (w); + } + + /* grab RA label so we can show epoch */ + if (ccp->wp == &ccra_w) + ccral_w = w; + + n = 0; + XtSetArg (args[n], XmNcolumns, 13); n++; + XtSetArg (args[n], XmNvalue, ccp->def); n++; + w = XmCreateTextField (rc_w, "CCTF", args, n); + XtAddCallback (w, XmNvalueChangedCallback, cc_vchg_cb, 0); + XtAddCallback (w, XmNfocusCallback, cc_vchg_cb, 0); + XtAddCallback (w, XmNactivateCallback, cc_canonFormat_cb, 0); + wtip (w, ccp->tip); + XtManageChild (w); + *(ccp->wp) = w; + } + + /* time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + ccdt_w = XmCreateLabel (cc_w, "DT", args, n); + wtip (ccdt_w, "Date and Time for which Alt/Az are computed"); + XtManageChild (ccdt_w); + + /* controls across bottom */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ccdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 11); n++; + w = XmCreatePushButton (cc_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, cc_close_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ccdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 12); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 22); n++; + w = XmCreatePushButton (cc_w, "Sky Point", args, n); + wtip (w, "Center the Sky View at these coordinates"); + XtManageChild (w); + XtAddCallback (w, XmNactivateCallback, cc_point_cb, 0); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ccdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 23); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 33); n++; + w = XmCreatePushButton (cc_w, "Eyepiece", args, n); + wtip (w, "Place an eyepiece at these coordinates on the Sky View"); + XtManageChild (w); + XtAddCallback (w, XmNactivateCallback, cc_eyep_cb, 0); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ccdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 34); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 44); n++; + w = XmCreatePushButton (cc_w, "Get Sky", args, n); + wtip (w, "Load coordinates of Sky View center"); + XtAddCallback (w, XmNactivateCallback, cc_getsky_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ccdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 45); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 55); n++; + w = XmCreatePushButton (cc_w, "Canonize", args, n); + wtip (w, "Reformat all fields in a consistent manner"); + XtAddCallback (w, XmNactivateCallback, cc_canonFormat_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ccdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 56); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 66); n++; + w = XmCreatePushButton (cc_w, "Help", args, n); + wtip (w, "More information about this window"); + XtAddCallback (w, XmNactivateCallback, cc_help_cb, 0); + XtManageChild (w); +} + +/* callback to Point sky at current coords */ +static void +cc_point_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Now *np = mm_get_now(); + double e = epoch == EOD ? mjd : epoch; + double ra, dec; + char *p; + Obj o; + + p = XmTextFieldGetString(ccra_w); + f_scansexa (p, &ra); + XtFree(p); + ra = hrrad(ra); + + p = XmTextFieldGetString(ccdec_w); + f_scansexa (p, &dec); + XtFree(p); + dec = degrad(dec); + + if (epoch == EOD) + ap_as (np, mjd, &ra, &dec); + + memset (&o, 0, sizeof(o)); + strcpy (o.o_name, "Anonymous"); + o.o_type = FIXED; + o.f_RA = (float)ra; + o.f_dec = (float)dec; + o.f_epoch = (float)e; + + obj_cir (np, &o); + sv_point (&o); +} + +/* how each field is formatted, depends on Hours or Degrees */ +static void +canonFmt (buf, v, h) +char buf[]; +double v; +int h; +{ + if (h) + fs_sexa (buf, v, 4, 360000); + else { + fs_sexa (buf, v, 4, 36000); + strcat (buf, " "); + } +} + +/* callback to load from current Sky View center */ +static void +cc_getsky_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + double fov, alt, az, ra, dec; + char buf[32]; + int aa; + + sv_getcenter (&aa, &fov, &alt, &az, &ra, &dec); + + if (aa) { + /* user is driving via alt/az */ + canonFmt (buf, raddeg(alt), 0); + XmTextFieldSetString (ccalt_w, buf); + canonFmt (buf, raddeg(az), 0); + XmTextFieldSetString (ccaz_w, buf); + cc_newval (ccaz_w); + } else { + /* user is driving via RA/Dec */ + canonFmt (buf, radhr(ra), 1); + XmTextFieldSetString (ccra_w, buf); + canonFmt (buf, raddeg(dec), 0); + XmTextFieldSetString (ccdec_w, buf); + cc_newval (ccdec_w); + } +} + +/* redisplay TF's sexagesimal value prettied up */ +static void +reFormat (w, h) +Widget w; +int h; +{ + char buf[32], *p; + double x; + + p = XmTextFieldGetString (w); + f_scansexa (p, &x); + XtFree(p); + canonFmt (buf, x, h); + XmTextFieldSetString (w, buf); +} + +/* tidy up each coordinate display */ +static void +canonAll() +{ + block_vchg++; + reFormat (ccalt_w, 0); + reFormat (ccaz_w, 0); + reFormat (cclra_w, 1); + reFormat (ccldec_w, 0); + reFormat (ccra_w, 1); + reFormat (ccdec_w, 0); + reFormat (ccglat_w, 0); + reFormat (ccglng_w, 0); + reFormat (cceclat_w, 0); + reFormat (cceclng_w, 0); + block_vchg--; +} + +/* called to place an eyepiece at these coords on the sky view */ +static void +cc_eyep_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Now *np = mm_get_now(); + double fov, ra, dec, alt, az; + int aamode; + char *p; + + /* only if skyview up */ + if (!svshell_w) { + xe_msg (1, "Can not place eyepiece until Sky View window is up"); + return; + } + + /* get sky mode */ + sv_getcenter (&aamode, &fov, &alt, &az, &ra, &dec); + + /* define new eyepiece */ + if (aamode) { + + p = XmTextFieldGetString(ccalt_w); + f_scansexa (p, &alt); + XtFree(p); + alt = degrad(alt); + + p = XmTextFieldGetString(ccaz_w); + f_scansexa (p, &az); + XtFree(p); + az = degrad(az); + + se_add (aamode, az, alt); + + } else { + + p = XmTextFieldGetString(ccra_w); + f_scansexa (p, &ra); + XtFree(p); + ra = hrrad(ra); + + p = XmTextFieldGetString(ccdec_w); + f_scansexa (p, &dec); + XtFree(p); + dec = degrad(dec); + + if (epoch == EOD) + ap_as (np, mjd, &ra, &dec); + + se_add (aamode, ra, dec); + + } + + /* display on skyview */ + sv_all (np); +} + +/* called from either the Reformat PB or Enter from any TF */ +static void +cc_canonFormat_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + canonAll(); +} + +static void +cc_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do all the work */ + XtPopdown (ccshell_w); +} + +static void +cc_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +} + +/* called when any character changes or focus is received + * N.B. do not use call, used by different callbacks. + */ +static void +cc_vchg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + cc_newval (w); +} + +/* callback from the overall Help button. + */ +/* ARGSUSED */ +static void +cc_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { "Type in any field and the others are updated",}; + + hlp_dialog ("Coord_conv", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* called to compute new values when the given TF widget changes. + * remember in lastchg_w which widget was used to freeze it for next update. + */ +static void +cc_newval (w) +Widget w; +{ + Now *np = mm_get_now(); + double e = (epoch == EOD) ? mjd : epoch; + char buf[32], *p; + double ra, dec, lst; + + /* avoid recursion */ + if (block_vchg) + return; + block_vchg++; + + /* save */ + lastchg_w = w; + + /* current time and eq epoch */ + timestamp (np, ccdt_w); + if (epoch == EOD) + (void) strcpy (buf, "RA @ EOD:"); + else { + double tmp; + mjd_year (epoch, &tmp); + sprintf (buf, "RA @ %.1f:", tmp); + } + set_xmstring (ccral_w, XmNlabelString, buf); + + /* handy stuff */ + now_lst (np, &lst); + lst = hrrad(lst); + + /* find astrometric ra/dec @ e from whatever changed */ + if (w == ccalt_w || w == ccaz_w) { + double alt, az, ha; + + p = XmTextFieldGetString(ccalt_w); + f_scansexa (p, &alt); + XtFree(p); + alt = degrad(alt); + p = XmTextFieldGetString(ccaz_w); + f_scansexa (p, &az); + XtFree(p); + az = degrad(az); + + unrefract (pressure, temp, alt, &alt); + aa_hadec (lat, alt, az, &ha, &dec); + ra = lst - ha; + range (&ra, 2*PI); + ap_as (np, e, &ra, &dec); + + } else if (w == ccglat_w || w == ccglng_w) { + double glat, glng; + + p = XmTextFieldGetString(ccglat_w); + f_scansexa (p, &glat); + XtFree(p); + glat = degrad(glat); + p = XmTextFieldGetString(ccglng_w); + f_scansexa (p, &glng); + XtFree(p); + glng = degrad(glng); + + gal_eq (e, glat, glng, &ra, &dec); + + } else if (w == cceclat_w || w == cceclng_w) { + double eclat, eclng; + + p = XmTextFieldGetString(cceclat_w); + f_scansexa (p, &eclat); + XtFree(p); + eclat = degrad(eclat); + p = XmTextFieldGetString(cceclng_w); + f_scansexa (p, &eclng); + XtFree(p); + eclng = degrad(eclng); + + ecl_eq (e, eclat, eclng, &ra, &dec); + if (epoch == EOD) + ap_as (np, e, &ra, &dec); + + } else if (w == ccra_w || w == ccdec_w) { + p = XmTextFieldGetString(ccra_w); + f_scansexa (p, &ra); + XtFree(p); + ra = hrrad(ra); + p = XmTextFieldGetString(ccdec_w); + f_scansexa (p, &dec); + XtFree(p); + dec = degrad(dec); + if (epoch == EOD) + ap_as (np, e, &ra, &dec); + + } else if (w == cclra_w || w == ccldec_w || w == ccle_w) { + p = XmTextFieldGetString(cclra_w); + f_scansexa (p, &ra); + XtFree(p); + ra = hrrad(ra); + p = XmTextFieldGetString(ccldec_w); + f_scansexa (p, &dec); + XtFree(p); + dec = degrad(dec); + p = XmTextFieldGetString(ccle_w); + if (strchr(p,'o') || strchr(p,'O')) { + ap_as (np, e, &ra, &dec); + } else { + double le; + year_mjd (atof(p), &le); + precess (le, e, &ra, &dec); + } + XtFree(p); + + } else { + printf ("Bogus coords conv widget\n"); + abort(); + } + + /* find all others from ra/dec that were not set */ + if (w != ccalt_w && w != ccaz_w) { + double apra = ra, apdec = dec; /* require apparent */ + double alt, az, ha; + + as_ap (np, e, &apra, &apdec); + ha = lst - apra; + hadec_aa (lat, ha, apdec, &alt, &az); + refract (pressure, temp, alt, &alt); + canonFmt (buf, raddeg(alt), 0); + XmTextFieldSetString (ccalt_w, buf); + canonFmt (buf, raddeg(az), 0); + XmTextFieldSetString (ccaz_w, buf); + } + if (w != ccglat_w && w != ccglng_w) { + double glat, glng; + + eq_gal (e, ra, dec, &glat, &glng); + canonFmt (buf, raddeg(glat), 0); + XmTextFieldSetString (ccglat_w, buf); + canonFmt (buf, raddeg(glng), 0); + XmTextFieldSetString (ccglng_w, buf); + } + if (w != cceclat_w && w != cceclng_w) { + double eclat, eclng; + double era = ra, edec = dec; /* want current epoch setting */ + + if (epoch == EOD) + as_ap (np, e, &era, &edec); + eq_ecl (e, era, edec, &eclat, &eclng); + canonFmt (buf, raddeg(eclat), 0); + XmTextFieldSetString (cceclat_w, buf); + canonFmt (buf, raddeg(eclng), 0); + XmTextFieldSetString (cceclng_w, buf); + } + if (w != ccra_w && w != ccdec_w) { + double era = ra, edec = dec; /* want current epoch setting */ + + if (epoch == EOD) + as_ap (np, e, &era, &edec); + canonFmt (buf, radhr(era), 1); + XmTextFieldSetString (ccra_w, buf); + canonFmt (buf, raddeg(edec), 0); + XmTextFieldSetString (ccdec_w, buf); + } + if (w != cclra_w && w != ccldec_w && w != ccle_w) { + double lra = ra, ldec = dec; + + p = XmTextFieldGetString(ccle_w); + if (strchr(p,'o') || strchr(p,'O')) { + as_ap (np, e, &lra, &ldec); + } else { + double le; + year_mjd (atof(p), &le); + precess (e, le, &lra, &ldec); + } + XtFree(p); + canonFmt (buf, radhr(lra), 1); + XmTextFieldSetString (cclra_w, buf); + canonFmt (buf, raddeg(ldec), 0); + XmTextFieldSetString (ccldec_w, buf); + } + + block_vchg--; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: coordsmenu.c,v $ $Date: 2011/05/16 02:32:23 $ $Revision: 1.20 $ $Name: $"}; diff --git a/GUI/xephem/datamenu.c b/GUI/xephem/datamenu.c new file mode 100644 index 0000000..2943c8c --- /dev/null +++ b/GUI/xephem/datamenu.c @@ -0,0 +1,1910 @@ +/* code to manage the stuff on the "data" menu. + * functions for the main data table are prefixed with dm. + * functions for the setup menu are prefixed with ds. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static double dm_uhzndep (void); +static int ds_apply_selections (void); +static void dm_set_buttons (int whether); +static void dm_activate_cb (Widget w, XtPointer client, XtPointer call); +static void dm_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void dm_close_cb (Widget w, XtPointer client, XtPointer call); +static void dm_help_cb (Widget w, XtPointer client, XtPointer call); +static void dm_compute (int r, int force, Now *np); +static void dm_format (Now *np, Obj *op, RiseSet *rp, int c, Widget w); +static void dm_settags (void); +static void dm_showtim (Now *np, Widget w, double t); +static void dm_rs_hrsup (Now *np, Obj *op, Widget w, RiseSet *rp); +static void dm_build_cols (void); +static void dm_selname (Widget pb_w, int r, int c); +static void dm_resetuhzndep (void); +static void show_constellation (Now *np, Obj *op, Widget w); +static void ds_create_selection (Widget parent); +static void ds_buildfsl (void); +static void ds_setup_col_selections (void); +static void ds_ctl_cb (Widget w, XtPointer client, XtPointer call); +static void ds_help (void); + +static void dm_create_flist_w (void); +static void dm_flistok_cb (Widget w, XtPointer client, XtPointer call); +static void dm_flist_cb (Widget w, XtPointer client, XtPointer call); +static void dm_xsel_cb (Widget w, XtPointer client, XtPointer call); +static void flistok_append_cb (void); +static void flistok_overwrite_cb (void); +static void make_flist (char *name, char *how); +static void dm_list_tofile (FILE *fp); +static void dm_list_get (char buf[]); + +/* main sections in the Setup window */ +typedef enum { + MISC_COL, RISET_COL, SEP_COL +} ColType; + +typedef struct { + ColType type; /* general class of this column */ + char *name; /* name of column */ + char *tip; /* widget tip text, or NULL */ + int on; /* whether this column is currently to be on */ + Widget rcw; /* RowColumn widget for this column */ + Widget lw; /* label for this column's header (first in rcw) */ + Widget sw; /* pushbutton widget for this col in selection menu */ +} ColHdr; + +/* column details. + * N.B. these must match the DMCol order + * this does not include the first column holding the object names. + */ +static ColHdr col[] = { + {MISC_COL, "Cns", "Constellation"}, + {MISC_COL, "RA", "Right Ascension (to Main's settings)"}, + {MISC_COL, "HA", "Hour Angle"}, + {MISC_COL, "GHA", "Greenwich Hour Angle"}, + {MISC_COL, "Dec", "Declination (to Main's settings)"}, + {MISC_COL, "Az", "Azimuth, E of N"}, + {MISC_COL, "Alt", "Angle above horizon"}, + {MISC_COL, "Zenith", "Angle down from zenith"}, + {MISC_COL, "PA", "Parallactic angle, +W"}, + {MISC_COL, "JD", "Julian date"}, + {MISC_COL, "HJD", "Heliocentric Julian date"}, + {MISC_COL, "Air", "Air mass"}, + + {MISC_COL, "VMag", "Apparent magnitude"}, + {MISC_COL, "PMRA", "Proper motion in RA: Solsys as/hr, ESat deg/min, else mas/yr on sky"}, + {MISC_COL, "PMDec", "Proper motion in Dec: Solsys as/hr, ESat deg/min, else mas/yr"}, + {MISC_COL, "Size", "Angular diameter, arc seconds"}, + {MISC_COL, "Phase", "Percent illumination seen from Earth"}, + {MISC_COL, "Elong", "Elongation: angular degrees from Sun, +E"}, + {MISC_COL, "Spect", "Spectral classification"}, + {MISC_COL, "HeLat", "Heliocentric latitude"}, + {MISC_COL, "HeLong", "Heliocentric longitude"}, + {MISC_COL, "GLat", "Galactic latitude"}, + + {MISC_COL, "GLong", "Galactic longitude"}, + {MISC_COL, "EcLat", "Ecliptic latitude"}, + {MISC_COL, "EcLong", "Ecliptic longitude"}, + {MISC_COL, "EaDst", "Distance from Earth, AU (moon is km)"}, + {MISC_COL, "EaLght", "Light travel time from Earth"}, + {MISC_COL, "SnDst", "Distance from Sun, AU"}, + {MISC_COL, "SnLght", "Light travel time from Sun"}, + {MISC_COL, "Uranom", "Volume and page number in Uranometria"}, + {MISC_COL, "Uran2k", "Volume and page number in Uranometria 2000"}, + {MISC_COL, "MillSA", "Volume and page number in Millenium Star Atlas"}, + + {RISET_COL, "RisTm", "Rise time, today"}, + {RISET_COL, "RisAz", "Rise azimuth, today"}, + {RISET_COL, "TrnTm", "Transit time, today"}, + {RISET_COL, "TrnAlt", "Transit altitude, today"}, + {RISET_COL, "TrnAz", "Transit azimuth, today"}, + {RISET_COL, "SetTm", "Set time, today"}, + {RISET_COL, "SetAz", "Set azimuth, today"}, + {RISET_COL, "HrsUp", "Number of hours object is up, today"}, + + /* N.B. assumed to be last */ + {SEP_COL, "Sep", "Angular separation from selected favorite"}, +}; + +#define NC XtNumber(col) + +/* tags for the various Data Selection control panel buttons */ +typedef enum { + OK, APPLY, CLALL, RESET, CANCEL, HELP +} DSCtrls; + +typedef Widget RowW[NC]; /* one row's worth of widget ids */ +static Widget datashell_w; /* the overall table shell */ +static Widget hdrcol_w; /* RowColumn for object name column */ +static Widget *hdr_w; /* malloced list of object name labels */ +static RowW *tblpb; /* malloced list of nfavs RowW */ +static Widget centric_w; /* the centric label on the data table */ +static Widget limbl_w; /* the Limb label on the data table */ +static Widget dt_w; /* date/time stamp label widget */ +static int nrows; /* n rows in table, not counting header */ + +typedef enum {LIMB, CENTER} RSPosOpt; + +static Widget selshell_w; /* overall setup table shell */ +static Widget hzn_w; /* TF holding the user's horizon setting */ +static Widget limb_w; /* the Center/Limb toggle button */ +static RSPosOpt limb; /* one of CENTER or LIMB */ +static Widget flist_w; /* file list dialog widget */ +static Widget fsl_w; /* favorites scrolled list */ + +static int dm_selecting; /* set while our fields are being selected */ +static double hznd; /* horizon displacement, rads */ + +static Obj **favs; /* current list of loaded favorite objects */ +static int nfavs; /* n favs[] */ +static Obj *sepop; /* separation object */ +static Widget sepl_w; /* hidden label to save sep partner */ + +/* Save categories */ +static char dscategory[] = "Data Table"; + +/* called when the data menu is activated via the main menu pulldown. + * if never called before, create all the widgets. + */ +void +dm_manage () +{ + if (!datashell_w) + dm_create_shell(); + + dm_update (mm_get_now(), 1); + dm_set_buttons (dm_selecting); + + XtPopup (datashell_w, XtGrabNone); + set_something (datashell_w, XmNiconic, (XtArgVal)False); + + /* register we are now up */ + setXRes (dm_viewupres(), "1"); +} + +/* called to recompute and fill in values for the data menu. + * don't bother if it doesn't exist or is unmanaged now or no one is logging. + */ +void +dm_update (np, how_much) +Now *np; +int how_much; +{ + int i; + + if (!datashell_w) + return; + if (!isUp(datashell_w) && !any_ison() && !how_much) + return; + + watch_cursor (1); + + /* update each row */ + for (i = 0; i < nfavs; i++) + dm_compute (i, how_much, np); + + /* update the indicators */ + dm_settags(); + + /* update the datestamp */ + timestamp (np, dt_w); + + watch_cursor (0); +} + +/* called whenever the favorites list changes */ +void +dm_newfavs() +{ + if (!datashell_w) + return; + nfavs = fav_get_loaded (&favs); + ds_buildfsl(); + dm_build_cols(); + dm_update(mm_get_now(), 1); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +dm_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + dm_selecting++; + else if (dm_selecting > 0) + --dm_selecting; + + if (datashell_w) + if ((whether && dm_selecting == 1) /* first one to want on */ + || (!whether && dm_selecting == 0) /* last one to want off */) + dm_set_buttons (whether); +} + +/* return the name of the resource containing whether this view is up */ +char * +dm_viewupres() +{ + return ("DataViewUp"); +} + +/* return the user's horizon displacement, in rads. + * + means less sky. + */ +static double +dm_uhzndep() +{ + char *str = XmTextFieldGetString (hzn_w); + double dis = degrad(atod(str)); + XtFree (str); + return (dis); +} + +/* set text field to hznd */ +static void +dm_resetuhzndep() +{ + char buf[32]; + sprintf (buf, "%g", raddeg(hznd)); + XmTextFieldSetString (hzn_w, buf); +} + +/* given the Now and Obj, fill in the RiseSet. + * this takes into account the options currently in effect with the Data menu. + */ +void +dm_riset (np, op, rsp) +Now *np; +Obj *op; +RiseSet *rsp; +{ + double dis; /* rads apparent horizon is above true */ + + /* might get called before we have been managed the first time */ + if (!datashell_w) + dm_create_shell(); + + /* user's displacement correction */ + dis = -hznd; + + /* add semi-diameter if want wrt limb */ + if (limb == LIMB) + dis += degrad(op->s_size/3600./2.0); + + riset_cir (np, op, dis, rsp); +} + +/* called to put up or remove the watch cursor. */ +void +dm_cursor (c) +Cursor c; +{ + Window win; + + if (datashell_w && (win = XtWindow(datashell_w)) != 0) { + Display *dsp = XtDisplay(datashell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (selshell_w && (win = XtWindow(selshell_w)) != 0) { + Display *dsp = XtDisplay(selshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* given a DMCol, fill str[] with its column heading. + * return 0 if column is on, else -1 + */ +int +dm_colHeader (c, str) +DMCol c; +char str[]; +{ + if (!col[c].on) + return (-1); + strcpy (str, col[c].name); + return (0); +} + +/* given circumstances and DMCol, fill str[] with its string value. + * return 0 if column is on, else -1 (but always fill in str). + */ +int +dm_colFormat (np, op, rp, c, str) +Now *np; +Obj *op; +RiseSet *rp; +DMCol c; +char str[]; +{ + static Widget w; + char *lstr; + + /* we get the value round-about via a widget because dm_format() can + * not be written to return a string (because it must use the funcs + * that call field_log()) + */ + if (!w) + w = XmCreateLabel (toplevel_w, "DMFT", NULL, 0); + dm_format (np, op, rp, c, w); + get_xmstring (w, XmNlabelString, &lstr); + (void) strcpy (str, lstr); + XtFree (lstr); + + return (col[c].on ? 0 : -1); +} + +/* N.B. might be called early if preloading certain .edb files + * each column is a vertical RC, stacked into one horizontal RC. + * the first children of each column is a label and is always there. + * the remaining children area recreated each time Favorites changes. + */ +void +dm_create_shell() +{ + Widget ctlrc_w, w; + Widget mb_w, cb_w, pd_w; + Widget table_w; + Widget dform_w; + Arg args[20]; + int i, n; + + /* benign if called > 1 */ + if (datashell_w) + return; + + /* create the shell and main form */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Data Table"); n++; + XtSetArg (args[n], XmNiconName, "Data"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + datashell_w = XtCreatePopupShell ("DataTable", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (datashell_w); + set_something (datashell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (datashell_w, XmNpopdownCallback, dm_popdown_cb, 0); + sr_reg (datashell_w, "XEphem*DataTable.x", dscategory, 0); + sr_reg (datashell_w, "XEphem*DataTable.y", dscategory, 0); + sr_reg (NULL, dm_viewupres(), dscategory, 0); + + n = 0; + dform_w = XmCreateForm (datashell_w, "DTForm", args, n); + XtAddCallback (dform_w, XmNhelpCallback, dm_help_cb, 0); + XtManageChild (dform_w); + + /* make the menubar */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (dform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "Control", args, n); + XtManageChild (cb_w); + + n = 0; + w = XmCreatePushButton (pd_w, "Setup", args, n); + XtAddCallback (w, XmNactivateCallback, dm_setup_cb, 0); + set_xmstring (w, XmNlabelString, "Setup..."); + wtip (w, "Select desired columns for the table"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "List", args, n); + XtAddCallback (w, XmNactivateCallback, dm_flist_cb, 0); + set_xmstring (w, XmNlabelString, "List..."); + wtip (w, "Save current table to a file"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Select", args, n); + XtAddCallback (w, XmNactivateCallback, dm_xsel_cb, 0); + set_xmstring (w, XmNlabelString, "X Select"); + wtip (w, "Save current table to the X PRIMARY Selection buffer"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Fav", args, n); + XtAddCallback (w, XmNactivateCallback,(XtCallbackProc)fav_manage,0); + set_xmstring (w, XmNlabelString, "Favorites..."); + wtip (w, "Choose rows in table"); + XtManageChild (w); + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, dm_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the Help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "Help", args, n); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + n = 0; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, dm_help_cb, 0); + XtManageChild (w); + + /* make a rowcolumn for the bottom control panel */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + ctlrc_w = XmCreateRowColumn (dform_w, "DataTblRC", args, n); + XtManageChild (ctlrc_w); + + /* make the limb and centric indicators in frames. + * turn them on and off by managing the frames -- but not yet! + */ + + n = 0; + w = XmCreateFrame (ctlrc_w, "DLimblF", args, n); + n = 0; + limbl_w = XmCreateLabel (w, "DLimblL", args, n); + wtip (limbl_w, "Indicates whether Rise/Set data are for Limb or Center"); + XtManageChild (limbl_w); + + n = 0; + w = XmCreateFrame (ctlrc_w, "DCentricF", args, n); + n = 0; + centric_w = XmCreateLabel (w, "DCentricL", args, n); + wtip (centric_w, "Indicates Geocentric or Topocentric vantage, and equinox"); + XtManageChild (centric_w); + + /* center a label for the date/time stamp in remaining space */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, ctlrc_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + dt_w = XmCreateLabel (dform_w, "DateStamp", args, n); + wtip (dt_w, "Date and Time for which data are computed"); + timestamp (mm_get_now(), dt_w); /* sets initial size correctly*/ + XtManageChild (dt_w); + + /* create the table - a bunch of V RCs in one H RC */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ctlrc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + table_w = XmCreateRowColumn (dform_w, "DataTable", args, n); + XtManageChild (table_w); + + /* name column */ + + n = 0; + hdrcol_w = XmCreateRowColumn (table_w, "HC", args, n); + XtManageChild (hdrcol_w); + + /* first child is just label for the upper left gap */ + + n = 0; + w = XmCreateLabel (hdrcol_w, "Gap", args, n); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + + /* table columns */ + + for (i = 0; i < NC; i++) { + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + col[i].rcw = XmCreateRowColumn (table_w, "DC", args, n); + XtManageChild (col[i].rcw); + + /* first child is label for column name */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreateLabel (col[i].rcw, "CH", args, n); + set_xmstring (w, XmNlabelString, col[i].name); + XtManageChild (w); + } + + /* other entries added whenever favs change */ + + /* define default separation target, if nothing else for dm_colFormat */ + sepop = db_basic (SUN); + + /* create the selection dialog. + * don't manage it yet but its state info is used right off. + */ + ds_create_selection(datashell_w); + + /* install initial favorites */ + dm_newfavs(); + ds_apply_selections(); +} + +/* callback to bring up the Data setup dialog */ +/* ARGSUSED */ +void +dm_setup_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!selshell_w) + dm_create_shell(); + + if (!XtIsManaged(selshell_w)) { + watch_cursor(1); + ds_setup_col_selections(); + XtManageChild (selshell_w); + watch_cursor(0); + } +} + +/* return the separatoin between the given and the current table sep objects */ +double +dm_sep (Obj *op) +{ + double sep; + dm_separation (op, sepop, &sep); + return (sep); +} + +/* go through all the table buttons and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +dm_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + int r, c; + + for (c = 0; c < NC; c++) + for (r = 0; r < nfavs; r++) + buttonAsButton (tblpb[r][c], whether); +} + +/* make sure there are nfavs buttons in each col and tblpb[] points to them. + * n rows in tblpb match n widgets in each col (+1 for column header) + * more added as needed, unmanaged when not. + * all cols will have the same number of rows. + */ +static void +dm_build_cols() +{ + int r, c; + + /* insure we have at least nfavs rows */ + if (nrows < nfavs) { + tblpb = (RowW *) XtRealloc ((char*)tblpb, nfavs*sizeof(RowW)); + hdr_w = (Widget *) XtRealloc ((char*)hdr_w, nfavs*sizeof(Widget)); + for (r = nrows; r < nfavs; r++) { + /* object name column. use PB for size, not to ever look like */ + Widget w = XmCreatePushButton (hdrcol_w, "D", NULL, 0); + buttonAsButton (w, 0); + XtManageChild (w); + hdr_w[r] = w; + + /* each data column */ + for (c = 0; c < NC; c++) { + XtPointer code = (XtPointer)(long int)((c<<8)|r); + w = XmCreatePushButton (col[c].rcw, "D", NULL, 0); + XtAddCallback (w, XmNactivateCallback, dm_activate_cb,code); + buttonAsButton (w, 0); + XtManageChild (w); + tblpb[r][c] = w; + } + } + + nrows = nfavs; + } + + /* turn on exactly the first nfavs rows and set row names */ + for (r = 0; r < nrows; r++) { + if (r < nfavs) { + set_xmstring (hdr_w[r], XmNlabelString, favs[r]->o_name); + XtManageChild (hdr_w[r]); + } else + XtUnmanageChild (hdr_w[r]); + for (c = 0; c < NC; c++) { + if (r < nfavs) { + XtManageChild (tblpb[r][c]); + buttonAsButton (tblpb[r][c], dm_selecting); + dm_selname (tblpb[r][c], r, c); + } else + XtUnmanageChild (tblpb[r][c]); + } + } +} + +/* set the userData name of table button pb_w knowing it is at [r,c] */ +static void +dm_selname (Widget pb_w, int r, int c) +{ + char *name, *rname, *cname; + char *userD; /* Heller, pg 852, say's this is type Pointer?? */ + + /* figure out our row and col name */ + rname = favs[r]->o_name; + cname = col[c].name; + + /* combination is our plotting id */ + name = XtMalloc (strlen(rname) + strlen(cname) + 2); /* '.' '\0' */ + (void) sprintf (name, "%s.%s", rname, cname); + + /* set XmNuserData to be the name we want to go by */ + get_something (pb_w, XmNuserData, (XtArgVal)&userD); + if (userD) + XtFree (userD); + userD = name; + set_something (pb_w, XmNuserData, (XtArgVal)userD); +} + +/* callback from any of the data table buttons being activated. + */ +static void +/* ARGSUSED */ +dm_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (dm_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback when main dialog is popped down */ +static void +/* ARGSUSED */ +dm_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (selshell_w && XtIsManaged (selshell_w)) + XtUnmanageChild (selshell_w); + if (flist_w && XtIsManaged (flist_w)) + XtUnmanageChild (flist_w); + + /* register we are now down */ + setXRes (dm_viewupres(), "0"); +} + +/* callback from the Data table Close button + */ +static void +/* ARGSUSED */ +dm_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do the real work */ + XtPopdown (datashell_w); +} + +/* callback from the Data table Help button + */ +static void +/* ARGSUSED */ +dm_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This table displays various information about the planets and objects.", +"To reduce computation and save screen space, each row and column may be", +"individually turned off or on using the Select button." +}; + + hlp_dialog ("Data_Table", msg, XtNumber(msg)); +} + +/* compute and print body info in data menu format */ +/* ARGSUSED */ +static void +dm_compute (r, force, np) +int r; /* which row */ +int force; /* whether to print for sure or only if things have changed */ +Now *np; +{ + int did_rs = 0; + RiseSet rs; + Obj *op; + int c; + + op = favs[r]; + db_update (op); + + for (c = 0; c < NC; c++) + if (col[c].on) { + if (col[c].type == RISET_COL && !did_rs) { + dm_riset (np, op, &rs); + did_rs = 1; + } + dm_format (np, op, &rs, c, tblpb[r][c]); + } +} + +static void +dm_format (np, op, rp, c, w) +Now *np; +Obj *op; +RiseSet *rp; +int c; +Widget w; +{ + static char me[] = "dm_format()"; + double tmp; + + if (op->o_flags & NOCIRCUM) { + f_string (w, "no circ"); + return; + } + + switch (c) { + case CONSTEL_ID: + show_constellation (np, op, w); + break; + case RA_ID: + f_ra (w, op->s_ra); + break; + case HA_ID: + radec2ha (np, op->s_ra, op->s_dec, &tmp); + tmp = radhr (tmp); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_sexa (w, tmp, 3, 600); + else + f_sexa (w, tmp, 3, 360000); + break; + case GHA_ID: { + gha (np, op, &tmp); + tmp = radhr (tmp); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_sexa (w, tmp, 3, 600); + else + f_sexa (w, tmp, 3, 360000); + } + break; + case DEC_ID: + f_prdec (w, op->s_dec); + break; + case AZ_ID: + f_pangle (w, op->s_az); + break; + case ALT_ID: + f_pangle (w, op->s_alt); + break; + case ZEN_ID: + f_pangle (w, PI/2 - op->s_alt); + break; + case Z_ID: /* airmass */ + airmass (op->s_alt, &tmp); + f_double (w, "%7.4f", tmp); + break; + case PA_ID: /* parallactic angle */ + radec2ha (np, op->s_ra, op->s_dec, &tmp); + f_double (w, "%7.2f", raddeg(parallacticLHD (lat, tmp, op->s_dec))); + break; + case JD_ID: /* julian date */ + f_double (w, "%13.5f", mjd+MJD0); + break; + case HJD_ID: /* heliocentric julian date */ + if (epoch != J2000) { + double ra = op->s_ra; + double dec = op->s_dec; + if (epoch == EOD) + ap_as (np, J2000, &ra, &dec); + else + precess (epoch, J2000, &ra, &dec); + heliocorr (mjd+MJD0, ra, dec, &tmp); + } else + heliocorr (mjd+MJD0, op->s_ra, op->s_dec, &tmp); + f_double (w, "%13.5f", mjd+MJD0 - tmp); + break; + case PMRA_ID: { /* proper motion in RA on sky */ + /* solsys as/hr, esat deg/min, else mas/yr */ + int isss = is_ssobj(op); + int ises = is_type(op,EARTHSATM); + if (isss || ises) { + Now n2 = *np; + Obj o2 = *op; + n2.n_mjd += isss ? 1./24. : 1./14400.; + obj_cir (&n2, &o2); + f_double (w, "%8.4g", cos(op->s_dec) * raddeg(o2.s_ra - op->s_ra) * + (isss ? 3600.0 : 10.0)); + } else { + f_double (w, "%8.4g", cos(op->s_dec) * raddeg(op->f_pmRA)*3600000.*365.25); + } + } + break; + case PMDEC_ID: { /* proper motion in Dec */ + /* solsys as/hr, esat deg/min, else mas/yr */ + int isss = is_ssobj(op); + int ises = is_type(op,EARTHSATM); + if (isss || ises) { + Now n2 = *np; + Obj o2 = *op; + n2.n_mjd += isss ? 1./24. : 1./14400.; + obj_cir (&n2, &o2); + f_double (w, "%8.4g", raddeg(o2.s_dec - op->s_dec) * + (isss ? 3600.0 : 10.0)); + } else { + f_double (w, "%8.4g", raddeg(op->f_pmdec)*3600000.*365.25); + } + } + break; + case SPECT_ID: + if (is_type (op,FIXEDM) && op->f_class != 'G' && op->f_spect[0]) { + char buf[10]; + sprintf (buf, " %2.2s ", op->f_spect); + f_string (w, buf); + } else { + char buf[10]; + sprintf (buf, " "); + f_string (w, buf); + } + break; + case HLONG_ID: + if (is_ssobj(op)) + f_pangle (w, op->s_hlong); + else { + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_string (w, " "); + else + f_string (w, " "); + } + break; + case HLAT_ID: + if (is_ssobj(op)) + f_pangle (w, op->s_hlat); + else { + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_string (w, " "); + else + f_string (w, " "); + } + break; + case GLONG_ID: { + double glat, glng, asra = op->s_ra, asdec = op->s_dec; + double e = epoch == EOD ? mjd : epoch; + if (epoch == EOD) + ap_as (np, mjd, &asra, &asdec); + eq_gal (e, asra, asdec, &glat, &glng); + f_pangle (w, glng); + } + break; + case GLAT_ID: { + double glat, glng, asra = op->s_ra, asdec = op->s_dec; + double e = epoch == EOD ? mjd : epoch; + if (epoch == EOD) + ap_as (np, mjd, &asra, &asdec); + eq_gal (e, asra, asdec, &glat, &glng); + f_pangle (w, glat); + } + break; + case ECLONG_ID: { + double eclat, eclng, asra = op->s_ra, asdec = op->s_dec; + double e = epoch == EOD ? mjd : epoch; + eq_ecl (e, asra, asdec, &eclat, &eclng); + f_pangle (w, eclng); + } + break; + case ECLAT_ID: { + double eclat, eclng, asra = op->s_ra, asdec = op->s_dec; + double e = epoch == EOD ? mjd : epoch; + eq_ecl (e, asra, asdec, &eclat, &eclng); + f_pangle (w, eclat); + } + break; + case EDST_ID: + if (is_planet(op, MOON)) { + tmp = op->s_edist; + if (pref_get(PREF_UNITS) == PREF_ENGLISH) { + /* s_edist is stored in au, want miles */ + tmp *= MAU*FTPM/5280.0; + } else { + /* s_edist is stored in au, want km */ + tmp *= MAU/1000.0; + } + f_double (w, "%6.0f", tmp); + } else if (is_ssobj(op)) { + /* show distance in au */ + f_double (w, op->s_edist >= 9.99995 ? "%6.3f" : "%6.4f", + op->s_edist); + } else + f_string (w, " "); + break; + case ELGHT_ID: + if (is_planet(op,MOON)) { + double m = op->s_edist*LTAU; /* seconds */ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_double (w, "%5.3f", m); + else + f_double (w, "%8.5f", m); /* 8.6 is ridiculous */ + } else if (is_ssobj(op)) { + double m = (op->s_edist*LTAU)/3600.0; /* hours */ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_mtime (w, m); /* hh:mm */ + else + f_time (w, m); /* hh:mm:ss */ + } else { + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_string (w, " "); + else + f_string (w, " "); + } + break; + case SDST_ID: + if (is_ssobj(op) && !is_planet(op, SUN)) + f_double (w, op->s_sdist >= 9.99995 ? "%6.3f" : "%6.4f", + op->s_sdist); + else + f_string (w, " "); + break; + case SLGHT_ID: + if (is_ssobj(op) && !is_planet(op, SUN)) { + double m = (op->s_sdist*LTAU)/3600.0; /* hours */ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_mtime (w, m); /* hh:mm */ + else + f_time (w, m); /* hh:mm:ss */ + } else { + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_string (w, " "); + else + f_string (w, " "); + } + break; + case ELONG_ID: + if (op->o_type != EARTHSAT) + f_double (w, "%6.1f", op->s_elong); + else + f_string (w, " "); + break; + case URANOM_ID: + f_string (w, um_atlas(op->s_ra, op->s_dec)); + break; + case URAN2K_ID: + f_string (w, u2k_atlas(op->s_ra, op->s_dec)); + break; + case MILLSA_ID: + f_string (w, msa_atlas(op->s_ra, op->s_dec)); + break; + case SIZE_ID: + if (op->o_type != EARTHSAT) { + if (op->s_size < 999.5) + f_double (w, "%5.1f", op->s_size); + else + f_double (w, "%5.0f", op->s_size); + } else + f_string (w, " "); + break; + case VMAG_ID: + if (op->o_type != EARTHSAT) { + double m = get_mag(op); + f_double (w, m <= -9.95 ? "%4.0f" : "%4.1f", m); + } else + f_string (w, " "); + break; + case PHS_ID: + if (is_ssobj(op)) + f_double (w, " %3.0f ", op->s_phase); + else + f_string (w, " "); + break; + + case RSTIME_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, "Error"); + else if (rp->rs_flags & RS_CIRCUMPOLAR) + f_string (w, "CirPl"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, "NvrUp"); + else if (rp->rs_flags & RS_NORISE) + f_string (w, "NoRis"); + else + dm_showtim (np, w, rp->rs_risetm); /* 5 chars wide */ + break; + + case RSAZ_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, " Error"); + else if (rp->rs_flags & RS_CIRCUMPOLAR) + f_string (w, "CirPol"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, " NvrUp"); + else if (rp->rs_flags & RS_NORISE) + f_string (w, "NoRise"); + else + f_dm_angle (w, rp->rs_riseaz); /* 6 chars wide */ + break; + + case SETTIME_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, "Error"); + else if (rp->rs_flags & RS_CIRCUMPOLAR) + f_string (w, "CirPl"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, "NvrUp"); + else if (rp->rs_flags & RS_NOSET) + f_string (w, "NoSet"); + else + dm_showtim (np, w, rp->rs_settm); /* 5 chars wide */ + break; + + case SETAZ_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, " Error"); + else if (rp->rs_flags & RS_CIRCUMPOLAR) + f_string (w, "CirPol"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, " NvrUp"); + else if (rp->rs_flags & RS_NOSET) + f_string (w, " NoSet"); + else + f_dm_angle (w, rp->rs_setaz); /* 6 chars wide */ + break; + + case TRTIME_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, "Error"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, "NvrUp"); + else if (rp->rs_flags & RS_NOTRANS) + f_string (w, "NoTrn"); + else + dm_showtim (np, w, rp->rs_trantm); /* 5 chars wide */ + break; + + case TRALT_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, " Error"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, " NvrUp"); + else if (rp->rs_flags & RS_NOTRANS) + f_string (w, "NoTran"); + else { + f_dm_angle (w, rp->rs_tranalt); /* 6 chars wide */ + } + break; + + case TRAZ_ID: + if (rp->rs_flags & RS_ERROR) + f_string (w, " Error"); + else if (rp->rs_flags & RS_NEVERUP) + f_string (w, " NvrUp"); + else if (rp->rs_flags & RS_NOTRANS) + f_string (w, "NoTran"); + else { + f_dm_angle (w, rp->rs_tranaz); /* 6 chars wide */ + } + break; + + case HRSUP_ID: + dm_rs_hrsup (np, op, w, rp); + break; + + case SEP_ID: + if (col[c].type != SEP_COL) { + printf ("Bug: %s: col[%d].type = 0x%x\n", me, c, col[c].type); + abort(); + } + db_update(sepop); + dm_separation (op, sepop, &tmp); + f_pangle (w, tmp); + break; + + default: + printf ("Bug! %s: bogus column id %d\n", me, c); + abort(); + } +} + +/* setup the limb and centric tag labels according to the current options */ +static void +dm_settags() +{ + char str[1024], estr[64]; + Now *np = mm_get_now(); + + if (epoch == EOD) + (void) strcpy (estr, "EOD"); + else { + double y; + mjd_year (epoch, &y); + (void) sprintf (estr, "%.1f", y); + } + (void) sprintf (str, "Equ: %s %s", + pref_get(PREF_EQUATORIAL) == PREF_GEO ? "Geo":"Topo", estr); + f_showit (centric_w, str); + + limb = XmToggleButtonGetState (limb_w) ? LIMB : CENTER; + f_showit (limbl_w, limb == LIMB ? "Limb" : "Center"); +} + +/* display the rise/set/transit mjd time t as hours in widget w. + * convert tm to local time if tzpref && PREF_ZONE == PREF_LOCALTZ. + */ +static void +dm_showtim (np, w, t) +Now *np; +Widget w; +double t; +{ + if (pref_get(PREF_ZONE) == PREF_LOCALTZ) + t -= tz/24.0; + + f_mtime (w, mjd_hr(t)); /* 5 chars: "hh:mm" */ +} + +/* display the total hours this object has been up. + * N.B. insure string length is always 5 chars wide. + * N.B. Earth satellites are up from rise to set, period, and either or both + * of these may be tomorrow if they are later than the current time because + * we scan for earth sat rise/set events up to 24 hours in the future + * regardless of whether it crosses over into tomorrow. Also, since we can't + * assume a nominal diurnal period who's to say how much it's up if all we + * have is a rise time that is later than a set time, + */ +/* ARGSUSED */ +static void +dm_rs_hrsup (np, op, w, rp) +Now *np; +Obj *op; +Widget w; +RiseSet *rp; +{ + double r, s, up; + + /* first some special cases */ + if (rp->rs_flags & RS_ERROR) { + f_string (w, "Error "); + return; + } + if (rp->rs_flags & RS_CIRCUMPOLAR) { + f_double (w, "%3.0f:00", 24.0); /* f_mtime() changes to 00:00 */ + return; + } + if (rp->rs_flags & RS_NEVERUP) { + f_mtime (w, 0.0); + return; + } + if (rp->rs_flags & (RS_NORISE|RS_NOSET)) { + f_string (w, " "); + return; + } + + r = rp->rs_risetm; + s = rp->rs_settm; + up = s - r; + + if (up < 0) { + /* we assume diurnal motion except for fast satellites */ + if (op->o_type == EARTHSAT && op->es_n > FAST_SAT_RPD) { + f_string (w, " "); + return; + } + up += 1.0; + } + + f_mtime (w, up*24.0); /* 5 chars: "hh:mm" */ +} + +static void +show_constellation (np, op, w) +Now *np; +Obj *op; +Widget w; +{ + char nm[10], *name; + int id; + + id = cns_pick (op->s_ra, op->s_dec, epoch == EOD ? mjd : epoch); + name = cns_name (id); + (void) sprintf (nm, "%.3s", name); + f_string(w, nm); +} + +/* compute the separation between the two sky locations */ +void +dm_separation (p, q, sp) +Obj *p, *q; +double *sp; +{ + double csep; + + solve_sphere (p->s_ra - q->s_ra, PI/2 - p->s_dec, sin(q->s_dec), + cos(q->s_dec), &csep, NULL); + *sp = acos(csep); +} + +/* create the setup dialog */ +static void +ds_create_selection(parent) +Widget parent; +{ + static struct { /* info to streamline creation of control buttons */ + DSCtrls id; + int lpos, rpos; + char *name; + char *tip; + } ctlbtns[] = { + {APPLY, 0, 4, "Apply", "Apply new settings and stay up"}, + {CANCEL, 5, 9, "Close", "Make no changes; just close"}, + {CLALL, 10, 14, "None", "Turn off all selections"}, + {RESET, 15, 19, "Restore", "Return to active settings"}, + {HELP, 20, 24, "Help", "More detailed descriptions"} + }; + Arg args[20]; + Widget lrc_w, crc_w, stb_w, sep_w, csep_w, ctlf_w; + Widget w; + Widget rb_w; + int n; + int i; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNallowOverlap, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + XtSetArg (args[n], XmNmarginHeight, 5); n++; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + selshell_w = XmCreateFormDialog (parent, "DataSetup", args, n); + set_xmstring (selshell_w, XmNdialogTitle, "xephem Data Table setup"); + set_something (selshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (selshell_w, XmNhelpCallback, ds_ctl_cb, (XtPointer)HELP); + sr_reg (XtParent(selshell_w), "XEphem*DataSetup.x", dscategory, 0); + sr_reg (XtParent(selshell_w), "XEphem*DataSetup.y", dscategory, 0); + + /* make a form for bottom control panel */ + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNfractionBase, 24); n++; + ctlf_w = XmCreateForm (selshell_w, "DataSelF", args, n); + XtManageChild (ctlf_w); + + /* make the control buttons */ + + for (i = 0; i < XtNumber(ctlbtns); i++) { + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 5); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, ctlbtns[i].lpos); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, ctlbtns[i].rpos); n++; + w = XmCreatePushButton (ctlf_w, ctlbtns[i].name, args, n); + XtAddCallback (w, XmNactivateCallback, ds_ctl_cb, + (XtPointer)ctlbtns[i].id); + wtip (w, ctlbtns[i].tip); + XtManageChild (w); + } + + /* a sep above controls */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ctlf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + csep_w = XmCreateSeparator (selshell_w, "CS", args, n); + XtManageChild (csep_w); + + /* misc controls in one RC on left */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, csep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 3); n++; + lrc_w = XmCreateRowColumn (selshell_w, "DS", args, n); + XtManageChild (lrc_w); + + + for (i = 0; i < NC; i++) { + if (col[i].type == MISC_COL) { + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);n++; + w = XmCreateToggleButton(lrc_w, col[i].name,args,n); + sr_reg (w, NULL, dscategory, 1); + XtManageChild (w); + col[i].sw = w; + + if (col[i].tip) + wtip (w, col[i].tip); + } + } + + /* sep */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, csep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, lrc_w); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + sep_w = XmCreateSeparator (selshell_w, "S2", args, n); + XtManageChild (sep_w); + + /* rise/set controls in one center column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, csep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, sep_w); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNnumColumns, 1); n++; + crc_w = XmCreateRowColumn (selshell_w, "DS", args, n); + XtManageChild (crc_w); + + /* start with displacement */ + + n = 0; + XtSetArg (args[n], XmNcolumns, 5); n++; + hzn_w = XmCreateTextField (crc_w, "Horizon", args, n); + sr_reg (hzn_w, NULL, dscategory, 1); + wtip (hzn_w, "Degrees the local horizon is above horizontal"); + XtManageChild (hzn_w); + hznd = dm_uhzndep(); + + /* make the CENTER/LIMB radio box */ + + n = 0; + w = XmCreateFrame (crc_w, "DSLimbF", args, n); + XtManageChild (w); + n = 0; + rb_w = XmCreateRadioBox (w, "DSLimbRB", args, n); + XtManageChild (rb_w); + + n = 0; + limb_w = XmCreateToggleButton (rb_w, "Limb", args, n); + wtip (limb_w, "Compute Rise/Set events with respect to upper limb"); + sr_reg (limb_w, NULL, dscategory, 1); + XtManageChild (limb_w); + + n = 0; + XtSetArg(args[n], XmNset, !XmToggleButtonGetState(limb_w)); n++; + w = XmCreateToggleButton (rb_w, "Center", args, n); + wtip (w, "Compute Rise/Set events with respect to body center"); + XtManageChild (w); + + /* now the rise/set buttons */ + + for (i = 0; i < NC; i++) { + if (col[i].type == RISET_COL) { + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);n++; + w = XmCreateToggleButton(crc_w, col[i].name,args,n); + sr_reg (w, NULL, dscategory, 1); + XtManageChild (w); + col[i].sw = w; + + if (col[i].tip) + wtip (w, col[i].tip); + } + } + + /* sep */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, csep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, crc_w); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + sep_w = XmCreateSeparator (selshell_w, "S3", args, n); + XtManageChild (sep_w); + + /* sep controls built directly on right side */ + + /* column control */ + + i = NC-1; /* N.B. assumes SEP_COL is last */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, sep_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + stb_w = XmCreateToggleButton(selshell_w, col[i].name, args, n); + sr_reg (stb_w, NULL, dscategory, 1); + XtManageChild (stb_w); + col[i].sw = stb_w; + + if (col[i].tip) + wtip (stb_w, col[i].tip); + + /* make a hidden label resource for saving sep partner */ + sepl_w = XmCreateLabel (selshell_w, "SepPartner", NULL, 0); + sr_reg (sepl_w, NULL, dscategory, 1); + + /* favorites scrolled list */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, stb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, csep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, sep_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fsl_w = XmCreateScrolledList (selshell_w, "SSL", args, n); + XtManageChild (fsl_w); +} + +/* put the favs list into the scrolled list. + * select one that matches sepl_w, if any + */ +static void +ds_buildfsl() +{ + XmString sepstr; + int sepfound; + int i; + + /* a little smoother if manage offline */ + set_something (fsl_w, XmNmappedWhenManaged, 0); + XtUnmanageChild (fsl_w); + + get_something (sepl_w, XmNlabelString, (XtArgVal)&sepstr); + XmListDeleteAllItems (fsl_w); + sepfound = 0; + for (i = 0; i < nfavs; i++) { + XmString str = XmStringCreateSimple (favs[i]->o_name); + XmListAddItemUnselected (fsl_w, str, 0); + if (XmStringCompare (str, sepstr)) { + XmListSelectItem (fsl_w, str, False); + sepfound = 1; + } + XmStringFree (str); + } + XmStringFree (sepstr); + + /* turn off sep column if partner no longer in list */ + if (!sepfound) { + XmToggleButtonSetState (col[SEP_ID].sw, False, False); + col[SEP_ID].on = 0; + XtUnmanageChild (col[SEP_ID].rcw); + } + + set_something (fsl_w, XmNmappedWhenManaged, (XtArgVal)True); + XtManageChild (fsl_w); +} + +/* set up a Data setup col menu based on what is currently on and defined. + */ +static void +ds_setup_col_selections() +{ + int i; + + for (i = 0; i < NC; i++) + XmToggleButtonSetState (col[i].sw, col[i].on, False); + + XmToggleButtonSetState (limb_w, limb == LIMB, True); + + dm_resetuhzndep(); +} + + +/* change the Data table according to what is now defined and set up in the + * Setup menu. + * N.B. can be called before we are managed. + * return 0 if all ok, else -1. + */ +static int +ds_apply_selections() +{ + int n_riset; + int n_sep; + int i; + + watch_cursor(1); + + /* if activating sep, must selected a partner */ + if (XmToggleButtonGetState(col[SEP_ID].sw)) { + int *selpos, nsel, sel; + if (XmListGetSelectedPos (fsl_w, &selpos, &nsel) == False) { + xe_msg (1, "Please select a Separation partner"); + watch_cursor(0); + return (-1); + } + sel = selpos[0]-1; /* List is 1-based */ + if (sel < 0 || sel >= nfavs) { + printf ("Bug! DS seli = %d but nfavs = %d\n", sel, nfavs); + abort(); + } + XtFree ((char*)selpos); + sepop = favs[sel]; + set_xmstring (sepl_w, XmNlabelString, sepop->o_name); + } + + /* scan each column choice */ + n_sep = n_riset = 0; + for (i = 0; i < NC; i++) { + col[i].on = XmToggleButtonGetState(col[i].sw); + if (col[i].on) { + XtManageChild (col[i].rcw); + if (col[i].type == RISET_COL) + n_riset++; + if (col[i].type == SEP_COL) + n_sep++; + } else + XtUnmanageChild (col[i].rcw); + } + + /* install user's horizon offset */ + hznd = dm_uhzndep(); + + /* set state info labels */ + dm_settags(); + if (n_riset) + XtManageChild (XtParent(limbl_w)); + else + XtUnmanageChild (XtParent(limbl_w)); + + if (col[RA_ID].on || col[DEC_ID].on || n_sep > 0) + XtManageChild (XtParent(centric_w)); + else + XtUnmanageChild (XtParent(centric_w)); + + watch_cursor(0); + + return (0); +} + +/* callback from any of the Data setup control panel buttons. + * which is in client. + */ +static void +/* ARGSUSED */ +ds_ctl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + DSCtrls id = (DSCtrls) client; + int i; + + switch (id) { + case OK: + if (ds_apply_selections() == 0) { + dm_update (mm_get_now(), 1); + XtUnmanageChild (selshell_w); + } + break; + case APPLY: + if (ds_apply_selections() == 0) { + dm_update (mm_get_now(), 1); + ng_update (mm_get_now(), 1); /* cares about hzn offset */ + } + break; + case CANCEL: + XtUnmanageChild (selshell_w); + break; + case CLALL: + for (i = 0; i < NC; i++) + XmToggleButtonSetState (col[i].sw, False, False); + break; + case RESET: + ds_setup_col_selections(); + break; + case HELP: + ds_help(); + break; + } +} + +/* called from the Data selection table Help button + */ +static void +ds_help () +{ + static char *msg[] = { +"This table lets you configure the rows and columns of the data table." +}; + + hlp_dialog ("DataSelection_Table", msg, XtNumber(msg)); +} + +/* create the list filename prompt */ +static void +dm_create_flist_w() +{ + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg(args[n], XmNmarginWidth, 20); n++; + XtSetArg(args[n], XmNmarginHeight, 20); n++; + flist_w = XmCreatePromptDialog (datashell_w, "DataSel", args,n); + set_something (flist_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (flist_w, XmNdialogTitle, "xephem Data list"); + set_xmstring (flist_w, XmNselectionLabelString, "File name:"); + defaultTextFN (XmSelectionBoxGetChild(flist_w, XmDIALOG_TEXT), 1, + "datatbl.txt", NULL); + XtUnmanageChild (XmSelectionBoxGetChild(flist_w, XmDIALOG_HELP_BUTTON)); + XtAddCallback (flist_w, XmNokCallback, dm_flistok_cb, NULL); + XtAddCallback (flist_w, XmNmapCallback, prompt_map_cb, NULL); +} + +/* called when the Ok button is hit in the file list prompt */ +/* ARGSUSED */ +static void +dm_flistok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024]; + char *name; + + get_xmstring(w, XmNtextString, &name); + + if (strlen(name) == 0) { + xe_msg (1, "Please enter a file name."); + XtFree (name); + return; + } + + if (existd (name,NULL) == 0 && confirm()) { + (void) sprintf (buf, "%s exists:\nAppend or Overwrite?", name); + query (flist_w, buf, "Append", "Overwrite", "Cancel", + flistok_append_cb, flistok_overwrite_cb, NULL); + } else + flistok_overwrite_cb(); + + XtFree (name); +} + +/* called when we want to append to a flist file */ +static void +flistok_append_cb () +{ + char *name; + + get_xmstring (flist_w, XmNtextString, &name); + make_flist (name, "a"); + XtFree (name); +} + +/* called when we want to ceate a new flist file */ +static void +flistok_overwrite_cb () +{ + char *name; + + get_xmstring (flist_w, XmNtextString, &name); + make_flist (name, "w"); + XtFree (name); +} + +/* open the named flist file "a" or "w" and fill it in. */ +static void +make_flist (name, how) +char *name; +char *how; +{ + FILE *fp = fopend (name, NULL, how); + + if (fp) { + dm_list_tofile (fp); + (void) fclose (fp); + } +} + +/* callback from file List control button. */ +/* ARGSUSED */ +static void +dm_flist_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!flist_w) + dm_create_flist_w(); + + if (!XtIsManaged(flist_w)) + XtManageChild (flist_w); +} + +/* callback from x selection control button. */ +/* ARGSUSED */ +static void +dm_xsel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *buf = XtMalloc ((nfavs+3)*(NC*20)); /* plenty big :-) */ + dm_list_get (buf); + XSetSelectionOwner (XtD, XA_PRIMARY, None, CurrentTime); + XStoreBytes (XtD, buf, strlen(buf)); + XtFree (buf); +} + +/* write the current data table to the given file */ +static void +dm_list_tofile(fp) +FILE *fp; +{ + char *buf = XtMalloc ((nfavs+3)*(NC*20)); /* plenty big :-) */ + dm_list_get (buf); + fprintf (fp, "%s", buf); + XtFree (buf); +} + +/* fetch the current table into the given buffer. + */ +static void +dm_list_get (buf) +char buf[]; +{ + Now *np = mm_get_now(); + int maxch[NC]; + int maxrh; + char *str; + char sbuf[32]; + int r, c; + int bufl, l; + + /* init as legal string */ + buf[0] = '\0'; + bufl = 0; + + /* scan all the row headers to find longest */ + maxrh = 0; + for (r = 0; r < nfavs; r++) { + l = strlen (favs[r]->o_name); + if (l > maxrh) + maxrh = l; + } + + /* scan all col headers and first row entry to find col widths. + * N.B. this assumes all data rows in a given column are the same + * length. + */ + for (c = 0; c < NC; c++) { + if (!col[c].on) + continue; + get_xmstring (tblpb[0][c], XmNlabelString, &str); + maxch[c] = strlen (str); + XtFree (str); + l = strlen (col[c].name); + if (l > maxch[c]) + maxch[c] = l; + } + + /* print the column headers */ + bufl += sprintf (buf+bufl, "%*s", maxrh, ""); + for (c = 0; c < NC; c++) { + if (!col[c].on) + continue; + bufl += sprintf (buf+bufl, " %-*s", maxch[c], col[c].name); + } + bufl += sprintf (buf+bufl, "\n"); + + /* now print the table */ + for (r = 0; r < nfavs; r++) { + bufl += sprintf (buf+bufl, "%-*s", maxrh, favs[r]->o_name); + for (c = 0; c < NC; c++) { + if (!col[c].on) + continue; + get_xmstring (tblpb[r][c], XmNlabelString, &str); + bufl += sprintf (buf+bufl, " %-*s", maxch[c], str); + XtFree (str); + } + bufl += sprintf (buf+bufl, "\n"); + } + bufl += sprintf (buf+bufl, "\n"); + + /* print the footer */ + if (XtIsManaged(XtParent(limbl_w))) { + get_xmstring (limbl_w, XmNlabelString, &str); + bufl += sprintf (buf+bufl, "%s ", str); + XtFree (str); + } + if (XtIsManaged(XtParent(centric_w))) { + get_xmstring (centric_w, XmNlabelString, &str); + bufl += sprintf (buf+bufl, "%s ", str); + XtFree (str); + } + get_xmstring (dt_w, XmNlabelString, &str); + bufl += sprintf (buf+bufl, "%s\n", str); + XtFree (str); + + /* add more details */ + if ((str = mm_getsite()) != NULL) + bufl += sprintf (buf+bufl, "Site: %s\n", str); + bufl += sprintf (buf+bufl, "\n"); + fs_sexa (sbuf, raddeg(lat), 4, 3600); + bufl += sprintf (buf+bufl, " Lat: %s\n", sbuf); + fs_sexa (sbuf, -raddeg(lng), 4, 3600); + bufl += sprintf (buf+bufl, "Long: %s\n", sbuf); + bufl += sprintf (buf+bufl, "Elev: %gm\n", elev*ERAD); + bufl += sprintf (buf+bufl, "Temp: %gC\n", temp); + bufl += sprintf (buf+bufl, "Pres: %gmB\n", pressure); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: datamenu.c,v $ $Date: 2013/03/02 02:57:08 $ $Revision: 1.61 $ $Name: $"}; diff --git a/GUI/xephem/db.c b/GUI/xephem/db.c new file mode 100644 index 0000000..ff36d92 --- /dev/null +++ b/GUI/xephem/db.c @@ -0,0 +1,945 @@ +/* code to manage what the outside world sees as the db_ interface. + */ + +#include +#include +#include +#include +#include +#include +#include + + +#include + +#include "xephem.h" + + +static void db_init (void); +static Obj *db_objadd (DBCat *dbcp, Obj *newop); +static DBCat *db_catadd (char *filename); +static DBCat *db_nmfindcat (char *name); +static void dbfifo_cb (XtPointer client, int *fdp, XtInputId *idp); +static int db_catcmpf (const void *d1, const void *d2); +static Obj *DBCatObj (DBCat *dbcp, int t, int i); +static void dupaddnm (char nm[][MAXNM], int nnm, Obj *op); +static void dupdelcat (DBCat *); +static void dupsort (void); +static int dup_qsort (const void *p1, const void *p2); +static int dupchknm (char nm[][MAXNM], int nnm); + +#define MAXDBLINE 256 /* longest allowed db line */ + +#define DBFIFO_MSG '!' /* introduces a message line from the DBFIFO */ + +/* Category for ours and dbmenu's resources in the Save system */ +char dbcategory[] = "Data files"; + +/* This counter is incremented when we want to mark all the Obj derived entries + * as being out-of-date. This works because then each of the age's will be != + * db_age. This is to eliminate ever calling obj_cir() under the same + * circumstances for a given db object. + * N.B. For this to work, call db_update() not obj_cir(). + */ +static ObjAge_t db_age = 1; /* insure all objects are initially o-o-d */ + +/* return true if the database has been initialized */ +#define DBINITED (dbcat) /* anything set by db_init() */ + +/* all data is kept in their respective catalogs. the first is a fake for the + * builtin objects. the others are kept sorted by name. + */ +static DBCat *dbcat; /* malloced array, one for each loaded catalog*/ +static int ndbcat; /* number of entries in dbcat[] */ +static char dbifres[] = "DBinitialFiles"; /* init files resource name */ + +/* db fifo name */ +static char dbfifo[] = "fifos/xephem_db_fifo"; + +/* names for builtin and fifo catalogs */ +static char bi_catname[] = "BuiltIn"; +static char fifo_catname[] = "Remote"; + +/* list of duplicate names and their objects */ +#define MAXDUPS 20 /* max duplicate names we will catch */ +static DupName *dupnames; /* malloced list, sorted by name */ +static int ndupnames; /* n entries used in dupnames[] */ +static int mdupnames; /* total entries malloced in dupnames[] */ +static int ndupsorted; /* n entries in dupnames[] that are sorted */ + +/* db fifo fd and XtAddInput id */ +static int db_fifofd = -1; +static XtInputId db_fifoid; + +/* return number of objects in the database. + */ +int +db_n() +{ + int i, t, n; + + if (!DBINITED) + db_init(); + + for (n = i = 0; i < ndbcat; i++) + for (t = 0; t < NOBJTYPES; t++) + n += dbcat[i].tmem[t].nuse; + return (n + fav_get_loaded (NULL)); +} + +/* given one of the basic ids in astro.h return pointer to its + * updated Obj in the database. + */ +Obj * +db_basic(id) +int id; +{ + Obj *op; + + if (!DBINITED) + db_init(); + + if (id < 0 || id >= dbcat[0].tmem[PLANET].nuse) { + printf ("db_basic(): bad id: %d\n", id); + abort(); + } + + op = DBCatObj (&dbcat[0], PLANET, id); + db_update(op); + return (op); +} + +/* load each file of objects listed in the DBinitialFiles resource + * and inform all modules of the update. + * support leading ~ and / else assume in ShareDir. + */ +void +db_loadinitial() +{ + char *fns; /* value of DBinitialFiles */ + char *dbicpy; /* local copy of dir */ + char *fnf[128]; /* ptrs into dbicpy[] at each ' ' */ + int nfn; + int i; + + /* get the initial list of files, if any */ + fns = getXRes (dbifres, NULL); + if (!fns) + return; + + /* work on a copy since we are about to break into fields */ + splashMsg ("Parsing data file names\n"); + dbicpy = XtNewString (fns); + nfn = get_fields (dbicpy, ' ', fnf); + if (nfn > XtNumber(fnf)) { + /* we exit because we've clobbered our stack by now! + * TODO: pass the size of fnf to get_fields(). + */ + printf ("Too many entries in %s. Max is %d\n", dbifres, + XtNumber(fnf)); + abort(); + } + + /* read in each catalog. + * N.B. get_fields() will return 1 even if there are no fields. + */ + for (i = 0; i < nfn && fnf[i][0] != '\0'; i++) { + splashMsg ("Reading %s\n", fnf[i]); + db_read (fnf[i]); + } + + /* all new */ + splashMsg ("Inform all systems of new data\n"); + all_newdb(0); + XtFree (dbicpy); +} + +/* make the current set of databases (except first for builtin objects) the + * new default + */ +static void +db_setinitial() +{ + char buf[2048]; + int i, l; + + buf[0] = '\0'; + for (l = 0, i = 1; i < ndbcat; i++) + l += sprintf (buf+l, " %s", dbcat[i].name); + + setXRes (dbifres, buf); +} + +/* return pointer to our duplicate names list. + * N.B. caller must not modify + */ +int +db_dups (DupName **dnpp) +{ + *dnpp = dupnames; + return (ndupnames); +} + +/* delete the given catalog. + * N.B. dbcp not valid on return + */ +void +db_catdel (dbcp) +DBCat *dbcp; +{ + int t, c; + + /* sanity check */ + if (dbcp < &dbcat[1] || dbcp >= &dbcat[ndbcat]) { + printf ("Bug! attempt to remove bogus catalog\n"); + abort(); + } + + /* remove each dupname referring to this catalog's entries */ + dupdelcat (dbcp); + + /* reclaim mem used by dbcp then remove from dbcat */ + for (t = 0; t < NOBJTYPES; t++) { + DBTMem *dbtp = &dbcp->tmem[t]; + if (dbtp->mem) { + for (c = 0; c < dbtp->nmem/NDBCHNKO; c++) + free (dbtp->mem[c]); + free ((char *)dbtp->mem); + } + } + + memmove (dbcp, dbcp+1, (&dbcat[--ndbcat] - dbcp)*sizeof(DBCat)); + + /* update GUI -- don't include builtin */ + db_newcatmenu (dbcat+1, ndbcat-1); + db_setinitial(); +} + +/* given an object, return which catalog it is in, else NULL */ +DBCat * +db_opfindcat (Obj *op) +{ + int t = op->o_type; + int i; + + for (i = 0; i < ndbcat; i++) { + DBCat *dbcp = &dbcat[i]; + int j, n = dbcp->tmem[t].nuse; + + /* scan each chunk looking for op */ + for (j = 0; j < n; j += NDBCHNKO) { + Obj *oplo= DBCatObj(dbcp, t, j); + Obj *ophi= DBCatObj(dbcp, t, j+NDBCHNKO>n ? n-1 : j+NDBCHNKO-1); + if (oplo <= op && op <= ophi) + return (dbcp); + } + } + + return (NULL); +} + +/* search for a loaded catalog with the given name. + * if find it return pointer to DBCat, else return NULL. + */ +static DBCat * +db_nmfindcat (name) +char *name; +{ + char *base; + int i; + + /* find just the basename */ + while (*name == ' ') + name++; + for (base = name+strlen(name); + base > name && base[-1] != '/' && base[-1] != '\\'; --base) + continue; + + for (i = 1; i < ndbcat; i++) + if (!strcmp (dbcat[i].name, base)) + return (&dbcat[i]); + return (NULL); +} + +/* allocate a new DBCat in dbcat[] and init with name, sorted by name but + * leaving first for builtins. + * name is already just the basename of a full path. + * return pointer if ok, else NULL if no more memory. + */ +static DBCat * +db_catadd (name) +char *name; +{ + DBCat *dbcp; + int i; + + /* make room for another */ + dbcp = (DBCat *) realloc (dbcat, (ndbcat+1)*sizeof(DBCat)); + if (!dbcp) + return (NULL); + dbcat = dbcp; + dbcp = &dbcat[ndbcat++]; + + /* init */ + memset (dbcp, 0, sizeof(*dbcp)); + (void) sprintf (dbcp->name, "%.*s", (int)sizeof(dbcp->name)-1, name); + dbcp->tmem[FIXED].siz = sizeof(ObjF); + dbcp->tmem[BINARYSTAR].siz = sizeof(ObjB); + dbcp->tmem[ELLIPTICAL].siz = sizeof(ObjE); + dbcp->tmem[HYPERBOLIC].siz = sizeof(ObjH); + dbcp->tmem[PARABOLIC].siz = sizeof(ObjP); + dbcp->tmem[EARTHSAT].siz = sizeof(ObjES); + dbcp->tmem[PLANET].siz = sizeof(ObjPl); + + /* sort by name, but leave built in at head */ + qsort (dbcat+1, ndbcat-1, sizeof(DBCat), db_catcmpf); + + /* find name again */ + for (i = 0; i < ndbcat; i++) + if (strcmp (dbcat[i].name, name) == 0) + return (&dbcat[i]); + + /* eh?? */ + printf ("Bug! catalog disappeared after sorting: %s\n", name); + abort(); + return (0); /* for lint */ +} + +/* mark all db objects as out-of-date + */ +void +db_invalidate() +{ + if (!DBINITED) + db_init(); + + db_age++; /* ok if wraps */ +} + +/* initialize the given DBScan for a database scan. tmask is a collection of + * *M masks for the desired types of objects. op/nop describe a list of + * ObjF which will also be scanned in addition to what is in the database. + * the idea is to call this once, then repeatedly call db_scan() to get all + * objects in the db of those types, then those in op (if any). + * return NULL when there are no more. + * N.B. nothing should be assumed as to the order these are returned. + */ +void +db_scaninit (sp, tmask, op, nop) +DBScan *sp; +int tmask; +ObjF *op; +int nop; +{ + if (!DBINITED) + db_init(); + + sp->m = tmask; + sp->t = UNDEFOBJ; + sp->n = 0; + sp->c = 0; + sp->op = op; + sp->nop = nop; +} + +/* fetch the next object. + * N.B. the s_ fields are *not* updated -- call db_update() when you need that. + */ +Obj * +db_scan (sp) +DBScan *sp; +{ + if (!DBINITED) + db_init(); + + /* find next object, splicing in op list with FIXED */ + while (sp->c < ndbcat) { + while (sp->t < NOBJTYPES) { + if (OBJTYPE2MASK(sp->t) & sp->m) { + if (sp->t == FIXED && sp->op) { + /* return next in op list (all are FIXED) */ + if (sp->n < sp->nop) + return ((Obj*)&sp->op[sp->n++]); + sp->op = NULL; /* flag to turn off op list */ + sp->n = 0; + } + if (sp->n < dbcat[sp->c].tmem[sp->t].nuse) { + /* return next in this catalog for this type */ + return (DBCatObj (&dbcat[sp->c], sp->t, sp->n++)); + } + } + + /* go on to next type */ + sp->t++; + sp->n = 0; + } + + /* go on to next catalog */ + sp->c++; + sp->t = UNDEFOBJ; + sp->n = 0; + } + + /* then any Favorites not also in db */ + return (fav_scan (&sp->n, sp->m)); +} + +/* see to it that all the s_* fields in the given db object are up to date. + * N.B. it is ok to call this even if op is not actually in the database + * although we guarantee an actual update occurs if it's not. + */ +void +db_update(op) +Obj *op; +{ + static char me[] = "db_update()"; + + if (!DBINITED) + db_init(); + + if (op->o_type == UNDEFOBJ) { + printf ("%s: called with UNDEFOBJ pointer\n", me); + abort(); + } + if ((int)op->o_type >= NOBJTYPES) { + printf ("%s: called with bad pointer: %d\n", me, (int)op->o_type); + abort(); + } + + if (op->o_age != db_age) { + if (obj_cir (mm_get_now(), op) < 0) + xe_msg (0, "%s: no longer valid", op->o_name); + op->o_age = db_age; + } +} + +/* reload all loaded catalogs + */ +void +db_rel_all() +{ + char **curn = NULL; + int i, n; + + if (!DBINITED) + db_init(); + + /* gather all currently loaded names so they can be reloaded */ + n = ndbcat - 1; /* sans first for builtins */ + curn = (char **) XtMalloc (n*sizeof(char *)); + for (i = 1; i < ndbcat; i++) + curn[i-1] = XtNewString(dbcat[i].name); + + /* reload all, free names as we go, then list itself */ + for (i = 0; i < n; i++) { + db_read (curn[i]); + XtFree (curn[i]); + } + XtFree ((char *)curn); + + /* spread the word */ + all_newdb(0); +} + +/* delete all catalogs except the basic objects. + */ +void +db_del_all() +{ + int i, n; + + if (!DBINITED) + db_init(); + + /* free each catalog */ + n = ndbcat; /* save, decrements after each */ + for (i = 1; i < n; i++) + db_catdel (&dbcat[1]); +} + +/* read the given .edb or .tle file into memory. + * add (or replace) a new catalog entry, sorted by catalog name, update GUI. + * stop gracefully if we run out of memory. + * keep operator informed. + * look in several places for file. + * if enabled and only one object in whole file, add to Favrorites + * N.B. caller is responsible for calling all_newdb(). + */ +void +db_read (fn) +char *fn; +{ + char bufs[3][MAXDBLINE]; + char *brot, *b0 = bufs[0], *b1 = bufs[1], *b2 = bufs[2]; + int alts = db_chkAltNames(); + char fullfn[1024]; + DBCat *dbcp; + Obj *newop = NULL; + int nobjs, nnewobjs; + Obj o; + char *base; + FILE *fp; + long len; + int fok; + + if (!DBINITED) + db_init(); + + /* skip any leading blanks */ + while (*fn == ' ') + fn++; + + /* open the file. + * try looking for fn in several places. + */ + fp = fopenh (fn, "r"); + if (fp) + goto ok; + sprintf (fullfn, "%s/%s", getPrivateDir(), fn); + fp = fopenh (fullfn, "r"); + if (fp) + goto ok; + sprintf (fullfn, "%s/catalogs/%s", getShareDir(), fn); + fp = fopenh (fullfn, "r"); + if (fp) + goto ok; + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return; + + /* need pure base of fn */ + ok: + for (base = fn+strlen(fn); + base > fn && base[-1] != '/' && base[-1] != '\\'; --base) + continue; + + /* set up to run the progress meter based on file position */ + (void) fseek (fp, 0L, SEEK_END); + len = ftell (fp); + (void) fseek (fp, 0L, SEEK_SET); + pm_set (0); + + /* get a /fresh/ catalog entry */ + dbcp = db_nmfindcat(base); + if (dbcp) + db_catdel(dbcp); + dbcp = db_catadd(base); + if (!dbcp) { + xe_msg (1, "No memory for new catalog"); + fclose(fp); + return; + } + + /* read each line from the file and add good ones to the db and dups */ + nobjs = nnewobjs = 0; + memset (bufs, 0, sizeof(bufs)); + while (fgets (b2, MAXDBLINE, fp)) { + char nm[MAXDUPS][MAXNM]; + char wn[1024]; + int nnm; + pm_set ((int)(ftell(fp)*100/len)); /* update progress meter */ + wn[0] = '\0'; + if ((nnm=db_crack_line (b2,&o,nm,MAXDUPS,wn)) > 0 + || !db_tle (b0,b1,b2,&o)) { + nobjs++; + if (nnm <= 0) { + /* must have found a tle entry */ + nnm = 1; + strcpy (nm[0], o.o_name); + } + if (!is_type(&o,PLANETM) && (!alts || !dupchknm (nm, nnm))) { + if (!(newop = db_objadd (dbcp, &o))) { + xe_msg (1, "No more memory"); + fclose(fp); + db_catdel (dbcp); + return; + } + dupaddnm (nm, alts ? nnm : 1, newop); + nnewobjs++; + } + } else if (wn[0]) + xe_msg (0, "%s: %s", fn, wn); + + /* rotate for possible TLE */ + brot = b0; + b0 = b1; + b1 = b2; + b2 = brot; + } + + /* clean up */ + fok = !ferror(fp); + fclose(fp); + + /* check for trouble */ + if (!fok) { + xe_msg (1, "%s:\n%s", base, syserrstr()); + db_catdel (dbcp); + return; + } + + /* reject catalog if found nothing at all */ + if (nobjs == 0) { + db_catdel (dbcp); + xe_msg (1, "%s contains no data", base); + return; + } + + xe_msg (0, "%s: contained %d new objects", base, nnewobjs); + db_newcatmenu (dbcat+1, ndbcat-1); /* sans builtin */ + db_setinitial(); + dupsort(); + + /* auto add to Favorites if exactly 1 in catalog */ + if (nnewobjs == 1 && newop && db_load1()) + fav_add (newop); +} + +/* assuming we can open it ok, connect the db fifo to a callback. + * we close and reopen each time we are called. + */ +void +db_connect_fifo() +{ + char fn[1024]; + + /* close if currently open */ + if (db_fifofd >= 0) { + XtRemoveInput (db_fifoid); + (void) close (db_fifofd); + db_fifofd = -1; + } + + /* open for read/write. this assures open will never block, that + * reads (and hence select()) WILL block if it's empty, and let's + * processes using it come and go as they please. + */ + (void) sprintf (fn,"%s/%s", getPrivateDir(), dbfifo); + db_fifofd = openh (fn, O_RDWR); + if (db_fifofd < 0) { + (void) sprintf (fn,"%s/%s", getShareDir(), dbfifo); + db_fifofd = openh (fn, O_RDWR); + if (db_fifofd < 0) { + xe_msg (0, "%s: %s\n", fn, syserrstr()); + return; + } + } + + /* wait for messages */ + db_fifoid = XtAppAddInput(xe_app, db_fifofd, (XtPointer)XtInputReadMask, + dbfifo_cb, (XtPointer)fn); +} + +/* allocate *newop to the given catalog list, growing if necessary. + * return new ptr if ok, NULL if no more memory. + */ +static Obj * +db_objadd (DBCat *dbcp, Obj *newop) +{ + DBTMem *dbtp = &dbcp->tmem[newop->o_type]; + int siz = dbtp->siz; + + /* add another chunk if no more room in current chunk */ + if (dbtp->nuse >= dbtp->nmem) { + int nchk = dbtp->nmem/NDBCHNKO; /* n chunks now */ + int ncl = (nchk+1)*sizeof(char*); /* bytes in new chunk list */ + char *newchk, *newcl; + + /* get new chunk and add one to chunk list */ + newchk = malloc (NDBCHNKO*siz); + if (!newchk) + return (NULL); + newcl = dbtp->mem ? realloc ((char*)dbtp->mem, ncl) + : malloc (ncl); + if (!newcl) { + free (newchk); + return (NULL); + } + + /* put chunk on list and record more room */ + dbtp->mem = (char**) newcl; + dbtp->mem[nchk] = newchk; + dbtp->nmem += NDBCHNKO; + } + + /* copy newop to list in next available chunk */ + return(memcpy(DBCatObj(dbcp, newop->o_type, dbtp->nuse++), newop, siz)); +} + +/* set up the basic database. + */ +static void +db_init() +{ + char buf[256]; + char nm[1][MAXNM]; + DBCat *dbcp; + Obj *biop; + int n; + int i; + + /* first catalog is for the builtin objects */ + dbcp = db_catadd (bi_catname); + n = getBuiltInObjs (&biop); + for (i = 0; i < n; i++) { + Obj *op = db_objadd (dbcp, &biop[i]); + strcpy (nm[0], op->o_name); + dupaddnm (nm, 1, op); + } + dupsort(); + + /* inform subsystem where to find moon tables */ + sprintf (buf, "%s/auxil", getShareDir()); + setMoonDir (XtNewString(buf)); /* must provide perm storage */ + + /* register the initial files list */ + sr_reg (0, dbifres, dbcategory, 1); +} + +/* given a catalog, type and index, return pointer to object */ +static Obj * +DBCatObj (DBCat *dbcp, int t, int i) +{ + DBTMem *dbtp = &dbcp->tmem[t]; + + return ((Obj*)&dbtp->mem[(i)/NDBCHNKO][((i)%NDBCHNKO)*dbtp->siz]); +} + +/* called whenever there is input readable from the db fifo. + * read and crack what we can. + * be prepared for partial lines split across reads. + * N.B. do EXACTLY ONE read -- don't know that more won't block. + * set the watch cursor while we work and call all_newdb() when we're done. + * we guess we are "done" when we end up without a partial line. + */ +/* ARGSUSED */ +static void +dbfifo_cb (client, fdp, idp) +XtPointer client; /* file name */ +int *fdp; /* pointer to file descriptor */ +XtInputId *idp; /* pointer to input id */ +{ + static char partial[MAXDBLINE]; /* partial line from before */ + static int npartial; /* length of stuff in partial[] */ + int alts = db_chkAltNames(); /* whether to check dup names */ + char buf[16*1024]; /* nice big read gulps */ + char *name = (char *)client; /* fifo filename */ + int nr; /* number of bytes read from fifo */ + + /* turn on the watch cursor if there's no prior line */ + if (!npartial) + watch_cursor (1); + + /* catch up where we left off from last time */ + if (npartial) + (void) strcpy (buf, partial); + + /* read what's available up to the room we have left. + * if we have no room left, it will look like an EOF. + */ + nr = read (db_fifofd, buf+npartial, sizeof(buf)-npartial); + + if (nr > 0) { + char c, *lp, *bp, *ep; /* last line, current, end */ + + /* process each whole line */ + ep = buf + npartial + nr; + for (lp = bp = buf; bp < ep; ) { + c = *bp++; + if (c == '\n') { + bp[-1] = '\0'; /* replace nl with EOS */ + if (*lp == DBFIFO_MSG) { + xe_msg (0, "DBFIFO message: %s", lp+1); + } else { + Obj o; + char nm[MAXDUPS][MAXNM]; + int nnm; + if ((nnm=db_crack_line(lp,&o,nm,MAXDUPS,NULL)) < 0) { + xe_msg (0, "Bad DBFIFO line: %s", lp); + } else if (!alts || !dupchknm (nm, nnm)) { + Obj *op; + if (is_type(&o, PLANETM)) { + xe_msg (0, + "Planet %s ignored from DBFIFO",o.o_name); + } else { + DBCat *dbcp = db_nmfindcat (fifo_catname); + if (!dbcp) + dbcp = db_catadd (fifo_catname); + if (!dbcp || !(op = db_objadd (dbcp, &o))) + xe_msg (0, "No more memory for DBFIFO"); + else { + dupaddnm (nm, alts ? nnm : 1, op); + dupsort(); + } + } + } + } + lp = bp; + } + } + + /* save any partial line for next time */ + npartial = ep - lp; + if (npartial > 0) { + if (npartial > sizeof(partial)) { + xe_msg (0,"Discarding long line in %.100s.\n",name); + npartial = 0; + } else { + *ep = '\0'; + (void) strcpy (partial, lp); + } + } + + } else { + if (nr < 0) + xe_msg (1, "Error reading %.150s: %.50s.\n", + name, syserrstr()); + else + xe_msg (1, "Unexpected EOF on %.200s.\n", name); + XtRemoveInput (db_fifoid); + (void) close (db_fifofd); + db_fifofd = -1; + npartial = 0; + } + + /* if there is not likely to be more coming inform everyone about all + * the new stuff and turn off the watch cursor. + */ + if (!npartial) { + all_newdb (1); + watch_cursor (0); + } +} + +/* compare 2 pointers to DBCat's by name in qsort fashion */ +static int +db_catcmpf (const void *d1, const void *d2) +{ + return (strcmp (((DBCat *)d1)->name, ((DBCat *)d2)->name)); +} + +/* append nm's to the dup list, each pointing to op. + * we increment ndupnames but not ndupsorted. + * N.B. result is not sorted .. use dupsort() when finished + */ +static void +dupaddnm (char nm[][MAXNM], int nnm, Obj *op) +{ + int i; + + if (mdupnames < ndupnames + nnm) + dupnames = (DupName *) XtRealloc ((char *)dupnames, + (mdupnames = ndupnames+10*nnm)*sizeof(DupName)); + + for (i = 0; i < nnm; i++) { + strcpy (dupnames[ndupnames+i].nm, nm[i]); + dupnames[ndupnames+i].op = op; + } + + ndupnames += nnm; +} + +/* delete each dupnames[] IN PLACE that points to catalog dbcp. + * N.B. we assume this will never be called to remove a builtin object + */ +static void +dupdelcat (DBCat *dbcp) +{ + int from, to; + + /* scan the dupnames list, copy over any entries pointing to dbcp */ + for (to = from = 0; from < ndupnames; from++) { + Obj *op = dupnames[from].op; + int t = op->o_type; + int n = dbcp->tmem[t].nuse; + int i; + + /* see if op is within any chunk of type t in catalog dbcp */ + for (i = 0; i < n; i += NDBCHNKO) { + Obj *oplo= DBCatObj(dbcp, t, i); + Obj *ophi= DBCatObj(dbcp, t, i+NDBCHNKO>n ? n-1 : i+NDBCHNKO-1); + if (oplo <= op && op <= ophi) + break; /* yes, this dupname refers to catalog dbcp */ + } + + /* keep if not in dbcp */ + if (i >= n) { + if (from > to) + memcpy (&dupnames[to], &dupnames[from], sizeof(DupName)); + to++; + } + } + + /* new count */ + ndupnames = to; + + /* unsorted, if any, are at end of list */ + if (ndupnames < ndupsorted) + ndupsorted = ndupnames; + + /* cut back to ndupnames memory */ + dupnames = (DupName *) XtRealloc ((char *)dupnames, + (mdupnames = ndupnames)*sizeof(DupName)); +} + +/* check whether any of the nm[] names are already in the sorted portion of + * dup list. if at least one is, add all the ones that aren't and return -1 + * else don't add anything and return 0 (meaning "no dups") + */ +static int +dupchknm (char nm[][MAXNM], int nnm) +{ + Obj *op = NULL; + int i; + + for (i = 0; i < nnm; i++) { + /* binary search to find a matching dupname */ + int l = 0; + int u = ndupsorted - 1; + int m = -1, diff = -1; + + while (l <= u) { + m = (l+u)/2; + diff = strnncmp (nm[i], dupnames[m].nm); + if (diff == 0) + break; /* found dup */ + if (diff < 0) + u = m-1; + else + l = m+1; + } + + if (diff == 0) { + /* found a matching dup, add all prev if first */ + if (!op) { + op = dupnames[m].op; + dupaddnm (nm, i, op); + } + } else { + /* no match, add if found a dup already */ + if (op) + dupaddnm (&nm[i], 1, op); + } + } + + /* return 0 if found no matches */ + return (op ? -1 : 0); +} + +/* compare pointers to two DupNames by nm, qsort-style */ +static int +dup_qsort (const void *p1, const void *p2) +{ + return (strnncmp (((DupName*)p1)->nm, ((DupName*)p2)->nm)); +} + +/* sort dupnames[] by name */ +static void +dupsort (void) +{ + qsort (dupnames, ndupnames, sizeof(dupnames[0]), dup_qsort); + ndupsorted = ndupnames; +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: db.c,v $ $Date: 2010/01/18 01:47:02 $ $Revision: 1.46 $ $Name: $"}; diff --git a/GUI/xephem/db.h b/GUI/xephem/db.h new file mode 100644 index 0000000..fb4a249 --- /dev/null +++ b/GUI/xephem/db.h @@ -0,0 +1,58 @@ +#ifndef _DB_H +#define _DB_H + +/* used to maintain progress state with db_scanint() and db_scan */ +typedef struct { + int m; /* mask of *N types desired */ + int t; /* current Object type, as per ObjType */ + int n; /* number of objects of type t "scanned" so far */ + int c; /* index of catalog being scanned */ + ObjF *op; /* local list to also scan */ + int nop; /* number in op[] */ +} DBScan; + +/* keep track of the indeces effected for each ObjType loaded by each catalog. + * N.B. this works because all objects from a given catalog are contiguous + * within each their respective ObjType. + */ +#define MAXCATNM 32 /* max catalog file name (just the base) */ + +/* collect objects in each catalog, and handy macro to address entry n type t. + * objects are collected into small arrays called chunks. this eliminates + * them moving around since putting them into one large array would require + * using realloc and open the possibility they could move, and the smaller + * pieces reduces memory bloat due to fragmentation. + */ +#define NDBCHNKO 4096 /* objects for which mem is allocated at once */ +typedef struct { + int siz; /* bytes in each object, sizeof(ObjE) etc */ + char **mem; /* array of pointers to memory chunks */ + int nmem; /* n objects available in all chunks */ + int nuse; /* n objects actually in use */ +} DBTMem; /* all objects for a given o_type */ +typedef struct { + char name[MAXCATNM]; /* name of catalog */ + DBTMem tmem[NOBJTYPES]; /* memory for each type */ +} DBCat; /* all objects in a given catalog */ + + +/* duplicate names are detected by keeping a list of each name and the Obj to + * which it refers. + */ +typedef struct { + char nm[MAXNM]; + Obj *op; +} DupName; + +extern char dbcategory[]; + +extern DBCat *db_opfindcat (Obj *op); +extern void db_newcatmenu (DBCat a[], int na); +extern void db_catdel (DBCat *dbcp); +extern void db_del_all (void); +extern void db_rel_all (void); +extern int db_dups (DupName **dnpp); + +extern int db_chkAltNames(void); + +#endif /* _DB_H */ diff --git a/GUI/xephem/dbmenu.c b/GUI/xephem/dbmenu.c new file mode 100644 index 0000000..973e808 --- /dev/null +++ b/GUI/xephem/dbmenu.c @@ -0,0 +1,799 @@ +/* code to manage the stuff on the "database" menu. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static void db_create_shell (void); +static void db_set_report (void); +static void db_openfifo_cb (Widget w, XtPointer client, XtPointer data); +static void db_index_cb (Widget w, XtPointer client, XtPointer data); +static void db_delall_cb (Widget w, XtPointer client, XtPointer data); +static void db_popdown_cb (Widget w, XtPointer client, XtPointer data); +static void db_relall_cb (Widget w, XtPointer client, XtPointer data); +static void db_help_cb (Widget w, XtPointer client, XtPointer data); +static void db_helpon_cb (Widget w, XtPointer client, XtPointer data); +static void db_loadpb_cb (Widget w, XtPointer client, XtPointer data); +static void db_close_cb (Widget w, XtPointer client, XtPointer data); +static void db_1catrow (Widget rc_w, DBCat *dbcp); +static void dbhdr_close_cb (Widget w, XtPointer client, XtPointer data); +static void db_showhdr(char *fn); + +static Widget dbshell_w; /* main shell */ +static Widget catsw_w; /* scrolled window managing the cat list */ +static Widget report_w; /* label with the dbstats */ +static Widget load1_w; /* TB whether to load Fav from .edb with 1 */ +static Widget altnames_w; /* TB whether to load alternate names */ +static Widget ncats_w; /* number of catalogs label */ +static Widget nobjs_w; /* number of objects label */ +static Widget dbf_w; /* form for displaying catalog header */ +static Widget dbt_w; /* T widget for display catalog header */ + +/* bring up the db menu, creating if first time */ +void +db_manage() +{ + if (!dbshell_w) + db_create_shell(); + + db_set_report(); /* get a fresh count */ + XtPopup (dbshell_w, XtGrabNone); + set_something (dbshell_w, XmNiconic, (XtArgVal)False); +} + +/* called when the database beyond the builtin ones has changed in any way. + * as odd as this seems since *this* menu controls the db contents, this was + * added when the db fifo input path was added. it continued to be handy + * when initial db files could be loaded automatically and we introduced + * fields stars in 2.9. + * all we do is update our tally, if we are up at all. + */ +/* ARGSUSED */ +void +db_newdb (appended) +int appended; +{ + if (isUp(dbshell_w)) + db_set_report(); +} + +/* return whether to check for alternate names when reading a catalog */ +int +db_chkAltNames(void) +{ + if (!altnames_w) + db_create_shell(); + return (XmToggleButtonGetState (altnames_w)); +} + +/* update the list of catalogs. + */ +void +db_newcatmenu (dbcp, ndbcp) +DBCat dbcp[]; +int ndbcp; +{ + char buf[128]; + Arg args[20]; + Widget ww; + int n; + + /* create if not already */ + if (!dbshell_w) + db_create_shell(); + + /* set count label */ + sprintf (buf, "%d Loaded Catalog%c", ndbcp, ndbcp==1?' ':'s'); + set_xmstring (ncats_w, XmNlabelString, buf); + + /* replace workWindow */ + get_something (catsw_w, XmNworkWindow, (XtArgVal)&ww); + XtDestroyWidget (ww); + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + ww = XmCreateRowColumn (catsw_w, "CatRC", args, n); + wtip (ww, "List of all catalogs now in memory"); + set_something (catsw_w, XmNworkWindow, (XtArgVal)ww); + + /* fill with each cat info */ + for (n = 0; n < ndbcp; n++) + db_1catrow (ww, dbcp+n); + + /* ok */ + XtManageChild (ww); +} + +/* called to put up or remove the watch cursor. */ +void +db_cursor (c) +Cursor c; +{ + Window win; + + if (dbshell_w && (win = XtWindow(dbshell_w)) != 0) { + Display *dsp = XtDisplay(dbshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return 1 if want to autoload favorite if read a .edb with 1 entry, else 0 */ +int +db_load1() +{ + /* create if not already */ + if (!dbshell_w) + db_create_shell(); + + return (XmToggleButtonGetState(load1_w)); +} + +/* create a shell to allow user to manage files . */ +static void +db_create_shell () +{ + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + char *tip; /* button tip text */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Database", + "How to load and delete .edb catalogs files"}, + {"on Control...", "Database_control", + "Information about the Control pulldown menu"}, + {"File format...", "Database_files", + "Definition of the XEphem .edb file format"}, + {"Notes...", "Database_notes", + "Additional info about the XEphem data base"}, + }; + Widget mb_w, pd_w, cb_w; + Widget rc_w; + Widget dbform_w; + XmString str; + Widget w; + char *s[2]; + Arg args[20]; + int n; + int i; + + /* create outter shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Database Files"); n++; + XtSetArg (args[n], XmNiconName, "DB"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + dbshell_w = XtCreatePopupShell ("DB", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (dbshell_w); + set_something (dbshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (dbshell_w, XmNpopdownCallback, db_popdown_cb, NULL); + sr_reg (dbshell_w, "XEphem*DB.x", dbcategory, 0); + sr_reg (dbshell_w, "XEphem*DB.y", dbcategory, 0); + sr_reg (dbshell_w, "XEphem*DB.height", dbcategory, 0); + sr_reg (dbshell_w, "XEphem*DB.width", dbcategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + dbform_w = XmCreateForm (dbshell_w, "DBManage", args, n); + XtAddCallback (dbform_w, XmNhelpCallback, db_help_cb, 0); + XtManageChild(dbform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (dbform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* handy Index */ + + n = 0; + w = XmCreatePushButton (pd_w, "Idx", args, n); + XtAddCallback (w, XmNactivateCallback, db_index_cb, 0); + set_xmstring(w, XmNlabelString, "Index..."); + wtip (w, "Search and inspect loaded objects"); + XtManageChild (w); + + /* delete all */ + + n = 0; + w = XmCreatePushButton (pd_w, "DelAll", args, n); + XtAddCallback (w, XmNactivateCallback, db_delall_cb, 0); + set_xmstring(w, XmNlabelString, "Delete all"); + wtip (w, "Remove all files from memory"); + XtManageChild (w); + + /* reload all */ + + n = 0; + w = XmCreatePushButton (pd_w, "RelAll", args, n); + XtAddCallback (w, XmNactivateCallback, db_relall_cb, 0); + set_xmstring(w, XmNlabelString, "Reload all"); + wtip (w, "Reload all catalogs already in memory"); + XtManageChild (w); + + /* make the open fifo button */ + + n = 0; + w = XmCreatePushButton (pd_w, "OpenFIFO", args, n); + XtAddCallback (w, XmNactivateCallback, db_openfifo_cb, 0); + set_xmstring(w, XmNlabelString, "Open DB Fifo"); + wtip (w, "Activate import path for Object definitions"); + XtManageChild (w); + + /* make the load-1 toggle button */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + load1_w = XmCreateToggleButton (pd_w, "Load1", args, n); + set_xmstring(load1_w, XmNlabelString, "Make Favorite when read 1"); + wtip (load1_w, + "Reading a file containing 1 entry also adds it to Favorites"); + XtManageChild (load1_w); + sr_reg (load1_w, NULL, dbcategory, 1); + + /* make the Record duplicate names */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + altnames_w = XmCreateToggleButton (pd_w, "CheckAltNames", args, n); + set_xmstring(altnames_w, XmNlabelString, "Check alternate names"); + wtip (altnames_w, + "Check and record alternate names when loading; nice but slow"); + XtManageChild (altnames_w); + sr_reg (altnames_w, NULL, dbcategory, 1); + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the close button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, db_close_cb, 0); + wtip (w, "Close this window"); + XtManageChild (w); + + /* make the Files pulldown */ + + s[0] = ".edb"; + s[1] = ".tle"; + cb_w = createFSM (mb_w, s, 2, "catalogs", db_loadpb_cb); + wtip (cb_w, "Select catalog file to load"); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, db_helpon_cb, + (XtPointer)(hp->key)); + if (hp->tip) + wtip (w, hp->tip); + XtManageChild (w); + XmStringFree(str); + } + + /* make the report output-only text under a label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNtopOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + rc_w = XmCreateRowColumn (dbform_w, "RCO", args, n); + XtManageChild (rc_w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + nobjs_w = XmCreateLabel (rc_w, "NObjs", args, n); + XtManageChild (nobjs_w); + + n = 0; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + XtSetArg (args[n], XmNrows, 16); n++; /* must match db_set_report */ + XtSetArg (args[n], XmNcolumns, 32); n++; + report_w = XmCreateText (rc_w, "Report", args, n); + wtip (report_w, + "Breakdown of number and types of objects in memory"); + XtManageChild (report_w); + + /* label for Catalogs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + ncats_w = XmCreateLabel (dbform_w, "NCats", args, n); + set_xmstring (ncats_w, XmNlabelString, "0 Loaded Catalogs"); + XtManageChild (ncats_w); + + /* create a RC in a SW for showing and deleting loaded catalogs. + * the RC is replaced each time the list changes. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ncats_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + catsw_w = XmCreateScrolledWindow (dbform_w, "CatSW", args, n); + XtManageChild (catsw_w); + + n = 0; + w = XmCreateRowColumn (catsw_w, "CatRCDummy", args, n); + XtManageChild (w); +} + +/* a PB in a file PD has been chosen. + */ +static void +db_loadpb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + + watch_cursor(1); + get_xmstring (w, XmNlabelString, &fn); + db_read (fn); + XtFree (fn); + all_newdb(1); + watch_cursor(0); +} + +/* compile the stats report into report_w. + * N.B. we do not include the planets nor the user objects. + */ +static void +db_set_report() +{ + DBScan dbs; + char report[1024]; + Obj *op; + int nes=0, ne=0, np=0, nh=0, npm=0, nbs=0; + int nc=0, ng=0, nj=0, nn=0, npn=0, nl=0, nq=0, nr=0, ns=0, no=0, ny=0; + int n=0; + + for (db_scaninit(&dbs, ALLM, NULL, 0); (op=db_scan(&dbs)) != NULL; ){ + switch (op->o_type) { + case FIXED: + switch (op->f_class) { + case 'C': case 'U': case 'O': + nc++; + break; + case 'G': case 'H': case 'A': + ng++; + break; + case 'N': case 'F': case 'K': + nn++; + break; + case 'J': + nj++; + break; + case 'P': + npn++; + break; + case 'L': + nl++; + break; + case 'Q': + nq++; + break; + case 'R': + nr++; + break; + case 'T': case 'B': case 'D': case 'M': case 'S': case 'V': + ns++; + break; + case 'Y': + ny++; + break; + default: + no++; + break; + } + break; + case BINARYSTAR: nbs++; break; + case PLANET: npm++; break; + case ELLIPTICAL: ne++; break; + case HYPERBOLIC: nh++; break; + case PARABOLIC: np++; break; + case EARTHSAT: nes++; break; + case UNDEFOBJ: break; + default: + printf ("Unknown object type: %d\n", op->o_type); + abort(); + } + n++; + } + + (void) sprintf (report, "\ +%6d Solar -- planets and moons\n\ +%6d Solar -- elliptical\n\ +%6d Solar -- hyperbolic\n\ +%6d Solar -- parabolic\n\ +%6d Earth satellites\n\ +%6d Clusters (C,U,O)\n\ +%6d Galaxies (G,H,A)\n\ +%6d Nebulae (N,F,K)\n\ +%6d Planetary Nebulae (P)\n\ +%6d Pulsars (L)\n\ +%6d Quasars (Q)\n\ +%6d Radio sources (J)\n\ +%6d Supernovae (Y)\n\ +%6d Supernova Remnants (R)\n\ +%6d Stars (S,V,D,B,M,T)\n\ +%6d Binary systems\n\ +%6d Undefined\ +", + npm, ne, nh, np, nes, nc, ng, nn, npn, nl, nq, nj, ny, nr, ns, nbs, no); + + /* set report and count in label */ + set_something (report_w, XmNvalue, (XtArgVal)report); + sprintf (report, "%d Loaded Objects", n); + set_xmstring (nobjs_w, XmNlabelString, report); +} + +static void +dbdelall() +{ + db_del_all(); + all_newdb(0); +} + +/* callback when user wants to bring up the Index window + */ +/* ARGSUSED */ +static void +db_index_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + obj_manage(); +} + +/* callback when user wants to delete all files + */ +/* ARGSUSED */ +static void +db_delall_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + if (confirm()) + query (dbshell_w, "Delete all files from memory?", + "Yes .. delete all", "No .. no change", NULL, + dbdelall, NULL, NULL); + else + dbdelall(); +} + +static void +dbrelall() +{ + watch_cursor(1); + db_rel_all(); + all_newdb(0); + watch_cursor(0); +} + +/* callback when user wants to reload all files + */ +/* ARGSUSED */ +static void +db_relall_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + if (confirm()) + query (dbshell_w, "Reload all files in memory?", + "Yes -- reload all", "No -- no change", NULL, + dbrelall, NULL, NULL); + else + dbrelall(); +} + +/* callback from the open fifo button */ +/* ARGSUSED */ +static void +db_openfifo_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + db_connect_fifo(); +} + +/* ARGSUSED */ +static void +db_help_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + static char *msg[] = { +"This displays a count of the various types of objects currently in memory.", +"Database files may be read in to add to this list or the list may be deleted." +}; + + hlp_dialog ("Database", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +db_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* ARGSUSED */ +static void +db_popdown_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + if (dbf_w) + XtUnmanageChild (dbf_w); +} + +/* ARGSUSED */ +static void +db_close_cb (w, client, data) +Widget w; +XtPointer client; +XtPointer data; +{ + XtPopdown (dbshell_w); +} + +/* call from any of the Delete catalog PBs. + * client is a DBCat *. + */ +/* ARGSUSED */ +static void +catdel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + watch_cursor(1); + db_catdel ((DBCat *)client); + all_newdb(0); + watch_cursor(0); +} + +/* call from any of the Header catalog PBs. + * client is a DBCat *. + */ +/* ARGSUSED */ +static void +cathdr_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + watch_cursor(1); + db_showhdr (((DBCat *)client)->name); + watch_cursor(0); +} + +/* build one new catalog entry */ +static void +db_1catrow (rc_w, dbcp) +Widget rc_w; +DBCat *dbcp; +{ + Widget f_w, pb_w; + Widget nl_w, cl_w; + char buf[32]; + Arg args[20]; + int n; + int i, nobjs; + + n = 0; + f_w = XmCreateForm (rc_w, "CatForm", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNshadowThickness, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + pb_w = XmCreatePushButton (f_w, "Delete", args, n); + wtip (pb_w, "Delete all objects from this catalog"); + XtAddCallback (pb_w, XmNactivateCallback, catdel_cb, (XtPointer)dbcp); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNleftOffset, 3); n++; + XtSetArg (args[n], XmNshadowThickness, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + pb_w = XmCreatePushButton (f_w, "Header", args, n); + wtip (pb_w, "Display header info from this catalog"); + XtAddCallback (pb_w, XmNactivateCallback, cathdr_cb, (XtPointer)dbcp); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNleftOffset, 3); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + nl_w = XmCreateLabel (f_w, "NObjs", args, n); + XtManageChild (nl_w); + + for (nobjs = i = 0; i < NOBJTYPES; i++) + nobjs += dbcp->tmem[i].nuse; + (void) sprintf (buf, "%6d", nobjs); + set_xmstring (nl_w, XmNlabelString, buf); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, nl_w); n++; + XtSetArg (args[n], XmNleftOffset, 3); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + cl_w = XmCreateLabel (f_w, "Name", args, n); + XtManageChild (cl_w); + set_xmstring (cl_w, XmNlabelString, dbcp->name); +} + +/* display the header of the given catalog file */ +static void +db_showhdr(char *fn) +{ + char buf[1024]; + FILE *fp; + char *hdr; + int n, l; + + /* create the text window first time */ + if (!dbf_w) { + Arg args[20]; + Widget w; + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + dbf_w = XmCreateFormDialog (toplevel_w, "DBHeader", args, n); + set_something (dbf_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (dbf_w, XmNdialogTitle, "xephem Catalog header"); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + w = XmCreatePushButton (dbf_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, dbhdr_close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrows, 24); n++; + XtSetArg (args[n], XmNcolumns, 82); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + dbt_w = XmCreateScrolledText (dbf_w, "DBH", args, n); + XtManageChild (dbt_w); + } + + fp = fopend (fn, "catalogs", "r"); + if (!fp) + return; + + hdr = XtMalloc(1); + hdr[0] = '\0'; + for (n = l = 0; fgets (buf, sizeof(buf), fp) != NULL; l += n) { + if (dbline_candidate (buf) == 0) + continue; + n = strlen (buf); + hdr = XtRealloc (hdr, n+l+1); + strcpy (hdr+l, buf); + } + XmTextSetString (dbt_w, hdr); + XtFree (hdr); + + XtManageChild (dbf_w); +} + +static void +dbhdr_close_cb (Widget w, XtPointer client, XtPointer call) +{ + if (dbf_w) + XtUnmanageChild (dbf_w); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: dbmenu.c,v $ $Date: 2005/04/27 17:04:59 $ $Revision: 1.48 $ $Name: $"}; diff --git a/GUI/xephem/descrip.mms b/GUI/xephem/descrip.mms new file mode 100755 index 0000000..d6b5e56 --- /dev/null +++ b/GUI/xephem/descrip.mms @@ -0,0 +1,173 @@ +# Simple Makefile for xephem v3.6 + +# Sample compile and link flags for a few systems. Default is Linux or +# probably any system using gcc with X11 and Motif stuff in /usr/X11R6. +# Otherwise find yours or one that looks like the way Motif applications are +# built on your system. Remove the leading # to uncomment lines. The basic +# idea to build xephem is to first go compile the libraries in ../../libastro, +# ../../libip, ../../liblilxml and ../../libjpegd then come back here and +# compile and link all the *.c files into one executable, xephem. +# Note: some motif libraries now use the printing frame buffer and need -lXp + +# -I and -L flags to find required supporting libraries + +# Adopted by Alex Chupahin alex@rostov.ultrastar.ru + +LIBINC = /INCLUDE=([-.-.libastro],[-.-.libip],[-.-.liblilxml],[-.-.libjpegd],[-.-.libpng],[-.-.libz]) +LIBLIB = [-.-.libastro]libastro/lib, [-.-.libip]libip/lib, [-.-.liblilxml]liblilxml/lib, [-.-.libjpegd]libjpegd/lib, [-.-.libpng]libpng/lib, [-.-.libz]libz/lib, + + + + +CC = cc +#MOTIFI = -I/usr/X11R6/include +#MOTIFL = -L/usr/X11R6/lib +#CLDFLAGS = -ffast-math +CFLAGS = $(LIBINC) +LDFLAGS = +#XLIBS = -lXm -lXp -lXt -lXext -lSM -lICE -lXmu -lX11 +#LIBS = $(XLIBS) $(LIBLIB) -lm + +# MKS Enterprise toolkit +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) -W/subsystem:windows -s +# XLIBS = -lXm -lXt -lX11 +# LIBS = $(XLIBS) $(LIBLIB) -lm + +# SVR4 derivatives: +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) +# XLIBS = -lXm -lXt -lX11 +# LIBS = $(XLIBS) $(LIBLIB) -lsocket -lnsl -lc -lm /usr/ucblib/libucb.a +# Note: if you get regex undefined, add -lgen to the end of LIBS. + +# Solaris: +# Motif stuff might also be in /usr/dt/share/{include,lib}. +# be sure /opt/SUNWspro/bin and /usr/ccs/bin are in your PATH ahead of /usr/ucb. +# CC = cc +# CLDFLAGS = +# MOTIFI = -I/usr/dt/include +# MOTIFL = -L/usr/dt/lib -R/usr/dt/lib +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O $(MOTIFI) -I/usr/openwin/include +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) $(MOTIFL) -L/usr/openwin/lib +# XLIBS = -lXm -lXt -lX11 +# LIBS = $(XLIBS) $(LIBLIB) -lm -lsocket -lnsl + +# HP-UX +# CC = cc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -Aa -fast $(MOTIFI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) $(MOTIFL) + +# AIX +# CC = xlc +# CLDFLAGS = +# CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 $(MOTIFI) +# LDFLAGS = $(LIBLNK) $(CLDFLAGS) $(MOTIFL) + + +INCS = db.h dm.h indiapi.h map.h net.h patchlevel.h plot.h ps.h \ + rotated.h sites.h skyeyep.h skyhist.h skyip.h skylist.h skytoolbar.h \ + trails.h xephem.h + +OBJS = \ +aavso.obj,\ +annotmenu.obj,\ +broadcast.obj,\ +calmenu.obj,\ +closemenu.obj,\ +compiler.obj,\ +coordsmenu.obj,\ +datamenu.obj,\ +db.obj,\ +dbmenu.obj,\ +earthmap.obj,\ +earthmenu.obj,\ +fallbacks.obj,\ +favmenu.obj,\ +formats.obj,\ +fsmenu.obj,\ +gallerymenu.obj,\ +glance.obj,\ +gsc.obj,\ +gscnet.obj,\ +helpmenu.obj,\ +homeio.obj,\ +hznmenu.obj,\ +imregmenu.obj,\ +indimenu.obj,\ +jpeg2pm.obj,\ +jupmenu.obj,\ +listmenu.obj,\ +mainmenu.obj,\ +marsmenu.obj,\ +marsmmenu.obj,\ +moonmenu.obj,\ +moviemenu.obj,\ +msgmenu.obj,\ +netmenu.obj,\ +objmenu.obj,\ +obslog.obj,\ +patchlevel.obj,\ +plot_aux.obj,\ +plotmenu.obj,\ +preferences.obj,\ +progress.obj,\ +ps.obj,\ +query.obj,\ +rotated.obj,\ +satmenu.obj,\ +saveres.obj,\ +scope.obj,\ +sites.obj,\ +skybinary.obj,\ +skyeyep.obj,\ +skyfifos.obj,\ +skyfiltmenu.obj,\ +skyfits.obj,\ +skyhist.obj,\ +skyip.obj,\ +skylist.obj,\ +skytoolbar.obj,\ +skyviewmenu.obj,\ +solsysmenu.obj,\ +splash.obj,\ +srchmenu.obj,\ +sunmenu.obj,\ +time.obj,\ +tips.obj,\ +trailmenu.obj,\ +uranusmenu.obj,\ +ucac.obj,\ +usno.obj,\ +versionmenu.obj,\ +webdbmenu.obj,\ +xe2.obj,\ +xe3.obj,\ +xephem.obj,\ +xmisc.obj + +all : xephem.exe + +xephem.exe : $(INCS) $(OBJS) + link/exe=$@ $(LDFLAGS) $(OBJS),options.opt/opt + +#xephem.1: xephem.man +# nroff -man $? > $@ + +#libs: +# cd ../../libastro; make +# cd ../../libip; make +# cd ../../liblilxml; make +# cd ../../libjpegd; make + +clean : + del *.obj;* + + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: descrip.mms,v $ $Date: 2006/02/08 09:12:15 $ $Revision: 1.5 $ $Name: $ diff --git a/GUI/xephem/dm.h b/GUI/xephem/dm.h new file mode 100644 index 0000000..a8323c5 --- /dev/null +++ b/GUI/xephem/dm.h @@ -0,0 +1,34 @@ +#ifndef _DM_H +#define _DM_H + +/* used by funcs who want to print like datamenu */ + +/* identifiers for each entry in a Data Table column. + * N.B. these must match the order in the col[] array. + */ +typedef enum { + CONSTEL_ID, RA_ID, HA_ID, GHA_ID, DEC_ID, AZ_ID, ALT_ID, ZEN_ID, PA_ID, + JD_ID, HJD_ID, Z_ID, VMAG_ID, + + PMRA_ID, PMDEC_ID, SIZE_ID, PHS_ID, ELONG_ID, SPECT_ID, HLAT_ID, HLONG_ID, + GLAT_ID, GLONG_ID, + + ECLAT_ID, ECLONG_ID, EDST_ID, ELGHT_ID, SDST_ID, SLGHT_ID, URANOM_ID, + URAN2K_ID, MILLSA_ID, + + RSTIME_ID, RSAZ_ID, TRTIME_ID, TRALT_ID, TRAZ_ID, SETTIME_ID, SETAZ_ID, HRSUP_ID, + + SEP_ID, + + NDMCol +} DMCol; + +extern int dm_colHeader (DMCol c, char str[]); +extern int dm_colFormat (Now *np, Obj *op, RiseSet *rp, DMCol c, char *str); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: dm.h,v $ $Date: 2013/01/06 01:27:18 $ $Revision: 1.10 $ $Name: $ + */ + +#endif /* _DM_H */ diff --git a/GUI/xephem/earthmap.c b/GUI/xephem/earthmap.c new file mode 100644 index 0000000..5c42b3e --- /dev/null +++ b/GUI/xephem/earthmap.c @@ -0,0 +1,8367 @@ +/* earthmap.c */ + +#include "map.h" + +/* this data is derived from that provided with xearth in mapdata.c. + * + * the map data from that program claims to be sampled on the order of every 20 + * miles which seems to be true. I have filtered that data way down here using + * an awk script to what I believe is adequate for default use by xephem. If + * you would like to build a version of earthmap.c at different resolutions + * let me know and I will mail you the awk script. + */ + +/* xearth included the following notice: + */ + +/* + * Copyright (C) 1989, 1990, 1993, 1994 Kirk Lauritz Johnson + * + * Permission to use, copy, modify, distribute, and sell this + * software and its documentation for any purpose is hereby granted + * without fee, provided that the above copyright notice appear in + * all copies and that both that copyright notice and this + * permission notice appear in supporting documentation. The author + * makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or + * implied warranty. + * + * THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +static MCoord ec0[] = { + { 3216, 3116}, + { 3185, 3133}, + { 3206, 3139}, + { 3198, 3143}, + { 3080, 3142}, + { 2957, 3099}, + { 2833, 3107}, + { 2709, 3140}, + { 2610, 3159}, + { 2501, 3190}, + { 2373, 3217}, + { 2269, 3275}, + { 2168, 3292}, + { 2071, 3261}, + { 1993, 3174}, + { 1990, 3067}, + { 1874, 3039}, + { 1761, 3099}, + { 1630, 3123}, + { 1537, 3195}, + { 1441, 3257}, + { 1313, 3289}, + { 1179, 3308}, + { 1066, 3361}, + { 1082, 3479}, + { 1072, 3579}, + { 1098, 3699}, + { 989, 3723}, + { 864, 3694}, + { 757, 3701}, + { 657, 3702}, + { 530, 3666}, + { 430, 3690}, + { 324, 3677}, + { 221, 3660}, + { 115, 3650}, + { 22, 3610}, + { -102, 3566}, + { -215, 3509}, + { -344, 3521}, + { -447, 3517}, + { -544, 3587}, + { -625, 3497}, + { -691, 3396}, + { -813, 3342}, + { -913, 3266}, + { -968, 3166}, + { -976, 3057}, + { -1006, 2955}, + { -1100, 2877}, + { -1205, 2810}, + { -1317, 2763}, + { -1374, 2661}, + { -1457, 2583}, + { -1490, 2473}, + { -1579, 2392}, + { -1626, 2287}, + { -1691, 2192}, + { -1669, 2077}, + { -1626, 1984}, + { -1615, 1878}, + { -1605, 1763}, + { -1646, 1655}, + { -1674, 1545}, + { -1693, 1433}, + { -1635, 1336}, + { -1554, 1270}, + { -1661, 1258}, + { -1582, 1195}, + { -1512, 1110}, + { -1440, 1024}, + { -1357, 951}, + { -1311, 861}, + { -1248, 767}, + { -1158, 698}, + { -1073, 630}, + { -976, 561}, + { -884, 490}, + { -779, 442}, + { -673, 470}, + { -561, 507}, + { -447, 519}, + { -332, 518}, + { -231, 490}, + { -123, 511}, + { -17, 554}, + { 101, 590}, + { 206, 629}, + { 322, 639}, + { 430, 638}, + { 521, 574}, + { 557, 469}, + { 660, 440}, + { 759, 458}, + { 880, 457}, + { 967, 392}, + { 988, 281}, + { 967, 164}, + { 963, 62}, + { 921, -48}, + { 938, -160}, + { 989, -247}, + { 1064, -336}, + { 1142, -420}, + { 1207, -507}, + { 1257, -599}, + { 1285, -723}, + { 1334, -829}, + { 1310, -927}, + { 1352, -1034}, + { 1379, -1140}, + { 1345, -1248}, + { 1266, -1328}, + { 1233, -1437}, + { 1202, -1549}, + { 1182, -1653}, + { 1173, -1768}, + { 1227, -1868}, + { 1287, -1968}, + { 1337, -2073}, + { 1397, -2174}, + { 1453, -2274}, + { 1449, -2389}, + { 1482, -2498}, + { 1496, -2611}, + { 1527, -2719}, + { 1594, -2818}, + { 1678, -2905}, + { 1721, -3015}, + { 1780, -3119}, + { 1833, -3223}, + { 1809, -3323}, + { 1848, -3420}, + { 1955, -3469}, + { 2079, -3442}, + { 2181, -3434}, + { 2304, -3406}, + { 2407, -3404}, + { 2539, -3400}, + { 2655, -3372}, + { 2773, -3312}, + { 2876, -3236}, + { 2968, -3152}, + { 3053, -3063}, + { 3116, -2961}, + { 3206, -2880}, + { 3261, -2778}, + { 3290, -2666}, + { 3299, -2546}, + { 3413, -2497}, + { 3524, -2444}, + { 3546, -2336}, + { 3553, -2224}, + { 3508, -2115}, + { 3474, -2011}, + { 3545, -1939}, + { 3637, -1871}, + { 3717, -1778}, + { 3817, -1723}, + { 3931, -1675}, + { 4012, -1598}, + { 4068, -1503}, + { 4058, -1378}, + { 4058, -1266}, + { 4045, -1150}, + { 4044, -1039}, + { 3971, -962}, + { 3933, -852}, + { 3932, -744}, + { 3893, -640}, + { 3906, -525}, + { 3959, -425}, + { 4005, -328}, + { 4072, -247}, + { 4151, -172}, + { 4215, -78}, + { 4295, 6}, + { 4376, 89}, + { 4465, 162}, + { 4564, 220}, + { 4653, 293}, + { 4733, 377}, + { 4807, 466}, + { 4872, 562}, + { 4918, 667}, + { 4977, 766}, + { 5035, 864}, + { 5083, 969}, + { 5112, 1082}, + { 5116, 1186}, + { 5013, 1154}, + { 4900, 1126}, + { 4785, 1112}, + { 4678, 1083}, + { 4568, 1081}, + { 4460, 1043}, + { 4364, 1103}, + { 4273, 1155}, + { 4335, 1237}, + { 4255, 1317}, + { 4173, 1394}, + { 4087, 1470}, + { 4004, 1530}, + { 3929, 1597}, + { 3903, 1710}, + { 3851, 1811}, + { 3755, 1876}, + { 3725, 1986}, + { 3710, 2101}, + { 3681, 2212}, + { 3581, 2282}, + { 3554, 2388}, + { 3494, 2499}, + { 3434, 2602}, + { 3388, 2708}, + { 3333, 2808}, + { 3264, 2905}, + { 3349, 2834}, + { 3455, 2860}, + { 3532, 2786}, + { 3599, 2688}, + { 3664, 2592}, + { 3720, 2492}, + { 3793, 2416}, + { 3872, 2326}, + { 3905, 2219}, + { 3921, 2108}, + { 3999, 2027}, + { 4088, 1951}, + { 4142, 1845}, + { 4216, 1756}, + { 4274, 1658}, + { 4277, 1546}, + { 4302, 1439}, + { 4327, 1322}, + { 4417, 1263}, + { 4520, 1299}, + { 4626, 1341}, + { 4741, 1367}, + { 4848, 1402}, + { 4943, 1467}, + { 5055, 1503}, + { 5168, 1538}, + { 5230, 1625}, + { 5338, 1673}, + { 5453, 1703}, + { 5548, 1783}, + { 5657, 1822}, + { 5738, 1893}, + { 5781, 1999}, + { 5867, 2074}, + { 5943, 2159}, + { 5940, 2269}, + { 5865, 2358}, + { 5742, 2386}, + { 5653, 2463}, + { 5632, 2574}, + { 5531, 2526}, + { 5450, 2447}, + { 5337, 2410}, + { 5220, 2398}, + { 5137, 2462}, + { 5156, 2577}, + { 5081, 2501}, + { 5007, 2595}, + { 4963, 2705}, + { 4882, 2782}, + { 4825, 2889}, + { 4804, 3002}, + { 4900, 3046}, + { 5000, 3017}, + { 5071, 2919}, + { 5128, 2817}, + { 5236, 2765}, + { 5337, 2699}, + { 5449, 2658}, + { 5561, 2692}, + { 5683, 2707}, + { 5721, 2603}, + { 5832, 2558}, + { 5953, 2544}, + { 6078, 2524}, + { 6198, 2511}, + { 6313, 2524}, + { 6437, 2527}, + { 6561, 2536}, + { 6671, 2514}, + { 6743, 2406}, + { 6839, 2366}, + { 6928, 2283}, + { 7040, 2294}, + { 6954, 2238}, + { 6984, 2140}, + { 7082, 2071}, + { 7196, 2113}, + { 7226, 2222}, + { 7274, 2110}, + { 7269, 2000}, + { 7292, 1898}, + { 7307, 1784}, + { 7332, 1668}, + { 7374, 1564}, + { 7429, 1461}, + { 7469, 1360}, + { 7500, 1245}, + { 7563, 1149}, + { 7608, 1042}, + { 7636, 935}, + { 7699, 839}, + { 7801, 836}, + { 7870, 918}, + { 7925, 1009}, + { 7985, 1100}, + { 7994, 1215}, + { 8032, 1319}, + { 8011, 1420}, + { 8011, 1532}, + { 8100, 1591}, + { 8203, 1643}, + { 8263, 1729}, + { 8355, 1798}, + { 8449, 1872}, + { 8532, 1956}, + { 8627, 2000}, + { 8696, 2075}, + { 8776, 2169}, + { 8881, 2165}, + { 8985, 2203}, + { 9051, 2289}, + { 8987, 2367}, + { 9078, 2291}, + { 9178, 2230}, + { 9205, 2120}, + { 9272, 2042}, + { 9367, 1981}, + { 9413, 1882}, + { 9452, 1777}, + { 9435, 1663}, + { 9525, 1589}, + { 9627, 1650}, + { 9695, 1730}, + { 9766, 1645}, + { 9777, 1526}, + { 9808, 1414}, + { 9859, 1304}, + { 9865, 1189}, + { 9855, 1077}, + { 9850, 963}, + { 9822, 851}, + { 9903, 784}, + { 9970, 699}, + { 10032, 606}, + { 10047, 493}, + { 10078, 393}, + { 10133, 291}, + { 10223, 220}, + { 10321, 161}, + { 10427, 150}, + { 10379, 258}, + { 10342, 357}, + { 10345, 471}, + { 10280, 563}, + { 10195, 635}, + { 10103, 687}, + { 10017, 758}, + { 9995, 871}, + { 9920, 961}, + { 9936, 1070}, + { 9979, 1178}, + { 10002, 1287}, + { 10093, 1341}, + { 10158, 1265}, + { 10257, 1214}, + { 10310, 1123}, + { 10391, 1060}, + { 10496, 1008}, + { 10481, 906}, + { 10583, 924}, + { 10658, 993}, + { 10762, 1058}, + { 10862, 1117}, + { 10920, 1228}, + { 10929, 1329}, + { 10913, 1441}, + { 10873, 1543}, + { 10796, 1630}, + { 10707, 1709}, + { 10640, 1807}, + { 10566, 1890}, + { 10606, 1997}, + { 10674, 2082}, + { 10781, 2147}, + { 10882, 2171}, + { 10986, 2138}, + { 10999, 2033}, + { 11038, 2128}, + { 11154, 2155}, + { 11267, 2185}, + { 11352, 2261}, + { 11456, 2263}, + { 11577, 2284}, + { 11666, 2332}, + { 11774, 2399}, + { 11854, 2461}, + { 11924, 2551}, + { 11975, 2642}, + { 12037, 2726}, + { 12100, 2809}, + { 12161, 2888}, + { 12197, 2990}, + { 12076, 3011}, + { 12160, 3084}, + { 12087, 3176}, + { 11972, 3218}, + { 12094, 3190}, + { 12088, 3291}, + { 12038, 3398}, + { 11936, 3473}, + { 11998, 3576}, + { 12077, 3639}, + { 12201, 3695}, + { 12113, 3765}, + { 11992, 3735}, + { 11904, 3782}, + { 11783, 3827}, + { 11876, 3918}, + { 11971, 3994}, + { 12061, 4042}, + { 12185, 4087}, + { 12150, 3972}, + { 12265, 3950}, + { 12366, 3983}, + { 12472, 3969}, + { 12536, 3873}, + { 12615, 3782}, + { 12683, 3691}, + { 12674, 3590}, + { 12650, 3479}, + { 12752, 3476}, + { 12867, 3512}, + { 12954, 3587}, + { 12942, 3697}, + { 12876, 3798}, + { 12795, 3892}, + { 12800, 3999}, + { 12897, 4043}, + { 12976, 4130}, + { 13038, 4226}, + { 13129, 4273}, + { 13232, 4318}, + { 13361, 4283}, + { 13463, 4326}, + { 13547, 4386}, + { 13639, 4477}, + { 13719, 4543}, + { 13797, 4611}, + { 13870, 4714}, + { 13967, 4809}, + { 14032, 4907}, + { 14057, 5017}, + { 14078, 5134}, + { 14135, 5226}, + { 14123, 5333}, + { 14025, 5397}, + { 13907, 5422}, + { 13787, 5358}, + { 13670, 5390}, + { 13563, 5464}, + { 13628, 5544}, + { 13742, 5599}, + { 13833, 5671}, + { 13943, 5733}, + { 14053, 5794}, + { 14152, 5860}, + { 14263, 5924}, + { 14371, 5938}, + { 14479, 5938}, + { 14586, 5932}, + { 14716, 5933}, + { 14825, 5937}, + { 14931, 5973}, + { 15039, 5961}, + { 15147, 5952}, + { 15286, 5897}, + { 15437, 5915}, + { 15496, 6035}, + { 15610, 6101}, + { 15722, 6170}, + { 15833, 6180}, + { 15942, 6181}, + { 16014, 6097}, + { 16131, 6109}, + { 16270, 6165}, + { 16337, 6254}, + { 16459, 6265}, + { 16392, 6165}, + { 16309, 6076}, + { 16199, 6041}, + { 16102, 5973}, + { 15983, 5910}, + { 15894, 5838}, + { 15761, 5793}, + { 15667, 5711}, + { 15586, 5641}, + { 15556, 5527}, + { 15584, 5412}, + { 15610, 5298}, + { 15649, 5185}, + { 15733, 5129}, + { 15825, 5195}, + { 15863, 5297}, + { 15971, 5323}, + { 16037, 5434}, + { 16171, 5454}, + { 16175, 5559}, + { 16249, 5634}, + { 16305, 5752}, + { 16197, 5806}, + { 16271, 5884}, + { 16356, 5988}, + { 16456, 6001}, + { 16582, 6032}, + { 16712, 6036}, + { 16819, 6057}, + { 16931, 6055}, + { 17038, 6002}, + { 17147, 6073}, + { 17267, 6126}, + { 17404, 6176}, + { 17522, 6207}, + { 17622, 6232}, + { 17725, 6276}, + { 17822, 6250}, + { 17952, 6266}, + { 17863, 6358}, + { 17743, 6448}, + { 17644, 6463}, + { 17529, 6474}, + { 17655, 6485}, + { 17778, 6472}, + { 17906, 6475}, + {-17987, 6512}, + {-17954, 6615}, + {-17853, 6566}, + {-17748, 6551}, + {-17616, 6547}, + {-17514, 6480}, + {-17402, 6447}, + {-17273, 6457}, + {-17237, 6551}, + {-17122, 6562}, + {-17020, 6598}, + {-17148, 6676}, + {-17274, 6699}, + {-17422, 6710}, + {-17521, 6748}, + {-17630, 6794}, + {-17753, 6826}, + {-17867, 6863}, + {-17970, 6893}, + { 17564, 6906}, + { 17455, 6940}, + { 17282, 6966}, + { 17128, 6987}, + { 17048, 6882}, + { 16915, 6911}, + { 16814, 6955}, + { 16682, 6952}, + { 16517, 6959}, + { 16369, 6971}, + { 16212, 6960}, + { 16141, 6881}, + { 16071, 6963}, + { 15981, 7058}, + { 15853, 7096}, + { 15680, 7109}, + { 15518, 7103}, + { 15341, 7086}, + { 15193, 7101}, + { 15068, 7134}, + { 14922, 7178}, + { 14746, 7232}, + { 14630, 7189}, + { 14512, 7183}, + { 14622, 7196}, + { 14475, 7230}, + { 14624, 7234}, + { 14455, 7262}, + { 14263, 7270}, + { 14089, 7277}, + { 13968, 7247}, + { 13906, 7151}, + { 13803, 7131}, + { 13679, 7148}, + { 13523, 7154}, + { 13356, 7146}, + { 13249, 7180}, + { 13150, 7088}, + { 13017, 7101}, + { 12923, 7151}, + { 12827, 7208}, + { 12691, 7230}, + { 12568, 7236}, + { 12412, 7270}, + { 12224, 7288}, + { 12042, 7298}, + { 11858, 7320}, + { 11737, 7359}, + { 11637, 7366}, + { 11533, 7368}, + { 11372, 7340}, + { 11177, 7376}, + { 10998, 7395}, + { 10871, 7333}, + { 10682, 7316}, + { 10559, 7281}, + { 10652, 7333}, + { 10806, 7367}, + { 10947, 7410}, + { 11074, 7453}, + { 11246, 7491}, + { 11361, 7542}, + { 11294, 7618}, + { 11131, 7668}, + { 11017, 7672}, + { 10886, 7673}, + { 10678, 7660}, + { 10576, 7705}, + { 10433, 7768}, + { 10302, 7758}, + { 10132, 7710}, + { 10001, 7648}, + { 9976, 7538}, + { 9857, 7618}, + { 9745, 7600}, + { 9639, 7594}, + { 9524, 7614}, + { 9414, 7609}, + { 9230, 7575}, + { 9124, 7565}, + { 9011, 7556}, + { 8837, 7522}, + { 8698, 7475}, + { 8741, 7380}, + { 8598, 7341}, + { 8431, 7372}, + { 8329, 7366}, + { 8225, 7366}, + { 8122, 7361}, + { 8072, 7263}, + { 8208, 7226}, + { 8326, 7182}, + { 8361, 7072}, + { 8230, 7056}, + { 8314, 7163}, + { 8158, 7174}, + { 8035, 7216}, + { 7861, 7238}, + { 7691, 7201}, + { 7781, 7131}, + { 7638, 7121}, + { 7541, 7153}, + { 7551, 7266}, + { 7416, 7194}, + { 7320, 7145}, + { 7428, 7065}, + { 7361, 6982}, + { 7504, 6913}, + { 7657, 6913}, + { 7771, 6878}, + { 7772, 6774}, + { 7706, 6862}, + { 7596, 6895}, + { 7453, 6869}, + { 7448, 6758}, + { 7344, 6684}, + { 7239, 6648}, + { 7128, 6635}, + { 6987, 6643}, + { 7143, 6672}, + { 7247, 6746}, + { 7319, 6823}, + { 7255, 6927}, + { 7265, 7040}, + { 7193, 7148}, + { 7281, 7230}, + { 7130, 7290}, + { 7029, 7289}, + { 6893, 7258}, + { 6832, 7172}, + { 6708, 7130}, + { 6716, 7029}, + { 6797, 6949}, + { 6906, 6886}, + { 6764, 6856}, + { 6640, 6895}, + { 6494, 6925}, + { 6370, 6962}, + { 6209, 6975}, + { 6062, 6974}, + { 6037, 6872}, + { 5909, 6854}, + { 5744, 6864}, + { 5596, 6861}, + { 5471, 6826}, + { 5358, 6835}, + { 5254, 6854}, + { 5143, 6842}, + { 5002, 6809}, + { 4884, 6777}, + { 4787, 6745}, + { 4674, 6682}, + { 4569, 6705}, + { 4664, 6794}, + { 4517, 6857}, + { 4369, 6854}, + { 4383, 6726}, + { 4411, 6622}, + { 4299, 6641}, + { 4169, 6621}, + { 4057, 6588}, + { 4033, 6464}, + { 3889, 6474}, + { 3772, 6501}, + { 3659, 6491}, + { 3785, 6434}, + { 3674, 6393}, + { 3580, 6431}, + { 3487, 6468}, + { 3481, 6576}, + { 3355, 6638}, + { 3229, 6706}, + { 3345, 6679}, + { 3459, 6660}, + { 3598, 6634}, + { 3736, 6620}, + { 3871, 6607}, + { 4004, 6629}, + { 4100, 6672}, + { 4067, 6776}, + { 3968, 6810}, + { 3845, 6838}, + { 3715, 6885}, + { 3584, 6918}, + { 3428, 6931}, + { 3328, 6917}, + { 3232, 6952}, + { 3050, 6978}, + { 2923, 7002}, + { 3085, 7029}, + { 2915, 7078}, + { 2817, 7024}, + { 2743, 7095}, + { 2643, 7083}, + { 2543, 7026}, + { 2447, 7073}, + { 2342, 7024}, + { 2166, 7024}, + { 2060, 6970}, + { 1937, 6974}, + { 1831, 6932}, + { 1679, 6862}, + { 1573, 6813}, + { 1475, 6741}, + { 1374, 6685}, + { 1294, 6605}, + { 1216, 6505}, + { 1112, 6447}, + { 996, 6392}, + { 1130, 6396}, + { 1018, 6337}, + { 912, 6340}, + { 805, 6298}, + { 667, 6261}, + { 552, 6212}, + { 522, 6115}, + { 645, 6119}, + { 746, 6129}, + { 605, 6109}, + { 525, 6029}, + { 626, 6040}, + { 553, 5963}, + { 595, 5843}, + { 725, 5802}, + { 867, 5839}, + { 976, 5902}, + { 1064, 5978}, + { 1123, 5868}, + { 1185, 5762}, + { 1252, 5684}, + { 1296, 5575}, + { 1396, 5541}, + { 1499, 5616}, + { 1617, 5651}, + { 1661, 5762}, + { 1648, 5862}, + { 1749, 5885}, + { 1840, 5936}, + { 1720, 5933}, + { 1843, 5950}, + { 1766, 6058}, + { 1723, 6163}, + { 1796, 6263}, + { 1894, 6324}, + { 2002, 6362}, + { 2123, 6428}, + { 2156, 6533}, + { 2268, 6582}, + { 2406, 6579}, + { 2524, 6550}, + { 2428, 6452}, + { 2309, 6383}, + { 2191, 6321}, + { 2113, 6253}, + { 2154, 6147}, + { 2202, 6046}, + { 2299, 6019}, + { 2427, 6003}, + { 2585, 6033}, + { 2740, 6051}, + { 2857, 6058}, + { 2989, 6010}, + { 2873, 5982}, + { 2734, 5944}, + { 2624, 5958}, + { 2516, 5951}, + { 2412, 5935}, + { 2378, 5838}, + { 2439, 5743}, + { 2333, 5710}, + { 2238, 5770}, + { 2138, 5706}, + { 2106, 5595}, + { 2101, 5491}, + { 1995, 5484}, + { 1888, 5436}, + { 1781, 5481}, + { 1645, 5448}, + { 1514, 5411}, + { 1394, 5399}, + { 1286, 5438}, + { 1156, 5404}, + { 1029, 5439}, + { 959, 5523}, + { 1048, 5619}, + { 1051, 5726}, + { 912, 5714}, + { 816, 5644}, + { 859, 5514}, + { 897, 5399}, + { 769, 5370}, + { 662, 5344}, + { 535, 5311}, + { 442, 5224}, + { 369, 5148}, + { 255, 5110}, + { 158, 5061}, + { 68, 4986}, + { -20, 4931}, + { -135, 4964}, + { -199, 4862}, + { -311, 4881}, + { -439, 4864}, + { -373, 4780}, + { -264, 4753}, + { -186, 4662}, + { -109, 4599}, + { -61, 4506}, + { -128, 4428}, + { -197, 4335}, + { -311, 4339}, + { -433, 4341}, + { -547, 4356}, + { -668, 4358}, + { -780, 4374}, + { -884, 4330}, + { -876, 4225}, + { -866, 4110}, + { -893, 3996}, + { -944, 3894}, + { -883, 3807}, + { -883, 3706}, + { -773, 3705}, + { -650, 3696}, + { -570, 3606}, + { -455, 3658}, + { -354, 3672}, + { -251, 3681}, + { -146, 3748}, + { -57, 3822}, + { -29, 3933}, + { 36, 4031}, + { 133, 4113}, + { 236, 4149}, + { 323, 4201}, + { 317, 4312}, + { 410, 4355}, + { 513, 4343}, + { 622, 4310}, + { 717, 4363}, + { 820, 4403}, + { 918, 4434}, + { 1019, 4391}, + { 1067, 4290}, + { 1154, 4233}, + { 1233, 4170}, + { 1325, 4127}, + { 1445, 4065}, + { 1554, 4003}, + { 1612, 3902}, + { 1565, 3806}, + { 1656, 3853}, + { 1709, 3938}, + { 1707, 4049}, + { 1814, 3988}, + { 1761, 4078}, + { 1663, 4120}, + { 1564, 4192}, + { 1461, 4220}, + { 1381, 4316}, + { 1278, 4397}, + { 1241, 4495}, + { 1317, 4572}, + { 1400, 4490}, + { 1503, 4457}, + { 1583, 4371}, + { 1687, 4338}, + { 1776, 4280}, + { 1869, 4237}, + { 1957, 4172}, + { 1939, 4058}, + { 2009, 3964}, + { 2098, 3894}, + { 2203, 3838}, + { 2166, 3737}, + { 2249, 3656}, + { 2290, 3752}, + { 2404, 3779}, + { 2320, 3865}, + { 2279, 3984}, + { 2382, 4005}, + { 2457, 4091}, + { 2561, 4087}, + { 2664, 4063}, + { 2761, 4098}, + { 2867, 4100}, + { 2800, 4194}, + { 2794, 4314}, + { 2865, 4410}, + { 2955, 4486}, + { 3000, 4576}, + { 3085, 4653}, + { 3191, 4678}, + { 3276, 4611}, + { 3350, 4511}, + { 3452, 4472}, + { 3557, 4507}, + { 3486, 4598}, + { 3608, 4665}, + { 3725, 4691}, + { 3842, 4716}, + { 3838, 4608}, + { 3759, 4533}, + { 3844, 4435}, + { 3939, 4384}, + { 4027, 4324}, + { 4123, 4280}, + { 4173, 4176}, + { 4090, 4120}, + { 3981, 4098}, + { 3868, 4096}, + { 3761, 4108}, + { 3656, 4131}, + { 3530, 4173}, + { 3408, 4197}, + { 3293, 4189}, + { 3190, 4151}, + { 3095, 4108}, + { 2982, 4115}, + { 2894, 4046}, + { 2783, 4043}, + { 2673, 4036}, + { 2624, 3948}, + { 2682, 3864}, + { 2715, 3766}, + { 2811, 3703}, + { 2909, 3654}, + { 3029, 3627}, + { 3113, 3683}, + { 3210, 3647}, + { 3330, 3613}, + { 3449, 3671}, + { 3548, 3659}, + { 3581, 3552}, + { 3584, 3444}, + { 3527, 3341}, + { 3484, 3232}, + { 3421, 3133}, + { 3297, 3110}, +}; + +static MCoord ec1[] = { + {-12813, 5274}, + {-12826, 5241}, + {-12806, 5249}, + {-12791, 5239}, + {-12681, 5222}, + {-12769, 5162}, + {-12691, 5091}, + {-12562, 5091}, + {-12454, 5043}, + {-12375, 4971}, + {-12290, 4901}, + {-12227, 4799}, + {-12286, 4715}, + {-12318, 4814}, + {-12454, 4834}, + {-12423, 4730}, + {-12348, 4624}, + {-12396, 4515}, + {-12411, 4400}, + {-12449, 4287}, + {-12416, 4176}, + {-12426, 4067}, + {-12376, 3961}, + {-12328, 3857}, + {-12241, 3803}, + {-12201, 3698}, + {-12153, 3604}, + {-12067, 3514}, + {-11988, 3444}, + {-11861, 3404}, + {-11755, 3339}, + {-11703, 3234}, + {-11641, 3132}, + {-11583, 3030}, + {-11508, 2942}, + {-11415, 2862}, + {-11491, 2783}, + {-11417, 2713}, + {-11304, 2662}, + {-11211, 2571}, + {-11174, 2456}, + {-11075, 2386}, + {-11002, 2295}, + {-10993, 2409}, + {-11068, 2476}, + {-11126, 2577}, + {-11176, 2673}, + {-11242, 2758}, + {-11306, 2850}, + {-11383, 2945}, + {-11463, 3032}, + {-11485, 3144}, + {-11378, 3156}, + {-11308, 3079}, + {-11257, 2973}, + {-11189, 2876}, + {-11094, 2792}, + {-11025, 2716}, + {-10923, 2643}, + {-10865, 2536}, + {-10769, 2449}, + {-10688, 2382}, + {-10608, 2291}, + {-10559, 2193}, + {-10543, 2087}, + {-10532, 1976}, + {-10436, 1907}, + {-10345, 1834}, + {-10231, 1797}, + {-10129, 1747}, + {-10020, 1698}, + { -9907, 1660}, + { -9796, 1610}, + { -9685, 1575}, + { -9570, 1590}, + { -9469, 1628}, + { -9363, 1582}, + { -9274, 1506}, + { -9188, 1427}, + { -9078, 1393}, + { -8970, 1353}, + { -8865, 1324}, + { -8748, 1335}, + { -8688, 1227}, + { -8609, 1144}, + { -8576, 1050}, + { -8516, 966}, + { -8418, 943}, + { -8338, 841}, + { -8236, 831}, + { -8147, 772}, + { -8055, 724}, + { -8038, 825}, + { -7950, 895}, + { -7845, 850}, + { -7814, 752}, + { -7742, 664}, + { -7742, 558}, + { -7733, 448}, + { -7730, 347}, + { -7791, 258}, + { -7894, 171}, + { -7980, 91}, + { -8021, -9}, + { -8085, -101}, + { -8088, -215}, + { -7987, -243}, + { -8027, -335}, + { -8112, -413}, + { -8115, -521}, + { -8078, -629}, + { -7985, -695}, + { -7927, -794}, + { -7867, -892}, + { -7821, -996}, + { -7767, -1097}, + { -7713, -1199}, + { -7650, -1294}, + { -7631, -1393}, + { -7562, -1484}, + { -7475, -1559}, + { -7373, -1618}, + { -7264, -1665}, + { -7161, -1724}, + { -7080, -1805}, + { -7029, -1901}, + { -7013, -2015}, + { -7007, -2130}, + { -7024, -2244}, + { -7053, -2345}, + { -7055, -2454}, + { -7065, -2562}, + { -7076, -2676}, + { -7109, -2784}, + { -7148, -2893}, + { -7137, -3005}, + { -7164, -3111}, + { -7148, -3226}, + { -7168, -3335}, + { -7202, -3444}, + { -7255, -3550}, + { -7301, -3661}, + { -7363, -3748}, + { -7346, -3865}, + { -7336, -3971}, + { -7388, -4075}, + { -7330, -4177}, + { -7244, -4230}, + { -7306, -4336}, + { -7276, -4440}, + { -7309, -4535}, + { -7379, -4648}, + { -7476, -4607}, + { -7553, -4675}, + { -7427, -4681}, + { -7366, -4773}, + { -7418, -4860}, + { -7382, -4963}, + { -7408, -5073}, + { -7368, -5168}, + { -7252, -5185}, + { -7355, -5212}, + { -7244, -5255}, + { -7136, -5279}, + { -7238, -5340}, + { -7118, -5383}, + { -7070, -5273}, + { -6951, -5236}, + { -6901, -5140}, + { -6893, -5039}, + { -6788, -4996}, + { -6739, -4889}, + { -6640, -4833}, + { -6575, -4749}, + { -6689, -4690}, + { -6752, -4593}, + { -6649, -4511}, + { -6537, -4450}, + { -6509, -4341}, + { -6456, -4252}, + { -6506, -4138}, + { -6408, -4101}, + { -6298, -4111}, + { -6241, -4024}, + { -6227, -3921}, + { -6123, -3898}, + { -6013, -3887}, + { -5904, -3867}, + { -5801, -3836}, + { -5713, -3750}, + { -5671, -3641}, + { -5718, -3533}, + { -5830, -3465}, + { -5853, -3363}, + { -5820, -3258}, + { -5842, -3365}, + { -5763, -3445}, + { -5638, -3482}, + { -5536, -3483}, + { -5432, -3466}, + { -5348, -3388}, + { -5258, -3303}, + { -5218, -3197}, + { -5149, -3102}, + { -5071, -3033}, + { -5116, -3124}, + { -5196, -3194}, + { -5099, -3133}, + { -5026, -3037}, + { -4970, -2932}, + { -4880, -2846}, + { -4859, -2738}, + { -4871, -2620}, + { -4797, -2514}, + { -4709, -2446}, + { -4606, -2382}, + { -4496, -2340}, + { -4385, -2299}, + { -4280, -2296}, + { -4189, -2248}, + { -4099, -2183}, + { -4063, -2079}, + { -4002, -1980}, + { -3973, -1875}, + { -3919, -1775}, + { -3908, -1661}, + { -3895, -1548}, + { -3899, -1433}, + { -3892, -1325}, + { -3806, -1264}, + { -3743, -1157}, + { -3681, -1071}, + { -3596, -995}, + { -3522, -906}, + { -3485, -798}, + { -3489, -686}, + { -3518, -574}, + { -3597, -506}, + { -3709, -491}, + { -3801, -423}, + { -3888, -349}, + { -3988, -290}, + { -4102, -288}, + { -4216, -280}, + { -4323, -238}, + { -4425, -249}, + { -4495, -153}, + { -4590, -119}, + { -4691, -79}, + { -4804, -74}, + { -4887, -169}, + { -4955, -261}, + { -5036, -197}, + { -5086, -107}, + { -5195, -158}, + { -5155, -57}, + { -5076, 21}, + { -4999, 107}, + { -5068, 210}, + { -5101, 316}, + { -5144, 428}, + { -5229, 485}, + { -5323, 552}, + { -5443, 592}, + { -5557, 597}, + { -5664, 596}, + { -5758, 640}, + { -5857, 655}, + { -5864, 756}, + { -5958, 827}, + { -6057, 856}, + { -6093, 950}, + { -6211, 987}, + { -6282, 1072}, + { -6413, 1061}, + { -6510, 1007}, + { -6610, 1055}, + { -6724, 1055}, + { -6829, 1076}, + { -6902, 1146}, + { -6984, 1203}, + { -7051, 1126}, + { -7151, 1073}, + { -7105, 968}, + { -7206, 988}, + { -7168, 1093}, + { -7114, 1207}, + { -7224, 1192}, + { -7325, 1133}, + { -7424, 1106}, + { -7522, 1078}, + { -7564, 975}, + { -7631, 897}, + { -7676, 801}, + { -7767, 888}, + { -7867, 943}, + { -7979, 941}, + { -8081, 891}, + { -8192, 894}, + { -8272, 966}, + { -8347, 1052}, + { -8373, 1154}, + { -8363, 1265}, + { -8349, 1367}, + { -8333, 1475}, + { -8404, 1564}, + { -8515, 1592}, + { -8629, 1581}, + { -8751, 1585}, + { -8857, 1583}, + { -8824, 1692}, + { -8811, 1805}, + { -8761, 1893}, + { -8745, 1998}, + { -8683, 2095}, + { -8773, 2153}, + { -8894, 2140}, + { -9013, 2113}, + { -9047, 2008}, + { -9100, 1912}, + { -9182, 1849}, + { -9284, 1849}, + { -9401, 1825}, + { -9503, 1860}, + { -9603, 1909}, + { -9662, 2009}, + { -9731, 2103}, + { -9774, 2211}, + { -9775, 2326}, + { -9766, 2442}, + { -9725, 2551}, + { -9743, 2656}, + { -9737, 2778}, + { -9649, 2864}, + { -9541, 2886}, + { -9485, 2972}, + { -9378, 2981}, + { -9278, 2964}, + { -9161, 2966}, + { -9053, 2926}, + { -8930, 2906}, + { -8973, 3006}, + { -8867, 3037}, + { -8746, 3035}, + { -8631, 3044}, + { -8534, 2977}, + { -8412, 3009}, + { -8315, 2933}, + { -8269, 2838}, + { -8255, 2732}, + { -8190, 2646}, + { -8120, 2553}, + { -8013, 2586}, + { -8010, 2701}, + { -8059, 2809}, + { -8099, 2922}, + { -8138, 3032}, + { -8130, 3141}, + { -8079, 3239}, + { -7967, 3286}, + { -7882, 3373}, + { -7775, 3428}, + { -7649, 3488}, + { -7576, 3582}, + { -7598, 3685}, + { -7705, 3727}, + { -7721, 3839}, + { -7648, 3914}, + { -7584, 3818}, + { -7542, 3925}, + { -7438, 3947}, + { -7409, 4045}, + { -7314, 4117}, + { -7202, 4132}, + { -7069, 4164}, + { -7079, 4280}, + { -6994, 4381}, + { -6887, 4446}, + { -6772, 4456}, + { -6661, 4510}, + { -6552, 4535}, + { -6465, 4594}, + { -6357, 4537}, + { -6469, 4518}, + { -6568, 4467}, + { -6567, 4356}, + { -6472, 4397}, + { -6379, 4451}, + { -6268, 4479}, + { -6162, 4513}, + { -6247, 4566}, + { -6365, 4586}, + { -6458, 4633}, + { -6491, 4741}, + { -6608, 4795}, + { -6489, 4817}, + { -6489, 4919}, + { -6620, 4920}, + { -6743, 4888}, + { -6857, 4845}, + { -6953, 4788}, + { -7030, 4719}, + { -6981, 4811}, + { -7079, 4839}, + { -6973, 4819}, + { -6888, 4884}, + { -6779, 4930}, + { -6661, 5012}, + { -6541, 5030}, + { -6405, 5029}, + { -6273, 5029}, + { -6146, 5016}, + { -6014, 5025}, + { -5908, 5080}, + { -5811, 5132}, + { -5681, 5152}, + { -5576, 5212}, + { -5586, 5331}, + { -5725, 5358}, + { -5820, 5421}, + { -5933, 5364}, + { -6062, 5369}, + { -5931, 5389}, + { -5810, 5434}, + { -5915, 5510}, + { -6032, 5516}, + { -6135, 5604}, + { -6230, 5678}, + { -6218, 5789}, + { -6327, 5840}, + { -6383, 5938}, + { -6456, 6008}, + { -6551, 5933}, + { -6641, 5875}, + { -6764, 5807}, + { -6905, 5789}, + { -6835, 5870}, + { -6989, 5871}, + { -6964, 5984}, + { -7073, 6002}, + { -6968, 6012}, + { -7032, 6104}, + { -7148, 6119}, + { -7236, 6184}, + { -7351, 6240}, + { -7463, 6220}, + { -7576, 6226}, + { -7696, 6252}, + { -7805, 6233}, + { -7774, 6122}, + { -7753, 6019}, + { -7799, 5923}, + { -7744, 5817}, + { -7667, 5743}, + { -7655, 5628}, + { -7732, 5553}, + { -7851, 5500}, + { -7956, 5471}, + { -7902, 5373}, + { -7869, 5260}, + { -7886, 5140}, + { -7997, 5123}, + { -8085, 5189}, + { -8184, 5264}, + { -8216, 5369}, + { -8223, 5481}, + { -8346, 5522}, + { -8474, 5526}, + { -8592, 5567}, + { -8741, 5600}, + { -8842, 5660}, + { -8981, 5698}, + { -9128, 5721}, + { -9247, 5699}, + { -9282, 5808}, + { -9369, 5876}, + { -9480, 5904}, + { -9470, 6018}, + { -9413, 6102}, + { -9343, 6180}, + { -9262, 6246}, + { -9144, 6282}, + { -9220, 6363}, + { -9331, 6388}, + { -9215, 6379}, + { -9103, 6360}, + { -9005, 6390}, + { -8887, 6401}, + { -8762, 6458}, + { -8879, 6532}, + { -8973, 6571}, + { -9113, 6589}, + { -8961, 6590}, + { -8851, 6556}, + { -8727, 6537}, + { -8602, 6608}, + { -8461, 6627}, + { -8358, 6642}, + { -8244, 6665}, + { -8130, 6736}, + { -8213, 6814}, + { -8145, 6910}, + { -8287, 6950}, + { -8429, 6982}, + { -8547, 6961}, + { -8576, 6835}, + { -8654, 6746}, + { -8762, 6742}, + { -8783, 6843}, + { -8904, 6920}, + { -9012, 6839}, + { -9100, 6923}, + { -9250, 6967}, + { -9290, 7089}, + { -9400, 7172}, + { -9562, 7161}, + { -9652, 7094}, + { -9599, 6984}, + { -9464, 6959}, + { -9356, 6931}, + { -9452, 6886}, + { -9513, 6806}, + { -9529, 6703}, + { -9628, 6752}, + { -9755, 6845}, + { -9844, 6799}, + { -9992, 6782}, + {-10145, 6772}, + {-10291, 6788}, + {-10438, 6806}, + {-10540, 6846}, + {-10692, 6878}, + {-10836, 6855}, + {-10709, 6833}, + {-10766, 6747}, + {-10893, 6748}, + {-10996, 6790}, + {-11128, 6777}, + {-11278, 6767}, + {-11430, 6775}, + {-11503, 6885}, + {-11651, 6887}, + {-11804, 6903}, + {-11946, 6931}, + {-12082, 6961}, + {-12234, 6981}, + {-12337, 6945}, + {-12444, 7002}, + {-12535, 6946}, + {-12656, 6970}, + {-12781, 7050}, + {-12895, 6983}, + {-13038, 6963}, + {-13189, 6934}, + {-13313, 6880}, + {-13194, 6948}, + {-13060, 6972}, + {-13207, 6976}, + {-13315, 6946}, + {-13443, 6909}, + {-13601, 6885}, + {-13753, 6902}, + {-13883, 6937}, + {-14024, 6961}, + {-14178, 6977}, + {-14321, 7008}, + {-14482, 6999}, + {-14638, 7018}, + {-14801, 7030}, + {-14958, 7050}, + {-15126, 7043}, + {-15253, 7081}, + {-15419, 7083}, + {-15573, 7087}, + {-15707, 7116}, + {-15840, 7082}, + {-15976, 7060}, + {-16078, 7038}, + {-16223, 7015}, + {-16319, 6937}, + {-16424, 6895}, + {-16585, 6887}, + {-16507, 6794}, + {-16400, 6752}, + {-16253, 6705}, + {-16112, 6661}, + {-16227, 6680}, + {-16322, 6608}, + {-16452, 6656}, + {-16568, 6624}, + {-16675, 6603}, + {-16788, 6570}, + {-16638, 6531}, + {-16535, 6450}, + {-16415, 6457}, + {-16286, 6446}, + {-16129, 6486}, + {-16084, 6396}, + {-16207, 6348}, + {-16358, 6308}, + {-16475, 6276}, + {-16574, 6190}, + {-16497, 6102}, + {-16380, 6092}, + {-16516, 6062}, + {-16418, 5997}, + {-16269, 5997}, + {-16184, 5913}, + {-16049, 5898}, + {-15899, 5851}, + {-15781, 5870}, + {-15758, 5760}, + {-15880, 5685}, + {-16003, 5644}, + {-16114, 5597}, + {-16246, 5551}, + {-16330, 5495}, + {-16216, 5509}, + {-16081, 5549}, + {-15967, 5569}, + {-15862, 5606}, + {-15747, 5673}, + {-15641, 5727}, + {-15528, 5782}, + {-15417, 5832}, + {-15393, 5941}, + {-15273, 5995}, + {-15186, 6074}, + {-15053, 6128}, + {-14939, 6095}, + {-15039, 6098}, + {-15134, 6035}, + {-15186, 5935}, + {-15045, 5954}, + {-14926, 5999}, + {-14827, 6018}, + {-14793, 6114}, + {-14652, 6110}, + {-14548, 6041}, + {-14446, 6021}, + {-14342, 6005}, + {-14226, 6006}, + {-14121, 5983}, + {-14012, 5975}, + {-13904, 5929}, + {-13806, 5895}, + {-13678, 5832}, + {-13574, 5846}, + {-13472, 5843}, + {-13354, 5790}, + {-13287, 5701}, + {-13180, 5625}, + {-13087, 5557}, + {-12993, 5514}, + {-12983, 5410}, + {-12865, 5382}, + {-12827, 5288}, +}; + +static MCoord ec2[] = { + { 7566, -6956}, + { 7505, -6964}, + { 7437, -6974}, + { 7360, -6985}, + { 7251, -7055}, + { 7149, -7102}, + { 7087, -7187}, + { 6957, -7228}, + { 6785, -7225}, + { 6837, -7122}, + { 6919, -7041}, + { 6804, -7046}, + { 6919, -6974}, + { 6976, -6866}, + { 6904, -6783}, + { 6752, -6779}, + { 6601, -6771}, + { 6451, -6760}, + { 6305, -6757}, + { 6158, -6751}, + { 6020, -6737}, + { 5893, -6726}, + { 5762, -6701}, + { 5649, -6638}, + { 5550, -6598}, + { 5412, -6587}, + { 5272, -6592}, + { 5145, -6615}, + { 5033, -6649}, + { 4912, -6696}, + { 4800, -6765}, + { 4656, -6728}, + { 4494, -6776}, + { 4360, -6803}, + { 4231, -6832}, + { 4095, -6860}, + { 3980, -6898}, + { 3882, -6984}, + { 3749, -6966}, + { 3628, -6946}, + { 3494, -6886}, + { 3398, -6850}, + { 3290, -6924}, + { 3162, -6961}, + { 3009, -6981}, + { 2853, -7000}, + { 2691, -7015}, + { 2529, -7033}, + { 2364, -7050}, + { 2196, -7041}, + { 2030, -7028}, + { 1869, -7008}, + { 1705, -7010}, + { 1543, -7027}, + { 1381, -7020}, + { 1239, -7048}, + { 1094, -7067}, + { 975, -7026}, + { 854, -7042}, + { 719, -7037}, + { 575, -7060}, + { 405, -7072}, + { 240, -7091}, + { 82, -7118}, + { -41, -7160}, + { -170, -7141}, + { -296, -7126}, + { -474, -7131}, + { -611, -7123}, + { -749, -7129}, + { -841, -7174}, + { -968, -7095}, + { -1107, -7160}, + { -1218, -7156}, + { -1307, -7273}, + { -1423, -7316}, + { -1607, -7336}, + { -1527, -7399}, + { -1427, -7388}, + { -1580, -7445}, + { -1721, -7487}, + { -1812, -7539}, + { -1933, -7578}, + { -2137, -7594}, + { -2247, -7597}, + { -2361, -7603}, + { -2478, -7611}, + { -2588, -7627}, + { -2789, -7653}, + { -2890, -7669}, + { -3077, -7709}, + { -3284, -7744}, + { -3449, -7789}, + { -3589, -7840}, + { -3484, -7914}, + { -3379, -7935}, + { -3236, -7942}, + { -3096, -7928}, + { -2961, -7914}, + { -2779, -7904}, + { -2902, -7940}, + { -2814, -8016}, + { -2920, -8037}, + { -3087, -8048}, + { -3234, -8064}, + { -3402, -8074}, + { -3561, -8088}, + { -3730, -8099}, + { -3884, -8116}, + { -4050, -8129}, + { -4195, -8148}, + { -4443, -8186}, + { -4642, -8180}, + { -4843, -8183}, + { -5036, -8192}, + { -5223, -8205}, + { -5407, -8219}, + { -5555, -8240}, + { -5659, -8265}, + { -5806, -8294}, + { -5928, -8250}, + { -6086, -8230}, + { -6247, -8210}, + { -6397, -8190}, + { -6542, -8170}, + { -6683, -8150}, + { -6829, -8130}, + { -6986, -8114}, + { -7159, -8103}, + { -7314, -8087}, + { -7454, -8069}, + { -7629, -8018}, + { -7889, -8003}, + { -7775, -8001}, + { -7650, -7984}, + { -7823, -7926}, + { -7983, -7924}, + { -8103, -7942}, + { -8290, -7898}, + { -8387, -7841}, + { -8212, -7857}, + { -8101, -7876}, + { -7956, -7881}, + { -7815, -7872}, + { -7965, -7813}, + { -8099, -7796}, + { -7992, -7775}, + { -7864, -7786}, + { -7729, -7792}, + { -7598, -7801}, + { -7468, -7810}, + { -7353, -7793}, + { -7532, -7747}, + { -7696, -7704}, + { -7812, -7653}, + { -7669, -7606}, + { -7542, -7652}, + { -7421, -7659}, + { -7297, -7663}, + { -7172, -7666}, + { -7042, -7666}, + { -6886, -7626}, + { -6777, -7615}, + { -6664, -7604}, + { -6564, -7588}, + { -6378, -7553}, + { -6314, -7475}, + { -6193, -7478}, + { -6120, -7390}, + { -6020, -7321}, + { -6139, -7253}, + { -6226, -7201}, + { -6114, -7179}, + { -6191, -7081}, + { -6247, -6986}, + { -6342, -6913}, + { -6421, -6848}, + { -6535, -6843}, + { -6499, -6729}, + { -6404, -6682}, + { -6271, -6656}, + { -6124, -6622}, + { -6236, -6588}, + { -6111, -6497}, + { -5962, -6442}, + { -5866, -6401}, + { -5774, -6361}, + { -5875, -6353}, + { -5975, -6384}, + { -6088, -6409}, + { -6232, -6470}, + { -6389, -6508}, + { -6481, -6597}, + { -6582, -6629}, + { -6687, -6697}, + { -6690, -6823}, + { -6715, -6927}, + { -6855, -6941}, + { -6779, -7051}, + { -6728, -7164}, + { -6746, -7273}, + { -6895, -7310}, + { -7083, -7328}, + { -7275, -7346}, + { -7463, -7368}, + { -7662, -7382}, + { -7842, -7364}, + { -7948, -7323}, + { -8060, -7320}, + { -8169, -7387}, + { -8351, -7371}, + { -8546, -7355}, + { -8654, -7327}, + { -8831, -7316}, + { -8938, -7302}, + { -9105, -7327}, + { -9208, -7318}, + { -9399, -7326}, + { -9598, -7327}, + { -9791, -7311}, + { -9964, -7302}, + {-10171, -7303}, + {-10300, -7274}, + {-10140, -7334}, + {-10038, -7337}, + {-10189, -7361}, + {-10050, -7448}, + { -9962, -7512}, + {-10163, -7524}, + {-10365, -7503}, + {-10478, -7506}, + {-10586, -7515}, + {-10794, -7526}, + {-10900, -7514}, + {-11038, -7519}, + {-11105, -7420}, + {-11216, -7483}, + {-11325, -7448}, + {-11461, -7402}, + {-11560, -7446}, + {-11663, -7453}, + {-11765, -7440}, + {-11928, -7461}, + {-12036, -7467}, + {-12146, -7471}, + {-12254, -7468}, + {-12361, -7472}, + {-12471, -7467}, + {-12581, -7465}, + {-12690, -7464}, + {-12796, -7469}, + {-12898, -7480}, + {-13007, -7482}, + {-13117, -7477}, + {-13225, -7473}, + {-13336, -7480}, + {-13530, -7460}, + {-13635, -7473}, + {-13804, -7506}, + {-13920, -7511}, + {-14081, -7549}, + {-14197, -7549}, + {-14406, -7570}, + {-14601, -7595}, + {-14801, -7613}, + {-14912, -7631}, + {-14728, -7643}, + {-14629, -7659}, + {-14818, -7747}, + {-14918, -7764}, + {-15114, -7744}, + {-15226, -7740}, + {-15405, -7717}, + {-15527, -7709}, + {-15736, -7719}, + {-15671, -7821}, + {-15534, -7815}, + {-15405, -7817}, + {-15551, -7859}, + {-15443, -7901}, + {-15308, -7913}, + {-15177, -7927}, + {-15053, -7945}, + {-14912, -7959}, + {-14776, -7974}, + {-14657, -7994}, + {-14562, -8049}, + {-14754, -8097}, + {-14989, -8134}, + {-15148, -8118}, + {-15318, -8108}, + {-15499, -8101}, + {-15663, -8115}, + {-15433, -8155}, + {-15281, -8235}, + {-15294, -8347}, + {-15169, -8430}, + {-14972, -8452}, + {-14706, -8466}, + {-14411, -8477}, + {-14108, -8486}, + {-13899, -8504}, + {-14085, -8522}, + {-14425, -8513}, + {-14780, -8510}, + {-15016, -8536}, + {-15344, -8533}, + {-15717, -8539}, + {-16062, -8530}, + {-16334, -8513}, + {-16600, -8496}, + {-16812, -8477}, + {-17076, -8459}, + {-17352, -8447}, + {-17659, -8445}, + {-17904, -8436}, + { 17876, -8416}, + { 17637, -8401}, + { 17404, -8386}, + { 17220, -8370}, + { 17100, -8349}, + { 16856, -8339}, + { 16682, -8280}, + { 16561, -8255}, + { 16436, -8234}, + { 16274, -8184}, + { 16126, -8156}, + { 16059, -8077}, + { 15905, -8043}, + { 15994, -7974}, + { 16122, -7898}, + { 16255, -7887}, + { 16372, -7869}, + { 16495, -7857}, + { 16675, -7857}, + { 16542, -7817}, + { 16427, -7771}, + { 16284, -7701}, + { 16281, -7600}, + { 16336, -7501}, + { 16479, -7466}, + { 16579, -7408}, + { 16745, -7348}, + { 16885, -7347}, + { 17009, -7267}, + { 17084, -7171}, + { 16941, -7141}, + { 16801, -7102}, + { 16675, -7069}, + { 16517, -7056}, + { 16351, -7056}, + { 16203, -7029}, + { 16055, -7007}, + { 15957, -6964}, + { 15830, -6930}, + { 15674, -6917}, + { 15521, -6911}, + { 15394, -6842}, + { 15280, -6883}, + { 15120, -6887}, + { 15027, -6844}, + { 14873, -6830}, + { 14722, -6804}, + { 14561, -6758}, + { 14415, -6704}, + { 14272, -6697}, + { 14137, -6678}, + { 13998, -6665}, + { 13857, -6651}, + { 13721, -6632}, + { 13583, -6619}, + { 13509, -6523}, + { 13413, -6612}, + { 13268, -6614}, + { 13129, -6622}, + { 12994, -6635}, + { 12896, -6709}, + { 12754, -6695}, + { 12623, -6631}, + { 12513, -6669}, + { 12402, -6655}, + { 12285, -6665}, + { 12140, -6669}, + { 12001, -6684}, + { 11854, -6692}, + { 11713, -6685}, + { 11556, -6637}, + { 11447, -6624}, + { 11356, -6578}, + { 11231, -6587}, + { 11097, -6605}, + { 10978, -6667}, + { 10837, -6662}, + { 10706, -6640}, + { 10569, -6625}, + { 10435, -6604}, + { 10299, -6592}, + { 10162, -6600}, + { 10050, -6633}, + { 9942, -6677}, + { 9841, -6653}, + { 9699, -6658}, + { 9549, -6665}, + { 9408, -6663}, + { 9262, -6661}, + { 9118, -6655}, + { 8978, -6669}, + { 8876, -6647}, + { 8770, -6680}, + { 8639, -6703}, + { 8498, -6714}, + { 8350, -6715}, + { 8216, -6727}, + { 8087, -6785}, + { 7942, -6804}, + { 7828, -6843}, + { 7741, -6916}, + { 7606, -6945}, +}; + +static MCoord ec3[] = { + { 14904, -2093}, + { 14882, -2080}, + { 14879, -2050}, + { 14874, -2025}, + { 14771, -1975}, + { 14669, -1917}, + { 14606, -1828}, + { 14595, -1718}, + { 14545, -1619}, + { 14528, -1506}, + { 14457, -1428}, + { 14362, -1392}, + { 14343, -1282}, + { 14295, -1186}, + { 14255, -1081}, + { 14197, -1191}, + { 14161, -1305}, + { 14159, -1416}, + { 14155, -1530}, + { 14129, -1644}, + { 14078, -1746}, + { 13967, -1752}, + { 13877, -1683}, + { 13775, -1629}, + { 13669, -1584}, + { 13575, -1511}, + { 13594, -1398}, + { 13656, -1287}, + { 13572, -1216}, + { 13454, -1204}, + { 13345, -1177}, + { 13243, -1123}, + { 13195, -1226}, + { 13091, -1247}, + { 13023, -1328}, + { 12956, -1406}, + { 12966, -1509}, + { 12849, -1479}, + { 12750, -1405}, + { 12632, -1412}, + { 12521, -1468}, + { 12441, -1559}, + { 12358, -1645}, + { 12250, -1693}, + { 12226, -1795}, + { 12164, -1878}, + { 12087, -1966}, + { 11970, -2000}, + { 11862, -2031}, + { 11750, -2069}, + { 11635, -2083}, + { 11541, -2152}, + { 11447, -2217}, + { 11379, -2306}, + { 11341, -2413}, + { 11380, -2520}, + { 11411, -2631}, + { 11411, -2757}, + { 11457, -2862}, + { 11495, -2970}, + { 11521, -3082}, + { 11573, -3188}, + { 11567, -3302}, + { 11497, -3396}, + { 11593, -3473}, + { 11722, -3502}, + { 11826, -3493}, + { 11943, -3439}, + { 12057, -3391}, + { 12160, -3384}, + { 12293, -3387}, + { 12401, -3337}, + { 12505, -3272}, + { 12627, -3225}, + { 12730, -3226}, + { 12827, -3199}, + { 12955, -3162}, + { 13057, -3159}, + { 13184, -3176}, + { 13303, -3211}, + { 13421, -3253}, + { 13483, -3342}, + { 13531, -3453}, + { 13632, -3415}, + { 13734, -3342}, + { 13747, -3450}, + { 13846, -3469}, + { 13925, -3537}, + { 13976, -3641}, + { 14004, -3749}, + { 14115, -3813}, + { 14246, -3839}, + { 14345, -3879}, + { 14435, -3834}, + { 14547, -3843}, + { 14634, -3902}, + { 14716, -3840}, + { 14802, -3788}, + { 14913, -3778}, + { 14995, -3711}, + { 15014, -3600}, + { 15077, -3501}, + { 15121, -3397}, + { 15180, -3292}, + { 15256, -3205}, + { 15306, -3096}, + { 15328, -2984}, + { 15361, -2872}, + { 15332, -2762}, + { 15311, -2652}, + { 15291, -2539}, + { 15209, -2454}, + { 15121, -2378}, + { 15080, -2277}, + { 14978, -2243}, + { 14932, -2142}, +}; + +static MCoord ec4[] = { + { -3567, 6622}, + { -3560, 6635}, + { -3498, 6633}, + { -3453, 6652}, + { -3348, 6729}, + { -3220, 6792}, + { -3056, 6814}, + { -2914, 6831}, + { -2771, 6852}, + { -2622, 6874}, + { -2521, 6915}, + { -2402, 6953}, + { -2289, 6990}, + { -2443, 7024}, + { -2601, 7027}, + { -2749, 7002}, + { -2851, 7045}, + { -2761, 7104}, + { -2602, 7107}, + { -2706, 7152}, + { -2818, 7194}, + { -2677, 7160}, + { -2517, 7137}, + { -2420, 7095}, + { -2264, 7053}, + { -2197, 7137}, + { -2290, 7175}, + { -2433, 7234}, + { -2547, 7233}, + { -2645, 7271}, + { -2526, 7307}, + { -2627, 7317}, + { -2499, 7355}, + { -2366, 7374}, + { -2265, 7329}, + { -2105, 7346}, + { -2222, 7412}, + { -2049, 7441}, + { -1918, 7450}, + { -2075, 7472}, + { -2183, 7507}, + { -1978, 7525}, + { -2055, 7595}, + { -2209, 7652}, + { -2109, 7687}, + { -2008, 7695}, + { -1871, 7682}, + { -1981, 7736}, + { -2088, 7791}, + { -2012, 7895}, + { -1883, 7976}, + { -1771, 7994}, + { -1982, 8000}, + { -1767, 8023}, + { -1651, 8040}, + { -1884, 8058}, + { -1995, 8062}, + { -1740, 8075}, + { -1559, 8082}, + { -1349, 8129}, + { -1250, 8156}, + { -1347, 8180}, + { -1535, 8191}, + { -1727, 8181}, + { -1833, 8154}, + { -2030, 8155}, + { -2166, 8131}, + { -2354, 8081}, + { -2260, 8133}, + { -2335, 8204}, + { -2570, 8158}, + { -2689, 8152}, + { -2538, 8191}, + { -2713, 8202}, + { -2932, 8194}, + { -3105, 8186}, + { -3232, 8183}, + { -3039, 8215}, + { -2787, 8218}, + { -2574, 8215}, + { -2381, 8226}, + { -2213, 8242}, + { -2369, 8283}, + { -2517, 8290}, + { -2832, 8309}, + { -3060, 8307}, + { -3257, 8296}, + { -3427, 8292}, + { -3219, 8309}, + { -2991, 8316}, + { -2741, 8315}, + { -2619, 8334}, + { -2860, 8348}, + { -3099, 8359}, + { -3375, 8356}, + { -3616, 8350}, + { -3763, 8343}, + { -3928, 8288}, + { -4173, 8314}, + { -4348, 8318}, + { -4520, 8301}, + { -4340, 8285}, + { -4115, 8278}, + { -3990, 8258}, + { -4185, 8266}, + { -4436, 8278}, + { -4537, 8186}, + { -4663, 8210}, + { -4815, 8229}, + { -4976, 8249}, + { -5091, 8238}, + { -5256, 8193}, + { -5358, 8172}, + { -5527, 8226}, + { -5695, 8218}, + { -5886, 8200}, + { -5699, 8146}, + { -5838, 8167}, + { -5964, 8190}, + { -6121, 8176}, + { -6325, 8109}, + { -6539, 8075}, + { -6653, 8055}, + { -6478, 8011}, + { -6552, 7928}, + { -6663, 7913}, + { -6798, 7907}, + { -6914, 7887}, + { -7048, 7870}, + { -7172, 7859}, + { -7267, 7812}, + { -7164, 7788}, + { -7062, 7781}, + { -6964, 7750}, + { -6847, 7756}, + { -6716, 7762}, + { -6845, 7724}, + { -6684, 7717}, + { -6813, 7718}, + { -6943, 7722}, + { -7072, 7718}, + { -6894, 7667}, + { -6721, 7599}, + { -6576, 7618}, + { -6416, 7624}, + { -6290, 7629}, + { -6180, 7621}, + { -6070, 7607}, + { -5886, 7573}, + { -5781, 7503}, + { -5645, 7451}, + { -5580, 7366}, + { -5470, 7278}, + { -5558, 7172}, + { -5449, 7137}, + { -5364, 7206}, + { -5252, 7165}, + { -5140, 7101}, + { -5241, 7068}, + { -5413, 7079}, + { -5299, 7030}, + { -5155, 7001}, + { -5037, 6992}, + { -5100, 6882}, + { -5259, 6846}, + { -5135, 6837}, + { -5277, 6814}, + { -5157, 6784}, + { -5037, 6760}, + { -5166, 6766}, + { -5295, 6766}, + { -5135, 6733}, + { -5276, 6729}, + { -5359, 6643}, + { -5215, 6654}, + { -5109, 6693}, + { -5208, 6650}, + { -5317, 6613}, + { -5209, 6596}, + { -5088, 6573}, + { -5226, 6542}, + { -5184, 6434}, + { -5088, 6479}, + { -4988, 6448}, + { -5115, 6422}, + { -5083, 6320}, + { -5016, 6242}, + { -4910, 6205}, + { -4829, 6121}, + { -4682, 6090}, + { -4578, 6113}, + { -4483, 6054}, + { -4349, 6013}, + { -4284, 6103}, + { -4232, 6196}, + { -4178, 6296}, + { -4089, 6361}, + { -4081, 6477}, + { -3990, 6552}, + { -3864, 6563}, + { -3757, 6636}, + { -3637, 6599}, +}; + +static MCoord ec5[] = { + { -6711, 6831}, + { -6753, 6831}, + { -6718, 6841}, + { -6769, 6849}, + { -6891, 6879}, + { -6780, 6921}, + { -6949, 6954}, + { -6832, 6968}, + { -6730, 6998}, + { -6832, 7014}, + { -6971, 6974}, + { -6873, 7036}, + { -7010, 7067}, + { -7130, 7023}, + { -7064, 7099}, + { -7229, 7077}, + { -7141, 7143}, + { -7276, 7149}, + { -7403, 7133}, + { -7502, 7169}, + { -7613, 7197}, + { -7513, 7241}, + { -7673, 7269}, + { -7842, 7253}, + { -7958, 7234}, + { -8087, 7232}, + { -8130, 7357}, + { -8300, 7368}, + { -8464, 7333}, + { -8567, 7271}, + { -8452, 7219}, + { -8573, 7204}, + { -8477, 7162}, + { -8626, 7105}, + { -8514, 7129}, + { -8605, 7178}, + { -8659, 7288}, + { -8511, 7363}, + { -8635, 7385}, + { -8816, 7359}, + { -8919, 7310}, + { -8981, 7225}, + { -8914, 7128}, + { -8745, 7103}, + { -8923, 7102}, + { -8807, 7033}, + { -8671, 7041}, + { -8551, 7005}, + { -8379, 6996}, + { -8209, 6985}, + { -8103, 7007}, + { -7948, 6988}, + { -7855, 7034}, + { -7766, 6988}, + { -7660, 6962}, + { -7567, 6916}, + { -7469, 6878}, + { -7348, 6832}, + { -7253, 6761}, + { -7157, 6665}, + { -7054, 6681}, + { -6943, 6649}, + { -7105, 6607}, + { -7202, 6666}, + { -7336, 6662}, + { -7434, 6617}, + { -7560, 6529}, + { -7708, 6543}, + { -7815, 6477}, + { -7696, 6425}, + { -7582, 6445}, + { -7469, 6447}, + { -7346, 6459}, + { -7254, 6392}, + { -7151, 6364}, + { -7068, 6289}, + { -6947, 6267}, + { -6798, 6220}, + { -6683, 6200}, + { -6756, 6298}, + { -6882, 6364}, + { -6781, 6363}, + { -6678, 6315}, + { -6562, 6291}, + { -6467, 6339}, + { -6531, 6436}, + { -6656, 6491}, + { -6768, 6559}, + { -6699, 6655}, + { -6582, 6624}, + { -6467, 6623}, + { -6415, 6516}, + { -6298, 6566}, + { -6187, 6635}, + { -6279, 6677}, + { -6445, 6710}, + { -6538, 6777}, + { -6653, 6801}, +}; + +static MCoord ec6[] = { + { 14111, -919}, + { 14138, -916}, + { 14167, -921}, + { 14196, -919}, + { 14306, -909}, + { 14228, -823}, + { 14353, -821}, + { 14455, -759}, + { 14566, -793}, + { 14645, -865}, + { 14716, -948}, + { 14808, -1011}, + { 14923, -1026}, + { 15028, -1067}, + { 14992, -972}, + { 14894, -905}, + { 14812, -810}, + { 14721, -742}, + { 14784, -643}, + { 14693, -586}, + { 14583, -545}, + { 14541, -446}, + { 14448, -384}, + { 14343, -341}, + { 14231, -311}, + { 14126, -265}, + { 14017, -236}, + { 13908, -201}, + { 13802, -156}, + { 13703, -212}, + { 13612, -265}, + { 13530, -336}, + { 13462, -256}, + { 13419, -154}, + { 13345, -72}, + { 13237, -36}, + { 13131, -83}, + { 13197, -184}, + { 13295, -226}, + { 13206, -278}, + { 13286, -345}, + { 13379, -308}, + { 13450, -396}, + { 13542, -444}, + { 13652, -476}, + { 13759, -517}, + { 13833, -602}, + { 13906, -690}, + { 13890, -814}, + { 14000, -801}, + { 14067, -885}, +}; + +static MCoord ec7[] = { + { 11767, 431}, + { 11799, 426}, + { 11829, 433}, + { 11853, 448}, + { 11926, 528}, + { 11834, 580}, + { 11741, 661}, + { 11639, 640}, + { 11567, 555}, + { 11473, 487}, + { 11389, 421}, + { 11313, 333}, + { 11210, 291}, + { 11125, 214}, + { 11025, 172}, + { 10915, 159}, + { 10893, 48}, + { 10919, -52}, + { 11005, -139}, + { 11020, -249}, + { 11116, -300}, + { 11225, -332}, + { 11335, -321}, + { 11447, -344}, + { 11555, -378}, + { 11626, -288}, + { 11637, -174}, + { 11727, -88}, + { 11750, 9}, + { 11799, 103}, + { 11785, 203}, + { 11759, 300}, + { 11746, 414}, +}; + +static MCoord ec8[] = { + { -7617, 8258}, + { -7710, 8282}, + { -7876, 8290}, + { -7955, 8276}, + { -8138, 8266}, + { -7977, 8194}, + { -8233, 8214}, + { -8477, 8243}, + { -8585, 8230}, + { -8681, 8200}, + { -8857, 8202}, + { -9065, 8174}, + { -8849, 8151}, + { -8974, 8118}, + { -8858, 8105}, + { -8589, 8119}, + { -8874, 8093}, + { -8674, 8081}, + { -8559, 8103}, + { -8330, 8113}, + { -8546, 8097}, + { -8649, 8071}, + { -8374, 8068}, + { -8261, 8069}, + { -8121, 8064}, + { -7978, 8082}, + { -7759, 8135}, + { -7871, 8099}, + { -7731, 8089}, + { -7928, 8070}, + { -8065, 8047}, + { -8249, 8036}, + { -8058, 7969}, + { -8192, 7975}, + { -8386, 8022}, + { -8553, 8030}, + { -8656, 8018}, + { -8553, 7968}, + { -8407, 7912}, + { -8203, 7894}, + { -8373, 7881}, + { -8519, 7888}, + { -8662, 7876}, + { -8491, 7841}, + { -8373, 7756}, + { -8275, 7793}, + { -8417, 7736}, + { -8538, 7742}, + { -8678, 7786}, + { -8805, 7779}, + { -8707, 7728}, + { -8853, 7706}, + { -8666, 7648}, + { -8474, 7642}, + { -8367, 7657}, + { -8246, 7659}, + { -8086, 7624}, + { -7882, 7647}, + { -7787, 7689}, + { -7919, 7711}, + { -8022, 7718}, + { -8160, 7723}, + { -8010, 7730}, + { -7878, 7734}, + { -7656, 7796}, + { -7556, 7826}, + { -7787, 7889}, + { -7642, 7918}, + { -7490, 7909}, + { -7724, 7930}, + { -7524, 7943}, + { -7374, 7951}, + { -7150, 7978}, + { -7037, 8037}, + { -6921, 8048}, + { -6723, 8095}, + { -6606, 8118}, + { -6473, 8141}, + { -6729, 8136}, + { -6945, 8118}, + { -6729, 8145}, + { -6843, 8159}, + { -6576, 8168}, + { -6411, 8179}, + { -6244, 8200}, + { -6133, 8224}, + { -6245, 8249}, + { -6491, 8283}, + { -6745, 8270}, + { -7038, 8303}, + { -7181, 8303}, + { -7310, 8286}, + { -7410, 8294}, + { -7617, 8303}, +}; + +static MCoord ec9[] = { + { 12012, -558}, + { 12036, -554}, + { 12034, -527}, + { 12030, -500}, + { 12038, -387}, + { 12044, -280}, + { 12106, -369}, + { 12168, -479}, + { 12272, -440}, + { 12233, -334}, + { 12188, -239}, + { 12238, -146}, + { 12327, -97}, + { 12213, -85}, + { 12117, -128}, + { 12010, -67}, + { 12030, 40}, + { 12141, 48}, + { 12254, 49}, + { 12364, 29}, + { 12463, 73}, + { 12510, 166}, + { 12425, 101}, + { 12315, 94}, + { 12201, 105}, + { 12093, 133}, + { 11999, 55}, + { 11979, -68}, + { 11931, -159}, + { 11888, -263}, + { 11945, -352}, + { 11954, -465}, + { 11964, -565}, +}; + +static MCoord ec10[] = { + { 9522, 552}, + { 9524, 531}, + { 9534, 504}, + { 9547, 477}, + { 9631, 398}, + { 9719, 327}, + { 9775, 231}, + { 9874, 168}, + { 9908, 60}, + { 9979, -19}, + { 10040, -115}, + { 10087, -218}, + { 10154, -311}, + { 10231, -393}, + { 10321, -465}, + { 10407, -538}, + { 10507, -573}, + { 10587, -505}, + { 10591, -390}, + { 10573, -268}, + { 10467, -258}, + { 10445, -146}, + { 10344, -75}, + { 10374, 23}, + { 10261, 21}, + { 10211, 134}, + { 10128, 204}, + { 10023, 258}, + { 9951, 330}, + { 9857, 397}, + { 9796, 476}, + { 9700, 526}, + { 9591, 545}, +}; + +static MCoord ec11[] = { + { 4327, -2199}, + { 4328, -2224}, + { 4332, -2255}, + { 4340, -2283}, + { 4368, -2388}, + { 4407, -2494}, + { 4514, -2552}, + { 4631, -2518}, + { 4726, -2458}, + { 4767, -2348}, + { 4797, -2236}, + { 4837, -2127}, + { 4872, -2015}, + { 4908, -1905}, + { 4945, -1796}, + { 4969, -1689}, + { 4971, -1586}, + { 5043, -1511}, + { 5016, -1400}, + { 4985, -1289}, + { 4885, -1247}, + { 4852, -1345}, + { 4786, -1422}, + { 4709, -1535}, + { 4608, -1578}, + { 4501, -1612}, + { 4417, -1710}, + { 4405, -1818}, + { 4437, -1927}, + { 4427, -2033}, + { 4363, -2128}, +}; + +static MCoord ec12[] = { + { 14099, 4149}, + { 14081, 4126}, + { 14112, 4120}, + { 14118, 4096}, + { 14015, 4077}, + { 14006, 3970}, + { 13960, 3861}, + { 13880, 3771}, + { 13772, 3700}, + { 13675, 3729}, + { 13624, 3628}, + { 13543, 3551}, + { 13414, 3553}, + { 13307, 3554}, + { 13198, 3482}, + { 13090, 3422}, + { 13204, 3386}, + { 13300, 3431}, + { 13421, 3466}, + { 13541, 3458}, + { 13547, 3356}, + { 13640, 3419}, + { 13735, 3463}, + { 13868, 3503}, + { 13986, 3554}, + { 14060, 3635}, + { 14103, 3743}, + { 14151, 3844}, + { 14200, 3949}, + { 14153, 4055}, +}; + +static MCoord ec13[] = { + { -501, 5857}, + { -505, 5836}, + { -527, 5817}, + { -523, 5795}, + { -569, 5700}, + { -559, 5585}, + { -508, 5495}, + { -387, 5483}, + { -306, 5416}, + { -378, 5329}, + { -443, 5218}, + { -368, 5149}, + { -264, 5164}, + { -400, 5121}, + { -487, 5058}, + { -382, 5026}, + { -283, 5070}, + { -148, 5079}, + { -26, 5081}, + { 102, 5100}, + { 155, 5210}, + { 97, 5296}, + { 11, 5347}, + { -53, 5443}, + { -142, 5503}, + { -241, 5597}, + { -344, 5600}, + { -255, 5657}, + { -189, 5735}, + { -290, 5768}, + { -414, 5760}, + { -315, 5855}, + { -426, 5853}, +}; + +static MCoord ec14[] = { + {-11453, 7261}, + {-11421, 7275}, + {-11400, 7303}, + {-11430, 7331}, + {-11607, 7313}, + {-11763, 7279}, + {-11881, 7204}, + {-11796, 7151}, + {-11645, 7148}, + {-11797, 7111}, + {-11677, 7061}, + {-11504, 7061}, + {-11336, 7064}, + {-11174, 7035}, + {-11281, 7023}, + {-11453, 7030}, + {-11622, 7019}, + {-11732, 6988}, + {-11641, 6941}, + {-11485, 6926}, + {-11361, 6903}, + {-11234, 6851}, + {-11081, 6859}, + {-10924, 6870}, + {-10783, 6895}, + {-10675, 6939}, + {-10568, 6914}, + {-10435, 6889}, + {-10277, 6885}, + {-10221, 6981}, + {-10090, 6988}, + {-10188, 7029}, + {-10340, 7059}, + {-10446, 7106}, + {-10502, 7219}, + {-10585, 7301}, + {-10757, 7327}, + {-10774, 7222}, + {-10887, 7260}, + {-11026, 7298}, + {-11155, 7233}, + {-11284, 7297}, + {-11415, 7261}, +}; + +static MCoord ec15[] = { + { -8486, 2185}, + { -8455, 2187}, + { -8431, 2186}, + { -8401, 2199}, + { -8299, 2251}, + { -8173, 2258}, + { -8079, 2205}, + { -7962, 2166}, + { -7854, 2133}, + { -7767, 2069}, + { -7706, 1989}, + { -7583, 1996}, + { -7466, 2005}, + { -7563, 2078}, + { -7653, 2125}, + { -7747, 2184}, + { -7856, 2231}, + { -7965, 2271}, + { -8078, 2308}, + { -8200, 2317}, + { -8321, 2296}, + { -8432, 2242}, +}; + +static MCoord ec16[] = { + { -5575, 5154}, + { -5607, 5154}, + { -5648, 5140}, + { -5678, 5120}, + { -5745, 5045}, + { -5787, 4954}, + { -5874, 4870}, + { -5932, 4787}, + { -5830, 4769}, + { -5704, 4758}, + { -5585, 4784}, + { -5531, 4695}, + { -5444, 4746}, + { -5352, 4676}, + { -5270, 4761}, + { -5380, 4780}, + { -5376, 4900}, + { -5476, 4936}, + { -5587, 4948}, + { -5645, 5032}, + { -5596, 5124}, +}; + +static MCoord ec17[] = { + { 17693, -3964}, + { 17693, -3945}, + { 17710, -3920}, + { 17743, -3907}, + { 17833, -3834}, + { 17721, -3798}, + { 17613, -3762}, + { 17556, -3662}, + { 17465, -3612}, + { 17407, -3518}, + { 17294, -3450}, + { 17347, -3561}, + { 17433, -3620}, + { 17472, -3713}, + { 17475, -3818}, + { 17396, -3908}, + { 17499, -3994}, + { 17493, -4095}, + { 17608, -4109}, + { 17687, -4010}, +}; + +static MCoord ec18[] = { + { 12220, 1848}, + { 12201, 1832}, + { 12169, 1833}, + { 12144, 1846}, + { 12043, 1787}, + { 12031, 1672}, + { 11989, 1578}, + { 12023, 1477}, + { 12075, 1387}, + { 12178, 1392}, + { 12290, 1360}, + { 12382, 1289}, + { 12342, 1398}, + { 12227, 1413}, + { 12150, 1511}, + { 12198, 1614}, + { 12244, 1722}, + { 12229, 1826}, +}; + +static MCoord ec19[] = { + { 17410, -4155}, + { 17415, -4126}, + { 17407, -4109}, + { 17384, -4110}, + { 17271, -4068}, + { 17191, -4157}, + { 17114, -4255}, + { 17026, -4321}, + { 16923, -4374}, + { 16823, -4419}, + { 16720, -4503}, + { 16663, -4594}, + { 16761, -4621}, + { 16898, -4663}, + { 17005, -4626}, + { 17091, -4530}, + { 17112, -4422}, + { 17209, -4383}, + { 17316, -4300}, + { 17395, -4208}, +}; + +static MCoord ec20[] = { + { 11003, -789}, + { 11030, -801}, + { 11056, -813}, + { 11084, -820}, + { 11199, -829}, + { 11313, -828}, + { 11422, -862}, + { 11372, -770}, + { 11268, -716}, + { 11169, -673}, + { 11069, -653}, + { 10949, -684}, + { 10850, -648}, + { 10746, -609}, + { 10643, -600}, + { 10545, -672}, + { 10647, -709}, + { 10764, -759}, + { 10876, -766}, + { 10983, -782}, +}; + +static MCoord ec21[] = { + { 14189, 5301}, + { 14184, 5271}, + { 14174, 5244}, + { 14167, 5217}, + { 14224, 5109}, + { 14215, 4994}, + { 14191, 4880}, + { 14201, 4769}, + { 14183, 4655}, + { 14304, 4659}, + { 14265, 4756}, + { 14286, 4869}, + { 14400, 4925}, + { 14375, 5045}, + { 14332, 5158}, + { 14332, 5300}, + { 14296, 5412}, + { 14186, 5338}, +}; + +static MCoord ec22[] = { + { 12542, 976}, + { 12542, 957}, + { 12551, 929}, + { 12546, 902}, + { 12457, 853}, + { 12337, 862}, + { 12241, 805}, + { 12192, 706}, + { 12282, 758}, + { 12404, 760}, + { 12405, 653}, + { 12493, 588}, + { 12551, 697}, + { 12658, 727}, + { 12637, 836}, + { 12597, 938}, +}; + +static MCoord ec23[] = { + { -1482, 6637}, + { -1539, 6623}, + { -1583, 6641}, + { -1639, 6646}, + { -1737, 6606}, + { -1853, 6604}, + { -2010, 6600}, + { -2103, 6534}, + { -2170, 6612}, + { -2290, 6642}, + { -2368, 6570}, + { -2213, 6549}, + { -2369, 6488}, + { -2260, 6479}, + { -2200, 6385}, + { -2059, 6377}, + { -1901, 6341}, + { -1789, 6363}, + { -1688, 6384}, + { -1579, 6418}, + { -1457, 6447}, + { -1372, 6520}, + { -1462, 6578}, +}; + +static MCoord ec24[] = { + { -7211, 1973}, + { -7235, 1977}, + { -7266, 1991}, + { -7296, 1992}, + { -7266, 1892}, + { -7366, 1854}, + { -7247, 1821}, + { -7151, 1771}, + { -7073, 1838}, + { -6963, 1843}, + { -6855, 1833}, + { -6948, 1912}, + { -7035, 1971}, + { -7156, 1989}, +}; + +static MCoord ec25[] = { + { 14193, 4551}, + { 14173, 4541}, + { 14161, 4515}, + { 14175, 4488}, + { 14143, 4378}, + { 14051, 4328}, + { 13981, 4229}, + { 14102, 4175}, + { 14178, 4259}, + { 14279, 4215}, + { 14385, 4280}, + { 14499, 4303}, + { 14531, 4420}, + { 14415, 4408}, + { 14311, 4451}, + { 14234, 4518}, +}; + +static MCoord ec26[] = { + {-11270, 7621}, + {-11368, 7625}, + {-11452, 7646}, + {-11537, 7627}, + {-11659, 7599}, + {-11542, 7588}, + {-11695, 7571}, + {-11576, 7561}, + {-11744, 7538}, + {-11601, 7509}, + {-11404, 7532}, + {-11264, 7517}, + {-11145, 7519}, + {-11334, 7487}, + {-11150, 7454}, + {-10980, 7486}, + {-10874, 7499}, + {-10773, 7499}, + {-10662, 7499}, + {-10564, 7546}, + {-10683, 7583}, + {-10820, 7613}, + {-10952, 7668}, + {-10899, 7563}, + {-11098, 7556}, + {-11222, 7604}, +}; + +static MCoord ec27[] = { + { -732, 5531}, + { -761, 5516}, + { -800, 5516}, + { -836, 5495}, + { -922, 5426}, + { -1006, 5352}, + { -943, 5262}, + { -1025, 5187}, + { -912, 5153}, + { -788, 5190}, + { -655, 5222}, + { -611, 5331}, + { -557, 5444}, + { -693, 5515}, +}; + +static MCoord ec28[] = { + { -7238, -7271}, + { -7178, -7266}, + { -7080, -7266}, + { -6987, -7261}, + { -6851, -7222}, + { -6823, -7108}, + { -6889, -7024}, + { -6958, -6941}, + { -7084, -6882}, + { -7213, -6915}, + { -7160, -7026}, + { -7092, -7107}, + { -7274, -7111}, + { -7413, -7153}, + { -7535, -7173}, + { -7433, -7213}, + { -7318, -7191}, + { -7201, -7179}, + { -7092, -7224}, + { -7280, -7234}, +}; + +static MCoord ec29[] = { + { -6853, -5482}, + { -6803, -5484}, + { -6754, -5487}, + { -6704, -5490}, + { -6556, -5491}, + { -6672, -5428}, + { -6778, -5371}, + { -6859, -5267}, + { -6964, -5263}, + { -7042, -5331}, + { -6960, -5422}, + { -7074, -5419}, + { -7179, -5450}, + { -7077, -5471}, + { -6936, -5488}, +}; + +static MCoord ec30[] = { + { -9207, 7663}, + { -9315, 7652}, + { -9325, 7669}, + { -9400, 7691}, + { -9516, 7701}, + { -9648, 7698}, + { -9500, 7630}, + { -9360, 7630}, + { -9232, 7591}, + { -9187, 7477}, + { -9005, 7457}, + { -8883, 7474}, + { -8705, 7450}, + { -8532, 7458}, + { -8340, 7473}, + { -8172, 7450}, + { -8056, 7458}, + { -7955, 7534}, + { -8118, 7571}, + { -8224, 7582}, + { -8348, 7578}, + { -8455, 7568}, + { -8562, 7552}, + { -8741, 7554}, + { -8859, 7554}, + { -8968, 7588}, + { -9094, 7610}, +}; + +static MCoord ec31[] = { + { 1088, 7940}, + { 1170, 7920}, + { 1193, 7892}, + { 1209, 7862}, + { 1371, 7824}, + { 1491, 7868}, + { 1594, 7853}, + { 1492, 7814}, + { 1653, 7782}, + { 1533, 7761}, + { 1426, 7748}, + { 1570, 7703}, + { 1678, 7667}, + { 1755, 7733}, + { 1843, 7787}, + { 2016, 7862}, + { 2118, 7878}, + { 1992, 7907}, + { 1893, 7926}, + { 1772, 7983}, + { 1639, 7995}, + { 1548, 7938}, + { 1428, 7968}, + { 1307, 7982}, + { 1181, 7974}, +}; + +static MCoord ec32[] = { + { 5644, 7469}, + { 5580, 7453}, + { 5542, 7428}, + { 5533, 7414}, + { 5419, 7370}, + { 5580, 7336}, + { 5703, 7353}, + { 5794, 7410}, + { 5963, 7470}, + { 6076, 7511}, + { 6259, 7550}, + { 6364, 7566}, + { 6470, 7577}, + { 6573, 7591}, + { 6676, 7605}, + { 6778, 7622}, + { 6888, 7669}, + { 6715, 7695}, + { 6612, 7677}, + { 6439, 7638}, + { 6318, 7626}, + { 6216, 7625}, + { 6107, 7618}, + { 5916, 7588}, + { 5756, 7542}, + { 5623, 7505}, +}; + +static MCoord ec33[] = { + { 15212, -418}, + { 15194, -425}, + { 15159, -423}, + { 15162, -451}, + { 15084, -547}, + { 14970, -552}, + { 14857, -549}, + { 14950, -615}, + { 15059, -618}, + { 15153, -558}, + { 15238, -476}, +}; + +static MCoord ec34[] = { + {-11971, 7417}, + {-12037, 7432}, + {-12124, 7450}, + {-12227, 7448}, + {-12334, 7443}, + {-12445, 7432}, + {-12466, 7319}, + {-12544, 7236}, + {-12445, 7177}, + {-12347, 7131}, + {-12208, 7130}, + {-12057, 7154}, + {-11958, 7229}, + {-11854, 7277}, + {-11698, 7313}, + {-11546, 7350}, + {-11660, 7398}, + {-11835, 7424}, +}; + +static MCoord ec35[] = { + { -8316, 6495}, + { -8351, 6512}, + { -8410, 6526}, + { -8473, 6535}, + { -8579, 6584}, + { -8628, 6473}, + { -8711, 6366}, + { -8589, 6370}, + { -8460, 6333}, + { -8353, 6405}, + { -8247, 6386}, + { -8095, 6351}, + { -8173, 6414}, + { -8273, 6481}, +}; + +static MCoord ec36[] = { + { 7980, 747}, + { 7984, 717}, + { 7986, 688}, + { 7994, 660}, + { 8098, 608}, + { 8183, 679}, + { 8162, 783}, + { 8104, 888}, + { 8033, 971}, + { 7992, 861}, + { 7979, 761}, +}; + +static MCoord ec37[] = { + { 12885, 27}, + { 12868, 45}, + { 12846, 61}, + { 12829, 81}, + { 12795, 207}, + { 12742, 117}, + { 12769, 16}, + { 12828, -82}, + { 12794, 40}, +}; + +static MCoord ec38[] = { + { 14796, -4077}, + { 14773, -4085}, + { 14738, -4096}, + { 14695, -4105}, + { 14593, -4105}, + { 14483, -4071}, + { 14515, -4191}, + { 14558, -4298}, + { 14674, -4359}, + { 14749, -4292}, + { 14822, -4211}, + { 14829, -4107}, +}; + +static MCoord ec39[] = { + { -9410, 8106}, + { -9495, 8095}, + { -9440, 8067}, + { -9526, 8057}, + { -9623, 8006}, + { -9488, 7969}, + { -9368, 7938}, + { -9209, 7934}, + { -9107, 7920}, + { -9263, 7916}, + { -9387, 7903}, + { -9251, 7854}, + { -9095, 7816}, + { -8996, 7835}, + { -8864, 7832}, + { -8702, 7892}, + { -8543, 7942}, + { -8667, 7956}, + { -8766, 8029}, + { -8916, 8037}, + { -9110, 8080}, + { -9277, 8131}, +}; + +static MCoord ec40[] = { + { 13173, 3257}, + { 13195, 3282}, + { 13195, 3303}, + { 13177, 3323}, + { 13085, 3392}, + { 12974, 3335}, + { 13057, 3254}, + { 13023, 3142}, + { 13140, 3154}, +}; + +static MCoord ec41[] = { + {-12762, 5079}, + {-12807, 5085}, + {-12831, 5067}, + {-12797, 5048}, + {-12685, 4991}, + {-12593, 4934}, + {-12497, 4902}, + {-12378, 4835}, + {-12424, 4931}, + {-12514, 4992}, + {-12608, 5043}, + {-12735, 5069}, +}; + +static MCoord ec42[] = { + { 12522, -938}, + { 12547, -924}, + { 12575, -916}, + { 12603, -906}, + { 12708, -861}, + { 12600, -849}, + { 12497, -890}, + { 12393, -940}, + { 12490, -970}, +}; + +static MCoord ec43[] = { + { -5269, -8091}, + { -5147, -8086}, + { -4976, -8076}, + { -4807, -8068}, + { -4641, -8057}, + { -4493, -8042}, + { -4363, -7997}, + { -4497, -7884}, + { -4404, -7831}, + { -4614, -7794}, + { -4749, -7795}, + { -4862, -7812}, + { -5011, -7861}, + { -5063, -7947}, + { -5202, -8000}, + { -5319, -8020}, + { -5433, -8041}, +}; + +static MCoord ec44[] = { + {-10005, 7387}, + {-10063, 7374}, + {-10098, 7351}, + {-10041, 7328}, + {-10135, 7279}, + {-10267, 7281}, + {-10162, 7233}, + {-10026, 7198}, + { -9933, 7148}, + { -9826, 7169}, + { -9671, 7185}, + { -9720, 7283}, + { -9775, 7387}, + { -9886, 7375}, +}; + +static MCoord ec45[] = { + { 5142, 7176}, + { 5163, 7156}, + { 5244, 7152}, + { 5337, 7143}, + { 5452, 7073}, + { 5627, 7064}, + { 5743, 7075}, + { 5622, 7121}, + { 5539, 7202}, + { 5623, 7310}, + { 5462, 7337}, + { 5325, 7300}, + { 5209, 7211}, +}; + +static MCoord ec46[] = { + { 11949, 1140}, + { 11942, 1121}, + { 11934, 1090}, + { 11930, 1073}, + { 11859, 987}, + { 11773, 909}, + { 11874, 973}, + { 11962, 1045}, +}; + +static MCoord ec47[] = { + { 12120, 2510}, + { 12099, 2497}, + { 12083, 2471}, + { 12064, 2449}, + { 12013, 2343}, + { 12051, 2240}, + { 12133, 2303}, + { 12166, 2414}, + { 12167, 2520}, +}; + +static MCoord ec48[] = { + { 14036, 7485}, + { 14142, 7494}, + { 14235, 7490}, + { 14322, 7499}, + { 14216, 7560}, + { 14336, 7509}, + { 14441, 7510}, + { 14272, 7586}, + { 14128, 7605}, + { 13979, 7593}, + { 13874, 7615}, + { 13741, 7578}, + { 13836, 7476}, + { 13938, 7477}, +}; + +static MCoord ec49[] = { + { 16488, -2061}, + { 16465, -2042}, + { 16436, -2027}, + { 16411, -2017}, + { 16478, -2110}, + { 16577, -2179}, + { 16686, -2235}, + { 16600, -2146}, + { 16513, -2074}, +}; + +static MCoord ec50[] = { + { -4844, -25}, + { -4864, -22}, + { -4893, -18}, + { -4921, -14}, + { -5034, -12}, + { -5068, -114}, + { -4970, -170}, + { -4881, -119}, +}; + +static MCoord ec51[] = { + { 12816, -287}, + { 12807, -301}, + { 12791, -335}, + { 12810, -319}, + { 12910, -336}, + { 13016, -354}, + { 12946, -280}, + { 12832, -285}, +}; + +static MCoord ec52[] = { + { 12027, -826}, + { 12013, -835}, + { 11989, -847}, + { 11987, -877}, + { 12101, -891}, + { 12215, -874}, + { 12099, -836}, +}; + +static MCoord ec53[] = { + { 1559, 3828}, + { 1531, 3823}, + { 1499, 3816}, + { 1465, 3810}, + { 1358, 3805}, + { 1255, 3802}, + { 1342, 3732}, + { 1437, 3696}, + { 1518, 3764}, +}; + +static MCoord ec54[] = { + { 15082, -267}, + { 15091, -278}, + { 15117, -289}, + { 15142, -305}, + { 15237, -368}, + { 15284, -474}, + { 15258, -377}, + { 15168, -307}, +}; + +static MCoord ec55[] = { + { 11721, -837}, + { 11708, -842}, + { 11683, -859}, + { 11678, -890}, + { 11782, -891}, + { 11906, -867}, + { 11809, -813}, +}; + +static MCoord ec56[] = { + { 10954, 1991}, + { 10940, 1987}, + { 10922, 1975}, + { 10897, 1954}, + { 10873, 1854}, + { 10991, 1840}, + { 11057, 1916}, + { 10975, 1997}, +}; + +static MCoord ec57[] = { + { -9526, 7396}, + { -9498, 7377}, + { -9530, 7370}, + { -9563, 7350}, + { -9517, 7236}, + { -9411, 7206}, + { -9320, 7278}, + { -9164, 7300}, + { -9036, 7381}, + { -9186, 7400}, + { -9364, 7414}, +}; + +static MCoord ec58[] = { + {-10055, 7659}, + {-10035, 7636}, + { -9991, 7605}, + {-10056, 7611}, + {-10158, 7636}, + {-10240, 7571}, + {-10110, 7561}, + { -9957, 7568}, + { -9805, 7510}, + { -9756, 7612}, + { -9874, 7656}, +}; + +static MCoord ec59[] = { + { 918, 4121}, + { 896, 4106}, + { 866, 4088}, + { 826, 4086}, + { 849, 3980}, + { 937, 3917}, + { 973, 4038}, +}; + +static MCoord ec60[] = { + { 13462, 3418}, + { 13438, 3425}, + { 13408, 3436}, + { 13372, 3426}, + { 13270, 3380}, + { 13281, 3278}, + { 13372, 3350}, + { 13466, 3392}, +}; + +static MCoord ec61[] = { + {-11889, 7734}, + {-11949, 7718}, + {-12017, 7694}, + {-12090, 7670}, + {-12263, 7629}, + {-12109, 7604}, + {-11982, 7591}, + {-11871, 7644}, + {-11766, 7634}, + {-11607, 7670}, + {-11694, 7740}, + {-11796, 7736}, +}; + +static MCoord ec62[] = { + { -6041, 4692}, + { -6063, 4695}, + { -6094, 4669}, + { -6110, 4646}, + { -6030, 4569}, + { -6033, 4670}, +}; + +static MCoord ec63[] = { + { 2630, 3530}, + { 2613, 3522}, + { 2577, 3522}, + { 2548, 3532}, + { 2441, 3537}, + { 2536, 3498}, +}; + +static MCoord ec64[] = { + { 2450, 8032}, + { 2366, 8022}, + { 2294, 8037}, + { 2237, 8013}, + { 2028, 8039}, + { 1903, 8020}, + { 2128, 7977}, + { 2238, 7937}, + { 2369, 7921}, + { 2506, 7936}, + { 2685, 7981}, + { 2539, 8023}, +}; + +static MCoord ec65[] = { + { 12352, 1091}, + { 12335, 1095}, + { 12306, 1092}, + { 12294, 1069}, + { 12242, 977}, + { 12322, 912}, + { 12332, 1020}, +}; + +static MCoord ec66[] = { + { 10587, -149}, + { 10576, -165}, + { 10563, -163}, + { 10540, -166}, + { 10592, -259}, + { 10600, -158}, +}; + +static MCoord ec67[] = { + {-10225, -7219}, + {-10153, -7223}, + {-10062, -7229}, + { -9958, -7238}, + { -9781, -7251}, + { -9609, -7246}, + { -9694, -7187}, + { -9807, -7205}, + { -9956, -7205}, + {-10121, -7196}, + {-10224, -7205}, +}; + +static MCoord ec68[] = { + {-10381, 7936}, + {-10477, 7933}, + {-10553, 7914}, + {-10454, 7892}, + {-10256, 7830}, + {-10120, 7818}, + { -9945, 7785}, + {-10093, 7886}, + {-10232, 7900}, +}; + +static MCoord ec69[] = { + { 3459, 3568}, + { 3442, 3563}, + { 3411, 3550}, + { 3378, 3539}, + { 3278, 3518}, + { 3394, 3497}, +}; + +static MCoord ec70[] = { + { 12429, 1257}, + { 12432, 1241}, + { 12445, 1215}, + { 12470, 1198}, + { 12559, 1113}, + { 12545, 1221}, + { 12444, 1254}, +}; + +static MCoord ec71[] = { + { -7828, 1821}, + { -7804, 1815}, + { -7781, 1795}, + { -7754, 1785}, + { -7632, 1788}, + { -7738, 1846}, +}; + +static MCoord ec72[] = { + { 12192, 1187}, + { 12203, 1170}, + { 12207, 1142}, + { 12205, 1114}, + { 12314, 1145}, + { 12215, 1182}, +}; + +static MCoord ec73[] = { + { 11899, -955}, + { 11919, -973}, + { 11947, -976}, + { 11973, -985}, + { 12076, -1014}, + { 12002, -937}, +}; + +static MCoord ec74[] = { + { 9967, 7938}, + { 9985, 7968}, + { 9953, 7995}, + { 9840, 7995}, + { 9696, 8013}, + { 9529, 8007}, + { 9332, 7957}, + { 9484, 7913}, + { 9612, 7901}, + { 9746, 7885}, + { 9882, 7881}, +}; + +static MCoord ec75[] = { + { -9796, 6989}, + { -9824, 6974}, + { -9835, 6948}, + { -9870, 6923}, + { -9742, 6857}, + { -9605, 6857}, + { -9714, 6960}, +}; + +static MCoord ec76[] = { + { 9300, 1355}, + { 9287, 1336}, + { 9283, 1308}, + { 9277, 1278}, + { 9264, 1162}, + { 9294, 1287}, +}; + +static MCoord ec77[] = { + { 10010, 7799}, + { 10130, 7816}, + { 10266, 7821}, + { 10411, 7830}, + { 10515, 7846}, + { 10337, 7909}, + { 10225, 7932}, + { 10120, 7906}, + { 10019, 7855}, +}; + +static MCoord ec78[] = { + { 12406, 1125}, + { 12396, 1113}, + { 12389, 1086}, + { 12376, 1060}, + { 12333, 953}, + { 12403, 1049}, +}; + +static MCoord ec79[] = { + { 15474, -555}, + { 15473, -583}, + { 15488, -606}, + { 15509, -625}, +}; + +static MCoord ec80[] = { + {-13359, 5635}, + {-13348, 5621}, + {-13321, 5596}, + {-13318, 5567}, + {-13223, 5478}, + {-13262, 5591}, +}; + +static MCoord ec81[] = { + { 12287, 7291}, + { 12377, 7280}, + { 12462, 7266}, + { 12537, 7248}, + { 12655, 7302}, + { 12506, 7365}, + { 12340, 7354}, +}; + +static MCoord ec82[] = { + { -6409, 4698}, + { -6434, 4676}, + { -6414, 4656}, + { -6384, 4638}, + { -6288, 4606}, + { -6391, 4663}, +}; + +static MCoord ec83[] = { + { -6369, 4986}, + { -6427, 4989}, + { -6414, 4974}, + { -6375, 4959}, + { -6264, 4915}, +}; + +static MCoord ec84[] = { + { 7019, -4959}, + { 6985, -4944}, + { 7016, -4936}, + { 7044, -4935}, + { 6919, -4906}, +}; + +static MCoord ec85[] = { + { 12032, 1347}, + { 12045, 1333}, + { 12067, 1312}, + { 12078, 1285}, +}; + +static MCoord ec86[] = { + { -8080, 7369}, + { -8083, 7347}, + { -8039, 7323}, + { -8007, 7297}, + { -7849, 7286}, + { -7653, 7283}, + { -7730, 7350}, + { -7926, 7365}, +}; + +static MCoord ec87[] = { + { -7378, -4336}, + { -7366, -4316}, + { -7357, -4293}, + { -7367, -4268}, +}; + +static MCoord ec88[] = { + { -6158, -8080}, + { -6057, -8059}, + { -6024, -8031}, + { -6019, -8002}, + { -6131, -7970}, + { -6247, -8023}, + { -6416, -8027}, + { -6639, -8018}, + { -6432, -8048}, + { -6304, -8069}, +}; + +static MCoord ec89[] = { + {-15324, 5783}, + {-15360, 5777}, + {-15376, 5752}, + {-15408, 5760}, + {-15284, 5740}, +}; + +static MCoord ec90[] = { + { 17874, -1700}, + { 17893, -1689}, + { 17916, -1674}, + { 17941, -1678}, +}; + +static MCoord ec91[] = { + { 13854, -737}, + { 13837, -741}, + { 13811, -754}, + { 13793, -776}, + { 13898, -777}, +}; + +static MCoord ec92[] = { + {-15586, 2024}, + {-15584, 2002}, + {-15599, 1975}, + {-15591, 1946}, + {-15487, 1946}, + {-15568, 2020}, +}; + +static MCoord ec93[] = { + { 937, 4300}, + { 929, 4278}, + { 895, 4264}, + { 864, 4244}, + { 919, 4147}, + { 949, 4259}, +}; + +static MCoord ec94[] = { + {-13167, 5413}, + {-13201, 5401}, + {-13224, 5380}, + {-13237, 5368}, +}; + +static MCoord ec95[] = { + { 12433, 1144}, + { 12440, 1119}, + { 12451, 1095}, + { 12476, 1082}, +}; + +static MCoord ec96[] = { + { -6719, 1825}, + { -6711, 1799}, + { -6679, 1797}, + { -6648, 1797}, +}; + +static MCoord ec97[] = { + { 17807, -1825}, + { 17827, -1817}, + { 17854, -1811}, + { 17863, -1791}, + { 17776, -1741}, +}; + +static MCoord ec98[] = { + { -7469, -5002}, + { -7450, -4990}, + { -7450, -4965}, + { -7445, -4933}, +}; + +static MCoord ec99[] = { + { 14868, 4550}, + { 14842, 4535}, + { 14802, 4532}, + { 14780, 4521}, + { 14695, 4454}, + { 14802, 4506}, +}; + +static MCoord ec100[] = { + {-13492, 5833}, + {-13478, 5811}, + {-13470, 5780}, + {-13447, 5746}, +}; + +static MCoord ec101[] = { + { -5454, 7028}, + { -5460, 7001}, + { -5473, 6977}, + { -5455, 6958}, + { -5294, 6934}, + { -5195, 6971}, + { -5314, 7014}, +}; + +static MCoord ec102[] = { + { 9506, 8120}, + { 9346, 8101}, + { 9288, 8077}, + { 9233, 8045}, + { 9435, 8007}, + { 9586, 8020}, + { 9719, 8034}, + { 9634, 8111}, +}; + +static MCoord ec103[] = { + { 15853, -763}, + { 15872, -785}, + { 15894, -802}, + { 15920, -816}, +}; + +static MCoord ec104[] = { + { -7501, 6815}, + { -7532, 6825}, + { -7608, 6832}, + { -7675, 6820}, + { -7585, 6728}, + { -7508, 6800}, +}; + +static MCoord ec105[] = { + {-15870, -7978}, + {-15887, -7951}, + {-15968, -7927}, + {-16061, -7903}, + {-16281, -7878}, + {-16146, -7976}, + {-15993, -7985}, +}; + +static MCoord ec106[] = { + {-11873, -7385}, + {-11967, -7378}, + {-12069, -7375}, + {-12167, -7366}, + {-12280, -7364}, + {-12200, -7436}, + {-12098, -7428}, + {-11997, -7419}, +}; + +static MCoord ec107[] = { + {-13582, 5826}, + {-13619, 5815}, + {-13625, 5793}, + {-13611, 5768}, + {-13503, 5749}, +}; + +static MCoord ec108[] = { + { -9149, -2}, + { -9133, -28}, + { -9117, -58}, + { -9141, -78}, +}; + +static MCoord ec109[] = { + { 12604, -318}, + { 12609, -345}, + { 12629, -364}, + { 12655, -377}, +}; + +static MCoord ec110[] = { + { 17918, 7086}, + {-17994, 7096}, + {-17908, 7094}, + {-17819, 7103}, + {-17991, 7154}, + { 17935, 7136}, +}; + +static MCoord ec111[] = { + { 2303, 3890}, + { 2333, 3874}, + { 2359, 3852}, + { 2391, 3839}, +}; + +static MCoord ec112[] = { + { -7198, 4105}, + { -7238, 4103}, + { -7269, 4099}, + { -7309, 4095}, + { -7207, 4099}, +}; + +static MCoord ec113[] = { + {-16952, 6305}, + {-16900, 6321}, + {-16922, 6334}, + {-16976, 6344}, + {-17088, 6361}, + {-16982, 6308}, +}; + +static MCoord ec114[] = { + { -3601, -5486}, + { -3593, -5475}, + { -3607, -5448}, + { -3645, -5426}, + { -3781, -5399}, + { -3652, -5453}, +}; + +static MCoord ec115[] = { + { -5947, -5221}, + { -5913, -5209}, + { -5876, -5195}, + { -5829, -5182}, + { -5930, -5177}, +}; + +static MCoord ec116[] = { + { 12302, -439}, + { 12287, -457}, + { 12283, -486}, + { 12278, -514}, +}; + +static MCoord ec117[] = { + { -7165, -7958}, + { -7069, -7959}, + { -6978, -7933}, + { -6912, -7907}, + { -6748, -7855}, + { -6956, -7868}, + { -7067, -7888}, + { -7181, -7940}, +}; + +static MCoord ec118[] = { + { 1242, 5609}, + { 1202, 5587}, + { 1165, 5586}, + { 1112, 5572}, + { 1217, 5518}, +}; + +static MCoord ec119[] = { + { -6848, -5493}, + { -6885, -5496}, + { -6940, -5504}, + { -6976, -5518}, + { -6823, -5555}, +}; + +static MCoord ec120[] = { + { 14630, 7546}, + { 14635, 7518}, + { 14730, 7499}, + { 14819, 7482}, + { 14928, 7476}, + { 15034, 7488}, + { 14849, 7532}, + { 14741, 7539}, +}; + +static MCoord ec121[] = { + { 12670, 7252}, + { 12748, 7271}, + { 12829, 7287}, + { 12893, 7310}, + { 12759, 7349}, + { 12641, 7285}, +}; + +static MCoord ec122[] = { + { 11447, -817}, + { 11463, -836}, + { 11491, -846}, + { 11516, -873}, +}; + +static MCoord ec123[] = { + { 16066, -833}, + { 16067, -852}, + { 16072, -879}, + { 16083, -907}, +}; + +static MCoord ec124[] = { + {-12379, -7406}, + {-12411, -7379}, + {-12490, -7366}, + {-12555, -7341}, + {-12721, -7334}, + {-12620, -7377}, + {-12458, -7412}, +}; + +static MCoord ec125[] = { + { 15963, -929}, + { 15963, -951}, + { 15979, -974}, + { 16007, -981}, +}; + +static MCoord ec126[] = { + { 11291, -689}, + { 11275, -702}, + { 11288, -717}, + { 11316, -719}, +}; + +static MCoord ec127[] = { + { -6085, -5211}, + { -6053, -5215}, + { -6011, -5198}, + { -5974, -5182}, + { -6079, -5199}, +}; + +static MCoord ec128[] = { + { -9510, 7561}, + { -9582, 7543}, + { -9621, 7524}, + { -9625, 7497}, + { -9453, 7465}, + { -9348, 7503}, + { -9434, 7556}, +}; + +static MCoord ec129[] = { + { 13103, -1187}, + { 13124, -1173}, + { 13147, -1151}, + { 13136, -1125}, +}; + +static MCoord ec130[] = { + { -6107, 1082}, + { -6124, 1080}, + { -6151, 1069}, + { -6147, 1034}, +}; + +static MCoord ec131[] = { + {-13516, 5745}, + {-13544, 5744}, + {-13540, 5720}, + {-13526, 5692}, +}; + +static MCoord ec132[] = { + { 13547, -163}, + { 13569, -170}, + { 13596, -179}, + { 13625, -187}, +}; + +static MCoord ec133[] = { + { -7782, 2689}, + { -7752, 2682}, + { -7729, 2662}, + { -7720, 2641}, +}; + +static MCoord ec134[] = { + { -6919, -6758}, + { -6875, -6771}, + { -6814, -6749}, + { -6790, -6725}, + { -6901, -6741}, +}; + +static MCoord ec135[] = { + { 14088, 7376}, + { 14037, 7350}, + { 14012, 7341}, + { 14133, 7336}, + { 14331, 7328}, + { 14167, 7389}, +}; + +static MCoord ec136[] = { + {-13191, 5322}, + {-13233, 5314}, + {-13228, 5299}, + {-13204, 5277}, +}; + +static MCoord ec137[] = { + { -8243, 6295}, + { -8305, 6289}, + { -8350, 6279}, + { -8380, 6252}, + { -8256, 6240}, +}; + +static MCoord ec138[] = { + { -9825, 7872}, + { -9818, 7846}, + { -9745, 7816}, + { -9715, 7790}, + { -9510, 7806}, + { -9611, 7857}, + { -9726, 7876}, +}; + +static MCoord ec139[] = { + { 13751, -3605}, + { 13789, -3585}, + { 13767, -3570}, + { 13743, -3559}, +}; + +static MCoord ec140[] = { + { 2301, 7816}, + { 2136, 7815}, + { 2144, 7790}, + { 2118, 7754}, + { 2256, 7742}, + { 2366, 7746}, +}; + +static MCoord ec141[] = { + { 15645, -664}, + { 15655, -680}, + { 15677, -700}, + { 15697, -722}, +}; + +static MCoord ec142[] = { + { 9788, 104}, + { 9767, 123}, + { 9745, 147}, + { 9719, 143}, +}; + +static MCoord ec143[] = { + { 16129, -1025}, + { 16144, -1037}, + { 16161, -1059}, + { 16185, -1073}, +}; + +static MCoord ec144[] = { + {-16360, 5504}, + {-16401, 5499}, + {-16444, 5487}, + {-16480, 5463}, + {-16326, 5469}, +}; + +static MCoord ec145[] = { + { 12325, 1247}, + { 12323, 1210}, + { 12344, 1216}, + { 12369, 1201}, +}; + +static MCoord ec146[] = { + {-11003, 7811}, + {-11100, 7808}, + {-11229, 7799}, + {-11319, 7779}, + {-11180, 7736}, + {-11050, 7748}, +}; + +static MCoord ec147[] = { + { 16673, -1485}, + { 16657, -1476}, + { 16662, -1513}, + { 16666, -1543}, +}; + +static MCoord ec148[] = { + { 5335, 1252}, + { 5350, 1241}, + { 5377, 1232}, + { 5407, 1235}, +}; + +static MCoord ec149[] = { + {-13580, 6899}, + {-13520, 6893}, + {-13450, 6880}, + {-13451, 6888}, + {-13569, 6922}, +}; + +static MCoord ec150[] = { + { 1705, 5734}, + { 1692, 5718}, + { 1670, 5691}, + { 1647, 5666}, +}; + +static MCoord ec151[] = { + { 4825, 6896}, + { 4868, 6876}, + { 4945, 6883}, + { 5007, 6905}, + { 4876, 6946}, +}; + +static MCoord ec152[] = { + {-10455, 7358}, + {-10516, 7372}, + {-10620, 7372}, + {-10680, 7352}, + {-10546, 7296}, +}; + +static MCoord ec153[] = { + { 11627, -825}, + { 11610, -843}, + { 11597, -874}, + { 11609, -888}, +}; + +static MCoord ec154[] = { + { -7614, -7117}, + { -7531, -7109}, + { -7446, -7100}, + { -7373, -7083}, + { -7486, -7075}, + { -7649, -7102}, +}; + +static MCoord ec155[] = { + { -5167, -106}, + { -5183, -133}, + { -5159, -131}, + { -5137, -109}, +}; + +static MCoord ec156[] = { + { 9925, -167}, + { 9916, -144}, + { 9903, -119}, + { 9887, -96}, +}; + +static MCoord ec157[] = { + { -2581, 7105}, + { -2636, 7094}, + { -2718, 7083}, + { -2789, 7055}, + { -2636, 7054}, +}; + +static MCoord ec158[] = { + { 10766, -258}, + { 10760, -281}, + { 10762, -310}, + { 10788, -313}, +}; + +static MCoord ec159[] = { + {-16633, 5397}, + {-16661, 5393}, + {-16692, 5376}, + {-16709, 5356}, +}; + +static MCoord ec160[] = { + { 13081, 0}, + { 13067, -4}, + { 13035, -14}, + { 13048, -31}, +}; + +static MCoord ec161[] = { + { 13450, -547}, + { 13434, -568}, + { 13433, -595}, + { 13435, -619}, +}; + +static MCoord ec162[] = { + {-16617, 6040}, + {-16655, 6033}, + {-16719, 6017}, + {-16694, 5997}, + {-16582, 5989}, +}; + +static MCoord ec163[] = { + { -7467, -5277}, + { -7445, -5296}, + { -7409, -5307}, + { -7365, -5320}, +}; + +static MCoord ec164[] = { + { -8167, 4590}, + { -8188, 4587}, + { -8237, 4591}, + { -8291, 4590}, + { -8190, 4560}, +}; + +static MCoord ec165[] = { + { 12438, -168}, + { 12437, -190}, + { 12462, -197}, + { 12491, -191}, +}; + +static MCoord ec166[] = { + { 13155, -716}, + { 13138, -737}, + { 13120, -762}, + { 13112, -783}, +}; + +static MCoord ec167[] = { + { -7219, -5376}, + { -7246, -5365}, + { -7283, -5354}, + { -7312, -5345}, +}; + +static MCoord ec168[] = { + { -7818, 2512}, + { -7820, 2489}, + { -7829, 2463}, + { -7810, 2439}, +}; + +static MCoord ec169[] = { + { 12716, 7243}, + { 12796, 7231}, + { 12870, 7212}, + { 12940, 7220}, + { 12820, 7257}, + { 12672, 7248}, +}; + +static MCoord ec170[] = { + { 4798, 8010}, + { 4878, 8021}, + { 4963, 8043}, + { 5120, 8062}, + { 5019, 8080}, + { 4905, 8057}, + { 4773, 8040}, +}; + +static MCoord ec171[] = { + { 5905, 6990}, + { 5953, 6980}, + { 6021, 6971}, + { 6037, 6994}, + { 5918, 7039}, +}; + +static MCoord ec172[] = { + { 13543, -72}, + { 13568, -85}, + { 13584, -108}, + { 13621, -114}, +}; + +static MCoord ec173[] = { + { -7668, 2545}, + { -7638, 2531}, + { -7618, 2508}, + { -7622, 2480}, +}; + +static MCoord ec174[] = { + { 1883, 5789}, + { 1848, 5779}, + { 1817, 5754}, + { 1825, 5709}, +}; + +static MCoord ec175[] = { + { 12587, -787}, + { 12614, -789}, + { 12644, -790}, + { 12673, -775}, +}; + +static MCoord ec176[] = { + { 15310, -2566}, + { 15320, -2538}, + { 15332, -2511}, + { 15329, -2483}, +}; + +static MCoord ec177[] = { + { 315, 3996}, + { 293, 3990}, + { 252, 3962}, + { 280, 3943}, +}; + +static MCoord ec178[] = { + { 12434, 1014}, + { 12410, 1006}, + { 12387, 986}, + { 12392, 965}, +}; + +static MCoord ec179[] = { + { -2328, 7284}, + { -2402, 7286}, + { -2432, 7264}, + { -2382, 7245}, + { -2252, 7222}, +}; + +static MCoord ec180[] = { + { -7440, -7291}, + { -7533, -7289}, + { -7584, -7314}, + { -7565, -7340}, + { -7442, -7339}, +}; + +static MCoord ec181[] = { + { -7876, -7311}, + { -7789, -7293}, + { -7751, -7270}, + { -7789, -7252}, + { -7901, -7246}, +}; + +static MCoord ec182[] = { + { -7978, 6239}, + { -8016, 6220}, + { -8026, 6191}, + { -7994, 6166}, +}; + +static MCoord ec183[] = { + { -9737, 2719}, + { -9739, 2703}, + { -9735, 2674}, + { -9721, 2630}, +}; + +static MCoord ec184[] = { + { 12265, -462}, + { 12245, -473}, + { 12237, -496}, + { 12231, -525}, +}; + +static MCoord ec185[] = { + { -2480, 7342}, + { -2548, 7324}, + { -2485, 7308}, + { -2346, 7311}, +}; + +static MCoord ec186[] = { + { 14609, 4446}, + { 14592, 4427}, + { 14557, 4386}, + { 14581, 4398}, +}; + +static MCoord ec187[] = { + { -7939, 5639}, + { -7957, 5626}, + { -7974, 5596}, + { -7928, 5601}, +}; + +static MCoord ec188[] = { + { 16358, 5857}, + { 16411, 5878}, + { 16461, 5894}, + { 16442, 5916}, + { 16343, 5857}, +}; + +static MCoord ec189[] = { + {-16788, 5353}, + {-16822, 5351}, + {-16848, 5328}, + {-16890, 5295}, + {-16791, 5338}, +}; + +static MCoord ec190[] = { + { 2285, 5860}, + { 2239, 5857}, + { 2196, 5840}, + { 2208, 5805}, + { 2314, 5845}, +}; + +static MCoord ec191[] = { + { 16770, -7766}, + { 16899, -7760}, + { 16895, -7740}, + { 16757, -7735}, + { 16656, -7763}, +}; + +static MCoord ec192[] = { + {-11077, 7873}, + {-11169, 7859}, + {-11301, 7840}, + {-11230, 7832}, + {-11099, 7832}, + {-10951, 7838}, +}; + +static MCoord ec193[] = { + { -7895, 2667}, + { -7877, 2654}, + { -7846, 2658}, + { -7803, 2667}, +}; + +static MCoord ec194[] = { + { 5628, 2696}, + { 5611, 2698}, + { 5579, 2688}, + { 5542, 2665}, +}; + +static MCoord ec195[] = { + { 9647, 240}, + { 9635, 253}, + { 9612, 270}, + { 9583, 286}, +}; + +static MCoord ec196[] = { + { -8126, 5321}, + { -8170, 5319}, + { -8191, 5300}, + { -8142, 5286}, +}; + +static MCoord ec197[] = { + { 12538, -184}, + { 12557, -192}, + { 12587, -191}, + { 12621, -185}, +}; + +static MCoord ec198[] = { + { 1507, 6827}, + { 1558, 6840}, + { 1616, 6850}, + { 1640, 6878}, + { 1519, 6843}, +}; + +static MCoord ec199[] = { + { 13410, -618}, + { 13414, -641}, + { 13408, -664}, + { 13419, -686}, +}; + +static MCoord ec200[] = { + { 13634, -1421}, + { 13649, -1422}, + { 13680, -1427}, + { 13683, -1415}, +}; + +static MCoord ec201[] = { + { 14962, 4563}, + { 15000, 4583}, + { 15029, 4603}, + { 15034, 4616}, + { 14948, 4562}, +}; + +static MCoord ec202[] = { + { 14741, -200}, + { 14724, -200}, + { 14696, -195}, + { 14662, -207}, +}; + +static MCoord ec203[] = { + { 16744, -1651}, + { 16762, -1653}, + { 16777, -1639}, + { 16752, -1616}, +}; + +static MCoord ec204[] = { + { 12824, 2683}, + { 12804, 2668}, + { 12787, 2654}, + { 12771, 2621}, +}; + +static MCoord ec205[] = { + { 15543, 5008}, + { 15583, 5024}, + { 15609, 5050}, + { 15595, 5066}, +}; + +static MCoord ec206[] = { + { 1048, 5554}, + { 983, 5547}, + { 1001, 5519}, + { 1033, 5506}, +}; + +static MCoord ec207[] = { + {-13130, 5595}, + {-13156, 5580}, + {-13170, 5555}, + {-13144, 5544}, +}; + +static MCoord ec208[] = { + {-13418, 5689}, + {-13427, 5672}, + {-13414, 5646}, + {-13413, 5618}, +}; + +static MCoord ec209[] = { + { 12347, -125}, + { 12324, -126}, + { 12297, -118}, + { 12287, -146}, +}; + +static MCoord ec210[] = { + { -6714, -5500}, + { -6755, -5492}, + { -6814, -5492}, + { -6811, -5512}, +}; + +static MCoord ec211[] = { + { 15744, -798}, + { 15728, -820}, + { 15752, -832}, + { 15779, -852}, +}; + +static MCoord ec212[] = { + { -1637, 2851}, + { -1667, 2838}, + { -1683, 2825}, + { -1659, 2804}, +}; + +static MCoord ec213[] = { + { 12744, -141}, + { 12741, -159}, + { 12764, -171}, + { 12803, -164}, +}; + +static MCoord ec214[] = { + { -620, 5847}, + { -651, 5838}, + { -690, 5820}, + { -695, 5788}, +}; + +static MCoord ec215[] = { + {-13323, 5697}, + {-13375, 5703}, + {-13375, 5683}, + {-13354, 5651}, +}; + +static MCoord ec216[] = { + { -1415, 2837}, + { -1433, 2814}, + { -1434, 2808}, + { -1401, 2822}, +}; + +static MCoord ec217[] = { + { 12445, -816}, + { 12444, -833}, + { 12473, -840}, + { 12506, -829}, +}; + +static MCoord ec218[] = { + { -2214, 7295}, + { -2296, 7304}, + { -2416, 7298}, + { -2378, 7289}, + { -2206, 7276}, +}; + +static MCoord ec219[] = { + { 12830, 201}, + { 12850, 209}, + { 12866, 233}, + { 12855, 257}, +}; + +static MCoord ec220[] = { + { -9347, 7775}, + { -9444, 7776}, + { -9578, 7773}, + { -9583, 7750}, + { -9438, 7746}, +}; + +static MCoord ec221[] = { + { 5560, -2089}, + { 5530, -2093}, + { 5531, -2119}, + { 5556, -2134}, +}; + +static MCoord ec222[] = { + { -5789, -6443}, + { -5745, -6436}, + { -5721, -6411}, + { -5773, -6392}, +}; + +static MCoord ec223[] = { + { -6423, -6470}, + { -6383, -6477}, + { -6309, -6461}, + { -6317, -6437}, +}; + +static MCoord ec224[] = { + { 13034, -167}, + { 13018, -172}, + { 12984, -185}, + { 13002, -201}, +}; + +static MCoord ec225[] = { + { -8307, 2182}, + { -8305, 2161}, + { -8297, 2146}, + { -8263, 2154}, +}; + +static MCoord ec226[] = { + { 886, 375}, + { 868, 369}, + { 850, 344}, + { 856, 324}, +}; + +static MCoord ec227[] = { + {-17422, 5239}, + {-17438, 5224}, + {-17498, 5206}, + {-17474, 5203}, +}; + +static MCoord ec228[] = { + { -7527, 2357}, + { -7512, 2328}, + { -7507, 2310}, + { -7489, 2300}, +}; + +static MCoord ec229[] = { + { 12752, -30}, + { 12737, -41}, + { 12746, -71}, + { 12776, -81}, +}; + +static MCoord ec230[] = { + { 13747, 5479}, + { 13784, 5472}, + { 13803, 5501}, + { 13767, 5514}, +}; + +static MCoord ec231[] = { + { -5634, -6342}, + { -5594, -6334}, + { -5531, -6334}, + { -5522, -6319}, + { -5640, -6328}, +}; + +static MCoord ec232[] = { + {-12899, 5329}, + {-12901, 5305}, + {-12904, 5285}, + {-12871, 5275}, +}; + +static MCoord ec233[] = { + { 10303, 83}, + { 10287, 95}, + { 10260, 106}, + { 10246, 94}, +}; + +static MCoord ec234[] = { + { -3763, -7863}, + { -3855, -7858}, + { -4092, -7855}, + { -3994, -7860}, + { -3853, -7864}, +}; + +static MCoord ec235[] = { + { 9067, 2278}, + { 9059, 2261}, + { 9070, 2219}, + { 9086, 2236}, +}; + +static MCoord ec236[] = { + { -2019, -7485}, + { -2016, -7469}, + { -2049, -7429}, + { -2122, -7445}, +}; + +static MCoord ec237[] = { + { -4999, 26}, + { -5028, 21}, + { -5026, 5}, + { -4994, -1}, +}; + +static MCoord ec238[] = { + {-15218, 5838}, + {-15250, 5841}, + {-15292, 5827}, + {-15306, 5809}, +}; + +static MCoord ec239[] = { + { 16921, 6988}, + { 16835, 6999}, + { 16795, 6980}, + { 16865, 6961}, +}; + +static MCoord ec240[] = { + { -1900, 7675}, + { -1900, 7659}, + { -1873, 7612}, + { -1866, 7632}, +}; + +static MCoord ec241[] = { + { -7324, -4492}, + { -7302, -4483}, + { -7283, -4460}, + { -7301, -4443}, +}; + +static MCoord ec242[] = { + { 17179, 705}, + { 17116, 710}, + { 17148, 707}, + { 17169, 699}, +}; + +static MCoord ec243[] = { + { 5958, 8047}, + { 6097, 8047}, + { 6201, 8075}, + { 6041, 8083}, + { 5937, 8068}, +}; + +static MCoord ec244[] = { + { -7367, 2096}, + { -7343, 2094}, + { -7309, 2114}, + { -7330, 2118}, +}; + +static MCoord ec245[] = { + {-13024, 5388}, + {-13005, 5367}, + {-12964, 5340}, + {-12966, 5360}, +}; + +static MCoord ec246[] = { + { 13013, -1181}, + { 13048, -1175}, + { 13039, -1145}, + { 13022, -1142}, +}; + +static MCoord ec247[] = { + { 12683, 3354}, + { 12664, 3353}, + { 12628, 3334}, + { 12655, 3324}, +}; + +static MCoord ec248[] = { + { 7014, 7305}, + { 7127, 7320}, + { 7109, 7339}, + { 7027, 7344}, +}; + +static MCoord ec249[] = { + {-11781, 7609}, + {-11842, 7594}, + {-11896, 7561}, + {-11805, 7570}, +}; + +static MCoord ec250[] = { + { 5760, -2005}, + { 5738, -2028}, + { 5745, -2048}, + { 5773, -2037}, +}; + +static MCoord ec251[] = { + { 3920, -607}, + { 3934, -630}, + { 3950, -627}, + { 3938, -597}, +}; + +static MCoord ec252[] = { + { -4492, 8214}, + { -4472, 8240}, + { -4661, 8263}, + { -4698, 8242}, + { -4564, 8220}, +}; + +static MCoord ec253[] = { + { 16598, 5533}, + { 16596, 5520}, + { 16621, 5495}, + { 16652, 5485}, +}; + +static MCoord ec254[] = { + { -6875, 5162}, + { -6904, 5144}, + { -6886, 5121}, + { -6849, 5132}, +}; + +static MCoord ec255[] = { + { 12287, -1086}, + { 12313, -1081}, + { 12337, -1058}, + { 12323, -1055}, +}; + +static MCoord ec256[] = { + {-10593, 7772}, + {-10573, 7750}, + {-10502, 7720}, + {-10470, 7738}, +}; + +static MCoord ec257[] = { + { 11309, 7422}, + { 11311, 7446}, + { 11201, 7445}, + { 11175, 7425}, +}; + +static MCoord ec258[] = { + { -7517, -4867}, + { -7511, -4848}, + { -7537, -4812}, + { -7544, -4831}, +}; + +static MCoord ec259[] = { + {-15653, 2092}, + {-15639, 2065}, + {-15608, 2068}, + {-15613, 2087}, +}; + +static MCoord ec260[] = { + { -5891, -6220}, + { -5846, -6215}, + { -5783, -6200}, + { -5826, -6193}, +}; + +static MCoord ec261[] = { + { -7354, 6800}, + { -7408, 6807}, + { -7460, 6805}, + { -7440, 6781}, +}; + +static MCoord ec262[] = { + { 1934, 5427}, + { 1956, 5433}, + { 2010, 5461}, + { 1983, 5457}, +}; + +static MCoord ec263[] = { + { 2628, 3936}, + { 2595, 3926}, + { 2613, 3912}, + { 2647, 3903}, +}; + +static MCoord ec264[] = { + {-17247, -1379}, + {-17225, -1375}, + {-17229, -1351}, + {-17264, -1351}, +}; + +static MCoord ec265[] = { + { 16784, -4673}, + { 16767, -4713}, + { 16811, -4708}, + { 16808, -4688}, +}; + +static MCoord ec266[] = { + { 2814, 3642}, + { 2791, 3632}, + { 2775, 3604}, + { 2801, 3606}, +}; + +static MCoord ec267[] = { + {-11213, 2528}, + {-11216, 2513}, + {-11217, 2485}, + {-11216, 2471}, +}; + +static MCoord ec268[] = { + { 14822, -4023}, + { 14828, -4008}, + { 14805, -3980}, + { 14785, -3986}, +}; + +static MCoord ec269[] = { + { 15044, -937}, + { 15050, -957}, + { 15080, -966}, + { 15087, -953}, +}; + +static MCoord ec270[] = { + { 1730, 6911}, + { 1789, 6924}, + { 1776, 6951}, + { 1720, 6940}, +}; + +static MCoord ec271[] = { + { 11320, -2610}, + { 11314, -2593}, + { 11300, -2560}, + { 11294, -2570}, +}; + +static MCoord ec272[] = { + { 13089, -88}, + { 13073, -97}, + { 13077, -122}, + { 13099, -126}, +}; + +static MCoord ec273[] = { + {-14705, 6032}, + {-14727, 6023}, + {-14772, 5991}, + {-14745, 5993}, +}; + +static MCoord ec274[] = { + { -7057, -5361}, + { -7075, -5384}, + { -7072, -5412}, + { -7052, -5400}, +}; + +static MCoord ec275[] = { + { 4508, 8060}, + { 4625, 8052}, + { 4801, 8069}, + { 4739, 8081}, + { 4587, 8068}, +}; + +static MCoord ec276[] = { + {-11358, 2957}, + {-11354, 2940}, + {-11326, 2912}, + {-11324, 2927}, +}; + +static MCoord ec277[] = { + {-13048, 5361}, + {-13033, 5346}, + {-12994, 5322}, + {-12984, 5334}, +}; + +static MCoord ec278[] = { + { 12048, -577}, + { 12045, -592}, + { 12047, -630}, + { 12053, -620}, +}; + +static MCoord ec279[] = { + { 13915, -1674}, + { 13928, -1669}, + { 13960, -1650}, + { 13942, -1644}, +}; + +static MCoord ec280[] = { + { -9116, -7254}, + { -9149, -7272}, + { -9137, -7302}, + { -9103, -7302}, +}; + +static MCoord ec281[] = { + {-10079, -7268}, + {-10022, -7276}, + { -9922, -7275}, + { -9944, -7259}, +}; + +static MCoord ec282[] = { + { -8043, 2785}, + { -8038, 2771}, + { -8023, 2734}, + { -8026, 2744}, +}; + +static MCoord ec283[] = { + { 12120, 3178}, + { 12134, 3165}, + { 12171, 3150}, + { 12165, 3161}, +}; + +static MCoord ec284[] = { + { 14996, -247}, + { 15009, -257}, + { 15036, -265}, + { 15038, -246}, +}; + +static MCoord ec285[] = { + {-15796, 2170}, + {-15813, 2161}, + {-15816, 2141}, + {-15783, 2135}, +}; + +static MCoord ec286[] = { + { -7776, 2424}, + { -7786, 2406}, + { -7768, 2380}, + { -7754, 2390}, +}; + +static MCoord ec287[] = { + { 15080, -980}, + { 15095, -1002}, + { 15122, -1009}, + { 15111, -996}, +}; + +static MCoord ec288[] = { + { 15998, -1149}, + { 16011, -1161}, + { 16043, -1176}, + { 16041, -1167}, +}; + +static MCoord ec289[] = { + { 12341, -826}, + { 12335, -841}, + { 12347, -855}, + { 12376, -831}, +}; + +static MCoord ec290[] = { + { -7749, 6326}, + { -7768, 6339}, + { -7830, 6346}, + { -7829, 6326}, +}; + +static MCoord ec291[] = { + { -625, 5765}, + { -655, 5749}, + { -608, 5721}, + { -613, 5742}, +}; + +static MCoord ec292[] = { + { -9705, 2784}, + { -9717, 2769}, + { -9734, 2738}, + { -9728, 2745}, +}; + +static MCoord ec293[] = { + { 12415, 1401}, + { 12411, 1365}, + { 12436, 1366}, + { 12433, 1393}, +}; + +static MCoord ec294[] = { + { -1572, 2782}, + { -1543, 2783}, + { -1543, 2810}, + { -1572, 2807}, +}; + +static MCoord ec295[] = { + { 4326, -1142}, + { 4324, -1162}, + { 4335, -1185}, + { 4345, -1178}, +}; + +static MCoord ec296[] = { + {-17402, 5212}, + {-17375, 5205}, + {-17321, 5206}, + {-17333, 5211}, +}; + +static MCoord ec297[] = { + { -7571, 3519}, + { -7553, 3528}, + { -7547, 3557}, + { -7547, 3563}, +}; + +static MCoord ec298[] = { + {-12727, 5242}, + {-12751, 5232}, + {-12784, 5209}, + {-12766, 5208}, +}; + +static MCoord ec299[] = { + {-13315, 5523}, + {-13315, 5506}, + {-13285, 5477}, + {-13281, 5485}, +}; + +static MCoord ec300[] = { + { 9131, 7989}, + { 9258, 7972}, + { 9330, 7996}, + { 9156, 8005}, +}; + +static MCoord ec301[] = { + { 15320, -1135}, + { 15333, -1149}, + { 15361, -1160}, + { 15361, -1149}, +}; + +static MCoord ec302[] = { + { -8786, 4741}, + { -8808, 4747}, + { -8844, 4717}, + { -8813, 4724}, +}; + +static MCoord ec303[] = { + { 3972, -544}, + { 3981, -533}, + { 3985, -504}, + { 3973, -498}, +}; + +static MCoord ec304[] = { + { -2089, 7443}, + { -2177, 7433}, + { -2138, 7413}, + { -2041, 7421}, +}; + +static MCoord ec305[] = { + { 13851, 3831}, + { 13836, 3820}, + { 13827, 3793}, + { 13844, 3788}, +}; + +static MCoord ec306[] = { + { 10315, 90}, + { 10301, 105}, + { 10274, 112}, + { 10276, 101}, +}; + +static MCoord ec307[] = { + { -8653, 3040}, + { -8672, 3040}, + { -8711, 3035}, + { -8704, 3035}, +}; + +static MCoord ec308[] = { + { -8847, 4817}, + { -8869, 4811}, + { -8910, 4794}, + { -8897, 4790}, +}; + +static MCoord ec309[] = { + { -260, -7100}, + { -227, -7080}, + { -318, -7068}, + { -310, -7094}, +}; + +static MCoord ec310[] = { + { 2221, 7837}, + { 2151, 7858}, + { 2051, 7840}, + { 2118, 7822}, +}; + +static MCoord ec311[] = { + {-15944, 2222}, + {-15971, 2209}, + {-15953, 2191}, + {-15932, 2204}, +}; + +static MCoord ec312[] = { + { 10171, 205}, + { 10147, 203}, + { 10148, 178}, + { 10171, 181}, +}; + +static MCoord ec313[] = { + {-17173, -1404}, + {-17154, -1403}, + {-17157, -1390}, + {-17192, -1383}, +}; + +static MCoord ec314[] = { + { 13309, -538}, + { 13292, -580}, + { 13302, -568}, + { 13316, -543}, +}; + +static MCoord ec315[] = { + { -9113, 7753}, + { -9064, 7727}, + { -8975, 7733}, + { -9026, 7759}, +}; + +static MCoord ec316[] = { + { -7535, -7015}, + { -7470, -7005}, + { -7520, -6984}, + { -7574, -7000}, +}; + +static MCoord ec317[] = { + { 16730, -2082}, + { 16713, -2076}, + { 16713, -2101}, + { 16739, -2108}, +}; + +static MCoord ec318[] = { + { 5891, 2069}, + { 5882, 2057}, + { 5866, 2033}, + { 5876, 2030}, +}; + +static MCoord ec319[] = { + { -7868, 6929}, + { -7920, 6898}, + { -7875, 6897}, + { -7836, 6926}, +}; + +static MCoord ec320[] = { + { 1106, 5486}, + { 1125, 5468}, + { 1173, 5471}, + { 1149, 5487}, +}; + +static MCoord ec321[] = { + { -6140, 4764}, + { -6160, 4758}, + { -6192, 4734}, + { -6179, 4738}, +}; + +static MCoord ec322[] = { + {-11246, 2915}, + {-11250, 2893}, + {-11228, 2884}, + {-11227, 2917}, +}; + +static MCoord ec323[] = { + { 1638, 4319}, + { 1658, 4314}, + { 1700, 4312}, + { 1697, 4315}, +}; + +static MCoord ec324[] = { + { 12206, 673}, + { 12189, 663}, + { 12204, 643}, + { 12223, 662}, +}; + +static MCoord ec325[] = { + { 12297, 1312}, + { 12303, 1299}, + { 12327, 1279}, + { 12328, 1282}, +}; + +static MCoord ec326[] = { + { 7726, 7229}, + { 7811, 7241}, + { 7787, 7259}, + { 7714, 7244}, +}; + +static MCoord ec327[] = { + { -7453, -4862}, + { -7467, -4830}, + { -7485, -4843}, + { -7481, -4863}, +}; + +static MCoord ec328[] = { + { -7564, 2457}, + { -7544, 2421}, + { -7536, 2426}, + { -7556, 2451}, +}; + +static MCoord ec329[] = { + {-10303, 7630}, + {-10406, 7621}, + {-10390, 7605}, + {-10274, 7614}, +}; + +static MCoord ec330[] = { + {-10443, 7540}, + {-10477, 7519}, + {-10401, 7507}, + {-10382, 7532}, +}; + +static MCoord ec331[] = { + { 5516, 8095}, + { 5692, 8077}, + { 5691, 8091}, + { 5520, 8106}, +}; + +static MCoord ec332[] = { + { -6084, -6263}, + { -6018, -6266}, + { -6017, -6252}, + { -6088, -6253}, +}; + +static MCoord ec333[] = { + { -9806, 7409}, + { -9904, 7396}, + { -9883, 7384}, + { -9786, 7397}, +}; + +static MCoord ec334[] = { + { -7393, 2263}, + { -7413, 2230}, + { -7400, 2235}, + { -7385, 2261}, +}; + +static MCoord ec335[] = { + { -6117, 1473}, + { -6096, 1450}, + { -6088, 1466}, + { -6104, 1482}, +}; + +static MCoord ec336[] = { + { -139, 6045}, + { -142, 6021}, + { -120, 6010}, + { -112, 6041}, +}; + +static MCoord ec337[] = { + { -2573, 3779}, + { -2536, 3772}, + { -2527, 3783}, + { -2568, 3786}, +}; + +static MCoord ec338[] = { + {-10442, 7664}, + {-10445, 7645}, + {-10346, 7636}, + {-10373, 7657}, +}; + +static MCoord ec339[] = { + {-14953, -1774}, + {-14927, -1778}, + {-14930, -1764}, + {-14955, -1756}, +}; + +static MCoord ec340[] = { + { -8424, 6605}, + { -8369, 6572}, + { -8373, 6588}, +}; + +static MCoord ec341[] = { + { 10051, -6567}, + { 10089, -6565}, + { 10108, -6544}, + { 10040, -6553}, +}; + +static MCoord ec342[] = { + { 6305, 8074}, + { 6480, 8098}, + { 6324, 8094}, +}; + +static MCoord ec343[] = { + {-13239, 5635}, + {-13261, 5620}, + {-13227, 5600}, + {-13232, 5621}, +}; + +static MCoord ec344[] = { + { 1318, 5429}, + { 1354, 5430}, + { 1344, 5456}, + { 1322, 5447}, +}; + +static MCoord ec345[] = { + { 5790, 8012}, + { 5854, 8027}, + { 5782, 8046}, + { 5731, 8024}, +}; + +static MCoord ec346[] = { + { -7524, -5042}, + { -7494, -5022}, + { -7517, -5012}, + { -7533, -5031}, +}; + +static MCoord ec347[] = { + { 12958, 2844}, + { 12928, 2831}, + { 12935, 2820}, + { 12962, 2839}, +}; + +static MCoord ec348[] = { + { -7180, -5390}, + { -7211, -5395}, + { -7197, -5420}, + { -7178, -5407}, +}; + +static MCoord ec349[] = { + { -573, 5648}, + { -612, 5658}, + { -618, 5638}, + { -581, 5635}, +}; + +static MCoord ec350[] = { + {-17645, -4404}, + {-17638, -4381}, + {-17642, -4372}, + {-17666, -4383}, +}; + +static MCoord ec351[] = { + { -6437, 1101}, + { -6397, 1099}, + { -6418, 1105}, +}; + +static MCoord ec352[] = { + { -8671, 6821}, + { -8673, 6786}, + { -8639, 6802}, +}; + +static MCoord ec353[] = { + { 1614, -7014}, + { 1626, -6999}, + { 1562, -6991}, + { 1568, -7013}, +}; + +static MCoord ec354[] = { + { 12679, 452}, + { 12676, 417}, + { 12689, 433}, +}; + +static MCoord ec355[] = { + { 10230, 131}, + { 10229, 103}, + { 10245, 106}, +}; + +static MCoord ec356[] = { + { -6205, -6969}, + { -6205, -6932}, + { -6216, -6951}, +}; + +static MCoord ec357[] = { + { -8055, 6972}, + { -8026, 6958}, + { -7966, 6967}, + { -8004, 6977}, +}; + +static MCoord ec358[] = { + { 10249, 146}, + { 10218, 154}, + { 10241, 136}, +}; + +static MCoord ec359[] = { + { 2931, 6213}, + { 2907, 6207}, + { 2903, 6184}, + { 2939, 6196}, +}; + +static MCoord ec360[] = { + { 14396, -4010}, + { 14403, -3976}, + { 14387, -3996}, +}; + +static MCoord ec361[] = { + { 15253, -900}, + { 15283, -913}, + { 15272, -897}, +}; + +static MCoord ec362[] = { + { 17266, 5289}, + { 17318, 5284}, + { 17290, 5299}, +}; + +static MCoord ec363[] = { + { 2215, 7047}, + { 2296, 7067}, + { 2235, 7063}, +}; + +static MCoord ec364[] = { + { 12097, 597}, + { 12129, 592}, + { 12121, 604}, +}; + +static MCoord ec365[] = { + { 9373, 717}, + { 9379, 687}, + { 9390, 705}, +}; + +static MCoord ec366[] = { + { 12213, 1266}, + { 12200, 1233}, + { 12212, 1253}, +}; + +static MCoord ec367[] = { + { -1345, 2920}, + { -1372, 2899}, + { -1351, 2901}, +}; + +static MCoord ec368[] = { + {-15724, 2115}, + {-15687, 2111}, + {-15700, 2119}, +}; + +static MCoord ec369[] = { + { 10462, 113}, + { 10436, 112}, + { 10452, 94}, +}; + +static MCoord ec370[] = { + { 12564, 1045}, + { 12560, 1010}, + { 12567, 1027}, +}; + +static MCoord ec371[] = { + { 13589, 7545}, + { 13590, 7573}, + { 13560, 7573}, + { 13551, 7548}, +}; + +static MCoord ec372[] = { + { -7487, -5105}, + { -7464, -5104}, + { -7449, -5085}, + { -7478, -5092}, +}; + +static MCoord ec373[] = { + { 16839, -1756}, + { 16826, -1773}, + { 16853, -1775}, +}; + +static MCoord ec374[] = { + { -6253, -6446}, + { -6220, -6416}, + { -6250, -6428}, +}; + +static MCoord ec375[] = { + { -6471, 6162}, + { -6521, 6163}, + { -6488, 6143}, +}; + +static MCoord ec376[] = { + { 16823, -1594}, + { 16819, -1561}, + { 16814, -1574}, +}; + +static MCoord ec377[] = { + { 2055, 3845}, + { 2044, 3831}, + { 2058, 3815}, + { 2064, 3832}, +}; + +static MCoord ec378[] = { + { 1432, 4517}, + { 1440, 4483}, + { 1441, 4502}, +}; + +static MCoord ec379[] = { + { -7043, -5489}, + { -7081, -5497}, + { -7062, -5511}, + { -7044, -5503}, +}; + +static MCoord ec380[] = { + { -8508, 6600}, + { -8486, 6569}, + { -8477, 6587}, +}; + +static MCoord ec381[] = { + { 1474, 4470}, + { 1505, 4444}, + { 1489, 4460}, +}; + +static MCoord ec382[] = { + { -9039, -51}, + { -9044, -70}, + { -9021, -62}, +}; + +static MCoord ec383[] = { + { -1290, 757}, + { -1260, 750}, + { -1273, 763}, +}; + +static MCoord ec384[] = { + { 14320, -842}, + { 14348, -860}, + { 14335, -848}, +}; + +static MCoord ec385[] = { + { 14778, -554}, + { 14796, -576}, + { 14797, -556}, +}; + +static MCoord ec386[] = { + { 2598, 3856}, + { 2597, 3828}, + { 2614, 3840}, +}; + +static MCoord ec387[] = { + { -7329, 1892}, + { -7298, 1880}, + { -7314, 1894}, +}; + +static MCoord ec388[] = { + { -9982, 8014}, + { -9938, 7986}, + { -9905, 8007}, +}; + +static MCoord ec389[] = { + { 16920, -1873}, + { 16901, -1875}, + { 16923, -1893}, +}; + +static MCoord ec390[] = { + { 15209, 4706}, + { 15193, 4689}, + { 15226, 4714}, +}; + +static MCoord ec391[] = { + { 1973, 3979}, + { 1990, 3950}, + { 1990, 3969}, +}; + +static MCoord ec392[] = { + { -6163, 1602}, + { -6161, 1628}, + { -6177, 1619}, +}; + +static MCoord ec393[] = { + { -8701, 4529}, + { -8725, 4502}, + { -8705, 4515}, +}; + +static MCoord ec394[] = { + { 12592, -197}, + { 12597, -229}, + { 12598, -210}, +}; + +static MCoord ec395[] = { + { -4942, 7}, + { -4967, -2}, + { -4943, -6}, +}; + +static MCoord ec396[] = { + { 14079, 7396}, + { 14071, 7421}, + { 14024, 7400}, +}; + +static MCoord ec397[] = { + {-11605, -7390}, + {-11689, -7406}, + {-11630, -7409}, +}; + +static MCoord ec398[] = { + { 12183, 1346}, + { 12200, 1328}, + { 12202, 1350}, +}; + +static MCoord ec399[] = { + { -5067, 0}, + { -5091, -16}, + { -5069, -13}, +}; + +static MCoord ec400[] = { + { -1845, 7534}, + { -1805, 7506}, + { -1799, 7525}, +}; + +static MCoord ec401[] = { + { -4024, 6447}, + { -4056, 6475}, + { -4054, 6461}, +}; + +static MCoord ec402[] = { + { 12019, 534}, + { 11996, 517}, + { 12016, 520}, +}; + +static MCoord ec403[] = { + { -7654, 6346}, + { -7709, 6360}, + { -7686, 6342}, +}; + +static MCoord ec404[] = { + { 13106, 3083}, + { 13094, 3054}, + { 13106, 3068}, +}; + +static MCoord ec405[] = { + { 12190, -509}, + { 12192, -535}, + { 12203, -520}, +}; + +static MCoord ec406[] = { + { -6915, 1238}, + { -6893, 1215}, + { -6903, 1228}, +}; + +static MCoord ec407[] = { + { -7152, -5408}, + { -7124, -5426}, + { -7113, -5412}, +}; + +static MCoord ec408[] = { + { 5307, 7097}, + { 5282, 7127}, + { 5283, 7110}, +}; + +static MCoord ec409[] = { + {-17663, 5197}, + {-17680, 5173}, + {-17651, 5182}, +}; + +static MCoord ec410[] = { + { 11988, 1230}, + { 12012, 1210}, + { 12003, 1223}, +}; + +static MCoord ec411[] = { + {-15717, 173}, + {-15741, 190}, + {-15731, 175}, +}; + +static MCoord ec412[] = { + { 665, 40}, + { 654, 17}, + { 672, 27}, +}; + +static MCoord ec413[] = { + { 1497, 6859}, + { 1524, 6884}, + { 1479, 6874}, +}; + +static MCoord ec414[] = { + { -7418, -5083}, + { -7440, -5057}, + { -7438, -5077}, +}; + +static MCoord ec415[] = { + { 583, 5257}, + { 542, 5243}, + { 574, 5244}, +}; + +static MCoord ec416[] = { + { 13500, 3457}, + { 13479, 3432}, + { 13494, 3440}, +}; + +static MCoord ec417[] = { + { -6803, 6058}, + { -6825, 6035}, + { -6788, 6041}, +}; + +static MCoord ec418[] = { + {-12259, 4826}, + {-12253, 4809}, + {-12261, 4839}, +}; + +static MCoord ec419[] = { + { -7496, -5208}, + { -7484, -5179}, + { -7496, -5191}, +}; + +static MCoord ec420[] = { + { -7997, -268}, + { -8020, -288}, + { -8004, -283}, +}; + +static MCoord ec421[] = { + { -1774, 2867}, + { -1790, 2875}, + { -1783, 2849}, +}; + +static MCoord ec422[] = { + { 4024, 1562}, + { 4009, 1581}, + { 3999, 1574}, +}; + +static MCoord ec423[] = { + { 13652, -1144}, + { 13669, -1118}, + { 13659, -1129}, +}; + +static MCoord ec424[] = { + { 16135, -934}, + { 16146, -962}, + { 16145, -945}, +}; + +static MCoord ec425[] = { + { 15652, -763}, + { 15667, -783}, + { 15669, -764}, +}; + +static MCoord ec426[] = { + { 4188, 1678}, + { 4202, 1670}, + { 4175, 1688}, +}; + +static MCoord ec427[] = { + { -6146, 1562}, + { -6136, 1537}, + { -6132, 1555}, +}; + +static MCoord ec428[] = { + {-17706, 5191}, + {-17743, 5176}, + {-17719, 5175}, +}; + +static MCoord ec429[] = { + { -7373, -4516}, + { -7407, -4505}, + { -7397, -4520}, +}; + +static MCoord ec430[] = { + { -5135, 8199}, + { -5254, 8221}, + { -5257, 8205}, +}; + +static MCoord ec431[] = { + { 9247, 1084}, + { 9238, 1062}, + { 9254, 1064}, +}; + +static MCoord ec432[] = { + { 16810, -1615}, + { 16803, -1630}, + { 16827, -1629}, +}; + +static MCoord ec433[] = { + { 7861, 7285}, + { 7910, 7275}, + { 7923, 7296}, +}; + +static MCoord ec434[] = { + { 10342, -6545}, + { 10308, -6520}, + { 10308, -6535}, +}; + +static MCoord ec435[] = { + { 14487, 1365}, + { 14472, 1341}, + { 14488, 1351}, +}; + +static MCoord ec436[] = { + { 5047, 2623}, + { 5052, 2596}, + { 5059, 2615}, +}; + +static MCoord ec437[] = { + { -5036, 61}, + { -5041, 32}, + { -5034, 46}, +}; + +static MCoord ec438[] = { + { 9465, 1624}, + { 9447, 1601}, + { 9462, 1609}, +}; + +static MCoord ec439[] = { + { 12402, -846}, + { 12426, -831}, + { 12411, -831}, +}; + +static MCoord ec440[] = { + {-11477, 7798}, + {-11431, 7776}, + {-11399, 7794}, +}; + +static MCoord ec441[] = { + { 9830, 817}, + { 9831, 790}, + { 9840, 804}, +}; + +static MCoord ec442[] = { + { -2518, 1696}, + { -2510, 1714}, + { -2533, 1705}, +}; + +static MCoord ec443[] = { + { 17810, -1910}, + { 17835, -1902}, + { 17832, -1895}, +}; + +static MCoord ec444[] = { + { 16803, -2142}, + { 16787, -2151}, + { 16808, -2162}, +}; + +static MCoord ec445[] = { + { -6920, -5493}, + { -6970, -5493}, + { -6939, -5498}, +}; + +static MCoord ec446[] = { + { 12188, 1503}, + { 12192, 1477}, + { 12201, 1493}, +}; + +static MCoord ec447[] = { + { -2356, 1504}, + { -2375, 1520}, + { -2372, 1500}, +}; + +static MCoord ec448[] = { + { -7527, 6870}, + { -7506, 6844}, + { -7496, 6861}, +}; + +static MCoord ec449[] = { + { -9640, 2839}, + { -9666, 2822}, + { -9650, 2829}, +}; + +static MCoord ec450[] = { + { -8946, -77}, + { -8947, -90}, + { -8928, -71}, +}; + +static MCoord ec451[] = { + { -435, 5441}, + { -462, 5419}, + { -437, 5426}, +}; + +static MCoord ec452[] = { + { 10393, 1039}, + { 10398, 1015}, + { 10407, 1031}, +}; + +static MCoord ec453[] = { + { 1545, 6889}, + { 1587, 6913}, + { 1555, 6905}, +}; + +static MCoord ec454[] = { + { -4516, -6072}, + { -4565, -6056}, + { -4547, -6066}, +}; + +static MCoord ec455[] = { + { -7723, 6943}, + { -7717, 6920}, + { -7682, 6933}, +}; + +static MCoord ec456[] = { + { 1422, 6816}, + { 1479, 6833}, + { 1439, 6830}, +}; + +static MCoord ec457[] = { + {-14911, -7709}, + {-14996, -7692}, + {-14985, -7708}, +}; + +static MCoord ec458[] = { + { -8026, 2534}, + { -8045, 2511}, + { -8034, 2520}, +}; + +static MCoord ec459[] = { + { -448, 5341}, + { -447, 5322}, + { -419, 5330}, +}; + +static MCoord ec460[] = { + { 16816, -1534}, + { 16815, -1506}, + { 16812, -1515}, +}; + +static MCoord ec461[] = { + { 13085, -76}, + { 13058, -84}, + { 13080, -84}, +}; + +static MCoord ec462[] = { + {-17809, 5190}, + {-17801, 5171}, + {-17778, 5179}, +}; + +static MCoord ec463[] = { + { -3792, 6563}, + { -3749, 6567}, + { -3769, 6583}, +}; + +static MCoord ec464[] = { + { 1819, 6953}, + { 1874, 6972}, + { 1832, 6967}, +}; + +static MCoord ec465[] = { + {-17299, 6056}, + {-17254, 6037}, + {-17275, 6047}, +}; + +static MCoord ec466[] = { + { 1918, 6980}, + { 1945, 6998}, + { 1895, 6997}, +}; + +static MCoord ec467[] = { + { -7491, -4838}, + { -7499, -4815}, + { -7513, -4829}, +}; + +static MCoord ec468[] = { + { 3313, -210}, + { 3296, -194}, + { 3291, -204}, +}; + +static MCoord ec469[] = { + { 13882, -815}, + { 13864, -825}, + { 13881, -834}, +}; + +static MCoord ec470[] = { + { -7533, 3789}, + { -7517, 3814}, + { -7523, 3806}, +}; + +static MCoord ec471[] = { + {-13236, 5648}, + {-13216, 5624}, + {-13214, 5638}, +}; + +static MCoord ec472[] = { + {-13077, -7444}, + {-13156, -7434}, + {-13138, -7450}, +}; + +static MCoord ec473[] = { + { 15015, -924}, + { 15023, -945}, + { 15033, -933}, +}; + +static MCoord ec474[] = { + { 12946, 3469}, + { 12933, 3444}, + { 12946, 3456}, +}; + +static MCoord ec475[] = { + { -7954, 5652}, + { -7987, 5632}, + { -7965, 5637}, +}; + +static MCoord ec476[] = { + { 1092, 5515}, + { 1072, 5490}, + { 1086, 5500}, +}; + +static MCoord ec477[] = { + { -7433, -4797}, + { -7398, -4793}, + { -7427, -4786}, +}; + +static MCoord ec478[] = { + { 1175, 5495}, + { 1185, 5472}, + { 1200, 5484}, +}; + +static MCoord ec479[] = { + { -9028, 7682}, + { -9015, 7658}, + { -8978, 7670}, +}; + +static MCoord ec480[] = { + {-12464, 4978}, + {-12433, 4960}, + {-12442, 4971}, +}; + +static MCoord ec481[] = { + { 9108, 2216}, + { 9113, 2241}, + { 9104, 2236}, +}; + +static MCoord ec482[] = { + {-13289, 5680}, + {-13289, 5660}, + {-13266, 5662}, +}; + +static MCoord ec483[] = { + { 15702, -787}, + { 15703, -807}, + { 15717, -797}, +}; + +static MCoord ec484[] = { + { 15461, -501}, + { 15461, -526}, + { 15469, -513}, +}; + +static MCoord ec485[] = { + { -6151, 1632}, + { -6131, 1624}, + { -6140, 1641}, +}; + +static MCoord ec486[] = { + { -6093, 1372}, + { -6091, 1395}, + { -6102, 1383}, +}; + +static MCoord ec487[] = { + { 15127, -2375}, + { 15116, -2352}, + { 15112, -2365}, +}; + +static MCoord ec488[] = { + {-12838, 5279}, + {-12839, 5253}, + {-12831, 5265}, +}; + +static MCoord ec489[] = { + { 16619, -5053}, + { 16603, -5076}, + { 16621, -5069}, +}; + +static MCoord ec490[] = { + { 16941, -1946}, + { 16925, -1944}, + { 16941, -1963}, +}; + +static MCoord ec491[] = { + {-14855, -7720}, + {-14774, -7730}, + {-14799, -7712}, +}; + +static MCoord ec492[] = { + { 4421, -1215}, + { 4443, -1225}, + { 4437, -1213}, +}; + +static MCoord ec493[] = { + { -6609, -6587}, + { -6577, -6565}, + { -6605, -6572}, +}; + +static MCoord ec494[] = { + {-10207, 7597}, + {-10298, 7585}, + {-10247, 7583}, +}; + +static MCoord ec495[] = { + { 2722, 3582}, + { 2714, 3556}, + { 2719, 3567}, +}; + +static MCoord ec496[] = { + { 12806, -370}, + { 12828, -363}, + { 12817, -355}, +}; + +static MCoord ec497[] = { + {-12707, -7450}, + {-12759, -7432}, + {-12759, -7449}, +}; + +static MCoord ec498[] = { + { 2294, 6029}, + { 2258, 6012}, + { 2284, 6015}, +}; + +static MCoord ec499[] = { + { -7634, 3482}, + { -7642, 3473}, + { -7620, 3493}, +}; + +static MCoord ec500[] = { + { -5112, -14}, + { -5129, -32}, + { -5117, -27}, +}; + +static MCoord ec501[] = { + { 16579, -1080}, + { 16603, -1076}, + { 16591, -1069}, +}; + +static MCoord ec502[] = { + { -7369, -5222}, + { -7393, -5200}, + { -7385, -5211}, +}; + +static MCoord ec503[] = { + { 4984, -1709}, + { 4996, -1685}, + { 4988, -1694}, +}; + +static MCoord ec504[] = { + { 2544, 4002}, + { 2517, 3993}, + { 2530, 3987}, +}; + +static MCoord ec505[] = { + { 12960, -780}, + { 12966, -797}, + { 12979, -787}, +}; + +static MCoord ec506[] = { + {-12926, 5282}, + {-12908, 5259}, + {-12906, 5271}, +}; + +static MCoord ec507[] = { + { 1475, 5526}, + { 1491, 5506}, + { 1501, 5519}, +}; + +static MCoord ec508[] = { + { -7500, -5146}, + { -7468, -5132}, + { -7489, -5134}, +}; + +static MCoord ec509[] = { + { 9366, 1951}, + { 9383, 1934}, + { 9382, 1949}, +}; + +static MCoord ec510[] = { + { -7428, -4479}, + { -7402, -4471}, + { -7428, -4466}, +}; + +static MCoord ec511[] = { + { 2316, 7027}, + { 2348, 7048}, + { 2312, 7044}, +}; + +static MCoord ec512[] = { + { -7522, -4985}, + { -7538, -4966}, + { -7546, -4977}, +}; + +static MCoord ec513[] = { + { 154, 3913}, + { 133, 3898}, + { 154, 3899}, +}; + +static MCoord ec514[] = { + { 4814, 2998}, + { 4817, 2976}, + { 4828, 2987}, +}; + +static MCoord ec515[] = { + { -8662, 1628}, + { -8638, 1638}, + { -8649, 1637}, +}; + +static MCoord ec516[] = { + { -4124, 6326}, + { -4154, 6342}, + { -4167, 6336}, +}; + +static MCoord ec517[] = { + { -629, 5588}, + { -635, 5570}, + { -608, 5576}, +}; + +static MCoord ec518[] = { + { -4380, 5996}, + { -4344, 6001}, + { -4381, 6009}, +}; + +static MCoord ec519[] = { + { -718, 6230}, + { -694, 6208}, + { -695, 6218}, +}; + +static MCoord ec520[] = { + { -5037, 218}, + { -5045, 200}, + { -5030, 204}, +}; + +static MCoord ec521[] = { + { 17993, -1699}, + {-17990, -1682}, + { 17995, -1686}, +}; + +static MCoord ec522[] = { + {-15987, 5529}, + {-16008, 5507}, + {-15991, 5514}, +}; + +static MCoord ec523[] = { + { -7891, 7612}, + { -7943, 7593}, + { -7902, 7594}, +}; + +static MCoord ec524[] = { + { 7212, -7057}, + { 7201, -7037}, + { 7174, -7040}, +}; + +static MCoord ec525[] = { + {-10048, 6902}, + {-10055, 6882}, + {-10023, 6885}, +}; + +static MCoord ec526[] = { + { -5007, 65}, + { -5022, 49}, + { -5006, 51}, +}; + +static MCoord ec527[] = { + { -5110, 6992}, + { -5118, 6972}, + { -5083, 6980}, +}; + +static MCoord ec528[] = { + { -7315, 2238}, + { -7289, 2234}, + { -7300, 2242}, +}; + +static MCoord ec529[] = { + { 9835, 1234}, + { 9841, 1256}, + { 9832, 1250}, +}; + +static MCoord ec530[] = { + { -2430, 1657}, + { -2418, 1662}, + { -2442, 1666}, +}; + +static MCoord ec531[] = { + { -7505, -4609}, + { -7481, -4594}, + { -7497, -4594}, +}; + +static MCoord ec532[] = { + { 13463, 773}, + { 13455, 750}, + { 13464, 757}, +}; + +static MCoord ec533[] = { + { 1485, 4415}, + { 1508, 4397}, + { 1500, 4406}, +}; + +static MCoord ec534[] = { + { -9158, -41}, + { -9146, -32}, + { -9165, -28}, +}; + +static MCoord ec535[] = { + { 1986, 6040}, + { 1982, 6021}, + { 2007, 6025}, +}; + +static MCoord ec536[] = { + { 422, 4004}, + { 400, 4004}, + { 419, 3991}, +}; + +static MCoord ec537[] = { + { 913, 6357}, + { 862, 6356}, + { 885, 6349}, +}; + +static MCoord ec538[] = { + { 2706, 3778}, + { 2678, 3776}, + { 2692, 3769}, +}; + +static MCoord ec539[] = { + { -5533, -6124}, + { -5494, -6116}, + { -5525, -6111}, +}; + +static MCoord ec540[] = { + { -7531, -5078}, + { -7526, -5056}, + { -7541, -5066}, +}; + +static MCoord ec541[] = { + {-13578, 5732}, + {-13577, 5712}, + {-13558, 5719}, +}; + +static MCoord ec542[] = { + { 1667, 4296}, + { 1700, 4292}, + { 1692, 4297}, +}; + +static MCoord ec543[] = { + { 10399, 138}, + { 10377, 139}, + { 10387, 130}, +}; + +static MCoord ec544[] = { + { -9078, -28}, + { -9062, -24}, + { -9078, -14}, +}; + +static MCoord ec545[] = { + { -8673, 2058}, + { -8693, 2043}, + { -8682, 2044}, +}; + +static MCoord ec546[] = { + { 2735, 3687}, + { 2706, 3680}, + { 2719, 3680}, +}; + +static MCoord ec547[] = { + { 12566, 343}, + { 12553, 362}, + { 12554, 349}, +}; + +static MCoord ec548[] = { + { 1106, 3380}, + { 1084, 3385}, + { 1090, 3371}, +}; + +static MCoord ec549[] = { + { 13259, -1131}, + { 13258, -1109}, + { 13252, -1116}, +}; + +static MCoord ec550[] = { + { -7522, -4904}, + { -7543, -4887}, + { -7544, -4898}, +}; + +static MCoord ec551[] = { + { 13104, -807}, + { 13088, -823}, + { 13104, -818}, +}; + +static MCoord ec552[] = { + { -7815, 6975}, + { -7853, 6959}, + { -7814, 6961}, +}; + +static MCoord ec553[] = { + { -268, 5896}, + { -308, 5903}, + { -299, 5893}, +}; + +static MCoord ec554[] = { + { 11989, 1195}, + { 11995, 1177}, + { 12003, 1184}, +}; + +static MCoord ec555[] = { + { -7528, -5162}, + { -7511, -5141}, + { -7524, -5146}, +}; + +static MCoord ec556[] = { + { 2065, 3788}, + { 2082, 3771}, + { 2083, 3782}, +}; + +static MCoord ec557[] = { + { -7869, 5644}, + { -7884, 5625}, + { -7868, 5625}, +}; + +static MCoord ec558[] = { + { -8180, 757}, + { -8172, 738}, + { -8168, 749}, +}; + +static MCoord ec559[] = { + { 15109, -842}, + { 15108, -865}, + { 15112, -856}, +}; + +static MCoord ec560[] = { + { -7443, -4576}, + { -7428, -4559}, + { -7446, -4561}, +}; + +static MCoord ec561[] = { + { 7323, -5298}, + { 7355, -5311}, + { 7345, -5300}, +}; + +static MCoord ec562[] = { + { 1643, 4334}, + { 1671, 4328}, + { 1666, 4337}, +}; + +static MCoord ec563[] = { + { -9033, -7306}, + { -8973, -7299}, + { -9007, -7292}, +}; + +static MCoord ec564[] = { + {-16069, 5881}, + {-16101, 5868}, + {-16083, 5866}, +}; + +static MCoord ec565[] = { + { 12778, -811}, + { 12798, -820}, + { 12793, -812}, +}; + +static MCoord ec566[] = { + { -7058, 6277}, + { -7093, 6285}, + { -7069, 6269}, +}; + +static MCoord ec567[] = { + { 15342, -2772}, + { 15349, -2750}, + { 15340, -2756}, +}; + +static MCoord ec568[] = { + { 2473, 3797}, + { 2484, 3780}, + { 2492, 3787}, +}; + +static MCoord ec569[] = { + {-12802, 5205}, + {-12815, 5187}, + {-12798, 5190}, +}; + +static MCoord ec570[] = { + { -7401, -5234}, + { -7420, -5215}, + { -7420, -5223}, +}; + +static MCoord ec571[] = { + { 12172, -1057}, + { 12191, -1055}, + { 12185, -1046}, +}; + +static MCoord ec572[] = { + { -6428, -5472}, + { -6453, -5477}, + { -6416, -5478}, +}; + +static MCoord ec573[] = { + {-12689, 4984}, + {-12684, 4969}, + {-12665, 4976}, +}; + +static MCoord ec574[] = { + {-13328, 5614}, + {-13360, 5605}, + {-13343, 5601}, +}; + +static MCoord ec575[] = { + { 1455, 4522}, + { 1457, 4504}, + { 1470, 4508}, +}; + +static MCoord ec576[] = { + { 3972, -797}, + { 3984, -779}, + { 3972, -785}, +}; + +static MCoord ec577[] = { + {-12882, 5371}, + {-12909, 5356}, + {-12894, 5358}, +}; + +static MCoord ec578[] = { + { 9601, 7712}, + { 9593, 7702}, + { 9653, 7720}, +}; + +static MCoord ec579[] = { + { -6052, 1134}, + { -6071, 1124}, + { -6060, 1124}, +}; + +static MCoord ec580[] = { + { -7524, -4803}, + { -7492, -4796}, + { -7505, -4795}, +}; + +static MCoord ec581[] = { + { -5082, -56}, + { -5099, -67}, + { -5087, -69}, +}; + +static MCoord ec582[] = { + {-13037, 5409}, + {-13060, 5397}, + {-13044, 5392}, +}; + +static MCoord ec583[] = { + { 11945, -842}, + { 11941, -861}, + { 11950, -856}, +}; + +static MCoord ec584[] = { + {-11201, 2453}, + {-11181, 2442}, + {-11184, 2450}, +}; + +static MCoord ec585[] = { + {-14612, 6041}, + {-14653, 6039}, + {-14634, 6033}, +}; + +static MCoord ec586[] = { + { 16771, -1547}, + { 16790, -1539}, + { 16777, -1536}, +}; + +static MCoord ec587[] = { + { -8469, 2975}, + { -8492, 2965}, + { -8484, 2967}, +}; + +static MCoord ec588[] = { + {-10027, 7673}, + {-10114, 7666}, + {-10077, 7664}, +}; + +static MCoord ec589[] = { + { -529, 5571}, + { -530, 5553}, + { -512, 5559}, +}; + +static MCoord ec590[] = { + {-16071, 5540}, + {-16082, 5527}, + {-16060, 5525}, +}; + +static MCoord ec591[] = { + { -7602, 2367}, + { -7584, 2353}, + { -7589, 2361}, +}; + +static MCoord ec592[] = { + { -7794, 2210}, + { -7775, 2199}, + { -7778, 2208}, +}; + +static MCoord ec593[] = { + { -7364, -4575}, + { -7362, -4556}, + { -7375, -4561}, +}; + +static MCoord ec594[] = { + { 15343, -2734}, + { 15343, -2713}, + { 15338, -2719}, +}; + +static MCoord ec595[] = { + { -7558, -4868}, + { -7537, -4855}, + { -7554, -4855}, +}; + +static MCoord ec596[] = { + { -106, 5069}, + { -134, 5072}, + { -128, 5062}, +}; + +static MCoord ec597[] = { + { 2636, 3768}, + { 2612, 3760}, + { 2622, 3759}, +}; + +static MCoord ec598[] = { + { -6146, 5693}, + { -6156, 5673}, + { -6143, 5678}, +}; + +static MCoord ec599[] = { + { -7486, -5213}, + { -7470, -5194}, + { -7482, -5199}, +}; + +static MCoord ec600[] = { + { 14957, -135}, + { 14964, -152}, + { 14969, -143}, +}; + +static MCoord ec601[] = { + { -5947, 1308}, + { -5952, 1324}, + { -5960, 1315}, +}; + +static MCoord ec602[] = { + { 12723, -25}, + { 12712, -36}, + { 12724, -40}, +}; + +static MCoord ec603[] = { + { -5635, 4710}, + { -5635, 4691}, + { -5628, 4693}, +}; + +static MCoord ec604[] = { + { 15735, -840}, + { 15729, -859}, + { 15737, -855}, +}; + +static MCoord ec605[] = { + {-12800, 5172}, + {-12805, 5154}, + {-12791, 5157}, +}; + +static MCoord ec606[] = { + { 4509, -1281}, + { 4517, -1285}, + { 4510, -1267}, +}; + +static MCoord ec607[] = { + { -6838, 1230}, + { -6830, 1215}, + { -6824, 1220}, +}; + +static MCoord ec608[] = { + { 2069, 3885}, + { 2059, 3871}, + { 2068, 3867}, +}; + +static MCoord ec609[] = { + { 14332, -837}, + { 14348, -845}, + { 14349, -837}, +}; + +static MCoord ec610[] = { + { 9600, 7627}, + { 9570, 7619}, + { 9645, 7620}, +}; + +static MCoord ec611[] = { + { 13618, -1167}, + { 13636, -1157}, + { 13629, -1158}, +}; + +static MCoord ec612[] = { + { -6773, -6777}, + { -6734, -6773}, + { -6757, -6764}, +}; + +static MCoord ec613[] = { + {-11988, 3405}, + {-11966, 3399}, + {-11968, 3405}, +}; + +static MCoord ec614[] = { + {-11517, 2816}, + {-11527, 2825}, + {-11530, 2809}, +}; + +static MCoord ec615[] = { + { 829, 5474}, + { 843, 5491}, + { 831, 5489}, +}; + +static MCoord ec616[] = { + { 13332, -410}, + { 13348, -423}, + { 13344, -417}, +}; + +static MCoord ec617[] = { + { -5746, -6452}, + { -5705, -6446}, + { -5725, -6442}, +}; + +static MCoord ec618[] = { + { -7434, 2283}, + { -7417, 2271}, + { -7418, 2278}, +}; + +static MCoord ec619[] = { + {-12368, 4910}, + {-12348, 4894}, + {-12352, 4898}, +}; + +static MCoord ec620[] = { + {-12528, 5043}, + {-12524, 5027}, + {-12512, 5030}, +}; + +static MCoord ec621[] = { + { 1350, 6804}, + { 1381, 6814}, + { 1362, 6820}, +}; + +static MCoord ec622[] = { + { 9818, 1145}, + { 9827, 1162}, + { 9821, 1158}, +}; + +static MCoord ec623[] = { + { 8179, 7538}, + { 8209, 7533}, + { 8215, 7550}, +}; + +static MCoord ec624[] = { + { -7551, -4926}, + { -7537, -4912}, + { -7552, -4913}, +}; + +static MCoord ec625[] = { + { 15255, -1062}, + { 15273, -1067}, + { 15270, -1063}, +}; + +static MCoord ec626[] = { + { -7668, 3470}, + { -7692, 3468}, + { -7686, 3469}, +}; + +static MCoord ec627[] = { + { -9480, 2935}, + { -9496, 2922}, + { -9486, 2925}, +}; + +static MCoord ec628[] = { + { -6487, 1772}, + { -6469, 1771}, + { -6471, 1777}, +}; + +static MCoord ec629[] = { + { 3221, -48}, + { 3221, -30}, + { 3217, -38}, +}; + +static MCoord ec630[] = { + {-14576, 6060}, + {-14609, 6054}, + {-14602, 6050}, +}; + +static MCoord ec631[] = { + { -7430, -4501}, + { -7408, -4498}, + { -7416, -4492}, +}; + +static MCoord ec632[] = { + {-12528, 5028}, + {-12525, 5011}, + {-12518, 5015}, +}; + +static MCoord ec633[] = { + { -9153, 1879}, + { -9171, 1871}, + { -9163, 1871}, +}; + +static MCoord ec634[] = { + { 5209, 1223}, + { 5226, 1217}, + { 5223, 1221}, +}; + +static MCoord ec635[] = { + { -7962, 2280}, + { -7946, 2270}, + { -7949, 2274}, +}; + +static MCoord ec636[] = { + { -9685, 2812}, + { -9696, 2798}, + { -9691, 2799}, +}; + +static MCoord ec637[] = { + { 1310, 6809}, + { 1291, 6794}, + { 1303, 6795}, +}; + +static MCoord ec638[] = { + { -7830, 2240}, + { -7816, 2233}, + { -7814, 2239}, +}; + +static MCoord ec639[] = { + { 9829, 1073}, + { 9824, 1087}, + { 9819, 1083}, +}; + +static MCoord ec640[] = { + { 9734, 206}, + { 9725, 219}, + { 9724, 213}, +}; + +static MCoord ec641[] = { + { -8798, 1790}, + { -8789, 1803}, + { -8793, 1803}, +}; +MRegion ereg[] = { + {(char *)0, ec0, 999}, + {(char *)0, ec1, 657}, + {(char *)0, ec2, 418}, + {(char *)0, ec3, 116}, + {(char *)0, ec4, 202}, + {(char *)0, ec5, 98}, + {(char *)0, ec6, 51}, + {(char *)0, ec7, 33}, + {(char *)0, ec8, 94}, + {(char *)0, ec9, 33}, + {(char *)0, ec10, 33}, + {(char *)0, ec11, 31}, + {(char *)0, ec12, 30}, + {(char *)0, ec13, 33}, + {(char *)0, ec14, 43}, + {(char *)0, ec15, 22}, + {(char *)0, ec16, 21}, + {(char *)0, ec17, 20}, + {(char *)0, ec18, 18}, + {(char *)0, ec19, 20}, + {(char *)0, ec20, 20}, + {(char *)0, ec21, 18}, + {(char *)0, ec22, 16}, + {(char *)0, ec23, 23}, + {(char *)0, ec24, 14}, + {(char *)0, ec25, 16}, + {(char *)0, ec26, 26}, + {(char *)0, ec27, 14}, + {(char *)0, ec28, 20}, + {(char *)0, ec29, 15}, + {(char *)0, ec30, 27}, + {(char *)0, ec31, 25}, + {(char *)0, ec32, 26}, + {(char *)0, ec33, 11}, + {(char *)0, ec34, 18}, + {(char *)0, ec35, 14}, + {(char *)0, ec36, 11}, + {(char *)0, ec37, 9}, + {(char *)0, ec38, 12}, + {(char *)0, ec39, 22}, + {(char *)0, ec40, 9}, + {(char *)0, ec41, 12}, + {(char *)0, ec42, 9}, + {(char *)0, ec43, 17}, + {(char *)0, ec44, 14}, + {(char *)0, ec45, 13}, + {(char *)0, ec46, 8}, + {(char *)0, ec47, 9}, + {(char *)0, ec48, 14}, + {(char *)0, ec49, 9}, + {(char *)0, ec50, 8}, + {(char *)0, ec51, 8}, + {(char *)0, ec52, 7}, + {(char *)0, ec53, 9}, + {(char *)0, ec54, 8}, + {(char *)0, ec55, 7}, + {(char *)0, ec56, 8}, + {(char *)0, ec57, 11}, + {(char *)0, ec58, 11}, + {(char *)0, ec59, 7}, + {(char *)0, ec60, 8}, + {(char *)0, ec61, 12}, + {(char *)0, ec62, 6}, + {(char *)0, ec63, 6}, + {(char *)0, ec64, 12}, + {(char *)0, ec65, 7}, + {(char *)0, ec66, 6}, + {(char *)0, ec67, 11}, + {(char *)0, ec68, 9}, + {(char *)0, ec69, 6}, + {(char *)0, ec70, 7}, + {(char *)0, ec71, 6}, + {(char *)0, ec72, 6}, + {(char *)0, ec73, 6}, + {(char *)0, ec74, 11}, + {(char *)0, ec75, 7}, + {(char *)0, ec76, 6}, + {(char *)0, ec77, 9}, + {(char *)0, ec78, 6}, + {(char *)0, ec79, 4}, + {(char *)0, ec80, 6}, + {(char *)0, ec81, 7}, + {(char *)0, ec82, 6}, + {(char *)0, ec83, 5}, + {(char *)0, ec84, 5}, + {(char *)0, ec85, 4}, + {(char *)0, ec86, 8}, + {(char *)0, ec87, 4}, + {(char *)0, ec88, 10}, + {(char *)0, ec89, 5}, + {(char *)0, ec90, 4}, + {(char *)0, ec91, 5}, + {(char *)0, ec92, 6}, + {(char *)0, ec93, 6}, + {(char *)0, ec94, 4}, + {(char *)0, ec95, 4}, + {(char *)0, ec96, 4}, + {(char *)0, ec97, 5}, + {(char *)0, ec98, 4}, + {(char *)0, ec99, 6}, + {(char *)0, ec100, 4}, + {(char *)0, ec101, 7}, + {(char *)0, ec102, 8}, + {(char *)0, ec103, 4}, + {(char *)0, ec104, 6}, + {(char *)0, ec105, 7}, + {(char *)0, ec106, 8}, + {(char *)0, ec107, 5}, + {(char *)0, ec108, 4}, + {(char *)0, ec109, 4}, + {(char *)0, ec110, 6}, + {(char *)0, ec111, 4}, + {(char *)0, ec112, 5}, + {(char *)0, ec113, 6}, + {(char *)0, ec114, 6}, + {(char *)0, ec115, 5}, + {(char *)0, ec116, 4}, + {(char *)0, ec117, 8}, + {(char *)0, ec118, 5}, + {(char *)0, ec119, 5}, + {(char *)0, ec120, 8}, + {(char *)0, ec121, 6}, + {(char *)0, ec122, 4}, + {(char *)0, ec123, 4}, + {(char *)0, ec124, 7}, + {(char *)0, ec125, 4}, + {(char *)0, ec126, 4}, + {(char *)0, ec127, 5}, + {(char *)0, ec128, 7}, + {(char *)0, ec129, 4}, + {(char *)0, ec130, 4}, + {(char *)0, ec131, 4}, + {(char *)0, ec132, 4}, + {(char *)0, ec133, 4}, + {(char *)0, ec134, 5}, + {(char *)0, ec135, 6}, + {(char *)0, ec136, 4}, + {(char *)0, ec137, 5}, + {(char *)0, ec138, 7}, + {(char *)0, ec139, 4}, + {(char *)0, ec140, 6}, + {(char *)0, ec141, 4}, + {(char *)0, ec142, 4}, + {(char *)0, ec143, 4}, + {(char *)0, ec144, 5}, + {(char *)0, ec145, 4}, + {(char *)0, ec146, 6}, + {(char *)0, ec147, 4}, + {(char *)0, ec148, 4}, + {(char *)0, ec149, 5}, + {(char *)0, ec150, 4}, + {(char *)0, ec151, 5}, + {(char *)0, ec152, 5}, + {(char *)0, ec153, 4}, + {(char *)0, ec154, 6}, + {(char *)0, ec155, 4}, + {(char *)0, ec156, 4}, + {(char *)0, ec157, 5}, + {(char *)0, ec158, 4}, + {(char *)0, ec159, 4}, + {(char *)0, ec160, 4}, + {(char *)0, ec161, 4}, + {(char *)0, ec162, 5}, + {(char *)0, ec163, 4}, + {(char *)0, ec164, 5}, + {(char *)0, ec165, 4}, + {(char *)0, ec166, 4}, + {(char *)0, ec167, 4}, + {(char *)0, ec168, 4}, + {(char *)0, ec169, 6}, + {(char *)0, ec170, 7}, + {(char *)0, ec171, 5}, + {(char *)0, ec172, 4}, + {(char *)0, ec173, 4}, + {(char *)0, ec174, 4}, + {(char *)0, ec175, 4}, + {(char *)0, ec176, 4}, + {(char *)0, ec177, 4}, + {(char *)0, ec178, 4}, + {(char *)0, ec179, 5}, + {(char *)0, ec180, 5}, + {(char *)0, ec181, 5}, + {(char *)0, ec182, 4}, + {(char *)0, ec183, 4}, + {(char *)0, ec184, 4}, + {(char *)0, ec185, 4}, + {(char *)0, ec186, 4}, + {(char *)0, ec187, 4}, + {(char *)0, ec188, 5}, + {(char *)0, ec189, 5}, + {(char *)0, ec190, 5}, + {(char *)0, ec191, 5}, + {(char *)0, ec192, 6}, + {(char *)0, ec193, 4}, + {(char *)0, ec194, 4}, + {(char *)0, ec195, 4}, + {(char *)0, ec196, 4}, + {(char *)0, ec197, 4}, + {(char *)0, ec198, 5}, + {(char *)0, ec199, 4}, + {(char *)0, ec200, 4}, + {(char *)0, ec201, 5}, + {(char *)0, ec202, 4}, + {(char *)0, ec203, 4}, + {(char *)0, ec204, 4}, + {(char *)0, ec205, 4}, + {(char *)0, ec206, 4}, + {(char *)0, ec207, 4}, + {(char *)0, ec208, 4}, + {(char *)0, ec209, 4}, + {(char *)0, ec210, 4}, + {(char *)0, ec211, 4}, + {(char *)0, ec212, 4}, + {(char *)0, ec213, 4}, + {(char *)0, ec214, 4}, + {(char *)0, ec215, 4}, + {(char *)0, ec216, 4}, + {(char *)0, ec217, 4}, + {(char *)0, ec218, 5}, + {(char *)0, ec219, 4}, + {(char *)0, ec220, 5}, + {(char *)0, ec221, 4}, + {(char *)0, ec222, 4}, + {(char *)0, ec223, 4}, + {(char *)0, ec224, 4}, + {(char *)0, ec225, 4}, + {(char *)0, ec226, 4}, + {(char *)0, ec227, 4}, + {(char *)0, ec228, 4}, + {(char *)0, ec229, 4}, + {(char *)0, ec230, 4}, + {(char *)0, ec231, 5}, + {(char *)0, ec232, 4}, + {(char *)0, ec233, 4}, + {(char *)0, ec234, 5}, + {(char *)0, ec235, 4}, + {(char *)0, ec236, 4}, + {(char *)0, ec237, 4}, + {(char *)0, ec238, 4}, + {(char *)0, ec239, 4}, + {(char *)0, ec240, 4}, + {(char *)0, ec241, 4}, + {(char *)0, ec242, 4}, + {(char *)0, ec243, 5}, + {(char *)0, ec244, 4}, + {(char *)0, ec245, 4}, + {(char *)0, ec246, 4}, + {(char *)0, ec247, 4}, + {(char *)0, ec248, 4}, + {(char *)0, ec249, 4}, + {(char *)0, ec250, 4}, + {(char *)0, ec251, 4}, + {(char *)0, ec252, 5}, + {(char *)0, ec253, 4}, + {(char *)0, ec254, 4}, + {(char *)0, ec255, 4}, + {(char *)0, ec256, 4}, + {(char *)0, ec257, 4}, + {(char *)0, ec258, 4}, + {(char *)0, ec259, 4}, + {(char *)0, ec260, 4}, + {(char *)0, ec261, 4}, + {(char *)0, ec262, 4}, + {(char *)0, ec263, 4}, + {(char *)0, ec264, 4}, + {(char *)0, ec265, 4}, + {(char *)0, ec266, 4}, + {(char *)0, ec267, 4}, + {(char *)0, ec268, 4}, + {(char *)0, ec269, 4}, + {(char *)0, ec270, 4}, + {(char *)0, ec271, 4}, + {(char *)0, ec272, 4}, + {(char *)0, ec273, 4}, + {(char *)0, ec274, 4}, + {(char *)0, ec275, 5}, + {(char *)0, ec276, 4}, + {(char *)0, ec277, 4}, + {(char *)0, ec278, 4}, + {(char *)0, ec279, 4}, + {(char *)0, ec280, 4}, + {(char *)0, ec281, 4}, + {(char *)0, ec282, 4}, + {(char *)0, ec283, 4}, + {(char *)0, ec284, 4}, + {(char *)0, ec285, 4}, + {(char *)0, ec286, 4}, + {(char *)0, ec287, 4}, + {(char *)0, ec288, 4}, + {(char *)0, ec289, 4}, + {(char *)0, ec290, 4}, + {(char *)0, ec291, 4}, + {(char *)0, ec292, 4}, + {(char *)0, ec293, 4}, + {(char *)0, ec294, 4}, + {(char *)0, ec295, 4}, + {(char *)0, ec296, 4}, + {(char *)0, ec297, 4}, + {(char *)0, ec298, 4}, + {(char *)0, ec299, 4}, + {(char *)0, ec300, 4}, + {(char *)0, ec301, 4}, + {(char *)0, ec302, 4}, + {(char *)0, ec303, 4}, + {(char *)0, ec304, 4}, + {(char *)0, ec305, 4}, + {(char *)0, ec306, 4}, + {(char *)0, ec307, 4}, + {(char *)0, ec308, 4}, + {(char *)0, ec309, 4}, + {(char *)0, ec310, 4}, + {(char *)0, ec311, 4}, + {(char *)0, ec312, 4}, + {(char *)0, ec313, 4}, + {(char *)0, ec314, 4}, + {(char *)0, ec315, 4}, + {(char *)0, ec316, 4}, + {(char *)0, ec317, 4}, + {(char *)0, ec318, 4}, + {(char *)0, ec319, 4}, + {(char *)0, ec320, 4}, + {(char *)0, ec321, 4}, + {(char *)0, ec322, 4}, + {(char *)0, ec323, 4}, + {(char *)0, ec324, 4}, + {(char *)0, ec325, 4}, + {(char *)0, ec326, 4}, + {(char *)0, ec327, 4}, + {(char *)0, ec328, 4}, + {(char *)0, ec329, 4}, + {(char *)0, ec330, 4}, + {(char *)0, ec331, 4}, + {(char *)0, ec332, 4}, + {(char *)0, ec333, 4}, + {(char *)0, ec334, 4}, + {(char *)0, ec335, 4}, + {(char *)0, ec336, 4}, + {(char *)0, ec337, 4}, + {(char *)0, ec338, 4}, + {(char *)0, ec339, 4}, + {(char *)0, ec340, 3}, + {(char *)0, ec341, 4}, + {(char *)0, ec342, 3}, + {(char *)0, ec343, 4}, + {(char *)0, ec344, 4}, + {(char *)0, ec345, 4}, + {(char *)0, ec346, 4}, + {(char *)0, ec347, 4}, + {(char *)0, ec348, 4}, + {(char *)0, ec349, 4}, + {(char *)0, ec350, 4}, + {(char *)0, ec351, 3}, + {(char *)0, ec352, 3}, + {(char *)0, ec353, 4}, + {(char *)0, ec354, 3}, + {(char *)0, ec355, 3}, + {(char *)0, ec356, 3}, + {(char *)0, ec357, 4}, + {(char *)0, ec358, 3}, + {(char *)0, ec359, 4}, + {(char *)0, ec360, 3}, + {(char *)0, ec361, 3}, + {(char *)0, ec362, 3}, + {(char *)0, ec363, 3}, + {(char *)0, ec364, 3}, + {(char *)0, ec365, 3}, + {(char *)0, ec366, 3}, + {(char *)0, ec367, 3}, + {(char *)0, ec368, 3}, + {(char *)0, ec369, 3}, + {(char *)0, ec370, 3}, + {(char *)0, ec371, 4}, + {(char *)0, ec372, 4}, + {(char *)0, ec373, 3}, + {(char *)0, ec374, 3}, + {(char *)0, ec375, 3}, + {(char *)0, ec376, 3}, + {(char *)0, ec377, 4}, + {(char *)0, ec378, 3}, + {(char *)0, ec379, 4}, + {(char *)0, ec380, 3}, + {(char *)0, ec381, 3}, + {(char *)0, ec382, 3}, + {(char *)0, ec383, 3}, + {(char *)0, ec384, 3}, + {(char *)0, ec385, 3}, + {(char *)0, ec386, 3}, + {(char *)0, ec387, 3}, + {(char *)0, ec388, 3}, + {(char *)0, ec389, 3}, + {(char *)0, ec390, 3}, + {(char *)0, ec391, 3}, + {(char *)0, ec392, 3}, + {(char *)0, ec393, 3}, + {(char *)0, ec394, 3}, + {(char *)0, ec395, 3}, + {(char *)0, ec396, 3}, + {(char *)0, ec397, 3}, + {(char *)0, ec398, 3}, + {(char *)0, ec399, 3}, + {(char *)0, ec400, 3}, + {(char *)0, ec401, 3}, + {(char *)0, ec402, 3}, + {(char *)0, ec403, 3}, + {(char *)0, ec404, 3}, + {(char *)0, ec405, 3}, + {(char *)0, ec406, 3}, + {(char *)0, ec407, 3}, + {(char *)0, ec408, 3}, + {(char *)0, ec409, 3}, + {(char *)0, ec410, 3}, + {(char *)0, ec411, 3}, + {(char *)0, ec412, 3}, + {(char *)0, ec413, 3}, + {(char *)0, ec414, 3}, + {(char *)0, ec415, 3}, + {(char *)0, ec416, 3}, + {(char *)0, ec417, 3}, + {(char *)0, ec418, 3}, + {(char *)0, ec419, 3}, + {(char *)0, ec420, 3}, + {(char *)0, ec421, 3}, + {(char *)0, ec422, 3}, + {(char *)0, ec423, 3}, + {(char *)0, ec424, 3}, + {(char *)0, ec425, 3}, + {(char *)0, ec426, 3}, + {(char *)0, ec427, 3}, + {(char *)0, ec428, 3}, + {(char *)0, ec429, 3}, + {(char *)0, ec430, 3}, + {(char *)0, ec431, 3}, + {(char *)0, ec432, 3}, + {(char *)0, ec433, 3}, + {(char *)0, ec434, 3}, + {(char *)0, ec435, 3}, + {(char *)0, ec436, 3}, + {(char *)0, ec437, 3}, + {(char *)0, ec438, 3}, + {(char *)0, ec439, 3}, + {(char *)0, ec440, 3}, + {(char *)0, ec441, 3}, + {(char *)0, ec442, 3}, + {(char *)0, ec443, 3}, + {(char *)0, ec444, 3}, + {(char *)0, ec445, 3}, + {(char *)0, ec446, 3}, + {(char *)0, ec447, 3}, + {(char *)0, ec448, 3}, + {(char *)0, ec449, 3}, + {(char *)0, ec450, 3}, + {(char *)0, ec451, 3}, + {(char *)0, ec452, 3}, + {(char *)0, ec453, 3}, + {(char *)0, ec454, 3}, + {(char *)0, ec455, 3}, + {(char *)0, ec456, 3}, + {(char *)0, ec457, 3}, + {(char *)0, ec458, 3}, + {(char *)0, ec459, 3}, + {(char *)0, ec460, 3}, + {(char *)0, ec461, 3}, + {(char *)0, ec462, 3}, + {(char *)0, ec463, 3}, + {(char *)0, ec464, 3}, + {(char *)0, ec465, 3}, + {(char *)0, ec466, 3}, + {(char *)0, ec467, 3}, + {(char *)0, ec468, 3}, + {(char *)0, ec469, 3}, + {(char *)0, ec470, 3}, + {(char *)0, ec471, 3}, + {(char *)0, ec472, 3}, + {(char *)0, ec473, 3}, + {(char *)0, ec474, 3}, + {(char *)0, ec475, 3}, + {(char *)0, ec476, 3}, + {(char *)0, ec477, 3}, + {(char *)0, ec478, 3}, + {(char *)0, ec479, 3}, + {(char *)0, ec480, 3}, + {(char *)0, ec481, 3}, + {(char *)0, ec482, 3}, + {(char *)0, ec483, 3}, + {(char *)0, ec484, 3}, + {(char *)0, ec485, 3}, + {(char *)0, ec486, 3}, + {(char *)0, ec487, 3}, + {(char *)0, ec488, 3}, + {(char *)0, ec489, 3}, + {(char *)0, ec490, 3}, + {(char *)0, ec491, 3}, + {(char *)0, ec492, 3}, + {(char *)0, ec493, 3}, + {(char *)0, ec494, 3}, + {(char *)0, ec495, 3}, + {(char *)0, ec496, 3}, + {(char *)0, ec497, 3}, + {(char *)0, ec498, 3}, + {(char *)0, ec499, 3}, + {(char *)0, ec500, 3}, + {(char *)0, ec501, 3}, + {(char *)0, ec502, 3}, + {(char *)0, ec503, 3}, + {(char *)0, ec504, 3}, + {(char *)0, ec505, 3}, + {(char *)0, ec506, 3}, + {(char *)0, ec507, 3}, + {(char *)0, ec508, 3}, + {(char *)0, ec509, 3}, + {(char *)0, ec510, 3}, + {(char *)0, ec511, 3}, + {(char *)0, ec512, 3}, + {(char *)0, ec513, 3}, + {(char *)0, ec514, 3}, + {(char *)0, ec515, 3}, + {(char *)0, ec516, 3}, + {(char *)0, ec517, 3}, + {(char *)0, ec518, 3}, + {(char *)0, ec519, 3}, + {(char *)0, ec520, 3}, + {(char *)0, ec521, 3}, + {(char *)0, ec522, 3}, + {(char *)0, ec523, 3}, + {(char *)0, ec524, 3}, + {(char *)0, ec525, 3}, + {(char *)0, ec526, 3}, + {(char *)0, ec527, 3}, + {(char *)0, ec528, 3}, + {(char *)0, ec529, 3}, + {(char *)0, ec530, 3}, + {(char *)0, ec531, 3}, + {(char *)0, ec532, 3}, + {(char *)0, ec533, 3}, + {(char *)0, ec534, 3}, + {(char *)0, ec535, 3}, + {(char *)0, ec536, 3}, + {(char *)0, ec537, 3}, + {(char *)0, ec538, 3}, + {(char *)0, ec539, 3}, + {(char *)0, ec540, 3}, + {(char *)0, ec541, 3}, + {(char *)0, ec542, 3}, + {(char *)0, ec543, 3}, + {(char *)0, ec544, 3}, + {(char *)0, ec545, 3}, + {(char *)0, ec546, 3}, + {(char *)0, ec547, 3}, + {(char *)0, ec548, 3}, + {(char *)0, ec549, 3}, + {(char *)0, ec550, 3}, + {(char *)0, ec551, 3}, + {(char *)0, ec552, 3}, + {(char *)0, ec553, 3}, + {(char *)0, ec554, 3}, + {(char *)0, ec555, 3}, + {(char *)0, ec556, 3}, + {(char *)0, ec557, 3}, + {(char *)0, ec558, 3}, + {(char *)0, ec559, 3}, + {(char *)0, ec560, 3}, + {(char *)0, ec561, 3}, + {(char *)0, ec562, 3}, + {(char *)0, ec563, 3}, + {(char *)0, ec564, 3}, + {(char *)0, ec565, 3}, + {(char *)0, ec566, 3}, + {(char *)0, ec567, 3}, + {(char *)0, ec568, 3}, + {(char *)0, ec569, 3}, + {(char *)0, ec570, 3}, + {(char *)0, ec571, 3}, + {(char *)0, ec572, 3}, + {(char *)0, ec573, 3}, + {(char *)0, ec574, 3}, + {(char *)0, ec575, 3}, + {(char *)0, ec576, 3}, + {(char *)0, ec577, 3}, + {(char *)0, ec578, 3}, + {(char *)0, ec579, 3}, + {(char *)0, ec580, 3}, + {(char *)0, ec581, 3}, + {(char *)0, ec582, 3}, + {(char *)0, ec583, 3}, + {(char *)0, ec584, 3}, + {(char *)0, ec585, 3}, + {(char *)0, ec586, 3}, + {(char *)0, ec587, 3}, + {(char *)0, ec588, 3}, + {(char *)0, ec589, 3}, + {(char *)0, ec590, 3}, + {(char *)0, ec591, 3}, + {(char *)0, ec592, 3}, + {(char *)0, ec593, 3}, + {(char *)0, ec594, 3}, + {(char *)0, ec595, 3}, + {(char *)0, ec596, 3}, + {(char *)0, ec597, 3}, + {(char *)0, ec598, 3}, + {(char *)0, ec599, 3}, + {(char *)0, ec600, 3}, + {(char *)0, ec601, 3}, + {(char *)0, ec602, 3}, + {(char *)0, ec603, 3}, + {(char *)0, ec604, 3}, + {(char *)0, ec605, 3}, + {(char *)0, ec606, 3}, + {(char *)0, ec607, 3}, + {(char *)0, ec608, 3}, + {(char *)0, ec609, 3}, + {(char *)0, ec610, 3}, + {(char *)0, ec611, 3}, + {(char *)0, ec612, 3}, + {(char *)0, ec613, 3}, + {(char *)0, ec614, 3}, + {(char *)0, ec615, 3}, + {(char *)0, ec616, 3}, + {(char *)0, ec617, 3}, + {(char *)0, ec618, 3}, + {(char *)0, ec619, 3}, + {(char *)0, ec620, 3}, + {(char *)0, ec621, 3}, + {(char *)0, ec622, 3}, + {(char *)0, ec623, 3}, + {(char *)0, ec624, 3}, + {(char *)0, ec625, 3}, + {(char *)0, ec626, 3}, + {(char *)0, ec627, 3}, + {(char *)0, ec628, 3}, + {(char *)0, ec629, 3}, + {(char *)0, ec630, 3}, + {(char *)0, ec631, 3}, + {(char *)0, ec632, 3}, + {(char *)0, ec633, 3}, + {(char *)0, ec634, 3}, + {(char *)0, ec635, 3}, + {(char *)0, ec636, 3}, + {(char *)0, ec637, 3}, + {(char *)0, ec638, 3}, + {(char *)0, ec639, 3}, + {(char *)0, ec640, 3}, + {(char *)0, ec641, 3}, +}; + +int nereg = (sizeof(ereg)/sizeof(ereg[0])); + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: earthmap.c,v $ $Date: 1999/02/22 05:14:13 $ $Revision: 1.2 $ $Name: $"}; diff --git a/GUI/xephem/earthmenu.c b/GUI/xephem/earthmenu.c new file mode 100644 index 0000000..a8566f1 --- /dev/null +++ b/GUI/xephem/earthmenu.c @@ -0,0 +1,5407 @@ +/* code to manage the stuff on the "earth view" display. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +/* these are from earthmap.c */ +extern MRegion ereg[]; +extern int nereg; + +/* info to keep track of object trails. + */ +typedef struct { + Now t_now; /* Now for object at a given time */ + Obj t_obj; /* it's Obj at that time */ + double t_sublat, t_sublng; /* sub lat/lng of object at that time */ + int t_lbl; /* whether this tickmark gets labeled */ + short lvis, lx, ly; /* if land mark visible: screen x and y */ +} Trail; + +/* one row -- one per object */ +#define PNL (MAXNM+16) /* size of room for userData pick name */ +/* N.B. use malloced space for _pn because this struct gets realloced around */ +typedef struct { + Obj *op; /* handy pointer from favs */ + TrState trstate; /* initial and retaining trails options */ + Trail *trail; /* malloced list, current pos always at [0] */ + int ntrail; /* entries in trail[] */ + Widget name_w; /* label to show current object */ + Widget show_w; /* TB whether to show at all */ + Widget wantlbl_w; /* TB whether to add label */ + Widget wantfoot_w; /* TB whether to show footprint */ + Widget wantorb_w; /* TB whether to show earth satellite orbit */ + Widget wantnoorb_w; /* label spacer when orbit not appropriate */ + Widget showtr_w; /* TB whether to show trail (if any) */ + Widget track_w; /* TB whether to keep centered */ + Widget pick_w; /* TB mouse pick info refers to this object */ + Widget slat_w; /* Label for Sub latitude */ + char *slat_pn; /* persistent location for pick name userData */ + Widget slng_w; /* Label for Sub longitude */ + char *slng_pn; /* persistent location for pick name userData */ + Widget el_w; /* Label for Elevation */ + char *el_pn; /* persistent location for pick name userData */ + Widget range_w; /* Label for Range */ + char *range_pn; /* persistent location for pick name userData */ + Widget rrate_w; /* Label for Range Rate */ + char *rrate_pn; /* persistent location for pick name userData */ + Widget sun_w; /* Label for whether sunlit */ + char *sun_pn; /* persistent location for pick name userData */ + Widget age_w; /* Label for TLE age */ + char *age_pn; /* persistent location for pick name userData */ + Pixel pix; /* color to draw */ + int shownbefore; /* set after first shown */ + + short ovis, ox, oy; /* if orbit visible: screen x and y */ +} EObj; + + +/* projection style */ +typedef enum { + CYLG, /* cylindrical graphics */ + CYLI, /* cylindrical image */ + SPHG, /* spherical graphics */ + SPHI, /* spherical image */ + WXMAP /* special weather map */ +} Proj; + +static void e_create_shell (void); +static void e_create_ctrl (void); +static void e_buildfavs (void); +static void e_point_cb (Widget w, XtPointer client, XtPointer call); +static void e_stat_cb (Widget w, XtPointer client, XtPointer call); +static void e_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void e_close_cb (Widget w, XtPointer client, XtPointer call); +static void e_webupdate_cb (Widget w, XtPointer client, XtPointer call); +static void e_cclose_cb (Widget w, XtPointer client, XtPointer call); +static void e_show_cb (Widget w, XtPointer client, XtPointer call); +static void e_wantlbl_cb (Widget w, XtPointer client, XtPointer call); +static void e_wantfoot_cb (Widget w, XtPointer client, XtPointer call); +static void e_wantorb_cb (Widget w, XtPointer client, XtPointer call); +static void e_anim_cb (Widget w, XtPointer client, XtPointer call); +static void e_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void e_set_buttons (int whether); +static void e_chelp_cb (Widget w, XtPointer client, XtPointer call); +static void e_mhelp_cb (Widget w, XtPointer client, XtPointer call); +static void e_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void e_print_cb (Widget w, XtPointer client, XtPointer call); +static void e_print (void); +static void e_ps_annotate (Now *np); +static void e_ps_ll (char *tag, double lt, double lg, int x, int y); +static void e_exp_cb (Widget w, XtPointer client, XtPointer call); +static void e_motion_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static void e_copen_cb (Widget w, XtPointer client, XtPointer call); +static void e_tb_cb (Widget w, XtPointer client, XtPointer call); +static void e_ontrack_cb (Widget w, XtPointer client, XtPointer call); +static void e_onpick_cb (Widget w, XtPointer client, XtPointer call); +static void e_trail_cb (Widget w, XtPointer client, XtPointer call); +static void e_showtgl_cb (Widget w, XtPointer client, XtPointer call); +static void e_wantfoottgl_cb (Widget w, XtPointer client, XtPointer call); +static void e_wantlbltgl_cb (Widget w, XtPointer client, XtPointer call); +static void e_wantorbtgl_cb (Widget w, XtPointer client, XtPointer call); +static void e_wxreload_cb (Widget w, XtPointer client, XtPointer call); +static void e_proj_cb (Widget w, XtPointer client, XtPointer call); +static void e_setmain_cb (Widget w, XtPointer client, XtPointer call); +static void e_latlong_cb (Widget w, XtPointer client, XtPointer call); +static void e_lat0_cb (Widget w, XtPointer client, XtPointer call); +static void e_track_latlng (Widget w, int d, int xb, int yb, double lt, + double lg); +static void e_popup (Widget w, XEvent *ev, unsigned d, unsigned xb, + unsigned yb, int x, int y); +static void e_create_popup (void); +static void e_init_gcs (void); +static void e_copy_pm (void); +static void e_setelatlng (double lt, double lg); +static void e_subobject (Now *np, Obj *op, double *latp, double *longp); +static void e_show_esat_stats (EObj *eop); +static int e_coord (unsigned d, unsigned wb, unsigned hb, double pl, + double pL, short *xp, short *yp); +static void e_drawgrid (unsigned d, unsigned wb, unsigned hb); +static void e_drawtrail (EObj *eop, int d, int wb, int hb); +static void e_draworbit (EObj *eop, int d, int wb, int hb); +static void e_drawname (EObj *eop, int d, int wb, int hb); +static void e_draworbname (EObj *eop, int x, int y); +static int e_drawcross (unsigned d, unsigned wb, unsigned hb, double lt, + double lg, int style); +static int e_drawobject (Now *np, EObj *eop, int d, int wb, int hb); +static int e_drawfootprint (Now *np, EObj *eop, int d, int wb, int hb, + double slat, double slng, double el); +static int e_drawcircle (Pixel pix, unsigned d, unsigned wb, unsigned hb, + double slat, double slng, double rad); +static int e_set_dasize (void); +static int e_uncoord (Proj proj, unsigned d, unsigned xb, unsigned yb, + int x, int y, double *ltp, double *lgp); +static void e_all (int statstoo); +static void e_getcircle (int *wp, int *hp, int *rp, int *xbp, int *ybp); +static void e_map (Now *np); +static void e_mainmenuloc (Now *np, unsigned d, unsigned wb, unsigned hb); +static void e_soleclipse (Now *np, unsigned d, unsigned wb, unsigned hb); +static int e_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void e_sunlit (Now *np, unsigned int d, unsigned int wb, + unsigned int hb); +static void e_msunlit (Now *np, unsigned int d, unsigned int wb, + unsigned int hb); +static void e_ssunlit (Now *np, unsigned int d, unsigned int wb, + unsigned int hb); +static void e_drawcontinents (unsigned d, unsigned wb, unsigned hb); +static void e_drawsites (unsigned d, unsigned wb, unsigned hb); +static int add_to_polyline (XPoint xp[], int xpsize, int i, int vis, int nxp, + int max, int w, int x, int y); +static void e_viewrad (Now *np, double height, double alt, double *radp); +static void e_resettrail (EObj *eop, Now *np, int discard); +static int e_mktrail (TrTS ts[], TrState *statep, XtPointer client); +static Trail *e_growtrail (EObj *eop); +static int e_setupwxpm (int reload, int rebuild); +static int e_issunlit (Now *np, double l, double L); +static void noTrack (void); +static void mollweide_llxy (double l, double L, short *xp, short *yp); +static int mollweide_xyll (int x, int y, double *lp, double *Lp); +static void rd2ll (double ra, double dec, double *lp, double *Lp); +static void ll2rd (double l, double L, double *rap, double *decp); +static int loaddei (void); +static int loadnei (void); +static void drawei (unsigned int ww, unsigned int wh, unsigned int d, + unsigned int xb, unsigned int yb); +static void e_greatCircle (double lt, double lg, double *dp, double *bp); +static void e_plotGreatCircle (unsigned d, unsigned wb, unsigned hb, double lt, double lg); + +static Widget eshell_w; /* main shell */ +static Widget ectrl_w; /* control shell */ +static Widget e_da_w; /* map DrawingArea widget */ +static Widget e_dt_w; /* main date/time stamp label widget */ +static Widget e_cdt_w; /* ctrl menu date/time stamp label widget */ +static Pixmap e_pm; /* use off screen pixmap for smoother drawing */ +static Widget lat_w; /* latitude scale widget */ +static Widget lat0_w; /* PB to set lat 0 */ +static Widget long_w; /* longitude scale widget */ +static Widget zoom_w; /* zoom scale widget */ +static Widget objrc_w; /* main RC in object control dialog */ +static Widget cylg_w; /* cylindrical graphics view toggle button */ +static Widget sphg_w; /* spherical graphics view toggle button */ +static Widget cyli_w; /* cylindrical image view toggle button */ +static Widget sphi_w; /* spherical image view toggle button */ +static Widget wxm_w; /* weather map view toggle button */ +static Widget sites_w; /* TB whether to show sites */ +static Widget altlbl_w; /* label for Altitude, showing units */ +static Widget rangelbl_w; /* label for Range, showing units */ +static Widget rangerlbl_w; /* label for Range Rate, showing units */ +static Widget inertial_w; /* TB whether to maintain inertial reference */ +static Pixel e_bg; /* bg color */ +static GC e_strgc; /* used for text within the drawing area */ +static GC e_olgc; /* used to draw map overlay details */ +static GC e_gc; /* used for all other GXCopy map drawing uses */ +static XFontStruct *e_f; /* used to compute string extents */ +static Proj projection; /* projection style */ + +/* describe each column. + * N.B. meanings must agree with usage in e_buildfavs() + */ +static struct { + Widget *l_wp; /* label widget, if changes at runtime */ + char *label; /* label */ + XtCallbackProc cb; /* column-wide callback, if used */ + char *tip; /* tip */ + Widget col_w; /* the column RC */ +} rhd[] = { + {NULL, "Object\n ", NULL, "Name of object"}, + {NULL, "Show \n ", e_showtgl_cb, + "Toggle the buttons below, which control whether to display object at all"}, + {NULL, "Label\n ", e_wantlbltgl_cb, + "Toggle the buttons below, which control whether to show obj name"}, + {NULL, "Foot\nPrint", e_wantfoottgl_cb, + "Toggle the buttons below, which control whether to show footprint"}, + {NULL, "Orbit\n ", e_wantorbtgl_cb, + "Toggle the buttons below, which control whether to show earth satellite orbit"}, + {NULL, "Trail\n ", NULL, + "Define trail and whether to show time ticks"}, + {NULL, "Track\n ", NULL, "Choose one object to stay centered"}, + {NULL, "Popup\nRef", NULL, + "Choose one object as reference in popup"}, + {NULL, "Sub\nLat", NULL, "Latitude of object ground track, +N"}, + {NULL, "Sub\nLong", NULL, "Longitude of object ground track, +W"}, + {&altlbl_w, "Alt\n ", NULL, "Height above sea level"}, + {&rangelbl_w, "Range\n ", NULL, "Distance from Main Site to object"}, + {&rangerlbl_w,"Range\nRate", NULL, "Rate of change of Range"}, + {NULL, "Sun\nlit", NULL, + "1 if object is in Sun light, 0 in shadow"}, + {NULL, "Age\ndays", NULL, "Age of TLE orbital element set, days"}, +}; + +/* this is to save info about the popup: widgets, and current pointing dir. + */ +#define MAXPUL 8 /* max label widgets we ever need at once */ +typedef struct { + Widget pu_w; /* main Popup parent widget */ + Widget pu_labels[MAXPUL]; /* the misc labels */ + double pu_lt; /* popup's latitude */ + double pu_lg; /* popup's longitude */ + Site *pu_sp; /* Site info if one nearby, else NULL */ +} PopupInfo; +static PopupInfo pu_info; + +/* info to get and keep track of the Earth color resources. + * this does not include the trail colors. + * N.B. the order of the entries in the enum must match the stuff in ecolors[]. + */ +typedef enum { + BORDERC, GRIDC, SITEC, ECLIPSEC, SUNC, HEREC, GREATC, NCOLORS +} EColors; +typedef struct { + char *name; + Pixel p; +} EColor; +static EColor ecolors[NCOLORS] = { + {"EarthBorderColor"}, + {"EarthGridColor"}, + {"EarthSiteColor"}, + {"EarthEclipseColor"}, + {"EarthSunColor"}, + {"EarthHereColor"}, + {"EarthGreatCircleColor"}, +}; + +/* info to keep track of all the "wants" toggle buttons */ +typedef enum { /* client codes for e_tb_cb and indices into wants[] */ + GRID, SITES, SUNLIGHT, LIVEDRAG, MAINMARKER, NITELITES, INERTIALF, + NWANTS /* used to count number of entries -- must be last */ +} Wants; +static int wants[NWANTS]; /* fast state for each of the "wants" TB */ + +enum {SET_MAIN, SET_FROM_MAIN}; /* client codes for e_setmain_cb */ +static char earthcategory[] = "Earth"; /* Save category */ +static char etrres[] = "EarthTrailState"; /* trail resource */ + +static double elat, elng; /* view center lat/long: +N +E rads */ +static double selat, celat; /* sin and cos of map elat */ +static double ira, idec; /* inertial frame ra/dec, rads */ +static Site refsite; /* current reference Site info, if siteok */ +static int refsiteok; /* whether site is valid */ +static Obj **favs; /* current list of loaded favorite objects */ +static int nfavs; /* n favs[] */ +static EObj *eobjs; /* malloced array of column info */ +static int neobjs; /* number of object columns, always >= nfavs */ +static int e_selecting; /* set while our fields are being selected */ + +/* handy ways to fiddle with TBs w/o invoking callbacks */ +#define TBISON(w) XmToggleButtonGetState(w) +#define TBISOFF(w) (!TBISON(w)) +#define TBOFF(w) XmToggleButtonSetState(w, False, False) +#define TBON(w) XmToggleButtonSetState(w, True, False) + +/* constants that define details of various drawing actions */ +#define WIDE_LW 1 /* wide line width */ +#define NARROW_LW 0 /* narrow line width */ +#define LINE_ST LineSolid /* line style for lines */ +#define CAP_ST CapRound /* cap style for lines */ +#define JOIN_ST JoinRound /* join style for lines */ +#define CROSSH 1 /* drawcross code for a cross hair */ +#define PLUSS 2 /* drawcross code for a plus sign */ +#define PLLEN degrad(3) /* plussign arm radius, rads */ +#define CHLEN degrad(1) /* cross hair leg length, rads */ +#define LNGSTEP 15 /* longitude grid spacing, degrees */ +#define LATSTEP 15 /* latitude grid spacing, degrees */ +#define MAXPDIST 10 /* max screen pick distance, pixels */ +#define CYLASPECT 2.0 /* cylndrical view w/h ratio */ +#define TICKLN 2 /* length of tickmarks on trails */ +#define MOVIE_SS (5./60) /* movie step size, hours */ +#define MAXDW 1024 /* max dsp wdth, bewre large vir root */ +#define MAXZOOM 6.0 /* max zoom, earth diams */ +#define MINZOOM 0.05 /* min zoom, earth diams */ +#define ZOOMSCALE 100 /* max zoom scale */ +#define NORBSTEPS 256 /* number of orbit time steps */ +#define SATSZ 5 /* sat marker size, pixels */ + +/* default trail definition */ +static TrState defts = { + TRLR_2, TRI_5MIN, TRF_TIME, TRR_INTER, TRO_RIGHT, TRS_MEDIUM, 20 +}; + +/* stuff for the weather ("wx") map gif + * N.B. we assume image is simple cyl proj, N up, 180 long at left, E to right + */ +static char wxhost[] = "www.ssec.wisc.edu"; +static char wxfile[] = "/data/comp/latest_cmoll.gif"; +#define WXM_W 640 /* overall gif width */ +#define WXM_H 480 /* overall gif height */ +#define WXM_LX 11 /* offset to left edge of map */ +#define WXM_RX 629 /* offset to right edge of map */ +#define WXM_TY 84 /* offset down to top of map */ +#define WXM_BY 396 /* offset down to bottom of map */ +static unsigned char *wxgifpix; /* malloced exploded gif pixel array */ +static XColor wxxcols[256]; /* gif pixels and colors */ +static Pixmap e_wxpm; /* off screen pixmap for wx map */ +static Widget wxreload_w; /* PB to force reloading weather gif */ + +/* stuff for the surface maps */ +static int deiw, deih; /* size of daytime image */ +static unsigned char *deipix; /* malloced exploded daytime pixel array */ +static XColor deixcols[256]; /* daytime colors */ +static int neiw, neih; /* size of nighttime image */ +static unsigned char *neipix; /* malloced exploded nighttime pixel array */ +static XColor neixcols[256]; /* nighttime colors */ + +void +e_manage() +{ + if (!eshell_w) { + /* first call: create and init view to main menu's loc. + * rely on an expose to do the drawing. + */ + Now *np = mm_get_now(); + + e_create_shell(); + e_create_ctrl(); + e_buildfavs(); + e_setelatlng (lat, lng); + } + + XtPopup (eshell_w, XtGrabNone); + set_something (eshell_w, XmNiconic, (XtArgVal)False); + + setXRes (e_viewupres(), "1"); +} + +/* update the earth details. + * remove all trail history if any. + */ +void +e_update(np, force) +Now *np; +int force; +{ + EObj *eop; + + /* don't bother if we've never been created */ + if (!eshell_w) + return; + + /* put np in trail list as current (first) entry. + * discard trail info if not being shown. + */ + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + e_resettrail(eop, np, !TBISON(eop->showtr_w)); + + /* don't bother with map if we're not up now. + * still do stats though if anyone cares about our values. + */ + if (!isUp(eshell_w) && !force) { + if (any_ison()) + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + e_show_esat_stats (eop); + return; + } + + e_all (1); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +e_newres() +{ + if (!eshell_w) + return; + e_init_gcs(); + e_update (mm_get_now(), 1); +} + +int +e_ison() +{ + return (isUp(eshell_w)); +} + +/* called whenever the favorites list changes */ +void +e_newfavs() +{ + if (!eshell_w) + return; + + /* rebuld rows */ + e_buildfavs(); +} + +/* called whenever the db beyond the builtin objects has changed. + * if we've never been up or it was appended we don't have to do anything. + * if it shrunk, that means some of the fav pointers might be different + * so we rebuild the favorites list. + */ +void +e_newdb (appended) +int appended; +{ + if (!eshell_w) + return; + + /* rebuild rows */ + e_buildfavs(); +} + +/* called by other menus as they want to hear from our buttons or not. + * the ons and offs stack. + */ +void +e_selection_mode (whether) +int whether; +{ + if (whether) + e_selecting++; + else if (e_selecting > 0) + --e_selecting; + + if (eshell_w) + if ((whether && e_selecting == 1) /* first one to want on */ + || (!whether && e_selecting == 0) /* first one to want off */) + e_set_buttons (whether); +} + +void +e_cursor(c) +Cursor c; +{ + Window win; + + if (eshell_w && (win = XtWindow(eshell_w)) != 0) { + Display *dsp = XtDisplay(eshell_w); + if (c) + XDefineCursor(dsp, win, c); + else + XUndefineCursor(dsp, win); + } + + if (ectrl_w && (win = XtWindow(ectrl_w)) != 0) { + Display *dsp = XtDisplay(ectrl_w); + if (c) + XDefineCursor(dsp, win, c); + else + XUndefineCursor(dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +e_viewupres() +{ + return ("EarthViewUp"); +} + +/* create the main form. + * the earth stats form is created separately. + */ +static void +e_create_shell() +{ + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Earth"}, + {"on Mouse...", "Earth_mouse"}, + {"on Control...", "Earth_control"}, + {"on View...", "Earth_view"}, + }; + typedef struct { + char *name; + char *label; + void (*cb)(); + int client; + Widget *wp; + char *tip; + } BtnInfo; + static BtnInfo ctl[] = { + {"EPrint", "Print...", e_print_cb, 0, NULL, + "Print the current Earth map"}, + {"ECtrl", "Objects...", e_copen_cb, 0, NULL, + "Open window to define and overlay target Objects"}, + {"EAnno", "User annotation...", ano_cb, 0, NULL, + "Open window to create and manage your own annotation"}, + {"EMloop", "Add to movie...", e_mloop_cb, 0, NULL, + "Add scene to movie loop"}, + {"Sep0"}, + {"SetMain", "Set Main", e_setmain_cb, SET_MAIN, NULL, + "Set location in Main menu to the current center location"}, + {"SetFrom", "Set from Main", e_setmain_cb, SET_FROM_MAIN, NULL, + "Set current center location to that of the Main menu"}, + {"Animation", "Animation demo", e_anim_cb, 0, NULL, + "Start/Stop a fun time-lapse animation"}, + {"Sep1"}, + {"Close", "Close", e_close_cb, 0, NULL, + "Close this and all supporting dialogs"}, + }; + static BtnInfo view[] = { + {"grid", "Grid", e_tb_cb, GRID, NULL, + "Overlay map with Lat and Long grid spaced every 15 degrees"}, + {"sites", "Sites", e_tb_cb, SITES, &sites_w, + "Mark each location in the Sites list on the map"}, + {"sunlight", "Sunlight", e_tb_cb, SUNLIGHT, NULL, + "Draw the area currently in sunlight in a different color"}, + {"mainmarker", "Main marker", e_tb_cb, MAINMARKER, NULL, + "Mark the location currently defined in the Main window"}, + {"nightlights", "Nightside lights", e_tb_cb, NITELITES, NULL, + "Show NASA image of lights at night seen from space"}, + {"livedrag", "Live dragging",e_tb_cb, LIVEDRAG, NULL, + "Update scene while dragging scales, not just when release"}, + {"inertial", "Inertial frame", e_tb_cb, INERTIALF, &inertial_w, + "Maintain current inertial reference frame"}, + }; + Widget pd_w, cas_w, mb_w; + EventMask mask; + Widget fr_w, eform_w; + XmString str; + Widget w; + Arg args[20]; + int n; + int i; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNtitle, "xephem Earth view"); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Earth"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + eshell_w = XtCreatePopupShell ("Earth", topLevelShellWidgetClass, + toplevel_w, args, n); + + setup_icon (eshell_w); + set_something (eshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (eshell_w, XmNpopdownCallback, e_popdown_cb, 0); + sr_reg (eshell_w, "XEphem*Earth.width", earthcategory, 0); + sr_reg (eshell_w, "XEphem*Earth.height", earthcategory, 0); + sr_reg (eshell_w, "XEphem*Earth.x", earthcategory, 0); + sr_reg (eshell_w, "XEphem*Earth.y", earthcategory, 0); + sr_reg (NULL, e_viewupres(), earthcategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 2); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 2); n++; + eform_w = XmCreateForm (eshell_w, "EarthForm", args, n); + XtAddCallback (eform_w, XmNhelpCallback, e_mhelp_cb, 0); + XtManageChild (eform_w); + + /* make the menu bar and all its pulldowns */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (eform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cas_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cas_w, XmNlabelString, "Control"); + XtManageChild (cas_w); + + for (i = 0; i < XtNumber(ctl); i++) { + BtnInfo *bip = &ctl[i]; + + n = 0; + if (!bip->label) + w = XmCreateSeparator (pd_w, bip->name, args, n); + else { + if (bip->cb == e_mloop_cb) + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, bip->name, args, n); + set_xmstring (w, XmNlabelString, bip->label); + XtAddCallback (w, XmNactivateCallback, bip->cb, + (XtPointer)(long int)bip->client); + } + if (bip->wp) + *bip->wp = w; + if (bip->tip) + wtip (w, bip->tip); + XtManageChild (w); + } + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cas_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cas_w, XmNlabelString, "View"); + XtManageChild (cas_w); + + /* simulate a radio box for the projection selections */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + cylg_w = XmCreateToggleButton (pd_w, "cylGraphic", args, n); + set_xmstring (cylg_w, XmNlabelString, "Cyl graphic"); + XtAddCallback (cylg_w, XmNvalueChangedCallback, e_proj_cb, + (XtPointer)CYLG); + wtip (cylg_w, "Display graphical map with cylindrical projection"); + XtManageChild (cylg_w); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + cyli_w = XmCreateToggleButton (pd_w, "cylImage", args, n); + set_xmstring (cyli_w, XmNlabelString, "Cyl image"); + XtAddCallback (cyli_w, XmNvalueChangedCallback, e_proj_cb, + (XtPointer)CYLI); + wtip (cyli_w, "Display image map with cylindrical projection"); + XtManageChild (cyli_w); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + sphg_w = XmCreateToggleButton (pd_w, "sphGraphic", args, n); + set_xmstring (sphg_w, XmNlabelString, "Sph graphic"); + XtAddCallback (sphg_w, XmNvalueChangedCallback, e_proj_cb, + (XtPointer)SPHG); + wtip (sphg_w, "Display graphical with using spherical projection"); + XtManageChild (sphg_w); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + sphi_w = XmCreateToggleButton (pd_w, "sphImage", args, n); + set_xmstring (sphi_w, XmNlabelString, "Sph image"); + XtAddCallback (sphi_w, XmNvalueChangedCallback, e_proj_cb, + (XtPointer)SPHI); + wtip (sphi_w, "Display image map with spherical projection"); + XtManageChild (sphi_w); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + wxm_w = XmCreateToggleButton (pd_w, "wxmap", args, n); + set_xmstring (wxm_w, XmNlabelString, "Weather map"); + XtAddCallback (wxm_w, XmNvalueChangedCallback, e_proj_cb, + (XtPointer)WXMAP); + wtip (wxm_w, "Display graphics over a live weather map"); + XtManageChild (wxm_w); + + n = 0; + wxreload_w = XmCreatePushButton (pd_w, "wxmap", args, n); + set_xmstring (wxreload_w, XmNlabelString, "Reload map"); + XtAddCallback (wxreload_w, XmNactivateCallback, e_wxreload_cb, 0); + wtip (wxreload_w, "Force reloading weather map gif file"); + /* N.B. defer managing */ + + sr_reg (cyli_w, NULL, earthcategory, 1); + sr_reg (cylg_w, NULL, earthcategory, 1); + sr_reg (sphi_w, NULL, earthcategory, 1); + sr_reg (sphg_w, NULL, earthcategory, 1); + sr_reg (wxm_w, NULL, earthcategory, 1); + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + for (i = 0; i < XtNumber(view); i++) { + BtnInfo *bip = &view[i]; + + n = 0; + if (!bip->label) + w = XmCreateSeparator (pd_w, bip->name, args, n); + else { + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreateToggleButton (pd_w, bip->name, args, n); + wants[bip->client] = TBISON(w); + set_xmstring (w, XmNlabelString, bip->label); + XtAddCallback (w, XmNvalueChangedCallback, bip->cb, + (XtPointer)(long int)bip->client); + sr_reg (w, NULL, earthcategory, 1); + } + + if (bip->wp) + *bip->wp = w; + if (bip->tip) + wtip (w, bip->tip); + + XtManageChild (w); + } + + /* confirm ok for Sites to be on */ + if (wants[SITES] && sites_get_list(NULL) < 0) { + wants[SITES] = 0; + TBOFF (sites_w); + xe_msg (0, "No Sites File found."); + } + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cas_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cas_w, XmNlabelString, "Help"); + XtManageChild (cas_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cas_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, e_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* 0 lat PB */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + lat0_w = XmCreatePushButton (eform_w, "Lat0", args, n); + set_xmstring (lat0_w, XmNlabelString, "0:00"); + XtAddCallback (lat0_w, XmNactivateCallback, e_lat0_cb, NULL); + wtip (lat0_w,"Set latitude to 0 (only active in Spherical projection)"); + XtManageChild (lat0_w); + + /* make the date/time indicator label */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, lat0_w); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + e_dt_w = XmCreateLabel (eform_w, "DTstamp", args, n); + wtip (e_dt_w, "Date and Time for which map is computed"); + XtManageChild (e_dt_w); + + /* make the zoom, long and lat scales */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, lat0_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNminimum, -180); n++; + XtSetArg (args[n], XmNmaximum, 179); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + long_w = XmCreateScale (eform_w, "LongScale", args, n); + wtip (long_w, "Longitude control"); + XtAddCallback (long_w, XmNvalueChangedCallback, e_latlong_cb, NULL); + XtAddCallback (long_w, XmNdragCallback, e_latlong_cb, NULL); + XtManageChild (long_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, long_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, ZOOMSCALE); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + zoom_w = XmCreateScale (eform_w, "ZoomScale", args, n); + wtip (zoom_w, "Zoom control"); + sr_reg (zoom_w, NULL, earthcategory, 0); + XtAddCallback (zoom_w, XmNvalueChangedCallback, e_latlong_cb, NULL); + XtAddCallback (zoom_w, XmNdragCallback, e_latlong_cb, NULL); + XtManageChild (zoom_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, long_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNminimum, -90); n++; + XtSetArg (args[n], XmNmaximum, 90); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + lat_w = XmCreateScale (eform_w, "LatScale", args, n); + wtip (lat_w, "Latitude control (only active in Spherical projection)"); + XtAddCallback (lat_w, XmNvalueChangedCallback, e_latlong_cb, NULL); + XtAddCallback (lat_w, XmNdragCallback, e_latlong_cb, NULL); + XtManageChild (lat_w); + + /* make a drawing area on top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, long_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, zoom_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, lat_w); n++; + fr_w = XmCreateFrame (eform_w, "MFr", args, n); + XtManageChild (fr_w); + + n = 0; + e_da_w = XmCreateDrawingArea (fr_w, "EarthMap", args, n); + XtAddCallback (e_da_w, XmNexposeCallback, e_exp_cb, NULL); + mask = PointerMotionMask | ButtonPressMask | ButtonReleaseMask + | EnterWindowMask | LeaveWindowMask; + XtAddEventHandler (e_da_w, mask, False, e_motion_eh, 0); + XtManageChild (e_da_w); + + /* init da's size */ + (void) e_set_dasize(); + + /* register trail resource and init setup */ + sr_reg (NULL, etrres, earthcategory, 0); + tr_getres (etrres, &defts); + + /* if projection not unique, set default to spherical view */ + i = 0; + i += TBISON(cylg_w) ? 1 : 0; + i += TBISON(cyli_w) ? 1 : 0; + i += TBISON(sphg_w) ? 1 : 0; + i += TBISON(sphi_w) ? 1 : 0; + i += TBISON(wxm_w) ? 1 : 0; + if (i != 1) { + xe_msg (0, "Earth projection conflict -- forcing Sph graphic"); + TBOFF (cylg_w); + TBOFF (cyli_w); + TBON (sphg_w); + TBOFF (sphi_w); + TBOFF (wxm_w); + } + + /* init projection info */ + if (TBISON(cylg_w)) { + projection = CYLG; + XtSetSensitive (lat_w, False); + XtSetSensitive (lat0_w, False); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, False); + XtUnmanageChild (wxreload_w); + } else if (TBISON(cyli_w)) { + projection = CYLI; + XtSetSensitive (lat_w, False); + XtSetSensitive (lat0_w, False); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, False); + XtUnmanageChild (wxreload_w); + } else if (TBISON(sphg_w)) { + projection = SPHG; + XtSetSensitive (lat_w, True); + XtSetSensitive (lat0_w, True); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, True); + XtUnmanageChild (wxreload_w); + } else if (TBISON(sphi_w)) { + projection = SPHI; + XtSetSensitive (lat_w, True); + XtSetSensitive (lat0_w, True); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, True); + XtUnmanageChild (wxreload_w); + } else { + projection = WXMAP; + XtSetSensitive (lat_w, False); + XtSetSensitive (lat0_w, False); + XtSetSensitive (long_w, False); + XtSetSensitive (zoom_w, False); + XtManageChild (wxreload_w); + } +} + +/* make the object control dialog -- real work is in e_buildfavs() */ +static void +e_create_ctrl() +{ + Arg args[20]; + Widget sep_w; + Widget eform_w; + Widget w; + int n; + int i; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Earth objects"); n++; + XtSetArg (args[n], XmNiconName, "EObjs"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + ectrl_w = XtCreatePopupShell ("EarthObjs", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (ectrl_w); + set_something (ectrl_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (ectrl_w, "XEphem*EarthObjs.x", earthcategory, 0); + sr_reg (ectrl_w, "XEphem*EarthObjs.y", earthcategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 5); n++; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + eform_w = XmCreateForm (ectrl_w, "EOForm", args, n); + XtAddCallback (eform_w, XmNhelpCallback, e_chelp_cb, 0); + XtManageChild (eform_w); + + /* make one big hor RC table to hold each column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + objrc_w = XmCreateRowColumn (eform_w, "EMH", args, n); + XtManageChild(objrc_w); + + /* one RC for each column, first entry is heading label */ + + for (i = 0; i < XtNumber(rhd); i++) { + n = 0; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + w = XmCreateRowColumn (objrc_w, "EVC", args, n); + XtManageChild (w); + rhd[i].col_w = w; + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreatePushButton (rhd[i].col_w, "ECBL", args, n); + set_xmstring (w, XmNlabelString, rhd[i].label); + wtip (w, rhd[i].tip); + if (rhd[i].cb) { + XtAddCallback (w, XmNactivateCallback, rhd[i].cb, NULL); + buttonAsButton (w, 1); + } else + buttonAsButton (w, 0); + XtManageChild (w); + + /* save the labels for the headers that change */ + if (rhd[i].l_wp) + *rhd[i].l_wp = w; + } + + /* add a separator at bottom */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, objrc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (eform_w, "Sep", args, n); + XtManageChild (sep_w); + + /* add a label for the current date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + e_cdt_w = XmCreateLabel (eform_w, "SDTstamp", args, n); + wtip (e_cdt_w, "Date and Time for which data are computed"); + XtManageChild (e_cdt_w); + + /* add a close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, e_cdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 30); n++; + w = XmCreatePushButton (eform_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, e_cclose_cb, 0); + XtManageChild (w); + + /* add web update button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, e_cdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 40); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 60); n++; + w = XmCreatePushButton (eform_w, "Close", args, n); + set_xmstring (w, XmNlabelString, "Web update ..."); + wtip (w, "Update Earth satellites from web"); + XtAddCallback (w, XmNactivateCallback, e_webupdate_cb, 0); + XtManageChild (w); + + /* add a Help button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, e_cdt_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 70); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 90); n++; + w = XmCreatePushButton (eform_w, "Help", args, n); + wtip (w, "Get more info about this window"); + XtAddCallback (w, XmNactivateCallback, e_chelp_cb, 0); + XtManageChild (w); +} + +/* return a unique number between 0 and 1 for every non-neg value of i. + * arrange for them to move along ever finer binary steps. + */ +static double +binsplit (int i) +{ + /* 1-based */ + double oneb = i + 1; + + /* divide into base power of two parts */ + double ndiv = pow (2.0, floor(log(oneb)/log(2.0))); + + /* add remainder, divide last evenly on both ends */ + return ((0.5 + oneb - ndiv)/ndiv); +} + +/* set up one "row" in objrc for each favorite.. + * this means one row in each column. + * remember the first row is just the col headers so leave it alone. + * preserve existing entries based on same name. + */ +static void +e_buildfavs() +{ + Arg args[20]; + Widget w; + EObj *eop; + int i, n; + char *rowname; + + /* get current set of favorites and columns */ + nfavs = fav_get_loaded (&favs); + + /* insure one row for each fav in each col and one EObj to match */ + for (i = 0; i < nfavs; i++) { + if (i >= neobjs) { + /* create another row and its EObj */ + + double r, g, b; + XColor xc; + + eobjs = (EObj*) XtRealloc((char*)eobjs,(neobjs+1)*sizeof(EObj)); + eop = &eobjs[neobjs++]; + memset (eop, 0, sizeof(*eop)); + + /* init mem for selecting names */ + + eop->slat_pn = XtCalloc (PNL, 1); + eop->slng_pn = XtCalloc (PNL, 1); + eop->el_pn = XtCalloc (PNL, 1); + eop->range_pn = XtCalloc (PNL, 1); + eop->rrate_pn = XtCalloc (PNL, 1); + eop->sun_pn = XtCalloc (PNL, 1); + eop->age_pn = XtCalloc (PNL, 1); + + /* init trail options */ + + eop->trstate = defts; + + /* pick a color */ + + toRGB (1-binsplit (i), 1.0, 1.0, &r, &g, &b); + xc.red = (int)(r*65535); + xc.green = (int)(g*65535); + xc.blue = (int)(b*65535); + if (XAllocColor (XtD, xe_cm, &xc)) + eop->pix = xc.pixel; + else + eop->pix = WhitePixel (XtD, DefaultScreen(XtD)); + + /* label for row name (really a PB just to match size) */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + eop->name_w = XmCreatePushButton (rhd[0].col_w, "EN", args, n); + buttonAsButton (eop->name_w, 0); + XtManageChild (eop->name_w); + + /* whether to display object at all */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNselectColor, (XtArgVal)eop->pix); n++; + XtSetArg (args[n], XmNfillOnSelect, (XtArgVal)True); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (rhd[1].col_w, "OTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_show_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + eop->show_w = w; + + /* whether to show Label */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (rhd[2].col_w, "LblTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_wantlbl_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + eop->wantlbl_w = w; + + /* whether to show footprint */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (rhd[3].col_w, "FootTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_wantfoot_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + eop->wantfoot_w = w; + + /* whether to show orbit ... */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (rhd[4].col_w, "OrbitTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_wantorb_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + eop->wantorb_w = w; + + /* .. or spacer when not appropriate */ + + n = 0; + w = XmCreatePushButton (rhd[4].col_w, "OrbitLbl", args, n); + buttonAsButton (w, 0); + set_xmstring (w, XmNlabelString, " "); + eop->wantnoorb_w = w; + + /* whether to show Trail */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (rhd[5].col_w, "TrailTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_trail_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + eop->showtr_w = w; + + /* whether to Track */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + w = XmCreateToggleButton (rhd[6].col_w, "TrackTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_ontrack_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + eop->track_w = w; + + /* whether to use as popup reference */ + + n = 0; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + w = XmCreateToggleButton (rhd[7].col_w, "MTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, e_onpick_cb, + (XtPointer)(long int)i); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + eop->pick_w = w; + + /* label to show SubLat */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[8].col_w, "LatTB", args, n); + set_something (w, XmNuserData, (XtArgVal)eop->slat_pn); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + XtManageChild (w); + eop->slat_w = w; + + /* lable to show SubLong */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[9].col_w, "LngTB", args, n); + set_something (w, XmNuserData, (XtArgVal)eop->slng_pn); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + XtManageChild (w); + eop->slng_w = w; + + /* label to show Alt */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[10].col_w, "AltTB", args, n); + set_something (w, XmNuserData, (XtArgVal)eop->el_pn); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + XtManageChild (w); + eop->el_w = w; + + /* label to show Range */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[11].col_w, "RanTB", args, n); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + set_something(w, XmNuserData, (XtArgVal)eop->range_pn); + XtManageChild (w); + eop->range_w = w; + + /* label to show Range Rate */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[12].col_w, "RRTB", args, n); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + set_something(w, XmNuserData, (XtArgVal)eop->rrate_pn); + XtManageChild (w); + eop->rrate_w = w; + + /* label to show whether in Sun light */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[13].col_w, "SunTB", args, n); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + set_something (w, XmNuserData, (XtArgVal)eop->sun_pn); + XtManageChild (w); + eop->sun_w = w; + + /* label to show elements Age */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreatePushButton (rhd[14].col_w, "AgeTB", args, n); + XtAddCallback (w, XmNactivateCallback, e_stat_cb, (XtPointer)(long int)i); + set_something (w, XmNuserData, (XtArgVal)eop->age_pn); + XtManageChild (w); + eop->age_w = w; + + /* probably not look like buttons yet */ + + e_set_buttons(e_selecting); + } + + /* build row, preserve controls if same name */ + + eop = &eobjs[i]; + eop->op = favs[i]; + + get_xmstring (eop->name_w, XmNlabelString, &rowname); + if (strcmp (rowname, favs[i]->o_name)) { + set_xmstring (eop->name_w, XmNlabelString, favs[i]->o_name); + TBOFF (eop->show_w); + TBOFF (eop->wantlbl_w); + TBOFF (eop->wantfoot_w); + TBOFF (eop->wantorb_w); + TBOFF (eop->showtr_w); + TBOFF (eop->track_w); + TBOFF (eop->pick_w); + } + XtFree (rowname); + + XtManageChild (eop->name_w); + + XtManageChild (eop->show_w); + + XtManageChild (eop->wantlbl_w); + + XtManageChild (eop->wantfoot_w); + + if (is_type (eop->op, EARTHSATM)) { + XtManageChild (eop->wantorb_w); + XtUnmanageChild (eop->wantnoorb_w); + } else { + XtUnmanageChild (eop->wantorb_w); + XtManageChild (eop->wantnoorb_w); + } + + XtManageChild (eop->showtr_w); + + XtManageChild (eop->track_w); + + XtManageChild (eop->pick_w); + + sprintf (eop->slat_pn, "%s.SatSubLat", favs[i]->o_name); + XtManageChild (eop->slat_w); + + sprintf (eop->slng_pn, "%s.SatSubLong", favs[i]->o_name); + XtManageChild (eop->slng_w); + + sprintf (eop->el_pn, "%s.SatAlt", favs[i]->o_name); + XtManageChild (eop->el_w); + + sprintf (eop->range_pn, "%s.SatRange", favs[i]->o_name); + XtManageChild (eop->range_w); + + sprintf (eop->rrate_pn, "%s.SatRangeR", favs[i]->o_name); + XtManageChild (eop->rrate_w); + + sprintf (eop->sun_pn, "%s.SatSunlit", favs[i]->o_name); + XtManageChild (eop->sun_w); + + sprintf (eop->age_pn, "%s.SatAge", favs[i]->o_name); + XtManageChild (eop->age_w); + } + + /* turn off any remaining rows */ + for ( ; i < neobjs; i++) { + eop = &eobjs[i]; + eop->op = NULL; + XtUnmanageChild (eop->name_w); + XtUnmanageChild (eop->show_w); + XtUnmanageChild (eop->wantlbl_w); + XtUnmanageChild (eop->wantfoot_w); + XtUnmanageChild (eop->wantorb_w); + XtUnmanageChild (eop->wantnoorb_w); + XtUnmanageChild (eop->showtr_w); + XtUnmanageChild (eop->track_w); + XtUnmanageChild (eop->pick_w); + XtUnmanageChild (eop->slat_w); + XtUnmanageChild (eop->slng_w); + XtUnmanageChild (eop->el_w); + XtUnmanageChild (eop->range_w); + XtUnmanageChild (eop->rrate_w); + XtUnmanageChild (eop->sun_w); + XtUnmanageChild (eop->age_w); + } + + /* fill in current values */ + e_update (mm_get_now(), 1); +} + +/* callback when any of the stat buttons are activated. */ +/* ARGSUSED */ +static void +e_stat_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (e_selecting) { + char *userD; + + get_something (w, XmNuserData, (XtArgVal)&userD); + register_selection (userD); + } +} + +/* callback when the main form in popped down */ +/* ARGSUSED */ +static void +e_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown(ectrl_w); + + if (e_pm) { + XFreePixmap (XtDisplay(w), e_pm); + e_pm = (Pixmap) 0; + } + + /* leave e_wxpm since it can take a while to reload */ + + /* stop movie that might be running */ + mm_movie (0.0); + + /* record we are now down */ + setXRes (e_viewupres(), "0"); +} + +/* callback for when the main Close button is activated */ +/* ARGSUSED */ +static void +e_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown to the real work */ + XtPopdown (eshell_w); +} + +/* callback for when the control dialog is closed */ +/* ARGSUSED */ +static void +e_cclose_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (ectrl_w); +} + +/* callback to bring up web update window */ +/* ARGSUSED */ +static void +e_webupdate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + wdb_manage(); +} + +/* callback when a Track TB is changed. + * client is index into eobjs[] + */ +/* ARGSUSED */ +static void +e_ontrack_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + EObj *eop = &eobjs[(long int)client]; + + /* do nothing if turning off */ + if (!TBISON(w)) + return; + + /* insure shown as a friendly gesture */ + TBON(eop->show_w); + eop->shownbefore = 1; + + /* turn off others to simulate a radio box */ + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + if (w != eop->track_w && TBISON(eop->track_w)) + TBOFF (eop->track_w); + + /* turn off INERTIAL */ + if (wants[INERTIALF]) { + TBOFF (inertial_w); + wants[INERTIALF] = 0; + } + + /* redraw to reorient */ + e_all(1); +} + +/* callback when a Pick TB is changed. + * client is index into eobjs[] + */ +/* ARGSUSED */ +static void +e_onpick_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + EObj *eop; + + /* if turning this one on, turn off others to simulate a radio box */ + if (TBISON(w)) + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + if (w != eop->pick_w) + TBOFF (eop->pick_w); +} + +/* callback when a Show TB is changed. + * client is index into eobjs[] + * N.B. logic is duplicated in e_showtgl_cb + */ +/* ARGSUSED */ +static void +e_show_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + EObj *eop = &eobjs[(long int)client]; + + /* courtesies */ + if (TBISON(w)) { + if (!eop->shownbefore) { + TBON(eop->wantfoot_w); + TBON(eop->wantlbl_w); + TBON(eop->wantorb_w); + eop->shownbefore = 1; + } + } else { + TBOFF (eop->track_w); + TBOFF (eop->pick_w); + } + + e_all(0); +} + +/* callback when a Label TB is changed. + * client is index into eobjs[] + * N.B. logic is duplicated in e_wantlbltgl_cb + */ +/* ARGSUSED */ +static void +e_wantlbl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* if coming on, show as a courtesy */ + if (TBISON(w)) { + TBON (eobjs[(long int)client].show_w); + eobjs[(long int)client].shownbefore = 1; + } + + e_all(0); +} + +/* callback when a Footprint TB is changed. + * client is index into eobjs[] + * N.B. logic is duplicated in e_wantfoottgl_cb + */ +/* ARGSUSED */ +static void +e_wantfoot_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* if coming on, show as a courtesy */ + if (TBISON(w)) { + TBON (eobjs[(long int)client].show_w); + eobjs[(long int)client].shownbefore = 1; + } + + e_all(0); +} + +/* callback when an orbit TB is changed. + * client is index into eobjs[] + * N.B. logic is duplicated in e_wantorbtgl_cb + */ +/* ARGSUSED */ +static void +e_wantorb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* if coming on, show as a courtesy */ + if (TBISON(w)) { + TBON (eobjs[(long int)client].show_w); + eobjs[(long int)client].shownbefore = 1; + } + + e_all(0); +} + +/* callback for when the Movie button is activated. */ +/* ARGSUSED */ +static void +e_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + mm_movie (MOVIE_SS); +} + +/* callback to add scene to movie loop */ +/* ARGSUSED */ +static void +e_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (e_pm, e_dt_w); +} + +/* go through all the buttons and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +e_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + int i; + + for (i = 0; i < neobjs; i++) { + EObj *eop = eobjs + i; + buttonAsButton (eop->slat_w, whether); + buttonAsButton (eop->slng_w, whether); + buttonAsButton (eop->el_w, whether); + buttonAsButton (eop->range_w, whether); + buttonAsButton (eop->rrate_w, whether); + buttonAsButton (eop->sun_w, whether); + buttonAsButton (eop->age_w, whether); + } +} + +/* callback from the main Help all button + */ +/* ARGSUSED */ +static void +e_mhelp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This is a simple schematic depiction of the Earth surface at the given time.", +"The view shows the sunlit portion and the location of any object.", +}; + + hlp_dialog ("Earth", msg, XtNumber(msg)); +} + +/* callback from the Control Help all button + */ +/* ARGSUSED */ +static void +e_chelp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Controls which objects are displayed and their current stats" +}; + + hlp_dialog ("Earth_control_dialog", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +e_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback from Print control. + */ +/* ARGSUSED */ +static void +e_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Earth", e_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +e_print () +{ + Now *np = mm_get_now(); + int w, h, d, wb, hb; + + if (!e_ison()) { + xe_msg (1, "Earth must be open to save a file."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get size of the rendering area */ + e_getcircle (&w, &h, &d, &wb, &hb); + + /* draw in an area 6.5w x 6.5h centered 1in down from top */ + if (w >= h) + XPSXBegin (e_pm, 0, 0, w, h, 1*72, 10*72, (int)(6.5*72)); + else { + int pw = (int)(72*6.5*w/h+.5); /* width on paper when 6.5 hi */ + XPSXBegin (e_pm, 0, 0, w, h, (int)((8.5*72-pw)/2), 10*72, pw); + } + + /* redraw */ + e_map (np); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + e_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +e_ps_annotate (np) +Now *np; +{ + int unitspref = pref_get (PREF_UNITS); + double sslat, sslong; + char buf[32], buf2[32]; + char dir[128]; + EObj *eop; + int hdr; + int r, y; + + /* scroll up by number of favs to show */ + r = 11; + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + if (TBISON(eop->show_w)) + r++; + + /* title */ + y = AROWY(r); + (void) sprintf (dir, "(XEphem %s Earth View) 306 %d cstr\n", + projection == CYLG ? "Cylindrical graphic" : + projection == CYLI ? "Cylindrical image" : + projection == SPHG ? "Spherical graphic" : + projection == SPHI ? "Spherical image" : + "Weather Map", y); + XPSDirect (dir); + + /* date, time, jd */ + y = AROWY(r -= 2); + fs_time (buf, mjd_hr(mjd)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + (void) sprintf (dir, "(UTC:) 144 %d rstr (%s %s) 154 %d lstr\n", + y, buf, buf2, y); + XPSDirect (dir); + (void) sprintf (dir,"(JD:) 410 %d rstr (%13.5f) 420 %d lstr\n", y, + mjd+MJD0, y); + XPSDirect (dir); + + /* map center, subsolar loc */ + y = AROWY(--r); + e_ps_ll ("Map Center", elat, elng, 144, y); + e_subobject (np, db_basic(SUN), &sslat, &sslong); + e_ps_ll ("SubSolar", sslat, sslong, 410, y); + + /* marker, if on */ + if (wants[MAINMARKER]) { + char *site = mm_getsite(); + y = AROWY(--r); + e_ps_ll ("Reference", lat, lng, 144, y); + if (site) { + sprintf (dir,"(, %s) show\n", XPSCleanStr(site,strlen(site))); + XPSDirect (dir); + } + } + + /* info about Targets that are shown */ + hdr = 0; + r--; + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) { + if (TBISON(eop->show_w)) { + Trail *tp = &eop->trail[0]; + Obj *op = &tp->t_obj; + + y = AROWY(--r); + + if (!hdr) { + int yup = AROWY(r+1); + + sprintf (dir, "(SubLat/Long) 200 %d cstr\n", y); + XPSDirect(dir); + sprintf (dir, "(Sun) 285 %d cstr\n", y); + XPSDirect(dir); + sprintf (dir, "(Ref Alt/Az) 360 %d cstr\n", y); + XPSDirect(dir); + + sprintf (dir, "(Alt) 418 %d cstr (%s) 418 %d cstr\n", yup, + unitspref == PREF_ENGLISH ? "mi" : "km", y); + XPSDirect(dir); + sprintf (dir, "(Range) 450 %d cstr (%s) 450 %d cstr\n", yup, + unitspref == PREF_ENGLISH ? "mi" : "km", y); + XPSDirect(dir); + sprintf (dir, "(Range') 488 %d cstr (%s) 488 %d cstr\n",yup, + unitspref == PREF_ENGLISH ? "f/s" : "m/s", y); + XPSDirect(dir); + sprintf (dir, "(Age) 525 %d cstr (days) 525 %d cstr\n", + yup, y); + XPSDirect(dir); + hdr = 1; + + y = AROWY(--r); + } + + e_ps_ll (op->o_name, tp->t_sublat, tp->t_sublng, 144, y); + + sprintf (dir, "(%s) 280 %d lstr\n", op->o_type == EARTHSAT + ? (op->s_eclipsed ? " N" : " Y") + : "", y); + XPSDirect (dir); + + fs_sexa (buf, raddeg(op->s_alt), 3, 3600); + fs_sexa (buf2, raddeg(op->s_az), 4, 3600); + sprintf (dir, "(%s %s) 395 %d rstr\n", buf, buf2, y); + XPSDirect (dir); + + if (op->o_type == EARTHSAT) { + double tmp; + + if (unitspref == PREF_ENGLISH) + tmp = op->s_elev*FTPM/5280.0; + else + tmp = op->s_elev/1000.0; + sprintf (dir, "( %5.0f) 425 %d rstr\n", tmp, y); + XPSDirect (dir); + + if (unitspref == PREF_ENGLISH) + tmp = op->s_range*FTPM/5280.0; + else + tmp = op->s_range/1000.0; + sprintf (dir, "( %5.0f) 462 %d rstr\n", tmp, y); + XPSDirect (dir); + + if (unitspref == PREF_ENGLISH) + tmp = op->s_rangev*FTPM; + else + tmp = op->s_rangev; + sprintf (dir, "( %5.0f) 500 %d rstr\n", tmp, y); + XPSDirect (dir); + + tmp = mjd - op->es_epoch; + sprintf (dir, "( %5.2f) 535 %d rstr\n", tmp, y); + XPSDirect (dir); + } + } + } +} + +/* label print with center lat/long */ +static void +e_ps_ll (tag, lt, lg, x, y) +char *tag; +double lt, lg; +int x, y; +{ + char ltstr[32], lgstr[32]; + char buf[128]; + + fs_sexa (ltstr, raddeg(fabs(lt)), 3, 3600); + (void) strcat (ltstr, lt < 0 ? " S" : " N"); + + fs_sexa (lgstr, raddeg(fabs(lg)), 4, 3600); + (void) strcat (lgstr, lg < 0 ? " W" : " E"); + + (void) sprintf (buf, "(%s:) %d %d rstr (%s %s) %d %d lstr\n", + tag, x, y, ltstr, lgstr, x+10, y); + XPSDirect (buf); +} + +/* called whenever the earth drawing area gets an expose. + */ +/* ARGSUSED */ +static void +e_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static unsigned last_wid, last_hei; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + Window root; + int x, y; + unsigned int bw, d; + unsigned wid, hei; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; + XChangeWindowAttributes (e->display, e->window, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected eshell_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry (dsp, win, &root, &x, &y, &wid, &hei, &bw, &d); + + + /* if no pixmap or we're a new size then (re)build everything */ + if (!e_pm || wid != last_wid || hei != last_hei) { + if (e_pm) + XFreePixmap (dsp, e_pm); + + if (!e_gc) + e_init_gcs(); + + e_pm = XCreatePixmap (dsp, win, wid, hei, d); + XSetForeground (dsp, e_gc, e_bg); + XFillRectangle (dsp, e_pm, e_gc, 0, 0, wid, hei); + last_wid = wid; + last_hei = hei; + + e_all(1); + } else { + /* nothing new so just copy from the pixmap */ + e_copy_pm(); + } +} + +/* called on receipt of a MotionNotify or ButtonPress or ButtonRelease event. + * button 1 shows great circle from Main site. + * button 2 causes rotation, if LIVEDRAG; + * button 3 causes a popup. + */ +/* ARGSUSED */ +static void +e_motion_eh (w, client, ev, continue_to_dispatch) +Widget w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + static int inwin; + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + int evt = ev->type; + int mo = evt == MotionNotify; + int bp = evt == ButtonPress; + int br = evt == ButtonRelease; + int en = evt == EnterNotify; + int lv = evt == LeaveNotify; + int b3p = bp && ev->xbutton.button == Button3; + int b2p = bp && ev->xbutton.button == Button2; + int b2r = br && ev->xbutton.button == Button2; + int b1r = br && ev->xbutton.button == Button1; + int m2 = mo && ev->xmotion.state & Button2Mask; + int m1 = mo && ev->xmotion.state & Button1Mask; + int wide, h, d, xb, yb; + Window root, child; + double lt, lg; + int rx, ry, wx, wy; + int overearth; + unsigned mask; + + if (en) inwin = 1; + if (lv) inwin = 0; + + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &wx, &wy, &mask); + e_getcircle (&wide, &h, &d, &xb, &yb); + overearth = e_uncoord (projection, d, xb, yb, wx, wy, <, &lg); + + if (m1 && overearth) + e_plotGreatCircle (d, xb, yb, lt, lg); + if (b1r) + e_map(mm_get_now()); + + if (b3p) + e_popup (w, ev, d, xb, yb, wx, wy); + + if ((b2p || m2) && wants[LIVEDRAG] && projection != WXMAP) { + static int lastx, lasty; + double lt, lg; + + /* if first time turn off any tracking and change cursor */ + if (b2p) { + noTrack(); + lastx = wx; + lasty = wy; + XDefineCursor (dsp, win, XCreateFontCursor (dsp, XC_fleur)); + } + + /* update based on motion */ + lg = elng - PI*(wx - lastx)/d; + lt = elat - PI*(lasty - wy)/d; + if (lt > PI/2) + lt = PI/2; + else if (lt < -PI/2) + lt = -PI/2; + lastx = wx; + lasty = wy; + e_setelatlng (lt, lg); + + /* site code is certainly voided */ + refsiteok = 0; + + /* redraw */ + e_all (0); + } + + if (b2r) + XUndefineCursor(dsp, win); + + if (overearth && !m2 && !b1r) /* flashes badly while dragging */ + e_track_latlng (w, d, xb, yb, lt, lg); + else if (e_pm) /* under a pulldown we can get called after popdown */ + e_copy_pm(); +} + +/* called when any of the option toggle buttons changes state. + * client is one of the Wants enum. + */ +/* ARGSUSED */ +static void +e_tb_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + int state = TBISON (wid); + int want = (long int) client; + int w, h, d, wb, hb; + + watch_cursor (1); + + /* set option to new value */ + wants[want] = state; + + /* prepare for graphics */ + e_getcircle (&w, &h, &d, &wb, &hb); + + /* generally we draw just what we need if turning on, everything if off. + * this is faster than e_all but can lead to a different overlay order. + */ + switch (want) { + case GRID: + if (state) { + e_drawgrid (d, wb, hb); + e_copy_pm(); + } else + e_all (0); + break; + + case SITES: + if (state) { + if (sites_get_list(NULL) < 0) { + wants[SITES] = 0; + TBOFF (sites_w); + xe_msg (1, "No Sites file found."); + } else { + e_drawsites (d, wb, hb); + e_copy_pm(); + } + } else + e_all (0); + break; + + case SUNLIGHT: + if (projection != WXMAP || e_setupwxpm(0, 1) == 0) + e_all (0); + + case NITELITES: + if (projection != WXMAP || e_setupwxpm(0, 1) == 0) + e_all (0); + + case LIVEDRAG: + break; /* enough to just record it */ + + case INERTIALF: + if (state) { + /* capture current ra/dec overhead */ + ll2rd (elat, elng, &ira, &idec); + /* turn off any tracking */ + noTrack(); + } + break; + + case MAINMARKER: + if (state) { + e_mainmenuloc (mm_get_now(), d, wb, hb); + e_copy_pm(); + } else + e_all (0); + break; + + default: + printf ("e_tb_cb: bad client: %d\n", want); + abort(); + } + + watch_cursor (0); +} + +/* called to open the object control window */ +/* ARGSUSED */ +static void +e_copen_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + e_set_buttons(e_selecting); + XtPopup (ectrl_w, XtGrabNone); + set_something (ectrl_w, XmNiconic, (XtArgVal)False); + +} + +/* called when a Trail PB is activated. + * client is eobjs[] index. + */ +/* ARGSUSED */ +static void +e_trail_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + EObj *eop = &eobjs[(long int)client]; + + if (TBISOFF(w)) { + /* erase, if anything to erase */ + if (eop->ntrail > 1) + e_all(0); + } else { + /* turning on trail.. insure shown too as a friendly gesture */ + if (TBISOFF(eop->show_w)) { + TBON(eop->show_w); + eop->shownbefore = 1; + } + + /* allow to define if none */ + if (eop->ntrail <= 1) + tr_setup ("xephem Earth Trail setup", + eop->trail[0].t_obj.o_name, &eop->trstate, e_mktrail, + (XtPointer)client); + + /* show */ + e_all(0); + } +} + +/* called to toggle all buttons in the Show column. + */ +/* ARGSUSED */ +static void +e_showtgl_cb (Widget w, XtPointer client, XtPointer call) +{ + int i; + + for (i = 0; i < neobjs; i++) { + EObj *eop = &eobjs[i]; + + if (TBISON(eop->show_w)) + TBOFF (eop->show_w); + else + TBON (eop->show_w); + + /* duplicate e_show_cb() but without e_all() */ + if (TBISON(eop->show_w)) { + if (!eop->shownbefore) { + TBON(eop->wantfoot_w); + TBON(eop->wantlbl_w); + eop->shownbefore = 1; + } + } else { + TBOFF (eop->track_w); + TBOFF (eop->pick_w); + } + } + + e_all(0); +} + +/* called to toggle all buttons in the Label column. + */ +/* ARGSUSED */ +static void +e_wantlbltgl_cb (Widget w, XtPointer client, XtPointer call) +{ + int i; + + for (i = 0; i < neobjs; i++) { + EObj *eop = &eobjs[i]; + + if (TBISON(eop->wantlbl_w)) + TBOFF (eop->wantlbl_w); + else + TBON (eop->wantlbl_w); + + /* duplicate e_wantlbl_cb() but without e_all() */ + if (TBISON(eop->wantlbl_w)) { + TBON (eop->show_w); + eop->shownbefore = 1; + } + } + + e_all(0); +} + +/* called to toggle all buttons in the Foot Print column. + */ +/* ARGSUSED */ +static void +e_wantfoottgl_cb (Widget w, XtPointer client, XtPointer call) +{ + int i; + + for (i = 0; i < neobjs; i++) { + EObj *eop = &eobjs[i]; + + if (TBISON(eop->wantfoot_w)) + TBOFF (eop->wantfoot_w); + else + TBON (eop->wantfoot_w); + + /* duplicate e_wantfoot_cb() but without e_all() */ + if (TBISON(eop->wantfoot_w)) { + TBON (eop->show_w); + eop->shownbefore = 1; + } + } + + e_all(0); +} + +/* called to toggle all buttons in the Orbit column. + */ +/* ARGSUSED */ +static void +e_wantorbtgl_cb (Widget w, XtPointer client, XtPointer call) +{ + int i; + + for (i = 0; i < neobjs; i++) { + EObj *eop = &eobjs[i]; + + if (TBISON(eop->wantorb_w)) + TBOFF (eop->wantorb_w); + else + TBON (eop->wantorb_w); + + /* duplicate e_wantorb_cb() but without e_all() */ + if (TBISON(eop->wantorb_w)) { + TBON (eop->show_w); + eop->shownbefore = 1; + } + } + + e_all(0); +} + +/* called when the Reload weather map PB is pressed. + */ +/* ARGSUSED */ +static void +e_wxreload_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (e_setupwxpm(1, 1) == 0) + e_all (0); +} + +/* called when any projection button changes state. + * client will be one of Proj. + */ +/* ARGSUSED */ +static void +e_proj_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Proj newproj = (Proj)client; + + switch (newproj) { + case CYLG: + TBON (cylg_w); + TBOFF (cyli_w); + TBOFF (sphg_w); + TBOFF (sphi_w); + TBOFF (wxm_w); + XtSetSensitive (lat_w, False); + XtSetSensitive (lat0_w, False); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, False); + XtUnmanageChild (wxreload_w); + projection = newproj; + break; + + case CYLI: + TBOFF (cylg_w); + TBON (cyli_w); + TBOFF (sphg_w); + TBOFF (sphi_w); + TBOFF (wxm_w); + XtSetSensitive (lat_w, False); + XtSetSensitive (lat0_w, False); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, False); + XtUnmanageChild (wxreload_w); + projection = newproj; + break; + + case SPHG: + TBOFF (cylg_w); + TBOFF (cyli_w); + TBON (sphg_w); + TBOFF (sphi_w); + TBOFF (wxm_w); + XtSetSensitive (lat_w, True); + XtSetSensitive (lat0_w, True); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, True); + XtUnmanageChild (wxreload_w); + projection = newproj; + break; + + case SPHI: + TBOFF (cylg_w); + TBOFF (cyli_w); + TBOFF (sphg_w); + TBON (sphi_w); + TBOFF (wxm_w); + XtSetSensitive (lat_w, True); + XtSetSensitive (lat0_w, True); + XtSetSensitive (long_w, True); + XtSetSensitive (zoom_w, True); + XtUnmanageChild (wxreload_w); + projection = newproj; + break; + + case WXMAP: + if (e_setupwxpm(0, 0) == 0) { + TBOFF (cylg_w); + TBOFF (sphg_w); + TBON (wxm_w); + XtSetSensitive (lat_w, False); + XtSetSensitive (lat0_w, False); + XtSetSensitive (long_w, False); + XtSetSensitive (zoom_w, False); + XtManageChild (wxreload_w); + projection = newproj; + } else + TBOFF (wxm_w); + break; + } + + /* recompute the new size. + * if no change we call e_all() else leave it up to the expose. + */ + if (e_set_dasize() == 0) + e_all (0); +} + +/* adjust the size of e_da_w for the current projection, if necessary. + * return 1 if the size really does change, else 0. + */ +static int +e_set_dasize() +{ + Dimension nwid = 0, nhei = 0; + Dimension wid, hei; + int maxw; + Position x; + Arg args[10]; + int n; + + /* get max width, beware huge virtual screen size */ + maxw = DisplayWidth(XtD, DefaultScreen(XtD)); + if (maxw > MAXDW) + maxw = MAXDW; + maxw = 9*maxw/10; + + /* get drawing area size now */ + n = 0; + XtSetArg (args[n], XmNwidth, (XtArgVal)&wid); n++; + XtSetArg (args[n], XmNheight, (XtArgVal)&hei); n++; + XtGetValues (e_da_w, args, n); + + /* get shell position */ + n = 0; + XtSetArg (args[n], XmNx, (XtArgVal)&x); n++; + XtGetValues (eshell_w, args, n); + + /* change set nwid/hei to achieve desired aspect ratio, but never + * wider than screen. + */ + switch (projection) { + case SPHG: /* FALLTHRU */ + case SPHI: + /* 1:1 */ + nhei = nwid = hei; + break; + + case CYLG: /* FALLTHRU */ + case CYLI: + /* CYLASPECT:1 */ + nhei = hei; + nwid = (Dimension)(hei*CYLASPECT + 0.5); + if (nwid > maxw) { + nwid = maxw; + nhei = (Dimension)(nwid/CYLASPECT + 0.5); + } + break; + + case WXMAP: + /* force size to fit map */ + nhei = WXM_H; + nwid = WXM_W; + break; + } + + /* react if either changed */ + if (nwid != wid || nhei != hei) { + /* change both at once to disuade multiple exposures */ + n = 0; + XtSetArg (args[n], XmNwidth, (XtArgVal)nwid); n++; + XtSetArg (args[n], XmNheight, (XtArgVal)nhei); n++; + XtSetValues (e_da_w, args, n); + + /* reposition if necessary to fit on screen */ + if (x + nwid > maxw) { + x = maxw - nwid + 10; + n = 0; + XtSetArg (args[n], XmNx, x); n++; + XtSetValues (eshell_w, args, n); + } + + return (1); + } + + return (0); +} + +/* called when Set Main or Set from Main is activated. + * client is set to SET_MAIN or SET_FROM_MAIN. + */ +/* ARGSUSED */ +static void +e_setmain_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Now *np = mm_get_now(); + int which = (long int)client; + + switch (which) { + case SET_MAIN: + if (refsiteok) + mm_setsite (&refsite, 1); + else + mm_setll (elat, elng, 1); + break; + case SET_FROM_MAIN: + e_setelatlng (lat, lng); + noTrack(); + e_all (0); + break; + default: + printf ("e_setmain_cb: Bad client: %d\n", which); + abort(); + } +} + +/* called when either the longitude or latitude scale moves. + * doesn't matter which -- just update pointing direction and redraw. + * as a convenience, also insure tracking is off now. + * also forget any remembered refsites name. + */ +/* ARGSUSED */ +static void +e_latlong_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleCallbackStruct *s = (XmScaleCallbackStruct *)call; + + if (wants[LIVEDRAG] || s->reason == XmCR_VALUE_CHANGED) { + int lt, lg; + + XmScaleGetValue (lat_w, <); + XmScaleGetValue (long_w, &lg); + e_setelatlng (degrad(lt), degrad(-lg)); /*want +E but scale is +W */ + + /* manually sliding lat or long certainly voids a valid site code */ + refsiteok = 0; + + noTrack(); + + e_all (0); + } +} + +/* called to force latitude = 0. + */ +/* ARGSUSED */ +static void +e_lat0_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int lg; + + XmScaleGetValue (long_w, &lg); + e_setelatlng (0.0, degrad(-lg)); /*want +E but scale is +W */ + + refsiteok = 0; + + noTrack(); + + e_all (0); +} + +/* called when the Point button is selected on the roaming popup. + * get the details from pu_info. + * center the point of view to point_lt/point_lg. + * as a convenience, also turn off tracking. + * save the site info, if there was one with this pick. + */ +/* ARGSUSED */ +static void +e_point_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + e_setelatlng (pu_info.pu_lt, pu_info.pu_lg); + noTrack(); + if ((refsiteok = !!pu_info.pu_sp)) /* might be NULL */ + refsite = *pu_info.pu_sp; + e_all (0); +} + +/* make all the GCs, define all the e_*pix pixels and set the XFontStruct e_f + * we get the color names and save the pixels in the global ecolors[] arrary. + */ +static void +e_init_gcs () +{ + Display *dsp = XtDisplay (e_da_w); + Window win = XtWindow (e_da_w); + unsigned long gcm; + XGCValues gcv; + Pixel fg, p; + int i; + + /* just in case we are not up yet */ + if (!win) + return; + + /* create the main gc. + * it's GCForeground is set each time it's used. + */ + gcm = GCFunction; + gcv.function = GXcopy; + e_gc = XCreateGC (dsp, win, gcm, &gcv); + + /* get the foreground and background colors */ + get_something (e_da_w, XmNforeground, (XtArgVal)&fg); + get_color_resource (e_da_w, "EarthBackground", &e_bg); + + /* collect all the Earth color resources */ + for (i = 0; i < XtNumber(ecolors); i++) { + EColor *ecp = &ecolors[i]; + (void) get_color_resource (e_da_w, ecp->name, &ecp->p); + } + + /* make the overlay gc, e_olgc */ + /* got all the colors -- overlay can just be drawn directly */ + gcm = GCFunction; + gcv.function = GXcopy; + e_olgc = XCreateGC (dsp, win, gcm, &gcv); + + /* make the lat/long string gc and get's it's font */ + + gcm = GCForeground | GCBackground | GCFont; + get_something (e_dt_w, XmNforeground, (XtArgVal)&p); + gcv.foreground = p; + gcv.background = e_bg; + get_tracking_font (dsp, &e_f); + gcv.font = e_f->fid; + e_strgc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* copy the pixmap e_pm to the window of e_da_w. */ +static void +e_copy_pm() +{ + Display *dsp = XtDisplay(e_da_w); + Window win = XtWindow(e_da_w); + int w, h, r, wb, hb; + + e_getcircle (&w, &h, &r, &wb, &hb); + XCopyArea (dsp, e_pm, win, e_gc, 0, 0, w, h, 0, 0); +} + +/* right button has been hit: find the closest thing to x/y and display what we + * know about it. if nothing is very close, at least show the lat/long. + * always give the choice to point to the spot. + */ +/* ARGSUSED */ +static void +e_popup (wid, ev, d, xb, yb, x, y) +Widget wid; +XEvent *ev; +unsigned d; +unsigned xb, yb; +int x, y; +{ + Now *np = mm_get_now(); + int mind = 10000000; /* min pick dist so far */ + Site *minsip = NULL; /* closest site so far */ + Trail *mintp = NULL; /* closest trail or orbit so far */ + double lmt; /* local mean time: UT - radhr(lng) */ + double gst, lst; /* Greenich and local sidereal times */ + double lt, lg; + Trail *tp; + EObj *eop; + char buf[128]; + Widget w; + int i, nl; + + /* admit we might be busy for a while */ + watch_cursor (1); + + /* make the popup if this is our first time */ + if (!pu_info.pu_w) + e_create_popup(); + + /* find the closest site in minsip, if sites are enabled */ + if (wants[SITES]) { + Site *sipa; + int nsa; + + for (nsa = sites_get_list(&sipa); --nsa >= 0; ) { + Site *sip = &sipa[nsa]; + short sx, sy; + + if (e_coord (d, xb, yb, sip->si_lat, sip->si_lng, &sx, &sy)) { + int md = abs(sx-x) + abs(sy-y); + if (md < mind) { + minsip = sip; + mind = md; + } + } + } + } + + /* now check object positions, including any trail markers and orbits, + * for anything closer still. if so, put it in mintp. + * remember: the object in its current position is also on trail[]. + */ + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) { + if (TBISOFF(eop->show_w)) + continue; + for (tp = eop->trail; tp && tp < &eop->trail[eop->ntrail]; tp++) { + if (tp->lvis) { + int md = abs(tp->lx-x) + abs(tp->ly-y); + if (md < mind) { + mintp = tp; + mind = md; + } + } + } + if (eop->ovis) { + int md = abs(eop->ox-x) + abs(eop->oy-y); + if (md < mind) { + mintp = &eop->trail[0]; + mind = md; + } + } + } + + /* build the popup */ + + /* first unmanage all the labels -- we'll turn on what we want */ + for (i = 0; i < MAXPUL; i++) + XtUnmanageChild (pu_info.pu_labels[i]); + nl = 0; + + /* assume no sites entry for now */ + pu_info.pu_sp = NULL; + + if (mind <= MAXPDIST) { + /* found something, question is: a trailed object or a site? + * check them in the opposite order than which they were searched. + */ + if (mintp) { + double tzo = pref_get(PREF_ZONE)==PREF_LOCALTZ ? -tz/24.0 : 0; + Obj *op = &mintp->t_obj; + + /* a trail item was closest. + * put the name, time, lat and lng in the popup. + */ + w = pu_info.pu_labels[nl++]; + set_xmstring (w, XmNlabelString, mintp->t_obj.o_name); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Date: "); + fs_date (buf+strlen(buf), pref_get(PREF_DATE_FORMAT), + mjd_day(mintp->t_now.n_mjd+tzo)); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Time: "); + fs_time (buf+strlen(buf), mjd_hr(mintp->t_now.n_mjd+tzo)); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + if (pref_get (PREF_UNITS) == PREF_ENGLISH) + sprintf (buf, "Alt: %.0f mi", op->s_elev*FTPM/5280.); + else + sprintf (buf, "Alt: %.0f km", op->s_elev/1000.); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + if (pref_get (PREF_UNITS) == PREF_ENGLISH) + sprintf (buf, "Range: %.0f mi", op->s_range*FTPM/5280.); + else + sprintf (buf, "Range: %.0f km", op->s_range/1000.); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Sub Lat: "); + fs_dms_angle (buf+strlen(buf), mintp->t_sublat); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Sub Long: "); + fs_dms_angle (buf+strlen(buf), -mintp->t_sublng); /* want +W */ + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + if (is_type(&mintp->t_obj,EARTHSATM)) { + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Sunlit: %s", + mintp->t_obj.s_eclipsed ? "No" : "Yes"); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + } + + /* save lat/long for Point and if want to display alt/az */ + pu_info.pu_lt = mintp->t_sublat; + pu_info.pu_lg = mintp->t_sublng; + } else if (minsip) { + /* a site entry was closest. + * put it's name, lat/long and alt/az in the popup. + */ + double dist, bear; + + w = pu_info.pu_labels[nl++]; + set_xmstring (w, XmNlabelString, minsip->si_name); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "LMT: "); + lmt = mjd_hr(mjd) + radhr(minsip->si_lng); + range (&lmt, 24.0); + fs_time (buf+strlen(buf), lmt); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "LST: "); + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + lst = gst + radhr(minsip->si_lng); + range (&lst, 24.0); + fs_time (buf+strlen(buf), lst); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Lat: "); + fs_dms_angle (buf+strlen(buf), minsip->si_lat); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Long: "); + fs_dms_angle (buf+strlen(buf), -minsip->si_lng); /* want +W */ + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + e_greatCircle (minsip->si_lat, minsip->si_lng, &dist, &bear); + w = pu_info.pu_labels[nl++]; + if (pref_get (PREF_UNITS) == PREF_ENGLISH) + (void) sprintf (buf, "Dist: %.1f mi", dist*0.62137119e-3); + else + (void) sprintf (buf, "Dist: %.1f km", dist*1e-3); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Bearing: "); + fs_dms_angle (buf+strlen(buf), bear); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + /* save lat/long for Point and if want to display alt/az */ + pu_info.pu_lt = minsip->si_lat; + pu_info.pu_lg = minsip->si_lng; + + /* now we have site info too */ + pu_info.pu_sp = minsip; + } else { + printf ("e_popup: unknown closest! mind = %d\n", mind); + abort(); + } + } else { + /* nothing was close enough. + * just put the lat/long and alt/az of the cursor loc in the popup. + * if not over the earth, forget it. + */ + double dist, bear; + + if (!e_uncoord (projection, d, xb, yb, x, y, <, &lg)) { + watch_cursor(0); + return; + } + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "LMT: "); + lmt = mjd_hr(mjd) + radhr(lg); + range (&lmt, 24.0); + fs_time (buf+strlen(buf), lmt); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "LST: "); + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + lst = gst + radhr(lg); + range (&lst, 24.0); + fs_time (buf+strlen(buf), lst); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Lat: "); + fs_dms_angle (buf+strlen(buf), lt); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Long: "); + fs_dms_angle (buf+strlen(buf), -lg); /* want +W */ + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + e_greatCircle (lt, lg, &dist, &bear); + w = pu_info.pu_labels[nl++]; + if (pref_get (PREF_UNITS) == PREF_ENGLISH) + (void) sprintf (buf, "Dist: %.1f mi", dist*0.62137119e-3); + else + (void) sprintf (buf, "Dist: %.1f km", dist*1e-3); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "Bearing: "); + fs_dms_angle (buf+strlen(buf), bear); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + /* save lat/long for Point and if want to display alt/az */ + pu_info.pu_lt = lt; + pu_info.pu_lg = lg; + + /* signal no trail found for pick_w work */ + mintp = NULL; + } + + /* unless we found a trail entry, show alt/az of pick_w object (if any) + */ + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + if (TBISON(eop->pick_w)) + break; + if (!mintp && eop < &eobjs[nfavs]) { + Now now_here; /* temp Now */ + Obj obj_here; /* temp Obj */ + + (void) memcpy ((void *)&now_here, (void *)&eop->trail[0].t_now, + sizeof (Now)); + now_here.n_lat = pu_info.pu_lt; + now_here.n_lng = pu_info.pu_lg; + (void) memcpy ((void *)&obj_here, (void *)&eop->trail[0].t_obj, + sizeof (Obj)); + (void) obj_cir (&now_here, &obj_here); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "%s Alt: ", obj_here.o_name); + fs_pangle (buf+strlen(buf), obj_here.s_alt); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + + w = pu_info.pu_labels[nl++]; + (void) sprintf (buf, "%s Az: ", obj_here.o_name); + fs_pangle (buf+strlen(buf), obj_here.s_az); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + } + + if (nl > MAXPUL) { + printf ("Too many earth popup labels: %d of %d\n", nl, MAXPUL); + abort(); + } + + XmMenuPosition (pu_info.pu_w, (XButtonPressedEvent *)ev); + XtManageChild (pu_info.pu_w); + + watch_cursor(0); +} + +/* create the popup + * save all its widgets in the pu_info struct. + */ +static void +e_create_popup() +{ + Widget w; + Arg args[20]; + int n; + int i; + + /* make the popup shell which includes a handy row/column */ + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + pu_info.pu_w = XmCreatePopupMenu (e_da_w, "EPopup", args, n); + + /* add the max labels we'll ever need -- all unmanaged for now. */ + for (i = 0; i < MAXPUL; i++) { + n = 0; + pu_info.pu_labels[i] = XmCreateLabel (pu_info.pu_w, "EPUL",args,n); + } + + /* and add the separator and the "Point" button. + * we always wants these so manage them now. + */ + w = XmCreateSeparator (pu_info.pu_w, "PUSep", args, 0); + XtManageChild (w); + w = XmCreatePushButton (pu_info.pu_w, "Point", args, 0); + XtAddCallback (w, XmNactivateCallback, e_point_cb, 0); + XtManageChild (w); +} + +/* given diameter and x/y border display info at the given lat/long + */ +static void +e_track_latlng (w, d, xb, yb, lt, lg) +Widget w; +int d; +int xb, yb; +double lt, lg; +{ + static int last_lst_w, last_lmt_w, last_ll_w, last_db_w; + int topy = projection == WXMAP ? WXM_TY : 0; + int boty = projection == WXMAP ? WXM_BY : d + 2*yb; + int wide = d + 2*xb; + Now *np = mm_get_now(); + Window win = XtWindow(w); + char lst_buf[64], lmt_buf[64], lng_buf[64], lat_buf[64]; + char dist_buf[64], bear_buf[64]; + Pixel fg, bg; + XCharStruct all; + double dist, bear; + double lst, gst, lmt; + int dir, asc, des; + int len; + + /* great circle info */ + e_greatCircle (lt, lg, &dist, &bear); + + /* fill in the strings */ + (void) strcpy (bear_buf, "Bearing: "); + fs_dms_angle (bear_buf+strlen(bear_buf), bear); + if (pref_get (PREF_UNITS) == PREF_ENGLISH) + (void) sprintf (dist_buf, "Distance: %7.1f mi", dist*0.62137119e-3); + else + (void) sprintf (dist_buf, "Distance: %7.1f km", dist*1e-3); + (void) strcpy (lat_buf, " Lat: "); + fs_dms_angle (lat_buf+strlen(lat_buf), lt); + (void) strcpy (lng_buf, "Long: "); + fs_dms_angle (lng_buf+strlen(lng_buf), -lg); /* want +W */ + lmt = mjd_hr(mjd) + radhr(lg); + range (&lmt, 24.0); + (void) strcpy (lmt_buf, "LMT: "); + fs_time (lmt_buf+strlen(lmt_buf), lmt); + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + lst = gst + radhr(lg); + range (&lst, 24.0); + (void) strcpy (lst_buf, "LST: "); + fs_time (lst_buf+strlen(lst_buf), lst); + + /* set colors */ + fg = ecolors[SUNC].p; + bg = e_bg; + + /* draw the strings, first erasing the previous */ + + /* lat/long in upper left */ + len = strlen (lat_buf); + XTextExtents (e_f, lat_buf, len, &dir, &asc, &des, &all); + if (all.width > last_ll_w) + last_ll_w = all.width; + len = strlen (lng_buf); + XTextExtents (e_f, lng_buf, len, &dir, &asc, &des, &all); + if (all.width > last_ll_w) + last_ll_w = all.width; + XSetForeground (XtD, e_strgc, bg); + XFillRectangle (XtD, win, e_strgc, 0, topy, last_ll_w, 2*(asc+des)); + XSetForeground (XtD, e_strgc, fg); + XDrawString (XtD, win, e_strgc, 0, topy+asc, lat_buf, strlen(lat_buf)); + XDrawString (XtD, win, e_strgc, 0, topy+2*asc+des, lng_buf, strlen(lng_buf)); + + /* dist/bear in upper right */ + len = strlen (dist_buf); + XTextExtents (e_f, dist_buf, len, &dir, &asc, &des, &all); + if (all.width > last_db_w) + last_db_w = all.width; + len = strlen (bear_buf); + XTextExtents (e_f, bear_buf, len, &dir, &asc, &des, &all); + if (all.width > last_db_w) + last_db_w = all.width; + XSetForeground (XtD, e_strgc, bg); + XFillRectangle (XtD, win, e_strgc, wide-last_db_w, topy, last_db_w, 2*(asc+des)); + XSetForeground (XtD, e_strgc, fg); + XDrawString (XtD, win, e_strgc, wide-last_db_w, topy+asc, dist_buf, strlen(dist_buf)); + XDrawString (XtD, win, e_strgc, wide-last_db_w, topy+2*asc+des, bear_buf, strlen(bear_buf)); + + /* lmt in lower left */ + len = strlen (lmt_buf); + XTextExtents (e_f, lmt_buf, len, &dir, &asc, &des, &all); + if (all.width > last_lmt_w) + last_lmt_w = all.width; + XSetForeground (XtD, e_strgc, bg); + XFillRectangle (XtD, win, e_strgc, 0, boty-(asc+des), last_lmt_w, + asc+des); + XSetForeground (XtD, e_strgc, fg); + XDrawString (XtD, win, e_strgc, 0, boty-des, lmt_buf, len); + + /* lst in lower right */ + len = strlen (lst_buf); + XTextExtents (e_f, lst_buf, len, &dir, &asc, &des, &all); + if (all.width > last_lst_w) + last_lst_w = all.width; + XSetForeground (XtD, e_strgc, bg); + XFillRectangle (XtD, win, e_strgc, wide-last_lst_w, boty-(asc+des), + last_lst_w, asc+des); + XSetForeground (XtD, e_strgc, fg); + XDrawString (XtD, win, e_strgc, wide-last_lst_w, boty-des, + lst_buf, len); +} + +/* set the elat/selat/celat/elng values, taking care to put them into ranges + * -PI/2 .. elat .. PI/2 and -PI .. elng .. PI. + */ +static void +e_setelatlng (lt, lg) +double lt, lg; +{ + elat = lt; + selat = sin(elat); + celat = cos(elat); + elng = lg; + range (&elng, 2*PI); + if (elng > PI) + elng -= 2*PI; + + /* capture new inertial frame if on */ + if (wants[INERTIALF]) + ll2rd (elat, elng, &ira, &idec); +} + +/* return the lat/lng of the subobject point (lat/long of where the object + * is directly overhead) at np. + * both are in rads, lat is +N, long is +E. + */ +static void +e_subobject(np, op, latp, longp) +Now *np; +Obj *op; +double *latp, *longp; +{ + if (op->o_type == EARTHSAT) { + /* these are all ready to go */ + *latp = op->s_sublat; + *longp = op->s_sublng; + } else { + double gst; + double ra, dec; + + ra = op->s_gaera; + dec = op->s_gaedec; + + *latp = dec; + + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + *longp = ra - hrrad(gst); /* remember: we want +E */ + range (longp, 2*PI); + if (*longp > PI) + *longp -= 2*PI; + } +} + +/* find the rate of change of op->s_edist in m/s + */ +static double +e_edist_rate (Now *np, Obj *op) +{ + double h = 0.5/24.0; /* step size, days */ + double e0, e1; /* edist @ mjd-h and mjd+h */ + Now myn = *np; /* copy for modified times */ + + myn.n_mjd = mjd - h; + obj_cir (&myn, op); + e0 = op->s_edist; + + myn.n_mjd = mjd + h; + obj_cir (&myn, op); + e1 = op->s_edist; + + return ((MAU/SPD)*(e1-e0)/(2*h)); +} + +/* show the stats for the object in the given trow in its current + * position. if it's of type EARTHSAT then display its s_ fields; otherwise + * turn off the display of these items. + */ +static void +e_show_esat_stats (eop) +EObj *eop; +{ + Now *np = mm_get_now(); + Obj *op = &eop->trail[0].t_obj; + int unitspref = pref_get (PREF_UNITS); + int dok = dateOK (np, op) == 0; + + /* all objects show sublocation unless invalid date */ + if (dok) { + f_dms_angle (eop->slat_w, eop->trail[0].t_sublat); + f_dms_angle (eop->slng_w, -eop->trail[0].t_sublng); + } else { + f_string (eop->slat_w, " "); + f_string (eop->slng_w, " "); + } + + if (dok && op->o_type == EARTHSAT) { + if (unitspref == PREF_ENGLISH) { + f_showit (altlbl_w, "Alt\nmiles"); + f_double (eop->el_w, "%7.5g", op->s_elev*FTPM/5280.0); + } else { + f_showit (altlbl_w, "Alt\nkm"); + f_double (eop->el_w, "%7.5g", op->s_elev/1000.0); + } + + if (unitspref == PREF_ENGLISH) { + f_showit (rangelbl_w, "Range\nmiles"); + f_double (eop->range_w, "%7.5g", op->s_range*FTPM/5280.0); + } else { + f_showit (rangelbl_w, "Range\nkm"); + f_double (eop->range_w, "%7.5g", op->s_range/1000.0); + } + + if (unitspref == PREF_ENGLISH) { + f_showit (rangerlbl_w, "Range'\nft/s"); + f_double (eop->rrate_w, "%7.5g", op->s_rangev*FTPM); + } else { + f_showit (rangerlbl_w, "Range'\nm/s"); + f_double (eop->rrate_w, "%7.5g", op->s_rangev); + } + + f_double (eop->sun_w, "%.0f", op->s_eclipsed ? 0.0 : 1.0); + + f_double (eop->age_w, "%.2f", mjd - op->es_epoch); + + } else if (dok && is_type(op,ELLIPTICALM|HYPERBOLICM|PARABOLICM|PLANETM)) { + f_string (eop->el_w, " "); + f_string (eop->range_w, " "); + + if (unitspref == PREF_ENGLISH) { + f_showit (rangerlbl_w, "Range'\nft/s"); + f_double (eop->rrate_w, "%7.5g", e_edist_rate (np, op)*FTPM); + } else { + f_showit (rangerlbl_w, "Range'\nm/s"); + f_double (eop->rrate_w, "%7.5g", e_edist_rate (np, op)); + } + + f_string (eop->sun_w, " "); + f_string (eop->age_w, " "); + + } else { + f_string (eop->el_w, " "); + f_string (eop->range_w, " "); + f_string (eop->rrate_w, " "); + f_string (eop->sun_w, " "); + f_string (eop->age_w, " "); + } +} + +/* given a lat/long now find ra/dec overhead */ +static void +ll2rd (double l, double L, double *rap, double *decp) +{ + Now *np = mm_get_now(); + double gst; + + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + *rap = hrrad(gst) + L; /* because overhead HA == 0 */ + range (rap, 2*PI); + *decp = l; +} + +/* given a ra/dec return lat/long where it is overhead */ +static void +rd2ll (double ra, double dec, double *lp, double *Lp) +{ + Now *np = mm_get_now(); + double gst; + + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + *Lp = ra - hrrad(gst); /* because overhead HA == 0 */ + range (Lp, 2*PI); + *lp = dec; +} + +/* given: + * the current viewpoint coords (from globals selat/celat/elng) + * diameter and borders of circle in current window + * latitude and longitude of a point p: pl, pL; + * projection + * find: + * x and y coords of point on screen + * always return the coordinates, but return 1 if the point is visible or 0 if + * it's over the limb. + */ +static int +e_coord (d, wb, hb, pl, pL, xp, yp) +unsigned d; /* diameter of drawing surface circle */ +unsigned wb, hb; /* width/height borders between circle and edges */ +double pl, pL; /* point p lat, rads, +N; long, rads, +E */ +short *xp, *yp; /* projected location onto drawing surface */ +{ + switch (projection) { + case CYLI: /* FALLTHRU */ + case CYLG: { + unsigned w = d + 2*wb; + unsigned h = d + 2*hb; + double dL; + + // *yp = (int)floor(h/2.0 * (1.0 - sin(pl)) + 0.5); + *yp = (int)floor(h/2.0 * (1.0 - 2*pl/PI) + 0.5); + + dL = pL - elng; + range(&dL, 2*PI); + if (dL > PI) dL -= 2*PI; + *xp = (int)floor(w/2.0 * (1.0 + dL/PI) + 0.5); + + return (1); + } + + case SPHI: /* FALLTHRU */ + case SPHG: { + double sR, cR; /* R is radius from viewpoint to p */ + double A, sA,cA; /* A is azimuth of p as seen from viewpoint */ + unsigned int r = d/2; + + solve_sphere (pL - elng, PI/2 - pl, selat, celat, &cR, &A); + sR = sqrt(1.0 - cR*cR); + sA = sin(A); + cA = cos(A); + + *xp = wb + r + (int)floor(r*sR*sA + 0.5); + *yp = hb + r - (int)floor(r*sR*cA + 0.5); + + return (cR > -.0001); + } + + case WXMAP: { + mollweide_llxy (pl, pL, xp, yp); + return (1); + } + } + + return (0); +} + +/* draw circles onto e_pm within circle of diameter d and width and height + * borders wb and hb showing where the satellite is seen as being 0, 30 and 60 + * degrees altitude above horizon as well. + * also draw a crosshair at the actual location. + * return 1 if any part was visible, else 0. + */ +static int +e_drawfootprint (np, eop, d, wb, hb, slat, slng, el) +Now *np; /* circumstances */ +EObj *eop; /* object info */ +int d, wb, hb; /* dia and width/height borders of circle to use */ +double slat, slng; /* satellite's lat and lng */ +double el; /* satellite's elevation above surface, m */ +{ + double rad; /* viewing altitude radius, rads */ + int isvis; + + e_viewrad (np, el, degrad(0.0), &rad); + isvis = e_drawcircle (eop->pix, d, wb, hb, slat, slng, rad); + e_viewrad (np, el, degrad(30.0), &rad); + e_drawcircle (eop->pix, d, wb, hb, slat, slng, rad); + e_viewrad (np, el, degrad(60.0), &rad); + e_drawcircle (eop->pix, d, wb, hb, slat, slng, rad); + e_drawcross (d, wb, hb, slat, slng, CROSSH); + + return (isvis); +} + +/* assuming the current vantage point of elat/elng, draw a circle around the + * given lat/long point of given angular radius. + * all angles in rads. + * we do it by sweeping an arc from the given location and collecting the end + * points. beware going over the horizon or wrapping around the edge. + * return 1 if any part of the circle is visible, else 0. + */ +static int +e_drawcircle (pix, d, wb, hb, slat, slng, rad) +Pixel pix; /* drawing color */ +unsigned d, wb, hb; /* dia and width/height borders of circle to use */ +double slat, slng; /* lat/long of object */ +double rad; /* angular radius of circle to draw */ +{ +#define MAXVCIRSEGS 62 + XPoint xp[MAXVCIRSEGS+1]; + double cosc = cos(PI/2 - slat); /* cos/sin of N-pole-to-slat angle */ + double sinc = sin(PI/2 - slat); + double b = rad; /* sat-to-arc angle */ + double A; /* subobject azimuth */ + double cosa; /* cos of pole-to-arc angle */ + double B; /* subobj-to-view angle from pole */ + int nvcirsegs = MAXVCIRSEGS; + int nxp = 0; + int isvis; + int w = d + 2*wb; + int vis; + int i; + + /* use the overlay gc, wide lines, pix color */ + XSetLineAttributes (XtD, e_olgc, NARROW_LW, LINE_ST, CAP_ST, JOIN_ST); + XSetForeground (XtD, e_olgc, pix); + + isvis = 0; + for (i = 0; i <= nvcirsegs; i++) { + short x, y; + A = 2*PI/nvcirsegs * i; + solve_sphere (A, b, cosc, sinc, &cosa, &B); + vis = e_coord (d, wb, hb, PI/2-acos(cosa), B+slng, &x, &y); + if (vis) + isvis = 1; + + nxp = add_to_polyline (xp, XtNumber(xp), i,vis,nxp,nvcirsegs,w,x,y); + } + + return (isvis); +} + +/* draw a little crosshair or plussign at the given location with the e_olgc + * return whether visible + */ +static int +e_drawcross (d, wb, hb, lt, lg, style) +unsigned d, wb, hb; /* dia and width/height borders of circle to use */ +double lt, lg; /* desired center location */ +int style; /* CROSSH or PLUSS */ +{ + double lats[4], lngs[4]; /* lats and longs of endpoints */ + XSegment xs[4]; /* one for each cardinal direction */ + double a, cosa; /* north-to-cross from view */ + double B; /* cross-width from north */ + short sx, sy; /* x and y of the center */ + int w = d + 2*wb; + int linew = 0; + int nxs; + int vis; + int xwrap; + int i; + + /* find location of center of cross-hair */ + vis = e_coord (d, wb, hb, lt, lg, &sx, &sy); + if (!vis) + return (0); /* center is not visible so forget the rest */ + + /* find longitude sweep to produce given e/w arc */ + + switch (style) { + case CROSSH: + solve_sphere (PI/4, CHLEN, sin(lt), cos(lt), &cosa, &B); + a = acos(cosa); + lats[0] = PI/2-a; lngs[0] = lg+B; + lats[1] = PI/2-a; lngs[1] = lg-B; + solve_sphere (3*PI/4, CHLEN, sin(lt), cos(lt), &cosa, &B); + a = acos(cosa); + lats[2] = PI/2-a; lngs[2] = lg+B; + lats[3] = PI/2-a; lngs[3] = lg-B; + linew = NARROW_LW; + break; + case PLUSS: + solve_sphere (PI/2, PLLEN, sin(lt), cos(lt), &cosa, &B); + a = acos(cosa); + lats[0] = PI/2-a; lngs[0] = lg+B; + lats[1] = PI/2-a; lngs[1] = lg-B; + lats[2] = lt-PLLEN; lngs[2] = lg; + if (lats[2] < -PI/2) { + lats[2] = -PI - lats[2];lngs[2] += PI; /* went under S pole */ + } + lats[3] = lt+PLLEN; lngs[3] = lg; + if (lats[3] > PI/2) { + lats[3] = PI - lats[3]; lngs[3] += PI; /* went over N pole */ + } + linew = WIDE_LW; + break; + default: + printf ("e_drawcross: bad style: %d\n", style); + abort(); + } + + nxs = 0; + for (i = 0; i < 4; i++) { + short x, y; + vis = e_coord (d, wb, hb, lats[i], lngs[i], &x, &y); + + if (projection != SPHG && projection != SPHI + && (sx - x > w/2 || x - sx > w/2)) + xwrap = 1; + else + xwrap = 0; + + if (vis && !xwrap) { + xs[nxs].x1 = x; + xs[nxs].y1 = y; + xs[nxs].x2 = sx; + xs[nxs].y2 = sy; + nxs++; + } + } + + if (nxs > 0) { + XSetLineAttributes (XtD, e_olgc, linew, LINE_ST, CAP_ST, JOIN_ST); + XPSDrawSegments (XtD, e_pm, e_olgc, xs, nxs); + } + + return (1); +} + +/* draw the lat/long grid lines */ +static void +e_drawgrid (d, wb, hb) +unsigned d, wb, hb; /* dia and width/height borders of circle to use */ +{ +#define MAXGRIDSEGS 60 /* max segments per grid line */ + int nsegs = MAXGRIDSEGS; + XPoint xp[MAXGRIDSEGS+1]; + int mxp = XtNumber(xp); + int w = d + 2*wb; + int i, j; + + /* use the overlay GC, narrow lines, GRIDC color */ + XSetLineAttributes (XtD, e_olgc, NARROW_LW, LINE_ST, CAP_ST, JOIN_ST); + XSetForeground (XtD, e_olgc, ecolors[GRIDC].p); + + /* draw each line of constant longitude */ + for (i = 0; i < 360/LNGSTEP; i++) { + double lg = i * degrad(LNGSTEP); + int nxp = 0; + for (j = 0; j <= nsegs; j++) { + short x, y; + double lt = degrad (90 - j*180.0/nsegs); + int vis = e_coord (d, wb, hb, lt, lg, &x, &y); + nxp = add_to_polyline (xp, mxp, j, vis, nxp, nsegs, w, x, y); + } + } + + /* draw each line of constant latitude -- beware of x wrap */ + for (i = 1; i < 180/LATSTEP; i++) { + double lt = degrad (90 - i*LATSTEP); + int nxp = 0; + for (j = 0; j <= nsegs; j++) { + short x, y; + double lg = degrad(180.0 - j*360.0/nsegs); + int vis = e_coord (d, wb, hb, lt, lg, &x, &y); + nxp = add_to_polyline (xp, mxp, j, vis, nxp, nsegs, w, x, y); + } + } +} + +/* given projection, diam and size of window and X-coord x/y, return lat/long. + * see e_getcircle() for meanings in each projection. + * return 1 if inside the map, else 0. + */ +static int +e_uncoord (proj, d, xb, yb, x, y, ltp, lgp) +Proj proj; /* which projection to use */ +unsigned int d; /* diameter of earth limb, pixels */ +unsigned xb, yb; /* borders around circle */ +int x, y; /* X-windows coords of loc */ +double *ltp, *lgp; /* resulting lat/long, rads */ +{ + switch (proj) { + + case CYLI: /* FALLTHRU */ + case CYLG: { + int maxx = d + 2*xb; + int maxy = d + 2*yb; + + if (x < 0 || x >= maxx || y < 0 || y >= maxy) + return (0); + + //*ltp = asin (1.0 - 2.0*y/maxy); + *ltp = PI * (1.0 - 2.0*y/maxy) / 2; + + *lgp = 2*PI*(x - maxx/2)/maxx + elng; + if (*lgp > PI) *lgp -= 2*PI; + if (*lgp < -PI) *lgp += 2*PI; + + return (1); + } + + case SPHI: /* FALLTHRU */ + case SPHG: { + double X, Y;/* x/y but signed from center +x right +y up, pixels*/ + double R; /* pixels x/y is from center */ + double b; /* angle from viewpoint to x/y */ + double A; /* angle between N pole and x/y as seen from viewpt */ + double a, ca; /* angle from N pole to x/y */ + double B; /* angle from viewpoint to x/y as seen from N pole */ + unsigned int r = d/2; + + X = x - (int)(r + xb); + Y = (int)(r + yb) - y; + R = sqrt (X*X + Y*Y); + if (R >= r) + return (0); + + if (R < 1.0) { + *ltp = elat; + *lgp = elng; + } else { + b = asin (R/r); + A = atan2 (X, Y); + solve_sphere (A, b, selat, celat, &ca, &B); + a = acos (ca); + *ltp = PI/2 - a; + *lgp = elng + B; + range (lgp, 2*PI); + if (*lgp > PI) + *lgp -= 2*PI; + } + + return (1); + } + + case WXMAP: { + return (mollweide_xyll (x, y, ltp, lgp)); + } + + default: + printf ("Unknown earth projection: %d\n", proj); + abort(); + } +} + +/* Turn off track_w in all eobjs */ +static void +noTrack() +{ + EObj *eop; + + for (eop = eobjs; eop < &eobjs[neobjs]; eop++) + TBOFF (eop->track_w); +} + +/* draw everything: fields (always) and the picture (if managed). + * if statstoo then redraw the info table too. making this explicit allows + * for faster redraw when we know full well the stats have not changed. + */ +static void +e_all (statstoo) +int statstoo; +{ + Now *np = mm_get_now(); + EObj *eop; + + watch_cursor(1); + + /* point at it if tracking is on */ + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) { + if (TBISON (eop->track_w)) { + e_setelatlng (eop->trail[0].t_sublat, eop->trail[0].t_sublng); + break; /* there can only be one On */ + } + } + + /* if want inertial frame, use it to set lat/long */ + if (wants[INERTIALF]) { + double l, L; + rd2ll (ira, idec, &l, &L); + e_setelatlng (l, L); + } + + /* update the scale -- remember we want +W longitude, -180..+179 */ + XmScaleSetValue (lat_w, (int)floor(raddeg(elat)+0.5)); + XmScaleSetValue (long_w, (((int)floor(raddeg(-elng)+.5)+180)%360)-180); + + /* display the picture now if we are up for sure. + * N.B. don't just use whether eshell_w is up: if we are looping + * and get managed drawing occurs before the first expose makes the pm. + */ + if (e_pm) { + e_map (np); + e_copy_pm(); + } + + /* update stats. + * N.B. do after graphics to avoid flashing + */ + if (statstoo) + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) + e_show_esat_stats (eop); + + /* put up the current time */ + timestamp (np, e_dt_w); + timestamp (np, e_cdt_w); + + watch_cursor(0); +} + +/* find size and borders for drawing earth. + * if spherical, center a circle of max size that completely fits. + * if cylindrical, use entire rectangle. + * if wxmap, assume correct (fixed) size, r is horizontal half-width. + */ +static void +e_getcircle (wp, hp, dp, xbp, ybp) +int *wp, *hp; /* overall width and height */ +int *dp; /* circle diameter */ +int *xbp, *ybp; /* x and y border */ +{ + Display *dsp = XtDisplay(e_da_w); + Window win = XtWindow(e_da_w); + Window root; + unsigned int bw, d; + int x, y; + int z; + + if (projection == WXMAP) { + *wp = WXM_W; + *hp = WXM_H; + *dp = WXM_W - WXM_LX; + *xbp = WXM_LX; + *ybp = WXM_TY; + return; + } + + XGetGeometry (dsp, win, &root, &x, &y, (unsigned int *)wp, + (unsigned int *)hp, &bw, &d); + + *dp = *wp > *hp ? *hp : *wp; /* diameter is smaller dimension */ + XmScaleGetValue (zoom_w, &z); + *dp = (int)(*dp * MINZOOM * pow(MAXZOOM/MINZOOM,(double)z/ZOOMSCALE)); + *xbp = (*wp - *dp)/2; /* x border */ + *ybp = (*hp - *dp)/2; /* y border */ + +} + +/* draw everything centered at elat/elng onto e_pm. + */ +static void +e_map (np) +Now *np; +{ + Display *dsp = XtDisplay(e_da_w); + int w, h, d, wb, hb; + EObj *eop; + + /* get size of the rendering area */ + e_getcircle (&w, &h, &d, &wb, &hb); + + /* setup the background and night on screen, but don't print */ + switch (projection) { + case CYLI: + if ((!deipix && loaddei() < 0) || (!neipix && loadnei() < 0)) + return; /* bzzt */ + drawei(w, h, d, wb, hb); + XSetForeground (dsp, e_gc, e_bg); + XPSPixmap (e_pm, w, h, xe_cm, e_gc, 0); + break; + + case CYLG: + XSetForeground (dsp, e_gc, e_bg); + XFillRectangle (dsp, e_pm, e_gc, 0, 0, w, h); + break; + + case SPHI: + if ((!deipix && loaddei() < 0) || (!neipix && loadnei() < 0)) + return; /* bzzt */ + drawei(w, h, d, wb, hb); + XSetForeground (dsp, e_gc, e_bg); + XPSPixmap (e_pm, w, h, xe_cm, e_gc, 0); + break; + + case SPHG: + XSetForeground (dsp, e_gc, e_bg); + XFillRectangle (dsp, e_pm, e_gc, 0, 0, w, h); + XFillArc (dsp, e_pm, e_gc, wb, hb, d, d, 0, 360*64); + break; + + case WXMAP: + if (e_setupwxpm(0, 0) < 0) + return; + XCopyArea (dsp, e_wxpm, e_pm, e_gc, 0, 0, w, h, 0, 0); + XPSPixmap (e_pm, w, h, xe_cm, 0, 0); + break; + } + + /* draw sunlit portion of earth */ + if (wants[SUNLIGHT]) + e_sunlit (np, d, wb, hb); + + /* draw coord grid */ + if (wants[GRID]) + e_drawgrid (d, wb, hb); + + /* draw each continent border -- just on night side sometimes */ + if (projection == CYLG || projection == SPHG || wants[SUNLIGHT]) + e_drawcontinents (d, wb, hb); + + /* draw each site */ + if (wants[SITES]) + e_drawsites (d, wb, hb); + + /* draw each shown object subject to date range and its trails if any */ + for (eop = eobjs; eop < &eobjs[nfavs]; eop++) { + if (dateOK(np, eop->op) == 0 && TBISON(eop->show_w)) { + int dreworb = 0; + if (is_type(eop->op, EARTHSATM) && TBISON(eop->wantorb_w)) { + e_draworbit (eop, d, wb, hb); /*always draws name if want*/ + dreworb = 1; + } else + eop->ovis = 0; + if (e_drawobject (np, eop, d, wb, hb) && !dreworb && + TBISON(eop->wantlbl_w)) + e_drawname (eop, d, wb, hb); + if (TBISON(eop->showtr_w)) + e_drawtrail (eop, d, wb, hb); + } + } + + /* mark the mainmenu location */ + if (wants[MAINMARKER]) + e_mainmenuloc (np, d, wb, hb); + + /* mark any solar eclipse location */ + e_soleclipse (np, d, wb, hb); + + /* draw any annotation */ + ano_draw (e_da_w, e_pm, e_ano, 0); +} + +/* convert world to/from X coords depending on w2x. + * return whether visible. + */ +static int +e_ano (double *latp, double *longp, int *xp, int *yp, int w2x, int arg) +{ + int w, h, d, wb, hb; + int v; + + /* get size of the rendering area */ + e_getcircle (&w, &h, &d, &wb, &hb); + + if (w2x) { + short sx, sy; + v = e_coord (d, wb, hb, *latp, *longp, &sx, &sy); + *xp = sx; + *yp = sy; + } else { + v = e_uncoord (projection, d, wb, hb, *xp, *yp, latp, longp); + } + + return (v); +} + +/* draw the portion of the earth lit by the sun */ +static void +e_sunlit (np, d, wb, hb) +Now *np; /* circumstances */ +unsigned int d, wb, hb; /* circle dia, width and height borders in pixmap */ +{ + switch (projection) { + case CYLI: + /* already done in background */ + break; + case CYLG: + e_msunlit (np, d, wb, hb); + break; + case SPHI: + /* already done in background */ + break; + case SPHG: + e_ssunlit (np, d, wb, hb); + break; + case WXMAP: + /* already part of e_wxpm */ + break; + } +} + +/* draw the sunlit portion of the Earth in cylindrical projection. + */ +static void +e_msunlit (np, d, wb, hb) +Now *np; /* circumstances */ +unsigned int d, wb, hb; /* circle dia, width and height borders in pixmap */ +{ +#define MAXNMPTS 256 /* n segments -- larger is finer but slower */ + Display *dsp = XtDisplay(e_da_w); + XPoint xp[MAXNMPTS+4]; /* extra room for top or bottom box */ + double sslat, sslong; /* subsolar lat/long, rads, +N +E */ + double az0, daz; /* initial and delta az so we move +x */ + int nmpts = MAXNMPTS; + double ssl, csl; + int w = d + 2*wb; + int h = d + 2*hb; + short x, y; + int yi; + int wrapn, i; + + e_subobject (np, db_basic(SUN), &sslat, &sslong); + ssl = sin(sslat); + csl = cos(sslat); + + if (sslat < 0) { + az0 = 0; + daz = 2*PI/nmpts; + } else { + az0 = PI; + daz = -2*PI/nmpts; + } + + /* fill in the circle of nmpts points that lie PI/2 from the + * subsolar point and projecting from the viewpoint. + * when wrap, shuffle points up so final polygon doesn't wrap. + */ + XSetForeground (dsp, e_gc, ecolors[SUNC].p); + wrapn = 0; + for (i = 0; i < nmpts; i++) { + double A = az0 + i*daz; /* azimuth of p from subsol */ + double sA = sin(A), cA = cos(A); + double plat = asin (csl*cA); /* latitude of p */ + double plong = atan2(sA, -ssl*cA) + sslong; /* long of p */ + XPoint *xpp = &xp[i-wrapn]; + + (void) e_coord (d, wb, hb, plat, plong, &x, &y); + + xpp->x = x; + xpp->y = y; + + if (wrapn == 0 && i > 0 && x < xpp[-1].x) { + /* when wrap copy points so far to end and this one is first. + * N.B. go backwards in case we are over half way. + */ + for ( ; wrapn < i; wrapn++) + xp[nmpts-1-wrapn] = xp[i-1-wrapn]; + xp[0].x = x; + xp[0].y = y; + } + } + + /* y-intercept at the edges is the average of the y's at each end */ + yi = (xp[0].y + xp[nmpts-1].y)/2; + + /* complete polygon across bottom if sun is below equator, or vv */ + if (sslat < 0) { + xp[i].x = w; xp[i].y = yi; i++; /* right */ + xp[i].x = w; xp[i].y = h; i++; /* down */ + xp[i].x = 0; xp[i].y = h; i++; /* left */ + xp[i].x = 0; xp[i].y = yi; i++; /* up */ + } else { + xp[i].x = w; xp[i].y = yi; i++; /* right */ + xp[i].x = w; xp[i].y = 0; i++; /* up */ + xp[i].x = 0; xp[i].y = 0; i++; /* left */ + xp[i].x = 0; xp[i].y = yi; i++; /* down */ + } + + XPSFillPolygon (dsp, e_pm, e_gc, xp, i, Complex, CoordModeOrigin); +} + +/* draw the solid gibbous or crescent sun-lit portion of the Earth in spherical + * projection. + */ +static void +e_ssunlit (np, d, wb, hb) +Now *np; /* circumstances */ +unsigned int d, wb, hb; /* circle dia, width and height borders in pixmap */ +{ +#define MAXNSPTS 52 /* max number of polyline points */ +#define FULLANGLE degrad(5)/* consider full if within this angle */ + Display *dsp = XtDisplay(e_da_w); + double sslat, sslong; /* subsolar lat/long, rads, +N +E */ + double ssl, csl; /* sin/cos of sslat */ + int dx, dy; /* slope from center to subsolar point */ + double ca; /* angular sep from viewpoint to subsolar */ + double B; /* cw angle up from center to subsolar point */ + int maxpts = MAXNSPTS; + XPoint xp[MAXNSPTS]; + int npts; + int i; + + /* find where the sun is */ + e_subobject (np, db_basic(SUN), &sslat, &sslong); + + /* set up color */ + XSetForeground (dsp, e_gc, ecolors[SUNC].p); + + /* find direction and length of line from center to subsolar point */ + solve_sphere (sslong - elng, PI/2-sslat, selat, celat, &ca, &B); + + /* check for special cases of eclipsed and directly over subsolar pt */ + if (acos(ca) < FULLANGLE) { + short x, y; + int vis = e_coord (d, wb, hb, sslat, sslong, &x, &y); + if (vis) + XPSFillArc (dsp, e_pm, e_gc, wb, hb, d, d, 0, 360*64); + return; + } + + /* find direction of line parallel to line from center to subsolar + * location and long enough to be well outside perimeter. + */ + dx = (int)floor(1.5*d*sin(B) + 0.5); /* +x to right */ + dy = (int)floor(1.5*d*cos(B) + 0.5); /* +y up */ + + /* follow the circle of points which lie PI/2 from the subsolar point. + * those which are visible are used directly; those which are not are + * projected to limb on a line parallel to the center/subsolar point. + */ + ssl = sin(sslat); + csl = cos(sslat); + for (npts = i = 0; i < maxpts; i++) { + double T = degrad(i*360.0/maxpts); /* pole to p as seen frm subso*/ + double plat, plong; /* lat/long of point on said circle */ + short px, py; + + solve_sphere (T, PI/2, ssl, csl, &ca, &B); + plat = PI/2 - acos(ca); + plong = sslong - B; + if (!e_coord (d, wb, hb, plat, plong, &px, &py)) { + int tx, ty, lx, ly; /* tmp and limb point */ + + if (lc (wb, hb, d, (int)px, (int)py, px+dx, py-dy, + &tx, &ty, &lx, &ly) == 0) { + px = lx; + py = ly; + } + } + xp[npts].x = px; + xp[npts].y = py; + npts++; + } + + XPSFillPolygon (dsp, e_pm, e_gc, xp, npts, Complex, CoordModeOrigin); +} + +/* draw each continent border */ +static void +e_drawcontinents (d, wb, hb) +unsigned d, wb, hb; +{ +#define MINSEP 1000 /* min sep to draw in low prec, 100ths deg */ +#define PTCACHE 64 /* number of XPoints to cache */ + Display *dsp = XtDisplay(e_da_w); + Now *np = mm_get_now(); + XPoint xp[PTCACHE]; + MRegion *rp; + int w = d + 2*wb; + + /* use the overlay GC, wide lines and the BORDERC color */ + XSetLineAttributes (dsp, e_olgc, WIDE_LW, LINE_ST, CAP_ST, JOIN_ST); + XSetForeground (dsp, e_olgc, ecolors[BORDERC].p); + + for (rp = ereg; rp < ereg + nereg; rp++) { + short lastlt = rp->mcp[0].lt, lastlg = rp->mcp[0].lg; + int n = rp->nmcp; + int nxp = 0; + int i; + + /* draw the region -- including closure at the end */ + for (i = 0; i <= n; i++) { + MCoord *cp = rp->mcp + (i%n); + double l, L; + short x, y; + int vis; + + /* don't draw things that are real close if in low prec mode */ + lastlt = cp->lt; + lastlg = cp->lg; + l = degrad(cp->lt/100.0); + L = degrad(cp->lg)/100.0; + + vis = e_coord (d, wb, hb, l, L, &x, &y) && + (projection == CYLG || projection == SPHG + || !e_issunlit (np, l, L)); + nxp = add_to_polyline (xp, XtNumber(xp), i, vis, nxp, n, w,x,y); + } + } +} + +/* draw each site */ +static void +e_drawsites (d, wb, hb) +unsigned d, wb, hb; +{ +#define NPCACHE 64 /* number of XPoints to cache */ + Display *dsp = XtDisplay(e_da_w); + XPoint xps[NPCACHE]; + Site *sipa; + int nsa; + int nxp; + + /* use the overlay GC and the SITEC color */ + XSetForeground (dsp, e_olgc, ecolors[SITEC].p); + + nxp = 0; + for (nsa = sites_get_list(&sipa); --nsa >= 0; ) { + Site *sip = &sipa[nsa]; + short x, y; + int vis; + + vis = e_coord (d, wb, hb, sip->si_lat, sip->si_lng, &x, &y); + if (vis) { + /* show each site as a little square */ + xps[nxp].x = x; xps[nxp].y = y; nxp++; + xps[nxp].x = x+1; xps[nxp].y = y; nxp++; + xps[nxp].x = x; xps[nxp].y = y+1; nxp++; + xps[nxp].x = x+1; xps[nxp].y = y+1; nxp++; + } + if (nxp > XtNumber(xps)-4 || nsa == 0) { + if (nxp > 0) + XPSDrawPoints (dsp, e_pm, e_olgc, xps, nxp,CoordModeOrigin); + nxp = 0; + } + } +} + +/* draw all but the first object in the trails list onto e_pm relative to + * elat/elng connected lines, with tickmarks and possible time stamps. + */ +static void +e_drawtrail (eop, d, wb, hb) +EObj *eop; /* info about object */ +int d; /* Earth circle diameter, pixels */ +int wb, hb; /* width and height borders, pixels */ +{ + int w = d + 2*wb; + short lx = 0, ly = 0, lv; + int i; + + XSetLineAttributes (XtD, e_olgc, NARROW_LW, LINE_ST, CAP_ST, JOIN_ST); + XSetForeground (XtD, e_olgc, eop->pix); + XSetForeground (XtD, e_gc, eop->pix); + + lv = 0; + for (i = 1; i < eop->ntrail; i++) { + Trail *tp = &eop->trail[i]; + Obj *top = &tp->t_obj; + short x, y; + int v; + + v = e_coord (d, wb, hb, tp->t_sublat, tp->t_sublng, &x, &y); + tp->lvis= v; + tp->lx = x; + tp->ly = y; + + if (v && lv) { + TrTS ts, lts, *ltsp; + int e = (is_type(top,EARTHSATM) && top->s_eclipsed); + + /* establish a TrTS for tr_draw() */ + ts.t = tp->t_now.n_mjd; + ts.lbl = tp->t_lbl; + + /* and go back to pick up the first if this is the second tick*/ + if (i == 2) { + lts.t = eop->trail[1].t_now.n_mjd; + lts.lbl = eop->trail[1].t_lbl; + ltsp = <s; + } else + ltsp = NULL; + + switch (projection) { + case CYLI: /* FALLTHRU */ + case CYLG: + if (abs(x-lx) > w/2) { + /* break in two when wraps */ + if (x > lx) { + /* wrapped over the left edge */ + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx, ly, x-w, y); + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx+w, ly, x, y); + } else { + /* wrapped over the right edge */ + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx, ly, x+w, y); + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx-w, ly, x, y); + } + } else + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx, ly, x, y); + break; + + case SPHI: /* FALLTHRU */ + case SPHG: + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx, ly, x, y); + break; + + case WXMAP: + if (abs(x-lx) < w/10) + tr_draw (XtD, e_pm, e_olgc, e, TICKLN, &ts, ltsp, + &eop->trstate, lx, ly, x, y); + break; + } + } + + lv = v; + lx = x; + ly = y; + } +} + +/* draw the first object in the trails list onto e_pm relative to elat/elng + * with a full bullseye. + * return 1 if any part was visible, else 0. + */ +static int +e_drawobject (np, eop, d, wb, hb) +Now *np; /* circumstances */ +EObj *eop; /* which object */ +int d; /* Earth circle diameter, pixels */ +int wb, hb; /* width and height borders, pixels */ +{ + Trail *tp = eop->trail; + int isvis; + + XSetForeground (XtD, e_olgc, eop->pix); + XSetForeground (XtD, e_gc, eop->pix); + + /* draw the current location (first object on trails) */ + if (TBISON(eop->wantfoot_w)) + isvis = e_drawfootprint (np, eop, d, wb, hb, tp->t_sublat, tp->t_sublng, + tp->t_obj.o_type == EARTHSAT ? tp->t_obj.s_elev : 1e9); + else + isvis = e_drawcross (d, wb, hb, tp->t_sublat, tp->t_sublng, CROSSH); + + /* store location -- TODO: already computed this by now */ + tp->lvis = e_coord (d, wb, hb, tp->t_sublat, tp->t_sublng, &tp->lx, + &tp->ly); + + return (isvis); +} + +/* draw one orbit of the given Earth satellite object. + * orbit begins over current ground location then proceeds in a sidereal + * reference frame, ie, ignores rotation of the earth. + * draw name if want. + */ +static void +e_draworbit (eop, d, wb, hb) +EObj *eop; /* which object */ +int d; /* Earth circle diameter, pixels */ +int wb, hb; /* width and height borders, pixels */ +{ + Now now, *np; /* advance time through one rev */ + Obj obj, *op; /* advance object through one rev */ + double t0; /* start time */ + XPoint xpts[NORBSTEPS+1];/* orbit steps */ + XPoint xpt0; /* first point, reuse for closure */ + int wasvis; /* whether visible last step */ + int w = d + 2*wb; /* screen width */ + int re = d/2; /* earth radiu, pixels */ + int drewname = 0; /* whether name has been drawn */ + int sproj = (projection == SPHI || projection == SPHG); + int i; + int nxpts; + + /* make local copies of time and object */ + np = mm_get_now(); + now = *np; + np = &now; + obj = *eop->op; + op = &obj; + t0 = mjd; + + /* set color */ + XSetForeground (XtD, e_gc, eop->pix); + + /* step along for one rev */ + nxpts = 0; + wasvis = 0; + xpt0.x = xpt0.y = 0; /* lint */ + for (i = 0; i < NORBSTEPS; i++) { + double dt, lg; /* time step and sidereal longitude */ + int xs, ys; /* coords of orbit from upper left */ + int isvis; + + /* compute circumstances at next time step */ + dt = i/op->es_n/NORBSTEPS; + mjd = t0 + dt; + obj_cir (np, op); + lg = op->s_sublng; + + /* project onto screen, note visibility */ + if (sproj) { + double sR, cR; /* R= radius from viewpoint to p */ + double A, sA,cA; /* A= az of p as seen from viewpoint */ + int ro; /* orbit radius, pixels */ + int xo, yo; /* coords of orbit from center */ + + /* remove rotation effect */ + lg += hrrad(24/SIDRATE*dt); + + solve_sphere (lg - elng,PI/2 - op->s_sublat,selat,celat,&cR,&A); + sR = sqrt(1.0 - cR*cR); + sA = sin(A); + cA = cos(A); + ro = re + re*op->s_elev/ERAD; + xs = wb + re + (xo = (int)floor(ro*sR*sA + 0.5)); + ys = hb + re - (yo = (int)floor(ro*sR*cA + 0.5)); + isvis = xo*xo + yo*yo > re*re || cR > 0; + } else { + short sx, sy; + isvis = e_coord (d, wb, hb, op->s_sublat, lg, &sx, &sy); + xs = sx; + ys = sy; + } + + if (i == 0) { + /* first time = position now */ + wasvis = isvis; + xpt0.x = xs; + xpt0.y = ys; + + /* mark if vis */ + eop->ovis = isvis; + if (isvis) { + XPSFillArc (XtD, e_pm, e_gc, xs-SATSZ/2, ys-SATSZ/2, + SATSZ+1, SATSZ+1, 0, 360*64); + eop->ox = xs; + eop->oy = ys; + } + } + + /* draw name first time orbit is visible */ + if (isvis && !drewname && TBISON(eop->wantlbl_w)) { + e_draworbname (eop, xs, ys); + drewname = 1; + } + + /* process depending on what happens at limb/edge */ + if (isvis && wasvis) { + /* still visible - add to list -- beware of wrap in cyl mode */ + if (!sproj && nxpts > 0 && abs(xpts[nxpts-1].x-xs) > w/2) { + /* cyl wrap */ + if (xs > w/2) { + xpts[nxpts].x = 0; + xpts[nxpts].y = xpts[nxpts-1].y; + nxpts++; + XPSDrawLines (XtD,e_pm,e_gc,xpts,nxpts,CoordModeOrigin); + xpts[0].x = w; + xpts[0].y = ys; + xpts[1].x = xs; + xpts[1].y = ys; + nxpts = 2; + } else { + xpts[nxpts].x = w; + xpts[nxpts].y = xpts[nxpts-1].y; + nxpts++; + XPSDrawLines (XtD,e_pm,e_gc,xpts,nxpts,CoordModeOrigin); + xpts[0].x = 0; + xpts[0].y = ys; + xpts[1].x = xs; + xpts[1].y = ys; + nxpts = 2; + } + } else { + xpts[nxpts].x = xs; + xpts[nxpts].y = ys; + nxpts++; + } + } else if (!isvis && !wasvis) { + /* still hidden - just need one history */ + xpts[0].x = xs; + xpts[0].y = ys; + nxpts = 1; + } else if (isvis && !wasvis) { + /* just became visible around limb - use one history */ + int sx1, sy1, sx2, sy2; + /* expand circle slightly to avoid 1-pixel grazings */ + lc (wb-1, hb-1, d+2, xs, ys, xpts[0].x, xpts[0].y, + &sx1, &sy1, &sx2, &sy2); + xpts[0].x = sx1; + xpts[0].y = sy1; + xpts[1].x = xs; + xpts[1].y = ys; + nxpts = 2; + } else if (!isvis && wasvis) { + /* just went behind limb - draw and start one history */ + int sx1, sy1, sx2, sy2; + /* expand circle slightly to avoid 1-pixel grazings */ + lc (wb-1, hb-1, d+2, xpts[nxpts-1].x, xpts[nxpts-1].y, xs, ys, + &sx1, &sy1, &sx2, &sy2); + xpts[nxpts].x = sx1; + xpts[nxpts].y = sy1; + nxpts++; + XPSDrawLines (XtD, e_pm, e_gc, xpts, nxpts, CoordModeOrigin); + xpts[0].x = xs; + xpts[0].y = ys; + nxpts = 1; + } + + wasvis = isvis; + } + + /* finish remaining segment */ + if (wasvis && nxpts > 0) { + if (sproj) + xpts[nxpts++] = xpt0; /* close */ + XPSDrawLines (XtD, e_pm, e_gc, xpts, nxpts, CoordModeOrigin); + } +} + +/* draw obj's name */ +static void +e_drawname (eop, d, wb, hb) +EObj *eop; /* which object */ +int d; /* Earth circle diameter, pixels */ +int wb, hb; /* width and height borders, pixels */ +{ + Trail *tp = &eop->trail[0]; + char *name = tp->t_obj.o_name; + int nl = strlen (name); + XCharStruct all; + int dir, asc, des; + short x, y; + + XTextExtents (e_f, name, nl, &dir, &asc, &des, &all); + XSetForeground (XtD, e_strgc, eop->pix); + e_coord (d, wb, hb, tp->t_sublat, tp->t_sublng, &x, &y); + XPSDrawString (XtD, e_pm, e_strgc, x-all.width/2, y-10-des, name, nl); +} + +/* draw orbit's name */ +static void +e_draworbname (EObj *eop, int x, int y) +{ + Trail *tp = &eop->trail[0]; + char *name = tp->t_obj.o_name; + int nl = strlen (name); + XCharStruct all; + int dir, asc, des; + + XTextExtents (e_f, name, nl, &dir, &asc, &des, &all); + XSetForeground (XtD, e_strgc, eop->pix); + XPSDrawString (XtD, e_pm, e_strgc, x-all.width/2, y-10-des, name, nl); +} + +/* this function just captures the code we were inventing over and over to draw + * polylines. + */ +static int +add_to_polyline (xp, xpsize, i, vis, nxp, max, w, x, y) +XPoint xp[]; /* working array */ +int xpsize; /* entries in xp[] */ +int i; /* item we are on: 0..max */ +int vis; /* is this point visible */ +int nxp; /* number of items in xp[] in use -- next goes in xp[npx] */ +int max; /* largest item number we will draw */ +int w; /* window width -- used to check top wraps */ +int x, y; /* the point to add to polyline */ +{ + int lx = 0, ly = 0; + int xwrap = 0; + + if (vis) { + xp[nxp].x = x; + xp[nxp].y = y; + nxp++; + } + + if (nxp > 1) { + int dx; + + lx = xp[nxp-2].x; + dx = lx - xp[nxp-1].x; + + switch (projection) { + case CYLI: /* FALLTHRU */ + case CYLG: + if (dx >= w/2) { + /* wrapped around right edge */ + xp[nxp-1].x += w; + ly = xp[nxp-2].y; + xwrap = 1; + } else if (-dx >= w/2) { + /* wrapped around left edge */ + xp[nxp-1].x -= w; + ly = xp[nxp-2].y; + xwrap = -1; + } else + xwrap = 0; + break; + + case SPHI: /* FALLTHRU */ + case SPHG: + /* never wraps due to not being visible over edge */ + xwrap = 0; + break; + + case WXMAP: + xwrap = abs(dx) > w/10; + if (xwrap) + nxp--; + break; + } + + } else + xwrap = 0; + + /* draw the line if it just turned invisible, done or wrapped */ + if (!vis || i == max || nxp == xpsize || xwrap != 0) { + if (nxp > 1) + XPSDrawLines (XtD, e_pm, e_olgc, xp, nxp, CoordModeOrigin); + if (nxp == xpsize) { + xp[0] = xp[nxp-1]; + nxp = 1; + } else + nxp = 0; + + switch (projection) { + case CYLI: /* FALLTHRU */ + case CYLG: + /* if we wrapped then pick up fragment on opposite end */ + if (xwrap > 0) { + /* pick up fragment on left end */ + xp[nxp].x = lx-w; xp[nxp].y = ly; nxp++; + xp[nxp].x = x; xp[nxp].y = y; nxp++; + } else if (xwrap < 0) { + /* pick up fragment on right end */ + xp[nxp].x = lx+w; xp[nxp].y = ly; nxp++; + xp[nxp].x = x; xp[nxp].y = y; nxp++; + } + break; + + case SPHI: /* FALLTHRU */ + case SPHG: + break; + + case WXMAP: + /* put new at front of line */ + xp[nxp].x = x; xp[nxp].y = y; nxp++; + break; + } + + /* leave at front of line but draw if this is all */ + if (i == max && nxp > 0) + XPSDrawLines (XtD, e_pm, e_olgc, xp, nxp, CoordModeOrigin); + } + + return (nxp); +} + +/* mark the mainmenu location */ +static void +e_mainmenuloc (np, d, wb, hb) +Now *np; +unsigned d, wb, hb; +{ + XSetForeground (XtD, e_olgc, ecolors[HEREC].p); + e_drawcross (d, wb, hb, lat, lng, PLUSS); +} + +/* mark the location of a solar ecipse, if any. + * + * N.B. this code is geometrically correct for all objects, but in practice + * only the sun and moon are computed accurately enough by xephem to make this + * worth while for now. in particular, I have tried tests against several S&T + * tables of minor planet occultations and while the asteroids are computed + * well enough for visual identification remember that at even 1 AU the earth + * only subtends 18 arc seconds and the asteroids are not computed *that* + * accurately (especially since we do not yet include perturbations). + * + * I will try to describe the algorithm: the exective summary is that we + * are striving for the spherical arc subtended by the intersection of a line + * from one object and the earth's center and the line from the other object + * to the earth's center. + * + * N.B. I tried just computing the intersection of a line connecting the two + * objects and a unit sphere but it suffered from terrible numerical instabilty. + * + * start in a plane defined by the center of the earth, the north pole and + * object obj0. label the center of the earth as O, the location of object 0 + * as P0, and place object 1 someplace off the line O-P0 and label it P1. + * what you have actually placed is the location of P1 as it projected onto + * this place; ie, we are only working with dec here. define decA as the + * angle P1-O-P0; it is so named because it is the amount of declication + * subtended from P0 to P1. Project the line P0-P1 back to a line + * perpendicular to the line O-P0 at O. decD is the distance from O to the + * point where P0-P1 intersects the line. if it is less than the earth radius + * we have an occultation! now do all this again only this time place + * yourself in a plane defined by the real locations of O, P0 and P1. and + * repeat everything except this time use the real angled subtended in the + * sky between P0 and P1 (not just the dec difference). this angle we define + * as skyA (and its projection back onto a plane perpendicular to P0-P1 + * through O we call skyD). what we want next is the spherical angle + * subtended between the point at which O-P0 intersects the earth's surface + * (which is just the geocentric coords of P0) and the point where a line + * from the tip of skyD to P1 intersects the earth's surface. we call this + * skyT (I used tau in my original sketch) and I will let you work out the + * trig (it's just planar trig since you are working in the O-P0-P1 plane). + * this gives us the spherical angle between the two lines and the earth + * surface; now all we need is the angle.image yourself at P0 now looking + * right at O. we see decD as a vertical line and SkyD as a line going off + * from O at an angle somewhere. the angle between these lines we define as + * theta. knowing decD and skyD and knowing that there is a right angle at + * the tip of decD between O and the tip of skyD we can compute the angle + * between them. theta. now just use a little spherical trig to find where + * our arc ends up, compute the new RA, compute longitude by subtracting + * gst, set latitude to dec, project and draw! + */ +static void +e_soleclipse (np, d, wb, hb) +Now *np; +unsigned d, wb, hb; +{ + Obj *op0 = db_basic (SUN); /* op0 must be the further one */ + Obj *op1 = db_basic (MOON); + Obj obj0, obj1; /* use copies */ + double r0, r1; /* dist to objects, in earth radii */ + double theta; /* angle between projections */ + double decD, decA; /* dec-only proj dist and angle */ + double skyD, skyA, skyP, skyT; /* full sky projection */ + Now now; /* local copy to compute EOD info */ + double lst, gst; /* local and UTC time */ + double lt, lg; /* lat/long */ + double sD, dRA; + + now = *np; + obj0 = *op0; + obj1 = *op1; + + now.n_epoch = EOD; + (void) obj_cir (&now, &obj0); + if (is_ssobj(&obj0)) + r0 = obj0.s_edist*(MAU/ERAD); /* au to earth radii */ + else + r0 = 1e7; /* way past pluto */ + + (void) obj_cir (&now, &obj1); + if (is_ssobj(&obj1)) + r1 = obj1.s_edist*(MAU/ERAD); /* au to earth radii */ + else + r1 = 1e7; /* way past pluto */ + + decA = obj1.s_gaedec - obj0.s_gaedec; + decD = r0*r1*sin(decA)/(r0 - r1); /* similar triangles */ + if (fabs(decD) >= 1.0) + return; + + skyA = acos (sin(obj0.s_gaedec)*sin(obj1.s_gaedec) + + cos(obj0.s_gaedec)*cos(obj1.s_gaedec) * + cos(obj0.s_gaera-obj1.s_gaera)); + skyD = r0*r1*sin(skyA)/(r0 - r1); /* similar triangles */ + if (fabs(skyD) >= 1.0) + return; + + /* skyP is angle subtended by skyD as seen from obj0 (I called it psi). + * skyT is angle subtended by line from earth center to obj0 to a + * point where the line from obj0 to the tip of skyD intersects the + * earth surface (I called it tau). + */ + skyP = atan(skyD/r0); + skyT = asin(skyD*r0/sqrt(r0*r0+skyD*skyD)) - skyP; + + theta = acos(decD/skyD); + solve_sphere (theta, skyT, sin(obj0.s_gaedec), cos(obj0.s_gaedec), + &sD, &dRA); + + lt = asin(sD); + + if (obj1.s_gaera > obj0.s_gaera) + dRA = -dRA; /* eastward */ + + lst = obj0.s_gaera - dRA; + utc_gst (mjd_day(mjd), mjd_hr(mjd), &gst); + lg = lst - hrrad(gst); + while (lg < -PI) lg += 2*PI; + while (lg > PI) lg -= 2*PI; + + XSetForeground (XtD, e_olgc, ecolors[ECLIPSEC].p); + e_drawcross (d, wb, hb, lt, lg, CROSSH); +} + +/* given a height above the earth, in meters, and an altitude above the + * horizon, in rads, return the great-circle angular distance from the subpoint + * to the point at which the given height appears at the given altitude, in + * rads. + * N.B. beware of negative heights (deorbited ;-)) + */ +static void +e_viewrad (np, height, alt, radp) +Now *np; /* refraction circumstances */ +double height; /* satellite elevation, m above mean earth */ +double alt; /* viewing altitude, rads above horizon */ +double *radp; /* great-circle distance from subpoint to viewing circle, rads*/ +{ + /* remove effect of refraction from geometry */ + unrefract (pressure, temp, alt, &alt); + + if (height > 0) + *radp = acos(ERAD/(ERAD+height)*cos(alt)) - alt; + else + *radp = 0; +} + +/* make the first entry in the trail list, ie the current position of eop->op, + * correct as of *np. then, if desired, discard any existing trail history. + * return 0 if ok else -1 if no memory. + */ +static void +e_resettrail(eop, np, discard) +EObj *eop; +Now *np; +int discard; +{ + Obj *op = eop->op; + Trail *tp = eop->trail; + + db_update (op); + if (discard) { + if (eop->trail) { + free ((char *)eop->trail); + eop->trail = NULL; + } + eop->ntrail = 0; + tp = e_growtrail(eop); + } + + /* first entry is for the current time, regardless of whether there + * are additional entries. + */ + tp = &eop->trail[0]; + + tp->t_lbl = 0; + tp->t_now = *np; + tp->t_obj = *op; + e_subobject (&tp->t_now, &tp->t_obj, &tp->t_sublat, &tp->t_sublng); +} + +/* called from the trails facilty to build up a trail. + * do it and refresh the view. + * client is index into eobjs[]. + * return 0 if ok, else -1. + */ +/* ARGSUSED */ +static int +e_mktrail (ts, statep, client) +TrTS ts[]; +TrState *statep; +XtPointer client; +{ + EObj *eop = &eobjs[(long int)client]; + Obj *op = eop->op; + Now *np = mm_get_now(); + int wastrail = eop->ntrail > 1; + int i; + + watch_cursor (1); + + /* erase all but the first entry (ie, leave current alone) */ + db_update (op); + e_resettrail(eop, np, 1); + + for (i = 0; i < statep->nticks; i++, ts++) { + Trail *tp; + Now now; + + /* check date range */ + now = *np; + now.n_mjd = ts->t; + if (dateOK (&now, op) < 0) + continue; + + /* ok, add to trail */ + tp = e_growtrail(eop); + if (!tp) + return (-1); + tp->t_lbl = ts->lbl; + tp->t_now = now; + tp->t_obj = *op; + (void) obj_cir (&tp->t_now, &tp->t_obj); + e_subobject (&tp->t_now, &tp->t_obj, &tp->t_sublat, &tp->t_sublng); + } + + /* save trail setup as next default */ + eop->trstate = *statep; + + /* update trail state resource */ + tr_setres (etrres, statep); + + /* draw the trail display if desired but beware getting called while + * not up. + */ + if (TBISON(eop->showtr_w) && TBISON(eop->show_w) && isUp(eshell_w)) { + if (wastrail) + e_all(0); /* erase old and draw new */ + else if (TBISON(eop->show_w)) { + /* just draw new */ + int w, h, d, wb, hb; + + e_getcircle (&w, &h, &d, &wb, &hb); + e_drawtrail (eop, d, wb, hb); + e_copy_pm(); + } + } + + watch_cursor (0); + + return (0); +} + +/* grow the trails list by one and return the address of the new entry. + */ +static Trail * +e_growtrail (eop) +EObj *eop; +{ + eop->trail = (Trail *) XtRealloc ((char *)eop->trail, + (eop->ntrail+1)*sizeof(Trail)); + return (&eop->trail[eop->ntrail++]); +} +/* fetch the weather map, and fill wxgifpix and wxxcols[] + * return 0 if ok, else -1 + */ +static int +e_getwxgif() +{ + Display *dsp = XtDisplay(e_da_w); + unsigned char rawgif[200000]; + int nrawgif; + char buf[1024]; + int w, h; + int fd; + + /* open test case, else real network */ + fd = openh ("/tmp/latest_cmoll.gif", O_RDONLY); + if (fd >= 0) { + nrawgif = read (fd, rawgif, sizeof(rawgif)); + close (fd); + } else { + int isgif; + int length; + int nr; + + /* announce net activity and give user a way to stop */ + stopd_up(); + + /* make connection to server for the file */ + xe_msg (0, "Getting\nhttp://%s%s", wxhost, wxfile); + (void) sprintf (buf, "GET http://%s%s HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n", + wxhost, wxfile, PATCHLEVEL); + fd = httpGET (wxhost, buf, buf); + if (fd < 0) { + xe_msg (1, "http get:\n%s", buf); + stopd_down(); + return (-1); + } + + /* read header, looking for some header info */ + isgif = 0; + length = 0; + while (recvline (fd, buf, sizeof(buf)) > 1) { + xe_msg (0, "Rcv: %s", buf); + if (strstr (buf, "image/gif")) + isgif = 1; + if (strstr (buf, "Content-Length")) + length = atoi (buf+15); + } + if (!isgif) { + while (recvline (fd, buf, sizeof(buf)) > 1) + xe_msg (0, "Rcv: %s", buf); + close (fd); + stopd_down(); + return (-1); + } + if (length == 0) + length = 100000; /* ?? */ + + /* read gif into rawgif[] */ + pm_up(); + for (nrawgif = 0; nrawgif < sizeof(rawgif); nrawgif += nr) { + pm_set (100*nrawgif/length); + nr = readbytes (fd, rawgif+nrawgif, 4096); + if (nr < 0) { + xe_msg (1, "%s:\n%s", wxhost, syserrstr()); + stopd_down(); + pm_down(); + close (fd); + return (-1); + } + if (nr == 0) + break; + } + stopd_down(); + pm_down(); + close (fd); + if (nr > 0) { + xe_msg (1, "File too large"); + return (-1); + } + } + + /* uncompress the gif into X terms */ + if (wxgifpix) { + free (wxgifpix); + wxgifpix = NULL; + freeXColors (dsp, xe_cm, wxxcols, 256); + } + if (gif2X (dsp,xe_cm,rawgif,nrawgif,&w,&h,&wxgifpix,wxxcols,buf)<0) { + xe_msg (1, "Gif: %s", buf); + return (-1); + } + if (w != WXM_W || h != WXM_H) { + xe_msg (1, "Expecting %dx%d but found %dx%d", WXM_W, WXM_H, w,h); + free (wxgifpix); + wxgifpix = NULL; + freeXColors (dsp, xe_cm, wxxcols, 256); + return (-1); + } + + /* ok */ + return (0); +} + +/* create an XImage of size wXh. + * return XImage * if ok else NULL and xe_msg(). + */ +static XImage * +e_create_xim (w, h) +int w, h; +{ + Display *dsp = XtDisplay(e_da_w); + XImage *xip; + int mdepth; + int mbpp; + int nbytes; + char *data; + + /* establish depth and bits per pixel */ + get_something (e_da_w, XmNdepth, (XtArgVal)&mdepth); + if (mdepth < 8) { + xe_msg (1, "Require at least 8 bit pixel depth"); + return (NULL); + } + mbpp = mdepth>=17 ? 32 : (mdepth >= 9 ? 16 : 8); + nbytes = w*h*mbpp/8; + + /* get memory for image pixels. */ + data = malloc (nbytes); + if (!data) { + xe_msg (1,"Can not get %d bytes for image pixels", nbytes); + return (NULL); + } + + /* create the XImage */ + xip = XCreateImage (dsp, DefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ mdepth, + /* format */ ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ w, + /* height */ h, + /* pad */ mbpp, + /* bpl */ 0); + if (!xip) { + xe_msg (1, "Can not create shadow XImage"); + free ((void *)data); + return (NULL); + } + + xip->bitmap_bit_order = LSBFirst; + xip->byte_order = LSBFirst; + + /* ok */ + return (xip); +} + +/* given a time and location, return 1 if location is in sunlight, else 0 */ +static int +e_issunlit (np, l, L) +Now *np; +double l, L; +{ + static double last_mjd; + static double csslat, ssslat; + static double sslong; + double ca; + + if (mjd != last_mjd) { + double sslat; + e_subobject (np, db_basic(SUN), &sslat, &sslong); + csslat = cos (sslat); + ssslat = sin (sslat); + last_mjd = mjd; + } + solve_sphere (L - sslong, PI/2-l, ssslat, csslat, &ca, NULL); + return (ca > 0.); +} + +/* return 1 if the given wxgifpix is gray, else 0 */ +static int +e_wxisgray (p) +int p; +{ + int r = (int)wxxcols[p].red >> 8; + int g = (int)wxxcols[p].green >> 8; + int b = (int)wxxcols[p].blue >> 8; + int mean = (r+g+b)/3; + int gray = abs(r-mean)<20 && abs(g-mean)<20 && abs(b-mean)<20; + + return (gray); +} + +/* see that e_wxpm exists and is filled properly. + * return 0 if ok, else -1 + */ +static int +e_newwxpm() +{ + Display *dsp = XtDisplay(e_da_w); + Window win = RootWindow(dsp, DefaultScreen(dsp)); + unsigned long black = BlackPixel (dsp, DefaultScreen(dsp)); + Now *np = mm_get_now(); + XImage *xip; + int x, y; + + /* required */ + if (!wxgifpix) { + printf ("newwxpm but no wxgifpix!\n"); + abort(); + } + + /* create XImage */ + xip = e_create_xim (WXM_W, WXM_H); + if (!xip) + return (-1); + + /* fill XImage with weather map */ + for (y = 0; y < WXM_H; y++) { + int yrow = y*WXM_W; + for (x = 0; x < WXM_W; x++) { + int gp = (int)wxgifpix[x + yrow]; + unsigned long p; + double l, L; + + p = !e_uncoord (WXMAP,0,0,0,x,y,&l,&L) || !wants[SUNLIGHT] || + e_issunlit (np,l,L) || e_wxisgray (gp) + ? wxxcols[gp].pixel : black; + XPutPixel (xip, x, y, p); + } + } + + /* create pixmap if necessary and fill with weather map */ + if (!e_wxpm) + e_wxpm = XCreatePixmap (dsp, win, WXM_W, WXM_H, xip->depth); + XPutImage (dsp, e_wxpm, e_gc, xip, 0, 0, 0, 0, WXM_W, WXM_H); + + /* ok */ + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); + return (0); +} + +/* see that e_wxpm is ready. + * return 0 if ok, else -1. + */ +static int +e_setupwxpm (reload, rebuild) +int reload; +int rebuild; +{ + static double last_mjd; + Now *np = mm_get_now(); + int newpm; + + watch_cursor(1); + + /* insure we have the weather gif */ + newpm = reload || (e_wxpm == (Pixmap)0); + if ((!wxgifpix || reload) && e_getwxgif() < 0) { + watch_cursor(0); + return (-1); + } + + /* build the pixmap, as necessary */ + if (rebuild || newpm || (wants[SUNLIGHT] && mjd != last_mjd)) { + if (e_newwxpm() < 0) { + watch_cursor(0); + return (-1); + } + last_mjd = mjd; + } + + /* e_wxpm is ready */ + watch_cursor(0); + return (0); +} + +/* convert lat/long to x/y on www.ssec.wisc.edu/data/comp/latest_cmoll.gif */ +static void +mollweide_llxy (l, L, xp, yp) +double l, L; /* lat, long, rads, +N, +E */ +short *xp, *yp; /* gif location */ +{ + double tmp; + + tmp = 1.116*sin(.7071*l); + *yp = (short)((WXM_TY+WXM_BY)/2 - tmp*(WXM_BY-WXM_TY)/2); + range (&L, 2*PI); + if (L > PI) + L -= 2*PI; + tmp = L/PI*sqrt(1. - tmp*tmp); + *xp = (short)((WXM_LX+WXM_RX)/2 + tmp*(WXM_RX-WXM_LX)/2); +} + +/* convert x/y to lat/long on www.ssec.wisc.edu/data/comp/latest_cmoll.gif. + * return 1 if actually on the earth map, else 0. + */ +static int +mollweide_xyll (x, y, lp, Lp) +int x, y; /* gif location */ +double *lp, *Lp; /* lat, long, rads, +N, +E */ +{ + double fx, fy; + + fy = 2.*((WXM_BY + WXM_TY)/2 - y)/(WXM_BY - WXM_TY); + if (fabs(fy) > 1.) + return (0); + *lp = 1.414*asin(fy/1.116); + fx = 2.*(x - (WXM_RX + WXM_LX)/2)/(WXM_RX - WXM_LX); + *Lp = PI*fx/sqrt(1. - fy*fy); + return (fabs(*Lp) <= PI); +} + +/* load the daytime earth image file into deipix and colors in deixcols. + * return 0 if ok, else write xe_msg and return -1. + */ +static int +loaddei() +{ + struct stat s; + char *rawgif; + int nrawgif; + char buf[1024]; + char fn[256]; + int n, fd; + + /* open map file */ + (void) sprintf (fn, "%s/auxil/dearth.gif", getShareDir()); + fd = openh (fn, 0); + if (fd < 0) { + xe_msg (1, "%s: %s", fn, syserrstr()); + return (-1); + } + + /* read in */ + fstat (fd, &s); + n = (int)s.st_size; + rawgif = malloc (n); + if (!rawgif) { + xe_msg (1, "%s: can not get %d to read", fn, n); + close (fd); + return (-1); + } + nrawgif = read (fd, rawgif, n); + if (nrawgif < 0) { + xe_msg (1, "%s: %s", fn, syserrstr()); + free (rawgif); + close (fd); + return (-1); + } + if (nrawgif == 0) { + xe_msg (1, "%s: contains 0 bytes", fn); + free (rawgif); + close (fd); + return (-1); + } + close (fd); + + /* crack open */ + if (gif2X (XtD, xe_cm, (unsigned char *)rawgif, nrawgif, &deiw, &deih, + &deipix, deixcols, buf) < 0) { + xe_msg (1, "%s: %s", fn, buf); + free (rawgif); + return (-1); + } + + /* ok */ + free (rawgif); + return (0); +} + +/* load the nighttime earth image file into neipix and colors in deixcols. + * return 0 if ok, else write xe_msg and return -1. + */ +static int +loadnei() +{ + struct stat s; + char *rawgif; + int nrawgif; + char buf[1024]; + char fn[256]; + int n, fd; + + /* open map file */ + (void) sprintf (fn, "%s/auxil/nearth.gif", getShareDir()); + fd = openh (fn, 0); + if (fd < 0) { + xe_msg (1, "%s: %s", fn, syserrstr()); + return (-1); + } + + /* read in */ + fstat (fd, &s); + n = (int)s.st_size; + rawgif = malloc (n); + if (!rawgif) { + xe_msg (1, "%s: can not get %d to read", fn, n); + close (fd); + return (-1); + } + nrawgif = read (fd, rawgif, n); + if (nrawgif < 0) { + xe_msg (1, "%s: %s", fn, syserrstr()); + free (rawgif); + close (fd); + return (-1); + } + if (nrawgif == 0) { + xe_msg (1, "%s: contains 0 bytes", fn); + free (rawgif); + close (fd); + return (-1); + } + close (fd); + + /* crack open */ + if (gif2X (XtD, xe_cm, (unsigned char *)rawgif, nrawgif, &neiw, &neih, + &neipix, neixcols, buf) < 0) { + xe_msg (1, "%s: %s", fn, buf); + free (rawgif); + return (-1); + } + + /* ok */ + free (rawgif); + return (0); +} + +/* render deipix and neipix into e_pm */ +static void +drawei (ww, wh, d, xb, yb) +unsigned int ww, wh, d, xb, yb; +{ + Now *np = mm_get_now(); + Display *dsp = XtD; + unsigned long p; + XImage *xip; + double lt, lg; + int wx, wy; + + /* required */ + if (!deipix) { + printf ("no deipix!\n"); + abort(); + } + if (!neipix) { + printf ("no neipix!\n"); + abort(); + } + + /* create XImage */ + xip = e_create_xim (ww, wh); + if (!xip) + return; + + /* fill XImage with earth image */ + for (wy = 0; wy < wh; wy++) { + for (wx = 0; wx < ww; wx++) { + if (!e_uncoord (projection, d, xb, yb, wx, wy, <, &lg)) + p = e_bg; + else if (!wants[SUNLIGHT] || e_issunlit (np,lt,lg)) { + int eix = (int)(deiw*(lg+PI)/(2*PI)); + int eiy = deiw*(int)(deih*(PI/2-lt)/PI); + int pi = (int)deipix[eix + eiy]; + p = deixcols[pi].pixel; + } else if (wants[NITELITES]) { + int eix = (int)(neiw*(lg+PI)/(2*PI)); + int eiy = neiw*(int)(neih*(PI/2-lt)/PI); + int pi = (int)neipix[eix + eiy]; + p = neixcols[pi].pixel; + } else + p = e_bg; + XPutPixel (xip, wx, wy, p); + } + } + + /* fill e_pm with image */ + XPutImage (dsp, e_pm, e_gc, xip, 0, 0, 0, 0, ww, wh); + + /* ok */ + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); +} + +/* given lat long find Great cirle distance and bearing from Main site. + * distance will be in m. + */ +static void +e_greatCircle (double lt, double lg, double *dp, double *bp) +{ + Now *np = mm_get_now(); + double ca; + + solve_sphere (lg-lng, PI/2-lt, sin(lat), cos(lat), &ca, bp); + *dp = acos(ca)*ERAD; /* arc to distance */ + +} + +/* given window info and a lat/lng, draw the great circle through it + * and the Main site. + */ +static void +e_plotGreatCircle (unsigned d, unsigned wb, unsigned hb, double lt, double lg) +{ + Now *np = mm_get_now(); + double dist, bear; + double ca, a, B; + + /* draw fresh map */ + e_map (np); + + /* find bearing from Main to here */ + e_greatCircle (lt, lg, &dist, &bear); + + /* find point normal to plane define by center, here and Main loc */ + solve_sphere (bear+PI/2, PI/2, sin(lat), cos(lat), &ca, &B); + a = acos(ca); + + /* draw circle with radius 90 degrees about said point */ + e_drawcircle (ecolors[GREATC].p, d, wb, hb, PI/2-a, lng+B, PI/2); + + e_copy_pm(); +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: earthmenu.c,v $ $Date: 2012/11/23 04:15:23 $ $Revision: 1.116 $ $Name: $"}; diff --git a/GUI/xephem/fallbacks.c b/GUI/xephem/fallbacks.c new file mode 100644 index 0000000..72ee6f0 --- /dev/null +++ b/GUI/xephem/fallbacks.c @@ -0,0 +1,964 @@ +#include + +/* build this programmatically but put it in fallbacks[] */ +char Version_resource[50]; + +String fallbacks[] = { + "XEphem*AAVSO*Designation.value: 0214-03", + "XEphem*AAVSO*EndDate.value: latest", + "XEphem*AAVSO*Name.value: OMI CET", + "XEphem*AAVSO*Plot.CCDB.set: True", + "XEphem*AAVSO*Plot.CCDI.set: True", + "XEphem*AAVSO*Plot.CCDR.set: True", + "XEphem*AAVSO*Plot.CCDV.set: True", + "XEphem*AAVSO*Plot.Discrepant.set: False", /* Aaron asked this default */ + "XEphem*AAVSO*Plot.FainterThan.set: True", + "XEphem*AAVSO*Plot.Visual.set: True", + "XEphem*AAVSO*SmoothDays.value: 15", + "XEphem*AAVSO*StartDate.value: default", + "XEphem*AAVSO.x: 201", + "XEphem*AAVSO.y: 36", + "XEphem*About.x: 100", + "XEphem*About.y: 10", + "XEphem*AboutMap.background: #113", + "XEphem*AboutMap.foreground: #eef", + "XEphem*Annotation*File.value:", + "XEphem*Annotation.height: 250", + "XEphem*Annotation.width: 375", + "XEphem*Annotation.x: 50", + "XEphem*Annotation.y: 575", + "XEphem*BinaryStar.height: 250", + "XEphem*BinaryStar.width: 450", + "XEphem*BinaryStar.x: 200", + "XEphem*BinaryStar.y: 200", + "XEphem*CloseList*Text.value:", + "XEphem*CloseObjs*AutoList.set: False", + "XEphem*CloseObjs*AutoUp.set: False", + "XEphem*CloseObjs*List.doubleClickInterval: 500", + "XEphem*CloseObjs*List.visibleItemCount: 10", + "XEphem*CloseObjs*Mag.value: 20.0", + "XEphem*CloseObjs*OmitFixedPairs.set: True", + "XEphem*CloseObjs*OmitOwnMoons.set: True", + "XEphem*CloseObjs*Sep.value: 2.0", + "XEphem*CloseObjs.height: 400", + "XEphem*CloseObjs.width: 500", + "XEphem*CloseObjs.x: 200", + "XEphem*CloseObjs.y: 200", + "XEphem*Colors*NightMode.set: False", + "XEphem*Colors.x: 462", + "XEphem*Colors.y: 0", + "XEphem*Confirm.No.set: False", + "XEphem*CoordsConv*Equinox.value: 2000.0", + "XEphem*CoordsConv.x: 200", + "XEphem*CoordsConv.y: 200", + "XEphem*DB.height: 400", + "XEphem*DB.width: 285", + "XEphem*DB.x: 46", + "XEphem*DB.y: 11", + "XEphem*DBManage*Load1.set: True", + "XEphem*DBManage*CheckAltNames.set: True", + "XEphem*DataSetup*Air.set: False", + "XEphem*DataSetup*Alt.set: True", + "XEphem*DataSetup*Az.set: True", + "XEphem*DataSetup*Cns.set: False", + "XEphem*DataSetup*Dec.set: True", + "XEphem*DataSetup*EaDst.set: False", + "XEphem*DataSetup*EaLght.set: False", + "XEphem*DataSetup*EcLat.set: False", + "XEphem*DataSetup*EcLong.set: False", + "XEphem*DataSetup*Elong.set: True", + "XEphem*DataSetup*GHA.set: False", + "XEphem*DataSetup*GLat.set: False", + "XEphem*DataSetup*GLong.set: False", + "XEphem*DataSetup*HA.set: False", + "XEphem*DataSetup*HJD.set: False", + "XEphem*DataSetup*HeLat.set: False", + "XEphem*DataSetup*HeLong.set: False", + "XEphem*DataSetup*Horizon.value: 0", + "XEphem*DataSetup*HrsUp.set: False", + "XEphem*DataSetup*JD.set: False", + "XEphem*DataSetup*Limb.set: True", + "XEphem*DataSetup*MillSA.set: False", + "XEphem*DataSetup*PA.set: False", + "XEphem*DataSetup*PMDec.set: False", + "XEphem*DataSetup*PMRA.set: False", + "XEphem*DataSetup*Phase.set: False", + "XEphem*DataSetup*RA.set: True", + "XEphem*DataSetup*RisAz.set: False", + "XEphem*DataSetup*RisTm.set: True", + "XEphem*DataSetup*Sep.set: False", + "XEphem*DataSetup*SepPartner.labelString: Sun", + "XEphem*DataSetup*SetAz.set: False", + "XEphem*DataSetup*SetTm.set: True", + "XEphem*DataSetup*Size.set: False", + "XEphem*DataSetup*SnDst.set: False", + "XEphem*DataSetup*SnLght.set: False", + "XEphem*DataSetup*Spect.set: False", + "XEphem*DataSetup*Text.value:", + "XEphem*DataSetup*TrnAlt.set: True", + "XEphem*DataSetup*TrnAz.set: False", + "XEphem*DataSetup*TrnTm.set: True", + "XEphem*DataSetup*Uran2k.set: False", + "XEphem*DataSetup*Uranom.set: False", + "XEphem*DataSetup*VMag.set: True", + "XEphem*DataSetup*Zenith.set: False", + "XEphem*DataSetup.x: 346", + "XEphem*DataSetup.y: 304", + "XEphem*DataTable.x: 400", + "XEphem*DataTable.y: 25", + "XEphem*DateFormat.D/M/Y.set: False", + "XEphem*DateFormat.M/D/Y.set: True", + "XEphem*DateFormat.Y/M/D.set: False", + "XEphem*DialogShell*translations: #override \\n" + "Ctrlf: XeGo(1) \\n" + "Ctrlb: XeGo(-1) \\n" + "Ctrlu: XeGo(0)", + "XEphem*Earth*EarthMap.foreground: #fff", + "XEphem*Earth*ZoomScale.value: 62", + "XEphem*Earth*cylGraphic.set: False", + "XEphem*Earth*cylImage.set: False", + "XEphem*Earth*grid.set: True", + "XEphem*Earth*inertial.set: False", + "XEphem*Earth*livedrag.set: True", + "XEphem*Earth*lowprec.set: False", + "XEphem*Earth*mainmarker.set: True", + "XEphem*Earth*nightlights.set: True", + "XEphem*Earth*object.set: True", + "XEphem*Earth*sites.set: False", + "XEphem*Earth*sphGraphic.set: False", + "XEphem*Earth*sphImage.set: True", + "XEphem*Earth*sunlight.set: True", + "XEphem*Earth*track.set: False", + "XEphem*Earth*trail.set: True", + "XEphem*Earth*wxmap.set: False", + "XEphem*Earth.height: 535", + "XEphem*Earth.width: 545", + "XEphem*Earth.x: 482", + "XEphem*Earth.y: 87", + "XEphem*EarthObjs.x: 5", + "XEphem*EarthObjs.y: 350", + "XEphem*Equatorial.Topocentric.set: True", + "XEphem*ExtFile*Text.value:", + "XEphem*Favorites.height: 420", + "XEphem*Favorites.width: 250", + "XEphem*Favorites.x: 200", + "XEphem*Favorites.y: 200", + "XEphem*Favorites*File.value:", + "XEphem*Favorites*edb.value:", + "XEphem*FieldStars*DupMag.value: 3", + "XEphem*FieldStars*DupSep.value: 4", + "XEphem*FieldStars*GSC22.set: False", + "XEphem*FieldStars*GSC22Dir.value:", + "XEphem*FieldStars*GSC23Net.set: False", + "XEphem*FieldStars*GSC23URL.value:", + "XEphem*FieldStars*GSCCD.set: False", + "XEphem*FieldStars*GSCCDDirectory.value:", + "XEphem*FieldStars*GSCCache.set: False", + "XEphem*FieldStars*GSCCacheDirectory.value:", + "XEphem*FieldStars*NoDups.set: True", + "XEphem*FieldStars*PPM.set: False", + "XEphem*FieldStars*PPMFilename.value:", + "XEphem*FieldStars*SAOHD.set: True", + "XEphem*FieldStars*Tycho.set: False", + "XEphem*FieldStars*TychoFilename.value:", + "XEphem*FieldStars*UCAC.set: False", + "XEphem*FieldStars*UCACDirectory.value:", + "XEphem*FieldStars*USNO.set: False", + "XEphem*FieldStars*USNODirectory.value:", + "XEphem*FieldStars.x: 200", + "XEphem*FieldStars.y: 100", + "XEphem*Fonts*Pattern.value: *adobe*", + "XEphem*Fonts.height: 600", + "XEphem*Fonts.width: 450", + "XEphem*Fonts.x: 418", + "XEphem*Fonts.y: 4", + "XEphem*Gallery*Report.height: 150", + "XEphem*Gallery.height: 650", + "XEphem*Gallery.width: 750", + "XEphem*Gallery.x: 100", + "XEphem*Gallery.y: 100", + "XEphem*HelpConfig.width: 500", + "XEphem*HelpConfig.x: 210", + "XEphem*HelpConfig.y: 360", + "XEphem*HelpConfig*BrowserChoice0.set: False", + "XEphem*HelpConfig*BrowserChoice1.set: True", + "XEphem*HelpConfig*BrowserChoice2.set: False", + "XEphem*HelpConfig*BrowserChoice3.set: False", + "XEphem*HelpConfig*BrowserChoice4.set: False", + "XEphem*HelpConfig*BrowserChoice5.set: False", + "XEphem*HelpConfig*BrowserChoice6.set: False", + "XEphem*HelpConfig*BrowserName0.value: mozilla", + "XEphem*HelpConfig*BrowserName1.value: firefox", + "XEphem*HelpConfig*BrowserName2.value: opera", + "XEphem*HelpConfig*BrowserName3.value: konqueror", + "XEphem*HelpConfig*BrowserName4.value: safari", + "XEphem*HelpConfig*BrowserName5.value: MS IE", + "XEphem*HelpConfig*BrowserName6.value: chrome", + "XEphem*HelpConfig*BrowserCmd0.value: mozilla -remote 'openURL(%s)'", + "XEphem*HelpConfig*BrowserCmd1.value: firefox '%s'", + "XEphem*HelpConfig*BrowserCmd2.value: opera -remote 'openURL(%s)'", + "XEphem*HelpConfig*BrowserCmd3.value: kfmclient openURL '%s'", + "XEphem*HelpConfig*BrowserCmd4.value: osascript -e 'tell application \"safari\"' -e 'set the URL of the front document to \"%s\"' -e 'end tell'", + "XEphem*HelpConfig*BrowserCmd5.value: C:/Program*/Internet*/IEXPLORE.EXE \"%s\"", + "XEphem*HelpConfig*BrowserCmd6.value: google-chrome '%s'", + "XEphem*Horizon*Displacement.value: 0", + "XEphem*Horizon*MapFilename.value: sample.hzn", + "XEphem*Horizon*SaveFilename.value: myhorizon.hzn", + "XEphem*Horizon*UseDisplacement.set: False", + "XEphem*Horizon.x: 100", + "XEphem*Horizon.y: 50", + "XEphem*ImReg.x: 200", + "XEphem*ImReg.y: 200", + "XEphem*INDI*Connect.set: False", + "XEphem*INDI*traceFile.value: inditrace.txt", + "XEphem*INDI*traceOn.set: False", + "XEphem*INDI.height: 650", + "XEphem*INDI.width: 550", + "XEphem*INDI.x: 450", + "XEphem*INDI.y: 50", + "XEphem*INDIConfig*EDBValue.value: Mount.GOTOedb.edb", + "XEphem*INDIConfig*EnableEDB.set: False", + "XEphem*INDIConfig*EnableRADec.set: False", + "XEphem*INDIConfig*GotoDecOffset.value: 0", + "XEphem*INDIConfig*GotoDecSlope.value: .0174532925", + "XEphem*INDIConfig*GotoDecValue.value: Telescope.SetRADec2K.Dec", + "XEphem*INDIConfig*GotoRAOffset.value: 0", + "XEphem*INDIConfig*GotoRASlope.value: .2617993875", + "XEphem*INDIConfig*GotoRAValue.value: Telescope.SetRADec2K.RA", + "XEphem*INDIConfig*Host.value: localhost", + "XEphem*INDIConfig*JDOffset.value: -2415020", + "XEphem*INDIConfig*JDSlope.value: 1", + "XEphem*INDIConfig*JDValue.value: Mount.Date.JD", + "XEphem*INDIConfig*LatitudeOffset.value: 0", + "XEphem*INDIConfig*LatitudeSlope.value: .0174532925", + "XEphem*INDIConfig*LatitudeValue.value: Mount.GEOGRAPHIC_COORD.LAT", + "XEphem*INDIConfig*LongitudeOffset.value: 0", + "XEphem*INDIConfig*LongitudeSlope.value: .0174532925", + "XEphem*INDIConfig*LongitudeValue.value: Mount.GEOGRAPHIC_COORD.LONG", + "XEphem*INDIConfig*POSIXTMValue.value: Mount.Date.POSIX", + "XEphem*INDIConfig*Port.value: 7624", + "XEphem*INDIConfig*PressureOffset.value: 0", + "XEphem*INDIConfig*PressureSlope.value: 1", + "XEphem*INDIConfig*PressureValue.value: Weather.WX.Pres", + "XEphem*INDIConfig*Recenter.set: False", + "XEphem*INDIConfig*SkyDecOffset.value: 0", + "XEphem*INDIConfig*SkyDecSlope.value: .0174532925", + "XEphem*INDIConfig*SkyDecValue.value: Telescope.Pointing.Dec2K", + "XEphem*INDIConfig*SkyMarker.set: False", + "XEphem*INDIConfig*SkyRAOffset.value: 0", + "XEphem*INDIConfig*SkyRASlope.value: .2617993875", + "XEphem*INDIConfig*SkyRAValue.value: Telescope.Pointing.RA2K", + "XEphem*INDIConfig*TemperatureOffset.value: 0", + "XEphem*INDIConfig*TemperatureSlope.value: 1", + "XEphem*INDIConfig*TemperatureValue.value: Weather.WX.Temp", + "XEphem*INDIConfig.x: 100", + "XEphem*INDIConfig.y: 100", + "XEphem*Jupiter*BrightMoons.set: False", + "XEphem*Jupiter*FlipLR.set: False", + "XEphem*Jupiter*FlipTB.set: False", + "XEphem*Jupiter*LimMag.value: 10", + "XEphem*Jupiter*Scale.value: 36", + "XEphem*Jupiter*SkyBkg.set: False", + "XEphem*Jupiter*Tags.set: True", + "XEphem*Jupiter.height: 350", + "XEphem*Jupiter.width: 350", + "XEphem*Jupiter.x: 356", + "XEphem*Jupiter.y: 395", + "XEphem*JupiterStats*GRSSysIILong.value: 190", + "XEphem*JupiterStats.x: 200", + "XEphem*JupiterStats.y: 50", + "XEphem*JupiterTV*JupiterTop.height: 300", + "XEphem*List*Filename.value:", + "XEphem*List*ConfigFile.value: mylist.lsc", + "XEphem*List*Headings.set: True", + "XEphem*List*LaTex.set: False", + "XEphem*List.x: 200", + "XEphem*List.y: 200", + "XEphem*LogBell.Off.set: True", + "XEphem*Logbook.x: 400", + "XEphem*Logbook.y: 30", + "XEphem*LogList.x: 750", + "XEphem*LogList.y: 30", + "XEphem*LogList.width: 500", + "XEphem*LogList.height: 500", + "XEphem*LogList*filename.value: obslist.txt", + "XEphem*MainForm.XmFrame.bottomOffset: 1", + "XEphem*MainForm.XmFrame.leftOffset: 1", + "XEphem*MainForm.XmFrame.marginHeight: 1", + "XEphem*MainForm.XmFrame.marginWidth: 1", + "XEphem*MainForm.XmFrame.rightOffset: 1", + "XEphem*MainForm.XmFrame.topOffset: 1", + "XEphem*Mars*FlipLR.set: False", + "XEphem*Mars*FlipTB.set: False", + "XEphem*Mars*Grid.set: True", + "XEphem*Mars*HalfSize.set: True", + "XEphem*Mars*Labels.set: False", + "XEphem*Mars*LowPrec.set: False", + "XEphem*Mars*SkyBkg.set: False", + "XEphem*Mars.height: 650", + "XEphem*Mars.width: 580", + "XEphem*Mars.x: 350", + "XEphem*Mars.y: 47", + "XEphem*MarsFeatures*Albedo.set: False", + "XEphem*MarsFeatures*Catena.set: False", + "XEphem*MarsFeatures*Cavus.set: False", + "XEphem*MarsFeatures*Chaos.set: False", + "XEphem*MarsFeatures*Chasma.set: False", + "XEphem*MarsFeatures*Colles.set: False", + "XEphem*MarsFeatures*Crater.set: False", + "XEphem*MarsFeatures*Dorsum.set: False", + "XEphem*MarsFeatures*Fluctus.set: False", + "XEphem*MarsFeatures*Fossa.set: False", + "XEphem*MarsFeatures*Labes.set: False", + "XEphem*MarsFeatures*Labyrinthus.set: False", + "XEphem*MarsFeatures*Landing.set: True", + "XEphem*MarsFeatures*Mensa.set: False", + "XEphem*MarsFeatures*Mons.set: True", + "XEphem*MarsFeatures*Patera.set: False", + "XEphem*MarsFeatures*Planitia.set: False", + "XEphem*MarsFeatures*Planum.set: False", + "XEphem*MarsFeatures*Rupes.set: False", + "XEphem*MarsFeatures*Scopulus.set: False", + "XEphem*MarsFeatures*Sulcus.set: False", + "XEphem*MarsFeatures*Terra.set: False", + "XEphem*MarsFeatures*Tholus.set: False", + "XEphem*MarsFeatures*Undae.set: False", + "XEphem*MarsFeatures*Vallis.set: False", + "XEphem*MarsFeatures*Vastitas.set: False", + "XEphem*MarsFeatures.x: 200", + "XEphem*MarsFeatures.y: 50", + "XEphem*MarsMoonStats.x: 200", + "XEphem*MarsMoonStats.y: 50", + "XEphem*MarsMoons*BrightMoons.set: False", + "XEphem*MarsMoons*FlipLR.set: False", + "XEphem*MarsMoons*FlipTB.set: False", + "XEphem*MarsMoons*LimMag.value: 17", + "XEphem*MarsMoons*MarsMoons.foreground: #fa5", + "XEphem*MarsMoons*Scale.value: 50", + "XEphem*MarsMoons*SkyBkg.set: False", + "XEphem*MarsMoons*Tags.set: True", + "XEphem*MarsMoons.height: 350", + "XEphem*MarsMoons.width: 350", + "XEphem*MarsMoons.x: 200", + "XEphem*MarsMoons.y: 200", + "XEphem*MarsMoonsTV*MarsTop.height: 300", + "XEphem*MarsStats*Seeing.value: 0", + "XEphem*MarsStats.x: 200", + "XEphem*MarsStats.y: 50", + "XEphem*Moon*FlipLR.set: False", + "XEphem*Moon*FlipTB.set: False", + "XEphem*Moon*Grid.set: False", + "XEphem*Moon*Image.set: True", + "XEphem*Moon*Labels.set: True", + "XEphem*Moon*MoonMap.foreground: #fff", + "XEphem*Moon*Scale1X.set: False", + "XEphem*Moon*Scale2X.set: False", + "XEphem*Moon*Scale3X.set: True", + "XEphem*Moon*Scale6X.set: False", + "XEphem*Moon*SkyBkg.set: False", + "XEphem*Moon*Spacecraft.set: True", + "XEphem*Moon*Umbra.set: True", + "XEphem*Moon.height: 470", + "XEphem*Moon.width: 585", + "XEphem*Moon.x: 570", + "XEphem*Moon.y: 10", + "XEphem*MoonEShine*Earthshine.value: 4", + "XEphem*MoonEShine.x: 200", + "XEphem*MoonEShine.y: 50", + "XEphem*MoonLO*Overlay.set: True", + "XEphem*MoonLO.height: 600", + "XEphem*MoonLO.width: 500", + "XEphem*MoonLO.x: 20", + "XEphem*MoonLO.y: 10", + "XEphem*MoonStats.x: 200", + "XEphem*MoonStats.y: 50", + "XEphem*Movie.x: 400", + "XEphem*Movie.y: 100", + "XEphem*Movie.width: 500", + "XEphem*Movie.height: 500", + "XEphem*NaaGlance*OneColor.set: True", + "XEphem*NaaGlance.height: 400", + "XEphem*NaaGlance.width: 450", + "XEphem*NaaGlance.x: 200", + "XEphem*NaaGlance.y: 200", + "XEphem*NetSetup*Auth.set: False", + "XEphem*NetSetup*AuthName.value: ", + "XEphem*NetSetup*AuthPassword.value: ", + "XEphem*NetSetup*Direct.set: True", + "XEphem*NetSetup*Proxy.set: False", + "XEphem*NetSetup*ProxyHost.value: a.b.com", + "XEphem*NetSetup*ProxyPort.value: 8000", + "XEphem*NetSetup*SOCKS.set: False", + "XEphem*NetSetup*SOCKSHost.value: x.y.com", + "XEphem*NetSetup*SOCKSPort.value: 1080", + "XEphem*NetSetup.x: 7", + "XEphem*NetSetup.y: 583", + "XEphem*Objects*All.set: True", + "XEphem*Objects*DeepSky.set: False", + "XEphem*Objects*Binaries.set: False", + "XEphem*Objects*EarthSat.set: False", + "XEphem*Objects*SolSys.set: False", + "XEphem*Objects*Stellar.set: False", + "XEphem*Objects.x: 100", + "XEphem*Objects.y: 200", + "XEphem*Plot*ConfigFile.value: myplot.ptc", + "XEphem*Plot*PlotFile.value:", + "XEphem*Plot.x: 200", + "XEphem*Plot.y: 200", + "XEphem*PlotMap.background: #101010", + "XEphem*PlotMap.foreground: #68a368", + "XEphem*PlotMap.height: 350", + "XEphem*PlotMap.width: 350", + "XEphem*PlotDisplay*FlipX.set: False", + "XEphem*PlotDisplay*FlipY.set: False", + "XEphem*PlotDisplay*Grid.set: True", + "XEphem*PlotDisplay*XYrAsDate.set: False", + "XEphem*PlotDisplay*XJDAsDate.set: False", + "XEphem*Precision.Hi.set: True", + "XEphem*Print*A4.set: False", + "XEphem*Print*Color.set: False", + "XEphem*Print*Filename.value:", + "XEphem*Print*PrintCmd.value: lpr", + "XEphem*Print*Save.set: True", + "XEphem*Print*Thick.set: False", + "XEphem*Print.x: 100", + "XEphem*Print.y: 100", + "XEphem*Progress*DA.foreground: #68a368", + "XEphem*Progress*DA.height: 20", + "XEphem*Progress*DA.width: 150", + "XEphem*Progress.x: 20", + "XEphem*Progress.y: 500", + "XEphem*PromptPreFill.No.set: False", + "XEphem*Saturn*BrightMoons.set: False", + "XEphem*Saturn*FlipLR.set: False", + "XEphem*Saturn*FlipTB.set: False", + "XEphem*Saturn*LimMag.value: 15", + "XEphem*Saturn*Scale.value: 31", + "XEphem*Saturn*SkyBkg.set: False", + "XEphem*Saturn*Tags.set: True", + "XEphem*Saturn.height: 350", + "XEphem*Saturn.width: 350", + "XEphem*Saturn.x: 431", + "XEphem*Saturn.y: 376", + "XEphem*SaturnStats.x: 200", + "XEphem*SaturnStats.y: 50", + "XEphem*SaturnTV*SaturnTop.height: 300", + "XEphem*SaveRes*AutoMinorSel.set: False", + "XEphem*SaveRes*AutoSave.set: False", + "XEphem*SaveRes*AutoSel.set: True", + "XEphem*SaveRes.height: 500", + "XEphem*SaveRes.width: 533", + "XEphem*SaveRes.x: 361", + "XEphem*SaveRes.y: 3", + "XEphem*Sites*SiteSL.visibleItemCount: 12", + "XEphem*Sites.x: 50", + "XEphem*Sites.y: 50", + "XEphem*SkyEyep*ApparentFOV.value: 45", + "XEphem*SkyEyep*Elliptical.set: True", + "XEphem*SkyEyep*EyepH.value: 50", + "XEphem*SkyEyep*EyepA.value: 0", + "XEphem*SkyEyep*EyepW.value: 50", + "XEphem*SkyEyep*EyepieceFL.value: 12mm", + "XEphem*SkyEyep*FPlaneSize.value: 35mm", + "XEphem*SkyEyep*EyePDefFile.value:", + "XEphem*SkyEyep*FocalLength.value: 50mm", + "XEphem*SkyEyep*Lock.set: False", + "XEphem*SkyEyep*MirrorFL.value: 2000mm", + "XEphem*SkyEyep*EyePPosFile.value:", + "XEphem*SkyEyep*Solid.set: False", + "XEphem*SkyEyep*Telrad.set: False", + "XEphem*SkyEyep.x: 200", + "XEphem*SkyEyep.y: 50", + "XEphem*SkyFITS*AutoName.set: True", + "XEphem*SkyFITS*DSS1.set: True", + "XEphem*SkyFITS*DSS2B.set: False", + "XEphem*SkyFITS*DSS2R.set: False", + "XEphem*SkyFITS*Header.columns: 40", + "XEphem*SkyFITS*Header.rows: 8", + "XEphem*SkyFITS*SaveFile.value: myimage.fts", + "XEphem*SkyFITS*STScI.set: True", + "XEphem*SkyFITS*WatchFile.value: watch.txt", + "XEphem*SkyFITS.width: 300", + "XEphem*SkyFITS.height: 700", + "XEphem*SkyFITS.x: 600", + "XEphem*SkyFITS.y: 10", + "XEphem*SkyFilter*Binary.set: True", + "XEphem*SkyFilter*BrightNeb.set: True", + "XEphem*SkyFilter*ClInNeb.set: True", + "XEphem*SkyFilter*DarkNeb.set: True", + "XEphem*SkyFilter*DeepSkyMag.value: 7", + "XEphem*SkyFilter*DiffuseNeb.set: True", + "XEphem*SkyFilter*Double.set: True", + "XEphem*SkyFilter*EarthSat.set: True", + "XEphem*SkyFilter*Elliptical.set: True", + "XEphem*SkyFilter*GalClusters.set: True", + "XEphem*SkyFilter*GlobularCl.set: True", + "XEphem*SkyFilter*Hyperbolic.set: True", + "XEphem*SkyFilter*MagStep.value: 1", + "XEphem*SkyFilter*Multiple.set: True", + "XEphem*SkyFilter*OpenCl.set: True", + "XEphem*SkyFilter*Parabolic.set: True", + "XEphem*SkyFilter*PlanetaryNeb.set: True", + "XEphem*SkyFilter*Planets.set: True", + "XEphem*SkyFilter*Pulsars.set: True", + "XEphem*SkyFilter*Quasars.set: True", + "XEphem*SkyFilter*Radio.set: True", + "XEphem*SkyFilter*SNRemnants.set: True", + "XEphem*SkyFilter*SolSysMag.value: 7", + "XEphem*SkyFilter*SphericalGal.set: True", + "XEphem*SkyFilter*SpiralGal.set: True", + "XEphem*SkyFilter*StarMag.value: 7", + "XEphem*SkyFilter*Stars.set: True", + "XEphem*SkyFilter*Stellar.set: True", + "XEphem*SkyFilter*Supernova.set: True", + "XEphem*SkyFilter*SymbolDA.background: #101010", + "XEphem*SkyFilter*SymbolDA.foreground: #c0c0c0", + "XEphem*SkyFilter*SymbolDA.width: 25", + "XEphem*SkyFilter*Undefined.set: True", + "XEphem*SkyFilter*Variable.set: True", + "XEphem*SkyFilter.x: 68", + "XEphem*SkyFilter.y: 10", + "XEphem*SkyHist.height: 250", + "XEphem*SkyHist.width: 700", + "XEphem*SkyHist.x: 20", + "XEphem*SkyHist.y: 50", + "XEphem*SkyIP*Contrast.Reverse.set: False", + "XEphem*SkyIP*ContrastSection.set: True", + "XEphem*SkyIP*GammaScale.value: 75", + "XEphem*SkyIP*Gaussian*RefMag.value: 0", + "XEphem*SkyIP*GaussianSection.set: False", + "XEphem*SkyIP*Glass*ColPlot.background: #333", + "XEphem*SkyIP*Glass*ColPlot.height: 120", + "XEphem*SkyIP*Glass*Mag*1x.set: False", + "XEphem*SkyIP*Glass*Mag*2x.set: True", + "XEphem*SkyIP*Glass*Mag*4x.set: False", + "XEphem*SkyIP*Glass*Mag*8x.set: False", + "XEphem*SkyIP*Glass*Plot.Column.set: False", + "XEphem*SkyIP*Glass*Plot.Row.set: False", + "XEphem*SkyIP*Glass*RowPlot.background: #333", + "XEphem*SkyIP*Glass*RowPlot.height: 120", + "XEphem*SkyIP*Glass*Size*128x128.set: False", + "XEphem*SkyIP*Glass*Size*16x16.set: False", + "XEphem*SkyIP*Glass*Size*32x32.set: False", + "XEphem*SkyIP*Glass*Size*64x64.set: True", + "XEphem*SkyIP*GlassSection.set: False", + "XEphem*SkyIP*Histogram.background: #333", + "XEphem*SkyIP*Histogram.height: 50", + "XEphem*SkyIP*ROISection.set: False", + "XEphem*SkyIP*Slice.FullScale.set: True", + "XEphem*SkyIP*SlicePlot.background: #333", + "XEphem*SkyIP*SlicePlot.height: 120", + "XEphem*SkyIP*SliceSection.set: False", + "XEphem*SkyIP.x: 50", + "XEphem*SkyIP.y: 10", + "XEphem*SkyList*EdbFilename.value:", + "XEphem*SkyList*List.rows: 10", + "XEphem*SkyList*Text.set: True", + "XEphem*SkyList*TextFilename.value:", + "XEphem*SkyList.x: 200", + "XEphem*SkyList.y: 50", + "XEphem*SkyOps*AltAzMode.set: True", + "XEphem*SkyOps*AutoMag.set: True", + "XEphem*SkyOps*CnsAbbr.set: False", + "XEphem*SkyOps*CnsBoundaries.set: False", + "XEphem*SkyOps*CnsFigures.set: True", + "XEphem*SkyOps*CnsNames.set: False", + "XEphem*SkyOps*Compass.set: True", + "XEphem*SkyOps*CylProj.set: False", + "XEphem*SkyOps*Ecliptic.set: True", + "XEphem*SkyOps*Equator.set: False", + "XEphem*SkyOps*Eyepieces.set: True", + "XEphem*SkyOps*FieldStars.set: True", + "XEphem*SkyOps*FlipLR.set: False", + "XEphem*SkyOps*FlipTB.set: False", + "XEphem*SkyOps*Galactic.set: True", + "XEphem*SkyOps*Grid*AltAz.set: False", + "XEphem*SkyOps*Grid*Auto.set: True", + "XEphem*SkyOps*Grid*Grid.set: False", + "XEphem*SkyOps*Grid*Labels.set: True", + "XEphem*SkyOps*Grid*HGrid.value: 1:00:00", + "XEphem*SkyOps*Grid*VGrid.value: 15:00:00", + "XEphem*SkyOps*HznMap.set: False", + "XEphem*SkyOps*JustDots.set: True", + "XEphem*SkyOps*LblDSMag.set: False", + "XEphem*SkyOps*LblDSName.set: True", + "XEphem*SkyOps*LblFSMag.set: True", + "XEphem*SkyOps*LblFSName.set: False", + "XEphem*SkyOps*LblNDeepSky.value: 19", + "XEphem*SkyOps*LblNFStars.value: 10", + "XEphem*SkyOps*LblNSolSys.value: 20", + "XEphem*SkyOps*LblNStars.value: 48", + "XEphem*SkyOps*LblSSMag.set: False", + "XEphem*SkyOps*LblSSName.set: True", + "XEphem*SkyOps*LblStMag.set: False", + "XEphem*SkyOps*LblStName.set: True", + "XEphem*SkyOps*LiveDrag.set: True", + "XEphem*SkyOps*ClipObjects.set: False", + "XEphem*SkyOps*MagScale.set: True", + "XEphem*SkyOps*LiveReport.set: True", + "XEphem*SkyOps.x: 64", + "XEphem*SkyOps.y: 50", + "XEphem*SkyView*AltDecScale.scaleMultiple: 1", + "XEphem*SkyView*AltDecScale.value: 1080", + "XEphem*SkyView*AzRAScale.scaleMultiple: 1", + "XEphem*SkyView*AzRAScale.value: 2160", + "XEphem*SkyView*FOVScale.scaleMultiple: 1", + "XEphem*SkyView*FOVScale.value: 2160", + "XEphem*SkyView*LToolbar*shadowThickness: 1", + "XEphem*SkyView*LToolbar*spacing: 2", + "XEphem*SkyView*RToolbar*shadowThickness: 1", + "XEphem*SkyView*RToolbar*spacing: 2", + "XEphem*SkyView*TToolbar*shadowThickness: 1", + "XEphem*SkyView*TToolbar*spacing: 2", + "XEphem*SkyView*translations: #override \\n" + "NoneKP_Left: SVScut(0,-.02) \\n" + "ShiftKP_Left: SVScut(0,-.10) \\n" + "NoneKP_Right: SVScut(0, .02) \\n" + "ShiftKP_Right: SVScut(0, .10) \\n" + "NoneKP_Up: SVScut(1, .02) \\n" + "ShiftKP_Up: SVScut(1, .10) \\n" + "NoneKP_Down: SVScut(1,-.02) \\n" + "ShiftKP_Down: SVScut(1,-.10) \\n" + "NoneKP_Add: SVScut(2, .98) \\n" + "ShiftKP_Add: SVScut(2, .90) \\n" + "NoneKP_Subtract: SVScut(2,1.02) \\n" + "ShiftKP_Subtract: SVScut(2,1.10) \\n" + "Ctrlf: XeGo(1) \\n" + "Ctrlb: XeGo(-1) \\n" + "Ctrlu: XeGo(0)", + "XEphem*SkyView.height: 600", + "XEphem*SkyView.width: 600", + "XEphem*SkyView.x: 258", + "XEphem*SkyView.y: 10", + "XEphem*SolarSystem*DBToo.set: False", + "XEphem*SolarSystem*DistScale.value: 50", + "XEphem*SolarSystem*Ecliptic.set: True", + "XEphem*SolarSystem*HLatScale.value: 90", + "XEphem*SolarSystem*HLongScale.value: 0", + "XEphem*SolarSystem*Labels.set: True", + "XEphem*SolarSystem*Legs.set: True", + "XEphem*SolarSystem*LiveDrag.set: True", + "XEphem*SolarSystem*SolSysMap.foreground: #68a368", + "XEphem*SolarSystem*Trails.set: True", + "XEphem*SolarSystem*translations: #override \\n" + "NoneKP_Left: SSScut(0, -2) \\n" + "ShiftKP_Left: SSScut(0,-10) \\n" + "NoneKP_Right: SSScut(0, 2) \\n" + "ShiftKP_Right: SSScut(0, 10) \\n" + "NoneKP_Up: SSScut(1, 2) \\n" + "ShiftKP_Up: SSScut(1, 10) \\n" + "NoneKP_Down: SSScut(1, -2) \\n" + "ShiftKP_Down: SSScut(1,-10) \\n" + "NoneKP_Add: SSScut(2, 2) \\n" + "ShiftKP_Add: SSScut(2, 10) \\n" + "NoneKP_Subtract: SSScut(2, -2) \\n" + "ShiftKP_Subtract: SSScut(2,-10) \\n" + "NoneKP_Multiply: SSScut(3, 1) \\n" + "NoneKP_Divide: SSScut(3, -1) \\n" + "Ctrlf: XeGo(1) \\n" + "Ctrlb: XeGo(-1) \\n" + "Ctrlu: XeGo(0)", + "XEphem*SolarSystem.height: 400", + "XEphem*SolarSystem.width: 400", + "XEphem*SolarSystem.x: 495", + "XEphem*SolarSystem.y: 217", + "XEphem*Solve*FindMax.set: True", + "XEphem*Solve*FindMin.set: False", + "XEphem*Solve*Find0.set: False", + "XEphem*Solve*Binary.set: False", + "XEphem*Solve*Accuracy.value: 0:02:0", + "XEphem*Solve*Function.rows: 5", + "XEphem*Solve*Function.value:", + "XEphem*Solve.x: 100", + "XEphem*Solve.y: 100", + "XEphem*Solve*ConfigFile.value: mysearch.svc", + "XEphem*Splash*title.fontList: *-lucidatypewriter*medium*-12-*-iso8859-1", + "XEphem*StereoSolarSystem*SSStereo.foreground: #68a368", + "XEphem*SysLog*Log.columns: 90", + "XEphem*SysLog*Log.rows: 20", + "XEphem*SysLog.x: 40", + "XEphem*SysLog.y: 40", + "XEphem*Sun*1024x1024.set: False", + "XEphem*Sun*256x256.set: False", + "XEphem*Sun*512x512.set: True", + "XEphem*Sun*BySize.set: False", + "XEphem*Sun*ByType.set: False", + "XEphem*Sun*EIT171.set: False", + "XEphem*Sun*EIT195.set: False", + "XEphem*Sun*EIT284.set: True", + "XEphem*Sun*EIT304.set: False", + "XEphem*Sun*LASC2.set: False", + "XEphem*Sun*LASC3.set: False", + "XEphem*Sun*HMICon.set: False", + "XEphem*Sun*HMIMag.set: False", + "XEphem*Sun.height: 590", + "XEphem*Sun.width: 530", + "XEphem*Sun.x: 20", + "XEphem*Sun.y: 20", + "XEphem*TZone.Local.set: True", + "XEphem*Telescope*Goto.set: True", + "XEphem*Telescope*Marker.set: True", + "XEphem*Telescope*NoHW.set: False", + "XEphem*Telescope*Process.value: lx200xed", + "XEphem*Telescope*Serial.value: /dev/ttyS0", + "XEphem*Telescope.x: 200", + "XEphem*Telescope.y: 50", + "XEphem*Tips.No.set: False", + "XEphem*TopLevelShell*translations: #override \\n" + "Ctrlf: XeGo(1) \\n" + "Ctrlb: XeGo(-1) \\n" + "Ctrlu: XeGo(0)", + "XEphem*Trails*CustomInterval.value: 0:30", + "XEphem*Trails*NTicks.maximum: 250", + "XEphem*Units.English.set: False", + "XEphem*Uranus*BrightMoons.set: False", + "XEphem*Uranus*FlipLR.set: False", + "XEphem*Uranus*FlipTB.set: False", + "XEphem*Uranus*LimMag.value: 17", + "XEphem*Uranus*Scale.value: 34", + "XEphem*Uranus*SkyBkg.set: False", + "XEphem*Uranus*Tags.set: True", + "XEphem*Uranus.height: 350", + "XEphem*Uranus.width: 350", + "XEphem*Uranus.x: 437", + "XEphem*Uranus.y: 396", + "XEphem*UranusStats.x: 200", + "XEphem*UranusStats.y: 50", + "XEphem*UranusTV*UranusTop.height: 300", + "XEphem*WCS*BestAcc.value: 0.5", + "XEphem*WCS*BurnedOut.value: 60000", + "XEphem*WCS*Dec.value: 0 0 0", + "XEphem*WCS*DecField.value: OBJCTDEC", + "XEphem*WCS*RA.value: 0 0 0", + "XEphem*WCS*RAField.value: OBJCTRA", + "XEphem*WCS*Rotation.value: 0.0", + "XEphem*WCS*RotationField.value: CROTA2", + "XEphem*WCS*SNR.value: 10.0", + "XEphem*WCS*StepUp.value: -1.0", + "XEphem*WCS*StepUpField.value: CDELT2", + "XEphem*WCS*StepRight.value: 1.0", + "XEphem*WCS*StepRightField.value: CDELT1", + "XEphem*WCS*WorstAcc.value: 1.0", + "XEphem*WCS.x: 30", + "XEphem*WCS.y: 10", + "XEphem*WebDB*Pattern.value: ", + "XEphem*WebDB*Search.set: False", + "XEphem*WebDB*URL0.value: http://celestrak.com/NORAD/elements/stations.txt", + "XEphem*WebDB*URL1.value: http://celestrak.com/NORAD/elements/science.txt", + "XEphem*WebDB*URL2.value: http://celestrak.com/NORAD/elements/tle-new.txt", + "XEphem*WebDB*URL3.value: http://celestrak.com/NORAD/elements/amateur.txt", + "XEphem*WebDB*URL4.value: http://www.minorplanetcenter.org/iau/Ephemerides/Comets/Soft03Cmt.txt", + "XEphem*WebDB*URL5.value: http://www.minorplanetcenter.org/iau/Ephemerides/CritList/Soft03CritList.txt", + "XEphem*WebDB*URL6.value: http://www.minorplanetcenter.org/iau/Ephemerides/Distant/Soft03Distant.txt", + "XEphem*WebDB*URL7.value: http://www.minorplanetcenter.org/iau/Ephemerides/Unusual/Soft03Unusual.txt", + "XEphem*WebDB.x: 200", + "XEphem*WebDB.y: 200", + "XEphem*WeekStart.Monday.set: False", + "XEphem*WeekStart.Saturday.set: False", + "XEphem*WeekStart.Sunday.set: True", + "XEphem*XmArrowButton.foreground: #fffafa", + "XEphem*XmArrowButton.shadowThickness: 1", + "XEphem*XmArrowButtonGadget.foreground: #fffafa", + "XEphem*XmArrowButtonGadget.shadowThickness: 1", + "XEphem*XmCascadeButton.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmCascadeButton.foreground: #fffafa", + "XEphem*XmCascadeButton.shadowThickness: 1", + "XEphem*XmCascadeButtonGadget.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmCascadeButtonGadget.foreground: #fffafa", + "XEphem*XmCascadeButtonGadget.shadowThickness: 1", + "XEphem*XmFrame.marginHeight: 0", + "XEphem*XmFrame.marginWidth: 0", + "XEphem*XmLabel.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmLabel.foreground: #fffafa", + "XEphem*XmLabelGadget.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmLabelGadget.foreground: #fffafa", + "XEphem*XmList.background: #547768", + "XEphem*XmList.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmList.foreground: #fffafa", + "XEphem*XmList.shadowThickness: 1", + "XEphem*XmPushButton.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmPushButton.foreground: #fffafa", + "XEphem*XmPushButton.shadowThickness: 1", + "XEphem*XmPushButtonGadget.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmPushButtonGadget.foreground: #fffafa", + "XEphem*XmPushButtonGadget.shadowThickness: 1", + "XEphem*XmRowColumn.shadowThickness: 1", + "XEphem*XmScale.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmScale.foreground: #fffafa", + "XEphem*XmScale.shadowThickness: 1", + "XEphem*XmScrollBar.shadowThickness: 1", + "XEphem*XmText.background: #547768", + "XEphem*XmText.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmText.foreground: #fffafa", + "XEphem*XmText.shadowThickness: 1", + "XEphem*XmTextField.background: #547768", + "XEphem*XmTextField.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmTextField.foreground: #fffafa", + "XEphem*XmTextField.shadowThickness: 1", + "XEphem*XmToggleButton.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmToggleButton.foreground: #fffafa", + "XEphem*XmToggleButtonGadget.fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*XmToggleButtonGadget.foreground: #fffafa", + "XEphem*background: #3B4F47", + "XEphem*blinkRate: 0", + "XEphem*fontList: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem*foreground: black", + "XEphem*highlightThickness: 0", + "XEphem*marginHeight: 1", + "XEphem*marginLeft: 1", + "XEphem*marginRight: 1", + "XEphem*marginWidth: 1", + "XEphem*spacing: 1", + "XEphem.AnnoColor: #ffd200", + "XEphem.AnnoFont: *-helvetica-medium-r-*-10-*-iso8859-1", + "XEphem.AutoMag: .2 22 22 22 1, .3 21 21 21 1, .4 19 19 19 1, .5 17 17 17 1, .70 15 15 15 1, 1.11 14 14 14 1, 1.75 13 13 13 1, 2.78 12 12 12 1, 4.40 11 11 11 1, 6.97 10 10 10 1, 11.03 9 10 10 1, 17.39 8 9 9 1, 27.25 7 7 7 1, 42.04 6 6 6 1, 180.00 6 6 6 1", + "XEphem.AutoRT: 0", + "XEphem.CalOtherMonthColor: gray50", + "XEphem.CnsFigFile: classicfigs.csf", + "XEphem.CnsFont: *-times-medium-i-*-14-*-iso8859-1", + "XEphem.DBinitialFiles: Messier.edb SKY2k65.edb", + "XEphem.DataViewUp: 0", + "XEphem.DeltaT: (Auto) 64.12", + "XEphem.DimStarColor: #666", + "XEphem.EarthBackground: #151515", + "XEphem.EarthBorderColor: #21a500", + "XEphem.EarthEclipseColor: #333", + "XEphem.EarthGridColor: #6b6635", + "XEphem.EarthHereColor: #ffff60", + "XEphem.EarthSiteColor: #ff9b00", + "XEphem.EarthSunColor: #d3ce8c", + "XEphem.EarthGreatCircleColor: #cc0000", + "XEphem.EarthTrailState: 1 1 1 3 2 0 20 0 0.0", + "XEphem.EarthViewUp: 0", + "XEphem.Elevation: 0", + "XEphem.Equinox: 2000.0", + "XEphem.FITSpattern: *.f*t*", + "XEphem.GlassBorderColor: yellow", + "XEphem.GraphBGColor: #333", + "XEphem.HorizonColor: #d8d8d8", + "XEphem.INDIAlertColor: #c90000", + "XEphem.INDIBusyColor: #ffff00", + "XEphem.INDIHostname: localhost", + "XEphem.INDIIdleColor: #707070", + "XEphem.INDIOkColor: #00c900", + "XEphem.INDIPort: 7624", + "XEphem.ImGridColor: #bbb", + "XEphem.ImPlotColor1: orange", + "XEphem.ImPlotColor2: yellow", + "XEphem.ImPlotColor3: red", + "XEphem.JD:", + "XEphem.JupViewUp: 0", + "XEphem.JupiterBackground: #151515", + "XEphem.Lat: 0:0:0", + "XEphem.Long: 0:0:0", + "XEphem.MarsAnnotColor: #8f8", + "XEphem.MarsBackground: #151515", + "XEphem.MarsViewUp: 0", + "XEphem.MoonAnnotColor: #ee0000", + "XEphem.MoonBackground: #151515", + "XEphem.MoonViewUp: 0", + "XEphem.NSteps: 1", + "XEphem.NaaGOneColor: #1895ff", + "XEphem.NaaGViewUp: 0", + "XEphem.NightColor: #7aa87a", + "XEphem.Pause: 0", + "XEphem.Pressure: 1010 hPa", + "XEphem.SOHOhost: sohowww.nascom.nasa.gov", + "XEphem.SatViewUp: 0", + "XEphem.SaturnBackground: #151515", + "XEphem.ShareDir: .", + "XEphem.Sitename: Chicago, Illinois", + "XEphem.SkyAnnotColor: #bfc1c6", + "XEphem.SkyCnsBndColor: #435964", + "XEphem.SkyCnsFigColor: #7fc149", + "XEphem.SkyCnsNamColor: #a5ad7a", + "XEphem.SkyColor: #151515", + "XEphem.SkyEqColor: #ff0000", + "XEphem.SkyEyePColor: #aa1010", + "XEphem.SkyGridColor: #0068b9", + "XEphem.SkyGridFont: *-helvetica*bold*-r-*10-*-iso8859-1", + "XEphem.SkyMWColor: #c65400", + "XEphem.SkyViewTrailState: 4 3 2 1 0 0 10 0 0.0", + "XEphem.SkyViewUp: 0", + "XEphem.SolSysBackground: #151515", + "XEphem.SolSysTrailState: 8 4 2 1 3 0 100 0 0.0", + "XEphem.SolSysViewUp: 0", + "XEphem.StepSize: RT Clock", + "XEphem.SunViewUp: 0", + "XEphem.TZName: XXX", + "XEphem.TZone: 0", + "XEphem.Temp: 10.0 °C", + "XEphem.TwilightDip: 18°", + "XEphem.UranusBackground: #151515", + "XEphem.UranusViewUp: 0", + "XEphem.cursorTrackingFont: *-lucidatypewriter*medium*-10-*-iso8859-1", + "XEphem.install: guess", + "XEphem.jupiterColor: #efe3d7", + "XEphem.marsColor: #ffb568", + "XEphem.mercuryColor: #d7b279", + "XEphem.moonColor: #d9d9d9", + "XEphem.moonsFont: *-helvetica-medium-r-*-10-*-iso8859-1", + "XEphem.neptuneColor: #8eaaf7", + "XEphem.otherObjColor: #7f7", + "XEphem.plutoColor: #f7ebd7", + "XEphem.satellitesColor: #faf", + "XEphem.saturnColor: #efcb9e", + "XEphem.solSysColor: #cfc", + "XEphem.starSpectA: #cad7ff", + "XEphem.starSpectB: #aabfff", + "XEphem.starSpectC: #ff9040", + "XEphem.starSpectF: #f8f7ff", + "XEphem.starSpectG: #fff4ea", + "XEphem.starSpectK: #ffd2a1", + "XEphem.starSpectL: #ffb020", + "XEphem.starSpectM: #ffcc6f", + "XEphem.starSpectN: #ff8020", + "XEphem.starSpectO: #9bb0ff", + "XEphem.starSpectS: #ffa070", + "XEphem.starSpectT: #ffa060", + "XEphem.starSpectW: #c4c4ff", + "XEphem.sunColor: #fffacd", + "XEphem.tipBackground: #ffffbb", + "XEphem.tipFont: *-helvetica-medium-r-*-10-*-iso8859-1", + "XEphem.tipForeground: #000000", + "XEphem.trailsFont: *-helvetica-medium-r-*-10-*-iso8859-1", + "XEphem.uranusColor: #b6cbd7", + "XEphem.venusColor: #ffebc7", + "XEphem.viewsFont: *-times-medium-r-*-10-*-iso8859-1", + "XEphem.viewsGreekFont: *-symbol-*-10-*", + "XEphem.x: 50", + "XEphem.y: 50", + "XEphem*Logbook*Airmass.set: False", + "XEphem*Logbook*Altitude.set: False", + "XEphem*Logbook*Azimuth.set: False", + "XEphem*Logbook*Camera.set: False", + "XEphem*Logbook*Constel.set: False", + "XEphem*Logbook*Date.set: False", + "XEphem*Logbook*Dec2000.set: False", + "XEphem*Logbook*Elongation.set: False", + "XEphem*Logbook*Eyepiece.set: False", + "XEphem*Logbook*Filter.set: False", + "XEphem*Logbook*HJD.set: False", + "XEphem*Logbook*JD.set: False", + "XEphem*Logbook*Latitude.set: False", + "XEphem*Logbook*Location.set: False", + "XEphem*Logbook*Longitude.set: False", + "XEphem*Logbook*MoonAlt.set: False", + "XEphem*Logbook*MoonPhase.set: False", + "XEphem*Logbook*MoonSep.set: False", + "XEphem*Logbook*Object.set: False", + "XEphem*Logbook*RA2000.set: False", + "XEphem*Logbook*Seeing.set: False", + "XEphem*Logbook*SunAlt.set: False", + "XEphem*Logbook*Telescope.set: False", + "XEphem*Logbook*Time.set: False", + "XEphem*Logbook*Transparency.set: False", + "XEphem*Logbook*UTCDate.set: False", + "XEphem*Logbook*UTCTime.set: False", + "XEphem*Logbook*User1.set: False", + "XEphem*Logbook*User2.set: False", + Version_resource, + NULL +}; + +/* $Id: fallbacks.c,v 1.313 2013/01/14 04:02:19 ecdowney Exp $ */ diff --git a/GUI/xephem/favmenu.c b/GUI/xephem/favmenu.c new file mode 100644 index 0000000..ffcd0a8 --- /dev/null +++ b/GUI/xephem/favmenu.c @@ -0,0 +1,860 @@ +/* handle the favorites list. + * independent copies of all favorites are kept here but pointers returned are + * from main database if entry with same name exists. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + +/* pointer to object if loaded, else just name. also on/off control. + * N.B. don't point op at &o because the list gets realloced and can move. + */ +typedef struct { + Obj o; /* defn */ + Obj *op; /* db object else NULL for our o */ + int on; /* whether to use */ +} Favorite; + +static Favorite * favGrow (void); +static void fav_up_cb (Widget w, XtPointer client, XtPointer call); +static void fav_dn_cb (Widget w, XtPointer client, XtPointer call); +static void fav_del_cb (Widget w, XtPointer client, XtPointer call); +static void fav_on_cb (Widget w, XtPointer client, XtPointer call); +static void fav_load_cb (Widget w, XtPointer client, XtPointer call); +static void fav_save_cb (Widget w, XtPointer client, XtPointer call); +static void fav_add_cb (Widget w, XtPointer client, XtPointer call); +static void fav_help_cb (Widget w, XtPointer client, XtPointer call); +static void fav_close_cb (Widget w, XtPointer client, XtPointer call); +static void fav_save_cb (Widget w, XtPointer client, XtPointer call); +static void fav_create (void); +static void showFavorites (void); +static void setup1Row (Widget rc_w, int i); +static void loadFavs (); +static void saveFavs (char *filename); +static void favRmAll(void); +static void bldExport(void); +static Obj *srchRealDB (char *name); +static void del_i(void); +static void chg_i(void); + +/* the list */ +static Favorite *favs; /* malloced list of all favorites */ +static int nfavs; /* n in favs list */ +static Obj **xfavs; /* malloced list of fav Obj to export */ +static int nxfavs; /* n in xfavs list */ + +static Widget favshell_w; /* main form shell */ +static Widget sw_w; /* list scrolled window */ +static Widget save_w; /* TF for name of file to save favs */ +static Widget add_w; /* TF for edb dfn of new favorite */ + +static int internal_scan; /* flag to temp disable fav_scan */ + +static char favcategory[] = "Favorites"; /* Save category */ + +static char fav_suffix[] = ".fav"; /* suffix of Favorites files */ +static char deffavfn[] = "favorites.fav"; /* default favorites to load */ + +/* used by query callbacks */ +static int deli; +static Obj newo; + +/* show, create if first time, the favorites window */ +void +fav_manage() +{ + if (!favshell_w) + fav_create(); + + XtPopup (favshell_w, XtGrabNone); + set_something (favshell_w, XmNiconic, (XtArgVal)False); +} + +/* add a new object to the favorites list if not already */ +void +fav_add (Obj *op) +{ + Favorite *addfp; + int i; + + watch_cursor(1); + + if (!favshell_w) + fav_create(); + + /* replace if name is dup, else add */ + i = fav_already (op->o_name); + if (i >= 0) { + addfp = &favs[i]; + memcpy (&addfp->o, op, sizeof(Obj)); + addfp->op = NULL; /* local copy now for sure */ + } else { + addfp = favGrow(); + memcpy (&addfp->o, op, sizeof(Obj)); + addfp->op = (op->o_flags & FLDSTAR) ? NULL : op; + } + + addfp->on = 1; + + /* display */ + bldExport(); + showFavorites(); + all_newfavs(); + + watch_cursor(0); +} + +/* return index into favs entry if given name is on favorites list, else -1 */ +int +fav_already (char *name) +{ + int i; + + for (i = 0; i < nfavs; i++) + if (strcmp (favs[i].o.o_name, name) == 0) + return (i); + return (-1); +} + +/* return a list of Favorite Obj* to be used. + * each Obj * will point into db if loaded, else to our private copy. + * oppp can be NULL if just want count. + * N.B. caller should never free the list. + */ +int +fav_get_loaded (Obj ***oppp) +{ + if (!favshell_w) + fav_create(); + if (oppp) + *oppp = xfavs; + return (nxfavs); +} + +/* called when the database changes. + * goal is to decide whether the copies we have here are now also in the db + */ +void +fav_newdb() +{ + int i; + + if (!favshell_w) + fav_create(); + + /* update db pointer if really in db */ + for (i = 0; i < nfavs; i++) + favs[i].op = srchRealDB (favs[i].o.o_name); + + bldExport(); + showFavorites(); +} + + +/* used by db_scan() to collect Favorites set on and not in the main database. + * called with index into favs[] from which to scan and mask of desired types. + * return next Obj with index set for next scan or NULL when no more. + * N.B. internal calls from here can disable by setting internal_scan. + */ +Obj * +fav_scan (int *np, int typemask) +{ + int i; + + if (internal_scan) + return (NULL); + + for (i = *np; i < nfavs; i++) { + if (favs[i].on && !favs[i].op && + (OBJTYPE2MASK(favs[i].o.o_type) & typemask)) { + *np = i+1; + return (&favs[i].o); + } + } + + return (NULL); +} + + +/* called to put up or remove the watch cursor. */ +void +fav_cursor (Cursor c) +{ + Window win; + + if (favshell_w && (win = XtWindow(favshell_w)) != 0) { + Display *dsp = XtDisplay(favshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the favorites window */ +static void +fav_create() +{ + static struct { + char *label; + XtCallbackProc cb; + char *tip; + } btns[] = { + {"Close", fav_close_cb, "Close this window"}, + {"Help", fav_help_cb, "Learn more"}, + }; + Widget w, bf_w, pb_w, sfm_w; + Widget favform_w; + Arg args[20]; + char *s[1]; + int i; + int n; + + /* create the Favories shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "Favorites"); n++; + XtSetArg (args[n], XmNiconName, "Favorites"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + favshell_w = XtCreatePopupShell ("Favorites", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (favshell_w); + set_something (favshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (favshell_w, "XEphem*Favorites.x", favcategory, 0); + sr_reg (favshell_w, "XEphem*Favorites.y", favcategory, 0); + sr_reg (favshell_w, "XEphem*Favorites.width", favcategory, 0); + sr_reg (favshell_w, "XEphem*Favorites.height", favcategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + favform_w = XmCreateForm (favshell_w, "FMForm", args, n); + XtAddCallback (favform_w, XmNhelpCallback, fav_help_cb, 0); + XtManageChild (favform_w); + + /* controls attached across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNfractionBase, 5*XtNumber(btns)-1); n++; + bf_w = XmCreateForm (favform_w, "FBForm", args, n); + XtManageChild (bf_w); + + for (i = 0; i < XtNumber(btns); i++) { + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5*i); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 5*(i+1)-1); n++; + w = XmCreatePushButton (bf_w, btns[i].label, args, n); + wtip (w, btns[i].tip); + XtAddCallback (w, XmNactivateCallback, btns[i].cb, 0); + XtManageChild (w); + } + + /* favorites add control */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, bf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + pb_w = XmCreatePushButton (favform_w, "FATB", args, n); + set_xmstring (pb_w, XmNlabelString, "Add edb:"); + wtip (pb_w, "Add or change a Favorite defined by the edb format entry at right"); + XtAddCallback (pb_w, XmNactivateCallback, fav_add_cb, NULL); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, bf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + add_w = XmCreateTextField (favform_w, "edb", args, n); + XtAddCallback (add_w, XmNactivateCallback, fav_add_cb, NULL); + sr_reg (add_w, NULL, favcategory, 0); + wtip (add_w, "edb format definition of new or changed Favorite"); + XtManageChild (add_w); + + /* favorites file save control */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, add_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + pb_w = XmCreatePushButton (favform_w, "FSPB", args, n); + set_xmstring (pb_w, XmNlabelString, "Save to:"); + wtip (pb_w, "Save above Favorites in file named at right"); + XtAddCallback (pb_w, XmNactivateCallback, fav_save_cb, NULL); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, add_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + save_w = XmCreateTextField (favform_w, "File", args, n); + XtAddCallback (save_w, XmNactivateCallback, fav_save_cb, NULL); + sr_reg (save_w, NULL, favcategory, 0); + defaultTextFN (save_w, 0, deffavfn, NULL); + wtip (save_w, "File in which to save current Favorites"); + XtManageChild (save_w); + + /* favorites load control */ + + s[0] = fav_suffix; + sfm_w = createFSM (favform_w, s, 1, "auxil", fav_load_cb); + wtip (sfm_w, "Select existing Favorites file to load"); + set_xmstring (sfm_w, XmNlabelString, "Load file: "); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, save_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetValues (sfm_w, args, n); + + /* SW for RC of entries stretches between top and row of controls */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sfm_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + sw_w = XmCreateScrolledWindow (favform_w, "SW", args, n); + XtManageChild (sw_w); + + /* add a dummy RC just so it can be replaced when add entries */ + + n = 0; + w = XmCreateRowColumn (sw_w, "Dummy", args, n); + XtManageChild (w); + + /* init list */ + loadFavs(NULL); + showFavorites(); +} + +/* display each of the favs entries in the dialog. */ +static void +showFavorites() +{ + Widget ww; + Arg args[20]; + int i, n; + + /* replace workWindow with a fresh RC */ + get_something (sw_w, XmNworkWindow, (XtArgVal)&ww); + XtDestroyWidget (ww); + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + ww = XmCreateRowColumn (sw_w, "FavRC", args, n); + set_something (sw_w, XmNworkWindow, (XtArgVal)ww); + + /* fill with info */ + for (i = 0; i < nfavs; i++) + setup1Row (ww, i); + + /* ok */ + XtManageChild (ww); +} + +/* using info from favs[i] create its row in the favories window */ +static void +setup1Row (rc_w, i) +Widget rc_w; +int i; +{ + Widget f_w, on_w, del_w, lbl_w, up_w, dn_w; + Arg args[20]; + char buf[2048]; + int n; + + /* create the row's form */ + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + f_w = XmCreateForm (rc_w, "FF", args, n); + XtManageChild (f_w); + + /* PB to delete */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + del_w = XmCreatePushButton (f_w, "Del", args, n); + XtAddCallback (del_w, XmNactivateCallback, fav_del_cb, (XtPointer)(long int)i); + wtip (del_w, "Delete this Favorite"); + XtManageChild (del_w); + + /* arrow buttons for up and down */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, del_w); n++; + XtSetArg (args[n], XmNarrowDirection, XmARROW_UP); n++; + XtSetArg (args[n], XmNsensitive, i > 0); n++; + up_w = XmCreateArrowButton (f_w, "Fup", args, n); + XtAddCallback (up_w, XmNactivateCallback, fav_up_cb, (XtPointer)(long int)i); + wtip (up_w, "Move this Favorite up one row"); + XtManageChild (up_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, up_w); n++; + XtSetArg (args[n], XmNarrowDirection, XmARROW_DOWN); n++; + XtSetArg (args[n], XmNsensitive, i < nfavs-1); n++; + dn_w = XmCreateArrowButton (f_w, "Fdn", args, n); + XtAddCallback (dn_w, XmNactivateCallback, fav_dn_cb, (XtPointer)(long int)i); + wtip (dn_w, "Move this Favorite down one row"); + XtManageChild (dn_w); + + /* TB for on/off */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, dn_w); n++; + XtSetArg (args[n], XmNset, favs[i].on); n++; + on_w = XmCreateToggleButton (f_w, "Use", args, n); + XtAddCallback (on_w, XmNvalueChangedCallback, fav_on_cb,(XtPointer)(long int)i); + wtip (on_w, "Whether to use this entry"); + XtManageChild (on_w); + + /* label for name */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, on_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + lbl_w = XmCreateLabel (f_w, "FL", args, n); + db_write_line (favs[i].op ? favs[i].op : &favs[i].o, buf); + set_xmstring (lbl_w, XmNlabelString, buf); + XtManageChild (lbl_w); +} + +/* callback from the overall Help button. + */ +/* ARGSUSED */ +static void +fav_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "Collection of favorite objects", + }; + + hlp_dialog ("Favorites", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback from the Close PB */ +/* ARGSUSED */ +static void +fav_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (favshell_w); +} + +/* callback to load favorites list from file. + * file name is lable of htsi widget + */ +/* ARGSUSED */ +static void +fav_load_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + + get_xmstring (w, XmNlabelString, &fn); + + loadFavs(fn); + showFavorites(); + all_newfavs(); + + XtFree (fn); +} + +/* callback to Save the current favorites to file named in save_w + * N.B. do not use call arg, this is used both by PB and TF + */ +/* ARGSUSED */ +static void +fav_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024], *fn; + char *txt; + + /* get file name */ + fn = txt = XmTextFieldGetString (save_w); + if (!strstr (txt, fav_suffix)) { + sprintf (fn = buf, "%s%s", txt, fav_suffix); + XmTextFieldSetString (save_w, fn); + } + + /* save */ + saveFavs (fn); + + /* clean up */ + if (confirm()) + xe_msg (1, "%s saved", fn); + XtFree (txt); +} + +/* callback to Add a new favorite or possibly modify an existing fav. + * N.B. do not use call arg, this is used both by PB and TF + */ +/* ARGSUSED */ +static void +fav_add_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024]; + char *txt; + + /* get edb dfn, crack and add/change if ok */ + txt = XmTextFieldGetString (add_w); + if (db_crack_line (txt, &newo, NULL, 0, buf) < 0) { + /* unknown */ + xe_msg (1, buf); + } else if (srchRealDB (newo.o_name)) { + /* already in db */ + xe_msg (1, "%s is already in loaded database", newo.o_name); + } else if ((deli = fav_already (newo.o_name)) >= 0) { + /* already in favs list */ + if (confirm()) { + (void) sprintf (buf, "Change \"%s\"?", favs[deli].o.o_name); + query (favshell_w, buf, "Yes -- change", "No -- ignore", NULL, + chg_i, NULL, NULL); + } else + chg_i(); + } else { + /* add to favs */ + Favorite *newfp = favGrow(); + newfp->o = newo; + newfp->op = NULL; + newfp->on = 1; + + /* display */ + bldExport(); + showFavorites(); + all_newfavs(); + } + + XtFree (txt); +} + +/* used to delete favorite entry deli */ +static void +del_i() +{ + /* remove deli from favs list */ + memmove (&favs[deli], &favs[deli+1], (--nfavs-deli)*sizeof(Favorite)); + + /* show list now */ + watch_cursor (1); + bldExport(); + showFavorites(); + all_newfavs(); + watch_cursor (0); +} + +/* used to change favorite[deli] to newo */ +static void +chg_i() +{ + /* update entry */ + memcpy (&favs[deli].o, &newo, sizeof(Obj)); + favs[deli].op = NULL; /* local copy now for sure */ + + /* update display */ + watch_cursor (1); + bldExport(); + showFavorites(); + all_newfavs(); + watch_cursor (0); +} + +/* called when a Use toggle changes. + * client is index into favs[] + */ +/* ARGSUSED */ +static void +fav_on_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int wanton = XmToggleButtonGetState (w); + int i = (long int)client; + + watch_cursor(1); + favs[i].on = wanton; + bldExport(); + all_newfavs(); + watch_cursor(0); +} + +/* called when an Up arrow button is hit in the favorites list. + * client is index into favs[] + */ +/* ARGSUSED */ +static void +fav_up_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i = (long int)client; + + Favorite tmp = favs[i-1]; + favs[i-1] = favs[i]; + favs[i] = tmp; + + bldExport(); + showFavorites(); + all_newfavs(); +} + +/* called when a Down arrow button is hit in the favorites list. + * client is index into favs[] + */ +/* ARGSUSED */ +static void +fav_dn_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i = (long int)client; + + Favorite tmp = favs[i+1]; + favs[i+1] = favs[i]; + favs[i] = tmp; + + bldExport(); + showFavorites(); + all_newfavs(); +} + +/* called when a Delete button is hit in the favorites window. + * client is index into favs[] + */ +/* ARGSUSED */ +static void +fav_del_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* save index */ + deli = (long int)client; + + /* confirm */ + if (confirm()) { + char buf[1024]; + + (void) sprintf (buf, "Delete \"%s\"?", favs[deli].o.o_name); + query (favshell_w, buf, "Yes -- delete", "No -- keep it", NULL, + del_i, NULL, NULL); + } else + del_i(); +} + +/* add one more to favs and return ponter to new */ +static Favorite * +favGrow() +{ + Favorite *newfp; + + favs = (Favorite *) XtRealloc ((char*)favs, (nfavs+1)*sizeof(Favorite)); + newfp = &favs[nfavs++]; + zero_mem (newfp, sizeof(*newfp)); + return (newfp); +} + +static void +favRmAll() +{ + XtFree ((char *)favs); + favs = NULL; + nfavs = 0; +} + +/* build xfavs, list of Obj* to be exported as the current set of favs */ +static void +bldExport() +{ + int i; + + xfavs = (Obj **) XtRealloc ((char *)xfavs, nfavs*sizeof(Obj*)); /* WC */ + for (nxfavs = i = 0; i < nfavs; i++) + if (favs[i].on) + xfavs[nxfavs++] = favs[i].op ? favs[i].op : &favs[i].o; +} + +/* set the current set of favorites from fn them build the export obj list. + * if !fn, use save_w + */ +static void +loadFavs(char *fn) +{ + Favorite *newfp; + char msg[1024]; + XMLEle *root, *ep; + LilXML *xp; + FILE *fp; + char buf[1024]; + + /* get file name */ + if (!fn) { + char *txt = XmTextFieldGetString (save_w); + if (!strstr (txt, fav_suffix)) + sprintf (buf, "%s%s", txt, fav_suffix); + else + strcpy (buf, txt); + XtFree (txt); + fn = buf; + } + + /* open file */ + fp = fopend (fn, "auxil", "r"); + if (!fp) + return; /* already informed user */ + + /* read */ + xp = newLilXML(); + root = readXMLFile (fp, xp, msg); + delLilXML (xp); + fclose (fp); + if (!root) { + xe_msg (1, "%s: %s", fn, msg[0] ? msg : "malformed xml"); + return; + } + if (strcmp (tagXMLEle(root), "Favorites")) { + xe_msg (1, "%s: not a Favorites file", fn); + delXMLEle (root); + return; + } + + /* remove current set */ + favRmAll(); + + /* add new from file */ + for (ep = nextXMLEle(root,1); ep != NULL; ep = nextXMLEle(root,0)) { + Obj o; + + if (strcmp (tagXMLEle(ep), "favorite")) + continue; + if (db_crack_line (pcdataXMLEle(ep), &o, NULL, 0, msg) < 0) { + xe_msg (1, "Bad favorite: %s: %s", pcdataXMLEle(ep), msg); + continue; + } + + newfp = favGrow(); + newfp->o = o; + newfp->op = srchRealDB (newfp->o.o_name); + newfp->on = strcmp (findXMLAttValu (ep, "on"), "true") == 0; + } + + /* clean up */ + delXMLEle (root); + + /* build export list */ + bldExport(); +} + +/* save the current set of favorites to the given file. + */ +static void +saveFavs(char *fn) +{ + char line[1024]; + FILE *fp; + int i; + + /* create */ + fp = fopend (fn, NULL, "w"); + if (!fp) + return; /* already informed user */ + + /* write */ + fprintf (fp, "\n"); + for (i = 0; i < nfavs; i++) { + db_write_line (favs[i].op ? favs[i].op : &favs[i].o, line); + fprintf (fp, " %s\n", + favs[i].on ? "true" : "false", line); + } + fprintf (fp, "\n"); + + /* finished */ + fclose (fp); +} + +/* scan just the db (not favs) for entry with given name and return + * pointer else NULL + * N.B. this basically removes from db_scan() what fav_scan() adds + */ +static Obj * +srchRealDB (char *name) +{ + DBScan dbs; + Obj *op; + + /* flag to disable fav_scan() while we use db_scan() */ + internal_scan = 1; + + for (db_scaninit (&dbs,ALLM,NULL,0); (op = db_scan(&dbs)) != NULL; ) + if (!strcmp (op->o_name, name)) + break; + + internal_scan = 0; + return (op); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: favmenu.c,v $ $Date: 2012/10/06 02:19:35 $ $Revision: 1.29 $ $Name: $"}; diff --git a/GUI/xephem/fifos/._Makefile b/GUI/xephem/fifos/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/fifos/._Makefile differ diff --git a/GUI/xephem/fifos/._README b/GUI/xephem/fifos/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/fifos/._README differ diff --git a/GUI/xephem/fifos/Makefile b/GUI/xephem/fifos/Makefile new file mode 100644 index 0000000..b1ac2c6 --- /dev/null +++ b/GUI/xephem/fifos/Makefile @@ -0,0 +1,21 @@ +# Make the fifos used by xephem, assuming the default configuration. +# +# on non-POSIX systems, you make fifos using mknod as follows: +# mknod p + +all: xephem_loc_fifo xephem_db_fifo xephem_in_fifo xephem_out_fifo + +xephem_loc_fifo: + mkfifo -m 0666 $@ + +xephem_db_fifo: + mkfifo -m 0666 $@ + +xephem_in_fifo: + mkfifo -m 0666 $@ + +xephem_out_fifo: + mkfifo -m 0666 $@ + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2000/12/03 00:24:35 $ $Revision: 1.2 $ $Name: $ diff --git a/GUI/xephem/fifos/README b/GUI/xephem/fifos/README new file mode 100644 index 0000000..3d378f4 --- /dev/null +++ b/GUI/xephem/fifos/README @@ -0,0 +1,5 @@ +This directory is empty now but this is where one usually puts the +named pipes (fifos) used by xephem. + +! For RCS Only -- Do Not Edit +! @(#) $RCSfile: README,v $ $Date: 2000/12/01 08:33:14 $ $Revision: 1.2 $ $Name: $ diff --git a/GUI/xephem/fits/._Abell426.fts b/GUI/xephem/fits/._Abell426.fts new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/fits/._Abell426.fts differ diff --git a/GUI/xephem/fits/._horsehead.fts b/GUI/xephem/fits/._horsehead.fts new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/fits/._horsehead.fts differ diff --git a/GUI/xephem/fits/Abell426.fts b/GUI/xephem/fits/Abell426.fts new file mode 100644 index 0000000..a52aa03 --- /dev/null +++ b/GUI/xephem/fits/Abell426.fts @@ -0,0 +1,643 @@ +SIMPLE = T /FITS header BITPIX = 16 /No.Bits per pixel NAXIS = 2 /No.dimensions NAXIS1 = 530 /Length X axis NAXIS2 = 530 /Length Y axis DATE = '28/04/97 ' /Date of FITS file creation ORIGIN = 'CASB -- STScI ' /Origin of FITS image PLTLABEL= 'E1618 ' /Observatory plate label PLATEID = '07WS ' /GSSS Plate ID REGION = 'XE198 ' /GSSS Region Name DATE-OBS= '20/12/57 ' /UT date of Observation UT = '05:36:00.00 ' /UT time of observation EPOCH = 1.9579677734375E+03 /Epoch of plate PLTRAH = 3 /Plate center RA PLTRAM = 9 / PLTRAS = 3.2780210000000E+01 / PLTDECSN= '+ ' /Plate center Dec PLTDECD = 42 / PLTDECM = 33 / PLTDECS = 3.1743320000000E+01 / EQUINOX = 2.0000000000000E+03 /Julian Reference frame equinox EXPOSURE= 4.5000000000000E+01 /Exposure time minutes BANDPASS= 8 /GSSS Bandpass code PLTGRADE= 1 /Plate grade PLTSCALE= 6.7200000000000E+01 /Plate Scale arcsec per mm SITELAT = '+33:24:24.00 ' /Latitude of Observatory SITELONG= '-116:51:48.00 ' /Longitude of Observatory TELESCOP= 'Palomar 48-inch Schmidt'/Telescope where plate taken CNPIX1 = 2636 /X corner (pixels) CNPIX2 = 4778 /Y corner DATATYPE= 'INTEGER*2 ' /Type of Data SCANIMG = 'XE198_07WS_00_00.PIM'/Name of original scan SCANNUM = 0 /Identifies scan of the plate DCHOPPED= F /Image repaired for chopping effects DSHEARED= F /Image repaired for shearing effects DSCNDNUM= 0 /Identifies descendant of plate scan image XPIXELSZ= 2.5284450000000E+01 /X pixel size microns YPIXELSZ= 2.5284450000000E+01 /Y pixel size microns PPO1 = 0.0000000000000E+00 /Orientation Coefficients PPO2 = 0.0000000000000E+00 / PPO3 = 1.7747471555000E+05 / PPO4 = 0.0000000000000E+00 / PPO5 = 0.0000000000000E+00 / PPO6 = 1.7747471555000E+05 / AMDX1 = 6.7240987715710E+01 /Plate solution x coefficients AMDX2 = 3.6605616579680E-01 / AMDX3 = -1.3732674154580E+02 / AMDX4 = -2.2170938540070E-05 / AMDX5 = -2.0113447317610E-05 / AMDX6 = -2.1108647953950E-05 / AMDX7 = 0.0000000000000E+00 / AMDX8 = 1.8223387505210E-06 / AMDX9 = -9.7173567076310E-08 / AMDX10 = 2.3013465940930E-06 / AMDX11 = -6.6734677147540E-08 / AMDX12 = 0.0000000000000E+00 / AMDX13 = 0.0000000000000E+00 / AMDX14 = 0.0000000000000E+00 / AMDX15 = 0.0000000000000E+00 / AMDX16 = 0.0000000000000E+00 / AMDX17 = 0.0000000000000E+00 / AMDX18 = 0.0000000000000E+00 / AMDX19 = 0.0000000000000E+00 / AMDX20 = 0.0000000000000E+00 / AMDY1 = 6.7250690753980E+01 /Plate solution y coefficients AMDY2 = -3.6679440186020E-01 / AMDY3 = -3.1235334956310E+02 / AMDY4 = -3.5598357942100E-05 / AMDY5 = 2.4433823111370E-08 / AMDY6 = 4.3754127047740E-07 / AMDY7 = 0.0000000000000E+00 / AMDY8 = 2.0663931384810E-06 / AMDY9 = 2.9377276167040E-09 / AMDY10 = 2.0894436743940E-06 / AMDY11 = -2.4710339600070E-08 / AMDY12 = 0.0000000000000E+00 / AMDY13 = 0.0000000000000E+00 / AMDY14 = 0.0000000000000E+00 / AMDY15 = 0.0000000000000E+00 / AMDY16 = 0.0000000000000E+00 / AMDY17 = 0.0000000000000E+00 / AMDY18 = 0.0000000000000E+00 / AMDY19 = 0.0000000000000E+00 / AMDY20 = 0.0000000000000E+00 / Based on photographic data of the National Geographic Society -- Palomar Observatory Sky Survey (NGS-POSS) obtained using the Oschin Telescope on Palomar Mountain. The NGS-POSS was funded by a grant from the National Geographic Society to the California Institute of Technology. The plates were processed into the present compressed digital form with their permission. The Digitized Sky Survey was produced at the Space Telescope Science Institute under US Government grant NAG W-2166. Investigators using these scans are requested to include the above acknowledgements in any publications. Copyright (c) 1994, Association of Universities for Research in Astronomy, Inc. All rights reserved. DATAMAX = 14852 /Maximum data value DATAMIN = 2791 /Minimum data value OBJECT = 'data ' /Object ID OBJCTRA = '03 19 42.000 ' /Object Right Ascension (J2000) OBJCTDEC= '+41 30 00.00 ' /Object Declination (J2000) OBJCTX = 2901.90 /Object X on plate (pixels) OBJCTY = 5043.35 /Object Y on plate (pixels) CRPIX1 = 265 CRPIX2 = 265 CRVAL1 = 49.92586409 CRVAL2 = 41.49957713 CROTA2 = -2.014060418 CROTA1 = -2.014060418 CDELT1 = -0.0004719764 CDELT2 = 0.0004719764 CTYPE1 = 'RA---TAN' CTYPE2 = 'DEC--TAN' END mmfb¼àààà / / Ü Üàààà‘Fû {!ss p pÊ%wwwÒÎ΃ÝÌÌqqyyÓ}2׌ˆˆ6  ®®ªPHî»»· ¯GGôôððCC™™ ìGCCCåå8888 ‹ ‹ ¶ ¶cc _ _ _ºŽ 4 á ‡ á á á á ‹ ‹88 ‹ ‹ ‹ ‹ « « « « ? ? ì ì ì ì ? ? ì ’ ì ì èCCC Á Á Á Ánn Á Á • • • • ì ì ì ì11„„ € € € €\\ T T T T T T^^ ± ± Ü Ü‰‰6666 pÊssÎΟŸ ñ ñõ › › › e e¿ e » » e¿¿¿(( z z z z z z(( zÕ(((( ô ô G G ô ô¡¡# É É É   ³ ³ ³ ³ ³ ³ + + + + ³ ³ ³ ³` ``````   r rvv É É ž žKK¡ G G G ¹ ¹ff ¹ ¹ ¹ ¹ff ¹ ¹ µ b¼¼ b ä ä 7‘;;èèá†44 Ù Ù†á0000ÝÝÝÝŠ000EE— = ê ê ê êAAAA ê ê ê ê‚‚‚‚++ ~ ~ © © ©bZùùùùKKKKww Ê Êwwww¦¦®[[,,,Ñ((‚ÝGììì??’’;;––¡fÈÅgggg½½ Ä Äqq Ä ÄqqóóFF ïJJJ÷JJy.óUU$*!uóä3ØØØØØ++++ØØVVVV± # œ!I*¹^OO¢¢ ž žmmÀÀ¼àààà‰‰ Ü Üààààë¿&9t‹{ÎÎÊÊÊ%wwwÒÎÎ(ƒqqÄyÓ}}}2ˆˆÛTTTTPõî“»»»»·\ ¯GG™™ • •CC™™ ìGCCCåå8888 ‹ ‹ ¶ ¶cc _ _ _ºŽ 4 á ‡ á á á á ‹ ‹88 ‹ ‹ ‹ ‹ « « « « ? ? ì ì ì ì ? ? ì ’ ì ì èCCC Á Á Á Ánn Á Á • • • • ì ì ì ì Ö Ö„„ € € € € T T T T T T^^ ± ± Ü Ü‰‰6666 pÊwwssssŸŸLLõ › › › e e¿ e » » » » e¿¿¿(( z z z z z z((Õ/(((( ô ô G G ô ô G G# É É É   ³ ³ ³ ³ ³ ³ + + + + ³ ³ ³ ³ ````````` r rvv É É ž žKK¡ G G G ¹ ¹ff ¹ ¹ ¹ ¹ff ¹ ¹ µ b¼¼ b ä ä 7‘;;èè†á Ù Ù Ù Ù†á0000ÝÝ77Š000 ê ê =— ê ê ê êAAAA ê ê ê ê‚‚‚‚++ ~ ~ © © ©­ZùùùùKKKKww$$wwww¦¦¦¦S®,,ÑwÍÍ(‚ì’’’??’’;;––ìGôôÅjgggg½½ Ä Äqq Ä ÄqqóóFF ïJJJ÷JJÔÔ.ÛÛFFä‰3ØØØØØ++……ØØVVVVV±¹ÀÀ¹^OO¢¢ùùmmää6622^^  Ä M*t#¯_PPP££õõ!!!{ÎÎ{{iiÄÄÄÄyyQ÷÷QÿY¬¬ÎÎ!!ÆÆll=âââÞÞ11ÅÅÅÅnn™™™ô™™ ì ìcc ¶ ¶ _º  88å ‹ ‹ ‹88 ¶ ¶ ¶ ¶ _ _ _ _ 4 4 á á á á á á---- Ö Ö Ö Ö € € € € € € € € j j j j j j™™ ì ì • • • • ì ì ?™ ì ì ì ì j j Á   Ó Ó-- € € € €-- € € Ö Ö Ö Ö Ü Ü6 Ü Ü Ü Ü Ü / / Ü Ü6666!!ssÊÊLLŸŸHH › › » »iiAAA ç ëë Ñ Ñ Ñ ÑÕÕ z z ü üªª ü ü ü ü G¡O ô ž ž ž ž ô ô¡ G ô ô¡¡ ³ ³ ³ ³ ³`  ß ß ß ß 1 1 ß ß····``»»··ddd + + +vvvvvv É É ô ôO ô ž žKK‘ 7 7‘;;; à 7 7 ä ä ä ä ä ä ä ä ‰ ä;;;; ä ä ä ä> ä‘ 7[[[  W W W W W²² ¹ ²² WAA æ›————AA “ “ “ “AA ~ ~ØØ‚‚‚‚‚‚// ~ØØØ$$$$  ÍÍKKK¦ùùKK$$ÑÑ((ÕÕ$$$$$$$$jjjggnjjjjì’’’;;èèjj ¹ ¹ggFFFFFFFFóóFF ™óóóÌÌqqÈÈÈÈq&##ÐÐ33……ØØ++­ R­­……33ÜÜ//¢¢ H HKK.yqqmmmmää662222^^  yÛªPPP££õõ!! Æ!ÎÎ{{iiÄÄÄÄQ÷÷Qÿ¤QQssÆÆllll∈ˆÞÞ‹‹ÅÅÅÅnn™™™ô™™ ì ìcc ¶ ¶ _º  88å ‹ ‹ ‹88 ¶ ¶ ¶ ¶ _ _ _ _ 4 4 á á á á á á---- Ö Ö Ö Ö € € € € € € € € j j j j j j™™ ì ì • • • • ì ì ?™ ì ì ì ì j j ½ ½ Á  ---- € € € €-- € € | | Ö Ö Ü Ü6 Ü Ü Ü Ü Ü / / Ü Ü Ü Ü66!!ssÊÊ ñ ñŸŸHHõõ » »iiAAA ç ëë Ñ Ñ Ñ ÑÕÕ z z ü üªª ü ü ü ü G¡O ô ž ž ž ž ô ô¡ G ô ô¡¡ ³ ³ ³ ³ ³`  ß ß ß ß 1 1 ß ß····``»»··ddd + + +vvvvvv É É ô ôO ô ž žKK‘ 7 7‘;;; à 7 7 ä ä ä ä ä ä ä ä ä>;;;; ä ä ä ä ä>‘ 7[[¶[ W W W W W²² #~ ² WAAAA————AA “ “ “ “AA ~ ~ØØ‚‚‚‚‚‚//Ø ~ØØ$$$$  ÍÍKKK¦ùùKK$$ÑÑÍÍ{{$$$$$$$$jggnjjjjì’’’;;èèjj ¹ ¹ggFFFFFFFFóóFF ™óóóÌÌqqÈÈÈÈq&Ø#uuØØ……ØØ……­­­……ØØ‚‚//¢¢ H HKK6ÀÀÀää6622àà^^¸¸bÄÄPõõõPPõõssÎÎÎÎ{{iiÄÄqqq÷÷÷÷¤¤¤¤Æl¾¾¾¾âˆˆˆÞÞæ1ÅÅrnn™™GG™™™™ ¶ ¶ ¶  _ _888888 ‹ ‹ ¶ ¶ ¶ ¶    4 4 á á á á á á € € € € Ö Ö Ö Ö Ó Ó Ó Ó € € € € j j ½ ½ j j j j ì ì™™ • • • • ì ì™™ ì ì ì ì ½ ½ n Á Á €Ú € € € € € € € € € € Ö | Ö Ö / / Ü Ü Ü Ü / / / / Ü Ü Ü Ü6‘{{ÎsÊÊ ñ ñ ñ ñHHõõ » »ii e¿”îIë ~~+ Ñ((((ªªªªªªªª¡¡¡¡ ž žKK¡¡¡¡¡¡ ô ô ³ ³ ³ ³`` ³ ³ ß ß ß ß ß ßŒŒ + +dddd··· É É É Évv É É ô ôO ôKK ž ž ä ä‘‘•;;; ä ä 7 7 ä ä ä ä ä ä‘‘;;;; ä ä 7‘‘‘ ä ä[[[[ W W W W W²_nð!¥~¹² WAAAAEE——îîAAAA “ “++++ Ô Ô‚‚ Ô Ô Ô/ØØØ ~ Ê$ww sÍ  KKK¦ ž ž žùÑÑww  {{wwwwwÑ Ê Êggggn½½??’’;;èè½½½½ggFF ™óó ™FFó ™¡FFFóóÌqÈÈÈÈ ÄqÌ}ÈÈÈØØØØØØØØVVVVVVVV±±ZZ­­……++‚‚‚‚ õ õ õ õKK úÓÀfää6622àà^^^^bbõ ›õõõõõõssÎÎÎÎ{{iiÄÄqqqœœœœïïïïlÆddd  ∈ˆÞÞ11ÅÅrnn™™GGôô™™ ¶ ¶ ¶gg _ _888888 ‹ ‹ ¶ ¶ ¶ ¶    4 4 á á á á á á € € € € Ö Ö Ö Ö Ó Ó Ó Ó € € € € j j ½ ½ j j j j ì ì™™ • • • • ì ì ? ? ì ì ì ì ½ ½ n Á ÁÚ € € € € € € €ÚÚ € € Ö | Ö Ö / / Ü Ü Ü Ü‰‰ / / Ü Ü Ü Ü6‘@õ8(ÊÊ ñ ñ ñ ñHH › › » »ii¿ e”î£I˜˜ë ~~+ Ñ((((ªªVVüüøøKK¡¡¡¡¡¡ ô ô ³ ³ ³ ³`` ³ ³ ß ß ß ß ß ßŒŒ + +ddhhhhdd··· É É É Évv É É ô ôO ôKK ž ž ä ä 7 7;•;; ä ä 7 7 ä ä ä ä ä ä 7 7;;;; ä ä 7‘‘‘ ä ä[[[[ W W W W W²_¹Ñ†É¹² WAAAA ê ê——îîAAAA “ “++++ Ô Ô ' ' Ô Ô Ô/ØØØ ~ Ê$wwÍ(  KK¦K ž ž žùwwww    wwwwÑw Ê Ê ¹ ¹ggggn½½??’’;;èè½½½½ggFF ™óó ™FFó ™¡FFFóóÌqÈÈÈÈ ÄqÌÈÈÈÈØØØØØØØØVVVVVVVV  µµ­­……++‚‚‚‚ õ õ õ õKK'¿ë&ÌÄ:ààà Ü Ü‰ä^^  ´´bbŸŸŸŸHHõõwwwÎÎ((ÀÀÀÀÄÄBœBBïï¾d  ³³ÞÞÞÞÚÚÚÚÅÅr Á ÁÈÈ¡¡ôôCø  _ººº  ŽŽŽŽ< á á á ² ² _º ¶ ¶ ¶ ¶ á á 4 4 Ý Ý Ý Ý Ö Ö Ö Ö ) ) )„ € € € € Ö Ö Ö Ö Á Á   j j ½ ½CCCC • •ð • èC è è ? ? ’ ì ½ j j Á Á Á Á Ö Ö Ö Ö € €-- Ö Ö Ö Ö Ö Ö Ö Ö … … … …22à … … … … … … …àï±$õÖ%ÊÊÊŸŸ ñ ñHHHHl˜ò E””A ç++~~(((‚_¹±W_rrµ¥KKKK ô ô¡¡ü¡ ô ô + + ] ] + + + +ââ5555 ˆâ»»¿lhh·vvvv ž ž žø ô ô ô ô 7 7 7 7 ä>‘‘ ä ä 7 7 7 7 ä ä ä ä 7 7 ä ä ä ä ä ä ä ä ä ä‘‘[[[[²² W W  g²²²— = = = “ “AA›A “ “îî “ “ Ô Ô Ô/++ # ~ '‚‚‚++++ÍÍ  ÍÍ  OOO õ ž žKKÍÍ      wwwwÍÍ  ¹ ¹ ¹ ¹gg ¹gÁgg––èè–;èè½½ggJ ï ï ïFFóó ™óóóÈÈÈÈqqÈÈÈÈuu+…3Ø++ØØ­­­­VVVV^^ÀÐj…+ Ð+++3ØùùKK õ õ/Þ"U6&Ä•:::66ä‰^^  ´´bbŸŸŸŸHHõõwwwÎÎ((ffÀÀÄÄBœBBïïï•d¾d¾  ³³ÞÞÞÞÚÚÚÚÅÅr Á Án#  ©ôøø  _º _ _  ŽŽCC< á á á  º _ ¶ ¶ ¶ ¶ á á 4 4 Ý Ý Ý Ý Ö Ö Ö Ö ) ) )„ € € € €11 Ö Ö Á Á   j jCCCCððð • èCCC ? ? ì ’ ½ j j Á Á Á Á Ö Ö Ö Ö € €-- Ö Ö Ö Ö Ö Ö Ö Ö … … … …22à … … … … … … …à:8¢@Ö%ÊÊÊŸŸ ñ ñHHHHl˜ò E””A ç++~~(((‚_# Bè _n#F#Fj¥KKKK ô ô¡¡¡ G ô ô + + ] ] + + + +ââ5555 ˆâhht!ÇÃ÷vv   ž ž žø ô ô ô ô‘‘ 7 7> ä‘‘ ä ä 7 7 7 7 ä ä ä ä 7 7 ä ä ä ä ä ä ä ä ä ä‘‘[[[[²²²²²²__  ²²— = = = “ “AAA› “ “ “ “ “ “ Ô Ô Ô/++ ~ØÜ‚‚‚++++ s s  ÍÍ{{ õ õ õO ž žKKÍÍ      wwwwÍÍ  ¹ ¹ ¹ ¹ ¹ ¹gg ¹ gggððCC–;èè½½ggJ ï ï ïFFóó ™óóóÈÈÈÈqqÈÈÈÈ+…3Ø++ØØ­­­­VV±±^:)h*l˜¼…+ Ð+++3ØùùKK õ õ-)"UãÓÄÄi••ïï>ää‰  ± ±´´ŸŸLLõõõõwwwwÎÎÎθ¸¸ii•ïïïïïBBdd  `` ³Þ9‹1ÚÚˆ-ÅÅÅÅnnn#ÀÀüGø      º _ŽŽññŽŽ á Ẻ  ¶ ¶ ¶ ¶ 4 4 á á ‹ ‹ ‹ ‹ ) ) ) ) ) )„„----„„ Ö Ö Á Á   j j • • • • •ðCCCCð • ? ? ? ? j j j j n Á Á ) ) Ö Ö Ó--- Ö Ö Ö Ö ) ) ) ) … … … …2 … + Ø2à … … …2Ö0{!w ñ ñŸŸHHHH¿¿iipM§Mœ çAA~~ Ñ Ñ((Õ/Á"J1-/Ó•f fĵøSKK ô ô¡¡¡¡ ô ô + + ] ] + + + +ââ55555ÊÖ‹ƒÎpp»ddd + É Évvø ž ž ž¡¡¡¡‘‘‘ 7 ä ä ä ä ä ä 7 7 ä ä> ä 7 7 ä ä ä ä ä ä ä ä ä ä ä ä‘‘[[[[² W²²²²_ ²—— ê ê “ “ “ “AA “ “AA “ “ Ô/ Ô ÔØØØØ//‚‚ ~ ~ ~ ~ s s s s{{(Í õ õ õ õKK ž ž s s  Í s sÍwwwwÍÍ  ¹ ¹ ¹ ¹ ¹ ¹ ggg ¹ ¹nCCèèèèjj½½Ág ï ï ï ïFFóNFFFFÈÈÈÈÌÌÈÈuuu++ØØ++++ZZZZVV±±^n&33æ'·Äµ…++…ØØ…… žùùù¢ H% +ëãˆyÄ•J x¸óä‰ ± ± ± ±´´ŸŸ ñ ñ › ›õõw,‡ÒÎÎÎθ¸¸ii:•••••ççdddd`` ³Þ„‹1ÚÚˆ-ÅÅÅÅnnnnüüGGø      º _ 4 4<<ŽŽ á á _ _ ² ² ¶ ¶ ¶ ¶ 4 4 á á ‹ ‹ ‹ ‹ ) ) ) ) ) ) ) )----„„ Ö Ö Á Á   j j ½ ½ • • • • •ðøøCC •ð ? ? ? ? j j j j n Á Á ) ) | | Ó--- Ö Ö Ö Ö ) ) ) ) … … … …2à …2à … … …2!{! Æw ñ ñŸŸHHHH¿¿iipÆÆ\öA ç ç~~ Ñ Ñ(( zÕ à'´)àf ±ZSøKK ô ô¡¡¡¡ ô ô + + ] ] + + + +ââ5555êp%@!ª ý“%p»ddd + É Évvø ž ž ž¡¡¡¡‘‘‘ 7 ä ä ä ä ä ä 7 7 ä ä> ä 7 7 ä ä ä ä ä ä ä ä ä ä ä ä‘‘[[[[ ²__²²²²_ ²—— ê ê 9 9 “ “AAîîAA “ “ Ô/ Ô Ô ~ ~ØØ Ô Ô‚‚ ~ ~ ~ ~ s s s s  Í s õ õ õ õKK ž ž s s  Í s sÍwwwwÍÍ  ¹ ¹ ¹ ¹ ¹ ¹ gggn~¼q­CèèèèjjnnÁg ï ï B B ï ïFFó ™FF¡¡ÈÈÈÈÌÌ##uuu++ØØ++……ZZZZ±±±±^¹}#Q'·>ĵ…++…ØØ++ žùùù¢ý)¿¿»««QÓ—+‚0ì%„l 9 9 ç ç====ŸŸŸŸ ñ ñLLªºgXLLùù¸¸ffi¼¼>>‘‘‘‘>äÌÌÌÌÅÅr----„„ Ö ÖXXXX\\"" u u Ì Ì Ì Ì J J¤¤ ÷ ÷ J J     ó ó J¤ ÷ ÷ ÷ ÷ ÷ œ F       « « « « § § T T-- €Ú-- € € n Á Á j j j j ì ì ì ìCCðð T T « « « « « Q þ þ T T • • è è • • • • Á Á   j j  j  ^^ ± ± ±222222266‰‰àà22 Ü Ü Ü Ü Ü6‰‰ ± ± ±   +° ‘6‰‰ Ü Ü Ü Ü Ü Ü‰‰:J¬ ‘‘6ÛÛÛÛVV] ¨ } }**¬¬ ÿ ÿ ¨]'‚Üì („$uVf±©Oü¡ ô ô É Évv É ÉvvKKKKOO¡¡ ® ® ® W² ‚ ‚00 ‚ ‚ ‚ ‚ Ù Ù Ù Ù Ù Ù ,† ® ® ® ®qq ÃuÏ|"ó ˜ ˜ ˜ ï ²²++ ~ ~ ~Ø++­ R R R ¥­­VVV ü R R­ R © © © ©VV © © O © ©Z­ R © © © ©­­V ü ©Ø ~+…// Ô/\\\\\\\\²² ²²²ºé,N-©Å—44‡‡88åšš‹‹0 ¹ ¹ ggg? å’’;;C訨¨¨UU¨¨««þþY ¤ ¤ ¤¸¸¸¸aaãã>ã66eÀÇ|-xi¼a¸¸¸¸ÃÃÃÃlldd¿»«QöÓâ$¾*(# „Çl 9 9 ç ç====ùùùùLLLLPªXýLLùù¸¸ffi¼¼>>‘‘‘‘>äÌÌÌÌzzrrÅÅr----„„ Ö ÖXXXX\ §"" u u Ì Ì Ì Ì J J¤¤ ÷ ÷ J J    NN J¤ ÷ ÷ ÷ ÷ ÷ œ F       « « « « T T-- €Ú-- € € n Á Á j j j j ì ì ì ìCC • • T T « « « « « QXX T T • •CC • • • • Á ÁnnÅÅ jÅ^^^^ ± ± ± Ø2222222 Ü Ü‰‰àà22 Ü Ü Ü Ü Ü6‰‰ ± ± ± ´´ë ë‘‘6‰‰ Ü Ü Ü Ü Ü Ü‰‰à:Bç‘6‘6 & &VV] ¨ } }**¬¬ ÿ ÿ ¨]'‚Üìû!À!ÀVÀ ©¡ G ô ô É Évv É ÉvvKKKKOOüü ® W²ÝÝ Õ Õ ‚ ‚ ‚ ‚ Ù Ù Ù Ù Ù Ù† , ® ® ® ®qq ÃÏß×|ó ˜ ˜ ˜ ï ²²++ ~ ~ ~Ø++­ R R R ¥ R RVVV ü R R­ R © © © © ü ü © © © ©Z­ R © © © © R R üV © ~Ø+…‰‰‰/\\\\\\\\²² X²²²º4*ô,NÅ—44‡‡88š¹@‹0gÁgg? å’’––C訨¨¨UU¨¨QQ ¤ ¤þþþþ¸¸¸¸aaãã>ã6666 eiii¼a¸¸¸¸ÃÃÃÃll·\\\XþQœË€ââ„Ï¿”” ç ç====ŸŸùùùùLLõõ££ùùTTff¸¸ä>>ä‘‘‘‘'ÌzzzzÌÌrrÅÅ----„„ Ö ÖXXXX T TÏÏ"" Ì Ì y ÷ ÷ J¤ ÷ ÷¤¤         J¤¤ J ÷ ÷ ÷ ÷    NN « « « « T T T T €Ú55Ú € € € Á Á ì ì ì ìCCCC T T « « « þ þ « « T T • • • • • • • • Á Á Á Á j j^^ ± ±  ^^ …à22à …22 Ü Ü Ü Ü … …22 / / /‰66 Ü Ü^^^^´´´´‘‘ä䉉‰‰ Ü Ü Ü Ü Ü6àà:à‰‰‰‰ Ô ÔVVV°°VØØØØ Ô Ô ÿ ÿ¬¬V°]]ÔÔÜ‘™¨ó> ±©O¡¡ ô ô É Évvvv##KKKK¡üOŲ²00 ‚ ‚ ‚ ‚ ‚ ‚ Ù Ù Ù Ù††††_ W W ®[[qqËË××ÏÏó ˜ ˜ ˜œ B ” ï²²²²…+++ ~Ø++­ R R R ¥ © üV R R © © © © ü üVV ©VV­­VVVVVV © ©++ ~3‘7Ü‚ ® ® ® ® ® \\``ºo¶L<44 Ú Ú‹‹@Oõ@ÞÞÁggg’’? å;–C訨¨¨¨¨ ú úQQ ¤ Iþþ«Q¸¸¸¸¼¼ãã666666¸¸¼¼aaaa e¸¸pÃÃ\§§þ£ööpp¿”” ç ç====ŸŸùùùùLLõõ££ùùùùff¸¸ä>䉑‘‘‘Ì'Ô‰‰ÔÌÌrrÅÅ----„„ Ö ÖXXXX T TÏÏ"" Ì Ì y ÷ ÷ J¤ ÷ ÷¤¤         J¤¤ J œ œ ÷ ÷    NN « « « « T T T T €ÚÚ € € €vv ì ì ì ìCCCC T T « « Q « þ þ « « T T • • • • • • • • Á Á Á Á j j^^ ± ±  ^^ …à22à …22 Ü Ü Ü Ü … …22‰‰ /‰66 Ü Ü^^¸¸´´´´66ä䉉‰‰ Ü Ü Ü Ü Ü Ü Üààà …‰‰‰‰ Ô ÔVV°  °22ØØ.. ÿ ÿ¬¬V°]]ÔÔÜ܉ää/±V©O¡¡ ô ô É Évvvv##KKKK¡ü©äzc ® W W00 ‚ ‚ ‚ ‚ ‚ ‚ Ù Ù Ù Ù††††_ W W ®[[qqËË""uuó ˜ ˜ ˜œ B ” ï W W²²…+++ ~Ø++­ R R R ¥ © üV R R © © © ©VVVV ©VV­­VVVVVV © ©++ØØ7ÜÜ‚ ® ® ® ® ® \\``ºº<<<â Ú Ú Ú Ú00‹åååÞÞÁggg’’? å;–C訨¨¨¨¨ ú úQQþ ¤þþQ ö¸¸¸¸¼¼ãã6666¸¸¼¼aaaa e¸¸pÃÃúú  úEòò¿¿¿¿Çlëë====ëëLL® ªP££õõõõõõõõbbbbàà•:#ؤ$Ã"»BÐvnnÅÅ„„„„---- T T T¯ « « « «yy Ì Ì u u""Q ÷ ÷ ÷NNNNNN        NN J J ÷ ÷ óNNN « «XX¯¯ )„11 Ö Ö Ö Örr Á Á Á ÁCCCC • •ð • « « « « T T þ þ « «¯ T ? ? ?™ • • è èÅÅnn Á Á Z Z … …222222222 Ø2222 Ü Ü /‰à …àà À¸  ^^ Ü Ü66 Ü Ü‰‰ Ü Ü‰ /‰ / / / … …22‰‰66ÛÛØØ**¬¬ZZ´Óyã...**** ÿ ÿ¬¬]''‚‚††††VVüüøøKK rÍÍ rÍÍ ô ô ô ô G¡ü ‚rc W W†† Ù Ù ‚ ‚ ‚ ( ‚ ‚ ‚ ‚ , , Ù Ù ® ®[[qËuuÇÇóóEEœ B ï ï//////‚‚ R R ¥VV © ©VVVV­ RZ R­­­ R R­­Z R­ Ô Ô Ô/ØØ…+ X X X²``‹‹ÞÞ Ú Ú Ú Ú‡‡4444‡‡gggggg;;;;??ìì«QQQQQQQ ú ú ú úQQQQ ] ]¸¼¼aa66ŒŒŒŒ ´iee¸¸¸¸¸ÆlpÊ  EEEEòò¿¿¿¿Çlëë====ëëLÍÝ££õõõõõõõõbbàà:•#(Ó3§4T%p…vnnr ½ÅÅ„„„„---- T T T¯ « « « «yy&& u u""Q ÷ ÷ ÷NNNNNN         ó ó J J ÷ ÷ óNNN « «XX¯¯ )„ Ö Ö Ö Ö Ö Örr Á Á Á ÁCCCCððð • « « « « T T þ þ « «¯ T ? ? ?™ • • è èÈ  Á Á Z Z … …222222 Ø22222 Ü Ü‰ / …àààfÐ}mff^^ Ü Ü66 Ü Ü‰‰66䉉 / / / … …22‰‰6666ØØ** R RZZÄ"M-!)ã..**** ÿ ÿ¬¬]¸ÜÜ‚‚++++VVüüøøKK rÍÍ rÍÍ ô ô ô ô G¡¡ü½c ® W W†† Ù Ù ‚ ‚ ‚ ( ‚ ‚ ‚ ‚ , , Ù Ù ® ®[[ quu""óóEEœ B ï ï Ô Ô////‚‚ R R ¥VV © ©VVVV­ RZ R­ R R R R­­Z R­ Ô Ô Ô/ØØ…+²² X²00ÞÞ Ú Ú Ú Ú‡‡ Ú Ú44‡‡gggggg;;;;??’’«QQQQQQQ ú ú ú úQQQQ ] ] ]¸aaaaŒŒŒŒee¸¸¸!ÆpEEEEëëëë¿¿¿¿¿¿¿¿ == ëëT(V+ ~PõHHHHõõH£bbbbbb:àààçÐà)€2ù2ù%pØÈnnr Ö Ö Ö Ö----¯¯ « « « « Ì Ì Ì Ì u u u u ÷ ÷ ÷ ÷        ûû             J J ÷ ÷  ûûûXX « «¯¯11„„ Ö Ö Ö ÖÅÅ jÅnnnÈððCCCCCC « « « « T T « «XX¯¯ T T ’ ’ ì ì • •ð •rÌ#È Áb´ Z Z Z … …àà … … … … … … … …22 … … /‰ Ü Ü22ààmœ#Y…Àf  ‰‰ Ü Ü66‰‰‰‰66‰‰ / /22 … … Ü Ü Ü66ÛØØ** ÿ ÿ¬&-Î5@2‹¿6Û****¬ R¬¬V°e*û7''~~~~üüüü¥KKK r r Å r r ô ô ô ô¡¡OO¶¶ ® W W†† Ù Ù ‚ ‚ ( ( ‚ ‚ ‚ ‚ Ù Ù†† ® ®[[ à Ãqq"ÇuuóóEEœœ ï ï‚‚‚‚Ü‚‚‚­­ ¥ R RVV © © © © R R R R­­­­Z­­­­­­ Ô Ô‚‚ØØØØ``² XÞÞÞÞ‡‡ Ú Ú‡‡ Ú444 Ú ÚgÁvv ¹ ¹ ¹;;;;??’’ ¤ ¤ ¤ ¤QQQQ ú ú¨ MQQQQ  ° a  ´>ã66ŒŒŒŒa¼aaaa¸¸ee¸¸¸lÆÆÆÊéëëëëëëëë¿¿ e e¿¿ e e ==ëëë뮾Ý!’ÉPõHHHHõõH£bbbbbb:ààà2vÐB "»œØÈnnr Ö Ö Ö Ö----¯¯ « « « « Ì Ì Ì ÌÏÏ u u ÷ ÷ œ œ                         J J ÷ ÷  ûûûXX « «¯¯ Ö Ö ) ) Ö Ö Ö Ö j j jÅnnÈ#¥ðCCCCCC « « « « T T « «XX¯¯ T T ì ì ì ì • •ð •r#È Á ­´ Z Z Z … … … … … … … … … … … … Ø Ø … …‰ / Ü Ü22àà"…Ðf   ‰‰6666‰‰‰‰ Ü Ü‰‰‰‰22 … … Ü Ü Ü6Û6ÛØØ** ÿ ÿ¬ê*l*l¯Û****¬ R¬¬V°À9 eì''~~~~üüüü¥KKK r r Å r r ô ô ô ô¡¡ ô ô[[ ® W W†† Ù Ù ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ Ù Ù†† ® ®[[ à Ãqq"ÇuuóóEE B B ï ï‚‚ÜÜÜ‚‚‚­­Z R RVV © © © © R R­­­­­­ZZZ­­­­ZZZZ­­ Ô Ô‚‚ØØØØ``² X``ÞÞÞÞ - - Ú Ú‡‡ Ú4 Ú Ú Ú ÚgÁvvn ¹ ¹;;;; å å’’ ¤ ¤þþQQQQ ú ú¨ MQQQQ   ea  ´ã ‰66ŒŒŒŒa¼aaaa¸¸  ¸¸¸lÆÆÆÊé==== ç ç””====”” ç ç””””˜˜==%Ú,www Æ Æ Æ ÆÊ p pÊ666‘::ä‰662ààrrÌÜ6ÌrCCð •CCX þ « «¯¯¯¯ §         ÷ ÷ ÷ ÷¤¤ œ œ ÷ ÷ ÷ ÷ Ì Ì Ì Ì""""         ÷ ÷ ÷ ÷---- Ö Ö„„¯¯ ì ’ ì ìC¥JCC • • • •-- € € € €-ˆ1 Ö Ö Ö Ö Ö Ö Ö • • • • èC è è • • • •CC • • V ±   Z Z ­ ± ^^ ± ±^^´´´´ Z Z Z Z´bb´´ää66àà‰‰‰‰ Ü Ü‰‰àà22 … … …àØØØØ¬¬¬¬]m×"6ÛÛ‰˜ä/zzzzzz''zzÍÍ ž ž ž ž G G ô ô   É É² W[[[[ ® ®ÝÝ000000 ® ® ® ®[[[[œœœœóóóóuuÇÇ m m m m²²3ïïä///­­­­ R­++++ ~ ~++++++++ ~ ~VV­­ZZZ R R © ©/‰‘‘33ØØ‚‚‚‚++Ø ~  ¶¶  \\0000‡‡ Ú4    ² \\\\\\\ ½½½½½½½;;;; Ž Ž;–) Ï|||| Ï Ï Ï Ï Ï Ï))||aaaa    6666 ß ß ß:ããããããããaa¼¼llÆ!Ê%==== ç ç””====”” ç ç””””====Ê%%%wwww Æ Æ Æ ÆÊ p pÊ666‘::ä‰662ààrrrÌÌÌÌrJðCCCCX þ « « T T¯¯ §         œ œ ÷ ÷ J J œ œ ÷ ÷ ÷ ÷ Ì Ì Ì Ì""""         ÷ ÷ ÷ ÷---- Ö Ö„„¯¯ ì ’ ì ìøÿ´´¥CC • • • •-- € € € €ˆâ1 Ö Ö Ö Ö Ö Ö Ö • • • •C è è è • • • •CC • • V ±   Z Z ­ ±^^ ± ±^^ Z Z´´ Z Z Z Z Z´´´´´ää6622àà‰‰‰‰66‰‰àà22 … … …àØØØØ¬¬¬¬]]]Û.‰ÔÔzzzzÔÔ‚‚zzÍÍ ž žøø¡¡ ô ô   É É² W[[[[ ® ®ÝÝ000000 ® ® ® ®[[[[œœœœóóóóuuÇÇÇÇÇÇ  3÷"x%-¨>//­­ R R R­ Ð Ð++ ~ ~++++ Ð Ð++ ~ ~VV © ©­­Z R R © ©‰ä° ¬BØ‚‚‚‚++ ~Ø  ¶¶cc¶¶0000‡‡ Ú4    ² ¶¶\\\\\ ½½½ c c½½;;;; Ž Ž;–) Ï|||| Ï Ï Ï Ï Ï Ï))||aaaa    6666 ß ß ß:ãããã ‰ ‰ããaaaalllÆÊp==== ç ç çAëë==”” ç ç”””” ==ÊÊwwwwww!!ssÊÊÊÊ Ü6‰ä:à66‰‰ …àrrrrCJðCC è è « « þX T T\¯¯         J J ÷ ÷ J J J J J J ÷ ÷ Ì Ì Ì Ì""""     óN J J J J € € € € ) ) )„ T T T T ì ì ?™ÿ­R¥JCC • • • • € €----Ú5 Ö Ö Ö Ö Ö Ö Ö Ö • • è è • • è è èC • •CC • • ± ± ± ± Z Z Z Z ± ± ± ±   ± ± Z Z Z´´´ Z´66662222‰‰‰ä6‘‘622 … … Ø Ø … …**** Ô Ô Ô Ô¬¬ ÿZ°°. Ô Ô Ô.... Ô Ô Ô Ô Ô ÔÍÍÍÍ''Ôä>‰'ÍÍÍ ž žKK ô ô ô ô É É É# ® ® ® ®[[ ‚ÝÝÝÝÝÝÝ[[[[ ®[[ ï ï ï ïEE ˜óÇÇ  :Ã0¯/Te‘Ü‚Z­­ ~ ~++ØØ ~ ~ ~ ~++++…… © © © ©­ R R üVV±7V*A1%-¤à…‚‚‚‚++ ~ض¶kÆc‹‹‹044‡‡\\\\²²²²¶¶ ® ®   j½½½½;;;;;; Žè|||||| Ï Ï Ï Ï Ï Ï) Ï Ï Ïaa    ãããã ß ßŒŒãã666 ‰ ‰aa ´ ´ ´ ´llÆÆ==== ç ç çA ==”” ç ç”””” ==ÊÊwwww Æ ÆssÊÊÊÊ Ü6‰ä:à22 Ü Ü‰‰ …àÅÅCð •CCCC « « þX T T §¯¯         J J ÷ ÷ J J J J¤¤ ÷ ÷ Ì Ì Ì Ì""""     óN J J J J € € € € ) ) )„¯¯ T T ì ì™ôZøð •CC • • • • € €----Ú € Ö Ö11 Ö Ö Ö Ö • •CC • • è èC è • •CC • • ± ± ± ± Z Z Z Z ± ± ± ±   ± ± Z Z Z´´´ Z´ Ü Ü662222‰>óN‘6‘622 … … Ø Ø … …**** Ô Ô Ô Ô¬¬Z ÿ ¨ ¨VV. Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô ÔÍÍÍÍ''‰¸)1!7'ÍÍ ž žKK ô ô ô ô É É É# ® ® ® ® ® ®[[ ‚ÝÝÝÝÝÝÝ[[[[ ®[[ ï ï ï ïEE ˜óÇDz²:¤#&'5°‘Ü‚Z R RØØ……ØØ ~ ~++++++ © © © ©­ R R R üVV±7V+›2`+òÿà…‚‚‚‚++ ~ض¶ÆŠ!OG(@‹‹0 Ú Ú‡‡\\\\²²²²\\ ®  ®  j c c½½;;;;;; Žè|||||| Ï Ï Ï Ï Ï Ï Ï) Ï Ï ´ ´aa    ãããã ß ßŒŒãã666 ‰ ‰aa ´ ´ ´ ´ÆÆllÃà ç ç”” ëë ==== ==ë ç ç ç çssssss!!ssssàà2222àà22àànnnnrrÅÅððCC ì ì ì 쯯XXXXXX¤¤ J J J J J J J J ÷ ÷NNNN" È u u""Ï uNNNNN ó ó ó ) ) Ö Ö Ö Ö Ö ÖXXXX • •CCø­ø ì ì ? ? è è • •---- Ö Ö Ö Ö---ˆ„„„„ ì ì™™ • •CC ì ì ? ? ì ì ì ì Z Z Z Z   ± ± ± ± ± Z Z Z´ ± ± ± ± ± ±^^ Z Z ± ^^ … …àà22226ëU°™ä66222222 … …**…**…ØØVV ¨ ¨ Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô } }…*vvvvzÔF,”3X)ß>Ô# É É É G G ô ô ô ô ô ôzÍ'z [[[ ® ® ® ®00ÝÝ Ù Ù†† W W B B B BEE ˜óqqqq à à à ò²3÷RB3…… © © © ü ü++…:óä// ~ ~++ ~ ~++ R R © ©VV © ©V±àï!¸óÜ‚ØØ…+ Ô Ô Ô Ô`ºgá,Ð3”1"©H8ÞÞ Ú Ú44  \\    \\  `½ c ¹ ¹gg å å å åèèèè Ï Ï|||||| Ï Ï||ÓÓÓÓ ] ]  aaaa::ŒŒã ‰6ãã66 Û6aaaa     ç ç”” ëë ==== ==ë ç ç ç çssssss!!ssssàà2222àà22àànnnnÅÅ • •CC ì ì ì 쯯XX þ þXX¤¤¤¤ J J J J J J ÷ ÷NNNN" È u u""Ï uNNNNN ó ó ó ) ) Ö Ö Ö Ö Ö ÖXXXX • •CCC ì ì ? ? è è • •---- Ö Ö Ö Ö-- Ó-„„ ) ) ì ì™™ • •CC ì ì ? ? ì ì ì ì Z Z Z Z ±fÀf  ± ± Z Z Z´ ± ± ± ± ± ±^^ Z Z ± ^^ … … … …222266‘ëää Ü Ü222222 … …**…**…ØØVV ¨ ¨ Ô Ô Ô Ô Ô Ô Ô Ô Ô Ô } }…*vvvvzÜV$u e>Ô# É É É G G ô ô ô ô ô ôzÍ'z [[[ ® ® ® ®00ÝÝ Ù Ù†† W WœœœœEE ˜óqqqq à à à ò²Ø3è3…… © © ©VV++……ä‰//ØØ++ ~ ~++ R R © ©VV © ©V±…à:•>äÜ‚ØØ+… Ô Ô Ô Ô`ºÂð3”7¤6÷-}ý8ÞÞ4444  ¶¶cc  \\  ` c½ ¹ ¹ å å å åèèèè Ï Ï|||||| Ï Ï||ÓÓÓÓ¸¸eeaaaa::ŒŒã ‰666ãã66 Û6aaaa     ¿ ¿ ç ç” 9==ë ==ëë ëëë == ç ç ç çss!!ÊÊwÎsssssss22àà2222àààààànnnn • • • • ? ? ìG¯¯XX þ þXX ÷ ÷¤¤ ÷ ÷ ÷ ÷ J J¤¤NN    Ï u""""}}N óNNNN ó ó Ö Ö„„„ ) Ö ÖXXXX¯¯ •ðððCC ì ì ? ? è è • • € € € € Ö Ö Ö Ö € € € €„„ ) ) ì ì™™ • •CC ì ì ì ’ ì ì ?™ Z Z ­^¸ ± ±   Z Z^^^^ ± ±^^ Z Z´´ ± ^^ … …22àààà Ü Ü6666 Ü Ü2222àà22 } }****ØØ ¨ ¨VVVVVV Ô Ô Ô Ô Ô Ô Ô Ô } } } }### É rÍ'7>ä/z É É É É ô ô¡¡ ô ô¡¡ÍÍÍÍ [[[ ® ® ® ®00ŠŠ Ù Ù Ù Ù²² W W W W Bœ ï ïEEEEqqqq à à à à W W ~3àà……VV © © ©ØØØØ////++++++ ~ ~ R R ü ü © © üV © ©ØØ…à‰‰‚‚+……… Ô Ô Ô Ô²²C/…4ï2ç$šåÞÞ⇇‡¶¶c¾kc   \\`½½½ cgg ¹ ¹’ 7 å å;;;; Ï Ï|||| Ï Ï " " Ï Ï&&&& eeeaaiA猌 ‰ ‰ ‰ã ‰ ‰66ãã ‰ ‰ ´aa¸¸ ] ] » h h ¿ ¿ ç çî”==ë ã ã ë == ç ç ç çss Æ ÆÊÊwÎsssssss22àà2222àà::àànnnn • • • • ? ? ìG¯¯XXXXXX ÷ ÷¤¤ ÷ ÷ ÷ ÷ J J J JNNûûÏ u""}}×רNNNNNNN Ö Ö„„„ ) Ö ÖXXXX¯¯\\ •ðððCC ì ì ? ? è è • • € € € € Ö Ö Ö Ö € € € €„„„„ ì ì™™ • •CC ì ì ì ’ ì ì ?™ Z Z ­^^¸^ ± ±   Z Z^^^^ ± ±^^´´´´ ± ^^ … …22àààà6666 Ü Ü Ü Ü2222àà22 } }**** } } ¨ ¨VVVVVV Ô Ô Ô Ô.. Ô Ô } } } } É É É# rÍÍ'/Ôzz## É É ô ô¡¡ ô ô G GÍÍÍÍ [[[ ® ® ® ®ŠŠŠŠ Ù Ù44²² W W W W Bœ ï ïEEEEqqqq à à à à W WØØ33…………VV © © © © © ~ ~ØØ// Ô Ô++++++ ~ ~ R R ü ü © © üV © ©ØØ+…//‚‚…+++ Ô Ô Ô Ô²²`oì& !OÕ@‹ÞÞ⇇‡¶¶Ý!OŠ   \\`½½½gg’ 7 å å;;;; Ï Ï||×× Ï Ï " " Ï Ï&&&& eeeaaix«œçç ‰ ‰ ‰ããã66 ‰ ‰ ‰ ‰ ´aa¸¸ ] ] » h h ¿ ¿((‚‚(( z z ¦ ¦ ø ø ¦ ¦ ¦ ¦ $ $ Ñ Ñ Ñ Ñ Ñ ÑõõHHLL ñL££õõ ›õõõ Z´´´  ^^‰‰66ää66™™G ì • •CC f f Á Á ½--ÚÚ55ˆ- « « « « « « «y  Ì Ì"""" u u u u""}}éŽ á<’8’’º _ g  ººXXXX T T € €--„„ Ö Önnvvv™ ? ? ? ? ? ì ìCCCCððCC • • • • ì ì ì ì j j n Á Á Á Á   j jÅÅ   ± ± Z Z ±^^ › › › › ñ ñ ñ ñŸŸ ñ ñ î îHHss Æ Æ Æ ÆssHHHHõõõõŸŸ DŸ ñ ñ ñ ñ Æ Æss Ô Ô Ô Ô****VVVV ¨ ¨ ¨ ¨——D é@@ “í g g gkk ¾vvvvvv##¥¥øøøøKK¡¡ ô ô ô ô ô ôvv É É mÇÇÇEEó󜜜œqq à à à Ãqqqqqqqqqq ï ï ï ïØØ…+‚‚//ØØ Ð+ØØ++VV © ©‚‚ '‚++Ø ~ll ¿ ¿ ¿ ¿   ê ê—— = = êE­­VVVV±V © © © ©VV‡‡éL¦ñ<  ²²²²``‹å_*1 *F[<4‡‡0000 å???;;èègggggg Ž Ž;;ìì’’ å å å åè Ž;;  Í(ww,–Wýý õ õ õ õ ž ž ž ž ž ž ž žwwwwww Ê ÊØ ~++‚‚(((((( z z ¦ ¦SS ¦ ¦ ¦ ¦~~ Ñ Ñ Ñ Ñ Ñ ÑõõHHLLL ñHH › › ›õ › › Z´´´  ^^‰‰66‰‰66™™G ì • •CC Á Á Á Á ½--ÚÚêŸòâ « « « « «y  Ì Ì"" È È u u u u""""Žé–ñí’88º _ g  ººXXXX T T € €--„„ Ö Önnvvv™ ? ? ? ? ? ì ìCCCCððCC • • • • ì ì ì ì j j n Á Á Á Á   j j j j^^ ± ± Z Z ±^^ › › › › ñ ñ ñ ñŸŸ ñ ñHHHHss Æ Æ Æ Æss££HH › › › ›ŸŸ DŸ ñ ñ ñ ñ Æ Æss Ô Ô Ô Ô****VVVV ¨ ¨ ¨ ¨——žD@@ “í g g gkk ¾vvvvvv##¥¥øøøøKK¡¡ ô ô ô ô ô ô   É ÉÇ"ÇÇEE ˜ ˜œœœœqqqqqqqqqqqq ï ï ï ïØØ…+‚‚ Ô ÔØØ+ Ð ~ ~++ ü ü © ©‚‚ '‚++Ø ~ll ¿ ¿ll ê ê————E ê­­VVVVV ü © © © ©VV‡‡ Ú4â<ââ²²²²²²``‹ån1a6u2ek—4‡‡0000 å? å å;;èègggggg Ž Ž;;’’ 7 7 å å å åè Ž;;  sÍwwц²Wýý õ õ õ õ ž ž ž ž ž ž ž žwwwwww Ê ÊØ ~++‚‚ z z z zÕ z zSSSS ¦ ¦ ¦ ¦ Ñ Ñ Ñ Ñ Ñ Ñ Ñ ÑHHõ ›LL ñ ñHHHHHHHHbb¸¸¸^ Ü Ü Ü6‰‰‰‰™™G ìCCððnn Á ÁÅÅ--Ú5T!Í\=³XXX « «XXyy& Ì"" u u u u u u u u""<<øb¢’’8º _ _ _ºº g` T T € €--„„ Ö ÖnnnnÈÈ ì ì ? ? ? ? ? ? •ðð •CC • • • • • • ì ì ì ì j j Á Á Á Á Á Á  ¹ ½ ½ j j^^ ± Z Z Z´^ ^^ Z Z Z Z › › › › ñ ñ ñ ñŸŸ ñ ñ › ›HH Æ ÆssssÎΣHHHHH î î ñ ñ DŸ ñ ñŸŸ   Æ ÆÊÊØØØØVVVVVV é éDD@@@@ g g ¾ ¾kkvvvvvvÑvKKøøøøSSOOO ôO ô ô ô r r É É  EE ˜ ˜œœœœqqqqqqqqqqqq Ãqq ï ï ï ïØØØØ Ô Ô‚ 'Ø ~ ~ ~ ~ ~ ~ØVVVV‚‚ Ô Ô++++lllllÆ—— ê ê êE ê ­­VVVV © © © © üV ©‡‡‡‡â⇇²²`  Þ“W$†,N*ôé44 Ú ÚÞÞÞÞ’’’’ Ž Žè ŽggÁggg;;èè’’ å å’’’’ Ž Ž ŽèÍÍÍ s Ê ÊÑÑýý¢¢ õ õ õ õ ñKùù ž žù ž Ê$wwww Ê Ê ~ ~++‚‚ z zÕÕÕ z zÕSSSS ¦ ¦ ¦ ¦ Ñ Ñ Ñ Ñ Ñ Ñ Ñ ÑHHPõ ñ ñ ñ ñHH£££ îHH^^^  Ü Ü Ü6‰‰‰‰™™ ìGCCððnn Á ÁÅňˆÚ5DT§=³XXX « «XXyy& Ì"" u u u u u u u u"" á áCøí’’8º _ _ _ _ _ g « T T € €--„„ Ö Önnnnnn ì ì ? ? ? ?™™ •ðð •CC • • • • • • ì ì ì ì j j Á Á Á Á Á Án ÅÅ^^ ± Z Z Z´^    Z Z Z Z › › › › ñ ñ ñ ñŸŸ ñ ñ › ›HH Æ Æssssss£HHHHH î î ñ ñ ê D ñ ñ D D   Æ Æ p pØØØØVVVVVV ¨ ¨ é é é é@@@@ g g ¾ ¾  vvvvvvvÑKKøøøø­^©O ô ô š ô ôÍÍ É ÉvvEEó󜜜œqqqqqqqqqqqq Ãqq ï ï ï ïØØØØ Ô Ô‚ 'Ø ~ØØØØØ ~VVVV‚‚ Ô Ô++++lllllÆ—— ê ê êEE ê­­VVVV © © üV ©‡‡‡‡‡‡‡‡²²`gg88“¢[kSé44 Ú ÚÞÞÞÞ’’’’ Ž Ž ŽèÁÁÉÉÁggg;;èè’’??’’’’èè ŽèÍÍÍ s Ê Êww¢¢¢¢ õ õ õ õ ñKùùùùù ž$ Êwwww Ê ÊØØ++ ' '(((( z z((ªª ü ü ¦ ¦SS z z zÕ~~~~Ÿ DŸŸH£HHõõ£HHHõõ´´ ± ^^22 … …2222 ì ì™™ ì ì ì ì Á Á nrÚÚˆˆâ==ˆ\ T T¯¯Ï*ÏÏ Ì Ì Ì Ì"""" u u"" á á<<@ ‹ ‹å    _ _  XXXX « « « «---- Ö Ö Ö ÖnnrÅÅð • • • • • •ð • •CC ì ì ì ì ì ì ì ìCCðð j j n   j j j jÅÅ ± ± ± ± ± ± ±^^ ± ± ± ±   D D D D D D ñ ñHHHH ñ ñ ñ ñ › ›õõõ › î î î î îH D D — —  p   p p p pØØ…ß…… ÿ ÿ¬¬ ÿ ÿ R R < < < < “ “ “ “ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ É ÉvvvvvvKKøøøøµÔn¡¡ G G ô ô ÅÍÍÍÍ m mÇÇqqqq mÇÇ m ˜ ˜EEóóEE m m ÀuÇ mqqqqqqqqqqqq à à ï +…ØØ++ØØ+ Ð ~Ø//‰ Ô R RVVVV++++ Ð ÐØØllpÊÒxò— ê ê ê ê— =­­­ R R RZ‡ - Ú Ú00ÞÞ\\\\¶ÆÕ åå88—LD4Þ ƒ ƒ ƒ0000;;;;’’ å?gvèn ¹ ¹ ¹ å å’ 7 Žè––’’’’’’ å å$$ww  ÍÍù ž ñK¢¢ õ õ õ õ¢¢ùùKKww Ê Ê    ØØ ~Ø Ô Ô(((( z z(( O O ü üSS z z zÕ~~~~Ÿ D D DH£HHõõ£HHHõõ´´ ± ^^22 … …2222 ì ì™™ ì ì ì ì Á Á nrÚÚˆˆ=—=ˆ\ T T¯¯Ï*ÏÏ&& Ì Ì""""ÏÏ"" á á á á ‹ ‹ ‹å    ºº  XXXX « « « «---- Ö Ö Ö ÖnnrÅÅð • • • • • •ð • •CC ì ì ì ì ì ì ì ìCCðð j j ½ ½ n   j j j jÅÅ ± ± ± ± ± ± ±   ± ± ± ±   D D D D D D ñ ñHHHH ñ ñ ñ ñõõõõõ › î î î î îH D D — —  p   p p p p22ßïQ:… ÿ ÿ¬¬ ÿ ÿ R R < < < < “ “ “ “ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ É ÉvvvvvvKKøøøø¥ZO¡¡¡¡ ô ôzÍÍÍÍ m mÇÇqqqq mÇÇ m ˜ ˜EEóóEE m mÇ mqqqqqqqqqqqq à à ï +…ØØ++ØØ…+ ~Ø////­­VVVV++++++ØØllp<-ò— ê ê ê ê =—­­­ R R RZ‡ - Ú Ú00ÞÞ\\\\Õ!O0åå88ââ4Þ ƒ ƒ ƒ0000;;;;’’ å?gv3É ¹ ¹ å å’ 7 Žè;;’’’’’’ å å Ê Êww  ÍÍù ž ñK¢¢ õ õ õ õ¢¢ùùKKww Ê Ê{{  ØØØ ~//ÕÕ(( z z z z ü ü ü üSSSS(( z z++++ ñ ñ D DõP › ›HHHH££õõ´´bb^^^^22 … …2 … … ì ì™™ ì ì ì ìn  Á Á-ˆˆ= s§â\¯ 2Œ2×&&yy""""ÏÏ""Ž 4 4 48888ººg     « « « « þ þ « «---- Ö Ö Ö Önn Á Á • •CC • •CCCCCC ì ì ì ì ì ì ì ìCCCC j j j j Á Á   j j^ ^^   ± ± ± ± ± ±^    D D D D ñ ñ D D › › › › ñL ñ ñÊÊÊÊ pÊõP£H › › › › › ›HHŸŸŸ D p p p p p p p p……»-L'â¤ß¬¬ZZ¬¬ R R é < < “ “@@ ¾kk ¾ ¾ ¾ ¾ É É##vvvv ž žKKøøøøü¡ü¡O ô ô ôzÔzzÍÍqqqq m mEE ˜ ˜ ˜ ˜EEÇÇ mÇqq à ÃqËqqqqqqqq à à ï  ~ ~++++ØØ++++ Ô/‚‚ZZ üV^++++++ØØllp%Ê———— ê ê ê ê­­­­­­ZZ­ RZ Ú Ú‡‡ÞÞ00 ® ® ® ®c(s“8‹‹‡‡4400 ƒ ƒ0000;;;;’’’’gÁgg’’’’;;èè å å å å’’ å åwwww   {ù ž ž ž õ õ õO¢¢OOKKK ñww Ê ÊÍÍ  ++ Ð Ð Ô Ô z z((ÕÕ z z ü ü ü üSSSS(( z z Ñ Ñ Ñ Ñ ñ ñŸŸPõ › ›HHHH££õõ´´bb^^^^22 … …2 … … ì ì™™ ì ì ì ìn  Á Á ½ ½-ˆˆ=)ìk=\ «»«ç&&yy"""" u u""Ž 4 4 48888ººg     « « « «XX « «---- Ö Ö Ö Önn Á Á • •CC • •CCCC è è ì ì ì ì ì ì ì ìCC è è j j j j Á Á   j j^ ^^^^ ± ± ± ± ± ±^    D D D D ñ ñ D D › › › › ñLLLÊÊÊÊ pÊõP£H › › › › › ›HHŸŸŸ D p p p p p p p p……ç+ñ)<Y߬¬ZZ R R R R éD——íí@@ ¾kk ¾ ¾ ¾ ¾ É É É Évvvv ž žKKøøøøü¡¡üO ôOOÔ/ÔzzÍÍqqqqÇÇEE ˜ ˜ ˜ ˜EEÇÇ mÇqq à ÃqËËËqqqqqq à à ï ïœœØØ++++ØØ++++ Ô/‚‚ZZ üV ©++++++ ~ ~ ¿ ¿ÆÆpppp———— ê ê ê ê­­­­­­ZZ­Z44‡‡ÞÞ00 ® ® ® ®  cc8Þ‹‹‡‡ Ú Ú00 ƒ ƒ0000;;;;’’’’ ggggg’’’’;;èè å å å å’’ å åwwww{{{Õù ž ž ž õ õO õ¢¢OO¦¦¦Kww Ê ÊÍÍ  ++++ Ô ÔSS ¦ ü ü ü ü ¦ ¦ ¦ ¦ ü üª OSSSSSS ¦ ¦HHõõHH › ›ÊÊwwÊÊ  ^^´´´´ ± ^^bÅ j j j j j Á Á Á Á--ˆâ£Xõ‹ ¯XX»*º2Ù)`ÇUû    ¤¤ ÷ ÷ ÷ ÷ ÷ ÷ ¶ ¶ ¶ ¶cccc8888ŽŽŽŽ € € € € € € € € Ö Ö Ö Ö Ö Ö Ö Ö Á Á Á Ánn Á Á ì ì ì ì • •ððÅ j Á Ánn • • • •CC è è Á Á Á Á ½ ½ j j™™ ì ì ’ ì™™ ± ± ± ± ± ± ± Ü Ü Ü Ü … … Ø Ø p p Æ Æ Æ Æ Æ!Ö0ý£PõŸŸŸŸÎsss Æ Æ Æ Æ ñ ñ ñ ñ ñ ñ ñ ñHH › › ñ ñ ñ ñ**2BMMëÛ ¨ ¨ ¨VVÂÂÂÂÆÆkk ô ô¡¡ ô ô ô ôvvvvvv É#øøøSKKøSè†Ñvvvvqqqqq xqqËqqqÇÇqq à à à à à à à à Üœ B BIIIIœœœœEEóóqq// Ô Ô++++ ~ ~……++++±V © ©VVVVVVVV © © üV “ “îî›A “î————AA “ “VV © ©VV © ©VV © © ©V±00ÞÞÞÞÞÞ ® ® \² ``‡‡‡‡ÞÞ0‹‡‡‡‡00 ƒ ƒ å å å å’’’’èèèè’’’’jj½½ ¹ ¹gg½½ ñKùùOO¢ýwwww  { Ê$wwwwww    Í s{  ©VV­­SS ¦ ü ü ü ü ¦ ¦ ¦ ¦ ü üª OSSSSSS ¦ ¦HH › ›HHõõwwÊÊwwÊÊ  ^^´´´´ ± ¸¸bÅ jÅÅ j j Á Á Á Á---ˆ99‹‹ ¯XX`p%P0$)`ÇUû     J J ÷ ÷ ÷ ÷ ÷ ÷ ¶ ¶ ¶ ¶cccc8888ŽŽŽŽ € € € € € € € € Ö Ö Ö Ö Ö Ö Ö Ö Á Á Á Ánn ì ì ì ì • •ððÅ j Á Ánn • • • •CCCC Á Á Á Á j j™™ ì ì ’ ì ? ? ± ± ± ± ± ± ± Ü Ü Ü Ü … … Ø Ø p p Æ Æ Æ Æ!{@wýPõŸŸŸŸÎsss Æ Æ Æ Æ ñ ñ ñ ñ ñ ñ ñ ñHH › › ñ ñ ñ ñ**Ø2‰‰Û ¨ ¨ ¨VV ՃΠk ô ô G G ô ô ô ôvvvvvv É# ž žøSKKøS3†ÑvvvvqqqqËqxxxqqËqqqÇÇqq à à à à à à à à Üœ B B ï ï ï œœEEóóqq// Ô Ô++++ ~ ~++++++±V © ©VVVVVVVV © ©V±îîîî›A “î————AAîîVV © ©VV © © ü ü © © ©V±00ÞÞÞÞÞÞ ® ® \² ``‡‡‡‡Þދ凇‡‡00 ƒ ƒ å å å å’’’’èèèè’’’’½½ ¹ ¹gg c c ñK ž ž õ õ H¢wwww  { Ê$wwwwww    Í s{  © ü ü­­ ¦ ¦ ¦ ¦ ü ü ü ü ¦ ¦ ¦ ¦ ü ü ü üSSSSSS ¦ ¦ ›õHHHH ›õÊÊÊÊ%ÊÊÊ^¸^^´´^¸m"i´ÅÅrrr j j   Á ÁÚÚ-ˆÞÞÞÞ\\ « «³hÏ “„ +UûNN ÷ ÷ ÷ ÷¤¤¤ J ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶8888 á á á á---- € € € € ) ) ) ) Ö Ö Ö Ö Á Á Á ÁnnÈ#Nô™™CC • •Å j Á Á Á Á • • • • èCCC Á Á Á ÁÅÅ ì ì ì ì ? ? ì ì^^ ± ± ± ±^^ Ü Ü‰‰22 Ø2  p p Æ Æ Æ Æ!‹"Á-•"–²£H ñ ñ ñ ñÎs Æ Æ Æ Æs  D D D D ñ ñ ñ ñHH › › ñ ñ ñ ñ } }ØØÛÛVV ¨ ¨VV ûVÂoosÎ’" $š( º ô ô š ô ô ô¡ GvÑ## É É É ÉKKøøKKKK#~ÑÑ# É## à ÃË&xqqqqÇÇqq à à à à à Ãqq ï ï ï ï ï œœœœóóEEqËqq‚‚‚‚++++ ~ ~ ~ ~++Ø ~VVVVVVVV © © ©±±HH›Aî “AA————AAîîVV © © © ©VV © ©VVVV008ÞÞÞ00\\\\²²²²44 Ú Ú00‹‹‡‡ Ú Ú ƒ ƒ ƒ ƒ 7 7 å å??’’;;;;’ì’’Ággg c c ž ž ž ž H H š õ$$ww  { Êww Ê$$ Ê    Í s {VV © ©­­ ¦ ¦ ¦ ¦ ü ü ü ü ¦ ¦ ¦ ¦ ü ü ü üSSSSSS ¦ ¦ ›õHHHH ›õÊÊÊÊ%ÊÊÊ^¸^^´´bb¸×AÓibbÅÅrrr j jnn Á Á € € Ó-„„„„\\ « «³³U°°Uû  NN ÷ ÷ ÷ ÷ÿ´ÿ¤ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶88’ Ý á á á á---- € € € € ) ) ) ) Ö Ö Ö Ö Á Á Á ÁnnÈØN™™CCððÅ j Á Á • • • • èCCC Á Á Á Á j j ì ìGG ? ? ì ì^^ ± ±  ^^66ä /22 Ø2 ÂÊÊ Æ Æ Æ Æ!ÖG±w²£H ñ ñ ñ ñ s Æ Æ Æ Æs  D D D D ñ ñ ñ ñHH › › ñ ñ ñ ñ } }ØØVV ¨ ¨VV ûVÂ$$Î(" 3¤5¬.çGÎo ô ô ôO ô ô¡ GvÑ######¥¥øøKKKK#~vv# É É É Ã Ã q à   à à  ÇÇqq à à à à à Ãqq ï ï ï ï ï ï B BœœœœóóEEËqqq‚‚‚‚++++ØØØØ++Ø ~ © ©VVVVVVVV^Àu Xö›HîAA————AAHHVV © © © ©VV © © © ©VVVV00Þ ƒ ƒ ƒ00\\\\²²²²44 Ú Ú0000 - - Ú Ú ƒ ƒÞÞ’’ å å å å’’;;;; 7’’’gÁgg½½ùù ž ž¢¢ õO Ê Êww   { Ê Êww Ê$$ Ê    Í s {VV © ©­­ª O O O ü ü ü üS ø ¦ ¦ ø ø ¦ ¦S ø ¦ ¦ ¦ ¦ ¦ ¦HHHH › › ›õÎÎÎÎ(sssbb´´bbÄyf   Ánnnnnn Á ÁÅÅ € €-- Ö Ö11\\¯¯QQQQ ÷ ÷ ÷ ÷NNNN¬aÿ¤cc ¶ ¶ ¶ ¶ ¶ ¶ ‹@G8 á á á á„„„„ € € € € Ö Ö Ö1-- € € n Á Ánnv+©ôG ì • •ðJr Á Á Á Á è è • • • •CC   Á Á Á Á Á Á ? ?G ì • •CC^  ± ±´´2à … Ü Ü Ü Ü p pssss Æ Æ Æ Æ!{ÝÝXýHH › › î î Æ Æ Æ Æ p p p pHH î î D DŸŸŸŸ ñ ñ ñ ñ D D & & Ô Ô**ØØ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿw4醆$j3M5¬-’Î ¾kk¡¡ ô ô žøø žvÑ#~~~ÑÑSSøøKKKKzÍÍ r r r rqË à Ãqqqqqqqqqqqqqq à à ˜ ˜ ˜ ˜ ï ï ï ïEEEEœœ ïIu‚‚‚‚++++/// Ô Ô Ô‚ '­­­­VV^¹2&&žÊýH›AAA ê ê ê ê—òúŸ±VVV R­ R­ Ú Ú‡‡ Ú Ú Ú Ú\\ ® ®\\\\ÞÞ00 Ú Ú Ú Ú‡ - Ú Ú ƒ ƒ‹‹;;;;;;;;’ì å å’ 7 å å c½½½½½½½gggggggg¢¢ õ õ¢¢¢¢  { Ê Ê Ê Ê s s  ÍÍÍÍww w  ÍÍVVVVZª O O O ü ü ü üS ø ¦ ¦ ø ø ¦ ¦S ø ¦ ¦ ¦ ¦ ¦ ¦HHHH › › ›õssÎÎÎÎss´´´´     Ánnnnnn Á ÁÅÅÚÚ-- Ö Ö Ö Ö § §¯¯ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷NNNNQQ¤ Jcc ¶ ¶ ¶ ¶ ‹ ‹8 Ý á á á á„„„„ € € € € Ö Ö Ö1-- € € n Á ÁnnôôG ì • • •ðr Á Á Á Á è è • •ððCC   Á Á Á Á Á Á ? ? ìG • •CC^  ± ±´´ç:à Ü Ü Ü Ü p pssss Æ Æ Æ Æ Æ!ÎΣHHH › › î î!! Æ Æ p p p pHH î î D DŸŸŸŸ ñ ñ ñ ñ D D & & Ô Ô** } } ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÂÙC;Ñ,¥"¹ ƒs ¾  ¡¡ ô ôøSSøvÑØ3èèà+SSøøKKKKzÍÍ r r r rqË à Ãqqqqqqqqqqqqqq à à ˜ ˜ ˜ ˜ ï ï ï ïEEEEœœ ïIu‚‚‚‚++++ Ô Ô Ô z Ô Ô‚ '­­­­VV^#+p6D5*­ £›AAA ê êEE—§¾ ±VVZZ­ R R­ Ú Ú‡‡ Ú Ú Ú Ú\\ ® ®\\\\ÞÞ00 Ú Ú Ú Ú‡ - Ú Ú ƒ ƒ00;;;;;;;; 7’ å å’ 7 å å c½½½½½gggggggg¢¢ õ õ¢¢¢¢  { Ê Ê Ê Ê s s  ÍÍ s swwwÑ  ÍÍVVVVZ ü ¢ ¢ ¢ ü ü ü ü ¦ ¦ ¦ ¦ ø ø ø ø ¦ ¦ ¦ ¦ ¦ ¦ ¦õõ£H › ›HH!!ÎÎ!!ss´´bb´´´´´´´´  ¸¸ Á Á Á Ánnnn j jÅň--- Ö1 Ö Ö T T § §¯¯ ÷ ÷ ÷ ÷ J J J JNN    ¤¤ ÷ ÷ ¶ ¶ ¶ ¶ ¶ ¶ c Ý Ý ‹ ‹ á á á á„„„„ € €-- Ö Ö„„-- € €     Á ÁnnGG ?™ • • • • j j     • •ð •CC • •nn Á Á Á Á Á Á ? ? ì ìCC • • ± ± ± ±´´ç /‰‰ / pÊÊÊss! Æ Æ Æ Æ ÆssssõõH î › ›HH!! Æ Æ p p p p › › › › ñ ñ ñ ñLL ñ ñ D D ñ ñ Ô Ô & & } } } } ÿ ÿ R R¬¬ ÿZoÊÊw,0Õs ¾ ¾ ¾ G¡ ô ô¥¥KKÑ+è¬"Ä"Äÿ•­SøøKK ð ð rÍqq m mqq à Ãqqqq à Ãqqqqqq à à ëEE ë ïIœœóó ˜óœœ ïIuuÇÇ‚‚‚‚++++ Ô Ô‚‚ Ô Ô‚‚­­­­ ¥VV¹#*4ê5*­²H›AAA——ò—ò"å ¹VV­­­­­­ Ú Ú‡â‡‡‡‡¶  T ®\\\\ÞÞ ƒ ƒ‡‡‡‡ Ú Ú Ú Ú ƒ ƒÞÞ;;;; Žè;;’’ å å’’’’Åjjjjjjgggggggg¢ H H H¢ H õ õ  ÍÍ   Ê Ê s s  ÍÍ  Ê Êww    © © © ©­­ ü ¢ ¢ ¢ ü ü ü ü ¦ ¦ ¦ ¦ ø øSS ¦ ¦ ¦ ¦ ¦ ¦[õõ£H › ›HH!!ÎÎ!!Îδ´bb´´´´´´´´ ± ±¸¸ Á Á Á ÁnnnnÅÅÅÅ- Ó-- Ö1 Ö Ö T T¯¯ ÷ ÷ ÷ ÷ J J J JNNûû¤¤ ÷ ÷ ¶ ¶ ¶ ¶ ¶ ¶ c Ý Ý ‹ ‹ á á á á ) ) ) ) € €ˆˆ Ö Ö„„-- € €     Á Ánn ì ì ?™ • • • • j j     • •ð • è è • •nn Á Á Á Á Á Á™™ ì ìCC • • ± ± ± ±´´222 /‰‰ / pÊÊÊss! Æ Æ Æ Æ Æssss › ›H î › ›HH Æ Æ Æ Æ p p p p › › › › ñ ñ ñ ñ ñ ñ ñ ñ D D ñ ñ Ô Ô & & } } } } ÿ ÿ¬¬¬¬Z ÿooooo Æs ¾ ¾ ¾ G¡OO¥¥KKÑà¬.E5·5·1§$øøKK ð ð rÍqq à ÃÇÇqqqqqq à Ãqqqq Ë Ã ÃE  EI óóóMœœI ïuuÇÇ‚‚‚‚++++ Ô Ô‚‚//‚‚­­­­ZVV^2 œ#éÊýH›AAA———òòL§¹ ü ü­­­­­­ Ú Ú -‡‡‡‡‡\\ ® \\\\ÞÞÞÞ‡‡‡‡ Ú Ú Ú Ú ƒ ƒÞÞ;;;;è Ž;;’’ å å’’’’jjjjjjjjgggggggg¢ H H H¢ H õ õ  ÍÍww Ê Ê s s  ÍÍ  Ê Ê  {{  © © © ©­­ ¦ ¦ ¦ ¦ ü ü O O ç ç ç ç == e e e e¿¿llsssssÎ{!ùùLLLLL¦çàààà    ´´bb££õõ££ýý%%ÊÊ p  / / / /2222 ^^^ ›õ › ›L ñ D DHH › ›ŸŸ ñ ñ D D D D › › @ › p p   p p « « « « « «XX « «XX « « þ þ f Á Á Á j j j j j j j j Á Á n ÷ ÷ ÷ ÷¤ J J J u u u u u u È" ÷ ÷ ÷ ÷ J J J¤¤ J ÷ ÷ ÷ ÷ J J e eii”” 9 9 ç ç””ii » » » »ii Z Z Z Z Z Z ± ± ± ± Z Z ­ ­ / / … … … … ^ ± ± W W W W   ® ®²²² W mÇÇÇÇÇ à à À W²² __² ~+7M8Q8Q6ö*Èlú  ï ï ï ” t t||Ò x%% x xÒÒ%%%%||||%%%%PPPP§§ Ÿ Ÿ ä ä‘‘è ;;jj¼¼ffX º«))|||| Ï Ï M¨¨¨þþ ¤þ å å å å;;;;’’’’–ðøøYJJ ™ ™F¡JJ¡F ™ ™ ï ï ï ïóóóóJ ï B    aaa  ´ ´a  ´aaãã666666 ´ ´    ŒŒŒ 26666ŒŒ ß:::ŒŒ¸¸ee¼¼¸¸ e    u nÈÈÈ Ä Äqq nÈ\\\\\\ ® ® Ú Ú - -‡â4 Ú;;;;’’ ¦ ¦WWªª ç ç ç ç == e e e e¿¿llsssssÎ{!ùùLLLLL¦çàààà ± ±  ´´££õõ££XÂùé%Ê p  / / / / Ø Ø22¸^^^ ›õ › ›L ñŸŸHH › › D D ñ ñ D D D D › › ›õ p p   p p « « « « « « þ þ « «XX « « þ þ f Á Á Á j j j j j j j j Á Á n ÷ ÷ ÷ ÷¤ J J J u u u u u u È" ÷ ÷ ÷ ÷ J J J¤¤ J ÷ ÷ ÷ ÷ J J e eii » »”” 9 9 ç ç””ii » » » »ii Z Z Z Z Z Z ± ± ± ± Z Z ­ ­ / / … … … … ^   W W W W[[__²²² W mÇÇÇÇÇ Ã Ã Ã Ãu W²² __² ~(i7M6ö6ö6ö02!ú III ï Î Î||Ò x%% x xÒÒ%%%%||||%%%%PPPP§§ Ÿ Ÿ ä ä‘‘è ;;jj¼¼ffX `))|||| Ï Ï M¨¨¨ ¤ ¤ ¤þ å å??;;;;’’’’–ðCC¤¤JJóó ìFJJ¡F ™ ™ ï ï ï ïóóóóJ ï B    aa¼a ´ ´a  ´aaãã6666 ´ ´    ŒŒŒ 26666ŒŒ ß:::ŒŒ¸¸ee¼¼¸¸e     u nÈÈÈ Ä Äqq nÈ\\\\\\ ® ® Ú Ú - -‡â4 Ú;;;;’’ ø ø ¦ªª ç ç””== e e¿¿llssssÎÎ!!LLL¦L¦ùTçç::  ^^HHõõõªÑ,/F!½Ú%ÊÊ / / Ü … …22 ±^^ › ›HHLLŸŸHH › › ñ ñ ñ ñ ñ ñ ñ ñ › › › ›  Â p p þX « « þ þ þ þ þ þ « « þ þ « «     j j ½  j     ÷ ÷ ÷ ÷ J J ÷ ÷ u u u u u u u u ÷ ÷¤ J J J ÷ ÷Q ÷ J¤ ÷ ÷ J J e e ·   » » ç ç ç ç””AA » » » iii ­ ­ Z Z^^^^ ­‰‰ Ü Ü2222 ± ±   W W ® ®¶g __ m mqqqq²²__²²² gv J/.5œ5œ1Œ"©·¨óóIIœœ m m À m m||||%%%% x x%%%%%% Î)||ÒÒÒÒPPPP ú ú L L ä ä‘‘••èè¼¼jjff ¹ýýXý|| Ï Ï Ï Ï " "¨¨ ú ú ¤ ¤ öQ’ 7’ìCèCè’’ å åèèèèJJFFFF÷÷FFFF ï ï BFFFF ï ï B B    ´ ´ ´ ´ ´ ´a¼¼a ‰ ‰66ãã66aaaa¸ ]  ß ßŒŒãã66ŒŒŒŒŒŒ::eeeÀü¼¸¸¸¸    ÈÈÈÈÈ n Ä Ä Ä Ä n n\\ ® \\ ® ® Ú Ú - -‡‡ Ú Ú Žè;;’’SS ¦ªªªªAA””== ¿¿¿¿llssssÎÎ!!LLL¦L¦ùTçç::  ^^HHõõPÑ.Ä3V(‚%ÊÊ / / Ü … …22 ±^^ › ›HHLTŸHH › › ñ ñ ñ ñ ñ ñ ñ ñ › › › › p p þX « « þ þ þ þ þ þ « « þ þ « «nn   j j ½  j     ÷ ÷ ÷ ÷ J J ÷ ÷ u u u u u u u u ÷ ÷¤ J J J ÷ ÷Q ÷¤ÿ ÷ ÷ J J e elii » » ç ç ç ç””AAllll » » » iii Z Z ­ ­^^^^ ­‰‰ Ü Ü2222 ± ± ± ±²²k/;+_ÇÇ  qq²²²² W² gv;$&¸$Õ¨MóóIIœœ m m ÀÇÇ||||%%%%ÒÒ%%%%%% Î)||ÒÒÒÒPPPP ú ú L L ä ä‘‘;;èè¼¼jjffnýýý £|| Ï Ï Ï Ï " "¨¨ ú ú ¤ ¤ öQ’ 7 7’èCCè’’??èèèèJJFFFFFFFF ï ï BFFFF ï ï B B    ´ ´ ´ ´ ´ ´a¼¼a ‰ ‰66ãã66    ¸ ]  ß ßŒŒã㌌ŒŒŒŒ::eeÀψ-q¼¸¸¸¸    ÈÈÈÈÈ n Ä ÄÈÈ\\ ® \\ ® ® Ú Ú - -‡‡ Ú Ú Žè;; 7 7 ü ü O O ¦ ¦S­””îî ç ç””¿¿¿¿lllwwÊÊwwLL¦¦ýýýý>>‘‘ä䉉  ± ±    › ›HHLŠ%vW0{w  Â22 Ø Ø … … …à´´ ± ± ± ± — ñ D D ›PõõH î › › D D D D îH › › › › › ›ÊÊ Æ Æ Æ ÆX þ þ þ þ þ þ þ « « « « « «     ½ ½ j j j jÅ j Á Á  NN     F FN ó Ì Ìy  q ÌyyûûNN ÷ ÷ ÷ ÷¤ÿ¬û       » »ii e e==ë ””AœÏÏt¿l e e¿¿ii » »^^ ± ± Z Z´´´´^^ ± ±22 … …‰‰ /‰´´ Z Z[[[[² #&a-}&¸'c²²""u m m à Ãqq[[[¶[[[[  nnц#¤¤IIóóEE à à à à à à à Ã%%%%)) !|Ö|||%%%%ÒÒ x x))||PPý £ £ £ öP ä ä‘‘ ä ä‘‘ffff¼¼¼¼P«ý £&&Ó x x x&&QQ ¤þ ú ú M¨è Ž Ž Žèèèè??ì’;;èèJ ï ïJJJ¡FFFFFFF ï ï ï ï ï ï ™ ™FF ï ï B B        ´ ´ a ´ ´aa ß ßŒŒã ‰66 ] ] ] ]    ß ß ß:çAI”ãã66666¼&!T* $¶€¸¸¸¸aaaa Ä Ä ÄqqqqÈÈu X X‡ -‡‡‡‡ - - å?’’ å å ü ü O O ¦ ¦ øS”””” ç ç””¿¿¿¿lÇÇwwÊÊwwww¦¦¦¦ýýýý>>‘‘ääää        › ›HHLL¦ÝÝ{{w2222 … … …à´´ ± ± ± ± — ñ D DõõõõH î › › D D D D îH › › › › › ›   p p!! Æ ÆX þ þ þ þ þ þ þ « « « « « «     j jÅÅÅ Á Á  NN     F FN ó Ì Ìy  q ÌyyûûNN ÷ ÷ ÷ ÷¤ÿ¬û       » »   e e==ë ””ö X# îÏl e e¿¿ii » »   ± ±´´´´´´^^ ± ±22àà‰‰ä‰´´bb´´bb[[[[² #)1Œ-}Üc__²²××Ïu m m à Ãqq[[k[[[  ¹¹gg¹_IIIIóóEE à à à à à à à Ã%%%% Î Î !|| !||%%%%ÒÒ x x))||PPý £ £ £ öP ä ä‘‘ ä ä‘‘ffff¼¼¼¼P«ý £&&-ÓÓÓ&&QQþ ¤ ú ú M¨è Ž Ž Žèèèè å å’ 7;;èèJ ï ïJJJ¡FFFFFFFJJ ï ï ï ï ™ ™FF ï ï        ´ ´ a ´ ´aa ß ßŒŒã ‰66 ] ] ] ]    ß ß ß:ç«þãã6666 &ËÛ,(4ô2?úq¸¸aaaa Ä Ä ÄuuqqqqÈÈÐu²²‡ -‡‡‡‡‡‡ å?’’?? ü ü ü ü ¦ ¦SS”” ç çAA””¿¿l¿¿Òwww%%%TTTTªªýý™™>>‘6‘6  ¸¸^^^^HH › ›L ñLLÎÎÎÎ … …22 … … …à ­ ^ ± ± DŸ ñ ñõõHHH î ›õ ñ ñ D D › › › › › › › › p pss Æ ÆXX « « « « Q « « « « «XX     jÅÅÅnn Á Áû  N ó ó ó ó ó y   Ì ÌyyNN     ÷ ÷ ÷ ÷¤¤QQNN    iiii e e ëë”îö1ð3K# Ï¿¿¿ » » » » ± ± ± ±´b  ± ±àààà‰ä‘6´´bb[[__Á†™™ ___""ÇÇÇ m m mqq Ãkr½[[__ g¹¹_œœ ï ï ˜ ˜EE à à à Ãqq à à x x%%|| ! ! Î Î Î Î%%%% x x x x Î Î|| £ £ £ £ £ £PP‘‘> ä 7 7 ä äffff¼¼¼¼««PP&&ÓÓ€&ÓÓQQ«Q ú ú ú ú Ž Ž;;;;;; å å’’;;–; ï ïFFóó¡¡¡¡J ï÷÷FF ™ ™ ï ï ï ï ] ]      ´ ´ ´ ´ ´ ´aa ß ßŒŒãããã    ] ] ] ] ß ßŒŒçœþI66666>¨-€!T* 'k5eee  ´aaqquu ÄqqÈ#}}`²² X X Ú Ú‡‡‡‡‡‡ìGì’?? ü üWW ¦ ¦SS”” ç ç ç ç 9 9¿¿l¿¿Òwww%%%®®  ²²™™™™ë‘‘6  ¸¸^^^^HH › ›L ñLLssss … …22 … … …à ­ ^ ± ± DŸ ñ ñ › ›HHH î @ › ñ ñŸŸ › › › › › › › › p pss Æ Æ « «XX « « « « Q « « « « « þ þ     jÅÅÅnn Á Áû  N ó ó ó ó ó yyy Ì Ì  NN     ÷ ÷ ÷ ÷ J J ÷ ÷NN    iiii e e ëë”%Â)Ñ XÏ¿¿¿ » » ± ± ± ±´¼b    ààààä>ëFÄ´i¼q½[[__gÁÅÅk¹___ÇÇÇÇÇ m m mqqx/Šc[[__² n¹_œœ ï ï ˜ ˜EE à à à ÃqqÒÒ%%|||| Î Î Î Î%%%% x x x x Î Î|| £ £ £ £ £ £««‘‘ ä ‰ 7 7 ä äffff¼¼¼¼PPPP&&ÓÓ€&ÓÓQQQ ö ú ú ú ú Ž Ž;;;;;; å åìì;;;– ï ïFFóó¡¡û°ÿ¤÷÷FF ™ ™ ï ï ï ï ] ] ° °    ´ ´ ´ ´ ´ ´aa ß ßŒŒãããã    ] ] ] ] ß ßŒŒŒŒ””66666ã˜ÃiËÓÓq¼eee  ´aaqq ÄqqÈ#}}`²²²² Ú Ú‡‡‡‡ââ¡ffVô? ¦ ¦ ¦SS ç ç ç ç ç ç ç ç e¿llÃÃÒwww!{(ƒ‡‡440‹ååÈÈÈmÀfää66à:2HHHHHHHHwÊÊ pÊ^^^^´´ ± ± ± ± ­ Z Z ñ ñŸŸ D D D DH î î îHHHH › ›HH ñ ñ ñ ñ › ›H î › › › › € € € € € € € € € € € €„ ) ) ) ì ì ìGððnn Á ÁÅÅ j j ÷ ÷ ÷ ÷ J J ÷ ÷ u u u u uÏ""NN     J J J J Ì Ì Ì Ì Ì Ì Ì Ì==ë == · ·l!\ò””””======== … … … … Ü Ü /‰ f¸¸¸¸  Ü Ü‰‰ä>NmˆÄ¼ÀÀu½cc  ¹øøCé’’’7x ÃqqÇÇ ˜ ˜ ë ë ˜óó¨‚ͽ[[ ® ®†á†;ì’Š0ÇÇÇÇ m mÇÇqq à ÃqqqqÖÖ|||| Î Î Î Î Î Î Î Î Î Î ú Ÿ ú ú £ £PP%% x x x xÒÒ> ä 7 7 ffÀÀffPPý £þþ ¤ ¤ ú ú¨¨ Ï Ï Ï Ï Ï) Ï Ï’ 7 å åèèèè;;èèèè;;ÈÈÈÈÈÈóóóóJÿÛY¤JJJ ï ï ïJóóFF 2 2 2Œ66666 ‰ ‰ ‰ ‰66     ´ ´ ´ ´¸¸  ãããã:: ß:¸¸¸¸aaeeeÀii¸¸¸¸aa ´ÈÈÈÈÈ nuuu44 Ú Ú Ú Ú‡‡‡‡‡‡ Ú44é+€-ˆ$Øn ¦ ¦ ¦ ¦ ¦SS ç ç ç ç ç ç ç ç e¿llÃÃwÒÒÒ{ÖƒÝááééå@ååÐÈÈÈmÀ>>66à:2HHHHHHHHwÊÊ pÊ^^^^´´ ± ± ± ± ­ Z Z ñ ñŸT D D D DH î î î î î î î › ›HHLL ñ ñ › ›H î › › › › € € € € € € € € € € € €„ ) ) ) ì ì ìGJÿRnn Á ÁÅÅÅÅ ÷ ÷ ÷ ÷ J J ÷ ÷ u u u u uÏ"" ó ó     J J J J Ì Ì Ì Ì Ì Ì Ì Ì==ë ==ëë¿¿ll˜òò˜””””======== … … … … Ü Ü‰äÀÐȸ¸  66äää>]$1˜¼fffÀc½½c  ¹~##½øì¡ü¡Óqq m m ˜ ˜EE ˜óóócc[[ ® ®†á††7’Š0 m mÇÇ m mÇÇqq à Ãqqqq|||||| Î Î Î Î Î Î Î Î))T ú ú ú £ £PP%% x x x xÒÒ> ä‘‘ ff ¹ ¹ffffPPý £ ¤ ¤ ¤ ¤ ú ú¨¨ Ï Ï Ï Ï Ï) Ï Ï’ 7 å åCCèè;;èè Ž Ž;;ÈÈÈÈÈÈóóóó¤Y!-¾$ò¤JJJ ï ï ïJóóFFŒŒŒç66666 ‰ ‰ ‰ ‰66  eeii ´ ´ ´ ´¸¸eeãããã ß ß ß:¸¸¸¸¼¼ee e¸¸¸¸¼¼ ´ÈÈÈÈÈ nuuu44 Ú Ú Ú Ú‡‡‡‡‡‡ Ú4D#a4ú5§.ãèÉ ¦ ¦ ¦ ¦ ¦ ¦SS çA”” ç ç ç çll¿ÃÃÒÒÒ҃݋å<<DD@š@@*ÐÈÈÈmÀëë>äçç:àHHHH › ›HH pÊ^^^^´ Z Z Z^  ± ± Z Z Z Z ñ — ñ ñ ñ ñ ñ ñH î î î › › › › › ›HHŸŸ ñ ñ î î î î î î î î---- € € € €---- Ö Ö„„ ì ì™™R¼¥nn Á Á jÅÅÅ ÷ ÷¤¤ ÷ ÷¤¤"""" u u""   F     ÷ ÷ œ œ yy  Ì Ì y====== ël¿ e¿¿====AA””==˜˜==== … … … … Ü6‰>…IŒmf   ‰äää‘ë]Lj¼b  ¸¸c¹_1·3*FO!#%2nˆËq À À À ˜ ˜ ˜ ˜óóEE[[[[[[ ® ®††††ŠŠÝÝ m mÇÇq  à à q)) Î Î ! ! Î Î ! ! Î Î Î Î))§§ úTPP £ £ xÒ%%%%%‘‘ ä ä ff ¹ ¹ffPPý £QQ ¤ ¤ ú ú úU|||||| Ï Ï å å å åèCèèèèè Ž;;;; nÈuÈÈóóóó÷¬x"=xY÷÷÷÷ ï ï ™ ™óó::ŒŒãã6666 ‰ ‰ ‰ ‰ãã  ¸iiaaaa   ] ]¸¸6666 ß ß ß ß¸¸e ¸¸  aa¸¸eeaa nÈÈÈÈȇ‡‡‡ Ú Ú‡‡‡‡‡‡44â—J*Ó0ê(Ëà ¦ ¦ ¦ ¦ ø ø çA”” ç ç ç ç¿ eÃÃÒÒÒÒƒ’å@ññù®ªOOOß…}}"ÈÀëë>ä:àHHHHõõHH pÊ^^^^´ Z Z Z^  ± ± Z Z Z Z ñ — — — ñ ñ ñ ñH î î î › › › › › ›HHŸŸ ñ ñ î î î î î î î î---- € € € €---- Ö Ö„„ ì ì™™RÿJnn Á Á jÅÅÅQQ¤¤ ÷ ÷¤¤""""ÏÏ""û       ÷ ÷ œ œ yy  Ì Ì y====== ël¿ e¿¿====AAîîòòò===== … … … … Ü6ä™”(Ã"«"f   ‰äää‘ëó¨i¼b  ^^ ®[[_n#¬34l,û¹.¬4-Q—xËq À ˜ ˜ ˜ ˜ ˜ ˜EE[[[[[[ ® ®††††00ÝÝ m m m m à Ãq  à à q Î Î Î Î ! ! Î Î ! !)) ΠΠΠΧ§ úTPP £ £ xÒ%%%%%‘‘ ä ä ¹ ¹ff ¹ ¹ffPPý £QQ ¤ ¤ ú ú úU|||||| Ï Ï å å å åèCC Žèèè Ž;;;;È#uÈÈóóóó÷÷ÿYY¤÷÷ ï ïóóóó::ŒŒãã6666 ‰ ‰ãããã  ]¸aaaaaa ] ]¸¸6666 ß ß ß ß¸¸e ¸¸eeaa¸¸  aaÈ n##Èȇ‡‡‡ Ú Ú‡‡‡‡‡‡44ââ†è3v ü üªª ü ü O Oëë== ëë¿¿llllÚ4é–K¢ü ¹!f ±çŒ2×yÄi>>‘‘ä‰66HHõõõõHH Æ Æssss Æ Æ´´´ Z ± ± ± ± Z Z ± ± ± ± › › › › ñ ñ ñ ñ › › î î ›õ ›õõõHH DŸŸŸŸ D ñ ñ › @ î î € € € € ) ) Ö Ö )„ Ö Ö„„ Ö Ö ì ì ì ìôôGGrÅÅQQ ÷ ÷ ÷QQ ÷ Ì Ì   Ì Ì Ì Ì¤ J J J     ó ó Ì Ì Ì Ì Ì Ì Ì Ì==ëë====ii====”îö`l§˜=== Ü Ü Ü Ü‰‰6‘u:2mbbä>ë‘:•••i^^^^²²_g†"Ô%‰ K¥"Ô*ó$.ßÏÇÇ Ã Ã Ã Ã ï ï ï œœ[[ ® ®†† Ù Ù0000 m m q à à mÇq qq%%%% x x x x Î Î||%% xÒ ú ú§§ýý £ £ x x%%%%%‘‘ ä ä ¹ ¹ffff ¹ ¹PP £ £ ¤þ öQ ú ú úU||||| "|| å å å åèèèè’’ì’ Ž Ž;;q qqÈÈJJóóûûûûNóóóFF ï ïóóFFŒŒ::66::ŒŒŒŒ::a aaaaaa¸¸¸¸aaaa ‰ ‰ã㌠2 … … ´ ´aa¼¼¼a ]¸¸ ] ´ ´aa  ¸¸¸¸   nÈuuÈÈ000‹‡ -‡‡Þ ƒ00 Ú Ú‡‡½rÁ ü ü O O ü üªªëë== ëëll¿¿llllÚ4ééñ¦W!f#n(Ø)…(+(+$œAŒ2ÓyÄ>>ëë>ä66££õõ › ›HH Æ Æssss Æ Æ´´´ Z ± ± ± ± Z Z ± ± ± ± › › › › ñ ñ ñ ñ › ›HH ›õ ›õõõHH DŸŸŸŸ D ñ ñ › @ î î € € € € ) ) Ö Ö )„ Ö Ö„„ Ö Ö ì ì ì ì™™ ì ìr j ÷ ÷ ÷ ÷ ÷QQ ÷ Ì Ì   Ì Ì Ì Ì¤ J J J     ó ó Ì Ì Ì Ì Ì Ì Ì Ì==ëë====ii » »==˜˜I£Qp{·ò˜== Ü Ü Ü Ü‰‰ Ü6fÀm¼¼óUF•:::´^^^^²²_ Áððð;–ð¥K*ÏÇÇ Ã Ã Ã Ã ï ïIIœœœœ[[ ® ® ® ®†† Ù Ù0000 m m q à à mÇËqqq%%%% x x x x Î Î ! !%% xÒ ú ú§§ýý £ £ x x%%%%%‘‘ ä ä ¹ ¹ffff ¹ ¹PP £ £ ¤þQ ö ú ú úU|||| "||| å å å åèèèè’’’ 7 Ž Ž;;q qqÈÈ ï ïóóûûûûNóóóFFJJóóFFŒŒ::6666::ŒŒŒŒ ß ß¼aaaaaaa¸¸¸¸aaaa ‰ ‰ã㌠2 ß ß ´ ´aaaa¼a ]¸¸ ] ´ ´aa  ¸¸¸¸   nÈÈÈ000‹‡ -‡‡Þ ƒ00 Ú Ú‡‡½½jjÁgªª ü ü ü üªEE˜=====¿¿llÇÇÇÚÚéKKù®!f(+*à1¤2R0÷.B*3$³I:…ÓÓyÄ>>ëë‘666££HHHHõõss!!ss Æ Æ Z Z ± ± ± ± Z Z^^^^ › › › › ñ ñ ñ ñ › › îH › › › › › ›HH ñLLLL ñ D D › › › › € € Ó- ) )„9 Ö Ö Ö Ö ) ) Ö Ö ì ì ì ì™™™ ? ÷ ÷ œ ÷ ÷ ÷¤ J   Ì Ì Ì Ì Ì Ì ÷ ÷ J J ó óNN Ì Ì Ì Ì Ì Ì Ì Ì ==== ëll » » » »ëë˜Mh M˜=== Ü Ü /‰ Ü Ü‰‰ fÐÄi¼& ")›&æm÷ç´´´´^^ ± ± W W W²²²ŽŽáá;;;;ÇÇq  à à ï œœœœ[[ ® ® ®[¶†† Ù Ù0000 À À à à à ÃÏ5ÛË %%Ò x x x Ê% Î Î !|Ò x%% L L ú úPPPP%%%% x x%% ä ä ä>; à ffffPP £ £þþQQ M M¨¨)) Ï Ï||))’’’’–;èè’’ å åèèè Ž Ä ÄqqÈÈ ï ï ï ïóóóNûû¡FóóFFNóóó::ŒŒ66 ‰ ‰:: ß ßŒŒ ß ß ´ ´aa ´ ´¸¸¸¸aaaa6666 ß ßŒŒaa    ] ] ´ ´¼a ]¸¸¸ee  ÈÈu n n00ÞÞ‡ -‡‡Þ ƒ00‡‡ -‡½½ggªªWW ü üª  ˜=====¿¿lÇ!ÇÇÚ4–Kù c&Ð-•1¤5´7¼6a50÷*!þï:.yyÄ>>‘‘‘666££HHHH › ›ss!!ss Æ Æ Z Z ± ± ± ± Z Z^^^^ › › › › ñ ñ ñ ñ › › îH › › › › › ›HH ñLLL ñL D D › › › › € € Ó- ) )„„ Ö Ö Ö Ö ) ) Ö Ö ì ì ì ìôôô™ ÷ ÷ ÷ œ ÷ ÷ J¤   Ì Ì Ì Ì Ì Ì ÷ ÷ J J ó ó ó ó Ì Ì Ì Ì Ì Ì Ì Ì ==== ëll » » » »ëëò\$é.c,[ ,§ò˜=== Ü Ü /‰ Ü Ü‰‰ fÐïÓÄqE0`7$7$0`»B´´´´^^   W W W²²²44ááááááÇÇq  à à ï œœœœ¶¶ ® ® ® [†† Ù Ù0000 à à à ÃÏê&q%%Ò x x x Ê% Î Î !|Ò x%% L L ú úPPPP%%%%ÒÒ%% ä ä ä>; à ffffPP £ £þþQQ M M M M)) Ï Ï||))’’’’–;èè’’??èèè Ž Ä ÄqqÈÈ ï ï ï ïóóóN¡¡¡FóóFFóNóó::ŒŒ66 ‰ ‰ ß ß ß ß 2 2 ß ß ´ ´aa¸¸¸¸aaaa6666 ß ßŒŒaaaaee ] ] ´ ´a  ]¸¸¸    ÈÈuÈÈ00ÞÞ‡ -‡‡Þ ƒ00‡‡ -‡ c cggÙèŽÙ+++àf ªS­S­ üW[µmÈuÐÐß:#Y(l/06¢7ý7ý7ý5õ1å*!þI:&qiii´b£HHHL ñ ñ ñ › ›HHŸŸ D D Z Z Z Z ± ±   Ü Ü‰ / …à … …   ± ± / / … … … … Z Z Z´´´´´ … … … … Ø Ø22 j j j j  nÈ ì ì ìGGGGGÅÅ Á Á Á ÁNNNNNNNN ÷ ÷ ÷ ÷ ó ó    NN     J J ÷ ÷ Ì Ì Ì Ì Ì Ìy  z z z z $~ Ñ ÑSS ¦ ¦ ü ü O O Ñ+Ž 3·6l5#y?/ÕÕ~~ Ñ Ñ ± ± ± ±^^^^2BQ ëó"×529A8”3*ÕLLŸŸŸŸHHHH W W W W ª² __²  g  4 Ù Ù Ù0000² ¹¹   ²[[ ® ® W²² W[[ ® ®[[[[ ® ®ckjj¼¼ ¹ ¹ ¹ ä ä 7 7‘‘ ä ä ;; 7 7 7 7 7‘ ä ä ä ä ä äPPýý ú ú L L§§ ú úýý £ý;;;;½½½½ c cèè Ž Ž ŽèCCþþQ«QQþþ||||)) Ï Ï\\  ² ``²²² JJóó ™óÈÈÈÈÈÈuuããã ‰66 ‰ ‰aaaa ´ ´  ¸¸ãããã6666ŒŒŒŒ Û66iaa¸¸¸{{ s s s s  KK ž ž õ õ õ õ\\\\  ¶\ÞÞÞÞ‡‡‡‡ Ú Ú‡‡ Ú Ú Ú Ú00 ƒ ƒ0000jjgg3­!q††+•+fªS­S­ªª üW­­[µmÈ*……ß”!þ(l1å6¢7ý7ý7ý5õ1å*!þ”…&Ìqiii´b¼ý£££L ñ ñ ñ › ›HHŸŸ D D Z Z Z Z ± ±^^ Ü Ü‰ / …à … …   ± ± / / Ü Ü … … … … Z Z Z´´´´´ … … … … Ø Ø22 j j j j   n ì ìG ì ì ì ì ì j j Á Á Á ÁNNNNNNNN ÷ ÷ ÷ ÷ ó ó    NN     J J ÷ ÷ Ì Ì Ì Ì Ì Ìy  z z z z $~ Ñ ÑSS ¦ ¦ ü ü O O Ñ+3,ò53·$Ó?/ÕÕ~~ Ñ Ñ ± ± ± ±^^^^2çëë>¸*^3×4…)±kLLŸŸŸŸHHHH W W W W ª² __ gvÁ 4 Ù Ù Ù0000² #Ñgg [[ ® ® W²² W   ® ®[[[[ ® ® ®¶[ ® ®jj¼¼ ¹ ¹ ¹ ä ä 7 7 7 7 ä ä ;; 7 7 7 7 7‘ ä ä ä ä ä äPPýý ú ú L L L L ú ú £ £ £ý;;;;½½½½½½èè Ž Ž ŽèèèþþQ«QQ ¤ ¤|||| Ï Ï Ï Ï\\  ``² ````²²² JJóó ™óÈÈÈÈÈÈuuããã ‰66 ‰ ‰aaaa ´ ´  ¸¸ãããã6666ŒŒŒŒ Û66iaa¸¸¸{{ÍÍ s s  KK ž ž õ õ õ õ\\\\ ¾kÞÞÞÞ‡‡‡‡ Ú Ú‡‡44 Ú Ú00ÞÞ0000jjggàZ!qøà++àÁ ªªS­ªªª[[ÀÐï ¤ï”” ¤'-Ö5H6¢6¢6¢3í.ƒ%`œ:*&q´PP££ŸŸ ñ ñ › ›HH ñ ñŸ D ­ ­ ± ±^^‰‰‰ /22 Ø Ø   ± ± ­ ­ Z Z Ü Ü Ü Ü … … … … Z Z´´2 Ø … … … …22 j jÅÅ j j Á Á Á Á ì ì™ ? ì ì ì ì    NNû           ÷ ÷¤¤                ¤ J J Jyyyy Ì Ì& Ì Í((( Ñ Ñ Ñ Ñ ¦ ¦SS ü ü O O Ñ+†ð"Ì!qø//‚‚ Ñ Ñ $ $ ± ± ± ± ± ± ± ±ààää‘  "?$ôÕ ùLLŸŸLLHHõ › W W²²_  ÷ 44††0000²g•$Z_ ® ® ®² W ® ® ® ® ® ® ® ®[[[[ ® ® ®¼¼ ¹ ¹ff ä ä 7 7 ä ä ä ä;•;;‘ 7 7‘‘‘‘‘ ä ä ä ä £ £ £ýT ú L L ú ú ú úPPPP;;;; c½½ c µj Žè;;;;;;QQQQQQQQ||||) Ï Ï Ï  ¶¶ººgg`º²²²² ïJJJ¡FFF nÈÈ nÈÈãã66ãã66¼a ´ ´  e a¼>ãããã㌌ ß:6666aaaaee¸¸ÍÍ    s sKK ž ž õ õ õ õ\\  ¾Ý‚¾8Þ0‹‡‡‡‡‡‡4444 - -00000000j½½gg†à莆 Ñ++WWªªS­ªªª[[*I!þï”ïI#)Æ/Þ181818+Î&döç…*&&6¼´´´õõHHŸŸ ñ ñ › ›HH ñ ñŸ D ­ ­ ± ±  ‰‰ä‰2222   ± ± Z Z Ü Ü Ü Ü … … … … Z Z Z Z2 Ø … … … … Ø Ø j j j j j j Á Á Á ÁGG™ ? ì ì ì ì    NNû           ÷ ÷ J Jûû        ûû¤ J J Jyyyy Ì Ì q Ì Í( Í Í Ñ Ñ Ñ Ñ ¦ ¦SS ü ü O O Ñ+++3ŽŽ3ÕÕ(( Ñ Ñ $ $ ± ± ± ± ± ± ± ± … …22‰‰6‘¶   ùLLŸŸ ñ ñHHõ ›²²²²_ Bvg44††0000 W +ɹ_ ® ® ®² W ® ® ® ® ® ® ® ®[[[[ ® ® ®¼¼ ¹ ¹ff ä ä 7 7 ä ä ä ä;•;;‘ 7 7‘‘‘‘‘ ä ä ä ä £ £ £ýT ú§§ ú ú ú úPPPP;;;; c½½ c Žè;;;;;;QQQQQQQQ||||) Ï Ï Ï  ¶¶Ê,wº`  ²² ïJJJ¡FFF nÈÈ nÈÈãã66ãã66¼a ´ ´   e¼a>ãããã㌌ ß:6666aaaaee¸¸ s s    s sKK ž ž õ õ õ õ¶¶  ¾Ý7s8Þ Ö0‡‡‡‡‡‡4444 - -00000000j½½gg+++†ÕÕÕÕ­­SSªWWWW­­bÐ2Œˆˆã˜"«%`)p*Ê)Æ'%·!§ïß×}ÐÐ×}̼bbf ^^ŸŸŸŸL ñ ñ ñHH › ›HHH î ± ± ± ± Z Z2222 Ü Ü Ü Ü Z Z Z Z Z Z … … Ø Ø / / Ü Ü Z Z / / / / … … Ø Ø j j Á Á Á Á j j Á Á Á Á™™™™ ì ì ì ì j j j j j j J J ÷ ÷ ÷ ÷ ÷ ÷    NNÿ¤ J J J J¤¤û  NN""ÏÏ   y z z z z~~+ ÑSS ¦ ¦ ü ü O O~~~~~~+†++~~ Ñ Ñ Ñ Ñ ± ± ± ±2222 Ü Ü‰‰ùc(Ͳ£õõ ñ ñ ñ ñ › › › › W W[[[[_¹nÉg²ÝÝÝÝ Ù Ù††__ g  ²²[  ® ®[[[[     ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® [ ® ® b b ä ä ä ä ä ä ä ä 7ì‘‘;;;•‘‘ ä ä ä ä ä ä ú ú úT ú ú ú úý £ýý £ýPP ä ä 7 7gggg½½’’? å;;;; ú ú M M¨¨¨¨&&ÓÓ|| Ï Ï``² ð'ðc¾c ®\\ ïJJJÈÈ À Àuãã66ŒŒŒŒee¸¸¸¸¸¸aa¸ããç猌 ß ßŒŒãã66¸¸¸¸aa      ÍÍùù ž ž õ õ õ õ    ck‹‹ ƒÞÞÞÞÞ‡‡‡‡ Ú Ú Ú Ú‡‡‡‡0000 ¹ ¹gggg Ñ Ñ Ñ+ÕÕÕÕSSSS O_#nWWWW­­­Àu×2ˆˆˆ=œœ!Q"« M Mò˜”…×}ÐÐÈm¼bbf ^^ŸŸŸŸL ñ ñ ñHH › ›HHH î ± ± ± ± Z Z2222 Ü Ü66 Z Z Z Z Z Z … … Ø Ø‰‰ Ü Ü Z Z / / / / … … Ø Ø j j ½ ½ Á Á Á Á j j Á Á Á Á ? ? ? ? ì ì ì ì j j ½ ½ j j j j J J ÷ ÷ ÷ ÷ ÷ ÷    NN¤ J J J J J¤¤  û¨¨}}ÏÏyyÓy z zÕÕ~~+† ü ü O O~~~~~~ Ñ+++~~ Ñ Ñ Ñ Ñ ± ± ± ±2222 Ü Ü‰‰ŸT® ý£õõ ñ ñ ñ ñ › › › › W W[[[[__¹  ÝÝÝÝ Ù Ù††__² ²²²²¶[ ® ®  [[[[   ® ® ® ® ® ® ® ® [ ® ®¼¼ ä ä ä ä ä ä ä ä‘‘‘‘;; à;‘‘ ä ä ä ä ä ä ú ú úT ú ú ú úý £ýýý £PP ä ä 7 7 ½½’’ å?;;;; ú ú M M¨¨¨¨€€ÓÓ|| Ï Ï² w%µ+ Ks¾¾c \\ ïJJJ##uãã66ŒŒŒŒee¸¸¸¸¸¸aam""˜ãŒŒŒŒ ß ßŒŒ ‰ ‰66¸¸¸¸aa      ÍÍùù ž ž õ õ õ õ      ¶‹‹Þ8ÞÞÞÞ‡‡‡‡ Ú Ú Ú Ú‡‡‡‡0000gggg $~ Ñ Ñ((((SSª¹Éª ü ü[["}}.ˆçç˜62}*ÐÈÈm¸^^^ŸŸŸŸ ñ ñ ñ ñ › ›HHõõ › ›^^ ± ± Z Z … … … … Ü Ü‰‰ Z Z Z Z Z Z … … Ø Ø / / Ü6´´ Ü Ü Ü Ü … … …à ½ ½   Á Á j j Á Á Á Á ì ì ì ì ì ì ì ì j j j j ½ ½ ÷ ÷ J J¤ J ÷ ÷û  ûû¤¤ œ œ¤¤¤¤N¨]„*ÏÏyyy  z zÕÕ~~~èr[ªª ü ü Ñ Ñ~~~~~~~~ Ñ Ñ Ñ Ñ Ñ Ñ ± ± ± ± … … … … / / Ü ÜŸŸùùPõHH ñ ñ ñ ñ › › › › W W ® ®[¶__00Ý ‚ Ù Ù††²²²²[[ ® ® ® ®[[[[ ® ® ® ®[[[[ ® ® ® ®[[ ® ® ® ® ® ® ¹ b¼‘‘‘‘ ä ä ä ä‘‘ ä ä;; ‘‘ ä ä 7‘ ä ä ú úT ú ú ú ú úý £P«ý £ £ £ 7 7 7 7gggg½½’’ å?;;è Ž ú ú ú úUUU úÓÓ€€))| "²²² 4k¾c   B ï ïJJ¤ÿ…*#ÈÈ nãã66::::eee ¸¸¸¸i„ þ þ¨>ã㌌ ß ßŒŒŒŒ ‰ ‰ ‰ãeeeeaaÍÍÍÍ{   ùù ž ž¢¢¢¢\\\\  ¶¶‹‹Þ8å‹00 Ú Ú44‡‡‡‡4 Ú‡‡00ÞÞgggg $~++((((SSªª ü ü[[mÈÈqqyÓ׌߅ˆˆÛ×"Ðumm¸¸^^ŸŸŸŸLL ñ ñ › ›HH › › › ›^^   Z Z … … … … Ü Ü‰‰ Z Z Z Z Z Z … … Ø Ø / / Ü6´´ Ü Ü Ü Ü … … …à ½ ½   j j Á Á Á Á ì ì ì ì ì ì ì ì j j j j ½ ½ ÷ ÷ J J¤ J ÷ ÷  ûûû¤¤ ÷ ÷¤¤¤¤¨"!AI„ÏÏyy y z z z z~~ÙCÜÌ[ªª ü ü++~~~~ $ $~~ Ñ Ñ Ñ Ñ Ñ Ñ ± ± ± ± … … … … / / Ü ÜŸŸŸŸõ ›HH ñ ñ ñ ñ › › › › W W ® ®¶[00Ý ‚ Ù Ù††²²²²[[ ® ® ® ®[[[[ ® ® ® ® ® ®[[[[ ® ® ® ®[[ ® ® ® ® ® ® ¹ ¹ ¹ b¼‘‘‘‘ ä ä ä ä 7 7 ä ä;;èè‘‘ ä ä 7‘ ä ä ú ú úT ú ú ú úý £P«Xý £ £ 7 7‘‘gggg½½’’? å;;è Ž ú úUUUU¯U--€€ Ï Ï "|²²² ºººº¶c¾c   B ï ï ï ïJ¤*Ð#ÈÈ nãã66::::eee ¸¸¸¸iuI-,*w·˜ã㌌ ß ßŒŒççãã ‰ãeeeeaaÍÍÍÍ{   ùù ž ž¢¢¢¢\\\\ ® ®\\00Þ8‹000 Ú Ú44‡‡‡‡4 Ú‡‡‹‹ÞÞ ¹ ¹gggg $ $~~~~ Ñ Ñ ¦ ¦ ¦ ¦ ü üªª­ä>>>Bœ÷÷&ÓÓyyÈÈÈm¼¼b¸¸  ¸¸  HHõõõõõõ pÊ Â Â p pbb ± ± ± ± / / / / … …à …   ± ± ± ±^  Ü Ü / / Ü Ü‰‰^^^^ Z Z … … … … Ø Ø … … ì ì ? ? è è •ð Á Á     Á j j Á Á Á Á • •C è ? ? ’ ’     ó ó ÷ ÷¤¤¤¤Q ÷ ÷ ÷ J¤NNûU +¿9*}""""" Ñ Ñ Ñ Ñ Ñ ÑÙ3µ­S­µµ­­ª O ¢ ¢ z z z z~Ù~~ Ü6 Ü Ü Ü Ü / /^^^  ± ±^^ssssÊ p pÊ › › › ›L ñ D D Õ Õ ‚݆††† ® ® ® W WÝÝ00ÝÝ ‚ ‚[¶ ® ®00 ‚ ‚   , ,ÝÝÝ ‚0000 W W²²²²²² ª_;;;; ä ä ä äffffff ¹ ¹ ¹ ¹ ¹‘ 7 ä ä‘‘ ä ä%%%%||))§§TTTT§ L ä ä‘‘½½½½gg ¹ ¹;;;;’’’’ ú ú¨¨þþ««UUUUQQ ¤þ²²² ``````ºº``²²óóó ™ ™ ™¡¡##ÈÈqq Ä Ä666666::ç 2::ŒŒ  ee€==ÏÀee¸¸ ]¸: ߌ猌::¼¼ii¼¼aa¢¢¢ýOO¢¢ùùKKùùùùÞÞ‹‹0000\\\\`² X ƒÞÞÞ0000\\\\\¶  ;;èè? å $ $~~~~ Ñ Ñ ¦ ¦ ¦ ¦ ü ü O OS­ä>>>çBœœqÌÌÌyÄÄÄmmm¼¼b¸¸  ¸¸  HHõõõõõõ pÊ Â Â p p ± ± ± ± / / / / … … …à^^ ± ± ± ±^  Ü Ü‰‰ Ü Ü‰‰^^^^ Z Z … … … … Ø Ø … … ì ì ? ?CC •ð Á Á     f ÁÅÅ Á Á Á Á • •C è ? ? ì ì    NN ÷ ÷ J J J J ÷Q ÷ ÷ J¤NNûU¨¨ûû*Ï}""""" Ñ Ñ Ñ Ñ Ñ Ñ $~[­Sb'‰Ôb­ª O ü ü z z z z $~~~ Ü6 Ü Ü Ü Ü‰‰^^^  ± ±^^ssssÊ pÊ p › › › ›L ñ D D00 ‚݆††† ® ® ® W WÝÝ00ÝÝ ‚ ‚ [ ® ®00 ‚ ‚ Ù Ù , ,ÝÝ ‚Ý0000²²²²²²²²;;;; ä ä ä äffffff ¹ ¹ ¹ ¹ ¹‘ 7 ä ä‘‘ ä ä%%%%||))TTTT§ L ä ä 7 7½½½½gg ¹ ¹;;;;’’’’ ú ú¨¨þþQQUU ú úQQ ¤þ²²² ``````````²²óóó ™ ™ ™FFÈÈÈÈqq Ä Ä666666 ß ßŒŒ::ŒŒ  ee¼¼ÃÃÀeee¸¸¸: ߌ猌::¼qxü¼aa¢¢¢ýOOýýSS¦¦ùùùùÞÞ‹‹0000\\\\`² X ƒÞÞÞ0000\\\\\¶  ;;èè å? $ $~~Ù~~~ ¦ ¦SS ü ü OªSSSS[‘‘>>••BBÄÄÄÄq¼ÀÀ¼b¸¸^^  ^^ ›õHHHHHH p p p p p p Z Z^^ ± ± Ü Ü /‰222ff^^^^ ± ± Ü Ü‰‰ / / Ü Ü ± ± ± ± ­ … … … …22 … … ì ì ? ? • •ðð   Á Á Á Á f f j j j j Á Á Á Á • • • • ? ? ì ìNNNN ÷ ÷ ÷ ÷ J J ÷ ÷ ÷ ÷ ÷ ÷NNNNNNNNÏÏ u u u u"" Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ­­[Ì( +."&­W ü Oª(((( Ñ Ñ~~‰‰ Ü Ü Ü Ü Ü Ü^^  ^^  ssss › › › › D D D D00 ‚ ‚ Ù Ù Ù4[[ ® ® W WŠŠ00 ‚ ‚ ‚ ‚ ® ® ®00 ‚ ‚†† Ù  ‚ ‚0000Ý ‚²²²²²²²²²² 7‘‘ìnÀÀ ¹ f¼ b b¼ ¹ ¹ff‘‘ ä ä ä ä‘‘%%%%|ÖÖ‹Æ\§§§§‘‘‘‘½½ ¹ ¹gg Ž Ž Ž Ž’’’’UU¨¨«Qþþ¨¨ ú úQQQQ²²`²²²²²   ²²óóFFFFFFÈÈqq Ä Ä66 ‰ã6666ŒŒŒŒŒŒ ß ß  eeiie ¸¸¸¸ ß ß ß:ççŒçË€q¼aOO¢¢OOª[¦¦¦ùù00ÞÞ0000    ²² ƒ ƒ000000\\\\\\\\;; Ž Ž å å $ $~~Ù~~~SS ü ü OªSSSS[‘‘>>::ççiiÄÄq¼ÀÀ¼b¸¸¸¸  ^^ ›õ££HHHHÊÊÊÊ p p Z Z   ± ± Ü Ü /‰222f^^   ± ± Ü Ü / / / / Ü Ü ± ± ± ± ­ … … … …22 … … ì ì ? ? • • • •   Á Á Á Á Á Á j j j j Á Á Á Á • • • •™™ ì ìNNNN ÷ ÷ ÷ ÷ J J ÷ ÷ ÷ ÷ ÷ ÷NNNNNNNNÏÏÏÏÏÏ"" Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ­­[',21,Ç'W üª O((((++~~‰‰ Ü Ü Ü Ü Ü Ü^^^^^^ ±fssss › › › › D D D D00 ‚ ‚444 Ù[[ ® ® W W0000 ‚ ‚ ‚ ‚ ® ® ®00 ‚ ‚†† Ù  ‚ ‚0000Ý ‚²²²²²²²²²² 7‘‘ìnÀÀ ¹ f¼ b¼ b ¹ ¹ffì¡™ ä ä ä‘‘%%%%|Ö1)¹$OƧ§§§‘‘‘‘jj½½ ¹ ¹ggèèèè’’’’UU¨¨Q ö ¤ ¤¨¨ ú úQQQQ²²`²²²²² ²²²²óóFFFFFFÈÈqq Ä Ä66 ‰ã6666ŒŒŒŒŒŒ ß ß  eee ] ] ] ]¸¸ ß ß ß:ççŒç¼¼¼¼aOO¢¢ªªªj¦¦SS00ÞÞ0000    ²² ƒ ƒ000000\\\\\\\\;; Ž Ž å å $ $ Ñ Ñ++~~SS øS Oªªª ü ü ü ü­­ç••‘‘ääiļ¼¼¼i¸¸ fff¸¸¸^ ^ ›õõõ ñ ñ ñ ñÊÎss ´ Z Z Z … … Ø2 Ü66ë¼ Z´222 Ø …à2 Ø ­ ± ± ± ±222222 … … • •CC™™ ì ì Á Á Á Á j j ½ j j j j • • è è • •ðð ÷ ÷ J J         J J ÷ ÷ ÷Q¤¤Uûûû¤¤QQÏÏÏÏyyy  Ñ Ñ Ñ ÑÕÕ z zSS[j/ ï+¹ªª ü ü z z((~~++‰‰‰‰ … …àà^^ ± ´´bÊÊÊÊõõ › › ñ ñ ñ ñ00ÝÝ Ù Ù Ù Ù²² ,††† Ù Ù , , ® ® ® ®  [[00000000 ,† Ù Ù Ù Ù†† ® ® ®_____ ® ® ä ä ä ä ä ä‘‘Àf ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ fff‘ì™ äèè %%%%|Ö“#v.(µÊ«ýýPP‘‘ ä ägg ¹ ¹gggg??’’;;è訨¨ ú ú ú ú ú ú¨¨UU¨¨``²²\\\\óóFF ï ï Ä Ä Ä Ä666ã㌌ ß ß 2ŒŒŒ¸¸ee ´¸¸¸¸    ŒŒ 2Œããããaaee¸¸W¢ý¢ýýª_jÅ[¦SS‹‹ÞÞ‡‡â‡``²²``²²ÞÞ0000‹‹  \\\\\\’’ å å å å $ $ Ñ Ñ Ñ Ñ~~SSS­ª Oªª ü ü ü üSSçïïëëääi¼¼bbbbi¸¸ fff¸¸^  ^ ›õ › › ñ ñ ñ ñ%ùùÝÎs ´ Z Z Zàà2 Ü6‘û̼´ Z222 Ø …à2 Ø ­  ± ±222222 … … • • è è™™ ì ì Á Á Á Á j j ½ j j j j • • è è • •ðð ÷ ÷ J J         J J ÷ ÷ ÷Qÿÿ°Uûû¤¤¬a„ÏÏÏyyy  Ñ Ñ Ñ ÑÕÕÕÕ ¦ ¦SS[µÁf_ªªª ü ü z z((~~++‰‰‰‰àààà^^ ± ´´bÊÊÊÊõõ › › ñ ñ ñ ñ00ÝÝ Ù Ù Ù Ù²²†á†† Ù Ù , , ® ® ® ®  [[00000000† , Ù Ù Ù Ù†† ® ® ®__nnc ® ä ä ä ä ä ä 7 7f ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ fff 7‘> ‰ %%%%|ÖÞí,,«ýýPP‘‘ ä ägg ¹ ¹gggg??’’;;è訨¨ ú ú ú ú ú ú¨¨UU¨¨``²²\\\\óóFF ï ï Ä Ä Ä Ä66666ã㌌ ß ß 2ŒŒŒ¸¸  ´¸¸¸¸ee  ŒŒ 2Œããããaaee¸¸ýýý¢ýýª_jÅ[¦SS‹‹ÞÞ‡‡â‡²²``²²ÞÞ0000‹‹  \\\\\\’’ å å å å $ $ Ñ Ñ~ $ Ñ Ñ ø ø ¦ª O O Oª O ü üàïYÿ™™>>¼¼¼¼bb´´´b f  ¸¸¸¸ ± ± ± › › îH ñ ñ DŸÚ!½-ì+7õÖ! Æ Z Z2222 Ü6‘UÌb´ Z … …2222 … … Z Z^^ ± ± … … … …22 … … • • • •™™™ ? Á Á Á Á j jÅÅ j j • • è è • •C è ÷ ÷ J J         ÷ ÷¤¤ ÷QYiÏ +UQQa2}"" Ì Ìyy Ñ Ñ Ñ Ñ z z(( ¦ ¦ ¦ ¦[f ±W ü ü üÕ z z z Ñ Ñ~~‰‰‰‰àà22^^^^´´´´Ê pHHHH ñ ñ ñ ñ00ÝÝ , ,††²²á;†† Ù Ù , , ® ® ® ® ® ® ® ®ÝÝ ‚ ‚ ‚ ‚ ‚ ‚ Ù Ù Ù Ù , , Ù Ù[[ ® ®_g;#¬B ¶[[ ä ä ä> ä ä 7 7f ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ä ä ä ä ;;ÒÒ%%|ÖÖ1² Pýýýý 7‘‘‘ ¹gg ¹’’ å å ŽèèC¯UU ú ú ú ú ú M¨¨¨¨ ú ú² ````²²\\\\ X²² X ™ ™FFJJuuÈÈq  Û6ãã ‰ã6ŒŒ ß ß ß ßŒŒ    aa¸¸¸¸¸  ß ß 2 26666 ´ ´aa  ¸¸¢ýýýOOW²jµ[SùSS8Þ‹‹444 Ú``````‹0000000\\ ® ®   ® ®’’ å å’’ $ $ Ñ Ñ~ $ Ñ Ñ ø ø ¦ª O O O Oª ü ü ¦ ¦ ¦ ¦àï´Y™Nó>¼¼¼¼bb´b ±   ¸¸^^ ± ± ± › › îH ñ ñ DŸ c-ì-ìªÖ! Æ Z Z2222 Ü66‘¼´ Z … …2222 … … Z Z^^ ± ± … … … …22 … …ðððð™™™ ? Á Á Á Á j j j j j j • • è è • • èC ÷ ÷ J J         ÷ ÷¤¤Q¬Ã"ò,Â* „°QQ¬¬×""" Ì Ìyy Ñ Ñ Ñ Ñ z z(( ¦ ¦ ¦ ¦µ"JàÁ±W ü ü üÕ z z z Ñ Ñ~~ääääàà22^^^^´´´´Ê p î î î î ñ ñ ñ ñ00ÝÝ , ,††²²†á†† Ù Ù , , ® ® ® ® ® ® ® ®ÝÝ ‚ ‚ ‚ ‚ ‚ ‚ Ù Ù Ù Ù , , Ù Ù[[ ® ®_Á J+Ë#¬ ¶¶¶>> ä> ä ä‘‘f ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ¹ ä ä ä ä ;; x x%%|Ö|ÖýX«« £ £ýý‘ 7‘‘ ¹gg ¹’’ å å Žèèød +¯UUUUU¨ M¨¨¨ M ú ú² ````²²\\\\ X²² X ™ ™FFJJÐ##q 6ããã>6ŒŒ ß ß ß ßŒŒ    aa¸¸m¸¸  ß ß 2 26666 ´ ´aa  ¸¸¢ýýýOOýW[µµ®SSS“8‹‹444 Ú````‹0000000\\ ® ®\\ ® ®’’ å å’’ Ü Ü /‰‰‰ Ü ÜHH › › › › › › › › › ›HH ›õõPªª¦®ùLLLLLLLLÊ%%ÊÊÊwõõHHHHõ › · » »ò\UE O O O O ¦SSSSSSS­­­ª O ü ü ü ü ü ü z zÕ z $ $ $ $ z z z z Ñ Ñ Ñ Ñ ü ü O O ü üªªÅÅ j j j jÅÅ j j j j ? ? ì ì™™ ì ì ? ? ì ìð • • •ÅÅ j j j j ì ìGGJÿÛ1t75Ä"$æ5ÚÚÚ )„„ ) € € € €   Æ Æ pÊ p p p p!!ƒ *ö!|F6‰‰ Ü Ü / / Ü Ü Ü6‘ûôÝ(~~ $~ Ñ Ñ Ñ+ÕÕ‚( ¦ ¦ ¦SSSS ¦ ¦ ¦ ¦ ¦ ¦SSff ¹ ¹ffff ä ä ä ä‘‘ ä ä ä ä‘‘ ä ä 7 7 ;;‘ 7 7 7%% x x) Î Î Î) Î Î Î Î Î !| ¹ ¹fÀFVÀ J•èè;;;; èèffff¼¼ ú ú ú úPP £ £ x x%%%%%% Ù Ù , ,†††† ÃqqÈÈÈÈ ï ï ï ïJ¤aÛ!»÷…Ð##u ï ïóóFF|×))||) ÏQQ ¤þQQQQ||||||||«ÃÃ]¨¨¨aa¸e aa¸¸¸¸aaaa  ¸¸iiaa Ê Ê Ê Ê sÍ  ž žKK¢¢ õ õùù¦¢¢¢ý²²®®®cHH9Þ)) Ï Ï " ")) Ï)))èèèè;;;;è Ž Ž Ž? å å å²²²² Ü Ü‰ä‰‰66HH › › › › › › › › › ›HH ›õ ›õõõL¦ùùLLLLLLLL pÊ%ÊÊÊwõõHHHHõ › · » »˜˜  Eë O O O O K ¦SSSSSSS­SSª O ü ü ü ü ü ü z z z $ $ $ $ z z z z Ñ Ñ Ñ Ñ ü ü O O ü üªª j j j j j jÅÅ j j j j ? ? ì ì™™ ì ì ? ? ì ìð • • • j j j j j j ì ìGGð¥Ì05Ä7(èõ5ÚÚÚ )„„ ) € € € €   Æ Æ pÊ p p p p Æ ÆÎ8¸]둉‰ Ü Ü / / Ü Ü Ü6‘e'2¸7‚~~~Ù Ñ Ñ Ñ+//Ý‚ ¦ ¦ ¦SSSS ¦ ¦ ¦ ¦ ¦ ¦SSff ¹ ¹ffff ä ä ä ä‘‘ ä ä ä ä‘‘ ä ä 7 7 ;;‘ 7 7 7 Ê Ê x x) Î Î Î) Î Î Î Î Î !| ¹ ¹fÀìFFF••èè;;;; b b ú ú ú úPP £ £ x x Ê Ê%%%% Ù Ù , ,†††† ÃqqÈÈ n n ï ïJJ¤ÿ"ê1Î3T,I*##u ï ïóóFF|×))||) ÏQQ ¤þQQQQ||||||||«x-·¨¨¼¼¸e aa¸¸¸¸aaaa  ¸¸aa Ê Ê Ê ÊÍ s  ž žKK¢¢ õ õSS¦¢¢¢ýªªWW®®c‚(á+–"îÞ)))||)) Ï)))èèèè;;;;è Žèè? å å å²²²²‰‰ Ü‘6 ܉‰õõHH › › › › › › › ›HHHHHHHH ñLŸŸùùLLŸŸŸŸwwwÊÊwõõõ ›HHHH e e » » » » 똘== ü ¢ O O ¦ ¦S­ ¦ ¦ øSSSSS ü ü ü ü ü ü ü ü(( Í Í $ $ $ $ z z z z $ $ $ $ O O ü ü Oª O O j j j j j j jÅ j jÅ j j j j j ? ? ì ì ’G ì ì ? ? ì ì • •CC j j'rÅ ì ìGGJJÛ'Ž*C î5Úˆ- Ö Ö Ö Ö € € € €   Æ ÆÊÊÊ pÊ p p p Æ Æ Æ{>>‘6‰‰ Ü Ü / / Ü Ü66‘ûüG//~~~~~~ $~(ÝÝÝ ¦ ¦ ¦ ø øSS øS ¦ ¦ ¦ ¦SS ¹ ¹ffff ä ä ä ä‘‘ ä ä ä ä> ä ä ä 7 7 ;; ä> 7 7 x x x x Î) Î Î Î Î|| Î Î !| b bff ¹ìì>>;;••;;;;;;; à  b b ú ú ú úPP £ £ x x x x%% x x†† Ù Ù† , Ù Ù W W²²²²²²q  à à n n À À÷JJJY'§6Š7c1ùY*##ÈÈ ï ï ïJóó ™ ™||||))×|QQþ ¤QQ ¤þ)„ Ï Ï||||þY¯¯UU¼¼¼¼ee e¼a ´ ´  ¸¸aa ´ ´ ´ ´ ´ Ê Ê Ê Ê   Æ ž ž žùO õ õ õ¦¦¦¦¢¢¢ýýýýý®'.6j7Ä/¥XŒ×))|||| Ï Ï||èèèèèè;;è Žèè å å’’²²²²‰‰666 ܉‰õõHH › › › › › › › ›HHHHHHHH ñLŸŸŸŸLLŸŸŸŸwwwÊÊwõõõ ›HHHH e e » » » » ë==== ü ¢ O O ¦ ¦ øS ¦ ¦ øSSSSS ü ü ü ü ü ü ü ü(( Í Í $ $ $ $ z z z z $ $ $ $ O O ü üª O O O j j j j j j jÅ j j j  j j j j ? ? ì ì ’ ’ ì ì ? ? ì ì • •CC j jÌÔz ì ìGGJJø­P£“5Úˆ- Ö Ö Ö Ö € € € €   Æ ÆÊÊÊ pÊ p p p Æ Æ Æ Æää6 ܉‰ Ü Ü / / Ü Ü6666ÝÝ//~~~~~~ $~((‚‚ ¦ ¦ ¦ ø øSS øS ¦ ¦ ¦ ¦SS ¹ ¹ ¹ ¹ffff ä ä ä ä‘‘ ä ä ä ä> ä ä ä 7 7 ;; ä>‘‘ x x x x Î) Î Î Î Î|| Î Î !|¼¼ff ¹ìì>>;;••;;;;;;; à ¼¼ ú ú ú úPP £ £ x x x x Ê Ê x x†† Ù Ù ,† Ù Ù W W²²²²²²q  à à n n À À÷ ï ïJ¤&L+5%Ë”Ð##ÈÈ ï ï ïJóóóó||||))×|QQþ ¤QQþ ¤ Ï) Ï Ï|||| ¤þþþUUUUii¼¼mmÃü¼ÀÀÀ¼a ´ ´  ¸¸aa ´ ´ ´ ´ ´ Ê Ê Ê Ê  { ž ž žùO õ õ õ¦¦KK¢¢¢ý¢¢ýýS®r+e6j7Ä3µ"æ1))|||| Ï Ï||èèèè Ž Ž;;è Ž Ž Ž å å’’²²²² Ü Ü‰‰à … … …ŸŸ ñ ñHHHH DŸ ñ ñ ñ ñ D D ñ ñ ñ ñ ñ ñ ñ ñHHHHŸŸ ñ ñss!!ÎÎssHHHHHH › › e e e e » » » » ç ç 9” ç ç 9 9 O Oªª O O O OS ø øSSSSS ¦ ¦ ¦ ¦ O O O O $ $ Ñ Ñ z z z z(((( Ñ Ñ Ñ Ñ O O ü üª O ü ü j j Á Á Á Á ½ ½ jÅ™ ? ì ì ? ? ? ? ì ì ì ì ì ì™ ?Ì6ç#nn ì ì™™ððøææ“ÞÚÚÚÚ„ ) ) ) € € Ó Ó pÊ!!!!ssss Æ Æssàààà …à22 … …22‰‰‰‰ÕÕ‚‚~~+ ÑÕÕ(( Ñ Ñ++ ü ü O O ¦ ¦ ¦ ¦ O O ü ü ¦ ¦SS¼ b¼¼è ;;;;;;‘‘>> ä ä ä ä ä ä ä ä ä ä ä ä Î Î Î Î%% x x xÒ-Ò| !|Ö¼¼¼•;èè ä ä‘‘;;;; è ¹ ¹ ¹ ¹ b b¼¼ ú ú§§§§ ú ú Î Î Î Î Ê Ê%%†††† Ù Ù , ,  [[[¶¶[qqqq   q n nÈÈ ï ïF¡Ve˜ãÌqq ï ï ï ï ï ïJJÓ xÓÓÓÓ€€ ú ú¨¨ M¨¨ M|||| Ï Ï Ï)þþþþ¨¨ úUmmÃËËËimDŽϼ ´ ´  ¸¸    ]¸  Ê Ê Ê Ê  Í s ñKKK¢¢ õ õý¢O õ õ õ¢¢KKùSªªg!•)å-ô&ƒúˆ-ÓÓ Ï Ï||&&&&;–;;;;;;;; Ž Ž;;;;\\\¶²² Ü Ü‰‰à … … …ŸŸ ñ ñHHHH DŸ ñ ñ ñ ñ D D ñ ñ ñ ñ ñ ñ ñ ñHHHHŸŸ ñ ñss Æ ÆssssHH î îHH › ›¿¿¿¿ » » » » ç ç 9” ç ç 9 9 O Oªª O O O OS ø øSSSSS ¦ ¦ ¦ ¦ O O O O~~ Ñ Ñ z z z z(((( Ñ Ñ Ñ Ñ O O ü ü Oª ü ü j j Á Á Á Á jÅ™ ? ì ì ? ? ? ? ì ì ì ì ì ì™ ?r'ØÈnn ì ì ? ?ððC11ÞÞÚÚ € €„ ) ) ) € € Ó Ó pÊ Æ Æ!!ssss Æ Æssàààà …à22 … …22‰‰‰‰ÕÕ((~~ Ñ+ z z(( Ñ Ñ Ñ Ñ ü ü O O ¦ ¦ ¦ ¦ O O ü üSS¼ b¼¼è ;;;;;;‘‘>> ä ä ä ä ä ä ä ä ä ä ä ä Î Î Î Î%% x x xÒÒ-Ö||Ö¼¼¼•;èè ä ä‘‘;;;;èèè ¹ ¹ b b b b ú ú§§§§ ú ú Î Î Î Î%%%%†††† Ù Ù , ,  [[[¶¶[qqqqqq q n nÈÈ ï ïF¡¡ûyyÌÌqq ï ï ï ï ï ïJJÓ xÓÓÓÓ€€UU¨¨ M¨ M¨|||| Ï Ï Ï)þþþþ¨¨U¯mmâúú5ËimÏϼ  ¸¸  ee¸ ]  Ê Ê Ê Ê  Í sK¦KK¢¢OOý¢O õOO¢¢KKSùOOWgL§Ÿ5-ÓÓÓ Ï Ï||&&&&;–;;;;;;;;CC;;;;\\\¶²² / / Ü Ü22 … …ŸŸŸŸHHõ › ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ D Dõõõõ ñ ñL ñ Æ Æ Æ Æss Æ Æõ › › ›H£HH¿ »ii ç ç ç ç 9 9 Œ Œªªªª ü ü ¢ ¢ ø øSSSSSS ¦ ¦ ¦ ¦ ü ü ü ü Ñ Ñ~ $ Í Í zÕ z z z z~ $ Ñ Ñ ü ü ü ü üWª O j j Á Án  j jÅÅ j j ? ? ? ? ? ? ? ? ì ì ì ìGG ì ì j jrÈÈnn™™ ì ìCCC1 Ö11ÚÚ € €„ ) ) ) € € Ó Ó Â p pss{ÖÎsss Æ Æ!!2222 … …2 Ø Ø Ø … … Ü Ü Ü Ü(((( Ñ Ñ~~((((~~ $ $ªªª O ¦ ¦ ¦ O O Oª ¦ ¦ ¦ ¦¼¼ b¼¼¼èèèè;;;;™óF‘‘‘‘‘ ä ä ä ä ä ä ä ä Î Î Î Î x x%%%%--)))ƒnjj;;;; ä ä‘‘;;;;èèèèff b b ú ú§§T ú L§ Î Î Î Î%%ÒÒ††††† , Ù Ù[  ® ® ®qqqq Ä Ä Ä ÄÈ n B BJ¤FFóóqÌqÌJ ï ï ï x x&&-ˆˆ-U ú ú ú ú ú) Ï|| " " Ï ÏQQQQ¨¨ÀÀÇ=,Õ3š3š+{=iÀÀaa   e¸¸      Ê Ê Ê Ê    KKKK¢¢O õ õ õ¢¢OO¢¢KKùùOOªªÛ5ÛÛ€&&€))||€&ÓÓ––èè á;;;èèCC;;è Ž ® ®\\² X / / Ü Ü22 … …ŸŸùù££Põ ñ ñ ñ ñLL ñ ñ ñ ñ ñ ñ ñ ñŸŸõõõõ ñ ñL ñ Æ Æ Æ Æss Æ Æõ › › › îH££tÏÏËpii ç ç ç ç 9 9 Œ Œ O O O O ü ü ¢ ¢ ø øSSSSSS ¦ ¦ ¦ ¦ ü ü ü ü Ñ Ñ~ $ Í Í zÕ z z z z~ $ Ñ Ñ ü üWW üWª j j Á Án  j jÅÅ j j ? ? ? ? ? ? ? ? ì ì ì ìGG ì ì j jrnnnn ? ? ì ìCCC1 Ö Ö Ö € € € €„ ) ) ) € € Ó Ó Â p pss!{ÎsÎÎ!!!!2222 … …2 Ø Ø Ø … … Ü Ü Ü Ü((((++~~((((~~~~ªªª O ¦ O O Oª ¦ ¦ ¦ ¦ b b b¼¼¼èèèè;;;;>™F‘‘‘‘‘ ä ä ä ä ä ä ä ä Î Î Î Î x x%%%%ÒÒ)))ƒnnnjjjj;;;; ä ä‘‘;;;;èèèèff b b ú ú§§T ú L§ Î Î Î Î%%ÒÒ††††† ,  [  ® ® ® ® ®qqqq Ä Ä Ä ÄÈ n B B ïJFFóó Ä ÄqÌqÌ..¤J ï ïÓÓ€€âòL=]]¯U ú ú ú ú) Ï|| " " Ï ÏQQQQ M MeeÇL3š7©7©4ô'kÓieeaa   e¸¸      Ê Ê Ê Ê    KKKK¢¢O õ õ õ¢¢ õ õ¢¢KK ž žOOOO€ÛÛÛ€&&€))||€&ÓÓ––èè;–;;èèèè;;è Ž ® ®\\ X² Z Z Z Z´´b΃@‹{!ss › › îHPõ î îss Æ Æss!! Æ Æss ñ ñŸŸHH › ›Ÿ D D D îHH£|@ Xý9tll » » » » Oª ü ü ¦ ¦ ¦ ¦ z z z z Ñ Ñ Ñ Ñ $ $ Ñ Ñ Ñ Ñ~~ Ñ Ñ $ $ z z(( ø ø øS O O ü ¢ цàà/ÕÕ z Á Ánn j j j j j j Á Á   n Á Ánn Á Á Á Á Á •ðCG ì ì ì j j j j Á Á « « « «XX « € €- Ó Ö Ö ) ) D D ñ ñ ñ ñ ñ ñHH£ý¦¦Lb Z Z Z Z / / Ü Üàà22SSSSSS Ñ+ Ñ Ñ~~~~SS Ñ Ñ~~ Ñ Ñ~~¼¼;;;;>™‘‘èèèè‘‘ ä ä ¹ ¹ ¹ ¹%% x x Ê ÊÒÒÚ‡‡Bè>>>>èèè 7‘ ä ä ¹fÀÀfff ¹ ¹ff%ÒÒ%% x-|||| Î Î|| W² W W² W W W[[ ®FFóó ï ï ï ï n nÈÈ Äyyqqqqqq€&-ˆ=¶!E³«Q ú ú¨¨&&ÓÓ Ï Ï||QQ ¤ ¤ ú ú¨¨q P4ž8­7S4r"ÚI:ŒŒŒŒe ¸¸    ß ß 2Œãã66     ÆÍÍ H H õ õ¢¢¢¢$ Êwww wwwwwwwwww¨¨¨¨þþþþ««Y³Írjjgggg½ c½½½ c Ú Ú Ú Ú ƒÞ Z Z Z Z´´b΃õ@{!ss › ›H£ªPHH   Æ Æss!! Æ Æss ñ ñŸŸHH › ›Ÿ DŸŸH££ý›-34¥3K)Ñ9!l » » » » Oª ü ü ¦ ¦ ¦ ¦ z z z z Ñ Ñ Ñ Ñ $ $ Ñ Ñ Ñ Ñ $ $ Ñ Ñ $ $ z z(( ø øS ø O O ü ¢ ц;¥äÕÕ z Á Ánn ½ ½ j j j j j j Á Á   n Á Á   Á Á ÁðJøG ì ì ì j j j j Á Á Á Á « « « «XX « € €- Ó | | ) ) D D ñ ñ ñ ñ ñ ñ£££ýkzÅb Z Z Z Z Ô‰ Ü Ü … …22SSSSSS Ñ+ Ñ Ñ~~~~SS Ñ Ñ~~++ÙÙ b b;; à•¨F‘èèèè‘‘ ä ä ¹ ¹ ¹ ¹%% x x%%ÒÒÚ4<<÷÷B>>>>èèèB‘ 7 ä ä ¹*ÈÀfff ¹ ¹ff%ÒÒ%% x x||||))|| W²²²² W²²[[ ®FFóó ï ï ï ï n nÈÈ Ä Ä Äyyqqqqqq&€Ó-ˆLTê³Y«Q ú ú M M&&ÓÓ Ï Ï|| ö ö ¤ ¤ ú ú M M¼|!«,-Ù%`ŒŒŒe ] ]ee  ß ß 2Œãã66     Æ s s H H õ õ¢¢¢¢$ Êwww   wwwwwwww¨¨¨¨¨¨¨¨þþþþ««Yû7jggggjj½ c½½½ c44 Ú Ú ƒÞ Z Z Z ZsÎÖÖ! Æss › › ›õ££ › › Æ Æ Æ Æ p pÊÊss!! Æ Æss ñ ñŸŸHH › ›ŸŸŸŸ££ý²$g4¥882õ!liiiiªª ü ü ¦ ¦ ¦ ¦(( z z $~ $ $ $ $ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ $ $((( Í ø ø ¦ ¦ ü ü ü ü~~Ùè/Õ((  nn j j ½ j j ½ ½ ½   Á Á Á Á Á Á Á Á Á ÁnÈnnCJJ™™™ ? j j j j    XX`X þ « «-- € € Ö | ) ) D DŸŸ ñ ñ ñ ñõPP_$G-ÀÝ®´ Z Z Z Z /‰ / / … …22 ¦ ¦ ¦ ¦SS ¦ ¦++ Ñ Ñ~~ Ñ Ñ[­­­S~~ Ñ Ñ Ñ+++¼ b b¼è è° ™>èè;•> ä ä äffff%%%%%ÒÒ-‡â<Dù´Z÷ìì>>;;;;‘ 7 ä ä ¹ ¹fÀÐuf ¹ ¹ ¹ ¹ÒÒ%%% Ê x x Î Î Î Î||||__²²²²[[[[qq à ìFFF ï ï ï ï n n n n Ä Ä Ä ÄqqÌÌ Ä Ä ÄÓ-ÓÓ-ââˆYþþþ¨ M ú úÓÓÓ x Ï Ï)) ö öQQ ú ú ú úiiÏŒŒQAç猌ŒŒ  ] ] ] ]  Œ 2 ß ßãã66      s s õ õ¢¢¢Wý¢wwww Ê Ê w Ê Ê Ê Êwwww ú ú ú ú¨¨¨¨þþ««««³>/r½ ¹ggj½½‡‡‡ -ÞÞ Z Z Z Z s!!! Æss › › ›õHH › › Æ Æ Æ Æ p pÊÊss!! Æ Æss ñ ñŸŸHH › ›ŸŸŸŸHH£X£0–6­6­.Ž›!l     O O ü ü ¦ ¦ ¦ ¦ Í Í z z $~~~ $ $ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ $ $((( Í ø ø ¦ ¦ ü ü ü ü~~~ÙÕ z((nnnn j j ½ j j ½ ½ ½   Á Á Á Á Á Á Á Á Á Á nnnCðð™™™ ? j j j jnn  XX`X þ « « Ó Ó € € Ö | ) ) D D D D ñ ñ ñ ñ ›õõ("ì(®´ Z Z´´ /‰ / /àà22 ¦ ¦ ¦ ¦SS ¦ ¦ Ñ Ñ Ñ Ñ~~++[SSS­~~ Ñ Ñ Ñ+++¼ b¼ b èèèF¡™>èè;•> ä ä äffff%%%ÒÒ-‡<Lc#Í"ˆyaRFF>>;;;;‘ 7 ä äÀfÀÀÀf ¹ ¹ ¹ ¹ ¹ ¹ x x%%% Ê x x Î Î Î Î||||__²²²²[[[[qq à ìFFF ï ï ï ï n n n n Ä Ä Ä Äqqqq Ä Ä Ä Ä Ä xÓÓÓ---Óþ ¤þþ¨ M ú úÓÓÓ x Ï Ï Ï Ï ö öQQ ú ú ú úÀÀmmA猌ŒŒŒŒ  ] ] ] ]  Œ 2 ß ßãã66      s s õ õ¢¢²gWwwww Ê Ê w Ê Ê Ê Êwwww ú ú ú ú¨¨¨¨ ¤ ¤««««YY޽ ¹ggj½½‡‡‡ -ÞÞ ± ± ^^^ ± ± p pss Æ Æ D D DŸ ñ ñ ñ ñ Æ Æ Æ Æssssss!!sss(ŸŸŸŸHH › ›ŸŸ D DŸŸùTÚ ®'s'sP|l e e » » » » ¦ ¦ ø ø ü ü ü ¢ Ñ Ñ Ñ Ñ~~~~ Ñ Ñ Ñ Ñ $ $ $ $ z z z z Ñ Ñ Ñ Ñ ¦ ¦ ¦ ¦ ü üªªÕÕÕÕ(( z znn Á Á Á Á Á Á j j j j j j Á Á Á Á Á Á   j j   Á Á ì ì ì ìð • • • Á Á  X þ « «XXXX Ö Ö Ö Ö € € € € D D — ñH îHH ñ ñL¦¶¦¸^ ± ± ± ±^^2222à … … …SS ¦ ¦ªª ü ü z z((~~~~SS üWªª Ñ Ñ Ñ Ñ z z((j ¹ ¹;;;;‘ì>>;; è‘‘ ä ä¼¼ b b Î)ÖÖÖÖÖÖƒÞÞí®%'/û4 4w/ #Œ¸Nó™>‘‘‘‘èè;;¼¼¼¼ b b µ ¹ ¹ff Î Î|| x x x x Î Î Î))) Πβ²[[²² ™ ™FFó ™ ™ ™ n n Ä Äqqqq Ä ÄÈÈ&&&€Ó-ÓÓQQþþþþQQ Ï Ï Ï Ï| " " " ¤ ¤ ¤ ¤QQQQ¸¸¸¸¸¸ãããã ß ßŒŒ ´ ´ ´ ´ Y Y ´ ´66666ÍÍÍ s    ù ž žù½cSÍÍÍÍÍÍÍÍww Ê Ê Æ Æ ú ú¨¨QQQQ ú ú úUþþ««½jjgg ¹jggggâ‡ Ú Ú‡â ± ± ^^^ ± ± p pss Æ Æ D D DŸ ñ ñ ñ ñ Æ Æ Æ ÆssssÎÎ!!ssssŸŸŸŸHHõõŸŸŸŸŸŸŸùË€55|Çl e e » » ¦ ¦ ø ø ü ü ü ¢ Ñ Ñ Ñ Ñ~~~~ Ñ Ñ Ñ Ñ $ $ $ $ z z z z Ñ Ñ Ñ Ñ ¦ ¦ ¦ ¦ ü üªªÕÕÕÕ‚‚ z znn Á Á Á Á Á Á j j j j j j Á Á Á Á Á Á   j jnn Á Á ì ì ì ìð • • • Á ÁnnX þ « «XXXX Ö Ö Ö Ö € € € € D D — ñH îHH ñ ñ ñL¦¦L¦¸^ ± ± ± ±^^2222 …à … … ø ø ¦ ¦ O O ü ü z z Í Í~~~~SS[[W üªª Ñ Ñ Ñ Ñ z z((jjj ¹ ¹ ¹ ¹;;;;‘ì>>;; è‘‘>>¼¼jj¼¼jj Î)ÖÖÖÖÖÖƒÞ8H"r1V6À87,7,1 ×óó™‘‘‘‘èè;; b b¼¼ b b µ ¹ ¹ff Î Î|| x x x x Î Î Î) ΠΠΠβ²[[ ® ®²² ™ ™FFó ™ ™ ™ n n Ä Äqqqq Ä ÄÈÈ&&&€Ó-ÓÓQQþþþþQQ Ï Ï Ï Ï| " " " ¤ ¤ ¤ ¤QQ««¸¸¸¸¸¸¸¸ãããã ß ß 2 2 ´ ´ ´ ´ ´ ´ ´ ´66666ÍÍÍ s    ù ž žùSSSùÍÍÍÍÍÍÍÍww Ê Ê Æ Æ UU¨¨QQQQ ú ú úUþþ««½jjgg ¹jggggâ‡ Ú Ú‡â  ^^^^ ± ± p p Æ Æ Æ Æ ñ ñŸŸ D D ñ ñ Æ Æ Æ Æss!!(ÎÎÎss Æ ÆŸŸŸŸHHHHŸŸŸŸŸŸŸùËËx e e » » ø ø ¦ ¦ O O ü ü Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ $ $ z z z z Ñ Ñ Ñ Ñ ¦ ¦SS üWWWÕÕ‚‚ÕÕÕÕ Á Ánn Á Á Á Á j j Á Á Á Á Á Á f Á j jnn   ì ì ì ì è è • • Á Á Á Á jÅ j j « « « « « « Ö Ö ) ) € € € € ñ ñ ñ ñ › ›HH D D ñLùùLL^^ ± V ^ ± ± … … Ø222 … … ¦ ¦ ¦ ¦ ü ü ü ü z z z z Ñ Ñ~~S­µµW üªª~ $ Ñ Ñ z z((¼¼¼ ¹ ¹ff;; è ä ä ä ä >>쑼¼|Ö))ƒƒƒƒƒ8@_+ì6À888‡8‡4w%”¸N¡F>>>>••èè¼ b b b¼¼ b b b b ¹ ¹ ¹ ¹ Î Î|| x x Ê Ê ! ! Î)|Ö|| ²   ² ® ® ® ®²² mÇóóFFFFFF n n Ä Äqqqqq uuÈÈÈÈÈ nÓ x&€ÓÓ x xQQQQþþ ¤þ|||||| Ï Ï ¤ ¤þ ¤ ¤ ¤QQ¸¸ e¸¸  ‰ ‰66 ß ß ß ß ´ ´  aa ´ ´666666   {Í s  KKKKùùKKÍÍÍÍÍÍ{{$ Ê w   Æ ú ú ú úQQQQ¨ M¨¨þþþþj½ cgggg½½gg ¹4 Ú‡‡‡‡  ^^^^ ± ± p p!! Æ Æ ñ ñŸŸŸŸ ñ ñ Æ Æ Æ Æss!Ö݃((ÎÎ!!ŸŸŸŸHHHHùùŸŸŸŸŸ®€Ëÿ¿ e e » » » » ø ø ¦ ¦ O O ü ü Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ~~ z z z z Ñ Ñ Ñ ÑSS üW±f?Š‚‚ÕÕÕÕ Á Ánn Á Á Á Á j j Á Á Á Á Á Á Á f j jnn   ì ì ì ì è è • • Á Á Á Á jÅÅÅ « « Ö Ö„„ € € € € ñ ñ ñ ñ › ›HH D D ñLù®[¸  ± V^¸ ± ± … … Ø222 … … ¦ ¦ ¦ ¦ ü ü ü ü z z z z++~~­SW üªª~ $ Ñ Ñ z z((¼¼¼ b ¹ ¹ff;;è ä ä ä ä ä ä‘ 7¼¼|Ö))ƒƒƒƒƒ8›)76À887,7,7,*þ¸N¡F>>>>••èè b¼¼¼¼¼ b b b b ¹ ¹ Î Î|| x x%%|| Î)|Ö||² g ²²² mÇóóFF ì ìFF n n Ä Äqqqqq ÈÈÈÈÈ n xÓ&€ x x x x ö öQQþþ ¤þ|||||| Ï Ïþþþ ¤ ¤ ¤QQ¸¸ e¸¸  ãã66 ß ß ß ß ´ ´aaaa ´ ´66666666   {Í s  KKKK ž žKKÍÍÍÍÍÍ  $ Ê w  { ú ú ú úQQQQ¨ M¨¨þþ ¤ ¤ µ c½gggg½½gg ¹4 Ú‡‡‡‡ ñ ñŸŸõõH î Æ Æ Æ ÆÊ p Æ Æs  Æ Æ  ^^^^bi. Mòˆ¸¸¸ Ü Ü Ü Ü22226 Ü Ü ÜààïÃÎU˜˜˜= ”î”” 9 9 ç ç ç ç ç ç ””””””AA 9 9 ç ç ==iiii)ý$éœA˜=== ì ì ì ìCCð • • • • • ì ì™™- Ó Ó- € € € € € €------\ T T T T¯ T T T\¯¯ ì ì ì ì ì ì ? ? j j j j Á Á Á Á^^^  Z´ ± ± ± ¼Û úP ›HHõõ › ›  s   Ñ Ñ $ $((((Õ z zÕ‚‚‚‚iiii¿¿==== ç ç ç ç|| Î Î%%%%ÒÒ%% x x x x ;;; à ;; ä ä‘‘ ú ú§§P«¯ {"ô328œ7B8œ7B3à"Gd§ýýýý§§ ú úff ¹ ¹ b b b b ¹ ¹ff¼¼ ¹ ¹ ¹ ¹j ¹ ¹ff4 Ù4Ž––44ŠŠÝÝ0000 ® ®ó ™ ™ ™FFFFqqqq ï ï ï ï ï ï ï ï ¹gg ¹ ¹ ¹ ¹gggg;;;;;;;;$$$$ÍÍ  ùùKK ž žùùwwww  ÍÍ(Í  ÍÍÍÍaa ´ ´aa  ¸¸aaaa:”: ß 2Œ ß ß¸¸ ]¸aaaa å å’’;; Ž Žj Ž Ž Žè å å’’½½½½ c½½½ ® ñ ñŸŸ › ›H î Æ Æ Æ Æ pÊ Æ Æs  Æ Æ  ^^^^b¼y$\1å3@,{òȸ^^ Ü Ü Ü Ü22226 Ü Ü ÜààïY¿ú˜˜˜= ”î”” 9 9 Œ Œ ç ç ç ç ”””””” ç ç 9 9 ç ç ==iiii„%Â-œA˜=== ì ì ì ìCCð • • • • • ì ì™™- Ó Ó- € € € € € €------\ T T T T¯ T T T\¯¯ ì ì ì ì ì ì ? ? j j j j Á Á Á Á^^^  Z´ ± ± ± b&ÌP ›HHõõ › ›  sss Ñ Ñ $ $((((Õ z zÕ((((iiii¿¿==== ç ç ç ç|| Î Î%%ÒÒ%% x x x x ;;; à ;; ä ä‘‘ ú ú L LP«««T¯¶kŠ-È5ç7B432) (d¯§ýýýý§§ ú úff ¹ ¹ b b b bff¼¼ ¹ ¹ ¹ ¹jff4 Ù Ù4áá4400ÝÝ0000ó ™ ™ ™FFFFqqqq ï ï ï ï ï ï ï ï ¹ggjj ¹ ¹ ¹ ¹gggg;;;;;;;;$$$$ÍÍ  ùùKK ž žùùwwww  ÍÍ(Í  ÍÍÍÍaaaaee¸¸aaaa”: ß … 2Œ ß ß¸¸¸aaaa å å’’;; Ž Ž µ Ž Ž Žè å å’’½½½½ c½½½ ® D D ñ ñ î î › › Æ Æ Æ Æ pÊssss Æ Æ   ^^¸b=1å7O8ª6¢)uf ± ± Ü Ü Ü Ü22226 Ü Ü Ü2:ïM˜ëëë ==”” ç ç==== ç Œ ç Œ ç ç 9 9 ç ç 9” ç ç ç ç 9”””==ëëiiii!æ³I”== ì ì ì ìCCððCCCC ? ? ?™- Ó € € € € € € € €-ˆ € € € €¯ T T T T¯¯¯ T T ? ? ì ì ì ì ? ? j j j j Á Ánn ± ±^^ Z Zb ± ± ±fbbõ › › › › › › › pÊ  s Æ Æ Ñ Ñ $ $ z z z z(((( z z(( » » » » e e==== 9 9 ç ç| ! Î Î%%%%% x x xÒ%% à;;;è à à ä ä‘‘ ú ú L L««««\¶Æ ?/#.v-)¹"ô(d ¯TTýýýýTT ú ú ¹ ¹ b¼ ¹ ¹ f b b b bffffjjffff Ù Ù††ááᆠ‚Ý00ÝÝÝÝ[[¶¶ ™ ™FFó ™FFuqq ï ï ï ï B ï ï ¹ ¹ ¹ ¹½½gg ¹ ¹gg ¹;;;;;; Žè½½½½wwww Æ {KK ž žKKù žwwwwÍÍÍÍ{{{{Í s{{¼aaaa¼aa¸¸¸¸aaaa:: ß ß ß ß 2Œ¸¸¸¸aaaa å å’’;; Ž Ž;;èè å å å å½½½½½½`²²\\ D D ñ ñ î î › › Æ Æ Æ ÆÊ pssss Æ Æ   ^^¸b˜3@8ª:6¢+Î*f  Ü Ü Ü Ü2222 Ü6 Ü Ü2àà˜˜ëëë ==”” ç ç==== ç Œ Œ ç ç ç”” ç ç 9” ç ç ç ç 9”””==ëëiiii¿¿lÇîî””== ì ì ì ìCC • •CCCC ? ?™ ? Ó- € € € € € € € € Ó- € € € €¯ T T T T¯¯¯¯¯™™ ì ì ì ì ? ? j j j jnn ± ±^^ Z Zb ± ± ± ±´´õ › › › › › › ›Ê%ws  Æ Æ Ñ Ñ $ $ z z z z(((( z z Í Í » » » » e e====”” ç çÖ| Î Î%%%%% x x xÒ%%;•;;è à à ä ä‘‘ ú ú§§««««\¶ÆŠ’80 d ¯TTTýýýý ú ú ú ú ¹ ¹ ¹ ¹ b¼ ¹ ¹ f b b¼¼ffffjjjjffff Ù Ù††ááᆠ‚Ý00ÝÝÝÝ[[[[ ™ ™FFó ™FF À Ä Äqq ï ï ï ï B ï ï ¹ ¹ ¹ ¹½½gggg ¹;;;;;;è Ž½½½½wwww{  {KK ž žKKù žwwwwÍÍÍ‚ÕÕÕÕ(ÍÕÕ¼aaaa¼¼¼¸¸¸¸aaaa ß ß ß ß ß ß 2Œ¸¸¸¸aaaa å å’’;; Ž Ž;;èè?? å å c c c c½½`²²\\ › › › › î îHHss Æ Æ   Æ ÆÊÊ Â ± ±^^iˆ(l3—3—04!Qu ^^ Ü Ü Ü Ü Ü Ü Ü Ü Ü Ü‰‰6 ܉‰ëëëë == ç ç ç ç==== ç Œ Œ ç ç ç””= ã ã ã ç ç ç ç ã ã ç ç ç ç ëë””””i  » » e e¿¿==ë == ?™™ô™™ ? ? • •CC™™G ì„„ ) ) Ó Ó Ó Ó € €-- ) ) ) ) « « « « T¯ « «XX¯¯¯¯Jððððð • •nn Á+}È Á ± ^^ ± ±^^ ± ± ± ±  ^^HH › › ›õHHÎÎ!! p p((Õ z z z z z Ñ Ñ $ $ $ $ $ $ » » » » » » » » ç ç”” ë==%%%%%%%%%%% Ê|| Î Î;• ; à ä ä ä ä èè ú ú L§TT`¾s  k ¯ýýPPT úT ú £ £ý £¼¼ b b ¹ ¹ ¹ ¹ b¼ b bff ¹ ¹¼¼¼¼fÀnÀÀ ¹ Ù Ù††á , ,††† Ù ÙÝÝ00 B ï ï Ä Ä ÄÌqÈÈ Ä Ä Ä Ä ï ï ï ï ™ ™ ™ ™gg ¹ ¹ ¹ ¹gg ¹ ¹ÁÁjj’’ å å’’’’ggggjjjwwwwÍÍ  KKKKKKKK$ Ê Ê ÊÍÍŠôììì7$$$aa      ´aaŒŒ ß ß66 ‰ ‰  e     å å 7’;;;; c c½½½½;; á á’’ å å ¹ ¹gg ¹ ¹²² › ›õõHHHHss Æ Æss Æ ÆÊÊw ± ±^^´i.I!þç"À ^^ Ü Ü Ü Ü Ü Ü Ü Ü Ü Ü‰‰6 ܉‰ëëëë == ç ç ç ç==== ç Œ Œ ç ç ç 9 9= ã ã ã ç ç ç ç ã ã ç ç ç ç ëë””””i  » »¿¿¿¿==ë ==™ôô™™™ ? ? • •CC™™ ìG„„ ) ) Ó Ó Ó Ó € €-- ) ) ) ) « « « « T¯ « «XX  ¯¯ðJJJððððnn¤œÈ Á ± ^^ ± ±^^ ± ±    ^^HH › › ›õHHss!! p p((Õ z z z z z Ñ Ñ $ $ $ $ $ $ » » » » » » » » ç ç”” ë==%%%%%%%%%%%||))•; •; ä ä ä ä ú ú L§TT§§«««dd¶\ ¯ýýPPT ú úTýý £ý¼¼ b b ¹ ¹ ¹ ¹ b¼¼¼ff ¹ ¹¼¼¼¼fÀnÈn Ù Ù†††† ,†††44ÝÝ00÷÷ B ï ï Ä Ä ÄÌqÈÈ Ä Ä Ä Ä ï ï ï ï ™ ™ ™ ™gg ¹ ¹ggÑzÅj’’ å å’’’’ggggjÅjwwwwÍÍ  KKKKKKKK$ Ê Ê ÊÍÍŠôG± fG$$$ ´ ´aa  ¸¸    ´aaŒŒ ß ß66 ‰ ‰  e   ee å å 7’;;;; c c½½½½;; á á’’ å å ¹ ¹gg ¹ ¹ X XHHõPPõõ ›sss  Æ Æs  p p%%ÊÊ^^^^´ÄÈÈÀff ± ± Ü Ü‰‰‰‰‰‰ Ü Ü‰‰‰‰‰‰ë똘==ëë ç ç ç ç ç ç ç ç 9 9 9 9 ”””” ã ã ç ç ç ç====””A ç » » i e e==ë 6 ==¡±ô™™™™CCð • ì ì ì ì Ö Ö Ö Ö € € € € €Ú--„ ) Ö Ö « « « «XXX³¾ ¯CJJððCCn#v Á Á Á ± ± ± ± ± ±^^ ± ^^   ± › ›HHHHHHssss  z z z z z z z z Ñ Ñ v v Ñ Ñ Ñ Ñi  » » » » » » 9 9 ç ç====ÒÒ%%%ÒÒÒÒ))1›÷B;;èè;; ä ä ä ä à à;; ú ú ú ú úTT úP«««\\¶¶¯¯ýýPP ú ú ú úPP £ý ¹ ¹ ¹ ¹ b¼¼¼ ¹ ¹ff¼¼jn}ØÈÀ Ù Ù Ù Ù Ù Ù††††44ÝÝ00JJ ï ï ï ï Ä Äqqqq ÄÈÈqqqq÷÷ó ™FFgÁ ¹Á†¥óÔj’’’’’’’’ggggÅÔ½ww Ê Ê  s s ž ž ž ž ž ž ž ž Ê ÊwwÍÍ(ÝÝìG’Ñwww ´ ´aa        aaaa ß ßŒŒ666e   ] ]  7 7 å å;;;; c c½½½½½½èè;;’’ å åggggggHHõºõsss  Æ Æs  p p%Ú4¸¸^^´¸¸f  ± ± ± Ü Ü / / /䉉 Ü Ü‰‰‰‰‰‰ëë====ëë ç ç ç ç ç ç ç ç 9 9 9 9 ëë”””” ã ã ç ç ç ç====””A ç » » i e e ã ã ==¡±ô™™™™ð • ì ì ì ì Ö Ö Ö Ö € € € € €Úˆˆ )„ Ö Ö « « « «XXX³d¾ ¯CJJððCC Á Ánn ± ± ± ± ± ±^^ f^^   ± › ›HHHHHHssss  z z z z z z z z Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñi  » » » » » » 9 9 ç ç====ÒÒ%ÚÚÒÒÒÒ Î Î‹ª••èè;; ä ä ä ä;;;; ú ú ú ú úTT úP«««\\¯¯ýýPP ú ú ú úPP £ý ¹ ¹ ¹ ¹¼ b b b ¹ ¹ff¼¼j#÷,Ú'pÀ44 Ù Ù Ù Ù†††† Ù ÙÝÝ00JJ ï ï ï ï Ä Äqqqq ÄÈÈqqqq÷÷ó ™FFgÁ ¹gvJ0=/æ¨zÅìì’’’’’’ggggjŽww$$  s s ž ž ž ž ž ž ž ž Ê ÊwwÍÍ(((‚‚‚Ñwwwaa        aaaa ß ßŒŒ666e   ] ]  ’’ å å;;;;½½½½½½½½èè––’’ å åggggggÊÊù%Í%Íé%õõHH › › › ›ÊʃW í‘‘‰‰66ä丸^^ ± ± ± Z Z Z Z ± ± ± ±´ Z´´==== == e e e e e e e e »iitl · e e e e  iiii » 9 9”” Œ Œ ç ç ç ç 9”ôôGG™ ? ì ì j j Ö Ö Ö Ö--ˆ Ó Óˆ5Ú---- « «¯¯¯   ·ðJÿJ™™™™ ì ì ì ìCCðð Ü Ü Ü Ü Ü Ü /‰2à …66‰‰ p p ÂHHHH D D D D $ $ $ $ z z((Õ z zÕ Ñ Ñ $ $AA ç ç ç ç 9 9 · » » »%%Ò--<žDÞ)||ÒÒ4Ìjj b b¼¼ b¼ ú ú ú ú§§TTýýPP««XX||||ÖÖ| ! £ £ £ £ ú ú ú ú;;;; ¼ bffffjj¼¼&# +0“*|‰¼ ® ® W²²²²²[[ ® ®FFóó ï ï n nÈÈqqqqÈÈ ï ï÷NóFF½½½½nn½rì%À(JÑ+¡ì’’’’’’ _gg½ ñKKK H H H H$$ww s s Æ ÆwwwwÍÍÍÍwÑÑÑÍÍ  66ã ‰ ‰ ‰ ‰ ‰ŒŒ ß ß ß ßççe ¸¸    ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰’’ å å;;;;gggg½½ôôš?’’’’gg ¹gggg0000 ƒ ƒÊÊ®,‘/F®õõHH › › › ›ÊʃW"Á¢ë6‰‰ Ü Ü‰‰^^^^ ± ± ± Z Z Z Z ± ± ± ±´ Z Z Z==== == e e e e e e e e »iitÏÇ¿¿ e e  iiii » 9 9 9 9 ç ç ç ç ç ç 9”™™GG™ ? ì ì j j Ö Ö Ö Ö------Ú € Ó Ó--¯¯ T¯¯¯\\JZ¥™™™™ ì ìGGCCðð Ü Ü Ü Ü Ü Ü‰ /2à … Ü Ü‰‰ p p ÂHHHH D D D D $ $ $ $ z z((Õ z zÕ Ñ Ñ $ $ ç ç ç ç ç ç”” · »%%Ò-—$z-F)7ýÞÖÖÒÒ%%¼¼ b b¼¼¼ b ú ú ú ú§§ ú úýýPPPPýý||||||| ! £ £ £ £ ú ú ú ú;;;; ¼ bffffjj¼¼që>Ô¼ ® ®² ²²²²[[¡¡NN ï ï n nÈÈqqqqÈÈ ï ï÷Nó¡¡½½½½ ¹ ¹Í‚†Ñ+ð ¡’’’’’’ ¹ ¹gg c½K ñKK H H H H Ê ÊwwÍÍ  wwwwÍÍÍÍwÑwwÍÍ  66ã ‰ ‰ ‰ã㌌ ß ß ß ßŒŒe ¸¸    ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ 7 7 å å;;;;gggg½½ô©ô å’’’’gg ¹gggg0000 ƒ ƒ pÊ%¦¦áÒ£HHH › › › › p pÎÝ‹Öä‰ Ü Ü Ü Ü^^ ± ±   ± ± Z Zb ± ± ^ ã=== e e e e== ã ã » » » »lll e eiiii » » » » ç ç 9 9====”” ç ç 9 9””™™™™ ì ì ì ì j j j j Ö Ö Ö Ö------- Ó Ó Ó--¯ »³X\\­ZJ ì ì™™ ì ì ìGøJð‰ / Ü Ü Ü Ü6 Ü2222 Ü Ü‰‰ p p p p ›õHH ñ ñ D D $ $ $ $ z z z z z z( Í $ $~ $” 9 9 9 ç ç ç ç e¿¿¿iiii%%ÚS/û5e2°"8))%% x x¼¼¼¼ b b b b b bTT§§ ú ú ú ú £ £PPPP £ £|||| Î Î Î Î £ £ £ £ ú ú ú ú;;è  b b µ¼¼ffjÄ b¼Äq²²_[[[[²²[[¶¶N ûJJ ï ïuuJJNóóN½½½ ¹ ¹ ¹jjÅÅÉ~¡Gì’’’’’ ¹ ¹ ¹ c cKK ž ž H¢ õ õ Ê Ê Ê Ê  ÍÍ Ê Ê Ê Ê  ÍÍwwww{{  66 ‰ ‰66ãã ß ßŒŒŒŒŒŒ        666666 ‰ ‰ 7 7 å å Ž Ž á; ¹ ¹ ¹ ¹ µ µ c½ìG??’’?šÁÁgggg000000 pÊ p%,,Òw£HHH › › › › p psÎ{{‰ / Ü Ü Ü Ü Ü Ü^^ ± ±   ± ±´´ ­ ± ± ^ ã=== e e e e== ã ã » » » »l e eiiii » » » » ç ç 9 9====”” ç ç 9 9””™™™™ ì ì ì ì j jrr j j Ö Ö Ö Ö------- Ó----¯ p ³\\CJð ì ì ? ? ì ì ìG¥J‰ / Ü Ü Ü Ü Ü Ø Ø22 Ü Ü / / p p p p ›õHH ñ ñŸŸ $ $ $ $ z z z z( Í $ $~ $” 9 9 9 ç ç ç ç¿ e¿¿iiii%%%D#Í*‘'Üýƒ Î Î%% x x b b¼¼ b b b b b b ú ú§§ ú ú ú ú £ £PPPP £ £|||| Î Î Î Î £ £ £ £ ú ú ú ú;;è µ µ b b µ¼¼ÀÀj¼¼¼j¼¼¼²²_[[[[²²[k ]]eVJJJJuuuu÷÷JJó ™óN½ c½½ ¹ ¹ _ ¹jjjjÁÁnnGìì’’’’’ ¹ ¹ ¹ c cKK ž ž H¢ õ õ Ê Ê Ê Ê  ÍÍ Ê Ê Ê Ê  s swwww    66ãã66ãã ß ßŒŒŒŒŒŒ        666666ãã’’ å å Ž Ž á; ¹ ¹ ¹ ¹ c½ 7’??’’š©+vgggg000000 p p pÊ!!ssõ › › › › ›HH p pww222222à … ± ±   Z Z ± ±^^ ± ± ± ± ± ± ± ± ã ã ==¿¿¿ e e e ==”” Œ Œ · · e eiiii e eiiiiii » » » » ã ã ç ç ç çëëë ã===™™™™CCCC Á Ánn Á Á Á Á Ö Ö Ö Ö Ö Ö„„ Ö Ö Ö Ö--Ú €\\``³X¯¯ þ þ « « ìG™™ ì ì ì ì ì ì™ô^mV¡2 … … / / / / Ü Ü Ü Ü … … Ø Ø s Æ l   p p ñ ñ ñ ñŸ DŸŸ Ñ Ñ Ñ Ñ z z(( $ $~~ Ñ Ñ Ñ Ñ ç ç çA== iiii » » » x x xÒÞíPõ‹Ö||%%% Ê ¹ ¹ ¹ ¹¼¼ ¹ ¹ ¹ ¹ ¹ ¹ff £ £ £ýPP £ £ ú ú§§ýýPPÒÒ x x x x%% £ £ £ £ ú ú ú ú;;;;;;;; µ µ b b ¹ÀÀj µj¼¼¼¼ffff[[[[_²²²²²²__n ÷€¬÷¡¡¡¡ÈÈqquu##ûûNóJJ ¹gg µj½½½½½š?’’;;èègggg ¹ ¹gg¢¢¢¢KK ž žww Ê Êww Ê Ê        w Ê Ê  s s6666ŒŒ ß ßŒŒŒŒ666    ¸¸  ŒŒ ß ß: ß ß ß? å å å Ž Ž;; ¹ ¹ ¹ ¹½½’’??èèø&"Á0000 Ú Ú p p pÊ Æ Æssõ › › ›õõHH p p222222à … ± ±^^ Z Z ± ±^^ ± ± ± ± ± ± ± ±==ëëëë==¿¿¿ e e e ==”” ç ç · · e eiiii¿¿iiiiii » » » » == ç ç ç ç ë ã===™™™™CCCC Á Ánn Á Á Á Á Ö Ö Ö Ö Ö Ö ) ) | | Ö Ö--Ú € « «³X¯¯ þ þ « « ìG™™ ì ì ì ì ì ì ?™ôNüüBçàà‰‰‰‰ Ü Ü Ü Ü … … Ø Ø s Æ l   p p ñ ñ ñ ñŸ DŸŸ Ñ Ñ++ z z((~~~~ Ñ Ñ Ñ Ñ ç ç çA== iiii » a » » x x xÒ)ƒÖ1ÖÖ||%%% Ê ¹ ¹ ¹ ¹¼¼ ¹ ¹ ¹ ¹ff £ £ £ýPP £ £ ú ú L L £ £PPÒÒ x x x x%% £ £ £ £ ú ú ú ú;;;;;;;; µ µ b b ¹ÀÀj¼¼¼¼ffff[[[[_²²²²²²_¹~+Ë3ê1Î$ER¡¡FFÈÈqquu#ØVV¨÷÷JJnggjj½½½½ c½? å’’;;èègggg ¹ ¹gg¢¢¢¢KK ž žww Ê Êww Ê Ê        w  Ê Ê  s s6666ŒŒ ß ßŒŒŒŒ666    ¸¸  ŒŒ ß ß: ß ß ß å Š å å Ž Ž;; ¹ ¹ ¹ ¹½½’’ å åèèøq ¬èÁjjjj0000 Ú ÚÊ p pÊ Æ Æ Æ!H£õõHHHH  p p …àà …2222^^ ± ±^^ ± ± Z Z ± ± ± ±^^ ^ëEEE˜=  · e e == ç ç” 9 e e » » » » e¿lÇx » » » » » » ç ç ç ç ã= == ì ì ì ì • • • • Á Ánn Á Á Á Á )„„ ) ) ) ) ) ) ) Ö Ö € € € € T TXXXX¯¯ T TXXXX™™™™ ì ì ì ì ì ì™™GGôaœ2 Ü Ü Ü Ü Ü Ü Ü Ü … … … +   Æ Æ p pŸ D ñ ñ D D ñ ñ Ñ+~ $(( z z~~ Ñ Ñ Ñ Ñ~ $ 9 9 ç ç== » » » » » » » » x x x x||ÖÖ|| Î Î%% x x ¹ ¹ ¹ ¹¼¼ ¹ ¹ ¹ffff £ £PPPP £ £ L L ú úPPPP x x Ê%Ò x £ £ £ £ ú ú ú ú;;;; ;• µ¼¼ff¼¼ ¹ ¹ ¹ ¹¶[ ® ®²²²²__²²_Á•/Û6Ÿ5Ý%ŸY¤óóó ™ÈÈÈÈÈÈy}}*ßee¸¨÷÷JJÁÁggjj½ cj’’ å åèè;; ¹ ¹ ¹ ¹ ¹ ¹gg õ õ õ õKK ž žww$$Ñwww      ÍÍwwwwÍÍ{{6666ŒŒ ß ß ß ß ß ß6ãã      eeŒŒ ß ßŒŒ ß ß 7 7 å å Ž Ž Ž Ž ¹ ¹ c½½½? å’’––ðKÑvnnÅj½½ÞÞ ƒ ƒ Ú ÚÊ p  p Æ Æ!{ý£õõHHHH  p p …àà …2222^^  bb^^ ± ± ­ ­ Z Z ± ± ± ±^^¸^ëEEE˜=  · e e == ç ç” 9 e e » » » »¿!æL=%p » » » » » » ç ç ç ç ã= == ì ì ì ì • • • • Á Ánn Á Á Á Á )„„ ) ) ) ) ) ) ) Ö Ö € € € €\\¯¯XXXX¯¯¯¯XX þ þ ? ? ? ? ì ì ì ì ì ì™™GGôNœB2 Ü Ü Ü Ü Ü Ü Ü Ü … … … +   Æ Æ p pŸ D ñ ñ D D ñ ñ Ñ+~ $(( z z~~ Ñ Ñ Ñ Ñ~ $ 9 9 ç ç== » » » » » » » »ÒÒ x x ! !|||| Î Î%% x x ¹ ¹ ¹ ¹¼¼ ¹ ¹ ¹fff £ £PPPP £ £§§ ú úPPPP%% x x Ê%Ò x £ £ £ £ ú ú ú ú;;;; ;•j¼¼ ¹ ¹ff¼¼ ¹ ¹ ¹ ¹[¶ ® ®²²²²²²_ vB'¼&úÛY¤óóó ™ÈÈ n nÈÈuuy#Ø:ïÏϬ÷JJgggg½ cj’’ å åèè;; ¹ ¹ ¹ ¹ ¹ ¹gg õ õ õ õKK ž žww$$Ñwww      ((wwwwÍÍ{{6666ŒŒ ß ß ß ß ß ß Û6ãã        ŒŒ ß ßŒŒ ß ß’’ å å Ž Žèègg ¹ ¹ c½½½? å’’;;;–Áj c cÞÞ ƒ ƒ Ú Ú / / Ô /‰ä‘ûáw p p   Â   Æ Æ Ñ Ñ Ñ Ñ((((SSSSªª ü ü ¦ ¦ ø ø ¦ ¦ ¦ ¦SS ¦ ¦[[àà3~++ Ñ Ñ z z z z $ $ $ $ » » » » » »ii » »_~+1„)e̪ªªª O ü ü ç ç” 9 == 9” 9 9 Œ ç ç çr Á Ánn™™ ì ì ì ì ì ì™ ? ? ? ì ’ ä ? Á Á Á Á Á Á  11 Ö Ö )„ Ö ÖXXXX j j   j j j j ì ì ì ì™™™™˜ò˜= ç Œ 9 9 ç ç 9 9 ¦ ¦ ¦ ¦ ¢ ü ü ü~ $ $ $((((”””” ”” ç Œ 9 9 9 9 e e e e e e e eccc cc ¶ ¶åååå88 ‹ ‹"""" Ì Ì Ì Ì u u uÏ u u"" nn  j j nnnnn Á Á Á Á Á ÁCCCC ? ?™™ððCCCC •ðnn Á ÁÅÅÅÅ™™ ì ì ? ? ?™rr j j jÅCC •ðCCðð„9î£\MMŸŸŸŸËËtttt EŸMM£³ÂÒ!¾!¾TêÚ%xxŠŠ77ŠŠŠŠ^^^^ ± ± ± ± p p Ç Ç!!Ÿ E ò òIIII ¬ ¬YYYYYY´´ ¬YYšš í íššôôš ?ššžCžCooooÅÅCCC é í íGGCCCCšš í í k k c c ¹è Ž;; å å 7’¨ M ú ú¨¨¨¨«þþU ú M¨\\ ® ® X X / / Ô /‰ä6ë,w   p p   Â   Æ Æ Ñ Ñ Ñ Ñ((((SSSSªª ü ü ¦ ¦SS ¦ ¦ ¦ ¦SS ¦ ¦µ´´CÙ++ Ñ Ñ z z z z $ $ $ $ » » » » » »ii »p_¹~+6î.Ϫªªª O ü ü ç ç” 9 == 9” 9 9 Œ ç ç ç ½ ½ ½ Á Ánn™™ ì¡¡¡ ì ì™ ? ? ? ’ 7 ä ? Á Á Á Á Á Ánn Ö Ö Ö Ö )„ Ö Ö þ þXX j j j j j j j j ì ì ì ì™™™™˜== ã A ç 9 9 ç ç 9 9 ¦ ¦ ¦ ¦ ¢ ü ü ü~ $ $ $((((”””” ””A ç 9 9”” e e e e e e e eccc cc ¶ ¶ ‹ ‹ ‹ ‹88 ‹ ‹"""" Ì Ì Ì Ì u uÏ u u u"" nn rr j jnÈnnnn Á Á è è è è ? ?™™ððCCCC •ðnn Á ÁÅÅÅÅ™™ ì ì ? ? ?™rrÅÅÅ jCC •ðCCðð„„ÞÞ§§ ò òŸŸ E EËËttttŸúMMþX‡'()Ý#ùÚÒÒää77ääää^^^^  ± ± p p Ç Ç!!Ÿ E ò òIIIIYYYYYYYY ¬YYšš í íššššš ?šOøžžCooooÅÅCCžC í íGGCCCCšš í í k k½½ ¹è Ž;; å å 7’¨ M ú ú¨¨¨¨«QþþU ú M¨\\ ® ® X X / / Ü Ü Ü666w p p   p pss Æ Æ~~ Ñ Ñ((((SSSS üWªª ¦ ¦SS ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦S­r%U.M,òà†+~~ z z z z Ñ Ñ Ñ Ñ      iiiiÃÃ_¹Á:']!ój[W üªª ü ü ü ü ç ç ç ç == ç ç 9” 9”” 9 ½ ½ jÅÈnnn ì ìG±fVGG ì ì ? ? ? ä ä ? Á Á Á Á  nn Ö Ö ) ) Ö Ö Ö Ö « «XX j j ½ j j ì ì ì ì ì ì ì ì== ==== ç ç 9 9” 9 9 9 ¦ ¦ ¦ ¦ ü üªª $ $ Ñ Ñ((‚( ç ç ç ç==== ç ç”” 9 9 ç ç¿¿¿¿¿¿¿¿¿¿ ¶ ¶cccc ¶ ¶ ‹ ‹ ‹ ‹ ‹ ‹88 uÏ"" Ì Ìy  È}"" u u""nnnnÅ jÅÅÅ j jnn j jnn • • • • ì ì ì ì • •ððð • • •nn Á ÁÅÅÅÅ™™ ì ì ì ì ìGÅÅÅÅÅÅ ½ •ðCCCCðð„„11M òŸŸMM ò òËËttttMMúúþ³Â‡+70¡*жD5€%ääää‘FFìf ¹¹ ± ± ± Ãtttt ò ò ò òIIIIYYYYYYYYYYYYšš í íšš í í í íG¢žCCCoo ÁÅÅññžCššššCCCCšš í í k k µ½½ggèè;; å å’’¨¨¨¨¨¨ úUþþQQ¨¨ ú ú ® ®\\ / / Ü Ü Ü6 Ü Üw p p     p pss{{3~ Ñ Ñ((((SSSS üW O O ¦ ¦ ø ø ¦ ¦ ¦ ¦ ¦ ¦S­'0)6l5(㕆+~~ z z z z Ñ Ñ Ñ Ñ        iiiiª± [W ü O O ü ü ü ü ç ç ç ç == ç ç”îî”” 9 jÅÈnnn ì ì¡À ßüG ì ì ? ? ? ä ä ? Á Á Á Á  nn Ö Ö ) ) Ö Ö Ö Ö « «XX j j ½ j j ì ì ì ì ì ì ì ì==ëë==== ç ç 9 9 9” 9 9 ¦ ¦ ¦ ¦ ü üªª $ $ Ñ Ñ((( Í ç ç ç ç==== ç ç”” 9 9 ç ç e e¿¿¿¿¿¿¿¿ ¶ ¶cccc ¶ ¶ ‹ ‹ ‹ ‹ ‹ ‹88 uÏ"" Ì Ì y"" È È u u""nnnnÅ jÅÅÅ j j Á Ánn Á Á Á Á j j ½ ½ Á Á   • • • • ì ì ì ì • • • • • ; • •nn Á ÁÅÅÅÅ™™ ì ì ì ìG ìÅÅÅÅÅÅ ½ •ðCCCCðð„„11M òŸŸ ò ò ò òËËttttMMúúþ³"–0¡6 5^*Š Ú€ääääìÀ#„  ^^ ± ± ± Ãtttt ò ò ò òIIII ¬ ¬YYYYYY ¬ ¬YYYYYYšš í íšš í í í í íGžCCCoo ÁÅÅññžCššššCCCCšš í í k k µ½½gg Ž Ž;;??’’¨¨¨¨¨¨ úUþþQQ¨¨ ú ú ® ®\\22à … Ü Ü‰‰ Æ Æss   p p  Â Æ!ƒíŽÙ+ Ñ z z‚(SS ¦ ¦SSS ø O O ¢ ü O O O OSS­­Á$ÿ/§.Mà+ Ñ Ñ Ñ z z z z Ñ Ñ $ $ e e e e e e » »iiSSªªªª ü ü ü ¢ ¦ ¦ ¦ ¦ ç ç”””””” ç ç ç ç ç ç ç çÅ j™™¡VbJð ì ì ì ì ì ì ? ? j j j j j j j j € € €Ú„„ Ö ÖXXXX j j ½ j j j j ì ì ? ? •ð èC==== 9” ç ç ç ç ç ç O O O OSS ¦ ¦(( z z((((====AA”” == ç ç ç ç e¿iiii » »iiÃiii ¶ ¶ ¶ ¶    á á á á ‹ ‹å ‹   Ì Ì Ì Ì Ì Ì&&   u u"" Á ÁnnÅÅÅÅÅÅnn Á Á Á ÁnnÅ j j j j j j j ì ì ì ì • •CCC è • •CC •ðÅÅÅÅ ì ì ì ì™™ ì ìÅÅÅÅnn Á Á • • •ðCCCC----ŸŸ ò ò ò ò ò ò Ç Ç   Ç!ttöö££§\l"@2R7¼74Z% —5€ääääìeu ½µ [ ± ± ± ± pËËË ò ò ò òII œ œ°°°°] ¬ ¬YYYYCCCCCCñ –CCCC í í í íoo ÁsššG í – –CC í íšš í í ? ? ¹gggg Ž Žè Ž’’’’þþQQUU¨¨QQQQþ ¤Q« ® ®\\\\22à … Ü Ü / / Æ Æss p p Æ!ƒíŽÙ+ Ñ z z‚(SS ¦ ¦SSS ø O O ¢ ü O O O OSSSSªª±ÿZ•†+ Ñ Ñ Ñ z z z z Ñ Ñ $ $¿¿¿¿ e e » »  SSªªªª ü üW ü ¦ ¦ ¦ ¦ ç ç”””””” ç ç ç ç ç ç ç çÅ j™™GGøð • ì ì ì ì ì ì ? ? j j j j j j j j € € €Ú„„ Ö ÖXXXX j j ½ j jÅÅ ì ì ? ? •ðC è==== 9” ç ç ç ç ç ç O O O OSS ¦ ¦((ÕÕ((((====AA””ëë== ç ç ç ç e¿iiii » »iii ii ¶ ¶    á á á á ‹ ‹ ‹åÓ  Ì Ì Ì Ì Ì Ì Ì ÌyyÏÏ"" Á Á  ÅÅÅÅÅÅnn Á Á Á ÁnnÅ j j j j j j j ì ì ì ì • •CCC è • •CC •ðÅÅÅÅ ì ì ì ì™™ ì ìÅÅÅÅnn Á Á • • •ðCCCC----ŸŸ ò ò ò ò ò ò Ç Çtt Ç!ÏÏöö££§\l"@3­98j5µ+ä¦Ú?Šää‘ìFFrµ ± ± ± ±Ë pËË ò òMMII œ œ U U U U]YYYYCCCCCCñ –CCCCGGGGoo ÁsššG í – –CC í íšš í íšš ¹ggggèèCè’’’’þþQQUU¨¨QQQQþ ¤Q« ® ®\\\\ … … … … / / / / Æ Æss p psÎ(ƒÙÙ~~ z z z z ¦ ¦ ¦SS ¦ ¦ ü ¢ O O O O O O ¦ ¦SSªªª_ŽŽ++ Ñ Ñ~~( Í z z $ $ Ñ Ñ¿¿ÇÇ e e e¿ e e » » iSS ¦ ¦ ü ü ü ü O O O O ø øSS çAî””îîî”””” ç ç”” ?™™™ððCC ì ì ì ì ì ì ? ? € €ÚÚ Ö Ö )„ T T¯¯XX « « j j ½ j jÅÅ™ ? ? ? •ð • •== 9” ç ç 9 9 ç ç ü üª O øSSS((((((((ëë=˜îîî== ç ç ç ç »iiii » »iiiicc     Ž 4 á á ‹ ‹88yy Ì Ì Ì&yy Ì Ì Ì Ì""""    ÅÅnn Á Á jÅ Á ÁnnÅÅ ì ì ì ì • •ððCCC è • •ððrrÅÅ ì ì ì ìG ì ì ìnn • •ððððCC---- ò òŸŸŸŸM ò Ç Ç!!!!!!öö£þ§\l0.C6b8j7+ä¦â-‘777ää7‘b ± ±^^ p pËË ò òMMö œ œ œ U U U UYYYY ¬ññññCCñ –CCCCGGGGoossšššš – –CC í íG íššššÅÅÅÅ ¹ ¹ ¹ ¹ggÁÁèèèè’’’’þþ ¤ ¤¨¨ ú úþþQQþþþþ\\\\  … … … … / / / / Æ Æss p psÎsÎ~~ $ $ z z z z ¦ ¦ ¦SS ¦ ¦ ü ¢ O O O O O O ¦ ¦SSªªªªÙÙ++ Ñ Ñ~~( Í z z $ $ Ñ Ñ¿t11Ç e e e¿ e e » » iSS ¦ ¦ ü ü ü ü O O O O ø øSS çAhhI””””AA”” ?™™™ • •CC ì ì ì ì ì ì ? ?ÚÚÚÚ11„ ) T T¯¯ þ þ « « j j ½ÅÅÅÅ™ ? ? ?ð • • •==ëë 9” ç ç”” ç ç ü üª O øSSS((((((((ëëòM££IIò=== ç ç ç ç »iiii » »iiiicccc    Ž 4 á á ‹ ‹88   Ì Ì Ì&yy&& Ì Ì""""nnnnÅÅnn Á Á jÅ Á ÁnnÅÅ ì ì ì ìððððCCC • •ððÅÅ ì ì ì ìG ì ì ìnn • • • • • •CC---- ò òŸŸŸŸM ò Ç Ç!!!! Ç ÇööþX·Æ&$0ø5µ4Z)/¦<‡‘7‘‘ŠŠ Ü7bbb ± ±   à à p pËË ò ò ò òö œ œ œ°° U UYYYY ¬ññññCCñ –CCCC í í í íoo Á Ášššš – –CC í í íGššššÅÅÅÅ ¹ ¹ ¹ ¹ggggèè Ž Ž’’’’ ¤ ¤ ¤ ¤¨¨ ú ú ¤Y««³³YY¶¶\\  Z Z ­ ± ± V ± ñ ñ ñ ñ ñ ñ D Dss Æ ÆssssSS ¦ ¦ ¦ ¦SS Ñ Ñ Ñ Ñ~~ Ñ Ñ~ $ Ñ Ñ(( z z ¢ ü ü üªªªªSSSSªªªª z z( Í $ $ Ñ Ñ”î££==ë ==” 9 9” ü ü O O ü ü ü üSS ø ø O O O OiiiiË5Ël¿¿###ÈÅÅ ½ j j j jnn Á ÁnÈnn™™™™ ? ? ?™³³ « « « « « « þ þ þ þ ’ ì™ ? ì ì ì ìnnnn Á Á Á Á ç ç”” l e e » » » » O O ü üSSW üªlÇ)ÞêD€Ãlliiiiii====”” ç ç á á á á á á 4 4 á ᎎ á á á á È È u u"""""}""""""CCCCCCððÅ jnnnn Á Ánn Á Ánn Á Á ì ì™™™™ ì ìnnÈ  Á ÁnnÅÅ jÅCC ; ; • •CC Ánnnn Á Á jÅn  Á Á Ö Ö Ö Ötttt Ç!!!%Ëtt|Ö-Ò-â,&¦/r/r&¦Ò»‘‘ääàà3Ž ±^^ [ [ Ç Ç Ç Ç Ç ÇttËË]]°°„„„„„„22ÅÅÅÅoo Á ÁCCCCCCCC í íššCCCC Á Áoo Á Á Á ÁÅ kCCCC – –CC á á Ž Ž å å’’’’ å å å?’’¨¨ ú úQ«QQ x-€Û9“Œ14‡‡‡‡ Z Z ­ ± ± ± V — — ñ ñ ñ ñ D D   Æ ÆssssSS ¦ ¦ ¦ ¦SS Ñ Ñ Ñ Ñ~~ Ñ Ñ~ $ Ñ Ñ(( z z üW ü üªªªªSSSSªªªª z z‚( $ $ Ñ Ñ”îîî==ë ==” 9 9” ü ü O O ü ü ü üSS ø ø O O O Oiiiipppl¿tÏØØ#ÈÅÅ ½ j jÅÅnn Á ÁnÈnn™™™™ ? ? ?™XX « « « « « «XX þ þ ’ ì™ ? ì ì ì ìnnnn Á Á Á Á ç ç””ëë l e e » » » » O O ü üSS±WªlÇ„ X*(.7(ÍŸÓÃlÇÇlÃÃiiii====”” ç ç á á á á á ᎎ á ᎎ á á á á È È u u"""""}""""""CCCCCCððÅ jnnnn Á Á   Á Ánn Á Á ì ì™™™™ ì ìnnnn Á Ánn j j jÅCC • • • •CC Ánnnn Á Á jÅn  Á Á Ö Ö Ö Ötttt Ç!!!%Ëtt!|-Ò҇‡%ù(®#ñÒ»‘‘ääàà3Ž ±^^ [ [ Ç Ç Ç Ç!!ttËË]]]]°°„„„„„„ × ×ÅÅ k koo Á ÁCCCCCCCC í íššCCCC Á Áoo Á Á Á ÁÅ kCCCCññCC;;èè å å’’’’ å å å?’’¨¨ ú úQ«QQÓÓ€Û“Xöæé‡‡‡‡ Z Z Z Z ^ ± V D D ñ ñŸ D D D   Æ Æ Æ ÆssSS ø ø ø ø ¦ ¦ Ñ Ñ $~ Ñ Ñ v Ñ~~ Ñ Ñ z z zÕªª ü üªªªª­S ü ü OªÕ zÕ z Ñ Ñ~~AAîî==== == ç ç”” ü ü ü üª O O O ¦ K ü ü Oªii¿¿¿l|› ´•Ð j j j j j nn  nÈvôô™ô™ ? ì ìXX « « « « « « « «XX ì ì ì ’ ì ì™™nnnn Á Án  Œ ç ç çëëëë¿¿ e e » » » » üW ü ü ¦ ¦ ¦ªªªSS[ÇÖõ.Ž6V7±4ü(ÍâÃÃÇÖÞÏpii » »ii== ë ç ç 9”<<ŽŽ á á á Ꭰ4 4 4 á á á á u u"" u u"}}} uÏÏ*"" • •ð •ððCC j jnnnn Á Á Á Á j j j j Á Á Á Á Á Á Á ì ì™™™™ ì ìnnnn Á Á Á Á j j ½Å jÅ j • •CC • •CCnnnnnn Á Á Á Á Á Á Ö Ö )„ËËËËtttttt!!xx Ç!!!xxÒ-`Êá"– %‘7ääàààà^^^^µµttttttttË˰°°°] × ×„„„„„„ k koo  CCCCCCññ í íššCCCCoo Á ÁooooCCCCžžñ – Ž Ž;;’’ å å’’ å å 7’ å 娨 ú ú ¤ ¤QQ&&--ŒöP«ù4444 Z Z Z Z ^ ± V D D ñ ñŸ D D Dss Æ Æ Æ Æ  SSSS ø ø ¦ ¦ Ñ Ñ $~ Ñ Ñ v Ñ $ $ Ñ Ñ z z zÕ O O ü üªªªªµjbS ü ü_/ÕÕ z Ñ Ñ~~AAîî====ë똘AA””WW ü ü Oªªª ¦ ü ü OªÃÿ¿¿l|P&JÐ j j j jÅ jnnnnnÈv…^^Nôô™ ì ì þ þ « « « « « « « «XX ì ì ì ’ ì ì ? ?nnnn Á Án  Œ ç ç çëëEE¿¿ » » » » üW ü ü ¦ ¦ ¦ªª OªSS[!1#º5R7±9 7±3¡§x|ª(wH%ii » »ii==ë ç ç”îñ<ŽŽ á á á Ꭰ4 4 4 á á á á u u"" u u"}}}Ï**Ï""ððð •ððCCÅÅnnnn Á Á Á Á j j j j Á Á Á Á Á Á Á ì ì™™™™ ì ìnnnn Á ÁÅÅrÅ jÅ j • • è è • •CCnnnnnn Á Á Á Á Á Á Ö Ö )„ËËËËtttttt!!xx Ç!!!xxxÒ»‡Ú%ì‘ääàààà^^^^µµttttttttË˰° + +]22„„„„„„ k kooooCCCCCC – – í íššCCCCoo Á ÁooooCCCCžžñ – Ž Ž;;’’ å å’’ å å’ 7 å 娨 ú ú ¤ ¤QQ&&ÓÓ|1APSé4444 Z Z Z Z ± ±   ñ ñ D D D D D D  p p Æ Æss ¦ ¦ ¦ O O ¢ ü( Í z z~ $ $ $ Ñ Ñ~~ z z(( ¦ ¦ ¦ ¦ ü üªªÅbS ü ü± ‚‚((((ÕÕ”î”î””””ëëE ú ò˜ øS ü üªªªª ü ü ü ü ü ü¿¿ÇÇt¿iiiip€à+#ÈrrÅÅÅ j ÁÈ#•"'M%òÌRC • • T T T T T T T T « « þ þ « « «™™ ? ? ì ì ì ìÅÅ Á Á Á Á =˜ò5xi¿¿ ü ü ü üSSSS ü üªªSSSS€" 4ü9 7±8^1šŸËËËÏH X“!Ç¿==== =˜š@ååŽŽŽŽŽ 4 á á á á á á"" u u  yy}×99.ÓyyððCCCCCCnnÈÈ jÅnn Á Á j j Á Á Á Á • •CCCC • • jÅÅÅÅ • • • •CCððÅÅ ½ j jÅÅ Ö Ö„„tt tttttxxËËtttt!!tÏ\!h³??77ŠŠäŠ^^^^ [µttttË p Ç Çtt!!ttYYY·]ß„ × ×.. € € Á ÁoÉssÅÅšš í íCCCC í íšššš í íÅÅ kÅ ÁÅÅššššññžC’’’’ å å å å’’ å å å å å å ¤ ¤ ¤ ¤ ú ú ú úÓ xÓÓ))„Þ‡‡ÞÞ Z Z Z Z ± ±   ñ ñ D D D D D D  p p Æ Æss ¦ ¦ ¦ O O ¢ ü( Í z z~ $ $ $ Ñ Ñ $ $ z z(( ¦ ¦ ¦ ¦ ü üªªµ­S ü ü üW‚‚((((ÕÕîIIîîî””ëëEUt ƒMS ø ü üªªªª ü ü ü üWW¿¿Çæ“Ï¿iiiipvvnÈÅÅÅ j ÁÈØ ´2L604Ö-dø • • T T T T T T T T « « þ þ « « «™™ ? ? ì ì ì ì j j Á Á Á Á =˜M!0+‚'sâll¿¿ ü ü ü üSSSS ü üªªSSSSË&0ì4ü2ô&Æ5ËËËtÏ)ÏÇl¿==== ã=@åå厎éééŽ á á á á á á"" u uyyyy}A h#ò.yyððCCCCCCnnnn jÅnn Á Á j j Á Á Á Á • •CCCC • • jÅÅÅ jÅrr • • • •CCððÅÅr j jÅÅ11„„tt tttttËËtttt!!tϧ·Æ X??77ŠŠäŠ^^^^ [µttttË p Ç Çtt!!ttYYYY]]]ß„ × ×.. € € Á ÁoÉssÅÅššGGžžCC í íšššš í íÅÅ kÅ Á Á ÁssÅÅššššññžC’’’’ å å å å’’?? å å å å ¤ ¤ ¤ ¤ ú ú ú úÓ xÓÓ)))„44‡‡ÞÞ ±   ñ ñ D D ñ ñ ñ ñ p p s!! ¦ ¦SSª O ü ü z z z z $ $ Ñ Ñ Ñ Ñ Ñ Ñ(( z zSS ¦ ¦ ü üªª ¦ ¦ O Oªª((((((//«»XIAA ç ç=˜ t. 0Á"‹§ ¦ ü ü ü üWWªª üWW üll|PýÞtÃiiiiiÅ jÅ j j j j jnnÈ2(%5®886Þ.¿¥ðCC T T T T T T §X þ þ þ « «XX™™™™™ ? ì ì j j j j Á Á Á Á =˜ +,²4ü/’—Çl ü ü OªSSSSªª ü üSSSSp%ù#cT%ppptll¿¿======ëëåååå á áŽŽŽŽ á áŽŽŽŽÏÏÏ u yyyÏX/ù/ù·.&&CCððð •CCnn Á Ánn Á Á j j Á Á Á ÁCC • • • • èCrÅÅÅÅÅÅð •ð • • •CCrrr j jÅÅÅÅ j jÅÅÞ„11!!ttttttttttËË!!tϧ§pp`«‘‘ŠŠŠŠ Ü Ü^^ ± [ [ Ç Çt  Ç Ç Ç!tt!! ¬ U°°°„„ × ×.. € € Á ÁooÅÅššššñññ – ? ?šššš í íssÅÅ ÁoossššššññžC’’’’ å å’’’’?? å å å å ¤ ¤ ¤þ ú   ú ú&&ÓÓ|| Ï)‡‡‡‡00 ±^^ ñ ñ D D ñ ñ ñ ñÊÊs  Æ Æ ¦ ¦SSª O ü ü z z z z $ $ Ñ Ñ Ñ Ñ Ñ Ñ(( z z ø ø ¦ ¦ ü üªª ¦ ¦ O O O O((((((ÕŠ%*S$<XAAAA=˜  +#8(¢Ö§[[ ¦ ü ü ¢ ¢WW__±WW üll!Ö““„tÃiiiii » » Á Á Á ÁÅ jÅ j j j j jnnn#œ*Ú4)2Î'ú¼¥ðCC T T T T T T §X þ þ þ « «XX™™™™™ ? ì ì j j j j Á Á Á Á =˜úÎ&#câl ü ü OªSSSSªª ü üSSSS »pp€€%Ëpp¿¿¿¿¿======ëëåååå á áŽŽŽŽ á áŽŽŽŽÏÏÏ u yyyÏ9»%%.&&CCððð •CCnn Á Ánn Á Á j j Á Á Á ÁCC • • • •CrÅÅ j jÅÅð •ð • • •CCrrr j j j jÅÅ j jÅÅÞ9‹‹!!ttttttttttËËxx!!tϧ§\``««‘‘ŠŠŠŠ Ü Ü^^ ± µµ Ç Çt  Ç Ç Ç!tt!! ¬ U°°°„„22.. € € Á Á  ÅÅššššñññ –šššššš í í ¾sssÅÅvÉÉssššššññžC’’’’??’’’’ å å å å å å ¤ ¤þYU ú ú ú&&ÓÓ|| Ï)‡‡‡‡00 Æ Æ Æ Æ p p pÊ Z Z Z´^    / /‰‰2 Ø … … ü ü O O ¦ ¦ ¦ ¦Õ z Í( Ñ Ñ Ñ Ñ ç ç Œ ç e eÕ z( Í z z z z O O O O Oªª¹"J+Ã"÷WWªªª ÁzÅ[­­ ¦ ¦ ¦ ¦ ¦ ¦ªn#½­ ¦(‚Ýì (6¼è‚‚‚‚ÕÕ(( T T T TXXXX € € € € € € € € Ö1 Ö Ö1‹î "ü GÖ «XX ½ ½ Á ÁnnCC • •™ôGG¯¯³ þ « « Ö Ö | Ö Ö Ö Ö Ö+ Ñ Ñ Ñ~~†•CŽÙ(((( » » iiiii ç ç””AA””~~ÙÙŠŠÝÝÙÙ++~~ Ñ Ñ ü üªªSS øSSSS ø ¦ ¦ ¦ ¦  ººº _ _º  ² ²cccccccc  _ºéC¦õ@åå\\\\\¯ TXX «\¯¯ • • •ðCC • •CC • ; è è • • Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö----CCC™ ? ì ì Á ÁnnˆˆÚÚ € € € €ÚÚÚÚ--Ú5RbÿJ££ööIIII ò ò E E ò òŸŸ7777ŠŠä䎎••CC;;öQ££IIII Ç Ç Ç Ç ‚ ÜŠ /3333 ± ±^^µµ´´YYYY..ÛÛ„„22 í í ? ?CCCC ÁooooooYY ¬YY ¬ ¬ × × × ×22„„5ˆˆßß2 ×..ÛÛ..ÛÛ¨¨¨¨UU¨¨¨¨¨¨QQQQgggÁjj½½;;;;’’’’FFó ™ó ™ Æ Æ Æ Æ p p pÊ Z Z´ Z^   ‰‰‰‰2 … … ü ü O O ¦ ¦ ¦ ¦Õ z Í(++ Ñ Ñ ç ç Œ ç e eÕ z( Í z z z z O O O O OªªÁÐɹWWªªª…ŵµSS ¦ ¦ ¦ ¦ ¦ ¦ª# BÌ[(‚Ýì$&,E"ÌCÝ((( z z(( T T T TXX þ þ € € € € € €ÚÚ Ö1 Ö Ö Ö1Þ“· «XX ½ ½ Á ÁnnCCððôN¡¡\\¯¯XX « « Ö Ö | Ö Ö Ö Ö Ö+ Ñ Ñ Ñ~~+†3ÙÙÙ((((i iiii ç ç””AA””~~~~ÕÕ‚‚~~ Ñ Ñ~~ Ñ Ñ ü üªªSS øSSSS ø ¦ ¦ ¦ ¦  _ _º _ _º    cccccccc  _ºŽé<–åååå\\ll ¯XX «\·d¯ • • •ðCCððCC • ; è è • • Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö---- èCCC™ ? ì ìnnˆˆÚÚÚÚÚÚÚÚÚÚˆˆêq#ëÄ¥££ööIIII ò òŸŸ ò òŸŸ7777ŠŠŠŠŽŽ;;èè;;Qö££IIII!! Ç Ç Ü7Š /3333 ± ±^^µµYYYYYY ¬ ¬..ÛÛ„„ × × í íššCCCC ÁooooooYY ¬YY ¬ ¬ × × × × × ×„„Û5ˆˆßß2 ×..ÛÛ..ÛÛ¨¨¨¨UU¨¨¨¨¨¨QQQQggÁg½½;;;;’’’’FFó ™ó ™ssss p p p p Z Z   ± ± Ü6 /‰à … … … ü ü O OS ø ¦ ¦(( z z Ñ Ñ+ Ñ==== 9 9 ç ç e e¿ e e¿ÕÕ z z Í Í z z O O ¢ üªªª__±±WWªª ü±!µ[SSSSSS ¦ ¦WW Á½[ÕÕ‚7ÿRŽ‚(((((Õ z « « þ þ- Ó € € Ó--ˆ Ö Ö ) ) Ö Ö1‹d   « « « « Á Á   •ððJü f±·\¯¯ « «„„ Ö Ö Ö Ö Ö Ö Ñ Ñ~~~~++~~~~(((( » »iiii ç çAA ç ç”” Ñ Ñ~~Õ/ÕÕ++ Ñ Ñ Ñ+~ $ O O ü ü­S ¦ ¦SS ¦ ¦ ¦ ¦ ¦ ¦      _ºg   cc¾¾¾ccººººŽŽ<<8888¯ Æåíƒ\XX « d\ • •CCCCððCCC è è è • • Ö Ö Ö Ö Ö Ö )„ Ö Ö Ö Ö---- • • • • ì ì ì ì j jÅÅÈÈv55ˆ-ÚÚ-ˆÚÚÚÚˆâêŸy ˆÄ¥££IIIIIIŸŸŸŸMMŸŸ7 ÜŠŠŠŠ Ü ÜŽŽààŽŽ;àö œIIIIöö!!tt Ü Ü Ü Ü3333 ± ±^^µµYY ¬ ¬ € €..„ * × × í í í í – – éC Á Á Á ÁooooYY ¬YY ¬ ¬„„„„ *„„„ÛÛ..„„„„ÛÛ....ÛÛ¨¨U úUU¨¨ ú ú ú ú ¤þQQggÁÁ½½;;;;’’’’ ™ ™ó ™FFssssÊÊ p p Z Z   ± ± Ü6‰ / …à … … ü ü O OS ø ¦ ¦(( z z Ñ Ñ+ Ñ==== 9 9 ç ç e e e¿¿ e z z z z(( z z O O ü ¢ O O OªªªWWWWªªWWn[ ¦SSSSSSWWWW­­[ÕÕ(݆à3Ù‚(((((Õ z « « þ þ Ó- € € Ó-- Ó Ö Ö ) ) Ö Ö Ö1 ¯¯¯ « « « « Á Á   •ððJ(þ-":Æ·¯¯„„ Ö Ö Ö Ö Ö Ö Ñ Ñ~~~~ Ñ Ñ~~~~‚‚‚‚iiii ç ç ç ç ç ç”” Ñ Ñ~~Õ///++++ Ñ+~ $ O O ü üS ø ¦ ¦SS ¦ ¦ ¦ ¦ ¦ ¦      º _g   cc¾Í‚Íéé<<8888¯ Æ'¹/+$WÆ\XX «¯ \\ • •CCCC • • è èC è è è • • Ö Ö Ö Ö Ö Ö )„ Ö Ö Ö Ö---- • • • • ì ì ì ì j jÅÅÈ}ÐvÚÚˆ-ÚÚ-ˆÚÚÚÚâòcÄ´ÿJIIIIIIIIŸŸŸŸMMŸŸ7 ÜŠŠŠŠ Ü Ü33ààŽŽ;àö œII££öö!!tt Ü Ü Ü Ü3333 ± ±^^µµYY ¬ ¬ € €..„ * × × í í í í – – éC Á Á Á ÁooooYY ¬YY ¬ ¬„„„„„ß„„ÛÛ..„„„„ÛÛ....ÛÛ¨¨U úUU¨¨ ú ú ú ú ¤þQQgggg c c;;;;’’’’óó ™óFFssÎs%Ê Â^^ ± ± Z Z22 … …22à … ü ü O O ¦ ¦ ¦ ¦ z z zÕ~~~~ ç ç ç ç==ë e e · e e $ $ Ñ+ Í Í z z O O O O ¦ ¦ ¦ ¦ ü üWW ¦ ¦SS[[WW­SSS½b† Ñ Ñ+++++ Ñ Ñ Ñ Ñ(((( T T « « þ þ % € € €-- Ó- € € € €--ÚÚ¯¯¯¯ « « +ö +ö  nn ½™™G¡}0p2x$ïÆ\¯¯XXXX1 Ö Ö Ö„„ Ö Ö(((( z z z z Ñ+++++ÙÙpÃi¿ e== ç ç””((ÕÕ(‚ÕÕ(( zÕ(((( O O ü ü ¦ ¦ ¦ ¦ O O O O ü ü O O        ¶ ¶ ¶ ¶ººÂ†øŽooÅ kkøøCé8888\·Ýíݾ ¯¯ « «CC • • • •CC • • • • • • • •-- Ó Ó )„„„ Ö Ö Ö Ö Ö Ö1 Ö ì ì ? ? ì ì ì ìàïàЄ„1 Ö )„ÞÞÞ„1‹—Æ/V-ü"¡GIIööIIQQöö££ööööŽŽàà † †33 Ü ÜŠŠŽŽààM ò òMQöööËËËË Ç!Ït33 Ù3ààŽ3^^^^^^^^°°] ¬YY € €...... – – – –CC –ñÅÅÅÅooooYYYY U U]]„„„„„„ ×2ÛÛ..„„„ *.ˆÛÛ....¨¨UU««««¨¨¨¨¨¨¨¨gggggggg? å å å å å å å¡¡ó ™ ™ ™s(ƒ(%Ê Â^^ ± ± Z Z22 … …22à … ü ü O O ¦ ¦ ¦ ¦ÕÕ zÕ~~~~ ç çAA˜˜ë e e · e e $ $ Ñ+ Í Í z z O O O O ¦ ¦ ¦ ¦ ü ü ü ü ¦ ¦SS[[WW[[­SS­b'à+ Ñ+++ Ñ Ñ Ñ Ñ Ñ Ñ((((¯¯ « « þ þ €Ú € €-- Ó- € € € €--ÚÚ T T T T Q Q +ö +ö Ènn ½™™G¡^}*À\¯¯XX³³1 Ö Ö Ö„„ Ö Ö(((( z z z z Ñ+++++ÙŽ%Ëÿ e== ç ç””((ÕÕ(‚ z z(( zÕ(((( O O ü ü ¦ ¦ ¦ ¦ O O O O ü ü O O         ¶ ¶ººgwÙÙÉkÅkkžSCé8888\ dd¾  ¯¯ « « « «CC • • • •CC • • • • • • • •-- Ó Ó )„„„ Ö Ö Ö Ö Ö Ö Ö1 ì ì ? ? ì ì ì ìrrÅz¤(Ó ´…ÞÞ1 Ö )„ÞÞÞ„ Ö1=¶'7+GסGIIööIIööööþþööööŽŽàà † †3377ŠŠŽŽààM ò òMö œöö p pËË Ç!Ï)ŽŽ3ŽààŽ3^^^^^^^^°°] ¬YY € €...... – – – –CC –ñÅÅÅÅooooYYYY U U„„„„„„ ×2ÛÛ..„„„ *.ˆÛÛˆˆˆˆ¨¨UU««««¨¨¨¨¨¨ggggggÁÁ? å å å å å å åFFó ™ ™ ™{@±íÊÊÊ ± ±^^ Z Z … … …àà::ઠO O O ¦ ¦ ¦ ¦Õ z zÕ~~~~ ç çAQ + ë l · $ $ $ $ Í Í z z O O O OSSSS ü ü O O ¦ ¦SS[[[WW_jrb­­SSSSSSSµÙ~++++ Ñ Ñ~~~~((((¯¯ « « Q « € € € € € €-- € € € €--Ú5 « « Q Qnn   j j ìGôôüü©©\¯¯`Âw@1„„1 Ö Ö Ö(((((( zÕ~~~~+†èR—â€Ë¿¿¿ ã ã ç ç””(((‚ÕÕ(( z zÕ/(((( ü ü O O ¦ ¦ ¦ ¦ O O O O ü ü O O _ _ºº    cc ¶ ¶ººgggg––<<8888¯¯\\  \\ T T þX «CC • •CCðððð • • • • • •--Ú €„„1 Ö ) ) Ö Ö„„ Ö Ö ì ì ? ? ìG™™ÅÅÅz•¤B#11„„„Þ‹‹Þ„„„â—ùT±¡GGööööIIIIöö££££ööŽCè3àà33‘‘ŠŠàààà ò ò ò òIIII p pttÏ)Ž333àààà^^^^¹^¹^ ¬ ¬ ¬ ¬ € €......CCCC – – – –ÅÅÅ kooooYYYY × × × ×„„ × ×ÛÛ..2 × × ×ÛÛ.ˆ55㈠ú ú¨¨þþYY¨¨ ú ú ú úggggggÁÁ? å å å å å 7’F ìFF ™ó{‹ü¢Ú%ÊÊ ± ±^^ Z Z … … …àà::ઠO O O ¦ ¦ ¦ ¦Õ z zÕ~~~~ ç çAQ + ë ll $ $ $ $ Í Í z z O O O OSSSS ü ü O O ¦ ¦SS[jzű±_n!ó*( +Üb­SSSSSS­­[Ù~++++++~~~~(((( T T « « Q « € € € € € €-- € € € €-- €Ú « « « «     j j ’ ì™™GGôô\¯¯`‡"¦‹„„1 Ö Ö Ö(((((( zÕ~~ÙÙà;&Û-Š*Õ" 5t¿¿ëë== ç ç””(((‚ÕÕ‚ Í z z zÕ(((( ü ü O O ¦ ¦ ¦ ¦ O O O O ü ü O O _ _ºº    cc ¶ ¶ºº  ººgg<<<<8888¯¯\\¯¯\\ T TX þ «CC • •CCðððð • • • • • •-- €ÚÞÞ Ö1„„ Ö Ö„„ Ö Ö ì ì ? ? ìG™™ÅÅÅzÐ+}È11„„Þ9õõ9Þ„„ˆˆ5¡GGGöö œ œIIIIööIIIIööèè3àà3377ŠŠ † †àà ò ò ò òIIII p ptttÏŽ333àààà^^^^^¹¹^ ¬ ¬ ¬ ¬ÛÛˆˆ....CCCC – – – –ÅÅ ÅooooYYYY × × × ×„„22ÛÛ..2 × × ×ÛÛˆ˜úú˜ˆ ú ú¨¨þþYY¨¨¨¨ ú ú ú úgggggggg? å å å å å 7’F ìFF ™óŸT[[ý£HH^^ ± Z Z Z Z Z´ Z´bbb ¦ ¦ ¦ ¦ªª O O ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ll! » » » »SS ¦ ¦ O O O O ø ø K ¦ªª ü ü Í Í z z z z((±+$R~µ[µ/0U74d%ì‚‚‚ ¦ ¦ ¦­3ÙÙÙ++†† ¦ üW ü ü þ þ « « T T ) )„„„„Þ„ € €--- Ó € €¯¯ « « « « j j j j Á Ánn ? ?™™ððCC¯¯X³Ò XXXX ü ü O OªªªªªW± …+Ã5=7Z6/èõÏÇlll¿¿ i » »ªªªª ¦ ¦ ¦ ¦ ¦ ü üªª ¦ ¦SS ¦ ¦SS ¦ ¦ O O O O    ¶ ¶cc88888888c¾¾¾ºººººººº-------- Ö Ö ) )ÚÚ--ÅÅ ½ j j™™ ì ìCCðð„„ Ö1ÞÞ„„ÚÚ-- Ö Ö Ö Önn Á Á™™ôô¡¡ô™XX\l@Ö ³¯¯\·rrÅÅööIIIIIIŽè333333^^^^ ± ^^ Ç Ç Ç Ç Ç Çtttt Ç Çµµµµ3333ŽŽà †.... × ×„„ÛÛÛÛ.... Á Áoo ¾ooooÅÅ2 ׄ„ÛÛ..YYYYY´ÛÛÛ €ÛÛ € €YYi=(g!£!·UU¨¨UU¯¯ÓÓ&&||||;; Žè;;;;gggg½ c qqqqqŸŸLL£HHH^^ ± Z Z Z Z Z´ Z´ ­ ¦ ¦ ¦ ¦ªª O O ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦l » » » »SS ¦ ¦ªª O O ø ø K ¦ªª ü ü Í Í z z z z((Wf~ɵ[µ/.ú5¿4d(6ì‚‚‚ ¦ ¦ ¦­rŽÙÙ††;; ¦ üW ü ü þ þ « « T T ) ) ) )„„Þ„ € €--- Ó € € T T « « « « j j j j Á Ánn ? ? ? ? • •CC T TX³  d XXXX ü üªªªªªªª± Á ï3â7ò8µ7Z6­)$9Ï!Çll¿¿ i » »ªªªª ¦ ¦ K ¦ ¦ ¦ ¦ ¦ ü üªªSS ¦ ¦SS ¦ ¦ O O O O    ¶ ¶cc888888 Ý Ý c¾¾ ¶ ¶ºººººººº-------- Ö Ö„„ÚÚ-- j j ½ j j™™ ì ìCC • •„„1 Ö„„„„ € €-- Ö Ö Ö Önn™™™™GGô™XX\·!! ³¯¯\rrÅÅööIIIIII3Ž333333^^^^ ± ^^ Ç Ç Ç Ç!!tt   Ç Çµµµµ3333ŽŽà †.... × ×„„ÛÛÛÛ.... Á Áoo ¾oooossÅÅŒ2ßßÛÛ..YYYY´YÛÛ5ÛÛÛÛÛ´´-(g' |UU¨¨UUUUÓÓ&&||||;; Žè;;;;gggg c½ µ µ qÌÌqq D DŸŸHHHH ± ^^´ Z´´ ­ øS ¦ ¦ O O O O ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ e e¿ e » » » » ¦ ¦ ü ü O OS ø øS ü ü O O Í Í z z z z Í(WW_­­[jb$&"ÌRÝ‚ÕÕ ¦ ¦SS­røŽ++++ààSS ¦ ¦ O O ü ü « «XX T T | Ö | Ö Ö Ö„„-- € €-- € € « «X þ j j j j Á Ánn™ ? ? ? • • • • T T T TXX³³¯¯ « «XX ü ü Oªªªªªªª_f:357E886/;"_õ„tÇlliiii ü ü ü ü ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ü üªª­S ¦ ¦SS ¦ ¦ ø ø O O O O _ _ _ _cc cå ‹ Ý8å ‹ ‹ ‹cc ¶ ¶      ºº € €ÚÚÚÚ-ˆ11 )„-- € € j j jÅ™™ ì ìCCCC„„1 Ö„„„ )---- Ö Ö Ö Önn Á™™ ìGNôG ìXX¯¯ d``³X¯¯År p pööIIIIIIàà333333 ± ± ±^^^^ Ç!tt Ç Çtt Ç Ç Ç Ç [ [µµ33333ŽŽ3.... × ×„„........ Á ÁooÅÅooooss  Œ2„„ˆˆÛÛYYYYYY.ˆÛÛ..ÛÛYY))¿e¨¨¨¨¨¨¨ÓÓ&&||||; á;––;èègggg c c Ä Äy D D D DHHHH ± ^^´ Z Z Z ­ øS ¦ ¦ O O O O ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ e e¿ e » » » » ¦ ¦ ¦ ¦ ü ü O OS ø øS ü ü O O Í Í z z z z(‚ ü üª­­[Žè莂( z z ¦ ¦SS­ŽÙ++ Ñ Ñ++SS ¦ ¦ O O ü ü « «XX T T | Ö1 Ö Ö Ö„„-- € €--ÚÚ « «X þ j j j j Á Ánn™ ? ? ? • • • • T T T TXXXX¯¯ « « þ þ ü ü Oªªªªªªªª±%¬1Û5R5R4¥63ø.Ž X)ÇlÇliiii ü ü ü ü ¦ ¦ ¦ ¦ ¦ ¦ ü üªªS ø ¦ ¦SS ¦ ¦ ø ø O O O O _ _ _ _cc cå ‹8’å ‹ ‹ ‹cc ¶ ¶      _ _ € €ÚÚÚÚ-ˆ11„ )-- € € j j jÅrr™™ ì ìCCCC„„1 Ö„„„ )---- Ö Ö Ö Önn Á™™ ìü^NG ìXX¯¯¯ ``³X¯¯zÌrËËööIIIIII † †333333 ±   ^^^^ Ç!tt Ç Ç   Ç Ç Ç Ç [ [µµ33333ŽŽ3.... × ×„„........ Á ÁooÅÅoooosszzŒ2„„ˆˆÛÛYYYY´´.ˆÛÛ..ÛÛYYaeee +¨¨¨ M M¨¨ÓÓ&&||||; á;––;èègggg c c Ä Ä Äyy D D D D ñ ñ ñ ñ ± ± ± ± ± ± ± ± ­ ­  ^^ªª O OS ø ¦ ¦ ¦ ¦ ø ø ¦ ¦ ¦ ¦ e¿iiii » » » » » » » ü ü ü ü ü ü O O ¦ ¦ ¦ ¦ªªª O z z z z((ÕÕ ü ü ü ü­­+†††~~ Ñ Ñ ¦ ¦ øSªªªª+ Ñ++~ $~~ Oª O O ü ü ü ü « « « « « « þ þ )„„„ Ö Ö„„-- € €„„Þ„ T TXXXXnn   Á Ánn • • • • ì ì™™ « «XXXX` T T O OªªSSSSªªª¹~ B%k( 2G7±7Z6%ÖÃÃÃÿSS ¦ ü ü ü ü ø ø ¦ ¦ ü ü ü ü O Oª OSSSS ü ü ü ü ¦ ¦ ¦ ¦ _ _      å ‹8888å庺ºººº _ _ ¶ ¶ ¶ _ _  Ö Ö„„„„„„„„ Ö Ö---- jÅ Á Á Á Á™ ? ì ìððððÚÚÚÚ----„„ Ö Ö Ö Ö„„nnnnÅÅ ì ì ì¡Nô™\\¯¯¯¯ dd¾·\XX³³ÜëÜrtttt òMŸŸIIII33 †àŠŠŠŠbbtttttt Ç Ç Ç Çtttt Ç Ç ^  µµ33 † †àà † †„„ × ×„„ * *ÛÛ...ˆ..ÉoÅÅÅÅvÉ$3èMã5Û22ßßa°°]]ÛÛÛ €ÛÛ..°°° +´´´´þþ«Q¨¨¨¨&&&& x x&& å å å å;;èègggg½½ Ä Ä ÄÈÈ D D D D ñ ñ ñ ñ ± ± ± ± ± ± ± ±^^^^ O O O OS ø ¦ ¦ ¦ ¦SS ¦ ¦ ¦ ¦ e¿iiii » » » » » » » ü ü ü ü ü ü O O ¦ ¦ ¦ ¦ O Oª O z z z z Í Í z z ü ü ü üSS Ñ+++~~ Ñ Ñ ¦ ¦ øS O O O O Ñ+++Ù~~~ª Oªª ü ü ü ü « « « « þ þ )„ ) ) Ö Ö„„-- € €„„Þ„ T TXXXXnnnn Á Ánn • • • • ì ì ? ? « «XX þ þ « « « T T O OªªSSSSªªª¹ˆ=#c0ì4¥3K#º1ÃÃii¿SS ¦ ü ü ü üSS ¦ ¦ ü ü ü ü O OªSSSS ü ü ü ü ¦ ¦ ¦ ¦ _ _      å ‹8888å庺ºººº _ _ ¶ ¶ ¶ _ _ Â Ö Ö ) )„„ ) ) ) ) Ö Ö---- jÅ Á Á Á Á™ ? ì ìððððÚÚÚÚ----„„ Ö Ö Ö Ö„„ÈÈÈÈÅÅ ì ì ì ìôôô™¯¯  dsÝ8{l³³³³‘Ürtttt òMŸŸIIII33 †àŠŠŠŠbbtttttt!! Ç Çtttt Ç Ç ^  µµ33 † †àà † †„„ × ×„„„„ÛÛ...ˆ..Éo k kÅÅvÉŽ&Ì.ë*š\522„„a + +]]ÛÛÛ €ÛÛˆ Ó°°° +YYYYþþQ«¨¨¨¨&&&& x x&& å å å å;; Ž Žgggg½½ Ä Ä ÄÈÈ ñ ñŸ D ñ ñ ñ ñ ± ± ^   ± ±´´ ± ±  O O ü ü ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦iiii » » » »ii » » ü üªªªª ü ü ¦ ¦ ¦ ¦ ü ¢ O O Í Í Í Í( Í(( ü ü ü üSSSS Ñ Ñ~~~~ Ñ Ñ ¦ ¦ ¦ ¦ O O ü ü~~++++++ªªª ü ü ü üXXXX « « þ þ Ö Ö Ö Ö Ö Ö11 € € € € Ö Ö1 Ö T T « « « « Á Ánn Á Á • • • • ì ì ì ì « « þ þ « «XX « « T T ¢ ü O OSSSS ü üªªW±__x-ê ®%Â!²‹!ii¿ eSSSS ü ü ü ü ¦ ¦ ü ü ü ü ü üªªSSSS ü ü ü ü ø ø ¦ ¦  ² ²    888888’’ººg _º  ¶ ¶cc _ _  Ö Ö )„„„ Ö Ö Ö Ö Ö Ö € € € € jÅ Á Á Á Á ì ì ì ìðJJðÚÚ------„„ Ö Ö„„ Ö1È#vvÌr™™ ì ì ì ì™™¯¯ T¯ ¾("ü-Ð,v"üλ`»`ÔzÅtt Ç ÇËËËË òM ò òIIII33337 ÜŠŠµµµbbµµtttt Ç ÇttÏt!! Ç Ç Ç Ç^¹  µµ †à † †àààà„„ × ×„„ × ×ÛÛ.... € €ooÉoÉÉ$C/˜52 s=ˆ2222´´·· + +ˆˆÛÛÛÛˆ.°°·YYYYQQQQ¨¨¨¨ xÓÓ xÓÓ&& å å å å;;;;gggg½½ Ä  u ñ ñ DŸ ñ ñ ñ ñ ± ± ^^^ ± ±´´ ± ± ± ± O O ü ü ¦ ¦ ¦ ¦ ¦[[ ¦ ¦ ¦ ¦iiii » » » »ii » »WWªªªª ü ü ¦ ¦ ¦ ¦ ü ¢ O O Í Í Í Í( Í(( ü ü ü üSSSS Ñ Ñ~~~~ Ñ Ñ ¦ ¦ ¦ ¦ªª ü ü~~+++++•n_ªª ü ü ü ü þ þXX « « þ þ Ö Ö Ö Ö Ö Ö Ö Ö € €ÚÚ Ö Ö1 Ö T T « « « « Á Ánn Á Á Á Á • • • • ì ì ì ì « « þ þ « «XX « « T T ¢ ü O OSSSS ü üªª± __Ë%„)!lii¿ eSSSS ü ü ü ü ¦ ¦ ü ü ü ü ü ü O O ø ø ø ø ü ü ü üSS ¦ ¦        88888888ººg _º  ¶ ¶ccºº  Ö Ö )„„„ Ö Ö Ö Ö Ö Ö € € € € jÅ Á Á Á Á ì ì ì ìðJJðÚÚˆˆ----„„ Ö Ö„„1‹#}ÐÐ'Ìrr™™ ì ì ì ì™™¯¯¯  ¾í1à7J8¤4•%±Ê»`ÅÅtt!!ËËËË òMMMIIII33337 ÜŠŠµµµbbµµtttt| ÇttÏt Ç Ç Ç Ç!!^¹  µµ †à † †àààà„„ × ×„„ × ×ÛÛ.... € €ooo  ¾ ¾ÉÉÉ3"*.'8 =ˆ2222´´··eeãã5555ˆ.°°]]YYYYQQQQ¨¨¨¨ xÓÓ xÓÓ&& å å å å;;;;gggg½½ Äqqu ñ ñ DŸõõõ › … …2222 … … Ü Ü Ü Ü22 … … z z z z z z z z((ÝÝÕ z((SS øSªªªªW ü Oª ü ü ü ü˜˜==== » » » » e e e e ç ç ç ç=== ã Oª ü ü ¦ ¦ ¦ ¦ ¦ ¦SSSSSS””A ç çAA\M˜˜== T T § T T € € € € € € € € § « « þ þ J¤ ÷ ÷NN    NN     J¤ ÷ ÷N ó     ó ó ó ó Ì Ìyy"""" e eiiii » »)1Öà†††††Ù~W üªª ü ü ü ü › › › › ›õHH › › › › ñ ñ ñ ñ › › › › D D ñ ñssssss Æ Æ T TXXXX--ÚÚ Ö Ö Ö Önnnn Á ÁnnÅÅÅÅû       œ ÷ J J ÷ ÷ ÷ ÷¤¤ J J          ºgÂÂÂ5Úˆˆˆ-ÚÚXXXX¯¯\\¡¡¸±ü¡G Á Á Á Á nnnððô$A5Ú8 8 5X%2#CCJJÖÖ((,‡,,T®®®ªªª, Ò Ò ÒÖÖ(ƒëë>˜ï• ç ç ç ç ç çëëëë Ò,,, Ò Ò ý ý Pª„„„„.... ¬ ¬ ÿ ÿ U U„„ × × € €.. ×2ßß2çIþèÙ$ÉoosssÍ(Ý77Ãi´´··°°„„„„„„„„½½jjj½½½½½½ggg gg     ² ñ ñŸ D › ›õ › … …2222 … … Ü Ü Ü Ü22 … … z z z z z z z z(((ÝÕ z(( ø ø øSªªªªW ü OªWW ü ü====== » » » » e e e e ç ç ç ç=== ã Oª ü ü ¦ ¦ ¦ ¦ ¦ ¦SSSSSS””A ç çAAœò˜==== T T § T T € € € € € € € € § § § « « þ þ J¤ ÷ ÷NN     ó ó     J¤ ÷ ÷N ó     ó ó ó ó Ì Ìyy"""" e eiiiiÏý'É#ºðà++++Ù~ üWªª ü ü ü ü › › › › ›õHH › › › ›LL ñ ñ › › › › D D ñ ñs(ÎÎss Æ Æ T TXXXX--ÚÚ Ö Ö Ö Önnnn Á ÁÈÈ j jÅÅû       œ ÷ J J ÷ ÷ ÷ ÷¤¤¤¤        ggºÂÑ;;D5ˆˆˆ-ÚÚXXXX¯¯\\¡¡^±ü¡G Á ÁnÈÈÈJJôN¸(Q2£5X/î°}#CCððÖÖƒƒ,‡,,®¾s¾_ªª, Ò,,ÖÖ(ƒëë˜óï• ç ç ç ç ç çëëëë Ò,,,,, ý ý Pª„„ * *.... ¬ ¬ ÿ ÿ°°„„ × × € €.. ×2ßߌŒ99$ÉÉooossÍ(’"f*…'Ð!LÓi´]]°°„„„„„„„„½½jjj½½½½½½ggÁg ¹ ¹gg    g ñ ñ D D › › › › … …2222 … … / / Ü6à … … … z z z z z z Õ z z(((((( ø ø ¦ ¦ Oªªªªª üWWWW ü== === ã » » » » e e e e ç ç ç ç== ü ü ü ü ¦ ¦ ¦ ¦SSS­­­­­AA”””îAA˜= == T T T T T T € € € €- Ó € € § § T T¯ T §X þ þ þ J J ÷ ÷    NN ó ó     ÷ ÷ ÷ ÷         ó ó ó ó Ì&&&""""¿¿ii »iÃ1'É1ð(wJ†Ù~~~Ù~ Oª ü ü ü ü ü ü › › › @ ›õõ › › › › › ñ ñ D D › › › › — ñ ñ ñ Îssss Æ Æ¯¯XX « «ÚÚˆ-„„„„n nnnn j jrrû       œ ÷ J J¤¤ ÷ ÷¬QQ¬ººººggºººººÑ!-.*y\∈ÚÚÚÚ³X\\¯¯ôô©VüGG ÁnÈ#}RøJJôôVu#¿%‰ÐvnnCCCC { {ƒƒ,,,,cÝ#ü‚ W ý ý $ $ÖÖÖÖëëFFB ç•• ç ç ç ç>>>> Ò Ò Ò ÒÙÙªªªª ¦TT„„„ *.. €ÛY´YY]]„„ × ×..ÛÛßߌç9ß9ßÉÉoovooÅ Í7!¸0œ6600!L +°°°„„„„„„„„½½½½½½½½½½jjgggg c½j g   c — — D D › › › › … …22àà / / Ü6à … … … z z z z z z z z z z((((((SS ¦ ¦ Oª O OªªW±±±±W== === ã » » » » e e e e ç ç ç ç== ü ü ü ü ¦ ¦ ¦ ¦SSS­bÌöA””IXöA= ã == T T T T T T € € € €- Ó € € § § T T¯ T §X þ þ þ¤¤ ÷ ÷    NNNN     ÷ ÷ ÷ ÷        NNNN Ì&&&""""¿¿ » »ii »iÃ!æ£H•†Ù~~~Ù~ Oª ü ü ü ü ü ü › ›õ › ›õõ › › › › › ñ ñ D D › › › › — ñ ñ ñssssss Æ Æ¯¯XXÚÚ- Ó„„„„Èn Á ÁnnnnÅÅ j jrrû       ÷ œ J J¤¤QQa¬ºººº  ººººº,%1>.‰¶=ˆˆÚÚÚÚ» ³\\¯¯™™ôNü¡ ì ì ÁnÈ#œ¥ðôôüüÜÔzvnnCCCC { {(( Ò Ò,, ‚!G7 W ý ý $ $ÖÖÖÖëëëëB ç•• ç ç ç ç>>>> Ò Ò Ò Òªªªª ¦TT„„„ *.. €Û´YYY]]„„ × ×..ÛÛßߌç9ßß„oooovÉÉ z‚¡-ç7`7`7`8O.Õâie +°°„„„„„„„„½½½½½½½½½½jjgggg½j g  c(!¥!¥ î î î î › › › › … …22‰‰‰‰‰‰ Ü6 … … … … Ñ Ñ $ $ z z z z((((((((ªª O O ü ü ü üªªÅjµ˜= ç ç” 9 9 9 9 9 ç ç ç ç » » » » ü ü ü ü O O ü üªªW Ô$¨( +6M===ö»þî ==== T T T T þ þ « «---- Ö | ) ) « « « « « « « «NNNN ÷ ÷¤¤ûûNNQQQQ ÷ ÷¤¤¤¤¤¤ÏÏÏ u u u u u » » » » e e¿¿¿¿t||3ÙÙ~ÕÕ((ª O ü ü ¦ ¦SS › ›HH › ›HH ñ ñ D D › ›HH ñ ñ ñ ñ îHHHÊÊssss¯¯¯¯¯¯¯¯----„„„„ j jnn Á ÁÅ j     ó ó ÷ ÷ J J ÷Q¬a%€ÃYºººº  º _  ººÅäüü£9Þ„ Ö111 d·\\\™™ôôJJððnnnnÈ#+"$ïf¡GGG¡¡##vÅÅCCðð Ò Ò((ƒƒ®cÅÅ®®TTÖ { { {, ÒÖÖÖÖ••BBëëëë>> ‘ ‘ ç ç ç ç Ò ÒÖÖÖÖTTªªWW22 ×2„ *„ß]]YY´´ÛÛˆˆ„„„„ˆˆÛ5ÛÛÛÛssÅ zz‚ü/ï8886ô.Õ5»aaÛÛ..ÛÛ..ggjjjj½½ggggjjggjj½½½½jj²²ºÙ(j(j î îHH › › › › … …22 / /‰‰‰‰ Ü6 … … … … Ñ Ñ $ $ z z z z((((((((ªªªªWWWW$¨!ój˜= ç ç” 9 9 9”” ç ç ç ç » » » » ü ü ü ü O O ü üªª±f$¨4æ5“*¿\˜˜˜œöî” ==== T T T T þ þ « «---- Ö | ) ) « « « « « « « «NNNN ÷ ÷¤¤ûûNNQQQQQQ¤¤¤¤¤¤ u uÏ u u u u u » » » » e e e e¿¿¿ÇÇÙ~Ù~ÕÕ((ª O ü üSS › ›HH › ›HH ñ ñ D D › ›HH ñ ñ ñ ñH£HHÊÊssss¯¯¯¯¯¯¯¯---- ) ) ) ) j jnn Á ÁÅ j    NN ÷ ÷¤¤ ÷Q¬) /Í%§i _ºº  º _  ººÅss9„Þ„ Ö111¯ ·\\\\™™™™ððððnnnnnÈv… V¡GGGGGÈÈvÅÅCC • • Ò Ò((((®®[[®®TTÖ {ÖÖ, ÒÖÖÖÖ••œœëëëë>> ‘ ‘ ç ç ç ç Ò ÒÖÖÖÖTT[[ªªWW22 ×2ß„ *„]]YYYYÛÛˆˆ„„„„ˆˆ5ÛÛÛÛÛssÅ   (7#À3þ6³6³4?&¶%aaaÛÛ..ÛÛ..ggjjjj½½ggggjjggjj½½½½jj  ºo†† î î › › › › › › … …22‰‰ Ü Ü Ü Ü Ü Ü … … Ø Ø Ñ Ñ $ $ z z z z((ÕÕÕÕ(‚±W±±_ªªj/Ô˜= ç ç” 9 ç ç”” ç ç ç ç e e » » » » ã= ªª ü ü O O ü ü Oª¹ ™/|2Þ( +˜˜˜AA”” ë==¯ T þ þ « «---- Ö Ö Ö Ö « « « « T T T T « « « «NNNN ÷ ÷ ÷QûûNNQQÿÿÿ¤¤¤¤¤¤¤"""" È""" » » e e e e¿ elll¿¿~~ Ñ Ñ z z z z ü ü ü üS­SSHH › ›HH › › D D — — › ›HH ñ ñ D Dõõõõss! Ư¯¯¯ÚÚ-- ) ) Ö ÖÅÅ Á Ánn        ¤¤¤¤ ÷Q¬Ë'®-!—Âgººg ºº    c¾kk„„„„ Ö Ö1‹ dd \\¯¯ ì ì™™ððCCnn Á Á Á ÁvNNô™GG™™ ÁÅÅ • • • • Ò Ò Î(((((ƒÝÙ,, Ò ÒÖÖÖÖœœÿ¤ó˜ëë>> ‘ ‘ : :•• Ò Ò((ÖÖ ¦ cªªWWß„2Œ2 ׄ„°°°° ¬ ¬YY €ÛÛÛ„ß22ÛÛˆ.Û €..ssÅÅ  zz’"f(}+2$®5a´´YY......ÛÛgg½½½½ c cgg½½jgggg½½j``² gg î î › › › › › › … …22‰‰ Ü Ü Ü Ü Ü Ü … …22 Ñ Ñ $ $ z z z z(( z zÕÕ(‚W±…~n_ª[µµ[˜= ç ç” 9 ç ç”” ç ç ç ç¿¿ » » » » ã= O O ü ü O O ü ü OªÔÜ'M˜== ç ç”” ë==¯ T þ þ « «---- Ö Ö Ö Ö « « « « T T T T « « « «NNNN ÷ ÷ ÷QûûNNQQÿ´Yÿ¤¤¤¤¤¤"""""}"" » » e e¿¿¿ elll¿¿~~ Ñ Ñ z zÕÕ ü ü ü ü øSSSHH › ›HH › ›ŸŸ ñ ñ › ›HH ñ ñŸŸõõõõwwss! Ư¯¯¯ € €--„„ Ö ÖÅÅ Á Ánn        ¤¤¤¤ ÷QQp%´Âgººg ºº  ggc¾„„„„ Ö Ö1‹¾¾d\\¯¯ ì ì™™ððCCnn Á Á Áôôô™GG™™ ÁÅÅ • • • • Ò Ò Î((((((ƒÙ,,,,ÖÖÖÖœ -!ˆMëë>> ‘ ‘ : :•• Ò ÒƒƒÖÖ ¦ ®ªªWWß„2Œ2 ׄ„°°°° ¬ ¬YY €ÛÛÛ„ß22ÛÛ.ˆÛ €..ÅÅÅÅ  (Ýä™%aa´´YY..ˆˆ..ÛÛgg½½½½ c c ¹ ¹gg½½jÁÁgg½½j``²   p p p pÊÊàà22 Ü Ü Ü Ü^^ ± ± ± ± ± ± Ñ Ñ Ñ Ñ zÕ(( O O OªSS‚’#"/Q-I!?/ÕÕÕÕÙÙ++ e e » »   ç ç””==== e e ç ç Œ Œ ¦ ¦ ø ø O OW ü~~~~33ààlliiii · » » » » « « « «\ « « « « « « « «\¯¯ ÷ ÷ ÷ ÷ ÷ ÷QQÏÏÏÏ&úEÛÓyÏÏ""¤¤ ÷ ÷¤¤ J J » » » » » » » » 6==ëëëë~~ Ñ ÑÕÕÕ z z z z z zÕÕÕ Æ! Æ Æss Æ Æ p p Æ Æ   p pÊÊÊ%wwÊÊwwwXXXX T T T T™™ ì ìCCð •™™ ì ì™™ ì ì"" u uyy&&ûû¨¨Yÿggººcc¾¾ ¶ ¶cccc Ö Ö1111Þ9‡"¦–d¯nnnn ÁvNôGGGG™™nnnn Á Á™™™ ?CCCC ì ì ì ì ý ý ý ý ¦ ¦T ù((((((((ªª ý ý ¦TTÖÖƒƒ,,,,u£0–1ñ&ÄÄëë ‘ë ç ç••ªªªªTTTTTT ¦„„„„Û €ÛÛYYY´°° ¬YY]..ÛÛ„„2 × í íššCCññ –ñžžøøøS”9Œ2ˆˆ....ÛÛ..ÛÛ å å å å å å’’ µ c cj å å??––èè’’ å å––èè0‹‹‹â< p p p pÊÊ … … Ø Ø Ü Ü Ü Ü^^ ± ± ± ± ± ± Ñ Ñ Ñ Ñ zÕ(( O O OªSS‚G(Œ4»5h&…™ŠÕÕÕÕ~~++¿¿ » »ii ç ç””==== e e ç ç ç ç ¦ ¦ ø ø O OW ü~~~~~~++iiii · » » » » « « « «\ « « « « « « « «\¯¯ ÷ ÷ ÷ ÷ ÷ ÷QQÏÏÏÏ ¿.H(ÞUˆ.ÏÏ""¤¤ ÷ ÷ J J J J » » » » » » » »ë ==ëëëë~~ Ñ ÑÕÕÕ z z z z z zÕÕÕ! Æ Æ Æss Æ Æ p p Æ Æ  ÊÊÊÊÊ%ww%%ÒÒÒwXXXX T T T T™™ ì ìCCð •™™ ì ì™™GG""ÏÏyy&&ûûNNQQÿ¤  ººcccc ¶ ¶ ¶ ¶cccc Ö Ö1111Þî%[2ä.Ô‡d¯nnnn ÁvNôGGGG™™nnnn Á Á™™™ ?CCCC ì ì ì ì ý ý ý ý ¦ ¦ ùT((((((((ªª ý ý ¦TTÖÖ(( Ò Ò,,ß'+," +&ÄÄëë ‘ë ç ç••ªªªªTTTTTT[„„„„Û €ÛÛYY ÿY°° ¬YY]..ÛÛ„„2 × í íššCCññ –ñžžžžžøß9Œ2ˆˆ.... € €..ÛÛ å å å å å å’’ µ c cj å å??––èè’’ å å;;èè‹ååå—< p p p p22 … … Ü Ü Ü Ü^^ ± ± ± ± ± ± Ñ Ñ Ñ Ñ z z( Í ¢ ¢ ü üSS‚’ &…*”fŠ/(( zÕ $ $~~   » » ç ç””==== e e”” ç ç= ã== ¦ ¦ ¦ ¦ O Oª~~~~++~ $ e eiiii¿ e e eiiii « « þ þ T T T T¯¯ « «XXXX T T¯¯¤¤¤¤ÿÿY´„*Ï*Ó˜*85 3²"ã.ÏÏ"" ÷ ÷ ÷ ÷ J¤ J J » » » » » » » »== ==== Ñ Ñ~~‚((((( z z((‚( Æ Æssss Æ Æw Æ Æ  ÊÊÊÊÊ%%%%,Ò³³`XX « « T T™™ ì ì •ðð • ? ? ì ì ìG™™"""" Ì ÌyyNNNN¤¤QQ    cc ¶ ¶cccc ¶ ) )„„„Þ1@D(½&µ,·\ Á Ánn Á ÁnÈ¡¡GGGG™™nnnnnnnnG ì ì ìCCCC ì ì ì ì ý ý ý ýTTTT(( { {ÖÖÖÖªª ý ýTT ¦ {Ö((Ùm"ŒçÛqFë>> ç ç•• ý ýª P ¦TTT®[„„ ×2ˆ.ÛÛYY ¬ ¬°°]..ÛÛ„„„„ í í í íCžžžññññKñññßß22ÛÛ.ˆÛÛ € €...ˆ å å 7’ å å’’ c cjj½½’’? å;;èè? å’’; áèè88“¢cS p p  Â p p22 … … Ü Ü Ü Ü^^ ± ± ± ± ± ± Ñ Ñ Ñ Ñ z z Í( ü ü ü üSS(‚7G¡’/Õ(( zÕ $ $~~ii » » ç ç””==== e e”” ç ç= ã ã ã ¦ ¦ O Oª O~~~~ Ñ Ñ~ $ e eiiii¿ e e eiiii þ þ T T T T¯¯ « «XXXX T T¯¯¤¤¤¤ÿ´Óâþ9„*Óã +&)'ƒUˆÓÏÏ""QQ ÷ ÷ J¤ J J » » » » » » » »== ==== Ñ Ñ~~‚(((((ÕÕ((‚( Æ Æssss Æ Æw Æ Æ   p pÊÊÊ%Ú444‡,  `XX « «¯¯™™ ì ì •ðð • ? ? ì ì ìG™™"""" Ì ÌyyNNNN¤¤QQ    cc ¶ ¶cccc ¶ ) )„„„Þ‹æpÊw·\ Á Á   Á ÁnÈGG ì ìGG™™nnnnnnnnG ì ì ìCCCC ì ì ì ì ý ý ý ýTTTT((ÖÖÖÖÖÖªª ý ýTT ¦ {Ö((ÙmmÈ"Ìë ‘>> ç ç•• ý ýª P ¦TTT®[„„ ×2ãˆÛÛYY°°]..ÛÛ„„„„ í íGGCžžžññññKñññ„„22ÛÛ.ˆÛÛ € €...ˆ å å 7’ å å’’jj c cjj½½’’? å;;èèš?’’; áèè888ýr®   l l p p p p Ü Ü‰ / Ü66 Ü ± ± ± ± ± ± ± ± z z z Í Í z z ü ü ü üªªªª((//ÝÝ‚( z z(((( zÕiiii » » » » ç ç””====¿¿¿¿l== ã ã ü üª O ¦ ¦ ¦ ¦ z z zÕ z z(( » » » »¿¿¿¿¿ll¯¯XX « « þXXX T T¯¯XXXX\¯  ¯ûû¨¨´ˆ-Æ4Š-ñXŒ×**ŒA˜ã&ÏÏ""¤¤ ÷ ÷¤¤¤ Jii » »ii » ç ç 9 9 ==+ Ñ Ñ+ÕÕÕÕ Ñ Ñ~~~~ Ñ Ñssss! Æ Æ Æ! Æss p p   Æ ÆÊÊ%%,‡<Kªªš‹¾  ¯ « « « «\ « « ì ì ì ì • •CC • •CCCCCC Ì& Ì Ì Ì Ì& Ì ÷ ÷ J J¤¤QQccccºººº ¶cc1 Ö Ö Ö--ˆâ    ·\ÅÅ Á ÁððCCCC • • j j Á ÁnnððCðððð™™ ì 쪪 ý ýTT(ƒ((,,T®TTTTTT(( { {((ÖÖmmmÄÄiiëë˜>•• ç ç ¦ ¦TTªª ý ý ý ý ý ýªªWWˆˆˆˆßß„„°°° +YY´Y]] +°YYYY22ßßÛÛ € € í íGG –ñKKññññšššš„„ß„ × × ×2ß„ * *„„„„??’’’’? ågg ¹½½½½ å å’’;–èè––èè’’’’44â—ùD   Æ Æ p p p p Ü Ü‰ / Ü66 Ü ± ± ± ± ± ± ± ± zÕ z z(( z z ü ü ü ü O O O O((ÕÕ‚‚( Í z z Í Í(( zÕiiii » » » » ç ç””====¿¿Çl== ã ã ü üª O ¦ ¦ ¦ ¦ z z zÕ z z(( » »¿¿¿¿¿|| TXX « « þXXX T T¯¯XXXX\¯  ¯ûû¨¨´"ò4Š8š4µ#Œ×ÏÏ××ÓÓ& Ì u u""¤¤ ÷ ÷¤¤¤ Jiiii » ç ç 9 9 == Ñ++ ÑÕÕÕÕ Ñ Ñ~~~~ Ñ Ñssss Æ! Æ Æ! Æss p pss Æ ÆÊÊ%%,<['Ô,è*3_šd ¯ « « « «\ ì ì ì ì • •CC • •CCCCCC Ì& Ì Ì Ì Ì& Ì ÷ ÷¤¤¤¤QQcccc _ _ _ _ ¶¾¾1 Ö Ö Ö---ˆ³³³³\ÅÅððCC • • j j Á ÁnnððCðð • •™™ ì 쪪 ý ýTT(ƒ((,,T®TTTTTT(( { {((ÖÖmmmÄÄiiëë˜>••BBTTªªWW ý ý ý ýªªWWˆˆããßßßß°°° +´´´]] +°YYYY22„„ÛÛ € €GGGG –ñññññññšššš„„ß„ × × ×2ß„„„„„„„??’’’’? ågg ¹½½½½ å å’’–;èè;;èè’’’’44ââ Æ Æ Æ Æ p p p p Ü Ü Ü Ü Ü6‰‰ ± ±^^ ± ± ± ±((((ÕÕ(( O O O O ü ¢ O O((((‚‚(( z z Í Í((ÕÕ » » » » » » » » ç çî”====tÞ‹Çëëë ã ã ã= ü ü ü ü ¦ ¦SS z zÕÕ(((( e e e e » »ii¿¿lllÇ„„·¯¯X³XX « « «¯¯ « « « «¯ T T T T¯ ¯¨N¨¨.s3Ý0¦ Œ×}}**&&& Ì"""" J J ÷ ÷ ÷ ÷ J Jiiiiiiii ç ç ç ç== $~~ $((((~~ Ñ Ñ Ñ Ñ~~ Æ Æ Æ Æss Æ Æ Æ Æ Æ ÆÊÊsssswwwÒ‡ñ%1N50÷%v¢  ¯ « « « «¯¯³XXX ì ì ì ì • •CCCC • • • • • • Ì&&& Ì Ì Ì Ì¤¤¤¤ J¤¤¤cccc _ _ _ºcc¾¾¾c ¶„„Þ„-- €Ú¯¯\ÅÅ Á ÁnnCCðð • •ð • j j ÁCC •ðððCC™™ ì ì ýWW ýTT(( { { ¦ ¦ ¦ ¦TT((ÖÖ((ÖÖÀÀÀ eiiiiëëëë••BBTTTT ý ýWWWW ý ýªW²êŸŸ99Aç]]° +a°° ¬ ×2„„Û €..GGššññžžññññšššš„„ß„„„22ß„22„„ ×2??ì’ å?’’ ¹ ¹nj½½’’ å å;;;;;;;–??’’ Ú Úââ Æ Æ Æ Æ p p p p Ü Ü Ü Ü Ü6‰‰  ^^ ± ± ± ±(((( z z(( O O O O üWªª(((((((( z z(((( z z » » » » » » » » ç ç” 9====ll)!²!Öëëë ã ã= ã ü ü ü ü ¦ ¦ ø ø z z z z Í Í(( e e e e » »ii¿t!!Çltt·¯¯X³XX « « « T T « « « «¯ T T T¯ T¯ ]¨¨¬aË5%Ò A×""ÏÏ&&& Ì"""" J J ÷ ÷ ÷ ÷ J JiiiiiiiiAA ç ç== ~ $~ $((((~~ Ñ Ñ Ñ Ñ~~ Æ Æ Æ Æss Æ Æ Æ Æ Æ ÆÊÊsssswwÒ,áK#Å/ó2R.B!fG ¯  Q « «¯¯³XXX ì ì ì ì • •CCCC • • • • • • Ì&&&&& Ì Ì¤¤¤¤ J¤¤¤ccccºº _ºcccc¾ck„„Þ„-- €Ú¯¯\ j jrr Á ÁnnCC • • • •ð • j j ÁCC •ðððCC™™ ì ì ýWW²TT(( { { $ $ ¦ ¦ ¦ ¦TT((ÖÖ((ÖÖÀÀÀ eiiiiëëëë•• ç çTTTT ý ýWWWW ý ýªW² (’'8 ””«Q]° +a°°]]aa ¬ ×2„„ €Û..GGššññCCññññšššš„„„ß„„22„ß22„„ ×2 å åì’ å?’’ ¹ ¹ ¹j½½’’ å å;;;;;; á; å å’’44ââ ñ ñŸŸ › › îH Æ ÆsswwwPõ£H ñ ñ ñ ñ== i    e e z z(( Ñ Ñ~~ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦SSªª ü ü Ñ Ñ Ñ Ñ((((ll!æ„t==ë = ã » »ii · · · ã ã== ç ç ç ç == 9 9 çA„““ÖÇ\\    ³X„„1 Ö Ö Ö Ö Ö T TXXXX Ó Ó € € €Ú-ˆCC<<’G¢ $¸"Õkcc¾¾      ggå ‹88ŽŽŽŽªªªªSSSS(((((((( ”” ç ç== ë == ›õHHHH › › Æ!ss´´´´  fÀ.ò%·&»!QŒ}+Å j Á Á Á Á Á ÁÅ j ÁnnCC • • ì ì ì ì Ì Ì&ÏÏ u uNNNNNNNNŽŽ á á á á 4 4 á á<<ŽŽéé™™GGCCðð™™GGCðð„„11---- Ö Ö Ö Ö Ö Ö„„ Á Ánn Á Ánn • •CCCCððXXXX ¦ ¦ªª P P(( { {((((,,((ÖÖ••BB•••••••• ‘ ‘>>T® ¦ ¦®TÖÖÖÖƒƒÝ’#i2M,ãð~~;†ÉooÉÉoÅÅÅ $$ Ás ×2„„......ÛÛ2 ׄ„oossžžñ –šš íGèèèè Žè; á ¹ ¹ ¹ ¹½½QQQQ ú ú ú ú¨ M   úQQQ«##*…‰. ñ ñŸŸ › › îH Æ Æssw,,_ý£ ñ ñ ñ ñ== i    e eÕÕ(( Ñ Ñ~~ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦SSªª ü ü Ñ Ñ++((((lÇ¿==ë = ã » »iil · · ã ã== ç ç ç ç == 9 9Aœ„# /;/;#ºÖ\\  hh „„1 Ö Ö Ö Ö Ö¯¯XXXX Ó Ó € € €Ú-ˆŽŽ á á’’í¢// kcccc      ggå ‹88ŽŽŽŽªªªªSSSS((((((((ëë ”” ç ç== ë == ›õHHHH › › Æ!ss´´´´   fiÄÓ.2}"ÈÐvÅ j Á Á Á Á Á Á Á ÁÅ ÁnnCC • • ì ì ì ì Ì Ì Ì&ÏÏ u uNNNNNNNNŽŽ á á á á 4 4 á á á áŽŽŽŽ™™ ì ìCC • •™™GGCðð„„11---- Ö Ö Ö Ö Ö Ö„„ Á Ánn Á Ánn • •CCCCððXXXXªª P P(( { {(((( Ò Ò((ÖÖ••BB•••••••• ‘ ‘>>®T ¦ ¦®TÖÖÖÖƒƒƒ8àZZ;~ÉÑÑÉooÉvvÉoÅÅÅ $$ Ás ×2„„......ÛÛ2 ׄ„ÉÉssssžžñ –šš íGèèèèCè á;nn½½QQQQ ú ú ú ú¨ M   úQQQ«#Øþ&x&!] ñ — ñ ñ › › › › sssÊ%ᦆªP ñ ñLLëë== » »   e e((((~~++SS ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦SS ü üªª~~++ÕÕÕÕl¿¿¿¿ëë== ã ã » »ii¿ e · · ã ãëë ç ç ç çë ç çîI“/;6­6­+,9Çl¯  ¾%ÚÊ»„„ Ö Ö Ö Ö Ö Ö « « « « € € €ÚÚ € €ÚŽŽ 4Žåå@šÅÅkc ¶ ¶  _ _    8888 á á á ᪪ªª ¦ ¦ ¦ ¦((((((((ëë ”” ç ç ======HHõ › › ›HHssss´´´´^¸¸¸iqqm#ÈÈnÅÅ Á Ánn Á Ánnr'#nnnð • • • ì ì ?™yyyyÏ u""NNNNNNNNŽŽ á á á á 4 4 4 4 á ᎎ á á ì ì ì ’CCCCGG™ôðð11ÞÞÚÚÚÚ Ö Ö Ö Ö„„ Ö Ö Á Ánn Á ÁnnCCððððCCXXXXTTWWªªÖ { Î Î Ò Ò(((( Ò Ò Ò Ò((ÖÖ••••BBB ç••••>>>˜TTTTTTÖÖÖÖ(ƒƒÝ~Ù†+$ÉÉÉÉoÉÉssÅÅÉÉ ÅÅÅÅÅÅÅ„„„„ÛÛÛÛÛÛ.. × ×22$ÉoossÅÅCCCCššššèèèèC Ž;–ÁÁÉn½½½QQQQ ú ú M M ú ú M MQ öþY}ç)Ú3T5,æ ñ — ñ ñ › › › › sss%[/ó5‰-jÉPLL ñ ñëë== » »   e e((((~~++­­ ¦ ¦ ¦ ¦ ¦ ¦SS ü üªª~~++ÕÕÕÕl e e e eë똘== » »ii¿==ëë ç ç ç çë ç ç”îÞ'1C1C%„Çl¯ ¾Ý*,Í&%9„ Ö Ö Ö Ö Ö Ö « « « « € € €Ú5ÚÚ € 4 4 4Žåå@å ¶¾c ¶ ¶  ºº    8888 á á á ᪪ªª ¦ ¦ ¦ ¦((((((((ëëëë”” ç ç ======HHõ › › ›HHssss´´´´^¸^^´¼¼ff¸ÈnnÈ j j Á ÁnnnnrrÈÈnnð • • • ì ì™ ?yyyy uÏ""NNNNNNNNŽŽ á á á á 4 4ŽŽ<<ŽŽ á á ì ìG ìCCCC ì ì™ôCCðð11ÞÞÚÚÚÚ Ö Ö Ö Ö„„ Ö Ö Á Ánn Á ÁnnCCððððCCXXXXTT ý ýªªÖ {((,,(((( Ò Ò Ò Ò((ÖÖ•••JœœB ç••••>>>˜®®TTTTÖÖÖÖ(ƒ(ƒÉ$Ñv$ÉÉÉÉoÉÉssÅÅoo ÅÅÅÅÅÅÅ„„„„ÛÛÛÛÛÛ.. × ×22ÉooossÅÅCCCCššššèèèèèè;–ÁÁn½½½QQQQ ú ú¨¨ ú ú M M öQYþ#B/D6 7º2P ñ ñ ñ ñ › ›H îss!!w‡$r3V6Œ.mùõõHH== ã ã » » » » e¿(( z z~~+àjµ­S ü ü O O ¦ ¦ ¦ ¦ OªªÙÙÙ~ z z(( e e » » » »====ëë ll”îî””” ç ç” 9 ç ç ç çAAÏ“£ X=\·s%±5B6/+Ýæ1 Ö | Ó--- T T T T ) ) )„11 Ö Ö á á 4Ž8’@庺 ¶cc _ _ººccccŽŽŽŽ8888SSSS ¦ ¦ z z z z~~ Ñ Ñ====== ==ë ====ŸŸ ñ ñ ñ ñ ñ ñ Æ Æ s! Æss^^^^¸^ ± ´´bb¸f Årrnn Á Á Ánnnn Á ÁrrCC èCCC • •"""" uÏ""¤¤ ÷ ÷      û88888888ŽŽŽŽ88 ‹ ‹ ìG™™ ì ì™™CCCC ì ì™ôÚ5ˆˆ„„„„ Ö Ö„„„„ Ö Önn Á Á Á Á Á ÁCCCCCCCC¯¯ªªªªTTÖÖƒ( Ò Ò((((,,BB•¤ûF˜˜>˜˜˜••œBTTÖÖÖ0ÖÖÖÖÉ$vÑvvvoo ÁÅÅÅÅÅÅÅÅ € €.ˆ2Œ22ˆˆ....ÛÛooÉÉooooññCC íGGG’’’’??’’jjjjggQ«QQ ¤ ¤QQ ¤ ¤ ¤ ¤¨¨UUyã"¿-“/ñ'Ò ñ ñ ñ ñ › › îHss!!wÒ&N äcùõõ î î== ã ã » » » » e¿(( z z~~+àjµ­S ü ü O O ¦ ¦ ¦ ¦ OªªèŽ~ÕÕ(( e e » »==== lÇÇlllîþXI”” ç ç” 9 ç ç ç çAAtÏÏxÃ\·!¢135B0…8æ1 Ö | Ó--- T T T T„„ )„ Ö Ö Ö Ö<< 4Ž’íõšºº ¶ccºº _ _ccccŽŽŽŽ8888SSSS ¦ ¦ z z z z~~ Ñ Ñ====== ==ë ====ŸŸ ñ ñ ñ ñ ñ ñ!!sÎ! Æss^^^^¸^ ± ´´bb¸^ ±Ånn Á Á Ánn Á Á Á Ánn Á Á ½ ½CCC èCC • •"" È È uÏ""¤¤ ÷ ÷      û88888888 4 4ŽŽ88 ‹ ‹ ìG™™GG™™CCCC ì ì™ôÚ5ˆˆ„„„„ Ö Ö„„„„ Ö Önn Á Á Á Á Á ÁCCCCCCCC¯¯\\ªªªªTTÖÖƒ(,,((((,,BBïJ ë˜˜˜>>>••B çTTÖÖÖ0ÖÖ00É$+††Ñvoo Á Á ÁÅÅÅÅÅÅÅÅÛÛ.ˆ2ŒŒŒ==ˆˆ..ÛÛooooooooññCC íGGG’’’’ å å’’jjÁÁQ«QQ ¤ ¤ ö ö ¤ ¤ ¤ ¤¨¨UUÔ6ëï: ñ ñ ñ ñH î › › Æ!!!ÊÊÒ‡¶TŸ › › › › ã ã ëë » » » »¿¿ z z(( $~~~SS ü ü O O ¦ ¦ ¦ ¦ OªW±CŽ~ÕÕ(( e e » »ii==== e¿ÇÖÞ)tööî”””” 9 ç ç””AAllÇÃÃ\\!å õå!‹1Þ„ € €-- T T T T¯ T Ö Ö Ö Ö„„ Ö ÖŽŽ<<@š¢GÂgººcc    ²cccc á á á á8888S­S ø ¦ ¦((((++++˜˜==ë ëëëë====ùŸ ñ ñ ñ ñ ñ ñssssss Æ Æ^^ ±^^^^´´  ^^rrÅÅ Á Á ÁÈn Á Á Á Á Á ÁnnCC • •C è •ðÏ u u u""""Q ÷ ÷ ÷NNûûåååå ‹ ‹ ‹ ‹Ž 4ŽŽ ‹ ‹88 ìG™™™™™™CCCC ì ì™ô5∄„1111„„ Ö Ö1 Önn Á ÁnnnnCCCCððC\\\\ªªªª[¶[, Ò,,ƒƒ((ÖÖ {Ö Ò,ÙÙBBBBëëëëëëëë ç ç••®®TT(ƒƒƒƒƒ00$ÙZ#iø~ÉÉÉo Á Á Á Á ÁÅÅÅÅÅ ÍÍÉoÛÛ.ˆßßçQ¾¯ê5ÛÛ..oo Á Á Á Á ÁCCññ í íšš’ì’ 7 å å å å½½gg ¤þ ¤ ¤QQ ¤ ¤QQQQ¨¨UUÌÌyyÐÐ ñ ñ ñ ñH î › › l Æ Æ ÆÊÊwwLLŸŸ › › › › ã ã » » » » e e z z(( $~~~ ¦ ¦SS ü ü O O ¦ ¦ ¦ ¦ Oª üW3ŽÙ~ z z(( e e » »ii====ëë ¿Ö!'$g“ÏöœœA” 9 9 9” 9 ç ç”” ç ç ·lii\\\·ll‹1Þ„ € €-- T T T T T¯ Ö Ö Ö Ö„„ Ö ÖŽŽ<<@šíGÂgººcc   g cccc á á á á8888S­ ¦ ¦S­ ¦ ¦(((( Ñ Ñ++˜˜==ë ëëëë====Ÿ D ñ ñ ñ ñ ñ ñssss   Æ Æ^^ ±  ^^´´  ^^rrÅÅ Á Á ÁÈn Á Á Á Á Á ÁnnCC • •C è •ðÏ u u u""""Q ÷ ÷ ÷NNûûåååå ‹ ‹ ‹ ‹ 4ŽŽŽ ‹ ‹88 ìG™™™™™™CCCCGGôNù L=ÞÞ1111„„ Ö Ö1 Önn Á ÁnnnnCCCCððC\\\\ªªªª[¶‡,,,ƒƒ((ÖÖÖ0‡,ÙÙBBBBëëëëëëëë ç ç••®®[[TT(ƒƒƒƒƒ00$Ž'y0ò&Ì3$$Éov Á ÁÅÅÅÅÅ ÍÍÉo € €.ˆßß«(é0±)í¯ÛÛ..oo Á Á ÁCCññ í íšš’ì’ 7 å å å å½½gg ¹ ¹ ¤þ ¤ ¤QQþþQQQQ¨¨UUÌÌuu p p p p   p p D D ñ ñ › ›õP££HH ñ ñ ñ ñ » » » »   » » » » » » ¦ ¦ øSªª ü ü z z z z Ñ Ñ~~S ø ¦ ¦ ü ü OªWW ü ü O O O O · e e¿¿¿¿ == ã ã=ò!1n6+3v!ÞUÃii e e e e 9 9 9 9==== » »iiiiiiÚÚ-ˆââââ³X « « « « þXXX þ þ « « « « Ö Ö„„ÚÚ-- ¶kÅÍskÅéŽŽŽ á< á Ẻg ºº gcccccc((((ÕÕ zÕ(((( z z zÕ¿¿¿¿ii » »ii » » p pÊÊ Æ Æ Æ! ñ ñŸŸ D D DŸ  ^^  ± ±ðð™™™™™™™™ ? ?™™ • •CC ì ì ?™ ì ì ?™CC • •Ï u""""""}" uÏyyyycccc    8’88 ‹ ‹88CCððCCCCCCCCððø¼&3.R$,£5ÚÚÚ¯¯¯¯ «™™ ì ì™™™™ÅÅÅÅnȈˆ5Ú²WªªWW,,ÖÖÖÖªª ý ýT®,,Ù,,BBBBFë>>ÀÀÀÀmÙ4ᇃ(ƒƒÖÖƒƒÙÙ¢±+":}©¢GššššššGfü í í í í í í íCCžžšš í í € €ÛÛ2Œ³0[5n1_l=22„„ooooÅ koo Áoooogggggggg? å??;–;;QQþþ ¤ ¤QQ&&&&&&&& Ä ÄÈÈ p p p p p pŸŸ ñ ñ › › ›õHHHH ñ ñ ñ ñ » »   » » » » » » ¦ ¦ øSªª ü ü z z z z Ñ Ñ~~S ø ¦ ¦ ü üª O ü ü ü ü O O O O · e e e e¿¿ =====ò*ª4Ñ2!ÞUÃii e e e e 9 9 9 9 ã ã== » »iiiiiiÚÚ-ˆˆˆˆˆ³X « « « « þXXXXX « « « « Ö Ö„„ÚÚ--k ä!VGzkéŽŽŽ ‡ á á Ẻg ºº g¾¾¾¾cc((((ÕÕ zÕ(((( z z zÕ¿¿¿¿ii » »ii » » p pÊÊ Æ Æ Æ! ñ ñŸŸ D DŸù^^^^ ± ± ± ±CCðð™™™™™™™™™™™™ • •CC ì ì ?™ ì ì ?™CC • •Ï u""""""}" uÏyyyycccc    ’888åå88CCððCCCCCCððø&/­5/X5ÚÚÚ¯¯¯¯ «™™ ì ì™™™™ÅÅÅÅÈ#==5²Wªª ý ýªª,,ÖÖÖÖªª ý ýT®,,Ù Ò ÒBBBBFë>>ÀÀÀÀmmm4C[–݃ƒƒÖÖ((ÙÙG¢W±O¢GššššššGGG í í í í í í ížžžžšš í í € €ÛÛ2ŒI )@%0§ã22„„ooooÅ koo ÁooooggggggÁÁ? å??–ð;;««þþþþQQ&&&&&&&& Ä Ä Ä ÄÈÈ Â Â ÂÊÊÊÊŸ D ñ ñHHHH › ›HH ñ ñŸ D · e epiiii » »iiii ¦ ¦ ¦ ¦ªª O O(( Í Í Ñ Ñ Ñ Ñ ¦ ¦S ø ü ü ü ü ü ü O O O O O O e e e e e e == ëëE§l!0{\ò e e e e 9 9 ç ç == » »iiiiii €Ú------XXXX « «XX « « « « « « Ö Ö„„-ˆÚÚkŠ+}4I,*äkéŽ< á 4Ž<<ººººº gÅzÍcc(((((((‚ÕÕ((ÕÕÕÕl¿¿ » » »iii   p p Æ Æss ñ ñŸŸ ñ ñŸŸ´´ ­^^^^´´ ± ±^^ • •ðð™™™™™™ ìGGG ì ì • •CC ? ? ì ì ì ì ? ?CC • •""""""""""""yyyycc    88åå88ååCCððððððððððððb É'Ž"$õˆˆ-ˆ¯¯¯¯XX « « ì ì™™™™ ìGrrvПD—â²WWWªª ý ý((ÖÖ ýW ý ýTTTT,,,,,,,,BBBB˜˜ëëÈmmmmmmÙŽ–<ÖÖÖÖ((((Ù,,GG¢¢ôôôôGGšôšššš í í í íšš íG¦Kñš ?ššÛÛ.ˆ2ŒŒAúŸ=ã„„22ooÅ koooo Á Ágggggg å å å?ððè ŽQQþþþþQQ&&&&Ó-ÓÓqq Ä Äu ÂÊÊÊÊŸ D ñ ñHHHH › ›HH ñ ñŸ D · e e »iiii » »iiii ¦ ¦ ¦ ¦ªªªª(( Í Í Ñ Ñ v v ¦ ¦S ø ü ü ü ü ü ü O O O O O O e e e e e e ã ã ëëEòM§§òò » » e e e e”” ç ç == » »iiiiii €Ú------XXXX « «XX « « « « « « Ö Ö„„ˆâÚÚkz$¸.ß,*?ÅéŽ< á 4Ž<<ºoÉogÂzNGscc(((((((‚ÕÕ‚‚ÕÕ//l¿¿ » » »iii   p p Æ Æss ñ ñŸŸ ñ ñ D D´´ ­  ^^ Z Z ± ±^^ • •ðð™™™™™™G ì ì ì ì ì • •CC™™ ì ì ì ì™™CC • •"""""""""""×yyyy ¶ ¶cc    88åå’’ååCCðððððð • •ððððø›õ›‹ˆˆ-ˆ¯¯¯¯XX « « ì ì™™™™ ìGrrvПùL— ²WWªª ý ýÙÙ((00W ý ý ýTTTT,,,,,,,,BBBB˜˜FFÈmmmmmmÙÙ,‡ÖÖÖÖ((((Ù,,GGGGôôôôGGšôšššš í í í íšš íGK¦Kñš ?ššÛÛ.ˆ2ŒŒŒ5㈄„22 Á Áoo kÅoooo Á Ágggggg å å å?ððè ŽQQ ¤ ¤ ¤ ¤QQ&&&& xÓÓÓqq Ä Äuss  wwHH › › › › › › ñ ñLL › › › › i » » e eii » » » » » ü ü O O ¦ ¦SS z z(( $ $ $~ ü üª O ¦ ¦ ø ø O O Oª ¦ ¦ ¦ ¦ » »   » » » » ç ç ç ç 똘ëE˜˜˜˜i    e e==== ii » » » » » € €-- | Ö„ ) «XX T T « « « « « « « «„„ Ö ÖÚÚ--c¾ /ääÍ<<< ᎎéCo3ø3†áccccÕÕÕÕ++++ÕÕ/ÕÕ//Š e e¿¿ii » » Æ Æssssss ñ ñŸŸHHHH   ± ±´´´´ • •CCððððððððððCC™™™™ ? ? ì ì™™ô™ ì ì ? ? u u È Èyy&&yyyy""""    cccc 4 4<<ŽéŽŽ ìG™™™™ ì ìððCC™™™ô55ÚÚÚÚ³³¯¯ ì ì™™ððrÌÌ'Ÿùùê ®TT ý ý ý ý Ò Ò,,‡<¶[®TTTÖÖÖÖƒƒƒƒ˜˜˜˜óM¨¨uuÀmmÀÀƒƒÖÖ,,,,ÖÖ(( Ò,ššššššGGññCžññCCšš í íCC –ñCžžCšššš5ÛÛÛ„„„„„„22ß„„„ÅÅÅÅ Á Á Á Ágggg ¹ ¹’’ å?––;; M M ú   ¤ ¤QQ&&&& Ï Ï Ï ÏuÈÈss    ÂHH › › › › › › ñ ñ ñ ñ › › › › i » » e eii » » » » » ü üªª ¦ ¦SS z z Í Í $ $ $~ ü üª O ¦ ¦SSªªª O ¦ ¦ ¦ ¦ » »ii » » » » ç ç ç ç ë== ë==˜˜i    · · e e==== ii » » » € €-- | Ö„ ) «XX T T « « « « « « « «„„11ÚÚ--c¾kÅkkc<< á<ŽŽéC$ R+&!­wgººÂÂÂgcccc z z z z++++//Š/Õ//Špp¿¿¿¿llii » » Æ ÆssssssLLŸŸHHHH^^ ± ±´´bb´´ððððððððððððCC™™™™ ? ? ì ì™™ô™ ì ì ? ? u u""yy&&yyyy""""    cccc 4 4 á á 4ŽŽŽ ìG™™™™ ì ìððCC™™™ô55ÚÚÚÚÚÚ³³¯¯ ì ì™™ððrrÌDêê ®TT ý ý ý ý Ò Ò Ò Ò‡ñŶ®TTTÖÖÖÖƒƒƒƒ˜˜óóM"‹"‹I*ummÀÀƒƒÖÖ,,,,ÖÖ(( Ò,ššššššGGññCžK –CCšš í íCC –ñ éCCžšššš5ÛÛÛ„„„„„„22ß„„„ÅÅÅÅ Á Á Á Ágggg ¹ ¹ ¹ ¹’’ å?;;;;¨¨ ú   ¤ ¤QQ&&&& Ï Ï Ï ÏuÈÈ Æ Æ Æ Æ p p p pHHHH › › › › ñ ñ ñ ñH î › › » » » » e e e¿i  » » » » » » ü ü ü ü ¦ ¦ ¦ z z z z $~~~ ü ü ü ü ¦ ¦SS üW ü ¢ ¦ ¦ a »iiiiii ç ç 9” ã ã =˜ëë » » » » · · e e = ã ii » »ii »- Ó € € Ö1 Ö ÖXX « «¯¯ T TXXX þ « «„„11-ˆÚÚ¾¾¾c á á á<< á<K,†ðáÂgººººººcccc z zÕÕ++++Õ/‚‚‚‚ÝÝppÃll¿¿¿¿¿iii  Æ Æss Æ!ssŸŸŸŸHHHH^^ ± ´´bbb´´JJJ¥øððððððCCCGG™ôô™™™ ì ì™™™™ ì ì u uÏÏ Ì Ì Ì&yyyy u u u u  º _cc¾c á á á á á á<<™ôGG™™ ìGCCðð ì ì™™ˆ-ÚÚÚÚÚÚ³³³³\\\ ì ì™™ððnnnnÅÅrÌââââ[[ Pªª P Ò Ò‡<¾ TTƒ((((ƒÖÖëFMó°%î2É4$)%2uÀÀÀÀ0ÖƒƒÙÙ‡,ÖÖ((ššššGGGGññññžC –ñššG íCCCCCCžžGGGG..ÛÛ„„„„„„22 × ×„„ÅÅÅÅssoooo ¹gggg ¹ ¹’’’’;–;;¨¨ ú ú«Qþ ¤&&&& Ï Ï Ï ÏÈÈ Æ Æ Æ Æ p p p p î îHH › › › › — — ñ ñH î › › » » » » e e e¿i  » » » » » » ü ü ü ü ¦ ¦ ¦ z z z z $~~~ ü ü ü ü ¦ ¦ ø ø üW ü ¢ ¦ ¦ »ÃÃiiii ç ç 9” ã ã ã=ëë » » e e = ã ii » »ii »ˆ- € € Ö1 Ö Ö þ þ « « T T T TXX « «X þ « «„„ Ö Öˆâkk¾¾¾c á á á<< á–¦wÂg ººººººcccc z zÕÕ++++Õ/ÝÝÝÝÝ’ËËÃll¿¿¿¿¿iii  Æ Æss Æ!ssŸŸŸŸHHHH^^ ± Z Zbbb¥¥¥ÿøððððððCCCGü^¸ô™™ ì ì™™™™ ì ì u uÏÏ Ì Ì Ì&yyyy u u u u  º _ccc á á á á á á<<™ôGGô ? ’ ìCCðð ì ì™™ˆ-ÚÚÚÚÚÚ³³  \\\ ì ì™™ððnnnnÅÅr̈ˆˆˆªª Ò ÒÙÙ,,®®TT(ƒƒƒ(ƒÖÖëFóM°(£5~6Ù.çuÀÀ0ÖÝÝ44á‡ÖÖ((ššššGG¢¢ññññCž –ñšš í ’CCCCCCCCGGGG..ÛÛ„„„„„„22 × ×„„ÅÅÅÅssoooo ¹gggg ¹ ¹’’’’;–;;¨¨ ú ú«Q ¤þ&&&& Ï Ï Ï ÏÈÈ z z(( $ $ $ $ 9 9” 9 ç ç 9 9==== ç ç ç ç ñ ñ ñ ñ ñ ñ ñ ñŸ D D D › › › › Æ Æss! Æs  Æ Æ Æ Æ p p  ºº ¶ ¶ ¶ ¶cc     ¤ÿÿÿUUNN Ì Ì Ì& Ì&& Ì    ¶ ¶cc ¶ ¶cc       N ó J¤ ÷ ÷  û        N¨ÚÚÚ € Ö Ö ) ) « « « « T T Ö Ö Ö Ö € €--¯¯\·l0{zÅÅn  ì ì™™CCJJvvÈÈÅÅnnnn--Ú5ˆˆˆˆ„Þ9“â=Dùp»`·\¯¯XX¯¯¯ T J J ÷ ÷ ÷QQQûûû          88å ‹ ‹å’ Ý _ _ ggÂoÉ,‡44Òw££HHŸŸŸù¼#¯% + Z Z^^^^ Æ Æ Æ Æ Æ Æ Æ Æss! ÆÊ p › › › › › ›HHss Æ Æwww//ÕÕÕ z((ÕÕ‚‚ Ñ Ñ~~WWWWWWªªÝìG’†+~~ÊÊ!!ssHHHHŸŸùùõõõõNNûûN©ûûNNNN¥ÿRR““ææ—<< âææææ]]e¿Çæ(g,w"ýÏ´´i+Ñ$É~ÙÑvoooooooomÀÀq&ÌqÄÄqÀ eii ¼••••˜˜Fë33ààŠŠŠŠ33Ž33333Ž333ŠŠ Ü Ü ± ±  ;;èèèè;; Ž Žèè å?’’|||||||| Ï)||&&&&ÈÈu z z(( $ $ $ $””” 9 ç ç 9 9==== ç ç ç ç ñ ñ ñ ñ ñ ñ ñ ñŸ D D D › › › › Æ Æ   Æ ls  Æ Æ Æ Æ p p  ºº ¶ ¶ cc  ggÿY´´ + +N Ì Ì Ì& Ì&6&    ¶ ¶cc ¶ ¶ccgg     N ó J¤ ÷ ÷  û        N¨ÚÚ €Ú Ö Ö„„ « « « « T T Ö Ö Ö Ö € €--¯¯\\0{zÅÅ Á Án  ì ì™™CCððÈÈÅÅnnnn--Ú5ˆˆ--„Þ9“=—ùcÚÊ»·\¯¯XX¯¯ T¯¤¤ ÷ ÷Q¬¬¬ûûû          88å ‹å ‹88ºº ggÂ$~á<DDé4,Ò££HHŸŸŸù/Þ3í*t&´´^^^^ Æ Æ Æ Æ Æ Æ Æ Æss! Æ%Ê › ›õõ › ›HHss!!wÒÒÒ/// zÕ z((ÕÕ((++ÙÙWWWWWW OG"u'ß ;+~~ÊÊ!!ss££HHŸŸŸŸõõõõNNûû©NûûNNNN¥ÿRR““ææ< â â<ææææ]]e¿llÏ)Ï¿··´´iâZà$É$~voooooooomÀÀ&ëÛÌqÄÄqÀ eii ¼••••˜˜Fë33ààŠŠŠŠ333Ž33333Ž33ŠŠ Ü Ü ± ±  ;;CCèè;; Ž Ž Ž Ž å?’’||||||||) Ï||&&&&ÈÈu z z(( Ñ Ñ Ñ Ñ 9 9”” 9” 9 9==== ç ç ç 矟ŸŸ ñ ñ ñ ñ ñ — DŸ › › › ›s  Æ Æ Æ Æ Æ Æ Æ Æ Æ Æ p p _ _ºº ¶ ¶ ¶ ¶ ¶ ¶ ² ºYÃ-xÇm¨yyyy Ì&& Ì    ¶ ¶ ¶ ¶Åooºº         ÷ ÷¤ J ó ó        ûû--ÚÚ Ö Ö„„ « « « « T T Ö Ö Ö | € €--¯ \\  ddrrnn Á Á ì ì™™CC èCnnÅÅ j jnnnn €Ú555ÚÚÚ„„‹@ò\!Í(’$<whd \\XX¯¯¤ÿ¤¤Yii´°ûû          8888å ‹88ººggo$~ñ c®ž‡Òý£õõŸŸLLi.&d.ƒ'¿Ìbb´´b^^^^ss Æ! Æ Æ Æ Æ Æ!s ÊÊHH£HH îHHsssÎÚéñ<7‚ÕÕ((((((((~3;•f±ªªªªô!È'2^3Ù~~ p p!!ssõõHHŸŸ ñLõõõõNNûûNNû ¡ûûûûRRÿ¥ææææ â âææ99]] + +e¿ee + +a×!b3$ÉvvooooooooÀÀÀÀiyÌqqÄÄÄiiiiiiÄ••••ëëë뎎ààŠŠ7 Ü33àà †àà † †ààà7 Ü Ü Ü ±^^;;;;;– Ž Ž Ž Ž á;’’ 7 7||||||||||||&&&&ÈÈ z z(( Ñ Ñ Ñ Ñ 9 9””” 9 9 9==== ç ç ç ç D D D D ñ ñ ñ ñ — ñ DŸ › › › ›s  Æ Æ Æ Æ Æ Æ Æ Æ Æ Æ p p _ _ _ _ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ² º´"ò0{-ÆŒ¨yyÓÓ& Ì Ì&    ¶ ¶ ¶ ¶Å$oºº         ÷ ÷¤ J ó ó        ûû--ÚÚ Ö Ö ) ) « « « « T T Ö Ö1 Ö € €--¯¾\¯¯¯¯nn Á Á ì ì™™CCC#Ø+vÅÅÅÅnnnn €ÚÚÚ5ÚÚÚÞÞ‹@¶&Š2 65™.Ô!Kd \\XX¯¯ J¤¤¤ ='â°Uû        8888 ‹å88ººggoÉ~Ž"j+ä0¡-ì$rù<‡ý£õõŸŸLLiÌbb´´b^^^^ss! Æ Æ Æ Æ Æ Æ!ÎsÊÊHH£H îHHHssÎ(ù)Ü/ó'ÔüÝÕÕ((((((((ÙŽ´&.•ÁªªªªŠ?ô?3Ù~~ p p Æ{ssõõHHŸŸL¦õõõõNNûûNNû ¡ûûûûRRÿ¥@@ææ â âææ““]]°° +e·· + + + +aÃÙ~ÉoooooooooÀÀÀÀiÄqqqqÄÄÄiiiiii ••••ëëë뎎ààŠŠ7 Ü33ààà †à †à †àà7 Ü Ü Ü ± ^^;;;;;–èèèè; á’’ 7 7||||||||||||&&&& n n Ñ Ñ Ñ Ñ‚((( = ã== ç ç 9 9 = ã D D D D ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ Æ Æss Æ Æ Æ Æ p p p p  _ _ ¶ ¶  _ _ _ _ºo¿'X/w* |¸UU uÏÏÏ"""" ¶  _ _ _ _ gkcc         J J¤ J ÷ ÷ ÷ ÷ œ ÷ ÷Qˆˆ--„„ Ö Ö T T T T T T Ö Ö„ ) € €--»` « « « « j jÅÅnnn  ì ì ì ì • •ðð'Ìvnn j jrÅ--ÚÚ„„„„1‹9H&Š48#8#65B+Ýl· ¯³³XXXX J JQ¬"*º2Ù,!N¨N     á á á á88 ‹ ‹cck /™'Ô485]->é4ªPõõ££HHbbi´´^^ ± ± ± ± ± Æ!ssÊ p pÊ Æ Æss!!!!L ñŸŸHHHHÊÊ%Ú!2¨6¸2¨fÝ‚‚‚(((~~~~+;+˜&Å­­SS[Ù33ÙÙÙ~~ p pss Æ!õõõõHHõõŸŸŸŸûûûûN©NN øRRRûû©©êê<<<<<<@æ““““““]]]]]] + +]] + +  sssÍ Å kÅÅÅooooÀÀÀÀiÄÄÄÄÄÄÄiiÀÀÀiiiiBBBBëëëëàààà3333ŠŠ Ü Ü Ü ÜŠŠ33ààààà൵µµ  ± ±;; Ž Ž’’’’’ì? å’’ å å|||| Ï Ï||ÓÓ x x&&&& ÄqqÈÈ Ñ Ñ Ñ Ñ(‚(( ˜=== ç ç 9 9 = ã D D D D ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ Æ Æss Æ Æ Æ Æ p p p p ² ² _ _cc ¶ ¶  _ _ºººo))t¸]ûûÏ u u u"" È È ¶  _ _ _ _ ² ¶cc         J J J¤ ÷ ÷ ÷ ÷ ÷QQ ÷----„„ Ö Ö T T T T T T Ö Ö„ ) € €-- « « « « « j j j jnnn  ì ì ì ì • • • •rÌÌÌvnnÅÅrÅ--ÚÚ„„ÞÞ‹æî²-O8#8#8#7÷65ï(fÖld ³³``XXXX¤¤Q¬¸|"›#ö!ît¨¨Nûû á á á á88 ‹ ‹cck Õ?&z2¨6¸4*‰ÚPõõõHHHHbbbb´´´^^ ± ± ± ± ± Æ!ssÊ p pÊ Æ Æss{{{{¦LŸŸHHHHÊÊÊñ'Ô->)/üÝ‚‚‚(((~~~~+†•ÿµ­­SS[~ÙÙ~~~~3wwÊÊss Æ!õõõõHHõõŸŸŸŸûûûûN©NNR­RRûû©©<<<<<<æ@““““““]]]]]]°°]] + +  sssÍ Å kÅÅÅooooÀÀÀÀiÄÄÄÄÄiiÀÀ eÀÄÄÄÄBBœœëëëëàààà3333ŠŠ Ü Ü Ü Ü / /33àà † †à൵µµ  ± ±;;èè’’’’’ì? å’’ å å||||))||ÓÓÓÓ&&&& ÄqqÈÈ Ñ Ñ Ñ ÑÕÕ z z====˜= ë 9 9”” D D D D ñ ñ ñ ñ ñ ñ ñ ñ D D ñ ñ Æ Æss Æ l  ÊÊ p p p pÊÊ _ _ _ _ccºº _ _  º¸¸ +°UUNNÏ u""Ï u u u ¶ ¶ ¶ ¶ _ _  º _ _ _ ¶ ¶cc ó ó ó ó J J ÷ ÷¤¤¤¤¤¤ ÷ ÷--- Ó Ö Ö„„ T T¯ T„„ ) ) € €-- « « « « « « ½ Á Á ì ì ì ì è è èCÅÅÅÅnn Á ÁrÅÅÅÅÅ jˆˆÚÚ11‹‹9“î .©8#8#6È7J7J5B#ª!l·\X³XXXXQQ¤ÿ° +¿¿]¨NNNûû< ᎎ ‹åååccc¾¾(Ý['Ô+7+7#ÅKá,££PõHHõõbbbb´´´´^^^^  ± ±ssss Æ ÆssÎÎ0å[¦ŸŸõõõõÊÊ%%ÚDùD7‚‚‚‚‚((~~~~+†33­SS~Ù++~~~~ÊÊÊÊ! Æssõõõõ££HHŸŸŸŸûûûû©©N©RRRR©©ûû<<<<<<< â““““ææææ]]]]]]]]]] + +ss     kÅÅÅoommmmÄÄqÀÀBBïïëëëëààààŽ3ààŠŠ Ü Ü Ü Ü /Šàà33 †àŽŽbbbb¹¹¹^èèèè’’’’?? å å’’?? Ï)||) Ï||&&ÓÓ&&&& ÄqqÈÈ Ñ Ñ Ñ Ñ z z z z===== ã ë”””” D D D D ñ ñ ñ ñ ñ ñ ñ ñŸŸ ñ ñ Æ Æss Æ l   p p p p p p p p _ _ _ _ ¶ ¶ccºººº  _º¨¨UûûûNNÏ u""Ï u u u ¶ ¶ ¶ ¶ _ _  º _ _ _ ¶ ¶cc ó ó ó ó J J ÷ ÷¤¤¤¤¤¤ ÷ ÷--- Ó Ö Ö„„ T T T¯„„ ) ) € €-- « « « « « « « « ½ Á Á Á Á ì ì ì ì è è èCÅÅÅÅ   Á ÁrÅÅÅÅ jňˆÚÚ1111Þ9“H"{46È8#7J7J/Ø@Æ\·³XXXXX ÷ ÷¤ÿûUUU¨NNNûû< ᎎ ‹åååccc¾¾s(ñK<‡Ò££PõHHõõ´´´´¸¸^^    Î ss Æ Æss΃&# äùùõõõõÊÊÊÊ%%‚‚((((((~~~~ Ñ+ÙÙ­SSS~Ù++~~~~ÊÊ p p! ÆssõõõõHHHHŸŸŸŸûûûû©©N©RRRR©©ûû<<<<<<—<““““ææææ]]]]]]]]]] + +ss     zÅÅÉÉmmmmy.ÓÌq ¼ ¼ÀÀmmBBïïëëëëààààŽ3ààŠŠ Ü Ü Ü Ü /Šàà33;àŽŽbbbb^^^¹èèèè’’’’????’’?? Ï)||) Ï||&&ÓÓ&&&& ÄqqÈÈ z z z z z z Í( ==== ã===== ç ç ç ç D D — ñ D D DŸ › › › ›LLŸŸ ñ ñ ñ ñ › › › › D D D D î î › ›  _ _cc ¶ ¶8í@ ‹ 4 4 á áNNNNûû    ¤¤ ÷ ÷NNNN _ _ _ _ ¶ ¶ ¶ ¶    ¶ ¶ ¶ ¶     Ì Ì Ì Ì ÷ ÷¤¤NNNN\ € €ÚÚ--ÚÚ T T--ÚÚ Ö Ö ) ) jÅÅ j Á Ánn • • • • • •CC j j j j ìG™™CCCCÞÞÞ„ÚÚÚÚ„Þæ@"{,¡3f4•/+ Gsh³-ˆˆ-----""""ÏÏ}}¨¨ûûNNNN888888@@888’CCCž‹@š@Ú,Òõõ£HHHHH‰‰ Ü666‰‰ ± ± ^´ Z  p p   Æ Æ Æ Æ Æ!%%.™&z<%Ê!!ssŸŸŸŸLLŸŸ­­ ¦ ¦ ¦ ¦SS ü üª OSSS­((((‚(((((ÕÕ(((‚ÊÊ Æ ÆsssssswwÊÊ!!! ÆÐ+ÐÐÐÐÐÐRRRRRR¥¥<<ææææºhhdd.ˆˆˆ2222ÛÛˆˆˆãÛÉÉÍsssÉÉvmm"ö#»çÌqÄÄiimuÄÄÄĵµbb^^¹^bŠŠŠŠàààà3333Ž333j½½½½½½½½jjnÁÁÓÓ€€))||&&ÓÓ|| Ï)qq ÄÈÈÕÕ z z z z Í( ==== ã===== ç ç ç ç D D ñ — D D DŸ › › › › ñ ñ D DLL ñ ñ › › › › D D D D î î › ›  _ _¾¾ ¶ ¶8í@ ‹ 4 4 á áNNNN         J J ÷ ÷ ó óNN _ _ _ _ ¶ ¶ ¶ ¶    ¶ ¶ ¶ ¶  yy Ì Ì Ì Ì ÷ ÷¤¤NNNN\ € €ÚÚ-- € € T T--ÚÚ Ö Ö ) ) jÅÅ j Á Ánn • • • • • •CC ½ ½ j j j j ìG™™CCÞÞÞ„ÚÚÚÚ„Þ1‹=L !Í$Wí(¾h³-ˆˆ-----"""" u u""NNûûNNNN888888åå888’éééC00‹0ÚÚÒwõõ£HHHHH‰‰ Ü666‰‰ ± ± ^´ Z ­ ­  p p   Æ Æ Æ Æ Æ!Ê<Kñ‡%Ê!!ssŸŸŸŸLLŸŸSS ¦ ¦ ¦ ¦SS ü üª OSSS­((((‚(((((ÕÕ(((‚ÊÊ!!sssssswwÊÊ!!! Æ+…ÐÐÐÐÐÐRRRRRR¥¥<<ææææºhhdd.ˆˆˆ2222ÛÛˆˆãˆÛÛÉÉÍsssÉÉvÈÈ"ŒQçÌqÄÄÄÄmÀÄÄÄĵµbb¹¹¹^bŠŠŠŠàààà3333Ž333j½½½½jjnÁÁ--€€))||&&ÓÓ|| Ï)qq ÄÈÈÕÕÕ z z z z z ==== ”” ç ç D D — — — — D D › › › › D D DŸŸŸ ñ ñ › › › › D D D D î î › › _ _  c å ‹ ‹ ‹ 4 4 á á         ó ó     J J J J    N¨ _ºº _ ¶ ¶ _ _ _ _ ¶ ¶ ¶ ¶  yy& Ì   J J ÷ ÷NNNN¯¯¯¯¯ TÚ €-- € € € € §Ú € € € ) ) Ö Ö Á Á Á • • • • • • • • ½ ½ j j ì ì™ôJðÞ99„Ú €ÚÚ„„11êŸTÎs¾d`ÚÚÚÚÚÚÚÚ*Ï È"ÏÏ""NNûû    NN8888888888åå<<<–ÖÖƒ(Ò,%%õõõõHHHH Ü Ü Ü Ü Ü Ü‰‰^^^^ ­ Z Z p ps  Æ! Æ Æ Æ!%%ÒÒ%ÊÊss Æ ÆŸŸŸŸLLŸŸ ¦ ¦ ¦ ¦SS ¦ ¦ ü ü OªSSS­ÕÕÕÕÕÕ((ÕÕÕÕ((((ÊÊsÎ!!ssssÊÊÊÊ!!ss####ÐÐ}#¥¥¥¥RR¥¥êê â<““ææººdd.ˆˆˆ2222ˆˆˆã55ÛÛÉÉÍÍssÉÉÉÉvvÈÈÈÈuÏ×"ÄÄiiiiÀÀÀÀb½½b    bµµµµbb77äŠàààà33àààà †à½½j½ÅÅÅj½½ggÁÁ€€ÓÓ×|))€€ÓÓ||||qq ÄÈÈÕÕÕ z z z z z ==== 9 9 ç ç D D ñ ñ — — D D › › › › D D DŸŸŸ ñ ñ › › › › D D D D î î › › _ _  c å ‹ ‹ ‹ 4 4 á á         ó ó     J J J J     óNººcc ¶ ¶ _ _ _ _ ¶ ¶ ¶ ¶yyyy& Ì   J J ÷ ÷NNNN¯¯ T T¯ T €Ú-- € € € € §Ú € € € ) ) Ö Ö Á Á Á • • • •ðð • • ½ ½ j j ì ì™ôJ¥£g²“5ÚÚÚ„„115D¾dd `ÚÚÚÚÚÚÚÚÏ u È"ÏÏ""NN         ó ó8888888888åå<<<–{{(ÎwÒõõõõHHHH Ü Ü Ü Ü Ü Ü‰‰^^^^ ­´´ÊÊs  Æ! Æ Æ Æ!ÊÊww%ÊÊÊss Æ ÆŸŸŸŸLLŸŸ ¦ ¦ ¦ ¦SS ¦ ¦ ü ü OªSS­SÕÕÕÕÕÕ((//ÕÕ‚‚((ÊÊsÎ!!ssssÊÊ%%!!ss####ÐÐ}#¥¥¥¥RR¥¥ â<““@@ººll¾¾.ˆˆˆ2222ˆˆãˆÛÛÛÛÉÉssss$$vvÉÉvvÈÈ}}ÏuÈÈÄÄÄÄqqÄÄÀÀÀÀ½½b    bµµµµbb77äŠààààŽŽàààà †à½½j½jjj޽ggÁÁ€€--1×))€€ÓÓ||||qq ÄÈÈ~~ Ñ v Ñ Ñ~~ == == ç ç ç ç ã ã ã ã › › îH › ›HHõ › î î îHHHŸŸ ñ ñ ñ ñ ñ ñ î î › ›HHõ › ¶ ¶ ¶ ¶g ºº á á á á ‹å88 ÷ ÷ ÷ ÷ ÷ ÷ J J ó óNN    NNggººº _º _ ¶ ¶ _ _  " È u u y Ì Ì        NNNNXXXXÚÚ-- Ó Ó € €\¯¯ T T-- € € € €-- Á Á Á Á j jÅÅ • • • •CC • • f f nCCø¥¥ø#Õ0'7ù5ÚÚÚ„„„„1‹9“h ³³XX1‹Þ„---- Ì q yÏÏ"" ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷88 ‹ ‹ ‹å88åå’’’’’’wwwwwÒÒHHHHHHHH‰‰‰‰‰‰‰ / ± ± ± V ±  ssss!!!!ss! Æssss ñ ñŸŸHHHH ü ü OªªªªªSSSSªªW ü++++(( zÕ++~~++~~!!ss Æ!ssÊ p!!{!!{!!yy y''' ÌûûûûRR¥¥ææææêêê꺺ÂÂhh2222ˆˆ55ˆˆ55ßß22ÍsssÉ$Ñ+ÙÙÍÍ  yëUãyÄÄÄqqyÓÓÀmmmmmmÀÈÈÈÁ µµµµµµµbbµµ7 ÜŠŠŠŠŠŠŽŽàà7 ÜŠŠgg ¹gg½½ÅÅÛÛˆˆ1×))ÓÓÓ-×| Ï ÏÈÈ Ä Ä $ $ v Ñ Ñ Ñ~~ == == ç ç ç ç==== › › îH › ›HHõ › î î îHHHŸŸ ñ ñ ñ ñ ñ ñ î î › ›HHõ › ¶ ¶ ¶ ¶g ºº á á á á ‹å88 ÷ ÷ ÷ ÷ ÷ ÷ J J ó ó ó ó    NNggºº _ ¶ ¶ _ _  " È u u y Ì Ì        NNNNXXXXÚÚ---- € €\¯¯¯¯-- € €ÚÚ-- Á Á Á Á j j j j • • • • è è • • Á Á nø¼i­"{+ô'7ù5ÚÚÚ„„„„1‹Þ9 ³XXXX Ö1Þ„---- Ì q yÏÏ"" ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷88 ‹ ‹ ‹å88åå8888’’wwwwwHHHHHHHH‰‰‰‰‰‰‰ / ± ± ± ±   wwssss Æ Æ!!ss! ÆssssLLŸŸHHHH ü ü OªªªªªSSSSªª üW++++(( zÕ++~~++~~!!ss Æ!ssww%Ê!!{!!{!!yyyÔ''' ÌûûûûRRÿÿææææêêêêÂÂhh2222ˆˆ55ˆˆÛ99ŒŒÍsssÉ$à¥!b­’(  yú+ƒ"·.ÄÄÄÌ=MˆÀmmmmmmÀÈÈÈfµµµµµµµµµ7 ÜŠŠŠŠŠŠŽŽàà7 ÜŠŠgg ¹ ¹ ¹ggÅÅ55ââŒ1„„--Ó-×| Ï ÏÈÈ Ä Ä Ñ Ñ $ $ Ñ Ñ~~ ====== ç ç ç ç==ëë › ›õõ › ›HH › › › ›HHPõ¦LLŸŸ D D › ›HH ›õ£ î ¶ ¶ ¶ ¶    á á á á ‹å88 ÷ ÷ ÷ ÷ ÷ ÷ J J ó ó ó óNNNNÂw$oºº _ ¶ ¶ ² ² ² u u u u Ì Ì&&     ó ó        XXXX € €-- € €ÚÚ\--ÚÚÚ €-- Á Á Á Á ½CCCC • • • • Á ÁnnZ#=, +"´ÿ§¶òÚÚÚ1 Ö„„1111XXXXÞÞ„„----&& Ì&"""" ÷ ÷ ÷ ÷ œ ÷ ÷ ÷88 ‹ ‹88888888åå’’ÊÊÊÊÊÊHHõ ›HHõõ‰‰‰‰‰‰ Ü Ü ^^^^^^^ÊÊssss Æ Æssssss!!! ÆŸù ñ ñ ›õHHª O ü üªªªª­SªªWW++++ÕÕÕÕ++++~~ Ñ Ñ Æ!!!!!ssww%Êssss!!!!'''''' Ì ÌN©©NR­ÿÿ“9ææ<—êêhhßß22ˆˆ5555ãã9””9  ÍsÉÉÉÙ .ë1 -©Õ(Íy˜§MÓqqqqÄÓ ¯$¿6ÌmmmmmmmmiiiimmÈ"nn¹bbµµµµµµµµŠŠŠŠ Ü ÜŠŠŽŽààŠŠŠŠggggggggggggÅâ=êŒ11×----))))ÈÈqq Ñ Ñ $ $ Ñ Ñ~~ ==== ã ã ç ç ç ç== › ›õõ › ›HH › › › ›HHõÅ [¦ŸŸ D D › ›HHõ ›HH ¶ ¶ ¶ ¶    á á á á ‹å88 ÷ ÷ ÷ ÷ ÷ ÷ J J ó óNNNN¨¨Ñ"Z%¼èoº _ ¶ ¶ ² ² ² u u u u Ì Ì&&    NN        XXXX € €-- € €ÚÚ §--ÚÚÚ €-- Á Á Á Á ½CCCC • • • • Á Ánnÿy'ú!6Z¥â==âÚÚÚÚ1 Ö„„1111XXXXÞÞ„„----&& Ì&}}"" ÷ ÷ ÷ ÷ ÷Q ÷ ÷88 ‹ ‹88888888 ‹ ‹88ÊÊÊÊÊÊHHPª££õõ‰‰‰‰‰‰ Ü Ü ^^^^^^^ÊÊssss Æ Æssssss!!{!ùŸ ñ ñ ›õHHª O ü üªªªª[[­WW++++ÕÕÕÕ++ Ñ Ñ~~ Ñ Ñ Æ!!! Æ Æssww%ÊssÎÎ!!{{''''''''N©©NR­ÿÿ“9ææ<—êêhh„„22ˆˆ5555ããî³ £zzÍsÉÉ$3(&7 +8d7 +)×ä(ÍÄyÓÓyqqy6Ìmmmmmmmmiiiimm"}#n¹bbµµµµµµµµŠŠŠŠ77ŠŠŽŽààŠŠŠŠggggggggÁÁÁÁÅ=—úŸæŒŒ1----))))ÈÈqq Ñ Ñ Ñ Ñ z z z z » »ii¿ e e e ë ç ç ç ç ›õHH ñ ñ D D D D D DHH£'h'h…f¸^ ± ± Ü Ü Ü Üà …22 ÷ ÷¤¤NNNN""""yy Ì ÌN ó    ¤ J œ œ        NN¨£,–.žÛ& Ì Ì            NNº _  ¶ ¶cccccc  _ _nn nÅÅr Á Á Á Á Á Ánnn  Á Á ½ÅÅr-- € € Ö1 Ö Ö € € € € Ö Ö„ ) « «XX\\d¾(s·‹‹11„„ Ö Ö„„„„Þ„„„ÚÚ € €„„11¯¯¯¯ÏÏ""& Ìyy*Ï""yÓ& ̤¤ ÷ ÷ ÷ ÷ ÷ ÷"""" u u""sssswwsÎ00ÎÎ! ÆHH › › ñ ñ D D‰‰‰ / Ü Ü‰‰´´sssswwÊÊHHõõ ñ ñ ñ ñS ø ¦ ¦SSÙÙà+ÕÕÕÕ====””””iiii    ^^  ‰äää66‰‰£H££dd¾¾hhººhhhhhh““““““îî@æ@@êê——´´´´´´ŒŒŒŒŸ s#Ö5ˆˆˆããò' 4–7K4–"PÇ¿ +‡‡‡‡Ý݃ƒ,,Ù4ååÝÝïïïïFF˜˜••BB•§úúMMúŸMM ò òŸŸŸŸËË!!t II œöŸŸŸŸQQQQ¨¨¨¨)„××-ˆ5†;Ôzrrjjjj²²²²² Ñ Ñ Ñ Ñ z z z z » »ii¿ e e e ë AA ç ç ›õHH ñ ñŸŸŸŸŸŸHH£²””Ðf^  ± ± Ü Ü Ü Ü …à22 ÷ ÷¤¤NNNN""""yy Ì Ì óNûû¤ J ÷ ÷        NNN¨ßþöÛ&&&            NNº _  ¶ ¶cccccc  _ _   nÌr Á Á Á Á Á Ánnn  Á Á ½ÅÅ ½-- € € Ö1 Ö Ö € € € € Ö Ö„ ) « «XX¯   ·\1111„„ Ö Ö„„„„„Þ„„ÚÚÚÚ„„11¯¯¯¯ u u"" Ì&yy*Ï""yÓ& ̤¤ ÷ ÷ ÷ ÷ ÷ ÷"""" u u""sssssÎ{{ss! Æ î î › › ñ ñ D D‰‰‰ / Ü Ü‰‰´´sssswwÊÊHHõõ ñ ñ ñ ñS ø ¦ ¦SSÙÙà+ÕÕÕÕ====””””lllliiii    ^^  ‰ä‰‰66‰‰£H££dd¾¾  ººhhhhhh““““““îî@æ@@êê——´´´´aa´´ŒŒŒŒEM˜5ˆˆˆãã=Ïî$X!£Ölee‡‡‡‡Ý݃ƒ,,Ù00ÝÝïïJJ  óóïïBBï•BB§MúúMMúŸMM ò òŸŸŸŸËË Ç Çt IIö œŸŸŸŸQQQQ¨¨¨¨ Ï)׌ˆâê•ÿ"÷äÔÍrrjjjj½½²²²²² $~ Ñ Ñ( Í Í Í iii e e ã===”” çAõõHH ñ ñ ñ ñ ñ ñ ñ ñHHõPuÀ ^^ ± ±‰ / Ü Ü … … …à ÷ ÷¤¤NNNN"""" Ì Ì      û   J J J¤    NN      U„99ßÓyyy        û   óN _ _ _ _ ¶ ¶ccc¾g   Á Á Á ÁÌ'ÜÌ Ánnnn Á Á    ÅÅ-- € € Ö Ö ) ) € € € € Ö Ö Ö ÖXX « «\\\\ ¯„„ÞÞ Ö Ö Ö11111111155ˆˆ1111¯¯\ uÏ uÏyyyy""""&&yy¤¤¤ J ÷ ÷ ÷ ÷"" uÏ u u"" Æ Æ Æ Æ pÊss!!!!ss ›õHHLLŸŸ Ü Ü‰‰‰‰66b¼b´´´´ssssÊÊ › ›õ › ñ ñ ñ ñ ¦ ¦ øSSS[[;•ŽÙÝ‚ÕÕëë˜=AAAA¿lliiii¸¸  ¸¸  6666䉉‰õõ££¾¾hhºººÂhººææ““““î“““@@<ñêê´´´´aaaßß99ãã=ã=ãÛ5ˆãããÇ!Ç¿e··444Ù0000,,,‡00Ö0ïïJÿeóïïïïïïBBMM§§ŸŸM òM òŸŸ ò ò ò òxxËË Ç Ç! Çöö£IŸŸŸŸþ ¤««¨¨¨¨××1æ=—ò§"*&,Û$¼FÜzrjjjj²²`º`` $~ Ñ Ñ( Í(( iii e e ã===””Aœ_ªHH ñ ñ ñ ñ ñ ñ ñ ñHH ›õ f  ^^ ± ±‰ / Ü Ü … … + … ÷ ÷¤¤NNNN"""" Ì Ì      û   J J J¤     ó ó    ûû*ßß„Óyyy        û   óN _ _ _ _ ¶ ¶ ¾cg   Á Á Á ÁrÌ'Ì Ánnnn Á Á     j j-- € € Ö Ö ) ) € € € € Ö Ö Ö ÖXX « «\\ ¯„„„„ Ö Ö Ö1111111‹‹55ˆˆ‹‹11¯¯\ uÏ uÏyyyy""""&&yy¤¤¤ J ÷ ÷ ÷ ÷""Ï u u u"" Æ Æ Æ Æ Â Â pÊss Æ Æ!!ss ›õHHLLŸŸ Ü Ü‰‰‰‰ëëb¼b´´ssssÊÊ › ›õ › ñ ñ ñ ñ ¦ ¦ øSSS[[ðÿRèÝ‚ÕÕëë˜=AAAA¿lliiii^^  ¸¸  6666䉉‰õõ££ddhhºÂhºº@@“““““9““@@——êê´´´´aßß99ãããˆãˆÛ5ˆããã···e +··ÙÙ4Ù0000,,,‡00Ö0ïïJ´%î+X!1ïïïïïïBBMMMMŸŸM òM òŸŸ ò ò ò òxxËË Ç Ç Ç!ööI£ŸŸŸŸþ ¤««¨¨¨¨×ŒŒAò¶(Ë3Ÿ6T0ê# 7ÔzÍrjjjj²²`º`` Ñ Ñ Ñ Ñ z z z z¿¿ e e » »ii ë==ëëë  XHH › › › ›HHHH ñ ñ ñ ñ^^^^´ Z Z Z Ü Ü Ü Ü … …22 J¤ ÷ ÷¤ J ÷ ÷yy Ì Ì   q q œ ÷¤ J J J J J ó ó ó óNNNNÓÓÓÓÏÏ" È         J J œ ÷    ¶ ¶ ¶ ¶ [ [ ¶ ¶ ¶ ¶ ¶ jÅnnÅ jnnnn j j j jÅÅÅÅnn Á Á----„ ) ) )-- € € € € € €XX « «¯¯³³XX Ö Ö Ö Ö--ÚÚ--ÚÚ5=â‹1‹‹@æ9Þ¯¯¯¯\ T T Ì Ì Ì Ì""""ÏÏ""ÏÏÏϤ¤ ÷ ÷¤¤ J¤}}ÏÏ""""ss Æ Æ Æ Æ Æ Æ pÊÊÊÊ p DŸùù¦LŸ D Æ!! Æ2222 …•÷¸  bbb Æ Æssssss › › › › DŸŸ D ¦[µô$}&…±Š/ÕÕë똘ë똘¿¿llii´´´´bb´´ààààHHõõººººhhºh¾¾¾—ññ—Dê<<êêêê<—aa´´´aŒŒŒŒãˆ55ßß222Œßß + +···] +°ÙÙÙÙ݃00ƒÝÝÝ݃ƒƒFFó(ù/¾$êóóFëëë>>ŸŸŸŸööQöQQööŸŸ ò ò!!!! Ç Ç Ç!IIööIIII¨¨¨¨¯UUU11æ›ö`º"Ê0”7X8³4£$;+ÑvvnÁÁgg²²²²²² Ñ Ñ Ñ Ñ z z z z¿¿ e e » »ii ë== ë룣HH › › › ›HHHH ñ ñ ñ ñ^^  ´ Z Z Z Ü Ü Ü Ü … …22 J¤ ÷ ÷¤ J ÷ ÷yy Ì Ì   Ì Ì ÷Q¤ J J J J J ó ó ó óNNNNyyyy u u" È         J J œ ÷    ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ jÅ Á ÁnnÅ jnnnn j jÅÅÅÅÅÅnn Á Á----„ )„„-- € € € € € €XX « «¯¯XXXX Ö Ö Ö Ö--ÚÚˆˆ55D Læ‹æPo_îÞ¯¯¯¯\ T T Ì Ì Ì Ì""""ÏÏ""ÏÏÏϤ¤QQ¤¤¤ÿ}}ÏÏ""""ss Æ Æ Æ Æ Æ Æ pÊÊÊÊ p DŸùùL ñŸ D Æ!! Æ2222à:÷œ¸  b Æ Æssssssõõ › › DŸùŸ ¦[™#"%*VŠ/ÕÕë똘ë똘¿¿ÇÇii´´´´´´àààࣣõõººººÂºh¾d¾¾—ññ—Dêêê<<êêêê<—aa´´´aŒŒŒŒãˆ55ßß222Œßß + +···]° +ÙÙÙÙƒÝ00Ý8’Ý݃ƒƒFFó¨»ËQóóFëëë>>ŸŸŸŸööQöööööŸŸ ò ò!! Ç Ç!! Ç!IIööIIII¨¨¯UUU11ŒA›Pº%/95þ7X3I%i•+ÑvvnÁÁgg²²²²²² Ñ Ñ Ñ Ñ z z z z e e e e » »ii==== HHõõ › › › ›HHHH DŸ ñ ñ ± ± ± ± Z Z Ü Ü Ü … …22¤ J J¤¤ J ÷ ÷ Ì Ì   Ì Ì Ì Ì J J J J J J J J            ûû Ì Ì Ì Ì"" u u         J J J J _ _ _ _ ¶ ¶ ¶ ¶ ¶ ¶c cccc Á Ánn jÅn  Á Árr jÅÅÅÅÅ Á Á Á- Ó--„„„„-- € € € € € € þXXX¯¯XX Ö Ö )„ € €--ÚÚÚ5*š)ìT99ý)–2b*CP毯¯¯ Ì Ì Ì Ì""""ÏÏ}}Ï*Ï*aa¬¬Q ÷QQ}}}""""" Æ Æ   Æ Æ Æ Æ p p ñ ñŸŸ ñ ñŸ DssssÊÊÊÊ2222縸^^´´ss Æ Æssssõõõõ ñ ñLLSSŠ?™äÝÝ‚‚Eëëë==ëëllllii´ Z´´´´´´àà2ààààýýõõºhhºº¾¾¾¾—ñDêêê—<<<<———êêa´´aaaaŒŒßßãˆ5522222222]] + + + +]],,,,Ö0ƒƒÝƒ00ÖÖ0ÖëFóó÷Q¤ïFF˜>>>ë럟ŸŸööö œIIööŸŸŸú!!tt!!!!ööIIöööö¨¯U]11Œæ›«!o(4-1/æ/9(u¥àÑvn²²²²²² Ñ Ñ Ñ Ñ z z z z e e e e » »ii==== HHõõ › › › ›HHHHŸ D ñ ñ ± ±  Z Z6 Ü Ü Ü … …22¤ J J¤¤ J ÷ ÷ Ì Ì   Ì Ì Ì Ì J J J J J J J J            ûû Ì Ì Ì Ì"" u u         J J J J _ _ _ _ ¶ ¶ ¶ ¶ ¶ ¶c cccc Á Á   jÅn  Á Á jÅÅÅÅÅ Á Á Áˆ---„„„„-- € € € € € €X þXX¯¯XX Ö Ö )„ € €--ÚÚÚ5—\¾ù99£%†.R+毯¯¯ Ì Ì Ì Ì""""ÏÏ}}*„„”pQ ÷ ÷ ÷}}}""""" Æ Æ   Æ Æ Æ Æ p p ñ ñŸŸ ñ ñŸ DssssÊÊÊÊ2222222¸¸^^´´bbss Æ Æ Îss › ›õõLLLLSS////‚‚77 EEEò=EEllllii´´´´´´´àà2àààࣣõõºhhÂÂhhºº¾¾¾¾<—Dêêê—<<<<—<<êêa´´aaaa22ßßãˆ5522ŒŒ2222]] + + + +]],,,,Ö0ƒƒÝƒÖÖÖÖ0ÖëFMMœ÷ïïFF˜>>>ë럟ŸŸööö œIIööŸŸŸú!!tt!!!!ööIIöööö¨]d +]11Œæö%,C-1*|%À!°•†Ñvn²²²²²² ¦ ¦ ¦ ¦ ¢ üªª ”” ç ç== ” 9 ç çwwwÊ p ›õHH › ›HH ± ±^  Z Z Z´ ± ± ± ± ± ± ± Ì Ì y u u"" ÷ ÷ J J ÷ ÷ ÷ ÷"" u u""" È ÷ ÷ ÷ ÷ ÷ ÷¤¤ Ì Ìyyy    u u È È È È u u á á á á ‹ ‹ ‹ ‹88 ‹ ‹ á á 4 4 ì ì™™C • • Á Á Á Á Á Á Á Á Á Á Á Á Á ÁnnrrÅÅ « «XX¯d « « þ þ T¯XXXXXX¯¯¯¯ « « « « Ö Ö Ö1‹æ“9‹‹“£@1„„11Ú €ÚÚûûNN¤¤¤¤¨¨ûU¸e„*8(ÞúÛ}}Ï u ÷ ÷¤¤¤¤ ÷ ÷ î îHH ñ ñŸŸ › ›HHHHHH Æ Æss p p › ›õ ›õõHHàà22‰‰ Ü Ü‰‰ Ü ÜààààHH › ›õõHH pÊsÎ0‹†+~~~~ Ñ+WWWWWW__ËËxÃÃîîAA””””ààà:àààà‰‰‰‰çààõõõõ<<<<——êêêê<<<<êêhhhh¾¾¾¾““@@““ææˆˆˆˆßߌ2ˆˆˆã555ˆˆãã2222]] + +´´,‡‡,ƒƒƒƒƒƒƒƒƒƒƒ(BBJJFF˜˜˜>ëë>>>>IIIIIIIIöööQúŸŸúËËxËËËËMMŸŸöö££«hâÖ·h%(¶(¶(&Ä!Z•ÜÜ'Íôšììš???00ÞÞ44 ¦ ¦ ¦ ¦ ¢ üªª 9 9 ç ç== ” 9 ç çwwwÊ p ›õHH › ›HH ± ±^  Z Z Z´ ± V ± ± ± ± ± ± Ì Ì yÏÏ"" ÷ ÷¤¤ ÷ ÷ ÷ ÷"" u u""" È ÷ ÷ ÷ ÷ ÷ ÷ J J Ì Ìyyy    u u È È È È u u á á á á ‹ ‹ ‹ ‹88 ‹ ‹ á á 4 4 ì ì™™C • • Á Á Á Á Á Á Á Á Á Á Á Á Á ÁnnrrÅÅXX¯dsdXX¯ T þ þXXXX¯¯¯¯ « « « « Ö Ö Ö11‹Þ„11Þ9ææ‹1„„ Ö ÖÚ €ÚÚûûNN¤¤¤¤NNûU¸eeU¯ë}}Ï u ÷ ÷¤¤¤¤ ÷ ÷HHHH ñ ñŸŸõõ££HHHH Æ Æss p põõõ › › ›HHàà22‰‰66‰‰ Ü ÜààààHH › ›õõHH pÊsÎ0‹†+~~~~ Ñ+WWWWWWªªppÃi””AA””””ààà:àààà‰‰‰‰çààõõõõ<<<<<<êêêê<<<<êêhhhh¾¾¾¾““ææ““@@ˆˆããßߌ2ˆˆˆã555ˆˆã㌌ŒŒ]] + +´´,‡‡,ƒƒƒƒƒƒƒƒƒƒƒ(BBïïFF˜˜˜>ëë>>>>IIIIIIIIöööQúŸŸúËËxËËËËMMŸŸöö££Q«³xÖ·]]h%!ñ!ñ!ZÿJ;ÜÜ'Íôšììôš??00ÞÞ44 ¦ ¦ ¦ ¦ ü ü ü ü ç ç ç ç== ç ç ç çÊÊ ›õHH îHHH ± ± ± ± Z´ Z Z ± V   ± ± ± ± Ì Ì Ì ÌÏÏ"" ÷ ÷ ÷ ÷ J J J J"" u u"" u u J¤ ÷ ÷ ÷ ÷ ÷ ÷   Ì Ì   Ì Ì u u u u u u"" á á á á ‹ ‹ ‹ ‹88 ‹ ‹ 4 4 á á ì ì™™C èC è Á Á Á Á Á Á Á Á Á Á Á Ánn nÅų³¯ ·\XX « «¯¯ « « þX « «\\¯¯¯¯ « « Ö Ö1111„„„„11ÞÞÞÞ„„„ )--ÚÚUUNNQQQ ÷NNûûU°ˆãÛ&"""" ÷ ÷¤¤¤¤ ÷ ÷ › ›£H ñ ñŸŸHHHH£H › › Æ ÆssÊ pw££H£õõ£Hàà22‰ä>䉉 Ü Ü2222HHõõõõHH p p pÊ!{{{†+~~~~~~ªªªªWWªÃÃÃÔ”AA””””àà2àà6666::££££<<—<<<<<ê<<<<êêhÂhhllllîî“9““@@5Û55ßß22ˆˆ5555ãã55ßߌŒ]]]·aaaÙÙÙÙƒƒÖ00ÖƒƒÝƒÖÖBBBœMóëF˜>ëëëë˜>IIII œöIIööQQMMMMËËxxMMŸŸööIIQ«Y]¯¯»Òââ‡B;à‘‘/zôšììGì’’00‹‹44 ¦ ¦ ¦ ¦ ü ü ü ü ç ç ç ç== ç ç ç çÒÊ ›õHH îHHH ± ± ± ± Z´ Z Z ± V   ± ± ± ± Ì Ì Ì Ì u u"" ÷ ÷ ÷ ÷ J J J J"" u u"" u u¤ J ÷ ÷ ÷ ÷ ÷ ÷   Ì Ì   Ì Ì u uÏÏ u u"" á á á áåååå88 ‹ ‹ 4 4 á á ì ì™™C è èC Á Á Á Á Á Á Á Á Á Á Á Ánn nÅų³`` ¯\XX « « T T « «X³ « « « «\\¯¯¯¯ « « Ö Ö Ö Ö Ö Ö„„„„ Ö Ö„„„„„„Þ„--ÚÚ°e¬¬Q ÷NNûûU°¨¨.Ó&&"""" ÷ ÷¤¤¤¤ ÷ ÷ › › îH ñ ñŸŸHH£££H › › Æ ÆssÊ pwHHH£õõ£Hàà22 /‰‰ä‰‰ Ü Ü2222HHõõõõHHÊÊ pÊ Æ!!!†+~~~~~~ªªªªWW_ppÃÃÃÔ”œœ””””àà2àà6666àࣣ££———<<<<<ê——<<êêhÂÂÂllllîîî“îî@@5Û559922ˆˆ5555ãã55ßß22]]]·aaaÙÙÙÙƒƒÖ00Öƒƒƒ(ÖÖBBœ÷·¨ F˜>ëëëë˜>IIII œöIIööööMMMMËËxxxxMMŸŸööIIQ«YY¯¯««`ÃÒÒx3àð',„&mäôšììì’’’‹‹‹‹44 ¦ ¦SSSSSS========== == ë{‹‹{ÎsssHHHH ñ ñ ñ ñ^^^^yÓyy Ì Ìyy     óN         Ì Ìyy Ì Ì Ì Ì J J J¤NN     u u u u Ì Ì Ì Ì y Ì Ì Ì Ì Ì ÌŽé á áŽŽŽŽ á á á á 4 4ŽŽ • • • •CC •ðnn j j j jnn ÁÅÅnnnn³ ÂÂd¯¯¯¯¯¯¯ « «XXXX «XXXXXXXX\¯¯„„1 Ö-- €Ú‹1„„ÚÚ--„„„„„„1‹Ç׸]¨¨NN¨¨ûûûû&&yy& Ì Ì&NN  ûNN     ñ ñ ñ ñ î î › › ›õõõ£Hõõ Æ Æ! Æ Æ Æ!!HHHH ñ ñŸŸ22àà‰‰‰äàà …à2222ŸŸ ñ ñŸŸŸŸÎsssÊÊÊÊ((ÕÕ Ñ+ Ñ+W ü üW­bÓÃÃÃÃAAîî””””àà666666䉉‰66õPPPêêêêêDêêêê——@@¾¾¾¾¾llêêDêîî““55ˆãŒŒßß555599ß9ßß2Œßßßßaa´´aa´´ÙÙ,,ÙÙ,‡,,ÙÙÖÖƒƒ>˜˜ó¤¤Jïëëë똘ëëööööŸŸ òMII££úúŸŸÏÏÏÏxËË£IööúŸ ò òþþ«¯¯««Y³»pÃh++Ø ¬1î5þ/9F¡Gš?èè;;ÞÞ00‡â ¦ ¦ ø øSS­­====˜˜==== == ë{ÖÖ{ÎsssHHHH ñ ñ ñ ñ^^^^ˆã.y Ì Ìyy     óN         Ì Ìyy Ì Ì Ì Ì J J J¤NN     u u u u Ì Ì&&y  Ì Ì Ì Ì Ì ÌŽé<<ŽŽŽŽ á á ‡ ‡ 4 4 4 4 • • • •CCð •nn j j j jnn ÁÅÅnnnn³ ,,¾ ¯¯¯¯¯¯XXXX «XXXXXXXX\  „„1 Ö-- €Ú1 Ö„„ÚÚ--„„„„„„1‹¸Ç"1×Ǹ¨¨¨¨ûûûû&&yy& Ì Ì&NN   FNN     ñ ñ ñ ñ î î › › ›õõõ£H › › Æ Æ! Æ Æ Æ Æ ÆHHHH ñ ñŸŸ22àà‰‰‰äààà …2222ŸŸ ñ ñŸŸŸŸÎsÎÎÊÊÊÊ((ÕÕ Ñ+ Ñ+W ü üW­­ÃÃÃÃÃÃAA””””””àà226666‘‘䉉‰66õPPPêêêêêDêêêê——››î“¾¾¾¾¾¾llêêDêîî““55ˆãŒŒßß55999ßßß2Œßßßßaa´´aa´´ÙÙ,,ÙÙ‡,,,ÙÙÖÖƒƒ˜ó˜óïïJïëëë똘ëëööööŸŸ òM£XþþúúŸŸttttxËËI£ööŸ E ò òþþQ«UU««þY³vv~è'-ß'‘¡Gš?èè;;ÞÞ‹‹‡â ¦ ¦ ¦ ¦SSSSëëëëëE== == ÎÎ!{ÎsÎs££ý£L ñ D D Z Zb Z Z Z Z ±  fú +˜Ó Ì Ì Ì ÌNN            &&yÓy  Ì Ì J J ÷QûûNN u u""yÓÓÓÓy Ì Ì Ì ÌyÓ<ñCŽŽŽŽŽ á á 4 4 ‡ ‡ ‡ ‡CCð •CCCC Á Á Á j j j jnnnnÅÅ Ánn`pp·\¯¯¯¯¯ T T¯¯¯ «XX «XX¯ TX³ « « «XX\ )„ Ö Ö---- Ö Ö„„---ˆ„„„„„„ÞÞ]Ç$£0Ñ/w'X"]UûûûNNNNyy&&yy Ì&NN ó ó    NNŸŸ ñLõõ › ›HHõõHH › ›ss Æ Æ Æ ÆssHHõõŸŸ ñ ñ … …àà Ü Ü66à … …à22ŸŸ ñ ñ ñLŸŸ Æ Æ!!(((‚~~ Ñ+WW üW­­pÃÔ”””””îîàààà‰ä66ää66‰‰66££ý£êêêêDD——êêêê››Hî¾¾¾¾¾¾ll——êê@@@@ˆˆˆˆ99ŒŒãã999ßßߌŒŒŒßßaa´´´´aa,,,‡ÙÙÙÙ,,‡,ÖÖÖÖëFFFœBBB˜>ëë˜ó˜˜ööööŸŸM§X»«§MŸŸttttËËËËI£ööŸŸ ò òQQþþUUUU««þþ«YYÉÉvщ>‘'ôš??èè;;‹‹‹‹4 ¦ ¦ ¦ ¦SS­­EEEEë == == ss Æ!Î(ƒ(XÂÂýL ñ D D Z Zb Z Z Z Z ±  fE +ò.&& Ì ÌNNûû         Ì ÌyÓy  Ì Ì J J œ ÷ûûNNÏÏ""yˆ=ˆÓy Ì Ì Ì ÌyÓ–KžéŽŽŽŽ á á 4 4 ‡ ‡ á áCCð •CCCC Á Á ÁÅÅÅÅnnnnÅÅ Ánn «``\¯¯¯¯¯ T¯ T¯¯ «XX «XX¯ T³X « « «XX\ )„ Ö Ö---- Ö Ö„„---ˆ„„„„„„ÞÞ".7–7–4á#öUûûûNNNNyy&&yy Ì&NNNN    NNŸŸ ñLõõõõHHõõHH › ›ss Æ Æ Æ ÆssHH › ›ŸŸ ñ ñ … … … … Ü Ü Ü Ü22à … …à22ŸŸ ñ ñ ñLŸŸ Æ Æ!!(((‚~~ Ñ+ ü ü üWSSpii””””””îîàààà‰ä66ää66‰‰66££ý£êêêêêêññDDêꛛ¾¾¾¾¾ll——êê@@@@ˆˆˆˆ99ŒŒãã999ß99ŒŒŒŒ99aa´´´´aa,,,‡ÙÙÙÙ,,‡,00ÖÖëFFFœBBB˜>ëë˜>>>ööööŸŸM§³w§MŸŸttttËËËËI£ööŸŸ ò òQQþþUUUU««þþQ«YYnnvrrš? å åèè;;‹‹‹‹é 9 9””==ëúNNä/ÕÕ(( Ñ Ñ Ñ Ñ z z(( Æ Æ Æ ÆwÒÒ0‹å{ss Æ Æ ± ± ± ± … …2222k ¾g   á á á á ‹ ‹ ‹ ‹  ººc ¶ ¶ _ _ _ _    „„ Ö Ö5T—`XX T T T¯GGGG ì ì™™ èCC è ì ì ? ?    ¾c ¶ ¶ ‹ ‹ ‹ ‹ á á á á  º _ _ _  ‹ ‹å厎 á ᯯ¯¯„„ Ö Ö Ö Ö„„CCC ìG™™nn Á    ºº  ¶ ¶    _ _    ºå ‹88’’’’Ut,5Ž6’2‚¨NNNûû¨¨    cccc  ºº ¶ ¶22àààà22222àà22‰‰‰‰2222  ¸^iiii==ë ==SSSSSS[~~~~ÕÕ((===˜ëë==””AA”îAAAA ç ç=˜ëë¿¿¿¿lllWWªªWW‚Ý/Õ++††˜˜˜ò´´´´ +¿i·· + +ãã55ßß99aaaa´ÂÂlllƾ¾ÂÂîî@@î“@@úúúú£II£MMM§QQööÏÏÏÏ%%xx!!!!tt Ç!xxËËÏÏ||ú¯¯¯§M ò ò †à3 Ù3ŽŽŽµµµµ    ¨¨UUþþþþ¨¨¨¨«YYššGìCC––ì’ å?èèèè––èèšš”” 9 9==ëú#"+AŠÕÕ(( Ñ Ñ Ñ Ñ z z(( Æ Æ Æ ÆwwwÖ{Ö!ss Æ Æ ± ± ± ± … …222222¾c ²  á á á á ‹ ‹ ‹ ‹  _ _c ¶ ¶ _ _ _ _    „„115 ÆL`XX T T T¯ ì ì ì ì ì ì ? ? èCC è ì ì™™    c ¶ ¶ ‹ ‹ ‹ ‹ á á á á  º _ _ _  ‹ ‹å厎 á ᯯ T T„„ Ö Ö Ö Ö„„CCC ìG™™nn Á    ºº  ¶ ¶    _ _    _ºå ‹888888U +×%P+¾'®Ë¬¨NNNûûNN    cccc  ºº ¶ ¶22àààà222àà22‰‰‰‰2222  ¸^iiii== ë ==SSSSSS ¦~~~~ÕÕ((==˜= ==””AA”îAAAA ç ç=˜ëë¿¿¿¿lllWWªªWW‚Ý/Õ++++˜˜˜ò´´´´e||Ãi··eeãã559999aaaa´ooÂÂlllÆs¾ÂÂîî@@î“@@úúúúþ£I£MMM§QQööttÏÏ%%xx!!!!tt!|xxËËtt!!úúúúM ò ò ò †àŽ33ŽŽŽµµµµ    ¨¨UUþþþþ¨¨¨¨«YYššGìCC––’ì? åèèèè––èè?? ç ç ç ç ˜§À%*©/ÕÕ(( $ $ Ñ Ñ z z(( Æ Æ Æ ÆwÊÊÎÎssss Æ Æ Z Z   ± ± … …22 … …22º _  á á á á8 Ý ‹ ‹ _ _ _ _ ¶ ¶ ¶ ¶    _º _ _„„„„ˆòTê³³XX ?™ ì ì ì ì ì ì • • • • ì ì ì ì    ¶ ¶cc ‹ ‹ ‹ ‹ 4Ž á á  _ _ _ _  ‹ ‹8’鎎Ž\\¯¯\ Ö Ö„„ )„1 ÖCCC è™™ ì ìnnnn      ººcc¾c gººººº _  _ _ Ý8 ‹ ‹88 ‹å¨etxiQûûNNNNNN    cccc  ººccccààààà …22‰‰‰‰2222^^ ± ´´b » » » »==ëë ëSS­S ¦~~~~ÕÕÕ z==ëëëëëë””AAAAî”AA””==ëë¿¿¿¿llªWWªWW‚‚Ý‚ÙÙ++˜˜ò˜´´æ'º#ªÓû» +ee +ˆããã99ŒŒaaa»Âh¾ÆlÆÆÂÂÂÂsÆlÂÂooîî““@@@@M§úúþ£££MMM§QQöö!!!|xÒxx!!!!tt Ç ÇxxxÏÏ!!úúMMŸŸŸŸŽŽààà;;;bbf ^^UU¨¨QQþþ¨¨ úU««««ššì’––èè??’’;–èèèè––’’ ç ç ç çëë˜ò’G?/ÕÕ((~~ Ñ Ñ z z(( Æ Æ Æ ÆwÊÊssssss Æ Æ´´^^ ± ± … …22 … …22 ¶ ¶º _  á á á á8 Ý ‹ ‹ _ _ _ _ ¶ ¶ ¶ ¶     _ _ _„„„„ˆˆ55³³XX § § ?™ ì ì ì ì ì ì • • • • ì ì ì ì    ¶ ¶cc ‹ ‹ ‹ ‹ 4Ž á á  ºº _ _  ‹ ‹8’鎎Ž\\\\¯¯\ Ö Ö„„ )„1 ÖCCC è ? ? ì ìnnnn      ººcc c gººººº _  _ _ Ý8 ‹ ‹88 ‹åN¨U°YÿQQûûNNNNNN    cccc  ººcccc::çç::眜œ:à22‰‰‰‰2222^^ ± ¼b » » » »== ë­­­S ¦~~~~ÕÕÕ z==ëëëëëë””AAAAî” ç ç””˜˜ëë¿¿¿¿llªWWªWW‚‚Ý‚ÙÙ++˜˜˜ò´´1&_%Óû» +ee +ˆããã99ŒŒaaa»ÂsssÆlllÂÂsÆlÂÂooîîîî@@@@§TTþ£££MMM§QQöö!!!|xÒxx!!!!tt Ç ÇxxxÏÏ!!úúMMŸŸŸŸŽŽ;;;à;;jjf ^^UU¨¨QQ ¤ ¤¨¨ úU««««ššì’––èè??’’;–èèèè––’’ ç ç””””îîÝÝ‚(((ÕÕÕ zÕÕ(( z z Æ Æ Æ Æss Æ! p pÊÊss Æ Æ´´b´´ Z Z … …2222 … …  ºº _ _ _ _ ‹ ‹88å ‹ ‹ ‹ ¶ ¶ ¶ ¶    ºº  ² ² _ _ Ö Ö„„ÚÚ--³XXX « « « « • • • • ì ì ì ì ì ì™ ? ì ì ì ì  ² cc á á á á ‹ ‹ ‹ ‹ºº  ¶ ¶ ¶ ¶ á á á<<< á á\\ ¯¯¯¯¯ € €Ú € Ö Ö Ö Ö ì ì ?™ ì ì ì ìÅ j jÅccccc ccºº _º  ºº ¶cccccc88å ‹ á ᎎ¤¤QQ¤¤¤¤ ÷ ÷QQ J J ÷ ÷ ¶ ¶cc ¶ ¶  ººg ºç÷»™ä66Ba#-ÃB22‰‰ Ü Ü Ø2 … … Z´bbb¿¿ii » » ç ç ç ç ç çAASSSS Ñ Ñ++ Ñ+~~==ëë”” ç ç ç çAAAAAAëëë똘==llllllllWWWWW üªª‚‚/ÕÙÙÙÙEEEEaa´»pÓÓlee··==9999··ÊÊoossÆÆwÂÂÆÆÆÆÆl@@››îîîîXXþþ££Qö££££úú§MË%%%ÏÏ!!xxxxÏtttxxËËxxxxŸŸŸŸ œööQ;;ð•äŠ7‘Á…2#¹¹¹¯UUUþþþþ ¤þþþ¨ +dô???––èèš? å å;;èè’’ìì’’ ç ç””””””((( Í((ÕÕ/ÕÕÕ(( z z Æ Æ Æ Æss Æ! p pÊÊss Æ Æ Z Zb´´ Z Z … …2222 … …  _ _ _ _ _ _ ‹ ‹88å ‹ ‹ ‹ ¶ ¶ ¶ ¶    ºº    _ _11„„ € €-- þX þ³ • • • • ì ì ì ì ì ì™ ? ì ì ì ì  ² cc á á á á ‹ ‹ ‹ ‹ºº  ¶ ¶<< á<<<<<\\ ¯¯¯¯¯ € €Ú € Ö Ö Ö Ö ì ì ?™ ì ì ì ìÅ j jÅccccc cc _ _ _º  ºº ¶cccccc88å ‹ á ᎎ¤¤QQ¤¤¤¤ ÷ ÷ ÷ ÷ J J ÷ ÷ ¶ ¶cc ¶ ¶  ººg ºç¬!%»™ä66BË,§$ˆ÷‰‰ Ü Ü Ø2 … … Z´b¿¿ii ç ç ç ç ç çAASSSS+++++†~~==ëë”” ç ç ç çAAAAAAëëë똘==llllllllWWWWW üªª‚‚/ÕÙÙÙÙEEEEaa´»»ii···ee··ãã9999··oooossÆÆÂÂÂÆÆÆÆÆl@@››îîîîþþ££££«Q££££úú§MË%%%ÏÏ!!xxxxÏtttxx%%xxxxŸŸŸŸ œööQ;;•;äŠ7‘v ¤)pBÈn +¯UUþþþþþ ¤þþ¨tô???––èè? å å å;;èè’’’’’’A ç ç ç”î ç ç Í( z z((ÕÕ‚‚Ý7/Õ‚(ssss   sÊ pssss Z Zbb´´à …àà22 Ø Ø _ _ _ _ºº  ‹ ‹88 ‹ ‹ ‹ 0 ¶ ¶ ¶ ¶  _ _gg      „„„„ € € € €XXXX «XX • • • • ì ì ì ì ì ì™ ? ? ? ? ? _ _  ¶ ¶ ¶ ¶ á á á á ‹ ‹ ‹ ‹ _º _ _ ¶<<<<<<éé    \\-- € € Ö Ö Ö Ö™™ ? ? ì ì ì ì ½ j j jÅ ¶ ¶¾cccc   _º ²    ¶cccc8888 á ᎎQ ÷ ÷ ÷¤¤¤¤¤¤ ÷ ÷ J J ÷ ÷ ¶ ¶cccc ¶ ¶ ²     ººB¤J>äääçQBàà‰‰ Ü Ü2222b´´li iiA ç””””AA­­SSSS Ñ+++ÙÙ~~ëëëE”” 9 9””AAAA””ëëë똘EElllllªªªªWWWW/Õ/Õ~Ù††˜˜˜˜aa´aa·· + +··ee==ãã9999e +··»»»»ooÎÎssÂÂoosÆÆssllllîHHH@››@QQQQ££QQþ£QQúT‡Ò€%|!||xxxx!!tt%%ÒxxxŸŸŸŸööööààŽŽŠŠ7‘Áàç}nnÐ:Þ]«Q«QQQþþU¯š?ììCèèè’’’’èè;; å?’’ å?A ç ç ç 9” ç ç Í( z z((ÕÕ‚‚’¡?/‚(ssssss sÊ pssÎÎ Z Z´´à …àà2222 _ _ _ _ _ _  ‹ ‹88 ‹ ‹ ‹ 0 ¶ ¶ ¶ ¶ ² ² _ _        „„„„ € € € €XXXX «XX • • • • ì ì ì ì ì ì™ ? ? ? ? ? _ _  ¶ ¶ ¶ ¶ á á á á ‹ ‹ ‹ ‹ _º _ _ ¶<<<<<<éé    \\-- € € Ö Ö Ö Ö™™ ? ? ì ì ì ì ½ j j jÅ ¶ ¶¾cccc   _º ²  ¶cccc ¶ ¶8888 á ᎎQ ÷ ÷ ÷¤¤¤¤¤¤ ÷ ÷ J J ÷ ÷cccc ¶ ¶ ²     ºº:à䉉‰ççàà‰‰ Ü Ü2222b´´lÃiiiA ç”””” ç çSSSSSS Ñ+++~~~~ëëëE”””””” ç ç ç ç””ëëë똘ëë¿¿llÇlllªªªªWWWW/Õ/Õ~Ù††˜˜˜˜aa´aa·· + +··ee==ãã9999¿e»»»»oossssoosÆÆssÆÆÆÆHîîî@››@QQQQ££QQþ£QQT¯Æ0â€%|!||xxxx!!ttËËxxxŸŸŸŸööööàà33ŠŠ Ü7 ÁnnÈ•,Ó1+'²!]«Q«QQQþþ úUš?ììCèèè’’’’èè;; Š å’’ å? » » »SSSSªª üW‚7f#Ðÿà++ ñ ñ ñ ñHH › › D DŸŸùùLL Z Z^^ ±^^ ± V 4Ž á á ‹ ‹ ‹ ‹ ¶ ¶ ¶ ¶   ² cc ¶ ¶ ¶ ¶        « « « « T T « « « «™™™™CC • •™™ ì ì ì ì ì ìcccc    _ _ _ _º _  á á á á ‹å’’’’å@–––<55ââÞÞÞ„„„1 Ö Ó Ó--™™™ ?™™ ì ì • • • •Cð • á á á á88åå ¶ ¾º _  ‹ ‹ ‹å8888 4ŽŽŽ8888}""" u u"" ÷ ÷ ÷ ÷    û  åå88ŽŽ á á  g   ºº  ¸¸¸^¸^àà::6‘‰‰2222‰‰‰‰àà22àà … … ç ç çA””””ë ==”” ç ç~~ Ñ Ñ~~ Ñ Ñ((ÕÕ~~~~¿¿¿¿¿¿¿¿iiiiîî”ëëiiiÃllll~~~~‚‚‚‚++++++††ÃÃÃÃaa´ãããã=ããã··´´»»»»iiiiDDññDŸŸŸ!!ÆÆÆÆÆÆÆÆñ—————DD€€%%!!Ï)%€ÒÒ)“&Ñ.ð)±TúúŸM§xxxxËË!!ttËËËËII œ œ œö££¹^^^µµµµ¹¹ffÈ!ÿ4ò5,ð£„ÓÓ&&&&ÓÓÓÓ€€ÁÁnÉvÁ??? å––è Ž ¹ ¹gg » » »SSSSªª üWÝ’#Ð.¤#y;++ ñ ñ ñ ñHH › › D DŸŸù®L Z Z^^ ±^^ ± V 4Ž á á ‹ ‹ ‹ ‹ ¶ ¶ ¶ ¶   gcccc ¶ ¶ ¶ ¶        « « « «¯¯ « « « «™™™™CC • • ? ? ì ì ì ì ì ìcccc    _ _ _ _º _  á á á á ‹å’’88@šñññ–55ââÞÞÞ„„„1 Ö----™™ô™™™ ì ì • •ððC è •ð á á á á88åå ¶ccº _  ‹ ‹ ‹å8888 4ŽŽŽ8888}""" u u"" ÷ ÷ ÷ ÷ûûû   ‹ ‹88éé<<ggg   ºº  ¸¸¸^¸^àààà6‘‰‰2222‰‰‰‰àà22àààà ç ç çA”””” ë==”” ç ç~~++~~ Ñ Ñ((ÕÕ~~~~¿¿¿¿¿¿¿¿iiii”””ëëiiiÃllllÙÙÙÙ‚‚ÝÝ++++++++ÃÃÃÃa»a´ãããã˜===»»´´»»iiiiŸŸññŸùŸŸ!!!!ÆÆÆÆÆÆ—<————DD€€%%!!tÏ%€ÒÒ„9 *á&üTúúŸ òMxxËË!!ÏÏËËËËII œ œ œö££¹^^^µµµµ¹¹ff¹n…#Y'†$Ñî„ÓÓ&&&&ÓÓÓÓ€€ÁÁnÉ+à#n??? å;;è ŽggÃiii¿¿¿¿SSSS ü ü ü ü/äüfø3~~ D D D D › ›HH D DLLŸù¦L ­ Z Z Z Z Z Z  ^  ± ± ± ± á á á á ‹ ‹ ‹ ‹ ¶ ¶ ¶ ¶   gcc ¶ ¶c cºº      « « « «¯¯¯¯ «XX ì ì™™CC • • ì ì ì ì ?™ ì ì ¶ ¶ ¶ ¶    _º      á ᎎ Ý Ý88ååšO¦Kññââ5ÞÞ‹1 Ö Ö11ˆˆ--GGGG™™ ì ì • •ððCC • • á á á á88ååccccºººº8888 ‹ ‹åå<<ŽŽ8888}}ÏÏ""ÏÏ ÷ ÷ ÷ ÷    NNå ‹88éC鎺ººº  ºº^^^¸f ¸^àà2266‰ /22 …à6 Ü66àà …à222 ç ç””””””==ë ””î”+++++++ Ñ((ÕÕ~~~~¿¿¿¿¿¿llÃiiii ”””îEë==ÃÿllÙÙ++‚‚‚‚++++ÙÙ++pp´´aa´ã==ãeeeeaai»»iiŸùŸŸL¦ùù!!ssssssÊÊwss——DDDD——ÒÒxx!!!!%%ÒÒÖ1@P{·TúMMŸŸËËËËËËËË!!!!ËËxxII œ œI£II^^^  [µµµ f¹¹¹v+P›1×ÓÓ&&&&€€&€€€ÁÁnØR#aðvš???;;èè ¹gg½½ÃÃÿ¿¿¿SSSS ü ü ü üÕÕÝÝ3Ù~~ D D D D › ›HH D D ñ ñ DŸL ñb Z Z Z Z Z Z^^ ^ ± ± ± ± á á á á ‹ ‹ ‹ ‹ ¶ ¶ ¶ ¶  ² cc ¶ ¶c cººgg    « « « «¯¯¯¯ «XXGG™™CC • • ì ì ì ì ?™ ì ì ¶ ¶ ¶ ¶    _º      á á 4 488’’@@@õ¦Kññ==599‹111 Ö Ö---- ì ì ì ì™™ ì ì • • • • • • á á á á88ååccccºººº88 Ý Ý ‹ ‹åå<<ŽŽ8888}}ÏÏ""ÏÏ ÷ ÷ ÷ ÷ûûNNå ‹88Žé鎺ººº  ºº^^^¸Àf¸^àà2266‰ /22 …à6 Ü Ü Üàà …à222 ç ç””””””==ë ”””î+++++++ Ñ((ÕÕ~~~~¿¿¿¿¿¿ÃiiiiÃîîî”E똘ÃÿllÙÙ††ÝÝ‚‚++++ÙÙ++pp´´aa´ã==ã55 + +eeÃû»ÃiiiŸùùùL¦ùùÆÆÎÎÎÎÎÎÊÊwssssññDDDD——Ò‡ÒÒ!!||%%xxÖ|Ö1\TúMMúúËËËËËËËË!!!!ËËII œ œI£££^^^ µµµ ± ¹¹¹ff11×|ÓÓ&&&&&&&€€€ÁÁÉ/3Ÿ(†š???;;èè ¹gg½½%ÃÃii » » ¦ ¦SSSSSS~~++‚‚ÕÕ î î › › DŸŸŸõ ›HH ñ ñ ñ ñ ± ± ± ± ± ± ± ± ± ±   Z´ ‹ååå< á á á ¶ ¶ ¶ ¶     ¶ ¶º _  ººººg _ _ « « « «¯¯¯ TXXXX™ôôôððCC ? ? ?™ðð • •  _ _ ¶ ¶cc _º  ºº _ _ ‡ á á áåå8’@@@šKKžž——ê5â∈ˆˆÚÚ---- • ; èCCCðð ì ì ì ì™™ ì ì á á ‡ á ‹ ‹ ‹ ‹ºººº gg ²88 ‹ ‹8’å厎 á á88’8}}""""}}NNN¨¨NNN á ᎎååå庺ººººººb´´b‰‰‰‰àà22 … …22 Ü Ü Ü Ü Ü Ü Ü Ü2222== ë””””” 9 ç ç””””~~+++++ Ñ~~~~ÕÕÕÕÃi¿¿iiiiÃiAAAAë똘llllllÙÙÙ3ÙÙÙÙ‚‚//++~~ll + + + +a»»aŒç99··ieellÃiLLùùPPý£ÊÊwwÊÊÊÊÎs{!wwÊÊŸD—ñ—ñññÒ‡ÒÒÏÏ))ÒxËË%%Òx§§úú££££xxxxËËxxÏtttËË ò òŸ EŸúúú  ± ±µµµµbµµ××))))|||| Ï Ï|××|rF&Ä&ÄJÑì’’’;;èè ¹gggg/’TxÃii » » ¦ ¦SSSS ø ø~~ Ñ Ñ((ÕÕHH › › DŸŸŸõ ›HH ñ ñ ñ ñ ± ± ± ± ± ± ± ± ± ± ± ± Z´ ‹ååå< á á á ¶ ¶ ¶ ¶    ¶ ¶ ¶ ¶ _º  ºººº ² _ _ « « « «¯¯¯ TXXXXôÿJCC ? ? ?™ • • • • ² ² _ _ ¶ ¶ccº _  ºººº< á á áåå8’@@@šKKøø—LDâââ∈ÚÚ----ð •CCCðð ì ì ì ì™™ ì ì á á ‡ á ‹ ‹ ‹ ‹ºººº g  88 ‹ ‹ Ý8 ‹ ‹ŽŽ á á88’8""""""""NNN¨¨NNN á ᎎ ‹ ‹å庺ººººººb¼´´b‰‰‰‰àà22àà22 Ü Ü Ü Ü Ü Ü Ü Ü2222== ë””””” 9 ç ç””””~~++ Ñ Ñ Ñ+~~~~ÕÕÕÕÃi¿¿lliiÃÃÃiAAAAë똘llllllÙÙ~ÙÙÙÙÙ‚‚//++ÙÙll + + + +a»aŒç99êê»»ÃieellÃiLLùùPPý£ÊÊwwÊÊÊÊÎs!{wwÊÊŸD—ññ—ññÒÒÒÒ))))Òx€ËËËÒx§§úú££££xxËËxxÏtttËË ò òŸ E EŸŸŸ    µµµµbµµµµµµ||))))|||| Ï Ï|××|½½Í††ÑÁì’’’;;èè ¹gggg4O!\ÓÃii » » KSSSS ¦ ¦ Ñ Ñ Ñ ÑÕÕ((HH îH ñ ñ ñ ñHHõõ ñ ñ ñ ñ ± ± ± ± ± ± ± ± ± ± ±´åå88< á á á ¶ ¶ ¶ ¶     ¶             « « « T T þX «¡u+)«i¥ð • ’ ’ ì ìC è è è _ _ ² ¶ ¶cc    ºº  Ž 4 á á8’å@@@@šøøŸD—=ê55ˆˆÚÚ----CCCCCðð ì ì ì ì ?™G 쎎 á á88 ‹ ‹    ºº  ‹ ‹ ‹ ‹8888 á ᎎåå88""""""""    NNûûNN á ᎎ88 ‹ ‹ _ _ººººbb Z´´´b‰‰ Ü Ü222à … Ü6‰‰ Ü Ü‰‰2222====””””” 9 çAAA çAÙ~~~~~~~++++‚‚ÕÕ¿ÏtiiAA””==ëëllllll++++ÙÙÙÙ‚‚//3Ù++¿ÇÇeee +aaß9ŒŒêêê¿¿¿eiiii¿¿ÃiLñùTýýPPÊÊwÒÒwÊÊ!!!{wÊoññDDDDññÒÒ%%||))%%-Òxx%%úúúŸ££££xxËËËËxx!!ÏÏxxËË ò ò ò ò ò ò òM  ¹¹µµµµµµµµµbb|||| Ï Ï|| Ï Ï Ï Ï||||½½½ÉÉÁ??ì’èè;;gggg$=Ãii » » ¦ ¦SSSS ¦ ¦ Ñ Ñ Ñ Ñ z z((HHH£LL ñ ñHH › › ñ ñ ñ ñ ± ± ± ± ± ± ± ± ± ± ±´åå88< á á á ¶ ¶ ¶ ¶     ¶          gg «\\¯¯³X «¡À%œ$AJð • ì ì ì ìC è è è _ _ ² ¶ ¶cc    ºº  4Ž á á8’@š@@@šøø[[ùŸò—ê55ˆˆÚÚ----CCCCCðð ì ì ì ì ?™G 쎎 á á88åå    ºº  ‹ ‹åå8888 á ᎎåå88""}}""}}    NNûûNN á ᎎ’’å庺ºº Z´´´b‰‰66222à … Ü6‰‰66‰‰2222====””””î” çA ç ç çAÙ~~~~~~~++++((ÕÕ¿Ïtii » » » » ç ç””==ëëllllll++++ÙÙÙÙ‚‚//3Ù++tÇÇee¿eaa9”ççêêê¿¿¿eÃÃÃÃÃpp¦Tùýýªª$$wÒÒwÊÊ!!!{wÊoññDDDDññÒÒ%%||))%%Òxxx%%úúúŸ££££xxËËËËxx!!ÏÏxxËËMMMM ò ò òM  ¹¹µµµµµµµµµbb|||| Ï Ï|| Ï Ï))||||½½½nnÁgššì’èè;;ggggM˜˜AA ç çii » » » » a » ç ç ç ç 9 9AA pÊss Æ Æ › › › ›ŸŸLL     p p p p ›õHH ñ ñ ñ ñ ¶ ¶ ¶ ¶ccåå88åååšÓy Ì Ì Ì Ìyy y Ì ÌÏ u"" Á Á Á Á Á Á ÁÅÅrrGü^^RCC ì ì ì ì™™ ? ? ‹ ‹ Ý8 ‹ ‹88 á á á á á Ꭰ4 á á á áåå@@Šц3ŽLùŸ—=ââ³³\nnnnnnCCð • ì ì™™NN    NNNN"""""}""      û J J ÷ ÷¤¤¤¤ûû¨¨ååååŽŽŽŽŽ 4 á áŽŽŽŽ    ûûQ ÷¤¤ ÷QQQ¤¤ ÷ ÷ss!!ÊÊÊ%!!!!´ Zb´´´´àà22 Ü Ü Ü Üëëëëë ==AA ç ç ëëëÃi » »iiÕ/‚(‚‚//ÕÕ((++~~ » »iiiiî”AA˜˜˜˜˜˜˜˜AAAAAAî˜˜œöII~ÙÙ~vv$$zÕ(‚++~ÙÙÙÙ~‚ÝŠ/Ù33ÙŠŠÝ‚‘Fë‘ã>‘‘¸ee¸  ààç…à^^^^´´))|||Ö„))ÏÏÏ!!!|££QöMMúúMMMMMMMM½n¹^^Šä77 Ü ÜŠä%ËÒÒÒxËËŸŸMM££QQj½½gggg c½jj½½||||ÓÓ&&))||&&&&;;;–ììòòòòœœAAii » » » » » ç ç ç ç”” ç çÊ pss Æ Æ › › › ›ŸŸ ñ ñ     p p p p @ ›HH ñ ñ ñ ñ ¶ ¶ ¶ ¶ccåå’’åå@õÓy Ì Ì Ì ÌyyyÓ Ì ÌÏ u"" Á Á Á Á Á Á Á Á ÁÅÅrrGGôôCC ì ì ì ì™™ ? ? ‹ ‹ Ý8 ‹ ‹88 á á á á á Ꭰ4 á á á áååååÅ ,áèC\Tù—=ââ³³\nn Á ÁnnnnCCð • ì ì™™NN    NNNN"""""}""      û¤¤ ÷ ÷¤¤¤¤ûûNNååååŽŽŽŽŽ 4 á áŽŽŽŽûûûûQ ÷¤¤ ÷QQQ¤¤ ÷ ÷wwss!!ÊÊÊ%!!!!´ Zb´´´´àà Ü Ü66ëëëëë ==AA ç ç ëëëÃi » »iiÕ/‚(‚‚ÕÕÕÕ‚‚++~~ » »iiiiî”AA˜˜˜˜˜˜˜˜AAAAAAî˜˜öœî£CRèÙÑÑ$$zÕ(‚++~Ù~~Ù~Ý왊Ù3Ž3ŠŠ7Ýëëë‘ã>ëëmeemee::çà…^^^^ZZ))|||Ö„)Ï)ÏÏ||!|þþQöMMúúMMMMMMMMµµ½ÌÈ^^Šä77 Ü ÜŠä%ËxxÒxËËŸŸ ò ò££ööj c cgggg c½jj½½||||ÓÓ&& Ï Ï " "&&&&;;–ðì옘òMþ£œAii » »ii » ç ç”””” ç ç s! Æ › › î î DŸ D D     p p p p @ ›HHŸ D ñ ñ ¶ ¶cc ¶ ¶ccåååååå@@y  Ì Ì Ì& Ì Ìyy Ì Ì"""" Á Ánnnn Á Á Á ÁnnÅÅ™™™™ðð •ðô™ ì ì ì ì ì ìå ‹88 ‹ ‹88 á áŽéŽŽ á á á á 4Žåå’íkÅÍ(†– R s¾Lò—=â``³³\ ÁnnnnnnCCCC ì ìGG      û    NNÏÏ u u"" u u    NN¤¤¤¤¤¤¤¤N¨ûûååååŽŽŽŽ á á á áŽŽŽŽûûNN¤¤¤¤¤¤ ÷ ÷¤¤ ÷ ÷ww Æ Æ Æ!wwÊÊ Æ Æss´´´´´b•à6 Ü Ü6========”” çAë똘iiiiiilÃÃÃÃÕÕ‚‚ÕÕÕÕÕÕÕÕ++~~ » »p””AAëëëëë똘AAAAAAAœ˜˜E IîœQÿ#iÙ~$ÑÑzz((~Ù~~++††ä!¸&uüŽ3à†äääŠëëëëë FFmmÀÀmmÀÀ••:à:::à °^^bZZ|ÖÖÖ))||ÏÏÏÏ!!||QQ££úŸúúMMMMúŸŸŸµ½¹  77äŠŠŠ Ü7ËËË%xÒÒx ò òŸŸ£££Ijgggg½½½½½½||||€€&&|| Ï ÏÓÓÓÓèèKZVG˜˜òMXþœAii » »ii »AA”””” ç ç s! Æ › ›HHùŸ D D     p p p p ›õHHŸ D ñ ñ ¶ ¶cc ¶ ¶cc ‹@ååååååyÓ&& Ì& Ì Ìyy Ì Ì"""" Á Ánnnn Á ÁnnÅÅ™™™™ðð •ðô™ ì ì ì ì ì ìå ‹88 ‹ ‹88 á áŽéŽŽ<< á á 4Ž@@’íkÅ(‚áð#%¼%Ý#(k§—=â``³³\ ÁnnnnnnCCCC ì ì ì ì      ûûûNNÏÏ u u"" u u    NN¤¤¤¤¤¤¤¤N¨ûûååååŽŽŽŽ á á á áŽŽŽŽûûNN¤¤¤¤¤¤ ÷ ÷¤¤ ÷ ÷ Æ Æ Æ!wwÊÊ!!ss´´´´´bàà6 Ü Ü======== 9îA çë똘iiiiiilllÃÃÃÃÕÕ‚‚ÕÕÕÕÕÕÕÕ++~~pîîAAëëëëëë==AAAAAAAœ˜˜E Iîöö†;Ž~~$ÑÑzz((~ÙÙÙ++††ä"f¡Ž3†àäääŠëëFF  FFmmÀÀmmee••:à:::• °^^bZZ|ÖÖÖ))||ÏÏ))||ÖÖQQ££úŸúúMMMMŸ EŸŸµb½¹^  77äŠŠŠ Ü7ËËË%xÒÒxMMŸŸ££I îjgggg½½½½½½||||&&&&|| Ï ÏÓÓÓÓCC!.!…VÔ/‰‰6ÜÜ'@@ æ æêê==lhhhhˆˆˆˆ … …22´´´´ + +]  D D ñ ñ Dž ñ ñGGGG š š š š T® ª ªXXÚ4‡‡ÚÚÚ40000ƒƒƒƒ,,,,,,    úMMMMMMMMúúúú§M á ᎎää Š Š µ µbb    å å’’;; Ž Ž Ž Žèè’’ å?||||ÓÓ--`»Ãx1!›) -*(À!üÝ{ƶ⇇‡44 Ú Ú‡‡‡‡ Ú Ú ®  ® ƒ ƒ00ÞÞ00²² X X  \\²²ÞÞ8ÞÞÞÞÞ¨¨¨¨ ú ú¨¨¨¨ ú ú))||))||&&ÓÓ|||| Ç Çtttt!!öö£IM òŸŸI£IIIIööËËËËttttËËtt! ÇËËËËM òŸŸMMŸŸŸúMMúúMMddddººººæ@9999ææûûûûNNûûûVûû©©ûû5ÛÛÛÛÛˆ.Y´´´aaôOOOj½ff¹ÀÀÀnnÔ''Ì'yyyêêDê<<<<ææ1|B÷BnnÀÀÀÀmmmmmmmmÄÄÄÄ[[ªPªªªªªPSSSSýýýWSS¦¦ w,{{((çB””çç”ïBç:”ëë>>ss  GGGG ñ ñžžÉÉÉÉssssÉÉÆÆ)íH)Ô///Ü@@@@êê==lhhhhˆˆˆˆ … …22´´´´ ° °] žž ñ ñ Dž ñ ñGGGG š š š š T® ª ªXX Ú,,ÚÚ Ú0000ƒƒ ( (,,,,,,    úMMMMMMMMúúúú§M á ᎎ Š Š Š Š µ µbb    å å’’;; Ž Ž Ž Ž Ž Ž’’ å?||||ÓÓ--`»Ãxæ)º2†3à2:.*& 7{Æk⇇‡44 Ú Ú‡‡‡‡ Ú Ú ® ® ÞÞ00ÞÞ00²² X X\\\\²²ÞÞÞ ƒÞÞÞÞ]]¨¨¨¨ ú ú¨¨¨¨ ú ú))||))||&&ÓÓ|||| Ç Çtttt!!öö£IM òŸŸI£IIIIööËËËËttttËËtt|!ËËËËM òŸŸMMŸŸŸúMMúúMMddddººººæ@9999ææûûûûNNûûûVûû©©ûû5ÛÛÛÛÛˆ.Y´´´ôOOOjb½ff¹ÀÀÐunnÌÌÌ'yÔÔêDDêDê<<<<ææ1|èRBnnÀÀÀÀÇÇmmÇÇmmÄÄÄÄ[[ªPªªªªªPSSSSýýýWSS,,{{(( ç””çç”ïBç:”ëë>>ss  GGGG ñ ñžžÉÉÉÉssssÉÉlltÎÎÎÔÔÔÔÔÔÔÔ@@@@êê==¿¿l » Û Û Û Û22ßßaa´ ° ° + ° ñ – D D Dž ñ ñGGGG š š í í ý ýXX,,,,,,,,00 Ö Öƒƒ Ö Ö,,,,ÚÚ,,  úMMMMMMMMúúúúú   á áŽŽä Š Š Š bbb    ’’ å å Ž Ž;; Ž Ž;; å å å å||||Ó-ÛÛ`Ê$P1Ù7C7C5œ02%^åÕÆk4‡‡‡‡44‡‡ Ú Ú‡‡ Ú Ú\\\\ÞÞÞÞ00 ƒ ƒ² X X²  \\²²00 ƒ ƒ00 ƒÞUUU ú¨¨ úU¨ M ú ú¨¨||×||×||&&ÓÓ Ï Ï))!!tttt!!IIIIŸŸŸŸIIööIIööËËËËttttËËtt!!ËËËËMMŸŸMMŸŸúúŸŸúúŸŸddddºººº““ææ99““ûûûû©©ûûN©ûûûûûVˆˆ.ˆˆˆ5Û´´a»´´OO¢¢½bffÀnnuß:ÐnnnÈÌÌÌÌrÌÌ'ÔyÔÔ—ñDDDêêê<<<<‹æÞƒ¬÷÷JðððÈÈnÀÀÀÀÇÇÇÇÇÇmmiÄ[[_ªªªªªýýSSSSªªýýSSÑÑ((( ÎçB”””:çç””çç‘‘>>  ssGGGG ñ ñžžÉÉÉÉÉÉsssswllÆÆtÎ z z z zÔÔÔÔ››@@êê==¿¿ÆÖ, » Û Û Û Û22ßßaa´ ° ° + ° ñ – D D Dž ñ ñGGGG š šGGXXXX,,,,,,,,00 Ö Öƒƒ Ö Ö,,,,ÚÚ,,ú  MMMMMMMMU +¯úú   á áŽŽä Š Š Š bbb    ’’ å å Ž Ž;; Ž Ž;; å å å å||||Ó-ÛÛ`Ê$P1Ù7C7C6÷4B)nôÕÆk4‡‡‡‡44‡‡ Ú Ú‡‡ Ú Ú\\\\ÞÞÞÞ00 ƒ ƒ² X X²  \\²²00ÞÞ00 ƒÞUUU ú¨¨U ú¨ M ú ú¨¨×××1Œ1||&&ÓÓ Ï Ï))!!tttt!!IIIIŸŸŸŸIIööII œQ% pËËttttËËtt!!ËËËËMMúúMMŸŸúúŸŸŸŸŸŸddddºººº99ææ““““ûûûû©©ûûN©VVVVV°ãã㈈ˆÛ5´´aaa´´OO¢¢½b¹¹ffÀÈÈÐ: I*nnnÈrrÌÌÌ''.ÔÔÔ—ñDDŸDDD————æ@“8R÷RRJððð##ÈnÀÀffÇÇuuÇÇmmmmiĶkºªªªªýýSSSSªªýýSS¦¦$$ÑÑ(( Î(çB”I¤”çç””çç‘‘>>  ssGGGG ñ ñžžÉÉÉÉ o osssswllll¿ Ð Ð Ð Ð+…Ø3DDê ====hháÚphhˆˆ Û Ûˆˆ Û Û + +¸] ° ° + +žž D DGG š š š šGG š šGG ª ª ª ª  ,,ÚÚ‡,ƒƒƒƒ Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö ö ö ö öMMMM£þÂþ££ää Š Š77 Š Š b µ f¹¹??’’ Ž Ž Ž Ž Ž Ž;; Ž Ž Ž ŽÓÓÓÓÓ--ˆÃÊÚ#L2/7™8ô6 2‘'½C,Âg‹‹00‡‡‡‡ Ú Ú Ú Ú‡‡‡‡²² X X²²0000 Ú Ú Ú Ú ® ®\\²²²²```‡‡‡‡‡‡‡âQQ««þþþþþþ ¤ ¤«Qþþ))„“æ×||&&Ó- Ï Ï||ËËËË!!!!IIöö œöööII£I ò òMM!!! ÇËËx!!!!ËËxxxx%%££££úú ò òMMMM ò òŸŸ   hddêêê©©©©RR¥ÿR­RR©^ ÀŸê522ßß + +]]····OO¢¢½½µ¹fÀrÜ6}}2#ÈÈu'Ìy'..DŸŸŸññùŸíí›@<<ê©N©NFFFFÄn¹ËËqiÄiÄ®®cºýýPªªªýýSS¦¦SSSS((((ÑÑÑÑë‘>M¬B::””””>>>>  ssss Å ÅGGGGGG š šÉÉÉÉ o owwsssshhll Ð Ð+++…è¬ ŸDê====hhÂÊhhˆˆ Û Ûˆˆ Û Û ° ° ] + + + +žž D DGG š š š šGG š šGG ª ª  ,,ÚÚ‡,ƒƒƒƒ Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö Ö ö ö ö öMMMM£þ+½!–³££ää Š Š77 Š Š b µ f??’’ Ž Ž Ž Ž Ž Ž á á Ž Ž Ž ŽÓÓÓÓÓ--ˆÃÊÚ!ñ. 6?7™6 /Ü%C,Âg‹‹00‡‡‡‡ Ú Ú Ú Ú‡‡‡‡²²²²²²000044 Ú Ú ® ®\\²²²²`````º‡‡‡‡‡‡ -‡QQQQþþþþþþþþ«Qþþ)))„1×||&& xÓ))||ËËËË!!!!IIöö œöööII£I ò òMM!!! ÇËËx!!!!ËËxxxx€€X£££úúMMMMMMMMŸŸ   hddêêê©©©© ø ø¥ÿR­RR©^$£(’ ꌌßß + +]]····ôô¢¢½½j¹À‘*/„*œ}ÈnnnuÐÌ'y'..DŸùù¦¦TùHH@›<<Dê©©N¡¡¡¡ÄnnËËqiÄiÄSS®ºªªWWªªªWWSS¦¦SSSSƒƒ((ÑÑÑÑë‘>˜BB::””””>>>>  ssss Å ÅGGGGGGõõÉÉÉÉÉÉwwssss » »hhll Ð++++…R&Û{L—===== » »ÂÂhh Û Ûˆˆ66 Û Û]]]]]] + +žž ñ ñ í í š š š šGG š šGG ª ªXX®®,,  ÚÚ,,00ƒƒƒƒ ( ( Ö Ö Ö Ö ( (0 Ö ö ö££úúMM£þÂá ö ö777777 Š Š µ µf…Ðô å å å; á Ž Ž Ž Ž á; Ž ŽèèÓÓÓÓ--ÛÛhÊÚ"ž-r475‘2‘*r K†oº88ÞÞ‡‡‡‡‡‡‡‡‡‡ Ú Ú²² X X000044‡‡\\ \²²`²²º`²²`‡‡‡‡‡‡‡‡ ¤þþþþþ ¤þþþþYþþ«Q))||×|))&&ÓÓ||||ËË!!!! œöööIIööIIööŸŸMMtt Ç ÇËËËË%%ËË!!!!xxxÒ%%€€³þQQúúúŸúúMM òMŸŸ  hhll<<êêDDD©©¥¥RRÿÿRR©Ï(³+G =ãßßßß + + +e + + + +¢¢¢ü½n#&·5›7£3“"þÐÈnuÌ'ÔÔÔ.6ÜÜŸù¦¦TT¦¢¢Hí————ûVNNôNNôÌrrrÀnËËuÇÇqiiÄiSS[WýªªªªªªªªSS¦¦SSÕÕ((ÑÑ$˜>>>”::::””:‘‘‘ëÍÍÍs Å ÅssGGGG š šõõÉÉÉÉÉÉ o ossss » »hh¿¿ Ð++++…÷\L—===== » »hhhh Û Ûˆˆ Û Û Û Û]]]]]] + +žžKKGGõõ š šGG š šGG ª ªXX T T,,    ,, Ö Öƒƒƒƒ ( ( Ö Ö Ö Ö ( ( Ö0QQ££¯¯§§£þþ³«QQ777777 Š Šf…%¤O???; á Ž Ž Ž Ž á; Ž ŽèèÓÓÓÓÓÓÛÛ³%&®.Í0'.&bð,oº88ÞÞ‡‡‡‡‡‡‡‡ - - Ú Ú²² X X000044‡‡\\ \²²`  º`²²`‡‡‡‡‡‡‡‡þ ¤þþ ¤ ¤ ¤þþþþYþþQ«))|||×))&&ÓÓ||||xxËË!!!! œöööIIööIIööŸŸ ò òtt Ç ÇËËËË%%ËË!!!!xxxÒ€€ÚÚ³³««TTúŸŸŸMMM òŸŸhhhh<<êêD®®¸^©¥¥RRÿÿRR©  Ÿ=ãßßßß + + +e + + + +¢¢üW'‘rn#ó.Ö3“/„!¤*ÈnÐuyy'...‰ÜÜ66ùT T¦W¢¢Hññ——Vû©©NôNôÌrrrÀnËËuÇÇqÄÄÄiSS¦ªªWýªªªªªªªªSSSSÕÕ((,,Ùó˜>>”::::””:‘‘ëF77‚( Å ÅssGGGG š šõõÉÉÉÉÉÉ o ossss » » ¿¿ ¥ÿÿZZZZZ››““ æ æ æ æ 9 9““““ æ æ ° °]]ˆˆˆˆˆˆ6 Ûss  wsss ,,   Ö Ö Ö Ö ª ª ª ª T T T T Ö Ö Ö Öƒƒ Ö Ö®®XXXX%%%€“9×|xx%%%%%%ŽŽŽŽä Š Ý7  ¹¹fv33Ággn ¹ ¹ ¹;;;;;;;;Ó-ÓÓ))×15Eú\# 'Ý)8& ì0{Êogg```²²² X ® \\\\\\ X X²² Ú Ú Ú Ú ƒÞÞ8‹00044‡â  \\\\\\ÞÞÞÞ0000ÓÓ&& Ï Ï||||||€€€€þþþþQQQ«|||×||||ööIIŸŸMMËËËËŸŸŸŸIIIIxËËËËxx!!ÏÏ||)Ï%%€Ú5<<hh ³¯T§§%%xxxxxx¾¾¾¾ºººº99“îñ[$ä(ôe‘ÐÐÐ+}}ÐÐÔÔ..·· +°]·ãˆãã5555øøøm'çÀ¡ììFF© uÀôFFFF¡¡÷÷ÿÿ}}…ßÜÜ66,,ÙÙ Š0ƒƒ‡,,ÒwwÂÿ¥ÿÿ¥¥JJÄÄÄÄjÄj    óóFFFFFFó˜ëëýýWW((Õ{{Õ((ýýWýSSSSªªýýW² ·MFë‘‘‘‘‘‘ëëëë>óèèÙ$ÉÉwÉÉzz  w o ossss » » » » ¥ÿ ¥´Zÿÿ@@““ æ æ æ æ 9 9““““ æ æ ° °]]ˆˆãããã6 ÛÍÍ  wsss ,,   Ö Ö Ö Ö ª ª ª ª T T T T Ö Ö Ö Öƒƒ Ö Ö®®XXXX%%%€Þ„|"xx%%%%%%ŽŽŽŽä Š Ý7 ± ±¹¹fÁnnÁggg ¹ ¹;;;;;;;;Ó---))×15êŸ"s#Î#Vì0{Êogg```²²² X ® \\\\\\ X X²² Ú Ú Ú Ú ƒÞÞ8‹00044‡â  \\\\\\ÞÞÞÞ0000ÓÓ&& Ï Ï||||||€€€€þþþþQQQ«|11×||||ööIIŸŸMMËËËËŸŸŸŸII££x%%ËËxx!!Ï„‹‹„)€€€Ú5D¦[,,wh¯T§§%%xxxxxx¾¾¾¾ºººº99“îñÅ.^2m$Ï‘ÐÐÐ+}}ÐÐÔÔÔÔ···· +°]·ãˆˆˆ5555øøøSN^°Fìììì™NûûNôFFFF¡¡÷÷ÿÿØØ…ß66ë뇇!Ž!Ž!å ŠÝÝ á‡‡,,,wZÿÿÿ¥¥JJÄÄÄÄjÄûû  óóFFFFFFó˜ëëýýWW((Õ{{ÕƒƒWWWýSSSSªªýýýW Ñ!Fë‘‘‘‘‘‘ëëëë>>$Ù~ÉÉÉwÉÉ    w o ossss » » » »RRR­­RR““““ æ æ“ 9 æ æ æ æ æ æ æ@ ¬ ° °]]ˆããã6ÍÍ ÅÉÉÉÉ  ssÉÉÉÉÚ    Ö Ö Ö Ö ª ª ª ª T T T T Ö Ö Ö Ö Ö0 Ö Ö®®XXXX%% Ë ËÏÏÏÏ Ë ËxxxxxxŽŽŽŽ77 Š Š     fffgg ¹ ¹ ¹gg;;;;;;;;ÓÓ€&))„„5êEú d"s& ¡Š{gg ```²² X X\\\\\\ ® ²²²² X X‡‡‡‡ ƒÞÞÞ000‹44‡â  \\    ÞÞ‹0ÞÞÞÞÓÓÓÓ||||||)„€&&€««««þþ ¤ ¤)9A1××|| œöII ò òŸŸËËËËËËËËŸŸŸŸIIööËËxxËËxx||Ö› º º›1€€-â—$s(‚(®$ž,Âd¯Túxx%%%ËË˺ºººææ““D® "/U6.ÔÐÐÐÐÐÐ+ÐÔÔ'' + + +e]]]·ãã555555KK¦¦ìFFì™™™™FFF¡¡FFFFF¡ûR÷÷R}Øß:6‘FF"< á 4"é"’"’#?#?"é!Ž á áÙwwaR¥¥÷÷rrÌÄÄÄjûûMMóóó˜FFFF˜>ëë®SSSªªªª(((({Õ0ŠWWªªSSSSýýWýýWW °û˜>‘‘‘‘‘‘‘‘‘‘‘‘wÑÑwwwÉÉ o o    ÅÉÉÉÉsssshh » » RRR øR­RR““““ æ æ“ 9 æ æ æ æ æ æ æ@a ° °]]ˆãããëëë((z ÉÉ$$  ssÉÉÉÉÚ    Ö Ö Ö Ö ª ª ª ª T T T T Ö Ö Ö Ö Ö0 Ö Ö®®XXXX Ë Ë Ë ËÏÏÏÏ Ë ËxxxxxxŽŽŽŽ77 Š Š     f  gg ¹gg;;;;;;;;ÓÓ€&))„„Û5êŸú¯ #V ¡0 ggg ``` X X X X\\\\\\ ® ²²²²²²‡‡‡‡Þ8ÞÞ000‹44‡â  \\    ÞÞ‹0ÞÞÞÞÓÓ--××||||)„€&&€««««þþþþ„“›Œ××||öQII ò òŸŸËËËËËËËËŸŸŸŸIIööËËxxËËxx||1_0ø3­'~@€€‡<ñ!-ì4±4Ü0Í%Kw¾ Túxx%%€%Ë˺ºººææ““꟦6.Ô++ÐÐÐÐ+ÐÔÔ'' + + +e]]]·ˆˆ555555KK¦¦‘ìì‘??™™ìììF¡FFF¡¡¡ûR÷R¬}Øß:6‘ë  "<#–"é"é%G%G'O'O$C"é"<"ëëS®®®ªªªª(((({ÕÕ0ýýªªSSSSýýWýýWWWFF˜>‘‘‘‘‘‘‘‘‘‘‘‘wÑwww$$ÉÉ Â   ÅwwÉÉ o osssshh » »hhV ü N N ¥ ¥RR==== æ æ“ 9 æ æ ‹ æ==êê´´ Y Y ° °]]6˜˜EEÝ‚(Í  ÍÍ  sÍÉÉÉÉ Ö Ö ( ( Ö Ö Ö Ö ª ª ý ý T T T T Ö Ö Ö Ö Ö Ö Ö Ö ª ª ª ªXX t t t t t t""ÏÏ t t""""ŽŽŽŽŽŽŽŽ   µ µ  _¹gg½½’’ å å;;èèÓÓ--€€--Û5==—L§§Ý‚{Æggº```` X²  \\\\\\\\  ÞÞ ƒ ƒ0‹ÞÞ‡‡‡‡‡‡‡â      ¶¶‡â4444‡‡ÓÓ----€€))))€&&€YþþþþþQ«-ˆÛÛ-ÓÓÓMMŸŸI£ö œ Ç!tt!!tÏM§M§QQII Ç!tttÏ!!!|9!g/2R&Ñ9€Úâ<ù'(4±8À7è53'ª{hXþþÏt!!!!tt · ·ººººêêêêDŸD+Ð}}}}ÐÐyÔ'}}++ + +·]]·]]ˆˆˆããˆ55KK¦¦è•;;•••Bè•ð™ôôô÷÷J¥ûûVV……ç‘Fó!M#–$ñ&K'¦+)­'¦)&ø$C#–"<#íÝ{ ee VÿZ¥JÌÌÌÌÄÄjMM FIïïïFF˜˜BB””S®®ªPPP((ÕÕ,,S®SSýýªªýýªªBBBç‘‘>>‘‘‘‘çç::  sssÍÍÍÉÉÉÉ oÉÉ oÉÉw Å Åssssssll »V ü N N ¥ ¥RR==== æ æ“ 9 æ æ ‹ æ== Y Y Y Y ° °]]6òò¯¯7ÝÝÍ  ss  sÍÉÉÉÉ Ö Ö ( ( Ö Ö Ö Ö ª ª ý ý T T T T Ö Ö Ö Ö Ö Ö Ö Ö ª ª ª ª ª ªXX t t t t t t""ÏÏ t t Ç Ç""ŽŽŽŽŽŽŽŽ   µ µ  _¹ÁÁ½½’’ å å;; Ž ŽÓÓÓÓ€€--Û5ââ=òòòÍsÆÆggº```` X²  \\\\\\\\  ÞÞÞÞ0‹ÞÞ‡‡‡‡ - -‡âcc    ¶¶â<é444ââÓÓ--ÓÓ€€))))€&&€YþþþþþQ«Ó-€€-ÓÓˆúú îIö œ Ç!tt!!tϧM§««££ Ç!tt t!! Ç!)9P£Þ€Ú‡âŸ#0¡7f61#&OÖhXþþÏt!!!!ttººººêêêDŸDê+Ð}}}}ÐÐyÔ'}}++ + +·]]···ããˆããˆ55KK¦¦è;•;•••èBð•?™ôôJ¥ûûVVßßœFF!M"¨&K'¦*[+µ/-½-+µ)­&ø&K$ñ#íÝÕ{ee VÿZÿ¥ÌÌÌÌÄÄjMMû IïïïFF˜˜BB””S®®SªPªª((ÕÕ,,S®®®ýýªªýýªªççBç‘‘>>‘‘‘‘çç::  sssÍÍÍÉÉÉÉ oÉÉ oÉÉw Å Åssssssll »VV ü ü ¥ ¥ ¥ÿ==ê æ æ æ æ æ æ““==  ¬ Y Y ° +]]ˆãëò¿dìÝ/zÍÍz     ww$É Ö Ö Ö Ö Ö Ö Ö Ö ª ª ý ýƒƒ ( ( ( ( ( ( ª ªXX ª ª ª ª"""""" t t"""" t t""ŽŽ á;; ᎎ µ µbb  ¹¹gggg½½’’ 7 7;;;;&€€€€€€Ûˆˆââ==——Æk¾¾ggº```²²\\    c  X X ® ®\\ÞÞ000000‡‡‡‡ Ú Ú44¶¶\\\¶ cž®ù444€€€€ÓÓÓÓ))))Ó xÓÓ««QQ««þþÓ-€€-ÓÓ-TTMMöööötttttÏ!|§§þ£££Ït Ç Ç Ç Ç! ÇtÏ))„„ÖÖ---‡D c(‚,’/&ü0{hX«Q!!tt Ç Ç!!¾dlhhhh—————<}}}}Ð+}#''yyÐ+++ + + + +····55555555žž¦¦;;èè••••BB‘FFFðJ÷÷ûVV°ßßß”    $%])+µ//110r0r+µ*[)&K#?0݃ee¸ÿÿ¥¥yyÌrrrrrMM  ¤Iœœ F˜˜BBïï®®®Sýýªª((ÕÕÑÑSSS®ªªýýªªýýSSçç””>>‘‘‘‘ ã>””:” Å Å Å ss  ÉÉÉÉwwÉÉ Å ÅsssssshÂVV ü ü ¥ ¥ ¥ÿ== ê æ æ æ æ æ æ““==êêa Y Y ° +¸¸ˆã똧 +¯’‚Õ ÍÍz     Ñ$É Ö Ö00 Ö Ö Ö Ö ª ª ý ýƒƒ ( ( ( ( ( ( ª ª²² ª ª ª ª"""""" t t"""" t t""ŽŽ á;; ᎎ µ µbbff¹¹gggg½½’’’’;;;;&€€€€€€Û--ˆ=ââââÆk¾¾ggº```²²\\     ®`` X X ® ®\\ÞÞ000000‡‡‡‡ Ú Ú44¶¶¶¶\¶ cù"'rž4€€€€ÓÓÓÓ))))-ÓÓÓQQQQQQþþÓ-€€-Ó-ÓúúMMöööötttttÏ|Ö\\\\þ£££Ït Ç Ç Ç Ç! ÇtÏÏÏÏÏ||ÒÒ-‡ù c$GÝ!lhX«Q!!ÏÏ!!!!¾dlhhhhêê<<<<—<}}}}Ð+}#''yyÐ+++ + + + +····55555555žžKK;;èè••••BBììFFJ¥÷÷ûVV°ßßß”ë  %]&·+µ.j0r3'3Ô3Ô3'3'/Å.j+µ)%ô!å!8ÝÀÀm¸ZZ¥¥yyÌrrrrrMM  I FóóBBïï®®®SWWªª((ÕÕÑÑSS ùSªªýýªªýý¦¦SSB ::>>‘‘‘‘ ã>”””: Å Å Å ss  ÉÉÉÉÉÉ Å Åssssssh©© ü üRRRR'''' Ð Ð Ð Ð ü ü©©VVVVw o oÉÉõõOO___Ëa + +¸¸ˆˆ662Œßß P® T    ,,,,ï • • •BB • •BBBB ë ë ë ë t t"" Ë Ë Ë Ë ö ö ö ö££QQää7777 Š Š77ä䎎 3Ž;;;;è Ž;;gg ¹ggQQQQUU€Û55ŒŒÞÞ¬R¤¤÷÷÷÷ÈÈu Äqq ƒÞÞ8‹‹00 ƒÞ0 Ö ƒ ƒ ƒ ƒ‡‡ Ú4ÞÞ000‹‹‹‡‡ââ÷÷÷÷J¤2BBØyÌÌ€€ÓÓ××))))××) Ï))jj½½jjÁgxxxxtt!! ò òM òI££þÅÁÁf Ž33333ààMMMM££££ÒÒ€Ú9îH£¼¥J™™?? ±  µµµµyy''yy''VV©©©©©©ææææ@›@æê—<ê»a´]· + +»a´ + + + +°e + +‘77‘‘ìììÄͶ¾dºÊwÒÙƒÝ%G'ü-11Ì44Ø625…4+3R0-;*†'$#!º _B"Q%#¬ëÔÔ¥¥¥JB;á444Ù†††††††,ªWWWWPP¦SSSSýýýý¦¦¦ªPýýýýýýýýýý{{((((Õ{ Å Åssss  õõ¢¢õõG¢ss  ss  GGGGGGõõhh » »hh N N ü üRRRR'''' Ð Ð Ð Ð ü ü©©±±VVw o oÉÉõõOOªa + +¸¸ˆˆ Û Û2Œßß ª ª ª ª® T    ,,,,ï • • •BB • •BB è è ë ë ë ë t t"" Ë Ë Ë Ë ö ö ö ö££ ö öää7777 Š Š Ý Ýä䎎 3Ž;;;;è Ž;;gg ¹ÁÁQQQQUU¨¨€ÛÛÛ11ÞÞ¬R¤¤÷÷÷÷ÈÈ À Äqq ƒÞ8“‹‹00 ƒÞ0 Ö ƒ ƒ ƒ ƒ‡‡ Ú4ÞÞ000‹‹‹‡‡ââ÷÷÷÷J¤#}}}yqq€€ÓÓ××))))×ׄ)))½½jjjjÁgxxxxtt!! ò òM òI£I£jÅÔvÁf Ž333ŽŽààMMMM££££ÒÒ%€„„9“RRJð???? ±  µµÔÔ''ÔÔVV©©©©©©æææææ@@æê—<êa´]· + +»a´ + + + + + + + +‘77‘‘ìììnnÀÀÄͶd¾ºo$,‡Ù 4!8"’%G'ü+µ/Å3'5Ü7626à5…4­1ø/ð-;)Ù%É#!ºœ&a/Ú.€!ûÜÔÔÿÿ¥JB;á444Ù††áᆆ†,ªWWWWªª[SSSSýýýý¦¦¦ªPýýýýýýýýýý{{(((({Õ  Í ss  õõ¢¢õõG¢ss  ss  GGGGGGõõhh » »hh ü ü©©R­ ¥ÿ~~ РЩ± ¸^$ÉÉ oÉÉ¢¢G¢üüªO» + +¿ +ˆˆ Û62222 ª ª ýX T T,,,,,,,,BB • •BB • •BB • • ë ë ë ë t t"" Ë Ë Ë Ë ö ö ö ö££ ö öää7777 Š Š7777ŽŽ á á;;;;è Ž;;gggÁQQQQ¨¨¨¨€€ÛÛÞ„11RRÿ¤JJ÷÷uu n nqq00‹‹88‹0ÞÞÞ ƒ0000 Ú4‡‡00ÞÞÞÞ‹‹â‡44JJJJ##ÐÐÌÌÓÓÓÓ××))×ׄ„„)×|½½½½½ ¹gggÁËËxx!!ttŸŸŸŸöö££jÅÌÌnffààŽ3ŽŽààMMMMööööË%ÒÒ|ÖÞÞCè??‘‘  ¹¹b½ÔÔÜܰV©©VV“9ææ““““êêêê´´a +e··´´a]]]·····ää7‘‘‘ììÀfÀrrr̶ddºÒÙ!Ž"é!Ž!8"’%G)W-½0r3Ô6‰77626263R1J-;(~'$!º!º I$Y))!M.Zÿ÷÷÷÷B;á444444áá4Ù†,,,WWWWªªªªS®®SSSSSýýýýSSSSSSWýªªªªýýýýýý(({{( Î((Íss ss Å Åõõõ š¢¢õõ  ss Å Å Å GGGG š šGG »hh ü ü N NR­ÿZÜÜÜÜØØ Ð Ð©f”*h*h A$ÉÉ oÉÉ¢¢¢üWWªOa» + + + +ˆˆ Û62222X ý®®,,,,,,,,BB • •BB • •BB • • ë ë ë ë t t"" Ë Ë Ë Ë ö ö ö ö I I ö öää7777 Š Š7777ŽŽ á á;;;;è Ž;;gg gQQQQ¨¨¨¨€€ÛÛÞ„11÷÷¤JJJÈÈÌÌ0000ÞÞ‹åÞÞÞ ƒ0000 Ú4‡‡00ÞÞÞÞ‹‹â‡44JJJJ##uuÌÌÓÓ--×ׄ Ï "×)))„1×½½½½½ ¹gggÁËË!!ttŸŸúúöö££jnff;;Ž333ààMMMMööööË%xx!|))èèèŽää77  ¹¹b½jj..‘û°°u°©©VV©©“9ææ““îîêêêêêêD´´a° +]]´´»a··]·····ää7‘‘‘‘‘ÀffÀrrÌ'¶ddºÒ!Ž)­+&ø#í"’%G)W,b/3Ô6‰6262626263R1J-;)Ù%É!º!º!¤ Iœœ˜.''¥J÷÷RB;á444444††4Ù,†††WWWWªªªªS®®SSSSSýýýýSSSS¦¦®®WýªªPPýýýýýý(({{( Î Î ÎsÍs ss Å Åõõõ šGGõõ  ss Å Å Å GGGG š šGG »hh©© N NRR­>óF6ØØ++­&-t5<5<(`ÈÑwÉÉssss¢¢¢ü®®Sùaaaa´´´´ßß …ßß …22 ª ª ª ª ( ( Ö Ö,,ÚÚ™™™™ > >™ > • • • • ë ë ë ë x%%""""££ I£ ö ö ö öŽŽ á á á á á á7777 á á á á’’ 7’è Ž Žè ggQQQQ ¤ ¤Q«--ÛÛ„„„„J¤÷JJ÷uuuuu00ÞÞ‡‡4400ÞÞ‡‡‡‡‡‡ Ú Ú0000Þ ƒÞÞ44‡‡÷JJóóóóuuuuÈÈ#È|××××ׄ) ËÛ-Ó€€--nggÁÁ½½jjjjÏtttxxxöö££Qö££jj½½½ŽŽàà † †ŽŽŸŸúŸŸŸŸŸ!!!!%%xxääääŽŽŽŽbbjfÁÈÈ…………÷'Ú-ò+=ˆ´­R©©ûûææ@@““@@<<<<“““î + +·]´´ +e··· + +´´»»ää‘‘èè••ÀÀf##``  ºo,#í-f0*±%ô#?$š(©*.3}2#5Ü766‰6‰5±4V0ô.?)Ù%É# _  ‘>>:***¥JJJFì™™8ÝÝÝÝÝ00ÝÝ00†††,ªWWWýªªªªªªªªSSSSSSSS ùS®SýýPP¦¦¦¦$$ÑÑ{{{{ssssžžùžžžžžÍsss oÉ Â š šGGGGõõ d d©© N NRR­¼,›)9U3~++­&-t6—6—-Ê}ÑwÉÉssÍÍ¢¢¢üSSSùaaaa´´´´ßß …ßß …22 ª ª ª ªƒƒ00,,ÚÚ™™™™™™™ > • • • • ë ë ë ë x%%""""££ I£ ö ö ö öŽŽ á á á á;;7777 á á á á’’ 7’ Žè ŽèggggQQQQ ¤ ¤Q«ÓÓÛÛ„„„„J¤÷JJ÷uuu00ÞÞ‡‡44‹‹ÞÞ‡‡‡‡‡‡440000Þ88844‡‡÷JJóóóóuuuu###È|×××××)„€Û-Ó€€--nggÁÁ½½jjjjjjtÏttxxxöö££QöIIb½½½ŽŽààààŽŽúúúŸŸŸŸŸ!!!!ËËxxääääŽŽŽŽbbjv…œœï………Q+ê0§(ˆÓ´­R©©ûûææææ““@@<<<<“““î + +·]´´aa +e·]·· + +»»ää‘‘BB••ÀÀÀÀÈÈ``  ºowÝ&¢'ü'ü$š$š%ô'O(©,¹/n+^1Ì5Ü5/5/4V2ü/™,ä)Ù%É#ªë‘ãã…***ÿ¥JJFì™™8ÝÝÝÝÝ00ƒƒ00††á†___WWWýªªªªªªªªSSSS ù ùSS ùS[[®ýýPP¦¦¦¦$$ÑÑ{{{{ssssžžùžžžžžÍsssÉ$w š šGGGGõõ¿¿ N N N NRR­¼#"2-ö3Ø~~R­'³'³2¸wwÉÉ Å ÅssõOOOKK¦Ka´´´´aaßß22 … … … … ª ª ª ª T T T Tƒƒ00  ,,FFFF™™™™B èïï ë ë ë ëxxÓ-|" t t ö ö££ ö ö ö öŽŽ á á á ᎎ7777 á;ŽŽ’’ å å Ž ŽèCÁÁggggQQQQQQþþ&€ÛÛ××××÷÷÷ÈÈÈÈÈÈÞÞ00 Ú444ÞÞÞ ƒ‡‡‡‡‡‡‡‡Þ ƒÞÞ0å88444 ÚóóóóÈÈ##ÐÐ##×ׄ„„„„„Û€----€€ÁÁÁÁjj½½jjjj!! Ç ÇËËË%öö££££I£½½½bààŽŽŽŽ;;MMúúM òŸŸ!!!!ËËËË77773Žààb½Ð'i2=2=!Ã:àà•ÿY¤´ZRR©©ûûææ““““““<<<<“9““ + +]]aaaa + + + +ee·»»»»ää‘‘•••ðnnnnnnu  ³³hhÂ{Õ Š!å!å$š$š'O*±-f.Á03'3'5/3Ô2N0ô.?(Õ%É##ëë‘6Ø}*ÐR÷JJF¡™™?ŠÝÝŠ000ƒÝŠŠÙÙÙŽº_²WªªªýWªªªªªªSSSS¦¦SS[c®Wýýý¦¦¦¦$$${{((wÉÉssss ñ ñžžžžžž  sswÉ o š š šõõ šõõ¿¿¿¿l N N N NRR­™ó3Ø~~R­­¼¸©ÉÉ Å Åss šõõõKKK ña´´´´ßß22 … … … … ª ª ª ª T T T Tƒƒ00  ,,FFFF™™™™B èïï ë ë ë ëxxxÓ|" t t ö ö££ ö ö ö öŽŽ á á á ᎎ7777 á;ŽŽ’’ å å Ž Ž ŽèÁÁggggQQQQQQ ¤ ¤&€€€××××÷÷÷ÈÈ n nÈÈÞÞ00 Ú444ÞÞ8Þ‡‡‡‡‡‡‡‡8ÞÞÞ‹‹88444 ÚóóóóÈÈ##uu##×ׄ„„„9£E5ˆˆ--€€ÁÁnnÁÁjjjjjj!!!!ËË%Ëöö££££I£½½½bààŽŽŽŽààMMTT§Múú!!!!ËËËË7777Ž3ààb½Ð'i3—3—#•……ààààZÿRR©©ûûææ““““99<<<<“9““ + +··aaaa + + + +ee·]aaaaää‘‘••;•nnnnnnu    hh {Õ00!å$š*-f-f-f.Á0r0r1/Å/™.?,ä'z# _ _‘‘‘6Ø}ÐuR÷JJF¡™™ååÝÝŠ000ƒÝŠŠÙÙ44_WýªªªýWªªªªªªSSSS¦¦SS[[c®Wýýý[¦$$${{ Î ÎwÉÉssss ñ ñžžžžžž  sswÉ o š š šõõ šõõ¿¿¿¿l ¥ ¥ÿ ¥ ¥ ¥RR^¸f±­­ÿÿÔÔÔ‰à…++ Å ÅssGGGGžž ñ ñ´´´´ Y´]]]]]] ° + Ö Öƒƒ    ®®®®®®qÄÄmmmmBBïï™™ >™MMMMMM  ú)ÏÏÏ""""  ¹¹    µ µbbbbgÁ ¹ ¹ ¹ ¹ ¹ ¹gg ¹ ¹Ág¨¨¨¨¨ M ú úQQQ«««þYÐÐÈÈu ï ïJJ44‡‡ÞÞÞÞÞÞÞÞÞÞÞÞ``²²²²``²²``¶¶  ÈÈuuuuÈÈuu##]l‹|·¯¯]]]ÁÁÁjjjjÁÁnnööQöŸŸŸŸŸŸMMMMúŸbbbb¹¹ fŽŽŽŽ‘‘77Ò-<—‡xxx££öööQ££ f  bµµŽè;;ì "*"*Mã..……ØØ­­¥¥RRRR<<<<<<h hh¾¾ßß999ßßß55ˆˆ5555ˆˆ5à;èè‘‘??n‡âêêDŸùL[²! &v.•1ø/C+à*†-;.•-è/C-½+*[&K"’݃ƒ¼aaV°Vû¥JJðFFF쎎;á4Ù4ÙÙÙ44††††WWWW¦SS,,,,,ѪªPPªªªªÑÑÑ,,,®SSS_²ýSS ù ùS ù ù ùõõõOK ñ ñ ñ Å  ÉÉžžK ñžž ñ ñ ñ ñžžK ñžž æ æ““ æ æÿÿÿ ¥ ¥ ¥RR©VVRRÿÿÔÔÔÔ+ Ð Ð Ð Å ÅssGGGGžž ñ ñ´´´´ Y´]]]]]] ° + Ö Öƒƒ    ®®®®®®qÌyyÈÈmmBBïï™™ >™MMMMMM  ú)ÏÏÏ""||  ¹¹    µ µbbbbgÁ ¹ ¹ ¹ ¹gg ¹ ¹Ág¨¨¨¨¨ M ú úQQQ«««þY**ÈÈu ï ïJJ44‡‡ÞÞÞÞÞÞÞÞÞÞÞÞ``²²²²``²²``cc##uuuuÈÈuu##]·ll]¯¯]цvÁÁjjjjÁÁnnQQQöŸŸŸŸŸŸMMMMúŸbbbb¹¹ fŽŽŽŽ77 Ü ÜxÒ—ñ‡xxx££öööQ££ f  bµµŽè;;‘Fûû‰ÔÔÔ++}}RR¥¥RRRR<<<<<<êêh hh¾¾ßßßß9ßßß55ãã5555ãã5à;èè‘‘??½½nÀÀ‡âêêDŸù¦²W#Á)+,Ž)Ù*†&v)+*†)Ù+3)­&ø&K$ñ!8!8ƒƒ¼a°VVû¥JJðFFìFŽCð–Ž44ÙÙÙÙÙ††,,WWWW[SS,,,,,ѪªPPªªªª,,,Ñ,,S®SSªPýýSSSSS ù ù ù š š šõK ñ ñ ñ Å  ÉÉžžK ñžž ñ ñKKžž ñKžž æ æ““ æ æÿÿRRRR ¥ ¥ N©©©RR ¥ÿ''ÔÔ Ð Ð # #É o Å ÅssGGGG ñ ñžž´´ Y Y]] ° ° + + ° ° Ö Öƒƒ,,,,®®\\y=¯ 2" ÀBBïï ë ë™™MMMM    M§)Ï"""")„¹¹      bbbb µ µbbgggggggggg ú ú¨¨ ú ú ú úQQQQ««YYØ}ÈÈÈ n n n ï ï÷‡‡4400000000 ƒ ƒÞÞ²²``²² ²²²``cc  ######ÈÈuuuÐÌÌÌ̯¯¯ + +¯¯¯lƒÎJ!Z†vÁÁnnjjjjÁgÁÁQQööŸúM ò òMM§MM§Mb½f ¹¹ŽŽŽŽääääxÒ--€%xx££öööööö^^^^b;àŽŽ77??ÔÔ''}Ø}}¥ÿÿ¥R øRRêê<<<<<<ººhhdd¾¾ßß22ßߌŒˆã==5555ããã=B÷J•™???jÄÄÄÀÀÀ‡‡ââêêêê—ñùùªª!º%É$o#Á#Á%&v&v&v%ž%ž%ž"é Š ŠÝ(´´´°°VVRðJ¡Fôôé­SC444ÙÙÙ,,,,ÙÙªªªª®®,,Ñ,,,ªªªªªPýý,,ÑÑÙSS¦¦PPýý¦¦¦¦¦ ù ùGGõõK ñ ñ ñss Å ÅÉÉžžžžž Džžžžžžžžžž æ æ““ æ æ ¥ ¥RRRR ¥ ¥ N© N NRR ¥ÿ''ÔÔ Ð Ð~~É o Å ÅssGGGG ñ ñžž´´ Y Y   ° ° + + ° ° Ö Öƒƒ,,,,®®\\Ó/í.“«} ÀBBïï ë ë™™MMMM    M§Ï t""""Ï)¹¹       bb µ µbbggÁÁÁÁggÁÁUU¨¨ ú ú ú úQQ««««þþ#}ÈÈÈ n n n ï ï÷‡‡4400000000 ƒ ƒÞÞ²²``²²² ²²``    ########uuuÐÌÌÌ̯¯ +¯U¯¯¯]Î;•+ÁÁnnjjjjÁgÁÁQQööŸú§MM§M§§§§Mb½f ¹¹ŽŽŽŽääääxÒÒÒ%Ëxx££öööööö¹¹^^bbb;àŽŽ77ääÔÔ''}Ø}}¥ÿ¥ÿ­RRR<<<<<<ººhh¾¾¾¾ßß22ßߌŒˆããã5555ããã=B¬Zð™???jÄÄÄÀÀÀ‡‡ââêêêêñLùùPPP!º#! ! #Á%%%"é"é$C!ŽÕՃδZZZVVûûRðJ¡F™™ŽéCé444ÙÙÙ,,,,ÙÙªªªª®®,,Ñ,,,ªªªªªPýýÑÑÑÑ$SS¦¦PPýý¦¦¦¦¦ ù ùGGõõK ñ ñ ñss Å ÅÉÉžžžžž Džžžžžžžžžž æ æ““ æ æ N N©© ü ü© N ü ü ü ü N N ü ü~~~~'' Ì Å ÅssõõGG ñ ñžž´´´´ Y Y ° °]],,,,ƒƒ Ö Ö\U+Þ*ƒœ}uBB • • • •BB££ I I    MMxx Ë Ëxx Ë%        µ µbbbb µ µgg ¹½½jj½jjgg¨¨U ú¨¨ ú ú««««þ ¤QQ##ÈÈ Ä Äqqóó ™ó÷JJ‹‹‹‹‡‡‡‡00ÞÞ Ú Ú Ú4\\    \¶``²²````ÌÌÌÌ&Ì&&ÌÌÌ&#È##YY«YYQ«YYY³``vÑÉnÅÅnjjjj££££úú§MQQöQ§§úúbbbb¹¹  ŽŽ;àŽŽŽŽ!|)ÏxxxúúMMúúMMbbbbjäŠ777777}}}}ÐÐ}}RRRR©©ûûê<<ææææ¾¾º55ˆˆ5555ßß99ŒŒŒŒŒŒç癩VFFìììÀÀÀÀjÄÄÄ5555ææ““DŸñLTù "¾!c !c"¾$!å Š!8Ý(ÎÕÕe°°°ÿ¥RR÷÷JðððÝ888ŠŠÝÝÙÙ,,ÙÙÙ®Sªªª,,ÑÑ,,Ñ,SS¦¦ýýýýÑÑÑÑ wÑÑÑSS¦¦PPPª¦¦SSýýPPõ š š šGGGGžžžžGGGG šõ¢¢ùùKKêêêê æ æ N N©© ü ü© N ü ü ü ü N N ü ü~~~~'' Ì Å ÅssõõGG ñ ñžž´´´´ Y Y ° °]],,,,ƒƒ Ö Ö\ÌëEç2*BB • • • •BB££ I I    MMxx Ë Ëxx Ë%  ff    µ µbbbb µ µgg ¹½½jjrjgg¨¨U ú¨¨UU««QQþ ¤QQ##ÈÈ Ä Äqqóóó ™÷JJ‹‹00‡‡‡‡00ÞÞ Ú Ú Ú4\\    \¶``²²````ÌÌ&&&ÌÌÌÌÌ&}###YY«YY öQYYþYvÉnÅÅnnnjjjj££££úúM òQQöQ§§úúbbbb¹¹  èè;àŽŽŽŽ|ÖÞ„ÒxxxŸŸMMúúMMbbbbj䊑‘7777}}}}ÐÐ}}­­RR©©ûûê<<ææææ¾¾º55ˆˆ5555ßßßߌŒŒŒŒŒçç™ôFìFìììÀÀÀÀjÄÚÚ55ææ88êD—ñùŸL®®® ® !c0 ŠÝƒ(Î{{e°VVÿ¥÷÷÷÷JðBBðð8’88ŠŠÝÝÙÙ,,ÙÙÙ®Sªªª,,ÑÑ,,Ñ,SSýýWWÑÑÑÑÑ,ÑÑSS¦¦PP õP¦¦SSýýPPõ š š šGGGGžžžžGGGG šõ¢¢ù®Kêêêê æ æ N N ü ü ü ü ü ü ü ü N N ü ü üVØ~ Ð Ð'''' Å Åssõ š š šžž ñ ñ´´ Y Y´ Y Y Y ° °]],,,, ( ( Ö Ö®®Ì&&6Q!`”uBBB • • • • ö ö ö ö    MMxxx  Ë Ë Ë Ë  ¹¹    µ µbbbbjjjÅ'Ü‚rgg¨¨ úU¨¨¨¨þþQQ ¤ ¤ ¤ ¤Ðuqqóóó ™ ïJ÷ÞÞ00 Ú44 Ú00ÞÞ‡‡44¶\¶¶    ```º````Ì&.‰&&ÌyÔ&Ìuu##YYYYYYYY««nnnnÅÅnnnöö££úúMM££ööúúúŸbbbb f  ;;à;;;ŽèÞýXH-xxxŸŸŸŸúúúúbbbb½½½½ää‘‘ŠŠääÐÐÐÐ#}}}RR¥¥ûû©©ææææhhhh55ˆˆ5555Œ2„ߌç99ŒŒ9”ìVV¡ììì‘ÀÀjjÄÄÚÚ‡â88Þ8ê<——LLLùT¦[® ƒƒ(ÎÎÎÎs VûVR÷÷÷÷÷••BBå劊88ƒÝ††ÙÙÙS®S®ªªWW,ÑÑѦ¦S®ªªýý$$ÑÑÑ,Ñ wS®¦¦ýý ¢ ¢ ù ù¦¦ªªPPGG š šGGGGžžžžGGGG šõõOzz[Dê== æ æ N N ¡ ¡ ü ü ü ü ü ü©© ü ü üVØ~ Ð Ð'''' Å Åssõ š š šžž ñ ñ´´ Y Y´ Y Y Y ° °]],,,, ( ( Ö Ö®®qÌ&6&Ê0D$Ã…BBB • •ïï ö ö ö ö    MMxxx  Ë Ë Ë Ë  ¹¹    µ µbbbbjjÅÔû'# ÜÉÁÁ¨¨ úU¨¨¨¨þþQQ ¤ ¤ ¤ ¤uqqóóó ™J¤÷ÞÞ00 Ú44 Ú00ÞÞ‡‡44¶\¶¶    ```º````Ì&.‰&&Ìy&ÌÐÐ##YYYYYY³³««««nnnnÅÅnÉÉQQ££úúMM££ööúúúŸbbbb f  ;;à;;;Žè9%w.ð%w<ÒxxŸŸŸŸŸŸúúbbbbbb½½ää‘‘ŠŠääÐÐÐÐ#}}}RR¥¥ûû©©æææællÂÂhh55ˆˆ5555Œ2„ߌç99ŒŒ9”ìÀ uVììì‘nnÀÀjjÄÄÚÚ-‡ÞÞÞ8ê<———ññùTL¦¦T®ƒÎÎsÎÎÎs VûVR÷÷÷÷÷ððBBå劊88ƒÝ††ÙÙÙ®SS®ªªWW,ÑÑѦ¦S®ªªýýÑÑÑ,Ñ w ùS¦¦ýý ¢ ¢ ù ù¦¦PPPPGG š šGGGGžžžžGGGG šõõO[‰‰µDê== æ æ Ð Ð v v # #~~'/Ô Ð Ð Ð ÐRR ¥ÿ©©© N zÔ Ì'''ÔÔ~~ Ð Ð'''' ü ü ü ü N N ü ü ¥ ¥ ¥ ¥ øRÿÿ£ I ö ö ö ö ö ö        MM  úff#÷$a:莎Ž77ää,,, Ò Ö Ö Ö Ö®® T T®® T T ª ªXXXXXXÈÈÈÈÈÈÐ:*³2Ò)Xû¡¡F²² ® \\\\\\;;;;’’’’;; Ž Ž’ì? 娨 ú úQQQQ¨¨UUUU¨¨€€€€××) ϯ¯««þþnvn?š??ššššyyyy###}}##}}###   g¶¶¶¶¶¾¾c ¶¶ŽŽàà7777Ž333Šä‘‘QQQööööö££öQQQQQ#œ"¬f¹¹Á ¹¹µµµúúTúöQþþ§§TúMMúúšš íGžžøžÛÛˆ.„„„„„ß99AAç2ôôGGCžKKžžKKK¦¦¦øøK¦™^¸NBB;•ô?ä™ð•••rÌyrÌyyyÔØ2…ß‚‚ÕÕ++ÙÙ†+3Ù++~$·°UUU°°××ÏÏ&&ËË€€----ÒÒ||!!ËËËË ±^^  ¹¹µµµµ±±¹^eeii¼¼¼¼eePPýýPPPP ù ù¦¦PP ¢ý'' z z~~+ Ð ü ü ü ü©©©©+ Ð~~++~~ ¥ ¥R­^m^““ æ æ æ æ Ð Ð Ð Ð # #~~Ü/Ô Ð Ð Ð ÐRR ¥ÿ©©© N zÔ'''ÔÔ~~ Ð Ð'''' ü ü ü ü©© ü ü ¥ ¥ ¥ ¥ øRÿÿ£ I ö ö ö öQQ        MM  úff¹É~vÁ莎Ž77ää,,, Ò Ö Ö Ö Ö®® T T®® T ª ªXXXXXXÈÈÈÈÈÈu**"”„eû¡¡F²² ® \\\\\\``;;;;’’’’;; Ž Ž’ìš?¨¨ ú úQQ««¨¨UUUU€€€€××)„¯¯««YYnÁÉn?šššššššÔÔyy###}Ø}#}Ø}##   g¶¶¶¶¶¾¾¾c¶¶ŽŽàà7777莎Žä?F‘QQQööööö££QöQQQQnÈÈÁ ¹¹  ¹¹µúúTúQ«XXTúMMúúšš íGžžøžÛÛˆ.„„„„„ßß”««AŒôô¢¢žøKKøøKKK¦¦¦øø¦K?™™™BB•ð????•ðððrÌÄÌ'yyyÔØ2*…''ÕÕÑÑ~~+Ñ~$ÑÑ$É·]UûUU°°||ÏÏËËËË%%ÒÒÒÒxx||!!ËËËË ±^^  ¹¹µµµµ±±¹^ee¼¼ii¼¼¼¼eePPýýPPPP ù ù¦¦ªªWý''ÔÔ~~+ Ð ü ü ü ü©©©©+ Ð~~++~~ ¥ ¥R­^““ æ æ æ æ Ð Ð # # # #++ÔÔ'' Ð Ð Ð Ð ¥ ¥ ¥ ¥©© ü ü''ÔÔ z z''~~ Ð ÐÔÔÔÔ N N ü ü©© ü ü ¥ ¥ ¥ ¥ ¥ÿ­­QQþ££££þúúúú    úú¹¹ fnnŽŽ á áää77  ,,ƒƒƒƒ\ ª® TXXXXÈ nuÈ#]¸¨¡¡FF²²²² ® \\\\\\  ;; Žè???? Ž Žèè’ì??¨¨¨¨þ ¤þY¨¨UUU¯Ó-€€×ׄ„¯¯YYYYÁÁnnnnìììGššššÔÔ&&##Ð***ÐÐÐÐÐÐ   g¶¶¶¶¶c¾cc¶¶;;ŽŽ777‘è莎ä?F‘QQQööQöö££££QQQQffff¹¹¹¹ f  µMM§þX`\\§§§úúGGššññKKvooÛÛÛÛ„„„„222çIîçŒôô¢¢žøžøKKKKøøK¦øøøøä?‘‘BBBB???™••BByrryyyÌÌ*…**Í'‚'$~ÑÑ~$$$vÑÉo°°UU¨¨ÏÏ""yy-ÒÒÒ%%%%ÎÎÎÎ%ËËË    ¹  µµ^^^^meÀi¼¼¼¼¼¼eeªPPPýýPPSS¦¦ýýýý''++~~© N© NV ü©©+ Ð~~~~++ ¥ ¥ÿZ±±©©““ æ æ æ æ Ð Ð # # # # Ð Ð z z'' Ð Ð Ð Ð ¥ ¥ ¥ ¥©© ü ü'' z z z z''~~ Ð ÐÔÔÔÔ©© ü ü N N ü ü ¥ ¥ ¥ ¥ ¥ÿR`«þ££££þúúúú    úú¹¹f ¹¹ŽŽ á áää77  ,,ƒƒƒƒ\\ § ª® TXXXXÈ nuÈ#NóNó¡¡FF²² X X ® \\\\\\  ;; Žè????èèèè’ì??¨¨þ ¤ ¤þ¨¨UU¯UÓ-€€×ׄ„¯¯YYYYnnnnGGGìššššyy}}*ÐÐÐÐÐÐÐÐÐ   g¶¶¶c¾cc¶¶;;ŽŽ‘‘‘7ŽŽŽŽä?ììQQQööQQQ££££QQQQff  ¹¹¹¹ fffjMM§Xþ»ÊÆ\§§úúGGôôññññvooÛÛÛÛ„„„„22229ߌ2ôôGGCžžøKKKKžž¦Kžžžžä?‘‘èèBB???™••èèÄÌÌyyyÌÌÐ***rÍ'ÍÉ$ÑÑ$~ÉÉvÉoUUUU¨¨MMÏÏ||yyyy-ÒÒÒ%%%%ÎÎÎÎ%Ë%%    ¹^  µµbb^^^^meÀi¼¼¼¼¼¼eeªPPP ¢ ¢PPSS¦¦ýýýý'' Ð Ð~~© N N©V ü©©+ Ð~~~~++ÿÿZi V©©““ æ æ æ æ~~ Ð ÐÔ zÔÔ #~ Ð Ð'' z z ¥ ¥ ¥ ¥ ü ü ü ü'' Ì Ì Ð Ð Ð Ð++~ #'ÔÔ­RRR ü ü©© ü ü© Nÿÿ­\§MMMMU¯UúúúMMúúff¹¹7777ŽŽŽŽ Ò Ò,,ƒ ( Ö ÖXXXXXX ª ª®®®®®®® T À ÀÈÈÈ#÷ ï ïóóFF\\ ® ® X²\\\\;;;–????’’’’èèèèþþ«« ú úUU¨¨¨¨UU€€€€„)×1««UUU¯nnÁnnðKK–ššGGyyÔÔÔy&&}}ÐÐÐÐÐкº`º¶cccccc``ºº‘7‘‘;;èŽääää;;èè§MM££££úúMMúúMMbbbbbbbb½½jj¹¹¹úTTT\·Æ å"íÎ\«QQQôôôôžžññ ÁoÉÅÅÅÅ2222ˆ...„„„ß„ßßßøøžžžžñK¢GGGôô¢¢ôšG¢7‘‘‘;•è••••••BB½ÄÄuu###ÈuÐÐÐÅzÍÍ zrÍvv ÅkkþY¬QûûMM""""ÏÏÏu))))ÎÎÎÎ))ÎÎ|!Îεµbb^^  bbbb^^^iiii¼¼¼¼eeeeeeªPýýýýPPýýPPªªýýÔÔ z z''''RR ¥ÿRR ¥ÿ~~~~++++©^m¸ N©““ æ æ== # # Ð ÐÔ z z z~ # Ð Ð'' z z ¥ ¥ ¥ ¥ ü ü ü ü''''++…………Ø~'ÔÔ­RRR ü ü©© ü ü N©ÿÿ­RMMMMMM¯tdUúúMM      ¹¹ µ µ7777ŽŽŽŽ Ò Ò,, (ƒ Ö ÖXXXX²² ª ª®® T T®® ® À ÀÈÈ nÈ B ï ï ™ ™FF\\ ® ® X²\\\\;;;–?? å å’’’’èèèèþþ««UUUU¨¨¨¨UU€€€€„)|ׯ¯ +¯nnÁnn–ðððššGGyyÔÔÔy&&}}**ÐÐÐкº`º¶¾¾¾¾ccºººº7‘‘‘;;Žèääää;;èè§§§££££úúMMúúMMbbbbbbbbbbjj¹úTTT·{$õ-0v(WÖl«QQôôôôžžññ ÁoÉÅÅÅÅ2222ˆ...„„„ß„ßßßøøøøžžñK¢GGGôô¢¢ôšG¢‘777à;è••••••BB½ÄÄuuÈÈ#ÈuÐÐÐÅÅrr ÅrÅkkkYþ¬QûûMM""""u**Ï))))))ÎÎ))ÎÎ|!Îεµbb¹¹  bb^^^iiii¼¼eeeeeeªPýýýýPP ¢ ¢PPPPýýÔÔ z z''''RRÿ ¥RR ¥ÿ~~~~++++©^^©©““@@== Ð v Ð Ð'''' # # Ð Ð z z Ì Ì ¥ ¥ ¥ ¥ ü ü N N z zÔÔ+…•¤÷è… Ð''''RR ¥ ¥ ü ü©© ü ü ü üÿÿRRM ò    MM§\ +úMMMMMM    bb7777 á Ꭰ3     Ö Ö Ö ÖXX ª²²XX®®\\\®®®® À ï ïFFFF ® ®\\ ® ®  ² X² Xè Žèè’’ å å å å’’;;;;QQQQ¨¨¨UU¨¨UU€€€€„)|׳³]]¯¯nnÁÁnnððCGGšš&&.Ô&}}}}}}}}   gkkggºº‘‘??;;•;ääää;;Žè¯¯§««££úŸMMúúŸŸµµµµµµbb½½ÁÁn§\·Ö*_4…7:7:4…+ Ý»«¢¢ôôžžžžooooÅÅÅÅ„ßß„ˆ.ÛÛ22„„22ßßKñKKžøKKG¢ôšôô¢¢¢G¢ü7777;;èèè••••èèjÄnÈuuuu##kkÅÅkkoÉ$okkkk¬¬þ¤ûûû """|"|uu))))))||||)Î!!Îεµbb    bbb  ^^iÄÄi¼¼iieeýýýýýýPPPPPP ¢ýý ¢'ÔÔÔÔÔÔRRÿ ¥RRÿÿ++~~++++VVVV©@@@@——+ Ð Ð Ð''''~~ Ð Ð z z Ì Ì ¥ ¥ ¥ ¥ ü ü©©ÔÔÔÔ+:´+—,Eaà+''''RR ¥ ¥ ü ü©© ü ü ü üÿÿRRM ò    MM§§UúMMMMMM    bb7777 á á 3Ž     Ö Ö Ö ÖXX ª²²XX®®\¶¶¶  ®®u ï ïFFFF ® ®\\ ® ®  ² X X²è Žèè’’ å å å å 7 7;;;;««QQ¨¨¨UU¨¨¯¯€€€€„)×1³³]]¯¯nnnnððC¡¡ôô&&.ÔÛÛ&}}}}}}}}gggÂkkkkkkggºº‘‘??•••;ääää;;èC  \««þþTúMMúúúúµµµµbbbbÁÁn\·Æ&O3Ø7:7:7:7:4…(WÊ``üüôôøøžžÉÉooÅÅÅÅ„ßß„ãˆÛÛ22„„22ßßñ –ññžøKKG¢ôšôô¢¢¢GG¢7777;;èèè;;••èèjÄnÈuuuu##kkkkkkoÉkkkkþ¤ûûû ""Ç"|"uu))΃))||!!Ît!!ttµµbb    b½½½  ^^iÄÄi¼¼iieeýýýýýýPPPPPP ¢ýý ¢'ÔÔÔÔÔÔRR ¥ÿRR ¥ ¥++ØØ++++VV©©VV^@@@@——ÿ ¥ ¥ ¥ ¥ ¥ ¥ ¥RR ¥ ¥ ¥ ¥RRÔÔ'' Ð+~~ ü ü N©ÿi" 1ƒ0Ö=´Zÿÿÿÿ ü ü ü üÿ ¥RR z z'~~ Ð+ Ë Ë Ë Ë""||%%% Ë Ë%% Ë    bb µ µŽŽ á á á á 3Ž,,  ,,,,,,,,00ƒƒ Ö Ö Ö Ö (ƒƒÝ_ÉÙÙÉ_qqqq# n À n n Ä ÄqqÞÞ0000 ƒ ƒ Ú Ú4444 Ú Úgg½½j ¹n&&&€&&Ó-«««QþþþY«««U¯11„„„„××ðððKððððÉÉÉÉûVVVÿYRRÔÔ&.Ô&“í@@““ííoÂg½½jjÅjjjŽŽèèèèC—ùÚ€Ò-Ö|ÏÏÏÏ)t    ääää‘‘?™‡â—!0¡7f7f7f777¼/_›HHäÕ  $$ÉÉžžKKôšššÛÛˆˆˆˆÛÛ´´´´Å ssssssvvÉÉvvÉÉ  ssäääääää?‘‘ä?ì‘??••èèBÈÈuuuu##kkkkÁÁ;ððð?ší’Uûûûû     ¤¤Iï§§úúPP££xxxxËËxxàà3à;™NN™‘777iiiiÀÀmçççç:::: Î Î{{(({{PPPPPPPP©©RRRR Ð+~~'''' ¥ ¥ÿ ¥VV©©R­ZZ±±±±pppÂÂÿ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ø ø ¥ ¥ ¥ ¥RR z z Ð+~~ ü ü N©ÿ´q6ã´Zÿÿÿÿ ü ü ü üÿ ¥RR z z'~~ Ð+ Ë Ë Ë Ë""||%%% Ë% Ë Ë%    bb µ µŽŽ;; á á 3Ž,,  ,,,,,,‡‡‹‹ƒƒ Ö Ö Ö ÖƒÝƒÝºC,Ì,Ì!øo__ÌÌqqØ#u n nqqÞÞ0000 ƒ ƒ Ú Ú Ú Ú44 Ú Úgg½½jnn&&&€€€Ó-«««QþþþY«««U¯×ׄ„„„11KKKðððððn#ÉÉûVVVYÿRRÔÔÛ.Ô&8“@@ííííoÂg½½jjÅjjjèèèèèèCR¶-?+7 cêÚ-Ò|!ÏÏÏÏÏÏ    ääää‘‘?™-‡<¶0¡7f7f7f777¼/ º")†)†©/zz$$ÉÉžžKKôšššÛÛˆˆˆˆÛÛ´´´´Å ssssssÉÉvvÉÉ  ÍÍäääääää?‘‘ä?ì‘??••BBBBBnnÈÈkkkkÁÁoo––––?ší’MMûUûûû     IIIï§§úúPP££xxxx%%xxàà3;•^%2%2¡‘77iiiiÀÀmçççç:::: Î Î{{(({{PPPPPPPP©©RRRR Ð+~~'''' ¥ ¥ÿ ¥VV©©R­ZZffffÊÊÊpÂÂRR ¥ ¥ ¥ ¥ ¥ ¥ ø ø J ¥ ¥ ¥RR''~~~~ ü ü ü üR­´¼bZÿÿÿRR ü ü© NRRRR'' z z~ # Ð Ð Ë Ë Ë Ë""ÏÏ%% Ë Ë Ë Ë Ë Ë    bb  ŽèŽŽŽŽŽŽ,,ÚÚÚÚÚÚ,,‡á@š8ƒƒƒƒƒƒÝÝÝo'b5˜5˜'bo²²qquuu n n Ä ÄÞÞ00Þ ƒ ƒ ƒ‡‡ Ú Ú‡‡‡‡½½½½½½nn&&&€--€€YþQQ««þYYY««¯¯]1111„„ÞÞøøøøðð##ÉÉÍrrÍVVYÿ¬¬ÔÔÛ.ÔÔÔ““@@íí““¾¾¾¾jj½½èèŽèCCðÿ% 44'Õñ‡-Ò|!Ï)!!||¹^  µµ77Šä77??€ÚâL(‚4±6¸87¼7¼5*3$É2R3­#Šz ÉÉvvžžññGGššÛÛˆˆÛÛ..YYÅÅÅ  ÅssoÉÉÉÉÉ    ääääää‘‘ää‘‘ì‘ä?èBBBBBBBnnnnnnÈÈk½½ooÁÁ–;;;’’’’ûûûû  óóóóó󜜜œ¯TúúPP££%ËË%Òx%%33;;è÷'93h4Â-þ ì7‘Äi¼¼Àeçç”:::::(({{{{ Î ÎPPPP ¢ ¢PªRRRR++~~ÔÔÔÔ ¥ ¥RR üV©©ZZZ´m"uÐ4%%%ppRR ¥ ¥ ¥ ¥ ¥ ¥ ø ø J ¥ ¥ ¥RR''''~~~~ ü ü ü üR­ÿZ­ÿ ¥ ¥ ¥RR ü ü© NRRRR z z~ # Ð Ð Ë Ë Ë Ë"" t t Ë Ë Ë Ë Ë Ë Ë Ë    bbbb 3ŽŽŽŽŽŽŽ,,ÚÚÚÚÚÚ,,‡á_n¢8ƒƒƒƒƒÝÝÝ3((è²²qq À n n Ä ÄÞÞ00Þ ƒ ƒ ƒ‡‡ Ú Ú‡‡‡‡ ¹ ¹½½½½jj½½&&&€--€€Yþ««««Y³YY««¯¯]1111„„ÞÞøøøøKKÉÉ##ÍrrÍVVÿY¬¬..Û.‰..ííššííííoo¾¾¾¾Å޽èèŽèèè•¥)/-?&zñ‡-Ò|!)Ï!!||¹^  µµ77Šä77ää%€-âù'(2©6¸7¼5.C º›õ#o'~/z ÉÉžžññGGššÛÛˆˆÛÛ..´´  Å  ÅssÉ$ÉÉÉÉ    ääääää‘‘ää77‘7ä?èBèèBBBBnnnnnnk½½oogg–;;;’’88ûûûû  óóóóó󜜜œ¯TúúPP££%ËË%Òx%%33ààèa/X67w3h uì‘7Äi¼¼Àeçç:”::::(({{{{ Î ÎPPPP ¢ ¢Pª©©©©RRRR Ð Ð~~ÔÔÔÔ ¥ ¥RR üVZZ´}ß#¤ ®é4pp N© N NRR ¥ ¥ N N N©©© ü ü z z''~~++© N N N üV©©©©©© ø ø ¥ ¥ ü ü± ü ¥ ¥RR''''+ Ð # # Ë Ë Ë Ë""""xx Ë Ë Ë Ë Ë Ë _ _ _ _bbbb77ä Š Š Šä䃃000‹0 ÖÚÚÚ4G¢š‹ƒƒ00Ú4ÚÚ ¾   __qq Ä ÄÈÈÈ#ØØ#ȇ‡44‡‡ Ú Ú‹‹ÞÞ ƒ ƒ00gg½½½½jj½½€€ÓÓ))))¯¯UUYY««««««YY³Y„„„ÞˆˆˆˆøRøøOOOôÉÉvvvvvv]¬YYÛÛÛ‰‰ššššííííkƾ¾¾kkÁÁÁÁÁÁÁf;•èŽèèðJ@ªX£€%%ÏÏ||xxxx      ¹¹ŽŽŽŽŽŽ;;%%€5æª"*3,;%w²î55<—ÝÍ  ÉÉvññžžññññ„„ß߈...a´´ss zÉooÉ$Ù;+ssÅÅÉÉv77ää‘777ääää;•??‘ìBBBBnnÀÀÀÀnggÁÁéŽ;á88Ý8  MM¤¤Q÷÷÷IïBBBœ««££öP££!!tÎ%Ë%Ë77ää•¥#×02»*œ ìäŠii¼¼eeee‘‘‘‘””çç(((({{((ªPPP¦¦¦¦RRRR©©©©~~~~++~~©©©© ¥ÿÿÿ^^ÄÓˆH8Ö{ N©©©RR ¥ ¥ N N N©©© ü ü z z'ÜØ++© N N N üV©©©©©© ø ø ¥ ¥ ü ü ü ü ¥ ¥RR'''' Ð+~~ Ë Ë Ë Ë""""xx Ë Ë Ë Ë Ë Ë _ _ _ _ ½bb77ä Šäää䃃000‹0 ÖÚÚ ÚÝ8‹0ƒƒ00 ÚÚÚ  ¶¶  qq Ä ÄÈÈÈØ÷÷ØÈ‡‡44‡‡44‹‹ÞÞÞÞ00gg½½½½jj½½€€ÓÓ))))UUUUYY««««««YY³Y„„„ÞˆˆˆˆøøøOOôO##vvvvvv]]]¬YY6ÛÛÛÛÛ‰‰ššššííííÆk¾kkÁÁÁÁÁÁÁf•ð莎Ž;•Ö‹“ÞÚ€%%ÏÏ||xxxx      ^^ŽŽ33ŽŽ;;%%%Ú1‹@ªXH“„€€Ò-(Í  ÉÉvññžžññññ„„ß߈...a´´ssÅ ÉooÉÉ~;àÍÍ  ÉÉv77ää‘777ääää;•ää7‘èèBBÀÀÈn  ººggŽ4;áÝÝÝ8ûûMMII÷œœœIBœPP££Pö££!!ÎtË%%Ë77?Š;•NmF‘Šäii¼¼eeee‘‘‘‘””çç(((({{((ªPPP¦¦¦¦RRRR©©©©~~~~++~~©©©© ¥ÿÿÿ´´)Î!Æ ü ü ü üÿÿRR N N ü ü©© ü ü'''6B3++© N ü ¡ N©©© ü ü©© ¥ ¥RR N N N NRRRR''ÔÔ++~~ Ë Ëxx t t Ç"xx Ë Ë Ë Ë p Ë _ _  bb µ7777ää77 Ö Öƒƒ00ƒƒ,, ÚÝ݃ƒ Ö ÖƒƒÚÚ‡,\\\\__²Xqq Ä ÄÈÈu*””ØÈ‡‡444444Þ88Þ‹‹00 ¹ ¹gg½½½½½½½½½½½½ÓÓÓÓ××××UU«««YY««`1×Þ95555K¥øøôOOO#~##ÑÑ##   °¬YY‰‰ÛÛÛÛ66HHššõšíí¾¾kƾnnÁÁÁÁÁCC莎Žèè|Ö1Ö--Òx!!ÏÏxxxx        èŽŽŽŽŽ;;%%Ò-Ö1Þîî9Þ)€€Ò-ÍsssÉÉÉÉžžKKññžC„„22ÛÛˆˆ´´´´aass  É$+Ñ zz ÉÉÉÉŠŠ??77ŠŠŠŠŠä;;äää?èè••fÀÀÀÀ  ººººáá44ŠŠÝ8ûûUû¤IIïïIIïïPö££IIööÎÎÎtË%xx77™äà;F¡ô?‘‘ŠŠiiiieÀ‘‘ë‘çç:: Î Î{{(({{ ¢ ¢ýýSS¦¦ÿÿÿÿ©©©©~~~~ Ð Ð~~ ü ü ü üRRÿÿVV±±tÆÆll ü ü ü üÿÿRR N N ü ü©© ü ü'''3Ø Ð Ð N© ü ¡ ô N©© ü ü N N ¥ ¥RR N N©©RR­­ÔÔ++~~%%xxÏÏ|"xx Ë Ë Ë Ë Ë%¹¹  bb µ7777ää77 Ö Öƒƒ Ö Öƒƒ,, Úƒƒƒƒ Ö ÖƒƒÚÚ‡,\\\\²Xqq Ä ÄÈÈuuÐÐ#ȇ‡4444448“8Þ‹‹00 ¹ ¹gg½½½½½½½½½½--ÓÓ××××UU«««YY`Œ1„Þ5555K¥øøO©©©#~~~ÑÑ~~  e a´´‰‰ÛÛ6666HHõõOõHHs¾k¾n#vÁÁffèèèŽèèèè|ÖÖ|ÒÒÒx!!ÏÏxxxx        ŽèŽŽŽŽ;;%%xÒ|Ö„Þ9„))%%xÒÍsssÉÉÉÉžžKKññžCßß22ÛÛˆˆ´´´´aass  oÉvÅ z ÉÉÉÉŠŠää77ŠŠääŠäèè;;??ä?èè••ÀÀÀÀÀÀ  ºººº__††44ŠŠÝ8  ° +¤IIïïIIïïPö££££ööttÎtË%xx7ì?Š33†à7‘ääÜÜŠŠÄÄiieÀëëë‘çç::(({{(({{ýýýý®c[¦ÿÿÿÿ N N N N~~~~ Ð Ð~~ ü ü ü üRRÿÿVVVV­­­­¿llll''''~~~~ ü ü ¡ üRR ¥ÿ'''ÔÔ''RRR ø ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ N N ü ü''ÔÔ'ZZZÿÿÿ­RúúM§§§§ öQQ ö  úMM"""" Ë ËxxMMMMúúMM ª ªXXXXXX®®®®XXXX Ö Ö Ö Ö‡áÚ XX\\\\ ï ï ï ï ï ï÷÷÷÷RJJ÷÷NNóóóóFF’ 7 å å;;èèèè;;’’?ššš??ììì’nÁÁÁÁÁÁrrzKðKKKKzz''‚‚ÑÑ~~zÔ‚Üõõ¢¢ùùLLžžñññLLLõõ¢¢OšHHHHíí@@íHJ¥RC••èèjjj€€ÒÒÏÏ||§MŸúöö££ŸŸMMQöööxxxxËËxxää77‘ì™™ìì‘‘;;;;žžññGGôôÉÉvv$ÉÉÉvvvssÅÅGGGGGGGGCCžžññCCGGGGôô¢G55㈠       ff^¹bbj§§þþþþ£þ«þþþþËËËËIIIIIIœœÓÓ|"uIII¤III££ööPöIIööI£ööµÄbbbŠä777ÜŠŠiiii¼Û¼meeii¼¼iiÀeeeÄyÄi¿¿llhhhh====““““ ¥ ¥RRRRR­ÿÿÿÿÿÿ­­©©©VV''''~~~~ ü ü ¡ üRR ¥ÿ'' Ì' z z''RRR ø ¥ ¥ ¥ ¥ ¥ ¥ÿÿ©© ü ü''ÔÔ'6ÓÄ´ZZ­RúúM§·!Q öQ öú  MM"""" Ë ËxxMMMMúúMMXXXX²²®®®®XXXX Ö Ö Ö Öá<4ÚXX\\÷ B ï ï ï ï ï ï÷÷JJ÷¬NóóóóFF 7’??;;èèèè;;’’?ššš??ììì’nÁÁÁÁÁÁrrz¥KKKKKzz''‚‚ÑÑ~~Ô/7FO¢¢ùù¦¦ùùLLñLLLõõ¢¢õõHHHHíí@@íHJðC••èèj%%ÒÒ))||§MŸúöö££ŸŸ§§QöööxxxxËËxxää777‘??‘‘77;;ààžžññGGôôÉ~††~$ÉÉvvÑvÍÅÅGGGGGGGGžžžžññžžGGGGôô¢ü55㈠         ^¹bbj§§§§þþþþþX«XXþþËËËˤ¤IIIIœœyy"ÇuII¤þþþþ¤þþ££ööPö££PP£IööµbŠä777ÜŠŠiiii¼q¼mÀÀii¼¼iiÀeeeiii¿¿llhhhh====““““ ¥ ¥RRRRR­ÿÿÿÿÿÿRR© N N ü ü'''' Ð Ð~~ ü ü N N øRRR''Ô z''''RR ¥ ¥ ø ø ¥ ¥ ¥ ¥RRV ü ¡ ¡'ÔÔë" )d=­­­UúúUÆ#õ!\£ IQ öú  MM""""xx%%ú  MMúú§M_XXXX__\\\\XXX²0 Ö Ö Ö44‡,XX_®®J ï ï ï ï ï ï ï ï ïJJR¼ ¡FFóóFF’ìì’èè;;èè Žè????ìììì??ììÁÁÁnnÁÉÉrrzøøKKøø¥Kzzzz''‚‚~~++Ô‰>óOOO¦¦¦¦¦¦¦ùù¦¦¢¢¢HOõõõšõHH@@@OøC••CC½½½½xÒ€%||||§MMM£££þMM§§QöööËËËËxÒxxääääää??ääää;àààžžKKôôôô~ZÿŽ~vvvvv Å í íG¢ôôôôKñññññCžšôGGôô¢¢55ˆˆ      ¹¹ f^¹½½b½§§úúPPþþþX««XþPPqqËË÷÷IIœœ÷÷yÇÇuÏ÷÷¤³x!-Y`«££öPPP£þPöP›ööµµµµµµÜ7ŠŠŠŠ77ii¼¼iii ¸mÀÀii¼¼iiiiee¼¼¼¼llhhhhê ==@@““RRÿÿÿÿ­­ÿÿ­­RRRR ü ü ü ü ü ü'''' Ð Ð # # ü ü N N­¼b­''Ô z''''­­ÿÿRR ¥ ¥ ¥ ¥RR ü ¡ ¡ ¡ Ì'ÔÔë#ú-t&i­¼UúúU·Æþ£Q ö  úMM""""xx%%ú  MMúú§º_²²XX ª ªXX² ‹0 Ö ÖÚÚ‡,XX ª®® ïJ ï ï ï ïJJ ï ïJJRV¡FFóóFF’ 7ì’èè;;èè Žè????ìììì??ììÁnnÁnnrrzøøKKøø¥Kzzzz''‚‚ØØ††‰‰ä䪪ªª[SS¦[ýýý¢ªOOOõšHHšššõøø••CCjj½r½½xÒÚ€||||§MMM£££þMM§§QöööËËËËxÒxxŠŠääää??ääää;àààžžKKšššOè-3§/˜RÙv ÅssGGG¢ôôôôKñññññCžôšGGôô¢¢55ãã    ff¹¹ f^¹bbb½§§úú««þþ£þPPþ£PPqqËË÷÷IIœœœœyÇÇuÏ÷÷þ!-05z2Å&—«þþöPPP£þPöööööµµµµµµÜ7ŠŠŠŠÜܼ¼iiiÀÀii¼¼iiee¼¼¼¼hhhhê == æ æ““RRÿÿÿÿ­­ÿÿRRRRRR ü ü ü ü ü ü Ð Ð Ð Ð z z'' ü ü©© m^ÔÔ z z~~++VV©© ü ü ü ü ø øRR ¥ ¥ ¥ ¥ Ì Ì z z Ð+Ø3u…"^­­QQ£þX³Xþ§MMMMMMM""""ÏÏ|| ö ö££M§\Æ3~ÂX ª ª ª ª\\ ¾8ƒ Ö Ö,,,,XX_óóFF ï ï ï ï ïJ¡¡¡FFF ™ ™¤¤¡¡¡¡FFFFè Ž;–’’’’? å å åèè––––èCCCCvÑ+vÉnnnÅÅrrrÅøøø¡ü¡¡vvvÑ'‚Ô/3ØØ3‰ä‰‰®®SS[[[®Sª_[®®ùùSSOõõšùžññû¡¡FC••½jj½½ÒÒÒÒÒx%€§MM§§Múúúúúú££££ËËËË!!!!77ääää‘ì莎Ž;;莚ôGGGG¢¢;'y1 .ëÿ+ÉÉÅÅsôôGGñññKôšGGññøøGGšôñññK9”ŒŒµµµµ  ^¹bb¹ff£þPP§§úú§§§§§§§Äqquuuóóóóó˜óó""ËqËËI¤a+T7Ù7Ù6~(õ¾T§§þ£I££þöö£££I¹¹ ±^^^^Ü7ÜÜŠŠŠŠiiieeeeeeÀÀ¼¼eeee¼¼¼¼ ¸ee¿¿lll—=êê““““RRRRVVRRRRRRÿÿR ø ¥ ¥ ü ü Ð Ð Ð Ð z z'' ü ü©©V±^ÔÔÔÔ~~++VV©© ü ü ü ü ø øRR ¥ ¥ ¥ ¥ Ì Ì z z Ð+~ر ^­­­­QQ£þX³Xþ§MMMMMMM""""ÏÏ"" ö ö££M§%O/,Ì;g ª ª\\  ƒƒ00,,,,²²_óó¡¡ ï ï ï ï ïJ¡¡¡FFF ™ ™JJ¡¡¡¡FF¡¡è Ž;–’’’’? å??èè––––èCCCC†ÿ"´•#ÉnnjjrrrÅøøøü¡¡¡vvvÑ'‚/ÔØ3Ø3‰äää®®®®[[[¶¶¶c¹__nk[®®SSSSªOšõùžLL û¡FC••½jj--ÒÒÒx%€§MM§§Múúúúúú££þþ%%%%!!!!77ääää‘ì莎Ž;;莚ôGGGG¢¢ÑðRR;ÑÉÉÅÅsššGGñññKôšGGññžžGGšôñññK9”ŒŒµµµµ  ^¹bb¹ffþX««§§úú§§§§§§§ÄqqÀuuóóóóó˜óó""ËqËËI¤$3É6~5$'›¾TLL£I£II£ööþþ£I¹¹f ^^^^ ‚ÜÜÜŠŠŠŠiiieeeeÀÀÀÀ¼¼eeee¼¼¼¼ ¸ee¿¿lll—=êêîî““RRRR©©VVRRRRRRÿÿR ø ¥ ¥ ü ü Ð Ð Ð Ð z z'' ü ü©©©©©©''ÔÔ~~ #~V ü ü ü©© N NRRRR ¥ ¥ ¥ ¥ z z''~Ø++©ÿÿ­­££Q«ÂÒUúúúMMMM"""""""" ö ö££§Æ,4>2ã º ª ªX²®®\ƒƒ Ö ÖÚÚÚÚ®®®®XXóóóó ï ï ï ïóóFF ™ ™FFóóóóFFóóè Ž;–’’ å å å å??èèCè––––èCðKB.52E&~ÉnnÅÅÅÅK¥¥¥üüü¡ÑÑÑ+ÔÔ‚‚†à7‘ì‘c¶¶¶¶kgggÁŶ[¶[ªOHHžžLLûûôôJð•ðÅÅrÅŽ½ÒÒÒ-ÒÒ%%úúúúúúúTMMMM££Q«xÒËËtt!!ää77ää7ìèŽ;àà;;àGGGGôôOôvÑ++$$ÅÅÅÅššššññžžôšššñKžžššGGñKKK2ç9ßµµb½f   bbb f¹¹P«§úúúúT¯§§§§qqqqÇÇÇÇ   FóóóM"ÇuuËËyy÷÷Q»"1'›$9e§§LööPöööIIPP££  ^^^^^^////ÜÜÜܼieeeeeeii¼¼ee eÀÀiiiieeeellÆÆDDDê@@““RRRR©©©©RRRRÿÿRRÿÿ ¥ ¥©© Ð Ð Ð Ð z z'' ü ü©©©©©©''ÔÔ~~ #~V ü ü ü©© N NRRRR ¥ ¥ ¥ ¥ z z''~Ø++©©©ÿÿ­­££Q«Ò'Ú`¯UUUMMMM"""""""" ö ö££M§\Ö%Z&µ3ºX²®®\ƒƒ Ö ÖÚÚÚÚ®®®®XXóóóó ï ï ï ïóóFF ™ ™FFóóóóFFóóè Ž;–ìì å å å å??èèCè––––èCðK3"&"~Énnr½ÅÅÅÅK¥¥¥üüü¡ÑÑÑ+ÔÔ‚‚†à‘ìFìccc½kkkkÅkÁÁÁgŶ[¶¶[[[ªO¢¢žžLL¡¡ôôJðð•jjrÅÅÒÒÒ---€€úúúúúúŸúMMMM££öQÒxËËÏÏ!!ää77ää Ü‘èŽ;àà;;àGGGGôôôšvvvÉÉÅÅÅÅššššññžžôšôôñKžžôôGGñKKKŒŒ9ßµµb½f ffbbb f¹¹PP«§LúúúúT¯§§§§qqqqÇÇÇÇFF FóóMóÇmÏËËÓˆ¬÷QQ· +U§§LööPöööIIöö££  ^^^^^^ŠŠŠŠÜÜÜܼieeeeeeii¼¼ÀÀeÀÀÀiiiieeeellÆÆùùŸD@@““RRRR©©©©RRRRÿÿRRÿÿ ¥ ¥©©Ô z zÔ+ Ð~~Ô z zÔ++~~ÔÔÔÔ Ð Ð~~'' z z Ð Ð~~ ¥ ¥ ¥ ¥ ü ü N N ¥ ¥ÿÿÿÿRR zÔÔÔÔÔ%%€Ú=§—ˆÞތ׀%xx öQ ö ö    MMÏÏ""ÏÏ׌ùžé4‡‡‡‡®® T®XX  ,,,,ÚÚ®®®®\\®®uuÈÈqqqqFF ™ ™ ï ïÈÈÈÈqÌqqè Ž;;èèè Žggèè––’’ššv+Ø~rrrrÅÅÉÉÑÑzzzzÔzÍ''‚//ÜÜÜ‘ììììkÅkÅrrGGšš Kðéé ¹_²WWý¦¦SùLLÌrvnnèè••••ððTT§§««««§§§§úúúú££££QQöö!!ÏÏ%%ËËb½jjnnŽ3ŽŽ‘‘77vÉÉvv  ssooÅÅsoooÉssÅÅCžKKôôGGCžžCñKKKˆˆ5^^  µµjàà;;ääääúú§§PPöö!|)ƒÒx%%œœœœ÷œœœïïIïïïIïFFóóœ÷#âx³÷÷¤þY¤«P££úúúŸŸEEŸööPP¹^^^^^^^ZZ^^^^””””‘‘‘‘¼¼¼¼”ïBç‘ë‘‘eÀ¼¼¼¼¿¿lÂÂpñ–,¿¿''ÔÔ++++''''ØØ~~RRÿ ¥ÿÿÔ z zÔ+ Ð~~ zÔ zÔ++~~ÔÔ//++~~'' z z Ð Ð~~ÿÿ ¥ ¥ ü ü©© ¥ ¥ÿÿ ¥ ¥RR zÔÔÔÔÔ''%%%€ˆˆˆ-ÞHöŒ€%xx öQ ö ö    MMÏÏ""ÏÏ||444‡‡,,®® T®XX  ,,,,ÚÚ®®®®\\®®uuÈÈqqqqFF ™ ™ B BJJÈÈÈÈ Ä Ä qqq Ä Äè Ž;;èèè Žggèè––ììššnÉrrrrÅÅ##ÑÑzzzzÔz'‚'‚‰‰777ìFFì¡kÅÅ r Í"' Í ¡ ¡ôô!¥ KCCÁ¹ ²Wý¦[[[SùLLÌrvÈÈCC••••••TT§§QQQQ§§§§úúúú££££öööö!!ÏÏ%%%%b½jjØ#nèŽŽŽ‘‘77vÉÉvv  ssooÅÅsoooÉssÅÅCžKKôôGGCžžCñKKKˆˆ5Û^^  µµjààààää??úúLLöööö!|Î)Òx%%œœœœ÷œœœIIIïïïIïFFóó÷Q#â2Å1k"‡¬÷¤³xÃ`P££úúúŸŸEEŸöööö^¹^^^^^^ZZ^^^^””””‘‘‘‘¼¼¼¼ ¸ ¸:”œBë‘‘‘eÀ¼¼¼¼¿¿lÂÂp4(,/¦wÔÔ++++''~~~~RRÿ ¥ÿÿ z z' Ð Ð~~''ÔÔ Ð+ Ð+Üä>Ø+ ÐÔÔ'' Ð Ð~~RR ø ø N©VVR ø ¥ ¥ ¥ ¥ ¥ ¥ÔÔÔ zÔÔxÓ%%%%€€Þ££9€%%% ö ö I I    MM""""""Ï)ÚÚ‡‡ÚÚ,,®® ª ªXX,, Ò,,,ÚÚ\\\\\\®®#ÈÈÈqqFF ™ ™ B B¤ÿÐuÈÈ Ä Äqqqq ÄqÌyè Ž;; Žèèè ¹ ¹gg––èèìì??nnÁÁÅÅrrrÅzÑÑÑvÍÍÍ'''Ô///Ü7‘‘‘FF¡¡ûÅÅÅ Í$Ü#‚#‚"©!O"©"©$Z# ø øÁÁ¹_[®®¦žžÌÌÈÈÈÈððððCèCèTTTúQ««Q§§TúúúúúöQ££öö££ÏÏ||%€%%jà ¤…ÁŽŽŽŽääääÉÉÉÉ  ssoooo zÉÉÅÅssññKK¢GG íCCžžññžžÛÛˆˆ^^  µµµààà;‘ìôô¯TúúööI£!|ÎÎxxxxBBœœIIïïIïBBBBïïFF˜ó÷#â.¶,®pQ÷÷&—x³þPöŸ¯TúúŸLLööII^^^^±±±±ZZ^^^^””””‘‘‘‘¼¼¼¼ ¸ ¸ ¸””ïï>>>>¼¼¼¼¿¿¿¿p¦ á¿¿¿¿ÔÔÔÔ++++//ÔÔ~~~~ ¥ ¥RRÿÿ z z'++~~'' z z Ð++…Ü6N!ÇR3…+ÔÔ'' Ð Ð~~RRRR N©VVR ø ¥ ¥ ¥ ¥ ¥ ¥ÔÔÔ z''ÔÔÓx%%%%%%)9“Þ€% Ë Ë ö ö I I    MM""||"" tÏÚÚ,,ÚÚ,,®® ª ªXX,, Ò,,,ÚÚ\\\\\\®®#ÈÈÈÌÌFF ™ ™Y´ÐuÈÈqqqq ÄqÌÔyè Ž;; Žèèè ¹ ¹gg––èè’’??nnÁÁÅÅrrrÅzÑÑÑ+'''Í''Ô/‰‰Ü7‘‘‘FF¡¡û !z#‚$Ü$Ü$Ü$"©$$'%µ#­#­!Ñ!Ñn¹¶[[ùù''ÈÈnnððððCCèTTTúQ««Q§§TúúúúúöQ££öö££ÏÏ||€Ú€€jjjjvvfŽŽŽŽääääÉÉÉÉ  ssÉÉoo zÉÉÅÅssññKKG íG íCCžžññžžÛÛˆˆ^^  µµµààà;ì°!"#׃ úúPP£I!|ÎÎxxxxBBœœïïïïIïBBBBïïëë˜óœ÷YÃp÷œœQ³³X£PöŸ¯¯TúŸLLööII^^±±±±ZZ^^^^””””‘‘‘‘¼¼¼¼ ¸ ¸ ¸””””˜˜>>¼¼¼¼¿¿¿¿pwÒw¿¿¿¿ÔÔÔÔ++++‰‰ÔÔ # #~~ ¥ ¥ ø ø ¥ ¥ z z''~~++Ô z z z~Ø………à¤i÷3…+'' # # РЩ© ü ü©© ü üR ø ¥ ¥ N N ü ü z z''ÔÔÓxxx||ÏÏ%Ú-ˆ-xxxMM  ú££££ Ë%%% t tÏÏÚÚ,,00ƒƒ\\®®ƒƒ Ö Ö  ‡‡XX\\®®ÈÈqÌÌÌóóó󡡨¨qquuÈ nÈÈu…ß*’ 7 å åèèèè½½½½;;––????nnnnÁÁÉÉÅz~~†•3~ÑÑØØ+†‰äää‘‘FF¥ð÷R v#+#Ø%3%Š&ä'‘'‘&b&b'½'½)n(& $±#+#+!Ñ vŶ__¹Wýý¢#}ÐvnnF¡FFC••««XþTTTúúT§§££QQ££ööMMúúÏÏÏÏÖÖ„îzj½½nŽŽŽŽ;;••$ÉÉosÍssoÉÉÉÉos  vÉÉz ssššôôññññññžžžžžž2222µµµµbbbàà;•N%21`4*[Âþ£úúLL!||!!|ÎÎBBïïFFFFBë똘ëëF œœ÷Q¬÷œœIIIIPöPö£X«PPöIIúŸòò^±±µµ±±^^ë‘‘‘ë‘ ã>¼¼iiëë>>””çç ¸eeeeee¿¿¿¿¿pppphh~~~~ÔÔ'à…~~ Ð+~~©© N N ü ü z z''~~ Ð Ð zÔ z z #~+++…à:3+ Ð'''' # # Ð Ð N NVV©© ü üR ø ¥ ¥ N N ü ü z z''ÔÔÓxxx""ÏÏ%%Ó-ÓÓxxMM  ú££££ Ë%%%ÏÏÏÏÚÚ,,00ƒƒ\\®®ƒƒ00ÚÚ‡‡XX®®ÈÈqÌÌÌóó ™N¡¡óóqqÈ nÈÈuÐÐÐì’??èèèèjjjj½½½½––––????nnnnÁÁÉÉÅz~~+;3~++ØØ+†‰äää‘‘FF¥¥R ¬ v#+%3&&ä(?(ì+¡)))))n((À'f#+#+#+!Ñ kk__¹WýýW#ÈÐvnnF¡FFC••««Xþ¯¯¯TTúMM££QQ££QQMMúúÏÏÏÏ||)Þbb¹¹¹è莎;ð¥ZŽ~$ÉsÍssoÉoo$És  vvvÉÉ Åssššôôññññññžžžžžž2222µµµµbbbàà;•©)A6Ê6Ê/Åwþ£úúLL!|!Ç!|ÎÎBBïïFFëëïIœBëë>>ëëF ÷÷÷œœœBBïïïïöPPö££PöPöIIúŸòò^±±µµ±±^^ë‘‘‘ë‘ ã>¼¼ii‘‘>>::çç ¸eeeeee¿¿¿¿¿hh~~~~ÔÔ'+ Ð~~ Ð+ØØ©©©© ü ü'' z z Ð Ð Ð Ð z z''++++~Ø…:3Ø~'' z z Ð Ð # # ü ü üVVVV ü ¥ ¥ ¥ ¥ N N ü ü' zÔÔ/Ü6€%%%ÏÏÏÏxÓ€€%%%%úúMM££££%%xxÏ)|",,ÚÚ00ƒƒ®®®®®®®®0000,,4ÚXX®®®®ÈÈÌÌ¡ûóóóó¡¡ÌÌÈ nÈÈÈÈÈÈÈÈ????;;;;jj½jj½½CC––’’??nnnnnnÉÉnÉÉÉrrÍÍÑÑÑÑÑ+++~ØØ~Ü7ääììF¡!Z!Z"#a#+$†%à';(?*ô*ô,N+)Ä+Ì+Ì*È((À(À';%à#Ø"~!zÅÅ ²_WýýW+Ð##vFFFìC••«³ ¾d\§§§MQQ££QQQQMMúúÏÏÏÏ!|ÏϽ½bbf   ŽŽ;;C#.)ò&¥+vÍsssoÉÉÉ$É ÅÅ $ÉÉÉssÅÅGGGGññññññCCžžžž22„ßµµbµµàà;;FÀ*œ-Q$ñh«P§LLL!!!ÇÎÎttBBïïëë>>Bœïïëë>>ëF˜ó÷÷IïBBïïïïïþ£öP££££ö›ŸŸòò^^^^µµµZ^±± ­ZZë‘‘‘ëë‘‘ii¼¼eeee‘‘‘‘ççççeÀee ¸ ¸¿¿¿¿¿¿hhhh~~~~ÔÔ'~~~~++~~ ü ü©©©©'' z z Ð Ð Ð Ð z z''++++~Ø:ïØ~'' z z Ð Ð # # ü ü üVVVV ü ¥ ¥ ¥ ¥ N N ü ü' zÔÔ/Ü6€%%%ÏÏÏÏ x%%%%%%úú§§££££%%xx)Ï|",,ÚÚ00ƒƒ®®®®®®  0000,,Ú4XX®®®®ÈÈÌÌûVNNóó¡¡ÌÌ#ÈÈÈ n nÈÈÈÈ????;;;;jj½jjCC––ìì??nnnnnnÉÉnÉÉÉrrÍÍvvÑÑÑ+ÑÑØ33ØÜ7>>FFF¡!Z!Z"#a%à';)ð+J,N,N-©//.-Ô/Ü-',#,#+u+u(•';%3!#"Õ ÅgÁ²WýW+Ð##vFFFìC••«"–%¢!’l\§QQ££QQQQMMúúÏÏÏÏ|!ÏϽ½bb f  ŽŽ;;ø#Û3l7{6\*.;ÑÍsssoÉ~ÉÉo ÅÅ $ÉÉÉssÅÅGGGGññññññCCžžžž22„ßµµbµµààààìF©^h³Pö§LLL!!!ÇÎÎttBBïïëë>>œBïïFF>>ëF˜óœœIïBBïïïïï£IöP££££ö›ŸŸLL^^^^µµµZ ©±± ­ZZë‘‘‘ëëëëii¼¼eeee‘‘‘‘ççççeÀee¿¿¿¿hh » »hh~~~~ÔÔ'~~~~++~~ ü ü©©©©]]]  ° ° ° °´´ˆãò\«AŒŒ¿¿ 9 9““““““hhhhêê=—òLùùnÁfbb    ½½bb 3Ž;;ŽŽŽŽ;;Žèôäää    bbbbŽè–;èCð–)ÏÏÏ"" tÏQQQ öMMúúaaiiÓÃÀeeeùù¦¦¦K ñKKKKK¢¢¢¢llll›››AEEòò± ±±^^^^^^^±±  mmmÇuuÏ&&ÁÁgÁÁ#~üü©^ f!À!À$u&(»*Ã-x.Ò.Ò0Ú0Ú112‹1Þ1Þ0-.Ò-x-x*A(æ&ß$*"x!¼662}uз +°ûûQQQ÷Q÷œ÷8í$~3a5¿- µ–Ž44400ƒÝïïJïïïïïFF˜˜BBBBÀmÈÄÄÄÄÄß(w7[8µ89.¿Å¦KKKÉÉoÉ  ÅÅ]]° +»a]] + +ññžžGGššžžCCññžžññžždddd  ººhhººkÆÆ¾¾ººæ@ææ“““8vnnGGGGšôGGG¢OOOô¢GžžKKKKžCCCCCððððððCCððCžššíííííí gÁkkkkíí??ððððššíí–– éC––––???šííííCCCC ö öQQþ£££xx Ë%ÏÏ||%%xx"""" tÏÏÏxx%%ƒƒ0000]]]  ° ° U U Y Yˆã˜MœçŒŒ¿¿ 9 9 9 9““““hhhh —òÆ ‚ÍÉÁfbb    bbbb 3Ž á áŽŽŽŽ á áŽè?äää    bbbbŽè;–ø¼j¥)ÏÏÏ"" tÏQQQ öMMúúaaiiÃË€â—âÓÀeeùù¦¦¦KK¦KKKK¢¢¢¢llll›››AEEòò f  ^^^^¹^^^    mmmÇuuuuÏ&&xxgggÁÁ#~üü¹ f!À#%Ð'a*,.Ò.Ò1‡333æ5@4“4“2â1‡0--x,ö+›)”&ß%-#Ó!Ë qëëØ*з]°U¨¨ûûQQQ÷Q÷÷Q’G'3674e ÅñŽ444ÖÖƒÝïïïJïïïïFF˜˜BBBBÀmÄiiÄÄÄÄ* X/<66Þ*°Å¦KKKÉÉoÉ  ÅÅ]]° +a]]°°ññžžGGôôžžžžññCCññžždddd  ``hhººk¾¾kk¾¾ººæ@ææ“““8vnnGGGGšôGGG¢ôôôO¢üøøKKððžCCCCCðð––––CCððCžššíííííí gÁkkkkíí??––––??íí––C é––––???šíííí é é é éQQ ö ö£ I££xx Ë%ÏÏ"×€€xx"""" tÏÏÏxx Ë Ëƒƒ0000 + ° ° ° ° °   Y´ˆãã=Œ2ßß d d¿¿¿¿“ 9 9 9““““ » » » » d d¿¿==DTÍ. 4#1n'Ã…n½bbb    µ µbbŽŽ á áŽŽŽŽŽŽ á á Šää Š¹¹¹¹bbbb;;èÄ-,U„Ï""ÏÏÏÏQQ ö öúúMMaaiq€E(*Î&¾ê"me KKSùKKùùùùK¦¢ H¢¢Æl ¿HH›A———ò  ¹^^^  ^^^^^^  mmmÇuuuÇÇÇÇÓÓ&&Áv#~üü¹"n#È%#)2)h,-x0-0Ú34ê6D5í5í5í5í4ê31‡.Ò.P*A*A'Œ%Û%Û#Ó!˜>Û…*}}·]UUUû÷QQQ¤J÷Qåšf):,ó&/K<ᇇ‡ÖÖ00ïïïïëëBBBBmqqÄ"2Q.5„-eÌS¦KKKÉÉoossss]]° +]]° +žžKKOOôôKKžžññññCCññ dº`ºººdd¾¾º8“““““ææÉÉvôôôšššššššGGGü^È­øžððCCCžžCCžCCCCCCCCCCššš?íí?šÁ ½ ½íí??––––íííí––––C é––ííííííííC é––££££ ö ö££xxxx""Ï„â-% Ë""""ÏÏ t txx Ë%ƒƒ Ö Ö00 + ° ° ° ° °   Y´ãˆˆã2Œßß d d¿¿¿¿“ 9 9 9““““ » » » » d d¿¿——Ÿ®(¡6*82823ò ÿ#½bbb    µ µbbŽŽ á áŽŽŽŽŽŽ á á Šää Š¹¹¹¹bbbb;;èÄ-,U„Ï""ÏÏÏÏQQQQúúMMaaiq€"¯1’6ü2í%d1Çe ¦¦SùKKùùùùK¦ý¢¢¢Æltîî›A———ò  ^^^±±^^^^^^  mmmÇuuuÇÇÇÇxx&&¹nÁv#~üü!"n%#&})h,.Ò1‡254ê4ê6D5í5í5í5í6D4ê2â0-.P,ö+›+›(%Û%-"x˜>Û…*}}·]°°Uû÷QQQJ¤Q÷‹‹í¢¦<áᇇ‡0000ïïïïëëBBBBmÄ"}A-45„2ÏÜ­¦KKKÉÉÉÉssss]]° +]]° +øøK^©ôôKKžžññññCCññ d¶kº`ºººººddddº`8“““““ææÉÉvšššôššššššGGGü#-a.e Ü­žððCCCžžCCžCCCCCCCCCCššš?íí?šÁ ½ ½íí??––––íííí––––C é––íí ’ ’ííííC é––££££QQ££xxxx""Ï„â-% Ë""""ÏÏÏÏxx Ë%ƒƒ Ö Ö Ö Ö´ Y ] ° ° ° ° ]ßß222222 » » » » » æ æ æ æ““““ d¿hhhh=—L¶)ü6*8293E RÉ µ µ µ f¹ _  ¹ _ Šä Š ŠŽŽ á á77 Š Š á á; á½bbb¹¹¹¹ŽŽ–ðR¼j×|ÏÏÏÏÏÏúú§M££££¸¸mÇ1%º6O7©3š#\„u¸¢¢¢¢KKKK¢¢¢¢SùSùÆÆppÊpAAîH››îîµµ±±^^± ¹¹  ¹^mÇÀÀÇÇÇÇuÏ"|*ϽÅÅn##Ø­!j"Ä"Ä(.+/)2‹2‹34ê5—5—6ñ6ñ5—6ñ5í5í3æ11/T-ú-ú+E(9%„&1#| ó˜>‰ÛÔÔ·· +°°°MQQ¤¤÷÷÷÷44Žé’8ÝÝÝÝÝ݃ƒ00˜˜FFœœBBFF˜˜BB••ÀÀÀÀmmÄÈ"2"`*Y'¤#©ôôOôÅ ssÉÉ´´´´´´Y´]]]] +°]]¢¢¢W¢GGG¢¢žžžžžCññ  dd¶  ººddºººº¶88““8888ÅÅrrnÉ#ÉžCððííôôôšššžS Ü/¿0l!‰SžGGGíššššCCððššGGð–CCCžCC––CCkkÅk––––?? å????šíííGCC––??í ’ éC––í ’??úúúúúúMMxx Ë%xxxxÓÓ%%Ï tÏÏ""ÏÏ%%xÓ,,,, Ö Ö´ Y ] + + ° ° ]ßß222222 » » » » » » » æ æ æ æ““““ d¿hhhh=—ò§Í/f4#2È)ËBÉ µ µ µ f¹ _  ¹ _ Šä Š ŠŽŽ á á77 Š Š á á á;½bbb¹¹¹¹ŽŽ;–CCðð×|ÏÏÏÏÏÏúú§M££££¸¸¸¸mÇ×ö+{/Š* L„um¢¢¢¢KKKK¢¢¢¢S®SùÆÆpAAîH››HHZZ±±^^± ¹¹ff¹^mÇÇÇÇÇuÏ"|*ϽÅÅÉÉ#Øb ½bb!j(.%y(.+,t/Ö2‹34ê5—5—5—5—6ñ5—5í5í3æ110¯/T,Ÿ)ê(9(9'Œ$ט ó˜ãÛÔÔ··°UUU¨¨QQ¤¤÷÷÷÷444Ž8݃ƒÝÝÝ݃ƒ00óóFFœœBBFF˜˜BB••ÀÀÀÀmmÄÈ""2f©OôôôšÅ ssÉÉ´´´´´´Y´]]]]° +]]GG¢¢©¢GGG¢¢žžžžžCññ  ººdd¶  ººddººººk88““8888ÅÅn#ÉžCððííššôšššCøÌÔSžGGGíššššCCððššGGð–CCCžCC––CCkk Årr––––???š???šíííGCC––ššGí éC––í ’??    UUúúMMxx Ë%ÓÓxxxx%%)Ï t t""ÏÏ Ë Ë x,,,,00   ° ° ° ° ° °22 … …2222hhhh » » æ æ æ æ æ æ æ æ¿¿ » »hh=——ò®Í#7#7BØn¹bb    ¹¹  _ _ää77ŽŽ;;77 Š ŠŽŽ á;½½bb¹¹¹¹ŽŽ;;––èè|||||"ÏÏúúúúQQ££  ¸¸À"ŒL §EÛ"ÇmO õ¢¢ùùKKOOOOSSùùÆÆÃÃÛ›››îH››ZZZZ^^^^¹ÀÀnn^mmmÇmmÇmÇÇÇ"„„*ϽÉ#Ñ+bbb ½$Ì&'&Ô)‰,t,t-Î1Þ36D4ê6D6D6D6D6D5í4“3æ2‹1\0+ò'â)”,I*A&1!  E>ã6Ûee°°UU¨¨ÿÿQQ¤¤JJ44ŽŽ‹000ÝÝ‹0ƒƒÝÝóó˜˜ïïïïFF˜˜ïïBBmmmmmmÈÈÄÄÄÄÈ"©O¢¢GGôšssssaY´´´°°]] +e·]GGôôôôGGGGGGžžžžññžž    dddd  ººdd¾¾ºººº¾d“8ææ8888ÅÅÅÅÁððžCííGGššGGCžø­¥øžššGGššššCCððííššð–CCCC––CC––r'ÍÅÅC é––??????íííííGKðCCšššš–– éC????úú§§úUúú%% Ë%€%xx%%%%||""""ÏÏ Ë Ë Ë Ë,,,,ƒƒ   ° ° ° ° ° °22 … …2222hhhh » » æ æ æ æ æ æ æ æ d d » » —==—Dùùùɹ¹bbbb  ¹¹  ¹¹ää77ŽŽ;;77 Š Š 3 3; ábbbb¹¹¹¹ŽŽ;;;;ŽŽ|||||"ÏÏúúúú ö ö££  ¸¸eÀm"Ó-€ËÇm¸O õ¢¢ùù¦¦OOOOùùùùÆÆÃÃÃAAAAîH››ZZZZ^^^^¹À* œ œØnmmmÇmmmÇÇÇ"|””„*rÅÅ#~+Ñ­bb ½"#r&Ô)‰,t,t,t0ƒ36D6D7Ÿ6D6D6D6D5í4“3æ2‹0.§+ò'â)”,I+›'Œ!  Eã‰Û + + +UUUÿÿQQ¤¤JJŽŽ440‹00ÝÝ0‹ÝÝÝÝóó˜˜ïïïï  óóïïBBmmmmmmmmÄÄÄÄÈ"OôGGGGôš Á Á ¬´Y´´°°··¿·GGššôôGGGGGGžžžžññCC    dddd  ººddddºººº¾d“8ææ8888ÅÅÅÅÁððžCííGGššGGCžžžKðžCššGGššššCCððííššð–CCCC––CC––r'ÍÅÅC é––??????ííGGG¢ðCC????–– éC????úú§\ +¯U   Ë Ë Ë%Ú€xx%%%%||||""ÏÏ%%%%,,,,ƒƒ Y Y Y Y]] ° ° ° ° ° °ˆ . Û Û22ßß==êê““““ æ æ æ æ == ê ==êêêêîîîîèèŽŽŽŽ á á    _¹ffbb½½½½77ä Š7777ä Š Š Š77ää½½ff¯UQQ££xxxÓÏ t tÏãããã6ë뜜œç””猢¢OO¢ýOOùùK¦¦KùùÃÃppppÃÃî “îîòLLòV±^^^^  È#Q0Ú25&#uuuuII¤þ««éCCCK¥ø­†à ;"ð"B"B'¬)*—+ò-L02`56o55—5—4ê6D6D4ê2â1‡0-L,Ÿ)ê'â&ˆ%Û#&Ã!¼a]·· +U¨¨ÓyÌÌ""""ºº____²²‡‡‡áÙ4‡‡óóFFœœïJUUó˜ïïBBÀÀÀu˜˜˜˜˜˜˜˜ôôGGššGG í íGGššGG°° + +YY..ã=úúãˆssÅÅssssšôôôññññssÅÅ  ``¶¶dd¶¶dd     d¶¶dd¾d8888â<nnrrnn  ð––ðGíGGGGííCCððnÉvÁÁnnÅÅÅk kÅÅš???–––– é éCC????kÅÅkÁÁÍ ½kkkk–––– é é é éM§!³þ£    MM§§úúxÓ€€||ÏÏMMMMQQ££XX ª ª Y Y Y Y]] ° ° ° ° ° °ˆ . Û ÛŒŒßß==êê““ 9 9 æ æ æ æ êê== ê ==êêêêîîîîŽŽŽŽŽŽ á á    _¹ff½½bbbb77ä Š7777 Šä Š Š77ää½½ff\Æ)Q££xxxÓÏ t tÏãããã6çççç::猢¢OO¢ýOOùùK¦¦KùùÃÃppî “îî—òLòV±^^^^  È&34ê+pØuuuuuuIII¤ööQQéCCCðKø­+†à!•##'¬))=*—+ò.§/«2`3º2`4<4<34ê3251‡0--L-L,Ÿ)ê%-! q qÃ!¼]··°°¨¨.Ó&&""""______²²‡‡‡á4Ù‡‡óóFFœœïJû°MóïqqÀÀÀÀ˜˜˜˜˜˜˜˜ôôGGššGGGGGGššGG°° + +YYˆˆˆãêêãˆssÅÅssssôOOOKKññssÅÅ  ``¶¶dd¶¶dd     d¶¶dd d8888<—nnrrvvnnÅÅð–ð–íGGGGGGGCCððnÉvÁÁnnÅÅÅkkÅÅÅš???–––– é éCC????kÅÅkÁÁÁÁ ½kkÅÅ–––– é é é éM§· Xþ£úúMMMMúúxÓ5êŒ×ÏÏMMMM ö ö££XX ª ª Y´]] ° ° ° ° ° ° Û Û Û ÛŒçç2 ==““ 9 9 æ æ“ 9êê====== ê ê==@@ æ@ŽŽ á ᎎ á á _ _¹¹  ¹¹bbbbbbbbääää Š Š Š Š77ääää’’bb½½f!(.É&ªhþ ö ö%%ÓÓ|"ÏÏ66ããããããçç::::::¢¢¢¢¢¢¢¢KKKKùùùùÃÃpppp›A››ŸŸEE±±±±^  2%Y(BÈÇÇuuu***þ¤öö¤¤QQéé––CžøS+†3 è#$÷'¬)*—*—+ò.§.þ0X1125251‡1‡0-0-.%,Ë+E,Ÿ,Ÿ(#Ó! q!Ë!˼aVVe +·]]]¨&yy""uu²²²²²²Ù4‡á‡‡Ù4FFóóJJJJMMMóïïïïÄÄÀÀÀÀ˜˜FëëëëëôôGGGGššššGGGGšš]]°°YYY´ˆˆ555555ÅÅssÅÅ  ôOG¢KKCCss  ºº¶¶ddd dd``ººd¾¾d¶¶8888â<éénnrrÉÉÅÅCCC éííššššGGCCððnnnnÁÁrkÅÅÅÅÅíí??CCCC––––íííínnnkkkkkk–––––– é éúúUU«Q££úú  úúúúúxÓ—¶“)ÏÏMM  ú££££XX ª ª Y´]] ° ° ° ° ° ° Û Û Û Û2ŒŒŒ == 9 9 9 9 æ æ“ 9êê====== ê ê== æ æ æ@ŽŽ á ᎎ á á _ _¹¹  _ _bbbbbbbbääää Š Š Š Š77ää Š Š77bbbb¹¹Ávå1~43,wXQQ%%ÓÓ"|ÏÏããããããçç:::: ß ß H H¢¢¢¢¢¢KKKKùùùù hpppppp›A››EEEE±±^^±±^  ¹nuunÇÇÏÏ9"X#³Iþ¤öö¤¤ööéé––CžžøÑ+~3 è"B$÷&R)=)=)=+ò*î,I.P.P/€/€0-0-0-0-.%,Ë+E)ê)ê("xà q q¼¼a°°¨¨¿Ï!1Ö]¨&yy""*u  ²²²²Ù4‡á‡‡Ù4  MMJJJJóóó˜ïïïïÄÄÀÀ˜˜FëëëëëôôGGGGššššGGGGšš°°YYY´ˆˆ55ÛÛ55ÅÅssÅÅ  O©ü¢KKCCssss  ºº¾¾d dd``ººd¾¾d¶¶8888â<nnrrÉÉvvrrÅÅCCžCííššššGGžžKKvvnnnnÁÁrkÅÅÅÅÅíí??CCCC––––íííínnnkkkkkk––––––CCúúúúQ ö££      úúúúúxÓ-âÞ)ÏÏMM  ú££££XX ª ª ° °   Y Y Y Y ° °]] … … … …ˆˆˆˆ== æ æ ‹ ‹ æ æ æ æ““ æ æ â=““ æ æ====== êää Š ŠŽ 3 á á¹¹f       ¹¹ f¹¹ŽŽŽŽ á á á á á á á á 3 3 3 3 bbb fn~"š(&ª‹»X£%%%%ÏÏÏÏŒŒŒŒ: ß::ã㌌::KK¦¦¢¢¢¢¢¢Oª¦KùùÃÃÃÃppppEEEEîî››­­ZµµZ­^^¹¹mmÇ×$ 1’0å$¶YIœöööI¤’’ššôšGü'‚/‰!>!>$¡$¡$€'5)=)=(æ(æ,I,I.%.%0-.Ò.|.|-Î)¿+E)ê'â&ˆ"ÏÀmm¼¼aYRR&ò- - !ˆ´YÿÏÏÏÏyÓÓycc[[[® ‹‹‹‹0‹ÝÝœ÷÷Q¤JJJóMF똘˜˜qiiÄÄ••••BBBBžžžžGGGGññññGGšš ¬ ¬°°]]Œ2ßß„„Œ2sssss([jjôôššssssdddd¶dddd¶¶dd¶¾d¶¶éââ‹‹88ÁÁnnnnÉÉ  '' ÅrššššííííCCððG¢ü¢  ÍrvÉnÁnnÅkÁÁnnnnnnš?í ’ššííš?????íGÅÅkkkkkkkknnÁÁ?? ’ ’íííí§§úú££££££QQþþQQÓÓ€€)ÏÏÏMMMMúúMM ª ° °]] Y Y Y Y ° °]] … …ß߈ˆ . .== æ æ æ æ æ æ æ æ““ æ æ â=““ æ æ====== êää Š ŠŽ 3 á á¹¹ f      ¹¹ f¹¹ŽŽŽŽ á á á á á á á ᎎ 3 3 bbb fØ0{l·««þþ%%%%ÏÏÏÏŒŒŒŒ: ß::ã㌌::KK¦¦¢¢¢¢¢¢Oª¦KùùÃÃppppEEEEîî››­­ZµZµb^^^^¹¹¹¹mmÇ×%d2í4ô(Ƴ¤öœööI¤’’??šôGüÍ'‰äää ‘#F#&%Û%-'â'Œ$×$*&ß(»+p-x,+Ç)(d' +('5&ˆ%-"Ï!u""m¼¼i´¬a&ò4{7Ý7Ý-¶ÃYÿÏÏÏÏyÓÓy  ¶¶[[® ‹‹‹‹0‹88œ÷÷Qÿ¤JJMó Fóó˜˜qÄÄÄÄ••••BBBBžžžžGGGGññññGGšš + +··çŒ„„„„Œ2sssssss(z+]. ‰Oôôssssdddd¶dddd¶¶dd¶¾d¶¶4ââææ88ÁÁnnÉÉÉÉz™ °Fz ršš??ííííCCðð¢±vÐ?ÕÜ7†vÉnvnnÅ ÁÁnnnnnnš?íGššGGš????? ’íkkkkkkkkkknnÁÁ??íííííí§§UU££££££QQþþQQÓÓ%%)ÏÏÏMM§§úúMM ª ° °]] Y Y ¬ ¬ Y Y Y Y   + + … … …ß Û Û . . â â æ æ 9 9 æ æ 9 9““ æ æ= â==““ 9 9 ======7777 3 3 á á  _¹    _ _  ff¹¹;;ŽŽ á á 3 3ŽŽŽŽŽŽ á á bbbff#l\««`ˆÓÓÓ|||"ŒŒŒŒŒŒ::>>>>::::KKùù õO¢¢¢¢OO¦KK¦ppÊÊppppòòòòîî››­­­ZZµµ^^    ^¹Ç"=$¶'kL«öIII¤öQåå??ššôôzÔ/‰‰ ‘!ì!Ë!Ë#Ó%-$*"Ï"Ï$*$¬'a(»(»)¿' +' +' +'5%Û%Û$€""""""mii¼ai*T6‚8Š8Š3 -ÿ*ÏÏÏ&&Ì̶[  [[ cÝÝÝÝÝ8勤¤ÿYÿÿ÷÷óóF  FFFÄÄqqÄÄ••BBBB•ïžCññšôššññññGGšš´´··¿tAŒ222222ss  ssÍÝ%F2Ï4)#ëOôôsssÍdddddddd¶dddd dââ8“88nnÁÁvÕ ("N'rríí??íííí–ðKK±#:.».»$ä?ôàvnnÁÁrrÁÁnnnnííííííššš???íí??kkkk ½ ½kknnÁÁíííííGšš§§§££££QQ«««QQxxxxÏÏ""úúúU§§úú ª ª ° °   Y Y Y Y Y Y]] ° ° … … …ß Û Û . . â â @@““ æ æ““““ æ æ—===““““êê======7777ŽŽ á á  _¹    _ _    ¹¹ á ᎎ á áŽŽŽŽŽŽŽŽ á á bbb  ¹§§«`%$ù-ÓÓ||×|ŒŒŒŒŒŒ::>óóó””::¦¦ùù õO¢¢ýýOO¦KK¦ppppppppòòòòîî››­ZZµµ^^    ^¹mÇ-ˆÓQœIIïIöQŠŠååššôôzzÔÔÔÜ7 q¼Ã#Ó"Ï!u!u"Ï#Q#Q$¬$¬%¯%¯$U$U$€#&#&!Ë""""""miiYa´Y#/¾4{4{+ÃYÿ*Ï**ÌÌ̶[  [[ cÝÝÝÝÝ8勤Y´YY÷÷óóF  FFFÄÄqqÄÄïïBBBB•ïžCññôOššññññGGšš´´Ï222222ss  ssÍ(!6#ëÌ©ôôôssÍ(dddddddd¶¶¶dd   dââ Þ888nnÁÁvzŠ?Š'rÍrGGššíííí–ðKK±+Y6Ú6Ú.ç™//+vnnÁÁÁÁnnÁÁnníííííí??š???íí??ÅÅkk ½ ½kknnÁÁíííííGOO§££££««`ÊÚQQxxxxÏÏ""UUU¯Múú ª ª s Å Å Â Â oÉ ° ° ° °22 … … … … × × hh¿¿¿¿ æ æ““========““ æ æ====““î£Xþ££££ ö öxx x Ë%xx    ½b¹¹ffbbbbMMMM££££  úúúúúMM||Ï)|1îXò-%%ÏÏ)„¸¸eeEU¿dúë>>{   ww$ Ê õO¢¢K¦¦¦////………à±±^^7ÜÜÜàà33‰‰Ü܉‰77[µµµŽÙ44††4Ž   ú««Y³]· + +hpã>ë! BB œ!÷!÷#Q!÷#Q#Q#Q#Q!÷"""""" ÇÃ!!i¸]¨VV†•$ÿ$ÿèÉg <<<<å‹‹‹ÝÝ‹‹ÙÙ‡‡‡,Ù4‹‹‹‹¨·¿e¬QJJuuÈÈ®®®®®T®® ®WWªªYY]°°„„22ÛÛÛÛÛÛˆˆ5ETòãÛÛÛÛ..ššGGžžK¦(ÝŠÕ(ÍsÍÍ‚Šäoººââââ44¡¡N©¥J÷R####yyy×××111ß9==ê9ß9„ˆ..ˆ„„××..ˆãE"Î.O.O#à##ÁnnnnnnkÅÁÁÁÁ1××ׄ„×׈ˆ€€××**×××ׄ„××YYYY³hÚ5=-%%%%%%Ó-ù*7,–X×|¹¹f   ¹¹ÜÌÁf¹¹XX ª ª ª ª s Å Å oÉ ° ° ° °22 … … … …22 hh¿¿¿¿ æ æ 9 9========““ æ æ====““H² þ££££ ö öÓÓx  Ë%xxÁÁff½b¹¹ffbbbbMMMM££££  úúúúúMM||Ï)||„„-Ó%%ÏÏÞîǸ¸eeÇ +%8.²-W"ƒUó>{   ww$ Ê õO¢¢K¦¦¦////………à±±^^Ü777àà33‰‰77‰‰77ªª[[[4444††4Ù   úQQþY] + +h`»‰ã EBBB œ œ!÷ œ!÷!÷!÷B œmmm ÇÃiii¸]¨¨NûûvÑÑÑÉ g<<<<å‹‹‹ÝÝ‹‹44‡‡á‡Ù4åå@@]e +¬QïïÄÄmm®®®®®T®® ®WWªªYY]°°„„22ÛÛÛÛ55ˆˆÛ55=ãÛÛÛÛˆˆššGGžžñKÍÍ  sÍsÍ(G%È'"éoÆÆkkââââ44¡¡ ôNJ¥÷R####yyy11×111ß9˜˜ê9ßß߈..ˆ„„11...ˆ5ê·àÑÉÉÁnnnÁÁnkÅÁÁÁÁ1××ׄ„××..€€××**11×ׄ„××YYYY³(c/("Æâ%%%%%%Ó-®!£×|¹¹f   ¹¹ÌëûÁf¹¹XX ª ª ª ªssss o o ° ° ° ° Y Y´´ßß222222 » » » » æ æ 9“======êê æ æ““ =—““Hý`«££ öQQQ%% Ë ËxxÓÓÁÁf½b¹¹ffúúMM££££MMúúúúMMÏÏÏÏ||)Ï%%ÓÓ|׫%$1meeÏ$‹4É8+6Ñ0ºló>Í s { Ê Êww õOªOùùùS//‚Ü……33µµZZ± ^^7‘>äààä‰7777ääWW[®44†††††á   ú««þY]]¯ +»»``66>>çç”””ïï”””””ÀÀÀe¼¼aNû¡ooººŽŽŽé8Ý‹‹‹‹Ý8‡‡‡‡‡‡‡‡8’G¢°°¨Q÷ïJqqÄÄmmÀÀ®®TT®®WWªªYY° +°°„„„ßÛÛÛÛˆˆ5555ˆˆˆˆˆ.ÛÛˆˆGGššññžžssss  ÍÍ/%È4«3Q$$Š?0kââ44ââNN¡¡JJ÷÷uu È#yyÌÌ„„„„1ŒŒ›Td§˜æŒßßÛÛÛÛ1ׄ„.....ˆvnnnnÁÁnnkkkkÁÁÁÁ„„„ßßß„„..Û€×ׄ„11×ׄ„×× þ þYY³à D%®ˆ€%%%%%%%-â9„)Ϲ¹ff¹ _ fÅÔÌÁf   ª ªXXssss o o ° ° ° ° Y Y´´ßß222222 » » » » æ æ 9“====== æ æ““ =—““îî««££«»»%% Ë Ë  xxf f b½¹¹ffúú§§££££MMúúúúMMÏÏÏÏ||)Ï%%ÓÓ|×ö"oæmeeÀu#16$8+6Ñ4É |ó>Í s {$$ww õOªOùùùS//‚Ü……33µµZZ± ^‘ì>äààä‰7777ääWW[®ÙÙ†††††á   úQQ¤þ¯ +````ÛÛ‰‰22:::”:”::::ee °a¨¨û¡ÁÁÁÁooººŽŽ4Ž8Ý00‹‹ƒÝ‡‡‡‡‡‡‡‡Ý8’íUU¨M÷QJïqqÄÄmmÀÀ®®TT®®WWªªYY U°°°„„„ßÛÛÛÛ..5555ˆˆˆˆˆ.ÛÛ..GGššññžžssss  ÍÍÕN(},Œ!S$š(n?Æââ44ââNN¡¡JJ÷÷uu È#yyÌÌ„„„„1ŒAº)’0W*@ Æöæ9955551ׄ„....ˆ.ÛÛÁÁÁnnnnÁÁnnkkkkÁÁÁÁ„„„ßßßßß..Û€×ׄ„×××ׄ„×× þ þYYY³»p∀%%%%%%%ÓÓ)))Ϲ¹  ¹ _ fjf   ª ª ª ªXXss  o o oÉ Û6ˆˆ Û Û Û » » » » d d¿¿====êê—= æ æ 9 9========““““þ£££³,wXÏÏ"" Ë Ë Ë Ë¹¹  ¹¹ffjúú§§MMúú££££MMMMÏÏ"|ÓÓ% ËxÓ%%%%ˆ=ËieeÀuÃ.[4r4r*¢ +E$ ÊwÑ$$ww õOOOùù¦¦……33…………ZZ^^ fìFFì:•:à::®®®®W²_ª0000‚Ý77   úúú¨¨UU + +]·22ß…Ô.‰‰ããÛ62ß…°°]¨¬Rÿÿ¤¤JJkkÅkáá448Ý00‡‡,‡‡‡ÙÙÝÝÝÝ4Žáá  ûû  óóÄÄqqmmÀÀWWWW ýWªªªªTT´´ U U°°ßß„„..ˆˆˆˆˆãßßßß2222„„22ññññGGôôssÅÅÉÉvz/ìG{Ækk,áoââ‹‹‹‹NNNN¥¥÷÷ÌÌÌÌÌÌyy„„„ßßî`-ø7r7r5j+ñ›««ò=55ˆ.ˆ...ÛÛß„„„ÁÁÁÁkk ½kknnnkkkkÁÁÁÁÁÁÁÁ11115555ÛÛÛ€....€€€€... ÓUU³³)))Ïxxxx""""xÓxxbb µ µ  ¹¹ff¹¹¹¹®®XXss Å ÅÉÉ oÉ ¬ ¬ Û6ˆˆ Û » » » » d d¿¿====êêò— æ æ““========““““£ I££þ  XÏÏ"" Ë Ë Ë Ë¹¹  ¹¹  jjjjjúúMMMMúú££££MMMMÏÏ"|xx% ËxÓ%%%%ÓÓ¼¼ieeÀÀ¤h % %d E$ ÊwÑ$$ww š õ õ õùù¦¦……33…………ZZ^^fÀ¡° ûï•:à::èèèè®®®®W²ÕÕ00‚ÝÝÝ   úúú¨¨¨¨UU¯¯]ØØ…*Ô...‰‰Û62…*û°]N¨R÷ÿÿ¤¤JJkkkáá448Ý‹‹‡‡,‡‡‡ÙÙÝÝÝÝŽ4áá  ûû  óóÄÄqqmmÀÀWWWW ýWªªªªTT´´aa°°°°ßß„„ˆˆˆˆˆˆ.ˆßßßß2222„„22ññññGGôôss  oov  (ÍkkÂÂoââ‹‹‹‹NNNN¥¥÷÷ÌÌÌÌÌÌyy„„„ß9I o4½7r7r84#$%Ù-ø$ÖM55ˆ.ˆ...ÛÛß„„„ÁÁkk ½kknnnkkkkÁÁÁÁÁÁÁÁ××1155ÛÛÛ€.. Ó Ó€€€€... ÓUU¬¬³³)))Ïxxxx""""xÓxxbb µ µ  ¹¹ff¹¹¹¹¹¹®®XXssss Y Y .ˆ6 Û . . . .hhhh====êêDD““““ê ====== æ æ æ æ ö ö ö öQQ££ÏÏ"" Ë Ë Ë Ë¹¹    ffjÅÌr½½§MúúMM     ö ö ö öMMMM"""" xÓxxxxxxxxxa¼eeÀÀAœöœó>>ã$$ww$$ww õ õ¢¢ùùSùØØØ3…………µµ± ¹È°!u!uVB::èèè••••[[®®Õ0‚‚0Š00   úóMúúúúM¨UUUUuuÐÐÔÔ....Ø2}}VV°ûû¡N¨¤¤÷RJJ÷÷sÅk¶¶Ž4‡‡å‹Ý84Ù‡ááᇇ0000‡‡‡‡    FFóóÄÄmmÀÀWWWWWWWWWWWWTTT®a]]°°22ßßãˆ55ˆˆ55ŒŒ99ßßßߌ222ññCžGGôôssssoooÉssss¾¾ººº`ââ4488‹‹NNNN¥¥¥JyÌÌyyÌÌ11„„ß” 06Å86/Sº(Ž/S&0òˆˆÛÛÛÛ€€..×××1ÉnÁÁkkÁÁÁÁnnÁÁÁÁÁÁ„„„ßETTê5Û....€€€€€€€€ Ó Ó ¨ ¨ ¨YYa1×)Ïxxxx"""" Ë Ëxxbb µ µ  ¹¹¹¹¹¹¹¹¹¹®®\\ssss Y Yˆ . Û . . . .hhhh====êêêê““““ ê====== æ æ æ æ ö ö ö ö ö ö I IÏÏ"" Ë Ë Ë Ë¹¹    ffjz‰6'½½§MúúMM     ö ö ö öMMMM"""" xx xxxxxxxxa¼eeeeçAAç>>ã ‰$$ww$$ww õ õ¢¢ùùùSØØ3Ø…………µµ± ¹ÈV ÀVB••èBBB••••[[0Š‚‚Õ000EEE óM  úúM¨úúúúuuÐÐyyÔÔyy}Ø}}ûûVVû¡óNJJ÷R¤¤÷÷¾k¶¶Ž4ááå‹Ý84هᇇ‡‡0000‡‡‡‡    FFóóÄÄÄÄÈÈWWWWWWWWWWWWTTT® ¬]]°°22ß”˜=ãã55ŒŒ””ßßßߌ222ññCžGGôôssssoooÉssssdd¶¶ººº`ââ4488ææNNNN¥¥¥JyÌÌyyÌÌ11„„ßßIh*–.¦+C!ÊöAP`§=ˆˆÛÛÛÛ€€..×××1#ÉÁÁkkÁÁÉÉÁÁÁÁÁÁ„„ßî!s-¢*ídêÛ....€€€€€€€€ Ó Ó ¨ ¨ ¨YYa1×)Ïxxxx"""" Ë Ëxxbb µ µ  ¹¹¹¹¹¹¹¹¹¹®®\\ Å Å Å Å Å Å Å Å Y Y ° ° ° + … … … … . . . . d¿ d d¿¿hh======êêhhhh¿¿ t t t t Ë Ë Ë Ë%%xx""""    ½½;ðZq­–;§M§§úúMM t tÏÏ xxx££Q ö    MMMMMMMM  ú  ¸¸ee¸¸eeee ´ ´KKKK¢¢ õ õww$$$$ww+…ØØØØ……^^  µµb¡°°ûï•èBnnÀÀÀÀ²²_WWÙŽ,,,†4Ùqquu""xxË&*ÏÏÏuu##ÌÌÔÔNNóóN¨ûûNNNNR÷÷÷ÌÌyyÌÌšš@@åå88__  ____    ²W_²²_[® MMMóœœJ¤mmmmÈÈmmƒƒ0ÖÖÖƒƒÖÖÖÖ((ƒƒ2222ÛÛÛÛÛÛ5êêú§§i´ +e¿e·· + +´´CCCCžžžžoÉ  ssÉoÉÉdd  dddd¶¶¶¶ddddû¡NNûû¡¡J¥÷÷¥¥÷÷]¯¯]]·Ç`º³I99””ããÛÛ„„„„ ¨ ¨]ÁÁÁÁÁníí??íí??nnÁÁÅÅÅÅ#ÉÁÁÁÁÁ×19þ,G5Á4f$(˜ˆ. Ó×ׄ„¬¬YY¬¬ þ þU ú¯¯§§§££ ö ö    MMMMMM µ µ µbbbbŽŽŽŽää77ÚÚÚÚÚ4 Å Å Å Å Å Å Å Å Y Y ° ° U ° … … … … . . . . d¿ d d d dhh » »======êêhhhh¿¿ t t t t Ë Ë Ë Ë Ë Ëxx""""    ½½;ð¥µø–;M§§§UUMM t t t t xxx££Q ö    MMMMMMMM  ú  ¸¸ÀÀ¸¸eeee ´ ´KKKK¢¢ õ õww$$$$ww+…ØØØØ……  µµ¼¼ìFFFï•BÈÈuuuu  ªWWÙÙ,,†,4Ùqquu||xxË&*ÏÏÏÈÈÌÌyyóóóóóNûûNNóóBqqÄÄqqÄÄ@@åååå88__²²____    ²Wª²²_º¶[® óóóMœœJïmmmmÈÈmmƒƒ0Ö00ƒƒÖÖÖÖƒƒƒƒ2222ÛÛÛÛÛÛ55E#(.ª+õò´ +e +e·· + +YYCCCCžžžžoÉÅÅssÉoÉÉdddd¾ dd¶¶ddddû¡NN¡¡¡¡J¥÷÷¥¥÷÷]¯¯]]]·æA99ßßß߈ˆÛÛ„„„„ ¨ÁÁÁÁÁníí??íí??nnÁÁÅÅk ~#ÁÁÁÁÁ×1ßî!s(8)’ ㈈.×ׄ„¬¬YY¬¬YY¯UUUM§§§££ ö ö    MMMMMM µ µ µbbbbŽŽŽŽ??77ÚÚÚÚÚé Å Å Å Å Å Å Å Å Y Y Y Y ° ° ° ° … … … … .ˆ Û Ûhhhh==== == » » » »""Ï t Ë Ë Ë p Ë Ë Ë Ë"""" _ _¹¹½½;–KðèŽM§U¯·úú t t t t xxx ö ö ö ö    MMMMMM§Múú¸¸eemm¸¸¸¸¸aaaaKKKK õ õ¢¢ Ê ÊwÑww$$ØØØØ……33^^µµµä>‘ì•ïJJÐuÐÐ}#À  WWWW††ÙÙÙÙ4ÙqqqËuÏ||xËËÏÏÏÏnnÈÈqqFFóóFFNóóóFFïïÄÄÄÄqq’8’8å‹‹‹²²²²__²²[[[_WW  [[[[FFó󜜜BÀmmmmÀÀÖ0((ƒƒ00ƒƒƒƒÖÖƒƒß„22ˆ.ÛÛˆˆˆãò'å5n4& Ë´ + +··· +°ññññžž¦KvvÅÅ  Éooo¶dddd dddkddddNNNNNN¡¡÷÷÷÷J¥÷÷¯¯¯¯¯¯]]ßßßßß„1Œ5Û..„„ßß·]¯U ¨ ¨ÁÁÁnnÁÁššíííí??ÁÁkÅÉÉÁÁÁÁÁÁ××1ŒEúúEãˆÛ€11×׬¬¬¬¬¬ þY¯UUU]úú§§Q ö öQúúMM        bb bbbŽŽŽŽ’’’’ÚÚÚÚ‡á Å Å Å Å Å Å Å Å Y Y´´ ° ° ° ° … … … … .ˆ Û Ûllhhhh==== == » » » »ll""Ï t Ë Ë% Ë Ë Ë Ë Ë"""" _ _¹¹½½–;èèð–èŽM§ú +\úúÏÏ t t xxx ö ö ö ö    MMMMMM§Múúe|Çm¸¸¸¸aaaaKKKK õ õ¢¢$$wÑww$$ØØØØ……33^^µµµä>‘ìïJ¤Y…ßßߨ}u²²²²WW,,ÙÙÙÙÙ4qqqËuÏ||xËËuuÏÏnnnnÄÄqqFFóóFFó™™™ììJ•BBÄÄÄÄ’8’8å‹‹‹²²²²²²[[ª²²WW[[[[FF˜˜œœœBÀmmmmÖ0((ƒƒÖÖƒƒƒƒÖÖƒƒß„22.ˆÛÛˆˆˆã˜·&‹*šê´ + +··· +°ññññžž¦KvvÅÅ  Éooo \¶dddd¾ddd¶ddddNNNNNN¡¡÷÷÷÷J¥RR¯¯¯¯¯¯]]„„„„ß„1Œ5Û..ßßîXÖ +¯ÁÁÁÁÁššíííí??ÁÁkÅnnÁÁÁÁÁÁ11×1ÛÛ55ˆ.€Û1111¬¬¬¬ þY¯UUU ¨úúMMQ«Q öúúMM        bb bbb µ µŽŽŽŽ’’’’ÚÚÚÚ,‡ Å Å Å Å o o ° ° ° + ° ° ° °22 × × Û Û Û Ûl » » » »==== æ æ æ æ d d » » »% Ë% Ë Ë Ë Ë Ë Ë Ë Ë Ë   Ë Ë µ µbb¹¹ffää’’èè á ᣣ³Âd¯úúÏÏÏÏ% Ë Ë Ë  ú  ú ö ö ö ö§§úú££ ö öee¸mqiiaaaa  e ¢¢¢¢ õ õOO{ ÍÍwwwwØØ……////VV±±^^± ::•ïJ¤ÿ´”!I!÷ œã.Ìq__²²__WW,,ÙÙÕÕ‚ÝqqxÏÏ„„*ÏÏuÇÇuuÀÀÀÀìì™óFFFìBB••™™ì‘jj¼jjjjéé<áéŽ<á__²²[¶[[®®® [[W²_FF Fóóó˜qăƒÖÖƒƒƒ(00ÖÖ,,ÛÛÛÛÛÛÛÛ2222Œœ)e + +´´aa··]]°°°°ššGGžžøž  ssÉÉsÅ k``    h ³¶ddºº  ¡¡¡¡¥¥÷÷NNNN¡¡NNYYYY..€€ÛÛÛÛ××××ß9(Ž!H¿¯¯UUÁÁÁ g gÁÁíííí––––Á gkÅÅÅÁÁÁÁ11„„××11ÛÛÛÛ11ßßYY¬¬¬¯¯ ¨ ¨¬¬¬¬ú  MMúU    úúMMMMMMbbbbbbbbääää7ì’ì‡,,,ƒƒ Å Å Å Å o o ° ° U ° ° ° ° °2222 Û Û Û Ûl » » » »==== æ æ æ æ d d »%€% Ë Ë Ë Ë Ë Ë Ë Ë Ë  %% µ µbb¹¹ffää’’ŽŽ á ᣣXhd¯úúÏÏÏÏ% Ë Ë Ëú    ú ö ö ö öMMúú££ ö ö  ¸¸¼aa¼¼eee ¢¢¢¢OOOO{ ÍÍÑÑwwØØ……////±±±±^^± ::•ïJY"x&³,,Ë(»"Mã&Ì__g²WW††ÙÙÕÕ(‚qqx„î#³&h"X”*ÏÇÇuuÀÀÀÀìì™>ììì‘BB••>>ì‘jj¼jjéé<áŽ4á‡__²²[[[®®® [[[[W²_Fûû óóó˜qÌÄiƒƒÖÖƒƒÝƒ00ÖÖ,,ÛÛÛÛÛÛÛÛ22222ŒAQ + + +´´aa]]]]°°°°ššGGžžøžÅÅssÉÉsÅ ``      ¶ddººhh¡¡ûû¥¥÷÷NNNN¡¡NNYYYY..ÛÛÛÛÛÛ×××ׄߛƒ¯¯UUÁÁÁÁÁÁÁíííí––––Á gkÅÅÅÁÁ××**××11ÛÛÛÛA«³þËa³³¬¬¬¯¯ ¨ ¨¬¬¬¬ú  MM  úúúúúMMMMMMbbbbbbbbääääìV±¡‡,,,ƒƒ Å Å s o o ° ° ° ° ° ° ° ° … …22 Û Û Û Û¿¿¿¿ d d » » » » æ æ æ æl »hh%€% Ëxxxx Ë Ë Ë Ë p Ëxx µ µbb _¹¹¹ä Šää á;ŽŽ öQ««§§úú""""xxx MMMM ö ö ö ö  úMM ö ö££¸¸ee¼¼¼¼¸¸¢¢O õ õ õ¢¢ÍÍ {$$wwØØ……////± ^^±   èè÷(/€4ê5—0-&]>.yg __ÙÙ{Õ‚‚ËÛ#0Ž5K5K/4!«*Ïuuujj¼¼nÀÀ>™™>ììììBè:•>>7‘¼¼b¼¼<áááááᇲ²®®®® ®®®  ® ___ûe°Móó˜ÄÄÄÄÄÄiÄÖ0ƒ(ÖÖƒÝÝ݃ƒÙÛÛÛÛˆˆˆˆ22„„22çA· + +a]]°°°°°°ššGGCžžžÅÅooÅÅÅÅ``      dddd  hh ô ôNN¥¥÷ ¡¡¡¡NNûû¯¯ ¨YYYY..ÛÛ....×××ׄß99 + +U¯¯¯ÁÁÁíííí––––ÁÁÁÁkk zÑvÉn××**×1„„ÛÛˆ=!-K1[-K"ùp³³YY¬¬¯¯¬¬¬¬  ú        úúúúMMMMMM µ µ µ µ bbbää’’?NN?ÚÚ,,ƒƒ Å Å s o o ° ° ° ° ° ° ° ° … …22 Û Û Û ÛtÎt¿¿ d d » » » » æ æ æ æl »hh Ë%% Ëxxxx Ë Ë Ë Ë p Ëxx µ µbb _¹¹¹ä Šää á;ŽŽ öQQQMMúú""""xxx MMMM ö ö ö ö  úMM ö ö££¸¸eeaa¼¼¸¸¢¢O õ õ õ¢¢ÍÍ{ $$wwØØ……////± ¹¹± ffèè÷(38ù6ñ4<*l˜.yg __ÙÙÕ0‚‚ÃÃË+$5ø887S,ßÏÏu¼¼nfä>™>‘‘ììBè:•>>‘ì¼¼¼¼¼¼<ᇇááᇲ²®®®® ®®®  ® ___û$“tóó˜ÄÄÄÄÄÄiÄ0Ö(ƒÖÖƒÝ888ƒÙÛÛÛÛˆˆˆˆ × ×„„222Œ]· + +a]]°°°°°°ššGGCžžžssÅÅooÅÅÅÅ``      dddd ³ ³  ô ô ô ôJJ÷ ¡¡¡¡NNûû¯¯ ¨YYYY..€€....××××*„„„¯¯U¯¯¯vvÁÁÁíííí––––ÁÁÁÁkkÍŠ ÿ†Én××**×1„„ÛÛã.¦886Å1Ýêh³YY¬¬¯¯¬¬¬¬  úúú        úúMMMMMM µ µ µ µb½bbää77ä??äÚÚ,,ƒƒ š š íG š š íG Å Å Å Å o o o o Å Åss o oÉÉÝ’Õ GG š š ñ ñžž Û Û Û Ûˆˆˆˆ]]¸¸ ° +]]\XXX ý (ƒƒƒ Ö Ö Ö Ö,, Ú,,ÚÚ Ö Ö Ö Öƒƒƒƒ á á á á’’’’7777 á á á áxx Ë Ë"""" ö ö I£MMMMwwww Ê$ww    wwwwwwww Ê ÊwwÑw$ Ê$$wwÆÆÆÆÆÆòòLLŸŸúúýýý²d¾ƒ&G0n5Ø5+2v'øo`7ÝŠ0ÙÙ††®®®®®®[[cÍ* 697”7”5ã(Zn_²²0000Ý7Š07‚Ý‚†áááóóó󜜜œ˜˜E ëE˜óyyqqÈÈuÈÈÈÈqq®®®®[[[[²²[[[[™N°Vð•莹¹     ftt!!xxxÒ||ÏÏttttRRRRNNNNNNNN©Nûû¾¾    ººººhh `ºšôôôGGGGssssooCCññ‹‹888888ââââââââââ88‹‹      `ºÌÌyy##uu##uu##ÐÐÌÌyyÌÌyyyy#}*ߢGššííÅkkkCCCCCCCCÍ‘'u&q3#É... ÓÛÛ...ˆã·27r884’!Ÿh³YYYY + +YY¬¬ääää77 Š Š á á á á á ᎎ á ᎎèè á á á á á áŽŽŽŽ,,,,,, š šG í š š íG Å Å Å Å o o o o  ssww o oÉÉÍ‚z ÅGG š š ñ ñžž Û Û Û Ûˆˆˆˆ]]]] ° +]]\XXX ý (ƒƒƒ Ö Ö Ö Ö,, Ú,,ÚÚ Ö Ö Ö Öƒƒƒƒ á á;;77’’7777 á á á áxx Ë Ë"""" œ œ£þMMMMwwww Ê$ww    wwwwwwww Ê ÊwwÑw$ Ê$$wwÆÆÆÆÆÆòòLLúúTTýýX d¾Î Ý)©1È1+±%Cº7ÝŠ0ÙÙ,,®®®®®®½‚(°2*4ß/!•n_²²0000‚ÝŠ0ÝÝÝ‚†áááóóóóœœAA˜˜ EE MóyyÌÌÈÈuÈÈÈÈqq®®  [[²²[[[[??F¡Jð莹¹    f tt!!x!!ttttttRRRR©©NNNNNN©Nûû¾¾    ººººhhºšôôôGGGGssssooCCññ‹‹8888 Þ Þââââââââââ88‹‹      º`ÌÌyy##uu##uu È ÈuuÌÌyyÌÌyyyy#}*”!2#ü¢ššííÅkkkCCCCCCCCrr‚‘#Én... Ó€€ Ó Ó.ˆãM'425j5j,s€³³YYYY +¿·YY¬¬ääää77 Š Š á á á á á ᎎ á áŽŽŽŽ á á á á á áŽŽŽŽ,,,,,, š š š š í í š š Å Å Å Å o o o ossssww o o o ow  ssõ š š š ñ ñžžˆˆˆˆˆˆˆˆ ° ° ° ° ° ° + +®®XX ª ªƒÝ0 Ö Ö Ö Ö Ö,,,,  ,, Ö Ö Ö Ö Ö Ö Ö Ö á á;;77’’ää77 á á 3Žxx Ë Ë"""" I IQQú  MM Ê Êwwwwww  s swwwwwwww Ê Êww$$ww$$wwÆÆllÆÆÆÆòòLLúú\««X²kÆÕ$?/-¹%š †º`7Ý‚‚††ÙS®®®®®®®®µÜ#ó%NàÁ¹‚‚Õ0‚‚‚‚‚‚ÝÝÙÙ††EEEEœœœA˜óó˜óóóóÌÌÌÌÈÈmmÈÈq®®[[[[®®²²®®® ‘ìFV¼­Cè¹¹     ±tt!! p pËË!!!!|!ttÿ¥¥¥VVûûûûûûûûûû¾¾ººººººººººÂ íGôôôôôôsssÉÉÉÉKñññææ88 Þ Þ‹‹ââ4488 Þ Þ       ³yyyy##uuuu## È È##ÌÌyyÌÌyy'''' È}*ß^¢GššííÅÅÅÅÅÅÅ ððððCCCCrÍvÛ€. Ó &€€€€Ûˆ=«!Ê'4$5»YY +d +¯YYY þ7’ääääääŽŽŽŽŽŽ á á á á á á á á † á á á á áŽŽŽŽÚ4Ú ,, š š š š í í @ @ Å Å Å Å o o o ossss o oÉÉw  ssõ š š š ñ ñžžˆˆˆˆˆˆˆˆ + + ° ° ° ° + +®®XX ª ªƒÝ0 Ö Ö Ö Ö Ö,,,,  ,, Ö Ö Ö Ö Ö Ö Ö Ö á á á á7777 Š Š77 á á 3Žxx Ë Ë"""" I I ö öúU§§ o owwwwww  ÍÍwwwwwwww Ê Êww$$ww$$wwÆÆÆÆÆÆÆÆòòLL¯ {`X²¶kÆ 0%š$?Õ `7Ý‚‚,áÙS®®SSSSS®®µ½jÅg²ªª‚‚0Õ‚‚‚‚‚‚‚‚ÙÙ††EEEEöööœ˜ó󘘘óóÌÌÌÌuuÈÈmmÈÈq®®[[[[®®²²®®T®‘ììû¼Cè¹¹     ±tt!!ËËËË!!||!|tt¥ J¥¥ûûûûûûûûûûûû¾¾ººººººººººhhG¢ôôôôôôssÍsÉ~ÉÉKñññææ8888ææ44ââ8888       hyy##uuuu######ÌÌyyÌÌyy''''##ÐÐôôGíššííÅÅÅÅ  Õ/KððCCCCrÁÁÁ€Û. Ó &€€€€ÛˆˆŒAAA»a¬¬YY¬¬U¯U¯YYY þ7’ääää??ŽŽŽŽŽŽ á á;; á á á á; á á á á áŽŽŽŽ44Ú‡‡ž Džžõ š @õ o o     oÉ o o o o o o o o oÉss  õ šGG ñ ñ ñ ñˆˆˆˆßßßßa] ]¸\ ª ª 4‡,ƒ ( Ö Ö ( (ƒƒ, Ò,,,,,,ÚÚ,, á á 3Žäää Š Š Š7777 Šäxxxxxxx  ö ö ö öMM§wwwwww$$ÍÍÍÍ$$ Ê Ê    $$wwÍÍ  Ê$wwppppÆÆòLú *­0Ä.%Co`ggÎs`XXŠŠ00ÙÙ,,ªOýý¦S®¹ÉÜ[[ªªªÙÙ,,Õ0Ý‚Õ0ÕÕ‚‚‚‚ïïïïööIï󘘘EëëëuuÈÈqqmmÈ"ÀWWWWWWWWWW;••ðèè  ^^µµbbÏÏÏÏÏÏ!!!!tt!!! ÇR ø¥¥NNûû¥¥¥¥¥¥¥¥ºººººººº¾dddººhhKKññKKžž    vÑÉÉGGšš888“‹‹ææââé<<ºº    ººÐu##ÌÌÌÌ##ÐÐuu# ÈuuuuÌÌÌÌÐ*##yyÌ'GGššð–CCÅÅv†ÿ%Ä#©ššííššÁÁnnÁÁÁÁ€€. Ó | |*„..€Ûßßß߯¯UU¬¬¬¬UUYY¬¬77ää7’’’ á ᎎ á ᎎ;; á á7777 Š Š77 á; á;’G@‹ÝÝž Džžõ šõõ o o     oÉ o oÉÉ o o o o oÉssÕÕõ šGG ñ ñ ñ ñˆˆˆˆßßßßa] ]¸\\\ ª ªÚÚ,‡ƒ ( Ö Ö ( (ƒƒ, Ò,,,,,,ÚÚ,, á á 3Žäää Š Š Š7777 Šäxxxxxxx  ö ö ö öMM§Mwwwwww$$ÍÍÍÍ$$ Ê Ê    $$wwÍÍ{{ Ê$wwppppÆÆòLTÎ-b6Ü7‰7‰2Ì"Žº«²²   d«ýý0000,,ªOýý¦S®_n'c®[[ªªª,,Õ0Ý‚Õ0ÕÕ‚‚‚‚””ïïööIï˜>˜˜EëëëuuÈÈqqmmmÈÀWWWWWWWW_ªWW;••;ŽŽèè  ^^µµbbÏÏÏÏÏÏ!!!!tt Ç Ç Ç!R ø¥¥NNûû¥¥¥¥¥¥¥¥ºººººººº¾dddººhhññññKKžž    vÉÉGGšš888“ææææââé<<``    ººÐu##ÌÌÌÌ##uuuu# ÈuuuuÌÌÌÌÐ*}}yyÌ'GGššð–CCÅÅv†'0˜&œššííššÁÁÁÁÁÁ€€. Ó | |*„..Û€„„„„UUUU¬¬¬¬UU þ þ¬¬’’ää7’77 á ᎎ á á 3 3 á á á á7777 Š Š77 á; á;Ý’‹‹ÝÝ D D ñ ñGGGG o oÉÉ o oÉÉ o ossÕÕõ šGG ñ ñ ñ ñˆˆˆˆ …ߌŒa ° ° + +®®\\²X ª ª,,,, Ö Ö ( ( Ö Ö Ö Ö,,  ,,,,  ÚÚ 3 3 á á777’777777ää Ë%xxxx€% ö ö ö öMMú  wwwwww$${{  wwwwÍÍÍÍwwwwÍÍ{{$$ÑwÃÃÃÃttŸŸ\ 04'8686866Ü,Ê`««««««PP0Õ(‚,ÑýýOªSSS®WW gc®®®®®®WWWW,,‚‚‚‚ÕÕÕ0‚Ý00ïöœœAëëëëEë>>ÈÈÌqÄÄÈmmmWWWW²WWWWWWW²W;;ŽŽàà;;   ±bbb!!!!!!!!!!!!tt Ç!¥¥¥¥©Nûû ø ø J J¥¥¥¥hhºººººd¾hhCCžžñññKss zvvÉÉôôGG‹‹88â<<â888“<ââ⺺ºººº  ####ÌÌÐuuÐuuuu## È ÈÌÌÌÌ##ÐÐ'Ìyy?šššCC–ðrrrrv†ðÿnOššíí??ÁÁÁÁ Ó Ó€€** |×....„„1×UUUU Q Q þYUU¬¬¬¬77 Šäää77ŽŽ á ᎎ á á á ᎎ7777 Š Š77ŽŽŽŽƒÝ‹‹8’ D D ñ ñGGGG o o o o o oÉÉ o oss  õ šGG ñ ñ ñ ñˆˆˆˆ …ߌŒa ° ° + +®®²X ª ª,,,, Ö Öƒƒ Ö Ö Ö Ö,,  ,,,,ÚÚÚÚŽŽ á á777’’’77’’ää Ë%xxxx Ë% ö ö ö öMMú  wwwwww$${{  wwwwÍÍÍÍwwÑÑÍÍ  $$ÑwÃÃÃߟ§Æ-b6Ü86866Ü.½!4`««PP§§§§PPöö0Õ(‚,ÑýýOªSSS®WW² ®®®®®®®WWýýÙÙ,,((‚‚ÕÕÕ0‚Ý00IIöööœœAëëëëë>>ÈÈqÄÄÈmmmWWWW²WWWWWWW²W;;ŽŽàààà   ±bbb!!!!!!||||!!tt Ç!¥¥¥¥©N ¡ ¡ ø ø¥¥¥¥¥¥hhººººº¾hhžžžž – – –ñÍÍ ÅvvÉÉôôGG‹‹88â<<â888“<ââ⺺ºººº  ####yyÌÌuÐuÐuuuu## È ÈÌÌÌÌ##ÐÐ'Ìyy?šššCC–ðrrÍÍÑ+Ñ+©ôššíí??ÁÁÁÁ..€€** |×....„„1×UU¯¯ Q Q þYUU¬¬¬¬77 Šäää’’ŽŽ á ᎎ;; á ᎎ7777 Š Š77ŽŽŽŽƒÝ‹‹í± Å Å Åss Å Å Ås  s   Å Åsswwssss Å ÅssGGGGGG š š22ß߈ˆ66]]]]a»0 ÖƒƒÚÚ   Ö Ö Ö ÖÚÚ,, ª ª ª ª,,,,,‡‡,bb   fää77ää7’xxxx""ÏÏ ö ö ö öMMMM Ê Ê Ê Ê Ê$ÑÑýýOO¢¢¢ýýýO õùù¦¦¦¦ žùùù¦KÃÃÃÃppppH£ý #é06.4Ô1ô,Š"c4))ÎÎPP££ŸŸŸŸ$ÑÑÑѪOýý¦¦ÕÕ00†,,,ªªWWªªýý®®¦SSWWWW®®Ç"*„*Ï"Çii¼¼mÈÈÈÄÄqqïï•˜˜®®[®®®®W²ääää;à;;¹^¹^µµbbI£££MMúú)Ï!!!!tt¥¥RR­ ø ø øyy''''''ººhhººººººº¾¾sÍs ÁÉÉøøKñžžžžG¢GGdd¾¾¶dddddddd8888ââ    hh  N ôNNûûNNÌÌÌÌuu##¥¥¥J÷÷÷÷÷÷÷÷NNN ô––CCCCCCrrÕŠð;~#žCCCš?????????GGˆˆˆ.××*„ |ׄ„ÛÛÛ€×ׄ* Ó Ó..***„..€€bbbb¹ff¹¹¹¹  ¹¹ á á;; á; á á µ µ µ µbb00Ý8_(è  z ss Å Å Ås  sss Å ÅssÑÑ(sss Å Å  GGGGGG š š22ß߈ˆ Û Û]]]]a0 Ö ( (     Ö Ö00ÚÚ,, §\ ª ª,,,,,‡‡, µ µbb   fää77ää7’ÓÓxx""ÏÏ ö öQQMMMM Ê Ê Ê Ê Ê$ÑÑýýOO¢¢¢ý²²ªOùùKKKùSùù¦KÃÃÃÃppppîH£ý`$#;!áLéÚÎÎÎÎöö££ŸŸŸŸ$ÑÑÑÑOªýý¦¦¦¦ÕÕÕÕ,Ñ,,ªªWWªªWWSS¦SSWWWW®®Ç"ߣ"X”×Çii¼¼mÈÈÈÄÄqqïï•˜˜®®[®®®®²Wääääð•;;¹^¹µµbbI£££MMúúÏt Ç Ç!!tt¥¥RR ø ø ø øyy''''''ºº  ººººººº¾¾ss ÁÉÉžžñKžžžžG¢¢¢dd¾¾kdddddddd8888ââ        ©NNNûûNNÌÌÌÌuu##¥¥ÿ¥÷÷÷÷÷÷÷÷ ô ôN ô––CCCCCCr'™("/=,ˆ!ØžCCCš?????????í¢ò§˜ˆ××*„× |**€€Û€××* Ï Ó Ó Ó Ó***„..€€bbbb¹ff¹¹¹¹  ¹¹;;;; á; á á µ µ µ µbb µ µ008’ É3¼sÍÍs  ssssss s Å Åss Å ÅÉ$ Å Å Å   Å Å š šGG š šGG2222ˆˆˆˆ]] ° +ƒ ( ( (   Úƒƒ00,,ÚÚ\®®XXÚÚ,,,,,, µbb _ _¹¹ääää77ä™â-ÓÓ"""" ö ö££MMMMwwww Ê ÊÑ,OýýOOýg~ªOùùùù¦¦ùSùùùùÃÃpppppp›ö£££Xºº4ÚÒÒ!!ttööPöLLòòÑÑÑÑÑÑÑѪªOOùSSS{{((ÑÑOªWWªªSS®S¦WWWW[uß% +Ò þ*uÃÃii¼¼ÈÈÄÄÄÄïïBB˜˜˜˜®®®®[ªWW‘‘‘‘••èŽ    bbµµöQþ£úúúúÏt!!!!ttRR¥¥¥¥ ø øyy'''''  ºººhhhhh ddÅ sžžžøKKžžG¢ôôdddddd¶d¾ææææé麺  ````NN¡¡ûûNNÌÌÌÌ##Ðu¬¬¬Rÿ¥JJ÷÷÷÷ ô ôNN––CC––CžzŠ("5«6¯6¯/=ðKððð?? ’ ’??????íW"!(å=××1×××**€€€€**××€€ Ó Ó**××..€€ µbb¹¹¹¹  _¹  ¹¹;;ŽŽ á;Ž 3 µbbbbbb00Ý8&3Í(Ís  ÍÍsssssÍ  ss Å Å oÉ Å Å Å    š š í í š šGG22ŒŒˆˆˆˆ]] ° +ƒ ( ( (   Úƒƒ00,,ÚÚ\®®XXÚÚ‡‡,,,, µbb _ _ _ _ Š Šää77äNLâÓÓ||"" ö ö££MMMMwwww$$,†¹ýýOOW n¹ªOùùùùKKùSùùùùppppppö›HH££««%xx!!ttööö›LLòòÑÑÑÑ,,ÑѪªOOùSSS{{((ÑÑ$$Oª²²_ªªªSS®S¦WWWW[uÏ” þI*uii¼¼ÈÈÄÄïïBB˜˜˜˜®®[[®®[ªWW7777;;èŽ ± ±  bbµµöQ£þTTúúÏt!!!!tt ø øÿÿ¥¥ ø øyy'' Ì'''hhºººhhhhh ddÅ sžžøžKKøøG¢ôô¾¾ddddk¾dææææDD  ºº``NNûûûûNNÌÌÌÌ##Ð*¼q´Z¥¥÷÷÷÷ ô ôNN––CC––CžzŠ("5«8 8 1ò¥Kðððššíí????ššG±"!&0=111×××**€€€€**××€€ Ó Ó**××..€€ µbb¹¹¹¹  _¹  ¹¹;;ŽŽ á;Ž 3 µbbbbbb00ƒÝåõzzÍÍÍÍÍsÉ oÉÉÉÉ Å    ŠŠŠŠo oÉÉ D D ñ ñ íG š š2ŒŒç::ßß]]]]]]]]     Ö Ö Ö ÖÚ44Ú,,,,®®®®®®®®ÚÚÚÚÚÚ,,¹¹  µ µ   3 3 á á777GŒ×))xÓ% ËMMMM££ ö öÍÍ{  {{0g ýýªOýWOOùùKKùùùùKK žùÆÆlÆttòòEEH£ý£xx!ÆttHHHHŸŸŸE{{((ÕÕ{ÕùùùSSS(({{$ÑѪgvªªªS®®WWªª¦¦SS¦¦mÇÇ|„*ÏuÃÃiiiiÄÄqqÄÄïïBBëëó˜WW²²[ŠŠ77äŠäеµ^^^¹QQQ\úú!!!!xxxNNVV¥¥RRÐÐ}}''yyººhhhhhhhhhhhhººžøKKôô¢¢KKKKhhd¾ddææææ<—ññkdd¶¶¶¶¥¥RRûûNN####Ì''ÜÄ"˜(%M€aÿ¥÷÷÷÷¡¡NNííííííšš Š °/”5T3ú'Ë¢GGGGííí–– éCGGšO›öI9ÛÛÛÛ××******××**********××**¹¹  ¹¹ff¹¹ f  ¹¹äää ŠŽŽ á áf   ¹¹  4Ú,‡‡ázzÍÍ(((Í$É o oÉÉ Å k    ŠŠŠŠo o o ožž ñ ñ íGõõŒçQöï:ßß]]]]]]]]     Ö Ö‹‹é4,,,,®®®®®®®®ÚÚÚÚÚÚ,, _ _  µ µbbŽŽ á á777’||ÏÏxÓ% ËMMMM££ ö öÍÍ {{  Õ ²ýýªO¢ýOOOOùùKKùùùùKK žùllÆ!ttòòEEH££H!ÆttHHHHŸŸŸE{{((ÕÕ{Õ¦¦ùùùSSS(({{$ÑѪ!•~_ªªS®Ü²ªª¦¦SS¦¦mÇmmuuii¼¼iiiiÄÄÄÄïïBBFFó˜[[WWWW[[[ŠŠ77䊊䵵^^^¹QQQp"@!¯ú!!!!xxxNNûû¥¥RRÐÐ}}yyººhhhhhhhhhhhhººžøKKOO¢¢¦¦KKhhkkkk¾ddd@@ææ<—ññkdd¶¶¶¶ÿ´RûûNN####Ì'6#ò406å6å/s€ZÿRR÷÷¡¡NNíííííí??Åz‚F¬Rè~¢GííGííí–– éCííšš1Œß„€€€€××******××**********××**¹¹  ¹¹  ¹¹ f  ¹¹äää ŠŽŽ á áf   _ _  4Ú,‡,‡/zzz((ÍÍ$ÉÉÉ o o   sÉÉ Å Å Å Å o ožžžžGGõõ:þ%â#-þ:ŒŒ + °]]]]]]     Ö00‹KÅ<44ÚÚ\\®   \ÚÚ,,‡‡,,    µ µ µ µ á á á á7777ÏÏÏÏxÓxxMMMM ö ö££    ÍÍÍÍýýý¢¢¢ýýOOOOùùKKKKKK ž ž žùllÆÆÆÆEEEEAöööpÊÃÆÆttö›››òòòòÍ(ÕÕ(({{SSSS¦¦¦(({{$$,,ªª ÁgWªªS®r‚v²WWSS¦¦ÀÀmmmmÃü¼¼¼iiiqqqqïïBB˜˜ëë ®ªªWWWWWW[[®®77ŠŠŠŠŠŠµµ^^¹þ£Q»ÆTú!!!!xûûûûRR¥¥ÐÐ}}Ôy Ì Ì  ººººººººººººhhÉÉÉÉÉÉvKKKKO©OOKKøøhhÆÆkk¾¾kkkd¾@@ææ————¾¾dd¶¶k&ÿûû¡û####yy‘* 7’8í8í2Ö.ZÿR÷÷÷NN¡¡????ííííÅÅ z~~Ñíííííííí––––ííšš×11×€€€€××××× |**××××××××**××**××¹¹¹¹¹¹f ff   fff’’ä䎎 3Žf       ,,ÚÚÚÚôÕzzÍÍÍÍ$ÉÉÉ o o   sÉÉ Å Å Å Å o ožžžžGGõõ:þ'<'<Y”ŒŒ + °]]]]]]     Ö00‹'ä%/ñ44ÚÚ\\®   \  ,,,,,,    µ µ µ µ á á á á7777ÏÏÏÏxÓxxMMMM ö ö££    ÍÍÍÍ¢¢ý¢¢¢ýýOOOOùùKKKKKKùù žùllllll ê êEE››››pÊÃÆÆ›A››——òòÍ({{(({{SSSS¦¦¦(({{$$ÑÑOOý²²WªªS®®²WWWSS¦¦eeÀÀmmÃü¼¼¼qqÄÄïïBB˜˜ëë®TªªWWWWWW®®77ŠŠŠŠŠŠµµ^^¹þ£QQúŸ!!!!xûûûûRR¥¥ÐÐ}}Ôy Ì Ì  ººººººººººººhhÉÉÉÉÉÉvKKKKôOOO¦¦SSÂÂooÆÆkkkkkd¾@@@@——<<¾¾dd¶¶¶¬iÿ¡¡ F¡####yyÌÜ5/s6868.ÆÓZÿR÷÷÷NN¡¡????ííííkkÅkÉÉvÁíííí ’ ’íí––––ííšš |×× |€€€€ | |××× |**××11××××** | |**××¹¹¹¹f ff   fff’’ä䎎 3Žf       ,,ÚÚÚÚ׸ + +´´´´2Œß … Û Û Û   ° +]]]] ° °]]ˆãˆˆ22ßßãò +dI:ß߈ˆˆˆ Û Û66 ª ª ª ªXX_ñµ[–4ÚÚÚÈÈÈ"ÌqqBBïï • •BB%%x "" t t    MMú    ú%%xxxxxx££ ö ö ö ö ö ö ß ß ß ß ‰ã66ŒŒ: ß::::::::666  ¸¸ ´aa ê ê—— êEE êllppttttppÃÃÃÃÃÃpp{{{{wwOOOOSS¦¦Sù¦¦OOOO¦¦SS®®SSOOýýýýýýSSªªýý¼¼iiiiee¸¸œœBBë똘ïïBB˜˜ëë®®®®®®TTªªª   ±¹n  ^^  ¹¹¹¹úúúúúúMMÏÏttË pººººdddd<<<<¥¥¥¥NNNNyyyyyy''¢¢OO¢GôôK¦¦Køø¦¦¦¦oÊssÆÆkkk¥¥RRûû©©©Nû¡NNNNÐ**ÐuuuuÌÌyyÐÐÐ*Ä!=*·*· ¼¬R}}####uu––CCííííššííGGšš€€€€****UUUU¬¬¬¬nkkkkÁÁÁÁÁÁ] + +¬¬¬UU ¨¬¬¬¬§M      úúúxxxxxx% Ë á;;;’’ääf     _ _mmmmm¸ + +´´´´ ×2ß … Û Û Û]] ° +]]]] ° °]] .ˆ . .22ß߈ãë:ßß߈ˆˆˆ Û Û66 ª ªXX_á<<á4ÚÚÚÈ}ŒçqÌqïï • •BB%%x "" t t    MMú    ú%%xxxxxx££ ö ö ö ö ö ö ß ß:: ‰ã66ŒŒ: ß ß ß ß ß::::666  ¸¸ ´aaEE——EŸE êllppppÃÃÃÃÃÃpp{{{{$$wwOOOOSS¦¦Sù¦¦OOOO¦¦SS®®SSOOýýýýýý¦¦SSªªýý¼¼iiii¼¼eeBBBBë똘ïïBB˜˜ëë®®®®®®TTª   ±^  ^^  ¹¹úúúúúúMMÏÏttË pººººdddd â â<<ê 5¥¥¥¥NNNNyyyyyy''GüOO¢GôôK¦¦SS¦[Ê$wwƒÎssÆÆÆÆÆkkk¥¥RRûû©©©Nû¡NNNNuÐÐuuuuuÌÌyyÐÐÐ*Z´iia¬R÷}}####uu––CCííííššííííšš€€€€****UUUU¬¬¬¬nkkkkÁÁÁÁÁÁ ¨ + +a¬¬UU ¨¬¬¬¬§M      úúúxxxxxx% Ë á;;;’’ääf     ¹¹mmÈÈ]] ° °´´ … … … … . . .ˆ¸] ]]]]] + +]] Y Yˆˆ Û Û … …22ˆˆˆã:ßß …ˆˆˆˆ Û Û Û Û ª ªXXXX²²Ú44ÚÚÚÚ"ç(%(%˜yÌqïïïïBB • • Ë Ë Ë Ë""ÏÏúú òMú    úÓx%%xx Ë% ö ö££ ö ö ö öŒŒ::ãããã::ŒŒ ß ß ß ßŒŒ ß:66ã ‰ ] ]  aaaa————òòE ê ¿tÃpppÃÃpppppp{{{{$$$$OO¢ý¦¦¦¦¦¦¦OOOOSSSSSSOOýýýýýýùS¦¦WWWýiiÃiiÃiieeÀeBBïïë똘ïïBBë똘[[®®TTT®WW¹¹ ±^^¹¹  ¹¹f §MM òŸŸMM!!ttººh dddd â â ø ø ø øû ¡ ¡û''''''ÔÔG¢OOôô¢¢øøøS[[­­[[wwwwÕ{Îssssss¾ÿÿRR©©ûûNNûûû¡©NuuuuuuuuyyyyÐuÐ*RRRRRR¥¥######uu––CCšší ’ííššííí퀀€€****¬¬¬¬ÁÁ ½kkÁÁÁÁnÁÁUUUUYY¬¬ ¨ ¨¬¬ þ þMM    MM§§xx Ë ËxÓ%%;;;;?äää     f¹¹ À Àmm]] ° ° Y Y … … … … . . .ˆ]  ]]]]] + +]]´´ˆˆ Û Û … …22ˆˆã=ß …ß …ˆˆˆˆ Û Û Û Û ª ªXXXX²²ÚDDé444"2$)§ÓÌqïïïïBB • • Ë Ë Ë Ë""ÏÏúúM§ú    úÓx Ë Ëxx Ë% ö ö££ ö ö ö öŒŒ::ãããã ß ßŒŒ::::ŒŒ: ß66 ‰ . ] ]  aaaa——————E êttÃpppÃÃpppppp{{{{$$$$OO¢ý¦¦¦¦¦¦¦ªªªªSSSSSSOOýýýýýýùS¦¦WWWýiiÃiiiieee BBïïë똘ïïBBë똘[[®®TTT®WWªª^^ ±^^¹¹  ¹¹¹¹f §MM òŸŸMM!!ÏϺºh dddd â â ø ø ø øû ¡ ¡û''''''ÔÔ íGOOOO¢¢øøøS[ŵµ,,,,0Õ(ÎÎÎssssÿÿRR©©ûûNNûûû¡N ôuuuuuuuuyyÐuuÐRR÷÷÷÷¥¥######uu––CCšší ’ííššííí퀀€€****¬¬¬¬ÁÁ ½kkÁÁnÁÁ¯¯UU þ þ¬¬ ¨ ¨ Q Q þ þMMúúMMMMxx%%xÓ%%;;––™???ff   f¹¹ À Àmmaa´´ … … … …22 × ×   ° °]]]]´´´´ Y´ …ß22 Û Û Û Û66ãã Û Û Û Ûˆãˆˆ22 … …XXXX_áKjÅžá‡Ó˜˜:ÐÈmïïBB ëF™™Ï t""xx%%QQ££££££xx Ë Ëxxxx££ ö ö ö ö I£6666Œ 2 ß ß66ãããã6 ß ß ß ßaa ´ ´  ¸¸îîîîîîîîlÆtÃÃlÆÆÆ$$$$ÍÍÕ ¢¢OOªªýý¦K¦®S®®¦¦ªªªª¦¦SSýýýý¢¢OOSù¼¼¼¼¼¼¼ee¼¼ë똘BBBB>˜˜˜BBBB®®®®®®®®µµ [µ    ¹¹  µµbb££ööŸŸMMttÏÏttÏÏhhº ` `ººº â â â â< âû ¡ ¡ ¡NNNNyyyy''''žžKKžžK¦¦¦¦µ/µµb½8ÝÝÝŽ44$$$ÊwwÂVV©©©©ûû÷÷J¥÷÷JJyyuuuu####ÌÌyy¥¥÷÷NNNNuu##ÌÌ??íí–––– éCCC––––××××€€€€¬¬¬¬ þ þ¬¬ ½ ½ ½ÁÁrkkUUUU ¨ ¨UUU ú ¨ ¨UU ö ö£þ§MMMxxÓÓÏÏÏÏŽèøRR–;½½bbbb´´ … … … …2222   + +]]]]´´´´´ Y …ß22 Û Û Û Û66ˆˆ Û Û Û Ûˆãˆˆ22 … …XXXX_<¦)>*™á‡uuÈmïïBB ëF™™Ï t""xx Ë ËQQ££££þþÓÓ%%ÓÓxx££ ö ö ö ö I£6666Œ 2 ß ß66ãã6666ãã6 ß ß …:aa ´ ´  ] ]îîîîîîîîlÆtÃÃÃÃlÆll$$$$ÍÍ  ¢¢OOOOýý¦K¦®ccµµªªOO¦¦SSýýýý¢¢OO¦¦Sù¼¼¼¼¼¼¼mmÀÀ¼¼iië똘BBBB>˜˜˜BBBB®®®®®®®®[[µµµ    ¹¹  bbIIööŸŸMMtttttttthhº ` `ººº â â â—< âû ¡ûû©©NNyyÔÔ''''žžKKCøK¦¦¦¦[j̽’88íC鎎ÙÙÙwwÂVV©©©©ûû÷÷J¥÷÷¥¥yyyyuuuu####ÌÌyy¥¥÷÷ ô ô ô ôuu##ÌÌyy??íí–––– éC é é––––××××€€€€¬¬¬¬YY¬¬ ½ ½ ½ÁÁ ½rrkkUUUU ¨ ¨UUU ú ¨ ¨UU ö ö I£§MMMxxxxÏÏÏÏèC¼!–;½½bbbb´´ … … … … … …22]] + + + °]]aa´´´´´´ ×2:ß Û Û Û Ûˆˆˆˆˆˆˆˆˆˆ Û Û22 × × ªX²²²Djjž444qqÄÄÈÈïïïï™™FFÏÏÏÏ% Ë Ë Ë£þQQþþþþÚÚ-ÓÓÓ% Ë I I I£ öQ££ ‰ã66ŒŒŒŒãã66ãã ‰ ‰6666 ß ß 2Œaaaa ] ]  › æAAîîA›lltÃÃppllt$$$$ÍÍÍÍ¢¢OOOOý¢ùù¦µÍÍjSOO¢¢¦¦¦¦OOýýOOOªSS¦¦¼¼¼¼ii&|ÇmmiiiiF똘ïïB çFF˜˜BBBB®®®®®®[¶¶®T®®TTµµµµ  ¹¹b½µIIIIŸŸMMtt!!tt Ç Çººh  h  â â â â<<—<NNNNûûN©yÔ'''yyžžKKKKžø¦¦SS­½½½rÌG’šôžC–ñ<áá,$$°V©©©VVR÷¥¥÷÷÷÷ÌÌyy# ÈuuuuuuÌÌ÷÷JJ ô ô¡¡uuuuÌÌyíí??–––––ðð– é é é é„„1×....¬¬¬¬YY¬¬kkÁÁÅÅÅÅkk ¨ ¨ ¨UU ¨ ¨UU ¨ ¨ ú úUU ö ö ö öúúú   xxx"|ÏÏ–ð­bRC–;½b µ µ µÄÄ Y Y … … … … … …22]] ° ° ° +]]´´´´´´2Œ:ß Û Û Û Ûˆˆˆˆˆˆˆˆˆˆ Û Û × × × × ª ª ªX²²²44<<é444ÄÄÈÈïïJJ™™ ë ëÏÏÏÏ% Ë%% I£QQþþþ³ŸT—ˆˆÓ% Ë I I I£ öQ££ ‰ã66ŒŒŒŒãã66ãã ‰ ‰6666 ß ß 2Œaa¼¼¸¸  AAAAîîA›ll ¿ ¿tÃÃppÆÆÎÎttt$$$$ÍÍÍÍ¢¢OOOO¢ýùù¦µz'V,À(zc®ªªýý¦¦OO¢¢OOOªSS¦¦¼¼¼¼iiÛ1æ1Çiiii F˜˜ïïB çFF˜˜BBBB®®®®®®Õz ®®®TTµµµµ  ¹È#ȽµIIIIŸŸMMtt!!tt Ç Çºº h h  â â<<<<< âNNNNûû©.ÔÜ''ÔÔžžKKKKžø¦¦SS­½rÌ'¢¢ O!©!Sø ¦KK ¦#[ñ4w°V©©©VVR÷¥¥÷÷÷÷ÌÌyy# ÈuuuuuuÌÌ÷÷JJNN¡¡uu   r r Äíí??––––ð–ð– é é é é„„1×....¬¬¬¬ þ þ¬¬kkÁÁkkÅÅkk ¨ ¨ ¨UU ¨ ¨UU ¨ ¨UUUU ö öQQúúú   xxx"|ÏÏ;–CCCð–b½ µ µ µ i i ]]]´´ ° ° ° ° Û Û Û Û2222 ° + + +a´´ß:ç2ˆˆ66´aa ° +]] ¬ ¬ Y Y ª ª ª ª T®®®,‡‡á‡‡ÚÚ ëF™™FF™™mmmm À À§Múú££QQÏÏÏ)€€Úù)_.É%OÆ\§MM t tÏÏxx%%¼¼¼a¸¸¸¸¸¸¸¸ ´66666666  eeaallÆÆîî››îî “ “llÆÆpppp!!0@ÒâýOO H HOO¢¢¢¢O õ¢¢¦¦®®Á"ð1&3Û+Ñ ²ªªýýÑÑÑÑ{{{{ÑÑÑÑ{{{{::::>>ë «phIçç””qqÄĘ˜ëëë똘00݃0‹õ[<Ù $bbµµbbJÄ"¼ð;ŽŽtttttttÏ!!!!ËË p p<<º ` h###}yy'....Ø}}}žžKK¢¢ôO©©üW± CøR­ ü#±#%¹&#[$µ#[!'&‘(™ z ýPõ^°V©©©©RR¥¥NN¡¡¥J÷÷JJ÷÷ÌÌuuuuJJJJ¡¡¡¡ È È È È ½ ½ÁÁÁr ½kk ½ ½×ׄ*€€€€××**€€ Ó Ó??ííí ’ ’ííí???? ’ ’**** Ó Ó€€UU ¨UUUU I IQQþþ££xxxxÏÏ||ff¹½jjŽŽ;;ää Š ŠBB • • • • ]]] Y Y ° ° ° ° Û Û Û Û2222 ° + + +a Y Y …ߌŒˆˆ66iaa +e]] Y Y ª ª ª ª T®®®,‡,‡‡‡4  ëF™™ ë ë™™mmmm§Múú££QQÏÏÏ)ÚÚc2Ø50#{§§ÏÏÏÏxx Ë Ë¼¼¼a¸¸¸¸¸¸¸¸ ´66666666ee  aallÆÆîî››îî “ “llÆÆpppp!!ÖåÒâýOO¢¢OO¢¢¢¢O õ¢¢¦¦SS Ñ#)%¥Ñ ²ªªýýÑÑÑÑ{{{{wwÑÑ{{{{::::ããëëœöI”AA::qqÄĘ˜ëëë똘åš8Ý0Öåš–áÙÙbbµµð)EÌJ•ŽŽttttÏÏtÏ!!!!ËË p p 5 5<<º ` h}}#}yy'.ã‰Ô}Ø}}žžKK¢¢O©OOüW± ¹¹Cø­ #±&f(n+#,Ô,Ô,Ô(Å#Ü#Ü!Õ  ²ªP^°V©©©©RR¥¥NNûû¥J÷÷JJ÷÷ÌÌuuuuJJJJ¡¡¡¡ È È È È ½ ½ ½ ½ÁÁÁr ½kk ½ ½×ׄ*€€€€11**€€ Ó Ó??ííí ’ ’ííí????íí**** Ó Ó & &UU ¨UUUU££QQ££££xxxx))||ff¹b½jjŽŽ á áää Š ŠBB • • • • ° °]]´´ Y´ Y´]]]] Û Û .ˆ … …22]] ° °´ Y Y Y22ßß6 Û Û Ûa»m"¸XXXX®®,,ÚÚ,,‡, ëF™™ ë ë ë ë À À§§MM ö öQ«ÏÏ)„=—ò'W.$¢¿¯UUUÏÏ""xx Ë Ëaa¸¸ eee¸aaã ‰ãã6666¸¸¸¸aa ´llÆl ¿ÆlAAîîîîîîÃÃpÊÆÆ{{xpp¢ýOO¢ýý¢¢¢¢¢¢¢O õK¦SS²Á#Ø#²ýOO¢ýÑÑÑÑÕ{ÍÍww$${{{{::::ãã>>AAAçç猌ÄÄÄÄëë>>˜˜˜ó¢±’݃ƒ0‹4,,Ù,‡µbµµ•ZbR•;à;Ït!!!! Ç!ÏÏ!! 5 5<<<< ³ºº¾¾¾d}}ÐÐyyÜ.Ô++++žžKK¢¢O©üüüW^¹n𥠴#i%¹+#-+/à2>2>1‘,''?#/ zÅ ²õ°°©VVûûÿ¥R÷NNNN÷÷÷÷JÿRRÌÌuuuuJJJJ¡¡ ôNuuuuÌ r ½ ½kkÁÁnnkk××××€€€€ß9Œ×€€€€???š? å??íí ’ ’ ’ííí**** Ó Ó &€UUUUUU ¨£££þ ö öQQxx%€Œ1×|¹¹¹¹ ½½½ŽŽ; á7777 • • • •BB ° °]]´´´aa´]]]] Û Û .ˆßß22]] ° °´ Y Y Y22ßß6 Û Û Ûa"ŒÇ¸XXXX®®,,ÚÚ,,‡, ëF™™ ë ë ë ë Àu§§MM ö öQ«))„H%{)Š"ÆLt¿¯UúúúÏÏ""xx%%aa¸¸ eee¸aa>ããã6666 ]¸¸aaillÆl ¿ÆlAAîî “ “ “ “ÃÃpÊÆÆÆÆÃpp¢ýOO¢ýý¢¢¢¢¢ýýªOK¦SSW²¹¹¹_WWOO H¢ÑÑÑÑÕ{ÍÍww$${{{{::::>>>>çççŒççççiiÄÄëë>>˜˜˜ó’í8ƒƒƒÖ0ÙÙ,,Ù Ò,µbµµ;•Cè•;à;Ït!! Ç Ç Ç!tt!! 5 5<<<<h ººdd¾d##ÐÐyy'''ÔyÐÐ++žžKK¢¢ôOW¢üW©^𥠴#i',}1:3ï6N6N5 2ë.)ô$Š g _P°°^VVûûÿ¥R÷NNNN÷÷÷÷¥¥RRÌÌuuuuJJJJ¡¡ ôNuuuuÌ r ½ ½kkÁÁnnkk××××€€€€”£æ1€€ÛÛ???šš???íííí ’í ’ ’**** Ó Ó &€UUUUUU ¨££ I£ ö ö ö öxx%€æA×|¹¹¹¹bbbbŽŽ; á7777 • •ïïBB Y´´´aa»Ë××te´´ … …2Œãˆˆˆ]]]]]] ]2Œ22ˆˆˆˆ ° °ee»i´´´ ª ª ª,,ÚÚƒƒƒƒBBïï ë ë™™ÄÄÄÌqyXþ££  úúúÓ-5c0¥4µ',H`««úúúúxx Ë% Ë Ëxxaaaa  ee¼¼a¼ŒŒ ß ßããã㸸¸¸e ¸¸llÃ×—EEî “AAÃÃÃÃt ¿ÆÆpppp¦KK¦¦ùù¢¢¢ý¦¦¦KùùSSS®[[®®SSOO¢¢$ÑÑÑÑ$$ww$$Í(  ::ŒŒë::çAÄÄ>>˜˜••••Ý݃ƒƒƒÖÖ,,,‡,,µµ^^¹‘ìä䎎ààËË  !|ÏÏ!!tttt â â¾d ·dd¾¾ÐÐÐÐ#}}}''ÐÐ++KKKñG¢¢¢¢¢üü^Gü±#À(n05J6¤6û6û6N4ó1e-V&‘!'ººª^^°°©©VVVV©N÷R÷÷NNNN¥¥¥¥##uuÌÌyJJ÷÷NNN ôuu##ÁÁkÅkkkk**„„××11ˆˆˆ.××××––––íííí–––– é é–– Ó Ó Ó Ó„***¬¬YYUUUU        ££ ö öxx%%€€%%½½bb¹¹  ŽŽ á á Šää ŠBB •ïBB´»»pê)o)oHßߌç㈈ˆ]]]]]] ]2Œ22ˆˆˆˆ + + + +a´´ ª P ª ª,,ÚÚƒƒƒƒBBïï ë ë™™ÄÄÄÌ&ˆ.Xþ££  úúúÓ-ÚŸ#',!ÂH`QQúúúúxx Ë% Ë Ëxxaaii¼¼  ee¼¼a¼ŒŒ::ããã㸸¸¸e ¸¸llÃ×—EEî “››ÃÃÃÃÆÆpp¦KKK¦¦ùù¢¢¢ý¦¦¦KùùSSùSSSSSOO¢¢$ÑÑÑÑ$$ww$$Í({{::ŒŒë::ŒçÄĘ˜˜˜••••ÝÝ((ƒƒÖÖ,, Ò,,,µµ^^^¹7‘ä䎎ààËËtt! ÇÏÏ!!tttt â â¾dldd¾¾ÐÐÐÐ#}}}Ü'ÐÐ++KKKñG¢¢¢¢¢üü©^¹ì¡V"f'/25J6¤6û6û7¨6N40 )F!'oºª¸¸°°VVVV©N ÷÷÷NNNN¥¥ÿÿ##uuÌÌyJJ ô ôN ôuu##ÁÁkÅkkkk„„„„××11... Ó××××––––íííí–––– é é–– Ó Ó Ó Ó*„**¬¬ þ þUUUU        ££QQÓÓ%%%%%%½½bb¹¹  ŽŽ á á Šää ŠBB •ïBB´´a»i-+ 5ž5ž)o|»a´´ß …ß:66ˆˆ]]]] + ° ° °222266ˆˆ + +¸¸´´´´´´® T ª ª ª ª  ,, Ö Ö Ö ÖBBB ë ë™™ÄÄyã \M³þ££MMúúÓ-ÚP£“³Xþ£úú§M Ë Ë Ë Ë  xx ´¼¼ii¼¼  ¸¸¼¼aaŒŒ::ã㸸¸¸¸¸¸¸ll ¿ ¿Ã×ò——îî››ppÃÃllÆÆÆlÃÃKKKKùùKK¢¢OO¦¦ùùùùùùK¦SSSS¦¦ý¢¢¢ÑÑÑÑÑÑ$$$$ÑÑÍÍÍ(çç::>ããã::ŒŒqqÄÄóó˜˜BBBBƒƒÖÖÖÖ00 Ò,Ùbb^^  䊊Šàà33ËËtttttt!!!!tÏ<< â<¾¾¾dÐÐÐÐ}#++''ÐÐ}}ñKKKG¢¢¢¢¢©©W±^¹?ôV#À(n,}3ï6¤6û6û6û6û40 )F"‚vg_ªe  °©ûûûû÷ ÷÷¡¡NNÿR##uuÌÌÌÌ ÷JJ ôN¡¡ÐuuuÁÁkÅkkkk ½ ½kÅßß×11111..€€****––––??íí–– éC–– é 退 Ó Ó××**¬¬ þ þUUUU ò ò    ££Q«-Ó%%ÓÓÓÓbbbb¹¹  ŽŽ á á7’’7BBBBïï´´ai--Õ6ø6ø.Ù1»a´´ …ßß:ãã]]]] + ° ° °22ŒŒ66ããee¸¸´´´´´´® T ª ª ª ª  ,, Ö Ö Ö ÖBBB ë ë™™ÄĈ \ X££MMúúÓ-Úö«H9³Xþ£úúM§ Ë Ë Ë ËxxxxiËxxee¸¸aaaaŒŒ ß ß66ã㸸¸¸¸¸¸¸ll ¿ ¿ppÃxò———îî››ppÆÆÆÆÆlÃÃÃÃKKKKùùKK¢¢OO¦¦ùùùùùùK¦SSSS¦¦ý¢¢¢ÑÑÑÑÑÑ$$$$ÑÑ s s sÍçç::>ããã::ŒŒqq.ãMóóBBBBƒƒÖÖÖÖÖÖ Ò,Ùbbbb¹¹  䊊Šàà33ËËtttttt!!!!tÏ<< â<dd¾dÐÐÐÐ}#ÐÐ''''++}}ñKKK¢G¢¢¢¢OOW±^¹?ôü±$^(n1:3ï6û6û5 5 2À.°&‘"‚vgºe  °©NûûûûR÷÷÷ûûNN´.ˬ##uuÌÌÌÌ ÷JJ ôN¡¡Ðuuu gÅkkkkk ½ ½kÅ9îA挌æ1..€€****––––ššíí–– éC–– é 退..××** Q Q þ þUUUUMM    ££Q«-Ó%%ÓÓxxbbbb¹¹  ŽŽ á á7’’7BBBBïï´´aee"A&¤&¤#KKžžžžKKõOªOss Å ssssõõ šõK¦µ±WªOžžžžGGGG š š šõˆ . Û Û .ˆˆˆ ° °]] Å ÅssÉÉ Å Å  Í(ÝÝÜÜ''~~++­b¼"Œ"bÿÿRRRR Ð Ð~~''ÔÔôO±Ð& %F½øssÅÅššššCCññv ÁÅÅÅÅ''yyÐÐÐ+Vûûû ôNûû©©ûûRR¥¥ÔÔyyyyyy í íššžžññÅÅÅ ÅÅssˆˆÛÛ2ç”999AAŒ2ßßv  ssššG íššššñKžžGGGGžCññCCžžÉÉ$Ž$Ä+ˆ%qèÑvssssˆˆÛÛÛÛÛÛ´´]]]]RRRRRRRRÐÐÐÐyy'' 5<<ddddddddê<<ddººººNNû ¡ ¡ ¡ûû#}ÐÐ+ÐÐо¾lÆÂÂooÆ!(ƒy6# &t'Î+Þ.“1õ4ª3ý2¢/k+\%E!5)tm¸´YYÿÿ¤÷JJJJ FFFóóFF¨¸]NBB™™ ë ë,,,,ÝÝ00® TXXXX''ÔÔÔ zÔ z~~~~++~3ÿ$Ó%€è33Ø'''''''~~++''~~~~~~ Ð Ðhhhhhhhh » » » d d››IIö›››ppttÇ!›››››› îI´´a»eeÇff_ªKKžžžž ñ ñõOªOss Å ssssõõ šõ¦µÔ">…ÁªOžžžžGGGGõõ šõãˆ Û Û .ˆˆˆ ° °]] Å ÅssÉÉ Å Å  sÍÍÍ''~~++­b¼m"ȸ­ÿÿRRRR Ð Ð~~''ÔÔš©*Y4)2ÏSssÅÅššššCCññvÑvÅÅÅÅ''yyÐÐ vÐVûûûN©ûû©©ûûRR¥¥ÔÔyyÔÔÔÔGGôôžžññÅÅÅ ÅÅssˆˆÛÛ2çî”9î`«çŒßßvÅÅssššG íššššñKžžGGGGžCññCCžžÉÉ$ø2M6\1 øÑvssssˆˆ55ÛÛÛÛ´´]]]]RRRRRRRRÐÐÐÐyy''ê<<ddddddddê<<ddººººNNû ¡ ¡ ¡ûû#}ÐÐ+ÐÐÐhh¾¾lÂÂooÆ!Î(iÄ6) +*ƒ&t&t))+0-å.“-8*%ò#êÛ)tm¸´YYÿÿ¤R÷JJJJ F  N™FFóNNó™™ ë ë,,,,ƒƒ00® TXXXX''ÔÔÔ z zÔ~~~~++Ø"2\4d*ê33Ø'''''''~~++ÜÜ~~~~~~ Ð Ðhhhhhhhh » » »¿¿ööIIö›››ppttttÇ!tt›››››› îI´´a»¿¿Wüü¢žž ñ ñžž ñKOOOO    Å ssõõõO®‚/Ç3×0Ë%÷ÁWKKKKGGGGõõGGˆˆ Û Ûˆãˆ . ° °]]´´´´ss Å ÅÉÉ Å Å Å Å Å ÅssÔÔ''~~~~¼¼¼m^R­­ ¥ ¥RR Ð Ð~~''ÔÔGWn"ç*°'ûŦ ÅÅÅÅÅ k kGGššññCC$3Ž~ÍsyyyÔ}}##NNûûN©©©NNûû¥¥RRÔÔ Ì ÌÔÔÔÔ¢GôšžžžžÅÅÅÅÅÅssÛÛˆˆßßççA`%‡hî922ÉÉÅÅÅÅššššôšGGžžžžGGšôžžññññññÉÉ~)0E+ˆðÑvssÅ 5Ûˆˆ5Û..YY]]°°RRRRRRRR}###yyÔÔ<<êêê â âddhh  NNNNû ¡NNÐÐ##ÐÐ##hhhhlloÆ!ÎÎiÄ.!˜####$l%Æ'!%Æ#=#= ˆ-)tm¸´YÿÿR÷R÷JJ÷FFóN  ó™FF™™ïï ë ë ë ëÚÚ‡, Ö Ö Ö Ö ª ª ª ª''ÔÔ''''~~~~+++:+—/§&-Jà++/Ô''''ÔÔ~~++//' Ð Ð Ð Ð #~~~hhhh »Âh¿¿¿¿I££III››ppÇÇÇÇÇÇÇÇ î î î î››››±±Zµ´ip"×t¿ü¢¢Gžž ñ ñžž ñKõõõõ     ÅssõõõO®‚2|6Œ650Ë!:±KKKKGGGG š šGGˆˆ Û Û .ˆˆ . ° °]]´´´´ss Å ÅÉÉ Å Å Å Å Å ÅssÔÔ''ØØ~~bÌÌm^­­RRÿÿRR Ð Ð~~''ÔÔG¢©¹bK ÅÅÅÅÅ k k í íššññCC$~Ù~syyyÔ}}##NNûûN©©©NNûû¥¥RRÔÔ''ÔÔÔÔ¢GôšCCžžÅÅ  ÅÅssÛÛˆˆßß22çœþþî922ÉÉÅÅÅÅššššôšGGžžžžGGšôCCññññññÉÉ$ÙCRð+vssÅ 5ÛˆˆÛ5..YY]] + +RRRRRRRR}#}}yyyy<< 5 â âddhh  NNNNû ¡NNÐÐØ#ÐÐ##hhhhoÆ!ÎÎiÓMM \#!· ˆ ˆÓ-Ï]YÿÿÿR÷R÷JJ÷FFóN  NóFF™™ïïFF ë ëÚÚ‡, Ö Ö Ö Ö ª ª ª ª''ÔÔ''''~~~~+++…•ÿ´¤:…++/Ô''''ÔÔ~~++//' Ð Ð Ð Ð #~~~hhhh »Âh¿¿¿¿I££III››ppÇÇÇÇÇÇÇÇ î î î î››››±±^^µipË9!ýŒmOõ¢Gõõõõ ñ ñ ñ ñžž ñ ñÉÉÉÉÉ oGGõõ¦Å#™+¸*´%JØOõõõžžžž D Džžˆˆ6 Û … … ×2 Y Y´´]]]] o o   Å Å Å Å ''''++Ø3u#¤) ïq¼ZVV© N©©VV''ÔÔ Ð Ð~~ššôOøøžž Á oÅÅššššCCCžssz Å kssyyyy+ÐÐÐ¥¥¥¥¥¥RRNNûû¥¥R­Ð vÐÐ''yÔžCññššGGÅÅÅ ooˆˆˆˆ2222==çŒßßoÉÅÅÅÅššššññññšôôôññžž í íššGGššoooÉsÍ(‚+vÉÉ ÅÅňˆÛÛ„ß22]]]]´´´©©VVRRÿÿ}}+Ð''yy<< ‹ ‹ææººhhººhh99ææddhhººN©ûûû ¡ ¡ûyÔÔyÐÐÐÐhhhh¾¾lllÆww¼qq””ïIQ«!`«&€xm +°¬¬ÿ¤NNû ÷÷÷JJFF ëF™™™™FF™™Ú ,,  ,,XXXX~~++~~~~ Ð Ð~~~~ Ð+…àààÜÜÔÔ++~~+ Ð~~~~~~…+~~'''' Ð Ð~~ÂÂhhhh¿lhÂÂÂTddTIIIIppppppppppEE — —EEòò±±^¹ fÃÚŸ!ý#XæÇªO¢Gõõõõ ñ ñ ñ ñžž ñ ñÉÉÉÉÉ oGGõõKµjÁ _ªOõõõ D Džžžžžžˆˆ6 Û … … ×2 Y Y´´]]]] o o   Å Å Å Å ''''++Ø3Ð*h3â+ÃÌbZZVV© N©©VV''ÔÔ Ð Ð~~šššôžžžž ÁoÉÅÅššššCCCž ÅÅ kssyyyy+ÐÐÐ¥¥¥¥¥¥RRNNûû¥¥R­Ð vÐÐ''yÔC éññššGG  Å ÉɈˆˆˆ222255ããŒ2ßßoÉÅÅÅÅššššññññšôôôññžžGGššGGššoooÉsÍÍsvvÉÉ ÅÅňˆÛÛ„ß22]]]]´´´©©VV­­ÿÿ}}+Ð Ì Ìyy<<ææ@@ººhhººhh““ææddhhºº©ûû ¡û ¡ûyÔÔy++ÐÐhh  ddlllÆÂÂb¼¼¼ßß”ïœö«öqËÃi¸°U¬¬ÿ¤NNû ÷ïïFF ëF™™™™FF™™Ú ,,ÚÚ,,XXXX~~++~~~~++~~~~ Ð++…++ÔÔ++ØØ+ Ð~~~~~~+ Ð~~'''' Ð Ð~~hhhhhh d¿lh¯(ÝdþIIIppppppppppEE — —EEòò±±^¹fÀx=% -(+w$²ÞªOõõGGõõKKžžžž ñ ñGGõõKKWüüüOõõõž D ñ ñ ñ ñžž Û6ˆˆ … …22]]]]ÉÉ   Å Åss Å Å o oÉÉ z z''~~~3À”&Y”Ä´­­VV©© ü ü©©ÔÔ'' Ð Ð~~ššGGCCžžoÉÅÅššššCCññÅÅÅÅssssyy''}}##¥¥¥¥¥¥¥ JNNûûÿ¥¥ÿ}###''yyCCžC í íššÍsÅÅvÉÉÛÛ55ß„22ˆˆˆãßß22ÅÅÅÅGGGGžžžžššôôžžññGGGGššššoo Á ÁsÍ  ÉÉÉÉ Å  ÛÛ €Û2222]] + +´´´´^­­­­ØØ+Ðyyyy<<““““ººhhhh< â â<ææ“9ddh   ©©NN©ûû''yÔ++Ðкººdd¾¾llooÊo´bb…ß::AœI”iü¸¸UU¬¬RRUû  JJBFF™™™™™™FF™™ÚÚÚÚ,‡ÚÚ ª ªXX®®®® Ð+ØØ~~~~++~~~~~~~~~~'ÔÔ~Ø++~~~~+ Ð Ð Ð Ð Ð~~'''' Ð Ð~~hhhhhhhhÂÂk \Pö›› lÇ!ÇppËËpppËppŸE êEEEòò^^ff—,{5G7ü7¥3–& )ªõõGGõªµžžžž ñ ñGGõõKKKK¢G¢¢Oõõõùž ñ ñ ñ ñžž Û6ˆˆßß22]]]]ÉÉss Å Åss Å Å o oÉÉÔÔ''~~ØØ±fÀf´Z­­ ü ü©© ü ü©©ÔÔ'' Ð Ð~~šš í íCCCCÉoÅÅššššCCññÅÅÅÅssssÔÔ''####¥¥¥¥¥¥¥ JNNûûÿ¥¥ÿ}### Ì ÌyyCCžC í íššÍsÅÅvÉÉÛÛ55ß„22ˆˆˆãßß22ÅÅÅÅGGGGžžžžôôôôžžññGGGGššôôoo Á ÁsÍ  ÉÉÉÉ Å  55Û52222··e°´´^ØØ+Ðyyyy<<““““ººººhh  < â< âææ“9ddh   N©©NN©ûû''yÔÐÐÐкºº¾¾¾¾lloooZ´…ßßß2Œ::´a]¨UU¬¬RRû   JJBFF™™™™™™FF™™ÚÚÚÚ,‡ÚÚXX®®®®+ Ð~~~~~~ Ð Ð~~~~~~~~~~'ÔÔ~Ø++~~~~…+ Ð Ð Ð Ð~~'''' Ð Ð~~hhhhhhhh » »hhLƶPö››Ç!!|xxËËËËpppËËËŸEEŸEEòò^^fÐÐ)6¡:8©7ü7ü,{ˆ[KKõõOzKKK ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñÉ$wÑ  z   sÍ((ÍsÉÉss   + +]]¸¸]]ˆˆ . . . .66 ñ ñ ñ ñ ñ ñ ñ ñõõ í í šõ š š Ð Ð~~ Ð Ð~~©­­ÿÿÿÿRRRRRR©© ü ü ü ü©©oo Á ÁššG í ?šššCCCCññññv$$ÑvVûNNR øRRÐÐÐÐÔyy  ø ø¥¥¥¥RRû ¡NN¥¥ J¥šôôššš¢¢Ís  ss  222ŒÛÛˆˆ´´ +°]]Å ÅÅ ÅÅÅÉÉssssššššôôššñKññññKñooÉÉvvü¢šôññžø5ˆˆßßßßßߌ2ß9çA66‰‰22:àZÿR øVûNNddºhhºººººº hh ddææ99 Ì Ì''ÐÐ##¥¥¥¥ ¡û©Nººººhh¾ÆÆ¾……2×22222…ß]UUUURR¤¤NNó™FFFFïïBFF™™BBïïBB®®®®\XX²XXX''''~~ Ð Ð'''~~~~'ÔÔ++ Ð Ð++++''RRRRRRRR©©©©RRR­@ æ““@@““hhhhIþ³XLòòòxÒñý“)Îxxpppppp à ÃppËp^¹È}Ø)6¡8©7O7ü7ü0Š—µ¦KKõõO_KK¦K ñ ñ ñ ñ ñ ñ ñ ñ ñ ñÉ$Ñ,Õ z   sÍ‚‚ÍsÉÉwwÍÍ   + +]]¸¸]] . . . . . .66 ñ ñ ñ ñ ñ ñ ñ ñ š š í í @ š š š Ð Ð~~ Ð Ð~~©­­ÿÿÿÿRRRRRR©© ü ü ü ü©©oo Á Ášš íGôšššCCCCññññvÑŽCàÑVûNNR øRRÐÐÐÐÔyy  ø ø¥¥¥¥RRû ¡NN¥¥¥ J ?ššôššGGÍs  ss  222ŒÛÛˆˆ´´° +]]Å ÅÅ ÅÅÅÉÉÍÍssššššššôôñKññññKñoooovvü¢šôññøž5ˆˆßßßßßß2Œß9Aœ‘‘ããà…´Z­RVûNNddºººhhºººº hh ddææ99 Ì Ì''ÐÐ##¥¥¥¥ ¡û©Nººººººhh¾ll¾……2}×××××*…¨UUUURR¤¤óóó™FFFFïïBFF™™BBïïBB®®®®\XX²XXX''~~++'''~~~~'ÔÔ++ Ð Ð++++6''RRRRRRRR©©©©RRR­@ æ““@@““hhhhII£ILòòòx‡$Å.•#ÁÞÎxxpppppp à Ãppp ^¹È}"T3ì7O7O7ü6¡)Æ-®ùKKõõOO¦¦¦Kžž ñ ñžžKKžžùùw,†;äÕÕz    zzÍÍÑw$É    e +]] + + ° ° Û Û . .ˆˆ ñ ñ ñ ñ ñ ñžž š š š š š š š š++~~~~ РЩ©VV­­­­ÿÿRRRRRR©©©© ü ü©© Á ÁooššššG íššCCññCCžžÉ$Ñð)*ÛZ†°ûûû¥ÿ­+++Ð' Ì Ì Ì ø ø ø ø¥¥¥¥ûûûûRRÿ J í íšššôGGssssÅÅÅ ßßß„ˆˆÛÛa´Y°°]  ÅÅÍs  GGGGššššññCCññññoo Á$$ôôGGžCññˆˆˆˆ22ßߌŒçççAœQ˜˜˜>•:à…­­­VVûûl hÒÊoÂÂhh  ºº  d¾¾¾ â â““ææyyyy###}¥¥¥¥NNûûººººhhhh¾ll……ØØ***Ð}}**¨¨¨ûûR÷÷FFóóóó™óJïFF™™BBïïïïB¶\®®®®®®XX²² ² ª'' Ð Ð Ð Ð'' z z~Ø+ ÐÔÔÔÔ~~~~~~~~ z z''ÿ ¥RRRR ¥ ¥VV ü üRRÿÿ““““@ æ æ æhhhhööIIòòLòËËÚ!c'$PƒÎËpppppppppËË fÈ2"Q€#®-Õ3?2’+Íòx®ùKKõõOOKKK ñ D D ñ ñžž ñ ñžžùù,–Z#Ä"™/Õ    zz‚7,Ñ$É    ¿e]] + + ° ° Û Û Û Ûˆˆˆˆ ñ ñ ñ ñ ñ ñ D D š š š š š š š š++~~~~ РЩ©VV­­ÿÿRRRRRR©© N N ü ü©© Á ÁooššššG íššCC – –CCCøÉ$†"4U5¯,ãð°ûûû¥ÿ­••…+' Ì ÌRR ø ø¥¥ÿÿûûûûRR¥¥ í íšššôGGssssÅÅÅ ßßß„ˆˆÛÛa´Y°°]ÅÅÅÅssvv(Í  GGGGššššññCCññ – –oovÙŽOšGGžCññˆˆˆˆŒŒßߌŒççAœQ¨¨¨Mï•:à­­­VVûûlh‡¦é$ÂÂhh  ººhh¾d¾¾êê â â““ææyyyy###}¥¥¥¥NNûûººººhhhhd¾ll++ØØÐÐÐu}}ÐÐN¨NNûûR÷R÷  óóóóóNJï  ë™™BBïïïïB\¶  ®®®®XX²gwg_'''' Ð Ð Ð Ð'' z z #~+ ÐÔÔÔÔ~~~~~~~~ z z''ÿ ¥RRRRÿÿVV ü üRRÿÿ““““@ æ æ æhhhhööIIòòòLËË%Úæ1ÎÎËpppppppppËË fn#)Çד!ý Lˆ%¦¦žžõ šõõžž ñ ñ DžžžGGõõKKù®7"À/œ53U(K†z ÍÍ(ÝN^¡Ý(Í$$wwi´´ + + + ° Û Û6 Û22 …ßžž ñ ñ š š š š íGG í D D ñ ñ~~ Ð ÐÔÔ'' üVȱVÿZ­R©©©©©© ü ü ü ü©© Á Á Á ÁÅÅCCññññññCCCCCCCžÅ Õ©),6"†©ûûûVV Mó‰ÔÔÔÔÔûû ¡ ¡ûû©©ûûûû¥¥¥¥ñ –ññšôôôÅ ss    ßß2222 × × + +°°YYYYoovvvÍÍÍ‚3ÙÑvKKžžžžññññCCššGGoooooÉ+àSžññššššˆˆˆããã555êEŸú\l´¬QœB:à­­­VVûûh ººoé8slllddººhhl¾¾êê<<ææ““ÐÐÐÐ'' Ì ÌNNûû øR¥¥  ººººººººhh¾¾ll}}ØØuu""&ÌyyûûûûNN    û ÷÷JJïJ ûûûNóFFFFFFBBBB ëFFF__XXs¾ ®''ÔÔ Ð Ð Ð Ð z z''''''ÔÔ'' Ð+~~~~ РРРРРЩ©©V ü ü üR­ÿÿRR ¥ ¥““““====hh¿¿¿¿IIIIŸEŸŸËËË%ÎÎ!ÇppppÇÇÇÇppppx¹Ðó01mt)x»¦¦žžõ š š šžž ñ ñ DžžžGGõõKKù®¡-”7»7»7d4¯%;z ÍÍ(G+Œ2Q,:¡‚($$ww´´´ ° ° + ° Û Û6 Û22 …ßžž ñ ñ š š š š íGG í D D ñ ñ~~ Ð ÐÔÔ'' üV^Œ%«× ±ÿZ­R©©©©©© ü ü ü ü©© Á Á Á ÁÅÅCCññññññCCCCCCCžÅ z/CC;Ñ©ûû ¡ûVV.‰.yÔÔÔÔûûûûûû©©ûûûû¥¥¥¥ñ –KKôšššÅ ss  zzßß222222°°°°YYYYoovvv((7¡­àÑKKžžžžññññCCššGGoooooÉvvžžññššššˆˆˆã==5EŸTd!!%0'-#a÷ç:à­­­VVûûh ºººoosll ·ddººhhlŸê<<ææ““ÐÐÐÐ''''NNûû øR¥¥  ººººººººhh¾¾ll}}}}uu""&ÌûûûûNN     FJJJ¤°t°NóFFFFFFBB ëFFF_oºXX_cc® T''ÔÔ Ð Ð Ð ÐÔÔ'''''' z z'' Ð+~~~~ Ð Ð Ð Ð Ð Ð N©©©V ü ü üR­ÿÿRR ¥ ¥““““====hh¿¿¿¿IIIIŸEŸŸËËpËÎÎ!ÇppppÇÇÇÇppËËxnu*!M.Ö¸¸¿iiùùžžGGõ š ñ ñ ñ ñžž ñ ñõ šõõKK¦ü1¤8h8h8¿7d(è(Í  ÕN/œ5/œN/Õ~~$$´´a ° ° ° °ˆˆ Û62222žžžž š š š šõõ¢Gžž ñ ñ Ð Ð Ð Ð'''© …#¤* ±­­ÿÿ©©©±±VV©© ü üoooo k k ¾ –ñžCCCCC – – – –CCññssÍÍÑÑÑvûûûûNNVû''ÔÔÔÔyyN©©©ûûNNûûN©ÿÿ¥ÿññžžššššz sssÍzz9ßßßßß22]]]´YÉÉÉ$‚’#À-:.ë*Û!bŽøøKñ –ñžžžžññGGššoooov –ñCC íGôôˆˆ5555ò§d!Î+õ-O,—'-!ô¤:àà­­Zÿûûûûhhººººhhlldd dººhh¾¾ƒL<<9“HîÐÐ##yyyÔûûNN¥¥¥¥ººhhººh ººhhll¾¾}}}}È"uuyyûû¨ûU¨N   Fïï÷÷¬ Þ- *XÏûFóó™óFFB •ï ëFFF²² ²XX\\''ÔÔ~~~~''''''''''''~~~~~~ Ð Ð Ð Ð Ð Ð ü ü ü ü©©© Nÿÿÿÿÿÿÿ ¥““ æ@êê==ll¿¿ööI îEEŸŸx!!ttÇÇÇÇpppËxxxxn#Ø!û,Ï]]e¿žžžžGG šõKK ñ ñžž ñ ñõ šõõKK¦ì(*4Y77d3U#3(Í  zŠN ¸^ä/ÕÙÙ~É´´a ° ° ° °ˆˆ Û2222 D Džž š š š šõªü¢žž ñ ñ Ð Ð++'''©± Àf±V­­ÿÿ©©^ÀÀVV©© ü üoooo k ks –ñžCCCCC – – – –CCññssssvvvûûûû©©ûV''ÔÔÔÔyyN©©©ûûNNûûN©¥¥¥ÿññCCšššš ÅÍÍÍ(zz”999ßß22]]]´YvvÉÉÉ$’#À3þ88d7 +2ú S¦KKñžžžžññGGššoooov –ñCC íGôôˆˆ555êM·#(+G2¹43\-ò%Óÿ•:…­­ÿ¥ûûûûhhººhhddd ººhh¾¾sG$ä¶——“£Âý…Ð##yyyÔûûNN¥¥¥¥ººhhººh ºº Âll¾¾}}ØØmÈuuÄyû°¸¨ûU¨N  F ëïï÷÷a'£3Ñ3Ñ#“U óóó™FFB •ï ëFFFXXX²XX\\''ÔÔ~~~~''''''''~~~~~~ Ð Ð Ð Ð Ð Ð ü ü ü ü©©© Nÿÿÿÿÿÿÿ ¥““ æ@êê——ppllööI îEEEE ÃÇÇttÇÇÇÇpppËxxÒÒn#  (¿GGüüõõõõ´´´´a´´ß …22ßߌ眻'é0/[(—ï猌Œ:”œQ|m¿¿ÇǸsss GG š š ñ ñž D sss Å Å Å ÅõOüG ñ ñ ñ ñ ¥ ¥ÿÿRRRRÿÿ­­VVêê====DŸTŸ——@@““ššG íCC –ñ ÁoooooožC – –šššššššš¢¢ôô hd¾¾¾ººº““99<<CC –ñššGG¢G¢¢O©©©Ù~ÑÑ$ÉÉoññññžžKK㈈ˆßߌA»,ù78z8Ð7v6(’€»a·]]]ÛÛ..ÛÛÛÛššG í – –CžooooÅÅssÛ5ã=”9çç꟯)@46É6É5¤0:&õáÒwºd¾êê<<æææ ‹NN©©ÿÿZĤ•Ø}Ô> + ‰y''yÔÔÔNNNN¥¥¥¥99 ‹æææ99dhhRR­R_X²__<KK–ååå‹88Ý݇‡44¶¶ å'¹+’ÓqqmmmmÄÄÄÄBBïïïïïïBBBBBBBB N©©© øRÿZ­RRRR~~ Ð Ð~~+ Ð ¥ ¥ ¥ ¥ ü ü ü ü #~ Ð Ð Ð Ð~~'''''''' üV©©ff^VV^^^!!tÇÇÇÇtttt Ø Ø††††††µµÄr½jÄÌ6  & +GG¢¢õõõõ´´´´a´´ß …22ßß2ŒŒAQþï:Œ222ß:çç¸eemm¸sss GG š š ñ ñ Dž sss Å Å Å Å šõGG ñ ñ ñ ñ ¥ ¥ÿÿRRRRÿÿ­­©© ü üêê====ê êê== æ æ““ššG íCC –ñ ÁoooooožC – –ššššššššGGôôºº h¾llllll¾¾ººº““““êê<<CCñKôô¢¢¢G¢¢O©¹Ž3++$É$ÉKKññøø¦¦ãˆˆˆßߌA,ù78z8Ð7v6(’%»»a·]]]ÛÛˆˆÛÛÛÛšš íGññžCooooÅÅÛ5òþîççEú #(.ª6É8#8#6ÿ1•'nOáÒº¾dêê<<æææ ‹NN©©¥¥ÿÿ…+Ø}Ô‰ë6.Ô''yÔyyNNNN¥¥¥¥99 ‹æææ99¾¾ººhhRR­R_²X__á<<<‹‹‹0ÝÝÝ݇‡ÚÚ\\ ck ÍqqmmmmÄÄ i iBBïïïï • •BBBBBBBB N©©©R­Z´yybRRRRØØ Ð Ð~~+ Ðÿÿÿÿ ü ü ü ü #~ Ð Ð Ð Ð~~'''''''' üV©©Àu±±^¸¸¸||ÎtÇÇÇÇ Ø Ø††††††µµÄ˜  jÄ'Üë  GGGGGGGGa Y Yß …2222ßߌççAAç::ß … … …ßß::ee¸¸ee]]ss Å Å oÉÉÉ š š š š ñ ñžžss Å Å Å Å Å Å šõõõ ñ ñ Dž ¥ ¥ ¥ ¥RRRRÿÿRR©©©©==êê====== æ æ““ í í í íCCCC Á ÁooooññCCššššGGGGGGGGhhhhl!ÆlÆl¾¾¾hh `º““@æêêCCžžGGôô¢¢¢¢W± ÁCèà+ÑvvvžžñK¦[=ã㈄„Œçœ"%16r7v61_!!i´´]]°°ÛÛÛÛ....ššššCCžCoÉss  ã=d)í!w£”Æ*š3f7v7v7v5¤-…"å,wÊoohh¾d¾¾llêêê@æ“9N©ûûRRÿ¥}#ÐÐÔÔÔÔÔÔÔÔyyyy©NN©¥¥¥¥999999ææddººººRRZÿ²²²²_Ú444ÝÝ0000ƒƒ‡‡‡‡\\\\cc¶qqqqmmmmÄÄBBïïïïBBBBBBBB •ïVVÿÿ­­b­­ ¥ ¥RRØØ Ð Ð~~+…ÿÿÿÿ ü ü ü ü~~~~ Ð+++''ÔÔ' z zVV©©VV^¸^^  fÈmƒ)!ÇÇÇÇdž††à††††µÌ& +)l>r̉>GG í íGGGGaaa´´ß …2222ßß2ŒŒçŒ2ßßß … … … … …ßß + +¸¸ + +]]ss Å ÅÉ$Ù$õõ š š ñ ñ D Dss Å Å Å Å Å Å šõ š š ñ ñ Dž ¥ ¥ ¥ ¥RRRRÿÿRR©©==êê====== @@““ í í í íCCCC Á Áoooo – –CCššššGGGGGGGGhhÂÂ{0ÖÆÆll!Îss¾hhºîî@æêêžžžžGGôô¢¢üü± ЭR;†ÑvvvžžK¦Ô'û#ë=㈄„2ŒçQ"%*D-ü)í"{§i´´´]]°°ÛÛÛÛ....ššššCCžCoÉssÅňãT#( þ”Æ'å2 67v7v4J)võ‹ÒÊoohh¾d¾s{llêDDD@æ“9N©ûûRRÿ¥}#ÐÐÔÔyyÔÔÔÔyyyy©NN©¥¥¥¥999999ææddººººRRÿ¥²²²²_Ú444ÝÝ0000ƒƒ‡‡‡‡\\\\  ¶\qqqqmmmmÄÄBBïïïïBBBBBBBB •ï©© ü üÿÿ­­­R­­ÿÿRR~~ Ð Ð~~+…ÿÿÿÿ ü ü ü ü~~~~ Ð+++ÔÔ' z z ü ü©©VV^^^ À*"I%«!œ¢Þ|!ÇÇÇdž††à††††Zµ‰.rr'ÔÔGGGGõõõõ´ Y´ + °]]ˆˆˆˆ Û Û666666 Û Ûˆãˆˆ Û Û … …22a´´]]]]ÉÉÉÉ /Šzžž D D Dž ñ ñ zss Å Å Å Å ñ ñ ñ ñK ñ ñ ñ©© ü ü©©©© ¥ ¥ ø­±V©©========== ““ æ æCCCC í í í í k k Á Á Á Ášš í í í í íGññññGGGGººhh¾¾Æ{‹@ÝsÊéõÖÆl¾¾l@@ææ<<êêôôôô¢¢ôôKK¦µjÌ#ë$ C3~$É$ôô¢¢*4×/m`AŒŒˆ.Û5=˜M\l\Ÿêa´´]]°° ×222„„„„GGššññCCoovoo2ŒAöúŸêEö Ê'/32c2c-/!é!ÆlºººhhÊCõ{lîý²XŸD—<¥¥ ø ø¥¥RR}##}''yyÐÐÐÐÐÐÐÐûûûûNNN©ææ99 â â â ⺺ hººh N©û ¡\\\\¶¶¶¶00‹‹8ƒƒƒ00ƒƒ00ƒƒ\\\®®® qÈm À Àmm •ïïïFF™™ ë ë™™BBBB ¥ ¥RRÿÿÿZRRÿÿÿÿÿÿ Ð Ð Ð Ð''''RRRR©©©''Ô z Ð Ð Ð ÐÔÔÔÔ~~~~ ü ü©© üVZ´Äã+345é0'ÑHƒÎxÇÇÇÇ Õ/ ‚Ü//Üܽ½ÀÀuÔÔGGGGõõõõ Y´´ + °]]ˆˆˆˆ Û Û66666666ˆãˆˆ66ßß22a´´]]]]ÉÉÉÉ zz žžžž DžKKz ss Å Å Å Å ñ ñ ñ ñ ñK ñ ñ N N ü ü©©©© ¥ ¥RR üV©©========== ““ æ æCCCCGG í í k kšš í í í í íGññññGG í íººhh¾¾l!{0(sÂÂÊéõÖÆl¾¾lææææ<<êêôôôô¢¢OOKK¦µjÜ*°,6(&øèÙ~$Éôô¢¢$™$™çŒŒˆ.Û5ˆã=˜ò˜a´´]]°° ×222„„„„GGššññžžoovoo2ŒŒŒêêEQ`p#(<,K+ž(é#µñÙ$!ƾ¾lºººhho4šÖÆlHÂ'ð#áTD—<¥¥RR¥¥RR}##}''yyÐÐÐÐÐÐÐÐûûûûNNN©ææ99 â â â ⺺ hºº hN©û ¡\\\\\\\\00‹‹Ý݃ƒ00ƒƒ00ƒƒ\¶\\®®® qm  À Àmm •ïïï ë ë™™ ë ë™™BBBB ¥ ¥RRÿÿZi­­ÿÿÿÿ ¥ ¥ Ð Ð Ð Ð''''RRRR N©©©''Ô z Ð Ð Ð ÐÔÔÔÔ~~~~ ü ü©© üV´Ó*5é8ž7D7D5Z'Ñ“)ÒxÇÇÇÇ Õ/Ü ‚//ÜÜbbbbff*!M˜¢¢GGGGGGa´´]]]]ˆˆˆˆ66 Û Û66ˆˆˆˆ666 Ûˆˆ2222 + +¸]ÉÉÉÉ Å Åss ñ ñ ñK ñ ñ ñK Åss Å Å Å Å D D D Džž ñ ñ ü ü ü ü ü ü ü ü ø øRR©© ü ü======== == æ æ““ – –ññG í í íÅÅvG í í íGGššžžžžšôGGhhºº¾¾ssÎÆÆÂwÎs¾¾¾¾¾ææ““<<——ôôGGôOüWK¦[b%F1t4U,6RèÙ~ÑvGG¢¢ø­b”ßß߈ˆÛÛÛ5ã㈈´´´´]]°°22ßß2222GGššññññoo2Œß9êE«`p"%$,"Ò"%p<‡$Ê!ƾ¾¾¾ººhho$!ÆH !ÙÉùDêꥥÿ¥¥¥RRÐÐ##ÔÔ''ÐÐÐÐ}}++©©VûûûNNææ99 hºº hh NNN©\\®®®®®®0000ƒƒƒƒ00ƒƒƒƒƒÝ¶k\®®\\mmmmÄ i i imm À À À ÀmmBBBB™™ ë ë™™ ë ëBBBBRRÿÿZÿÿÿ­­RRRR ¥ ¥~ # Ð Ð''''RR ¥ ¥ ü ü üVÔ z'' Ð Ð Ð ÐÔÔÔÔ~~~~©©VV©± ¼q ˜207ñ7ñ7D7D6´+àõ1%ËÇÇÇÇÇÇÇÇ//ÜÜ ‚ÜŠŠµµ¹¹nØ"¨ó¢¢GGGGGGa´´]]]]ˆˆˆˆ66 Û Û Û Ûˆˆˆˆ666 Û .ã2222 + +¸]ÉÉÉÉ Å Åss ñ ñ ñK ñ ñ ñK Åss Å Å Å Å D D D Džž ñ ñ ü ü ü ü ü ü ü üRRRR©© ü ü======== == æ æ““ – –ññG í í íÅÅ ÁG í í íGGššžžžžôOGGhhºº¾¾¾¾ll¾¾d¾¾¾¾ææ““<<<<ôô¢¢O©üW¦K¦r'û4)7 +1 $CÙ~ÑvGGGGøøøSßßß߈ˆÛÛÛ €ˆˆ55ˆˆ´´´´]]°°22ßß2222GGššññññoo ×2ß9êEö«`Âh`«‡ÒÊoÆl¾¾¾¾ººhhl¾¾“îPõDD¥¥¥ J¥¥RRÐÐ}}ÔÔ''ÐÐÐÐ}}…ïm¸VûûûNNææ99 hºº hh NNN©®®®®®®0000ƒƒƒƒ00ƒƒƒƒƒÝÆk¶®®\\mmmmÄ i i imm À À À ÀmmBB™™FF™™ ë ëBBBBRRÿÿZÿÿÿ­­RRRR ¥ ¥~ # Ð Ð''''RRÿÿ ü ü ¡ üÔ z'' Ð Ð Ð ÐÔÔÔÔ~~~~©©VV©±Àqqã,Æ7ñ7ñ7D7D6´+àõ1%ËÇÇÇÇÇÇÇÇ//ÜÜÜ7ŠŠµµ¹¹¹nyyssssÉ o o o . . Û Û Û Û .ˆ´´´´´´]]]]´´222222ß߈ˆˆãßßßß2222:”22GGõõKKžž ñ ñ D DGGGG o oÉ o o o''''' z z Ð Ð~~~ # Ð Ðhh » » » » » » 9“@ æ ê CCññGGššÅÅooooÅÅss  ÍÍzz Å<<êê@@ææ““@@““@@hhd¾¾¾ll¾¾É$vvzzzzüü©©^È(Q0p3Ó.i 2OOôvÉÉÉÉ´´´´YY´´ÛÛÛÛˆˆ.ˆÛ5ˆˆˆˆÛÛ2222.ˆˆˆ  ÅÅsoooo°° + +a»Ï)11ˆ-%ËùŸDD——<< â<<<<<hhººll  v v##yyyy}}+…..ÔÔ''''yÔë#t!î©RR¥¥hhhh    â â â â â ‡ J¥­R Ö0ƒƒ,,ÚÚ®®®®XX ª‡,,,,,ÚÚ____®®®®ÄÄ iÄmmmm™™ ë ë™™™™ïïïJ™™FF i i À À À À ü ü©©VV©©~~ Ð+++ Ð Ð ¥ ¥ ¥ ¥RRRR Ð Ð~Ø'' z z Ð Ð~~''''©©V üRRRRÿÿÿÿ± ii( +4å6@8H6í4$C þŸŸEE››››EEòò/ŠŠä777܆†33333àà3‘‘  ssÉ o o o . . Û Û Û Û .ˆ´´´´´´]]]]´´222222 … …ˆˆˆã::ßß2222ß:22GG š š ñ ñžžKKžžGGGG o oÉ o o o''''' z z Ð Ð~~ #~++hh » » » » 9“@ æ êêêCCññ í íššs ¾ÅÅoooo  ss  ÍÍzz Å<<êêææææ““@@““ææººhh¾¾¾llÉ$ÑÑzz  üü©©^Ø&÷*Y$ï}^©©OvÉÉÉÉ´´´´´´´´ÛÛÛÛˆˆ.ˆ5Û..ˆˆÛÛ2222.ˆ..ÅÅÅÅsoooo°°°°a»t!!xpŸDêê<<<< â<<<<<hhºººº  v v##yyyy}}…•¨óã.''''Ô.F$Ï%þu©RR¥¥        << â â< â J¥R ø Ö0ƒƒ,,ÚÚ®®®®XX ª‡,,,,,  ®®®®ÄÄÄ immmm™™ ë ë™™™™ïïï •™™ ë ëÄÄ À À À À ü ü N N ü ü©©~~ Ð+++ Ð Ð ¥ ¥ ¥ ¥RRRR Ð Ð #~'' z z Ð Ð # #''''©© üVRRRRÿÿÿÿ©©V±´´¼&!ò+l0)1ƒ,bÙ þŸŸEE››››EEòò/ŠŠ™F‘7܆†33 Ø Ø3àà377   Å Å o o oɈˆ Û Û Û Û .ˆaa´´a´´ + +¸]´´222222 …ßãã ³AŒßß … … … …22 š š íGž D DžžžžžGGGGÉÉ o oÉÉ o o''''ÔÔÔ z Ð Ð~~~~Ø~ » » » »hhhh æ æ@ æ==êêññCCššššsÅÅ    ÍÍzzzzÍs<<<<ææ““““ææææææhhhh¾¾llllllllvvÑÑ((ÍÍOOO©n 2"çØn^Wü¢¢ÉÉÉÉÉÉaaiiiaa5Û..ÛÛÛÛÛÛÛ5㈈ˆßßßß55ÛÛsssÅÅssoÉvoo]° +»»»»¿ÇÇÃûññ<<êêêêêêºh ddddddºººº###}yyyy}ج(Þ&)M‰''''ÔÔÜëm^©©¥¥ ø ø      `º â â<<¥¥¥¥Ýƒ Ö ÖÚÚ‡‡®®®®XXXX,,ÚÚ‡‡,,²X i immmm ë ë™™™™™™ïïïï ë ë > >ÄÄmmmm©©©©©VV++++~~~~RRRRRRRR+ Ð Ð Ð z z'' Ð Ð Ð Ð''''©©©©ÿ ¥RRÿÿÿÿ©©ZZˆ$§.!-½"éÂþŸŸòò››››EEòòŠäû!Ï!ϰ?І††† Ø Ø†à3333ÜÜ   Å Å o o oɈˆ Û Û Û Û .ˆaa´´a´´ + +¸]´´222222 …ßããEt.,¦Aßß … … … …22 š š íGž D Džžž D DGGGGww o o o oÉÉ o o''''/ä/Ô Ð Ð~~ØØ~ # » » » »hhhh æ æ æ@== ññCCšššš ¾ÅÅ  ÕÕ((ÕÕzz(Í——<<ææî9““ææææææhhhh¾¾llllllllllvvvvÍÍÍÍOOO©^¹È#ÈWü¢¢ÉÉÉÉÉÉ»»=ˆa5Û..55ÛÛÛÛÛ5ã=ããßßßß55ÛÛsssÅÅssoÉvoo]° +aa»»¿eii»a——<<êêêêºh ddddddºººº###}yyyy}Ø2Q$Ï$ÏM‰''''yy'©©©¥¥ ø ø      `º â â<<¥¥¥¥Ýƒ Ö ÖÚÚ‡‡®®®®XXXX,,ÚÚ‡‡,,²X i immmm ë ë™™™™™™ïïïï ë ë™™ i immmm©©©©©VV++++~~~~RRRRRRRR+ Ð Ð Ð z z'' Ð Ð Ð Ð''''©©©©ÿ ¥RRÿÿÿÿ©©ZZ´´Ä ˜205Ü3'$ñ TŸòò››››EEòòŠäe/X2 $„ô?àà†† Ø Ø†à3333ÜÜ s Å Å Û Û Û Û2222]]]]a»»»ee + +]] + +22222222ß:ï-ª-ªd눈ˆˆˆ . Û Û š š š šGG š šGGGGžžžž Å Å Å o o o oss Å Å Å Å Å Å Ð+~~…:++''ÔÔ/Ô/Ô d d d + =—ê êG í ?ššôššooo oosÍz Ñ+††//‚ÝÙ~~$@æ““<<<—ê â<<<ºhhÂÂllÍ(zzzz  KKSS[ff WWüOOssssveeÖ"P›t +ß„ × ×ßß22ˆˆÛ5A«XIÛÛÛÛÛÛÛooooooooÅÅssoo] +°´´´´´´@æææ<<<< â â< â â âd¾ddddddºººººº  Ì ÌyyyyyyÐ+2ç÷÷:+Ôy''yy''ûû©©¥ÿR ø      º ` ‹ ‹ ‹ ‹ â â<<RR¥¥ƒƒ ( (ÚÚÚ ®®XXXXÚ ,,‡á‡‡XXXXXXmm mÄÄÄÄBBBB ë ë ë ë >™ ë ë ë ë ë ë i i i i i iRR ¥ ¥ ¥ÿ­­+ Ð Ð Ð~~~ØV ü©ÿÿRR''''''''~~~~ РРРЩ© ü ü©©VV ü ü©©R­ÿÿV±±±bq$§4å762)WdúŸòò››››EEŸŸà;´&ã'çmFì3à†ÜÜÜÜ3333†† s Å Å66 Û Û2222]]]]»pp¿ +]] + +22222222 …ß:I·· ˆˆˆˆˆ . Û Û š š š šGG š šGGGG D Džž Å Å Å o oÉÉss Å Å Å Å Å Å Ð+~~++++''Ô‰>//Ô¿¿¿ d =—ê êG í ?šôšššoo oÉÉsÍ z+†à•™™ì’3Ù~$›@““<<<—Dê<—<<ºhhÂÂllsÍzzzzzz¦¦SS¦µµ±±WWWüOOÍÍssv°°·!!¿ +ß„ × ×„„22ˆˆ5`+ž/ E55ÛÛÛÛooooooooÅÅssoo] +°´´´´´´´´@æææ<<<< â â< â â âd¾ddddddºººººº  Ì ÌyyyyyyÐ+ØØ22+ÐÔy Ì Ìyy''ûûNN¥ÿR ø      º ` ‹ ‹ææ â â<<RR¥¥ƒƒƒƒÚÚÚ ®®XXXXÚ ,,,‡‡‡XXXX²²mm mÄÄÄÄBBBB ë ë ë ë >™ ë ë ë ë ë ë i iÄÄ i iRR ¥ ¥ÿZ­­+ Ð Ð Ð~~~ØV ü N©ÿÿRR''''''''ØØ~~++ РЩ© ü ü©©VVVV­RÿÿV üVVbÓ'\/n."’ úŸòò››››EEEE†à•¥Nô‘73à†ÜÜÜÜ3333†† Å Å Å ÅÉÉ66ˆˆ2222]] +ei-D"T›1e + +]]22 …ß222222ŒŒ==ãã Û Û Û Û Û Û .ˆ š š š šGG š šGGGG ñ ñ ñ ñ Å Åssww   Å Å ÅÍs~~~~~~~~''Üû¨ä/Ô¿l======== í í íGôš í í Á Á ooÉ  Í‚†;C­ ^ ^±¡;à†Ñ››““êê<<êê—<——<<hhhhhhÂÂllÆlÍÍ(Ízz((¦¦¦¦SS[µ^^WWWW©OÍsÅ ÉÉ]]·]·]]Œ2 ×22222ˆˆ5`+ž/® Êꈈ..ÛÛ ÁooooÅÅssoo°°]]aaaaaa´´´Yææ99<<ê â<dddddd hºººº  yy Ì ÌyyyyÐ+}}++}#yy Ì Ìyy''NNNN¥¥¥ J  ºººººº ‹ ‹““¥¥ ø ø Ö ÖƒƒÚÚ,,®®XXÚÚÚÚÚÚÚÚ ª ª ªXXmmqÄ iïïBB ë ë ë ë ë ë ë ë ë ë ë ë i i i iRR ¥ ¥ZZZZ+ Ð Ð Ð Ð Ð~~VV©©­RR ø''''ÔÔÔÔ~~ Ð Ð Ð Ð~~ ü ü©©±±±V©©©ÿÿÿÿV ü©Z´¼&ƒÎ TŸŸŸŸ››››EEòò3èB??‘7333ÜÜ/Š333333 Å Å Å ÅÉ~  ˜ã2222]] +e L/Ý3ì2é(Þ¿ + +]]22 …ß222222ŒŒˆˆˆˆ Û Û Û Û Û Û .ˆ š š š šGG š šGGGGKK ñ ñ Å Åss   Å Å ÅÍs~~~~~~~~''ëóä‰/tÆl======== í í íGôšGG ooÉ  Í‚†ðR%q+2-ç+ß%¥•à+››““êê<<êê<———<<hhÂÂhhÂÂllÆlÍÍ(Ízz((¦¦¦¦SS[^^WW±f¹©Ís ÅÉÉ]]·]] ¨]Œ22 ×2222ˆˆÛ5œQ5ˆˆˆˆÛÛvv ÁooooÅÅssoo°°]]aa´´´Yææ99 â âê â<êêdddddd hºººº  yy Ì ÌyyyyÐ+}}ÐÐ#}yy Ì Ìyy''NNNN¥¥ J¥  ` `ººººææ99¥¥ ø ø Ö ÖƒƒÚÚ,,®®²²ÚÚÚÚÚÚÚÚ ª ª ªXXmmqÄ • •BB ë ë ë ë ë ë ë ë ë ë ë ë i i i iRR ¥ ¥ÿ´Z+ Ð Ð Ð Ð Ð~~VV­R­R''''ÔÔÔÔ~~ Ð Ð Ð Ð~~ ü ü©©±f ±©©©ÿÿÿÿV ü©ÿZ¯¯úúŸŸŸŸ››››EEòò3èBôôì‘333ÜÜ/Š333333 ê æ@î #Ž$ègî======—LÂ-µ7.8‰6·4µ†z sssssswss Å Å D D ñ ñ š šõõ====== d d¿¿ll¿¿ Ð+Ø~++~~VV ü ü ü ü üVîî›@@@@@==DDHH£XÆÆÆl » »¿¿ÛÛ €Ûßß2 ×°°]]° +ÍÍÕŠŽR&0ò6ˆ6ˆ4€,aÜrµ[­­ÿÿ©©VV.ÔÔÔ+Ð}}ÔÔÔ.©­­ZZ—ñññññññDŸŸŸHHHHbbbb.´…+Ø}ÔÔÔÔûûûû© ô ™NRRR øûûûûûûûûV° °ÔÔÐÐ++WüGGššššÅÅs –ñCCššššññžžôôššNNNN ø ø øRÿÿ¥¥¥¥ øR¾d¾dºº hææ99<<ššG íG í íGššGGšš íGÛÛÛÛ..ÛÛYY ¬ ¬°°°°####yy' ÌÐÐÐÐ Ì Ìyydd · ·ƒƒƒƒƒƒƒƒƒƒƒƒ (Ý‹‹²X ª ªXXXX®®®® ªÏÏÏÏ%%-Ó Ë Ë Ë Ë""""77 Š Š7777 á á á Ꭰ3 3 3ˆˆˆã:””:]]]] ° ° ° ° ñK¦[K ñ ñ s  ü ü ü ü ¥ ¥RR Ð Ð+++à3Ø¿¿¿¿¿¿ppllÒxxxtttÇÇÇÇb½>!¤”…333††33SS ùSSS ê æ@H/¼1!†£——====—L/7.8‰85]#Äáz ss    wss Å Å D D ñ ñ š š š š====== d d d d¿¿+…Ø~++~~VV ü ü ü üV±HHPªõ@@@==êê“H ,0ÆÆl » »¿¿ÛÛÛ €„„2 ×°°]]° +ÍÍz/è­+ˆ6\7â7â751Ë#ë̵ÿÿ©©V >ã..+ÐØØÔÔÔ.©­­ZZñLññññññDŸŸŸHHHHiZ…+Ø}ÔÔÔÔûûûû©©NNRRR øûûûûûûûûûVVû''ÔÔÐÐ++WüGGššššÅÅs –ñžžššôôññžžôôššNNNN ø ø øR¥¥¥¥¥¥ øR¾d¾dºº hææ99 â—šš íGG í íGšš í íššG íÛÛÛÛ..ÛÛYY ¬ ¬°°°°####yy' ÌÐÐÐÐ Ì Ìyydd · ·ƒƒÝ݃ƒƒƒƒƒƒƒƒ8šš ²XXXX®®®® ªÏÏ))€€-Ó%% Ë Ë""""77 Š Š7777 á á á Ꭰ3ŽŽˆˆˆã:ßß:]]]] ° ° ° ° ñKKK ñ ñ s  VV ü ü ¥ ¥RR Ð Ð++++Ø~¿¿¿¿¿¿llxtttÇÇÇÇb½y)l3<1â+ßè33††33SS ùSSS êê““õº"3#Ž H——ê =——L_&C4y7.6·/óÑÍs Å Å Å Å  ÉÉss Å Å D DK ñ í í š šêD êê d d d d¿…+ØØ++~~V ü©©©©^mXýÂѲ==== æ›ýgÖÆ¿¿ » » » »¿¿¿¿¿¿ÛÛ.. × ×„„°°°°°°  ÍÝ• ´.ë7 +7â7â5Ú,a ‰ÅµZZ­R©©©^ë‘..+Ð++ÔÔV°ZZŸŸŸŸŸŸŸŸŸùŸŸHH›õZZØ}}}ÔÔÔÔ©©ûVûûûûRR¥¥ûûNN©©ûû©©ûû''''#}}}¢¢GGššššÅÅCCññ í íGGññññGGšš ¡ ¡NN¥¥ ø ø J¥RR¥¥RRl¾ººææ ‹ ‹ â âššššššššš ?ššššššˆ.ÛÛÛÛ..YY°°]####yy Ì Ì####yy Ì Ì · 00‹‹ Ö Öƒƒƒƒ Ö0ÝG!v w ²XXX ýX\\\ ý²²²ÏÏ„„ÓÓÓÓxx Ë Ë"""" Š Š777777 á á 3 3 á ᎎ66ë::ßß + °]] ° ° ° °žžžžžžžž oÉssss©© ü ü ¥ ¥RR Ð Ð #~++++¿¿¿¿¿¿hhlllËËttÇÇÇÇÇÇppppb½y&·5ñ7L3.y ¡ ¡NNNNNNÐÐ###### Ì'yyy  Ì ÌooÅ ÍÍ¢¢¢¢ññžC°°]YY ¬ ¬ € € €ÛÛÛÛÛ 5 5 â â9999dd ·dddd9999 T T®®  ÚÚ Ö Ö Ö Ö™™™™ïïBBqmmmm ö ö££        """"""ÏϹ¹  bb µ µ777777 Ý7´ Y ° °]¸ˆˆ66ˆˆãã´ Y´´aa´´aaRR­­V±^^© ü ü » » » »“î››TÍ.¹0#¬È¹¹ ­ZZZZZZà††††† Ø3ZZZZZZµµ¦ L¦¦¦¦  z z z Ð Ð~~ N N©©© N ü ü ü ü ü üR­ÿZŒçŒ2 Û Û Û6ßß22ˆˆˆˆss Å Åss Å Å š š š š í í š š » » » »hh » »¿¿l!{m¸VV©© ü ü ü ü ü ü ¥ ¥ ¥ ¥== â â â â æ æ“ 9 —— :-*hu VVÔÔ'' z z''ññžSff^O ÅÅÅooooCCCCCCCCGGššGGGG¥¥¥ÿ©u* /!"ò¼VVZZ  ÈqÌy.ç"œ$£'X*#.31•4J5¤5¤6R4÷5y41j.µ*ü&ì%’!‚Éog²¦LLoollØØ…+ÔÔ++ÐÐÐÐÐÐ¥ J J¥ûûû ¡yyyy####ˆˆÛÛÛÛ.ˆ × × × ×2 × × ×YYYY°°°°..ÛÛ....}Øÿ)â(ÞF Ì ¡ ¡NNN ô ¡ ¡Ð v v v####yyyy' ÌyyooÅÅ zü  üKKññ]°°´Y ¬ ¬ € €Û €ÛÛˆ. 5 599 ‹ædddddddd9999 T®®®   Úƒƒƒƒ™™™™BB • • ¼ÄÄmmmm££ ö ö    MM"""" t t""  ¹¹ µ  7777 Š Š77 ° °]]ˆˆ66ˆˆ66´´´´ Y Ya´ÿÿÿZ± ^©©©© ü ühhhh@@'ô3u2"þ  ZZZZZµb3 Ø Ø33 Ø Ø3 ­ZZZµµµ¦¦SS ù ù zÔ z z Ð Ð~~ N N N N N© ü ü ü ü ü üR­´ÄöœŒ2 Û Û Û6ßß22ˆˆˆˆss Å Å   Å Å š š š š í í š š » » » »hh » »¿¿llÆVV©© ü ü ü ü ü ü ¥ ¥ ¥ ¥==êê==== æ æî“ ==±uß*f±VVÔÔ'' z z''ññ­Ì(ÿ+´%œnÕÅÅÅoooožžžžžžžžGGôôGGGG¥¥¥ÿ©eßãÓb­°°´´bb  mmqÌÓÓŒ#ö%þ(³,Ø0è2ï5¤6ÿ6ÿ6R7¬6Ô5y2Ä0-±)¡&ì"Ý$Ég²¦LLwwÊÊllØØ…+ÔÔ++ÐÐÐÐÐÐ¥ J J¥ûûû ¡yyyy####..ÛÛÛÛˆ. × × × ×2 × × ×YYYY°° U U..ÛÛ....#}:´ ¿FÜ'ûûNNN ô ¡ ¡ vÐ v v####yyyy' ÌyyooÅÅ z(ÿ(ÿ…µKññ]°°Y ÿ ¬ ¬ € €Û €ÛÛˆ.99 ‹ædddddddd9999 T®®®   Úƒƒƒƒ™™™™BB • •qÄÄmmmm££ ö öúúMM"""" t t""  ¹¹ µbb7777 Š Š77 ° °]]ˆˆ66ˆˆ66´´aa´´´´a´ÿÿÿZ*m^©©©© ü ühhhh@@îX#å1n4Ð. ”  ZZZZZµ½b33 Ø3 Ø Ø3 ­ZZZµZZ¦¦SS ù ù Ð Ð Ð Ð Ð Ð~~ ¥ ¥RRÿÿRR ¥ ¥RRÿ´&%U%âç222ß߈ˆˆˆˆˆ Û Û o o o o o o ñ ñ ñ ñ š š š š » »hh¿ dhhhhpZÿÿ ¥ ¥ÿÿÿV ü ü ü ü ü ¡ ¡ æ æ““““@@“îHî—===­b¼¼^©V ü~~ Ð Ð''ÔÔžøb)U4×7Œ2Ï!6/ ÅÅššG¢GGôšššGGGGššNN©©R­´i¼b°°¸ee¼¼qm"}×6"E&U*d,0‘3F5û7U7U6¨6¨6}5"3/ .^(ô&?#ŠÍc®[¦ùù!!!ÆÆl……Ø}ÔÔ.ÔÐÐ#}####¥¥ J¥¥¥¥¥ vÐÐÐ}###..ÛÛ ×22 × €Û......°°°°°°....„„22''Ü6‘ÜÔyûûNNNNNN####yy''ÐÐÐÐÐÐÐÐÅÅÅÅÉ$v/Ã5--¢GGYY * *„ * €ÛÛÛ    ` `h  ª ª ª ª Ú,, Ö0ƒƒBBBBBBB i iÄÄmmmmMMMM ö ö££xx% Ë t t t t µbbb bb77 Š Š Ý Ý77]] + ° ° °]]ßߌŒ22ßß´´´´]]]] + +]] Y´´´ÿÿÿ´2ç±VV üVRR ¥ ¥ d¿hh“î£ ,3u7…82.¹‰jbb^±± ­ ­Z br½ŠŠÜ܆ +††^^ZZZZýýPªý ¢ Ð Ð Ð Ð Ð Ð~~ÿÿ­­ZZRR ¥ ¥RRÿ´!E2Þ3k%âAŒŒŒß߈ˆã㈈ Û Û o o o o o o ñ ñ ñ ñ š š š š » »hh¿ d » »hhpZÿÿ ¥ ¥ÿÿÿV ü ü ü ü ü ü ü æ æ““““@@HX²£—===­­­­©©V ü # # Ð Ð''ÔÔžø%F4×7Œ4)"‘/ ÅÅšš íGGGôšššGGGGšš©©©©­RZZ­­­°°^¸  ¼¼¼m"}×6"E&U*d,0‘3F5û5û5û6¨6¨6}5"1À-±+©(ô&?#ŠÍ¾ TT{{{!Æ!……2Ø...ÔÐÐ#}####¥¥ÿZ¥¥¥¥ vÐÐÐ}###..ÛÛ ×22 × €Û......°°°°°°....„„ × ×'''ÔyûûNNNNNN È È##yy''ÐÐÐÐÐÐÐÐÅÅÅÅÉ$ ":*Y$ïf¢GG ¬ ¬YY„„„ * €ÛÛêê    ººh Dº ª ª Ú,, Ö0ƒƒBBBBB i iÄÄmmmmMMMM ö ö££xx% Ë t t t t µbbb bb77ää7777]] + ° ° °]]ßß2222 … …´´´´]]]] + +]] Y´´´ÿÿÿ´¸m VVV üVRRÿÿ d¿hh“îH0À7…6Ø0‰jbb^ V V ­ ­Z ­bbŠŠÜÜà†††^^ZZZZýýªWý Ð Ð Ð Ð #~ РЭ­´ÄRR ¥ ¥ ¥ÿÿ´Ó&(—hçŒßßßß66ë˜=6 Û o oÉÉÉ o o o ñ ñ ñ ñ š š š šhh¿ d ` `h hhÂh­­ ø ø øRRR ü ü ü ü ü ü©© æ æ@@ æ æ@@HX_P—===RRRR ü ü©©~~~~'''žøÅ#ë)U"‘½(sss kÅ í íšš íGG íššGGššGG©©©©ÿÿÿZÿZÿÿV°°°^¸¸¸¼¼iÀu"׈"ò'¯*d+'/61ë4 5N6¨5û5û5"3È0f,V+©'™$7!‚s¾ ®®®T(((ÎÆÆ22……ÔÔÔÔ}}}}ÐÐÐÐ¥¥ZiZ¥¥¥ vÐÐÐ}}ÐÐ..ÛÛ ×2„„ÛÛ...... U°°°....„„ × ×yy''ÔÔ''ûûNNNNNN v v##yy Ì Ì####ÐÐ#}ÅÅÅÅoÉOÁf©ôôšY ÿYY]°°„„„„ÛÛˆ=ŸDººh `ººº—o_ ª ª®®\ÚÚ,, Ö ÖƒƒïïïïBB ¼ i immmmMMMM££££xxxx t t""bb µ µ µääää77 Šä + + ° ° ° °]]ŒŒßß2222´´´´]]]] + +]]´´R­­­VV ü üRRRRhh@@›_$’. -^"еµ±± ­ ­ ­ ­ZZZZ//ÜÜàà Ø ØZZZZPPª_²W Ð Ð Ð Ð #~++­b.'\&¯R ¥ ¥ ¥ÿÿÿZiþïŒçßßßß66U·ò6 Û o oÉÉÉ o o o ñ ñ ñ ñ š š š šhhhh¿ d » »h hhh RRRR øRRR ü üVV ü ü©© æ æ æ æ æ æ æ æ“î›@—===RRRR ü ü©©ØØØØ'''žøK¦­b­øssssÅ k í íšš íGG íššGGššGGNN©©ÿÿ¥ÿ¥ÿÿÿV°°°^¸¼¼iÀu"×.!˜$ú'¯(r,0‘0‘2™3ó3F3F2m1/ *ü*N&?$7!‚s¾ ®®TùÎÎÎsÆÆØØ++ÔÔÔÔ}}}}ÐÐÐÐ¥¥ÿZÿÿ¥¥ vÐÐÐ}}ÐÐ..ÛÛ ×2„„ÛÛˆˆ.... U°°°.... * * × ×yy''yy''ûûNNNNNN v v##yy Ì Ì####ÐÐ#}ÅÅÅÅoÉôôü¢ôôôš´YYY]°°„„„„ÛÛˆˆêººh `ººº<ñº®®\44,,00ƒƒïïïïBB ¼ i immmmMMMM I I££xxxxÏÏ""   µ µ µääää’’ Šä + + ° ° ° °]]22ßß2222´´´´]]]] + +]]´´R­RR©©©© ü ü ü üRRRRhh@@›õTc\jZZ±± ­ ­ ­ ­ZZZZ//Ü܆† Ø ØZZZZPPªªWý ¥ ¥ ¥ ¥RR­RÿÄ*4å2‡"IfV©© ü ü üVV±ee + +]]]]]]"%p»a Å Å Å o osÍ Å Åss Å Å““ æ æ æ æ æ æ““ æ æ æ æ æ æ zÔÔ z zÔÔÔÿÿZ´VV ü ü æ æ““==ê » » » »hh » » Ð+~ #''''©^^­RRRÅÅsssÍssññññCCCCÅÅ g ÁoossÅÅssss''yy+++Ð''''+++…‰‰66ç:•Bœ¤ÿ¬»!Ã$x&Á(-…-….30è0:0:.à,+)v)v&j"[!¦õ@å‹,,$Põ››ññDD……}}}}ÐÐyÔ''ÔyyyRRRR¥¥R ø##ÐÐyy''·°°]·´´´YYYÛÛ Ó.„ßßß°° ÿ ÿ ¬ ¬ÐÐÐÐyyyyyyyy Ì Ì Ì Ìyy Ì ÌÐÐ v vNNNN¥¥ ø øÅÅÅÅooooss  22 × ×„„„„YYYYYY9999    · · · ·99ææ²²XXXXXX ª\\®®ÄyyÄBBïï™™ >™ Ë Ë Ë Ë Ë Ë Ë Ë""ÏÏÏÏ t t  ¹¹f ¹¹    ¹¹ _ _ Y´´´´´ Û Û66ˆˆˆˆ + + + +]] + + + °]]]] + ++++ Ð~~ Ð+V ü ü ü ü ü ü ü 9 9 æ@““““hhÂÆ!tt^^±±ZZZZ±± V V V V V V//Ü ‚†† Ø ØZZZZ±± V V{{{{{{ ¥ ¥ ¥ ¥RR­Rÿ ˜.!-ßfV©© ü ü üVV ü + + + +]]]]]]¸»»»a Å Å Å o o s Å Åss  ““ æ æ æ æ æ æ““ æ æ æ æ æ æ zÔÔ z zÔÔÔÿ´Ä V ü ü æ æ““==ê » » » »hh » » Ð+~ #''''©­RRRÅÅsÍssññññCCCCÅÅ ÁooÅÅssss''ÔÔ+++Ð''''+++…..ÜÜ2à:çBJ¤Qa!Ã"±$ (*Ð*#,Ø,+,+,+)v&Á&Á#µ¦Kñššå‹,,$Põ››ññDD……ØØØØ++yÔ''ÔyyyRR ø ø¥¥R ø##ÐÐyy''·!]]°°]li´´YYYÛÛ Ó.„ß99]]°°YYÐÐÐÐyyyyyyyy Ì Ì Ì Ìyy Ì ÌÐÐ v vNNNN J J ø øÅÅÅÅoooossÅÅ2222„„„„YYYYYY ¬ ¬9999    · · · ·99ææXX ª ªXXXXXX ª®®.òò.ïï™™ >™ Ë Ë Ë Ë Ë Ë%%""ÏÏ t tÏÏff¹¹f ¹¹    ¹¹¹¹ Y´´´ Y Y Û Û Û Ûˆˆˆˆ + + + +]] + + + °]]]] + ++++ Ð~~ Ð+±V ü ü ü ü ü ü 9 9 æ@““““hhhÂlÆ^^±±ZZZZ±± V V V V V V//Ü ‚†† Ø ØZZZZ±±±±{{{{{{ ¥ ¥ ¥ ¥RRÿÿZ´Ì…f©© ü ü©© ü ü]] ° °]] ° °]] + +´´´´ss Å Å o o Å Åssssss““î““ 9““““ æ æ æ æ 9 9'''ÔÔRb6¸©©© æ æ““ êêhhhh » »hh~~ Ð Ð z zÔÔ©©VVRRÿÿsÍÅÅCCCCCC –ñ k kÅÅooooÅ kÅÅÅÅss''''}}}}ÔÔ'Ð+ØØ..à:à:çBJJ¤ÿa!W"±$ ((É(É(&Á'n&%f"±!¦žCí’‹0ÒÒ$Ê£H››ññDD……2ØØØ++ÔÔyÔ''' Ì¥¥ ø ø¥¥R ø##ÐÐ' ÌyÔ°°°°°°]´´YY ¬ ¬ÛÛ.ˆ2Œ22]]°°YYÐÐÐÐ' Ìyy Ì Ì Ì Ìyy Ì'yy Ì Ì#}ÐÐ ¡ ¡NN ø ø¥¥ooooÅÅÅÅÉÉvŒ2ŒŒß„„„´´YY ¬ææææ  ` ` · · · · ‹ ‹99XX ª ªXXXXXXXX¶Ó,‹+0MyqqJïBB ë ë™™ Ë Ë Ë Ë Ë ËxxÏÏ""""ÏϹ¹f ¹¹¹¹ff    ¹¹´ Y Y Y .ˆˆˆˆˆˆˆ]]]] ° + + + + °]] ° °]] # # Ð Ð~~ Ð+VV ü ü©©©© æ æ““ æ æ æ æ » »llll±±± VZZZZ © V±//Ü ‚†† Ø ØZZZZ±±{{{{{{ ¥ ¥ ¥ ¥RRÿÿÿZb¼±±©©©© ü ü©© ü ü]] ° °]] + +]] + +´´´´ss Å Å o o Å Åssssss“HHîî“““““ æ æ æ æ““'''''ÔÔR­¼¸©©© æ æ““ êêhhhh » »hh~~ Ð Ð z zÔÔ©© ü üRRÿÿsÅÅCCCCCC –ñ k k k kooÉÉ ÅÅÅÅÅ''''}}}2ÔÔ'Ð+}}..…àà:BœJJJ¤¬¢üü$ $¹"$ "±"#_%füñKCé’80ÖÒÒ$ÊH£õõññDD……2ØØØ++ÔÔÔ.''' Ì¥¥ ø ø¥¥R ø##ÐÐ' ÌÔy°°°°°°YY ÿ ÿÛÛ.ˆ ×222°°YYÐÐÐÐ' Ìyy Ì Ì Ì Ìyy' Ìyy Ì Ì#}ÐÐûûNNRR¥¥ssssooooÅÅÅÅÉÉvŒççç9ß„„YYYY ¬ææææ  ºº · · · · ‹ ‹99XX ª ªXXXXXXXX¶ˆ'!4ª3O#ÓqqïJBB ë ë™™ Ë Ë Ë Ë Ë ËxxÏÏ"""" t t¹¹f _ _ _ _ff    ¹¹´´´ .ˆˆˆˆˆˆˆ]]]] ° + + + + °]] ° °]] # # Ð Ð~~ Ð+VV ü ü©©©© æ æ 9 9 æ æ æ æ » »llll±±± VZZZZ^ V±//Ü ‚†† Ø ØZZZZ±±{{{{{{ ü ü ü ü ü±±VV±±VVV ü ü ¥ ¥ ¥ ¥ÿÿRR ° ° ° °]]]]]]]] o o o ossÍÍ@õXHî““ 9 æ æ 9 9 â= '' z z'Ô z N©­ÿÿ== ====¿¿ d d d¿ Ð Ð~~'''' ¥ ¥RRRRÿÿoo Áoo Á Ášššššššš Á Á Á Á Á ÁoooÉoooo Á Á' ÌyyÐÐØ2''}}}}…+++.‰66çB•ïBB÷¬ñ¦ñ¦ ª ª"±üøø SCíí’88݃($$$ùùùŸHH››2çï•à…2ØÔÔ..''yy¥¥¥¥ûûNN Ì Ì y####YYYY]]°°YY ¬ ¬]]]]„„„„222 ×°°° +]yyyy}# v v Ì Ìyy####ÐÐÐÐÐ vÐÐ¥¥ ø ø¥¥¥¥ÉÉvvssÅÅvvv”Iþ£î922]]YYYY““ææææææ¾dd¾    â â 5 5XXXX®®®®®®®®® …I%p)¤ÐFF™™ • •BBxxxx t tÏÏ Ë Ë Ë Ë"|ÏÏ µ    ¹¹  bb µ + +¸]´´ Û Ûˆˆ22 … …]]]]´´´´´´´ #~ Ð Ð #~~~©© ü ü üV©©——==== ê¿ d » »hh¹^±±±±ZZZZ±±////////±±ZZ ­,Ñ,ÑÕÕ ü üVVV À ±V üVV ü ü ¥ ¥ ¥ ¥ ¥ ¥RR ° ° ° °]]]]]]]] o o o o  ss 曣H“ 9“ 9 æ æ 9 9 â= ''ÔÔ' zÔ N©©©­Rÿÿ== ====ll¿¿¿¿¿ Ð Ð~~'''' ¥ ¥RRRRÿÿoo Áoo Á Ášššššššš Á ÁoooÉoooo Á Á' ÌyyÐÐ}Ø''}}ØØ…+++Ô.ÜÜç•ïBB÷÷<<ññššGGžžCé8í8Ý݃(ƒ$$$ùùùŸHHõõ¬$x#¤à2ØÔÔÔÔ''ÔÔ¥¥¥¥ûûNN Ì Ì y####YYYY]] + +YY ¬ ¬„„„„22 ×2°°° +]yyyy}# v v Ì Ìyy####ÐÐÐÐÐ vÐÐ¥¥ ø ø¥¥ÿÿÉÉssÅÅvÑ++þ"Ò*ñ)– IŒŒ]]]]YYYY““ææææææ¾dd¾hh  <<XXXX®®®®®®®® ®uÐ2Œ*u ë ë > >ïïBBxxxx t t t t Ë Ë Ë Ë"|ÏÏ µ    ¹¹  bb µ + +¸]´´ Û Ûˆˆ22 … …]]]]´´´ÃxÃi´´´ #~ Ð Ð #~~~©© ü ü üV©©====== ê¿ d » »hh^±±±±ZZZZ±±////////±±ZZ ­Ñ,†,00 ü ü üV *%«"öÐ VV ü ü© N ø øRR ¥ ¥ ¥ ¥]]   ° ° ° °]] + + Y Y Y YÉÉ o o o o Å Å Å Å““““ æ æ 9 9 æ æ 9 9===='''''' z z N N© N ¥ ¥ÿÿ â â â==—¿¿l Ð Ð~~ zÔ'' ¥ ¥RRRR­­oooo Á Á Á ÁGGGGG íššoooo Á Áoooooo Á Ì Ì''}}}Ø'ÔÔ}}ØØ++ØØÔ.‰ãçïï••œœááéé’8@@ééáá‹‹0000ƒ(ÒwwwLLŸŸH£õ›ï(ˆ4¶2 i•2ØÔÔ''''''¥¥¥¥ ¡ûûû' Ìyy}}##YYYY]]YY ¬ ¬„„„„22„„°°°°yyyyÐ v##yy Ì Ì####ÐÐÐÐ##ÐÐRRÿÿÿÿÿ¥ÅÅsoovv†ðÿ&á375Å/³çŒ]]°°99ææ““ææddddºº `º<<XXXX T T®®®®mÈuuÈmmm ë ë™™BBBBxxxx""Ï txxxxÏÏ""bb µ µ    ¹¹  bbbb]]]]´´ Û Ûˆˆ … …22]]]]´´´ixô´´ Ð Ð Ð Ð~~++© N©©©©©©==êêê ==¿ d » »hh^ZZZZ V V////// ‚ ‚±± ­ZZ$$ÑÑÕÕ ü ü üV "I1Ú1Ú ï VV ü ü© N ø øRR ¥ ¥ ¥ ¥]]   ° ° ° °]] ° ° Y Y Y Y o o o o o o Å Å Å Å““““ æ æ 9 9 æ æ 9 9===='''''' z z©©© N ¥ ¥ ¥ ¥ â â â==— d dl Ð Ð~~ zÔ'' ¥ ¥RRRRRRoooo Á ÁGGGGG íššoooo Á ÁooooÉÉ Á Ì Ì''}}}Ø'ÔÔ}}}}++ØØÔ.‰ãçïï••œœ‡‡44’8åå44‡‡0000ÖÖƒ(wÒwwLLŸŸîH›õï i/L/L i•2ØÔÔ''''''¥¥¥¥ ¡ûûû' Ìyy}}##YYYY]]YY ¬ ¬„„„„22„„°°°°yyyyÐ v##yy Ì Ì####ÐÐÐÐ##ÐÐRRÿÿZZZÿ  soovvð+ˆ2M5Å78z70[ çŒ]]°°99ææ99ææddddºº `º<<XXXX®®®®®®mÈmÈÈÈ ë ë™™BBBBxxxx||Ï txxxx t t""bb µ µ    ¹¹  bbbb]]]]´´ Û Ûˆˆ … …22]]]]´´´´ii´´´++++~~++© N©©©©©©==êêê ==¿ d » »hh^^^ZZZZ V V////ŠŠ ‚ ‚±± ­ZZ$$ÑÑ{{ ñ ñKKÔ&û&ûKÑÉÉ Å Å Å ÅGGGGžž ñ ñ ° + ° °22 × × . . . .GGGGGGõ šss Å Å o o   p Ë Ë Ë t t t t t t""""""£ I ö ö        ÏÏ"" t t t t Ý Ý Š Š á ᎎ  _ _ µ µ µ µbb¹¹¹¹ _ _¹¹bbbbbµ [µµµµµµµµµµbŸŸMM òMM ò pËËË%Ë œö££úúMMMMMMIIöö¹¹fÁjjrÅ'ÌÐÐÐЪªX²_ºººÝ݃ƒ,,ÙÙÖ{Ö{Î((ΣHHH››H£Ò<ññ‡wÊoÂhææ99 â< â âææææB ç•• ç ç••ª Pªª ý ýªªTTTTTT ¦ ¦(((( Ò,ÙÖÖÖÖƒƒÝ’ñ–<‡mmÄÄÌ 0í6W4¦-á0–1ñ'ßuëëëë>>>>ËËtt!!! Çt ŠŠ Ü Ü ¥ ¥ ¥ÿRRRR ü ü ü üV ü ü ü=—————Dê » » »¿¿====êê== æ æ@@ 9 9 9 9==== æ@““ d dhhhhxxxx Ë Ëxx t tÏ t""""7777 Š Šää µ µjff¹¹ À ÀmmmmmmBBïï™™FF,,,,     ª ª ªý ¢ ¢ýýýýý ù ù ù ù ù ù ù ù ã ã‘‘ççç a¼ — —EE î îKKKKKcc,ÑÉÉ Å Å Å ÅGGGGžž ñ ñ ° + ° °2222 . . . .GGGGGGõ š   Å Å o o   p Ë Ë Ë t t t t t t||""""£ I ö ö         t t"" t t t t77 Š Š á ᎎ  ¹¹ µ µ µ µbb¹¹¹¹¹¹¹¹bbbbbµ [µµµµµµµµµµbŸŸ ò ò òMM ò pËËË%Ë œö££úú§§MMMMIIöö¹¹fÁjj½ÅÌrvvvvªªX²_ƒƒ((ÒÒ{ÖÖ0ƒ((ΣHHH››H£ÒÒÒÒwoÊooÂhææ99 â<êê<<ææææB ç•• ç ç••ª PªªWWªªTTTTTT ¦ ¦(((( Ò,ÙÖÖÖÖƒ8Gf$Ô ÅámmÄÄÌ6" +'t$h££þ9Ïuëëëë>>>>ËËtt!!! Çt  / / Ü Ü ¥ ¥ ¥ÿRRRR ü ü ü ü üV ü ü=—————Dê »¿¿====êê== æ æ æ æ““ 9 9====@›““ d dhhhh  xx Ë Ëxx t tÏ t""""77’’ Š Š Š Š µ µ µ  ¹¹ À ÀmmmmmmBBïï™™ ë ë,,,,     ª ª ªý ¢ ¢ýýý ¢ ¢ ù ù ù ù ù ù ù ù ã ã‘‘ççç a¼ — —EE î îKK ñ ñ ñK¦KÉÉ Å Å Å Å š šG í D D ñ ñ]] ° ° … …22 . .GGGG š š š š     o o o o Ë Ëxx t t t t""|×||Ï t ö ö ö ö         t t t tÏ t"" Š Š Š Š á ᎎ¹¹¹¹ µ µ µ µ µ µ      ¹¹b½½bµµµµµµµbbbµµŸ E ò ò ò ò ò òËËxËËËËI£££M§§MŸúMMII££¹¹fÁ½½½jÅÈÈvPPªªªªª0ÖÎ(ÒÒÒÒÎ(0šå0(ÎPPý£££PP$$ÊÊÊÊÊ$ÊoÂÂh hhææ99<—““““ ç ç ç ç ç ç••ª PªªTTTTªªªªTTTT ¦ ¦TT((((, Ò Ò ÒÖÖÖÖ0@Á/ÿ52]&/K"ÈmÈÄÄqqqÄÄ.ãß***uuÀëëëë>>>>ËË Ç Çtt Ç Çtt Ü Ü Ü ÜRR ¥ ¥RRRR©©©© N N ü ü êêê——êê¿¿====êê==““““@ æ æ æ====““ æ æ¿ d d d » » » » Ë Ëxxxxxx""Ï t""""ää7777 Š Š   µ    À ÀmmmmBB ë ë > >,, Ú   Ú® TXX ª ª ¢ ¢ ¢ ¢PP ¢ ¢ ù ù ù ù ù ù¦¦‘‘ ã ã::::¼¼¼¼ò — — — î î ñ ñ ñ ñ ñKK ñÉÉ Å Å Å Å š šG í D D ñ ñ]] ° ° … …22 Û Û . .GGGG š š š šssssÉÉ o o Ë Ëxx t t t t"""|||Ï t ö ö ö ö         t t t tÏ t"" Š Š Š Š á ᎎ¹¹¹¹ µ µ µ µ µ µ µ µ      ¹¹b½½bµµµµµµµbbbµµŸ E ò ò ò ò ò òËË ÃËËËË£IIIM§§MŸúMM££££¹¹fÁ½½½jÅÅÅÈÈvõõPPPªªªÖ{(ÎwwÒÒ(ƒ‹@@‹ÝƒXýXXªª$$ÊÊ$4C4Âhhhææ99 â<““““ ç ç ç ç ç ç•• PªªªTTTTªªªªTTTT ¦ ¦TT((((, Ò Ò ÒÖÖÖÖ‹š):6Ã7Ç7Ç2][}"ÈmÄÄqqqÄÄÄÄuuÀëëëë>>>>ËË Ç Çtt Ç Çtt Ü Ü Ü ÜRR ¥ ¥RRRR©©©© N N ü ü êêê==êê¿¿====êê==îî““@ æ æ æ====““ æ æ¿ d d d » » » » Ë ËxxÓÓxx||Ï t""""ää7777 Š Š   µ    À Àmmmm À ÀBBBB ë ë™™,, ÚÚÚ Ú® TXX ª ª ¢ ¢ ¢ ¢PP ¢ ¢ ù ù ù ù ù ù L L‘‘ ã ã::””¼¼¼¼ò — — — î îKKK ñ ñ ñ ñ ñ Å Å Å Å     D D ñ – D D D D ° °   Y Y Û2Œ … … ñ ñ ñ ñ – – D D Å Å  """" p ËÓxÏ t tÏxx% Ë    MM ö ö ö ö t t Ç"""""77 Ý77 Ý77        µ µ µ µ µ µ bbb µ^^ ff ¹¹¹¹f  ò ò ò òII œö! Ç Ç ÇËË£IööööIIŸŸM§QQ£þbb¹¹ffrÅÅÈÈLLùŸ¦¦ùù$$$$wÒ,,Ù4Ž88å‹¶¶  __²²ƒÝÖ{Î΃!W(Éõ!lººº<<< â â â“99999““>>>>>>>>mÀ eiiii ý ýªª®T ý ý ý ý ýWªªªªªª ý ý ý ý((((,, $ Ò Ò Ò Ò,,,,‡–$'4e86Ã/RyÄÄmmÈÈqqqqqÀmmë ‘>˜Fë>>xtt Ç Ç Ç Çt  Ç Çtt Ü ÜŠ / ¥ ¥ ¥ ¥ üV©©ÿ ¥ øR ¥ ¥RR=———““““hhhÂêê==““ æ æ@@î“ê == Dê““““ » » hh » » tÏÏ)ÚÚ€€ÓÓÓx""ÏÏŽŽŽŽ á á á á µ µbb _ _  mm À ë ë ë ë ë ë™™Ú ÚÚ00 (ƒXX ª ª T T ¢ ¢PPS ùS ùPPýýPPPPçç:::::: ¸ ¸ee —òò — î îKKK ñ ñ ñ ñ ñ Å Å Å Å     D D ñ – D D D D ° °   Y Y Û Û Û ×2 … … ñ ñ ñ ñ ñ ñ D D Å Å  """" p ËÓx tÏ tÏxx% Ë    MM ö ö ö ö t t Ç"""""77 Ý77 Ý77        µ µ µ µ µ µ bbb µ¹¹ fÁf¹¹¹¹fÁ½ ò ò ò òII œö! Ç Ç ÇËËI£ööööIIŸŸ òMööI£bb¹¹ff½ÅÅÁÁÈÈLLùŸLLŸŸ$$$$wÒÒ‡Ù4Žéí¢Oõ  ssoogg’80ÖÎÎÎ8Oš!lººº<<< â â â“9999999˜˜>>>>>>mÀiiii ý ýªª®T ý ý ý ý ýWªªªªªª ý ý ý ý(((( Ò Ò $ Ò Ò Ò Ò,,,,‡áø"Ì*•):!ÉšÄÄÄmmÈÈqqÄÄqqqÀmmë ‘>˜Fë>>xtt Ç Ç Ç Çt  Ç Çtt Ü ÜŠ / ¥ ¥ ¥ ¥ üV©©ÿ ¥ øRÿÿRR=———““““ÂÂhÂêê——““@@@@£HDê==êêDê““““ » » hh » » tÏÏ)Úê5ÓÓÓx||ÏÏŽŽŽŽ á á á á µ µbb¹¹  mm À ë ë ë ë ë ë™™Ú ÚÚ Ö Ö (ƒXX ª ª®®\\ ¢ ¢ õ õ ùSS ùPPýýPPPPçç:::::: ¸ ¸ee —òò — î î ñ ñ D D D D – ñ Å Å Å Å     D D ñ ñ D D D D]] ° ° Y Y . . . .22ßß ñ ñ ñ ñ D D ñ ñ o ow Å Åss"""" Ë Ë  ""ÏÏ Ë Ë Ë ËMM     I I I I t  t t t t tÏää7777ää¹ _      µ µ µ µ µ µ bbbb½jfÁfÁnÁµµµŸŸŸŸIIIIttt  pËËËööööIIööMMŸŸööööbb¹¹¹¹½½nÈùŸLLLLLL$$wwwÒÒá––ñK!W&Á()v)¡(G'™$ä!Ù$õšíÝÖ{!{(ξhhºº â â â â<<æ ‹ææææ““˜˜ëë>>>> eÀmm ý ý P PTTTT ý ý ý ý ý ýWWW ýªªª ý ý(( {Ö Ò,,‡ÙÙáñOOõåÄqqmmuÈmÈÈÄqqÄÄÄÀÀÀ>>˜˜ëëëëËË!!tttt Ç Çtt Ç Ç Ü7ŠŠRRRR ü ü ü üÿÿRRÿÿÿÿêêòL›@““ÂÂÂÂêêêê æ æ@@@@îî——êê————î“““ » » hh » »""Ï)— $ÍŸˆÓÓx||×";; 3 3 á á á á µ µ µ µ¹¹ffmm À ë ë > > ë ë™™ÚÚ,, Ö ÖƒƒXX ª ª®®\\PP ¢ ¢ ù ù ù ùýýPPýýýýçç::ç :: ¸ ¸ ¸¼¼¼¼òòŸŸ î î ñ ñ D D D D – ñ Å Å Å Å     D D – – D D D D]] ° ° Y Y . . . . × × … … ñ ñ ñ ñžž ñ ñ o ow Å Åss"""" Ë Ë  "" t t Ë Ë Ë ËMM     I I I IÏ t t t t tÏ)ää7777ää¹ _      µ µ µ µ µ µ bbbb½jÅ'Ü}ÈÁ+}ÁfµµµŸŸŸŸIIIIttt  pËËËööööIIööMMŸŸööööbb¹¹½½nDŸññññLLÊÊwwÒ,‡–!!¦#µ)v.à2ï4J5Ð4u2m/¸+R%è!,!, ªOG80Ö!Æs¾hhºº â â<<<<æ ‹ææææ““˜˜ëë>>>> eÀmm ý ý P PTTTT ý ý ý ý ý ýWWW ýªªª ý ý(( {Ö Ò,4 Ò,ÙÙÙÙ‡áåå‹0ÄqqÈÈu"È""ÄqqÄÄÄuÀÀ˜˜˜˜ëëëëËË!!tttt!!tt Ç Ç Ü7ŠŠRRRR ü ü ü üÿÿRRÿÿÿÿêê—òõ›îîÂÂÂÂêêêê æ æ@@@@““——êêò§£Hîîhhhh » »""Ï)=$ *7 ˆÓÓx||||;;ŽŽ á á á á µ µ¹¹  mm À ë ë™™ ë ë™™ÚÚ,, Ö ÖƒƒXX ª ª®®\\PPýý ù ù ù ùýýPPýýýýçç::ç :: ¸ ¸ ¸¼¼¼¼òòŸTII     o o o o š š š š í í í í Å Å   Å Å Å Åã . Û Û . . Û Û   ° ° ° ° ° ° o oss Å ÅžžKKžžžž ö ö ö ö ö ö ö ö   Ë Ë x Ë Ë ö ö œ œ                 I I ö ö Šä777777b  µ µ µ µ µ    µ µ µ µ7’ä?b".'˜$2¡ììF '”+"!¨bbµµËËËËö œ œ œŸŸŸŸ òMMMŸúúúúúMMöööö¹^ f¹¹¹;•;;‘‘??——ññDŸLñHH££Pªw!,!Ù)ø1À5Ð7×7×7U7U7U4 0è*#&$¹"Ý (sc®ùDDDêêê““ææææææ““““ºººº¾dFFëë ç ç•• ¼Ämm ý ýª P Pª ý ýÖÖ((,,W ýªTT ¦ ¦TTTT ýWWWªªªªT®[[®®    [[ÄÄÈÈuu¤¤÷÷  ó˜  FFFëëëmmiiiitÏ!!ËË pË œöööII œ œ33 † † Ð Ð Ð Ð''ÔÔRRÿÿ©©©©hhpŸDò—››îîÂÂhh““““@@îî£%–!†²£››hhhhh öQQQ`ÊÒh„)|"ÏÏÏ„jj½b _ _  bbBBBBBBBmmmmÄÄ\\\®®®®,,  Ú ÚÚ{{{{ s Î{Õ¦¦¦SSë‘‘ 6::çç a aeeÇÇÎ8ƒÎ     o o o o š š š š í í í í k k   ŠŠŠňˆ66 . . Û Û   ° ° ° ° ° °ÉÉss Å ÅùùKKžžžž ö ö ö ö ö ö ö ö   Ë Ëx  Ë Ë ö ö ö ö                ££ ö ö Šä777777b  µ µ µ µ µ    µ µ µ µ7’?™­%3Ç6|5Ê-«eFìF Ï3Â5ö/1/jbbµµËËËËö œ œ œŸŸŸŸ òMMMŸúŸŸŸŸ ò òöööö¹^ f¹¹¹•;àà‘‘??————DŸñ—HHHHõP_Â!,%è+R1À5Ð7×7×7U7U7U7U4÷0è+~$¹ (s¾®TŸDDDêêê““ææææææ““““ººººd FFëë ç ç•• ¼ÄmmÀÀ ý ýª P Pª ý ý { {(( Ò Ò ýWª PTT ¦ ¦TTTT ýWWWªªªªT®[[®®®®  ¶¶""ÏÏÿÿQQ  Mó    FëëëmmÀÀiiiitÏ!!ËËË p œöööII œ œ33 † † Ð Ð Ð Ð''ÔÔRRÿÿ©©©©ÂÂpttŸùLò››îîÂÂhh““““@@îî£!†1Ä3$; õ@hhhhh öQQQ««XX)Ï|"ÏÏÏ„j½b¹¹ffbbBBBBB èBBmmmmÄÄ\\\®®®®,,ÚÚ4ÚÚÚÕÕ{{ Î({Õ[Åë‘ë‘::çç¼¼eeÇÇ΃ƒÎ Å Å Å Å o o o o š š š š š š š š Å Å Å ÅsssÍ6㈈ˆ Û Û ] + + ° ° ° °ÉÉÉÉ  Å ÅùùKK ñ ñ ñK ö ö£ I ö ö ö ö   Ë Ë Ë Ë x ö ö££M òM ò òM    ££ ö ö Š Šää7777 µ µ µ µ µ µbb  _ _bbbbää’ì¼/ +7Ö9184p"×ô‘F(A-)% +Ìbµµ pË œ œII EŸMMŸŸMMŸŸŸŸŸŸŸŸöööö  ¹¹¹¹ff;;ààää‘‘————ñL——››îHPPýXº ~!Ù%è-2m6}7×6¨6¨5N2™0:,+&Á"± ¶ TLñDêêê—<ææ999““9ææææhh · ·ëëëë••• : ¼ ¼iimÀÀ ý ý ý ý ý ý ý ý { {Ö {, Ò ý ý ý ý ¦TTTT ý ý Pªªªªª[[®®[[[[ÌÌÌÌÏ*×2YY¬Uû¨¨MMMF똘ÀÀÀÀiittttxx££ööII œ œ † †33 Ð Ð Ð Ð''ÔÔÿ ¥R­ ü ü©%wÆÆÎ)\ Tõ›@@ÂÂhh““ æ@“““îH.b5&,ZÂHîhhhhh ö ö£££þþ£Ï t""""Ï)Åjbb¹¹¹¹bb½bBBBBBBBBmmmm i iqÌ c¶\\\,,ÚÚ4444(((((((ƒ[[®cŠ"ôz¶ëë>>çç::ee!!ÇÇ Å Å Å Å o o o o š š š š š š š š Å Å Å ÅssÍ(Eë=㈈ Û Û ] ° ° ° ° ° °ÉÉÉÉ    ù®[¦KKK ñ ö ö£ I ö ö ö ö   Ë Ë Ë Ë x ö ö££M òM ò òM     I I ö ö Š Šää7777 µ µ µ µ µ µbb ± ± _ _bbbbää’ì,U6|7Ö7%3"×ô‘‘ô6bµµ pË œ œII EŸMMŸŸMMŸŸŸŸúúŸŸöööö  ¹¹¹¹ff;;ààää‘‘<<———ñ——@@îHõõ£ýoÉ#Š(ô-12™2™1>+Ô)v%f"±¢[ TLñDêêê< âææ999““9ææææ  ëëëë••• : ¼ ¼iimÀÀ ý ý ý ý ý ý ý ýÖÖÖ {, Ò ý ý ý ý ¦TTTTWW Pªªªªª[[®®[[[[ÌÌ&&*„2Œ´´a» +°¨¨MMM F˜˜ÀÀÀÀÄÄttttxxxx££ööII œ œ † †33 Ð Ð Ð Ð''ÔÔÿ ¥R­ ü ü©%4,!!ƒH"Š'ô$’sõ@@ÂÂhh““ æ@“““îHý$$è!† Hîhhhhh ö ö£££þþ£Ï t""""Ï)jbb _ _¹¹bbb½BBBBBBBBmmmmÄÄqÌ( ƶ,,444444ƒƒ((((ƒÝ[[®cŠ(^ŠF‘>>çç::eeÇÇÇÇÉÉ Å k   š š í íž D ñ ñ Å Å Å ÅÉÉ$3\Më66 Û Û Û Y Y    $$ü+ Oõõ š    M ò ö ö ö ö Ë Ë Ë Ëxx Ë Ë    MM I I ö öMMMMMM    777’ä Šääbb µ µ µ µ µ µ  _ _    ŽŽèC¥y*ú0d.¯%6Cää‘‘jjbbbµµ pË p p ò ò ò òŸŸúú òMMMM ò òMMMMMúúŸŸbbbbµµbbää77;;ŽŽ<<êê——ññ——DDHHõõý²_ Å"Ý(G(r$b#!­ Sžéé ®¦››îî““9999 ‹ ‹ææææ“9æædd · ·dd ç ç ç çB ç ç çÀÀm e e®Tªª ý ýƒƒ(ƒªª ý ýWWªªTTTTTTWWªª    Ï*Ï*׌ŒAe¿ll··]¨¨¨¤JJJqqmmÀÀ!!ttÏÏ!!ööIIII œ œ †à33 #~~~''ÔÔ ¥ ¥RRRRZZwÒÎ)š)#2q5&4y,ZÑý››phh““““““@@DD§\Tùò—Æl¿ d » » » » ö ö££££££ÏÏ"" Ë Ë%% µ µ µ   f½½bb  ¹¹ïïBB ë ë™ >ÄÄÄÄÄÄqÛð&µ%Zẃƒ0‹8888††,ÑÙÙ®®®½†!ð$_Fë>>>>>>ÀeeeÀeeeÉÉ Å k   š šGGž D ñ ñ Å Å Å ÅÉÉ$3\E6 Û Û Û Y Y Å Å Å ÅÉÉ¢ ÁWOõõ š    M ò ö ö ö ö Ë Ë Ë Ëxx Ë Ë    MM££ ö öMMMMMM    777’?äääbb µ µ µ µ µ µ  ¹¹    3 3Žè–K¼bRC芊77bbbµµ pË p p ò òMMúúŸŸM§§§M ò òMMMMMŸŸŸŸbbbbµµbbŠŠ77;;ŽŽ——êê<<————ŸŸ££õõ£X[¶cžC鎎Ž44®TLñ››îî““““99ææææææ9 Þæædd · ·dd ç çBBB ç ç çÀÀmÀÀT®ªª ý ý(((ƒªª ý ý ý ýªª ù ùTT ¦ ¦TT ý ýªª[[[[  ccÏ**„ŒAAötÏ|!!l·]¨¨ÿ¤JJqqmmÀÀ!!tttt!!ööIIII œ œ †à33 #~~~'' z z ¥ ¥RRRRÿÿhÂ)8'É5R7Û7Û8‰5Ô+ õõphh““““““@@êê——êD—òÖ{¿ » » ö ö££££££ÏÏ|| Ë Ë%% µ µ µff f½½bb  ¹¹ïïBB ë ë >™ÄÄÄÄÌë.Ô5˜5˜&µo__ƒƒ Ö0’’’G––á†SSS®²g_ë‘ ã ã>>>>Àeeee ee o o Å Å Å Å š š š š D Džž Å  Å oÉ$~ Eã㈈ Û Û Å Ås  oÉwwõªüü¢G š šMMMM ö ö ö ö% Ë Ë Ëxx Ë ËúúMM££ œ öMMMMMM òMäää?’ì’7bbbb µ _ _  _ _ _ _ á ᎎ––ð;ŽŽ Ü ÜŠŠµµbµ [ pË p p p pŸŸMMMMŸŸM\MMŸŸŸŸŸŸŸŸúúbµµµµ7777ŽŽŽèñ—<<<<êê——Ÿ ²Põ££ýýù®TT‡,,,ÙÙ¦LDê@@“““999ææææææææ99ææ ·dd · ·dd••ï••• ç çÀ e eÀªª ý ý(((( Ò Òªª ý ý ý ý ý ý ¦ ¦ ¦ ¦TTTT ýWªª®®[[__² ccÏÏ}2ŒœQ!!1!1"‹!1 „)·]°UQQÿJqqÀÀÀÀ!!! Ç Ç!ttIII£ööII †àà † Ð Ð~~''''RRR­ÿÿÿÿpÖ@-387Û7Û7.7./¼oPõp“ 9““““@@—=êêêêDŸ)t¿ »££ I£££££ÏÏ|| Ë%xxbb µ µ¹¹¹¹bbbb  ¹¹ïïJïFF™™qqÄÌë+q32ã"¥_ƒƒ00å@šb­C4,,ÙSS¦ªªWý‘‘‘‘‘‘ ã> ¸ ¸ ¸ ¸ ¸eÀÇÇ ¿ à à o o Å Å Å Å š š š š D Džž Å  Å oÉÉ$6ˆˆˆˆ Û Ûaa Å Ås  oÉwwõõ¢¢¢G š šMMMM ö ö ö ö Ë p Ë Ëxx Ë ËúúMM££ œ öMMMMMM òMäää?ìGì’bbbb µ¹¹  _ _ _ _ á ᎎ;;èè;;ŽŽ Ü ÜŠŠµµbµ [ pËËË p pŸŸMMMMúú\0"@ÆMŸŸŸŸŸŸŸŸŸŸbµµµµµµ7777ŽŽŽè—<<<——êê——T"Ý*¥!,ª›HH££ùùùùÒwww$$LñDê@@“““999ææææææææ99ææ · \dd · ·dd••ï••• ç çÀ e eÀªª ý ý(((( $ $ Ò Òªª ý ý ý ý ý ý ¦ ¦TTTT ýWªª®®[$o ²cc**׌çAQ#»%@'õ'õ&›$“#9)tÇ· +°¬¬ÿJÌÌqqÀÀ!!! Ç Ç!ttIII£ööII †àà † Ð Ð~~''''RRR­ÿÿÿÿp!‹'É5R7Û7Û7.7.+­PõÊpppppî“““ 9 9 æ æ—=êêêêêD¿ »££ I£££££ÏÏ"" Ë%xxbb µ µ¹¹¹¹bbbb  ¹¹ïï¤ÿûF™™Äq&Ù!øðÑ_ƒƒ00‹å@ª½"rSŽá,ÙSS¦ªªWý‘‘‘‘‘‘ ã> ¸ ¸ ¸ ¸ ¸eÀÇÇ ¿ à à … … … … Û Û . . Y Y ¬ ¬]  ° °ßß22ˆˆ Û6KK ñ ñ ñ ñ ñ ñ Å Å Å Åss Å Å ° °   Y Yßߌ22222QQ££MM             ö ö ö öbb   µ µ µ µ¹ _¹¹  _¹%%ÓÓ)„×|MMMM ö ö ö ö7777 á á á á Š Š7777ä䟟M ò œ œIItt Ç!xx [µµ [ ± ±^^ààŽŽ;;èè:,Ó/ˆJbµµàà † † Ü ÜŠŠ¹^^^µµµµŽŽ;;ŽŽŽŽRRRRÿZÿÿã]#´çssÎÒwùŸLLŸŸŸŸØØØ}ÔÔÔÔ©N ¡ ¡NNNN ø ø¥¥NNNN Ì Ìyy v v##ÖÖƒ(ªªªªW ýªª••BBB ç : : ‘ ‘>>>>>>TTTTªªªª Ò Òƒ(((T®®®¶/ ™zc   ºº¾ÅzÙ3 C'*À.Ð.".")¼%­"Jàb­Kñšõí’ ²²²ªªªªbbbµµµµŽŽàààà33 ò ò ò òÔÔ z z'' Ð Ð++~~++ÿÿ­­¼6,6@7š7š20 ï ±//‰>:…++ÔÔ'' Ð Ð Ð ÐÔÔÔÔ zÔ//ÔÔÔÔ'''' Ë Ë Ë Ë% Ë%%ÏÏÏÏxxxx¹¹  ¹¹¹ _  ¹¹   f_Â,sc ®00ƒƒÚÚ‡á"×*Ð"ÈmmmmÌÌyˆz/‚®SSªPýýýýýý a aeeZZZZ ­ ­ … … … … Û Û . . Y Y]  ° ° … …22ˆˆ Û6 ñ ñ ñ ñ ñ ñ – – Å Å Å Åss Å Å ° °]] Y Yßߌ22222QQ££MMúú         ö ö ö öbb   µ µ µ µ¹ _¹¹  _¹%%xxÏ)×|MMMMQQ ö ö7777 á á á á Š Š7777ä䟟M ò œ œIItt Ç! à à [µµ [ ± ±^^ààèè;;ŽŽv ¤$´•bµµ † † † † Ü ÜŠŠ¹^^^µµµµŽŽààŽŽŽŽRRRR¥ÿÿÿ''.‰::2s(‡wŸDññDDDDØØØ}ÔÔyy©NûûNNNN ø ø J JNNNN Ì Ìyy v v##ÖÖƒ(ªªªª ýWªª••BBB ç : : ‘ ‘>>>>>>TTTT P Pªª Ò Òƒ(((T®®®¶Å k c  ººs  3 C$R+0*4:3Œ3Œ0,q'´"Jb­¦Kšõí’g ²²ªªbbbµµµµŽŽ;; † †33 ò ò ò òÔÔ z z'' Ð Ð Ð Ð~~++ÿÿ­­­b¼&,Æ+l#MÐf ±‰‰N#" Ãïà+ÔÔ'' Ð Ð Ð Ð z z z z zÔÔÔÔÔÔÔ'''' Ë Ë Ë Ë% Ë Ë ËÏÏÏÏxxxx¹¹  ¹¹¹ _  ¹¹   f_ ¾c ® Ö ÖƒƒÚÚ,‡ÈÈuÈmmmmmÌÌy[r½®®®ªPýýýýýý a aee ¸ ¸ZZZZ ­ ­22ßß Û Û . .]] + °222Œãˆˆˆžž ñ ñ D D ñ ñ Å Å s Å Å   ° °]] Y Yß:Œ22222£££ IMM§§    úú ö ö ö öbb   µ µ b  ¹¹    xxxxÏÏ××§Múú££££ää77 á á á á Š Š Š Š Š Šää ò ò ò òII œ œt  Ç Ç p p p pb^ ^^3Žð¥CŽà;Áv}ȵµŽ333ŠŠŠ / ± ±^^µµb3Žàà;à33¥¥¥¥RRRR…………llÝŽÊoDDDDDD——ØØ}}''yy ¡û©NNNN ô J J J JNNNN Ì ÌyÔ}###,,Ù((((WWWW ý ýªªBB•• ç ç ç ç>>>> ‘ ‘ ‘ ‘ ¦ ¦ ¦ ¦ P Pªª Ò Ò(( { { ¦TT[¶[¶¶¶² ºs zà ð',q3Œ6A6ï6ï41Û-$ÿ½KGíí’º__WWbbµµà;CŽ3 Ù †à ò òMM''ÔÔ z z'' Ð+ Ð Ð~~Ø~RRÿÿZ´bˆ&( +" "¸^Ü6°+î(5R3ØÔÔ''~~~~'' zÔ z zÔÔ''''''''xxxxxÓ%%""""xxxxff  ¹¹    ¹¹¹ _ f²²²²  ®®ƒƒƒƒÚÚ,,ÈÈÈÈmmmm À Àyy®[®®ýýýýýýýý¼ ¸ee ­ ­ ­ ­ ­ ­22 … … Û Û . .]] + °22Œç=㈈žž ñ ñ D D ñ ñ Å Å s Å Å   ° °   Y Y …ߌ22222£££ I ò òMM    úú ö ö ö öbb   µ µ b  ¹¹    xxxxÏÏ||§Múú££ I I Š Š77 á á á á Š Šääääää ò ò ò òII œ œt  Ç Ç p p p p ­^ ^^3Ž;ðCŽà;ff¹¹µµµµŽ333ŠŠŠ / ± ±^^µµb3Žàà;à33¥¥¥¥RRRR++++lls$ÊoDDDDDD<<}}}}''yy ¡û©NNN©N J J J JNNNN''yÔ}###,,Ù(((( ý ý ý ý ý ý P PBB•• ç ç ç 瘘>> ‘ ‘ ‘ ‘ ¦ ¦ ¦ ¦ªªªª Ò Ò(( { { ¦TT[[¶¶¶² ºs zà ð'/&4ç7œ6ï6ï7E4/Ó'´!r½[[G¢í’º__WWbbbbbbµµà;CŽŽ3 †à ò òMM''ÔÔ z z'' Ð+ Ð Ð~~Ø~RRÿÿÿZ¼ã/{48.Î2^Ü6‘ûRBØ~ÔÔ''~~~~'' zÔ z zÔÔ''''''''xxxxxÓ%%""""xxxx    ¹¹    ¹¹ _¹ f²²XX®®®®ƒƒƒƒÚÚ,,mmmmmmmmu*ˆ.ÓyS®®®¦SSýýýý ¢W Wii¼ ¸ee ­ ­ ­ ­ ­ ­ Û Û Û Û … … … … ° °]] + + + +22çöúëãˆGG š š D Džž Å Å Å Å o o Y Y Y Y  ]]ˆˆˆˆ Û Û Û Û öQ ö ö£ I£ I œ ö ö ö ö ö££    µ µ µ µ        Ë%xxÏÏÏ)UU§MQ ö ö ö á á á á7777; áèè77ää ò ò ò òIIII p p p pµµŠŠŠŠàà33µµ [µààà † Ü7ŠŠµµ    ŠŠŠŠŠŠŠŠûûûû©©ûû''}}}}oÂ@@õ›êê<<ÔÔ''ÐÐÐÐ ¡û©©©©©N ø ø ø ø ø¥ÿ++## Ì Ìyy,,((((ªª ý ý ¦ ¦TTëëë ‘ ‘ ‘ ‘ë˜>ëë>>>>TTTTªªª P(( { {(( { { ý ý ý ý®ccc c gÁvvvŠ?#N/}4ç7œ8I6ï6ï4:/}*##±WKñéé ®WWbbb  ^^3Ž;;7 Ü Ü ÜIIII~Ø~~+ Ð~~ÔÔ z z''ÿÿÿÿV±±f ï3â7D4縱VÜÜ3Ø~+ Ð Ð ÐÔÔ'' Ð Ð Ð+~~ Ð Ð''ÔÔ'''ÏÏÏÏ||""""""""""bb µ µbb µ µ bbb µ µ µXX®®,,‡‡,,,,Ä iÄU$«ßuªªªªSSSS¦¦¦ý²g²eeÀe¼¼ a¼ ¸ ¸ ¸ ¸ZZ ­ ­ Û Û Û Û … … … … ° °   ° ° ° °22ç`$Þ¯=ãGG š š D Džž  Å ÅÉÉ Y Y Y Y]]]]ˆˆˆˆ Û Û Û Û öQ ö ö£ I£ I œ ö ö ö ö ö££    µ µ µ µ        Ë%xx))Ï) + +§MQ ö ö ö;; á á7777; ᎎ77ää ò ò ò òIIII p p p p [ [ŠŠŠŠàà33µµ [µ † †à † Ü7ŠŠµµ    ŠŠŠŠŠŠŠŠûûûû©©ûû''''}}}}ºÂh@@›@êê<<ÔÔ''ÐÐÐÐ ¡ûNNNN©N ø ø øR ø ø¥ÿ……## Ì Ìyy,,((((ªª ý ý ¦ ¦TTëëë ‘ ‘ ‘ ‘ë˜>ëë>>>>TTTTªªª P(( { {((ÖÖ ý ý ý ý®®®® c gÁÁÑŠ?#N,È3Œ6A6ï8I5”2ß,È'^!ɹWGñ–ŽŽ¶¶ ®WWbbb  ^^3Žàà7 Ü Ü ÜIIII~ØØØ+ Ð~~ÔÔÔÔÜ'ÿÿÿÿV±±f*'³-Ê+2¸±V3ØØ~+ Ð Ð ÐÔÔ'' Ð Ð Ð+ØØ Ð Ð''ÔÔ'''ÏÏÏÏ""""""""""""bb µ µbb µ µb½bb µ µ µ ª ªXX®®,,,,,,,,Ä iÄ6))2ù0Dþ*ªªªª ù ùSS¦¦¦ýýWWÀÀÀe¼¼ a¼ ¸ ¸ZZ ­ ­ Û Û Û Û … … … … ° °   ° ° ° °ßßçQò66GG š š ñ ñ ñ ñss Å ÅÉÉ o o Y Y Y Y]]]] Û Û Û Û Û Û Û Û ö ö£££ I ö ö ö ö I I ö ö££¹ _  bb µ µ    _ _ _ _ Ë ËxxÏÏÏϯ¯úú ö ö££Ž 3 † á7777ŽŽ á;77ää ò ò ò òIIII p p [µŠŠŠŠàà †àb33à † Ü Ü Ü Üµµ^^ ± Ü Ü77ŠŠŠŠ©NûûûûNNyy''++Ðкhhoooî“@æêê<<ÔyyyÐÐÐÐN©NN©NN© ø ø¥¥¥¥¥¥++## Ì Ìyy‡‡,,(( {Ö ý ý ý ý ¦ ¦TT>> ‘ ‘ ‘ ‘>>>>>>>>>>TTTTªª ýWƒ(( Î { {ÖÖªªªª®®[[®c  gÁgÑÑÝì!ô(¸."223Œ4ç3Œ/}*$©OšCé<<c ¶[ªªªµb^^  ŽŽàà Ü ÜŠŠIIII~~++++~~''ÔÔ//'RRRR©^¸È**m^VVÔÔØØ~~~~ Ð ÐÔÔ z z~~ Ð Ð~~ #~ÔÔ'''ÏÏ"|Ï t Ç"""""""""bb µ µ µ µbb µ µ µ µXXXX®®ÚÚ,,,,,,Ä i ¼q&ˆ#-&ʔЪªªª ù ù¦¦ ù ù¦¦ýýýý ¸eeee a a ­ ­ZZ Û Û Û Û … … … … ° °]] ° ° ° °ßßçç==66GG š š ñ ñ ñ ñss Å ÅÉÉ o o Y Y Y Y  ]]6666 Û Û Û Û ö ö£££ I ö ö ö ö I I ö ö££¹ _  bb    _ _ _ _ Ë Ë  ÏÏÏÏúúúú ö ö££Ž 3 † á7777 3 3 á;77ää ò ò ò òIIIIxx p p [µŠŠŠŠàà †àb33à † Ü Ü Ü Üµµ^^ ± Ü Ü77ŠŠŠŠ©NûûûûNNyy''++Ðкhhº“9æ@êê<<yÔyyÐÐÐÐN©NN©NN© ø ø J J¥¥¥¥ÐÐ## Ì Ìyy,,,,(( {Ö ý ýWW ¦ ¦TT>> ‘ ‘ ‘ ‘>>>>>>>>>>TTTTªª ý 8(( Î { {ÖÖªªªªTT[[     ggvv(7?#N'^+m."/}/}+m&#N¹ªOšCé<<c ¶[ªªªµb^^  ŽŽàà Ü ÜŠŠIIII~~ Ð Ð Ð Ð~~''ÔÔÔÔ'RRRR©©^  ^VVÔÔ~~~~~~ Ð ÐÔÔÔÔ~~ Ð Ð~~~ØÔÔ'''ÏÏ"|Ï t Ç"""""""""bb µ µ µ µbb µ µXXXX®®ÚÚ,,,,,,Ä iqÌy.çŒ*Ъªªª ù ù¦¦ ù ù¦¦ýý ¢ ¢ ¸eeiiee¼¼ ­ ­ZZ]]   . .ˆˆ … … … …22ŒŒßß22ssssÉÉ o o   ° ° Y Y22ß:ß …22££££    MM I I I I ö ö ö öbb µ µ _¹¹¹ µ µ µ µ    MM ò ò I£ ö ö% Ëxx Ë Ë Ë Ëbb µ    † †ŽŽ á á;;ö œIIIIIIËËtt Ç Ç^^¹^ ± ±^^^^  µµµµŠŠ Ü Ü †à3333à † Ü ÜŠŠµ [ ­µµb^^^^^^^^¥¥¥¥NNNN¥¥RRÿÿ¥ÿ<<êêê<<<<ææ99''''#}ÐÐN©ûûûûûûÐÐ## vÐÐÐRRR øNNNN Ò Ò,,TT ¦ ¦TT ç ç• : ç ç•• ç ç ç ç ç ç ç çTTT ùªª P Ò Ò Ò Ò Î(((TTTTTT®®[[[[¶¶ccŽéCžK[ !r"J'´)¼,q,( "¡!G;+vÁkkk¶¶  WW^^  µµµµ7 ÜŠŠ Ü Ü Ü ÜŸ E ò ò ü ü ü üRRRR Ð Ð~~ÔÔ+ Ð~~++++ØØ………+Ø~ÔÔÔÔÔÔ Ð Ð Ð Ð~Ø++RRRRRRRR Ð Ð~Ø~~ Ð+ú  úU    úú Ë Ë Ë Ë t t""ää Š Š7777bbbbXXXXXX²²,,,,ƒƒ Ö0 ÀmmÄÄ iqÑÑÑÑÑ w$$ ¢ýýý¦¦ ù ù::::‘‘>>çç::>>>>±±  ]] . . . . … … … …22ŒŒßß22ssssÉÉ o o]] ° °´´22ß::ß22££££    MM I I I I ö ö ö öbb _¹ _ _ µ µ µ µ    MM ò ò I£ ö ö% Ëxx Ë Ë Ë Ëbb µ    á ᎎ á á á áö œIIIIII p ptt!!^^¹^ ± ±^^^^ ± ±µµµµŠŠ Ü Ü †à3333à † Ü ÜŠŠµ [ ­µµb^^^^^^¹¹¥¥¥¥NNNN¥¥RR¥¥¥ÿ<<êêê<<<<ææ99''''#}++©NûûûûûûÐÐ## vÐÐÐRRR­NNNN Ò Ò,,® ù ¦ ¦TT ç ç• : ç ç•• ç ç ç ç ç ç ç çTT®Tªªªª Ò Ò Ò Ò Î(((TTTTTT®®[[[[¶¶ccŽééCK¦­;#¥%­(b&±"¡ìÝ+Ñg¶¶¶  WW^^ ± ±µµµµ7 Ü / / Ü Ü Ü ÜŸ E ò ò ü ü ü üRRRR Ð Ð~~''ÔÔ+ Ð~~++++ØØ++…+Ø~''ÔÔÔÔÔÔ Ð Ð Ð Ð~Ø++RRRRRRRR Ð Ð~Ø~~ Ð+ú    ú    úú%% Ë Ë t t""ää Š Š7777bbbbXXXXXXXX,,,,ƒƒ Ö0 Àmm iÄÄ iqÄÄÄÄÄÄÑÑÑÑÑ w$$ ¢ýýý¦¦ ù ù::::‘‘>>çç:: ã ã ã ã±±]  ° ° Û Ûˆˆ … … … …222222 … …ss Å Å o o o o]]]]´´´´22::çŒ22££££      ú£ I ö ö ö ö ö ö µ µbb      µ µ        òM ö ö ö öx  Ë Ëxx Ë Ëbbbb _ _  ŽŽŽŽ á á 3 3IIII œ œ œ œ Ç Ç Ç Ç ± ±  ± ±^^ ± ± ± ± Ü ÜŠŠàà † †3333 Ü ÜŠŠ [µ^^^^^^  ¥¥¥¥ûV©N ø øRR¥¥¥ÿ<<<<<<< âææ99''''#}+…VV©©©©ûûÐÐÐÐÐÐ}}RRÿÿNNNNTT ¦ ùTTT ç ç ç ç :••• ç ç• : çB••®®W ýª, Ò Ò Ò { { Î( ¦ ¦ ¦ ¦TT®®[    ¶¶á<ééñKøS3Žè! ™äÝ(Ñvo¶cc¶[[[W²ª^^^^µµµµŠ / ‚ Ü Ü Ü Ü ÜŸ E ò ò ü ü ü ü ¥ ¥ ¥ ¥ Ð Ð~~ÔÔÔÔ Ð+~~++++++++~~ Ð Ð''''''''+ Ð Ð Ð++++RRRRRR ¥ÿ~~~~~~++úúMMúú§§xx Ë Ë t t""ää77 Šä77bbbbbbbbXXXXXX,, ڃ݃ƒ À À À ÀÄÄÄÄqqqÙ,ÑÑ w wÑPPªª ù ù¦¦:: ‘‘>>çç:: 6‘ ã ã±±^^µµ]  ° ° Û Ûˆˆ … … … …222222 … …   Å Å o o o o]]]]´´´´ŒŒ::çŒ22££££      ú£ I ö ö ö ö ö ö µ µ      bb µ µ        òM ö ö ö öx  Ë Ëxx%%bbbb _ _ffŽŽŽŽ á á 3 3IIII œ œ œ œ Ç Ç Ç Ç ± ± ± ± ± ±^^ ± ± ± ± Ü ÜŠŠàà † †3333 Ü ÜŠŠµ^^^^^^  ¥¥¥¥ ¡û©N ø ø ø ø¥¥ J¥<< â â<<< âææ99''''#}+…°°¸©©VV++ÐÐÐÐ}}RR¥¥NNNNTT¶ ùTTT ç ç ç ç :••• ç ç• : çB••  ²Wª‡, Ò ÒÖÖ( Î ¦ ¦ ¦ ¦TT®®[    ¶¶‡áééñKžø~ÙÙÙ//‚ÍÁº¶  ¶[[[W²_º^^^^µµµµŠ / ‚ Ü Ü Ü Ü ÜŸ E ò ò ü ü ü ü ¥ ¥ ¥ ¥ Ð Ð~~ÔÔÔÔ Ð+~~++++++++~~ Ð Ð''''''''+ Ð++++++RRRR­­ÿZ~~~~~~ Ð ÐúúMMúúMMxx Ë Ë t t"" Š Š77ä Š77bbbbbbbbXXXXXX,, ÚÝ8’Ý À À À ÀÄÄÄÄqqÌqÙé–†Ñ w wÑPPPP ù ù¦¦::çç‘‘>>çç:: 6‘ ã ã±±^^ZZ ° ° ° ° Y Y Y Yˆ . Û Û Û .ˆ Û Ûˆã6 Û Û Û o o   s Å Å Å Â o o´Œç”ïAç:ߣ£ ö öMM  úQ ö££££ ö ö µ µ µ µ µ µbbf ± _ _  bbMM ò ò ö ö ö ö""""""||¹¹¹¹¹¹¹ŽŽ á á Š Š Ý Ý œ œ œ œI î œ œb^^^^ ± ±^^ [ [ààŽŽŠŠ Ü Ü † †3ŽŠŠ Ü Ü^^^^^^ ± ±^^¹^ûVûûN©ûûûûNN¥¥ ø øææ“9 â â@æææææ9“ÔyyyÐ+ØØ¼b°V©''''yy''NN©NNNNN $ Ò Ò Ò Ò ¦ ¦TTTT>>>>>> ‘ ‘ ‘ ‘ ‘ ‘ ç ç••ª$s ®T,,,,ª P ý ý ¦ ¦T®[ ®[[ÝÝåõü¢íGsÍÍÍ$~voº   ²²²[[ªg²  ^^µµµ [33 † † † †33 œ œII ü ü N NRR ¥ ¥ Ð Ð~~~~~~ÔÔ''++Ø~~~++~~ Ð Ð'''' z z''ÔÔÔÔ…+ØØÿÿ­RVVVV~~~~'' z z££££QQ ö ö"""" Ë Ë Ë Ë Šä77 á á á; µ µXX ª ª ª ªXX00ÝÝ‹@@‹mmmm i iqÌy4Cð,ÑÑ$$ýýPPPPýý‘‘‘‘‘‘ ã>‘‘‘‘‘‘ ã>Zµµµ±± ° ° ° ° Y Y Y Yˆ . Û Û Û Ó . Û Ûˆã6 Û Û o o   s Å Å Å ÂÉÉ´çöY³ö”:££ ö öMM  úQ ö££££ ö ö µ µ µ µbb  ¹¹    MM ò ò ö ö ö ö""""""||¹¹¹¹¹¹¹ŽŽ á á Š Š77 œ œ œ œI î œ œb ­b^^^^ ± ±^^µµààŽŽŠŠ Ü Ü † †3ŽŠŠ Ü Ü^^^^^^  ^^¹^ûVûûN©ûûûûNN¥¥ ø øææ“9 â â ‹æææææ9“ÔyÔÔÐ+22Äq °©N''''yy''NNN ôNNNN $ Ò Ò Ò Ò ¦¶TTTT>>>>>> ‘ ‘ ‘ ‘ ‘ ‘ ç ç••ª~(b#ü¾®T,,,,ª P ý ý ¦ ¦T®[c [[ÝÝåõWüGí¾oÉÁºº²²²W²²[[ªWW  ^^µµµ [33 † † † †33 œ œII ü ü N NRR ¥ ¥ Ð Ð~~~~~~ÔÔ''++Ø~~~++~~ Ð Ð'''' z z''ÔÔÔÔ+…33ÿÿ­ ü ü ü ü~~~~'' z z££££QQ ö ö"""" Ë Ë Ë Ë Šä77 á á á; µ µ µ µ µ µ ý ý ª ª ª ªXX00Ý’õõå0mmmm i iqÄÙ†,ÑÑ$$ ¢ ¢PPPPýý‘‘‘‘‘‘ ã>‘‘‘‘‘‘>˜jjµ±± ° ° ] ¬ ¬ Y Y Û Û Û Û Û Û Û Û Û Ûˆ=˜ãˆˆÉÉ   Å   Å ÅÉÉa´´»»ö»%â)ñ%âÃQAQQþ£MMMMQQ ö ö ö öQ ö   µ µbbbb  ¹¹bb  M ò ò ò ö ö ö ö""""""Ï)f ¹¹f 3Ž;;7777 œ œ œ œIIIIË pË˵µµµ ± ± ± ± ± ± ^bµµŽ3àà Ü ÜŠŠ3333ŠŠ /Š ±^^^^^^^^^¹NNN©ûûûû©NNN ø ø¥¥9999 â â9999“9““''''ÐÐ……´i^©©''''yy Ì Ì ¡ûNNN ô ¡ ¡ Ò, Ò ÒT ù[® ¶[ë ‘>> ‘ ‘>>>> ‘ë ç ç••_Ñ•‚c,,,, Ò,,,ª P ý ýTTTTTT[ ®[[‹‹åå’íí’¾¾gÁo__²²®®TTWWWW¹^^^µµ33 † † † † † † œ œII ü ü ü üRR ¥ ¥ Ð Ð++ØØ++ÔÔ'' Ð+…+ Ð Ð++ Ð Ð~~''''ÔÔ''''''+àè­­©©©©~~~~ z z'' ö ö ö ö ö ö ö ö""""% Ë  7777 á ᎎbb µ µbb µ µ ýXXX000@WG‹0 À À À Àqq i iqqÑÑÑÑ$$PPPPPPýý‘‘ ã>> ã‘‘‘‘‘‘>˜>˜ÌÜÔ ° ° ] Y Y Û Û Û Û Û Û Û Û Û ÛˆˆˆˆˆˆÉÉ   Å k   Å ÅÉÉa´´aa»pp-S6 7z6 0¶!%ö««þ£MMMMQQ ö ö ö öQ öbb µ µbbbb  _ _bbbbM òMM ö ö ö ö""""""Ï)ÉÉÁf¹¹f 3Ž á á7777 œ œ œ œIIIIË p p p [ [µµ ± ± ± ± ± ±¹^bµµŽ3 † † Ü ÜŠŠ3333ŠŠ /Š ±^^^^^^^^^¹NNN©ûûûû©NNN ø ø¥¥9999 â â99999“99''''ÐÐÐ…ZZbb¸^''''yy Ì Ì ¡ûNNN ô ¡ ¡ Ò, Ò Ò®T ¦¾c¶ë ‘>> ‘ ‘>>>> ‘ë ç ç••ª² c® Ò Ò Ò Ò w Ò,,ª P ý ýTTTTTT ¦T®[[0åšš’88ݶ¶ccgÁº__²²®®TTWWWW¹^^^µµ33 † † † †àà œ œIIVV ü üRR ¥ ¥ Ð Ð Ð Ð~~++ÔÔ'' Ð++…++++ Ð Ð~~''''ÔÔ''''''+àè­­R©©©©~~~~ z z'' ö ö ö ö ö ö ö ö""""% Ë  7777 á ᎎbb µ µbb µ µ ýXXX000‹8Ý‹0 À À À Àqq i iÑÑÑÑ$$$$PPPPPPýý‘‘ ã>> ã‘‘‘‘‘‘˜ó>˜'^^ øR ¥ ¥ÿÿRR ¥ ¥ ¥ ¥ N N©©RR ¥ ¥ ü ü ü ü ° ° ° °]]   Û Û Û Û2222ÉÉÉÉÑÑ,–'Ô6·887»6`+Œ™³X«QMMMMÏÏ"" Ë Ëxx77 Š Š7777 µ µbb  ¹ _ ¼mm…x-¤Bïï™ > ë ë •ïBB3333àà3333à † Ü Ü Ü Ü Ù Ù † † Ü ÜŠ / ^^^ŸŸ E E ò ò ò òËË33 †àà †33^^^^µµµµCCCCCžKKøžññG í í í í í í í – – –ñššG íšššš99““““““llsÎs“99“æ ‹99 â â â â9999>>>> ‘ëëë ÄÄÄ ‘ ‘>>>>>>xxxxxËËË p Ç ÇttII œ œŸŸ E EtttÏfB÷ÐÁÁ™?ììììììúúöööö£IööMMMMööööööIIIIII E E ò ò Ü Ü Ü Ül » » »hhÔÔÔÔ zÔÔÔ©©VV ü ü ü ü Å ÅsÍss sG í íGžù¦¦OõGG šOGGGGõõ ñ ñ ñ ñ,,,,     Ö Ö Ö Ö0 Ö Ö Ö • •ïïBB • • ë ë ë ë • •B è xxxxxxx%%%%ÏÏ|" Ë Ë Ë Ë Ë%xx ö ö ö ö         ¸ ¸ ¸ ¸eeeeeeee¼¼¦¦¦¦PPýý{Õ((ÕÕ((ÎÎ||Ît øR ¥ ¥ ¥ ¥RRÿÿ ¥ ¥ N N N NRR ¥ ¥ ü ü ü ü + + ° °]]]] Û Û Û Û22ŒŒÉÉÉÉÑÑ,–'Ô6·887»9/œ©³X«QMMMMÏÏ|| Ë Ëxx77 Š Š7777 µ µbb  ¹ _qmmФ/k2 %ò´÷ïï™ > ë ë •ïBB3333àà3333à † Ü Ü Ü Ü33 † † Ü ÜŠ / ^^^ŸŸ E E ò ò ò ò p p33 †àà †33^^^^µµµµCCCCCžKSøññG í í í í í í í – – –ñššG íšššš999999““¾¾¾¾“99“@æ99 â â â â9999>>>> ‘ëëëi&qÄÄmm ‘ ‘>>>>>>xËËË p Ç ÇttII œ œ E E E EtttÏf22vÁff™?‘‘‘‘‘‘§§úúöööö£IööMMMMööööööIIIIII E E ò ò Ü Ü Ü Ül » » »hhÔÔÔÔ zÔÔÔ©© ü ü ü ü ü ü Å ÅsÍsssÍ¢G íGžùKKõ šGG š šGG í í š š ñ ñ ñ ñ,,,,     Ö Ö Ö Ö0 Ö00ïïïïBB • • ë ë ë ë • •B è x  xxxx%%%%ÏÏ|"%% Ë Ë Ë%xx ö ö ö ö         ¸ ¸ ¸ ¸eeeeeeee¼¼¦¦¦¦ªªýý{Õ((ÕÕ((tt!!Ît ¥ ¥R ø ø ø ¥ ¥RR øR ü ü N N ø ø øR ü ü ü ü]] ° °]] ° ° Û Û Û Û22ŒŒwwÉÉwÑÑáµ2¨887»5(×ô`«þþúúM§ÏÏ||Óxxxää77 Š Š Š Š [ µ µ µ  _¹ÄÄ i immФ.¾1s'L´÷ïï™ > ë ëBBB3333Ž333 †àà † Ü Ü Ü Üà †33 Ü Ü Ü Ü   ^µµµµ ò ò ò ò ò ò ò òxxà †333333^^ ± ±µµµµCCCCññøÌøžôš íG í í í íñ – – – í í í íššššææ999 Þ9“¾¾ææææææ99 â â â â9999>>ë ‘ ‘ëëë ¼iÓÄÄiiÀÀÀÀÀÀ ‘ ‘>>ëë˜> p pË p Ç Çttööö œ E E E E p pËËttÏÏfÁnn¹¹‘ìää‘‘‘‘úŸMMII œöööööMMMMööööII££IIII E E EŸ Ü Ü /Šl hhhÂÂÔÔÔÔÔÔ''V ü©©©©©©ssss Å Å z¢GGGùžžžGGGGGGGGGG š š ñ ñ ñ ñ  ,,,,,,ƒƒƒƒƒƒƒƒïïBBïïBB ë ë ë ë • • • • Ë Ë Ë Ëxxxx%%xx"|ÏÏxx Ë Ë x Ë Ë££££         ¸ ¸ ¸eeeeee¼¼¦¦S®ªªª0ÕÕ{(({{tÎ!|)) ¥ ¥R øRR ¥ ¥RR øR ü ü N N ø ø øR ü ü ü ü]] ° °]] ° ° Û Û Û Û2222ÉÉwÑ,–%/ó2¨2Q,ç^äQ££úúM§))||Óxxxää77 Š Š Š Š [ µ µ µ  _¹ÄÄ i immu*q&ÃÿBïï™ > ë ë èBBB3333Ž333 †àà † Ü Ü Ü Üà †33 Ü Ü Ü Ü   ^µµµµ ò ò ò ò ò ò ò òxxà †333333^^  µµµµžžžžññ­!6)U'SøôšG í í í í íñ – – – í í í íššššææ99“99“ddææææææ99 â â â â9999˜˜Fë ‘ëëë ¼ÄyiiiiÀÀÀÀÀÀ ‘ ‘>>ëë˜>ËËË p Ç Çttööö œŸŸ E E p pËËtttt f¹¹¹¹7‘ää‘‘‘‘úŸMM î î A œööööMMMMööööIIIIIIII E EŸ E Ü Ü /ŠlhÂÂÂpp////ÔÔ''V ü©©©©©©ssss Å Å Å ¢GGGùžžž¢¢GGGGGGGG š š ñ ñ ñ ñÚÚ,,,,,,ƒƒƒƒƒƒƒƒïïBBïïBB ë ë ë ë • • • • Ë Ë Ë Ëxxxx Ë Ëxx"|ÏÏxx Ë Ë x Ë Ë££££         ¸ÀÀeeee¼¼¦¦S®_º0ÕÕ{(({{tÎ|‹¢¢ ü ü ü ¡ ¥ ¥ ¥ ¥©© ü ü N© ü ü N N N NRR ¥ ¥ Y Y´ Y … … … …ãˆ Û ÛÉÉsÍzzÙC!¼$qèÙþ£££££Q«ˆâ5Ú|"ÏÏ7’ää7 Ý Š Š _ _ ± ±bbb½ À Àmm À ÀmmmmmmuÐûU¨óïïBBBB è è >™ ë ë333333 † †33Ž33333 Ü Ü Ü Ü † † Ù3^^ ± ±µµ EŸ ò òŸ E ò òËËËË Ç ÇtÏ Ü ÜŠŠ77ŠŠµµµµGGššññ}©O¢ í í ’ – –CCCCññññCCššGGææææ< â<<ddææææ““999999FFëë>>>> ¼ ¼iiiiÀÀÀÀ ç ç ç ç çB•• Ç Çtt Ç Ç Ç Çx òMŸŸII œ œËËttttµµbbµ77ää;;ŽŽMMŸ ê ˜ ò E Eöö££MMMMúŸŸŸ òMM ò œöII ò òŸŸ3333hhhhhh¿¿l!)““Þ:…++~~ Ð Ðÿ ¥ øRRRÿÿwwÉ o Å ss ñ ñKKùžžžKK ñKžž ñ ñõ šGG š š š š,<ÚÚƒƒ Ö ÖÚÚÚÚÚÚÚÚïïBBïïBBBB ë ë™ > Ë Ë Ë Ëxxxx"""" Ë%Óxxx%%xxxxMMú   ö ö ö ö¼¼¼¼ ¸¼¼ýý_r‚/Å݃Õ{{{((Ît1!º-;-; ü ü ü ¡ ¥ ¥ ¥ ¥ N N ü ü N© ü ü N N N N ø ø ¥ ¥ Y Y´ Y … … … …ˆ . Û ÛÉÉwwÍszz~~ÙŽè3Ù~þ£££££Q«=!kcê×|ÏÏ7’ää7 Ý Š Š _ _  bbb½u À À Àmm À Àmmmmmmu FóóïïBBBBBB >™ ë ë333333 † †333 Ù3333 Ü Ü Ü Üàà Ù3^^  [ [Ÿ E ò ò EŸ ò òËËËË!!tÏ Ü ÜŠŠ77ŠŠµµµµGGššññK¹W¢ í ’ – –CCCCññññCCššGGææææ< â â âddææææ99999999ëëëë>>>> ¼ ¼ÄyiiiiÀÀÀÀ ç çBB çB•• Ç Çtt!! Ç Çx òMŸŸII œ œËËttttµµbbµµµ77ääààŽŽMMŸ ê ˜ òŸŸööIIMMM úŸŸ òMM ò œöII ò òŸŸ3333hh » »hhhh¿¿Æ{ý,†0•(vÿà++~~++ÿ ¥R­­­ÿÿwwÉ o Å ss ñ ñKKùžžž ñ ñK ñžž ñ ñõ šGG š š š š,‡ÚÚƒƒ Ö ÖÚÚÚÚÚÚÚÚBBïïïïBBBB ë ë >™ Ë Ë Ë Ëxxxx"""" Ë%Óxxx%%xxxxMMú   ö ö ö ö¼¼¼¼ ¸ ¸ ¸¼¼WWÉ'°1*1×)¸¢Ý0Õ{{((t΋%É2¥2¥©© ü ü øR ¥ ¥ ü ü ü ü üV©© ü ¡ ¡ ¡ ¥ ¥ ¥ ¥ Y Y Y Y Y Y22 … … Û Ûˆˆ Å ÍÍ$$~Ù†,ÑÑþ£££QQþX=T))×|ä?ää Š Š Š Š  ¹ _bbmmmmmÈ À À À À À À ÀmmóóFFBBïïïïBB ë ë ë ë3333 † † †à33à † Ù3 † † Ü Ü Ü Ü33 Ù3^^f  ò ò E E E E òMËË pË!!tt Ü ÜŠŠä䊊 í íššññžø©%œ&÷n©¢¢øžññC éCC – –CCš ?šš“9“9ddææææ99ææ< â9999ëëëëëë>> ¼ ¼&iiiiÀÀÀÀBB••••B çtt Ç ÇË p! Ç Ç Ç p p ò ò ò òIIöö p p Ç Ç Ç Çbbµµµµbb7 Ü77ààààŸŸ ò ò ò òŸŸööööMM§· ú ò òŸŸŸŸIIII òM ò ò3333 » » hhhhllÞ,†7Z85R#x•…+ Ð+~~ÿ ¥RRRRRRssss ñ ñ ñ ñ ñ ñžž ñKžžžž ñ ñGGGG š š š š,,, Ò (ƒƒƒÚÚ‡,ÚÚ,, • •BB •ï • •BB ë ë ë ë x Ë Ëxx%%"" Ç"xxxÓÓÓÓÓxÓ%%MMMM öQ££i¼¼eeee¼¼ýWº"597î7A32¹Š0ÕÕ{ Î Î!!ƒH _©© ü ü øR ¥ ¥ ü ü ü ü üV©© ü ¡ ü ü ¥ ¥ ¥ ¥ Y Y Y Y Y Y × × … … Û Ûˆˆ Å ÍÍ$$$~,ÑÑÑþ£££QQþX-ˆÚ€)ÞAæ™?ää Š Š Š Š  _¹bbmmmmmÈ À À À À À À Àmm™™ ë ëBBïïïïBB ë ë ë ë3333 † † †à33à † Ù3 † † Ü Ü Ü Ü33 Ù3^^f  ò òŸŸ E E òM p p pË!!tt Ü ÜŠŠŠŠŠŠ í íššññ­S©È,a0p 2ü±­žññC éCC – –CC ?ššš“99“ddææææ99ææ< â9999ëë ‘ ‘ ‘ ‘>> ¼ ¼ ¼iiiiÀÀÀÀBB••••B çtt Ç Ç pË Ç! Ç Ç p p ò ò ò òIIöö p p Ç Ç Ç Ç [ [µµ7 Ü77ààààŸŸ ò ò ò òŸŸööööMMM§Tú ò òŸŸŸŸIIII òM ò ò3333 » »hhhhhhllÞ++5ÿ85R&-•…+ Ð+~~ÿ ¥RRRRRRssss ñ ñ ñ ñ ñ ñžž ñKžžžž ñ ñGGGG š š š š,,, Ò (ƒƒƒÚÚ‡,  ,, • •BBïJïïBB ë ë ë ë x Ë Ëxx Ë Ë"""|xxxÓ-â—-xÓ%%MMMM öQ££i¼¼eeee¼¼ýW_Ž2„7î7A32 å0ÕÕ{((!!Î)Ö1Ô z Ì' z z z z'' zÔ''ÔÔÿ ¥ ¥ ¥RR ¥ ¥ ° ° ° ° ° °]] ¬ ¬]]]] ñ ñ ñ ñ ñ ñKK¢¢¢üSSUúM§¿ˆ-ÓÓ×P%Ñ g#¹¹  _¹ 3 3 3Ž7777ÄÄ ë ë > > ë ë ë ëBBBB ë ë ëFmmmmmmmm † †3 Ù Ü Ü77 ± ±^^ ± ± ^^^¹¹^^ ± ±tttt Ç Ç t Ç ÇttË pËË ± ± ± ±Š / Ü Ü / / Ü Üo$èÙÑàR­ä  Õ¢GššššššÅÅÅÅsººhhhhºº<<ææ““hhºººººº<< â â â âBB ç ç>>>> ç ç çQ•••• ¼ ¼iiii•••• ç ç••ŸŸ E EIIIIx p p Ç ÇttxËË ò ò ò ò òM ò ò Ü Ü Ü ÜŠŠŠŠàààààà33 Ç Ç Ç ÇËËËËŸŸŸúþ£ööööII òMú¯§MŸŸööII ± ±^^hh » »h h““îý~+­0j)¥2¸V ü©©V ü''''~~~~ ñ ñ ñ ñ ñ ñ ñ ñÉÉ o oÉÉõõ¢GõõõõžžžžK ñž D ª®®\\ ªXXmmmmmmÄÄq ö ö ö öMMMM x%%""Ï)\!0·UUUúMMMM££ ö öeeee¼¼¼¼‘‘ ã ã:::”ÑÑÙž#Ì-F/û%'ôŠƒ(Õ{ÕÕ!!!!!!Ô z Ì' z z z z'' zÔ''ÔÔÿ ¥ ¥ ¥RR ¥ ¥ ° ° ° ° ° °]]]]]] ñ ñ ñ ñ ñ ñ ñ ñGG¢ü®Í"ì 7dUM§§\Þ$¢ò-ÓÓ×P',$wع¹  _¹ 3 3Ž 37777ÄÄ ë ë > > ë ë ë ëBBBB ë ë ‘ ëmmmmmmmm † †3 Ù Ü Ü Ü Ü ± ±^^ ± ±^¹^^^^^^ ± ±tttt Ç Ç t Ç ÇttË pËË ± ± ± ±Š / Ü Ü / / Ü Üo$~$vÑ~Ùz   ¢GššššššÅÅÅÅsºº  hhºº<<ææ““hhºººººº<< â â<<BB ç ç>>>>BB çQï :•• ¼ ¼iiii•••• ç ç••ŸŸŸŸIIII à p p Ç ÇttxËË ò ò ò ò òM ò ò Ü Ü Ü ÜŠŠŠŠàààààà33!! Ç ÇËËËËŸŸŸúþ£ööööIIM§ s·§ŸŸööII ± ±^^hh » »h h““îHP_g V ü©©V ü''''~~~~ ñ ñ ñ ñ ñ ñKKÉÉÉÉÉÉõõ¢GõõõõžžžžK ñž D ª®®\\ ªXXmmmmmmÄÄq ö ö ö öMMMMx %%""Ï)·0%O‹d¯¯U§§MM££ ö öeeee¼¼¼¼‘‘ ã ã:::”ÑÑÙéøSžå0(ƒ0ÕÕÕÇÇ!!!!'' z z zÔ zÔ'' zÔ'' ÌRR ¥ ¥RR ¥ ¥]] ° °]] ° °]]]] ñ ñ D D ñ ñ D DGG¢ü'¨3*+ Uúúú¯ÆÖ€ÓÓ׌›AÉ    _ _ 3 3 á á7777Ì i i ë ë ë ë™™™™ï •BB™ > ë ëmmmmmmmm3333ŠŠ Ü Ü^^^¹ ±^^µµ [µ [µ^^  ^^ ± ±!!tttttt Ç ÇttË%^^^^ Ü7ŠŠ Ü Ü Ü ÜsÅÅÉÉÉÉÉÉ   ÅššššššššÅźºh ººhh<<< â““ææºººººº<<êê<<<<••••>>>>••B÷÷ ç ç çii ¼ ¼iiÄi•••• :•••ŸŸ ò ò£I œ œ p p Ç ÇttŸ E ò òŸ E òM Ü Ü Ü Ü Ü Ü Ü Ü33 †ààà33tÏttxËËŸŸŸúööööööIIM§\§MŸŸ£III^^ ± ±hh » »h » »““îîîHõõ±V©©VV©©''''~~Ø~ ñ ñ ñ ñ ñ ñžžÉÉÉÉ šõGG šõõõžžžžž Džž®®®®XX\²X²Xmm À À i iÄÄ ö ö I IMMMMxxxxÏ)|1Î* 3†.ο +U§MMM££ ö ö ¸ ¸ ¸ ¸ a¼‘‘ 6‘çççç$Ù4ááÝ(Õ0ÝÝ݃tt!!!!'' z z zÔÔ z'' zÔ''RR ¥ ¥RR ¥ ¥]] + +]] ° °aa]]]] ñ ñžž ñ ñ D DGGG¢[Ô(V"ìUúúúú§€%xx|||×n¹    ¹¹ŽŽ;;7777qq i i ë ë ‘ ‘™™™™ï •BB™ > ë ëmmmmmmmm3333ŠŠ Ü Ü^^^¹ ±   [ [ [µµ [^^  ^^ ± ± Ç Çtttttt Ç Çtt pË^^^^ Ü7ŠŠ77 Ü ÜsÅÅoooooo Á ÁÅÅ ÅššššššššÅźºh ººhh<<< â““ææ——DD——<<••••>>>>•• ç çQB ç çii ¼ ¼iiy•••• :•••ŸŸ ò ò£I œ œ p p Ç ÇttŸ E ò òŸ E òM Ü Ü Ü Ü Ü Ü Ü Ü33 †ààà33tÏttxËËŸŸŸúööööööIIM§§§MŸŸ£III^^ ± ±hh » »h » »îî““î“››V ü©© ü ü©©''''~~~ # ñ ñ ñ ñ ñ ñžžÉÉÉÉ šõGGõ š š šžžžžž Džž®®®®XX\ gg mm À À i iÄÄ ö ö££MMMMxxxxÏ)|1 “3†8ð6;$¢¿d¯§MMM££ ö ö ¸ ¸ ¸ ¸ a¼‘‘ 6‘ çç$Ù,,ƒƒ0?¢WG8ÎÎÇÇÇÇÔ z z z~~~~ÔÔÔÔ++++ ¥ ¥ ¥ ¥ ¥ ¥ øR Y´´´´ YõõGG ñ ñ ñ ñ š šõõSr½³þQQ££ öQ%%xxÏÏ||½b µ µ µ µbbŽŽ á á 3 3 á ámm À Àmm À À ë ë ë ëBB •ï ë ë ë ëBB • • iÄàà333333 ± ±¹¹^^ ± ± ± ^µµµµ^^^^ Ç Çtt Ç Ç Ç Ç^^^^ ± ±  33337 Ü Ü Üs k koo Á Á íGG íCCCCoo Á Áooººººhhºº<<<<““@@llH£XýŸDêêëëëë>>ë ‘ëë>>Qœ•• ¼iiiÄÛœB ç ç ç ç••ŸŸ ò òŸŸŸŸ p p Ç Çttx œ œIIIIöö † †33 Ü Ü Ü Ü † †àà Ü ÜŠŠtt!!ËËxxŸúŸŸIIöööööö££££úŸŸŸIIIIµµêê====——RRÿÿ N N©©~~~~'' z z ñKžž ñ ñ ñ ñÉÉÉ o Å Åss ñ ñžžõ š š š ñ ñžž š šGG²X ª ªXXXX®®¶Æ00kqqÄÄq ö öQ ö ö ö£ I t t Ç"xÓÓˆ41'7>7>&S XQQ I£    úúeeee ¸ ¸ ¸ ¸ç 6 6‘‘$$,Ñ,†,†éb'…*:$#O‡xxÔ z z z~~~~ÔÔÔÔ++ Ð Ð ¥ ¥ ¥ ¥ ¥ ¥ øRaa Y´´õõGG ñ ñ ñ ñ š šõõùùùùþþQQ££Q« Ë ËxxÏÏ"" b µ µ µ µbbŽŽ á ᎎ á á   À Àmm ë ëFFBB •ï ë ë ë ë è è • • iÄàà333333 ± ±^^^^ ± ± ±^¹µµµµ^^^^!!tt Ç Ç Ç Ç^^^^ ± ±  3333 Ü7 Ü Üs k koo Á Á íGG íCCCCooooººººhhºº<<<<““››l!²Â&–"† Dêêëëëë˜˜ë ‘ë똘÷B•• ¼iiÄiÌ&œBBB ç ç••ŸŸ ò òŸŸŸŸxx p p Ç ÇÏÏx œ œIIII œ œ † †33 Ü Ü Ü Üàà † † Ü ÜŠŠtt!!ËËxxŸúŸŸIIööööööIIII EŸŸŸIIIIµµllêê======­­ÿÿ©©©©~~~~''ÔÔK ñžž ñ ñ ñ ñÉÉÉ o  ssKKžžõ š š š ñ ñžž š šGGX² ª ªXXXX®®¶å-#.}š&qÄÄqqq ö öQ ö ö ö£ IÏÏ"|xÓ--`%¦([ é XQQ£ I    úúeeee ¸ ¸ ¸ ¸ç 6 6‘‘$$,Ñ,††á. 7Ã7Ã5»*ç—Òx'''~~~Ø/Ô++~~ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥´´ Y Y»pËp»aG¢GG ñ ñ ñ ñ š šõõùžKKQ öQQ££þþxxxxÏÏ t tbbbb µ µbb á á á á á á á ámmmmmmmm ëF™™BBBB ë ë ë ë • : • • i i i iÄÄàà3333à †^  ^   ± ±bµµ ± ±^^bb^^^^tttt p p Ç Ç Ç Ç^^^^ ± ±  àà33ŠŠ / / kÅ k koo Á ÁGGššCCñ – Á Á Á Áooººººººhhêêêê@@@›ÂooÆ!ÆÆXÑ%;#ácŸ—<ëëëë>>ëëëëëëÿ•••iiiiiiBBï• : :••MMMMŸŸŸŸËË pËtt!!Ë p p p œ œ œöIIö œ † †33ŠŠŠŠ3333 /ŠŠŠ!!!!xxÒxŸúŸŸIIööööIIIIIIŸŸŸŸö œIIµµ · d dl d d == ==­­ÿÿV üVV+ Ð~~''''žžžžžž ñKÉÉssssùùžžGG š š ñ ñžž š šGGXXXX ª ª ª ª\Š)-#š&qÄÄÄÄÄÌqÄ i ö ö££ ö ö ö ö""""%%€€X pÊp`««££Q ö      úeeeeee ¸:: ã ã‘‘ÑÑÑÑ,,†;#Ì5e7Ã7Ã7Ã0ÿŸ€xËË'''~3óä++~~ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ Y Y Y Ya'¾% €»a¢GGG ñ ñ ñ ñ š šõõž D ñ ñQ ö ö ö££££xxxxÏÏ t tbb   µ µbb;; á á á á á ámmmmmmmm ëF > >BBBB ë ë ë ëï • • • i iqqÄÄ i iàà3333à †^  ^   ± ±bµµ  ^^b½½b^^^^ttttËË Ç Ç Ç Ç^^^^ ± ±  ;;33ŠŠŠŠ k  k koo Á Á í íššCCñ – Á Á Á Áooººººººhhêêêê@@›õÂooÆ!!!£²Â²ùŸ—<ëëëë>>ëëëëëëÿ•••iiiiiiBBï•••••MM§§úúúúËËxxË ptt Ç ÇË p p p œ œ œöIIö œ † †33ŠŠŠŠ3333 /ŠŠŠ Ç Ç!!Ò‡ÒxŸúŸŸIIöö œ œIIIIIIŸŸŸŸö œIIµµ · d d · d d == ==RRÿÿV üVV+ Ð~~''''žžžžžžK ñÉÉssssžž D DGG š š ñ ñžž š šGGXXXX ª ª ª ª\\{Õ ÌÄÄÄÄÄÌqÄ i ö ö££ ö ö ö ö""""%%%%þþ««QQ££Q öúú  úeeeeee ¸:: >>‘‘ÑÑÑÑÑц;b2°7Ã7Ã6i,xpp¿t“(v%€RØ~ÔÔ'' z z z z''' Ì Å Å ss  s$~!/ó,ÑÉÉÉÉ Å Å Å Å oÉÉÉssss"""""""" x Ë ËÏÏ"" á á † † á á á á77 Š Š á á á á®®\®®XXXX èBN™™ > À À33 † † Ü Ü Ü Üà †33 Ü Ü Ü Ü!!ttx|æ“)xËËIIII òMŸŸ Ç Çtttttt ò ò ò ò ò òMMÏÏ!!ËËx2 ׄ„ €ÛÛ € U U°°°°°°oooo Á ÁooooooÐÐ#}ÐÐ}}.‰Ü…à222222Ü܉‰°°^VûW ýªªTTcTTTªªªªªª ý ýTT[%€€€Ï)))QöööúŸ ò ò ò ò ò ò ò ò ò ò p pË p [ [ [µb^^^^bäŠää?™ì7^^^^  ^^à †àà3333^^  ^^ ± Ç Ç Ç Ç d d d d == hh » » d¿l » » » »ˆãˆˆˆˆ Û Ûˆ . Û Û222222 … … Û Û .ˆ ° +]] + °]]ÚÚ    ,,XXX²®c¶¶Ýƒƒƒƒƒƒƒ Ö0ƒƒ00ƒƒbbbb¹ _¹¹ Š Š Š Š77ääúúUúúúúú ö ö£££ I ö ö$$$$ÑѦ¦S ù ùS¦ L¼¼iiÀÀqÛ# -01@-0M33††¿tí/;0T¼Ø~ÔÔ'' z z z z''' Ì Å Å ss  sÉ$–ZR3ÑÉÉÉÉ Å Å Å Å oÉ o ossss"""""""" x Ë ËÏÏ"" á á á á á á á á77 Š Š á á á á T T\®®XXXXB÷¬¨ó™ > À À À ÀÄÄ33 † † Ü Ü Ü Üà †33 Ü Ü77!!ttx|›ýÞxËËIIII òMŸŸ!!tttttt ò ò ò òMM ò òtt!!ËËx2 ׄ„ €ÛÛ € U U°°°°°°oooooooooo v v#}ÐÐ}}.‰6Ü…à‘܉‰°°^¸°VW ýªª ù®cTTTªªªªªª ý ýTT[Ú555„)))QöööúŸ ò ò ò ò ò ò ò ò ò ò p pË p [ [ [µb^^^^bäŠŠŠŠä77^^^^  ^^à †àà3333^^  ^^ ± Ç Ç Ç Ç¿¿ d d == hh » » d¿l » » » » » »ãˆˆˆˆˆ Û Ûˆ . Û Û222222 … … Û Û .ˆ ° +]] + °]]ÚÚ    ,,XXX²®®\\݃ƒƒƒƒƒƒ Ö0ƒƒ00ƒƒbbbb¹ _ _ _ Š Š Š Š77ääúúUúúú     ö ö£££ I ö ö$$$$ÑѦ¦S ù ùS¦ L¼¼iieeqËÛ˜òò.è33††¿ d d dÆ0Oiï…+ÔÔ' Ì'''' z z''   s Å Å Å Åw$ÙÙ$w$$ssssss Å"" tÏ"""" Ë Ë Ë Ë"")Ï á ᎎ á á á á Š Š77 á á á á®® T®®®XX ª÷÷÷¬¨ó ë ëmm À À3333 Ü Ü Ü Ü3333 Ü Ü Ü7ÏtttËË)„1Ö%ËxxööIIŸŸM ò!!tttttt ò ò ò òŸúŸŸ Ç Ç Ç Ç„„ × ×.... U°oooooooooo##}}}}}Ø..‰‰::çççë666^©^  ªª®® ¦TT¶ TTTªªªª Pª ý ýTT® —¶![õ‹||Qö œ œŸŸŸŸ ò ò ò ò ò ò ò ò p p pË [µµµµµ ± ± ± ±ŠŠŠŠŠŠ77  ± ± ± ± ± àà333333  ^^^^^^tttt¿¿ d d¿¿¿¿====== hh d d d¿ » » » » » »hhˆˆ66 Û Û Û Û . . Û Û222222 … … Û Û .ˆ]]]]]]]],,,,,,,,XXXX T T00Ý݃ƒƒƒ Ö Öƒƒ00ƒÝ½b  _ _ Š Š Ý77’ä ŠMMUúMM     I I ö ö ö ö ö ö$$$$$$¦ L¦¦¦¦ ù ù¼¼iieeÀÀqËËËËààà†33¿ d¿¿l!à…+ Ð z z' Ì'''' z z''ss s Å Å Å ÅwÉÉÉÉ ÂÉÉssssss Å"" tÏ"""" Ë Ë Ë Ë""„) á ᎎ á á á á Š Š77 á á á á®® T®®®XX ª÷÷óó ë ëmm À À Ù Ù33 Ü Ü Ü Ü3333 Ü Ü Ü7ÏtttËËtÏ!|%Ëxxöö££ŸŸM ò Ç Çtttttt ò ò ò ò EŸŸŸ Ç Ç Ç Ç * * × ×.... U°ooÉÉoooooo}}}}}}}Ø..‰‰çç••œ÷œœF‘‘‘^©^°°ºº__®® ¦TT¶TTTTªªªªª ý ýTT®¾!.™2©2©+Ž‹ÖQö œ œŸŸŸŸ ò ò ò ò ò ò ò ò p p pË [µµµµµ ± ± ± ±bbŠŠŠŠŠŠ77  ± ± ± ± ± àà333333  ^^^^^^tttt d d d d d d d d====== hhhh d d d¿ » » » » » »hhˆˆ Û Û Û Ûˆˆ Û Û222222 … … Û Û .ˆ]]]]]]]],,,,,,‡‡²²XX T T Ö Öƒƒƒƒƒƒ00ƒƒ00 (ƒ½b  ¹¹ Š Š Ý77’ä ŠMMú  MM     I I ö ö ö ö ö ö$$$$$$ÙÙ¦¦¦¦¦ ù ù¼¼iieeÀÀq††à†33hhll¿¿++ Ð ÐÔÔ z z Ð Ð # # #~ Ð Ð Å Å sss Å Åssssss  ss Å Å"""""" t t"""" tÏ||Ž 3ŽŽ á á 3 3 á á á á á á † á ý ý ýXXXXX ª ªXXXXóó™™BBBBÄÄÄÄÄÄ † † †à3333 Ü Ü Ü Ü † †33ËË Ç!!!tÏttËËŸŸŸŸö œ œ œ Ãtt Ç Ç ò ò ò ò ò ò ò ò Ç Ç Ç Ç *„„„.... U U ¬ ¬ ¬ ¬ Á Á Á ÁÅ s Á ÁooÅÅÅÅyÔyÔ..…àà:˜˜óMY´¬¬Mó>>b­­ÿÿ²²² ² ýT®¶ªª ý ý ý ýªªW ý ýW ý ýª_gà/G7f884±$sê€TúŸŸŸŸ E EIIII òM ò òtÏ Ç!^^^^µ [ [µµµ3333 Ü ÜŠŠ^^ ± ± ± ± ± ±3333ŠŠŠ /µµµµ Ç!tt · d d== 5 ““ æ æhhhhhhhhhhhh2222ˆˆˆˆ2222ß …22 Û Ûˆˆ2222]]]] ° ° ]0 Öƒƒ,,‡‡²²XX®®,,,,ƒƒ Ö Öƒƒ Ö Öƒƒƒƒ    á ᎎäää䣣££MMMM I I ö öMM     Î Î Î Î$$PPýýýýýý¼¼ii¼¼¼Äiii¼¼††3 Ø ØÚphh¿¿++ Ð Ð z z z z Ð Ð~~ #~ Ð Ð Å Å sss Å Åssssss  wwss Å Å""""""ÏÏ"""" tÏ||Ž 3ŽŽ á ᎎ á á á á á á á;XXX ý ª ªXXXX ª ªXXXX™™™™BBBBÄÄÄÄÄÄ † † †à3333 Ü Ü Ü Ü † †33ËË Ç!!!ÏtttËËŸŸŸŸö œ œ œxtt Ç Ç ò ò ò ò ò ò ò ò Ç Ç Ç Ç *„„„....°° ¬ ¬ ¬ ¬ Á Á Á Á kÅsooÅÅÅÅyÔyÔ..à:•ï˜M !Ã%Ó#Ë!·]MMqbb­ÿÿªªWWW²²² ®ªª ý ý ý ýªª ýW ýWWWª_Á;3V8À887f/GT5¯TúúŸŸŸŸIIII òM ò òÏt Ç!^^^^µ [ [µbbµµ3333 Ü ÜŠŠ^^  ± ± ± ±3333ŠŠŠ /µµµµ!|ÏÏl d d== ê““ æ æÂÂhhhhhhhhhh2222ˆˆˆˆ2222 …ß22 Û Ûˆˆ2222]]]] ° ° ]0 Öƒƒ,,,,XXXX®®,,,,ƒƒ Ö Öƒƒ00ƒƒƒ8ÅÅ    á ᎎäää䣣££MMMM££ ö öMM     Î Î Î Î$$$$PPýýýýýý¼¼¼iii¼¼ a††3 Ø Ø ØñÂh Ð Ð Ð Ð z z z z~~ Ð Ð Ð Ð Ð Ð Å Å Å Å  Âss Å Å Å Å s  ÍÍÉÉ Å Åss"""""""" tÏ""""ÏÏ á á á;ŽŽŽŽ 3 3 † á 3 3 3 3XX ª ªXXXX ª ªXX ª ª ª ª ë ë™™ï •BB iÄàà33ààà † Ü Ü Ü Ü †à † †ËË!|Ö1)ÏttËËŸŸMMII œ œ Ç! Ç Ç ò ò E E ò òŸ EtÏtt × × ×2.... U° ¬ ¬ ¬ ¬ Á Á Á ÁÅÅoos''''Ü.‰à:BB Ue'„+ê/ù+ê+ê&Ö!l°Ui´­ÿÿWWªªªª ¦ ¦TTªª ý ýª Pªªªª ýWWWªª_g;1ü7f8À7f6 (‚ŸÚ¯¯MMMŸŸIIIIMM ò ò p pxx! Ç Ç Ç ±^^bµµµµ3333 Ü ÜŠŠ^^ ± ^ ± ±3 Ù † †ŠŠ Ü Üµbb!!!!¿¿ d d d d d¿==êê æ æ““ · d¿h » » »hhhhhh2222ˆˆ Û Û … … … … …ß22ˆˆ Û Û2222 + + ° ° ] ° °ƒ ( Ö Ö  ,, ª ª ª®®,,,,00ƒƒƒƒƒƒƒƒ Ö‹½b  _¹ á ᎎää??££££úúMM ö ö ö ö    MM Î Î Î ÎÑ w w w ¢ ¢ ¢ýý ¢PP¼¼ a¼iļ¼¼¼¼¼ a a†† Ø Ø Ø ØKwÂh Ð Ð Ð ÐÔÔ z z # # Ð Ð Ð Ð Ð Ð Å Å Å Å  Âss Å Å  Ís  ÍÍÉÉ Å Åss"""""""" tÏ"""" t t á á á;ŽŽŽŽ 3 3 † á 3 3 3 3XXXXXX ª ªXX ª ª ª ª ë ë™™ï •BB ¼ ¼ iÄàà33 † † †à Ü Ü Ü Ü †à † †ËË!|檓ÏttËËŸŸ ò òII œ œ Ç! Ç Ç ò òŸŸ ò òŸ E ttt × × ×2....° U ¬ ¬ ¬ ¬ Á Á Á Á k k Á Áoosss''''Ü.‰à:œœ U ¿+“2®6¾6¾6¾1ª)‹ ¿ûi´­ÿÿ²²ªªªªTTªª ý ý Pªªªªª ýWWWªª_ Á ,’0¡1ü+7®5¾(lMMŸŸIIII ò ò ò ò p p Ç! Ç Ç ±^^bbbµµµµ3333 Ü ÜŠŠ^^ ± ^ ± ±3 Ù † †ŠŠ Ü Üµbb Ç Ç Ç Ç¿¿ d d d d d¿==êê æ æ““l d¿h »hhhhhh2222 . . Û Û … … … …ß …22ˆˆ Û Û2222 + + ° ° ] ° °ƒ ( Ö Ö  ,, ª ª ª®®,,,,00ƒƒƒƒƒƒƒƒ00jj½b  _¹ á ᎎää??££££úú§§ ö ö ö ö    MM Î Î Î ÎÑ w w w ¢ ¢ ¢ýý ¢PP¼¼¼ÄÓq¼¼¼¼¼¼¼¼¼†† Ø Ø Ø ØÖÆl » » hRR ¥ ¥ÿÿR ø z z z z~~~~GG š š D D ñ ñ Å Å Å Åss    ÍsÉÉ o o o o ö ö ö ö ö ö I IMM ò ò ö ö I I µ [ b  ¹¹ á á á á7777,,ÚÚƒƒƒƒ    ,,,,ÄÄmm À À™™ ë ë • •BB77 Ü7ŠŠ77ŠŠŠŠ33 Ù3 œ œ îII£ úŸŸIIIIŸŸŸ EII œ œ Ãtt! Ç Ç Ç Ç Ç œ œö œ ò ò ò òYYYY°° × × × × € €.. Á ÁÉo k kssssÅÅ'''Ü22……° Àuq!˜+4‹7@8š8š58.t$úÛ̼VV ®WWWW ý ý ý ýªªªª(ƒƒƒÖÖƒƒƒƒƒ(,,‡áêT c!¾P‹1‹ý$õÖÏt Ç!ËËËËËËËËö œII œöIIàà † †333Ž77 Ü ÜŠŠŠŠ † †à † Ü ÜŠŠà † † † Ù Ù33 Ü Ü / /ŠŠ Ü Üµ¹^^^II œ œ““ æ æê ====== æ æ æ æ » » hhhêêêê@ æ@@ˆˆ6 Û Û Û Û Ûˆ . Û Û22 … … Y Y ° ° + +ŒŒ22 …ß22 ª ª ý ý Ö Ö Ö Öƒƒƒƒ²XXX®®®®¹¹¹bb [¹¹¹¹bbMMMM ö ö££ ö ö ö ö ö ö ö ö Î Î Î Î$$ wÑ$$$${{{{eÀÀÀqqÄi‘‘‘‘::::ZZ ­ ­ Æll » » hRR ¥ ¥ÿÿ­R z z z z~~~~GG š š D D ñ ñ Å Å Å Åss Å Å  ÍsÉÉÉÉ o o ö ö ö ö ö ö I IMM ò ò ö ö I I µ [ b  ¹¹ á á á á7777,,  ƒƒƒƒÚÚ  ,,,,ÄÄmm À À™™ ë ë • • è è Ü Ü Ü7ŠŠ77ŠŠŠŠ33 Ù3 œ œ îI£IöQTúŸŸIIIIŸŸŸ EII œ œxtt! Ç Ç Ç Ç Ç œ œö œ ò ò ò òYYYY°° × × × ×ÛÛ.. Á Áo  k kÅÅ''6……° eq̈'0{5å7@7@6“/Î# 6̼^^°° ®WW ý ý ý ý ý ýªªªªƒÝÝÝ00ƒƒƒƒƒ(,,,‡€€51Ö|ÖÞ“æ|Ït Ç!%%ËËËËËËö œII œöIIàà † †33Ž3 Ü Ü Ü ÜŠŠŠŠ † † †à Ü ÜŠŠ;à † † Ù Ù33 Ü ÜŠŠŠŠ Ü Üµ [^ ^^IIöö““ æ æê ====== æ æ ‹ ‹ » » h » »hhêêêê æ@@@ˆˆ6 Û Û Û Û Ûˆ . Û Û22 … … Y Y ° ° ° °2222 …ß22 ª ª ý ý00 Ö Öƒƒƒƒ²XXX®®®®¹¹¹ _bb µ µ¹¹ _ _bb µ µMMMM ö ö££ ö ö ö ö ö ö ö ö Î Î Î Î$$Ñ,$${{{{ eee¼¼i‘‘‘‘::::ZZ ­ ­ZZhhhhRR ¥ ¥ ¥ ¥ ¥ ¥ Ì Ì z z~ # Ð Ð í ’ š š D D D DÉ o Å Å Å Å Å Å Å Åssssww ö ö££ ö ö I I         ö ö I I µ µbb f¹¹Ž 3 á á Š Š Š Š, Ò,, Ö Ö (ƒ‡‡Ú ,,,‡ÄÄ À Àmm ë ë™™ • • • • Ü Ü77‘‘‘‘ŠŠ7733 † † œ œ îIII œ œŸŸ ò ò œ œ œ œ ò òŸŸ œ œIIxx Ç Ç Ç Ç Ç Ç Ç Ç œ œ£I ò ò ò ò ¬ ¬ ¬ ¬ U U U°„„ × ×ã˜5 € Á Á Á Á k ksÅÅ''Ü…………° ¸iÄ.!˜) +/Î30301)+¿"òãyĸ^°°[W ý ý ýªªªªªª ý ýƒƒå@݃ÝÝ݃ÖÖÙÙ,,%%€€||Ï)))|!!!ttxx%Ë%ËII œöö œII3333 †ààà Ü Ü Ü Ü Ü Ü Ü Ü † †33 Ü ÜŠŠŽ3 Ù Ù Ù Ù Ù3 Ü ÜŠŠŠŠ Ü Üµµ^^^^IIII æ æ““==== ê æ æ 9 9 » » » »hhhh êêê“î@@ˆˆ6 Û Û Û Û Û6 Û Û Ûßß22´´]] ° °22 … …ßßß … ª ª ý ýÝ݃ƒƒƒƒƒXX ª ª\®® _ _¹¹bb µ µ f  bbbbMMMM ö öQQ££ I I I I I I{{ Î Î$$ÑÑÑÑ$$ Î Î{{ ¸ ¸eei‘‘‘‘ççççZZ ­ ­ZZhhhhRR ¥ ¥ ¥Z ¥ ¥'' z z~ # Ð ÐG í š š D DžžÉ o Å Å Å Å Å Å Å Åssssww ö ö I I ö ö I I         ö ö I I µ µbb fŽ 3 á á Š РРЇ,,, Ö Ö (ƒ‡‡4Ú,,‡áÄÄ À Àmm ë ë™™ • • • • Ü Ü77ìVV¡?Š7733 † † œ œ îIII œ œŸŸMM œ œ œ œ ò òŸŸ œ œIIxx Ç Ç Ç Ç Ç Ç Ç Ç œ œ îI ò ò ò ò ¬ ¬ ¬ ¬ U U U°„„22ã˜Û Á Á k ksssÅÅ Ì Ì'++++° ^¸iy. ë$ú)·'&U# ãÓyĸ^VV¶[W ý ý ýªªªªªªWWƒƒ@š8ÝÝÝ݃00,,ËË%%!!tÏÏÏ|!!!ttË%%ËII œöö œII3333 †ààà77 Ü Ü Ü Ü Ü Ü † †33 Ü ÜŠŠ3Ž3333 Ù377ŠŠŠŠ Ü Üµµ^^^^IIII æ æ““====êêê æ æ 9 9 » » » »hhhh ê 9“@@ˆˆ6 Û Û Û Û Û Û666ßß22´´]] ° °22 … …ßß … *XXƒƒƒƒƒƒƒƒXX ª ª\®® _ _¹¹bb µ µ f  bbbbMMMM ö ö ö ö££ I I I I I I Î Î$$ÑÑÑÑ$$(({{ ¸ ¸eei‘‘‘‘ççççZZ ­ ­ZZ d¿¿ d ¥ ¥RR ü ü ü ü'' z z z z z zž D D DG íGG Å Å Å Å o oÉÉ Å Å Å wwÉÉÉÉww  ss                MM ò ò££ ö ö    b½½ Š Š Š Š 3 3 á á݃ƒƒ Ö Ö Ö Ö Ö0ƒƒƒƒÝÝmmmm™™™™™™ ë ë33à•e'”(AÈJààà3333 E E ò ò A œ A œ œ œ£IŸŸ ò ò œ œ œ œŸŸ ò òËË pËt  Ç Ç î îII œ œII ¨ ¨°° ×222ŒŒ2 ×ÅÅssssÐ v}}}}}ذ°°°¸Ï.ˆ =!˜ã.&Ìm¸¸bÿÿ²²ªª ý ýª P P Pªª®®44<–ååå‹4Ù‡‡, ÒxxxxËËx!!ÏÏttttIIIIIIöö Ü Ü ‚ ÜŠŠŠŠ7 Ü Ü ÜŠŠŠŠ7 ÜŠŠ † †33333333 †à7 ÜŠŠŠŠ Ü Üµµ^^^^ œ œöö==== æ æ““=——=@ æ 9 9 » » » »¿¿¿¿== ê““““ˆããˆ66ˆ .ßߌŒŒ222aa´´ Û Û Û Ûßß … … ª ªXX®®XX ªXX Ö Ö Ö ÖƒƒƒƒXX ª ª®® _¹  bb¹¹¹¹¹  Q ö I I ö ö ö öMM        M ò$$$$$$ÑÑ{{{{{Õ{{ ¸ ¸ee ¸ ¸ ¸ ¸::::>>‘ 6 V±¿ d¿ d ¥ ¥RR ü ü ü ü Ì Ì z z z zÔÔž D D DG í í í Å Å Å Å o oÉÉ Å Å Å wwÉÉÉÉww  ss                MM ò ò I I ö ö    bbb Š Š Š Š 3 3 á áƒÝƒƒ Ö Ö Ö Ö Ö0ƒƒƒƒƒƒmmmm™™™™™™ ë ë33à•"*3Â5Ê,QZ;àà3333ŸŸ ò ò A +ç A œ œ œ£IŸŸ ò ò œ œ œ œŸŸ ò òxxËËxx%Ët  Ç ÇIIII œ œII ¨ ¨°°2 × × ×222 ×ÅÅss+Ð##}}}ØVV°°¸ÀuyyÓÓq¸¸¸bZZ²²ªª ý ýª Pªªªª®®ŽC¦Kšš@åÙ,, Ò,xxxxËËx!!ÏÏttttIIIIIIöö Ü Ü Ü7ŠŠŠŠ7 Ü Ü ÜŠŠŠŠ Ü7ŠŠàà33333333 †à7 ÜŠŠŠŠ Ü ÜµjÅ^^^öööö==== æ æ““=—=—@ æ 9 9 » » » »¿¿¿¿== ê““““ˆããˆ Û Ûˆ . … …222 ×22´´ Û Û Û Ûßß … … ª ª ý ý®®XX ªXX Ö Ö Ö ÖƒƒƒƒXX®® _¹ffbb¹¹¹ _ _  Q ö I I ö ö ö öMM    úú§M$$$$$$ w w{{{{{Õ{{ee ¸ ¸ ¸ ¸:::: ã ã‘ 6 V± d d d dR ø J ¥ ü ü ü ü Ì Ì z z zÔÔÔ ñ ñ D D š š š š Å Å Å Å ÂwsssÍÉÉÉÉww$$zzz MMMM        MM   E I I œ ö ± ± µ µ  7 Ý Š Š 3 3Ž 3ƒÝƒƒ Ö Ö Ö Öƒƒ0 Ö Ö Öƒƒmmmm ë ë™™ ë ë ëF33à•À,þ0`$2øŽàà33 †à§MŸŸ î ” A œööIIŸŸŸŸIIII ò òŸŸxxxxxxËËttttII œ œö œI î U U U U U U2 × × × ×2„„ÅÅs Å}}##Ð+++©©©¸È"qiÄiiiÀe°°­­WWªª ý ýªªªª ý ýTT® é­µ_G8Ù Ò, Ò ÒËËxx p p!!!!tt!!II œö œ œööŠŠŠŠŠŠŠŠ7 Ü Ü Ü / / Ü Ü Ü7ŠŠ333333 † †3333ŠŠ7 ÜŠŠ77/‰n¹  öööQê == æ æ““==== æ æ ‹ æ » » » » d¿= â â=““ æ æ Û Û Û Û . . Û Û … …222222a´´aa6 Ûˆˆßß … …XX ª ª®® ª ª ª ª ªXX Ö Ö (ƒƒƒƒƒ®® T T  ¹¹bb¹¹      ö ö I I I I ö öúúMMúú§M$$$$$$$${{ Î((({ÕÀÀÀeeeee:::: ã ã‘‘ d d d dR ø J ¥ ü ü ü ü'' z z zÔÔÔ ñ ñ D D š š š š Å Å Å ÅsssÍÉÉ$$ÑÑ~è™äÕzMMMM         ò òú   I I œ ö ± ± µ µbb7 Ý Š Š 3 3Ž 3 (ƒ ( ( Ö Ö Ö Öƒƒ0 Ö Ö Öƒƒmmmm ë ë > > ë ë ëF33à•F°¸©CŽàà33 †à§MŸŸI î œööö££úúŸŸIIII ò òŸŸxxxxÒxxËËttttII œ œö œI î U U U U U U × } × × ×2„„ÅÅs Å}}##Ð+++©©©^mç#öÛi °VV­­­­WWªªWWªªªª ý ýTT® é­$Ô+™'3¹G84Ù, Ò Ò Ò $ $ p p p p Ç Ç!!tt Ç ÇII œö œ œ œ œŠŠŠŠŠŠŠŠ7 Ü Ü ÜŠŠ Ü Ü Ü7ŠŠ333333àà3333ŠŠ7 ÜŠŠ77jä,|-×÷n  œ œ œöê == æ æ““==== æ æ æ@ » » » » d¿= â â= 9 9 æ æ Û Û Û Û . . Û Û … …222222aaaaa6 Ûˆˆßß … … ý ý ª ª®® ª ª ª ª ª ý ý Ö Ö (ƒƒƒƒƒ®®®®  ¹¹bb¹¹      ö ö££££ ö öúúMMúú§M$$$$$$$${{ Î(((Õ0uuÀeeee:::: ã ã‘‘QQQQQQQQ " " Ï Ï&& x x Ï Ï Ï Ï&&&& Ä Ä   qq  B B B B ï ï ï ï n nuÐuÐФÿ"ê+`!æ¸¨çŒ ß ß ß ß ß ß ´ Y   ° ° ° aa ´ ´ ´ ´aa 2 2 ß ßŒ 2 ß ß ß ß 2Œ666 Ûaa ´     w  Ê Ê   õ õ õ õ õ õ õ õ&&€€--ˆˆ))||&&&&––èè 7 7 å å å?ì¡ZZK– ï ïy#}ÐÐyqq n nóóFF ™ ™F ì        õ õ õ õ¢¢¢¢wwww    KKKK¦¦ùù/ Ô‚‚ØØ……………à q$€X««TT§§ÎÎÆÆÊÊ––èè??’’? å’’––CÔ!0”4£-ß¡'rð–è Ž å å å å½ c½½½½ c½j c c å å å å’’’’gg ¹ ¹ ¹ ¹ ¹qq Ä Ä n n À ï ï ™ ™FFFFFFFFFF ú ú ú úQ«þþ· @1+1+!›·¨¨ Ï Ï Ï Ï i immmmïïBB™™ ë ë ë ë ë ëBBBB ë ë ë ë ë ë ëFÄ i À À À À À Àmm_o_®®²X ª ª™ > > > ë ë ë ëB • • • • è è ë ë™™™™ ë ëmmmmmmXXXX®®®®Ú   ƒƒ Ö0BBïï™™ ë ëÄ immRRRR ü ü ü üÿ ¥ÿÿÿÿZs\òîî““““““==êêGG š š ñKQQQQQQQQ " " Ï Ï Ë Ë x x t t Ï Ï&&&& Ä Ä   qq  B B B B ï ï ï ïÈÈuÐ…**ß´Ya$E,º%ö¸¨çŒ ß ß ß ß ß ß ´   ° ° ° aa ´ ´ ´ ´aa 2 2 ß ßŒ 2 ß ß ß ß 2Œ666aa ´      w Ê Ê   õ õ õ õ õ õ õ õ&&&&ÓÓÓÓ))||&&&&;;èè’’ å å å?Gf)M)Mj– ï ïyØœï…yqq n nóóFF ™ ™F ì        õ õ õ õ¢¢¢¢wwww  {{KKKKKKùù/ Ô‚‚ØØ……………àè÷²£PPúúLLÎÎÆÆÊÊ––èè??’’ å?’’––C/"]/90”(uì'r–;è Ž å å å å½ c½½½½ c½ µ c c å å å å’’’’gg ¹ ¹ ¹ ¹ ¹   Ä Ä n n À ï ï ™ ™FFFFFFFFFF ú ú ú úQ«þþlƒ8!]¨¨ Ï Ï Ï Ï i immmmïïBB™™ ë ë ë ë ë ëBBBB ë ë ë ë ë ë ëFÄ i À À À Àmm À À_oC3º_\\®®X ý ª ª™ > > > ë ë ë ëB • • • •BB ë ë™™™™FFmmmmmmXXXX®®®®Ú   ƒƒ Ö0BB • •™™ ë ëÄ iqqmmRRRR ü ü ü üÿ ¥ÿÿÿÿ!ò/f0À%?îî““““““==êêGGõªµÅQQQQ ¤ ¤ ¤ ¤|| Ï Ï x x x x " " Ï Ï x x x x Ä Ä   Ä Ä q ï ï ï ï ï ï ï ïuØQ"h¤B a#—xÃ"m¨çŒ ß ß ß ßŒ 2aa Y ´ ] ] ] ] ´ ´  aa ´ ß … ß ß ß ß ß ßŒ 2 2Œ6666 ´ ´ ´ ´¸ ]    Ê Ê Ê Ê  ¢ H õ õ õ õ õ õÓÓ€&ÓÓÓÓ||××&& x xèèèè å å å å’’ô( 'EbC ï ïÌÌÌ&œ)Ú)-ïÔ Ä n n ì ì ™ ™ ™ ™ ì ì s s s s    õ õ õ õ¢¢¢¢ Ê ÊwwÍÍÍÍ ž ž žùKKKK// Ô ÔØØØØØØ……££ý£LLŸŸttÆÆppèèèC? å å å’ì??––øÜF#¸!ì‚Í;;;; å å å å c cjj½½ µ µ c c’’’’’’’’gg ¹ ¹ ¹ ¹ ¹qqqq n n n n n n n n B B Bó ™F¡FFFFFF ™ ™U ú¨¨QQQQ] + +UU¨¨|||| ¼qÄÄmmmm • •BB >™ ëF ë ë >™BBBB ë ë ë ë™™ ë ë À Àm mm À Àmm_$CÙg²XX®®®®XX ª ª™™ ë ë >™ ë ëï • • •BBBBFF™™FFFFmmXXXX®®,,,, Ö Ö Ö ÖBB èBFF ë ëÄÄmm À ÀRRRR ü ü ü üRRÿÿ­­y,Æ5}5}*©›@““î“@@êê——O_¦¦QQQQ ¤ ¤ ¤ ¤|| Ï Ï x x x x " " Ï Ï x x x x Ä Ä   Ä Ä q ï ï ï ï ï ï ï ïu'%1L'Ò,1 #—Y]]¨NçŒ ß ß ß ßŒ 2   Y ´¸¸ ] ] ´ ´     ´ ß … ß ß ß ß ß ßŒ 2 2Œ6666 ´ ´ ´ ´¸ ]    Ê Ê Ê Ê  ¢ H õ õ õ õ õ õ x x&€ÓÓ x x||||&&ÓÓèèèè å å å å’’?ôbøC ï ïÌÌÌ&ç'%.—!.y Ä n n ì ì ™ ™ ™ ™FF s s s s    õ õ õ õ¢¢¢¢$$ww s sÍÍùù žùKKKK// Ô Ô ~ ~ØØØØ……3333£££HLLŸŸttÆÆppèèèCš???’ì??––ø‚7ää'r;;;; å å å å c cjj½½ µ µ c c’’’’’’’’gg ¹ ¹ ¹ ¹ ¹qqqq n n n n n n n n B B Bó ™F¡FFFFFFóóU ú¨¨QQQQ¨UUUU¨¨||||ÄÄmmmm • •BB >™ ëF ë ë™ >BBBB ë ë ë ë™™ ë ë À Àm  À Àmm À Àmm_ºoog²XX®®®®XX ª ª™™ ë ë >™ ë ë •ïïïBBBBFF™™FFFFÈÈ À ÀXXXX T T Ò Ò,, Ö Ö Ö ÖBBB ë ë ë ëÄÄmm À ÀRRRR ü ü ü üRRÿÿ­­i ˜*©-^"Š›@““î“@@êê—n_OõKKþ ¤QQQ ö ö ö x x&&& Ë x x "||| x x x x Ä Ä   Ä Ä Ä Ä ï ï B B ï ïy.¨$¯˜"$òxiÃÿ¤ãã66 ‰ ‰ ‰ ‰ ´ ´ ´ ´ ] ] ] ] ] ] ] ] ] ]  ‰ ‰ ‰ ‰6666 ‰ ‰6 ‰ã66 ] ] ] ] ´ ´   Ê Êw w  Ê Ê ž žKK õ õ õ õ|| Ï Ï x x&& Ï Ï| " Ë&ÓÓèè;; Ž Ž;;’’ììCè÷óóóóÈ#ÐЉ¨"¿ Ì Ä Äqq Ä Ä B ï ï ï ïw    www ž žKKKKKKww$ Ê    ¢¢¢¢KKKK‚‚‚‚+ Ð++ØØØØ‚‚ÜÜHHPöúŸŸŸèCRVGš?èèèèìì¡¡~Ø~~’ 7 7 7 Š å’’½ c c½ ¹ ¹ g c cgggg’’’’’’ì’½½ggqq Ä ÄqqqqÈ n nÈ ì ìFF ï ïJJ ™óFFFFF¡þ ¤QQ ¤ ¤ ¤ ¤QQQQ ú ú ú ú||||mmmmmm ë ë ë ëBBBB • •BBBBBB™ > ë ë ë ë > > i i À À À Àmm À\\¶¶ ®\\XXXXXXXXBBBBBB è™™™™BBBBïïïïFFóóqqÌqÄIJ² T T ( ( Ö Ö Ö Ö Ö ÖBBBBBBBBÄÄ i iÄ i üV©©RRRR ü ü©©VV^m¶k®Ÿ——êê æ@@ æî£ [¦KKùùþ ¤QQQ ö ö ö x x&&& Ë x x "|||ÓÓ x x Ä Ä   Ä Ä Ä Ä ï ï B BJJ ÄyÔÛÛÔ.´x'§-$òÃÿãã66 ‰ ‰ ‰ ‰ ´ ´ ´ ´ ] ] ] ] ] ] ] ] ] ]  ‰ ‰ ‰ ‰6666ãã6 Û ‰ã66 ] ] ] ] ´ ´   Ê Ê ww  Ê Ê ž žKK õ õ õ õ|| Ï Ï x x&& Ï Ï| " Ë&ÓÓèè;;èè;;’’’’èèè Ž÷¨óóó nÈuuy.ÛÛ&q Ä Äqq Ä Ä B ï ï ï ïw    wwwùùKKKKKKww$ Ê{{  ¢¢¢¢KKKK‚‚‚‚+…++ØØØØ‚‚ÜÜHýº`úŸŸŸxxttèCRqÐV?šèèèèìì¡¡É#ÉÉÁÁ’ 7 7 7 Š å’’ c½ c½ ¹ ¹g c cgggg 7 7’’ììì’½½ggqq Ä ÄqqqqÈ n nÈFFFF ï ï ï ï ™óFFFF ìFþ ¤QQ ¤ ¤ ¤ ¤QQQQ ú ú ú ú||||mm À Àmmmm ë ë ë ëBBBB • •BBBBBB™ > ë ë ë ë™™ i i À À À Àmm À\\ ®\\²²²²XXXXB èBBBBB è > >™™BBBBïïïïFFóóÌÌÌqqqÄÄXX®®ƒƒ Ö Ö Ö Ö Ö ÖBBBBBBBBÄÄÄÄÄ üVRRRR ü ü©©VV©òòDê== æ@@Pg!†wgjKùù ¤ ¤QQ ¤ ¤ ö ö x x xÓ x x x x Ï Ï||ÓÓ x x   Ä Äq  q ï ï ï ïqqÌÌyyÌÌR"ê4ƒ783(ˆÿãã666666 ´ ´ ´ ´    ]¸  ¸ ]  ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰6666 ‰ ‰ ‰ ‰ ] ] ] ]   ´ ´ Ê Êww Ê Ê Ê Ê ž ž žù õ õ õ õ||| "&&ÓÓ||||Ó x&&èè;;;; Žè??’’CC;; ï ï¡FFFÌÌÌÌÌÌqqqq   B B ï ï ï ï Ê Ê Ê Êww Ê ÊKKKK žù¦Kwwww{   õ õ õ õùùùù‚‚ Ô Ô++ ~ ~ ~ ~+…‚‚/‰öÑÑTŸŸŸÊÖ!ttCèð^Oì’––––ššG¡Ñ+#nngg’’’ 7 7’ å ågg ¹ ¹ µj’’??ìG??jj½½gg n n Ä Ä Ä Ä Ä Ä n n n nFF ™ ™ ï ïóóFFFFFFQQþ ¤QQQQ ¤þQQ ú ú ú ú||||mm À À™™ > >BBBBBB • •ïïBB > >™™™™™™Äqmmmm®®®®\\  ºo__BBBBBBBB ë ë™™ïïïïïïïïFûNNÌÌÌÌqqXXXX Ö Ö Ö Öƒƒ0 ÖBBBBBBBB iÄÄÄq üVVVRRRR ü ü©©VV ü üêêêê= â=—£²Pº Ù+­,e&ûŦùùþþQQ ¤ ¤ ö ö x x xÓ x x x x Ï Ï|| x x x x   Ä Äq  q ï ï • •qqÌÌÌÌ÷¬€/4ƒ0sÓÿãã666666 ´ ´ ´ ´    ]¸  ¸  ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰6666 ‰ ‰ ‰ ‰ ] ] ] ]   ´ ´ Ê Ê   Ê Ê Ê Ê ž ž žù õ õ õ õ||| "&&ÓÓ||||Ó x&&èè;;;; Žè??’’èè;; ï ï¡FFFqqqqÌÌqqqqqq ï ï ï ï Ê Ê$$ww Ê ÊKKKK žùK ñwwww{   õ õ õ õùùùù‚‚//++ØØ ~ ~+…‚‚/‰öPX TŸEEÊÖ!ttCè–ðš?’ 7––––??ìG†ÿB#ngg’’’ 7 7’ å åggjj’’??ìG??jj½½ggÈÈ Ä Ä Ä Ä Ä Ä Ä Ä n n n nFF ™ ™ ï ï ™ ™FFFFFFQQþ ¤QQQQ ¤þQQ ú ú ú ú||||mmóó™™BBBBBB • • • •BB > >™™™™™™Äqmmmm®®®®\\ ¾Ù$­!øÙBBBBBB ë ë™™ïïïïïïïïFû¨]ëëÛ&&qqqXXXX Ö Ö Ö Öƒƒ0 ÖBBBBBBBB iÄÄÄq üVVV­­­­ ü ü©© ü ü ü üêêDDòL§ gõ æ@ª&C6794„">ùùUU ú ú M M ú ú ö öQQ ¤ ¤ ¤ ¤ Ï Ï|| " " t Ï n n À À nÈ ï ïFF ™ ™qqÈ#ÈÈ÷R¼ 5%I!9¨6666 ß ß ß ß ß ß ß ßŒŒ ß ß          ] ]   e6666ŒŒ ß ß ´ ´       s s s s Ê Ê Ê ÊKK ž žKKKK Ï Ï Ï Ï Ï Ï×| ú ú ú úQ ö ¤ ¤ å å’’’’’’½½jj ï ï ï ï ï ï ï ïóóF¡qq Ä Ä Ä¡F ™ ™FFFF õ õ¢¢KK ž ž õ õ õ õ õO õ õ Ê Ê$ Ê$$ Ê Ê {  ÍÍ  VV±±­­­­++Ø3ØØ……››HHòòEEpÊx{ÆÆÆ????èè;;njjrÈf¡Cè;;;;;; å å å å½½½½½½gggg½½½vÁjÅjj½½jÅÌÌ Ä Ä n n • • ï ï ï ï ï ï n n Ä Ä   B B ï ï ï ï ï ï ú ú ú ú¨¨ úUÓÓ&& x x x x ¤þQQmmqqqqqqqÄÄ i i   À À ë ë™™ • •ïï™™ ëFF ë™™ÄÄmmÈÈ Ö ÖƒÝ‡‡áK(2ã1‰!K_XX À À mÄÄqqÄÄÄÄÄÄyÓ6ú#$lú6ÓyÌq ª,,  ÚÚ,, Àmm À À À À À ÀmmÄ i N©V±± ^RRÿÿÿÿR­Æ{)ƒÞ8)tîH@@›ª$è5&7»3«!f‚$É ú ú ú ú M M ú ú ö öQQ ¤ ¤ ¤ ¤ Ï Ï|| " " t Ï n n À À  n ï ïFFóóqq Ä Ä nÈÈÈ÷÷R°VNN6666 ß ß ß ß ß ß ß ßŒŒ ß ß          ] ]   e6666ŒŒ:: ´ ´       s s s s o o Ê Ê ñ ñ ž žKKKK Ï Ï Ï Ï Ï Ï×| ú ú ú ú öQ ¤ ¤ å å’’’’’’½½jjjj ï ïJJJJJJóó¡Fqq Ä Ä Ä¡F ™ ™FFFF õ õ¢¢KK ž ž õ õ õ õ õO õ õ Ê Ê$ Ê$$ Ê Ê {{{ÍÍ{{VVVV­­­­++ ~ØØØ……››îî——EEÊpà hÆÆll?? å å Ž Ž;;njj½šô¡GCè;;;;;; å å å å½½½½½½gggg ¹ ¹½½rvÑ+ÑÅjj½½ÅÌ Ä Ä n n ï ï ï ï ï ï ï ï n n Ä Ä   B B ï ï ï ï ï ï ú ú ú ú¨¨ úU x x&& x x x x ¤þQQmmqqqqqqqÄÄÄÄmm À À ë ë > > • • • •™™ ëFF ë™™ i immmm Ö Öƒ (‡‡áK&µ4>4>&µÉ_²²mÈÄÄqqÄÄqqÄÄÄÄuuÓ˜#¿/í64ª/í&tò.Ìq ª\\,,ÚÚÚÚ,, Àmm À À À À À ÀmmÄ i N©V±Ð"I ARRÿÿÿ´&Ö!¿¿¿¿“î@@@›$$È ¸ì($É M M ú ú M M ú ú ¤ ¤þþ ¤ ¤ ¤ ¤|| Ï Ï " " Ï Ï À À À n n ï ï ™ ™FFq qq ï ï÷¡¡óó6666 ß ß ß ß ß ßŒ 2 ß ß ß ß ] ] ] ] ° ¸¸  ] ] ] ] ]¸6666ŒŒ:: ´ ´ ´ ´ ´ ´ ´ ´ s s s s   Ê Ê ž ž ž ž ž ž ž ž Ï Ï Ï Ï Ï Ï Ï Ï ú ú¨ M ¤ ¤ ¤ ¤ å å’’’’’’½½jjj ï ï ïJ¤¤÷÷¡¡ó ™ Ä Äqq  qqFFFFFFó ™ õ õ õO¦KKK¢¢¢¢OO õ õ Ê Ê$$$$wwÍÍÍÍÍÍÍÍVVZØØ ~Ø++ØØîîA›EEEEÃÃllll? å å åèèèènÁjj?š??–; Žè Ž Ž;; å å å å½½½½ggggggjjr'à¥"÷‰zrjÔ Ä n nJJ ï ï ï ï n n Ä Ä Ä ï ï÷ ï 﨨¨¨ úU¨¨&&&&&&&&QQ ¤þÈÈqqqÌÄqqÄÄ i immmm ë ë ë ë • •ï • ë ë ë ë™™™™ À À   ( ( Ö Ö,,4D3!ø"¥†_²XqqqqqqqqÄÄÄÄuuÐ6! +1õ7_8¹7_7_1õ \ˆ&̲²²X\\\,‡‡,,,,, À À À À Àmm À ÀÄ i ü ü©¸ ï.x'm­RÿÿÿyÌÆlllÆl æ æ““@@Hý䊂Íww M M ú ú M M ú ú ¤ ¤þþ ¤ ¤ ¤ ¤|| Ï Ï|| Ï Ï À À À n n ï ï ™ ™ ì ìq    ï ï BFF ™ ™6666 ß ß ß ß ß ß 2Œ:: ß ß ] ] ] ] ° ¸¸  ] ] ] ] ]¸6666ŒŒ ß ß ´ ´ ´ ´ ´ ´ s s s s   Ê Ê ž ž ž ž ž ž ž ž Ï Ï Ï Ï Ï Ï Ï Ï ú ú¨ M ¤ ¤ ¤ ¤ å å’’’’’’½½jjj ï ï ïJ¤YR¡¡ó ™ Ä ÄqqqqqqFFFFFFó ™OOOª¦KKK¢¢¢¢OOOO$$$$$$ÑÑÍÍÍÍÍÍÍÍVVµZØØ ~Ø++ØØîîA›EEEEÃÃÃÃllll? å å åèèèè ¹gÁ å???–;èCèè;; å å å å½½½½jjggggggÅÅ'F(1˜4ú0ê&m>ÍrÅj Ä n nJJ ï ï ï ï n n Ä Ä Ä ï ï÷ ï 﨨¨¨ úU¨¨&&&&&&&&QQ ¤þÈÈqqÌ&yqqÄÄÄÄmmmm ë ë ë ë • •ï • ë ë ë ë > > > > À À   ( ( Ö Ö,,Ú4ºÂÂ__²XÌÌqqqqqqÄÄÄÄuÐ*E*ƒ68¹8¹7_8¹6)Ö˜Û   ²\\\,‡‡,,,‡‡ À À Àmm À ÀÄ i ü ü©À*×­R ¥ ¥ÿ.ll æ æ““@@îîz ÍÍww   úUU M M¨¨ ú ú ú ú ¤ ¤ ¤ ¤ Ï Ï " "|| " "ÈÈ À Ä Ä Ä ÄFFFF ™ ™ ™ ™ Ä Ä   Ä Ä Ä ÄF ì ™ ™ ™ ™ ™ ™ 2Œ 2 2 ‰ ‰ ‰ ‰ ‰ ‰66ŒŒ ß ß ´ ´ ´ ´ ´ ´a  ´ ´ ´ ´ ´ ´aa66666666aaaa ´ ´ ´ ´ÍÍ  Ê Ê Ê Ê¢ H H H ž ž ñK&& x x Ï Ï Ï Ï ú ú M M ú ú M Mèè;; å å å?½½½½JJ ï ï÷ÿ€R÷÷ Ä ÄqqÌÌqq ï ïFFFFS®µµý¢¢¢K¦¦¦SSSS{Õ(ÍÍÍ{{ÍÍÍÍÍÍ{ VVVV±V © ©ØØ++ØØ++›AîHòòò—pppÃÃè Ž;;––èèjjgggg;;èè å å’’;–;;;; Žè ¹ggjj½½ ¹ÁÁnÉà&Ä4M7772ò"´†vnnvy Ä n n n nJJó ™ ™ ™ n n Ä Äqq ï ï ï ï ï ï ï ïþþQQ ú ú ú úÓ x&&||| " ú ú úUmmÈÈuuÐ*&ÌqmmmmÄÄqq ë ë ë ë • • • •™™ ë ëBBBBÄ i m À À    ,,ÚÚ_______mÈ"}..ÓyuÈÈmmuÐ*˜)Ö68¹7¶7¶77.<I2} ²²²\\\ƒÝƒƒ‡áÄ iÄmmmmÄÄ ¥ ¥ÿZ± ^RRR øf* Vl¿¿====êê——ÉÉÉÉÉÉ   ú ú ú M M¨¨ ú ú ú ú ¤ ¤ ¤ ¤ Ï Ï " " " " " " n n À Ä Ä Ä ÄFFFF ™ ™ ™ ™qq Ä Ä Ä ÄF ì ™ ™ ™ ™ ™ ™ 2Œ 2 2 .ã ‰ ‰ ‰ ‰ Û Û 2 2 ß ß ´ ´ ´ ´ ´ ´a  ´ ´ ´ ´ ´ ´aa66666666aaaa ´ ´ ´ ´ÍÍ  Ê Ê Ê Ê¢ H¢¢ ž ž ñK&& x x Ï Ï Ï Ï ú ú M M ú ú M Mèè;; å å å?½½½½JJ ï ï÷Ã+¶3(+ R÷qqqqqq ï ïFFFF®r%Nä ý¢¢K¦¦¦®®SSÕ0‚(ÍÍ{{ÍÍÍÍÍÍ {±±VV±VØØ++ØØ++›ö£²¶LòpppÃÃè Ž;;;;èèÁÁgg;; Ž Ž å å 7 7 á;;;;; Žè ¹gg½½ ¹ÁÁnÉ;-ˆ79·8\8\7,.;vnnvÑ. Ä n nÈÈ B B ï ïó ™ ™ ™ n n Ä Äqq ï ï ï ï ï ï ï ïþþQQ ú ú ú úÓ x&&||×| ú ú úUmmmmÐ*&qmmmmÄÄ ë ë ë ë • • • •™™ ë ëBBBBÄmÈu À    ,,ÚÚ_È"2«$l!·˜ÓuÈÈmmuuÐ.M-å67¶7¶772L$ÃA× ²²²\ƒÝƒƒ‡KéÄ iÄmmmmqqÄÄÿÿÿZV ü©RR­R Ð ü ül¿¿==== ——ÉÉÉÉÉÉ       ú¨¨¨¨¨¨ M MQQ ¤ ¤ Ï Ï " " " " Ï Ï n n n n Ä Ä Ä ÄFF ™ ™ ™ ™ ™ ™qq Ä Ä Ä Ä Ä Ä ™ ™ ™ ™ ì ì ™ó ß ß 2 266 ‰ãã ‰ Û Û ß ß ß ß ´ ´ ´ ´     ´ ´ ´ ´ aaa6666 ‰ ‰ ‰ ‰aaaaaa aÍ(ÍÍww$ Ê õ õ¢ H ž ž ž žÓÓÓÓ Ï Ï| " M¨¨¨¨ M M M;;èè å å’’JJJ¤q)¯0s(T¼÷J ïqq ÄJ ï ï ïFF ™óS½/z ýOOSS®S‚‚ÕÕ(({{ÍÍÍÍ   Õ±VVVVV±±++ ~ ~ØØØØîH#é&GÎLÃÃÃà h h h Ž Ž Ž Ž;;;;½½gg Žè;; å å å å;;;; Ž Ž Ž Ž ¹ ¹ ¹ ¹ c½gggÁÉÉÁvà&Ä4ú7¯8\8\5§(àvnnÁ Ä Äu ï ï B BFFFFÈ n qqq ï ï ï ïQQ ¤ ¤ ú ú ú ú&&&&||||¨¨¨mm À ÀmÈuÐyyÄÄmmmm i i ë ë > >BBBB™™ ë ëBBBBÄÄ Àmm,,,,,,ÚÚ²²XXÈ×"»2ù6²2¢#."ÈÈmmmmÈÐÓˆU*ƒ1ž2ù1ž4S5®1žY…º_²X®®®®ƒƒ004éK<qÄÄmmmm iÄqqÄÄRRÿÿ©©©©RRÿÿÀÀVV¿¿¿¿¿¿¿¿======êêwwÉÉw ú ú   ú¨]]¨¨¨ M M ö ö ¤ ¤ Ï Ï " " " " Ï Ï n nÈÈ Ä Ä Ä Ä ì ì ™ ™ ™ ™ ™ ™qq Ä Ä Ä Ä Ä Ä ™ ™ ™ ™ ì ì ™ó ß ß 2 266 ‰ãã ‰ Û Û ß ß ß ß ´ ´ ´ ´     ´ ´ ´ ´ aaa6666 ‰ ‰ ‰ ‰aaaaaaa¼‚ÝÝ(ww$ Ê õ õ¢ H ž ž ž žÓÓ x x Ï Ï| " M¨¨¨¨ M M M;;èè å å’’ ï ï ïJ¬Ë¬J ïqq Äy.yyJ ï ï ïFF ™óù®[[WýOOSScÝÝ00(({{ÍÍÍÍ  {{±VVVVVVV++ ~ ~ ~ ~ØØîH`'ø/Á&G¶LÃÃÃà h h h Ž Ž Ž Ž;;;;½½gg Žè;; å å å å;;;; Ž Ž Ž Ž ¹ ¹ ¹ ¹ c½gggÁnngÑ•(Ë3Ÿ74M-ˆJÑnnÁg Ä Ä Ä Äu ï ï B BFF¡¡#È qqq ï ï ï ïQQ ¤ ¤ ú ú ú ú&&&&||||¨¨¨mm À ÀmÈuÄÄmmmmÄÄ ë ë™™BBBB™™ ë ëBBBBÄÄ Àmm,,,,,,ÚÚ²²XXÈ×%p5®8 6²+0ã"ÈÈmmmmÈyyÛ "»$!`&Ê-,4þ*º_²X®®®®ƒƒ0044á‡qÄÄmmmm iÄÄÄRR ¥ ¥©©©©­­ÿÿ± ü ü¿¿¿¿¿¿¿¿====== ÉÉw c c c½jÔͽ Ï Ï| " Ë Ë Ë Ë "| Ï Ï x x&&`` ® ® ® ® X X X X X X ƒ ƒ ƒ ƒ00 ƒ ƒ00 ƒ ƒ - -  Ú ß ß ß:ãã66  ] ]    w  Ê o   w Ê Ê Ê Êww Ê Êaaaa    6666 ß ßŒç½µ¦Kùù    ÍÍ  M M M M úU¨¨ ú ú ú úþ ¤ ¤ ¤&&&&&&&&ÓÓÓÓ×|||² XÞ“@‹8Þ00ÈÈÈ#çœØÈÈÈÈ{{Í(Ñw$$((Õ04Žéé&€&Ëü¸¸e ¸¸————AA “ “ êEòLî “ “ “ZµjÔã‰qb3ØØØ Ô Ô Ô Ô|| Ï Ï||) Ï«Q ¤ ¤ ú ú ú ú ú ú ú ú ¤ ¤Q ö M M¨¨ M¨ ú ú&&&& Ï Ï|| úUUUUU¨Ó-ÛêP$$(4$$\—â-×|||ÞÞ0 Ö Ú Ú‡‡\\\\²² X yqq ï ïFFóó|| Ï Ï|||||| " " Ï Ï||U¯FF™™™ó FmmÄÄÄÄmm À À À Àmm ë ë™™ ë ë ë ë,,Ú ,,,,®®®®XXXXXXXX®®®®ƒÝ Ö ÖÚÚÚÚ_o ,Ì2ã.ÔCÝÝ000000BBóóNaa´i"Ç +û‹0000000²²®®®®\\®®®®®®®  » » hî“““ŸT ~~~~ÔÔ'+ Ð #~'' z z Å Åss z c c c½År Ï Ï| " Ë Ë Ë Ë "| Ï Ï x x&&ºo` ® ® ® ®²²²² X X ƒ ƒ ƒ ƒ00 ƒ ƒ00 ƒ ƒ - -  Ú ß ß ß:ãã66  ¸¸    w Ê o  w  Ê Ê Ê Êww Ê Êaaaa    6666 ß ßŒç®®[¦¦ùù    s s  M M¨¨ úU¨¨ ú ú ú úþ ¤ ¤ ¤&&&&&&&&ÓÓÓÓ×|||² XÞÞ‹‹Þ ƒ00ÈÈÈ#¬QØÈÈ n n  Í(Ñw$$((Õ0ŽéCø55Ûxq¸¸e ¸¸————AA “ “ êE—§Hî “ “Zµµµb3ØØØ Ô Ô Ô Ô|| Ï Ï|| Ï)Q ö ¤ ¤ ú ú ú ú ú ú ú ú ¤ ¤Q ö M M M M M¨ ú ú&&&& Ï Ï|| úU ú úUU]-Ó€ÛŒAö›=â--×|||ÞÞ0 Ö Ú Ú‡‡\\\\²²²² Äqq ï ïFFóó|| Ï Ï|||||| " " Ï Ï||¯ +llU ™™™ó FmmÄÄ i imm À À À ÀmmFF™™ ë ë ë ë,,Ú ,,,,®®®® ý ýXXXXXX®®®®ƒÝ Ö ÖÚÚÚÚ_o~–;ɺÝÝ000000BBóóNNRR¤¤]°U‹0000000XX®®®®\\®®®®®®®  » » hî“““Ÿ¾êê~~~~ÔÔ' Ð+~Ø''ÔÔ Å Åss z c c½½½½ Ï Ï Ï Ï x x x x Ï Ï Ï ÏÓ x&€Êéʺ ® ® ® ®² X X X ƒ ƒ Ö0ÞÞÞ ƒ00 ƒ ƒ - - - - ß ßŒç>> ‰ ‰  ¸¸ ] ] ] ]   Ê Ê Ê Ê   Ê Êww$$wwaaaa    6666: ߌŒ¦¦¦¦KK    s s s s M MU ú M¨ ú ú ú ú ú ú ¤ ¤ ¤þ&&&&ÓÓÓÓ&€ÓÓ Ï Ï Ï Ï00‹‹ÞÞ00ÈÈÈ#*ß…ÐuÈ n n n n n  ÍÍ$$$$((Õ0ŽCžŸ!T—ˆÓxÃiee e¸¸¸¸—— ê êîîî “ ê ê—òîîAA­­ZZ­…+ ~Ø Ô Ô‚‚) Ï Ï Ï Ï)|| ¤ ¤QQ ú ú ú ú ú ú ú ú ¤ ¤ ¤ ¤ ú ú M M ú ú ú ú&&ÓÓ Ï t Ï Ï¨¨ ú ú¨¨U¯-Ó--ÞÞŒŒÛÛÓÓ|| Ï Ï ƒÞ00 Ú Ú‡‡\\  ``² Xqq B B ï ïFFóó)) Ï Ï×|)) Ï Ï Ï Ï Ï Ï)„·Ö#¢#¢ûFFóó™™mmÄÄmm À À À ÀmmFF™™™™ ‘ ë,,   Ú,, ª ª ªXXXX®®®®ƒÝ00,,,, gÂg  00ƒƒ0000ïïJJFFóN¤¤¤¤N¨¨¨Ýƒƒƒ00Ý’g²XXXX®®\\®®\\®®®®hh hhh““@@ Dê+ Ð~~ÔÔÔÔ~~+ Ð''''ss  ss c c c c c c Ï Ï Ï Ï x x x x Ï Ï Ï ÏÓ x&€Êo` ® ® ® ®² X X X ƒ ƒ Ö0ÞÞ ƒÞ00 ƒ ƒ - - - - ß ßç«]óãã  ] ] ] ] ] ]   Ê Ê Ê Ê  $$ww$$wwaaaa    6666 ß:ŒŒ¦¦KKKKKK    s s s s¨¨U ú M¨ ú ú ú ú ú ú ¤ ¤ ¤þ&&&&ÓÓÓÓ€Û-- Ï Ï))0000ÞÞ00 n n nÈuuuuuÈ n n n n n  ÍÍ$$$$((Õ0éžøb%d*Î&LâÓÃÀÀe ¸¸¸¸——EEHHHî ê ê— = “ “AA­­ R­­­…+ ~Ø//‚‚) Ï Ï Ï Ï)|| ¤ ¤QQ ú ú ú ú ú ú ú ú ¤ ¤ ¤ ¤ ú ú M M ú ú ú ú€€ÓÓ Ï t Ï Ï M M ú ú¨¨ úUÓ---„„××€€ÓÓ|| Ï Ï ƒÞ00 Ú Ú‡‡\\ ® ®`` X²qq B B ï ïFFóó Ï Ï Ï Ï| " Ï Ï Ï Ï Ï Ï Ï Ï)„'5;5;(ý +FF™™™™mmÄÄmm À À À Àmm ë ë™™™™ ë ‘,,ÚÚ Ú,, ª ª ªXXXX®®®®Ýƒ00,,,,²X²X²²00ƒƒ0000ïïJJFF™óJJJJNóóó݃ƒƒ00’f;gXXXX®®\\®®®®®®hhhÂhh““@@òTD+ Ð~~ÔÔÔÔ~~+ Ð''''ss  ss c c c c ¹ ¹ ¹ " " " " " " "| Ï Ï Ï Ï€&&&`` ²²² ® ® \ ® ® ® ® Ú Ú Ú Ú ƒ ƒ Ö0 - - Ú Ú‡ - Ú Ú 2 2A +E¸¸ ] ] ] ] ]¸ s s s s Ê Ê  {{ÍÍÑÑa¼    ß ß 2 2 Û666OO õ õ¢¢ õ õ Ê Êww Æ Æ ¤ ¤QQQQQQ ú ú ú ú ú ú ú ú Ï Ï Ï ÏÓÓ&&--€€&&&&\\\¶\\\\ - -‡‡‡‡ Ú Ú n n nÈqqqqqq Ä Äww$$$$wwÑÑÙŽC¥µ'-Ù+$#—ˆ&qmeeaaaaAAîHL§EE ê ê ê ê— = ê êVVVVVVVV‚‚ Ô Ô‚‚ Ô Ô| " " "&&&& ¤ ¤ ¤ ¤ ú ú ú ú¨¨¨¨QQ ¤ ¤QQ ö ö¨¨ ú ú)) Ï Ï x x x x ¤ ¤ öQU ú¨¨|××11ׄ)ÓÓÓÓ Ï Ï|| Ú4 Ú Ú‡‡‡‡² X «ÈÈq    B B ï ïFFFF Ï Ï))Ó x&& x x x x&€€Û¿$ý1Ù1Ù$—YïïBÄÄq À À ÀÄÄ • •BB™™ ë ë,,ÚÚ00 Ö0XXXX ý ý® ®®XXXXÚÚ‡<ÝÝ00XX®®,,,,0000ïï™™™óïïBƒƒƒƒÚÚ–µág²XXX  ®®²X ª ª ªX ýXX²X¿¿¿¿hhh“î@õÕ¾ù/ÔÔÔ~~ Ð+'''' Ð Ð Ð Ðw Å Å c c c c _ ¹ ¹ ¹ " " " " " " "| Ï Ï))& Ë&&² X X X ® ® \ ® ® ® ® Ú Ú Ú Ú ƒ ƒ Ö0 - - Ú Ú‡ - Ú Ú 2 2Œçë66¸¸ ] ]¸¸ ]¸ s s s s$$    ÍÍ4á,¼    ß ß 2 2 Û666 õ õ õ õ¢¢ õ õ Ê Êww Æ Æ ¤ ¤QQQQQQ ú ú ú ú ú ú ú ú Ï Ï Ï Ï x x&&ÓÓ&&&&&&\\\¶\\\\‡‡‡‡‡‡ Ú Ú n n nÈqqqqqq Ä Äww$$$$wwww$4–¥ö#%º#òâ€ËÇmee¼¼aaAA “î—òEE ê ê ê ê— = ê êVV ü üVVVV‚‚ Ô Ô‚‚ Ô Ô| " " "&&&& ¤ ¤ ¤ ¤ ú ú ú ú¨¨¨¨QQ ¤ ¤QQ ö ö M M     Ï Ï Ï Ï x xÓÓ ¤ ¤ öQU ú¨¨|×1A›Œ„)ÓÓÓÓ Ï Ï|| Ú4 Ú Ú‡‡‡‡² X « n nq qq ï ïFFFF Ï Ï Ï ÏÓ x&& x x x x&€€Û¯Ö‹ÃYïïBÄÄq À À À i i • •BB™™FF,,ÚÚ000‹²²XX ý ý® ®®XX²²ÚÚá–’Ý00XX ª ª®®,,‡‡ Ö Ö Ö ÖïïBB™™ó™BBBBïïB 胃ƒƒÚÚá–g ²XXX®®  ²X ª²XXX²X¿¿¿¿hh h“î›%?2È0À¾‰/ÔÔ~~ Ð+''++ Ð Ðw  c c c c ¹ ¹ Ï Ï Ï Ï "||| Ï Ï) Ï x x x x\\\\\  ® ® Ú Ú Ú Ú00 Ö0 Ú Ú Ú4‡‡ Ú Ú ß ß ß:ãã66 ] ] ] ]        ww    {Õ4øð˼a  ]¸ ß ß 2 2 ‰ ‰66 H H õ õ õ õ H H Ê Ê   s s s s ¤ ¤QQQQQQ ú ú ú ú ú ú ú ú Ï Ï Ï Ï&& Ë€ÓÓ&&&&&&\\\\ ® ® ®4 Ú Ú Ú‡‡ Ú ÚuÈÈ Ä Ä   Ä Äqq$$ Ê ÊwÑÑÑÑw$Ù4;ð9î£IâˆÓx"meeaaAAîî———— ê ê ê ê— = ê êVV © ©VVVV// Ô Ô‚‚‚‚) Ï Ï Ï&& xÓQQQQ ú ú ú ú ú ú ú ú ¤ ¤QQþþ ¤ ¤ ú ú M M|| " " x x&&þ ¤QQ¨ M ú ú||ÞH«æ×|&&ÓÓ Ï Ï||‡‡ Ú Ú Ú Ú‡‡ « « n n n n Ä Ä Ä ÄJJó ™ ™ ™ Ï Ï " "&&&&&&&&&&€€]·¿ÎiÿJïBBBBÄÄÄÄÄmm À À iÄïïBB ë ë >™,,ÚÚƒƒÝ8²² ý ý®®X²²²ÚÚá<å0ƒƒ ª ª ª ª\\\,,ÚÚƒƒ Ö0BBBBóóFFïïBBïïBBƒƒ0 ÖÚÚ4²²XX®ckk_X²²Xllll@@õo0À7…0À¾‰ÔÔÔ+ Ð~~''++ Ð ÐÉÉ  c c c cgg ¹ ¹ Ï Ï Ï Ï Ç " " " Ï Ï) Ï x x x x\\\\\  ® ® Ú Ú Ú Ú000‹ Ú Ú Ú4 - - Ú Ú ß ß ß: ‰ ‰66 ] ] ] ]        ww    {Šb.F3.ó!T˼a  ]¸ ß ß 2 2 ‰ ‰66 H H õ õ õ õ H H Ê Ê   s s s s ¤ ¤QQQQQQ ú ú ú ú ú ú ú ú Ï Ï Ï Ï&&&&ÓÓ&&&&&&\\   ®   4 Ú Ú Ú‡‡ Ú Úu n n Ä Äqq Ä Äqq Ê Ê Ê Êwц†,Ñ$Ù††u**„Ó-ÓxmmÀÀaaAAîî———— ê ê ê ê— = ê êVV © ©VVVV Ô Ô Ô Ô ' '‚‚) Ï Ï Ï&&Ó xQQQQ ú ú ú ú ú ú ú ú ¤ ¤QQþþ ¤ ¤ ú ú M M " " " " x x&&þ ¤QQ¨ M ú ú||)ÞŒ1×|&& x x Ï Ï||‡‡ Ú Ú Ú Ú - - n n n n Ä Ä Ä Ä ï ïNó ™ ™ Ï Ï " "&&&&&&&&&&€€¨¯¿YJïBBBBÄÄÄ imm À ÀÄ iïïBB ë ë >™,,ÚÚƒƒÝƒ²² ª ªXX®®X²²²ÚÚ,‡00ƒƒ ª ª ª ª\\\,,ÚÚƒƒ0 ÖBBBB™™ ë ëïïïïBBƒƒ Ö0ÚÚÚ XXXX (#©?o_X²²X ª ªllll@@›ª(%ì ‚ ‰ÔÔÔ+ Ð~~'''' Ð Ð Ð ÐÉÉ   c c ¹ ¹g x x x x " " Ï Ï ú   ú ú M M M M\\ ® ®\\ ® ®\\\\\\ ® ®\\ ®²gc \\ ® ® ® ® a ´ ´ ´ ´aa ‰ ‰ Û6ŒŒ ß ß õ õ õ õKKKK {0ô,ë6e7¿6e(&i ´ ´ ´ ´ ° ° ° ´ ´ ´ ´ ñ ñ ž ž ž ž ž ž Ê Ê   Æ   Q öþþ ú ú M Mþþ ¤þ¨ M ú ú ú ú¨ MQQ ¤ ¤&&&& Ï Ï||  ® ®²² n n nÈ ï ïFFFF ž ž žùùù®®SS¦¦SSE   ¤þöœÀÀÀea  ¿ll————AAAA++ ~ ~ØØ++ ~ ~ ~ ~++Ø ~¨¨ ú ú ú ú ú ú)) Ï Ï Ï Ï Ï Ï&& x x "|||||| " Ë&&& ¤ I I ¤ M¨ ú ú||| "&& x x ú ú¨¨UU úUU úQQ ¤ ¤\\\\² X X X ® ®\\ n n n n n n Ä Ä qÈÈ n n x x&&&&&&QQQQ ¤ ¤QQÓÓ--""ummïïBB™™F ë ë ë ë ëBBBB •ïBBBB •ïÚÚ,,ƒƒƒƒ\\ T®XXXX,,,,ƒ88݃ƒ Ö0 Ö Öƒƒ Ö Ö Ö0,,,,®®\XXXX iÄmm À À™™ FF ë™™XXXX®®® TÚÚÚÚƒƒ00‹ª#~–,ÚÚ ªXXXXXXîîîîîîî“hÂppÚ4,ÿÿÿÿ ü ü ü üRRRRRRRRõõ¢¢KK c c ¹ ¹g x x x x " " Ï Ï ú   ú ú M M M M\\ ® ®\\ ® ®\\\\\\ ® ®¶¶ ®²²c \\ ® ® ® ® a ´ ´ ´ ´aa ‰ ‰ Û6ŒŒ ß ß õ õ õ õ ñ ñKK {0?'6e7¿6e)s€i ´ ´ ´ ´ ° ° ° ´ ´ ´ ´ ñ ñ ž ž ž ž ž ž Ê Ê   Æ   Q ö ¤ ¤ ú ú M M ¤ ¤ ¤þ¨ M ú ú ú ú¨ MQQþþ&&&& Ï Ï||  ® ®²²ÈÈÈ n ï ïFFFFùù žùùùùùùù¦¦SS¦¦ëEEEIïAœÀÀÀea  ¿  ————AAAA++ ~ ~ØØ++ØØØØ……Ø ~¨¨ ú ú ú ú ú ú Ï Ï Ï Ï Ï Ï Ï Ï&& x x|×××××| " Ë&&&þ ¤ I ¤ M¨ ú ú||| "&& x x ú ú¨¨¨¨UU úUU úQQ ¤ ¤  \\² X X X ® ®\\ n n n n n n Ä Äq  n n n n x x&&&&&&QQQQ ¤ ¤QQÓÓÓÓÈÈummïïBB™™ ëF ë ë ë ëBBBB •ïBBBB •ïÚÚ‡‡ƒƒƒƒ T®XX²²,,,,ƒ8݃ƒƒ { Ö Ö Öƒƒ Ö Ö Ö0,,,,®®\XXXX iÄqqmm™™ ëFF ë™™XXXX®® ®ÚÚ  ƒƒ000åššá,ÚÚ ªXX²²²²îHHHîhÂpÂÿÿÿÿ ü ü ü üRRRRRRRRõõüü¦¦ c cg ¹ ¹ x x& Ë " " "| M M ú ú   ú¨ M   ® ® ® ®\\  \\   ®  \\ X²\\ ® ® ®   ´ ´ ´ ´ ´ ´ a ‰ ‰ ‰ ‰ ß ß ß ß H¢ õ õ ñ ñ ñK {(7+‘0û,ëòiaaaa ] ] ° °   ´ ´ ž žKK ž ž ž ž Ê Ê   s sÍ sQQ öQ M¨ M M ¤ ¤ ¤ ¤¨ M ú ú ú ú ú úQ«þ³ˆÓ&&| "||\\\\ X²²² X X X XFFFFù žKKKKKK¦KùùùS¦ë똘AAAA¸aa ´ ´llpÃÃòòEE “ “›A++ØØ…++++++++……+ ú ú¨¨ ú ú ú ú||| " Ï Ï " "&&&€×1991×) Ï&&ÓÓQQ ö ö M¨ ú ú Ï Ï " " x x&& ú ú ú ú¨¨¨ ú ú¨¨QQ ¤ ¤ ® ® ® X X ® ®\\ÈÈ Ä Ä   n n n n x x xÓ&€€&QQQQ ¤ ¤ ¤þÓÓ&&mmmmBB • •™™ ëFó > ëFBBBBBBBBBBBBÚÚÚÚ Ö Öƒ (\XX,,,,ƒÝ000 Ö Ö Ö Ö Öƒƒ Ö Öƒƒ,,,,®® ªXXÄÄqqmmmm ë ë ëF FF ëXXXX®®®®ÚÚ,,ƒƒ Ö Ö00884Ú,,X²² HXP›@hh »­RRR ü ü©© ¥ ¥ øRÿÿÿÿõO_nj c c g ¹ ¹ x x& Ë " " "| M M ú ú úU¨ M   ® ® ® ®\\  ¶¶   ®  \\ X²\\ ® ® ®\\ ´ ´ ´ ´a  ‰ ‰ ‰ ‰ ß ß::¢ H õ õ ñ ñ ñK{ Í(4éžCi ´aaaa ] ] ° °aa ´ ´ ž žKK ž ž ž ž Ê Ê   s sÍ sQQQ ö M¨ M M ¤ ¤ ¤ ¤¨ M ú ú ú ú ú úQ«YÃL ×1× "\\\\² g²²²²² B BFFFFù žKKKKKKK¦ùùùS[>>çççç¸aallpÃÃòò ê ê “ “A›++ØØ…+++++++…++ Ð ú ú¨¨ ú ú ú ú||| " Ï Ï||&&&€1A Â#w`æ„)&&ÓÓQQQQ M¨ ú ú Ï Ï " " x x&&UU ú ú¨¨¨ M ú ú M MQQ ¤ ¤ ® ® ® X X ® ®\\ÈÈ Ä ÄqqÈÈ n n x x xÓ&€5ÛQQQQ ¤ ¤ ¤þÓÓ&&mmmmBB • •™™F ë™ ä ‘ ëBBBBBBBBBBBB     Ö Ö (ƒ\XX,,,,ƒÝ000 Ö Ö Ö Ö Öƒƒ Ö Öƒƒ,,,, T T ªXXÄÄqqmmmm ë ë ëF FF ëXXXX®®®®ÚÚ,,ƒƒ Ö Ö00ÝÝ4Ú,,X²² ²"á-/¼*R~ª›hh » » » øRRR ü ü N N ¥ ¥ øRÿÿÿÿOª3+a#™ ¹ ¹  "| " " Ï Ï Ï Ï ¤ ¤ öQQQ ¤ ¤ ® ® ® ® ® ®\\\\ c¶¶¶\ ®\  ® ®\\ ® ® ® ®a  ´ ´aa   Û6 ‰ ‰ ‰ ‰ãã ž ž ž žKK ñK  {{(‚00¸¸¸  ¸ ] ] ] °  ´ ´ ž ž ž ž H H H H Ê Ê w Ê Ê   ú ú M M ¤ ¤ ö ö ö ö ¤ ¤ ú ú ú úQQQQQQY—â55ˆˆÓ x\\\\`ºº``\\\¶u n n¡FFF ï ï ï ï õ õ¢¢KKKK õO¢¢ùS®S:”::ã>ããee¸¸aaÃÃÃÃll ¿ ê ê ê ê ê ê—— Ô Ô Ô/‚‚/ Ô++++‚‚‚ ' ¤ ¤QQ M M¨¨&&&& x x&& Ï Ï|׌ 13µ)åL5€&€ÓÓ¨¨¨¨ ¤ ¤ ¤ ¤ Ï Ï " " x x x x ú ú M M ¤ ¤Q ö ú ú ú úQQQQ²² X X\\\\ Ä Ä Ä n n À j Ä Ä#È À Ï Ï Ï)××1׫QQQ ú ú úU||) Ïmmmmmmm  • • • •BBBBï : • •BBBB ë ë ë ëBBBB Ö Ö ( ( Ö Ö Ö0 ªXX® T,,,,ƒƒ00ƒƒƒƒ,,ÚÚ,,,, Ú,,®®®®ÄÄqqÄÄÄÄ ë ë™™ïïBB ªXXXXÚÚ  ƒƒ Ö Ö0000ƒƒƒƒ²²___o"Š2È6Ø6Ø4y)¥_õ¿lhh » » ¡ ü ü ü ü ü ü ü ü ü ü ü©©VV¢üÉ!è~_ ¹ ¹gg "| " " Ï Ï Ï Ï ¤ ¤ öQQQ ¤ ¤ ® ® ® ® ® ®\\\\ ck  c ¶\ ® ®\\ ® ® ® ® a ´ ´     Û6 ‰ ‰ ‰ ‰ ‰ ‰ ž žùùKK ñK    Í({{¸¸¸  ¸ ]¸¸ ° ´ ´ ´ ´ ž ž ž ž H H H H Ê Ê w Ê Êww ú ú M M ¤ ¤ ö ö ö ö I I ú ú ú úQQQQQQþþˆˆŸŸ---Ó\\\\`\\¶*…Ð n n ìFFF ï ï ï ï õ õ¢¢KKKK õO¢¢ žùSù:”::ã>ãã  ¸¸aaÃÃÃÃll ¿ ê ê ê ê ê ê = = Ô Ô Ô/‚‚/ Ô++++‚‚Ü‚ ¤ ¤QQ¨¨¨¨&&&& x x&& Ï Ï|×1!o16j2¶5€€&ÓÓ¨¨ M M ¤ ¤ ¤ ¤ Ï Ï " " x x x x ú ú M M ¤ ¤Q ö ú ú ú úQQQQ²²²² ¶\\ Ä Ä Ä n n À j Ä Ä nÈu Ï Ï Ï)××|׫QQQ ú ú úU||) ÏmmmmmmÈm • • • •BBBBïï • •BBBB ë ë ë ëBBBB Ö Ö ( ( Ö Ö Ö0 ªXX® T,,‡‡ƒƒ Ö Öƒƒ ( (,,ÚÚ,,,, Ú,,®®®®ÄÄ&&ÄÄÄÄFF™™ïïBB ª ª ª²²XX  ÚÚƒƒ Ö Ö0000ƒƒƒƒ²²__ºÉ&š6Ø82827.1ÄÉõtlhh » » ¡ ü ü ü ü ü ü ü ü ü ü ü©© ü üG¢ª__ª ¹ ¹ c c½½ Ï Ï|| Ï Ï Ï ÏQQQQQQ ¤ ¤ \\  ® ®\\ ® c‚& %^Õcc ® ® ®\\ ® ® ® T ´ ´ ´ ´ ´ ´   ‰ ‰ ‰ ‰ ‰ ‰ Û Ûùùùù ž žù ž s s  ÍÍ s͸¸      ¸¸ e ´ ´ ´ ´ ñK ž ž õ õ õ š Ê Ê Ê Ê$ ÊÑw ú ú ú   ö ö ö ö ö ö ö ö ú úUUQQQQQQþþÓ-55Ó---\\\\² X ® ® ®c}ØÐuÈÈÈ n ìF ™ ™ ï ï ï ï õO õ õùù ž žO õ¢¢K¦Sù:”::>>ãã    aallll ê ê ê ê—— ê Ô Ô Ô/‚‚‚‚ ~ ~ ~ ~ Ô Ô Ô ÔQQ ¤ ¤¨¨¨¨&&ÓÓ x x x x Ï Ï|×1«"Ê&Ù"sEˆÓÓ x&& ú ú M M ¤ ¤ ¤ ¤ Ï Ï " " x x x x ú ú M M ¤ ¤ ¤ ¤ M¨ ú úQQQQ²²``²²²²¶¶\\ Ä Ä   n n n n Ä Ä Ä Äu Ï Ï|| Ï Ï))QQQQ ú ú¨¨ Ï Ï Ï Ï À Àmmmm}È • • • • • • • •BB • •BBï • ë ë >™BBïï݃ Ö Ö Ö ÖƒƒXX ª® T T®Ú44Ú Ö Ö ( (ƒƒ ( (,,  ,,,,,,,,\\® qqÄÄFFFFïïBBXXXX ª,,,,0 Ö Ö Ö0åå00 Öƒƒ²²º$(¡7…826Ø7.,Z Ht¿hh » » ü üV ü ü ü ü ü©©©© ü ü N©õõOOªª ¹ ¹ c c½½ Ï Ï|| Ï Ï Ï ÏQQQQQQ ¤ ¤ \\  ® ®\\ ®  c7+u-}?¾  ® ® ®\\ ® ® ®  Y ´ ´ ´ ´   ‰ ‰ ‰ ‰ ‰ ‰ Û Ûùù ž ž ž žù ž s s  ÍÍ s͸¸      ] ] e ´ ´ ñK ž ž õ õO õ Ê Ê Ê Ê$ Êw  ú ú ú  QQ ö ö ö ö ö ö ú úUUQQQQQQþþ xÓ€€ xÓÓÓ\\\\² X ® ®  È#ÐuÈÈÈ n ìF ™ ™ ï ï ï ï õO õ õùù ž žO õ¢¢K¦S®”:::ãããã    aallll ê ê ê ê—— ê Ô Ô Ô/‚‚‚‚ ~ ~ ~ ~ Ô Ô Ô ÔQQ ¤ ¤¨¨ M M&& x x x xÓÓ Ï Ï|××1æAêÛ--Ó x&& ú ú M M ¤ ¤ ¤ ¤ Ï Ï " " x x x x ú ú M M ¤ ¤ ¤ ¤ M¨ ú úQQQQ²²``²²²²¶¶\\ Ä Ä   n n n n Ä Ä Ä Äu Ï Ï|| Ï Ï))««QQ ú ú¨¨ Ï Ï Ï Ï À À  mmmm • • • • • • • •BB • •BBï • ë ë >™ïïƒ ( Ö Ö Ö ÖƒƒXX ª T® T®Ú4Ú  Ö Öƒƒƒƒƒƒ,,  ,,,,,,,, T®ÌÌÄÄFFFFïïBBXXXX ª,,,,0 Ö Ö Ö0åå00 Öƒƒ ª ª²²_É#74Ð5}4#/!†XHllhh » » ü üV ü ü ü ü ü©©©© ü ü N©õõõõOO&& xÓ Ï Ï|| ú ú¨¨ ¤ ¤ ¤ ¤ Ï Ï))ÓÓ&& Ú Ú - - - - Ú Ú  ¶¶ åìÍu Ä Äq  nÈ nÈ Ô Ô Ô Ô++ ~ ~ © © © © R R R R Ô Ô ' ' Ô Ô Ô Ô © ©V±V üVV R R © © © © © © © ©­­ © © © © Ô Ô Ô Ô‚‚ Ô Ô;;;;’’ å å ¹ ¹gg’’??èè;; 7’’’’’ å å||||ÓÓ x x x x x x Ï Ï| "¨¨UU ú ú ú ú x x&&||))ØØ++‚‚ Ô ÔVVVV^^—————— ê êAAîîAAAA ž žKK ž žKK¦KKK õOO š ß ßŒŒ::ŒŒ66666 Û Û Û&&&& x x&& ¤ ¤ ¤ ¤QQQQ&& xÓ))×ׯUUUQQQQ¨ M M M¨¨ ú ú|| " " Ï Ï Ï Ï á á á; å å 7 7 å å å å’’’’ Ú Ú44 Ú4ââ‡ââ‡ÞÞ00 X X X X  qq Ä Ä Bóó¡¡ Ö Ö ( (,,Ú  ª ªXXXX ª ª™™™™ ë ë ë ëBB •ïïï®®XXXX® T\ ªXXBBB ë ë™™ÄÄ À À À Àmmmm ¼ ª ªXXƒƒƒƒ Ö Ö Ö Öää77莎Ž7’777777bb½½¹¹  ŽŽ;;èèCb+64¯-ë(µ–~$ùùKK¢GGGa Y´´ Yßß222222 + +&& xÓ Ï Ï|| ú ú¨¨ ¤ ¤ ¤ ¤)ÞÞ)ÓÓ&& Ú Ú - - - - Ú Ú ® ®\\¶cu Ä Äq È#È n Ô Ô Ô Ô Ð Ð ~ ~ © © O O R R R R Ô Ô ' ' Ô Ô Ô Ô © ©V±±VVV R R © © © © © © © ©­­ Ô Ô Ô Ô‚‚ Ô Ô;;;;’’ å å ¹ ¹gg’’ššèè;; 7’’’ 7 7 å å||||ÓÓÓÓ x x x x Ï Ï "|¨¨ ú ú ú ú ú ú x x&&||))ØØ++‚‚ Ô ÔVVVV—————— ê ê››îîAAAA ž žKK ž žKK¦KKK õO õ õ ß ßŒŒ::ŒŒ66666 Û Û Û&&&& x x&& ¤ ¤ ¤ ¤QQQQ&& xÓ))||U úUUQQQQ M¨¨¨¨¨ ú ú " " " " Ï Ï Ï Ï á á á; å å 7 7 å å å å’’’’ Ú Ú444<<â<â‡ÞÞ00 X X X X²²qq Ä Ä BóóFF « « Ö Ö ( (,,Ú  ª ªXXXX ª ª™™ > > ë ë ë ëBB •ïBBïï®®XXXX® T\ ªXX èBBBFF™™ÄÄ À À À ÀmmmmqXX ª ªƒƒƒƒ Ö Ö Ö Öää77Ž 3 3 37’777777bbbb¹¹  ŽŽ;;èèCøR##øá,~$žžKK¢GGG ¬ Y´´ Yßß222222´´´´ + +&&&&|| Ï Ï ú ú¨¨ ö ö ¤þŒ«P1&&ÓÓ - - - - Ú Ú‡‡   ®¶¶c ÈÈ n n Ä Ä Ä Ä n nuu n n '‚‚‚ ~ ~ ~ ~ ü ü O O ¥ Ô Ô‚‚ Ô Ô Ô Ô © ©V±VVVV R R ¥ ¥ © © © ©VVVVZ‚‚‚‚‚‚ Ô Ô á; Ž Ž’’’ 7 c½gg ¹ ¹ å?š?èè;; å å’’ å å å å||||&& x x x x x x Ï Ï Ï Ï¨¨¨¨ ú ú ú ú x x&&||××……++‚‚Ü‚±±VV——E ê êEEE›Aîîîî “ “ ñKKKKKK ñù ž ž ž¢¢ õ õ ß ßŒŒŒŒŒŒ6666 Û Û Û6&&&&ÓÓ&& ¤ ¤ ¤ ¤QQQQ&&&&|| Ï Ï ú ú ú ú ¤ ¤ ¤ ¤ ú ú ú ú¨¨ M M t t Ï Ï Ï Ï "| Ž Ž Žè å å 7 7 å å å å å å å 凇‡‡4——<——<8ÞÞÞ`²² X Xqq ï ïFFFF X X X Xƒƒ Ö Ö,,,, ª ª ª™™ ë ë ë ë ë ë • • •ïBBBB®® ªXX®®XXBBBB™™™™ i i À À À ÀmmmmqÄÄ ª ª ª ªXXƒƒ Ö Ö Ö Ö Ö Ö77’7 á ᎎää777777bb µ µ    ŽŽŽŽ;–ðð3CŽ~$wwžžžžõõGG´ Y Y´´ Y22ßߌŒßß´´´´¸¸&&&&|| Ï Ï ú ú¨¨ ö ö ¤þ1››1&&ÓÓ‡‡ - - Ú Ú‡‡   ®\\ ®ÈÈÈÈ Ä Ä Ä Ä n n n n '‚ ' ' ~ ~ ~ ~VV © © K ¥ Ô Ô‚‚ Ô Ô Ô Ô © ©V±VVVV R R ¥ ¥ © © © ©VVVVZ‚‚‚‚‚‚ Ô Ô; á Ž Ž’’’ 7 c½gg ¹ ¹ å??šèè;; å å’’ å å å å||||&& x x x x x x Ï Ï Ï Ï¨¨¨¨ ú ú ú ú x x&&||||++++‚‚‚ܱ±±±——E ê êEEE›Aîîîî “ “ ñKKKKKK ñù ž ž ž¢¢ õ õ ß ßŒŒŒŒ 2 26666666&&&&ÓÓ&& ¤ ¤ ¤ ¤QQQQ&&&& " " Ï Ï ú ú ú ú ¤ ¤ ¤ ¤ ú ú ú ú M M M M Ï Ï Ï Ï Ï Ï "| Ž Ž Žè å å 7 7 å å å å å å å 凇‡‡4———¦L8ÞÞÞ```º   X Xqq ï ïFFFF X X²²ƒƒ Ö Ö,,,,___™™ ë ë ë ë ë ë • • : •BBBB®® ªXX®®²²BBBB™™™™ i i À À À ÀmmmmqÄÄ ª ª ª ªXXÝÝ Ö Ö Ö Ö Ö Ö77’7 á ᎎää777777bb µ µ ± ±  3 3ŽŽ á;;;$~Ù~~$wwžžžžõõGG´ Y Y´´ Y22ßß22ßß´´´´¸¸|| " " x x x x ú úU ú M M ú ú×11|&& x x Ú Ú Ú Ú0000 ®\\\\ ® ®Ì  Ä Ä n n À n n Ô Ô Ô Ô Ô Ô‚‚VVV ü ü ü ü ü++ ~Ø++++ © ©V±VVVV R R © © ü ü­ R­­­­bb­­Ø ~++ ~ ~++; á Ž Ž å å’’;;èè å?’’èèCè–;èè Ï Ï|||| "| Ï Ï Ï Ï Ï Ï " "QQ ¤ ¤QQ ¤ ¤ "| Ï Ï&&€€ØØ++‚‚//^¹AAAA ê êEEîî››îîAA ž žK¦ ž žKK õ õ õ õ õ õ õ õ6666 2Œ ß ß6666666ÓÓÓÓ--&&¨¨¨ M ú ú ú ú "|)) Ï Ï|| ú ú ú ú¨¨ ú ú M¨¨¨ ¤ ¤QQ&&&& x x Ë&; á;; å å å å á;;–;; Ž Ž‡‡ Ú4â<éééù®D4 Ú‡‡\¶‚w X X\\\  «ÈÈ Ä Ä ® ®  Ú,,ƒƒƒƒ²² ƶ\™™ ë ë ë ë > > > > > >B²XXXXXXX ªXXX²óó ëFFF ëF À À À À À À À À  mmm  À À iÄ®®® T ª ª ª ªƒƒ Ö Ö Ö Ö Ö07777777777 Š ŠŽŽŽŽ µ µ µ µbbŽŽŽŽ7’ääÍÍzzÑwÉÉGGGG ñ ñ ñ ñ ° ° ° °]]]]ßß22ˆˆˆˆ + + + +´´ " " " "   x x ú úU ú M M ú ú|×||&& x x Ú Ú Ú Ú0000 ® \\   ® ®qq Ä Ä n n À n n Ô Ô Ô Ô Ô Ô‚‚VVV ü ü ü ü ü++Ø ~++++ © © üVVVVV R R © ©VV­ R­­­­ZZb6Ìb­Ø ~++ ~ ~++; á Ž Ž å å’’;;èè å?’’èèèCKðèè Ï Ï|||| "| Ï Ï Ï Ï Ï Ï " "QQ ¤ ¤QQ ¤ ¤ "| Ï Ï&&€€ØØ++‚‚//^^^AAAA ê êEEHH››îîAA ž ž¦K ž žKK õ õ õ õ õ õ õ õ6666 2Œ ß ß6666666ÓÓÓÓ-âÛ& M M¨ M ú ú ú ú "|))))|| ú ú ú ú M M ú ú M¨¨¨þþQQ&&&& x x Ë&; á;; å å å å á;;–;; Ž Ž‡‡ Ú4‡â4é44 Ú‡‡\¶‚w X X\\\  « n n Ä Ä Ä Ä B B  ccÚ ,,ÝÝÝݲ²g,Õk¶\™™ ë ë ë ë™™™™™™B²XXXXXXX ªXXX²óó FFF ëF À À À À À ÀmmmmÈm À À iÄ®®® T ª ª ª ªƒƒ Ö Ö Ö Ö Ö07777777777 Š ŠŽŽŽŽ µ µ µ µ µ µbbŽŽŽŽ7’ääÍÍzzwÉÉGGGG ñ ñ ñ ñ ° ° ° °]]]]ßß22ˆˆˆˆ + + + +´´ " " Ï Ï x x xÓ¨¨ M ú ú¨¨ Ï Ï|| xÓ x x Ú Ú Ú Ú ƒÞ00  ® ® ® ® ® ® À n n Ä Ä   À À‚ ' Ô Ô Ô Ô Ô/ © ©VV üV © © ~ØØ ~++ ~ØVV © © © © © ©­ R R R © © üV­­bbÔĵZ++++++ØØè Ž Žè’’ å åèè;;’’’’èèèCððèè|×) Ï Ï Ï|||||| Ï Ï Ï ÏQQ ¤ ¤ ¤ ¤ ¤ ¤ Ï)||ÓÓÓ xØØ++‚‚/‰fVVVV±AAAA——EŸýX«ö›› “ “KK ž žK¦KK õ õ õ õ õ õ õ õ6666 ß ßŒŒ ‰ ‰ ‰ ‰ ‰ ‰ã>€&€€--ÓÓ ú ú ú ú ú ú ú ú|ׄ)))|| ú ú ú ú ú ú ú ú ú ú¨¨QQþ ¤&&&&&&&& Ž Ž;; å å å å Ž Žè Ž á; Ž Ž Ú Ú‡‡4444‡‡4 Ú‡ - Ú Ú ® ¶º`\\\  «²² Ä Ä   ï ï ï ïJJ¶¶¶¶Ú  Ò,0‹ååº_ºok¶\™™ ë ë ë ë ë ë ëFF ë •ïïï²XXXXXXXXXXXX²óóóóFF ë ëmmmm À Àmm À À À Àmm® T T TXXXX Ö Öƒƒƒƒ Ö Ö Šä77ääääää77; ᎎbb µ µbb á;ŽŽääää  ÍÍww$ÉGGGG D D ñ ñ ° ° ° ° ° +]]22ß߈ˆ .ˆ + + + +´´ " " Ï Ï x x xÓ]¨ M ú ú¨¨ Ï Ï||Ó x x x Ú Ú Ú Ú ƒÞ00  ® ® ® ® ® ® À n n Ä Ä  ‚ ' Ô Ô Ô Ô Ô/ © ©VV üV © © ~ØØ ~++ ~ØVV © © © © © ©­ R R R © © üV­­­b&q¼µZ++++ààè Ž Žè’’ å åèè;;’’’’èèèC––èè×|) Ï Ï Ï|||||| Ï Ï))QQ ¤ ¤ ¤ ¤þþ) Ï||Óˆˆ-ØØ++ÜÜ/‰u*À±VVV±AAAA——EŸg$–%CoP›îîKKùùK¦KK õ õ õ õ õ õ õ õ6666 ß ß 2 2 ‰ ‰ ‰ ‰ ‰ ‰ã>€&&&ÓÓÓÓ ú ú ú ú ú ú ú ú|×9“9„×× ú ú ú ú ú ú ú ú ú ú¨¨QQþ ¤&&&&&&&& Ž Ž;; å å å åèèè Ž á;èè44‡‡4444‡‡4 Ú‡ - Ú Ú ® \¶`\\\ `²² Ä Ä   ï ï ï ïJJ\\\\ Ú,‡‹š¹nÙ__¶\\™™ ë ë ë ë ë ë ëFF ë •ïïïX ý ý ýXXXXXX²²² N   ë ëmmmm À Àmm À Àmm® T T TXXXX Ö Öƒƒƒƒ Ö Ö Šä77ääääää77; ᎎbb µ µbb á;ŽŽääää  ÍÍÑÑ$ÉGGGGžž ñ ñ ° ° ° ° ° +]]22ß߈ˆˆã + + + +QQQQ ú ú ú ú€€ x x Ë& x x Ï Ï Ï Ï| " " " ® ® ® ® ® ®   X X ï • ï ï ï ï ï ï Ä Ä Ä Äu R R R­ Ô Ô‚‚ ~Ø++VV ©VVV±­­ R R Ô Ô ' ' Ð+ ~ ~ Ô Ô Ô Ô‚‚/>i*—Õ‰/‚‚ Ô Ô//3Ø……gg ¹½½½ c gg c c½½jjÓÓÓÓÓ x&&|||| x x&& x x&&&&ÓÓÓÓÓÓÓ—Ÿ ©VVZZ3Ø++ ~ØA›AAîîHý"Ž2Ì2!á«›îî Ê$$ Ê Ê$ Ê Ê    ww Ê ÊŒŒ ß ß ß ßŒŒ ´ ´aa ] ]¸¸ ú ú ú ú ¤þQQ Ï Ï||||||¨·1"õ —³þ ú úU úQQ ¤ ¤ ¤ ¤Q«þþQQ Ï Ï||&& xÓÁggg c c;;è Ž Ž Žèè44‡‡00ÞÞ  \\ Ú4‡‡ââ Ú Ú X² X X²² ™ ™ ™ ™ ì ì ì ìóóFFJJ X X,,Ú4íÁ.ÿ0Y!vG‹‹‡‡ÚÚÄÄÄÄ iÄ i iÄÄÄÄ Ö Ö Ö Ö Ö ÖƒƒXXXX_º~"#h ³:Ð ë ë™™BBBBÄÄÄÄBBBB • •BBXX ª ªXX ª ª,,,,,‡,, µ µ bbbbb µ µ    7777 á á á;;; á á Šä77ÉÉ$$www oÉÉÉssssŒŒ2266ˆˆ´´´ Y´´´´´´ +eQQQQ ú ú ú ú&& x x Ë& x x Ï Ï Ï Ï| " " " ® ® ® ® ® ®   « « X X ï • ï ï ï ï ï ï Ä Ä Ä Äuuu R R R­ Ô Ô 'ÜØ ~++VV ©VVV±b­­­ Ô Ô ' ' Ð+ ~ ~ Ô Ô Ô Ô‚‚/>i*—"x•‰/‚‚////Ø ~++gg ¹½½½ c gg c c½½jjÓÓÓÓÓ x&&|||| x x&& x x&&&&ÓÓÓÓÓÓÓâê^VVZZ­­ØØØ ~++ ~ØA›AAîîî£&ž*,«›îî Ê$$ Ê Ê$ Ê Ê    ww Ê ÊŒŒ ß ß::ŒŒ ´ ´aa ] ]¸¸ ú ú ú úþ ¤QQ Ï Ï||||||Ç+4Ž3Š'[ÃYUUU úQQþþþþ«³³Q Ï Ï " "&& xÓÁggg c c;;è Ž Ž Ž Ž Ž Ú Ú‡‡00ÞÞ  \\ Ú4‡‡‡‡ Ú Ú X² X X X X ™ ™ ™ ™ ì ì ì ì ™ ™FF ï ï²²,,Ú4’ 0Y4i(:¢‹‹‡‡ÚÚÄÄÄÄ iÄÄÄÄÄÄÄ00 Ö Ö00ƒƒXXXX_É$­3¦53¦'xßu ë ë™™BBBBÄÄÄÄBBBB • •BBXXXX ª ª,,,,,‡,,b  µ µbbbb µ µ    7777 á á á;;; á á Šä77ÉÉÉÉw oÉÉÉssss2222 Û Ûˆˆ´´´ Y Y Y´´´´ +e ¤ ¤ ¤ ¤ ú ú ú ú x x x x&&Ó x Ï Ï Ï Ï| " Ï Ï ® ® ® ®\    X X X X B B ï ï ï ï ï ï Ä Ä Ä ÄÈÈ n n R R‚ ' ' ' ~ ~ ~ ~VVVVVVV ¼­/ Ô Ô Ô ~ ~ ~ ~ Ô Ô Ô Ô//‚7÷Ü‚‚‚/‰‰/Ø ~ Ð…ggggjj½ c ¹ ¹ ¹ ¹½½jjjÁÁn&&ÓÓ&&ÓÓ Ï Ï) Ï&&ÓÓ&&ÓÓÓÓÓÓÓÓÓÓÓÓ--±VVV­­­­…+++++++AA “ “îî››«ÂX£îî “ww$ Êww Ê Ê sÍ  Ê Êww ß ß ß ßŒŒ ß ßaaaa    M M ú úQQQQ|| Ï Ï Ï Ï|ׯ)/Ñ6•4ä'[hY¨¨¨¨þþQ«þþ«pÒÃQ Ï Ï Ï ÏÓ x&€gg ¹ ¹ c c;;;; Ž Ž;; Ú Ú Ú Ú00 ƒ ƒ\\ ® ® X²²²‡‡‡‡‡‡‡‡ X² « « ìFF ì ™ ™ ™ ™ ™ ™ ìF B ï ï²²,,Ú48ü É$ر’8݇áÚÚÄÄÄÄqqÄÄqqÈÈ0 Ö (ƒƒƒƒƒXXXX_,.Ô7¶97*Ú”ÐÈm > > ë ëBBBB iÄÄÄÄÄÄÄïïï •BBBB ª ªXX,,,,ÚÚ,,bb µ µ µ µ µ µbb    77ä Š á á; á á á á á7’ääÉÉÉ o oÉwss Å Å … …22ˆˆˆˆ´´aa´´´´ + + ¤ ¤ ¤ ¤ ú ú ú ú x x x x&&Ó x Ï Ï Ï Ï|× Ï Ï ® ® ® ®\    X X X X B B ï ï ï ï ï ï Ä Ä Ä ÄÈÈ n n R R‚ ' ' ' ~ ~ ~ ~VVVVVVVV­/ Ô Ô Ô ~ ~ ~ ~ Ô Ô Ô Ô//‚‚3333‚ '‚‚ Ô/‰/Ø ~++gggg½ c ¹ ¹ ¹ ¹½½ µjjjjÁÁn€€ÓÓ€€ÓÓ))) Ï&&ÓÓ&&ÓÓÓÓ--ÓÓÓÓÓÓÓÓV±VV­­­­+ Ð++++++AA “ “îî››››HHîîî “ww Ê$ww Ê ÊÍ s  Ê Êww ß ß::çç ß ßaa      ¨¨ ú úQQQQ|| Ï Ï Ï Ï|ׯ¿8'²(¶âþ¨¨¨¨ ¤ ¤ öQþþ«p‡xQ Ï Ï Ï ÏÓ x Ë&gg ¹ ¹ c c;;;; Ž Ž;; Ú Ú Ú Ú00 ƒ ƒ\\ ® ® X²  ‡‡‡‡‡‡‡‡ X²F ìF ì ™ ™ ™ ™ ™ ™ ìF B ï ï X X,,Ú4Ý8@š’’’8‡,ÚÚÄÄÄÄÄÄqqmm0 Ö (ƒƒƒƒƒXXXX_w&µ56[5®):uÈm > > ë ëBBBB iÄÄÄÄÄJJï •BB ª ªXX,,,,ÚÚ,,bb µ µ µ µ µ µbb    77 Šä á á; á á á á á7’ääÉÉÉ oÉ owss  … …22ˆˆˆˆ´´aa´´´´ ° ° ö ö ö ö ¤ ¤ ¤ ¤ xÓ&& Ï Ï| " Ï Ï Ï Ï x x x x X X X X X X X X\\ ® ® B B ï ï ™ ™F ì n n n n Äqq­ R © © © ©++ # ~ ~ ~ ~ ~VV­ R R­±±VV­­ Ô Ô‚ ' Ô Ô‚‚++ ~Ø++++ÜÜ‚‚++++‚‚‚‚‚‚‚‚ ¹ ¹ggg ¹ ¹ ¹ ¹ ¹ ¹½½ c c c cggn½Åj))||))×1Œ1×|&&&&|| Ï))„9“××||||||VVVV Ô Ô '‚++++ =—EEîîHîEE——AAAAwwwwww$ Êww Ê ÊÍÍÍ sŒŒ::66 ‰ ‰aa ´ ´    þþ ¤ ¤ ¤þ ¤ ¤&&&&&&&&«hxp»«QUU¨QQ öQ ú ú¨]·¨ M|| Ï Ï Ï Ï Ï Ï ¹ ¹ ¹ ¹ gg Ž Žèè;;;; Ú Ú Ú Ú00 ƒ ƒ ® ®\¶000‹4 Ú Ú Ú²²² X B B B B B B ï ï ™ ™óó B ï ï X X X X Ö Ö00‹‹Ý8<ñé4ÚÚ,,mmmÈ ¼ i i ÀmmÈÈ0 Öƒƒ,,ÚÚ\\®®\\¾Ý$Ã(Ò$Ô*u ë ë ë ë ë ë ë ëmmmm*¬÷ïïJ¤_XXƒƒƒƒƒƒƒƒbbbb µ µbbbbbbf ¹¹Ž 3 á á7777 á ᎎäää Šssss  Å Åssss    ˆˆ Û Û2222]] + + + + + +aa´´´´ ö ö ö ö ¤ ¤ ¤ ¤ xÓ&&))| " Ï Ï Ï Ï x x x x X X X X X X X X\\ ® ® B B ï ï ™ ™ ìF n n n n Äqq­ R © © © ©++Ø ~ØØ ~ ~VV­ R R­VVVV­­ Ô Ô‚ ' Ô Ô‚‚++ ~Ø++ РЂ‚‚‚++++‚‚‚‚‚‚‚‚ ¹ ¹ggg ¹ ¹ ¹ ¹ ¹ ¹½½½½½½ggnrÅj))||))Œ›«›1×&&&&|| Ï)„ÞýXŒ×||||||VVVV Ô Ô '‚++++—òEEîîî “EE——AAAAwwwwÑÑ$ Êww Ê Ê s s sÍŒŒ ß ß66 ‰ ‰aa ´ ´    þþ ¤ ¤þ ¤ ¤ ¤&&&&&&&&Q«Y³«««Q ú ú¨QQ öQ ú ú¨¨¨¨¨ M|| Ï Ï Ï Ï)) ¹ ¹ ¹ ¹gggg Ž Ž Ž Ž;;;; Ú Ú Ú Ú00 ƒ ƒ ® ®\¶000‹4 Ú Ú Ú²²² X B B B B B B ï ï ™ ™ ™ ™ B ï ï X X X X Ö Ö0000ƒÝ<ñé4ÚÚ,,mmmÈ ¼ i i Àmmmm Ö0ƒƒ,,ÚÚ\\®®\\ ¾ß:ßÐuu ë ë ë ë ë ë ë ë  mmu÷÷ïïRio_XXƒƒƒƒƒƒƒƒbbbb µ µbbbbbbf ¹¹Ž 3 á á7777 á ᎎ??ä Šssss  Å Åssss    ˆˆ662222]] + + + + + +aa´´´´ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤&&&&)„ Ï Ï Ï Ï Ï Ï&&&& X X X X X X\\\  ï • • • ™ ™ ™ ™ n n n n Ä Ä Ä Ä © © © ©+++ Ð++++ © © ©­ R © © ©­­ R R‚‚ Ô Ô‚‚ Ô Ô++++++ Ð Ð Ô Ô Ô ÔØØ++‚‚‚‚/ Ô Ô/ ¹ ¹gggggg ¹ ¹ ¹ ¹½½ÁÁr××))×1æ«gH„)&&Ó x||||×1£ýŒ|| " Ï Ï Ï Ï­ RVVVV Ô Ô Ô Ô ~ ~ ~ ~—— ê ê “îAA—— ê êAAAA Ê Ê Ê$$$ Ê Ê Ê Ê    ß ß ß ßã ‰ ‰ ‰ ´ ´aa¸¸  ¤ ¤QQþ ¤ ¤ ¤ x x&&&& xÓQQQQQQQQ ú ú M M ¤ ¤ ¤þU ú M M ú ú M M Ï Ï " " Ï Ï×|ggggggg á; Ž Ž;;;; Ú Ú Ú ÚÞ ƒ ƒ ƒ ® ® \ ƒ ƒ00 - -‡‡`²²²²` B ï ï ï ï ™ ™FF B B B B X² (ƒ Ö Öƒƒ00é4Ú,,,‡mm i immmm À Àƒƒƒƒ   Ú ®®®\\"""Èmm ë ë™ > > > > > À À ÀmmmmïïïïJ$—(§† ®®®®ƒƒƒƒ Ö Öƒƒ µ µ µ µ µ µ µ µbb µ¹¹ f á á á á Š Š Š Š á á;;7777 Å ss Å Å Å Åssss  Ísˆˆˆˆ2222 ° °]] + +¸¸´´´´ ¤ ¤ ¤ ¤þþþþ€€€€„“Þ) Ï Ï Ï Ï&&&& X X X X²²\\\  ï • • • ™ ™ ™ ™ n n n n Ä Ä Ä Ä © © © ©+++ Ð Ð Ð++ © © ©­ R © © ©­­­­ ' ' Ô Ô‚‚ Ô Ô++++++++ Ô Ô// ~ ~++‚‚‚‚/ Ô Ô/ ¹ ¹gggggg ¹ ¹ ¹ ¹jj½½jjnnÁÁrrr11„„×1Œæî9„)&& xÓ|||||ׄÞ×|| " Ï Ï Ï Ï­ RVVVV Ô Ô Ô Ô ~ ~ ~ ~—— ê ê “îAA—— ê êAAAA Ê Ê$ÙŽŽÙ$$ Ê Ê    ß ß ß ß ‰ã ‰ ‰ ´ ´aa ] ]  þþQQþ ¤ ¤ ¤ x x Ë Ë&& xÓQQQQQQ ö ö ú ú M M ¤ ¤ ¤þU ú M M ú ú M M Ï Ï " " Ï Ï "|ggggggg ;– Ž Ž;;;; Ú Ú Ú ÚÞ ƒ ƒ ƒ ® ® \ ƒ ƒ00‡‡‡‡`²²  ` B ï ï ï ï ™ ™FF B B B B X² (ƒ Ö Öƒƒ Ö Ö44Ú,,,‡mmÄÄmmmm À Àƒƒƒƒ   Úc ®®\\mmÈmmm ë ë™ > > > > > À À ÀmmmmïïïïJYÓ!↠®®®®ƒƒƒƒ Ö Ö ( ( µ µ µ µ µ µbb µ¹¹ f á á á á Š Š Š Š á á á á7777 Åss Å Å Å Åssss  Ísˆˆˆˆ2222 ° °]] + +]]´´´´´´ ¤ ¤ ¤ ¤QQþþ?šššø­øèggg  ™ ™ ™ ™F ìFFqq n n ƒ ƒ ƒ ƒ000000 ƒÞ ƒ ƒ00 Ô Ô‚‚ ~ ~++ Ô Ô z z ' ' Ô Ô+ Ð ~ ~ Ô Ô Ô Ô R R R RVVVV © © © © © © üV++ ~ ~++++ ê ê—— ê ê——————E ê—— ¤ ¤ ¤þ¨¨U úQQQQ¨¨¨¨UU¨¨¨¨UUYY``»³«YY``·]¨QQ ¤þ¨¨¨¨QQQQÓÓÓ x&& x xî “ “ “ “ “ “ “llll ¿ ¿ ¿ ¿ ©VVVVVV­­ © ©VV ß ßçA]#1 |¨”:Œ 266 ‰ ‰ ‰ ‰6 Û ‰ ‰ ‰ ‰  ] ] ´aa½ c c c Ž Ž á á;;;;QQQQQQ ¤ ¤ Ï Ï Ï Ï xÓ&& Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï| "QQQQ ú ú ú ú ú úU ú ú ú M M ™ ™ ìF ï ï B Bqq Ä Ä q   ƒ ƒ0044‡‡ Ú Ú4éùL<² X X X`` ® \  ƒ ƒ ƒ ƒ i immuummmmmmmmBB •ïïïïï™™™™ ë ë™™ïïïïBBïïÄÄqmm ÀBBBB • • • •      ÚÚ  ®®²²ÉNFFF ë ë ëmmmm À À m77777777ŽŽ á ᎎ á;ÏÏ"" x x ö ö ö öMMMM2222ßß2 × … …ßßßßßßwwÉÉÉÉ   Å ñ ñ ñ ñžž ¤ ¤ ¤ ¤QQþþô¹^ôCèggg  ™ ™ ™ ™F ìFF Ä Äqq n n ƒ ƒ ƒ ƒ000000 ƒÞÞÞ00 Ô Ô‚‚ ~ ~++ Ô Ô Ô Ô ' ' Ô Ô+ Ð ~ ~ Ô Ô// R R R RVVVV © © © © © ©V ü++ ~ ~++++ ê ê—— ê ê——————E ê—— ¤ ¤ ¤þ¨¨U úQQQQUU¨¨¨¨UUYY`»h«³³]¨QQ ¤þ¨¨¨¨QQQQÓÓÓ x&& x xî “ “ “ “ “ “ “llll ¿ ¿ ¿ ¿ O ©VVVVVV­­ © ©VV::çA!Ö!Ö”:çŒ66 ‰ ‰ ‰ ‰6 Û ‰ ‰ ‰ ‰  ¸¸ ´aa½ c c c Ž Ž;;;;;;QQQQQQ ¤ ¤ Ï Ï Ï Ï xÓ&& Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï| " ö«QQ ú ú ú úUUU ú ú ú M M ™ ™ ìF ï ïqq Ä Ä q   ƒ ƒ00 Ú Ú‡‡ Ú Ú4DS¶ñ``² X X X ® \  ƒ ƒ ƒ ƒ i immmmmmmmmmBB •ïïï • •™™™™ ë ë™™ • • • •BBïïÄÄqmm ÀBBBB • • • •      ÚÚ®®®®²²__NNFFF ë ë ëmmmm À À m77777777ŽŽ á ᎎ á;ÏÏ""xÓx  ö ö ö öMMMMŒŒ22ßß2 × … …ßßßßßßwwÉÉÉÉ Å Å Å ñ ñ ñ ñžžQQ ¤ ¤QQþ³f&ïuGð–;;gg ¹ ¹ c cFFFF ™ ™FF Ä Ä Ä Ä n n00ÞÞ ƒ ƒ ƒ ƒ00ÞÞå‹ÞÞ‚‚ Ô Ô ~ ~++ Ô Ô‚‚ Ô Ô ' ' ~ ~ ~ ~//ä‰Z © © © © © © © ©V ü Ð+++ØØ++ ê ê—— =— ê ê ê ê ê ê———— ¤ ¤ ¤ ¤¨¨¯ úQQQQU¯UUUU úUUUY³³hÃʳ³³³YY³Y¨QQ ¤þ¨¨¨¨QQQQ&€Ó x&& x xAA “ “ “ “ “ “llll ¿ ¿ ¿ ¿ © ©VVV±­­ ©:::”󨯠A猌66 ‰ ‰66666666    aaaa c c;;è Ž Ž Ž;;QQQQ ¤ ¤QQ||||&&ÓÓ Ï Ï " " Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï ÏQ«QQ¨¨ úU¨¨¨¨ ú ú M M ™ ™ ™ ™ ïJÌÌ Ä Ä     Ö0Þ ƒ Ú Ú Ú Ú‡‡4ù¶ž²² X X X X \ ®0000ÄÄmmmm À Àmm À ÀmmmmBBBBBB • •™™ ë ë > > ë ë • • • •BBïï ÀBBBBBBBB,,Ú     ®®²²²²F óó™™ > > À Àmm   mä Š7777ää á á á áŽŽŽŽ"" Ç Ç Ë% Ë Ë ö ö ö öMMMMŒŒ2222 … … …ß222ŒŒŒwwÉÉÉÉ oÉ Å Åss ñ ñž D ñK ö ö ¤ ¤QQYYüf¡–;;;gg ¹ ¹½½FFFF ™ ™FF Ä Ä Ä Ä n n00 ƒ ƒ ƒ ƒ ƒ ƒ00Þ“ªí8‚‚ Ô Ô ~ ~++ Ô Ô‚‚ z z‚‚ ~ ~ ~ ~/ä¨NµZ © © © © © © © © üV+ Ð++ØØ Ð Ð ê ê———ò ê ê ê ê ê ê————þþ ¤ ¤¨¨ ú úQQQQ úUUUUU úUUUY³ÃÒ —"žh³³YY³Y¨QQ ¤þ¨¨¨¨QQQQ€Û-Ó&& x xAA “ “ “ “ “ “llll ¿ ¿ ¿ ¿ © ©VVV±­­ © ß ß ß:>>Eë猌Œ66 ‰ ‰66666666    aaaa c c;;è Žèè;;QQQQ ¤ ¤QQ||||€5ˆÓ Ï Ï|| Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï Ï öQQQ¨¨ úU¨¨¨¨ ú ú M M ™ ™ ™ ™ ïJÌÌ Ä Äqq   Ö0Þ ƒ Ú Ú Ú Ú‡‡4ñ<4²² X X X X \ ®0000ÄÄmmmm À ÀmmmmmmBBBBBB • • > > ë ë > > ë ë • • • •BBïïqqqq À À ÀBBBBBBBB,,Ú     ®®²²²²F óó™™™™mmmm mä Š7777 Š Š á á;;ŽŽŽŽ""""% Ë Ë Ë ö ö ö öMMMM222222ßßß …22ŒçœQ†ÑÉÉÉÉ oÉ  ss ñ ñž D ñK \ No newline at end of file diff --git a/GUI/xephem/fits/horsehead.fts b/GUI/xephem/fits/horsehead.fts new file mode 100644 index 0000000..5976072 --- /dev/null +++ b/GUI/xephem/fits/horsehead.fts @@ -0,0 +1,1147 @@ +SIMPLE = T /FITS header BITPIX = 16 /No.Bits per pixel NAXIS = 2 /No.dimensions NAXIS1 = 530 /Length X axis NAXIS2 = 530 /Length Y axis DATE = '31/03/97 ' /Date of FITS file creation ORIGIN = 'CASB -- STScI ' /Origin of FITS image PLTLABEL= 'J 8970 ' /Observatory plate label PLATEID = '0084 ' /GSSS Plate ID REGION = 'S840 ' /GSSS Region Name DATE-OBS= '28/12/83 ' /UT date of Observation UT = '13:44:00.00 ' /UT time of observation EPOCH = 1.9839906005859E+03 /Epoch of plate PLTRAH = 5 /Plate center RA PLTRAM = 42 / PLTRAS = 3.3759050000000E+01 / PLTDECSN= '+ ' /Plate center Dec PLTDECD = 0 / PLTDECM = 1 / PLTDECS = 2.1784400000000E+01 / EQUINOX = 2.0000000000000E+03 /Julian Reference frame equinox EXPOSURE= 5.5000000000000E+01 /Exposure time minutes BANDPASS= 0 /GSSS Bandpass code PLTGRADE= 1 /Plate grade PLTSCALE= 6.7200000000000E+01 /Plate Scale arcsec per mm SITELAT = '-31:16:24.00 ' /Latitude of Observatory SITELONG= '+149:03:42.00 ' /Longitude of Observatory TELESCOP= 'UK Schmidt (new optics)' /Telescope where plate taken CNPIX1 = 7411 /X corner (pixels) CNPIX2 = 1608 /Y corner DATATYPE= 'INTEGER*2 ' /Type of Data SCANIMG = 'S840_0084_00_00.PIM' /Name of original scan SCANNUM = 0 /Identifies scan of the plate DCHOPPED= F /Image repaired for chopping effects DSHEARED= F /Image repaired for shearing effects DSCNDNUM= 0 /Identifies descendant of plate scan image XPIXELSZ= 2.5284450000000E+01 /X pixel size microns YPIXELSZ= 2.5284450000000E+01 /Y pixel size microns PPO1 = 0.0000000000000E+00 /Orientation Coefficients PPO2 = 0.0000000000000E+00 / PPO3 = 1.7734687177300E+05 / PPO4 = 0.0000000000000E+00 / PPO5 = 0.0000000000000E+00 / PPO6 = 1.7795215680835E+05 / AMDX1 = 6.7226462814791E+01 /Plate solution x coefficients AMDX2 = 9.1120228561276E-02 / AMDX3 = -6.4069323085576E-01 / AMDX4 = 1.2742533425126E-05 / AMDX5 = -2.2930356163587E-05 / AMDX6 = -2.5304875971292E-05 / AMDX7 = 0.0000000000000E+00 / AMDX8 = 2.1051616068876E-06 / AMDX9 = -3.4584363973325E-07 / AMDX10 = 2.1628999586746E-06 / AMDX11 = -3.7444764759456E-07 / AMDX12 = 0.0000000000000E+00 / AMDX13 = 0.0000000000000E+00 / AMDX14 = 0.0000000000000E+00 / AMDX15 = 0.0000000000000E+00 / AMDX16 = 0.0000000000000E+00 / AMDX17 = 0.0000000000000E+00 / AMDX18 = 0.0000000000000E+00 / AMDX19 = 0.0000000000000E+00 / AMDX20 = 0.0000000000000E+00 / AMDY1 = 6.7230609431846E+01 /Plate solution y coefficients AMDY2 = -8.5707413675544E-02 / AMDY3 = -1.2651396526572E+00 / AMDY4 = 2.5948411441379E-05 / AMDY5 = 5.1300072033966E-06 / AMDY6 = 1.5539592690237E-06 / AMDY7 = 0.0000000000000E+00 / AMDY8 = 2.0952474898531E-06 / AMDY9 = 1.7660328938050E-07 / AMDY10 = 2.4242667281170E-06 / AMDY11 = -3.0861714951145E-08 / AMDY12 = 0.0000000000000E+00 / AMDY13 = 0.0000000000000E+00 / AMDY14 = 0.0000000000000E+00 / AMDY15 = 0.0000000000000E+00 / AMDY16 = 0.0000000000000E+00 / AMDY17 = 0.0000000000000E+00 / AMDY18 = 0.0000000000000E+00 / AMDY19 = 0.0000000000000E+00 / AMDY20 = 0.0000000000000E+00 / Based on photographic data obtained using The UK Schmidt Telescope. The UK Schmidt Telescope was operated by the Royal Observatory Edinburgh, with funding from the UK Science and Engineering Research Council, until 1988 June, and thereafter by the Anglo-Australian Observatory. Original plate material is copyright (c) the Royal Observatory Edinburgh and the Anglo-Australian Observatory. The plates were processed into the present compressed digital form with their permission. The Digitized Sky Survey was produced at the Space Telescope Science Institute under US Government grant NAG W-2166. Investigators using these scans are requested to include the above acknowledgements in any publications. Copyright (c) 1993, 1994, Association of Universities for Research in Astronomy, Inc. All rights reserved. DATAMAX = 18778 /Maximum data value DATAMIN = 3133 /Minimum data value OBJECT = 'data ' /Object ID OBJCTRA = '05 41 17.851 ' /Object Right Ascension (J2000) OBJCTDEC= '-02 24 56.38 ' /Object Declination (J2000) OBJCTX = 7676.42 /Object X on plate (pixels) OBJCTY = 1873.31 /Object Y on plate (pixels) CRPIX1 = 265 CRPIX2 = 265 CRVAL1 = 85.32481286 CRVAL2 = -2.416042123 CROTA2 = 0 CROTA1 = 0 CDELT1 = -0.0004719764 CDELT2 = 0.0004719764 CTYPE1 = 'RA---TAN' CTYPE2 = 'DEC--TAN' END ¬AAkkÖÖ¬ÿÖ)¬Yww$ww$w$â⸠  â⸸¸¸¸¸âÎ{{Î9Œc({¤¤÷÷{!TTÐ×*}}}``66õõHH܉‰‰T**¿é<VÚ-/‚XXíší@v##vùù##ŸL##eeᎸee¸e¸ŽŽ00Z´Årr<fÑ~~Ñff¹fÑÑÑÑÑ~ûû<¸e;;ŽŽee¦ùÐ#ŽŽŽŽ‘>gJÍs‹1u"KøuuÏ| ”:cc""Kø¶c¥¥"Ïc¶à¶c……[[[[y&Oü©üüüÕ(ÿÿ(Õ{(““½j(ÕÿR‘人ggººººgº‘‘g …Ø……ÇðCyy¢ü €&OOé<ÀÀé–Àm– CÀmÀ´a77õõÌÌŠ7777 ä  +ØØØ ¯Umm–éøR¥R ÿR )!Ö"v!5ˆ" ^ ª ª#-!€Ó!€!€Ó#-#-"W ª >!ëh"Â"! t$9 ß !¶!€!€Ó!€#-!€"W$#³%`#³#³$Š"Ý%`""<"<##"<#é###³#³%`%`"q$%Ë"q!0"Ý!0ƒ""!0!0#H!›!›îƒ!0!0ƒMMÉ # # #M úîAj¬¬!0ƒƒ!0!0!0ƒ)ÖÖii  ' Ô í““@@@!à !Þ„Z­­Zׄ××­BB Y¬ƒÖÖƒ&7:SECT2’!ÐvÉ úM Ä Ä¬¬¬¬¸¸â5Év!ÐvMMMM¸^¸ 55â v #vv #Év #v # #vYAAÖÖ¬ÿƒÖÿ¬wÑ$ww$$w5 ¸  ââ  ¸¸eeâ!ÎÎ{æ9cÎ{¤¤÷÷ÎÎTT}*Ð}**³³‰‰õõõõ‰Ü‰‰T**l¿–é°Ú-‚Õ««@íí@v##vLLvvLù##eeŽ;e¸¸ee¸ŽŽ00ZZÅÅré<¹fÑ~Ñ$fff¹ÑÑÑÑ$ÑNNff<¸eáᎎee¦ùv#ŽŽŽŽggë˜ÁggJssÞÞ"ÏKø"|%00ë3(õ!j¶""ø¥ccc¶øøu"c:::¶c……®[®®[[&Ó$°)·!VOOOÕ(ÿÿÕ((Õ@@j(Õ¬ÿ‘人ggººººº ä人…ØØ2ÇCðyyOO&&üüé<ÀÀ<éÀm C–ÀmÀa 77õõ y yŠ7 ä ä7 ä  Ø+ØØ ¯ ¯ ¯ ¯mm C–¥¥¥R ÿR )|o É É É!5ˆ ^" ª$!€ÓÓ!€Ó!€ÓÓ ª"W >!ë"Â" tÇ!J!J ß$9#c!¶!€!€!€#-$Ú#-"W$%`#³%`%`$Šƒ"%`"<">Á˜>ggJÞÞ‹Þøøu"ø$Y3n@ÖD›:'H:""Kø:Ï|Ï|c¶::……Ø…Ø22…üü"-%‡!VOüOÕÕÿ¬ÕÕ¬ÿjj½ÿ¬ÕÕ‘ä  ºgggä‘‘ä‘‘ºg[Ø2ððÇ&&&&y&OO<é–é<–mÀé–mÀmÀÀŠ7aaõõÌa ä7 a !» ¯ ¯ ¯ ¯ØØ ¯mm C–Ï|||¥¥R¥Fóó!  ^ ^ ^" ª"W ª ª!€Ó ª"W"W ª"W ª!"Â!ë!ë t t t t!¶#c#c!¶!€#-#-#-$$$Ú$Ú$Š$Š$Š&7#³"$Š$Š$¿$¿#é"<##"<"<"#³"Ý"Ý$õ$õ!›#H#³#³" Yƒ!0!0!0 Ä"q¬ Y" YMM"§ ú!Ð #M î Y¬¬ÿÿ¬ƒƒƒƒ@““@Ô'Ô í@@“@@"š,¨0ó%8„ 1„ׄ„× 1­­lï•ÖÖÖƒÖÖÖ!0!Ð #ÉvÉvvÉ Ä!›Aƒƒÿ Y ¸¸M v!Ð#}-‹.b"§5â ¸  ¸¸ # # ú  M  ú ú ÉÉjYÅkAAYYƒ0Y¬ÖƒMMÊwM wwˆâ5âââââ< ¸ÎÎÎ{cc¶¶÷÷ÎΤ¤÷÷}*}**}TT‰‰‰‰¢›qËõõ‰Ü‰ÜTT–ééé-Ú-Ú//X«ÄŸLÉ#ùù#vv#ùLáá    ŽáᎎŽ00ZZÌ››f<<ûû¨ûâ<fÑѨ¨¨¨û¡ffff¸¸¸¸e¸¸e¦ùùùŽŽee>˜Á>>JÞÞ‹ÞKKÏ"ø'³=|GŠGõD›1V ”ÏÏøKàà:"Ï"Ï ¶à:……Ø…………Øü¢&&OüO¢ÕÕÿ¬(‚¬Yjj½ÿ¬ÕÕ䑺`gººº‘ä‘äää º[[ØØÇ&&ÓÓ&ÓOO<é–éééÀé–mÀÀÀÀÀŠ7´´õõÌ´ 7Ša´´"\!…+ ¯ ¯UÀÀ C–Ï|||RRR¥Fó! ó ^ ^" ^ý ª ª ªÓ& ª"W"W ª ª"W!" > > t#Î"!"!!¶ #c!¶!€#-!€!€ ª ª#-#-&7"Ý"Ý$Š%`#³$Š$Š$¿$¿"<#é##"<"<#³"$Š$Š#H#H$õ#H#³#³ Y""Ý!0"Ý"Ý Ä Ä Ä Y"#³" ú ú úM #v úMî Y¬ Y¬ Y¬ƒƒÖÖ@ í@ í ÔÔ @““@@@ í'¡&å„ׄ„ׄ„„„ZZÆ œBƒƒÖƒÖÖÖÖ #v #!Ðv #vÉjî”ÖÖ¬¬ ¸¸M É #!Ð+Þ,µ$Tâ5 ¸¸¸¸¸vv   MMM ú ú # # ÄäýP&ÓƒÖYYkîî¬ÿÖƒAAAAÅkƒÖ¬YÅÅ}}TT§T}*Hõõõ``³³¤÷{Î9æÚ-ÚÚE˜oÚÚÚÚ‡‡°°°]E˜E˜‰‰³`J11[‘‘gg‘>‘>gggg>‘>>V©%ûNN¨À!é<¨¨¨ûff<<KKÏÏc¶à3àÈ"KKXXííšíÄÄ@ííí¸e¸¸¸ eššíšqqÄqÏ"øøø$Y9LEH+?Ê(TFì™<¹é<é<éé¨U¨¨ ºääOO¢Og   y&O¢…2……mmÇ©üOü‘ägºmCC………2…Ø®®mmCCjj½j@“vvvv44ááì™™™ÛÛ±±...ÛˆÛˆÛ–éééU+Ø!!––U++aa   !»!»  ¯Ø+ØØ+Ø ¯Àm C–– C!! C C C– Ä Ä Ä Ä"q"q ÄÖƒ Y Y"Ý"Ý#³#³"q!›!›¬"#³#³!›#H!›!›"q Ä"q$$o$o#˜%E#-#-$"W"W$#-#-$Ú$Ú"W$%E#˜&ò%E%±%±#-#-!J"÷%{#Î"!"!!J!J!Ð!Ð!Ð!Ð!e!e#é"< ¸¸¸ #v #!Ð!!hh‘‘ > >"Â! >äÓ&&&ºº!=%%xx„„„ 1ïïÆÆ!! + +È!"Èu@@@ í". !Xþ¬ÿ¬ YÖƒ!0ƒ Y Y!0ƒÖƒ¬¬    â!e¸ Ĭ¬ƒ!0 !e!e úMMM Y Y Y Y¬¬ƒÖ”îAAjAAâäªý&ÓƒÖ¬¬kîîY¬ÖƒAAAAÅÅÖƒ¬YÅÅÅÅ}}TT§TÐ}Hõõõ``Q¤{Î9æÚ-ÚÚòEoÚÚ--ÚÚ]°˜ë˜E‰‰³`J11[‘‘gg‘>>‘gggg>ë>>©üÒÒûNûû¹é<ûUU¨fføøÏ϶ àà""øø«XXííGšÄÄšííí¸eee¸ ¸ešší@qqÄÏ"KKž¥&Ý2˜7i+®ó?ì™<ff<<<é<ééû¨¨¨ ºääOOO¢ººg &Ó¢O2………ÇO¢Oü‘ägºÇ–ðØØØ…Ø…Àððjj½j@“#Évváᎎ™F™™..WWÛÛÛ..ÛÛˆ–éééU+~mm––¨U++     !» a ¯Ø+ØØ+Ø ¯m!!ð C C!ð!À C C C– Ä Ä Ä"q Ä"q"q Ä!0ƒ Y Y"Ý"Ý#³#³"q"q!›!›¬"""!›#H#H#H%Ë$$"q$o$o#˜%E#-#-$"W$%±#-#-#-#-%±$%E#˜#˜%E%±%±#-#-"÷!J#Î"!"!"!!J!J!Ð!Ð!Ð!и¸#é"< ¸!e!e!Ð # #vhh!» > > > >!h > >Ó&ÓÓººã6%%%% 1 1„ 1ïï33]]ÈÈÈ@@“"š'5,<+f$²ÿ¬¬ Yƒ!0ƒÖÿ YƒÖ)Ö¬¬  ¸¸5⸠j¬¬ƒ!0 !e!e úMMM Y Y¬¬¬¬Ö)”îAAjîîâ»PPy&ƒ0Y¬ÅkkAAY¬ÿ¬AAkÅŃƒYYÅîî}ЧT*}}}ËHH‰6`ºþ¤{Îcc--EE°Ú-°°°°°ooEE‰Ü‰Üssss11Þ„‘‘>>g>ëg>>>>>‘>‘©©©ü$Ñû¨â<<NNÑÑf¹ââøKKøàà ¶""Kž‚/X«íšÄÄššÄÄšíšíŽŽŽŽŽŽŽŽÄqí@Äš@u"uuu"| )"voÂìì?ì<é<<éé¨U¨¨7777y&Óy   ºÓyü©2Ø®[ðCOüO¢ººääðCð®®ØØØØ[®ðð“@½æ@í@ óvvŽá ¸Fì™™..±±ÛÛWé–UØ+ C CÀmUU+Ø7Šaa7 ä77U"\+ØØØØØØØ––mm C C!ð–––!ð!ð Ä Ä Ä"q"q Äî!›#³¬ƒ!0!0ƒ"" Ä"q"q$"Ý$Š$Š"Ý$$$"q#H!›$$!ë#˜"Â$o$Ú$Ú$Ú$Ú#-$Ú$%±#-$Ú&‡$Ú%E!ë$o$o$"W#-#-"÷"÷"!"!!J!J"!"!#}#}!Ð #¸¸!e!e!e¸¸¸ úMMMhh!ë > >‘ >‘!»hhýýý"W㺠%%NN„ 1!ZB œï œàà + +ŸŸÈ““¼!Ã,<46J'5ƒƒÿ¬ƒƒ¬ÿR YÖ)|Öƒƒ ¸ââ ¸¸¸j Y¬ƒ!0 ¸¸¸  v #¬¬Öƒ Y¬¬¬AAA”Aîî!› ýý&Ó0ƒ¬YÅkk”îY¬ÿ¬î”kkŃƒYYÅAAÐ}§T}*×}qHH܉`º«QÎ!cc--EEooV‡Ú°]°°°°ooEE6‰6‰  ssÞÞ‹1‘‘>>gë>g>>>ä‘>>‘gÁ©©©ü$Ñû¨<ûûÑÑføKKøàààà¶cuužK‚/X«íšÄÄííšGšíá;ŽŽáᎎÄí@Äííu"uuu"u"ooÂììì™é<<éé<<<¨UUUääääy&&&ººgº&&O¢ØØ®[–CCCOüO¢ººääCðCð[[2Ø……®[ÇÇððí@½½“í@“ó vvá4 ¸™™™™±W.ˆ±±ÛÛ±ÀÀé–U+~––m!+Ø7Š  7 ä77 ¯ ¯U+ØØØØØ++––mm C C C C–– C C"q Ä Ä!›î Y¬!0"Ý"Ý!0"" Ä"q"q$"Ý$Š"Ý!0$$"q Ä#H!›"q%Ë!ë#˜$o&$Ú$Ú$Ú$Ú#-$Ú$%±&‡$Ú$Ú#-%E!ë"Â&%±$#-#-!J!J"!"!"÷"÷ t t ##}!Ð #!e!e¸##!e¸¸M ú ú úhh >‘ >!ë >‘hhhhýý ª ªã gº%%NN 1„Z­ œ œï œ33 + +ŸŸÈu@@i ".#Û'5".ƒƒÿ¬ƒƒ¬ÿÿ¬ƒÖ)ƒƒƒ ^ââ¸!e#¸ Ä Y¬ƒÖ ¸¸¸MMv #¬¬Ö)¬ Yÿ YîîA”î!›î!› ª»»hhAAAAAAkÅkƒ00ƒ¬ÿÿYÿ¬Y¬îAkkAAAî**}}¿léé```qq9æccoo°°°°°°-€VV‰‰`³[1ÞsÆð>>>ë©©ÒÒ©üÒ%ü©ÒÒÒg<<Ñ$$Ñ~Ѩû<éfÀKKøø\¶àøKu"  ¶¶ÄÄšíÄÄÄÄX««X/ÕáŽŽŽ¸ e¸qqííXXXX""u"uÈKø™™Âììì™+Ѩ¨Ñ~~Ñéé¨U¨¨ ººº º º&Ó&y¢õ&&Ø……ØððO¢yÓÓ&y&……………………ÇÇÇÇ22[[j““jÄ  vv ¸  FFoÂÛ.±..Wì™ ÉUUØ+ ¯++!…!…¨U y y¢õÌ yÌÌØ+Ø#2"\ ¯ ¯ ¯ØØ"\ ¯UØ!… ¯ ¯mmmmÖƒ!0ƒ Ä Ä Äj Ä Ä Ä#H!›!›$õ#³""Ý"Ý#³"$Š!0!›!›#H$õ%`#³"Ý$Š!€$Ú$$"Â"Â$o$o$o"Â%E#˜&‡&‡&‡$Ú%±$#-#-$Ú$Ú$$"! t"! t!¶!¶22 !e¸ # #M ú!Ð!Ð#} #¸¸ >‘‘‘ýýý ªÓ!€ ª ª >‘ > >º" g gx Òûûï œÆ 1„„ 1ÈÈ L!ùŸŸuu@@@@ ÔÔîîAAAîAAîîAAÿ¬)ƒ5⸠!e- 0z$¿ Y¬¬ÿ Äîîv #MM  MMî!›j”A Ä Ä"qAAîî #ª»»»îîîîÅkAAŃփ0Y¬¬¬RY¬ÿî›AAîA**Ð*¿éé³³``qq9æoo°°VVVV-€VV‰‰³[1ÞsÆJ>>‘>üü©VÒOü,,Òggg<<Ñ$Ñ~Ñ~¨ûé<ffKKøø¶¶àKžu"¶¶¶¶ÄÄ@íÄÄqXX««/ÕáŽŽŽ¸ee¸GGXXXX"""uu"KžììÂo™™?ì~~¨¨~ÑÑ~<<û¨UUº ggº  º&yÌyOH&&…2Ø…tO¢yÓ&yy&……22…………Ç!!!Œ2®j@@jj  vv ¸  FFoÂ.Û±..±ì™ÂoUU+~U++++¨U y y¢õÌÌÌ+Ø+!…"\UØØ"\"\"\ ¯UØ+!!m"ǃ!0ƒ!0 Ä Ä Ä Ä$"q"q#HAî#H" Y"Ý"Ý" Y"Ý"Ý!›!›!›#H#³"$Š&7#-#-$$$o$o$o$o&$o&ò%E$Ú$Ú$Ú&‡'^%±#-#-#-#-"W"W"! t"! t ß ß !e¸!Ð!ÐM ú!Ð!Ð!Ð!Ð  >‘ > > ª ªý ªÓ!€ ª ª >‘‘!ë g gºº Ò ÒNNï œÆ 1„„×ÈÈŸ LŸŸÈÈ í í@@ÔÔÔÔAAîîîAAAîîAAÿ¬)ƒ5â ¸!e- .Í#ÿ¬¬ YjAAvÉMM  MMAî ÄîAjj Ä Äîîîî #Óä‘‘>îAîîAîÖÖ00Y¬¬¬ÿY¬¬îAîAk§§*п¿¿‰‰‰‰HH9æ9æccoÂooÚÚ°---ÚVVVVÚÚ`³‰Ü„„11JJ>ëgg%ÒV©ü©©©©üÒ©©ggggffâ$Ñû¨~~~ѹ¹é<KøKøà¶¶uÈKø¶cààÄííÄqší//XÕ‚/‚Ž;e¸Ž;Ž;ÄššXX/ÜuuKK"Ï"u™Fì™Â¨¨¨¨¨¨~Ñ<<<<û¨~~äää‘ º‘‘yy¢OO¢OOØ…®[t${)‚"Ωü&&OOO¢…ØØ…22ØØCð!!)‚$æß µ[ÄÄj½“@@“vv    á‡o™™W.ÛWÛ.oÂF™UUUUØ+UUUUØ+++¢!O yõõÌÌUØØ!…ØØ+Ø+Ø!…Ø!… ¯U–––!ð¬ Y Y Y Äîî!›$õ$"q#Hîî!› Y Y"Ý"Ý Y Y"݃#H$õ$ Ä$Š!0$Š$Š$$$$%E&ò&$o&$o%E%E$Ú$Ú%±%±%±$#-#- ª"W"W$"÷!J"!"! !¶!¶!¶ "<#¸"§ úv!Ð ú úM"§¸¸¸¸"Âh!!"W"W ª"W!€Óýýhh > >"ê Ò Òûû œ œBï 1 1 1„ L L!ùŸòŸuu$G%ô%iQþ««”AîîAAƒ!0!0$Š$¿!e5 #é"<5¬ YƒƒA”Aî #vÉvÉv úMîAjjAAA!›!›!›îî #Óä‘‘>îAA›ÅÅ”AÖÖƒƒ¬YYYYY¬¬îAîAÅkk§§**¿l‰‰‰‰õõæ99æc½ooo]ÚÚ°---Ú°°ÚÚ`³Ü‰„„ÞÞJJë>ggÒü©ü©©©ü©ÒÒÒüüººffâ$Ñû¨ÑÑ$ѹé<KøøKà  ÈuKž ¶ààÄqííÄší‚‚X‚/Ü/;Že¸Ž;;èÄqšš‚/uuKKÏ""ÏÂÂì™?쨨UU¨¨~Ñ<<<<U¨Ñ+äää7ºg‘7Ì&O¢õ¢OOØ…®[${6ê@ø6ê$°OyyOOO¢…2Ø……………ðCt'Õ(@ß[[!q!qj@í“@vv    á‡o™™±ÛˆW.ÛÂoóFUU~+UU+Ø++!O¢ÌÌ¢¢ÌÌ ¯++!…ØØ!…Ø+!…Ø~+ ¯ ¯ ¯U C C––¬ Y Y Y Ä!›!›!›!›%Ë Ä!›!›î!›""!0!0""ƒƒ!›#H$$$Š$Š$Š$Š$$%±%±%E&ò&$o$o&#˜#˜$Ú$Ú$$%±$$Ú$Ú$"W$"W!J t t!¶#c#c#c"< !e!e úMv!Ð ú ú ú ú¸¸¸¸hh!»ýý"W$!€Óýýhh > >!=ã Ò Òûû œ œïB„„ 1!Þ L LŸŸŸòÈ!"%ô1¯42&Ê!X«!Xþ”AîîîîÖƒ"Ý0E.Í$¿ââ"<ââ5¬ YƒƒA”Aî #vv #v # úMjjîAj ÄîîAAîîîî #2ÇÇKžâ⸸Mú~Ñ00¬¬¬¬ƒÖƒƒYYîîAîY¬¬YÖƒYÿéé¿¿¿¿õHq‰‰‰Ü{Î{{÷÷{{oo˜EooooÂE˜ooòòE˜E˜˜˜T}*ððJJ%üü©©ü©ÞÞ1Þ1111111„„1[0ÝÝ0ƒ0ZƒÝƒƒZàà ¶žžKžàà  KKu"«X‚‚X/Üe¸¸¸##ùùLLùù#ЦùŽŽ;ŽÐ#L¦??..W™™ì™..<éé<Ñ~~~ffmé–…Ø…………®Ø…[[Ø22………22$9ØD½<\$Eäº     ððÇÇ[®2!Œß2[[$•!;áávÉ MÕ(‚ÕÿÿÕ(|ÏÏ|ÏÏ|Ï: ”!j½aaŠŠHõÌÌõõÌÌ¢!O¢õ+++Øm!mm  77 y y y"&!mmmm! C C!O!O¢¢¢¢Ì yMM ú ú # # ú úƒ!0#³ Y"q"q#H!›!e!e "!ë#³ Y" Y!›#H!›!›!Ð # # #¸!e#¸22!¶!¶!¶ ß2!J!J tÇZZ„ 1Æ"Iï„„ZZÆ œï!X!XÔÔ í@ii!"È!" L L!"!"ƒÖ)ÖÖ!0ƒƒ  â5ˆâ¸¸¬¬ƒƒÖÖ¬¬îAAîj!›AçA ÄMM # #vvvvv # #Év # # #M\ÇtÇÇ$ÊM    ¸kkY¬ƒÖîîîA”îîî›îÅ¿¿}*}}õHHH¤÷Î{Q¤ÎΘEoV°EEooE˜ooooE˜E˜§®TsÆðJJC%%ü©Ò%©üÆÆðÞÞÞ1ÞÞ‹111Þ1rrÝÝ0Ý´ÅÅ›î  u"øø"u"ȶ à‚/‚‚ÄÄË#%*ÐvÐÐ##ÐeeŽá¸;;ŽŽe¸#vÐÐì™oo..ìFoÂF™ÂÂUûÑ~<ÀfU¨~~CéC–ðð[®………………CCÇÇÇÇ&y&yää  CðÇÇ2…[®ððÇðMMM v#úM½jÄ“@@@|Ï¥øç:c:à:ççõõõH0Šaa´´a77´´~~++ÀÀ––¢õõ¢!»a!»  ¯ ¯ØØ ¯ y y y yaa   # # # # ú ú #vÿ Y!0ƒ#Hî Ä Ä!Ð!Ð!Ð #!e!e#$¿#}#}#}#} ú$T$T ú!¶%$9"Œ"!"!!J$¤"!#Î&Q'þ)@*í(j%%%$9%æ%{"!"!"!#-!€"W"W!h!ë >#³#³" Y#H!›îî #v ##}!e#!e 22 !¶ 2 ß!J!J"! t!J!J!­„ 1Æ œ œ„!Þ!!Æ"I œ«« í@  uuÈu L LuuƒÖÖƒÖ!0ƒƒ  â â⸸¬¬ƒƒÖÖ YÿAîA”jîî”î"q Ä ú v!Ð #É # #Év # #vÉvvMßžžžžwwww   ¸îîY¬¬ÅÅî›ÅÅÅAAAAééé–T}*õõHHõõ{{ÎÎ{({ÎooEE°°ÚÚòE˜˜˜˜ëEooÂo˜˜ooT§*×sÆÆssÆÒÒÒüü©üssÞÞ[ÞÞÞ1îHrÅZ´00î›ÅÅàccKKøKžø"u  ¶¶‚///Äq'U. #Zùv#ÐЦ¦ee;ŽŽŽ¸e¿ŽŽùL¦ùììýW.™™™ìUûû¨<<f<<¨U~+CCðCð®®……®®ÇÇ&yOOººääCð22[[ððððv#óFv Ð!§Mj@íj@í )|¥øc¶ccc¶c::Hõ¢õÝŠ´´ÝÝÝŠÝŠ77UUUmÀÀÀõõõ¢ ä7a ØØ ¯ ¯ ¯"\U¢¢ y ya a  ú"§"§ ú ú ú úMƒ!0""#H!›"q"q ú ú  ú!e!e## ú ú!Ð#}#}#}!Ð #!¶#c"Œ ß#Î#Î$¤"÷#Î#Î$¤+X3N/ô*(j%%%æ%æ%{"!"!"!$Ú!€!€!€!"Â#˜ >!0!0!0!0"q"qî!› úM ú ú ââ!¶\ ß ß ß ß ß ß!J t t!J t tZ!„!Þ"I œÆ!!ZZï œ!s«þ @@“@u!"!ùŸŸŸuuÖÖƒƒ¬¬ÖÖ   ¸5⸠ÖÖ Y¬)ƒ Y¬AA Äî”jj"q ÄîîjMó  úvÉÉ #vvMMvvM úv2žžžžÑwww e¸e››Y¬¬¬›îÅrÅÅAAîîééé<§T*}õõõ›õõ{{ÎÎÎ{{ÎooEE°°ÚÚE˜˜˜˜˜EEoëE§T*×sÆÆsÆsÒÒ%Ò©©ü©ss‹‹bµ111Þ››ÅrZZZ´ÝÝî›rr:c KKøKžžu"¶¶¶¶/‚‚‚Äq ¡#ûS¦Ð}##ùù;ŽŽŽe¸¿ŽŽù¦¦ùììWWÔÂÂììì?ÂÂUû¨UééffÀ<<¨U~ÑCCCððC[®®[……®®ÇððtÇððyÌ¢¢ºº77éð22[[ððCCÉvó ##!§Mj½@íj@í )|¥Rc#!jc::õHõHŠ7´´ŠŠŠ7Š7ŠŠUUUmÀÀÀõõ¢õ7 äa !…!…"\"\ ¯U¢¢ÌÌa  a ú"§ úMMM úM!0"Ý""!›#H Ä Ä"§"§ ú ú!e!e!e!e ú ú!Ð#}%*!Ð #v !¶$9"Œ#Î#Î$¤"÷#Î#Î"÷)«/ô/ô2x0Ë(j%%æ%æ"!"!#Î#Î#-#-!€!€!"Â!ë!ë!0!0ƒ"Ý"q"q!›îM ú ú ú â"<#c ß ß ß ß22ðÇÇ!J t t!Z 1 1 œïÆZZZZ œï!s«þÔÔ@@“@Èu L LŸŸÈȃƒ!0Ö Y YÖÖ   ¸ ⸠ÖÖÿ¬))¬ Yîî Ä"q!›A Äj ÄîîjMM  úvÉvvÉÉ ú ú # # úMv¨Ñ$¨ûrÅÅœIrrfff<éfWW..Wccc¶øøøKììÂW.¶¶""øøÝÝ0ÝIœrffÀrrïïZZÝ0~Ѩûû¨~~.Û33 ¶33 ¶Kžuu¶   ªªììÂo¶¶àà""uu####¸¸e¸XX////‚ÜqGíqqÐ#ùùŽŽáŽ¾¾èè××Skkè•••k¾¼i¼¼ååå8†ÙÙ†°]]]×*SS×××*ÊÊÊÊãã  ¡¡N¡$wôô××­­kkkkăƒƒƒeeââw$M ƒƒ00qÄAAƒ0ƒƒîîjYƒ0000݃0Y‘ëë˜ Ú Ú"‡-tÇ!! ¶¶¶))¾k_"f"f ¹ˆ55ˆyyPPýýPPÌyPPy&y&Õ(ÕÕ¼¼““¼¼“ @þ «Õ( +!· +!·"Ž"Ž á áòòŸŸÉ v!LŸ"<">ë˜"‡%á%á-!ttt¶c¶¶))SS¾¾¾²__ 5ˆˆ5yyPPPPPPy&PPy&y&(ÕÕÕ¼¼““¼¼æ“þ «Õ( +!·!· + á‡44ŸŸ!L!LÉ v!LŸ !e¸ úMM ú#H!›!›!›" Yƒƒ"<"< ú ú ú"§"< !e¸ ú"§!Ð!Ð#U#U#U!¨#Á#Á"ê"ê$a$a&å&å%£%£'P'P'#Á#Á#Á"" Ò$,!Þ 1 1!Þ"´!!Þ!Þ"®TT"® •è!l!l¿!l •"B"®!!! µ"“ æ { { { { E E E!ò˜˜o!ç!” ¾ ¾FFp   p !aaa‹‹ 8 8————ÀÀÀÀ  óóó±! ! ! óóÉ j½(( Õ((.=<|2n%!¬(("$ wÊÊ wÊôôkk!!))ÖÖ¼¼åå£PPPzû$~~ÑIIœIÅII<<<......Wª:øKKøÂÂWW:à"Ïøø´öœÅrf<<ééÅröIZ´~ÑÑ~¨U¨û.WW  \ ààà3KžKž3¶¶ªWìììì¶cààuu"uvÉLùŽáŽ;XXX‚/X«šGííšGÄvÐÐÐee;;••¾¾**k¾•BB•BBb¼¼ååi,ÙÙ3 + +3†***„ׄ„×wÊww6ã__NNô¡ô¡¡¡S}×B•••ăƒƒƒâ¸  M$w0ƒ¬ÄîAî›îYîîî›Y0ݬYYYYYë˜ oÂ"‡,•-l% ¥ø!!c!ßß))¾ç爈ˆˆ _ˆ5&&PýPöyy&y&&ýPPý¤QQþi¼““““¼þþ(( á"Ž + + +]44!L"ù%}#ПŸŸŸ !e¸ ú ú #!Ð"q!›!›!0"Ý!0!0"< !Ð!Ð!Ð#}!e!e"< "§"§"§ ú""#U#U$—$—"ê$—%8#‹%8%8$Í&z%£#ö#Á#Á$—$—$,"û!¨!Þ!Þ!!„!Þ!! *!×!!!l¿ • •èè!l#!! * * æ9!¼!¼¤¤Î {oo E!ò˜ E!!çççç ¾ ¾ ¾"k ó óFFF ó p 8!å‹‹a´´a mÀê——êÉɇ 4 4Ú!vÉÉÉÉFF jc9æ Õ{((('‰/(`ÿR((¡ôÊ¡¡kk• Bå8 ’å 'zPPz¨ÑÑÑ~IïïœÅÅII<éff....Wª:::øKžKÂÂWªªW::"Ï¥K´œœrf<<ééÅœïZZÑ~~Ñû¨¨û.ªª   \3à3KžKž¶¶ªWìì?? ¶uu"uv#ù¦;ŽŽ;XXXÕ‚X«šGšší@Ä##ÐÐeeŽŽ••¾¾SS**k¾•BB•••¼¼¼ååÙ†Ù3 + +3†***„ׄ*×Êwww6ã__NNN¡¡ô¡¡­**Bï••ÄÄÄ0000â5¸ Mú$w0ƒYYÄî›î›îîƒ)¬Yîîî›YÝ0YYYY³ë˜"#É);6£5Í*#ÿ"R!{!¶c22ÖÖk¾ç爈ˆˆ²_5ˆyyýP££yy&y&&ýPPýQþþQ¼i @ @““¼i « «ÕÕ‡4 + + +]4"Ž!L"ù'*%}"ùŸò!L #!eM"§ #!Ð Ä Ä!›!›!0"Ý"݃"< ââ ##}#}!и#"< $T$T&$T$,$,#U#U$—$—$—"ê!Þ#‹%8%8$Í&z'P%£%n(È&D"ê$,"!¨#U#‹#‹!!!Þ!Þ"´"´ *!×!!#!l"B"B • •!l#TT * *9 æb!¼!Q!QÎ!"Éo˜ E E!ò!!ççç#A ¾ ¾ ¾FF ó óF ó!Ê ‹ 8‹‹a!a´ mÀ=ê—êÀÀ‡ 4‡‡!vÉÉÉÉóó j½“æ((((( Õ!¬!¬Rÿ((¡ôÊ w w¡¡¾¾• B ’å ’"? '!Ô ý£zf<<œïœœZaûû~~¨ÑÑWªWWWWWcc¶¶"""uìì™™ààà00´rrrr~Ѩ¨¨û¨¨0ƒÝÝrrœœ~Ѩ¨ÑѨûªWWW¶¶   ¶33¶¶¶¶Kž""ÛÛÔÔªýu"Ïuàv#Ð###Ð#X«XXííÄGííš//XX##ùùÐ###¾¾k¾}}××*}¼¼¼ÙÙ°††3ÙSS**ׄS6ã¹_ô¡¡¡¹_ _¡¡¡¡×**×­Aî00YYe¸¸¸<qÄî›Y¬YYî›ÄÄ0ÖÖ0›îÄq›îÄq00Äq››- Ú&¸/7z?Û@±4ö+‰&‚!{!!!KKÖ)))SSSˆˆ  óóÊÊyyyÌåå88yyýý’åå!?Q¤þQ“ @i!““æ“þþ{(ÉŸòŸ!LŸ!L44$; á á4 +!·"§ ú"§"§ #!Ð ú"§"q"Ý"Ý#³ Y ¸¸ ú"§"§ ú!Ð!Ð!Ð!Ð#!e##$,$,%%%%%%!Þ#‹%8%8&$a'»'»"'†%#U#U%#U#U"I œ!s!s"´"´!Þ!Þ¿!l •"B"®$[!"®#!l!l#!×!×!!Î {"("("þ$«¤¤ °-Ú!!!ò!ò||¥ R R RÏ!) p ó ó    öööö‹ 8aaÀÀ————ÀÀ  óó"Móó    óó‡‡^! !¬ÿÿÿ!@“““!@æææ{(RRôô¡!N wÊôô)|))S ' 'PP8ååå¼f<<IœIIZ¨¨+…" U~~WªWWWª¶¶ccÏÏÏ"ìì™™à3ŠŠ´rrrrÑ$ûû¨ûûû0ÝÝÝrrœö~ÑûûÑѨUWc \¶¶ 33¶¶¶¶KžuuÔÔWª"ÏÏuàààÐ#v#ÐÐ#vXXXš@Äqššší//##ùùÐ###¾¾¾k}×SS***×¼¼¼¼¼ÙÙ°†à††­­**×*­ã6__¡N¡¡___ ¡¡¡¡„×Z×*­ÄÄAî0Ö¬¬e¸e â q›îY¬¬›îjjƒÝ00AîÄ›îjYY00Äq››-$4/>.DâFE¸D >gssJ𵵎Žee##vÐ ×%Þ%Þ}#ÐLù••¾¾SSSSôôô¡wÊÊwSS­­­­¾¾•èÙ3]°ÙÙ††Èžñ,†3†ñññDD—nññ]]Ù†AîAî0ƒƒƒÖ0ÝÝÄÄ›îhh>‘ÓÓWýÓ€ýªëë>>ªWªý>‘Kžññ   ¶žž!t¶"½"½cë>hª -€yÌÌ8‹8åÙ,ÙÙ————ççkkS| ƒ­)ÖAA”” «QÕ$Ü%G!íii‡‡Ú‡òŸòŸ %x %xã !ð!1!1" [  !e # # #!Ь Y!0!0"""݃#-!€#-#-"Â" >!ë#c#c!¶!¶"÷"÷$¤"÷#Û%ˆ%ˆ#Û$G$G#p!Ã%&Ê'¡%ô%ˆ%ˆ&_&_)3%Ù#U!¨"%Ù$,""I"I# # # !s# !s!¢õ!¢#O#O#O"x"x!¢!¢"x Ë Ë Ë Ë Ë { {"(Î { { {#Õ"]"]!‡#4"É'Ð(¦!ò!å!å"»"»!yÌ £ £" m m#Ç" m!D—!Ê  !Ê!Ê !Ê!Ê!Ê!Ê   Ù ó"2 …"2ØCCl  O O O O O¢¢¢   ð ð®®®®®®®llll¼!i!i¼¼¼¯¯¯ \¯ \Ù†!i!i8 ’åå ’WÂì™ÂÂÂ""Ï"¶cccféé~~~~ÝÝ´Ý0ÝÝììÂÂWÂÂÂÂÂììKKu"Kø¥øøø"Ïc¶¶c¶¶cc"È"Ïììì?Âh<uuÈ"u"uu""uuKKuuªªªª??™™.ÔÂhììÒÒÒ>>gºssJJµ[ŽŽee##Ð*.?@®=T*åÐ#ùL••¾¾¡¡ô¡wÊÊwSS­­SSkkB•††]°††††ÈžñÙÙÙ†žDñDñžÈññ°°†3›îAî0ƒ00ƒƒ00î›hh‘äÓyªª€ÓªW>>>>ªWWªë>KžKK   ¶žžtÇ !cc>몪€ÓÌÌ8åå’Ù†ÙÙDDDDçç¾¾­)ÖSÖ)AA””QQ(67K;*Nii44‡ÚòŸŸ!LxËxË6ã ð!!1!1 ["  !e # #!Ð #¬ Yƒƒ Y Yƒƒ#-!€#-#-"Â"Â!ë >!¶!¶#c#c!J!J"÷!J ".#Û"."š"š!Ã#p%&Ê'¡%ô%ˆ%ˆ$²$²%Ù%Ù#U%$,$,%Ù$,#ö#ö$Í$Í# !s# $Í#O!¢!¢#O#O#O"x"x#O#O Ë"x"x Ë ËÎ"(#Õ { { { { { ° °!‡Úo$v%L˜ 8 8!!!yÌöö" m m mÀ m!D—!Ê  !Ê !Ê      ppFF …ØØØ ð ð!Æ ¢¢ O O O!ü O O   ð ð®®®![![![![    ¼!i¼!i¼¼ \ \¯ \¯ \†!3!i!i!iåå ’ ’åh»ììÂÂìì™ì™™u"øK3cc<é–ÑÑ~~ŠÝ0000ÝŠ™ìÂoWWWWFìÂÂÂììu""Ïøø¥øK¥øøà ¶¶¶øKøK™ìÂhf<žKuuu"KK""uuuuKžýªªªhhhWWWW©©>ë>>ss sÞÞ1ÞŽŽee##ÐÐ)8@®@®,’ùL##¾k•è×**ס¡ô¡wÊôô×*S}****}ׄkk••]††]]]°ÈDD†Ù††ÈDñ°°3†A”jYY00ƒƒ00Äj‘>>‘ýPÓ€€ÓÓÓhë>ÓÓ€€ëë>>tt!!  ßßžKKK¶cc¶ÓÓªª£P££åå»\\ÙÙD—””¾¾)ÖS)ÖÖÖ¾¾ççþ «)ã?¬@í,Ñ @“]] +]ÉÉÉ¢OxËã6 º Æ Æ®® [ [¸¸!e!e ú ú # # Y"!0!0!0"Ý Y¬!€!€!€!€"Â$o >!ë!¶ "Œ ß!J!J t"!«!X$²!X!Ã!Ã#p#p%ô'¡)N%ô( &_&_#%&¯"$,%Ù$,%Ù$,$Í# # $Í# !s#ö#ö#O!¢õ!¢$% Ë"x"x Ë Ëõ!¢!¢!¢õ!¢"("("("( { { { {ÚÚ °o"É"Éoa"»#’!åÌ!yIö!D———ê—!D!D óFFF!Ê!Ê!Ê  p ó"  ó™p  … …®®C ð ly!&!ü O!&"Ó!ü OCC  ®®"2 …ØØ®![ ðC!Æl!i!i¼å ’¼†††Ù¯¯¯!i¼ ’å ’å!i¼¼hììììì?™™"Ï¥øàà¶¶<<éÑÑ++ŠÝÝÝÝÝ0Ý™ìoÂWWªììÂÂh’ìu""uøøKøK¥¥Kà¶c¶¶¥øøKÂÂÂhì™f<Kžuuu"KK""""uuKžªýPªÂWWWWhVVÒÒ>ë>>ÆÆs ÞÞ1ÞŽŽeeÐÐ## ×*å*å צù##k•B×*×*GG¡NÊ¡¡×*­*××××*ׄ¾•ï° +†† +°°]Èññ†3††ÈÈnDñnn°°†3îAĬ¬000000ÄÄ>ë>‘ªýÓ€&ÓÓÓhë>-Ó€€ëëëëÇÇ!!  ßßøKK ¥c!c¶ÓÓWW£P££å廯¯ÙÙ—DçA ¾)Ö­|)ÖÖ¾¾””þQÕ+.~$pæ9°° +]É vO¢x % 㺠 Æ Æ®® [ [!e!e!e!e ú ú # #¬ Y!0!0!0ƒ Y"!€!€!€$Ú"Â! >!ë!¶#c"Œ ß"÷"!#Î$²####p#p#p#p$G%ô%ô%ô( &_( $²%&¯%Ù$,"$,%Ù'†)Ô$Í# !s!sÆ#ö#ö#O!¢õ$ü"x"x$%$%$% Ëõ!¢!¢!¢#O!¢#Õ#Õ"("(#Õ { { {ÚÚ °!!!!!!&ì(™#&!yö £!D—!D!D!D—!D!D"  óFF   !Ê!Ê F óFF !Ê … …®® ðC !Æy!& O!ü"Ó!&!ü O ð ð!Æ!Æ®® …ØØØ®![ ðC  ¼¼!i¼å ’¼†††!3¯ \¯¯¼ ’"?"? ’¼hì?ÔÔWªÔ.""øK¶¶Ñ~¨û¹fmÀ´´´´´ì™ÂFìoÂWW...:ç:""Ï"KøÏuàà¶¶KK""c¶àà..ìììì$Ñûûžžžž"u""KKÏÏà3 ¶Âh?’?ì™ì..?ììì>>>ë>>ë>Æsµµ1ÞLùLùÐ#ùù#}}Ð#Ð#v¾kkk„}¡¡ô¡Êww×****×**}*}***SDñññ]°Ù†DD°°]°ñññD°°°°°°]°ññññYYY0ƒ00ƒ0Yîî››ªªªªªªÓÓ>>>‘ýWÓÓë>hh€€€€KžžK!tKKøKžø 9 9Œßªýýªªª % "€ ÓyÌåå’åmmmmÙ,ç”kk)))|S¦­)ÖS¼9“!í“æ9]]44 vÉɺ º ºººº!! ÆC!ððMM # #É #M ú Y Y"݃ Y Y Y"#-#-$$Ó!€ ª ª#Î#Î!J!J t#Î#Î#Î###Û#Û".".##%ô%ô%ô%ô'5'5&_&_#U%%#U$,"$,%Ù'»$a"´"´"´"´"´"´#O!¢!¢#O!6!6" #º#Oõ"x"x"x Ëõ!¢$«&X"("( { { {Î E E!! ° °-Ú £"P. . &´ 8!å m m—!D++++ÛÛ²!_p !Ê!ÊÛÛ²!_²²² …+ …Ø ð ð!Æ!Æy!&!&y!ü O!ü#©![®®![®® …"2 …"2![#" ð  P£ ' '8 ’å ’†††††Ù††PP 'z ’åPh?ì..WÔÔ""Kø¶¶Ñ~¨ûff´´´ì™oÂììÂoª.....àà""Ï"øK""à:ccKKÏ϶ àà..ìììì~Ѩ¨KKžž"u""KKuÏà¶cì??ìì??ììì‘‘>ëëëë>ðJÆs‹ÞLùŸLÐ#ùù###vv#v#¾kkk*}ôôGôÊÊÊ*×***×***}}***SñDññ +]Ù†DD°°°]žDñž]]°°]] +]ññññ¬¬¬Y0ƒƒÝÖƒYîîîHªªýýWý&&ëëë>ªªÓÓ>‘ o Ú€ÓÓøKžKt!KKKžKKŒŒ!æßPýýªWW+¿:Ô8I%ÚyÌ88‹8mmmmÙ,¯¯ç”kk|ÖÖ)SS)ÖS¼iæææææ“]]‡‡Éɺ  ººº!g!g!! Æð#Jðð"§M # # # # "§""!0!0""#³"#-#- ª$#-!€ý"W"!"!"÷"÷"!"!#Î#Î$²!X".". #Û$²$²%ô%ô'¡$G%ˆ%ˆ&_&_#U%#U!¨$,"" Ò"´"´"´"´$a$a"´"´!¢#O$üõ!6!6#º" !¢!¢"x"x"x Ëõ!¢$«"þ { { { { {"(!ò!ò!! ° °#4-ö £%ª)"»´ 8!å m m!D— Ø Ø++ ˆ ˆ!_²p   ÛÛ²²²²"2Ø …ØC"!Æl!&y!&yõ¢ O!ü®®![®®Ø …"2 …®$µ" ð  £Pz!Ô ’ ’å8!3!3!3!3!3†!3!3Pöz 'å8b¼ ýWÂì™WW..WW"uKK¶¶c¶û¨Ñ~fÝ0aÂÂÂÂììoÂ..ÛÛ.Wcc¶¶øøøKøK""àu""Ï3¶ W.ì™Ñ~¨UKøÈu"uÈuuužøà¶cÂì???ªW.ììggÁÁë‘ÆsJ[‹ÞùLv#ÐÐ####¦L#Ð##B••B×××*¡ôôGô¡ôô}****×SS×***­SSSn]],Ùnnnn†3††ññÈÈ +°°]††°]ÈññYY¬¬ƒƒÖ0Ö0îîA›ýªWªýªÓÓhhÂhÓ€Wª>‘˜)¦(e ªýKžžžt!!tKž!!!c 9ßÓ€ªý€--l>.ë˜&L#^WýªžKžžt!!tžK!!c¶ŒŒ-€Pý-€!±(e&±ý&Ì8’amÀÀ¯¯¯çç””ÖÖÖ|))||)Ö))¼¼ææ““°]°°òò º!g!gã6‰ Æ Æ"s Æ"s #v   #%*!Ð #¬"" Y!0!0!0!0"W"W"W$$Ú#-#-#-"!"!"÷"÷"! t t"!!X!X#Û#Û#Û#Û#$²$G$G%ô%ô$²$²'5%ˆ%Ù%Ù!¨!¨""%%#‹!Þ#‹!Þ!Z 1#‹ Ë"x Ë"x!6"ã" " !¢!¢õ!¢õõõ!¢$«!Q"(#ÕÎ {"("(!ò!ò!oÚÚ-!‡ÌÌ!yÌ!å!å!a m m m m Ø Ø+ Ø ˆÛ ˆ"5 pF ó²²!_²!_!_ ˆ ˆ®# … …CC ð ð O!üy!& O¢ O¢Ø …"2 … … …®®®®![![" ðC– ýP ý ý¼¼!i¼†Ù†††† \" ý ýPP¼¼¼¼ ' ààà¶¶à  WªÔìì’윜œIZ´¨¨Ñ+é<"ÏÏ":ÏÏøøc¶¶¶u"øøÏu"Ï""Ï"¶¶""KKc¶¶¶øøøø:¶¶IIrKžuuÈužžhì쪪WWuužK"uKžªªÔ©©ëëëë sÆs÷JššÄÄ‚/XXX²//‚‚XXwwÊ¡¡Êk¾••k¾¾¾*×××}*S**­­­Z'z'''ÍPPååPPz'¼¼å’’’Ù†°°ÈÈââe¸â⃃YYYYYY€ÓÓÓÓÓýýñžžž22  žžžøŒßßß  ¶ ¶¶ßŒ ¶Œ2¶cŒß--€Ó€&ª Ù,\¯Dñmm———D¯¯ˆˆ_²555ÛÊóóóóÊ4‡Ú‡‡ÚÚ‡°] +°°]‡4 [®!1×®®®® Æ„××!1¬ Y!0ƒ"q"q"q ĸ!e !e!e"Œ ß"Œ$9#Î#Î#Î#Î!¶%"Œ ß t#Î"÷"÷#p%%#p#Û#Û%ˆ%ˆ#:&”%¾'k$|"Ï$|$|$a"´#‹#‹!!!Þ%8#‹#‹#‹#‹"I"I!s!s!¢#O"x Ë!6"ã" %g • • • •"®!!T$v$v!! E E E!ò!"É! E!ò E!ò m m m"!D—!D!D"… Ø Ø+!¯!¯   ˆÛ!_!_²²²ÛÛ ˆÛ ó ó óF7ä!‘7¢!ü!&!&!&y¢ Oää77![![![®®![®ää º º º ºäŠ \ \¯¯!3!3 \¯†† \ \ññ!3!3Ù†" " " ¯†¶ààà3¶¶3à¶\3Wª.ììì윜ïœa¨¨~~<fÀÏ""Ï:::""øøc¶ccu"KKÏÏ"Ï""Ï"àà¶¶""øø¶ ¶¶øøøžà¶¶IIÅržKuuÈuøžh??ªªWWÏuKžu"KžªªÔªª©©>>ëësÆÆsJJ÷JííÄÄ‚/XXÜÜ‚‚XXÊÊÊ¡Gʾk••¾kk×***}*S**SS­'zzzzÔPPåå¼¼PPz'¼¼å8ååÙ†]]ÈÈââ¸e00YYYYYY€ÓÓÓ€€ªªKžžžßß  žžžž2ßßß   ¶¶\2ß\ ŒŒ¶c 92€€€ÓÓyWW,Ù¯—DññD—UUˆˆ _55ˆˆÊF óóʇÚ4‡4‡‡Ú]°]] +]‡4 [®××®®®® Æ"Þ!1„„ Y¬ƒ!0 Ä Ä Ä"q¸!e"<"<"<"‘\ ß2Œß\¶ttKžtt!!ßß ¶KKKøtÇžžŒŒ¶¶ëëë>Wý€&,,UmmÀÀêDD—mñDÊÛˆÛˆˆˆˆˆ5555°°ÚÚ˜EòEÉÉÉŸŸ vC–ðð Æ®®!1„®×!1!0ƒ Y"ƒ!0#³%`#}!Ð!Ð#} !e!e!J!J"÷"÷!J"÷$¤"÷!J"÷!J!J$¤+X5f-&_!X!X#".#Û$²#&)'Ö&)$|%S'%S%S%8%8"´"´!Þ!Þ"´"´#ö"I"I"I#‹!Þ!&2d?Ì5¾$ü" `!6!6"B"B!l!l • •!l#!!!ò E!! E EÚ!‡ °o! E E Ø Ø Ø~À m"" m m" m—!D—!D²² ˆ ˆÛ ˆ²!_!_!_"5 ˆ ˆ. º"g º º º"gä#>ää º O O!&!&  " ð  CC º!‘äy!& O¢ññ"u È!žDññññ†Ù!3!3 \" \¯ \ \ÙÙ¯c¶¶ ¶¶¶¶ ¶¶c??ÂÂÂZZÅÅœœ¹é<<<<¶¶àà::cc:àc¶KKu"KK¥ø¶cccø¥ÏÏccccccàà""""u"¥K0ÝÝ0KžžKKKuuªªhh??\¶¶¶  Â'}*™.ÔÔ,ÒgÁ  JJsÆ  šíšíþXÄÄííqÄíí__6‰___ kkBBSS×***­Z¾k••×××}¾kkå’å’¼¼£PýPz'''å’¼¼¼†† + +]]†Ù¸¸â¸ ¬Y0ÖƒƒƒƒÓ€ªª»h‘>\ ŒßŒß  ttKžtttt22 ¶KKžK!tKKßß¶¶>>>ëWW€€ÙÙ¯Àmm———DmñDÊÛˆ5ˆˆˆâˆ5555°°‡‡EòòŸoòò–Cððl®®×„®„„ƒ!0"#³ƒ!0 Y"#}!Ð #!Ð !e!e"÷"÷!J!J!J"÷"÷!J!J"÷"÷"÷"÷'þ"÷!X##$²".#Û&_$²"Ï$|'Ö&)%S#¦%S%S%8%8&"´&å#‹"´"´"I#ö"I"I#‹!Þ"´$a-]7k-]#O" `‰"ã"B"B!l!l"B"B!l¿!!˜ E!! E EÚ!‡"] °!"É E E Ø Ø Ø~À m m mÀ"" m—!D—!D²²"5ÛÛ ˆ!_# # ²Û ˆ!_ ˆ ˆ º"g º º"g ºä#>ää º O Oy"Ó!Æ!ÆC ð   ð ð º ä!‘y!& O¢ññ È È È!ž!žññññ"à!3!3!3 \" " \ \ \!3!3 \àà\¶ààà™ì?ìììÝÝÝ0ÅÅIœ¹f<é<¶¶à3c¶ccc¶"u¥ø"ÏøK:žKøø¶¶:¶¶øø""KKøøÝÝŠ0uuuÈuuKKWªÔhh?? ¶àààà ¶o%Ð/! ªªýª©©Vü>ëJ÷ Æ  ÄÄX‚‚@ííšÄíš²²‰‰6ã6‰kBèS×××ו••B××­Skkkk¼88¼¼ååz'''PP'zå’åå’å’’]]††††]]e¸ ¸¸¸¸¸ƒƒƒƒ0ƒÝݪªÓÓh»hß2¶ ¶¶2…ttÇ!t!Çt\¶ßßÇtttt!!!¶¶Œßëëë>€€WªÙÙ¯ÀÀDDDñDDmÊ󠈈_²²²_²____°‡‡òòÉEEÉ vCCl–C!1× [„× [ [" Y¬"!0!0" Y!Ð # ú ú!e¸ "ä!‘"g  $$"g "g O!ü!ü!ü" ð !Æ" ð ð ð!‘ä º ºy!&y!& È Èññ!ž!ž È È È È!3!3¯ \ \#¶!3!3" \††¯àà¶¶àà3ào™ìì™™™Š0ƒ0rrœï¹fé<¹<¶¶àà:c¶:àc ¶c"uKøÏ"¥øàààKžKK¶¶à¶¶øøÏÏøøKK00ÝÝuuu"""žžWª'Ôhh?? ¶àààච󙪪ªWüV©ë>JJ÷J  ÍsÄÄqqX//íšGšqÄíš__‰‰‰6ã6kBBS××**••è•××¼ååiiåå'zzzýý'zå’ååå’’’ +°††††°°¸e¸e¸¸e Ö0ƒƒƒ000ªª€€hh»2ßc¶  2ßttttt!t!  ßß!t!Çt!tt cŒß>>ë>ÓÓWªÙÙ¯mm———DDDÀmʠ󈈲²²²_____°‡‡òòÉÉÉòòooÉ––lll¿–C„„®®„!1"""#³ Y Y!0!0¬ Y #!Ð"§"§!e¸ "<!J"!"!#Î"!!J"÷"!"!!J"!"!"÷"÷#!X#Û#Û#Û#Û#Û".%S%S)ƒ'Ö$|$|&)"Ï$a&%8#‹%8#‹#‹#‹#ö#ö#ö#ö"´$a#‹ 1 Ë"x Ë"x"ã"ã" #º#ï"B¿##ï"B!l##Ÿ#Ÿ#Ÿ E!!!!!‡!‡#4!‡#Ÿ!ò"É!++#\ —— m#Ç"À!D!D"ñ!D!D!D²²!_!_ ˆ.!_² ˆÛ ˆ"5 ˆ ˆ!‘!‘!‘ä º º º"g º "g!ü O¢¢" ð!Æ#s" ðCC!‘ä  Ì"Ó"Ó!& È È!ž!ž!ž!ž È È††¯ \" " †"à" \!3!3 \IœœrŃÝ00œœœIœœrr000Ý"užKKøKK ccc""u",ÒÒ,V©Á>ëV©ÒJJJJ  ÷÷Áëë«XXùù##ù¦Ð}µµŒŒÞ„[[ÆÆÆsgggº%Ò©üÕ‚‚/íší펎¸ee ;ŽÒÒgë>JJJµµ‹ÞíGššGšÄÄùLùùŽ;Žá° +ÙÙDDñDDDnÈ]††°°ÙÙ°]Ù††ÙÈÈÈS××BB•B$wwÊ¡¡ÊÊ666‰66ãww¡¡wÊÊw««ÔÔiÚ@4Ž·d + +··ggg%ÒNNÆsÆssïïKž!!tt!!>>>ëÂhhÂWW€ÓªªWý({Î({{{{QQ¤Q¤Q¤¤õõËËËx¢H‰6``¢¢¢¢×× [®llll–C] +] +É vÉÕ(Qþþ «Õ!‚!"!"u!" · ·3!".".". !X!X!Ã%"š"š%!Ã!Ã!Ã#Û"."."."š"š í"š"§"§#}%*#}!Ð#}%*$$)%%Ë'ä&7' %`%*#}"§&&$T&"§!Ð#}$T$T$T"§#}!Ð#A#A!”!”$$"k$$M"  ó ó#â"5# # "»"»"»"» £ö!yÌ#’!å"»!"»!"»!!”!” ¾ ¾#A#A#A#A!Ê!Ê ó" # # !_# "PöÌ!y £öööö £!y#&ÌÌÌ!y"u"u Èññ È"u!3!3†!3" " ††ñ!ž!ž!ž È!žñ!i!i ’ ’ ý ý!Ô 'k!!!Ö!ƒ ­ ­¡¡ w w !¹_ "u È"u È!3!3!3!3 ýœœœÅrÝÝ00œœœïœœrr00Ý0u"øKøKKK¶¶cc""u"ÒÒ©VÁ>ë©VÒ÷÷  JJÁëëXXXXùùÐÐù¦#еµßß11[[ÆÆÆsggg%ÒV©/‚‚Õíš@šŽŽe¸eeŽ;,ÒÁë>J÷JJµµ‹ÞíGšššGqùLùù;Žáް°ÙÙDDDñDDnn°°ÙÙ°°Ùٰن†Ùn­„*BBB•ÊwwÊ¡GÊÊ666ã66ã6wwNNwÊw$XXÔÔpííáá +· + +··ggg%ÒûûÆÆÆÆïïKž!!tttt>>hÂÂÂ>ëhhhÂWW€Óªªýý{Î(({{((QQ¤Q¤QQQõõËËËHH‰6  ¢¢õõ××®®Tll¿llC–°]°] vÉÉ vÕ(þ « «"X(Õ!"!"u!" · ·àà ". ".".!X!X #p$G í!Ã!Ã#p#p". "š"š í"š"§"§!Ð#}#}!Ð#}%*$$%Ë%Ë)‘'ä(º' !Ð#}&&&$T$T$T%*#}$T$T"§$T%*#}$î$î#Aç"k"k ¾"k ó" " " #â"5# # !!"»"»"P £#&!y#’!å!"»!"»a!ççd ¾#A#A#A#A!Ê!ÊF ó!_!_²"Pö!yÌö £ £ £ £öÌ!y!y!yÌ È È"u È!ž!ž"u$""à†!3† \ \!3!3!žñññ ÈñD¼¼"?"? ý ý!Ô 'k!k"ÅÖ!ƒ!Nô w w !¹!¹#f È È†††† ýœIœœœÅÅÅœœrrÝ0ZZuuKKøøKøc¶àà"uøKÒ,©©ÒëëëëÒ  J Í÷÷E˜ëëÁÁÁX«/Ü‚/²ùùÐ#¦ù#Ðßßµ[[[ÆÆgg>>%V©‚/XXÄÄŽŽŽŽŽŽŽ;Ò%%>‘JJ ͵µµšíÄÄÄqq#ÐùùŽŽ¸eÙ†°°Dñnn°]°°Ù†]°]°†Ù††††ññ­„ו•kÊ¡¡wwÊ ¹66_ ¹ ¡N$$N¡ÊwXXX«@ííšd· + +4ᎎggûûNûÆÆœœïïssžžžKttttÂ"%v">>>‘>>hë‘ýªÓÓªª€Ó{ΤQÎ{(({{((QQ{ÎËË¢OxËõõ``66õ¢„×*×®®®ll¿lC–CC] +‡4òòŸŸÕ{þþÕ!‚ « «!ù L!"!"!à3à!X«". Ô i#p"š í@ í"š"š#!X". í$G"š"š!Ð#} ú"§#}#}"§&$%Ë%Ë%Ë%`' &7$Š"§&%*%*#}#}$T$T&&$T$T$T&%*#}#A#A#A#A"k ¾ ¾"k #w#w#w#â#â#â#â!!#’!å £ £$Ó#&a! 8!å!å!å!! ¾ ¾ ¾$"k ¾ ¾F ó!Ê!Ê ˆ#âÛ ˆ"Pö £ £Ì#&öö"P £Ì!y £"P!y È"u Èññ!ž#K"à!3 \" !3!3 \" !žñ È Èñ!žñD¼!i#ì ’!Ô!Ô!Ô '!k¾! ­ ­))!N¡ w w 6 ã È È \ \ \¯ 'œœIIIZZÅÅrÅIIÅÅ0Ý""KKøøKø¶ 33u"øKÒÒ©©Òëë>>,,,  Js JJ˜ëëEÁÁÁX‚//ÜX¦¦Ð}ùL#Ðßßµ[[[s>>ü©/‚XXŽŽŽŽáááŽÒ‘>÷ ͵µbµšíÄÄqÄÄ#Ц¦ŽŽ¸eÙ†]Dñunn°°°Ù†°] +]†Ù††††ñ—ÈÈ­„ו•k¾Êw¡¡wwwÊ ¹66 _ ¹ô¡$ÊN¡Êw«««Xíší@· +··áŽŽŽgg¨¨û¨ÆÆœœœœññžK!!tthhhÂ%v">>>‘>>hë‘ýª€&ýý€Ó{ΤQ{({{{{{{÷Q({ËËõ¢Ë¢¢  ããxx¢O„××*®®®¿lC–CC] +‡ÚòòòòÕ{QQ(Õ « «!ù Luu!àà!#!X". ".". Ô !Ã@ í"š í"š"š#!X". @"š"š"š!Ð#}$T&#}#}&&$%Ë$'x' %`$Š&7"§&(„%*#}#}$T$T$T'®&&"§ ú#}!Ð#A#A!”!”"k ¾"k$#w#w#w#w"5"5"5"5"»"»#’!å £ £!y#&!a 8!å!å!å!! ¾"k"k ¾ ¾ ¾ ó" !Ê!Ê"5"5"5 ˆ"P"P"P"P!y!y £ £ £öÌ!y"P £!y!y È Èñññ!ž!3"à" \"à"à" \ñ!ž È È!ž#K!žñ!i¼ ’ ’ ' ' '!Ôk!kk"Z"ZÖÖ"û!N w w_!¹ ã6 È È¯¯¯ \!ÔÅZÝÝrœIIIIrrœœIœÏ"KøKKu"ààc¶:¶¶VVÒÒ©V,ÒÒëëÁÁJ÷J÷µµµbÁÁëëëëGššš²Xeeee¦L##ßßßßðÆÆÆÆssë>>>>>‘‘‚‚‚/ííÄĸ¸ŽŽùLLLë>>˜sÍ  ÷¤¤÷/ÜšíÄqeeeeŽáe°°]°]]ññn]Ù,Ȱ°††ñDžñ†Ù°]×××××צùGNwwwÊô¡  __6666wN¡ã‰6ãÔÃiááá4····%Ò%Ò%%ÒÒµÞÞ1„Þ1t!žžŒß  hÂÂ>ëÓÓªªªªÓÓªª€€‘‘ë>999æbþ¤{{b¼³³6ãõ›Hõ‰‰ ```‰‰lC–¿¿ðC**××–ðl‡Ú]] + + á áþþ(Õ(((!‚"d +àà#:#:à!!Xþ«!X ÔÔ í í í"š".".#Û#Û !X!X!X!X".".#é%–#é#é$T$T%*#}%`%`$Š&7&¢&¢$$%–%–&l$¿#é#é$¿##}#}%*%*#é"<"<"<"k"k!”!”"Ö"Ö"Ö"Ö"5"5# !_$M$M" " #ý £"P £ £"P!y#&!yÌö £!y#& £ £ R!ÿ!)!)!ÿ!ÿ!)!) ˆ ˆ!_² ˆÛ ˆ ˆ"»! 8!å"P £ö £‹‹ 8 8!!!"»!žD!ž!ž††!3!3ñ!ž#Kñ!žñ!ž!ž \" !3!3"à$ \¯ ' 'z '¼¼!i!i•!ï!ï!ï!ï B!! w w¡¡66 ã6ññ È È!ž#K#ìrZÝÝrIœœIœIIIrrIIIœÏ"Køøøu"c¶à cVü©V,,,>>JJ÷µµbÁÁnëëëëGšííXXee¦¦ÐÐßßßßðÆÆssss>ë>>>>ë‘‚‚‚/ííÄĸ¸ŽŽLùLL>ëëë  ssJJ÷/ÜšíqÄeeee;ޏe°°°°°°°ññÈ]]†ÙnnÈÙ3—DñD†Ù°]**××××­¦ô¡ÊÊwÊô¡  __‰ã66wÑN¡666ã..ÔÃiááá4····%Ò%Ò%%%%[11„1‹ÞtÇžžŒß  hhh>ëÓÓªªªªÓÓýWÓÓ>>>‘æææ9bþþ(Îb¼³³‰6¢¢¢O66 ```‰‰¿l–éll–C××××––l4‡]]]]"Ž4þþ{((!‚ÕÕ · ·!!!!à!!X!X«!X".ÔÔ"."š"š í@ ".".#Û#Û#####Û#Û#é%–#é#é$T$T%*#}%`%`"Ý$Š&¢&¢$$%–"<#$¿#é#é#$¿#}#}#} #"<#é"<"<"k"k#A#A!)!)"Ö&0%(é$¹# " " " "  £ £"P £ £"P!yÌÌ!y"P £!yÌ £ £!ÿ R!)!)#¬ R!)!)#â ˆ²!_"5#âÛÛ!a 8!å"P £ö £!å‹ 8 8!!"»!ññññ†"à!3Ùñ!ž$ø$ø#K!ž!žD \¯††!3"à" \zz 'z!i!i!i B B!ï!ï!ï Bkk w w!N!N66 ã"#Kñ È Èñ!žåœZZÝ0œIIIIœœörrœœrrœïøøKKÏÏ""àÒÒ©V,,ëëJ÷  ß9Œ9ÁÁ˜˜ëëšííí²²ÜÜeee¸ùù¦¦ŒŒŒßÆ sÆsssÆgëëg>>‚‚Õ‚@íššŽ;e¸####ë˜ÁÁJJJJJJ÷²Ü/qÄqÄee;ŽeeŽŽ°]°°††Ù†ñ—Dñ††Ù†nnDñ]°††nñž]]°]*×­wÊÊÊô¡¡N6666__ ¹ô¡ÊÊã6 _.ÃÃÃᎎ4á;··û¨¨¨ûûÒÒ[[[[tÇžž22\ >>h>>hýª-€WWWªªªýªhh¼9999{{{{¼¼“æ6‰`õõ˺!gããã6`³C–¿¿–C–C*×××––‡‡44‡4!·]Õ(þQQ «þ « ·"d · +!!!#: ". þ#"š"š  «!X#!X".".".".".".#$²%–#é#!e"§"§&×%*$Š'ä&7$Š%Ë%Ë%Ë$($¿$¿$¿#é%–#$¿"§$T%*#}"<"<#$¿$î!”!”#A"Ö"Ö$ƒ"Ö#â'<# !_ ó ó"  ó!y!y"P"P"P"P £ £!y!y £ £!y!y £ £!)"Ö"Ö"Ö!)!)!)!)#â"5 ˆ"5# # ˆ ˆ 8 8a!#&ÌÌa!‹ 8!å 8!! ÈDD†!3 \¯ È È!ž!ž$""u \¯!3"à" " \ \ ' ' ý£ ’ ’ ’ ’!! B!ï"Åk• B"$ w!N!N__!¹ ññ È Èññ"u!iI0ƒœIIIIœIIÅÅIIrrïœKKKK""""àààà:©VëëJ÷ss2ŒŒ9ëëÁÁëëšíššX²Ü‚ eeùùùùßßŒßÆÆsÆÆÆÆºgëëgëë‚‚Õ‚íšííŽ;e¸##vv>ëgÁÁÁJJ÷J÷J²_‰‚ÄqÄeeŽ;eeŽŽ°°°33†Ùñññž††3†ñž°]††nDñ]]]°SS*×SÊww¡NN¡ã㉉   ¹¡NÊ$ã6_ ÔÃÃiáŽáá4Ž··¨ûûûûûÒÒ®[[[[[t!žžßß ¶‘ë‘ëhýª-€WWWªýýªýhhhhbææŒæ{{{{9æ6‰``õõËx(0|/¥(ñã6`³–é¿¿–CC–×*××CCll4444‡4 + +!‚{QþQ « «þ · + +]à#:à!#Û ÔÔ".#Û!X# í í!Ã!ë!X#!X".".".".#Û #!X#é%–#!e"§"§#}!Ð$Š$Š"Ý$Š%Ë%Ë$%Ë&l&l&l#"<#é$¿#"§$T&×%*"<"ëë>s JJßßµJJJµµŒŒ  Í  sJ¤X/Ü/‚LùÐ}Ð#Ð#Ò%ÆÆÆÆ[[Ò%ÒgÁÄÄššqííÐ#LLe¸á;ë>>>Áëë©©©V˜ë˜ëÜÜššíšXÄÄšíååå’¼i’8ýPPý¼’å£ýýPPP'z8å¼¼zzzzSS­××**××¾è•×*S­×„kkïBkkkii@íí@· +áá + + +·IIÆs[[[==ggggÂ>뀀€€ªWWªýýÓÓ>>ªª€€ \   ¶¶ ÚÚÚ-Ú‡Ú‡({Î{Î{¤Ql¿¿lCC$ 8rD-E7›#x¢õ ³6ã    lllððlÉÉŸò + +44ŸòÉ v v v v v"d +3àà!à!". ". !X#!X« ".!X!X#!X". ".".#p!Ã!Ã#p#é%–##$T$T%*#}%*#}$T$T$¿&l'C%–$¿&l'C'C%–%–%–%– ú"§"§$T###!e"k"k#A!” ¾ ¾!”!”"Ö"Ö!)!)çç"k ¾——!D—!D"ñ—!D Ø+!¯ ++ !¯#¬!ÿ R R!)!)!)!) ¾çç ¾ ¾"köö £ £ £ £öö!D!D!D!D" m——"à"à" \ \ \!3† 'z£ ý"ª"ª#!Ô È Èññ#K!ž È!i!i¼ ý ý!Ô '!ƒ!ƒ ­"Z ­ ­"Z ­Ö!ƒ ­ ­kk!kÙ†¯¯ñ!ž"u!ir00ZZû¨¨Uff<œœÅÅrÅrrKøuuc ¶¶KKøøc¶¶cÒë>ë>s JJßßµJJ÷JµµßßÍs Í Í÷÷²/‚XXÜ/¦ù#ÐÐ#Ð#Òssss[µ%ÒÒÁgÄÄííÄÄíí#vLL¸ ŽŽë>>>ÁëëVVV©ë>ë>//íGíšXXXqší88’å¼’’P££Pbå’£££PPPÔ'å’''''­Z××××­­**•B*×S­×„¾•BkkkÃÓ@@í +·áá +dd·IïÆ[[[êgÁggh>ëÓÓ€€ªWWªªªÓÓ‘‘ªªÓÓ\    ¶ ¶‡‡Ú‡‡Ú‡Ú({Î{Î{¤Q¿l¿lCél"s:EÚE>O%,Ëõ¢  6‰    ¿¿lCCl vŸò + +‡ áŸò vÉ v vÉÉ · ·à!à!à! ÔÔ".". !X#!X#". !X!X!X##Û".#Û !Ã#p!Ã#é%–!e$¿$T$T#}%*%*#}$T$T$¿&l'C%–$¿#%–%–'C'C#é#é"§$T"§$T##!e#"k"k$î#A"k"k!”!”"Ö"Ö"Ö"Öçç ¾"k!D!D"ñ!D"ñ!D!D"ñ Ø+ !¯++!¯ !ÿ R¥¥!)!)!)!)"k ¾!”!”"k"k"k"k £ £ £ £ £ £ £ £!D!D!D!D" m——!3!3#¶" " " !3†z ' ý ý ý ý!Ô ' È È!ž!žñ!ž ȼ¼¼!iPP '!ÔÖÖ ­"Z ­ ­S!ƒÖS ­kk!k!3† \ \!žñ!iœ00Ñ~ÑÑffIœÅrœœrÅuužKà¶¶KK""c¶©©ü>>>>JJJJßßµ  ÷÷ŒŒŒß s÷÷ z÷J//‚/²##ÐÐÐÐù¦VVssss[µµÒÒÒ>‘gºíí@@ÄjŸL##¸¸áŽ>‘‘>gü©ÁëëÜ/íGqq//Xqššåå’ååå¼¼zz£På8å’PPzzzzPý’’¼¼PPPP**××××*××*BBk¾}××ׄ„ׄkkkBBkííí@¼íš +···áá44ÆÆ11===gê=Âë뀀WW€Óªª--€€Â»Ó&&€\¶Œß  ß 9‡‡Ú‡Ú-‡Ú{{{{¤¤¤Q¿l–C¿¿,·;Ì?ü0ç ü¢Ë˳`66``  ––CC–CòŸÉ4‡‡ áŸòÉÉŸŸ v v"d"d"d"d + · ·"d!X««« !X««!X#!X ". ".$²&_#Û".!Ã!Ã#p!à "<##%*%*"§$T$T"§%*#}$¿&l%–%–%–#é$¿(&l###"§&"§"§"< ¸!e!”!”#A!”!”!”!”ç!ÿ!ÿ#¬!ÿ"k ¾:ç m m""!D!D" m ¨+"… Ø Ø#\U|||| R R¥ R"k"k ¾"k ¾ ¾ÌÌ £ £ÌÌÌÀ m!D!D!D—À m!3† \" " \†† ' 'PP ' ' ýP È È È Èññ—ñ¼!iå ’PP '!Ô!ƒ)!ƒÖÖÖ#0!ƒÖÖ B•!k \ \¯ \ È È!iœZ´00$Ñ$$ffœïrÅœœrÏÏKø:ccKK""¶c©©V©>>>>JJJJßßµ  JJßßߌ sJJÍͤ÷²X///‚XÐÐ}###S¦,Ò©©ÆÆÆÆµ,ÒÒ>‘g@@ííÄÄLù##eeŽá‘>>ëÁü©g>>X²Ü/ššqq//Xqííååå8ååzzP£’åå8££''zzP£åå¼¼ýýýý**„„×××**}S­ïïk**×1„**×kkk••k@@@íii@í·d··áááásÆsÆÞ„=ºgê=ÂëëÓÓªª€Óªª€€ÓÓhhh€ÓÓÓ\¶ß2¯ 22ÚÚ‡4Ú-Ú‡((((þþQ¤¿lé–¿¿¿O$V%, %õõË˳`66  ``––CC–CllEòÉ4‡44òŸòò"#"#"d"d · ·] + · +!X#«« !X##!X#$²#Û". ".#$²".#Û!Ã!Ã#p!à "<###}#}&$T&$T#}%*$¿&l#é#é"<#é#&l&l###"§"§"§"§"< !e¸ç#A#A!”!”!”!”#A!ÿ!ÿ R¥"k ¾ç!”""""êêÀ m  "…"… Ø Ø!¯ !)!)|| R R R!ÿ ¾d ¾d ¾ ¾ ¾ÌÌ"Pö!y!yÌ!yÀ m!D!D—!D m""à!3" \ \¯†† ' '"ª"ª!Ô!ÔP£ È È È È!ž!žññ!i#"? ’ ý ý!Ô 'ÖÖ!ƒÖ|Ö ­ ­Ö)ÖÖ• B!k \ \ \" È È È È!iœœIÅû¨Ñ$ûûU¨ZZÏ"Køà¶¶uuKø""øK,ÒÒÒë>>> sssJssŒŒµµJ÷J÷Jðs ŒßߌGšššXÐÐÐÐ;Ž;è,,Vü®[11ssV©üVë>ggj@íX«//##LùŽŽŽáüü©©,©©©©gÁššGšX‚/qÄíG²X//''zÍP££ýý£Ízåå¼¼¼¼å8¼¼i¼å’¼¼k¾BB**××**ׄ××­­B••B××××¾¾kí@ÃpÏ"ÈÈLŸuu1ׄ1sÆÆÆÒÒûû===ëëhhÓ€ W€€ªWÂ>>>>Çt!! ¶¶¶‡Ú°]°°Ú‡QQ{(ææ¼¼éC¿¿éé¿l`ºã6HHHH‰ã66¢¢¢¢llCC––é–44‡‡É‡‡]] á á á4ààà!uuuu!X!X!X!X í í"š"š"š"š"š$G#Û". ".#!X!X!X ".#!X ú"§$T$T$¿&l%–#é%*%*#}%*&&%*%*"§$T#}%*%*!Ð#}%*&"§!Ð!Ð"< "<">> sssJ  ßßµµ¤÷J÷÷s Œß2ßGššš²X²}}ÐÐ;Ž;Ž,,©©[11ss©V©©>ëggÄ@í«X//#}Lùá;Žá©©üV,VVVVÁÁššGšX/‚Ä@šXXÜ‚'''ÔýPPP££'zååb¼¼¼¼¼8å¼¼i¼å8¼¼¾kBB**××­­**ׄ**­­B••B××**kkÅšíÃÃÃ"uuuLŸuuÞ„„1 sssÒÒN¨ã==ë뻀- W€€WªÂë‘ë‘Çt!!c¶¶¶‡Ú°]°°‡Ú÷Q{Îææ––¿¿––¿l  6‰õõõõ6666Oõõõll–ð––é–‡‡‡‡É‡‡]]44 á4!!!#:!"!"uu««!X!X@"š"š"š"š"š í"š#Û". ".#!X##".#Û#!X ú"§$T$T$¿&l#é%–%*%*#}!Ð$T$T%*%*"§$T#}%*%*%*%*&×"§"§#}#}#é"<"<"< R R R!ÿ!”!”"k"k"k ¾ ¾ ¾!”!”#Ç m m m!¯  Ø Ø!D!D" m!¯!¯UUç!” ¾ ¾ R R R R R R R!ÿ"Ö"Ö R R!a‹‹ö £öö!¯!¯"… Ø m m m m#Kñ"u Èñ!ž È È '!Ô!Ô '"ªPz '!3"à!3† È È È È ýP '!Ô ’åå8)Ö!ƒÖÖÖÖÖ!!!ï BÖ) ­"Z†††!3!3!3†† ýïÅrœœ+ÑÑÑwÑÑ$Ý0ZZÝÝÏÏÏÏà ¶"Èu"ÏÏøø©V©VÁ>>JJs   ß2ßŒÍ JJssJJbbµbqÄšš²/Ü}}Ð#e¸eÙVV11„1÷Jð%Òë>ggÄšíÕ‚«Xùùù¦¸¸;;VVVV©©,©V©©>>ÁÁGšqÄ///‚šííš²/‚z'z'P££ýPPýP’å8åå?ååå8¼¼åå¼¼¼¼¼¼••••**S­­„××*××B•kk­­**kk••ÃÃLL""LLùŸÞ1[[ïIsÆÒÒ%Ògg>ëë>WW€€ýª€€hh>‘hh>>Âë‘tttÇ ¶2…°]°]°Ú‡Î({{““¿¿–ééCéé66 `õõ¢¢66  ¢H¢õ–é¿l–Cll°]‡4 vÉ4‡]]4 á44àà3!!ù Luu!X!X".Ô #p#p!Ã!Ã#p"š$G".Ô ".".".##".".".".#}!Ð#}%*#é#é#é#é%*#}%*%*%*#}&&"§$T$T&%*%*%*%*$T"§#}#}"<"<"<#é R R R!ÿ!”ç"k$$dçç ¾"k"k ¾"" m m#\#\  —!D!D—  U ç!” ¾ ¾ R!ÿ!)||"Ö"Ö!) R!ÿ||aa´aÌ"P"P!¯!¯!¯ À m—!D!žñ#K!ž È"u"u È ý ý ý ý ýP ' \ \†† È È!žñ ý ý ý ý ’å¼b ­ ­ ­)Ö ­!"Å!k ­ ­ ­†!3 \#¶" ¯ \¯PœÅrœœ~~ÑÑÑÑÑ$0Ý´´ŠŠ""""àc¶""u"ÏÏKK©Vü©g>>÷÷s JJssß2ߌ sJJssJJµµµqÄííXÜ/}#Ð}e¸¸eüV11„1ðJÒ%>‘ººjšíÕ‚þ«LLLù¸¸áá©©VV©©Ò©ü©©>>ÁÁšGÄq///‚šííšX/‚'z'ÔP£ýýPP£På’å’åååå’å¼¼88ii¼¼••••**Z­*××*­­×וB¾××kk••iÃÃÃLL""LLLLÞ1[[ïïsÆ%%Ògg>ë˜ëýýÓÓýªÓ->‘ëëh>>ttÇt ¶ß2°]]°°Ú‡{{{{ææ¿¿C–––éC66`³H¢õOãã  õõõ¢–é¿l–C]°4‡ÉÉɇ4]!·4‡44àà33 L!ù!"!"#«".Ô #p!à #p!Ã"š í#Û ".".".«#".".".".#}!Ð!Ð#}"<"<#é#é#}!Ð%*%*#}!Ð$T$T$T&$T&%*%*#}#}$T&#}#}"<"< ">µbbµµµëë©©V©íšÄÄqÄííŽá¸eùùÐм¼¼iåå’’zzzz¼¼?’² ¹ wÊ¡¡èèè•×**×'zÍz'z''†ÙÙ††Ù††P£'Ô??’?’’iiPPPPûN%Ò —gIœI!£öIIIIïÆ[„1IIssIœïœ$ѧúeee¸››Äq›îWWª>>hKKtÇžKKñ9“ææææ¼¤¤QQQQQ¤õ¢¢¢ËË¢¢  ‰‰‰6` {({{¤Q{{ɰ]44C–l––„ׄ„® [ׄþþQ« ".". «!X$²«!Ã!Ã!à  œ œ œ œ# # œ œ!s!s!s!s!s# # # &7$Š"Ý"Ý"Ý"Ý%`#³#}#}$T$T#é"<#é#é%*&×$T&&×#}"§$T$¿###"<#é##"5"5!_!_"5 ˆ!_!_" "  óF²# Û"5#A!”"k"k!ÿ R R R !Ê!Ê!ʲ²²çç ¾çç ¾:!”!”#A R!ÿ"Ö!)   !Ê!_²²²!)|!)"Öçççç!N"û¡¡!¹!¹ !¹"$"$"$ w6""‰Ö!ƒ ­ ­!!!ï•"Åkk!"Å"Å!!"ª ý"ª ý!Ô '!Ô '£P ' ' ý ý ý ýññ È È È!ž!ž ’¹ff<0ÝœÅrœIÏ"uuàà:Â.ššííqq;ŽŽ;ŽŽeµµµ÷Js µµŒŒµµµµÁÁ,Vë˜ÁÁeešíššÐÐ#vLùvv%ü©ggggggg>>µµµbµbbÁÁëë©©©üíšqqÄqšš;ޏeùù}}¼¼¼8’’’zzzz¼¼’å___ wÊôô•••B×*×*ÍzzÍÔzz†Ù†33†††ýP'Ô?$ó!™’åå¼¼PPýý¨û%Ò=gœïïIIœœœœœÆs[1ÞœœsI$ÑMú¸¸e¸îîÄ›îî›Wªýª>>hžžt!Kžžž9“ææŒæ¼¤¤÷QQQQ¤¢õõõõõ``‰‰‰6`³{(((Qþ{ÕÉÉo]°‡‡ll–C Æ¿––*××׮ׄþþ««Ô ".«!X#!X!Ã!Ã#p!Ã"I"I#ö œ!s!s"I"IÆ# ÆÆ!s# # # $Š"Ý"Ý"Ý"Ý"Ý%`#³#}#}"§"§%–#é#é#é%*&×$T&%*%*$T"§#$¿&l##é"<&l#"5"5$¹!_#â"5!_!_" "  ó" !_!_"5"5#A!”"k"k R!ÿ#¬ Rp !Ê!Ê!_!_!_# ççdçç ¾ççç!”!ÿ R|Ï  !Ê !_²!_"Ö!)|!)#A#Açç¡!N!N!N!¹!¹ !¹ÊÊ wÊ666 ãÖ!ƒ¾! B B!!!k"Å"Å"Åk ýP ýPz '!Ô 'P ý ' 'P"ª ý ý!ž!ž Èññ ’<f­0ÝrIœZœI¥Ku"c¶™ìÂWWššÄGšÄqŽ;ee;;bµssssµbµµŒŒµbÁ˜˜VV,ÙVV,Á˜˜;áee@íšíííÄqùL##ùLvv%Òü©gº‘‘ëëgÞ‹‹Þ[µ8‹ÁÁV©©©ÄÄqÄíGššee}#Ð#’å¼¼88¼¼'z££¼¼ååã6‰‰Êkkk****z'ýPýªz'°°]Ù33Ùz''zi Ã?åå’'ÔýýûûººggœœœIïïÆÆÆÆÆÆ[[1Þœœ sIïÆÆ$Ñ$$5îîqqÄqq€Óýýhhh»ÇÇžKtt!!ææ¼ææææ{{{(ÎÎÎ{O¢¢õõõõõ‰‰‰‰³ 6‰¤QQþQQ((Éo°°°°¿llllll®®® [T [®ÔÔÔÔ««Ô".!X«".".!Ã!Ã"š"š!sÆ"I"I œ"I# !s"I"IÆ!s#ö#ö"I œ"Ý$Š$Š"Ý!0!0"Ý$Š#}%*#}#}$¿##$¿%*%*&×&×#}&×$T"§"<#é&l$¿$¿#%–"< ˆ"5# # "5#â# # !Ê!ÊF"  ˆ ˆ"5 ˆ!”!” ¾ ¾|!)"Ö"ÖFF ó ó ˆ ˆ ˆ ˆd!”!” ¾ ¾ ¾ ¾ ¾ ¾:!” R¥!)|!Ê F ó!_!_"5"5$ƒ!) R R"k"k ¾d!N!N w w ã ã¡¡ wÊ66 ã"Ö!ƒ ­ B B!k!!k!"Å!!ï B ' ' ' 'z '!Ô ' ý ýP ý£ ý!Ô#!ž!ž#KñññDD¼<âf0ÝrÅïœrr¥K"Ïc¶™ìÂWWííqÄíšÄqeeáŽee;;µµbµss  µbbßßµbÁëë©©Ù†©,Áëë;;eeí@íšš@ĦùvÐùL##Ò©üg‘‘>>ÁÞ‹‹Þµµ1ÞÁÁV©©ÄÄqÄššš@ee}}Ð#å’¼¼åå¼¼'z££88ã666ÊÊÊwkkk×ׄ*z'PýPýz']]]Ù33Ùz''zii?å’å¼¼ÔýýÒÒûûgg gœœïœïïÆÆÆÆss[[Þ1œœsÆœœss$w$$<<››ÄÄqÄÄÄÓ€ªªhhhÇÇžKttttææ¼ææ99Î({({{({¢õõHõõ¢¢6666``‰6þQ¤QQQ{{oo°°¿llll [ [ [®® [® ".".!X!X".".#!X #p í í!sÆ"I"I œ"I!s# "I"I!s# "I"I#ö"I"Ý$Š$Š"Ý!0!0!0"Ý%*&×#}#}&l$¿&l$¿%*(„&×&×%*%*$T"§%–'C$¿##$¿"<"< ˆ"5# # ˆ"5# # !Ê!Ê" " "5"5"5 ˆçç ¾ ¾|!)!)!)" "  ó ó ˆ ˆ ˆ ˆ ¾!”!” ¾ ¾"k ¾ ¾::¥ R!)| !Ê óF!_!_"5"5!)!) R R ¾ ¾ ¾ ¾!N!N w w ã ã!N!N"$ w666 ã!ƒÖ ­ B B!kkk¾k"Å! B• ' ' ' 'z ' 'z ý ý ýP ý ý '!Ôññ!ž!žññññ¼fûNÑ$ŠŠ00œœrrÅrœïÅÅr"""u ¶¶¶W..WW..qÄqÄííÄq#ÐLLŽ;¿JJ÷÷µµµµÍ ÷µbŒŒëëëëVVVÁëë©©©©ÐÐ}ÐqíšÄííLLLLᎎá>ëgºggºg©V©ü©ü‹ÞÞ‹‹Þµ[©Vn////²XXX}ÐÐÐÐ}}}zÔP£¼å’''ýýå’å8_ ããww¡¡•èBB••B•åå¼¼¼¼’’ÈÈžñ] +]]£ý'Ôiååi¼¼iýªýý===¨ûNN[„1Þ1ÆsIï„×11ÆsIœÆsœöúMú§úú~~YYYYYYY€ÓÓÓ‘>>>2ßßßttKK{({{99æ“{({{b¼æ9ËË6‰66õHõõ``` {{QQ¼9æòEEE‡4‡Ú„„××®*„!1„×ׄ×@ í!à  !Ã"š@!X!Xþ!X".".««!Þ!Þ"´!!Þ#‹#‹!Þ!Þ%8$a! œ"I# !s%Ë"q$"q$Š"Ý"Ý"Ý%*%*$T&'C#é&l$¿$T&&$T%*#}"§"§$T$T%*#}"<#é#é#é# !_!_&f"5"5#â#â" " "  ó"5 ˆ!_# !”ç"k ¾||!)!) ˆ ˆ"5"5pp!Ê#w!)!)|!)!)"Ö||!”!”ç!” ¾ ¾çç ó"   F" !Ê!Ê ¾ ¾"k!)!)"Ö!)!N!N¡¡ ã ã66"$"$!N¡ !¹ ã6)ÖÖ!ƒ ­ ­!ƒÖ!"žk ­ ­!i!i ’ ’¼!i#¼P ý ' '!i!i ’ ’!3†" " !3† \ \!ÔfûN$Ñ0000œœrrrÅœïÅÅÅ"""u¶cccW..WWÔ.qÄÄqššÄ#ЦL;Že¸JJ÷bbµµ sJJµŒŒ>>>>©©©Vgëë©©©©ÐÐÐ#ÄÄšíÄííLLLL;ŽŽáë>ggggüO©ü©V‹ÞÞ‹‹Þµµ©Vnnn////Ð}}}Ð}ÐÐ''P£¼å8zzýý’åå8_ 66ÊÊ¡¡B•BBï••B’’¼¼ååÈÈñž°]]]PP'Ôååi¼¼PýPP=û¨ûû[„11Þ[[sÆBœ1„11ÆsœïÆsïI§ú§úMMÑÑYYY³YÓ€ÓÓ>ë>>Œßß…ttKKÎ{ÎÎæææ9{({{b¼æ9Ëˉ666õHõõ`` `{{QQ¼iæ“òŸòò4‡‡4××××®®®„„„××ׄד@i  !à í íþ!X«##Û !X!X!Þ!Þ"´!!Þ#‹#‹!Þ#‹#‹"´"´#ö"I# !s Ä Ä"q$&7$Š"Ý"Ý#}#}$T&#é#é&l$¿$T&&$T%*&×$T$T$T$T#}%*#é%–#é#é# !_# $¹#â#â"5"5 ó ó" $M#â"5!_# #A!” ¾"k!)!)!)!) ˆ ˆ ˆ ˆ   !Ê!)!)|Ï!)|!)!)!”!”#A!”"k"kçç"  ó!Ê!Ê ó ó   ¾"k$&0"Ö"Ö!)!N!N!N!N""66 w w"û!N !¹ ã6Ö!ƒ)Ö ­ ­!ƒÖk!k!"Z"Z&p&p"?å¼!i!i!iP£ ' '¼¼ ’ ’†!3 \ \†!3 \ \ '<ûNÑ~00œïÅrrÅrrÅÅœI"Ï"u¶¶WªªWªWÄÄÄÄíšíšùùùùè;Žá  J¤bµµµJJJ2ßµb˜ë>ë©Vë˜V©ÐÐ}ÐGíííííùùùù¸eŽŽë>ggÒ%©üÒÒü©bµÞÞÞÞµµÒÒ©ÁnÜÜ‚/²XX#Ц¦ù¦ÐÐ''Pý’å¼PýPPå8__  ¡¡Êwkkkk¼¼¼’åÈnÙ†††''ýý¼¼i¼iýý'zºg==¨¨ÒÒ11„Þ11ÞÞ ïœ®®[II sœœssúúúúwÑúú000ƒ0Ý0ƒÓ€€Óëëëë¶ ß2!!žK¤¤÷Qææææ({¤¤ææ9æ¢õ¢¢ º`ËËËË``܉{({{“ææ“EŸòò‡Ú°®®® [®®®*×® [®® í“@@ í í!Ã!à ".þ««!X«!X 1!Þ!Þ 1!!"´!#‹#‹!Þ#‹%£#ö"I"I!›!›$"q!0"Ý"Ý"Ý&& ú$T#é%–#é%–&&#}#}&'®$T&%*%*$T&$¿$¿%–#é"5"5!_# "5%#â#â"  ó ó" #â#â"5"5"k"k ¾"k!ÿ#¬!)"Ö!_!_# !_!Ê!Ê"  ó!ÿ R"Ö| R R"Ö"Ö#A!”!”#A"k"k ¾"k!Ê !Ê!Êp!Ê!Ê!Ê!”!”'r1€1ë&0"Ö!)!N¡"$ w!¹ ã""$ w w w ã ã ã ã!ƒ!ƒ ­"Z"Z ­k!!!"Z!ƒ+‘4®4®%™ ’#ì"?å ’ ' '"ªP¼ ’ ’ \ \††††,†!Ô<û¨$Ñ00ZZœïÅrrÅrrÅÅïœu""uà:¶¶ªWªWWªÄÄÄÄ@íšG¦¦ùù;è;ŽssJJµbµµJJJߌµ>‘>ëÙ©V>ëV©##}К@ííííùùùùe¸áá>‘ggggÒ©üÒÒV©µ11ÞÞµµVVÁÜÜÜ/X#Ц¦¦S}}''ýP’åi¼P££ý’å¼¼ ²__¡¡Êwkkkki¼i¼¼å’Ù†ÙÙ''£ýii¼¼¼¼¼iPP'zºg==ûûÒÒÞÞ111111 œï®[IIs öœÆÆMMM§ÑÑMM000ƒ0Ý0ƒÓ€-€>>>>\ ߌttKžQQ¤¤99ææ{Τ¤æææ“õ¢H¢` ``Ë˳³Ü‰!Î{{æ9æ“òòEE‡4]°®T®®®Tׄ®““@@@@ #p ".!X«!X««!X#‹!Þ#‹!Þ!!$a"´!Þ%8#‹!Þ"I#ö"I"I!›!›"q Ä!0"Ý"Ý&7&&$T$T#é%–%–'C&&%*%*&'®$T&#}#}"§$T&l#%–#é#â#â$¹# "5"5"5"5$M" "  ó"5"5#â#â"k"k"k$#¬!ÿ!)"Ö!_!_# !_!Ê!ÊF ó!ÿ R"Ö|!ÿ!ÿ!)!)!”#A#A!”"k"k ¾!Ê !Ê!Ê!Ê!Ê  !”!”)=;B­3˜'Ý"Ö"û!N"$#Ñ#f!¹$=""$ wÊÊ66 ã ã!ƒ!ƒ ­$$ ­!kkk"Z#00˜BB1T%™ ’"? ’å ' '"ªP¼!iåå" " †"à!3!3††!Ôf¨ûwÑff<<<<00Ý0rrrŪW.Âì?àšGÄÄííqËqÄšš/ܵµµµµµŒŒßßsssÍbµµJJ÷JßßµµLùùL¸¸¸¸#v##vÐùùùŸ##gg‘‘©ü,ÒµµµµÞÞ,©©ëëëë‹Þ‹ÞÞ‹‹‹ÐЦS¦ù¦¦GGÄÄqqGGuññ††]°DžÈñD***×*×k••­­­­Dñnññýý'z£P'zz'zÔ¼¼’’''PPPP'zÆsIïÆÆsgg=ûûûN1„Þ1œœs[„Þ[1„0Ý000ƒYY<<<<ú§$$ÓÓ€€€Óýª  ¶cžžtt¼¼99¤Q(Î99{(þþËqË¢¢H¢––C–**®o°°Ú‡‡‡°]]4‡xx¢õxxxxãããããã `] + +]Èuu"Ï!Ã!Ã!Ã!Ã!à  í"š!!!"´"Iï œ"I"I#ö"I"I!Þ#‹#‹#‹ ú"§#}!Ð#!e#&l#é#é#$¿$¿$¿%–%–$Š&7%`#³%Ë%Ë#H#H"<#é#$¿$¿##é#é%$#w$M" "5"5"5"5$¹# ˆ"5"5"5#â"5#w%$#w!Ê ó ó!Ê#w#A#A!”#A#¬!ÿ!)!)!ÿ¥!ÿ R!”!”"k"k" "  ó" !Ê  #w"5 ˆ ˆ ˆ" " F ó!”!”%Å84>.ü$î#A!ƒ!ƒ ­$"Åk!"Å!!k"Å"Z ­ ­"Z ã ã !¹ ã" ã6 ã ã¡¡"û)¯:V:V+A"à \¯¯¯ññ ’ ’ ’ ’ ' '"ª"ª ’¨û$$<<<<00Ý0ÅÅŪWÔÂ?ì:íšÄÄííÄÄÄqšš‚/XXµµbµµbbßßßßµµµµ  ssµµJJJ÷ßßµµù¦¦ù¸¸¸¸#v##vvLLùùvvgg‘‘©VµµµµÞÞÒüVë똘ދÞ1‹81‹ÐÐS¦¦ù¦¦ššÄÄGGÈÈññ††°]ÈÈññÈDñ**×*}*k¾••­­­­DñuÈžžýý'zPýÔ'z'''¼¼8’''ýýýýÔ'sÆœœ sÆsggãûûûN„1Þ1œœÆÆ[11[„10ƒÝÝ0Ý<<ú§ÑÑÓÓÓÓÓ€ªW   ¶KK!!ææ¤Q{{ææÎ{QQËqË¢¢õõéC–é**®o°°Ú-ÚÚ°] +°Ú‡ËËõ¢xxxxãã66ã㺠] + + ·u!"!"!"!Ã!à #p !Ã"š í!!"´!"I"I œ"I œ"I#ö œ!Þ 1!Þ!Þ$T"§!Ð#}&l$¿###é#é$¿&l$¿$¿'C'C&7$Š#³%`$$#H#H%–#é#!e$¿&l#é#é%$#w$M" #â#â"5"5# $¹"5 ˆ"5"5 ˆ"5#w!Ê !Ê$M ó!Ê ç#A!”ç!ÿ R!)!)!ÿ!ÿ!ÿ R!”!” ¾ ¾" "  ó" !Ê#w!Ê!Ê"5 ˆ ˆ#â" "  ó" !”!”"k$$î#A!”#A#0#0 ­ ­kkk!!!!!"Z ­ ­ ã$=!¹#f ã" ã6""!N!N¡"û)”&:"à!3"u"u \¯¯¯DD È È ’ ’"?å ' '"ª"ª ’<ÑÑÑÑfff<âfÝ0Ý0Årœïªª.™™?ìàc¶¶ ÄÄÄqÄÄÄÄÄÄ//‚/ŒßµbŒßµµ®µŒßß99ßJJs͵µßßJJJ÷bbµ#ÐùLŽŽ¸¸v##vLL¦ùùLLù>>>>©©V©Þ1ÞÞÞ1Ò©V˜ëëëÞ1[Þ‹Þ‹ùù¦ù¦ùSùqÄššqqquÈȆ†††ññññDñ­SS×*•BïB××­DžžñDDžñzzzzPPPýPýýý¼i¼z''z'ÔÔÔIIÆÆIœïï==û¨¨¨11µÆÆœœ[[[YƒÝYéeeúúúMªªÓÓªªÓÓߌ¶¶ttKK99æ“({÷Q¼¼{{QQË¢¢ËËHHlT**ooɰ°°°]‡‡]°‡‡õõ¢OxË¢¢ºº `  ] +3àu!"#¦ L !Ã!Ã!à í í!Ã#p!"´!Þ 1 œ œ"I#ö!s# œ œ!Þ!Þ"´!#}!Ð$T"§%–#é#é#é#é'C&l&l(ð%–%–%–&7&7%`#³$'x#H#H##!e#$¿$¿###w%$#w#w$¹!_!_# "5#â#â"5²!_ ˆ ˆ !Ê ó" $M" " F ¾ ¾!”ç|!)!)!)!)"Ö!)|"k"k!”ç ó" !Ê!Ê ó ó ó ó"5"5 ˆ"5#w#w  #A#A"k"k ¾!”ç!ƒ!ƒÖÖ!¾•è B!ï!ï B"Z"ZÖ)"'—,ž,ž)D" 6 ã!¹!¹¡¡Ê" ¯¯ \"u"u#K!ž" " \¯!žñ8 ’!i!i"ª&(ˆ#"?ÑÑÑÑfff<<ÀmŠÝÝ0ÅIœªÔììì™à¶ ¶c::ÄÄÄqÄqÄÄÄÄÄ‚ÜÜ/ߌµŒßµµ[Œßßßßß÷÷  bßßJJJ÷µµbµ#ЦùáḸv##ÐùùLù¦ùLù‘‘>>©©V©1Þ‹1Þ1Ò©V˜ëëë‹Þµ‹Þ‹8¦¦¦ùù¦¦¦qÄššÄÄqÈȆ†††ññuñññD­SS„×BïïB××­žžž—DžžñzzzzPPýPP£PP¼i¼'Ô'ÔÔ'''œœsœïïï=ãû¨¨¨ÞÞ[ÆÆœœµµ[µ[Yƒƒ³³Y¸¸úúúMªªÓÓªª€€ßŒ¶¶ÎÎKKææ @“({þþ¼¼Î(þþxË¢¢ËËõõllllT**ooo°°°°]‡‡]°ÚÚOOO¢x %OO  º ``ãã] +3à!"u!ù!ù!Ã#p!Ã!Ã"š@#p%"´!!Þ 1"I"I"I#ö# !s œ œ#‹#‹"´!!Ð #$T"§"<#é#é#é#é#é$¿$¿%–%–#é#é$Š$Š%`#³$'x$õ$õ###!e!e$¿##&Ñ%$!Ê!Ê$¹!_!_# ˆ"5"5#â!_# "5"5 !Ê" $M"  ó ó ó$ ¾!”ç!)|!)!)"Ö!)|!)$ ¾!”çF ó #w" F ó óÛ"5 ˆ"5!Ê!Ê!Ê!Ê!”!” ¾ ¾ ¾!”#A!ƒ!ƒ#0Ö!! B!ï B!ï!ï B"Z"ZÖ!ƒ$=/ø? Bg:%ê!¹!¹ ã6 #f!N!NÊ w \ \¯ \"u"u!ž#K \ \ \" "u"u#K!ž ’ ’!i!i&3l7(ˆ ’fÑÑ$$<â<fm)(./(!h7Ýrrrrªª.ÔWWàà3K¥KKíšÄÄ/‚XšíÄíšÄqŒŒßŒs   bµµŒßߌ9ŒµµµbŒßbµJJ¤J¦¦Ð}LLv#Ꮈ¸ee¸eŽááá‘‘ëëÞÞÞÞÞÞµ©©Ò©©,,    bµÞÞ¦ Sù#Ð}}XX//°]†ÙDñ]]°]†3]°k¾kkkkk××­×××׆††ÙñD¼¼i¼’å’’''zzii¼i¼i¼i’’å’[„Þ11ÒÒ%Ò==IIœïÆÆÆsÆÆs IIssÄÄqqî¸e ªªhhžžttŒŒ¶¶ææ“æQQ¤Qææ¼iæ966``‰‰‰‰®––¿¿ÚÚ‡Ú°]]4‡]]]°°º`ã6 ºã6õõxxã6  uuÈuàà"d$".".!X#".Ô!X#"´!!"´ œ œ œ"I"I œ!s# !s!s!s# $¿###"§$T$T&#é%–%–#é%*%*$T$T%`%`""$Š$Š#³%`"<"<#$¿#$¿%–%–%#â# !_!_# # !_" " !Ê  !Ê#w!Ê!_!_²# óF ó" #A#A ¾ ¾#¬!ÿ!ÿ#¬!”ç"k ¾"Ö!)|!)!Ê!Ê!Ê!Ê# !_"5 ˆ   !Ê!Ê#w!Ê!Ê"k ¾çç!”ç!”!” B!ï!ï B B Bk"Å!ƒ!ƒÖÖ ­ ­Ö!ƒ%5ÕDGn>¡'+"$ w!¹ !¹#Ñ"$ w w È"u!žñ \¯†!3 \¯!3!3"u"u"u ȼ!i ’"?#*5+â%.¼ÑÑÑÑ<é)(>ñGRA?)ÉŠ0rrrrªªWWàà3øøKK@íÄÄ‚/XšíÄšGqÄŒŒŒß s  bµµŒßߌߌµµµßŒbµJJJJùù#ÐLLv#Ꮈ¸¸¸¸eᎎŽëëëëÒÒ‹‹ÞÞÞÞµ©©,VV  ssbµ‹‹L¦ùùÐ}**²²//°†ÙDñÈÈ]]°]Ù†]°k¾ÅÅk××­××*„ÙÙ3†ñDii¼’?’’ÔÔ''ii¼¼¼i?å’?µ11[[Þ„%Ò%gg==ïIïœÆÆs ssÆsœœssÄqÄqqî ¸<<<ÓÓªªÂhKKtt22¶¶æææ9QQ¤Qææb¼b9æã‰``‰‰66®éé¿¿‡‡‡Ú]°°°‡Ú°°]°°  ã `‰6¢¢xx ãº`ÈÈÈu#:à + · !X##Û !X«!"´"´! œ œ œ"I"I#ö$Í# # # # !s#!e##$T"§$T"§%–#é%–'C&×&×&&%`%`#³#³$Š$Š#³%`#é#é&l$¿$¿##é#é#â"5!_# # !_# $¹'§+%$#w#w!Ê !Ê!_!_!_!_F ó óF!”!”"k"k!ÿ R!ÿ#¬#A!” ¾|!)!)"Ö#w#w #w# !_"5 ˆp!Ê !Ê !Ê#w#w"k ¾!”!”!”#A#Aç• B!ï B!ï!ï"Å"Å!ƒ!ƒ!ƒ!ƒÖ!ƒ!¹(m4ÿ;³2æ%~"$ w#f!¹!¹ "$ w w w"u ÈDñ¯ \†!3 \" "à"à$" È"u ȼ!i ’"?!Ôz ' '!if¨û$ÑfffÀ)(@žE¥FF3×arrœœWWWªÔàøø¥øÄší‚ÜXXšíšGššššµµµµJJÍÍŒßߌŒßµµŒßµµµµµŒßŒŒJJ Í}Ð#Ð#v#и¸;Žeee¸áááŽ>ëëëV©ÞÞÞÞµµµµÒ,©V  s bb‹‹}}ÐÐ#}}}XÜÜÜ/²†Ù†ÙDñÈÈ]]°°†3]]B•kBBkk×ׄ„„×­]]†ÙÈÈññå’ååiiýýÔ'¼¼¼¼¼¼å’’’ii1Þ®ÒÒ¨¨===ÆÆœœïœÆÆœœïœœœœïîîÄ›HH e<<<ªªÓ€ë>˜ët!Kž  ŒŒææ9æQ¤¤Qbb“æ66`³‰ã66××*׿l––]]‡ÚÚ‡‡‡°°°°]]Ú‡ ` º66Ü6xxOO 6ããu"Ïu!"!! · + ".".".#!X". "´!"´!ÆÆ!sÆ!s$Í%£"I"I"I# !s#!e#$¿&$T$T$T&l$¿#$¿&×&×$T&%`%`&7$Š$Š&7"#³"<#é#é%–#$¿&l!e# !_# # #â"5"5(é3b8i2Œ+Ø$M"  ó ó!_!_ ˆ ˆ ó ó ó ó#A!” ¾"k!ÿ!ÿ$ƒ"Ö"k"kç!”!ÿ!ÿ!)"Ö#w#w ó" "5"5"5"5 ó ó ó ó!Ê!Ê#w!Êç!”"k"k#A#A"Å!"Å!!!"Å"Å ­ ­Ö)Ö!ƒ""%(m%~ w w w!¹!¹ ã ã¡"û#Ñ wññ \ \"à"à \ \" #¶$øñ È È¼!i!i!i#!Ô ' 'åfû¨$ÑfÀ/Ü;—71$ÂZZÅÅœœWWªW...3àøøøKÄší//XXšííšššššµµJJss2ß2ßߌµµ9ŒµµµŒß22JJ s}Ð#ÐÐ#v#¸¸4Ḹe¸ááŽ;ë>>>ü©ÞÞ11µµµµÒÒÒÒ©V  s µµÞÞ}}}}ÐÐÐ≉Ü/²3††3žñÈÈ]]]],3°°•BÅBBkk×ׄ„„×S]]3†ÈÈDDå’åå¼¼¼¼PPÔiiiiii’å?å¼¼[[Þ1®ÒÒ¨¨ê===ssœœœïsœœœïœœIœîîqÄ›H››ee¸<<<ªªÓ€ë>ë>ÇtžK¶¶Œ2999æ¤÷Q¤¼¼“扉`³66‰‰×××*Cé°°4‡Ú‡‡‡]]]]]]‡Ú ` `6666xxOõ ãã!"!"!"àà · + ".".".!X##Û"."´$a$a"´!s!s# !s# )Ô*ª#ö#ö'P# !s!e##$¿"§$T&&$¿&l&l$¿&×&×&'®' ' &7$Š$Š&7#³%`#é"<"< !e&l&l$¿$¹# # # "5#â%2÷D$EÑCN2Œ$M" " " !_!_"5"5" F ó$M#A!” ¾"k R#¬"Ö!) ¾ ¾ç!”!ÿ!ÿ!)"Ö!Ê!Ê"  ó"5"5 ˆ ˆ ó ó" " !Ê!Ê#w!Ê!”#A"k"k#A#A ¾ ¾!"Å!k!!!! ­$"Z"ZÖ!ƒÖ!ƒ""!¹!¹ w"$ w#Ñ!¹!¹ ã ã!N!N w w!ž!ž"u"u" " !3!3 \ \ \" !žñ È È¼!i!i!i!Ô# ' '"??Ô.Ý0Z´´$Â"tÀff<<ffÔÔ.™ìààà¥øÏ"ªªªªààKKuu"ÏKø™ìh.ÛrÅÅÝÝZZ0Ý00rÅÅŨ¨û¨ÒÒÒÒO©©©sÆÆÆðJJÐ#ÐЦù##ÄÄÄÄÄqqÄqqšš«X//¦Sù¦¿ e÷J   Í÷÷,ÙVÁë˜Z´ÝŠ´´››H›aÝ0ÂÂÂ...ìì™™WW.rrÝÝ´´›õrrr™™ÂoooÏÏ||¥øøøî›››ÄÄÄq<<<ë>h>‘hh>‘>‘ªªýª%¨ûgg===g=gggg=êgggêT**TT66`  ³  ‡ÚÚÚoo‡ÚÚÚÚÚ°°òò‡Ú]°‡‡‡‡‡‡‡‡QQQQ擼¼((((!‚ÕÕ( Äj Y¬" Y!0!0!0"Ý Ä"q"q"q!0"Ý#³" Y"#³""' (º#³#³%`"Ý"Ý%E#˜#˜#˜"W"W$%±&½&½%&½%æ%æ%æ'“&ò%E%E%E$$%±%±%E#˜#˜#˜#-$Ú$$$"W"W$ ª ª#--;=’EóCo1$Ú#-$"W#³#³"""q Ä$!›!›"q Ä!0"Ý"#³"Œ ß!¶!¶"! t"!"!!€#-!€Óý ª$ ª!›!› Ä"q$$$"q #é#!e"<"h>‘hh‘>ë>ªªýª%%û¨º===g===ê=ggÁ!n#gT××®T66` º`  4‡-‡ÉoÚ‡ÚÚ‡‡°°EEÚ‡°]‡‡‡‡‡‡‡‡QQ¤¤æ9{{((!‚Õ(Õj Ĭ Y Y"!0!0!0"Ý$"q"q"q!0"Ý" Y¬ Y#³""#³#³""#³!0!0%E#˜%E%E$$$%±&½&½%&½'“$9$9%æ&ò%E%E%E%±"W$$!ë#˜%E!ë#-$Ú"W"W$"W$"W"W"W#-#-.}6Þ1(Ÿ!€#-$"W#³#³"""q"q"q#Hî"q ă!0"#³ ß"Œ!¶!¶"! t t t#-!€!€#-"W$"W"W&¢#H"q Ä"q"q"q Äââ¸!e !e!e!b!b##µµ ‹"8"Ù!, V#° V©"©J ÷#z!Í##"8Þ V V!,!,!,!,"" q q"Ä!G!G!Gš Ü// Ü#_#_!²% #*#* ¦ ¦ ; ;d!Ä쪪WªZ00Z<<<.ÔÔ?ì¶¶KøKžˆ'–%éWàà¶¶ ¶""øøžKøžì™ÂÂ.WWœœrrÝ0ÝÝÝÝZœœœœ¨¨ÑÑüüüüÒÒ©©ðJ  ####¦LvÐqÄš@ÄqqÄqqGG/‚²}Ц¦;è¤÷ sÍÍJJ©©ë>>ëÝŠŠÝrrÅ0Ý´Âì쪪W™™™ì.ÔÅÅrŠ0Z´H›HHrõHFFÂÂoì™Ï|Ï|R¥ø¥››Äq››››â5⸸¸ hÂ>‘hhë>hªWªªûûÒgºggggg=ê====ggg!n!n==gº*„××    º`66‡4° +ŸŸEò°‡‡] +ÚÚE˜oɰ] +]°°4ÚÚ‡°°({((“æ“æQQQQÕÕ{Õîî Ä Äƒƒ""!0!0 Y Y!›î!›!›!0!0"" Y"#³#³!0"Ý"Ý"Ý"Ý"Ý"""Â!$o&#-!€&‡&‡%#c%(j'“%æ%%%E%E$o$o%±$$$!ë#˜%E#˜$Ú$Ú#-$Ú&‡#-#-#-"W"W!€!€%E(Ÿ&"Â!€#-#-!€"Ý"Ý"Ý"Ý"q$!›!›"q$"q"q Y Y#³#³ ß"Œ!J!J"!"!#-!€ ª"W#-#-"W"W$õ$õ$õî Ä!›!›¸#!e!e!e!eââ ‹"8#å"8 ‹ ‹!b#"""" V V!,!, ÷ ÷#å"8#å"8!," V V"""Ä"!G!G" qÄ q!²!² Ü"‰'%ã"‰"‰!}#*!}Ð"¾"¾ ; ;"ìWWWª´00Z<é<<<<.?ì¶¶ààKøøK...5'–"Wàà¶¶c¶àà""KKKø¥Kì™ÂÂ.ªªIIrrÝ0ÝÝÝÝ´œœœœ¨¨ÑÑüüüü%%üü÷J÷J  vÐ##ùù##qÄššqÄÄqqqšš/‚²Ð#ùù;è¤÷ Í  JJVVVVë˜>ë´´ŠÝÝ0ÅÅrÅ0Ý´ÂììWWWìFì™..rrrÅ00HõHHrõHFFÂooÂì™Ï"Ï"¥øø¥››ÄHîîîâ⸸¸e>‘hhë>hhªWªªûû%Òggºººgg=êêgº==g××××    º`‰ã‡Ú°°EEòE°]‡‡°ÚÚE˜°]]°‡‡‡4]]({((æ““æQQþþ(!‚((A!› Äjƒƒ Y Y"݃ Y Y!›î#H#H"Ý"Ý"" Y"#³#³"Ý!0"Ý"Ý"݃"""Â!"Â!#-!€$Ú$Ú%&½%%$9"Œ%%%E%E$o$o%±$$$%E#˜#˜!ë&‡&‡&‡$Ú$Ú$Ú$Ú!€"W"W!€!€!ë!ë$o$o$Ú&‡#-!€!0$Š"Ý"Ý$"qî#H"q$"q""""!¶!¶"Œ$9!J!J t t!€#-"W ª#-#-"W"W!›!›!›î Ä"q!›!›!e!e##!e!e"<â"8#å"8#å"8"8!b#""""""!,!,!Í!Í"¤JÞ ‹"8 ‹!, V"" V"" q q!G!G" q" q   Ü"‰$6%ã"‰"‰Ð#!}#*"¾"¾!è!è"Wìì??rÅœœ­Z$$¨¨f<<ì™oÂììÂÂ¥KKKKø""WW.óFohKøøKÏ"uuÏ"KK:c¶ÂoììÂo™ìÝ7´ÅöIrœIÝÝ00<<<<%%ü©gg>>1ÞµssJJ¸eŽŽŽŽŽŽ//X²Ü//‚X²²¦¦ùù¿¿ÍÍ÷÷µµ‹‹ëëÁnnn˜ë´a´rrrrÝÝÝÝWW.Wooì™ÂÂÂÝÝ´´00ÝÝŠÝ´HõõHÛˆ..::¶cÏÏ¥¥îAÄÄ00ƒ0Múúú⪪€Ó&&Ó€ÓÓÓÓÓ€€€g= —==gggg==ûûÒgg==û¨û¨û¨¨U×*T®  66xx¢OŸòoooE˜É vòòÂo‡Ú°EòòEEòŸŸþQ((¼¼¼““iiQ «þþî!›ƒƒ Y Y Ä ÄA!›!0ƒ""!›!›!›#H"q"q!›!›#H!›!›!›#H!›"q"q"W ª#-#-#-#-$$%&½%%"÷"÷$¤'þ&&$o"Â%±%±$Ú$Ú%E#˜#˜#˜$o&&ò%E$$$Ú#-!!"Â"Â"W"W"W"W$o!!"Â"Ý"Ý"Ý"Ý%`"ƒ"Ý!0"Ý Y#³"q"q!›!›!J"÷$¤$¤"÷!J"!"!!!!ë‘"W"W!€$Ú"q$"q"q Y"" Y "<">1Þµsse;;ŽŽŽŽ//XXX²Ü//ÜXSS¦¦¿eÍÍ÷÷µµ88ëënÁÁÁ˜ë´a´ÅÅÝÝÝÝWW..Û.W™ìÂÂÂ0ŠÝÝŠŠŠÝ´H›HõÛ.ÛWW::cÏÏøø›îÄÄ000ƒMúúúââ⪪€ÓÓÓÓ€ÓÓ€€€Ó€€g==êê==gggºg==ûû ,==Nû¨U¨ûû¨×*T® [``66ËË¢OŸ!LÉÂoÉòEÉòòɇڰEòŸòÉÉEòòòþQ{{¼¼bæ @iiQQQ «î!›!0!0 Y Y Ä Ä!›!›!0"Ý#³#³#H&¢!›#H"q"q!›!›!›#H#H#H#H$õ$$"W ª$Ú$Ú$Ú$Ú%±%±%&½%%&Q"÷$¤'þ'É'É$o"Â$$$Ú$Ú%E#˜%E%E$o"Â%E#˜$$$Ú#-"Â"Â$o$o$ ª"Wý!!h!$Š$Š!0!0"""Ý&7$Š"Ý#³#³"q"q!›$õ"÷!J"÷"÷"÷$¤#Î#Î!! > >"W"W#-#-$"q Ä Ä" Y"#³"<"<"<"<#}#}"§"§!Í !Í!Í"8 ‹!b!b!,!,!,"Ù"n"n!˜!˜$¼!b!bµJ ÷#z#z"#°"""n Áëë Ü"‰"‰"‰!²!²!²!² Ü Ü  ""!G"ô!è!è!è#•"¾! ;!è!GÂÂÂrÅÅr00ZZû¨Ñ$f?ììì?ìÂÂ""Køu"""ììÂÂ"""Ï""øøøø""¶¶¶¶ÂoììoÂÂZZIIrrœIIœ0Ý00<<fÒÒ%g>>ÞÞ[ð𸠸e;;ŽŽ²/ÜÕ(Ü/ÜÜ////XX}}¦¦;è¿÷J  µµ‹8nÁÁÁëëÁÁŠÝ00ÅrrÅ0Ýa´´´..WW™™ÂÂìì0ŠÝÝ´ÝÝÝÝÝŠH››õˆWÛ.Û.::cøø"Ï››Ä¬YYúM$Ñe¸âªªÓÓªªÓ&ýª€ÓWýªªê====ºggg=ãgg%ûûggggûûÒ¨ûÒ [®*××*  ``õ¢ËËoòòooòŸŸòÉo‡‡‡ÚÉòE˜òEò({{Îæ“¼¼¼¼““þQ((A!›î¬ YAî!›!›""$Š$Š"q$#H#H$õ#H#H#H"q$$"q#H$õ$"q#-$Ú$%±%±$$Ú&‡&½%$9%æ&Q&Q'('(&&%E%E&‡&‡'^%±&ò#˜$o&%E%E&ò#˜$%±%±"W#˜%E#˜%E%± ª!€!€"Â" >!ë#³#³#³#³%`#³%`%`#³""Ý"Ý#H!›!›!› t"!"÷!J t#Î"÷$¤ >!ë >#˜!€!€!€!€"q Ä Ä Ä"Ý"Ý Y"###$¿"§"§"§$T!Í!Í#z!Í#å ‹!b#"Ù!,!,"Ù$ò!˜"n"n###å"8!Í!Í#z!Í!,"Ù""!˜ë Á"n!²!²"‰ Ü Ü"‰ Ü Ü X Ü/íš" q ; ; ; ;"¾! ; ;".oÂorÅÅrÝÝ´´¨ûÑ~Àff?ìììì™o""øKÏ"""..ììo"""Ï""øøKKuu¶¶cco™™ÂÂZ´œöÅœïIœ0݃Ý<<fÒÒg>>11[JJe¸e;;ŽŽXÜ/‚//Ü//////ÐЦ¦è;¿÷JÆ µµ‹8ÁÁÁëëÁÁÝ000ÅrrÅ0Ý´´´..WWWWÂo™™ÂÂììÝÝÝÝ´ÝÝÝÝÝŠH›HHÛ.WÛ..Ûcøø"ÏîîĬYY¬Mú$ÑeâPªÓÓýý€ÓýªÓ€ýýªª==gº==º%%¨¨¨¨Ò%û¨Ò®*×„×  ``õHxoooòòoEòoÉŸòoo‡‡‡ÚÉEò˜òooòŸ{({(“æ¼¼¼¼““þQ(!‚îîî¬ Yî!›!›!›"""Ý"Ý$"q!›!›!›#H$õ$õ"q Ä Ä"q$õ#H"q Ä#-$Ú%±$%±$$Ú&‡&½%$9%æ&Q&Q'('($o$o%E%E#-&‡%±$%E%E&$o&ò#˜#˜#˜$"W$$#˜!ë!ë#˜$"W#-#-"Â"Â#˜!ë#³#³#³#³#³""""#³"Ý"Ý!›î!›!›"!#Î"÷!J"!"!$¤"÷!ë#˜#˜#˜!€!€ÓÓ Ä"q"q"qƒ"Ý Y"!e!e!e#$T$T"§ ú!Í!Í!Í#z"8"8!b#"Ù!,!,ëë"n"n###å"8!Í!Í!Í !,"Ù""!˜ë Á"n   Ü/ Ü"‰ Ü Ü!²  Ü"‰íš q"!è!èŽ!è!"¾!è!è qà:Ñ$ûU<<ffrrÅÅIœÅÅhh..u"""c¶¶¶¶¶¶¶àà¶cKø¥øªª..™ìììììrrIIÝÝ00ûN¨û¨¨¨¨ŠÝ1Þ1ÞJJ‘‘>>ÁgXÜÜqqší¸eee;;Žè¦¦¦ù¦ù¦¦GGšíšGqqµµµµÞÞµb©©V©,r››ÅrrrÅrrÅÅrroo™™WW..ccøø"Ïé<ééfff´´ÝŠa´´´WF™Â..ÛÛ..WÄÄÄÄúMw$ú§$$Ó€Wý€&ýª€ÓýªÓ&&&=gûûûûûûÒÒÒ ÆsÆI!£!ÙûûÒÒÒxËxËËx % %ð–l ÆC–CCòEoE˜]]]°Eò˜Ei¼ææÎ{QQÚÚ°]°°‡4QQ¤þþQ¤Q¤QþþÕ(ÕÕj Ä"¬ƒƒ"q#H#H"q"q!›!›"§ ú"§$T"<"<#é"<$TM ú ú!Ð#}$T"§$¤$¤"!#Î$¤$¤&Q&Q%&½%%%{%{$¤$¤%±%±'^'^$$"W$$¤&Q$¤$¤&Q$¤#Î#Î%±'^%±$$"W#-#-"Â$o$o"Â"Â"Â#˜#˜#H!›#H$õ"q"q#H#H"<"!ë#-#-$"W!ë >!!%E#˜!"Â!0"Ý"#³"Ý"Ý"Ý"Ý!0"Ý!0"Ý#³" Y Ys!Í!Í#z!b!b"8"8 ÷"¤"¤J!Í!Í#z!Í!˜!˜"n Áë!˜#E>!Í#z!Í ÷"¤ !Í#*!}!}!} ¦"S"Sùšš!G$¡!²!²"‰"‰!è#•Ž!èdd!! ¦ààààÑ$¨¨éérrÅÅœIr"u""c¶¶¶àà¶¶¶¶¶cKø¥øWW..™ì™™ììrrœœ0000¨ûû¨¨¨¨¨Ý0Þ11ÞðJ>>>>ggX//ÄÄ@í¸eee;;;;¦¦S¦ù¦ùùššíššGqqbbb8Þµb©VÒrÅHHrrrrr™™WW¶¶øøÏ|é<ééfffaŠÝ´a´´W™FÂo..ÛÛÛWÄÄÄÄMú$wMúÑÑ€Óªª€&ýªÓ&ªý€ÓÓÓ=g¨¨¨¨¨¨Ò%%ÒÒ%ÆÆÆÆÆII¨N%ÒxËxËËxx–––éC!òEoŸò°°°]òŸòE¼ææ{(¤¤--°°°4 áþþQQQ¤Qþ¤QQQ(ÕÕ{j Ä Y Yƒƒ Ä Ä!›!›"q"q!›!›$T"§"§$T"<"<#é"<"§ ú"§"§#}%*&$T&Q"÷"!#Î$¤$¤$¤$¤&½%(j%%{%{$¤$¤$'^$$$$%±$&Q$¤$¤$¤&Q$¤#Î#Î$%±%±$$"W$Ú$Ú$o"Â"Â$o!!#˜#˜!›#H!›#H$$#H#H"<"<#!e!e###$o" >!ë#-#-"W ª >!ë"Â"Â#˜!ë!"Â"Ý!0"#³$Š!0"Ý"Ý"Ý!0!0"Ý" Y""!Í!Í !Í###å#å"¤ ÷"¤"¤!Í!Í#z!Í!˜!˜"n Á!˜#E!˜ë !Í#z!Í ÷"¤#z!Í!}#*!}!}ù ¦"S"Sšš!G!G  "‰"‰#•!è ;#•"¾"¾dd"S  ¶ààÑѨûéérrrrœïrÅììWªªWøKu":à¶c:ààà¶c¶c¶cuÏøK.WW±Â™ì™ìì?œ00¨¨¨¨¨¨~Ñ´0Ý1ÞssJð>>‘>ggÁ/Ü//qqÄÄee¸eŽ;Ð}S¦#ÐùùqqÄÄšíGGbµbbµ‹‹,Ò,,ÒH›HHHHrr›îrrH›ÂÂÂÛÛWW¶¶¶¶Køø¥<<fff´´Ý0´ÝÝ..ÂÂÂÂ.Û.›îÄ›îîîw$úM$$Ñ$€€ªªªýýªÓÓªýWªýýêê==¨¨ûû¨¨û¨%%¨¨œœœIÆsII¨û¨ûN¨O¢O¢¢¢O¢––CC–– Æ"sÉÉoÉo--°òŸææ“椤{ÎÚÚ‡44‡{{({QQQQ{({{(Õ({jjAAÖ!0¬ Y Ä Ä Ä Ä"q Ä"q$&"§#}!Ð#é#é!e!e#}!Ð$T$T%*#}!Ð#}#Î#Î$¤$¤$¤$¤'(#Î&½%(j&½'('($¤$¤%±) $Ú&‡&‡#-$%±#Î%{%{%{&Q$¤"!"!$%±#-#-#-$Ú$Ú!€#˜ >"Â"Â!!!ë#˜#H$õ#H#H"q"q"q"q##!e¸ "<"<#é$o!‘ > ª"W#-!€h!#˜#˜#˜#˜"Â"Â#³"!0!0#³""Ý"Ý" Y"""Ý"Ý"#³$Q"¤"¤ ÷"8#å"8"8"¤"¤$Q"¤#z!Í!Í!Í#E#E$ Á Á Á!˜!˜ ÷ ÷"¤J!Í!Í!Í Ð!} ¦"S ¦ ¦!}!}!G!G!G!G  !²#_!!!"¾!è!è!è!è#*  ¶33ÑÑû¨<<ffrrrrœïr™?ýªªWøKu"àà¶càà¶  ¶¶cÏÏ¥øÔªªWWWoÂì™™ì™ìïœöœÝƒûû¨¨¨¨~Ñ´0Ý1ÞÆ Jð>>‘>g‚/ÜÜqqÄÄeee;èÐ}¦ù#ÐùùÄÄÄšGGGbµµµbµ88ÙÒHõHHHHrr›HÅÅHõÂÂÂo..WWccccøKKøéfff´´Ý0´ŠŠ..ÂÂÂÂÛ.WWÛ.AîÄH›îî$ѧú$$w$&€ªªªýýª&€ªýWªýý¨NûUûûû¨ÒÒûUœœïœs œœ¨û¨ûûû¢õõ¢¢¢¢OCC––ðð$ )'"#ÉÉoooo--°Eòooæææ“QQ({]]‡‡4‡Ú‡((Î{QQQQ{((((Õ{(j Ä”î!0!0¬ Y Ä Ä Ä Ä"q Ä Ä"q"§"§!Ð#}"<"<###}%*"§"§!Ð#}!Ð#}"!%{&Q&Q&Q&Q'('(%&½(j&½'('($¤$¤'^'^&‡$Ú$Ú$Ú$%±(Õ'(%{%{$¤&Q'(#Î$"W#-#-#-$Ú#-#-!ë!ë$o$o"Â"Â#˜%E!›#H!›!›"q"q Ä$###!e"< "!ë"W$!€Ó!" > >#˜#˜!!#³""Ý"Ý"#³"Ý"Ý"#³""$Š$Š#³""¤ ÷"¤ ÷ ‹"8#å#å"¤"¤"¤ ÷%'#z !˜!˜$ Á Á Á!˜!˜ ÷ ÷ ÷ ÷ !Í Ð!} ¦"S ¦ ¦!}!}"ô"ôš"ô   !²$k!!"¾ ; ;!è!è!}uàà¶¶<<ff¹fœIIœrrIIìììì?ìììc¶cc:¶¶àà¶c¶¶à3¶¶cc.ììWWWW..ÝÝÝÝ´´ZÑÑ+~¨UÑÑrÅÅr[Þ1[g>>ÒÄÄšš//XX¦¦}}ÐЦ¦è;Lù¦¦ôGGšššššbµµµÍÍ÷¤˜ëÁnV©,r››ŠÝÝ0´´ŠÝŠÝWWWWøK""   ¶¨û¨¨Ñ~¨¨ŠŠÝÝa´±..Âì™™™Â™™™ìîî›îî›îî<â<<<e¸h>>ÓÓýW€€€€>ëhggg¨û%ÒÒÒ=ê=ÆÆÆÆêÒ¨¨xËx㉠ ll––#J(Q-X2_'•"Ž4Ú°°°--ÚÚo˜ë¤¤{({ΤQ]°44°°]Õ({{¼¼ææ““ @“{(({ÿ¬ÿ Y Y Yƒƒ!›A Ä Ä"""""§"§!Ð#}"<">ÒÒÒÄÄšš//ùù*ÐÐЦ¦è;ù¦¦¦GôGšGGššbbbÍÍJ÷˜ënÁ©V,rîHZZŠÝÝŠ´´ŠÝŠÝWWKøÏu¶¶ ¶û¨¨¨Ñ~¨¨ŠŠŠŠ´WÛÛoÂì™™™Âìì™F›››îîAîî<â<¸eh>>ÓÓýýÓÓÓÓ>ëhgû¨ÒÒ%ÒÒÒ=êê=ssssµµ====Ò¨¨xxxË66  ll–ð)þ5¹>?Ç4ý)B"Ž4]°°°‡‡ÚÚÉòE¤¤{({ΤQ°‡‡]°°]({{{““““ @“(Õ(Õ¬ÿ Y Y¬"!0Öîî Ä Ä¬"#³#³$T$T#}%*"<">ÁgqÄÄÄÜܲXùù¦ù¦¦¦ùè;;èÐ}ùùÄqššÄÄÄÄ‹‹‹‹JJ sÁÁ,,VVHHÅr´Z´Ý0´ZŠÝ.....ÛW""Ï"¶c:¨~Ñû¨Ñ~´´´ŠŠŠÝW..ooÂFì™ì™™ì™qqÄ››î›¸¸ee¸¸â>>»ÓÓÓ&PªÓÓä‘hÂggg¨¨Ò%%Ò%ÁÁgsÆœI#¼"ÞÞg ,ÒÒÒOOxË`º `–Cð&¤35BJF{H(Dè:Ú,œ"Ž4Ú°°°]°oÉòŸQ¤¤¤ÎÎ÷Q‡‡°4‡‡Ú{Τ¤µbæ“i¼iþþQþ" Y!0ƒ Y¬ƒÖîîîîƒ"Ý"Ý!0$T"§ ú"§#é#é"<"< #!Ð #v #!Ð"§"§#Î#Î&Q&Q&½%$9%æ%æ%æ%(j(Õ%{'('('É'É&ò%E&&&&$¤&Q$¤$¤%æ%æ%æ%æ&‡&‡$"W$"W#-$Ú"W ª!€!€#-!€#-&‡&7$Š#³#³#H!›!›#H"<"<##"§"§!Ð#}"W ª$"W!€!€"W ª ª ª ª ª!"Â$o$o$õ#H$$!›#H Ä"q"Ý"Ý!0!0"Ý"Ý"""8"8"8"8 ÷J !Í!b!b"8#å#å"8#å"8!˜!˜#E#E V V!,$†!Í!Í ÷ ÷"¤ ÷"¤ ÷Ð!}!}!}!}Ð"S$ q" qÄ Ü/!²  ¦"S!}Ðdd ;!è!žà¶¶âé<✜ÅrœœœœÂìì¶¶ccc ¶¶¶¶¶c¶¶¶àà::WWWìì.WWW.ZÝÝ´´~~UU~$ÑÑrIIÞ‹ÞÞ[‘‘qÄÄÄ‚Üùù¦S¦¦ù¦;èè;Ð}ùùÄqššÄÄqq‹‹88÷÷ snn,,VVõõr´´´aÝ0´´ŠÝ.....W""|Ïc:ûU~Ѩû$Ñ´´´ÝÝÝŠW..oÂÂìì™ììì?ìÄÄÄîîî›  ee  â‘ë&&&Óýý€€ë>hhºggg¨NÒ%x%%%gggsÆïœ b"‹1ºgggÒÒ¢¢ %x   `ð!&¤0²BJGQF{H(F•F•:)B"Ž4]]°°]òŸ¤÷¤¤{{QQ‡‡°‡Ú‡Ú{(QQ¼“æi!iiþþþ « Y¬ƒ!0" Y!0ƒAAî"Ý!0"§$T ú"§#é#é #é%*#}#}!Ð!Ð#}"§"§#Î#Î$¤$¤%&½%æ'“$9$9%(j(Õ(Õ'('('É'É&ò%E&"Â&&&Q$¤$¤$¤%æ"Œ$9$9$Ú$Ú$%±$"W#-!€$%±#-&‡&‡$Ú$Ú$Ú"Ý$Š%`%`!›#H#H!›"<"<##"§"§!Ð#}$"W$"W!€!€$"W"W%±$ ª"Â$o$o$o$õ#H$ Ä!›#H Ä"q"Ý"Ý!0!0"Ý"Ý#³#³ ‹#å"8"8 ÷"¤#z!Í!b!b"8#å#å"8"8#å!˜!˜ëë#° V!,!,!Í!Í ÷ ÷J ÷"¤ ÷!}#*!}!}#*!} ¦"S q" q""‰ Ü!²  ¦"S#*!}!! ;!è!¨¨ûûZZZ00Z000ÝfÀfûû$ÑÑ~¨û$ÑÑÑffff<<<<œIÅÅ´´ZÛ.ªììì™WWªžø¥KK¥¥ø..W™™Â¶càà‘‘>>>>gÒÒ>ë>>ÁgüVµ8‹    J÷J÷÷ssV©ÒÒ,,¦S}ÐŽè²²Üܲoo™™ÂÂoo™™oo™™ÝÝÝÝ›HrfÀ–<ûû~~WWÂÂoøKø¥:¶´´ÝÝÅÅr¨U~Ñfƒƒ¬Yîîîîw$úMw$$Ñžø!t2…2ß \2ßÇtžDººg=ºg[[ÆÆÆsgggêêºïœss11µµ4‡]]òòÉ «%²/À;{EôG¡G¡G¡F•HBC;4&*% á4 +] + +òòÉÉ¢¢Ë¢¢ËË `‰‰ËËËË4‡°]ÉÉÉÕÕþþ{{{()!0" Y!0Öƒƒîî Ä"q Ä!J$¤"!#Î$9"Œ$9%æ'(#Î"÷!J"!"!!J"÷$¤$¤#Î#Î%æ'“%æ'“%&½$9$9'('('(%{%–'C%–%–%–#é%–%–&l$¿&l$¿$¿$¿&l#$9"Œ ß"Œ"÷!J"÷"÷"Œ$9$9$9"÷!J%{#Î"Â"Â#˜!ë#˜#˜%E%E"Œ$9$9"Œ#c!¶"Œ ß!e$¿##"<"<"< "q$"q Ä"q"q#Hî#}#}"§ ú!Ð#}!Ð#}" Yƒ"Ý"Ý"Ý"Ý$Š!Í!Í ÷"¤!b##!b"8 ‹##!Í!Í"¤ ÷!Í!Í!Í ‹"8!bµ"8#å ‹ÞJ"¤ ÷J ¦$ ¦"S!! ;!è#_#_"‰ Üš"ô!Gš!}Ð ¦ ¦ ; ;!è#•"ô¨¨¨¨Z00ZÝÝÝ0fff¨N$Ñ$ѨûÑ$ÑÑff¹¹<<œIrrZÛ...WWìì™FWªªWøøøøøøøKªW™™Â¶c‘‘>>>>ÁÒÒÒÒ‘>ëëÁÁ©©%µb‹Þ    J÷÷J÷÷ssV©,,,,,,S¦}ÐŽè²²//X™™ooooo™™ÂììŠ0ÝÝH›ré騨~~WWooÂ¥øøKàcc´´ÝÝrrrU¨~+f00¬Y››AAw$ M$Ñw$ññÇ…22ß \…2t!žžggºgê=g[[ssÆsÁ==ïœss11 á4]]!LòÉ v «%²,f8!EôG¡G¡G¡HBF•?á0Ì(k#d á4 +]]]ŸŸÉo¢¢Ëx¢¢Ë˳`66ËËˡ4 +]É((¤þ{{{(ƒ!0¬ Y!0Öƒƒ"qîî Ä Ä"÷%{#Î$9"Œ$9)@'(#Î"÷!J#Î#Î"÷!J!J$¤'('(%æ'“%æ'“%&½%æ%æ%{%{'(%{%–'C#é#é'C%–%–%–(&l&l$¿&l#&l#%æ$9$9"Œ"÷$¤$¤$¤$9"Œ"Œ"Œ"÷$¤"!#Î$o$o#˜!ë#˜#˜#˜#˜$9"Œ"Œ$9!¶#c$9"Œ!e$¿)Æ- %–"<#é"<"q$$"q"q"q#H#H#} #"§$T%*#}#}%* Y"!0!0$Š$Š"Ý$Š!Í!Í$Q"¤!b##!b#å"8###z#z ÷J#z#z!Í ‹Þµ!b"8#å"8 ‹"¤"¤J ÷ ¦$"S ¦!!#•!è  "‰ Üšš!G"ô#*!}"S"S ; ;!è#•"ôfÑÑUU7ŠZZ0Ý0ÝÝ0<ff¨û¨¨~ÑûûÑ$¨û¹¹¹fff¹œœœœ0ÝWWªW?™ì™..ªª"Ïøø¥KKKWWoooÂcc>ë©©%ggggÁ‹‹µµ    ÷¤÷J÷¤  ©©,ÙVV}}ÐÐe¿ÜÜÜÜX/Ü™™Â™™Âooo™™ìì´´aHH›Hffff¨U+ÑWW..Âo™Føø""¶c::ŠÝ00HõHH¨û¨Ué<<¬YÖƒîîjwwÊwÑÑwÊñžÇÇ    2…\\žKžžg=ggg1„1„œœœœ==gÆÆœI]‡‡ÉÉoÉ(Õ#/-=?@EôG¡G¡E¿D4&% +]4‡4‡]oËxõ¢Ëxxˉãã6õõõ¢‡‡ +!·òòþþQþQQ((ƒƒƒÖ¬ Y!0!0#H!›îîîî!›î"!"!"!"!%æ"Œ%&½$¤$¤"!#Î$¤"÷ t"!"!#Î$¤&Q&½%&½&½%&½'“'“%{%{&Q&Q'C'C%–#é%–#é#é#é'C(ð&l&l%–#é#é%–'“%æ$9"Œ"÷$¤#Î"!#c&½#c!¶%{%{!J$¤#˜!ë$o!"Â!"Â"Â#c#c"Œ$9"Œ"Œ$9"Œ"<#é-÷2þ)Æ#$¿$¿!›#H$õ!›"q"q#H!›!Ð #!Ð!Ð$T"§ #!Ð"""""Ý$Š"#³ ÷ ÷"¤"¤!b!b#å ‹"8 ‹!b#!Í!ÍJ ÷!Í#z$Q$Q"8 ‹ ‹"8!b!b!b!b!Í!Í!Í!Í"S$!}!} ; ;!"¾ X"‰ Üšš q" ¦ù!}#*!d"¾!"fÑÑûû0Ý´ZZZ0ÝÝ0Ý0<¹U¨¨¨+~¨¨~ÑûNfœœIIÝŠZZ..ªªW..ììì?..ªª"ÏKKøøøžªWªWÂÂÂccë>gg©©ÒÒÁgºÁ‹‹µµ    J÷÷J÷J  VV,VVVVÐÐÐÐeeÜÜÜܲÜ/™™oo™™oÂoooó™™™Zaa´HHH›ffû¨ÑÑ..™F¥¥""¶c0ÝÝÝHõHîû¨¨U<<ééÿ¬ƒ0îîjwww$ÑwwÊžñÇÇ  ¯¯2ß  ñžžžgºãggg1ÞÞ1œœœœ==gºº Æïœµ[°°‡‡ÉÉ(Õ((6.~;æEôEô@¸4ý&¾!·]°‡44‡°°oËxõ¢ËxxqÜ66ãOõõ¢44 +]òòÉÉþþþQQQÕ{)ƒ!0ƒ" Yƒƒî!›îî!›!›#H!› t t t t"Œ"Œ!¶#c!J$¤%{#Î!J"÷"!#Î"!#Î"÷$¤%&½%%%#c$9$9#Î#Î$¤'þ%–%–%–#é%–#é%–%–'C%–&l&l%–#é#é%–'“%æ'“%æ$¤"÷"!#Î!¶%#c!¶#Î#Î$¤$¤%E#˜"Â"Â$o"Â$o$o#c#c"Œ$9$9$9"Œ$9"<#é'C(ð$¿!e###H!›#H#H"q"q!›#H#}!Ð#} #"§$T!Ð#}#³#³#³#³"Ý$Š%`#³"¤"¤"¤"¤!b!b#å#å"8 ‹#!b!Í!Í ÷J#z!Í"¤%þ"8 ‹ ‹"8!b!bµµ ¦"S!}!} ; ;!d!² "‰ Ü!G!G" q ¦"S#*!}d!!d"û<<<<ïïrr000Ý´ZÅÅÅÅÑ$$~¨¨¨û<<éffé<féérÅrrIIïœ.ªWW.ªªÔ.øøKKKKøKÂÂÂWøø¥Kggºgü©Ò©©©V©ügÁÁV©©Vs s͵µbµµµb÷J Í,ÒVVnëëeèè¦ùÐÐqÄGôššÄÄ™ìoÂ..W......´´´´õ›Åé<ff~+~~..Âìì"ÏøK¶¶ccHHÅ´´Z<<<éÑѨ¨Aîîî›AM MM¸ â \2222¯\2ß2…ÇÇÇÇ=º=gºssœœ1111==ºº%Ò%Ò[[IœsÆEòòò]°]]ii“#š$Ü-=:¥ëVVss  µµµbbµs JJV,ëëÁÁ;;;Ž}ÐLùšGqqôG™™™™.....Ô..ÝÝ´ZÅrr<<ûû$~WWWWoÂooKK""::Ì´<<f~ÑûûAîjjwÊÊw  ââ222222\\……  Çžžººgg==ÆÆÆ1111ggºº¨ûÒ%[[[ïIÆÆÉɇ‡°°¼¼¼iÕ(!‚(6#ÐòE‡-°oo‡‡°]ËËxxxËõõ`  `Ë¢õ‡4]°]]‡‡QQ((““““¬¬¬¬¬ Y!0!0 Ä"q!›î!›!›!›!› ß ß ß ß!¶#c"Œ ß ß"Œ$9$9#c&½&½%%{%{%{%{&Q&Q$¤&Q%{(Õ&Q$¤$9$9#c%#é%–%–%–###é#é!e$¿##%*%*%*%*&½(j%#c$¤$¤#Î'((j%$9$9%#c%%#˜&ò$o$o#-#-$Ú#-#Î#Î%{#Î&½#c ß$9#}!Ð$T"§ ú"§%*!Ð"q"q"q"q$Š"Ý#³#³$T"§!Ð%*#}!Ð#}#}"""Ý!0"q$$õ$õ#$¼"8"8#!b#å#å!b!b ‹"8 ÷"¤$Q ÷!Í ÷ ÷ ÷"¤"¤ ÷µµ!b#!Í!Í ÷ ÷!}!}!}#*"S ¦)8=Ä0\#Ë qÄ"ššŽ ;!!!"¾ ;!è qÑ<<rrœB00Ý00ƒ00ÅrœœÑÑûûÑѨû ¹<<<<<f<éIIœœÅr.ÔÔ.ªWWøKøK""KKì™ììWWÏuKøg©©V©ÒÒ©VÒ‘>VV,,ss  µ[µµµbµÍ JJV,>˜ÁÁ莎;Ð}ùLšíqÄqÄôíìììì......ÝÝrrÅ<<éUUÑÑWWWWÂoooKK""ààrÅ´a´´<<fÑ$ûû”AwÊw$¸¸22ßß22  22  ÇññººggÆÆÆÞÞ„„ggººûNÒ%[œœssoɇ‡°°¼({Õ#/ vòE‡‡°]‡‡°]ËËxxxË¢¢` `³Ëõ¢‡Ú]°]]‡‡ «Q{Õ @ @ @ @¬¬¬¬¬ Yƒƒ Ä!›îî#H!›A ß ß ß$9#c!¶ ß"Œ"Œ$9$9$9#c#c%#c%{%{%{%{'þ$¤'þ&Q'('(&Q'þ%æ"Œ!¶#c"<#é%–%–###é #&l##&×&×&×&×%#c#c%$¤$¤#Î#Î%%%æ%æ%&½&½&½&ò#˜"Â"Â$Ú$Ú#-$Ú#Î#Î#Î%{#c#c"Œ"Œ#}%*&$T$T"§#}#}$$"q"q"Ý$Š#³#³"§$T#}#}%*#}#}#}#³#³"Ý$Š Ä"q#H#H#!b#å ‹!b#"8%’!b!b#å"8"¤ ÷"¤"¤!Í ÷ ÷ ÷"¤"¤ ÷!b!b!b#!Í!Í ÷ ÷#*#*!}Ð ¦"S.@}Dx3¶%x"""!G!G!è ;!!"¾!!è#• q¹â✜œïÅrÅÅ0ÝœœÅÅÅrÅœœrÑ$ÑÑ~Ñ~Ñ<<é<<à¶ žøøK™ì.WªªªWªWWììoÂ..WWccccs ssÞ1‹‹sssÆÞÞÞ1ëë>>ÁEëëëÁ©©ÒÒëëÁ©V,,ÒÐ#ùùe;;}#}#¦¦ ù...ÂÂc¶Ï"øøÝÝÝÝrrÅrrrrrWW™™WWWrÅH›0Ý´´ÑѨ¨ûû¨¨ó w$MM$wîAAAƒƒYY2…ß2\\22»hhýPPª[[®ïœœœ==gºggggºûûûûssœœssœœæ“¼¼ææ°]‡ÚEòÉ vòòoÉ{{{(¼¼9æËËO¢6‰ã6**¿¿––¼{(Qþ44Ú‡4‡]]MMM 5â ¸ Ä Ä"q"q!0ƒƒƒ!J!J$¤%{"!"!"!$$%±%±$o"Â"Â"Â#c&½%&½&½&½&½%%±%±&‡&‡&ò%E%E!ë!0"Ý$Š"Ý!›!› Ä Ä"q"q"q$$Š$Š#³%`$9$9#c!¶#c%#c#c"Œ$9#c#c%æ%æ%%&½%%%%{"!%{%{#-$Ú$$"W"W"W$"q%Ë$$$õ#H"q"q$%Ë#H$õ#H$õ$$"Ý"Ý$Š$Š$õ#H#H#H$$!›!›""#³"#z#z"¤"¤#z!Í#z#z!b# ‹#å"8 ‹"8#å#E#E Á"n"Ù!,© V Á Á Á"n"n"n#E#E$k"¾!d ¦ ¦#*.å2à*"ô!G"" q q!!!!!! ;#•Ðf<âïIœIrÅrƒ0œœrÅrÅIIÅÅ$ÑÑÑ$ÑÑ~<<éé<<ff<<<<à¶cKKøKÂì?.WªWWWª™™oÂ..WWcc¶¶Æsss1ÞÞÞsssÆÞÞ‹ÞëëëëÁ>>ëëg©©ëëÁÁÁnVÙÒ#Ц¦eèèÐÐ}}SS¦ù...ÂoÂc¶"uøø000Šrrrrrrr±±WWÂooo™™WWWrÅH›0ÝÑÑûûN¨¨¨úMw$MMw$îAAAƒƒ¬¬2…ß2\\……»hh»Pýýý®[œïœœ==gººgggºgûû¨¨ssœœssïI¼¼“æ¼¼ææ] +‡ÚEòÉ vòòoooo(({(¼¼9æËË¢õã66ã*п¿––¼ii{(Qþ‡‡4 á á4° +   Mâ ¸!e Ä Ä Ä Ä!0ƒƒ"Ý!J"÷"!"!#Î#Î$$"W"Wh!"Â"Â#c#c#c%#c&½(j&½) %±$Ú$Ú%E#˜%E!ë!0"Ý"Ý$Šîî Ä Ä Ä Ä Ä"Ý"Ý" Y"Œ"Œ#c!¶!¶#c ß"Œ!¶!¶$9$9!¶!¶#c!¶%%%{"!#Î#Î#-$Ú$$$$$"W$$$$#H$õ$ Ä$%Ë#H$õ$õ#H$$"Ý"Ý!0$Š#H$õ$õ!›$$!›!›""#³"!Í!Í ÷ ÷#z!Í#z#z#!b"8"8 ‹"8 ‹"8#E#E"n$!,"Ù© V"n"n Á"n Á Á!˜!˜$k"¾d! ¦ ¦!}#*#Ë"!Gš q q q#Ë"¾"¾!!!!!è!è!}<ÅrœIœœÅÅ0000œœÅrœœrÅœIÅr~Ñûûûûû¨<<é<<éff¶cccøø¥øoÂÂÂW..WW...™ìoÂWW..c¶cJJss1Þ sµÞÞëë>ëg>ëV©,,˜˜˜ë˜˜ÁÁ,,©V##ùù;è}ÐùùÐ}}}..WW?ììì¶¶c¶øKuu0ÝÝŠrrõHH›HHHH›H.Û..™™ìì..WWrÅ››´ÝÝ~ѨNwÑÑ~úMw$wwM AAj½ÖƒƒÖ2…2ß\\\\‘‘‘äPýÓÓ[[œœœœgºãgººggg%%û¨ÆÆÆsœœœI¼¼æææ“æ9Ú‡° +ÉÉÉoooÉQþ «"X!¼9“xxõõ66``ððlli¼i¼¤þÕ{4‡4 á44] +M v # Äî!›ƒ!0 Y#³"÷"÷Ç t t t!J!J!€!€ÓÓ > >hh ß ß"Œ"Œ"Œ$9$9%æ#-#-#-#-"Â$o#˜#˜"Ý!0""!›îî!› ÄA Y¬ ß2 ß"Œ \ ß ß2 ß"Œ ß ß"Œ!¶!¶!¶!¶"Œ$9"÷"÷#Î%{#-#-$Ú$Ú$$#-#-&¢#H!›&¢$"q"q%Ë$õ#H!›&¢$õ$õ"q"q"Ý$Š"Ý$Š#H$õ#H!›#H#H Ä"q"Ý$Š#³"!Í#z!Í!Í!Í!Í ÷J ‹#å##"8#å!b!b#E$ò%È"n"Ù"Ù!,"n"n!˜#E!˜ë!˜!˜!! ;!èÐÐ ¦"S"Äšš!G!G!G!G!"¾!!#• ;!è%B(1<rŜÅÅŠ000œœÅœœrÅœIÅÑ$ûûûûû¨<<<<<<<<ffc¶ cKKKøÂÂÂW..ª...™ìoÂWWÛ½¶cssÞ1[µÆsµÞÞÁÁÁg>>>ëÁë˜V˜˜˜ë˜˜ÁÁ,,©V}#LLŽ;#Ðùù#Ð#}ÛWWì™™™ccc¶Kø""ŠÝÝŠrrHõH››õHH›HÛ...ÂÂooìì™™..WWÅrHH´00$Ѩ¨ÑÑÑ~M ÊwwwM AAjÖƒÖƒ2…2ß ¯\\>ää‘Pý&&®[[œœïïºggg㺠 ºggÒÒû¨ssÆœœœI““æ““æÚ‡]]oÂÉÉ «%²,f.+$$p @ @x¢¢6   ðð¿i¼¼¤"X$Ü!‚ á44‡‡‡ +] úM #v"<"< ÄA”ƒÖ Y Yð!JÇ t t t!€!€ÓÓ > >hh ß ß ß ß ß"Œ"Œ ßÓ#-#-#-"Â$o#˜#˜!0ƒ Y YAîAîjîAÖÖ Y¬…2…2\¯22…2 ß2…2\\ 2 ßð!J"!#Î!€!€$Ú!€"W"W#-#-$õ!›#H$õ$"q"q"q#H$õ&¢$õ!›$õ"q"q"Ý$Š$Š&7!›#H#H!›#H#H$"q"Ý$Š"#³#z%'#z#z%'%'"¤ ÷"8"8#µ"8#å$¼!b#E!˜$$!,!,"Ù!,"n"n!˜#E#E!˜#E#E!! ;!èÐÐ"S ¦""!G!G!G!G!G!G"¾!!!!è!è#•-£>ÁÁ˜ëÁÁ,,ëë똘˜n˜>ÁÁÐ##Ð#Ц¦eee#Ðù¦ˆìì™FÏÏÏÏøø"Ïr›õrÅrrrr›Hrr›Hoo™™oooÛ.WWõHõH›HHîNûûûffw   ¸âƒÖÖÖAAÇÇtt2…2ß>‘»»hÆÆÆ[gggg=ããºg[[ÆÆII{{{{((QQ°]°°44 á4ooÉ!í/U=“Bš@2¯&¼õõxË6ã``CCCC„×T «þ{{i&/U&ô"#É] +]]¸¸¸!e!Ð #vv Y Y¬ÿîAjjð!J"÷ tÇ!ë‘h» >‘‘‘ t t tÇ t"!"÷"÷ > >h!!$o!!îîAփjjAA””½½…د\CCðð¯\……ÇððÇ!Jýý"W ª!"Â!ë#˜"Ý"Ý"Ý$Š$Š"Ý"Ý"Ý"q$$õ$õ!0$Š$Š"Ý"Ý"Ý#³#³$õ$õ#H!›#³#³#³""Ý!0"Ý"Ý%'#z!Í#z"8"8"8#å## ‹ ‹!b#"8"8#E#E"n"n" V"#° V""Ù!,""""ÐÐ!}#*"S ¦!}!}!G!G!G"ô"‰/ Ü Ü ¦"S$ ¦!}!}"S,a=úNffZZZƒƒœœrr´0ÝrÅÅÅZZÑ$ûûÀfN¨$~<fff<ff ¶¶¶WWÛì™ÂÂì™™ìWWÛW...Ï"øø ssJJJJJµ©©VVgg˜˜>‘,,,,>>˜ëëëÁÁ>>}ÐÐ}Ð}¦¦ee¿Ð#¦SÛ...™™™ì""""¥¥Ï|rÅHHrrrrrH›rr¢õFFooo.ÛWWõHõH›HHHû¨¨¨ffww   ^5âÖƒÖÖAAÇÇÇÇß2…Ø‘ähh»»»ÆÆÆ[®ggºº==ã==ºgµ[ÆÆII(({{((¤¤°]°°‡‡4 áÉÉÉÉÉ&ô;EôG¡FËCq0+!¢¢xË6‰  ––CC„×TþQÎ(i&/U&ô vÉÉ] +]]¸¸¸!evÉÉ # Y Y Y¬îAððððÇ‘‘» >‘ääÇÇÇÇ‘‘h»hhhAAA”RR|)½½””””½½…دÀmmCCððUØØmCCmðCPP ª"W»h >!ë!0!0!0"Ý&7$Š$Š$Š%Ë$$õ$õ$Š$Š$Š&7"Ý"Ý%`%`$õ!›!›#H#³#³" Y!0"Ý!0$Š#z!Í!Í#z#å ‹ ‹"8##"8"8µ!b"8"8!˜!˜ Á Á" V V"© V!,""#°#°$×!}$×#*"S ¦!}!}"ô"ô"ô$¡"‰"‰"‰"‰ ¦"S"S"SÐÐ"S%­-8N¹¹Z00Z­œœr´ÝÝœïïïZ´´¨¨Ñ$f¨¨~~ffé<ff<<ff¶c¶¶¶¶WW.ÂÂÂÂÂÂÂWWWW..Û.."Ï|" JðJJJJµµÒgggÁnë>˜˜ëë,Ù,ÁÁÁÁÁÁÁëë}}}}}Ðù¦eeeÐÐ}}Û.WÂoÂ"u"uø¥¥¥HHrÅrÅr››rrõõ™ìo™™oo±±±Û...Ìrrr¨ûû¨¹f<<     ^  ¬¬ƒƒÄAAÇÇttßß \»»h‘‘»ïï[[[[====gãã=º[[[œœïœ{Î{((({{‡‡ + +4‡4 á vÉEòòòÉ v.~BšHxHxEôEô1Ø$pOOËË `66lC–® [®®Õ{{(“!í%G!íŸòÉÉ44 á áâ â5 M MƒÖ Y¬AAÇðCCCð»»»»‘‘mÇðCC‘ä»»»ä7”A”çÿR|)½½ç”jjjjU––éCC––CUUmm–CðC––P£&&ä‘ >‘¬"ƒ"Ý#³#³$Š$Š%Ë%Ë$õ$õ$Š"Ý$Š$Š Y#³&7&7$$!›!›#³%`""#³#³"Ý"Ý!Í#z#z!Í"8"8Þ"8#å#å#$¼"8 ‹#å#å#Eë!˜#E"Ù"Ù!,"""Ù!,"Ù!, ¦ ¦!}!} ¦LÐ#*#Ë""ô!G"‰"‰ Ü Ü!}!}"S ¦#Ð"S"S"Sûffâ<ZÝÝZœœÅÅ´ÝÝIœœœZûûÑ~fûûÑÑ<éÀf<<ff¶ccccc.ÂÂÂÂÂhÂWWWW..WWÛ..Ï"ÏÏs ÷JðJJÒÒ,ÁÁë>ëëëë,,ÁÁÁÁÁÁnÁëëÐÐÐÐÐ}¦ùeÐÐ}}ˆWªÂÂ"ÏÏ"¥øøøHHrÅÅrÅrHHrrHHì™o™™ooW ^ ^Û...ÌrrrU¨¨ûf¹<<MMMM¸ ^^¬¬ƒƒjAAÇÇÇÇ22 \h»h>>hhïï[[[[==gºã6ããgg®[[µœœïœ{ÎÎ{Î(((ÚÚ]]‡Ú‡4oEòòòÉ$p52EHxG¡@í.~!OOËË `66lC–T®®{{{Γ!í!í“òŸÉɇ‡‡‡â âM  ó)|ÿ¬AAÇðCCCðhhhh‘‘hC–ððmm7Ša7Šç””ç YR|)½ç”jj½½UUUéé<–C––C¯Umm–CC–––ö£yy7ä‘äÿ Yƒƒ#³#³!0!0"q%Ë&¢&¢$Š"Ý$Š$Š#³#³$Š!0"q"q$õ$õ#³"""#³#³"Ý"Ý!Í !Í#z"8"8 ‹ ‹#å#å$¼# ‹"8#å#å#E#Eë!˜!,!,"Ù!,!,!, V V"Ù$†"Ù!,"S"S!}!} ¦L#!}#Ë""ô!G"‰"‰ Ü ÜÐ#* ¦ùÐ!}ù"S ¦ZÅÅÅ2ߌߵ2ßssJJs ùùù¦ŽáŽŽ;Žee##¦ùßߌŒµµV©ë>ÒVVëëÁµµ÷J  ÄÄšš²XÜÜÜܲ²¦¦ù¦ùùùùùùŸùííqÄ/‚////XXX/ÜÄÄšíJJsÍ‹‹Þ‹JJÍ J÷Í ee;;ee;;eeeÐÐ#}¥ø"":¶¶ø¥¥øccààøøøKžøÏ"::ccc¶¨¨+Ñ+~¨¨ÀÀ–––饸"ÏøžKøªªWWWÛîAîAj    wwMMttÇžž \2ŒžžÇtY¬Öƒ¬¬ƒÖ¸¸ M   \\\ß2\ ññt ¶¶\Ú‡‡‡EEÉ{(((QþQþ `‰6`` ` [*i7Ñ@2<.™"Þ×5â²_5ˆ_ 5555óó  MSSkkAAÖ ƒÖÖÖÖ))jAî Ľjÿ¬Ö!0Ö|))É #MM^^^^MM #vvvó 5ˆ±^55ˆÛÿRR¥çççç”ç½½)||)ƒ)¥R½ççÜÜ܉‰Ü³³³³‰6`³,ÙÙÙ,,,,°òòÈnôNx%""!=!= œ#ö$Í&z&å#‹&å%8$|$|%S#¦"Ï"Ï$|$|%¾"d$$$ç#:$ç#:"¤ ÷%'#z"¤"¤ !Í#z#z#z!Í ‹"8!bµ!è#•"¾!!è ;$k$k ¦ ¦ ¦"S$k$k"¾!"a ´"a"a ´ ´!Š!Š!T!T$®!T é"–$C é ™"F#!oW! . ."{ÅÅÅߌß2µ2ßss÷Jðs ¦LLùŽ;ŽŽ;Žee##Lùßßµ[ßß©Vë>,©©ëëgµµµµJz ÄÄííX²ÜÜ//²²¦¦¦ùL¦¦¦ùùùù@@qÄ/‚‚‚ÜÜXXX/ÜÄÄší÷÷  ‹‹‹8÷÷ ÍJ÷Í eeŽŽee;;eee}}}}KøuÏ:ccø¥¥øccøø¥øKKÏ":àccc¶¨¨~~Ñ~UûÀÀéé C–ÀÀ¥ø"ÏøøøKWWªWªªîAA”j½¸¸^^wwMMÇÇÇžž \22ññǬYƒÖ¬¬Öƒ¸¸ââúMMM \\\ߌ ¶žžtt ¶ ¯Ú‡‡‡òòÉ(Õ((QþQþ `‰6   ` [#µ,'å!1„×Ûˆ _5ˆ _ˆˆˆˆóóó S­!Z¾¾””Ö ƒ ƒ ƒÖÖÖ|jA”jjÿ¬))))ÖÖÉÉóó±±^^  vÉvvM 5ˆ±ÛÛˆÛ¥RR¥çç:””ç½½|))|))Rÿ½ççÜ܉6܉³³³³6‰³³³Ù,,,,,,,°EE¡¡Ëxº"B œ# $Í%8%8%8#‹&)&)'%S"Ï"Ï$|$|$$"d%¾!#:$ç#:"¤$Q%'#z"¤"¤#z%'#z#z!Í#z"8 ‹!b##•!è"¾!!è ;"¾"¾"S"S ¦"S"¾"¾"¾!%»$"a"a ´ ´#7#7!T!T$®$® é"–"–"–"F ™Â!oW!!Û!Û Î0œœïBµ[µJJsÆðJÐ#ùùeeee;;ùLùùߌµßßßßÒÒVVë>g©©ÒÒnÁµµµssÍsÄÄÄÄX²²XX¦¦ù¦}ÐùùL¦##ííÄÄX«X/‰XX/ÜšššíJJs bµbbJJ  ÷÷÷÷eeŽ;Ž;ee;;¦ù¦¦K¥ÏÏc¶:"Ï"϶¶Ï"ø¥ÏÏø¥cc:¶c~ѨUÑ~~Ñéé<<ÀÀ–éø¥ø¥ø¥|"WW..WWAAjĸ¸ââM wÊñññññžtÇß………ÇÇÇÿ¬YYƒƒƒÝ¸ ¸ úM$w \\\\ ßßžžKK ¶22‡‡°°ŸŸÕ(Qþ(Õ(Õ   `666ã×}„$‹"®²  __ˆˆ555ˆÊó #($H”””|)­Ö)))jjj½”îjƒÖÿÿÿ¬ÿÿ  óóˆˆ55ÉÉv   óÛˆˆˆ^±Ï)|Ïc½½½ç:jj||R¥¥RRRçççç‰ÜÜܳ6‰‰‰ÜÜ/ÜÙVV,Ùnn˜òxËx  ããÆ!s$Í!Þ#‹#‹#‹$|&)&)&)$|"Ï!ù#¦"d"d"d$$$$"d#z#z !Í$Q"¤ !Í"¤ ÷ #z#å"8##!!!è ; ; ; ;!è ¦ ¦!}!} ;#•$k"¾!Š!Š"a ´!Š!Š ´"a ~#Ø'2#Ø!À!À!À!À ™ ™ ™ ™ª!"±! ΃ïïœïµ[[[[JJ sJ÷JÐ#L¦e  e;;eeùLùùߌµŒŒßßÒÒ©©ë˜nÁ©©ÁÁÁµµµ  ssÄÄÄÄX²XX²¦¦ù¦}ÐLLùù##ššqqX«X/‰XXÜ/íííšJJs µbb÷  ¤¤÷÷;èŽ;eeeeŽè¦S¦¦øøÏÏcàÏ""ÏccÏ"Kø||øKccà::c¶Ñ~¨U~Ñ+~–––<é<Køø¥¥øÏϱWÛÛ'AAjĸ¸M wÊDžžžKžtÇ2222Çÿ¬YYƒƒ00¸ ¸ úM$w \\\ \22žžžž ¶22-‡]] vòò{(Qþ({({   `66‰6**ׄ®®®®_ ____ˆˆˆˆ5ˆÊFóSS#.Â)OAçç)Ö­)|))jjjAAjÖ)¬¬¬ÿÿÿ  ó󈈈ˆÉÉvóóóFˆ5ˆˆ^^^±|||϶甽½)Ï¥RR¥R¬Aç::܉‰‰`³/܉‰ÜÜÜ/³³V°,,VVÙ,nnëE˳ ‰ãÆÆÆ 1!Þ#‹#‹"Ï$|&)&)$|"Ï%S#¦$$"d$$$$"d#z#z#z!Í$Q"¤#z!Í ÷"¤#z#z#å"8##!!#•!è!è!è!è#•"S"S#*Ð!è!è"¾$k#7#7 ´"a!Š!Š ´"a"+(ß*Œ#Ø#m   "F"F ™#ó"±"±"±!"{ZÅÅœïߌ߅ßß2ßµµßß2ßß2ᎎ;Ž4ᎎ;;ŽeeŽ;÷J   s s>˜Ù,,©©,©V ss  ss ÜܲšGÄÄ܉;;e¸ eLŸvÐÄÄšíÄÄÄÄX²šGÄÄXXXX/ÜJ÷  Þ‹bbµ1‹bb‹‹¦SS¦eeee;;;;S¦ÐÐ::¶ÏÏ""c:ç""""cc¶ àcc""K¥:cc¨¨~~À–éÀfUU+Ñcc:::c¶WWW.Wª¬¬¬ÿAîwwww55¸ \\  tttÇß2 \žñññjîA¬¬ƒ0MM ówÊ  ÇÇžñ222ß!tžžÇ!Çt]°‡ÚÉEEi““擼¼¢¢Ë``‰6llððlll55ˆˆÊÊÊÊÊÊ__ÛÛ)|­&a!Åk¾¾kkk Ö)Sÿ¬¬ÿ½j½½½Aî”A”” ^±^óó^±55ˆˆ±ˆˆ±^ÉÉóF¥¥¥¥:::|)||”ç””çç”î”ç½cqËq³/܉‰Ü/ÜÜÜÜ똘ëÁnnnVV°] +],Ù³³ÜÜGôô¡llÆ„ 1!Þ 1$$$%¾&”$ç$ç$ç"Ï$|#¦'$ç#:$ç!#z#z ÷"¤$Q$Q!Í!Í"8"8#å"8#å#å"8#å"S ¦$ ¦!}$×#*$×"S"S$ ¦!è#•!"¾"a"a ´"a!õ!õ"Ì"Ì'1«4/0Õ&[!T!T!T . .#ˆ!Û!Û!Û"±!"çZÅÅIœ2ßßßßßߌbßß2ßß2áŽ;ŽááŽ;;ŽáŽeeŽ;Jsss  sëëÒ,VV,V© ss  Í s²²ÜܲX²šGÄÄ/Ü;;ee¸eeeLù##ÄÄšíÄÄÄÄXXšGqq²²XX/Ü÷¤  Þ‹µµÞÞbb‹‹ù¦¦Seee ;;;;S¦}}cc""Ïu¶c:ÏÏ""ccc¶àcc||¥¥àccUU~~Àé<fÀUU~~cc:::¶cWWWÛ.Wª¬¬Y¬Aîjjwwwwâ⸠\\\\ttÇtß2\ žñññjA”¬¬ÖƒMM M$wMMÇÇžñ222ß!tžžttt! +]‡ÚoEŸ¼¼æææ“OOËx  ã6llCCl¿5555ÊÊpÊ__Û5Ö)­­¾¾¾¾   k)|Sÿ¬¬ÿ½jj½½½A””ççç±^±^ÉoFF^±ˆˆˆˆ±ˆˆ^±™F¥¥¥¥:::ç|Ï||:ç””çA””A”½½q³Ü/ÜÜÜ///ÜÜE˜˜ëÁÁÁVV°$1y)Ù,³³‰‰¡ôô¡lll×*„ 1"d"d$%¾(A&”$ç$ç&)'Ö#¦#¦#:$ç#:#:#z#z"¤ ÷$Q$Q#z#z#å#å#å%’"8"8"8#å$"S ¦ ¦#*#*#*$×"S"S ¦ ¦!è#•"¾! ´ ´ ´!õ!õ$y+-: DFžCD5p)µ$®!T#ˆ . .!Û!Û!ÛW!!:ƒÅrIœ[2ßßßµ[2Œßßßße¸ŽŽ¸¸¸ee¸Ž;¸eJðJ  Áº‘ëVV,Ù,ÒÒJJs J÷÷J//²/ÜÜ/qqšš²//èèeeŽŽ;ŽÐÐÐ#ÄííííÄÄXX«ššíš²///‚‚/JJ sµµ‹8‹‹‹Þbbµ¦¦}};è¸;;;;SS¦S::ÏÏKKàøø¥øà¶c|ÏøK¶ ¶cû¨~~éé<<éfÑ+~~c¶cccccWWªƒƒƒƒîAjw$M    ¸\ 22ññÇt \\ ÇÇžKj¬¬ÖÖ$w$w MMMžžžñ  22ÇtKKKž!!‡‡°òEEò““ææ¼¼¼i üO¢¢ º `–CCé––CC55ˆˆFFÊFóˆÛ² ­Sç”k¾¾¾””S¦SS))ÿÿ””½½½½jj””½ˆˆ^±óFoˆ5ˆÛ±±ˆÛˆˆ±^óFÉ|Ïø¥::½½¥¥)|çç”””””A”çGôGô`³³³³³//³³˜˜nnÁë˜V$/Ì'kÙ`³³³ôôô¡¿¿è•××­Zà#:#:&”))$ç$ç%S%S%S%S$$$"d%'#z$Q"¤"¤"¤"¤"¤#å%’#$¼#å"8#å"8$$"S$$×#*!}!}"S"S"S"S#•#•!è!è"a"a ´"a!õ#¢)€6èDGtEÇGtBØ2($®$^! .!Û!! .ÝrÅœI[2ß2222ßßßßµµe¸ŽŽ¸¸e¸e;Žee¸eJJJJJ  nÁëë©%,,,,JJ sJ÷J//²Ü//‚ÄÄššX//ŽŽŽŽŽáÐÐ#ÐqqššššÄÄXXíí@í²//‚/‚/ sµµ‹888‹Þµµbµ¦¦*ÐŽ;ee;;;;Sùù¦::""øøàøø¥ø:c¶"ÏøK¶c¶cûNÑÑéé<éé<À~Ø~~cccc..WWƒ))ƒîAj$ÑM    ¸ \ßßžDÇ\  ¶ttDñÄYYƒƒ$w$wMúMMññžñ\\……ÇtøžžK!!‡‡°òEòE““ææ¼¼¼iO üOO ` º–é––––––ˆˆˆˆóópFó5ˆ²²­­”A¾k¾¾ççSSS))RRçç½½½½çç½ÛÛ±^óFÉÛˆˆÛÛ.ˆˆ^±Fóo|)¥ø::¥¥)|½½çççççç”A”çô¡ôG`³³`³³³`Ü‚YYëëÁÁÁë˜V©V° +³³³ôôô¡¿;è××­"´àà!$ç))&”&”%S%S''$$$"d%'&Ô$Q"¤"¤"¤"¤"¤%’#å#$¼%’#å%’#å%­"S"S$$×#*#*&„%­"S"S"S%B%B!è!è"a"a"a ´!õ&ü.‡;ïGtGtGtI!F28Ê-&[$^$^%5#ˆ!!!Û .!:rœœrß2bµVüü©VV©VŽáee##Lù##Ð#ŽŽŽŽµßßsss ë>ëë>>ë>©©V©ëëëëßßµ[µµ;;e;;ee/ÜXíGGí/ÜÜܸ¸ŽŽÐÐ###Ц¦##Ð#ššÄÄX//XX//ºg˜ëVVVVzz  µbbšGGGXeeee;;e¸Âo™F..W........cccc|"ÏÏ...Wfff<<éHHr´a´´¥R|"ççÛÛ.oÂÄjj½ eâMM$w2…  222…tÇÇÇñññžƒƒƒƒjAîÄÄAAAAÇÇKñÇÇKž  ŒßžK!t{{Qþ({{((Õ{{b¼““ãã66xx %xõõËxõõ˾k|)))kçç””””­­¦SS¾¾¾¦S¦¦ooFó¥RR¥½:ç½||¥R)|¥¥")¥¥|)||Ï||ÏÏ||Ïcc:ç^±±ˆÛ±^çç½|)))NN¡ôôôËèè¿l;;e>>VVŒßߌ sJJqÄËxx ³``¡NNN@@"š"š$G$G$G$G&_&_%ˆ%ˆ%ˆ".$²$²$¼('?#å&i$¼$¼&i' +#°#°#°$†"Ù"Ù&3"Sù!}&„"¾$k(œ*I$¡!G q"#_!² Ü Ü!"Ì!õ#¢"a$(>5¦CFhG?G?Eý5;*V#¢$ÿ$ÿ"{ Î"" c""FÅœœÅrß2µbµµ©©ü©VVV©áޏ¸##LùvvÐ#ŽŽŽŽµbßßss së>ëëëëë>©©V©>˜ë댌bµµµµ;;e;;/ÜXššGGÕÜÜÜee;;ÐÐ}##Ц¦###КšÄÄXXX//²X‚‚g>ë©©VV    µµµíšGG²eeee;;e¸Â™F..W........cccc"""|.ÔÔÛWfff<<éHHr´a´´ø¥ )ÏçÛÛ.ÛÂÂoÂÄÄÄÄj  â5  $w2…  22ß2ÇÇÇñññžƒƒƒƒjjÄîAAAAAÇÇžžÇÇžK¶¶ß2žKt!{{þQ{({(Õ(((¼¼““6 6xxËõõËxõõx˾k¾¾|)ÖÖ¾¾çç””””SSS­¾¾dS¦ùùÉoóF¥R¥ø½ç”c||¥ø|Ï¥¥Ï|¥¥Ï|ÏÏ|Ï|Ï|Ï|Ïcc:ç±±±±ˆÛ±^çç½|)))¡¡¡ô¡¡Ë••¿lèèeëëÁÁVVߌŒß s÷÷qÄËËË````¡N¡¡ææ““@"š"š"š!X!X".".#Û'5&_&_&i&i#å#å&i$¼$¼#%]%]#°#°&3$†"Ù&3$ ¦!}#*$k"¾#•%B"ôš q"#_!²"‰"‰"Ì!!õ#¢"a ´#7)ë5¦CG?Cå8•+-#¢ Høø Î"{"""#½#óÅœIµ222ß©©ÒÒ©©©V¸e¸¸ùùÐÐLùùLŽŽ¸¸Œßµbss sÁÁÁëëÒVVëëµµŒßߌee;;////Gšqq/‰ÜÜááŽáLùÐvLùÐÐÐ#ùùíššš/////ÜXXXXë‘>˜Òs ÷÷µµ‹‹Äqˉܲ;;Ž;eeooooWW.Û.....ÛÛ.:cc"ÏÏÏ..Wª.Û..éé<<f¹<éHHHõÝŠÝŠÏ )¥¥çàW±™ìoo›îîîîAÄ ¸ ^MMww2…2…2…ß2ÇÇñžtttÇÖÖ0ƒ”îÄîîAAîîññÇžžKžßß  t!øøQþQ¤Q «Q¤(Τþii““  ããxxËËËËËË¢õxx îA¾¾|ÖÖ)kk””kkA”))SS|)”:)|¦¦FFo™F|)|Ͻ”Aç:RR¥¥¥¥¥¥RøÏÏ¥ø|ÏÏÏ¥øÏÏR¥c:±ÛÛÛÛ±±ççÏÏ))N¡Ëxxxô¡B•lB•˜ëëëVVÒbbµb   ÍGššGËËˉ‰ôGx%¼¼¼¼“@i ' ««!X&_&_&_&i&i$¼&i&i$¼&i$¼"Ù"Ù$†"Ù$†$†"Ù"Ù#*!}"S"S#•!è"¾$k#Ë#Ë"#Ë$6"‰!²#_!õ#¢"Ì!$ ´!Š#7)ë2L9×3#+-$y!õ!õ!¥Kø!¥" c c%j#óÅœïïœßߌߩ©ÒÒüüü©eee¦¦ÐÐùLùLŽŽeeß2µsss ÁÁÁ>>,VVnëëµµŒßߌe¸¸e;;eeÜÜ//šíqqÜÜÜÜŽŽŽ;¦ù##ù¦##Ð#ùSGšíí//Ü‚‚/²XXX>>>>Ò sJ¤bb‹‹qÄÜ/²;;;èeeooooWWÛ.Û..Û.Û.:cc"ÏÏÏÛÛW.Û..<–ééf¹<õ›H›077ŠuÏøøç:..F™oo›îAAA”Ä ¸^ MMww2…2…ß2ŒßÇÇñžtttǃƒ0ƒ”îjAAAAAADžÇtžžøK2Œ¶¶t!KKQþQ¤QQQ¤((QQi““  ããxxxxËËËËõ¢Ë˔羾)))|¾¾:”¾¾”ç||SS|)”:k)|¦¦óóoooFó|))|½”çç:¥¥¥¥K¥¥¥¥¥||¥øÏ|ÏÏ¥øÏÏR¥c:籈.ÛÛ±±::ÏÏ||ô¡Ëx¡NB•l•Bl˜ëëëVV,µb   ÍGšGôqË˳³‰‰ôGx˼¼9æ¼Í'Q««!X$²( (($¼&i#$¼&i$¼!,!,$†"Ù"Ù"Ù$†$†#*!}"S"S!è#•!"¾#Ë#Ë#Ë"$6"‰!²#_!õ#¢"Ì!"a"a#7!Š$ä&‘*Â'h$y$y!õ!õ!¥!¥!¥#R#½" c""FZÅÅIIßßß2µµµgVü©©L¦¦ù¦ùùùŽá;;ŽŽee sssßßߌVV,ëë,,,bbµµÍs  Lùùù;;¸e²ÄÄšššíÄqeeŽŽ¦¦Ð#áá¸Ð#ùS²‚‚X²Ü/qqGšGšÄĺg>‘ÁÁ‹ÞÞÞ‹‹bµÜ/²íGqÄ;ŽeLù¦¦ìFÂoÛ....ÛÂooøKøøøøøø.......¨U~ÑffH›HH›õÌøøKøcc¶¶ì™ooÛÛÛ.îîjjAî$wóó  w$\\Ø2  ß2222ßKžÇǃփ0jjƒƒÿÿ0ƒ¬ÿžKKžñžKK ¶ßß\ 22¤Q{μ¼ææ“ @i¼æ“¼iãã66OOxx6ã6‰``³`SÖ)))SS||||¾¾¾¾||SSççk¾dd:çÛˆˆ.oóó½j½:ç½½½cc:::::c½cc¥øÏ"::¥¥||ˆˆˆÛFóFF¥¥¥¥½çç66  666ã••lllB•VVë˜ÁÁ¤J Í÷÷  qqËGGGôqôôËË9ææ9Œæææz'Qþ¼!Ã%(w'«%þ%þ$Q!Í%'$Q$Q$†$†$†$†$†"Ù"Ù"Ù!è!è#•#•$$#*#*#Ë"!G"ô!² "‰"‰!!"Ì"Ì$y!!õ H!õ%O%O%O"a"a!Š!Š!¥!¥#R!¥$("{"{$("F­ÅÅœœßߌß[g©©VVùùùL¦ùùùᎎŽ;Ḹ s  ßߌߩ©Ò,Ò>>,bbbÍs  ùLùù;;e²qqššGšÄq¸¸ŽŽùù#ÐŽŽeeÐ#¦¦X//Ü/qqôGšíÄÄgë>‹ÞÞÞÞÞµb܉²ššqÄŽ;e¦ùùùììÂo.Û.....ooÂÂø¥øøøø¥¥...Û....û¨~Ñf¹f›HHHHHrøøø¥cc cF™ÂˆˆÛ.îî›î$wMMMM$w¯ 22  2……ßß2ñžttƒÖÖƒjjjjÖ0¬¬ƒ0¬ÿžKKžDñKK\ ßß\ 22÷¤{(iiæææ“¼i“æ¼iã㉉Oõxã66‰³³` S|)))SS))ÖÖk||¦¦::¾dddd:çˆÛˆˆoFFc½ç:½c½çç:::::cccccc¥øÏ"::RR||ˆˆˆÛóF™™¥¥¥¥cç牉³ 66‰BBÆïB]VV˜ëgÁ÷÷Í JJssÄqôôGôqGGqË9æ9ŒŒŒŒŒÍzQþ¼i!Ã%%þ'«%þ'«&Ô&Ô$Q$Q"Ù"Ù$†$†$†"Ù"Ù"Ù#•#•%B%B"S"S$×$×" q!G"ô#_!²$6$6"Ì"Ì"Ì"Ì"Ì"Ì!õ#¢#¢#¢#¢#¢"a"a!Š!Šøø#R!¥"{ Î Î"{ ™Öœïŵµ[ß2‘‘,Ò%Lù#vùùùùeeŽá;ޏ¸ssJJߌŒß,©©ÒÁÁ>ëÙ,©ü2Œµµ s  ¦¦¦ù莎;ÜÜÜÜqšGqÄq¸¸ŽŽ###и¸ŽŽù¦¦¦X«//X‚ÜššGôqqÄ>˜ggÞÞÞ‹ÞÞދ܉qqšíeeeÐÐÐÐÂÂooWWWWÛÛÛÂoøøøø"uøøÛˆ....Ñ~UU<éH››Hrr›HKø"|càÂÂoÛÛ›îÄÄîî›îwwMú$$MM2……ß \  \\¯ ÇÇtYÿÿY”AƒƒÖÖƒƒÖÖñžttÇÇtÇ  ßß22ßߤ¤{{æ!í“ @æ @¼¼¼“æ66`³õ¢õ¢ã6‰‰³   S))¦¦SSSS¾:禦¦dd::dÛÛ±FFo½½cççç::ç:::ç¶::ccøøø¥:çRR|Ö5ˆ±±oo|)|)ç:c‰‰``³``ºBB•BÆÆ†Ù,,nÁ÷÷Í J÷÷JqššôGôôôGšGbbb9ŒzzQQ“@ !Ã%þ'«'«'«&Ô&Ô&Ô&Ô$†&3%]#°$†"Ù$†"Ù%B%B$k!"S$#*!}"ô"ô"ô$¡$6$6#_#_"Ìr›!õ"Ì"Ì!"Ì!õ!õ"Ì"Ì ´ ´"aøøø#R#R!¥ Î"{"F0œïÅrµµµß2µµëëÒÒÒÒ¦ùv#ùùLL¸¸Ž;;Žss2ߌßÒVV,˜ëÒ©VŒ2 sss¦¦¦ù;;Ž;‰///ÄqGšqÄqeeŽŽ##Ð#eeŽŽù¦ùùX‚‚X//GíšíÄqqÄ>>ggÞÞÞ‹ÞÞÞ‹/ÜXXqqšíeeeÐÐ}}ÂÂÂÂWW....oÂÂøøøø"ÏøøÛˆÛ..~ÑUUé<ffH›î›rrõHKø"|c:ooÂo..H›ÄÄ›››îwwMúÑÑ  2ß22 \    \\tÇt!¬¬¬AÖÖƒƒƒƒžñttÇÇ!t  ßßßߌŒQQ((æ““æ99¼ii“æ‰ã `O¢¢õ6ã66````S))SSSSSSSS¾ç:¦¦SS¾¾ddç::dÛÛ±  Écççç:ç”:::çcc::ccøøø¥:çÿÿ|ÖˆÛ±±ÉÉ)||)ç:c‰‰``³`  ••• œ†Ù,,ÁÁÁJ¤Í J÷JÄqííGôGGôGGôqqbµb¼9æÔzQQæ“i¼"¤$Q'«'«&Ô&Ô%'%'&3'à' +%]$†&3$†"Ù!è%B$k!%­$#*$×$¡$¡$¡"ô$6$6!²!²"Ì"Ì!õ!õ"Ì"Ì"Ì!!õ!õ"Ì"Ì"a ´"a ´!¥!¥#R#R#R!¥! Î"F$f¹<XX//ííĸe¸¸#vù¦ŽŽ¸¸;ŽŽ;ùùùùe¸èè////ííššííÄÄÜÜÜÜÁ˜˜ë>>ësÆÆÆ÷JJJÜ/XÜ/è;eeÐÐ}}šíššqÄšGÄÄÜÜ//ÄÄššee;ŽLùÐÐŽŽŽŽÐ#ÐÐÄíí«XXù¦¦¦eeŽ;܉X²qÄÄqXÜ/™FììÏÏøø:::fééÀÀ~~~+™ì.ÂoÂcc:ø¥øøÂ™™..±ÝÝYYYÑѧ§~$MMAîîî¬YY¬MMwwâ€Ó&&Ó&&Ó>ähhhhh»2…2ß  Œßä>hhëëææ¼¼¼ @æEòòòÉ¿lCð×ׄ*```³õõõõó™Êˆˆ__””ç:¾k||¦¾¾pÙ™..²²ÌÌöö´aaöœÌŠ7ÌyööööŠŠŠŠI£ycc:::::)|RRoFFˆˆˆˆooóFozzzzÍÍQQþ«'zQþÔÔ×*Ð}èèÜÜYYššGGµµŒß   Íbbbb÷÷¤÷¦S}Е•¿SS×*ׄ ¦$&„&„(œ&ï&$k&ï%B'Å&$"S$×#*#E#E#E$ò$"n#E&Ÿ&3!, V"#°""Ù!,"ç"ç"ç"ç!¥!¥$( Î#ˆ . .!Û#!o"Fì!T!T!T!T$C é  !TÑf<««‚‚ííqÄe¸ e#Ðù¦ŽŽeeŽ;;ŽLLùù¸ ;;‚‚‚‚ššššííÄÄ////Á˜>ë>ë˜s ss÷JXX/ܲÜ/Ž;eeÐÐ}}GšGGÄqÄÄ@íÄÄ//‚‚ÄÄííee;Žù¦ÐÐŽŽŽŽ}Ð##ÄššXXùL¦¦Ž;/ÜXXXXÄÄX/ÜF™™™ÏÏøøçàÀff<–mÑÑÑ~Â?ì..'ÔÔÔÂÂcc:ø¥øøÂ™™ˆ.±ÝÝY³YÑÑúúÑÑúúAîAA¬YYúú$$â€Ó&&Ó&&Ó>ähhhh»h2ßß2  2…ä>ëë“9¼ææÉÉEòòòÉlðC„„** ³`³õõ¢¢óóÊ55__ççç:¾||Sùd¾pÙ™ÛÛÌÌööaaaaööÌ´´7äyÌIIÌÌööÝÝŠŠIIÌÌ:ççç|ÏRRÉó󈈈ˆÉoóFoÍÍÍÍÍͤ¤«þ'zQþÔÔ×*}Ðèèe¿ÜÜššGGµµŒß  Ízbbbb¤¤÷¤S*}èè¿lSS×*ׄL ¦&„&„(œ&ï&$k&ï%B$k&$"S#*$×#E#E#E$ò"n Á$ò(L'à"Ù"#°#°%]$†"Ù"ç"ç"ç"ç#R#R"{"{%5!Û!Û#ˆ!o#% "F##!T!T"–"–!À!À#ûfffXXXXÄÄq¸eŽ;ùùLL¸e;;e eeLLÐ#e¸ŽŽ//‚/ÄÄššqqšš//XXÁÁÁÁÁ    Jss///ÜÜ/Ž;Ž;ÐЦSšGGšÄqÄÄÄÄ«XX«ššÄŽááŽÐ}ÐÐŽ;ŽŽ}Ðv#šííí///‰Ð#ùSeeXXÜ/íššš™ìÂo....øøÏÏç::é–À<<ÀÀÀ$$ÑÑ™ìÂÂWWWW™ìÂÂà:¥¥Ï"ooÂoÛÛÛˆ³00³0ݧ§ÑÑÑѧúÄÄÄÄYYƒƒw$w$5€ÓÓÓýýýýhh>‘»»»hß222\¶\¯»Â>ëëë“æ¼¼¼¼É˜EEŸ!Cll®®×*㉠`õ¢Ê ó__Û5çç¾ç:|ÏùLdddÃÃÃX..öö££aaaööÌÌ77aÌö£ÌÌ7Š´´ööÌ::çç|Ï¥ÿoóóˆ5 ±ÉFFóózͤ¤z'¤¤''z'þþ''S¦ùè;ŽèššššbbbµJJÍÍbµµ÷¤ÍͦS}}èè¿}}}}*×ׄL ¦$%­)r'Å&ï&ï&ï%B$k$k$%­"S"S!˜#E$%È#E!˜$ò&Ÿ#°#°%]#°#°#°"Ù!,"ç"ç%j#½!¥!¥!¥#R"±"±%5!Û"F ™#ó"F#Ø#Ø!T§ é"– !À"+û¹¹fXXÄÄeè;ùùLLeŽŽ¸¸¸ùù#Ðe¸ŽŽ‚Ü/ÜÄÄššÄÄš@//ÁÁÁss  Jss///ÜÜ/;è;ŽÐЦSšGGôÄÄÄÄÄXXííÄqáŽáŽ}ÐÐÐ;Ž;;}Ð#ÐGššš‚Ü‚Ü#Ц¦eeeeXXXXÜ/íšGG²²F™oÂ.ˆÛÛøøÏÏ:àé–À<<ÀÀf~~~~™FÂWW.Ôªª?ìÂÂ¥¥|Ïoooˆˆ.Û³00³0ݧ§~~ÑѧúÄÄÄÄYYƒƒw$$Ñ5ââÓ€ÓÓýýýýh>‘hhhß222\¶ \h>‘‘‘æ“i¼boEòEE–– [×*66º ËËõ¢Ê ó__55çç¾ç”kÏ"Lùd·ÃÃÃpXÛÛöööö´a´ööÌÌ77aÌö£ÌÌ7ŠaaööÌ:::”)|RRoóó5ˆ± ÉoÉóóóó'zQQÍzQQ''z'þþ '­S¦è;;;ššššµµµbJJ  µbµµ÷J  ¦ù}}èè¿}}}}}**×LLù ¦$k&(œ(œ%B&ï$k$k$%­%­%­&Ÿ$ò%È$#E!˜&Ÿ$ò#°#° V"#°#°"Ù$†$”$”"#½#R#R!¥#R"±"±#ˆ#ˆ#ó"F"F ™"+"+#$®"– é!À#m"+ÑÑѨûXXXXXX«eee;;eeù¦ùùe¸¸e;ŽŽ;;Že¸ÄÄí@qÄÄíšš@qÄqq,,V©Ò©©Œßµµs   Ü/«;;;;;;ššqÄÄííššqq/Õ@@šG##¦¦Žáeeùùù¦ùL#ÐÄÄšš/Ü‚/eeeee;ŽÜ/ííÄÄ/ܲ_GôGšÂÂÂÂÂì™ø¥¥¥::¶cU~~fÀf¨¨U¨™™F™oÂÂììÂÂììÂÂààà:¥R )Ï..WˆÛ ^qq››³³ÝÝee<Yîî$w$ÑM  M>>‘‘ÓÓªª&&ýP&&Ó-Çtžžžø!Ç>ëÂ>>>>擼¼þþ¤¤ÉÉ–ðCC××``º ‰‰‰6ÊÊóóˆ5ˆ5kk”:¾¾dd¦ùÏ".ÛpÙ™´öööI£££öööÌÌ£££öŠ7aa£IÌyaa´aø êžRÏ)R¥ççç½½½É5ˆ55ÉÉóóˆˆ5ˆ¤Qzzbb¼Ôzz'“æ““l¿¿e¦¦}КšGôšíššµbµµ  J¤999Œ  ÷¤¦ù¦S}}}Ðèèèè••áá·d#*&„(1(1'Å)r$k&&ï%B&ï&ï%]#°$†$†$$&Ÿ$ò#°%]#°%]#°#°"Ù"Ù"ç"ç"" Î"{"{ Î#ó#ó##"±"±$^!!À!À#m#m###!T éÑÑÑû¨X«XXX«¸¸eŽŽeeLùùù¸e¸e;ŽŽ;;Že¸íšqÄÄíšššqÄqq©üÒ©©Œß ssÍÜ/«XXX²;;;;;;ššqÄÄÄGíííÄIJX//ššší##ùùŽáeeùù¦ùù¦#ÐÄÄšš‚/‚/eeee¸e;Ž‚/ššÄÄÜ/²šGšGÂÂooÂÂì™ø¥øø::c¶U+ÑfÀf¨¨U¨™™™ìhÂìì™™ÂÂà:ø¥ÏÏW.Û±±ÄÄHH0 Š ¿ ¿ee<YîîÄÄ$ww$ MMú‘‘‘‘&&ªª&&Pý&&ÓÓÇtžžKKttë>Â>>>>擼¼QQQQÉÉÉÉCCCC××   `‰‰‰6ÊÊóóˆ5ˆ5çç¾¾¾d·¦ù|Ï.ÛpÃFFaaaaööö££££P££yyPöö£7äaaööÌaa´a¥ =ñ¥||R¥çççç½j½½ÉÉɈ5ˆˆóó555ˆQ¤zz¼''Íz“æ““l¿¿eùùÐ}ššGôGšššµbµµssJJŒŒŒß  ÷¤¦ùù¦}}}Ð;;e¿èèèBáá·d!}$×&„&„'Å&$k&#•%B%B%B%]#°$†$†$$#E$ò%]#°%]' +#°#°!,$†!:!:#½#½ Î"{"{$(#ó ™$É$É$^$^$^$^%!À!À!À!T!T!T#<¨û¨û¨XX//XX‚‚e¸;;;ŽŽáùL##¸eŽá¸¸¸¸e;áÄÄíšÄÄÄÄíííšqÄÄq©©©©ŒŒµµJJJ÷XX//ÜÜee¿ŽáôGGí@íÄÄííXííÄ#Ðùùe¸e¸#v¦¦}}ùùšíqÄ‚/XŽŽe¸¸;;qÄX‰/íšqqì™oÂÂÂK¥ÏÏcccc¨¨~Ñ<ÀÀfÑÑ~~ììÂìììììì?ìì™ìì¶cÏÏK¥WªWÛˆÛÛ›H õHe<<e¸eÝÝ ŠÝ››››wwúMMúMM‘‘>>ÓÓÓ&ýªýP&&ªªžžtt!ttthhÂhæ“Q¤¤QŸòoÉŸEll¿l® [®    66 `ÊÊÊ__²²:çç::”dd¦ù¦ùX..ÃÃpp77´ööö£ö£££ÌÌyyyÌö£Š777ö£ööŠÝÝ7)|))R¥RR½½½j½½  Ûˆ^±oÉ^^ˆÛzͤ¤¼¼''Qþ““¼¼••eùùÐÐÄÄšGqqqŒŒbµ s sµbb  ÷¤}}Ð}}}Ð}¿e¿¿¿Žá·dÐ#*%­'Z'Å&'Å&#•%B%B%B' +%]&3'à$ò!˜!˜!˜%]#°&3&3%]#°!,$†"ç"ç$”"ç!¥!¥"{ Î ™"F##"±$^$^"±$C é!À#m!T#!T!T ûû¨û¨«//XX‚‚e¸;;;ŽáŽLù##¸e;ޏ¸¸¸e¸ŽŽÄÄíšÄÄÄÄííšGÄÄqVü©©ŒŒµµJJJ÷²²ÜÜÜÜeeeŽ;GôGí@íÄÄÄš@XXXííÄ#Ðùù¸ee¸#vùùÐÐùùíšqÄ/‚Xá;eee;;XXqÄÄÄXÜÜGšqqì™ÂÂoÂoøø""ccccûU~Ñé<ÀÀÀÑÑÑÑììÂììììììì?ì?ììàà¶c""øøW ^±ˆÛÛÛ›H›He¸ééeeÝÝ ŠÝ››››$$úMú§úú>>ë‘&&Ó&ýªªW€€ªªKKtt!ttthÂÂhi“ @QþQþŸòòòlll® ["``  66³`p²²ç”ç:¾¾ççdd¦ù¦ù²ÛÛpppp77££ö£P£££yÌÌyÌö£Š777ö£öö7ŠŠä|)))ÿRRR½j½½½½oÉ FÛˆ ^Éo±±Û.zͤ¤bbzz¤Q““¼¼••¿¦¦}}qqšGqßßµb s ͵bb  ¤÷}}}ÐÐÐv}¿ee¿¿4á·dÐÐ$%­'Å&&$k%B&ï&ï&ï' +%]$†&3$ò!˜#E#E%]#°$†$†"#°"Ù"Ù!:!:&A$”#R#R"{ Î"F#ó##$^"±$^"±"–"–#m!À!T#!T$®!ÀfÑÑ$$¸¸ŽáLLLLŽáááÐÐ#ÐŽŽŽ;¸eŽŽÐÐ}#ᎸeŽ;á;¦L##ÄšGÜ‚XX>>Á sJJßßµÐ}#Ð}Ðùùù¦}}ÐÐùùGšqqááŽ;Lù#v ¸eeÐ#ÐÐeeŽŽŽ;;;GšqÄXXXXXXXÄÄšš//ÜÜššqqŽ;¸eeÐЦ¦¦LÐÐììoÂW:::¥KÏ|0Ša´´´´ÝÝ´´´ªW™™¶¶¶¶à3à33¶cøø¥øÏÏ"ÏqqîHHH›îƒ0³00Ýݳ ŠÝ0ƒ00¸¸e MMMM22\\¯ 22Çtžžt!!!Ó€€Ó>>ttžžKKKKQQQQ¼¼¼¼((þQ({Õ(ãã 㢢xx**×}*×TT|||))|SS:ççç:çFFpÃ..ììF™ppFF£öööa»yÌ££ÌÌa££yÌÌyööÌÌ£öóóÉÉÉó ÉˆÛˆˆ|))|½jAA  voÙ,nÈ3†]òò**¦eqíšqVÙ˜>똵µµµ2ߦ¦ÐÐ;;¸S¦}Ð;Žèè““//% % 'Å'Å'Å'Å%­%­%­%­'u%È$ò$ò$ò$ò$ò$ò$†$†"Ù"Ù"Ù"Ù"Ù"Ù ™"F#ó"F#$É#!o"±!#ˆ#ˆ#ó"F#!o"Ì!!!!ŠÝ"a$#ØfÑÑÑѸ¸;ŽLLLLᎎŽÐÐÐ#ŽŽŽ;eŽŽÐÐ}#áŽe;Ž;;ùùÐÐÄíš//XX>>gs JJßßbµ#ÐÐ}}Ц¦¦ùÐÐÐv¦¦GšÄŽŽáŽù¦#v ¸¸¸Ð#ÐveeŽŽáŽ;;GšqÄXXX«ÄÄíG////ššqqŽ;eeÐÐSSùù*Й™Â..W:ç::øøÏ|ŠŠa´a´´´Š äa´´ZªW™?»¶¶¶¶à3ààà¶cà॥ø¥ÏÏÏ|ÄÄHHHH›H0ݳÝÝÝÝY ŠÝÝ0Ýݸ¸¸¸MMMM22\\\\22t!KKt!!!Ó€Ó€hÂë‘ttžžžøKKQQþþii¼¼((Qþ({(Õããã '°¢ËË×××}}*TT|||))|¦¦:çç:™™pÃ..™™F™ppFF£öI£aayÌPPÌÌaPPÌyyÌ££ÌÌP£óóÉvóFÉ5ˆˆˆ|)|)j½””óóÉÉÉÙ†°°ÈȆٰ°nnEE**­SeeeqGšÄqqqV©Ùëë˜ëµµµµßŒbb¦¦ÐÐ;;¸S¦}Ðè;••““ÄÄ//!²% )r)r)r)r'Z'Z%­%­%È$#E#E&Ÿ&Ÿ$ò$ò&3"Ù"Ù"Ù$†$†$†$†% #ó% #ó#$É#!o"±!#ˆ#ˆ#ó% #!o"Ì!"Ì"Ì#7!Š ´"a"+f¨¨¨Ueeee##LL¸eŽŽ#ÐÐ#ŽŽe¸ŽŽeeùùùùáŽ;Žee;;Lù¦ùÄÄšš//X«gë>ggJ÷ssŒŒùùÐÐÐ#ùùù¦¦¦}ЦùÄÄGôŽ444v#¦ùáḸ##¦ù;;eeᎎ;qÄšG//‚/Ü/ÄÄšGXXXXÄÄÄÄeee;;ŽŽ¦¦Ð#L¦}#ììì™WW.::øKøøÝÝŠÝaa´´ÝÝŠÝÝÝŠÝWWÂhh¶¶¶¶àà3àà ¶øø"ÏK¥Ï"ÄÄH›q qqÝ0Y³Ý0Y00!`<â<$$Mú22  2ßß2žøKžt!Køªªªª>ëhÇÇKKžø!tQþQQ¼¼ææþþQþQþþþãã  &Ù %Ëq**×}***×||)|ÏÏ||ç:::ÃÃF™™™pppyÌyÓä77äö£ÌyÌy£öä7£££Pyy£öÌÌyyFóÉÉÉÉÉ^±ÛˆRR¥Rjjj½ÉÉÉÉÉɰ]°°È°††nnnnS×*èè;;qqqqqq©Vëë˜ë9ßµbߌߌ¦¦S¦eá;ÐÐ}}èŽ;•@@@í// #_(œ*I'Å'Å%­'Z'Z%­&Ÿ#E$%È$$$ò&Ÿ%]%]"Ù"Ù"Ù$†#°"#ó#ó$É!o###!o"±"±"±$^#ó#ó% #ó#¢ H H H ´"a ´"+¹ûûû¨ee¸¸##ùùe;;#ÐÐ}ŽŽeŽŽeeLLLLŽ;Žá¸ŽŽLù¦ùqqGí//Xgë˜ÁgJ  µµßߦL##Ð}ùùù¦¦¦Ð}¦ùqqGšááááv#ùLáá¸##¦ù;;eeŽ;ŽáÄíš²X///‚‚/ÄÄíšXX««ÄÄqqe;;;;¦¦Ð#¦¦ÐЙ™ì™.::¥øøøÝÝÝŠ´´Z´ÝÝŠÝ000ݪªoho¶¶¶¶ààààà:c¶à:øø"Ïøø"ÏqqH›Äqqq0Ý0ÝY00!`éé<éÑwMú22  2ߌßKKžñt!øKªªªªë>hÇÇKKKK!tQþQQ¼¼ææQQþQQþQQ66``ËËËË××**}}*}||ÖÏÏÏ))ç:::ÃÃì™XXììÃÊÃÌyy‘ää7ö£yÌyÌP£aa7䣣£PÌÌ£öyyyyFóÉÉoÉooo ^ˆÛ¥ÿÿRjjj½ÉÉoɰ]È]°††nnS*};;èèqqqqV©©©>>>ë9ßµbߌŒßùù¦ùe;;ÐÐÐÐèè;•@@“@//!²% (œ*I'Å'Å'Z)%­'Z$ò$ò$%È$$#E$ò%]""Ù"Ù&3$†#°"#ó#ó#####$É$^$^$^"±"F"F% #ó#¢#¢!õ!õ"a ´"a ´#ØfûNÑÑ#ÐÐ#¸eŽŽee¸;;Ž;;áee#ЦùùL##}Ц¦;ŽŽŽáḸ///‚XÜ/ÁgÁÒ©©µµßŒ¤J  eŽ;S¦ÐÐ;Ž;;¦¦¦LÜ/##ùL##LL¸¸Žè#ÐÐÐeeeeŽ;;á//‚/GGšš//ÄÄÄqšíšíšGqÄee;èŽ;eŽ;Ð#ù¦™™™™ÂÂÂøøÏ| )Ïøø´´´´´Ý0rrr›››HÂììª..ÏÏKKàà"užž""Ï"u"øøÏ|ø¥ÄÄq››››0ÝH›››Ý000³³!+~§ú¸e¶\ßßñžÇt¶\  \ ¶ch>>Wªªªßß  KKKKii““{{¤¤Q¤Qþ“æ¼¼``66``³³––¿¿é–¿¿¾¾¾:çç”ÏϦ¦..X™FÃX..FFŠ7aaÌyP£P£££77ä7Ìy&ayyyyaaaóóÉÉóóoóFóó|)ÖÖÖ)ÿR±^ˆÛoó™Ù3°°†Ù†Ù°°n}}SS}**}GôGšGGGšÁÁ>>,©V¤JJJߌbb;èÐЦ¦SùÐÐèèŽè(((‚íš"ô$¡&ï*I)r'Å(1(1&„$×#°' +%]%]$†$†#°' +%È$$$$ò$ò%È$#ó#ó###ˆ!Û#ˆ#ˆ"±"±#ˆ#ˆ"F"F"F"F"Ì!"Ì!"a ´!ŠÝ#عûN~~Ð##ve¸ŽŽee¸ŽŽŽ;ŽŽee#ÐùLLù##Ð}ùùŽáŽŽŽŽee‚‚‚/X‚/ÁÒ©©2ßsse;ŽLùÐÐ;Ž;;Sù¦¦²²‰Ü##ùL##LL¸¸ŽŽ#ÐÐÐeeee;ŽŽŽ//‚/GGšš//ÄÄqíššíšGqĸ¸;ŽeeŽ;¿;èÐ#¦ù™™ììoÂoo¥¥Ï"ÏÏ¥¥´´´´a´Š7ÌrrHHH›ÂìFWW..""øøà3à"ÏKKÏÏ"ÏÏ"øø|Ïø¥ÄÄ››››Ý0H›îîÝ000YYÑ$§ú<<e¶\22žKÇt¶¶¶¶ ¶ ¶hëëªýªªßß¶¶KKKK¼¼““{{QQ¤QQ¤9æ`º‰‰³³``–<é–¾ç:ç”ÏÏSSÛÛX™FpÃX..FF7äaaÌy£ö£ö££äŠ7äyÌÌy»aayyyyaaaóóÉÉFFÉóFóó|)Ö|Ö)Rÿ^±ˆÛoFF,†]†Ù†Ù°°n**¦¦*×}*GššGGGGš>>,V©JJJJߌbbŽ;##¦¦¦¦##Žèèè(((‚šíí"ô#•&ï)r+&„&„(1&„' +' +%]%]&3&3%]%]"n$$$#E#E%È$#ó#ó##!Û#ˆ#ˆ#ˆ"±"±#ˆ#ˆ#ó ™"F"F!"Ì$y"Ì"a ´!Š#7"+¹$$Ñ~ùùLLŽŽ¸eŽŽe¸¸eŽ;ee¸eùùv#ùù#ÐÐ#ù¦Ž;eŽŽŽ;/‚‚/X‚/g©©ß2[µJÍ eeeeùùÐ#eeeeSùÐЉ‰²²ù¦Ð#LL##ee¸¸v#ùùŽŽŽ;ŽáŽ;‚‚Ü/ÄqqÄ//‚/ššÄÄÄÄššGGqÄeeeŽŽ;;;Ž;;ÐÐÐÐÂÂo™Fo"ÏÏÏøøø¥a7ÝŠŠÝŠõõÌ›õrrì?ì™...KøÏ" ¶ ¶KøKKu"ø¥øKøøø¥||›îîîÄqH›Ý0›îîîƒ000Y00úú$Ñee¸e ¶2ßtÇÇt ¶ßß2ßß2h€ÓÓÓ22Œßt!KK““““¤Q{(÷¤(Î9æ¼66³`‰Ü‰6–<eé–<é¾d::::¾¾dÏ|¦S²Û.™F™™ˆÛ²FFFóä7aaÌÌÌÌÌyy»ÌyÌyaayy££aa77óóÉFóÉFFRÿ||ÖÖ))^±5.o°°°°°°°]°°SS***×*×qššqqGšÁ©VVVJJJµŒß;;}Ð}#Ð}¦ù;è((Õ‚ÄÄ#Ë&'Å)r)r(1(1'Z'Z' +(·'à$†%]' +%]%]$ò#E$%È$ò$ò$ò!˜#ó% #ó#ó!!!Û#ˆ"±"±#ˆ#ˆ#!o!o!o#¢!õ$y"Ì$"a"a"a"+ÑÑ$ÑùùùùŽŽ¸eŽŽ¸e ¸Ž;eee¸ùùÐ}¦L#Ð}ÐùLŽ;e¸á;Ž;Ü/Ü/X/ÜÁÁÁVVߌµµJ÷Í eeùùÐ#ee¦¦ÐЉ‰LùÐ#LL##¸¸eeÐ#ùù;;;Ž;ŽŽ;Ü‚‚/ÄqqÄ///‚ššqqqqššššÄqeee¸;;;;;Ž;;}}ÐÐÂÂo™Fo"Ï""øøø¥Z´ŠŠÝÝŠÝHHrHHÅÅ?ì?ì.ÛøKÏ"¶  \Kžžø"uKøKøøø¥øÏÏ›îA›Äq›î0ݛƒ000Y00úúw$¸¸¸e ¶Œßt!t!¶ ßßß2ß2h€-ÓÓßßߌt!KK9““9÷¤{(Q¤{{æ9b6ܳ`‰6܉–<¿<éé<ççdd::d"ÏS¦XˆÛF™FFÛ.²FFóFŠ7aaÌ&yyyÌyyaaaÌyyÌaaaaÌÌ££aa77FFoÉÉó É™óRÿ||))))±^ˆÛÂo°°°°]]°°°°°nnSS}××**}qš@ÄÄšGÁÁÁV©VVJ÷bµŒß¸ŽŽÐ#ÐÐÐ}S¦è;ÕÕÕ‚ÄÄ$k&'Å'Å(1(1'Z'Z' +%]&3&3%]' +"%]$ò#E$"n#E#E#E#E% #ó#ó#ó"±"±!Û#ˆ"±"±%5!Û!o#(#$É#¢!õ$y"Ì"a$%»"a#ØÈá4] + \…2¯\…2h>>‘>‘>¬¬YÅ∈5w$  ³³‰ã``‰‰éé¿*}ÎÎ{Îc½c-‡ooEE———Daa‹‹ÍÍzz¾¾”çìì??ììààø¥Ï"ÅÅH›´´¨¨¨¨~Ѩ¨  JJ1Þ‹‹ÁÁ>>Ò,V©ÒÒÁÁëëÁÁÁÁÁëëiiÔ'ªý°]3†33333333††3†iiååååå8FF™FóF^±^^^±±^yÌÌ`` `Ø…[2………úú$$Ñ~~$eet!!tÇt!!WW€Ó¸e¸ââîîÄÄ›AWWªÂÂë>ßßßß ¶¶ · +Žá +·]·ÈuŸŸLŸŸò + + + +"uÈuŸLLLŸòLŸLŸuuÈuŸŸ««þþþþÔ'6g   1„„„„„[[7䊊Ì&PPä7ääŠä7äÇmmØØØØa££yÌÙÙ††òEEE††ÙÙnn˜˜zz'z9æ¼Ù†††nnÁ¹ U¨ûf¹¹¹¹fff111111„„ïBBBBBNNww¡¡ww××­­kBBÊpôô    BBïïBBÝŠõõ¢ O"Ó&-(°*](E(E)%Á&}##&}$Ð&&"¸$e$e"¸!á#Ž$e$e#Ž#Ž$š"í!@"í#Ä#Ä""!¬%$/$/#Y+º1—)6$š"í!@!@ Õ"‚%#Y"íuᎷ + \2… \2…»hë‘ä‘>‘¬¬YÅkÅâ5w$MM³³‰‰³³ÜÜéél¿*}TTÎÎ{ÎcÚÚ°°ooEë=—D—UU88ÍÍzz¾¾ç”ììÂÂììììààø¥|ÏÅÅ›îZZ´´¨¨¨¨~Ѩ¨ssJJ1Þ1‹ÁÁ˜˜ü©,,gg>>Á>>¼iiz'ýª +]à3ààÙ3à††††††3¼¼’’åå8åóóFóooóF^±^^^±±^ÌÌyy``º Ø…®®…Ø……úúwÑ<<$ÑÑÑ鸸Çtt!tÇ!!ªª€Ó¸e¸ââîîîî›îýªªýÂhë>…ßßß\ ¶ · +Žá +· + +"uŸŸLŸŸL·] + +u"uÈLùŸŸŸòLŸŸòuuuÈòòþþþþþþ'z66ãã    ׄ„„11®®Š777ÌÌ££ä77777ä‘ tmÀ………+a££yÌÙÙ††òEEEÙÙÙÙnn˜òzzzÍ9æ¼Ù†††Ánnf"0Ä(c¨û ¹¹¹¹ ¹¹„„11„„1×BïBBBB¡¡ww¡¡ww××­­kBBÊÊ¡¡_¹¹¹BBïïïï07¢¢¢ O"Ó&-(°*](E(E%Á%Á&}##&}$Ð$e! $e"¸&$e!á#Ž$e$e%;%;$š"í"í$š#Ä j""!¬%$/$/&³2n9ø.=$š"í"í"í Õ"‚!¬ÿ"íŸ +·áá\\\ 22\¯‘>>‘‘‘>‘Ö)ÿ¬k”î ¸â5w$MM³`Ü/‰Ü³éé–é}}TT{{{!99ÚÚ‡ÚÂoÂÀÀÀÀÙÙUaa‹å££zÍç”çç?ìì?hh?’3à"""Ï››rr´´¨U+~¨¨¨ûJJJJµÞ8ÁÁVVVVVëëÁnÁëë>ë¼¼¼¼z'Pý]]†3 + +°]]]]]3Ù°]?’åå¼å’vóóóFFó‡Ú±±‡‡4‡õ¢yy77` [[[®®ØØú§wÑâ$$ú§¸e<KKKžKKÎ!&Ó€&ë>>><eee¸â››ÄÄÄÄÓ€ªýh‘‘\¶  …Ø  ··áá··· +LŸŸŸLŸu" +]44ÈuŸòŸLLLÈÈLŸŸL"uŸòuuÔz''þþÔ'  6 ººº11[[[®777Š££öö7777ä77äC–mm¯aŠ7PPö£3,nn]°°n¤¤¤¤æ9Ù†nnnÁãã¹".@'Œ~Ñ ¹¹¹6„„„„­­Z­kkkBBkôôÊÊÊ$¡¡­BBBB¡¡¡N¹f¹¹BB³`õ¢ O!ü$€'Ú*]*]))(E(E%§"M#ú#ú#Ž%;#Ž#Ž%;%;%;#Ž#Ž%;%;%;#Ä"!@$š""""#Y#Y#Y%%* *ã)6#Ä""í"í Õ Õ!¬#Y#ÄŸ +]áá¶\\¯22\¯>ë>‘‘‘‘>ƒÖ¬YÅAA ^5âw$Mó³`‰Ü܉³éé–é}}TTÎÎÎÎææccÚÚ-ÚoÂmÀÀÙÙ¯aa‹å££zÍç”Aç?ìì?’?à"""u››rr¨U~Ѩ¨ûNJJJJµ‹‹nÁÁ©©©V©©,Ò˜˜Ág‘ë똼¼'ÔPý + +3†]]°] + +]]3Ù] +?’åå¼å’ÉÉóóóF™F‡Ú^^444‡¢õÌÌ77` ®®®[[ØØMú$$â$$ú§e¸<KKKžKK!tÓ€-Óë>‘‘<eee¸âîîqÄÄÄÄÓ€Wªh>>   ¯…2¶\ +dáá·· +·ŸLŸŸŸL"u +]44ÈŸòLŸòòÈÈLŸŸL"uŸLuuÔÔ''þþz'ººãã ººº„„®[[[®777Š££££77777ŠŠ7–émmU¯¯aŠ7PP£P†ÙnnÁ°°nnn¤¤¤¤9Œ,ÙnÁ66¹f~~Ñ$¹ ¹¹ãã11„„­­­ZkBBk¡¡wwÑNN­BBBBNNô¡¹f¹¹kÅïïÅÅÅų`` O¢¢ O!&$€(°(°'n'n(E(E#ú#ú%§%§&è%;&è#Ž#Ž#Ž%;#Ž#Ž%;%;!á#Ä"$š$š""#Ä#Ä!¬!¬!¬#Y!¬#Y$/"‚#Ä""í"í"‚"‚#Y!¬ j‡ +]]]2…\\………2h»»»&&ýªY¬ƒ0YYƒƒwÊw$5ââõõõõ``‰Ü}}§§§TTÎÎ!Τ¤¤÷E˜ÂoÂÂEE¨UÀÀÀÀ8‹8åaaSSìì.ªªøK"uKø"u››ÅÅ›HHHff<<ÑÑÑÑ‹‹bµÞÞÒVVVVV,Áë>VV©©ýýPP’åå’uuÈDD33Ù†33Ù3'zzzP£z'± 44óFoÉɇ4±7Š``¢¢ÌÌÇðð………2¸e⸸¸¸$wMú  ¶¶ttžž>‘»h€ÓÓ€ÑÑMM¸¸îđ>>>ÇtttžKKK""LŸ444á‡4á4ÈÈÈu + +áá4á44á444ŸŸÈu44··uÈuuþ«þQ擼¼º` º=ººïïïï„ׄ„öö£öÌyöö77aööÌÀÀÀmmm––£ö£Py&&&òEÈnÙÙÙ,Ù°V÷¤¤Q¤÷Q¤nn˜EEò˜ë¹¹¹¹¹¹ã¹fãã¹¹BïÅ„„­­Z­­kkk _66NNN¡k••„ׄ„wÊ¡¡ããã­Z­­ZZZZŠŠ7Š¢¢¢ O"g"g&˜(E&˜(E'n'n&è%;%;%;%;#Ž"¸"¸#ú#ú$Ð&}#ú#ú#ú"M#Ä#Ä%q#Ä#Y#Y!¬!¬#Y#Y#Y#Y""" j Õ"‚$/"‚!¬#Y%#Y!¬á +]·]2…\\222ßh»»»&&ýªÿ¬ÖƒYYƒƒwÊ$wââââõõõõ³³Ü‰**§§§§ÎÎÎ{QQ¤÷˜EoooEëUUUmmmå88åaaSSSSììÔýWøK"uKø"u››ÅÅ›HHHéé++ÑÑÞÞµbÞÞVV,©V©©VV,Áë˜VV©©ýýý£å’’?ÈÈnnÈññ33Ù†††††z'''ýP'z± 44FóÉÉov‡4^±7Š`ºõõyyÇððØØ…2e¸â¸¸ee<<Ñ$Mú  ¶¶Îtžž>‘»hÓ&Ó€$$ ú  AAîîÄÄÄhë>>>ÇÇÇžKžžuuLŸ44ᎇ4‡4uuuȰ +áá4á444á44ŸŸÈ‡‡ + +uÈÈÈQþþQ@“iiºº ºã  BBœB„ׄ„£££öÌyœö77´a££yÌmmmÀmm––P££P&yyyòEÁÈnnnÙÙ,ÙÙÙ°VJ÷÷¤¤Q÷¤nn똘E˜Eff¹¹ fã=ã¹ 6  BïÅ××­­­­kkk¹ ããNN¡ôkBB„×××wÊNNããã­ZZZZZ0ŠŠ7õõõ¢ º$$ë)ò(E&˜'n'n(•&è&è&è#Ž%;$e$e%§%§##$Ð#ú'T#ú"M""#Ä%q#Y#Y#Y#Y%%#Y#Y""" j Õ"‚"‚ Õ#Y%%#Y%4 +]á4\¯……\¯\\‘‘‘äýªýýÿ¬)ÖƒƒƒÖó $$¸¸HHHõ``³TT}*TTÐ}Q¤¤¤{ÎÎÎoooE˜ÂU,,mmm88å‹‹888SSh?™WªªWu"u""""Ï››ÅrÅr››fUÑ$ÞÞ‹‹bµµµÒ©©ÒÒüV,ÒÁgÁë>©V,'zÔzåå¼¼nnÈžK33°°Ù†]]''£Pýýzz±^‡‡FF  óFF 4‡^^ ³³ ÌÌÌ&CððC®®®[¸e¸¸¸¸¸eee$$$$2…22tÇñžhhhÓ€€€$wMúe¸¸¸ÄÄÄÄ>>hhhhhhžžtÇÇŸLuu] + +· + +4៟uȇ4á444]] + +4‡ŸŸŸò‡‡4áòŸŸòþþzÔi@“ºº6ã㺺ïïïBׄ„„ö£ÌÌÌÌÌ777Š£££öCC––CC––ÌÌ££ýPP£˜Enn˜˜˜˜ÙÙÙ†††]°÷÷Íz¤÷÷¤nnnE˜nãã=ã ¹=ã6ããããkïèׄZZ­ZZk•ï_  ¹wwwÊk„×­­NNww ¹Z­ZZ1„ZŠŠ``rÌõ¢"g$$)'n'n)'n%;%;(•(•&&$e$e%§#ú#ú#ú$Ð(*####!@"í$š$š$/$/(`&³#Y#Y"‚$/%q#Ä%q""‚"‚!¬!¬ Õ$/#Y#Y"‚4 +]‡4 \22 \  ‘‘‘äPýýýY¬ÖƒƒƒÖƒM wwâ⸸õõõH``³TTÐ}TT*}¤÷¤¤{Î{{Âoooë˜ooU†,mmm‹‹88‹8ååSSSSÂììWWª"Ïu"""Ï"››ÅÅ››fU¨Ñ$ÞÞ‹1[bÒ©©VVÒ,ÁÁÁë>©VÒz'zzåå¼¼ÈÈÈužñ33°°†3]]zzPýýý'' ^‡‡óóóó óóó‡Ú±±   ³yyyyCðCð[[[®<<¸ ee   ¸¸¸$$$$ߨßßÇžñhhhÓ&€&w$ M¸ ¸¸ÄÄÄÄ>>»»»»»»ttžžÇÇÇÇŸòuu· +] +]]4៟uÈáŽá444]]]]4‡ŸŸòŸ444‡òŸŸòþþ''¼i“@ºº6ã㺺BœïBׄ„„ö£yÌÌÌyy77Š7öö£ö––CC––CéÌÌ££PýP£E˜nn˜˜˜˜,,,ÙÙÙ°¤¤z'¤÷÷¤ÁnÁÁ˜EÈ=ããã¹fã6ãããããÅïB„1­­Z­­­kïï ¹f¹Ê$w$k„×­­NNww¹f­Z­­×„´ŠŠ³³¢ O º"g'n)'n'n'n%Á%;%;&è&è$e$e$e$e#ú%§%§%§$Ð$Ð##&}$š"í$š$š%Ü)6-g+º&³#Y"‚$/"#Ä"""‚"‚!¬!¬ Õ Õ!¬!¬$/«ÔÔþþ\ \\ \22…2\\ÇÇtYYƒƒƒƒ¬¬¬ÿ¬¬¬ÿÖ0TT§§*××*```³H›HHc¶99Î{Q¤˜˜E˜° Í££aaaêê—D,,ÙÙóóu"øøc¶ààªWªªÂììÅrrr´ff<UU¨û1‹‹‹ÞÞJ ssÆJ÷ºëë©VVVÞ‹µbÞ‹‹‹''£ý''ªP†333ñKÈ8ååå’å’å¼¼i¼¼¼å’ÉÉóó^^^ óóóF±±±   `õ¢yyº ºggg `ÄqîAÖƒYYâââ⸸ªýýªPýýý ¯ ¶ \ß2Múw$$w$Ñââ  MMw$ßß\\\\\\žKžK \\ @“@“““““]]44 +]44“@þþ‡4] + +]áá¼iiiþþþþ¼¼¼þþÔÔïï ººº%%ûû–é––ÀÀééÀmm¯UUØ++~++Àm–––Cm'ÍÍz99bbbbb¼nnn°ÙÙJJ÷÷b¼ZZZZ„„ZZw$N¡NNww­­×„„„××ww$$¹   ãã¹ ¡NÊwï•k„×­­ïB­ZZ­¹   ==¿¿Ø … …"2'9'9'9(æ&b&b$e"¸&è%;$e$e$e&$Ð$Ð%§%§$e"¸$e&$Ð###ú#ú$Ð.Þ>©VVVÞ‹µ‹ÞÞÞ''PP''ýý†333žžÈ8åååå’’å¼¼¼8åvv     ^óóóF±^±± ³` O¢yyº  ºººº ÄqAîÖƒYYââ5ââeeýªýªPýýý\\ ¶ \2ßúM$w$ww$¸¸MM$w22  \\\\žñDK \\ í@í@æ@íí + +44 +]44“@ÔÔþþ‡4 +· +]áá¼iiiþþ««iii¼þþzÔllïï ººº%%NNé–ééÀÀ––mÀUØ++~++mÀ–––Cm'Í ÍŒŒb¼bbnnnÁV,,J¤¤¤bbZZZZ××­­w$¡NNNww­­×„„„××$$ww ¹  ãã¹ ûNÊwBBk„×kÅïB­­ ¹¹¹ê¿l¿lTTØ …"2#ß'9'9(æ'9((&$e%;#Ž&"¸"¸$e$Ð$Ð'T'T"¸$e"¸$e##$Ð%§%§$Ð+„:™7?)¡"í#Ä#Ä#Ä#Ä"í!@!¬#Y#Y!¬"#Ä"""íþÔÔþþ \¯\……\\¯\2ßžžÇtY¬))ÖÖ00ÖƒÖ0Y¬ÿÿ}*}ЧT*}‰‰³ HHËËæ9cÎ{ÎΘ˜E˜V°-€ÍÍÍ aaaaDDÀÀ,,ÙÙÊÊÊÊ""""¶ ààWWWì?’?r››´<<é<ÑÑûûÞÞ‹Þ‹‹ s÷ðJ÷g©©ÞÞbÞÞPPýýýPzz°°] +ÈÈñD¼¼¼i’å¼¼¼¼¼¼   ó44 ^óó ó±^4‡ ``º&&yÌ  ääääºgqÄÿ¬¬¬â5â555^ ýýÓÓPý&&\ \\\   M $Ñú  M¸ wÊww\\\¯\\22ñžÇtß22ßííí@iíí· +44‡4 + +@“¼¼Ô'þ«] +44 +]‡4¼i@“z'''i¼æ“«þQþÆÆBBÆBï6㺺NNx%CCÀÀðÀm–éÀÀ~~Ø+++UUUÀm––mmmmzÍÍÍbbb9Œ99˜˜nn,ÙV ÍÍÍŒŒŒŒZ­ZZ×ׄ„wwÊ$Êwww­­­­1„­­N¡Êw ¹  ã¹¹Ñw$$••Bï1ׄ×ïï­­­ããã=ll¿lT …"2![$µ(('9'9'9'9&è%;%;%;'¿$e#Ž!á!v$Ð&}&}%;#Ž#Ž#Ž##$Ð&}$Ð#ú%§*®)#Ä"$š$š$š"í""!¬#Y#Y!¬"""í$š#ÄþÔÔþþ \\ Ø2\\ \2…ñKÇt¬ÿ0ÖÖÖƒƒ)ÖÖÖY¬¬¬Ð}}*§T*׉‰³³HHqq9Œ¶cÎ!ÎΘ˜E˜-ÚÍÍ Íaa——ÀÙÙÊÊÊÊuuuu ¶ààªW?ìì?År››´<<é<ÑÑûû1‹8‹ÞÞ s÷÷g©©µµÞÞbbÞÞPPPPP£Í']]]°ñž¼’åi¼¼¼¼   ó‡‡^±  óF±^‡Ú`³  yyy&  7‘ää ºÄÄÄY¬¬¬ââ5â⸠ýý&&PýÓÓ\ \\ \  M wÊMMM ¸ 5w$ww\\¯\  22ñžÇß22ßíí@“iæ@· +44‡4 + +@“ÃiÔ'Qþ +·‡‡]°‡4¼i@“'ÔÔÔi@“þQþ«ïïlB•㺺û¡x%––mé–Àm–CÀÀ+Ñ+ØØØ¯mÀéCmmÀÀ Íz bbbbb9æ99bb>˜,Ù°Í   ŒŒ99Z­­­„„„„wwÊÊÊwÊ$­­­­*×­­¡ôÊw ¹  ã¹¹$$$$•••B„„ׄÅkBBZZZ=6ã==êll¿®Ø …![$µ+i+i(æ(æ(æ%Œ&è%;#Ž&è&&&è%;##&}$Ð$Ð&è%;%;%;!v##(*###ú"M%§'T#Ä""í"í$š"í""!¬#Y%#Y"""í$š%q«@@퓞ñttmÇt22\\žžÇt””k¬ÿƒƒÅîî<éeéé––Üܳ³HHõõ9ߌ99999V°Ú€V°Íz Íaaê—Àm—DmóóóóccààøKøK.ªªWªÝ00000ÝÝÑÑÑ~¨¨ÑÑ÷÷J÷bµµµµÞÞ÷JÍ g>ëÁÁJ÷ssbbµ¼ååýPPP°]3Ù°]††zz'z8å¼'Ô'z¼¼óó‡‡^ vvɱ^^^7Š  OOOü777ä  ää0ƒ¬YîAAî$$MMww óªPy&‘>‘ä\\2…mžžwwwÊ5â5â555ââ ¸\\…2tÇÇt22 \22ßßÔþþÔᇠ+ +uÈŸŸ@@iii¼æ“44]]°]] +@““æþþÔÔþ«þQQþÔÔBB××®®   º  ããUU––Àm+++~m–騨Ø+++À––Ø+UŒŒ99ŒŒbb99ŒŒbb,nn˜˜ÍÍJJ¤÷  Z­××Bïk    ¡¡¡û„×­­­­„×ã6  wwwwããããã6¹¹­×„ZZ„„„ׄ„ïBkÅÑÊwÑ~~~~++ ðC ð" ð%÷,«)Q&b)¼(&b&è(•&è&è$Ð##$Ð&}&}$Ð%§#ú#ú%§$Ð&}#Ž#Ž&"¸$e$e#Ž#Ž"í$š"í"í"í&G"í$š%q%q#Ä""í$š"í"í#Ä«@@@@ñžtÇÇ22\\žžtÇAAŬYƒƒÅkÅîîé–¿<<––‰‰³³HHõõ9ߌ9æææŒ°V-- ÍÍzaaaaD—ÀmDñÇóóóóccø¥øK.ªªWª0Ý0000ÝÝÑÑÑ~ûûÑ+÷÷JµµµµÞÞJ÷ Íg>ëggJ÷  [¼ååýPPP]°††]°††zzzÍ8å¼'zz'¼i¼oÉóó‡‡ ^ÉÉÉ^ ±±ä7ººOO¢O‘7䑺ºääƒÖÿ¬îA”AwwMM$$M ýýÓ&‘ä‘ä\\2…Çžž$$$wâââ55âââââ ¸\\…2tÇÇ…ßc\……22ÔÔÔ««.Ž4 + +uÈŸŸ““i¼æ“44]]] + +]“æ“æþþ'QþþQþQÔÔBBll„„®®  `   6UU––À+++ØmC–+++ØØ~ÀmééØ+U¨999999bbŒŒŒŒ,,,ÙÁÁ˜˜ÍÍJJ÷J  ­××BïŹ¹  NN¡û×*­­­­„×6ã  $Êwwããã6¹¹­Z1„­­„„ׄ„„ïœ$w$$ÑÑÑÑTT++–C"$J$J%÷,«)Q(((&b&è(•(•%;$Ð&}&}$Ð$Ð##%§#úó#ú!v&}%;%;$e$e$e$e%;!áæ&G$š!@!@$š"í!@ j#Ä#Ä"!@"í"í"í"«í@@@ÇÇñDÇÇt \……žñžñkŃ0ÖƒÅî”ÅÅé–é–éé³³66õõHõ99Œ9æ9°°-‡VIööö‹8‹‹——ÀÀmññóóÊÊccccø¥"uÔWWªWª­ÝÝÝ0û¨ûûÑѨUs  sÞ1‹‹‹‹µ ssÍ‘>ë>g>>÷÷  Þ‹µµå8¼¼''z'†Ù33à† +°£Pzzåå¼¼z'''’å¼¼óóÉÉ^^^^óó‡444  ‘äyyy& ` ºº`` YYƒƒîA””$$$w ú  &Óýýhh>‘\¯22ñžÇtMMÊwâ⸸ ¸ââ  ââ\¯¯ KñÇÇ22¶ \\\ .Ô««««· +ááLŸòŸiiii¼æ“]] +] + +4‡ææ¼¼þþÔ'Q««þ''Ô'BBll„„1„ãã``6ãã+~ééÀ++¯mÀééU¨UU~+UU––ÀÀU¨¨æ9b9Œ999Œbbbb,V©Á˜˜¤J  Í   ××­ïïBBããã6ÊwNN**­­××1„6ã  N¡wÊãããã   ¹„„„×­­­×„­Z$wNûU¨~~®ll !Æ!Æ&Í)Q'¤*“'9$µ&b&è(•)l)l%§'T$Ð$Ð%§%§#ú#ú#ú%§##$Ð%;%;$e"¸!á%;%;#Ž j%q#Ä#Ä"#Ä#Ä#Ä"""í!@#Ä""í"í$š«í@““ÇÇñžÇÇÇÇ \ß…ñžžñkŃÖÖƒÅî”kk<éé–l––³³‰‰HHHõ99Œ99ŒÚÚVö£öö‹8‹‹êDmmmDDóó¶¶¶¶žKu"ÔWªªýýªZZÝÝ0ݨûûûÑѨûÆsÆsÞ‹ÞÞÞÞµ s  ë>>ëg>>JJss‹Þµµ’å''z'à3††††]]P£zzåå¼¼z'''å’iióóÉÉ^^^^óóvÚ‡4Žººä7yyyÌ ` `ºº` ¬¬00A”AAwww$MM  Ó&PPhh‘ä ¶22DñÇóMÊw55   ¸â⸸5\ \\žžÇÇ22 \\\ ¶''«««« +]44ŸLòŸiiii“@]]] + +°‡4““iiþþz'þþþ«'''zBB„„„×ãã`ºã66ã+~ééÀm~~UÀ––U¨¨¨+~¨¨ééÀÀUUU9æbŒ“iææ9ŒbbbbÙ,VÁ˜˜÷÷   s z„„­BBïïãã6ãwÊ¡¡**­­××ׄã6  ¡ôwÊãã  _ „„„×­­­Z„×Z­kk$Ñû¨U¨~~®![   !Æ% &Í'¤)Q*“'9(&b&è(•'¿'¿'T)$Ð$Ð'T'T%§%§%§#ú$Ð&}%;%;$e"¸#Ž#Ž&è(•%q#Ä#Ä#Ä#Ä%q%q%q%q"!@"í%q#Ä$š$š&GÈuuÈÈââââ$$MMY¬¬¬ƒƒ¬¬&&Ó€Ó&PP…22… \\\ë˜ooooo!Τ÷ccŒŒ‰6³ ¢õHHÐ*×*}}§TÏϦS||S¦FFFóˆˆ  SSàà¶ uuuu¶¶¶¶¶¶¶¶<é$Ѩ¨›îÅr››rÅ;;ŽŽùù#ÐùùLù¦ù¦¦X//ÄÄíí#Ð##¦ù##†Ù°°]]°° + +]°°]]wÊôô_ 66•Bk­O¢¢¢    ®®ØØ®……ÿ¬ÿR({Rÿ½@“““½j  ¸e ^¸¸AAîA¬¬Öƒ¸ â5MM  YY¬YÄAAñžñž……¯ Ç\\2…PªÓ&ýýPý>‘>‘ÓÓÓÓ„×®®ïœÆÆººººãºº4‡‡4 + +]]òòòò +]‡‡¼iiii“““æ¼i““““òò] +]]ii¼¼QQ''ööÌööÌ~~UUé–mÀ..ˆ.±™™™™ooooèè¦×}SSÐÐee¿;;ÐЦ¦Ð#¦SÐÐùSkBB­­­Z$wÊw    wÊ$$wwNNwÊwÊ6ã  þþÔÔ’’¼¼Dñññ†33†??i¼iiå’žKKøøKÏÏCC !Æ   ð ð% % %÷%÷)Q$J'¤%÷'¿'¿'¿&&è&è&&$Ð&}%§%§(*$Ð%§#ú$µ$µ##$J$J(z(z%÷$J$J"![$µ$µ&b&}$Ð!v$Ð%;!á#Ž&è+„uuuÈÈ55ââ$$MMY¬¬RÖÖYYÓyÓ&Ó&ýý2ß…2 \\\˜ëoooooÎ{Q¤99‰6``Hõõõ}}}***T||¦S||S¦FFóFˆˆ  S¦Sàà ¶""uu¶¶  ¶¶¶¶<<<$ÑûûH›Å››rÅ;;;;ùùÐ#ùùùLù¦¦¦X//ÄÄ@šÐ###ù¦ÐІÙ]]°°°°]]°]]°]wÊôô _66B•¾kSO¢OO    ØØ®[++Rÿ¬ÿ(Õ¬Yj½æ“““j½¸¸ ¸¸ ¸¸îîîA¬¬Öƒ¸ â5MMóM¬¬ÿ¬ÄAAñžžñ……¯ ÇÇÇ  …2PPÓ&ýýPýë>>‘ÓÓ&&1„[[ïœÆlººººãºº‡4á4 + +]]òòòò +]‡‡ii¼ii“““æ¼i““““ÈÈŸŸ] +]]¼¼¼¼QQ''ööyÌIIÌ++UU–éÀ....W^ó™™™ooÂÂèè¿¿SS}}¦¦Ðпeeèè}}SSÐ}ù¦ÐÐSSkèB­w$$w    ÊwwwwwNNwÊwÊã6_¹þþÔÔ’’¼¼ñžññ†33†’’¼¼¼å’žKKøKø|| ð ð#s!Æ#s#s""#s&Í""'¤)Q)Q'¤)l)l)l'¿&è&è&&$Ð&}#ú#ú&}&}#ú"M&b&b$µ![%÷%÷% % %÷$J%÷$J$µ$µ#$µ##$Ð#####Ž#Ž!á+ï>®[[[11„×ããN¡ûNuuuu + +‡4ŸŸu]]á4Qþ'''Ô''“““9æ“iiòòòòÈòòQQþQzz'Ô£öIIré–ÀÀé<W±ÂÂFFW™F™™¦¦¦¦e;;•èe¦S¦¦¦¦¦¦ee;;;èùù}}BBBBB•BBÊ$wÊ6ã  ÊÊ¡ô    6ã¹ ãã¹ Ô'¤¤QþÔ']°††ÈQQ'ÔþQþQ] +à:l l¿–CCC®®®![&b&b(æ*“&)l(•&è&}(*%§'T&&&&%;&è(•&è%÷%÷&Í% $µ$µ&b$µ$J$J% % $µ$µ##$e$e&$e#ú#ú!v##!á4"uuuwww$âe YÿÖ0AAAîýªýýÓÓÓÓÇtt2222˜˜EE-ÚÎΤ¤ÎΤ¤Ëq`³³}}T§¿¿¿¿¾¾¦¦SSÊpFóFF¦S¦SÏ"uu3àKKKKà¶ NûûU<<ffZ››››ùL¦¦Ð#ÐÐe¸¸ùLÐ}Ü܉ܚGšš;èe¸ááÙ†°]]]]]nÈ]]]ôôw$ã6_ •èk×***Ìy¢O‘ä7äØ+ØØ®®……Rÿÿ¬Õ({(½½½½  óóÊÊÊwƒÖÖÖîAîAF wÊââ ¸A”””ÖÖƒƒ\\2…žKÇÇtÇÇÇÇÇt&&&&ýý£Phh‘‘»h>>®[[[„„1„ããûNNûuuuu + +á4òòÈÈ]]‡4QþÔÔ'Ô''““æææ“¼¼ŸŸòòÈòòQQQ¤zz'ÔöIööÌ<éÀÀ–é±±ooF쪪Wªì™™™ùùùS¿;;;è¿ù¦¦¦¦¦¦¦e¿;;è;¦¦}}BBBBïBBBwwÊwã  ww¡N    6ã¹ ãã¹ 'ÔQQQþÔ'] +††ÈQQz'þQQ¤°]à:d ¾l  l–é––®$µ$µ((æ*“'¿'¿&è%;(*&}%§'T'¿'¿&&&è(•&è(•'¤'¤&Í% #&b#$µ$J$J#s&Í$µ$µ$µ$µ$e$e"¸$e#ú#ú##!v#Ž +ŸŸŸLMMwwMúÑ$ÅkkÅÖƒÖ)ää»ýýÓ&‘>‘‘>>‘‘-Ú°°Ú‡Ú‡¤¤¤¤!ÎÎÎË6ܳ¿¿–éééˆÛÛÛÛˆ55”çç¾¾²__²Âì?’ì™ìuužKKø""¨¨$Ñûû$ÑÑ$¨ûûûÑ~ííšíXXÐÐ#Ð;;ee//²X//;;eeùù}ÐDñññ°°°]Dž]°Ù†××­•Bkk¡ôÊwÊÊôô77äää7` CCCðCC((ÿÿ½½RR¥R½½½ƒÖÿÿÿ¬ƒƒîAÖÖ¬¬AîîAÿÿÖƒâ5  M w$hh‘>ýP€Ó&yPPä>h2…\  \Ø…22¯\ßß2ßÆÆœœÆÆBBlÆ +]°]uÈòŸŸòÈÈòE°°] +4‡°]Ô'QQ''QQòòÈÈÈȇá]°‡‡]]¨UU¨Àm––a´aaöööö:çccà¶cøøÏ"qqqqqqèèeeè;qÄ/ܳššq³‰Ü„×××Z­­BBÅkB•¡NNNÊÊûNkk„„××]] + +33 +]''''’’ååñD°]ÙÙÈu"Ïd ¾:ç … …ØØ––ll++ …%Œ% (z*'+Ô'‰'‰(`&³'‰'‰'‰%Ü%q%q%q%q&G'ô%q%q%Á%Á$$#©#©#©%V#$µ%Œ%Œ$µ$µ##$/$/$/"‚#Y!¬!¬!¬"‚ +LòŸLMM$$Mú$wƒ00ƒ‘7hhPP&Ó‘>>>‘‘‘‘€--ÚÚ-¤¤¤¤{ÎÎÎqÜÜ`³e¿C–ééÛˆÛÛˆ555”ç¾¾çç¾¾_²²_Â?’??ì?uuøKžKuuûûÑ~ûûÑ$$ÑNûûû$ÑíííšXX#}Ð#;;ee‚‚²X//ŽŽeeùùÐ}žñññ]]°]ññ] +†Ù××­•Bkkô¡ÊwÊÊôô77777äº ––ðCCCÕÕ¬R½½½½RRRÿ½½½ƒÖ¬¬¬YƒƒA”ÖÖ¬¬A””Aÿÿ)Ö5â  M Êw»»‘>ýP&Ó&yPP‘‘h»…Ø\ \ 2ß22\ ………2ÆÆïïÆÆï•°] +·uÈòŸŸòÈÈŸò]]°]Ú‡]°z'QQzzQQŸŸÈÈÈÈÈÈÚ4]°‡‡°°¨UU¨mÀ––a´´´IIöö:ccà¶cøø|ÏÄqqÄqqqŽŽè;ÄqÜ/³ššÄq³‰Ü×*××­Z­BBïB¡NNNÊÊN¡kk„„„„]]]]33 +]''''åå’’žñ°]33Èu"Ï:"2Ø++ ð–¿¿ØØ …"2#s&Í(z*''‰'‰(`&³'‰'‰'‰%Ü''%q%q'ô&G%q%q%Á%Á$$%V%V#©!ü$µ&b%Œ"2$µ$µ##"‚"‚$/"‚#Y%!¬!¬"‚ +Èuu"  MM$ÑM k¬YYYh»‘>ýýPP‘‘hh‘‘‘‘°°°V°Î{÷÷¤¤¤¤õõ˳³‰Ü¿é–CC––²²²ˆˆ²²¾¾¾ç”__ˆˆ?ìh??uÈKžñKKž$Ñûûûûûû$Ñû¨Ñ$N¨šíqÄ////#ÐùŸeeŽŽ//²ÜÜ/‚ŽŽ;;¦SÐÐñDn3†††nžñ†3°°××­•Bk¡ôô¡¡N¡ô`   77ä7CCCCðCCCÿÿÕ(““½½R¥{(“æ99¬YYY¬¬¬jA”Ö0¬Yî”AA¬¬¬¬555âww  ‘ähhPPPý&y&&‘>»h2…22\\2ß \22\\22ïïïlïBl]] +°ŸŸòòŸòòLuÈ]]4‡°]‡‡z'QþþQþQŸònÈÈ44‡‡°ÚÚÑ~U¨Àm–éŠÝ´´öIccc:ccø¥¥¥ššqÄÄqq;;;;eqq//qšG‰Ü­­××­××ïB¾k•B$$wwwwÊÊBBBBׄ„„33†3 +]à†''QQ’’iiññDñÙ†] +u"øø ¾:: … … … …C–ééØ …®!["'¤)Q%÷(`(`* &³'‰'‰'‰'‰(Ë'%q'%q#Ä$š&G'n'n%Á'n&-&-"Ó$€%Œ%Œ%Œ#ß$µ##ß#ß#Y#Y"‚"‚"‚$/!¬!¬"‚]uÈÈuMM  $w MŬÿ¬¬»h>‘ýýýý‘‘»»‘‘ää°Î{÷÷¤¤¤¤õõqij³‰Ü¿é–éé––²²²ˆ.²²¾¾¾”ç__ÛÛ’?h’’"užñKKKž$ѨNûûûûÑ~û¨$Ѩ¨í@Ä‚‚‚‚Ð#ùùeeŽŽ‚ÜXÜ‚/‚ŽŽ;;S¦ÐÐñDȆ333ÈDñ3†°°**SïBkN¡ô¡¡ô¡ô`   ää7äCCCCðCCCÿÿÕ(““jÿR{(9æ“9¬Yÿÿ¬¬¬¬ÄîAÖÖ¬YççAA¬¬¬R55ˆ5ÊÊ  ä‘»»PP£P&Ó&&ä‘»ß222\\2…¯\22  22œïïBllïïÆœïÆs + +]]ŸEòòòEòòȰ°‡4 +]44z'þQþQQþòEnÈn4444]°‡‡~+U¨À–éŠÝ´´œIccccccc:ccø¥RøGGÄqqÄqèèèŽeËxË//qšG/Ü××­××B•kïBwwwwwwwwBBBBׄ„„333† +]†àÔÔQQ?å¼¼DDDK3† +]Èu¥¥·dçç+ … … …C–ééØ …®![$J%÷'¤'¤(`(`(`(`'‰'‰)6)6'%q%q''%q&G$š%Á%Á%Á'n$€$€$€&-#ß'9"2#ß#$µ#ß#ß#Y#Y$/$/$/"‚#Yÿ"‚u +]44$$ww$wwʃƒYYA”ÓÓªP&&&€»hhhÓ&ÓÓÚ-Ú-˜˜EE¤¤Îν¢õqHõËqéé<é¿¿².ÛÛ.²²çç¾S¦¦¦ˆˆ²hÔ¥øžž¶¶ààff<$$ûûf<û¨ÑÑÄÄÄ@íÐv#Ð;ŽŽ;/Üš@Äĸ¸Sùùù†††ÙñD]]]]ÈÈÈkkBBSS¡ôô¡ô¡¡ô   ³  7ämCC–C((RR½½ææ((((¥RR¥Öƒ¬¬ÄîAÖƒ¬¬AAjÖÖ¬¬ÖÖ¬ÿ  ^^55â5»»h»Ó&&&h»hy&PPÇñž2…………22ß2Ø…2[®„„ïïïïïïÆsÆÆ‡4 + +òEŸŸòEÈÈEEÈÈ]]]]ŸŸòŸ¼¼“æ''zÔÈÈòòòònȰ]‡44Ú‡‡U++UUrIIIIÏ"øøøø""Kø¥øÏÏøøGGqÜ/³³e;Žèè³³66Ü//ÜYqÄÄqkkkBB•B­­­­Z­­NNw$ãããã•B­Z××ñžžñ]]†3i¼¼''þ¤Dž]] + +u"¥¥"Ï!)!)ØØ![®Cé<<C ð ð ð#s% '¤)Q'‰*ã*ã'‰'(Ë(Ë%q'ô&G''(Ë'&G&G&-'Ú$€$€#©#©''$J$J!Æ#s#s% "$J"#Ä#Ä#Ä%!¬#Yÿ#Y"°]ááww$Êw$w$ƒƒYYîAÓÓªP&&ÓÓhhhÓ€ÓÓÚ-Ú-˜òòòQ÷!{cõHqHõ–<<é¿¿²ÛˆˆÛ²²::¾¦SSSˆˆ²hhhÔøKKK¶¶:àffâ$$¨¨f<û¨ÑÑÄqÄÄíšvv#Ð;Ž;Ž‚/««ššqqeeeeùùùù††3†ÈÈñD]]]ÈÈÈkkBBô¡¡N¡ôN¡  ``  ‘ämððCðÕÕÿÿææ{{((¥R¥Rƒ0YYjîAÖƒ¬¬AAÄÖÖ¬¬ƒ)Rÿ^^  âââ5hhhÓ&&&h»h»Ó&ýýÇñžß2………22………2ß[®„„ïïBBïïÆÆl‡4 + +òEòòòEuòòÈÈ]]]]òòEòiiæ9''''òòŸŸ]°4‡‡‡44U++U¨¨UÌIIII"Ï¥¥øøÏÏKø¥øÏÏKKGGqÄÜ/eŽ;¿¿èè³ 66Ü/Ü/YqÄÄqkBB•B­­­­­Z­NNw$ããããBï­××ñžžñ]]Ù†¼i¼¼'QQÈÈññ]]]]ÈøøÏ||| … …® ð–éé–C ð ð#s% )Q*þ'‰'‰*ã'‰'(Ë'''ô&G''(Ë'&G&G&-'Ú&-&-'#©%V%V%÷%÷#s!Æ#s% $J" j"#Ä#Ä#Y#Y#Y#Y#Yu +]44M $Ê Mwwƒƒ¬YÅAî&&&ÓÓ&ýýhh‘>ÓÓªªÚÚÚ-ëEEE¤¤ÎÎŒ9ccËHõ–<eéééé_ˆˆÛˆ_²¾::|||ϲXh™™WªW±""KK¶¶àff¹$Ѩ¨é<éû¨ÑÑÄší@šLLÐÐŽŽ;áXX««ÄÄÄ;ŽÐ#ù¦††] +ÈñD†† +]ÈññB•••}×­ÊÊÊwÊwʺ 7ä  ääCCðC–CÿÿÕ(æ“RRÿR({RRÖƒÖƒAAƒƒ¬¬jÿÿ))ƒÖ)Ö¸^^^ââ ^‘ä‘‘PPPP»‘‘Ó&ýýžñžK22\  \…………22®®„„B•lÆÆïBBB4444òòòŸÈuòòòòŸò°°‡‡EòòòææææþþQþÈÈnuòE‡‡á4‡4]]++UU~+~~rr¥¥Ï"ø¥¥ø¥¥ÏÏÏÏÏÏGšššYY;è¿¿•• º6‰‰Ü/ÜÜ/³GíqB••ï××××­Z×*NûNNã6_ kBׄÈÈKñ] +]]å’¼QþþQÈȆ†°°Dñu"ÏÏ R R#®®![ ð–lll ð ð!Æ#s(z*'*ã)6* (`'ô'ô'ô&G&G$š%q%q&G$š$š&G'Ú&-&-&-%V#©#©%V$J%÷% #s"$J#s% %q#Ä""$/%Ü$/"‚"‚u· +ááúMwwúMwwƒƒ¬ÿk”A&&&Ó&Óýýhh>‘ÓÓPª---Ú˜˜˜ò¤¤ÎÎ9ŒccËËËõHéé¿éé<–_.ˆÛˆ_²d::Ï))|²Xh??ýªªuuøø  3à¹ff¹Ñ~ûûé<ââû¨~$ÄšíGíùùÐÐŽŽŽŽXXXXÄÄÄŽáeeÐ#ù¦††] +ÈDñ††]°nññB•••××­ÊÊwÊpÊwº ‘人77ððC––Cmm¬R({“æjjRRÿR(ÕÿÿƒÖÖƒAAjjÖÖ¬¬j¬¬ÖÖƒÖƒÖ¸¸  ââ^ ‘ä‘‘PPýý»h‘‘Ó&ýýñDžK22\  \2222……[[„„BïÆïB¿ïï4444ŸŸŸòuÈòòòòEò]]‡‡EòòòææææQQQþÈÈÈÈÈòEÚÚ‡4‡4 + +~~UU~Ñ~~ÌÌrrrrøøÏ"ø¥¥øøøÏÏÏÏÏÏGššš;è¿¿•• `6‰‰Ü/ÜÜ/³ššÄkkkk•BBB××××­Z„סN¡û6ã¹ kBׄÈÈññ°]·]’å¼iQþþQÈÈ33]]Dñu"ÏÏ R R®®![®––lllCC!Æ#s% &Í)6*ã* (`)¡)¡'ô)¡'ô&G''&G$š$š&G'Ú&-$€$€%V#©%V#©"$J#s!Æ ð"% &Í%q#Ä%q"$/%Ü"‚ Õ"‚Ó>‘@@··ááááá4áŽ4‡òŸÈuÔÔ««««þþ,,,Ùööö£aa8‹™óóF²Û.::ççdççÛÛ²²FóóóÛÛ__ÛÛ||¦ùÕÕ««@íÄq#######ÐsÆssJ>‘©©ÒÑÑûûâfî›››0ŠÝÝÑѨ¨¨¨Ñ$<<éÌyÌ&üüOO&&yy    ½½½jÿR{ÕÉÉɇڇ4    ÉÉóF^^44vÉ óÕÕ({(Õ({‡‡‡‡ÉÉó ““ii““@@4á] +ŸŸuÈ„××1[[®®NNNNû¨N¡Pý&&y&ýýñññžžžtÇwÊww5â  ¬¬Öƒ”AjŸŸŸŸáá + +· +44òŸuþþ'ÔQþ'']°] +òòòò”””AÖÖ¬¬ÊÊóF Mÿÿÿÿÿÿÿÿ””A””AA”VV,,V©,,,,ëëV©,,V s  µbŒŒ9ŒŒŒ÷÷÷J Í÷÷ Í÷¤E˜E˜˜ëÁÁÁÁ©V,B••••BïBãã  Ê$N¡×„Z­­­Z_¹¹¹$ww$¼¼ååQ««þñDÈuñKÈQQQQ¼¼i¼] +à|| R R!&!&!&y!&rÌ– ð!Æl![##$µ(E)ò(E(E)ò+Ÿ)ò)ò)¼$µ$µ$µ'¤'¤%÷'¤"à$#¶#¶$ø$ø%Ï$"#K&¥!ž#K$"à"à$%~"$"û"û"û"û!N!N"û€hh>‘@@ + +4ŽŽ4á44á‡ÚEòÈu««þX««Ù,,,Ùöö£öaa8‹™óF™²Û.::::d·:”ÛÛ²²™FFF²²ÛÛ²²ˆˆ))S¦ÕÕ««@íÄ#######Ðs ÆÆJë>VüÒÑÑûû<f›HHîÝÝÝÝ+Ѩ¨UUÑ$<ff<y&Ì&OOOOÌ&yyºº  jjjR¥{ÕÉÉÉ4‡‡4óó  ÉÉ ó^^44ÉóFÕÕÕ(({({‡‡‡‡v ó““@@@@á4 +]ŸŸuȄׄ„[[®®NNNNûN¡NPýÓy&ÓýýžžñžññÇt$www5⸸YYÖƒ”AÄŸŸŸŸáá]] +·44ŸòQQ'zQþ'' +]] +ŸEòò”””AÖÖÿYÊÊó ÊÊó RRÿÿÿÿ¬¬””A””AA”VV,,V,,,,>>ÁÁVV©s   µbŒŒŒßŒŒ÷÷÷¤ Í÷÷Í ÷¤òE˜ë˜ëÁÁÁÁV©Ò•BBBB•ïB6  Ê$ûN„×­­­ZZ    wÊÊwiååQ«þQDñÈuDžÈþþQQiii¼°]àÏ!)ø Ryy"Ó!&!&y––ll®#$µ(E)ò)ò)ò)ò+Ÿ(E(E&b$µ$µ('¤'¤%÷'¤&:$" %c$ø$ø"u$"$ø$ø#K!ž$&:"à!3"$"$"û"û"û"û"û"û"û&‘‘h»iii4á4á· +]]‡á· +uuuÈÔ««ÔXÙ,U¯zzÍÍ88‹‹™óFF.ÛÛÛd::::d¾²X.ÛpFFÛˆ_²ÛˆSS|Ï‚‚XXÄííùL##ùLLùJ÷Jð>>Òüüû¨~Ñ<f¹›››îZ0ÝUU¨û¨ûûûff<<<yÓ&y¢¢OO¢üOOäää‘jj½½{(Rÿó É^^‡‡ óÉv ó44‡á óÿÿÕ(Õ(RR^±±ó É@@í@“@á444òLŸò××[®[[®[xxNNxËx%&&&yPPy&KñÇÇñžw$wÑâ⃃)ƒjjA”òŸòò +] +]4á + +uÈþþÔzþQÔ' +]44òEEE””jÿÿ)Öóó    ÊÊ¥Rÿ¬ÿ¬Ö)½½jj½VV,V,Ò,ë˜,,VVÙVVJJs µµµbµbÍͤ¤ÍÍ÷÷Í ¤÷˜˜Á˜˜ÁBBkkBï¹¹ã6¡NNû­­Z­*„„„¹_66NN¡¡¼'''ÔDDDžÈÈÈQþþQå’i¼†3॥Ï!)yy!&"Ó O¢––l¿Ø …#ß%Œ'n'n)))ò+Ÿ'n)(&b&b(&Í(z% &Í&:$&:&:&¥&¥#K#K$"%Ï$ø!ž#¶#¶"à!3"û&U$¨!N w"$"$#Ñ#Ñ&‘‘hiii4áá4 +·d +‡á· +ÈÈuÈÔ««Ôþ«,,,¨UU    ‹‹‹åFFFFÛˆˆˆdçç::d¾_Û.ÃpFFˆÛ²²²ÛˆSS|Ï//««ÄííùL##ù¦ùLJJð‘ë%Ò©©¨ûÑ~<f››H›Z0ƒ¨¨¨ûû¨ûûééé<<<&&&ÓOOOO¢¢¢üää‘ä½½½½{(Rÿ óÉ^¸44M oÉÉvó áá44 óÉÉÿÿÕ(Õ(¥¥±±±±FóÉ@@“@ii@“á4‡áòòŸò„*®®®®[xx¡¡x%%xyÓÓ&PPÓ&žDÇtÇžñ$wwwââââÖÖÖÖjjA”òŸŸŸ +] +]‡4]]ÈÈÈQQÔzþ«Ô'] +‡‡òEòò””½jRRÖ)óóóóóóÊÊR¥Rÿÿ¬Ö)½½j½j½©©,V©Ò>ë©©VVJJ ͵µbbbbµbÍÍJ¤z ¤¤ ͤ÷˜˜ÁëëÁÁÁ,,,,BBkk•B  ã6¡N¡NZZ­Z×1„„¹_66NN¡¡¼¼¼i''ÔññññÈÈȤQþQå8¼i†3àøøÏ!)!&!&y!&¢õy–– l"2 …"2#ß$$)))ò+Ÿ*È))¼((&b&Í(z(z&Í&:$&:&:$ø(R$ø$ø%Ï$"$ø$ø'#¶"à$$¨$¨"û"û"$#Ñ#Ñ"$#Ñhªª&Óí@ÔÔÔÔá4 + +LLLŸÈuuuuÈŸŸ@@i¼««''U,,————8‹´´´a´p²ç”¾çç²²²²²ˆˆˆÛ²²ÊpFó|ϦùXXX«««//##LL##Ðv1Þ‹ÞÞÞ11ü©%Òg>ëffff<<00ÝÝ0000$ÑÑ$ûû$ÑÑѨ¨<<ffOO&&gºººyyyÓ7ä `“æ½½“æ“æ  ^^ÉÉÉvᇇ‡‡444á444  ^^“@““ÿ¥{{‡‡±±óóFó««þþiiiŸŸŸŸ4áá4ÆllÆBBº ã6ã6ã»h»h‘äh»mDñDDtÇ$w  ââ ¸ÖÖ¬¬AAAî] +44 + +]]òŸuuŸŸÈÈ““““ÔþþÈȇ‡ +]”””Ajj”ç^^^^    ÿÿ))jj½½)|RR½jAAVV,,>˜˜ë©V©VVÒ>ëÁ÷¤¤÷b9Œ z÷¤¤÷÷÷bµŒŒJ÷Í͘˜˜ëÁ˜ë©VVVVVVÅBBww¡¡¹_‰ïœïï­Z„„66ã6$$ww''ÔÔii¼i]]††žñññzzzzQ¤'Ô]]à·d ¾ º ºää  ``¿¿l Ø …®#"Ó"Ó', +,á+4&-'Ú(æ*“)¼&b&Í(z%÷%÷&¥&¥%Ï%Ï%c%c#¶#¶$$"à"à%c#¶"à$"û!N!N!N"û$¨"û!N!¹hýý&Ó@“iiÔÔÔÔŽá]]ŸŸŸòu"uuu"LL@@iþþ''UÙÙ——êê‹8aaap²²²:ç¾::²²²²²ÛÛÛ.™F|ÏS¦XX«X«‚‚##LL####Þ1Þ‹ÞÞ11V©Ò%ºgë>¹fÀ<<0Ö0000Š0~Ñ$Ѩ¨$ÑÑѨ¨<<ff¢¢&̺ ººyyyy7äº “@½@í“æ  ^^ÉÉÉ44‡‡‡444á444^¸^^æ“@æRR((4Ú^^óóóFþþþþiiiŸŸLLá4‡4llBBº ãã66ãh»»h‘äh»ÇDñDDÇtÊw  ââ ^ÖÖÿYî”Aî°]44 + +]]òEuuòòÈÈ““ææz'QQÈÈÚ4]°”””Ajj”A^^      ¬¬)Ïjj½½|)RR½jçA,,,,VVÙëë˜ëVVV©Ò>EnÁ÷¤÷JbŒ9ÍͤQ¤÷÷÷µbŒŒ÷J  ëë>ëÁnë˜V©©©©VVVÅkk••ÊÊNN¹_6ãïB•ï­××66‰6wwww''ÔÔii¼]]††žñññzzzzþQ'z]]à3·dd  ää º º  lll¿Ø …![!["Ó"Ó%V*]+4)‡)‡'Ú'9(æ($µ&Í(z)Q%÷$ø$ø$"$"%c%c%c%c$$$$#¶" "à$$¨"û"û"û$¨"û"û$¨!¹>ªªyÓ@@@@X«'Ôáá + +ÈÈŸòuuLLŸŸŸŸ@@ii',,UUDêÀÀ´a88aaaaFó™F²²:ç:ç::::ÛˆÛˆ²_²².ÛÊFFS¦||‚‚Õ‚/ÕÕ‚#####Ð#v111Þµ©©©©ëëë><f<<<<Z000ƒ¨¨¨¨~+¨û¨¨û¨<<f¢¢yÌ` ‘ä&y&y77` jj““““j½4444óóóó^^^^ ¸4‡  44áá44æ@½½(ÕÿR ^ ^ÉÉ««''¼¼iiŸLùù +]]]lÆïBBB  ººãããã»»h»»ÂhññDž!Çó M   â5Ö)ÿ¬îAj€Ú]]4444ÈÈÈÈȼ¼“@Q«'zŸŸ‡‡]°”Ajj”çç”5ˆ  óóóMÖ)ÿR甽½Rÿ))””½j,,VV>ëVVVV,Òë˜nnJ÷÷÷ߌ99Íͤ÷¤¤Í ߌŒß sJJ>ëÁÁnnVV©VVœBkkkN¡wÊ ¹BBïï­××ãã ¹N¡¡¡þþþþiii¼†3]°ÈÈÈQQQþ'''z] +à +ddd7!‘ º º!‘ä  C–¿lØ …![![#©#©'Ú)‡)‡'Ú(°*]*“*“)¼)¼(z&Í'¤%÷$ø$ø%Ï$"'ç&:#¶%c&:&:$$$$%c#¶$¨"û%~%~#Ñ#Ñ"$#Ñ"‘ýý&€““““þ«'Ôáá··ÈÈLŸuuŸŸŸŸŸŸ@@iiÔÔ,,UU——ÀÀa´88´aa™F™F²²:ç:ç::::.ÛÛˆ²_²X.ÛÊ™™S¦Ï)‚‚Õ‚‚‚Õ‚##vvÐ##v11„1[©©©©>>>ë<fZ000Ýûû¨¨Ñ$û¨¨¨û¨ééf¢¢y&º ä‘&yyÌääº ½½““““½j4444óóóó^^^^ ¸‡4± áááá44ææj{(ÿR^±±^ÉoþþÔÔii¼LŸŸŸ +]]]llïBBBºº  66ãã»»h»»ññÇÇññÇÇ M M  5ˆÖ)ÿ¬AîjÚ4]]4444uÈÈȼ¼“æQ«Ô'òòÚÚ°]”çjjA”ç”5ˆ^^óó  Ö)ÿRç”jÿR))””j,,VV©gÁë˜VVüüÒ,ë˜ÁÁ÷JJ¤Œ999zz¤÷÷÷ ÍߌŒß s÷÷ÁÁ>ënnÁÁVV©VVïïÅN¡wÊ_ ããBBBB­××ãã¹ N¡Nôþþþþiii3†°]ÈÈÈþþQþÔzz'] +à··d ¾ää  ä!‘  C–¿lØ+![#©''Ú)‡)‡+4(°*]*“*“+i+i&Í(z'¤%÷#K#K%Ï$"$"à#¶%c&:&:"à"à$$%c#¶"û!N%~%~%~%~"$ w$=ää‘‘‘ŸŸLŸ + + + +i@@þXÔÔ@í@í@@ii@“Ë‹aaaaaU¯Dê—êÃpppˆˆÛˆÛÛ²²ç:|Ϧ¦||ÏÏç:dç”LLvvvvLLáá ¸v##v11[ÞÞ11sssÆJJZZZZ00ÑÑ$$ffÅÅ››ÅÅr<<ééUU~~®®……ØØ®®    &&&yjjj½ÿÿÿÿ44‡4^^4‡½jÕÕÿÿRÿÕÕÿ¬ÿÿjj“æ““j½RR{Õ({Rÿ'Ô««¼iii'ÔÔÔi¼iã6ãã%%xxxxNNº   ää»h7ä7‘h»»»‘äh»”Ajj¬¬))      55“@i¼þþÔÔ + +‡‡4á +°@@@“ææ¼¼z'QQ99¼””ç”))RÿÊÊʱ^^^””””½çççç½jÿÿ)Ö,,˜ëëëëëÒëë똘ëë˜ÁÁnn9ŒbbµµµµJ÷ÍÍbµµµŒŒŒŒµbbµ÷J ͤ÷ sãã¹¹$w¡¡NNNN¡NNNNNNN  _¹„„­kk¼i??þþ'Ôi¼¼i''þQ’??’'z''Ô.. ˆ¢¢y!&"Ó"Ó O OyÌ O OyÌÌ!&#©#©%V(°)ò)ò)*È*]*], +, +(°''Ú'Ú%.#&"ª#$Ã$Ã#$Ã$Ã!i#"?"?##"Å"Å"Å"Å#0#0"Z"Z#Ñ‘7ä‘‘ŸŸLŸ + + + +iiiiiííþþÔÔ“@@“@@ii“@i‹‹a´aaaaUU——ê—pppÛÛ.ÛÛ:ç)|¦¦ÏÏÏ)”çdç:LLvvvvùùááe¸v##v11µÞÞ11sssÆJJZZÝÝ~~$$ffffrr››ÅrrÅ<<é騨~~®®……ØØ``  &&&yjj½jÿÿÿÿ44‡4^^4á½½jÕÕÿÿRÿÕÕÿ¬ÿÿ@“““j½ÿÿ((({¥R'Ô««¼i¼'Ô''i¼¼iããã%%%%xx¡¡º `ºää»h‘>ää»»»ä‘h»”Aÿÿ))  MM^^55@“i¼þþ'' + +444‡°°““@“““ii'zQQææ¼”””A))ÿ¬ÊwÊÊ^±^^””””½çç””½jRR)Ö,,ë˜>˜ÁÁ˜>üV,ëëë>VV,,˜ëë˜ÁÁnn9Œµµµµbb÷JÍÍbµbbßߌŒbµµb÷Js ÷JÍ ãã¹¹$w¡¡NNNNN¡NN¡¡NN    ××­kk¼’’þþÔ'¼iiÔÔQþ?’’?z'''Ô.....¢¢y!&yy O O!&y¢¢y!&!&!&!ü!ü%V%V(E(E*È)*]*], +, +(°''Ú'Ú&Û%.$W$W#$Ã#$Ã$Ã$Ã!i##ì#ì##"Å"Å"Å"Å&Š#0"Z"Z"$h»h>‘uÈuÈ44á4“íi“@ii'þþiii¼i“@ii@“aa‹‹´aaa,Ù——ÀÀ™ìÃpÛˆÛÛ²²Û..ˆX:ç)||ÏÏ|||¾çç::::Év#Ð#vù¦e Ž;LŸùL1Þ[Þ1ssJJsÆ´0Ý0ƒUûNûffÅÅ››ÅÅrré<f~Ѩ[®®TØ…®   `yyyÌjj½½ÿÿ(ÕÚ‡4‡á4^¸jjæ“ÕÕRR((¬ÿÕ‚Õ(@潓“((RR((RRÔÔ««@“@@þþ'Ôii¼iã6ã%%NNËxxxººã‘ä‘>‘‘ä‘‘‘h‘‘>>AAÄÿ¬ƒƒ  $w^^55@“æ“''þþ4‡]]]°‡4ii““iiæ“þQQ¤¼¼i¼””””ÿR)ÖÊwÊ$ˆˆ^ j½½j”çjjAA½jÿR)Ö,VVÁnÁÁnÁ,˜ëÁÁ©V,˜˜˜˜nn˜EbbµµßŒ99÷÷Í µbµŒ9bµß2J÷  s   ã6¹¹NN¡N$Ê¡¡wÊ¡NÊw$w666ã×ׄ×kkBïiiiþþþþi¼ii«þQþì’’’ÍzQþ'...ÛÛ ˆ!&!&y"Óy!&!&!&yy¢ O!&!& O!ü"Ó"Ó$€$€'n%Á*È)(°*]+4+4)‡'Ú&-'Ú)^&%.%.%™#ì##$Ã$Ã#$Ã$Ã$Ã%™#ì#œ%I!ï!ï"Z$"Z"Z"ûhh‘>Èuȇ‡4á@@iæ“iiþþiiii@“ii“@aa‹‹a´,Ù——mì™p.ÛÛÛ²²ˆÛÛÛ²dd:|Ï|ÏÏ|ÏϾ::çççç#v#Ð#vLù¸¸ŽáLùù¦Þ‹µÞ1ssJJ sJJ´Ý0ƒ0ûû¨ûffffÅÅHHrrrr<f+~¨¨®®®…Ø®[   `yyÌy½½¬¬‚Õ‡4‡4á4^^jj@“((ÿÿ((ÿ¬(Õ(Õ½““j““((¥¥Î(RR'þþ@“@@þþ'Ôii¼iã6ã%%¡û%xxx  ã‘>‘ä‘‘7>‘‘hh‘‘‘‘AAjÿ¬ƒƒ  wÊ  55“@@“''QQ‡Ú]· +]‡4i““iiæ9¤QþQ¼¼i¼””””ÿR)ÖÊwÊÊ.ˆ^ j½”A½½””j½Rÿ)Ö,VVÁÁÁnÁ,ë>V,ÙE똘nnE˜µµµµ2ߌŒ÷÷ ͵bµµßŒbµßŒJ÷  Í  zã6  ¡¡¡NwwNNÊw¡NwÊwÊ66ã„„1„kkBïiii¼þþþþi¼iiþ«þ«??’’Ô'þQ''.ÛÛ ˆyyyyy!&!&!&yy¢ O!&!&¢ O!&!&"Ó"Ó'n)*È)*], +)‡)‡'Ú)‡'Ú&-'±'±%.%.%™#ì####$Ã&p$Ã$Ã%™#ì!ï#œ!ï!ï"Z$$$$¨»ýP&&] +Žá‡4 + +¼¼ii¼i¼ÔÔÔ'ÔÔ«þ''«þ««öööö‹8a´¨U,UU,Ãpp.ÛÛÛÛÛÛ²ddd¾ç:dd:”dd||)Ïáá ¸áŽ ¸##vváŽá޵ÞÞðJ11[0ÝZZ0ݨ¨UN¹¹â<››rÅ´ZZ$$~~ffffØØ®®mmOOO¢77  (Õ((ÿÿ¬¬ÉÉóó ó½jjjÿÿ(Õ½½jj((ÿÿ(Õ((½j½æ“j½99““Ô'þþiiiiþþ«þi@@NûN¡NN¡N º ºãã6ãýý&&»»ää»»hhÓ&PýAAjjjîA  ^   55æ“@@“““æ4Ú44¼ææþQ¤¤zzþQ““ææ)|)Öÿÿƒƒ^^±±±^ ^))))””½j½½½j½j,,VVVV,Ò,,,˜ë˜˜VV˜˜ÁnnÁë˜  ÷÷JJ÷JµµßŒJ÷ ͌ߌŒµßßµbµ÷÷ Í¡N¡ô_¹66$$$$ÊÊNNN¡ww¹ ã㄄ׄ„„Z­''þQþ««þQþÔ'å?ìì«þQQ’?’’þ«ÔFF   O Oyyy!& O O O O!&"Ó O!ü¢ Oyy!ü#©$ë(E(E)ò*], +(°*](°'(°'(&p%™%™$Ã##ì#ì$W$W##!Ô!Ô&&$Ý$Ý"Z$"Z$$$"û»ýP&& +"B;á4·]iiii¼iÔ'''ÔÔþQ'«þ««IIöö‹8´UÙ,Ù,ppÃÛ.ÛÛÛÛ..²dd:çdd::))||áá¸eŽá ¸##vv;ŽŽáµÞÞCJJÞÞµ0ƒZZ0ƒûûûN¹¹››r´ÑÑÑÑffffØØmm¢¢¢Oää  ({((ÿÿÿÿÉÉóóÉÉ ó½jjjÿÿ(Õjj½½((RR(ÕÕÕ½j½æ“½j@æ@æÔ'þþiiþþ«þ¼i@@NûûNNN¡Nºggºãã‰ýý&&»»‘‘»»&yPýAAjjÄîA  ^   ââ“æææ“í@“‡‡‡‡Ènbææ¤QQQ''Qþææææ|)|)ÿÿ)ƒ^^   ^^±))))AAjj½½½½½½j,,VVVV,,,,,똘˜EEÁnÁë˜  JJ÷÷JµµßŒ÷J Í9ŒŒŒµbŒŒbµbJJs ¡NN¡  ãã$$$$$Ê¡¡¡Nww¹ ãã××ׄ„„Z­''þQþ««þ«þ.’’??«þþþ’å??þ«.FFpp O OyyyÌõ O O O"Ó!&!ü O O!ü!&!&!ü#©!‘$ë$ë)ò, +*]*](°(°''%V&p$Ã%™%™&p$Ã%™%™'±$W##%.%.$W$W#0#0"Z$"Z$"Z"Z"û‘ýªÓ&4Ž!k·44 + +ii@@““Ôþþþþ«««þÔÔ'Ôöö  aa8‹,ÙUU,,pp™FÛÛ²ÛÛ²ÛÛççç:::d¾::ç:d¾S¦¦¦áḸ  ^¸ùL##eŽŽ1ÞÞ‹JJJs ÞÞ[Ý0000Ý0ƒÑÑ$wfrr›H00´´¨û¨¨ff<®®®®CððCõ¢ää` (ÕÕ(ÿÿRÿ   óÉÉvv““½½ÿÿÿÿ“æ““ÿR{{ÿR(Õ““““½9@“æ@@«þÔ'¼iÔÔ''““@@NNûNNNNNggºº6ã  ýýýýä7ä‘ä‘»»&&&&j””AAjj55  5â  “““““@i]]‡‡ÈŸE¼¼zzz'þQzÔææ))¥RÿÿR¬^±±^55ˆˆÖ)RÿAîAAjj½½½½½½V,,,,,,VÁ˜˜,Ù°EEëëëë>ëÍÍ    ÷JߌŒŒ÷JÍ 99µµŒŒß9ŒŒŒŒ  JJÊÊN¡  ¹¹ûNwwNN¡¡NN¡N¹   ­×„­„„þþÔÔÔ'«þ««..?’’åþþÔÔ’å’’Ô.pp  y!&ÌyyÌ¢ O¢ O!ü!ü$€"Ó O!ü!&!&!ü#©"g"g$ë+Ÿ,á'Ú*]*])‡'Ú'%V$Ã$Ã$Ã$Ã%™%™$Ã$Ã'±$W#!Ô"ª&%.%.$$#0$Ý#0#0$$%~‘PýÓ&44··44 + +¼@@@@'Ô««þþ««þ«ÔÔÔÔÔöö  aa‹8,ÙUU,,pp™F²²ÛÛ²_ÛÛXÛÛçç:ççç”çddS¦¦¦áḸ¸¸  Lù##¸eŽŽÞ1Þ‹J s11µÝ000ƒ00ƒÑÑÑ~<<frrî›ÝƒZ´U¨¨¨ff<®®®®CððCÌÌ¢Oää `(ÕÕ(R¬Rÿ  ó ÉÉÉÉ““½½ÿÿÿÿ“@““¬ÿ{ÕÿR{(ææææ½æ““æ““þ«Ô¼i'ÔÔ““““NNûN¡¡NN  ºº6ãg ýýPP7ää‘ä‘h&&&&jAA””jjâ⸸â5  @@““æ“i¼]]‡‡Èòò¼¼¼¼zz'zþQzzææ))ÿRÿÿÿÿ^±±^55ˆˆ)Ö¬ÿç”””½½jj½½jjV©Ò,,,VÁn˜˜,Ù°òò˜˜>˜ë>  ÍÍ  ¤÷Œ9ŒŒ÷JÍ ß9µµŒŒŒŒ99ßß  ¤Jww¡N  ¹¹ûNwwNNNN¡¡¡N¹ ¹¹Z­×„­„„þþ.ÔÔ'«Xì?’åþþ''?’??Ô.ÃÃppÌyÌyy!& O¢¢ O O O!&&-!ü O"Óy O!ü º$&˜-L1è,á, +, +)‡'Ú'%V&p&p$Ã$Ã%™%™##&&!Ô#$W$W%.!Ô%´%´#0$Ý$Ý$Ý$$#ÑñÇÇÇÆÆÆ[[[xxûN  ii““ii@@@@iþ«þþç:dS¦||¦¦ÏÏSS¦¦dd:ç|||Ï:ç::dd:ç—=êêêêÀm,,¨¯pÒ©©‘>g‘>gºg>>LùÐ#¸¸¸¸Žá¸¸LLùLžžøKààà3hhÂÂÂÂhWªªW:àccKøKøjj½½({Õ(æææ““@jjyyOO ºäämðC……ØØÉÉÉv^   áááávvó ^ 44‡‡‡‡‡‡±±±^^ ŸŸŸòŸŸÈþXÔ'''iiiii¼iŸEÈuEòLŸƒƒÿ¬””AA ¸ââww  >‘h»&yPý‘äh‘ä»huÈòEÈQþþQþQ'Ô¿¿•Bllll¡¡¡¡66  äää‘mm¯\¯¯DñÇÇDDñD77‘‘P£yyJJ  9ŒßßJ÷÷JµµbµGôôGôôSS¦¦e¿è;ÁÁÁnVV©VV,,ÙÙ,ššqq‰6GGqqôGGG + +3àžñžKKKžñuuÈÈkkBBB•Å$ÑNN$wûN] + + +ÈuKK«XXþQ«iiå’þþ««···::{(ÿR“!@““ÿ!¬RKæ$š!@!@ 4‡! ! ! $e)l0 6Ô3z+ï+ï+)l(•(•(ˆ%.%.%.$Ã#$Ã&p'±&#!Ô$Ã#"?"?#ì#ì#$Ã#!Ô '##ìñÇÇÇÆÆÆ[[[®%%ûN  ããii““@@@@iþ«þþç:dS¦||¦¦ÏϦ¦¦¦ç:"||Ï:ç::dd:UUUUDêêêDêÀmUÊÊp%Òüü‘>g‘>gºgº>>ùL#v¸¸¸¸áޏ¸ùùùLKKøKàààhhÂÂÂÂÂWWª:à¶¶KøKøjj½½Õ((Õ““@““@jjyyOO º>ämðCØØØØÉÉvɱ^^^4444ÉÉóF^ ‡‡‡‡44‡‡^^^ ^ ŸŸLŸŸŸÈXþÔ''''i¼¼¼iiiòòÈŸòòŸÖÖÿ¬AAAA¸ ââÊÊ  ä‘h»y&ýP‘äh»ä‘h»ÈŸòÈ«þþQQþÔ'll•BllllNN¡¡6  »»‘‘7ämm¯¯¯ñDmmDDñDää‘‘£PÌÌJJÍÍŒ9ŒŒJ÷¤÷bbbµGôôGôôSS¦¦è;ÁÁÁnV°©VV,,,,,GGqq‰6GGqqGôGG]·†3DñžKžžKžuuuuÅÅBBBïÅ$Ѩ¨Ñ$ûN] + + +u"øø..X«þþQ«ii?’þþ««dd··::( ÕÿRæ“““ÿ!¬ÿR!@!@!@!@ 4‡^^^"¸'¿5'=ˆ6Ô0ö-œ+)l(•(•&Û#&Û&Û$Ã#$Ã&p&$W&Û%.#$Ã%™%™%™%™$Ã# '!Ô!Ô!Ô"?žÇÇÇBœ[®®[Nûxxºº@@iþX««d¾¦¦¦ùÏϦùS¦Ï|d||ùù¾d::U¨mmÀmêêÀÀUUUFF™óOO©üggggºggggLL##Ž;ŽááŽáŽÐÐ##"uKK¶ ?ì?™oÂÂÂ??ªªà¶¶øKKK½j““ÿÿ¬R½j““ææ½½O¢yyää `ðC++Ø…vÉó 4444‡44‡óóɇ‡  ‡4±±^^‡44444ŸŸLòuuòŸÔ««ÔÔþ¤““ii““iuÈŸŸÈÈÈȃƒÖ)AA¸¸ ¸ óÊÊ»h‘‘Pý&y‘ä»»»»‘‘ŸòŸŸÈÈòŸ«¤QQQþ'z•B¿llËx¡ô``ãã»ää»7‘mmmm\¯ ¯—DD——DÀm>‘‘äPP£P  ÷÷bbµJJ÷÷µŒŒôôôôËË**SS;;;;ë˜ÁnVVV,,GôGšÜ‰³³GGGôq] +à3nÈžžññžžÈužKïïœïww$ÑNN¨û +·àu"u"Û««ÔÔÔ'’?ì?«««« + + +d··d((ÿÿ“ææ“!¬!¬"‚ Õ"í!@“!@ 4 4^! 4!á)l8B?55'0 +ï+ï'¿&&Û%.%.&Û&p$Ã#ì%™&Û%.&"ª$Ã$Ã#ì#ì$Ã#!i!i####!iñÇÇÇïïlÆ[®®[Nû%%gg@@iiiiiiiþþ««¾¾SS¦ùÏÏS¦S¦|Ïd||¦¦dd::U,,mmÀmêêÀÀUUUFFFFüü©üggggºggºggùù##;ŽŽáŽááŽ##ÐÐ"uKK¶cààì???’쪪බKžKK½j““RRÿÿj½9“““½½¢OÌÌääº mmCð……Ø…vÉó Ž4444‡4‡óóÉ44^^‡Ú±±^^4‡44‡‡ŸŸŸŸuuŸò'ÔþþÔÔQQææ¼¼““iuÈLL""ÈȃƒÖ)jj””   ¸ óÊÊ»h‘‘Pý&yä‘»»»»>äŸòòòÈÈòŸQ¤þþQþ'z•Bl¿lllË¡N ³66»77»77\¯¯¯—DD——DÀmä‘‘äPPP£  JJbbµ÷JJbŒŒGGGGqË}}SSèèèè˜ëÁnVVVVVÙ,Ù,GôGšÜ/``GGôGq] +3àuužžKKKKÈužKÅÅïïœIÑwÑ$N¨¨û +·àu""uþþÔÔÔ'’?’?««««······d{{ÿÿ“æ“æ!¬!¬({!@"í“!@ 4 4! "¸ 4!á'¿6Ô@â@â80 -œ*B'¿&&Û%.%.&Û&p(%™#ì%.#"ª"ª###ì#ì$Ã#!i!i####!iÇtÇžñ®[[[„„„„ººººx%Ò%Ô'Ô'ii¼@@@@ÔÔ««)|||¾¾dÏ|||::::d¾||¦S::¾U¨Ò,,ÀÀ——,Ù,ˆÛ%%%Ò©üüüg>‘‘‘>>ᎎŽùLvÐ#vv#ù¦ÐÐKKuuøøøKÔÔªWììì?hªW""KK¶¶cc½““ÿÿ(ÕÿR(ÕÕ(RR  77¢O¢¢Àmðð ó  4‡4á ó óóóF ÉÉÉÉÉó ÉÉÉÉv óuÈŸL"uÈu««'z“9¼iþþ''““@“Èuu"á4‡‡¬¬¬ÿ¬ÿÿÿ  wwââ55PP&&»h»&&&yPPÓ&]]]°EòÈȼæ“QþQ¤×*BBBB³ 6ã6‰``ääPPPPmmDDØØ¯¯¯¯¯7ä‘7££PPbµbµ z¤JŒ9ߌ99µbqqôôôôô¡SSS}}¦¦°,ÙVÙ,nnnÁEEnÁ`ÜÜqËˉ6³³‰Ü‰‰Èuu"uÈžž· + +·øžu"ÅÅïï­ZZ´~ÑÑÑff=à + +ààà??¼¼þþÔ'ììÃÃuužøK¥ø¥R¥ Õ Õ Õ(Rÿ!¬!¬((!@"í!@“^^! ! ! "¸"¸)l5'6Ô4P-œ+„)×)'T&Û&Û&Û&Û'F(ó%™#ì$Ã#$Ã$Ã##%™%™#ì#ì"?"?%.#$W&#ìÇÇžK[[[„„1×  ºº%xÒ%Ô'Ô¼i¼i@@@@ÔÔþþÏ|||¾Ï|||ççdd||¦S::dU¨,UUmmêêÙ,,ÙˆÛ%%%Ò©ü©©gº‘>>>>>Ž;ááLù###v#Цù##øž""øøKžªWììì?ÂWÛÛ""KK¶¶¶¶½““ÿÿÕ‚¬ÿÕ‚Õ(ÿÿººää¢O¢¢mCCmm óóó4‡‡4ó  óóóóóÉÉvÉó ÉÉoÉ ó"uLŸuÈ"u««Ô'““iþþÔÔ“““@Èuu"4‡44¬¬ÿ¬¬Y¬¬MMwwââ5ý£&&»hh»&&&yPPy&]] +]òEÈȼ擤QþQ×*••••  ‰6ã6  77PP££mm——……¯¯¯¯¯7ä‘‘PP£ýbµbµ  ÷÷Œ9ߌ99¼GGôôô¡­SS}}SSV,°,ÙnÁ˜˜Án³³ÜÜËËË6‰``6‰66u"uÈu"KK +· +·KKu"ÅœœZ~ÑÑÑê=à··ààà’’ii««.??È"øøøøø¥Rÿ((( ÕRÿRR((!@"í!@“^^! ! ! "¸! $e)l++ï+ï(*)×)'T&Û&Û#&Û%™'F%™#ì$Ã#$Ã$Ã##%™%™#ì#ì"?"?#!Ô$W&#ìÇÇÇt1×®[[[1„  ãNûûûþþÔí@¼iii@“««'ÔÏ|¦¦ç:ç:¾ç:||S¦::ÏϦS:d,,,¨,,êê,,¨ˆÛ²²ÒÒO©©ü%%gg‘>gg‘‘ee¸ ##ù¦ùùÐÐ##ùLøø"Ï""KžªªÂ??ªª.""""¶¶à3½½æ“{{ÿÿ¬RÿÿRRÿÿºº‘äyyÌyðC–C  óó‡4^ ó #É óFFFóó ÉÉFóóóÂóóÉÉ"uLLÈÈÈÈþþþXii««ÔÔ“@@“òŸLL‡‡ +]¬¬ÿRÖƒƒÖó   5^ y&Ó&»»ää&ÌP£Ìy&y‡444ÈÈÈu@æææ'z''**BBBB  ‰6ã6667äaayy££DDm¯¯¯\¯Ø+ØØ…Ø»»»Pýy&99Œ9Í ÷÷µµbŒ9ææËôôËSSSS¦¦**ÙÙÙ]Vnnn˜˜˜ò6ÜÜ6Ë¡¡``ã6ã6``"uÈu""KK··3øø""œIœœÞ11Þ~~¨¨êêÀàd·à3iii¼ÔXXþ«Ãì?Køøø""¥¥(((({{Rÿ(ÎRRæ"í" j 4 4‡‡! ! !á 4"¸&(•(•(*(*)×)×(ˆ&Û%.%.#ì#ì%™"?%™#ì$Ã$Ã$Ã$Ã$Ã$Ã"?#ì$Ã#"ª"ª%.%.#ì!ttÇÇ„„®[[[1„ººãûNNN««Ô@“iii“@«ÔÏ|¦¦:ç:d:ç||ù¦çç¾dddÏÏS¦ç:¾,,,Ùêê,,UUÛˆ²²ÒÒüüü©%%gg‘>º‘‘¸¸e¸vvLùùùÐÐvvùLKKu"""žK.ÔýWÂì쪪ÔÏÏ"" cཽæ“Î(ÿÿRRÿÿÿÿÿÿ``ä7ÌÌy&mm–CCð  óó‡4^ ó ó óóFóó Fó  ÉÉ  ÉÉÈuòLuuuu««þXii¼¼þþ'@í“@LŸLL44 +]ÿÿ¬ÿÖƒÖ) MMó55 ^y&&y»»ää&&P£y&y&4‡‡‡ÈÈÈ““““Ô'''××BBBB  ‰66‰66ä‘ÌÌPPññǯ¯¯¯Ø+………Ø»»aPý&yŒŒŒ9Í ÷÷bbb9Œ99Ë¡¡Ë¦SSSS**ÙÙÙÙVV°nEEEE‰/Ü6Ë¡¡  ã66‰³ Ï"u"""øø··à:¥¥""œIœœÞ11Þ++UUêêÀà·dàà3†¼i¼ÔXX..þ«i’?žKøø""¥¥(((( Õ Õ¥R(ÎRRæ“ j" 4 4‡‡! ± 4!á! $e%;%;(*(*(*+„+â&Û&Û&Û%™%™#ì#ì%™#ì##$Ã$Ã##%™#ì#$Ã$W$W%.%."? …2……ãã  ã6 ºããããNNNNQ«'Ôiiii@“æ“Ô'FF™FX²X²ÛÛX:::¾::pÃpXˆ.   z££ööÒÙ,ÀÀ™ó>>‘äºggg>>>>>‘‘>ÄííXX/‚íííš/‚XX?ìÂoÂà3   ¶¶¶KK"uKKuuW.Ô?™ÂÂj½j½ÿRRÿÉÉÉ^^ ^ØØØØ®®ººººüüO¢ÉÉÉv4444ó  óó   ææ½½æ“““ÉvvÉ ó + + + +u"uuŸòŸL +] + +''Q«««ÔÔÈÈÈuuLLAî””A¬¬AAjÇñDØ……Øäää7yy£ý@“““““i““¼¼¼i““¡¡ËË    ` ``‰‰ã6Ø……ØØØ2߅د\ñ—a77Pý&ymmmÇÇ,,V똘E¤÷¤¤999Œ¦**ll•è66³³````EòE˜ÙÙ°°EòÈn}}••llã66‰¡ôËÃì?«X..ììp.Û..IœrIœöö´a´´Kžuuà3†3??i¼«X«·· + +KžÈÈuu""::É!vÉÂo{Î¥RÿÿÿR½ææ j j!@!@R#Y"‚%Ü'ô)¡+N,û,ƒ'|%Ï$"$&:%c%c"u%Ï$ø#K"u$"&¥$ø%.%.##"?"?#ì#ì#\…2……ã㺺ã6ºgããû¡NNþþ'Ôiiiií@“@'Ô'FFóF²²²XÛX:ç::d::Ãpp²ˆ.ss  ööœö,ÙÙ,mÀÀFF>>>‘gºgg>>‘‘>‘ë>Ä@š«/‚ííší/‚XX™ìÂÂÂÂ3à  ¶c¶¶KK"uKK"ȪW.ÔììÂÂj½j½ÿRR¥ÉÉɱ ^±……ØØººººOOO¢ÉÉÉv4444ó  ó óMó““½½æ“““#vÉ MÉÉ + +··uÈuuŸLLŸ] +]]ÔÔ«««QÔÔÈuÈÈuuŸŸAîjj””A”¬¬ÿÿ”îjjÇñD…Ø…2‘‘ä‘yyPP@“9“““¼¼“9¼¼¼ææ¡¡ËË     º  666ã2……ØØØ…2…دññ»ääýPy&mmm,,VE˜˜E÷J÷÷ŒŒ9æSS**¿¿è•‰‰³³``³³˜EòEÙÙ°°EònnnÈ**••ll‰6ã6¡ô%Ã?ìX?™ÃÃ.Û..œIrIœööÌÌa´´´øKuu3àà3??i¼««X« + + + +KžÈÈuu""ÉoÂoÎ!ø¥RRR¥½æŒ!@æøÿ"‚%Ü&G'ô)¡+N))'|'|%Ï&:$#¶#¶$"$"$ø&¥%Ï$"$ø&¥!Ô!Ô!Ô%.'F#ì#ì#ì#\\ \\  ãããã  ã%Ëx%Qþþþ¼¼iiþ«þXFF²ÛÛÛÛX²X.Û:ççç:ç™™Fó²ÛÛs IIIösÍ,,,,D—ê—FFFó>>g>‘g‘‘>>gº>‘jíí««Ü/íšÄ//ì™Âo??¶¶¶ ¶c¶cKžuuKžuuÔ.ªW“@jjRRRR  4á^±ØØ……ØØ…Ø `7ä&&yÌÉÉóM4Ž4‡Éó vvvvj½½““““ÉÉ óÉÉóó + +ŽáÈÈÈuuuŸŸ44 +·ÔÔ««'''Ôu"ŸòòòÈjjjjÖÖRÿ½A”Çžñ¯¯…2»»hyy&y擼““ææ¼¼¼ææxx¡ô`º  º`6ã6ã  \¯¯¯++¯Ø……ØD—ññääää&&yymmDDñD,V˜˜nn ÍÍÍbb9“¦Sl¿¿l6Ü܉6‰`³òE°]]E˜nÈòEuÈS­•è••‰666NN¡NÃÃì?ÃÙ™Û.Xœœrr £öII´´""žž +]3Ù¼i’?«XÔ3333uužžžKøKàddóFÂÂÂøøø¥({Rø““99½½Î( Õ$/'''%q%Ï%Ï&¥#K%c%c%c%c$ø$ø$"$"$ø&¥$ø&¥!Ô!Ô#%.#&p$Ã$Ã$W \ \\ººããã㺺ã%%%xþ«þþiiiiiiþ«þþ™ópp²ÛÛÛÛ²_Û.:ççç:dd™™F™².. ÍööIö  =ê—DFFóF‘‘gº>‘g‘‘‘‘ºg>‘jííXX/‚í@jXX//ì?Âìì  ¶  ¶ ¶žKuuKžuÏ'ªWhh“潽RRÿÿ  ‡4±^…………ØØØ…º 7äyÓy&ÉÉFF444‡vÉ óÉÉvvj½½@@““óFÉÉFF + +á4uuÈuuuŸŸáá] +ÔÔ««ÔÔÔ'u"LŸŸŸuÈjj½jjÖÖÿ¬jj”AÇžñ¯¯…Ø»»Ì&&y“æ¼i““““¼ææ¼¼xxN¡    ``ã6ã6  ¯\\ØØ\¯Ø……ØD—DD7777yyyyDDñD,°˜˜nn Íz 99SSS¿¿lã‰Ü‰6ã `Eò +]]]òEÈÈòEuÈ­SB•BBã666ôN¡NÃÃì™....ÃÙ™Û.XœœÌrrrIööœ""žž]°††¼i?ìQþ'Ô33††uuññžKKøà··™FÂooooøøø¥({RRææ99½½((("‚''(Ë'$"'|&¥&¥'''#¶#K#K"u"u(R&¥$ø#K!Ô%.%.#!i$Ã## ýžžžãã6NûNNºººg%Ò%xií@«XÔÔii““««þþÛÛ²FFÊppFFFFÏ|¦¦|ÏS¦..Û.ÛÛs ööI£Í êêmê—ÀÛˆÛÛgggºÒ©ü%ÒÒ%>>>>Õ‚‚/XX‚‚ÄqÄ//XXÔÔªWhììžK"užKu"à¶¶àà.ÔªªÂÿRÿRRÿÿÿɇ‡±±……®……®®üOõõüüüü  É4444 ^4‡4‡4áj½‚(Rÿ‡‡±^Év óŸLuu + + + +u"uuŸŸŸE'Ô«þþþ····ŸŸòŸÖÖÿ¬Aîjj”AÖÖÿ¬Ø2 \ÇDD»‘ä£PPPÔ'Q«Qþ''ææ““'ÔQQ¡¡¡¡xËËx``  ¡¡xx¯¯¯ØØ\¯mññØØ\»7ä7ä77+Ø\\…………ÁÁÁÙ,°999æ÷¤÷÷*××*¿¿•è‰Ü‰6xxËÈuuÈÈŸòŸŸÈÈŸŸ­­lô¡¡¡¡ûNN™™ppp F™™™™™XX«IöÌ‹‹ÞÞa!a´´´11àà +]†††3ÔÔ??iižñÈÈññÈÈuuøK¥KuuÂo™™™™FF{{Î!Î{¥R½Œ9{(ÿR j""í$š'ô&G'ô'ô%c'#¶#¶'%c'%c%Ï%Ï$"$"$$#¶#¶#%.$W"ª"ª"ª"ª"ª"ªžžDÇÇã6ãNûNNººgºx%x%ií@þ«ÔÔii@@««þþÛÛ²™™pppFFFF|Ϧ¦Ï|¦ù²²ÛÛˆÛÛÛ sööI£Í ——mm—DÀÛˆˆ.gº%Ò©ü%Ò%Ò>>>>‚Õ‚/XX‚‚ÄÄ//XXWÂììøKu"žKu"à¶¶àà..WWÂR¥ÿR¥RRRÉÉɇ‡±±++®ØØ®®¢O¢¢OOOO  É4Ú44 ^4‡4‡‡4j½jÕÕÿR‡‡±ov óùLÈÈ + +··u"uuŸŸòò'ÔÔÔþ«þþ + + + +LLòŸƒƒ¬YA”jÄ”AÖÖ¬ÿØØ¯\mññ»h‘äPýPP'z¤þþQ''ææææz'QQ¡¡NNxËxË  ``¡¡xx¯¯\¯…+¯\mDž……¯¯»7ä7äää…2\\…………ÁÁÁÁÙ,°æææ9÷¤¤¤×**׿¿•è‰66ãxxËÈuÈÈuuŸòò LÈÈŸŸSSl¿¿ô¡¡¡NNNN™™   p™ììF™™X««Xö'W$ÓÌ‹‹‹‹a!!a´´11àà]°†††3ÔÔÔÔ??ÃižñÈÈññÈÈužKžžuu™™™™FF{{{ÎÎ{¥R½Œ9( Õÿ!¬#Ä"$š&G'ô)¡)¡&G#¶%c#¶#¶%c#¶%c#¶%Ï%Ï$"$""à"à%c%c%.#$W"ª"ª"ª"ª"ª$WÇtÇǺºã%%%%º ºº¡ûNNii@@'Ô««“@iiÔÔþþÛ.Ûˆ™™F™óF™™™F™™ÏϦSÏ)ÏÏ.Û² ²².ÛII Í  ööÀêêê—ÀÀ²ˆÛgg‘>üüüüü©ÒÒ>>gg‚ÕXX‚Õ‚/Äj@í//XXÔ?ìì?KK""uuKK¶¶¶¶àપªW™??™ÿÿÕ(Õ({{É F±±Ú‡+~ØØ®®Ø…OOO¢OOüOvÉÉv^^    ^^ ^^^æ9““((ÿÿ‡Ú‡ÚÉ ó""ŸŸ + +ááuuLLŸŸÈÔÔþþþ«ÔÔ]·]]"uÈu¬¬ÿYA”AAî”jÖÖ))…د\mñž»h»PP&y'z¤Q''¤Q¼¼““¤þþQËËËxN¡¡ô``66ô¡¡N+…\¯ØØØØmm—ž……¯¯»»7ä»»………د¯Ø…˜˜ÁnÙÙ¼¼¤Qzz×*S••••` ㉡¡ËxEòòŸuu L LuuEŸŸòòò×*×*¿l•B¡¡x%x%NNFFp !Ê pp  ™™XX«X#ý1e. £‹‹a´‹ 8a´ÞÞ1„ + +]]° +] +þ«ÔÔiiì’ÈÈññžñuuÈÈKKF™oÂÂoFF{ÎÎ{(ÎRRcÎ Õ!¬#Y$š$š&G&G''%q'''%c%c$"à"à$%Ï$"&¥#K$$$$$W$W$W$W"ª"ª!Ô!Ô#ÇǺºã%%xx ºººûûNN¼¼““Ô««@íÔÔ««Û.ÛˆFF™FF™óóF™FFÏϦSÏ)ÏÏ.Û²²²²ˆII Í  IIÀ——ê—ÀÀ²Ûˆgg>‘üüüüüO%%‘‘ggÕ(««/‚/‚íš//XX.ì?™ìKKuuuuKK¶¶¶¶àપªW™?™™RRÕ(Õ(ÕÕÉó󱱇4Ø………®®Ø…OO¢OOOO¢vÉÉv^^^^^^^^ ^^^“æ““{{R¬4á‡4vÉ óuuŸŸ]]44ÈÈŸŸLLÈuÔÔþX«þ'' + +]]u"uȬ¬¬¬AîAAAAjƒƒÖÖ2…\¯Çñžh»»PP&yz'þQ''Q¤i““¤þþQËËxË¡ôGô  66N¡N¡+…¯\ØØØØmmDñ…+¯¯»»»»ä7»»……Ø+¯¯…ØEEnÁÙÙ¼¼Q¤zz×*­BBBB` ㉡¡%xòŸŸòÈÈŸŸuuòòŸòòòׄ„×lïB¡¡ËxxË¡¡™™Ãpp pppp™™X £'W'W £ÞÞa´Þ‹´ÞÞ1„]]]]°°°]«XÔÔii’’ÈÈÈÈžžñžuuuKKì?o™™Î{Î{{{RR½ j{(!¬#Y&G&G&G&G%q%q%q'#¶#¶%c%c$"à"à$$"%Ï$ø$ø$$&:&:$W$W"ª"ª$W ý##!Ô„„„1„ïïïïÆÆïï1„[[ii“íiiii@@@íÔ««2……ßttÇÇ\\22ÇtÓ&PýPýªý&Óªýhhä>&&Pý&Óýýhh>ä&&Ó&ÓÓýª««««íííí«þÕ‚‚‚‚‚ä7‘ëgg‘>ÒVü„1ÞÞ ssÆÆ /‚‚//‚XXùù##Žáeeä7ä7ä7‘ämC–CCCðóó óóó  R¬((ÿR(Õ†Ù°]††]°ÈDñ]]] +××­¾¾••NN¡¡66_ ˜EooÚ-Vë˜EEooEEæ9ß99ŒŒ9oo˜E˜EE˜¦¦||¦S||ÛÛÛÛppppa´´rÌ‹Þ1ÞIIöIµbŒßµµbµµµßßbbbµµtttt€Ó©V˜˜Z´´IIrœIöIÞÞ11ÀffÀÒ,iiììàà·dàff==ffê=rII´ÞÞÂÂÂoÚ--Ú!‡Ú€-9 æ9ŒJ÷Î!JJ÷J÷÷Ìö £‹ 8‹‹ÀÀÀêê=êFF óFXX:ç:à3†¡NNN  ãã¹¹ãw$ww„×*„ïïBB„„­­Bœrr__ ¹MM$$$ÑÑ$â é<MMú§!À!À%#m$ä&‘&‘&‘%»$)%»%­$$×&„&$k%B%B%B%B$k$k#*$×$×$×&i$¼&i##å"8"8%’"Ù„„„„×ïïïïÆÆïïׄ®®iiæ@iiii““@íÔ««2…22ÇÇtt\\ß…ÇÇÇ&ÓªýPýPýÓ&ýPhä>ÓÓPýy&ýý»»‘‘&&&Ó&&PýXþXXííííX«‚/‚‚‚‚ä‘>>gggg‘>Ò©©„1ÞÞ sÆsÆÆ‚//‚‚/XXùù##áŽe ä77ää7ä7mÀé––––CóóóFóóMó¬¬ÕÕÿRÕ(†3°†† +]ÈDñ°°]°*„­¾••ôN¡¡66 _E˜oo-€VE˜˜˜ÂÂEEŒ9999ŒŒ9oo˜E˜E˜E¦¦))¦S||ÛÛÛÛpp´a´‹ÞÞ1œœIœµb9ŒbbbµŒŒbbbbµµµµÎttÎ-€V©Â>˜Z´´IIrIœIœ1111fffffÀÒÙ,iiii??3ààd:ff===rïIa´ÞÞÂVV!‡Ú€-Ú-Ú!‡9ŒŒ9÷J!t÷J÷¤÷¤!Q!QÌ!y"P £!å#’!å!å m mf==ê=ìì óF:ç:à3†¡NNN  ãã¹¹ãw$ww„××ו•ïï„„ZZïïrr   _MM$$$ÑÑ$<<úú§!T!À!À%&Ç(>&‘$ä$ä%»'h%»%»%­$#*$×&$k%B%B%B%B"¾"¾#*$×#*#*#$¼$¼$¼%’#å#å#å$†„®1ׯBïïBBïïï®®®[““@@@““@ii'Ôþþ\¯\ ÇÇÇ2…\\Çññ&&€&ýýPý&&Ó&h»ä‘PýPý&&Pý‘‘‘äýªýª&&&Ó«X«X@šÄ‚‚////«X>ë>>g>>©ü%Ò1111µÞ1ÆÆðÕ‚‚‚//Ü‚##Ð#ŽŽŽá``7äº   ––mÇóóó Éÿÿ(ÕÕ(((††°°°]]°ÈÈÈÙ†°°­**k¾••Ê$Êw66_ EEEë-€--E˜ooò˜ÂÂbbbæ999˜EoEE|Ϧ¦¦¦¦¦.Ûˆˆp™ì´a‹Þr´aÞ‹IIrŵb9ßµµŒßµµŒŒŒŒµbµµŒŒ!!!!VVÓÓë˜>ë11röIrÅÞ1ÞÞ=ê==ê=ÀêêUUiiììi··à·dà=fffffIöœœa´‹‹ÂÂ!€€-- °V ° 挌Œ÷÷J÷ÎÎ÷÷÷¤ { {Ì!y"P £"»!!!ÀÀê===™™pp²!_²:!”d· + +3†wwww¹ ¹f¹¹$$û¡„„„„ÅÅ„„­­ïœœï¹¹f¹ú§ ~ÑÑÑÑÑ<<f ú§ ~"+"–$C%ð%ð'h'h'h'h%»%»%»'h%­$$×$×&$k$k$k$k&&$k%­%­&„$×"8"8!b##å#å ‹"8&3„®„„ÆB•BïBïïï[®ii““íí@“æ“iÃÔ«« \ \ttÇ…Ø\\ÇtññÓÓÓyªPPý&&&y»‘äPýP£&&ýª>>‘äPýýªÓÓÓ&«Xþ«@@j‚‚‚‚ÕÕ«Xë>‘‘ºg>>©üÒÞÞÞÞµ1ÞssJ‚/‚‚/Õ‚‚vvÐ}莎;``7äº   ––ÀmmÀ##óó óÉvRR(ÕÕ(((††]°°]n†3°°S}}¾k••wwÊw66_ EE˜˜-Ú--ë˜ooEëÂÂbbbŒ999˜EoEEÏ|¦¦¦¦¦¦.ÛÛÛpÃF™´a‹8ÌrÌ´‹ÞœœrŵŒ2µµŒßbŒŒŒŒµµµŒŒÎttÎVV€€>ëë>ÞÞ´´rÅœIrÞ1ÞÞê===ê—ÀêêUUUUii??i··: +·à3=fffÀÀö £IIa´ÞÞooooÚ€VV€Ú °VV æ æŒŒ÷÷÷¤ÎÎ÷÷¤÷ { {!yÌ £"P!"»"»aÀÀ—êê m™™pp²²::· + + +3†wwÊÊ ¹f==¹¹$$NN11„„××­­ïœIœ  f ú§ ~ÑÑÑÑÑ<< f§!T"+#Ø$C%ð%ð%ð$'h'h'h%»%»%»'h%­$&„#*$k"¾$k$k$k&&$k$$#*$×#å#å#$¼#å#å#å"8"ÙïBBœï„1„×[®®®ïïïBþ«ÔÔ««þþ@“@š@“iß22…ÇÇÇ\\2Øžžññ>>>ä&yýý»»h>‘PýPPhhhªýýPPPªªh»‘‘@í‚‚X«XX«XÄíí©©üü%©üüü%Òü©©©J‹Þ1ÞðssJííšíeeŽŽŽŽá;ÌÌ¢O  7ä+Ø+Ø…#9-Í-Í#¿^óóv({((ÿRÕ(°°†ÙDñññDñȾk•èSS66ã6  66ÚÚ°°ooÂÂÚÚ----Vbbbߌæ9-€ÂEëÏ|ÏϦSS¦™F™óÛÛÛ.IIöö‹‹ÞÞÌÞ‹‹Þ!tߌµµŒŒŒßµbµµJJJ÷÷÷˜ë>>>ë˜ërrIIIœœIrÞ111ûûÒÒÒ¨U¨¨=ê=êiiiÔà +·uuuu=ê—ûûU ‹‹´aa´‹‹ °Vo!˜ë-Ú˜˜˜˜"þ!Q÷Jbbbb9Œbb¤¤!Q!Q!å 8!"» £"P#&!y m mÀûUÑ+ÃpÃÃà  óF¥ø"uKžuu$$ww$$û¨f¹ã¹f¹¹Åœï­­­­ÅÅÅÅÅrw$Ñ ~ é é#m <<<ff< ~"+%…%…&Ç&Ç&Ç&Ç$ä&‘%»%»%»$$%»$$&„$×$×#*$$#•%B&&%B#•!è#•#z#z%'&Ô#å"8#å"8$BBB1„×[®®®BBïBþ«ÔÔþþþþí@@@@“i2……ØÇt\\22žžžž>>‘‘€Óýý»hhh»h>‘ýªPP»»h»PýýPýýýý»h‘‘@íÄÄ‚‚X«««þ«jííVüüüÒÒ©V©O%Ò©ü©©J÷Þ11„ðÆÆJÄjíííšeeŽŽŽŽŽèyõ¢  7䨅…Ø®®…)í>Aé2Ô e  ÉÉÕ(ÕÕÿR(ÕÙ†ñžññžñÈkB•S­‰‰6‰__‰‰ÚÚV°ÂÂoÚÚ----Vbµb9Œ9ŒÚ-°Voo˜˜Ï|ÏϦSS¦™F™™..Û.IIIIÞÞÞÞÌrr8‹1Þ!tJJß2ß99ŒµbbbJJJJJë>>>>ëë˜rrIIœIœIrÞ‹ÞÞ¨¨Ò¨UUUê=ê—¼iÔÔÔ3à +·uÏ""==ꨨ¨U 8Þ´aa´ 8 8 ° °o!˜ EÚ!‡ °V E E˜˜!Q¤!Q¤bbbbŒ9bb¤¤¤¤!å 8"»! £"P#&!y"ÀÀ  ~~pÃpppF™¥øÏ"žñÈÈwwww$$û¨fãf¹¹¹ÅïœZZ­­ÅÅÅÅÅr$Ñ ~"+ é é!Àf< é<<f!À é"–%…#Ø#Ø#Ø&Ç&Ç&Ç&Ç&‘(>'h$"a$'h%»$$#*$×&„$× ¦$#•%B$k$k%B#•#•%B#z#z#z%'%’#å#å%’%ÈÆÆÆ„1[®„„„„ÆBïB««Ô''ÔÔÔ@@@“22 \ÇÇÇ\\2ßÇñž>>‘>ýýýý»h‘‘‘‘hhÓÓ&&‘‘‘‘Ó€ªPy&&Ó‘>hjjíí/‚«««XXííÒÒü©ÒÒü©ÒÒÒÒ©©Æ J11[ðÆÆÆsssÄqíííšáḸáá¸e¢õ¢¢``7ä+……+®$6.;5*s óFÉÉRÿÕÕ((Î(]°]]žñD—DñÈB•k¦××666ܲ_6‰ÚÚ-‡oooo-€99Œ999µbÚ---˜ëÂÂ||¦¦Ï|)|FFX..rII´´a´œœ‹Þ!!÷÷µµßŒbµŒŒµµ!!JJJttëëë>>ëIIIIrrIïœIII´1ÞÒUû,,,¨¨û¨ÀÀiii'««à†3àuÏÏ"ffêê~Ѩ¨´aaa‹ 8 8Þ-ÚÚ- E˜˜ EÚÚ °Vo! E˜ { { { {999Œ9Œbb¤¤ { {!å 8!å!å#&#&!y!y"Àêê~+   p™FF™ÃpÏ"øKÈÈDñÊw¡NNû¨¨fãããffïïÅÅ„1ׄœIrÅÅÅIöMú!T#  "– é !À  < é!À#m%…%…%…%…'%ð%ð%ð%»'h)%»$$%»%»%­$$×#*$$"S ¦#•#•$k$k%B&ï#•#•%þ$Q#z#z$¼##å%’%Èl„1®×ׄ„ÆïœïBïï««'ÔÔ'ÔÔii““ii“@22\ ÇÇǯ ß2tÇDñ‘‘>‘ýýýýhääää»»&&ÓÓ>>>äÓ€PP&y&Ó>‘h»jjííÕ‚««««ííÒÒü©ü©ÒÒÒÒ©©ssJ11[ðssÆÆÆÄÄÄíGšíŽŽeeŽŽe¸¢õ¢¢  ä‘ØØØØ®¸ e¸^ó Rÿ((((((]°]]ñžDñžñnnÈ•è¾k**6666 _ã6ÚÚÚÚooÂÂÚ-VV99Œ9ŒŒb‡ÚÚÚ˜ëhÂÏϦÏ||)ÃFFX..röö´´a´rÌII8‹´´!!÷÷µµŒßµßßµµtΤJJ!!>>>ëë>œœIIIïIööö´1Þ,¨¨,,,¨¨U¨ÀÀÀÀiii''««33à""u"fÀêÑ~UU´a´´‹ 8‹‹Ú!‡Ú- E˜˜ E!‡-V °!o˜ E { {ÎÎ æ æ9Œ9Œbb¤¤ { { 8!å#’ 8!y!y!y!yÀÀ==+~UU !Ê óFF™pÃÏ"KžÈÈžKwÊ¡NûNN¨f¹ã6  ïïÅÅ1„„1œIÅrrrIöú§§!T#m#m"– é#m!À  $C"–%&Ç'2'2'2'2%ð$C%ð%ð$%»%»%»'h$$$$"S&„$×$$"S$#•#•$k$k#•!è#•#•$Q"¤%'%'$¼##å"8%Èׄ„NN%Ë  ººïBÆÆBïÔ'Ô««««““ii@“hhhhhhhÇtÇÇ22¯\»»‘ä»»h»Ó&PPýýýý£ýýPyÓÓÓÇtÇÇññttžžžñÕÕþX@@ÄÐvLL¸ Žáü©ÒggÞÞ‹ÞJÆs©üÒÒüü%%‘>>‘üü%Ò¸ ¸¸¸ŽŽqÄšš‚‚XX ``   ` Ø+––Àm“@½½ÿ¬({½j½½RR{{Pý'z8弆†††ÙÙ6‰²_ÊÊÊÊ­××Bèk¾¤Q{{{Î÷÷bb¤¤÷÷E˜˜˜˜˜˜E÷¤{{Q÷÷¤ÏÏ))::¾d:”:êêêêmÀaÞÞÌÌŒŒŒßJJ!!-€€---VVµbŒßµµµµßߌ9ŒŒrröIaa1לöIööIrÅ,,Þ‹aÌ3333È"Køà"ÏKøÀÀêêaa‹‹Ì!yöö!‡!‡Ú-oÂÂo!ò E˜ëo! E E!‡!‡ °!‡!‡!‡ÚÂo E E E E!ò!ò#&$Ó#ý £!!!å#’IIœI´´p F ó²²..d·à3 + + + +ã6ãã=êfã¹¹ãã­ZÞ„Iœ—fê—ÀÝ!Š ´$$"a!!!õ#¢$y$y)€'Ó'2'2($®$C$C''$y$y%O%O%O%O%O&ü%B#•#•%B$k$k"¾$k$¡$¡&N$¡#Ë#Ë#Ë"$†"Ù#°#°#E$ò"n"n#E×®®„„¡ûÒx``ººïBÆÆBïÔ''ÔþX««@@iiii“@hhh»»hhtÇÇÇ22\ hh>‘hhh»Ó&ýýýýýýýýPý&&&&ÇÇÇññttññžñ‚‚««ííj##ùŸ¸ áŽüOÒººº11Þ‹Js ©üÒÒüüÒÒ>‘‘>üüÒ%¸ ^¸eeááÄqíí//XX º³º`` `Ø…CCm擽½ÿRÕ(½½½ÿÿÕÕP£z'å’¼††°°Ù3ÙÙ6‰²_ÊÊÊÊS**••¾k¤÷ÎÎÎ!¤¤bµbJ¤¤¤˜E˜˜˜˜˜ë÷¤ÎΤ¤Q¤||||çç¾d:::==êêmÀaaÞÞrrŒŒßŒ¤¤!!€ÓÓ€--VVµb9ŒµµµµŒŒµµßŒŒŒrrIœ11IIœIöIrÅ,,‹8a´Ìyàà33""žKàààÈuøKfÀêêaa 8 8!yÌ £ £ÚÚÚ-oÂo! E!ò!ò E"É! E E!‡!‡ °!‡!‡#4!‡o!#Ÿ E E E E#Ÿ&€$Ó"P"P"»"»%?#’ £IœI´´ !Ê ó" ²²..d·à + + + +ã66===¹fã¹¹­Z„„ÅÅœï=À m!D—" m ´ ´!Š#7%»%»$"a!!#¢%O$y'Ó)€'Ó'2'2((%ð%ð''&&&&#¢#¢%O%O%O&ü%B#•#•%B&&$k"¾"ô"ô&N$¡#Ë#Ë%x#Ë$†"Ù#°#°$ò&Ÿ$$!˜[®®®®NN%x  6ãïïÆÆ«þ'ÔþþÔ퓼ii‘‘>‘‘>»»tÇÇÇ\ \\h»‘‘h»hÓ&€Ó&&&&&&&&Ó&ýPžñÇÇžKžññžñž‚ÕXXjÉ#LL¸ áŽÒ%©©>‘‘>ÞÞµµ sÒÒü©%ÒÒ>‘gÒÒ©üáá eŽŽ¸¸ííííXX«7ä```  `ØØ®[mmmæææ“((Õ{æ9““((((zz'Ô’’å8°]3†°°††__  Êwʦ¾kk÷J!{Ît{{9Œ99ÎΤ¤ooEë똘˜ÎΤQ{{{!¦¦"Ͼç:ç:dçÀê=À´´Þ‹rrŒŒµJJ!!€€Ó€©€€ŒßµµŒŒµµµŒŒßŒŒŒöIIIZaIö£IUUU¨‹‹´aöööö3à + +KøÈu3 +·KKÏ"=êêêÀÀ m 8‹ 8 8"P £Ì!y °Ú!‡ E E˜ Eo!!ò Eoo!"É"] °Ú!‡"] °!‡Ú!ò E"É! E E!!$Ó$Ó#&#&!!&"»ÌrrÞÞ´aF ó!Ê Xàààà3333ã¹¹===ã¹¹=Z„1IœIï=—!D!D!D"ñ"ñ!D ´ ´"a"a$$$$!"Ì%O%O&ü(©(©(©'2'2'2%…%ð%ð%ð%ð$y&&#¢#¢&&&&%O%O$k$k"¾$k"¾$k%B&ï$¡$¡$¡"ô"ô"ô"ô$¡$†"Ù"Ù$†#E$ò"n$$[[[[[NNx%g 6ãïïÆÆlllÆ«þ'ÔþþÔ““ii‘‘‘>‘>hhtÇÇÇ\ \\h>>hh»&Ó&Ó&&&&&&&&&ÓýPžñÇÇžññžñžžñ‚ÕXXÄvvLL ¸Žá%Ò©©ë>>ëÞÞJJÆs%ü©ÒÒÒÒ>‘gºÒÒü©ŽŽ¸¸áá eíGíí«XX7äº`` ` ØØ®mÇmæææ“{{((æ“@æ{{{{zzz'?åå’]°†Ù††_¹  wÊÊ­­k¾k¤÷{{ÎÎÎÎæ9ææ{{¤¤Éo˜>˜E˜˜ÎÎ÷¤{{ÎÎùùÏ|dç::dççÀê=fm´´Þ‹rrŒŒbµJJ!!€€€-VV€€ßŒµµßßµµµbŒŒßŒßßöIII´aöIööÀffÀUUû¨8Þaööööà3··žK"Ïd·øø"Ï—êêêÀÀ m‹ 8‹‹"P £Ì!y"] °Ú!‡ E E E˜o! E˜!!!o °!‡Ú °Ú!‡!ò E"É$v#Ÿ#Ÿ"É"É#&#&#&#&"»"»$h!År‹1´a óF!Ê X²Xààààààààãff===ããã¹¹=Z‹ÞœIII=——"ñ"ñ!D!D"ñ"a"a$$$'h%»"a"Ì$y%O%O&ü(©(©%O'2'2%…#Ø''%ð%ð$y"Ì#¢#¢&&&&%O%O"¾"¾$k"¾"¾$k%B#•"ô"ô"ô$¡$¡$¡"ô$¡"Ù$†$†"Ù$ò#E$%È$„„„„ãã6xËNN[1„lBïÔ'ÔÔiiiiiiÃii@@>‘‘‘hhhhññÇÇÇÇt€&Pª‘ä>‘»h»hPP&&»‘‘ýý&&ñññžÇÇÇtÇtñž@@í@áḠáŽe ÒÒ©©ÒÒÒµ11µgüüÒÒüOggºgŽŽáá4á ¸X‚‚ÕÕ//7Š  yyÌ®®ØØ…+(({(““½j““““ÿRRR¼¼åå’’¼iÈDDnñžww¡¡N¡¡¡­××­S­S9999ŒŒ9Œµbææ9æŒ9ÂoÂë˜oÂbbbb99dùùÏÏÏ|S¦¾dê=fê—À8‹´IööœJ÷÷JÎ!JJë똘VV€€J÷J÷µbbŒŒµµ!ÎJJ11´œöööööIœÞÞ´´==ÀÀ£œöö‹‹‹‹uu""Køø¥d···|"K¥—ê¨U++Ìöö 8 8a! E E!o °#4Ú!! E Eo!!ò E E!ò!ò!ò"] ° °"]!‡!‡#4$á#Ÿ%L%L#Ÿ"P#ý$Ó$Ó#ý#ý#ý"PaÞ‹ÞÞ´aFF óFppÃižKuu· +ààNNÑÑ==ffNNN¡NûÑÑÅÅIIÞ‹aa!D!DÀ""#Ç#Ç"$$$ä$ä$y$y#¢#¢%O&ü&&&&)ë(>'h%»'%ð%ð$C$C$C%#m$"a%»"a$$$%»#*!}%­%­#*$×$×#*"#Ë"ô&N#Ë#Ë"ô$¡#°%]%]"#°#°$†&3"n×ׄ„ããããx%NNµ%"’‹sÆœïÔÔÔiiiiÃ@@>‘‘‘hh»ññtÇ!ÇÇ&&ýý‘ää‘h»»hýý&&»h‘‘ªP&&ññžKÇÇÇttÇžK@@í@jjŽŽ¸ áŽe ÒÒVüÒÒÒµ11[gO©ÒÒÒÒ©üggºgŽŽ44Žá ¸X‚‚‚‚‚‚7Š  ÌÌÌØØØØ(({(@æ½ææ““ÿR¥ÿ¼¼ååååi¼nDDnñDÊÊôô¡ôôô­„„­­ZæŒ99999Œµb99Œ9Œ9oooÂë˜oÂbbbbŒŒdk¦¦|||ϦS¾d—êÀ—êf‹8´öIöœJ÷J÷Î!JJëëëë©©€€J÷J÷µµµŒŒµµ!ÎJJÞÞ´œöIIööIœÞÞ´´==mÀmÀöIöö‹‹‹‹uu""ø¥Køddd""øøê—ÀÀU ++Ì!yöö 8 8!a E Eo °"]#4#4!! E E!o E!ò!ò#Ÿ#Ÿ E °"]$ +"]!‡!‡!‡#4!ò#Ÿ#Ÿ%L"P#ý$Ó$Ó#ý#ý%ª £´´Þ‹ÞÞa!FFF óppøK"È· +ààNNÑÑ==ûûûNNûÑÑrrII‹ 8aa!D!D#Ç#Ç#Ç"%t#Ç$$#7#7$y$y!õ%O&ü(©)€)€(>)ë'h%»%ð$C'%ð$C$C%#m%»'h'h'h$$"a$#*$×$$#*$×#*$×#Ë%x$¡$¡#Ë#Ë"ô!G"#°%]"""$†&3"n® ºã6Ë%NU, =b?1§£ïBBþ«þþ@@i¼@@iÃii¼hhhh‘>KžÇÇžžtÇýªÓÓ‘‘‘‘>>hhýýýýh»‘ä&&Ó&DžžžžžñžñKjj½jááááŽŽŽŽüü©©©üÒ,Þ1ÞÞÞÞµg>‘ü©ÒÒÒÒüOgg‘>áá  áŽ¸ ‚Ü‚/X/Õ³   ÌÌÌT…Ø®((({““½½½½j½({¥R8å¼å8DDÈnG¡¡ô¡ôÊw××ׄ××Sæ9b9999Œ9æ9bb˜˜ë˜ë˜EEbb9ŒŒ9:çS¦Ï|¦LLùd¾”çêêÀÀÀêê‹8arII÷÷JJ÷J÷÷˜>ëë©©ÓÓ!Î!Îß2ŒŒµµßßt!÷J´ÞÞIIIööIÞ‹´aê=êêÀÀ—êöö´aa"uøø"""|d::¥¥||ÀÀê= U+~ö £ÌÌ!å 8 8!åooo!"] °!‡!‡!"É!!oo!"É#Ÿ!ò!ò!ò!‡Ú"]"]!‡!‡ ° °!ò#Ÿ#Ÿ%L#&$Ó#ý#ý#ý#ý$Ó̋޴aÞÞaa ó" FFp ÃÏÏuu· +· +ûû$$¹=$$$~ûûÑÑœIöIaa‹ 8À#Ç$ž$ž%t#Ç'!%t"a$#7&‘&&&&%O%O(©*V+-)€'h)(>&‘%&Ç&Ç#m&Ç%%%$ä&‘$ä&‘$ä$ä&‘$ä%­%­%­$#*$×%­"S%x#Ë$¡š""#Ë#Ë$†$†$†"Ù$†"Ù$†$†$òÆ®[®®ºgã6xxN ¯8[EÃEÃ;µ"ýïïïþQþþ““i@@iiii¼»»»ä‘hhžñtññÇtýªÓÓ‘‘>>ä>hhýýýý»h‘äyÓÓ&žžññžžžñÇÇžžÄjÄ;áááŽŽŽŽ©©©©©üÒÒÞ1ÞÞÞÞ[g‘>V©%ÒÒüOgg>뎎¸¸Ž;¸ Õ/‚/X‚‚  ``ÌyÌÌTØ+®((({ææjj½½j½({R¥8åµbå’DDnÈ¡û¡ô¡ôÊw„„×*××SŒ9b99999æ9æ¼b˜˜ë˜òEEEbb9ææ9:ç¦SÏ|¦¦ù¦·ç:==Àêê8‹aaÌII÷÷JJJ÷JJëë>>©©€€!tt!ߌ9ßµµßßÎ!÷J´‹‹IIIörrIöÞ‹a´ê—êê—êöö´aaau"øøÏÏ""d·:: RøÏÏÀÀê— !¯ Ø+ £ö 8!å 8!åoo!o"] °!‡!‡!"É!!oo!"É!ò E!ò!òÚ!‡ ° °!‡$á$ +$ +#Ÿ!ò#Ÿ!ò$Ó#&#ý#ý#ý#ý!yÌÞ1´a‹‹!!F™FFpÃpÃuÏuu +·· +ûû$$fÀê=$$wÑNNÑÑIœöIaa 8!å"#Ç$ž$ž#Ç%t%t#Ç%»$&‘&‘'Ó'Ó&ü&ü(©&ü)€'Ó'h%»$ä&‘&Ç%%(t%#m%%#7$ä&‘$ä&‘&‘&‘$ä%­"S%­$#*$×$$%x#Ë"ô!G#Ë#Ë#Ë#Ë$†$†"Ù!,$†"Ù$†$†#EûãggïïBB×ׄÞ*R>nBŸ57NûNÈŸŸuuÈ] +á4ŸLLŸAAî”AAÅwwwÊM MM⸸ÑwMM””AA¯¯¯\…2……hhh»hh»»&&ªªíí/‚XXe¸ááLLLùíšÄííÄÄŽŽáŽùLLL©ü%ÒÒÒÒüOüü#Ðù¦Ð#LŸv#vv¸¸¸ {ÎÎ{ææ99cæ9¥¥RR7ä77ÌÌyymØØ…Øzzz b¼¼¼¼8åå円††33’’å8£ýPýoo똰V°°ÚÚÚ--Ú³`³³xq––}}T§..ÛˆˆˆÛˆ™Fpp:::::|||Ͼd:ç}Ðúúú§§§qÄ›H›îÄÄë>h©V€€ÂÂë>Þ‹aaöœmÀêêêêÀÀ—=Àm¨UUUÙ1ÞÞÞIörr‹Þ‹‹ÌÌ ¾d::dç:²²² !Ê  ¿¿!l!l!l!l • • Ë!¢õõHHõ!¢#O!¢!¢ `" !6!6!l$Æ#ï#ï##$Æ#%t#Ç$ž&K$2$2 Ø+rII´´ 8 8FFF™ÃÙì·d: +···ff¹f¨¨~~IœïïZ´Ñ~+~ !¯!¯!¯"P"P#ý%ª&'Â&ì&ì$É#% % &v(#'M% &â(((&v&v% 'M&Ç%%ð'%%%&Ç%ð%ð&Ç!À$C$C%%$"S%­%­%B#•$k&%B!è"¾"¾$$#*#*#*$×$$$×$×$×$×"ôN㺺BBBB××××=!ñ$uÁNNûNuÈŸŸÈÈuÈ] +á4òŸŸLAAAA›Ak¾wwÊwM   â  wwMMAAîî\\\¯…2……hhh»hhhh&&ªªjj@@Õ‚XX¸eááùŸŸL@íÄííÄÄŽŽáŽùLLLOü%Ò%Ò%%%©üüüÒÒ#vLù#vŸLÐ#vv¸¸e¸({({ææ““½æ9RRRRŠ7ääyyyymÀ++Ø…''Íͼ¼¼å’’8ÙÙ°°ÙÙÙ3ååå’PPPýoo˜ë°V]ÚÚÚ-Ú-³`qéé}}TÛÛÛˆÛÛÛˆ²²Fóç:::dd::ÏÏ"Ï:ç}ÐTT§ú§§qÄ›HH›ÄÄ>ëhV©€€˜ë8‹´´IIrrÀmêêêêÀÀêêÀ¨U,,UU‹ÞÞÞIœrrÞ‹‹‹ÌÌ!y::d!”ç!_²²² !Ê  !l!l!l!l¿¿ • • Ë!¢õõHHõ!¢õ!¢!¢#º" !6!6!l!l •#ï!l!l#$Æ#Ç%t$ž"ñ"…"…+~rII´´‹‹™™F™ì?· +à +·d +¹¹¹f¨¨~~œIœœ´´~++ Ø#\% #\&¶%ª%ª%ª'W&$h%?(™&v$É#ó#ó&v(#(ú'M(&â(((#$É% 'M%&Ç'%ð%%%&Ç%ð%ð%#m$C$C%%%­$$'Z&ï!è"¾$k#•#•"¾"¾$$#*#*$×#*'Z$#*#*#*#*$¡x6ã  ïB„×ׄºgxxNNŸŸLŸuuLŸ]]á‡uuŸLÅîA M ó$Ê M¸e  ww MkÅ…2 ¯Ø2\\ä>h>‘‘‘&&ÓÓjjjþX‚‚e¸¸¸Ÿòvv“íÄÄí펎áŽùLLŸü©%ÒxÒ%Òü©©©Ò%%Ò##Lù#vLL##ŸL¸¸áŽ((RR½½j½æ“ææ((ÿRŠä‘ä¢O¢¢Àmm+ØÔ'zÍåå’å¼¼’弆†°°Ù3’å¼£P''˜˜˜˜€ÚV---ÚV܉//Hõq<é¿*}§T²ÛˆÛÛˆÛÛˆˆˆFóFF:::禦ÏÏç::ç}ÐÐ*ÐÐú§qq›Hõ›Äqëëëëë˜-€€€ÂëëÞ‹‹ÞœIê=f=—êêê=ê—êê,,,,,Þ111IIrÞ‹´´ÌöI ¾:::ççç ˆÛ..p   "B"B!l!l • •!l¿õ!¢#O!¢!¢õõ!¢!¢õ"x#º#º!6‰!l!l"B"B"B%œ#ï#ï#Ç#Ç#Ç#Ç"… Ø++rööÞÞ 8 8pÃÃÃÃÙìà +·ààà3¹ff¹ûû~~ÅÅIöÞÞÞÞ~~ !¯!¯#\%ß'Œ))'W'W&ì&ì&)o+})Ð#$É(ú'M'M'M)e'¸& '¸'M% &v(#$C'&Ç%%&Ç%ð%ð$C$C%#m$C%ð%ð$C#*$×$%­%B#•"¾"¾!è!è"¾"¾%­$$"S#*$×$×$×"S"S$%­#ËË6㺺œï„ׄ׺ ããxxNNŸŸLŸuLŸ]]44ÈÈŸLÅAî MM ww M¸ ^^ww MÅk2…\\……\\‘‘»h‘äääÓÓÓÓj½þX‚‚ ¸ eùL#É“íí펎áŽLŸŸLü©ÒÒÒ%xü©üü%Ò%ÒvvLù#vLL##ŸL¸¸áŽ{{RR½½½æ“““ÕÕÿRäää7¢O¢¢mmmm®®…ØzÍz'?å’?ii¼¼8‹¼i††°°°°††’å¼£Pzz˜˜˜˜--V---ÚV©Ü‰‰/›Hqé–¿}*§TXˆÛÛÛÛ..ÛÛÛF™FFd¾¾d:::¦¦ÏÏ::Ð}ÐÐÐÐT§qq›î››ÄqëE˜˜ÂÂë>€Ó€€Âëë‹Þ‹ÞIöÌÌê=ÀêêêêÀÀê=—êêê,,,Ù,,UU1Þ‹1ïIr‹ 8!!ÌöI ¾"kç:ç::Û ˆÛÛ pp!Ê • •¿¿ • •¿!l!¢õ!¢õ!¢õõ!¢õ!¢ Ë Ë#º#º!6"ã!l!l"B"B"B"B"B"B"""""… Ø++ÌII‹‹‹‹pÃà  ÃF™à· +ààà3ff¨¨ÑÑrrIœ11ÞÞ+"…% #\#\% %ß$2))'W'W&ì&ì'Â.v785‹+}&v% 'M% (ú'¸& & '¸% #ó$É)Ð''&Ç%%&Ç$C$C$C$C%#m$C"–"– é$×#*"S$#•%B"¾"¾#•#•$k$k"S$$"S$×&„#*#*"S"S$"S"xºººº„ׄ„BïBBã㺺¡Nxx + +4áŸEuu444444] +ƒƒƒƒƒƒYY5â   MM â5ââââ⃃Y¬¬Yƒƒß222žñññ»»»hh‘‘>ëh@@@íXX««¸¸áŽLŸ#v«««««X‚‚;ޏee¸ ¸ÒVü>>ä‘>‘gºggggŸù#ÉvvLŸáŽ  ŽŽ¸¸æ9½ÿ¥Î{RÿRRj½ææ77ä䊊` ®Ø+mðC¼bååii?å¼8ååå’’†Ù°°†Ù°å8888åë˜Âo-ÚÚÚÂo˜ëHHHH/Üé<ééTT**pppppppp™™ppppFFÏ|¦ùùùùùù¦ÏÏç:¾d§§}иe¿//Yqq››>˜˜˜-€VV>ë©VV´´´´öIÌUU,,UUÀÀ==U,,————,,UUIöIIrröö 8‹ 8 8ö £ £ £!ÿ!ÿ|"ø RÏ|F ópppp™ ó •è"B •è •!l#!¢õ Ë!¢#O Ë Ë!¢!¢ Ë"x!¢õ!×!×!×!×!!!! Ø"…"…"… m m——ööIöÌXXÛ.²øK""· +3àÑÑÑÑ==ÅrœBö!¯!¯#\&¶&¶&¶% % (™%?&'Â(-(-)Ú3è@p9¼+}(#&â%5& )e% % % % % 'M'M'M&[&['2%…%ð%ð$C$C$C$C"–"–%%$C$C$×$×$"S$k"¾#•#•"¾$k#•#•"¾$k$k"¾#•#•!è!è!"¾#• ; Üxºººº1„„„ïBïﺺNû%% + +᎟Ÿuuáᇇ44 +]ƒƒƒƒÖÖYYâ  ó Múââ55555ÖÖY¬¬Yƒƒ2…Ø2žñññ»hhh‘‘‘>h@@@íXXXX¸¸ŽáŸL#vXþ«««X‚‚Žá ¸¸ee¸Ò%üüëë>‘‘>gºggggLL##ÐvŸLŽá  ŽŽ¸¸9æ½ÿÿ{(ÿRRRcææ7Ý7777` ®+ØmÀðCå‹åå¼’åååååÙ†]†Ù°]å’ååå’ë˜Âo-Ú--°°ÂoE˜õõHH³³Ü‰é<ééTT}}ÃppFFppppFF|)¦ùùù¦¦¦ùÏÏç:dd§§Ð#ee//Yqq››ëëëë-€VVÂÂë>V©V´´Iœr¨¨UU,,ÀÀ——¯†,——DD,,¯¯Iœœööö 8‹ 8 8 £"Pöö R R|| R RÏ|F ó    FF •èè •"B#ï#!lõ!¢"x"x Ëõ!¢"x"xõõ"x$%#O!¢!×!×!×!×!!TT"… Ø Ø Ø m m——ööIöÌXX.XKž"" +·à~$ÑÑ==Åïïö!¯!¯#\&¶(c% &¶&¶(™(™)o'Â(-(-)Ú-41[1[)Ð&v%5&â'¸'¸'M'M'M'M'M% 'M#ó&[&['2%…%ð%ð%ð%ð%ð%ð$C$C%%%ð%ð#*#*%­$$k"¾!è!è"¾$k%B!è$k"¾"¾$k!è!è!è!è"¾$k%B!è"‰%gº  ®®×1sÆÆã¡N%%] +ááuuuu] +44]] + +¬¬¬YÖÖƒÖe ââwwMMâââ⸠  ¬¬ÖƒÖÖ¬Y\\…2tÇDñhh‘‘»»‘‘hhë>@íííX«Xþ ¸áávv#ÐX«X«‚/‚/¸¸¸¸ŽáŽ;VüOüggggggg‘‘>ë#vv#####e¸ŽŽe¸áá9æææRRRRÕ{RR“9ææ``7ä` 7äØØØØmb¼¼åååå¼¼¼’’° +3††Ù††’å¼å’˜ë˜EÚ‡°ÚÚ°°˜˜˜˜HHq³Ü‰éé<<TTTFFpppppó™póFFFÏÏù¦¦ù¦¦ù¦Ï":::úúÐÐ<<<<³ÜÜqÄHHë>ëëVV--ëë€-V´a‹ÞIIr¨U¨U,êêmmÙÙÙ,DDmmÙÙ††IIÌÌööa´ 8 8ö £ÌÌ!)!)!)!)"Ö|Ï|F ó óF  !Êp¿¿ • • • •"B •õõ Ë"x"x Ë!¢!¢ Ë"x!¢!¢#O#O$%"xT!"®"®!×!× * * Ø Ø!¯ " m!D—IörÌr..XXXX.KKKKàà +·¨NNû==ffïœïœÅÅÌ"…$2#\% (c&¶)9)9'Â)o+'Â)). /¸)Ð+})Ð&v'¸)e(&â% (ú(#&v'M% &v&v%…%…##&Ç%$C%ð%&Ç$C$C%%'%ð$×#*$%­%B#•#•#•$k$k%B#•#•#•"¾"¾#•!è$k"¾!è#•$k!#_%ºgºº®®××ãããNûxx +·‡‡uuuu +]44]] + +YY¬YƒƒƒÖ¸¸ââÊÊMMââ5^   ¬¬)ÖÖÖY¬¯¯2…Çñž»‘‘»»>äh>‘@íííX«««¸ áá##v#X«X«Õ‚Õ‚ee¸¸ŽáᎩ©ü©gºººggººä>>‘#vv#vv##e¸ŽŽe¸ŽŽæ“““RRRR((ÿ¥ææææº`Š7` ä7ØØ++mmmi¼¼¼åååå¼åå°°†ÙÙ†ÙÙå8b8å˜ëë˜-Ú°ÚÚVVEEEE›õË`³Ü‰éé<–§§TFFpppÃFFpF™™™ÏÏù¦¦ù¦¦ù¦|Ï:::úúÐÐ<<<<³ÜÜqõ›>ëëëVV€€ëëÂo-€V©´a‹ÞIIrŨUU,,,êêmm,,,Ù—ñmm††††IIrrööa´‹‹öIÌÌÏ!)|"Ö||!)|F óF™    ¿¿è"B • • •"B!¢!¢ Ë Ëõõ"x$%õ#O#O#O"x ËT!!! * *!×} Ø Ø!¯  mÀê—IörrrÛÛXX²²Û.KKøøàà· +NNNû==œïœIrrÌ!y$2%ß#\% (c&¶'Œ'Œ&'Â)o)o))/¸1e+}&v&v&v'¸)e&â%5'M'M(#&v% 'M&v&v%…%…$®$®&Ç%%ð$C#m%%ð%ð%%"–$C$×#*$"S!è#•%B%B$k$k#•%B#•&ï!$k#•!è$k"¾!è#•"¾"¾#_ï[®[ããã ºã6lBïBï + +44ŸòŸŸ““ii'ÔÔÔâ5ââM wwkÅkÿ¬¬ÿ$$wÊ  óM¬¬ÖÖ¬¬¬ÿä‘h»&&ýýß………ñžñDññ4áe¸ùŸvvŽáᎎḠ/‚‚‚ííííjÄXX(‚>‘üü©©>>‘‘ºº‘äX««X@íííííÄÄX««Xóó^^‡‡jjææææææ®ØØ…+7Š7äyy¼¼¼¼ýý'z3†°°°°]°8å’åzzzzi88zÍöPÚ-˜˜E˜99ŒŒÎÎÎ{§T*}¿¿¿Ü‰³`Hõq²ÛÛppppÛÛ::¦ùùùÛ.ÐÐú§<<<<§úMú§ú}ÐëëÂÂë>ëëë˜ë>ëëÞÞÞ‹ÞÞÀÀÀÀ—êêêêDDD,ÙÌ&y Ó&yyr´a‹ 8ööÌÌÌö £ R R R!ÿ#Aç:ç||!)|¥¥!ÿ!ÿ!6!6Ü!6!6‰³ `‰‰" `‰‰ ` `!×#„!×#„#ï"B"B"B!l¿¿¿T!T§ê— mÀêêrIœII:dd|ÏøøFìÃÃ?’¹f===œïrr´´´!$ž$ž$ž'ø(Î(Î'!'!$Ó(-)Ú(-&€&€+‡)Ú*&¬$ÿ&¬&¬(Y$($(&v(#(ú'M&v$É$É&v&&&&&&$y%O#¢%O#¢$$$$$ä!Š$"a$$$×!}"¾$k#•!è"‰%ã"‰$6%ã$6"‰$6% #_#_!²"ô$¡#Ë#Ë"‰ï[®®[ã6º ãlBïïB + +ááŸòòò““ii'ÔÔÔâ555M wwkÅkÿ¬ÿ¬$$$wMMMM¬¬ÖÖ¬¬ÿ¬‘>h»&&ýý2222žKñžttžžŽá ^ŸŸvvŽáᎎḠ‚/‚‚jÄííííÄÄXX‚‚gg‘>©©©©>>>>gg>‘Xþ«@ííííí«þ«X F^^‡‡½½ææ““““T++…+ä77ŠÌÌÌÌPPÍz†Ù°°°°]°å’’å''zz¼¼ååÍzPP-Ú˜˜E˜ææ99ÎÎ!Χú}*¿e¿Ü‰`³H›Ë²_ÛÛppÃpp..::¦ùùùÛ.XXÐÐú§<<ééT§§úú§}Ðëëo˜ëëë˜Eë>ëëÞÞ´´Þ‹‹‹ÀÀÀÀê———êê——,Ù&&ÌÌy&yyÅr´a‹ 8 £ £Ìö £ R R¥ R!”::ç|||!) R R R R!6!6‰‰!6‰ `" "ã"ã" `!6!6" " *!× *!×#ï"B#ï •!l¿¿¿T!§úê—À==rrÅrIœœœ:ç|ÏKK™™ÃpÃì?¹f=œïrr´´aa"ñ"ñ&K&K'!'!(Î(Î(-(-(-&€&€&€(-&€&¬&¬&¬$ÿ(Y*%Õ%Õ&v(#'M(ú(#&v&v$É$y$y&&$y%O#¢%O#¢"a%»$$#7#7%»$$$$×$×"¾$k#•!è$6$6"‰$6%ã$6"‰$6&¹% #_!²"ô$¡'%'%"‰B®[11  ã ºººïïïïïB4áá4òòuuiii¼''ÔÔââ    wwkÅkkÿ¬ÿÿMMMMww  ÖÖ¬¬Y¬ÖÖhhhýP&&\\…2žžññÇÇžñŽŽ ^vvvv¸¸áááḸ««‚‚íššíší‚/Ü/ggºÒÒgg‘>ggX«««ÄÄíííšíí‚‚««óFF™‡‡^^½ææjjj½T+Ø++  `³¢õ¢¢¼ååPPÍ'°°†††ÙÙ†’’i¼zzzz88PPPP-Ú--˜˜oÂbbßæQ÷!{§TT¿ee‰‰`³HHõHÛ5ˆÛFFppppp..::¾¦¦ÏÏXÛ.Û.§§#}ee¿¿T§úúT§§§˜˜ÂoÂÂÂÂÂo똘˜a´ÞÞ1Þ‹ÞÀÀÀÀ—DmÀêê——,,¯¯ýP££yyy&rrr‹‹‹‹ £ £ÌÌÌÌÌÌ||||!”:ç:¥¥¥ R R!ÿ!ÿ R!6"ã" `!6‰!6‰"ã!6!6‰" " " " !×!×!!"Bè"B"B • •#¿TT * *!D!D!D—À—!DöIröœœœ:øK"uÃpì™™Fpã=êrrrÅÞ‹aa"ñ"ñ&K'ø'ø)¥)¥'ø(-(-(-$Ó'W'W%ª%ª'‚'‚&¬(Y'‚%Õ$ÿ$ÿ% 'M% % &v$É$É#$y&&&&&&&&&&%O%O'h%»$$$"a$ä$ä$×#*$×$×#•#•#•!è%ã$6!²#_% #_"‰"‰$6$6"‰"‰"ô)¨13/†'ï®[×1ººãº   ïïBBïBá4á4ŸŸuuiii¼ÔÔÔÔââ eMMwwkkkkÿRÿÿMMMM$$  ÖÖ¬¬¬Yƒƒ»»hhªý&&¯¯…2žžññttñDáḠvvvv  áááḸXX//íší@ší‚/Ü/ggÒ%Ògggg‘>gg«XXXqííí@íí//XXFóóF‡‡^^½ææ½½½j®+Ø……   `O¢¢¢¼åå£ýÔz°°††3††Ù’’¼zz''ååPP££-ÚÚÚëëoÂ9æ÷÷ÎÎTTTTle‰‰³õõ¢õˆˆˆÛ™™pÃppÛÛççdùù||²Û..§ÐÐeeT§§§ú§úú˜˜ÂoÂÂh˜똘´aÞÞÞ‹1Þê—mÀ——DDÙÙ¯¯£ö££&&&yr‹‹ 8 8 £ £ÌÌ!y!yÌÌ||||çç!”ç R R!ÿ R¥ R¥ R‰!6" `‰!6!6‰!6‰"ã!6" " " ³!×!×"®"®"B"B"B"B"B"B¿¿TT#„#„!D!D—êÀê—öIröœœœ:··Kø"uÃ?ì™FÃÃ==rrr 8!å!$h$ž$ž)¥'ø&K'ø&K'ø&€)Ú)Ú&€'W'W'W'W*Ü*Ü(Y&¬'‚%Õ$ÿ$ÿ'M% % % $É&v&v$É&&$y$y$y$y$y%O%O%»$"a%»%»$$ä$ä&„$×$×$×%B%B#•%B%ã$6!²#_% #_%ã%ã$6$6$6$6'û8½EOC¢6¥®®®××%Òûûxxxx„„„1ïBuÈuuÈuŸŸ@@@æ@““@â5ââ    kkk¬ÿÖÖwwwwMMMMAAAA¬¬ƒƒhh>‘hhhÇÇ…222\\  ##ŸŸŽáŽáv#v#¸¸ŽáÕ‚Õ‚‚/‚‚ÄÄ@íÄÄÒ%ÒÒgggº>>%Ò©O«XXX««‚‚þXXXXX//±^‡‡ÉÉFóÿÿR¥Rÿÿ¥Àm––2ØT    ÌÌ¢¢ýPP£å’88ÈñžññÈnå’8å¼¼’åPP££'zPPÂoooV©V°bb9æ!!¤¤¿¿––¿¿–éHõqÄ܉‰ÜÛ.ÛÛppppÛ.?™™F|Ï|ÏÏ)¦¦pÃppÃÃìF¿¿¿<<éé§§§§ee<<€--€©€€VVVaa´´Ìö£ê=mÀÀÀÀÀmÀmÀmmmmaa88ÌyP£Þ‹´´ÌÌÌ £ £öö 8‹´a!ÿ!ÿ"Ö"::"k ¾ ¾!”::ç Ë Ëõõ!6"ã‰!6õõ Ë Ë Ë Ë"x Ë!l!l!l!l *!×"®"®!×!×!!"B •!l!l+~ÑÑ~~¨U‹‹´a!yrr¥øÏÏÏÏKžÔ.«X™F™™==ûûÑÑIIöI´!!å#’%t(Î*{'!'ø&K%t'!%?&ì)o&'W))%ª(Ä*q&A&A%Õ$(#R$ÿ'¸'¸&â%5%5%5&â%5%»$$%»&&$y$y&&&ü&ü%O%O"a$&‘$ä%­%­%­$$%­$$"‰$6% !²"‰"‰$6%ã#Ë#Ë$¡$¡*ê;¬FF:j®®®„„x%NNxxxx„„ׄïBÈuuu"ŸŸ@@“““@“@â5ââ    ÅY¬ÖÖwwwwMMMóAAAA¬¬ƒƒhhä‘hh»»tÇÇ…222\\\\##ŸŸ4áŽáv#Év¸¸ŽáÕ‚/‚‚///@íÒÒÒggg>>%Òüü«X««XX‚‚XXXX««//±‡‡FóRR¥RR¥RRm––ØØT  `ºyy¢¢Pý£På8åånñDDDnn‹8å’å’PPPöz'PPÂoÂÂVV°bb9ŒÎΤ¤¿¿éé¿¿é<Hõq܉‰ÜÛ.ÛÛpppp«.ÛìFF™Ï"Ï"ÏÏùùppp™™e<<<<§§§§<<€-Ú‡°V--VV©V´´´´rö£—êmÀmmÀmmÀmm88&y£P‹ÞaaÌIIö"P 8‹a!¥!ÿ"Ö|ççd ¾çç:::HH‰!6‰!6!¢!¢"x"x Ë Ë Ë!l!l!l!l!×#„"®"®!×!×$[!è •!l!l+~~~~~U ‹‹a´rr¥øÏÏÏÏøKXF™™™====¨¨ÑÑIIIö´´!å 8#Ç'!'!'!&K'ø'!(Î&ì%?)o)o'W))%ª%j'&A&A%Õ'‚$ÿ&¬& & %5&â&â&â%5#ˆ%»$$%»&&$y$y&&%O%O&ü&ü$%»$ä#7$$$%­%­$$$$6%ã#_#_$6$6$6%ã"""ô"ô$6.D:Õ:Õ.¯[„„[®ËxNN%xNN„„®BïLŸòŸLLÈuii@“iiià   ¸¸ 5AAƒƒƒÖ  $$M Mók”A¬ÿ¬ÿhh»h»»ä‘ññžñ  22\\ \vvLL ee¸v#ŸLá4áá«þ«««XX«@íÄÄííüü%Òg‘‘>>‘‘©üü©««Õ‚‚///XX‚‚/‚//Ú‡^±Âóó¥R{Õ({((mm–C®ØØº`7䢢õõ£Pzz¼ÈDDnåå¼å壣P££PPP˜E˜òŒ9bbÎ{Îο¿ééé<Ëq³``ˆ.ppÃ..²™F榦ùS¦¦ù™™Ãp™™<<<<<<é<}}§TééVÚ‡Ú-°-€€Ú€€ÞÞ1ÞÌrD—ÀÀÀÀ—ñmm————DD»»å8P£y&ÞÞ 8 8ÌÌÌÌÌÌ!a‹‹¥ R¥¥çççç ¾ ¾dHHq³" ` `!¢!¢ Ë Ë!¢!¢!¢H •#ï##"®"®"®"®!×!×#„!× • •!l¿+~ U~~U  8Þ´´öIrrÏÏÏ"""Ï"XX.™™ì™==fû¨û¨œIIö‹Þ!!"ñ&K'!'!'ø)¥'!'!%?%?(™*F(-)Ú)'W'î'î&A$”$ÿ&¬%Õ'‚&â%5& '¸#ˆ%5$^$^&‘$ä$ä$ä%O%O%O&ü&&$y&&$y$%»$ä#7$%­#*$×%­$$×#*% #_#_#_"‰"‰"‰$6!G"ô"ô"ô#_&¹,—*ê'û®„„[®x%¡¡%xNN*„[®BïŸòŸLLLu"ii@“ii   ¸¸ ââAAƒƒƒÖ  ww M  kîAÿ¬¬Yhh»h»»ä‘ñññž\\……\\ \vvLL   ¸#vŸLá444X«þþþ««þíšÄjššüü%Òg>ä‘‘‘‘©üü©XX‚/‚/‚‚XX‚‚/‚/ÕÚ‡^±FF¥R((({{{mmCð®……ººä‘¢¢OOP£zz¼ÈDDÈåå¼’’öPPýýPPPE˜˜˜9æµ{Î{{¿¿–<<éËq³³³ÛÛppppˆ.²™Fppùùù¦ù¦¦ù™™ppp™™<<éé–<<ÐЧú<<VVV€--€V€---€€ÞÞ‹8Ìr—êÀmmDDmm——DDDD»»!?’ýPy& 8 8‹‹ÌÌÌ!yÌÌÌ!a‹‹!ÿ R!ÿ¥çççç ¾ ¾ ¾õõq ` ` `!¢!¢ Ë Ë!¢!¢#O#O"B"B#¿!!"®"®!×!×!× * •#ï!l¿+~¨UÑ+U¨‹‹aaöI!)ÏÏ""""Ï«Û.™™ì™êêfU¨¨UœIIœÞ‹!!"ñ&K(Î(Î'ø)¥'!'!&ì&ì&ì(™&€(-)#ý'î'î&A'î$ÿ&¬%Õ'‚&â%5& '¸&â%5"±& (>&‘$ä$ä&ü&ü&ü%O$y&&&&$y%»$$ä#7$"S$×#*%­$$×#*!²#_% % "‰"‰"‰ Ü"ô$¡$¡$¡#_#_$6"‰"ô^MMú hh»»»»»‘‘‘‘»‘>¬¬ƒƒAAAAîîî”A”kii@@ÔÔÔ'ÔÔ««««þþº ººggãã„ׄ„„„[[AAAAkkÅwÊÊwwwwÊÿÿ¬¬11[[ÆsÆggä‘ÒÒü©‚‚«Xí@í펎ŽáᎠe¸¸  #ÐLL#vvv##ùùÄÄ‚‚‚/ÄííXX/‚ŠŠ77¢¢õõT®ØØ{{((Õ(Rÿ‡‡±±FóóóÉÉoÉÉR¥RRRR¬R77ä7³`ää[……®®ØØ–ééé}}*}›¢³³Ü‰V--ÂÂÂo-€˜˜˜˜ç:¾¾|ÏÏÏppppÛÛÛÛÏ""|ùù|"..²XÛÛ,ÒÒööIööö::ùùù¦¦¦ÏÏ:qqõ¢Ëé¿l×*T“æææ9æ¼iþþ((þþþQ `³³³q Ë܉‰‰ ËqHH E E E˜˜˜˜ E9 æß9¤¤!Q¤!Q¤÷÷ÎÎ÷!Q"É!!ò E!ò!ò!! ` `!6"ã!¢!¢!¢õ • •!l$Æ"B#ï"BèÎ!¤÷t {÷÷--V€-¤÷ÎÎŒŒµµ¤¤÷JJÇ!´´ZÞ1Þ‹Þ‹ÞÞ´´a!#’%?&&(-(-))'Œ'Œ(c(c'ø'ø'!'!&Ÿ&Ÿ$'u'à'à&3&3$¼#!b#%þ$Q&Ô&Ô'u%È#E#E%]' +$†$†"Ù&3&3&3&Ÿ#E#E#E####%'#z%þ"¤ ÷"¤%þ%þ$¼#!b!b!$k#•#•#*$×$×!}"¾^óMMMhh»»»»‘‘‘‘h>‘¬¬ÖÖAA””îî›AA”kii““ÔÔÔ'''þþþþþþ ºººggããׄ„„„„[[AAîîkkkw$$wwwwʬ¬ÿY11[[ÆÆ g‘>%üOÕÕ«Xš““íááŽáᎸ¸¸¸  v#LL#ÐvvvvLLÄÄjÄ‚‚‚/ÄííXX‚/77‘7¢¢¢¢TTØØ{{((({¥R44^^ó óóÉÉÉÉÉR¥RRRRÿÿäŠ7ä` ää®®ØØ®®ØØ–ééé}}}*Hõ³³Ü‰V--ÂÂÂo]Ú-˜˜˜˜ç:Ï|||ppppÛÛ..Ï|||ùùÏÏ..²X..ÒIIIööö::ùù¦ùùù||dd:Hõqéé¿×*®æ9æææ“¼iþþ((þþþQ³ ` ` Ëqq ˉ܉‰ Ëq!¢H˜˜ E˜˜˜ E!ò æ"“ æ æ¤"þ!Q"þ¤÷÷÷ÎΤ¤o!!ò E E#Ÿ"É"É" " !6"ã!¢!¢#O!¢#ï#ï$Æ$Æ"B •"Bè {Î÷JÎ {¤¤ÚÚ ° °V€-!Q¤!!ŒŒ÷¤"þ!Q÷÷!!´Z´1Þ‹Þ‹Þ‹‹aa!a!å#’$h$h&€&€'W#ý%ß)9(c(c)¥)¥'!'!&Ÿ)ù%È%È&3&3"Ù&3(&i&i$¼%þ$Q&Ô&Ô%È'u&Ÿ#E%]' +$†$†$†$†$†$†$ò$ò#E#E$¼$¼!b$¼#z%'$Q$Q'«%þ$Q$Q!b#$¼$¼"¾"¾%B%B#*!}#*#*"¾5ó wwhhää‘ä»h»hh»‘‘»Öƒ¬¬AîÅkAAAAA”¼i““þþþþÔ''ÔÔ''ã㺺g ®®®®„*[›AîAkkkwwM  M$wƒÖÖƒ®[11ðð𺺺gü©üü««««@@í@á4444ááááŽááLù#ÐLLLLLŸvv@íXXšíší‚/XX7ä` ¢õÌyØØØØ+ØÿRRRÿÿÿÿ4‡^^óóóóÉÉÉó  óÿRÿÿ{{RR```  ºä7ØØØØ¿¿¿*}§§›Hõõ``66°°--ë˜ÂoVë˜ÂÂdù¦¦¦ppÃò..|||ÏùùùL²²Û.¨¨¨¨,ûIIÌIIII::d·ù¦)""|¦¦dd¾qqHHé–*}*×999æææi¼Qþ({þþ((‰‰ ` ` Ëq Ë/!6!6!6õõõH!!oo E Eo!"“ æ æ æ!Q¤!Q!Q!Q!Q¤¤ { {!Q!Q!ò!ò"É"É#Ÿ!ò"É!" ` `#º#O!¢#O#O#ï#ï#ï"B!l#!l¿ { {ÎÎt {¤¤Ú- °-ÚÚÚ!Τ÷µŒ9!Q)²2&XÎÎ÷¤´111Þ1Þ1Þ´a 8 8!"»$h&&ì#’&€&€%ª%ª'Œ)9&¶&¶'ø&K'ø'ø(L(L(L&Ÿ' +%]&3&3&i&i%’%’'«%þ%þ$Q#E$ò$$$†&3' +%]&3$†%]#°%È%È"n$%’#å##$Q%þ%'%'&Ô&Ô%'%'#$¼$¼##•%B$k$k$$$×#*#•5 Mww»»‘‘‘ä»hh»»h‘‘h»Öƒ¬¬”AAAAAA”¼i““þþQQ'ÔÔÔ''''ããã㺺gg[[[××®®AAA”k$Ê M M$w0ƒƒÖ[11ðððºgºü©üüXX««@@šíŽáŽŽŽáááŽáŽŽLŸ#vLLLLŸL##ÄÄíšXXXXšíší‚/XXŠ7 `¢õÌy++ØØØ…ÿRøRRRÿÿÚ‡^^óóóóÉÉÉóFó ÿRÿÿÎÎRR```  `‘äØØØØ®®¿¿¿*}TTHõõõ``‰‰--ë˜oÂV©˜ëÂÂddd·¦S¦¦pp²ÛÛ|""ÏùS¦ùXXXXÛ.UUUU,U¨IIÌIIöö::d¦S)|ÏÏSùdqqqqHHé–*}*׿ææ9ææ¼iþQ({þþ((‰‰³" "x ˉ!6‰‰H!¢õ!¢"Éooo E Eo! æ"“"“"“!Q¤!Q!Q¤¤!Q!Q { {!Q!Q!ò!ò!!!ò E!"É `" #º `!¢#O$ü$ü • • •"B#$Æ#!l { { { { {"(¤¤Ú- °-ÚÚÚ!Î!Q¤µßŒ¤(.¹)² {!J÷´ÞÞÞ11ÞÞ‹´a 8 8!"»$h)o0ú*F)Ú&€%ª%ª%ß'Œ&¶&¶$ž&K'ø'ø&Ÿ&Ÿ(L&Ÿ' +%]&3&3($¼'?'?'«%þ$Q%þ#E$ò%È%È&3'à' +%]$†&3%]#°%È%È$%È%’#å$¼$¼$Q"¤&Ô&Ô&Ô#z%'%'#$¼$¼##•%B$k$k$$$×#*%BÊwÊ  Pýªý>‘‘>»ää»»»»ÖƒY¬”AkAAAAÖƒ¬¬í@¼Qþ''þ««þþQþþxx%%NNN¨„„„„îîkÅîAwÊÊw  ââAA1Þ[„„11ÒÒ%Ò©©ÒÒ««/Õš@ÉvLLLL##ŽááŽvvLŸ##LL#vLùXXX««‚‚/‚«XXX77  yÌyy®®––RR¥ÿ““@“FóóF±^‡‡  Éɱ^‡4ÿR{({{RR7ä ºõ¢O¢+ØCC––T}*TTT`³Üܳ³‰ÜÂoEEë˜o-€Â˜ë:çddççppppp|Ϧ¦||ÏÏÃÃpÙFF™,¨ÀêêööII:||¦¦¦¦¦ù¾::/ܳ³HõT×*T*×QQQQ¼¼i({þQ¼!““õõq ˳³ ` `õHq!6ÜÜ!6!! E E!o E!ò!Q¤"( {  !¼!¼"("(!Q¤!Q!Q!Q¤ E!òoo!‡!‡"]$ +"x"x!¢#O!6"ã#º%g"B •!l$Æ"®!!!  9 æ!¼!¼ æ9 ° ° ° ° °"]ÎÎÎÎtÇJJ9"“"“"“¤JJ÷œœr´´rrÌÌÌ"P"P%?+ó4T- )'W(-&€&¶&¶%ß%ß#Ç'!&K&K$†'à'à&3'u%È$%È'?(ì0w-)X%þ'«%þ'à'à&3$†#E&Ÿ&Ÿ$ò$'u'u%È$†&3%]#°%’%’"8#å##%’%’%’#å#$¼"8#å$¼$¼$k&"¾$k"¾&%B!è"SÊwÊóMýPPý>‘‘ä»ääh»»ƒÖY¬A”kîîAAÖƒ¬¬@“i¼Qþ''þ««þ«þ««%%xxûûûû„„11””kkAîÊww$  ââ¾îî1Þ[1111%%%ÒüüÒÒXX‚‚@@vÉŸŸLL##ŽááŽvvLù##LLÉvLŸ«XXX‚‚‚/X«XXXX77  yÌÌÌT®CCmÇRRRR“““@ óF󱇇óó±^Ú‡ÿR{(ÕÕRR7ä ºO¢õ¢®®Ø…CCCCT}*TTT`³ÜÜ܉o˜˜ë˜oÂ-€Â˜ë:ç::ppppppp|)¦¦ÏÏÏÏÃÃpÙFF™ÒUUÀêêöööö:||ùùùS¦ùd::‰6³³õHT*}T×*¤¤÷Q¼¼i{(þ «ii““õõ³³³³õH$%"㉉‰Â! E Eo˜ E!Q¤ {"(!¼!¼   { {!Q"þ!Q!Q"þ!Q E!òoo#4#4 °"]$%$%#O!¢!6"ã" #º#ï"B¿#"®!TT  9Œb!¼ æ9 ° ° °V °ÎÎÎÎ!tJJŒŒ2Œ÷÷JœœÌ´´rrrÌÌ"P%ª%?(™+ó(™)#ý&€(-&¶&¶'Œ'Œ%t%t&K&K&3&3$†&3%È'u%È'u'?/ ?Œ?Œ._'«%þ$Q$†$†$†&3$ò$ò&Ÿ$ò$$%È$"Ù$†' +%]#å#å ‹"8$¼$¼%’%’%’#å#$¼%’#å##$k"¾"¾$k"¾&%B%B$w   MÓÓPýh»ää»h»»»‘䬬¬YAA””kA”)ƒÖÖiiiiþQþþþþÔÔþþÔ'NNx%ûNNN„ׄ1ïïBBkkAAk¾îî$$wÊ  ââkAî11Þ111[[Ò%OOü©%%Õ‚Õ‚ÄÄLŸvv#v##¸ 4ŽLù#v###vvv#v‚‚XXX/‚‚/Ü‚«XÜ/ŠŠ  ¢¢õH+Ø®C––ð({ÿÿj½ææÉv  ‡Ú‡‡É‡‡±^RÿÿRRR((`º7äOO¢O…2®®CCmTTTTT§§‰‰``³³‰‰oÂooo˜E]°ÚÚ˜ë¾dd””óFpÃppFF¦¦ù¦ùùù¦™ìì™ppp,,=—êêÌÌöööIççS¦"|¦S¦S¾Ü‰``õH}×*}®×*{{Î(¼i¼i((þ «““¼¼HH ` `³ Ë!¢õ‰‰!6‰˜ EoooooÂ"( { { { æ æ æ æ { {!Q!Q¤!Q!Q¤oo!"É#4#4!‡Úõ!¢!¢õ ` `!6"ã!l$Æ##$[$[!!!¼ 99 !¼  ÚÚ-ÚÚ-÷÷J÷JJ÷÷ŒŒbµtt!tÅr1Þ´´II!y#&!y#ý%ª'Â)o*F&ì)Ú&€&€$Ó% &¶'Œ%ß&K&K&K'ø&3$†%]%]$ò&Ÿ(L(L&i.Ê=9®*.(%þ%þ%]#°%]%]%È%È#E$ò#E#E#E$ò&3$†%]%]%’%’'?'?&i$¼"8%’%’%’$¼!b%’#å#$¼#•#•#•%B!è%B$k&$×w   ó&&Pýh»‘‘hh»»»‘䬬¬YAAAAÅAîÖÖÖÖii«þþþ««ÔÔþþÔNNx%ûNNN1„„1ïïBBî”k¾îî$$wÊ  ââkAî„„1„11[[Ò%OOü©%%Õ‚‚ÕjjŸL##Évvve¸ŽŽùLv####vvv#v‚‚««X/‚/ÜÜÜX‚/77``¢¢¢õØ+®–C––{(ÿÿj½““É  ‡444ɇ‡±^RÿR¥¥¥{{``7䢢¢OØ…[[ððm§TTTTT‰‰³³³³‰‰oÂÂoÂÂë˜VÚÚE˜Â¾ddççóFpÃppFFùùLù¦¦S¦F™ì™pÃppÒ,êê=—Ìr£Iö£::¾d¦ù||¦SS¾Ü‰``õH***×®×*((((¼i¼iÕÕQþ“!íiiõõ Ë Ë ` `" ` Ë!¢õ‰‰!6‰˜ Eoo!!!o {"( { { æ æ"“9"("(!Q!Q¤!Q!Q¤!!o$v#4ÚÚ!‡#O!¢õ!¢ ` `!6"ã####"®"®$[!b 99b !¼!¼-!‡!‡Ú!‡Ú¤J÷¤JJJJŒŒbµttÇtÅrÞ‹´Zœœ!y$Ó#&#ý%ª&'Â(™(™&€&€$Ó&€&¶(c'Œ%ß$ž'ø$ž"ñ$†&3%]%]&Ÿ(L&Ÿ&Ÿ&i$¼,F,F&Ô%'$Q'«%]#°%]%]%È%È$ò&Ÿ#E#E$ò#E$†&3#°#°%’%’%’%’&i$¼"8%’#å#å$¼$¼'?%’#$¼#•#•#•%B%B%B"¾$k$×âwwÊÊžžDñ2…\¯¯\\\\\¯¯wwww$$wwƒƒY¬Ö)ÖÖLŸLŸÈuŸòòŸÈÈd + +]NN%%x%%xNû%Ò%xûNwwwÊ    Öƒƒ0Yÿÿ¬ÿ¬ÖƒÆÆ11[[ä‘‘‘ä‘‘‘vvvv#vv#í@jííííí@í@ÄŽŽ¸¸áḸŽ;ŽŽ##ùLùùÐЦùLLØ+++++ÀÀm®®T½½jjRÿ((RR(({(((RÿRRææ½±^4‡±^^^CC––ØØØØ¢¢y&ºº7Š¿e––¿¿`³³³oooEëÂoEE----²ˆˆS¦¦ù¦ùù¦¦¦ùùÛÛXÛ.²²,ÙêêÀÀa´´´‹‹´a™™ ™ÛÛ_¾¾¾çç::Ü6``‰Ü‰6‰‰66`` `“æ¼¼({{{ÕÕ(Õi!ii Ëõ!¢!¢Hõ!¢"B •"B •èè •è9999 æ æ"“ æ¤!Q!Q!Q æ æ  "( {"þ"þ÷!Q {"(#4!‡ °"] ° °"]%·$!6#º" õ!¢#O#O"®"®!× * • • • •#4!‡Ú-Âo E E!ÂÂo!!!ò˜ E˜ÂÂÂÂ-€ÂrrII‹‹ÞÞ!"»$h&&ì&ì&€&€'W%ª&€&€$Ó(-&ì&ì&'Â'W%ª&€&€&Ô%'%'%'&i&i&i&i%'#z%þ'«$¼$¼%’'?$†$†%]#°#°%]&3&3#°#°&3$†' +%]"Ù$†%’%’'?'?$Q$Q%'%'!,"Ù%]' +%È$%È%È#_#_$6$6$6$6#_!²$¡ˆwwwwžDDñ…د\\¯\\¯¯¯¯wwwwwwwwÖÖ¬ÿÖ)ÖÖLŸLŸÈuLŸòŸuu··· +ûûÒÒ%Ò%xNû%x%x¡NwwwÊ    ƒÖÖƒ¬¬ÿ¬ÿ¬Öƒððss„Þµ[‘>>ä‘>>>##vvv#vÉ@íÄ@@ííí@@íjŽŽeeŽŽee;ŽŽŽ##ùLùù##ùLùùØ+++++mÀm®½½jÿR((ÿÿ(({(Õ{RÿRRææ½±^4‡^  ±CC––~Ø++¢¢Ìy  7ä¿l¿éél`³³³³³ÂÂooEëÂÂo˜˜--ÚÚ²²²ˆˆ¦S¦S::ddù¦¦ùùùùùÛÛ²Û._†Ù——ÀÀ´aaa‹‹»ó™óFÛÛ²²¾¾d::::‰‰``‰Ü‰6666Ü`` º @“¼¼({((ÕÕÕ(¼i!! Ëõ!¢õõHõ •è •"Bèè •è æ æ æ æ æ æ$@"“"þ!Q!Q!Q æ æ #i {"("þ"þ"þ"þ"(#Õ#4!‡ °"]"]%·)$!6" `õHõ#O"®"®#„!× • • • •!‡Ú!‡Úo! E EÂÂ!"Éoo˜˜˜ëooÂÂÂÂVV-€ÂÂÂrrœöÞÞ´´ 8 8"»!$h)o*F&ì&€&€)'W(-$Ó$Ó(-&ì&ì'Â&'W%ª&€&€*.%'&Ô&Ô$¼$¼&i&i&Ô%''«%þ$¼$¼'?%’$†$†%]#°%]' +$†$†#°#°"Ù$†' +%]"Ù$†#å#å'?'?$Q$Q&Ô&Ô$†"Ù#°%]$%È%È%È% % $6$6$6$6% #_"ô wwwwññÇÇ\\¯\\\2……2……wwwwM   ¬¬ƒƒÖÖƒƒLLòòÈÈÈÈòŸŸL + +· +¨û%%%%NNNNNNûûNN M ó¸¸ââYÿ¬¬¬¬¬¬ÿ¬¬¬ððÆÆ[„„‘‘gg‘>gv#Ð#vvvÉjjÄ@@ÄÄj¸eŽŽeeŽŽŽŽŽŽLLù¦Ð#ùù##ùùØØØ+Ø+TC–½½9“(({ÕÕÕÕ(ÿR{{Rÿ{{æ9½Ú‡± ‡‡^±––––ØØØØõ¢¢¢ä‘ää–é<é¿é‰‰‰‰³‰6o˜E˜ë>˜V--ÛÛ²ÛÛ²²S¦¦Sç:::¦¦ùù¦ùÏÏX..UmÀê—´´a888åóF™™Ûˆ²””:ç¾¾Üܳ³`‰Ü‰‰66666‰““æ“Qþþþ(Õ{( @“i!"x Ëõ#O!¢!¢!¢!¢ • •!l¿¿¿!l¿!¼#i!¼  æ æ!¼  { {!Q!Q"“"“ !¼!Q"þ!Q!Q"("("(#Õ ° °$ +"]'d3ö>>IIrr1Þ1Þ!å!å$h"»&ì(™*F(™'W))))Ú$Ó'W%ª%?(™'Â'Â&€&€(-&€%þ$Q%'&Ô'?'?&i$¼&Ô&Ô&Ô&Ô$¼$¼%’%’&3&3$†&3&3&3$†&3&3$†#°#°#°#°#°#°#$¼$¼##z&Ô'«$Q#°#°$†$†$ò$ò$%È% #_$6%ã&¹% %ã$6"ô wwÊÊññ\\ \¯¯2…2………wwww M  ÿÿƒƒÖÖÖÖŸŸŸŸÈÈÈÈLŸŸL + + +]Nû%%xxNôNNNN¡û¡¡ MM ¸¸55YY¬¬ÿÿ¬¬ÿ¬¬¬ððÆÆ[„„‘‘ºº‘>g#v#vvvÐ#jjj“íÄÄqj¸eŽŽeeŽŽŽŽááLLùLÐ#ùù##ùùØØØ+Ø+T–C®®½½ææ(({Õ(((Õ¬¥!{Rÿ((“潇ڱ±‡‡^±––––ØØØØ¢Oõõ7äääé–é<e<–‰‰‰‰³Ü‰Âo˜Eoooo똘˜V€€ÛÛXÛÛS¦ù¦:ç::¦¦ùùù¦||XXX..¨¨¨UÀê—´´´a888‹FóFFˆÛ²ççd¾:牉``³³‰Ü‰‰6666ã6““æ“Q¤þþÕ((Õæ“!"Ã"x Ëõõ!¢!¢!¢!¢ • •¿!l!l¿ !¼#i!¼ æ æ!¼ "("(!Q!Q"“"“ !¼!Q¤!Q!Q { { {"( °"]"]"]"]'d:ªC 5R$#º" !¢!¢!¢#O"®"®!"®"B"B!lÚ-!‡!‡!ò!ò"É"É!! E˜ E!ò!ò E E˜oo˜˜VVë>>˜IIrr‹ 8Þ‹ 8 8"»!#’(™&ì(™'W%ª'W'W&€$Ó'W%ª%?(™&&$Ó(-&€$Ó'«%þ&Ô((ì(ì$¼&i&Ô&Ô&Ô&Ô$¼$¼#å#å"Ù"Ù"Ù$†&3&3$†"Ù$†&3#°' +%]%]#°#°#$¼&i$¼%'%'$Q$Q#°#°$†$†$ò$ò$"n!²#_"‰ Ü!²#_$6%ã"ô5ww óññññÇÇ……2…ÇÇÊww$¸   ””AA”îAAÈuuÈ44]°ŸŸ""LLŸòNNNûã㺠%%%%NNN¡wwwwwÊwwAAk¾Åk¬¬¬YðÆÆggg%%%% e¸¸v###XXXþ(‚‚‚ÄÄšíjíšùLùLŽŽ;;e¸¸¸Lù¦ùÐ#ùùe¸¸¸++Ø+mmmT®Ø…++Rÿ¬ÿ““½j@“““ÿ¥{{({RR{(RRóFFFC–mmmmCCO¢¢¢¢OÌyl–<–CõõõHÜÜ/ܘ˜E˜--ÚÚÚ---˜˜oÂppÛ.)ÏÏ|uϦS¦ùÏÏùùÏ|X²ÛÛXXÛÛêêDêêêÀÀaa´´ÌóóóóÛ.ÛÛ|Ö|)d::³`³³¢õõõËË¢¢ ³‰6iiQQÕÕ!‚(þþþþ!‚Õ Ë Ëõõõõ Ë Ë!!!"®#¿!l¤÷ {#Õ"( { {"( æ æ b æ"“ !¼¤!Q { {Î"(¤!Q °"]"]"]#Ÿ%L,×1Þ+°#O#O#O!¢!¢"x"x##"B"B!×!×#„ *ÚÚ!‡Ú!!$v"É!ò!ò!ò!ò!o!o E˜Âo!ooÂ-Ú#4$á!‡-€€Þ1ÞÞrÌ 8!å"»$h&€(-&€(-&ì&ì'Â&%?&ì&&&€&€%ª%ª&ì%?%?%?$¼$¼%’'?'«'«%'%''«%þ%'%'%þ%þ#z%'%]%]%]#°$ò$ò$ò#E#°%]' +' +$†$†#°%]%þ%þ%þ$Q&Ô#z$Q%þ$†&3"#°#E#E"n"n$¡$¡#Ë#Ë% #_"‰%ã"ô5ww MÇÇññDD222…ÇÇÇÇw$wÊ^   AAAAAAAAuÈuÈ44] +òòuuŸŸòŸNNûNº %%%%NNN¡wwwwwÊÊ$îîkÅk¬¬YðððÆÆgºººÒÒ%%¸¸¸¸#v##«««‚‚‚‚í@jíšùLùLŽŽŽŽe¸eeLù¦ùÐ#ùùe¸¸¸+…Ø+mÇm§Ø…ØØR¥Rÿ@@j@“““RR{{({RR(ÕRRóF™óC–mÇmmCCO¢OO¢OÌy¿¿éé¿¿–éõõ›HÜÜ/ܘ˜˜ë--ÚÚÚ-€€˜˜oÂppÛˆ|||ÏÏÏù¦S¦||¦¦Ï|ÛÛXX..êê——êêÀÀ´´´´Ìó M!ú!ú5ˆˆˆ|||)¾çç³`³³¢õõõËËõõ``‰6¼¼¼¼þþ((((þþ « «!‚Õ"x!¢!¢õõ Ë Ë"®"®T!!l¿¿!l!Q¤ { { {"(Î { æ æ b æ"“!¼#i¤!Q { {Î"("þ!Q$ +"]"]"]!ò E$v"É#O$ü#O#O#O#O Ë$%##"B"B!×!× *#„!‡!‡Ú!‡"Éo!"É#Ÿ E˜!ò"É!!"É#Ÿ!ò!ooÂo!Ú-!‡#4Ú€--‹Þ‹1rrÌ#& 8%?$h&&€(-(-&€(™(™'Â&%?&ì&&&€&€'W'W&ì%?%?(™($¼%’'?%þ%þ%'%'%þ'«#z#z"¤"¤#z%'' +' +' +%]$ò$ò$ò&Ÿ%]' +' +' +$†$†#°%]$Q'«%þ$Q&Ô#z$Q%þ$†&3#°%]$ò$ò$$$¡$¡%x%x&¹% $6$6"ô5ww MžžžñDDDñ2…2ØñžKñÊ$ww55 ^Aî”AAAŸŸŸŸ44] +ÈÈuuÈuÈu%%%Ò=ããxxûûN¡%%MM  ÊwÊwAîAî””Y¬ƒƒðððÆsƺºgºüü©üáá44LL#vX««XX««XÄí@ííùùÐ#e¸ ¸Žáá;LùùLÐ#ùL¸¸ŽŽ®[mm…ØØØØØ®¬ÿ((jj““½½æ9((Õ((({{RÿÿRóóó óóÉmm–ðC–ðCÌÌÌyy&¢¢¿<–¿l––ËH›ÜÜ܉Eò˜˜V----Ú€ëE˜ëppÃX²ˆÛ"Ϧ¦ùS¦¦¦¦¦¦Ï|||XÛÛ...mÀÀÀÀÀD—‹‹‹‹ö£w+26í1æ&–5ˆÛSSSSçççç³``³HHËxËˉ666i¼““þþQþþ «((Õ!‚þþõõ Ë Ë!¢õ Ë"x!×!× * * • • •èÎÎ {"(!Q!Q { { æ"“ æ æ!¼!¼ æ"“!Q!Q#Õ"( {"(!Q"þ$á#4$á#4"É"É#Ÿ#Ÿõ#O#O$ü$ü#O Ë$%## • •!×!× * *ÚÚÚÚ#Ÿ!ò!ò E!!o"É!ò!ò E E E!ò! E E˜ E!‡-ÚÚ-€-€1ÞÞÞr £ £ 8%?'Â'Â'W'W'W'W&ì&ì'Â'Â&&&&$Ó(-)%ª$h'Â%?%?'?(ì&i('«%þ%þ$Q#z&Ô$Q$Q"¤$Q%þ$Q&3&3' +' +&Ÿ#E%È'u#°%]%]#°#°%]%]%]$Q'«&Ô%'%þ$Q%þ$Q%]' +&3&3%È%È$$#Ë'%$¡$¡#_#_$6$6#Ë5ÊÊ MžžDñññžñ2…22ñžžžwwww55 ^îAAîkkAAŸŸŸŸ44]°ÈÈÈÈuÈuÈ%%%Ò=ããxxNNûN%%MM  wÊw$AîAîAAY¬ƒƒCðððÆsƺºgºOOOüáá44òL#vX«X««X«þjšíššùùÐ#e¸¸e;ŽŽŽù¦¦ù#vLù eŽŽ®mmmØ+++ØØ®¬ÿ((½½““½½æ“(((ÕÕÕ((¥RRÿóóFóFFÉ––ðCðCyyyÌÌy¢¢¿<<¿ééq›HÜÜ܉ë˜ëëV------˜˜E˜Ãpp²²ˆÛ|Ϧ¦¦¦¦¦¦¦)|ÏϲÛÛÛˆÛÛÀÀÀÀÀê—88‹‹ö£ÌÌ&+;ôG¯F5«#<ˆÛSSSS:”çç` `³õõËËËËËã666i¼““þþQþþ «((({þ"X!¢!¢"x!¢õ Ë"x!×!×!×!× • •"B • { {"( {÷!Q"("("“ æ99  9 æ!Q!Q#Õ"("(#Õ¤!Q!‡#4#4!‡"É"É!ò!ò!¢$ü&©+°&©!¢ Ë$%!l!l"B"B *#„#„#„!‡!‡!‡!‡#Ÿ!ò E!ò"É"É!!!ò!ò!ò˜ E%L"Éo E E E!ò!‡!‡ÚÚ-€-€Þ1‹‹Ì £ £#’%?'Â'Â'W'W'W'W&ì&ì'Â'Â'Â'Â'Â'Â&€&€'W#ý$h$h(™(™#å(ì$¼&i%þ$Q"¤$Q&Ô&Ô%þ%þ$Q"¤%þ$Q$†$†%]%]&Ÿ#E"n$%]' +' +%]%]' +%]%]%þ%þ%'#z"¤$Q%þ ÷#°%]$†$†$$$$#Ë#Ë$¡$¡#_#_$6$6#ËPýý&&ýýýPPýýýžžÇÇ\\…2kkk””kAAÖÖ¬¬iiiiþ«þ«Ô''ÔÔÔXþŽáŽáLŸòŸuuŸŸáá + +……\¯¯¯22ýPÓ&&Ó&ÓžžÇ®[[11ׄððÆ[[[[‘>ººOüüOÆÆÆÆ1„««Õ‚ÄÄqÄLLŸL#ÐùùŽŽŽ;e¸eXXXXÄÄmmmÀÀm–Cä7``¢¢Ìy º      ððÀÀCCCCRR(Õæ“jóóFóÚÚ‡‡j½“æ“““@ÉÉóóóóɤ÷ÎΤ÷¤÷€-VVë˜ÂÂÎÎÎÎŒ99Œ™ìp²ˆÛ¾d||¦SFóÛÛ..d::¦¦¦Àê—U,ÙÙUUU!ª5ÆBWD1* h´ÌÌÌööP£6666‰‰³³–éé–CCãã `x %OOã6  %x"© ü!‡Ú °-Ú#4!‡ ° °!‡!‡ E!ò!ò E!ò E E!ò!ò!ò!o#i!¼9 椤¤¤"x Ë"x Ë"x"x"x Ë"®"®"®"®"B"B##"®$[&)b%1%1"®"®#¿!l!l!×#„"®"®!"É!"É#Ÿ#Ÿ˜!ò { {¤¤!Q!Q"( {!‡#4"] °"É! E#Ÿ!"É!ò EVVVVÀ m !¯$2$2&'Â&ì%?&€&€)Ú(-'W'W&€&€&ì&ì&ì(™'W'W'W%ª%ª%ª&€&€%B%B%B%B$k$k#•%B%ã$6% % &N$¡$¡"ô%]%]' +%]&Ÿ$ò$$%’'?%’#å$Q%þ#z%'$ò$ò$ò&Ÿ"Ù"Ù'à$†%]%]$†$†$ò&Ÿ$ò$ò$Q"¤#z%'#z!Í!Í#z#åPPP&&PªýPýªýýžž\\Ø…kkkAAkAAƒƒ¬¬¼¼¼X«þ«'ÔÔÔÔ««á4á4òŸŸLÈÈòòáá + +……¯\\22ýPÓ&&Óy&ññÇ[[„„„1ðJsÆ[[[[‘>ººü©©üÆÆÆÆ[[1„XX‚/ÄÄÄùùŸLv#LLŽŽŽá¸  ¸XXXXqmmmÀm–C7ä``¢¢yÌ`   `º  CCmmððCCÿÿ(Õ@“½½óóFó‡‡Ú4½j“æææ9æóóóóo÷¤ÎÎ÷¤¤÷-ÚV°°°˜EÂÂVV!!ÎÎŒ99æF™pXˆÛ¾¾d¾||¦ùpÊóFÛÛ..d::¦¦ùùÀ=DU,,†UUUP%,Ž*á#ÂaaÌyÌÌööö£6666‰‰³³–C–éCCãã `x % ü¢ã6  ËxO ü!‡Ú"] °Ú!‡#4!‡Ú#4#Ÿ!ò E!ò!ò E˜ E!ò!ò!"É!¼#i æ"“!Q!Q!Q!Q Ë"x Ë"x"x"x Ë"x!!"®"®#ï •!l!l"®$[$[$[#„#„"®"®!l!l##!×#„"®"®o!"É!!ò!ò E#Ÿ"("(¤¤!Q!Q {"(!‡#4$ +"]!"É E E!"É!ò E ° °ÀÀ m"#\!¯$2'Œ)o'Â(™&ì$Ó$Ó(-&€'W'W$Ó(-(™%?&ì%?'W'W)'W%ª%ª(-$Ó%B%B%B%B$k$k%B#•%ã$6&¹&¹&N$¡"ô$¡#°#°%]#°$ò&Ÿ'u'u%’'?%’#å'«%þ%'&Ô&Ÿ&Ÿ$ò&Ÿ$†$†$†$†%]%]$†$†#E$ò&Ÿ&Ÿ$Q"¤#z%'#z!Í#z!Í#åP&€ýýýª&&&&PPÇÇ……Ø…AAAAkkAA”A¬¬))ii¼iÔ«þþþX«''þþ +]]]LŸuuÈŸŸ + +4á22¯¯………2ýPýýPý&&DñÇÇ„111„„11ÆÆÆÆ1111>‘‘>ÒÒüüððÆÆ[[11««Xšší@##ùLùL##eeᎸ e¸XXXXšííímm–Cmmmm7ä  yÌ¢õ ºää7777–––CCCCC{(((jæ“ÉóF‡‡‡4½½9æFóvvóóÎ{!!ÎÎ÷¤--°°°˜ë˜˜--÷÷ÎÎbbb™™²²¾:çSS¦¦ppFF..çç::ù¦ÏÏmÀm,ÒUÙU¯y&ýýå‹´P£ÌÌIIr6‰Ü6‰6`³llC–¿CC º66 % %ËxººããO ü % % ° °Ú!‡ °"]!‡Ú ° ° °#Ÿ E!!!"É E˜!! E!ò!¼!¼ æ"“!Q÷÷¤!¢#O#O!¢#O!¢!¢!¢!!!"®## • •!!!×!×"®$[%1%1####!×#„"®!!ò!ò$v"É!!!ò!ò"("(¤¤"( { {"("]$ +$á#4!"É!"É#Ÿ!òoo!‡!‡"] °=—""#\% %ß'Œ*F(™&'Â#&$Ó$Ó(-'W'W'W)(™&ì(™&ì'W'W'W)&€&€%ª#ý%B&ï#•!è#•#•$k$k%ã$6%ã%ã'%#Ë$¡&N"Ù$†$†&3#E$ò$%È%’%’$¼$¼#z%'&Ô&Ô&Ÿ&Ÿ&Ÿ&Ÿ%]%]$†"Ù$†$†%]' +$ò$ò$ò$ò%'#z%'%'#z!Í#z!Í#ýÓÓPPªýÓÓyyPPÇÇ222…AAAAÅkAAîAÿÿ))iii¼'ÔQþþþþQÔÔþX +] + +LŸuuuÈŸŸ + +‡4……\\……Ø…ýPýýªý&&ñžÇÇ„1111111sÆÆ1111>‘‘>%%üüðð®®„„þX«Xííí@ÐЦùùL##¸¸Ž;¸  ¸««@íííÀÀ–Cmmmm7ä  ÌyO¢ ºää7777–––C––CC{(((½æ“Év ó‡‡‡4½½æ“FóÉÉ  {ÎÎÎÎÎ÷¤--°°°VV똘˜--÷÷ÎεbFF²²d甦¦ùSpp™™ÛÛ::çç¦ùÏÏmÀÀÀ,,UÙÙUUUUÌ££88´aP£ÌÌööÌ6‰666‰³`¿¿–C¿lCC º66xxËxºº66O üxx ° °Ú!‡ °"]!‡Ú"] ° ° °#Ÿ E!!o!!ò E"É"É E!ò#i  æ"“"þ"þ!Q¤!¢#O#O!¢!¢#O!¢!¢!!!"®##"B"B!!!×!×"®$[ *#„##$Æ$Æ!×#„!T!ò!ò"É!!! E E { {¤¤Î {"(#Õ"]$ +&Ž$á$v"É!"É E!òoo#4#4"] °—"ñ%t%t&¶% %ß'Œ&ì(™'Â)o&€(-&€&€%ª%ª%ª'W(™&ì(™&ì'W'W%ª'W$Ó$Ó#ý%ª%B&ï&ï%B%B%B$k$k'%ã$6$6'%#Ë$¡&N$†&3&3$†$ò&Ÿ%È$#å#å$¼$¼#z%'(%'$ò$ò$ò$ò#°#°&3$†$†$†#°%]&Ÿ#E$ò!˜%'#z%'%'#z!Í#z!Í$¼P»h»»ýP&&&y&&………22…\\k¾kkk¬¬¬¬”A””'Ô''ÔQþþþ'ÔiiiŸŸuÈŸŸuuLŸòŸŸLÈÈDDññžDDD&&ýý&&&&ÇÇCð[[ð[[[®Oüüüüü%%Æsð„„[[««Õ‚««þ«ŽŽeeŽá4Žùùùù¸¸áŽÜ/«Xííí@mmCCØ+[®º  `ÌO¢7ä   `  é–CCmmCCRRÿ¬((Rÿ   óÉvRÿRRÕ{RRÉÉó (ÎÎΤQ¤¤ÂÂÂÂÂooVEE˜˜÷÷÷÷ß9ÛÛ²²²²Ï)|||Ϧ¦....FFùùSS¦ù¦¦,ÙÙ,,ÙÙÙmÀê—,Ù,,Iö8888ÌÌööÌÌyy`³‰‰õHõõé–l®¢Ox % ü¢OOOO¢Ox!Ò % %!ò Eo! E E!"É!‡--!‡"]%·"] ° °!‡!‡ °"]"]"]"“ æ!¼#i$@"“9Œ Ë Ë!¢õ!¢#O#O!¢ •"B"B •"®$[%1%1#„ *"®"®!l$Æ"B#ï#ï"B#ï#ï#ï#ï"B"B#Ÿ!ò!ò˜Ú!‡!‡Ú!Q¤!Q¤ {"($«$«$ +$ +$á$á$ +"]$ +"] ° ° °"]$v$v#Ÿ#Ÿ%ß'Œ*æ'Œ'!'!'!(Î'Â&&ì(™&)o'Â&&ì&ì%?%?&ì&ì&&&ì&ì&ì%?%?%?%?&ì&'Å&&%­%­%­%­&N&N$¡&N&N"ô#Ë'%%È'u'u$$%È%È$$¼&i%’%’#å#å%’%’$†$†#°%]#°%]%]%]$$%È%È"Ù!,""%'#z%þ"¤#å#å"8#å$¼P»hhhPý&&Ó&&&………22…  kk¾kk¾ÿÿ¬¬”AAA'Ô''Ô'þ«««Ô'iŸŸÈuŸù"ÈòŸŸòŸòÈÈññññžžññ&&ýýÓÓ&&ÇÇJ[[Cððð[µ[®Oü©©üüÒÒÆsð11««‚Õ«««XŽ4¸¸ŽáŽŽLLLL¸¸;Ž/‚X«@šíšmmCCØ+® `³`yÌ¢õ7ä   ºººC–ð–mmCC¥ÿ¥R{{¥RóóÉÉ óÉvÿRRRÕÕRRÉÉÉoFóÎÎÎΤQ¤¤ooÂÂÂoÂÂVVV˜˜˜˜÷÷¤¤ŒŒˆˆ__²__²|||||ÏSùÛÛÛÛFFppùù¦¦¦S¦¦,,Ù,††mD—,ÙIöÌÌå‹ååÌÌ££yyyy³`‰‰¢õ¢H–Cl®¢Ox %OOOOOOO ü % %xx E!ò!o E Eo!#4Ú!‡!‡ ° ° °"]"] °!‡!‡ °"]"]"] æ"“#i!¼"“ æ9 æ"x"x#O!¢!¢#O#O!¢"B#ï"B •!"®#„#„#„#„!$[##%œ#ï"B •"B"B#ï#ï"B"B#Ÿ!ò!ò!ò!‡ÚÚ!‡"þ!Q!Q"þ"( {"þ"þ%·%·&Ž#4'd%·'d"]"]"]$ +%·$v$v#Ÿ&ù'Œ%ß'Œ'Œ(Î(Î(Î'!'Â)o(™&ì'Â'Â$h&&ì&ì%?%?&ì&ì&&&ì&ì%?#’%?%?&ì(™'Å&&&%­%­%­%­$¡$¡$¡&N&N&N'%'%%È$%È%È$%È'u%È+p-'?#å#å#å%’"8$†$†%]' +%]#°%]%]$$%È%È"Ù$†#°#°%'#z$Q$Q#å#å#å%’$¼&ä‘&Ó&yýP&&………2\¯22AAAî””k¾)ƒƒƒkAA'''Ô«QþþÔÔ«Q“@i¼uÈòLŸŸÈÈÈÈuÈŸòŸŸññññžñÇÇ&&PPÓ&PýKñžžððJJ„„[ÆÆ11„1üüÒ%%%üüððð[[1Þ«X/Õ‚‚XX¸^44 eŽŽùL## ¸;ŽX²XXÄÄÄmmm[ ³``ÌÌÌää``7ä  –CmmÀmÿÿÎ(ÿRRRooó ÉoÉ{{{{RÿRRóóÉÉoÉÎÎ!t¤÷¤¤oÂÂoEEÂÚÚVVÂE˜÷÷ÎÎbŒŒÛÛÛˆˆˆ²²||Ï)S¦¦¦ˆÛ_²ppppÏ||Ϧ¦"",,ÙÙ,,ÙÙDDÀm¯I£yya££££ö£££6‰‰6õH¢¢l¿l¿®®T®ËxO"©O¢!Òx % % ü üOOOO!ò!ò!! E E!ò!ò!‡ÚÚÚ!‡Ú!‡Ú °#4#4"]$ +"]"]"“ æ"“9 æ"“ æ æ!¢!¢"x"x#O#O!¢#O#!l!l!l"®"®!"®%1#„!×#„"B#ï#ï#ï$Æ#$Æ$Æ$Æ$Æ$Æ$Æ"É"É"É"É"]"] °"þ"þ"(#Õ!Q¤!Q$«%·'d'd%·'d%·&Ž$á&Ž$á$á&Ž&#&#&ù(¦&¶(c)9'Œ'ø)¥'ø&K+.v+)o)o'Â&'Â(™(™&&&ì%?%?&ì%?%?&&$h&&ì(™%B&ï&ï&ï$%­%­%­%x#Ë%x'%&N$¡%x%x%È%È'u%È&Ÿ$ò%È'u*™(ì&i&i#å#å$¼$¼$†$†#°' +#°%]"Ù&3$ò#E$$"#°&3$†%'!Í#z%'#å#å$¼$¼#&>‘»»y&&ÓýP&&………2\¯……”””A””¾kÖÖÖÖkAA''Ôþþþþ'«Q“@iuÈòLòòuÈÈuÈŸòòLžžññžñÇÇÓÓýý&ÓýPžžžžC„„[sÆÆ„„„1üüÒ%xÒ©©ððð[[„1«X‚‚‚‚Xþ¸¸ááeeŽŽùLÐv¸eŽá«««ÄÀmÀÀ®®    yyÌy77``7人C–Çmmÿÿ{{Rÿ¬Ró ÉoÉ{{((Rÿ¬R  ÉÉÉÉ{{Î!÷¤¤¤oÂoEEoÂ--VVÂE˜÷÷ÎÎb99ˆˆ.ÛÛÛ_||||¦SSSˆÛ²Êp|)|Ϧ¦ÏÏÙÙ†,,,,,DDmUU¯££ÌÌaöP££ö£££‰66‰õ¢¢¢ll®®®®ËxOOõ¢ %ËË %¢¢OO ü ü E Eoo!ò!ò!ò!ò#4!‡ÚÚ!‡#4!‡Ú °!‡!‡ °"] ° ° æ"“"“9 æ"“"“"“#Oõ Ë Ë!¢!¢#O!¢#!l!l!l$[$["®!#„%1#„!×#ï"B#ï#ï#$Æ&s#$Æ$Æ$Æ$Æ"É"É"É"É"]"] °"]"þ"þ"(#Õ"þ!Q!Q!Q%·'d'd%·%·'d$á&Ž)è(;$á&Ž'Ð'Ð(¦*S*(c'Œ)9)¥'ø&K'ø1Ð;Þ6×.v)o'Â&'Â(™%?&&%?#’%?&ì&ì&ì&&&'Â%?#’%B&ï&ï&ï%­'Z%­%­%x#Ë%x'%'û&N%x%x%È%È%È$#E$ò$%È%’#å$¼$¼#å'?&i&i&3&3#°#°%]#°!,$†$ò#E$$#°%]&3$†%'%'#z%'%’%’$¼$¼#PPý&&ä‘䑪PyÓýP&&&&&Ó ^  ˆˆ5ˆ  5âMMww + + +]ÈÈÈu]] +]òŸŸL'ÔþþÔÔÔ'@““@«þþþy&PýÓÓýªhh>‘»»»hýýýý[[[ððÆÆ„×Þ1ððÆÆ[[[1Þ%%Ò%%%x%4ḠvvLŸ¸¸¸ á;Žá‚‚//X‚‚ííÄÄGíÄØ+TÀmCC®[m–ð  7ä&&¢OCC––CCCðÉv ó‡‡¸^F  M^Ú‡^^^^ó óF¬ÿÿR({{(Ú-------°°-Ú°°°9Œ¤÷Î!!ÎÎtJ÷{{²..²²ÛÛppÃóóppS¦||¾ÛÛÛÛ²²‹8´ÌÌ£öaaÌÌö£¨UUUÙÙ»£P££é–¿¿*×××ã666‰6ãã  ã 6㺺® [!1„®® [® { {¤¤!Q"þ#Õ%‚"] °"]"]"]!‡!‡99#i#i { {ÎÎb!¼#i "þ"þ!Q!Q"B"B#!l!!!×!×!!!×#„#!l#!l!×#„"®$[#ï"B%œ%œ#º%g%g%g$%$%$ü&©%L#Ÿ!ò#Ÿ#4$á ° °#i#i#i%#Õ#Õ$«$«&ù%L&#&#(¦&ù&#'Ð*-w)G)G(Ü'/(Ü(Ü))(-&€'W'W'W,^9[EEì6×)Ú&€%ª#ý(c(c&¶&¶&¶% % % &ì(™%?&ì%ª%ª$Ó$Ó% % #_&¹'û&N&N&N&N&N%x%x%x%x%x%x&i$¼%’"8#å#å$¼$¼'à$†%]#°#E$ò%È%È' +' +$†$†$"n%È$#!b$¼$¼$¼$¼%’#å&i&i"8%’&Ô%'#z%'$QPP£yyä‘>‘PPÓÓýP&&&&y& ¸¸^555â  5âMMww]] +]ÈÈÈu + + +]ŸòŸò'ÔþþÔÔÔ'“@@“þ«þþ&Óªý&&Pý»»>‘»»»hýýýý®[[[„1Þ1ððÆÆ[[[1Þ%%Ò%ÒÒÒ%4ḠvvLŸ¸¸¸eááŽáÕ/‚‚X‚‚ííÄÄííÄØ+TÀmCC®[®®m––``7Š&&¢OCCCCCC–CÉ󠇇  óóó ±±‡4^^±±ó  óÿRÿR{(({Ú---ÚÚ--°°Ú‡°Œ9bb÷¤Î!Î!ÎΤ÷Î(²_ÛÛÛppÃFFpp¦S))dÛÛÛÛ²²Þ‹aayyöI´yyP£¯¯¯¯¯ÙÙaP£££–Cll}*××6ã"=ã6‰6 ººã66ã  [®„!1®®® { {!Q!Q"þ!Q"( {"] °"] ° °!‡!‡ æ æ#i#i { { { {!¼!¼!¼!¼"þ"þ!Q!Q"B"B!l#"®"®!×!×"®"®!×#„#!l!l#!×#„!"®#ï%œ#ï'I'%g%g%g%Ò%Ò&©(V&ù%L%L&ù$á#4$ +$ +%%%&Ã%‚%‚$«$«&ù%L&#&#(¦&ù'Ð)}+Ê/$*ô'š'/(Ü'/'/'W'W(-&€%ª%ª'W)7®CiB’3}&€&€'W%ª&¶&¶&¶&¶(c&¶% % &ì%?%?&ì%ª%ª$Ó$Ó% % % % $¡&N$¡$¡&N&N(Ò%x'%'%'%'%&i$¼%’%’#å#å$¼$¼&3&3#°%]&Ÿ$ò%È%È%]%]"Ù"Ù$%È'u%È#$¼$¼$¼$¼$¼"8#å&i&i%’%’#z%'%'&Ô%þ&&&&&ä‘hh&&ªýy&PPPP&y⸠ââ5â  ^ $ww$ +]44ÈÈŸŸá4] +uÈÈÈ'Ôþþ«þþþ“@iiÔþþ&&PPýý&&»»>‘‘ä‘>ªPýý„„„„ðÆ„„ð®[„„1ÞüOüOüüüO4á  LLvɸ¸ŽŽ¸ Žá‚/««/‚‚/šííííšÄÄ®®mmCCØ……ØÀCC    OOyÌ–CmCCvvó 4‡^±É󠇇±±^^‡‡Éóó{{Õ(¥R({--°°--ÚÚ°€-ŒŒ9ŒJ÷!!÷÷¤÷{ÎÎÎÛÛ².ÛÛÛpppÃpÏÏSSd¾²²ˆÛÛÛX´´a´££ÌÌ88££££ÙÙÙ¯¯¯¯aååÌÌyyC–llTT®®ã º ``ã ãã``ãã ã„„ [ [„„®®!Q¤¤!Q!Q!QÎÎ °"]!‡ÚÚÚ °"]#i!¼"“"“!Q¤Î {#i#i"“"“"þ¤!Q!Q###ï#ï!×!×%1#„!"®!"®"B"B"B"B!"®$[$[%œ%œ&s&s$$$"ã$%'%Ò%Ò&#&#&ù!ò$á$á$á&Ž$@%í%%&X&X$«$«$v$v$v&#&ù(¦)}+**ô*ô(p%'/%‚(Ü'/(-&€(-&€%ª%ª$Ó&€.v1Ð0ú+ó&€&€%ª%ª&¶(c&¶&¶'Œ%ß%ß$2$h&$h$h#&$Ó$Ó#&% % % % &N'û'%%x&N&N%x%x$¡&N'û&N&i&i#å"8#$¼%’%’%]#°#°#°'u$&Ÿ(L$†$†"Ù"Ù$%È#E$ò#å%’$¼$¼#å#å##%’'?%’%’%'%'%'&Ô$Q&&&&&ä‘»»&&ýP&yPPPP&y5⸠ââ5â   ¸$wÊw +]44ÈÈŸŸ‡4] +uÈÈÈÔ'þþ«þþþ“@iiÔ««ÓÓýýPP&&»»‘ä‘ää‘ýýýý1111ðÆ11®ð[111Þ®©üüOüüüO4ḸLLÐ#¸¸áá¸eŽá‚Õ««‚/‚/íšííí@ÄÄ®Tmm––Ø……ØÇm––    OOÌyC–mCCmmvóF4‡^±o ó‡‡^^^‡‡ÉFF(({(Rÿ({©-‡ÚÚÚÚV€-ŒŒŒ9J÷ÎΤ¤¤÷Î{ÎÎÛÛ²Û.ÛÛpp||¦¦_ÛˆÛÛX´´´aööÌÌ88aa££££Ù††¯¯¯¯aååyÌÌC–llTT®® 㺠  ã6   ããã ×!1"®„„ [ [!Q¤¤!Q!Q!QÎÎ °"]!‡Ú!‡!‡ ° !¼ æ æ¤!Q#Õ"(!¼!¼ æ æ!Q!Q!Q!Q##"B"B#„#„%1#„"®!$["®"B"B"B"B$[&"®"®%œ%œ$Æ$Æ$$&=$$%'%Ò%Ò&#&#&ù%L$á$á&Ž(;$@%í#i#i((&X&X&#&#$v&#&ù%L)}+*)G)G&Ã&Ã%‚'/'/(Ü(-&€$Ó&€'W'W&€$Ó)o)o(™&ì$Ó$Ó%ª%ª&¶% % % %ß'Œ$2%ß'Â&&&$Ó&€$Ó#&&¹&¹(f% $¡&N'%"$¡$¡#Ë'%&N$¡&N'û&i&i%’#å$¼&i%’%’' +%]#°#°$$&Ÿ(L$†$†$†$†"n$#E$ò#å"8###å#å###å%’'?#å#z#z!Í#z$Qy»»»&&PP»»hýý&yP£&y$wÊwwwwÊ  âââ⸠4‡44]] +]44‡‡á4]]«þ«þ@@iÔÔÔ““ÃiýýýPhh»h»h»»h»»»PªÓÓðÆssÆððÆ11®ssÆÆ1„Ò%Òx%Ò©©ŸùLŸŸŸ##á;e¸ùùv#j@@ÄÄÄÄííšíÄm–CmmC–Ç[yy¢Oää7䮨…ØØ……44 ^^±±±‡4  44‡‡óFÚ‡±^“æ½ÿRÿRVV°-Ú°Voo˜˜--V9Œ¤÷ÎÎÎΤ÷µbÛÛ²²pFFppp²²²|ÏÏ|Û..ˆppp´´a££££´a‹‹‹å88ÙÙÙÙ\¯åå»aaa®®lðC  ã6 㺺ãã ºããããCCl Æ Æ Æ { {"(#Õ!Q!Q {Î °"]$ + °"]"] ° {"("("("("( { {!Q"þ"("(!Q¤!Q"þ"B"B#ï#ï$Æ#$Æ$Æ"B •#ï#ï"®$[#„!×#ï#ï#$Æ%1%1"®"®$ü&©%Ò%Ò'%g%g%g%·%·&Ž&Ž&Ž$á#4&Ž%‚'/%‚%‚%%"“%í&ù&ù'Ð&#'d%·))&Ã&Ã%í%í%‚'/(('Â&$h'Â(™&ì&)o(™%?%?&ì%?%?&'Â'!%t&K&K%t'!"ñ&K&ì%?'Â&#ý%ª&€$Ó'''%ã'%'%&N$¡% % % &¹$6$6%ã'$¼&i'?%’%’#å#å#å%]%]#°%]%È'u$ò$ò#°' +$†$†$$#E#E$Q$Q$Q"¤$Q$Q%'#z#z%'$Q"¤%’#å!b#%’y»h»»&&PP»»hPPy&ýP&Ó$wÊwwwwÊ  55â⸠á444]]] +4444á4]]«þþQ@@iÔÔÔ'““¼£ýPýhhh»»h»»h»»PP&&ðsÆÆsððl11[[ÆÆss„1µµÒ%%ÒüüLLŸLŸŸvváá ¸LLv#ÄííÄqjšší@ÄÀm–CmmmmC–m®®yyõ¢ää7ä®+ØØØØØ‡‡^±±^±±‡4^^44‡‡óFÚ‡±^“@½ÿRÿRV-Ú©o˜˜--V9æbb÷¤ÎÎ!{¤÷bbbÛÛ²²p™™ppp_²²²¾¾|ÏÏ|Û.ÛÛpÃaa´a££££a888888ÙÙÙÙ¯åå»aTTlC–`ºã6 ã  ãã ºãããã Æ ÆCC Æ Æ Æ Æ { {"( {¤¤ {Î"] °"]"]"]"] °Î {"("("("(Î"(!Q"þ"(%‚"þ!Q$«"þ"B"B%œ"B#!l###ï"B#ï#ï$[&%1#„#ï#ï$Æ#%1%1"®&&©$ü%Ò%Ò'%g%g%g%·%·(;(;&Ž(;$á$á%‚'/'/'/&Ã&Ã'š'š(¦(¦'Ð&#)'d))&Ã*%í%í'/(Ü($«&$h$h'Â(™&ì&)o(™%?&ì(™&ì&ì&$h%t'!&K&K'!%t$ž'ø&ì%?'Â&%ª'W$Ó&€$6''%ã'%'%$¡&N% % % &¹$6'%ã$6#$¼%’'?%’'?%’%’' +' +' +%]'u%È$ò!˜"%]$†$†$$$ò$ò$Q$Q%þ$Q$Q$Q#z%'%'#z$Q"¤%’#å#$¼%’£ä‘»»y&yy‘‘»»PýPPyyÓ€M MMÊóó  5ââˆ^^á‡] +áá°] +]4á44 +]þþþþ““QþþQæ“ii&Ó&&h»»»hh‘‘‘ähýýPPðððsðÆ1„Þ1ÆÆss11ÞÞÒÒ%V©©üv##ÐùLŸLá4 ¸ÐÐùLjííjí@ííÄšímÀ––mmÀÀmmð–®ØØ&ÌÌyº ä䨅+ØØØØØ‡Ú^±±^^^^ 4‡‡‡44FóÉɇ‡ ^½½ÿÿRÿÚ-VVVVVoooo°µb÷÷Î!ÎΤ¤ŒŒbbÛÛ²²p™™ppˆÛÛÛ¾¾¾¾|ÏùS².ÛóFaaa´yö£å8a8888U,Ù¯åååå88**CCCC ººã6ã㺺 !gº ã Æ Ællðð!Q¤ { { {ÎÎ {!‡!‡#4!‡Ú- °"]!Q¤!Q¤¤"þ"þ"þ"("(!Q$«"þ"þ%‚"(#ï#ï#ï#ï!l#"B#ï##"B"B$[$[&Þ%1%œ'I( $Æ&&&Þ&Þ&©&©%Ò''%g$"ã#4&Ž)))'d'd%·&X&X'/'/'š'š(p(p'Ð'Ð'Ð'Ð+•)è)è)è'š'š%í'š&X()²&X&ì%?%?&ì'Â&%?&ì&ì&ì'Â'Â)o'Â&ì%?&K&K'ø&K&K'ø'ø&K&&$h$h'W'W%ª'W#_&¹)=''û'û$¡&N$6%ã%ã$6$6%ã% % $¼#$¼&i#å%’#å%’%]%]&3$†%È%È'u"n"%]%]#°$$$ò&Ÿ%'%'%'#z%'#z#z!Í$Q"¤#z%'"8#å"8#å#ý‘ä»»&yyyää»»PýPPyyy&M   ÊwMM  â555  á‡] +áá] + +]4á44] +þþ««ii““«þþ«@“i&ÓÓÓh»»»hh‘‘ä‘»»ýýýýððððððÆsÞ1Þ1ÆÆss1111%%%%üO©üv#v#ùLLŸŽá ¸##LùÄííÄšíííjšíÀm––mmmmmm––®ØØyyyÌ º77+ØØ…ØØ……4‡^±±^ ±^ 4‡‡‡44óFÉɇ‡^±½½RRRÿ-ÚV©oÉo°°°b¤¤{Î{{¤¤ŒŒbbÛÛ²²pÃóóÊpˆ5ÛÛ¾¾Ï|¦¦².ÛóFppaaa´ÌÌ£ö8‹a8888¯¯UÙ†¯åå88 håå××ðððð   6ããã    º!gã Æll Æðð!Q¤Î"( {"( {Î!‡!‡!‡#4!‡Ú"]$ +"þ!Q!Q"þ"þ"þ!Q!Q"("("þ"þ!Q!Q#Õ#Õ#ï#ï#ï#ï&s$Æ"B#ï## • •"®&#„%1#ï%œ$Æ$Æ$[$[&Þ&Þ&©&©%Ò'%g'$"ã$á$á%·)'d%·)'d(('/'/%í%í(p(p&#&#'Ð'Ð)è(;)è)è'š$@%í'š(&X&X&X(™&ì&ì(™&$h&ì%?%?(™&&'Â&&ì%?$ž$ž&K'ø'ø&K$ž&K&&&&'W'W'W)&¹&¹%ã''û$¡&N$¡%ã'%ã$6"‰$6% % &i$¼&i(%’#å%’'?%]%]"Ù$†'u$%È$#°#°%]' +$$&Ÿ$ò#z#z%'#z%'#z&Ô%'$Q"¤#z%'%’#å%’#å&iUÀÀÀIIœIIœIIU¨,fêDˆ.ÛÛ™™pp™™pp.Ûˆˆ°V--V!!!Î{Î!ÎHHH›Hõ¿ééé<<<FFpp™FFFS¦ÏϦ¦ÏÏ©©©©€€€-VVVV€€ee<<eee<<úú}Ð.ÛXÃÃpF™™™F™pÃÃp™ìÛÛ.ÛF™ppp™FŒ9ŒßŒŒbb99ŒŒ¤¤ÎΧT}}**TTq³³ÜÜ´aa‹‹´a´´ööÌy¦¦SS::ç:çùù||+…ØØØ+Oüyyää ºóó^ ‡‡^  ^ óÉÉ` ä777ääy&yÌä‘ää óɇ4‡Ú½½½ÕÕ((ÈȰ°]]Ȱ°††ÈžñžžÈ?’’ìÔýýÅïB Þ Þ Þ1ÅÅÅÅœœïï’?!. W Wuuu!Ï#| " "!Ï#c\ !¶ t t t t!¶!¶"Œ$9!J!J!J!J!J t"!!¶!¶"Œ"Œ"!#Î#Î#Î$¤"÷#Î#Î#‹#‹%8#‹# # "I#ö$a$a$a"´#ö#ö# # # $Í#ö%£#‹#‹&&%n%n%n%n#Á%n'''k%¾&”(A&”&”'k'k'5%ˆ%ˆ'5&Ê&Ê(w(w'5%ˆ%ˆ'5*'5( ( '¡%ô&Ê&Ê'¡%ô&Ê&Ê(º' ' %`' ' &7$Š&7'ä' ' 'ä'ä&7$Š$%±'^%±&&&ò(Ÿ&$o)v'É&'É&ò(Ÿ&_&_#Û%ˆ&_$²%ˆ%ˆ%ô$G%#p$²$²%ˆ'5'ñ&D%n%n#U#U%Ù$,%£%£#ö#ö$Í$Í%£%£$T"§%*&×&×%*%*&×&l$¿#é%–'®$T%*#}"÷"÷#Î#Î$¤$¤"÷"÷$9ÀÀÀööœIIœIIU¨Ù,À— K5ÛÛÛFFÃÙ™ÃÃÛ.ÛÛVV--°VV!!!Î!ÎÎ!HHqqH››H¿<<<éééFFppì™FF¦ù"|SùÏÏpppp©©©©€€€-VVV©V--ee<<¿¸<<§§}Ð.²ppppì™Fì™FpÃÃpì™ÛÛÛ.F™ppp™FŒ99ŒŒŒŒæ99¤¤!!T**×}TTËË˳³66a´aÞ8´a´´´aööyÌùùSS:::::çùù||++ØØØ+¢OÓyää` óó^±‡‡ ^^±FóÉÉ `ä‘ääääyÌyÌ7ä77ó o‡4‡Újj½((((ÈuuÈ]]°°È]]††nñžññuÈ’?’ìÔ'ýýÅBï11 Þ1ÅÅÅÅœœ!Iï’? à Ã!.ªªu!Ï " "!Ïu "!Ï!¶ !¶"!"!"!"!#c ß"Œ"÷"÷"÷!J"÷"! t\\ ß ß#Î"!"!"!$¤"÷#Î#Î 1#‹%8#‹# # %£#ö$a!"´$a'P#ö!s!s# $Í"I#ö#‹#‹$a$a%n%n%n%n#Á%n'*u'k%¾&”$ç#:#:%¾%¾%ˆ'5'5(â&Ê&Ê(w%%ˆ'5'5(â(â(â&_&_)N'¡*$&Ê'¡%ô(w(w' %`%`' ' ' &7$Š'ä)‘' ' &7&7&7'ä$%±'^%±&&&ò(Ÿ'É&'É&&'É%E&ò&_&_#Û%ˆ&_$²#Û#Û$G"š%#p&_&_'5%ˆ$—&D%n%n#U#U$,%Ù%£%£%£%£# # #ö#ö$T"§#}%*&×%*%*&×&l$¿%–#é$T$T#}%*"÷"÷%{%{$¤$¤"÷&Q"Œ,êê=— ÍöIII  ¨¨,,ê=êDˆÛ.ÛÃppÃpÃÃV---€VVÎ{¤¤÷÷¤÷qqqqql<<é<FF™FF™F™¦¦||¦LÏ"FFpp€€ü©VVVVVV©©VVeeee<<eT§}Ð.pÃpÃÃÃpÙ™™™™FÃòX..F™ÃppFFbµbbbb99bQ¤ÎÎTT×**}*×õõ‰Ü``»aÞ‹´aa´‹‹aaö£y̦S||ççdd¾¾¦SÏÏTØ+T®®®yÓ"-&g 77Éɱ^±±^^‡ÚFFMó  7äää7äyÌy&   ºÉóF44‡‡j“æ({RRÈÈ]]†ÙñDññ°]°°ÈÈññÈÈii¼Ô'ýªÅBïZ­ZZBïÅÅïïÅì!™ªª " "KK!ÏuK ø !¶ ß2"! t!J!J#c !J"÷"!Ç"!#Î"!"!\ ß ß#Î"!"! t$¤"÷#Î#Î!$a&å#‹#ö"I$Í$Í#‹!Þ#‹#‹%£#ö#ö#ö$Í$Í# $Í'»$a$a&'%n%n#Á$—$—%n(È'k%¾%¾%¾&”&”%¾$$²&_&_( %ô)N(w(w%ˆ%ˆ'5%ˆ'5'5'5'5*$&Ê(w(w'¡$G$G%ô'ä&7%`' &7&7' ' ' %`'ä&7&7&7&7'ä&‡$Ú'^'^&ò&ò'É&'É'É(Ÿ%E$o'É'É'É%ˆ%ˆ&_( ( &_#Û%ˆ$G$G%&Ê#Û#Û%ˆ%ˆ%n#Á&D$—%%%&¯$Í&z('# $Í# #ö%£&×%*&&$T$T&&#é#é$¿$¿&&%*%*$¤$¤"÷$¤%{"!"÷&Q"Œ,êê——s IöööÍͨ¨—êêêÛ..ÛppÃÃÃpppV--Ú-VVÎ{÷÷÷÷÷¤qËq¿¿é<<<é™™FóF™F™SSÏÏùù|ÏFFÃÀکVVV©©©V©VVVVVeeeeeeeMúÐ}.XXÃppÃpppÙ™™óF™pp..™ìÃÃp™™µbbbbbŒŒbQ¤!{§§}*}**}õõ‰Ü³³aa8‹a´´a‹‹aaö£Ìù¦||::d¾¦ùÏÏ®Ø+®®[yyy&  ääÉÉÉÉ^ ^^^Ú‡FFóó  ä7äää7Ìy&  º Éó á‡‡‡½j“æÕ(RRÈÈ]]Ù†ñžñ—°]]]ÈÈññuuii¼¼Ô'ýªÅBï Z­ œïïï rÅì?ªª " "KK " "K ø!¶ 2… t"!!J!J!¶!¶!¶!¶!J t t t"!"!"! !¶"Œ"Œ"! t#Î"!"÷!J"!"!!$a#‹#‹%£#ö$Í$Í%8#‹#‹#‹%£#ö#ö#ö$Í$Í$Í&z&&&'»%n'%n#Á$—$—%n%n)'k%¾%¾&”&”%¾$$²&_&_+f'¡'¡(w(w'5'5(â'5%ˆ%ˆ'5*+Ñ(w&Ê&Ê'¡'¡'¡%ô'ä&7%`' &7)‘' ' ' %`'ä&7&7&7&7'ä(4&‡%±%±%E%E&$o&&&ò&ò&&'É'É%ˆ%ˆ&_( ( &_#Û%ˆ%ô%ô#p%#Û#Û'5'5%n#Á&D$—%%&¯(\$Í# &z$Í&z$Í"I#ö#}%*$T$T$T$T&&%–%–##$T$T#}#}"÷"÷$¤"÷%{"!$¤$¤$9U,UUss  IIIöÒ,UU,XX.pppp™™ì™pp˜˜E˜€€Œ9cc¶ccc³³6‰‰‰ÜÜ<éé<}}úT.ÛÛÛp™F:”dÏÏÏÏÛ.²Âü©©©ë˜ëëVVVVÐÐÐ}ÐÐT§ÐÐ}}<<<épÃ?ìÛ.™FÃÃpÃÃpÃÃÃp²Û.™™ììÛÛJJ!!9999bb99µŒæéé¿}*T§``6‰qqHõP£ÌÌyÌö£´8‹8‹a´Ï||)dd|Ï||::d®®––CCÌÌOO ºº   ^±FóÉÉÉoɇ‡±±yÌ¢O¢¢yyõOü¢7äº óóÉÉóóv“““9½½““žñÈÈÈÈDDÈȰ]3ÙÈÈÈ'''ÔªPªªÅBœ rÅïB„1ZZ Wª?ìì? ø ø "u " " ø"¥!¶ \ ß2 t t"!"!"!"!#Î"!!J"÷"!#Î$9"Œ #c ß ß#c!¶ ß ß"Œ$9 1#‹!Þ%8# !s$Í# "´"´!Þ#‹"´&&$a$a$a&&$a$a#‹&å%Ù%Ù%Ù$,%&¯&¯%'Ö'Ö&)$|'(­&)$|$G%ô&Ê&Ê(w&Ê&Ê&Ê%ô%ô(w&Ê&Ê&Ê)N01¯)N&Ê&Ê&_&_'5%ˆ&¢(O(O&¢&7'ä$Š&7'x%Ë$õ&¢'x%Ë&¢&¢'É&%E%E$$'^%±&‡$Ú%±%±&ò&ò&ò&ò'5'5%ˆ%ˆ&_&_#Û%ˆ'¡'¡%ô$G%ô%ô%&Ê&¯%%Ù%Ù%Ù%Ù%&¯&å%8&å%8&$a#‹%8#}%*$T$T$T$T#}%*%–%–#$¿#é#é$¿$¿"÷$¤&Q&Q%{"!"÷"÷#cU,¨¨    IIœI,,UU,Û.ppÃÙ™™FÃppëEE˜VV€€ßŒccc¶cc³³/ÜÜÜ/‰<é–é}}§§.ÛÛÛp™F::d||||ˆÛ²Â©V©©>ëëëVV}}Ð}}}ú§ÐÐÐÐ<<<p™FXX.ì™pppÃÃppppÃX.ÛFì™™ÛÛJJÎÎŒŒ99µµ99ŒŒ<<¿}*T³³6‰qqHõ£öyyÌ£öaaå88‹a´|ÏÏ|d¾)|||::d®®CCððyy¢¢`  º^^^ ó vÉv44^^yÌ¢OOOyyOOOõ7ä ºóóF vææææ½½““ñDÈÈññÈÈÈÈu]°††ÈuÈÈ'''ÔýýªªÅBœÅBï Þ1ZZ Wª?ìì!™ ø ø!ÏÈuu"¥ ø#c!¶\ ß"Œ ÇÇÇ"!"!"!#Î"!"÷$¤ t"!$9"Œ!¶!¶"Œ"Œ#c!¶"Œ"Œ"Œ$9#‹#‹#‹#‹# !s# !s!$a!Þ#‹"´&&$a&"´&&$a$a&å&å%Ù%Ù$,%Ù&¯%(\&¯&)&)&)'Ö*Z(­'Ö&)%ô'¡(w(w(w&Ê(w%'¡'¡&Ê(w&Ê&Ê'¡.U.U)N&Ê&Ê&_&_'5%ˆ$õ&¢&¢$õ&7$Š'ä&7'x%Ë$õ&¢$%Ë&¢&¢'É&&ò&ò%±%±%±$$Ú&‡%±%±&ò&ò%E%E%ˆ%ˆ%ˆ%ˆ&_&_'5%ˆ%ô%ô"š$G%ô%ô%&Ê%#U%Ù%Ù%Ù%Ù%#U%8&å&å%8&$a#‹%8%*#}$T$T"§"§#}%*#é#é$¿&l%–%–$¿$¿$¤&Q$¤$¤%{%{&Q"÷#cUUUÒII  öös ,,,Ò¨U,,XÙ™™™™™™F™™ooÂo-€V©ŒßccŒŒ¶c³³‚/‰/`–él¿TTT§ÛÛÛÛF™™óçùS¦¦²²Xë뀀€€ÂÂVV--ÐÐÐ}}}úú§ú##ee<épppp...Ù™FFFFppF™™™F™XÎÎ÷÷ŒŒŒ9bµb¼µbéé¿l*}§T܉‰‰ËõõööyÌöööö‹88‹aaa|Ϧ¦ddççSSSS¾çç[®––¢¢ÌÌ77ää4Ú^^ó óóÉÉÉÚÚ‡‡yÌÌyyyyyOOO¢7Šº ó ó Fóvv½½½j“æ“@DDžñÈÈññžññžžž] +]]žKuuýýªýÔÔýªï•BïBïÅ r rÅ Z1 ÞÔÔ Ãu "!Ï " øž ø ø"Œ ß ß ß!¶!¶ÇÇ t"!!J!J"! t"!"!!J!J2"Œ"Œ"Œ"Œ"Œ$9"Œ$9"Œ"Œ"Œ$a"´#‹!Þ# # #ö"I$a&$a$a$a$a%8%8&$a&$a#‹%8#‹&å%%%Ù'†'†'†&¯%'Ö&)&)'Ö*Z'&)'Ö%ô%ô)N)N'¡'¡&Ê&Ê(w(w%(w*$(w(w&Ê(w(w'¡%ô( ( (â'5)%)%(O&¢%`%`&7&7%Ë$(O(O&¢&¢'x%Ë&ò&ò&&&‡(4&‡&‡(4$Ú$Ú$Ú'É&%E&ò&_$²$²$²'5%ˆ&_&_'¡%ô%ô%ô%ô$G%ô%ô%%%Ù%Ù%%&¯&¯&å%8#‹%8%8%8#‹%8$T"§#}#}#}!Ð#}%*$¿$¿$¿#%–%–##%{#Î"!#Î#Î%{$¤"÷!¶UUU,öössII ÍÙ,,¨U,,²X²Ãp™™™™ìFF™™™ooÂoÚ-V©ßŒ99¶c³³‰ÜÜܳ³é<¿§§ú§..ÛÛ™FFF::¦¦Sù²²²>>€€€€Â©ڀÐÐ#Ð#}úúú§ÐÐ<ÃÃÃÃ.Û..ÃFìììììp™ì²X™™™FX!!÷÷ß99Œµbbµbbéé¿×*§T‰ÜÜ6ËõõööÌyööI£å88‹aaa|ÏSSddç禦¦¦d::®mméC¢¢ÌÌŠŠä䇇 ±óF  ÉÉo--‡‡yÌy&yyyy¢¢¢Oä7` ó ó óFÉɽ½½j@“@“ÈÈñ—ñžÈÈññžññžKñ] + + +žñÈÈýýýªÔÔýªBBïœÅÅœïÅ rÅ rZ 1 ÞÔÔ Ã "uÈu ø ø ø ø"Œ ß!¶!¶ ß ß!¶!¶ t t"! t"! t"!"!!J!J ß ß"Œ"Œ ß$9$9"Œ"Œ ß ß$9$a"´!Þ#‹# # "I œ"´$a$a$a&&#‹#‹$a&&$a#‹%8&å&å&¯&¯'†%Ù%Ù%Ù&¯%'Ö&)$|&)''&)'Ö'¡'¡'¡'¡'¡'¡&Ê&Ê&Ê&Ê&Ê-~42/+*$(w&Ê&Ê'¡%ô( ( (â'5'x'x(O)ü,(º&7&7%Ë'x(O(O&¢&¢'x"q%E(Ÿ'É$o&‡(4&‡&‡(4$Ú$Ú$Ú&$o(Ÿ&ò$²#$²( %ˆ#Û&_&_'¡%ô%ô%ô%ô'¡%ô%ô%%%Ù%Ù&¯&¯(\%&å%8%8#‹%8%8%8#‹"§$T%*!Ð#}%*%*#}##$¿##é#é##%{#Î#Î%{#Î%{$¤"÷#c´öIIIÍÍII‹‹‹‹Þ‹‹8  ööÛÛX«pppppp²²²VV°V°°°³³³³ÜÜÐ}TT§§}}ÛÛ²™FpÃFFFFÛÛ²²||S¦!tJJÇtt!€€Ú-V--eeeeúú#Л›Äij³XXX::dd|Ï""ddd¦¦|"Û.ppFF˜ëë˜V-Ú‡Úoo˜˜q›HHõõõ¿lé<T§§‹‹aaööö£ÙÙ,,,FFÊ_².ÛF™F™ÃÙìÌÌy&yyõO  7ŠOOO¢‡‡‡4±±^^^^±óóóó®®ØØØØ…ØO¢õ¢äää7óóɇ‡‡4jjæ“@“““Èn†3]]]]]]]°3††3 +]à3à3??iÔÔýý­ZZ­×1Z­ff¹¹¹¹ff!.!.Ô Wª· +·!d " "u ""÷!J t"! t#Î"!"! ª"W#-Ó ª ª ªý!¶!¶!¶!¶#c!¶ ß ß#˜%E"Â"Â!!#˜%E#U#U"$,"ê"ê#Á"$Í$Í%£#ö$Í$Í&z$Í$—&D&D&D%&¯'†'†%n%n%n'%Ù'†&¯&¯'5%ˆ#Û%ˆ%&Ê%ô%ô'''Ö'Ö%¾%¾'k'k&_&_( -5ß0Ø)N'¡'¡'¡(w&Ê%ˆ'5( ( )ü&¢)%1†6"*g' %`&'®#}%*'®&&$T'þ)«&Q&Q'((Õ&Q&Q'^%±%±$%E%E'É'É#¦%S'Ö)ƒ%S#¦&)&)&_&_&_$²%ˆ%ˆ'5%ˆ&z$Í'P'P$Í$Í$Í$Í'»)h&$a"´$a$a&%`%`%`#³"q$#H#H!›!›%Ë$$Š"Ý"#³"÷"÷#Î%{&½%%%&´öIII  II‹‹‹‹Þ‹Þ‹  II..Xpppppp²²XVVV°VVV³³³ ³³‰‰*}TT§§}}ÛÛ²™Fp™™™óÛÛ²²||S¦Î!JJÇtt!€€Ú-V--ee§§Ð}HîÄÄX«XX::ddÏ|ÏÏd·L¦ÏÏÛ.pp™™˜ëë˜VVV€--Úoo˜˜q›HHõõõl–éT§§Þ8öö£öÙÙÙUU,FFʲۈóF óppóFÌ&yÌyyOOg ä7OOO¢‡‡‡4±±^^^^^±óóF [[ØØØØØ+¢Oõ¢77ä7™óÉÚ4‡4½½æ“í@æ@u3†°°]]°°]°3†Ù† +]à3 àììi¼ÔÔýý­ZZ­×1Z­ff  ¹¹ff!.!.!. Wª +· +·u!Ï!Ï "!J"÷ t"!"!"! t t ª"W$Ú!€ý"W"W ª!¶!¶!¶!¶!¶ ß ß#˜%E"Â"Â"Â"Â%E#˜%%$,"$—$—%n#Á&z# #ö%£$Í$Í$Í# $—&D'ñ$—#U%%Ù%Ù''%n'%Ù'†&¯&¯(â'5'5(â&Ê%%ô%ô'''Ö'Ö%¾%¾'k'k( ( &_( -~(w$G%ô)N%ô&Ê%%ˆ'5( $²&¢&¢'x,-Á(º%`' $T&%*&×'®&$T"§'þ)«'þ'þ%{'(&Q&Q'^%±%±$#˜&ò$o$o%S#¦&)'Ö'%S&)&)&_&_&_$²%ˆ%ˆ'5%ˆ&z$Í'P'P$Í!s$Í$Í+,Â'»&&'»$a"´#³#³%`#³$"q$õ$õ$õ$õ%Ë$$Š"Ý%`' $¤$¤#Î%{&½%%%$o  öö    ‹‹Þ‹´aöIII.ˆÛÛóó™™™™ÃpÛÛ²€--Ú-ÚVVVV€-ÚÚÜÜ܉܉³³§T}}}}ÛÛp™Fó™ÛÛÛˆS¦Ï|Î!JJJJÓ€VV-Ú--ee–éÐÐÐ}qqqÄ‚‚Ü/X«X...:çddÏÏ"Ïç·d"Ï"ÏÛ.ÛpÃÃÃÂÂëëÚ-€--Ú--˜˜˜˜HõHHé–¿¿×**}´a8‹yÌÌÌÙ,UʲۈóFFF™FÊpõ¢yyOOOO‘‘  ¢¢O¢^^^‡4^^4‡‡4óóÉÉØØ…Ø®Ø+¢OÌ  77óóó ‡4‡‡½½““““½jñDnÈ + +]]]]†3]] + +†† + + +] 3¼i’’'ÔPýׄ„„Z ZZf¹6¹ f¹Ô W Wª W à K$R "!Ï"!"!!J t"!!JÓ!€ ª ªÓ#-!€!€"Œ ß ß ß"Œ ß"Œ"Œ#˜&ò"Â!"Â$o$o$o$,$,%!¨%n%n$—&D#ö#ö$Í# %£#ö$Í&z#Á%n'#Á!¨%%Ù$,%n'$—'ñ%%$,%Ù( &_( &_%&Ê%ô%ô(­(­%S%S$'k'k'k( ( '5%ˆ)N'¡%%'¡'¡&Ê&Ê( &_'5#Û(O&¢&¢(O' ' &7&7&&&×&×&&%*%*(Õ'(&Q'þ'(%{#Î%{&‡&‡&‡(4&&$o'É'Ö&)%S'&)&)'''5'5'5'5'5%ˆ&_&_&z&z&z('&z$Í$Í# '»'»&å&å+3v,Â&#³%`$Š$Š$$$"q$$%Ë$$Š$Š$Š&7&Q$¤"!#Î%æ$9#c#c%E  öö    aa‹‹‹Þ´aöIööÛÛÛÛ™™™™™™pÃ..X-€-Ú-Ú°°VV€---ÜÜ܉‰ÜúúT}}**..ppp™FFFÛÛÛˆ¦ùÏ|Î!÷÷÷÷JJ-€VV€---eeé<ÐÐ#ÐqqÄqÜÜ/ÜX««XÛÛÛ.:·"""Ï::dÏ""ÏÛ.Ãpppo˜˜Ú--€-ÚÚÚ˜˜ëëHõqqqq››é–*}}*´a8åyÌÌÌÙ,Up²ÛˆóFFF™FÃõ¢&&OOOOää  ¢¢¢O^^^^‡4^^4‡4‡óóØØ+ØT+Ø¢OyÌ  ääóóó 4‡‡‡½½““““j½ñDÈÈ]]]] + +3†]] +!dàà]] +] iì’'ÔPý„11×Z   f¹f¹!fÔÔ!.ªª W" à žK!Ï#| t t!J t"!!J#-!€ ª ª!€!€!€!€ ß22"Œ$92"Œ"Œ#˜#˜"Â$o&$o"Â"Â""%%#Á#Á"ê$—#ö#ö$Í# #ö%£$Í# #Á%n%n%n%%$,"'%n&D&D%(\'†%Ù$²&_( &_%&Ê%ô%ô%S%S''%¾%¾'k'k( ( '5%ˆ%ô'¡&Ê&Ê'¡'¡(w%&_( '5'5(O&¢&¢$õ' ' &7&7&&&×&×&&%*%*%{'('þ&Q'(%{'(%{(4$Ú&‡$Ú&&$o$o&)$|%S'&)&)''(â%ˆ'5#Û#Û%ˆ&_&_&z&z$Í&z$Í# # $Í&&%8%8+6Ð0&%`' "Ý"Ý$$$"q%Ë%Ë%Ë$"Ý&7&7$Š$¤"÷#Î%{$9%æ%%%E‹Iö ÍIöÍ ‹Þ‹‹ssII´´‹‹...Û..Û..™ì™™oo˜ë-Ú--°°Ú-VV--‰/³q››ÐÐÐ}T§TˆÛ.ÛÛ..ÛÛ.ÛÛˆÛ²²))SSµbbŒ9ŒßV©ÂÂúúTT<<<Ü/H›qÃÃ.Û.Ûù¦|"::::·dddddpÃpÃpppÃ-Úoo˜ë˜˜E˜V©V‰‰`³³³³`¿¿¿l¿¿––ÌyÌ8‹aa,,¯,Ùpp™™²Ûˆ ²²²_¢O&y&y¢¢yÌ¢¢  ººvÉÉ^^4‡^^‡‡ÉÉóóC–+Ø®®7ä``¢¢yy^^ááÉÉ({(ÕÿR(ÕÙÙ†àÈ]] +]Èžž + +à3žžu "??¼PýýýZ1„œïÅÅÑÑÑÑi ê W W W ø ø " "!Ï!Ï"¥"¥ ß ß!¶!¶ ß ß"W ªÓ!€ ª"W"W ª!J!J"!"! t t"÷"÷#-#-$"W$$!€#-$—$—#Á#Á"$,#U%#ö"I"I#ö$a&$a$a%n%n"ê&D&¯%%Ù%Ù&D"ê&D&D$—&D&D&D%ô%ô&Ê&Ê(w&Ê%ô%ô%S''Ö'Ö'k%¾$%¾$G'¡(w&Ê( ( ( ( '¡'¡%ô%ô&_&_&_&_%`%`&7$Š$õ$õ$õ(O$T&&×%*%*(„&&%æ%æ%&½&Q$¤&Q&Q%E#˜#˜%E%E&ò&ò%E%S%S''&”&”'k%¾%ˆ#Û&_$²$²&_'5'5&å&å%8&å%£%£#ö"I'P%£#ö%£'P*ª'P%£$Š&7$Š$Š$Š$Š$Š$Š%`%`&7&7"q$$õ$õ%{'(%{#Î$9$9$9$9%E‹Iö sIö s‹Þ‹‹ÍsIIaa‹‹Û.Û.Û.Ûۙ왙oo˜ë-ÚÚ€VV-ÚVV--ÜܳqHHÐ*}*T§§TÛˆÛ.Ûˆ.ÛˆÛ..ˆÛ||¦¦µµµŒßŒßVVV§§§<ééé‰ÜH›qÃÃp.Û.ù¦ÏÏçç::dddddÃpÃppppÃ-ÚooE˜EEE˜°V‰‰`³³³³¿¿¿ééÌÌ8‹aa,,U,ÙFF²ˆÛ²²_²²_¢O&yyÌ¢¢yÌOO    vÉÉ  4‡^^‡‡óóðC…Ø®®Š7  OõÌ̱±‡‡ÉÉÉÉÕ(Õ(RÿÕ‚†††àÈuÈÈ]]]°Èññ]]3àžžÈu??¼Pýýý­­„1œïÅÅããÑÑÑÑi Ã" Wý W ø ø " " "#| ø ø ß ß!¶!¶ ß ß"W ª$Ú#-"W ª ª"W"÷ t t t t"÷"÷#-#-$%±%±%±#-!€$—$—"%n$,"!¨#U#ö%£%£#ö&$a$a'»%n%n&D&D%&¯'†'†'ñ$—'ñ'ñ&D$—&D&D%ô%ô&Ê&Ê(w&Ê'¡'¡'(­'Ö'Ö'k%¾'k%¾%ô%ô(w&Ê&_&_( ( )N%ô'¡'¡&_&_&_&_#³#³&7$Š$õ$õ&¢&¢'®&%*&×&×&×'®$T%æ)@&½%&Q$¤$¤'þ&ò%E%E&ò&ò%E&ò%E%S(­'#¦#:#:%¾'k'5(â( &_&_$²%ˆ%ˆ%8%8&å%8%£%£#ö%£%£'P'P%£#ö#ö#ö%£&7$Š$Š$Š&7&7$Š$Š%`%`&7&7%Ë$$õ$õ%{'(%{#Î$9$9$9$9%E‹IöœI ÍIöa´´´ sIIaaa´..ÛÛÛ²XÛììÃÃooëë°-€©V€€VVÜܳHH§T§TTT§§.Û²ÛÛ²²²²Ï|||µµµµbbµbVV€€ë˜˜˜§§ÐÐee//YH››H™ì™F...ÛùùÏÏddd:d:d™™™™ÃpÃpVÚ-˜˜E˜ooEE‡-³³‰Ü³³³³¿¿¿é<é–ÌÌöö,,,,UUFFp²²²Ûˆˆˆ²²ˆˆ¢OO¢yy¢¢O¢OO  ääÉó󇇇‡‡444óóvÉmm…Ø[[  ääyyO¢‡‡4‡ óóóÕ(RR(Õÿÿ°°Ù†ÈÈÈ]]]]ññññ +]] +žžñž??i¼ýý'Ô„„„„ïBïïf¹ÑÑNûì?!™!™!.ª W!Ï " " " ø"¥ ø ø ß2 ß ß ß ß!¶!¶"W ª"W"W"W ª ª"W"!"!!J"÷"÷"÷"÷"÷#-#-$%±$Ú$Ú#-!€#Á#Á#Á#Á#U%$,"#ö#ö$Í$Í%8#‹#‹&å&D$—&D&D#U%%Ù%Ù%n%n''%n%n'(È'¡%ô&Ê&Ê'¡'¡'¡'¡'Ö'Ö'Ö)ƒ&”$ç'k%¾%ô%ô'¡%ô&_&_)¹( &Ê&Ê&Ê%( &_$²$²%`%`' %`%Ë%Ë%Ë%Ë&×&×&&&&&×%*&½*(j&½%{%{'þ&Q&ò(Ÿ&ò%E&'É&&&)'Ö'Ö$|$$$ç&”'5'5( &_&_$²%ˆ'5$a"´&å&å&z&z%£#ö# # # # &z$Í#ö%£&7$Š%`%`%`%`'ä&7'ä$Š%`' $õ&¢$õ$õ$¤$¤%{#Î#c%#c!¶"‹IöIœs öI´a´´Í öö´´´a..ÛÛÛÛ_²²..™™ppÂÂëëV€ÓVÚÚVVÜ‚³`qqõõT§TTTTT...Û²ÛÛ²²²²²²Ï|||µµbbµVV€€>ëëë§§ÐиeeÜÜYH›î›F™F™...Û¦¦ÏÏd·ç:d:d™™™™pÃpV-€˜˜˜Eò˜VVÚÚ³³‰Ü³³³³l¿l–éé–ÌÌööaa´,,¯U,,¯Uóóp_²Ûˆˆˆ²²ˆˆOüO¢yy¢¢O¢OO  ääÉóó‡‡444‡44óóvÉÇm…Ø®®  77yyO¢444‡ óóóÕ(ÿÿ({RR]]†ÙÈÈÈ]]]]DDññ +]°]KKKž’’¼iPP'Ô„„„„œïïï!f!~!~û ¨ì?ììÔ" W "!Ï " "K ø ø ø ß22"Œ ß ß!¶!¶"W ª"W"W"W ª"W ª"!"!!J"÷"÷"÷!J!J#-#-"W$$Ú!€$Ú#-"%n%n%n%#U$,%Ù%£%£$Í$Í%8#‹!Þ%8$—"ê&D&D%&¯%Ù%Ù''%n%n%n%n'(È%ô$G&Ê&Ê%ô%ô'¡'¡&)&)&)'Ö&”$ç%¾'k'¡'¡'¡%ô&_&_$²&_%%&Ê(w( &_&_&_' ' ' (º%Ë%Ë%Ë%Ë&×&×'®'®&"§%*&×&½-q*(j'('('þ&Q%E&ò*L+ù,Ð+#'É$o$|&)&)&)$$$ç&”%ˆ%ˆ$²&_&_$²%ˆ'5&$a#‹&å&z&z%£#ö$Í$Í# # &z$Í%£#ö"Ý$Š%`%`#³#³$Š"Ý$Š$Š%`' $õ&¢$õ$õ$¤$¤%{#Î%&½#c%$oXˆÛ..Þ‹´´Í IIêêê——=fÀ.XXpÙ™|Ï""¦¦¦¦éé<é§§§T–éVV-‡ÂÂV-ÚVêê—êUUUU£öÍ öI  U,,<e¸vÐ}ÐqÄîHÂ>>ë˜ÂÂÂVVV=êê=IIII‹Þ1‹ç:d:d·Ãp™ì.ˆ..Üܳ³³66‰Ü‰‰‰6¿e<–ËqHHÜÜ܉——mÀmmê—yÌÌaa8‹çç||¦¦SSS¦ÏϦ¦óó FÉÉÉ4444vÉÉv4444ó óóÉɱ^‡‡É ó^± ^jj½j((ÿÿ^^‡4á4^ Éóóá444ÔÔýP’’¼¼]] + +ÈÈžK??’?!.Ôii’?’å¼i’’?ìÔÔìììì1 Þ"‹ Þ Þ Þ   Þ Þ1 Þ!´!´ Þ"‹"÷!J!J!¶ "Œ ß!€Ó!€!€!€!€ÓÓ "<#¸M"§%*!Ð!Ð#}%*%*#}#}#}%*$²$²#Û#Û%ˆ%ˆ'5%ˆ$$$$%S%S#¦%S%ˆ%ˆ$²$²%ô%ô&Ê%'5'5%ˆ#Û%ˆ'5(â%ˆ%ˆ#Û'5'5$²&_( &_&Ê&Ê%ô%ô&_$²$²&_&¯(\&¯%&D&D&D&D&å&å&'»'P%£$Í(''^%±-;.è(Ÿ&ò'É'É&Q&Q&Q'þ&½!¶#c(j)á.è,e) '^'^&‡&‡&)v.}8‹:851,Ð$o%&Ê%&Ê$²&_%ˆ%ˆ$G$G$G$G%%$G%ô'»&"´$a'P'P'P'P$Í# "I#ö%£#ö%£#ö"§&&×&×"§ ú"§ "§&#}%*%*&×$T$T' ' &7'ä'x%Ë$%Ë%˲.ÛÛÛ‹Þ´´Í ööêêê=êêÀÀÛ.XXpÙ™Ï"""¦¦ùSéé<é¿¿§§T§é<ÚÚÂoooVÚ-V©êD—êUUUUöIÍ £ö  UâeÐÐ}ÐÄq››³Yhëë˜ëÂÂÂo©VVVê—ê=IIII‹ÞÞÞ:d:·dpÃF™..ÛÛ³³‰‰³³`³‰‰6‰66܉¿¿¿¿ééqqõõ‰‰‰Ü——mÀÀÀ—DÌÌaaå8””||SSSSS¦Ï)SSóó  ÉÉɇ‡44Éɇ‡44ó   vv±^Ú4É ó^± ^½½½j((ÿÿ^^‡4á4±^Éóó‡444ÔÔýPå?ii + +]]ÈÈžK’’’?ÔÔ'ii?ì?’¼i’’?’ÔÔ''ii’ììì„1 Þ1„ Þ#a#a Þ Þ"‹ Þ!´!´1 Þ!J!J!¶ ß2!€#-#-#-#-Ó!€!€#é"ëÂÂÂÂÂ>˜ü©VVÀ====ööII‹Þ::::dpÃpp³`‰‰Ü‰³³³6‰``‰‰¿¿¿ééHHHõ³``³ê—D—mÀÀmÌÌÌ´a88çççç))|||))|Ï|||ÉÉÉÉ  É‡4 ^  ±^^±É óÉÉ ó^^44Éóó‡4^^““½½RR(Õ^^‡4 ^44ÉÉÉv44 ^£PPPå’i33]]žžÈu????ªªýPi¼’?’ìii¼¼?’ýª’’???ì Ã Þ ÞZ  !´"‹ Þ #a Þ"‹   #a t t!J"÷ ß ß!¶!¶$$$Ú!€!€Ó#-!€"< ¸#!Ð!Ð#}#}$T"§$T$T$T"§$T$T%ˆ%ˆ##&_&_#&_$$%¾$%S!ù$|$|#Û#Û$²&_&Ê&Ê%ô%ô&_&_%ˆ#Û( &_%ˆ'5&_&_$²( $²$²&_$²&Ê&Ê&Ê(w'5'5%ˆ%ˆ%Ù%Ù&¯&¯'%n$—&D'»&(’(’'P"I&z('%±) 6s>Ô1×&#˜%E(Õ%{'þ&Q(j(j/<†CD±AW7I-;&‡(4(4'É+#;FÉFÉCo/S&ò&Ê&Ê&Ê&Ê&_&_( &_%ô%ô%%&Ê%$G%ô'»$a"´$a('('#ö%£%£%£&z&z&z# %£%£&$T&$T$T$T#}%*&$T%*&×%*%*&$T"%`%`' $%Ë%Ë$$..ÛÛÛ‹8‹‹IIööD—ÀÀÀêê²ÛÛÃÃF™ÏÏù¦ùù"Ïe¿ee§§}}<éééÚÚ--˜EÂo--ÚÚ--êDÀ,U¨s Íz sööUUUeÐ}úúqq³YÜÜë>ÂÂÂÂÂëë©VVVmÀ==êêööIIÞ‹´´::dpppX²³‰‰/ܳ³³‰Ü`ÜÜ¿¿eééHHõH³``³D——êÀmmÀÌÌÌa88çççç))||Ï||))|))ÉÉvv  vɇ4 ^  ÉÉ ^±^ÉFóÉÉ M^^‡‡oóó‡4^^““jjÿÿÕ(^^‡4^ 44vvÉv44 ^PýPP’å¼¼††]]žžÈu??’ìýýýP¼i’?’’iiiiì?'ª Wìì!™??ì Ã Þ ÞZ !´  Þ1!´!´ Þ"‹ #a!´!´ t t!J"Œ"Œ!¶!¶"W"W!€!€!€#-#-!€ "<¸¸#}#}#}#} ú"§&"§"§$T ú$T#Û#Û$²!X$²$²$²$²$$$%¾%S%S$|$|#Û#Û#$²%%%ô%ô&_&_'5%ˆ&_$²#Û%ˆ&_&_&_&_( ( ( &_&Ê&Ê%&Ê'5'5'5'5'†'†&¯&¯(È'&D'ñ'»&&å&å%£#ö# (''^'^*¸,e,Ð'É&ò%E(Õ(Õ)«'þ&½-q:ÙDçH F^F^C7I-;(4(4'É'É+ù4Z;4Z+ù&ò%%%%$²$²&_$²%ô%ô%%%&Ê%ô$G&&$a"´$Í$Í%£'P%£%£# # &z&z%£%£$T&&$T$T$T%*&×"§$T%*&×%*%*&$T%`%`#³%`%Ë$%Ë$%Ë™ppìFz IIöIœ£D—mmÙ,,XX..²Ï""Ï||Ï"Ð}}}ééee§T}}}}}}ooo˜˜Â˜E˜ë˜˜˜˜,¨U,´´´a  ö£U¨Ð#}}}Ðúú//ÄqqÂÂÂVV--ÂVV-€U¨U,¨UIör´´ÞÞ::ddÏÏS¦²ÛÛÛÛ.ÛÜ/q``‰Ü`³³§T*}*}}}܉`HõH›UU,¯UU‹‹‹8ÌÌ£öÏ|)))Ö||SSSS||Ö) ^44ÉÉÉÉÉÉvÉÉÉFó󠇇^ ^±±^44‡‡ÉÉɇ4‡4j½jj½½@“^±‡4ó ÉÉó  M4‡44'ÔÔÔÔz''žñÈ] + + +ii’ì¼¼i¼??’åPýÔPªª W W W!™!™!™!™??!™!™"Åœœ"‹"‹111 Þ!´!´!Iœ!I!I!¶ ß ß ß2!¶ !"Â!! >!ë"Â$o#}#}"§"§"<"<#$¿!Ð#}$T$T$¿&l#é#é í í$G"š%#p$G"š#¦%S&)$|&)&)$|$|%ˆ#Û#$²&Ê%%ô'¡%ˆ#Û$²&_&_&_#Û%ˆ&Ê#p%&Ê'5(â&_&_%ˆ'5%ˆ'5%&Ê(w(w'ñ'ñ$—"ê%Ù%Ù%(\'P%£&z&z&z&z%£(ý'^'^&‡&‡) '^(4&‡'þ&Q&Q)«+Ä2x?àF”FÉFÉFÉFÉ=ý0•+Ž(4'É&'É+#,Ð+#(Ÿ&ò&_&_%ˆ%ˆ%ô%ô%&Ê&Ê%"š%ô%ˆ%ˆ%ˆ#Û%£%£$Í$Í&z$Í(ý'P&z$Í$Í&z(’&å'»&&&&&%*%*&'®#}%*&×%*%*%*&×%*%Ë%Ë%Ë%Ë' %`%`%`#³™ÃÙ™  IIöIIö=êÀÀ,Ò..XÏ"Ï|||"ÏÐ}}}<<ee§T}}*Ð}}ooÂo˜˜ooE˜E˜ëëëë,¨UÒ´´´aÍÍöIU}Ð}}}Ч§//qqhÂÂVV€€ÂÂÂVV-€¨UUÒ¨UIör´´ÞÞ::dd""ù¦²ÛÛ...ÛÜ/q³³Ü‰³³T}**}**‰Ü³³õH›HUU,¯‹‹‹8öI|)||Ï|||SSSS||)| ^‡‡vÉÉÉÉÉÉÉÉÉó ó 44^ ±^^ 4444ÉÉÉ4áá4½jjj½½æ“^±‡4M v ó MŽááá'ÔÔÔÔÔ''žñuÈ] + + +ii??ii¼i’’’?ýªÔªªýªªª!.Ô??ììììì#F r rœœ Þ Þ1"‹ Þ"‹!´!´!Iœ!I!I !¶ ß ß"Œ ß!¶#c"Â!!!!ë#˜!"Â#}#} ú ú"<"<#$¿#}!Ð"§"§#$¿#é#é í$G$G"š#p%%ô$G#¦%S&)$|$|$|&)&)#Û%ˆ&_$²%&Ê$G%ô(â'5&_$²&_)¹'5%ˆ%%&Ê%'5(â&_&_(â'5(â'5(w&Ê(w(w&D&D&D'ñ'†'†&¯&¯%£'P$Í$Í('$Í'P'P%±%±&‡#-%±'^(4&‡&Q'þ'þ'þ(j/<†F”FÉFÉFÉCo:£0•)á)á'É&&&'É&%E&ò&_&_'5#Û%ô%ô%&Ê(w&Ê$G'¡%ˆ%ˆ'5%ˆ%£%£&z&z$Í# %£'P('&z('&z&å%8$a&&"§&&%*%*&$T%*&×&×%*%*%*&×%*%Ë%Ë%Ë%Ë#³%`"%`%`™pÙ™II ÍIIs êêêê,,UU.Û²²Ï|"|||ù¦§T*}é–¿T§}}}Ð}}˜Eoo˜EE˜oÂo˜ëUU¨UUU,‹888 ÍööUUÙ,ú§ÐÐÐ}}Ð//³qqqqÂhÂÂ--€€Â€ÓVVU¨ÌrrrÞ1´´:::¦¦¦¦²XXÛ.³³³HH³³``܉‰‰TTT****³³‰6õHHH,UU¯,,´aaaII||Ï))ÏSS¦¦)|SS||44‡‡   óÉvó ÉÉ  ÉÉóF44^^^¸ ^  á‡v#É4444“æjæ“““‡‡±^  ÉvvÉM  ¸  ªýªýýýzÔuÈžñ3à33??ii???’¼i??ÔÔÔÔÔªª W Wì’ìììì à r rÅ r„11 Þ!´#a Þ"‹" r!Iœ2 ß "Œ"Œ!¶#c#˜#˜!ë!ë!ë#˜"Â"Â$T"§ ú"§$¿##é#é"§"§$T"§#$¿%–%–$G$G"š"š!Ã%$G$G$|$|&)&)'%S&)$|$²#$²#$G%ô$G%ô'5'5'5%ˆ%ˆ(â( &_%ô%ô'¡'¡( &_&_&_&_&_%ˆ'5&Ê%&Ê(w$—&D'%n&¯&¯%Ù%Ù&z&z$Í$Í)Ô$Í'P%£$Ú&‡$Ú#-$Ú$Ú&‡&‡$¤$¤&Q&Q%(j2x?àEóEóDF??3) '^%±&ò%E&ò%E%E%E%E&ò%ˆ'5&_$²'¡%ô$G%ô%#p$G%ô%ˆ#Û%ˆ%ˆ'P%£%£%£$Í$Í%£#ö$Í('&z&z%8%8$a&%*%*'®&%*%*$T"§&×&×&×&×$T'®(„!Ð$$%Ë$#³%`&7$Š%`ìÃp™™II Íöœs êê==,,.Û²²|ÏÏÏ||S¦T§*}<é¿T§Ð*Ð#}}ë˜oo똘ëÂÂÂÂoE˜UU¨UUU,Þ‹‹‹ ÍööUUÙ,ú§ÐÐ}Ð#ÐÜ‚YÄÄqqÂÂ--€€hhhÓ€VVU¨r̋޴´:::ùS¦¦XXXÛ.³HH````܉‰‰T§§****³³6‰Hõõõ,UUUÙÙa´aaÌröö||))||¦¦¦)|SS))4444óóó Év ó  ÉÉó 44^^^^^±^^‡‡vÉÉá‡44æ“j“@ææ44 ¸óóÉvvÉ ó^   ýPªý WýzzÈžñ3à33??ii’’’?i??ÔÔ'ÔÔ!.ªª W W!™?ìì?? à r rÅ r„1 Þ1!´#a Þ"‹" r!Iœ ß2 "Œ"Œ!¶ !ë!ë!ë!ë!ë#˜$o$o&$T"§$T$¿##é#é ú$T"§$T$¿&l%–%–"š"š$G$G#p&Ê$G$G&)&)&)&)'(­&)$|$²&_&_$²%ô'¡'¡%ô'5'5%ˆ'5'5'5( &_%ô%ô%ô%ô&_$²&_&_&_&_'5%ˆ(w&Ê%&Ê&D'ñ'%n&¯&¯%Ù)3&z&z&z&z('&z'P%£&‡$Ú$Ú&‡$Ú$Ú&‡&‡&Q&Q&Q&Q&½&½*0Ë:8@ì:81×*¸'^%±$%E&ò%E#˜%E%E&ò%E%ˆ'5$²&_$G%ô'¡%ô&Ê%$G%ô#Û%ˆ(â%ˆ%£'P'P'P$Í$Í%£'P&z&z&z&z&å&å&$a&×&×&'®&×&×$T"§%*%*&×&×&&&×#}$'x%Ë$' %`"Ý$Š%`":::´´‹‹   Í—êf¨UUUÏÏù¦Ï|¦¦F™pÛÛÛ.TT§§é¿¿`³qqË9ŒßŒ÷¤ÎÎ-Ú--°ÚÚaaÞ‹‹ÞÞÞ´a´´´a‹‹a´88܉³³H›ÄÄÄq››÷JJ÷JJJßßµµJ÷ÎÎrrIœmUUddçù¦|Ïùùù¦::¾<<<é<<ËËËËËËõõ܉‰‰HHHõËË´a88´´Þ‹Ù,UU——D—¾::Açd|Öá444^^4‡“@@æ{((Õÿÿ((“æ½j““jÕ(Rÿ^^^^4‡  óM  vv@@jj@@ÕÕ‚Õjj““ÈKKKñññ]°3àKžÈuýªPýi¼?쪪ªªi’ìììì!™ì?ììÔ Wªªª W W r r!I!IB!I r r!I!IÅ r Þ1 !´!¶!¶ ß ß"÷!J!J!J ß"Œ"Œ"Œ ß ß!¶#c"Ý!0"#³$$#H$õ$$#H#H"q$$õ$õ#p!Ã%#p#p%"š"š$ç$ç%¾$$%¾$ç$ç%%%%&Ê%%%&Ê%#p&Ê( &_)¹&_%ˆ%ˆ( ( '5%ˆ'5'5'k'k(A(A(­''Ö'Ö&å%8(’(’(ý'P%£'P&D&D'#Á%Ù%Ù%Ù)3'É&&&&ò%E&)v%æ'“'“$9&Q)«)«+X.G3N.G'“&Q&Q&Q&Q%æ'“%%'þ'þ&Q$¤%ô%ô%%&Ê(w(w&Ê)%¾%¾$%S'&)&)&D'ñ$—$—%%%Ù'†(È'%n%n$—'ñ&D$—%Ë'x&¢&¢' ' %`#³$T&&×&×&'®#}%*$%Ë%Ë$%`' %`%`$T|:::´´ÞÞ  Í ê—À¨UUUÏÏù¦"Ïùù™FpÃ...ÛTT§§<<`³qæ9Œ9¤÷ÎÎ-Ú--V--aaÞ‹Þ‹‹‹´aaaa88´‹‹Ü‰H›qqq››Y³JJJJ÷J÷÷ŒŒµµJ!!rrrrIœÀÀUUUUdd::ùL|ϦLù¦::déé<é<<qq›õ‰ÜÜÜHHHõÄqqa´Þ8´Þ‹Ù,UU——D—ddd::çç¾¾¾||SSá4‡á^^á4“@““(Õ‚ÕÿÿÕ{“æ½j@@j½{(Rÿ^^^^‡4  F  FÉÉ““jj½““‚‚‚Õjj@@Èžžññžž +]†3žñÈPýýªi?쪪ªªi??ììì?ì?!™!™Ô Wª W W W W r rœœœ!I r r!I!I rÅ Þ1 !´!¶!¶"Œ"Œ!J"÷"÷"Œ$9$9 ß2"Œ !¶!0"Ý#³%`$$#H$õ"q"q$õ$õ%Ë$$õ$õ%#p!Ã#p&Ê%"š"š&”#:$%¾'k%¾$ç$ç#p#p&Ê&Ê&Ê%&Ê&Ê&Ê%%%&_( &_&_%ˆ%ˆ$²( #Û%ˆ'5'5'k'k(A(A'%S'Ö'Ö&å%8&å&å(ý'P'P%£&D&D'''†'†%Ù)3'É&'É'É&ò%E&&%æ$9%æ%æ&Q&Q&Q'þ)@*í)@%æ&Q&Q&Q&Q$9%æ%%$¤'þ$¤&Q%ô%ô%%#p%&Ê%'k'k%¾$%S'&)&)$—&D&D&D&¯#U%Ù'†'(È%n%n&D&D$—&D'x%Ë#H&¢%`%`' %`$T&%*%*$T&#}%*"q$'x%Ë#³%`#³#³&¦::´´´´   Íê=êêU¨,|Ϧ¦¦¦|"ÃpXX§§§§<<éé³`›HHHÎÎÎÎV°°°8Þ´´´ÞÞ‹‹a´aaaaaa‹8//Ü/›HqÄH›qq/ÜÜ/ttJt!JJŒßµµ!!!!œIrrrrêêUU,::·dù¦¦ùù¦ùùçç::é<<é¿é<qHHHHqËˉ‰‰‰ËËHHõõaa8‹aa‹‹U¨ê—:ç”ç¾¾||Ï|  ^ 444‡½½½½Õ(ÿÿÿ¬ÿÿjj½j“æ½j(Õ((   ^^^ ^ÉvóF óÉÉjj““““jj¬¬ÿÿ½½@“uÈñžÈuKž3†]]ÈuÈ''ª W??iiÔ'ÔÔi¼ Ãì?i!™!™ªª Wªª""Û!.!I"ö!I!Iœœ r rÅ" r r Þ"‹!´!´!¶!¶!¶#c"!"!"÷"÷!¶!¶ ß ß ß"Œ!¶!¶"Ý'ä)‘&7"q Ä"q$"q$$õ$õ#H#H$õ$õ%ô%ô%%$G"š!Ã#p$ç$ç%¾'k'k'k$ç#:%ô%ô#p%&Ê%&Ê&Ê&Ê%&Ê%%ˆ'5'5%ˆ&_&_'5'5'5'5&_&_%¾'k'k'k'(­(­(­&å%8&å(’(ý'P'P%£'ñ'ñ(È(È&¯&¯%Ù$,&'É&ò&ò%E%E%E&ò)@'“%æ%æ%{#Î%{%{)@)@'“$9$¤&Q'('(&½&½)@%æ$¤&Q%{'(%%%ô$G"š%ô'¡"š$$%¾$%S'%S%S$—&D'ñ'ñ'†$,%Ù%Ù&D&D"ê&D''%n%n$õ&¢$$&7&7$Š&7%*%*'®&&$T$T&%Ë$$õ(O%`%`$Š"Ý#}¦::´´´´   Íê=——U¨,Ï|¦¦¦¦||pppò²§§§§<<ééY›HHHccccÎÎÎÎV°88a´´´‹‹‹‹a´aaaaaa‹8//Ü/›HqÄHõÄ/Ü/Ü!!÷Jt!JJŒßµµÎÎttIörÌ==¨¨,·d¦ù¦ùù¦ùù::::é<<é¿é<qõõHHËËˉ‰6Ü¢Hõõaa8å´‹‹UÀÀê—dd:甾d)))|  ^ ‡‡4á½½jjÕ(R¬Rÿ¬¬jj½j@“½jÕ(ÕÕ^^ ^ ±¸ vÉ ó M Ðv@@@@jj¬¬ÿÿjjí@ÈžKuÈžñ3à +°uÈuÈ''ýP??ÔÔÔi Ã"pì? Ã?!™ W W W" W W!.œ!I!I!Iœœ r rÅÅÅÅ1 Þ!´!´ #c!¶"!"!"÷"÷#c#c$9$9"Œ ß!¶%'ä6ù:S,ë"q Ä"q$$"q#H#H#H#H#H#H$G$G#p&Ê$G"š#p!Ã#:#:%¾$$$$ç&”%ô%ô%#p%&Ê%%&Ê%&Ê(w'5%ˆ%ˆ'5&_)¹'5'5%ˆ%ˆ( $²%¾'k'k'k'(­(­(­&å%8(’&å#ö%£%£'P'ñ'ñ''&¯&¯)3$,&'É%E(Ÿ&ò#˜%E&ò%æ'“%æ%æ'(%{%{%{'“'“'“$9$¤&Q'('((j%'“'“'þ&Q%{'(%(w$G%ô$G'¡'¡%ô'k$%¾'k'%S''$—&D'ñ'ñ%Ù%Ù%Ù%Ù'ñ$—&D&D''''&¢$õ%Ë%Ë$Š$Š&7'ä%*%*&$T$T&$T&%Ë$&¢&¢%`%`&7$Š%*dçç:s IIöö£öUU,,ê—:::dd::.ˆˆÛÐ}}Ð}}**HHc¶!Î÷÷°‡---‹8a´ ÍII´´ÞÞ´´Þ‹  öI/ܳÜÜ››Äî›î›ŒŒbbt!JJ!!!Î÷÷tt‹ÞÞÞÌÒ%U¨ÀÀ—êÏ"Lùùù¦ù¦ù¦¦ù¦¦¦éé¿ééqHõ``³‰‰Hõõ›õõ³³‰‰ÌrÌ888‹UUUU,¾:ççç)))))|SS4‡±^4‡^ ÿRÕÕjjj¥ÿÕÕ@@jjÕÕ(({(ÕÕ^^‡‡¸^44  vÉ MMóÕÕ¬¬‚Õÿ¬@íjjjj š šKžu "uužñžžžñžñžñÔÔiii êªÔ W Wª W Wý?? à Ãìì?!™ Ã"pì!™!I!I r#Ì""œœ Þ1   Þ Þ!´ 2 ß"Œ"Œ"!#Î!J"÷#Î t#Î#Î#Î"!"!%{(O:¾?Å/%Ë"q#H$õ%`#³"#³#³#³%`%`$G$G"š$G&Ê#p%#p"Ï$|$|"Ï$$$ç(A%ˆ%ˆ'5%ˆ%%&Ê&Ê&_$²$²( ( &_( &_%ô%ô%&Ê( &_'5'5'Ö'Ö(­(­'Ö'Ö'(­(ý%£&z('&z&z&z&z'ñ&D&D&D'''%n'É'É&'É'É'É%E&ò%æ%æ%&½'þ&Q%{%{'“'“%æ'“%æ%æ'“%æ%{%{&Q&Q&Q&Q%{'(%ˆ'5$²&_$G'¡(w&Ê'#¦$|&)'%S$|$|%Ù%Ù&¯%%%$,%Ù'†$,%%&D'ñ'%n$õ&¢&¢$õ$õ$õ%Ë%Ë$T$T#}&×$T&&&' %`'ä&7$Š$Š%`%`%*:::s IIööIöUU,,ê—:::dd::ÛÛ.Û}ÐÐ}*Ð}}³³HHccc!ΤJVÚÚ--8‹´Í ööaa‹‹´´Þ‹ÍÍöI/ܳ܂››ÄH››HŒŒbb!Î÷÷!!Î!÷÷Î΋ÞÞÞrrrÒ¨Um=|Ïù¦¦¦¦ù¦ù¦¦ù¦¦Léé¿ééqHõ``³³³‰‰õHHHõõËË``‰‰ÌÞ88‹UUUU,d·:ççç||))|Ϧ¦‡4^ á4^ RÿÕÕ½jRR((““jj(‚ÕÕ(ÕÕÕ^^44 ±44  vÉó   ÕÕÿÿÕ(¬Y“@jjjj@@KžÈuuñžžžñžžñžñ'ÔÔiiiiªªÔªª Wªªª??"p??ìì Ã?ì!I!I r r r rï!I Þ"‹!´!´ Þ Þ!´  ß222Ç t!J#Î t"!"!"!#Î"!"!&¢+©/(O$ Ä#H$õ%`#³"#³#³#³%`%`$G$G%ô$G%!Ã#p%$|&)&)$|%¾%¾&”&”%ˆ%ˆ'5%ˆ%%&Ê&Ê&_$²( ( ( &_)¹( '¡'¡&Ê%&_( '5'5'Ö'Ö'')ƒ)ƒ'(­'P#ö$Í&z('('('('&D'ñ'ñ'ñ'''(È'É'É'É&$o'É%E&ò'“'“%&½&Q'þ%{%{'“'“%æ'“'“'“'“%æ%{%{&Q&Q&Q&Q%{'(%ˆ#Û$²&_%ô%ô&Ê(w(­%S$|&)%S#¦$|$|$,'†&¯%&¯&¯%Ù'†$,$,&¯&¯&D'ñ'%n$õ&¢&¢$õ&¢&¢%Ë%Ë'®$T#}#}$T&&&#³%`&7$Š"Ý&7%`%`#}:dd·  II ÍIö,,,fê—ddd:::.ÛÛÛ..}Ч§§ú}}Ü܉Üqqq9Œc¶!ÎÎ{VV--‹‹‹‹Í   a´´´‹‹´´ö£  Üܳ³ÜÜqqH›qÄߌµÎ!t!!!JJ÷J¤÷a´Þ‹rÌ,,——À¦¦¦¦S¦""ù¦Ï"ù¦ÏÏ¿é<é<<é››HHã‰Üܳ³‰‰HõH›qqqË``‰‰Ì£ö´aå8UUUUUUdd:ç:çç:¦SÖ|SS||^ 4á^^^^Rÿÿÿ½ÿÿ((½ÿR(Õ((RR‡Ú^^4Ú‡4ÉÉvvóó óÕÕÕÕ¬¬ÿ¬jjÄ@í퓞žÈÈužK " "ÈuuÈPPÔii?ìª WÔÔÔ Wªªªì? Ãi’? ܜŠr r rÅ r"‹"‹ Þ1!´!´ Þ"‹ ß ß ß ß t"!!J!J"! t!J!J"÷!J"q"q$$ Ä"q$$"#³%`%`%`#³$Š"Ý$G$G$G$G#p!Ã%ô$G#¦#¦&)'Ö%¾$&”&”$²$²%ˆ%ˆ%%'¡'¡%ˆ%ˆ'5(â)¹( (â(â&Ê(w&Ê&Ê(â'5&_&_&)'Ö'''(­%S'(ý'P%£'P'P'P('('&D)ž)ž'ñ'ñ&D%n'&ò(Ÿ&ò&ò&ò&ò&&&½&½%æ'“'(*‚.²+X%%%æ%æ%æ$9%%$¤'þ'þ&Q&Q&Q%{'($²$²&_( %ô%ô$G%ô(­'%S'$|$|&)&)%Ù'†%%(\(\&¯&¯$,%Ù%Ù%Ù'*u)ž'ñ$õ$õ%Ë$&¢&¢&¢(O%*%*%*&×$T'®%*#}"Ý$Š$Š"Ý%`' %`#³%*:d·dÍÍIIs IöÒf=êddd:::.Û..ÛÛ}Ч§T§}}ÜÜ܉qqqŒ9c¶Î{!ÎVVVV--88ÞÞÍ   a´´´88´´öI  ////H›ÄqqqŒßµµt!!ÎÎÎ÷÷÷¤÷¤´‹8rr,,——À¦¦SS¦ù|"¦ùÏ"¦S||¿<<é–éHHHH‰/‰‰``‰‰HõHõqq³ ã‰Ì£öaå8UU¨¨ç::ç”çS¦||¦¦||^ 4‡^^^^ÿRÿYj½jjÿÿÕÕjjÿR(ÕÕÕRR‡4  444‡ÉÉvv  ó ÕÕÕÕ¬¬¬ÿ½j½@í@@žžuÈÈžK " "ÈuÈÈuÈPPÔ'¼¼?ì WªÔÔ'Ôª Wªª?ì à Ãì? Ã!I!IÅ r r r" Þ Þ1 Þ!´Z1 Þ ß ß"Œ"Œ"! t!J"÷!J"÷#Î"!!J!J!J"q"q Ä$"q$"q"q"#³#³#³#³""Ý$Š%ô%ô"š"š#p%$G%ô%S!ù"Ï$|$%¾&”&”( $²#Û#Û%(w'¡'¡%ˆ%ˆ%ˆ'5)¹( %ˆ(â(w&Ê&Ê&Ê(â'5&_&_&)'Ö''(­''(­(ý*ª(ý'P'P'P&z&z&D)ž'ñ&D&D'ñ'(È&ò(Ÿ#˜*L&ò&ò&&%%%æ'“'(*‚3¹0_(j(j)@)@$9%æ%%$¤'þ'þ&Q&Q&Q%{'(&_&_&_( %ô%ô'¡%ô'%S'%S$|$|$|$|$,%Ù&¯&¯#U&¯&¯&¯$,%Ù%Ù%Ù(È,"+K&D&¢#H%Ë$(O$õ$õ&¢%*%*%*&×&&&×%*$Š"Ý$Š&7(º' %`#³#}ÎccŒ9ÜÜ܉³‰/‰‰qq››}#ÐÐ<é<<HHHH/ÜÜÜdddd:ç::™Fpppppss s88ÞÞ=êê—,,UUV----cc9Œ{Î÷¤ÚÚd·dddddd::d·::rrIörr,,UUÀJJ!Î÷÷¤JŒŒbbææ99‰‰`³qH›³ÜÜ›HHHé<T§*ÐHõËÜ/܉E˜ë˜˜E˜EæŒb÷Q({‰666³³‰‰C–¿éé<<ÂooÂ‡Úæ“Q¤¤÷•Bk×*6ã_¹__6‰kkkïBô¡ww¹¹ã6Ø2[®®®®ÇCð[2…ó É ^  áŽá‡ ¸ ¸…2[[[2…>>gºüüüü¸¸áávv##í@j ší@í r"!Iœ r rœ!I1„11!´ Z!´!´#aZZ Þ Þ   Þ11 Þ rœœ g g!=!=!¨û""#‹#‹"´!!Þ#‹"´! g"!=$—""!¨#U# # # # # # "I#ö#Á#Á#Á#Á%Ù%Ù$,$,"ê$—"ê"ê#Á#Á#Á''%S%S%S"Ï'Ö''''$|'Ö'Ö'Ö'''ñ'ñ&D&D&D'ñ'ñ'ñ'(È)ž&D(È(È)ž'ñ&z&z'P'P&å(’&'»&å(’)h'»$Í&z'P(ý'¡'¡$G'¡'¡'¡%ô'¡&”$ç%¾'k&”(A.)'»++ì*?'P(ý'P%£%8&å'»'»%£%£%£%£%n'''&D&D'%n'P%£&z# #‹#‹&$a$,$,(\(\%&¯%Ù$,$a$a&&'P'P'P#ö&½&½$9%æ&Q"÷&Q&Q$9%æ$9%æ'“%æ#c%&ò%E$o&&‡$Ú&‡#-%ζ¶ßŒÜܳ³Ü/³ÜÜÜÜqqîîÐÐ}}<éééHHHH/ÜÜÜdd:::™Fppppp  sÆ‹‹‹‹=êê—¨©°---- c9ŒÎ{÷¤ÚÚ·ddd··::d::rrœIrr,Ò¨¨f÷÷!t÷÷÷÷ŒŒµ““99‰‰³qõHYÜÜHõ››<éT}}õHq‰6܉˜ë똘EE˜99b¤¤{(6㉉³³‰‰–é¿ééééÂoo‡Úbb9æ¤QQ¤B•k„×6ã    ã6kB•¡ôww¹¹6ã……[®®®®[mCð[®…ØM Év¸  eŽáŽŽ¸ ¸ …2[[[…Ø>>gºO©üü  áávvvv@íj@í@íÅ rœïÅÅœ!I1„11!´    !´!´!´11!´!´1 Þ1„ÅÅœœ""!=!=#U!¨""#‹#‹$a"´#‹%8$a"´"#Á"ê"ê Ò Ò!¨#U$Í!s# # # # #ö%£#Á#Á#Á#Á$,$,$,$,$—"ê$—$—#Á#Á%n%n%S'(­%S&)'Ö(­(­''&)&)'Ö'Ö''&D&D'ñ'ñ'ñ&D'ñ'ñ*u(È)ž&D''&D'ñ&z)Ô(ý(ý(’&å&'»%8&å)h'»&z(''P(ý'¡$G%ô%ô'¡'¡%ô$G$ç&”%¾'k&”$ç)'k$a'»(’*?(ý'P'P%£&å(’'»'»%£%£%£%£%n'''&D&D'%n%£'P&z&z%8%8$a&%Ù%Ù&¯&¯%&¯%Ù$,$a$a'»'»%£%£%£%£**%æ'“'þ'þ&Q&Q$9%æ%æ$9%æ$9#c%%E&ò&$o&‡(4(4$Ú%!2ß¶cÜܳ³³/ÜÜÜq››ÐЧ§ééééqÄËÜÜ܉::ç::dÃpì™pÃppööIö‹‹a´êêêê¨,ÚÚ--VV°ccÎÎ!ÎÚ-°°dd::dd::d::rÅÅIörÌ,¨¨=ê==÷÷÷÷¤JJJbµµb“9ææ³³Ü/q‰‰›HH›<é§§T§q`³³˜˜˜˜Âo˜˜“9bµÎ{{(‰‰³³````–éé–<<¿l˜EooÚ‡ÚÚŒŒb{{¤¤BB­Z­ ¹¹¹ãã  BBkkkkkk¡¡wwã6 ¹[[2…ØØ…2ðCð…+Ø…vv ó444á   ¸¸ áá®[[[ß…‘>>>©©©O e eáá####ííííííííÅ rœœ rÅ!Iœ Z!´!´!´    Þ Þ  1„ Þ ÞZ ZZœ!I rÅ g gã"ê#U#U""!Þ!Þ"´!"´$a$a"´""!="ê!¨#U"$,#ö#ö#ö#ö$Í# $Í# %n#Á#Á#Á#U#U#U#U#Á%n$—$—$—"ê%n%n#¦%S(­%S&)&)%S%S&)'Ö''(­%S&)&)''(È(È'ñ'ñ'(È''&D&D&D'ñ&D'ñ&z('(ý(ý(’&å'»&%8&å&å&å'P'P('('%ô'¡'¡'¡)N)N$G%ô&”(A%¾'k'k%¾'k%¾$a'»'»'»$Í$Í'P'P'»'»%8#‹%£%£&z(''%n'ñ'ñ&D$—%n%n# &z&z('%8%8$a$a$,%Ù%&¯%Ù%Ù$,%Ù$a&&'»&z&z&z$Í&½&½&½&½*‚16+X&Q"Œ$9%%%%$9$9"Â$o&ò%E%±'^&‡#-$9Îߌ½Üܳ³³/ÜÜÜqHîÐЧ§ééééqq‰‰/Ü::çdÃpF™pÃpp£IöI‹‹a´=—êêUU,----VVV¶ccÎÎ!ÎÚ-dd::···:”d::ÌrröI,UU=ê—=÷÷÷÷¤JJJµbbŒŒ99Ü/qqqY³‰‰õH›H¿¿é–TúT§qqq˜˜EEoEE99bÎ{{(‰‰³³³³``–éé–éé¿lEò-ÚÚÚ99¼((QQBB­­¹   66  BBkkkkkkNNwwã6_ ®…2ØØØ…ððC………2vvM 44á4^¸¸  ^44®[[[22‘> ë ë©©üü¸¸áávv##íí š šíí š š rÅœ"ö rÅ!Iœ!´    !´   Þ Þ!´!´ Þ1„ Þ!´   !I"ö" r g g!=#U#U""!Þ!Þ"´$a"´$a"´!#Á#Á"ê!=!¨#U$,""I"I œ#ö!s# $Í# #Á"#Á#Á#U#U%%#Á%n$—$—$—"ê#Á'%S#¦%S%S$|$|%S%S$|&)''''$|'Ö''(È(È'ñ'ñ%n'(È(È'ñ'ñ&D'ñ'ñ&D('&z'P'P(’*?)h'»&å(’&å&å'P'P&z&z%ô'¡'¡'¡%ô%ô%ô'¡&”(A%¾'k'k%¾'k%¾$a'»'»$a&z&z'P'P&&%8#‹%£%£('&z#Á%n'ñ'ñ&D$—%n%n&z&z$Í&z&å&å&&$,)3(\&¯'†'†%Ù'†$a&&$a&z&z&z$Í%%%(j/‰6=-'þ%æ'“&½#c%%%æ%æ$o"Â&ò%E%±$$Ú$Ú$9¤99Œæ³ÜÜqHHq³³<<<éééËHH`³³d¾¦¦Ï|ÃppÛ.Û´´´a88‹‹ÀÀÀÀ,,UV--V--cc999ŒŒ9˜˜EEd·dd:··dd::ù¦|Ï‹‹11IIIIêêê=fê=÷J!Î{!!!÷÷{{Œ9Œ9³`Ëqqq³‰Ü܉‰‰§T*}§TTHHqqHõõHÚÚ°°EE˜E¤¤Î{÷÷{{‰Ü` xËËË–ééé*}}}˜òooEE9æ¼ææ„×­­­¹¹  N¡Êw1×Z­××­ôô¡¡  66Ç®®……®[…ØððÇÇ^ 4444  ^¸¸ vvÉvÇÇÇÇÇÇÇÓÓüO©ü©©Mú#v   eÄYY‚Õ„1­ ÅÅ!I!I"‹„Z   11œ!I r r!IœÅ r rÅÅ r r"œ"ö"#Á"ê!=!¨!¨" Ò!Þ!Þ"´!!Þ#‹#‹!Þ#U#U""#U#U$,"$Í# # # "I#ö#ö#ö#Á#Á%n%n$—"ê#Á'&D$—%n#Á%%%Ù%Ù$ç$ç(A(A'Ö&)&)$|&”(A'k%¾'k'k%¾%¾(\&¯%Ù'†&¯&¯%Ù%Ù'%n&D)ž'ñ'ñ'ñ$—('('(ý'P(ý'P(ý'P'P'P&z)Ô'P'P$Í('&Ê%&Ê&Ê(â'5'5'5%S(­'Ö&)'Ö&)&)$|%£'P&z$Í$Í&z%£%£&z$Í%£'P%£#ö$Í&z%%&¯&¯$,$,&¯&¯('&z$Í$Í%£%£&z&z%Ù'†'†%Ù&D&D%n(È('$Í$Í# $a$a%8%8$9%æ$9'“*‚*‚'þ&Q$¤"÷'(#Î%%$9$9$o"Â%E#˜#-$Ú$%±%J99ŒŒYÜÜqHHq³³<<<é<<qHH``³³dd¦¦Ï|ppppÛÛÛ.aa´a‹‹ÞÞÀÀÀÀÒ,UV--V€€cc99Œ9Œ9˜˜ëEd·dd:dddd::ù¦|Ï‹‹‹‹IIööêê=êmÀê=÷JÎ{!!ÎÎ÷÷{{9æ9Œ³ËqÄijÜ//ÜÜܧT}*T§ú§›õqq›HõH--˜˜E˜÷Q{(QQ((6‰³`Ë–ééé×***˜òòòæ9b99„×­­­Z¹¹__¡Nw$„*­Z××­¡¡¡¡¹¹ã‰m[[……[Ø… JðÇǸ 4444    ¸ ##vÉÇÇtÇttÇÇÓÓ©üüO©©ú!§ Ð#¸¸ e e!qÄ!¬‚ /„1ZZ r r"öœ Þ1 Z  11œ!I r r!IœÅ r" rÅ r" rœ"ö g""ê!=ûû Ò"!Þ!Þ"´! 1!Þ!Þ 1#U#U""#U#U" Ò$Í# # # #ö%£"I"I#Á#Á#Á#Á"ê$—#Á#Á$—"ê%n#Á%%%Ù%Ù#:&”&”&”&)'Ö&)$|&”(A)$%¾)'k'k(\&¯'†%Ù&¯&¯'†'†(È''ñ'ñ&D&D)ž)ž('(''P(ý'P%£(ý'P'P'P('(''P'P&z)Ô(w&Ê&Ê&Ê(â'5%ˆ%ˆ%S(­'Ö&)&)$|&)'Ö'P(ý('&z&z$Í#ö#ö$Í&z#ö%£'P%£$Í&z%%(\(\$,$,&¯&¯&z$Í$Í$Í%£%£$Í$Í$,%Ù'†%Ù'ñ$—""$Í$Í&z('$a$a%8%8$9%æ%æ%æ'('($¤&Q$¤"÷#Î'(%%$9$9&$o%E#˜$Ú#-%±'^%tŒŒccÜÜÜÜqHHqÄHHÜܳéé¿¿q˳³``”ç:ÏÏù¦™™ÛÛÛÛ‹‹‹‹´a‹‹êêU-Ú--VVV9Œcc¶coÂo·d::à::ùù|Ï´´´aIöÀÀÀ÷J÷QJ÷ÎÎ÷÷!!bÜÜqq››ÜܳÜÜÐ}*}}Ð}#HõHHqHHVVVVÂooÂ!{{{((((  66õõ¢õl¿¿¿×„Eòòòob9æ­­­­­ZZãã _w$¡¡××­××­Z$wNN¹¹  Ç[[®[22……ðð  ^^   ¸á444#v óÇtÇtðü©üüüOÓ €####ŽŽ e !Y‚‚  ZZœ!I"Å Þ1  !´!´ Þ1œ!I r r r r!I!IÅ" r"!Iœ!I!I!=!=!=!=!¨û Ò"#‹!Þ!!ZZ!"´%Ù%Ù#Uû""#U#U#ö"I#ö"I$Í# "I"I"ê"ê"ê"ê%n%n#Á""#Á#Á%n$,$,%Ù"!#:$ç&”&)'Ö$|$|%¾%¾%¾$%¾'k%¾'k%Ù%Ù%Ù%Ù&¯&¯&¯(\*u(È&D&D'ñ'ñ*u(È%£(ý(ý(ý('('('('('&z('(''P%£'P#ö&Ê(w%ô'¡( ( (â'5&)'Ö(­%S''&)&)'P'P'P'P%£"I%£%£$Í$Í#ö%£'P%£'P%£$,'†'†%Ù%%%Ù%Ù#ö%£'P#ö$Í&z'P%£#U%&¯&¯'%n#Á%n#ö%£'P%£#‹&å$a$a$9%æ%%'þ'þ'(#Î"!#Î#Î#Î"Œ$9%(j&ò%E$o&%±%±%±%±%!ŒŒccÜ܉‰ËHHÄqHHÜܳéé¿¿qq³³³³ç::ÏϦùpp™™....Þ8‹‹´a‹‹êêÀÀU,,€---V©Œ9¶¶coÂÂÂdç:::ùùÏ"´´´öIrrÀÀf÷J÷÷J÷ÎÎ÷÷!!bbµbÜܳ³HHÜܳÜÜ}**}}Ð}}Hõõ›qõõ°°oÂÂoÎÎÎÎ{{{{  66õõ¢õ¿ll*×EòŸEoÉo¼æ9­­­­­Zãã¹ w$¡¡„„­„„­wÊ¡û¹¹  Çt®®T22……CC  ^¸  ¸ 4á44v#M tÇCCÇ Jü©üü©ü €Ó## Ð ÐŽŽ  Y¬‚‚  ZZ!Iœ r r Þ"‹  Z!´ Þ1œ!I r r r r"öœÅÅÅ r!I"ö!I!I!=!=!=!=#U!¨"$,#‹!Þ!!Z"´"´!""!¨!¨""#U#U%£#ö#ö"I# !s"I"I$—$—"ê"ê%n%n#Á""#Á%n#Á""$,$,$ç&”$ç#:$|&)$|$|'k'k%¾'k'k)'k%¾$,'†'†'†&¯&¯%&¯%n''ñ'ñ'ñ'ñ(È''P'P(ý(ý('+('('('&z('('(ý'P%£%£%&Ê%ô'¡&_)¹(â'5&)'Ö''%S%S&)&)'P'P%£%£'P#ö%£%£&z&z%£'P'P%£%£'P'†'†%Ù$,%%%Ù%Ù%£'P%£%£$Í# %£'P&¯%%%%n#Á%n'%£'P'P(ý%8%8$a$a%æ'“&½#c$¤$¤'(#Î#Î%{#Î#Î$9%æ&½&½#˜%E&$o$'^%±%±%ÎÎ!!t›Hõõ܉ÜÜqqÄqqqÜܳ³éééTT*ЙF™FFFF™ppppÛÛXX‹8‹‹    ‹‹‹‹  öö€-ooÂVÚ-E˜ë˜oÂE˜·:::ç:ÃÙFì™™™IIIö´´´röö˜˜Â€---Œ9ŒŒbµ99Ü/³³³ÜÜ}Ч<é<<³‰6õõHH<ée§T}}oo˜˜Â¤÷{{{{{(ã‰``xËõ¢ËËËõOxË(({{{{{({(Q¤¤¤{{ ¹ã$Êô¡×„„„ÅïBïïïBׄ­ïBïBººä‘yyyÇÇÇÇÇCCÕÕ¬¬@@íívv M4ááá>>>‘üü©©[®[tttÇáá ¸v#MMÄí š šíœïBïœBïïÅ rœïZ   Å rïœ!I!I" r!~!~!~!~!"À!ê!ê# !s"I"I 1!Þ#‹#‹#Á#Á g""#Á#Á g!Þ 1!!"I"I"I œ%8#‹"´"´# $Í"I#ö&å#‹$a"´$Í$Í%£#ö#‹%8#‹#‹$Í# &z$Í&)$|"Ï"Ï%S%S$|&)&Ê&Ê$G'¡(â'5(â(â%£%£$Í&z'»'»'»'»&D'ñ&D'ñ(È'(È(È*u(È)ž'ñ(\* )3'†'P%£&z&z&'»%8(’'k)(A&”'Ö'Ö''%ô%ô%&Ê&_&_&_&_'ñ'ñ'(È(È%n%n%n&D&D&D'ñ'%n%n%n#ö%£%£%£'»'»%8&å&z$Í&z&z#ö%£&z('%n%n&D"ê&D&D%n%n&$a%8&å&å&å&å%8$¤'þ$¤$¤"Œ$9%æ$9"Â$o#˜#˜$Ú&‡%±$"÷"÷$¤$¤"÷&Q%{%{$ÚÎÎ{!t›HqqHHÜ//‰qqÄqÜܳ³ééééTT}}™F™F™™™FÃÃÃÃ..X²‹888    ‹‹‹‹  ööÚ-ÂÂoÂV-€ë˜˜ëoÂE˜··à::ç:ÃÃì™™FFìrrÅïIœI´´´rII˜˜Â€---Œ9ßßbµŒŒ/ܳ³Y//#Ч§<éé鳉ÜHHõ›é–¿§T}}ÂÂoo˜˜oo÷¤ÎÎÎÎ{(6ܳ³qHõxxËH¢Ë{{{Õ(ÎÎ{({Q¤¤¤{{_ ã6ÊÊ¡Nׄ„„ÅBïïïïBׄ­ïBïBººä‘&&ÌÌÇÇttÇð J‚(ÿY@@@@vv M4ááá‘‘>‘©©üü[®[ÇÇtÇŽŽ¸ e# ÐúúÄ ší šíÄÄïœ!Iœï rÅZ  Å rœ!I!I!IÅ r#+#+ÑÑf!!ê!ê# !s"I"I„ 1!Þ!Þ g#Á"#Á#Á"#Á#Á!Þ 1Z"´ œ œ"I#ö!Þ#‹"´"´# !s"I#ö%8!Þ$a"´!s$Í#ö"I#‹%8%8%8&z$Í$Í# &)$|$|$|%S%S&)$|&Ê&Ê$G'¡(â'5'5'5%£%£&z('&&'»'»'ñ)ž'ñ&D'(È''(È''ñ)ž(\&¯)3'†(ý'P&z&z&'»(’(’'k)(A&”'Ö'Ö''%ô%ô&Ê(w( ( &_&_&D&D'(È''''&D&D$—&D%n'%n%n%£'P'P'P'»'»&å%8$Í&z&z&z%£'P('&z#Á#Á&D&D&D&D%n%n$a&%8#‹%8(’&å%8&Q&Q$¤$¤$9%æ%æ$9"Â$o#˜#˜$Ú&‡%±$"÷"÷&Q&Q&Q&Q%{%{&‡¤Î{¤÷qqqHõ³³³H›HHqqHõ³Y{Õéééé}}}*FFp™™p™™ÃpXÛˆ´´‹8 ÍÍ ´‹Þ  Í VVÂÂE˜--VV˜˜˜˜EEE˜àààdd·pÃì™ÃppÃrrrIIœœ´´´öIrrëëë뀀©ß9ŒŒŒŒŒ9/Ü/Ü//Y}}}Ð<<é<‰Ü³HHõH¿¿}*}*ooÂÂE˜˜˜÷¤Î{(ÎÎ{``³³õ¢x %õõËõ¢Q¤QþQ¤Î{þQ{{¤QQQ‰ã¹¹¡¡ûN„1„×ïBkïBBB­ZZ­B• º>‘©©&ÓðÇð¬YÕÕjj“@#vMM¸¸¸ e‘>‘‘"- €ÓÓØ…2ßðÇtŽŽŽŽ# ÐúM š šÄÄí š!qÄïœ rÅ r r r r r rZ   !Iœœ!Iœ!Iœ!I"U"U!~!~ =!ê"À!"I œ œ"I!!!"´#Á#Á"ê$—"ê"ê!="ê#‹ 1!Þ 1 œ#ö# # 1#‹"´"´"I"I#ö%£#‹#‹$a&"I#ö$Í&z$a&%8#‹#ö%£'P%£$|$|#¦%S%S%S'%S%(w&Ê&Ê%ˆ'5( ( 'P'P&z&z&å&å'»&'ñ'ñ'ñ)ž'(È'ñ'ñ'(È)ž'ñ(\&¯(\* )Ô(''P'P&å(’&å&å'k'k%¾'k(­''Ö'Ö)N'¡&Ê&Ê( &_(â'5'')ž'ñ(È''ñ&D''$—&D%n'&D'ñ(ý'P&z&z%8&å&$a&z# $Í$Í&z('('('%n%n&D&D'%n"#Á"´$a&$a%8&å$a&'('(%{#Î#c&½&½%$o$o$o$o%±%±%±$#Î#Î%{%{&Q$¤%{'('^÷Î!÷JqqqqqÄHõ³H›îH›H¬{/éé<<}}}*™™Ãp™™pFFp²Û.a‹8 ÍÍ ´a‹Þ  Í VVVVooE˜--ë똘ëë˜Eàà:ddpÃì™ÃppÃrIIII´´´Iöëëë뀀VVßßßß99Œß܉܉//YÐÐÐ}<–é<܉`³HHHõe¿}**}ÂÂÂEòEëJ÷!Î{{Î!³³³³ËËHõË¢HËHõ¤QþQQ¤{(Q¤{{¤QQQ66 fNNNûׄ„×ïBkïBBBZ­ Z•B º‘äüüÓ&ðððCtÇð¬Y‚‚ šív#MM¸¸¸ e>‘>>Ó&yÓ2……2 JtÇŽŽŽŽv#úM š šÄÄí š!qÄœï" r r r r rÅÅÅÅ   !Iœœ!I!I ¨$#+#+!ê ="À! œ"I œ"I"´"´"´$a#Á g"ê$—!=!=!="ê#‹#‹!Þ 1#ö#ö!s!s!Þ!Þ"´"´"I"I#ö"I#‹#‹"´$a"I#ö# $Í$a&&å%8#ö%£%£'P$|$|#¦%S'''%S%%&Ê&Ê%ˆ'5( ( 'P'P&z&z&å&å)h'»)ž&D'ñ)ž*u(È)ž)ž'%n)ž'ñ* (\&¯(\('&z'P'P%8&å%8%8'k'k'k%¾'%S'Ö'Ö)N'¡(w(w$²&_%ˆ'5'''ñ&D'(È'ñ&D%n(È$—&D'%n&D'ñ'P(ý&z# (’-™+&$Í$Í&z&z$Í&z('(''#Á&D&D%n'%n#Á$a&&'»&å%8$a&'('('(%{%%&½%$o$o$o$o%±%±%±$#Î#Î#Î#Î$¤&Q%{#Î$÷¤¤!!Y܉qqqHHH›/Ü/ܳ``ÄÄ–é}*TÛˆÛÛ²²X²_XX²öIIöI£Pö‹‹‹‹£öÍ V--ÂÂÂÂ-Ú˜˜Â˜˜""¦¦:ç:ì™pÙ™a´ZÞÞÞ‹´´Þ‹ÞÞ´´ëëëëÂÂÂbµbµ!!!!܉ÜÜÜÜYÐ#Ð}§TTú›HõHqq›H<é¿-ÚVV--V99Œ9¤Q{Î܉‰‰õH˳³³³‰6‰‰¼ææææ““b¼¼¡NNNãã‰6„„×*ÅBBïï•B­­­ZBï&&&&gg‘>[[[2ßß…¬Y¬¬Õ‚Y¬á4áá###v‘‘>>‘ää‘ß2[[2ßá!;""úú## /‚¬Y š š š šïï"öœ11  œï r rœ!I!I r rœœ r r ¨"U"U ¨!~!~"U ¨Æ!s!s!s!Þ#‹$a"´#U!¨"""""#Á"´!!Þ 1"´"´!!# # # # "´"´"´"´#ö#ö# # "´$a$a$a#ö"I#ö#ö$a&%8%8$$%¾%¾$|&)'%S#Û'5#Û#Û&_&_&_( '»'»&å&å'»'»(’%8&D'ñ(È(È)3)3)3)3%Ù%Ù'†%Ù'ñ'ñ'ñ'ñ&z(''P'P'P'P'P'P&)'Ö'Ö'Ö'Ö'Ö'Ö&)'5(â'5'5&Ê&Ê%&Ê%n''ñ$—&¯&¯&¯%'†'†&¯&¯&¯%&¯&¯#‹%8'»&.o8}0ó%8%£'P('&z%8%8&'»%Ù$,&¯&¯%%&¯#U&z&z&z+'»&%8%8'þ&Q%{%{%æ$9%æ'“%E%E$o"Â$%±$$&Q$¤"!#Î#Î%{&Q"÷$¤¤¤Îγ`/ÜËHHH›/Ü܉³³³qqqq<}*T§Ûˆˆ.X²²²_²²²²²_£öIööö£IÞÞÞÞöIÍ V--ÂÂo-€VVëëo˜˜""ùù::ÃÙìÃp™™´a´11Þ‹´´Þ1‹‹´´ëë>˜Âoµbbµ!!ÎΉ܉/Üܳ`}ÐÐ}§T§§õ¢õHõH<ée¿¿¿¿Ú‡--V99Œ9Q¤Î!‰666¢õ˳³``‰6‰‰i¼ææææ““¼¡N¡¡ãã6ã××ׄÅBBïïïBZZ­ïBÓÓ&&g ‘ä[[[…222Y¬¬¬‚Õÿ¬á4áá###v ë ë ë‘‘>>‘2ß[®[2ßáḸúú##‚ /Y! š šííBBœœ11ZZïœÅÅœœœÅÅœœ r rû ¨"U ¨Ñ#+û ¨Æ!s!s 1!Þ$a"´#U!¨ Ò Ò""#Á""´!#‹!Þ$a$a"´"´# # !s!s"´"´"´"´"I"I!s$Í"´$a"´"´#ö"I#ö#ö$a"´%8%8$$$$"Ï$|'%S%ˆ%ˆ'5'5&_&_&_( )h&%8(’)h&&å&å&D'ñ(È(È)3)3'†'†'†'†'†%Ù'ñ'ñ$—'ñ)Ô(''P'P(ý%£%£%£&)'Ö'Ö'Ö&)&)$|&)(â'5#Û'5&Ê&Ê&Ê(w'%n&D&D%%&¯(\%Ù%Ù&¯&¯&¯%&¯&¯%8#‹'»&)h0-™(’'P%£&z('%8%8)h'»%Ù'†(\%%%&¯&¯$Í$Í)Ô8é5#)h%8%8&Q$¤#Î#Î$9%æ%æ'“%E%E$o&%±$%±%±"÷$¤%{#Î%{'(&Q&Q"W÷ÎÎ÷¤‰‰ÜÜHõËËq³`6ܳ³³H›››ééTT}}ÛÛ²ÛÛ²²ÛÛX²Í s £öÍs‹‹´a  öö-Ú˜˜oo€€--ÂoÂooÂoÏ""Ï::dd™™™ìÃÃì™´´´´´´Þ‹aaÂÂë˜ëëµµŒŒ!!!Ή///܉³³}ÐÐ}§§§TõõõHõHé<¿eeV°°9Œ9“÷÷QQ‰‰ `¢Hq` 66‰6³`æ“ib¼¼¼¼ææææbbww¡¡ãã ¹ZZ­kkkÅïïÅ×1­­ÅœB&ÓüO‘‘‘‘[®[…………‚Õ¬Y‚((‚Ž4 ¸úú# Ð g ë>‘‘>‘22222ߎááŽ###vY! / /ÄÄÄÄï11   r"!Iœœœœ!I rÅ!I r rNûÑ!~!~!~ÑÑÆ# œ"I"´$a%8!Þ#U!¨û!¨#Á#Á!=!=!!!"´"´!$a$a# !s"I"I#‹!Þ!"´#ö"I!s$Í#‹#‹$a&# !s#ö#ö"´$a&&%¾$"d$!ù#¦&)&)%ˆ%ˆ( &_( )¹&_( '»&&)h(’&å'»'»'''ñ'ñ* * * * * &¯%Ù)3*u(È%n%n'P'P('('&z(''P%£'%S'Ö'Ö&)'Ö&)$|( ( %ˆ%ˆ&Ê&Ê&Ê&Ê#Á#Á'ñ'ñ&¯&¯$,$,&¯(\* (\'†%Ù%Ù%Ù&å%8(’&å&å*?)h&'P'P$Í$Í&å%8$a&&¯&¯&¯&¯$,'†&¯#U# ('+251É'»$a'»%{#Î$¤"÷$9'“%æ%æ#˜#˜&ò%E'^%±&‡$Ú#Î%{'þ$¤"÷&Q'þ&Q#-÷!{¤÷‰‰ÜÜHõËqq³`ÜÜY³³H›HH¿¿éé§§}}..²ÛÛ..XX Í ÍöI  ‹‹´a  II-Úëëoo---ÓÂooÂooÂo|ÏÏ|::dd™™ì™ÃÃì™´´´´´´Z´Þ‹aa˜ëëëÂbbŒŒÎt!ÎÜÜ/‰Ü‰³³*}}Ч§§Tõõ¢õHõqËé<¿VVV°°9æ99¤¤÷Q‰‰³`¢Hq` ‰‰/ܳ`æ“b““ææ¼bwwNNãã¹ ZZ­kk••Å×1­­ÅïïÓ&Oü‘‘‘‘[[ØØ22 /‚ÿ¬ÕÕ(‚ŽŽ¸ MM# Ð g>‘‘ ë>‘22…… µ µ…2Ž!;Ž!; Ð Ð"}v¬Y‚‚!q!qÄÄœœ!I!I11ZZ rÅœœ!I" rœ!I!Iœ"""U ¨Ñ!~!~!~!~!~!s!s œ"I!"´#‹ 1#U!¨!¨#U#Á#Á!=!="´"´"´!!"´"´"´!s# "I%£#‹!ÞZ!#ö"I!s$Í#‹#‹&$a$Í# #ö#ö"´$a&&%¾$$%¾!ù#¦&)&)%ˆ%ˆ&_( ( &_( &_$a&&&&å%8"´&(È(È)ž&D%(\-c* (\(\)3)3(È''''P'P('(')Ô(''P(ý*Z(­&)&)&)'Ö&)'Ö( $²%ˆ%ˆ&Ê*$(w(w''&D&D&¯&¯$,$,&¯%(\&¯'†%Ù$,'†&å%8&å%8%8%8&&'P'P$Í$Í&å%8$a&%%&¯&¯$,'†%%$Í&z&z)Ô)h&&&'(%{&Q'þ$9$9"Œ%æ%E%E%E#˜$%±&‡$Ú%{#Î$¤$¤"÷"÷$¤"÷#-o˜˜ÂoVV--°Ú-ŒŒ9Œc¶¶÷÷J¤cŒŒ°°o˜˜ÃÃppppÃpÏÏ"|d::‹‹aÍ  Í    aa‹‹ŒŒ¶c÷÷Q¤-€E˜oo˜˜ê—êêfÀ´´ÞÞ´¦¦ùùLùùùÛXÃppp˜˜ëëÂoÂoÂVV--ÂÂë˜--Ú-˜˜˜ë˜˜9ææ9¤QÎÎÚÚo˜ëëë˜ë˜˜E˜˜EEEÚÚVÚ‡VEE4‡Ú‡°Ú‡b{{(( ᇰ°ooãããã    ¹¹ _ ¹ãžñññžñññ’’iiªý''ÿ¬‚‚ÕÕÕÕvvúM^ 4á©üy&‘‘ºg©üÓ&gg> ëÄ@íÕ /¬ÿ¸ e¸ eŽŽŽŽ©©& € ë ë!Ág J Jt!!t!!tt?ì Ãìì øK "uK ø ø"¥"öœïï r r!I!I ¨"U ¨"U!!#—!ê##".#Û«##Û ".".#$²##".".!Þ#‹$a!!"´"´"´Z"´"´$a"´"´"´$a í$G$G$G#!X#Û#Û$²#".#Û"š"š%%$—$—$—&D#Á%n&D&D&D&D'ñ'ñ'†%Ù(\&¯'5%ˆ$²( &_&_%ˆ'5( ( ( &_'¡'¡*û)N(\(\'†%Ù(\(\(\(\)3%Ù$,'†'(È'ñ'ñ'ñ'ñ'ñ'ñ&D&D'ñ)ž&¯&¯%%&¯(\'†'†&”&”%¾%¾'(­%S%S%ˆ%ˆ'5'5'¡'¡'¡'¡%¾'k%¾%¾&)&)&)&)&)&)'%S$|&)'Ö'Ö$,"$,'†%n'&D$—%n'$—&D%Ù%Ù%Ù"#H$õ%Ë'x$$$õ&¢%–#é$¿$¿$¿$¿$¿$¿$T"§$T$T$¿##é#é#³˜˜oÂVVÚÚ°Ú-ŒŒ92¶ccc¤¤J¤¶c99VVo˜˜pppppppÏÏÏÏd·::‹‹a´s  ÍÍÍ  ´´‹‹99¶c¤¤÷¤Ú-E˜ÂÂÂÂEE=êêêffaaÞÞZùùùùù¦¦¦..XpÃÃÃëëëëÂÂoÂ--ÂÂë˜Ú€-€˜˜˜ë˜˜9æ9Œ¤÷{{°°‡-o˜EEEE˜˜˜E˜EòEEÚÚ°‡4°oo˜ò‡ÚÚ‡°‡Ú¼((((44 +°Âãããã    ¹¹¹ f¹ãñDññKž øžå弪ýÔÔ¬ÿÕÕÕÕ‚‚vvMú ¸ŽáO¢&y‘‘gº©ü&Óggä‘Ä@“ÕÕÿ¬ e¸ e¸ŽŽ!;á©©ÓÓ ë ë   J J!!"Ît!!ÇÇì? à à Ãìì øK "uK ø øK!I!I!Iï r r!I!I ¨û ¨"U!! =!ê!X!X#Û".«##Û ".".!X###".".%8#‹"´"´$a"´"´"´!!!Z$a$a!"´"š"š$G$G#!X#Û#Û$²##Û%ˆ%ô"š%%&D&D&D$—#Á%n'ñ$—&D&D&D&D%Ù'†%&¯(â'5( ( &_&_'5(â( ( )¹( '¡'¡)N'¡(\(\)3'†(\(\&¯&¯'†*à'†'†%n')ž)ž'ñ'ñ)ž)ž)ž&D'ñ)ž(\(\&¯#U%&¯%Ù%Ù&”&”%¾%¾%S''''5'5%ˆ%ˆ%ô%ô%ô%ô'k)'k'k$|$|&)&)&)&)'%S$|&)&)&)'†%Ù%Ù%Ù'%n&D$—'%n"ê$—'†$,'†$,$õ&¢%Ë'x%Ë%Ë&¢$õ"<#é$¿$¿$¿$¿&l&l'®&&&&l(%–%–' ëë˜ë>----ÚÚŒŒŒßŒ9ccÎÎ÷÷¶¶cc--€-ÂoÂÃp™Fppppù¦ÏÏ::dd‹‹‹‹IIö£öö  ‹‹´a99c¶!Î÷¤Ú-Ú€ëëëëoÂoÂêê=ff´‹ÞÞÞÏÏÏ"LùùLXX™ì™™ëë>˜ÂÂÂÂÂV-ÚÂÂÂÂVV--˜ëëëoobbb÷÷÷¤‡Ú-ÚoëEoë˜oÂÂÂEE°°°‡‡Ú-oo‡ÚÚ á‡4‡‡ææ“9Q «þQ°]‡‡òŸoãã6ããã¹f!¹ããf¹žžññññuui¼i'ÔÔÔÕÕ‚‚ÕÕYYMMMMáá4Ž©ü&yºggºÓÓÓ"- g‘‘ííí@‚‚‚‚ e¸ŽŽ¸ eŽá©©©ü ë> ë> J!!!!t!!!™!™ Ã!™ì?ì!Ï "žž ø ø!Ï " r r r r r!I"ö ¨ûÑ!~!f"À"À!X!X!X!XÔ".#!X#!X###Û".#$²#‹!Þ 1#‹#‹#‹"´"´ 1 1ZZ$a$a!"´#p#p$G$G###Û#Û###Û".$G$G#p#p$—$—$—$—"#Á%n'%n'%n%n&¯&¯%Ù'†'5'5%ˆ'5&_&_( ( ( ( +f)¹*$(w'¡)N*à)3'†)3*à'†&¯&¯&¯(\&¯(\'''ñ)ž'ñ&D'ñ)ž(È(È)ž'ñ&¯&¯'†'†(\(\(\(\'k$'k'k'%S(­(­%ˆ%ˆ#Û#Û&Ê&Ê'¡%ô(A)î&”$ç%S%S%S%S'%S'Ö$|$|&)$|$|%&¯&¯%''%n%n'''%n%&¯'†%Ù$%Ë&¢$õ%Ë%Ë'x%Ë$¿$¿%–%–&l&l#é'C'®$T#}%*&l$¿%–%–&7Eë˜E˜----VV--ŒŒŒ99Œ¶¶ÎÎ÷÷¶¶cc---ÚoooÂpÙFppppù¦ÏÏ::ddÞÞ‹‹ööIööö  ‹‹´a99c!Τ÷-Ú--˜˜ëëoo===´aÞ1ÞÞ"""uùLù¦™ìì옘ÂÂëëÂÂÂÂÂo©V€ÓÂÂÂÂVV€€oo˜ëëëoobbb¤¤÷¤-Ú€-o˜˜oo˜EoÂÂÂooEE°°°ÚÚ‡Úoo‡ÚÚ‡-Ú‡‡ææææQQ¤Q°]‡‡òEoããããã_ ¹¹66¹ ññžžžžuu¼ii!.ÔÔÕÕÕÕ‚‚ÿYMMMMáᎎ©üÓ € gg ÓÓÓÓg ‘‘ííí š / /‚‚¸ eŽŽ e¸!;Ž©©ü©"˜ ë ë>ð!!!!Çt!÷!™!™ Ã"p!™ìì?u " ø ø ø ø "u r r r rÅÅ!I"ö ¨û!~Ñf¹!!##!X!X #$²#!X##". !X##‹!Þ 1#‹!Þ!Þ"´"´!Þ!Þ!!"´"´$a"´!Ã!à í í$²$²#Û#Û!X$²#Û"."š"š#p#p$—$—$—$—"#Á%n''%n%n%n&¯&¯'†%Ù%ˆ%ˆ%ˆ'5$²$²( ( ( ( )¹( (w&Ê)N'¡)3'†$,%Ù)3)3&¯&¯* (\(\* (È(È&D'ñ'ñ&D&D'ñ''&D'ñ&¯&¯%Ù)3(\%&¯&¯'k'k)%¾'%S(­(­'5'5%ˆ%ˆ&Ê&Ê%ô'¡&”(A$ç&”''%S%S'%S&)&)&)$|&)&)#U%%&¯''%n(È#Á''%n%&¯%Ù'†$%Ë(O&¢%Ë%Ë%Ë'x$¿$¿%–%–&l&l%–%–$T$T%*&×&l$¿#é#é$ŠEVV-ÚÂÂÂÂÂE˜¶cŒ9ÎÎ÷J!!!!cc°VÚÚV€€ÃpÃpÛ.¦¦¦ù|Ϧ¦   Í8888Ísö£‹8´ac¶ŒŒ!{Î!VV˜˜E˜¨ûÒÒê=ÀÞÞÞÞÞÞdd:ù¦"uXX..Ô.oÂoo˜˜ëëÂÂVVVV--˜˜ë˜Âo˜˜€ÚVŒ9bbb99Ú‡-ÚoÂoo-Ú-‡E˜˜EÂÂÂÂo vòòÚÚÚÚ°°°EEEò‡‡‡Ú{({(¤Q((°]‡ÚEòEŸf¹6ãã66$wNûãã¹¹uuuuu "ÈÔÔÔÔÔPýÿÿÕÕí@jÉ#MMŽá4á> ë g©©ÓÓgg gÓ €ÓÓÄÄíí‚‚¬Y#v# Ð e¸ e¸ € €ÓÓ ë>>>t!!"Î!!tt Jìììììì"pàà·· + +· +Z  Þ1 r rœ!I!~!~"U ¨ ¨ ¨ÑÑ!X!X". í í"š"š#p!Ã!Ã#p%ˆ".#Û#Û"´Z!Þ#‹Æ# "I"I"I"I!s# # # $Í$Í í í"š"š#p%#p!Ã#p%$G"š#Û#Û##$,%Ù%&¯"ê$—%n#Á#U%&¯%&D'ñ'''5%ˆ&_( %ô$G$G%ô(â(â( ( '5'5( ( 'ñ&D''''(È(È(È(È'ñ+K(\(\&¯(\''&D&D'†)3&¯(\%Ù%Ù%&¯%n%n&D&D%¾'k%¾%¾$ç$ç'k%¾&_( &_$²%&Ê'¡'¡%¾'k$ç&”$ç$ç&”&”'k%¾&”&”&”$ç$ç$ç%n'&D&D'†%Ù%%#Á%n&D$—%Ù%Ù$,$,$õ$õ%Ë%Ë%`#³$Š&7$T$T%*%*&×&×%*%*#$¿$¿&l&$T%*#}"ݘ€-o˜ë¶cߌÎÎ÷¤ÎÎ!!cc--V©€€ÃpÃp.Û¦¦S¦|)¦L  Í ÞÞÞÞ  öI‹Þ´c¶ŒŒÎÎÎ!VVVVÂÂÂÂEë˜ëû¨ê=¹f1111ÞÞddàù¦Ï"XX....Âo˜˜ëEoo°°]©€€ëëë˜Â˜˜€ÚV9æbææ‡4Ú-ooo€--‡ë˜òEÂÂoooòòÚÚÚÚ°]EEEò44‡Ú{(Õ(þQ((°Ú‡òŸEE ¹6ãã6ãã$wN¡ãã¹¹ÈÈÈÈÈuÈuÔÔÔ'zÔªýÿÿÕÕ@íj##MMá44á>‘g üüÓÓgg g&ÓÓÓjÄíí‚‚Y¬#v#v e¸ e¸ € € € € ë> ë ët!!"Î!!!!!! Jìììì?? à à ··]·!d·Z  Þ1Å"œï$!~"U ¨"U"U#+#+«#". "š"š$G$G#p!Ã!Ã#p".".#Û#Û!! 1!Þ!s!s œ œ"I"IÆ!s!s!s# # "š"š$G$G#p%#p!Ã%#p$G"š%ˆ%ˆ$²$²$,%Ù#U%$—"ê%n'%&¯(\&¯&D'ñ%n%n%ˆ'5&_$²%ô'¡)N'¡'5'5&_&_%ˆ%ˆ( ( 'ñ&D''(È%n(È(È'''ñ'ñ&¯&¯(\&¯'''ñ'ñ)3'†%&¯%Ù%Ù%&¯'''ñ'ñ'k))%¾$ç$ç'k%¾&_( ( &_&Ê%$G'¡%¾'k$ç&”&”&”&”&”$%¾(A$ç&”$ç&”#:%n#Á$—$—'†%Ù%%%n#Á$—&D$,$,%Ù%Ù$õ$õ%Ë%Ë%`#³$Š&7&&#}#}%*%*%*%*&l($¿#&$T%*#}"ÝÂÚ€©©˜˜˜˜Â˜ëŒ9c¶ÎÎ!Τ÷÷÷ŒŒæ9‡ÚV€-F™pÃ.ù¦SS¦¦¦¦Í   8Þ‹‹ö£öIa´Zc¶ŒŒ¤¤÷¤VVVVëë˜ëE똘ÒÒÒÒff‹ÞÞÞ´Zd +·Ï""ÏXX.ÛX.ÂhÂëëÂëëëë--V©©VVÂÂë>€-Ú-Œ9b¼‡‡°EEEE‡ÚÚÚ˜˜oEEÂoo˜˜Ú4‡‡°]˜òÚ‡]{(((ÕÕ((]°‡‡Eòòò¹   ¹_¹¹w$$wãããñDÈužññžýýª WÔÔýª¬¬‚‚í@M ÉvᎸ e>‘‘>O©Ó&‘‘gg&&&ÓjÄ@íÕÕ¬¬vÉvv¸¸ááÓÓ©©   ë> J J!!t J!÷ Jìì Ãi Ãì?····3ààà Þ Þ Þ1Å rœœ$Ñ!~ÑÑ!~#+Ñþ!X««"š$G#p#p%ô"š!Ã%".". "."´"´!"´#ö"I!s!s"I"IÆ# # !s# $Í"š"š%ô$G!Ã#p!Ã!Ã"š"š%#p#Û%ˆ#$²%Ù%Ù$,%Ù$—$—%n''†%Ù'†%Ù(È%n&D&D$²( ( &_'¡'¡(w(w( &_&_&_&_&_)¹( %n%n''+K'ñ'ñ'ñ&D&D'%n%Ù'†(\(\'ñ&D&D'ñ)3'†%Ù'†&¯&¯&¯&¯%n''ñ'ñ'k'k%¾%¾'k%¾)'k$²( '5%ˆ&Ê&Ê&Ê#p%¾'k$ç&”&”&”%¾%¾$%¾(A&”%¾%¾&”&”%n%n$—$—&¯&¯$,"#Á%n''%Ù$,&¯%&¢&¢#H$õ%`%`' ' %*%*$T$T%*&×&&$¿$¿$¿&l&×%*%*%*$ŠÂ--VV˜˜˜˜ÂÂE˜Œ9cÎÎ!Τ÷÷÷99æ9‡ÚV-€™ìÃp.Û²²ù¦¦¦¦¦¦¦Í   ‹‹‹‹öIIö´´´´c¶ŒŒ¤¤÷¤VV˜˜E˜˜˜˜˜ÒÒÞ1ÞÞ´´d·dÏ""ÏXXÛ.X.Âë똘ëë--©VVVV°oÂÂë>€-Ú-Œ9bµbµb¼ÚÚ°EEEEÚ-ÚÚEEÂo˜˜ÂooEE‡ á44]°EEÚ‡°°{(((((((]°4ÚEòòò¹ ¹¹ff  w$$wãããžñÈužKžKªª Wª'ýªÿÿÕÕjÄ šíM v#Ꭰe¸>‘‘>üü&Ó>>  ÓÓ&Ó@íÕÕYY# Ðvv eŽŽÓÓ©©g!Á ë> J J!!t J Jìì Ãì?···· ààà Þ Þ Þ1Å r!I!I!~ÑÑ!~Ñ!~ÑÑ««««@$G!Ã!Ã"š"š#p#p#Û#Û".#Û"´"´"´!"I#ö!s!s"I"I!s!s$Í# # !s í$G$G"š!à !Ã!Ã"š"š#p!Ã".#Û!X#$,$,$,%Ù$—$—%n''†%Ù'†%Ù''&D&D&_&_$²&_'¡'¡(w(w( &_&_&_&_&_&_( '#Á''+K'ñ'ñ'ñ&D&D(È'%Ù'†(\(\'ñ&D&D'ñ'†)3*à)3(\%&¯&¯%n'&D&D%¾%¾$'k'k%¾%¾$&_&_'5(â&Ê#p%%$%¾#:$ç&”&”%¾%¾%¾'k$ç&”%¾%¾&”&”'''ñ!=%%%Ù$,%n'%n%n'†%Ù%&¯(O$õ#H$õ%`%`' #³%*%*$T$T#}%*&&#&l$¿&l%*&×%*%*&7Œ999æ÷¤¤¤!tÎ!----!!÷J9æ99999æ9Œùù¦¦¦¦¦SùL¦Sd::öööI  öö,UÒo˜EE˜ÂoÎÎ!t÷¤÷÷Î{Î(rÅrœIœI¨U¨¨¨û"ÏÏÏ:™™™™..XX˜ëhëë˜ë÷÷÷÷µbµµ€--Ó-€VVÚ-V©-€€Ú€-VV°°oÂoÂooobb99¤¤Î{ÎΤ¤°-4ÉÉE˜°ÚÚÉÉÉÕÕþQ¤þþþ((Q¤þQ(Õ$$$wNNw$f¹ãì?’’'ÔKžžK·] + +“íí@@ šÄĎḸ e"¸22…2©ü©©&&ü©ááááMMMú!;!;¸"vv##‘> gg    € € € € g‘>Ô!.!. Ã??·· + + ø øž ø!~Ñûû = =!ê"À"À!ê =!ê = = · · ·"d ·$"d"d!"$|#¦#¦!ù!ù"Ï$|!! 1!Þ"´$a#‹„!Þ!Þ 1!Þ 1#‹"´"´ í"š$G"š#!X#$²#¦#¦$|"Ï!ù#¦#¦%S&z$Í#ö%£#ö%£$Í$Í$a$a&å%8'P'P'P%£'¡)N'¡%ô)N'¡'¡'¡'¡%ô(w&Ê&_)¹&_&_&å&å'»&'»&'»'»&z&z'P'P('('('&z'»)h'»'»&z$Í&z&z$—&D#Á%n#Á'(È(È'¡%ô%ô%ô&_&_'5#Û'k'k'k'k'%S'(­&”&”'k'k%S(­&)$|$|&)%S'%S%S'%S&D&D%n%n'†%Ù%&¯)3)3'†%Ù%Ù'†&¯%&¢$õ$õ&¢(O&¢%Ë%Ë$õ&¢$õ$õ(O&¢&¢&¢'®)[$T$T$¿$¿&l$¿%`Œ999Œ÷¤¤¤!Î!Î--V°--{{¤÷æ9ŒŒß9cc9æ9æùù¦¦¦¦¦ù¦ùS¦d::ööö£ÍsöPÙ,U,ÙÙÂoë˜E˜Âo{{{Τ÷÷÷Î{ÎÎrÅÅrIœIöU¨¨¨¨ûÏ"ÏÏ:™™™™ÛÛë>Âëëë˜÷÷JJµbµ-€€€-€VVÚ-V€-ÚÚ-ÚVVÂooooobbŒŒbbQQÎ{{{¤JV‡4ÉoEò]°‡‡ÉÉÉ((þQQQþþ((Qþ «þ{($$$wNNw$¹f =ãã?’??!.žKžK + + + +@@@íííá4¸¸¸¸  2Ø2ßüO©© €&©üŽŽŽ4MMMúŽŽ¸¸v Ð##> ë gg !Á!Á € € € € g ë>!. Ãìì!d +·]KK ø øÑ$ ¨ ¨ = = = =!! =!ê = =!ê · ·"d · ·$"d"d"Ï"Ï L#¦!ù!ù!""Ï$a$a!Þ 1"´$a!Þ 1 1 1 1!Þ!Þ!Þ"´"´ í"š"š$G$²#$²##¦#¦$|"Ï#¦%S%S'&z$Í#ö%£'P%£$Í('$a$a(’&å%£%£'P%£'¡%ô'¡)N'¡)N)N%ô)N'¡(w&Ê( ( &_&_%8%8&'»'»&&&('(''P'P('('&z(''»)h'»'»&z$Í&z&z&D'ñ'%n''(È(È'¡%ô%ô%ô&_&_%ˆ%ˆ'k'k%¾%¾'%S%S'&”&”'k$%S%S'Ö&)'Ö&)(­''''%S&D&D'''†%Ù#U%)3)3'†%Ù%Ù$,%&¯&¢$õ(O&¢&¢$õ%Ë%Ë#H$õ$õ$õ&¢$õ&¢&¢'®&&&$¿$¿$¿#%`cß9c¶ÎÎÎÎJ÷!Î---Ú€ÚÎÎ!Îcc¶cccc9Œ9æÏ"|ÏÏÏÏ"|||Ï::    öö ͨUUU,,˜˜E˜ÂÂÎΤ÷¤¤÷¤Î!Î!rrœœœœII,¨ûÒ¨¨ÏÏ"|ddd·ÃFìX..ëëÂo˜˜ë˜!Î!!ŒŒŒæ---Ú©€€VÚ---VÂÂë˜oÂæ9Œ9999æ{{¤¤{Τ÷ÚÚ°°EEEE°°°]òEòòþþ((({(Õ{Î{(þþQþNNN¡¡ûNN =!¹ããf ’??’ªª WªžK "uàà + +í@Äí@@@áᎎ¸¸áá22 µ…Ø[ÓÓ& €ÓyÓÓŽŽŽá##MúᎸ¸v Ð Ð# !Á!Á >>>>!V©ü©>> !Á à à à !Ïu ø ø ¨N$!~¹f!f!! = =f!¹f!à"d · ·"d ·"d"Ï"Ï"Ï$|%S#¦"Ï"Ï"´"´ 1„Z"´!"´ 1 1!Þ!Þ"´"´!Þ#‹$G$G"š%ô%ˆ#Û#Û#Û$|$|%S!ù%S'#¦#¦$Í# # $Í$Í$Í$Í&z#‹%8&&&z('%£'P&Ê%&Ê(w'¡'¡&Ê&Ê(w&Ê(w&Ê&_&_%ˆ'5%8%8$a'»'»+&å&å&z&z'P(ý('('('(''»)h%8(’'P%£%£%£&D'ñ&D&D'ñ)ž&D$—%&Ê'¡%ô&_&_$²&_'k'k%¾%¾&)&)#¦%S&”(A'k%¾'''Ö&)''(­''Ö&)%S%S$—'ñ%n#Á%Ù%Ù%Ù"%&¯%Ù%Ù&¯%'†'†%Ë%Ë&¢&¢$õ#H$õ$õ$õ$õ$õ$õ&¢&¢'x'x&×%*&$T$¿$¿%–#é%`c99c!!ÎÎ÷¤{΀€€---ÎÎÎ! ¶¶ccc9ŒŒ9|)|Ï||)||||Ï::    ööÍ ¨¨U¨ÂoEEE˜ooÎÎ÷¤÷÷¤QÎ{{ÎrrœœIIIIÒ¨UÒ¨¨ÏÏuÏddd·ÃpììXÛÛëëÂEëë˜!Î!!ŒŒ99€€Ó€--V€-©VVÚ€VV°ooEòoÂoÉæ9æ“æŒ9æ{{¤¤{Î÷¤ÚÚ°°EEEE]]]°Eòòòþþ(((Õ({({{(þþQþû¡¡Nšôûû =ffããf ’?ì?ªªýPKžÈu3 ··@íÄ@í““4Žáá¸¸ŽŽ22 µ2ß[ÓÓÓÓÓÓÓÓáá4á## MᎠe e## Ð#g g >>>>©ü©!V>> !ÁÔÔi " "KK"Uû$!~f¹!fff!ê!êf!"À!!à ·"d ·"d ·"d$|!""Ï!"#¦!ù"Ï"Ï"´"´#‹!Þ!!!"´#‹#‹#‹ 1!!!Þ#‹"š"š"š"š". #Û#Û!"!"!ù!ù#¦%S#¦#¦# !s# $Í&z# # $Í#‹%8$a$a$Í)Ô(ý'P%&Ê(w&Ê'¡'¡%(w&Ê%%&Ê( ( '5(â(’(’$a'»)h)h(’(’('('(ý*ª('('&z&z)h'»(’(’'P%£%£%£$—&D'ñ'ñ'ñ&D$—&D%&Ê'¡%ô$²( &_$²%¾%¾%¾%¾&)&)%S'$ç&”'k%¾%S%S)ƒ'Ö'*Z'%S$|&)''$—$—%n''†'†'†$,%&¯%Ù"#U%%Ù%Ù$$$õ$õ$õ&¢&¢&¢$õ$õ$õ$õ$õ$õ'x'x#}%*&'®&l##é%–#³÷÷Q{ÎŒŒŒ9÷¤¤÷--VVoo˜˜ÎÎ÷÷÷J!!¤¤ÎÎ!Τ÷:::ù¦S::::ÏÏ||a´´Iö£öÀÀ——,,UUëE˜˜VŒ9¶¶cÎ{¤JrÌïïÞ‹ÞÞfêê=êê:à +dùùÏ"™™™™ÃÙ™Âë>-Ó€-9ŒßŒJJ÷J€Ó©˜˜˜˜VV-€--ÚÚ-€>ëÂoV°V°ææ“æ¼99bb99¤¤ÎÎÂooV‡ÚÉòEEòòò¼¼iQQþQQQQþþ «þ «f¹ ¹Ü6ff¹¹ãf¹ii Ãiiii·· +···]]@@jí@Äáá ¸áŽ eð J>‘ºg©OÓÓ úMM e¸áޏ¸ e"úú Ð Ð €&Ó €Ó € €Ó   ë>> ë   à à à à ": ·· à!ê = = =ÑÑ!~Ñû ¨ ¨ ¨ =!ê!ê = · · ·"d!""Ï!ù!ùà! ·"d#:#:"d"d!Þ!Þ!Þ 1"´$a#‹#‹"I"I!sÆ œ œ œ"I#!X«!X"š"š$G$G!ù#¦"Ï"Ï$|$|"Ï$|#ö%£&z('$Í# "I#ö#ö"I%£%£%8&å&å&å&Ê(w(w(w(â(â&_( '¡'¡&Ê&Ê(â'5&_( ('('(ý'P(’(’'»'»'»'»&å*?(ý(ý&z&z'P'P'P'P'P'P&z&z%n%n&D&D%n%n''%%'¡%ô&_( '5'5(A&”$ç&”%¾$(A(A%¾%¾'k$$|$|''''&)$|%¾'k$ç$ç%n%n"ê$—%Ù'†'†%Ù#Á'%n#Á$—'ñ%n%n%`%`%`' %Ë$$%Ë%Ë%Ë'x%Ë$Š$Š&7&7$¿##&l$¿$¿&l&l$÷÷÷!Î99Œ9Q¤÷¤--VVooEEÎÎ÷÷¤÷!!¤¤!!Î{÷J:::ù¦S¦:à::ÏÏ||a´´ö££ömmêêUU˜˜ëëV9Œccccc¶{Î÷÷ÅIIÞ‹ÞÞf==ê=êê::ddùùÏ"™™™™ììÂë˜-ÓÓ€Œ99Œ÷÷J÷-€VVë똘V©©V€-ÚÚ---€ë˜o°°°°]99擼99Œæ¤¤ÎÎoo°ڇoòEEòòòi¼i¼þþQ¤QQþ « «þþ «¹ ¹f =ãf ãã¹¹ã6 ¹iiiiiii + + +· + + + +ííj@“Äáá ¸áŽ¸¸ J Jðð‘>g ©OÓÓúúMM e¸á4 e e e¸MMvv € €Ó €Ó € €Ó!Á!Á ë> ë>   à Ãi à à à à ·· à = = =ÑÑ!~Ñû ¨ûû =!ê!ê = · · ·"d!""Ï#¦#¦!à ·"d#:#: · · 1#‹#‹!Þ"´$a%8!Þ œ œ!sÆ"I"I#ö"I#$²#$²"š"š$G$G!ù#¦"Ï&)"Ï"Ï!"&)"I#ö$Í&z$Í# %£#ö%£#ö%£%£%8&å&å&å&Ê(w%(w(â(â)¹( %ô%ô&Ê&Ê'5%ˆ&_( ('(''P(ý(’(’&)h'»'»(’(’%£(ý('(''P'P'P'P'P'P$Í$Í''&D&D''(È(È&Ê&Ê'¡%ô$²&_'5'5&”$ç&”$ç$%¾&”&”'k'k%¾%¾&)&)%S%S%S%S$|&)%¾'k&”&”''$—&D'†%Ù)3'†''#Á%n'ñ'ñ%n%n%`%`%`' %Ë$$%Ë%Ë%Ë'x%Ë&7&7&7&7$¿&l$¿$¿#&l&l&l%ËÎÎÎÎ!ccŒ9{ÎÎÎÚ-˜˜oÎÎ{Î÷¤!!JJ÷JÎÎ!ηd||ÏÏà:ÏÏ||´´´´  ÍÍmÀÀÀUUUoo°°°cc9Œ99cc{!J÷œœœœÞÞ1‹fê=êêdddùùÏ"ÃÃppÙì>>ÂÂ-Ó©bbµb÷¤ÎÎ-ÓVVë똘-€©V€-°°Ú-˜˜o°°VVÚ€bæŒb¼9“{{¤¤ooooÚ‡°ò˜òEòò @“æ“"X «({ « «ÕÕ!‚Õþþ¹¹ f =ã6 fã¹¹iiiiiiiàààà] + + + š@¸¸ e ‡á¸¸ð JtÇÇÇgg‘>üüü©# Р ŽŽ¸ ¸¸ŽŽúMúMÓ €!V©ÓÓ!V© ë ë   g‘ ë Ãi à à Ã!d·à à à =ffûN ¨ ¨$$Ñ$f!"À!"d"d · ·!ù!ù!"!"!!$$$ç$ç#:#:!Þ#‹$a"´#‹#‹$a!!s!s œ œ# # # !s#Û%ˆ%ˆ#Û #p"š%ô$|"Ï"Ï&)&)"Ï#¦%S"I#ö#ö%£%£%£('$Í$Í&z%£%£&$a%8&å%ô$G$G)N)¹( '5'5$G%ô%&Ê&_&_%ˆ'5'P%£(ý(ý)h)h'»'»)h'»'»'»$Í&z(')Ô'P'P%£'P('&z'P'P'ñ)ž'''(È(È'%ô%ô*$%%ˆ'5( $²#:$ç'k'k%¾%¾%¾%¾'k'k&”&”&)&)''&)$|$|&)&”(A'k%¾%n(È'ñ&D&¯&¯'†%Ù'%n#Á'(È''%n&7$Š%`' $õ&¢%Ë%Ë$õ(O$õ$õ'ä&7' ' 'C#é%–%–%–%–#é%–&¢!!{{ÎccŒ9!Î{{€-˜˜o!{{Τ÷ÎÎ÷÷÷JÎÎ!Îd¾¾ÏÏÏÏ::dd||ÏÏ´´´´    ÀmÀÀ¯UUooooV¶¶Œ999cc{{¤÷œœœœÞÞ11f=êff—=dddùù"ÏÃÃÃÃÃp™ì>˜ÂÂ--©bbbµJ÷!!€€VV˜˜˜˜-€VÚ--Ú˜˜o°°‡-bµŒŒb¼99{{¤¤ÂÂ-Ú°EEE˜oÉòò“ @“ @ «"X!‚Õ"X"XÕÕ#/!‚þ¤¹¹¹¹ãã6 f = =ãffiiiiiàààà +· + +íí¸¸¸¸44  ð JÇtgg>‘OOOüv#  ŽŽ¸ ¸¸ŽŽúMúM €Óü© € €©ü>> º g ë‘ à à à à ÷ +à à à =ffûN ¨ ¨$$Ñ!~f!"À! · · · ·!ù!ù!"!"!!$$$ç!!!!Þ#‹"´!#‹ 1"´"´# # "I"I# # # !s%ˆ#Û#Û". #p"š"š"Ï$|$|$|$|$|#¦%S#ö%£#ö%£#ö#ö&z&z$Í&z%£%£&$a%8&å'¡%ô$G%ô( &_%ˆ(â%ô$G#p%&_&_%ˆ'5'P%£'P'P&)h'»'»)h+)h)h&z('(')Ô'P'P'P(ý)Ô('%£%£)ž'ñ''%n''%n'¡$G&Ê%'5(â&_&_(A&”%¾%¾$$%¾%¾'k$$ç$ç&)&)(­%S&)$|"Ï$|#:$ç'k%¾%n%n&D$—&¯&¯%Ù$,%n#Á%n%n#Á%n'%n$Š&7' %`$õ#H$$$õ(O&¢&¢&7$Š' ' 'C#é%–%–'C'C#é%–$õä&Óýýâ⸸  $wAAkkîî&ÓÓÓÓÓPý&&Óyªý&&žñÇ2…\¯ñžññ2…22&&ýýýªÓ&ä‘hhýýýýÈu""ŸŸŸùÏ"uuáŽá4««Ô±^ˆˆ  5ˆó  óˆ5  j½””””jjÊÊÊÊ  55ã666ººã㺠66  ã6llׄ[®NNxË%%%x22Ø2žžžž»h>>hh»ÄYYYY¸¸e¸$$M uuÏuŸLLLþ«'Ô.U!U!!n$È#ñ —!Ù#† , ,!Ù ,Ò!Oõõõ ´7Ѝ+ØUUFFFF±±±±" ÛÛóóoz ÍÍ ¼ååE˜nnëë òEÍÍz!'zz¤JÍͤ¤888åU~~U++77aa äŠ7 ä!ð Cm!– C– C ¯ØØ ¯ ¯!…Ø¿ l•!B S ** !­•• l l! ²!ã 6‰ 6__S !B•" lÓ!€ ª"W#-!€!€!€"Â"Â!ë!ë$"W!€!€$9$9!¶#c"Œ ß ß ß"Œ"Œ !¶$9"Œ"Œ"Œ####"§$T#}#}$Š$Š$Š$Š$Š$Š"Ý"Ý#}!Ð%*&×%*%*%*%*&l$¿%–%–$¿&l&l&l&¯&¯%&¯'ñ&D'''P%£%£%£&'»&å&å'Ö&)''&)'Ö'Ö)ƒ)¹)¹(â(â)¹( &_&_(&l%–%–(„(„&×%*)['®&&&'®&×&×'ä&7%`%`&7&7&7)‘((%–%–%*%*'®'®&s$Æ'I%œ'I'I(ö%œ'#º#º%g%g%g%g%g&'µ&$[$Æ&s%œ'I$&=%g%g$&=%g%g$î&›'r%Å&0$ƒ$ƒ$ƒ%Y'&0$ƒ'%Y&0'Ý'r%Å%Å%Å%Å%Å$î$î&›>&Óýýâ⸸MMwÊ””kkAAy&ÓÓÓÓPýÓy&&ªýÓÓžñÇ…2\ žñññ2…22&&ýýýª&Ó‘ä»»PPýýuÈuuŸEŸŸuÈuu4á4‡««Ô^±55 ±ˆ5 ó ó5â  ½jçç””jjÊÊ^^ˆˆã666`ºã㺠ãã  6ã„×®NN%x%%Ò%2222žžññ»h>>h»hÄÄĬ¬YY e¸ wwM uu""LŸLL«þÛU!!"¯$È("(ø%ž!Ù#†!Ù%3!Ù , ,õõ¢¢  Š7UU+Ø™™FF± ^ ^ ^±±ÛÛ™óoÍÍ  b88˜Enn˜˜E˜ÍÍÍzzz¤¤Íͤ¤88å!’UÑ+ ¯ØØ ä äaa"‘77 ä C–m!– C C– ¯ØØ ¯ ¯Ø!…" lè•!­!­S × × Sè!B¿¿__‰ 6 6‰²! !­ !B•" lÓ!€ ª"W!€Ó!€!€!!!ë!ë$"W!€!€"Œ"Œ!¶#c"Œ$9"Œ"Œ"Œ"Œ !¶"Œ$9 ß ß!e!e$¿$¿"§$T!Ð%*"Ý"Ý$Š!0"Ý"Ý&7"Ý#}%*%*&×#}#}%*%*&l$¿#é#é&l(((&¯&¯%&¯&D'ñ%n%n#ö%£%£%£&'»*?&å&)'Ö(­(­'Ö&)&)'Ö)¹)¹(â%ˆ&_( )¹&_&l(#é#é&×&×&×%*'®)[&&&'®&×&×'ä&7%`(º&7&7'ä'ä&l&l'C'C(„(„'®'®&s$Æ#ï%œ%œ%œ#ï#ï%g%g%g#º%g%g%g%g$[&&$[#$Æ%œ#ï$&=%g%g&='ê''$î&›$%Å&0$ƒ&0&0'%Y&0$ƒ'%Y$ƒ&0%Å$%Å%Å$'r#A#A$î>&&&&55¸¸$$$wAîîîk&&&&ªªªªÓ&Ó&Óy&&žžÇt\\22tÇžñ……  &&&&&€&&‘‘»hýPýýÈÈ"uÈÈuu"ÈuÈ44]]Q«««55   ^55ó óó^^± 甽j””jj      55ãã  66ºgã6 ºã㺺ïBl®××û¡xxNNNN……2…ÇÇžž>>hh>>‘>›îĬ¬Y¬ ¸w$§úLŸLLu"uuÔXX.!ˆ ,#†#†&à)Ï+|+|&u#†#†#†#†!Ù!Ù!Ù ,!OõÌÌa a Ø~~+F™o±±ˆÛ±± ^ ^oÂo¤÷÷÷88å8Án˜˜˜EnÁÍzzzÍ Í!' Q¤¤÷888å++UUØØ!…Ø ä ä7Š7777––!mm! C C+!…Ø!…!B••• ** ×***¿ l••_! _! ! ²_! !­ !B!B"ï"ï!€!€"W ª!€Ó ª"W"Â$o%E!ë ª ª!€#-"Œ ß ß ß!¶#c"Œ"Œ!¶!¶"Œ"Œ!¶#c!¶!¶"< ## ú"§"§"§"#³#³ Y$Š"Ý"Ý$Š#}#}&$T%*#}"§&%–%–$¿$¿&l(&l&l&¯&¯&¯%''#Á%n'P'P# # %8(’(’(’'(­'*Z(­(­(­*Z****(â**(â(ð'C&l&l'®'®(„(„(„*1&&%*%*(„(„'ä&7&7'ä&7'ä(º' %–'C'C(ð+Þ+Þ'®$T$Æ&s$Æ$Æ%œ%œ#ï#ï%g#º%g''%g%g'#„#„$[$[#ï%œ%œ#ï%g%g#º%g%g%g'ê&=$%Å%Å'r%Y'(³''Ý&0'Ý$ƒ%Y%Y$ƒ$ƒ$%Å&›&›$î$î!”#A$>&&&&ââ¸^ww$wAîAA¾k&&&&ýýýýÓ&Ó&yy&&žžÇ\\ßßÇKž22\\ÓÓ&&&&&&ä>hPýýýÈÈuÈÈÈuuuuuÈ44 + +þþ««55   ^ˆˆFóóó^^  îAj½””jj  óó  55ãã`ºã‰` 6ã ºãã  ïBl®××NNxxNNNN……2…ÇÇžž>>»»‘‘>‘AîĬ¬¬Yââ¸e$ÑMúùLLLu"È".XX..ÛÛ!Ù!Ù%3()Ï.Ö0ƒ+|(%3%3%3!Ù!Ù#†%3&V"üÌÌ aa´+++ØUU™Fo±±Û. ^ ^ ^oo¤÷÷÷‹‹å8Án˜˜˜EnÁ ÍzzÍzzz÷¤¤÷88‹8++ØØ+Ø777Š7777––!mm! C C+!… ¯ ¯Ø!…!B••• × × ×* × × l¿••²__! "¹__! S !B!B!B!BÓÓ"W ª#-!€"W ª!"Â!ë!ë ª ª!€#-$9"Œ"Œ"Œ !¶"Œ"Œ!¶\ ß$9#c!¶#c#c"< ##"§$T"§"§#³%`%`%`$Š"Ý"Ý$Š%*!Ð"§$T#}%*&&%–%–$¿$¿&l(&l&l&¯&¯&¯%'''(È'P'P$Í$Í&å&å*?*?'(­'*Z'''(­**'5'5'5(â*(â(ð'C(()[)[(„(„&×(„'®$T&×&×&×&×'ä&7$Š&7&7'ä' %`%–'C%–'C-‹4?+$T$Æ&s&s&s'I'I#ï#ï" #º%g''%g%g'%1%1&&'I%œ%œ#ï#º'%g'(Á%g&=$$%Å%Å'r#¬%Y%Y'&0'Ý&0&0''$ƒ$ƒ$%Å&›&›#A#A$î&›$Ó>>‘‘5ââ5^ ââÖƒÖ)¬¬ƒƒ&&&Óýýýý&&ÓÓ‘‘hhÇtžž¯ ßßññžñ  22Ó&ÓÓhhää»hhh&&&&· +á4°]] +òŸÈȇ4á4«««þóówÊóóóóóóóFÊwwÿ¬)))ÖRÿ  5ˆ  wÊxxxx `ããxxxxËËx%lBBÆlBBã㺠xx%xñžÇ¯ \ ÓÓýªýýªý¬Y¬¬ƒƒÖ0¸¸â¸eââLùLL +·áŽXX«X«.Û!n!n$È)Ï.j3q8x5-)&u&u("%ž#ñ&u&u$>"‘"‘Š¢¢Ì++ØØØ+UÛˆ±ÛˆÛˆˆ.±±ˆ.‹‹b¤÷zz,ÙÙ †,,Íz!'ÍbbbÍzÍÍ88Àm–éU¢õÌ y y yÌÌé–mm C CmmÀm C–+Ø ¯** l l l l••!B!B ×***܉!ã!ã! ! __SS ¦ l l l l ª ª"W"W"Â!#˜!ë#-!€"W"W!"Â!ë!ë"Œ"Œ ß$9"! t!J"÷"!"! t t!¶#c#c#c!Ð!Ð$T"§#}!Ð ú ú"q"q$$#³#³$Š"Ý"<"<#é#é&$T&&$T$T$T$T%*%*%*%*$,$,%&¯'†'†%%'P%£'P(ý'P'P('(')'k))&”&”(A(A)N)N&Ê(w*$*$+Ñ&Ê&l)Æ(((ð*(ð'C&×(„'®&%*&×&&&¢(O$õ(O&¢(O$%Ë&&&'®*,J'C%–%œ%œ%œ%œ&Þ&Þ&Þ&Þ$$%g%g$%%Ò#O$ü#ï#ï%œ'I(‹&Þ%1%1$%%Ò#O$ü'%Ò%Ò$%$ƒ$ƒ''$ƒ&0$ƒ&0'%Y$ƒ$ƒ#A$î$î$î%Y'&0&0%Y%Y%Y%Y$ƒy‘‘ää5ââ ¸ââÖƒÖ)ÿÿƒƒÓÓ&ÓPPýý&&&&‘‘hhtÇžž\\22ññžñ  22Ó&Óy»‘‘»h»»&&Óy +·á4] + +]ŸLÈȇ44á««þ«óóÊóóóóóóóFÊÊÊÿRÖÖÖ)Rÿ  5â  wÊxxËË` ããxxxx%%%xÆï•ïïº %%x%ñžtÇ\\\ &&ýªýýýªY¬YYƒƒƒƒeeâ ¸ŸLLL·dŽáXX«XXXÛ.Á#$È-)6ËB†EàEà=ë0ƒ)Ï("%ž#ñ$È$È%ë$>"‘ äõõÌ y++ØØ+~UÛˆ±Ûˆ ^ ^.Ûˆˆ±±ÛÛååb Q¤ÍÍÙ †Ù †©,,zÍÍÍbÍzÍÍ ¼ ¼å‹Àmé<U¢õÌ y y y y!ð Cmm––mmm!– CØ!… ¯}} l l l l••!B!B ×*** 6‰ 6 6____!­!­ """" ª ª ª ª!" >!ëÓ!€$ ªh!!ë!ë"Œ"Œ2"Œ#Î"!"÷!J"!"!"!"! !¶#c#c!Ð!Ð$T"§!Ð#}"§"§"q"q"q"q%`%`$Š"Ý#é#é%–%–$T"§$T$T'®$T$T$T%*%*%*%*$,$,%&¯%Ù)3&¯&¯'P%£%£'P%£%£&z&z'k)*Å'k)î&”(A(A)N)N(w*$*$*$+Ñ&Ê(+s(('C(ð(ð'C(„&×'®&%*&×'®'®$õ&¢&¢&¢$õ&¢%Ë$$T$T'®&%–'C%–#é'I'I%œ"B%1%1&Þ&Þ&=&=%g%g'%Ò#O!¢#ï#ï%œ'I&Þ(‹&Þ&Þ%Ò'&©$ü$%%Ò$%%Ò&0&0%Y(³&0$ƒ$ƒ&0'%Y&0&0&›$î$î$î'%Y&0&0#¬#¬%Y%Y$ƒýh»ä> ¸â5â5âÖÖÖÖ)Ö¬ÿy&ýýýýPP£ýÓ&‘>‘‘ÇÇÇ22…2ÇÇ!Ç\   ýýýPä>h»h»»»Pýýý + +ŽŽ + + +]LLòŸ +] +·ÔÔÔ   óÊóóóóÊóFÊʃ)ÿÿÖ|ÿÿ5â5âÊÊÊxxxx66ã6%%N¡%%Ò%ïœÆœïBïããxxx%ÇÇñD…ß  ýýÓÓýýýýƒÖYYY00¸¸¸¸¸""uu·dŽáX«...!n$È'K1Y<©F·GGFL:‘+|("%ž#ñ"D#ñ%ë$>#h õH¢¢U ¯+~++Ûˆ±ˆ!5ˆÛÛˆ ^±ˆˆÛÛ8åbzz Í,,°,ÙzzÍÍb8夤÷÷8å88ÀmÀÀ+Ø ¯ y yÌÌÌ y¢¢"Ç!––!!!!m!mm ¯ ¯ S** l"¿¿ l¿!B• !­__ 6!ã 6 6! _ ×"„""" l!€ÓÓ!€ >!ë >!ëý"W#-Ó!"Â"Â"Â$9$9!¶!¶"÷"÷ t"!!Jð t"! !¶#c!¶!Ð!Ð#}!Ð!Ð#}#}#} Ä$$$#³#³$Š$Š#$¿$¿$¿$T"§%*#}%*!Ð%*%*$T&%*(„%Ù%Ù%Ù%Ù(\(\&¯%'P%£$Í('('$Í('&z&”(A)î(A'k%¾'k)&Ê(w*$*$*û)N*û*û+s)Æ)Æ((ð(ð(&l'®'®*1&×$T'®(„*1&¢&¢%Ë'x'x%Ë%Ë%Ë$T'®&&%–%–#é#é&s( &s&s&&%1&Þ'%g%g%g''&©$ü$Æ$Æ'I'I&'µ&Þ%1$%'$ü#O$ü$ü$%%Ò&0$ƒ#¬'%Y%Y''''''&›&›%Å'r'''%Y$ƒ"Ö'%Y$ƒª»h‘‘ ¸ââ5ˆ5ÖÖÖÖƒÖ¬ÿy&ýýýýýýPPy&‘>‘‘ÇmÇ………2Ç! \  ýýªý‘‘»hh»»ýªýý + +ŽŽ··· +ŸŸŸL· + +]ÔÔÔ   óÊóóóówÊM ÊÊ))ÿÿ||ÿY5â5ˆwÊÊÊ%%%Ëãã6ãxxûN%%%ÒïBlïœïBããããxÒ%xÇÇDñ22  ýýÓÓªªýýÖƒY¬YYƒƒ¸¸¸¸ee""uu· +áŽX«..."_$È$È*¥4³C]F·GGFL=ë0ƒ)Ï%ž#ñ"D'K%ë$>#h ¢õ¢¢U¨UØ+++Ûˆ±!5ˆÛˆ!5ˆ±!5Û!5Û‹8bzzzÍ,,V,Ù!'!'zzb‹8¤¤¤¤‹888Àm!ÀØ+ ¯ y y yÌ¢¢!m C Cmmmm!"Ç"Ç"Ç ¯ ¯!­ × × l" l l" l•!B !­__‰ 6‰‰_! !­S* ×""¿ lÓ!€!€#-!ë > >!ë ª ª!€!€"Â!"Â"Â$9$9#c !J!J"!#Î!J!J t"!!¶#c!¶ !Ð!Ð #!Ð!Ð#}#}#} Ä$%Ë%Ë"%`$Š$Š#$¿##$T"§#}%*%*%*%*%*&$T&×&×%Ù%Ù%Ù%Ù&¯&¯&¯%#ö%£&z&z&z&z&z('(A&”&”(A)*Å*Å)(w&Ê*$*$)N'¡)N)N- +s()Æ(ð(ð)Æ('®'®(„(„'®'®(„*1&¢&¢%Ë'x'x%Ë'x'x&&&&'C'C%–%–$Æ&s&s&s&&%1#„#º%g%g%g%Ò%Ò&©$ü$Æ$Æ(ö%œ$[&&Þ%1%Ò%Ò&©$ü&©&©%Ò$%$ƒ&0%Y%Y'''#¬%Y%Y''&›&›%Å'r#¬''%Y$ƒ&0%Y#¬"Ö\žñññ ¸ ¸$wÊw ¸ââMM óy&ýªýý&&ÇÇžžñžñž2…22222ß\\\¶\\22ÇtKKñDÇžžtÇ2ß2ߟLuuLLuÈ«þþ«X«Ô'þþþþ½jA”RÿÿR甽j¬ÿÖ)M ÊÊÊÖÖÖ)ÿRÖÖ g㉺º º××®[„ׄ„ÆÆ®[[®®[®®&&£ýÓÓýªhhÓ€ªª ¸ââúM$ѳƒ0AAÄÄ««XXi@íá;;;"Ϧ!S"¯$\(0î>VF·HdHdG";g-)&u"¯"¯"¯"¯#Ó#Ó"& y yÌ¢¢ÌÌõõoo É ÉoˆÛ!5ˆEE ò˜Á  n88bµ‹å88ÍzÍÍbbbÍÍÍÍÍzÍz77aaa´ ä"‘ C–ÀÀ++!…!…m– C ¯Ø+ y"&!O¢ ä ä a ¡ ¡"N ¡"N ¡ô ¡!xËô"NË!xËËËË___! #Z!­ × ×"„ × !J!J!J!¶!¶#c#c!ë >"Â"Âh!!"Â"W"W"W ªÓ!€"W"WÓ!€"W$!ë!ë#˜!ë"݃ Y#³!›!›$$#}#}%*#}"§"§$T$T##%–#é$T"§#}&×$¿##é#é&l$¿&l$¿#ö%£%£'P&z&z&z$Í&å&å(’&å'P'P'P(ý(â(â( ( *$*$*û%ô(w(w(w&Ê%ˆ**%ˆ*1+Þ'®)[)Æ)Æ)Æ(&¢&¢'x'x'x)%&¢&¢(„(„%*&×($¿(&l'x$%Ë%Ë'ä'ä&7$Š%g'&=$$ü&©%Ò%Ò'ê'ê'ê$$ü$ü#O$ü'ê$%g'" %g%g%g$%$%(V&©'%g"ã$(~&Ñ'§$M$¹(&f$¹%Y#¬%Y'%Å$&›&›%Å%Å%Å%Å$î$î$$$ñžž¸e ¸$ww$¸ ââ   M&Óªýýý&&žžñžñž…2……22…2    \\22ÇtžžžñÇññÇt…2ß2ŸLuuŸŸuÈþ«þ«X«ÔQ«þþ½A”ÿRRÿ甽jRÿÖ)ÊÊ MwwÊÖÖƒÖ¬ÿÖÖºº66   º„„®[1„11ÆÆ®[[®®[®®ÆÆ&&ýý&&Pýhh»»&Óýý ¸ââúMÊwYÖƒ››ÄÄ««««Ãíšáᎎ"Ϧ!S!"¯(*:2›>VC]C];g/¬)Ï#"¯"¯"¯"¯ y y yÌÌõõÌÌ yõõÂoo É ÉoÛˆˆÛëEEënnn 88b8888Íz zbµbbÍ!'zzÍzzÍ77aa´a7Š–émmØØ!…!…!À– C"\ ¯Ø!…"& y"ü!O"‘7a´ôô ¡"N ¡ôô ¡!xË ¡ ¡!xËË!x!x!x!xË! ! _! S ***}!­!­!J!J!J #c#c#c!ë >"Â"Âh!"Â!"W"W ª"W!€#-"W"WÓ!€ ª"W!ë!ë >‘"Ý"Ý""$õ!›"q"q#} #!Ð#}$T$T$T$T##%–#é$T"§%*%*$¿#%–%–&l$¿#$¿#ö%£%£#ö$Í$Í('&z&å&å(’&å'P'P%£'P(â(â( ( &Ê&Ê)N'¡(w(w(w&Ê'5(â(â*(„*1'®)[(()Æ((O(O'x'x'x)%&¢&¢(„(„%*&×&l&l&l$¿%Ë%Ë%Ë%Ë'ä'ä$Š&7'(Á&=$&©$ü'''ê'ê&=&=$ü$ü$ü&©)—)—'(Á%g%g%g%g''&©$ü'%g&='ê&Ñ%$%ú%ú&f&f$¹&f#¬%Y'%Y%Å$$î$î%Å%Å%Å%Å$î$î%Å%Å&›…Çžžâââww$$¸    MwÊýPýP&ÓPýÇÇÇÇÇÇÇ…2  \\\\ß2 ¯……\ žžžñññKžÇÇÇÇ\\2ßòŸŸŸŸŸLLþþ''þþÔ'«þ½jjÿRÖ)½”çÿÿ))Ê  ó   ÿÿ¬¬Ö)ÿRãã    ºº1„„„®11BB®11ׄ[[œœïï&ÓªPPPPPh»hhýýPýââ¸úú$$YƒÖ››îîþþ««Ã÷··dÏ |¦¦U!#†(+1Ä9O7¢1Y*¥%ž"D!!!!!O!O!O¢õõÌõõÌÌ¢õroFF ÉóFo Ɉ۱˜˜nÁ˜˜nn ¼!’88åbb¤¤÷÷bbb Q Q Q¤¤ Q Q¤7777ŠŠ77ÀÀ C–Ø+Ø!… C–!! ¯"\ ¯ y y yÌ77  ËËË!x#%ËôôËË!x!x"N ¡ ¡ ¡#% ¡ô 6!ã__¦S ×* ×*"!"! !¶!¶ !"Â!ë!ë!ë!ë!ë >"W$ ª ª ª ª#-!€!€!€"W"W >!ë!ë#˜"Ý"Ý"Ý"Ý$"q$õ#H"§ ú #!Ð#}#}!Ð%*$¿####}#}&&$¿$¿#é#é$¿$¿"<#é# $Í%£#ö&z&z'P%£%8&å'»'»'P'P&z&z(â(â(â(â(w(w(w(w(w*$(w(w)¹( '5(â*1(„'®)[(ð(ð)Æ)Æ(O&¢%Ë%Ë(O(O&¢$õ&×%*%*#}&l&l%–%–%Ë$%Ë%Ë&7&7%`' &=&=%g%g%Ò'&©&©'ê&=$&='%Ò&©&©'ê'ê''%g%g$&='%Ò$%$%&=&='ê'ê)T'§%$%$'<'<'<'<$ƒ"Ö%Y%Y$î$î&›&›%Å%Å$î$î'r%Å%Å%Å&›2Çtññâââwwww ^  úMw$ýPPý&ÓPýtÇÇÇÇmØ…\\¯ \\2…\\22 \žžžñžDñžÇÇ\\2…ŸLŸŸòLLòþþÔÔþþÔÔÔ«þ½jjjÿR)|½jA”RR))Êw  ó MMÿÿ¬¬)|¬ÿãã    g „1„„[[11lÆïï[®„„„1[[ïïïïÓ&ýýýýýýhhhýýýªâ⸸úú$$¬Y0ƒîîîîþX«« + +·dÏ |!S!S!U#†%3'¶+-”+ç(ø%ž%ž%ž!!!!!O!O"ü!O¢¢ yÌ¢¢ÌÌõHroóó É É ÉóFˆÛ±˜˜nÁ˜˜nn ¼888åbb¤¤¤¤b¤¤ Q¤¤ Q Q¤ŠŠ777777m C–+ØØ+– CmmU ¯"\ y y y"& ä ä!»!»!x!x!xË!x!xôôËË!x!x"N ¡ ¡ ¡Ë!xô ¡ 6‰! ! !­ ×* #Z ×*"!"!!¶ !¶ !"Â!ë!ë#˜#˜ >!ë"W ª"W"W"W"W#-!€#-#- ª$#˜!ë!ë#˜"Ý"Ý"Ý"Ý"q Ä!›#H"§$T!Ð#}#}&×#}#}$¿#!e!e#}#}"§&&l##é#é$¿$¿#é%–&z$Í'P%£('(''P%£%8&å'»$a*ª'P&z&z(â(â**(w(w(w(w(w*$(w(w)¹( '5(â(„*1)[+'C'C)Æ)Æ&¢(O%Ë%Ë&¢&¢$õ&¢&×%*%*&×((%–%–%Ë$'x'x&7&7' (º'ê'ê%g%g%Ò'(V(V&='ê&=$'%Ò&©&©'ê'ê''%g%g&='ê%Ò'''&=&='ê$'§%ú%$%$%%'<'<$ƒ"Ö#¬'$î$î&›#A$$$î$î$%Å%Å%Å(H2ß…\\ââ ¸w$M wwww ehh>‘hhh»\¯\ ÇDñññtDžññžñÇ \\¯žžñžññññññžžžñ44] +°]á4Ô''ÔÔÔÔÔ'')ƒÿÿÿR|)jA”½çç^^ˆ5ÊwÊÊÖ|ÖÖjj666ãN¡%x××[[BïÆÆ®®[[BïÆÆÆÆsœïÆÆ&&Ó&‘>hhªªýýPýPý  $ww$Mú00¬Y¬¬¬¬þþ'..4á···d  !Ù!$\&u&u'K(ø'K%ž'K%ž!Ù!Ù!"¯!O!O y yÌÌ¢Hõ¢õ¢aa7Šo™F ^±± ^FFóFFFF™˜EnÁnn˜˜÷¤÷¤ Q¤÷÷¤¤¤¤88 ¼88 ¼å8ŠŠ  ÌÌÌ~Ø ¯ ¯+ØU+!… y y¢!O!O!O y y‰ 6__ ¡ ¡ËËô ¡!x!x ¡ ¡G ¡! _ 6!ã ¡ô ¡ ¡!­!­!­ * × 2 ß#c!¶"Œ2 !¶#˜#˜"Â!"Â"Â"Â"Â!ë >!ë!ë#-#-$Ú!€"Â"Â!ë#˜"W"W#-!€!›!›#H#H#³#³$Š"Ý##"<#é%*%*$T"§#$¿####"<'C'C#é"<#é%–#é#é#é%£%£%£'P(’&å$a&%£'P$Í&z+)h)h)h(w(w*$(w(w(w)N)N'¡)N(w(w(â%ˆ&_( („(„'®)['®'®&+'ä&7)‘)‘(O(O$õ&¢&l(&l&l%–%–%–%–&7&7' ' 'ä&7' ' &=&='%g(V(V''&©(V&©&©'''ê&='ê)—'%g(V&©&©(V''(V&©$%%Ò''$M%ú%$&Ñ&Ñ&Ñ%$&Ñ#¬%Y&0$ƒ&0&0%Y#¬&0$ƒ'Ý&0$ƒ&0%Y%Y(H222\\55 ^$úMwwwwâ⸸»>‘»»h\¯\ ÇñžžžtñññññDÇ\¯\ žžžñžžÇÇññžžžøžñ44 +· +·ŽáÔ'ÔÔÔÔÔÔÔÔÔ))ÿÿÿR|)½Aîj½””^^ÛˆwÊÊÊÖÖÖÖjj½ããã6¡N%x„„[[ïBÆÆ®®®®ïBÆÆÆÆsœïÆÆ&&&Ó>‘ýýýýPýýPMMw$$wúM00YYYYY««''Ꮇ·d   $\$\$È$È%ž'K'K%ž%ž#ñ!Ù!Ù"¯!¢¢ÌÌ yõõõ¢!O¢aa7ŠoóF± ^± ^FFF™™™F™E˜n nnEE¤÷÷¤ Q¤÷÷÷÷÷÷‹åb‹‹ ¼å!’77 ´ yÌÌÌ+++Ø ¯ ¯ ¯ØØ y yõ¢¢¢"&Ì 6!ã! ! ¡ ¡ËË"N ¡ËË ¡ ¡G ¡! _ 6!ã ¡"N ¡ ¡SS!­ }*!­!­ ß"Œ!¶ ß ß !¶!ë!ë"Â!!!"Â"Â!ë > > >!€!€!€!€"Â"Â!ë#˜"W%±#-!€#H#H#H#H#³#³"Ý$Š!e!e#é"<#}#}$T"§#!e##$¿$¿%–#é#é#é#é"<%–#é%–%–%£%£%£'P%8&å&'»%£'P&z$Í&'»'»'»&Ê&Ê*$(w(w(w'¡*û*û)N(w(w'5'5)¹( („(„+)['®'®'®)['ä&7'ä'ä&¢&¢&¢$õ(&l&l&l#é'C'C'C$Š'ä' ' &7'ä' ' &=&='(Á&©&©),%Ò&©(V&©&©''$&='ê&='%g(V&©&©(V%Ò%Ò(V&©'%Ò%Ò),'§%ú%$&Ñ%$%$%$#w#¬%Y"Ö$ƒ&0&0%Y#¬&0$ƒ&0$ƒ$ƒ&0#¬#¬$î   2ßââ55 M$Ñwwww¸¸âh»‘‘‘‘>‘  22ÇññÇÇžñÇÇtÇÇ  22ñžžžžžKKtÇÇÇñžKñáááá + +ááÔ'''Ôþ«þ«ÿÿRR))ÿÿç:””””ç”^^55wÊ óÖƒÿÿ””j½ã㺠Ë%Nû„×®[ïBÆÆ„„„„ÆÆÆœœœïssªªýªhhh»ýýýªýP&ÓÑÑMMww$$0ƒƒ0¬00««þ««X««ŽŽ··;; è; ,%3#†##%ž'K$È$È&u$È#† ,!Ù , y"&!OõõõÌH¢¢¢  77óFˆˆ ^±Fó ÉFFóF˜˜  ˜E n¤¤ÍzÍÍ÷÷Íz¤¤‹8b‹8bb ¼777ŠÌõõ ¯ ¯ØØ ¯ØØØØ"& y y y¢¢!O¢! ! _! !x!x"N ¡!xË ¡ôËË!x_! ! ! !x"N ¡ ×"„ × ×* ×!­!­!¶#c ß ß!¶!¶ !¶!"Â!ë!ë$o$o$o!!"Âh"Â"W"W"W"W#˜!ë"Â"Â#-#-"W"W$$"q"q""!0"Ý!e¸"<"<#}#}#}#}$¿##é#é#$¿$¿$¿#$¿$¿!e#é#é"<#é&z$Í%£%£%8&å&$a&z&z&z&z'»&&&%&Ê)N)N*$*$(w*$*$(w&Ê*$( ( (â*(„*1*1(„&×(„&'®' (º$Š&7)%)%&¢(O&l&l'C%–'C%–&l&l%`' %`%`%`' 'ä'ä&=&=&=&=$ü&©''''),'#º'&=&=&=&=%g'&©&©''&©&©(V&©(V(V$ü(V&Ñ%$%ú%ú$M$M%$#w$ƒ$ƒ%Y#¬%Y''Ý&0'''%Y!)"Ö#¬!ÿ#A\\\ß2ââ55Múw$$$Ñw¸¸âh»‘‘‘‘>‘\\22tÇžžtñžttÇÇtÇÇ\¶……KžKKžžžžÇtÇÇDñžž4Ž44]]4ŽÔÔÔÔþ«þ«ÔÔÿÿRR))ÿÿ”ç”””””A^^55Êw ó)ÖR¬””Ľã㺠xx¡N„×®ïBÆÆ11„„Æïïœïssªªªýhh»hªPªýªýÓ&$$úú$$$$0ƒÖƒ00þþ«þX««ŽŽ +d;á; è ,!Ù!Ù ,!n$È"D#ñ&u#&u$È!Ù!Ù ,Ì y¢¢¢¢ÌõõH¢aa77Fóˆˆ ^±FóoFFF™˜˜nnE ò n¤¤zÍÍÍ÷÷zͤ¤å8 ¼8‹bbb77Š7 yÌ¢¢U ¯ØØ ¯"\!…!…!…!…"& y y y!O!O¢!O___! ËË"N ¡Ë!x"N ¡!xËË! _! ! ËË"N ¡ ×"„"„** ×!­!­!¶ ß ß!¶!¶#c!¶!h!ë!ë!!"Âh!"Â"Â"Â"W"W$ ª#˜!ë"Â"Â#-#-"W"W$$$$#³ Y"Ý!0#!e"<"<#}#}!Ð!Ð$¿##é#é#$¿$¿$¿#$¿$¿$¿#é#é#é%–&z$Í"I%£&å%8$a&)Ô&z&z&z&'»'»'»(w&Ê%ô)N*$*$*$(w*$(w(w(w( ( '5(â(„*1+Þ*1*1(„)['®' (º&7'ä'x'x(O)ü&l&l(ð'C'C%–$¿$¿%`#³' ' ' (º&7&7&=&='ê'ê$ü&©''),),'%Ò'''ê'ê'ê$%g'&©&©'$%&©&©(V&©&©&©(V(V&Ñ%$%ú%ú%ú%ú%$#w&0&0'%Y'(³'Ý&0(³%Y%Y'$ƒ&0%Y'$îkâââ5ââ5âM wwâââ⸠5â$wMMúMóMÑww$ww M$$MMâââ úMMâ⸸úMw$ƒƒÖÖ”îAA%ÒNNN¡NN„1[®BB ºººÊó ±^ ±±55óó       óÊjjçîj½A”BBBBÆll6 ºããgº@@ÔÔ«þii¼iÃÄÄAA”AAîÄăƒƒƒwwMM¸¸<<º ºº==IIssµ‹!8öö Í Í"å"å$’$’%Ô"z!£#P"å!8‹Þ± ^ˆˆ±±±±c½ççm!Àm ¯+~Ué–ÀÀèè¿¿•è_²²GôË,,ë똘,,Ù,VV †Ù ^ ^±± ^ ^± ^±±ÛÛ± ^ˆÛR¥ )!Öç ”½½ É! óˆ!5 ^" ¡ôËˉ 6_"¹ !­ !­!­"„ ×# +° †"3 ò ò ò ò!þ#«!'zå!’å!’"§M úM!Ð!Ð!Ð # Y¬""!›!›%Ë"q"q Ä!›#H$õ#H Ä Ä #!Ð#}!Ð!e###"÷$¤"!#Î"Œ ß$9"Œ#˜%E#˜#˜"Â$o"Â"Â#é#é"<#é"<"<$¿$¿"§$T#}&×$T$T#}%*'5%ˆ%ˆ%ˆ%ˆ%ˆ%ˆ%ˆ'¡'¡%ô%ô$G'¡&Ê&Ê)ƒ&)$|)ƒ*Z*Z+0+0*û*û)N'¡(â(â'5(â)Æ)Æ+s)Æ)Æ((ð'C&×&×(„&×'®'®'®)[(4&‡'^%±$o&&&'É&&)v&ò(Ÿ'É&$ +'d(;(;%·%·%·'d'd'd%·%·'Ð'Ð'Ð&#$Æ$Æ)Í( %œ%œ)Í( &='ê'ê'ê$%'''$Ó&€$Ó$Ó'W'W&€#&%ß'Œ%ß%ß%ß%ß$2$2&&&ì&ì%ª%ª'W'W%ªkââ5â5âM wwââ5¸ 5âÑ$MMMúMMwwwÊÊ$ Mwwúúâââ  MM¸¸ MÑ$ƒƒÖÖîîAAÒ%NNN¡NN„×®[ïï ºººÊ ó^  ^^^55        óFÊjjAîjA”BBBBlãã ºã㺠ii@@ÔÔX«iÃiiÃÃÄÄjÄjÄîî›îAîÖÖƒ)$$ú ¸¸º gg==IIssµÞ‹öö  $’$’$’$’%Ô%Ô#P!£!8"å‹!8 ^±ÛÛ±± ^ ^c½ççÀÀm ¯+~ ¯ C–ÀÀèè¿¿•è¿¿²! ²²Gôq,,˜˜EE,,Ù,Ù † ^ ^±±±±± ^ ^ ^ˆˆ± ^!5ˆR ÿ )!Ö"A ” ÉFóˆ!5 ^±ô ¡!x!x 6!ã²! !­ ×"„!]!]"3 † ò òEE!þ Q!'"Ô#?!’!’å"§MM ú!Ð!Ð!Ð #" Y#³#³#H#H"q"q"q Ä!›#H!›#H Ä Ä #!Ð!Ð #!e###"÷$¤"!#Î$9"Œ$9"Œ#˜%E#˜#˜$o"Â!!â"<#é"<"<"#˜#˜"Â$o#˜#˜#é#é!e!e#é#é"<#é#}!Ð"§$T%*&×$T$T%ˆ%ˆ%ˆ%ˆ$²&_&_( (w&Ê%ô%ô)N'¡%ô%ô%S''(­'Ö)ƒ(­*Z*$*$,¨)N(â%ˆ( )¹)Æ)Æ'C(ð)Æ()Æ((„&×(„%*&×&×'®'®&‡$Ú%±'^(Ÿ&ò'É&&ò&ò&&&ò&ò(Ÿ&ò&Ž(;(;$á%·)'d'd$á&Ž)))}&#&ù&ù( 03Û0*£(ö( $Æ&='ê(Á'$ü$ü$ü$ü#ý%ª#ý#ý$Ó(-'W'W&¶&¶% &¶%ß$2&¶&¶&&&ì&ì%ª%ª&€#&&€A¾w$$Ê5ââw$MM$wMM5ââ    MúM MM$$ ¸ââwwMMMú$$  ^  ¸¸¸5ââA›î¬¬ãïïÆBBãgg55±^â55ˆˆˆ55 ^  óóÊwÊ  AAA”××11llxxxxxxxx““i«þþ«X««þiiiÃYYƒ00ƒ¬YîAîAÄÄjîAÄq›îî›$$ww$wúúggº û¨¨¨®œœööÞ1!8‹"å!8#¼"$'"z Í"z Í"z"z"z É"v± ^ ^ ^½½½½½½+++ØU+Ø ¯ ¯Ø+U ¯++ **!B;ËËÜ 6²² † †,ÙEEEE Áë˜ÙÙ±±± ^ÛÛ± ^ˆˆ ^ˆˆ±½½çç¥ ÿ ) )±" !5!5 ^ ^#¸" ËË ¡ ¡ ¡ ¡ ¡ô•!B!B• l¿•!Bn "Ÿ"Ÿ!]!] † † ¼"i ¼å8 â # #"§ ú"q"q#H!›!0"Ý"Ý!0!›!› Ä Ä!0"Ý"Ý"Ý ú ú"§ ú ##}"§"§"÷"÷ t#Î#Î#Î#Î"!%±"W$Ú&‡$Ú$Ú!€!€"<#é#é"<"<#é#é%–$¿$¿$¿##$¿$¿$¿&_$²&_$²$²$²#Û%ˆ&Ê%%ô'¡'5'5'5%ˆ'k*Å(A)î(A)î&”)î+f+f*(â(w&Ê'¡)N)[++'®)Æ)Æ)Æ)Æ(((&l'®'®&'®) %±'^'^&ò&ò(Ÿ(Ÿ'^%±%±'^'^'^(4(4'Ð'Ð'Ð'Ð'd)(;&Ž&#'Ð&#&#&#&#&#'Ð0ì>TD2@Ø3(ö( &s%Ò%Ò%Ò'%Ò%Ò#O$ü'W'W#ý#ý&€(-&€&€&K&K'!'!%ß%ß&¶&¶&'Â&'Â%ª"P&€&€&€AkkkÅ$www5ââ$wMM$wMMâ5â    ó MúMM$$¸ ââww  Mú$$   ^ ¸^â5âîîƒ¬¬ãããããïïÆïï㺺55 ^5ˆ5ˆˆˆ55^ ¸^óóÊwwÊ  AçjjAî„„„„Ælxxxxx%%““¼iþ«þ«X««þiÃÃÃYYƒÖƒ0Y¬Aî›îÄjÄîAÄî››î$$$$w$MMººgºûN¨¨IIöö‹Þ‹!8!8"å#¼""z Í Í"z Í"z"z"z"v É É É± ^ ^c½!j½½+++ØUØ+Ø+UUØØSS**•è¿¿qË 6 6²², †,ÙEE˜˜nnE˜,,°°±±±ÛÛ± ^!5!5" ±ˆˆ±½½ççR"¬ ) ) ^ ^!5!5 ^ ^" ^ËË ¡ ¡ ¡ ¡ ¡ô!B•!B• l¿•!B !È ò ò!]!] † †"i ¼$"i ¼ ¼#?!’ "<"<â!Ð!Ð"§$T"q"q!›îƒ!0!0ƒ#H#H"q"q"Ý$Š!0!0 ú ú"§ ú!Ð!Ð"§"§&Q"÷#Î#Î#Î#Î#Î"!"W"W$Ú#-#-#-#-#-#é%–%–#é%–#é#é%–$¿$¿#$¿#!e&l#$²&_&_$²&_&_(â'5%&Ê'¡)N(â(â(â'5'k'k&”(A)î(A&”)î)¹)¹*(â(w&Ê'¡)N'®)[++(()Æ)Æ)Æ)Æ()Æ)[)['®)[) ) '^'^&ò&ò&ò&ò'^%±%±'^'^'^$Ú(4)}&#$v'Ð'd%·&Ž$á&#'Ð)}&#&#&#'Ð)}7 EI9Eß=,P( &s'$%$%%Ò$%'$ü&©'W'W%ª%ª&€(-$Ó$Ó$ž'ø'!'!'Œ$2% % &'Â&$h%ª%ª&€&€&€Akkkww MââââwÊ úMMMM¸¸¸¸5â55wwMMMMúM55â5MM M$Êww ¸â¸¸ ¸¸ e¸kkY¬ƒƒã=gºººººï•Æïïgºã㸠â5^^ ^^^55  55MóóóÊÊ  ½½jjjjj××®BBïB¡ûN¡¡N%x¼iiiþþ'«þ@@ÃYYY¬ÖƒYYî›qÄîîÄÄAîww MwÑ$$=6=x%ÒÒ[[s   ‹‹‹!8""""#P!£"z"z"z"z"z"zóó É!5ˆˆÛ½ç ”½½U++Ø+U+~+Ø~ØSS S l¿•èË 6ܲ°°ÙÙEE˜˜˜˜EEV°°ˆˆ±±± ^!5!5 ^±± ^ˆ!5 ^±½½ç ”RR ÿ ÿ ^±ˆ!5ˆˆ#¸" "N ¡ô ¡!x!xô ¡ l l!B•!B"ï•• ò ò ò ò † †!]# +!’!’!’!’!’å"i ¼ "<#¸#}#} ú"§"q Ä"q ă!0""$"q Ä"q#³#³""!Ð!Ð!Ð!Ð ú"§%*%*%{"!"!#Î#Î#Î"!"!!€$Ú#-#-$"W#-#-#é#é####%–#é#é"<$¿$¿$¿#$¿##&_&_$²&_&_( ( %&Ê%ô'¡'5'5+f)¹'k%¾'k'k(A(A'k%¾( )¹*(â&Ê(w)N)N'®)[(„(„(((ð***(ð(ð*1*1)[+'^) &‡)á(Ÿ(Ÿ'É'É) '^%±'^'^'^&‡&‡&ù&ù%L&ù$á$á&Ž$á&ù&ù'Ð'Ð'Ð'Ð'Ð+*3pB…GŒEß8â+z'I'I(V$ü&©$ü%Ò%Ò&©&©'W'W&€&€%ª%ª%ª%ª'!'!%t'!&¶&¶%ß%ß%?&ì%?#’$Ó&€%ª%ª$ÓAkwwMúââââ$wóMMMMM¸¸¸¸â5ââÊ$ú   M 5â5úú Mwwww ^<¸¸¸  ¸e¸¬YÖÖããºgººººïïÆ•ïÆÆº ãã^±5â^^^ ^^ˆˆ^^ˆˆMM  ÊÊMó½jjj½**®[BBBïNNN¡¡N%x¼iiiþþ''þ«@@ÃYYY¬ƒ0YYAHÄAAÄÄAîjÄ$$ M$$ÑÑ==Ò%ÒÒ[µs   Þ!8‹!8 b b""!£ö    Í Íóó Ɉ!5ˆÛ½ç ”!j ¯++Ø+U+~~+++U ¯SSS¦¿!B•ËËq‰‰²ÙÙ˜˜˜˜˜˜˜˜°ÛÛ±± ^" ˆˆ ^±±Ûˆ± ^ç ” ÿ ÿRR± ^!5ˆ!5!5" ^ ¡ôô ¡ËËô ¡"""ï!B•!B!B!B ò ò ò òÙÙ!]# +!’!’!’!’!’å"i ¼ "*Ò*Ò(O(O(O(O)ü)ü)v)v&'É(4(4) '^'“%æ'“%æ%&½&½&½'/(Ü(Ü(Ü(p%%&Ã&Ã(p&Ã&Ã&X&X&X&X&=)—)—'ê(Á'$$%g%g#º#º$ü(V'),$h&%?%?)'W&€&€%t'!&K&K&¶% (c&¶$2%ß&¶&¶$ž$ž'!%t%ªâMMwʬÿƒƒÖÖƒƒwÊMM$$$wâ55  â5Aîk¬¬ƒƒ$w  â5A”AAÖ0¬¬¬YY¬kkYÿÿ¬ƒƒƒÖººãã  ïïsÆBB%%ûN  5ˆ±±±^Êó  ^ˆ5ÿÿÿÿAç½5â    wÊ®[ׄïB º==gººº“@iiii@í""LŸ4á +·e¸e¸úúÑѸ¸$$úMî”ăƒÖÖîAîîYYY¬¨NÒÒã[[ÞÞ[µ b‹"å Í ÍI!£"Dêê —!Ù!Ù!Uo É ÉˆÛ± ^½½RR ) ) ä7 aÌõõ7Ša ¢¢¢õË ¡ôô ¡ËË ¡ôÜ܉ÜÙÙÙÙ!È  ò˜°!]ˆÛˆˆFóóóˆ!5ˆÛ± ^"∽½ ” ”!j½½½ ”ç½½ ÿRR ÿ!B!B l l!B!B""!Bè l l l l••E˜  !]!] †"3!È!È!È!È!]!]°# +"q"q Ä"q$ Äîî"< "' ' (º*g'ä)‘*Ò*Ò(O(O(O(O(O(O)v)v'É&&‡&‡) '^'“)@'“%æ&½(j(j(j%‚'/'/'/(p(p(p&Ã&Ã(p&Ã&Ã&X&X&X&X&=)—&=$(Á'&=&=''%g%g&©&©%Ò$%$h&%?%?%ª'W&€&€%t'!&K)¥% &¶(c&¶$2%ß% % &K&K'!%t'WâÊwwÊÖÖY¬¬Y¬¬MMúúw$ú e ¸ ¸¸¸ A”ÖÖ¬¬$$wwâââ⬬ÖÖ¬YY¬kAA¬¬Öƒƒƒ¬ÿgºººãããlÆïïïï%û¡ ¸^ ¸^5âóów^^^ Ö)¬¬AAAA ^^ óóÊw®[„1ÆBïããºgãii“@@“iiŸLŸŸ4ááḠMM§ú<<úM$$ÄÄY¬YîîjÖƒƒƒÒ%ûûggº[[µµµµµ‹!8"z Í Í"z —êê —!Ù ,UUo É Éˆˆ±±½½½RR ) )7Š´aõ¢ÌÌ7Šaa"ü¢ÌÌGôË ¡ ¡!xËôGôG²²‰‰Ù †,,E˜E˜ÙÙ †,±± ^ooFFÛÛÛÛ±±ˆ!5 ”ç½½"Aç!j!j!j!j½!j||| )!B••è¿¿ l¿•••• l l¿ l òE ò ò †"3°!]#u!È"Ÿ"Ÿ"3"3"3#à"q"q"q$õ$õ!›!›!e!e"<"(º(º*g*g)ü)ü)ü(O(O&¢&¢(O(Ÿ(Ÿ(Ÿ&ò) ) '^) '“)@&½(j)@)@'“)@'/%‚(()G'š%í'š%(p'š'š'/%‚&X('%g''''&=&=&=&=%g'*-]),'%?%?%?#’%ª'W&€(-'ø&K&K&K&¶% $2%ß&¶% "…%ß%t%t'ø$ž&€¸ú§ M¬¬ÖÖÖÖ¬¬M  ú MwwóMwÊ55⬬ƒƒYƒƒM M wwMúA”¬Y0ƒAAÖƒƒƒAîAîÒx%%x%ûû„„[[Æûû%ÒÊwÊʈ555  ó ˆ5ˆ5””AA))Ö0 ¸ ^ó M ®„„[®®® ºggººÔÔÔ@@á4 +]áááŽúú$www§úú T$ÑÑÑ$$¬YYYîîă0qÄAîêêê=ê11Þ‹‹Þ‹‹II Í Í    , ,!Ù!Ù!U ,ooÂoF™oRRRR½½:õ¢Ì yaaa´7ŠŠŠÌÌ y yG ¡ËËôôôô_! _²²‰‰,,Ù † †ÙÁnEE ò˜nnÛÛÛˆˆ.±± ÉóFóó|| )|½çç!j ” ”!j½½ !­ èè l l!­ * × l l l l°°°° † †"3 †°!] † † ò$L!È !›!›#H!›#³#³!0!0 "<"§"§!Ð#}#é#é####!e##³" Y"""""ÓÓ!€$Ú!€#-#-$Ú&$o"Â!!ë#˜%E#˜"§$T #!Ð"§$T$T"§#}#}#}#}#é%–$¿$¿#¦%S&)&)%S%S&)&)( )¹'5'5'5'5( ( &”(A)'k'k)%¾'k'¡)N(w(w*$+Ñ*û*û,*g*g*g+©)ü)%)%+©+©)ü)ü'x'x)%'x(4(4(4)á) '^&‡(4'((Õ'þ'þ&½(j'“'“&X((&X()²'/%‚&Ã(p&Ã(p'/#Õ%‚'/&=&=''&=&='(Á&=&=$&=*n1"*n'&€$Ó&€(-+ó- +ó(™%ß%ß"…%ß'!%t%t%t'Œ$2$2$2"ñ&K'!#Ç%ªeúMM ¬¬ÖÖ0ÖYY MMM MwwMM$wââ5âYY00Y¬ƒ)MúMúwwúMîAY¬ƒ0AAƒÖƒƒAîîA%%%%x%ûû11[[ÆÆlû¡Ò%ÊwÊʈ5ˆâMM óˆ55ˆAA””))ÖÖ ¸¸  ó M®[„„[®`   ã=ggÔÔÔii““4á· +áá4á ú$Ñ$$úMúú$wwwwwY¬îîă0YYÄîA===êÞÞÞ‹1„ÞÞII  "z   !U ,oóFoRR¥¥:çHõ yÌ´ a´Š777ÌÌÌÌôôôôôô_! ! ²__‰‰VV,,Ù,,Ù nëEEEnnÛÛˆÛÛÛ±" oóFóó||| )½!j ” ”½½ ” ”!j!j½½S!­!­ •• l l!­ ×* l l¿¿!]°°Ù"3 †"3!]°ÙÙ ò ò !È#H#H!›î#³ Y"Ý"Ý"<"<"<#é ú ú #!Ð #é$¿$¿##!e#"#³#³" Y Y Y#³$Ú!€#-#-#-!€#-$Ú&$o"Â$o#˜%E#˜!ë"§$T#}!Ð"§$T&$T!Ð!Ð#}#}#é"<$¿$¿#¦%S&)&)%S%S&)&)( &_'5'5'5'5&_&_(A&”%¾'k*Å)'k%¾%ô'¡(w(w(w*$,¨,¨,*g*g*g)ü(O)%%Ë&¢)ü(O(O)%)%'x%Ë(4(4&‡(4%±'^(4&‡'((Õ'þ'þ&½(j%æ)@)²((&X()²'/%‚&Ã(p(p&Ã%‚%‚'/(Ü$$''&=&='%g&=&=&='ê%g(Á''&€$Ó(-0Ž<µA¼<µ/M'Œ$2"…%ß'!%t#Ç#Ç%ß%ß%ß%ß$ž$ž%t%t'WM  Mƒƒ¬ÿƒƒ00w$w$MMMú$w$w ¸ââÖƒƒ0¬ÿÖÖw$$$MM$wÅîAAAÅYƒ0kÿ¬00îAxx%%xËNN11×„ÆÆïï%%NNÊÊwÊ55     ó  55½j””ÿÿÖÖ¸¸¸ Móww„„®®„„„„ ºg 6þ«þþ@š¼] +]·áá]· úúúú§úM$$w$$w úYY00›AîîYYƒƒAîîAgºgg[Þ1ÞÞIö s Í !£ö , ,UU É Éóó ÉRRRRrÌ¢õŠŠa´7 ä  ÌÌ¢¢ËqGô!xËË܉__²²²_,Ù,°°E˜n!ÈEEë˜Ûˆ±WÛ.Û"â! ! óFóóRR ) )ç ”!j½½½ç ” ”"Aç ” ×$1 ×*!B!B" l ×*!B!B l¿,"3!]!]# +!]!]!]!]!] !È ò ò$"qî!›"Ý!0""## "<"§ ú ú ú¸!e#é%–#$¿#é"<"Ý"Ý"""Ý!0 Y"$Ú!€"W"W"W"W!€#-$o"Â"Â$o#˜#˜!ë!ë!Ð!Ð#}!Ð$T$T#}#}&$T%*#}#é"<##"Ï&)$|$|'Ö$|$|&)$²&_&_&_%ˆ'5&_&_&”$ç$ç$ç'k)))&Ê&Ê%ô'¡*$+Ñ+Ñ/+,ë)‘)‘+>)ü)ü)ü&¢)%)%(O(O'x%Ë&¢&¢(4(4%±'^&‡(4) ) (Õ(Õ(Õ(Õ'“)@'“'“(Ü'/%‚'/&X('/'/%%'š'š'/%‚'/'/%g%g&=&='')—&=#º#º%g'&=&=(Á%g&€&€&€5•D?EìFÃ;,“%ß#\% #Ç%t#Ç%t% &¶%ß)9%t%t%t%t&€â MMúƒƒ¬YƒƒƒƒÑ$w$MM Mw$$w ¸0ƒ0ƒ¬Y0Öw$wwMMw$ÅîA”îÅY¬Öƒk¬YÖÖîAxx%%%xûû11„1ÆÆïïÒÒûûÊÊwÊ55     M  ˆˆjAA¬RÖÖ  ^   w„„®®„„„„gºººãã«þþþííii +· + +4Ž··úúú §úúM$$$ÑÑ$MMYYƒƒîîîîYYƒƒî››îããgggµÞ‹ÞÞöIÆs sIö!Ù , ,"¯"¯ Éoóó ÉRR¥¥½½½½¢õŠŠa  ä"‘aaÌÌ¢¢ôGËË!x‰ 6²²_²,Ù †Ù°°E˜ÁÁ ò ò˜EˆÛ±±ˆÛÛˆóóF™FFRR ) )ç ”½!j!jç ”"A ”"A ”*"„"„ ×è!B¿ l!­!­ ×*!B!B" lÙ †!]!]°!]!]!]# +°!]!]#u!È ò ò"q Ä!›#H"Ý$Š""!e!e "<$T"§ ú ú!e¸ ")ü)ü-V)ü)%)%(O(O*Ò)%(O(O&‡&‡'^) )á(4%±) (Õ(Õ(Õ(Õ%æ'“'“'“'/%‚%‚'/)²('/'/&Ã&Ã'š'š'/%‚%‚%‚''&=&=%g%g&=&=%g%g%g'$$%g%g(-(-)Ú5•D?EìE6*æ$2&¶% %t'!'!%t% &¶%ß%ß'!'!%t%t$Óï111ÞÔ«þÔÔ'Ô"Èu"ùLLŸu"ùŸ4á + +LL"u· +ááí@Ô««í@iiiœœÆÆïïïœ%ÒxxûûNNÔÔ«þÔÔ««· + + +44 +·IIsÆÇÇDž‘‘hhhhžñžž2……Øñžß2\\AAAAƒÖÖƒMMMM$$MMMM  ¸¸¸¸ªWªýªW€€ttžKß2ß2ßß ¶22  Ó€ÓÓ€€€€žžžKžKKKýª--˜ëÂøø!!Î!ÎÎ!cccÎ!{!{!‰ 6‰Ü ¡ ¡ ¡ô_! ²_ ¡ôGô¿¿ l lS **!B•è•¿¿••±±ˆˆFóóóççc½Ø+!Àmm  77ŠŠaa°Ù,°°°°˜ òEEÙÙ°zz Q Q Q Qzz"3"3 † † ò ò òE y"&"ü"ü!O"üÌ y#2!… ¯ ¯ ¯!…!… ¯"\"\ ¯ØØ ¯"\"Ç!!!"Ç"Ç C#"W"W#-#- ª ª"W ª ß ß!¶#c#c!¶"Œ2"÷"!%{"÷!J#Î#Î#c!¶$9$9!¶#c#c#c$¤"÷$¤"÷#Î#Î$¤"÷"W$$"W#˜%E&$o$$%±%±%E#˜"Â$o$Ú#-$$$Ú$Ú%±$#p%&Ê&Ê%#p&Ê&Ê(­'&)&)'#¦''%¾'k%¾'k'(­'Ö)ƒ(­*Z'(­'*Z-´*Z+Þ+Þ+,µ*1+Þ)[+,,)‘)‘(O&¢(O)ü(„&×(„(„)['®)[)['C'C'C(ð'C%–%–%–%ß%ß'Œ'Œ%ß%ß%ß'Œ)Ú(-&€(-(-&€&€&€'Œ'Œ(c&¶%ß%ß%ß%ß&€(-'W)%ª'W&€&€$«()²- 6¯?: .N)G$@%í$@#i%&Ã%&#&#&ù%L&ù(¦%L&ù&#B„„„1Ô'QþÔÔ'ÔÈÈuÈŸLLŸuÈòLŽá + +LL"u +·44@“ÃiÔ««@íiiiœœÆÆïïœï%Ò%%ûûûû«þÔÔþþ] + + +áá +·œœsÆÇÇññää»»»»»»ñžññ2…2…ñžÇÇß2\\””AAÖ))ÖjÄÄjjjMMMM$$MMMM  ¸¸¸¸ýªýªýª€&Ç!žKß22ߌ2¶ 22\\Ó€ÓÓ€€€€KññžKžKKªýÓÓ˜ë oøø!!!{ÎÎÎ!ccc!ÎÎÎ 6‰Ü‰ôôôG_! ! _ ¡ôô ¡¿¿ l l¦S**•è•!B¿¿••±±ˆˆFóFF½½çç½½+~ÀÀmm  7777´´° †Ù°°EEEE † †!]°zz Q Q Q QzzÙÙ † † ò ò òE y"&!O!O¢!OÌ y!…Ø ¯ ¯ ¯!…!… ¯"\"\ ¯!…!…"\ ¯!m!!!! C C$$!€!€ ª ª"W ª"Œ"Œ !¶!¶#c"Œ"Œ"÷ t t$¤"÷#Î#Î#c!¶"Œ"Œ!¶ #c$¤"÷"÷$¤#Î#Î"÷$¤$%±"W ª!ë#˜$o"Â$$$$#˜%E$o"Â#-$Ú$$#-#-$"W#p%%%%#p%%'(­&)&)(­(­(­%S'k))'k'(­)ƒ'Ö(­*Z'(­*Z*Z,,-‹-‹.b,µ*1(„)[+*g*g)‘)‘(O&¢(O)ü*1(„(„(„'®)[)[)['C#é%–'C'C(ð'C'C%ß%ß'Œ'Œ$2'Œ)9$2$Ó&€&€(-&€$Ó&€&€'Œ'Œ(c&¶%ß%ß%ß%ß(-&€'W%ª#ý%ª&€&€"þ&X(()G.N*ô%í'š%í%í$@#i%&Ã%$v$v&ù%L%L&ù&ù(¦&#Æ[[„1ÔÔ''þ«««òŸLòuuòŸuuÈuááŽáuu"u + + + +@@í@ÔÔ«XiÃ@“i¼ÆÆïïïÒûN%%%ÒÔ««þþþ«4á‡4444áÆsÆÆDñžñññ»»7ä7‘ÇÇ……¯\DžÇÇ ¯¯\AAjjY¬ÖÖj””jÄîî$$ww$wMúMMwwe¸¸¸ÓÓ&€ªWªªøKñK222ßß…ß2  \\ýªÓ&&ÓªWtÇÇÇžžKKýª-€!Eë o!Îø ¥"RøÎÎ 9 9 9 9øø$Õ&‚$f___Ë___²ôôË¿¿••SS Sèè l lè!B¿¿ ^±ˆÛ™FFF ”çççc ¯UUé–––ŠŠ7ŠŠ7aaÙÙ°°,,ÙÙnnEE°°°° Q Q Q Qz!'z ÙÙÙÙ ò ò ò ò y"& y y y"&!O!OØØ ¯ ¯ ¯ØØ ¯$ !…ØØ#2 ¯"Çm!ð!ð!ð!ð Cé!€#-$ ª"W"W"W ª#c#c#c#c ß$9#c ð!J#Î"!#Î"!$¤$¤"Œ ß ß ß#c !¶!¶!J!J"!"!#Î"!"÷$¤$$$Ú!€!"Â"Â$o"W"W!€#-!ë#˜$o"Â#-#-#-$Ú#-#-#-#-%&Ê#p#p$G"š$G$G'%S&)&)'(­%S%S$ç&”))'Ö'Ö(­(­)ƒ'Ö'')ƒ+0,,,µ,µ-‹+Þ)['®+Þ+Þ'ä)‘(º(º(O(O'x)%(„*1,µ,µ&×&×(„&×(ð'C'C%–(((&l&¶&¶% % %ß'Œ(c#\%ª%ª%ª%ª&€(-(-&€(c&¶$2$2(c&¶%ß'Œ%ª'W&€&€$Ó(-)Ú&€%‚%‚&X$«%í)G'š%í%í%í"“$@%%&Ã&Ã%L#Ÿ'Ð$v#Ÿ%L$v'Ð&#Æ[[1ÞÔÔÔÔ«þþXòŸŸŸuuLŸÈ""uááŽá"""u]]]·í“@í«þiÃ@“i¼ÆÆïïïœïBx%û¨%%%ÒÔþþ«««þ4á4‡444áÆsÆÆDñžñññ»»ä‘‘‘ÇÇ……¯ññÇÇ\\¯AAjjÿ¬ƒƒÄAAîî$$$Ê$wMúMM$$¸eee&&&€ýªýWKžøøßß2ß22Œß\¶ ¯Pý&y&ÓýªtÇttžžžžªW-€˜˜ o!Î ¥ø ¥ ¥!!ßßß 9ø"R2==ø8‚&"¹_Ë__²_ ¡ ¡Ë"¿••SSS •• l lèèe¿±Û.óFFFç:cc::cU ¯Ué–––77ŠÝÝŠaaÙÙÙ,,  EE!]!]¤¤ Q Qz!'ÍÍÙÙÙÙEE ò òÌ yÌÌ y"&!O!OØØ"\ ¯ ¯ ¯!…!…"\"\!…ØØØ ¯!! C C C C!ð!ð!€Ó"W"W$ ª ª"W!¶!¶!¶!¶ ß$9!¶!¶!J!J#Î"!"!#Î"÷"÷"Œ$9"Œ"Œ#c#c#c "÷"÷"!"!#Î"!"÷!J"W"W#-#-"Â!!"Â$$!€#- >!ë&$o#-#-!€#-#-#-#-#-#p%!Ã%%ô$G$G$G'%S&)&)#¦%S''&”(A'k'k'Ö'Ö(­(­)ƒ'Ö%S(­+0)ƒ*Z*Z++*1+Þ+)[*1*1)‘+>*g*g(O(O'x)%(„-‹5.b&×&×&×(„(ð'C(ð'C(((&l&¶&¶#\&¶'Œ%ß&¶% 'W'W)%ª&€(-(-&€(c&¶$2$2&¶(c$2%ß%ª'W&€&€&€&€&€&€'/'/$«&X'š'š%í$@$@$@$@"“&Ã&Ã&Ã*&ù%L&#&##Ÿ%L&#&#'Ðsœïii@@i¼“íuuuu4á· +44····· +áŽ4áŸòu"Xþ««Xþ“í@““@i[[[®ûûûûûûûû«««iá444áá4áÆÆÆ…Ø¯¯……PPýPýýy&…… \…2Ø…\¯\\¯¯¯¯¬¬ÖÖ½jî”00Y¬AAââ$$   úM ââ‘ëhhýý€€ßß¶ ttttßßß2ttÇǪª&&ÓÓýý  2Œ2… ¶€€€ÓWWWW!ÎÎ!ccŒßÎ!KøÎ)Ü;uEƒAO+†Ë²²_ËËô ¡_²¿èè}} !B••• ¦¦Û. ^ ^ˆˆ|||Ïcc::– CééUaaa´a´´´ë˜nÁE똘 !È  °!]Ù †8!’ ¼ ¼#« Q Q¤n E ò òE ò ò ä ä!»!»¢¢¢¢!m!mØ!…!…Ø$ ¯!…Ø!À C CÀm C–!ð C C C&Ó#-#-"Â!#˜!ë ß"Œ ß"Œ!¶!¶ !¶#Î"!!J ß"Œ #c#c%%#c%#c!¶#c"!#Î"! t"Œ"Œ"Œ"Œ!ë!ë >!ë!"Â#˜!ë$%±&‡$Ú#-#-$Ú#-"Â"Â!ë!ë!ë!ë!$o#p%!Ã!Ã#Û".".#Û%¾"d&”&”$|&)'(­(A&”&”&”'''''Ö&)'*Z)))î(A+s)Æ*,J*1*1*1*1+>,ë)‘)‘(O(O)ü)ü'C*.Í)Æ$T'®(„&×&×&×&'®'C'C&l&l'ø'ø$ž'ø% &¶'Œ%ß)o)o'Â&'Â'Â&&&K'ø$ž$ž(Î*{%t%t%?&ì&ì&ì&&'Â'Â%#i%&Ã(p&Ã%%$«$«#Õ%‚'/%‚'/(Ü%·'d&Ž$á%·%·%·%·'dsÆÆœïííi@@uuuuᎷ +44 + + +d· +áŽáŽLŸu"««ÔÔþþ««@@“@@íi[[[®NN¨NNNû¡««««Ãá4áááá4áÆÆÆ…2¯¯¯¯……PPPýPPy&……\ 2……2 \\\ ¯\\¬¬ÖÖjAAƒƒ¬Yîî<âwÑúúúúM ââ>>hhªªÓÓßß ¶!Çttßßß2ttÇǪª&&ÓÓý£  ßß2… ¶ÓÓ€-WWWWÎ!t!!¶!æ 9!{ÎKøÎ#(,`9È3ç$Òq²²²²ËËô ¡_²__¿••** !B••• SS±±Ûˆ ^ÛÛ||| )çç–éééUU ¯aa´ a´´ë˜ n˜˜˜˜ n  °!]Ù †åå Q Q Q!þ!È E ò òE ò ò7"‘#h#h"ü"ü¢¢!mÀmØ!…!…Ø"\"\#2!…!!––m!– C!ð#!ð!ð!€ÓÓ#-"Â!!ë >2 ß ß"Œ!¶!¶#c!¶#Î"!"÷!J"Œ$9 #c%#c!¶#c#c!¶!¶#c"!#Î#Î"!$9$9$9$9!ë!ë >!ë"Â!#˜!ë$"W#-$Ú!€$Ú!€#-"Â"Â!ë!ë!ë%E"Â"Â!Ã#p#p#p#Û".#Û%ˆ$$&”&”$|&)'%S(A&”#:&”'''''Ö)ƒ'''k'k+›-H- +s*,J*1*1(„(„+>)‘)‘)‘(O(O&¢&¢(ð(ð(&l&&*1(„&×&×'®)['C'C&l&l'ø'ø)¥&K% &¶'Œ%ß'Â'Â&$h&&'Â'Â$ž&K&K)¥,(*{'!'!&ì%?&ì&ì&&&&#i%%&Ã&Ã%&Ã&Ã&X&X%‚#Õ%‚'/'/%‚'d%·&Ž(;%·%·$ +$ +'dsÆÆïï@@@š@íí@ŸŸuÈᎎá44á4]· +·á4··LŸLLÔÔ««««@@@íii[[[[„1®x%%xx%x%ÔÔiiá‡áááá· +Æïï\\Ø2¯\\¯yyy&££yÌ…2…22…2…\\2………\¯¬¬ÿÿjjjjYYƒ0AAAAââ<<MMúMwÊMM⸸hh€Ó€Ó ¶  !ÇKñ  ßßñžtÇýªWª€€ÓÓßßß22ß¶ ªý€ Ú Ú€WªÎt!Î!¶ 9 9ÎÎÎ!ÎÎ$Õ(/$ÒËôô²²‰‰ËËq‰‰ 6 6èè¿¿* ×*} l¿è• ×**}ÛˆÛÛˆˆ±| )RRçç½½Àm––+++~ŠŠ a77ŠŠnnE˜EëÁÁ nEEÙ †°°ååå8¤ Q Q¤"Ÿ òE ò#u  òEa!»"‘"‘"ü!O yÌm!–– ¯!…!…!…!…"\"\ C C C––!ð!"Ç"Ç"Ç"Ç"Ç"W ª ª ª#˜!ë!ë >2"Œ"Œ"Œ#c #c!J!J$¤$¤"Œ"Œ ß"Œ%#c"Œ"Œ!¶ !¶!¶#Î%{#Î#Î$9"Œ#c#c"Â!#˜!ë$o$o"Â$o$Ú!€!€!€"W%±!€$Ú$o$o!ë%E!$o"Â$o!Ã#p$G$G#Û#Û$²&_$ç$ç$ç&”%S%S''$$$ç(A(­''Ö'Ö)ƒ)ƒ'Ö'Ö(A(A*Å*Å- +s)Æ+s+)[)[)[+>'ä(º(º)%)%(O&¢**'C'C'®'®*1*1&×(„)[)[(ð%–&l$¿'!(Î(Î'!%ß'Œ'Œ%ß'Â'Â&ì%?&ì&ì'Â&%t'!'!'!(Î'!'!'!%?%?&'Â)o'Â&ì&ì%í'š&Ã&Ã&Ã&Ã&Ã(p'/%‚$«('/'/&X)²)è&Ž%·))'d%·%·)Æïï@@@@@í@“Ÿù"uᎎá444‡ + + +·Žá +dùLLL««««@@@íii[[®®1„[[%x%ÒÒ%%Ò.Ôii44áá44· +Æœœ\\22¯\¯yyy&PPyÌØ…؅؅…2 ¯2………¯\¬¬YÿjjYYƒÖ”îî”ââMMúMw$úú⸸hh»-€€Ó\   ttKK\\22ñž!týªýªÓÓ&&ßßß2…2 \ªý€€€€ W!!!ÎccŒŒÎÎ!{ÎÎtÎÎ!xËôô__‰‰ËËˉ‰ 6Üèè¿¿}** × l¿è•*}*}Ûˆˆˆˆˆ ^±| )RRçç½½Àm––++~+ŠŠ aŠŠ77nnE˜˜˜nnÁn˜˜ †Ùåå8‹J Q Q¤ ò"ŸE ò   òE   ä ä!O¢ yÌm! C C ¯!…!…ØØ ¯ ¯ C C C––!ð"Ç!m"Ç"Ç"Ç ªý"W"W!ë >#˜!ë"Œ"Œ"Œ"Œ!¶!¶ #c!J!J!J!J ß ß"Œ$9% "Œ"Œ!¶ !¶!¶ t"!#Î#Î"Œ$9#c#c!"Â!ë#˜'É'É&!!€!€!€!€ ª$!€$Ú$o$o#˜#˜$o$o"Â$o%#p"š%ô%ˆ%ˆ$²&_$ç$ç&”$ç%S%S'''k'k(A(A'(­'Ö'Ö&)&)&))ƒ(A(A*Å*Å+s)Æ)Æ()['®++)‘)‘*g*g'x'x)ü(O(ð(ð'C'C)[)[(„(„(„&×'®'®(ð(ð&l$¿%t'!'!(Î)9'Œ%ß'Œ&&&ì%?&ì&ì'Â&'!(Î'!'!*{%t'!'!%?%?&$h+)o%?(™%í'š&Ã&Ã&Ã&Ã(p&Ã'/(Ü&X&X%‚%‚&X&X&Ž&Ž'd'd'd%·$ +$ +%·¨ÒÒûN««««ÔÔ4ááá + +4áÃ@@iiiiÃíš.XX@@@@@í@@[[„×ïïÆûN%%gº + +ááá444««ÔÔii11[[»»h»ä‘ä‘»»ääPP££m\¯……Ó&&yä‘‘‘AAîAjîAMúwÊ ¸ ^w$MMwwM  ¸ee¸¸¸ß22ß¶¶22    žžttÇtKž \  Wªýª>>둞žñž  ß2¶  ¶ŒŒŒŒøø!ÎŒß   oÂ!±W€€ËËô ¡_! ‰‰ËË!xGôôô‰‰Üܲ_‰ 6 6‰__‰‰_²ÛÛÛˆˆˆ|| )!Ö )Ï||õõ¢¢ÌÌ––mmØØååå88å‹8Íz÷¤bb8ååå"i"i ¼ ¼å#? Q Q Q!þ¢!O¢¢    !! C–ÀmÀ !»!»!»¢¢õ!O y"&"& y7 ä ä"‘hh!h >‘!!!ë!ë!"Â!ë!ë > >!J!J!J#c!¶!¶!¶!J"÷!J!¶#c!¶#c#-#-$"W!ë!ë#˜!ë"Â"Â#˜(Ÿ3ï:£.è#- >!ë"Âh ª$#-#-#-#-!€#-#˜#˜$o" #Û".%ˆ'5%ˆ#$²$ç&”'k%¾(A(A'k'k%&Ê'¡%ô( ( ( ( '%S(­(­'k%¾)*Å)%)%)%'x*g(º,*g(„*1)[)[&&&×(„(O&¢&¢(O'x)%(O(O&7&7*g(º'x)%'x'x&K'ø%t(Î'ø'ø&K)¥&K&K&K'ø(c&¶'Œ)9*F&ì&ì(™'Â&&&$h$h&ì%?(™&ì%?&ì%L(¦'Ð&#%L%L(¦&ù$v'Ð%L%L%L&ù&#$v$@'š%í%í%&Ã$@%í$ +ûÒÒ¨ûþþþX'ÔÔ4ááá + +4áÃ@@iiiíšÔÔ.««“íššG@““[[„1œBÆûNxxgº + +ááá44Ž««ÔÔii11[[»»»ä‘‘ä»»ääPªýýÇÇÇ\ ……&yy&‘äääAAAîÄqîAMú$w ¸¸ w$MMww Me¸¸¸¸¸ee2…2ß  ßß¶¶¶¶ññÇ!!tKø¶ \¶ýªªý>>‘‘KKžK¶¶Œß ¶¶cŒŒßßKK!Î 9Œcc o ªÓ-ËËô ¡! _‰‰ËËšGôô‰‰‰‰²_܉ 6‰²² 6 6_²ˆˆ.ÛÛÛ ) ) )|||||H¢¢¢ÌÌ!ð–ÀÀØØåå8åå88åzÍ÷¤bb8ååå ¼bå夤¤ Qõ¢¢¢    !! C–Àm!m!» #h#h¢¢!O!O y"&"& y7 ä ä"‘"Âh!h#˜!ë!!!ë!ë"Â!!ë!ë!ë!ë!J"÷"÷"÷!¶#c!¶!¶!J"÷!J"÷#c!¶#c%$Ú$Ú$"W!ë!ë!ë#˜"Â"Â#˜(Ÿ:£AW3ï$Ú!ë#˜"Â"Â"W"W#-#-#-#-!€#-#˜#˜"Â!".%ˆ#Û#Û#Û".$²&_&”$ç$%¾&”&”%¾%¾%&Ê'¡%ô$²( ( ( (­'(­(­'k))*Å,)%'x)%,*g*g(º(„*1)[)[)[)[(„&×&¢(O&¢(O)%'x(O(O&7&7%`' %Ë'x'x'x'ø)¥'!'!)¥&K'ø'ø&K&K&K'ø(c&¶%ß'Œ&ì&ì%?&ì&'Â&&&&(™&ì#’%?&ì(™&ù&ù&#'Ð&ù#Ÿ%L&ù&#&#%L%L&ù%L&#'Ð%í%í%í%í%&Ã'š%í%·ÒÒÒûû««Ô +]áá +···ííí@“@“@šíiííiiþX.««ííššpiii[[ÆÆÆsÒ%û¡=ºgá4áá + + +·««@@í@®[[»»ä>>‘‘ääää7yÓÓyñDǯ¯¯P£&&»ä‘jjAîjjÊ$MMââââ$wúúMMMM¸¸e¸¸¸¯\2ß \ßß22 ¶Çt!!t!ÎßßߌýªÓ&>>hKK!!Œßßß\ ¶¶ŒŒ¶¶!Î!!c¶¶¶Â˜>€€WWGô!xË__ 6‰Ë!x ¡ôËË˲_ 6 6‰Ü‰ 6__‰Ü! ___!5Û±±ÛˆÛ!5 ) )||RR||Ì y¢!O yÌÌmÀÀm ¯bb8åzzzzå!’ ¼88b!’!’ Q÷¤ Qõ¢ÌÌ aŠ7!!!!!! C C77 !»õ¢!O!O y"& y y ä ä"‘"‘!ë >!!!!!ë!ë > >"Â! >!ë!"Â"!"!!J!J2 ß !¶#Î"!"!"!$9$9!¶#c"W$$Ú#-"Â"Â!ë%E"Â"Â!ë&ò-;2B,e$!ë#˜"Âh!€!€$$$Ú!€!€#-$o!"Â"Â##!X!X#Û".#Û'5%¾$#:&”'k'k%¾$%%%ô%ô#Û'5'5(â'Ö&)%S(­)î)î)î(A+©)ü'x)%,ë,ë,*g)[)[*1(„)[)[*1(„'x'x&¢)ü(O(O(O(O(º' ' %`)%'x(O(O)¥'ø%t%t(Î'!'!'!%t'!%t'!&¶(c%ß%ß%?%?(™&ì&&'Â$h$h'Â&ì&ì&'Â&ì(™)}&#$v&#$v"É%L&ù&#&#&#"É$v&#$v&#%í%í%í$@$@$@%í%í&ŽÒÒûûXX..Ô· +áá·d··@@@í@í@“@íiíí««Ô««@@ííÃii[[[[ÆÆÆÒ%ûûãºgá4áá + +] +««íí@í[[‘‘>‘‘ä‘‘‘äyy&&ñDÇ\\¯\P£&€h»ä‘ÄjAîwwúúââÊwMMMMMM¸¸<âe¸   ¶ß2¶ 2Œ22 ¶tÇÇttÇÇtßßß2WªÓ€>>hÂøø!Ç2ßßß¶   ŒŒ¶¶!Î!!c¶¶¶Â˜>€€  GôË__ 6‰ËôG˲"¹ 6 6‰Ü‰ 6²²‰Ü_²²²..ÛˆÛ!5 ) ) ) ) ÿ ÿ||Ì yõ¢ÌÌ yÀmm!UUUbbµbb8åzzz 8åb‹å ¼å夤¤ Q¢!O y y a7 ämmmm!!––77 !»¢õ!O!O"&#Ó"&Ì"‘"‘ ä ä!ë >!!!! > >!ë!ë!h >!ë"Â!"!"!!J!J"Œ ß!¶#c#Î"!"!"!"Œ"Œ!¶#c"W$$Ú#-$o!!ë%E"Â" >!ë#-$Ú$"W!ë#˜!!#-#-%±%±$Ú!€!€#-"Â"Â$o$o$²$²$²$²#Û".#Û#Û%¾$$ç$ç%¾%¾'k%¾&Ê&Ê'¡'¡'5'5%ˆ'5&)'Ö''(A(A+›)î+©)ü)%*Ò)‘)‘*g,)[)[*1(„)[)[(„*1%Ë%Ë(O(O)ü&¢(O(O(º*g(º' )%'x(O(O)¥+R(Î(Î(Î'!(Î(Î(Î'!%t'!&¶(c'Œ$2&ì&ì(™*F&&'Â'Â'Â'Â&ì&ì'Â&&ì(™'Ð'Ð&#'Ð$v&#&ù%L&#&#&#&#$v&#&#$v%í%í%í'š%í%í'š'š$á=ggg.X«ÔþX·dáá4á··ÃÃ@íiiþþÔÃ@šíšíí@@œœÆ„„„„ûNû¨ºº + + + +ŸŸŸŸííii@@@@ÆïœPPPP‘‘h»‘‘PP&ÓñDžž\ \\&yy&PP&&îAÄîî¸^â5w$MM   ¸w$MM¸¸$$úMßßß2øžÇ!ßß ¶žžtt2ß…2KžKK€&€€€ÓÓ-øøžž¶¶¶¶c \¶!! ¥øÎ!Î!c¶ß 9Wª€---WWËËË!x ¡ôô ¡ ¡ô ¡ ¡ËËqG ¡ôôqËËqGšôô_²__ ^±± ^ ”ç½½!j ”ç7ŠŠ7a   ØØ+Ø+!…++bb‹8‹‹‹å¤¤zÍå888¤¤ Q¤888夤¤¤zz¤¤7777 a   C C C C!…ØØØ77 a!O!O y y !»!»a7 ä"‘"‘"W"W ª ªÓÓ ª"W!ë > > > ª"W"W"W t"! t t"Œ"Œ!¶%"÷!J"!"!$¤"÷"÷$¤!€!€#-#-#˜!ë#˜#˜!!!ë#˜"W"W"W ª"Â"Âh"Â"Â"Â#˜#˜$o!!"Â#-#-#-$Ú$G$G%%$²$²#Û#Û$$$%¾&)&)'Ö'Ö&_&_'5(â(w&Ê%ô%ô&”&”)î(A(A(A)*Å)‘)‘,(º(O)ü(O)ü)Æ+s*(ð)Æ)Æ*(ð)ü(O(O)ü)ü(O)ü(O'ä'ä'ä'ä)‘'ä)‘'ä%ß)9*(c(Î'!(Î*{(c(c%ß%ß'!'!'!%t%?&ì*F(™&ì%?&&&€(-&€&€'W%ª'W)&ù&ù%L%L$á$á%·$ +&ù%L%L&ù'd%·%·%·$«$«'/%‚&X&X&X(&ùgºgg.X«.««·dŽ44á + +@íXþÔi@ššííí..íípœœÆ„„„„Nû¨ûººãã + + + +ŸŸŸŸ@@@@š@ÆœïPPýýä仑‘ýýÓ&ñžññ\ \\&Ó&Óýý&&ÄÄîAjAA¸¸âw$úú  e¸$wMMee<<$$úM22ß2øžÇÇßß ¶žžtt2ß2ßKøKK€€--Ó€€€KKKK¶¶c ¶¶¶\!!øKÎ!!tc¶ŒŒ WÓ€€€WWËqË!x ¡"Nô ¡ô ¡ôôËôôôôGôôô²_²! oo ^±± ”ç½½ç ”7Š7Ša !»a++Ø+~Ø++å88888¤¤zÍ8å88÷÷¤ Qåå8夤¤¤ÍÍ Q Q7777a´a!» C C!ð!ðØ!…!…!…77 a¢¢ÌÌ a!»!»7 ä"‘"‘"W"W ª ª!€!€ ª"W!ë >!ë!ë$"W ª$"!#Î"!"!$9$9!¶!¶"÷!J"!"!"÷!J"÷$¤#-Ó#-#-#˜!ë!ë!ë"Â"Â#˜%E$ ª$"W"Â"Â"Â"Â$o$o!ë%E&"Â"Â!!€!€!€#-$G$G#p#p$²$²#Û#Û$$$%¾&)&)&)&)&_&_'5(â(w&Ê%ô%ô&”&”)î(A(A(A)*Å)‘)‘,,(O&¢)ü(O()Æ*(ð+s((ð*&¢(O$õ&¢$õ&¢(O&¢)‘&7)‘)‘&7'ä)‘'ä'Œ'Œ(c&¶'!%t'!(Î&¶&¶'Œ'Œ'!'!(Î'!&ì(™&ì%?(™&ì'Â$h&€(-(-(-%ª'W)'W&ù&ù%L%L&Ž&Ž$ +%·(¦&ù#Ÿ%L%·'d%·%·&X&X%‚'/&X&X(&X&ù==g..XX«XÔÔ +· + +Ꮇ·@@ÃÔÔÔÔ“íííÃÃXXÃÃí휜Ʈ®×1%%Ògggg444áLòÈÈÃííí@ïïyyýªh»‘‘»»ääPýýPžñžñ\\\ yÓPýýýPPÄîAAA¸¸ââw$ M¸ â5wwMM¸¸Ñw$$  2ßøžttŒß¶ KKKž2ß22ttKK€€€ÓýWÓ€!tžKߌ¶¶ŒŒ¶ Î!!!!tøøc¶¶ --ªW€- WGšËôôËËô ¡ËË!xËËË ¡ôôGË ¡ ¡ËË__‰‰óóoˆˆÛÛ ”ççç:ç½a !»   !» ¨U~+!’å ¼bb ¼bÍz¤¤8!’b÷¤!'!'ååb!'!'z ¤¤!'z    aa ä"‘mm C CØ+"\ ¯77a ¢!O"&"& a7 ä ä ä ä7!€Ó ª ª ª"W#-#-!!#˜!ë"W"W ª ª!J$¤#Î#Î"Œ"Œ"Œ ß#Î"!"!#Î!J"÷%{#Î"W"W"W ª#˜!ë$o"Â#˜!ë#˜!ë!€Ó#-#-"Â"Â%E#˜#˜#˜"Â$o#˜%E$o!!€#-#-#-#p#p$G"š#Û#Û##%¾'k$ç$ç#¦'&)&)( &_(â(â)N%ô%ô%ô(A(A)î+›*Å))î)î)‘)‘*g*g)%)%)%*Ò***(ð(ð'C'C'C%Ë)%(O(O'x'x&¢(O' (º(º(º&7&7'ä)‘)9'Œ&¶&¶'ø)¥&K&K&¶&¶%ß%ß&K&K)¥'ø&'Â'Â'Â&ì&ì'Â'Â)*±'W'W'W'W'W%ª&#&#&#&#%·'d&Ž$á'Ð)}&#&#%·%·%·'d'/#Õ$«&X&X$«%‚#Õ&ù==Á..XXX«Ô.· + +dŽá + +ii@@i'ííííÃÃÃÃXXÃÃí휜Æ11ÒÒËÒgggg44áŽLòuuÃííí@ÆÆBByyPýh»‘‘»»ääPWýPžKžñ\\ \&&PýPPýýjjjA”AA  ââw$ M¸ âwÑMM¸¸wwww  2ßKK!!ߌc¶øžKžß222ttžžÓÓ€ÓýýÓ€tÇñøßŒ¶¶ß 9¶ !Î!!Î!øøc¶¶ €€ªW-€WªGôËôôËËô ¡ËËËËËôGôGË!x"N"NËË__ 6Üóó Ɉˆˆˆ ”çççç ”½´a aaa aU+Ø8å"ibÍz¤¤88b¤ Qzz8!’bzzzz Q Q!'za!»    7 ämm C C+Ø ¯ ä ä !»!O¢ y y a7 ä ä ä ä7&Ó"W"W"W ª!€!€!!#˜!ë%±"W"W"W"÷"÷#Î#Î"Œ"Œ"Œ ß"!#Î#Î"!!J"÷%{#Î ª ª"W ª >!ë"Â$o#˜!ë!ë#˜#-!€#-#-$o$o%E#˜#˜#˜$o"Â#˜%E"Â"Â!€#-#-#-#p#p"š$G#Û#Û##$%¾$ç$ç#¦'&)&)&_( (â(â'¡'¡%ô%ô(A(A)î+›*Å))î)î)‘)‘,,*Ò'x)%*Ò**(ð'C(ð'C(ð(ð'x'x(O(O'x'x)ü(O' (º(º(º&7&7'ä)‘)9'Œ(c(c)¥'ø'ø'ø% (c%ß%ß&K&K'ø&K&'Â$h$h&ì&ì'Â'Â'W)'W'W'W'W)'W&#&#&#&#%·$ +&Ž(;,×.„+*'Ð%·%·%·'d'/#Õ&X(&X$«#Õ%‚&ùÏ·dddu""uáááá· +á;ùLuu4á·d + +4á +·ŽŽ··ŽŽ[[Iœ s=Òû¨· + +·LLLLŽá +·Žá4ái@@@@@@ŸŸ""·d··uuuÈyyýPh»»»PPyy»hhÇÇDžPý&Ó&yPý M    úMMMMMM w$ß2\\2ŒßßžžÇtññžžÄqqY³§MúM$ÑúMe¸¸ee¸î›ƒÖYh»€Ó€Ó!Îtt!!øøÂÂë!E-- ª¶¶¶  ¶ 9Œ‰‰Ü 6ô ¡ 6‰²_ËË ¡G ¡ô****èè¿ l77a ÌÌÌ yØØ++m"Ç C Co± ^:çzz Q¤÷÷¤ Qzz¤¤zz!'Í__ 6 6__‰ 6 6‰‰ 6 ¡ ¡Ë+Ø––!"Ç yÌ¢!Oõ!O yÌ– C!"Ç!ð!ð!"Ç äŠ!»!» y y"& yð!J t"!"Œ ß ß ß"! t"÷!J"÷!J#Î"!"q Ä"q$"Ý"Ý"" #!Ð$T$T"§"§"§"§#H!› Ä!›!›#H#H#³#³#³#³$Š"Ý$Š"Ý$T"§"§$T!Ð!Ð%*!Ð"<%–##"§"§"§$T##".".$²##Û#Û&_$²$²$²&Ê%$G$G%&Ê'¡'¡%ô%ô'¡*û*Z(­(­*Z*Å*Å+›+›)‘)‘+>,ë*Ò)%*Ò)%+s+s&l()[&+)['“%æ&½*'('('þ'þ'þ'þ'þ'þ&Q&Q'((Õ'Œ'Œ)9%ß(c&¶&¶(c'W)'W)&ì&ì%?(™'r'r%Å'r(³'''&›&›%Å%Å'r'r&›&›%1%1'µ'µ'I#ï&s( 1"7Ö.ž'ê'%g%g'&s$Æ&s$Æ%1&Þ&&'"· +ddu""Ïáááád·;áLŸuuᎷd··Žá·dáá +dŽ4[[ïœsÆ=ggÒ¨û· +·dLLLLŽ;· +á44áÃ@@@@@@ŸŸ""·d + +""uÈÓÓýPh»»»PP&&»h»»ÇÇÇÇÇÇDžPý&ÓÓ&PýúMMM  Múú  úM w$…2  2222žžt!žžžžÄÄÄYYúúúMÑ$Múe¸ââ¸e¸eî›ÄÄÖƒYhÓ€€Ó!Î!!!!KKë뀀WW¶¶c¶¶c 9Œ 6 6 6 6Gô 6‰²_ËËôôôGËËËË}}}}èè¿ lŠŠa  y"&ØØØØ!! C C Éoo±±±½½:çzz¤÷÷÷÷¤ÍÍ÷ QÍÍÍ!'__‰!ã! ²Ü‰‰ 6 6‰ôôË~+UU––mÀÌ y!O¢¢¢ yÌ–ém!––m! ä ä!»!» y y yÌ"÷ t"!"Œ ß22 tÇ!J"÷"÷!J t"!"q Ä Ä"q"Ý"Ý""!Ð#}$T ú ú ú ú$T#H$õ Ä"q!›!›#H#H%`%`#³#³"Ý!0"Ý$Š ú"§$T"§!Ð!Ð!Ð!Ð"<%–##"§"§"§ ú###Û#Û$²##Û'5&_$²&_&_%&Ê%ô%ô&Ê(w'¡'¡%ô)N)N)N'(­,*Z*Å*Å+›+›&7)‘)‘+>*Ò)%)%*Ò)Æ)Æ)Æ+s)[)[+)['“%æ&½*(Õ%{&Q&Q&Q&Q'þ'þ'þ'þ*‚(Õ'Œ'Œ'Œ'Œ(c*(c&¶'W%ª'W)(™(™(™(™'r'r)'r'(³''(H(H%Å)'r'r&›&›#„&Þ&&%œ(ö&s( *n-È)—&=(Á'#º%g( ##$Æ&Þ%1&&'"áᎎLùLùáááᎎd·""¦ù4Ž·d··áááá·· +dŽŽÆïœ===¨ûÒŽáddùŸLL·· + +áá··@@iiŸLLLŽŽ +·ùùuu&&Pý‘‘»»PPýP»h»ÇÇÇÇDžÓ&ýýÓÓPýúMúúwÊMMúM$ÑMM$w…ß\\…ß\\žñžžttžžÄîî¬YYúúÑ$úú$$e¸<e¸îîqq00¬Y>ë>ëÓ€WWÎ!!!!!øž>>-- WŒŒŒŒßŒcc²_!ã!ãôG‰‰__Gô ¡ôôôôôôôGôSSSSèèè• ´a ¢¢ y y ¯"\ØØ!!Àmoo±±!5!5çç ” ”!j½ Q÷ÍzÍÍÍz ÍÍz¤ Qz!'‰‰__ 6 6‰Ü‰ 6‰ 6 ¡ôôGU ¯!!mÀÌ¢!O¢õ"& y––m!mm C!ð ä"‘ ä ä y y¢¢!J"÷"!"! !¶ !J t"!"! t t t"q"q#H#H#³%`"""§$T%*!Ð!Ð!Ð#}#}$"q!›#H Ä#H#H"Ý"Ý#³""Ý!0!0$Š#}#}"§"§!Ð#}#}#}#é"<â !Ð #!Ð ####$²%ˆ#Û#Û'5'5#Û%ˆ'5%&Ê%ô$G%ô%ô)N)N'¡)N(w*$*Z(­+0+0,r*Å+›)î)‘+>*g(º*Ò)%*Ò,+s((ð(ð(„*1*1&×)@'“(j(j)«'þ'((Õ'('((Õ*‚*‚'()«)«(c(c(c(c(c(c%ß%ß%ª%ª(-)Ú*F(™)o'Â&›(H)õ(H%Y'(³%Y(H&›&›(H(H(H'r'r&&'µ$[&s&s%œ%œ&='ê)—'ê&=&=$$'I#ï#ï%œ&&&&'"ŽŽááŸLLùááááá;d""ùL44 +··ááŽ4 + +··áá[µ sœï===¨ûÒŽá··LLLL·· + +áá··@@iiŸLLLáá] +LLuuyÓýP‘‘h££Pýh»»hÇÇÇÇññ&yýýÓÓPýM MM$wMMúMw$MMÑ$22  ßß\\ñžžžÇ!Kñj››Y¬³MM$Ñúú$$eâ¸eîî00Y>ëë>Ó€WWÎ!ttÎÎKK‘ë--W ŒŒŒŒŒß¶!_²‰‰ô ¡‰‰__ôGôGôô ¡ ¡ ¡ ¡ôGSSSS•••èaaa ¢HÌÌ ¯!…+mm!m Éo ^ÛÛçççç½÷÷ÍzzzzÍÍzÍ ÷¤Íz‰‰__‰‰‰ 6 6‰‰ 6 ¡"NôGU ¯"Çmm! yÌõ¢!O¢"& y!ð–m!!! C!ð ä77"‘ y y!O!O!J"!"!#c#c!¶#c"÷!J t"!"! t"!"! Ä Äî#H#³"#³#³"§$T#}#}#}#}#}#}"q Ä$õ#H"q$#H#H"Ý"Ý Y"!0"Ý"Ý"Ý!Ð!Ð ú ú!Ð#}#}#}#é"<"< #!Ð%*#}$²$²#$²#Û".#Û#Û#Û#Û'5%ˆ&Ê%$G%ô%ô%ô'¡'¡)N'¡(w*$'(­)ƒ)ƒ*Å))î(A)‘+>*g(º)%*Ò*Ò,.Í+s***1(„*1*1)@'“(j(j'þ&Q(Õ'((Õ(Õ(Õ'(*‚'('þ'þ(c(c(c(c(c(c*æ'Œ'W'W(-)Ú(™&ì)o'Â$î&›(H&›'%Y''(H&›&›$î&›&›'r$&&&&( ( 'I'I'ê&=$&=&=&=$$%œ%œ#ï%œ"®&'µ'µ#º  ¸ûûUUÒx%[Þ1öIœœŸŸLLùŸòŸX«XX««þ«[ÞÞµµÞ1ÒÒÒÒgºgÆÆœœïïÆs[1×[Þ1LLŸŸáá4á««X«Ô=YYYYîîîî#vMúáḸ‚‚Õ‚AîÄYY‚‚/‚‚‚¸¸e¸########  ¸¸›››îY‚/Y//Ü/YY7‘ä7Ìy&&yÌP£»»aa£Py&äääähha7‘h``66ãã㉠ ã6] + + + ·]33@“i¼ii@@M M M MMAAÖƒÖÖ‘‘hh ª ªÓ&&&Ó!€!!‘‘ úMMMââ5â5   âââ5 MM ¸¸ââÿÿÿÿÖ)ÖÖ¬¬Ö!0îî Äîîîî Y¬ÿ¬óM"§ úMMMMƒƒƒƒA!› ÄÔ''Ô««Ô àà · +à!àà««Ô".!X«!X!X«!X«þi  í í —"D"D —"D"D"D"D!£!£!£#P"" bµ Í Í$'"å"å$’"å"z"z!£!£"""" |")")")") |#####Ö#Ö!¾!¾#k% è"•"• è") | |")"_"_#5!ˆ#5#5$ "_##"D#ñ#!n#ñ%ž%i''%i&ª&ª%Ô'%ƒ'0(Ý'0&Z(&Z)´)I)I(r**(r)I)I(*:*:&à& )c*:*:+±+±**'ì)™*p(Ã)™'ì'ì'ì(Ã'(Ã'').$ý(W).'*(W'À)m(—&ê&'À*D&ê&I)£(Í(Í(a(a'‹%Þ#û%¨'U'U%¨%¨'U'U(—%=%=&ê&(,)'U&&&ê&ê(—&ê&&&$f$f$f'U'U%¨#û%Þ%Þ%Þ'‹&I'ö&I'ö$fMée¨¨UUÒ%Ò[‹ÞöIIILLLLLLŸLXXXXX«X[ÞÞÞ1ÒÒÒÒgºgssœœœœsÆ[11[1„LLLLááŽá««X«Ô=¬¬YYîîîîv# Máá  ‚‚‚ÕAîÄYY‚‚/‚/Õ¸¸¸e##ÐÐ##ÐÐ e¸¸›››îY/ÜY///‚¬777äyÌÌÌyÌPý»»P£Ó!€ >äää»»»ää``ãã6666666  ã +] +° + +33“@¼iii““M  M M  jjAAƒ!0ÖÖ‘‘hhPPÓ&ÓÓÓ&hhä >M   ââ5â55 !e âM ú úM¸¸â⬬¬¬Öƒ!0!0¬¬ƒƒ!›Ajîî!›!› Y¬¬ Y ú ú úMMM ú úƒƒƒƒîîjÔ''Ô«« Ô3! · +3ààà««Ô".!X«!X!X#!X!X« !à í í —"D —"D#ñ — —#ñ!£!£#P!£"" b" Í Í Í"å"å$’"å"z"z!£!£""""#Ö") | |#Ö")#####Ö#Ö#k#k#k!¾"•$B"• è") | |")"_"_!ˆ#5$â$â$ "_###ñ%ž&u$È#ñ%ž%i#¼'%i$ý$ý').%ƒ'0'0%ƒ()´(()I)I(r*&Å(r)I)I(*:(('¶+*:*:+±+±(W(W)™'ì(Ã''ì&?'ì'ì(Ã'%i''%Ô$ý(W').(W*'À)m&ê(—)m'À(—(—'ö'ö' ' (a(a)8'‹'U%¨%¨%¨))'U'U(—(—&ê(—(,&)#û&&&ê&ê(—&ê'À'À&$f$f$f'U'U)'U$1'‹)8'‹$œ&I$œ&I&$eeâûû¨¨U¨1Þµss ÆLL""""LL..««[®[Þ1µ[¨ûgggœœsssÆssÞÞ11Þ1ÞÞLLu"áááá.Xþ««Ôg=¬¬Y¬A” Mvv  áŽÿ¬‚ÕÄÄ‚‚¬¬‚‚YYŽ4 eúMúúMúúM e;;qÄ//Y/ÜYÕ/a‘äyöö£ö&&ä7»£ö&&‘‘»ää»»‘äää66  ºº6㺠  g 6ã +] +]]]3à@@““ iæ“vÉÉvvvóMAîAA¬ Y)Ö > >h! ªPý ª!€Ó!€Ó‘ >h!   M¸¸ ¸¸¸ â5âââM úMM!e¸ââÖƒ¬¬ÿÿ¬¬¬¬ Y¬j Ä Ä!›!›!0!0Öƒ ú ú úMM ú!Ð!Ð Y¬ Y Y ÄAî ÔþþÔ  + +!#:!à +"d". Ô".!X!X ". ÔÔ!Ã#p!à  —"D"D —##"D"D!£!£öö#¼#¼""öö  """å!8!£#P"z$'#¼%i$’‹")") |")#Ö")#!S")#Ö#Ö") è"•!¾!¾"•"• è è |")") |!ˆ#5"_"_#5#5!ˆ!ˆ%ž%ž##$È$È —"D#¼#¼&?&?&ª$ý%Ô).&Z&Z&Z((Ý(Ý(Ý*Š*(r(r(r'œ,£*ö)I(('¶)c)c'¶(+ç-^+±).).(Ã')™)™'')™)™&?&?%i').'%Ô'*(W&ª(W'À)m(—*D(—(—'À&' %s'ö&I(a*(a&´'U'U&(,(,(,&(,'À&&ê(—(,(,(,$Ò&&&'À&ê&ê(—#%=%=&&'U#û&&%%%Þ%Þ'ö$œ"ï$œ&Ñee<ûûN¨UÞ1[ssss¦¦""""ùù««..[µ1„û¨ggÁIIsssÆssÞÞÞÞÞ111LLuÈááááÔ««XXÔg=ÿÿ¬ÿ›îúM##  Žá¬Y/‚jÄ‚‚¬¬‚‚¬áá eúMúúú§úMeeŽŽÄÄÄYYÜ‚Y‚/YÜ‚»‘äÌÌöö£Pyyä7»£öÌ&ää»ääh7äääã㺺  6ã`     ã6] +] + + +3à@@@@¼iæ“ÉvvÉÉÉóMAîîî¬ YÖƒ > >»h ªPPýÓ&!€Ó‘ >»h   M¸¸ ¸¸¸â55âââ MMM¸ ââ)Öÿÿ¬¬"¬ÿ Y Y¬jj Äîî!0!0ÖƒMM úMM ú # #" Y Y Y ÄAî Ô!X!XÔ ÔÔ · ·à!!à · · ". !X!X ". !Ã#p i —"D"D —!n!n —#ñ#P#P#P#P b b""#Pö"z"z""$’"å#P!£"z$'"#¼"å!8 | |")#Ö#Ö")$­¦#Ö%ƒ#Ö")"•$B#k "•"•"•"•")#Ö#Ö")!ˆ#5"_"_#5#5#5#5*¥*¥$È$È$È$È"D#ñ#¼#¼&?&?&ª$ý%Ô).&Z&Z&Z('0'0(Ý*Š*+Ì+Ì+Ì*ö)I'œ)I(()c+'¶)c*:*:*+±).).(Ã'&?&?(Ã(Ã)™)™'ì$’'(Ã').').(W**(W&'À+ñ*D(—(—)m'À' (Í&I'ö(a**(a'U'U)Ù(,(,(,&$Ò'À&(—&ê(,(,(,$Ò$f'À'À&#&ê(—&ê&ê&ê'À'À'U#û&&&´&´%Þ%Þ&I&I&I$œ&Ñ$Mú=êÒÒû¨11ssII¦¦""··ááííií@Ã[‹‹[11ggÁ=êÁg1ÞÞ1IIœœœI ÆuuLLááŽáX«þXÔÔg¬¬(Õ‚‚YY  áá#vvvAîqÄ‚ÕYYîY¬##M§MMvvMMúúúú§úî›ÄÄqÄÄÄ›îyyyÌy££PPP£7ää7££Pýä‘‘ä»»‘äPPÌyNN¡N  6ã‰66ãxxNN + +3à33à3“@@“¼i¼¼ ^â55ˆˆ5AAj¬¬Öƒhh»»hhhh ªPýýhhä‘ # #ÉÉMMv #ââ ¸ # # # #vvMMvvvvçAj½ÿ¬" Y Y Y Y YƒÖ Y Y¬ Y Y Yjîîvv #vâ !›!› Ĭ Yƒƒ  @ í  i!Ã!ààà!"!" L L".".##"š"š í í í í!Ã!Ã!X#«!X!Ù!Ù!!U!!"¯#P#P#P!£ Í Í"z Í" b$’$’$'$'$'$'%Ô$'$ý#P!8!8!8"å | | |")#k#k#k!¾")%ƒ$­##Ö#Ö#Ö")#k!¾"•"•!¾#k#k#k"_"_#5#5"Ê"Ê#¡#¡)c)c%3%3& $\$\$\$ý$ý%Ô%Ô$’&?&?&?&Å(r'œ'œ(r(r)I*ö*Š*Š(Ý*Š*Š'0'0(Ý)c+(*:)Ï+|+|)Ï*Û*Û*Û*Û)™'ì&?&?'').).(Ã(Ã'ì'ì'%i'').).*&ª&ê(—*D(—(,)Ù(,(,(a(a)8)8'ö)£' ' (,(,(,(,(—(—&$f&ê%='À&'À)m(—&ê%¨'U$Ò&&&$Ò&'À'À(—%=&&(,$Ò&I&I&I$œ&I'ö&I&I&êâ$wMú=ÒÒ¨û11ssœœùù""··ŽŽššÃí@Ã[ÞÞµÞÞggÁê=ÁgÞ1µµ‹ÞœœIïïö ÆuuŸŸááᎫXXX.Ô'gºÿY/‚‚‚YY  ááv###îAÄÕ‚¬¬AAYYYÐÐúúMMvÐMMúúúúúMî›ÄÄqÄÄqÄÄÄq›îyyÌÌÌy££PP£ö䑑䣣Pý‘ >‘ >»»‘äPPyÌ¡¡¡N  ã6‰6ãxxNN + +3††à3†“@@“i ii¸ 5ˆ5âˆ5îî Ĭ¬ƒÖhhhhhhhýýýýhh‘ä # #ÉÉ  vÉââ ¸vvv!Ð!ÐvMMvvvvAA Äÿ¬¬ Y¬¬ Y YƒÖ¬¬¬ Y Y Yjîîvv!Ð #â ââAA Ä Y¬ƒƒ  @ í  i!Ã!àà#:!"ÈŸ!ù#Û þ!X í í í í í í!Ã!ë$²!X# , ,"¯"¯!U!"¯!£!£ö!£ "z Í" b!8!8"z"z$'$'$'"z#P!£"å‹Þ"å#Ö#Ö#Ö")#k#k#k!¾ |#Ö$­##Ö#Ö |")#k%"•"•!¾#k#k#k"_"_#5#5"Ê"Ê!ô!ô"¯& %3%3& $\$\$\$ý$ý'$'$’&?&?&?&Å(r'œ'œ**)I*ö*Š*Š'0(Ý*Š*Š'0(Ý)c+*:()Ï(")Ï+|*Û*Û).).+F)™)™)™'').).(Ã(Ã)™)™*p(Ã'#¼''&ª&ª(—*D+ñ*D)Ù(,(,(,#Z&´'‹'‹&I'ö' ' (,(,(,(,&ê&ê'À&&ê%=&'À)m+*D(—)'U&$Ò&&(,&'À'À&ê&ê(,(,&&&I&I'ö&I'ö)£&I&I%=¸w$§§=êÒÒÞ1Þ1ÆsÆs""""··ŽŽíšííííí@[µÞÞ„Þg==ê‹‹1ÞIIsÆ  sÆ""uu····ÔÔãgg¬YY¬‚‚‚‚ŽŽŽŽvvM Äîî//¬Yîî‚‚¬¬§ú#ÐMMÐÐúM##Ð##vîî››ÄÄqÄîîÄqH›ÌÌÌyÌy££yÌyy»yyy&hh7‘»»PýPPxxN¡6º   66x%¡N] + +]3333i¼¼i   â55ˆ^!e¸ Ä ÄÖ)ÿÿ‘‘h!h»!P ª&&»hh»MMvvvvvÉââââvv  MMM ú # # úMîî ÄÖ)¬ Y))ƒƒ¬ Y¬¬¬ YÖƒ Ä Ä!Ð # #vâ ¸¸ Äîî¬ Yƒƒ!à   i  i · · · ·!"Èu Ôþ!X  "š"š  !à Ô". ". , , , ,!!!"¯!£#PöIÆ"z#P!£"""#¼%Ô"z$'"z$ý!£ö!£#¼" b b |")") | #k!¾!¾#$­$­$­##!S#!¾#k$B$B#k!¾#k#k$ $ #5#5!ô#¡%N#¡$\"¯"¯"¯#†%3& $\#P$ý$ý&ª%i%i%i'&Å%'œ'œ(r***+a)´(Ý(Ý)´)´)´)´*:((*:*¥(ø(ø(ø**,ˆ).'(Ã)™)™''(W(W'ì)™(Ã(Ã'ì)™'').).&ª$ý)m)m)m)m)%¨)'U&´**(a&I'ö'ö&I)'U&&%=%=%=&ê$f&'À++ñ/K.t+(,&%¨%¨%¨'U&&&ê&ê%=&ê'U'U'U'U%s' (Í(Í'ö'ö&I&I$fwÊúú===,,‹Þ1Þs Æ""""··;;í@ííííí@ÞÞµµ11gº==[[ÞÞ1„IIs sssÆÏÏ""·· + +ÔÔ=ggY¬ÿÕÕ‚‚á;Ž4É#M Äîî‚‚¬YÄjAA‚‚¬¬Mú#ÐúúÐÐMú###Ð#v››îîqqÄq››Äq›îÌÌy&y&PP&yyyayyy&»»ää»»P£PPËËô¡ãã`   ããx%¡N] + · +3333 ii¼i¼ii5ˆâ ^  ¸jjÖƒ¬¬ >äh!!!hhýý&!€h»h»  vvÉÉvÉ5 ââvv    M ú # # úMîîjÖƒÿ¬ÖÖƒƒ¬ Y¬¬ Y¬Öƒ Ä Äv #!Ð # ⸸ Äîî¬ Yƒƒ!üi!Ã!à !à  · · · ·!"u!"uÔ «#!Ã!à í í   !à ". !Ù!Ù , ,U"¯U!!£#P!£ö"z"z!£#P#¼#¼"#¼$'$'$'"z#P#P#P$ý#¼"""")#Ö#Ö")#k#k#k&Å$­#$­$­#&Z#!S#k%$B$B#k!¾#k#k$ $ #5#5#¡%N!ô#¡"¯!"¯"¯!Ù#†$\"¯$ý&ª&ª$ý#¼#¼'(Ã&Å%'œ'œ(r***)´((Ý%ƒ((&Z)´(&à(*:*¥(ø'K*¥(W(W).).'(Ã)™)™).).(W(W'ì)™'*p'ì)™''''(W*'À'À'À'À))*¯)***(a'ö)£'ö&I)'U&&(—%=%=&ê&'À)m,Ç/K5ÿ3{0!)Ù(,'U'U'U%¨&&&ê&ê%=&ê'U'U%¨%¨' %s' ' 'ö'ö$œ'ö&úeessœœµµÒ==dd··LùÏÏŽá;ᎎŽá11ÞÞÆssƨû¨¨¨U¨¨ûû¨¨ggµÞÞœI sLùÏÏáá + +.ÔÔÒÒ%%v###4ḸîîAAjÄjáŽe¸¸^ ¸ÄÄÄÄ”îÄYY‚/ÄÄÄÄÄ//‚‚§§Ð##ÐÐÐÄÄîHÄqÄÄ»ääPP&y&&Ó&P££PCC¯¯…Øyyy&ääää×*­Z  º g gºã†33†ÈÈŸòÔ'ÔÔQQþQjjj¬ÿÖƒAAîAAAîîý ªÓ&ýýPý\ 222 ß22¬¬¬¬j”AÖƒƒƒAA½Öƒ Y Y¬¬ÖÖA!›îîAAj Ä ÄîA55â MMMM  â⸠¸ îî¬ Y Y¬] +"d ·àà + ·!X« Ô !X« !X!X í í i"d"d · ·!#: ·"d Í Í Í"z"z"z!£!£!n!nÁÁ"D —"D"D#ñ"D#ñ%ž#†#†!Ù#†#†%3#†%3$\!!Ù#†$w$w$w"Ê#5#5$ "_!"Ê#¡!ô$ "_#5!ˆ")#Ö!S!S#k#k"•$B#k#k#k#k$­#¦#$'$'$'"z$'%Ô$'$'&ª(W&ª#P$’"å'(Ã&Z('0%ƒ&Z((Ý(Ý*U*U*U(¨)~)~(¨(¨'K%ž+|)Ï(")Ï(ø'K(ø(ø(ø(ø("("*¥'K("+|*¥'K&à*:*:*:(&à%3&à&à&à'¶)c%=&ê'À)m)))))£'ö(Í' 'ö'ö)£'ö&&(,(,(—&ê%=(—'ö'ö,ý29@C=¿7 6Õ.t*D&ê&ê(—&ê&ê(a&´'‹'‹%s' $œ$œ&&'U'U&(,%¨)'Àúeessœœµ[%Ò==ddddùLÏÏŽáŽŽŽŽáŽÞÞÞÞsÆÆs¨û¨¨û¨¨¨ûU¨¨==µÞÞIœ ÍùLÏÏŽ4··ÔÔÔ%%%%Évvv4á  ›AAAÄᎸ   ¸ qÄÄîîĬ¬‚/ÄÄqqÄ‚‚‚‚úú#Ð#ÐÐÐÄÄîîÄqÄÄ»ääPöyÌyyy&£P£PCCmm\\2…yyy&äääŠ×„Z­ll  º º g6ã3†à3òŸ ÔÔÔQQþ«½j¬ÿÖ)îîA”AAAAý ªÓ&ýýý ª \………222¬¬¬¬jAîƒ!0ƒƒAAjjƒÖ¬¬ÿÿÖÖAAAAAA Ä ÄjAî âMMMM¸¸ !e¸!e¸îî Ä Ä¬ Y" Y] + + ·àà · +!X«ÔÔÔ «!X".".## í í i"d"d +"d!à ·"d Í Í Í"z"z"z#P#P!n!n!n!n"D#ñ"D"D#ñ"D"D#ñ#†#† ,%3%3#†#†!Ù"¯"¯ ,!Ù"Ê"Ê"Ê$w$â$â$ "_"Ê!%N#¡"_ ²!ˆ#5#Ö%ƒ###k#k"•$B#k#k#k#k$­###"z"z"z$'%Ô$'$'$'#P$ý$ý$ý$’&?%i'()´'0%ƒ&Z((Ý(Ý*U*U(¨*U)~)~*U*U,R*¥+|)Ï(")Ï(ø'K'K'K*¥'K("("(ø(ø("("(ø(ø((((&à(%3&à(('¶)c&ê(—'À&'U'U)))£'ö(Í' 'ö'ö'ö&I(,(,)Ù)Ù(—&ê(—(—)£)£0W<CF÷F BÆ?63{*D*D(—&ê&ê&ê&´%%Þ%Þ' %s'ö$œ$Ò(,%¨%¨#%$Ò'U'U&ú¸ Æsµµ‹ÞÒ¨¨êê=ꎎddÏ"ÏÏ· +··Ž;ŽáÞ‹Þ1ÆÆÆsû¨ÒÒÒÒU¨¨UÒÒ==ê=ÞÞµœIssu"Ï"· +· +XX.««ûûNûM v#¸¸ááÄAîîîîîŽá¸ á4ááqHîîîîî//‚‚ÄÄÄÄîîÕÕ‚/##úú#ÐÐÐHHqî›qÄ»ääyÌ££yyy&&&&yðCm……2…PP££ää»­­ll••  ã6º  º]] + +EŸòŸÔ'Ô'þþþþjj½ÖÖÖƒA”AAîA&Ó&& ª ªýý\\22…222ÿÿÖÖîîîAÖƒƒ!0îA Y¬¬¬¬ YƒÖj!›AAî Ä Äj¸!e¸ M úMMâ ¸ â âAî ÄjÖƒ!0ƒàà3à3à!à«««««!X«!X!X!X".". í í   · + + · · ·!!"z"z Í Í!£!£ Í"z"D —ê"D"D"D!n!n"D#ñ"D"D$\"¯"¯& $\"¯#†!Ù ,#†!Ù!Ù!!!!!ˆ#5!ˆ#5$w"Ê"Ê"Ê#5#5#5#5 |#Ö#!S#k!¾ è$B%!¾!¾%$­$­##!£#P!£#P"z"z#P#P#P$ý&ª$ý&?)™%i%i&Z('0'0'0'0(Ý(Ý'Ñ)~*U*U)~++++)~*¥*¥(ø*¥)Ï("*¥,R)Ï("(")Ï*¥*¥*¥*¥+|("%ž'K((((&à('¶++ç(*:(&'À)m&'U))'U)£'ö'ö'ö*z*z(Í' *¯)%¨)'À'À'À)m*z/9CF F F F E7¬,Ç)m(—&ê&)m%%%Þ'‹' %s%s' 'U'U&(,'U#û'U%¨&úeessss[µ‹ÞÒ%ûû===á;dd"Ï""d·ddᎎáÞ‹„1ssÆsû¨¨ûû¨%==ê=11[œIss"Ïu"d··d..XX.««ûûûNM Éи¸ááěAAŽ;¸ á4ááÄÄîîAAîî////ÄqÄÄÄîî//‚/ÐÐTú#ÐÐЛ›qÄî›qÄ»ääyÌ££yyy&&&yÌðCÇ22…2PPPP‘‘»­­BB  ã6 ºº  + +] · L LòŸÔ''ÔþþþþjjÖÖ)ÖAîî”îAy&ÓÓ ª ªýý\\22…2……ÿÿ))”îîAÖƒ!0ƒîAjj Y¬¬¬ÿ¬ƒÖ Ä”””A"q Ä ¸¸ úM ú ú "`5(.t+ñ*D)m)m&´&´)8'‹%s' ' (Í'U'U&(,'U'U%¨'U'Àe¸11œœ  =êgu|¦ù;è··ÏÏ""ŽŽ;Ž  œœIIœœg==ÒÒûNÒÒû¨ê=êêssss[Þ‹ùù""dŽ;ííííX««Xû¨Ò%  ##áá ¸›îîîÄqîA MMMM É#¬Y‚‚ÄÄîîÄÄÄÄYYÄÄÄ››Äq¸ŽŽúúúú››››ÄqÄ»»»£Pyy»a7ä77\¯2…ðCCðyy&Ó»»»»••••­Z 1„N¡xx¡NN¡]]] + +] + +ÔÔQþ¼i“@jR¬)ƒAîî”!›î‘ >‘‘!!!hÇÇÇÇÇÇjAîƒÖ!0ÖAAƒÖ)ƒ Ä Ä Äîî)ƒ¬ Y¬ Y¬¬ Ä Ä #vMMâ 5¸!e"< MM # #jjAî Ä Äàà + +!"Èu!" í í!Ã!Ã@ í@@@@@ í"š í !à ·"d · + L!ù!"u b b!8!8 Í Í Í!Ù ,!Ù ,U"¯"¯$\"¯! ,!Ù#ñ —#ñ%ž##!n#!U"¯$\"_ ²"_"_"Ê"Ê"Ê"Ê#5#5#5#5"_"_#5#5###Ö")#Ö")#!S"•"•#k#k%#k$B$B"z"z#P#P"å$’%i#¼$'$'!£$ý%i%i%i'%ƒ%ƒ'0%ƒ%ƒ'0&Z&Z(¨*U(¨(¨(<)é)é(<)c)c+)c(ø*¥+|+|)Ï("(ø(ø(")Ï(ø*¥+|)Ï("("'¶)c)c)c(('¶'¶'K'K("("'U))Ù)Ù&ê&ê(—(—(a(a(a&´**)8,’)m)m*D(—&ê+ñ)m+.?3F=TEµF‹F‹F‹H8B;Ü4R/K+)m)m'À*z' 'ö'ö' ' 'ö'ö'U'U$Ò#%&ê(—&'À&e11œœssgg=êggg"ÏùLŽ;ddÏÏÏÏ;áŽ;ssIIIIIIgêêÒÒ¨ûÒÒû¨ê=êê ÆÆÆ[1ÞùŸ""dŽ;ííííX«XûNÒ%MM##áḠAîîîj›î M  úMvv¬Y//AAÄĬYY¬qqqÄ››Äqee;;§MM§îî››qÄÄÄ»»»£Pyy7ä77\¯Ø…ðCð&&Ìy»»••BB­„×ô¡xx¡N¡N]]] + · +]]''Qþi¼“@jjjÿÿÖÖAîAAAî‘ > > >hhh»ÇÇÇÇÇÇjAîƒÖÖÖAA!0ƒÖÖ ÄjjAA)) Y¬¬ Y Y Y Ä Ä!Ð #MMâ 5^ â ú úvv Äjî!›33 + +uu!""Ï í“i!à í"š@@ í í"š$G"š í !à ·"d"d · L!ùu!"#¼ b!8Þ  Í"z!Ù , ,!!U$\$\"¯%3#†"D"D%ž#ñ###!n!"¯$\"¯"_ ²"_"_"Ê"Ê"Ê"Ê#5#5#5#5 ² ²#5#5#&Z#Ö")%ƒ#Ö#$­"•"•d!¾#k!¾$B$B"z"z#P#P!8"å"#¼$'$'#P&ª#¼'#¼%i'0'0'0%ƒ%ƒ'0&Z&Z(¨*U*U*U+–)é)é+–+++)c*¥(ø)Ï)Ï)Ï+|*¥*¥&u+|*¥(ø)Ï("&u)Ï)c+)c)c(('¶+'K'K("(")'U)Ù)Ù(—(—(—(—***(a**)8)8)m)m(—&ê(—*D)m+)8*å3F?F‹F‹F‹DÞ;Ü1Î+ñ*D'À)m'À&(Í(Í&I&I' ' &I&I'U'U&$Ò%=&ê$f&&eee[11œœ sÁÁ==ùù"udddd"ÏÏ|;Žddss  ÍsIœ=Ò¨ûÒÒÁIœïœÞ1ùLÏ"ŽŽ·dÃÃp.XXÒÒ%MMMMŽ;¸ î›#Év#úMvv¬Y/‚îAÄîîîî‚‚YÄqÄÄÄqÄq;;;;MMÉ#››››ÄÄ››!hyÌÌy7ä77ää77¯¯¯\ðð&&&yä‘ä7•BBï­­„×Ë%N¡Ëx¡N†† + ·àà3†þQQQ¼¼““A”j½ÿÿ¬ YjAA > >hh»» >‘ððCÇÇjjjjÖÖÿ¬A!›îî Y Y!0ƒjj ÄAAÖ) Y YÖÖ¬ Yj½”A ú úMM  â⸸¸¸ #!Ð #vî!› Ä ÄîA] +33!ù L!ù L@@ !à í í í í í í!à      ·"d!!!ù Luu!8!8‹‹ Í Í Í ÍUU!Ù!Ù"¯!!$\"¯"¯$\"¯#ñ#ñ%ž#ñ!n!n"D"D"¯$\ ,!Ù!ˆ!ˆ!ˆ#5#¡#¡#¡#¡$ "_#5#5 ²"_"_$ #$­##")#Ö#$­#k!¾!¾!¾$B"•"•"•!£#P$ý#P!8"å#¼#¼&ª&ª$'$'"%i$’&?'0'0($­&Z)´(Ý(Ý)~)~(¨*U)é)é)é+–)c++ç((")Ï(ø*¥*¥,R,R*¥'K(ø*¥(ø)Ï("&u&u& )c)c)c(('¶'¶&u("'K'K'U'U&(,)m'À&ê(—**)8*å)8)8(a(a)m+(—(—*D*D'À)m(a*-h7v?×C1D=T1Î+&&&&(—&ê' ' 'ö&I'ö&I' ' %¨%¨%¨'U(—&ê&&'À¸â<ee[ÞÞœœ s==L¦u"dddd"Ï"Ï;èdd      Iöê—nÒÒÒ%¨ûÒÒÁÁgIœœIÞ‹bùLu"ŽŽdÃÃpÛ.XX,ÒMMú áŽ ¸î›ÄÄÄÄÉ##ÐúM##Y¬/‚îAÄîî››‚‚YqÄÄÄÄqqÄŽŽŽŽúúÐЛ›îîqq››»&y&yä‘7777Šä¯¯¯ððyy&yä‘‘äïBïBׄ%%N¡x%N¡††] +33†Ùþ«þþ¼¼““A”j¬¬ÿ¬jjjjj”î > >!!hh >‘ðð t tjjƒƒRÿîî”î Y Y!0ƒ Äj ÄAA!0ƒ¬¬!0!0 Y¬ ÄîA  úMM!e â"<¸¸¸¸v # #v”Ajjî!› · +àà LŸŸ L í í !à í í í í í í!à   !Ã!à + ·!!Ÿ Luu!8!8!8!8"z"z"z !!!ÙU!"¯"¯!!"¯$\#ñ#ñ#ñ%ž$È!n — —!"¯#†!Ù!ˆ$â$â#5#¡#¡#¡#¡$ "_#5#5"_$ ²"_$­####Ö")#$­%#k#k#k$B"•"•"•!£#P$ý&ª"å$’#¼#¼$ý$ý$'$'%i%i&?'ì'0'0((($­(Ý(Ý)~)~(¨*U(<(<)é+–)c++ç()Ï("*¥(ø(ø*¥*¥(ø*¥(ø(ø*¥+|)Ï)Ï)Ï)c)c)c& &à&à'¶'¶$È&u'K'K'U'U(,&'À&&ê%=&´**å)8)8)8(a+»)m+*D*D(—(—'À)m*(a*-h4:Ð8M1™)m)m&&&&&ê(—' ' 'ö&I'ö&I%s(Í%¨%¨%¨'U%=&ê&&'Àî›HÒÒÒÒÒÒÒÆ IöIIœI...X«GšÃÃXÏϦSdùùÏÏùù""¨UÒÒ¨¨Òûûê—ê=uuu"Ꮇ·««Û²..ŽŽ +‚‚YYî›á;ááÐ##ÐÓ€ü©©OO©ß2µtÇJ##MúeeŽ;‚/Äqqq¸¸ŽŽúúÐЂ‚YY/Ü  ÉÉÉÉvÉ555ˆoɯ\…ØØØ22&&PýPPPýBBïB××­­­×„„„„„]]] +3333' þþæ“iij½îî Ä  vÉ  5 v #!Ð!Ð # #  ¬ Y¬ YAA ÄvvvÉM úvÉj Y Y Y Y" Y!0ƒj  â # #M âââââ⸸ Ä Ä Ä!0ƒƒ!0ýý&& >‘‘‘»» >ä‘ > > >"꺺㺺Æ!sïïÆÆïïÆÆ œ œï œ!s!s g g g g% Òxx ² ² ²!!!ô G"Ê"Ê#¡ GÛ!ˆ#5#5!Ù#†!Ù#†$\"¯#†%3%i b‹!8$’$’" b¦##Ö")$B$B$B%ï$w"Ê$w"Ê"Ê"Ê!ô!ô##"D#ñ$\$\$\"¯"¯$\#†%3$\"¯"¯"¯!¾#k%&Å&Å%$B$B%ƒ%ƒ#Ö#Ö%ï%ï%ï%ï'K'K("&u& & )c'¶((*:((")Ï*¥*¥*Š,7)´)´)I'œ)I)I&$)~)~)~*À'f)é+–(<(<)é(<(¨(¨'Ñ)~&û(¨(¨&û&$'Ñ(¨(¨'À'À&ê%=&ê(—)m'À'‹)8)8)8'ö&I' (Í))*¯,\)'U(,&'ö'ö(Í,'.?1™2o-h&ê&ê&ê&ê&ê%=&ê(—&(,(,&&ê&ê)m'À'¦%ù%ù%ù%ù'¦'¦%ù(|›ÅÅ›H,ÒÒÒÒÒÒssœIœöIœ.Û..XšíÃÃXX«X""¦ùd¦¦||¦L""û¨ÒÒ¨¨Ò¨¨Ò,ê—ê=uu"Ï4;d +««ÛXŽŽ·d‚‚YYAááv#v#€Óü©üü©©ß2[tÇð##úMeeŽ;‚ÕÄÄĸ¸ŽŽ úÐÐ///Ü  ÉÉvÉ555âÉÉ\¯Ø……………yyýPPP£PBBBï××Sׄ××××° + +]3333' þþæ“iijî”j ú vÉ !e v # # # # #MM Y¬ÿ¬îîjvv #vM ú #vjjjÿ Y"¬¬ Yƒ!0jj Ä  â5!Ðv ó5 ¸¸ Ä!0ƒƒÖýý&&ä‘‘‘hh >ä‘ > > >!=!=ººãººÆ œ œ!s!s œ œ!s!s œ œ œïÆÆ g gº" Ò%"%"_"_ ²"_pp!ô G!!!ô!ôÛ!ˆ#5#5!Ù#† ,!Ù"¯$\!Ù#†#¼"!8‹"å"å%i#¼!S!S |")$B$B$B"•$w"Ê"Ê!"Ê"Ê!ô%N$È$È#ñ"D"¯"¯$\& & $\#†!Ù$\"¯"¯& #k!¾%#k%#k$B$B#Ö#Ö#Ö#Ö$B'œ%ï%ï'K'K("&u'¶'¶& $\%3(*:((")Ï*¥*¥*Š(Ý+a+a)I'œ)I)I)~)~)~)~)))é(<(<(<(<&&û&û'Ñ)~&û(¨&û%N'Ñ&$&û&û'À'À*D(—&ê(—)m'À)8'‹)8)8&I'ö(Í' ),\)*¯*¯,\(,&'ö'ö(Í(Í)8,’-h+»&ê&ê%=%=&ê%=&ê(—$Ò&)Ù(,&ê&ê)m'À$L%ù)S%ù%ù'¦%ù'¦(|H›H›õ¨¨¨¨ÒÒs ssœIœœ....ššÃÃXX..ÏuLùŽ;||||ùù""ÒÒ%U¨Ò¨¨==¦ùÏÏáŽáŽXˆ.«X;;;;YYYÄî¸¸vÐ##ÓÓOüÓ&ü©2ß[tÇðMMúMŽŽe³³YYA›››¸eŽ;ÐÐÐЬ¬YY³ÜÜv  vÉv55±^vo󠯯……Ø2…ØP£ýýy&ýPïBBïZ­­­„×­­SZ†3°°†† · +'Ô Ô“@iiAîA”j #v    ââMMM vvv #!0!0¬¬Aî #v #vvvM úA” Y Y!0Öÿ Y Y"îî Äâ5â !Ðvvv  â ââ Y Y!0ƒý ª ªýä‘‘ > > > >‘ > > > >!= gºã g" œïï œ œ"I œ œ!sl!s# œ œ œ œ!=!=""û!¨" ÒÛ!ˆ!ˆ!ˆ!!!ô#¡#¡!ô!!!ˆ!ˆ ² ²#†#†%3#†$\& "¯$\#¼%i!8!8 b"$’$’#!S!S#$B$B$B"•"Ê"Ê!ô!ô"Ê"Ê#¡!ô$È$È%ž#ñ!Ù#†#†&à$\$\$\"¯#†!Ù#†%3#k#k#k!¾%%"•"•%ƒ#Ö$­$­$B%ï%ï'œ'K'K(ø%ž'¶'¶'¶& &à&à(&à("("(")Ï*Š(Ý()´(r(r**)~'Ñ(¨(¨+–)é))&(<'f'f&û%N(¨&û&û(¨'Ñ&$&$&$)~)~*D(—&ê%='À&&ê&ê'‹)8*(a' (Í(Í*z)Ù+†(,)Ù+†)Ù'U'U&I'ö&I'ö&´(a)8)8%=%=&ê(—%=&ê'À'À&&$Ò(,'À&&'À%ù'¦'¦'¦'¦%ù'¦'¦(|›î›îHûUUU,,ÒÒs ssöIïï....ííXX..|"ù¦è; )ÏÏÏùù""ÒÒÒÒ¨ûÒ¨¨gg==ùL""ŽááŽ..X..X;;;;YYYÄ››eeeevvÐÐÓÓ©üÓ&ü©ß2µtÇJMM§úáá¸eYY››››¸eŽ;ÐÐÐÐYYYYY//ÉÉ  vÉÉ #ââ^ vÉFó\…………2…£Pýý&y£PBï œïZ­­­×„­­­ZZ†3]]33 +]Ô''Ô“@iiAîA” ÄvÉóM!e 55   MÉÉv #!0!0¬¬îAv # #vvvM ú!›î YÿÖÖ¬¬¬ Yîîjâ â !ÐvÉɸ¸ âââ55 Y YÖƒ ªý"W ª‘ >!ë >‘‘ >‘ > >‘‘!=º gã gºï œ œï œ"I"Iï!sÆ# "I"I œ œ!=!= g g#U!¨ Ò%Û!ˆ!ˆ!ˆ!!!ô G!ô G"Ê"Ê#5#5"_"_#†#†!Ù ,!"¯$\"¯#¼"!8!8 b""å"å#!S#$­$B$B$B%ï"Ê"Ê!ô!ô"Ê"Ê#¡!ô$È$È"D#ñ#†!Ù%3%3$\$\"¯$\#†!Ù#†%3%%#k%#k#k$B$B#Ö%ƒ&Z&Z$B"•$B%ï%ž(ø'K'K& & & '¶(((&à&u&u&u+|(Ý'0()´(r(r*-y++)~(¨(¨+–&))(<&'f'f&û(¨(¨&û&û(¨&$'Ñ'Ñ'Ñ)~)~*D(—*D(—)m'À&ê&ê'‹)8*(a' (Í,'*z+†)Ù)Ù+†+†)Ù))&I'ö'ö&I(a*)8)8(—(—(—&ê&ê%='À'À(,(,&)Ù)m'À$f&'¦%ù'¦'¦%ù'¦%ù%ù&ÏAî›Å¨¨¨¨ÒÒU¨ssssIö s..X«..XXÃÃ..X|"¦¦|""|;;d;;gÒÒÒê—ÒÒLLÏÏd +᎚íGG.Û.¦ù¦ù¬YYYî›ÄÄŽŽáŽM§úú>‘O©VVß2µ[µµßŒ#vMúú§§M‚‚//î››îŽ;è;Ž;e¸Y‚‚î›Äq  óF^±^ MMvvMó\\¯¯CCmmh»PP£Pׄ 1×BBllׄ„וBlÈuŸŸ +]] +“æii'Ôþ«AAAAAAAA   ¸vvvÉÉÉv #vv Mƒƒÿÿ Äjjvvv #¸¸ ƒƒ Y Y¬ÿÖƒîî¬ÿ)Öââ  ú  M!e¸¸¸ ¸55 ÄAî > >hh»h!hýýýý‘ >hh Ò%N!¨" g"ºï œ œ œ!Z!Z"´"´!!!sÆ œ œ"#Á g"!¨N Ò Ò#5Û ² ²p!"Ê!!ˆ. ²$ "_ ²"_"_"D"DÁ!n"D#ñ$È#"""#¼"z"z!£!£%#k è è è è!¾#k#5#5"_"_"Ê"Ê"Ê"Ê%ž#ñ —#ñ"D#ñ#ñ%ž& $\!Ù#†$È!nÁ#%ƒ#Ö#Ö%ƒ"•"•$B$B$­$­$­&Z%%&Å&Å& & '¶& '¶$\%3(&à((((*:*:*:(((Ý(Ý(r(r)I*ö*U(¨)~)~*À*À)é&)'f&(<*U*U'Ñ'Ñ&û&û&û(¨'Ñ'Ñ(¨*U,\,\+†)Ù))'U'U%s' 'ö&I'‹'‹,’*å+)m)m+)Ù)Ù(,(,'ö'ö'ö&I***(a(,)Ù'U%¨%¨%¨'U'U)Ù)Ù&&'À'À&ê(—)¾)¾%':'¦%ù&Ï%"'¦î›îrr¨¨¨¨ÒÒû¨ss  Iö s..XpppX|"ùù|"uÏŽŽddd;;gÁÁºÒÒ%Òggê—,,ùùÏÏddè;íššš..Û¦ù¦ù¬YYYî›ÄÄŽŽáŽúúúúhh‘>©©©©ß22ß#ÐMúúMúú‚‚//î››îŽ;;ŽáŽe³‚‚î›Äqóó ó ^±^  ÉÉóóv\\¯¯CCÀ»»»PPýPׄ„*•ï„×*וB¿luÈòò] +] +@“ii'Ô«þAAî”””AA¸¸ ¸vv #vÉÉv #vv Mƒƒ¬¬ Äjjvvv #¸¸â⃃ Y Y¬ÿÖƒîî¬ YƒÖââ     M!e¸¸¸ ¸55jAî‘‘»!»hh!ýýPP‘ >!!" Ò!¨!¨ gº g g œ"I œ œ!ZZ!!!!­Æ œ œ g" g"!¨N%%ÛÛ ² ²"Ê!p!!ˆ!ˆ"_"_ ²"_"_"_#ñ#ñ!n#"D#ñ$È#"%i%i#¼$'$'!£!£#k%"•"•"•"•!¾#k#5#5"_$w$w$w$w%ž#ñ"D"D"D#ñ#ñ"D"¯$\#†%3####%ƒ#Ö")#Ö%ï%ï$B$B$­$­$­&Z&Å#k#k&Å& & )c'¶)c)c((&à(*:&à&à(((((*Š*Š***ö)I(¨&û)~)~)))é)é*À)(<&(¨(¨'Ñ'Ñ(¨(¨*U(¨'Ñ'Ñ(¨*U*¯. +†)Ù'U'U'U'U' (Í)£'ö)8)8)8*å+)m'À)m+†+†+†(,'ö'ö'ö&I(a(a*(a)Ù(,'U)'U'U'U'U(,(,(,(,&&%=&ê((%':'¦%ù&Ï%"%ùrrÅÅrÒÒÒÒ¨¨¨¨IIII  II.Û..íšš@ÏϦ¦SSÏ|è;;;;Ždd===¨û¨¨=ÁUU¨¨ù¦ÏÏŽŽddÃÚí.X|Ï|Ï///ÜqÄ››eeŽ;Ð#úú‘>h©©ÓÓß2ß222úúMú#vú§¬‚/îî›îeee¸áá;;Y››îîÉ  ââ^^ M  óFÉ #2…Ø…mmððääääPPýP­„×lÆBï­*×ïï•BŸòÈ33]]““““þþ«þjjjjj½”A5â5âÉ #M vvM úvvÉvÿÿ¬¬ Ä”A   M55  Öƒ Y¬ÿ¬ƒƒ!›îA¬¬ââ MMv # â â ¸  Ä Ä Äj‘‘ >!ëh!!ë!ëýýýý >!ë!h!¨ûûû g g!= œ œ!sÆ#‹ 1„ 1!"´!ZÆïï g"""!¨!¨ Ò ÒÛ!ˆÛ!ˆ!ô!ôÃ!!ˆ!ˆ#5#5$â. ² —#ñ!n#"D"D"D#ñ#¼""å"å$'$'$'$'#k#k"• è è"•#k%%¹"_#5!ˆ"Ê"Ê"Ê$w##%ž"D#ñ%ž#ñ#ñ!Ù#†%3%3#$È#!n#!S")#Ö$B$B"•"•%ƒ%ƒ&Z&Z%%&Å(r%3&à'¶'¶(*:)c)c&à(+& (*:'¶)c'0(Ý+a+a*(r)I)I)~'Ñ'Ñ)~))*À)(<+–)'f)~++)~&$'Ñ'Ñ*U&û'Ñ'Ñ&û(¨(,+†)Ù+†'U'U(,(,'ö'ö)£'ö'‹)8)8)8)m+*D(—*¯*¯(,)Ù(Í*z*z*z*å)8%Þ)8'U%¨'U))'U(,)Ù)Ù&(,&&'À%=&ê':(ç&d&d%ù'¦(|&Ï&ÏÅÅrrÅUU¨¨ööII  II...Û..íššš..XXuϦ¦¦¦Ï|è;;;;Žddê=êêU¨¨¨=êg¨¨UU¦ùÏÏŽŽddÃÚí.²|Ï|Ï//Ü/qÄ››eeè;Ð#úú‘>h©©&&…2…2[[22úú M#ЧúYY‚/îîîAee¿ŽŽ;;Y››››Éóóââ  ó óóóFÉÉØ…2…Àðð77ä䣣ýPS„×ll•B­ZׄBB•BŸòȆ†]]““@@«Qþ«jjjjjîA5â5âvvM  # # úM # #Évÿÿ¬¬ ÄA”   M55¸¸ƒ!0¬ÿ Y¬ƒƒ!›î”Aƒƒ¬¬ââââMM #vâ55 â!e¸"q > >!ë >!" > > ª ªýý >‘»h¡N#Uû g g!= œ œ!sÆ!Þ!Þ!Þ 1Z­Z!!sÆïï g"""ûû%"!ˆ#5#5!ˆ G#¡!!ÛÛ!ˆ!ˆ#5Û ²"_"D"D#!n"D"D#ñ"D b""å"å"z"z"z"z!¾!¾"• è"• è!¾  ² ²!ˆ#5"Ê"Ê"Ê!#&u%ž%ž#ñ"D%ž%ž#†%3#†#†!n#!n##!S#Ö")"•"•$B$B#Ö#Ö$­$­%%(r&Å%3&à'¶'¶&à('¶'¶&à()c'¶*:('¶)c*Š(Ý)´)´*(r)I,£'Ñ)~)~++'f*À*À))é)é'f))~'Ñ'Ñ'Ñ)~)~*U*U'Ñ'Ñ&û(¨)Ù)Ù)Ù(,'U'U&)Ù'ö'ö)£'ö'‹)8)8)8'À)m*D+ñ,\,\+†)Ù*z,'(Í(Í'‹)8'‹'‹)'U%¨'U'U)(,)Ù(,$Ò(,&'À)m&ê%=(ç*”&d&d'¦%ù(|&Ï%"ÑÑѧú‹1µ1ÞµbUUUgd·ddᎷ·.ÛÛÃÃÃù¦¦¦d¾ppíG ÊpÃÃ,ê=êê=¨¨UU;Ž·dddddLù""uϦS|Ï|ÏÄÄ››Üܳ;Žeee¸bµttÇÇ…2[22¸¸¸¸ŽŽ;ŽYY‚////‚eeeeŽŽŽŽ///‚YY))RRççAî””j½ÿÿÿÿ–CCC–CC–yyPPä7»»xxNNxxNNÆ•B„×××z'þ«¼i ¼þþÔÔii@@ÿ¬¬¬çAAAAA””jjîîîAAA”Aÿÿ¬ÿîA Äv #MM¸¸ âââ ¸vÉvvAA ăÖÿ¬ # #ÉÉ!Ð #vÉAAAA Äjj # #v #M  ú ú2 ß \ ß ß22ÇÇ!J tÇ t gº"ê!=º" œ œ œïZ! 1 1!!Z­Z!ZZ!"´!!"´"´!Þ 1Û!ˆ!ˆ G G!! !¾ è"•")")!S#!Ù!Ù$\!"D#ñ## b""å!8#¼#¼" b")")")")")")")")!¾!¾$B%ï#k%$B"•"#¼"å"å"å$’#¼%i&ª$ý"z"z!£!£#P$ý!ˆ#5%¹$ $ $ $ $ $â$â$â$â%N%N%N&û&ª(W(W$ý$’&?&?&?(W(W(W(W+±(W).).)´((Ý(Ý*ö)I*(r)I*ö'œ*ö*(r+Ì+Ì*ö)I***ö)I)I)I'œ'œ)I)I+a)´(Ý*Š(a(a)8'‹(a(a(a(a)'U(,&*¯))Ù)Ù*å*å*+»-h+»*å*å+)m(—(—(,(,'U'U(Í(Í' (Í'ö$œ' (Í' ' 'ö&I&´(a(a&´(|(|'¦%ù'¦%ù&Ï&Ï&™$ÑѧúÞÞµ1Þµ¨U¨¨ÁdddŽ;··...ÃÃÃp¦ùùùddppGGppÒÒ,ê=gg===ꨨ¨¨è;dddddùL||ÏϦùÏ""ÏÄîî‚ÜY;è!l¿¿¿µµbµ!!tt…2[22 eeeáááŽYY‚///Ü/eeeeŽŽŽŽ///‚YY))ÿÿçç”Açç½jÿÿ¬¬–CCCCð–Cyy££‘äxxNNxxNNlB•„×××'Ôþ«i¼iiþþÔÔiiææ¬ÿÿÿAAAAAAAAjjîîîAAAî!›¬¬ Y¬îA ÄÉvMM¸¸â555^ #vvvAAjÖƒÿ¬vvÉÉv # #vAAAAj!Ðvv # úM  ú ß2\¯2222ÇÇðÇÇ tǺ g!=!=!= g gïï œï­Z 1 1!!­Z"´!"´"´!"´"´"´"´"´!Þ 1..#5#5!ô!ô!!!¾  è"• | |#!S!Ù!Ù"¯"¯"D —Á##¼"!8"å#¼#¼#¼"#Ö#Ö")")#Ö#Ö")")%!¾ è"•%#k"•$B#¼"$’$’"å$’#¼%i&ª$ý$'$'$ý$ý#P!£!ˆ#5%¹$ "_"_%¹$â$â$â$â%N%N%N&û&ª(W(W(W'ì&?$’'ì&ª&ª(W+±*&ª).).)´('0'0)I*ö*(r)I'œ*ö*ö*(r**)I*ö***ö)I,£,£*ö'œ)I)I(&Z'0(Ý(a(a'‹)8*&´(a(a*¯)(,)Ù*¯)(,(,)8,’(a-h-h+»*å*å)m'À*D*D(,(,'U'U(Í(Í' (Í&I&I' %s%s(Í'ö&I%&´&´%%"%"%ù'¦'¦%ù&Ï&Ï$ì§$$~ѵµµµµµµ,¨¨==ÁŽ;ŽŽŽŽáŽ..ššÃp¦ùL¦;è;èppšGšGšš¨¨ê===Ò¨¨dd;;;Ž;;""¦¦ÏÏùù""ù¦qq››/‚//e¿;Ž •èµµbb÷÷!![22ßß2ߎŽeeŽŽ¸e////YY‚‚;Žee;;eeÜ‚Y))ÿ¬”çA”½½½ÿRRÿmÇmÀyyyy»»h»¡¡%%%xx%ï•l­××'z'Ô@“¼iÔÔ«þ i¼i¬ÿ¬¬”A Ä ÄjjAAjAîAîîƒÖjjAî #ÉÉv ¸â5  ââM ú úMAîAAÿ YÖÖÉ #M MM úMîî!›î”AAî #v!Ð # # #v # ß2\\2222!J tÇ!J!J!J!=!= gºïïÆ!sׄ 1!Þ!!Z"´"´!!Þ#‹!!#‹!Þ!Z!Z"_$ $ "Ê!!ô!ô!¾  è"•#!S#Ö |!Ù!Ù#†!Ù!n!n!n#"""å!8 b"!8"å####")#Ö#$­$B"•"•"•$B$B%ï$B""#¼#¼#¼%i&?'ì$ý#P"z"z#P!£#P!£#5#5#5$â#5#5"_$ $ $ %¹%¹$w$w%N%N%Ô%Ô&ª&ª)™'ì)™)™''').*(W).).*Š*Š)´)´)I*ö**)I)I+Ì(r)I%ï(r*+Ì&Å)I)I&Å(r(r*)I'œ(r(r)´((('‹'‹'‹*å*(a)8)8(,(,(,(,)Ù&)Ù(,)8*å*-h,’)8**(—(—'À'À(,(,(,(,*z(Í(Í(Í' (Í(Í' &I'ö'ö&I%Þ%Þ&´&´$L%ù&Ï%"%ù%ù&Ï&Ï&™§ÑÑÑ~µbbµµµµ,¨êêgŽ;;;ŽŽŽá..ššÃpù¦¦¦Ž;è;ÃÃGôôGGG¨ê—êêÁÁ%ÒUûdd;;è;;;ÏϦ¦||ùùÏÏùLÄÄîî‚/ÜÜe¿è;è •bbµµJJÎt[ßßßßß2ŽŽeeŽŽe////YY//;Žee;;YY//Y))ÿ¬”ç”A½j½ÿR¥Rmyyyyh»NNxxxË%xBBl­× 1'z'Ôæ“¼''«þi¼i¼¬ÿ Y Yjj”A”îjAîAîîƒÖjj”A!Ðvv #¸!e ⸸ââ úMM úA”îÖÖÉ # úMMMM îîîAAîîA #v #v!Ðvv # ß2!¶!¶ ß ß22!J tÇðC"÷6 gº œ œÆ 1!Þ 1„ZZ!!Z!!Þ#‹!!#‹!Þ!ZZ! ² ²"_"_"Êà G G!¾  è"•¦!S")")!Ù!Ù#†!Ù!n!n#$È""!8"å#¼"!8"å!S!S###Ö")#$­"•$B"•"•"•"•$B"•"%i#¼#¼#¼"$’&?$ý#P$'$'#P!£!£#P#5#5$â#5!ˆ$â$ "_%¹%¹$ $ $w!%N(¨''&ª&ª$’&?'ì'ì).%Ô).*Û*(W).).*Š*Š)´)´*ö)I+Ì+Ì)I)I+Ì(r)I%ï*(r(r*)I)I*(r(r*'œ)I&Å&Å)´()´)´)8)8'‹'‹(a*)8)8&&(,(,(,(,)Ù(,)8'‹(a+»)8)8***D*D'À'À)Ù)Ù(,(,(Í*z(Í(Í%s' (Í' 'ö&I&I'ö'‹'‹&´&´'¦%ù%"&Ï'¦'¦&Ï&Ï(F§ÑÑM§s ööIIÆÆÁê—ê—=êù¦Ï|ùL¦LX«XXŽ;·dŽ;ÛˆpôôUUÒÁê=ê—ê=""Ï"Ï"ù¦"ÏÏ|è;Ž;dd;ŽqqÄÄîAqqe¸e§T *}99µbß9ŒßJJ÷JttÇtááee¸¸;;Y³/‚YŽ;ŽŽ§§ *Ђ/³››››Ö))Öj½jÖƒ))))RR¯¯\ +Ø&y£PPöPýã㺺¡ô%xBïïB•ïBïþþÔÔ“““æ''þþ''þþÖÖ¬¬jjîî Y Y¬¬AA”îîîîîîAîî!0ƒ)ƒ Y¬ÿ¬   !e¸ 5ââ5  5â!0ƒ Y Y¬ÿƒƒ  â  â5Öƒ YÿÖƒ¬¬MM úM # #MM2 ß22ð t t t t t tðºº!= g g œ œ œï!sÆBïZ!!Þ!ÞÆ!s!s!s!"´!!Æ!s!s# #5!ˆ ² ² ²X!ˆ!ˆ"•"•!¾ ")")##"D —"D — ,!Ù#†#†#¼#¼ b#¼#P#P"z$'"•"•%%$­##Ö#Ö è"•"•"•!¾#k$B"•""$’$’$'"z"z%Ô$ý$ý%Ô$'#¼""å"å!ô#¡$w$w$ $ $â#5$â$â"_$ #¡#¡&$'Ñ'ì&?$’)™(Ã''ì'ì&?'ì'ì)™****(Ý(Ý)´)´(Ý(Ý*Š*Š(r(r)I*ö*Š*Š(Ý(Ý'0'0(Ý(Ý(('0'0&Z)´(Ý(Ý*ö*ö)I)I,’'‹&´*(a*)8'‹&ê&ê'À'À)))))8)8'‹*å***å*å+ñ*D+)m'À'À(—(—'‹*å)8)8(a(a'‹'‹(Í' &I&I'‹)8%Þ'‹'¦'¦&Ï%"&d((&d&™§+ѧ§ sööII  Á=êê=ê—ù¦"ϦùùùXX²Ž;¾ddè;ÛˆpÃGGUUÙ,nÁê=ê=ggÁÁê=uÏ"ÏÏ"S¦"u"Ï;ŽŽádd;Žqq›îÄÄe¸¿§T *}99b ŒŒŒß÷÷÷J!!t!ŽŽeeee;;Y¬Y‚/³Ž;ŽŽ§§ÐÐÜ/³HH››Ö))|j½½jÖ)))ÖÖÿÿ¯\¯\\¯…Ø&yP£PPýP66  ¡NxË•BBï•ïBïþþ''“““@ÔÔQQ''þþÖÖ Y YAA¬¬¬¬”îîîîî!›!›!›îAAÖƒÖÖ¬ Yÿ¬ââ  ¸ ââ5â â  â Öƒ¬¬¬ÿÖ!0¸¸ ⸸ â!0ƒ YÿƒÖ¬¬  M vvMM2 ß22ð t t"!ÇÇÇ!J"÷ g g!=!=!= g g œ œ"I œ!sÆ œïZ! 1 1!sÆ!s!s!"´!!# !s!s# !ˆ#5 ² ²!ˆ!ˆ è è!¾#k")")!S!S —"D"D — ,!Ù!Ù!Ù"%i%i%i!£!£ Í"•"•#k#k#$­#Ö#Ö è"•"•"•#k%$B"•#¼#¼"å"å"z$'%Ô%Ô$ý$ý"z$'%i#¼$’$’#¡!ô$w$w%¹"_!ˆ#5$â$â%¹$ %N%N'Ñ&$$’&?&?'ì(Ã''ì'ì'ì&?&?'ì*****Š*Š)´)´(Ý(Ý(Ý(Ý(r(r'œ)I*Š*Š'0'0(Ý(Ý(Ý(Ý(('0'0)´)´*Š'0*ö*ö'œ'œ)8*å(a(a(a*)8'‹(—(—'À'À'U'U'U'U'‹'‹)8)8***å*å+ñ*D)m'À)m)m*D&ê'‹'‹'‹'‹%(a%Þ%Þ%s' &I&I'‹)8%Þ'‹'¦'¦%"&Ï&d$·&d$·$ìѧ§TTööÍÍ ÍÍ êê=êÁÁÁ||ùù|||ÏÛ.Û.ˆ!5;èè;;è¾Û.ÛÛppp Dê—=ggÁ=="Ï"Ï""ùù""||d··· +dddÄ››››››;ŽŽè§§}}9ŒŒŒµbµÎÎ÷÷!t!Î;áe¸á;e¸//ÜÜYeeee§§ÐÐY//HHHõÖ)Ö)j½””¬ÿÿÿ)ÖRR\¯¯\ØØ¯yyyyy&y& `ãNNxxllllïïÔÔÔ “æ¼iÔÔÔÔÔÔ ')Ö Y YîA½ Y¬¬¬ ÄîîîAAAîAA”Ö!0ƒƒÿRÿ¬ 5â5â  ¸ â5¸!e ¬¬¬¬Öƒÿ Y ¸¸¸!e!e¸ Y YÖÖ Y YƒÖ # # # #MMv ##c!¶2 ßððÇÇ"!Ç!J!J!J" g!="#Á#Áº œ"I# !s# Æ!s 1 1!Z!s!sÆÆ!Þ!Þ"´"´"I"IÆ# #5#5!ˆ!ˆ ² ² ²"_ !¾ è"•!S!S") | —"D"D"D!Ù!Ù!Ù!Ù#¼(Ã+F&?#P!£ Í Í!¾#k"• è")")")#Ö$B$B!¾%$B$B$B$B"å"å$’$’"z$'$'%Ô&ª$ý#P$ý$’$’#¼%i"Ê!#¡%N$â&$ $ $ %¹#5$â&$$w&û&û%i''(Ã(Ã'(Ã''%i"å&?).).**)´)´)´)´'0(Ý(Ý(Ý*(r***Š*Š*Š(Ý(Ý(Ý(Ý'0()´(Ý%ƒ(Ý*Š)´$­*(r(r(r)8)8)8)8)8)8**)m'À)m'À&(,(,(,*(a)8'‹'‹*å)8*å++*D&ê'À+*D&ê)8'‹&´&´%(a)8%Þ' %s$œ&I'‹)8'‹%Þ'¦%ù'¦'¦':%(ç%%Ã+TTTTöö   Í sêê—êgÁÁ||¦¦||Ï".Û..ÛŽ;;Ž;ŽdÛˆˆ.pêê==ggg=="Ï|Ï""LLÏÏÏÏd·····qÄ››îîîîŽ;Žè§§}}Œßßßµbbµ!!÷÷!Î!Î;;eŽŽ¸eÜ‚/ÕY¬ee§§##Y//îH›H)ÖƒÖj””ÿRÿÿ)Öÿÿ¯\¯ØØ¯yy&&&Ó&Óº ã6¡ûxxÆÆll¿ïï''Ô @“¼i''ÔÔ ÔÔƒÖ¬¬Aî¬ÿ Y Y Ä”îA”””îAAƒƒ Y¬ÿ¬ââ5ââ ¸¸¸ 5â ¸ ¬¬¬¬Öƒ¬¬55¸¸ ¸ ¸ÿ YƒƒÿÿÖƒ # #vvMM #v \2 ßð!JÇÇ"!Çðº g㺠g" g œ"I!sÆ!s!s!s#‹ 1Z!!s!s!s!s!Þ!Þ"´"´#ö œ!s!s!ˆ!ˆ#5#5"_"_$ "_ !¾; è!S!S |")#ñ"D"D"D!Ù!Ù!Ù!Ù#¼(Ã,ó'ì#P!£"z"z#k!¾"•$B#Ö |%ƒ#Ö$B$B#k#k$B$B$B$B"å‹"å&?$'%Ô%Ô'$ý#P#P$ý$’$’#¼%i&$!%N#¡#5$â$ $ $ "_$â&&$$w%N%N#¼%i'(Ã%i''%i(Ã'&?)™).,ˆ/ +±)´)´)´)´'0(Ý(Ý(Ý*(r&Å&Å(Ý(Ý'0(Ý(Ý(Ý(Ý'0)´+a*Š*Š*Š(Ý)´(*(r(r(r*å'‹)8)8'‹'‹*&´'À)m)m'À(,)Ù(,(,*(a)8'‹)8)8)8*å++*D*D'À'À(—(—)8'‹&´&´&´*'‹$1' %s$œ&I'‹)8'‹%Þ'¦%ù%ù%ù':%':#à$Á—êêêÁê=UUUUU¨¨UUS¦ùùù¦ÏÏÏÏÏÏù¦ÏÏ¿ééTú$~e––ÂÂooo€€ªWW˜˜Ó€€€ÂÂëë¶¶ŒŒJJttJJJJÂÂÂÂÂÂVVVV---ÓJ÷!Î æ9ŒŒ¨UU¨ÑÑ~Ñ=êf¹êêfKøÏÏ¥K""àà::ll•BlBïZ­„ׄ×*ס¡xËËxËËBBïﭭׄvÉÉÉ MvÉ MÉÉó vÉ–ðÇÇðØØ…2 tÇCðuÈÈÈŸ L L LÔÔ«««þþþþ«Ô'@@“@!3 + +!ù LŸŸ ¸ ¸!Ð #!Ð #v # # #v # #v¸¸!e vvMójjjîîAAððð\¯¯ 2 ß22ÇÇ #v úMM MMƒƒ!0ƒƒƒƒƒþ#!X«ÔÔ!X# í"š í í!X!X à3 +"d!"!"!ù L!Ã!Ã#p%#p  í@ |")#Ö |!S¦#!S!ˆ!ˆÛ!ˆ"Ê!p!!S!S#Ö")ù¦")")"•$B$B$B"•"•!¾#k$È!n"D#ñ%3!Ù#†#†$\$\"¯"¯$È##$È$\!"¯"¯"¯$\$\& %i%i#¼%i%i#¼$’$’%¹$ $ $ !ˆ#5$ %¹#!S#&Z%ï$B&Å%%3%3'¶& %3('¶$\(W(W').'ì+F+F+F'©'©((&Ò('©)V(J(J(J(J%[''ß+9(J&'s%Æ's) )÷(J(µ(µ+9'ß's's(J(J(õ(õ'H(õ&Ý(Š(Š(Š(T(T*×)*'(¿)–)–(()°((o&Â)E)E&Œ(9))'Î'Î&÷(¤)'c)æ)æ(¤(¤&!&!&Â&Â&Â&Â%%%ë'˜&V$©&V$©(&V'-%€'cÁ—êêêÁ—êUUUUU¨UUù¦ùù¦ùÏÏ""ÏÏù¦ÏÏe<<Tú~~¿¿¿eeééooooo ÂoWW--WªWªëë€-€€ÂÂëëÂÂÂÂccŒ2JJ!!÷÷J¤Â©VV€€--÷J!Î9Œ99¨UU¨~~Ñ~=¹f==ÀøK""øøÏÏ::llBïlBïZ­„ׄ×*×NNxËËxxx œBBB­­*×vÉÉÉó Évó ÉÉó  #vððÇÇðC22…2Ç tðuÈuuŸò L L '««þ«««þ«Ô' í í@“33]] LŸŸŸ ¸!e¸v # #!ÐÉvvv #v #v¸¸  vv ú újAAîîððð!¶ ß2……ÇÇ!Ð #M ú úM ú ƒƒƒÖ!0!0ƒƒ«!X!X«ÔÔ«!X@ í í í!X!X".".à!"d +!"!"#¦!ù  !à i!Ã"š í |")")")$­#¦!S!ˆ!ˆÛ!ˆ"Ê!"Ê!¦#") |¦!S")") è"•"•"• è$B!¾#k&u#"D#ñ#†#†%3%3$\$\$\$\$È##$È& "¯"¯"¯"¯$\& '¶%i%i#¼%i%i#¼$’$’"_$ $ $ !ˆ#5$ %¹#$­$­$­$B%ï&Å%%3('¶& &à&à'¶$\(W(W).''ì'ì)™)™'©'©(((&Ò%ü'©)÷)÷(J(J%[''ß+9(J&%Æ's's) (J&'''ß'ß's's(J(J'H*¢*¢(õ&Ý(Š*7&Ý&§*)*'}(¿*l)–)–((()°*(o'˜*ò&Œ(9'c*½'Î'Î(¤*Q)'c(9(9*Q&÷&!&!&Â&Â(o(o&Â&Â%ë$>&V((&V&V('-(Ú)Áêê—êêêÁÁU,,ÒUU,ÏÏùùùùùù""ÏÏÏ|¦¦ééé§ú§T<é¿¿˜Eo˜EÂÂ--Ú--ÓWWÂhWWWW>ëëëëë¶¶c÷÷!!ÎΘ>VVVVVV©V÷÷J÷ŒŒ9Œ~~ Ø~~+Ñ~ê=f==ÏÏÏÏ"""|dd··d:llïïBBïB„×­­××**%%¡¡ôNxxïBïBׄ××ó vvFóvvMM  M   ÇÇððð\¯……ðÇÇÈÈ LŸÈÈ!"!"ÔÔþþÔÔ Ô' !Xþ í@ii] + + +ÈuuÈâ ¸!eM úMM MvÉMMMM  5â  MM ÄîAj ÄððÇÇ2222\\ "÷&Q& ú #!Ð!ÐvvvƒƒÖƒ¬ Y""ÔÔ«!X ««  @@!X#«!X ·"d · +!""Ï#¦#¦!à  í@!Ã#p í í")")")")!S!S |") ²"_ÛÛ!ô!ô#¡ G |")!S!S## |")$B$B"•"• è"•#k#k#ñ"D#ñ%ž"¯$\&à#†"¯$\& $\###ñ%ž$\"¯#†%3$\"¯$\'¶&?&?%i#¼$’$’$’$’#5#5"_"_"_$ $â$â#$­$­#&Å&Å&Å%%3((&à'¶'¶'¶& ''''&?)™'''©'©)V)V)V%ü&Ò*,) ) (J(J&2'ß)Œ)Œ(J(J&(J) ) )÷)÷'ß'ß&2'ß(J(J) ) 'H'H)Ë)Ë&Ý(Š'³'³(T(T&§(T(¿(¿'é)–)°(+]+](o(o'˜'˜))(9(9&÷&÷'Î){)'c%¶'c*Q&÷&!'Î(o(o'˜'˜'˜'˜%ë%ë(((&V(&V'-(Ú(9Áêêê—êêU¨,UU,ÏϦ¦¦Lùù""Ï ) )|ùù<–––T§ Tee–é¿¿˜Eo˜EÂÂ--Ú-€€WWÂÂWWWW>ëÂÂ>>ëë¶c¶÷!!ÎÎJJÂÂÂoo EëVV©©V÷÷J÷ŒŒ9Œ~~ Ø~ Ø+~+ê=f==ÏÏ""""ÏÏ·dd·d:ll••BBïB„××ׄ„xxNN¡¡ËËïBïBׄ×× óÉÉó ÉÉMMMM ó  ÇÇðC\ ……ð tÈÈ LŸÈÈÈÈÔÔþþÔÔÔ'ÔÔ««@“¼¼ + · · ·uÈuÈâ !e¸M úMMM ÉvMMMM  â     jAîj Ä t t2222\\ ðð"÷"§ ú!Ð # # #vvƒƒ!0ƒÿ"""ÔÔ«!X ««i!à í í«!X«þ · + · +u!" L L !Ã"š í!à @@#Ö | | |!S!S#Ö") ²"_!ˆ!ˆ!ô!ô#¡#¡")#Ö!S!S!S!S") |"•"•"•"•$B"•!¾!¾"D —#ñ%ž"¯$\!Ù%3& $\& $\###ñ%ž$\"¯#†%3"¯$\$\'¶&?&?"#¼$’$’$’$’#5#5$ $ $ %¹$â$â!S#$­&Z&Å&Å%&Å%3%3%3&à'¶'¶& '¶).).).).'ì'ì(Ã(Ã)V)V)V)V)V)V(('s*Í)÷&'ß)Œ+9'ß(J(J(J&) ) (J(J)Œ)Œ)Œ'ß(J(J) ) (õ(õ)Ë)Ë(Š&Ý)`)`(T(T&§(T(¿(¿)–+C(&V)°)°**)E)E*½*½(9(9(¤(¤){'Î'c)'c)(¤%J&!'Î&Â&Â%ë%ë'˜'˜%ë%ë((&V$©(&V%€'-&Œê ¯UÒÁê=,,,,Ud;è •;Ž;¦¦"| )|¦ùÑ+~+–<¿~+~ѧ§++E ò oWW€€€€ÂÂ>ë--WªªªÂÂøø!!µŒŒJ¤!tÂÂÂoë˜!ò˜ëë--VV!Î!tŒ9bbêêÀÀÀêêê=À¨ûÑ~øøKø""|"KøÏÏøK"ÏB••BllBB­×„!­­­N¡Ë% º66lï•­„„ óÉÉ  ÉvvÉóMvv………2ÇCððð¯\ ß2uÈ!"uÈÈ LŸ¼i@ í í@i ««ÔÔ««'Ô33 + +uuu!"vÉMMvv ú úvv # #  â5 ¸ââ5â !eƒƒƒ!0 Äjj2…\\ ß22 ß tÇÇÇÇÇ!Ð # úM Mv #ƒƒƒƒAî"q Ä í í!Ã!à í@ í@««!X!X“@ í í!"u L!ù!ààà@ í!Ã!Ã".".!X#"• è"•"•!¾!¾ è è$ "_$ ²!ô G#¡!ô"•"• è"•")")!S##k#k"•"•## |") —"D#ñ#ñ#ñ#ñ!n##ñ#ñ%ž#ñ#ñ#ñ!n##ñ"D#ñ"D$\$\&à&à(W&ª#P#P#P#P#P$ý$ $ $â#5$ %¹$â&#k#k%%%%#k&Å&à%3& '¶$È&u&u&u).'(W(W''(W(W'>(ë()Á)V'©((%Æ's(J(J(µ(µ(µ%[(µ(µ&2'ß) 's&(J's*Í) ) (µ*b'ß'ß'³)`(Š*7(Š&Ý)`)`)–&<'é)–(T(T&§(T(o(o'˜'˜(o(o)E*ò,Õ+(&÷&÷){){&÷*Q(9(9)'c)%¶%¶'c$©)°%€'-(Ú'-'-%€'˜%ë&Â&Â(o&Â&Â&Â&÷êUUÒÁ=ê,,Ò,¨Ud;ŽŽŽŽ;¦¦Ï )|ÏLù~~~+éé¿+~~+§§~~E ò!É ±WWWª€€--oë>€€WWWKK!!µŒŒ÷!tÂoë>ë똘€€VVÎ {!tߌbêêÀÀÀ———ê mÀU¨Ñ~¥Kø¥""ÏÏ¥ø""øKÏ"•BBïllïïZ­*×Z­­¡ôË˳`ããl¿BB­„*ó ÉÉ  v #vvvÉ  úvv22…2Çððð\¯2…uÈuÈuu LŸi “æ“@ iþþÔÔ!X!X Ô†† · ·uuu!" #v ú úvvMMvv!Ðv  â5 ¸55 ⸸ƒƒ!0ƒ Ä2 ß\\ ß2…2Ç t"!ÇÇÇðð!Ð #M úM vÉÖ!0ƒƒAî Ä"š"š   í@@ í!Xþ««@ í"š"š!""Ï!ù L!ààà“"š!Ã!à !X#$B"• è è%!¾ è è$ "_"_"_ G!ô!ô#¡"•"•"• è#Ö#Ö!S# #k"•"•##") | —"D —#ñ%ž"D#$È#ñ#ñ"D#ñ#ñ#ñ#$È%ž#ñ"D —$\$\&à&à&ª$ý$ý$ý$ý$ý#P$ý$ $ $â#5%¹$ #5$â%%%%%%%%(&à'¶& #$È$È$È).'&ª&ª).).**'>(ë)Á()V+*,*,) *Í)÷)÷(µ(µ''(µ(µ)Œ'ß) 's(J)÷'s's) ) *b(µ&2)Œ+ )`*7+ä*7(Š'³'³'é'é)–'é&§&§&§(T**)E)E**'˜)E+(){&÷&÷+('Î&÷&÷(9(9'c%¶%¶%¶'c%¶&V(#Ó%€%€'-'-%€%ë'˜(o(o(o&Â&Â&Â&÷=,¨ûêêg,,UÒ¨Ud;;dd|ÏÏÏ"Ïu|+ÑÑ~¿¿<é T Ø+§TTTE"Ÿ ò˜-Ú±Ú-WªW±o>ë-€€-€€WWëëë>Kø!!µŒŒ÷÷÷÷˜˜ë˜>ëÂÂÂVV€Ó!Îttµµµµêê—êÀ" mÀ———êUU~~øKø¥øø"Ïø¥¥¥"Ïøž•ïBB¿ll­­­ZZ„„¡¡ôN666ãB•BB××*} M óó M ú # #vvv #M ¯\ ðððCCðC22\\ÈÈ LŸŸŸuÈ@@ i¼i@“ÔÔþ«þþÔ' + +3àŸŸŸ L ú vv #vMMv #v !e â  5¸¸ƒƒ Y Y ÄAA \ð!Jðð # #vv M  ƒ!0ÿ Yîîîî í í“@ í@  'Ô ". í í!Ã!Ã"Ï"Ï!"!"!à"d · !Ã!Ã!ë« ".#k!¾; è!¾!¾ è;#5Û ²p!#¡#¡!¾!¾!¾!¾ |#Ö |#Ö è"•#k!¾#!S¦!S — — —"D#Á#$È#ñ#ñ##"D#ñ#ñ"D##"D"D%3%3& & &ª#P$ý$ý$ý$ý#P$ý%¹%¹%¹%¹%¹$ %¹%¹$B$B%%%ï%ï%ï$B& & %3&à&u&u("&u''$ý(W(W(W(W**˜'>()Á++%ü)V(J(J) ) )Œ)Œ&2)Œ(µ(µ(µ(µ*Í) ) ) &(J) *Í)Œ&2'(µ*7(Š(Š(Š'³)`(Š(Š*l*l(¿''}'}'})*(o(o(o(o*ò)E'˜)E){){*Q&÷'Î'Î(¤(¤))(9(9'c'c&Œ(9'-%€&V$©(((&V'˜'˜'˜'˜%ë'˜'˜'˜&÷=ÒU¨êêÁ,Ò¨U,¨Ud;;dddd|Ï||"Ï|Ï~~Ñ~–éT§~+T§úTEE ò òÚ-±Ú-WWWo>ë-€-Ú--WWëë>ëøK!!µŒŒJJ÷÷ëë똘ëÂÂÂVV€Ót!!!µµµµêê=êÀÀÀ m——ê—UU++¥øKøøøÏ"ø¥øø"ÏøøïïBB­!S­­×ס¡¡¡666ãB•BB„„×*ó  M MM vvÉÉÉvM ¯\\\ð!JðððCð22 uu LŸEŸuÈ@@ ii @“ÔÔþ«þþÔ']]3àŸŸ!ùòóM #Év #MM #vvv¸¸â   â⸸ÖÖ¬¬jîî\\\!¶ \ððv!Ð # #M MMƒ!0¬¬AAAA@@@ í"š í!Ã!Ã'ÔÔ "š"š  &)&)"Ïuà! ·"d !Ã!Ãi#« ".!¾#k; è!¾!¾$B"•#5Û ²"_!"Ê!ô!ô   #k | | |#Ö"•$B#k!¾!S##$­%ž"D"D#ñ$È$È#$È%ž%ž###ñ%ž#ñ"D!n$È#ñ#ñ#†#†"¯& &ª&ª$ý$ý#P#P$ý#P$ $ $ $ %¹$ $ $ $B$B%%$B$B%ï$B'¶$\%3&à("$È&u("%Ô%Ô(W(W(W(W(W**˜*˜)Á()V)V)V)V(J(J) ) )Œ)Œ'ß'ß(µ(µ'''s) ) ) &(J's%Æ)Œ&2'(µ(Š*7(Š(Š)`'³&Ý*7(¿(¿*l(¿)*)*)*'}(o(o***ò)E,Ÿ*ò+('Î(¤(¤){){(¤(¤'c'c&Œ&Œ'c'c&Œ(9(Ú'-&V$©(((&V'˜'˜%ë%ë%ë$>%ë%ë%Jê=êê—ÁUII sµbµµšGššÃÃÃæ¦¦S;;;Ž~+~~~~~~Ìrõõrr   Â--±± ½9Œ9ŒŒŒÚ-W˜E˜˜9Œ9ßKøøKKKKKJJJ÷t!JJ-Ó€ÚÚ-Vb ߌŒßbµ2ßߌttJÑ~¨ ++  a!aa £ £öIF™™™Û.""Ï" +·:l•BBBBBZ×*­××` º N¡x%N¡xxNNxxvÉv #MM  ââ^^ˆ55 ÇÇð2…2… \\\Ç tð Ô«þæ@@“““““ii@@  !à Ô'Ô'@@““þ« 'ââ â ú ú ú úƒÖ¬¬ƒƒÖÖ¬¬ƒÖÿ¬ÖÖ Mvvv # úMÓ&y&&Óýýhhhh!hhh Y Y Y YA”j Ä Ä¬ Yƒƒ Ô«!X   í@ò LŸŸ ·$$ ·#¦#¦!"u!""Ïu!" í@ í@!X!X". ") |Ï | è è$B"•!¾ !¾!¾!S!S")")"_ ²#5$â!!!ô!ô!"Ê"Ê"Ê$w"Ê!ô#¡$\!!Ù!Ù"D"D —#ñ$ý#P#P#P$ý#P$'"z$ý$ý#P$ý$'$'#P(W'K%ž$È(""¯$\%3#†$­$­!S!S$B$B"•$B%#k%ï'œ&Z&Z&Z$­'¶& & & &à&à'¶'¶).).&ª&ª').(W(W(((('©'©'©)V%ü'©(+Ù(((*,)÷)÷,z) 's's)÷)÷) 's(J&(J&(J(J()Ë*¢(õ'³&%0*7)–)–)–'é'é)–*l(¿'Î'Î){'Î){+(+þ*Q+É(o***(o'˜)E'˜)E%ë'˜'˜)E&Â&Â'Î'Î&÷&÷'Î'Î&÷%J'-'-&V((Ú%€'-(Ú'-==ê=êgU¨IIs µbµµGšššÃÃÃÃL¦ù¦;;Ž;~Ñ~~~~~~ ¢Hrr   Â- ‡!^c9Œ9Œ9߀-Wªë˜˜˜ŒßßßKøøKKKøøJ÷!tJJ-----€VµbŒßߌµßŒŒßttJÑ~UU++  a´!´ £ £öIF óFFÛÛÛ.""|Ï·d:çBï••••Z*×S××`  `¡ôËxûNxxNNxxÉvÉv    55  â5ââÇÇCð2……2!¶ \\ t"!ð Ô«þ“““@@@@@  @@   iÔ'Ô'““@@þ«ÔÔâââ ú MMƒÖ Y Y!0ÖÖ!0¬¬ƒÖ¬ YÖÖM úvvvÉ MÓ&&Ó!€Ó ª ªhh»»!h!»¬¬ Y Yî!›j Y¬ƒƒ Ô!X«!Ã!à í@ L L L L · · · ·!ù!ùu!"!"u"Ï!" í@ í@!X!X". |")Ï | è è"• è !¾!¾!¾!S!S")")"_$ !ˆ#5!!!ô!ô!"Ê!!"Ê!!ô#¡"¯"¯!Ù!Ù"Dê%ž%ž$ý#P!£$ý$ý#P%Ô$'#P#P!£#P"z%Ô&ª(W%ž#ñ&u&u$\"¯#†!Ù##$­!S$B$B$B%ï&Å%$B%ï&Z&Z&Z$­& '¶& & &à&à& & ).).(W(W).'(W(W(((()V)V'©)V'©)V(+Ù((+Ù*,)÷&*Í*Í) %Æ(J(J's%Æ(J)÷)÷(J)÷)÷&q((õ'H'³&&Ý(Š)–)–'é)–'é)–(¿*l){){){'Î){'Î(¤*Q*&Â(o(o*+É'˜)E)E'˜'˜)E'˜%ë(o(o'Î'Î(¤(¤'Î'Î%J&÷'-'-)°((Ú(Ú(Ú'-%€==—êêÁÁ==¨U¨¨Iö  88ÞÞššGGÃÚí"ÏÏÏ·dd~ѧ TTTTÌrHõ˜E oÚÚ±# æ99Œ99cc--€€ë˜˜˜ßŒŒßKøKøÎÎ!!!!J÷÷÷€-©©€€ŒŒµbbµµbß2J÷ttUU~~Uû¨Ua´!a!yÌ"P"P ó ó  ÛÛÛ.ø¥ R¥:d·¿BB•B­××××66` xËxxxxxË¡ûNN   Mvvvv55 ¸¸ ¸¸ðÇ…222 ß2\ t t Ô Ô““““““ii@@i ““@@!XþÔ  @@þ«þ«!e!e¸¸v # # #ÖÖ!0ÖƒÖ¬¬ÖÖƒ!0¬¬¬¬v #M úM  M&&P ª ªýÓ!€ > >‘ >‘ >!ë‘ Y Yƒƒ Ä ÄAî!›A Y Y Y¬Ô".ÔÔ"š"š!Ã!Ã!ùŸuu!à + ·!ù!ù"Ï!"uu!"u!Ã!à í“ ".".#!S!S!S !¾"•"•"• è!¾!¾!S!S#!S!ˆ#5"_$ G!ô!ô#¡!ô!ô!ô!ô!ô!ô!"Ê!Ù!Ù!Ù!Ù"D —$È&u"z%Ô$ý!£#P#P$ý#P#P#P"z"z#P$ý&ª&ª'K%ž%ž#ñ$\"¯#†#†")")##!¾!¾%%'œ%ï%ï$B$­(&Z$­& '¶& '¶(&à&à&à).).*&ª(W***(*,+)V(()V+((*,*,((+)V's%Æ's's)÷(J(J)÷'s's) ) (J&(J)÷(õ(õ)Ë)Ë'³'³'³)`)–'é'é)–*l*l(¿''Î'Î*Q(¤'Î'Î(¤(¤(o(o)E)E*+É)E'˜)E'˜%ë'˜*%(o&Â(¤(¤){){'Î){&!'Î+]((&V(&V&V&V&V—êêêêÁÁ==U¨¨¨öI  ‹‹ÞÞššššÃÃíšÏ"ÏÏ·d¾~ѧ TTTTÌÌÌrHõE˜oÂÚÚ±±æ9!“æ99cc--Ú€ë˜ëëߌ9ŒKøKø!!tÎJJ!!J÷JJ€ÓVV€€ßßµbbbµbµŒßJ÷tt¨¨Ñ+UU¨û´´aÌ!y £ £ ó ó!ÊpÛÛ.Û R¥¥øç:· +Bè•B­­­„„××66º x% ÒxxxxËNN¡¡MMó vv # #â⸠ ^¸¸ðÇØ… ß…2…\ tÔ'Ô í í@@@@ii@@i ““@@#«'Ô  ““!X««!X!e ¸¸ #vvvÖÖÖÖ!0ƒ¬¬ÖÖÖƒ¬¬ Y Yv #M ú MM úyÓýý ªý&Ó > > >‘‘ > > >¬¬ÖÖ Ä ÄAî Ä Ä!›A¬¬¬ Y "š@  ŸŸuu!à ·"d!ù!ù!"u!"!"!"u!Ã!à í í ".".!S####k!¾ è è è"•#k#k!S!S!S#$â#5%¹$ !ô G G!ô G#¡!ô!ô!ô!ô"Ê! ,#†!Ù%3#ñ"D#$È$'$'#P#P$ý$ý$ý#P$ý!£"z"z#P$ý&ª&ª'K%ž#ñ"D$\"¯#†#†#Ö#Ö###k#k#k#k$B%ï%ï$B&Z&Z&Z$­'¶& '¶)c*:(&à&à''(W(W(W*(W(W(*,,°+*,*,'©)V((((((+)V's) 's's)÷(J(J)÷%Æ%Æ) ) +¤)÷&(J*¢'H)Ë)Ë'³'³'³)`)–'é&<'é'*l*l(¿'Î'Î*Q(¤'Î'Î(¤(¤**)E)E(o*)E'˜'˜%ë%ë'˜(o&Â&Â(o&÷&÷){){'Î&!&!$t&V&V(&V&V$©&V&V(ÁÁg=ê,¨Uê==êIIööµµÞ‹X..Û...¦¦ÏÏdT§~~éé¿¿HõHõõõõõ-Ú±ÚÚÚ ‡ ½cæ9c¶-ÚWëëë˜!ÎÎÎccŒŒŒ2cµµµµßßßßëëV€-JJJJt!ttJJµµŒßfÀêê++¨¨öII £ö £ÌÌF ó ó™ ˆÛ::::¥øÏÏlBB¿•è*„­Z­­×׺ºããããã6º`xË¡¡    v # ú úâ5ââvv MÇÇððÇÇ!¶¯…2\¯\ ÔÔ  “@Ô ««þþ!X« Ô«« iææQ«Ô'Ô'' #É  ú # # M¬¬¬ Y!0!0"¬¬ YƒƒAAîî¸ ¸!eMMÉÉý ªÓÓ‘‘‘ >‘‘!häää >ÖƒƒÖÖƒ Y¬!0ƒ¬¬ Äj@"š í"š«þÔÔŸ L!"uuu L!ù!"u!ù!ù$|!"!ù!ù". «!X!X!X ¦!S!S##!S!S#¦!S!S#")")!S!S#5#5#5#5 ²"_!ˆ!ˆ!ô!ô!ô#¡!ˆ#5"_ ²"¯$\!Ù#†###ñ —$ý#P#P#P#P#P%Ô%Ô$’"å$’$’"å$’$’'ì'K'K#ñ#ñ###ñ#ñ#Ö#Ö$­$­#Ö#Ö#Ö#Ö#k#k$B$B#Ö#Ö&Z&Z%ž%ž&u&u'¶& &à('ì'ì(Ã(Ã'(Ã'ì&?()Á)Á)Á*˜*˜)Á)Á(()V'©*˜*˜)Á()Œ)Œ'ß)Œ's*Í)÷(J'ß)Œ)Œ'ß) %Æ's) *7(Š*7+ä+ )`'³)`'é&<'(¿(¿(¿'é)–*Q(¤(¤&÷'Î'Î'Î'Î*ò'˜'˜*ò(Ú(Ú+])°)E'˜(o&Â'˜'˜'˜'˜&Œ(9'c'c)))'c'-'-(Ú%€(o&Â&Â%&ÂÁÁg=ê,U¨ê==ê£II£bb8‹²Û.Ûˆ.¦¦ÏÏd·T§ÑÑ<<õHHõõõHHÚ-W- ‡ ‡Ú!“æcÚ-ªW˜˜˜ë!Î!!¶¶ŒŒŒŒcbbµµŒŒŒ2ëëV€-÷÷J÷¤Î!ÎÎJJbbŒ9==~~UU £öIIIö!y!yF ó ó óÛ ˆ²²çç::¥øÏÏlï••B„„­­­××  ãããã6ã ³xË¡¡    v #  â5ââ # # óð!JððÇÇ \…2 \\ ÔÔÔÔii“@Ô ««þþ«þ'Ô««i ““þþ Ô'zÔ".!ÐvMM # #M úÿÿ¬ÿƒƒ¬¬¬ Yƒ)””îî¸ ¸ MMÉÉ ªýÓÓ‘‘‘ > >ä» > >‘!ëƒÖ!0ƒÖƒ" Y!0ƒÿÿ Ä Ä í í@“!X« Ÿ LÈuuŸ L!""Ï!ù!ù!"!"!ù!ù". «!X!X!X ¦ù!S#!S#!S#!S¦!S# |#Ö###5#5!ˆ!ˆ ²"_!ˆ!ˆ!ô!ô!ô#¡!ˆ#5"_ ²!"¯!Ù#†##"D"D&ª!£#P#P#P#P"z%Ô&?$’"å&?$’"å&?)™(ø%ž#ñ#ñ###ñ#ñ#Ö#Ö##")")%ƒ%ƒ%%$B$B%ƒ%ƒ&Z&Z%ž%ž&u&u'¶& %3&à$’'ì%i(Ã%i''ì&?&g((((ë(ë+n+n(()V'©(ë(ë()Á)Œ)Œ'ß)Œ) ) (J)÷'ß)Œ+9)Œ's's's) (Š&Ý(Š*7)`'³)`'³)–'é'(¿'''é)–(¤&÷&÷(¤+(+(){){)E)E)E,Ÿ(Ú(Ú+])°'˜)E*(o%ë)E)E)E&Œ(9'c'c)%¶'c%¶'-'-(Ú(Ú*+É*%(o—ÁnUUÁê—öö  bb8‹ÛÛ²²²SS"";;;;~~§T¿¿¿¿ ¢HÌõõ±±± ½9Œ¶c--ooë>¥¥!!ŒŒßŒŒ9ccµbµµb9ß©VVÎ!!Î!Q¤ÎÎ!ÎÎ!bbbbÀÑ~¨UIöÌrÌÌ £ £F ó™ ó ˆ"5!_²çç ¾Ï"Ï"¿lBïBBBB××*„­­­66º gº 6㺠 `N¡¡¡ˆâââvÉMM!e ââMM  ððÇ"!ðð t"! … ß \…2'Ô«þ@ íi þþ«þÔÔ«þþ« “““@þ«".Ôþ«". MMMM ú ú úM¬¬¬¬¬¬ Y Y¬ YÖ)A”A∠MM úýýÓÓ‘ >‘‘!»»h > >‘!ë¬ Y!0ƒƒ!0¬¬!0ÖÖƒî!›   iþ««!XuuÈ!"!"!"!"uu!" L!ù!"!" L!ù". ".". #Û") | |#Ö!S!S¦#!S¦!S!S###Ö%ƒ"_$ $ "_"_ ²#5#5$w$w#¡#¡"_"_#5#5#† ,#†#†#$È!n##P#P#P#P"z"z"z$'#¼%i#¼%i$’!8''&u$È#ñ#ñ#!n$È$È%ƒ#Ö#Ö%ƒ")")$­$­&Å&Å(r%$­$­&Z&Z&u&u(ø'K'¶& &à&à$’'ì&?)™(Ã#¼&?'ì%‘%‘((*˜(ë*˜*˜)V)V+Ù*,*˜(ë+n)Á)Œ+9)Œ'ß's's*Í*Í)Œ)Œ)Œ)Œ) 's) ) '³'³(Š(Š%0(Š(Š(Š*l'(¿(¿(¿'(¿(¿&÷&÷&!){'Î){'Î'Î)E*ò.L*ò(Ú(Ú+])°+É(o*(o&Â(o)E)E&Œ&Œ(9(9&Œ&Œ&Œ(9((&V('˜'˜'˜%ë(o—ÁgÁ,,Á=êöö  bb8‹ÛÛ²X²¦¦ÏÏ;;;; Ø~T§¿¿õõÌõõ±±± ½ ½ ½9Œ ½ÚÚoo˜E¥¥ÎÎŒŒŒ9æ9¶bµµµµµ9ßÂhÂVV!Î!ÎJ÷ÎÎÎ {Î!bbbbÀÀÀÑ~¨UIöÌÌÌÌööF™FFÛ ˆ²ç#A ¾|ÏÏ|l¿•BBBBB××××­Z6`  ºãº gº Nû¡¡ˆˆˆâvÉMM!e ââMM  CCÇÇðð t"! … ß \2…Ô «!X@ íi ««þ« !X«þ«ÔÔ“““@«þÔÔ!X«Ô MMMM ú ú úM Y Y¬¬ Y Y Y Y¬ÿÖƒîAAâˆó M úý£&!€ >‘‘‘hhh!‘‘ > > Y¬ƒ!0ƒ!0¬¬ƒƒÖƒî!› Ä Ä   i«!X!X#uuu"Ï!"!"!"uuÈ LŸ!"!" L!ù".#Û".".".". |")")")!S!S¦##!S!S!S###Ö%ƒ"_ ²"_$ $ "_!ˆ!ˆ"Ê"Ê!ô!ô"_"_#5#5#†#†!Ù!Ù!n##!n!£$ý#Pö"z%Ô"z$'"#¼%i'"å"å#¼'("#"D%ž#!n!n!n#Ö%ƒ#Ö%ƒ")")##%%%%$­$­$­(&u&u'K%ž& '¶&à&à&?)™'ì'ì(Ã'&?'ì'>'>)Á)Á(ë*˜*˜*˜++*,((ë*˜+n)Á)Œ'ß)Œ'ß) ) ) ) )Œ)Œ'ß'ß) 's) ) )`)`(Š(Š(Š(Š(Š(Š*l'(¿(¿(¿*l*l*l(¤(¤){){'Î){'Î'Î)E1¦3S,Ÿ*‡*‡()°(o(o(o*(o&Â'˜'˜&Œ)æ(9$ß(9(9(9)æ)°&V&V(%ë%ë$>%ë&Âöbµµb Í sss  bµµµÍÍ  GšÃÃÚG|Ïù¦dŽèÌõ›³³`  T éé!CéŠÝ``!C– l¿é–!C–ÚÚÚÚWÚÚ˜˜Â˜˜ÚÚ--}Ð}ÐT§}}è;Ž;èè¿§§§ú§§}!×TT}}ÐÐ}}ø¥ÏÏøøÏÏø¥|!)Ï|"ÏÞÞ´‹ 8a´ 8!å 8 8ÌÌöI6ã‰ã%x¡¡6ãã66ãòEEòòòu««þþi¼¼¬¬)ƒƒÖÖƒ # #MM #vM ÖÖÿ¬Öƒƒƒ¸  !eMM!Ð!Ð"º!=û!¨!¨!¨û!¨ûû!=!= 1 1!­ZZ­­ZZ„ 1ÆÆïï¯ \ !¶\…2 t t!J!JÇǬ¬¬¬¸¸    ¸¸A”jjƒƒ¬¬Öƒ¬ Y¬¬ƒÖ!0ƒ!0ÖAîj½¸¸  ú úMM% Òûû!="ê!=ººº"% Òû!¨ œBÆ­!!Þ 1!=!="ê!= Ò"""!8!8 b b!£#P!£#P"D —!n!n#†!Ù"¯"¯#P!£"z"z$'$'$ý!£U!#†#†$È###"_"_#5#5"_$ #5#5%N%N$w$w$w$w"Ê! #k è"•")#Ö#Ö'0'f%¹%¹%¹#¡#¡#¡ G$ $ %¹%¹!ˆ#5%¹$ $B$B%ï$B#Ö#Ö#Ö%ƒ& & &à&à("("&u&u%i(Ã&?$’').(W(W)Œ)Œ+9)Œ(µ*b)Œ)Œ(ë'>)Á)Á*,*,)V+(µ''ß'ß) *Í)÷+¤'>'>'>'>()Á(((õ*¢&q((õ(õ'H%›&Ý(Š(Š(Š&q(()Ë*l(¿'é)–(T(T)*)**/1‹,„,*l+C)–(õ(õ*¢*¢)`'³&Ý&Ý(õ(õ(()Ë&q'H*¢)`)`)`'³&Ý&Ý'³'³'Iµbbµs  ÍsssÍbµbb  ÍÍGšpppšG )|LùdŽèÌ››³`³TT§Téé–<Š 7``é<¿ l–!C!C– ‡ ‡ÚÚ±ÚÚÂoEEooEEÚÚ--}Ð *}T§}};Ž;èèè¿§§§ú§§}}§§ *Ð}}ÐÐø¥ÏÏ¥¥ÏÏøKÏ|Ï"Ï|‹‹a´‹Þa´ 8!å 8 8!yöIã66Ëx¡¡6ãããã6ãòŸòEòòÈÈþþQQ¼ii¼¬¬)ƒ)Ö!0ƒv!ÐMMv # úMƒƒ¬ YƒÖÖÖ¸ ¸¸  ú!Ð!Ð"`ãNûûûNûûûããã!= 1 1ZZZZ­­­­×„ÆÆ œ œ\\\ \\…2 t t!J!JÇÇ Ä Ä¬¬¬¬!e!e  ¸¸¸¸A Y YÖƒ Y¬ Y YƒÖÖƒƒƒ!›î ĸ¸¸¸MM  ú% Òûûã!= g g g g% Ò!¨ûïïÆ­! 1„"ê!=% Ò Ò$,!8!8 b b!£#Pö!£"D —## ,!Ù!!!£#P"z"z"z"z!£!£"¯!#†#†$È###"_"_$â$â"_ ²$â$â&û&û$w$w"Ê"Ê$w"Ê!¾%"• è#Ö%ƒ%ƒ(Ý'f%¹$ $ #¡#¡&û#¡%¹%¹%¹%¹$â#5$ %¹%ï%ï'œ%ï%ƒ")#Ö%ƒ& & %3%3&u&u&u&u%i%i&?'ì).'&ª&ª)Œ)Œ+9)Œ(µ*b'ß+9*˜(ë)Á)Á*,*,'©)V*b(µ)Œ)Œ) 's)÷(J*˜'>'>'>&g((('H(õ()Ë%›(õ(õ'H&Ý(Š&Ý&Ý()Ë)Ë((¿*l+C)–**)*)**+®*×)**l(¿)–'é'H'H(õ(õ)`'³&Ý&Ý'H'H(((((õ(õ&)`+ )`(Š(Š'³'³'sÞÞbµII   ÍIIÞ‹bb££ÍÍGGšGpp||Ï|dddÌH›³³ŠÝ+ Ø~+¿¿é銊³`Hõ ¢õ<<–– l l–!C!^±±--ÂÂEEEE˜˜WÚ-§§}} *}}}è;;èèèeTTTúúú#ÐvÐ!×} * *} *øøøK¥¥ø¥!)Ï"Ï¥¥¥¥Þ 8a´‹‹Þ‹a! 8 8ö £ÌÌ6ãã6%xxË  6ãã `òŸEEÈÈþþQþiiii¬¬Ö)ÿ¬ƒƒ  úMMv #MM))¬¬¬¬ƒÖ  ââvv úM g º gNN% ÒûN%%!=Z!ZZZZ„ 1×××„ÆÆ!s…2\\2 ß!¶!¶Ç t"!ÇððÇ"! Ä Ä Ä Ä¬¬¬ÿ¸!e ¸!e¸ ¸”Aj"q!0ÖÖ!0Ö!0ƒÖ Y¬¬ Yƒƒ!0ÖîAjââââ #vM úû!¨" Òº gºº!="ê Ò ÒNN"I œBBZ!!!!=""%%!¨#U"""" Í"z$' Í!n!n"D —"¯"¯"¯! Í"z"z$'"z Í!£#P"¯$\%3%3#ñ#ñ#ñ"D"_"_$â$â!ˆ#5%¹"_"Ê$w$w"Ê"Ê"Ê!ô!ô è"•#k!¾#Ö%ƒ%ƒ(Ý'f%¹#5#5&$$w&û#¡$ "_"_$ $â$â$â$â%%&Å&Å$­$­$­$­#†%3&à&à&u&u%ž'K'(Ã%i'&ª&ª''(µ'(µ(µ(µ*b'ß'ß*˜,E(ë'>)V)V*,*,)Œ'ß'ß'ß)÷+¤) 's)Á(((&g((ë'>'H'H*¢*¢'H*¢((&Ý*7(Š&Ý'H*¢*¢(õ(¿*l)–+C(T(T(T(T*×*×*&§'é&<(¿(¿)Ë)Ë(õ'H'³'³)`'³%›(õ(õ'H(õ*¢*¢'H&Ý(Š+ä+ä)`'³&&'sÞÞbµöö  Í öœÞ‹bb££  GGšGp Ê )ÏÏ|dÌ ¢õ³³ŠÝ~+~+¿¿!C!CŠŠ³›HHõ––éé l<é±±±±ÚÚooEEEEEE±Ú-§§}}}Ð}}è;;èèèe§§§§§§Ð}}#}} *Ð} *¥¥ R¥ R Rø¥||"Ïøøøø‹‹´a‹‹‹ 8´aÞÞö £ÌÌã6ã6x%˳ ã6㺠òŸŸŸÈÈÈÈþþQ¤iiiÿÿÖ)¬ YÖÖ  ú ú úv #MMÖÖ¬¬ÿÿ)Ö  ââvv M g  ºûû% ÒûN%%!=!=!=Z!ZZZZ 1„ 1 1 1„l!s# 2 ß\\2 ß tÇÇÇ t t Ä Ä Y Y¬ÿ¸!e¸!e!e¸!e¸Aî ăƒƒƒƒƒƒÖ Y" Y¬ƒƒƒƒîA Äââ #v úMû!¨% Òº g g gã%%ûû œ"I œBZ!!!"ê!= g g Ò Òû!¨"" b b Í"z"z"z!n!n"D#ñ$\!!U Í"z"z$'$'"zö!£$\"¯#†#†#ñ#ñ"D#ñ"_"_$â!ˆ#5$â"_"_$w"Ê$w"Ê$w$w#¡#¡ è"•#k!¾#Ö%ƒ%ƒ(Ý'f"_$â$â$w&$%N%N$ "_$ %¹$â$â$â$â%%#k&Å((##%3#†%3%3#&u%ž'K%i'(Ã'(W$ý'''%['''(µ)Œ)Œ(ë*˜(ë'>++*,&Ò'ß)Œ)Œ)Œ(J)÷*Í) (&g(+n)Á((ë'>'H'H(õ(õ(õ(õ((%0(Š+ä*7(õ(õ(õ*¢*l(¿'é)–(T(T(T(T'}'}+®+®)–'é(¿(¿+x((õ'H'³'³'³&'H'H'H%›*¢(õ(õ(õ&Ý%0%0(Š&'³&&'‹µµ‹‹ÍÍ  bµ8‹ s z£ö  GG Ê Êppp;;¦¦¦ùÝÝÝŠH›õH¿ l––T   õõ̳³ÝŠ––¿¿ §~ ؘE ò òEE ò˜ÚÚ± ‡Ú˜E˜E}Ч§¿¿ÐЧ§TT} *¿eŽ;eŽè!§§T}Ðú§Ï!) R¥¥ R¥¥ R¥ÏÏÏ|||!yÌÌ!aa´rÌr‹ 8‹ 8û¡N¡xxËË66 ºN¡û¡ÈòE] + · +i¼æ“ÔÔþþ¬¬ÿÿjAA¸ ¸¸ÉvM AAîAAîAîvv M¸ ââ gºº g!= gº%%% ÒN!¨!¨ûÆÆÆBïïBïï„ 1 1 1!¶ \\\ \\\\ ß2 tÇðîîîîAA5⸸¸¸!e¸ƒƒ¬¬AAAîjƒƒ¬ Y Äj ă)ƒ!0¸!e¸¸ââ5 º gûûûûº "ê Ò%%%!!!Þ 1ZZ!Zûû Ò Ò" g"ê#Pö Í Í"""å!8!!#†#†"D"D —"D""!8"å#P$ý#P#P!!"¯"¯##"D#ñÛ#5$â!ˆ!ô#¡#¡#¡#5#5!ˆ!ˆ"Ê"Ê"Ê!!S#%ƒ#Ö")")#)´&û G$w$w#¡%N&$&$$ "_"_$ $â$â#5$â%ï$B#k%&Å&Å%%%ž%ž%ž%ž%ž%ž%ž%ž$'$'&ª&ª'').'%Æ's(J(J) ) ) *Í)V'©'©)V+)V*,(*Í) )÷(J) *Í*Í's(ë'>)Á(((*,('H'H&q()Ë)Ë'H(õ)Ë&q*¢(õ(õ(õ)Ë((¿(¿)–)–)*%Ð&§(T'é'é'é)–)–)–*l'(Š&Ý'³)`(õ(õ&q&q((&q&q)`'³&&(&q%›%›&'³%0%0&<‹µµÞÞ    bµ8‹s ÍÍöI  GGppÃÃp¾¾;;¦¦ù¦ÝÝŠÝ›HH›¿ééT TTõõr`Š 7–– l  ++E òEEEEEEÚÚ±±± ‡Ú˜EE˜}Ч§e¿!×}§§TT} *;è¿;;§§ú§}ЧTÏÏ R¥ø¥¥¥¥ R||!)|!)!)!y!yÌÌ!aa´r‹ 8‹ 8ûûûNxxxxãã ºN¡NNÈòŸ] + + · i“@ÔÔþþ¬RR¬ ÄAA¸ !e vÉ úMAAîAî!›”Avv M¸!e gºº g㺠g Ò Ò Ò%N!¨ûNÆÆÆïB œïÆlïï„ 1!Þ!Þ!¶ \\¯\\\ 2 ß tÇðîîîîAAâ ¸¸  ¸!eƒƒ Y Yîîî!› Ä!0Ö¬ Y Ä!0Ö"Ý!0¸!e¸¸ ââ gºûûûû gº% Ò%%!!!Þ 1!!Z!ûû%"#Á"!=!=!£!£"z"z""!8‹!!!Ù!Ù — —"D —""‹!8#P!£!£!£!!!$\$È$È#ñ"D#5#5!ˆ!ˆ G!ô#¡#¡#5#5!ˆ!ˆ"Ê"Ê$w"Ê#$­'0%ƒ")")$­(%N!ô!$w#¡%N$w$w"_$ %¹$ #5#5#5$â$B%ï%#k#k#k%%"D%ž%ž(ø'K'K'K'K%Ô%Ô&ª&ª).%Ô%Ô') 's(J(J's's) 's)V'©)V++)V+Ù*,) *Í)÷(J) *Í*Í*Í,E*˜(&g((*,+Ù*¢*¢)Ë()Ë&q'H(õ((*¢(õ%›(õ)Ë((¿(¿'é'é)*)*(T&§&<)–'é)–'é+C*l'*7(Š'³)`(õ(õ($Ä((&q&q'³&&&&q(%›%›'³&&Ý&Ý'éµbµ Í  bbµööI£Í ö£ppšô;;;;S¦ù¦ŠŠ³³Hõõõ¿¿¿~+TTõ ¢ ¢›³` 7!ä l l¿ l++TT˜EEEo E˜ÚÚ±±˜Eoo§§T§;è;è *}}} *}Ð};èèè •èeeÐÐÐÐTT} *¥¥!)!)ÏÏ R R¥¥!)|!ÿ!ÿ!)|"P"P"P £a´‹ÞIöIö´a´a Ò Ò% Òû¡xx6ãããNN¡¡ŸŸŸŸ†3 ·"d%!à i«!XÔÔ¬ÿÿÿA!›îAâ⸸MM úMîîîAîîAAv #M ú ââ g gã!= g g!= Ò Ò!¨!¨% Ò ÒxlÆÆÆ œ œ!sÆïïÆÆ„!Þ!Z!¶\…22…\ \\…2 t t t tîî!›AîAâ "< ± â Y Y Y Yîîîî Ä Äƒƒÿ¬AAƒƒ!0!0âââ ¸  ¸º g!=!¨û Ò Ò" gºº%"!¨û 1!ÞZZZ"´ 1!Þ!¨ûN#U"ê"ê!="z$'"z$' b"#¼"!Ù!Ù!Ù!Ù#!n##""""!£!£#P$ý"¯"¯#†#†$È$È##!ˆ!ˆ#5#5#¡!ô#¡#¡"_"_"_"_!"Ê#¡#¡%ƒ#Ö%ƒ'0#Ö#Ö$­(&$$w"Ê"Ê#¡#¡#¡!ô$â$â%¹$ #5#5$ $ $B'œ%#k$B"•"•$B%ž'K'K%ž&u&u$È("%Ô'''&ª&ª&ª&ª(J(J&)÷) *Í)÷(J(()V+*,()V)V*Í*Í)÷+¤+¤)÷*Í*Í+n)Á(ë(ë*,(((((+x((õ%›(&q(õ'H()Ë)Ë)Ë*¢'H)–'é'é)–)*)*(T(T'(¿*l*l(¿*l)–)–(Š(Š(Š(Š(õ*¢'H(õ(õ%›&q)Ë'³&)`&'H%›&q&q'³'³&Ý&Ý'bbµµµÍ   µbµb££öö Í£öpÃÃpGG;;;;¦ùù¦ÝݳYHõõõ¿¿ l¿~+TTõ ¢ ¢õ³`ÝŠ¿ l Ø ØTT˜EEEo  òE"4"4!^# ±±!^±E ò  §!!ú;è •è *}}}!× * *}è;èè •è}}ÐЧ§}Ð!ÿ¥|||| R R R R$ƒ"Ö R R|!)"P"P"P £!aÞ‹œIIö´aa´%%x%NNxx6ãããNô¡¡òòòò3à$,r/+(w!à Qþ'' Y¬¬¬AA”Aâ⸸MMM îîîAîîAAÉvM ú ââ ººººã%%!¨!¨% Ò Ò ÒÆÆÆÆ œ œÆïï!s!Þ!ÞZ­\\2…Ø…\ ¯2 ßÇÇ t tîîîîA”â â ¸^5⬬¬¬AA!›!› Äjƒƒÿ¬îî Ä Äƒƒƒƒââ ⸠¸!e gºãNûx Ò gº g Ò Ò!¨#U!Þ 1ZZ!! 1!Þ!¨û!¨#U"ê"ê!="z$' Í "#¼%i b!Ù!Ù!Ù!Ù#!nÁ#""#¼#¼!£!£$ý#P"¯"¯!Ù!Ù$È!n##!ˆ!ˆ#5#5#¡%N#¡#¡"_"_"_"_$w"Ê#¡ G%ƒ#Ö#Ö%ƒ#Ö#Ö$­('Ñ"Ê$w$w#¡#¡#¡!ô#5&$ "_$â$â$ $ $B'œ#k!¾%ï$B$B%ï%ž#ñ#ñ%ž&u&u&u&u').''&ª&ª**&&(J(J) *Í)÷(J&Ò&Ò)V++Ù*,)V,°*Í*Í)÷(J)÷(J) ) )Á+n(ë(ë*,((+Ù)Ë)Ë)Ë)Ë(õ(õ+x)Ë*¢(õ)Ë(((*¢*¢+C)–+C)–'}'}**(¿'*l*l,*l)–)–(Š(Š(Š(Š(õ'H'H(õ*¢'H&q)Ë'³)`'³'³'H%›&q&q'³'³&Ý&Ý' Þ1µµ‹‹µbööIöbÞ‹ÞÞbµÏÏù¦ •è¾ •; •èd§§T§§T TT  T§T§ !yÌõõrrÝŠ! ` ¢"O!yÌ{Î¥ R¥K¥ R!“æ ½ ½"Õ!({!(!^± ‡ ‡è •!l} *§§§TTT •迉ܳ Ë›HÜÜY³³³ Rø"| ¾||!ÿ!ÿ R!ÿ R!ÿ"P#ý#ý £!å‹´´ÞÞ 8‹ööö £ ºããxx¡¡ ³ããæææ“@'¡1¯;½@#7Â+0$|ÈòŸj Ä ÄAî¸^¸¸M úM MM  ú!Ð # #vAA Ä ÄAAïïÆ„„­­ïï!s# !ZZ!­ZZ­× 1!Þ 1ÆÆÆÆ2222\ \!¶ÇÇ!J!J 22ƒÖÖƒ¬ YÖƒ¬ YÖƒ!0ƒƒƒîA ÄÖÖƒƒ ú úM úM ú ú úÖÖ Y¬îîï œ œï­! 1 1 œ œ œï 1!Þ 1 1"%Nû%% Ò Ò!!!Þ!Þ# !s"I"I!n!n —=!n!n"D —$\"¯#†!Ù#†!Ù!Ù!Ù"#¼"å"å!£#P"z"z#¼#¼!8"å"å"å#¼"!ô#¡"Ê!#5#5#5#5!¾%"•$B&Z##¦#¡#¡%N#¡$ "_&(<($­$­$­#Ö%ƒ#$­%%$B"•#Ö#Ö$­$­&Z$­#Ö#Ö$­$­!S$­$ý$ý&ª&ª''&ª&ª%ž'K'K'K&à&à&à*:'ß&2'ß&2(J(J%Æ) ) ) *Í*Í*Í*Í) ,z*,*,*,*,(()V)V*,*,(+Ù*,*,'©)V&q)Ë(()`)`)`)`*(T(T+®*×'}(T(T(õ%›)Ë(()Ë)Ë)Ë(õ'H'H(õ+ + *7(Š*7*7&Ý&Ý'H%›'H(õ(T(T(T*)–)–'%e(õ%›%›%›'³&&&%0 ‹Þb88bµI£öIµµ‹Þ‹‹b  )Ïù¦è;¾èèè •d§  TT§T  !®!® T   ÌÌÌ!y ¢ ¢ÌÌ 7Š! ` ¢õ!y#&!({¥ø Røø¥!“æ ½ ½!("Õ{!(±!^ ‡ ‡è •¿¿} *§§§TTTè •¿‰!6³ ËH›Üܳ³øž"| ¾|| R R!ÿ R R!ÿ"P#ý#ý £ 8 8´´‹‹‹ÞIIIöº g!=!=!=ãxx¡¡  ãã@@“@$G3\BqEËF×E*=Ÿ,ÝuÈŸòj½Aî  ¸¸M  úMMM  ú #vv #AA Ä ÄAAïïÆ 1×ZZ œ œÆ!sZ­­Z­­Z„„„×lÆÆÆÆÆ2222 \\!¶ÇÇ!¶!¶ ß ß Ä Ä Ä ÄƒÖÖƒjj¬ Yƒ!0¬ YÖƒ!0ƒƒ)AîjÖ!0!0!0MMM úM ú ú úƒƒ Y"AAïBïB­! 1 1 œ œBï 1!Þ„„ Ò Òû!¨ Ò Ò Ò ÒZ"´!Þ!Þ!sÆ"I"I!n!n"D"D!n!n —"D"¯! ,!Ù!Ù#†#†#†#¼""å"å!£#P$'$'"""å$’"å"å%i b!ô#¡!"Ê!ˆ$â#5#5#k#k$B"•##!S!S!ô%N!ô#¡"_ ²$â)é($­&Z##Ö")#!S!¾!¾"•$B")")##$­#")")$­$­#&Z(W$ý&ª&ª%Ô%Ô$ý$ý'K%ž#ñ'K*:*:(+ç)Œ'ß)Œ'ß)÷&%Æ) ) ) *Í*Í) ) ) ,z*,*,*,*,*,*,'©'©*,*,(((()V+)Ë)Ë)Ë&q'³'³'³'³*(T&§**×'}(T(T'H'H()Ë()Ë(((õ'H*¢(õ+ + *7+ä*7*7*7*7*¢(õ(õ'H(T$ú$ú&§'é'é(¿''H'H'H'H'³&'³'³&Ý 8Þ[µ‹‹‹‹ööö£‹‹8Þbb‹‹|"ÏÏd¾¾¾¾¾§TTT~+ !® !® T    õ ¢ ¢"O ¢õõ ¢`³Š 7ÌÌÌ#& R¥{Î¥ R{{c"j{!( R!ÿ±!^!^W!l!l¿§T}} * *TTè •¿¿‰‰Ü‰q³³ `³³YÏÏ"|::ç:Ï||| R!ÿ R R"P#ý#&!y 8 8´´‹‹´rrr g g!= gº `x%% Òºººº  i!Ã,¨?GxGxIZG­F5>&)$|!ùòj Ä!›A ĸ â vÉ # #M ú ú"§MM # #îîAAîîîîïïï œZ­××!s!s!s!ׄ­Z­Z 1„ZZïB!s œ œÆÆ……2…¯\2 ßÇ t 22îî Ä Ä¬¬ƒ!0 Ĭ Yƒƒ¬ Y¬¬!0ƒ YÿAî Y YƒƒMMvvv!Ð ú ¬¬¬"!›”î!›!sÆZZ­Z œïÆ!s 1 1„„!¨#U!¨ûûNN!¨Z"´ 1 1 œ œ œ"I#ñ"D —"D#ñ"D#!nU!"¯!#†#†"¯!!8‹"""z$'#P#P b b!8$’#¼#¼"å!8"Ê$w"Ê"Ê"_$ #5$â"•"•!¾!¾#Ö#Ö#Ö#Ö$w&$$w&$$â#5&)é&Z$­$­##Ö#Ö%ƒ#Ö"•$B%%%ƒ#Ö#Ö%ƒ&Z###$­&Z$­##P#P$ý(W$ý&ª$'$'&u("'K(ø*:(*:+ç)Œ'ß'''s's(J+¤(J(J) *Í*Í*Í+¤+¤+,°+,°)V'©&Ò()V)V+)V'©'©&Ò*,*¢(õ(&q&Ý&Ý(Š(Š)*'}&§(T'})*'}'}((()Ë(((õ(õ(õ(õ(õ'H'³)`*7+ä*7*7+ä(Š(õ*¢(('}'}'}'}'é'é'(¿%›%›&q&q&Ý&Ý&Ý&Ý&Ý ‹‹µ ‹‹88££Iö‹ å88  8Þ||ÏÏd¾d¾¾dT   ~+T  !®#[!®!®T #[ ¢"O ¢õ ¢õõ ¢! `Š 7ÌÌ!y R¥Î{¥øÎ!( ½ ½ ½!({¥ R# !^!^±!l!l!l¿T! * * * *TTè •!l!l‰‰!6‰"x ˳³³³³||ÏÏ::ç:Ï|!)!)¥ R R R"P £!yÌ 8 8!!‹‹a´rrrºº!=º  ºx%%xººººii!Ã!Ã.U@ÄGxGxG­FF;ò+0&)#¦Ÿj Ä!›Aj¸ 5â #v # # ú"§"§$T ú  # #!›AAAîîîîïïïBZ!„„ÆÆ!s!s!ZׄZ­Z!„×ZZ œïÆÆï"IÆÆ222…\ …2 tÇ\\ ß ßî!0ƒ Ĭ Yƒƒ Y¬ÿ YƒÖ Y YAƒƒMM # # # #MM Y Y¬¬îAî!›!sÆÆÆZZ­Z"I œ!sÆ„„ 1 1!¨#UûNû!¨!¨!¨!! 1 1 œ œ œ"I —ê#ñ"D —"D!n#"¯!!"¯#†#†!"¯!8"å#¼#¼$'"z!£!£ b#¼"å"å%i"!8"å"Ê$w"Ê"Ê$ "_#5!ˆ"•"•#k#k#Ö#Ö")")"Ê$w"Ê$w$â&&)é(##$­#Ö#Ö#Ö%ƒ$B%ï&Å&Å#Ö")#Ö%ƒ$­$­##&Z$­$­&Z$ý$ý&ª&ª&ª$ý%Ô%Ô$È&u(ø'K&à(+ç*:)Œ'ß'') ) (J(J(J+¤) 's*Í*Í+¤+¤+)V+)V,°+-†(++'©)V)V)V(('H%›&q(&Ý*7*7*7)*'}(T*'})*'}'}((&q((('H'H'H*¢(õ'H'³)`+ä*7+ä(Š*7*7(õ*¢(('}'}%Ð)*'é'é'(¿%›%›$Ä(&Ý&Ý&Ý&Ý&Ý£ÍÍÍ zbbµµÍ s Iö z z å8"’‹èè|| ) )d!k¾èèèèTT+"…éé¿¿¿ l–– l l!C!C!ä!ä! ³ 7Š 7 7"º` 7!äÌÌõH!“!“9楥!("Õ!“!“"j"j ½ ½ææ ò"Ÿ#v!É!!!! *!× *!× • •¿¿T! * *!¢õõ!¢ Ë"x ˉ‰‰‰³ `|||| ¾ç:ÏÏ¥!ÿ¥ R|!)!å!å!a"»aa!a´´´rrœI  ººº ãã  ãããã ºÔÔ". &Ê42CGHNGBGBCè3&$"dààÖ)Ö!0jjAA Mvv¸ ââvv ú úâ5¸ ¬¬ Y¬ Ä Ä Ä!Z„„!s!s œïïï œï!! 1„lÆÆïï„„!ZÆÆÆÆ22…2 t tð \2 ß \ ß ß Äîîî Yÿ¬¬ƒƒAAîî Y Y¬¬AAAA¸¸ âââ  ÄjƒƒƒÖÆÆ œï!Þ!ÞZZïï!sÆZZ!Þ!Þ Ò Òûû"" g gZZ 1!Þ!Þ!Þ"´"´!!$\"¯!Ù!Ù ,!Ù!Ù ,!$\"¯!"¯$\!£!£#P&ª#¼"‹!8$ý#P#P#P#P#P!£#P#¡!ô#¡!ô$â$â$â#5!¾#k#k%%ƒ#Ö#Ö#Ö!ô!ô"Ê"Ê$â$â%¹)&Å#k$B$B$­$­#Ö#Ö#k#k%&Å%!¾$B%ï#k#k%ï$B$B%ï%ï%ï$’$’&?&?%Ô%Ô&ª$ý'K%ž&u("&à&à+)c(J(J&&)÷&(J(J) *Í's%Æ*b,,*b*˜*˜)Á)Á++++,E(ë$º&g(*,&Ò%%'³&&Ý*7(õ(õ(õ*¢(¿(¿)–)–)*)*)*)*'H'H&q&q'H'H()Ë&Ý(Š(Š(Š(Š(Š+ )`)Ë)Ë)Ë()`)`'³'³&<)–&<'é)*'}'}$##%›(õ)Ë('H%›&ÝI   ÍbbbbÍ  ÍöIÍÍ8 å åÞ!kèè|| )Ͼ!k¾èèèèTT++éé l l¿–– l l––!äŠ`` 7Š!äŠ! ! !ä 7!y!y ¢õææ!“æ R R{!(!“!“ ½ ½ ½ ½ææ"Ÿ ò#v!É"®"®TT!×#„!× * •#ï##"®! * *Hõõ!¢ Ë"xq‰‰³³‰‰³ `||||dç!”||¥¥¥ R!)"Ö!å!å!a!!a!a!´´Iœ    º ã㺺6 gº' Ô' &Ê5ßAšCè@Ž3&%¾ +]33Ö)ÖÖj Äî”M v ¸ââ!ÐvMM â^ Y Y¬ Y Ä"q!Z„!Þ!s!s œïïïBï!! 1„ÆlÆïï 1×Z!Æl… ß2…ÇÇð\ …2!¶ 22jAAî¬¬¬¬ƒƒîîîî Y Y Y Yî”AA¸¸â ½ Ä Äƒƒ!0ƒ!s!s"I œ 1 1ZZ œ œ!sÆZZ 1 1 Ò Ò!¨N g g g gZZ!Þ#‹#‹#‹"´ZUU!"¯!Ù!Ù!Ù ,#†!Ù"¯"¯$\"¯"¯!#P#P!£!£#¼%i"å!8#P!£#P&ª!£!£!£#P!ô#¡#¡!ô#5#5#5$â#k!¾#k!¾") |#Ö#Ö#¡#¡$w$w#5#5'f*À%%%ï%ï$­$­#Ö#Ö#k#k%#k#k#k"•$B!¾!¾%ï'œ%ï$B$B$B&?&?&?&?''(W&ª'K(ø&u("*:&à)c'¶$ð$ð&&&&(J(J*Í) ) 's(µ*b*b(µ*˜*˜)Á)Á++)V)V(ë(ë)Á+n*,((&Ò)`'³(Š(Š*¢'H(õ*¢(¿(¿+C+C)*)*)*)*(õ(õ)Ë)Ë'H'H)Ë((Š*7*7*7*7*7)`+ +x+x)Ë('³'³)`)`)–)–&<'é'}%Ð'}$#½$Ä'H'H&q(%›#î(ŠIÍÍöö‹888öö  zÍööb  勾è覦¦ùèèèè¾++++¿¿ l léé¿ l––¿¿! ``` 7 7!ä 7! ! Š!ä ¢ ¢ ½ R!ÿ R R!“!“!“æ ½ ½ ½"j!É!É#voTT * *!×!× * *"B •!l#!× *!!õõ Ë Ë!¢õõõ³/‰" ³Ü‰¥¥ R Rç: ¾ ¾|||Ï||||a"»aaa"»#’!åaaaa £III `` ã6  º gããã Ô'' !Ã(w2…8-.%¾"d +]†3¬ÿÖ)jj  É #^ â #vM ú¸ 5â Y Y¬ Y Ä Ä”î 1 1ZZB œ!s!sïïÆ!s 1 1 1„ œ œ!sÆÆÆ 1 1!ZïB œï\ \¯ tÇð \\\\ 2…jAAj!›îÖ)¬¬¬¬ƒÖj”îîA Y"¬"!›AAî¸ 5⸸â5A!› Ä Y"ƒ!0 œ œ"I œZ!!Þ 1 œ œï œ 1„ 1×!¨!¨%x g" g g!! 1#‹#‹!Þ 1 1 , ,!"¯ , , ,#†"¯!!"¯"¯"¯!!"z"z"z"z!8"å#¼#¼!£!£%Ô%Ô"z"z!£!£"Ê"Ê%N#¡#5!ˆ$ $ è è#k#k#Ö#Ö#!S!ô#¡$w$w$ "_(<)é(r&Å%ï$B%ƒ%ƒ%ƒ")#k%#k#k"•$B$B è$B"•$B%ï%#k%ï%ï&?$’%i''%Ô&ª&ª%ž(ø("("'¶'¶)c'¶'s%Æ%Æ%Æ's's(J)÷+¤)÷(J(J*b(µ(µ*b,E*˜)Á)Á*,&Ò'©)V'>(ë)Á)Á)V)V*,*,)`)`+ )`(õ'H(((¿(¿)–'é(T(T*(T)Ë&q()Ë()Ë)Ë((Š*7(Š*7+ä*7(Š*7*¢,O+x((Š(Š*7*7*l(¿&<'é)*'}(T(T'H'H'H'H#î'H(õ(õ*7£ÍÍöö8 å å åöö z z zÍ££ b‹‹¾èèSSS¦èè •;¾++++¿¿––¿ l–– l l! `! ! 7 7 7!ä! ! !ä!äõ"OÌÌccc R!ÿ!ÿ!ÿ!“!“#@!“"j"j"j$#v#v#v!É!! * * * * * *"B •!l¿ *!×!$[#Oõ"x"x#O!¢!¢!¢ `³Ü!6 ` `‰Ü R R#¬ R:çÏ!)Ï|||||!!aa!!!å 8aaaaöööö ` º6ãã㺺 ºããã'z''i !Ã(w)"d · ·] +3à¬ÿƒÖ Ä ÄMMv!и â !Ð # M!e¸ ⬬¬ Yîî 1 1ZZB œÆÆïï!sÆ 1 1!Þ 1 œ œÆÆ!sÆ„„!"´ïBï œ\ \Ç!J \ \ 2 ßjAAj!›îƒÖ¬¬¬¬ƒ!0jAA Äj”A Y" Y Yîîî!›¸ â !eâ !›!›"q Ĭ Yƒ!0"I"I"I œZ­!Þ 1B œïB 1!Þ#‹ 1!¨!¨ Ò% g" g g­! 1 1!Þ#‹ 1 1!Ù!Ù!"¯!Ù!Ù!"¯"¯$\"¯"¯!! Í Í"z"z"å$’#¼#¼#P#P%Ô"z"z"z#P#P"Ê"Ê#¡%N$â#5$ ² è è!¾%%ƒ")#$­%N#¡$w$w"_$ &+–*%$B"•#Ö#Ö#Ö#Ö#k!¾#k#k$B"•"•"•$B"•$B%ï%#k%ï%ï&?'ì%i#¼%Ô'(W$ý%ž%ž("("'¶'¶& '¶'s%Æ's's's's(J&&(J(J(J*b(µ(µ*b*˜(ë(+n*,*,'©)V'>(ë)Á)Á)V)V*,*,)`)`)`+ (õ'H&q&q'*l'é)–&§&§(T*)Ë&q&q(()Ë()Ë(Š*7(Š&Ý*7(Š(Š*7,O*¢)Ë)Ë*7*7(Š(Š(¿'&<'é'})*(T(T(õ%›%›%›#î'H'H'H(ŠÔ??’’žžž Kà3ààttÇt"c ¶ 'ÔPýÔÔÔ ??hhÔzýª  ¶ ¶àà\\?? ì ìÔ ".".!<!<!§!§ Ñ ÑZZ!! ›#õ!rŪªªª!W!Wªª"c ¶#:! ¶"c"c"c!Â#o#o! ·"d!!"d"d#:!".#Û".". í í@"š"Ï!"$|"Ï$$!à!Ã!à !Ã".".". îî!›î¬ Yƒƒ"q Ä Ä Äj!JÇ t… ß"Œ ß"Â! >‘‘‘»h““¼¼zzþþ] +]]†333llZZ­!&D!=ººã㸠      !e¸ââ #v #v!0ƒ¬ Yj Ĭÿ¬¬¬¬ Y Yââ â ú ú úM Ä Ä Ä Y Y!0ƒââ ¸ # #v #   ¸ââ ¸­­ 1„ 1 1!Z%%% Ò gº gº@@ iÔÔ ii“ í«!X".Ôhh!h!ë‘»!J!J…2 ä‘ > >‘‘ > >…2!¶ Ç t"!"! # # ú ú # #"§M âM"§!Ð!Ð >‘!!hhh! ª ª ª ª ª ªýý !Ë õ"¢#ä Š³# # # #ä#ä"7"7"7#ä#É#É#É#É#^#^!± "ò"ò"" Ú"‡#^% !E"ò$Ÿ"ò!E"ò$Ÿ"ò"ò"ò"ò$Ÿ!±!±%á$4$O$O%%%%$O$O&Ò+Ù'#®'#®"#®#®#®"7"7"7"7#ä Š"7#ä%%#x"¢$O$º# '>%‘#ÿ%¬"R%¬(/&‚'Y%¬'Y'Y'Y'Y(š(š$j'Ä'Y'Y))(š(š(š&í%v(Ð'ù'ù)¦)¦'ù'ù+¤)÷) 's&)÷(J(J'(µ)Œ)Œ) 's*Í,z*Ã%¼(@)í)‚'Õ(«(«&()‚(«*X)))'i*Ã)(@&“'Õ&(&þ(«)L)L(u&È)L)L*"*",™)?(h**€(Ó(Ó'&(Ó'&'&'&'ý'ý'ý'ý'¬%ÿ&Ö&Ö'A'A'A%”&kÔ ì ì??žž K!øà3àà!!Çt!!  \ Ô'ýª ''Ô’’hh''ª!W    à#:  ???? ".".".!<!<!§!§ Ñ Ñ!!"´"´"H"H#!rªª##!W!Wªª"c ¶#:!"c$"c"c!Â#o#o%$"d$ç!"d"d$ç#:#Û%ˆ#Û#Û$G$G"š"š!""Ï"Ï!"$$#:!#p#p !Ã".". ".!›!›!›î" YÖÖ Ä Ä"q"q!J"÷ t"!2"Œ ß2!h‘ >‘‘»h““¼¼ÔÔþ¤°]]]†3††llZZ­­!=  ããã!= ^    ¸^¸ ââv #v #"ÝÖ¬ Y Ä Ä"q" Y Y Y Y Y""ââ â ú ú"§ ú Ä Ä Ä Y#³"ÝÖââ!e¸ # #!Ð #¸¸¸ ââ!e¸ZZ„ 1!Þ„Z­%% Ò%º g gºæ@ iÔÔ''ii@@«!X".Ôhhh!‘‘h»!J"÷!J ß2 ‘ >‘‘ > > > >2 ß \Ç t"!"!vvM"§!Ð!Ð ú ú"<â â  ú # # >‘hh!!h!"W"W"W"W ª ª ª ª#x%%$O"¢#ä#ä!`!`!`!`"7"7 Š Š"7#ä""%v%v#^#^!± "ò"ò"""‡$4&¸!±"ò!E"ò!E!E˜"ò!E!E$Ÿ"ò!E!±!±"‡$4%ü"¢!Ë!Ë"¢%ü&Ò+Ù(µ"#®#®"#®%[%["7"7"7"7"7"7#ä%‘%%#x$O"¢# $º'>%‘'Y%¬#ÿ'Y(/&‚%¬#ÿ%¬%¬%¬%¬&í&í&&'Y'Y'Y'Y(š(š(š&í'#*}+S'ù'ù'ù'ù'ù)÷+¤*Í) (J(J)÷)÷(µ*b)Œ)Œ) *Í) *Í)'i&“(@'Õ)‚*X*X'Õ'Õ(«*X)))'i'i)&“(@&(${&þ(«)L)L*"+Ï)L,¦(u(u'’'’(h**€(Ó(Ó'&'&(Ó'&'&)ª)ª'ý'ý%ÿ'¬&Ö&Ö%”(î'A%”&kª? ì h K Kt"Îàà  tttt3à  ªýÔÔýýÔ hhhhÔ Ô   à3!à ¶ ¶hh"™? #Û##!‘‘ >@“@@«þþþ†Ù3Ù33] +lll­Z„ 1 ºããâ5â⸠¸^ ¸ !e # # # #" Y¬ Yîîî Y Y¬¬ Y"!e vv úM Ä Ä Ä¬ Y!0ƒâ !e # # # #¸¸ ¸!e!e 1„­Z„„Z­xxûNã!=@@@“ þþii@@'Ô!X!X!h‘‘‘‘hh#Î'($¤#c!¶… ß!ë >hh!! > > 2Ø!J"÷!J úM #vM ú ú ú¸ ââM ú ú ú‘ >»h!! >!ëÓÓ!€!€ý ª"W$"¢"¢"¢ õ"7"7"7"7!`³# $º# # # $º"#É!E"ò#^#^"‡ Ú!E˜ o"!±!±#^!±$Ÿ"ò" o˜˜$Ÿ"ò#É" o""‡$4"‡"‡$O$O"¢ õ õ"¢&Ò*,*b'$…$…"Ø!+$…$…# # %‘%‘#ä#ä#ä#ä%%%%$O"¢#ä%‘%‘%‘%¬%¬(/(/(/&‚'Y#ÿ#ÿ%¬&‚$Õ&'Ä&í&í&‚&‚(/&‚'Ä)q(š&í)¦)¦(Ð(Ð)¦)¦)¦+S+¤+¤) ) ) ) ) ) (µ')Œ+9)÷)÷'s) (@)í)*Ã'Õ)‚+/)‚(«(«&þ(«(@(@)í(@'i'i&“(@'Õ${(«(«)L)L*"(u)L*ù*ù)L)?)?'’)?*€*€)ª'ý&P'ý&P'ý'ý'ý'&'&%ÿ%ÿ&Ö&Ö%”'A'A'A(ý’? hžž!!!!3!  tttt!#: ¶ ¶ªýÔÔýýÔ     ". Ô\ ¶!à!à  aa?? ##"é"é"¹$$ú!§ZZ 0!ÝÅÅî ›!W#".Ô ".ª#"c ¶!#:"c"c#:!%#o#o!Â$ç$ç ·"d"d"d$$%ˆ#Û".#Û$G$G"š"š$|&)#¦#¦$ç$ç#:$ç%!Ã#p#p#$²#Û". Ä Ä#H!›"݃ Y"%Ë Ä Ä"q"q ÄîAÇ"! t t22 !¶h»!h >‘‘ >@“@@þQþþ3†††††°]lZ!„×ã㺠ããâ â⸠¸¸ ¸¸¸ # # # # Y¬¬ Yîîîî!0!0 Y Y Y Y Y"#¸ââvvM ú Ä Ä Ä¬ Yƒ!0 â  vvÉ #¸¸ââ¸!e¸¸×„!Z××Z­%%Nû@@“@ÔÔþþii@@Ô'þþh!!ë‘ > >hh t#Î!J !¶22‘ >!»!! > >\\ ß…!J!JM ú!Ð # úMMM¸!eââM ú ú ú >!ëh!!!!ë >ÓÓ!€!€ ªý ª"W"¢H õ"¢#ä Š"7"7# !`# # # !`# o""ò!E!±!±"‡ Ú"ò!E#É"#^#^!±#^"ò!E"#É"ò"ò!E"ò#É" o"$4"‡"‡"‡"¢"¢"¢$O$O%ü&Ò*,*b'$…$…!+"Ø"Ø"Ø# # #ä#ä#ä#ä#ä#ä#x#x"¢$O#ä%‘%‘%‘%¬%¬$Õ$Õ$Õ&‚'Y'Y%¬'Y&‚$Õ'Ä&&í&í$Õ$Õ)Ü(/)q'Ä*G+ô)¦)¦(Ð(Ð)¦)¦)¦+S)÷)÷) ) 's's) ) (µ')Œ+9)÷&*Í) (@)í'i))‚'Õ'Õ)‚(«(«(«*X(@(@(@)í))(@)í'Õ'Õ(«(«)L)L&È%)L'Ÿ)L*ù)?)?)?*ì*€*€)ª'ý&P'ý'ý)ª'ý'ý'&'&'¬'¬&Ö&Ö'A%”'A'A&kÔ    à!à3 K!øtt!33à K KÇtªýÔ' Ôª!W??? ì ! ì ì3!"c t!! Kž'' ".#Û!§ú!§ú"~ ÑMúÅÅî ›!Ý 0ƒÖ? ì"™ ì ì ì?? K K"Î${#¥!ø!ø!ø#Û#Û$±#"Ï$|#¦!ù#:$ç%¾%¾%%%#p$G$G%%%S%S$|$|&”$ç#:#:%ˆ%ˆ'5%ˆ$²$²#Û#Û"q"q"q"q Ä Äî!›$"q Ä$!›A Ä ÄÇ t"÷ð!J t t >‘!»!€!€ ªýÔ ÔÔiiiiŸŸÈòòòŸlZZZ­ûNxxã㸸 ââ â ú ú ú  MM"§ Äj Ä Ä!›î Ä Ä!›!›""""!e¸ ¸"§Mv #" Y Y Y Ä Ä Äv!Ð ú ¸  ¸MM  ú Z­ZZ­!!Z% Ò%%ûû Ò Ò ÔÔ Ô @@“@ii@@ýý&& ªý ªP!J\ &&Ó!€ýý!€!€ \!J!J!J M  ú ú ú úMM ¸ 5Ó!€ ªýhh!ë!ë ª ª!€!€#-!€!€Ó!`³!`!`!`³# $º#ä Š³!`# !`"7"7"#É"ò"ò#^#^% #^!E!E"ò!E$4%á% % % #^#^% $4"‡!±% $Ÿ"ò"ò"ò#É"!E"ò!`!`!`!`# $º(+n)Œ&2%[%[$$#C#C õ"¢%%%%%%%% õ$O%%%%!Ë!Ë#x%%%ü$O#(#(#ÿ#ÿ$j$j&'Ä%@%@&'Ä&$j%@(š'Ä&(š(š'Ä'Ä)q+)¦)¦'#(Ð););););)Œ+9)Œ'ß'ß'ß(µ(µ(µ(µ)Œ'ß&(J) ) 'i)'i)(«(«(«*X&þ&þ(«(«)))í)í)‚'Õ)‚'Õ(«(«(«*X( +)·( +&])L'Ÿ&È*"*€*€(Ó(Ó*€'&)ª&P&P'ý*€'&'&*€(Ó'&'¬%ÿ%)%)%”#ç&k)Å%)    à!à!!ø Kttà†à! K Kt!!ªý Ô Ôª!W?? ì? ! ì ì33 ¶ ¶t!!!ø K ".". #Û".ú!§ú!§ Ñ$úM!rî ›!Ý 0ƒÖ ì?? ì ì ì"™"™!ø!ø"Î${#¥%R#¥#¥%ˆ%ˆ$±#"Ï$|#¦%S#:$ç%¾%¾%%#p!Ã$G$G%%#¦#¦$|$|&”$ç$ç$ç%ˆ%ˆ%ˆ#Û$²$²#Û#Û$$"q"q"q"qî!› Ä"q Ä Ä!›!›"q"q tÇCC"!"!!ë >hh!€&ý ª". ÔÔii  ŸŸuÈŸŸòŸlZ­ZûN%%ã㸸â5â5â ú úMMM ú ú úAî Ä Äîî Y Y Y Y!e¸!e¸MMv #¬ Y"" Ä Ä Ä # #MM ¸!e¸  úMMâ"< ­ZZZZ"´!Z% Ò%%ûû Ò ÒÔ' ÔÔ ÔÔ@@“@  @@ýýÓÓ ªýýý!J \ &&&Óýý!€!€ \ðâââ"< úM ú ú ú úMM ¸ 5Ó!€ý ªhh!ë!ë ª ªÓÓ!€#-!€Ó!`# ³# ³!`# !` Š Š!`³!`# "7"7"#É"ò"ò!±!±% #^"ò"ò!E"ò$4"‡#^#^#^!±#^% "‡ Ú#^#^$Ÿ"ò"ò&L"#É"ò$Ÿ$º!`# # # $º&g-)Œ&2'#®%Æ%Æ#C#C"¢$O#x#x%%%%"¢%ü%%%%%%%%#x%%%ü$O#(&‚%¬%¬'Ä'Ä&'Ä%@(š'Ä&&'Ä%@(š'Ä&(š(š'Ä'Ä&'Ä'ù'ù'#(Ð););'Ž'Ž'ß)Œ'ß)Œ'ß'ß(µ(µ*b*b)Œ'ß(J)÷) ) 'i)'i)(«(«(«*X&þ*X*X&þ*Ã'i&“&“'Õ&('Õ)‚&þ&þ(«*X&]( +( +&]'Ÿ)L%(u(Ó(Ó(Ó(Ó'&'&)ª&P)ª'ý'&'&'&'&'&(Ó'¬)Y%)(ƒ(î'A&k&k&Ö ? ì   ¶!#:!!!! Kž ¶ ¶!!!!!! K K Ô ªªª!W h ì?   ì ì!à  t!!!!t ".$±#!W##Û".!§úúM$$ Ñ$î ›Åƒ 0 0ƒ??»h ! !Â!!!!!ø#¥#¥#¥${"Î&^&^$±$±%S%S#¦%S$ç$ç$$$G%ô#p!Ã$G$G#p#p%S#¦&)$|$ç&”$ç&”&_$²%ˆ%ˆ%ˆ#Û#Û#Û!›!›!›#H$õ#H Ä Ä Ä$"q Ä$"q$$ t t"!ÇÀ!J!J >‘‘ >ý ª ª ª !X«ii@ íÈu LŸuuuÈll¿„×­­Nû"%ãã^¸¸ ¸¸¸   úó vvMM Ä Ä Ä Ä!›!›#HîÖ!0 Y Y¸¸ M ú #v¬ Y¬ YAî ÄM  úMââ â #v Mâ â5ׄZZZZ 1„ûû% Òx%ûN Ô«!XÔ ÔÔ  iiiii ýýýý ªPý£Ç22\\ÓÓPPÓÓ&Ó222…ðð tââ¸!eMMM ú!Ð # úMâ ¸¸ÓÓÓÓ!!#˜!ëÓ!€ÓÓ ª ª ª ª# # # $º"7"7$º!`³!` Š"7!`$º# # !E"ò"ò!E!±  Ú"‡"#É"#É#^!± #^"‡ Ú!±#^"‡"‡#^#^"ò"ò"ò"ò!E$Ÿ#É#É#ä#ä"7"7#ä#ä&g-*b%[$…"Ø$$#C$ð%ü$O$O$O%%%%"¢"¢"¢"¢%ü$O"¢%ü$O$O%¬%¬$Õ$Õ)q&%@(š&í(š'Ä)q&'Ä(š&í(š&í'Ä'Ä&'Ä'Ä)q)¦'ù'ù+S*è);&¸(e'ß)Œ'ß)Œ'ß)Œ(µ(µ*b*b*b(µ's) 's%Æ$æ(@&“(@)‚)‚)‚)‚(«(«(«&þ(@&“&“(@(«%Q&('Õ&þ(«(«*X(á'4%‡%‡'Ÿ'Ÿ'Ÿ'Ÿ(Ó(Ó*€*€'ý&P)ª'ý(Ó(Ó&P'ý(Ó'&'&(Ó'¬'¬'¬'¬(î'A&k)Å)Y ì"™!Â! ¶"c!à!!!!ž K  àà!!!!ž!ø". ªªª!Wh ? ì!Â! ì ì!à  !!t!!t ".!Wª!W#".#Û#T!§!§ú Ñ Ñ Ñ$î ›Å!r 0ƒ 0ƒ??h !  !Â"Î"Î!ø#¥!ø!ø${"Î$±$±&^##¦#¦#¦%S$ç$ç"d"d"š$G&Ê%%ô%ô%%#¦!ù&)$|$ç&”$ç&”&_$²#Û'5'5%ˆ%ˆ%ˆ$õ$õ!›#H#H!› Ä Ä"q"q"q Ä"q Ä"q"q"!"!"!"! t t >!ë‘ > ª"Wýý !X«ii“@Èu LŸÈÈÈullׄ­­ûN%%ã㸸!e¸¸¸ ¸MM M # # ú "q"q!›Aîî!0!0 Y Y!e!eââM ú #v Y¬ÿ¬îA ÄM ú úMâââ #vM úâ 5â„ 1ZZZZ 1„ûû Ò" Ò%N¡Ô'«þ'ÔÔÔ  !Ãi  i ýýýýýý ªPÇ!J!J…wû !€!€PP!€&&Ó ß ß ß2Ç"!ââ ¸"§M úMv # úM ⸸ÓÓ!€!€"Âh >!ë!€#-ÓÓ ª ª ª ª!`!`# $º"7"7# # !`# "7#ä# # # # "ò!E"ò!E#^!± Ú"‡"#É"#É!±#^#^#^$4"‡% #^"‡"‡#^#^"ò"ò"ò"ò!E$Ÿ""#ä#ä"7"7#ä#ä)Á0u,'&2$…$$#C$ð$O"¢$O$O#x&Ò$O$O$O$O%ü$O%ü%ü"¢%ü'Y'Y&‚&‚'Ä'Ä&í&í%@&í'Ä&&'Ä(š&í(š&í'Ä'Ä'Ä)q'Ä)q'ù&L&L)¦*è);&¸(e'ß)Œ)Œ+9'ß)Œ*b*b(µ,*b(µ's) ) 's(@(@(@&“'Õ'Õ)‚)‚&þ*X(«&þ(@&“(@)í*X&þ&('Õ(«&þ*X(«'4%‡'4'4'Ÿ'Ÿ)L)L*€*€*€*€)ª'ý'ý&P(Ó(Ó)ª+W(Ó'&'&(Ó%ÿ%ÿ)Y)Y'A%”((%ÿ!W".".".".!!!!tt  à!??   "."c"c ¶!!!! K Kàààà"Î!! K Kªý ". !Wª".". ª#"."."H ›ÅÅÅ!r › ›!rÅ!r!r!r!r › ›? ì!Â!Â?? ì?!W!W".%ˆ%ó"™$F$F#¥#¥&(${&)"Ï$|"Ï#:#:"d$!#:$ç$ç%¾%¾%¾"d".#Û$²$²%ˆ%ˆ$²&_'Ö'Ö$|'Ö'Ö$|%S'$¿###"<"<"<"<"Ý"Ý Y Y"q"q!›#H#c!¶ ß ß tÇÇ t!J!J t t!! · ·Ÿ L!"uuuŸŸ + + +]­­Z­×„­ ÒxNNº !=!e !e¸â â Ä Äî¬ YÖ!0!0ƒîî Ä Ä!0ƒ"" # #M úM úMM Ä Ä Ä Ä!0!0 Y¬ Y Y Y Yƒ!0ƒƒ"q Ĭ Y¬¬!Z„ 1 œ œïï Ò%!¨NººŸŸÈ]]3à · + + +!!33 tÇ\ \!h!!ÌkÓ t tÇ t!¶\\!¶ÓÓÓ&ý ª!€!€ Y Y Y¬!›î"q Ä!›î!›î‘!ë#˜ >!!hh ª"W!€!€"Â"Â"Â!Ý Š"7#ä õ õ!Ë#x"7#ä"7"7"¢"¢$O$O!E!E!E!E!±!±!±!±"R"R#(#(#ÿ"R$Õ$Õ$Ÿ"ò$Ÿ"ò"ò"ò#É"$Ÿ$Ÿ"ò$Ÿ#^#^!±!± ¿$%Æ"l"#®'/i*˜%‘%‘#ä"¢"¢$O%ü&Ò%%$O$O%‘#ä# !`$O$O#x!Ë%‘#ä$º&g&$j&&&'Ä&í&í&L'ù(Ð(Ð%v(Ð)¦'ù&&'Ä)q)))Ü)Ü)q+(š(š)q)q(š&í)÷)÷(J)÷*b*b+9)Œ) ) *Í) 's's)÷)÷(@&“'i))‚'Õ)‚)‚(á(á( +( +( +)·+d( +'Õ'Õ%Q&þ(@&“))(u&È)L'Ÿ%ò%ò(u(u(h**ì*ì(h(h*ì'’(ž&ñ)t'Ç)t'Ç(ž&ñ%Ê%Ê'w'w'â'â&5)(!W"."."."."Î"Îtt "cà!?"™!Â! ". ¶ ¶ ¶"c!!!! K K3!!!t!! K Kª!W".". ".!W##Û ªª "H ›ÅÅ!rÅAAÅ##!r!r › ›? ì!Â!Â??"™ ì!W!W"."."™"™$F' &ÿ#¥${"Î$|$|$|"Ï#:#:%¾$$ç#:&”&”%¾%¾"d"d#Û%ˆ$²$²%ˆ%ˆ$²&_'Ö'Ö'Ö'Ö&)&)#¦%S$¿####é#é#é#é!0$Š"""q"q!›#H#c!¶ ß ßÇÇ!J!J"!Çàà + +Ÿ L!"uÈÈŸŸ + +] +­­­*×­%%ûûº g㸸!e¸ â âîî Ä Ä¬¬¬ Yƒƒ!0ƒAA Ä ÄƒÖ"" # #"§ ú ú"§MM Ä Ä"q"q!0!0 Y¬¬¬"¬ƒ!0!0!0 Ä Ä Ä Y" Y Y!Z„ 1ïï œ œ Ò%ûûºº!ùŸÈ]]3à +]] ·ààààÇ t \\ h!"ÂhÓrÌ& t t tÇ &&!€Óý ª!€!€ Y Y Y¬îAj Ä ÄîAAî > > > >hhhh ª"W!€!€h"Â!"Â"7 Š#ä"7 õ õ!Ë#x#ä"7"7"7"¢"¢"¢"¢"ò"ò"ò"ò#^ !±!±%¬"R#(#(%¬#ÿ#(#("ò$Ÿ"ò$Ÿ"ò"ò#É"$Ÿ$Ÿ$Ÿ"ò#^#^% % ¿$%Æ%Æ'%[(µ-¼,E#ä"7#ä"¢"¢"¢ õ#x%%"¢"¢#ä"7# $º$O$O#x%%%‘#ä$º&g&$j&&'Ä&&í&í'ù)¦'##É'#'#)¦'ù'Ä'Ä'Ä)q'Y'Y)Ü)Ü'Ä)q(š+ô'Ä'Ä(š&í(J(J&(J(µ(µ)Œ'ß) %Æ's) ) ) )÷)÷)í(@'i))‚'Õ)‚)‚(á(á( +( +( +)·+d( +'Õ'Õ&þ(«(@)í))&È(u*ù)L'Ÿ'Ÿ(u(u(h*)?,™**)?)?(ž*K)t'Ç)t'Ç(ž&ñ'w'w'w'w'â'â&5&5(".".".!W#${"Î!!!!!!#:#: ì"™$F"™!W!W !! "c!!Ç!!tà† ¶"c K K!!${".".".".!W!WÔ".". #!WÔ ". ›"H!rÅÅîîÅ!rÅÅ ›î ! !Â!Â#o#o!Â".".#!W!Â#o%ó%ó%R&ÿ%R%R%S%S$|"Ï!#:$ç$ç$ç$ç$ç$ç$%¾"d$'5#Û%ˆ%ˆ%ˆ#Û#Û%ˆ%S(­(­(­&)'Ö&)&)&l#$¿$¿&l$¿&l#!0!0"Ý"Ý#H#H Ä"q#c#c#c% tÇÇ t t"! t t"÷!Jàà!àÈu!"uÈÈòò]°†àZZׄ­Z„„%%% Òº g#!e¸ ¸ 5âjjjî!› Ä Ä Y Y!0!0¬¬ƒƒ Ä ÄîîÖƒƒƒ ú ú!Ð #M úMM!›!›!›!›" Y Y Y Y Y" Yƒƒ Y¬!›îAî Y Yƒƒ!Þ„ZZÆ!s Ò%!¨ûºº LŸÈà3 + + + + + +33àà t tðð2Ø2 ßhh >‘ ª ªÓ&!J"÷!J!J2222&&Ó& ª ª ª ª¬¬" Y Ä!›îîîîîî!›îî"Â"Âh!!h!»!€!€ ª"W!ë!ë!ë!ë!`# !`!`#x !Ë!Ë# # # !`!Ë#x"¢"¢"#É"ò$Ÿ$4"‡"‡ Ú!{Î"R#ÿ#ÿ"R#(#(%v%v"ò"ò#É#É""$Ÿ"ò#É%v#^#^% % #C!–#C$ð%[%[(µ/i-$º#ä#ä%%#x#x%%#x%%"¢$O&g&g#ä#ä$O$O$O$O$º$º$º$º'Ä&$j&$j&&í&í(Ð(Ð'ù$Ÿ&L'ù'ù)¦)q'Ä*G(š)'Y)Ü(/(š(š(š(š(š&í(š(š) ) ) ) 'ß)Œ(µ(µ) 's(J(J's*Í*Í) )'i)'i'Õ'Õ(«(«'4(á(á*Ž'4'4(á(á'Õ'Õ&þ(«&“(@&“&“%(u*"(u*"(u'Ÿ)L*(h)?*ì+Â+Â(h*(ž(ž'Ç)t*K(ž(ž*K)$'w'w'w' ' ' ' 'A".#Û#Û$±#"Î!!"Î"Î#:#:#:#:"™$F$F"™##".".!! ¶ ¶tt!!t33 ¶ !ø!ø!!!!".".".".!W!W #Û". !Wª ". ". ›"H#!rÅîîÅÅÅÅkî › hh  !Â! ".".#!W#o%$F$F%R&ÿ&ÿ&ÿ%S%S$|&)#:$ç(A$ç$ç$ç#:#:$%¾%¾$".%ˆ%ˆ%ˆ#Û".%ˆ'5''''&)'Ö&)&)&l&l$¿$¿$¿&l$¿!e"Ý"Ý$Š$Š#H#H$%Ë#c#c!¶#c"! t t"! t"! t t!Jàà!à!"u!"uuuòò] +33!­×„­Z„„%% Ò" gºãã¸!e ¸¸ â  Äî!› Ä Ä Y Y!0!0 Y Y!0!0 Ä Ä!›!›Öƒƒƒ ú ú #vM ú ú ú!›!›îî¬ Y Y Y Y Y Y"ƒƒ Y¬î!›î!›ÿ Y!0!0 1 1ZZÆÆÆ!s Ò%Nû!=!= g g!ù LÈuà3 + + + + + +33ààÇÇðð22 ß2hhä‘ ª ª!€Ó!J ß ß ß ß!€!€&Ó ª ª ª ª Y Y¬ Y Ä!›îîîîîî!›!›!›"Â"Âh!"Â!!!!€!€ ª"W#˜#˜#˜#˜!`# !`!`!Ë!Ë!Ë!Ë# # # !`#x!Ë õ õ"#É!E"ò$4"‡ Ú"‡$Õ#(#ÿ%¬#ÿ%¬&‚#(%v""ò"ò#É#É#É o$Ÿ"ò%v#É#^#^% % $ð#C$ð#C#®''1.È&g#ä#ä!Ë#x%%#x#x%%%ü$O$º$º"7"7"¢"¢"¢%ü($º$º$º&$j$j&$j&&í&í'#'#)¦&L&L'ù'ù)¦'Ä)q&í(š*³))Ü(/(š(š(š(š(š&í(š(š%Æ) ) ) 'ß)Œ(µ(µ*Í) (J(J) ) ) 's)'i)'i'Õ+/&þ&þ'4%‡(á*Ž(á(á(á(á)‚)‚(«&þ&“(@&“&“(u(u(u*"*"(u%ò'Ÿ(h&»)?*ì***(h(ž(ž'Ç)t*K(ž(ž&ñ'w)$'w'w' ' (¸(¸'A#o#o%&É!Â%R%R"Î"Î$$"c"c".#Û&^##Û#Û#Û#Û"c ¶ ¶ ¶ K KtÇttž K"c"c!à#o!Â!Â!Â!Â#o"™$F#!W!W!W"™"™#o#o"´"´!Ý!Ý › › ›îƒƒ 0#ŠÅ ›"HªªÔÔh!Â!  ì"™!Â#o#$±%ˆ'5)'j'j'j'''%S$ç&”&”&”"Ï$|$|$|$%¾&”$ç#$²#Û#Û$²$²%ˆ%ˆ&”(A'k'k(A)î'k%¾&&&×%*$¿(%–%–$$#H#H"q%Ë%Ë$$¤"÷"!"!!¶#c!¶!¶ ß222 ß ß ß"Œ!ù Lò L LŸ LŸàà · +†3]] 1×ׄ„„××x% Ò" Ò%N¡  ú #vâââ ¬"ƒƒƒ!0"Ý!0¬¬ƒ!0ƒƒƒƒ!0ƒ!0ƒ"qîîM ú úM ##}!Ð!Ѓƒ¬¬ Y Y Y¬ Y Yƒ!0îî Ä Ä Ä"qî!›ƒ!0!0!0!sÆÆ 1 1 1!ÞûNNN%%ûû!àààuŸŸÈÈŸ LŸ L!"!" ß……2 t tð!»»»ý ªýý…222!€!€Ó!€»h!! Y¬ƒ!0Aîîî!0!0!0"Ý!›#H!›!›#-!€Ó!€"W ª ªý > >!"Â#-!€!€Ó"¢ õ"¢ õ Š"7# # "¢"¢#x!Ë"7"7"7"7$Ÿ$Ÿ"ò!E"ò"ò""$Õ$Õ#ÿ#ÿ#($Õ#(#(% !±!±#^"‡$4&¸#^$Ÿ"ò$Ÿ"ò"‡%á#^#^#C#C$$%[%[(µ1,E%‘#ä%‘"7#ä&g$º%ü$O#x#x#ä#ä# # # # #ä%‘%ü%ü$O%ü$j$j"½&'Y%¬%¬%¬%á'Ž'Ž'Ž%á%á&¸(e&í&í(š&í)*³(/&‚)Ü(/))&'Ä&í(š&(J(J&%[(µ'ß'ß) *Í) ) (J&&(J+š)í'i'i&þ(«(«(«)L'Ÿ)L'Ÿ(á'4( +( +)í)í)%¼'i'i&“&“(á(á( +( +( ++d&]( +*(h(h*)?*ì)?'’'Ç)t(ž(ž(2(2) ) )$'w'w)$' ' &5'â'A&É#o%&É%%R%R&(&(%½%½%½"c".'5&^#%ˆ%ˆ#Û#Û"c$ ¶ ¶!øžtÇttñž ¶ ¶à!! !Â!Â#o!Â"™ ì#!W!W!W ì ì!Â!Â!$a!Ý!Ý"H"H ›î 0 0!Ý!ÝÅî ›!WýÔÔ  #o! ì"™!Â#o$±&^%ˆ'5'j%½'j'j''%S'$ç&”&”&”'Ö&)$|$|%¾$$ç&”$²##Û#Û$²$²#Û#Û&”(A)%¾(A)î'k%¾$T$T&×%*&l&l%–%–%Ë%Ë$õ$õ$$%Ë$$¤"÷"!"! !¶!¶!¶"Œ ß"Œ"Œ ß ß ß"Œ!ù#¦ L LŸò LŸàà · +3†]×ׄׄ„× 1 Ò%% Ò% ÒNûMMvÉââ "< Y YÖÖƒ!0ƒ!0 YÿÖƒƒƒƒƒƒÖÖƒ Ä ÄîîM  úM!Ð!Ð # #ƒ)ÿ Y¬¬ Y¬""ƒ!0îî Äj ÄîAƒ!0ƒƒ!sÆÆ 1 1 1„!¨ûNN%%ûûà333ÈÈŸ!ùuuŸ L LŸ!"!"22…2 t tð!!hhPýý£ð!J ß2 ß ßÓÓÓ!€!"Â!! Y¬ƒ!0î!›îîÖ!0ƒ!0î!›!›!›#-!€!€Ó ª"Wý ª > >!"Â#-!€Ó!€"¢ õH õ Š"7!`!` õ õ#x!Ë"7"7#ä#ä"ò"ò"ò$Ÿ"ò"ò#É#É$Õ$Õ"R%¬#($Õ#(#(#^#^#^% "‡$4#^#^$Ÿ"ò$Ÿ"ò"‡%á#^#^$ð$ð$$"%[(µ1-ò'>%‘#ä%‘#ä&g$º$O%ü%%%%%‘%‘$º$º# # "7#ä$O$O$O%ü'Ä'Ä&&%¬'Y'Y'Y'Ž%á'Ž'Ž'Ž$4(e&¸(š(š(š*G)*³&‚(/(/&‚'Y'Y'Ä)q(š&í&(J&(J'')Œ&2's) ) ) (J)÷(J)÷+š)í))(«*X(«(«)L'Ÿ)L'Ÿ(á'4)·)·)í)í))'i'i&“&“(á(á( +( +)·)·( +)·+Â*(h*)?*ì*ì)?)t+!+ø(ž)ß)ß'\'\%Ê'w)$'w(¸(¸&5'â(î%%%$F$F#¥#¥&ÿ(¬&”&”$ç$ç#Û'5&^$±( &^#Û#Û"c"c!!!!!! K K K KÇtàà ¶ ¶ ì?!Â!Â#o!Â!Â#o#Û !   !Ý!Ý"´"´#õ"HÅÅ 0 0!!!rî ›!Wª "."™"™!Â!Â"™$F"™$F&^&^%ˆ%ˆ%½%½%½%½'''''k%¾$ç&”&)&)$|$|&”&”$%¾#Û%ˆ%ˆ#Û%ˆ%ˆ#Û#Û$ç&”(A&”&”)î'k%¾&&&×#}%–'C$¿$¿$õ#H$õ$õ%Ë"q&¢#H#Î#Î$¤!J ß ß!¶!¶#c#c$9"Œ!¶!¶#c#c!"!"uuuÈuuà3 + + + +°S­­„ 1ZZNNNN Ò Ò Ò% M # #â â ƒƒ YRƒƒ Y Y¬¬!0!0ƒƒ Y¬ Y Y Y¬Aî"q Ä úM úMMM  ƒÖÖƒ!0ƒƒ!0ƒƒ Y YîAAA Ä ÄƒÖ Y YÆÆBï 1×­­% Òûû%xNN]]]]òòŸ LÈÈŸŸŸ L!"u\\2 ß tÇÇ t!! >‘ÓÓ!€!€!JÇ t2 ß ÓÓÓÓh!!!¬ YƒÖA!› Ä Ä¬ Yƒƒî#H!›!›"W ª"W"W#-!€ ª"W > > >!ë!€!€Ó!€!Ë  !Ë"7"7# !`#x!Ë"¢"¢!`!`$º$º"ò$Ÿ"#É#É#É#É#É!{#(#ÿ#ÿ$Õ#(%¬#ÿ$4%á$4$4$4$4#^#^%v"#É#É!±#^"‡"‡%Æ%Æ$"l"Ø$…(µ1+n&g$º$º&g# # # $O$O$O"¢#ä#ä%‘%‘&g$º# &g&Ò%%%ü%ü$j$j%@%@'Y%¬'Y'Y'Ž'Ž'Ž);'Ž'Ž(e&¸'Ä'Ä&)q'Y))'Y)'Y'Y)'Ä)q*G*G's) +¤)÷)Œ&2)Œ'ß's) )÷(J(J+¤*Í*Í*Ã*Ã))(«*X)‚)‚+Ï(u&È&È(á%‡( +( +))*Ã)'i)&“(@)·)·)·+d( +&]( +)·+Â+Â)?*ì*+Â+Â*(ž*K*K(ž*¶) ) '\'w*Ñ)$*Ñ*e(¸(¸' (%%(v%ó%ó%R(¬(¬&ÿ$ç$ç&”&”'5'5&^$±$±&^%ˆ"."c"c#:#:!!!!!ø!øžžtÇ33  ì"™   ! !Â#Û ".".!    0 0!!"H ›!r!r#Š#Š!!!r!r ›"Hª!W". ì ì!Â!Â"™ ì"™$F&^&^#Û#Û'j'j'j'j''%S%S'k%¾$ç&”&)&)&)&)$ç$ç$%¾#Û%ˆ%ˆ#Û#Û#Û%ˆ%ˆ$ç&”&”(A+›+›'k)&&%*%*%–'C($¿&¢$õ&¢&¢%Ë%Ë#H#H'(#Î"÷"÷%æ"Œ#c#c!¶!¶ ß"Œ!¶!¶#c !"!"u"Ï!""Ïuuà! · · + +] +­­­×„ZZNNNN Ò Òx%M vvâ ⃃¬ÿƒƒ Y Y¬¬!0!0Ö!0 Y¬ Y Y" YîA"q Ä úM"§ ú ú ú ú ú"Ý!0ƒÖ!0ƒƒ!0ƒƒ Y Y Ä Äî!›!›!›"qƒ!0¬¬ÆÆïB„„ZZx"!¨N Ò%NN + +]]ŸŸŸ LÈÈŸŸòŸu!"\\…2Ç t tÇ!! >‘ÓÓÓÓ!J t"!…2 ÓÓÓÓh!!! Y¬Öƒîî"q"q¬ Y!0!0!›!›!›!›$"W"W"W!€Ó ª"W!ë!ë!ë >ÓÓÓ!€!Ë#x!Ë  Š#ä# $º%%#x"¢"¢!`!`# # !E"ò o"#É#É"%v#($Õ"R%¬$Õ#(%¬#ÿ$4%á"‡"‡$4$4#^#^%v"#É#É!±#^$4$4$$$"l$…"Ø(µ4p.È&g# &g&g# # # %ü%ü$O%ü#ä#ä#ä#ä$º&g# &g%%&Ò%ü%ü$j'Ä&í&í%¬'Y%¬%¬%á););'Ž'Ž'Ž&¸(e&&&)q'Y)*³))*³%¬'Y'Ä&(š(š%Æ*Í)÷(J'ß'ß'ß)Œ*Í) )÷(J)÷)÷/Ô6ˆ8+.))&þ(«'Õ'Õ(u(u(u(u(á(á( +$°'i'i'i%¼*Ã))í(@( +( +)·( +&]( +( +)·**)?*ì*+Â*(h(ž*K*K(ž) '\'\) )$)$%Ê'w(¸*e*e(¸(%'''%m'O'O&y&y&y&y'O'O&ä(‘&$a'»)h'»$a&(${#¥#¥"c ¶ààà! ¶ tt Kž!W!W ". ì ì ì ì"c ¶#:!t!!!!t ¶"c"c"c!ø K"Î!!"™$F#o!Â#ª".#Û##"H#õ%7%7%7%7#À"$–$–%%%%&É%%ó' '¡'¡%ô'¡*$%$G'¡'5'5(â'5#Û".%ˆ%ˆ"%n%n%n&D$—$—$—$—$—%n'&¯(\(\(\)á&‡%±'^(4)á)á(4%æ'“&½&½%{%{%{'(&‡$Ú$$$"W$Ú#-!J"÷"!#Î"÷!J!J«««!X !à í í LŸŸ Là3 + ·„„Z­BBB œ„„!Þ!Þ!Z 1 1v #MM ¸ ¸ Ä ÄA!› Ä Ä Ä Ä2…\ \ ß2 !¶ tÇÇ" Y"#³ Y" Y¬ Ä Äîî¬ Y Y#³ýý ªý ª ª ª ª"WP!€!€"Â!hh LŸ!"È + +à!«««!X@@@@ iiiQþ'Ô]]†3ŸŸ!"uhh‘‘&Ó"W ª!! >ä&&ÓÓ ß ß \\ Ó!€ÓÓýýý ª!›î Ä Ä!›!›ÿ¬!0) Ä Ä Ä Ä!e!e¸!e!e!e¸!e!Ð!Ð!Ð!Ð "<"< !±!±#^!±!±#^#^#^%@!æ!æ%@"R"R"R#ÿ"R ¥"R ¥"R"R#(#(#($Õ$Õ$Õ#“#“$j$j#®#®"Ø"Ø"Ø$…$…$…$ð#C$%Æ&$ð$ð$ð#ä#ä#ä"7#x%%*,4:.''s#C$ð%Æ$"l ¿!æ%@#“%@%¬"R"R#ÿ#“%@$j"½#ÿ%¬#ÿ#ÿ&¸(e&¸% 'ù'ù'#(Ð%¬'Y'Y'Y'Y'Y)Ü(/&2&2'ß'ß'(µ+9)Œ&)÷(J(J(µ(µ(µ''Ä'Ä'Ä&'Y'Y'Y))¦)¦*}(Ð);,•:ÔDâD3Z)L'Ÿ)L*ù(u(u'4(á*Ž(á*"*"*"&È'„)1)1'„)1)1)1'„&ã(& 'º)g+*=+ê)?'’(h(h(Ó*€'ý)ª)ª+W'ý&P(Ó'&'&*€&k('A'A((((%^&®'''%m'O'O&y&y(&(&*©'O&ä(‘'»&&'»&&&('Õ&ÿ#¥$"càà!à ¶ tt K!ø##". $F$F"™"™"c ¶à3!!"Î"Î!!"c ¶"c"c#¥!ø"Î!!%ó$F! !W!W%ˆ#Û###õ%¢#Š#Š%7%7%m#À$–$–#T#T%%%&É%ó' %ô%ô%ô'¡&Ê%'¡'¡%ˆ(â'5%ˆ'5".%ˆ%ˆ%n%n%n%n&D$—"ê"ê$—$—%n#Á%&¯&¯&¯)á&‡) '^&‡(4(4)á)@'“&½&½'('('(%{$Ú&‡%±%±$"W$Ú#-!J"÷#Î%{"÷!Jðþ!X!X«i  퓟 LŸ Là3 +] 1×­Zïïï"I 1 1 1 1Z­ 1 1v # ú ú ¸¸!e!›!› Ä Ä ß2 !¶ \ ß2 \ t t t t" Y Y""#³" Y Ä Ä!›!›¬ Y Y Y ª ª ªý ª ª ª ª ªý!€!€!hhhòŸ!"È + +à3þ!X!X«““ í í iiiþ« Ô]]3àŸŸ!"u!! > >Ó&ýPhh >ä&&&!€ ß ß!¶ \ Ó!€!€!€ýý ª"W!›î Ä Äîî¬ YƒÖ Ä Ä Ä Ä!e!e¸!e!e!e!e#!Ð!Ð!Ð%*"<#é"<  !±  !±!±!±!æ!æ!æ%@"R"R ¥"R"R ¥#ÿ"R#ÿ#ÿ$Õ!{$Õ&‚#(#(#“#“$j$j#®#®$…$…$…&2$…$…$ð#C%Æ's&$ð#C#C#ä#ä"7#ä%%&Ò+Ù5ç1's$ð#C"l$%Æ's%@%@#“%@%¬%¬"R#ÿ%@&í&'Ä'Y%¬%¬%¬% &¸% #^&L&L%v'#'Y%¬)))))Ü(/&2&2'ß'ß'(µ'ß)Œ(J(J(J(J(µ(µ(µ')q)q'Ä&)))'Y'ù'ù'#(Ð'Ž*è4 Aˆ@Â3Z*ù)L)L'Ÿ*"*"*Ž(á*Ž(á(u(u(u(u'„)1*Þ)1)1)1*Þ)1&ã('º& )g+(*=*ì)?(h(h(Ó*€)ª'ý'ý)ª'ý&P(Ó'&%y(Ó()Å*›'A)Å)Å)Å)Å(¸&®'ð'ð'ð&C%¢%¢(&(&)Ó)Ó)Ó)Ó*>(‘)h)h&'»'»'»'Õ&(%R!ø%½"c!#:!à ¶"ÎÇž K!W!W #o!Â"™ ì"c"c!! K!ø!!tà!!!!ø!ø#¥!ø%%#o! ".".!r##õ%¢&$a%7#Š$–$–"é"é&®%&®&®(v&É%&É%ô%ô%ô%ô&Ê&Ê$G'¡%ˆ(â&_&_( ( '5'5%n#Á%n%n$—$—#Á#Á#Á%n'%n&¯%'†'†(4&‡)á(4) '^'^*¸+Ä(j(j&½'þ)«'(%{%±'^$Ú$Ú$Ú$Ú$$$¤"÷"÷"÷%{#Î"! tþ«þ«@@i¼!"!"Ÿ Là3à3Z*×ï œïï 1 1 1„ZZ!Þ 1M ú # # â Ä ÄîîAA!›î ß ß !¶!¶ !¶ 2"Œ!J"!"!"Ý!0 Y""#³ƒ!0 Ä Ä Ä!0!0¬¬ý ªÓÓÓ&ýý ª ªÓ!€!ë!ë"Â"ÂuuŸ Lààà3þþ««ii í í !à i«« Ô ·] + · Lòuu > >‘‘ýPý ª >‘!»!€Óýý ß ß"Œ ß ß ß Ó!€ ª ª"W ª ª"W ÄA!› Ä Äî!› Y" Y" Ä"q Ä "<¸¸â"(‘)h)h)h'»++)‚'Õ%R%R"c%½$ç#:#:!"c ¶!!t Kžªª#Û !Â#o"™ ì"c"c!! Kžt!!!à!!#¥#¥#¥!ø%%#o! !r##õ%¢$a&%7#Š$–'ð&C&C([&®%%&É(v(v&É'¡$G%ô%ô&Ê&Ê'¡'¡'5'5$²$²( ( %ˆ%ˆ%n#Á%n%n&D&D#Á#Á%n#Á#Á%n(\&¯'†'†&‡(4(4&‡*¸,e) ) &½&½(j&½'þ)«(Õ'('^%±&‡&‡$Ú$Ú$$$¤"÷$¤$¤#Î"! t"!#!X!X« í íi uuòŸ3àà3­­„ 1 œï œ œ 1 1!Þ 1ZZ 1„ M # #â5ââ Ä ÄîîîîîA ß ß !¶ \!¶ 2"Œ!J"!"!ƒ!0 Y¬ Y"ƒ!0 Ä Ä Ä"q"Ý"Ý"""W ª!€!€Ó&ýý ª ª!€Ó!ë!ë!!uu L!ùààà3þþþþii@@i  i««Ô' + + + ·!ùŸuu > > > >P£ý ª!ë >"ÂhÓ& ª ª ß ß"Œ ß"Œ"Œ#c Ó!€ ª ª"W ª ª"W"q Äîî Äjî!›¬ Y¬ Y Ä"q Ä "(ü(ü(&(&(ü(ü)Ó)Ó(¬(¬&(&($'j%½"c%R!ø!!!! K KtÇ ì ì"™"™!Â#o#o#o%R#¥"Î"Î#:ààà"c"c ¶"c#¥#¥!ø!ø%%$F"™ Ô !"´"´$a%7&ä$a$a&C$–&C'ð&C&C(Ç''5'5'5#Û#p%&Ê%%ô'¡'¡'¡'5'5$²$²&_&_( &_&D&D'(È'%n%n'%Ù"$,%Ù&D&D&D'ñ(4+Ž'^%±'É)v)v'É&½(j(j%(j*(j&½'^'^%±$$$$%±%{%{$¤"÷"!"! tÇ".".!X!X«!X««ŸòŸòŸŸ„„!! œ œ œïïBïBïï œ œ # #v #!Ð #vv Y Y Y Yƒ"Ý!0ƒ t"!Ç t"! t!¶ !¶!¶#c"Œ"Œ Ä Ä Ä Ä Ä Ä"q Ä Y" Y Y Ä!»!" > >!h ª ª!€!€"Â! >‘3à + ·] · · +þQÔ @@““@ í““   í“] + + +ŸŸŸŸ ª ª&&‘ > > >"W ª"Wý‘‘hh2 ß"Œ ß!¶ !¶!¶!€!€"W"W$ ª"W"W"q Ä#H#H Y¬ƒ!0""ƒƒ Ä Ä Ä Ä¸¸ "§ ú!Ð#}!Ðv!Ð#} "< ""#É#É o o"ò"ò"½$j#“!æ!{#($Õ#(!{!{!{#("½"½#“#“$Õ&‚#ÿ"R"½"½"½"½!–&#C#C#C#C&$ð#®#®$…&2%Æ%Æ$"l%‘'>%‘%‘%ü%ü.]:4p(µ%[#®#C$ð$$&&$j$j&&&$j$j$j$j$j$Õ$Õ&‚$Õ% &¸'Ž%á'#'#'ù&L&&(š&í'Y'Y(/(/(J(J's's'ß&2'(µ(µ(µ)Œ)Œ's's)÷(J))*³))%¬&‚(/(Ð(Ð'ù'ù&L'ù'ù)¦(á(á(á(á(á(á( +)·*"(u*"+Ï( +( +(á*Ž+I)œ*s')1,‹*Þ'„*¨*¨)Ò)Ò)Ò(%*¨*¨%å'’)?)?)ª'ý)ª)ª)?'’'’'’***ì)?(ƒ&Ö(ƒ(ƒ)Y)Y'¬)Y' )2)'ð'(Ç&y(&(&(&(‘&ä(‘*>(ü(ü)Ó)Ó(ü(ü)Ó)Ó(¬(¬'Õ'Õ'j'j%½%½&ÿ#¥${${#¥#¥t!!?? ì ì!Â#o#o#o%R#¥${${#:#:#:#:"c ¶"c%R%R!ø!ø#o#o"™$F%ˆ". "."´$a!"´#Š%7$a$a&C$–&C'ð'ð'ð'%m%ˆ%ˆ%ˆ".#p%&Ê%$G%ô'¡'¡'5'5( $²$²$²&_$²'ñ'ñ(È'%n'%n''†$,$,%Ù'ñ'ñ)ž'ñ&‡)á) '^+#)v)v+#*(j&½&½(j*&½(j) %±%±'^'^'^%±'^%{%{$¤"÷"!%{#ÎÇ !X!X!X««« LŸuŸòŸŸ××­!"Iïï œ œïïBBB œ œ # # #!Ð #vvv Y Y Y YÖ!0"Ý!0 t"!!J!J t"! t"! !¶!¶ !¶"Œ"Œ Ä Ä Ä Ä Ä Ä Ä Y""¬ Ä"qhh!h > >h» ª ª!€&h!!ë >à3 ·"d]] +]«þÔ @@@@@“““ii@@ + ·]]ŸŸŸŸýý&& >‘ > > ªý ª ª > >hh2 ß ß2\ !¶!¶!€!€ ª ª"W"W ª ª"q Ä!›!›" YÖƒ Y YÖ!0 Ä Ä"q!e!e"<"< úM #!Ð # ##}%*#é"< """"#É#É$Ÿ$Ÿ"½$j#“!æ#($Õ#(!{#(#($Õ#($j$j#“#“!{#(#ÿ"R$j$j"½"½#C$ð#C#C#C#C$ð#C#®'&2$…$$$"l'>(ë%‘%‘%ü%ü0 +;Å4p(µ#®%[$ð#C%Æ%Æ&&$j$j&&&$j"½"½&&$Õ$Õ&‚$Õ% &¸%á$4'#'#'ù)¦&&(š&í%¬%¬(/(/&&'s's'ß)Œ(µ*b(µ(µ)Œ)Œ) ) &(J'Y'Y'Y)))(/&‚(Ð(Ð)¦&L)¦'ù)¦'ù*Ž'4(á(á(á(á)·( +(u*"*"(u$°( +*Ž(á)œ+I(Æ(Æ)1,‹,‹)1(û(û)Ò)Ò)Ò(%(û(û)?'’)?)?'ý)ª)ª)ª*ì%å'’'’**)?*ì(ƒ&Ö(ƒ%)'¬'¬%ÿ'¬(¸([))'ð)(&(&&y(&'»'»)h)h)Ó)Ó)Ó(&)Ó(&(ü(ü&ÿ(¬)‚'Õ(A$ç$%½%R&ÿ%R%R%R&ÿ!!!! ì?h !Â!Â!Â#o%R#¥%R#¥$ç$ç#:#:!à ¶ ¶"Î"Î#¥#¥%ó$F$F%ó%ˆ#Û#Û".!Ý#Š!Ý!Ý#Š#Š#Š%7&C&C&C'ð'''%m%ˆ%ˆ%ˆ#Û#p&Ê'¡%ô%ô%ô'¡'¡(â(â( &_&_&_( &_(È''%n$—$—%n'(\&¯&¯%%n')ž+K(4(4(4(4*L(Ÿ*L+ù)@)@'“'“(j&½&½&½&‡&‡&‡(4$$$%±%{%{$¤"÷#Î%{#Î t". !X!X!X««þ!"uÈuÈÈÈ­­„ 1 œ œÆÆ!sÆ œ œBïÆ!s úM #!Ð!Ð!ÐM ú#³ Yƒ!0ƒ!0 Y Y tÇ!J"÷ tÇ"÷!¶ #c!¶ ß ßîA Ä"q Ä"q!0ƒ!0ƒ!›î‘!ë"Âhhh‘ >ÓÓýý‘‘ >!ë"d +à! + + + + Ô". í í“@@“@ í  @@] ·]]ŸòÈuÓÓý ª"Â! > >ÓÓÓÓhh!ë!ë !¶ \22 Ó!€#-!€!€#-ÓÓ Ä Ä"q#³#³ Y Y¬¬¬¬!›!› Ä##"<"'>$º# $O$O0 +=r7Ê*b$…&2$ð$ð&&%@%@$j$j#“%@$j$j"½$j&&#($Õ&‚&‚&¸&¸);%á(Ð'#(Ð(Ð&í&í'Ä'Ä'Y#ÿ'Y'Y) 's(J(J(µ(µ'ß)Œ(µ(µ*b(µ's's's's'Y'Y)))Ü(/(/(/,**}(Ð'#)¦'ù(Ð(Ð*Ž%‡( +( +'4*Ž)·)·*ù*ù*"(u&]( +)·( +)œ'ï'ï'ï([*+µ*(û'N&x)Ò*¨*¨)Ò(%(h(h)?)?'ý+W*€*€+Â(h*ì)?*(h(h+Â*0(ƒ'¬'¬(ƒ(ƒ(ƒ*0(¸&®$–'ð'ð&C&y&y+€)Ó)h&'»+)Ó)Ó+€)Ó)Ó(&(ü%¢&ÿ(¬)‚${(A(A%½'j&ÿ(¬&ÿ#¥%R&ÿ"Î"Î"™ ì!Â#o#o !Â#o%R#¥&ÿ%R$ç$ç#:à!à$$"Î"Î#¥#¥%ó$F$F"™#Û".%ˆ#Û!Ý#Š#Š#Š!Ý!Ý#Š!Ý$–$–&C'ð'''(Ç%ˆ%ˆ'5%ˆ#p&Ê'¡%ô%ô%ô'¡'¡'5'5)¹( ( ( &_$²%n''%n&D&D#Á%n* %%&¯%n'+K)ž(4(4(4(4*L(Ÿ(Ÿ&ò)@)@)@%æ&½%&½&½&‡&‡&‡$Ú$$"W$#Î t"÷$¤#Î"!#Î#Î#Û".«««!X«!X!"uuÈuuuÈZZ 1„ œ œ!sÆBB œïÆM ú #vvv úM""!0ƒƒ!0 YÿÇ t!J"÷"! t"÷!¶#c !¶ 2"Œ!›î Ä"q Ä Ä Ä"q"Ý!0!0ƒ!›î‘‘!!hh!ë >&&ýýä >!ë > + +à3 · · ·]ÔÔÔÔ@@ í@@“ í@ii@@ + + ·]òŸu!"ÓÓ ªý!h > >ÓÓÓÓhh!ë‘\ \ ß ß Ó!€!€#-Ó!€!€!€ Ä Ä"q"q#³ Y Y Y Y Y Y Yî#H$"q!e!e #!Ð!Ð!Ð"§M!Ð!Ð"<"<#é%–#É#É"ò!E"%v$Ÿ"ò#“!æ!æ!æ#(!{#(Î!{!{ ¥ ¥"½$j%@%@%¬#ÿ#ÿ#ÿ$j"½$j"½$ð#C!–#C$$$ð$ð$…$…$…'ß%Æ's&&%‘%‘&g$º%ü%ü.];Å7Ê*b&2$…$ð$ð$ð$ð&í#“"½"½%@&í$j$j$j&'Ä$j$Õ&‚$Õ$Õ#^&¸'Ž'Ž'#%v'#'#&í*G'Ä'Ä))'Y'Y%Æ$(J(J'')Œ'ß*b*b(µ') ) ) ) 'Y'Y*³*³)Ü(/+‰+‰/„-×*}(Ð&L'ù'#*}*Ž(á)·)·(á(á+d+d)L)L(u*"( +)·)·( +'ï&B'ï'ï([*([**¨(û)Ò)Ò(û(û)Ò(%**)?)?)ª)ª*€*€+Â+Â*ì)?(h*(h(h(ƒ&Ö)Y)Y(ƒ(ƒ*0(ƒ(¸&C%m(Ç''''*t*t(Ç%m%m'&®*([*+J)*t(Ç%ˆ'5(â'5(v&É(v(v'5'5'5%ˆ%ˆ%ˆ$±!W ì ì!Â#o##!W$±%&É%ó%ó$±&^#Û".#:!#:#:!!$ç&”%ˆ#Û#Û#Û$±##Û%ˆ"H"H!r$Ì#õ#õ"H"H&y&y$Ì&y(&&y'O'O&”&”%½$$²&_)¹( %&Ê&Ê(w&”&”))(A(A&”&”%£'P('&z%8&å#‹%8('$Í$Í&z%£%£('&z&½&½(j(j)@)@)@'“%æ'“(j&½'“'“(j%#Î#Î$¤$¤$9%æ%#c"Œ"Œ$9%æ%!¶ !¶ í"š   #p í í!"uuu L L L L„ 1!ZÆlïïZ! 1 1¸!e¸¸MMMM!0!0""ƒ!0 Y Y > >!!!hhh ß"Œ"Œ ß"!"!!J!0!0!0!0"Ý!0 Y#³"" Y¬îA Ä Ä"Wý ª ªý ª!€Ó!¶!¶ 22 ß23àààŸòu!"ŸŸuÈ + + · +«þÔÔi   !Ã!à í“@ í!Ã!Ã!€Ó&Ó ªý ª ª!€Ó&Óh!!hý ª ª ª"W ª!€!€"! t!J!J"!"!M ú"§$T"§ ú ú"§"<"'>)Á(*˜*˜'>'>)Á((ë(ë&¸&¸(e**}'#(Ð/„9’68-×(Ð'Ž);&¸(e)))í+š*Ã))í+š(á(á( +( +)L)L)L)L(Æ*s)œ'ï)œ)œ*s*s*¨*¨*¨'N'N'N(û'N(Ó'&'&(Ó(Ó(Ó'ý'ý)t)t'Ç)t)t)t*K*K(î'A&k)Å)Y)Y(ƒ%)(&C'''*t(Ç(Ç(Ç(Ç''%m'([([([*)'ð(Ç''5%ˆ(â'5&É%(v(v(â(â'5%ˆ%ˆ%ˆ$±!W ì$F#o!Â$±$±&^&^#o%' ' &^( '5%ˆ$ç&”$ç$ç$ç$ç(A&”%ˆ#Û".".&^$±#Û%ˆ"H"HÅ#"H"H"H%¢$Ì(&$Ì&y&y(&'O'O&”&”%½$$²&_&_( (w&Ê&Ê(w&”)î))(A(A(A(A'P%£&z$Í#‹%8#‹%8&z&z&z(''P'P$Í&z(j(j**)@)@)@'“)@'“(j&½'“'“&½&½%{%{$¤$¤"Œ$9&½!¶$9$9$9"Œ#c#c!¶#c$G"š!Ã!Ã!Ã!à í íu!"!"!"ŸŸ L L!Þ 1!Z!sÆÆïïÆÆZ!!Þ!Þ!e¸¸¸ ú ú ú úƒƒ Y Yƒ!0 Yÿ > >h"Â!h!!"Œ ß2 ß t t!J"÷!0ÖÖ!0!0"Ý""""" Yî!› Ä ÄýýP ªý ª!€Ó ß ß2 ßà3ààŸòÈuŸŸuÈ + + + ·«!X".". i     í í“@  Ó!€&yý ª ª ª!€ÓÓ&h!!h ªý ª ªý ª&&"! t!J!JÇÇ ú"§ ú"§ ú"§ ú"§"<"<¸¸ #v!Ð!Ð ú úÉvM ú ú"§î!›$ Ä Y#³#³#³"ò!E!E˜!±#^"‡ Ú"#É"#É$4$4"‡"‡!±#^"‡"‡% &¸% !±#ÿ#ÿ$Õ$Õ#ÿ"R#(#($"l"l"l$…&2%[%[%Æ"l$%Æ%[%['ß&2"Ø$…#®%[&(J-Q*˜(&g'>*˜*&¸(e**}*}(Ð,*2Þ2Þ,**});'Ž(e*)))í(@)*Ã(@)í(á(á+d( +)L)L)L)L(Æ*s'ï)œ'ï+I*s*s(û,U*¨'N%¡(û(û'N(Ó'&'&(Ó(Ó(Ó'ý'ý)t)t+!)t)t)t*K*K(î'A((%ÿ%ÿ&Ö&Ö&k$–&C'ð''*t''ð)'(Ç''&®([&®(['ð&C'ð'ð&^( (â(â(v&É)M%ó( )¸( &^( ( %ˆ#Û#o%#o%&^&^&^&^&É&É&É&É$±&^'5%ˆ&”&”$%½&”&”&”&”'5".#$±$±$±$±$±#õ#õ!r##!r!r#%¢'O&y&y'O'O)Ó)Ó'j'j&”&”%ˆ'5&_&_'¡'¡'¡'¡'k'k'k'k'k'k))&z&z%£#ö&&&&&z&z$Í(''P'P'P'P)@'“*(j&½**í'“&½(j(j&½&½&½'“%æ&Q&Q$¤$¤#c%%#c%%#c#c$9"Œ!¶!¶"š í í íi   u!"!"uŸ Lu!"!!!Z œïïï!sÆ"I œ„„!Þ!Þ!e¸!e¸MM  ú" Yƒƒƒƒ!0Ö > >»!!ë!ë!!"Œ ß\!¶"!"!!J!Jƒƒ!0!0 Y"ƒ!0""!0!0 Ä Ä Ä&Ó ª"W!€!€ ª ª …2 ß2\!¶"d · · +ŸŸŸŸÈÈÈÈàà + + ". ".@@iiii@@i "š@&Óý£&!€ýý&Ó ª ª#˜ >h»ÓÓ$ ªý ªÓÓ tÇÇ t!J"÷ # #M ú ú ú # # "<¸¸ # # #!Ð ú úM ú ú ú!Ð#} Ä#H!›"#³$Š!0#É#ɘ!E!±#^!±#^"%v"ò"ò#^#^ Ú Ú Ú"‡#^% #^% $4"‡#ÿ#ÿ%¬%¬$Õ#($Õ#($ð#C#C$ð$…$…#®%[$$#C$ð"Ø"Ø'ß&2%['&2'ß)÷)÷3.>é6¾.]*,%%'>(ë%‘%‘$Ÿ&L%v%v%v%v&L&L%v%v&L&L"ò&L&L&L%¬%¬%¬)'Y%¬&‚(/&‚(/&‚)Ü)q'Ä&í&í'©%ü'©)V)Á)Á(ë'>'>*˜)Á+n'>'>'>(ë);%á(e(e(Ð(Ð(Ð(Ð,**})¦)¦,•*è););*Ã)+š)í(@)í'i'i&]&])·)·)L)L*"*"(Æ*s*s(Æ)œ)œ(Æ'&x)Ò+(%&x(%)Ò&x'&'&'ý'ý(Ó'&&P'ý+ø(ž*K(ž*K(ž(ž*K(('A(î'¬%ÿ%ÿ%ÿ'A&C$–&C'''''ð&C(Ç'''*([&®([)+J)&C$±&^'5'5(v&É' ' )¸+e( )¸+e( %ˆ#Û#o%%&É( $±( ( (v%(v%$±&^'5(â(A$ç$%½&”&”&”&”(â#Û#$±#&^&^#"H"HÅ!r#!r!r#%¢'O(&(&(ü(ü)Ó)Ó))&”&”%ˆ'5( ( )N)N'¡'¡'k*Å%¾%¾))))&z&z#ö%£)h)h)h&&z&z$Í(''P'P'P'P%æ'“*(j*&½)@)@&½(j(j&½&½&½%æ$9&Q&Q$¤$¤%#c#c%%%%%$9"Œ!¶!¶"š í"š"š !Ã!Ã!Ã!"u!"uŸ Lu!"ZZZ! œï œ œ!sÆï œ 1 1!Þ!Þ#!e!e¸ ú ú ú ú" Y!0!0Ö!0"݃!ë‘hh > >!! ß2\!¶ t t!J!J!0!0$Š!0¬ Yƒ!0"""Ý"Ý Ä Ä ÄÓ&ý ª!€!€ ª ª#c …2 ß2\!¶"d ·"d · L L L Luuuuàà] · Ô ".@@ii   í í !Ã@@Ó!€ ª ª!€!€ ª ª!€Óýý > >h!ÓÓýýPýÓÓ t"! tÇ!J!Ð!Ð ú"§"§M!Ð!Ð "<¸¸ # #!Ð # ú ú úM ú ú #!Ð Äî!›#³""Ý"Ý""˜!E#^% !±#^#É#É!E!E!±!±$4$4"‡$4#^% #^!±$4%á#ÿ#ÿ#ÿ#ÿ#($Õ$Õ#($ð#C#C$ð&2&2%['%Æ%Æ$ð&$…$…&2'ß(µ*b+9,æ.þ.þ9âBC=r5/3-†-ò,E(ë%‘&L'ù'#'#%v%v&L)¦%v%v&L&L$Ÿ$Ÿ&L&L%¬%¬%¬%¬%¬'Y&‚$Õ$Õ&‚&‚&‚)q'Ä(š(š'©%ü'©%ü&g&g'>(ë(ë(ë&g((ë(ë(ë*˜'Ž'Ž**(Ð(Ð*}'#(Ð*}'ù'ù*è);););'i))í(@)í+š))( +( +&])·)L)L(u(u(Æ*s'(Æ)œ)œ*s(Æ(%(%)Ò)Ò(%&x(%(%(Ó(Ó'ý'ý*€(Ó'ý)ª*K&ñ*K(ž(ž*K(ž&ñ(('A(î+)Y+'¬(î$+#À''(Ç'''ð&C(Ç'#À''…)2([(['ð'ð'ð&C#o&É(v&É&É&É(v&É'5****ú)M$F%ó&^&^&^&^(v(v' ' (v&É)M' &^( (â'5(A(A$ç&”%R(¬&('Õ'5%ˆ&^$±$F%ó"™"™!r##!r!Ý#Š!!"´&'»'»(‘(‘*>*>))(A(A%%%ô'¡(w(w)N'¡*Z*Z'Ö'Ö)ƒ)ƒ'Ö'Ö)h'»(’&å&&&å%8&)h&å&å&z('(ý(ý'þ)«'þ'þ**)@'“)@'“*(j'þ&Q&Q'þ'“%æ%%%#c&½#c#Î%{%{#Î#Î%{"÷"÷###Û ".#!X L Lu!"à3àà œ œ!s!sÆ!s œ"I"I œÆ!s œ œÆÆ!e!e!e!e #!Ð!Ð!Ðîîî!›"#³"݃!!!! > > >!ë ß2 ß"Œ ß ß"q Ä!›!› Ä"q Ä"q!›!›îA"q$"Wýý ª >‘ > > \\ t tÇ t!"!"uuà!à! L Lu!"ÈŸ!ù '«!X Ôþ« í@ í í!X!X &Óý ªýýý ª!€Ó!€#-"W ªÓÓ ªý!€Ó&Óýý ß2 2 ß!¶ â "< â!e#!Ð!Ð # #ââ"< # #!Ð!Ð ú ú #!Ð"q Ä"q"q"""#³"#É#É" Ú"‡#^!±"‡"‡"‡ Ú o""ò"ò!±#^"‡"‡!±#^$4$4"R"R#ÿ#ÿ"½"½"½$j"Ø"Ø#®%[&2$…%[%["Ø$…&2$…&&(J-Q0@1í4p66ô8¡=¨B¯@Ì8k53d4:0à,°'©)¦'ù$Ÿ&L'Ž%á'Ž'Ž&L$Ÿ$Ÿ$Ÿ%á%á&¸% &í%@$j&'Ä&'Ä'Ä'Y'Y(/&‚'Y)&‚(/(('>'>((&g('©'©&Ò()V'©(((e**+¿(Ð(Ð'ù'ù*è);'Ž'Ž***(e&('Õ)‚)‚'Õ)‚)‚'Õ)·)·(á'4*"*")L%ò(Æ*s(Æ(Æ)1*Þ*Þ'„(û*¨(û(û'º'º(%6&»(h*(h(h(h)?*ì+ø(ž*K*K)ß)ß*¶'\*›(î%”'A'¬%ÿ*0(ƒ($+#À''%m'*t)'ð(Ç''''…%Ø([(['ð'ð)'ð&É&É(v&É*#*#(v&É(â(â,<,<*ú)M' %ó)¸&^&^&^&É*#%ó)M(v&É' )M&^( *(â(A(A&”$ç&ÿ&ÿ'Õ&('5%ˆ$±&^$F"™"™"™!r##!r!Ý#Š$a$a$a$a'»'»*>*>*>*>))(A(A&Ê&Ê%ô'¡(w(w)N*û,,+0+0+0'Ö'Ö'Ö)h'»(’&å'»'»%8&å'»'»&å&å(')Ô(ý(ý+X)«)«)«**'“%æ'“)@&½%'þ&Q&Q'þ$9%æ%%%#c#c#c#Î%{%{'(#Î%{$¤$¤$²!X".".".#Û#!X L L!""Ï!ààà œ œ!s!sÆ!s œï œïÆ!s œ œÆÆ¸#!e!ev #!Ð!Ðîîî!› Y""݃h"Â!! > > >!ë ß2"Œ ß ß ß Ä Ä"q Ä!›!›"q Ä Ä#Hî!›î"q$ ª ª ªý >‘ > > ÇÇÇ t"Ïu!"!"à!!àŸŸÈu!"uŸ!ù «!XÔ «!X í@@"š!X!X Ó!€ ªýýý ªý!€ÓÓ!€ý ªÓÓ ªý!€ÓÓ!€ýý2… #c ß2\ â5"< "<#!e # # # #ââ"< !Ð!Ð # #MM #!Ð"q Ä Ä$"""#³%v#É#É" Ú"‡#^!±"‡"‡"‡ Ú o"$Ÿ$Ÿ#^!± Ú Ú#^% $4$4"R"R#ÿ#ÿ"½"½&$j$…$…'%["Ø$…%[%[&2$…&2'ß(J(J.þ45G:N9w;$:N;û?UD\D&;Å8k6¾5ç5ç3d1·.­-)¦'ù'Ž%á'Ž'Ž&L'ù$Ÿ$Ÿ%á%á&¸% &í%@&'Ä&$j'Ä'Ä)%¬(/&‚%¬'Y$Õ&‚(('>'>(((&g)V)V&Ò('©)V*,*,(e**+¿(Ð(Ð'ù'ù,•'Ž););&¸*(e*)‚'Õ)‚)‚'Õ)‚+/)‚)·)·*Ž(á*"*")L)L'(Æ, (Æ)1*Þ)1)1'N(û(û(û)g)g((*(h*(h**'’)?(ž(ž*K*K(2(2) ) 'A(î'A(î)Y'¬(ƒ&Ö(%Ø$–$–%m'$–$–''(Ç'&C&C([([*(['ð'ð(Ç(Ç' )M)M)M)M)M*#*#**+e-+Ð*#*#(v(â*'5'5(v(v(v(v' )M+Ð*#&^( (â(â)'j(A&”&(&(&(&('5'5( $±%#o"™ ì!r#"H"H!Ý!Ý$a$a$a$a&ä*>*>+ë+ë*>)î(A)î)î(w&Ê&Ê%&Ê(w*û*û+0+0*Z*Z+0+0*Z(­)h)h&&)h)h(’(’)h'»&&(ý(ý(ý(ý(Õ*‚*‚,/*+Ä'“'“&½*'“)@&Q'þ%{%{&½%%æ$9%æ$9$9%æ$¤$¤&Q$¤$¤$¤$¤"÷#Û#Û".".##". !ù#¦!ù!ù"d"d + + œï œ œ!sÆ!sÆ œïÆ!sÆ"I œ!e!e!e!eM ú"§ ú Ä Ä"q" Yƒƒ‘ >"Âh >!ë >!ë ß2 ß ß!¶#c#c#c#H!›!›î!›!›!›!› Ä Ä!›!› Ä"q Ä"qÓ!€ ª ª!! >!ë ß2!¶!¶"!Ç"÷!ù L L L!à3à!"u L L L LŸ!ù!X«Ô ÔÔ@@!à «« ÓÓýý!€Ó ªýP ªÓ!€Ó!€ÓÓ"Wý ª ª!€Ó ª ª ß2 ß"Œ2 ß2 ß!e¸¸!e !e!e #vM úââ"<â ú ú ú ú ú ú"§"§!›#H#H#H$Š"Ý Y"#É"#É"!±!±"‡"‡#^#^ Ú$4#É#É$Ÿ!E#^% #^!±"‡$4!±!±"R"R#ÿ"R#“#“$j$j"Ø$…&2"Ø"#®&2$…'ß'ß'ß)Œ-Q2X7_9 :N8¡9w66;$AØE2CO:î56¾56¾7”7”5a3´/„*});'Ž&¸&¸%v'#'#'#&¸&¸(e(e%@&í%@&í%@%@&í&í'Y)*³)(/)Ü(/&‚&g&g(((ë(ë&g$º((&Ò&Ò&Ò(++**(e*'ù&L(Ð'#(e**è);%á);););)‚)‚)‚'Õ(«*X+/)‚)·)·)·)·(u*"(u*"'ï'ï*s, *Þ)1([*(%+)Ò(%(((((h*)?'’(h(h'’%å(ž*K(ž*K*¶) +Œ+Œ(î(î((&Ö&Ö$R%ÿ%”%Ø&C"é%m'$–$–%m%m(Ç'&C&C&®&®([&®'ð'ð*t*t)M' ' ' ' ' *#-},<,<+e-*#(v+Ð-},<*(â(â*#*#(v(v*ú)M(v*#+e)¸(â(â*Ä)(A)î'Õ'Õ'Õ'Õ'5'5( $±%#o$F"™#!r"H"H%7%7&&&"´%7(‘*>+ë(‘*>(A)î)î)î(w&Ê(w&Ê(w*$*û*û+0'Ö*Z*Z+0+0-´,'»'»&&'»'»*?*?)h'»&&'P'P(ý(ý'((Õ'((Õ(j*'“'“&½**í)@'þ&Q%{%{&½(j'“%æ'“%æ'“%æ$¤$¤$¤&Q&Q"÷"÷$¤'5#Û".".##". !ù#¦!ù!ù · · · · œï œ œ!sÆ!sÆïBÆ!sÆ"I œ¸#!e!eM ú"§ ú Ä Ä" Y!0!0!ë >hh >!ë!ë#˜"Œ ß ß ß !¶!¶!¶!›#Hî!›!›!›!›!› Ä Ä!›!› Ä"q Ä"q#-!€ ª ª"Â"Â!ë > ß2 t tŸ L!ù!ù!à3àu!"!ùŸ L L L L«!X".#Û#Û í í!à «« !€& ª ªÓ!€ý ªP ªÓ&&Ó&&ýý ª ª!€Óýý…22 ß ß22 ß!e¸¸ !e v #M úââ"<"<"§M ú ú ú ú ú ú!›#H!›$õ$Š"Ý Y" o"#É"!±!±"‡"‡#^#^"‡"‡ o o"ò"ò% &¸#^!±$4"‡!±% #ÿ#ÿ#ÿ"R#“#“$j'Ä&2$…$…$…#®%['ß&2&2)Œ.“3š5²7_7_9 :N8¡7Ê7Ê6;$AØE2CO:î53d56¾5ç5ç78»6811*è);&¸&¸%v'#%v%v% % &¸&¸%@&í&í%@%@%@&í&í'Y)*³)(/&‚(/&‚(((('>'>()Á&Ò&Ò+Ù((*,++(e(e(e*)¦'ù(Ð*}(e*);'Ž'Ž'Ž););'Õ'Õ)‚'Õ(«*X+/)‚)·)·( +( +(u*"*"(u'ï'ï(Æ*s)1*Þ*([&x&x&x(%((*=*=(h&»)?*ì(h(h'’%å&ñ(ž*K(ž'\) )ß)ß*›*›)Å&k&Ö&Ö'¬%ÿ'A&¡%Ë$$ô&¡$¾$¾&k$¾'B%•$¾())(¹' 'x)%*Ò*Ò)'ã' ' 'x)%)%*Ò+¨+¨*Ò,+¨+¨+¨+¨)û)û)û)û,*Ò)%'x)Å-*œ*œ+)Z)Z)Z+)Z(„*1'­'­'­'­(„(„&&(„%*&$S"~"~"~"~#À%m&C&C%m%m''&®*&®+µ(‘*>)h)h(4)á*¸'^) *¸*¸) )@)@**+X+X,/(Õ'((Õ)«)«)«+X,/(Õ)v)v'É&(4(4)á)á**(â(â**(â(â&”(A)î(A''&)&)&”$ç&”$ç'''%S%S%S%S%S'k%¾$ç$ç%`#³"#³"Ý"Ý"""q"q ÄA!› Ä"q tÇ!J!¶\\ !¶ ß ß ß2 ª"W ª ª > >hh t t!J!¶!¶22!! > >Ó!€#-$Ú!J"!"!"Œ"Œ ß ß"Â"Â!ë!ë"W ª ªý!€!€$ ª ª ª ªý"<#é"<"<"§"§ úMîîîî!0!0!0ƒýý ª ª ª ªÓ!€ ª"Wýý ªýý ª!e!e!e!e#}!Ð"§"§"Ý!0 Y¬ Ä Ä Ä¸¸!e!e ú ú # #M úM M ú úM222 ß tÇ tÇ ª ª ª ªÓ!€ÓÓ!à33 · ·!!!"!" L!ùŸŸ!"!" í í!à !X#!X!X".".«##Û". ". Ú Ú Ú"‡"ò"ò˜"ò#^% $4$4"‡$4$4"‡#x%%!Ë#x#ä#ä"7#ä#C#C$ð#C$…"Ø"Ø$…$ $ #5#5#5&'f'f)~,Ø2¶7½7½7½6æ6æ6Ë8x7¢9O:%;ÒB†EàD3=5õ4H4H5õ6Ë6Ë778ä775Š1Ä,½(&à%ž(ø&u$È$È$È%ž%ž%ï%ï'œ'œ(&Z%ƒ'0(¨(¨'Ñ)~&(<'f'f(/(/'Y'Y&í&í(š*G(Ð%v)¦'ù);'Ž'Ž);(ë*˜*˜*˜*˜*˜(((('©)V(('>*˜(@&“(@(@%¼*Ã)*Ã(«(«'Õ)‚+/)‚+/'Õ)L)L)L*ù+d)·(á(á&þ&þ'Õ'Õ(@&“)í)í(ƒ*0'¬)Y'¬'¬*0(ƒ*0*0+)Y)Å)Å(î'A' (¸)'â'w'w'w%Ê(ƒ$ô$%Ë&¡$ô$¾$¾&k$¾#è%•$¾$¾'ã+=*f(¹)%*Ò)%)%+=)(¹(¹)%'x*Ò,+¨+¨,.,-U-U+¨+¨+¨+¨+¨+¨*Ò)%)%*Ò+r+r*œ*œ+,´,´)Z+)Z*1(„)Z)Z)Z&(„(„$S'­(„(„'­&$+$+$+$+%m#À$–$–%m%m''&®*&®([&ä(‘'»+(4&‡) ) *¸) ) *¸*í*í**)«-,/(Õ*‚(Õ+X'þ'þ)«*‚*‚)v)v'É)v(4(4)á)á******(â(â)î(A(A)î'''Ö'Ö&”$ç$ç&”(­%S#¦%S%S%S#¦#¦%¾$$ç$ç#³""#³&7&7#³#³"q"q ÄA!› Ä t"!ð!¶\ !¶ !¶ ß ß ß2 ªý ª ª >#˜!!"!Ç!J!¶!¶ ß ß!!!ë!ë#-!€Ó!€"÷!J t t ß ß ß ß"Â"Â!ë%E$"Wý ª!€!€"W"W ª ª"WP"< ú ú úM!›!›î!0ƒ ª ª ª ª ªP!€Ó ª"W"Wý ª"W ªý¸¸¸¸ #!Ð ú ú"Ý!0" Y ĸ¸¸¸MMvv MM M ú úM22"Œ ß t"!"! t"W"WP ªÓ!€!€!€!à33 + +!!!"!"!ù LŸŸ!"!""š"š!à !X«!X!X".".!X!X".#Û "."‡"‡$4"‡"ò"ò!E$Ÿ#^!±$4$4%á$4$4%á%%#x !Ë"7"7 Š%‘$ð$ð$ð#C$…"Ø"Ø$…"_%¹$â$â$â$â%¹).…5964c66598“8x:%:ü<©:%;ÒB†EàD3=:ü9O9O7¢555Š775Š778x3q/A*:(ø(ø&u$È$È$È%ž%ž%ï%ï%ï%ï&Z('0%ƒ&û&û'Ñ)~(<&%¹))Ü&‚%¬%¬&í*G(š*G*}'#'ù)¦'Ž%á);'Ž'>(ë(ë(ë*˜*˜($º(('©)V)Á)Á(ë(ë(@&“)í)í)*Ã)'i(«(«'Õ)‚)‚+/)‚&('Ÿ'Ÿ)L*ù+d)·'4*Ž(«(«&(&()í(@(@(@(ƒ*0+)Y'¬'¬&Ö(ƒ(ƒ(ƒ'¬)Y)Å)Å(î'A(¸' 'â)'w'w%Ê'w(ƒ$ô&¡(N'x%Ë#è%•'B'B&k$¾$¾$¾' (¹(¹(¹)%*Ò,*Ò+=+=,*f*Ò*Ò-U+¨*Ò)%.,,)û+¨)û+¨+¨)û,,*Ò*Ò)%*Ò*œ*œ*œ*œ*1*1*1+Þ-‹+Þ+Þ+Þ*1+Þ(„(„+)Z(„&×&×%*$S$S$+$+$+$+#À#À"é"é#À#À%m'&®([)2)2)h)h'»)h(4(4) ) ) '^'^*¸+Ä+Ä+Ä+Ä,/,/+X)«+X)«,/(Õ'þ'þ*‚,/*L*L+#)v) ) )á)á*(â+f+f(â,<)¹+f*Å))'k(­(­(­*Z'k'k%¾%¾%S'&)&)&)&)#¦%S&”$ç$$#³""%`#³#³$Š"Ý"q ÄîîAAA!›!J!J !¶\ "Œ22 ß ª ª ª"W >!ë!h"÷!J"! t ß ß ß2!!!!#-#- ª ª"! t"÷!J!¶ "Œ"Œ!! > > ª ªÓ!€"W"Wý"W#-#-"W ª"<ââ !Ð#}!Ð # Ä Äî!›" Y" YÓÓý ª ª ªÓ&ÓÓ ªP&ÓÓÓ"< ¸¸!Ð!Ð!Ð #"" Y Y Ä!›!›âââ MM # # # #M ú #Év # ß2ÇÇÇ"!"W ªý"Wý ª ª ª!à†3 · ·!!!"!"!"!"uÈ!ù L!Ã!à í í". #!X".".#Û".".".!±#^%á"‡"ò!E"#É$4"‡#^!±#^!±"‡$4%%#x!Ë!Ë"7"7³$º$$#C$ð$…$…"Ø&2#5#5$ "_$ $ &-C598“6æ6æ59597½9j9O9O:%;Ò:ü<©A°E +E +@<©:ü:%8x6Ë6Ë4³6`5Š8ä7¢5õ0î-”)Ï&u#ñ'K$È$È$È$È%&Å'œ%ï&Z((&Z&$&$&û(¨&&'f)'Y'Y(/&‚&í&í&í(š)¦'ù'#*}%á%á(e(e(ë(ë)Á)Á)Á)Á(&g*,*,'©)V*˜*˜(ë'>'i'i)í(@(@)í(@&“'Õ'Õ&þ*X)‚)‚+/'Õ)L'Ÿ)L)L(á*Ž+d+d*X,&þ&þ(@)í)í+š+Ý*0(ƒ&Ö'¬)Y'¬'¬'¬)Y)Y'¬(((((¸' &5&5(M(M& )ú%)$ô&¡$ô$%Ë'B%•%•%•&k$¾$¾(' (¹(¹(¹)%*Ò)%*Ò,ê,ê-À,,,-U+¨*Ò,.,,+¨)û+¨-U+¨)û,,,,.,,*œ*œ,I,I+Þ+Þ+Þ-‹/8-‹*1*1*1+Þ(„(„'­)Z*1(„&×%*"¦&%Ø%Ø"~"~"%m$–!<#À#À#À%m#T([)2,Œ)h)h'»)h(4(4) ) *¸) ) ) (j(j*-q-Ü*‚+X--+X*‚*‚'þ+X*‚,/+ù+ù)v'É) ) +Ž+Ž*(â)¹)¹(â(â( )¹*Å%¾)'k*Z*Z(­*Z)%¾%¾%¾%S'&)&)$|$|#¦%S&”$ç%¾%¾#³"#³#³"""Ý!0 Ä"q!›!›î”AAð!J\!¶!¶#c!¶ ß ß2 ß#c "W"W ª"W!ë >!h"÷$¤"! t ß ß ß"Œ!!!!ÓÓ ª ª tÇ!J"÷!¶ ß ß"Â" > > ª ª#-!€ ª ª ª ª!€!€ ª"W"<â â #!Ð!Ð#}"q"q!›î" Y Y"#-Óý ª ª ª!€Ó&& ªP!€ÓÓ#-"< ¸¸ # # #!Ð"" Y Y Ä!›!›âââ MM # # # #M  # # #v ß2ÇÇ t tý ª ª ªý ª"W"W!àà3 + +!!!"!"!"!"!"u LŸ   í$G". ".".#!X#Û#Û%ˆ#Û #Û!±#^"‡"‡!E"ò"#É%á$4#^% #^!± Ú"‡#x!Ë#x#x#ä#ä# $º$$#C$ð!+$…&2&2#5#5$ "_$ 'f-C08“8“595959597½9j9O9O=?,@A°C]F·C]A°>V<©;Ò:%8x8x8 6`77775õ7¢5õ2›+|("'K'K$È$È&u&u%&Å%ï'œ(&Z&Z$­&$)~&û(¨&&'f)'Y'Y&‚(/(š(š(š&í)¦'ù'#'#););(e(e(ë(ë)Á)Á)Á)Á()Á+Ù()V'©(ë(ë(ë'>'i'i(@)í&“(@(@)í+/'Õ(«(«)‚)‚)‚)‚*ù)L)L)L(á*Ž( +( +(«*X(«(«(@)í)í(@*0(ƒ(ƒ*0)Y++'¬'¬)Y)Y'¬(((((¸' 'â'â& & (M(M&Ö$#² X%_%_%•'B&k&k%•%•#è'B' ' ' *f)))+=,*f+=)*Ò,+¨-U,ê,ê-À-À-À,+=,ê,,,ê,ê-À,,ê,ê+Þ+Þ-‹+Þ+,´-‹-‹/8+Þ*1(„(„*1+Þ+Þ)Z'­*1(„&&&&&®%#T%$+$+$+"~"~"~"~$+"#À(Ç(Ç&ä(‘&ä(‘'É+#)v)v)á)á'^'^&½(j-q-q-+X,/,/+Ä**+Ä*‚*‚)«+X+#,Ð*L*L)á)á)á)á)¹( )¹)¹(w*$)N*û)î(A)î)î*Å)%¾'k(A&”'k'k(A&”%¾%¾&”#:"d%¾&)&)$|$|#³ Y"Ý"Ý"Ý"Ý$Š!0!0$Š"Ý"Ý Y Y Y Y"!ÇÇ"! t"!!J$¤"Œ"Œ ß ß t t!J!J#˜#˜!! > > >!ë"Œ"Œ!¶!¶!J!J"÷!€!€#-#-ý ª"W"W ß ß"Œ"Œ"!"! t t"W"W"W"W ª"W!€#-"W ª ª"W!€!€ý ªM"§!Ð!и!e!e!eî!›îîîîîA ªýÓ&ÓÓ&Ó»» > >ýý"W"W # # # # â^¸!›î"q Ä Äv #MM¸ ⸸ ¸ # # úM\ 2222 ß2&!€ ªýÓ!€!€Ó!ù!ù!ù L] · · ·à! +"d!"!"!"u"š"š!Ã!ë«#Û#Û". #Û#Û"š"š#p#p#^#^"‡"‡" o!E$Ÿ#É""ò$Ÿ"ò!E""!Ë#x#x!Ë#x%%"¢$O#C#C#C#C#C#C&&$â#5$ $ &û(¨02596æ3Œ3Œ3Œ5¤7Q6{8(9º;g@nBC]E +C]E +FLBòB>Á?,:%:%:%9O5õ6Ë6Ë5õ7¢8x6Ë0ƒ("%ž'K%ž%ž&u$È$B%ï%%'0%ƒ$­$­&û&û&$'Ñ&(<'f)'Ä'Ä(š(š)Ü-6*³'Y'ù'ù)¦)¦*+¿););*,(*,(+Ù+Ù)V)V*,()V'©%%()V+)í)í'i)(«(«*X*X)‚'Õ(«(«(«*X+/)‚( +)·)·)·)L)L(u*"*Ã'i(@(@)‚)‚)‚'Õ'¬)Y*0*0)Å+r)Å('¬)Y'¬)Y*0(ƒ)Y'¬(M& %Ê%Ê'â)' ' 'A Ä#²#²%_"#è%•&k&k(ï%•#è'B' ' ' *f))+=,ê,*f+=)*Ò,-U+¨,ê,ê-À*f,-À.—,ê,,)),-À,ê,ê-‹-‹-‹/8.a,´-‹-‹*1*1*1(„+Þ*1+Þ+Þ,´.a*1(„&)Z)Z)Z&®%%&®%Ø"~$+"~ Ñ$+ Ñ"~#À"%m%m%7&ä&ä(‘'É+#)v)v)á)á) ) (j*+Ä+Ä.²-*‚-Ü+Ä-q+Ä-q*‚*‚+X)«+#,Ð-¦*L)á)á)á)á+f)¹)¹)¹(w*$*û)N+›)î)î)î)*Å)*Å(A)î))(A&”%¾%¾&”&”%¾%¾$|'Ö$|$|%`""Ý"Ý"Ý"Ý!0!0"Ý"Ý"Ý"Ý"" Y Y"!"! t t t"!"÷"÷"Œ2 ß ß"!"!!J!J > >"Â"Â!ë!ë >!ë"Œ"Œ!¶!¶"÷!J"÷$¤#-#-#-Ó ªý"W"W ß$9 ß ß#Î#Î"!"!"W"W"W"W"W ªÓ!€"W ª ª"W!€!€"W ª"§M # #!e¸!e!e!›#Hîîîîî!› ªý&ÓÓÓÓ!€!! > > ª ª ª ª!Ð!Ðvvâ5¸¸!›#H Ä Ä Ä Ä!Ð # ú  ¸ ⸸ ¸ # #M ú \ ß ß"Œ22 ßÓ#-"W ªÓ!€!€Ó L LŸ L + + · ·!à · ·!"!"!"u í í #p###Û "."."."š"š#p#p% !±"‡"‡"#É$Ÿ$Ÿ" o˜!E!E"ò#É#É#x!Ë!Ë#x!Ë#x"¢$O$ð$ð#C#C$ð$ð#C&$â#5$ $ (¨-¯3Œ59591ß1ß597Q8þ8(9Õ=>ÁBCÈC]E +E +C]DŸDŸCÈCÈ@Ù?,;Ò;Ò:ü:ü6Ë6Ë5õ7¢8x6Ë20-)'K(ø'K'K("&u%ï$B%%%ƒ'0&Z&Z&û&û&$'Ñ&(<)$ &)q(š(š)Ü)Ü'Y'Y'ù'ù&L)¦&¸+¿*è*è+Ù*,(*,+Ù()V)V(*,)V'©&Ò&Ò)V+)í)í'i%¼(«(«(«,)‚'Õ(«(«&þ(«&('Õ( +)·)·)·'Ÿ'Ÿ(u&È'i$&“&“'Õ'Õ'Õ&(%ÿ+(ƒ(ƒ()Å)Å()Y+'¬)Y*0(ƒ)Y'¬(M)ú%Ê%Ê&5'â%^%^'A Ä%_#²#²#²%•#è%•'B(ï(ï(('ã'ã(¹(¹(¹*f*f,*f,+=+=)û+¨,.,.—.—.—,ê,*f+=,ê,*f*f*f,ê.—-À-À,´,´/8/8-‹*1+Þ-‹+Þ+Þ.a+*1+Þ*1+Þ,´,´,´,´++*1&×([([&®%$+$+%#T#T#T#T#T"é"é$–$–%7%7%7(‘(Ÿ(Ÿ'É)v)á)á(4(4%(j)@*í*‚,/+X+X+Ä+Ä*í.G-Ü,/+X)«,Ð,Ð+ù*L) ) +Ž+Ž**)¹+f*û'¡)N*û+›)î)î)î*Å)+›)î)î(A)'k&”&”(A&”&”(A'k)''#¦'%`""Ý"Ý#³"""!0!0#³""Ý!0ƒ!0"÷"÷ð"!"!!J"÷%!¶"Œ"Œ t"!"÷!J!h"Â$o!ë!ë!" ß"Œ#c!¶#Î#Î"!"!#-!€"W"W!€!€"W ª #c ß ß"!"!!J!J"W ª ª"W!€!€Ó#-"W ªÓÓ ª"W#-#-#}!Ð # #!e!e!e¸ Ä Ä Ä"q"q Ä"q ª ª ª ª ª ª ª ª > >‘‘ý ª!€Ó$T úvv â!e¸!›!› ÄîîîA M úMâ⸸â⸠MMM ú222"Œ \\!¶ý ª!€#-"W"W"W"W!""Ï"Ï!" · ·#:! · · + · L L L L#p!à í"š$²#".".«##Û#Û"š$G"š$G"‡$4!±!±"ò!E"#É o o"#É#É"""!Ë#x#x#x&Ò#x"¢"¢!–#C%Æ$#C$ð$ð$ð$â$â%¹'f++3Œ64c593Œ668(9Õ9Õ;‚=ëAECÈEuE +E +E +E +DŸDŸEuEuD3B†@>V<©<©9O5õ4H5õ5õ7¢6`,R'K%ž'K'K&u&u'œ%ï%&Å'0'0$­(&û&û&û%N%¹'f(<&&í(š'Ä&(/(/(/&‚&L)¦%v(Ð(e(e*è);+Ù*,)V+)V)V++*,*,)V)V)V'©*,((@(@'i'i'Õ'Õ*X(«(«(«(«(«&þ(«&þ(«(á(á)·)·(u&È(u&È&“&“&“(@'Õ'Õ&('Õ(ƒ(ƒ(ƒ(ƒ&k((î(î(ƒ(ƒ)Y%ÿ*0(ƒ)Y'¬& (M$ó(M(¸' (¸' ($%_#² X#²%•'B%•'B'B'B$¾())(¹(¹(¹*f*f,-À,+=+=+¨-U.,/Ù0D,ê+=,ê,*f+=)*f(¹,,,ê.—-À-À.a.a-‹-‹-‹-‹*1+Þ+Þ+Þ,´,´(„*1+Þ-‹.a.a.a.a+++Þ+Þ+µ+µ*(['…$+%#T%%%%$–$–$–$–&ä&ä%7(‘&ò&ò)v+#)á)á(4(4(j(j*í)@(Õ-Ü---q-q,š,š,/-Ü-+X.}+#(Ÿ*L) ) )á)á,<,<+f-.U*û)N*û)î+›+›+›,r*Å+›)î&”(A)'k&”&”$ç&”&”(A'k)'*Z''%`%`$Š!0"#³#³ Yƒƒ" Y!0"Ý!0"Ý!J!J!J"!"!"÷!J#c ß ß"!#Î"÷!J"Â!!"Â!ë!ë"Â!2 ß!¶ "!"! t t#-!€"W"W!€!€ ªý!¶!¶"Œ"Œ"!"!ð!J"W ª"W ª#-#-#-#- ª"WÓÓ ª"W#-Ó#}!Ð!Ð!Ð#¸!e¸"q Ä Ä Ä"q"q Ä ª ª"W"W ª ª ª ª > > > > ªý&Ó ú ú!Ð!Ð"< !e¸îî"q ÄîîîAM ú úMââ^^5 !e¸MM M ß ß ß ß !¶ ý ªÓ!€"W"W"W"W"Ï!"!"u$ ·!à] · + · L L#¦ L!à  í"š#!X#Û#Û##%ˆ". í"š$G"š$4%á% % "ò!E o"""#É"#É"""!Ë#x%%%%%%%%$O$O$ð#C$"l!–#C$ð$ð$ ).…6æ7½63Œ1ß4c7½9Õ;‚=/>Ü?˜BòEuCÈE +E +E +E +DŸDŸEuEuEàD3C]A°@<©9O5õ5õ4H4H5õ8 1Y*¥%ž%ž%ž&u&u'œ%ï&Å(r'0'0&Z&Z&û&û(¨&û'f)&(<&í(š'Ä&(/(/(/&‚'ù+S(Ð(Ð**'Ž);*,()V'©'©+++*,*,)V)V)V'©&Ò((@$æ%¼%¼'Õ'Õ*X(«&þ&þ&þ&þ(«&þ&þ(«(á(á)·)·&È(u(u&È)í&“&“(@)‚)‚'Õ)‚*0*0(ƒ(ƒ()Å(î(î*0&Ö'¬'¬*0(ƒ'¬)Y)ú(M& )ú' %^' %^($#G#G#G$ô%Ë%Ë$'x&6&6&6'ã(ï'B(ï(ï(ï*œ,I,I-)Å)Å+r+r-)Å+r.—.—,ê,ê,ê,ê+=))%,-U+¨//.,.,.,.,//0D.—,,,I,I,I-ö*1+Þ.a.a.,,,,,*f,ê+=-˜-˜+)h'»'»%7%7$–$–$–&C''%m''…'…'…'…(4(4) *¸)á(4) '^)á(4(4(4) *¸+Ž+Ž-¦/S,Ð+#*¸.,e*¸*‚*‚'þ)«*****,<,<,<.À-+f+f(â(â+f+f,¨*û,¨)N&_&_'5(â'¡'¡%&Ê'¡%ô&Ê&Ê*û)N#p%%–'C#é"<#é#é#!e!e¸ "<"<"< ß"Œ #c#c#c#c !¶!¶"Œ ß"÷!J!Jð ß"Œ!¶!¶!J"÷!J ß"Œ"Œ"Œ"÷!J!J"÷!!"Âh ª ª ª ª"W ª"W"W"Â"Âh!"!"!"!"!"÷"÷!J!¶!¶!¶!¶!J$¤#Î t!0!0 Y¬""!0!0îA Ä"q Ä Ä Ä Ä ª ª"W"WÓÓÓ!€ > > > > ª ª ª ª”î Ä Ä Ä!›!› Y¬ Y Yƒ!0 Y¬ ú ú úM  ^ƒ!0 Y¬!›î Ä!€ÓÓÓ&Ó"W ªÓÓ&Ó ª ªÓÓþ« !X«ÔÔ   í í@ í í“ +]"d ·!!"d$#¦#¦%S!ù!"!"#¦#¦#(#(#($Õ!æ!æ!"½#“#“#“!æ"½"½#“#“!+"Ø"#®"Ø"Ø"Ø$…#x%%%%!Ë"7"7$º$º%ï$B&Å+Ì1ª6±51ª/Ç3!5¤7Q9j<Ä;>qAEDŸDŸDŸE +E +E +E +E +E +E +E +DŸDŸCÈB@:ü9O5õ6Ë54H5õ5T3§,'$’$’&?'ì%ï$B'œ'œ$B%ï'œ)I$â$â(<&'Ñ&$(¨(¨'Ä'Ä)q)q)'Y)'Y);*è);*è'ù'ù%v'#)Œ)Œ'ß'ß(µ*b)Œ'ß) ) 's's's%Æ$ð(J)‚&((«(«(«(«&þ&þ(á(á*Ž'4(u(u(u(u*Ž,;.¾-( +( +)·( +)í(@)í)í'Õ)‚)‚)‚))'â'â+§)ú)$'w)'â' (¸)ú(M& & (M& 'w)$'w%Ê$ó& $ó"q#G#G!š&¡%Ë%Ë'x'x&6&6&6'ã(ï'B'B*œ(ï*œ*œ*œ)Å)Å-+r)Å(+r-.—.—.—.—.—.—,ê+=,,/-U-U-U.,.,/Ù/Ù-U-U,ê+=,,/£,I*œ,I0å/8,´,´,.,.,.,,-À,ê.—/E/E,Â+'»'»*>&ä&C&C'ð)'''%m$+$+$+$+&‡&‡) *¸)á(4'^) (4&‡&‡)á*¸,e+Ž+Ž*L/S.},Ð..*¸) ,/,/+X-*****, > > > ª ª ª ªA!› Äîî Y¬¬¬ƒ!0 Y"MM úM 5 ¸ƒ!0 Y¬î!› Ä"q!€ÓÓÓÓ!€ ªýÓÓ&ÓýýÓÓ!X« «!X   í í@ í í í · +"d$$ç!"d$#¦#¦%S!ù$|$|#¦#¦#(#(!{#(!æ!æ!"½#“#“!æ 9"½"½#“#“$…"Ø#®%[&2&2&2$…%%#x%%%%%‘%‘&g&g$B%ï(r-y56±551t4Î7Q8þ;>q>qAËDŸDŸDŸDŸE +E +E +E +E +E +E +E +DŸDŸCÈB>V<©<©9O8x6Ë4H5õ75T/w*p$’'ì'ì)™)I'œ'œ'œ'œ%ï'œ)I(<$â(<&)~'Ñ*U&û&&'Ä'Ä'Y))'Y'Ž);'Ž);'ù'ù'#(Ð)Œ)Œ)Œ)Œ*b,)Œ'ß's's's's) 's(J(J)‚&(#¤*X(«(«(«(«(á(á'4'4%(u(u(u(á-è8Ì3Å)·)·)·( +)í(@(@(@'Õ)‚&()‚)))))ú(M'w)$+<)*e(¸)ú(M& & (M)ú'w)$'w%Ê(M& & "q$%Ë$%Ë%Ë%Ë'x'x' (¹'ã&6(ï(ï(+r(ï*œ*œ*œ*œ,I-ö-ö,I*œ+r-/m-À,ê.—/m/m/m,-U+¨,.,,,////-U+¨-À,+=+=.Ì.Ì---‹-‹.a,´,/Ù.,.,/m-À-À-À+ë-˜-˜*>)h'»'»'»%m%m'(Ç(Ç*t(Ç'$+%Ø%Ø$+"W%±'^'^%±'^(4(4(4)á)á)á'^) *¸*¸+ù/S,Ð.}/¿.+Ž+Ž+X+X,/,/)@*í*í*í-.À/–-é---é-é---)¹*û'¡*$*$(â'5( )¹'¡%ô%&Ê)N'¡'¡%ô(w(w(w&Ê$¿&l$¿#$¿$¿"<"< "<"<#é##"<"<#c#c"Œ"Œ!¶ !¶#c"Œ"Œ #c"! t!J$¤"Œ ß"Œ"Œ"÷ t"!"Œ"Œ ß ß"÷"÷"÷"÷"Â!!ë#˜"W$#-Ó!€$Ú"W"W"Â! >!ë"÷"÷!J"÷"÷"÷"÷"÷#c#c!¶!¶!J!J#Î"!!0"Ý!0"Ý"݃ƒ!0 Ä"q#H!›!›#H Ä!€Ó!€!€ ª ª"Wý >‘‘ >Ó!€ ªý”!›!›#H"q Ĭÿ Y Y!0!0¬ YM ú # #¸¸¸!eƒƒƒƒ Ä ÄÓÓ ª ª!€!€ ªý!€!€!€ÓýýÓ!€!X!X Ô««!X«@ í #p"š í !Ã"d"d$%¾&”$ç%¾$&)$|&)"Ï%S%S$|&)&‚#(!{#(#“%@$j$j$j$j"½$j&&&'Ä'ß&2'''''')V)V(*,)Á)Á)Á)Á*+Ì.P3W7‡7‡6±8^8þ:«=/@‰@ô@ôAËCxDŸDŸFLFLE +E +E +E +E +E +E +C]DŸDŸDŸBòC]A°@@=;Ò:%:%;29…5T0M+F,ó*p*p,£*ö*ö,£+Ì+Ì-y+Ì*À'f,m*À*U(¨*U*U(š(š)q'Ä(/+‰*³'Y(e(e*(e*}(Ð)¦)¦)Œ+9*b*b*b*b*b(µ(J(J) 's)÷(J(J)÷+/'Õ%Q*X)‚+/+/)‚*Ž*Ž*Ž(á'Ÿ)L(u&È)·-1B/•(á(á)·)·'i)))'Õ'Õ'Õ)‚'â'â+<+<)ú(M'w)$'â)*e(¸)$)$(M& & (M'w)$(M(M)$'w&  Ä$%Ë$"q%Ë)%'x'x(¹' 'ã&6(ï(ï)Å)Å'B(ï(ï,I*œ,I-ö-ö*œ,I+r--À/m.—,ê,/m-À-À-U+¨/Ù.,.,.,//-U-U-U//m-À,ê,ê.Ì.Ì-0y/8+Þ,´.a.,.,.,.,/m-À-À-À+ë-˜+ë(‘)h+)h)h'''(Ç(Ç*t'%m$+%Ø%Ø$+%±%±$$"W$&‡&‡&‡(4(4+Ž*¸) *¸.+ù+ù,Ð.},e*¸+Ž(4)«)«*‚*‚)@*í)@)@-.À1C/–.À.À-é-é---)¹*û*û*$*$'5(â)¹( '¡%ô&Ê(w)N'¡'¡%ô&Ê&Ê&Ê(w$¿&l(### "<"< ###é#é#c#c$9 ß\ !¶#c"Œ"Œ!¶%#Î"!!J$¤$9"Œ"Œ"Œ"÷"! t ß ß"Œ"Œ$¤$¤!J!J"Â!!ë > ª"W!€!€!€!€"W"W"Â! >!ë"÷"÷!J"÷"÷"÷"÷#c#c!¶!¶"÷"÷#Î"!"Ý!0!0"݃ƒ"Ý!0 Ä!›#H#H!› Ä"q!€Ó!€!€ ª ª"W"W >‘‘ >&#-"W ªî!›!›#H Ä Ä Ä¬ Y#³#³"Ý"Ý Y""§ ú ##}!e!e¸!e!0!0ƒƒ Ä Ä"q"q!€!€"W"W!€!€ ª"W!€!€!€Ó"W"W#-$Ú$²$²". $²!X«!X"š$G#p#p"š$G#p%%¾%¾%¾'k&”(A'k%¾'Ö&)'Ö'Ö(­(­&)'Ö)Ü)Ü(/)Ü(š*G)q)q)q)q+)q+++,Ë,æ+9,/i-¼12Ã2Ã1·1·4:5ç5|5|8Ö8Ö94:á=e?>;>;?@¿C D¹EEDNDNCxE%DŸDŸDŸDŸE +E +E +E +E +E +F·E +DŸDŸDŸFLE +C]E +E +EàD3D3D3Aæ@9?b=µ<:[;2;2;¸6±3W55Ú5Ú4-2€4Î1t3!4Î2¶1 /\/\/N/N.x0%.ã.ã,`,`-l-l+¿-l,*-×.­.­.“,æ*b-¼,,,-¼-Q-Q,z*Í+¤)÷)÷+¤,Ü,Ü*X,+/,Ü+/)‚*Ž*Ž*Ž(á'Ÿ)L&È(u+d+d(á*Ž(á,;)·)·)'i*Ã*Ã+/'Õ'Õ)‚))+<+<+§)ú,~*Ñ)'â(¸*e'w'w)ú+§)ú+§*Ñ)$(M(M'w)$& $$‰$‰#²#²$%Ë%Ë%Ë&¡&¡'x)%()Å(ï'B'­'­)Z+,I/£-.Ì+Þ+Þ+,´,.,/-U,,-À-À*f,/m10¯0¯2\0¯.—.—/m/m.,.,-U/0,´.a.a.Ì.Ì--.,.,.,.,/Ù/Ù.,.,-˜-˜+ë*>++*>(‘'…)2)2*ß)'ð(Ç%m([%%#T#˜#˜$o$o$"W$Ú#-"Â$o&ò*L+ù+ù*L-¦,Ð+#+ù+ù*L*L+ù*L+X'þ(Õ(Õ*‚,/--.À.À/–-é/–-é.À--+f,<,<,<,<)¹)¹(â*)¹)¹( ( ( )¹)N'¡(w(w'5(â(â%ˆ&'®%*#}#}#}#}#}#}!Ð úM"< ##!J!J"!"!"Œ ß ß"Œ#c!¶%%"!"!"!"!$9$9!¶#c!¶!¶ ß"Œ "Œ ß ß$9"Œ ß#˜!ë"Â!$$#-!€!€#- ª ª!ë >!"Â"Œ"Œ#c!¶"! t"!"!$9"Œ ß$9"÷"÷#Î"! Y"ƒ!0!›î!›!› Y Y!0!0ƒ!0" Y!!!ë!ëÓ!€ ªý!€ÓÓ&ý ªÓ#- Y" Y#³ Y"!0ƒ¬ Y""!›#H Ä Ä"§ ú"§"§^ !e!›îîA"q!›î!€Ó$"W!ë >h!hh#˜!ë!€!€"W$#Û#Û".".".".".".".".!X!X#p#p$G%ô&)$|&)$|%¾%¾&”&”'k'k&”&”'Ö'Ö&)'Ö%¬'Y&‚(/'Y'Y)Ü(/))*³*³+)q++*Í,z-Q-Q.'.'.'/Ô0à0à1·3d3d3d56¾7‡7‡:á:á<ù<ù<ù@SB6CãCãCãCãCãD¹C E +E +D3D3DŸDŸDŸDŸDŸDŸCÈCÈE +E +D3EàEuEuEuCÈC]C]D3D3AA@9;2:[<<:[9Ÿ9Ÿ6E6E5o22ë4˜7½6593Œ2J-C.ð.ð0%0%.x0%. . . /º-l+¿*è.B/ï/ï/ï.B,æ,æ+9,æ,/i-¼,,æ,æ*b,*b*b*b*b+/,Ü)‚+/,p,p,p*Ã)·)·-+d)·+d*Ž*Ž*ù)L(u+Ï+d+d*Ž*Ž)‚)‚*X*X)‚)‚)‚)‚)ú+§+§+§)$*Ñ)ú)ú*Ñ)$(M)ú(M& (M)ú(¸*e*e(¸)'â' (¸*e%Ë$‰$‰""$%Ë%Ë%Ë(N(N%Ë'x()Å(ï'B'­'­)Z'­*œ*œ+r-+Þ+Þ.a,´.,/Ù0¯/-À-À-À-À,-À/m12\2\4 2\0D,ê-À-À.,.,/-U.a.a.a.a--.Ì.Ì/Ù/Ù,/Ù/Ù/Ù.,.,/E+ë+ë*>++*>(‘'…)2)2*ß)$–''&®#T#T!§!ë!ë"Â&$"W#-$Ú$o"Â#˜&ò(Ÿ+ù+ù+ù,Ð+#+ù+ù+ù+ù+ù*L)«&Q(Õ(Õ(Õ*‚+X+X.À.À,<*-é/–0m.À.À-,<,<,<,<+f+f*(â( ( ( ( ( &_'¡)N&Ê&Ê(â'5'5'5&$T#}!Ð!Ð!Ð#}#}#}!Ð ú"§"<#é$¿!e!J!J#Î#Î$9"Œ"Œ$9%#c%!¶"!"! t#Î$9$9!¶#c!¶!¶"Œ$9!¶!¶"Œ ß$9$9"Œ ß#˜!ë"Â$o"W"W!€#-Ó!€ ª ª >!ë!h ß ß#c!¶#Î"!"!"!$9"Œ ß ß"÷#Î"!" Yƒ!0#H!›!›!› Y Y!0!0!0ƒ Y¬hh > >&Ó"W ªÓ!€!€Ó ª"WÓ#- Y¬¬¬¬ Y!0ƒ Y¬¬¬î!› Ä ÄM ú ú Wý !eîA!›îAîÓ!€"W ª‘ >h!hh!ë >!€!€ ª"W ".".".Ô !X!X!Ã!à í"š"Ï$|$|"Ï"d"d#:#:%¾%¾&”#:$|$|$|"Ï"R ¥$Õ#("R"R$Õ#(#ÿ#ÿ%¬%¬$j"½$j$j$%Æ$ð$ð$$$%Æ&Ò#x%ü'©'©'©'©)V(r(r/&5Ú6E9Ÿ7ò7ò8(9Õ;‚;‚=/@‰C D¹E +E +EàEàDŸDŸDŸDŸDŸDŸEuEuE +E +D3B†@n=;g6`4H4H6Ë6Ë8®8®6+-Ê,ó. +F,ó*Š*Š(Ý,7+a((Ý-ä,*U)~'Ñ)é(<)é)é)q)q'Ä)q)))*³(e*););*è*è);*è)Œ)Œ)Œ+9*b*b,*b+9+9*b,,,(µ(µ)‚+/)‚'Õ))'i))·)·)·+d)·+d*Ž*Ž)L'Ÿ&È*")·)·*Ž*Ž)‚)‚*X&þ)‚)‚+/+/)ú(M)ú)ú)$*Ñ(M+§)$*Ñ)ú+§(M)ú(M)ú(¸' (¸' 'â)(¸' (¸$"Ü!/!/$‰%Ë%Ë$ô&¡'x%Ë$ô&¡&k)Å)Å+r)Z'­&&()Å*œ,I*1-‹-‹/8/Ù.,.,,0D0D.—,ê.—,ê-À133334 2\1/m,ê.—-U-U-U-U/8/800-ö/£/£-ö/Ù1†.,/Ù-U/-U+¨,Â+,Â++,Â,Â,Â)2)2'…)2+J)$–$–%Ø%Ø$+$+$o$o"Â"Â$"W!€$Ú%E%E#˜&ò'É)v+#.},Ð)v,Ð+#+ù-¦+#)v*‚(Õ(Õ*‚(Õ(Õ+X+X-é/–-é-é-é-é.À.À/–/–-é-é,<**(â*(â&_( (â(â'5(â(w(w*$*$+f( '5%ˆ&$T%*#} ú"§"§"§#}!Ð"§ ú #é#é"<"!"!!J"÷"Œ"Œ"Œ$9%æ"Œ"Œ"Œ t"!"÷$¤"Œ$9!¶!¶#c!¶ ß"Œ#c%#c!¶!¶#c$9"Œ"Â!!$o"W$$$ý ª$"W!!!ë > !¶"Œ"Œ!J!J!J!J ß ß ß ß!J"÷"÷!J!0!0!0!0#H!› Ä Y"""¬¬" Y!! > >ýP!€!€Ó!€#-!€ÓÓýýƒƒƒƒ¬ Y Y Y¬¬¬"Aî Ä ÄMM #v^^!e!eAA Ä ª ªÓÓä > > >‘ >‘‘ÓÓ ª ª Ô ".#Û««ÔÔ ". í í !Ã$|$|#¦!ù"d"d$%¾$$$ç$ç"Ï"Ï"Ï!" ¥"R"R"R#(#(#($Õ"R#ÿ#ÿ"R!æ!æ!æ!æ$ð#C"l"l$ð#C$ð$ð%%#x%%#x%%%%$O%ü$B'œ-y5Ú75o4˜4˜5¤5¤7Q7Q9Õ;‚?²?²C]E +EàEàFLFLEuEuDŸDŸDŸDŸE +E +D3@Ù<>8ä8 1Y.j01Ä3q6+7Ø5T+F'ì&?''((((&Z$­&Z((¨&û'Ñ&$'f'f(<(<&í(š&í&í'Y'Y))'Ž););'Ž*è*è'Ž);'ß'ß'ß)Œ+9)Œ+9+9*b*b+9)Œ*b(µ*b*b)‚+/(«&þ%¼'i%¼)+d)·( +)·'4(á)·( +&È&È'Ÿ'Ÿ&])·(á(á*X(«+/+/*X(«+/+/)ú& *Ñ)$(M& (M(M'w)$'w*Ñ)ú)ú)$)$'â&5' (¸'â'â'â'â)"q!/‚"Ü"Ü$$&¡$ô$%Ë&¡$ô&k&k()Å)Z'­'­'­()Å*œ,I+Þ+Þ/8-‹.,,/Ù1†1ñ1ñ0D.—,ê.—/m2Ç33332\0¯12Ç0D1ñ//0¯-U/8/81»1»1P2ý2ý1P/Ù1†1†/Ù/-U+¨-U,Â+.o,Â+,Â.o.o*ß.9*ß)2+J)'ð'ð%Ø%Ø$+ Ñ!$o$o$o"W ª!€$Ú!ë!ë#˜&ò'É)v+#.}.}.}.},Ð-¦+ù)v'É(Õ'((Õ'(%{(Õ+X+X-é,<-é-é-é-é---é-é-é-é,<**(â(â'5)¹( '5'5(â'5(w(w(w(w)¹)¹(â'5&$T%*#}"§$T$T$T#}!Ð$T"§#é#é"< "!"!!J"÷"Œ"Œ$9%æ%æ%æ"Œ"Œ"!#Î$¤"÷ ß"Œ#c#c!¶#c"Œ ß!¶#c!¶#c!¶#c"Œ ß"Â$o"Â" ª"W"W"W$"W ª"W!!#˜‘#c!¶"Œ"Œ!J!J!J!J ß ß ß ß!J"÷!J!0$Š!0!0!›#H Ä"q" Y"" Y Y" Yh" > > ªýÓ#-!€ÓÓ!€!€!€ ª ª!0!0!0!0¬ Y"" Y Y¬"î!› Ä ÄMM #v¸¸¸¸îîjj Ä ÄjýýÓÓ‘‘‘!ë >‘‘‘ÓÓ ª ª".ÔÔ ".«« ". @@ !Ã"Ï"Ï%S#¦"d"d$%¾"d"d#:#:"Ï"Ï!""Ï ¥"R ¥ ¥#(#(!{#(#ÿ"R#ÿ"R#“#“#“ 9#C!–"l"l#C!–!–$ð%%#x#x%%#x#x$O"¢%ï%ï-y5Ú5o3Â1>1>3÷3÷5¤5¤9Õ;‚!ë#˜!ë!ë >!ë >!ë!ë"W$#-!€ !¶!¶ ß ß ß ß ß ß ß ßÓ!€"W ªÓ&ÓÓ !¶Ç tÇ thh‘ >ÓÓýý&ÓÓÓ‘‘‘‘¸¸¸!e â^¸MMMM¸¸"<#é 1!Þ 1„Æ# !s!s Ò Òûû!= g#Á""%#U Ò"""!s!s œ"I#‹#‹#‹!Þ"‡$4!± #^#^!±!±!±!±"‡"‡$4"‡$4"‡!Ë!Ë#x#x"7#ä#ä%‘$ð#C#C#C#®%[%[#®!Ù%3/A4H5õ2›3q1Ä3<3<5¿5¿9…;2=µ=µ?ÍC'DÔFDiDiE@E@DÔDÔDÔDÔC“C“A<8C3<3<3<6–3<2e/ 58x5õ+ç'¶'¶&à%3#Ö%ƒ&Z$­%ƒ%ƒ&Z&Z&(<)é(<&$â'f'f&2&2'(µ) *Í%Æ$'(µ%[%[&2'ß''(µ'&2'ß(J)÷*Í) (ë(ë(ë'>'>*˜*˜(ë*=*=)g)g(&ã(&ã([*([([([([([([(%&x&x&x((&ã&ã(û(û'N'N((*=*=)?)?(h(h'’)?)?)?(Ó(Ó'ý+W*€(Ó)ª)ª'Ç'Ç'Ç'Ç&'Ç&'Ç)ª"V!#,$Ù$Ù%*%*'­'­&k&k%•(ï' ' 'ã))%'x&¡&¡*œ,I+r+r)Å+r*œ-ö/£1P/£/£.a1»00.Ì0y2&2&/£2ý2&0y/0¯0¯0¯0¯4 2\2\2’2’1»1»1P2ý2&2&2Ç13ž3ž2Ç1.—.—--+€----,V/°----------+€)h+*>%7)2'…&®([%Ë%Ë#H#H#³%`!0!0!Ð!Ð&&(+s/¤/¤1l/¿.è+Ž+Ž+Ž..-¦-¦,Ð+#*¸*¸+Ž)á)h,Â)h+-™/F-™/F/F/F0.o,Â,Â-™+ì,W*ª)Ô(''»'»'»'»&z&z&z&z)h)h(’(’$¿#"<"<#é#é##"Ý"Ý!0"Ý"q"q#H#H"§"§ ú"§##"<"<$T ú#}!Ð!e##$¿$Ú$Ú$ ª#-$Ú"W ª#˜#˜!"Â!€#-#-#-#H#H Ä"q"q"q#H#H !e!e$¿$¿#é" > >!ë!ë >#˜!ë#˜!ë > > ª"W$Ú#-!¶!¶ ß ß ß ß#c ß ß22Ó&"W ªÓ&ÓÓ!¶!¶ !¶"! t t"!hh!ë >&&ýýÓ&&& > > > >¸¸¸!e ⸸MM  ¸¸ " AzC'DÔDiDiE@E@DÔDÔDÔDÔC“@9<:[8C6–6–6–4é4é2e2e6Ë:%4H*:& & &à%3%ƒ'0&Z(%ƒ%ƒ$­()é(<&(<&(<'f'f'ß'ß%[') 's) 's(µ*b(µ(µ'ß&2%[(µ'(µ'ß)Œ&(J) 's'>'>%‘'>'>'>'>(ë&ã*=)g)g&ã((&ã([***+µ([([([&x(%&x&x((%6%6(û(û(û(û*=*=+ê()?)?***ì)?*ì*ì*€'&'ý'ý(Ó'&'ý'ý'Ç'Ç&)t'Ç)t'Ç&$£#,$Ù$Ù$%°%*&×%*(„(((&k'ã)(¹*f)%)%'x)%*œ,I(ï(ï'B*œ*œ-ö-.Ì-.Ì/8-‹.a0-ö/£2&2&/£/£0y0y/Ù1†1†1†/Ù/Ù331†3h1»1»1»1P2ý2ý2ý2Ç12Ç2Ç3ž3ž1ñ0D...Ú+€./°,V..Ú+€+€+€+ë+ë,Â)h)2'…%Ø$+%Ë%Ë%Ë$%`%`"Ý"Ý!Ð #%*&×'C*/¤-÷1l3.è.è,e*¸-;-;0*.}.}+#*¸*¸+Ž+Ž)h+++,Â1É/F/F/F0ó03v/F-™-™+ì+-.*ª(ý'»'»(’*?(ý'P)Ô('(’&å%8%8#é#é!e##é#é#$¿"Ý!0"Ý"Ý Ä Ä"q"q!Ð!Ð!Ð!Ð%–%–#é "§"§!Ð!Ð"<#é"<#é"W"W$$"W"W$ ª!ë!ë!ë!ë!€$Ú#-#-"q$"q$#H!›"q"q"<#é "<"<#é" >!ë!ë!ë!ë!ë > > >"Â"Â"W ª$ ª!¶!¶ !¶\2"Œ \!¶!¶ ß ß22ýPý ª#-Ó ªý2 ß ß ßÇ tÇ t > >!ë >ýP&ÓPPÓÓh! >!ë"< âââ"< "§ úvÉ5ââ"<"´Z!Þ 1!sÆBï!¨û Ò Ò g g g#Á""#U#U""" Ò# # # # &å&å!Þ!Þ!±#^ Ú Ú#^#^"‡ Ú Ú Ú!±#^% #^#^#^#x#x#x#x"7#ä#ä#ä$ð#C"l$%[%[#®%[& & .j551Ä/A0î3<3<4é6–6+9…9…;2:Æ> ?ÍAzB¼DiDiFCþE«CþCþAæ>Œ;29…97l97l4é4é445:%3q+&à%3$\$\&Z(&Z(%ƒ#Ö#Ö(Ý(<(<)é(<'f%¹&&''(µ(µ(J(J's's&2'ß(µ'(µ''(µ&2'ß'''s%Æ&(J&g$º%‘'>&g(%‘(ë*=*=)g'º&ã&ã(*='„'„&®([&®([)1'„(%(%(%)Ò*=('º& &x(%(%(%(*=*=(**)?*ì*ì*ì)?)?(Ó(Ó(Ó'&(Ó(Ó'ý)ª&ñ&ñ%D&ñ&ñ&ñ(ž(ž'&#,$Ù$Ù%°']%*&×&×&×&k&k&k('ã)(¹' *Ò*Ò)%'x(ï*œ,I(ï(ï,I*œ-ö+r--.Ì/80å1»0/£1P2&2&/£2ý0y0y/Ù1†.,1†1†1†331†1»03h3h4ª2ý6W6W4t2Ç2Ç2Ç5K5K5K3ž1]1]24.Ú./°/°.----)Ó)Ó-˜-˜.o+*ß)2$+%Ø'x'x%Ë$' ' 'ä$Š%*#}%*&×*-÷/¤1Q31l0•0•.,e+Ž+Ž+#,Ð+#+#*¸*¸+Ž(4+,Â.o.o.o,Â+ì/F/F0ó1É1É-™/F/F-™.Û)Ô'P%£&&%8&å'P%£('&z%8&å&å#‹"<%–$¿#"<"!ë > >"Â"Â$"W ª ª "Œ"Œ \ ß ß ß ß ªý ª"W!€!€"W ª"Œ ß ß ßÇ t tÇ‘‘‘ >ý ª!€#- ª ª&&h»ä‘ â â â úMv #â "<" ?ÍAB¼DiFCþBQ@¤@¤>Œ;2;29…97l5¿4112e2e56Ë.j)c&à%3$\'¶&Z$­&Z('0%ƒ%ƒ'0&&$â&)'f&&(µ(µ''&&%Æ%Æ$…&2(µ''(µ'(µ'ß&2%[(µ) 's&$ð&g$º%‘'>&g((ë(ë(()g+((*=('„'„([&®&®([)1'„(%(%)Ò(%&ã('º)g&x(%(%(%(*=&ã(***ì)?*ì*ì*ì*ì(Ó(Ó*€(Ó(Ó(Ó)ª'ý(ž(ž*K(ž(ž(ž(ž(ž(Ó#—$$$%°#&k%•%•&k(&k(' ' %_' %Ë)%)û(N*1+Þ,´)Z+++Þ-‹---.Ì--1P/£.Ì0y2ý1P/£2ý/£/£0¯0¯.,1†1†1†0¯2\1P1P2&5€4ª2ý6W4ª4t2Ç12Ç4 4 4à333 +4·3á241]..Ú.Ú.Ú0‡+€+€,V..,V+J'ð$–&C' (º' ' &7&7' %`$¿#$¿()[.b003„1×1×0*.}.},Ð+#+Ž+Ž*¸,e,e,e*¸*¸+,Â.o,Â,Â,Â-™/F.o01É1É../±.+)Ô(ý'P&z('$Í# "´$a&&&'»%8#‹#é"<###$¿#é#é!›!›!›$õ#³ Y Y#³#é"<"<#é!Ð#}$T$T#é"<#é#é#é"<#!e"W"W!€#-#-!€$$$"W ª$"Âh!"Â!›î"q"q"""Ý$Š$T"§!Ð#}"<"<"<"<"Ý"Ý""î!›!›îAî Ä Ä!›îî!›$o"Â!ë!ë!€#-"W"W"Â! >#˜"Â"Â!! t t t"!"Œ ß2 ß"! t"! t!JÓ!€ ª"W!ë!ë!h"! t t t!J!J > > > >!ë >!ë!ë >!ëhhýýÓÓ!e!e¸¸v #v #  v # #vMM!Þ!Þ!Þ„!! 1!Þ!¨û!¨!¨#U!¨!¨!¨"#Á g"#Á""ê"ê"´$a!Þ!Þ# # "I œ!± "‡"‡"‡"‡% #^""$Ÿ$Ÿ""!E"ò$O"¢#x#x"¢ õ!Ë!Ë"#®#®"$ð$ð#C!–#†&à(4H8 1Y/¬/¬1$2Ñ1ú5T6–9ð:Æ:Æ9ð; AzDÔFDÔAz?Í?Í>Œ;29…9…7l7l4é4é2Ñ2Ñ3§5T7777.Ö)Ï&à%3'¶'¶%ï%ï&Å&Å&Z&Z&Z(&û&û&û&û(¨&û(¨&û's's%Æ%Æ&2&2'(µ'ß'ß'%[&$ð%Æ%Æ%Æ%Æ(J(J(J&%Æ%Æ(&g(&g%%('©%ü(û'N*¨*¨&ã()g'º)1)1&®([(Æ(Æ'ï)œ'N'N(%(%)Ò(%)Ò(%(û(û(û'N&ã((((Ó(Ó+W)ª(Ó*€*€*€)?)?**)ª&P)ª'ý(ž&ñ'Ç'Ç)ß)ß'\'\&»#—$$$%°$¾$¾'B'B$¾&k(&k' *f(¹' 'x'x)û+¨*1(„+++++Þ-‹--0y.Ì.Ì2&/£1P0y2&2ý1P1P1P1P-ö0¯0¯/Ù/Ù1†1†0¯2\1P4ª3Ó7-6W4ª4ª2ý4t2Ç2Ç12\2\1†333 +1]0‡243 +/°0‡0‡.Ú--+€+€*©,V.,V,÷)&C$–' (º' ' +>'ä' %`$¿&l$¿(,µ.b,µ00*1×.}0*0*0*.},Ð+Ž+Ž) *¸*¸*¸,e,e,Â++,Â++-™/F01É1É1É1^1^/±.-.+(ý'P('&z&z$Í$a"´&&&'»%8#‹#é"<$¿$¿$¿#"<" >h! t"! t t > > > > >‘!ë!ë >‘hh ª ª!€!€¸¸¸¸v #!Ð #MMv # #!ÐMM 1 1!Þ!Þ!! 1!Þ!¨#U#Uû!¨ûûû g""#Á#Á"!=!="´$a!Þ!Þ!s!s#ö"I!± "‡"‡"‡"‡#^!±"""ò"ò"""ò$Ÿ"¢ õ #x õ"¢%%!Ë"#®#®"$ð$ð!–#C#†&à&à/A4³4³1Y1Y1$2Ñ1ú5T4é8C996–8C:Æ:Æ >ÇÇ t tð!h!hhh!ë!ëhh >‘ ª ª ª ª ¸¸M úMMv #vv #v!Ð!Ð#‹ 1ZZ„ 1!!"$,!¨û!¨!¨N!¨!="ê"ê"ê""!=!=#‹#‹#‹#‹ œ"I œ œ"‡"‡!±!±"‡"‡"‡$4"ò"ò"ò$Ÿ#É#É#É#É!Ë#x!Ë#x#x%%'©%ü"Ø"Ø"Ø$…$$$$$\& "¯)c205Š1Y/¬. 0M1ú3§6–6–8C8C4é6–8C8C:Æ?ÍBQE«Cþ=J9ð;:[:[8®77l5¿6–4é5T1ú3§8®9º3+|&u$\& & & %ï$B#k(r'0%ƒ'0%ƒ&$&$'Ñ'Ñ)~)~(¨&û%Æ%Æ&&'ß&2&2'ß&2'ß(µ(µ(J(J's's&&(J&'s%Æ$$#ä"7# $º&Ò%%&Ò((%(%)Ò+)g+)g'º'„)1([(['(Æ'ï'ï(û(û&x&x(%&x'N(û'N(û*¨(û(&ã'º'º*€*€+W+W)ª'ý(Ó*€)?)?(h(h'&(Ó(Ó'&)t)t)t'Ç(2)ß(2(2)?$n#,#,"V$&k&k&k&k()Å(ï'B' ' )'ã(N&¡)û+¨,´++Þ-‹00.a,´-ö,I-.Ì/£1P1P/£/£1P.Ì.Ì/£1P2ý2ý2\//0¯2\0¯2\2\2ý2ý7-7-5€7-3Ó3Ó3ž3ž2Ç2Ç1†3333331]4·3 +3 +3á5Ž3á240‡0‡0‡--.Ú--,V,V,÷&C(Ç')‘+>,ë+>)‘'ä'ä&7&l&l'C(ð,µ.b.b.b0*0*1/S.}0*2­/S.,e+Ž+Ž)á+Ž-;+Ž-™/F/F0ó.o,Â/F/F0ó2 3v1É/±3 250ˆ-.-.*ª'P&z&z&z(''»&&å%8$a&#‹%8&l$¿$¿&l'C%–"<#é$"q$$#³#³"Ý!0#é#é###}#}$T"§"<%–#é#é#é#é"<#é#-#-$"W"W ª!€#-"W$%±$"Â"Â"Â"Â Ä Ä!›!›!0!0"Ý!0"§ ú!Ð # "<#é"<#³" Y Y#H!›!›!›"q"q"q"q!›!›î!›!!!ë!ë!€!€$"W"Â!!ë > > >!!"÷!J!J!¶!¶ !¶ t"!"÷!J!J!J"!"! ª ªý ª"Â! > >"!Ç t tð!hh!!!‘‘hh!ë >ýý ª ª ¸¸ úMMMv #vv!Ð # # # 1 1ZZ!Þ 1ZZ Ò"û!¨!¨!¨!¨!¨"ê!=!=!=""!=!=#‹ 1 1#‹"I œ œ#ö"‡"‡#^#^$4$4$4%á$Ÿ$Ÿ$Ÿ"ò""#É#É!Ë#x!Ë#x%%#x$O"¢$…$…$…"Ø$$%Æ%Æ$\& $\'¶0ƒ774³/¬. 0M1ú3§4é4é4é4é3<4é6–6–7l!"Â!hh!Ó&ý ªhh > > ª ªÓÓ&& ªý t"! t \â⸸MMM ¬¬ Y¬ ÄîAB œ œ œ!Þ 1!Þ!Þ œ"I!s!s!s!s œ œ"I"I!s!s$Í!s"I"I"ê"ê"ê"ê"ê""#“#“ 9!æ$Õ$Õ#ÿ#ÿ"½$j#“!æ#($Õ#ÿ"R#ä#ä"7#ä$O"¢#x#x$ð#C$$$…"Ø#®%[$ý$ý%Ô'/ 5¿42e0¸0¸2e2e1ú3§2Ñ2Ñ0ƒ5Š775Š5õ9O@E +B†:%7¢9O8x8x7¢7¢8C8C8C4é2Ñ/w6+;26Ë)c& & &à('¶& %ï'œ%&Å$­$­&Z&Z&û(¨(¨&û'f%¹&(<%‘'>(&g(ë(ë((&Ò%%'©'©%ü$O$O%ü'>%‘'>'>$º$º%‘%‘%[%[$…$…#®#®&2&2$Ë&x(%)Ò,U*¨&x(%+)g*=((û(û(û'N'ï'ï*s*s)œ)œ(Æ(Æ)1'„%×'„)1*Þ)1)1'ý'ý'&(Ó)?*ì(h*) *¶*¶) )t'Ç)t&(2(2'\'\(ž(ž)t)t(ž#b%z%z&Q&Q%Ë'x$ô&¡'x'x)%)%(¹(¹+=)+=+=))),ê,ê,ê,,,,/£-ö*œ-ö.Ì.Ì---.Ì0y0y0y0y2&0y2Ç2Ç12Ç2Ç2Ç3ž3ž556Â6Â5€5€5€3Ó4t4t4t4t5K3ž4t4t5ù2Ÿ5ù5ù3v3v3v5#4‚4‚3«3«3«1þ3«1þ0,Â+ë(‘'®)[*1*1(„&×&×&×&×(„&×*1)Æ+s-÷/¤0_0_2 2 0_0_3¹0_2 0_/‰-Ü,š.G-q//F2 1É3v2 0ó01É2 0ó1É0/F0ó0ó0ó0ˆ-.+('(ý(ý%£%£&z(''P%£'»&&$a&&&×&×%*%*$T"§$T&"§$T$T$T%*%*"§$T%*#}#}#}%*#}"q$$"q%Ë$"q"q$o$o$o$o$Ú#-&‡!€$%±#-#-$$"W"W Y"" Y$"q$"q!e¸"<"<$¿!e!e¸"""Ý"Ý""!0ƒ!›!›"q"q!0!0!0!0"Œ ß#c!¶"÷"!"!!€#-$ ª"Â"Â!ë >ÓÓ!€#-"W"W!€#-!J!J t t t"! > >!"Â"Â!!hÓ!€"W ª!! > > ª ª!€&yÓ ªý tÇ t !¶ 5¸¸ ú úM ú Y Y Y¬ Ä!›î œ œ œ œ 1!Þ#‹#‹"I œ# Æ!s!s"Iï œ œ!s$Í# # %£%£&D"ê!=!=!=!=#Á g#“#“!æ#“#(#(#ÿ ¥!"½!æ#“!{#(#ÿ"R#ä#ä"7#ä"¢ õ%%%%$ð#C"l"l$…"Ø%[#®#P#P%Ô'+±2e45¿442e2e1ú3§4~4~203Ý5Š3Ý5õ9O@E +D38x7¢9O58x9O9O8C4é112Ñ6+9…7Ø.j'¶$\$\#†%3& '¶'œ%ï%&Å&Z&Z(((¨&û%N&û'f%¹&(<%‘#ä(&g%‘%‘(((&Ò%ü%ü'©%ü%ü$O#ä%‘'>'>&g# #ä#ä%[%["Ø"Ø#®#®$…$…$Ë&x&x(%*¨(û(%&x)g'º&ã%6'N'N'N(û'ï'ï'')œ&B'*s)1'„'„)1)1*Þ'„'„'ý'ý%y'&)?*ì(h*'\) ) '\'Ç)t'Ç'Ç(2(2) ) (ž(ž'Ç'Ç&ñ'’&Q'þ&Q'þ'x'x&¡(N'x'x)û)û'ã'ã+=)*f,)'ã(¹,,ê.—+¨-U+¨+¨-+r+r.Ì.Ì-*œ*œ,I1P0y2&.Ì.Ì1P/£1ñ1ñ2Ç4t5K5K6!6!4?5ì8o6Â6W6W3Ó3Ó4t6!6!6!6!4t5K5K5#3v5ù5ù6Ð5#4L4L3«5X5X3«5X5X75X2Ÿ0ò,Â+)[)[*1*1*1(„)[&&&&×(„*,J+s.Í161616160_2 6=44160_.²,š,š,š.G/F0ó3v5#4M2 0ó0ó00.o,Â-™0ó000ˆ.Û+)Ô'P%£$Í&z&z&z'P'P'»&%8%8&×&×"§$T%*%*&$T#}%*"§&$T&$T$T%*%*&&$T"§%*#}#H#H"q"q%Ë$%Ë$!ë#˜$o$o$"W$"W ª%±$"W#-$Ú#-!€!0"Ý!0ƒ#H!›#H$õ#!e##"<#é!e!e"""Ý"Ý"Ý"Ý"Ý!0!›!›$"q!0!0"#³"Œ"Œ$9"Œ"!"!"!"!!€!€ ª"W$o"Â!! ª ª!€!€#-!€"W$"!Ç t t"!"!!J!ë >h!!ë > >äÓÓ ª"W > >!!"W"W!€ÓýýÓÓ t"!!¶ ß ßâ5 â!Ð #v #!0ƒ¬¬ Ä!›!› œ œ œ œ„!Þ!"´"I œ œ"I"I"I œ"I!s!s# $Í"I œ$Í# $—$—#Á"!=!="ê"ê"½$j#“%@%¬#ÿ#ÿ"R#“#“"½$j"R#ÿ#(!{# # $º$º%%#x%%%%$"l!–#C$…$…%[%[$'"z"z%Ô(W/ 6–8C42e2e2e2Ñ2Ñ0M0M0ƒ0ƒ3Ý3Ý4H7¢?,D3A°7¢6Ë5556Ë54é3<0¸0¸5T8®9…2Ñ+ç%3$\$\"¯& %3%3%ï'œ&Å%%ƒ%ƒ(Ý'0&û&û'Ñ&$$â$â&&#ä%‘'>%‘%‘#ä(&g(&Ò&Ò&Ò%%%%$O$O$º$º$º$º#ä#ä"7%‘$…"Ø"Ø"Ø#®#®$…$…%¡%¡%¡'N(%(%(û'N((&ã&ã(%(%'N'N(Æ'%l'(Æ''ï'ï([([&®***)1)1*€*€&P'ý)?*ì*ì'’&…)ß*¶) &ñ(ž)t)t(2(2'\) )t+!'Ç'Ç'Ç%å$¤&Q&Q$¤%Ë%Ë&¡(N'x'x)û)û'ã+=+=,ê,*f,ê+=*f*f+=,ê-U+¨+¨+¨.Ì-+r+r-+r*œ*œ-ö/£2&0y0y0y2ý1P1ñ1ñ2Ç4t5K5K6!6!5ì7™6Â56W6W2&2&7Î6!6!6!4t6!5K5K6Ð5#5ù5ù6Ð5#5ù5ù3«5X75X7775X4L2Ÿ.o,Â+++Þ+Þ-‹+Þ+'®&&(„*1,J*+s.Í/‰/‰-Ü160_2 2ã161616.²-,š,š/ô1¡0ó2 3v5#2 4M2 2 1É1É0.o-™0ó000ˆ.Û+)Ô'P%£&z('&z&z%£(ý'»&%8(’(„(„'®&%*%*&$T#}!Ð$T$T$T&$T$T#}#}"§&"§ ú#}!Ð!›!›$$$"q$%Ë!ë#˜$o$o$"W"W$"W$$"W$Ú#-!€#-"Ý!0!0"Ý#H$õî!›#!e$¿$¿ ""Â!‘ > > >ÓÓý ª!ë‘hhýý&Óýý!€!€"! t !¶ ß ß â â #vv #"Ý!0 Y Y Ä!›!› œ œ"I"I 1 1!"´"I œ œ"I"I"I œ"I# # # !s#ö%£$Í# $—$—#Á""ê"ê"ê"ê"½$j#“!æ"R#ÿ#ÿ"R#“#“$j"½"R#ÿ$Õ#($º$º# &g&Ò%%%%%%$"l#C!–$…$…'#®"z$'$'$'&ª*/â8C7l2e2e2e2Ñ2Ñ0M0M0ƒ0ƒ5Š5Š4H7¢=B†@9O53q6Ë6Ë53q3<10¸48®8®2Ñ(Ã(%3'¶'¶'¶'¶#†&à%ï'œ&Å%'0'0(Ý'0(¨(¨&$'Ñ&&&&'>(ë%‘'>'>%‘&g$º&Ò%%&Ò&Ò&Ò#x"¢%ü$º$º$º$º#ä#ä#ä#ä"Ø$…"Ø&2%[%[$…$…%¡%¡%¡'N&x)Ò(û'N(((%6(%(%(û(û(Æ'(Æ'(Æ''ï'ï&®&®([([([([)1)1*€*€)ª'ý*ì)?)?)?(2(2) *¶(ž&ñ'Ç'Ç(2(2'\) )t+!)t)t'Ç%z%å"‹%%%Ë'x%Ë)%'ã'ã'ã'ã)%*Ò*Ò,+¨+¨+¨-U,ê+=+=,ê-À*f,*f-‹-‹-‹-‹--,I-ö-ö-ö/£/£553h1»331†33334t4t6ø6ø86W86W6Â55ì4?8¥6ø6!6!6!6!6ø5K6Ð6Ð5#5#7;5Ž6d6d5Ã5Ã6š4í5X5X5X3«2Ÿ2Ÿ/E-˜,J,J- .Í/¤-÷-÷,J+'®)[)[*,J,J-÷/‰16.²2 0_0_162ã1616/‰,/.G.G1¡3N3 4¸3â3â4M4M2 0ó1É1É/F/F0ó/F01É0.o-™*?(ý'P'P'P'P'P&z&z%£%£%£%£'C'C&l('C#é$¿$¿%*%*#}%*$¿&l#$¿&"§"§'®&l!e#é#é#H#H"q$!0$Š' ' $ ª"W"W"Â"Â$o"Â$$ ª"W!€!€$$$"q!›!›"#³!0!0"§ ú"§"§¸#!e#"Ý!0"#³#Hîî!›"#³" Y!0ƒ!0"Ý !¶!¶!J!J t"!!€!€!€#-#-!€#-!€"W"W"W ªh"Â"Â! t"!!J!J"! t >!ë"Âh > > >!ë >‘!!!€Ó!€Ó >‘h!ÓÓýý!J"! t!J!e!eâ  ¸!e!e Y Yƒƒî!›!ZZ! 1!Þ 1!Þ!ZZ! œ œ œ"I!Þ#‹$a!$Í&z$Í# #Á#Á&D"ê!¨%$,$, ¥ ¥#(#(#ÿ#ÿ#ÿ"R#(#(%¬"R$j"½"½"½$O õ!Ë%%&g$º#ä%‘$"l$ð#C$…"Ø%[#®#¼%i%i%i'',ˆ3<4~4~3§1ú1$/w1$2Ñ1Y1Y0ƒ3Ý205Š:‘Bò=6`4³34³3333<4é4é6–9…7Ø0M&?$\& ((& & "¯& &Å%&Å%&Z('0%ƒ&+–&(<(<&$â(<&Ò%%$O%ü'>%‘&g&g%ü%ü'©'©&Ò&Ò&Ò%%$º# "7#ä%%#x$O$O"l"l$"l#®#®$…'ß#ô%¡(%&x)g+(&ã)g+(&ã'º'º& 'º)1'„'„'„'„'„([(['ï'ï(Æ(Æ'„%×)1'„)ª)ª(Ó(Ó)ª'ý(Ó(Ó)ß(2(2+Œ)ß)ß)ß)ß)t)t+!'Ç(2)ß) ) &ñ%z$8$8%%)%'x'x'x)))))%*Ò*Ò,)û)û)û+¨,ê+=+=,ê,,*f,/8/8/8/8.Ì.Ì-ö,I-ö1P1P1P3h3h1»3h334à33332Ç6!5K5K86W6W86Â57™5ì6ø8¥7Î7Î7Î7Î8¥6ø6Ð6Ð6Ð6Ð7;5Ž6d6d5Ã5Ã8G6š7775X2Ÿ2Ÿ-˜+ë**+s0z2þ1Q1Q/¤,µ)[++*,J,J*-Ü/‰.²2 0_0_162ã2ã/‰/‰/‰/ô/ô1¡3N1^6e3â3â4M4M4M2 1É1É0ó0ó/F0ó1É00.o+ì+ì(ý'P(ý(ý*ª'P&z&z'P'P%£%£%–%–$¿&l%–%–##%*%*#}%*#$¿$¿&l&"§$T&#!e#é#é#H#H"q$"Ý&7%`%`$ ª$$$o$o$o"Â$$"W$#-#-"W"W"q$#Hî Y""Ý"Ý"§ ú"§"§##$¿#!0"Ý#³"!›!›!›#H Y""#³"Ý!0"Ý$Š!¶\!¶!¶!J!J"! t!€!€!€#-#-!€!€#-"W"W"W ª!!h! t"!"÷ tÇ!ë#˜!! > > >‘‘ >!!Ó!€!€Ó >‘»h&& ª ª!J t"!!J"÷!J!J!e!e "< ¸¸¸¬"!0!0 Ä Ä!›îZ­Z!!Þ#‹!Þ#‹Z!$a"´ œ œ œ"I#‹!Þ"´"´# $Í# !s#Á#Á"ê"ê#U#U$,$,"R"R#(#(#ÿ#ÿ"R#ÿ$Õ$Õ"R"R$j"½"½"½$O$O#x#x$º# "7#ä$"l$ð#C!+"Ø"#®%i#¼%i%i%Ô%Ô).,ˆ2Ñ6+5T3§2Ñ1$1$/w-ÿ-ÿ.Ö2020208äAE;g4³34³4³3333<4é8C9ð7Ø/w+F'ì& $\%3%3& & '¶'¶&Å%&Å%(&Z%ƒ'0&(<&(<(<&&&%%&Ò'©%ü%‘'>&g&g'©'©%ü%ü((%%&Ò$º# "7#ä%%#x"¢"¢$$"l$%[%["Ø&2%¡#ô(%)Ò)g+*=()g+*=('º'º& $`'„)1)1)1'„'„([(['ï'ï(Æ(Æ)1'„*Þ)1+W'ý'&*€+W)ª*€'&+Œ)ß(2+Œ)ß)ß)ß)ß'Ç'Ç&&(2&…'\'\&ñ"÷#b&¼%&¼'x%Ë$ô(N' *f)))û(N+¨+¨*Ò,+¨+¨,,,ê,ê,ê+=.—,ê0.a.a.a.Ì0y/£-ö-2&2ý2ý3h3h4?4?334à5¶5¶2Ç6!6ø6ø86W7-8Ú8o6Â8o6Â8¥:R7Î7Î9{7Î7Î7Î5#6Ð8}8}5Ž5Ž5Ž5Ž7p7p6š4í6/7Ü5X5X2Ÿ0ò.o,Â**- 0z2'3Ô6X/¤-‹*1)[)[+s- - - .²0_/‰2ã2 2 42ã2ã2ã0_.²2x2x2x4%1^4¸3â3â4M5ú4M0ó2 2 1É.o.o00ó0ó0.o,Â.o,W(ý)Ô('('(''P%£#ö'P%£#ö&l&l%–%–#é%–#é#é%*%*$T$T$¿$¿#é"<%*#}$T"§#é%–%–"<$$$$$Š$Š"Ý$Š$"W$$#˜#˜#˜#˜#-#- ª"W#-#-$$"q"q!›î"""#³$T"§!Ð#}$¿$¿#!e Y" Y"#H#H"q"q#³ Y!0!0!0!0"Ý"Ý ß2"Œ ß"÷"÷ t tÓÓ#-#-!€Ó!€!€!€!€"W"W!!"Â! t"! t t"! t!J!"Â!ë!ë!ë!ë >‘!!hh&Ó ªý»h >‘ýýÓÓÇÇ t t t#Î t t!e!e¸ ââ ¸ Y"" Y"q Ä Ä Ä­Z!Z!!Z!­!!Þ#‹#ö#ö"I"I%8%8!Þ#‹"I"I"I#ö"#Á""$,$,%Ù$,$Õ!{#ÿ#ÿ"R ¥!{#("R#ÿ#ÿ ¥!æ#“#“#“#x%%#x#x"7#ä%‘#ä$$$ð$ð''%[%[#¼#¼#¼#¼$'$'$''-Ê2Ñ75T4~2Ñ1$/w0ƒ.Ö1Y1Y1Y4³9º@n<>5Š33200ƒ202047l8C4é/w(Ã&?&?& & & & '¶'¶'¶& %ï'œ%%'0'0(Ý(Ý)'f'f$ %¹%¹&&%ü%ü$O%ü%‘'>&g&g%%&Ò%%%%'©%ü$O%ü%‘#ä$º$º#x#x#x#x%Æ%Æ"l$$…"Ø"Ø$…%¡'N)Ò)Ò)g)g*=+ê*=((('º'º&ã*='„)1([([([&®)1)1'ï'ï'ï'ï)1'„([([(Ó(Ó)ª)ª)ª)ª(Ó'&) '\(2)ß) ) )ß&…&ñ(ž'Ç'Ç'\%¯) '\)t!J&¼&¼#b%%Ë'x&¡&¡' *f'ã'ã)û(N)û)û)%*Ò+¨+¨*f*f+=.—.—,ê,ê.—0.a+.a0y2&/£1P2&3Ó2ý2ý6Â6Â5ì5ì4à67c7c6!6!6ø6ø9±88Ú7-:8o8o:8¥:R9{9{;(9{7Î7Î6Ð5#8}8}7;7;7;7;5Ã5Ã4í6š6/4‚5X5X2Ÿ0ò,Â+'C*+s.Í2'3Ô4«1Q-‹-‹,µ,µ- .Í.Í.Í0_2 443¹3¹6=42ã2ã2 0_2x2x0Ë2x4¸4¸3â3â4M5ú4M4M4M0ó1É1É01É2 /F0.o,Â.o*ª*ª(')Ô&z&z%£#ö'P'P%£'P&l&l'C'C'C%–#é#é&×#}$T$T&l&l%–#é%*#}$T"§%–#é%–"<$$$$$Š$Š$Š"Ý$"W$$#˜#˜#˜#˜#-#- ª"W#-#-$$"q"q!›î""#³%`$T"§!Ð#}###$¿%`#³"#³$õ$õ"q"q#³#³!0!0!0!0!0$Š2 ß"Œ ß!J!J t tÓÓ!€!€#-!€!€!€!€!€"W"W!!h!Ç t t t#Î"!"÷!J"Â!‘!ë!ë!ë >!ë!!hh!€Ó ªýh! >‘ýý&!€"!Ç t tÇ"! t t¸¸!e¸ââ ¸ Y"" Y Äj Ä!ZZ!!!!"´Z"´ 1!Þ"I"I œ#ö#‹#‹!Þ#‹#ö#ö"I#ö"#Á#Á#Á""$,"!{!{"R%¬#ÿ"R#($Õ"R#ÿ"R"R!æ#“#“#“!Ë#x#x#x"7#ä"7#ä"l%Æ$ð$ð''#®#®#¼ b#¼#¼$'$'$''',1ú3§6+4~2Ñ1$200ƒ331Y4³8 >Á:‘3Ý33203Ý7777994é.5(Ã%i&?&?& & & & & & '¶& $B%ï&Å&Å'0'0%ƒ(Ý)$ 'f'f%¹%¹(<$â'©'©$O%ü%‘'>$º(%%&Ò&Ò&Ò'©%ü$O%ü#ä%‘# # &Ò&Ò%%%%'s's$"l"Ø$…$…&2'N(û(%(%+'º&ã(*=(*=*='º'º*=*=%×'„&®&®([**Þ'„&B&B'ï'ï'„)1([([(Ó(Ó)ª)ª'ý'ý'&(Ó) '\+Œ)ß) ) )ß)ß+ø*K)t)t%¯'\'\) )t!Ú$È$È%Ÿ'L'œ%ï%&Æ'œ)I&Æ(s)ê(=))))-D+—*p-Ê-Ê-Ê,‰.6-_+².6.6-_/ 0N0N2Ñ4~75i3¼3¼5Ô5Ô8X8X6à536à536à87·9d777ì6?779™9™:¦:¦8ù8ù9Ï9Ï:¦8ù8J8J9÷8J4ð67t7t6h6h6h6h6Ó5&4O5ü2m2m/é,(„(„+Þ/80å4?5ì2’0°0°/Ù,.˜0E1ò0E01¼3i556Ã5ì4?6"2È1ò0E2]2]1†1†335œ7I4Æ4Æ3ï2B4Z4Z1×3„11111/n-Á/n.,*Ò*Ò*Ò'®&&&(ð'C'C%–%ª%ª%ª%ª#&$Ó$Ó&€&¶% % #\%t'!%t'!&f&f%%#w#w%ú" $"k#A#A$ƒ$ƒ&0"Ö#„%1%1%1#$Æ"B#ï#$Æ#!l#!l"B"B!l!l!l#"B#ï#¿"x"x"x$%#º" " #º$€$€#©#©$€"Ó!ü!ü![#"2"2"2 …![#"í"í""!@"í!@!@!@“!@!@!¬#Y!¬!¬"ª ý!Ô!Ô ý ý ý ý!žñ!ž!ž!ž!ž#K!ž"" !¹" ã!¹ B B¾k ­ ­ \¯¯¯†Ù¯ \ ’ ’¼¼ 'z ý ýè B#œ!ï ­ !¹!¹!¹"$"$ w w \ \!3† È$" È"uñ!ž!ž#K"à!3#¶#¶"û!N"$#Ñ"$"$"û"û"Å$r!ï#œ#œ#œ$r"Å#|#| "#|###ç#ç"¥"¥!Ï#|#$¾$¾$¾#Ì%y$£"ö#a#a#a#a#a#a"‹$8$8$8%å%å$°##Ú%‡&È%#n&È&“&“,p/Ê3$4Ñ5¨3û1­01­1­1­1­6´?;P2ï2ï2ï1­56´8a7ö4œ-( +( +&]&]$°&]&]( +( +%ò%ò%ò%ò&þ&þ'Õ${&(&(&('Õ( +$°%‡'4%ò'Ÿ%ò%ò&È&È(u%$°&]&]&]&(&('Õ)‚(«&þ%Q%Q%l%l%l%l%l''(Æ&B&B%l#¿$*$*$*%×&L'ù*}*}*}(Ð&L)¦++)q)q&'Ä)q'Ä$Õ&‚'Y%¬))(/(/&L'ù'ù&L'ù'ù'#(Ð)))Ü)Ü(š&í)q)q)))Ü(/(/(/))););););'ù&L&L)¦)Ü&á$È$È'L%Ÿ'œ%ï%* 'œ%ï+Í* +—)ê))))+—-D,,,,.6/ã-_+²,‰,‰+²-_0N0N2Ñ4~75i5i5i5Ô9.? Bf;ç6à6à536à537·9d8Ã8Ã6?4’8Ã8Ã9™9™:¦:¦7>8€6Ó4O4O64ð0À-f+Þ*1,µ05ì7™8p6Ã5·0°/2]-Á/n1/n/80å3i56Ã1¼4?5ì6"4u5L5L4à4à33335œ5œ4Æ4Æ7I7I4Æ31×0*0*1×/S12­11ò0E.˜.˜-V+©,*Ò(„(„&×(„&l$¿%–(ð)'W#ý%ª&€$Ó#ý'W%ß%ß%ß%ß%t%t%t#Ç# $¹%#â%$%$#w%$$î#A"k%Å%Y%Y$ƒ$ƒ#„#„$[$["B"B"B"B"B%œ%œ#ï$Æ#$Æ#"B"B###!l"B#ï#O#O"x Ë$&=%g#º$€"Ó!&!&!&y"Ó"Ó![#![!["2"2![#"""í"í!@“!@!@ j"" j Õ"‚!¬!¬!Ô!Ô ý"ª!Ô!Ô!Ô!Ô"u"u"u$" È"u#K!ž !¹!¹!¹#f "Å"Åk"ÅÖÖ \ \" \††ÙÙå ’åå ' ' ý"ª#œ B!kÖÖ"Z ­6 ã!¹ w"$ w"$" \†!3 È È È È"u"u"u"u" \!3"à"û$¨#Ñ"$#Ñ#Ñ#Ñ"$#œ#œ#œ#œ!"Å!$r$R$R#|#|$¾$¾#ç%”#|#|!Ï#|#ç#ç&k#"""#Ì"‹$8$8$8%#a#a#a$8"‹#a#a"-#Ú!V$°$E"˜#n#n%¼%¼#9$æ),p./Ê.S1­5Ý5Ý5Ý5Ý:ä?ë<&8Ì4œ4œ2ƒ/),¦)L4œ-è%‡#Ú%‡%‡%‡%‡#Ú%‡#Ú%‡%&È%%&('Õ${${&þ&þ${&(%‡'4( +)·'Ÿ'Ÿ&È%'Ÿ'Ÿ'Ÿ'Ÿ'4'4'4'4&('Õ'Õ&(&þ&þ'Õ'Õ'%l'(Æ''%l'%l%l%l#¿$*$*%×'„'ù'ù(Ð*})¦)¦(Ð(Ð)q'Ä'Ä'Ä'Ä)q*G*G(/&‚(/(/)'Y&‚&‚'#(Ð&L)¦'#(Ð(Ð(Ð)*³(/(/'Ä'Ä'Ä)q)))Ü)Ü)Ü)Ü*³)'Ž'Ž%á);(Ð(Ð)¦&L'Y& +%Ÿ'L&u$È&Æ&Æ&Æ(s'œ'œ(s+Í*Á*Á),n+—+—)ê-D-Ê-Ê,-Ê.6/ã.6.6,‰,‰/ / 1$1$4~6+7ì6?5i5i79.=_=_;ç::888::;<¾78Ã9™9™8Ã:p7ì7ì8ù:¦:¦8ù:¦:¦:¦:¦9!7t5Ç7t5Ç5Ç7t7t7>3ä5‘5‘6Ó5&5ü5ü64ð40À/8-‹.b1¼5ì7™6Ã54 +2]2]2]/n112È0å2’3i56Ã57™5ì4u6"6ù6ù6633335œ5œ4Æ4Æ5œ5œ4Æ31×3„513„2­11/S.˜,ë.˜.˜-V+©,*Ò(„(„%*&×&l('C'C'W%ª%ª'W&€$Ó'W'W$2$2'Œ'Œ%t%t'!%t&f$¹#â%%$%$!Ê#w#A$î$$%Y%Y&0"Ö#„#„"®"®#ï#ï"B"B#ï#ï"B#ï$Æ&s$Æ#"B"B###!l"B#ï#O#O$%"x!6"ã" #º"Ó$€"Ó"Ó"Ó!&$€$€#![![$µ#ß#ß![##Ä#Ä"í"í"í!@"í"í j"½ j Õ"‚!¬!¬!Ô!Ô"ª ý!Ô!Ô '#"u"u È"u"u È!žñ !¹#f !!kkÖÖ ­ ­¯¯" \††††å ’ååz!Ô ýP B Bk!ÖÖ ­"Z ã"!¹ w"$"$ w \" !3†"u"u"u"u"u"u"u \" !3"à"û$¨ w"$"$"$ w"$#œ B#œ#œ"Å$r!!"¥"¥#|#|$¾$¾#ç":#|#|%)&Ö%”%”##%y" r" Þ"‹$8$8%#a%%$8"‹#a#a#Ú%‡$°$°"˜$E%!Á"b%¼#9!Œ$$'i)'Ÿ*ù0Ö0Ö/)2ƒ7Š<‘:y3Å1B-è*"&È%ò%ò%‡%‡%‡#Ú%‡%‡#Ú#Ú%‡'4'4%‡&È%&È&È&('Õ"Î&(&þ&þ&('Õ(á'4&]( +'Ÿ'Ÿ&È%'Ÿ'Ÿ'Ÿ'Ÿ'4'4'4'4&('Õ'Õ&(#¤&þ'Õ'Õ'(Æ(Æ'%l%l'(Æ%l%l(Æ'%×%×%×'„)¦&L'#(Ð)¦)¦(Ð(Ð&'Ä'Ä'Ä'Ä)q*G*G)Ü(/(/(/)'Y&‚)Ü'#(Ð'ù'ù%v'#(Ð(Ð'Y)(/(/++)q'Ä))(/(/(/(/'Y)););*è'Ž(Ð(Ð'ù'ù)&á&u&u("&u'1'1()µ)µ)µ(+b*Á*Á+—-D,,,,,1$/w1$-Ê/w/w/w/w-Ê0N1û2f0¹6—6—9™9™7ì7ì8Ã:p;F9™8"9Ï8ù8ù9d;?A;ç8X8X::79.8X8X8"8":¦:¦;;::88J8J7t5Ç4ð67t:Î86h7>7>7>5‘4»6h6262622Ø.Í0z0z0z4«6X6X6X5·4 +4 +2]334à2]4 +2þ2þ2'3Ô53Ô4«4«5·7d4à67Ï6"5L3Ÿ4Z651512B3ï4Æ4Æ1×3„513„1×.}.}0*.,,.,.,,ë+>+>)‘'®)[(„&×%*&×&×&×(™&ì&ì&ì&ì%?'Â&% % &¶&¶% % #\% %$%$$M$M# # #â#â$ƒ&0!ÿ#¬$$"k ¾##"B"B$[$[#„%1$Æ####„!×$[&##"B"B#ï#ï"B#ï"x"x#O!¢"x$% Ë"x"Ó$€!ü#©#>#>$$![![![#" ð""$/"‚ Õ Õ Õ Õ"‚"‚"í!@!@!@!@!@!@!@#!Ô"ª ý"ª"ª ' 'ññ È È È Èññ!N!N"$"$" ã ­ ­ÖÖÖÖññDñÙ†¯¯z ' ý"ªPP ýP!ï!ï!ï!ï"Åk• B_!¹ ã ã"$"$"$#Ñ$""u!žñ È"u"u È È È"u"u$"$""u"u!¹!¹" ã"$ w!N"û#œ!ï$r$r$r$r$r!":":##!d##ç#ç#ç#ç#ç#ç$R"¥#|#|$£"ö"#Ì#a#a#a#a$£"ö#Ì#Ì&P"ö"ö"ö$°$°$°$°!V$°#Ú#Ú"Î${#¤#¤!Œ#9#9$æ&]( +)·( +( +-0k8Ì6I-è+d( +&]$°&]&]#Ú%‡&]&]$°$°%‡%‡&]&]( +&]&]$°'4'4${${#¤&þ&(&(&(&((u&È%ò)L&È(u'Ÿ'Ÿ( +&]'4(á'Ÿ%ò(u&È$æ&“%¼$&('Õ(«&þ'(Æ'(Æ&B&B&B'ï#¿#¿$•$•%×%×%×'„'ù'ù'ù)¦)¦)¦'#'#(š&í&'Ä'Y). . *³'Y&‚$Õ(/(/))%á'Ž(e(e&L)¦+S)¦&í&í&'Ä*G*G+'Ä)q)q)q'Ä(š(š'Ä)q););(e(e'Ž);(e(e(/%4&u#$È&u'1'1)µ()µ)µ)µ)µ*Á*Á)ê+—,,,,/w1$1$2Ñ1$/w/w/w/w1$0N1û2f46—6—7ì;F7ì7ì78Ã7ì9™9Ï8"8ù8ù9d;=”=”::::9.78X8X9Ï9Ï:¦:¦;;;ç::9÷9÷7t5Ç68J7t7t89Â8ë8ë7>5‘86h9Œ9Œ7ß7ß3Ô2'0z3Ô4«6X6X6X7d5·4 +2]334à4 +5·2þ2þ2'3Ô57.6X6X5·7d8:64u6"3Ÿ5L4Z2­3„3„3ï2B333„513„1×1×.},Ð.}.,,,,+>)‘)‘'ä)['®&×(„%*&×&×&×%?&ì(™(™&ì%?$h&(c(c&¶#\#\&¶% &¶#w#w$M$M# # %%$ƒ&0%Y#¬$$%Å$##"B"B$[$[#„%1$Æ####„!×$[&##"B"B"B"B"B#ï"x"x#O!¢"x$%$%!&"Ó!ü O#>#>"g"g![![#$µ ðC ð ð"‚ Õ Õ Õ Õ Õ"‚(!@"í"í"í!@!@!@!@#!Ô ý"ª"ªP ' 'ññ È È È È!žD!N!N"$"$6 ã!¹!¹ ­ ­ÖÖÖÖDDDñ†!3 \ \ 'z ý"ª ý ý ý"ª!ï!ï B B!! B!ï ""#Ñ wÊ w"u ÈDñ È"u"u È"u"u"u"u"u"u"u"u!¹!¹" ã"$#Ñ!N"û!ï#œ"Å"Å"Å"Å$r$r":":#&k$¾##ç#ç#ç#ç#ç#ç$R"¥#|#|$£"ö"#Ì#a#a#a#a"ö$£#Ì#Ì&P&P$£$£$°$°#&]$°$°#Ú#Ú${"Î%Q%Q#9$æ#9$æ&]$°#$°&]( +.¾71B(á$°$°$°&]&]&]%‡#Ú&]&]&]&]%‡%‡#&]&]$°&]( +'4'4&(&(%Q%Q&(&(&(&((u&È$E'Ÿ&È(u)L%ò$°&]%‡'4%ò'Ÿ(u&È$æ&“'i%¼&('Õ(«&þ(Æ''(Æ'ï$•'ï&B#¿'&B&B%×%×%×'„'ù'ù)¦'ù)¦)¦(Ð(Ð(š&í'Ä)q'Y)/º/º))&‚(/(/(/'Y'Y'Ž);(e(e&L)¦'ù)¦(š%@&'Ä(š(š)q)q'Ä'Ä'Ä)q*G*G'Ä)q););(e(e%á'Ž(e(e(/& +%Ÿ#ò$È("'1'1()µ(Þ*‹)µ)µ,n*Á*Á*Á.†,Ù,Ù.†.¡.¡1$/w0N.¡0N0N0N0N1$2Ñ2f44ê6—6?7ì9™6?7ì6?9™9™9Ï9Ï7L7L;9d;ç;ç:Û:Û:8X8X:9.9.8ù:¦8ù8ù;;;ç::9÷8J5Ç5Ç9!7t664»8888ë5‘5‘7>9Œ9Œ9Œ9Œ7.53Ô3Ô4«6X6X6X7d4 +2]2]2]4 +4à4à2þ4«6X6X557.8Û7d7d7d7d4u4u3Ÿ3Ÿ2­4Z1×3„3ï2B3ï3ï3„3„1×1×0*.}-¦-¦/Ù/Ù.,,+>+>)‘'ä&×(„&×&×&×&×&&&ì&ì&ì(™&&&&&¶(c%ß%ß$2%ß% &¶#w#w%$%$$¹$¹%%%Y#¬$ƒ$ƒ$"k$î$î"B"B#$Æ"®&#„%1#ï#ï###„#„%1#„#$Æ#ï#ï#ï"B!l#"x"x#O#O!¢$ü$%"x!ü!ü"Ó!&!‘!‘!‘#>#ß"2###s!Æ ð ð Õ Õ"‚$/"‚ Õ!¬ÿ!@"í"""""í!@ ý ý '!Ô ý ý ý ýD!žñ!ž"uññ"û!N!Nô #f!¹!¹ ­ ­ ­ÖÖÖÖnDñ¯!3!3 ' ' ý ý ý ý"ª"ªk! B!ï"Å"Å B!ï" ã" ã"û!N w w È È È È È"u#K#K#K#K!ž!ž#K$ø È"u$= ã ã ã w"$!N"û!!!ï#œ"Å"Å$r$r###ç#ç$¾# ":##":":!Ï!Ï#|#|#Ì r!I!I!´#a$8%å$£"ö"ö$£#Ì#Ì!I"ö###Ú%‡%‡"-##${${%Q#¤!Œ#9$%¼&]$°#$°%‡'4,;6I0k( +#Ú#Ú#Ú'4%‡'4%‡%‡%‡#Ú%‡%‡%‡%‡$°&]%‡%‡'4(á&]( +%Q%Q&(&(%Q(«'Õ${&È(u%ò'Ÿ'Ÿ'Ÿ(u&È&]$°$°&]%ò%ò&È&È%¼%¼&“$æ${'Õ'Õ'Õ'''ï'ï&B$•%l''%l'%l%([&®&®(Ð*}'#(Ð(Ð(Ð*}*}+'Ä'Ä'Ä&‚&‚)Ü)Ü(/&‚(/)Ü)Ü&‚&‚(/(e*);'Ž'ù'ù'#(Ð&&*G*G)q)q+'Ä(š(š)q)q(š&í'Ä)q(e(e(e(e););););'Y& +'L%Ÿ&u&u'1'1()µ*‹(Þ)µ)µ*Á,n...†,Ù,Ù.†.¡.¡1$/w0N1û0N0N1û1û2Ñ4~2f44ê6—9™7ì7ì7ì9™7ì;F;F;|8"8ù8ù9d7·:::::Û:Û;²:;²::Û:Û7>7>8ë9Œ9Œ9Œ9Œ:ˆ8Û554«6X6X6X5·5·4 +4 +4 +5·662þ4«887.7.7.8Û7d7d7d7d6"6"5L1ò2­4Z513„3ï2B3ï3ï1×1×0*0*0*.}-¦-¦.,.,.,,)‘)‘)‘'ä&×(„&×&×&×&×&&&ì&ì&ì(™)o)o&&% &¶%ß%ß$2%ß#\% #w#w%$%$$¹$¹#â#â#¬%Y$ƒ$ƒ%Å$$î$î#ï#ï#$Æ&"®#„%1%œ%œ$Æ$Æ#„#„%1#„#$Æ"B"B%œ#ï#!l"x"x!¢!¢!¢$ü$%"x O O!&"Ó#>ä$ë#>#ß"2##!Æ#s""$/ Õ"‚$/"‚ Õ!¬ÿ"í!@"""""í!@PP '!Ô ý ý ý ýD!ž!žñ"u"u#Kñ¡!N!N!N ­"Z"ZÖÖÖÖ ÈDñ \" !3!3!Ô!ÔPP"ª"ª"ª"ª!"Å!ï#œ"Åk B!ï ã"" ã!N"û"$"$ È È"u"u$""u!ž!ž#Kññ#K#K$ø"u È"""6 wÊ!N"û$r!#œ!ï!!"Å"Å$¾!d":":$¾#%”#ç$¾!d#ç#ç!Ï%)%)%)""!I!I#a!´"‹$8$£"ö"ö$£#Ì#Ì$£&P#&]'4%‡%‡%‡##"Î"Î#¤%Q#9!Œ$%¼&]$°#$°%‡#Ú,;2ï0k( +#Ú#Ú#Ú#Ú#Ú%‡%‡%‡%‡'4%‡%‡%‡%‡&]( +%‡%‡'4%‡$°&]%Q%Q${${%Q(«'Õ'Õ&È(u%ò'Ÿ'Ÿ'Ÿ(u&È( +)·( +&]%ò%ò&È&È%¼%¼&“$æ&()‚'Õ'Õ''&B&B)œ$•*s%l%l#¿%l'&®&®([([,**}'#(Ð(Ð(Ð%v(Ð)q)q'Ä'Ä)Ü)Ü&‚&‚(/&‚&‚(/(/(/(/)Ü&¸% $4%á)¦)¦*}(Ð)q)q(š(š++)q&&í*G'Ä'Ä(š&í'Ä)q&¸&¸(e(e*è*è););%¬'·& +$]%4&á'1'1(Þ(Þ* * *ö*ö+b)µ-å,8.P,£-z/'.Ö0ƒ1Z/­0ï0ï1Å1Å3=3=442Ñ7Ø6+7Ø9d9d::::::8;;9™7ì8Ã8Ã8Ã8Ã<<9™9™9™9™;F;F9™;F:p:p9™9™9™9™:p:p:Î<{;¤8J8J8J9!5Ç4O7©8€8€7©7©8€8€8ë8ë8ë8ë6ù8¦4u6"7Ï9|5L5L2È4u6ù6ù667d97™7™6Ã8p86X:ˆ:ˆ8¦8¦:S8¦97d63351513„3„34Æ3ï0•0•0•2B0•/S1-¦-¦/8/8,µ,µ++,µ)[(((&l&&&×&×(™&ì'Â'Â(-)Ú'W'W#ý%ª(-(-&&$h&$M$M$M$M%ú$M" " !ÿ!ÿ&0"Ö"Ö$ƒ#¬#¬!$[%1#„##$Æ$Æ$["®&"®$Æ##ï#ï%Ò%Ò#O!¢$%"x"x Ë"ã$!6!6!¢$ü$ü!¢$J"$J$J"2 …"2 …#>#>!‘!‘!ü#© O!ü!¬#Y#Y#Y"í!@" j"‚"‚ Õ"‚“"í"í!@!žñ È"u" #¶ \" !Ô!Ô!Ô!Ô#ì"?!i¼!N!N w wô¡ wÊ w"$ w wô!N w w¼¼¼¼ ’ ’ ’"?"u"uññ"u È È¡"û"$ w66!¹ !ï#œ#œ•• B!"Å"?"?¼##!Ô!Ô#!ž!ž$""u"u È!ž#K#0$Ý$"ZÖ!ƒ"Z ­$¨"û#Ñ"$!N!N"$#Ñ#±""Û"Û#±#±"Û$ˆ#F!™ Ã"p!.$ˆ#±%^!ê%D#—#—%D#—#—%D$Ø$Ø#+#+$$$Ø$Ø$°$°&]$°$E$E%%!÷%Q${"Î"Î!!${${%‡%‡#Ú#Ú&]&],;2ï-&]$°$°%ò%ò&È%%Q&þ%Q%Q%¼%¼&“$æ#9&“&“$æ(«%Q&(&(%ò%ò$E"˜#n&È%ò'Ÿ%ò)L&È&È&È(u)L'Ÿ%Q&þ'Õ'Õ)'i'i%¼%‡#Ú'4'4&È&È&È&È&x&x&x(%'N%¡)Ò&x%6#‰$`& %6&ã'º'º+)q&)q'Ä)q'Ä)q(š(š&í(š&í*G*G&í(š(š(š(š'Y%¬'Y)'Y%¬&‚(/'Ä)q'Ä'Ä(/(/))&í(š(š(š'ù'ù(Ð(Ð(e(e%á);)))'Y*³))Ü(/(š)d'·& +&á(Ž'1*‹*‹*‹* * ,£/ý+b-,8*‹,£.P-z/'-).Ö/­1Z0ï0ï03r4ê4ê446+7Ø6+7Ø9d9d888::;;9™7ì8Ã8Ã:p:p<<;F;F9™9™;F;F9™;F<<;F;F;F;F<<:Î<{9÷9÷9÷9÷:Î7t5ü9V;Ú;Ú;7©8€8€8ë8ë:˜:˜8¦6ù6"4u6"4u6ù6ù4u2È5L5L8:8:5·7d7™7™8p6Ã89²8Û8Û:S:S:S8¦:¾966515151514Æ32B2B.è.è0•2B/S1/S/S-‹-‹.b+.b.b,µ)[((()Æ'®'®&×&×(™&ì&&(-&€'W'W'W%ª&€&€$h$h$h&%ú" " %ú%ú$M$M$M!ÿ!ÿ"Ö"Ö$ƒ"Ö#¬#¬"®"®%1#„####$["®"®"®$Æ##ï#ï"x"x#O!¢"x$%$%"x!6"ã$$#O#O!¢!¢"$J$J ð"2#ß"2 …!‘!‘#>#> O!ü!ü#©#Y!¬!¬!¬!@"í j"("‚"‚ Õ“"í"í!@!žñ È"u" #¶¯ \!Ô!Ô!Ô!Ô"? ’!i¼¡¡Ê"$!N¡"$ w w"$ w w!N!N w w¼¼¼¼ ’ ’å ’ È Èññ"u È"u È!Nô w"$""#f_ B!ï!ï B B!ï"Å!#ì#ì!i!i#!Ô#!Ôñ#K$""u"u È!ž#K#0!ƒ"Z$!ƒ#0 ­"Z$¨"û"$#Ñ$¨!N"$#Ñ"#±"Û"Û#±#±!."Û#F!™"p$$ˆ$ˆ"#±#—#—#—#—#—%D%D&ñ$Ø$Ø&…#+$$#+#+$°$°$°&]$E$E%%#¤#¤"Î${"Î${${${"-%‡%‡%‡$°$°*Ž1B.¾( +$°$°$E$E%&È&þ%Q%Q%Q%¼%¼$æ&“$æ$æ&“$æ%Q%Q${${%ò%ò%ò$E&È&È%ò'Ÿ%ò%ò&È&È&È%)L'Ÿ%Q&þ&(&('i%¼$%¼'4%‡'4'4&È&È&È&È(%(%(%&x'N%¡&x&x&ã%6'º& &ã('º'º)q'Ä)q)q)q'Ä)q'Ä&í&í&í(š&í&í*G&í*G&í(š(š'Y%¬'Y%¬#ÿ%¬(/)Ü)q'Ä'Ä'Ä(/(/))&í(š(š(š$Ÿ'ù(Ð(Ð&¸&¸'Ž'Ž))'Y))'Y(/&‚(š \ No newline at end of file diff --git a/GUI/xephem/formats.c b/GUI/xephem/formats.c new file mode 100644 index 0000000..b52d515 --- /dev/null +++ b/GUI/xephem/formats.c @@ -0,0 +1,366 @@ +/* all the screen oriented printing should go through here. + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include "xephem.h" + + +/* suppress screen io if this is true, but always log stuff. + */ +static int f_scrnoff; +void +f_on () +{ + f_scrnoff = 0; +} + +void +f_off () +{ + f_scrnoff = 1; +} + +int +f_ison() +{ + return (!f_scrnoff); +} + +/* set the given widget's XmNlabelString to s if it's not already the same + * and we are indeed displaying stuff at the moment. + * if we don't update the value then mark it as insensitive for feedback. + */ +void +f_showit (w, s) +Widget w; +char *s; +{ + /* testing is faster than setting */ + if (XtIsSensitive(w) != !f_scrnoff) + XtSetSensitive (w, !f_scrnoff); + + if (!f_scrnoff) { + char *txtp; + + get_xmstring (w, XmNlabelString, &txtp); + if (strcmp (txtp, s)) + set_xmstring (w, XmNlabelString, s); + XtFree (txtp); + } +} + +/* print the variable a in sexagesimal format to widget wid. + * see fs_sexa for full formatting details. + */ +void +f_sexa (wid, a, w, fracbase) +Widget wid; +double a; +int w; +int fracbase; +{ + char out[64]; + + fs_sexa (out, a, w, fracbase); + field_log (wid, a, 1, out); + f_showit (wid, out); +} + +/* print ra, in radians, to widget w in hours according to the precision pref. + */ +void +f_ra (w, ra) +Widget w; +double ra; +{ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_sexa (w, radhr(ra), 2, 600); + else + f_sexa (w, radhr(ra), 2, 360000); +} + +/* print ra, in radians, into string out[] in hours according to precision pref. + */ +void +fs_ra (out, ra) +char out[]; +double ra; +{ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (out, radhr(ra), 2, 600); + else + fs_sexa (out, radhr(ra), 2, 360000); +} + +/* print dec, a, in rads, as degrees to widget w according to desired + * precision preference. + */ +void +f_prdec(w, a) +Widget w; +double a; +{ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_sexa (w, raddeg(a), 3, 60); + else + f_sexa (w, raddeg(a), 3, 36000); +} + +/* print dec, a, in rads, as degrees into string out[] according to desired + * precision preference. + */ +void +fs_prdec(out, a) +char out[]; +double a; +{ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (out, raddeg(a), 3, 60); + else + fs_sexa (out, raddeg(a), 3, 36000); +} + +/* print time, t, as hh:mm:ss */ +void +f_time (w, t) +Widget w; +double t; +{ + range (&t, 24.0); +#ifdef AVOID_24H + if (t >= 24.0 - 1./3600./2.) + t = 0; +#endif /* AVOID_24H */ + f_sexa (w, t, 2, 3600); +} + +/* print time, t, as hh:mm:ss */ +void +fs_time (out, t) +char out[]; +double t; +{ + range (&t, 24.0); +#ifdef AVOID_24H + if (t >= 24.0 - 1./3600./2.) + t = 0; +#endif /* AVOID_24H */ + fs_sexa (out, t, 2, 3600); +} + +/* print time, t, as hh:mm to widget w */ +void +f_mtime (w, t) +Widget w; +double t; +{ + range (&t, 24.0); +#ifdef AVOID_24H + if (t >= 24.0 - 1./60./2.) + t = 0; +#endif /* AVOID_24H */ + f_sexa (w, t, 2, 60); +} + +/* print time, t, as hh:mm into out[] */ +void +fs_mtime (out, t) +char out[]; +double t; +{ + range (&t, 24.0); +#ifdef AVOID_24H + if (t >= 24.0 - 1./60./2.) + t = 0; +#endif /* AVOID_24H */ + fs_sexa (out, t, 2, 60); +} + +/* print angle, a, in rads, as degrees to widget w in form ddd:mm */ +void +f_dm_angle(w, a) +Widget w; +double a; +{ + f_sexa (w, raddeg(a), 3, 60); +} + +/* print angle, a, in rads, as degrees into string out[] in form ddd:mm */ +void +fs_dm_angle(out, a) +char out[]; +double a; +{ + fs_sexa (out, raddeg(a), 3, 60); +} + + +/* print angle, a, in rads, as degrees to widget w according to desired + * precision preference. + */ +void +f_pangle(w, a) +Widget w; +double a; +{ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + f_sexa (w, raddeg(a), 3, 60); + else + f_sexa (w, raddeg(a), 3, 3600); +} + +/* print angle, a, in rads, as degrees into string out[] according to desired + * precision preference. + */ +void +fs_pangle(out, a) +char out[]; +double a; +{ + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (out, raddeg(a), 3, 60); + else + fs_sexa (out, raddeg(a), 3, 3600); +} + +/* print angle, a, in rads, as degrees to widget w in form dddd:mm:ss */ +void +f_dms_angle(w, a) +Widget w; +double a; +{ + f_sexa (w, raddeg(a), 4, 3600); +} + +/* print angle, a, in rads, as degrees into string out[] in form dddd:mm:ss */ +void +fs_dms_angle(out, a) +char out[]; +double a; +{ + fs_sexa (out, raddeg(a), 4, 3600); +} + +/* print the given modified Julian date, jd, in the preferred format. + */ +void +f_date (w, jd) +Widget w; +double jd; +{ + char out[32]; + double tmp; + + fs_date (out, pref_get(PREF_DATE_FORMAT), jd); + + /* shadow to the plot subsystem as years. */ + mjd_year (jd, &tmp); + field_log (w, tmp, 1, out); + f_showit (w, out); +} + +/* set w's XmNlabelString to s if it's not already the same and we are + * showing fields now. + * also, log the string if w is being used for logging now. + * N.B. do not use this for any widget that has its XmNuserData anything but + * the default (NULL) or a valid field id string; ie. use only for widgets + * that are buttons that can be "logged" for plotting etc. In all other cases + * use f_showit() directly. + */ +void +f_string (w, s) +Widget w; +char *s; +{ + field_log (w, 0.0, 0, s); + f_showit (w, s); +} + +void +f_double (w, fmt, f) +Widget w; +char *fmt; +double f; +{ + char str[80]; + (void) sprintf (str, fmt, f); + field_log (w, f, 1, str); + f_showit (w, str); +} + +/* fill buf() with given timezone name */ +void +fs_tz (buf, tzpref, np) +char buf[]; +int tzpref; /* PREF_UTCTZ or PREF_LOCALTZ */ +Now *np; +{ + if (tzpref == PREF_UTCTZ) + (void) strcpy(buf, "UTC"); + else if (tznm[0] == '\0') { + if (tz == 0) + (void) strcpy(buf, "UTC"); + else + (void) sprintf(buf, "UTC%c%g", tz<0?'+':'-', fabs(tz)); + } else + (void) strcpy (buf, tznm); +} + +/* fill buf[] with time stamp from np */ +void +fs_timestamp (np, stamp) +Now *np; +char stamp[]; +{ + double lmjd; + char d[32], t[32]; + char timezonename[32]; + int tzpref = pref_get (PREF_ZONE); + + lmjd = mjd; + if (tzpref == PREF_LOCALTZ) + lmjd -= tz/24.0; + + fs_date (d, pref_get(PREF_DATE_FORMAT), mjd_day(lmjd)); + fs_time (t, mjd_hr(lmjd)); + + fs_tz (timezonename, tzpref, np); + (void) sprintf (stamp, "%s %s %s", d, t, timezonename); +} + +/* set the XmNlabelString resource of the given widget to the date and time + * as given in the Now struct at *np. + * avoid redrawing the string if it has not changed but don't use f_showit() + * because we want the time to always be updated even during movie loops. + */ +void +timestamp (np, w) +Now *np; +Widget w; +{ + char stamp[64]; + char *txtp; + + fs_timestamp (np, stamp); + get_xmstring (w, XmNlabelString, &txtp); + if (strcmp (txtp, stamp)) { + set_xmstring (w, XmNlabelString, stamp); + /* just XSync here doesn't get the time updated regularly enough + * though this Update causes Sky View to get extra exposes before + * it makes it's first pixmap. + */ + XmUpdateDisplay (w); + } + XtFree (txtp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: formats.c,v $ $Date: 2006/04/10 09:00:06 $ $Revision: 1.4 $ $Name: $"}; diff --git a/GUI/xephem/fsmenu.c b/GUI/xephem/fsmenu.c new file mode 100644 index 0000000..67fa23a --- /dev/null +++ b/GUI/xephem/fsmenu.c @@ -0,0 +1,1116 @@ +/* handle setup of field star options */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define FOVLIM degrad(30.0) /* max fov we'll fetch */ + +static int objfd_cmp (const void *v1, const void *v2); +static int fs_nodbdups (ObjF *fop, int nfop, double ra, double dec, + double fov); +static int scanchk (Obj *mop, double dupsep, double dupmag, Obj *op, + double cdec); +static void fs_create_fsshell (void); +static int fs_save (void); +static void fs_setup (void); +static void apply_cb (Widget w, XtPointer client, XtPointer call); +static void ok_cb (Widget w, XtPointer client, XtPointer call); +static void gsctb_cb (Widget w, XtPointer client, XtPointer call); +static void pmtb_cb (Widget w, XtPointer client, XtPointer call); +static void cancel_cb (Widget w, XtPointer client, XtPointer call); +static void help_cb (Widget w, XtPointer client, XtPointer call); + +static Widget fsshell_w; /* the main shell */ +static Widget cdtf_w, cdtb_w; /* GSC CD-ROM text field and toggle button */ +static Widget gsc23tb_w; /* GSC 2.3 network toggle button */ +static Widget gsc23tf_w; /* GSC 2.3 network text field */ +static Widget chtf_w, chtb_w; /* GSC Cache text field and toggle button */ +static Widget notf_w, notb_w; /* USNO text field and toggle button */ +static Widget gsc22tb_w; /* GSC 2.2 toggle button */ +static Widget gsc22tf_w; /* GSC 2.2 text field */ +static Widget ppmtf_w, ppmtb_w; /* PMM text field and toggle button */ +static Widget tyctf_w, tyctb_w; /* Tycho text field and toggle button */ +static Widget ucactf_w,ucactb_w;/* UCAC text field and toggle button */ +static Widget nodupt_w; /* no dups toggle button */ +static Widget nodupsep_w; /* no dups sep TF */ +static Widget nodupmag_w; /* no dups mag TF */ + +/* GSC TB codes */ +typedef enum { + CDROMTB, CACHETB, NETTB, GSC22TB +} TB; + +static int cd_on; /* whether GSC CDROM is currently on */ +static char *cd_dn; /* GSC CDROM dir */ +static int ch_on; /* whether GSC Cache is currently on */ +static char *ch_dn; /* GSC Cache dir */ +static int gsc23_on; /* whether GSC network connection is on */ +static char *gsc23_host; /* GSC network host name */ +static int gsc22_on; /* whether GSC 2.2 STScI connection is on */ +static char *gsc22_dn; /* GSC22 directory */ +static int usno_on; /* whether USNO is currently on */ +static char *usno_fn; /* USNO filename */ +static int ppm_on; /* whether ppm is currently on */ +static char *ppm_fn; /* ppm filename */ +static int tyc_on; /* whether tycho is currently on */ +static char *tyc_fn; /* tycho filename */ +static int ucac_on; /* whether UCAC is currently on */ +static char *ucac_dir; /* UCAC dirname */ +static int nodup_on; /* whether dup checking is on */ + +static char fscategory[] = "Field stars"; + +/* call to set up without actually bringing up the menus. + */ +void +fs_create() +{ + if (!fsshell_w) { + fs_create_fsshell(); + (void) fs_save(); /* confirming here is just annoying */ + } +} + +void +fs_manage() +{ + fs_create(); + fs_setup(); + + XtPopup (fsshell_w, XtGrabNone); + set_something (fsshell_w, XmNiconic, (XtArgVal)False); +} + +/* set new state for nodups, return current state */ +int +fs_setnodups (int new) +{ + int old = nodup_on; + + XmToggleButtonSetState (nodupt_w, nodup_on = new, False); + return (old); +} + +/* call to fetch a set of ObjF from the field star sources. + * don't complain just if none are turned on at the moment. + * we may eliminate any that seem to be dups of existing FIXED db objects. + * we turn off any option that appears to not be working. + * each o_flag in each resulting star is marked with FLDSTAR. + * return -1 if something looks busted else count. + * N.B. we only malloc *opp if we return > 0. + */ +int +fs_fetch ( +Now *np, /* now */ +double ra, double dec, /* at np->n_epoch */ +double fov, /* field of view, rads */ +double mag, /* limiting mag */ +ObjF **opp) /* we set *opp to a malloced list of ObjF */ +{ + ObjF *op = NULL; + int nop = 0; + int s = 0; + char msg[256]; + int i, n; + + watch_cursor (1); + + /* clamp fov */ + if (fov > FOVLIM) + fov = FOVLIM; + + /* the fetch tools all want and return J2000 values */ + if (epoch == EOD) + ap_as (np, J2000, &ra, &dec); + else + precess (epoch, J2000, &ra, &dec); + + /* get the PM catalogs, if desired */ + if (ppm_on) { + n = xe2fetch (ppm_fn, np, ra, dec, fov, mag, &op, msg); + if (n < 0) { + xe_msg (1, "PPM: %s", msg); + ppm_on = 0; + fs_setup(); + } else + nop += n; + } + if (tyc_on) { + n = xe2fetch (tyc_fn, np, ra, dec, fov, mag, &op, msg); + if (n < 0) { + xe_msg (1, "Tycho: %s", msg); + tyc_on = 0; + fs_setup(); + } else + nop += n; + } + if (ucac_on) { + n = UCACFetch (ra, dec, fov, mag, &op, nop, msg); + if (n < 0) { + xe_msg (1, "UCAC: %s", msg); + ucac_on = 0; + fs_setup(); + } else + nop = n; + } + + /* now add the GSC 2.3, if desired -- enforce max fov */ + if (gsc23_on) { + n = gsc23fetch (gsc23_host, np, ra, dec, fov, mag, &op, nop, msg); + if (n < 0) { + xe_msg (1, "NET: %s", msg); + gsc23_on = 0; + fs_setup(); + } else + nop = n; + } + if (gsc22_on) { + n = xe3fetch (gsc22_dn, ra, dec, fov, mag, &op, nop, msg); + if (n < 0) { + xe_msg (1, "GSC 2.2: %s", msg); + gsc22_on = 0; + fs_setup(); + } else + nop = n; + } + if (cd_on || ch_on) { + n = GSCFetch (ra, dec, fov, mag, &op, nop, msg); + if (n < 0) { + xe_msg (1, "GSC: %s", msg); + cd_on = 0; + fs_setup(); + } else + nop = n; + } + + /* now add USNO if desired -- enforce max fov */ + if (usno_on) { + n = USNOFetch (ra, dec, fov, mag, &op, nop, msg); + if (n < 0) { + xe_msg (1, "USNO: %s", msg); + usno_on = 0; + fs_setup(); + } else + nop = n; + } + + /* set the s_fields to np */ + for (i = 0; i < nop; i++) + obj_cir (np, (Obj *)&op[i]); + + /* squeeze out stars which duplicate each other or the main database. + */ + if (nodup_on && nop > 0) { + int newnop = fs_nodbdups (op, nop, ra, dec, fov); + if (newnop < nop) { + /* shrink down to just newnop entries now */ + nop = newnop; + if (nop > 0) + op = (ObjF *) realloc ((void *)op, nop*sizeof(ObjF)); + else { + free ((void *)op); /* *all* are dups! */ + op = NULL; + nop = 0; + } + } + } else { + /* still set the FLDSTAR flag on all entries */ + for (i = 0; i < nop; i++) + ((Obj *)(&op[i]))->o_flags |= FLDSTAR; + } + + /* pass back the result, if there's something left */ + if (nop > 0) { + *opp = op; + s = nop; + } else if (nop < 0) { + fs_setup(); + s = -1; + } + + watch_cursor (0); + + return (s); +} + +/* return 1 if any proper motion catalog is on enabled, else 0 */ +int +fs_pmon() +{ + return (ppm_on || tyc_on || ucac_on); +} + +/* called to put up or remove the watch cursor. */ +void +fs_cursor (Cursor c) +{ + Window win; + + if (fsshell_w && (win = XtWindow(fsshell_w)) != 0) { + if (c) + XDefineCursor (XtDisplay(toplevel_w), win, c); + else + XUndefineCursor (XtDisplay(toplevel_w), win); + } +} + +/* qsort-style comparison of two ObjF's by dec */ +static int +objfd_cmp (const void* v1, const void* v2) +{ + Obj *op1 = (Obj *)v1; + Obj *op2 = (Obj *)v2; + double d = op1->s_dec - op2->s_dec; + + if (d < 0.0) + return (-1); + if (d > 0.0) + return (1); + return (0); +} + +/* squeeze out all entries in fop[] which are located within dupsep and have a + * magnitude within dupmag of any FIXED object currently in the database. We + * also squeeze out any GSC or USNO stars which meet those same criteria + * for any PM star. + * when finished, all remaining entries will be contiguous at the front of the + * fop array and each will have FLDSTAR set in o_flag. + * return the number of objects which remain. + * N.B. we assume FLDSTAR bit is initially off in each o_flag. + * N.B. we assume all fop[] have already been obj_cir()'d to mm_get_now(). + * N.B. we assume all entries in fop[] are within fov of ra/dec. + */ +static int +fs_nodbdups (ObjF *fop, int nfop, double ra, double dec, double fov) +{ + double rov = fov/2; + double dupsep, dupmag; + Obj *op; + DBScan dbs; + int l, u, m; + Obj *mop; + double diff; + double cdec; + char *txt; + + /* get sep and mag */ + txt = XmTextFieldGetString (nodupsep_w); + dupsep = degrad(atod(txt)/3600.); + XtFree (txt); + txt = XmTextFieldGetString (nodupmag_w); + dupmag = atod(txt); + XtFree (txt); + + /* sort fop by increasing dec */ + qsort ((void *)fop, nfop, sizeof(ObjF), objfd_cmp); + + /* mark all GSC stars with FLDSTAR flag which are close to any PM. + * don't compare GSC and PM stars with themselves. + */ + for (m = 0; m < nfop; m++) { + mop = (Obj *)&fop[m]; + + /* only check for GSC stars close to PM stars, not v.v. */ + if (mop->o_name[0] == 'G') + continue; + + /* scan each way from mop and mark close GSC stars */ + cdec = cos(mop->s_dec); + for (u = m+1; u < nfop; u++) { + op = (Obj *)&fop[u]; + if (fabs(mop->s_dec - op->s_dec) >= dupsep) + break; + if (op->o_name[0] == 'G' + && cdec*delra(mop->s_ra - op->s_ra) < dupsep + && fabs(get_mag(mop) - get_mag(op)) < dupmag) + op->o_flags |= FLDSTAR; + } + for (l = m-1; l >= 0; l--) { + op = (Obj *)&fop[l]; + if (fabs(mop->s_dec - op->s_dec) >= dupsep) + break; + if (op->o_name[0] == 'G' + && cdec*delra(mop->s_ra - op->s_ra) < dupsep + && fabs(get_mag(mop) - get_mag(op)) < dupmag) + op->o_flags |= FLDSTAR; + } + } + + /* scan all FIXED objects and mark all field stars with FLDSTAR + * which appears to be the same any one. + */ + for (db_scaninit(&dbs, FIXEDM, NULL, 0); (op = db_scan(&dbs)) != 0; ) { + /* update the s_ra/dec fields */ + db_update (op); + + /* skip ops outside the given field */ + cdec = cos(op->s_dec); + if (fabs(op->s_dec - dec) > rov || cdec*delra(op->s_ra - ra) > rov) + continue; + + /* binary search to find the fop closest to op */ + l = 0; + u = nfop - 1; + while (l <= u) { + m = (l+u)/2; + mop = (Obj *)(&fop[m]); + diff = mop->s_dec - op->s_dec; + if (diff < 0.0) + l = m+1; + else + u = m-1; + } + + /* scan each way from m and mark all that are dups with FLDSTAR. + * N.B. here, FLDSTAR marks *dups* (not the entries to keep) + * N.B. remember, u and l have crossed each other by now. + */ + for (; l < nfop; l++) + if (scanchk ((Obj *)(&fop[l]), dupsep, dupmag, op, cdec) < 0) + break; + for (; u >= 0; --u) + if (scanchk ((Obj *)(&fop[u]), dupsep, dupmag, op, cdec) < 0) + break; + } + + /* squeeze all entries marked with FLDSTAR to the front of fop[] + * and mark those that remain with FLDSTAR (yes, the bit now finally + * means what it says). + */ + for (u = l = 0; u < nfop; u++) { + mop = (Obj *)(&fop[u]); + if (!(mop->o_flags & FLDSTAR)) { + mop->o_flags |= FLDSTAR; /* now the mark means a *keeper* */ + if (u > l) + memcpy ((void *)(&fop[l]), (void *)mop, sizeof(ObjF)); + l++; + } + } + + return (l); +} + +/* if mop is further than dupsep from op in dec, return -1. + * then if mop is within dupsep in ra and within dupmag in mag too set FLDSTAR + * in mop->o_flags. + * return 0. + */ +static int +scanchk (Obj *mop, double dupsep, double dupmag, Obj *op, double cdec) +{ + if (fabs(mop->s_dec - op->s_dec) >= dupsep) + return (-1); + if (cdec*delra(mop->s_ra - op->s_ra) < dupsep + && fabs(get_mag(mop) - get_mag(op)) < dupmag) + mop->o_flags |= FLDSTAR; + return (0); +} + +static void +fs_create_fsshell() +{ + Widget fsform_w, f, w; + Widget l_w, rc_w; + Arg args[20]; + int n; + + /* create outtern shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Field Stars setup"); n++; + XtSetArg (args[n], XmNiconName, "FStars"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + fsshell_w = XtCreatePopupShell ("FieldStars", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (fsshell_w); + set_something (fsshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (fsshell_w, "XEphem*FieldStars.x", fscategory, 0); + sr_reg (fsshell_w, "XEphem*FieldStars.y", fscategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + fsform_w = XmCreateForm (fsshell_w, "FSForm", args, n); + XtAddCallback (fsform_w, XmNhelpCallback, help_cb, NULL); + XtManageChild (fsform_w); + + /* make the GSC section title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (fsform_w, "GSCT", args, n); + set_xmstring (w, XmNlabelString, "Hubble Guide Star Catalog, GSC:"); + XtManageChild (w); + + /* make the GSC CD-ROM toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + cdtf_w = XmCreateTextField (fsform_w, "GSCCDDirectory", args, n); + defaultTextFN (cdtf_w, 0, "/mnt/cdrom", NULL); + wtip (cdtf_w, "Pathname to the root of the CDROM when mounted"); + XtManageChild (cdtf_w); + sr_reg (cdtf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, cdtf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + cdtb_w = XmCreateToggleButton (fsform_w, "GSCCD", args, n); + XtAddCallback (cdtb_w, XmNvalueChangedCallback, gsctb_cb, + (XtPointer)CDROMTB); + set_xmstring (cdtb_w, XmNlabelString, "ASP CDROM Directory:"); + wtip (cdtb_w, "Whether to use the ASP CDROM for GSC stars"); + XtManageChild (cdtb_w); + sr_reg (cdtb_w, NULL, fscategory, 1); + + /* make the GSC Cache toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, cdtf_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + chtf_w = XmCreateTextField (fsform_w, "GSCCacheDirectory", args, n); + defaultTextFN (chtf_w, 0, getShareDir(), "catalogs/gsc"); + wtip (chtf_w, "Pathname to the GSC subdirectory"); + XtManageChild (chtf_w); + sr_reg (chtf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, cdtf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, chtf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + chtb_w = XmCreateToggleButton (fsform_w, "GSCCache", args, n); + XtAddCallback (chtb_w, XmNvalueChangedCallback, gsctb_cb, + (XtPointer)CACHETB); + set_xmstring (chtb_w, XmNlabelString, "Local Cache Directory:"); + wtip (chtb_w, "Whether to use a local disk for GSC stars"); + XtManageChild (chtb_w); + sr_reg (chtb_w, NULL, fscategory, 1); + + /* make the GSC 2.3 network toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, chtf_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + gsc23tf_w = XmCreateTextField (fsform_w, "GSC23URL", args, n); + defaultTextFN (gsc23tf_w, 0, + "http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx", NULL); + wtip (gsc23tf_w, "URL from which to fetch GSC 2.3 stars"); + sr_reg (gsc23tf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, chtf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, gsc23tf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + gsc23tb_w = XmCreateToggleButton (fsform_w, "GSC23Net", args, n); + XtAddCallback (gsc23tb_w, XmNvalueChangedCallback, gsctb_cb, + (XtPointer)NETTB); + set_xmstring (gsc23tb_w, XmNlabelString, "Internet to GSC 2.3:"); + wtip (gsc23tb_w,"Whether to use Internet to fetch GSC 2.3 stars"); + sr_reg (gsc23tb_w, NULL, fscategory, 1); + XtManageChild (gsc23tb_w); + XtManageChild (gsc23tf_w); + + /* make the GSC 2.2 toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, gsc23tf_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + gsc22tf_w = XmCreateTextField (fsform_w, "GSC22Dir", args, n); + wtip (gsc22tf_w, "Directory to GSC 2.2 catalog"); + defaultTextFN (gsc22tf_w, 0, getShareDir(), "catalogs/GSC2201"); + sr_reg (gsc22tf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, gsc23tf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, gsc22tf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + gsc22tb_w = XmCreateToggleButton (fsform_w, "GSC22", args, n); + XtAddCallback (gsc22tb_w, XmNvalueChangedCallback, gsctb_cb, + (XtPointer)GSC22TB); + set_xmstring (gsc22tb_w, XmNlabelString, "GSC 2.2 Directory:"); + wtip (gsc22tb_w,"Whether to use local GSC 2.2 and one PM catalog"); + sr_reg (gsc22tb_w, NULL, fscategory, 1); + XtManageChild (gsc22tb_w); + XtManageChild (gsc22tf_w); + + /* make the USNO section title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, gsc22tf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (fsform_w, "NOMT", args, n); + set_xmstring (w, XmNlabelString, "USNO A or SA catalogs:"); + XtManageChild (w); + + /* make the USNO toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + notf_w = XmCreateTextField (fsform_w, "USNODirectory", args, n); + wtip (notf_w, + "Pathname of A1.0, SA1.0 etc catalog series root directory"); + defaultTextFN (notf_w, 0, getShareDir(), "catalogs/usno"); + XtManageChild (notf_w); + sr_reg (notf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, notf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + notb_w = XmCreateToggleButton (fsform_w, "USNO", args, n); + set_xmstring (notb_w, XmNlabelString, "Root directory: "); + wtip (notb_w, "Whether to access a USNO catalog"); + XtManageChild (notb_w); + sr_reg (notb_w, NULL, fscategory, 1); + + /* make the PM section title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, notb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (fsform_w, "PMT", args, n); + set_xmstring (w, XmNlabelString, "Proper Motion catalogs:"); + XtManageChild (w); + + /* make the PM toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + ppmtf_w = XmCreateTextField (fsform_w, "PPMFilename", args, n); + wtip (ppmtf_w, "Full pathname of ppm.xe2 file"); + defaultTextFN (ppmtf_w, 0, getShareDir(), "catalogs/ppm.xe2"); + XtManageChild (ppmtf_w); + sr_reg (ppmtf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, ppmtf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + ppmtb_w = XmCreateToggleButton (fsform_w, "PPM", args, n); + XtAddCallback (ppmtb_w, XmNvalueChangedCallback, pmtb_cb, NULL); + set_xmstring (ppmtb_w, XmNlabelString, "PPM catalog: "); + wtip (ppmtb_w, "Whether to access the PPM catalog, ppm.xe2"); + XtManageChild (ppmtb_w); + sr_reg (ppmtb_w, NULL, fscategory, 1); + + /* make the Tycho toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ppmtf_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + tyctf_w = XmCreateTextField (fsform_w, "TychoFilename", args, n); + wtip (tyctf_w, "Full pathname of hiptyc2.xe2 file"); + defaultTextFN (tyctf_w, 0, getShareDir(), "catalogs/hiptyc2.xe2"); + XtManageChild (tyctf_w); + sr_reg (tyctf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ppmtf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, tyctf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + tyctb_w = XmCreateToggleButton (fsform_w, "Tycho", args, n); + XtAddCallback (tyctb_w, XmNvalueChangedCallback, pmtb_cb, NULL); + set_xmstring (tyctb_w, XmNlabelString, "Hipparcos + Tycho2: "); + wtip (tyctb_w, "Whether to access the combined Hipparcos and Tycho2 catalog"); + XtManageChild (tyctb_w); + sr_reg (tyctb_w, NULL, fscategory, 1); + + /* make the UCAC toggle/text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tyctf_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 60); n++; + ucactf_w = XmCreateTextField (fsform_w, "UCACDirectory", args, n); + wtip (ucactf_w, "Full path to directory of UCAC files"); + defaultTextFN (ucactf_w, 0, getShareDir(), "catalogs/UCAC"); + XtManageChild (ucactf_w); + sr_reg (ucactf_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tyctf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, ucactf_w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + ucactb_w = XmCreateToggleButton (fsform_w, "UCAC", args, n); + XtAddCallback (ucactb_w, XmNvalueChangedCallback, pmtb_cb, NULL); + set_xmstring (ucactb_w, XmNlabelString, "UCAC: "); + wtip (ucactb_w,"Whether to access the USNO CCD Astrograph Catalog"); + XtManageChild (ucactb_w); + sr_reg (ucactb_w, NULL, fscategory, 1); + + /* enforce and tie together as 1-of-3 pair */ + if (XmToggleButtonGetState(ppmtb_w) + + XmToggleButtonGetState(tyctb_w) + + XmToggleButtonGetState(ucactb_w) > 1) { + xe_msg (0, "Only one PM catalog -- using Tycho"); + XmToggleButtonSetState (ppmtb_w, False, False); + XmToggleButtonSetState (tyctb_w, True, False); + XmToggleButtonSetState (ucactb_w, False, False); + } + + /* make the No dups toggle and stats fields */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ucactf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + rc_w = XmCreateRowColumn (fsform_w, "FSDRC", args, n); + XtManageChild (rc_w); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + nodupt_w = XmCreateToggleButton (rc_w, "NoDups", args, n); + set_xmstring (nodupt_w, XmNlabelString, "Skip likely duplicates"); + wtip (nodupt_w, + "When loading, skip objects similar to ones already in memory"); + XtManageChild (nodupt_w); + sr_reg (nodupt_w, NULL, fscategory, 1); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + l_w = XmCreateLabel (rc_w, "FSDL1", args, n); + set_xmstring (l_w, XmNlabelString, "within"); + XtManageChild (l_w); + + n = 0; + XtSetArg (args[n], XmNcolumns, 4); n++; + nodupsep_w = XmCreateTextField (rc_w, "DupSep", args, n); + fixTextCursor (nodupsep_w); + wtip (nodupsep_w, "skip if closer than this"); + sr_reg (nodupsep_w, NULL, fscategory, 1); + XtManageChild (nodupsep_w); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + l_w = XmCreateLabel (rc_w, "FSDL1", args, n); + set_xmstring (l_w, XmNlabelString, "arc secs and"); + XtManageChild (l_w); + + n = 0; + XtSetArg (args[n], XmNcolumns, 4); n++; + nodupmag_w = XmCreateTextField (rc_w, "DupMag", args, n); + fixTextCursor (nodupmag_w); + sr_reg (nodupmag_w, NULL, fscategory, 1); + wtip (nodupmag_w, "skip if brightness differs less than this"); + XtManageChild (nodupmag_w); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + l_w = XmCreateLabel (rc_w, "FSDL1", args, n); + set_xmstring (l_w, XmNlabelString, "magnitudes"); + XtManageChild (l_w); + + /* make the controls across the bottom under a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreateSeparator (fsform_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNfractionBase, 13); n++; + f = XmCreateForm (fsform_w, "CF", args, n); + XtManageChild (f); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton (f, "Ok", args, n); + wtip (w, "Engage the settings and close if ok"); + XtAddCallback (w, XmNactivateCallback, ok_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + w = XmCreatePushButton (f, "Apply", args, n); + wtip (w, "Engage the settings and remain up"); + XtAddCallback (w, XmNactivateCallback, apply_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 7); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + w = XmCreatePushButton (f, "Close", args, n); + wtip (w, "Close this window without doing anything"); + XtAddCallback (w, XmNactivateCallback, cancel_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 12); n++; + w = XmCreatePushButton (f, "Help", args, n); + wtip (w, "More detailed descriptions"); + XtAddCallback (w, XmNactivateCallback, help_cb, NULL); + XtManageChild (w); +} + +/* set up the dialog according to our static state */ +static void +fs_setup () +{ + /* GSC */ + XmToggleButtonSetState (cdtb_w, cd_on, False); + if (cd_dn) + XmTextFieldSetString (cdtf_w, cd_dn); + + XmToggleButtonSetState (chtb_w, ch_on, False); + if (ch_dn) + XmTextFieldSetString (chtf_w, ch_dn); + + XmToggleButtonSetState (gsc23tb_w, gsc23_on, False); + if (gsc23_host) + XmTextFieldSetString (gsc23tf_w, gsc23_host); + + XmToggleButtonSetState (gsc22tb_w, gsc22_on, False); + if (gsc22_dn) + XmTextFieldSetString (gsc22tf_w, gsc22_dn); + + /* USNO */ + XmToggleButtonSetState (notb_w, usno_on, False); + if (usno_fn) + XmTextFieldSetString (notf_w, usno_fn); + + /* PM */ + XmToggleButtonSetState (ppmtb_w, ppm_on, False); + if (ppm_fn) + XmTextFieldSetString (ppmtf_w, ppm_fn); + XmToggleButtonSetState (tyctb_w, tyc_on, False); + if (tyc_fn) + XmTextFieldSetString (tyctf_w, tyc_fn); + XmToggleButtonSetState (ucactb_w, ucac_on, False); + if (ucac_dir) + XmTextFieldSetString (ucactf_w, ucac_dir); + + XmToggleButtonSetState (nodupt_w, nodup_on, False); +} + +/* save the dialog as our static state. + * we test the new settings and might change them if they seem to be + * unreasonable. + * if any major trouble, issue xe_msg and return -1, else return 0. + */ +static int +fs_save () +{ + char msg[1024]; + int allok = 1; + + watch_cursor (1); + + /* GSC CDROM and Cache */ + cd_on = XmToggleButtonGetState (cdtb_w); + if (cd_dn) + XtFree (cd_dn); + cd_dn = XmTextFieldGetString (cdtf_w); + ch_on = XmToggleButtonGetState (chtb_w); + if (ch_dn) + XtFree (ch_dn); + ch_dn = XmTextFieldGetString (chtf_w); + if ((cd_on || ch_on) && GSCSetup (cd_on?cd_dn:NULL, ch_on?ch_dn:NULL, + msg) < 0) { + xe_msg (1, "Cache: %s", msg); + cd_on = 0; + ch_on = 0; + fs_setup (); + allok = 0; + } + + /* GSC 2.3 network connection */ + gsc23_on = XmToggleButtonGetState (gsc23tb_w); + if (gsc23_host) + XtFree (gsc23_host); + gsc23_host = XmTextFieldGetString (gsc23tf_w); + if (gsc23_on) { + /* test by actually fetching a small patch */ + Now *np = mm_get_now(); + int nop; + ObjF *op; + + op = NULL; + nop = gsc23fetch (gsc23_host, np, 1.0, 1.0, degrad(.01), 20.0, &op, 0, msg); + if (nop <= 0) { + if (nop == 0) + xe_msg (1, "GSC 2.3 connected but returned no objects"); + else + xe_msg (1, "GSC 2.3 fetch: %s", msg); + gsc23_on = 0; + fs_setup (); + allok = 0; + } else + free ((void *)op); + } + + /* GSC22 */ + gsc22_on = XmToggleButtonGetState (gsc22tb_w); + if (gsc22_dn) + XtFree (gsc22_dn); + gsc22_dn = XmTextFieldGetString (gsc22tf_w); + if (gsc22_on) { + /* test directory */ + if (xe3chkdir (gsc22_dn, msg) < 0) { + xe_msg (1, msg); + gsc22_on = 0; + fs_setup (); + allok = 0; + } + } + + /* USNO */ + usno_on = XmToggleButtonGetState (notb_w); + if (usno_fn) + XtFree (usno_fn); + usno_fn = XmTextFieldGetString (notf_w); + if (usno_on && USNOSetup (usno_fn, 1, msg) < 0) { + xe_msg (1, "USNO: %s", msg); + usno_on = 0; + fs_setup(); + allok = 0; + } + + /* PPM */ + ppm_on = XmToggleButtonGetState (ppmtb_w); + if (ppm_fn) + XtFree (ppm_fn); + ppm_fn = XmTextFieldGetString (ppmtf_w); + if (ppm_on && xe2chkfile (ppm_fn, msg) < 0) { + xe_msg (1, "PPM: %s", msg); + ppm_on = 0; + fs_setup(); + allok = 0; + } + + /* Tycho */ + tyc_on = XmToggleButtonGetState (tyctb_w); + if (tyc_fn) + XtFree (tyc_fn); + tyc_fn = XmTextFieldGetString (tyctf_w); + if (tyc_on && xe2chkfile (tyc_fn, msg) < 0) { + xe_msg (1, "Tycho: %s", msg); + tyc_on = 0; + fs_setup(); + allok = 0; + } + + /* UCAC */ + ucac_on = XmToggleButtonGetState (ucactb_w); + if (ucac_dir) + XtFree (ucac_dir); + ucac_dir = XmTextFieldGetString (ucactf_w); + if (ucac_on && UCACSetup (ucac_dir, msg) < 0) { + xe_msg (1, "UCAC: %s", msg); + ucac_on = 0; + fs_setup(); + allok = 0; + } + + /* options */ + nodup_on = XmToggleButtonGetState (nodupt_w); + + watch_cursor (0); + + return (allok ? 0 : -1); +} + +/* called from Apply */ +/* ARGSUSED */ +static void +apply_cb (Widget w, XtPointer client, XtPointer call) +{ + if (fs_save() == 0) + sv_loadfs (1); +} + +/* called from Ok */ +/* ARGSUSED */ +static void +ok_cb (Widget w, XtPointer client, XtPointer call) +{ + if (fs_save() == 0) { + sv_loadfs (1); + XtPopdown (fsshell_w); + } +} + +/* called from Ok */ +/* ARGSUSED */ +static void +cancel_cb (Widget w, XtPointer client, XtPointer call) +{ + /* outta here */ + XtPopdown (fsshell_w); +} + +/* called from any of the GSC CDROM, network or Cache toggle buttons. + * client is one of the TB enums to tell us which. + */ +/* ARGSUSED */ +static void +gsctb_cb (Widget w, XtPointer client, XtPointer call) +{ + if (XmToggleButtonGetState(w)) + switch ((long int)client) { + case CDROMTB: /* FALLTHRU */ + case CACHETB: + /* turn off net and gsc22 if turning on CDROM or Cache */ + XmToggleButtonSetState (gsc23tb_w, False, False); + XmToggleButtonSetState (gsc22tb_w, False, False); + break; + case NETTB: + /* turn off CDROM and Cache and gsc22 if turning on network */ + XmToggleButtonSetState (cdtb_w, False, False); + XmToggleButtonSetState (chtb_w, False, False); + XmToggleButtonSetState (gsc22tb_w, False, False); + /* turn on at least one PM catalog */ + if (!XmToggleButtonGetState(ppmtb_w) + && !XmToggleButtonGetState(tyctb_w) + && !XmToggleButtonGetState(ucactb_w)) + XmToggleButtonSetState (tyctb_w, True, False); + break; + case GSC22TB: + /* turn off CDROM and Cache and net if turning on GSC22 */ + XmToggleButtonSetState (cdtb_w, False, False); + XmToggleButtonSetState (chtb_w, False, False); + XmToggleButtonSetState (gsc23tb_w, False, False); + /* turn on at least one PM catalog */ + if (!XmToggleButtonGetState(ppmtb_w) + && !XmToggleButtonGetState(tyctb_w) + && !XmToggleButtonGetState(ucactb_w)) + XmToggleButtonSetState (tyctb_w, True, False); + break; + default: + printf ("FS: bad client: %d\n", (int)(long int)client); + abort(); + } +} + +/* used to maintain 1-of-3 ppm vs tycho vs ucac databases. + * client coming on turns off the other 2. + */ +/* ARGSUSED */ +static void +pmtb_cb (Widget w, XtPointer client, XtPointer call) +{ + if (XmToggleButtonGetState(w)) { + if (w != ppmtb_w) XmToggleButtonSetState (ppmtb_w, False, False); + if (w != tyctb_w) XmToggleButtonSetState (tyctb_w, False, False); + if (w != ucactb_w) XmToggleButtonSetState (ucactb_w, False, False); + } +} + +/* called from Ok */ +/* ARGSUSED */ +static void +help_cb (Widget w, XtPointer client, XtPointer call) +{ + static char *msg[] = { +"Set up which field star sources to use and where they are located." +}; + + hlp_dialog ("FieldStars", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: fsmenu.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.33 $ $Name: $"}; diff --git a/GUI/xephem/gallery/._1999-41-a-web_print.jpg b/GUI/xephem/gallery/._1999-41-a-web_print.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._1999-41-a-web_print.jpg differ diff --git a/GUI/xephem/gallery/._I0059-1.jpg b/GUI/xephem/gallery/._I0059-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._I0059-1.jpg differ diff --git a/GUI/xephem/gallery/._I1613-1.jpg b/GUI/xephem/gallery/._I1613-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._I1613-1.jpg differ diff --git a/GUI/xephem/gallery/._I1848-1.jpg b/GUI/xephem/gallery/._I1848-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._I1848-1.jpg differ diff --git a/GUI/xephem/gallery/._I2118-2.jpg b/GUI/xephem/gallery/._I2118-2.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._I2118-2.jpg differ diff --git a/GUI/xephem/gallery/._M013-2.jpg b/GUI/xephem/gallery/._M013-2.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._M013-2.jpg differ diff --git a/GUI/xephem/gallery/._M034-1.jpg b/GUI/xephem/gallery/._M034-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._M034-1.jpg differ diff --git a/GUI/xephem/gallery/._M053-1.jpg b/GUI/xephem/gallery/._M053-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._M053-1.jpg differ diff --git a/GUI/xephem/gallery/._N2174-1.jpg b/GUI/xephem/gallery/._N2174-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N2174-1.jpg differ diff --git a/GUI/xephem/gallery/._N6633-1.jpg b/GUI/xephem/gallery/._N6633-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N6633-1.jpg differ diff --git a/GUI/xephem/gallery/._N6791-1.jpg b/GUI/xephem/gallery/._N6791-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N6791-1.jpg differ diff --git a/GUI/xephem/gallery/._N6820-2.jpg b/GUI/xephem/gallery/._N6820-2.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N6820-2.jpg differ diff --git a/GUI/xephem/gallery/._N6946-1.jpg b/GUI/xephem/gallery/._N6946-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N6946-1.jpg differ diff --git a/GUI/xephem/gallery/._N7023-2.jpg b/GUI/xephem/gallery/._N7023-2.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N7023-2.jpg differ diff --git a/GUI/xephem/gallery/._N7129-2.jpg b/GUI/xephem/gallery/._N7129-2.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._N7129-2.jpg differ diff --git a/GUI/xephem/gallery/._S115-1.jpg b/GUI/xephem/gallery/._S115-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._S115-1.jpg differ diff --git a/GUI/xephem/gallery/._abell1656-1.jpg b/GUI/xephem/gallery/._abell1656-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._abell1656-1.jpg differ diff --git a/GUI/xephem/gallery/._abell2151-1.jpg b/GUI/xephem/gallery/._abell2151-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._abell2151-1.jpg differ diff --git a/GUI/xephem/gallery/._arp295_kelly_c1.jpg b/GUI/xephem/gallery/._arp295_kelly_c1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._arp295_kelly_c1.jpg differ diff --git a/GUI/xephem/gallery/._gallery.gly b/GUI/xephem/gallery/._gallery.gly new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._gallery.gly differ diff --git a/GUI/xephem/gallery/._hickson68-1.jpg b/GUI/xephem/gallery/._hickson68-1.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._hickson68-1.jpg differ diff --git a/GUI/xephem/gallery/._ic5146-2002sep12-hall.jpg b/GUI/xephem/gallery/._ic5146-2002sep12-hall.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._ic5146-2002sep12-hall.jpg differ diff --git a/GUI/xephem/gallery/._m103-2002sep13-lrgb.jpg b/GUI/xephem/gallery/._m103-2002sep13-lrgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m103-2002sep13-lrgb.jpg differ diff --git a/GUI/xephem/gallery/._m29-2002sep05.jpg b/GUI/xephem/gallery/._m29-2002sep05.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m29-2002sep05.jpg differ diff --git a/GUI/xephem/gallery/._m3-2003may07-ddp.jpg b/GUI/xephem/gallery/._m3-2003may07-ddp.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m3-2003may07-ddp.jpg differ diff --git a/GUI/xephem/gallery/._m35-11dec01-grgb.jpg b/GUI/xephem/gallery/._m35-11dec01-grgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m35-11dec01-grgb.jpg differ diff --git a/GUI/xephem/gallery/._m76-07dec01-lrgb-nr.jpg b/GUI/xephem/gallery/._m76-07dec01-lrgb-nr.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m76-07dec01-lrgb-nr.jpg differ diff --git a/GUI/xephem/gallery/._m82-03apr02-rgb.jpg b/GUI/xephem/gallery/._m82-03apr02-rgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m82-03apr02-rgb.jpg differ diff --git a/GUI/xephem/gallery/._m92-01jun02.jpg b/GUI/xephem/gallery/._m92-01jun02.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m92-01jun02.jpg differ diff --git a/GUI/xephem/gallery/._m97-03apr02-lrgb.jpg b/GUI/xephem/gallery/._m97-03apr02-lrgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._m97-03apr02-lrgb.jpg differ diff --git a/GUI/xephem/gallery/._ngc457-2002sep13-lrgb.jpg b/GUI/xephem/gallery/._ngc457-2002sep13-lrgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._ngc457-2002sep13-lrgb.jpg differ diff --git a/GUI/xephem/gallery/._ngc6819-25aug01-lrgb.jpg b/GUI/xephem/gallery/._ngc6819-25aug01-lrgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._ngc6819-25aug01-lrgb.jpg differ diff --git a/GUI/xephem/gallery/._ngc6888-27jul02-ha.jpg b/GUI/xephem/gallery/._ngc6888-27jul02-ha.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._ngc6888-27jul02-ha.jpg differ diff --git a/GUI/xephem/gallery/._ngc869-2002oct06-lrgb.jpg b/GUI/xephem/gallery/._ngc869-2002oct06-lrgb.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._ngc869-2002oct06-lrgb.jpg differ diff --git a/GUI/xephem/gallery/._pui-17-virgo-anno1000.jpg b/GUI/xephem/gallery/._pui-17-virgo-anno1000.jpg new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/gallery/._pui-17-virgo-anno1000.jpg differ diff --git a/GUI/xephem/gallery/1999-41-a-web_print.jpg b/GUI/xephem/gallery/1999-41-a-web_print.jpg new file mode 100644 index 0000000..d666b5e Binary files /dev/null and b/GUI/xephem/gallery/1999-41-a-web_print.jpg differ diff --git a/GUI/xephem/gallery/I0059-1.jpg b/GUI/xephem/gallery/I0059-1.jpg new file mode 100644 index 0000000..2bb1de0 Binary files /dev/null and b/GUI/xephem/gallery/I0059-1.jpg differ diff --git a/GUI/xephem/gallery/I1613-1.jpg b/GUI/xephem/gallery/I1613-1.jpg new file mode 100644 index 0000000..0dd516c Binary files /dev/null and b/GUI/xephem/gallery/I1613-1.jpg differ diff --git a/GUI/xephem/gallery/I1848-1.jpg b/GUI/xephem/gallery/I1848-1.jpg new file mode 100644 index 0000000..b2cf68a Binary files /dev/null and b/GUI/xephem/gallery/I1848-1.jpg differ diff --git a/GUI/xephem/gallery/I2118-2.jpg b/GUI/xephem/gallery/I2118-2.jpg new file mode 100644 index 0000000..76f4085 Binary files /dev/null and b/GUI/xephem/gallery/I2118-2.jpg differ diff --git a/GUI/xephem/gallery/M013-2.jpg b/GUI/xephem/gallery/M013-2.jpg new file mode 100644 index 0000000..c77600b Binary files /dev/null and b/GUI/xephem/gallery/M013-2.jpg differ diff --git a/GUI/xephem/gallery/M034-1.jpg b/GUI/xephem/gallery/M034-1.jpg new file mode 100644 index 0000000..98ab7f8 Binary files /dev/null and b/GUI/xephem/gallery/M034-1.jpg differ diff --git a/GUI/xephem/gallery/M053-1.jpg b/GUI/xephem/gallery/M053-1.jpg new file mode 100644 index 0000000..474ba6f Binary files /dev/null and b/GUI/xephem/gallery/M053-1.jpg differ diff --git a/GUI/xephem/gallery/N2174-1.jpg b/GUI/xephem/gallery/N2174-1.jpg new file mode 100644 index 0000000..effa0dc Binary files /dev/null and b/GUI/xephem/gallery/N2174-1.jpg differ diff --git a/GUI/xephem/gallery/N6633-1.jpg b/GUI/xephem/gallery/N6633-1.jpg new file mode 100644 index 0000000..7d69d9b Binary files /dev/null and b/GUI/xephem/gallery/N6633-1.jpg differ diff --git a/GUI/xephem/gallery/N6791-1.jpg b/GUI/xephem/gallery/N6791-1.jpg new file mode 100644 index 0000000..1887c7f Binary files /dev/null and b/GUI/xephem/gallery/N6791-1.jpg differ diff --git a/GUI/xephem/gallery/N6820-2.jpg b/GUI/xephem/gallery/N6820-2.jpg new file mode 100644 index 0000000..217c61d Binary files /dev/null and b/GUI/xephem/gallery/N6820-2.jpg differ diff --git a/GUI/xephem/gallery/N6946-1.jpg b/GUI/xephem/gallery/N6946-1.jpg new file mode 100644 index 0000000..25d45b5 Binary files /dev/null and b/GUI/xephem/gallery/N6946-1.jpg differ diff --git a/GUI/xephem/gallery/N7023-2.jpg b/GUI/xephem/gallery/N7023-2.jpg new file mode 100644 index 0000000..3764c07 Binary files /dev/null and b/GUI/xephem/gallery/N7023-2.jpg differ diff --git a/GUI/xephem/gallery/N7129-2.jpg b/GUI/xephem/gallery/N7129-2.jpg new file mode 100644 index 0000000..321f331 Binary files /dev/null and b/GUI/xephem/gallery/N7129-2.jpg differ diff --git a/GUI/xephem/gallery/S115-1.jpg b/GUI/xephem/gallery/S115-1.jpg new file mode 100644 index 0000000..4f2638d Binary files /dev/null and b/GUI/xephem/gallery/S115-1.jpg differ diff --git a/GUI/xephem/gallery/abell1656-1.jpg b/GUI/xephem/gallery/abell1656-1.jpg new file mode 100644 index 0000000..38b96d2 Binary files /dev/null and b/GUI/xephem/gallery/abell1656-1.jpg differ diff --git a/GUI/xephem/gallery/abell2151-1.jpg b/GUI/xephem/gallery/abell2151-1.jpg new file mode 100644 index 0000000..29cf530 Binary files /dev/null and b/GUI/xephem/gallery/abell2151-1.jpg differ diff --git a/GUI/xephem/gallery/arp295_kelly_c1.jpg b/GUI/xephem/gallery/arp295_kelly_c1.jpg new file mode 100644 index 0000000..028c586 Binary files /dev/null and b/GUI/xephem/gallery/arp295_kelly_c1.jpg differ diff --git a/GUI/xephem/gallery/gallery.gly b/GUI/xephem/gallery/gallery.gly new file mode 100644 index 0000000..994ba95 --- /dev/null +++ b/GUI/xephem/gallery/gallery.gly @@ -0,0 +1,907 @@ + + + + NGC 2207 + + + 1999-41-a-web_print.jpg + + +In the direction of the +constellation Canis Major, two spiral galaxies pass by each other like +majestic ships in the night. The near-collision has been caught in images +taken by NASA's Hubble Space Telescope and its Wide Field Planetary Camera 2. + +The larger and more massive galaxy is cataloged as NGC 2207 (on the left in the +Hubble Heritage image), and the smaller one on the right is IC 2163. Strong +tidal forces from NGC 2207 have distorted the shape of IC 2163, flinging +out stars and gas into long streamers stretching out a hundred thousand +light-years toward the right-hand edge of the image. + +Computer simulations, carried out by a team led by Bruce and Debra Elmegreen, +demonstrate the leisurely timescale over which galactic collisions occur. In +addition to the Hubble images, measurements made with the National Science +Foundation's Very Large Array Radio Telescope in New Mexico reveal the +motions of the galaxies and aid the reconstruction of the collision. + +The calculations indicate that IC 2163 is swinging past NGC 2207 in a +counterclockwise direction, having made its closest approach 40 million +years ago. However, IC 2163 does not have sufficient energy to escape from +the gravitational pull of NGC 2207, and is destined to be pulled back and +swing past the larger galaxy again in the future. + +The high resolution of the Hubble telescope image reveals dust lanes in +the spiral arms of NGC 2207, clearly silhouetted against IC 2163, which is +in the background. Hubble also reveals a series of parallel dust filaments +extending like fine brush strokes along the tidally stretched material on the +right-hand side. The large concentrations of gas and dust in both galaxies +may well erupt into regions of active star formation in the near future. + +Trapped in their mutual orbit around each other, these two galaxies will +continue to distort and disrupt each other. Eventually, billions of years +from now, they will merge into a single, more massive galaxy. It is believed +that many present-day galaxies, including the Milky Way, were assembled from +a similar process of coalescence of smaller galaxies occurring over billions +of years. + +This image was created from 3 separate pointings of Hubble. The Wide Field +Planetary Camera 2 data sets were obtained by Debra Meloy Elmegreen (Vassar +College), Bruce G. Elmegreen (IBM Research Division), Michele Kaufman (Ohio +State U.), Elias Brinks (Universidad de Guanajuato, Mexico), Curt Struck (Iowa +State University), Magnus Thomasson (Onsala Space Obs., Sweden), Maria Sundin +(Goteborg University, Sweden), and Mario Klaric (Columbia, South Carolina). + +Credit: NASA and Hubble Heritage Team (STScI) + + + + + + + + Virgo cluster + + + pui-17-virgo-anno1000.jpg + + +Virgo Galaxy Cluster +Puimichel, 14-15 May, 2002 +135/2.8 lens at f/4, 15 min, Kodak Supra 400 + +This photo covers most of the Virgo Cluster, the most nearby massive galaxy +cluster. Dozens of small galaxies are visible in this photo. All galaxies +brighter than magnitude 12 has been labelled + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + NGC 6819 + + + ngc6819-25aug01-lrgb.jpg + + +NGC 6819 in Cygnus +Magnitude 7,3 - Size 5' + +25 Aug 2001 - C8-DX at f/6.3 - MX516 - L:R:G:B = 2:1,5:1:1 min + +A nice compact open cluster in Cygnus + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M29 + + + m29-2002sep05.jpg + + +M29 in Cygnus +Magnitude 6,6 - Size 7,0' + +05 Sep 2002 - FFC 3.5/500 - MX516 - 6 min in high-res mode + +One of the less impressive Messier objects. Loose group of distant but very hot stars. + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M103 + + + m103-2002sep13-lrgb.jpg + + +M103 in Cassiopeia +Magnitude 7,4 - Size 6,0' - 40 stars + +13 Sep 2002 - FFC 3.5/500 - LRGB = 6:4:3:4 min - high res mode + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + NGC 457 + + + ngc457-2002sep13-lrgb.jpg + + +NGC 457 (Owl Cluster) in Cassiopeia +Magnitude 6,4 - Size 13' - 80 stars + +13 Sep 2002 - FFC 3.5/500 - LRGB = 6:4:2:7 min - high res mode + +This cluster is sometimes nicknamed the "ET Cluster" and it really looks like +an alien with those two "eyes". The brightest star is phi Cass. and is not a +member of the cluster. + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + NGC 869 + + + ngc869-2002oct06-lrgb.jpg + + +NGC 869/884, The Double Cluster in Perseus +Magnitude 5,3/6,1 - Size 30'/30' + +06 Oct 2002 - FFC 3.5/500 - MX516 - Mosaic of 4 images - Each image LRGB = 7:2:2:2 min in high res mode + +The Double Cluster is a naked eye object under a moderately dark sky. It is +therefore quite surprising that Messier missed it in his famous catalogue.'- + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M35 + + + m35-11dec01-grgb.jpg + + +M35 in Gemini +Magnitude 5,1 - Size 28' + +11 Dec 2001 - ST80 (42 mm aperture) - MX516 - (L)RGB = 210:270:150 sec (30 sec +exposures) - L = G + +Large open cluster that is a good binocular target. I missed the little +distant cluster NGC2158 that is located just off the lower right corner. The +ST80 was stopped down to reduce the colour error. Further the green image was +used as the luminance channel since it has the best focus. Bright blue stars +do get a halo probably due to a violet or UV leak in the green filter + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M76 + + + m76-07dec01-lrgb-nr.jpg + + +M76 (Little Dumbbell) in Perseus +Magnitude 11,0 - Size 2,7' x 1,8'. + +L: 14 Nov 2001 - C8 at f/6.3 - MX516 - 510 sec +RGB: 07 Dec 2001 - R:G:B = 120:120:120 sec - LRGB + +This is the faintest of all Messier objects but its rather high surface +brightness makes it more easy to observe than should be expected from its +magnitude. My first try (14 Nov) using the ST80 as guide scope (see equipment) + + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M97 + + + m97-03apr02-lrgb.jpg + + +M97 (Owl Nebula) in Ursa Major +Magnitude 11,0 - Size 3,4' x 3,3' + +03 Apr 2002 - C8-DX at f/6.3 - MX516 - L:R:G:B = 13.5:6:7:6.5 min + +Low surface brightness planetary that is difficult to observe from my +location. New colour version. + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + IC 5146 + + + ic5146-2002sep12-hall.jpg + + +IC 5146 (Cocoon Nebula) in Cygnus + +12 Sep 2002 - FFC 3.5/500 - MX516 - lum: 14 min, h-alpha: 26 min - pseudo-rgb + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + NGC 6888 + + + ngc6888-27jul02-ha.jpg + + +NGC 6888, The Crescent Nebula in Cygnus +Magnitude 10,0 - Size 20' x 10' + +27 Jul 2002 - 135/2.8 lens at f/2.8 - MX516 - h-alpha filter - 16 min + +The Crescent nebula is a rare kind of nebulosity that has been created by a +Wolf-Rayet star located at the center of the nebula. W-R stars represent the +final stage in the evolution of supermassive stars before they explode as type +Ib/Ic supernovae. Before and during the W-R phase the star blows off a large +part of its mass in strong stellar winds forming an emission nebula around the +hot star. Only 227 W-R stars are known in our galaxy + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M92 + + + m92-01jun02.jpg + + +M92 (NGC 6341) in Hercules +Magnitude 6,4 - Size 12,2' + +01 Jun 2002 - C8-DX at f/6.3 - MX516 - 10 min + +The "other" globular in Hercules. This beauty is somewhat overshadowed by its much more famous neighbour M13 + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M3 + + + m3-2003may07-ddp.jpg + + +M3 (NGC 5272) in Canes Venatici +Magnitude 6,2 - Diameter 18,6' + +07 May 2003 - C8 at f/6.3 - MX516 - 26 min in high-res mode - DDP + +Together with M53 and M5 the prelude to the summer display of globular clusters. + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + M82 + + + m82-03apr02-rgb.jpg + + +03 Apr 2002 C8 f/6.3 - R:G:B = 6.5:7:7 min (30 sec exposures) - denoised + +Credit: © Ole Nielsen 1999-2003 http://home.planet.nl/~onielsen + + + + + + Arp 295 + + + arp295_kelly_c1.jpg + + +A spectacular bridge of stars and gas stretches for nearly 250,000 light-years +and joins this famous peculiar pair of galaxies cataloged as Arp 295. The +cosmic bridge between the galaxies and the long tail extending below and right +of picture center are strong evidence that these two immense star systems have +passed close to each other in the past, allowing violent tides induced by +mutual gravity to create the eye-catching plumes of stellar material. While +such interactions are drawn out over billions of years, repeated close +passages should ultimately result in the merger of this pair of galaxies into +a larger single galaxy of stars. Although this scenario does look peculiar, +galactic mergers are thought to be common, with Arp 295 representing an early +stage of this inevitable process. The Arp 295 pair are the largest of a loose +grouping of galaxies about 270 million light-years distant toward the +constellation Aquarius. + +Credit: This deep color image of the region was recorded in September using +the USNO 1 meter telescope near Flagstaff, Arizona. + + + + + + NGC 7129 + + + NGC 7142 + + + N7129-2.jpg + + +NGC 7129 + + Object type: open cluster + reflection nebula + + Size: 8' + + Magnitude: 11.5 mag + + Constellation: Cep + + Distance: 3.300 Ly + +NGC 7142 + + Object type: open cluster (II2r) + + Size: 4' + + Magnitude: 9.3 mag + + Constellation: Cep + + Distance: 3.300 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 7023 + + + Iris Nebula + + + N7023-2.jpg + + + +NGC 7023 + + Object type: open cluster + reflection nebula + + Size: 18' + + Magnitude: 7 mag + + Constellation: Cep + + Distance: 900 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + Sh2-115 + + + Abell 71 + + + S115-1.jpg + + + +Sh2-115 + + Object type: emission nebula (HII) + + Size: 50' + + Constellation: Cyg + +Abell 71 + + Object type: planetary nebula + + Size: 2.6' + + Magnitude: 15.2 mag + + Constellation: Cyg + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 6946 + + + NGC 6939 + + + N6946-1.jpg + + + +NGC 6946 + + Object type: galaxy (SBc) + + Size: 11.2' x 9.8' ( >16' in negative image) + + Magnitude: 9.7 mag + + Constellation: Cep / Cyg + + Distance: 18 MLy + +NGC 6939 + + Object type: open cluster (I1m) + + Size: 8' + + Magnitude: 7.8 mag + + Constellation: Cep + + Distance: 6,000 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 6791 + + + N6791-1.jpg + + + +NGC 6791 + + Object type: open cluster (II3r) + + Size: 16' + + Magnitude: 9.5 / brightest star 13 mag + + Constellation: Lyr + + Distance: 17,000 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 6820 + + + Elephant's trunk + + + N6820-2.jpg + + + +NGC 6820 + + Object type: emission nebula + + Size: 40' + + Magnitude: 15,0 + + Constellation: Vul + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 6040 + + + NGC 6041 + + + NGC 6043 + + + NGC 6045 + + + NGC 6050 + + + IC1178 + + + IC1181 + + + Hercules Galaxy Cluster + + + Abell2151 + + + abell2151-1.jpg + + + +Hercules Galaxy Cluster + + Object type: galaxy cluster (87 members) + + Size: 128' + + Magnitude: brightest member: 14.4 mag + + Constellation: Her + + Distance: 500 MLy + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 6633 + + + N6633-1.jpg + + + +NGC 6633 + + Object type: open cluster (III 2 m) + + Size: 27' + + Magnitude: 4.6 mag + + Constellation: Oph + + Distance: 1,100 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + M53 + + + NGC 5053 + + + M053-1.jpg + + + +M53 + + Object type: globular cluster (V) + + Size: 14.4' + + Magnitude: 7.6 mag + + Constellation: Com + + Distance: 65,000 Ly + +NGC 5053 + + Object type: globular cluster (XI) + + Size: 8.9' + + Magnitude: 9.5 mag + + Constellation: Com + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + M 13 + + + Hercules Cluster + + + M013-2.jpg + + + + Object type: globular cluster (V) + + Size: 16.6' + + Magnitude: 5.9 mag + + Constellation: Her + + Distance: 22000 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + Hickson 68 + + + NGC 5371 + + + hickson68-1.jpg + + + + Object type: galaxy group + + Size: 10' + + Magnitude: brightest member: 12,1 mag + + Constellation: CVn + + Distance: 100 MLy + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + Coma Galaxy Cluster + + + Abell 1656 + + + NGC 4884 + + + NGC 4874 + + + abell1656-1.jpg + + + +Coma Galaxy Cluster + + Object type: galaxy cluster + + Size: 180' + + Magnitude: brightest member: 12.5 mag + + Constellation: Com + + Distance: 300 MLy + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + NGC 2174 + + + NGC 2175 + + + N2174-1.jpg + + + +NGC 2174 + + Object type:emission nebula + + Size: 40' + + Constellation: Ori + +open cluster NGC 2175 inside nebula + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + IC 1848 + + + I1848-1.jpg + + + +IC 1848 + + Object type: open cluster + emission nebula + + Size: 60' + + Magnitude: 6,5 + + Constellation: Cas + + Distance: 2200 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + IC 2118 + + + Witch Head Nebula + + + I2118-2.jpg + + + +IC 2118 + + Object type: reflection nebula + + Size: 180' + + Constellation: Eri + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + IC 59 + + + IC 63 + + + Gamma Cas Nebulae + + + I0059-1.jpg + + + +Gamma Cas Nebulae + + Object type: reflection + emission nebula + + Size: 10' + + Constellation: Cas + + Distance: 360 Ly + + dark nebulae NW of Gamma Cas + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + IC 1613 + + + I1613-1.jpg + + + +IC 1613 + + Object type: galaxy (Irr) + + Size: 16.6' x 14.9' + + Magnitude: 9,9 + + Constellation: Cet + + Distance: 5.5 MLy + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + + + + M 34 + + + M034-1.jpg + + + +M 34 + + Object type: open cluster (II3m) + + Size: 35' + + Magnitude: 5,2 + + Constellation: Per + + Distance: 1400 Ly + +Credit: Bernhard Hubl, http://hubble.heim.at. + + + diff --git a/GUI/xephem/gallery/hickson68-1.jpg b/GUI/xephem/gallery/hickson68-1.jpg new file mode 100644 index 0000000..2f42860 Binary files /dev/null and b/GUI/xephem/gallery/hickson68-1.jpg differ diff --git a/GUI/xephem/gallery/ic5146-2002sep12-hall.jpg b/GUI/xephem/gallery/ic5146-2002sep12-hall.jpg new file mode 100644 index 0000000..4928df0 Binary files /dev/null and b/GUI/xephem/gallery/ic5146-2002sep12-hall.jpg differ diff --git a/GUI/xephem/gallery/m103-2002sep13-lrgb.jpg b/GUI/xephem/gallery/m103-2002sep13-lrgb.jpg new file mode 100644 index 0000000..2612d91 Binary files /dev/null and b/GUI/xephem/gallery/m103-2002sep13-lrgb.jpg differ diff --git a/GUI/xephem/gallery/m29-2002sep05.jpg b/GUI/xephem/gallery/m29-2002sep05.jpg new file mode 100644 index 0000000..e6e4d36 Binary files /dev/null and b/GUI/xephem/gallery/m29-2002sep05.jpg differ diff --git a/GUI/xephem/gallery/m3-2003may07-ddp.jpg b/GUI/xephem/gallery/m3-2003may07-ddp.jpg new file mode 100644 index 0000000..e9ccb99 Binary files /dev/null and b/GUI/xephem/gallery/m3-2003may07-ddp.jpg differ diff --git a/GUI/xephem/gallery/m35-11dec01-grgb.jpg b/GUI/xephem/gallery/m35-11dec01-grgb.jpg new file mode 100644 index 0000000..7372165 Binary files /dev/null and b/GUI/xephem/gallery/m35-11dec01-grgb.jpg differ diff --git a/GUI/xephem/gallery/m76-07dec01-lrgb-nr.jpg b/GUI/xephem/gallery/m76-07dec01-lrgb-nr.jpg new file mode 100644 index 0000000..c0df16e Binary files /dev/null and b/GUI/xephem/gallery/m76-07dec01-lrgb-nr.jpg differ diff --git a/GUI/xephem/gallery/m82-03apr02-rgb.jpg b/GUI/xephem/gallery/m82-03apr02-rgb.jpg new file mode 100644 index 0000000..aeda6e3 Binary files /dev/null and b/GUI/xephem/gallery/m82-03apr02-rgb.jpg differ diff --git a/GUI/xephem/gallery/m92-01jun02.jpg b/GUI/xephem/gallery/m92-01jun02.jpg new file mode 100644 index 0000000..5f47eee Binary files /dev/null and b/GUI/xephem/gallery/m92-01jun02.jpg differ diff --git a/GUI/xephem/gallery/m97-03apr02-lrgb.jpg b/GUI/xephem/gallery/m97-03apr02-lrgb.jpg new file mode 100644 index 0000000..82cfd4d Binary files /dev/null and b/GUI/xephem/gallery/m97-03apr02-lrgb.jpg differ diff --git a/GUI/xephem/gallery/ngc457-2002sep13-lrgb.jpg b/GUI/xephem/gallery/ngc457-2002sep13-lrgb.jpg new file mode 100644 index 0000000..88ad5ec Binary files /dev/null and b/GUI/xephem/gallery/ngc457-2002sep13-lrgb.jpg differ diff --git a/GUI/xephem/gallery/ngc6819-25aug01-lrgb.jpg b/GUI/xephem/gallery/ngc6819-25aug01-lrgb.jpg new file mode 100644 index 0000000..5cbe07c Binary files /dev/null and b/GUI/xephem/gallery/ngc6819-25aug01-lrgb.jpg differ diff --git a/GUI/xephem/gallery/ngc6888-27jul02-ha.jpg b/GUI/xephem/gallery/ngc6888-27jul02-ha.jpg new file mode 100644 index 0000000..93e984e Binary files /dev/null and b/GUI/xephem/gallery/ngc6888-27jul02-ha.jpg differ diff --git a/GUI/xephem/gallery/ngc869-2002oct06-lrgb.jpg b/GUI/xephem/gallery/ngc869-2002oct06-lrgb.jpg new file mode 100644 index 0000000..b5470c5 Binary files /dev/null and b/GUI/xephem/gallery/ngc869-2002oct06-lrgb.jpg differ diff --git a/GUI/xephem/gallery/pui-17-virgo-anno1000.jpg b/GUI/xephem/gallery/pui-17-virgo-anno1000.jpg new file mode 100644 index 0000000..7ea0f2c Binary files /dev/null and b/GUI/xephem/gallery/pui-17-virgo-anno1000.jpg differ diff --git a/GUI/xephem/gallerymenu.c b/GUI/xephem/gallerymenu.c new file mode 100644 index 0000000..6864120 --- /dev/null +++ b/GUI/xephem/gallerymenu.c @@ -0,0 +1,680 @@ +/* code to manage the picture gallery window + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lilxml.h" +#include "xephem.h" + +static XMLEle *selGIP (void); +static Obj *selInDB (void); +static int gt_cmp (const void *g0, const void *g1); +static int namefind (char *name); +static void gal_create_shell (void); +static void gal_help_cb (Widget w, XtPointer client, XtPointer data); +static void gal_popdown_cb (Widget w, XtPointer client, XtPointer data); +static void gal_close_cb (Widget w, XtPointer client, XtPointer data); +static void gal_rescan_cb (Widget w, XtPointer client, XtPointer data); +static void gal_sel_cb (Widget w, XtPointer client, XtPointer data); +static void gal_skypt_cb (Widget w, XtPointer client, XtPointer data); +static void galReset (void); +static void addName(XMLEle *np); +static void read1Catalog (FILE *fp, XMLEle **dp, char *idxpath); +static void readCatalogs (void); +static void fillReport (XMLEle *name); +static void fillImage (XMLEle *name); +static void fillList(void); +static char *trimws (char *s); + +static Widget galshell_w; /* main shell */ +static Widget report_w; /* TF for showing info */ +static Widget sel_w; /* SL for picking picture */ +static Widget pl_w; /* picture label */ +static Widget sky_w; /* sky-point PB */ +static Widget psw_w; /* picture scroller window */ + +static char *sdir; /* handy malloced path to shared gallery dir */ +static char *pdir; /* handy malloced path to private gallery dir */ + +static XMLEle *galroot[2]; /* XML doc tree for the shar and priv gallery */ +static XMLEle **gallery; /* malloced pointers to all elements */ +static int ngallery; /* n gallery entries in use */ +static int mgallery; /* n gallery entries malloced */ +#define NMALINC 100 /* n to grow gallery[] each time */ + +static char galcategory[] = "Image Gallery"; + +/* bring up the picture menu, creating if first time */ +void +gal_manage() +{ + if (!galshell_w) { + gal_create_shell(); + readCatalogs(); + fillList(); + if (ngallery > 0) + XmListSelectPos (sel_w, 1, True); /* show first */ + } + + XtPopup (galshell_w, XtGrabNone); + set_something (galshell_w, XmNiconic, (XtArgVal)False); +} + +/* return index of first gallery entry with any name for op, else -1. + * ignore case and whitespace + */ +int +gal_opfind (Obj *op) +{ + DupName *dnp; + int i, ndn, gi; + + /* first try primary name */ + gi = namefind (op->o_name); + if (gi >= 0) + return (gi); + + /* then try other entries in dup name list */ + ndn = db_dups (&dnp); + for (i = 0; i < ndn; i++) { + if (dnp[i].op == op && strcmp (dnp[i].nm, op->o_name)) { + gi = namefind (dnp[i].nm); + if (gi >= 0) + return (gi); + } + } + + /* nope */ + return (-1); +} + +/* scroll to and display gallery entry for given object, if any */ +void +gal_opscroll (Obj *op) +{ + int i = gal_opfind (op); + + if (i < 0) + return; + + if (!isUp (galshell_w)) + gal_manage(); + + /* select item (1 based!) and let its callback put up the image */ + XmListSelectPos (sel_w, i+1, True); + XmListSetPos (sel_w, i+1); /* selecting does not scroll too */ +} + +/* called to put up or remove the watch cursor. */ +void +gal_cursor (Cursor c) +{ + Window win; + + if (galshell_w && (win = XtWindow(galshell_w)) != 0) { + Display *dsp = XtDisplay(galshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create a shell to allow user to manage pictures . */ +static void +gal_create_shell () +{ + Widget h_w, pw_w; + Widget galform_w; + Widget w; + Arg args[20]; + int n; + + /* create outter shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Image Gallery"); n++; + XtSetArg (args[n], XmNiconName, "Gallery"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + galshell_w = XtCreatePopupShell ("Gallery", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (galshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (galshell_w, XmNpopdownCallback, gal_popdown_cb, NULL); + setup_icon (galshell_w); + sr_reg (galshell_w, "XEphem*Gallery.x", galcategory, 0); + sr_reg (galshell_w, "XEphem*Gallery.y", galcategory, 0); + sr_reg (galshell_w, "XEphem*Gallery.height", galcategory, 0); + sr_reg (galshell_w, "XEphem*Gallery.width", galcategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 10); n++; + galform_w = XmCreateForm (galshell_w, "GalF", args, n); + XtAddCallback (galform_w, XmNhelpCallback, gal_help_cb, 0); + XtManageChild(galform_w); + + /* controls across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 8); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 23); n++; + w = XmCreatePushButton (galform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, gal_close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 31); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 46); n++; + w = XmCreatePushButton (galform_w, "Rescan", args, n); + XtAddCallback (w, XmNactivateCallback, gal_rescan_cb, NULL); + wtip (w, "Search again for gallery images"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 54); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 69); n++; + sky_w = XmCreatePushButton (galform_w, "GS", args, n); + XtAddCallback (sky_w, XmNactivateCallback, gal_skypt_cb, NULL); + set_xmstring (sky_w, XmNlabelString, "Sky Point"); + wtip (sky_w, "Zoom Sky View to this object"); + XtManageChild (sky_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 77); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 92); n++; + h_w = XmCreatePushButton (galform_w, "Help", args, n); + XtAddCallback (h_w, XmNactivateCallback, gal_help_cb, NULL); + XtManageChild (h_w); + + /* scrolled list on right */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, h_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNwidth, 150); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + sel_w = XmCreateScrolledList (galform_w, "GalSL", args, n); + XtAddCallback (sel_w, XmNbrowseSelectionCallback, gal_sel_cb, NULL); + XtManageChild (sel_w); + + /* paned window */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, h_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, XtParent(sel_w)); n++; + XtSetArg (args[n], XmNsashHeight, 10); n++; + XtSetArg (args[n], XmNspacing, 14); n++; + pw_w = XmCreatePanedWindow (galform_w, "GalPW", args, n); + XtManageChild (pw_w); + + /* scrolled window on top for image */ + + n = 0; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + psw_w = XmCreateScrolledWindow (pw_w, "GalSW", args, n); + XtManageChild (psw_w); + + /* workarea is label for picture pixmap - easy! */ + + n = 0; + XtSetArg (args[n], XmNrecomputeSize, True); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + pl_w = XmCreateLabel (psw_w, "GalDL", args, n); + XtManageChild (pl_w); + + n = 0; + XtSetArg (args[n], XmNworkWindow, pl_w); n++; + XtSetValues (psw_w, args, n); + + /* scrolled text below for report */ + + n = 0; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNwordWrap, True); n++; + XtSetArg (args[n], XmNscrollHorizontal, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNskipAdjust, True); n++; + report_w = XmCreateScrolledText (pw_w, "Report", args, n); + sr_reg (report_w, "XEphem*Gallery*Report.height", galcategory, 0); + XtManageChild (report_w); +} + +/* read files and create gallery[] + */ +static void +readCatalogs() +{ + char buf[1024]; + char *dir[2]; + int i; + + /* reset current list, if any */ + galReset(); + + /* init dir names */ + if (!sdir) { + sprintf (buf, "%s/gallery", getShareDir()); + sdir = XtNewString (buf); /* beware Rescan */ + sprintf (buf, "%s/gallery", getPrivateDir()); + pdir = XtNewString (buf); /* beware Rescan */ + } + dir[0] = sdir; + dir[1] = pdir; + + /* search shared and private dirs */ + for (i = 0; i < XtNumber(dir); i++) { + struct dirent *dp; + DIR *dirp; + FILE *fp; + + dirp = opendir (dir[i]); + if (!dirp) + continue; + + while ((dp = readdir (dirp)) != NULL) { + if (strcmp (dp->d_name+strlen(dp->d_name)-4, ".gly") == 0) { + sprintf (buf, "%s/%s", dir[i], dp->d_name); + fp = fopenh (buf, "r"); + if (fp) { + read1Catalog (fp, &galroot[i], buf); + fclose (fp); + } else if (errno != ENOENT) { + xe_msg (1, "%s:\n%s", buf, syserrstr()); + } + } + } + + closedir (dirp); + } +} + +/* read in a gallery index, save XML doc in *dp, add to gallery[] */ +static void +read1Catalog (FILE *fp, XMLEle **dp, char *idxpath) +{ + LilXML *lp = newLilXML(); + XMLEle *root = NULL; + XMLEle *ep, *ip; + int c; + + /* collect gallery element */ + while ((c = fgetc(fp)) != EOF) { + char buf[1024]; + root = readXMLEle (lp, c, buf); + if (root) + break; + if (buf[0]) { + xe_msg (1, "%s:\n%s", idxpath, buf); + return; + } + } + if (!root || strcmp (tagXMLEle(root), "gallery")) { + xe_msg (1, "%s:\ngallery element not found", idxpath); + return; + } + + /* add one element to gallery[] for each name */ + for (ep = nextXMLEle(root,1); ep != NULL; ep = nextXMLEle(root,0)) + if (!strcmp (tagXMLEle(ep), "image")) + for (ip = nextXMLEle(ep,1); ip != NULL; ip = nextXMLEle(ep,0)) + if (!strcmp (tagXMLEle(ip), "name")) + addName (ip); + + /* save doc, don't need lil scanner any more */ + *dp = root; + delLilXML (lp); +} + +/* compare pcdata in two XMLEle **, qsort-style */ +static int +gt_cmp (const void *e1, const void *e2) +{ + return (strnncmp (pcdataXMLEle(*(XMLEle **)e1), pcdataXMLEle(*(XMLEle **)e2))); +} + + +/* fill the target selection list from gallery[] which is a list of name elems. + */ +static void +fillList() +{ + XmString *xmstrtbl; + int i; + + /* sort galery by name */ + qsort (gallery, ngallery, sizeof(gallery[0]), gt_cmp); + + /* create tmp list of XmStrings */ + xmstrtbl = (XmString *) XtMalloc (ngallery * sizeof(XmString)); + for (i = 0; i < ngallery; i++) + xmstrtbl[i]= XmStringCreateSimple(trimws(pcdataXMLEle(gallery[i]))); + + /* replace list */ + XtUnmanageChild (sel_w); + XmListDeleteAllItems (sel_w); + XmListAddItems (sel_w, xmstrtbl, ngallery, 0); + XtManageChild (sel_w); + + /* clean up tmp list */ + for (i = 0; i < ngallery; i++) + XmStringFree (xmstrtbl[i]); + XtFree ((char *)xmstrtbl); +} + +/* Using info from XML name element nep, fill description in report_w */ +static void +fillReport (XMLEle *nep) +{ + XMLEle *p, *e; + int l; + + /* new report */ + XtUnmanageChild (report_w); + XmTextSetString (report_w, ""); + + /* add each name one per line */ + p = parentXMLEle (nep); + l = 0; + for (e = nextXMLEle(p,1); e != NULL; e = nextXMLEle(p,0)) { + if (strcmp (tagXMLEle(e), "name") == 0) { + char *name = pcdataXMLEle(e); + XmTextInsert (report_w, l, name); + l += strlen (name); + XmTextInsert (report_w, l++, "\n"); + } + } + XmTextInsert (report_w, l++, "\n"); + + /* add description. replace isolated \n with blank so widget can do + * the wrapping + */ + e = findXMLEle (p, "description"); + if (e) { + char *dp, *des = pcdataXMLEle (e); + for (dp = des; *dp; dp++) + if (dp[0] == '\n' && dp[-1] != '\n' && dp[1] != '\n') + *dp = ' '; + XmTextInsert (report_w, l, des); + } + + /* show */ + XmTextShowPosition (report_w, 0); + XtManageChild (report_w); +} + +/* Using info from XML name element nep, fill in the display image */ +static void +fillImage (XMLEle *nep) +{ + static XColor xcol[256]; + static int xcolset; + XMLEle *f; + Pixmap oldpm, pm; + char buf[1024]; + char *fn; + FILE *fp; + int w, h; + + /* open file, look in private then shared dirs */ + f = findXMLEle (parentXMLEle (nep), "file"); + if (!f) { + xe_msg (1, "Gallery entry %s has no file", pcdataXMLEle(nep)); + return; + } + fn = trimws(pcdataXMLEle(f)); + sprintf (buf, "%s/%s", pdir, fn); + fp = fopenh (buf, "r"); + if (!fp) { + sprintf (buf, "%s/%s", sdir, fn); + fp = fopenh (buf, "r"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return; + } + } + + /* free last batch of colors */ + if (xcolset) { + freeXColors (XtD, xe_cm, xcol, XtNumber(xcol)); + xcolset = 0; + } + + /* create the expose pixmap */ + if (jpeg2pm (XtD, xe_cm, fp, &w, &h, &pm, xcol, buf) < 0) { + xe_msg (1, "%s:\n%s", fn, buf); + fclose (fp); + return; + } + xcolset = 1; + + /* replace label pixmap and center */ + get_something (pl_w, XmNlabelPixmap, (XtArgVal)&oldpm); + if (oldpm != XmUNSPECIFIED_PIXMAP) + XFreePixmap (XtD, oldpm); + set_something (pl_w, XmNlabelPixmap, (XtArgVal)pm); + centerScrollBars(psw_w); + + /* clean up */ + fclose (fp); +} + +/* add the given element to the gallery list, growing if necessary */ +static void +addName(XMLEle *np) +{ + if (ngallery == mgallery) + gallery = (XMLEle **) XtRealloc ((char *)gallery, + (mgallery+=NMALINC)*sizeof(XMLEle *)); + gallery[ngallery++] = np; +} + +/* return index of first gallery entry with name, else -1. + * ignore case and whitespace + */ +static int +namefind (char *name) +{ + int t, b; + + /* binary search */ + t = ngallery-1; + b = 0; + while (b <= t) { + int m = (t+b)/2; + int c = strnncmp (name, pcdataXMLEle(gallery[m])); + if (c == 0) + return (m); + if (c < 0) + t = m-1; + else + b = m+1; + } + + return (-1); +} + +/* reclaim all storage used for the current gallery */ +static void +galReset() +{ + if (galroot[0]) { + delXMLEle (galroot[0]); + galroot[0] = NULL; + } + if (galroot[1]) { + delXMLEle (galroot[1]); + galroot[1] = NULL; + } + if (gallery) { + /* pointers in this list were in galroot -- already freed */ + XtFree ((char *)gallery); + gallery = NULL; + } + ngallery = mgallery = 0; +} + +/* ARGSUSED */ +static void +gal_help_cb (Widget w, XtPointer client, XtPointer data) +{ + static char *msg[] = { +"This tool opens and displays picture in the gallery" +}; + + hlp_dialog ("Gallery", msg, XtNumber(msg)); +} + +/* ARGSUSED */ +static void +gal_popdown_cb (Widget w, XtPointer client, XtPointer data) +{ +} + +/* ARGSUSED */ +static void +gal_close_cb (Widget w, XtPointer client, XtPointer data) +{ + XtPopdown (galshell_w); +} + +/* ARGSUSED */ +static void +gal_rescan_cb (Widget w, XtPointer client, XtPointer data) +{ + readCatalogs(); + fillList(); + XtSetSensitive(sky_w, False); +} + +/* called when a list selection is made */ +/* ARGSUSED */ +static void +gal_sel_cb (Widget w, XtPointer client, XtPointer data) +{ + XMLEle *nep; + + nep = selGIP(); + if (!nep) + return; + + watch_cursor (1); + fillReport (nep); + fillImage (nep); + XtSetSensitive (sky_w, !!selInDB()); + watch_cursor (0); +} + +/* ARGSUSED */ +static void +gal_skypt_cb (Widget w, XtPointer client, XtPointer data) +{ + Obj *op = selInDB(); + + if (op) { + db_update (op); + sv_point (op); + } +} + +/* scan db for object whose name matches that which is currently selected. + * if find return ptr, else NULL + */ +static Obj * +selInDB () +{ + DupName *dnp; + int ndn = db_dups(&dnp); + XMLEle *nep; + int i; + + nep = selGIP(); + if (!nep) + return (NULL); + + for (i = 0; i < ndn; i++) + if (!strnncmp (pcdataXMLEle(nep), dnp[i].nm)) + return (dnp[i].op); + + return (NULL); +} + +/* return pointer to element of currently selected target, else NULL */ +XMLEle * +selGIP () +{ + int *pos, npos; + XMLEle *nep; + + if (!XmListGetSelectedPos (sel_w, &pos, &npos)) + return (NULL); + nep = gallery[pos[0]-1]; /* List is 1-based */ + XtFree ((char *)pos); + return (nep); +} + +/* trim trailing whitespace off s[] both ends IN PLACE */ +static char * +trimws (char *s) +{ + char *s0; + + while (isspace(*s)) + s++; + s0 = s; + + while (*s) + s++; + + do + *s-- = '\0'; + while (s >= s0 && isspace(*s)); + + return (s0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: gallerymenu.c,v $ $Date: 2005/10/15 13:12:59 $ $Revision: 1.25 $ $Name: $"}; + diff --git a/GUI/xephem/glance.c b/GUI/xephem/glance.c new file mode 100644 index 0000000..96195f1 --- /dev/null +++ b/GUI/xephem/glance.c @@ -0,0 +1,1216 @@ +/* code to manage the Night-at-a-Glance feature. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static int ng_ison (void); +static void ng_create_shell (void); +static void ng_create_popup (void); +static void ng_1col_cb (Widget w, XtPointer client, XtPointer call); +static void ng_print_cb (Widget w, XtPointer client, XtPointer call); +static void ng_da_input_cb (Widget w, XtPointer client, XtPointer call); +static void ng_print (void); +static void ng_ps_annotate (void); +static void ng_settime_cb (Widget w, XtPointer client, XtPointer call); +static void ng_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void ng_close_cb (Widget w, XtPointer client, XtPointer call); +static void ng_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void ng_init_gcs (void); +static void ng_help_cb (Widget w, XtPointer client, XtPointer call); +static void ng_exp_cb (Widget w, XtPointer client, XtPointer call); +static void ng_redraw (void); +static void ng_refresh (XExposeEvent *ep); +static void ng_drawpm (void); +static int ng_ano (double *fracx, double *fracy, int *xp, int *yp, int w2x, + int arg); + +/* main's widgets */ +static Widget ngshell_w; /* main shell */ +static Widget ngda_w; /* image view DrawingArea */ +static Widget pu_w; /* popup shell */ +static Widget puname_w; /* popup objects name label */ +static Pixmap ng_pm; /* image view staging pixmap */ +static Widget dt_w; /* main date/time stamp widget */ +static Widget ngsolid_w; /* set when want to use a solid color */ + +static GC ng_gc; /* misc GC */ +static Pixel ngsolid_p; /* color of ngsolid_tb set */ +static XFontStruct *ng_vfs; /* views font */ +static XFontStruct *ng_lfs; /* label font */ +static int ng_w, ng_h; /* current ngda_w size */ +static int skyh; /* sky region height, pixels */ +static int midx; /* window x @ local midnight */ +static int nowx; /* window x @ Now.n_mjd */ + +static Pixel *ngcolors; /* gray-scale ramp */ +static int ncolors; /* actual number in ngcolors[] */ + +#define UPLT 3 /* Up-time line thickness, pixels */ +#define TMLT 2 /* major tick mark line thickness, pixels */ + +/* info about stuff to put in the popup */ +typedef struct { + char *prompt; /* prompt, or NULL for gap */ + DMCol id; /* one of *_ID from dm.h */ + char *tip; /* helpful tip */ + Widget w; /* label widget */ +} PopupInfo; +static PopupInfo puinfo[] = { + {"Rise time:", RSTIME_ID, + "Time at which this object rises during this 24-hour period, in Preference time zone"}, + {"Rise az:", RSAZ_ID, + "Azimuth at which this object rises, degrees E of N"}, + {"Transit time:", TRTIME_ID, + "Time at which this object transits during this 24-hour period, in Preference time zone"}, + {"Transit alt:", TRALT_ID, + "Altitude at which this object transits during this 24-hour period, DD:MM"}, + {"Transit az:", TRAZ_ID, + "Azimuth at which this object achieves maximum elevation during this 24-hour period, DDD:MM"}, + {"Set time:", SETTIME_ID, + "Time at which this object sets during this 24-hour period, in Preference time zone"}, + {"Set Az:", SETAZ_ID, + "Azimuth at which this object set, degrees E of N"}, +}; +static Now punow; /* Now at popup cursor loc */ +static Widget punow_w; /* PB to set XEphem time to punow */ +static Widget punowsep_w; /* separator about punowpb_w */ + +static char naagcategory[] = "Night at a Glance"; /* Save category */ + +/* called when the NG view is activated via the main menu pulldown. + * if first time, build everything, else just get going. + */ +void +ng_manage () +{ + if (!ngshell_w) { + ng_create_shell(); + ng_init_gcs(); + } + + XtPopup (ngshell_w, XtGrabNone); + set_something (ngshell_w, XmNiconic, (XtArgVal)False); + + setXRes (ng_viewupres(), "1"); +} + +/* commanded from main to update with a new set of circumstances */ +/* ARGSUSED */ +void +ng_update (np, how_much) +Now *np; +int how_much; +{ + /* only if we're up */ + if (!ng_ison()) + return; + ng_redraw(); +} + +/* list of favorites has changed */ +void +ng_newfavs() +{ + /* only if we're up */ + if (!ng_ison()) + return; + ng_redraw(); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +ng_newres() +{ + if (!ngshell_w) + return; + ng_init_gcs(); + ng_update (mm_get_now(), 1); +} + +/* called to put up or remove the watch cursor. */ +void +ng_cursor (c) +Cursor c; +{ + Window win; + + if (ngshell_w && (win = XtWindow(ngshell_w)) != 0) { + Display *dsp = XtDisplay(ngshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +ng_viewupres() +{ + return ("NaaGViewUp"); +} + + +static int +ng_ison() +{ + return (isUp(ngshell_w)); +} + +static void +ng_create_shell() +{ + Widget mb_w, pd_w, cb_w, fr_w; + Widget ngform_w; + Widget w; + Arg args[20]; + int n; + + /* create master shell and a form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Night at a Glance"); n++; + XtSetArg (args[n], XmNiconName, "Night"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + ngshell_w = XtCreatePopupShell ("NaaGlance", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (ngshell_w, XmNcolormap, (XtArgVal)xe_cm); + setup_icon (ngshell_w); + XtAddCallback (ngshell_w, XmNpopdownCallback, ng_popdown_cb, 0); + sr_reg (ngshell_w, "XEphem*NaaGlance.width", naagcategory, 0); + sr_reg (ngshell_w, "XEphem*NaaGlance.height", naagcategory, 0); + sr_reg (ngshell_w, "XEphem*NaaGlance.x", naagcategory, 0); + sr_reg (ngshell_w, "XEphem*NaaGlance.y", naagcategory, 0); + sr_reg (NULL, ng_viewupres(), naagcategory, 0); + + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + ngform_w = XmCreateForm (ngshell_w, "NaaGlanceF", args, n); + XtAddCallback (ngform_w, XmNhelpCallback, ng_help_cb, 0); + XtManageChild (ngform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (ngform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* the "OneColor" push button */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + ngsolid_w = XmCreateToggleButton (pd_w, "OneColor", args, n); + XtAddCallback (ngsolid_w, XmNvalueChangedCallback, ng_1col_cb,NULL); + set_xmstring (ngsolid_w, XmNlabelString, "One color"); + wtip (ngsolid_w, "Use same color for all objects"); + XtManageChild (ngsolid_w); + sr_reg (ngsolid_w, NULL, naagcategory, 0); + + /* the "Print" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "MPrint", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, ng_print_cb, 0); + wtip (w, "Print the current map"); + XtManageChild (w); + + /* the "Favorites" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "NF", args, n); + set_xmstring (w, XmNlabelString, "Favorites..."); + XtAddCallback (w, XmNactivateCallback,(XtCallbackProc)fav_manage,0); + wtip (w, "Print the current map"); + XtManageChild (w); + + /* the "annotation" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "MAnn", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* the "movie" push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "ML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, ng_mloop_cb, 0); + wtip (w, "Add this chart to the movie loop"); + XtManageChild (w); + + /* add a separator */ + n = 0; + w = XmCreateSeparator (pd_w, "CtS", args, n); + XtManageChild (w); + + /* add the close button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, ng_close_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, ng_help_cb, 0); + XtManageChild (w); + wtip (w, "More info about this dialog"); + + /* make a label for the date stamp */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + dt_w = XmCreateLabel (ngform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* sets initial size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make a drawing area for the image view in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fr_w = XmCreateFrame (ngform_w, "Frame", args, n); + XtManageChild (fr_w); + + n = 0; + ngda_w = XmCreateDrawingArea (fr_w, "Map", args, n); + XtAddCallback (ngda_w, XmNexposeCallback, ng_exp_cb, NULL); + XtAddCallback (ngda_w, XmNinputCallback, ng_da_input_cb, 0); + XtManageChild (ngda_w); +} + +static void +ng_create_popup() +{ + Arg args[20]; + Widget w; + int i, n; + + /* create the outer form */ + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + pu_w = XmCreatePopupMenu (ngda_w, "NGPopup", args, n); + + n = 0; + puname_w = XmCreateLabel (pu_w, "PUName", args, n); + wtip (puname_w, "Name of object"); + XtManageChild (puname_w); + + /* create the label widgets */ + for (i = 0; i < XtNumber(puinfo); i++) { + PopupInfo *pip = &puinfo[i]; + + n = 0; + w = XmCreateLabel (pu_w, "NGPopUL", args, n); + pip->w = w; + XtManageChild (w); + wtip (w, pip->tip); + + if (!pip->prompt) + set_xmstring (w, XmNlabelString, " "); + } + + /* create the Set time PB */ + n = 0; + punowsep_w = XmCreateSeparator (pu_w, "Sep", args, n); + XtManageChild (punowsep_w); + + n = 0; + w = XmCreateLabel (pu_w, "ST", args, n); + set_xmstring (w, XmNlabelString, "Set Main time to:"); + XtManageChild (w); + + n = 0; + punow_w = XmCreatePushButton (pu_w, "Set", args, n); + XtAddCallback (punow_w, XmNactivateCallback, ng_settime_cb, NULL); + wtip (punow_w, + "Set main XEphem time to moment at mouse click, shown here"); + XtManageChild (punow_w); +} + +/* callback from the Print PB */ +/* ARGSUSED */ +static void +ng_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Night-at-a-Glance", ng_print); +} + +/* callback from the One Color TB */ +/* ARGSUSED */ +static void +ng_1col_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ng_redraw(); +} + +/* callback from the inputCallback*/ +/* ARGSUSED */ +static void +ng_da_input_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Now *np = mm_get_now(); + int nlfavs; + char buf[1024]; + Obj **lfavs; + XEvent *ev; + int i; + + /* create popup first time */ + if (!pu_w) + ng_create_popup(); + + /* confirm button 3 press event */ + if (c->reason != XmCR_INPUT) + return; + ev = c->event; + if (ev->xany.type != ButtonPress || ev->xbutton.button != 3) + return; + + /* set punow to time under cursor */ + memcpy ((void *)&punow, (void *)np, sizeof(Now)); + np = &punow; + mjd += (double)(ev->xbutton.x-nowx)/(2*midx); /* 1 day wide */ + + /* set time string in label */ + fs_timestamp (np, buf); + set_xmstring (punow_w, XmNlabelString, buf); + + /* show stats too if over an object */ + nlfavs = fav_get_loaded (&lfavs); + if (ev->xbutton.y < skyh && ev->xbutton.y >= 0 && nlfavs > 0) { + Obj *op = lfavs[ev->xbutton.y*nlfavs/skyh]; + RiseSet rs; + + /* need separator */ + XtManageChild (punowsep_w); + + /* set name */ + set_xmstring (puname_w, XmNlabelString, op->o_name); + XtManageChild (puname_w); + + /* find and set info */ + dm_riset (np, op, &rs); + for (i = 0; i < XtNumber(puinfo); i++) { + PopupInfo *pip = &puinfo[i]; + if (pip->prompt) { + char fmt[64]; + dm_colFormat (np, op, &rs, pip->id, fmt); + sprintf (buf, "%s %s", pip->prompt, fmt); + set_xmstring (pip->w, XmNlabelString, buf); + XtManageChild (pip->w); + } + } + } else { + XtUnmanageChild (punowsep_w); + XtUnmanageChild (puname_w); + for (i = 0; i < XtNumber(puinfo); i++) + XtUnmanageChild(puinfo[i].w); + } + + /* popup */ + XmMenuPosition (pu_w, (XButtonPressedEvent *)ev); + XtManageChild (pu_w); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +ng_print () +{ + /* must be up */ + if (!ng_ison()) { + xe_msg (1, "N-ata-G must be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* fit view in square across the top and prepare to capture X calls */ + if (ng_w > ng_h) + XPSXBegin (ng_pm, 0, 0, ng_w, ng_h, 1*72, 10*72, (int)(6.5*72)); + else { + int pw = (int)(72*6.5*ng_w/ng_h+.5); /* width on paper as 6.5 hi */ + XPSXBegin (ng_pm, 0, 0, ng_w, ng_h, (int)((8.5*72-pw)/2), 10*72,pw); + } + + /* redraw everything now */ + ng_redraw(); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + ng_ps_annotate (); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +ng_ps_annotate () +{ + Now *np = mm_get_now(); + char dir[128]; + char buf[128]; + int ctr = 306; /* = 8.5*72/2 */ + int lx = 145, rx = 460; + char *site; + int y; + + /* caption */ + y = AROWY(10); + (void) strcpy (buf, "XEphem Night-at-a-Glance"); + (void) sprintf (dir, "(%s) %d %d cstr", buf, ctr, y); + XPSDirect (dir); + + /* put site name under caption */ + site = mm_getsite(); + if (site) { + y = AROWY(9); + (void) sprintf (dir, "(%s) %d %d cstr\n", + XPSCleanStr(site,strlen(site)), ctr, y); + XPSDirect (dir); + } + + /* date and time on the left */ + y = AROWY(9); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + (void) sprintf (dir, "(UTC Date:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + y = AROWY(8); + fs_time (buf, mjd_hr(mjd)); + (void) sprintf (dir, "(UTC Time:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + /* lat/long on the right */ + y = AROWY(9); + + fs_sexa (buf, raddeg(fabs(lat)), 3, 3600); + (void) sprintf (dir, "(Latitude:) %d %d rstr (%s %c) %d %d lstr\n", + rx, y, buf, lat < 0 ? 'S' : 'N', rx+10, y); + XPSDirect (dir); + + y = AROWY(8); + fs_sexa (buf, raddeg(fabs(lng)), 4, 3600); + (void) sprintf (dir,"(Longitude:) %d %d rstr (%s %c) %d %d lstr\n", + rx, y, buf, lng < 0 ? 'W' : 'E', rx+10, y); + XPSDirect (dir); +} + +/* callback from PB in popup to set XEphem time to punow. */ +/* ARGSUSED */ +static void +ng_settime_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + mm_newcaldate (punow.n_mjd); +} + +/* callback from ngshell_w being popped down. */ +/* ARGSUSED */ +static void +ng_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (ng_pm) { + XFreePixmap (XtD, ng_pm); + ng_pm = 0; + } + + /* record we are now down */ + setXRes (ng_viewupres(), "0"); +} + +/* called from Close button */ +static void +ng_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (ngshell_w); + /* popping down ngshell_w will do all the real work */ +} + +/* called to add graph to movie loop */ +static void +ng_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (ng_pm, dt_w); +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +ng_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "This is the night at a glance.", + }; + + hlp_dialog ("NightAtAGlance", msg, XtNumber(msg)); +} + +/* expose (or reconfig) of NAAG drawing area. + */ +/* ARGSUSED */ +static void +ng_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Display *dsp = XtDisplay(ngda_w); + Window win = XtWindow(ngda_w); + Window root; + int x, y; + unsigned int bw, d; + unsigned int wid, hei; + + switch (c->reason) { + case XmCR_EXPOSE: { + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected ngda_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry (dsp, win, &root, &x, &y, &wid, &hei, &bw, &d); + + if (!ng_pm || (int)wid != ng_w || (int)hei != ng_h) { + if (ng_pm) { + XFreePixmap (dsp, ng_pm); + ng_pm = (Pixmap) NULL; + } + + ng_pm = XCreatePixmap (dsp, win, wid, hei, d); + ng_w = wid; + ng_h = hei; + + ng_redraw(); + } else { + /* same size; just copy from the pixmap */ + ng_refresh(NULL); + } +} + +/* redraw the current scene from scratch */ +static void +ng_redraw() +{ + ng_drawpm (); + ng_refresh(NULL); + timestamp (mm_get_now(), dt_w); +} + +/* copy the ng_pm pixmap to the drawing area ngda_w. + * if ep just copy that much, else copy all. + */ +static void +ng_refresh(ep) +XExposeEvent *ep; +{ + Display *dsp = XtDisplay(ngda_w); + Window win = XtWindow (ngda_w); + Pixmap pm = ng_pm; + unsigned w, h; + int x, y; + + /* ignore of no pixmap now */ + if (!pm) + return; + + if (ep) { + x = ep->x; + y = ep->y; + w = ep->width; + h = ep->height; + } else { + w = ng_w; + h = ng_h; + x = y = 0; + } + + XCopyArea (dsp, pm, win, ng_gc, x, y, w, h, x, y); +} + +/* get the gray scale and other one-time pixel-related stuff. + * N.B. just call this once. + * TODO: reclaim old stuff if called again. + */ +static void +ng_init_gcs() +{ + Window win = XtWindow(toplevel_w); + Display *dsp = XtD; + + /* gc for pixmap copying and wide lines */ + ng_gc = XCreateGC (dsp, win, 0L, NULL); + + /* prepare for strings */ + get_views_font (dsp, &ng_vfs); + get_xmlabel_font (dt_w, &ng_lfs); + + /* build gray ramp for night fade */ + ncolors = gray_ramp (dsp, xe_cm, &ngcolors); + + /* color for solid, when/if enabled */ + (void) get_color_resource (ngshell_w, "NaaGOneColor", &ngsolid_p); +} + +/* find x positions of line for given rise/set circumstances. + * we position across ng_w based on local time with 0 in the center. + * N.B. this is just the geometry, we ignore rp->rs_flags + */ +static void +rs_x (np, rp, xr, xs) +Now *np; +RiseSet *rp; +int *xr, *xs; +{ + double t; + + t = fmod (mjd_hr(rp->rs_risetm)-tz+36.0, 24.0)/24.0; + *xr = (int)floor(ng_w*t+0.5); + t = fmod (mjd_hr(rp->rs_settm)-tz+36.0, 24.0)/24.0; + *xs = (int)floor(ng_w*t+0.5); +} + +/* find x positions of line for given rise/set circumstances. + * we position across ng_w based on local time where midnight is at midx. + * N.B. do not use this for EARTHSAT, use rs_es(). + */ +static int +rs_xrs (np, op, xr, xs) +Now *np; +Obj *op; +int *xr, *xs; +{ + RiseSet rs; + int nowright; + int badrise, badset; + + /* find x's */ + if (op->o_type == UNDEFOBJ) + return (-1); + dm_riset (np, op, &rs); + if (rs.rs_flags & (RS_RISERR|RS_SETERR|RS_NEVERUP)) + return (-1); + rs_x (np, &rs, xr, xs); + + /* if event occurs on opposite side of midnight as now or does not + * occur at all today, redo for opposite day + */ + nowright = (nowx > midx); + badrise = (rs.rs_flags & RS_NORISE) || (*xr > midx) != nowright; + badset = (rs.rs_flags & RS_NOSET) || (*xs > midx) != nowright; + if (badrise || badset) { + Now daynow; + RiseSet dayrs; + int dayxr, dayxs; + + memcpy ((void*)&daynow, (void*)np, sizeof(Now)); + daynow.n_mjd += nowright ? -1 : 1; + dm_riset (&daynow, op, &dayrs); + rs_x (&daynow, &dayrs, &dayxr, &dayxs); + if (rs.rs_flags & (RS_RISERR|RS_SETERR|RS_NEVERUP)) + return (-1); + if (badrise) { + *xr = dayxr; + rs.rs_flags &= ~RS_NORISE; /* definitely known now */ + } + if (badset) { + *xs = dayxs; + rs.rs_flags &= ~RS_NOSET; /* definitely known now */ + } + } + + /* catch a few odd cases */ + if (rs.rs_flags & (RS_CIRCUMPOLAR|RS_NORISE)) + *xr = 0; /* already up */ + if (rs.rs_flags & (RS_CIRCUMPOLAR|RS_NOSET)) + *xs = ng_w; /* still up */ + + return (0); +} + +/* plot all visible periods for EARTHSAT op. + * set xrp to left-most rise, xsp to right-most set. + */ +static int +rs_es (np, op, y, xrp, xsp) +Now *np; +Obj *op; +int y; +int *xrp, *xsp; +{ + Display *dsp = XtD; + RiseSet rs; + Now daynow; + double emjd; + int xr, xs; + int n; + + /* start at beginning of window and go for 1 day */ + memcpy (&daynow, np, sizeof(daynow)); + daynow.n_mjd = mjd_day(mjd - tz/24.0) + tz/24.0 + 0.5; + if (nowx > midx) + daynow.n_mjd -= 1; + *xrp = 2*midx; + *xsp = 0; + n = 0; + for (emjd = daynow.n_mjd + 1; daynow.n_mjd < emjd; + daynow.n_mjd = rs.rs_settm+60./SPD) { + dm_riset (&daynow, op, &rs); + if (rs.rs_flags&(RS_ERROR|RS_RISERR|RS_SETERR|RS_NEVERUP|RS_NORISE)) + break; + rs_x (&daynow, &rs, &xr, &xs); + if (rs.rs_risetm > emjd) + break; /* off right end */ + if (rs.rs_flags & RS_NOSET) { + xs = 2*midx; /* up through end */ + rs.rs_settm = emjd; + } + if (rs.rs_settm < rs.rs_risetm) + continue; /* wrong dir to use */ + if (rs.rs_settm > emjd) + xs = 2*midx; /* sets after end */ + if (xs < xr+2) + xs = xr+2; /* min seeable */ + XPSDrawLine (dsp, ng_pm, ng_gc, xr, y, xs, y); + n++; + if (xr < *xrp) + *xrp = xr; + if (xs < *xsp) + *xsp = xs; + } + + return (n ? 0 : -1); +} + +/* draw the entire scene in ng_pm, which is known to be ng_w x ng_h. + * N.B. this just fills the pixmap; call ng_refresh() to copy to the screen. + */ +static void +ng_drawpm () +{ + static char utclabel[] = "UTC"; + Now *np = mm_get_now(); + Display *dsp = XtD; + char buf[32], buf2[32]; + int risex, setx; + int dawnx, duskx; + double dawn, dusk; + int nlfavs; + Obj **lfavs; + int hw, n; + int status; + Obj *op; + RiseSet rs; + int mincol, maxcol, ncols; + int dir, asc, des; + XCharStruct overall; + int fw, fh; + int lmarg; + int x1, x2; + int i; + int x, y; + + /* get size of a typical string in the label font */ + XTextExtents (ng_lfs, "5", 1, &dir, &asc, &des, &overall); + fw = overall.width; + fh = 2*(overall.ascent + overall.descent); /* room for gap */ + + /* find left margin for TZ labels */ + x = strlen(tznm) + 1; /* allow hour label moving left to be centered*/ + y = strlen(utclabel) + 1; /* " */ + lmarg = fw * (x > y ? x : y); + + /* find graph height sans room for scale and labeling at bottom. + * N.B. this is copied in ng_ano() + */ + skyh = ng_h - 4*fh; + + /* black-to-white is too harsh, use grays */ + mincol = ncolors/5; /* dark */ + maxcol = 4*ncolors/5; /* bright */ + ncols = maxcol-mincol; /* rails, not posts */ + + /* find x of local midnight and now */ + rs.rs_risetm = tz/24.+.5; /* local midnight as an mjd */ + rs.rs_settm = mjd; /* now */ + rs_x (np, &rs, &midx, &nowx); + + /* find x of twilight and sunrise/set */ + op = db_basic (SUN); + twilight_cir (np, dip, &dawn, &dusk, &status); + /* local midnight close enough if diurnal cycle lands beyond today */ + rs.rs_risetm = (status&RS_NORISE) ? tz/24+.5 : dawn; + rs.rs_settm = (status&RS_NOSET) ? tz/24+.5 : dusk; + rs.rs_flags = status & ~(RS_NORISE|RS_NOSET); + if (rs.rs_flags) { + dm_riset (np, op, &rs); + if (rs.rs_flags & RS_CIRCUMPOLAR) { + risex = dawnx = 0; + setx = duskx = ng_w-1; + } else if (rs.rs_flags) { + setx = duskx = 0; + risex = dawnx = ng_w-1; + } else { + rs_x (np, &rs, &risex, &setx); + mincol += (maxcol-mincol)/4; /* no night.. not so dark */ + ncols = maxcol-mincol; + dawnx = duskx = (risex+setx)/2; + if (setx > risex) { + dawnx += ng_w/2; + duskx += ng_w/2; + } + } + } else { + rs_x (np, &rs, &dawnx, &duskx); + dm_riset (np, op, &rs); + if (rs.rs_flags) { + maxcol -= (maxcol-mincol)/4; /* no day.. not so bright */ + ncols = maxcol-mincol; + risex = setx = (duskx+dawnx)/2; + if (dawnx > duskx) { + risex += ng_w/2; + setx += ng_w/2; + } + } else + rs_x (np, &rs, &risex, &setx); + } + + /* modulo window size */ + dawnx %= ng_w; + risex %= ng_w; + setx %= ng_w; + duskx %= ng_w; + + /* beware sun dip set higher than sun rise/set value */ + if (dawnx > risex) + dawnx = risex; + if (duskx < setx) + duskx = setx; + + /* fill block at bottom for annotations -- screen only */ + XSetForeground (dsp, ng_gc, BlackPixel (dsp, DefaultScreen(dsp))); + XFillRectangle (dsp, ng_pm, ng_gc, 0, skyh, ng_w, ng_h-skyh); + + /* draw night and day "sky". + * screen gets rectangles and shaded bands, + * paper just gets labeled lines at dawn and dusk. + */ + XSetForeground (dsp, ng_gc, ngcolors[mincol]); + XSetLineAttributes (dsp, ng_gc, 0, LineSolid, CapButt, JoinMiter); + if (XPSDrawing()) { + XSetFont (dsp, ng_gc, ng_lfs->fid); + XPSDrawString (dsp, ng_pm, ng_gc, dawnx-5*fw, 20, "Dawn", 4); + XPSDrawString (dsp, ng_pm, ng_gc, duskx+fw, 20, "Dusk", 4); + XPSDrawLine (dsp, ng_pm, ng_gc, dawnx, 0, dawnx, skyh); + XPSDrawLine (dsp, ng_pm, ng_gc, duskx, 0, duskx, skyh); + } + XSetForeground (dsp, ng_gc, ngcolors[maxcol]); + if (setx > risex) { + XFillRectangle (dsp, ng_pm, ng_gc, risex, 0, setx-risex, skyh); + } else { + XFillRectangle (dsp, ng_pm, ng_gc, risex, 0, ng_w-risex, skyh); + XFillRectangle (dsp, ng_pm, ng_gc, 0, 0, setx, skyh); + } + XSetForeground (dsp, ng_gc, ngcolors[mincol]); + if (duskx > dawnx) { + XFillRectangle (dsp, ng_pm, ng_gc, duskx, 0, ng_w-duskx, skyh); + XFillRectangle (dsp, ng_pm, ng_gc, 0, 0, dawnx, skyh); + } else { + XFillRectangle (dsp, ng_pm, ng_gc, duskx, 0, dawnx-duskx, skyh); + } + + /* thin bands to show twilights -- beware of wrap */ + if (risex < dawnx) + risex += ng_w; + for (x = dawnx; x < risex; x++) { + Pixel p = ngcolors[mincol+ncols*(x-dawnx)/(risex-dawnx)]; + XSetForeground (dsp, ng_gc, p); + XDrawLine (dsp, ng_pm, ng_gc, x%ng_w, 0, x%ng_w, skyh-1); + } + if (setx > duskx) + duskx += ng_w; + for (x = setx; x < duskx; x++) { + Pixel p = ngcolors[mincol+ncols*(duskx-x)/(duskx-setx)]; + XSetForeground (dsp, ng_gc, p); + XDrawLine (dsp, ng_pm, ng_gc, x%ng_w, 0, x%ng_w, skyh-1); + } + + /* overlay thin vertical line at current time */ + XSetForeground (dsp, ng_gc, WhitePixel (dsp, DefaultScreen(dsp))); + XPSDrawLine (dsp, ng_pm, ng_gc, nowx, 0, nowx, skyh+fh); + + /* overlay the names and thick bars */ + nlfavs = fav_get_loaded (&lfavs); + XSetLineAttributes (dsp, ng_gc, UPLT, LineSolid, CapButt, JoinMiter); + XSetFont (dsp, ng_gc, ng_vfs->fid); + for (i = 0; i < nlfavs; i++) { + char *name; + int esat; + int y; + + /* get rise and set x values, or skip if undef or never up */ + op = lfavs[i]; + db_update (op); + esat = op->o_type == EARTHSAT; + if (!esat && rs_xrs (np, op, &risex, &setx) < 0) + continue; + + /* set the desired color */ + if (XmToggleButtonGetState (ngsolid_w)) { + XSetForeground (dsp, ng_gc, ngsolid_p); + } else { + unsigned long gcm; + XGCValues gcv; + GC gc; + obj_pickgc (op, ngda_w, &gc); + gcm = GCForeground; + XGetGCValues (dsp, gc, gcm, &gcv); + XSetForeground (dsp, ng_gc, gcv.foreground); + } + + /* draw line .. beware of wrap */ + y = (i+1)*skyh/nlfavs-3*UPLT/2; + if (esat) { + if (rs_es (np, op, y, &risex, &setx) < 0) + continue; + } else if (risex < setx) { + XPSDrawLine (dsp, ng_pm, ng_gc, risex, y, setx, y); + } else { + XPSDrawLine (dsp, ng_pm, ng_gc, 0, y, setx, y); + XPSDrawLine (dsp, ng_pm, ng_gc, risex, y, ng_w, y); + } + + /* name a little above the line, avoid far right */ + y -= 3*UPLT/2; + name = op->o_name; + if (risex > setx && ng_w-risex < 50) + XPSDrawString (dsp, ng_pm, ng_gc, 10, y, name, strlen(name)); + else + XPSDrawString (dsp, ng_pm, ng_gc, risex, y, name, strlen(name)); + } + + /* hours and tick marks */ + XSetForeground (dsp, ng_gc, WhitePixel (dsp, DefaultScreen(dsp))); + XSetFont (dsp, ng_gc, ng_lfs->fid); + for (i = 0; i < 24; i++) { + int ieven = !(i%2); + + rs.rs_risetm = (i+tz)/24.+.5; /* local as an mjd */ + rs.rs_settm = i/24.+.5; /* utc as an mjd */ + rs_x (np, &rs, &x1, &x2); + + if (x1 > TMLT && x1 < ng_w-TMLT) { + int boty, thick; + + y = skyh; + if (ieven) { + thick = TMLT; + boty = skyh + 4*fh/6; + } else { + thick = 0; + boty = skyh + 3*fh/6; + } + XSetLineAttributes (dsp, ng_gc, thick, LineSolid, CapButt, + JoinMiter); + XPSDrawLine (dsp, ng_pm, ng_gc, x1, y, x1, boty); + } + + n = sprintf (buf, "%d", i); + hw = (fw*n)/2; + if (ieven && x1-hw > lmarg && x1+hw < ng_w) { + y = skyh + 2*fh-2; + XPSDrawString (dsp, ng_pm, ng_gc, x1-hw, y, buf, n); + } + if (ieven && x2-hw > lmarg && x2+hw < ng_w) { + y = skyh + 3*fh-2; + XPSDrawString (dsp, ng_pm, ng_gc, x2-hw, y, buf, n); + } + + } + + /* line to make it an "axis" */ + XSetLineAttributes (dsp, ng_gc, TMLT, LineSolid, CapButt, JoinMiter); + y = skyh; + XPSDrawLine (dsp, ng_pm, ng_gc, 0, y, ng_w, y); + + /* zones at left */ + y = skyh + 2*fh-2; + n = strlen (tznm); + XPSDrawString (dsp, ng_pm, ng_gc, 2, y, tznm, n); + y = skyh + 3*fh-2; + n = strlen (utclabel); + XPSDrawString (dsp, ng_pm, ng_gc, 2, y, utclabel, n); + + /* local dates -- today and the other */ + XSetForeground (dsp, ng_gc, WhitePixel (dsp, DefaultScreen(dsp))); + y = skyh + 4*fh-2; + if (nowx < midx) { + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd-tz/24.)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(mjd-tz/24.+1)); + } else { + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd-tz/24.-1)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(mjd-tz/24.)); + } + n = strlen (buf); + XPSDrawString (dsp, ng_pm, ng_gc, (midx-fw*n)/2, y, buf, n); + n = strlen (buf2); + XPSDrawString (dsp, ng_pm, ng_gc, (ng_w+midx-fw*n)/2, y, buf2, n); + + /* draw any annotation */ + ano_draw (ngda_w, ng_pm, ng_ano, 0); +} + +/* convert map fractions to/from X Windows coords depending on w2x. + * return whether visible + */ +static int +ng_ano (double *fracx, double *fracy, int *xp, int *yp, int w2x, int arg) +{ + int dir, asc, des; + XCharStruct overall; + int fh, skyh; + + /* get size of a typical string in the label font */ + XTextExtents (ng_lfs, "5", 1, &dir, &asc, &des, &overall); + fh = 2*(overall.ascent + overall.descent); /* room for gap */ + + /* find graph height sans room for scale and labeling at bottom */ + skyh = ng_h - 4*fh; + + if (w2x) { + *xp = (int)floor(*fracx*ng_w); + *yp = (int)floor(*fracy*skyh); + } else { + *fracx = (double)*xp/ng_w; + *fracy = (double)*yp/skyh; + } + + return (1); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: glance.c,v $ $Date: 2013/01/06 01:27:18 $ $Revision: 1.50 $ $Name: $"}; diff --git a/GUI/xephem/gsc.c b/GUI/xephem/gsc.c new file mode 100644 index 0000000..cd54440 --- /dev/null +++ b/GUI/xephem/gsc.c @@ -0,0 +1,1213 @@ +/* GSCSetup(): call to change base directories. + * GSCFetch(): return an array of ObjF matching the given criteria. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +/* .ech file format history: + * 1.5 3/18/96 just use the first if multiple entries (and there are many) + * 1.4 10/5/95 change header to accommodate more stars in one region. + */ + +static double cacheversion = 1.5; /* must be writeable using %.1f */ + +/* Program history: + * 2/22/96 put all into one file for external convenience. + * 10/5 allow more free-form header format + * 8/16 fix fov limiting; send End message when finished; lint cleanups. + * 8/2 mimic the cd-rom's subdirectory structure. + * 5/31 change some defaults and improve help message. + * 5/2/95 begin work + */ + +/* the original request to be fullfilled */ +typedef struct { + double ra, dec; /* center of interest, J2000, rads */ + double cdec, sdec; /* handy cos(dec) and sin(dec) */ + double rov; /* radius-of-view, rads */ + double crov; /* cos(rov), for convenience */ + double mag; /* limiting mag */ +} Request; + +/* an array of ObjF which can be grown efficiently in mults of NINC */ +typedef struct { + ObjF *mem; /* malloced array */ + int max; /* max number of cells in mem[] or -1 to just count */ + int used; /* number actually in use */ +} GSCArray; + +#define NINC 64 /* grow GSCArray mem this many at a time */ + + +/* what we need to know about a small GSC region */ +typedef struct { + /* following are filled by gscPickRegion() */ + char dir[6]; /* dir off gsc/, e.g. "n1234" */ + char file[9]; /* file off gsc/, e.g. "5678.gsc" */ + int south; /* 0 if north, 1 if north */ + int id; /* small region id number */ + double ra0; /* eastern edge, rads */ + double dec0; /* fabs(dec edge nearest 0), rads */ + + /* following are filled by gscOpenRegion() or cacheOpen/CreateRegion() */ + FILE *fp; /* file pointer, once open */ + int nrows; /* rows (stars) remaining */ + + /* following is only used by the cache subsystem. */ + double cosdec0; +} GSCRegion; + +/* info about one GSC entry. + * filled in by gscNextEntry() + */ +typedef struct { + int id; /* id */ + int class; /* 0 star */ + double ra; /* rads */ + double dec; /* rads */ + double mag; /* magnitude */ +} GSCEntry; + + +/* paths and options */ +static char *cdpath; /* dir where GSC CD rom is mounted */ +static char *chpath; /* dir of cache base */ +static int nocache; /* set if don't want to use the cache */ +static int nocdrom; /* set if don't wnat to use the cdrom */ + +static char *lmsg; /* local ptr to user's msg buffer */ + +static int handleRequest (Request *qp, GSCArray *ap); +static int fetchRegion (GSCRegion *rp, Request *qp, GSCArray *ap); +static int inFOV (Request *qp, GSCEntry *ep); +static int magOK (Request *qp, GSCEntry *ep); +static int addOneStar (GSCArray *ap, GSCRegion *rp, GSCEntry *ep); +static int mymkdir (char *path); + +static void gscPickRegion (double ra, double dec, GSCRegion *rp); +static int gscOpenRegion (GSCRegion *rp); +static int gscSimpleFits (FILE *fp); +static void gscOpenFile (GSCRegion *rp, char msg[]); +static int gscGetNextEntry (GSCRegion *rp, GSCEntry *ep); +static void gscCloseRegion (GSCRegion *rp); +static int cacheCreateRegion (GSCRegion *rp, GSCRegion *cp); + +static int cacheOpenRegion (GSCRegion *rp, GSCRegion *cp); +static int cacheGetNextEntry (GSCRegion *rp, GSCEntry *ep); +static void cacheCloseRegion (GSCRegion *rp); +static void cacheAddEntry (GSCRegion *rp, GSCEntry *ep); +static void cacheBuildFilename (char fullpath[], GSCRegion *rp); +static void cacheBuildDir (char fullpath[], GSCRegion *rp); +static int cacheReadHeader (GSCRegion *rp); +static void cacheWriteHeader (GSCRegion *rp); +static void cacheReadEntry (GSCRegion *rp, GSCEntry *ep); +static void cacheWriteEntry (GSCRegion *rp, GSCEntry *ep); + +#define FLL 80 /* FITS line length */ + +#define FOVSTEP degrad(1) /* FOV scan step size, rads */ + +/* call this any time before using GSCFetch() to set the path to the base of + * the GSC cdrom and the path to the base of the local disk cache. + * if either is NULL it means don't use that facility at all. + * return 0 if new paths look reasonable, else fill msg[] and return -1. + * N.B. cdp and chp must remain valid for GSCFetch(). + */ +int +GSCSetup (cdp, chp, msg) +char *cdp; +char *chp; +char msg[]; +{ + /* set up the new paths and flags */ + cdpath = cdp; + nocdrom = !cdpath; + chpath = chp; + nocache = !chpath; + + /* check whether cdpath is reasonable */ + if (cdpath) { + GSCRegion r; + + /* try reading a typical north file */ + (void) strcpy (r.dir, "n8230"); + (void) strcpy (r.file, "4615.gsc"); + gscOpenFile (&r, msg); + if (!r.fp) { + /* nope -- try a south file */ + (void) strcpy (r.dir, "s8230"); + (void) strcpy (r.file, "9490.gsc"); + gscOpenFile (&r, msg); + if (!r.fp) + return (-1); + } + gscCloseRegion (&r); + } + +#ifndef VMS + /* can't seem to access directories under VMS */ + /* check whether chpath is reasonable -- just check the dir + * since files themselves can accumulate with usage. + */ + if (chpath) { + char fullpath[1024]; + GSCRegion r; + + (void) strcpy (r.dir, ""); + cacheBuildDir (fullpath, &r); + if (existsh (fullpath) < 0) { + (void) sprintf (msg, "GSC Cache %s:\n%s", chp, syserrstr()); + return (-1); + } + } +#endif + + /* ok */ + return (0); +} + +/* create or add to a malloced array of ObjF at *spp in the given region and + * return the new total count. + * if spp == NULL we don't malloc anything but just do the side effects; + * else *spp already has nspp ObjF in it (it's ok if *spp == NULL). + * we return new total number of stars or -1 if real trouble. + * *spp is only changed if we added any. + * msg might contain a message regardless of the return value. + */ +int +GSCFetch (ra0, dec0, fov, fmag, spp, nspp, msg) +double ra0; /* center RA, rads */ +double dec0; /* center Dec, rads */ +double fov; /* field of view, rads */ +double fmag; /* faintest mag */ +ObjF **spp; /* *spp will be a malloced array of ObjF stars in region */ +int nspp; /* if spp: initial number of ObjF already in *spp */ +char msg[]; /* possible return error or status message */ +{ + Request q; + GSCArray sa; + + /* sanity checks */ + if (nocdrom && nocache) { + (void) sprintf (msg, "CDROM and Cache are both disabled"); + return (-1); + } + if (!nocdrom && !cdpath) { + (void) sprintf (msg, "No path to CDROM"); + return (-1); + } + if (!nocache && !chpath) { + (void) sprintf (msg, "No path to cache"); + return (-1); + } + + /* collect (and adjust) the criteria */ + q.ra = ra0; + q.dec = dec0; + q.rov = fov/2; + q.crov = cos(q.rov); + q.mag = fmag; + + /* compute handy trig values once */ + q.cdec = cos(q.dec); + q.sdec = sin(q.dec); + + /* setup local access to msg and init it */ + lmsg = msg; + lmsg[0] = '\0'; + + /* init the array. + * max == -1 will mean we just keep a count but don't build the array. + */ + if (spp) { + sa.mem = *spp; + sa.used = sa.max = nspp; + } else { + sa.mem = NULL; + sa.used = 0; + sa.max = -1; + } + + /* fetch the stars */ + if (handleRequest (&q, &sa) < 0) { + /* beware of a partial collection -- array has likely moved */ + if (spp && sa.mem) + *spp = sa.mem; + return (-1); + } + + /* pass back to caller if interested else just toss */ + if (spp && sa.mem) + *spp = sa.mem; + else if (sa.mem) + free ((void *)sa.mem); + + return (sa.used); +} + +/* fill GSCArray with stars which meet the given request. + * return 0 if ok else fill lmsg[] and return -1 if trouble. + */ +static int +handleRequest (qp, ap) +Request *qp; +GSCArray *ap; +{ + char ids[9537]; /* set when region has already been visited */ + GSCRegion region; + double dec, dec0, dec1, cosmaxrov; + + /* init the record of regions we have seen */ + zero_mem (ids, sizeof(ids)); + + /* get and send the region we are directly in for sure */ + gscPickRegion (qp->ra, qp->dec, ®ion); + if (fetchRegion (®ion, qp, ap) < 0) + return (-1); + if (region.id < 1 || region.id > sizeof(ids)) { + printf ("Bogus region id: %d\n", region.id); + abort(); /* *real* trouble! */ + } + ids[region.id-1] = 1; + + /* scan the sphere in FOVSTEP patches looking for more close ones. + * duplicate regions are avoided by recording and checking ids. + */ + dec0 = floor((qp->dec - qp->rov)/FOVSTEP)*FOVSTEP; + if (dec0 < -PI/2 + FOVSTEP) dec0 = -PI/2 + FOVSTEP; + dec1 = qp->dec + qp->rov + FOVSTEP; + if (dec1 > PI/2) dec1 = PI/2; + cosmaxrov = cos(qp->rov + 1.415*FOVSTEP); + + for (dec = dec0; dec < dec1; dec += FOVSTEP) { + double cdec = cos(dec); + double sdec = sin(dec); + double ra; + + for (ra = 0.0; ra < 2*PI; ra += FOVSTEP) { + double cosa; + + pm_set ((int)((dec-dec0+ra/(2*PI)*FOVSTEP)/(dec1-dec0)*100)); + + cosa = sdec*qp->sdec + cdec*qp->cdec*cos(ra - qp->ra); + if (cosa < cosmaxrov) + continue; + + gscPickRegion (ra, dec, ®ion); + + /* if not already visited, fetch region and mark. + * N.B. regions are numbered 1-based. + */ + if (region.id < 1 || region.id > sizeof(ids)) { + printf ("Bogus scan region id: %d\n", region.id); + abort(); /* *real* trouble! */ + } + if (!ids[region.id-1]) { + if (fetchRegion (®ion, qp, ap) < 0) + return (-1); + ids[region.id-1] = 1; + } + } + } + + return (0); +} + +/* add stars to the GSCArray for this region and center location. + * use cache if possible (and desired) else cdrom (if desired). + * if no cache copy exists, create it along the way (if desired). + * if ok return count, else put reason in lmsg and return -1. + */ +static int +fetchRegion (rp, qp, ap) +GSCRegion *rp; +Request *qp; +GSCArray *ap; +{ + GSCRegion cr; /* used for the cache entry */ + + /* first try to use the cache, if want and can. */ + if (!nocache && cacheOpenRegion (rp, &cr) == 0) { + int s = 0; + GSCEntry e; + + while (cacheGetNextEntry (&cr, &e) == 0) { + if (inFOV(qp,&e)==0 && magOK(qp,&e)==0) { + if (addOneStar (ap, &cr, &e) < 0) { + s = -1; + break; + } + } + } + + cacheCloseRegion (&cr); + return (s); + } + + /* if not or can't, then the cdrom. + * also make the cache entry along the way, if desired. + */ + if (!nocdrom && gscOpenRegion (rp) == 0) { + int cacheok = nocache ? -1 : cacheCreateRegion (rp, &cr); /* 0=ok */ + int lastid = -1; /* ignore all but first of multi entries */ + int nunique = 0; /* count of unique entries */ + int s = 0; + GSCEntry e; + + /* read the whole CDROM but only add unique id entries */ + while (gscGetNextEntry (rp, &e) == 0) { + if (e.id != lastid) { + if (inFOV(qp,&e)==0 && magOK(qp,&e)==0) { + if (addOneStar (ap, rp, &e) < 0) { + s = -1; + /* quit unless building cache */ + if (cacheok < 0) + break; + } + } + + if (cacheok == 0) + cacheAddEntry (&cr, &e); + + nunique++; + lastid = e.id; + } + } + + if (cacheok == 0) { + fseek (cr.fp, 0L, SEEK_SET); + cr.nrows = nunique; + cacheWriteHeader (&cr); + cacheCloseRegion (&cr); + } + + gscCloseRegion (rp); + return (s); + } + + /* if get here nothing worked */ + if (lmsg[0] == '\0') + (void) sprintf (lmsg, "Can not find GSC stars anywhere."); + return (-1); +} + +/* return 0 if the given entry is within the given request, else return -1. + */ +static int +inFOV (qp, ep) +Request *qp; +GSCEntry *ep; +{ + double cr = qp->sdec*sin(ep->dec) + + qp->cdec*cos(ep->dec)*cos(qp->ra - ep->ra); + return (cr < qp->crov); +} + +/* return 0 if the given entry is at least as bright as the faint limit, else -1 */ +static int +magOK (qp, ep) +Request *qp; +GSCEntry *ep; +{ + return (ep->mag <= qp->mag ? 0 : -1); +} + +/* add one GSC entry to ap[], growing if necessary. + * if max is -1 we just count but don't actually build the array. + * return 0 if ok, else put reason in lmsg and return -1 + */ +static int +addOneStar (ap, rp, ep) +GSCArray *ap; +GSCRegion *rp; +GSCEntry *ep; +{ + int sz = sizeof(ObjF); + Obj *op; + + if (ap->max < 0) { + char rstr[32], dstr[32]; + fs_sexa (rstr, radhr(ep->ra), 2, 360000); + fs_sexa (dstr, raddeg(ep->dec), 4, 36000); + printf ("GSC %04d-%04d,f|%c,%s,%s,%g\n", rp->id, ep->id, + ep->class ? 'T' : 'S', rstr, dstr, ep->mag); + + ap->used++; + return (0); + } + + if (ap->used >= ap->max) { + /* add room for NINC more */ + char *newmem = ap->mem ? realloc((void *)ap->mem, (ap->max+NINC)*sz) + : malloc (NINC*sz); + if (!newmem) { + (void) sprintf (lmsg, "No more memory"); + return (-1); + } + zero_mem (newmem + ap->max*sz, NINC*sz); + ap->mem = (ObjF *)newmem; + ap->max += NINC; + } + + op = (Obj *)&ap->mem[ap->used++]; + + (void) sprintf (op->o_name, "GSC %04d-%04d", rp->id, ep->id); + op->o_type = FIXED; + op->f_class = ep->class == 0 ? 'S' : 'T'; + op->f_RA = (float)ep->ra; + op->f_dec = (float)ep->dec; + op->f_epoch = (float)J2000; + set_fmag (op, ep->mag); + + return (0); +} + +static int +mymkdir (path) +char *path; +{ + return (mkdir (expand_home (path), 0755)); +} + + +/* code to handle the details of reading the CDROM */ + +/* index by dec band and get the number of large regions in it and its first + * large region number. these are for nothern bands; southern have the same + * number of large regions but the first is the value in the table + 366. + */ +typedef struct { + short nlrg; + short firstlg; +} LargeRegionTable; +static LargeRegionTable lg_reg[12] = { + {48, 1}, + {47, 49}, + {45, 96}, + {43, 141}, + {40, 184}, + {36, 224}, + {32, 260}, + {27, 292}, + {21, 319}, + {15, 340}, + {9, 355}, + {3, 364}, +}; + +/* index by large region number (which start at 1, not 0) and get its first + * small region number and the number of ra and dec subdivisions. + */ +typedef struct { + short firstsm; + short nsub; +} SmallRegionTable; +static SmallRegionTable sm_reg[733] = { + {0, 0}, {1, 3}, {10, 3}, {19, 3}, {28, 3}, {37, 3}, {46, 3}, + {55, 3}, {64, 3}, {73, 3}, {82, 4}, {98, 4}, {114, 4}, {130, 4}, + {146, 4}, {162, 4}, {178, 4}, {194, 4}, {210, 4}, {226, 3}, {235, 3}, + {244, 3}, {253, 3}, {262, 3}, {271, 3}, {280, 3}, {289, 3}, {298, 3}, + {307, 3}, {316, 3}, {325, 3}, {334, 4}, {350, 4}, {366, 4}, {382, 4}, + {398, 4}, {414, 4}, {430, 4}, {446, 4}, {462, 4}, {478, 4}, {494, 4}, + {510, 4}, {526, 4}, {542, 4}, {558, 3}, {567, 3}, {576, 3}, {585, 3}, + {594, 3}, {603, 3}, {612, 3}, {621, 3}, {630, 3}, {639, 3}, {648, 3}, + {657, 3}, {666, 4}, {682, 4}, {698, 4}, {714, 4}, {730, 4}, {746, 4}, + {762, 4}, {778, 4}, {794, 4}, {810, 3}, {819, 3}, {828, 3}, {837, 3}, + {846, 3}, {855, 3}, {864, 3}, {873, 3}, {882, 3}, {891, 3}, {900, 3}, + {909, 3}, {918, 3}, {927, 4}, {943, 4}, {959, 4}, {975, 4}, {991, 4}, + {1007, 4}, {1023, 4}, {1039, 4}, {1055, 4}, {1071, 4}, {1087, 4}, {1103, 4}, + {1119, 4}, {1135, 4}, {1151, 3}, {1160, 3}, {1169, 3}, {1178, 3}, {1187, 3}, + {1196, 3}, {1205, 3}, {1214, 3}, {1223, 3}, {1232, 4}, {1248, 4}, {1264, 4}, + {1280, 4}, {1296, 4}, {1312, 4}, {1328, 4}, {1344, 4}, {1360, 4}, {1376, 4}, + {1392, 3}, {1401, 3}, {1410, 3}, {1419, 3}, {1428, 3}, {1437, 2}, {1441, 2}, + {1445, 2}, {1449, 3}, {1458, 3}, {1467, 3}, {1476, 3}, {1485, 3}, {1494, 3}, + {1503, 4}, {1519, 4}, {1535, 4}, {1551, 4}, {1567, 4}, {1583, 4}, {1599, 4}, + {1615, 4}, {1631, 4}, {1647, 4}, {1663, 4}, {1679, 4}, {1695, 4}, {1711, 3}, + {1720, 3}, {1729, 3}, {1738, 3}, {1747, 3}, {1756, 3}, {1765, 4}, {1781, 4}, + {1797, 4}, {1813, 4}, {1829, 4}, {1845, 4}, {1861, 4}, {1877, 4}, {1893, 4}, + {1909, 4}, {1925, 4}, {1941, 3}, {1950, 3}, {1959, 3}, {1968, 3}, {1977, 2}, + {1981, 2}, {1985, 2}, {1989, 2}, {1993, 2}, {1997, 3}, {2006, 3}, {2015, 3}, + {2024, 3}, {2033, 3}, {2042, 4}, {2058, 4}, {2074, 4}, {2090, 4}, {2106, 4}, + {2122, 4}, {2138, 4}, {2154, 4}, {2170, 4}, {2186, 4}, {2202, 4}, {2218, 4}, + {2234, 4}, {2250, 3}, {2259, 4}, {2275, 4}, {2291, 4}, {2307, 4}, {2323, 4}, + {2339, 4}, {2355, 4}, {2371, 4}, {2387, 4}, {2403, 4}, {2419, 4}, {2435, 4}, + {2451, 4}, {2467, 4}, {2483, 3}, {2492, 3}, {2501, 3}, {2510, 3}, {2519, 2}, + {2523, 2}, {2527, 2}, {2531, 2}, {2535, 3}, {2544, 3}, {2553, 3}, {2562, 3}, + {2571, 3}, {2580, 3}, {2589, 4}, {2605, 4}, {2621, 4}, {2637, 4}, {2653, 4}, + {2669, 4}, {2685, 4}, {2701, 4}, {2717, 4}, {2733, 4}, {2749, 4}, {2765, 4}, + {2781, 4}, {2797, 4}, {2813, 4}, {2829, 4}, {2845, 4}, {2861, 4}, {2877, 4}, + {2893, 4}, {2909, 4}, {2925, 4}, {2941, 4}, {2957, 4}, {2973, 3}, {2982, 3}, + {2991, 3}, {3000, 3}, {3009, 2}, {3013, 2}, {3017, 2}, {3021, 2}, {3025, 3}, + {3034, 3}, {3043, 3}, {3052, 3}, {3061, 3}, {3070, 4}, {3086, 4}, {3102, 4}, + {3118, 4}, {3134, 4}, {3150, 4}, {3166, 4}, {3182, 4}, {3198, 4}, {3214, 4}, + {3230, 4}, {3246, 4}, {3262, 4}, {3278, 4}, {3294, 4}, {3310, 4}, {3326, 4}, + {3342, 4}, {3358, 4}, {3374, 4}, {3390, 4}, {3406, 3}, {3415, 3}, {3424, 3}, + {3433, 3}, {3442, 3}, {3451, 2}, {3455, 2}, {3459, 2}, {3463, 3}, {3472, 3}, + {3481, 3}, {3490, 3}, {3499, 3}, {3508, 4}, {3524, 4}, {3540, 4}, {3556, 4}, + {3572, 4}, {3588, 4}, {3604, 4}, {3620, 4}, {3636, 4}, {3652, 4}, {3668, 4}, + {3684, 4}, {3700, 4}, {3716, 4}, {3732, 4}, {3748, 4}, {3764, 4}, {3780, 4}, + {3796, 3}, {3805, 3}, {3814, 3}, {3823, 3}, {3832, 3}, {3841, 3}, {3850, 3}, + {3859, 3}, {3868, 3}, {3877, 3}, {3886, 4}, {3902, 4}, {3918, 4}, {3934, 4}, + {3950, 4}, {3966, 4}, {3982, 4}, {3998, 4}, {4014, 4}, {4030, 4}, {4046, 4}, + {4062, 4}, {4078, 4}, {4094, 4}, {4110, 4}, {4126, 3}, {4135, 3}, {4144, 3}, + {4153, 3}, {4162, 3}, {4171, 3}, {4180, 3}, {4189, 3}, {4198, 4}, {4214, 4}, + {4230, 4}, {4246, 4}, {4262, 4}, {4278, 4}, {4294, 4}, {4310, 4}, {4326, 4}, + {4342, 4}, {4358, 4}, {4374, 3}, {4383, 3}, {4392, 3}, {4401, 3}, {4410, 3}, + {4419, 3}, {4428, 4}, {4444, 4}, {4460, 4}, {4476, 4}, {4492, 4}, {4508, 4}, + {4524, 4}, {4540, 3}, {4549, 3}, {4558, 3}, {4567, 4}, {4583, 4}, {4599, 4}, + {4615, 4}, {4631, 4}, {4647, 4}, {4663, 3}, {4672, 3}, {4681, 2}, {4685, 2}, + {4689, 3}, {4698, 3}, {4707, 3}, {4716, 3}, {4725, 3}, {4734, 4}, {4750, 4}, + {4766, 4}, {4782, 4}, {4798, 4}, {4814, 4}, {4830, 4}, {4846, 4}, {4862, 4}, + {4878, 4}, {4894, 3}, {4903, 3}, {4912, 3}, {4921, 3}, {4930, 3}, {4939, 3}, + {4948, 3}, {4957, 3}, {4966, 3}, {4975, 3}, {4984, 4}, {5000, 4}, {5016, 4}, + {5032, 4}, {5048, 4}, {5064, 4}, {5080, 4}, {5096, 4}, {5112, 4}, {5128, 4}, + {5144, 4}, {5160, 4}, {5176, 4}, {5192, 4}, {5208, 4}, {5224, 3}, {5233, 3}, + {5242, 3}, {5251, 3}, {5260, 3}, {5269, 2}, {5273, 2}, {5277, 2}, {5281, 2}, + {5285, 3}, {5294, 3}, {5303, 3}, {5312, 3}, {5321, 3}, {5330, 4}, {5346, 4}, + {5362, 4}, {5378, 4}, {5394, 4}, {5410, 4}, {5426, 4}, {5442, 4}, {5458, 4}, + {5474, 4}, {5490, 3}, {5499, 3}, {5508, 3}, {5517, 3}, {5526, 3}, {5535, 3}, + {5544, 3}, {5553, 3}, {5562, 4}, {5578, 4}, {5594, 4}, {5610, 4}, {5626, 4}, + {5642, 4}, {5658, 4}, {5674, 4}, {5690, 4}, {5706, 4}, {5722, 4}, {5738, 4}, + {5754, 4}, {5770, 4}, {5786, 4}, {5802, 3}, {5811, 3}, {5820, 3}, {5829, 3}, + {5838, 3}, {5847, 2}, {5851, 2}, {5855, 2}, {5859, 2}, {5863, 3}, {5872, 3}, + {5881, 3}, {5890, 3}, {5899, 4}, {5915, 4}, {5931, 4}, {5947, 4}, {5963, 4}, + {5979, 4}, {5995, 4}, {6011, 4}, {6027, 4}, {6043, 4}, {6059, 4}, {6075, 3}, + {6084, 3}, {6093, 3}, {6102, 3}, {6111, 3}, {6120, 4}, {6136, 4}, {6152, 4}, + {6168, 4}, {6184, 4}, {6200, 4}, {6216, 4}, {6232, 4}, {6248, 4}, {6264, 4}, + {6280, 4}, {6296, 4}, {6312, 4}, {6328, 4}, {6344, 4}, {6360, 4}, {6376, 3}, + {6385, 3}, {6394, 3}, {6403, 3}, {6412, 3}, {6421, 2}, {6425, 2}, {6429, 2}, + {6433, 2}, {6437, 3}, {6446, 3}, {6455, 3}, {6464, 3}, {6473, 4}, {6489, 4}, + {6505, 4}, {6521, 4}, {6537, 4}, {6553, 4}, {6569, 4}, {6585, 4}, {6601, 4}, + {6617, 4}, {6633, 4}, {6649, 4}, {6665, 4}, {6681, 4}, {6697, 4}, {6713, 4}, + {6729, 4}, {6745, 4}, {6761, 4}, {6777, 4}, {6793, 4}, {6809, 4}, {6825, 4}, + {6841, 4}, {6857, 4}, {6873, 4}, {6889, 4}, {6905, 4}, {6921, 4}, {6937, 4}, + {6953, 3}, {6962, 3}, {6971, 3}, {6980, 3}, {6989, 3}, {6998, 2}, {7002, 2}, + {7006, 2}, {7010, 3}, {7019, 3}, {7028, 3}, {7037, 3}, {7046, 3}, {7055, 4}, + {7071, 4}, {7087, 4}, {7103, 4}, {7119, 4}, {7135, 4}, {7151, 4}, {7167, 4}, + {7183, 4}, {7199, 4}, {7215, 4}, {7231, 4}, {7247, 4}, {7263, 4}, {7279, 4}, + {7295, 4}, {7311, 4}, {7327, 4}, {7343, 4}, {7359, 4}, {7375, 4}, {7391, 4}, + {7407, 4}, {7423, 4}, {7439, 4}, {7455, 4}, {7471, 4}, {7487, 3}, {7496, 3}, + {7505, 3}, {7514, 3}, {7523, 3}, {7532, 3}, {7541, 3}, {7550, 3}, {7559, 3}, + {7568, 3}, {7577, 3}, {7586, 3}, {7595, 4}, {7611, 4}, {7627, 4}, {7643, 4}, + {7659, 4}, {7675, 4}, {7691, 4}, {7707, 4}, {7723, 4}, {7739, 4}, {7755, 4}, + {7771, 4}, {7787, 4}, {7803, 4}, {7819, 4}, {7835, 4}, {7851, 4}, {7867, 4}, + {7883, 4}, {7899, 4}, {7915, 4}, {7931, 4}, {7947, 4}, {7963, 4}, {7979, 4}, + {7995, 3}, {8004, 3}, {8013, 3}, {8022, 3}, {8031, 3}, {8040, 3}, {8049, 3}, + {8058, 3}, {8067, 3}, {8076, 3}, {8085, 4}, {8101, 4}, {8117, 4}, {8133, 4}, + {8149, 4}, {8165, 4}, {8181, 4}, {8197, 4}, {8213, 4}, {8229, 4}, {8245, 4}, + {8261, 4}, {8277, 4}, {8293, 4}, {8309, 4}, {8325, 4}, {8341, 4}, {8357, 4}, + {8373, 4}, {8389, 4}, {8405, 4}, {8421, 4}, {8437, 3}, {8446, 3}, {8455, 3}, + {8464, 3}, {8473, 3}, {8482, 3}, {8491, 3}, {8500, 3}, {8509, 3}, {8518, 4}, + {8534, 4}, {8550, 4}, {8566, 4}, {8582, 4}, {8598, 4}, {8614, 4}, {8630, 4}, + {8646, 4}, {8662, 4}, {8678, 4}, {8694, 4}, {8710, 4}, {8726, 4}, {8742, 4}, + {8758, 4}, {8774, 4}, {8790, 4}, {8806, 4}, {8822, 3}, {8831, 3}, {8840, 3}, + {8849, 3}, {8858, 3}, {8867, 3}, {8876, 4}, {8892, 4}, {8908, 4}, {8924, 4}, + {8940, 4}, {8956, 4}, {8972, 4}, {8988, 4}, {9004, 4}, {9020, 4}, {9036, 4}, + {9052, 4}, {9068, 4}, {9084, 4}, {9100, 4}, {9116, 3}, {9125, 3}, {9134, 3}, + {9143, 3}, {9152, 3}, {9161, 4}, {9177, 4}, {9193, 4}, {9209, 4}, {9225, 4}, + {9241, 4}, {9257, 4}, {9273, 4}, {9289, 4}, {9305, 4}, {9321, 4}, {9337, 3}, + {9346, 4}, {9362, 4}, {9378, 4}, {9394, 4}, {9410, 4}, {9426, 4}, {9442, 4}, + {9458, 4}, {9474, 4}, {9490, 4}, {9506, 4}, {9522, 4}, +}; + +/* given an ra and dec, each in rads fill in the *rp GSCRegion with the name of + * the file (relative to cdpath), n/s hemisphere, region id and the + * origin ra/dec of the region (also in rads). + * This is all based upon the comments found on the CD-ROM files in tables/ + * sm_reg_x.tbl, lg_reg_x.tbl and regions.tbl. + */ +static void +gscPickRegion (ra, dec, rp) +double ra; +double dec; +GSCRegion *rp; +{ + int decband; /* which 7.5-degree dec band: 0..11 */ + int raband; /* which group of small ra bands */ + int lgregno; /* large region number */ + int nlrg; /* n large regions in this dec band */ + int firstsm; /* first small region number in this large region */ + int nsub; /* n subdivisions in each dim in this lrge regn */ + int nsmdec; /* n small regions forward in dec */ + int nsmra; /* n small regions forward in ra */ + volatile double raLrg; /* fractions of large RA regions to target */ + volatile double decLrg; /* fractios of large Dec regions to target */ + /* volatile fixes gcc -O2 */ + + /* convert to degs for remainder of algorithm */ + ra = raddeg(ra); + dec = raddeg(dec); + + /* insure -90 < dec < 90 -- need not be perfect but avoids close + * calls with all the modulo arithmetic. + */ +#define CLOSEPOLE (90.0 - 10.0/3600.0) + if (dec <= -CLOSEPOLE) + dec = -CLOSEPOLE; + else if (dec >= CLOSEPOLE) + dec = CLOSEPOLE; +#undef CLOSEPOLE + + /* insure 0 <= ra < 360 */ + range (&ra, 360.0); + + /* work effectively in "modulo nothern hemisphere" and start dir[]. + */ + if (dec < 0.0) { + rp->south = 1; + dec = -dec; + rp->dir[0] = 's'; + } else { + rp->south = 0; + rp->dir[0] = 'n'; + } + + /* find which 7.5-degree dec band and add more to dir */ + decLrg = dec/7.5; + decband = (int)floor(decLrg); + (void) sprintf (rp->dir+1, "%04d", decband*750); + if (rp->dir[3] == '5') + rp->dir[3] = '3'; + + /* find the large region number */ + nlrg = lg_reg[decband].nlrg; + raLrg = ra*nlrg/360.0; + raband = (int)floor(raLrg); + lgregno = lg_reg[decband].firstlg + raband; + if (rp->south) + lgregno += 366; + + /* lookup the number of subdivisions */ + firstsm = sm_reg[lgregno].firstsm; + nsub = sm_reg[lgregno].nsub; + + /* find the subdivision indices and origin */ + nsmdec = (int)(nsub*(decLrg-decband)); + rp->dec0 = 7.5 * (decband + (double)nsmdec/nsub); + rp->dec0 = degrad(rp->dec0); + nsmra = (int)(nsub*(raLrg-raband)); + rp->ra0 = (360.0/nlrg) * (raband + (double)nsmra/nsub); + rp->ra0 = degrad(rp->ra0); + + /* small region number is then the first in this large region plus + * the number of subdivisions away from the origin. + * the large region is broken up into a square array of nsub*nsub. + */ + rp->id = firstsm + nsub*nsmdec + nsmra; + + /* fill in the filename */ + (void) sprintf (rp->file, "%04d.gsc", rp->id); +} + +/* open and setup rp->fp and nrows from an existing cdrom file off cdpath for + * the given region so it is ready to return successive entries. + * return 0 if ok, else write error message to lmsg and return -1. + * N.B. this code heavily assumes these the GSC FITS files. + */ +static int +gscOpenRegion (rp) +GSCRegion *rp; +{ + typedef enum {FINDNAXIS2, FINDEND, SKIPTOBLOCK, FOUNDTABLE} State; + char buf[FLL+1]; /* we add EOS */ + char fn[1024]; + State state; + int n; + + /* open the cdrom file */ + gscOpenFile (rp, fn); + if (!rp->fp) { + (void) strcpy (lmsg, fn); + return (-1); + } + + /* make sure it's a SIMPLE FITS file at least */ + if (gscSimpleFits (rp->fp) < 0) { + (void) sprintf (lmsg, "%s:\nnot a SIMPLE FITS file", fn); + fclose (rp->fp); + rp->fp = NULL; + return (-1); + } + + /* find table length in NAXIS2. + * position rp->fp at first row of table. + * N.B. start n at 2 so after the fread it is count of FLL records read. + */ + for (n = 2, state = FINDNAXIS2; state != FOUNDTABLE; n++) { + if (fread (buf, 1, FLL, rp->fp) != FLL) { + (void) sprintf (lmsg, "%s:\nunexpected EOF", fn); + fclose (rp->fp); + rp->fp = NULL; + return (-1); + } + buf[FLL] = '\0'; + + switch (state) { + case FINDNAXIS2: + if (sscanf (buf, "NAXIS2 =%d", &rp->nrows) == 1) + state = FINDEND; + break; + case FINDEND: + if (strncmp (buf, "END", 3) == 0) { + if (((n*FLL)%2880) == 0) + state = FOUNDTABLE; + else + state = SKIPTOBLOCK; + } + break; + case SKIPTOBLOCK: + if (((n*FLL)%2880) == 0) + state = FOUNDTABLE; + break; + case FOUNDTABLE: + break; + } + + } + + return (0); +} + +/* at least see that fp starts as a SIMPLE FITS file. + * if ok return 0 with fp positioned at the next FLL record, + * else return -1. + */ +static int +gscSimpleFits (fp) +FILE *fp; +{ + static char smpl[31] = "SIMPLE = T"; + char buf[FLL]; + + if (fread (buf, 1, FLL, fp) != FLL) + return (-1); + if (strncmp (buf, smpl, sizeof(smpl)-1)) + return (-1); + return (0); +} + +/* open the file for the given region. + * if succcessful, set rp->fp and fill msg with what opened, + * else set rp->fp to NULL and full msg with an error message. + */ +static void +gscOpenFile (rp, msg) +GSCRegion *rp; +char *msg; +{ + char path[1024]; + + (void) sprintf (path, "%s/gsc/%s/%s", cdpath, rp->dir, rp->file); + rp->fp = fopenh (path, "rb"); + + if (!rp->fp) { + /* try it with a trailing ";1" */ + (void) strcat (path, ";1"); + rp->fp = fopenh (path, "rb"); + } + + if (!rp->fp) + (void) sprintf (msg, "No GSC files in %s", cdpath); +} + +/* return the next entry from the GSC region. + * decrement rp->nrows as we go and return -1 when it reaches 0, else 0. + */ +static int +gscGetNextEntry (rp, ep) +GSCRegion *rp; +GSCEntry *ep; +{ + char buf[16]; + + /* can't use scanf because we are breaking on columns not whitespace + * so just read in in pieces as we go. + * I5 ID within region + * F9 RA, degrees + * F9 Dec, degrees + * F5 position error, arc seconds + * F5 magnitude + * F4 magnitude error + * I2 magnitude band + * I1 classification + * A4 internal plate number + * A1 T/F whether there are more + */ + + if (rp->nrows <= 0) + return (-1); + + (void) fread (buf, 1, 5, rp->fp); /* ID */ + buf[5] = '\0'; + ep->id = atoi (buf); + + (void) fread (buf, 1, 9, rp->fp); /* RA */ + buf[9] = '\0'; + (void) sscanf (buf, "%lf", &ep->ra); + ep->ra = degrad(ep->ra); + + (void) fread (buf, 1, 9, rp->fp); /* Dec */ + buf[9] = '\0'; + (void) sscanf (buf, "%lf", &ep->dec); + ep->dec = degrad(ep->dec); + + (void) fread (buf, 1, 5, rp->fp); /* poserr (discarded) */ + + (void) fread (buf, 1, 5, rp->fp); /* mag */ + buf[5] = '\0'; + (void) sscanf (buf, "%lf", &ep->mag); + + (void) fread (buf, 1, 4, rp->fp); /* mag error (discarded) */ + + (void) fread (buf, 1, 2, rp->fp); /* mag band (discarded) */ + + (void) fread (buf, 1, 1, rp->fp); /* class */ + buf[1] = '\0'; + ep->class = atoi (buf); + + (void) fread (buf, 1, 4, rp->fp); /* plate (discarded)*/ + (void) fread (buf, 1, 1, rp->fp); /* multiflag (discarded)*/ + + if (feof(rp->fp) || ferror(rp->fp)) { + fprintf (stderr, "%s:\n%d stars short\n", rp->file, rp->nrows); + return(-1); + } + + rp->nrows -= 1; + + return (0); +} + +/* do whatever cleanup might be required when finished with rp + */ +static void +gscCloseRegion (rp) +GSCRegion *rp; +{ + fclose (rp->fp); + rp->fp = NULL; +} + + +/* code to handle the details of the GSC cache files. + * the files have a short header at the front in ASCII. + * the stars then follow in a packed binary format. + * the packed format stores locations to within about .2 arcseconds. + * see the cacheReadEntry() function comments for format details. + */ + +#define RAERR (1e-6) /* allowed ra slop, rads */ +#define DECERR (1e-6) /* allowed dec slop, rads */ +#define MAGX 900.0 /* magnitude scale */ + +#undef LS +#undef RS /* already exists on HP's */ +#define LS(v,n) (((unsigned)(v)) << (n)) +#define RS(v,n) ((unsigned char)(0xff & ((n)==0?(v):(((unsigned)(v)) >> (n))))) + + +/* open and setup cp->fp, nrows and cosdec0 from an existing cache file off + * *chpath for the given region so it is ready to return successive entries. + * the other header fields should match those in rp. + * write any errs to lmsg but only if nocdrom since then this is likely just a + * first try. + * return 0 if ok else return -1. + */ +static int +cacheOpenRegion (rp, cp) +GSCRegion *rp; +GSCRegion *cp; +{ + char fullpath[1024]; + + /* open the cache file */ + cacheBuildFilename (fullpath, rp); + cp->fp = fopenh (fullpath, "rb"); + if (!cp->fp) { + if (nocdrom) + (void) sprintf (lmsg, "%s:\n%s", fullpath, syserrstr()); + return (-1); + } + + /* read the header */ + if (cacheReadHeader (cp) < 0) { + fclose (cp->fp); + cp->fp = NULL; + return (-1); + } + + /* header must agree with rp. + * N.B. we don't know rp->nrows because that only gets set if we + * can open the cdrom file -- but then we wouldn't be here :-) + */ + if (rp->south != cp->south || rp->id != cp->id + || fabs(rp->ra0 - cp->ra0) > RAERR + || fabs(rp->dec0 - cp->dec0) > DECERR) { + (void) sprintf (lmsg, "%s:\nheader mismatch", fullpath); + fprintf (stderr, "%s:\nheader mismatch\n", fullpath); + fprintf (stderr, " %d %d %g %g %d\n", + cp->id, cp->nrows, cp->ra0, cp->dec0, cp->south); + fprintf (stderr, " %d ?? %g %g %d\n", + rp->id, rp->ra0, rp->dec0, rp->south); + fclose (cp->fp); + cp->fp = NULL; + return (-1); + } + + cp->cosdec0 = cos(cp->dec0); + + return (0); +} + +/* return the next entry from the cache region. + * decrement rp->nrows as we go and return -1 when it reaches 0, else 0. + */ +static int +cacheGetNextEntry (rp, ep) +GSCRegion *rp; +GSCEntry *ep; +{ + if (rp->nrows <= 0) + return (-1); + cacheReadEntry (rp, ep); + rp->nrows -= 1; + return (0); +} + + +/* do whatever cleanup might be required when finished with rp. + */ +static void +cacheCloseRegion (rp) +GSCRegion *rp; +{ + fclose (rp->fp); + rp->fp = NULL; +} + +/* try to create a new cache file for region *rp off the chpath dir. + * make a new descriptor for it at *cp. + * return 0 if ok, else complain to lmsg and return -1. + */ +static int +cacheCreateRegion (rp, cp) +GSCRegion *rp; +GSCRegion *cp; +{ + char fullpath[1024]; + + /* copy most fields from rp */ + *cp = *rp; + + /* create a new file, and directory too if necessary */ + cacheBuildFilename (fullpath, rp); + cp->fp = fopenh (fullpath, "wb"); + if (!cp->fp) { + if (errno == ENOENT) { + /* failed because of nonexistent dir component */ + char fulldir[1024]; + + cacheBuildDir (fulldir, rp); + if (mymkdir (fulldir) < 0) { + (void) sprintf (lmsg, "mkdir(%s): %s", fulldir,syserrstr()); + return (-1); + } + cp->fp = fopenh (fullpath, "wb"); + } + + if (!cp->fp) { + (void) sprintf (lmsg, "create(%s): %s", fullpath, syserrstr()); + return (-1); + } + } + + /* set up the cosdec0 shortcut */ + cp->cosdec0 = cos(cp->dec0); + + /* write header onto the new cache file */ + cacheWriteHeader (cp); + + return (0); +} + +/* write ep to rp->fp. + */ +static void +cacheAddEntry (rp, ep) +GSCRegion *rp; +GSCEntry *ep; +{ + cacheWriteEntry (rp, ep); +} + +/* build a full cache filename for rp off chpath dir. + */ +static void +cacheBuildFilename (fullpath, rp) +char fullpath[]; +GSCRegion *rp; +{ + (void) sprintf (fullpath, "%s/%s/%04d.ech", chpath, rp->dir, rp->id); +} + +/* build a full cache dir for rp off chpath dir. + */ +static void +cacheBuildDir (fullpath, rp) +char fullpath[]; +GSCRegion *rp; +{ + (void) sprintf (fullpath, "%s/%s", chpath, rp->dir); +} + +/* read a cache file header and fill in rp. + * leave rp->fp positioned at first star. + */ +static int +cacheReadHeader (rp) +GSCRegion *rp; +{ + char hdr[128]; + double v; + int c, i; + + /* read up to first nl */ + for (i=0; (c=getc(rp->fp)) != EOF && c != '\n' && i < sizeof(hdr); i++) + hdr[i] = (char)c; + if (i == sizeof(hdr)) { + char fullpath[1024]; + cacheBuildFilename (fullpath, rp); + hdr[sizeof(hdr)-1] = '\0'; + (void) sprintf (lmsg, "%s:\nno header: %s", fullpath, hdr); + return (-1); + } + + /* crack it */ + hdr[i] = '\0'; + i = sscanf (hdr, "%lf %d %d %lf %lf %d\n", &v, &rp->id, &rp->nrows, + &rp->ra0, &rp->dec0, &rp->south); + if (i != 6) { + char fullpath[128]; + cacheBuildFilename (fullpath, rp); + (void) sprintf (lmsg, "%s:\nbad header: %s", fullpath, hdr); + return (-1); + } + + if (v > cacheversion) { + char fullpath[128]; + cacheBuildFilename (fullpath, rp); + (void) sprintf (lmsg, "%s:\nunsupported version: %g", fullpath, v); + return (-1); + } + + return (0); +} + +/* write a cache file header from rp. + * N.B. must be same length every time because we are called to overright. + */ +static void +cacheWriteHeader (rp) +GSCRegion *rp; +{ + char hdr[128]; + int n; + + /* format the header */ + (void) sprintf (hdr, "%4.1f %4d %5d %9.7f %9.7f %1d\n", + cacheversion, rp->id, rp->nrows, rp->ra0, rp->dec0, rp->south); + n = strlen (hdr); + + /* write it */ + fwrite (hdr, 1, n, rp->fp); +} + +/* read a cache file entry + * 0 2 delta ra, rads, 0 .. degrad(4) * cos(dec0), scaled 0 .. 0xffff + * 2 2 delta dec, rads, 0 .. degrad(4), scaled 0 .. 0xffff + * 4 2 small region id + * 6 2 upper 2 bits are class, lower 14 are magnitude*MAGX + * 8 total bytes per entry + * all values stored in big-endian byte order. + */ +static void +cacheReadEntry (rp, ep) +GSCRegion *rp; +GSCEntry *ep; +{ + FILE *fp = rp->fp; + unsigned char buf[2]; + unsigned i; + + (void) fread (buf, 1, 2, fp); + i = LS(buf[0],8) | LS(buf[1],0); + ep->ra = rp->ra0 + (double)i/(double)0xffff*degrad(4)/rp->cosdec0; + + (void) fread (buf, 1, 2, fp); + i = LS(buf[0],8) | LS(buf[1],0); + ep->dec = rp->dec0 + (double)i/(double)0xffff*degrad(4); + if (rp->south) + ep->dec = -ep->dec; + + (void) fread (buf, 1, 2, fp); + ep->id = LS(buf[0],8) | LS(buf[1],0); + + (void) fread (buf, 1, 2, fp); + i = LS(buf[0],8) | LS(buf[1],0); + ep->class = (i>>14)&0x3; + ep->mag = (i&0x3fff)/MAGX; +} + +/* write a cache file entry + * 0 2 delta ra, rads, 0 .. degrad(4) * cos(dec0), scaled 0 .. 0xffff + * 2 2 delta dec, rads, 0 .. degrad(4), scaled 0 .. 0xffff + * 4 2 small region id + * 6 2 upper 2 bits are class, lower 14 are magnitude*MAGX + * 8 total bytes per entry + * all values stored in big-endian byte order. + */ +static void +cacheWriteEntry (rp, ep) +GSCRegion *rp; +GSCEntry *ep; +{ + FILE *fp = rp->fp; + unsigned char buf[2]; + unsigned i; + double d, a; + + d = (ep->ra - rp->ra0)*(double)0xffff/degrad(4)*rp->cosdec0; + i = (unsigned)floor(d + 0.5); + buf[0] = RS(i,8); + buf[1] = RS(i,0); + fwrite (buf, 1, 2, fp); + + d = rp->south ? -ep->dec : ep->dec; + a = (d - rp->dec0)*(double)0xffff/degrad(4); + i = (unsigned)floor(a + 0.5); + buf[0] = RS(i,8); + buf[1] = RS(i,0); + fwrite (buf, 1, 2, fp); + + i = ep->id; + buf[0] = RS(i,8); + buf[1] = RS(i,0); + fwrite (buf, 1, 2, fp); + + i = (unsigned)floor(ep->mag*MAGX + 0.5) | (ep->class << 14); + buf[0] = RS(i,8); + buf[1] = RS(i,0); + fwrite (buf, 1, 2, fp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: gsc.c,v $ $Date: 2004/05/14 02:14:28 $ $Revision: 1.11 $ $Name: $"}; diff --git a/GUI/xephem/gscnet.c b/GUI/xephem/gscnet.c new file mode 100644 index 0000000..e85cc3d --- /dev/null +++ b/GUI/xephem/gscnet.c @@ -0,0 +1,449 @@ +/* fetch GSC stars from the network. + */ + +#include +#include +#include +#include +#include + +#include "xephem.h" + +static int moreObjF (ObjF **opp, int nop, int nnew); + +/* fetch GSC 2.3 stars around the given field of view from STScI. + * if find some add them to the list at *opp and return new total, else + * limit FOV to 30 arc mins -- these fields can be very dense. + * return -1 with a diagnostic message in msg[]. + */ +int +gsc23fetch ( +char *url, /* everything in the URL except the query */ +Now *np, /* current circumstances */ +double ra, double dec, /* RA/Dec of center of view, rads, J2000 */ +double fov, /* diamater of field of view, rads */ +double lmag, /* limiting magnitude desired */ +ObjF **opp, /* *opp is malloced with stars found */ +int nop, /* number already at *opp */ +char msg[]) /* return diagnostic message here, if returning -1 */ +{ +#define GSC23MAXFOV degrad(30./60.0) /* max fov */ + /* http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?RA=10.0&DEC=5.0&SR=0.2&FORMAT=CSV */ + static char ifmt[] = "%[^,],%lf,%lf,%*[^,],%*[^,],%*[^,],%*[^,],%lf,%lf,%*[^,],%*[^,],%lf,%lf,%lf,%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%d"; + static char gfmt[] = " GET http://%s%s?RA=%g&DEC=%g&SR=%g&FORMAT=CSV HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n"; + char host[1024]; + char buf[2048]; + char *hp1; + int sockfd; + int n, nstars, nnew; + + /* clamp fov */ + if (fov > GSC23MAXFOV) { + static int fovwarned; + if (!fovwarned) { + xe_msg (1, "All GSC 2.3 downloads will be limited to %.2f degree FOV", + raddeg(GSC23MAXFOV)); + fovwarned = 1; + } + fov = GSC23MAXFOV; + } + + /* extract host */ + if (strncmp (url, "http://", 7)) { + strcpy (msg, "URL must start with http://"); + return (-1); + } + if (!(hp1 = strchr (url+7, '/'))) { + strcpy (msg, "no host found in URL"); + return (-1); + } + sprintf (host, "%.*s", (int)(hp1-(url+7)), url+7); + + /* format the GET */ + (void) sprintf (buf, gfmt, host, hp1, raddeg(ra), raddeg(dec), + raddeg(fov)/2, PATCHLEVEL); + + /* let user abort */ + stopd_up(); + + /* send the GET method to host and connection to read response */ + sockfd = httpGET (host, buf, msg); + if (sockfd < 0) { + stopd_down(); + return (-1); + } + + /* now read lines of stars from the socket and collect in opp array */ + nnew = 0; + pm_up(); + pm_set(0); + while ((n = recvlineb (sockfd, buf, sizeof(buf))) > 0) { + char name[1024]; + double radeg, decdeg; + double fmag, jmag, bmag, vmag, rmag; + int class; + Obj *op; + + /* look for total */ + if (sscanf (buf, " Objects found : %d", &nstars) == 1) + continue; + + /* crack */ + if (sscanf (buf, ifmt, name, &radeg, &decdeg, &fmag, &jmag, &bmag, + &vmag, &rmag, &class) != 9) + continue; + if (fmag>lmag && jmag>lmag && bmag>lmag && vmag>lmag && rmag>lmag) + continue; + + /* good -- grow list */ + if (moreObjF (opp, nop, 1) < 0) { + (void) strcpy (msg, "No memory"); + (void) close (sockfd); + stopd_down(); + return (-1); + } + op = (Obj *)(&(*opp)[nop++]); + zero_mem ((void *)op, sizeof(ObjF)); + + /* add */ + (void) sprintf (op->o_name, "GSC2.3 %.*s", MAXNM-8, name); + op->o_type = FIXED; + switch (class) { + case 0: op->f_class = 'S'; break; + case 1: op->f_class = 'G'; break; + default: op->f_class = 'T'; break; + } + op->f_RA = degrad (radeg); + op->f_dec = degrad (decdeg); + op->f_epoch = (float)J2000; + if (vmag<=lmag) + set_fmag (op, vmag); + else if (bmag<=lmag) + set_fmag (op, bmag); + else if (rmag<=lmag) + set_fmag (op, rmag); + else if (fmag<=lmag) + set_fmag (op, fmag); + else + set_fmag (op, jmag); + + if (nstars > 0) + pm_set (100*nnew++/nstars); + } + + (void) close (sockfd); + stopd_down(); + pm_down(); + + if (n < 0) { + (void) strcpy (msg, syserrstr()); + return (-1); + } + return (nop); +} + +#if 0 /* depricated */ + +/* fetch GSC stars around the given field of view from the named xephem host. + * if find some add them to the list at *opp and return new total, else + * return -1 with a diagnostic message in msg[]. + */ +int +gscnetfetch ( +char *url, /* http:///xephemdbd.pl or whatever */ +Now *np, /* current circumstances */ +double ra, double dec, /* RA/Dec of center of view, rads, J2000 */ +double fov, /* diamater of field of view, rads */ +double mag, /* limiting magnitude desired */ +ObjF **opp, /* *opp is malloced with stars found */ +int nop, /* number already at *opp */ +char msg[]) /* return diagnostic message here, if returning -1 */ +{ +static char ofmt[] = "GET http://%s%s?VERSION=3&FMT=EDB&CENTRIC=GEO&PRECES=ASTRO&GS=on&DATE=Now&TIME=&RA=%s&DEC=%s&FOV=%g&MAG=%g&LAT=0+0+0&LONG=0+0+0&ELEV=0 HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n"; + char *h0p, *h1p, host[1024]; + char rbuf[32], *rbp, dbuf[32], *dbp; + char buf[2048]; + int sockfd; + int n; + + /* confirm http and pull out the host from url */ + if ((h0p = strstr (url, "http://")) || (h0p = strstr (url, "HTTP://"))) + h0p += 7; + else { + strcpy (msg, "URL must begin with http://"); + return (-1); + } + h1p = strchr (h0p, '/'); + if (!h1p) { + (void) strcpy (msg, "No host in xephemdbd url"); + return (-1); + } + (void) sprintf (host, "%.*s", (int)(h1p-h0p), h0p); + + /* format the GET -- skip leading blanks in rbuf and dbuf */ + fs_sexa (rbuf, radhr(ra), 2, 36000); + for (rbp = rbuf; *rbp == ' '; rbp++) continue; + fs_sexa (dbuf, raddeg(dec), 3, 3600); + for (dbp = dbuf; *dbp == ' '; dbp++) continue; + (void) sprintf (buf, ofmt, host, h1p, rbp, dbp, raddeg(fov), mag, PATCHLEVEL); + + /* let user abort */ + stopd_up(); + + /* send the GET method to host and connection to read response */ + sockfd = httpGET (host, buf, msg); + if (sockfd < 0) { + stopd_down(); + return (-1); + } + + /* now read lines of stars from the socket and collect good lines in + * opp array + */ + while ((n = recvlineb (sockfd, buf, sizeof(buf))) > 0) { + Obj o, *op; + + if (db_crack_line (buf, &o, NULL, 0, NULL) < 0 || o.o_type != FIXED) + continue; + + if (moreObjF (opp, nop, 1) < 0) { + (void) strcpy (msg, "No memory"); + (void) close (sockfd); + stopd_down(); + return (-1); + } + + op = (Obj *)(&(*opp)[nop++]); + memcpy ((void *)op, (void *)&o, sizeof(ObjF)); + } + + (void) close (sockfd); + stopd_down(); + + if (n < 0) { + (void) strcpy (msg, syserrstr()); + return (-1); + } + return (nop); +} + + +/* fetch GSC stars around the given field of view from ESO. + * if find some add them to the list at *opp and return new total, else + * return -1 with a diagnostic message in msg[]. + */ +int +gscesofetch ( +Now *np, /* current circumstances */ +double ra, double dec, /* RA/Dec of center of view, rads, J2000 */ +double fov, /* diamater of field of view, rads */ +double mag, /* limiting magnitude desired */ +ObjF **opp, /* *opp is malloced with stars found */ +int nop, /* number already at *opp */ +char msg[]) /* return diagnostic message here, if returning -1 */ +{ + static char eso_host[] = "archive.eso.org"; +static char ifmt[] = "%s %lf %lf %lf %lf %lf %lf %*s %lf %*s %*s %d"; +static char ofmt[] = "GET http://%s/skycat/servers/gsc-server?%.6f%c%.6f&r=0,%.1f&m=0,%g&s=R&f=1&* HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n"; + static char eofcode[] = "[EOD]"; + char buf[1024]; + int sockfd; + int n; + + /* format the GET */ + (void) sprintf (buf, ofmt, eso_host, radhr(ra), dec<0?'-':'+', fabs(raddeg(dec)), + raddeg(fov/2)*60, mag, PATCHLEVEL); + + /* let user abort */ + stopd_up(); + + /* send the GET method to host and connection to read response */ + sockfd = httpGET (eso_host, buf, msg); + if (sockfd < 0) { + stopd_down(); + return (-1); + } + + /* now read lines of stars from the socket and collect in opp array */ + while ((n = recvlineb (sockfd, buf, sizeof(buf))) > 0) { + double rh, rm, rs; + double dd, dm, ds; + char name[32]; + double m; + Obj *op; + int c; + + if (strncmp (buf, eofcode, sizeof(eofcode)-1) == 0) + break; + + if (sscanf (buf,ifmt,name,&rh,&rm,&rs,&dd,&dm,&ds,&m,&c) != 9) + continue; + if (moreObjF (opp, nop, 1) < 0) { + (void) strcpy (msg, "No memory"); + (void) close (sockfd); + stopd_down(); + return (-1); + } + op = (Obj *)(&(*opp)[nop++]); + zero_mem ((void *)op, sizeof(ObjF)); + + (void) sprintf (op->o_name, "GSC %.4s-%.4s", name+1, name+6); + op->o_type = FIXED; + op->f_class = c == 0 ? 'S' : 'T'; + op->f_RA = (float) hrrad (rs/3600.0 + rm/60.0 + rh); + dd = fabs(dd); + op->f_dec = (float) degrad (ds/3600.0 + dm/60.0 + dd); + if (buf[23] == '-') + op->f_dec *= -1.0; + op->f_epoch = (float)J2000; + set_fmag (op, m); + } + + (void) close (sockfd); + stopd_down(); + + if (n < 0) { + (void) strcpy (msg, syserrstr()); + return (-1); + } + return (nop); +} + + +/* fetch GSC 2.2 stars around the given field of view from STScI. + * if find some add them to the list at *opp and return new total, else + * limit FOV to 30 arc mins -- these fields can be very dense. + * return -1 with a diagnostic message in msg[]. + */ +int +gsc22fetch ( +Now *np, /* current circumstances */ +double ra, double dec, /* RA/Dec of center of view, rads, J2000 */ +double fov, /* diamater of field of view, rads */ +double mag, /* limiting magnitude desired */ +ObjF **opp, /* *opp is malloced with stars found */ +int nop, /* number already at *opp */ +char msg[]) /* return diagnostic message here, if returning -1 */ +{ +#define GSC22MAXFOV degrad(0.5) /* max fov */ + /* http://www-gsss.stsci.edu/cgi-bin/gsc22query.exe?ra=1%3A2%3A3&dec=4%3A5%3A6&r1=0&r2=5&m1=0.0&m2=19.5&n=20000&submit2=Submit+Request */ + static char host[] = "www-gsss.stsci.edu"; + static char ifmt[] = "%s %lf %lf %*lf %*lf %*lf %lf %lf %*lf %*lf %lf %*lf %lf %*lf %lf %*lf %lf %*lf %*lf %*lf %*lf %d"; + static char ofmt[] = "GET http://%s/cgi-bin/gsc22query.exe?ra=%d%%3A%d%%3A%d&dec=%c%d%%3A%d%%3A%d&r1=0&r2=%g&m1=0.0&m2=%g&n=100000&submit2=Submit+Request HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n"; + static char eofcode[] = "[EOD]"; + char buf[1024]; + char dsign; + int rh, rm, rs, dd, dm, ds; + double fmag, jmag, vmag, nmag, pmRA, pmdec; + int class; + int sockfd; + int n; + + /* clamp fov */ + if (fov > GSC22MAXFOV) { + sprintf (msg, "GSC 22 FOV is limited to %.2f degree", + raddeg(GSC22MAXFOV)); + return (-1); + } + + /* format the GET */ + fs_sexa (buf, radhr(ra), 3, 3600); + sscanf (buf, "%d:%d:%d", &rh, &rm, &rs); + fs_sexa (buf, raddeg(fabs(dec)), 4, 3600); + sscanf (buf, "%d:%d:%d", &dd, &dm, &ds); + dsign = dec < 0 ? '-' : '+'; + (void) sprintf (buf, ofmt, host, rh, rm, rs, dsign, dd, dm, ds, + raddeg(fov/2)*60, mag, PATCHLEVEL); + + /* let user abort */ + stopd_up(); + + /* send the GET method to host and connection to read response */ + sockfd = httpGET (host, buf, msg); + if (sockfd < 0) { + stopd_down(); + return (-1); + } + + /* now read lines of stars from the socket and collect in opp array */ + while ((n = recvlineb (sockfd, buf, sizeof(buf))) > 0) { + char name[32]; + Obj *op; + + if (strncmp (buf, eofcode, sizeof(eofcode)-1) == 0) + break; + + if (sscanf (buf, ifmt, name, &radeg, &decdeg, &pmRA, &pmdec, + &fmag, &jmag, &vmag, &nmag, &class) != 10) + continue; + if (moreObjF (opp, nop, 1) < 0) { + (void) strcpy (msg, "No memory"); + (void) close (sockfd); + stopd_down(); + return (-1); + } + op = (Obj *)(&(*opp)[nop++]); + zero_mem ((void *)op, sizeof(ObjF)); + + (void) sprintf (op->o_name, "GSC2 %.*s", MAXNM-6, name); + op->o_type = FIXED; + switch (class) { + case 0: op->f_class = 'S'; break; + case 1: op->f_class = 'G'; break; + default: op->f_class = 'T'; break; + } + op->f_RA = degrad (radeg); + op->f_pmRA = (float) 1.327e-11*pmRA; /* mas/yr -> rad/dy */ + op->f_dec = degrad (decdeg); + op->f_pmdec = (float) 1.327e-11*pmdec; /* mas/yr -> rad/dy */ + if (fabs(op->f_dec) < PI/2) + op->f_pmRA /= cos (op->f_dec); + op->f_epoch = (float)J2000; + if (vmag < 30) + set_fmag (op, vmag); + else if (fmag < 30) + set_fmag (op, fmag); + else if (jmag < 30) + set_fmag (op, jmag); + else if (nmag < 30) + set_fmag (op, nmag); + else + set_fmag (op, 0.0); + } + + (void) close (sockfd); + stopd_down(); + + if (n < 0) { + (void) strcpy (msg, syserrstr()); + return (-1); + } + return (nop); +} + +#endif + +/* grow *opp, which already contains nop, to hold nnew more. + * if ok update *opp and return 0, else -1. + */ +static int +moreObjF (opp, nop, nnew) +ObjF **opp; +int nop; +int nnew; +{ + char *newmem; + + /* extend *opp for nnew more ObjF's */ + if (*opp) + newmem = realloc ((void *)*opp, (nop+nnew)*sizeof(ObjF)); + else + newmem = malloc (nnew * sizeof(ObjF)); + if (!newmem) + return (-1); + *opp = (ObjF *)newmem; + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: gscnet.c,v $ $Date: 2010/10/06 21:12:16 $ $Revision: 1.22 $ $Name: $"}; diff --git a/GUI/xephem/help/._png b/GUI/xephem/help/._png new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/._png differ diff --git a/GUI/xephem/help/._xephem.html b/GUI/xephem/help/._xephem.html new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/._xephem.html differ diff --git a/GUI/xephem/help/png/._aavso.png b/GUI/xephem/help/png/._aavso.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._aavso.png differ diff --git a/GUI/xephem/help/png/._annotation.png b/GUI/xephem/help/png/._annotation.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._annotation.png differ diff --git a/GUI/xephem/help/png/._close-pairs.png b/GUI/xephem/help/png/._close-pairs.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._close-pairs.png differ diff --git a/GUI/xephem/help/png/._coordconv.png b/GUI/xephem/help/png/._coordconv.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._coordconv.png differ diff --git a/GUI/xephem/help/png/._data-index.png b/GUI/xephem/help/png/._data-index.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._data-index.png differ diff --git a/GUI/xephem/help/png/._data-table-setup.png b/GUI/xephem/help/png/._data-table-setup.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._data-table-setup.png differ diff --git a/GUI/xephem/help/png/._data-table.png b/GUI/xephem/help/png/._data-table.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._data-table.png differ diff --git a/GUI/xephem/help/png/._db.png b/GUI/xephem/help/png/._db.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._db.png differ diff --git a/GUI/xephem/help/png/._each-control-objects.png b/GUI/xephem/help/png/._each-control-objects.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._each-control-objects.png differ diff --git a/GUI/xephem/help/png/._earth.png b/GUI/xephem/help/png/._earth.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._earth.png differ diff --git a/GUI/xephem/help/png/._external-input.png b/GUI/xephem/help/png/._external-input.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._external-input.png differ diff --git a/GUI/xephem/help/png/._favorites.png b/GUI/xephem/help/png/._favorites.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._favorites.png differ diff --git a/GUI/xephem/help/png/._fieldstars.png b/GUI/xephem/help/png/._fieldstars.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._fieldstars.png differ diff --git a/GUI/xephem/help/png/._gallery.png b/GUI/xephem/help/png/._gallery.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._gallery.png differ diff --git a/GUI/xephem/help/png/._imreg.png b/GUI/xephem/help/png/._imreg.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._imreg.png differ diff --git a/GUI/xephem/help/png/._indiconfig.png b/GUI/xephem/help/png/._indiconfig.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._indiconfig.png differ diff --git a/GUI/xephem/help/png/._indicontrol.png b/GUI/xephem/help/png/._indicontrol.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._indicontrol.png differ diff --git a/GUI/xephem/help/png/._internet-update.png b/GUI/xephem/help/png/._internet-update.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._internet-update.png differ diff --git a/GUI/xephem/help/png/._jupiter-view-more-info.png b/GUI/xephem/help/png/._jupiter-view-more-info.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._jupiter-view-more-info.png differ diff --git a/GUI/xephem/help/png/._jupiter.png b/GUI/xephem/help/png/._jupiter.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._jupiter.png differ diff --git a/GUI/xephem/help/png/._listing.png b/GUI/xephem/help/png/._listing.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._listing.png differ diff --git a/GUI/xephem/help/png/._lo.png b/GUI/xephem/help/png/._lo.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._lo.png differ diff --git a/GUI/xephem/help/png/._logo.png b/GUI/xephem/help/png/._logo.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._logo.png differ diff --git a/GUI/xephem/help/png/._main-calendar.png b/GUI/xephem/help/png/._main-calendar.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._main-calendar.png differ diff --git a/GUI/xephem/help/png/._main-local.png b/GUI/xephem/help/png/._main-local.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._main-local.png differ diff --git a/GUI/xephem/help/png/._main-looping.png b/GUI/xephem/help/png/._main-looping.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._main-looping.png differ diff --git a/GUI/xephem/help/png/._main-night.png b/GUI/xephem/help/png/._main-night.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._main-night.png differ diff --git a/GUI/xephem/help/png/._main-time.png b/GUI/xephem/help/png/._main-time.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._main-time.png differ diff --git a/GUI/xephem/help/png/._main.png b/GUI/xephem/help/png/._main.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._main.png differ diff --git a/GUI/xephem/help/png/._mars-moon-more-info.png b/GUI/xephem/help/png/._mars-moon-more-info.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._mars-moon-more-info.png differ diff --git a/GUI/xephem/help/png/._mars-moons.png b/GUI/xephem/help/png/._mars-moons.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._mars-moons.png differ diff --git a/GUI/xephem/help/png/._mars-more-info.png b/GUI/xephem/help/png/._mars-more-info.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._mars-more-info.png differ diff --git a/GUI/xephem/help/png/._mars.png b/GUI/xephem/help/png/._mars.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._mars.png differ diff --git a/GUI/xephem/help/png/._moon-more-info.png b/GUI/xephem/help/png/._moon-more-info.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._moon-more-info.png differ diff --git a/GUI/xephem/help/png/._moon.png b/GUI/xephem/help/png/._moon.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._moon.png differ diff --git a/GUI/xephem/help/png/._movie.png b/GUI/xephem/help/png/._movie.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._movie.png differ diff --git a/GUI/xephem/help/png/._naag.png b/GUI/xephem/help/png/._naag.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._naag.png differ diff --git a/GUI/xephem/help/png/._network-setup.png b/GUI/xephem/help/png/._network-setup.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._network-setup.png differ diff --git a/GUI/xephem/help/png/._obslog-list.png b/GUI/xephem/help/png/._obslog-list.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._obslog-list.png differ diff --git a/GUI/xephem/help/png/._obslog.png b/GUI/xephem/help/png/._obslog.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._obslog.png differ diff --git a/GUI/xephem/help/png/._plot-sample.png b/GUI/xephem/help/png/._plot-sample.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._plot-sample.png differ diff --git a/GUI/xephem/help/png/._plot.png b/GUI/xephem/help/png/._plot.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._plot.png differ diff --git a/GUI/xephem/help/png/._print.png b/GUI/xephem/help/png/._print.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._print.png differ diff --git a/GUI/xephem/help/png/._saturn-more-info.png b/GUI/xephem/help/png/._saturn-more-info.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._saturn-more-info.png differ diff --git a/GUI/xephem/help/png/._saturn.png b/GUI/xephem/help/png/._saturn.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._saturn.png differ diff --git a/GUI/xephem/help/png/._save-colors.png b/GUI/xephem/help/png/._save-colors.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._save-colors.png differ diff --git a/GUI/xephem/help/png/._save-fonts.png b/GUI/xephem/help/png/._save-fonts.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._save-fonts.png differ diff --git a/GUI/xephem/help/png/._save-resources.png b/GUI/xephem/help/png/._save-resources.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._save-resources.png differ diff --git a/GUI/xephem/help/png/._seti@home.png b/GUI/xephem/help/png/._seti@home.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._seti@home.png differ diff --git a/GUI/xephem/help/png/._sites.png b/GUI/xephem/help/png/._sites.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sites.png differ diff --git a/GUI/xephem/help/png/._sky-binary.png b/GUI/xephem/help/png/._sky-binary.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-binary.png differ diff --git a/GUI/xephem/help/png/._sky-control-eyepieces.png b/GUI/xephem/help/png/._sky-control-eyepieces.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-control-eyepieces.png differ diff --git a/GUI/xephem/help/png/._sky-control-filter.png b/GUI/xephem/help/png/._sky-control-filter.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-control-filter.png differ diff --git a/GUI/xephem/help/png/._sky-control-horizon.png b/GUI/xephem/help/png/._sky-control-horizon.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-control-horizon.png differ diff --git a/GUI/xephem/help/png/._sky-control-list.png b/GUI/xephem/help/png/._sky-control-list.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-control-list.png differ diff --git a/GUI/xephem/help/png/._sky-control-options.png b/GUI/xephem/help/png/._sky-control-options.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-control-options.png differ diff --git a/GUI/xephem/help/png/._sky-history.png b/GUI/xephem/help/png/._sky-history.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-history.png differ diff --git a/GUI/xephem/help/png/._sky-images-fits.png b/GUI/xephem/help/png/._sky-images-fits.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-fits.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-contrast-tb.png b/GUI/xephem/help/png/._sky-images-ia-contrast-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-contrast-tb.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-contrast.png b/GUI/xephem/help/png/._sky-images-ia-contrast.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-contrast.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-gauss-tb.png b/GUI/xephem/help/png/._sky-images-ia-gauss-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-gauss-tb.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-gauss.png b/GUI/xephem/help/png/._sky-images-ia-gauss.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-gauss.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-glass-tb.png b/GUI/xephem/help/png/._sky-images-ia-glass-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-glass-tb.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-glass.png b/GUI/xephem/help/png/._sky-images-ia-glass.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-glass.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-roi-tb.png b/GUI/xephem/help/png/._sky-images-ia-roi-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-roi-tb.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-roi.png b/GUI/xephem/help/png/._sky-images-ia-roi.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-roi.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-slice-tb.png b/GUI/xephem/help/png/._sky-images-ia-slice-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-slice-tb.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-slice.png b/GUI/xephem/help/png/._sky-images-ia-slice.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-slice.png differ diff --git a/GUI/xephem/help/png/._sky-images-ia-snap-tb.png b/GUI/xephem/help/png/._sky-images-ia-snap-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-images-ia-snap-tb.png differ diff --git a/GUI/xephem/help/png/._sky-popup-menu.png b/GUI/xephem/help/png/._sky-popup-menu.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-popup-menu.png differ diff --git a/GUI/xephem/help/png/._sky-upperleft-delta-roaming.png b/GUI/xephem/help/png/._sky-upperleft-delta-roaming.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-upperleft-delta-roaming.png differ diff --git a/GUI/xephem/help/png/._sky-upperleft-roaming.png b/GUI/xephem/help/png/._sky-upperleft-roaming.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-upperleft-roaming.png differ diff --git a/GUI/xephem/help/png/._sky-upperright-delta-roaming.png b/GUI/xephem/help/png/._sky-upperright-delta-roaming.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-upperright-delta-roaming.png differ diff --git a/GUI/xephem/help/png/._sky-upperright-roaming.png b/GUI/xephem/help/png/._sky-upperright-roaming.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-upperright-roaming.png differ diff --git a/GUI/xephem/help/png/._sky-view-how-tb.png b/GUI/xephem/help/png/._sky-view-how-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-view-how-tb.png differ diff --git a/GUI/xephem/help/png/._sky-view-what-tb.png b/GUI/xephem/help/png/._sky-view-what-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-view-what-tb.png differ diff --git a/GUI/xephem/help/png/._sky-view-where-tb.png b/GUI/xephem/help/png/._sky-view-where-tb.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-view-where-tb.png differ diff --git a/GUI/xephem/help/png/._sky-view.png b/GUI/xephem/help/png/._sky-view.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sky-view.png differ diff --git a/GUI/xephem/help/png/._solsys.png b/GUI/xephem/help/png/._solsys.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._solsys.png differ diff --git a/GUI/xephem/help/png/._solver.png b/GUI/xephem/help/png/._solver.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._solver.png differ diff --git a/GUI/xephem/help/png/._stepsize.png b/GUI/xephem/help/png/._stepsize.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._stepsize.png differ diff --git a/GUI/xephem/help/png/._sun-view.png b/GUI/xephem/help/png/._sun-view.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._sun-view.png differ diff --git a/GUI/xephem/help/png/._syslog.png b/GUI/xephem/help/png/._syslog.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._syslog.png differ diff --git a/GUI/xephem/help/png/._trails.png b/GUI/xephem/help/png/._trails.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._trails.png differ diff --git a/GUI/xephem/help/png/._uranus-more-info.png b/GUI/xephem/help/png/._uranus-more-info.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._uranus-more-info.png differ diff --git a/GUI/xephem/help/png/._uranus.png b/GUI/xephem/help/png/._uranus.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._uranus.png differ diff --git a/GUI/xephem/help/png/._valid-html401.png b/GUI/xephem/help/png/._valid-html401.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._valid-html401.png differ diff --git a/GUI/xephem/help/png/._wcssolver.png b/GUI/xephem/help/png/._wcssolver.png new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/help/png/._wcssolver.png differ diff --git a/GUI/xephem/help/png/aavso.png b/GUI/xephem/help/png/aavso.png new file mode 100644 index 0000000..7360b7f Binary files /dev/null and b/GUI/xephem/help/png/aavso.png differ diff --git a/GUI/xephem/help/png/annotation.png b/GUI/xephem/help/png/annotation.png new file mode 100644 index 0000000..de286ad Binary files /dev/null and b/GUI/xephem/help/png/annotation.png differ diff --git a/GUI/xephem/help/png/close-pairs.png b/GUI/xephem/help/png/close-pairs.png new file mode 100644 index 0000000..a520d41 Binary files /dev/null and b/GUI/xephem/help/png/close-pairs.png differ diff --git a/GUI/xephem/help/png/coordconv.png b/GUI/xephem/help/png/coordconv.png new file mode 100644 index 0000000..897b37d Binary files /dev/null and b/GUI/xephem/help/png/coordconv.png differ diff --git a/GUI/xephem/help/png/data-index.png b/GUI/xephem/help/png/data-index.png new file mode 100644 index 0000000..a341097 Binary files /dev/null and b/GUI/xephem/help/png/data-index.png differ diff --git a/GUI/xephem/help/png/data-table-setup.png b/GUI/xephem/help/png/data-table-setup.png new file mode 100644 index 0000000..6d84a73 Binary files /dev/null and b/GUI/xephem/help/png/data-table-setup.png differ diff --git a/GUI/xephem/help/png/data-table.png b/GUI/xephem/help/png/data-table.png new file mode 100644 index 0000000..cc7d398 Binary files /dev/null and b/GUI/xephem/help/png/data-table.png differ diff --git a/GUI/xephem/help/png/db.png b/GUI/xephem/help/png/db.png new file mode 100644 index 0000000..ba0102f Binary files /dev/null and b/GUI/xephem/help/png/db.png differ diff --git a/GUI/xephem/help/png/each-control-objects.png b/GUI/xephem/help/png/each-control-objects.png new file mode 100644 index 0000000..e8c5341 Binary files /dev/null and b/GUI/xephem/help/png/each-control-objects.png differ diff --git a/GUI/xephem/help/png/earth.png b/GUI/xephem/help/png/earth.png new file mode 100644 index 0000000..bdbb4c4 Binary files /dev/null and b/GUI/xephem/help/png/earth.png differ diff --git a/GUI/xephem/help/png/external-input.png b/GUI/xephem/help/png/external-input.png new file mode 100644 index 0000000..6192a5e Binary files /dev/null and b/GUI/xephem/help/png/external-input.png differ diff --git a/GUI/xephem/help/png/favorites.png b/GUI/xephem/help/png/favorites.png new file mode 100644 index 0000000..fe60a9f Binary files /dev/null and b/GUI/xephem/help/png/favorites.png differ diff --git a/GUI/xephem/help/png/fieldstars.png b/GUI/xephem/help/png/fieldstars.png new file mode 100644 index 0000000..17a4427 Binary files /dev/null and b/GUI/xephem/help/png/fieldstars.png differ diff --git a/GUI/xephem/help/png/gallery.png b/GUI/xephem/help/png/gallery.png new file mode 100644 index 0000000..f2dab61 Binary files /dev/null and b/GUI/xephem/help/png/gallery.png differ diff --git a/GUI/xephem/help/png/imreg.png b/GUI/xephem/help/png/imreg.png new file mode 100644 index 0000000..31d84cc Binary files /dev/null and b/GUI/xephem/help/png/imreg.png differ diff --git a/GUI/xephem/help/png/indiconfig.png b/GUI/xephem/help/png/indiconfig.png new file mode 100644 index 0000000..bf47183 Binary files /dev/null and b/GUI/xephem/help/png/indiconfig.png differ diff --git a/GUI/xephem/help/png/indicontrol.png b/GUI/xephem/help/png/indicontrol.png new file mode 100644 index 0000000..bb9c9e5 Binary files /dev/null and b/GUI/xephem/help/png/indicontrol.png differ diff --git a/GUI/xephem/help/png/internet-update.png b/GUI/xephem/help/png/internet-update.png new file mode 100644 index 0000000..fe88c35 Binary files /dev/null and b/GUI/xephem/help/png/internet-update.png differ diff --git a/GUI/xephem/help/png/jupiter-view-more-info.png b/GUI/xephem/help/png/jupiter-view-more-info.png new file mode 100644 index 0000000..4427798 Binary files /dev/null and b/GUI/xephem/help/png/jupiter-view-more-info.png differ diff --git a/GUI/xephem/help/png/jupiter.png b/GUI/xephem/help/png/jupiter.png new file mode 100644 index 0000000..00786fa Binary files /dev/null and b/GUI/xephem/help/png/jupiter.png differ diff --git a/GUI/xephem/help/png/listing.png b/GUI/xephem/help/png/listing.png new file mode 100644 index 0000000..e2f927c Binary files /dev/null and b/GUI/xephem/help/png/listing.png differ diff --git a/GUI/xephem/help/png/lo.png b/GUI/xephem/help/png/lo.png new file mode 100644 index 0000000..815752d Binary files /dev/null and b/GUI/xephem/help/png/lo.png differ diff --git a/GUI/xephem/help/png/logo.png b/GUI/xephem/help/png/logo.png new file mode 100644 index 0000000..f416ab1 Binary files /dev/null and b/GUI/xephem/help/png/logo.png differ diff --git a/GUI/xephem/help/png/main-calendar.png b/GUI/xephem/help/png/main-calendar.png new file mode 100644 index 0000000..76bf6c7 Binary files /dev/null and b/GUI/xephem/help/png/main-calendar.png differ diff --git a/GUI/xephem/help/png/main-local.png b/GUI/xephem/help/png/main-local.png new file mode 100644 index 0000000..02c1b66 Binary files /dev/null and b/GUI/xephem/help/png/main-local.png differ diff --git a/GUI/xephem/help/png/main-looping.png b/GUI/xephem/help/png/main-looping.png new file mode 100644 index 0000000..affbcb3 Binary files /dev/null and b/GUI/xephem/help/png/main-looping.png differ diff --git a/GUI/xephem/help/png/main-night.png b/GUI/xephem/help/png/main-night.png new file mode 100644 index 0000000..eb7bfda Binary files /dev/null and b/GUI/xephem/help/png/main-night.png differ diff --git a/GUI/xephem/help/png/main-time.png b/GUI/xephem/help/png/main-time.png new file mode 100644 index 0000000..7f2af80 Binary files /dev/null and b/GUI/xephem/help/png/main-time.png differ diff --git a/GUI/xephem/help/png/main.png b/GUI/xephem/help/png/main.png new file mode 100644 index 0000000..20647bd Binary files /dev/null and b/GUI/xephem/help/png/main.png differ diff --git a/GUI/xephem/help/png/mars-moon-more-info.png b/GUI/xephem/help/png/mars-moon-more-info.png new file mode 100644 index 0000000..2d3f890 Binary files /dev/null and b/GUI/xephem/help/png/mars-moon-more-info.png differ diff --git a/GUI/xephem/help/png/mars-moons.png b/GUI/xephem/help/png/mars-moons.png new file mode 100644 index 0000000..4ab5f13 Binary files /dev/null and b/GUI/xephem/help/png/mars-moons.png differ diff --git a/GUI/xephem/help/png/mars-more-info.png b/GUI/xephem/help/png/mars-more-info.png new file mode 100644 index 0000000..f0175c4 Binary files /dev/null and b/GUI/xephem/help/png/mars-more-info.png differ diff --git a/GUI/xephem/help/png/mars.png b/GUI/xephem/help/png/mars.png new file mode 100644 index 0000000..0128660 Binary files /dev/null and b/GUI/xephem/help/png/mars.png differ diff --git a/GUI/xephem/help/png/moon-more-info.png b/GUI/xephem/help/png/moon-more-info.png new file mode 100644 index 0000000..d178d32 Binary files /dev/null and b/GUI/xephem/help/png/moon-more-info.png differ diff --git a/GUI/xephem/help/png/moon.png b/GUI/xephem/help/png/moon.png new file mode 100644 index 0000000..2d64308 Binary files /dev/null and b/GUI/xephem/help/png/moon.png differ diff --git a/GUI/xephem/help/png/movie.png b/GUI/xephem/help/png/movie.png new file mode 100644 index 0000000..e970c3e Binary files /dev/null and b/GUI/xephem/help/png/movie.png differ diff --git a/GUI/xephem/help/png/naag.png b/GUI/xephem/help/png/naag.png new file mode 100644 index 0000000..a3f8ee3 Binary files /dev/null and b/GUI/xephem/help/png/naag.png differ diff --git a/GUI/xephem/help/png/network-setup.png b/GUI/xephem/help/png/network-setup.png new file mode 100644 index 0000000..83ec5b3 Binary files /dev/null and b/GUI/xephem/help/png/network-setup.png differ diff --git a/GUI/xephem/help/png/obslog-list.png b/GUI/xephem/help/png/obslog-list.png new file mode 100644 index 0000000..3cd67ba Binary files /dev/null and b/GUI/xephem/help/png/obslog-list.png differ diff --git a/GUI/xephem/help/png/obslog.png b/GUI/xephem/help/png/obslog.png new file mode 100644 index 0000000..938151b Binary files /dev/null and b/GUI/xephem/help/png/obslog.png differ diff --git a/GUI/xephem/help/png/plot-sample.png b/GUI/xephem/help/png/plot-sample.png new file mode 100644 index 0000000..a37af6a Binary files /dev/null and b/GUI/xephem/help/png/plot-sample.png differ diff --git a/GUI/xephem/help/png/plot.png b/GUI/xephem/help/png/plot.png new file mode 100644 index 0000000..4d74759 Binary files /dev/null and b/GUI/xephem/help/png/plot.png differ diff --git a/GUI/xephem/help/png/print.png b/GUI/xephem/help/png/print.png new file mode 100644 index 0000000..2355e53 Binary files /dev/null and b/GUI/xephem/help/png/print.png differ diff --git a/GUI/xephem/help/png/saturn-more-info.png b/GUI/xephem/help/png/saturn-more-info.png new file mode 100644 index 0000000..3a607c2 Binary files /dev/null and b/GUI/xephem/help/png/saturn-more-info.png differ diff --git a/GUI/xephem/help/png/saturn.png b/GUI/xephem/help/png/saturn.png new file mode 100644 index 0000000..b039a27 Binary files /dev/null and b/GUI/xephem/help/png/saturn.png differ diff --git a/GUI/xephem/help/png/save-colors.png b/GUI/xephem/help/png/save-colors.png new file mode 100644 index 0000000..264e71a Binary files /dev/null and b/GUI/xephem/help/png/save-colors.png differ diff --git a/GUI/xephem/help/png/save-fonts.png b/GUI/xephem/help/png/save-fonts.png new file mode 100644 index 0000000..4b2578c Binary files /dev/null and b/GUI/xephem/help/png/save-fonts.png differ diff --git a/GUI/xephem/help/png/save-resources.png b/GUI/xephem/help/png/save-resources.png new file mode 100644 index 0000000..3aec956 Binary files /dev/null and b/GUI/xephem/help/png/save-resources.png differ diff --git a/GUI/xephem/help/png/seti@home.png b/GUI/xephem/help/png/seti@home.png new file mode 100644 index 0000000..ddf7217 Binary files /dev/null and b/GUI/xephem/help/png/seti@home.png differ diff --git a/GUI/xephem/help/png/sites.png b/GUI/xephem/help/png/sites.png new file mode 100644 index 0000000..e553ea4 Binary files /dev/null and b/GUI/xephem/help/png/sites.png differ diff --git a/GUI/xephem/help/png/sky-binary.png b/GUI/xephem/help/png/sky-binary.png new file mode 100644 index 0000000..58dbce8 Binary files /dev/null and b/GUI/xephem/help/png/sky-binary.png differ diff --git a/GUI/xephem/help/png/sky-control-eyepieces.png b/GUI/xephem/help/png/sky-control-eyepieces.png new file mode 100644 index 0000000..4e9f357 Binary files /dev/null and b/GUI/xephem/help/png/sky-control-eyepieces.png differ diff --git a/GUI/xephem/help/png/sky-control-filter.png b/GUI/xephem/help/png/sky-control-filter.png new file mode 100644 index 0000000..b3a06be Binary files /dev/null and b/GUI/xephem/help/png/sky-control-filter.png differ diff --git a/GUI/xephem/help/png/sky-control-horizon.png b/GUI/xephem/help/png/sky-control-horizon.png new file mode 100644 index 0000000..75c2b78 Binary files /dev/null and b/GUI/xephem/help/png/sky-control-horizon.png differ diff --git a/GUI/xephem/help/png/sky-control-list.png b/GUI/xephem/help/png/sky-control-list.png new file mode 100644 index 0000000..a92e559 Binary files /dev/null and b/GUI/xephem/help/png/sky-control-list.png differ diff --git a/GUI/xephem/help/png/sky-control-options.png b/GUI/xephem/help/png/sky-control-options.png new file mode 100644 index 0000000..d459d31 Binary files /dev/null and b/GUI/xephem/help/png/sky-control-options.png differ diff --git a/GUI/xephem/help/png/sky-history.png b/GUI/xephem/help/png/sky-history.png new file mode 100644 index 0000000..45bbf13 Binary files /dev/null and b/GUI/xephem/help/png/sky-history.png differ diff --git a/GUI/xephem/help/png/sky-images-fits.png b/GUI/xephem/help/png/sky-images-fits.png new file mode 100644 index 0000000..17953f9 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-fits.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-contrast-tb.png b/GUI/xephem/help/png/sky-images-ia-contrast-tb.png new file mode 100644 index 0000000..d3cb20a Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-contrast-tb.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-contrast.png b/GUI/xephem/help/png/sky-images-ia-contrast.png new file mode 100644 index 0000000..bd65d94 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-contrast.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-gauss-tb.png b/GUI/xephem/help/png/sky-images-ia-gauss-tb.png new file mode 100644 index 0000000..ad7c5e7 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-gauss-tb.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-gauss.png b/GUI/xephem/help/png/sky-images-ia-gauss.png new file mode 100644 index 0000000..2097c18 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-gauss.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-glass-tb.png b/GUI/xephem/help/png/sky-images-ia-glass-tb.png new file mode 100644 index 0000000..510350e Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-glass-tb.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-glass.png b/GUI/xephem/help/png/sky-images-ia-glass.png new file mode 100644 index 0000000..2e98a94 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-glass.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-roi-tb.png b/GUI/xephem/help/png/sky-images-ia-roi-tb.png new file mode 100644 index 0000000..0a43929 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-roi-tb.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-roi.png b/GUI/xephem/help/png/sky-images-ia-roi.png new file mode 100644 index 0000000..f6a224d Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-roi.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-slice-tb.png b/GUI/xephem/help/png/sky-images-ia-slice-tb.png new file mode 100644 index 0000000..75305e5 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-slice-tb.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-slice.png b/GUI/xephem/help/png/sky-images-ia-slice.png new file mode 100644 index 0000000..3b18f5c Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-slice.png differ diff --git a/GUI/xephem/help/png/sky-images-ia-snap-tb.png b/GUI/xephem/help/png/sky-images-ia-snap-tb.png new file mode 100644 index 0000000..cd6f922 Binary files /dev/null and b/GUI/xephem/help/png/sky-images-ia-snap-tb.png differ diff --git a/GUI/xephem/help/png/sky-popup-menu.png b/GUI/xephem/help/png/sky-popup-menu.png new file mode 100644 index 0000000..c81372d Binary files /dev/null and b/GUI/xephem/help/png/sky-popup-menu.png differ diff --git a/GUI/xephem/help/png/sky-upperleft-delta-roaming.png b/GUI/xephem/help/png/sky-upperleft-delta-roaming.png new file mode 100644 index 0000000..61f7b6a Binary files /dev/null and b/GUI/xephem/help/png/sky-upperleft-delta-roaming.png differ diff --git a/GUI/xephem/help/png/sky-upperleft-roaming.png b/GUI/xephem/help/png/sky-upperleft-roaming.png new file mode 100644 index 0000000..ea064d9 Binary files /dev/null and b/GUI/xephem/help/png/sky-upperleft-roaming.png differ diff --git a/GUI/xephem/help/png/sky-upperright-delta-roaming.png b/GUI/xephem/help/png/sky-upperright-delta-roaming.png new file mode 100644 index 0000000..80c7a04 Binary files /dev/null and b/GUI/xephem/help/png/sky-upperright-delta-roaming.png differ diff --git a/GUI/xephem/help/png/sky-upperright-roaming.png b/GUI/xephem/help/png/sky-upperright-roaming.png new file mode 100644 index 0000000..fbfa715 Binary files /dev/null and b/GUI/xephem/help/png/sky-upperright-roaming.png differ diff --git a/GUI/xephem/help/png/sky-view-how-tb.png b/GUI/xephem/help/png/sky-view-how-tb.png new file mode 100644 index 0000000..93d3b36 Binary files /dev/null and b/GUI/xephem/help/png/sky-view-how-tb.png differ diff --git a/GUI/xephem/help/png/sky-view-what-tb.png b/GUI/xephem/help/png/sky-view-what-tb.png new file mode 100644 index 0000000..81f9acd Binary files /dev/null and b/GUI/xephem/help/png/sky-view-what-tb.png differ diff --git a/GUI/xephem/help/png/sky-view-where-tb.png b/GUI/xephem/help/png/sky-view-where-tb.png new file mode 100644 index 0000000..a32dc0e Binary files /dev/null and b/GUI/xephem/help/png/sky-view-where-tb.png differ diff --git a/GUI/xephem/help/png/sky-view.png b/GUI/xephem/help/png/sky-view.png new file mode 100644 index 0000000..8682e09 Binary files /dev/null and b/GUI/xephem/help/png/sky-view.png differ diff --git a/GUI/xephem/help/png/solsys.png b/GUI/xephem/help/png/solsys.png new file mode 100644 index 0000000..82c069a Binary files /dev/null and b/GUI/xephem/help/png/solsys.png differ diff --git a/GUI/xephem/help/png/solver.png b/GUI/xephem/help/png/solver.png new file mode 100644 index 0000000..00ba91c Binary files /dev/null and b/GUI/xephem/help/png/solver.png differ diff --git a/GUI/xephem/help/png/stepsize.png b/GUI/xephem/help/png/stepsize.png new file mode 100644 index 0000000..11a035d Binary files /dev/null and b/GUI/xephem/help/png/stepsize.png differ diff --git a/GUI/xephem/help/png/sun-view.png b/GUI/xephem/help/png/sun-view.png new file mode 100644 index 0000000..9611d28 Binary files /dev/null and b/GUI/xephem/help/png/sun-view.png differ diff --git a/GUI/xephem/help/png/syslog.png b/GUI/xephem/help/png/syslog.png new file mode 100644 index 0000000..696709f Binary files /dev/null and b/GUI/xephem/help/png/syslog.png differ diff --git a/GUI/xephem/help/png/trails.png b/GUI/xephem/help/png/trails.png new file mode 100644 index 0000000..b93418f Binary files /dev/null and b/GUI/xephem/help/png/trails.png differ diff --git a/GUI/xephem/help/png/uranus-more-info.png b/GUI/xephem/help/png/uranus-more-info.png new file mode 100644 index 0000000..857a00c Binary files /dev/null and b/GUI/xephem/help/png/uranus-more-info.png differ diff --git a/GUI/xephem/help/png/uranus.png b/GUI/xephem/help/png/uranus.png new file mode 100644 index 0000000..da3fa25 Binary files /dev/null and b/GUI/xephem/help/png/uranus.png differ diff --git a/GUI/xephem/help/png/valid-html401.png b/GUI/xephem/help/png/valid-html401.png new file mode 100644 index 0000000..3855210 Binary files /dev/null and b/GUI/xephem/help/png/valid-html401.png differ diff --git a/GUI/xephem/help/png/wcssolver.png b/GUI/xephem/help/png/wcssolver.png new file mode 100644 index 0000000..1b7cd89 Binary files /dev/null and b/GUI/xephem/help/png/wcssolver.png differ diff --git a/GUI/xephem/help/xephem.html b/GUI/xephem/help/xephem.html new file mode 100644 index 0000000..f793012 --- /dev/null +++ b/GUI/xephem/help/xephem.html @@ -0,0 +1,9413 @@ + + + + + + XEphem + + + +

+
+
+XEphem

+
+ pronounced eks i +fem´
+
+
+Version 3.7.7
+
Reference +Manual
+
+
+© 1990-2015 Elwood Charles Downey
+
 
+
+ +

+
    +
  1. Introduction +
      +
    1. Quantitative +information
    2. +
    3. Local circumstances
    4. +
    5. Launching XEphem +
        +
      1. Shared and Private Directories
      2. +
      3. Main window control
      4. +
      +
    6. +
    7. Time +and angle formats
    8. +
    +
  2. +
  3. Main +Window +
      +
    1. Main's Help menu +
    2. +
    3. Menu bar +
        +
      1. File
      2. +
      3. View
      4. +
      5. Tools
      6. +
      7. Data
      8. +
      9. Preferences
      10. +
      +
    4. +
    5. Sections +
        +
      1. Local +
          +
        1. Site Selection
        2. +
        +
      2. +
      3. Time
      4. +
      5. Calendar
      6. +
      7. Night
      8. +
      9. Looping
      10. +
      +
    6. +
    +
  4. +
  5. File menu +
      +
    1. System log
    2. +
    3. Gallery +
        +
      1. File format
      2. +
      +
    4. +
    5. Network +Setup
    6. +
    7. External Input
    8. +
    +
  6. +
  7. View menu +
      +
    1. Data Table +
        +
      1. Data setup
      2. +
      +
    2. +
    3. Sun +
        +
      1. Sun mouse
      2. +
      3. Sun Control menu +
      4. +
      5. Sun Files menu +
      6. +
      7. Sun Type menu +
      8. +
      9. Sun Size menu
      10. +
      +
    4. +
    5. Moon +
        +
      1. Moon mouse
      2. +
      3. Moon Control menu
      4. +
      5. Moon View menu +
          +
        1. More info...
        2. +
        +
      6. +
      7. Scale menu
      8. +
      9. Lunar +Orbiter IV
      10. +
      +
    6. +
    7. Earth +
        +
      1. Earth mouse
      2. +
      3. Earth Control menu
      4. +
      5. Earth View menu +
          +
        1. Objects dialog
        2. +
        +
      6. +
      +
    8. +
    9. Mars +
        +
      1. Mars mouse
      2. +
      3. Mars Control menu
      4. +
      5. Mars View menu +
          +
        1. Features...
        2. +
        3. More info...
        4. +
        5. Moon view...
        6. +
        +
      6. +
      +
    10. +
    11. Jupiter +
        +
      1. Jupiter mouse
      2. +
      3. Jupiter Control menu
      4. +
      5. Jupiter View menu +
          +
        1. More info...
        2. +
        +
      6. +
      +
    12. +
    13. Saturn +
        +
      1. Saturn mouse
      2. +
      3. Saturn Control menu
      4. +
      5. Saturn View menu +
          +
        1. More info...
        2. +
        +
      6. +
      +
    14. +
    15. Uranus +
        +
      1. Uranus mouse
      2. +
      3. Uranus Control menu
      4. +
      5. Uranus View menu +
          +
        1. More info...
        2. +
        +
      6. +
      +
    16. +
    17. Solar System +
        +
      1. Solar System Scales
      2. +
      3. Solar System mouse
      4. +
      5. Solar System Control +menu
      6. +
      7. Solar System View +menu
      8. +
      +
    18. +
    +
  8. +
  9. Sky View +
      +
    1. Sky View mouse
    2. +
    3. Toolbars
    4. +
    5. Scale controls
    6. +
    7. Trails
    8. +
    9. Sky View Control +menu +
        +
      1. Options +
          +
        1. Display mode:
        2. +
        3. Grid Control:
        4. +
        5. View Options:
        6. +
        7. Constellation: +
        8. +
        9. Labeling:
        10. +
        +
      2. +
      3. Filter
      4. +
      5. Print
      6. +
      7. List
      8. +
      9. Horizon
      10. +
      11. Field Stars
      12. +
      13. Favorites
      14. +
      15. Eyepieces
      16. +
      17. Coordinates
      18. +
      19. User +annotation
      20. +
      +
    10. +
    11. Sky View Images menu +
        +
      1. Load and Save FITS +images +
      2. +
      3. Image Analysis Tools +
          +
        1. Brightness and +Contrast
        2. +
        3. Cross section Slice
        4. +
        5. Magnifying Glass
        6. +
        7. Region of Interest
        8. +
        9. 2D Gaussian +Measurements
        10. +
        +
      4. +
      5. Registration +
      6. +
      7. WCS Solver
      8. +
      +
    12. +
    13. Sky View Favorites +menu
    14. +
    15. Sky View Telescope +menu +
        +
      1. INDI Test Drivers
      2. +
      3. INDI Configuration +window
      4. +
      5. INDI Control Panel
      6. +
      7. FIFO Control
      8. +
      +
    16. +
    17. Sky View History menu
    18. +
    19. Sky View Binary Star Map
    20. +
    +
  10. +
  11. Tools menu +
      +
    1. Plot values
    2. +
    3. List values
    4. +
    5. Solve equation
    6. +
    7. Find close pairs +
        +
      1. Close Pairs Control +menu
      2. +
      3. Close Pairs Options +menu
      4. +
      5. Close Pairs Algorithm
      6. +
      +
    8. +
    9. Night at a Glance
    10. +
    11. Coordinate converter
    12. +
    13. Observers +logbook
    14. +
    15. Movie +loop
    16. +
    +
  12. +
  13. Data menu +
      +
    1. Files +
        +
      1. Files Control menu
      2. +
      3. File format +
          +
        1. General format +rules +
        2. +
        3. Format Details
        4. +
        5. Magnitude models
        6. +
        +
      4. +
      5. Notes
      6. +
      7. Two-line Earth +satellite element sets
      8. +
      +
    2. +
    3. Index
    4. +
    5. Favorites
    6. +
    7. Download +
    8. +
    9. Field Stars +
        +
      1. Hubble GSC
      2. +
      3. USNO A or SA catalogs
      4. +
      5. Proper Motion catalogs
      6. +
      7. Skip likely duplicates
      8. +
      9. Notes
      10. +
      +
    10. +
    +
  14. +
  15. Preferences + +
      +
    1. Fonts +
        +
      1. XLFD
      2. +
      +
    2. +
    3. Colors +
        +
      1. Colors Control menu
      2. +
      3. Star colors
      4. +
      +
    4. +
    5. Save
    6. +
    +
  16. +
  17. Multifunction Tools +
      +
    1. Trails
    2. +
    3. Printing
    4. +
    5. Annotation
    6. +
    +
  18. +
  19. Credits
  20. +
  21. Notes +
      +
    1. Horizon
    2. +
    3. glob Patterns
    4. +
    5. Accuracy
    6. +
    7. TODO
    8. +
    9. Known Bugs
    10. +
    11. History
    12. +
    +
  22. +
+
+
+

1 Introduction

+

XEphem is a scientific-grade interactive astronomical ephemeris +package. XEphem:

+
    +
  • computes heliocentric, +geocentric and topocentric information for all objects;
  • +
  • has built-in support for all planets; +the moons of Mars, Jupiter, Saturn, Uranus and Earth; central +meridian longitude of Mars and Jupiter; Saturn's rings; and Jupiter's Great Red Spot;
  • +
  • allows user-defined objects +including stars, deepsky objects, asteroids, comets and Earth +satellites.
  • +
  • provides special efficient handling of large catalogs including Tycho, +Hipparcos, GSC.
    +
  • +
  • displays data in configurable +tabular formats in conjunction with several interactive +graphical views;
  • +
  • displays a night-at-a-glance +24 hour graphic showing when any selected objects are up;
  • +
  • displays 3-D stereo Solar +System views that are particularly well suited for visualizing +comet trajectories;
  • +
  • quickly finds all close pairs +of objects in the sky;
  • +
  • sorts and prints all catalogs with very flexible criteria for +creating custom observing lists;
  • +
  • creates plots of any pairs +of all data fields throughout the program;
  • +
  • downloads current asteroid and +comets ephemerides from Lowell Observatory and Minor Planet +Center;
  • +
  • downloads timely Earth satellite +orbital TLE parameters;
  • +
  • plots true binary system orbits;
    +
  • +
  • downloads Digitized Sky Survey +FITS files from STScI or ESO;
  • +
  • provides a handy coordinates + spreadsheet for converting +among +equatorial, ecliptic, horizon and galactic frames ;
  • +
  • displays live SOHO images of the Sun;
    +
  • +
  • includes a compiler for entering and solving user-written functions using +any data fields;
  • +
  • serves as the control point for GOTO +telescopes such as Meade LX200 or other external applications;
  • +
  • displays FITS files images +overlaid with database symbols and other graphical information;
  • +
  • performs automatic star pattern matching to automatically solve for World Coordinate +System on any image;
  • +
  • performs 1-click 2D Gaussian relative and absolute photometry;
  • +
  • defines and saves any number of Eyepieces +to use in sky maps;
  • +
  • captures, displays and clips to any number of local horizon profiles;
  • +
  • stores sets of all Sky View options in history sets for easy playback later;
  • +
  • prints using high quality Postscript;
  • +
  • allows you to assign any number of objects as Favorites for special fast access +throughout the program, and makes them available even when their +original databases are no longer loaded;
  • +
  • provides an extensible image +gallery initialized with over 300 beautiful and informative +color images of deep sky objects;
  • +
  • provides an observing logbook +which is automatically filled in with observing circumstances, with +searching on most fields;
  • +
  • displays magnetic deviation +for any location.
  • +
  • create movie loops of any View, NAAG or Plot window.
    +
  • +
+XEphem can compute information on demand or time can be set to +increment automatically. In this way a series of computations and +movies can be generated.
+

1.1 Quantitative +information

+

Quantitative information available about each object includes:

+
    +
  • RA and Dec,
  • +
  • local azimuth and altitude,
  • +
  • distance from sun and earth,
  • +
  • light travel times,
  • +
  • heliocentric coordinates,
  • +
  • galactic coordinates,
  • +
  • ecliptic coordinates,
  • +
  • solar elongation,
  • +
  • angular size,
  • +
  • visual magnitude,
  • +
  • illumination percentage,
  • +
  • local rise and set times and azimuths,
  • +
  • local transit times and altitude,
  • +
  • length of time up,
  • +
  • constellation,
  • +
  • angular separations between all Favorites.
    +
  • +
+

1.2 Local circumstances

+

Local observing circumstance information includes

+
    +
  • UTC and local date and time,
  • +
  • local sidereal time,
  • +
  • times astronomical, nautical and civil twilight and length of +night,
  • +
  • local temperature and pressure (for refraction),
  • +
  • elevation above sea level (for parallax),
  • +
  • a monthly calendar.
  • +
+Equatorial coordinates may be computed in any four combinations of +topocentric or geocentric, and apparent or astrometric. When the +Equinox is set to a fixed date the values are astrometric, that is, +corrected only for precession and light travel time. When the Equinox +is set for EOD (Equinox of Date) the values are apparent and are also +corrected for nutation, aberration and relativistic deflection. +Topocentric values are further corrected for parallax, augmentation +and refraction.
+

1.3 Launching XEphem

+In addition to all the standard X Window System command line arguments, +XEphem also supports the following command line arguments:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argument
+
Meaning
+
-env name=value
+
set internal value for +environment variable; any number allowed
+
-help
+
print this then exit
+
-install {yes no guess}
+
whether to install a private +colormap, default is guess
+
-log
+
save exit trouble to private log
+
-nosplash
+
disable splash screen from now on
+
-nowin
+
do not restore windows
+
-prfb
+
print all internal default +resources then exit
+
-resfile f
+
load alternate X resource file
+
-splash
+
show splash screen from now on
+
+
+
+

1.3.1 Shared and Private Directories

+When XEphem is launched it looks for a file named .xephemrc in the user's $HOME directory. This file is +optional. If it exists, it should contain a line with the following +form:
+
+
XEphem.PrivateDir: +~/.xephem
+
+The directory named on the right is where XEphem will create and look +for Private files, so-called +because on a multiuser system they are expected to be separated on a +per-user basis. A leading "~" in the file name can be used to refer to $HOME, your login directory. +A leading "." in the file name can be used to refer to the current +working directory of the running program. The example above causes the +Private directory to be .xephem +in the users $HOME +directory. If .xephemrc +does not exist or does not contain this line the default Private +directory is ~/.xephem. +The private directory will be created if it does not already exist.
+
+XEphem then also searches for another directory for Shared +files. This directory contains files presumed to be shared +among all XEphem users on a system. Files in this directory are never +modified by XEphem. They include databases of objects, supporting +images and other files. This directory is specified in a resource file +named XEphem which may be +located in any of the standard X Window  System directories, in +/etc or within the Private directory (see above). It should contain a +line with the following form:
+
+
XEphem.ShareDir: +/usr/local/xephem
+
+Next, XEphem sets the initial values of most options and settings from +other entries in the resource file. Settings which do not appear will +use their internal default values. Internal defaults may be printed +using the -prfb command line option.
+

1.3.2 Main window control

+XEphem starts by showing the Main window with each parameter set to +its default value. The parameters on the Main window are primarily +devoted to describing the location and time for which all other data +in XEphem are computed.
+
+Most fields on the Main window may be changed by clicking them. A +prompt window with a brief explanation of the field will appear. A new +value may be typed into the text field provided. If Ok is clicked the new value will be +used; if Cancel is clicked the +field will be left unchanged. In either case, the prompt window goes +away. Some of the windows have an extra button which offers a handy +way to enter frequently used values for the field.
+
+If you change a field on the Main window that would invalidate any of +the other fields in any XEphem window the message NEW CIRCUMSTANCES +flashes near the top of the Main window. This will continue until the +next Update occurs. If you change any field that causes new +circumstances, the Step value is not added to the current time before +the next loop.
+
+You can change time manually like any other fields or you can set up +looping to advance time automatically with specified pauses between +each step. The prominent button at the bottom of the Main window +labeled Update causes all +other +windows throughout XEphem will be recomputed with the new time. +Looping effectively presses this button for you. See Looping.
+
+Some graphical views have a push button marked Movie Demo. This is a convenient way +to start and stop a sample movie sequence. If XEphem is currently idle +then pushing the button will set the Main window Step size to a value +that will yield a pleasing motion effect and start looping with a very +large number of steps. If XEphem is already looping then pushing the +button will cause it to stop and set Main window N Steps to 1. The +Main window Stop control can also stop the looping in the usual way. +

1.4 Time +and angle formats

+Time and RA are displayed as h:m:s. They may be entered the same way +or the color (:) may be entered as slash (/) semicolor (;) comma (,) +or space. Other angular quantities, such as declination, azimuth, +altitude, longitude and latitude, are entered and displayed as d:m:s +but +otherwise use the same rules.
+
+Components of a sexagesimal field may be entered as floating point +numbers. For example 10:20:30 may also be entered as either 10:20.5 or +10.34167.
+
+Negative values are indicated by one hyphen (-) before the first +character.
+
+Dates are entered and displayed in any one of the forms month/day/year, +year/month/day or day/month/year, depending on the Preferences selection on the Main +menubar. The slash (/) may also be entered as hyphen (-) semicolon (;) +or comma (,). Note you must always enter the full year.
+
+When the day portion of a date is an integer, the time does not change. +When the day portion of a date is entered as a floating point number, +the time will also change to correspond to the fractional portion of +the day. For example, using the preference m/d/y, entering a date of +1/1.5/1995 will set the date to 1/1/1995 and the time to 12:00:00. To +get this effect with a whole day, include the decimal point. For +example, 1/1.0/2002 will set the date to 1/1/2002 and the time to +0:00:00.
+
+You may also enter a date as a decimal year, as in 1990.12345.
+
+Negative years indicate BC dates. For example, Jan 1, 1 BC is given +as 1/1/-1. Before you ask, yes, "1-1--1" works for 1 BC. There is no +year 0. +

2.0 Main +Window

+XEphem's +main window is divided into five regions plus the menu bar across the +top for selecting the principle functions of XEphem. Each window +opened from the menu bar has its own Help.
+
+Beneath the XEphem logo image is a status line that contains a short +description of what XEphem is doing at the moment with regards to its +looping behavior.
+
+Below the status line is room for the NEW CIRCUMSTANCES message. When +you change any field on the Main window that could invalidate any of +the other fields or views throughout XEphem this message flashes until +at least one screen Update occurs to get everything up to date again.
+
+

2.1 Main's Help menu
+

+XEphem help is written in html version 4.01 transitional and requires a +browser +to read. The text is all in one file, xephem.html, located in +auxil/help within the Shared directory path. Anchors throughout the +file +allow XEphem to specify exactly where to jump for each Help entry.
+
+Help » Configure
+
+
+
This Help entry is used to set how +XEphem sends a URL to your +browser. It must be correct before any other Help can be used. It +displays a table showing sample +shell commands that accomplish this for several popular browsers +including mozilla, netscape, opera, konqueror and safari. Each time %s +appears in the definition the full path to the xephem.html will be +substituted. If you figure +out how to configure for another browser or you know of a better +definition please send us your results and we will post on our web site.
+
+Note the entry for using IE under cygwin. In order for this to work, +you must create an +environment variable before running XEphem named XEHELPURL set to the +full Windows path of the xephem.html file using Windows filespec +notation. The value of this variable is substituted for each %s +appearing in the definition for IE.
+
+
+Help » on Context
+
+
This Help entry turns the cursor into a +Question Mark. Roaming the cursor over any +control in XEphem will show its bubble help tip whether or not the tips +Preference is active. Press the +left +mouse button to end this behavior and resume normal operation.
+
+
+All remaining Help entries just bring up additional information as one +would expect. If you are new to XEphem, we suggest you begin by reading +the next three entries in order, Introduction, Operation and Triad +formats, then feel free to explore.
+
+

2.2 Menu bar

+

2.2.1 File

+
    +
  • System log... displays a +scrolled list of informational messages and alert. XEphem may beep +whenever a new message is added, depending on the Log Bell preference. See System +log.
  • +
+
    +
  • Gallery... displays a +list of installed color images and allows browsing or marking in Sky +View. See Gallery.
    +
  • +
+
    +
  • Network setup... displays a window offering choices for +how XEphem accesses the +Internet. See Internet.
    +
  • +
+
    +
  • External file... drives XEphem from a file containing +times and latitude/longitude locations. +See External input.
    +
  • +
+
    +
  • Progress Meter... displays a simple bar graph of XEphem +progress. The accuracy and usefulness +of the display are somewhat problematic at this time.
    +
  • +
+
    +
  • Forward 1 Step causes Time to be changed by one Step +value. This action can also be performed when the cursor is over any +XEphem window by typing Control-f. Invoking this command also stops +looping if it is running.
  • +
+
    +
  • Backward 1 Step causes Time to be changed by the negative +of one Step value. This action can also be performed when the cursor +is over any XEphem window by typing Control-b. Invoking this command +also stops looping if it is running.
  • +
+
    +
  • Update performs the same action as the Update +button across the bottom of the Main window. This can also be performed +by typing Control-u in any XEphem window. See Looping.
    +
  • +
+
    +
  • Quit... exits XEphem. If any resources have been modified +and Preferences » +Confirmations is On, a reminder will first appear and allow +you to bring up the Save window if desired. This can also be +performed by typing Control-d in any XEphem window.
  • +
+

2.2.2 View

+  The View menu gives access to all of the several XEphem +specialized displays.
+
    +
  • Data Table... highly +configurable, show any from a selection of over 30 parameters for +each Favorite object. See Favorites and Data table.
  • +
+
    +
  • Sun... show SOHO images +of +the Sun, measure current RA and Dec of solar features. See  Sun.
    +
  • +
+
    +
  • Moon... show real lunar +image, mark hundreds of natural and artificial features, compute sun +and +observing circumstances. See Moon.
    +
  • +
+
    +
  • Earth... show spherical +or +cylindrical projection, satellite ground tracks. See Earth.
    +
  • +
+
    +
  • Jupiter... show planet +image with moons and shadows. See Jupiter.
    +
  • +
+
    +
  • Saturn... show planet +image with moons and shadows. See Saturn.
    +
  • +
+
    +
  • Uranus... show planet +symbol with moons. See Uranus.
    +
  • +
+
    +
  • Sky View... the showpiece +of XEphem, display maps, images, trails. See Sky +View.
    +
  • +
+
    +
  • Solar System... 3D and +perspective diagrams include asteroids, comet trajectories. See Solar System.
    +
  • +
+

2.2.3 Tools

+  The Tools menu gives access to windows allowing full control +of the following functions:
+
    +
  • Plot values... plot pairs +of any data values shown throughout XEphem. See Plotting.
    +
  • +
+
    +
  • List values... print +columnar lists of any data values shown throughout XEphem. See Listing
    +
  • +
+
    +
  • Solve equation... define +and solve any mathematical function using any data values shown +throughout  XEphem. See Solver.
    +
  • +
+
    +
  • Find close pairs... search all loaded database objects and +sort all pairs by increasing separation. See Close +pairs.
    +
  • +
+
    +
  • Night at a glance... display when all Favorite objects are +up over a 24 hour period. See Night at a +Glance.
    +
  • +
+
    +
  • Coordinates converter... +enter one of equatorial, horizon, ecliptic or galactic coordinates +and show the others. See Coordinate converter.
    +
  • +
+
    +
  • Observers log book... +click on a target in Sky View to fill in standard observing fields, +add your own notes and save, later browse or search for entries. See Observers logbook.
    +
  • +
+

2.2.4 Data

+  The Data menu gives access to windows which pertain to +managing the objects in memory.
+
    +
  • Files... adds and deletes +catalogs of objects to and from memory. The window also displays +overall +statistics of the number of each type of object in memory. See Data Files.
    +
  • +
+
    +
  • Index... searches and +displays all information about any given object in memory. Also can +be used to center the Sky View over any object. See Data +Index.
    +
  • +
+
    +
  • Favorites... adds, +enables, sorts and deletes the set of objects you wish to have easy +access to. See Favorites.
    +
  • +
+
    +
  • Internet... provides a +convenient means to update XEphem databases from the Net. The window +comes preconfigured to get timely asteroid, comet and Earth +satellite catalogs. See Internet.
    +
  • +
+
    +
  • Field stars... sets up +how and whether to read several very large databases of faint stars +which XEphem refers to as "field stars See Field +stars.
    +
  • +
+

2.2.5 Preferences

+The Preferences pulldown lists the available preferences that may be +changed at run time. Whenever any are changed, all effected fields are +immediately recalculated and redisplayed throughout XEphem. The simple +preferences include:
+
    +
  • Equatorial: Topocentric, +Geocentric. controls whether the RA and Dec values displayed +throughout XEphem are for the current local surface location +(topocentric) or from the center of the Earth. (Alt/Az values are, +of course, always topocentric.)
  • +
+
    +
  • Precision: Hi, Low +controls how much precision is shown for most angles. This is a change +in display format only and does not imply a change in accuracy.
  • +
+
    +
  • Log Bell: On, Off whether +to ring the bell each time a new message is added to the System log +window. The System log window is accessible via the File menu in the +Main menu bar. See System log.
    +
  • +
+
    +
  • Prompt Prefill: Yes, No +whether prompt strings from the Main window and Search windows are +filled with the current value or blanked out. This is also handy to +allow copy/paste of these values.
  • +
+
    +
  • Units: English, Metric +whether local topocentric circumstances are given in English or +Metric units of measure.
  • +
+
    +
  • Time zone: UTC, Local +whether the time stamp below each major view, the rise/transit/set +times in the Data Table window and the dawn/dusk times and the +calendar in the Main window refer to UTC or local time.
  • +
+
    +
  • Show help tips: Yes, No +whether additional help is available immediately for all selectable +buttons and controls using small brief windows near the control.
  • +
+
    +
  • Confirmations: Yes, No +whether operations which basically can not be undone or which might +have irreversible consequences will be preceded with a confirmation +window. Examples include exiting XEphem or overwriting an existing +file.
  • +
+
    +
  • Start week on: Saturday, Sunday, +Monday sets the day on which weeks begin in the Main calendar.
  • +
+
    +
  • Date formats: M/D/Y, Y/M/D, +D/M/Y whether dates are shown and entered in month/day/year, +year/month/day or day/month/year format.
  • +
+
    +
  • Fonts... displays a +window +to experiment with fonts while you watch. See fonts.
  • +
+
    +
  • Colors... displays a +window to experiment with colors while you watch. See colors.
  • +
+
    +
  • Save... displays a window +which shows how the current functional settings differ from their +defaults and allows them to be saved. See save.
  • +
+

2.3 Sections

+The Main window is divided into five basic sections.
+

2.3.1 Local

+ +
    +
  • [Site name] Above the +Latitude field is a button which can display the current site name. +Pressing this button will bring up a list of cities and +observatories. See Sites.
    +
  • +
+
    +
  • Latitude Local geographic +latitude, positive degrees north of equator. Changing this will +disable automatic computation of Daylight Savings Time.
  • +
+
    +
  • Longitude Local +longitude, +positive degrees west of Greenwich meridian. Changing this will +disable automatic computation of Daylight Savings Time. A sensible +Timezone is created based on one hour for each 15 degrees from 0.
  • +
+
    +
  • Elevation Local elevation +of the ground above sea level, in feet or meters. (see +implementation notes). Used in topocentric parallax correction.
  • +
+
    +
  • Temp Local surface air +temperature, in °F or C. Used in refraction correction.
  • +
+
    +
  • Atm Pres Local surface +air pressure, in inches of mercury or hPa. Used in refraction +correction.
  • +
+
    +
  • Equinox When set to a +year, this is the desired epoch to which the RA/Dec fields are +precessed, referred to as the astrometric place. When this is set to +EOD, all RA/Dec values are precessed to the current XEphem time, and +corrected for nutation, aberration and deflection, referred to as +the apparent place.
  • +
+
    +
  • Mag decl This is the +amount by which the horizontal component of the Earth's magnetic +field varies from true north. Put another way,true az = magnetic +bearing - mag decl. The model is stored in the file wmm.cof in the +auxil directory of the shared directory. It is valid for 2000 +through the end of 2004. Check http://www.ngdc.noaa.gov/seg/potfld/DoDWMM.shtml +for updates.
    +
  • +
+

2.3.1.1 Site Selection

+ This +window allows you to search, load and add to a collection of predefined +sites.
+
+The scrolled list at the top lists the complete set of currently +defined sites. Clicking on one will copy it to the Set text field. Double clicking on +one will also install it to the Main window, as will clicking on Set +or typing Enter over the select text field.
+
+To search for a particular site, either scroll through the list or +type a  glob pattern in the Search text field. Clicking on +Search or typing Enter in the search text field will scroll the list to +the +next site that matches the search text.
+
+Creating new sites.
+
+Clicking Create expands the +dialog to add fields for creating new sites. Fill in the fields then +click Set main to test the +entry and Save to add it to +the +collection on disk.
+
+File format:
+
+XEphem stores sites in the file named xephem_sites. One may +reside in +either or both the Shared and Private +directories. The Sites window always checks both.
+
+Each line in the file consists of 5 fields, each separated by a +semicolon (;):
+
+
+
Name ; Latitude ; Longitude ; +Elevation ; Timezone
+
+
+where:
+
+
Name +is the City, State, Country or other designation, up to 40 +characters.
+
+
Latitude +is DD MM SS, followed by an N or S to indicate north or south of the +equator. Each portion is separated by a blank.
+
+
Longitude +is in DDD MM SS, followed by an E or W to indicate east or west of +the prime meridian in Greenwich, England. Each portion is separated +by a blank.
+
+
Elevation +is in meters. If you do not know your elevation, put "-1.0".
+
+
Timezone +indicates the offset from GMT and details of savings time formatted +as follows:
+
+
std +offset dst [offset],start[/time],end[/time]
+
+
There are no spaces in the +specification. All fields except the initial +std +string are optional. It specifies the name of the standard time zone +and must +be three or more alphabetic characters. +
+
+
The +offset +string indicates the value added to the local time to arrive at +Coordinated +Universal Time. The offset has the format +hh[:mm[:ss]]. +The minutes (mm) and seconds (ss) are optional. If preceded by a minus +(-) the timezone shall be east of the Prime Meridian; +otherwise, it shall be west (which may be indicated by an optional +preceding +plus (+)). +
+
+
The dst string and second offset specify the name and +difference between the daylight savings time zone and the standard +time zone. If the offset is omitted, it defaults to one hour ahead +of standard time.
+
+
The start field specifies when +daylight savings time goes into effect and the end field specifies when the +change is made back to standard  time. These fields have the +format Mm.w.d which +specifies day d (0 <= d <= 6) of week w (1 <= w <= 5) in +month m (1 <= m <= 12). Day 0 is Sunday. Week 1 is  the +first  week in which day d occurs and week 5 is the last week in +which day d occurs. If omitted, Savings time will begin the first +Sunday in April and end the last Sunday of October.
+
+
The time fields specify when, in +the local time currently in effect, the change to the other time +occurs. If omitted, the default is 2:00:00.
+
+Here are a few examples:
+
+Munich, Germany    +; 48 14 0 N ;  11 57  0 E ;  523 ; +MET-1METDST,M3.5.0,M10.5.0
+New York, New York ; 40 45 6 N +;  73 59 39 W ; 16.8 ; EST5EDT
+Sydney, Australia  ; 33 52 +0 S ; 151 12  0 E ;  7.6 ; EST-10EST,M10.5.0,M3.5.0
+
+Lines in the file which do not conform to this structure are ignored.
+

2.3.2 Time

+ +
    +
  • Julian Number of days +since noon 4713 BC to about 1-second accuracy. Used as a uniform +time scale.
  • +
+
    +
  • UTC Date The UTC date. +UTC is Universal Coordinated Time, the basis,after adjusting for +time zones, for the official "civil" time people set their clocks +to. Every year or so it is adjusted via a leap second so it stays +within 0.9 seconds of UT1, which varies continuously with the slight +irregularities of the rotational motion of the Earth.
  • +
+
    +
  • UTC Time The UTC time.
  • +
+
    +
  • Sidereal The apparent +sidereal time for the current time and location. Equals the apparent +RA at the local meridian.
  • +
+
    +
  • TZ Name The local time +zone name. The name may be fixed to any short mnemonic. Setting this +manually turns off automatic computation of Daylight Savings Time. +When auto DST is on, a small clock is shown at the top right of the +Time section.
  • +
+
    +
  • TZ Offset Hours local +time is behind UTC, i.e., positive west or negative east of +Greenwich. Setting this manually turns off automatic computation of +Daylight Savings Time.
  • +
+
    +
  • Local Date The local +date. This is UTC date minus the value of TZ Offset.
  • +
+
    +
  • Local Time The local +time. This is UTC time minus the value of TZ Offset.
  • +
+
    +
  • Delta T TT-UT1. Number +of seconds by which Terrestrial Time (aka Ephemeris Time prior to +1982) leads UT1. TT is generally of interest when calculating the +positions of solar system objects because it is a continuous time +scale unaffected by the Earth's rotational vagaries. The term +Terrestrial means it is adjusted for the relativistic effects of +gravity and the Earth's revolution around the Sun. UT1 or UTC is of +interest when relating those positions to the horizon to produce +altitudes and azimuths. The value may be computed automatically +based on the current time or entered manually (in which case it will +not change). The algorithm uses values tabulated in the Astronomical +Almanac for years 1620.0 through 1998.0, and is accurate to within a +few seconds over that interval. Dates prior are from Stephenson and +Morrison or K. M. Borkowski, with an estimated error of 15 minutes at +1500 B.C. A linear extrapolation formula predicts future values.
    +
  • +
+

2.3.3 Calendar

+The +calendar on the right of the Main window is based on local time or +UTC, depending upon the Time Zone preference. Clicking a date button +will set the date. Clicking dates before the first of the month and +after the last of the month will also change month or year as +necessary. The month and year buttons pop up menus that allow these to +be changed as well. At the bottom the Now +button sets the time and date to the computer clock. The arrow buttons +move backwards or forwards by one day or week. Except for Now, using +the +calendar does not change the current time, just the date.
+

New and Full Moons are marked on the day on which they occur in +the selected time zone.

+
+

2.3.4 Night

+ +
    +
  • Sun icon When the sun +is above the local horizon a small sun symbol is drawn in the upper +left corner of this section.
  • +
+
    +
  • Moon icon When the moon +is +above the local horizon a small symbol is drawn in the upper right +corner of this section depicting the approximate phase of the moon. +The brighter of the foreground and background colors is used to draw +the portion in sun light.
  • +
+
    +
  • Sun Dip The number of +degrees the Sun is below the horizon that we wish to call twilight. +Common definitions include:
    +
    +
      +
    • Civil = Sun 6 degrees down (can just tell whether headlights +are on),
    • +
    • Nautical = Sun is 12 degrees down (sky and ocean merge),
    • +
    • Astronomical = Sun is 18 degrees down (dark as it gets).
    • +
    +
  • +
+
The Sun Dip setting applies to the +following fields:
+
    +
  • Dawn Local or UTC time +when the Sun center is Sun dip degrees below the horizon before sunrise +today.
  • +
  • Dusk Local or UTC time +when the Sun center is Sun dip degrees below the horizon after sunset +today.
  • +
  • Length Length of +astronomical night, i.e., Dawn - Dusk. If this and the display for +Dawn and Dusk are shown as "-----", it means the Sun is either +always below or always above Sun dip degrees below the horizon on +this particular day.
  • +
+
+N.B. These three fields always apply to the local current day. +Difficulties arise when these events occur within 4 minutes of local +midnight with respect to the time zone defined by TZ Offset. In +particular, if these fields are not behaving as you would expect, +check that the TZ Offset is set commensurate with the current +Longitude.
+
    +
  • LST@0 Local Sidereal +Time at next local Midnight, as per the time zone.
    +
  • +
+

2.3.5 Looping

+ +
    +
  • -1 +1 These are shortcuts to go +backwards or forwards by one Step. Can also be performed by typing +Control-b and Control-f from any window.
    +
  • +
+
    +
  • RT  Clicking this +button will synchronize XEphem to the computer clock and commence +Updating every Pause seconds. If Pause is 0 when this is started, it +will be set to 10 seconds. This can be the initial mode for XEphem by +saving the AutoRT Preference. +RT is really just a shortcut for:
    +
    +
      +
    1. clicking Now under the calendar
    2. +
    3. setting Step to Clock
    4. +
    5. setting N Steps to something large and then
    6. +
    7. clicking Update.
    8. +
    +
  • +
+
    +
  • Step The interval by +which, or event to which, time is changed each loop. Fixed intervals +are +specified in hours, minutes, seconds, days and years or time may be set +to advance to an event such as the next sun rise, dawn or full moon.
    +
  • +
+
    +
  • N Steps The number of +times the display will be updated (time advanced by Step each step) +automatically. When Update is clicked, this number counts down until it +reaches zero then is reset to one.
    +
  • +
+
    +
  • Pause Number of seconds +to +pause between screen Updates. This is used mainly to set up for +free-running unattended operation. Pausing is not done when plotting,listing or solving are active. When looping, time is +maintained at a whole multiple of pause length.
  • +
+When looping is in effect, the label on the bottom button changes to Stop. When the number of steps +goes to 0 or the Stop button is clicked the looping stops and the +button label changes back to Update.
+
+Note that when looping with Pause set to 0, most graphics and numeric +field data are not drawn in order to speed up the computations. These +values are always updated internally, however. and may safely be used +for plotting,listing and solving. This is true even if the window that +displays the information is closed.
+

3.0 File menu

+

3.1 System log

+ This window contains additional +information from XEphem. Whenever an entry is written the computer may +beep, depending on the setting of the Log +bell Preference. The +contents of all Alert windows are also written here. Scroll bars to the +right and below allow panning through the log.
+
+Erase
+
+
Permanently discards all log entries.
+
+Close
+
+
Closes the log window but has no +effect +on its contents or ability to capture further information.
+

3.2 Gallery

+This window is a portal to high quality +color images.
+
+The Gallery window is broken into three sections. Down the right side +is a scrolled list of the +available images. Images are displayed in the upper left, captions in +the lower left. All sections scroll +to accommodate large areas. A sash between the upper and lower +sections on the left allow you to control the proportion of vertical +space used by each.
+
+Controls across the bottom:
+
+Close
+
Close the Gallery window.
+
+Rescan
+
Reinitialize the list. This also occurs each time the +Gallery window is opened.
+
+Sky Point
+
If the current XEphem database contains an object whose +name matches the Gallery object currently being displayed, this button +will +be active and clicking this button will center the object in the Sky +View. +
+

3.2.1 File format

+The Gallery database index is stored in one or more files with the +suffix .gly. The index files and the image files to which they +refer reside in a directory named gallery which in turn must +reside within either the Shared or Private +directories. All index files found are combined and sorted by name into +the scrolled list.
+
+The index file is in XML format. The entire collection is within one +outer-most element named gallery. In turn it contains one +element named image for each +Gallery image file. +In turn it contains one or more elements named name, one +element named file and one element named description. +The file name is with respect to the directory in which the .gly file +resides. When XEphem reads the description contents, it replaces +isolated newlines with blanks so that word wrapping is left up to the +scrolled text window. Please refer to the following example.
+
+
<gallery>
<image>
<name>
NGC 4414
</name>
<file>
1999-25-a-web_print.jpg
</file>
<description>
In 1995, the majestic spiral galaxy NGC 4414 was imaged by the Hubble
Space Telescope as part of the HST Key Project on the Extragalactic
Distance Scale. An international team of astronomers, led by Dr. Wendy
Freedman of the Observatories of the Carnegie Institution of Washington,
observed this galaxy on 13 different occasions over the course of
two months.

Image Credit: Hubble Heritage Team (AURA/STScI/NASA)
</description>
</image>
</gallery>


+
+

3.3 Network +Setup

+This +window controls how XEphem tries to +connect to +the Internet. One of the following three choices must be turned on for +Internet access to be available.
+
    +
  • Direct connect This +choice +just means to use the direct DNS/IP TCP/IP sockets as necessary. Use +this one unless you are behind a firewall.
  • +
+
    +
  • via Proxy This choice +attempts to access the Internet via a Proxy. Type the port address +and the host name of the proxy in the fields provided.
  • +
+
    +
  • via SOCKS This choice +attempts to access the Internet via a version 4 SOCKS server. Type +the port address and the host name of the server in the fields +provided. These values can be initialized using the environment +variables SOCKS_PORT and SOCKS_NS.
  • +
+If your Proxy or SOCKS firewall require Authentication, turn on the Auth option and enter name and +password in the fields provided. Note that only the Name field may be +Saved.
+

3.4 External Input

+XEphem +can read a file (or fifo) +containing sets of +time, latitude and longitude values and automatically install these +values sequentially unattended. Enter the name of the file in the +window +and press OK. To pause between updates, set the desired delay in the +Pause field of the Main window. All features of XEphem, such as plotting and listing are +available while this feature is running.
+
+The format of each line of the file is as follows:
+
+
JD +Lat Long
+
+where
+
+
JD = Julian Date
+
Lat = Latitude, radians, +north
+Long = Longitude, radians, +west
+
+The fields are separated by one or more blanks or tabs. All lines not +having exactly three floating point values are ignored and may be used +for comments, etc.
+
+

4.0 View menu

+ +

4.1 Data Table

+
+
+This is a table of information about each of the current Favorites. Each data item occupies one +column in the table and each object occupies one row.
+
+The Control pulldown menu contains the following options:
+
    +
  • Setup... This button +brings up a configure window to specify the table rows and columns +as desired.
  • +
+
    +
  • List... This button +allows the current data table to be saved in a text file.
  • +
+
    +
  • X Select    +This button puts the current contents of the data table into the X11 +PRIMARY selection buffer. You can then typically paste it into a file +using the middle mouse button.
    +
  • +
+When any columns related to rising or setting are active a box at the +bottom will indicate whether the times refer to the center or the +upper limb of the object. Similarly, when either the RA or Dec columns +are active or any of the separation columns are active a box will be +present to indicate whether the separation is from a geocentric or +topocentric point of view. The box will also indicate the precession +epoch.
+
+Any of the information in this table may be plotted, +listed or used in a solver +algorithm.
+
+ +

4.1.1 Data setup

+This +window lets you configure which columns will be in the Data Table. +When this window first comes up it will be set to indicate the state +of the Data Table. You may then manipulate the toggle buttons as +desired. To actually change the Data Table to a new configuration +select the Apply button. Ok does the same thing but also +closes this window. Close just +closes this window without making any permanent changes.
+
+Entries are grouped into three sections for clarity. Column one +controls miscellaneous basic information. The descriptions of each +entry are as follows:
+
    +
  • Cns name of the +constellation in which the object appears.
  • +
+
    +
  • RA Right ascension: if +Main Equinox is set to EOD this is the apparent place, otherwise it +is the astrometric (mean) place. If Main Preference Equatorial is +Topocentric, it is further corrected for parallax.
  • +
+
    +
  • HA geocentric or +topocentric hour angle of object, computed as LST-RA precessed to +EOD. Positive angles are west of the meridian.
  • +
+
    +
  • GHA Greenwich Hour Angle, +hour angle of object when at 0° longitude.
  • +
+
    +
  • Dec Declination: if Main +Equinox is set to EOD this is the apparent place, otherwise it is +the astrometric (mean) place. If Main Preference Equatorial is +Topocentric, it is further corrected for parallax.
  • +
+
    +
  • Az topocentric degrees +eastward of true north for object.
    +
    +
  • +
  • Alt topocentric degrees up from a +horizontal plane that is Elevation feet above sea level. Corrected +for refraction.
    +
  • +
+
    +
  • Zenith topocentric Zenith +distance, degrees; corrected for refraction.
    +
    +
  • +
  • PA parallactic angle, i.e., the angle as seen from the +target between zenith and NCP, measured positive westward of meridian.
    +
    +
  • +
  • JD current UTC Julian date.
    +
    +
  • +
  • HJD current heliocentric Julian date, i.e., JD adjusted to +time frame of Sun.
    +
  • +
+
    +
  • Air Number of relative +air masses through which light from the object passes to the +topocentric observer. Computed by the method of Hardie, clamped to a +max at 3 degrees altitude.
  • +
+
    +
  • VMag visual magnitude +of object.
  • +
+
    +
  • PMRA Proper Motion in RA. Units are arcseconds/hour for a +Solar system object, degrees/minute for an Earth satellite and +milliarcseconds/year for all other types of objects.
  • +
+
    +
  • PMDec Proper Motoin in Declination. See PMRA for units.
  • +
+
    +
  • Size angular size of +object, in arc seconds. If not otherwise given, estimated for +objects in heliocentric orbits from the absolute magnitude parameter H +and by assuming an albedo of 0.10, for which H is 18 for an object +of 1.06 km diameter at 1.0 AU.
  • +
+
    +
  • Phase percent of visible +surface in sun light.
  • +
+
    +
  • Elong spherical angular +separation between the Sun and given object, calculated from the their +geocentric ecliptic coordinates. Note this is not just the +difference in ecliptic longitude, as is sometimes used. The sign is +positive for an evening object or negative for a morning object. +Thus, this field is not generally useful in searching for eclipses +because of the discontinuous sign change which occurs at +conjunction. For that, use the individual Separations fields.
  • +
+
    +
  • Spect Basic spectral +classification, if appropriate.
  • +
+
    +
  • HeLat true heliocentric +latitude, in degrees. For the Moon this is the geocentric latitude.
  • +
+
    +
  • HeLong true heliocentric +longitude, in degrees. Earth's is displayed on the Sun's line. For the +Moon this is the geocentric longitude.
  • +
+
    +
  • GLat galactic latitude, +in +degrees. Based on 32.93192° longitude of ascending node on +equator, 192.85948° RA J2000 of North Galactic Pole and +27.12825° Declination of pole.
  • +
+
    +
  • GLong galactic longitude, +in degrees. See GLat for definition.
  • +
+
    +
  • EcLat ecliptic latitude, +in degrees.
  • +
+
    +
  • EcLong ecliptic +longitude, +in degrees.
  • +
+
    +
  • EaDst true distance from +Earth center to object center, in AU, except distance to the Moon is +in miles or km depending on the Units preference.
  • +
+
    +
  • EaLght time for light +to travel from Earth to object. Format is hh:mm for all solar system +objects, except the Moon is in decimal seconds.
  • +
+
    +
  • SnDst true distance from +Sun center to object center, in AU.
  • +
+
    +
  • SnLght time for light +to travel from Sun to object. Format is hh:mm.
  • +
+
    +
  • Uranom Volume and Page +number of object's location in the original Uranometria, published +by Willmann-Bell, Inc.
  • +
+
    +
  • Uran2k Volume and Page +number of object's location in the new Uranometria 2000 edition.
  • +
+
    +
  • MillSA Volume and Page +number of object's location in the Millenium Star Atlas, published +by Sky Publishing Corp.
  • +
+Section two controls information related to rising, transitting, and +setting. These are computed based on a refraction model that uses the +actual atmospheric and topocentric circumstances displayed on the Main +window. A text entry field is available in which you may specify a +number of decimal degrees the local horizon is above horizontal to +account for local effects.
+
+The Limb option means that +the rise and set circumstances are based on the location of the upper +limb of the object. Center +means +that the circumstances are based on the location of the center of the +object.
+
+Follows is a description of the Data Table columns controlled by the +second Data Selection section:
+
    +
  • RisTm and RisAz The local or UTC time and +azimuth when the upper limb (or center) of the object rises Today. +See note below for Earth satellites.
  • +
+
    +
  • TrnTm, +TrnAlt and +TrnAz +For all but Earth +satellites, this is the local or UTC time, altitude and azimuth when +the object crosses the meridian Today or, if no precession, when the +local sidereal time equals the object's right ascension. +If the object is an Earth satellite, this is the next time, highest +altitude and corresponding azimuth the satellite ever reaches above the local +horizon.
  • +
+
    +
  • SetTm and SetAz The local or UTC time and +azimuth when the upper limb (or center) of the object sets Today. +See note below for Earth satellites.
  • +
+
    +
  • HrsUp The number of hours +the object is up Today, that is, the difference between the set and +rise times. See note below for Earth satellites.
    +
  • +
+Note for time zones:
+
+
Rise and set circumstances are all +computed in local time. If the Zone Display preference (from the +Main menubar) is set to UTC then the times are converted to UTC. +Thus, when reference is made to Today it means the current local +date, not UTC date.
+
+Note for Earth satellites:
+
+
Due to their generally rapid motions +Earth satellites often have many rising and setting events per day. +For this reason, the rise and set time for satellites are not +restrained to be during the current local day. Rather, for +satellites, XEphem displays the very next rising and setting events +that occur strictly later than the current time on the Main window, +provided they occur within 24 hours. This means that if the rise or +set time displayed is earlier than the current local time on the +Main window, it actually refers to the next day. This doesn't happen +for the other objects because their times are restricted to events +that happen just today. Similarly, we can only compute the HrsUp +column if the set time is strictly later than the rise time.
+
+The upshot of all this is that the best way to really understand +the visibility of a satellite in your area is by graphing its +altitude over the desired time interval, or displaying all its +passes in the Night-at-a-Glance tool.
+
+Various odd ball rising, transit and setting conditions are accounted +for and marked when they occur as in the following table. Note that in +the case of Earth satellites, "Today" really means within the next 24 +hours.
+
+ + + + + + + + + + + + + + + + + + + + + + + +
NoRiseup some time but never rises, as such, Today.
NoSetup some time but never sets, as such, Today.
NoTranup some time but doesn't transit, as such, Today.
CirPolobject is circumpolar (never goes below horizon) Today.
NvrUpobject is never above the horizon Today.
+
+The third section in the Data Table setup window lists the current +set of Favorites. Any one may be selected +for which the angular separation between it and the object on that row +will be shown, in degrees.
+
+The vantage point for the Separation values depends on the Equatorial preference in the Main window. +Geocentric ignores local conditions and gives the separation as seen +from Earth center. Topocentric uses the local conditions known to +XEphem. The choice is particularly critical for lunar occultations and +Earth satellites, of course, but the effect can be significant for the +planets as well. Geocentric separations between objects and the Sun +will match the magnitude of the elongation given in the Data Table +window.
+
+Note:
+
+
Solving over a period that will +include +the rise or set times of either object is generally better performed +from the geocentric viewpoint. The refraction effect of the +topocentric viewpoint causes many arc minutes of rapid whiplash +displacement as the objects rise and set that overlays the smooth +celestial motion of the objects. This rapid position variation can +confuse the solver algorithms that expect fairly smooth functions.
+
+ +

4.2 Sun

+This +window provides a convenient tool to download, display and manage +images +from SOHO, the Solar +& Heliospheric Observatory. Use of this +extraordinary data is courtesy of the SOHO consortium. SOHO is a +project +of international cooperation between ESA and NASA.
+
+The SOHO data is pulled from the web site +http://sohowww.nascom.nasa.gov. The host name is defined in the XEphem +resource XEphem.SOHOhost. This may be changed if necessary by placing a +new value in the XEphem resource file.
+
+

4.2.1 Sun mouse

+Moving the mouse over a loaded SOHO image will display the approximate +RA and Dec under the cursor. To do this XEphem makes an assumption +about +the scale and orientation of the image and defines the center of the +image as the position of the sun computed at the current XEphem time. +However, we have found SOHO images are not always oriented the same way +and we are not aware of a means to know the orientation +programmatically +so beware. The Carrington Rotation Number is shown in the lower right, +also as of the current XEphem time. If XEphem time differs from when +the +SOHO image was acquired the coordinates will still be correct but of +course the solar features shown in the image will not be correct.
+
+Note that the coordinates do not take account of the different +perspective from the SOHO spacecraft. SOHO does not wander far from the +Sun-Earth line so images of the sun itself do not suffer much but this +effect is quite pronounced for Large Angle and Spectrometric +Coronagraph +images where the coordinates of background objects may be off by a +degree or more. Again, beware and check all coordinates independently +for important work.
+

4.2.2 Sun Control menu
+

+Download latest
+
+

+Clicking this  entry will use your Internet +connection to download the latest image from SOHO. The type and size of +the downloaded image are determined by the current selections in the +Type and Size menus.
+
+
+Save downloaded image
+
+

+This button is active only if the currently displayed image was +downloaded from the net and has not yet been saved. Clicking this +button will save the +downloaded SOHO image currently being displayed to the +Private XEphem directory in .gif +format. +The name of the file always begins with SOHO and includes the size, +date, time +and code name of the data product. For example, the following file name:
+

+SOHO_512_20030802_0100_eit_171.gif
+

+
+
+
indicates the file is 512x512, was +acquired 2003 Aug 02 at 01:00 UTC and is from the 171Å channel of +the Extreme ultraviolet Imaging Telescope.
+
+
+Filter Files by Type
+Filter Files by Size
+
+
+
These options control whether the files +presented by the Files menu will be filtered by the current setting of +the Type menu or the Size menu, respectively. If a filter is not +selected then all files found will be listed.
+
+
+Print...
+
+
This selection allows printing the +current SOHO view or saving it to a file. See Printing.
+
+User annotation...
+
This selection brings up a window +which +allows text and lines to be drawn over the SOHO image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Sun view to a movie loop.
+
+

4.2.3 Sun Files menu
+

+This menu lists each of the SOHO image files currently found +in either the Private or Shared directories. Depending on the Filter +settings in the Control menu it will list all +images or just those that match the current setting of the Type or Size +menus. +Selecting a file from the list will display it in this window.
+

4.2.4 Sun Type menu
+

+This menu lists each of the +eight data products provided by SOHO, one of which may be selected at a +time. The type selected here will be used when Downloading a file from +the Control menu, and may also limit the scope of files listed by the +Files menu if the Filter option is On in the Control menu. Follows is a +brief summary of the data product referenced by each menu entry.
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Menu Entry
+
InstrumentNotes
EIT 171 Extreme ultraviolet Imaging +TelescopeFe IX/X 171 Å, rendered +blue
EIT 195
+
Fe XII 195 Å, rendered +green
EIT 284
+
Fe XV 284 Å, rendered +yellow
EIT 304
+
He II 304 Å, rendered +orange
HMI ContinuumHelioseismic and Magnetic ImagerVisible Sun spots
+
HMI Magnetogram
+
Magnetic Sun spots
+
LASCO C2Large Angle and Spectrometric +CoronagraphCorona to 6 solar radii
+
LASCO C3
+
Corona to 3 solar radii
+
+
+

4.2.5 Sun Size menu

+This menu lists each of the three file sizes of images provided by +SOHO, one of which may be selected at a time. The size selected here +will be used when Downloading a file from the Control menu. +

+
+ + +

4.3 Moon

+This +is +an image of the Moon, shaded to indicate phase. It may be flipped and +scaled as desired and many Lunar features may be labeled, including +most spacecraft landing sites. During a Lunar eclipse, the edges of +the umbra and penumbra regions are drawn as solid and dashed lines, +respectively.
+
+The coordinate system on the Moon is such that latitude increases +towards the north and longitude increases towards the east. When facing +the Moon with the unaided eye, lunar east is towards the right. The +lunar image in XEphem is oriented with the polar axis vertical on the +screen. Letters are placed at each edge of the image to show lunar +coordinate directions.
+
+The scrolling list on the right lists all features in the data base. +Clicking on a name will toggle its label on the map. The labels are +positioned so the center of the feature is at the lower left corner of +the label string. If the label is being turned on then the Labels View +option is also turned on if it is off. +Double-clicking will display the set of Lunar Orbiter images that +include the feature.
+
+The Moon nods and rocks slightly as it moves through the sky. This +motion is called libration. A dot is placed on the circumference of +the image to indicate the limb position that is currently tilted most +towards Earth due to libration. The angular position of the dot is +placed accurately but the image rendering is not adjusted for +libration effects. Thus, the surface features over which the dot and +the terminator appear in the image are only approximate.
+ +

4.3.1 Moon mouse

+Left button
+
+
Activating the left mouse button while +over the lunar image will display a small magnified 2x view of the +lunar surface under the cursor. The magnified image will track the +cursor as it is moved around the image. The latitude, longitude and +solar altitude of the location are displayed in the More info... window.
+
+Right button
+
+
Activating the right mouse button while +over the lunar image will display a popup menu. It lists the name of +the +feature nearest to the cursor, the type, lunar coordinates and the +altitude of the sun as seen from that feature at the current XEphem +time. A toggle button Label +turns on or off a label on the map. A +pushbutton Set info table +loads the feature into the More info window and +will display window if it is not already up. If the Lunar Orbiter +database has been loaded, then a pushbutton Lunar Orbiter image displays the +image in which this feature lies, and also turns on the feature's label +on the main map for handy reference.
+
+
+
Activating the right mouse button +while +not over the lunar image but near a sky background object will pop +up a menu containing the name and magnitude of the object. There +will also be a button Add to favorites +to assign the object to your Favorites.
+
+The two features may be activated together if desired by first pressing +the left button then the right button. This is helpful when trying to +locate a particular feature in the magnified view. Try to always +release the right button to dismiss the popup before releasing the +left button. If you release the left button first, the magnifying +glass will remain on the image. If you run into this, you can activate +the glass again and mop up the remains of the old glass. +

4.3.2 Moon Control menu

+Print...
+
+
This selection allows printing the +current Moon view or saving it to a file. See Printing.
+
+User annotation...
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Moon view to a movie loop.
+
+Field Stars...
+
+
This selection activates the Field +Star +setup window. See Field stars.
+
+Set Earthshine...
+
+
This brings up a window containing a +scale which allows you to set how bright the Earthshine is in the +Moon image. The value ranges from 0, black, to 10, full sun light. +Full sun light is useful when you would like to peruse the Lunar +surface but would rather not change the XEphem date to a full Moon.
+
+This value depends on the gamma of your display. A fine discussion +of display gamma and a test image with which you can determine the +gamma value of your own display may be found at the URL: http://www.cs.cmu.edu/afs/cs.cmu.edu/user/rwb/www/gamma.html.
+
+Movie Demo
+
+
This button sets up an automatic +display +movie +of the Moon. This is done by setting the N Steps entry in the Main +window to a large value; setting the Step to two hours if Sky +background is Off or to one minute if it is On; and starting XEphem looping. The movie can be stopped by +selecting this option again or by selecting Stop from the Main window.
+
+Forget labels
+
+
This button forgets the labels that +have been added either via the popup or the list to the right. Note +this is different than turning off labels in the View menu, which only +temporarily turns of the labels but does not forget.
+
+
+Close
+
+
This closes the main Moon display and, +if open, the More info window. The image is never updated while it +is closed. however if any of the fields in the More Info window are +being used for plotting,listing +or solving, they continue to be updated even +when +the window is closed.
+

4.3.3 Moon View menu

+Spacecraft
+
+
If set and the Scale is at 6, then all +spacecraft landing sites are marked and labeled on the image. If the +Scale is less than 6, then only the Apollo sites are marked.
+
+Labels

+
+
This sets whether additional +(non-spacecraft) Lunar features may be labeled on the image. Exactly +which ones are labeled is controlled from the scrolled list down the +right or with the popup menu activated by the right mouse button. Note +that turning labels off with this button does not forget which features +are labeled, it only turns them off. To actually forget the labels, use +the Undo labels button in the Control menu.
+
+
+Sky background
+
+
This sets whether to show objects +within the current field of view that are in the XEphem database +memory or available from the Field Star facility. The size and +symbol used for the object matches that of the Sky view when set for +a minimum magnitude of 12. While this option is on, XEphem will +automatically retrieve field stars if the moon position changes on +the sky
+
+{Pen}Umbra
+
+
This sets whether to show circles at +the edges of the umbra and penumbra during a Lunar eclipse. +Also, the current subearth location is marked with an X; the +subsolar point is marked with a small open circle; and the +anti-subsolar point is marked with a small filled circle.
+
+Flip T/B
+Flip L/R
+
+
These set whether the image is flipped +vertically or horizontally, respectively.
+
+Grid
+
+
This sets whether a coordinate grid is +drawn over the image. Each line is spaced at an interval of 15 +degrees.
+

4.3.3.1 More info...

+
This brings up a separate window with +additional information. The top portion of the window reports the +location of the cursor as it is moved over the image, if the left +button is pressed. It also shows the altitude of the Sun and the +times when the Sun will next rise and set at that location. The times +are in accord with the Time zone Preferences +in the Main window.
+
+The lower portion of the window shows the lunar longitude of sunrise, +the lunar latitude of the subsolar point, and libration information. +The longitude of the subsolar point is at +90 from the sunrise +longitude, and the longitude of the anti-subsolar point is at -90. +The libration in longitude is positive towards lunar east; latitude +is positive towards lunar north. The Limb angle is zero at lunar +north and increases towards lunar west. The Tilt is the number of +degrees the Moon is tilted towards Earth around an axis defined by +the librations in latitude and longitude. The limb location that is +tilted most towards Earth is indicated on the image by a small dot.
+
+Any of the values in the lower portion may be plotted, +listed or used in a solver +algorithm. The values are always current when used in this way, even +if the main Moon view is closed. For faster looping, close the main +Moon display to prevent it from being redrawn each time.
+
+
+

4.3.4 Scale menu

+This pulldown menu presents a list of factors by which the lunar +image may be scaled. The image is presented in a scrolled window for +panning if it is larger than the overall window.
+

4.3.5 Lunar +Orbiter IV

+XEphem optionally supports displaying images +taken by Lunar +Orbiter IV in 1967. These images and the features database are used by +permission of +the Lunar and Planetary Institute.
+
+Lunar Orbiter images are located in the lo directory within the Shared +directory. When these images are installed they are accessible from the +Moon view in two ways. One is to double-click an entry in the features +list down the right of the Moon view window. The other is to use the +Lunar Orbiter images button in the popup over the image in the main +Moon window.  These functions are automatically disabled if XEphem +can not fund the images on startup.

+The LO images are displayed in their own window. The images are large +so panning controls are available on the bottom and right edges. The +annotation +overlay may be toggled on and off with the given toggle button. A +scrolled list in the lower right corner allows choosing one from among +all the LO images which contain the current feature.
+
+The LO images are not perfectly aligned NSEW, some are canted as much +as 30 degrees from vertical. The images are shown exactly as they were +taken. No attempt is made to register the images with the main +XEphem moon view, nor to perform flipping or scaling. The ability to +click to see the next adjacent image would have been nice but certain +technical difficulties made the results unsatisfactory and was left +out.
+
+The image scale is approximately 300m/pixel.
+
+
+
+ +

4.4 Earth

This +view displays a view of the Earth with either schematic continent +outlines or a real color image. The night side may be dark or include +nightside lights. The projection may be spherical or +cylindrical "Mission Control" style. The controls available from the +menu bar across the top control the view, the display of additional +information and +the ability to overlay the ground positions of all Favorite objects. +The scales along the bottom and right edges display, and may be used +to control, the center longitude and latitude location. The button in +the lower right corner sets the latitude to exactly zero. The scale +along the left edge sets the zoom.
+
+Any or all of the current Favorites may be +displayed on the map. Objects with defined date ranges are only shown +when they are valid. The location defined in the Main window is marked +on the map +with a plus (+).
+
+If a solar eclipse is occurring on the Earth a small X will mark the +location of central totality. Try July 11, 1991 around 18:00 UT or May +10, 1994 around 16:00 UT.
+
+All computations for Earth satellites are based on the NORAD SGP4/SDP4 +code. This code produces the exact same output as their test +collection. +This means, however, that it is not integrated particularly tightly +with +the rest of XEphem. For example, its computations use a different model +for Earth flattening and for refraction. These and other differences +can +lead to modest inconsistencies. +

4.4.1 Earth mouse

+As long as the cursor is over the Earth, the four corners of the View +will display the following information about the position beneath the +cursor:
+
+ + + + + + + + + + + + + + + + + + + +
Upper left
+
Latitude and longitude
+
Upper right
+
Great circle bearing and distance
+
Lower left
+
Local Mean Time
+
Lower right
+
Local Sidereal Time
+
+ +
+Left button
+
+
+While the left button is depressed and located over the +Earth map, the great circle from the Main site location through the +cursor location will be drawn.
+
+ +
+Middle button
+
+
If View » Live dragging +is On then while the middle button is depressed and located over the +Earth map, the cursor is changed to a fleur pattern. Moving the +mouse left and right is like sliding the scale at the bottom; moving +it up and down is like sliding the scale at the right. This provides +a simple method to pan the display.
+
+ +Right button
+
+
If the right mouse button is clicked +while over the Earth, a popup menu appears with information related +to the location under the cursor.
+
+
If the location is near a Site, +information is presented with respect to the exact location of that +site.
+
+
If the location is not near a Site, +the +information is with respect to the latitude and longitude of the +location under the cursor.
+
+
If the location is near the current or +a trailed location of one of the displayed objects either on the +surface or in orbit, the information +is with respect to the location of that object at the time of the +trail mark.
+
+
There will also be a button labeled +Point that will center the orientation on the cursor location.
+

4.4.2 Earth Control menu

+Print...
+
+
This selection allows printing the +current Earth view or saving it as a Postscript file. See Printing.
+
+User annotation...
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Earth view to a movie loop.
+
+Objects...
+
+
This brings up a table for controlling +how each current Favorite object is displayed.
+
+Set Main
+
+
+
This sets the Latitude and Longitude +of +the Main window to that of the current position of the Earth view. +This also causes all other information and views to be updated to +reflect the new location.
+
+Set From Main
+
+
This sets the Earth view position to +that of the Main window
+
+Movie Demo
+
+
This sets up an automatic display +movie +of the Earth. This is done by setting the N Steps entry in the Main +window to a large value; setting the Step to 5 minutes; and starting +XEphem looping. The movie can be stopped +by +selecting this option again or by selecting Stop from the Main +window.
+
+Close
+
+
This causes both the Earth view and +the +extra statistics window to be closed.
+

4.4.3 Earth View menu

+Cylindrical graphic
+Cylindrical image
+

+
Displays the entire Earth surface +projected onto a cylinder. Primary advantage is the entire surface +is visible at once. Particularly good for plotting satellite ground +tracks. Major disadvantage is distortion near the poles. The +preferred width-to-height ratio for the cylindrical projection is +3.14:1. This ratio is enforced each time this projection is selected by +changing the width and maintaining the current window height, subject +to +remaining fully on screen.
+
+Spherical graphic
+Spherical image
+
+
+
Displays the Earth as it would really +appear from space. The primary advantage is the sense of reality and +lack of distortion. Either projection may be shown using a simple +graphical technique which draws only the outlines of the major land +features, or using a full color image, courtesy NASA's project Blue +Marble. The former is fast, the latter looks much better. The spherical +projection resizes to become a square by setting the width equal to the +height.
+
+Weather map
+
+
Displays a global montage of satellite +cloud imagery, ice, sea and land temperatures, courtesy Space +Science and Engineering Center at the University of Wisconsin. The +image is a gif file retrieved from http://www.ssec.wisc.edu/data/comp/latest_cmoll.gif. +It is updated once every six hours. All other graphical features of +the Earth view remain available as overlays to this image. Primary +advantage is ease in determining whether weather will effect +visibility of a satellite pass. If you have trouble accessing the +image directly from XEphem, the program will also use the file +/tmp/latest_cmoll.gif if it exists. The weather map forces itself to +become 640x480 pixels.
+
+After any projection is selected, the window size may be directly +manipulated manually from then on as desired.
+
+Reload map
+
+
This button is only present when the +Weather map projection is turned on. Pressing it will cause a fresh +weather map to be retrieved.
+
+Grid
+
+
This toggles showing grids lines every +15 degrees in latitude and longitude.
+
+Sites
+
+
This toggles whether a tiny square +will +be drawn at each location found in the currently loaded Sites file
+
+Sunlight
+
+
This toggles whether the portion of +the +Earth's surface currently in sun light is highlighted in some +fashion. When using the Weather map or either Image projection, the +map is darkened where the Sun is currently down, and only continent +outlines are shown.
+
+Main marker
+
+
This toggles whether a small marker is +drawn at the location currently showing in the XEphem Main window.
+
+
+Nightside lights
+
This toggles whether the dark side of the view will include +lights visible from space. This option is only available using either +of the Image methods (not Graphics). Image is courtesy NASA.
+
+Live dragging:
+
+
This toggles whether the display +graphics are updated immediately as the sliders are moved, or +whether graphics are only drawn after the sliders are released. +Also, if this option is on, moving the mouse while holding down the +middle button will cause the display to rotate about the pole when +moved left-and-right or about a horizontal line centered on the window +when moved up-and-down. If your system is sufficiently fast, the +effect in quite dramatic.
+
+
+Inertial frame:
+
+
When On, the display point of view +remains fixed in space; when Off, it remains over a fixed location on +the earth's surface.
+
+
+
+

4.4.3.1 Objects dialog

+

+
+
This dialog shows one row for each +active Favorite. The columns are as follows:
+
+Object
+
This is the name of the Object.
+
+Show
+
Determines whether the object is shown +on the Earth map at all. If On, the object subearth location is +shown as a cross × surrounded by the loci of points at +which the object is 60, 30 and 0 (on the horizon) degrees +altitude. Clicking on the title toggles the individual buttons for all +objects.
+
+Label
+
Determines whether the name of the +object is drawn somewhat above its cross. Clicking on the title toggles +the individual buttons for all objects. +
+Foot Print
+
The footprint is a set of three +contours +indicating the locations from which the object appears at 0, 30 and 60 +degrees above the horizon. This toggle chooses whether to show these +contours or just the sub-earth postion. Clicking on the title toggles +the individual buttons for all objects. +
+Orbit
+
Determines whether to draw the orbit +of an earth satellite. The orbit is drawn starting from the current +location of the satellite as seen from space, irrespective of +subsequent earth rotation. Clicking on the title toggles the individual +buttons for all objects. +
+Trail
+
Brings up a window to define the time +duration and labeling of the ground track of the object. See Trails After a trail has been created, this toggle +then allows it to be turned off and on without deleting it. The +trail really is deleted if it is Off and an Update occurs. After +being deleted, this toggle again brings up the window to define +a trail. Note that the trail may be redefined as many times as +desired directly from the Trail window, it does not need to be +deleted each time.
+Track
+
At most one button in this column may +be On. The object for which Tracking is on will remain centered +in the view each time Update occurs.
+Popup ref
+
At most one button in this column may +be On. When right-clicking on the map with one of these buttons +on, the bearing and altitude from that location to this object +are displayed.
+
+The remaining columns are informational only but be used for plotted, listed or used +in a solver algorithm. Sub lat and long are +displayed for all types of object, the others are displayed for +Earth satellites only.
+
+Sub lat
+
Sub long
+
These columns display the latitude and +longitude at which the given object appears exactly overhead.
+Alt
+
This is the distance from the mean +geode to the satellite.
+Range
+
This is the line of site distance from +the current Main location to the satellite.
+Range'
+
This is the rate of change of Range. +It +is useful for computing the doppler shift of a signal arriving +from the satellite.
+Sun lit
+
This column is a 1 or 0 depending on +whether the satellite is in sun light. Note this is not whether the subearth point is +in +sun light.
+Age Days
+
This is the age, in days, of the +elements used +to +compute the satellite orbit. Drag is included but elements older +than a few days will already show errors. Use the handy Web Update button at the bottom to download the +latest elements.
+
+
+ +

4.5 Mars

+This +window displays an image of Mars as it currently appears from Earth +center. The orientation is +always parallel to the Martian rotation axis. The NSEW markings are +directions on the celestial sphere. +

4.5.1 Mars mouse

+Left Button
+
+
If the View » More Info +window is open, then moving the mouse around over the image while +holding the left button will display the Martian latitude and +longitude under the cursor location. A magnifying glass also appears +attached to the cursor.
+
+Right Button
+
+
+
Pressing the right button while over +the planet will present a popup menu. Sliding down and releasing on +the Point button in the popup will reposition the view so the +current location is centered. Repointing will also disable the shadow +and +the subearth marker until the next Update from the Main window. If +over a feature, the popup will also contain its name, type, diameter +(or largest dimension) and location. If not over a feature, just the +cursor +location is shown.
+
+

4.5.2 Mars Control menu

+Print...
+
+
This selection allows printing the +current Mars view or saving it as a Postscript file. See Printing.
+
+User annotation
+
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Mars view to a movie loop.
+
+Close
+
+
This selection will remove the Mars +view from the screen. If it is open it will also remove the More +Info window.
+
+ +

4.5.3 Mars View menu

+Half size
+
+
This sets whether the map is drawn at full available +resolution or at one half resolution.
+
+Flip +T/B
+Flip L/R
+
+
This sets whether the image is flipped +vertically or horizontally, respectively.
+
+Grid
+
+
This sets whether a coordinate grid is +drawn over the image. Each line is spaced at an interval of 15 +degrees. Also, unless the image has been rotated, an X marks the +center of the image, that is, the subearth location.
+
+
+

4.5.3.1 Features...

+ + +
This window displays categories of +surface features and a scrolled list of individual features sorted by +name. The features that are selected in the scrolled list are the ones +drawn on the map. Craters and single Mountains are drawn with a circle +to scale, landing sites with a small circle and other categories are +just labeled by name.
+
+Click an entry in the scrolled list to turn it on or off individually. +Or select features by category by clicking the toggle buttons down the +left and possibly Toggle, All and None as +convenient, then clicking Apply. Ok does the same but +also closes this window.
+
+As a special case if everything in the scrolled list is unselected and +one feature is selected, the map will be rotated to place the selected +feature in the center. This is handy for locating a feature by name. +Note that all features may be deselected easily by clicking None +then Apply.
+
+
+
+

4.5.3.2 More info...

+
The top +portion of this window reports +the location +of the cursor as it is moved over the image, if the left button is +pressed.
+
+Sub Earth Lat shows the Martian latitude which currently faces +the Earth. The value is computed +each time an Update is performed from the Main Menu. The scale below +allows you to set another value if desired as described below.
+
+Central M Long shows the central meridian longitude, or simply +Martian longitude, which currently faces the Earth. The value is +computed +each time an Update is performed from the Main Menu. The scale below +allows you to set another value if desired as described below.

+Seeing sets the size of your local atmospheric seeing disk in +arc seconds. The image will +be blurred to simulate the resolution under this condition.
+
+For browsing purposes, the scale values may be changed as desired. +Adjust +any or all scales, then press Apply to put the changes into +effect. +Forcing changes in this way will also temporarily disable the +shadow. At the time of the next Update, the correct current values +and the shadow will be reinstated. The Apply button is made +insensitive if the scale values are correct for the current time; +the button becomes sensitive only when the scales have been moved +manually.
+
+The values in the lower portion may be plotted, listed or used in a solver +algorithm. The values are always current when used in this way, even +if the main Mars view is closed. For faster looping, close the main +Mars display to prevent it from being redrawn each time.
+
+ +

4.5.3.3 Moon view...

+
+This is a schematic view of Mars and its moons at the indicated date +and +time. In addition, background sky objects may also be displayed.
+
+The scale at the left controls relative magnification.
+
+The scale at the right controls the dimmest magnitude which will be +displayed. The values range from 20 at the top and 0 at the bottom. +Objects dimmer than the value specified are not shown, except that +Mars is always shown.
+
+Nominal celestial directions are indicated at the top and right edges.
+
+Moons are displayed only if they are geometrically visible. Use the +top view to see whether they are also in sun light.
+
Mars Moons mouse
+
The mouse may be used to identify any +object in the Mars view. Position the cursor near the object of +interest and select the right mouse button. A popup menu will appear +with the objects name, current location and magnitude.
+
+ +
Mars Moons Control +menu
+Print...
+
+
This selection allows you to print the +current view. See Print.
+
+User annotation...
+
+
This selection lets you place text and +lines on the current view. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Martian moon view to a movie +loop.
+
+Field Stars...
+
+
This selection activates the Field +Star +setup window. See Field stars.
+
+Telescope GoTo
+
+
This option, when available, causes +the location of +Mars +to be sent to a telescope control process. This mechanism is +the same as that provided by the Telescope facility within the Sky +view. See Telescope
+
+Movie Demo
+
+
This option will set up the Main +window +time step controls for a 15 minute step size and start a loop which dramatically displays the motions +of the moons as they orbit Mars. This selection automatically disables +the View » Sky Background +selection to insure reasonable speed. Push the button again to stop +the movie.
+
+Close
+
+
This removes the Mars moon display, +and +the additional information window if present, from the screen.
+
Mars Moons View menu
+Top view
+
+
Selects whether to also display +another +window, looking down on the Mars system from above the N celestial +pole. This window will tend to remain aligned above the main view +when either is resized. Moons are displayed only if they are in sun +light.
+
+Sky background
+
+
Selects whether to also show objects +within the current field of view that are in the XEphem database +memory or available from the Field stars +facility. The size of the object is determined by the limiting +magnitude as specified by the scale at the right. Objects are drawn +using the same symbols as used by the Sky view. While this option is +on, +XEphem will continue to retrieve field stars as required.
+
+Bright moons
+
+
If this option is in effect, then the +diameter of all moons will be increased by 3 pixels. This option +also insures that even those moons which are dimmer than the +limiting magnitude, as specified by the scale to the right, will be +drawn with a circle of diameter 3 pixels.
+
+Tags
+
+
+
Whether to show the Roman numeral +designation beneath each moon and a 1 arc-minute scale calibration +line.
+
+Flip T/B
+Flip L/R
+
+
These allow the scene to be flipped +vertically and horizontally, respectively.
+
+More info...
+
+
This +button brings up a separate +window which +contains quantitative information about Mars's moons. All values may +be used in plotting,listing +and solving.
+
+The E and S columns are 1 if the moon is geometrically visible from the +Earth and +Sun, respectively. The P column is 1 if the shadow of the moon +currently falls on the planet. The T column is 1 if the moon is +currently transiting the planet. Otherwise the columns are 0.
+
+The locations of the moons are given in two coordinate systems. The +first three columns are the displacements of the moons in Mars radii +with respect to the equatorial plane. The next two columns give the +RA and Dec location of the moons in the current epoch (as specified +on the Main window).
+
+
+ +

4.6 Jupiter

+
+This is a view of Jupiter and its Galilean moons at the indicated date +and time. In addition, background sky objects may also be displayed.
+
+The scale at the left controls relative magnification.
+
+The scale at the right controls the dimmest magnitude which will be +displayed. Jupiter is always displayed. The values range from 20 at +the top and 0 at the bottom. Objects dimmer than the value specified +are not shown.
+
+Equatorial directions are indicated at the top and right edges.
+
+Moons are displayed only if they are geometrically visible from Earth. +Use the top view to see whether they are also in sun light.
+
+The default longitude of the GRS is set to 77 degrees, where it was +in late May of 2002. This may be changed interactively in the More +Info window.
+

4.6.1 Jupiter mouse

+
The mouse may be used to identify any +object in the Jupiter view. Position the cursor near the object of +interest and select the right mouse button. A popup menu will appear +with the objects name, current location and magnitude.
+
+
+ +

4.6.2 Jupiter Control menu

+Print...
+
+
This selection allows printing the +current Jupiter view or saving it to a file. See Printing.
+
+User annotation...
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Jupiter moon view to a movie +loop.
+
+Field Stars...
+
+
This selection activates the Field +Star +setup window. See Field stars.
+
+Telescope GoTo
+
+
This option, when available, causes +the location of +Jupiter to be sent to a telescope control process. This mechanism is +the same as that provided by the Telescope facility within the Sky +view. See Telescope
+
+Movie Demo
+
+
This option will set up the time step +controls in the Main window for a 15 minute step size and start a +loop which dramatically displays the motions of the moons as they +orbit Jupiter. This selection automatically disables the View » Sky Background +selection to insure reasonable speed. Push the button again to stop +the movie.
+
+Close
+
+
This removes the Jupiter display, and +the additional information window if present, from the screen.
+

4.6.3 Jupiter View menu

+Top view
+
+
Selects whether to display another +window above the front view with a vantage point over the pole. This +window will try to remain aligned above the main Jupiter front view +when either is resized. Moons are displayed only if they are in sun +light.
+
+Sky background
+
+
Selects whether to also show objects +within the current field of view that are in the XEphem database +memory or available from the Field stars +facility. The size of the object is determined by the limiting +magnitude as specified by the scale at the right. Objects are drawn +using the same symbols as used by the Sky view. While this option is +on, +XEphem will continue to retrieve field stars as required.
+
+Bright moons
+
+
If this option is in effect, then the +diameter of all moons will be increased by 3 pixels. This option +also insures that even those moons which are dimmer than the +limiting magnitude, as specified by the scale to the right, will be +drawn with a circle of diameter 3 pixels.
+
+Tags
+
+
Selects whether to show the Roman +numeral designation beneath each moon and a 1 arc-minute scale +calibration line.
+
+Flip T/B
+Flip L/R
+
+
These allow the scene to be flipped +vertically and horizontally, respectively.
+

4.6.3.1 More info...

+
This +button brings up a separate window which contains quantitative +information about Jupiter's moons and central meridian longitude. +All values may be used in plotting,listing and solving.
+
+The E and S columns are 1 if the moon is geometrically visible from the +Earth and +Sun, respectively. The P column is 1 if the shadow of the moon +currently falls on the planet. The T column is 1 if the moon is +currently transiting the planet. Otherwise the columns are 0.
+
+The locations of the moons are given in two coordinate systems. The +first three columns are the displacements of the moons in Jupiter +radii with respect to the celestial plane. The next two columns give +the RA and Dec location of the moons in the current equinox (as +specified on the Main window).
+
+Value of the System II longitude of the Great Red Spot is displayed. +The value may be changed according to current information. Pressing +Enter will update the Jupiter display with the new value.
+
+
+
+ +

4.7 Saturn

+
+This is a schematic view of Saturn, its rings and moons at the +indicated +date and time. In addition, background sky objects may also be +displayed.
+
+The scale at the left controls relative magnification.
+
+The scale at the right controls the dimmest magnitude which will be +displayed. Saturn and its rings are always displayed. The values +range from 20 at the top and 0 at the bottom. Objects dimmer than +the value specified are not shown.
+
+Nominal celestial directions are indicated at the top and right edges.
+
+Moons are displayed only if they are geometrically visible. Use the +top view to see whether they are also in sun light.
+

4.7.1 Saturn mouse

+
The mouse may be used to identify any +object in the Saturn view. Position the cursor near the object of +interest and select the right mouse button. A popup menu will appear +with the objects name, current location and magnitude.
+
+

4.7.2 Saturn Control menu

+Print...
+
+
This selection allows printing the +current Saturn view or saving it to a file. See Printing.
+
+User annotation...
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Saturn moon view to a movie loop.
+
+Field Stars...
+
+
This selection activates the Field +Star +setup window. See Field stars.
+
+Telescope GoTo
+
+
This option, when available, causes +the location of +Saturn to be sent to a telescope control process. This mechanism is +the same as that provided by the Telescope facility within the Sky +view. See Telescope
+
+Movie Demo
+
+
This option will set up the time step +controls in the Main window for a 15 minute step size and start a loop which dramatically displays the motions +of the moons as they orbit Saturn. This selection automatically +disables +the View » Sky Background +selection to insure reasonable speed. Push the button again to stop +the movie.
+
+Close
+
+
This removes the Saturn display, and +the additional information window if present, from the screen.
+
+ +

4.7.3 Saturn View menu

+Top view
+
+
Selects whether to also display +another +window, looking down on the Saturnian system from above the +celestial N pole. This window will tend to remain aligned above the +main front view when either is resized. Moons are displayed only if +they are in sun light.
+
+Sky background
+
+
Selects whether to also show objects +within the current field of view that are in the XEphem database +memory or available from the Field stars +facility. The size of the object is determined by the limiting +magnitude as specified by the scale at the right. Objects are drawn +using the same symbols as used by the Sky view. While this option is +on, +XEphem will continue to retrieve field stars as required.
+
+Bright moons
+
+
If this option is in effect, then the +diameter of all moons will be increased by 3 pixels. This option +also insures that even those moons which are dimmer than the +limiting magnitude, as specified by the scale to the right, will be +drawn with a circle of diameter 3 pixels.
+
+Tags
+
+
Selects whether to show the Roman +numeral designation beneath each moon and a 1 arc-minute scale +calibration line.
+
+Flip T/B
+Flip L/R
+
+
These allow the scene to be flipped +vertically and horizontally, respectively.
+

4.7.3.1 More info...

+
This button +brings up a separate window +which +contains quantitative information about Saturn's moons and its +rings. All values may be used in plotting,listing and solving.
+

+The E and S columns are 1 if the moon is geometrically visible from the +Earth and +Sun, respectively. The P column is 1 if the shadow of the moon +currently falls on the planet. The T column is 1 if the moon is +currently transiting the planet. Otherwise the columns are 0.
+
+The ring tilt is displayed as the angle above or below the line of +sight to Saturn from the Sun and the Earth. A positive value means +the front of the rings are tilted southward.
+
+The locations of the moons are given in two coordinate systems. The +first three columns are the displacements of the moons in Saturn +radii with respect to the celestial plane. The next two columns give +the RA and Dec location of the moons in the current equinox (as +specified on the Main window).
+
+ +

4.8 Uranus

+
+This is a schematic view of Uranus and its moons at the indicated date +and time. In addition, background sky objects may also be displayed.
+
+The scale at the left controls relative magnification.
+
+The scale at the right controls the dimmest magnitude which will be +displayed. Uranus is always displayed. The values range from 20 at +the top and 0 at the bottom. Objects dimmer than the value specified +are not shown.
+
+Nominal celestial directions are indicated at the top and right edges.
+
+Moons are displayed only if they are geometrically visible. Use the +top view to see whether they are also in sun light.
+

4.8.1 Uranus mouse

+
The mouse may be used to identify any +object in the Uranus view. Position the cursor near the object of +interest and select the right mouse button. A popup menu will appear +with the objects name, current location and magnitude.
+
+

4.8.2 Uranus Control menu

+Print...
+
+
This selection allows printing the +current Uranus view or saving it to a file. See Print.
+
+User annotation...
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Uranus moon view to a movie loop.
+
+Field Stars...
+
+
This selection activates the Field +Star +setup window. See Field stars.
+
+Telescope GoTo
+
+
This option, when available, causes +the location of +Uranus to be sent to a telescope control process. This mechanism is +the same as that provided by the Telescope facility within the Sky +view. See Telescope
+
+Movie Demo
+
+
This option will set up the time step +controls in the Main window for a 15 minute step size and start a loop which dramatically displays the motions +of the moons as they orbit Uranus. This selection automatically +disables +the View » Sky Background +selection to insure reasonable speed. Push the button again to stop +the movie.
+
+Close
+
+
This removes the Saturn display, and +the additional information window if present, from the screen.
+ +

4.8.3 Uranus View menu

+Top view
+
+
Selects whether to also display +another +window, looking down on the Uranus system from above the N celestial +pole. This window will tend to remain aligned above the main view +when either is resized. Moons are displayed only if they are in sun +light.
+
+Sky background
+
+
Selects whether to also show objects +within the current field of view that are in the XEphem database +memory or available from the Field stars +facility. The size of the object is determined by the limiting +magnitude as specified by the scale at the right. Objects are drawn +using the same symbols as used by the Sky view. While this option is +on, +XEphem will continue to retrieve field stars as required.
+
+Bright moons
+
+
If this option is in effect, then the +diameter of all moons will be increased by 3 pixels. This option +also insures that even those moons which are dimmer than the +limiting magnitude, as specified by the scale to the right, will be +drawn with a circle of diameter 3 pixels.
+
+Tags
+
+
Selects whether to show the Roman +numeral designation beneath each moon and a 1 arc-minute scale +calibration line.
+
+Flip T/B
+Flip L/R
+
+
These allow the scene to be flipped +vertically and horizontally, respectively.
+

4.8.3.1 More info...

+
This button +brings up a separate window +which +contains quantitative information about Uranus's moons. All values +may be used in plotting, listing +and solving.
+
+The E and S columns are 1 if the moon is geometrically visible from the +Earth and +Sun, respectively. The P column is 1 if the shadow of the moon +currently falls on the planet. The T column is 1 if the moon is +currently transiting the planet. Otherwise the columns are 0.
+
+The locations of the moons are given in two coordinate systems. The +first three columns are the displacements of the moons in Uranus +radii with respect to the celestial plane. The next two columns give +the RA and Dec location of the moons in the current equinox (as +specified on the Main window).
+
+
+

4.9 Solar System

+This is a graphical representation of the +solar system. The Sun is +always at the center of the screen, marked with a small circle. The +set of objects displayed are the ones from the Favorites +list that are solar system objects. Objects with defined date ranges +are only shown at valid times.
+ +

4.9.1 Solar System Scales

+The three scales at the edges control the position of the observer.
+
+
The vertical scale on the left controls the distance from the +Sun. You are closer as the scale is slid further up. You can also +control this with the keypad + and - keys. Using the key alone moves +by 2% little, with Shift moves by 10%.
+
+
The horizontal scale across the bottom of the view controls the +heliocentric longitude. Think of it as a rotation about the central +axis. The value of the scale is the heliocentric longitude vector +pointing straight at you. You can also control this with the keypad +Left and Right arrow keys. Using the key alone moves by 2%, with +Shift moves 10%.
+
+
The vertical scale on the right controls the heliocentric +latitude, your angle above or below the ecliptic plane. You can also +control this with the keypad Up and Down arrow keys. Using the key +alone moves by 2%, with Shift moves 10%.
+
+Changes to the scales take effect as you drag, unless the View » All Objects +option is on in which case the change does not take effect until you +release the scale. +

4.9.2 Solar System mouse

+Right button
+
+
Clicking the right mouse button near +an +object will pop up a menu with additional information. RA and Dec +are displayed as of the time the dot was computed. The RA, Dec and +Mag given for the Earth is that of the Sun.
+
+
Persistent +Label toggles whether the label for the object is displayed +regardless of whether the View +» Labels option is activated.
+
+
+

4.9.3 Solar System Control +menu

+Print...
+
+
This selection allows printing the +current Solar System view or saving it to a file. See Printing. +
+
+Favorites...
+
+
The Solar System view displays the +current set of Favorites that +are in the +solar +system.
+
+User annotation...
+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Solar System view to a movie +loop.
+
+Create Trails...
+
+
This button will bring up a window to +set up making a trail for each object as they travel from their +current positions. Each trail time is drawn connected together with +a solid line with each point indicated with a small dot. The time +stamps shown with the trails, if any, are always in UTC. For the +trail to be visible, the Trails option must be activated. Only one +set of trails is supported at a time. Creating new trails will +delete the old ones. The trails will also be discarded if a user +defined +object is changed or an Update occurs from the Main window. Only the +Favorites are trailed. The other solar system objects, if any, are +always shown in their current positions. See Trails.
+
+Movie Demo
+
+
+
This push button will set the Main +window Step to 5 days and start looping +with a very large number of steps. Press the button again or use +Stop control in the Main window to stop the movie.
+
+Live Dragging
+
+
This toggle button selects whether the +graphics are redrawn in real time as the various scale controls are +being slid, or whether the graphics are not redrawn until the mouse +is released. The response depends on the speed of the computer, display +and data bandwidth. If the system is fast enough, turning this on +can produce dramatic depth clues for complex solar system views; +also try it in Stereo.
+
+Stereo pair
+
+
This toggle button is used to bring up +another image of the solar system from a slightly displaced vantage +point. Adjusting your gaze to fuse the two images together will +reveal a 3D image. This effect is most pronounced if fairly lengthy +trails are created, legs are turned on and the Ecliptic plane circles +are turned off. This effect was designed +primarily to help visualize the orbits of comets.
+
+
At the bottom of the stereo display is +a scale to control the amount of parallax to introduce. The parallax +is only introduced in the plane of the ecliptic. This works well for +low latitudes but when viewing from near the poles it just moves +everything equally.
+
+If you prefer focusing your eyes in front of the screen, move the +parallax control somewhat to the left; if you prefer to relax your +eyes and focus at infinity then move the parallax control to the +right. You can also control this scale with the keypad slash (/) and +star (*) keys.
+
+Close
+
+
This push button will close both the +main Solar system view and the Stereo view. If the Solar System view +is closed while the Stereo window is on, it will reappear when the +Solar System window is reactivated.
+

4.9.4 Solar System View +menu

+Trails
+
+
This toggles whether trails, if +currently defined, are displayed. The trails may be turned on and +off as desired without loss but the trails are permanently discarded +when the next Update from the Main window occurs.
+
+Ecliptic
+
+
This toggle button controls the +display +of a set of circles in the ecliptic plane, spaced at regular +intervals. The interval between each circle is displayed at the +upper left of the view.
+
+Labels
+
+
This option causes each object's name +to appear.
+
+Legs
+
+
This toggle button controls whether a +line is drawn from each object down to the ecliptic. This aids in +visualizing the 3D location of the objects.
+
+DB too
+
+
This allows showing all objects +currently loaded into memory that lie within the solar system, in +addition to the Favorites.
+
+ +

5.0 Sky View

+ This view presents a +schematic representation of the sky showing database +objects and useful auxiliary information. A FITS file image can also +be displayed simultaneously.
+
+The dominant center area displays each object that meets the brightness +and type filter selection criteria. Objects with defined date ranges +are +only shown at valid times. A menu bar across the top offers access to +all functions. Fast access to certain functions are available from the +surrounding toolbars. The mouse buttons can be used inside the display +area for additional functionality specific to the exact location of +the cursor when clicked.
+
+Note that while looping with Pause set to +0 the Sky View is not updated (although all quantitative information +is always updated internally each step). This is to permit creating +plots and using other XEphem features that use many time increments to +run much more quickly if the Sky View is unmanaged or with Pause set +to 0.
+
+If the object is an Earth satellite, its label will be surrounded in +parentheses if it eclipsed at that location. +
+ +

5.1 Sky View mouse

+The mouse serves many purposes in the Sky View. Exactly what it does +at any one time depends on whether it is located over an object and on +the states of some of the toolbar buttons.
+
+No buttons:
+
+
Generally +nothing happens when the mouse is over the Sky View and no buttons +are being pressed. However, if the Corner Coordinates toolbar button +(upper right) is On, basic data describing the position of the +cursor are displayed in the upper corners whenever the cursor is +over the Sky even when no buttons are depressed. These data include:
+
+
    +
  • In the Upper left corner:
    +
  • +
+
    +
  • RA, Dec and Hour angle equatorial coordinates;
  • +
  • the great-circle distance and bearing between the current +position and the +point at which the left button was last clicked;
  • +
  • constellation name;
  • +
  • if displaying FITS image, raw image pixel coordinates. N.B. FITS coords = XEphem coords + 1
    +
  • +
+
    +
  • In the Upper right corner:
  • +
+
    +
  • Alt, Az and Zenith horizon coordinates;
  • +
  • Galactic latitude and longitude
    +
  • Parallactic angle, +/-180 +west
    +
  • +
+
The coordinates are derived directly +from the screen location and know nothing of the displayed objects. +Thus, they neglect parallax (i.e., assume everything is at infinity).
+
+If the Telescope Marker is active and a telescope control process +is reporting telescope position information, then when the cursor is +outside the Sky View the data in the corners refer to the telescope +marker position, not the cursor position. This information is not +displayed if any keyboard keys or mouse buttons are pressed.
+
+Left button:
+
+
If +the +Region of Interest toolbar button is On and the left mouse button is +pressed, then the information in the upper left and right corners +changes into delta information, that is, the changes in the various +coordinates with respect to the position where the left button was +last pressed.
+
+
+
If the ROI toolbar button is On, +pressing and dragging the left mouse button draws a Region of +Interest box. This ROI can serve two roles. One is a way to zoom. +With the ROI toolbar button On, click in the Sky View with the left +mouse button and begin to draw a box surrounding a region of +interest. When the button is released, the ROI becomes fixed into +position. To perform the zoom, press Zoom In in the tool bar. The +current size, position, and ROI are saved and the Sky View is +changed to expand the new area. The Zoom Back tool bar button then +becomes available to restore the display to its previous size and +position. The Zoom In and Zoom Back buttons work as a pair for +arbitrary +levels of undo and redo. This Zooming is implemented by actually +sliding the scales around the edges of the Sky View just as if you +had done it manually. Thus, the selected area may be rotated after +the zoom due to a change in perspective in the map projection. This +is a feature.
+
+
The other use for the ROI is available +only when an image is being display. Basic statistics are computed +for the pixels that lie within the ROI box. Also only while an image +is displayed, the left mouse button may be used to position a +Magnifying +glass; graph the pixels along an arbitrary cross sectional slice +through +the image; and compute and display high quality photometric and +astrometric information about the star nearest the cursor based on 2D +Gaussian fitting. See Image analysis.
+
+Middle button:
+
+
While the middle button is depressed, +the cursor is changed to a fleur pattern. Moving the mouse left and +right is like moving the scale at the bottom; moving it up and down +is like moving the scale at the right. This provides a simple method +to pan the display. This feature is not yet available while +displaying an image. If the Live +dragging option is turned on (see Control » Options), the +panning occurs immediately. If this is painfully slow on your system +then turn this off so the screen is only redrawn one time when the +button is released.
+
+Right +button:
+
+
If +the right button is clicked over the +Sky View, +then a popup menu will appear. If the button is clicked and +released, the menu will stay up and can be used like any other menu. +Or the button may be pressed and held while you slide the cursor to +the desired button and let go. Try both and use whichever procedure you +prefer.
+
+
The popup contains information and +controls germane to the exact position of the cursor when the button +was clicked. The entries in the popup menu vary depending on whether +the cursor was near an object or over empty sky. If the cursor is +near a object, data is shown which are exactly the same as that +which is available in the Data Table window. +If a trailed object is selected, the data applies at the +time for that position. If the cursor was not near an object, basic +information based on the location of the cursor itself is shown.
+
+
The popup also offers several control +operations, as follows. Remember, only the ones relevant to the +current situation and toolbar choices will appear.
+
+
+
    +
  • Name will show the name of the object. If alternate names +are available they will be displayed in a pullright cascade menu.
  • +
+
    +
  • Type will display a brief description of the type of +object.
    +
  • +
+
    +
  • Center will change the +Sky View pointing direction to place the given object (or location) +at the center of the field of view.
  • +
+
    +
  • Center + Zoom » is like +Center but will also zoom in or out the amount selected in the +pullright cascade menu.
    +
    +
  • +
  • Persistent Label » on +Left on Right will toggle whether a label is drawn on the left +or right side of the current object. The label will consist of the +name and/or the magnitude, depending on which options are selected +in the SkyView » Options +Labeling section. If neither are selected, the label will consist of +the name. Persistent labels are always on, that is, they are not +subject to magnitude limits, options, or object type filtering. Note +this option is maintained separately for trailed objects and for the +untrailed objects; that is, you have independent control over +labeling for a trailed object and its currently displayed object +since the latter also always appears in the trailed list. This can +be somewhat confusing for trails which begin Now since, in effect, +the first item is drawn twice (once just because it is an object +like any other, and again as a member of the set of trail history +points).
  • +
+
    +
  • Place eyepiece will cause +an eyepiece symbol to be drawn centered under the mouse location. The +eyepiece shape and size are defined in the Eyepiece Setup window, +available at Control » +Eyepieces. Both the RA-Dec and Alt-Az of the location are +saved and the one matching the Display mode is used when the +eyepiece is drawn on the Sky View. In this way eyepieces can be +fixed in either coordinate system. See Eyepieces.
    +
    +
  • +
  • Delete eyepiece will +delete the closest eyepiece covering this mouse location. The search +algorithm uses the smaller of the two dimensions of the eyepiece so +it may be necessary to get close to the center depending on the shape.
    +
    +
  • +
  • Telescope GoTo will cause +the coordinates of the cursor to be sent to the INDI telescope control +process. The command is not issued if the coordinates are below the +horizon. This button is only present if the connected process is +running. See Telescope.
  • +
+
    +
  • Add to logbook will copy +pertinent position and descriptive information about the current object +to a new entry in the Observers logbook. This +selection only appears if the logbook tool window is currently open.
    +
  • +
+
    +
  • New Photom ref only +appears if an image is being displayed, the 2D Gaussian image analysis +tool is up, and the cursor was clicked near a database object. If all +this is so, then said object is used as the new reference for +photometric comparisons, and the magnitude of the object from the +database is set as the reference for subsequent use.
  • +
+
    +
  • Show orbit... is only +present +if the selected object is a Binary system. It brings up a window +showing +the +orbit of the secondary around the primary and an ephemeris for one +revolution. See Binary Star Map for more +information.
    +
  • +
+
    +
  • Add to Favorites will add +this object to the Favorites list.
  • +
+
    +
  • Create Trail... +will bring up a window from which a trail may be easily defined, +computed and displayed. The button is labeled Change Trail if the selected +object already has a defined trail. Only one trail per object is +supported. See Trails.
  • +
+
    +
  • Track will toggle object +tracking for this object. If a trail object is chosen, the tracking +will apply to the current position of the object. See the discussion +for the Control » Tracking +toggle button for more details.
  • +
+
    +
  • Trail is only present +if the selected object has a trail defined. If it has a trail, the +toggle state indicates whether the trail is being displayed. Note +that turning off a trail does not actually discard the trail until +the next Update occurs from the Main window.
  • +
+ + +

5.2 Toolbars

+ + + + + + + + + + + +

+

+

+
The toolbars are divided into +three broad categories. Down the left are choices that effect How the +scene is portrayed, such as coordinate system, flipping and +magnitude limits. Across the top the choices effect What is +displayed, such as coordinate grids, local horizon, and the +classes of celestial objects. All of the buttons in the Left and +Top toolbars are just convenient shortcuts to functions that can +also be accessed from the Options and Filter windows available +in the Sky View Control menu.
+
+The toolbar down the right side is a little different. These +buttons share a broad common theme of Where objects or +information are located. Some also effect how the mouse operates.
+
+ +

5.3 Scale controls

+FOV
+
+
+
The vertical scale on the left side +sets the vertical field of view of the display. The horizontal field +of view is determined by the width of the window at the same scale. +The FOV can be varied in 5 minute increments from 0:05 through 180 +degrees. The buttons below offer a quick way to set the scale to +exactly +90 degrees and to resize the window (by changing the width) to 1:1 +and 2:1 Width:Height aspect ratios. When an image is loaded, an +additional button appears labeled Image. Clicking this will resize the +window to match the aspect ratio of the image. The FOV scale may also +be changed +using the keypad + and - keys. Using the key alone moves by 2%, with +Shift moves 10%.
+
+Alt / Dec
+
+
The vertical scale on the right side +sets either the center altitude or declination, depending on the +display mode. The value can be varied from -90 to +90 in increments +of 5 minutes. The buttons below presents a quick way to center the +scale at exactly 45, 0 or -45 degrees. The Alt/Dec scale may also be +changed using the keypad Up and Down arrow keys (make sure your NumLock +is off). Using the key alone moves by 2%, with Shift moves 10%.
+
+Az / RA
+
+
The horizontal scale across the bottom +sets either the center azimuth or RA, depending on the display mode. +In Alt-Az mode this sets azimuth and can be varied from 0 to 359:55 +degrees in steps of 5 minutes. In RA-Dec mode this sets Right +Ascension and can be varied from 0 to 23:59:40 hours, in steps of 20 +seconds. The Az/RA scale may also be changed using the keypad Left and +Right arrow keys (make sure your NumLock is off). Using the key alone +moves by 2%, with Shift moves 10%.
+ +

5.4 Trails

+
+

The location of any object on the Sky view may be computed at +regular intervals and displayed by setting up a sky trail. Use the Trails Setup window to select the interval, +number of steps, formatting details and which steps you would like +annotated. The trail setup window is accessed from the popup which +appears when the third mouse button is activated when the cursor is +near an object. Any number of objects may have trails.

+

The trail is created by computing the location of the object at +several intervals. Each new location will be drawn with a small mark +and connected with a line to its previous location. The trails +remain correct if the display coordinate system is changed. Trails +may be turned on or off without loss of trail information. Trail +information is discarded if a trail is turned off when a new Main +window Update is performed. If any point on a trail is selected +using the third mouse button the information displayed is as per the +object at that time. The times displayed next to trailed objects are in +accord with the setting of Preferences -> +Time zone. +Trail information is not subject to the +constraints in the Filter window, i.e., +trailed objects are always shown.

+

Note that in Alt-Az mode, each trailed location is positioned on +the display according to the sky at the current moment. But because +of diurnal motion these trails are not useful for comparison with +the background of fixed stars. Use the RA-Dec mode for that. This is +so important (and easily overlooked) that you will see a reminder +notice to this effect the first (and only) time you create and +display a trail in Alt-Az mode.

+

Finally, be sure to recompute any trails if you change any of +the preferences or circumstances in the Main window.

+
+ +

5.5 Sky View Control +menu

+This is a summary of the Sky View Control menu. Details follow.
+
+Options...
+
+
This brings up a window with several +choices effecting the way the scene is drawn. See Options.
+
+Filter...
+
+
This allows selecting the types and +magnitude ranges of objects to display. See Filter. +
+
+Print...
+
+
This allows printing the current Sky +view or saving it to a file. If an image is currently being +displayed, it will also be part of the print image. See Printing.
+
+List...
+
+
This brings up a window that allows +saving the objects currently displayed in the Sky View to a file. +See List.
+
+Horizon...
+
+
This activates the Horizon setup +window +where you can define new or load existing horizon profiles. To +actually display the Horizon profile, turn on the toggle under +Option. See Horizon.
+
+Field Stars...
+
+
This activates the Field Star setup +window. To display Field Stars, turn on the toggle under Options. +See Field stars.
+
+Favorites ...
+
+
This activates the Favorites setup +window. See Favorites.
+
+Eyepieces...
+
+
This brings up a window which allows +you to specify the shape, size, rotation and style of the next +eyepiece to be created. See Eyepieces. +Whether eyepieces are shown at all is controlled by the Control » Options » +Eyepieces option; see Options.
+
+Coordinates...
+
+
This brings up a simple dialog which +allows you to type in (or copy/paste) and convert among several +common coordinate systems used in astronomy. The coordinates may be +set from or used to repoint the Sky View. See Coordinate +converter.
+
+User annotation...

+
+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+Add to movie...
+
This selection brings up a window to allow adding the +current Sky view to a movie loop.
+
+Tracking
+
+
+
Tracking in this context refers to +whether the pointing direction of the Sky View will automatically be +changed each time an Update occurs from the Main window such that +the tracked object will remain centered on the display. The object to +be +tracked is selected by using the Track +option in its popup menu, as described elsewhere. When this toggle +button is sensitive and pushed-in it means that tracking is active for +one object. The tracked object will be marked with an × on the +display after each Update. If this toggle button is selected while it +is +sensitive, it turns tracking off. This is a convenient alternate method +to turn off object tracking without having to find the exact object +being tracked and use its popup Track control. When this toggle +button is insensitive and popped-out, it means that object tracking +is not active; it does nothing when selected while insensitive.
+
+Close:
+
+
This causes the Sky view and all +supporting windows to go away.
+ +

5.5.1 Options

+

5.5.1.1 Display mode:

+
Alt-Az
+RA-Dec
+
+
This pair selects whether the display +coordinate system is Altitude-Azimuth or Right +Ascension-Declination. While in Alt/Az mode the display is always +topocentric; while in RA/Dec mode the display coordinate system +depends on the Equatorial preference and Equinox settings in the +Main window.
+
+
+
Sphere
+Cylinder
+
+
This pair selects whether the display +is projected onto a sphere or a cylinder. The advantage of the +sphere is that it mimics the real sky. The advantage of the +cylinder is it shows the entire universe at once.
+
+

5.5.1.2 Grid Control:

+
This group of controls allows you to +specify the details of an overlay coordinate grid.
+
+Grid
+
+
Toggles the grid on or off.
+
+Auto
+
+
If on, the size of the grid steps will +be determined automatically and shown in the text fields beneath; +if it is off, then step sizes are determined from the values in +the text fields. Typing into either field then pressing Enter will also +turn off Auto and immediately display the grid with the new step +size.
+
+Alt-Az
+RA-Dec
+
+
This pair selects in which coordinate +system the grid will be drawn.
+
+Label
+
+
Selects whether the grid will be +labeled.
+
+
+

5.5.1.3 View Options:

+
Just dots
+
+
This toggle effects how stars are +shown. When the toggle is pushed in, all stars are displayed simply +as dots of various sizes. When the toggle is released, each type of +star is displayed with a unique schematic symbol. These symbols may +be reviewed from the Filter window.
+
+
Flip Left/Right
+
Flip Top/Bottom
+
+
These toggle whether the display is +shown with a flip in the left/right or the top/bottom directions, +respectively.
+
+
Equatorial plane
+
+
This toggles whether a red 3:6 dashed +line is shown along the Earth's equator projected onto the celestial +sphere. The North and South celestial poles are marked and labeled as +NCP and SCP, respectively.
+
+
+
Ecliptic plane
+
+
This toggles whether a red 2:2 dotted +line is shown along the ecliptic. The ecliptic is the plane of the +Earth's orbit or, as seen from Earth, the path of the Sun and the +approximate path of the planets across the sky. The anti-solar point +is marked with a small open circle. The Vernal and Autumnal equinoxes +and Summer and Winter solstice locations are marked and labeled as VEq, +AEq, SS and WS respectively. The North and South eclipic poles are +marked and labeled as +NEP and SEP, respectively.
+
+The +edges of umbra/penumbra of +Earth are marked with open circles. If Preferences » Equatorial +is set to Topocentric, the umbra/penumbra are projected at the current +distance of the Moon and corrected for parallax; if set to +Geocentric they are projected at infinity.
+
+
Galactic plane
+
+
This toggles whether a red 1:4 dotted +line is shown along the galactic equator. The North and South galactic +poles are marked and labeled as NGP and SGP, respecively. The galactic +center is marked and labeled as GC. The outline of the +Milky Way boundary is also shown.
+
+
Eyepieces
+
+
This toggles whether eyepieces are +drawn on the Sky view, if and when any are placed. Eyepieces are placed on the Sky view by +using the Place eyepiece +control in the popup menu activated by the right mouse button. The +shape and style of eyepieces is defined in the Control » Eyepieces +window. Eyepieces are only drawn if they fit entirely within the Sky +View. This selection is automatically activated when an eyepiece is +placed.
+
+
Magnitude key
+
+
This toggles whether to display a +chart +in the lower left corner showing the correspondence between dot size +and star magnitude. The scale is automatically turned off each time +an image is first displayed.
+
+
Compass rose
+
+
This toggles whether two symbols to +indicate the cardinal directions at the center of the Sky View in +each Display mode are drawn in the lower right corner. The symbol on +the right always shows the current mode, the symbol to its left the +opposite mode. The one labeled with Z and R indicates +the +local horizontal directions toward the Zenith and toward the Right; the +one labeled with N and W indicates equatorial North and +West. The symbols are not drawn near their respective poles.
+
+
Auto magnitude
+
+
When this toggle is active, the +faintest magnitudes and dot step size will automatically be set to +something reasonable based on the field of view. This option is +automatically turned on whenever the FOV changes for any reason, +unless it was turned off manually. Note that initial resource values +for faintest magnitudes and dot step size will not be honored unless +the +initial resource value for automag is also off.
+
+
Field Stars
+
+
This toggles whether Field stars are automatically loaded and +displayed if the position, field of view, limiting magnitude or time +changes significantly. This selection turns itself off if any +difficulties ever arise in retrieving field stars.
+
+
Live dragging
+
+
This toggles whether the graphics are +redrawn in real time as the various scale controls are being slid, +or whether the graphics are not redrawn until the mouse is released. +What works best for you depends on the speed of the computer, display +and data bandwidth. If the system is fast enough, turning this on can +produce dramatic results.
+
+
Horizon map
+
+
This toggles whether to display the +local horizon profile on the Sky View and +whether objects below the horizon are drawn. The profile +linearly interpolates between points in the defining file. See Horizon.
+
+
Clipping
+
+
This toggles whether objects +which are below the horizon are drawn. This has no effect if no +horizon is displayed.
+
+

5.5.1.4 Constellation:
+

+
File name
+
+
+
This drop-down selection allows you to +select the file that defines constellation figures. The files supplied +with XEphem are HAReyfigs.csf and classicfigs.csf to define the figures +defined by H. A. Rey or the classic definitions, respectively. The +files shown for possible selection are those files ending with the .csf +suffix in the Shared and Private directories.
+
+The definition file must contain exactly one figure for each of the 89 +constellations. Leading white space, blank lines and lines beginning +with # are ignored. Each figure definition begins with a line +containing just its name followed by one or more lines of the form:
+    drawcode ra dec [comment]
+where
+    drawcode is a numeric value indicating a drawing +instruction as follows:
+        0 move to ra dec
+        1 draw solid line to ra dec
+        2 draw dashed line to ra dec
+    ra is decimal hours or sexigesimal h:m:s
+    dec is decimal degrees or sexigesimal d:m:s
+    the remainder of the line is ignored and may be any +comments, typical is the name of a star being drawn to.
+
+
+
+
Figures
+Boundaries
+
+
+
This pair controls whether to show +constellation figures and/or constellation boundaries.
+
+
+
Full Names
+
Abbreviations
+
+
This radio pair controls whether and +how +constellation names are shown. The choices are full names, their +3-letter abbreviations or neither.
+

5.5.1.5 Labeling:

+
This portion controls labeling +options. +The sliders select how many of the brightest objects to label in +each of four categories. The count ranges from 0 on the left to All +on the right.
+
+The label itself may consist of the Name or Magnitude or both, +depending on the state of the two buttons in the columns marked N +and M to the left of each scale. If Names and Magnitudes are both +turned on then the magnitude is drawn to the right of the name +surrounded by parentheses. Magnitudes are always drawn to the +nearest 1/10 with the decimal point removed.
+
+Trailed entries and objects marked for Persistent Label do not +contribute towards the brightest count.
+
+ +

5.5.2 Filter

+
+This window lists all classes of +objects +supported by XEphem. Using the Filter window, you may select which +classes of objects are displayed on the Sky view window. For +reference, the Filter window also contains the schematic symbol for +each type of object, and its code when used in a database file. The +symbol displayed for each class of object is that which will be used to +represent the object in the Sky view, unless Control » Options » Just +dots is selected. Note +that the symbol used to draw an Elliptical object in the Sky View is +the same as that for objects of type Hyperbolic and Parabolic if the +name of the object begins with "C/" (presumed to denote a comet).
+
+Three scales near the bottom of the Filter window control the faintest +magnitude limit to be displayed for Stars, Solar system and Deep sky +objects. Note that trails and persistent labels are not subject to the +faint magnitude limits.
+
+The diameter of the symbol drawn in the Sky View is the larger of the +object's actual size at the current window scale (if a size is +specified in the database entry for the object) or a size that is +proportional to the difference between the object's magnitude and the +current faintest magnitude setting.
+
+The fourth scale in the lower left selects the number of magnitudes +binned in each dot size. Values larger than 1 are helpful for showing +very large ranges of magnitudes.
+
+Several push buttons appear across the bottom of the Filter window +which have the usual effects: Selecting Apply +updates the Sky display according to the desired selection. Selecting Ok does the same thing but also +closes the Filter window. All +turns on all types. Toggle +swaps +which filters and Or and Off. Reset +will return the state of all Filter controls to their state when this +window first appeared or the most recent Apply.
+

5.5.3 Print

+This allows printing the current Sky view or saving it to a file. If +an image is currently being displayed, it will also be part of the +print image. See Printing.
+
+ +

5.5.4 List

+

+
+
+This window lists, sorts and writes the objects currently displayed +in the Sky View to a file. Basing the list on the Sky View allows the +selection criteria to use the full power of the Options and Filters +controls as well as the region of the sky as defined by the center and +field of view. If you wish to include all objects without regard to +position, use the Cylindrical project mode, set RA-Dec, FOV 180, Dec 0 +and resize the Sky View window to show the entire universe.
+
+At the top, the format of the file created may be specified in either +of two formats. The .edb format saves the objects in the XEphem +catalog format. This is handy for using the XEphem filtering options +to create custom catalogs. The text format is a columnar listing. The +columns that are printed are the same as those currently selected in +the Data Table, printed to the precision specified in the Preferences. A convenient button is +provided to bring up the Date Table setup window. Note that a column +need not be printed to be used for sorting, although it would seem +unusual to do so.
+
+The center section lists several fields that may used for sorting the +list. Pick each field in the order you wish to sort the list. If you +wish to make a change to the order, you may Undo one at a time back to +the beginning or Clear the entire sequence and begin again.
+
+The bottom section is a text field which (will) show the results of +the sort. This text field is fully editable, so you may delete specific +objects, add comments and so on as desired. N.B. If you have chosen +the .edb format, no checks are made that your edits have made the +format illegal.
+
+Pressing the right mouse button over the text field will bring up a +popup menu, if a valid object name is found at the beginning of the +line under the cursor. This popup has buttons to Delete the object on +the current line from the list and Mark the object on the Sky View.
+
+Across the bottom are several controls.
+
+
Save
+
+
This writes the text field exactly as +it now appears to the file named at the right of the format +checked at the top. N.B. No check is made that the format and the +extension agree.
+
+Sort
+
+
This rebuilds the list according to +the +current settings. Use this after changing something in the Sky +View, or after changing the format or sort settings here.
+
+
+

5.5.5 Horizon

+ XEphem +allows you to create a file describing your local horizon. This window +gives you two ways to define your local horizon, and a handy way to +edit and save a horizon description. +One way to define a horizon is just to specify one altitude that will +be used +at all azimuths. To use this method, type the desired altitude in the +field provided, then type Enter or toggle the button labeled Constant On.
+
+The other way is to draw your actual horizon profile interactively as +follows:
+
    +
  1. Set the Sky View to display Alt-Az mode;
  2. +
  3. set Az to 0, Alt to 90, FOV to 180 so you see your entire sky;
  4. +
  5. click on Edit with mouse;
  6. +
  7. draw your horizon with the mouse;
  8. +
  9. when finished turn Edit with mouse back off;
    +
  10. +
  11. enter a file name;
  12. +
  13. click Save.
    +
  14. +
+Editing can in fact be performed in any mode but the above setup is the +most natural. Reload the profile later using Load. +As many profiles can be stored as desired. For example, if you +observe from several sites, you can have a profile for each.
+
File format
+
+ The Horizon profile file +format (suffix .hzn) and its use by +XEphem are defined as follows:
+
+
+
    +
  • Each line should contain exactly two numbers separated by +spaces.
  • +
  • The first number is the azimuth, expressed as degrees East of +North.
  • +
  • Azimuth values range from 0 up to 360 degrees. Any values +outside +this range have 360 added or subtracted until they fall in this +range.
  • +
  • The lines need not be sorted by Azimuth, although they will be +sorted when used; thus the horizon map can never cross itself.
  • +
  • If the file does not include the full range of Azimuths, the +end points will be connected automatically.
  • +
  • It is ok to specify just one point (at any Azimuth). This will +result in a flat horizon all the way around at the specified +Altitude. This is functionally equivalent to using the Constant +method.
  • +
  • The second number is degrees above horizontal.
  • +
  • XEphem linearly interpolates as necessary when drawing between +the Az and Alt values in the file.
  • +
  • Lines of any other form are ignored.
  • +
+
+

5.5.6 Field Stars

+
This activates the Field Star setup +window. To display Field Stars, turn on the toggle under Options. +See Field stars.
+

5.5.7 Favorites

+
This activates the Favorites setup +window. See Favorites.
+
+ +

5.5.8 Eyepieces

+This +window allows you to specify the shape, rotation angle, size and style +of the next eyepiece marker to be placed in the Sky View. These +markers are useful to show the view through your eyepiece, simulate +the view of a CCD camera, or as simple annotation markers for any +desired purpose. Symbology on the map will show through the eyepieces, +even when they are specified as solid. +
+
+Note that this window controls the style of the next eyepiece to be +created. To actually place an eyepiece, place the mouse over the Sky +view where you want the center to be located and press the right +button. A popup menu will appear. Slide down the menu and release over Place eyepiece. When an eyepieces is +place on the sky, both the RA-Dec and Alt-Az of the location are saved +and the set +matching the Display mode is used when the eyepiece is drawn on the +Sky View. In this way eyepieces are fixed in both coordinate systems.
+
+Set next eyepiece ...
+
Across the top are three sliders which set the Width, Height and Angle of the next eyepiece. Width +and Height are shown in units of degrees:minutes. +The interpretation of the rotation angle depends on the +current display mode of the Sky View at the moment a new eyepiece is +placed. When in Alt/Az mode, the angle is away from a line through the +Zenith, and when in RA/Dec mode the angle is away from the North +Celestial Pole. In both cases, the units are degrees. +
+
+Below them is a toggle that will Lock +the W and H sliders so they move together. This makes it easy to +create eyepiece shapes that are perfectly round or square.
+
+As a special convenience for and in deference to, there is a toggle +which will create three open circles spaced to match the view through +the Telrad unit power finder. +The circles are 0.5, 2 and 4 degrees in diameter. As long as this +special toggle is pushed in, the other controls are made insensitive +to avoid interfering with the preset values for the Telrad.
+
+Next below are pairs of toggle buttons to select the Shape and Style +of the next eyepiece. Elliptical +and Rectangular refer to +circles +and squares. Solid and Outline refer to whether the shape +will be filled in or just drawn as a border.
+
+Field-of-View Calculators
+
In the central portion of the Eyepiece window are two calculators that can be used to +compute the sky angle of an optical system in two ways. The first +method uses the net focal length of the entire optical system and a +linear size on the focal plane. The technique is handy for CCD users +who want to find the sky angle subtended by each pixel or the entire +detector. Another good use of this form is for photographers using +film to find the amount of sky that will fit on their film. To cover +this wide range of applications, the measures may be specified in any +of several common units by adding the appropriate suffix. Default +units are shown in parentheses.
+
+The second calculator uses the apparent field of view while looking +into an eyepiece and divides this by the magnification, which in turn +is found from the ratio of focal lengths for the primary mirror and +the eyepiece. Typical eyepieces provide about 45 degrees apparent +fields of view, and some premium ones can go to 60 degrees or more. +After using either method, the resulting sky angle can be assigned to +the Width or Height scale for the next eyepiece by using the Set W and +H buttons to the right.
+
+Saving Eyepiece Definitions
+
This portion of the Eyepieces window allows you to Add +the current eyepiece settings to a list of favorites. A simple +name is chosen automatically but you may change this to be more +meaningful to you. Each such eyepiece may be Deleted from the set or put to Use by using the buttons on the +left. To the right of each eyepiece is a reminder of its width, height +and a code letter for its shape and size.
+
+The buttons below the table of favorite eyepieces allow you to Save +and later Load the table to a file. These files have the +extension .epd. When saving, the new file is always created in +the Private directory. When +loading, files with this suffix are first checked for in the Private +directory and if +not found in the Shared directory. The suffix is automatically added if +not entered in the file name field. The file named in the Save field is +also the file that is automatically loaded when XEphem starts. This +file name can be saved in the Preferences » Save window in +the Skyview -- Eyepieces section as EyePDefFile.
+
+Saving Sky View Eyepiece Placements
+
+This portion of the Eyepieces window allows you to Save and +later Load the set of eyepieces currently defined on the Sky +View to a file. These files have the extension .epp. When +saving, the new file is always created in +the Private directory. When +loading, files with this suffix are first checked for in the Private +directory and if +not found in the Shared directory. The suffix is automatically added if +not entered in the file name field. The file named in the Save field is +also the file that is automatically loaded when XEphem starts. This +file name can be saved in the Preferences » Save window in +the Skyview -- Eyepieces section as EyePPosFile.
+
+Delete all placed eyepieces
+
+
After at least one eyepiece has been placed in the Sky +View, a button +at the bottom of this window will become available to permanently Delete all placed eyepieces +currently anywhere on the Sky View. You may also delete them +individually from the Sky View from the right-click popup or if you +just want to temporarily turn all Eyepieces off and back on later, use +the Eyepieces control in the Control +» Options window.
+
+Close
+
Across the bottom are buttons to Close +the window and Help to get +more +information. Closing the window has no effect on eyepieces already +placed in the Sky View.
+
+

5.5.9 Coordinates

+
This brings up a simple dialog which +allows you to type in (or copy/paste) and convert among several +common coordinate systems used in astronomy. The coordinates may be +set from or used to repoint the Sky View. See Coordinate +converter.
+

5.5.10 User +annotation

+
This selection brings up a window +which +allows text and lines to be drawn over the image. See Annotation.
+
+ +

5.6 Sky View Images menu

+The Images menu can bring up three windows.
+
+Load and save...
+
+
This window controls loading local +FITS +files, downloading them from the Net, and saving them locally.
+
+Analysis tools...

+
+
This window provides a variety of +image +analysis and processing tools. Settings made in this window can also +effect what the mouse does in the Sky View when an image is being +displayed.
+
+WCS Solver...
+
+
This window provides a means to add +World Coordinate System headers to a FITS file. With WCS, XEphem +(and many other programs) can compute the RA and Dec of each pixel +in the file, not just its X and Y pixel coordinates. This capability +opens the door to many interesting possibilities. The algorithm +performs +a pattern match between the star-like artifacts in the image and the +GSC +and/or USNO star catalogs.
+ +

5.6.1 Load and Save FITS +images
+

+ This +window allows you to display a FITS file in the Sky View window. You +may display local files or download the Digital Sky Survey directly +from the Internet. The image is resized to match the size of the Sky +View window. Once an image is displayed, all graphical features of the +Sky View are available, such as grids and labeling objects loaded in +the XEphem database. Most of these features require that WCS headers +be present in the image. XEphem can help create these using the WCS Solver tool.
+
+Resizing the window will change the size of the scrolled text  +area displaying the FITS header fields.
+
+Open FITS file
+
+
Clicking on the option menu will +display a list of all FITS files in the Private +and Shared directories in a popup menu. All files with the name +extension .fts, .fits, or .fit will be included. Clicking on a file in +the popup list will display it.
+
+

+
+Download
+
+
This button heads up the section for +downloading Digital Sky Survey images from the Internet You may +choose generations 1 and 2, and either Red or Blue filters for the +latter. The DSS is maintained by the Space Telescope Science +Institute, STScI, in the United States or the European Southern +Observatory, ESO, research facility in Germany. The image data from +either site is identical, so choosing which to use depends only on +availability and whichever is faster for you.
+
+The size and position of the image are that of the current Sky View +settings, but the size is limited to 30 arc minutes by agreement +with each institution. Before attempting a download, use the File » Network setup +window off the Main menubar to configure your Internet connection.
+
+Clicking Display will begin the download. A progress meter will display +remaining time. A Stop window is provided if you care to abandon the +effort. The header of the http server response message is in the +Main File » Syetem Log +window; check there if an error occurs.
+
+FITS Header:
+
+
This section consists mainly of a +scrolled text area which shows each field in the FITS header.
+
+If the +header contains any of the fields EPOCH, JD or DATE-OBS then the +date of the observation is displayed above the header. The button +labeled Set time will also +come +alive which allows setting the main XEphem time and date to this +value. This is handy when checking for asteroids, comets or using +the proper motion catalogs with an image. EPOCH must be a decimal year; +JD must be a decimal Julian Date; or DATE-OBS must be either in ISO +8601 +format (YYYY-MM-DDTHH:MM:SS),  YYYY[/-]MM[/-]DD, or MM[/-]DD[/-]YY +where YY is assumed to be the number of years since 2000 if less than +50 otherwise years since 1900.
+
+In order to be displayed by XEphem, the header in a FITS file must +contain at least the mandatory fields SIMPLE, BITPIX, NAXIS, NAXIS1, +NAXIS2 and END. Only files with BITPIX 8 or 16 and NAXIS 2 are +supported. Both DSS PLATE headers and the traditional World +Coordinate System fields (CTYPE, CROTA, CRPIX, CDELT and CRVAL, 1 and +2) are supported. BSCALE and BZERO are not supported at this time.
+
+Note: XEphem treats the 16 +bit pixels as unsigned values from 0 through 65535, unlike the +standard which specifies they be treated as signed with values from +-32768 through 32767. XEphem assigns the coordinate [0,0] to be the +center of the first pixel in the file, unlike the standard which +specifies this position be at coordinate [1,1].
+
+
+Save as:
+
+
The image currently displayed, if any, +may be saved to disk as a FITS file. The file name is specified in +the text field provided. If Auto +name is turned on, a filename is automatically created derived +from the RA and Dec of the center of the image. An attempt is made to +preserve any existing directory and filename extensions, such that +the filename is constructed between the right-most '/' and the +right-most '.' characters, if possible. You may also type in your +own name.
+
+When an image is saved, its current contrast settings are added to +the FITS headers. If these fields are present when the file is +opened these settings will automatically be put back into effect. +See Contrast.
+
+
+File +watch:
+
+
This feature allows XEphem to +automatically discover and display FITS files that were created by +another program. When Watch is +turned on, XEphem will try to open the watch +file named in the text field provided here approximately once each +second and display the file named on the first line of the watch file. If successful XEphem +removes the watch file as a +means to handshake the image has been displayed.
+
+With this feature and the popularity of various networked file systems +(NFS, Samba, etc) it is quite reasonable to display images with +XEphem that were captured on an entirely different computer, or on +the same computer running camera control software unrelated to +XEphem.
+
+A further note to implementors: XEphem also supports the watch file being a fifo. In this +case, XEphem will open the fifo and block trying to read a path name up +to the first newline. There is no handshake in this case. The fifo +approach is actually a bit more efficient than the file approach +because no polling is required.
+
+ +

5.6.2 Image Analysis Tools

+The Sky Image Tools window offers several functions with which to +analyze the FITS file showing in the Sky View. There are a few sample +FITS files included with which to practice using the tools.
+
+The window is divided into several separate sections, each of which +can be opened and closed as desired. Always present at the top of the +window is a block of basic information about the image. The statistics +ignore a border of 8 pixels. The information shown is: file name; +width and height; value and location of brightest pixel; value of +dimmest pixel; mean, median and standard deviation of all pixels.
+
+Note two important differences +between XEphem and FITS: 1) XEphem treats the 16 bit image pixels as +unsigned values from 0 through 65535, unlike the FITS standard which +specifies they be treated as signed with values from -32768 through +32767. 2) XEphem image coordinates are one less than the FITS +standard. FITS defines the center of the first pixel in the file to be +at [1,1] while XEphem defines it to be at [0,0]. +

5.6.2.1 Brightness and +Contrast

+This +section controls the mapping between image pixels and screen colors. +It does not modify image pixels in any way.
+
+This section may +also +be opened using the button in the left Sky View toolbar that looks like +a circle filled with black on the right half.
+
+The top nine buttons offer shortcuts to set or adjust the image +appearance according to predefined algorithms.
+
+Reverse
+
+
toggles between assigning brightness +in +direct or inverse proportion to image pixel values.
+
+Narrow, Wide and Full
+
+
correspond to high, medium and low +contrast settings. These are implemented using increasingly broader +assignments of brightness about the mean pixel value in the image. +Narrow assigns full black and white to the mean ± 1/3 Std Dev. +Wide assigns black to mean - 1*StdDev and white to mean + 2*StdDev. +Full +assigns black to the smallest pixel and white to the largest pixel +in the entire image.
+
+Sharper and Duller
+
+
change contrast by changing the slope +of the pixel-to-brightness map to be steeper or flatter.
+
+Brighter and Darker
+
+
change the brightness by shifting the +center of the pixel-to-brightness map to higher or lower pixel +values.
+
+Nominal
+
+
ignores the statistical distribution +of +pixel values and sets the map entirely on the basis of the minimum +and maximum pixel.
+
+Low and Hi
+
+
are text fields in which one may type +(or paste) the exact pixel values to be assigned to black and white. +A new value takes effect when Enter is pressed. These fields also +always show the current settings installed by any of the shortcuts.
+
+Gammas
+
+
is set using the scale just above the +graph. The mapping from pixels to display colors is a power +function. Values of gamma less than 1 emphasize dark pixels, gamma +values greater than 1 emphasize bright pixels.
+
+The graph contains two +overlaid +plots. The horizontal axis for each plot is the same: the full range +of pixel values within the image, with lowest on the left. The orange line is a histogram of the +number of pixels with each value. The yellow +line indicates the brightness at which each pixel value will be +displayed on the screen. You may control the black and white limits of +the mapping function from the graph by dragging the red arrows at the top of the +diagram. +You may control gamma by sliding the scale ust above the graph.
+
+When XEphem saves an image, it adds three fields to the FITS header +to save the current contrast settings. When it loads an image, if +these fields are present they are used to restore the same display +contrast. If these fields are not present, the Wide setting is used. +These fields are: XELOGLUT: the pixel value assigned to black +XEHIGLUT: the pixel value assigned to white XEGAMMA: the value of +Gamma. +

5.6.2.2 Cross section Slice

+Opening +this section lets you use the mouse to drag a line across the image +and display the pixels along that line. The graph is labeled +vertically in pixel value, horizontally as pixel distance from the +starting point. The line begins where the left mouse button +is first depressed.
+
+
Full pixel range toggle when set scales the vertical +scale to the full range of pixel values in the image, else scales to +the pixel range from Lo to Hi as defined in the +Brightness and Contrast section.
+
+
+This section may +also +be opened using the button in the right Sky View toolbar that looks +like a slice of bread.
+ +

5.6.2.3 Magnifying Glass

+This +section gives control over and shows information about the pixels in +the magnifying glass.
+
+Click and hold the left mouse button as you roam over the image and +you will see an expanded view of the pixels. The Size and Magnifying power of the glass can be +set as desired using the two rows of toggle buttons. Note the numbers +on these buttons are in units of screen pixels, not image pixels. So +for example if you zoom in on an area the magnifying glass will expand +it correspondingly further.
+
+While roaming you +might want to turn on the Jump to Max button on the right hand toolbar. +It is the one with the bright dot in the center to which a meandering +arrow finally points. When this button is on, XEphem will begin at the +pixel under the real cursor and walk the gradient to the brightest +connected pixel. All processing proceeds as though this brightest +pixel is where the cursor really pointed.
+
+Statistics about the image pixels under the glass are shown in the +table. All values are in pixels, all locations are in image +coordinates. +Fractional image coordinates occur because the image is resized to fit +the window which results in rational values for the scale factors. If +you zoom in enough to clearly see individual image pixels, you can see +that the coordinate system for image pixels puts the integral position +in the center.
+
+The statistics in the table include:
+
+
    +
  • Size of the area under the glass;
  • +
  • Value and location of the center;
  • +
  • Value and location of the largest pixel under the glass;
  • +
  • Value of the minimum pixel;
  • +
  • Mean value of all glass pixels;
  • +
  • Median value of all glass pixels;
  • +
  • One Standard Deviation of the pixel values about the mean.
  • +
+
+
+Below the statistics box you can optionally open windows that plot +the row or column through the center of the glass. The horizontal axis +of each graph is in image pixels, the vertical is in image pixel +values.
+
+This section may +also +be opened using the button in the right Sky View toolbar that looks +like a box containing a few stars much larger than the others. +However, since the glass is useful in its own right, the toolbar +button only opens this section if the Image Tools window is already +up. Similarly, closing this section does not also turn off the toolbar +button.
+ +

5.6.2.4 Region of Interest

+This +section lets you use the mouse to draw a rectangle over the image and +get statistics about the pixels within this region. The area is the +same as that which can be used to specify a region in which to zoom.
+
+This section may also +be opened by the right toolbar button that looks like a boxdrawn around +a galaxy.
+
+The following statistics about the image pixels in the ROI are shown +in the table:
+
    +
  • Length of the diagonal;
  • +
  • Width and height of the region;
  • +
  • Value and location of the cursor as you draw the ROI;
  • +
  • Value and location of the largest pixel in the ROI;
  • +
  • Value of the minimum pixel;
  • +
  • Mean value of all ROI pixels;
  • +
  • Median value of all ROI pixels;
  • +
  • One Standard Deviation of the pixel values about the mean.
  • +
+
+
+
+ +

5.6.2.5 2D Gaussian +Measurements

+This +section is based on results of modeling stars with a 2 dimensional +Gaussian.
+
+The model finds the coefficients in the following function of pixel +coordinates x and y that minimizes the Chi square error with each +pixel in an area:
+
+
g(x,y) += B + A*exp(-0.5*(sqr((x-mx)/sx) + sqr((y-my)/sy)))
+
+where
+
mx is the row coordinate from some +reference position,
+my is the same for a column,
+sx is the standard deviation of the pixel values along a row,
+sy is the same for a column,
+A is the peak height of function ( = g(xm,ym) - g(inf,inf)),
+B is the mean of the row and column pixels.
+
+[mx,my] is then taken to be the location of the star, the volume as +proportional to A*sx*sy as a measure of its magnitude, and B a measure +of the mean noise level of the surrounding pixels.
+
+In practice, we find this method converges quickly and yields +positional results accurate to .2 pixel or so. Magnitudes and their +error estimates depend strongly on whether the image was ever +compressed, proper image correction, linearity of ADU counts with +brightness, and other factors. When these factors are properly +addressed, magnitude ratios seem to be good to .02 mag or so over +differences of several magnitudes.
+
+The text box shows the results of this fitting process on the image +pixels that are centered on the cursor and lie within the area defined +by the magnifying glass settings (whether or not the glass is actually +turned on). The numbers report the following:
+
    +
  • Relative magnitude difference and error estimate between the +current star and the reference star;
  • +
  • Position of the star, in image coordinates and in RA/Dec if WCS +header fields are present;
  • +
  • Full-width-half-max of the star in each dimension in pixels, +and in arc seconds if the image scale is known from header fields +CDELT1 and CDELT2;
  • +
  • The pixel value representative of the noise level base in the +area (B in the above equation);
  • +
  • The pixel value of the peak of the Gaussian fit (A+B in the +equation).
  • +
+If there is a number in the Reference +Mag text field, it is simply added to the magnitude reported. +The idea is to set this to the magnitude of a star (known by +independent means) and use that star as the reference for subsequent +comparison. Since the reference is now calibrated, magnitudes reported +will be absolute not just relative. Except under special situations, +the reference star will not be applicable to other images, although +XEphem does not prevent you from doing this.
+
+The reference star can be established in several ways.
+
+
One way is automatic in the sense that +if there is no current reference, the first star that is measured is +also automatically given the role as reference for subsequent +comparisons.
+
+
After any star has been measured, it +can be made the reference by clicking on New. Clicking Mark will draw a small circle in +the image around the current reference star in case you lose track +of it.
+
+
Another way to set the reference is to +use a catalog star. This is only possible, of course, if the header +includes WCS coordinates. Right-click on the catalog star in the Sky +View and choose the entry New Photom +ref. This will perform the Gaussian fit on the pixels at +that stars location in the image, and assign the Reference Magnitude +to the catalog value.
+
+This section of the +Sky image tools window can be opened by clicking on the button in the +right toolbar that looks like a Gaussian graph (or perhaps a large +nose).
+
+While measuring stars +you might want to turn on the Jump to Max button on the right hand +toolbar too. It is the one with the bright dot in the center to which +a meandering arrow finally points. When this button is on, XEphem will +begin at the pixel under the real cursor and walk the gradient to the +brightest connected pixel. All processing proceeds as though this +brightest pixel is where the cursor really pointed.
+

5.6.3 Registration
+

+This window lets you register, or align, one or more images to a +reference image. The motivation for this feature is to make a +movie of a moving object that has been captured in several images. +Load the reference image into a new Movie then +load each additional image after it is aligned.
+
+The alignment algorithm requires two stars that appear in each image. +Using two stars is the most general method of defining a 2D coordinate +system and is used for its robust performance. It is possible to use +just one star, but the technique requires the software to make +assumptions about matching features in the image. We feel the slightly +larger burden of defining two stars is worth the results. When choosing +the two reference stars, select stars that are well separated in both +rows +and columns, isolated from neighboring stars, moderately bright and +well +formed.
+
+To begin, load the reference image into Sky View and adjust the +contrast or other visual effects as desired. Then click the first +toggle in the window. The cursor will change over the Sky View to a +small cross. Place the cursor over one reference star and click; you +will see the Gaussian centroid image coordinates of the star +appear in the registration window for Star 1. Now choose a second +reference star and click again. You will see its coordinates appear for +Star 2, the cursor will revert back to the original style and the +toggle button will pop back out. If you ever want to change the +reference image choose different reference stars, you can turn on the +top +toggle again at any time and restart the procedure. This is a good time +to +delete any frames currently in the Movie tool and add the reference +image to form the first frame of a movie. +
+
+Now you can load a second image. Again, adjust contrast and so on as +desired. Click on the second toggle in the registration window and +proceed as before to click on the same two stars in the second +image. Be sure to click on the two stars in the same order, so that the +first star clicked when defining the reference stars is also the first +star clicked when working on the second image.
+
+As soon as the second star is clicked on the second image, the image +will be transformed using translation, scaling and rotation in such a +way as to align the two stars with their location in the reference +image. The contrast settings are preserved for you even though the +image +pixel statistics have changed due to the addition of new black pixels +where +the images do not overlap and the loss of pixels that do not fit over +the +reference image. If the results look useful, add it to the Movie.
+
+You may repeat the process of aligning additional images with the +reference image for as many images you like.
+
+Note that while either toggle is turned on in the registration window, +the other image analysis tools are temporarily disabled. Note also that +the algorithm used to transform the image to match the reference image +is +designed primarily for speed. The stars in the transformed image are a +little +distorted and we recommend you not use these images for precise +photometry or +astrometry.
+
+ +

5.6.4 WCS Solver

+This window controls a pattern matching +algorithm that attempts to +register the star-like artifacts in a FITS image with the entries in +any or all of the XEphem Field Star catalogs. See Field stars.
+
+
The solver will be invoked automatically whenever a FITS file is +loaded whose header includes all the seed fields but does not already +have a WCS solution.
+
+
+
+
Rows +1-5: setting seed values
+
+
The first five rows seed the search +with approximate coordinates for the center of the image, the scale +of the image pixels in each direction, and a possible rotation. The +center must be known to within about one half the smaller of the image +width and height. The scale must be known to within about 10%. The +rotation seed need not be accurate at all, but better estimates will +result in vastly faster solution times. Indeed, better values for any +field will improve the solution speed and also reduce the chances of a +false solution.
+
+
Each of the fields may be typed or +pasted into the fields down the left. But often FITS files will +include fields which contain information suitable for this purpose. +In the column down the right you may enter the names of such fields. +Clicking the Use field button +in +a row will read the value from the header field named on the right and +install it into the field on the left of the same row, possibly after +some reformatting and change of units. Certainly not all forms are +supported so please take care to check for proper units and +formatting yourself. The default fields supplied are fairly common +and are known to work if you are lucky enough to have them in your +images.
+
+
Row +6: scanning the image for star-like artifacts
+
+
The next row contains two parameters +which control the algorithm that scans an image to extract what seem +to be reasonable candidates for stars, that presumably will also be +in a Field star catalog.
+
+
Burned +out: This parameter sets the largest pixel value (in the +range 0 .. 65535) a star may contain. Groups of pixels being +considered as a candidate star by the algorithm will immediately +reject the entire group if even one pixel is higher than this. The +idea here is that if a star is so bright as to be even a little burned +out, its centroided position is likely to be worse than not using it +at all. If you feel otherwise, set this to 65535 and no groups will +be rejected (at least for this reason).
+
+
S/N +ratio: This parameter sets the minimum signal-to-noise ratio +of a candidate star. The algorithm breaks an image into several +smaller regions and computes several statistics of all the pixels in +that region. In order for a group of pixels to be considered a star, +its +brightest pixel must be at least the median plus this parameter +multiplied by the standard deviation computed from the statistics of +the region in which it is located. Basically, the larger this +number, the more distinct the star must be.
+
+
Row +7: Setting realistic search goals
+
+
The bottom row contains two parameters +that effect the goal of the search algorithm.
+
+Max pix acc: This parameter +tells the search algorithm not to expect position information for +the star-like artifacts extracted from an image to be any better +than this fraction of a pixel.
+
+Min pix acc: This is the +worst pixel distance acceptable between each image star and its +closest catalog star.
+
+
Go +
+
+
Commences the search for a solution +using the image currently in the Sky View and the parameters in +the various fields above. If a solution is found, each star used +in the solution will be circled and statistics about the quality +of the solution will be presented. The WCS fields that +characterize the solution are written into the FITS header. If you like +the solution, Save the +image and this solution will be saved with the image and searching +will not be needed next time.
+
+
Mark stars
+
+
+
Clicking this button will draw a small +circle around each group of pixels in the image the algorithm +considers to be a star. Use this to choose good values for Burned +out and S/N ratio.
+
+
+WCS Solver Tutorial
+

+
The first step is to supply suitable seeds values for the +center of the image, the image scale and any suspected rotation. If the +FITS image header contains fields with these values, enter the names of +the fields in the spaces provided and they will be extracted +automatically when the image is loaded. If the header does not contain +this information, or the units are not correct, then seed values must +be entered manually in the fields provided. Note that the pixel scale +values must have the correct sign since the algorithm automatically +takes into account rotation but not flipping.
+
+The second step is to set the SNR value so that Marking stars finds +most of the brightest and well-formed star-like objects in the image, +without also finding bogus star candidates. Also, if the image was over +exposed so that very bright stars are washed out, eliminate these by +reducing the value for burned out stars.
+
+Once good stars are being marked, the last step is to indicate how +accurately star centroids can be determined and how accurate any +solution is likely to be using the bottom two fields of the form.
+
+Another issue is to use an appropriate field star catalog. More +stars  is not  necessarily better. For example, the GSC 2.2 +goes to mag 18 but also tends to have more bogus entries near very +bright stars. If your image contains a very bright star, take note of +the field stars that are near it; you might do better with the GSC 1.2 +than 2.2 catalogs.
+
+After adjusting any field, click Go. If a solution is found, the stars +used in the fit will be marked and statistics about the fit will be +displayed.
+
+This algorithm has proven to be very robust over the years. With a +little practice it can usually be made to work quite well.
+
+
+
+

5.7 Sky View Favorites +menu

+This brings up a menu of the current Favorite objects. Clicking an +entry will place a cross-hair over the object and activate the same +popup menu +that would appear if the object had been right-clicked over the map. +If the object is not +within the field of view the Sky View will be moved so the object is +centered. If Alt-Az mode is currently active and the object is below +the horizon, the view will not be changed and a message will suggest +the mode first be changed to RA-Dec. +Favorites may be managed from the Control » Favorites +window. See Favorites.
+
+ +

5.8 Sky View Telescope +menu

+The Telescope menu in Sky View +allows you to connect to and control a telescope and, if using the INDI +protocol, any other instrumentation whatsoever. The control can be +performed via a simple fifo connection, or a much more flexible INDI +interface. For a complete description of the INDI protocol, please +download the reference specification from http://www.clearskyinstitute.com/INDI/INDI.pdf. +Here we only describe the INDI configuration window, the INDI +control panel, testing the INDI system using the sample drivers, and +finally the  simple fifo interface.
+
+Regardless of which means is used to send a new position to a +telescope, the menu contains a history list of targets. Clicking on one +of these will send that target again. A button is available to erase +the list at any time.
+

5.8.1 INDI Test Drivers

+Beneath the source directory of XEphem is a directory tools/indi. +This contains several sample INDI drivers that together simulate an +entire observatory. Please read the README and follow the instructions +to build and run the sample drivers. This will allow you to perform a +live test of XEphem's INDI windows to be described next.
+

5.8.2 INDI Configuration +window

+The top row of this window contains two text fields by +which you to +specify the TCP/IP host and port name to which a connection is to be +made to an INDI driver or server. The default values are suitable for +running the test drivers mentioned above.
+
+The remaining rows define the mapping between internal XEphem +functionality and the external INDI devices. All information flows over +the INDI protocol based on Properties. Each property is defined as a +Device, a Property and an array of one or more Elements. The INDI +protocol does not +prescribe the names or the meanings of Properties, it is up to the +client and servers to agree. Recommended practice will evolve as +community participation matures. The sample drivers supplied with +XEphem make some possible choices for properties and names.
+
+The default settings in the Configuration window are the correct +mappings for these sample drivers. The idea is to specify the +Device.Property.Element that corresponds to each purpose. The +Configuration window also allows entering a multiplier and offset that +is applied to the INDI value to compute the value in units used within +XEphem. For example, the units for Mount.EQUATORIAL_COORD.RA are hours +but XEphem +wants this value in radians, hence the multiplier set to 0.2617993. +When connecting to drivers for which the +name mapping is not yet known, one technique for discovering their +Properties is to watch the INDI Control Panel (described next) for each +new Property that is reported when connecting toan INDI server.
+
+One of the options is whether to display a marker at the +telescope position on the Sky View. Below this ia a toggle button to +specify whether the Sky +View will automatically Recenter in order to keep the telescope +Marker in the +field of view. The option applies both to INDI and fifo marker +commands. When Recenter is On, then the telescope Marker is +automatically turned off whenever the Sky View is manually adjusted +(the rationale being that one will most likely not want the Sky View to +bounce back to the telescope position after having been manually +changed).
+
+Note that the sample drivers do not support all XEphem functionality. +For example, the sample drivers do not support being sent a new time +and date. This is included in XEphem in case it is useful someday for +some other driver and to illustrate how XEphem stores dates internally +as a modified Julian date, ie, with an offset of 2415020 removed.
+

5.8.3 INDI Control Panel

+This window shows the realtime operation of an INDI +server. It is +divided into a top and bottom section. The proportion of screen space +used by each half may be controlled using the sash control located +just about the bottom scrolled area.
+
+The top half is a scrolled text area that shows the status messages +arriving from each device. Each message is preceded with a time stamp, +followed by the Device followed by the message text. The Erase +button will permanently remove all messages from the scrolled text. +Clicking on the Trace to button will append the current set of +messages to the file named in the text field to the right and append +all further messages to this file until tracing is turned off.
+
+The bottom half shows each INDI Device, Property and Element to which +XEphem is connected. Each Device may be expanded or collapsed to +control screen space. The entire list can be scrolled up and down. The Connect +button controls whether XEphem will connect to the INDI device whose +host and port are defined in the INDI Configuration window. If a +connection is successful, each of the reported Properties will appear +in the bottom scrolled area.
+
+Under each Device is a list of its Properties. Each INDI Property may +be in one of four states: Idle, Ok, Busy and Alert. These are shown as +a light to the left of the Property colored gray, green, yellow and +red, respectively. To the left of each Device is also a light, colored +the same the highest activity color of any of its Properties. In this +way the status of the most active Property can be determined even when +a Device is collapsed in the window.
+
+INDI Properties can be one of four types. These are Numeric, Text, +Switches and Lights. The first three may be read-write or read-only. A +light is always considered read-only (set only by the Device, not by +the operator). Each Element of each Property is shown on one line. The +left side of the line is the label. Following the label is the current +value and, if read-write, followed by a text field for entering a new +value. Read-write Properties will have a push button to the left of +their name to set a new value; pressing Return in the text field will +also set a new value. Switches will show each switch with their label. +Switches may be defined to operate according to the rules one-of-many, +any-of-many and at-most-one.
+
+
+

5.8.4 FIFO Control

+Completely separate from the INDI interface, Sky View implements two +simple +fifos for communicating with a telescope control dæmon or other +processes or scripts. Each fifo must be in either the +Private +or +Shared +directory. +
    +
  1. Inbound: A marker may be placed on the Sky View by +writing a text string to the fifo named fifos/xephem_in_fifo. +The format allows for sending either equatorial or horizon coordinates. +To send an equatorial coordinate, the format is "RA:X Dec:Y", +where X +and Y are in radians at epoch 2000.0. To send a horizon coordinate, the +format +is "Alt:X Az:Y", where X and Y are in radians. The Sky View +center pointing position will be changed if necessary to make the +marker +visible. XEphem attempts to open this fifo each time the Sky View +window is +opened and closes it when the view is closed.
    +
    +
  2. +
  3. Outbound: If a process has the fifo named fifos/xephem_loc_fifo +open for reading when the Sky View popup menu is activated, then the +menu will +offer a button to send the cursor position to this fifo. The format is +the +same as a line in .edb format. If it is not already open XEphem +attempts to +open this fifo each time the popup is activated, and leaves it open +until +writing to it fails. Each position sent to the fifo is added to the +Telescope history list.
    +
  4. +
+ +

5.9 Sky View History menu

+This is the Sky View History control window. All Sky View Options, +Filter settings and pointing values may be saved in a History entry to +make it easy to configure the same way again at a later time. The Edit +pushbutton in the History pulldown menu brings up this window. The +additional pushbuttons in the History pulldown menu correspond to each +defined History entry and make it easy to apply any one history entry +without opening the History control window.
+
+The control window shows the current set of History entries, one per +line. The left portion of each line contains several controls, +described below. The center portion summarizes the entry, showing the +display mode, coordinate system, center position and field of view. The +right portion provides a text field to give the entry a name. This is +the name which appears in the History pulldown menu.
+
+
+The controls for each History entry are as follows:
+
+
Apply
+
puts the entry into effect, in the +same way as choosing it from the pulldown menu.
+
+ Up
+ Down
+
moves the entry up or down in the list.
+
+ Delete
+
+
removes the given entry.
+
+ Replace
+
+
replaces the entry with the current +Sky View settings.
+
+
+The buttons across the bottom allow for +additional control of the History list as a whole:
+
+
Add
+
+
captures the current Sky View +settings +and creates a new History entry. A default name will be created but +you should probably change it to something more descriptive if you +plan to Save the list.
+
+ Save
+
+
writes all of the current History +entries to a file. The file name is xephem_skyhist +and will be created in the Private +directory. You really don't want to know the format of this file.
+
+ Load
+
+
reads an existing file of History +entries that has been previously Saved and makes them the current +set.
+
+

5.10 Sky View Binary Star Map

+This window displays a map of a +binary +star system and a matching ephemeris. It is displayed from the popup +that appears when the mouse is right-clicked over a binary object in +the Sky View.
+
+The map is at left, oriented with equatorial N up and E left, as on the +unaided sky. Each star is drawn in a color according to its spectral +class. The primary star is drawn at the center. A scale at the bottom +shows the sky dimensions of the plot.
+
+If complete orbital elements are available, one orbit is plotted at +equal time intervals marked by small dots. The largest dot in the orbit +marks the position of the secondary nearest to the current XEphem time, +medium size dots mark other locations each ten steps.
+
+If only discrete positions for the secondary are known, the plot is +simply one dot for each.
+
+The table on the right lists the position of each plotted secondary +position. The columns are the dot number, year, separation in arc +seconds and +position +angle as degrees East of North. The separation and position angle at +the current XEphem time are available in the More info pull-right menu in the Sky +View popup.
+
+The Print button will print the map and the list.
+
+
+

6.0 Tools menu

+The tools menu provides access to a variety of functions.
+
+ +

6.1 Plot values

+ +This window controls the plot generation and display +functionality of XEphem. You may select most numeric information +displayed throughout XEphem, in pairs, to form x/y coordinates of a +plot. You may select up to 40 such pairs. You then specify a file in +which to write the plot information. XEphem adds one line of +information +to the file for each x/y pair each Update iteration step. XEphem can +then plot any such file on the screen.
+
+Selecting data to plot
+
+
Click the toggle labeled Select fields to plot to make each +field in the other windows that are eligible for plotting appear as +a pushbutton. Select each such button as desired to form the x or y +component of a plot. As you make the selections, they are listed in +the table. Use the Undo button +to make changes. You may also associate a tag with each line, up to 8 +characters in length. These tags will be included in the plot display +for identification later. Once all the field choices have been made you +may return all the windows to their normal operational appearance by +deselecting the same toggle button.
+
+
+Saving +and restoring a plot configuration
+
+
+
To save this configuration so it can +be +loaded later, specify a file name and click Save config file. It will be saved +in the Private directory. The plot +entries will be savde in addition to the plot title field. The +extension for plot configuration files must be .ptc and will be added automatically +if left off. A configuration file may be +loaded by selecting it from the option popup menu to the right of Load config file. The menu will list +all files that reside in the Shared and Private directories with +extension .ptc. Note that reloading a configuration only recreates the +Plot's tag, x and y description; to be useful, the fields to which the +reloaded configuration refers must be made active independently.
+
+
+Specifying the plot file name and title

+
+
Type the name of the file to be used +to +contain the plot information in the text field provided. The +extension must be .plt and +will be added automatically if left off. When +XEphem first needs to write to the file, it will first check for the +existence of the file and, if it already exists and the +Confirmations Preferences is On, +ask +whether you wish to append to the file or overwrite it.
+
+
+
Enter a short title for the plot information in +the +text field provided. When XEphem first writes to a plot file, it +will place the contents of the title text field, if it is not empty, +into the file as a comment. All lines within a plot file that do not +begin with an alphanumeric character are considered comments and are +ignored. If the first line of a file is a comment, XEphem will use +it as the title when it displays the plot.
+
+
+Generating the plot entries
+
+
+
Once the fields have been specified +and +the plot file named and titled, you may select the Create plot file toggle button when +ready. Now each time XEphem goes through one Update iteration the +values +you have selected and their tags will be written to the plot file. +Note that when plotting is activated, XEphem does not update the +screen until the N Steps count in the Main window looping section goes to 1. This greatly +speeds the creation of plot files by avoiding screen updates. If you +wish to watch each iteration, set N Steps to 1 and click the Update +button manually for each iteration.
+
+Once all the desired data has been entered into the plot file, toggle +the plot button back off to flush all data and close the file. The +windows that contain each of the fields used in the plot need not be +visible while the plot is being generated. However, each field must +be active, for example its row and column must be selected if they +are in the Data table.
+
+
+Viewing plot files
+
+
+
Existing plot files may be viewed by +choosing it in the menu to the right of Show +plot file. The menu will list all files that reside in the +Shared and Private directories with extension .plt. As many different +plot files may be viewed simultaneously as desired. Each plot has +separate controls for flipping the X and Y axes and for turning on +and off a reference coordinate grid. The position under the cursor is +displayed above the top of the plot. The XEphem distribution kit +includes a sample plot file of the analemma.
+
+
+
+ +

6.2 List values

+  This window controls the +list generation functionality of XEphem. The fields you select define +columns of a table written to a file as XEphem runs. The text in +these columns looks exactly like their corresponding fields on the +XEphem windows and so are more familiar and readable than the entries +in plot files. They are designed to be used in +further text processing operations or printed as-is. Two spaces are +placed between each column.
+
+Selecting data to list
+
+
+
Select the Select fields toggle button to +make each field in the other windows that are eligible for listing +appear as a pushbutton. Select each such button as desired to define +each column of the listing. As you make the selections, they are +listed in the table here. Use the Undo +bottom to make changes. Once all the column choices have been made +return all the windows to their normal operational appearance by +deselecting the same toggle button.
+
+Saving and restoring a plot configuration
+
+
+
To save this configuration so it can +be +loaded later, specify a file name and click Save config file. It will be saved +in the Private +directory. The name of each list item will be saved in addition to the +column and latex options and title field. The extension for list +configuration files must be .lsc +and will be added automatically if left off. +A configuration file may be loaded by selecting it from the option +popup menu to the right of Load +config file. The menu will list all files that reside in the +Shared and Private directories with extension .lsc. Note that reloading +a configuration only recreates the Listing fields; to be useful, the +fields to which the reloaded configuration refers must be made active +independently.
+
+
+ Specifying the listing file name and +format
+
+
+
Type the name of the file to be used to +contain the listing in the text field provided. When XEphem first +needs to write to the file, it will first check for the existence of +the file and, if it exists, ask whether you wish to append to the +file or overwrite it.
+
+Choose to print the file in LaTeX +table format by pressing the given button before beginning to list to +the file.
+
+When column headings are +turned +on, they are written to the output file each time the file is +opened.
+
+
+
All lines within a listing file that +do +not begin with an alphanumeric character are considered comments and +are ignored. When XEphem first writes to a listing file, it will +place the contents of the title +text area, if it is not empty, into the file as a comment for your +convenience.
+
+Generating the listing entries
+
+
+
Once the fields have been specified +and +the listing file named and titled, if desired, select the Create list file toggle button. Now +each time XEphem goes through one iteration the values you have +selected +will be written to the file. Note that when listing is activated, +XEphem +does not update the screen until the N Steps count in the Main window looping section goes to 1. This greatly +speeds +the creation of plot files by avoiding screen updates. If you wish +to watch each iteration, set N Steps to 1 and click the Update +button manually for each iteration.
+
+Once all the desired data have been entered into the listing file, +toggle the list button back off to flush all data and close the +file. The windows that contain each of the fields used in the +listing need not be visible while the list is being generated. +However, each field must be active, for example its row and column +must be selected if they are in the Data table.
+

6.3 Solve equation

+This +window controls the automatic equation solving facility. You define an +arithmetic or boolean function, using most of the fields XEphem +displays, then XEphem will automatically evaluate the function and +adjust the time on each iteration to solve for the goal. To set up a +function to solve, follow these steps: Enter a function, Compile it, +Select a goal, Set the desired accuracy, Enable solving, Start the +solving process. Each of these steps is described below.
+
+Entering the function
+
+
+
The function may be any arithmetic +expression, in C-language syntax. All of C's comparison, logical and +arithmetic operators are supported as well as several common +arithmetic functions. The complete list is:
+
+
+ - * / +&& || > >= == != < <= abs floor sin cos tan asin +acos atan degrad raddeg pi log log10 exp sqrt pow atan2
+

+The function is entered into the text line provided. It may utilize +most of the fields from the other XEphem windows. Press the Enable field buttons button to +make each available field a button. Where ever a field is desired in +the function, position the text insertion cursor at the desired +position and select the field; its name will be inserted into the +function text. When you are finished defining the function, turn off +the field button appearance by selecting the Enable button again.
+
+Compiling the function
+
+
+
Once the function has been created as +desired, it must be compiled by selecting the Compile button (or by pressing the +Enter key on your keyboard). If there are any errors, a diagnostic +message will appear just below the function. Once a function has +been successfully compiled, the message will read No compile errors. +If the function is modified, a message will remind you that it has +not been compiled. Each time a function is successfully compiled, +XEphem updates all fields and evaluates the function. As explained +below, this can be used as an astronomical calculator even when not +actually solving anything.
+
+Selecting a goal
+
+
+
You may choose from any of four +evaluation algorithms, as selected by the trio of radio buttons. Find Maximum and Find Minimum +will solve for a maxima +or minima of the function, respectively. Find 0 +will solve for a time when the function evaluates to zero. Binary will keep incrementing time +by Step until the state of the function +changes, then do a binary search to find the exact time when the +function changes state. Binary search interprets a function that +evaluates to zero to be in one state and all other values to be the +opposite state. Generally, binary functions are comprised of logical +operators at their outermost expression levels.
+
+Specifying the desired accuracy
+
+
+
Searching will automatically stop when +the time changes by less than the desired accuracy value. Note that +this method of detecting convergence is not based on the value of +the search function itself.
+
+Enabling the solver
+
+
+
Once the function is defined and it +compiles without errors, you may enable searching for a solution by +selecting the button at the top labeled Solving is Active. Then, +referring now to the looping section of +the +Main window, each time an Update occurs the solution advances by one +time step until either N Steps iterations have occurred or until +Step becomes less than Accuracy. The initial time and step size are set +from the Main window, and are adjusted automatically as the solution +proceeds. Note that by setting N Steps to 1 and repeatedly selecting +Update you can effectively single-step the process. Solving will +automatically turn off when convergence is detected, the function is +edited or you may turn it off manually at any time by clicking +Solver is Active back off.
+
+
+Saving +and restoring a solver configuration
+
+
+
To save the Function, Goal and +Accuracy +so it can be loaded later, specify a file name and click Save to. It will be saved in the Private directory. The extension for +solver configuration files must be .svc +and will be added automatically if left off. +A configuration file may be loaded by selecting it from the option +popup menu to the right of Load file. +The menu will list all files that reside in the Shared and Private +directories with extension .svc. Note that reloading a solver +configuration only recreates the solving conditions; to be useful, the +fields to which the reloaded Function refers must be made active +independently.
+
+
+Additional notes on using the +equation solver:
+
+When selecting fields for plotting or listing a button appears labeled Use for plotting. You may select +this button to use the evaluated function as an item in the plot or +listing feature. Note that the function may be used in plotting or +listing whether or not actual solving is turned on.
+

The windows which contain the fields used in the function being +solved need not be visible while solving is in progress. However, the +field must be active, for example their row and column must be +selected if they are in the Data table.

+

The Close button removes +the Solving window from the screen; it does not effect actual solver +operation in any way.

+

A successfully compiled function is evaluated each time XEphem +updates. Whenever the function is compiled it is also evaluated using +freshly updated values. In this way, the Solve window can actually be +used as an arbitrary astronomical calculator at any time, whether or +not solving is actually active.

+

Solving periodic functions can lead to solutions far from the +intended range. You will get best results if you can start the search +near the expected answer and with a modest step size that will reach +the the +nominal solution within a few steps. You can use the plotting +feature to +study +a function and get an idea of the solution, then use the solver +feature to zero in.
+

+

Each plot file may be added to a movie loop or +overlayed with text or graphical annotation +using the menu items in the Control menu of each plot.
+

+ +

6.4 Find close pairs

+This +window allows you to scan the list of objects currently in memory +brighter than a given magnitude for all pairs which are separated by +less than a given angular distance. Separations will be topocentric or +geocentric depending on the Equatorial Preference +in the Main menubar. The scan does not include field +stars.
+
+These are the essential steps:
+
    +
  1. Set the desired maximum separation, in degrees, and faintest +magnitude.
    +
  2. +
  3. Set other options via the Options menu, described below.
  4. +
  5. Start the scan via the Run button in the Control menu.
  6. +
  7. When the scan completes, all pairs meeting the criteria will +appear in the scrolled list.
    +
  8. +
+The columns in the list are:
+
    +
  • Object 1 Magnitude
  • +
  • Object 1 Name
  • +
  • Object 2 Magnitude
  • +
  • Object 2 Name
  • +
  • Separation, in Degrees:Minutes:Seconds
    +
  • +
+The entries are sorted in increasing order of separation. The total +number of pairs found and current conditions are reported above the +list and the time when the scan was performed is indicated in the time +stamp label below the list.
+
+ +

6.4.1 Close Pairs Control +menu

+Run
+
+
This performs one scan. The XEphem +cursor will change to the Watch shape until the scan is complete at +which time the results appear in the scrolled list.
+
+Sky Point
+
+
This will place a cross-hair over the +first object of the selected pair on the Sky View,  +re-aiming if it is currently not in the field. Either select the +pair in the list then press this button, or double-click on the +pair in the list. (These commands do nothing if the Sky View is not +currently up.)
+
+List to file...
+
+
This selection allows writing the +current list to a file. A window is presented which allows you to enter +a file name. The file is written when you click Ok.
+
+The format of the file begins with a header line that captures the +conditions in effect when the set of close objects was built. +Following the header, there is one line per pair with exactly the +same information as appears in the window list.
+
+Close
+
+
This closes the Close Pairs window. +Note that the Auto run option +is +disabled when the window is closed.
+ +

6.4.2 Close Pairs Options +menu

+Auto run
+
+
When this option is active, a scan for +close objects is performed automatically each time an Update is +commanded from the Main window. The prior list is discarded each +time. The scans are not performed if the Close Pairs window is closed.
+
+Auto list
+
+
When this option is active, the +results +of each scan are automatically appended to the file last specified +in the List to file window. +This +works whether the scan was performed explicitly via the Control » Run command +here +or implicitly via an Update from the Main window and the Auto run option is active.
+
+Omit fixed pairs
+
+
When this option is active, pairs of +Fixed objects are not listed.
+
+
+Omit planet's own moons
+
+
+
When this option is active, pairs for +which both objects are part of the same planetary system are not listed.
+
+ +

6.4.3 Close Pairs Algorithm

+
The sky dome is broken into bands of +constant Dec with height equal to the given separation. The database +is scanned once and each object brighter than the given limit is +dealt into its band and the one adjacent in the direction of the +North pole. Each band is then sorted by RA. Each band is then +scanned for close pairs, with rapid cutoff detection due to the +sort. The final list is then sorted by separation, and displayed.
+
+Total time is strongly influenced by the number of pairs in the result. +So when using wide separations it helps to use relatively bright +limiting magnitudes.
+
+

+

6.5 Night at a Glance

+ This +window displays a 24 hour period with local midnight in the center.
+
+Across the bottom is a scale marking local dates and time and UTC time, +at each even hour. The current XEphem time is marked with a thin +vertical line.
+
+The background gray shading shows when the Sun is up, down and periods +of twilight. The twilight period matches the Sun Dip setting in the +Main window Night section.
+
+Overlayed on the gray background is one horizontal line for each Favorite. The lines show when the object is +above the horizon, the altitude of which is defined in the View » Data Table » +Control » Setup horizon parameter. The lines on the +diagram +pack closer together as the number of objects to display increases; if +things get too crowded try turning off some of the Favorites.
+
+NAAG Control menu
+
+
One +color toggles whether objects are drawn all in one color or +according to their Sky View colors.
+
+Print...
+Favorites...
+User annotation...
+Add to movie...
+
+These buttons provide convenient access to these facilities.
+
+NAAG mouse
+
+

+Right-clicking near an object's line will pop up a menu +containing its rise, transit and set data. This information is +with respect to the day in which the click occurred.
+
+If the mouse is clicked far from any object, then just the time at that +horizontal position is presented.
+
+The menu always includes a button showing the exact moment +corresponding to the mouse click position. Clicking the button sets the +main XEphem time to this moment.
+
+
+An interesting exercise is to set up a time loop with a Step size of +a few days and watch how the rise and set times of objects and the +amount and timing of night time are effected throughout the year.
+
+
+ +

6.6 Coordinate converter

+ This window performs simple conversions +among several common astronomical coordinate systems. Simply edit (or +paste) any coordinate and the others will update immediately. All +fields are in units of Degrees except RA is in Hours. Fields may be +entered in either sexagesimal or decimal format. For example, either +10:30:00 or 10.5.
+
+Altitude and Azimuth are with respect to the time and location set in +the Main window. These will change to correspond to the RA and Dec +values if an Update is performed.
+
+The top row are astrometric RA and Dec precessed to the given equinox +year, or enter EOD for apparent coordinates at the current epoch. +Unlike the other fields, edits to the equinox field only take effect +on Enter.
+
+The next row are RA and Dec using whatever is set in the Main Window.
+
+The controls across the bottom perform as follows
+
+
Close
+
Closes this window
+ Sky Point
+
Centers the Sky View at the current coordinates.
+ Eyepiece
+
Places an eyepiece in the Sky View at the coordinates +shown. The Sky View is not recentered. In order to be drawn the Sky +View +Eyepieces Option must be turned on.
+ Get Sky
+
Loads each field from the current center position of the +Sky View.
+ Canonize
+
Reformats each field in a consistent manner for easier +viewing.
+
+ +

6.7 Observers +logbook

+This +tool lets you store observing circumstances and notes. It is typically +used when making observations at the +telescope.
+
+When this window is open, the popup you get when right-clicking on an +object in the Sky View will contain a selection Add to logbook. Clicking on this +choice will automatically fill in the top section of fields in the +logbook pertaining to +observing +circumstances and object information. To these fields you may add your +own Notes in the scrolled text +area at +the bottom, and equipment or User +defined fields if desired.
+
+There are two interesting controls available across the bottom as +follows:
+
+
+
List
+
+
This brings up a scrolled list showing +all entries in the logbook whose fields match those selected in the S +column. The field may contain glob patterns +for a textual match or be +preceded with < or > for a numerical range match. Only those +fields selected with the L column will be +shown, and they may be sorted by the field selected in the K +column.
+
+You may Save the resulting scrolled list to a text file using +the +file name field provided. Right-clicking on an entry in the scrolled +list will mark the location of that log entry in the Sky View based on +its RA2000 and Dec2000 field values.
+
+
+
+

+
+
+
+
Add
+
+
This will add the current record to +the +logbook file. In keeping with the convention that log books are written +in ink, there is no mechanism provided for editing or removing existing +entries. Of course, one may always edit the log file independently.
+
+
+File format
+
+The Observers logbook is a text file in XML format. The format should +be pretty self-explanatory. The file name is xelogbook.xml in the Private +directory. The entire logbook is +contained in one XML element tagged xelogbook +with a version attribute 1.1. +Each log entry is in an element tagged logentry. +Within each logentry is +one element named the same as the label in the window, sans spaces if +any. The date fields are stored in the user's preferred format.
+
+
+
+

6.8 Movie +loop

+The Movie tool allows you to capture any +number of View, Night at a Glance or Plot windows and collect them into a movie. The +frames of the movie can be viewed one at a time or you can set the rate +to change from one frame to next automatically. There are many uses for +this type of function. For example, you could make small changes in +time and make a series showing the movement of an asteroid through the +solar system. Or use it to quickly blink between two FITS images, one +with and one without a potentially new supernova. You might find the Image Registration feature useful to make these +images.
+
+The Control menu has entries to Delete current frame or +Delete all frames of the movie. You may also Save the +frames to individual PNG files. You must specify a prefix then each +file name will be of the format prefixnnn.png where nnn will be +a sequence number starting with 000. The files will be located in the Private directory. XEphem does not save +the frames directly as an actual movie because there are many such +formats and other tools available to collect the files into a movie in +your preferred format. For example, you could convert the PNG files +into GIF files using pngtopnm and ppmtogif tools +from the netpbm +toolkit then make an +animated gif using whirlgif +or gifsicle. +Another possibility is to use convert which is part of the +ImageMagick +collection. Check your system before looking too far, these tools are +often +already installed on many UN*X systems.
+
+Sliding the Frame selection scale will display the indicated +frame. Step +1 and -1 will advance or back up by one +frame. Frames may also be changed automatically by sliding the Frames +per second scale to the desired rate. Changing the displayed frame +manually by any means will automatically reset the frame rate back to +zero. When moving through the frames automatically and encountering the +last frame in the series, the sequence can either reverse and show each +frame back towards the first or jump back to the first and move +forwards again, depending on the Bounce toggle button.
+
+Each window whose contents may be added to a Movie will have an entry +somewhere in its menu bar named "Add to movie". All such windows also +support a short cut of typing Control-m to add the window to the Movie, +so long as the cursor focus is located within the desired window.
+

7.0 Data menu

+The Data menu offers several means to load, search and update the +files XEphem uses for storing objects.
+
+ +

7.1 Files

+ This +window allows you to load and delete database files to and from memory. +These objects form what is referred to as the XEphem database. These do +not +include the field stars.
+
+Click the Files menu to scan the Private +and Shared directories and pop up a list of all .edb and .tle files +found therein. Click on a file to load it into XEphem memory.
+
+The top section of the window displays a count of each major type of +object and the total number in the database. The counts include Favorites that are not also in the database.
+
+The bottom section lists the catalogs which are currently loaded and +the number of new objects they contributed to memory. Buttons to the +left of each catalog allow the catalog to be Deleted from memory and to display +the Header of the catalog.
+
+The current list of loaded catalogs may be saved so it becomes the +ones automatically loaded when XEphem starts. To do so, go to Preferences » Save and Save the XEphem.DBInitialFiles resource under the +Data Base category.
+
+

7.1.1 Files Control menu

+Index...
+
+
This is a handy shortcut to open the object +index.
+
+Delete all
+
+
This deletes all loaded data. The files on disk are not +effected.
+Reload all
+
This reloads all catalogs currently loaded. This is handy +when catalogs have been updated on disk, perhaps by some by some +automatic means.
+Open DB Fifo
+
+
Listen for database objects arriving via a fifo from +another process. XEphem attempts to reopen the fifo each time the +button +is pressed. The file name of this fifo is "fifos/xephem_db_fifo" in either the +Private or Shared directory. All relevant displays are automatically updated +when data arrives via this fifo. The format of the fifo data is +exactly the same as for any XEphem database file. Due to the way the +fifo data is read and processed, it is important that each line be +terminated with a newline; incomplete last lines can result in loss +of information.
+Make Favorite when read 1
+
+
If this toggle is on then when a new database file is +loaded and it defines exactly one object, it will also be assigned to +the list of Favorites. This feature also +applies for files loaded when XEphem first starts.
+
+Check alternate names
+
This toggle turns on or off support for XEphem 3.6's new +support for alternate names. It is motivated entirely by performance. +Recording alternate names and checking for duplicates is quite +expensive and +if not needed can speed up loading and deleting catalogs significantly. +If this toggle is On then when a new database +catalog is loaded each entry's alternate names, if any, will be checked +for +already being loaded and not loaded if found, and new alternates will +be +stored for display and subsequent checking. If this toggle is Off, only +the +first name of each entry is stored and no duplicate names are checked. +Note that even when this option is Off, deleting a catalog still +requires +XEphem to remove all alternate names that might have been recorded when +the +catalog was loaded, so the full performance advantage is only achieved +if this +option was off when each catalog is loaded.
+
+
+Close
+
Closes the Data Base window. +
+

7.1.2 File format

+This section describes the format of an XEphem database file. The +file name extension is .edb. See the next section for files containing +two-line Earth satellite elements.
+

7.1.2.1 General format +rules
+

+
    +
  • Each object occupies one line in the file.
  • +
  • The order of objects in a file does not matter.
  • +
  • Lines beginning with anything other than a-z, A-Z or 0-9 are +ignored and may be used for comments.
  • +
  • Lines are separated into Fields using commas (,).
  • +
  • Fields may be further subdivided into Subfields with vertical +bars (|).
  • +
  • All date fields may be in either of two forms:
  • +
+
+
    +
  1. month/day/year, where day may contain a fractional portion. +examples: 1/1/1993 and 1/1.234/1993 . Note the format of dates in +database files is always M/D/Y, regardless of the current XEphem +Date format Preference setting; or
    +
    +
  2. +
  3. the year as real number as indicated by the presence of a +decimal point, such as 1993.123.
    +
  4. +
+
+

7.1.2.2 Format Details

+
The first two fields are required and +are always Name and Type. Remaining fields depend on Type.
+
+ + + + + + + + + + + +
Field 1
+
One or more object names, each +separated by the Subfield separator, |. Any number of characters may be +present in the file but XEphem only uses the first 20 characters of +each name and only the first 20 names.
+
Field 2 Type designation. Consists of a +single letter designation from the following set (case is significant):
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
f
+
fixed (or at most exhibits +constant curvilinear proper motion)
e
+
heliocentric elliptical +orbit
h
+
heliocentric hyperbolic +orbit
p
+
heliocentric parabolic +orbit
E
+
geocentric elliptical +orbit, i.e., Earth satellite
P
+
built-in planet or natural +satellite name
+
+
+
If +Field 2 is +f the object is fixed and +the +following fields and subfields are defined:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
SubField 2A An optional SubField 2A can be +added to further define an object class code, consisting of +one character from the following list:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
A
+
Cluster of galaxies
B
+
Star, binary. Deprecated +as of version 3.6, gets turned into D internally. Use Field 2 +type B if more than one position angle and separation or +orbital elements are +known.
+
C
+
Cluster, globular
D
+
Star, visual double
F
+
Nebula, diffuse
G
+
Galaxy, spiral
H
+
Galaxy, spherical
J
+
Radio
K
+
Nebula, dark
L
+
Pulsar
M
+
Star, multiple
N
+
Nebula, bright
O
+
Cluster, open
P
+
Nebula, planetary
Q
+
Quasar
R
+
Supernova remnant
S
+
Star
T
+
Stellar object
U
+
Cluster, with nebulosity
Y
+
Supernova
+
V
+
Star, variable
+

+
SubField 2BIf SubField 2A is one of T, B, +D, S or V, optional SubField 2B may consist of up to two spectral +designation characters, typically one letter followed by one numerical +subclass designator. Two examples are O and G3.

+

+
If SubField 2A is any other +class code, optional SubField 2B may consist of up to two additional +characters to further describe the type.
+
Field 3 Astrometric RA +position coordinate in equinox given by Field 6 always at epoch 2000, given as H:M:S.

+
SubField 3AThis optional subfield may +specify a proper motion in RA. It is in milliarcseconds per +year on the sky, i.e., ΔRA*cos(dec).
Field 4Astrometric Declination +position coordinate in equinox given by Field 6 always at epoch 2000, given as D:M:S.

+
SubField 4AThis optional subfield may +specify a proper motion in Dec. It is in milliarcseconds per +year on the sky
Field +5
+
Magnitude +of the object.
Field +6
+
This +optional field is the reference epoch. It is assumed to be +2000 if absent
+
+
+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field 7 depends on SubField 2A
If SubField 2A is G +or H
Field +7
+
Galaxy +major axis, in arcseconds

+
SubField 7AGalaxy minor axis, in arcseconds

+
SubField 7BMajor axis position angle, in +degrees East of North
If Subfield 2A is B +or D
Field +7star +pair separation, in arcseconds
+

+
SubField 7Areserved, set to 0

+
SubField 7Bposition angle, in degrees East +of North
Otherwise Field 7 is +optional but if present
Field +7size of +the object, in arcseconds. It is assumed to be 0 if absent.
+
+
+
+
If +Field 2 is +B the object is a true +binary pair and +the +following fields and subfields are defined.
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
SubField 2A An optional SubField 2A can be +added to further define an binary class code, consisting of +one character from the following list. This scheme is taken from the +Washington Multiplicity catalog for compliance with the IAU 2003 +recommendation.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
a
+
Astrometric binary
+
c
+
Cataclysmic variable
+
e
+
Eclipsing binary
+
x
+
High-mass X-ray binary
+
y
+
Low-mass X-ray binary
+
o
+
Occultation binary
+
s
+
Spectroscopic binary
+
t
+
Single-line spectroscopic +binary
+
u
+
Double-line spectroscopic +binary
+
v
+
Spectrum binary
+
b
+
Visual binary
+
d
+
Visual binary with common proper motion
+
q
+
Visual binary - optical
+
r
+
Visual binary - physical
+
p
+
Exoplanet
+
+

+
SubField 2BUp to two characters to specify +the spectral class of the primary star, typically one letter followed +by one numerical subclass designator. Two examples are O and G3.

+
SubField 2C Up to two characters to specify +the spectral class of the secondary star, +typically one letter followed by one numerical subclass designator. +Two examples are O and G3.
Field 3 RA +position coordinate, given as H:M:S.

+
SubField 3AThis optional subfield may +specify a proper motion in RA. It is in milliarcseconds per +year on the sky, i.e., ΔRA*cos(dec).
Field 4Declination +position coordinate, given as D:M:S.

+
SubField 4AThis optional subfield may +specify a proper motion in Dec. It is in milliarcseconds per +year on the sky
Field +5
+
Magnitude +of each star in the pair.

+
SubField 5A
+
Magnitude of the primary star
+

+
SubField 5B
+
Magnitude of the secondary star
+
Field +6
+
This +optional field is the reference equinox year. It is assumed to be +2000 if absent
Field 7
+
This field may contain +either 3 or 6 subfields (one or two triples of year/separation/position +angle) +or 7 subfields (orbital elements).
+

+
If 3 or 6 subfields, +they define positions grouped as the following triplets:
+

+
SubField 7A/DYear of the separation and position angle given +in the next two fields, decimal year or month/day/year

+
SubField 7B/ESeparation, arc seconds
+

+
SubField 7C/FPosition angle, degrees E of N, referenced to +equinox in field 6
+

+
If 7 subfields, they +define a +true orbit:
+

+
SubField 7A
+
Semi-major axis, arcseconds
+

+
SubField 7BInclination from plane of sky, degrees
+

+
SubField 7CLongitude of node, degrees
+

+
SubField 7DEccentricity
+

+
SubField 7EEpoch of periastron, decimal year or +month/day/year
+

+
SubField 7FArgument of periastron, degrees
+

+
SubField 7GPeriod. Units are designated by suffix y +for years, d for days, or h for hours. If no +designation the default is years.
+
+
+
+
+
If Field +2 is e the object type +is +elliptical heliocentric (eccentricity < 1) and the remaining fields +are defined as follows:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field +3
+
i = +inclination, degrees
Field +4
+
O = +longitude of ascending node, degrees
Field +5
+
o = +argument of perihelion, degrees
Field +6
+
a = mean +distance (aka semi-major axis), AU
Field +7
+
n = mean +daily motion, degrees per day (computed from a**3/2 if +omitted)
Field +8
+
e = +eccentricity, must be < 1
+
Field +9
+
M = mean anomaly, +i.e., degrees from perihelion
Field +10
+
E = epoch date, +i.e., time of M

+
SubField 10AFirst date these elements are +valid, optional
+

+
SubField 10BLast date these elements are +valid, optional
+
Field +11
+
D = the equinox +year, i.e., time of i, O and o
Field +12
+
First component of +magnitude model, either g from (g,k) or +H from (H,G). Specify which by preceding the number with a "g" +or an "H". In absence of either specifier the default is (H,G) model. +See Magnitude models.
Field 13
+
Second component of +magnitude model, either k or G
+
Field 14
+
s = +angular size at 1 AU, arc seconds, optional
+
+

+
+
+
You may have other parameters +available +for elliptical orbits that can be converted into these. The +following relationships might be useful:
+
+
P += sqrt(a*a*a)
+p = O + o
+n = 0.9856076686/P
+T = E - M/n
+q = a*(1-e)

+AU = 149,597,870 km = 92,955,621 U.S. statute miles
+
+where
+
+P = the orbital period, +years;
+p = longitude of +perihelion, degrees
+T = epoch of perihelion +(add multiples of P for desired range)
+q = perihelion distance, AU
+
+Note that if you know T you can then set E = T and M = 0.
+
+
+
If Field +2 is h the object type +is +hyperbolic heliocentric (eccentricity > 1) and the remaining fields +are defined as follows:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field +3
+
T = date +of the epoch of perihelion

+
SubField 3AFirst date these elements are +valid, optional

+
SubField 3BLast date these elements are +valid, optional
Field +4
+
i = +inclination of orbital plane to ecliptic, degrees
Field +5
+
O = +longitude of ascending node, degrees
Field +6
+
o = +argument of perihelion, degrees
Field +7
+
e = +eccentricity, must be > 1
+
Field +8
+
q = +perihelion distance, AU
Field +9
+
D = the +equinox year (i.e., time of i/O/o)
Field +10
+
g +component of magnitude model. See Magnitude +models.
Field 11
+
k component of magnitude +model
+
Field +12
+
s = +angular size at 1 AU, arc seconds, optional
+
+
+
+
+
As with elliptical elements, other +parameters might be available. The relationships are generally the +same, except:
+
+
+
q += a*(e-1)
+
+If Field 2 is p the object type is parabolic +heliocentric (eccentricity exactly equal to 1) and the remaining +fields are defined as follows:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field +3
+
T = date +of epoch of perihelion

+
SubField 3AFirst date these elements are +valid, optional

+
SubField 3BLast date these elements are +valid, optional
Field +4
+
i = +inclination, degrees
Field +5
+
o = +argument of perihelion, degrees
Field +6
+
q = +perihelion distance, AU
Field +7
+
O = longitude of +ascending node, degrees
Field +8
+
D = the equinox year +(i.e., time of i/O/o).
Field +9
+
g component of +magnitude model. See Magnitude models.
Field 10
+
k component of magnitude +model
Field +11
+
s = angular size at +1 AU, arc seconds, optional
+
+
+
+
If Field +2 is E (note upper +case) +the object type is Earth satellite and the remaining fields are defined +as follows:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field +3
+
Epoch of the other +fields

+
SubField 3AFirst date these elements are +valid, optional

+
SubField 3B
+
Last date these elements are +valid, optional
Field +4
+
inclination, degrees
Field +5
+
RA of ascending +node, degrees
Field +6
+
eccentricity, must +be < 1
Field +7
+
argument of perigee, +degrees
Field +8
+
mean anomaly, degrees
Field +9
+
mean motion, revs/day
Field +10
+
orbit decay rate, +revolutions/day^2
Field +11
+
integral reference +orbit number at Epoch
+
Field +12
+
drag coefficient, +1/(earth radii); optional
+
+
+
XEphem arbitrarily assigns all Earth +satellites a visual magnitude of 2.0.
+
+XEphem can also read files directly containing the venerable +Two-Line-Element (TLE) format. See next section for details. +
+
+If not specified explicitly in the edb entry, XEphem assigns the valid range +of dates for satellite elements to the greater of 100 days or the time +required for the mean motion to change by one percent either side of the +element epoch. +
+
+
If Field +2 is P (note upper +case) +then Field 1 must be the name +of +a built-in object for XEphem and no other fields are defined. The +following names are recognized:
+
+
Sun
+Moon
+Mercury
+Venus
+Mars
+
Phobos
+Deimos
+Jupiter
+
Io
+
Europa
+Ganymede
+Callisto
+Saturn
+
Mimas
+Enceladus
+Tethys
+Dione
+Rhea
+Titan
+Hyperion
+Iapetus
+Uranus
+
Ariel
+Umbriel
+Titania
+Oberon
+Miranda
+Neptune
+Pluto
+
+

7.1.2.3 Magnitude models

+The g,k magnitude model +requires two parameters to be specified. One, the absolute magnitude, +g, is the visual magnitude of the object if it were one AU from both +the Sun and the Earth. The other, the luminosity index, k, +characterizes the brightness change of the object as a function of its +distance from the Sun. This is generally zero, or very small, for +inactive objects like asteroids. The model may be expressed as:
+
+
m += g + 5*log10(D) + 2.5*k*log10(r)
+
+where:
+
+
m += resulting visual magnitude
+g = absolute visual +magnitude
+D = comet-earth distance, +in AU
+
k += luminosity index
+
r += comet-sun distance.
+
+The H,G model also requires +two parameters. The first, H, is the magnitude of the object when one +AU from the Sun and the Earth. The other, G, attempts to model the +reflection characteristics of a passive surface, such as an asteroid. +The model may be expressed with the following code fragment:
+
+
beta += acos((rp*rp + rho*rho - rsn*rsn)/ (2*rp*rho));
+psi_t = +exp(log(tan(beta/2.0))*0.63);
+Psi_1 = exp(-3.33*psi_t);
+psi_t = +exp(log(tan(beta/2.0))*1.22);
+Psi_2 = exp(-1.87*psi_t);
+m = H + 5.0*log10(rp*rho) - +2.5*log10((1-G)*Psi_1 + G*Psi_2);
+
+where:
+
+
m  = +resulting visual magnitude
+rp  = distance from +sun to object
+rho = distance from +earth to object
+rsn = distance from +sun to earth
+
+Note that neither model takes into account the phase angle of sun light.
+
+
+

7.1.3 Notes

+

XEphem uses a different window to manage Field +star catalogs.

+

XEphem ships with a few perl scripts which might be helpful for +converting databases in other formats into XEphem format. These +scripts are in the tools/ directory of the source distribution tree.
+

+

7.1.4 Two-line Earth +satellite element sets

+XEphem supports reading files which contain Earth satellites defined +using the the NORAD "two-line element" set format, or TLE. Because the +TLE format is quite rigid and includes a checksum within each line, +XEphem is able to search files containing other arbitrary text and find +each properly formatted TLE contained therein. Follows is a description +of the TLE. Note the line immediately preceding the TLE, line "0", is +assumed to contain a common name for the satellite, this line is only +used if the following two lines conform to TLE.
+
+Data for each satellite consists of three lines in the following +format: +
AAAAAAAAAAAAAAAAAAAAAAAA
1 NNNNNU NNNNNAAA NNNNN.NNNNNNNN +.NNNNNNNN +NNNNN-N +NNNNN-N N NNNNN
2 NNNNN NNN.NNNN NNN.NNNN NNNNNNN NNN.NNNN NNN.NNNN NN.NNNNNNNNNNNNNN
+

Line 0 is a twenty-four character name.
+

+

Lines 1 and 2 are the standard Two-Line Orbital Element Set Format +identical to that +used by NORAD and NASA. The format description is:
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Line 1
ColumnDescription
01Line Number of Element Data
03-07Satellite Number
08Classification (U=Unclassified)
10-11International Designator, last two digits of launch +year,  2000+ if < 57.
12-14International Designator, launch number of the year
15-17International Designator, piece of the launch
19-20Epoch Year, last two digits of year,  2000+ if < 57
21-32Epoch Day of the year and fractional portion of the day
34-43First Time Derivative of the Mean Motion
45-52Second Time Derivative of Mean Motion (decimal point assumed)
54-61BSTAR drag term (decimal point assumed)
63Ephemeris type
65-68Element number
69Checksum (Modulo 10)
+
(Letters, blanks, periods, plus signs = 0; +minus signs = 1)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Line 2
ColumnDescription
01Line Number of Element Data
03-07Satellite Number
09-16Inclination [Degrees]
18-25Right Ascension of the Ascending Node [Degrees]
27-33Eccentricity (decimal point assumed)
35-42Argument of Perigee [Degrees]
44-51Mean Anomaly [Degrees]
53-63Mean Motion [Revs per day]
64-68Revolution number at epoch [Revs]
69Checksum (Modulo 10)
+
+

+When reading a TLE entry, XEphem assigns the valid range of dates for a set of +elements to the greater of 100 days or the time required for the mean motion +to change by one percent either side of the element epoch. + +
+ +

7.2 Index

+This +window shows a list of all objects currently loaded into memory sorted +by name. Or, by chosing a toggle button across the top, the list can +be restricted to just deep sky, stellar, binary systems, solar system +and +Earth +satellites. The list does not include Favorites.
+
+Each object name, including all alternate names, are in the scrolled +list on +the right. Clicking an arrow +button moves the list by one object up or down; clicking above or below +the thumb +control scrolls the list so that the top object moves to the bottom or visa versa. Clicking on an object +displays its defining parameters in the box to the left, and also +displays its .edb file format entry in the read-only text field below.
+
+The list of objects may be searched by entering a glob pattern in the Search field then +typing Enter or clicking Search. If more than one object name matches, +clicking Search again scrolls to the next candidate; the search wraps +back to the front when no more are found.
+
+Buttons across the bottom function as follows:
+
+Sky Point
+

+This will mark the object currently selected in the Sky +View, repointing if necessary to move it into the field of +view.
+
+
+Show in Gallery
+
+
+
If this object is in the Gallery, this button will be available and will +display the object.
+
+Save as Favorite
+
+
+
This button will add the object +currently +selected to the list of Favorites.
+
+Tel Goto
+
+
+
This will send the object currently +selected to the Telescope control +system. Whether this button is active depends on the state of the +telescope control subsystem when the Index window was opened. If the +button state is incorrect, close and reopen the Index window.
+
+ +

7.3 Favorites

+This +window allows you to add, arrange, remove and temporarily deactivate an +arbitrary collection +of XEphem objects, called Favorites. Once defined as a Favorite, the +object remains available whether or not its original database file is currently loaded.
+
+Favorites have special significance in several places throughout +XEphem. For example the rows in the Data Table +and in the Night at a Glance windows are +exactly those of the Favorites. The Earth view +shows those Favorites which are satellites. Favorites are available +very +easily in the Favorites menu in the Sky View. +And the Solar System view displays those +Favorites +that are within the solar system.
+
+Objects may be added to the list of Favorites in several ways:
+
    +
  • from the Data + » + Index +window by browsing the objects currently loaded in memory then clicking + Favorite;
  • +
  • from buttons labeled Favorite located in several dialogs +throughout XEphem;
    +
  • +
  • from buttons in the popup menus of several views when clicked +over displayed objects; and
    +
  • +
  • by entering its .edb format definition in the text field near the +bottom of the Favorites window and clicking Add edb.
    + Note this field may also be used to edit an existing Favorite in-place. +
  • +
+Each entry in the Favorites list shows its complete .edb format +definition. Each entry has the following controls:
+
Del
+
removes the entry from the Favorites +list
+
+
+ Up and Down arrow buttons
+
+
move the entry up and down to arrange +the Favorites into any designed order. This is useful where Favorites +define rows such as in the Data Table and Night at a Glance windows.
+
+
+ Use
+
+ +
specifies whether to use or hide the +entry from +the rest of XEphem without actually Deleting it.
+
+The buttons across the bottom allow you to Save the current set +of Favorites to a file and later Load them again. +The suffix of these files must be .fav and will be added +automatically if not included in the file named in the text field. When +XEphem first starts, it automatically +loads the file named in the Save text field. To save this file name, go +to Preferences » Save +and Save +the XEphem*Favorites*File resource under the Favorites category.
+
+
+ +

7.4 Download
+

+ This +window provides an easy means to download from the Internet to disk and +simultaneously +load into memory any file which contains objects defined in either +XEphem's .edb format or the NORAD 2-Line Element (TLE) format commonly +used for Earth satellite. The file is saved in the Private directory, converted to .edb +format if it is not already.
+
+Several particularly useful sites as of this build are already entered. +The first three are from Dr. TS Kelso's Earth satellite lists at celestrak.com. The other four are +the Minor Planet Center's lists of hot comets and unusual asteroids +specially formatted for XEphem. +Click Get beside the desired +catalog to download the file to the Private directory and +simultaneously load into XEphem memory.
+
+Special files created by the Minor Planet Center +and Lowell +Observatory may also be downloaded. Each organization maintains +extensive lists of all known asteroids and produces on a regular basis +Keplarian orbital elements precessed to the current date. Both are of +excellent quality. When the Get +button is clicked, XEphem downloads the appropriate file, uncompresses +it, reformats it to .edb format and splits the results into two files +for convenience. One file will contain all asteroids which can ever +become brighter than magnitude 13, and the other (with a "_dim" suffix) +contains all the rest. All files are created in the user's Private +XEphem directory. The real work is performed by two perl scripts, +mpcorb.pl and astorb.pl, respectively. These may be run independently +of XEphem if desired.
+
+
+ +

7.5 Field Stars

This window allows you to control +which +field star +sources you wish to use. The window is accessible from the Main window +as well as from the Control menus of most graphical views.
+
+XEphem uses the term "field star" to refer to the huge numbers of faint +stars visible in any real world view of the sky. Field stars are +generally far more numerous than could be reasonably accommodated in +the XEphem *.edb database format. For this reason they are stored and +made available in their own special compact forms for utmost +efficiency. The downside to this approach is that field stars are not +included in the totals presented by the Data » Files window nor +are they available for searching or inspection using the Data » Index window. +This results in little loss of generality, however, since (once +found!) they may be assigned to the user Favorites.
+
+The controls in the Field Stars setup window are grouped into +categories, depending on the basic source of the stars, as follows:
+
+

7.5.1 Hubble GSC

+The Hubble Guide Star Catalog is a seminal work created by the Space +Telescope Science Institute to support the Hubble Space telescope. It +contains from 13 million unique stars, or about 300 stars per square +degree of sky.
+
+ASP CDROM Directory
+
+
+
This choice enables reading field stars +from the Hubble Guide Star Catalog made available some years ago +on two CDROMs published by the Astronomical Society of the +Pacific. Mount a CDROM somewhere onto your filesystem, type the +name of the mount directory in the text field provided then turn +this option on and press Apply. Note that XEphem assumes your CDROM +driver removes the trailing ";1" from all filenames.
+
+
+Local Cache Directory
+
+
This choice enables reading GSC field +stars from your local disk. If this option is on along with the +CDROM option, then as requests are satisfied from the CDROM a +compact form of the same data will be written to files below the +directory named in this option. Then the next time the same field stars +are needed, and this option is on, they will be obtained from the +local disk files rather than the CDROM. In fact, the CDROM is not +needed +or used if the local disk contains all the stars for any given +access. The entire 2 CDROM set loads onto disk in this format in +some 180 MB. The default path of the directory which holds the +disk version is "catalogs/gsc" off the Shared directory. Note: +There is also a utility in the tools/gsc directory, gscload, with +which you may preload any entire CDROM segment at once if desired. +These files are already included in te commercial version of +XEphem.
+
+
+Internet to xephemdbd
+
+
+
This choice is to use the Internet to +access an XEphem GSC server. To use this source, select this +option and type the URL to the remote xephemdbd.pl in the text +field provided.
+
+
+GSC 2.2 Directory
+
+
+
This choice enables using a local copy +of the GSC 2.2.0.1 catalog in xe3 format. This catalog only contains +stars between magnitude 10 and 18.5, so it must be used in conjunction +with +an additional catalog for completeness. The Hipparcos catalog is an +ideal companion and is automatically chosen as a convenience. +
+
+
+ +

7.5.2 USNO A or SA catalogs

+
+Root directory
+

+This choice of field stars supports the SA and the A series of +astrometric catalogs produced in recent years by the US Naval +Observatory. The SA2.0 for example, includes some 54 million stars, +spatially sampled so there is about 1,300 stars per square degree of +sky. Note that such a uniform distribution does not "look" much like +the real sky, but it is great for its intended use as an astrometric +mesh for comet hunters or such. To order these catalogs, see http://psyche.usno.navy.mil/pmm. +If you have such a catalog, simply enter the name of its base directory +and toggle this switch on. The default assumes a symbolic link, +"catalogs/usno" off the shared directory. The suggested citation for +SA1.0 follows:
+
+
Monet, D., Bird, A., Canzian, B., +Harris, H., Reid, N., Rhodes, A., Sell, S., Ables, H., Dahn, C., +Guetter, H., Henden, A., Leggett, S., Levison, H., Luginbuhl, C., +Martini, J., Monet, A., Pier, J., Riepe, B., Stone, R., Vrba, F., +Walker, R. 1996, USNO-SA1.0, (U.S. Naval Observatory, Washington +DC).
+
+This catalog has been included with permission of USNO as long as +we mention the following stipulations:
+
+
It may not be the latest version, +check +with http://ad.usno.navy.mil.
+
+
If you paid for XEphem, you paid for +the software, not this catalog. The catalog is available free from +the USNO.
+
+
Inclusion of the SA2.0 catalog does +not +imply an endorsement of XEphem by USNO; nor did I have privileged +access to the catalog; nor does the US Government affirm or +guarantee that XEphem works properly in any way.
+
+
+
+

7.5.3 Proper Motion catalogs

+
+These large catalogs include information regarding proper motion. +Two such catalogs are currently available ready for XEphem. You may +only use one at a time, by choosing the corresponding toggle
+
+PPM catalog

+
+
This is the Positions and Proper Motion +catalog of S. Roeser and U. Bastian, Astronomisches +Rechen-Institut, Heidelberg, published in 1990. The PPM includes +468,586 stars rather evenly distributed throughout both +hemispheres. This averages out to more than 10 stars per square +degree. The set here includes the original North and South +editions plus the extended supplement. The set includes more than +99% of the stars in the original SAO catalog and some 70% of the +Henry Draper Catalogue (HD). While the SAO catalog is more or less +complete to V=9, with stars as faint as V=10, the PPM catalog is +fairly complete to V=9.5, and goes somewhat deeper than V=10.
+
+
+Hipparcos and Tycho-2
+
+
This catalog is a combination of the +Hipparcos and the Tycho-2 astrometric catalogs published by the +European Space Agency. This catalog contains all Hipparcos stars +for which astrometric and magnitude values are assigned, and all +additional non-redundant entries from the Tycho-2 catalog except +multiple-component entries. There is a total of some 2.5 million +stars, or about 60 stars per square degree. One example of a star with +high proper motion is Groombridge 1830 (HD 103095), in Ursa Major, +near 11h53m 37d44m. For a nice discussion see Burnham's Celestial +Handbook, Volume III, page 1978. By comparing its position in either +PM catalog with the same entry from the GSC one can deduce this +particular GSC field was evidently taken in early 1983.
+
+ +
+UCAC
+

+This choice allows using the USNO Astrographic catalog with XEphem. For +more information on this catalog please refer to +here. +As of release UCAC4, the directory specified must be that which contains +the u4b and u4i directories. In turn, u4b must contain all 900 z files and +u4i must contain u4index.unf and u4hpm.dat. +
+
+

7.5.4 Skip likely duplicates

+All of the above may be used together with the regular database +facility of XEphem. If this option is on, XEphem eliminates what +appears to be redundant entries for the same star from the various +catalogs. Two stars are considered the same if their positions match +within the given number of arcseconds and their brightnesses differ by +less than the given number of magnitudes. (The generous default +magnitude tolerance is because the GSC and the PPM use varying +filters).
+
+When deciding on the final selection for such duplicate entries the +highest priority is the local database, then the HD or SAO entry, +then the PPM entry, then Hipparcos, then Tycho and finally the GSC +entry.When you have made the desired entries, pressing Apply will attempt to check each +filename, directory and Internet choice, as appropriate. The cursor +will be a Watch while the tests are in progress. If something does not +seem correct, a warning window will appear and the option will be +turned back off. If everything seems to be operating correctly, you +are in business. The Ok button +does the same thing but then also closes the window if they all +succeed.
+
+

7.5.5 Notes

+If at any time something goes wrong during the acquisition of any +Field Stars from any View, the responsible option in that view is also +turned off automatically. The problem should be corrected and Field +stars turned on again.
+
+All field star sources will silently enforce limits on the total number +of stars they yield for any query. As of this writing, local queries +except USNO are limited to 30 degrees; USNO are limited to 15 degrees; +network queries impose various limits.
+
+

8.0 Preferences
+

+The simple choice preferences are covered in the Main Window section. +See Preferences menu,
+

8.1 +Fonts

+
This +window lets you change most of the fonts used by XEphem. The basic +technique is to specify a font, use the four toggle buttons to choose +which action to take then perform the action in a particular font +context by clicking in the menus accessed from the menubar across the +top.
+
+To browse the available fonts, type a pattern in the field provided and +click Search. This will +display +the names of all fonts matching a pattern. To see all available fonts, +use the wild card pattern of a single star (*). To be more specific, +specify the fields desired and fill the gaps between with the star +wildcard. See the next section for a description of each field.
+
+Clicking a font in the top list will display a sample and its full name +in the region at the bottom.
+
+The Buttons, Text and Other menus in the menu bar across +the top provide ways of referring to several font contexts. The four +toggle buttons just below the menu bar determines what happens when one +of these context menu buttons is clicked, as follows:
+
+Get current
+
+
When this toggle is active, clicking a +context menu button will cause the name of the current font for that +context to be displayed in the pattern field and history list.
+
+Get default
+
+
When this toggle is active, clicking a +context menu button will cause the name of the last saved default +font for that context to be displayed in the pattern field and +history list.
+
+Set
+
+
When this toggle is active, clicking a +context menu button will cause the font named in the pattern field +of this window to be applied to that context throughout XEphem.
+
+Restore default
+
+
When this toggle is active, clicking a +context menu button will cause its last saved font value to be +reinstated through XEphem.
+
+Fonts that have been changed from their default values are tagged in +the Preferences » Save +window (when opened or after you do a Refresh). This allows you to Save +the new fonts set here permanently. If you do not Save it, the change +only effects XEphem until you exit.
+
+There are a few situations scattered around within XEphem for which +changing fonts at runtime from this window does not work perfectly. +For example, changing to a smaller font does not shrink some windows +as much as you might expect. Such anomalies are known challenges and +do not indicate serious problems. After Saving the fonts and +restarting XEphem, all will work again as expected.
+

8.1.1 XLFD

+The font names are in the format called X Logical Font Description. +There are 15 fields separated by hyphens. The fields are as follows:
+
+
+
+
Foundry
+
+

+The organization that digitized the font data.
+
+Family
+
+
The commercial name of the font.
+
+Weight
+
+
The relative weight of the font, such as bold, medium or regular.
+
+
+Slant
+
+
A code indicating the slant:
+
+
r Roman (no slant)
+i Italic (slant left)
+o Oblique (slant left)
+
+Set Width
+
+
The width with respect to what the foundry considered normal. +Choices include normal, condensed, narrow, double.
+
+Additional Style
+
+
Anything else needed to uniquely identify the font, such as sans +or serif.
+
+
+Pixel Size
+
+
The height of an em in +pixels.
+
+Point Size
+
+
The height of an em in +tenths of a point, where one point is 1/72 inch.
+
+Horizontal Resolution
+Vertical Resolutoin
+
+
The resolution of the device for which the font was designed, in +pixels-per-inch.
+
+Spacing
+
+
A code indicating the spacing between characters in the font:
+
+
M Monospaced (fixed pitch)
+P Proportional spaced (variable pitch)
+C Character cell (each character occupies the same size box)
+
+
+Average Width
+
+
Average width of all characters in the font, measured in tenths +of +a pixel.
+
+Registry
+Enoding
+
+
The registration authority and their name for the character set +from which the characters in the font are drawn. For example ISO8859-1, +also known as Latin-1.
+
+
+Scalable fonts are indicated by 0 for point size, pixel size, x and y +resolution and average width (fields 7, 8, 9, 10 and 12). To choose a +specific scalable font, specify desired values for some but not all of +these fields, letting the system fill in the others.
+
+

8.2 +Colors

+This window lets you change most of the +colors used by XEphem. The basic technique is to use the four toggle +buttons to choose which action to take then perform the action in a +particular color context by clicking in the menus accessed from the +menubar across the top.
+
+The possible actions are as follows:
+
+Get current
+
+
When this toggle is active, clicking a +color context menu button will cause the current color for that +context to be displayed in the color patch in the lower right corner +of this window.
+
+Get default
+
+
When this toggle is active, clicking a +color context menu button will cause the last saved default color +for that context to be displayed in the color patch in the lower +right corner of this window.
+
+Set
+
+
When this toggle is active, clicking a +color context menu button will cause the color currently being +displayed in the color patch of this window to be applied to that +context throughout in XEphem.
+
+Restore default
+
+
When this toggle is active, clicking a +color context menu button will cause its last saved color to be +reinstated.
+
+Above the color patch are three sliding scales that allow you to define +a color using either Red+Green+Blue or Hue+Saturation+Value, depending +on the toggle. Each scale ranges from 0 through 255. Hue is the basic +spectral color, where 0 is red, 85 is green, 170 is blue. Saturation +is the amount of color purity, where lower values mix in more white. +Value is like brightness, where 0 is totally black.
+
+The text field at lower left allows you to type a color using one of +the standard descriptive names, such as "steel blue", or in hex RGB +notation, for example #ff0000 for pure red, #00ff00 for pure green +#0000ff for pure blue. After typing the desired value, press Enter to +set the scales and see the color in the patch. This field is also set +automatically when the scales are used to set a color, during Grabbing +(see next), and when a color context is retrieved.
+
+The history list in the lower left stores each color name that is used +from the name field, making it easier to reuse a color. Selecting a +name +will copy it to the name field and show it in the color patch. You can +select history entries with the mouse, or by browsing with the Up and +Down keyboard arrow keys.
+
+

8.2.1 Colors Control menu

+
+
Night +mode
+
+
+
+
This changes the XEphem background to +black, and uses the Night vision color for all text. Clicking this +back off will restore the previous colors. Note that when Night vision +is on, you may not change the colors it effects. This is to eliminate +confusion with regards to whether or not they are new in the Save +window.
+
+
+
Grab +color
+
+
+
+
Press this button and the cursor will +change to a crosshair. Move the cursor around on the screen and the +color of the pixel under the crosshair will be displayed; press +Button1 to capture the color and resume normal cursor operation.
+
+
+
Clear +history
+
+
+
Erases all entries in the History list.
+
+
+
+When a color context is changed, it also changes the corresponding +resource. In the Preferences +» Save window you will notice that the resource becomes +marked as Modified (when opened or after you do a Refresh). This +allows you to Save the new color choice permanently. If you do not +Save it, the change only effects XEphem until you exit.
+
+

8.2.2 Star colors

+XEphem assigns colors to stars based on their spectral classification. +The default colors were chosen based on work done by Mitchell Charity. +The colors are specified using X Resources. The resource names each +begin with "XEphem.starSpect" followed by one or two characters. The +value of the resource is the color. The following table shows the +default spectral color resources built into XEphem:
+  
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
XEphem Resource Name
+
Default Color Value
+
XEphem.starSpectO#9bb0ff
XEphem.starSpectB#aabfff
XEphem.starSpectA#cad7ff
XEphem.starSpectF#f8f7ff
XEphem.starSpectG#fff4ea
XEphem.starSpectK#ffd2a1
XEphem.starSpectM#ffcc6f
XEphem.starSpectN#ff8f2c
XEphem.starSpectS#ffc574
XEphem.starSpectC#ff9e40
XEphem.starSpectT#ffd19a
XEphem.starSpectW#c4c4ff
+
+
+XEphem uses the closest entry with matching first character. If no +entry is found with matching first character then white is used and a +message is added to the System log. The +spectral color resource values may be edited or additional resources +can +be added but this must be done by hand, there is no GUI support +available. Always edit the XEphem resource file while XEphem is not running to avoid any chance of +conflict.
+

8.3 Save

+This window displays all of the +options, +settings and controls, collectively called Preferences, throughout +XEphem that may be saved and +reinstated next time the program is started. XEphem has many such +preferences, so +they are separated into categories in this window for easier +management. Each category may be expanded or collapsed using the ++/-  toggle square to show each individual preference.
+
+Preferences are saved using the standard Resource mechanism provided by +the X Window System. These resources are saved in the file XEphem +located in the Private directory.
+
+Each preference may be tagged for saving. The toggle at the top +controls whether all tagged preferences will be Autoatically saved +when XEphem is Quit.
+
+Preferences have been divided into two classes.
+
Major: In the opinion of the author these +preferences are sufficiently interesting that they are likely to be +worth saving and automatically restoring between one invocation of +XEphem and the next.
+
+ Minor: Everything else, presumably less critical in nature. It +is expected that you are likely to +change these preferences frequently in due course while operating +XEphem yet they do not cause major effects on program behavior so +saving them at +any one particular setting is not especially compelling. Minor +preferences are things like window size and position, scale settings +which +only effect views, and all of the Sky View Filter and Option settings.
+
+This distinction is of course rather arbitrary so please take +care when changing and saving preferences so the ones you want are +saved.
+
+
The number of preferences in each class currently tagged +for saving is indicated by messages near the top.
+
+The scrolled area can display each preference, whether it is tagged for +saving and the ability to change whether it is tagged. Each category of +preference can be expanded for more detail using the +/- toggle square.
+
In the expanded view, each preference and its value are +shown exactly +as it will appear in the disk file if Saved. Those preferences +which differ from the last time they were Saved, or since XEphem was +started if no Save has yet occurred, are marked with a bullet. Major +preferences are marked with a solid bullet, Minor preferences with an +hollow +bullet. A toggle next to each preference allows individual selection +over whether the preference will be written to disk on the next Save. +After each Refresh, the toggles are set for those preferences found to +have changed since the last Save if their class is set to be +automatically tagged. Each toggle may be changed manually in either +direction to override this automatic behavior on an individual basis +if desired but not these will be overridden with the next Refresh.
+
+In the collapsed view, if at least one Major preference is out of date +in a category, a solid bullet is placed next to the category heading; +otherwise if at least one Minor preference is out of date a hollow +bullet is used.
+
+
+Note that the information in this window does not +automatically track changes in preferences as XEphem is used. You must +use Refresh to update the status manually when desired. In particular, +the values which are Saved are what they were the last time Refresh +was performed, not what they actually are at the moment Save is +activated.
+
+
+Save now
+
+
Write each tagged preference to disk to +the XEphem resource file. +If the file already exists, it will first be copied to XEphem.bak in +the same directory. If a preference already exists in the file it will +be +edited in-place, otherwise a new entry is added at the bottom. Other +lines in the file are left unchanged. After using Save, all preferences +will be considered up to date, even if they were not selected to be +written to the preference file.
+
+
N.B. The values saved are as they +appear in this window, which may be different from their current +value if they have changed since the last Refresh.
+
+Refresh
+
+
Update the changed and save status of +each preference. This refresh action also +happens automatically after a Save is performed and just before +XEphem quits when deciding which preferences to save if the Automatic +saving option is enabled.
+

9.0 Multifunction Tools

+The tools in this section are used in several different places +throughout XEphem. The descriptions here are generic. If there are any +special issues when used in certain contexts they will be described in +the appropriate sections elsewhere.
+
+ +

9.1 Trails

+ This +window allows you to define a set of time values spaced at regular +intervals before and after the current XEphem time and define which +and in what manner values will be annotated with a time stamp.
+
+This is a general purpose facility used in several places throughout +XEphem, generally for the purpose of establishing a trail of object +motion. This description will be of a general nature.
+
+Six format parameters must be specified:
+
+Orientation
+
+
+
This choice determines where the +stamps +appear in relation to their corresponding position mark. The first +several options should be self-explanatory. The last two, Path-left and +Path-right, cause the time stamps +to be placed to the left or right side of the trail path, as one would +perceive these directions when traversed in forward time order. In +no case are the time stamps ever drawn to require you to turn your +head more than 90 degrees left or right.
+
+Interval
+
+
This is the time interval between each +step. Choose from among several predefined intervals or choose Custom +and enter any desired interval +in the space provided. It is okay to specify more than 24 hours to +achieve intervals of several days. It is also okay to specify negative +values to run time backwards.
+
+Label
+
+
This choice determines which intervals +will to be labeled with a time stamp. Choose from among several +options or choose None if no labeling +is desired. Times will be printed surrounded by parentheses if the +object is an Earth satellite and it is eclipsed.
+
+Format
+
+
This choice determines the format in +which to display +each time-stamp. Choose Hour:Minute +with or without Seconds or the date formatted as per the Preferences » Date formats +option in the Main menubar, see Preferences.
+
+Font
+
+
This choice sets the size of the +annotation text font.
+
+Start
+
+
This choice specifies how the first +time value is derived from the current XEphem time. The lower right +radio box offers several methods of determining the beginning of the +first time interval. The idea here is generally to match the time +values of each time mark with the precision implied by the format, but +to allow other options for special situations.
+
+Whole min rounds the current +XEphem time forward to the next whole minute, if necessary;
+Whole day rounds to the next +whole day.
+Whole interval rounds to the +next whole multiple of whatever time interval is set (as specified +in the Intervals choices).
+Now means to begin with the +current XEphem time without any initial changes.
+
+Two scales near the bottom specify the number of tick marks to create +before and after the starting time.
+
+Once the choices are set up as desired, Ok will create the trail and the +window will disappear. Apply +will create the trail but the window will remain up for further use. Close just dismisses the window +without creating a trail.
+
+Even with all this flexibility pleasingly annotated trails are not +trivial to generate. It is hoped that a little experimentation can +yield acceptable results in most cases. Note that this general trail +facility does not provide close coupling with the view being +supported. For example, some views do not support setting a trail for +an object which has changed while the Trail Setup is up. Also, views +may vary in their support of having trails defined while they are not +visible. Each view may establish its own initial default values but +changes usually remain in effect for subsequent instances of Trail +Setup windows from the same view. Some views permit more than one +Trail Setup to be active at one time. In short, the operational +boundary conditions vary by view.
+
+The settings for each view context may be saved using +Preferences » Save. + +

9.2 Printing

+This +window lets you print the current view or save it to a file. In either +case the format used is Postscript.
+
+Title
+
+
+
If you enter a string in the text +field +labeled Title, the string will be printed centered across the top of +the page.
+
+Color
+Black
+
+
+
The top left pair of toggle buttons +allow you to choose whether color commands will be included in the +Postscript generated.
+
+Letter
+A4
+
+
+
The center pair offer the choice of US +Letter size 8½x11" with ¾" margin or ISO A4 210x297mm +with 15mm margin.
+
+Thin lines
+Thick lines
+
+
+
The right pair offer the choice of +drawing with very thin lines or somewhat thicker lines.
+
+Save to file
+
+
+
If you choose to Save to a file, turn +on that toggle button and enter the desired file name in the text +box to the right of the toggle button. Unless begun with a / the +file name is in the Private directory.
+
+
+Print command
+
+
+
If you choose to print directly to the +printer, turn on that toggle button and enter a command which will +print a Postscript file on your system. The command should expect +the name of a file to print as its first and only argument. A +temporary file will automatically be created for this command and +deleted when printing is completed. You can also enter a command +here that will display the file, such as gv to preview the file then +and print from there.
+
+When ready, click Ok. To avoid +printing, press Cancel. If +your +current viewing fonts are not available for printing, error recovery +will depend upon your local print system. +

9.3 Annotation

+
+
+
+This window allows you to add your own text +and lines to any graphical +view. Annotation locations are saved in the world coordinates of the +view. For example, in the Earth view they are saved in Lat and Long. In +the Sky View, they are saved in the current display mode, that is, +either RA/Dec or Alt/Az. The window shows which view each annotation +refers to.
+
+You may Save the current set of annotations to the specified +file or Load a set by selecting from the files presented in the +pop-down menu. Annotation files use the suffix .ano. XEphem tries to +automatically load the file specified in the Save field when it starts. +This +file name can be saved in the Preferences » Save window in +the Annotation section.
+
+To add a new annotation entry:
+
+
    +
  1. click New to create a blank entry,
  2. +
  3. type in the desired text,
  4. +
  5. click Place to begin the placement procedure,
  6. +
  7. move the cursor to position the text where desired,
  8. +
  9. click and hold to anchor the text and begin drawing a line,
  10. +
  11. move the pencil cursor to position the far end of the line as +desired,
  12. +
  13. release.
  14. +
+
+To move an existing entry, click Place +again and proceed as above with step 4.
+
+To draw just a line with no text, leave the text field blank.
+
+To place text with no line, immediately release after anchoring the +text.
+
+To change just the text of an existing entry, edit the text and type +Enter.
+
+To temporarily hide one entry, click Hide on its line. To hide +all entries click Hide all, to toggle which entries are hidden +click Toggle.
+
+To delete an entry, click Delete.
+
+

10.0 Credits

+The following are in no particular order but all are greatly +appreciated: +

Thanks to Lutz Mandle for restoring SOHO support in 2012; showing sun in +moonview; proxy support in web downloads; improved horizon clipping and +correct use of Sky View options in individual planetary views. +

Enormous advances in data quality were +contributed by the late Guillermo Andrade Velasco.

+

The Blue Marble project at +http://earthobservatory.nasa.gov/Newsroom/BlueMarble +for their +wonderful +whole-earth color images.

+

+Corrections for ecliptic longitude from Adrian Robinson, adrianprobinson@yahoo.co.uk

+

The stellar spectra colors are based on work by Mitchell Charity, +mcharity@lcs.mit.edu, at +http://www.vendian.org/mncharity/dir3/starcolor. +

+

Thanks to Paul Schlyter for some improved anomaly code.
+

+

Dean Huxley contributed improved constellation figures and improved +the Tycho Hipparcos data base.
+

+

+Thanks to Thomas Conze, thomas.conze@gmx.net, for several great +patches. +

+

Thanks to Matei Conovici, cmatei@profis.ro, for making Sky View's "live +report" option a saveable preference.

+

Several nice tweaks and some thorough debugging from John O'Donnell, +jmodonnell@earthlink.net. +

+

+Thanks to Jean-loup Gailly and Mark Adler for zlib. +

+

+Thanks to Eric S. Raymond for his fine implementation of base64. +

+

Milky Way contour by Pertti Paakkonen, ppaakko@cc.joensuu.fi, in +turn +based on map from http://www.ebicom.net/~rsf1/fun/sm-new.htm copyright +(c) +1972,2001, R.S. Fritzius, may be reproduced for non-commercial purpose. +

+

The local magnetic declination model is from the DoD World Magnetic +Model as published at http://www.ngdc.noaa.gov/seg/potfld/DoDWMM.shtml +

+

Thanks to Fridger Schrempp, fridger.schrempp@desy.de, for his long +term encouragement of the project, and particularly for many +suggestions +to improve ease of use.

+

Thanks to Wolfgang Steinicke of www.ngcic.org for allowing use of +his corrected NGC and IC catalogs.

+

Earth satellite orbit propagation is based on the NORAD SGP4/SDP4 +code, as converted from FORTRAN to C by Magnus Backstrom, +b@eta.chalmers.se. See "Spacetrack Report Number 3: Models for +Propagation of NORAD Element Sets" at +http://www.celestrak.com/NORAD/documentation/spacetrk.pdf +

+

Improvements to Delta T code, help and wording contributed by Neal +McBurnett, nealmcb@bell-labs.com.

+

Any parts of the USNO SA2.0 catalog that are included with XEphem +distributions are done so with the following understandings:

+
It may not be the latest version, check with http://ad.usno.navy.mil +

If you paid for XEphem, you paid for the software, not this +catalog. The catalog is available free from the USNO.

+

Inclusion of the SA2.0 catalog does not imply an endorsement of +XEphem by USNO; nor did I have privileged access to the catalog; nor +does the US Government affirm or guarantee that XEphem works +properly in any way.

+
+Thanks to Atsuo Ohki, ohki@gssm.otsuka.tsukuba.ac.jp, for numerous +fixes and features. +

Thanks to Robert Lane, roblane@alum.mit.edu, for Uranonmetria 2000 +work.

+

+Martian relief map completed June 2000 using data from Mars Orbiter +Laser +Altimeter on board the Mars Global Surveyor, operated by the Jet +Propulsion +Laboratory, NASA. +See http://marsprogram.jpl.nasa.gov/mgs +

+

The near real-time weather map in the Earth view is provided by +the Space Science and Engineering Center at the University of +Wisconsin. +See their web site at http://www.ssec.wisc.edu/ssec.html +

+

The XEphem logo was contributed by Jonathan Adams, +jfadams@mail.arc.nasa.gov. The galaxy background image is from Galaxy +Photography, www.galaxyphoto.com.

+

For the years 1999-2010 the natural satellite ephemerides for Mars, +Jupiter, Saturn and Uranus are based on developments in mixed +functions computed and contributed at Bureau Des Longitudes, +http://www.bdl.fr +by J.-E. Arlot, Ch. Ruatti and W. Thuillot. Many +thanks!

+

Outside this range, Jupiter's moons based on information in +"Astronomical Formulae for Calculators" by Jean Meeus. Richmond, Va., +U.S.A., Willmann-Bell, (c) 1982. Saturn's moons based on code and +ideas supplied by Dan Bruton, Texas A&M, astro@sfasu.edu. For all +dates, ring tilts based on "RINGS OF SATURN" program by Olson, et al, +Sky & Telescope, May 1995, page 95. C code as converted from BASIC +by pmartz@dsd.es.com (Paul Martz).

+

Thanks to Monty Brandenberg, mcbinc@world.std.com, for his +assistance and solution to the unaligned access messages on Digital +UNIX.

+

Thanks to Christophe Magneville, cmv@hep.saclay.cea.fr, for finding +an array subscript and a numeric overflow problem in libastro.

+

Thanks to Jean-Etienne Lamiaud for a fix to +prevent gif color tables from hogging more than their share of X +colormap entries, many corrections to xephem_sites, and a nice speedup +to +Sky View depth sorting.

+

Thanks to Egil Kvaleberg, egil@kvaleberg.no, for key idea on how to +support 8 bit FITS images.

+

Thanks to Stuart Levy, slevy@ncsa.uiuc.edu, for his work converting +the Tycho ESA mission database +adc.gsfc.nasa.gov:/pub/adc/archives/catalogs/1/1239 into xe format.

+

Images of Saturn from STScI.

+

Many formulas and tables are based, with permission, on material +found in: "Astronomy with your Personal Computer" by Dr. Peter +Duffett-Smith, Cambridge University Press, (c) 1985.

+

The high precision planet positions were implemented for XEphem by +Michael Sternberg <sternberg@physik.tu-chemnitz.de> based on the +papers

+
    +
  1. "Planetary Theories in rectangular and spherical variables: +VSOP87 solution" by Bretagnon P., Francou G., in Astron. Astrophys. +202, 309 (1988), ftp://ftp.bdl.fr/pub/ephem/planets/vsop87/, and
  2. +
  3. "Representation of planetary ephemerides by frequency analysis. +Application to the five outer planets" by Chapront J., Astron. +Astrophys. Suppl. Ser. 109, 181 (1995), ftp://adc.gsfc.nasa.gov/\ +pub/adc/archives/journal_tables/A+AS/109/181.
  4. +
+See the comments in chap25.h and vsop87.h for accuracy estimates. +

The high precision Moon code was also implemented for XEphem by +Mr. Sternberg based on code supplied by Stephen L. Moshier +<moshier@world.std.com> at +ftp://ftp.std.com/pub/astronomy/selenog.zip. Mr. Sternberg also +incorporated the algorithm for deltaT, based on code also provided by +Mr. Moshier. See the comments in deltat.c for full references. My +greatest thanks to Messrs. Sternberg and Moshier for their generous +and kind assistance in making XEphem a program of first-class accuracy.

+

The improved lunar libration trig series fit to JPL DE403 was +provided by Stephen L. Moshier, <moshier@world.std.com>.

+

Many thanks to Michael Naumann, Michael.Naumann@eso.org, and Miguel +Albrecht, malbrech@eso.org, at ESO and Tim Kimball, archive@stsci.edu, +at STScI for their help and support accessing the DSS at their +institutions. And thanks to ESO and STScI in general for offering this +service at all.

+

Thanks to Seiichi Yoshida, seiichi@muraoka.info.waseda.ac.jp, for +a subtle fix to the constellation code in 3.1.

+

The sample spacecraft elements were furnished by Ron Baalke, +baalke@jpl.nasa.gov.

+

Thanks to Vance Haemmerle, vance@toyvax.Tucson.AZ.US, for his +updated and appended lists of spacecraft elements, and work on +improvements to the solar system plotting of long-period trail +sequences.

+

Thanks to Jeroen Valkonet (jeroenv@cvi.ns.nl) for planting the seed +which grew into the new bitmap clipmask approach of drawing the stars.

+

Thanks to Jim Bell, jimbo@cuspif.tn.cornell.edu, and the team at +Mars Watch for encourage, support and ideas for the first Mars albedo +map in XEphem. The map as of Version 3.3 is from +http://maps.jpl.nasa.gov/mars.html +

+

Thanks to Dimitromanolakis Apostolos <apdim@grecian.net> for +his contribution leading to support for fetching DSS in gzipped form.

+

Thanks to Miguel Albrecht, malbrech@serv2.hq.eso.org, at ESO for +his assistance and support of their fine Web access facilities to the +GSC.

+

Rotated trail text uses the xvertext package. Here is the copyright:

+
xvertext 5.0, Copyright (c) 1993 Alan Richardson +(mppa3@uk.ac.sussex.syma) +

Permission to use, copy, modify, and distribute this software +and its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both the copyright notice and this permission notice +appear in supporting documentation. All work developed as a +consequence of the use of this program should duly acknowledge such +use. No representations are made about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty.

+
+IC.edb was submitted by Christos Siopis, siopis@astro.ufl.edu. +

Constellation algorithm is from a paper by Nancy G. Roman, +"Identification of a constellation from a position", Publications of +the Astronomical Society of the Pacific, Vol. 99, p. 695-699, July +1987. Before 3.6 the figures were the work of Chris Marriot. The list +of +boundaries is derived from the three files constell.1875.data, +constell.1875.hdr and constell.doc at +ftp://explorer.arc.nasa.gov/pub/SPACE/FAQ/.
+

+

The WCS solver algorithm technique was inspired by a paper by Frank +Valdes in PASP, vol 107, page 1119 (1995).
+

+

New version of Gemini constellation by Lutz Maendle, +lmaendle@csi.com.

+

Thanks to Dr. Harald Fischer (fischer@vs-ulm.dasa.de) for the GPS +awk routine and sample position database.

+

The high-precision precession routine is from 1989 Astronomical +Almanac, as interpreted by Craig Counterman. Mr. Counterman also +deserves the credit for providing the initial encouragement to write +an astronomical tool specifically for X Windows back in 1990, and for +significant assistance while developing the heliocentric models.

+

The Earth map is derived from data supplied with xearth which +included the following notice:

+
Copyright (C) 1989, 1990, 1993, 1994 Kirk Lauritz Johnson +

Permission to use, copy, modify, distribute, and sell this +software and its documentation for any purpose is hereby granted +without fee, provided that the above copyright notice appear in all +copies and that both that copyright notice and this permission +notice appear in supporting documentation. The author makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty.

+

THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

+
+

The Earth shaded elevation relief map shipped with XEphem 3.6 is +from the +National Geophysical +Data Center. The one with 3.7.6 is from +http://www.shadedrelief.com/world_relief/download.html +

+

The pulsar and Radio databases are based on lists supplied by Robert +Payne, rpayne@nrao.edu. Errors in converting to XEphem are mine.

+

The lunar image is based on one I found surfing at: +ftp://seds.lpl.arizona.edu /pub/images/planets/moon/fullmoon.gif. The +calculations for the longitude of the terminator and the solar +altitude are based on the program colong.bas by David Bruning and +Richard Talcott, published in _Astronomy_, October 1995, page 76.

+

Thanks to Richard Clark (rclark@lpl.arizona.edu) for an improved +version of anomaly.c.

+

A great source of comet information is http://encke.jpl.nasa.gov +

+

Special thanks to Uwe Bonnes, bon@LTE.E-TECHNIK.uni-erlangen.de, +and Ralphe Neill, ran@rdt.monash.edu.au, for their many ideas and +support.

+

Many test cases were gleaned from the pages of Sky and Telescope, +(C) Sky Publishing Corp.

+

Many of the sample cities in the "xephem_sites" file are from the +xsat program, which included the following notice:

+
Copyright 1992 by David A. Curry +

Permission to use, copy, modify, distribute, and sell this +software and its documentation for any purpose is hereby granted +without fee, provided that the above copyright notice appear in all +copies and that both that copyright notice and this permission +notice appear in supporting documentation. The author makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty.

+
+

Most of the sample observatories in the "xephem_sites" file are +transcribed, with permission, from the table beginning on page 28 in +the July 1993 issue of Sky and Telescope. Any errors in transcription +are strictly my own.

+

Thanks to Lowell Observatory and the Minor Planet Center for +maintaining their huge lists of asteroids. See +ftp://ftp.lowell.edu/pub/elgb/astorb.html + and +http://cfa-www.harvard.edu/cfa/ps/mpc.html +, respectively.

+

Thanks to the National Space Science Data Center and the Smithsonian +Astrophysical Observatory for the SAO star catalogue.

+

Thanks to the members of the Saguaro Astronomy Club for the +preparation and free distribution of their deep-sky database. Any +errors +in conversion to the .edb format are strictly mine.

+

Thanks to Chris Beecroft <aldebaransys@home.com> for his +encouragement and technical assistance in adding postscript. The +limited +results in no way reflect on his capabilities. Initial encouragement +was +also received from Frank M. Siegert +<frank@miranda.tue.schwaben.de>. And thanks to everyone who has +asked for printing over the years -- I now admit that I like it too!

+

Bright stars are based on the 5th Revised edition of the Yale Bright +Star Catalog, 1991, from +ftp://adc.gsfc.nasa.gov/pub/adc/archives/catalogs/5/5050. Common names +supplied by Robert Tidd (inp@violet.berkeley.edu) and Alan Paeth +(awpaeth@watcgl.waterloo.edu). Any errors in conversion to the .edb +format are strictly mine.

+

I wish to thank all the organizations behind the incredible Internet +for its maintenance and free and easy access. I also wish to express +my hope that it retains the spirit of cordial cooperation it fostered +in its formative years.

+

I learned most of what I know of X Windows and Motif programming +from ICS courses and material found in the various excellent texts +from O'Reilly & Associates, Inc.

+

Thanks to MIT and the X Consortium for inventing, championing and +maintaining the X Window system, and the various contributing +organizations to the Open Software Foundation for Motif. Their vision +of network-aware graphics is still unmatched.

+

Similarly, I will be forever indebted to all who contributed to +UNIX. My passion and appreciation for this remarkable operating system +matured while I enjoyed four wonderful years at Kitt Peak National +Observatory (now the National Optical Astronomical Observatory), +Tucson, AZ, in the early 80's. As with X, UNIX plays a central role in +my enjoyment of a career in scientific computing.

+

It was at KPNO where I met the late Dr. W. Richard Stevens, a fellow +champion of the elegance of the UNIX architecture, life-long friend +and mentor.

+

Special thanks to all the folks over the years who have provided +innumerable ideas, suggestions and bug reports, both for XEphem and +its ancestor, ephem. A major benefit to writing and distributing these +programs has been the chance to make many friends from around the +world.

+

Elwood Downey ecdowney@ClearSkyInstitute.com

+


+

+

11.0 Notes

+

11.1 Horizon

+XEphem uses a horizontal plane tangent to the Earth at Elev feet +above sea level as the horizon for all altitude calculations, rise/set +events, etc. Due to Earth's curvature, this is not the same as the +angle up from the local horizon unless the observer is directly on the +ground. The effect can be found from:
+
sin(a)**2 += (h**2 + 2Rh) / (R+h)**2
+
+where:
+
R = radius of earth
+h = height above ground (same units as R)
+a = increase in altitude
+
+The effect is remarkably significant. For example, it is more than +two arc minutes at a height of just 5 feet.
+
+

11.2 glob Patterns
+

+Some of the searches in XEphem can be performed using glob patterns. +The term glob refers to a limited form of pattern matching (limited +with respect to the more capable "regular expression") historically +originating in the UNIX shells for the purposes of specifying a +collection of file names. In XEphem the glob patterns are implemented +using the fnmatch() POSIX function. On GNU systems the flag +FNM_CASEFOLD can be used to make the pattern case insensitive. A glob +pattern is a set of normal text characters interspersed with any of the +following special characters known as wildcards:
+
+ + + + + + + + + + + + + + + + + + + +
glob wildcard
+
Meaning
+
+
?
+
+
matches exactly one character
+
*
+
+
matches zero or more characters
+
[abc]
+
+
matches any one of the specified characters. A +pair of +characters separated by a hyphen denotes a range expression such that +any character  that sorts between those two characters, inclusive, +is matched. If the first character following the [ is a !  or a ^ +then any character not enclosed is matched.
+
+For example, if a list of candidates consists of the following:
+
+    abc
+    aabc
+    abbc
+    acc
+    adc
+
+then the pattern a* matches all; ab* matches abc and abbc; a[ac]* +matches aabc and abbc; a?c matches abc, acc and adc; a[a-c]c matches +abc and acc; a[^a-c]c matches adc; and *b* matches abc, aabc and abbc.
+   
+

11.3 Accuracy

+In the period 1689 through 2247 Jupiter and beyond use CHAPRONT J., +Astron. Astrophys. Suppl. Ser. 109, 181 (1995), otherwise all planetary +ephemerides except Pluto use VSOP87 from Bretagnon P., Francou G., +Astron. Astrophys. 202, 309 (1988). Compared with JPL DE200 for +Mercury, Venus and Mars the accuracy of this model rises to 1" at the +ends of the year range 2000 +/- 4000. For Jupiter and Saturn, the 1" +range is 2000 +/- 2000. For Uranus and Neptune, it is 2000 +/- 6000.
+
+Lunar ephemerides are from S. L. Moshier, December, 1996, available +from ftp://ftp.std.com/pub/astronomy/selenog.zip. Compared with JPL +DE404 the accuracy is better than 0.5" for the period -1369 to +2950.
+
+Other heliocentric objects are well within one arc minute at the time +of the epoch of their elements; this steadily worsens with time since +XEphem does not apply perturbations.
+
+Using a GPS position locator and transit, I have independently verified +Sun and Moon limb rise and set times are accurate to within one minute +and azimuths are within about 0.1 degree.
+
+The natural satellite model from BDL used for 1999-2010 is stated as +good to 1/2 arcsecond accuracy. In my tests against JPL DE405 I would +say this is true about 50% of the time, with a worst case of about 4 +AS.
+
+

11.4 TODO

+The following is the current list of future ideas for XEphem. Thanks +to all who have made suggestions. Please let me know your priorities +or suggest more.
+
    +
  • write a tool to find g/k from a set of predicted magnitudes.
  • +
  • display occultation path between *any* two objects in the Earth +view
  • +
  • add sidereal day and month trail intervals.
  • +
  • just label month and year tickmarks in trails when they change
  • +
  • comet tail pointer
  • +
  • meteor showers, (dedalus)
  • +
  • Iridium flares
  • +
  • option for rise/set info to be Today or Next.
  • +
  • add "Plot JD as date" to plot display
  • +
  • use better earth shape model
  • +
  • add T » F and F » T to Binary
  • +
  • use user-defined horizon for rise/set calculations
  • +
  • way to repeat the Solver for more solutions, as in "solver in a +loop"
  • +
  • expand .edb to capture real variables
  • +
  • more hot-keys
  • +
  • month of lunar phases
  • +
  • Jup and Sat moon timelines and events, ala S&T
  • +
  • separate Telescope view window
  • +
  • connect trails with spline not just line segments
  • +
  • direct connections to Simbad and NED
  • +
  • plot in polar coords
  • +
  • automatic initial Go
  • +
  • topocentric lunations
  • +
  • individual control over trails in sol system
  • +
  • provide a means to save and install multiple color+font schemes.
  • +
  • tool to generate MPC astrometric report
  • +
  • draggable eyepieces
  • +
  • text entry fields to allow higher-precision eyepiece size and PA
  • +
+

11.5 Known Bugs

+
    +
  • Preferences » Time Zone does not update dates of FM/NM if +they happen +to squirm.
  • +
  • length of night wrong when savings time causes dusk after +midnight
  • +
  • center constellation names based on boundaries rather than on +figures
  • +
  • solar trails don't account for long-term (10's of years) +precession
  • +
  • plot's View settings are not Saveable.
  • +
  • figure out calendar prior to Oct 1752.
  • +
  • Sky View trails are not always clipped properly against a user-defined +horizon
  • +
  • The visual magnitudes for all solar system bodies except the +planets do not take into account the phase.
  • +
  • Changing equinox or geo/topo then update, moon view tables do not +update.
  • +
  • Time not correct when system set to POSIX time
  • +
  • Earth satellites are not plotted in Sky View correctly in +geocentric&altaz mode (use geocentric&radec mode).
    +
  • +
+

11.6 History

+In 1981 I purchased a genuine IBM PC. Soon I was building a character +oriented program in C for DOS that displayed ephemeris data, packing as +much as possible on the character-based 24x80 display. That program was +called ephem because it was +as much of the +word ephemeris that would fit +in 8 characters and still retain some sensible meaning. I was using +UNIX at work +so +I made sure it would run there too using the curses library. In +1989 I took a course in Motif. By 1990 it seemed to +have won the UNIX desktop wars so I started converting ephem to +Motif+UNIX. The convention for naming X Window System programs was to +add an x prefix so that +program +was named xephem. I have been +diddling with it ever since. The original ephem is still available.
+ + diff --git a/GUI/xephem/helpmenu.c b/GUI/xephem/helpmenu.c new file mode 100644 index 0000000..fd8e056 --- /dev/null +++ b/GUI/xephem/helpmenu.c @@ -0,0 +1,288 @@ +/* this file contains the code to tigger a browser to display help information. + * to run IE XEHELPURL to full FAT path of xephem.html, such as : + * export XEHELPURL='d:\xephem\help\xephem.html' + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +char helpcategory[] = "Help"; /* Save category */ + +static void hlp_create (void); +static void hlp_close_cb (Widget w, XtPointer client, XtPointer call); +static void hlp_radio_cb (Widget w, XtPointer client, XtPointer call); +static void runCmd (char *cmd); + +#define NBROWSER 7 /* browser choices we support */ +typedef struct { + Widget tb_w; /* selection TB */ + Widget nam_w; /* common name, defs in resources */ + Widget cmd_w; /* command, defs in resources */ +} Browser; +static Browser browser[NBROWSER]; /* entries for browser specs */ +static Browser *curb; /* pointer to current choice */ + +static Widget hlp_w; /* main help shell */ + +static char help_instructions[] = + "XEphem uses a web browser to display help. Use this window to define a\n" + "shell command that sends a URL to your preferred browser. The full URL\n" + "will be substituted where each %s occurs. Select from the examples or\n" + "create a line for your browser; they are live so you can test without\n" + "first closing. Please email us your changes for the user-contrib page.\n"; + +/* trigger help for the given tag. + * if fail so and use the deflt provided, if any. + */ +void +hlp_dialog (tag, deflt, ndeflt) +char *tag; /* tag to look for in help file */ +char *deflt[]; /* help text to use if tag not found */ +int ndeflt; /* number of strings in deflt[] */ +{ + static char *hurl; + static int triedhurl; + char cmd[1024]; + char url[1024]; + char *fmt; + int i, l, urll; + + if (!triedhurl) { + hurl = getenv ("XEHELPURL"); + triedhurl = 1; + } + + if (!hlp_w) + hlp_create (); + + if (!curb) { + xe_msg (1, "Please choose a browser for help"); + return; + } + + /* build url with tag and get length */ + if (hurl) + urll = sprintf (url, "%s#%s", hurl, tag); + else + urll = sprintf (url, "file://%s/help/xephem.html#%s", + getShareDir(), tag); + + /* scan fmt and sub url for each %s */ + fmt = XmTextFieldGetString (curb->cmd_w); + for (l = i = 0; fmt[i]; i++) { + if (fmt[i] == '%' && fmt[i+1] == 's') { + strcpy (cmd+l, url); + l += urll; + i++; + } else + cmd[l++] = fmt[i]; + } + XtFree (fmt); + + /* run as background */ + strcpy (cmd+l, " &"); + runCmd (cmd); +} + +void +hlp_config() +{ + if (!hlp_w) + hlp_create (); + + XtPopup (hlp_w, XtGrabNone); + set_something (hlp_w, XmNiconic, (XtArgVal)False); +} + +/* create the help configuration window (hlp_w). + */ +static void +hlp_create () +{ + Widget w, f_w, l_w; + Arg args[20]; + int i; + int n; + + /* make the help shell and rc */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Help"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + XtSetArg (args[n], XmNtitle, "xephem Help configure"); n++; + hlp_w = XtCreatePopupShell ("HelpConfig", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (hlp_w); + set_something (hlp_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (hlp_w, "XEphem*HelpConfig.x", helpcategory, 0); + sr_reg (hlp_w, "XEphem*HelpConfig.y", helpcategory, 0); + sr_reg (hlp_w, "XEphem*HelpConfig.width", helpcategory, 0); + + /* make the main form */ + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + f_w = XmCreateForm (hlp_w, "HelpF", args, n); + XtManageChild (f_w); + + /* make the title label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + l_w = XmCreateLabel (f_w, "HL", args, n); + set_xmstring (l_w, XmNlabelString, help_instructions); + XtManageChild (l_w); + + /* make each browser control */ + + for (i = 0; i < NBROWSER; i++) { + Browser *bp = &browser[i]; + Widget topw = i == 0 ? l_w : bp[-1].cmd_w; + char name[32]; + + /* control TB on left */ + + sprintf (name, "BrowserChoice%d", i); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, topw); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + bp->tb_w = XmCreateToggleButton (f_w, name, args, n); + XtAddCallback (bp->tb_w, XmNvalueChangedCallback, hlp_radio_cb, 0); + set_xmstring (bp->tb_w, XmNlabelString, " "); + wtip (bp->tb_w, "Try using this browser command"); + sr_reg (bp->tb_w, NULL, helpcategory, 1); + XtManageChild (bp->tb_w); + if (XmToggleButtonGetState(bp->tb_w)) + curb = bp; + + /* name */ + + sprintf (name, "BrowserName%d", i); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, topw); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, bp->tb_w); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + bp->nam_w = XmCreateTextField (f_w, name, args, n); + wtip (bp->nam_w, "Browser name"); + sr_reg (bp->nam_w, NULL, helpcategory, 1); + XtManageChild (bp->nam_w); + + /* remainder is command */ + + sprintf (name, "BrowserCmd%d", i); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, topw); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, bp->nam_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + bp->cmd_w = XmCreateTextField (f_w, name, args, n); + wtip (bp->cmd_w, "Browser command"); + sr_reg (bp->cmd_w, NULL, helpcategory, 1); + XtManageChild (bp->cmd_w); + } + + /* make the Close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, browser[NBROWSER-1].cmd_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + wtip (w, "Close this Help window"); + XtAddCallback (w, XmNactivateCallback, hlp_close_cb, 0); + XtManageChild (w); +} + +/* called on Close */ +/* ARGSUSED */ +static void +hlp_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (hlp_w); +} + +/* called when any TB changes */ +/* ARGSUSED */ +static void +hlp_radio_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int set = XmToggleButtonGetState(w); + int i; + + if (!set) + return; + + /* we are coming on, save in curb and turn all others off */ + for (i = 0; i < NBROWSER; i++) { + if (browser[i].tb_w == w) + curb = &browser[i]; + else + XmToggleButtonSetState (browser[i].tb_w, False, False); + } +} + +/* run the given shell command, return immediately. + */ +static void +runCmd (char *cmd) +{ + int i, pid; + + /* log cmd */ + xe_msg (0, "Running '%s'", cmd); + + /* launch in new shell, parent resumes */ + pid = fork(); + if (pid < 0) { + xe_msg (1, "fork: %s", syserrstr()); + return; + } + if (pid == 0) { + /* child execs sh to run cmd */ + for (i = 3; i < 100; i++) + close (i); + execl ("/bin/sh", "sh", "-c", cmd, NULL); + _exit(1); + } + + /* N.B. we depend on SIGCHLD/reapchildren() in main to avoid zombies */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: helpmenu.c,v $ $Date: 2004/03/16 18:44:38 $ $Revision: 1.25 $ $Name: $"}; diff --git a/GUI/xephem/homeio.c b/GUI/xephem/homeio.c new file mode 100644 index 0000000..4f0ed13 --- /dev/null +++ b/GUI/xephem/homeio.c @@ -0,0 +1,249 @@ +/* functions to support paths relative to HOME, other misc io. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +/* if path starts with `~' replace with $HOME. + * if path starts with '.' replace with pwd. + * we also remove any leading or trailing blanks, and trailing / or \ + * caller should save returned string before calling us again. + */ +char * +expand_home (char *path) +{ + static char *mpath; + static char *home; + static char *pwd; + static int homel; + static int pwdl; + char *p; + int l; + + /* get home, if we don't already know it */ + if (!home) { + home = getenv ("HOME"); + if (home) + homel = strlen (home); + } + + /* get pwd, if we don't already know it */ + if (!pwd) { + pwd = getcwd (NULL, 0); + if (pwd) + pwdl = strlen (pwd); + } + + /* start mpath so we can always just use realloc */ + if (!mpath) + mpath = malloc (1); + + /* skip leading blanks */ + l = strlen (path); + while (*path == ' ') { + path++; + l--; + } + + /* move '\0' back past any trailing baggage */ + for (p = &path[l-1]; p >= path; --l) + if (*p == ' ' || *p == '/' || *p == '\\') + *p-- = '\0'; + else + break; + + /* prepend home if starts with ~ or pwd if starts with . */ + if (path[0] == '~' && home) + sprintf (mpath = realloc (mpath, homel+l), "%s%s", home, path+1); + else if (path[0] == '.' && pwd) + sprintf (mpath = realloc (mpath, pwdl+l), "%s%s", pwd, path+1); + else + strcpy (mpath = realloc(mpath, l+1), path); + + return (mpath); +} + +/* like fopen() but substitutes HOME if name starts with '~' + */ +FILE * +fopenh (name, how) +char *name; +char *how; +{ + return (fopen (expand_home(name), how)); +} + +/* like fopen() but uses Private then Share/sdir dirs unless starts with / or ~. + * return fp else NULL if not found. + */ +FILE * +fopendq (char *fn, char *sdir, char *how) +{ + char buf[1024]; + FILE *fp; + + if (fn[0] == '/' || fn[0] == '~') + return (fopenh(fn, how)); + + if (strchr (how, 'r')) { + /* open for reading -- check plane then both special dirs */ + fp = fopenh (fn, how); + if (fp) + return (fp); + sprintf (buf, "%s/%s", getPrivateDir(), fn); + fp = fopenh (buf, how); + if (fp) + return (fp); + sprintf (buf, "%s/%s/%s", getShareDir(), sdir?sdir:".", fn); + fp = fopenh (buf, how); + if (fp) + return (fp); + } else { + /* always create in private dir */ + sprintf (buf, "%s/%s", getPrivateDir(), fn); + fp = fopenh (buf, how); + if (fp) + return (fp); + } + + /* nope */ + return (NULL); +} + +/* like fopendq() but issues xe_msg() if fails. + */ +FILE * +fopend (char *fn, char *sdir, char *how) +{ + FILE *fp = fopendq (fn, sdir, how); + + if (!fp) + xe_msg (1, "%s:\n%s", fn, syserrstr()); + + return (fp); +} + +/* like open(2) but substitutes HOME if name starts with '~'. + */ +int +openh (char *name, int flags, ...) +{ + va_list ap; + int perm; + + va_start (ap, flags); + perm = va_arg (ap, int); + va_end (ap); + + return (open (expand_home(name), flags, perm)); +} + +/* return 0 if the given file exists, else -1. + * substitute HOME if name starts with '~'. + */ +int +existsh (name) +char *name; +{ + struct stat s; + + return (stat (expand_home(name), &s)); +} + +/* like existsh() but uses Private then Share/sdir dirs unless starts + * with / or ~. + */ +int +existd (char *name, char *sdir) +{ + FILE *fp = fopendq (name, sdir, "r"); + if (fp) { + fclose (fp); + return (0); + } + return (-1); +} + +/* fill and return buf with a unique temporary file name containing the given + * name and suffix + */ +char * +tempfilename (char *buf, char *name, char *suffix) +{ + sprintf (buf, "%s/%s%06ld%010ld%s%s", getPrivateDir(), name, + (long)getpid(), (long)time(NULL), *suffix=='.' ? "" : ".", suffix); + return (buf); +} + +/* get the anchor for all of xephem's support files. + * use TELHOME env first, else ShareDir X resource, else current dir. + */ +char * +getShareDir() +{ + static char *basedir; + + if (!basedir) { + char *th = getenv ("TELHOME"); + if (th) { + basedir = malloc (strlen(th) + 10); + if (basedir) { + (void) sprintf (basedir, "%s/xephem", th); + if (existsh(basedir) < 0) { + (void) sprintf (basedir, "%s/archive", th); + if (existsh(basedir) < 0) { + free (basedir); + basedir = NULL; + } + } + } + } + if (!basedir) { + char *homebase = expand_home (getXRes ("ShareDir", ".")); + basedir = strcpy(malloc(strlen(homebase)+1), homebase); + } + } + + return (basedir); + +} + +/* return a string for whatever is in errno right now. + * I never would have imagined it would be so crazy to turn errno into a string! + */ +char * +syserrstr () +{ +#if defined(__STDC__) +/* some older gcc don't have strerror */ +#include +return (strerror (errno)); +#else +#if defined(VMS) +#include +#include +#else +#if !defined(__FreeBSD__) && !defined(__EMX__) +/* this is aready in stdio.h on FreeBSD */ +/* this is already in stdlib.h in EMX M. Goldberg 27 January 1997 for OS/2 */ +extern char *sys_errlist[]; +#endif +extern int errno; +#endif +return (sys_errlist[errno]); +#endif +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: homeio.c,v $ $Date: 2005/03/05 06:55:58 $ $Revision: 1.24 $ $Name: $"}; diff --git a/GUI/xephem/hznmenu.c b/GUI/xephem/hznmenu.c new file mode 100644 index 0000000..e16e056 --- /dev/null +++ b/GUI/xephem/hznmenu.c @@ -0,0 +1,790 @@ +/* code to manage specifying the local horizon. + * + * to build a standalone test program: + * cc -DTEST_MAIN -I../../libastro -I../../libip -I/usr/X11R6/lib -L../../libastro -L../../libip -L/usr/X11R6/lib hznmenu.c -lXm -lXt -lX11 -lastro -lip -lm + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static double hzn_getdispl (void); +static int hzn_rdmap (void); +static void hzn_create (void); +static void hzn_close_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_unmap_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_help_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_save_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_edit_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_chsfn_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_displtb_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_displtf_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_filetb_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_filetf_cb (Widget w, XtPointer client, XtPointer call); +static void hzn_radio (int choose_displ); +static void hzn_choose (int choose_displ); +static void smoothProfile(void); +static void buildCon(void); +static int azcmp_f (const void *v1, const void *v2); +static void hzn_read (FILE *fp); +static void hzn_write (FILE *fp); + +static Widget hznshell_w; /* the main shell */ +static Widget displtb_w; /* fixed displacement TB */ +static Widget displtf_w; /* fixed displacement TF */ +static Widget filetb_w; /* file name TB */ +static Widget filetf_w; /* file name TF */ +static Widget edittb_w; /* TB whether editing a new profile */ + +#define PSTEP degrad(1) /* max alt or az step in profile, rads */ +#define FLDW 20 /* text fields width */ + +typedef struct { + double z, a; /* az/alt profile, rads E of N and up */ +} Profile; +static Profile *profile; /* malloced Profile[nprofile] sorted by inc az*/ +static int nprofile; /* entries in profile[] */ +static int want_smoothed = 1; /* whether want smoothed profile[] */ +static int is_smoothed; /* whether profile[] is smoothed now */ +#define SZP sizeof(Profile) /* handy */ + + +static char hzncategory[] = "Horizon Map"; /* Save category */ + +#if !defined (TEST_MAIN) + +void +hzn_manage() +{ + if (!hznshell_w) + hzn_create(); + + XtManageChild (hznshell_w); +} + +void +hzn_unmanage() +{ + if (hznshell_w) + XtUnmanageChild (hznshell_w); +} + +int +hznDrawing() +{ + if (!hznshell_w) + hzn_create(); + return (XmToggleButtonGetState (edittb_w)); +} + +/* call to turn off editing */ +void +hznEditingOff() +{ + if (XmToggleButtonGetState (edittb_w)) + XmToggleButtonSetState (edittb_w, False, True); +} + +/* called to put up or remove the watch cursor. */ +void +hzn_cursor (c) +Cursor c; +{ + Window win; + + if (hznshell_w && (win = XtWindow(hznshell_w)) != 0) { + Display *dsp = XtDisplay(hznshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return number of profile entries */ +int +hznNProfile() +{ + if (!hznshell_w) + hzn_create(); + if (want_smoothed && !is_smoothed) + smoothProfile(); + return (nprofile); +} + +/* whether to smooth profiles */ +void +hznRawProfile (int on) +{ + want_smoothed = !on; +} + +/* given an index into the profile return the alt and az */ +void +hznProfile (int i, double *altp, double *azp) +{ + if (!hznshell_w) + hzn_create(); + if (i < 0 || i >= nprofile) { + printf ("Bogus hznProfile %d\n", i); + abort(); + } + *altp = profile[i].a; + *azp = profile[i].z; +} + +/* given an az, return the horizon altitude, both in rads. + */ +double +hznAlt(az) +double az; +{ + Profile *pb, *pt; + double daz; + int t, b; + + if (!hznshell_w) + hzn_create(); + if (want_smoothed && !is_smoothed) + smoothProfile(); + + /* binary bracket */ + range (&az, 2*PI); + t = nprofile - 1; + b = 0; + while (b < t-1) { + int m = (t+b)/2; + double maz = profile[m].z; + if (az < maz) + t = m; + else + b = m; + } + + pt = &profile[t]; + pb = &profile[b]; + daz = pt->z - pb->z; + if (b == t || daz == 0) + return (pb->a); + return (pb->a + (az - pb->z)*(pt->a - pb->a)/daz); +} + +#endif /* !TEST_MAIN */ + +/* add alt/az to profile[] + * we remove all profile entries from this az to previous az. + * call with start=1 to initialize "previous" position. + */ +void +hznAdd (int start, double newalt, double newaz) +{ + static int prev; /* index of previous insertion */ + + /* first time pick closest smaller entry as prev */ + if (start) { + for (prev = 0; prev < nprofile-1; prev++) + if (profile[prev+1].z >= newaz) + break; + } + + /* break in two when crossing through north */ + if (profile[prev].z > newaz + PI) { + double dz0 = 2*PI-profile[prev].z; + double dz = dz0 + newaz; + double alt0 = profile[prev].a + dz0*(newalt-profile[prev].a)/dz; + hznAdd (0, alt0, 2*PI); + prev = 0; + profile[prev].a = alt0; + profile[prev].z = 0; + hznAdd (0, newalt, newaz); + return; + } else if (newaz > profile[prev].z + PI) { + double dz0 = 0-profile[prev].z; + double dz = dz0 - (2*PI - newaz); + double alt0 = profile[prev].a + dz0*(newalt-profile[prev].a)/dz; + hznAdd (0, alt0, 0.0); + prev = nprofile - 1; + profile[prev].a = alt0; + profile[prev].z = 2*PI; + hznAdd (0, newalt, newaz); + return; + } + + /* remove portion from (prev .. new] */ + /* TODO: just compute the indeces and do one memmove() */ + if (profile[prev].z < newaz) { + for (++prev; prev < nprofile && profile[prev].z <= newaz; ) + memmove (profile+prev, profile+prev+1, (--nprofile-prev)*SZP); + } else if (profile[prev].z > newaz) { + for (--prev; prev >= 0 && profile[prev].z >= newaz; prev--) + memmove (profile+prev, profile+prev+1, (--nprofile-prev)*SZP); + prev++; + } else { /* profile[prev].z == newaz */ + profile[prev].a = newalt; + return; + } + + /* make room for and insert new entry at prev */ + profile = (Profile *) XtRealloc ((char *) profile, (nprofile+1)*SZP); + memmove (profile+prev+1, profile+prev, (nprofile++ -prev)*SZP); + profile[prev].a = newalt; + profile[prev].z = newaz; + + /* no longer smoothed */ + is_smoothed = 0; +} + +#if !defined (TEST_MAIN) + +static void +hzn_create() +{ + Widget w, sep_w, om_w; + Arg args[20]; + char *s[1]; + int n; + + /* create main form */ + + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 4); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + hznshell_w = XmCreateFormDialog (svshell_w, "Horizon", args, n); + set_something (hznshell_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (hznshell_w, XmNdialogTitle, "xephem Sky Horizon setup"); + XtAddCallback (hznshell_w, XmNhelpCallback, hzn_help_cb, NULL); + XtAddCallback (hznshell_w, XmNunmapCallback, hzn_unmap_cb, NULL); + sr_reg (XtParent(hznshell_w), "XEphem*Horizon.x", hzncategory, 0); + sr_reg (XtParent(hznshell_w), "XEphem*Horizon.y", hzncategory, 0); + + /* fixed */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + displtb_w = XmCreateToggleButton (hznshell_w, "UseDisplacement",args,n); + XtAddCallback (displtb_w, XmNvalueChangedCallback, hzn_displtb_cb, 0); + wtip (displtb_w, "Define horizon with one altitude at all azimuths"); + XmToggleButtonGetState(displtb_w); + sr_reg (displtb_w, NULL, hzncategory, 0); + set_xmstring (displtb_w, XmNlabelString, " Constant ° "); + XtManageChild (displtb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, displtb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, FLDW); n++; + displtf_w = XmCreateTextField (hznshell_w, "Displacement", args, n); + wtip (displtf_w, "Angle of Horizon cutoff above local horizontal"); + XtAddCallback (displtf_w, XmNactivateCallback, hzn_displtf_cb, 0); + sr_reg (displtf_w, NULL, hzncategory, 0); + XtManageChild (displtf_w); + + /* file field */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, displtf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + filetb_w = XmCreateToggleButton (hznshell_w, "UseMapFile", args, n); + wtip (filetb_w, "Define horizon as a table of altitudes and azimuths"); + XtAddCallback (filetb_w, XmNvalueChangedCallback, hzn_filetb_cb, 0); + set_xmstring (filetb_w, XmNlabelString, " File name: "); + XtManageChild (filetb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, displtf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, filetb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, FLDW); n++; + filetf_w = XmCreateTextField (hznshell_w, "MapFilename", args, n); + wtip (filetf_w, "Name of file containing horizon table"); + XtAddCallback (filetf_w, XmNactivateCallback, hzn_filetf_cb, NULL); + sr_reg (filetf_w, NULL, hzncategory, 0); + XtManageChild (filetf_w); + + /* perform the default */ + hzn_choose (XmToggleButtonGetState(displtb_w)); + + /* browse list */ + + s[0] = ".hzn"; + om_w = createFSM (hznshell_w, s, 1, "auxil", hzn_chsfn_cb); + wtip (om_w, "Select a file containing a horizon profile"); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, filetf_w); n++; + XtSetArg (args[n], XmNtopOffset, 8); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, filetb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetValues (om_w, args, n); + + /* save */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, filetf_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, filetb_w); n++; + w = XmCreatePushButton (hznshell_w, "Save", args, n); + XtAddCallback (w, XmNactivateCallback, hzn_save_cb, NULL); + wtip (w, "Save current horizon drawing to the file"); + XtManageChild (w); + + /* edit new */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, om_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + edittb_w = XmCreateToggleButton (hznshell_w, "Edit", args, n); + set_xmstring (edittb_w, XmNlabelString, "Edit with mouse"); + XtAddCallback (edittb_w, XmNvalueChangedCallback, hzn_edit_cb, NULL); + wtip (edittb_w, "Define horizon as a table of altitudes and azimuths"); + XtManageChild (edittb_w); + + /* controls at the bottom */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, edittb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (hznshell_w, "HZS", args, n); + XtManageChild (sep_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 22); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 38); n++; + w = XmCreatePushButton (hznshell_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, hzn_close_cb, NULL); + wtip (w, "Close this window"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 62); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 78); n++; + w = XmCreatePushButton (hznshell_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, hzn_help_cb, NULL); + wtip (w, "Get more information about this window"); + XtManageChild (w); +} + +/* called from Close */ +/* ARGSUSED */ +static void +hzn_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (hznshell_w); +} + +/* called when unmapped for any reason */ +/* ARGSUSED */ +static void +hzn_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hznEditingOff(); +} + +/* called when edit TB changes */ +/* ARGSUSED */ +static void +hzn_edit_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState(w)) { + sv_hznOn(); /* public service feature */ + hzn_radio (0); + } +} + +/* called from Help */ +/* ARGSUSED */ +static void +hzn_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = {"Specify local horizon."}; + + hlp_dialog ("Horizon", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* called from the Save PB and the Save file name TF. + * N.B. don't use call + */ +/* ARGSUSED */ +static void +hzn_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024]; + char *fn; + FILE *fp; + + /* create file */ + fn = XmTextFieldGetString (filetf_w); + sprintf (buf, "%s/%s", getPrivateDir(), fn); + fp = fopen (buf, "w"); + if (!fp) { + sprintf (buf+strlen(buf), ":\n%s", syserrstr()); + XtFree (fn); + return; + } + + /* write profile */ + hzn_write (fp); + + /* finished */ + fclose (fp); + hznEditingOff(); + XtFree (fn); +} + +/* Displacement TB callback */ +/* ARGSUSED */ +static void +hzn_displtb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hzn_choose (XmToggleButtonGetState (w)); +} + +/* Displacement TF callback */ +/* ARGSUSED */ +static void +hzn_displtf_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hzn_choose (1); +} + +/* File TB callback */ +/* ARGSUSED */ +static void +hzn_filetb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hzn_choose (!XmToggleButtonGetState (w)); +} + +/* File TF callback */ +/* ARGSUSED */ +static void +hzn_filetf_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hzn_choose (0); +} + +/* called when a file is chosen from the cascading list. + * file name is w's label. + */ +/* ARGSUSED */ +static void +hzn_chsfn_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + + /* get file name, load into filetf_w */ + get_xmstring (w, XmNlabelString, &fn); + XmTextFieldSetString (filetf_w, fn); + XtFree (fn); + + /* display if possible */ + hzn_choose (0); + hznEditingOff(); + sv_hznOn(); /* public service feature */ +} + +/* get displacement string into displ */ +static double +hzn_getdispl() +{ + double d; + char *str = XmTextFieldGetString (displtf_w); + d = degrad(strtod(str,NULL)); + XtFree (str); + return (d); +} + +/* implement radio box behavior */ +static void +hzn_radio (int choose_displ) +{ + XmToggleButtonSetState (displtb_w, choose_displ, False); + XmToggleButtonSetState (filetb_w, !choose_displ, False); +} + +/* called to make a choice. + * control the Tbs as well as do the work. + */ +static void +hzn_choose (choose_displ) +int choose_displ; +{ + /* do the work */ + if (choose_displ) + buildCon(); + else { + if (hzn_rdmap() < 0) { + choose_displ = 1; /* revert back */ + buildCon(); + } + } + + /* set radio choice */ + hzn_radio (choose_displ); + + /* sky view update */ + sv_update (mm_get_now(), 1); + +} + +/* open the horizon map named in filetf_w and create a profile[] smoothed by + * increasing az. + * we make sure the profile has complete coverage from 0..360 degrees. + * return 0 if ok, else -1 + */ +static int +hzn_rdmap() +{ + char *fn = XmTextFieldGetString (filetf_w); + FILE *fp; + + /* open file, try Private then Shared area */ + fp = fopend (fn, "auxil", "r"); + if (!fp) { + XtFree (fn); + return (-1); + } + + /* read new profile */ + if (profile) { + XtFree ((char *)profile); + profile = NULL; + } + nprofile = 0; + hzn_read (fp); + fclose (fp); + + if (nprofile == 0) { + xe_msg (1, "%s:\nContains no horizon entries.\nReverting to constant displacement", fn); + XtFree (fn); + buildCon(); + return (-1); + } else { + xe_msg (0, "%s:\nRead %d horizon entr%s.", fn, nprofile, + nprofile == 1 ? "y" : "ies"); + } + + /* if get here nprofile > 0. smooth and keep it that way */ + smoothProfile(); + + /* done with filename */ + XtFree (fn); + return (0); +} + +/* fill the profile with a constant elevation model */ +static void +buildCon() +{ + double a = hzn_getdispl (); + + /* seed the profile then smooth */ + profile = (Profile *) XtRealloc ((char *)profile, 1*SZP); + profile[0].z = 0; + profile[0].a = a; + nprofile = 1; + smoothProfile(); +} + +#endif /* !TEST_MAIN */ + +/* make sure the profile has complete coverage from 0..360 degrees with + * no steps in Alt or Az greater than PSTEP. + */ +static void +smoothProfile() +{ + Profile *newp; + double alt0; + int nnew, nmax; + int i; + + if (!nprofile) + return; + + /* insure sorted */ + qsort ((void *)profile, nprofile, SZP, azcmp_f); + + /* seed with 0 crossing */ + alt0 = profile[0].a; + nmax = 100; + newp = (Profile *) XtMalloc (nmax*SZP); + newp[0].a = alt0; + newp[0].z = 0; + nnew = 1; + + /* make new copy, insuring complete PSTEP coverage */ + for (i = 0; i <= nprofile; i++) { + double la = newp[nnew-1].a; + double lz = newp[nnew-1].z; + double da = (i == nprofile ? alt0 : profile[i].a) - la; + double dz = (i == nprofile ? 2*PI : profile[i].z) - lz; + int na = (int)ceil(fabs(da)/PSTEP); + int nz = (int)ceil(fabs(dz)/PSTEP); + int j, n = na > nz ? na : nz; + if (nnew + n > nmax) + newp = (Profile *) XtRealloc((char*)newp,(nmax=nnew+n+100)*SZP); + for (j = 1; j <= n; j++) { + newp[nnew].a = la + j*da/n; + newp[nnew].z = lz + j*dz/n; + nnew++; + } + } + + /* newp is now the new profile */ + XtFree ((char *)profile); + newp = (Profile *) XtRealloc((char*)newp, nnew*SZP); + profile = newp; + nprofile = nnew; + + /* ok */ + is_smoothed = 1; +} + +/* compare two Profiles' az, in qsort fashion */ +static int +azcmp_f (const void *v1, const void *v2) +{ + double diff = ((Profile *)v1)->z - ((Profile *)v2)->z; + return (diff < 0 ? -1 : (diff > 0 ? 1 : 0)); +} + +/* read the given file into profile[] */ +static void +hzn_read (FILE *fp) +{ + char buf[1024]; + + /* read and store in profile[] */ + while (fgets (buf, sizeof(buf), fp)) { + double a, z; + if (sscanf (buf, "%lf %lf", &z, &a) != 2) + continue; + z = degrad(z); + a = degrad(a); + radecrange (&z, &a); + profile = (Profile *) XtRealloc ((char *) profile,(nprofile+1)*SZP); + profile[nprofile].a = a; + profile[nprofile].z = z; + nprofile++; + } +} + +/* write profile to file fp */ +static void +hzn_write (FILE *fp) +{ + int i; + + for (i = 0; i < nprofile; i++) + fprintf (fp, "%8.4f %8.4f\n", raddeg(profile[i].z), + raddeg(profile[i].a)); +} + +#if defined (TEST_MAIN) + +int +main (int ac, char *av[]) +{ + hzn_read (stdin); + hznAdd (0, degrad(70), degrad(20)); + hznAdd (0, degrad(40), degrad(350)); + hznAdd (0, degrad(60), degrad(300)); + hznAdd (0, degrad(40), degrad(301)); + hznAdd (0, degrad(20), degrad(302)); + hznAdd (0, degrad(10), degrad(303)); + hznAdd (0, degrad(50), degrad(304)); + smoothProfile(); + hzn_write (stdout); + + return (0); +} + +#endif /* TEST_MAIN */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: hznmenu.c,v $ $Date: 2004/05/10 23:36:34 $ $Revision: 1.21 $ $Name: $"}; diff --git a/GUI/xephem/imregmenu.c b/GUI/xephem/imregmenu.c new file mode 100644 index 0000000..80d3223 --- /dev/null +++ b/GUI/xephem/imregmenu.c @@ -0,0 +1,492 @@ +/* code to perform image registration. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static Widget irshell_w; /* the main shell */ +static Widget l11_w; /* label for 1st ref image 1st star */ +static Widget l12_w; /* label for 1st ref image 2nd star */ +static Widget l21_w; /* label for 2nd ref image 1st star */ +static Widget l22_w; /* label for 2nd ref image 2nd star */ +static Widget s1_w; /* step 1 TB */ +static Widget s2_w; /* step 2 TB */ + +typedef struct { + double x0, y0; /* one star coord */ + double x1, y1; /* second star coord */ +} StarPair; /* pair of star coords */ + +static StarPair s0; /* star coords on ref image */ +static StarPair s1; /* star coords on image to be register*/ + +typedef struct { + double A, B, C, D, E, F; /* x' = Ax+By+C y' = Dx+Ey+F */ + double scale, theta; /* scale and rotation (rads) */ +} XForm; /* linear 2D transform */ + +/* these steps follow the user through the process. + */ +typedef enum { + S11, /* select first star on ref image */ + S12, /* select 2nd star on ref image */ + S21, /* select 1st star on reg image */ + S22 /* select 2nd star on reg image and go*/ +} RefStep; +static RefStep step; /* step of procedure */ + +#define RSZ 5 /* search region for star, pixels */ + +#define SQR(x) ((x)*(x)) /* handy */ + +static char ircategory[] = "Image registration"; /* Save category */ + +static void ir_create (void); +static void ir_help_cb (Widget w, XtPointer client, XtPointer call); +static void ir_close_cb (Widget w, XtPointer client, XtPointer call); +static void ref_cb (Widget w, XtPointer client, XtPointer call); +static void reg_cb (Widget w, XtPointer client, XtPointer call); +static void regCursor (int whether); +static void find2dXform (StarPair *s0, StarPair *to, XForm *xf); +static void imXform (FImage *s, FImage *d, XForm *xf); +static void wcsXform (FImage *im, StarPair *s0, StarPair *s1, XForm *xf); +static void doreg(void); + +void +ir_manage() +{ + if (!irshell_w) + ir_create(); + + XtManageChild (irshell_w); +} + +/* return whether we are currently looking for a star coord to set a ref star */ +int +ir_setting() +{ + return ((s1_w && XmToggleButtonGetState(s1_w)) + || (s1_w && XmToggleButtonGetState(s2_w))); +} + +/* called when user clicks on a star. + * we find the gaussian star center, draw a confirmation circle, then use this + * star depending on which step we are in the procedure. + */ +void +ir_setstar (double ix, double iy) +{ + FImage *im = si_getFImage(); + char buf[128]; + ImRegion r; + Star s; + + r.im = (CamPix *) im->image; + r.iw = im->sw; + r.ih = im->sh; + r.rx = (int)(ix - RSZ/2); + if (r.rx < 0) + r.rx = 0; + r.ry = (int)(iy - RSZ/2); + if (r.ry < 0) + r.ry = 0; + r.rw = RSZ; + r.rh = RSZ; + + getStar (&r, &s); + sv_drawimdot (s.x, s.y, 5, 1); + + switch (step) { + case S11: + sprintf (buf, "Star 1 at %7.2f %7.2f", s.x, s.y); + set_xmstring (l11_w, XmNlabelString, buf); + step = S12; + s0.x0 = s.x; + s0.y0 = s.y; + break; + case S12: + sprintf (buf, "Star 2 at %7.2f %7.2f", s.x, s.y); + set_xmstring (l12_w, XmNlabelString, buf); + XmToggleButtonSetState (s1_w, False, True); + s0.x1 = s.x; + s0.y1 = s.y; + break; + case S21: + sprintf (buf, "Star 1 at %7.2f %7.2f", s.x, s.y); + set_xmstring (l21_w, XmNlabelString, buf); + step = S22; + s1.x0 = s.x; + s1.y0 = s.y; + break; + case S22: + sprintf (buf, "Star 2 at %7.2f %7.2f", s.x, s.y); + set_xmstring (l22_w, XmNlabelString, buf); + XmToggleButtonSetState (s2_w, False, True); + s1.x1 = s.x; + s1.y1 = s.y; + doreg(); + break; + } +} + +/* called to put up or remove the watch cursor. */ +void +ir_cursor (c) +Cursor c; +{ + Window win; + + if (irshell_w && (win = XtWindow(irshell_w)) != 0) { + Display *dsp = XtDisplay(irshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +static void +ir_create() +{ + Widget w, sep_w; + Arg args[20]; + int n; + + /* create main form */ + + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 4); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + irshell_w = XmCreateFormDialog (svshell_w, "ImReg", args, n); + set_something (irshell_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (irshell_w, XmNdialogTitle, "Image registration"); + XtAddCallback (irshell_w, XmNhelpCallback, ir_help_cb, NULL); + sr_reg (XtParent(irshell_w), "XEphem*ImReg.x", ircategory, 0); + sr_reg (XtParent(irshell_w), "XEphem*ImReg.y", ircategory, 0); + + /* first step */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + s1_w = XmCreateToggleButton (irshell_w, "S1TB", args, n); + XtAddCallback (s1_w, XmNvalueChangedCallback, ref_cb, NULL); + set_xmstring (s1_w, XmNlabelString, + "Reference image is loaded, now click 2 stars"); + XtManageChild (s1_w); + + /* labels for first set of reference stars */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, s1_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + l11_w = XmCreateLabel (irshell_w, "R11L", args, n); + set_xmstring (l11_w, XmNlabelString, "Star 1 at"); + XtManageChild (l11_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l11_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + l12_w = XmCreateLabel (irshell_w, "R12L", args, n); + set_xmstring (l12_w, XmNlabelString, "Star 2 at"); + XtManageChild (l12_w); + + /* second step */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l12_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + s2_w = XmCreateToggleButton (irshell_w, "S1TB", args, n); + XtAddCallback (s2_w, XmNvalueChangedCallback, reg_cb, NULL); + set_xmstring (s2_w, XmNlabelString, + "Image to be registed is loaded, now click same 2 stars"); + XtManageChild (s2_w); + + /* labels for second set of reference stars */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, s2_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + l21_w = XmCreateLabel (irshell_w, "R21L", args, n); + set_xmstring (l21_w, XmNlabelString, "Star 1 at"); + XtManageChild (l21_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l21_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + l22_w = XmCreateLabel (irshell_w, "R22L", args, n); + set_xmstring (l22_w, XmNlabelString, "Star 2 at"); + XtManageChild (l22_w); + + /* controls at the bottom */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l22_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (irshell_w, "HZS", args, n); + XtManageChild (sep_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 22); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 38); n++; + w = XmCreatePushButton (irshell_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, ir_close_cb, NULL); + wtip (w, "Close this window"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 62); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 78); n++; + w = XmCreatePushButton (irshell_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, ir_help_cb, NULL); + wtip (w, "Get more information about this window"); + XtManageChild (w); +} + +/* called from Close */ +/* ARGSUSED */ +static void +ir_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (irshell_w); +} + +/* called from Help */ +/* ARGSUSED */ +static void +ir_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = {"Define reference stars then each additional."}; + + hlp_dialog ("Registration", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* called when TB clicked to start working with reference image */ +/* ARGSUSED */ +static void +ref_cb (Widget w, XtPointer client, XtPointer call) +{ + int on = XmToggleButtonGetState(w); + + if (on) { + FImage *im1 = si_getFImage(); + + if (!im1) { + xe_msg (1, "Please load your reference image"); + XmToggleButtonSetState (w, False, False); + return; + } + + set_xmstring (l11_w, XmNlabelString, "Star 1 at"); + set_xmstring (l12_w, XmNlabelString, "Star 2 at"); + sv_all (NULL); /* clean */ + regCursor (1); + step = S11; + } else { + regCursor (0); + } +} + +/* called when TB clicked to start working with an image to be registered */ +/* ARGSUSED */ +static void +reg_cb (Widget w, XtPointer client, XtPointer call) +{ + int on = XmToggleButtonGetState(w); + + if (on) { + FImage *im1 = si_getFImage(); + + if (!im1) { + xe_msg (1, "Please load your reference image"); + XmToggleButtonSetState (w, False, False); + return; + } + + set_xmstring (l21_w, XmNlabelString, "Star 1 at"); + set_xmstring (l22_w, XmNlabelString, "Star 2 at"); + sv_all (NULL); /* clean */ + regCursor (1); + step = S21; + } else { + regCursor (0); + } +} + +/* whether to show a special registration cursor in sky view */ +static void +regCursor (int whether) +{ + static Cursor rc; + + if (!rc) + rc = XCreateFontCursor (XtD, XC_crosshair); + + sv_cursor (whether ? rc : 0); +} + +/* find 2d linear transform of the form x' = Ax+By+C y' = Dx+Ey+F that + * transforms coordinate pairs s0 to s1. + * these equations were derived from working through the matrix ops to: + * translate s0's x0 to the origin, + * rotate by the angle between s1 and s0, + * scale by the ratio of s1 to s0, + * translate by s1's x0 position. + */ +static void +find2dXform (StarPair *s0, StarPair *s1, XForm *xf) +{ + double Tx, Ty; + double stheta, ctheta; + double Txp, Typ; + + /* translate to origin */ + Tx = -s0->x0; + Ty = -s0->y0; + + /* rotate */ + xf->theta = atan2 (s1->y1 - s1->y0, s1->x1 - s1->x0) + - atan2 (s0->y1 - s0->y0, s0->x1 - s0->x0); + stheta = sin(xf->theta); + ctheta = cos(xf->theta); + + /* scale */ + xf->scale = sqrt((SQR(s1->y1 - s1->y0) + SQR(s1->x1 - s1->x0)) / + (SQR(s0->y1 - s0->y0) + SQR(s0->x1 - s0->x0))); + + /* translate to s1 */ + Txp = s1->x0; + Typ = s1->y0; + + /* done */ + xf->A = xf->scale*ctheta; + xf->B = -xf->scale*stheta; + xf->C = xf->scale*(Tx*ctheta - Ty*stheta) + Txp; + xf->D = xf->scale*stheta; + xf->E = xf->scale*ctheta; + xf->F = xf->scale*(Tx*stheta + Ty*ctheta) + Typ; +} + +/* transform s to d, using xf. + */ +static void +imXform (FImage *s, FImage *d, XForm *xf) +{ + CamPix *sp = (CamPix *) s->image; + CamPix *dp = (CamPix *) d->image; + int x, y; + + memset (d->image, 0, d->sw*d->sh*sizeof(CamPix)); + for (y = 0; y < d->sh; y++) { + for (x = 0; x < d->sw; x++) { + int xp = (int)floor(xf->A*x + xf->B*y + xf->C + 0.5); + int yp = (int)floor(xf->D*x + xf->E*y + xf->F + 0.5); + if (xp>=0 && xpsw && yp>=0 && ypsh) + *dp = sp[xp + yp*s->sw]; + else + *dp = 0; + dp++; + } + } +} + +/* update WCS in im, if any, according to pixel shift from s0 to s1 via xf */ +static void +wcsXform (FImage *im, StarPair *s0, StarPair *s1, XForm *xf) +{ + double r1, d1; + + /* find ra/dec of first star in s1 */ + if (xy2RADec (im, s1->x0, s1->y0, &r1, &d1) < 0) + return; + + /* new WCS, use s0 as new reference */ + im->xref = raddeg(r1); + im->yref = raddeg(d1); + im->xrefpix = s0->x0; + im->yrefpix = s0->y0; + im->xinc *= xf->scale; + im->yinc *= xf->scale; + im->rot -= raddeg(xf->theta); + + setRealFITS (im, "CRVAL1", im->xref, 10, "deg ra@ref"); + setRealFITS (im, "CRVAL2", im->yref, 10, "deg dec@ref"); + setRealFITS (im, "CRPIX1", im->xrefpix, 10, "ref pix x"); + setRealFITS (im, "CRPIX2", im->yrefpix, 10, "ref pix y"); + setRealFITS (im, "CDELT1", im->xinc, 10, "deg right/pix"); + setRealFITS (im, "CDELT2", im->yinc, 10, "deg up/pix"); + setRealFITS (im, "CROTA1", im->rot, 10, "deg rot"); + setRealFITS (im, "CROTA2", im->rot, 10, "deg rot"); +} + +/* affect the registration process on the currently displayed image */ +static void +doreg() +{ + FImage *s = si_getFImage(); /* image to be registered */ + FImage new, *d = &new; + XForm xf; + + cloneFImage (d, s, 0); + find2dXform (&s0, &s1, &xf); + imXform (s, d, &xf); + wcsXform (d, &s0, &s1, &xf); + + sf_newFITS (d, "registered.fts", 0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: imregmenu.c,v $ $Date: 2005/11/27 16:19:25 $ $Revision: 1.6 $ $Name: $"}; diff --git a/GUI/xephem/indiapi.h b/GUI/xephem/indiapi.h new file mode 100644 index 0000000..f3a8264 --- /dev/null +++ b/GUI/xephem/indiapi.h @@ -0,0 +1,211 @@ +#ifndef _INDIAPI_H +#define _INDIAPI_H + +#if 0 + INDI + Copyright (C) 2003 Elwood C. Downey + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#endif + +/******************************************************************************* + * These are the Constants and Data structure definitions for the interface to + * the reference INDI C API implementation. These may be used on both the + * Client and Device side. + */ + +/******************************************************************************* + * INDI wire protocol version implemented by this API. + * N.B. this is indepedent of the API itself. + */ + +#define INDIV 1.5 + +/******************************************************************************* + * Manifest constants + */ + +typedef enum { + ISS_OFF, ISS_ON +} ISState; /* switch state */ + +typedef enum { + IPS_IDLE, IPS_OK, IPS_BUSY, IPS_ALERT +} IPState; /* property state */ + +typedef enum { + ISR_1OFMANY, ISR_ATMOST1, ISR_NOFMANY +} ISRule; /* switch vector rule hint */ + +typedef enum { + IP_RO, IP_WO, IP_RW +} IPerm; /* permission hint, WRT client */ + +/* the XML strings for these attributes may be any length but implementations + * are only obligued to support these lengths for the various string attributes. + */ +#define MAXINDINAME 32 +#define MAXINDILABEL 32 +#define MAXINDIDEVICE 32 +#define MAXINDIGROUP 32 +#define MAXINDIFORMAT 32 +#define MAXINDIBLOBFMT 32 +#define MAXINDITSTAMP 32 + +/******************************************************************************* + * Typedefs for each INDI Property type. + * + * INumber.format may be any printf-style appropriate for double + * or style "m" to create sexigesimal using the form "%.m" where + * is the total field width. + * is the width of the fraction. valid values are: + * 9 -> :mm:ss.ss + * 8 -> :mm:ss.s + * 6 -> :mm:ss + * 5 -> :mm.m + * 3 -> :mm + * + * examples: + * + * to produce use + * + * "-123:45" %7.3m + * " 0:01:02" %9.6m + */ + +typedef struct { /* one text descriptor */ + char name[MAXINDINAME]; /* index name */ + char label[MAXINDILABEL]; /* short description */ + char *text; /* malloced text string */ + struct _ITextVectorProperty *tvp; /* pointer to parent */ + void *aux0, *aux1; /* handy place to hang helper info */ +} IText; + +typedef struct _ITextVectorProperty { /* text vector property descriptor */ + char device[MAXINDIDEVICE]; /* device name */ + char name[MAXINDINAME]; /* property name */ + char label[MAXINDILABEL]; /* short description */ + char group[MAXINDIGROUP]; /* GUI grouping hint */ + IPerm p; /* client accessibility hint */ + double timeout; /* current max time to change, secs */ + IPState s; /* current property state */ + IText *tp; /* texts comprising this vector */ + int ntp; /* dimension of tp[] */ + char timestamp[MAXINDITSTAMP]; /* ISO 8601 timestamp of this event */ + void *aux; /* handy place to hang helper info */ +} ITextVectorProperty; + +typedef struct { /* one number descriptor */ + char name[MAXINDINAME]; /* index name */ + char label[MAXINDILABEL]; /* short description */ + char format[MAXINDIFORMAT]; /* GUI display format, see above */ + double min, max; /* range, ignore if min == max */ + double step; /* step size, ignore if step == 0 */ + double value; /* current value */ + struct _INumberVectorProperty *nvp; /* pointer to parent */ + void *aux0, *aux1; /* handy place to hang helper info */ +} INumber; + +typedef struct _INumberVectorProperty { /* number vector property descriptor */ + char device[MAXINDIDEVICE]; /* device name */ + char name[MAXINDINAME]; /* property name */ + char label[MAXINDILABEL]; /* short description */ + char group[MAXINDIGROUP]; /* GUI grouping hint */ + IPerm p; /* client accessibility hint */ + double timeout; /* current max time to change, secs */ + IPState s; /* current property state */ + INumber *np; /* numbers comprising this vector */ + int nnp; /* dimension of np[] */ + char timestamp[MAXINDITSTAMP]; /* ISO 8601 timestamp of this event */ + void *aux; /* handy place to hang helper info */ +} INumberVectorProperty; + +typedef struct { /* one switch descriptor */ + char name[MAXINDINAME]; /* index name */ + char label[MAXINDILABEL]; /* this switch's label */ + ISState s; /* this switch's state */ + struct _ISwitchVectorProperty *svp; /* pointer to parent */ + void *aux; /* handy place to hang helper info */ +} ISwitch; + +typedef struct _ISwitchVectorProperty { /* switch vector property descriptor */ + char device[MAXINDIDEVICE]; /* device name */ + char name[MAXINDINAME]; /* property name */ + char label[MAXINDILABEL]; /* short description */ + char group[MAXINDIGROUP]; /* GUI grouping hint */ + IPerm p; /* client accessibility hint */ + ISRule r; /* switch behavior hint */ + double timeout; /* current max time to change, secs */ + IPState s; /* current property state */ + ISwitch *sp; /* switches comprising this vector */ + int nsp; /* dimension of sp[] */ + char timestamp[MAXINDITSTAMP]; /* ISO 8601 timestamp of this event */ + void *aux; /* handy place to hang helper info */ +} ISwitchVectorProperty; + +typedef struct { /* one light descriptor */ + char name[MAXINDINAME]; /* index name */ + char label[MAXINDILABEL]; /* this lights's label */ + IPState s; /* this lights's state */ + struct _ILightVectorProperty *lvp; /* pointer to parent */ + void *aux; /* handy place to hang helper info */ +} ILight; + +typedef struct _ILightVectorProperty { /* light vector property descriptor */ + char device[MAXINDIDEVICE]; /* device name */ + char name[MAXINDINAME]; /* property name */ + char label[MAXINDILABEL]; /* short description */ + char group[MAXINDIGROUP]; /* GUI grouping hint */ + IPState s; /* current property state */ + ILight *lp; /* lights comprising this vector */ + int nlp; /* dimension of lp[] */ + char timestamp[MAXINDITSTAMP]; /* ISO 8601 timestamp of this event */ + void *aux; /* handy place to hang helper info */ +} ILightVectorProperty; + +typedef struct { /* one BLOB descriptor */ + char name[MAXINDINAME]; /* index name */ + char label[MAXINDILABEL]; /* this BLOB's label */ + char format[MAXINDIBLOBFMT]; /* format attr */ + void *blob; /* malloced binary large object bytes */ + int bloblen; /* bytes in blob */ + int size; /* n uncompressed bytes */ + struct _IBLOBVectorProperty *bvp; /* pointer to parent */ + void *aux0, *aux1, *aux2; /* handy place to hang helper info */ +} IBLOB; + +typedef struct _IBLOBVectorProperty { /* BLOB vector property descriptor */ + char device[MAXINDIDEVICE]; /* device name */ + char name[MAXINDINAME]; /* property name */ + char label[MAXINDILABEL]; /* short description */ + char group[MAXINDIGROUP]; /* GUI grouping hint */ + IPerm p; /* client accessibility hint */ + double timeout; /* current max time to change, secs */ + IPState s; /* current property state */ + IBLOB *bp; /* BLOBs comprising this vector */ + int nbp; /* dimension of bp[] */ + char timestamp[MAXINDITSTAMP]; /* ISO 8601 timestamp of this event */ + void *aux; /* handy place to hang helper info */ +} IBLOBVectorProperty; + +/******************************************************************************* + * Handy macro to find the number of elements in array a[]. + * N.B. must be used with actual array, not pointer. + */ + +#define NARRAY(a) (sizeof(a)/sizeof(a[0])) + +#endif /* _INDIAPI_H */ diff --git a/GUI/xephem/indimenu.c b/GUI/xephem/indimenu.c new file mode 100644 index 0000000..b5f90ca --- /dev/null +++ b/GUI/xephem/indimenu.c @@ -0,0 +1,3384 @@ +/* display and operate the GUI for INDI Server or Device. + * + * Overall GUI is one big RowColumn, devrc_w + * First entry is a ScrolledText for the common message area, msg_w + * Then follows for each Device: + * One Form, gd->f_w + * Light, TB to reveal/hide gd->grc_w, Name, label + * One RowColumn for all Groups, gd->grc_w, containing for each group: + * One Form (unless no group name, then group is not hideable) + * TB to reveal/hide gg->prc_w, name + * One RowColumn for each Group, gg->prc_w, containing for each property: + * Form + * Light, Name, label + * One H RowColumn for each vector member, each of which contains + * Form + * Name label, value Label for read and/or TextField for write + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" +#include "base64.h" +#include "zlib.h" + +#define MSGR 10 /* number of rows in the message TF */ +#define MSGC 60 /* number of columns in the message TF*/ +#define LIGHTW 9 /* overall light width, pixels */ +#define LIGHTH 9 /* overall light height, pixels */ +#define WFLPOS 35 /* left writable field position */ +#define WFRPOS 75 /* right writable field position */ +#define INDENT 12 /* indent */ +#define INDITWIDTH 500 /* overall width of INDI table, pixels*/ + +/* one RC per group to implement spacial grouping of its properties */ +typedef struct { + char group[MAXINDIGROUP]; /* name of this group, NULL if anon */ + Widget prc_w; /* RC for properties in this group */ +} IGUIGroup; + +/* GUI for one Device */ +typedef struct { + char device[MAXINDIDEVICE]; /* handy (same as in each property) */ + Widget f_w; /* form for controls row */ + Widget grc_w; /* RC for all groups for show/hide */ + Widget lda_w; /* status light drawing area */ + IGUIGroup **grp; /* malloced group ptr list */ + int ngrp; /* number in grp[] */ + INumberVectorProperty **nvpp; /* malloced number vector ptr list */ + int nnvpp; /* number in nvpp[] */ + ITextVectorProperty **tvpp; /* malloced text vector ptr list */ + int ntvpp; /* number in tvpp[] */ + ISwitchVectorProperty **svpp; /* malloced switch vector ptr list */ + int nsvpp; /* number in svpp[] */ + ILightVectorProperty **lvpp; /* malloced light vector ptr list */ + int nlvpp; /* number in lvpp[] */ + IBLOBVectorProperty **bvpp; /* malloced BLOB vector ptr list */ + int nbvpp; /* number in bvpp[] */ +} IGUIDevice; + +static Widget createLt (Widget p_w, char *name, Arg args[], int n); +static void closeCB (Widget w, XtPointer client, XtPointer call); +static void connectCB (Widget w, XtPointer client, XtPointer call); +static void eraseCB (Widget w, XtPointer client, XtPointer call); +static void devLtCB (Widget w, XtPointer client, XtPointer call); +static void getLtColors (void); +static void drawLt (Widget ltw, IPState s); +static void drawDevLt (IGUIDevice *); +static void devTogCB (Widget w, XtPointer client, XtPointer call); +static void groupTogCB (Widget w, XtPointer client, XtPointer call); +static void displayBLOBCB (Widget w, XtPointer client, XtPointer call); +static void saveBLOBCB (Widget w, XtPointer client, XtPointer call); +static void indi_disconnect(void); +static void newBLOB_cb (Widget w, XtPointer client, XtPointer call); +static void newnum_cb (Widget w, XtPointer client, XtPointer call); +static void newnumdw_cb (Widget w, XtPointer client, XtPointer call); +static void newnumup_cb (Widget w, XtPointer client, XtPointer call); +static void newtext_cb (Widget w, XtPointer client, XtPointer call); +static void newswitch_cb (Widget w, XtPointer client, XtPointer call); +static void sendNumberVectorProperty (INumberVectorProperty *nvp); +static void sendTextVectorProperty (ITextVectorProperty *tvp); +static void sendSwitchVectorProperty (ISwitchVectorProperty *svp); +static void sendEnableBLOBs (IBLOBVectorProperty *bvp, int on); +static void traceon_cb (Widget w, XtPointer client, XtPointer call); +static int indi_connect(void); +static int launchCmd (XMLEle *root, char errmsg[]); +static int defTextCmd (XMLEle *root, char errmsg[]); +static int defNumberCmd (XMLEle *root, char errmsg[]); +static int defSwitchCmd (XMLEle *root, char errmsg[]); +static int defLightCmd (XMLEle *root, char errmsg[]); +static int defBLOBCmd (XMLEle *root, char errmsg[]); +static int setNumberCmd (XMLEle *root, char errmsg[]); +static int setTextCmd (XMLEle *root, char errmsg[]); +static int setSwitchCmd (XMLEle *root, char errmsg[]); +static int setLightCmd (XMLEle *root, char errmsg[]); +static int setBLOBCmd (XMLEle *root, char errmsg[]); +static int doMessage (XMLEle *root, char errmsg[]); +static void newGUIDevice (IGUIDevice *gd); +static void newGUIGroup (IGUIDevice *gd, IGUIGroup *gg); +static void newGUIWrNumber (INumber *np, Widget p_w, int lpos); +static void freeTextVectorProperty (ITextVectorProperty *tvp); +static void freeNumberVectorProperty (INumberVectorProperty *nvp); +static void freeSwitchVectorProperty (ISwitchVectorProperty *svp); +static void freeLightVectorProperty (ILightVectorProperty *lvp); +static void freeBLOBVectorProperty (IBLOBVectorProperty *lvp); +static int newGUINumberVector(INumberVectorProperty *nvp, IGUIDevice *gd, + IGUIGroup *gg, char *errmsg); +static int setGUINumberVector (XMLEle *root, INumberVectorProperty *nvp, + IGUIDevice *gd, char errmsg[]); +static int newGUITextVector(ITextVectorProperty *nvp, IGUIDevice *gd, + IGUIGroup *gg, char *errmsg); +static int setGUITextVector (XMLEle *root, ITextVectorProperty *nvp, + IGUIDevice *gd, char errmsg[]); +static int newGUISwitchVector(ISwitchVectorProperty *nvp, IGUIDevice *gd, + IGUIGroup *gg, char *errmsg); +static int setGUISwitchVector (XMLEle *root, ISwitchVectorProperty *svp, + IGUIDevice *gd, char errmsg[]); +static int newGUILightVector(ILightVectorProperty *nvp, IGUIDevice *gd, + IGUIGroup *gg, char *errmsg); +static int setGUILightVector (XMLEle *root, ILightVectorProperty *lvp, + IGUIDevice *gd, char errmsg[]); +static int newGUIBLOBVector(IBLOBVectorProperty *nbp, IGUIDevice *gd, + IGUIGroup *gg, char *errmsg); +static int setGUIBLOBVector (XMLEle *root, IBLOBVectorProperty *bvp, + IGUIDevice *gd, char errmsg[]); +static int handleOneBLOB (XMLEle *root, IBLOB *bp, char errmsg[]); +static void showMessage (XMLEle *root); +static char *setTStampNow (char tstamp[MAXINDITSTAMP]); +static void traceMessage (char *buf); +static void logMessage (char *timestr, char *device, char *str); +static IGUIDevice *findDev (char *device, int create, char errmsg[]); +static IGUIGroup *findGroup (IGUIDevice *gd, char *group, int create, + char errmsg[]); +static INumber *findNumber (INumberVectorProperty *nvp, char *name); +static INumberVectorProperty *findNumberProperty (IGUIDevice *gd, char *name, + char whynot[]); +static ITextVectorProperty *findTextProperty (IGUIDevice *gd, char *name, + char whynot[]); +static ISwitchVectorProperty *findSwitchProperty (IGUIDevice *gd, char *name, + char whynot[]); +static ILightVectorProperty *findLightProperty (IGUIDevice *gd, char *name, + char whynot[]); +static IBLOBVectorProperty *findBLOBProperty (IGUIDevice *gd, char *name, + char whynot[]); +static IText *findText (ITextVectorProperty *tvp, char *name); +static ISwitch *findSwitch (ISwitchVectorProperty *svp, char *name); +static ILight *findLight (ILightVectorProperty *lvp, char *name); +static IBLOB *findBLOB (IBLOBVectorProperty *bvp, char *name); +static int crackCharAtt (XMLEle *root, char *vp, int maxl, char *name, + char errmsg[]); +static int crackPerm (XMLEle *root, IPerm *p, char errmsg[]); +static int crackPState (XMLEle *root, IPState *s, char errmsg[]); +static int crackPString (char *str, IPState *s, char errmsg[]); +static int crackSState (XMLEle *root, ISState *s, char *errmsg); +static int crackRule (XMLEle *root, ISRule *r, char *errmsg); +static INumberVectorProperty *crackdefNumberVector (XMLEle *root,char errmsg[]); +static ITextVectorProperty *crackdefTextVector (XMLEle *root, char errmsg[]); +static ISwitchVectorProperty *crackdefSwitchVector (XMLEle *root,char errmsg[]); +static ILightVectorProperty *crackdefLightVector (XMLEle *root, char *errmsg); +static IBLOBVectorProperty *crackdefBLOBVector (XMLEle *root, char *errmsg); +static int crackDoubleAtt (XMLEle *root, double *dop, char *name, char *msg); +static int numberFormat (char *buf, const char *format, double value); +static void pushDisplay(void); +static void xmlv1(void); + +static IGUIDevice *devices; /* list of devices */ +static int ndevices; /* number devices[] */ +static Pixmap opendev_pm; /* icon to open a device section */ +static Pixmap closedev_pm; /* icon to close a device section */ +static GC lt_gc; /* GC for drawing lights */ +static Pixel tshad_p, bshad_p; /* top bottom shadow colors */ +static char *state_r[] = { /* resource names of color states */ + "INDIIdleColor", + "INDIOkColor", + "INDIBusyColor", + "INDIAlertColor" +}; +#define NSTATES XtNumber(state_r) /* number of color states */ +static Pixel state_p[NSTATES]; /* pixels to draw each state color */ + +static Widget indi_w; /* main shell */ +static Widget connect_w; /* TB for connect/disconnect */ +static Widget devrc_w; /* main RC for msg window and all dev */ +static Widget msg_w; /* main message ST */ +static Widget mttb_w; /* message trace TB */ +static Widget mttf_w; /* message trace file name TF */ + +static int svrsocket = -1; /* socket to INDI device or server */ +static FILE *swfp; /* unbuffered server write FILE for fprintf */ +static XtInputId scbid; /* socket callback id */ +static LilXML *lillp; /* XML parser context */ + +static char indicategory[] = "INDI Panel"; /* Save category */ + +/* bring up an INDI control panel */ +void +indi_manage() +{ + FILE *fp; + + /* create shell if first time */ + if (!indi_w) + indi_createShell (); + + /* just for testing, build GUI from test file if found, else run real */ + fp = fopen ("x.xml", "r"); + if (fp) { + LilXML *lp = newLilXML(); + int c; + + if (!swfp) + swfp = stdout; + while ((c = fgetc(fp)) != EOF) { + char msg[1024]; + XMLEle *root = readXMLEle (lp, c, msg); + if ((!root && msg[0]) || (root && launchCmd(root, msg) < 0)) { + if (root) { + prXMLEle (stdout, root, 0); + xe_msg (0, "%s", msg); + } + xe_msg (0, "%s", msg); + } + if (root) + delXMLEle (root); + } + + delLilXML (lp); + fclose (fp); + } + + /* up we go */ + XtPopup (indi_w, XtGrabNone); + set_something (indi_w, XmNiconic, (XtArgVal)False); +} + +/* return 0 if currently connected to an INDI server, else -1 + */ +int +indi_connected() +{ + return (svrsocket < 0 ? -1 : 0); +} + +/* send a new set of values for the given Number device/property. + * return 0 if ok else -1 if trouble with reason on why[] + */ +int +indi_setNProperty (char *dev, char *prop, char *n[], double v[], int nv, +char whynot[]) +{ + INumberVectorProperty *nvp; + IGUIDevice *gd; + char buf[256]; + int i; + + gd = findDev (dev, 0, whynot); + if (!gd) + return (-1); + nvp = findNumberProperty (gd, prop, whynot); + if (!nvp) + return (-1); + if (nvp->p != IP_WO && nvp->p != IP_RW) { + sprintf (whynot, "Attempt to write to RO property %s.%s", + nvp->device, nvp->name); + return (-1); + } + for (i = 0; i < nv; i++) { + INumber *np = findNumber (nvp, n[i]); + if (np) { + np->value = v[i]; + numberFormat (buf, np->format, np->value); + XmTextFieldSetString (np->aux1, buf); /* echo */ + } else { + sprintf (whynot, "INDI %s.%s.%s: not found", dev, prop, n[i]); + return (-1); + } + } + + sendNumberVectorProperty (nvp); + return (0); +} + +/* send a new set of values for the given Text device/property. + * return 0 if ok else -1 if trouble with reason on why[] + */ +int +indi_setTProperty (char *dev, char *prop, char *n[], char *v[], int nv, +char whynot[]) +{ + ITextVectorProperty *tvp; + IGUIDevice *gd; + int i; + + gd = findDev (dev, 0, whynot); + if (!gd) + return (-1); + tvp = findTextProperty (gd, prop, whynot); + if (!tvp) + return (-1); + if (tvp->p != IP_WO && tvp->p != IP_RW) { + sprintf (whynot, "Attempt to write to RO property %s.%s", + tvp->device, tvp->name); + return (-1); + } + for (i = 0; i < nv; i++) { + IText *tp = findText (tvp, n[i]); + if (tp) { + tp->text = strcpy (XtRealloc (tp->text, strlen(v[i])+1), v[i]); + XmTextFieldSetString (tp->aux1, tp->text); /* echo */ + } else { + sprintf (whynot, "INDI %s.%s.%s: not found", dev, prop, n[i]); + return (-1); + } + } + + sendTextVectorProperty (tvp); + return (0); +} + +/* return the current Number vector for the given device/property, else NULL. + * N.B. caller should not modify returned storage. + */ +INumberVectorProperty * +indi_getNProperty (char *dev, char *prop) +{ + IGUIDevice *gd = findDev (dev, 0, NULL); + if (!gd) + return (NULL); + return (findNumberProperty (gd, prop, NULL)); +} + +/* called when saveres is changing colors. + * only thing we need to do is change the pixmaps in the dev TBs. + */ +void +indi_newres() +{ + /* plagerize from saveres's + and - */ + sr_getDirPM (&opendev_pm, &closedev_pm); + + /* install in each device TB */ +} + + +/* create the main INDI shell, indi_w and main rc, devrc_w */ +void +indi_createShell () +{ + Widget w, f_w, mf_w, sw_w, sep_w, pw_w; + Arg args[20]; + int n; + + /* create shell */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem INDI Control Panel"); n++; + XtSetArg (args[n], XmNiconName, "INDI"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + indi_w = XtCreatePopupShell ("INDI", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (indi_w); + set_something (indi_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (indi_w, "XEphem*INDI.x", indicategory, 0); + sr_reg (indi_w, "XEphem*INDI.y", indicategory, 0); + sr_reg (indi_w, "XEphem*INDI.width", indicategory, 0); + sr_reg (indi_w, "XEphem*INDI.height", indicategory, 0); + + /* everything in a form */ + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + f_w = XmCreateForm (indi_w, "INDIF", args, n); + XtManageChild (f_w); + + /* controls across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + mf_w = XmCreateForm (f_w, "IMF", args, n); + XtManageChild (mf_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + w = XmCreatePushButton (mf_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, closeCB, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + connect_w = XmCreateToggleButton (mf_w, "Connect", args, n); + wtip (connect_w, + "Connect and disconnect from the configured INDI server"); + XtAddCallback (connect_w, XmNvalueChangedCallback, connectCB, NULL); + XtManageChild (connect_w); + sr_reg (connect_w, NULL, indicategory, 1); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, mf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (f_w, "S", args, n); + XtManageChild (sep_w); + + /* top messages and bottom device area in a paned window */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNsashHeight, 10); n++; + XtSetArg (args[n], XmNspacing, 14); n++; + pw_w = XmCreatePanedWindow (f_w, "IPW", args, n); + XtManageChild (pw_w); + + /* message area in a form in top of pw */ + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + mf_w = XmCreateForm (pw_w, "IMF", args, n); + XtManageChild (mf_w); + + /* erase */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + w = XmCreatePushButton (mf_w, "Erase", args, n); + wtip (w, "Clear message area"); + XtAddCallback (w, XmNactivateCallback, eraseCB, NULL); + XtManageChild (w); + + /* save TB and TF */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + mttb_w = XmCreateToggleButton (mf_w, "traceOn", args, n); + set_xmstring (mttb_w, XmNlabelString, "Trace to "); + XtAddCallback (mttb_w, XmNvalueChangedCallback, traceon_cb, NULL); + sr_reg (mttb_w, NULL, indicategory, 0); + wtip (mttb_w, "Whether to save messages to the file at right"); + XtManageChild (mttb_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, mttb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 95); n++; + mttf_w = XmCreateTextField (mf_w, "traceFile", args, n); + defaultTextFN (mttf_w, 0, "inditrace.txt", NULL); + sr_reg (mttf_w, NULL, indicategory, 0); + wtip (mttf_w, "File in which to append messages, if on"); + XtManageChild (mttf_w); + + /* message window */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, mttf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrows, MSGR); n++; + XtSetArg (args[n], XmNcolumns, MSGC); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + msg_w = XmCreateScrolledText (mf_w, "INDIMsg", args, n); + wtip (msg_w, "Messages from all INDI Devices"); + XtManageChild (msg_w); + + /* main RC for all devices in a scrolled window */ + + n = 0; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + sw_w = XmCreateScrolledWindow (pw_w, "ISW", args, n); + XtManageChild (sw_w); + + n = 0; + XtSetArg (args[n], XmNwidth, INDITWIDTH); n++; + XtSetArg (args[n], XmNresizeWidth, False); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + devrc_w = XmCreateRowColumn (sw_w, "IMRC", args, n); + XtManageChild (devrc_w); + + /* set up colors for lights and pixmaps for dev TB's */ + + getLtColors (); + indi_newres(); + + /* start now if default Connect is On */ + if (XmToggleButtonGetState(connect_w)) + if (indi_connect() < 0) + XmToggleButtonSetState (connect_w, False, True); +} + +/* using indi_w as a reference, set up various colors needed for our + * home-made light. + */ +static void +getLtColors () +{ + Pixel bg_p, fg_p, sel_p; + Arg args[20]; + int n; + + if (lt_gc) + return; + + /* get motif shadow colors */ + n = 0; + XtSetArg (args[n], XmNbackground, &bg_p); n++; + XtGetValues (indi_w, args, n); + XmGetColors (DefaultScreenOfDisplay(XtD), xe_cm, bg_p, &fg_p, + &tshad_p, &bshad_p, &sel_p); + + /* get INDI state colors */ + for (n = 0; n < NSTATES; n++) + get_color_resource (indi_w, state_r[n], &state_p[n]); + + /* make a GC to use for everything */ + lt_gc = XCreateGC (XtD, RootWindow (XtD, DefaultScreen(XtD)), 0L, NULL); +} + +/* called when user wants to close the INDI window */ +static void +closeCB (Widget w, XtPointer client, XtPointer call) +{ + XtPopdown (indi_w); +} + +static void +connectCB (Widget w, XtPointer client, XtPointer call) +{ + if (XmToggleButtonGetState(w)) { + if (indi_connect() < 0) + XmToggleButtonSetState (w, False, True); + } else + indi_disconnect(); +} + +/* called to change whether to save the given BLOB given in call. + * the actual saving is done whenever w is On by handleOneBLOB(). + */ +static void +saveBLOBCB (Widget w, XtPointer client, XtPointer call) +{ + IBLOBVectorProperty *bvp = (IBLOBVectorProperty *)client; + + sendEnableBLOBs (bvp, XmToggleButtonGetState(w)); +} + +/* called to change whether to display the given BLOB given in call. + * the actual displaying is done whenever w is On by handleOneBLOB(). + */ +static void +displayBLOBCB (Widget w, XtPointer client, XtPointer call) +{ + IBLOBVectorProperty *bvp = (IBLOBVectorProperty *)client; + + sendEnableBLOBs (bvp, XmToggleButtonGetState(w)); +} + +static void +eraseCB (Widget w, XtPointer client, XtPointer call) +{ + XmTextSetString (msg_w, ""); +} + +/* draw the given light (aka drawing area) corresponding to state s */ +static void +drawLt (Widget ltw, IPState s) +{ + Display *dsp = XtDisplay(ltw); + Window win = XtWindow(ltw); + Pixel p = state_p[s]; + Arg args[20]; + Dimension w, h; + int x, y; + int n; + + if (!win) + return; + + n = 0; + XtSetArg(args[n], XmNwidth, (XtArgVal)&w); n++; + XtSetArg(args[n], XmNheight, (XtArgVal)&h); n++; + XtGetValues (ltw, args, n); + + x = (w - LIGHTW)/2; + y = (h - LIGHTH)/2; + + XSetForeground (dsp, lt_gc, p); + XFillRectangle (dsp, win, lt_gc, x+1, y+1, LIGHTW-2, LIGHTH-2); + + XSetForeground (dsp, lt_gc, BlackPixel(dsp, DefaultScreen(dsp))); + XDrawRectangle (dsp, win, lt_gc, x, y, LIGHTW-1, LIGHTH-1); +} + +/* process incoming INDI commands, disconnect if comm trouble */ +static void +inputCB (XtPointer client, int *fdp, XtInputId *idp) +{ + static int trace = -1; + char ibuf[32]; /* not so much user input lags */ + char msg[1024]; + int i, nr; + + /* set trace from env once */ + if (trace < 0) { + char *ie = getenv ("INDITRACE"); + trace = (ie && atoi(ie) > 0); + } + + /* read INDI command */ + nr = read (*fdp, ibuf, sizeof(ibuf)); + if (nr <= 0) { + if (nr < 0) + xe_msg (0, "INDI: input error: %s", syserrstr()); + else + xe_msg (0, "INDI: agent closed connection"); + indi_disconnect(); + return; + } + + /* process each char */ + for (i = 0; i < nr; i++) { + XMLEle *root = readXMLEle (lillp, (int)ibuf[i], msg); + if (root) { + if (launchCmd (root, msg) < 0) { + prXMLEle (stdout, root, 0); + xe_msg (0, "%s", msg); + } else if (trace > 0) + prXMLEle (stdout, root, 0); + delXMLEle (root); + } else if (msg[0]) { + xe_msg (0, "%s", msg); + } + } +} + +/* try to contact an INDI server + */ +static int +indi_connect() +{ + char *host, *port; + char msg[1024]; + + /* connect */ + sc_gethost (&host, &port); + svrsocket = mkconnection (host, atoi(port), msg); + if (svrsocket < 0) { + xe_msg (1, "INDI: Connection error to %s %s:\n%s", host, port, msg); + swfp = stdout; /* tracing at least */ + XtFree (host); + XtFree (port); + return (-1); + } + XtFree (host); + XtFree (port); + + /* build a fresh parser context */ + if (lillp) + delLilXML (lillp); + lillp = newLilXML(); + + /* ready for server */ + scbid = XtAppAddInput (xe_app, svrsocket, (XtPointer)XtInputReadMask, + inputCB, NULL); + + /* handy FILE for fprintf output messages */ + swfp = fdopen (svrsocket, "w"); + setbuf (swfp, NULL); + + /* get info */ + xmlv1(); + fprintf (swfp, "\n", INDIV); + return (0); +} + +/* disconnect from INDI server, fine if not already */ +static void +indi_disconnect() +{ + int i, j; + + /* remove input */ + if (scbid) { + XtRemoveInput (scbid); + scbid = 0; + } + if (svrsocket >= 0) { + fclose (swfp); /* closes svrsocket too */ + swfp = NULL; + svrsocket = -1; + } + + /* clean up lilxml */ + if (lillp) { + delLilXML (lillp); + lillp = NULL; + } + + /* destroy gui and device properties info */ + if (devices) { + for (i = 0; i < ndevices; i++) { + IGUIDevice *gd = &devices[i]; + XtDestroyWidget (gd->f_w); + XtDestroyWidget (gd->grc_w); + if (gd->ntvpp > 0) { + for (j = 0; j < gd->ntvpp; j++) + freeTextVectorProperty (gd->tvpp[j]); + XtFree ((char *)gd->tvpp); + } + if (gd->nnvpp > 0) { + for (j = 0; j < gd->nnvpp; j++) + freeNumberVectorProperty (gd->nvpp[j]); + XtFree ((char *)gd->nvpp); + } + if (gd->nsvpp > 0) { + for (j = 0; j < gd->nsvpp; j++) + freeSwitchVectorProperty (gd->svpp[j]); + XtFree ((char *)gd->svpp); + } + if (gd->nlvpp > 0) { + for (j = 0; j < gd->nlvpp; j++) + freeLightVectorProperty (gd->lvpp[j]); + XtFree ((char *)gd->lvpp); + } + if (gd->ngrp > 0) { + for (j = 0; j < gd->ngrp; j++) + XtFree ((char *)gd->grp[j]); + XtFree ((char *)gd->grp); + } + } + + XtFree ((char *)devices); + devices = NULL; + ndevices = 0; + } + + if (XmToggleButtonGetState(connect_w)) + XmToggleButtonSetState (connect_w, False, False); +} + +/* called to read the GUI and send the new values of an INumberVector. + * client is pointer to INumberVector. + * N.B. do not use w or call; we are used for TF and PB + */ +static void +newnum_cb (Widget w, XtPointer client, XtPointer call) +{ + INumberVectorProperty *nvp = (INumberVectorProperty *)client; + int i; + + for (i = 0; i < nvp->nnp; i++) { + INumber *np = &nvp->np[i]; + char *txt = XmTextFieldGetString ((Widget)np->aux1); + (void) f_scansexa (txt, &np->value); + XtFree (txt); + } + + sendNumberVectorProperty (nvp); +} + +/* called by the up arrow button for a writeable INumber. + * client is pointer to INumber. + */ +static void +newnumup_cb (Widget w, XtPointer client, XtPointer call) +{ + INumber *np = (INumber *) client; + char *txt = XmTextFieldGetString ((Widget)np->aux1); + double v = strtod (txt, NULL), stepv = v + np->step; + char buf[128]; + + XtFree (txt); + + if (stepv < np->min || stepv > np->max) { + xe_msg (1, "%s: value must be %g .. %g", np->name, np->min,np->max); + } else { + np->value = stepv; + numberFormat (buf, np->format, np->value); + XmTextFieldSetString (np->aux1, buf); + } +} + +/* called by the down arrow button for a writeable INumber. + * client is pointer to INumber. + */ +static void +newnumdw_cb (Widget w, XtPointer client, XtPointer call) +{ + INumber *np = (INumber *) client; + char *txt = XmTextFieldGetString ((Widget)np->aux1); + double v = strtod (txt, NULL), stepv = v - np->step; + char buf[128]; + + XtFree (txt); + + if (stepv < np->min || stepv > np->max) { + xe_msg (1, "%s: value must be %g .. %g", np->name, np->min,np->max); + } else { + np->value = stepv; + numberFormat (buf, np->format, np->value); + XmTextFieldSetString (np->aux1, buf); + } +} + +/* called to read the GUI and send the new values of an ITextVector. + * client is pointer to ITextVectorProperty. + * N.B. do not use w or call, we are called from PB and TF + */ +static void +newtext_cb (Widget w, XtPointer client, XtPointer call) +{ + ITextVectorProperty *tvp = (ITextVectorProperty *)client; + int i; + + for (i = 0; i < tvp->ntp; i++) { + IText *tp = &tvp->tp[i]; + char *txt = XmTextFieldGetString ((Widget)tp->aux1); + tp->text = strcpy (XtRealloc (tp->text, strlen(txt)+1), txt); + XtFree (txt); + } + + sendTextVectorProperty (tvp); +} + +/* called when the GUI TB for an ISwitch changes. + * client is pointer to ISwitch. + * send the new collection of its ISwitchVector. + */ +static void +newswitch_cb (Widget w, XtPointer client, XtPointer call) +{ + ISwitch *sp = (ISwitch *) client; + int set = XmToggleButtonGetState(w); + + sp->s = set ? ISS_ON : ISS_OFF; + + /* don't send 1OFMANY going Off because some other will soon be On */ + if (!set && sp->svp->r == ISR_1OFMANY) + return; + + sendSwitchVectorProperty (sp->svp); +} + +/* called when the GUI Set PB or filename TF for an IBLOBVectorProperty changes. + * send the file named in the TF. + * client is pointer to IBLOBVectoryProperty. + * N.B. don't use client, this is used by PB and TF widgets + */ +static void +newBLOB_cb (Widget w, XtPointer client, XtPointer call) +{ + IBLOBVectorProperty *bvp = (IBLOBVectorProperty *) client; + char tstamp[MAXINDITSTAMP]; + int started = 0; + int i; + + watch_cursor(1); + + for (i = 0; i < bvp->nbp; i++) { + /* open the file */ + IBLOB *bp = &bvp->bp[i]; + char *fn = XmTextFieldGetString ((Widget)bp->aux2); + FILE *fp = fopend (fn, NULL, "r"); + unsigned char *file, *file64; + int filen, file64n; + char *format; + char msg[1024]; + int i; + + /* skip if didn't open ok */ + if (!fp) { + /* already told user */ + XtFree (fn); + break; + } + + /* read file into memory */ + if (fseek (fp, 0L, SEEK_END) < 0) { + fclose (fp); + XtFree (fn); + xe_msg (1, "%s: can not seek", fn); + break; + } + filen = ftell (fp); + file = malloc (filen); + if (!file) { + fclose (fp); + XtFree (fn); + xe_msg (1, "Can not get %d bytes to read %s", filen, fn); + break; + } + rewind (fp); + if (fread (file, 1, filen, fp) != filen) { + fclose (fp); + XtFree (fn); + free (file); + xe_msg (1, "%s: can not read", filen); + break; + } + fclose (fp); + + /* convery to base64 */ + file64n = 4*filen/3+4; + file64 = malloc (file64n); + if (!file64) { + XtFree (fn); + free (file); + xe_msg (1, "Can not get %d bytes for %s as base64", file64n, + fn); + break; + } + file64n = to64frombits (file64, file, filen); + free (file); + + /* format is last suffix */ + format = strrchr (fn, '.'); + if (!format) + format = ""; + + /* send */ + sprintf (msg, "Sending %s", fn); + logMessage (NULL, bvp->device, msg); + if (!started) { + xmlv1(); + fprintf (swfp, + "\n", + bvp->device, bvp->name, setTStampNow (tstamp)); + started = 1; + } + fprintf (swfp, " \n", + bp->name, filen, format); + for (i = 0; i < file64n; i += 72) + fprintf (swfp, " %.72s\n", file64+i); + fprintf (swfp, " \n"); + + free (file64); + XtFree (fn); + } + + if (started) { + fprintf (swfp, "\n"); + bvp->s = i < bvp->nbp ? IPS_ALERT : IPS_BUSY; + drawDevLt (findDev (bvp->device, 0, NULL)); + } + + watch_cursor(0); +} + +/* send the given NumberVector to the connected INDI device */ +static void +sendNumberVectorProperty (INumberVectorProperty *nvp) +{ + char tstamp[MAXINDITSTAMP]; + int i; + + xmlv1(); + fprintf(swfp,"\n", + nvp->device, nvp->name, setTStampNow (tstamp)); + for (i = 0; i < nvp->nnp; i++) { + INumber *np = &nvp->np[i]; + fprintf (swfp, " %.20g\n", + np->name, np->value); + } + + fprintf (swfp, "\n"); + + nvp->s = IPS_BUSY; + drawDevLt (findDev (nvp->device, 0, NULL)); +} + +/* send the given TextVector to the connected INDI device */ +static void +sendTextVectorProperty (ITextVectorProperty *tvp) +{ + char tstamp[MAXINDITSTAMP]; + int i; + + xmlv1(); + fprintf (swfp, "\n", + tvp->device, tvp->name, setTStampNow (tstamp)); + for (i = 0; i < tvp->ntp; i++) { + fprintf (swfp, " %s\n", + tvp->tp[i].name, tvp->tp[i].text); + } + + fprintf (swfp, "\n"); + + tvp->s = IPS_BUSY; + drawDevLt (findDev (tvp->device, 0, NULL)); +} + +/* send the given ISwitchVectorProperty to the INDI device and set our state to BUSY */ +static void +sendSwitchVectorProperty (ISwitchVectorProperty *svp) +{ + char tstamp[MAXINDITSTAMP]; + int i; + + xmlv1(); + fprintf(swfp,"\n", + svp->device, svp->name, setTStampNow (tstamp)); + + for (i = 0; i < svp->nsp; i++) { + fprintf (swfp, " %s\n", svp->sp[i].name, + svp->sp[i].s == ISS_ON ? "On" : "Off"); + } + + fprintf (swfp, "\n"); + + svp->s = IPS_BUSY; + drawDevLt (findDev (svp->device, 0, NULL)); +} + +/* send a message to the server to enable or disable intermixed BLOB messages */ +static void +sendEnableBLOBs (IBLOBVectorProperty *bvp, int on) +{ + xmlv1(); + fprintf(swfp, "%s\n", + bvp->device, bvp->name, on ? "Also" : "Never"); +} + +/* implement the given INDI command received from the INDI server. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +launchCmd (XMLEle *root, char *errmsg) +{ + static struct { + char *cmdname; + int (*fp)(XMLEle *root, char errmsg[]); + } commands[] = { + /* N.B. must be sorted by cmdname */ + {"defBLOBVector", defBLOBCmd}, + {"defLightVector", defLightCmd}, + {"defNumberVector", defNumberCmd}, + {"defSwitchVector", defSwitchCmd}, + {"defTextVector", defTextCmd}, + {"message", doMessage}, + {"newNumberVector", setNumberCmd}, + {"newSwitchVector", setSwitchCmd}, + {"newTextVector", setTextCmd}, + {"setBLOBVector", setBLOBCmd}, + {"setLightVector", setLightCmd}, + {"setNumberVector", setNumberCmd}, + {"setSwitchVector", setSwitchCmd}, + {"setTextVector", setTextCmd}, + }; + + char *tag = tagXMLEle(root); + int u = XtNumber(commands)-1; + int l = 0; + int diff = -1; + int m = -1; + + /* binary search */ + while (l <= u) { + m = (l+u)/2; + diff = strcmp (tag, commands[m].cmdname); + if (diff == 0) + break; + if (diff < 0) + u = m-1; + else + l = m+1; + } + + if (diff == 0) + return ((*commands[m].fp) (root, errmsg)); + + sprintf (errmsg, "INDI: unrecognized tag %s", tag); + return (-1); +} + +/* set a new value for a Number property */ +static int +setNumberCmd (XMLEle *root, char errmsg[]) +{ + INumberVectorProperty *nvp; + IGUIDevice *gd; + char *name; + + gd = findDev (findXMLAttValu (root, "device"), 0, errmsg); + if (!gd) + return (-1); + name = findXMLAttValu (root, "name"); + nvp = findNumberProperty (gd, name, errmsg); + if (!nvp) + return (-1); + if(crackCharAtt(root,nvp->timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (nvp->timestamp); + return (setGUINumberVector(root, nvp, gd, errmsg)); +} + +/* set a new value for a Text property */ +static int +setTextCmd (XMLEle *root, char errmsg[]) +{ + ITextVectorProperty *tvp; + IGUIDevice *gd; + char *name; + + gd = findDev (findXMLAttValu (root, "device"), 0, errmsg); + if (!gd) + return (-1); + name = findXMLAttValu (root, "name"); + tvp = findTextProperty (gd, name, errmsg); + if (!tvp) + return (-1); + if(crackCharAtt(root,tvp->timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (tvp->timestamp); + return (setGUITextVector(root, tvp, gd, errmsg)); +} + +/* set a new value for a Switch property */ +static int +setSwitchCmd (XMLEle *root, char errmsg[]) +{ + ISwitchVectorProperty *svp; + IGUIDevice *gd; + char *name; + + gd = findDev (findXMLAttValu (root, "device"), 0, errmsg); + if (!gd) + return (-1); + name = findXMLAttValu (root, "name"); + svp = findSwitchProperty (gd, name, errmsg); + if (!svp) + return (-1); + if(crackCharAtt(root,svp->timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (svp->timestamp); + return (setGUISwitchVector(root, svp, gd, errmsg)); +} + +/* set a new value for a Light property */ +static int +setLightCmd (XMLEle *root, char errmsg[]) +{ + ILightVectorProperty *lvp; + IGUIDevice *gd; + char *name; + + gd = findDev (findXMLAttValu (root, "device"), 0, errmsg); + if (!gd) + return (-1); + name = findXMLAttValu (root, "name"); + lvp = findLightProperty (gd, name, errmsg); + if (!lvp) + return (-1); + if(crackCharAtt(root,lvp->timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (lvp->timestamp); + return (setGUILightVector(root, lvp, gd, errmsg)); +} + +/* set a new value for a BLOB property */ +static int +setBLOBCmd (XMLEle *root, char errmsg[]) +{ + IBLOBVectorProperty *bvp; + IGUIDevice *gd; + char *name; + + gd = findDev (findXMLAttValu (root, "device"), 0, errmsg); + if (!gd) + return (-1); + name = findXMLAttValu (root, "name"); + bvp = findBLOBProperty (gd, name, errmsg); + if (!bvp) + return (-1); + if(crackCharAtt(root,bvp->timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (bvp->timestamp); + return (setGUIBLOBVector(root, bvp, gd, errmsg)); +} + +/* display a message from the server */ +static int +doMessage (XMLEle *root, char errmsg[]) +{ + showMessage (root); + return (0); +} + +/* define a new Text property, ignore if already known */ +static int +defTextCmd (XMLEle *root, char errmsg[]) +{ + ITextVectorProperty *tvp; + IGUIDevice *gd; + IGUIGroup *gg; + char buf[256], *bp = buf; + int i; + + /* crack new text vector */ + if ((tvp = crackdefTextVector (root, errmsg)) == NULL) + return (-1); + + /* ignore if already known */ + gd = findDev (tvp->device, 0, errmsg); + if (gd && findTextProperty (gd, tvp->name, errmsg)) { + freeTextVectorProperty (tvp); + return (0); + } + + /* record */ + bp += sprintf (bp, "New text vector %s[", tvp->name); + for (i = 0; i < tvp->ntp; i++) { + bp += sprintf (bp, "%s", tvp->tp[i].name); + if (i < tvp->ntp-1) + bp += sprintf (bp, ","); + if (bp > &buf[sizeof(buf)] - MAXINDINAME) { + bp += sprintf (bp, "..."); + break; + } + } + bp += sprintf (bp, "]"); + logMessage (tvp->timestamp, tvp->device, buf); + + /* add to existing or create new device, group and property */ + if (!gd) + gd = findDev (tvp->device, 1, errmsg); /* can't fail w/create */ + gg = findGroup (gd, tvp->group, 1, errmsg); /* can't fail w/create */ + return (newGUITextVector(tvp, gd, gg, errmsg)); +} + +/* define a new Number property, ignore if already known */ +static int +defNumberCmd (XMLEle *root, char errmsg[]) +{ + INumberVectorProperty *nvp; + IGUIDevice *gd; + IGUIGroup *gg; + char buf[256], *bp = buf; + int i; + + /* crack new number vector */ + if ((nvp = crackdefNumberVector (root, errmsg)) == NULL) + return (-1); + + /* ignore if already known */ + gd = findDev (nvp->device, 0, errmsg); + if (gd && findNumberProperty (gd, nvp->name, errmsg)) { + freeNumberVectorProperty (nvp); + return (0); + } + + /* record */ + bp += sprintf (bp, "New number vector %s[", nvp->name); + for (i = 0; i < nvp->nnp; i++) { + bp += sprintf (bp, "%s", nvp->np[i].name); + if (i < nvp->nnp-1) + bp += sprintf (bp, ","); + if (bp > &buf[sizeof(buf)] - MAXINDINAME) { + bp += sprintf (bp, "..."); + break; + } + } + bp += sprintf (bp, "]"); + logMessage (nvp->timestamp, nvp->device, buf); + + /* add to existing or create new device, group and property */ + if (!gd) + gd = findDev (nvp->device, 1, errmsg); /* can't fail w/create */ + gg = findGroup (gd, nvp->group, 1, errmsg); /* can't fail w/create */ + return (newGUINumberVector(nvp, gd, gg, errmsg)); +} + +/* define a new Switch property, ignore if already known */ +static int +defSwitchCmd (XMLEle *root, char errmsg[]) +{ + ISwitchVectorProperty *svp; + IGUIDevice *gd; + IGUIGroup *gg; + char buf[256], *bp = buf; + int i; + + /* crack new Switch vector */ + if ((svp = crackdefSwitchVector (root, errmsg)) == NULL) + return (-1); + + /* ignore if already known */ + gd = findDev (svp->device, 0, errmsg); + if (gd && findSwitchProperty (gd, svp->name, errmsg)) { + freeSwitchVectorProperty (svp); + return (0); + } + + /* record */ + bp += sprintf (bp, "New switch vector %s[", svp->name); + for (i = 0; i < svp->nsp; i++) { + bp += sprintf (bp, "%s", svp->sp[i].name); + if (i < svp->nsp-1) + bp += sprintf (bp, ","); + if (bp > &buf[sizeof(buf)] - MAXINDINAME) { + bp += sprintf (bp, "..."); + break; + } + } + bp += sprintf (bp, "]"); + logMessage (svp->timestamp, svp->device, buf); + + /* add to existing or create new device, group and property */ + if (!gd) + gd = findDev (svp->device, 1, errmsg); /* can't fail w/create */ + gg = findGroup (gd, svp->group, 1, errmsg); /* can't fail w/create */ + return (newGUISwitchVector(svp, gd, gg, errmsg)); +} + +/* define a new Lights property, ignore if already known */ +static int +defLightCmd (XMLEle *root, char errmsg[]) +{ + ILightVectorProperty *lvp; + IGUIDevice *gd; + IGUIGroup *gg; + char buf[256], *bp = buf; + int i; + + /* crack new Light vector */ + if ((lvp = crackdefLightVector (root, errmsg)) == NULL) + return (-1); + + /* ignore if already known */ + gd = findDev (lvp->device, 0, errmsg); + if (gd && findLightProperty (gd, lvp->name, errmsg)) { + freeLightVectorProperty (lvp); + return (0); + } + + /* record */ + bp += sprintf (bp, "New light vector %s[", lvp->name); + for (i = 0; i < lvp->nlp; i++) { + bp += sprintf (bp, "%s", lvp->lp[i].name); + if (i < lvp->nlp-1) + bp += sprintf (bp, ","); + if (bp > &buf[sizeof(buf)] - MAXINDINAME) { + bp += sprintf (bp, "..."); + break; + } + } + bp += sprintf (bp, "]"); + logMessage (lvp->timestamp, lvp->device, buf); + + /* add to existing or create new device, group and property */ + if (!gd) + gd = findDev (lvp->device, 1, errmsg); /* can't fail w/create */ + gg = findGroup (gd, lvp->group, 1, errmsg); /* can't fail w/create */ + return (newGUILightVector(lvp, gd, gg, errmsg)); +} + +/* define a new BLOB property, ignore if already known */ +static int +defBLOBCmd (XMLEle *root, char errmsg[]) +{ + IBLOBVectorProperty *bvp; + IGUIDevice *gd; + IGUIGroup *gg; + char buf[256], *bp = buf; + int i; + + /* crack new BLOB vector */ + if ((bvp = crackdefBLOBVector (root, errmsg)) == NULL) + return (-1); + + /* ignore if already known */ + gd = findDev (bvp->device, 0, errmsg); + if (gd && findBLOBProperty (gd, bvp->name, errmsg)) { + freeBLOBVectorProperty (bvp); + return (0); + } + + /* record */ + bp += sprintf (bp, "New BLOB vector %s[", bvp->name); + for (i = 0; i < bvp->nbp; i++) { + bp += sprintf (bp, "%s", bvp->bp[i].name); + if (i < bvp->nbp-1) + bp += sprintf (bp, ","); + if (bp > &buf[sizeof(buf)] - MAXINDINAME) { + bp += sprintf (bp, "..."); + break; + } + } + bp += sprintf (bp, "]"); + logMessage (bvp->timestamp, bvp->device, buf); + + /* add to existing or create new device, group and property */ + if (!gd) + gd = findDev (bvp->device, 1, errmsg); /* can't fail w/create */ + gg = findGroup (gd, bvp->group, 1, errmsg); /* can't fail w/create */ + return (newGUIBLOBVector(bvp, gd, gg, errmsg)); +} + +/* free the given TVP and any supporting memory */ +static void +freeTextVectorProperty (ITextVectorProperty *tvp) +{ + if (tvp->tp) { + int i; + for (i = 0; i < tvp->ntp; i++) + if (tvp->tp[i].text) + XtFree (tvp->tp[i].text); + XtFree ((char *) tvp->tp); + } + XtFree ((char *) tvp); +} + +/* free the given NVP and any supporting memory */ +static void +freeNumberVectorProperty (INumberVectorProperty *ivp) +{ + if (ivp->np) + XtFree ((char *) ivp->np); + XtFree ((char *) ivp); +} + +/* free the given SVP and any supporting memory */ +static void +freeSwitchVectorProperty (ISwitchVectorProperty *svp) +{ + if (svp->sp) + XtFree ((char *) svp->sp); + XtFree ((char *) svp); +} + +/* free the given LVP and any supporting memory */ +static void +freeLightVectorProperty (ILightVectorProperty *lvp) +{ + if (lvp->lp) + XtFree ((char *) lvp->lp); + XtFree ((char *) lvp); +} + +/* free the given BVP and any supporting memory */ +static void +freeBLOBVectorProperty (IBLOBVectorProperty *bvp) +{ + if (bvp->bp) { + int i; + for (i = 0; i < bvp->nbp; i++) + if (bvp->bp[i].blob) + XtFree (bvp->bp[i].blob); + XtFree ((char *) bvp->bp); + } + XtFree ((char *) bvp); +} + +/* make a da for use as state indicator. + * when exposed, it draws an indicator using its foreground color + */ +static Widget +createLt (Widget p_w, char *name, Arg args[], int n) +{ + Widget da_w; + + XtSetArg (args[n], XmNwidth, LIGHTW); n++; + XtSetArg (args[n], XmNheight, LIGHTH); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + da_w = XmCreateDrawingArea (p_w, name, args, n); + return (da_w); +} + +/* called to expose or hide all the properties for a device. + * client is index into devices[] + */ +static void +devTogCB (Widget w, XtPointer client, XtPointer call) +{ + IGUIDevice *gd = &devices[(long int)client]; + + if (XmToggleButtonGetState(w)) { + XtManageChild (gd->grc_w); + drawDevLt (gd); + } else + XtUnmanageChild (gd->grc_w); +} + +/* called to expose or hide the properties in a group. + * client is IGUIGroup to un/manage. + */ +static void +groupTogCB (Widget w, XtPointer client, XtPointer call) +{ + IGUIGroup *gg = (IGUIGroup *) client; + + if (XmToggleButtonGetState(w)) + XtManageChild (gg->prc_w); + else + XtUnmanageChild (gg->prc_w); +} + +/* called when exposing a device status light. + * client is index into devices[] + */ +static void +devLtCB (Widget w, XtPointer client, XtPointer call) +{ + IGUIDevice *gd = &devices[(long int)client]; + + drawDevLt (gd); +} + +/* create a new GUIDevice */ +static void +newGUIDevice (IGUIDevice *gd) +{ + Widget w; + Arg args[20]; + int n; + + n = 0; + gd->f_w = XmCreateForm (devrc_w, "Device", args, n); + XtManageChild (gd->f_w); + + /* worst-property light */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + gd->lda_w = createLt (gd->f_w, "DL", args, n); + XtAddCallback (gd->lda_w, XmNexposeCallback, devLtCB, + (XtPointer)(gd-devices)); + XtManageChild (gd->lda_w); + + /* open/close TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, INDENT); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, opendev_pm); n++; + XtSetArg (args[n], XmNselectPixmap, closedev_pm); n++; + XtSetArg (args[n], XmNindicatorOn, False); n++; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + w = XmCreateToggleButton (gd->f_w, "DTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, devTogCB, + (XtPointer)(gd-devices)); + XtManageChild (w); + + /* device name */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + w = XmCreateLabel (gd->f_w, "DL", args, n); + set_xmstring (w, XmNlabelString, gd->device); + XtManageChild (w); + + /* RC for groups -- leave unmanaged initially */ + + n = 0; + gd->grc_w = XmCreateRowColumn (devrc_w, "DGRC", args, n); +} + +/* create a new GUIGroup within the GUIDevice. + * if the group has a name, give it a control to show/hide and set it initially + * hidden, otherwise it is always visible. + */ +static void +newGUIGroup (IGUIDevice *gd, IGUIGroup *gg) +{ + int hideable = gg->group[0] != '\0'; + Widget f_w = (Widget)0; /* avoid compiler warning */ + Widget w; + Arg args[20]; + int n; + + if (hideable) { + n = 0; + f_w = XmCreateForm (gd->grc_w, "Group", args, n); + XtManageChild (f_w); + } + + n = 0; + gg->prc_w = XmCreateRowColumn (gd->grc_w, "PRC", args, n); + if (!hideable) + XtManageChild (gg->prc_w); + + if (hideable) { + /* open/close TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, INDENT); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, opendev_pm); n++; + XtSetArg (args[n], XmNselectPixmap, closedev_pm); n++; + XtSetArg (args[n], XmNindicatorOn, False); n++; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + w = XmCreateToggleButton (f_w, "GTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, groupTogCB, gg); + XtManageChild (w); + + /* device name */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + w = XmCreateLabel (f_w, "GL", args, n); + set_xmstring (w,XmNlabelString, gg->group); + XtManageChild (w); + } +} + +/* add the given number onto the given device list in the given group and + * build its GUI. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +newGUINumberVector(INumberVectorProperty *nvp, IGUIDevice *gd, IGUIGroup *gg, +char *errmsg) +{ + Widget nrc_w, set_w; + Widget f_w, hrc_w, l_w; + Arg args[20]; + int i; + int n; + + /* add nvp to device list */ + + gd->nvpp = (INumberVectorProperty **) XtRealloc ((char *)(gd->nvpp), + (gd->nnvpp+1) * sizeof(INumberVectorProperty*)); + gd->nvpp[gd->nnvpp++] = nvp; + + /* master rc, works faster to delay managing until finished */ + + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + nrc_w = XmCreateRowColumn (gg->prc_w, "NRC", args, n); + + /* property rc */ + + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmarginWidth, INDENT); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + hrc_w = XmCreateRowColumn (nrc_w, "NPF", args, n); + XtManageChild (hrc_w); + + /* property's status light */ + + n = 0; + nvp->aux = (void *) createLt (hrc_w, "NLT", args, n); + XtAddCallback ((Widget)nvp->aux, XmNexposeCallback, devLtCB, + (XtPointer)(gd-devices)); + XtManageChild ((Widget)nvp->aux); + + /* set PB , unless RO */ + + if (nvp->p != IP_RO) { + n = 0; + set_w = XmCreatePushButton (hrc_w, "Set", args, n); + XtAddCallback (set_w, XmNactivateCallback, newnum_cb, nvp); + XtManageChild (set_w); + } + + /* label */ + + n = 0; + l_w = XmCreateLabel (hrc_w, "NL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) nvp->label); + XtManageChild (l_w); + + /* one row for each vector element */ + + for (i = 0; i < nvp->nnp; i++) { + INumber *np = &nvp->np[i]; + char buf[128]; + + numberFormat (buf, np->format, np->value); + + n = 0; + f_w = XmCreateForm (nrc_w, "NF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 2*INDENT); n++; + l_w = XmCreateLabel (f_w, "NL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) np->label); + XtManageChild (l_w); + + switch (nvp->p) { + case IP_RO: + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + np->aux0 = (void *) XmCreateLabel (f_w, "NRO", args, n); + set_xmstring ((Widget) np->aux0, XmNlabelString, buf); + XtManageChild ((Widget) np->aux0); + break; + + case IP_RW: + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, WFLPOS); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, WFRPOS-2); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + np->aux0 = (void *) XmCreateLabel (f_w, "NRO", args, n); + set_xmstring ((Widget) np->aux0, XmNlabelString, buf); + XtManageChild ((Widget) np->aux0); + + /* FALLTHRU */ + + case IP_WO: + + newGUIWrNumber (np, f_w, WFRPOS); + XmTextFieldSetString ((Widget)np->aux1, buf); + break; + } + } + + drawDevLt (gd); + + XtManageChild (nrc_w); + pushDisplay(); + + return (0); +} + +/* build a gui for the writable portion of an INumber */ +static void +newGUIWrNumber (INumber *np, Widget p_w, int lpos) +{ + Arg args[20]; + int n; + + if (np->step) { + Widget up_w, dw_w; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNarrowDirection, XmARROW_UP); n++; + up_w = XmCreateArrowButton (p_w, "IDW", args, n); + XtAddCallback (up_w, XmNactivateCallback, newnumup_cb, np); + XtManageChild (up_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, up_w); n++; + XtSetArg (args[n], XmNarrowDirection, XmARROW_DOWN); n++; + dw_w = XmCreateArrowButton (p_w, "IUP", args, n); + XtAddCallback (dw_w, XmNactivateCallback, newnumdw_cb, np); + XtManageChild (dw_w); + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, dw_w); n++; + + } else { + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + } + + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, lpos); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + np->aux1 = (void *) XmCreateTextField (p_w, "NWO", args, n); + XtAddCallback ((Widget) np->aux1,XmNactivateCallback,newnum_cb,np->nvp); + XtManageChild ((Widget) np->aux1); +} + +/* capture and display state, msg and each value(s) for a set/newNumberVector */ +static int +setGUINumberVector (XMLEle *root, INumberVectorProperty *nvp, IGUIDevice *gd, +char errmsg[]) +{ + int new = !strcmp (tagXMLEle(root), "newNumberVector"); + XMLEle *ep; + char buf[64]; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp(tagXMLEle(ep), "oneNumber") == 0) { + char *name = findXMLAttValu (ep, "name"); + INumber *np = findNumber (nvp, name); + if (np) { + np->value = strtod (pcdataXMLEle(ep), NULL); + numberFormat (buf, np->format, np->value); + if (np->nvp->p == IP_WO || (np->nvp->p == IP_RW && new)) + XmTextFieldSetString ((Widget)np->aux1, buf); + else + set_xmstring ((Widget)np->aux0, XmNlabelString, buf); + } else { + sprintf (errmsg, "INDI: set %s.%s.%s not found", gd->device, + nvp->name, name); + return (-1); + } + } + } + + showMessage (root); + if (crackPState (root, &nvp->s, errmsg) == 0) + drawDevLt (gd); + return (0); +} + +/* add the given text onto the given device list in the given group and + * build its GUI. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +newGUITextVector(ITextVectorProperty *tvp, IGUIDevice *gd, IGUIGroup *gg, +char *errmsg) +{ + Widget set_w, trc_w; + Widget hrc_w, f_w, l_w; + Arg args[20]; + int i; + int n; + + /* add tvp to device list */ + + gd->tvpp = (ITextVectorProperty **) XtRealloc ((char *)(gd->tvpp), + (gd->ntvpp+1) * sizeof(ITextVectorProperty*)); + gd->tvpp[gd->ntvpp++] = tvp; + + /* master rc, works faster to delay managing until finished */ + + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + trc_w = XmCreateRowColumn (gg->prc_w, "TRC", args, n); + + /* property rc */ + + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmarginWidth, INDENT); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + hrc_w = XmCreateRowColumn (trc_w, "TPF", args, n); + XtManageChild (hrc_w); + + /* property's status light */ + + n = 0; + tvp->aux = (void *) createLt (hrc_w, "TLT", args, n); + XtAddCallback ((Widget)tvp->aux, XmNexposeCallback, devLtCB, + (XtPointer)(gd-devices)); + XtManageChild ((Widget)tvp->aux); + + /* set PB, unless RO */ + + if (tvp->p != IP_RO) { + n = 0; + set_w = XmCreatePushButton (hrc_w, "Set", args, n); + XtAddCallback (set_w, XmNactivateCallback, newtext_cb, tvp); + XtManageChild (set_w); + } + + /* label */ + + n = 0; + l_w = XmCreateLabel (hrc_w, "TL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) tvp->label); + XtManageChild (l_w); + + /* one row for each vector element */ + + for (i = 0; i < tvp->ntp; i++) { + IText *tp = &tvp->tp[i]; + + n = 0; + f_w = XmCreateForm (trc_w, "TF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 2*INDENT); n++; + l_w = XmCreateLabel (f_w, "TL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) tp->label); + XtManageChild (l_w); + + switch (tvp->p) { + + case IP_RO: + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + tp->aux0 = (void *) XmCreateLabel (f_w, "TRO", args, n); + set_xmstring ((Widget) tp->aux0, XmNlabelString, tp->text); + XtManageChild ((Widget) tp->aux0); + break; + + case IP_RW: + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, WFLPOS); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, WFRPOS-2); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + tp->aux0 = (void *) XmCreateLabel (f_w, "TRO", args, n); + set_xmstring ((Widget) tp->aux0, XmNlabelString, tp->text); + XtManageChild ((Widget) tp->aux0); + + /* FALLTHRU */ + + case IP_WO: + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, WFRPOS); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + XtSetArg (args[n], XmNvalue, tp->text); n++; + tp->aux1 = (void *) XmCreateTextField (f_w, "NWO", args, n); + XtAddCallback ((Widget) tp->aux1, XmNactivateCallback, + newtext_cb, tvp); + XtManageChild ((Widget) tp->aux1); + break; + } + } + + drawDevLt (gd); + + XtManageChild (trc_w); + pushDisplay(); + + return (0); +} + +/* capture and display state, msg and each value(s) for a set/newTextVector */ +static int +setGUITextVector (XMLEle *root, ITextVectorProperty *tvp, IGUIDevice *gd, +char errmsg[]) +{ + int new = !strcmp (tagXMLEle(root), "newTextVector"); + XMLEle *ep; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp(tagXMLEle(ep), "oneText") == 0) { + char *name = findXMLAttValu (ep, "name"); + IText *tp = findText (tvp, name); + if (tp) { + char *t = pcdataXMLEle (ep); + tp->text = strcpy (XtRealloc(tp->text,strlen(t)+1), t); + if (tp->tvp->p == IP_WO || (tp->tvp->p == IP_RW && new)) + XmTextFieldSetString ((Widget)tp->aux1, t); + else + set_xmstring ((Widget)tp->aux0, XmNlabelString, t); + } else { + sprintf (errmsg, "INDI: set %s.%s.%s not found", gd->device, + tvp->name, name); + return (-1); + } + } + } + + showMessage (root); + if (crackPState (root, &tvp->s, errmsg) == 0) + drawDevLt (gd); + return (0); +} + +/* add the given switch onto the given device list in the given group and + * build its GUI. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +newGUISwitchVector(ISwitchVectorProperty *svp, IGUIDevice *gd, IGUIGroup *gg, +char *errmsg) +{ + Widget w, l_w, hrc_w; + Widget src_w; + Arg args[20]; + int i; + int n; + + /* add svp to device list */ + + gd->svpp = (ISwitchVectorProperty **) XtRealloc ((char *)(gd->svpp), + (gd->nsvpp+1) * sizeof(ISwitchVectorProperty*)); + gd->svpp[gd->nsvpp++] = svp; + + /* master rc, work faster delay managing until finished */ + + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + src_w = XmCreateRowColumn (gg->prc_w, "SRC", args, n); + + /* property rc */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, INDENT); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + hrc_w = XmCreateRowColumn (src_w, "SPF", args, n); + XtManageChild (hrc_w); + + /* property's status light */ + + n = 0; + svp->aux = (void *) createLt (hrc_w, "NLS", args, n); + XtAddCallback ((Widget)svp->aux, XmNexposeCallback, devLtCB, + (XtPointer)(gd-devices)); + XtManageChild ((Widget)svp->aux); + + /* label */ + + n = 0; + l_w = XmCreateLabel (hrc_w, "SL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) svp->label); + XtManageChild (l_w); + + /* each element in a RC */ + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNmarginWidth, 2*INDENT); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, svp->nsp/5+1); n++; + switch (svp->r) { + case ISR_1OFMANY: + XtSetArg (args[n], XmNradioBehavior, 1); n++; + XtSetArg (args[n], XmNradioAlwaysOne, 1); n++; + break; + case ISR_ATMOST1: + XtSetArg (args[n], XmNradioBehavior, 1); n++; + XtSetArg (args[n], XmNradioAlwaysOne, 0); n++; + break; + case ISR_NOFMANY: + XtSetArg (args[n], XmNradioBehavior, 0); n++; + XtSetArg (args[n], XmNradioAlwaysOne, 0); n++; + break; + } + hrc_w = XmCreateRowColumn (src_w, "SRC", args, n); + XtManageChild (hrc_w); + + for (i = 0; i < svp->nsp; i++) { + ISwitch *sp = &svp->sp[i]; + + n = 0; + XtSetArg (args[n], XmNindicatorType, svp->r == ISR_NOFMANY ? + XmN_OF_MANY : XmONE_OF_MANY); n++; + XtSetArg (args[n], XmNset, sp->s == ISS_ON); n++; + w = XmCreateToggleButton (hrc_w, "STB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, newswitch_cb, sp); + set_xmstring (w, XmNlabelString, sp->label); + XtManageChild (w); + sp->aux = (void *) w; + } + + drawDevLt (gd); + + XtManageChild (src_w); + pushDisplay(); + + return (0); +} + +/* capture and display state, msg and each value(s) for a set/newSwitchVector */ +static int +setGUISwitchVector (XMLEle *root, ISwitchVectorProperty *svp, IGUIDevice *gd, +char errmsg[]) +{ + XMLEle *ep; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp(tagXMLEle(ep), "oneSwitch") == 0) { + char *name = findXMLAttValu (ep, "name"); + ISwitch *sp = findSwitch (svp, name); + if (sp) { + if (crackSState (ep, &sp->s, errmsg) < 0) + return (-1); + XmToggleButtonSetState ((Widget)sp->aux, sp->s==ISS_ON, 0); + } else { + sprintf (errmsg, "INDI: set %s.%s.%s not found", gd->device, + svp->name, name); + return (-1); + } + } + } + + showMessage (root); + if (crackPState (root, &svp->s, errmsg) == 0) + drawDevLt (gd); + return (0); +} + +/* add the given light onto the given device list in the given group and + * build its GUI. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +newGUILightVector(ILightVectorProperty *lvp, IGUIDevice *gd, IGUIGroup *gg, +char *errmsg) +{ + Widget lrc_w; + Widget w, l_w, hrc_w; + Arg args[20]; + int i; + int n; + + /* add lvp to device list */ + + gd->lvpp = (ILightVectorProperty **) XtRealloc ((char *)(gd->lvpp), + (gd->nlvpp+1) * sizeof(ILightVectorProperty*)); + gd->lvpp[gd->nlvpp++] = lvp; + + /* master rc, works faster to delay managing until finished */ + + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + lrc_w = XmCreateRowColumn (gg->prc_w, "LRC", args, n); + + /* property rc */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, INDENT); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + hrc_w = XmCreateRowColumn (lrc_w, "LPF", args, n); + XtManageChild (hrc_w); + + /* property's status light */ + + n = 0; + lvp->aux = (void *) createLt (hrc_w, "NLL", args, n); + XtAddCallback ((Widget)lvp->aux, XmNexposeCallback, devLtCB, + (XtPointer)(gd-devices)); + XtManageChild ((Widget)lvp->aux); + + /* label */ + + n = 0; + l_w = XmCreateLabel (hrc_w, "LL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) lvp->label); + XtManageChild (l_w); + + /* each element in a RC */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 2*INDENT); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, lvp->nlp); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + hrc_w = XmCreateRowColumn (lrc_w, "SRC", args, n); + XtManageChild (hrc_w); + + for (i = 0; i < lvp->nlp; i++) { + ILight *lp = &lvp->lp[i]; + char buf[128]; + + n = 0; + w = createLt (hrc_w, "LLt", args, n); + XtManageChild (w); + lp->aux = (void *) w; + + n = 0; + w = XmCreateLabel (hrc_w, "LL", args, n); + sprintf (buf, "%s ", lp->label); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + } + + drawDevLt (gd); + + XtManageChild (lrc_w); + pushDisplay(); + + return (0); +} + +/* capture and display state, msg and each new value(s) for a Light vector */ +static int +setGUILightVector (XMLEle *root, ILightVectorProperty *lvp, IGUIDevice *gd, +char errmsg[]) +{ + XMLEle *ep; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp(tagXMLEle(ep), "oneLight") == 0) { + char *name = findXMLAttValu (ep, "name"); + ILight *lp = findLight (lvp, name); + if (lp) { + if (crackPString (pcdataXMLEle(ep), &lp->s, errmsg) < 0) + return (-1); + drawLt ((Widget)lp->aux, lp->s); + } else { + sprintf (errmsg, "INDI: set %s.%s.%s not found", gd->device, + lvp->name, name); + return (-1); + } + } + } + + showMessage (root); + if (crackPState (root, &lvp->s, errmsg) == 0) + drawDevLt (gd); + return (0); +} + +/* add the given BLOB onto the given device list in the given group and + * build its GUI. set up display and saving callbacks to enable BLOBs on the + * service channel. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +newGUIBLOBVector(IBLOBVectorProperty *bvp, IGUIDevice *gd, IGUIGroup *gg, +char *errmsg) +{ + Widget set_w, brc_w; + Widget w, hrc_w, f_w, l_w; + Arg args[20]; + int i; + int n; + + /* add bvp to device list */ + + gd->bvpp = (IBLOBVectorProperty **) XtRealloc ((char *)(gd->bvpp), + (gd->nbvpp+1) * sizeof(IBLOBVectorProperty*)); + gd->bvpp[gd->nbvpp++] = bvp; + + /* master rc, works faster to delay managing until finished */ + + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + brc_w = XmCreateRowColumn (gg->prc_w, "BRC", args, n); + + /* property rc */ + + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmarginWidth, INDENT); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + hrc_w = XmCreateRowColumn (brc_w, "BPF", args, n); + XtManageChild (hrc_w); + + /* property's status light */ + + n = 0; + bvp->aux = (void *) createLt (hrc_w, "BLT", args, n); + XtAddCallback ((Widget)bvp->aux, XmNexposeCallback, devLtCB, + (XtPointer)(gd-devices)); + XtManageChild ((Widget)bvp->aux); + + /* set PB, unless RO */ + + if (bvp->p != IP_RO) { + n = 0; + set_w = XmCreatePushButton (hrc_w, "Set", args, n); + XtAddCallback (set_w, XmNactivateCallback, newBLOB_cb, bvp); + wtip (set_w, "Send the named file"); + XtManageChild (set_w); + } + + /* label */ + + n = 0; + l_w = XmCreateLabel (hrc_w, "BVL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) bvp->label); + XtManageChild (l_w); + + /* one row for each vector element */ + + for (i = 0; i < bvp->nbp; i++) { + IBLOB *bp = &bvp->bp[i]; + + /* TODO: this is really only correct for RO perm only */ + + n = 0; + f_w = XmCreateForm (brc_w, "BF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 2*INDENT); n++; + l_w = XmCreateLabel (f_w, "BL", args, n); + set_xmstring (l_w, XmNlabelString, (char *) bp->label); + XtManageChild (l_w); + + /* aux2 is filename T */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNcolumns, 23); n++; /* ISO date + .fts */ + w = XmCreateTextField (f_w, "BFN", args, n); + switch (bvp->p) { + case IP_WO: + wtip (w, "Name of file to send"); + XtAddCallback (w, XmNactivateCallback, newBLOB_cb, bvp); + break; + case IP_RO: + wtip (w, "Name of file to save"); + break; + case IP_RW: + wtip (w, "Name of file to send or save"); + break; + } + XtManageChild (w); + bp->aux2 = w; + + if (bvp->p != IP_WO) { + + /* aux1 is Save TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + w = XmCreateToggleButton (f_w, "Save", args, n); + wtip (w, "Automatically save each incoming image"); + set_xmstring (w, XmNlabelString, "Auto save to:"); + XtAddCallback (w, XmNvalueChangedCallback, saveBLOBCB, bvp); + XtManageChild (w); + bp->aux1 = w; + + /* aux0 is Display TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + w = XmCreateToggleButton (f_w, "Display", args, n); + wtip (w, "Automatically display each incoming FITS image"); + XtAddCallback (w, XmNvalueChangedCallback, displayBLOBCB, bvp); + set_xmstring (w, XmNlabelString, "Auto display"); + XtManageChild (w); + bp->aux0 = w; + } + } + + drawDevLt (gd); + + XtManageChild (brc_w); + pushDisplay(); + + return (0); +} + +/* capture and display state, msg and each new value(s) for a BLOB vector */ +static int +setGUIBLOBVector (XMLEle *root, IBLOBVectorProperty *bvp, IGUIDevice *gd, +char errmsg[]) +{ + XMLEle *ep; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp(tagXMLEle(ep), "oneBLOB") == 0) { + char *name = findXMLAttValu (ep, "name"); + IBLOB *bp = findBLOB (bvp, name); + if (bp) { + if (handleOneBLOB (ep, bp, errmsg) < 0) + return (-1); + } else { + sprintf (errmsg, "INDI: set %s.%s.%s not found", gd->device, + bvp->name, name); + return (-1); + } + } + } + + showMessage (root); + if (crackPState (root, &bvp->s, errmsg) == 0) + drawDevLt (gd); + return (0); +} + +/* process the given XML just arrived for the given oneBLOB. + * N.B. beware persistence: the XML memory is freed shortly after we return + */ +static int +handleOneBLOB (XMLEle *root, IBLOB *bp, char errmsg[]) +{ + IBLOBVectorProperty *bvp = bp->bvp; + char fn[64]; + int isz; + int i; + char *tsp; + + /* get uncompressed size */ + bp->size = atoi(findXMLAttValu (root, "size")); + if (bp->size < 0) { + sprintf (errmsg, "INDI: %s.%s.%s no size", bvp->device, bvp->name, + bp->name); + return (-1); + } + if (bp->size == 0) + return (0); /* well, ok, that was easy */ + + /* get format */ + if (crackCharAtt (root, bp->format, MAXINDIBLOBFMT, "format", errmsg)<0) + return (-1); + isz = !strcmp (bp->format,".fts.z") || !strcmp (bp->format,".fits.z"); + if (!isz && strcmp(bp->format,".fts") && strcmp(bp->format,".fits")) { + sprintf (errmsg, "INDI: %s.%s.%s not FITS", bvp->device, bvp->name, + bp->name); + return (-1); + } + + /* decode blob */ + if (bp->blob) + free (bp->blob); + bp->blob = malloc (3*pcdatalenXMLEle(root)/4); + bp->bloblen = from64tobits (bp->blob, pcdataXMLEle(root)); + if (bp->bloblen < 0) { + free (bp->blob); + sprintf (errmsg, "INDI: %s.%s.%s bad base64", bvp->device, + bvp->name, bp->name); + return (-1); + } + + /* uncompress effectively in place if z */ + if (isz) { + uLong nuncomp = bp->size; + unsigned char *uncomp = malloc (nuncomp); + int ok = uncompress (uncomp, &nuncomp, bp->blob, bp->bloblen); + if (ok != Z_OK) { + sprintf (errmsg, "INDI: %s.%s.%s uncompress error %d", + bvp->device, bvp->name, bp->name, ok); + free (uncomp); + return (-1); + } + free (bp->blob); + bp->blob = uncomp; + bp->bloblen = nuncomp; + } + + /* rig up a file name from the timestamp and format */ + for (i = 0, tsp = bvp->timestamp; *tsp != '\0'; tsp++) + if (isdigit(*tsp)) + fn[i++] = *tsp; + fn[i] = '\0'; + strcat (fn, bp->format); + if (isz) + *(strstr (fn,".z")) = '\0'; /* chop off .z */ + XmTextFieldSetString ((Widget)bp->aux2, fn); + + /* display, if enabled */ + if (XmToggleButtonGetState ((Widget)bp->aux0)) { + FImage fim, *fip = &fim; + if (readFITSmem (bp->blob, bp->bloblen, fip, errmsg) < 0) + return (-1); + sf_newFITS (fip, fn, 1); + } + + /* save, if enabled */ + if (XmToggleButtonGetState ((Widget)bp->aux1)) { + FILE *fp = fopend (fn, NULL, "w"); + if (fp) { + fwrite (bp->blob, bp->bloblen, 1, fp); + fclose (fp); + strcat (fn, ": saved"); + logMessage (bvp->timestamp, bvp->device, fn); + } else { + /* fopend() already notified user */ + XmToggleButtonSetState ((Widget)bp->aux0, False, True); + } + } + + return (0); +} + +/* display device, timestamp and message attributes, if message */ +static void +showMessage (XMLEle *root) +{ + char *m, *t, *d; + + m = findXMLAttValu (root, "message"); + if (!m[0]) + return; + t = findXMLAttValu (root, "timestamp"); + d = findXMLAttValu (root, "device"); + + logMessage (t, d, m); +} + +/* fill the given string with the current time as an INDI timestamp */ +static char * +setTStampNow (char tstamp[MAXINDITSTAMP]) +{ + time_t t = time(NULL); + struct tm *tp = gmtime (&t); + strftime (tstamp, MAXINDITSTAMP, "%Y-%m-%dT%H:%M:%S", tp); + return (tstamp); +} + +/* log a message prefixed with time and device */ +static void +logMessage (char *tstamp, char *device, char *msg) +{ + char buf[1024], *bp = buf; + char *msgnow; + int msgnowl; + + /* time and device first */ + if (tstamp && tstamp[0]) + bp += sprintf (bp, "%s: ", tstamp); + else { + char ts[MAXINDITSTAMP]; + bp += sprintf (bp, "%s: ", setTStampNow(ts)); + } + if (device && device[0]) + bp += sprintf (bp, "%s: ", device); + + /* add the message */ + bp += sprintf (bp, "%s", msg); + if (bp[-1] != '\n') { + *bp++ = '\n'; + *bp = '\0'; + } + + /* append to scrolled text */ + msgnow = XmTextGetString (msg_w); + msgnowl = strlen(msgnow); + XtFree (msgnow); + XmTextReplace (msg_w, msgnowl, msgnowl, buf); + + /* append to trace file, if on */ + if (XmToggleButtonGetState (mttb_w)) + traceMessage (buf); +} + +/* append buf in the trace file */ +static void +traceMessage (char *buf) +{ + char *fn = XmTextFieldGetString (mttf_w); + FILE *fp = fopend (fn, NULL, "a"); + if (fp) { + fputs (buf, fp); + fclose (fp); + } else { + XmToggleButtonSetState (mttb_w, False, True); + xe_msg (1, "%s:\n%s", fn, syserrstr()); + } + XtFree (fn); +} + +/* called when tracing is turned on or off */ +static void +traceon_cb (Widget w, XtPointer client, XtPointer call) +{ + if (XmToggleButtonGetState(w)) { + char *msgnow = XmTextGetString (msg_w); + traceMessage (msgnow); + XtFree (msgnow); + } +} + +/* draw the status light for the given property. + * visit each property and draw its light, then draw the worst state for + * device as a whole + */ +static void +drawDevLt (IGUIDevice *gd) +{ + IPState s, maxs = IPS_IDLE; + int i, j; + + for (i = 0; i < gd->ntvpp; i++) { + drawLt ((Widget)gd->tvpp[i]->aux, s = gd->tvpp[i]->s); + if (s > maxs) + maxs = s; + } + for (i = 0; i < gd->nnvpp; i++) { + drawLt ((Widget)gd->nvpp[i]->aux, s = gd->nvpp[i]->s); + if (s > maxs) + maxs = s; + } + for (i = 0; i < gd->nsvpp; i++) { + drawLt ((Widget)gd->svpp[i]->aux, s = gd->svpp[i]->s); + if (s > maxs) + maxs = s; + } + for (i = 0; i < gd->nlvpp; i++) { + drawLt ((Widget)gd->lvpp[i]->aux, s = gd->lvpp[i]->s); + if (s > maxs) + maxs = s; + for (j = 0; j < gd->lvpp[i]->nlp; j++) + drawLt ((Widget)gd->lvpp[i]->lp[j].aux, gd->lvpp[i]->lp[j].s); + + } + for (i = 0; i < gd->nbvpp; i++) { + drawLt ((Widget)gd->bvpp[i]->aux, s = gd->bvpp[i]->s); + if (s > maxs) + maxs = s; + } + + drawLt (gd->lda_w, maxs); +} + +/* find existing or optionally create new IGUIDevice for the given device. + * return pointer if ok (always true if create) else NULL with why in errmsg[] + */ +static IGUIDevice * +findDev (char *device, int create, char errmsg[]) +{ + IGUIDevice *gd; + int i; + + for (i = 0; i < ndevices; i++) + if (strcmp (devices[i].device, device) == 0) + break; + if (i < ndevices) + gd = &devices[i]; + else if (create) { + devices = (IGUIDevice *) XtRealloc ((void *) devices, + (ndevices+1)*sizeof(IGUIDevice)); + gd = &devices[ndevices++]; + memset (gd, 0, sizeof(*gd)); + strcpy (gd->device, device); + newGUIDevice (gd); + } else { + if (errmsg) + sprintf (errmsg, "Device %s not found", device); + return (NULL); + } + + return (gd); +} + +/* find existing or optionally create new IGUIGroup for the given device. + * return pointer if ok (always true if create) else NULL with why in errmsg[] + */ +static IGUIGroup * +findGroup (IGUIDevice *gd, char *group, int create, char errmsg[]) +{ + int i; + + for (i = 0; i < gd->ngrp; i++) + if(!strcmp (gd->grp[i]->group, group)) + return (gd->grp[i]); + + if (create) { + IGUIGroup *gg; + + gd->grp = (IGUIGroup **) XtRealloc ((void *) gd->grp, + (gd->ngrp+1)*sizeof(IGUIGroup*)); + gg = gd->grp[gd->ngrp++] = (IGUIGroup *)XtMalloc(sizeof(IGUIGroup)); + memset (gg, 0, sizeof(*gg)); + strcpy (gg->group, group); + newGUIGroup (gd, gg); + return (gg); + } else { + sprintf (errmsg, "Group %s not found", group); + return (NULL); + } +} + +/* find the named Number Vector in the given device, else return NULL with + * reason in optional whynot[] + */ +static INumberVectorProperty * +findNumberProperty (IGUIDevice *gd, char *name, char whynot[]) +{ + int i; + + for (i = 0; i < gd->nnvpp; i++) + if (strcmp (gd->nvpp[i]->name, name) == 0) + return (gd->nvpp[i]); + if (whynot) + sprintf (whynot, "INDI %s.%s: number not found", gd->device, name); + return (NULL); +} + +/* find the named Text Vector in the given device, else return NULL + * reason in optional whynot[] + */ +static ITextVectorProperty * +findTextProperty (IGUIDevice *gd, char *name, char whynot[]) +{ + int i; + + for (i = 0; i < gd->ntvpp; i++) + if (strcmp (gd->tvpp[i]->name, name) == 0) + return (gd->tvpp[i]); + if (whynot) + sprintf (whynot, "INDI %s.%s: text not found", gd->device, name); + return (NULL); +} + +/* find the named Switch Vector in the given device, else return NULL + * reason in optional whynot[] + */ +static ISwitchVectorProperty * +findSwitchProperty (IGUIDevice *gd, char *name, char whynot[]) +{ + int i; + + for (i = 0; i < gd->nsvpp; i++) + if (strcmp (gd->svpp[i]->name, name) == 0) + return (gd->svpp[i]); + if (whynot) + sprintf (whynot, "INDI %s.%s: switch not found", gd->device, name); + return (NULL); +} + +/* find the named Light Vector in the given device, else return NULL + * reason in optional whynot[] + */ +static ILightVectorProperty * +findLightProperty (IGUIDevice *gd, char *name, char whynot[]) +{ + int i; + + for (i = 0; i < gd->nlvpp; i++) + if (strcmp (gd->lvpp[i]->name, name) == 0) + return (gd->lvpp[i]); + if (whynot) + sprintf (whynot, "INDI %s.%s: light not found", gd->device, name); + return (NULL); +} + +/* find the named BLOB Vector in the given device, else return NULL + * reason in optional whynot[] + */ +static IBLOBVectorProperty * +findBLOBProperty (IGUIDevice *gd, char *name, char whynot[]) +{ + int i; + + for (i = 0; i < gd->nbvpp; i++) + if (strcmp (gd->bvpp[i]->name, name) == 0) + return (gd->bvpp[i]); + if (whynot) + sprintf (whynot, "INDI %s.%s: BLOB not found", gd->device, name); + return (NULL); +} + +/* find a particular Number in a NumberVector */ +static INumber * +findNumber (INumberVectorProperty *nvp, char *name) +{ + INumber *np; + + for (np = nvp->np; np < &nvp->np[nvp->nnp]; np++) + if (strcmp (np->name, name) == 0) + return (np); + return (NULL); +} + +/* find a particular Text in a TextVector */ +static IText * +findText (ITextVectorProperty *tvp, char *name) +{ + IText *tp; + + for (tp = tvp->tp; tp < &tvp->tp[tvp->ntp]; tp++) + if (strcmp (tp->name, name) == 0) + return (tp); + return (NULL); +} + +/* find a particular Switch in a SwitchVector */ +static ISwitch * +findSwitch (ISwitchVectorProperty *svp, char *name) +{ + ISwitch *sp; + + for (sp = svp->sp; sp < &svp->sp[svp->nsp]; sp++) + if (strcmp (sp->name, name) == 0) + return (sp); + return (NULL); +} + +/* find a particular Light in a LightVector */ +static ILight * +findLight (ILightVectorProperty *lvp, char *name) +{ + ILight *lp; + + for (lp = lvp->lp; lp < &lvp->lp[lvp->nlp]; lp++) + if (strcmp (lp->name, name) == 0) + return (lp); + return (NULL); +} + +/* find a particular BLOB in a BLOBVector */ +static IBLOB * +findBLOB (IBLOBVectorProperty *bvp, char *name) +{ + IBLOB *bp; + + for (bp = bvp->bp; bp < &bvp->bp[bvp->nbp]; bp++) + if (strcmp (bp->name, name) == 0) + return (bp); + return (NULL); +} + +/* crack any char[] attribute of the given XML element. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +crackCharAtt (XMLEle *root, char *vp, int maxl, char *name, char *errmsg) +{ + char *p = findXMLAttValu (root, name); + if (!p[0]) { + sprintf (errmsg, "%s has no %s attribute", tagXMLEle(root), name); + return (-1); + } + strncpy (vp, p, maxl); + vp[maxl-1] = '\0'; + return (0); +} + +/* crack a double attribute of the given XML element. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +crackDoubleAtt (XMLEle *root, double *dop, char *name, char *errmsg) +{ + char *t = findXMLAttValu (root, name); + if (!t[0]) { + sprintf (errmsg, "%s has no %s attribute", tagXMLEle(root), name); + return (-1); + } + *dop = strtod (t, NULL); + return (0); +} + +/* crack the perm attribute of the given XML element. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +crackPerm (XMLEle *root, IPerm *p, char *errmsg) +{ + char *pstr = findXMLAttValu (root, "perm"); + if (!pstr[0]) { + sprintf (errmsg, "%s has no perm attribute", tagXMLEle(root)); + return (-1); + } + + if (strcmp (pstr, "ro") == 0) + *p = IP_RO; + else if (strcmp (pstr, "wo") == 0) + *p = IP_WO; + else if (strcmp (pstr, "rw") == 0) + *p = IP_RW; + else { + sprintf (errmsg, "%s has bogus perm %s", tagXMLEle(root), pstr); + return (-1); + } + + return (0); +} + +/* crack the rule attribute of the given XML element. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +crackRule (XMLEle *root, ISRule *r, char *errmsg) +{ + char *rstr = findXMLAttValu (root, "rule"); + if (!rstr[0]) { + sprintf (errmsg, "%s has no rule attribute", tagXMLEle(root)); + return (-1); + } + + if (strcmp (rstr, "OneOfMany") == 0) + *r = ISR_1OFMANY; + else if (strcmp (rstr, "AtMostOne") == 0) + *r = ISR_ATMOST1; + else if (strcmp (rstr, "AnyOfMany") == 0) + *r = ISR_NOFMANY; + else { + sprintf (errmsg, "%s has bogus rule %s", tagXMLEle(root), rstr); + return (-1); + } + + return (0); +} + +/* crack the switch state pcdata value of the given XML element. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +crackSState (XMLEle *ep, ISState *s, char *errmsg) +{ + char *sstr = pcdataXMLEle (ep); + + if (strcmp (sstr, "On") == 0) + *s = ISS_ON; + else if (strcmp (sstr, "Off") == 0) + *s = ISS_OFF; + else { + sprintf(errmsg, "%s.%s: bogus switch state %s", + tagXMLEle(parentXMLEle(ep)), tagXMLEle(ep), sstr); + return (-1); + } + + return (0); +} + +/* crack the property state attribute of the given XML element. + * return 0 if ok else -1 with reason in errmsg[] + */ +static int +crackPState (XMLEle *root, IPState *sp, char *errmsg) +{ + char *sstr = findXMLAttValu (root, "state"); + if (!sstr[0]) { + sprintf (errmsg, "%s has no state attribute", tagXMLEle(root)); + return (-1); + } + return (crackPString (sstr, sp, errmsg)); +} + +static int +crackPString (char *str, IPState *sp, char errmsg[]) +{ + if (strstr (str, "Idle")) + *sp = IPS_IDLE; + else if (strstr (str, "Ok")) + *sp = IPS_OK; + else if (strstr (str, "Busy")) + *sp = IPS_BUSY; + else if (strstr (str, "Alert")) + *sp = IPS_ALERT; + else { + sprintf (errmsg, "IPState %s not found", str); + return (-1); + } + return (0); +} + +/* crack the given defNumberVector XML element. + * return a malloced INumberVectorProperty if ok else NULL and reason in errmsg + */ +static INumberVectorProperty * +crackdefNumberVector (XMLEle *root, char *errmsg) +{ + INumberVectorProperty nv, *nvp; /* use stack until sure */ + INumber *np; + XMLEle *e; + + /* init */ + memset (&nv, 0, sizeof(nv)); + + /* crack the attributes */ + if (crackCharAtt (root, nv.device, MAXINDIDEVICE,"device",errmsg) < 0) + return (NULL); + if (crackCharAtt (root, nv.name, MAXINDINAME, "name", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, nv.label, MAXINDILABEL, "label", errmsg) < 0) + strcpy (nv.label, nv.name); /* default label = name */ + if (crackCharAtt (root, nv.group, MAXINDIGROUP, "group", errmsg) < 0) + nv.group[0] = '\0'; /* default group is "" */ + if (crackPerm (root, &nv.p, errmsg) < 0) + return (NULL); + if (crackDoubleAtt (root, &nv.timeout, "timeout", errmsg) < 0) + nv.timeout = 0; + if (crackPState (root, &nv.s, errmsg) < 0) + return (NULL); + if (crackCharAtt (root,nv.timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (nv.timestamp); + + /* crack each number element */ + for (e = nextXMLEle(root,1); e != NULL; e = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(e), "defNumber") == 0) { + /* grow list, but don't count until sure */ + nv.np = (INumber *) XtRealloc ((char *)nv.np, + (nv.nnp+1)*sizeof(INumber)); + np = &nv.np[nv.nnp]; + memset (np, 0, sizeof(*np)); + + /* add each field */ + if (crackCharAtt (e, np->name, MAXINDINAME, "name",errmsg) < 0) + return (NULL); + if (crackCharAtt (e, np->label, MAXINDILABEL,"label",errmsg)<0) + strcpy (np->label, np->name); /* default */ + if (crackCharAtt(e, np->format,MAXINDIFORMAT,"format",errmsg)<0) + return (NULL); + if (crackDoubleAtt (e, &np->min, "min", errmsg) < 0) + return (NULL); + if (crackDoubleAtt (e, &np->max, "max", errmsg) < 0) + return (NULL); + if (crackDoubleAtt (e, &np->step,"step", errmsg) < 0) + return (NULL); + np->value = strtod (pcdataXMLEle(e), NULL); + + /* confident now in this Number */ + nv.nnp++; + } + } + + /* make the persistent copy, go back and set parent pointers */ + nvp = (INumberVectorProperty *) memcpy (XtMalloc(sizeof(nv)), &nv, + sizeof(nv)); + for (np = &nvp->np[0]; np < &nvp->np[nvp->nnp]; np++) + np->nvp = nvp; + + /* return malloced copy */ + return (nvp); +} + +/* crack the given defTextVector XML element. + * return a malloced ITextVectorProperty if ok else NULL and reason in errmsg + */ +static ITextVectorProperty * +crackdefTextVector (XMLEle *root, char *errmsg) +{ + ITextVectorProperty tv, *tvp; /* use stack until sure */ + IText *tp; + XMLEle *e; + + /* init */ + memset (&tv, 0, sizeof(tv)); + + /* crack the attributes */ + if (crackCharAtt (root, tv.device, MAXINDIDEVICE,"device", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, tv.name, MAXINDINAME, "name", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, tv.label, MAXINDILABEL, "label", errmsg) < 0) + strcpy (tv.label, tv.name); /* default label = name */ + if (crackCharAtt (root, tv.group, MAXINDIGROUP, "group", errmsg) < 0) + tv.group[0] = '\0'; /* default group is "" */ + if (crackPerm (root, &tv.p, errmsg) < 0) + return (NULL); + if (crackDoubleAtt (root, &tv.timeout, "timeout", errmsg) < 0) + tv.timeout = 0; + if (crackPState (root, &tv.s, errmsg) < 0) + return (NULL); + if (crackCharAtt (root,tv.timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (tv.timestamp); + + /* crack each text element */ + for (e = nextXMLEle(root,1); e != NULL; e = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(e), "defText") == 0) { + /* grow list, but don't count until sure */ + tv.tp = (IText *) XtRealloc ((char *)tv.tp, + (tv.ntp+1)*sizeof(IText)); + tp = &tv.tp[tv.ntp]; + memset (tp, 0, sizeof(*tp)); + + /* add each field */ + if (crackCharAtt (e, tp->name, MAXINDINAME, "name",errmsg) < 0) + return (NULL); + if (crackCharAtt (e, tp->label, MAXINDILABEL,"label",errmsg)<0) + strcpy (tp->label, tp->name); /* default */ + tp->text = XtNewString(pcdataXMLEle(e)); + + /* confident now in this Text */ + tv.ntp++; + } + } + + /* make the persistent copy, go back and set parent pointers */ + tvp = (ITextVectorProperty *) memcpy (XtMalloc(sizeof(tv)), &tv, + sizeof(tv)); + for (tp = &tvp->tp[0]; tp < &tvp->tp[tvp->ntp]; tp++) + tp->tvp = tvp; + + /* return malloced copy */ + return (tvp); +} + +/* crack the given defSwitchVector XML element. + * return a malloced ISwitchVectorProperty if ok else NULL and reason in errmsg + */ +static ISwitchVectorProperty * +crackdefSwitchVector (XMLEle *root, char *errmsg) +{ + ISwitchVectorProperty sv, *svp; /* use stack until sure */ + ISwitch *sp; + XMLEle *e; + + /* init */ + memset (&sv, 0, sizeof(sv)); + + /* crack the attributes */ + if (crackCharAtt (root, sv.device, MAXINDIDEVICE,"device", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, sv.name, MAXINDINAME, "name", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, sv.label, MAXINDILABEL, "label", errmsg) < 0) + strcpy (sv.label, sv.name); /* default label = name */ + if (crackCharAtt (root, sv.group, MAXINDIGROUP, "group", errmsg) < 0) + sv.group[0] = '\0'; /* default group is "" */ + if (crackPerm (root, &sv.p, errmsg) < 0) + return (NULL); + if (crackDoubleAtt (root, &sv.timeout, "timeout", errmsg) < 0) + sv.timeout = 0; + if (crackPState (root, &sv.s, errmsg) < 0) + return (NULL); + if (crackRule (root, &sv.r, errmsg) < 0) + return (NULL); + if (crackCharAtt (root,sv.timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (sv.timestamp); + + /* crack each switch element */ + for (e = nextXMLEle(root,1); e != NULL; e = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(e), "defSwitch") == 0) { + /* grow list, but don't count until sure */ + sv.sp = (ISwitch *) XtRealloc ((char *)sv.sp, + (sv.nsp+1)*sizeof(ISwitch)); + sp = &sv.sp[sv.nsp]; + memset (sp, 0, sizeof(*sp)); + + /* add each field */ + if (crackCharAtt (e, sp->name, MAXINDINAME, "name",errmsg) < 0) + return (NULL); + if (crackCharAtt (e, sp->label, MAXINDILABEL,"label",errmsg)<0) + strcpy (sp->label, sp->name); /* default */ + if (crackSState (e, &sp->s, errmsg) < 0) + return (NULL); + + /* confident now in this Switch */ + sv.nsp++; + } + } + + /* make the persistent copy, go back and set parent pointers */ + svp = (ISwitchVectorProperty *) memcpy (XtMalloc(sizeof(sv)), &sv, + sizeof(sv)); + for (sp = &svp->sp[0]; sp < &svp->sp[svp->nsp]; sp++) + sp->svp = svp; + + /* return malloced copy */ + return (svp); +} + +/* crack the given defLightVectory XML element. + * return a malloced ILightVectorProperty if ok else NULL and reason in errmsg + */ +static ILightVectorProperty * +crackdefLightVector (XMLEle *root, char *errmsg) +{ + ILightVectorProperty lv, *lvp; /* use stack until sure */ + ILight *lp; + XMLEle *e; + + /* init */ + memset (&lv, 0, sizeof(lv)); + + /* crack the attributes */ + if (crackCharAtt (root, lv.device, MAXINDIDEVICE,"device", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, lv.name, MAXINDINAME, "name", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, lv.label, MAXINDILABEL, "label", errmsg) < 0) + strcpy (lv.label, lv.name); /* default label = name */ + if (crackCharAtt (root, lv.group, MAXINDIGROUP, "group", errmsg) < 0) + lv.group[0] = '\0'; /* default group is "" */ + if (crackPState (root, &lv.s, errmsg) < 0) + return (NULL); + if (crackCharAtt (root,lv.timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (lv.timestamp); + + /* crack each light element */ + for (e = nextXMLEle(root,1); e != NULL; e = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(e), "defLight") == 0) { + /* grow list, but don't count until sure */ + lv.lp = (ILight *) XtRealloc ((char *)lv.lp, + (lv.nlp+1)*sizeof(ILight)); + lp = &lv.lp[lv.nlp]; + memset (lp, 0, sizeof(*lp)); + + /* add each field */ + if (crackCharAtt (e, lp->name, MAXINDINAME, "name",errmsg) < 0) + return (NULL); + if (crackCharAtt (e, lp->label, MAXINDILABEL,"label",errmsg)<0) + strcpy (lp->label, lp->name); /* default */ + if (crackPString (pcdataXMLEle(e), &lp->s, errmsg) < 0) + return (NULL); + + /* confident now in this Light */ + lv.nlp++; + } + } + + /* make the persistent copy, go back and set parent pointers */ + lvp = (ILightVectorProperty *) memcpy (XtMalloc(sizeof(lv)), &lv, + sizeof(lv)); + for (lp = &lvp->lp[0]; lp < &lvp->lp[lvp->nlp]; lp++) + lp->lvp = lvp; + + /* return malloced copy */ + return (lvp); +} + +/* crack the given defBLOBVector XML element. + * return a malloced IBLOBVectorProperty if ok else NULL and reason in errmsg + */ +static IBLOBVectorProperty * +crackdefBLOBVector (XMLEle *root, char *errmsg) +{ + IBLOBVectorProperty bv, *bvp; /* use stack until sure */ + IBLOB *bp; + XMLEle *e; + + /* init */ + memset (&bv, 0, sizeof(bv)); + + /* crack the attributes */ + if (crackCharAtt (root, bv.device, MAXINDIDEVICE,"device", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, bv.name, MAXINDINAME, "name", errmsg) < 0) + return (NULL); + if (crackCharAtt (root, bv.label, MAXINDILABEL, "label", errmsg) < 0) + strcpy (bv.label, bv.name); /* default label = name */ + if (crackCharAtt (root, bv.group, MAXINDIGROUP, "group", errmsg) < 0) + bv.group[0] = '\0'; /* default group is "" */ + if (crackPState (root, &bv.s, errmsg) < 0) + return (NULL); + if (crackPerm (root, &bv.p, errmsg) < 0) + return (NULL); + if (crackDoubleAtt (root, &bv.timeout, "timeout", errmsg) < 0) + bv.timeout = 0; + if (crackCharAtt (root,bv.timestamp,MAXINDITSTAMP,"timestamp",errmsg)<0) + setTStampNow (bv.timestamp); + + /* crack each BLOB element */ + for (e = nextXMLEle(root,1); e != NULL; e = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(e), "defBLOB") == 0) { + /* grow list, but don't count until sure */ + bv.bp = (IBLOB *) XtRealloc ((char *)bv.bp, + (bv.nbp+1)*sizeof(IBLOB)); + bp = &bv.bp[bv.nbp]; + memset (bp, 0, sizeof(*bp)); + + /* add each field */ + if (crackCharAtt (e, bp->name, MAXINDINAME, "name",errmsg) < 0) + return (NULL); + if (crackCharAtt (e, bp->label, MAXINDILABEL,"label",errmsg)<0) + strcpy (bp->label, bp->name); /* default */ + + /* confident now in this BLOB */ + bv.nbp++; + } + } + + /* make the persistent copy, go back and set parent pointers */ + bvp = (IBLOBVectorProperty *) memcpy (XtMalloc(sizeof(bv)), &bv, + sizeof(bv)); + for (bp = &bvp->bp[0]; bp < &bvp->bp[bvp->nbp]; bp++) + bp->bvp = bvp; + + /* return malloced copy */ + return (bvp); +} + +/* fill buf with properly formatted INumber string. return length */ +static int +numberFormat (char *buf, const char *format, double value) +{ + int w, f, s; + char m; + + if (sscanf (format, "%%%d.%d%c", &w, &f, &m) == 3 && m == 'm') { + /* INDI sexi format */ + switch (f) { + case 9: s = 360000; break; + case 8: s = 36000; break; + case 6: s = 3600; break; + case 5: s = 600; break; + default: s = 60; break; + } + return (fs_sexa (buf, value, w-f, s)); + } else { + /* normal printf format */ + return (sprintf (buf, format, value)); + } +} + +/* sometimes the indi window does not seem to finish its geo management, no + * clue why. this hack just tries to goose things into action again. it helps + * some, but still is not perfect. + */ +static void +pushDisplay() +{ + Dimension w; + + get_something (indi_w, XmNwidth, (XtArgVal)&w); + w += 1; + set_something (indi_w, XmNwidth, (XtArgVal)w); + XmUpdateDisplay (indi_w); +} + + +/* print the boilerplate comment introducing xml */ +static void +xmlv1() +{ + fprintf (swfp, "\n"); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: indimenu.c,v $ $Date: 2014/02/03 01:41:23 $ $Revision: 1.83 $ $Name: $"}; diff --git a/GUI/xephem/jpeg2pm.c b/GUI/xephem/jpeg2pm.c new file mode 100644 index 0000000..1e1c125 --- /dev/null +++ b/GUI/xephem/jpeg2pm.c @@ -0,0 +1,195 @@ +#include +#include +#include + +#include + +#include "jpeglib.h" +#include "xephem.h" + +/* read an open jpeg file and return a new pixmap and its size. + * return 0 if ok, else fill why[] and return -1. + */ +int +jpeg2pm (Display *dsp, +Colormap cm, +FILE *jpegfp, +int *wp, int *hp, +Pixmap *pmp, +XColor xcols[256], +char why[]) +{ + Window win = RootWindow(dsp, DefaultScreen(dsp)); + unsigned char *jpegpix; + unsigned char r[256], g[256], b[256]; + XImage *xip; + Pixmap pm; + GC gc; + int x, y; + int w, h; + int i; + + /* read the image */ + jpegpix = jpegRead (jpegfp, &w, &h, r, g, b, why); + if (!jpegpix) { + strcpy (why, "Could not read jpeg image\n"); + return (-1); + } + + /* allocate colors -- don't be too fussy */ + for (i = 0; i < 256; i++) { + XColor *xcp = xcols+i; + xcp->red = ((short)(r[i] & 0xf8) << 8) | 0x7ff; + xcp->green = ((short)(g[i] & 0xf8) << 8) | 0x7ff; + xcp->blue = ((short)(b[i] & 0xf8) << 8) | 0x7ff; + if (!XAllocColor (dsp, cm, xcp)) { + strcpy (why, "Can not get all image map colors"); + free ((void *)(jpegpix)); + if (i > 0) + freeXColors (dsp, cm, xcols, i); + return (-1); + } + } + + /* create XImage */ + xip = create_xim (w, h); + if (!xip) { + freeXColors (dsp, cm, xcols, 256); + free ((void *)jpegpix); + strcpy (why, "No memory for image"); + return (-1); + } + + /* N.B. now obligued to free xip */ + + /* fill XImage with image */ + for (y = 0; y < h; y++) { + int yrow = y*w; + for (x = 0; x < w; x++) { + int gp = (int)jpegpix[x + yrow]; + unsigned long p = xcols[gp].pixel; + XPutPixel (xip, x, y, p); + } + } + + /* create pixmap and fill with image */ + pm = XCreatePixmap (dsp, win, w, h, xip->depth); + gc = DefaultGC (dsp, DefaultScreen(dsp)); + XPutImage (dsp, pm, gc, xip, 0, 0, 0, 0, w, h); + + /* free jpegpix and xip */ + free ((void *)jpegpix); + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); + + /* that's it! */ + *wp = w; + *hp = h; + *pmp = pm; + return (0); +} + +/* lib jpeg's error scheme */ +struct my_error_mgr { + struct jpeg_error_mgr pub; /* "public" fields */ + jmp_buf setjmp_buffer; /* for return to caller */ +}; +typedef struct my_error_mgr *my_error_ptr; +static void +my_error_exit (j_common_ptr cinfo) +{ + my_error_ptr myerr = (my_error_ptr) cinfo->err; + longjmp(myerr->setjmp_buffer, 1); +} + +unsigned char * +jpegRead(FILE *infile, int *width, int *height, unsigned char r[256], +unsigned char g[256], unsigned char b[256], char why[]) +{ + struct jpeg_decompress_struct cinfo; + struct my_error_mgr jerr; + unsigned char *retBuffer=NULL; + unsigned char *rb; + JSAMPARRAY buffer; /* Output row buffer */ + int row_stride; /* physical row in output buffer */ + int i; + + /* set up the normal JPEG error routines, then override error_exit */ + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + + /* Establish the setjmp return context for my_error_exit to use. */ + if (setjmp(jerr.setjmp_buffer)) { + /* If we get here, the JPEG code has signaled an error. */ + jpeg_destroy_decompress(&cinfo); + if (retBuffer) + free(retBuffer); + strcpy (why, "jpeg reports error during decompression"); + return (NULL); + } + + /* init decompression. + * We can ignore the return value from jpeg_read_header since + * (a) suspension is not possible with the stdio data source, and + * (b) we passed TRUE to reject a tables-only JPEG file as an error. + * See libjpeg.doc for more info. + */ + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, infile); + (void) jpeg_read_header(&cinfo, TRUE); + + /* start decompression, 1-byte pixels, 256 colors */ + cinfo.quantize_colors = TRUE; + cinfo.desired_number_of_colors = 256; + cinfo.two_pass_quantize = TRUE; + cinfo.out_color_space = JCS_RGB; + jpeg_start_decompress(&cinfo); + + /* get image memory */ + if (!(retBuffer = (unsigned char *) malloc(cinfo.output_width + * cinfo.output_height * cinfo.output_components))) { + jpeg_destroy_decompress(&cinfo); + strcpy (why, "Couldn't create space for JPEG read"); + return(NULL); + } + + /* Make a one-row-high sample array that will go away when done */ + row_stride = cinfo.output_width * cinfo.output_components; + buffer = (*cinfo.mem->alloc_sarray) + ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + + /* loop through file, creating image array */ + rb = retBuffer; + row_stride = cinfo.output_width * cinfo.output_components; + while (cinfo.output_scanline < cinfo.output_height) { + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + memcpy(rb,buffer[0],row_stride); + rb += row_stride; + } + + /* report back size */ + *width = cinfo.output_width; + *height = cinfo.output_height; + + /* set up X colormap */ + if (cinfo.out_color_components == 3) { + for (i=0; i < cinfo.actual_number_of_colors; i++) { + r[i] = (unsigned char)cinfo.colormap[0][i]; + g[i] = (unsigned char)cinfo.colormap[1][i]; + b[i] = (unsigned char)cinfo.colormap[2][i]; + } + } else { + for (i=0; i < cinfo.actual_number_of_colors; i++) { + r[i] = g[i] = b[i] = (unsigned char)cinfo.colormap[0][i]; + } + } + + /* clean up and done */ + (void) jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + return (retBuffer); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: jpeg2pm.c,v $ $Date: 2004/01/10 05:33:23 $ $Revision: 1.3 $ $Name: $"}; diff --git a/GUI/xephem/jupmenu.c b/GUI/xephem/jupmenu.c new file mode 100644 index 0000000..f6789fe --- /dev/null +++ b/GUI/xephem/jupmenu.c @@ -0,0 +1,2553 @@ +/* code to manage the stuff on the "jupiter" menu. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define MINR 10 /* min distance for picking, pixels */ + +/* local record of what is now on screen for easy id from mouse picking. + */ +typedef struct { + Obj o; /* copy of object info. + * copy from DB or, if jupiter moon, we fill in just + * o_name and s_mag/ra/dec + */ + int x, y; /* screen coord */ +} ScreenObj; + +/* malloced arrays for each view */ +typedef enum { + SO_MAIN, SO_SHADOW, SO_TOP, SO_N +} SOIdx; +static ScreenObj *screenobj[SO_N]; +static int nscreenobj[SO_N]; + +static void jm_create_shell_w (void); +static void jm_create_tvform_w (void); +static void jm_create_jsform_w (void); +static void jm_set_buttons (int whether); +static void jm_sstats_close_cb (Widget w, XtPointer client, XtPointer call); +static void jm_sstats_cb (Widget w, XtPointer client, XtPointer call); +static void jm_option_cb (Widget w, XtPointer client, XtPointer call); +static void jm_cpdmapping_cb (Widget w, XtPointer client, XtPointer call); +static void jm_scale_cb (Widget w, XtPointer client, XtPointer call); +static void jm_activate_cb (Widget w, XtPointer client, XtPointer call); +static int jm_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void jt_unmap_cb (Widget w, XtPointer client, XtPointer call); +static void jt_map_cb (Widget w, XtPointer client, XtPointer call); +static void jt_track_size (void); +static void jt_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static int jt_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void jm_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void jm_close_cb (Widget w, XtPointer client, XtPointer call); +static void jm_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void jm_anim_cb (Widget w, XtPointer client, XtPointer call); +static void jm_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void jm_da_input_cb (Widget w, XtPointer client, XtPointer call); +static void jm_create_popup (void); +static void jm_fill_popup (ScreenObj *sop, int justname); +static void jm_help_cb (Widget w, XtPointer client, XtPointer call); +static void jm_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void jm_goto_cb (Widget w, XtPointer client, XtPointer call); +static void jm_print_cb (Widget w, XtPointer client, XtPointer call); +static void jm_print (void); +static void jm_ps_annotate (Now *np); +static void jm_grsl_cb (Widget w, XtPointer client, XtPointer call); +static void make_gcs (void); +static void j_calibline (Display *dsp, Drawable win, GC gc, int xc, int yc, + char *tag, int tw, int th, int l); +static void jm_draw_map (Widget w, Obj *jop, double jupsize, double cmlII, + MoonData md[J_NMOONS]); + +static void add_screenobj (SOIdx, Obj *op, int x, int y); +static void reset_screenobj (SOIdx); +static ScreenObj *close_screenobj (SOIdx, int x, int y); + +static void sky_background (Drawable win, unsigned w, unsigned h, int fmag, + double ra0, double dec0, double scale, double rad, int fliptb, int fliplr); + +static Widget jupshell_w; /* main shell */ +static Widget jsform_w; /* statistics form */ +static Widget jmframe_w; /* main frame */ +static Widget jtform_w; /* top-view form */ +static Widget jtframe_w; /* top-view frame */ +static Widget jda_w; /* main drawing area */ +static Widget jtda_w; /* top-view drawing area */ +static Widget cmlI_w, cmlII_w; /* labels for displaying GRS coords */ +static Widget scale_w; /* size scale */ +static Widget limmag_w; /* limiting magnitude scale */ +static Widget dt_w; /* main date/time stamp widget */ +static Widget sdt_w; /* statistics date/time stamp widget */ +static Widget skybkg_w; /* toggle for controlling sky background */ +static Widget topview_w; /* toggle for controlling top view */ +static Widget tel_w; /* PB to send position to telescope */ +static Widget grsl_w; /* TF of GRS Sys II longitude, degrees */ +static Pixmap jm_pm; /* main pixmap */ +static Pixmap jt_pm; /* top-view pixmap */ +static GC j_fgc, j_bgc, j_xgc; /* various colors and operators */ +static XFontStruct *j_fs; /* font for labels */ +static int j_cw, j_ch; /* size of label font */ +static int jm_selecting; /* set while our fields are being selected */ +static int brmoons; /* whether we want to brightten the moons */ +static int tags; /* whether we want tags on the drawing */ +static int flip_tb; /* whether we want to flip top/bottom */ +static int flip_lr; /* whether we want to flip left/right */ +static int skybkg; /* whether we want sky background */ +static int topview; /* whether we want the top view */ + +static Widget jmpu_w; /* main popup */ +static Widget jmpu_name_w; /* popup name label */ +static Widget jmpu_ra_w; /* popup RA label */ +static Widget jmpu_dec_w; /* popup Dec label */ +static Widget jmpu_mag_w; /* popup Mag label */ + +#define MAXSCALE 20.0 /* max scale mag factor */ +#define NORM 27.0 /* max Callisto orbit radius */ +#define MAPSCALE(r) ((r)*((int)nx)/NORM/2*scale) +#define XCORD(x) ((int)(((int)nx)/2.0 + ew*MAPSCALE(x) + 0.5)) +#define YCORD(y) ((int)(((int)ny)/2.0 - ns*MAPSCALE(y) + 0.5)) +#define ZCORD(z) ((int)(((int)ny)/2.0 + MAPSCALE(z) + 0.5)) +#define MOVIE_STEPSZ 0.25 /* movie step size, hours */ +#define PRTR 16 /* printing table row, up from bottom */ +#define PRCW 7 /* printing char width */ + +/* field star support */ +static ObjF *fstars; /* malloced list of field stars, or NULL */ +static int nfstars; /* number of entries in fstars[] */ +static double fsdec, fsra; /* location when field stars were loaded */ +#define FSFOV degrad(1.0) /* size of FOV to fetch, rads */ +#define FSMAG 20.0 /* limiting mag for fetch */ +#define FSMOVE degrad(.2) /* reload when jup has moved this far, rads */ +static void jm_loadfs (double ra, double dec); + +enum {CEV, CSV, CPS, CTR, CX, CY, CZ, CRA, CDEC, CMAG, CNum}; /* j_w col idx */ +static Widget j_w[J_NMOONS][CNum];/* the data display widgets */ + +static char jupcategory[] = "Jupiter"; /* Save category */ + +/* info about the gif we use to morph an image */ +static char jmapbasenm[] = "jupitermap.gif"; /* base file name */ +static XColor jmapxcols[256]; /* pixels and colors */ +static unsigned char *jmappix; /* malloced wxh of gif pixels */ +#define JMAPGRSX 125 /* gif x of GRS */ +#define JMAPW 512 /* gif width */ +#define JMAPH 256 /* gif height */ +static Pixel jbg_p; /* background color */ + +static double pole_ra, pole_dec; + +/* called when the jupiter menu is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, just get out there and do it! + */ +void +jm_manage () +{ + if (!jupshell_w) { + jm_create_shell_w(); + jm_create_jsform_w(); + jm_create_tvform_w(); + make_gcs(); + } + + XtPopup (jupshell_w, XtGrabNone); + set_something (jupshell_w, XmNiconic, (XtArgVal)False); + jm_set_buttons(jm_selecting); + + /* register we are now up */ + setXRes (jm_viewupres(), "1"); +} + +/* called to recompute and fill in values for the jupiter menu. + * don't bother if it doesn't exist or is unmanaged now or no one is logging. + */ +void +jm_update (np, how_much) +Now *np; +int how_much; +{ + static char fmt[] = "%7.3f"; + Obj *eop = db_basic (SUN); + Obj *jop = db_basic (JUPITER); + MoonData md[J_NMOONS]; + char *dir, buf[1024]; + int wantstats; + double cmlI, cmlII; + double jupsize; + int i; + + /* see if we should bother */ + if (!jupshell_w) + return; + wantstats = XtIsManaged(jsform_w) || any_ison() || how_much; + if (!isUp(jupshell_w) && !wantstats) + return; + + watch_cursor (1); + + /* compute md[0].x/y/z/mag/ra/dec and md[1..NM-1].x/y/z/mag info */ + sprintf (buf, "%s/auxil", getShareDir()); + dir = expand_home (buf); + jupiter_data (mjd, dir, eop, jop, &jupsize, &cmlI, &cmlII, &pole_ra, + &pole_dec, md); + + if (wantstats) { + for (i = 0; i < J_NMOONS; i++) { + if (i > 0) { + f_double (j_w[i][CEV], "%1.0f", (double)md[i].evis); + f_double (j_w[i][CSV], "%1.0f", (double)md[i].svis); + f_double (j_w[i][CPS], "%1.0f", (double)md[i].pshad); + f_double (j_w[i][CTR], "%1.0f", (double)md[i].trans); + f_double (j_w[i][CX], fmt, md[i].x); + f_double (j_w[i][CY], fmt, md[i].y); + f_double (j_w[i][CZ], fmt, md[i].z); + } + f_double (j_w[i][CMAG], "%4.1f", md[i].mag); + f_ra (j_w[i][CRA], md[i].ra); + f_prdec (j_w[i][CDEC], md[i].dec); + } + + f_double (cmlI_w, fmt, raddeg(cmlI)); + f_double (cmlII_w, fmt, raddeg(cmlII)); + timestamp (np, sdt_w); + } + + if (isUp(jupshell_w)) { + jm_draw_map (jda_w, jop, jupsize, cmlII, md); + timestamp (np, dt_w); + } + + watch_cursor (0); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +jm_newres() +{ + if (!jupshell_w) + return; + make_gcs (); + jm_update (mm_get_now(), 1); +} + +/* called when the database has changed. + * if we are drawing background, we'd best redraw everything. + */ +/* ARGSUSED */ +void +jm_newdb (appended) +int appended; +{ + if (skybkg) + jm_update (mm_get_now(), 1); +} + +int +jm_ison() +{ + return (isUp(jupshell_w)); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +jm_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + jm_selecting++; + else if (jm_selecting > 0) + --jm_selecting; + + if (jupshell_w) + if ((whether && jm_selecting == 1) /* first one to want on */ + || (!whether && jm_selecting == 0) /* last one to want off */) + jm_set_buttons (whether); +} + +/* called to put up or remove the watch cursor. */ +void +jm_cursor (c) +Cursor c; +{ + Window win; + + if (jupshell_w && (win = XtWindow(jupshell_w)) != 0) { + Display *dsp = XtDisplay(jupshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (jsform_w && (win = XtWindow(jsform_w)) != 0) { + Display *dsp = XtDisplay(jsform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (jtform_w && (win = XtWindow(jtform_w)) != 0) { + Display *dsp = XtDisplay(jtform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +jm_viewupres() +{ + return ("JupViewUp"); +} + +/* create the main shell */ +static void +jm_create_shell_w() +{ + typedef struct { + char *name; /* toggle button instance name, or NULL */ + char *label; /* label */ + int *flagp; /* pointer to global flag, or NULL if none */ + Widget *wp; /* widget to save, or NULL */ + char *tip; /* widget tip */ + } Option; + static Option options[] = { + {NULL, "Top view", &topview, &topview_w, + "When on, show view looking from high above N pole"}, + {"SkyBkg", "Sky background", &skybkg, &skybkg_w, + "When on, sky will include database objects and Field Stars"}, + {"BrightMoons","Bright moons", &brmoons, NULL, + "Display moons disproportionately bright, even if below limit"}, + {"Tags", "Tags", &tags, NULL, + "Label each moon with its Roman Numeral sequence number"}, + {"FlipTB", "Flip T/B", &flip_tb, NULL, + "Flip the display top-to-bottom"}, + {"FlipLR", "Flip L/R", &flip_lr, NULL, + "Flip the display left-to-right"}, + }; + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Jupiter"}, + {"on Mouse...", "Jupiter_mouse"}, + {"on Control...", "Jupiter_control"}, + {"on View...", "Jupiter_view"}, + }; + Widget w; + Widget mb_w, pd_w, cb_w; + Widget jupform_w; + XmString str; + Arg args[20]; + int n; + int i; + + /* create shell and form */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Jupiter view"); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Jupiter"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + jupshell_w = XtCreatePopupShell ("Jupiter", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (jupshell_w); + set_something (jupshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (jupshell_w, XmNpopdownCallback, jm_popdown_cb, 0); + sr_reg (jupshell_w, "XEphem*Jupiter.width", jupcategory, 0); + sr_reg (jupshell_w, "XEphem*Jupiter.height", jupcategory, 0); + sr_reg (jupshell_w, "XEphem*Jupiter.x", jupcategory, 0); + sr_reg (jupshell_w, "XEphem*Jupiter.y", jupcategory, 0); + sr_reg (NULL, jm_viewupres(), jupcategory, 0); + + n = 0; + jupform_w = XmCreateForm (jupshell_w, "JupiterF", args, n); + XtAddCallback (jupform_w, XmNhelpCallback, jm_help_cb, 0); + XtManageChild (jupform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (jupform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + XtAddCallback (pd_w, XmNmapCallback, jm_cpdmapping_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* add the "Print... " push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "P", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, jm_print_cb, 0); + wtip (w, "Print front view and detail table"); + XtManageChild (w); + + /* add the "User annot... " push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "A", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* add the "Field stars" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "FS", args, n); + set_xmstring (w, XmNlabelString, "Field Stars..."); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)fs_manage,0); + wtip (w, "Define where GSC and PPM catalogs are to be found"); + XtManageChild (w); + + /* add the "GOTO" push button */ + + n = 0; + tel_w = XmCreatePushButton (pd_w, "GOTO", args, n); + set_xmstring (tel_w, XmNlabelString, "Telescope GoTo"); + XtAddCallback (tel_w, XmNactivateCallback, jm_goto_cb, 0); + wtip (tel_w, "Send position to external application"); + XtManageChild (tel_w); + + /* add the "movie" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Anim", args, n); + set_xmstring (w, XmNlabelString, "Animation demo"); + XtAddCallback (w, XmNactivateCallback, jm_anim_cb, 0); + wtip (w, "Start/Stop a fun time-lapse animation"); + XtManageChild (w); + + /* add the "Movie loop ... " push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "ML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, jm_mloop_cb, 0); + wtip (w, "Add this scene to the movie loop"); + XtManageChild (w); + + /* add the "close" push button beneath a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, jm_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + for (i = 0; i < XtNumber(options); i++) { + Option *op = &options[i]; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (pd_w, op->name ? op->name : "JMTB", + args, n); + XtAddCallback (w, XmNvalueChangedCallback, jm_option_cb, + (XtPointer)(op->flagp)); + set_xmstring (w, XmNlabelString, op->label); + if (op->flagp) + *(op->flagp) = XmToggleButtonGetState(w); + if (op->wp) + *op->wp = w; + if (op->tip) + wtip (w, op->tip); + XtManageChild (w); + if (op->name) + sr_reg (w, NULL, jupcategory, 1); + } + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the More Info control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Stats", args, n); + set_xmstring (w, XmNlabelString, "More info..."); + XtAddCallback (w, XmNactivateCallback, jm_sstats_cb, NULL); + wtip (w, "Display additional details"); + XtManageChild (w); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, jm_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make the date/time stamp label */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + dt_w = XmCreateLabel (jupform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* establishes size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make the scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 10); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + scale_w = XmCreateScale (jupform_w, "Scale", args, n); + XtAddCallback (scale_w, XmNdragCallback, jm_scale_cb, 0); + XtAddCallback (scale_w, XmNvalueChangedCallback, jm_scale_cb, 0); + wtip (scale_w, "Zoom in and out"); + XtManageChild (scale_w); + sr_reg (scale_w, NULL, jupcategory, 0); + + /* make the limiting mag scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 20); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + limmag_w = XmCreateScale (jupform_w, "LimMag", args, n); + XtAddCallback (limmag_w, XmNdragCallback, jm_scale_cb, 0); + XtAddCallback (limmag_w, XmNvalueChangedCallback, jm_scale_cb, 0); + wtip (limmag_w, "Adjust the brightness and limiting magnitude"); + XtManageChild (limmag_w); + sr_reg (limmag_w, NULL, jupcategory, 0); + + /* make a frame for the drawing area. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, scale_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, limmag_w); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + jmframe_w = XmCreateFrame (jupform_w, "JupFrame", args, n); + XtManageChild (jmframe_w); + + /* make a drawing area for drawing the little map */ + + n = 0; + jda_w = XmCreateDrawingArea (jmframe_w, "JupiterMap", args, n); + XtAddCallback (jda_w, XmNexposeCallback, jm_da_exp_cb, 0); + XtAddCallback (jda_w, XmNinputCallback, jm_da_input_cb, + (XtPointer)SO_MAIN); + XtManageChild (jda_w); +} + +/* make the statistics form dialog */ +static void +jm_create_jsform_w() +{ + typedef struct { + int col; /* C* column code */ + int moononly; /* applies to moons only */ + char *collabel; /* column label */ + char *suffix; /* suffix for plot/list/search name */ + char *tip; /* widget tip */ + } MoonColumn; + static MoonColumn mc[] = { + {CEV, 1, "E", "EVis", + "Whether geometrically visible from Earth"}, + {CSV, 1, "S", "SVis", + "Whether in Sun light"}, + {CPS, 1, "P", "PShad", + "Whether shadow falls on planet"}, + {CTR, 1, "T", "Transit", + "Whether moon is transitting face of planet"}, + {CX, 1, "X (+E)", "X", + "Apparent displacement east of planetary center"}, + {CY, 1, "Y (+S)", "Y", + "Apparent displacement south of planetary center"}, + {CZ, 1, "Z (+front)", "Z", + "Jupiter radii towards Earth from planetary center"}, + {CRA, 0, "RA", "RA", + "Right Ascension (to Main's settings)"}, + {CDEC, 0, "Dec", "Dec", + "Declination (to Main's settings)"}, + {CMAG, 0, "Mag", "Mag", + "Apparent visual magnitude"}, + }; + MoonData md[J_NMOONS]; + Widget w; + Widget rc_w, title_w, sep_w; + Arg args[20]; + int n; + int i; + + /* just get moon names */ + jupiter_data (0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, md); + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + jsform_w = XmCreateFormDialog (jupshell_w, "JupiterStats", args, n); + set_something (jsform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(jsform_w),"XEphem*JupiterStats.x",jupcategory,0); + sr_reg (XtParent(jsform_w),"XEphem*JupiterStats.y",jupcategory,0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Jupiter info"); n++; + XtSetValues (XtParent(jsform_w), args, n); + + /* make CML title label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + title_w = XmCreateLabel (jsform_w, "JupTL", args, n); + XtManageChild (title_w); + set_xmstring (title_w, XmNlabelString, + "Central Meridian Longitudes (degs):"); + + /* make the Sys I r/c */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 1); n++; + rc_w = XmCreateRowColumn (jsform_w, "IRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "JupCMLIMsg", args, n); + set_xmstring (w, XmNlabelString, "Sys I:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNuserData, "Jupiter.CMLI"); n++; + cmlI_w = XmCreatePushButton (rc_w, "JupCMLI", args, n); + XtAddCallback (cmlI_w, XmNactivateCallback, jm_activate_cb, 0); + wtip (cmlI_w, "Longitude currently facing Earth, in system I coordinates"); + XtManageChild (cmlI_w); + + /* make the Sys II r/c */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 1); n++; + rc_w = XmCreateRowColumn (jsform_w, "IIRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "JupCMLIIMsg", args, n); + set_xmstring (w, XmNlabelString, "Sys II:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNuserData, "Jupiter.CMLII"); n++; + cmlII_w = XmCreatePushButton (rc_w, "JupCMLII", args, n); + XtAddCallback (cmlII_w, XmNactivateCallback, jm_activate_cb, 0); + wtip (cmlII_w, "Longitude currently facing Earth, in system II coordinates"); + XtManageChild (cmlII_w); + + /* make the GRS/CML prompt and TF */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 48); n++; + w = XmCreateLabel (jsform_w, "GRSCMLL", args, n); + XtManageChild (w); + set_xmstring (w, XmNlabelString, "GRS Sys II Long:"); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 52); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + grsl_w = XmCreateTextField (jsform_w, "GRSSysIILong", args, n); + XtAddCallback (grsl_w, XmNactivateCallback, jm_grsl_cb, NULL); + XtManageChild (grsl_w); + sr_reg (grsl_w, NULL, jupcategory, 1); + + /* make table title label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, grsl_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + title_w = XmCreateLabel (jsform_w, "JupML", args, n); + XtManageChild (title_w); + set_xmstring (title_w, XmNlabelString,"Moon Positions (Jupiter radii)"); + + /* make the moon table, one column at a time */ + + /* moon designator column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (jsform_w, "JupDes", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "TL", args, n); + set_xmstring (w, XmNlabelString, "Tag"); + wtip (w, "Roman Numeral sequence designation of moon"); + XtManageChild (w); + + for (i = 0; i < J_NMOONS; i++) { + char *tag = md[i].tag; + + n = 0; + w = XmCreatePushButton (rc_w, "JupTag", args, n); /*PB for sz */ + set_xmstring (w, XmNlabelString, tag ? tag : " "); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* moon name column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (jsform_w, "JupName", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "NL", args, n); + set_xmstring (w, XmNlabelString, "Name"); + wtip (w, "Common name of body"); + XtManageChild (w); + + for (i = 0; i < J_NMOONS; i++) { + n = 0; + w = XmCreatePushButton (rc_w, "JupName", args, n); /*PB for sz*/ + set_xmstring (w, XmNlabelString, md[i].full); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* make each of the X/Y/Z/Mag/RA/DEC information columns */ + + for (i = 0; i < XtNumber (mc); i++) { + MoonColumn *mp = &mc[i]; + int j; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (jsform_w, "JMIRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "JupLab", args, n); + set_xmstring (w, XmNlabelString, mp->collabel); + if (mp->tip) + wtip (w, mp->tip); + XtManageChild (w); + + for (j = 0; j < J_NMOONS; j++) { + if (!mp->moononly || j > 0) { + char *sel; + + sel = XtMalloc (strlen(md[j].full) + strlen(mp->suffix)+2); + (void) sprintf (sel, "%s.%s", md[j].full, mp->suffix); + + n = 0; + XtSetArg (args[n], XmNuserData, sel); n++; + w = XmCreatePushButton(rc_w, "JupPB", args, n); + XtAddCallback(w, XmNactivateCallback, jm_activate_cb, 0); + j_w[j][mp->col] = w; + } else { + n = 0; + w = XmCreateLabel(rc_w, "JupPB", args, n); + set_xmstring (w, XmNlabelString, " "); + } + XtManageChild (w); + } + } + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (jsform_w, "Sep1", args, n); + XtManageChild (sep_w); + + /* make a date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sdt_w = XmCreateLabel (jsform_w, "JDateStamp", args, n); + wtip (sdt_w, "Date and Time for which data are computed"); + XtManageChild (sdt_w); + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sdt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (jsform_w, "Sep2", args, n); + XtManageChild (sep_w); + + /* make the close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + w = XmCreatePushButton (jsform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, jm_sstats_close_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* create jtform_w, the top view dialog */ +static void +jm_create_tvform_w() +{ + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + jtform_w = XmCreateFormDialog (jupshell_w, "JupiterTV", args, n); + set_something (jtform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (jtform_w, XmNunmapCallback, jt_unmap_cb, 0); + XtAddCallback (jtform_w, XmNmapCallback, jt_map_cb, NULL); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Jupiter top view"); n++; + XtSetValues (XtParent(jtform_w), args, n); + + /* fill with a drawing area in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + jtframe_w = XmCreateFrame (jtform_w, "JTVF", args, n); + XtManageChild (jtframe_w); + + n = 0; + jtda_w = XmCreateDrawingArea (jtframe_w, "JupiterTop", args, n); + XtAddCallback (jtda_w, XmNexposeCallback, jt_da_exp_cb, NULL); + XtAddCallback (jtda_w, XmNinputCallback, jm_da_input_cb, + (XtPointer)SO_TOP); + XtManageChild (jtda_w); +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +jm_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + int i, j; + + for (i = 0; i < J_NMOONS; i++) + for (j = 0; j < CNum; j++) + if (j_w[i][j]) + buttonAsButton (j_w[i][j], whether); + + buttonAsButton (cmlI_w, whether); + buttonAsButton (cmlII_w, whether); +} + +/* callback when the ENTER key is typed on the GRS Long TF */ +/* ARGSUSED */ +static void +jm_grsl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + jm_update (mm_get_now(), 1); +} + +/* callback when the Close button is activated on the stats menu */ +/* ARGSUSED */ +static void +jm_sstats_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (jsform_w); +} + +/* callback when the More Info button is activated */ +/* ARGSUSED */ +static void +jm_sstats_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (jsform_w); + jm_set_buttons(jm_selecting); +} + +/* callback when the control menu is becoming visible + */ +/* ARGSUSED */ +static void +jm_cpdmapping_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtSetSensitive (tel_w, telIsOn()); +} + +/* callback from any of the option buttons. + * client points to global flag to set; some don't have any. + * in any case then just redraw everything. + */ +/* ARGSUSED */ +static void +jm_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (client) { + int *flagp = (int *)client; + *flagp = XmToggleButtonGetState(w); + if (flagp == &topview) { + if (topview) { + if (!jtform_w) + jm_create_tvform_w(); + XtManageChild (jtform_w); + } else + XtUnmanageChild (jtform_w); + } + } + + jm_update (mm_get_now(), 1); +} + +/* callback from the scales changing. + * just redraw everything. + */ +/* ARGSUSED */ +static void +jm_scale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + jm_update (mm_get_now(), 1); +} + +/* callback from any of the data menu buttons being activated. + */ +/* ARGSUSED */ +static void +jm_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (jm_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback from either expose or resize of the topview. + */ +/* ARGSUSED */ +static void +jt_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected jupform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!jt_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (jt_pm) + XFreePixmap (dsp, jt_pm); + jt_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + jt_track_size(); + jm_update (mm_get_now(), 1); + } else + XCopyArea (dsp, jt_pm, win, j_fgc, 0, 0, nx, ny, 0, 0); +} + +/* called whenever the topview scene is mapped. */ +/* ARGSUSED */ +static void +jt_map_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + jt_track_size(); +} + +/* set the width of the topview DrawingArea the same as the main window's. + * we also try to center it just above, but it doesn't always work. + */ +static void +jt_track_size() +{ + Dimension w, h; + Position mfx, mfy, mdx, mdy; + Position sdy; + Arg args[20]; + int n; + + /* set widths equal */ + n = 0; + XtSetArg (args[n], XmNwidth, &w); n++; + XtGetValues (jda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNwidth, w); n++; + XtSetValues (jtda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNheight, &h); n++; + XtGetValues (jtda_w, args, n); + + /* set locations -- allow for different stuff on top of drawingareas */ + n = 0; + XtSetArg (args[n], XmNx, &mfx); n++; + XtSetArg (args[n], XmNy, &mfy); n++; + XtGetValues (jupshell_w, args, n); + n = 0; + XtSetArg (args[n], XmNx, &mdx); n++; + XtSetArg (args[n], XmNy, &mdy); n++; + XtGetValues (jmframe_w, args, n); + n = 0; + XtSetArg (args[n], XmNy, &sdy); n++; + XtGetValues (jtframe_w, args, n); + + n = 0; + XtSetArg (args[n], XmNx, mfx+mdx); n++; + XtSetArg (args[n], XmNy, mfy - h - sdy - mdy - 20); n++; + XtSetValues (jtform_w, args, n); +} + +/* callback when topview dialog is unmapped */ +/* ARGSUSED */ +static void +jt_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (topview_w, False, True); +} + +/* callback when main shell is popped down */ +/* ARGSUSED */ +static void +jm_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (jsform_w); + XtUnmanageChild (jtform_w); + + /* free pixmap */ + if (jm_pm) { + XFreePixmap (XtDisplay(jda_w), jm_pm); + jm_pm = (Pixmap) NULL; + } + + /* free image info */ + if (jmappix) { + free ((char *)jmappix); + jmappix = 0; + freeXColors (XtD, xe_cm, jmapxcols, 256); + } + + /* free any field stars */ + if (fstars) { + free ((void *)fstars); + fstars = NULL; + nfstars = 0; + } + + /* stop movie that might be running */ + mm_movie (0.0); + + /* register we are now down */ + setXRes (jm_viewupres(), "0"); +} + +/* callback from the main Close button */ +/* ARGSUSED */ +static void +jm_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do all the work */ + XtPopdown (jupshell_w); +} + +/* callback to add scene to the movie loop */ +/* ARGSUSED */ +static void +jm_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (jm_pm, dt_w); +} + +/* callback from the Movie button + */ +/* ARGSUSED */ +static void +jm_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* best effect if turn off worrying about the sky background */ + skybkg = 0; + XmToggleButtonSetState (skybkg_w, False, False); + + mm_movie (MOVIE_STEPSZ); +} + +/* callback from either expose or resize of the drawing area. + */ +/* ARGSUSED */ +static void +jm_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected jupform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!jm_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (jm_pm) + XFreePixmap (dsp, jm_pm); + jm_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + if (topview) + jt_track_size(); + jm_update (mm_get_now(), 1); + } else + XCopyArea (dsp, jm_pm, win, j_fgc, 0, 0, nx, ny, 0, 0); +} + +/* callback from mouse or keyboard input over either drawing area. + * client is one of SOIdx. + */ +/* ARGSUSED */ +static void +jm_da_input_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + ScreenObj *sop; + SOIdx soidx; + XEvent *ev; + int x, y; + + /* get x and y value iff it was from mouse button 3 */ + if (c->reason != XmCR_INPUT) + return; + ev = c->event; + if (ev->xany.type != ButtonPress || ev->xbutton.button != 3) + return; + x = ev->xbutton.x; + y = ev->xbutton.y; + + /* find something close on the screen */ + soidx = (SOIdx) client; + sop = close_screenobj (soidx, x, y); + if (!sop && soidx == SO_MAIN) { + /* try shadows */ + soidx = SO_SHADOW; + sop = close_screenobj (soidx, x, y); + } + if (!sop) + return; + + /* put info in popup, jmpu_w, creating it first if necessary */ + if (!jmpu_w) + jm_create_popup(); + jm_fill_popup (sop, soidx == SO_SHADOW); + + /* put it on screen */ + XmMenuPosition (jmpu_w, (XButtonPressedEvent *)ev); + XtManageChild (jmpu_w); +} + +/* create the (unmanaged for now) popup menu in jmpu_w. */ +static void +jm_create_popup() +{ + static Widget *puw[] = { + &jmpu_name_w, + &jmpu_ra_w, + &jmpu_dec_w, + &jmpu_mag_w, + }; + Widget w; + Arg args[20]; + int n; + int i; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + jmpu_w = XmCreatePopupMenu (jda_w, "JupPU", args, n); + + /* stack everything up in labels */ + for (i = 0; i < XtNumber(puw); i++) { + n = 0; + w = XmCreateLabel (jmpu_w, "SPUL", args, n); + XtManageChild (w); + *puw[i] = w; + } +} + +/* put up a popup at ev with info about sop */ +static void +jm_fill_popup (sop, justname) +ScreenObj *sop; +int justname; +{ + char *name; + double ra, dec, mag; + char buf[64], buf2[64]; + + name = sop->o.o_name; + (void) sprintf (buf2, "%.*s", MAXNM, name); + set_xmstring (jmpu_name_w, XmNlabelString, buf2); + + if (justname) { + XtUnmanageChild (jmpu_mag_w); + XtUnmanageChild (jmpu_ra_w); + XtUnmanageChild (jmpu_dec_w); + } else { + mag = get_mag(&sop->o); + (void) sprintf (buf2, " Mag: %.3g", mag); + set_xmstring (jmpu_mag_w, XmNlabelString, buf2); + XtManageChild (jmpu_mag_w); + + ra = sop->o.s_ra; + fs_ra (buf, ra); + (void) sprintf (buf2, " RA: %s", buf); + set_xmstring (jmpu_ra_w, XmNlabelString, buf2); + XtManageChild (jmpu_ra_w); + + dec = sop->o.s_dec; + fs_prdec (buf, dec); + (void) sprintf (buf2, " Dec: %s", buf); + set_xmstring (jmpu_dec_w, XmNlabelString, buf2); + XtManageChild (jmpu_dec_w); + } +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +jm_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This is a simple schematic depiction of Jupiter and its moons.", +}; + + hlp_dialog ("Jupiter", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +jm_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback from the goto control. + */ +/* ARGSUSED */ +static void +jm_goto_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op = db_basic (JUPITER); + telGoto (op); +} + +/* add one entry to the given global screenobj array. + */ +static void +add_screenobj (soidx, op, x, y) +SOIdx soidx; +Obj *op; +int x, y; +{ + char *mem = (char *) screenobj[soidx]; + int nmem = nscreenobj[soidx]; + ScreenObj *sop; + + /* grow screenobj by one */ + if (mem) + mem = realloc ((char *)mem, (nmem+1)*sizeof(ScreenObj)); + else + mem = malloc (sizeof(ScreenObj)); + if (!mem) { + xe_msg (0, "Out of memory -- %s will not be pickable", op->o_name); + return; + } + screenobj[soidx] = (ScreenObj *) mem; + + sop = &screenobj[soidx][nscreenobj[soidx]++]; + + /* fill new entry */ + sop->o = *op; + sop->x = x; + sop->y = y; +} + +/* reclaim any existing screenobj entries from the given collection */ +static void +reset_screenobj(soidx) +SOIdx soidx; +{ + if (screenobj[soidx]) { + free ((char *)screenobj[soidx]); + screenobj[soidx] = NULL; + } + nscreenobj[soidx] = 0; +} + +/* find the entry in the given screenobj closest to [x,y] within MINR. + * if found return the ScreenObj *, else NULL. + */ +static ScreenObj * +close_screenobj (soidx, x, y) +SOIdx soidx; +int x, y; +{ + ScreenObj *scop = screenobj[soidx]; + ScreenObj *minsop = NULL; + int nobj = nscreenobj[soidx]; + int minr = 2*MINR; + int i; + + for (i = 0; i < nobj; i++) { + ScreenObj *sop = &scop[i]; + int r = abs(x - sop->x) + abs(y - sop->y); + if (r < minr) { + minr = r; + minsop = sop; + } + } + if (minr <= MINR) + return (minsop); + else + return (NULL); +} + +/* callback from Print control. + */ +/* ARGSUSED */ +static void +jm_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Jupiter", jm_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +jm_print () +{ + Display *dsp = XtDisplay (jda_w); + Now *np = mm_get_now(); + unsigned int w, h, bw, d; + Window root; + int x, y; + + if (!jm_ison()) { + xe_msg (1, "Jupiter must be open to save a file."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get size of the rendering area */ + XGetGeometry(dsp, jm_pm, &root, &x, &y, &w, &h, &bw, &d); + + /* draw in an area 6.5w x 6.5h centered 1in down from top */ + if (w >= h) + XPSXBegin (jm_pm, 0, 0, w, h, 1*72, 10*72, (int)(6.5*72)); + else { + int pw = (int)(72*6.5*w/h+.5); /* width on paper when 6.5 hi */ + XPSXBegin (jm_pm, 0, 0, w, h, (int)((8.5*72-pw)/2), 10*72, pw); + } + + /* redraw */ + jm_update (np, 1); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + jm_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +jm_ps_annotate (np) +Now *np; +{ + int ctrx = (int)(8.5*72/2); + Obj *eop = db_basic (SUN); + Obj *jop = db_basic (JUPITER); + MoonData md[J_NMOONS]; + double cmlI, cmlII; + double tzmjd, grs, jupsize; + char *bp, buf[256], buf2[32], dir[256]; + int n, x, y, i; + + /* compute all info */ + sprintf (buf, "%s/auxil", getShareDir()); + bp = expand_home (buf); + jupiter_data (mjd, bp, eop, jop, &jupsize, &cmlI, &cmlII, &pole_ra, + &pole_dec, md); + + /* border */ + y = (int)AROWY(PRTR+.5); + sprintf (buf, "newpath 72 %d moveto 540 %d lineto stroke\n", y, y); + XPSDirect (buf); + + /* title */ + y = AROWY(PRTR-2); + if (pref_get(PREF_ZONE) == PREF_UTCTZ) { + tzmjd = mjd; + bp = "UTC"; + } else { + tzmjd = mjd-tz/24; + bp = tznm; + } + fs_time (buf, mjd_hr(tzmjd)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(tzmjd)); + sprintf(dir,"(XEphem Jupiter View at %s %s %s, JD %13.5f) %d %d cstr\n", + buf, buf2, bp, mjd+MJD0, ctrx, y); + XPSDirect (dir); + + /* GRS and CML */ + bp = XmTextFieldGetString (grsl_w); + grs = atod(bp); + XtFree(bp); + sprintf (buf, + "GRS in Sys II = %7.3f; CML in Sys I = %7.3f, in Sys II = %7.3f", + grs, raddeg(cmlI), raddeg(cmlII)); + y = AROWY(PRTR-3); + sprintf (dir, "(%s) %d %d cstr\n", buf, ctrx, y); + XPSDirect (dir); + + /* location if topocentric */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + char s, *site; + + bp = buf; + bp += sprintf (bp, "From "); + + site = mm_getsite(); + if (site) + bp += sprintf (bp, "%s at ", XPSCleanStr(site,strlen(site))); + + /* N.B. without the s= business the sign is printed wrong!! */ + + fs_sexa (buf2, raddeg(fabs(lat)), 3, 3600); + bp += sprintf (bp, "Latitude %s %c ", buf2, s=(lat<0 ? 'S' : 'N')); + + fs_sexa (buf2, raddeg(fabs(lng)), 4, 3600); + bp += sprintf (bp, "Longitude %s %c", buf2, s=(lng<0 ? 'W' : 'E')); + + sprintf (dir, "(%s) %d %d cstr\n", buf, ctrx, AROWY(PRTR-4)); + XPSDirect (dir); + } + + /* table heading */ + bp = buf; + bp += sprintf (bp, "%s ", pref_get(PREF_EQUATORIAL) == PREF_TOPO ? + "Topocentric" : "Geocentric"); + if (epoch == EOD) + bp += sprintf (bp, "Apparent EOD"); + else { + double tmp; + mjd_year (epoch, &tmp); + bp += sprintf (bp, "Astrometric %.2f", tmp); + } + y = AROWY(PRTR-5); + sprintf (dir, "(%s Moon Positions, XYZ in Jupiter radii) %d %d cstr\n", + buf, ctrx,y); + XPSDirect (dir); + + + /* stats for each row */ + for (i = 0; i < J_NMOONS; i++) { + y = AROWY(PRTR-7-i); + x = 75; + + if (i == 0) { + sprintf (dir, "(Tag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + if (md[i].tag) { + n = sprintf (buf, "%-3s", md[i].tag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } else + n = 3; + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Name) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%-8s", md[i].full); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].evis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].svis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(P) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].pshad); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(T) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].trans); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( X +E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].x); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Y +S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].y); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Z +front) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].z); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( RA) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, radhr(md[i].ra), 2, 360000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Dec) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, raddeg(md[i].dec), 3, 36000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Mag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + sprintf (buf, "%4.1f ", md[i].mag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } +} + +/* read the jupiter map gif. + * harmless if called again. + * return 0 if ok else -1. + */ +static int +jm_getgif(dsp) +Display *dsp; +{ + unsigned char *gif; + int ngif; + char fn[256]; + char buf[256]; + int w, h; + FILE *fp; + + /* benign if called again */ + if (jmappix) + return (0); + + /* read in the gif */ + sprintf (fn, "%s/auxil/%s", getShareDir(), jmapbasenm); + fp = fopenh (fn, "r"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return (-1); + } + if (fseek (fp, 0L, SEEK_END) < 0) { + xe_msg (1, "%s:\nCan not seek", jmapbasenm); + fclose (fp); + return (-1); + } + ngif = ftell (fp); + gif = (unsigned char *) XtMalloc (ngif); + rewind (fp); + if (fread (gif, ngif, 1, fp) != 1) { + xe_msg (1, "%s:\n%s", jmapbasenm, syserrstr()); + fclose (fp); + return (-1); + } + fclose (fp); + + /* explode */ + if (gif2X (dsp, xe_cm, gif, ngif, &w, &h, &jmappix, + jmapxcols, buf) < 0) { + XtFree ((char *)gif); + xe_msg (1, "%s:\n%s", jmapbasenm, buf); + return (-1); + } + + if (w != JMAPW || h != JMAPH) { + XtFree ((char *)gif); + XtFree ((char *)jmappix); + xe_msg (1, "%s:\nincorrect file size", jmapbasenm); + return (-1); + } + + return (0); +} + +/* fill win with front image of Jupiter at the given location, size and + * rotation. + * factoids: default orientation is E on right, S on top. So, GRS moves from + * right to left. Spot is in S hemisphere. CML increases with time. + */ +static void +jm_fimage (dsp, win, lx, ty, sz, grs) +Display *dsp; /* Display */ +Drawable win; /* drawable */ +int lx, ty, sz; /* left x, top y, size */ +double grs; /* angle from center to grs, rads */ +{ + Obj *jop = db_basic (JUPITER); + Obj *sop = db_basic (SUN); + XImage *xip; + int depth; + int bpp; + int nbytes; + char *data; + int x0, szr, szr2, x, y; + double limb, climb; + double tvc, pvc, theta, phi, sa, ca; + + /* get the gif */ + if (jm_getgif(dsp) < 0) + return; + + /* create a working image */ + get_something (jda_w, XmNdepth, (XtArgVal)&depth); + bpp = depth>=17 ? 32 : (depth >= 9 ? 16 : 8); + nbytes = sz*sz*bpp/8; + data = XtMalloc (nbytes); + xip = XCreateImage (dsp, DefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ depth, + /* format */ ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ sz, + /* height */ sz, + /* pad */ bpp, + /* bpl */ 0); + xip->bitmap_bit_order = LSBFirst; + xip->byte_order = LSBFirst; + + /* sky-plane rotation */ + tvc = PI/2.0 - jop->s_dec; + pvc = jop->s_ra; + theta = PI/2.0 - pole_dec; + phi = pole_ra; + sa = sin(tvc)*sin(theta)*(cos(pvc)*sin(phi) - sin(pvc)*cos(phi)); + ca = sqrt (1.0 - sa*sa); + + /* find angle subtended by earth-sun from planet */ + limb = asin (sin(sop->s_hlong - jop->s_hlong)/jop->s_edist); + climb = cos(limb); + + /* morph. include effects of sky plane rotation, + * x,y limb foreshortening and y latitude stretch. + */ + x0 = JMAPGRSX + (int)(grs/(2*PI)*JMAPW) + JMAPW; + szr = sz/2; + szr2 = szr*szr; + for (y = 0; y < sz; y++) { + int imy = flip_tb ? y - szr : szr - y; + for (x = 0; x < sz; x++) { + int imx = flip_lr ? szr - x : x - szr; + double imxp = imx*ca + imy*sa; + double imyp = -imx*sa + imy*ca; + double imy2 = imyp*imyp; + double imr2 = imxp*imxp + imy2; + double xcut = sqrt(szr*szr-imyp*imyp)*climb; + unsigned long p; + + if (imr2 >= szr2 || (limb<0&&imxp<-xcut) || (limb>0&&imxp>xcut)) + p = jbg_p; + else { + double xmult = JMAPW*szr/((2*PI)*sqrt((double)szr2 - imy2)); + int xg = (x0 - (int)(xmult*asin((double)imx/szr)))%JMAPW; + int yg = (3*JMAPH/2 + + (int)(JMAPH*asin((double)imyp/szr)/PI))%JMAPH; + p = jmapxcols[(int)jmappix[yg*JMAPW+xg]].pixel; + } + XPutPixel (xip, x, y, p); + } + } + + /* copy to win */ + XPutImage (dsp, win, j_fgc, xip, 0, 0, lx, ty, sz, sz); + + /* done */ + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); +} + +/* fill win with top image of Jupiter at the given location, size and + * rotation. + */ +static void +jm_timage (dsp, win, lx, ty, sz, grs) +Display *dsp; /* Display */ +Drawable win; /* drawable */ +int lx, ty, sz; /* left x, top y, size */ +double grs; /* angle from center to grs, rads */ +{ + Obj *jop = db_basic (JUPITER); + XImage *xip; + int depth; + int bpp; + int nbytes; + char *data; + int x0, szr, szr2, x, y; + double xmult, ymult; + double tvc, pvc, theta, phi, sa, ca; + + /* get the gif */ + if (jm_getgif(dsp) < 0) + return; + + /* create a working image */ + get_something (jda_w, XmNdepth, (XtArgVal)&depth); + bpp = depth>=17 ? 32 : (depth >= 9 ? 16 : 8); + nbytes = sz*sz*bpp/8; + data = XtMalloc (nbytes); + xip = XCreateImage (dsp, DefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ depth, + /* format */ ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ sz, + /* height */ sz, + /* pad */ bpp, + /* bpl */ 0); + xip->bitmap_bit_order = LSBFirst; + xip->byte_order = LSBFirst; + + /* sky-plane rotation */ + tvc = PI/2.0 - jop->s_dec; + pvc = jop->s_ra; + theta = PI/2.0 - pole_dec; + phi = pole_ra; + sa = sin(tvc)*sin(theta)*(cos(pvc)*sin(phi) - sin(pvc)*cos(phi)); + ca = sqrt (1.0 - sa*sa); + + /* morph. + * TODO: limb darkening, tilt + */ + x0 = JMAPGRSX + (int)(grs/(2*PI)*JMAPW) + JMAPW; + szr = sz/2; + szr2 = sz*sz/4; + xmult = JMAPW/(2*PI); + ymult = (double)JMAPH/sz; + for (y = 0; y < sz; y++) { + double imy = szr - y; + double imy2 = imy*imy; + for (x = 0; x < sz; x++) { + double imx = flip_lr ? szr - x : x - szr; + double imr2 = imx*imx + imy2; + unsigned long p; + + if (imr2 > szr2) + p = jbg_p; + else { + int xg = (x0 - (int)(xmult*atan2(imx,-imy)))%JMAPW; + int yg = (int)(ymult*sqrt(imr2)); + if (!flip_tb) + yg = JMAPH-1 - yg; + p = jmapxcols[(int)jmappix[yg*JMAPW+xg]].pixel; + } + XPutPixel (xip, x, y, p); + } + } + + /* copy to win */ + XPutImage (dsp, win, j_fgc, xip, 0, 0, lx, ty, sz, sz); + + /* done */ + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); +} + +/* given the loc of the moons, draw a nifty little picture. + * also save resulting screen locs of everything in the screenobj array. + * scale of the locations is in terms of jupiter radii == 1. + * unflipped view is S up, E right. + * planet itself is in md[0], moons in md[1..NM-1]. + * +md[].x: East, jup radii + * +md[].y: South, jup radii + * +md[].z: in front, jup radii + */ +static void +jm_draw_map (w, jop, jupsize, cmlII, md) +Widget w; +Obj *jop; +double jupsize; +double cmlII; +MoonData md[J_NMOONS]; +{ + Display *dsp = XtDisplay(w); + Window win; + Window root; + double scale; + int sv; + int fmag; + char *grslstr; + double grs; + char c; + int x, y; + XPoint xp[5]; + char buf[64]; + int l; + unsigned int nx, ny, bw, d; + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + int scale1; + int i; + + /* first the main graphic */ + win = XtWindow (jda_w); + + XmScaleGetValue (limmag_w, &fmag); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + /* get size and erase */ + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, jm_pm, j_bgc, 0, 0, nx, ny); + scale1 = (int)floor(MAPSCALE(1)+0.5); + + /* prepare for a new list of things on the screen */ + reset_screenobj(SO_MAIN); + reset_screenobj(SO_SHADOW); + + /* draw Jupiter in center with unit radius */ + grslstr = XmTextFieldGetString (grsl_w); + grs = degrad(atod(grslstr))-cmlII; + XtFree (grslstr); + jm_fimage (dsp, jm_pm, nx/2-scale1, ny/2-scale1, 2*scale1-1, grs); + XPSPixmap (jm_pm, nx, ny, xe_cm, j_bgc, 1); + add_screenobj (SO_MAIN, jop, nx/2, ny/2); + + /* draw background objects, if desired. + * go out plenty wide to pick up moon during occultations. + */ + if (skybkg) + sky_background(jm_pm, nx, ny, fmag, md[0].ra, md[0].dec, + jupsize/MAPSCALE(2), degrad(.5), flip_tb, flip_lr); + + /* draw labels */ + c = flip_lr ? 'W' : 'E'; + XPSDrawString(dsp, jm_pm, j_fgc, nx-j_cw-1, ny/2-2, &c, 1); + c = flip_tb ? 'N' : 'S'; + XPSDrawString(dsp, jm_pm, j_fgc, (nx-j_cw)/2-1, j_fs->ascent, &c, 1); + + /* draw 1' calibration line */ + j_calibline (dsp, jm_pm, j_fgc, nx/2, 7*ny/8, "1'", j_cw*2, j_ch+4, + (int)MAPSCALE(degrad(1.0/60.0)/(jupsize/2))); + + /* draw each moon and its shadow + */ + for (i = 1; i < J_NMOONS; i++) { + double mx = md[i].x; + double my = md[i].y; + double mag = md[i].mag; + int diam; + Obj o; + + /* skip if behind or in shadow */ + if (!md[i].evis || !md[i].svis) + continue; + + diam = magdiam (fmag, 1, jupsize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + /* moon */ + x = XCORD(mx); + y = YCORD(my); + if (diam == 1) + XPSDrawPoint(dsp, jm_pm, j_xgc, x, y); + else + XPSDrawStar (dsp, jm_pm, j_xgc, x-diam/2, y-diam/2, diam); + + /* add moon to list of screen objects drawn */ + memset (&o, 0, sizeof(o)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_MAIN, &o, x, y); + + /* shadow, if in front */ + if (md[i].pshad) { + int scx = XCORD(md[i].sx); + int scy = YCORD(md[i].sy); + + XPSDrawStar (dsp, jm_pm, j_bgc, scx-diam/2, scy-diam/2, diam); + sprintf (o.o_name, "%s shadow", md[i].full); + add_screenobj (SO_SHADOW, &o, scx, scy); + } + + /* labels last to cover all */ + if (tags && md[i].tag) + XPSDrawString(dsp, jm_pm, j_xgc, x-j_cw/2, y+2*j_ch, + md[i].tag, strlen(md[i].tag)); + } + + /* user annotation */ + ano_draw (jda_w, jm_pm, jm_ano, 0); + + XCopyArea (dsp, jm_pm, win, j_fgc, 0, 0, nx, ny, 0, 0); + + /* then the top view, if desired */ + + if (!topview || !jt_pm) /* let expose make new pixmap */ + return; + + /* get size and erase */ + win = XtWindow (jtda_w); + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, jt_pm, j_bgc, 0, 0, nx, ny); + + /* draw jupiter in center with unit radius, cover dark side */ + jm_timage (dsp, jt_pm, nx/2-scale1, ny/2-scale1, 2*scale1-1, grs); + i = (int)(-ew*64*raddeg(asin(sin(degrad(jop->s_elong))/jop->s_sdist))); + XFillArc(dsp, jt_pm, j_bgc, nx/2-scale1-1, ny/2-scale1-1, 2*scale1+1, + 2*scale1+1, i, 180*64); + reset_screenobj(SO_TOP); + add_screenobj (SO_TOP, jop, nx/2, ny/2); + + /* draw each moon + */ + for (i = 1; i < J_NMOONS; i++) { + double mx = md[i].x; + double mz = md[i].z; + double mag = md[i].mag; + int diam; + Obj o; + + /* skip if in shadow */ + if (!md[i].svis) + continue; + + diam = magdiam (fmag, 1, jupsize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + x = XCORD(mx); + y = ZCORD(mz); + if (diam == 1) + XDrawPoint (dsp, jt_pm, j_xgc, x, y); + else + XFillArc (dsp, jt_pm, j_xgc, x-diam/2, y-diam/2, diam, diam, + 0, 360*64); + + /* add moon to list of screen objects drawn */ + memset (&o, 0, sizeof(o)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_TOP, &o, x, y); + + if (tags && md[i].tag) + XDrawString(dsp, jt_pm, j_xgc, x-j_cw/2, y+2*j_ch, + md[i].tag, strlen(md[i].tag)); + } + + /* draw labels */ + + l = sprintf (buf, "%s Pole", flip_tb ? "North" : "South"); + XDrawString(dsp, jt_pm, j_fgc, (nx-j_cw*l)/2, j_ch, buf, l); + XDrawString(dsp, jt_pm, j_fgc, nx/2, ny-j_ch, "to Earth", 8); + xp[0].x = nx/2 - 15; xp[0].y = ny - 2*j_ch; + xp[1].x = 0; xp[1].y = 3*j_ch/2; + xp[2].x = -3; xp[2].y = -3*j_ch/4; + xp[3].x = 6; xp[3].y = 0; + xp[4].x = -3; xp[4].y = 3*j_ch/4; + XDrawLines (dsp, jt_pm, j_fgc, xp, 5, CoordModePrevious); + + /* user annotation */ + ano_draw (jtda_w, jt_pm, jt_ano, 0); + + XCopyArea (dsp, jt_pm, win, j_fgc, 0, 0, nx, ny, 0, 0); +} + +/* convert jupiter X/Y to/from X windows coords depending on w2x. + * return whether visible. + */ +static int +jm_ano (double *jX, double *jY, int *xp, int *yp, int w2x, int arg) +{ + Display *dsp = XtDisplay (jda_w); + Window win = XtWindow (jda_w); + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + unsigned int nx, ny, bw, d; + Window root; + double scale; + int x, y; + int sv; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + if (w2x) { + *xp = XCORD(*jX); + *yp = YCORD(*jY); + } else { + *jX = 2*NORM*(*xp-(int)nx/2.0)/(ew*(int)nx*scale); + *jY = 2*NORM*((int)ny/2.0-*yp)/(ns*(int)ny*scale); + } + + return (*xp>=0 && *xp=0 && *yp=0 && *xp=0 && *ypmax_bounds.width; + j_ch = j_fs->max_bounds.ascent + j_fs->max_bounds.descent; + + gcm = GCForeground | GCFont; + get_color_resource (toplevel_w, "jupiterColor", &fg); + gcv.foreground = fg; + gcv.font = j_fs->fid; + j_fgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground; + get_color_resource (toplevel_w, "JupiterBackground", &jbg_p); + gcv.foreground = jbg_p; + j_bgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground | GCFunction | GCFont; + fsp = getXResFont ("moonsFont"); + gcv.foreground = fg ^ jbg_p; + gcv.function = GXxor; + gcv.font = fsp->fid; + j_xgc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* draw a calibration line l pixels long centered at [xc,yc] marked with tag + * with is in a bounding box tw x th. + */ +static void +j_calibline (dsp, win, gc, xc, yc, tag, tw, th, l) +Display *dsp; +Drawable win; +GC gc; +int xc, yc; +char *tag; +int tw, th; +int l; +{ + int lx = xc - l/2; + int rx = lx + l; + + XPSDrawLine (dsp, win, gc, lx, yc, rx, yc); + XPSDrawLine (dsp, win, gc, lx, yc-3, lx, yc+3); + XPSDrawLine (dsp, win, gc, rx, yc-3, rx, yc+3); + XPSDrawString (dsp, win, gc, xc-tw/2, yc+th, tag, strlen(tag)); +} + +/* draw all database objects in a small sky patch about the given center. + * get field stars too if enabled and we have moved enough. + * save objects and screen locs in the global screenobj array for picking. + * this is used to draw the backgrounds for the planet closeups. + * Based on work by: Dan Bruton + */ +static void +sky_background (win, w, h, fmag, ra0,dec0,scale,rad,fliptb,fliplr) +Drawable win; /* window to draw on */ +unsigned w, h; /* window size */ +int fmag; /* faintest magnitude to display */ +double ra0, dec0; /* center of patch, rads */ +double scale; /* rads per pixel */ +double rad; /* maximum radius to draw away from ra0/dec0, rads */ +int fliptb, fliplr; /* flip direction; default is S up E right */ +{ + static int before; + double cdec0 = cos(dec0); + DBScan dbs; + Obj *op; + double hfov = w * scale; + double vfov = h * scale; + + if (!before && pref_get(PREF_EQUATORIAL) == PREF_GEO) { + xe_msg (1, "Equatorial preference should probably be set to Topocentric"); + before = 1; + } + + /* update field star list */ + jm_loadfs (ra0, dec0); + + /* scan the database and draw whatever is near */ + for (db_scaninit(&dbs, ALLM, fstars, nfstars); + (op = db_scan (&dbs)) != NULL; ) { + double dra, ddec; + GC gc; + int dx, dy, x, y; + int diam; + + if (is_planet (op, JUPITER)) { + /* we draw it elsewhere */ + continue; + } + + db_update (op); + + /* find size, in pixels. */ + diam = magdiam (fmag, 1, scale, get_mag(op), + degrad(op->s_size/3600.0)); + if (diam <= 0) + continue; + + /* find x/y location if it's in the general area */ + dra = op->s_ra - ra0; /* + E */ + ddec = dec0 - op->s_dec; /* + S */ + if (fabs(ddec) > rad || delra(dra)*cdec0 > rad) + continue; + dx = (int)(dra/scale); + dy = (int)(ddec/scale); + x = fliplr ? (int)w/2-dx : (int)w/2+dx; + y = fliptb ? (int)h/2+dy : (int)h/2-dy; + + /* pick a gc */ + obj_pickgc(op, toplevel_w, &gc); + + /* draw 'er */ + sv_draw_obj_x (XtD, win, gc, op, x, y, diam, 0, fliptb, !fliplr, 0, 1, dec0, ra0, vfov, hfov, w, h); + + /* save 'er */ + add_screenobj (SO_MAIN, op, x, y); + } + + sv_draw_obj (XtD, win, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +/* load field stars around the given location, unless current set is + * already close enough. + */ +static void +jm_loadfs (ra, dec) +double ra, dec; +{ + Now *np = mm_get_now(); + + if (fstars && fabs(dec-fsdec) 0) { + xe_msg (0, "Jupiter View added %d field stars", nfstars); + fsdec = dec; + fsra = ra; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: jupmenu.c,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.71 $ $Name: $"}; diff --git a/GUI/xephem/listmenu.c b/GUI/xephem/listmenu.c new file mode 100644 index 0000000..16794ce --- /dev/null +++ b/GUI/xephem/listmenu.c @@ -0,0 +1,831 @@ +/* code to manage the stuff on the "listing" menu. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + +static void lst_select (int whether); +static void lst_create_shell (void); +static void lst_activate_cb (Widget w, XtPointer client, XtPointer call); +static void lst_close_cb (Widget w, XtPointer client, XtPointer call); +static void lst_loadcfg_cb (Widget w, XtPointer client, XtPointer call); +static void lst_savecfg_cb (Widget w, XtPointer client, XtPointer call); +static void lst_help_cb (Widget w, XtPointer client, XtPointer call); +static void lst_undo_cb (Widget w, XtPointer client, XtPointer call); +static void lst_reset (void); +static void lst_add (char *name); +static void lst_stop_selecting (void); +static void lst_turn_off (void); +static void lst_try_append (void); +static void lst_try_overwrite (void); +static void lst_try_cancel (void); +static void lst_try_turn_on (void); +static void lst_turn_on (char *how); +static void lst_hdr (void); + +#define COMMENT '*' /* comment character */ + +#define MAXLSTSTR 32 /* longest string we can list */ +#define MAXFLDNAM 32 /* longest allowed field name */ +#define INDENT 15 /* file info indent, pixel */ + +static Widget lstshell_w; /* main shell */ +static Widget select_w; /* select mode TB */ +static Widget active_w; /* creating list TB */ +static Widget prompt_w; /* label to inform what to do next */ +static Widget colhdr_w; /* include col hdr TB */ +static Widget latex_w; /* latex option TB */ +static Widget title_w; /* title text field */ +static Widget filename_w; /* file name text field */ +static Widget undo_w; /* undo PB */ +static Widget lrc_w; /* RC for list entries */ +static Widget cfn_w; /* TF with name of file to save config too */ + +static FILE *lst_fp; /* the listing file; == 0 means don't plot */ +static int lst_new; /* 1 when open until first set are printed */ +static int lst_latex; /* 1 when want latex format */ + +/* lst_activate_cb client values. */ +typedef enum { + SELECT, ACTIVE, COLHDR, LATEX +} Options; + +/* store the name, string value and widget for each field to track. + * we get the label straight from the Text widget in the table as needed. + */ +typedef struct { + char l_name[MAXFLDNAM]; /* name of field we are listing */ + char l_str[MAXLSTSTR]; /* last know string value of field */ + int l_cw; /* column width -- 0 until known */ + Widget l_w; /* table entry in lrc_w */ +} LstFld; +static LstFld *lstflds; /* malloced list */ +static int nlstflds; /* number of lstflds[] in actual use */ +static int mlstflds; /* number of lstflds[] in existance */ +static char config_suffix[] = ".lsc"; /* file ext for list config files */ + +static char listcategory[] = "Tools -- List"; /* Save category */ +static char xml_listele[] = "XEphemListConfig"; + +/* called when the list menu is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, go for it. + */ +void +lst_manage () +{ + if (!lstshell_w) + lst_create_shell(); + + XtPopup (lstshell_w, XtGrabNone); + set_something (lstshell_w, XmNiconic, (XtArgVal)False); +} + +/* called by the other menus (data, etc) as their buttons are + * selected to inform us that that button is to be included in a listing. + */ +void +lst_selection (name) +char *name; +{ + if (!isUp(lstshell_w) || !XmToggleButtonGetState(select_w)) + return; + + lst_add (name); +} + +/* called as each different field is written -- just save in lstflds[] + * if we are potentially interested. + */ +void +lst_log (name, str) +char *name; +char *str; +{ + if (listing_ison()) { + LstFld *lp; + for (lp = lstflds; lp < &lstflds[nlstflds]; lp++) + if (strcmp (name, lp->l_name) == 0) { + (void) strncpy (lp->l_str, str, MAXLSTSTR-1); + break; + } + } +} + +/* called when all fields have been updated and it's time to + * write the active listing to the current listing file, if one is open. + */ +void +listing() +{ + if (lst_fp) { + /* list in order of original selection */ + LstFld *lp; + + /* print headings if this the first time */ + if (lst_new) { + lst_hdr(); + lst_new = 0; + } + + /* now print the fields */ + for (lp = lstflds; lp < &lstflds[nlstflds]; lp++) { + (void) fprintf (lst_fp, " %-*s", lp->l_cw, lp->l_str); + if (lst_latex && lp < &lstflds[nlstflds-1]) + (void) fprintf (lst_fp, "&"); + } + if (lst_latex) + (void) fprintf (lst_fp, "\\\\"); + (void) fprintf (lst_fp, "\n"); + fflush (lst_fp); /* to allow monitoring */ + } +} + +int +listing_ison() +{ + return (lst_fp != 0); +} + +/* called to put up or remove the watch cursor. */ +void +lst_cursor (c) +Cursor c; +{ + Window win; + + if (lstshell_w && (win = XtWindow(lstshell_w)) != 0) { + Display *dsp = XtDisplay(lstshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* inform the other menues whether we are setting up for them to tell us + * what fields to list. + */ +static void +lst_select(whether) +int whether; +{ + all_selection_mode(whether); +} + +static void +lst_create_shell() +{ + typedef struct { + int indent; /* amount to indent, pixels */ + char *iname; /* instance name, if Saveable */ + char *title; + int cb_data; + Widget *wp; + char *tip; + } TButton; + static TButton tbs[] = { + {0, NULL, "Select fields to list", SELECT, &select_w, + "When on, data fields eligible for listing are selectable buttons"}, + {0, NULL, "Create list file", ACTIVE, &active_w, + "When on, selected fields are written to the named file at each main Update"}, + {INDENT, "Headings", "Include column headings", COLHDR, &colhdr_w, + "Whether file format will include a heading over each column"}, + {INDENT, "LaTex", "List in LaTeX format", LATEX, &latex_w, + "Whether to separate columns with `&' and end lines with `\\\\'"}, + }; + XmString str; + Widget w, rc_w, f_w, oms_w; + Widget lstform_w; + Arg args[20]; + char *s[1]; + int i, n; + + /* create form dialog */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Listing Control"); n++; + XtSetArg (args[n], XmNiconName, "List"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + lstshell_w = XtCreatePopupShell ("List", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (lstshell_w); + set_something (lstshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (lstshell_w, "XEphem*List.x", listcategory, 0); + sr_reg (lstshell_w, "XEphem*List.y", listcategory, 0); + + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + lstform_w = XmCreateForm(lstshell_w, "ListF", args, n); + XtAddCallback (lstform_w, XmNhelpCallback, lst_help_cb, 0); + XtManageChild (lstform_w); + + /* make a RowColumn to hold everything */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + rc_w = XmCreateRowColumn (lstform_w, "ListRC", args, n); + XtManageChild (rc_w); + + /* control to allow selecting a config file to load */ + + s[0] = config_suffix; + oms_w = createFSM (rc_w, s, 1, "auxil", lst_loadcfg_cb); + set_xmstring (oms_w, XmNlabelString, "Load config file: "); + + /* save config TB and its TF */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + f_w = XmCreateForm (rc_w, "LCF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + w = XmCreateToggleButton(f_w, "LSTB", args, n); + XtAddCallback(w, XmNvalueChangedCallback, lst_savecfg_cb, NULL); + set_xmstring (w, XmNlabelString, "Save config file: "); + wtip (w, "Save current list definition to file"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + cfn_w = XmCreateTextField (f_w, "ConfigFile", args, n); + defaultTextFN (cfn_w, 0, "myconfig.lsc", NULL); + wtip (cfn_w, + "Enter name of file in which to save current list definition"); + XtManageChild (cfn_w); + sr_reg (cfn_w, NULL, listcategory, 0); + + /* make the control toggle buttons */ + + for (i = 0; i < XtNumber(tbs); i++) { + TButton *tbp = &tbs[i]; + + str = XmStringCreate(tbp->title, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNmarginWidth, tbp->indent); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton(rc_w, tbp->iname ? tbp->iname : "ListTB", + args, n); + XmStringFree (str); + XtAddCallback(w, XmNvalueChangedCallback, lst_activate_cb, + (XtPointer)(long int)(tbp->cb_data)); + if (tbp->wp) + *tbp->wp = w; + if (tbp->tip) + wtip (w, tbp->tip); + XtManageChild (w); + if (tbp->iname) + sr_reg (w, NULL, listcategory, 1); + } + + /* create filename text area and its label in a form */ + + n = 0; + f_w = XmCreateForm (rc_w, "FNF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, INDENT); n++; + w = XmCreateLabel (f_w, "ListFnL", args, n); + set_xmstring (w, XmNlabelString, "Name: "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNcolumns, 40); n++; + filename_w = XmCreateTextField (f_w, "Filename", args, n); + wtip (filename_w, "Enter name of file to create with list"); + XtManageChild (filename_w); + sr_reg (filename_w, NULL, listcategory, 0); + + /* create title text area and its label in a form */ + + n = 0; + f_w = XmCreateForm (rc_w, "TF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, INDENT); n++; + w = XmCreateLabel (f_w, "ListTL", args, n); + set_xmstring (w, XmNlabelString, "Title: "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNcolumns, 40); n++; + title_w = XmCreateTextField (f_w, "Title", args, n); + wtip (title_w, "Enter a title to be written to the file"); + XtManageChild (title_w); + + /* create prompt line -- it will be managed as necessary */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + prompt_w = XmCreateLabel (rc_w, "ListPrompt", args, n); + set_xmstring(prompt_w,XmNlabelString,"Choose field for next column..."); + + /* make an RC for the table */ + n = 0; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + lrc_w = XmCreateRowColumn (rc_w, "LRC", args, n); + XtManageChild (lrc_w); + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + /* make a form to hold the bottom buttons evenly */ + + n = 0; + XtSetArg (args[n], XmNfractionBase, 10); n++; + f_w = XmCreateForm (rc_w, "ListCF", args, n); + XtManageChild(f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + wtip (w, "Close this dialog (but continue listing if active)"); + XtAddCallback (w, XmNactivateCallback, lst_close_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + XtSetArg (args[n], XmNsensitive, False); n++; + undo_w = XmCreatePushButton (f_w, "Undo", args, n); + wtip (undo_w, "Undo last column choice"); + XtAddCallback (undo_w, XmNactivateCallback, lst_undo_cb, 0); + XtManageChild (undo_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 7); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + wtip (w, "More detailed usage information"); + XtAddCallback (w, XmNactivateCallback, lst_help_cb, 0); + XtManageChild (w); +} + +/* callback from any of the listing menu toggle buttons being activated. + */ +/* ARGSUSED */ +static void +lst_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *t = (XmToggleButtonCallbackStruct *) call; + Options op = (Options) client; + + switch (op) { + case SELECT: + if (t->set) { + /* first turn off listing, if on, while we change things */ + if (XmToggleButtonGetState(active_w)) + XmToggleButtonSetState(active_w, False, True); + lst_reset(); /* reset lstflds array and unmanage the table*/ + lst_select(1); /* inform other menus to inform us of fields */ + XtManageChild (prompt_w); + XtSetSensitive (undo_w, True); + } else + lst_stop_selecting(); + break; + + case ACTIVE: + if (t->set) { + /* first turn off selecting, if on */ + if (XmToggleButtonGetState(select_w)) + XmToggleButtonSetState(select_w, False, True); + if (nlstflds > 0) + lst_try_turn_on(); + else { + XmToggleButtonSetState(w, False, True); + xe_msg (1, "Please select at least one field to list"); + } + } else + lst_turn_off(); + break; + + case COLHDR: + break; /* toggle state is sufficient */ + + case LATEX: + lst_latex = t->set; + break; + } +} + +/* callback to load a new config file. + * file name is label of this widget + */ +/* ARGSUSED */ +static void +lst_loadcfg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024]; + FILE *fp; + char *fn; + + /* turn off listing and selecting, if on */ + if (XmToggleButtonGetState(active_w)) + XmToggleButtonSetState(active_w, False, True); + if (XmToggleButtonGetState(select_w)) + XmToggleButtonSetState(select_w, False, True); + + get_xmstring (w, XmNlabelString, &fn); + fp = fopend (fn, NULL, "r"); + if (fp) { + LilXML *lp = newLilXML(); + XMLEle *pele = readXMLFile (fp, lp, buf); + + if (!pele) + xe_msg (1, "%s:\n%s", fn, buf); + else if (strcmp (tagXMLEle(pele), xml_listele)) { + xe_msg (1, "Not a valid list config file"); + } else { + XMLEle *ep; + + lst_reset(); + for (ep= nextXMLEle (pele,1); ep != NULL; ep=nextXMLEle(pele,0)) + if (strcmp (tagXMLEle(ep), "list") == 0) + lst_add (findXMLAttValu (ep, "name")); + XmTextFieldSetString (title_w, + pcdataXMLEle(findXMLEle(pele,"title"))); + XmToggleButtonSetState (colhdr_w, + atoi(findXMLAttValu (pele, "headings")), True); + XmToggleButtonSetState (latex_w, + atoi(findXMLAttValu (pele, "latex")), True); + lst_stop_selecting(); + } + delXMLEle (pele); + delLilXML (lp); + fclose (fp); + } + + XtFree (fn); +} + +/* callback to save config to the file named by cfn_w + */ +/* ARGSUSED */ +static void +lst_savecfg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FILE *fp; + char buf[1024], *txt; + char *fn; + int i; + + if (!XmToggleButtonGetState(w)) + return; + + /* stop selecting if on */ + if (XmToggleButtonGetState (select_w)) + XmToggleButtonSetState (select_w, False, True); + + /* set up file name */ + fn = txt = XmTextFieldGetString (cfn_w); + if (!strstr (txt, config_suffix)) { + sprintf (fn = buf, "%s%s", txt, config_suffix); + XmTextFieldSetString (cfn_w, fn); + } + + /* create config file, save each entry */ + fp = fopend (fn, NULL, "w"); + if (fp) { + char *title = XmTextFieldGetString (title_w); + fprintf (fp, "<%s headings='%d' latex='%d'>\n", xml_listele, + XmToggleButtonGetState (colhdr_w), + XmToggleButtonGetState (latex_w)); + fprintf (fp, " %s\n", title); + for (i = 0; i < nlstflds; i++) + fprintf (fp, " \n", lstflds[i].l_name); + fprintf (fp, "\n", xml_listele); + XtFree (title); + fclose (fp); + } + + /* act like a push button */ + XmToggleButtonSetState (w, False, True); + if (confirm()) + xe_msg (1, "%s saved", fn); + + XtFree (txt); +} + +/* callback from the Close button. + */ +/* ARGSUSED */ +static void +lst_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (lstshell_w); +} + +/* callback from the Help + */ +/* ARGSUSED */ +static void +lst_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Select fields to become each column of a listing, then run xephem. Each step", +"will yield one line in the output file. The filename may be specified in the", +"text area provided." +}; + + hlp_dialog ("Listing", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback from the Undo button. + */ +/* ARGSUSED */ +static void +lst_undo_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (nlstflds > 0) + XtUnmanageChild (lstflds[--nlstflds].l_w); +} + +/* forget the list, and unmanage the table. + */ +static void +lst_reset() +{ + int i; + + for (i = 0; i < nlstflds; i++) + XtUnmanageChild (lstflds[i].l_w); + nlstflds = 0; +} + +/* add and display a new name to list */ +static void +lst_add (char *name) +{ + Widget tw; + + if (nlstflds == mlstflds) { + lstflds = (LstFld *) XtRealloc ((char *)lstflds, + (++mlstflds)*sizeof(LstFld)); + lstflds[nlstflds].l_w = XmCreateLabel(lrc_w, "ListLabel", NULL, 0); + } + + tw = lstflds[nlstflds].l_w; + set_xmstring (tw, XmNlabelString, name); + XtManageChild (tw); + (void) strncpy (lstflds[nlstflds].l_name, name, MAXFLDNAM); + nlstflds++; +} + +/* stop selecting: tell everybody else to drop their buttons, make sure toggle + * is off. + */ +static void +lst_stop_selecting() +{ + XmToggleButtonSetState (select_w, False, False); + lst_select(0); + XtUnmanageChild (prompt_w); + XtSetSensitive (undo_w, False); +} + +static void +lst_turn_off () +{ + if (lst_fp) { + (void) fclose (lst_fp); + lst_fp = 0; + } +} + +/* called from the query routine when want to append to an existing list file.*/ +static void +lst_try_append() +{ + lst_turn_on("a"); +} + +/* called from the query routine when want to overwrite to an existing list + * file. + */ +static void +lst_try_overwrite() +{ + lst_turn_on("w"); +} + +/* called from the query routine when decided not to make a listing file. */ +static void +lst_try_cancel() +{ + XmToggleButtonSetState (active_w, False, False); +} + +/* attempt to open file for use as a listing file. + * if it doesn't exist, then go ahead and make it. + * but if it does, first ask wheher to append or overwrite. + */ +static void +lst_try_turn_on() +{ + char *txt = XmTextFieldGetString (filename_w); + char pn[1024]; + + sprintf (pn, "%s/%s", getPrivateDir(), txt); + + if (confirm() && existsh (pn) == 0) { + char buf[1024]; + (void) sprintf (buf, "%s exists:\nAppend or Overwrite?", txt); + query (lstshell_w, buf, "Append", "Overwrite", "Cancel", + lst_try_append, lst_try_overwrite, lst_try_cancel); + } else + lst_try_overwrite(); + + XtFree (txt); +} + +/* turn on listing facility. + * establish a file to use (and thereby set lst_fp, the "listing-is-on" flag). + */ +static void +lst_turn_on (how) +char *how; /* fopen how argument */ +{ + char *txt = XmTextFieldGetString (filename_w); + char pn[1024]; + + sprintf (pn, "%s/%s", getPrivateDir(), txt); + + /* listing is on if file opens ok */ + lst_fp = fopenh (pn, how); + if (!lst_fp) { + XmToggleButtonSetState (active_w, False, False); + xe_msg (1, "%s:\n%s", txt, syserrstr()); + } + XtFree (txt); + + lst_new = 1; /* trigger fresh column headings */ + /* TODO: not when appending? */ +} + +/* print the title. + * then set each l_w. if column headings are enabled, use and also print them. + * else just use l_str. + */ +static void +lst_hdr () +{ + LstFld *lp; + int col; + char *txt; + + /* add a title if desired */ + txt = XmTextFieldGetString (title_w); + if (txt[0] != '\0') + (void) fprintf (lst_fp, "%c %s\n", COMMENT, txt); + XtFree (txt); + + col = XmToggleButtonGetState (colhdr_w); + + /* set lp->l_cw to max of str, prefix and suffix lengths */ + for (lp = lstflds; lp < &lstflds[nlstflds]; lp++) { + int l = strlen (lp->l_str); + if (col) { + int nl = strlen(lp->l_name); + char *dp; + + for (dp = lp->l_name; *dp && *dp != '.'; dp++) + continue; + if (*dp) { + int pl = dp - lp->l_name; /* prefix */ + int sl = nl - pl - 1; /* suffix */ + if (pl > l) l = pl; + if (sl > l) l = sl; + } else { + if (nl > l) l = nl; + } + } + lp->l_cw = l; + } + + if (col) { + int printed_anything; + + /* print first row of column headings */ + for (lp = lstflds; lp < &lstflds[nlstflds]; lp++) { + char cmt = lp == lstflds && !lst_latex ? COMMENT : ' '; + char *dp; + + for (dp = lp->l_name; *dp && *dp != '.'; dp++) + continue; + if (*dp) + fprintf (lst_fp, "%c %-*.*s", cmt, lp->l_cw, + (int)(dp-lp->l_name), lp->l_name); + else + fprintf (lst_fp, "%c %-*s", cmt, lp->l_cw, lp->l_name); + if (lst_latex && lp < &lstflds[nlstflds-1]) + fprintf (lst_fp, "&"); + } + if (lst_latex) + fprintf (lst_fp, "\\\\"); + fprintf (lst_fp, "\n"); + + /* print second row of column headings */ + printed_anything = 0; + for (lp = lstflds; lp < &lstflds[nlstflds]; lp++) { + char cmt = lp == lstflds && !lst_latex ? COMMENT : ' '; + char *dp; + + for (dp = lp->l_name; *dp && *dp != '.'; dp++) + continue; + if (*dp) { + fprintf (lst_fp, "%c %-*s", cmt, lp->l_cw, dp+1); + printed_anything = 1; + } else + fprintf (lst_fp, "%c %-*s", cmt, lp->l_cw, ""); + if (lst_latex && printed_anything && lp < &lstflds[nlstflds-1]) + fprintf (lst_fp, "&"); + } + if (lst_latex && printed_anything) + fprintf (lst_fp, "\\\\"); + fprintf (lst_fp, "\n"); + } + + fflush (lst_fp); /* to allow monitoring */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: listmenu.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.23 $ $Name: $"}; diff --git a/GUI/xephem/lo/._lodb.xml b/GUI/xephem/lo/._lodb.xml new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/lo/._lodb.xml differ diff --git a/GUI/xephem/lo/lodb.xml b/GUI/xephem/lo/lodb.xml new file mode 100644 index 0000000..d7f74f1 --- /dev/null +++ b/GUI/xephem/lo/lodb.xml @@ -0,0 +1,4540 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GUI/xephem/mainmenu.c b/GUI/xephem/mainmenu.c new file mode 100644 index 0000000..16d89c5 --- /dev/null +++ b/GUI/xephem/mainmenu.c @@ -0,0 +1,2734 @@ +/* code to manage the stuff on the (permanent) main menu. + * this is also where the single static Now struct is maintained. + * the calendar is managed in calmenu.c. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +/* Category for our widgets in the Save system */ +char maincategory[] = "Main -- Basics"; + +typedef struct { + char *iname; /* instance name */ + int id; /* see below -- used just as a cross-check */ + int autosav; /* for sr_reg() */ + char *tip; /* tip text */ + char *prompt; /* used when asking for new value or NULL if can't */ + char *label; /* used for the menu label or NULL */ + char *name; /* used when selecting for plotting or NULL if can't */ + char *altp[3]; /* alternate prompts */ + Widget pb_w; /* pushbutton for display and changing/selecting. + * N.B. but only if id != GAP + */ +} Field; + +#define MAXSITENL 25 /* max site name after abbreviation */ + +static void create_main_form (Widget mainrc); +static void create_pixmaps (void); +static void make_prompts (Widget p_w, int pc, char *title, char *tip, + Field *fp, int nfp); +static Widget fw (int fid); +static void mm_step_now (int rev); +static void mm_set_step_code (char *bp); +static void mm_set_buttons (int whether); +static void mm_activate_cb (Widget w, XtPointer client, XtPointer call); +static void mm_initres (void); +static void mm_pms (void); +static void mm_set_alt_prompts (Field *fp); +static void mm_timer_cb (XtPointer client, XtIntervalId *id); +static void mm_stop (void); +static void mm_step_cb (Widget w, XtPointer client, XtPointer call); +static void mm_go_action (Widget w, XEvent *e, String *args, Cardinal *nargs); +static void keepnow_cb (Widget w, XtPointer client, XtPointer call); +static void mm_gostop (int dir); +static void mm_go (int dir); +static void print_magdecl (void); +static void print_tminc (void); +static void print_updating (void); +static void print_idle (void); +static void print_running (int rev); +static void print_extrunning (void); +static void print_status (char *s); +static void print_nstep (void); +static void print_mspause (void); +static int chg_fld (char *bp, Field *fp); +static void prompt_ok_cb (Widget w, XtPointer client, XtPointer call); +static void prompt (Field *fp); +static Widget create_prompt_w (Widget *wp); +static void mm_now (int all); +static void mm_twilight (void); +static void mm_newcir (int y); +static void mm_newcir_cb (XtPointer client, XtIntervalId *id); +static void ext_fileask (void); +static int ext_readnext (void); +static void ext_stop (void); +static void ext_create_w (void); +static void ext_ok_cb (Widget w, XtPointer client, XtPointer call); +static void ext_help_cb (Widget w, XtPointer client, XtPointer call); + +/* shorthands for fields of a Now structure, now. + * first undo the ones for a Now pointer from astro.h. + */ +#undef mjd +#undef lat +#undef lng +#undef tz +#undef temp +#undef pressure +#undef elev +#undef dip +#undef epoch +#undef tznm +#undef mjed + +#define mjd now.n_mjd +#define lat now.n_lat +#define lng now.n_lng +#define tz now.n_tz +#define temp now.n_temp +#define pressure now.n_pressure +#define elev now.n_elev +#define dip now.n_dip +#define epoch now.n_epoch +#define tznm now.n_tznm +#define mjed mm_mjed(&now) + +static Now now; /* where when and how, right now */ +static double tminc; /* hrs to inc time each loop (see StepOptions)*/ +static int nstep; /* steps to go before stopping */ +static int mspause; /* msecs to pause between steps */ +static int startnstep; /* nstep at start of 0-pause loop */ +static int newcir = 1; /* new circumstances - don't inc time */ +static int movie; /* true while a movie is running */ +static FILE *ext_fp; /* if set, file to read time/loc from */ +static int autotz; /* whether to use tz_fromsys() each time step */ +static double DeltaT; /* user's specific deltat, unless autodt is on*/ +static int autodt = 1; /* compute delta if on, else use DeltaT. */ + +static XtIntervalId mm_interval_id; /* set while waiting in a pause loop */ +static int mm_selecting; /* set while our fields are being selected */ + +#define NO_PAUSE_DELAY 25 /* min ms delay to use, regardless of mspause */ +#define NC_BLINK_DELAY 200 /* ms between NEW CIRCUMSTANCES state changes */ +#define MANYSTEPS 1000000 /* "many" steps */ +#define MAXPNSTEP 1000 /* max steps for auto showing progress meter */ +#define NOWPAUSE 10000 /* default Pause when staying in sync, ms */ + +/* field ids + * N.B. must be in same order as they appear in mm_field_map[]. + */ +typedef enum { + JD_FID, UD_FID, UT_FID, LST_FID,TZN_FID, TZONE_FID, LD_FID, LT_FID, DT_FID, + DIP_FID, DAWN_FID, DUSK_FID, LON_FID, LSTM_FID, GAP, STPSZ_FID, NSTEP_FID, + PAUSE_FID, SITE_FID, LAT_FID, LONG_FID, ELEV_FID, TEMP_FID, PRES_FID, + EPOCH_FID, MAG_FID +} FID; + +/* array of label/button pairs. + * N.B. these must be in the same order as the _FID enums so the XX_FID may + * be used as indices into the array. + * N.B. some of the prompts get set based on preferences or other criteria but + * we need to put *something* in the prompt field of selectable fields to + * trigger making a button. See mm_set_alt_prompts(). + * N.B. if add/delete then update mm_field_map[] indices in create_main_form(). + */ +static char dummy[] = "dummy"; /* placeholder for prompt when several */ +static Field mm_field_map[] = { + {"JD", JD_FID, 0, "Julian date", + "Julian Date: ", "Julian:","JD"}, + {"UTCDate", UD_FID, 0, "UTC Date", + dummy, "UTC Date:","UD", + { "UTC date (m/d/y or year.d): ", + "UTC date (y/m/d or year.d): ", + "UTC date (d/m/y or year.d): " + } + }, + {"UTCTime", UT_FID, 0, "UTC Time", + "UTC time (h:m:s): ", "UTC Time:", "UT"}, + {"LST", LST_FID, 0, "Local sidereal time", + "Local sidereal time (h:m:s): ", "Sidereal:", "LST"}, + {"TZName", TZN_FID, 1, "Local timezone name", + "Fixed Timezone abbreviation:", "TZ Name:", NULL, + }, + {"TZone", TZONE_FID, 1, "Local hours behind (west of) UTC", + "Fixed offset behind UTC (h:m:s):", "TZ Offset:", "TZ", + }, + {"LDate", LD_FID, 0, "Local date", + dummy, "Local Date:", "LD", + { "Local date (m/d/y or year.d): ", + "Local date (y/m/d or year.d): ", + "Local date (d/m/y or year.d): " + } + }, + {"LTime", LT_FID, 0, "Local time", + "Local time (h:m:s): ", "Local Time:", "LT"}, + {"DeltaT", DT_FID, 0, "TT - UT1, seconds", + dummy, "Delta T:", "DeltaT", + { "Enter fixed value for TT - UT1, in seconds,\n\ +or press Auto to use model: ", + "Enter fixed value for TT - UT1, in seconds\n\ +(Automatic model will be turned off): ", + NULL + } + }, + {"TwiDip", DIP_FID, 1, "Sun angle below horizon at edge of twilight", + "Sun's twilight dip, degrees below", "Sun Dip:", NULL}, + {"DawnT", DAWN_FID, 0, "Time of dawn today", + NULL, "Dawn:", "Dawn"}, + {"DuskT", DUSK_FID, 0, "Time of dusk today", + NULL, "Dusk:", "Dusk"}, + {"NightLen", LON_FID, 0, "Hours between dusk and dawn tonight", + NULL, "Length:", "NiteLen"}, + {"LSTMN", LSTM_FID, 0, "Local Sidereal Time at next local Midnight", + NULL, "LST@0:","MidnightLST"}, + {NULL, GAP}, + {"StepSz", STPSZ_FID, 0, "Period or event to advance time on next Update", + "\ +Select one of the above shortcuts\n\ +or enter any time step as follows:\n\ + h m s, or\n\ + d for x days, or\n\ + s for x sidereal days, or\n\ + y for x tropical years", "Step:", NULL}, + {"NSteps", NSTEP_FID, 0, "Number of steps to run on next Update", + "Number of steps to run: ", "N Steps:", NULL}, + {"Pause", PAUSE_FID, 0, "Seconds to pause after each Update", + "Seconds to pause between steps: ", "Pause:", NULL}, + {"SiteNm", SITE_FID, 1, "Name of current site.", + "Search:", NULL, NULL}, + {"Lat", LAT_FID, 1,"Local geographic (geodetic) latitude, degrees, + north", + "Geographic Latitude (+ north) (d:m:s): ", "Latitude:", "Lat"}, + {"Long", LONG_FID, 1, "Local longitude, degrees, + west", + "Longitude (+ west) (d:m:s): ", "Longitude:","Long"}, + {"Elev", ELEV_FID, 1, "Local height above sea level", + dummy, "Elevation:","Elev", + { "Elevation above sea level (ft): ", + "Elevation above sea level (m): " + } + }, + {"TempC", TEMP_FID, 1, "Local outdoor air temperature", + dummy, "Temp:", "Temp", + { "Temperature (degrees F): ", + "Temperature (degrees C): " + } + }, + {"Pres", PRES_FID, 1, "Local atmospheric pressure", + dummy, "Atm Pres:","AtmPr", + { "Atmospheric pressure (inches of Mercury):", + "Atmospheric pressure (hPa):" + } + }, + {"Equinox", EPOCH_FID, 1, + "Precession epoch: EOD for full apparent, fixed year for astrometric", + "Precession Epoch (decimal year): ", "Equinox:", NULL}, + {"MagDec", MAG_FID, 0, + "True az = magnetic az + magnetic declination.", + NULL, "Mag decl:", "MagDec"}, +}; + +#define NFM XtNumber(mm_field_map) +#define LFM (&mm_field_map[NFM]) + +static Widget newcir_w; +static Widget status_w; +static Widget go_w; +static Widget ext_w; +static Widget keepnow_w; +static Widget stepF_w, stepB_w; + +/* stuff to manage the step control facility. + * we support a variety of ways time can be incremented. + * some are fixed but some are variable. + * the fixed ones set the time change amount in tminc (in hours). + * the variable ones compute it each iteration and don't use tminc. + */ +typedef enum { + FIXED_SS, STEPDAWN_SS, STEPDUSK_SS, STEPSUNRISE_SS, STEPSUNSET_SS, + STEPFULLMOON_SS, STEPNEWMOON_SS, RTC_SS, STEPMOONRISE_SS, STEPMOONSET_SS +} StepCode; + +typedef struct { + char *title; /* name of this step option as a string */ + StepCode stepcode; /* one of the StepCodes enum codes */ + double inc; /* if code is FIXED_SS: fixed time step, in hours */ + char *tip; /* quick tip */ +} StepOption; +/* N.B. leave RT Clock first!! see the RTC_SS_OPTION macro */ +static StepOption step_options[] = { + {"Clock", RTC_SS, 0.0, "Advance by elapsed time"}, + {"24:00:00", FIXED_SS, 24.0, "Step by 1 day"}, + {" 1:00:00", FIXED_SS, 1.0, "Step by 1 hour"}, + {" 0:05:00", FIXED_SS, 5./60., "Step by 5 minutes"}, + {" 0:01:00", FIXED_SS, 1./60., "Step by 1 minute"}, + {"Dawn", STEPDAWN_SS, 0.0, "Step to next dawn"}, + {"Dusk", STEPDUSK_SS, 0.0, "Step to next dusk"}, + {"Sun rise", STEPSUNRISE_SS, 0.0, "Step to next sun rise"}, + {"Sun set", STEPSUNSET_SS, 0.0, "Step to next sun set"}, + {"Moon rise", STEPMOONRISE_SS, 0.0, "Step to next moon rise"}, + {"Moon set", STEPMOONSET_SS, 0.0, "Step to next moon set"}, + {"Full moon", STEPFULLMOON_SS, 0.0, "Step to next full moon"}, + {"New moon", STEPNEWMOON_SS, 0.0, "Step to next new moon"}, + {"Sidereal Day", FIXED_SS, 24.*SIDRATE, "Step by 1 Earth rotation"}, + {"Sidereal Month", FIXED_SS, 27.3215*24., "Step by 1 Lunar revolution"}, +}; + +/* make a way to refer to the RT clock entry; needed in order to implement + * remaining compatable with putting "RTC" in resource files for the RT option. + */ +#define RTC_SS_OPTION (&step_options[0]) + +/* current step_option. + * how we init it here determines its default value. + * if this is 0 it means just use tminc, period. + */ +static StepOption *mm_step_option = RTC_SS_OPTION; + +/* site name, or NULL if none. + * absitename[] is an abbreviated version for display purposes. it is only + * considered valid if msitename != NULL. + * N.B. msitename is a malloced copy. free/malloc whenever change. + */ +static char *msitename; +static char absitename[MAXSITENL]; +static char snres[] = "Sitename"; /* name of X resource */ +static char nosite[] = ""; /* display/save if !msitename */ + +/* map the XeGo action to the mm_go_action() handler function */ +static XtActionsRec mm_actions[] = { + {"XeGo", mm_go_action} +}; + + +/* DST bitmap */ +#define dst_width 13 +#define dst_height 13 +static unsigned char dst_bits[] = { + 0xf0, 0x01, 0xcc, 0x07, 0xd2, 0x09, 0xc2, 0x08, 0xc5, 0x14, 0x41, 0x10, + 0x43, 0x18, 0x01, 0x10, 0x05, 0x14, 0x02, 0x08, 0x12, 0x09, 0x4c, 0x06, + 0xf0, 0x01}; +static Pixmap dst_pm; /* pixmap when autotz is on */ +static Widget dst_w; /* label for dst_pm */ + +/* 8 moon bitmaps */ +#define moon_width 13 +#define moon_height 13 +static unsigned char moonwaxc_bits[] = { + 0xf8, 0x03, 0x7e, 0x0c, 0xfe, 0x08, 0xff, 0x10, 0xff, 0x11, 0xff, 0x11, + 0xff, 0x11, 0xff, 0x11, 0xff, 0x11, 0xff, 0x10, 0xfe, 0x08, 0x7e, 0x0c, + 0xf8, 0x03}; +static unsigned char moon1q_bits[] = { + 0xf8, 0x03, 0x7e, 0x0c, 0x7e, 0x08, 0x7f, 0x10, 0x7f, 0x10, 0x7f, 0x10, + 0x7f, 0x10, 0x7f, 0x10, 0x7f, 0x10, 0x7f, 0x10, 0x7e, 0x08, 0x7e, 0x0c, + 0xf8, 0x03}; +static unsigned char moonwaxg_bits[] = { + 0xf8, 0x03, 0x3e, 0x0c, 0x1e, 0x08, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, + 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x0f, 0x10, 0x1e, 0x08, 0x3e, 0x0c, + 0xf8, 0x03}; +static unsigned char moonfull_bits[] = { + 0xf8, 0x03, 0x06, 0x0c, 0x02, 0x08, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, + 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x02, 0x08, 0x06, 0x0c, + 0xf8, 0x03}; +static unsigned char moonwang_bits[] = { + 0xf8, 0x03, 0x86, 0x0f, 0x02, 0x0f, 0x01, 0x1e, 0x01, 0x1e, 0x01, 0x1e, + 0x01, 0x1e, 0x01, 0x1e, 0x01, 0x1e, 0x01, 0x1e, 0x02, 0x0f, 0x86, 0x0f, + 0xf8, 0x03}; +static unsigned char moon3q_bits[] = { + 0xf8, 0x03, 0xc6, 0x0f, 0xc2, 0x0f, 0xc1, 0x1f, 0xc1, 0x1f, 0xc1, 0x1f, + 0xc1, 0x1f, 0xc1, 0x1f, 0xc1, 0x1f, 0xc1, 0x1f, 0xc2, 0x0f, 0xc6, 0x0f, + 0xf8, 0x03}; +static unsigned char moonwanc_bits[] = { + 0xf8, 0x03, 0xc6, 0x0f, 0xe2, 0x0f, 0xe1, 0x1f, 0xf1, 0x1f, 0xf1, 0x1f, + 0xf1, 0x1f, 0xf1, 0x1f, 0xf1, 0x1f, 0xe1, 0x1f, 0xe2, 0x0f, 0xc6, 0x0f, + 0xf8, 0x03}; +static unsigned char moonnew_bits[] = { + 0xf8, 0x03, 0xfe, 0x0f, 0xfe, 0x0f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, + 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xfe, 0x0f, 0xfe, 0x0f, + 0xf8, 0x03}; +#define NMOONBM 8 +static Pixmap moon_pm[NMOONBM]; /* bitmaps of basic moon phases, full -> full */ +static Widget moon_w; /* label for a moon_pm */ + +/* sun bitmap */ +#define sun_width 13 +#define sun_height 13 +static unsigned char sun_bits[] = { + 0x48, 0x02, 0xf2, 0x09, 0x0c, 0x06, 0x05, 0x14, 0x02, 0x08, 0x02, 0x08, + 0x03, 0x18, 0x02, 0x08, 0x02, 0x08, 0x05, 0x14, 0x0c, 0x06, 0xf2, 0x09, + 0x48, 0x02}; +static Pixmap sun_pm; /* pixmap when sun is up */ +static Widget sun_w; /* label for sun_pm */ + +/* empty bitmap */ +#define empty_width 13 +#define empty_height 13 +static unsigned char empty_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00}; +static Pixmap empty_pm; /* empty pixmap */ + + +/* called exactly once when the main form is made. + * create and manage all the widgets as children of the mainrc. + */ +void +mm_create (mainrc) +Widget mainrc; +{ + /* create the main form */ + splashMsg ("Building main form\n"); + create_main_form(mainrc); + splashMsg ("Building pixmaps\n"); + create_pixmaps(); + + /* init resources and Now */ + splashMsg ("Initializing resources\n"); + mm_initres(); + + /* load the initial set of objects and set checkpoint there. */ + splashMsg ("Loading data\n"); + db_loadinitial(); + + /* setup the initial field star info */ + splashMsg ("Setting up field stars\n"); + fs_create(); + + /* resource used to record whether to initially start RT */ + sr_reg (NULL, mm_autortres(), maincategory, 0); +} + +/* connect up an action routine to handle XeUpdate */ +void +mm_connActions() +{ + XtAppAddActions (xe_app, mm_actions, XtNumber(mm_actions)); +} + +/* called to update after new resources are installed */ +void +mm_newres() +{ + Pixel p; + + /* new pixmaps */ + create_pixmaps(); + + /* keep newcir invisible */ + get_something (newcir_w, XmNbackground, (XtArgVal)&p); + set_something (newcir_w, XmNforeground, (XtArgVal)p); + + /* redraw the pixmaps */ + mm_pms(); + + calm_set (&now); +} + +/* ask for a file to open and read date/time/lat/long lines from. + * or stops if currently doing that. + */ +void +mm_external () +{ + if (ext_fp) + mm_stop(); + else + ext_fileask(); +} + +/* callback to update forward or reverse 1 step or just go. + * see mm_gostop for meaning of client. + */ +/* ARGSUSED */ +void +mm_go_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + mm_gostop ((long int)client); +} + +/* called by the calendar subsystem to set a new UT date. + * newmjd is the new UT date/time as a modifed Julian date. + */ +void +mm_newcaldate (newmjd) +double newmjd; +{ + mjd = newmjd; + set_t0 (&now); + if (autotz) + (void) tz_fromsys (&now); + if (autodt) + DeltaT = deltat(mjd); + mm_now (1); + mm_newcir(1); + newcir = 1; +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +mm_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + mm_selecting++; + else if (mm_selecting > 0) + --mm_selecting; + + if ((whether && mm_selecting == 1) /* first one to want on */ + || (!whether && mm_selecting == 0) /* last one to want off */) + mm_set_buttons (whether); +} + +/* set and save the displayed site name */ +void +mm_sitename (name) +char *name; +{ + setXRes (snres, name); + if (msitename) + XtFree(msitename); + msitename = name ? XtNewString(name) : NULL; /* yes, NULL is OK */ + setXRes (snres, msitename ? msitename : nosite); + sites_abbrev (msitename, absitename, MAXSITENL); + mm_now (1); +} + +/* called to set new lat/long Now. + * TZ, TZName and Sitename get something generic. + * if update we do a full update, else just set NEW CICUMSTANCES. + */ +void +mm_setll (l, L, update) +double l, L; /* lat, long */ +int update; +{ + int hr; + + /* update everything */ + lat = l; + lng = L; + mm_sitename (NULL); + + /* guess a timezone from longitude */ + hr = ((((int)floor((raddeg(-L)+7.5)/15))+24)%24); + if (hr > 12) + hr -= 24; + autotz = 0; + tz = hr; + sprintf (tznm, "UTC%c%d", hr > 0 ? '-' : '+', abs(hr)); + + /* ok */ + if (update) + redraw_screen(1); + else { + mm_now (1); + mm_newcir(1); + newcir = 1; + } +} + +/* called to set new site information in Now. + * if update we do a full update, else just set NEW CICUMSTANCES. + */ +void +mm_setsite (sp, update) +Site *sp; +int update; +{ + static char envbuf[64]; /* putenv() wants stable string */ + + /* update everything */ + lat = sp->si_lat; + lng = sp->si_lng; + elev = sp->si_elev/ERAD; /* m to earth radii */ + mm_sitename (sp->si_name); + sprintf (envbuf, "TZ=%s", sp->si_tzdefn); + autotz = 1; + putenv (envbuf); + tzset(); + (void) tz_fromsys (&now); + + /* ok */ + if (update) + redraw_screen(1); + else { + mm_now (1); + mm_newcir(1); + newcir = 1; + } +} + +/* give the caller the current site name. + * N.B. return NULL if no current site. + * N.B. caller should not change anything. + */ +char * +mm_getsite () +{ + return (msitename); +} + +/* set the current epoch. this is used by sky fits to match the EQUINOX field. + */ +void +mm_setepoch (yr) +double yr; +{ + double newepoch; + + year_mjd (yr, &newepoch); + + if (epoch != EOD && fabs(newepoch-epoch) < 1e-3) + return; /* close enough already */ + + epoch = newepoch; + mm_now (1); + mm_newcir(1); + newcir = 1; +} + +/* return mjed (Modified Julian Date in ET scale) from mjd (UT scale) + */ +double mm_mjed (np) +Now *np; +{ + return (np->n_mjd + DeltaT/86400.0); /* do NOT just use mjd macro! */ +} + +/* a way for anyone to know what now is */ +Now * +mm_get_now() +{ + return (&now); +} + +/* called to start or stop a movie sequence. + * if a movie is currently running, we stop it, period. + * then if stepsz != 0 we start one by set movie=1, mspause=0, nstep=MANYSTEPS, + * tm_inc=stepsz and do about what the Go button does. + */ +void +mm_movie (stepsz) +double stepsz; /* step size, hours */ +{ + /* stop any current external control */ + ext_stop(); + + /* stop any current movie */ + if (movie) { + if (mm_interval_id != 0) { + XtRemoveTimeOut (mm_interval_id); + mm_interval_id = 0; + } + nstep = 1; + redraw_screen (1); + print_idle(); + movie = 0; + return; + } + + /* that's it if zero step size */ + if (stepsz == 0.0) + return; + + /* note movie is about to be running */ + movie = 1; + + /* init nstep and mspause to reasonable for long fast looping */ + startnstep = nstep = MANYSTEPS; + print_nstep(); + mspause = 0; + print_mspause(); + + /* set the time increment to stepsz */ + mm_step_option = NULL; /* no special increment */ + tminc = stepsz; + print_tminc(); + print_running(0); + + /* start fresh looping */ + mm_go(0); +} + +/* draw all the stuff on the managed menus. + * if how_much then redraw all fields, else just redo the graphics. + */ +void +redraw_screen (how_much) +int how_much; +{ + watch_cursor(1); + + /* invalidate any cached values in the database */ + db_invalidate(); + + /* print the single-step message if this is the last loop */ + if (nstep < 1) + print_updating(); + + /* show nstep to show plot loops to go and + * show tminc to show search convergence progress. + */ + print_nstep(); + print_tminc(); + print_mspause(); + + /* if just updating changed fields while plotting or listing + * unattended then suppress most screen updates. + */ + if (!how_much) + f_off(); + + /* print all the time-related fields */ + mm_now (how_much); + + mm_twilight (); + + /* print stuff on other menus */ + all_update(&now, how_much); + + /* everything is up to date now */ + newcir = 0; + mm_newcir(0); + + f_on(); + + watch_cursor(0); +} + +/* name of resource containg whether to start running in real time */ +char * +mm_autortres() +{ + return ("AutoRT"); +} + +/* keep XEphem time in sync with computer */ +void +mm_startrt() +{ + /* RT Clock stepping */ + set_t0 (&now); + mm_step_option = RTC_SS_OPTION; + + /* many steps */ + nstep = MANYSTEPS; + + /* use same pause unless 0 */ + if (mspause == 0) + mspause = NOWPAUSE; + + /* set to computer time */ + time_fromsys (&now); + mm_newcaldate (mjd); + + print_running(0); + mm_go(0); + + /* record we are running RT */ + setXRes (mm_autortres(), "1"); +} + +/* (re)create the pixmaps. + * N.B. we use the colors from status_w. + */ +static void +create_pixmaps() +{ + Display *dsp = XtDisplay (toplevel_w); + Window win = RootWindow (dsp, DefaultScreen(dsp)); + Arg args[20]; + XColor colors[2]; + Pixel fg, bg; + int d; + int i, n; + + n = 0; + XtSetArg (args[n], XmNforeground, &fg); n++; + XtSetArg (args[n], XmNbackground, &bg); n++; + XtSetArg (args[n], XmNdepth, &d); n++; + XtGetValues (status_w, args, n); + + /* DST indicator */ + if (dst_pm) + XFreePixmap (dsp, dst_pm); + dst_pm = XCreatePixmapFromBitmapData (dsp, win, (char *)dst_bits, + dst_width, dst_height, fg, bg, d); + + /* moons; create in full -> full */ + for (n = 0; n < NMOONBM; n++) + if (moon_pm[n]) + XFreePixmap (dsp, moon_pm[n]); + moon_pm[0] = XCreatePixmapFromBitmapData(dsp, win, (char*)moonfull_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[1] = XCreatePixmapFromBitmapData(dsp, win, (char*)moonwang_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[2] = XCreatePixmapFromBitmapData(dsp, win, (char*)moon3q_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[3] = XCreatePixmapFromBitmapData(dsp, win, (char*)moonwanc_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[4] = XCreatePixmapFromBitmapData(dsp, win, (char*)moonnew_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[5] = XCreatePixmapFromBitmapData(dsp, win, (char*)moonwaxc_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[6] = XCreatePixmapFromBitmapData(dsp, win, (char*)moon1q_bits, + moon_width, moon_height, fg, bg, d); + moon_pm[7] = XCreatePixmapFromBitmapData(dsp, win, (char*)moonwaxg_bits, + moon_width, moon_height, fg, bg, d); + + /* bitmaps are drawn assuming fg is darker than bg. if not, rotate by + * 1/2 phase + */ + colors[0].pixel = fg; + colors[1].pixel = bg; + XQueryColors (dsp, xe_cm, colors, XtNumber(colors)); + if (colors[0].red + colors[0].green + colors[0].blue > + colors[1].red + colors[1].green + colors[1].blue) { + + for (i = 0; i < NMOONBM/2; i++) { + Pixmap tmp = moon_pm[i]; + Pixmap *nxt = &moon_pm[(i+NMOONBM/2)%NMOONBM]; + moon_pm[i] = *nxt; + *nxt = tmp; + } + } + + /* Sun */ + if (sun_pm) + XFreePixmap (dsp, sun_pm); + sun_pm = XCreatePixmapFromBitmapData (dsp, win, (char *)sun_bits, + sun_width, sun_height, fg, bg, d); + + /* empty pixmap */ + if (empty_pm) + XFreePixmap (dsp, empty_pm); + empty_pm = XCreatePixmapFromBitmapData (dsp, win, (char *)empty_bits, + empty_width, empty_height, fg, bg, d); +} + +static void +create_main_form(mainrc) +Widget mainrc; +{ + Widget mrc_w, f_w; + Widget ulfr_w, urfr_w, llfr_w, lrfr_w; + Widget w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNisAligned, False); n++; + mrc_w = XmCreateRowColumn (mainrc, "MainRC", args, n); + XtManageChild (mrc_w); + + /* make the status label */ + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + status_w = XmCreateLabel (mrc_w, "Status", args, n); + wtip (status_w, + "Current overall XEphem run-status and what you may do now."); + XtManageChild (status_w); + + /* make the "NEW CIRCUMSTANCES" label */ + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + newcir_w = XmCreateLabel (mrc_w, "NewCir", args, n); + set_xmstring (newcir_w, XmNlabelString, "NEW CIRCUMSTANCES"); + XtManageChild(newcir_w); + wtip (newcir_w, + "Flashes while some fields may be out of date, until Update"); + + /* make a form for the basic areas */ + + n = 0; + XtSetArg (args[n], XmNallowOverlap, False); n++; + f_w = XmCreateForm (mrc_w, "MainForm", args, n); + XtManageChild (f_w); + + /* make frame in the upper right */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + urfr_w = XmCreateFrame (f_w, "URFr", args, n); + XtManageChild (urfr_w); + + w = calm_create (urfr_w); + XtManageChild (w); + + /* make frame in the upper left */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n],XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET);n++; + XtSetArg (args[n], XmNbottomWidget, urfr_w); n++; + XtSetArg (args[n], XmNbottomOffset, 0); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, urfr_w); n++; + ulfr_w = XmCreateFrame (f_w, "ULFr", args, n); + XtManageChild (ulfr_w); + + make_prompts (ulfr_w, 50, "Local", + "Controls to set up location and observing conditions", + &mm_field_map[18], NFM-18); + + /* make frame in lower right */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, urfr_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + lrfr_w = XmCreateFrame (f_w, "LRFr", args, n); + XtManageChild (lrfr_w); + + make_prompts (lrfr_w, 50, "Night", + "Information about dusk, dawn and other night time issues", + &mm_field_map[9], 9); + + /* make frame in lower left */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, urfr_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, lrfr_w); n++; + llfr_w = XmCreateFrame (f_w, "LLFr", args, n); + XtManageChild (llfr_w); + + make_prompts (llfr_w, 45, "Time", + "Controls to set the time used for all computations", + &mm_field_map[0], 9); + + /* put a wide and thick "go" button below all */ + n = 0; + XtSetArg (args[n], XmNmarginTop, 5); n++; + XtSetArg (args[n], XmNmarginBottom, 5); n++; + go_w = XmCreatePushButton (mrc_w, "MainUpdate", args, n); + XtAddCallback (go_w, XmNactivateCallback, mm_go_cb, 0); + wtip (go_w, "Run or stop the main execution loop"); + set_xmstring (go_w, XmNlabelString, "Update"); + XtManageChild (go_w); +} + +/* build the given Fields in a column */ +static void +make_prompts (p_w, pc, title, tip, fp, nfp) +Widget p_w; /* parent */ +int pc; +char *title; +char *tip; +Field *fp; +int nfp; +{ + Widget f_w; + Widget l_w, b_w; + Field *lfp; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 3); n++; + f_w = XmCreateForm (p_w, "MF", args, n); + XtManageChild (f_w); + + if (!strcmp (title, "Time")) { + /* make special DST clock kludge */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + dst_w = XmCreateLabel (f_w, "DST", args, n); + wtip (dst_w, "Shows Clock when auto Savings Time is in effect"); + XtManageChild (dst_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, dst_w); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + b_w = XmCreateLabel (f_w, "MTL", args, n); + set_xmstring (b_w, XmNlabelString, title); + wtip (b_w, tip); + XtManageChild (b_w); + + } else if (!strcmp (title, "Night")) { + /* N.B. hack in sun and moon PMs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + sun_w = XmCreateLabel (f_w, "SunUp", args, n); + wtip (sun_w, "Shows a Sun when it is above local horizontal"); + XtManageChild (sun_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + moon_w = XmCreateLabel (f_w, "MoonUp", args, n); + wtip (moon_w, "Shows a Moon when it is above local horizontal"); + XtManageChild (moon_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, sun_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, moon_w); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + b_w = XmCreateLabel (f_w, "MTL", args, n); + set_xmstring (b_w, XmNlabelString, title); + wtip (b_w, tip); + XtManageChild (b_w); + + } else { + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + b_w = XmCreateLabel (f_w, "MTL", args, n); + set_xmstring (b_w, XmNlabelString, title); + wtip (b_w, tip); + XtManageChild (b_w); + } + + for (lfp = fp + nfp; fp < lfp; fp++) { + + /* if GAP just mark a separator */ + if (fp->id == GAP) { + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + b_w = XmCreateSeparator (f_w, "GapSep", args, n); + XtManageChild (b_w); + + if (strcmp (title, "Night")) + continue; + + /* N.B. hacks in Looping title for + - and Now PBs. */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + keepnow_w = XmCreatePushButton (f_w, "RT", args, n); + XtAddCallback (keepnow_w, XmNactivateCallback, keepnow_cb, 0); + wtip (keepnow_w, + "Set looping to stay in sync with computer clock @ Pause intervals"); + XtManageChild (keepnow_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + stepB_w = XmCreatePushButton (f_w, "SB", args, n); + XtAddCallback (stepB_w, XmNactivateCallback, mm_go_cb, + (XtPointer)-1); + set_xmstring (stepB_w, XmNlabelString, "-1"); + wtip (stepB_w, "Back one Step"); + XtManageChild (stepB_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, stepB_w); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + stepF_w = XmCreatePushButton (f_w, "SF", args, n); + XtAddCallback (stepF_w, XmNactivateCallback, mm_go_cb, + (XtPointer)1); + set_xmstring (stepF_w, XmNlabelString, "+1"); + wtip (stepF_w, "Forward one Step"); + XtManageChild (stepF_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, stepF_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, keepnow_w); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + b_w = XmCreateLabel (f_w, "GL", args, n); + set_xmstring (b_w, XmNlabelString, "Looping"); + wtip (b_w, + "Controls to set up automatic time stepping behavior"); + XtManageChild (b_w); + + b_w = keepnow_w; /* PB is taller than label */ + + continue; + } + + /* if no label, center a PB */ + if (!fp->label) { + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + if (fp->name) { + XtSetArg (args[n], XmNuserData, fp->name); n++; + }; + b_w = fp->pb_w = XmCreatePushButton (f_w, fp->iname, args, n); + if (fp->prompt || fp->name) + XtAddCallback (b_w, XmNactivateCallback, mm_activate_cb, + (XtPointer)fp); + XtManageChild(b_w); + if (fp->tip) + wtip (b_w, fp->tip); + continue; + } + + /* we have both a label and PB -- put them side by side */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, pc-1); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + l_w = XmCreateLabel (f_w, "MainLabel", args, n); + XtManageChild(l_w); + set_xmstring (l_w, XmNlabelString, fp->label); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, b_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, pc+1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + if (fp->name) { + XtSetArg (args[n], XmNuserData, fp->name); n++; + }; + b_w = fp->pb_w = XmCreatePushButton (f_w, fp->iname, args, n); + if (fp->prompt || fp->name) + XtAddCallback (b_w, XmNactivateCallback, mm_activate_cb, + (XtPointer)fp); + XtManageChild(b_w); + if (fp->tip) + wtip (b_w, fp->tip); + } +} + +/* get the widget associated with this _FID. + * We do some error checking. + */ +static Widget +fw(fid) +int fid; +{ + Field *fp = NULL; + + if (fid < 0 || fid >= NFM || (fp = &mm_field_map[fid])->id != fid) { + printf ("mainmenu:fw(): bad field id: %d\n", fid); + abort(); + } + return (fp->pb_w); +} + +/* go through all the buttons just pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +mm_set_buttons (whether) +int whether; +{ + Field *fp; + + for (fp = mm_field_map; fp < LFM; fp++) { + if (fp->id == GAP) + continue; /* no pb_w */ + if (whether) + buttonAsButton (fp->pb_w, fp->name != NULL); + else + buttonAsButton (fp->pb_w, fp->prompt != NULL); + } + + /* also the special Looping PBs */ + buttonAsButton (keepnow_w, !whether); + buttonAsButton (stepF_w, !whether); + buttonAsButton (stepB_w, !whether); +} + +/* callback from any of the main menu buttons being activated. + * if we are currently selecting fields to plot and the field has a name + * then inform all the potentially interested parties; + * else if the field has a prompt then ask the user for a new value. + */ +/* ARGSUSED */ +static void +mm_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Field *fp = (Field *)client; + + if (mm_selecting) { + if (fp->name) + register_selection (fp->name); + } else { + if (fp->prompt) { + mm_set_alt_prompts (fp); + prompt (fp); + } + } +} + +/* called when user wants XEphem time to stay in sync with computer */ +/* ARGSUSED */ +static void +keepnow_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + mm_startrt(); +} + +/* set things to their initial resource settings */ +static void +mm_initres() +{ + /* list of FIDs we get from resources, in order */ + typedef struct { + FID fid; + char *res; + } InitMap; + static InitMap imap[] = { + {EPOCH_FID, "Equinox"}, + {LAT_FID, "Lat"}, + {LONG_FID, "Long"}, + {ELEV_FID, "Elevation"}, + {NSTEP_FID, "NSteps"}, + {PAUSE_FID, "Pause"}, + {PRES_FID, "Pressure"}, + {DIP_FID, "TwilightDip"}, + {DT_FID, "DeltaT"}, + {STPSZ_FID, "StepSize"}, + {TEMP_FID, "Temp"}, + {TZONE_FID, "TZone"}, + {TZN_FID, "TZName"}, + {SITE_FID, snres}, /* overrides others if valid */ + +#if 0 /* doing this works but how to /remove/ from res file once saved? */ + {JD_FID, "JD"}, /* overrides Now if valid */ + {UT_FID, "UTCTime"}, /* overrides Now if valid */ + {UD_FID, "UTCDate"}, /* overrides Now if valid */ + {LT_FID, "LTime"}, /* overrides Now if valid */ + {LD_FID, "LDate"}, /* overrides Now if valid */ + {LST_FID, "LST"}, /* overrides Now if valid */ +#endif + }; + char *sn; + int i; + + /* init to now first */ + time_fromsys (&now); + + /* then scan other fields so they can override. + * N.B. save Sitename early because Lat/Long will set it to null. + */ + sn = XtNewString(getXRes (snres, 0)); + for (i = 0; i < XtNumber(imap); i++) { + char *cp = imap[i].fid == SITE_FID ? sn : getXRes (imap[i].res, 0); + if (cp) + chg_fld (cp, &mm_field_map[imap[i].fid]); + } + XtFree (sn); + + /* go from resources to real widget, then capture in save system. + * N.B. track Sitename directly; its display widget might be abbrev. + */ + redraw_screen (1); + for (i = 0; i < XtNumber(imap); i++) { + FID fid = imap[i].fid; + sr_reg (fid == SITE_FID ? 0 : mm_field_map[fid].pb_w, imap[i].res, + maincategory, mm_field_map[fid].autosav); + } + + /* button info */ + mm_set_buttons (mm_selecting); + print_idle(); +} + +/* set up those prompts that use the alternates. + */ +static void +mm_set_alt_prompts(fp) +Field *fp; +{ + switch (fp->id) { + case UD_FID: + case LD_FID: + fp->prompt = fp->altp[pref_get(PREF_DATE_FORMAT)]; + break; + case ELEV_FID: + case TEMP_FID: + case PRES_FID: + fp->prompt = fp->altp[pref_get(PREF_UNITS)]; + break; + case DT_FID: + fp->prompt = fp->altp[autodt]; + break; + } +} + +/* function called from the interval timer used to implement the + * auto repeat feature. + */ +/* ARGSUSED */ +static void +mm_timer_cb (client, id) +XtPointer client; +XtIntervalId *id; +{ + mm_interval_id = 0; + mm_go(0); +} + +/* stop running */ +static void +mm_stop() +{ + /* close external file if in use */ + ext_stop(); + + /* turn off timer */ + if (mm_interval_id) { + XtRemoveTimeOut (mm_interval_id); + mm_interval_id = 0; + } + + /* close progress meter, if up */ + pm_down(); + + /* do final screen update if last was partial */ + if (nstep > 1 && mspause == 0) + redraw_screen (1); + + /* figure stopping probably means abandon the loop */ + nstep = 1; + print_nstep (); + print_idle(); + + /* can't be a movie running now either */ + movie = 0; +} + +/* called when any of the canned step size buttons is activated. + * client contains the StepOption pointer; use it to set mm_step_option and, + * if it's a fixed value, tminc. + * when finished, unmanage the dialog (which is the parent of our parent). + */ +/* ARGSUSED */ +static void +mm_step_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + StepOption *sop = (StepOption *)client; + + mm_step_option = sop; + if (sop->stepcode == FIXED_SS) + tminc = sop->inc; + else + tminc = 0.0; /* just to reset things for the next time */ + set_t0 (&now); + print_tminc (); + + XtUnmanageChild (XtParent(XtParent(w))); +} + +/* action routine associated with the step control accelerators. + * see mm_gostop() for meaning of arg. + */ +static void +mm_go_action (w, e, p, n) +Widget w; +XEvent *e; +String *p; +Cardinal *n; +{ + /* assert */ + if (!(n && *n && p)) { + printf ("Bad go_action: %p %d %p\n", n, n?*n:0, p); + abort(); + } + + /* avoid runaway auto reps */ + XSync (XtD, True); + + /* ok */ + mm_gostop (atoi(*p)); +} + +/* common routine to go or stop time. + * dir is number of steps to go +step (+) or -step (-), or 0 to just GO. + * bring up pm if running fast and not a crazy number of steps. + */ +static void +mm_gostop(dir) +int dir; +{ + if (mm_interval_id) { + mm_stop(); + /* record we have stopped (running RT for sure) */ + setXRes (mm_autortres(), "0"); + } else { + if (!dir && nstep > 1) { + print_running(0); + startnstep = nstep; + if (mspause < NO_PAUSE_DELAY && nstep <= MAXPNSTEP) + pm_up(); + } + if (!newcir && any_ison()) + mm_now (1); /* update time fields in case of listing/etc */ + mm_go(dir); + } +} + +/* increment, update all fields, and go again if more steps. + * dir is number of steps to go +step (+) or -step (-), or 0 to just GO. + */ +static void +mm_go(dir) +int dir; +{ + int srchdone; + int drawall; + + /* next Now unless user just made some relevant changes */ + if (ext_fp) { + if (ext_readnext() < 0) + nstep = 0; + } else if (!newcir) + mm_step_now(dir < 0); + + /* update nsteps remaining. + * N.B. don't want "back" to increment when at 1 + */ + if (nstep == 1) + nstep = 0; + else + nstep -= dir ? dir : 1; + + /* recalculate everything and update some fields */ + drawall = newcir || nstep <= 1 || mspause > 0 || dir; + redraw_screen(drawall); + + /* let searching functions change tminc and check for done */ + srchdone = srch_eval (mjd, &tminc) < 0; + print_tminc(); /* to show possibly new search increment */ + + /* update plot and listing files, now that all fields are up + * to date and search function has been evaluated. + */ + plot(); + listing(); + + /* stop loop if a search is done, steps are done or single-stepping */ + if (srchdone || nstep < 1 || dir) { + if (!dir || nstep < 1) + nstep = 1; + print_nstep (); + print_idle(); + + /* update all fields if last didn't already */ + if (!drawall) + redraw_screen (1); + + /* close progress meter, if up */ + pm_down(); + } else { + long ms; + + if (mspause < NO_PAUSE_DELAY) { + /* 0 hogs too much */ + ms = NO_PAUSE_DELAY; + } else if (mspause >= 1000 && !ext_fp && mm_step_option + && mm_step_option->stepcode == RTC_SS) { + /* advance to next multiple of mspause if internal & realtime */ + long spause = mspause/1000; + ms = 1000L * (spause - time(NULL)%spause); + } else { + /* keep literal */ + ms = mspause; + } + + if (mm_interval_id != 0) + XtRemoveTimeOut (mm_interval_id); + mm_interval_id = XtAppAddTimeOut (xe_app, ms, mm_timer_cb, 0); + + /* progress meter, if still running fast */ + if (mspause < NO_PAUSE_DELAY && nstep > 1) + pm_set (100*(startnstep-nstep)/startnstep); + } + + /* XSync (XtD, False); */ + XmUpdateDisplay (toplevel_w); +} + +/* set the time (in now.n_mjd) according to the desired step increment + * as coded in mm_step_option and possibly tminc. + */ +static void +mm_step_now(reverse) +int reverse; +{ +#define RSACC (30./3600./24.) /* nominal rise/set accuracy, days */ +#define BADRS (RS_ERROR|RS_CIRCUMPOLAR|RS_NEVERUP) + StepCode stepcode= mm_step_option ? mm_step_option->stepcode : FIXED_SS; + double dawn, dusk; + RiseSet rs; + int status; + Obj *op; + + watch_cursor(1); + + switch (stepcode) { + case STEPDAWN_SS: + twilight_cir (&now, dip, &dawn, &dusk, &status); + if ((status & (BADRS|RS_NORISE)) + || (!reverse && mjd > dawn - RSACC) + || (reverse && mjd < dawn + RSACC)) { + /* try another few days */ + Now n; + (void) memcpy ((void *)&n, (void *)&now, sizeof(Now)); + n.n_mjd += reverse ? -1 : 1; + twilight_cir (&n, dip, &dawn, &dusk, &status); + if (status & (BADRS|RS_NORISE)) { + n.n_mjd += reverse ? -1 : 1; + twilight_cir (&n, dip, &dawn, &dusk, &status); + if (status & (BADRS|RS_NORISE)) { + xe_msg (1, "No dawn within two days."); + nstep = 0; + } else + mjd = dawn; + } else + mjd = dawn; + } else + mjd = dawn; + break; + + case STEPDUSK_SS: + twilight_cir (&now, dip, &dawn, &dusk, &status); + if ((status & (BADRS|RS_NOSET)) + || (!reverse && mjd > dusk - RSACC) + || (reverse && mjd < dusk + RSACC)) { + /* try another few days */ + Now n; + (void) memcpy ((void *)&n, (void *)&now, sizeof(Now)); + n.n_mjd += reverse ? -1 : 1; + twilight_cir (&n, dip, &dawn, &dusk, &status); + if (status & (BADRS|RS_NOSET)) { + n.n_mjd += reverse ? -1 : 1; + twilight_cir (&n, dip, &dawn, &dusk, &status); + if (status & (BADRS|RS_NOSET)) { + xe_msg (1, "No dusk within two days."); + nstep = 0; + } else + mjd = dusk; + } else + mjd = dusk; + } else + mjd = dusk; + break; + + case STEPSUNRISE_SS: + op = db_basic(SUN); + dm_riset (&now, op, &rs); + if ((rs.rs_flags & (BADRS|RS_NORISE)) + || (!reverse && mjd > rs.rs_risetm - RSACC) + || (reverse && mjd < rs.rs_risetm + RSACC)) { + /* try another few days */ + Now n; + (void) memcpy ((void *)&n, (void *)&now, sizeof(Now)); + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NORISE)) { + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NORISE)) { + xe_msg (1, "No sunrise within two days."); + nstep = 0; + } else + mjd = rs.rs_risetm; + } else + mjd = rs.rs_risetm; + } else + mjd = rs.rs_risetm; + break; + + case STEPSUNSET_SS: + op = db_basic(SUN); + dm_riset (&now, op, &rs); + if ((rs.rs_flags & (BADRS|RS_NOSET)) + || (!reverse && mjd > rs.rs_settm - RSACC) + || (reverse && mjd < rs.rs_settm + RSACC)) { + /* try another few days */ + Now n; + (void) memcpy ((void *)&n, (void *)&now, sizeof(Now)); + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NOSET)) { + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NOSET)) { + xe_msg (1, "No sunset within two days."); + nstep = 0; + } else + mjd = rs.rs_settm; + } else + mjd = rs.rs_settm; + } else + mjd = rs.rs_settm; + break; + + case STEPMOONRISE_SS: + op = db_basic(MOON); + dm_riset (&now, op, &rs); + if ((rs.rs_flags & (BADRS|RS_NORISE)) + || (!reverse && mjd > rs.rs_risetm - RSACC) + || (reverse && mjd < rs.rs_risetm + RSACC)) { + /* try another few days */ + Now n; + (void) memcpy ((void *)&n, (void *)&now, sizeof(Now)); + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NORISE)) { + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NORISE)) { + xe_msg (1, "No moonrise within two days."); + nstep = 0; + } else + mjd = rs.rs_risetm; + } else + mjd = rs.rs_risetm; + } else + mjd = rs.rs_risetm; + break; + + case STEPMOONSET_SS: + op = db_basic(MOON); + dm_riset (&now, op, &rs); + if ((rs.rs_flags & (BADRS|RS_NOSET)) + || (!reverse && mjd > rs.rs_settm - RSACC) + || (reverse && mjd < rs.rs_settm + RSACC)) { + /* try another few days */ + Now n; + (void) memcpy ((void *)&n, (void *)&now, sizeof(Now)); + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NOSET)) { + n.n_mjd += reverse ? -1 : 1; + dm_riset (&n, op, &rs); + if (rs.rs_flags & (BADRS|RS_NOSET)) { + xe_msg (1, "No moonset within two days."); + nstep = 0; + } else + mjd = rs.rs_settm; + } else + mjd = rs.rs_settm; + } else + mjd = rs.rs_settm; + break; + + case STEPFULLMOON_SS: + if (reverse) { + /* start over a month ahead and search for prior full moon */ + double M, mjdn, mjdf; + M = mjd + 32.0; + do { + M -= 1.0; + moonnf (M, &mjdn, &mjdf); + } while (mjdf >= mjd); + mjd = mjdf; + } else { + /* start over a month back and search for next full moon */ + double M, mjdn, mjdf; + M = mjd - 32.0; + do { + M += 1.0; + moonnf (M, &mjdn, &mjdf); + } while (mjdf <= mjd); + mjd = mjdf; + } + break; + + case STEPNEWMOON_SS: + if (reverse) { + /* start over a month ahead and search for prior new moon */ + double M, mjdn, mjdf; + M = mjd + 32.0; + do { + M -= 1.0; + moonnf (M, &mjdn, &mjdf); + } while (mjdn >= mjd); + mjd = mjdn; + } else { + /* start over a month back and search for next new moon */ + double M, mjdn, mjdf; + M = mjd - 32.0; + do { + M += 1.0; + moonnf (M, &mjdn, &mjdf); + } while (mjdn <= mjd); + mjd = mjdn; + } + break; + + /* FIXED_SS step options just use tminc */ + case FIXED_SS: + inc_mjd (&now, tminc, reverse, 0); + break; + + /* increment in real time (wrt last set_t0()) */ + case RTC_SS: + inc_mjd (&now, tminc, reverse, 1); + break; + + default: + printf ("mm_step_now(): bogus stepcode: %d\n", stepcode); + abort(); + } + + if (autotz) + (void) tz_fromsys (&now); + if (autodt) + DeltaT = deltat(mjd); + + watch_cursor(0); + +#undef RSACC +#undef BADRS +} + +static void +print_magdecl() +{ + static int lasts = -100; + double yr, md; + char msg[1024]; + char dir[1024]; + int s; + + mjd_year (mjd, &yr); + sprintf (dir, "%s/auxil", getShareDir()); + s = magdecl (lat, lng, elev*ERAD, yr, dir, &md, msg); + if (s < 0) { + md = 0; + if (s != lasts) + xe_msg (0, "%s", msg); + } + lasts = s; + f_dms_angle (fw(MAG_FID), md); +} + +static void +print_tminc() +{ + Widget stpsz_w = fw(STPSZ_FID); + StepCode stepcode= mm_step_option ? mm_step_option->stepcode : FIXED_SS; + char buf[32]; + + switch (stepcode) { + + /* step options that are variable and identified by a name */ + case STEPDAWN_SS: /* same as .. */ + case STEPDUSK_SS: /* same as .. */ + case STEPSUNRISE_SS: /* same as .. */ + case STEPSUNSET_SS: /* same as .. */ + case STEPMOONRISE_SS: /* same as .. */ + case STEPMOONSET_SS: /* same as .. */ + case STEPFULLMOON_SS: /* same as .. */ + case STEPNEWMOON_SS: /* same as .. */ + case RTC_SS: + sprintf (buf, "%9s", mm_step_option->title); + f_string (stpsz_w, buf); + break; + + /* FIXED_SS step options just use tminc */ + case FIXED_SS: + if (fabs(tminc) >= 48.0) + f_double (stpsz_w, "%8.7gd", tminc/24.0); + else + f_sexa (stpsz_w, tminc, 3, 3600); + break; + + default: + printf ("print_tminc(): bogus stepcode: %d\n", stepcode); + abort(); + } +} + +static void +print_updating() +{ + print_status ("Updating..."); +} + +static void +print_idle() +{ + print_status ("Make changes then press Update to run."); + f_string (go_w, "Update"); +} + +static void +print_running(reverse) +int reverse; +{ + if (reverse) + print_status ("Running in reverse... press Stop to stop."); + else + print_status ("Running... press Stop to stop."); + f_string (go_w, "Stop"); +} + +static void +print_extrunning() +{ + print_status ("External control ... press Stop to stop."); + f_string (go_w, "Stop"); +} + +static void +print_status (s) +char *s; +{ + static char *last_s; + + if (s != last_s) { + f_string (status_w, s); + XSync (XtD, False); + last_s = s; + } +} + +static void +print_nstep() +{ + static int last = 876476; + + if (nstep != last) { + char buf[16]; + (void) sprintf (buf, "%7d", nstep); + f_string (fw(NSTEP_FID), buf); + last = nstep; + } +} + +static void +print_mspause() +{ + static int last = 98764; + + if (mspause != last) { + char buf[16]; + (void) sprintf (buf, "%7g", mspause/1000.0); + f_string (fw(PAUSE_FID), buf); + last = mspause; + } +} + +/* react to the field at *fp according to the string input at bp. + * crack the buffer and update the corresponding (global) variable(s) + * or do whatever a pick at that field should do. + * return 1 if we change a field that invalidates any of the times or + * to update all related fields. + */ +static int +chg_fld (bp, fp) +char *bp; +Field *fp; +{ + int new = 0; + double tmp; + + if (!bp) { + printf ("Bug! NULL bp for field %s\n", fp->iname); + abort(); + } + + switch (fp->id) { + case JD_FID: + mjd = atod(bp) - MJD0; + set_t0 (&now); + new = 1; + break; + + case UD_FID: + { + double day, newmjd0; + int month, year; + + mjd_cal (mjd, &month, &day, &year); /* init with now */ + f_sscandate (bp, pref_get(PREF_DATE_FORMAT), + &month, &day, &year); + cal_mjd (month, day, year, &newmjd0); + + /* if don't see a decimal retain current hours */ + if (strchr(bp,'.')) + mjd = newmjd0; + else + mjd = newmjd0 + mjd_hr(mjd)/24.0; + } + set_t0 (&now); + new = 1; + break; + + case UT_FID: + f_scansexa (bp, &tmp); + mjd = mjd_day(mjd) + tmp/24.0; + set_t0 (&now); + new = 1; + break; + + case LD_FID: + { + double day, newlmjd0; + int month, year; + + mjd_cal (mjd-tz/24.0, &month, &day, &year); /* now */ + f_sscandate (bp, pref_get(PREF_DATE_FORMAT), + &month, &day, &year); + cal_mjd (month, day, year, &newlmjd0); + + /* if don't see a decimal retain current hours */ + if (strchr(bp,'.')) + mjd = newlmjd0; + else + mjd = newlmjd0 + mjd_hr(mjd-tz/24.0)/24.0; + mjd += tz/24.0; + } + set_t0 (&now); + new = 1; + break; + + case LT_FID: + f_scansexa (bp, &tmp); + mjd = mjd_day(mjd-tz/24.0) + (tmp + tz)/24.0; + set_t0 (&now); + new = 1; + break; + + case DT_FID: + if (strchr (bp, 'A') || strchr (bp, 'a')) { + DeltaT = deltat(mjd); + autodt = 1; + } else { + DeltaT = atod (bp); + autodt = 0; + } + new = 1; + break; + + case LST_FID: + { + double lst, gst, utc; + + /* read goal */ + f_scansexa (bp, &lst); + + /* compute new mjd based on basic transform */ + gst = lst - radhr(lng); /* convert to gst */ + range (&gst, 24.0); + gst_utc (mjd_day(mjd), gst, &utc); + mjd = mjd_day(mjd) + utc/24.0; + + /* repeat to add apparent refinements within now_lst() */ + now_lst (&now, &tmp); + tmp -= lst; + if (tmp < -12) tmp += 24; + if (tmp > 12) tmp -= 24; + mjd -= tmp*(SIDRATE/24.0); + } + set_t0 (&now); + new = 1; + break; + + case TZN_FID: + (void) strncpy (tznm, bp, sizeof(tznm)-1); + autotz = 0; + new = 1; + break; + + case TZONE_FID: + /* TZONE_FID */ + f_scansexa (bp, &tz); + autotz = 0; + new = 1; + break; + + case SITE_FID: + new = sites_search (bp); + if (new >= 0) { + Site *sip; + (void) sites_get_list (&sip); + mm_setsite(&sip[new], 0); + new = 1; + } else { + /* just change name */ + mm_sitename (bp); + new = 0; + } + break; + + case LONG_FID: + f_scansexa (bp, &tmp); + lng = degrad (-tmp); /* want <0 radians west */ + mm_setll (lat, lng, 0); + new = 1; + break; + + case LAT_FID: + f_scansexa (bp, &tmp); + lat = degrad (tmp); + mm_setll (lat, lng, 0); + new = 1; + break; + + case ELEV_FID: + if (sscanf (bp, "%lf", &elev) == 1) { + if (pref_get(PREF_UNITS) == PREF_ENGLISH) + elev /= (ERAD*FTPM); /* ft to earth radii */ + else + elev /= ERAD; /* m to earth radii */ + new = 1; + } + break; + + case DIP_FID: + if (f_scansexa (bp, &tmp) == 0) { + if (tmp < 0) + xe_msg (1, "Twilight dip must be at least 0"); + else { + dip = degrad(tmp); + mm_twilight (); + } + } + break; + + case NSTEP_FID: + (void) sscanf (bp, "%d", &nstep); + print_nstep (); + break; + + case PAUSE_FID: + (void) sscanf (bp, "%lf", &tmp); + mspause = (int)(tmp*1000 + 0.5); + print_mspause (); + break; + + case TEMP_FID: + if (sscanf (bp, "%lf", &temp) == 1) { + if (pref_get(PREF_UNITS) == PREF_ENGLISH) + temp = 5./9.*(temp - 32.0); /* want degs C */ + if (temp < -100 || temp > 100) { + xe_msg (0, "NOTICE: very unusual temperature: %g C", temp); + } + new = 1; + } + break; + + case PRES_FID: + if (sscanf (bp, "%lf", &pressure) == 1) { + if (pref_get(PREF_UNITS) == PREF_ENGLISH) + pressure *= 33.86; /* want hPa */ + if (pressure < 0 || pressure > 4000) { + xe_msg (0, + "NOTICE: very unusual atmospheric pressure: %g hPa", + pressure); + } + new = 1; + } + break; + + case EPOCH_FID: + if (bp[0] == 'e' || bp[0] == 'E' || bp[0] == 'o' || bp[0] == 'O') + epoch = EOD; + else { + double e; + e = atod(bp); + year_mjd (e, &epoch); + } + new = 1; + break; + + case STPSZ_FID: + mm_set_step_code (bp); + set_t0 (&now); + print_tminc(); + break; + + default: + printf ("chg_fld: unknown id: %d\n", fp->id); + abort(); + } + + return (new); +} + +/* user selected OK or APPLY to a prompt for field at fp (in userData). + * get his new value and use it. + */ +/* ARGSUSED */ +static void +prompt_ok_cb (w, client, call) +Widget w; /* PromptDialog "widget" */ +XtPointer client; +XtPointer call; +{ + XmSelectionBoxCallbackStruct *s = (XmSelectionBoxCallbackStruct *)call; + Field *fp; + char *text; + Widget apply_w; + + switch (s->reason) { + case XmCR_OK: + /* new value is in the text string */ + get_xmstring(w, XmNtextString, &text); + break; + case XmCR_APPLY: /* used for several special short cuts */ + /* new value is in the Apply button text string */ + apply_w = XmSelectionBoxGetChild (w, XmDIALOG_APPLY_BUTTON); + get_xmstring(apply_w, XmNlabelString, &text); + break; + default: + printf ("main prompt_ok_cb: unknown reason: %d\n", s->reason); + abort(); + } + + get_something (w, XmNuserData, (XtArgVal)&fp); + + if (chg_fld (text, fp)) { + if (autotz) + (void) tz_fromsys (&now); + if (autodt) + DeltaT = deltat(mjd); + mm_now (1); + mm_newcir(1); + newcir = 1; + } + + XtFree (text); + + /* unmanage the prompt dialog in all cases. + * (autoUnmanage just does it for the Ok and Cancal buttons). + */ + XtUnmanageChild (w); +} + +/* put up a prompt dialog near the cursor to ask about fp. + * use the Apply button for special shortcuts. + * put up a special one for STPSZ_FID and SITE_FID. + */ +static void +prompt (fp) +Field *fp; +{ + static Widget prompt_w, steps_w; + Widget w, aw; + + /* sites input is handled all separately */ + if (fp->id == SITE_FID) { + sites_manage(); + return; + } + + if (!prompt_w) + prompt_w = create_prompt_w (&steps_w); + + /* set the prompt string */ + set_xmstring (prompt_w, XmNselectionLabelString, fp->prompt); + + /* we don't use the Apply button except for some special shortcuts. + * for those, we manage it again. + */ + aw = XmSelectionBoxGetChild (prompt_w, XmDIALOG_APPLY_BUTTON); + XtUnmanageChild (aw); + + /* similarly, we assume for now we won't be needing steps_w */ + XtUnmanageChild (steps_w); + + /* preload the text string -- skip any leading blanks */ + if (pref_get (PREF_PRE_FILL) == PREF_PREFILL) { + char *txt0, *txt; + + get_xmstring (fp->pb_w, XmNlabelString, &txt0); + for (txt = txt0; *txt == ' '; txt++) + continue; + set_xmstring (prompt_w, XmNtextString, txt); + XtFree (txt0); + } else + set_xmstring (prompt_w, XmNtextString, ""); + + /* save fp in userData for the callbacks to get at */ + set_something (prompt_w, XmNuserData, (XtArgVal)fp); + + + /* set up for the special shortcuts */ + switch (fp->id) { + case LT_FID: + XtManageChild (aw); + set_xmstring (prompt_w, XmNapplyLabelString, "00:00:00"); + break; + case UT_FID: + XtManageChild (aw); + set_xmstring (prompt_w, XmNapplyLabelString, "00:00:00"); + break; + case DT_FID: + if (autodt) { + if (pref_get (PREF_PRE_FILL) == PREF_PREFILL) { + /* strip "Auto" from prompt */ + char *txt0, *txt; + + get_xmstring (fp->pb_w, XmNlabelString, &txt0); + for (txt = txt0; *txt && !isdigit(*txt); txt++) + continue; + set_xmstring (prompt_w, XmNtextString, txt); + XtFree (txt0); + } + } else { + XtManageChild (aw); + set_xmstring (prompt_w, XmNapplyLabelString, "Auto"); + } + break; + case STPSZ_FID: + XtManageChild (steps_w); + break; + case EPOCH_FID: + XtManageChild (aw); + if (epoch == EOD) + set_xmstring (prompt_w, XmNapplyLabelString, "2000"); + else + set_xmstring (prompt_w, XmNapplyLabelString, "Of Date"); + break; + case NSTEP_FID: + XtManageChild (aw); + if (nstep >= 25) + set_xmstring (prompt_w, XmNapplyLabelString, "1"); + else + set_xmstring (prompt_w, XmNapplyLabelString, "1000000"); + break; + case PAUSE_FID: + XtManageChild (aw); + if (mspause == 0) + set_xmstring (prompt_w, XmNapplyLabelString, "30"); + else + set_xmstring (prompt_w, XmNapplyLabelString, "0"); + break; + case PRES_FID: + if (pressure > 0) { + XtManageChild (aw); + set_xmstring (prompt_w, XmNapplyLabelString, + "0\n(No refraction)"); + } + break; + } + + XtManageChild (prompt_w); + +#if XmVersion >= 1001 + w = XmSelectionBoxGetChild (prompt_w, XmDIALOG_TEXT); + XmProcessTraversal (w, XmTRAVERSE_CURRENT); + XmProcessTraversal (w, XmTRAVERSE_CURRENT); /* yes, twice!! */ +#endif +} + +static Widget +create_prompt_w(wp) +Widget *wp; +{ + XmString title; + Widget prompt_w; + Arg args[20]; + Widget w; + int i; + int n; + + /* make the general dialog */ + title = XmStringCreateLtoR ("xephem Main menu Prompt", + XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg(args[n], XmNdialogTitle, title); n++; + XtSetArg(args[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; + XtSetArg(args[n], XmNmarginWidth, 10); n++; + XtSetArg(args[n], XmNmarginHeight, 10); n++; + prompt_w = XmCreatePromptDialog(toplevel_w, "MainPrompt", args, n); + XtAddCallback (prompt_w, XmNmapCallback, prompt_map_cb, NULL); + XtAddCallback (prompt_w, XmNokCallback, prompt_ok_cb, NULL); + XtAddCallback (prompt_w, XmNapplyCallback, prompt_ok_cb, NULL); + XmStringFree (title); + + /* we don't use the Help button at all. */ + w = XmSelectionBoxGetChild (prompt_w, XmDIALOG_HELP_BUTTON); + XtUnmanageChild (w); + + /* add the special row/column of step controls. + * this is only managed for the STPSZ_FID prompt. + */ + n = 0; + XtSetArg (args[n], XmNnumColumns, 3); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNadjustLast, False); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + *wp = XmCreateRowColumn (prompt_w, "MMStepRC", args, n); + + for (i = 0; i < XtNumber(step_options); i++) { + StepOption *sop = &step_options[i]; + + n = 0; + w = XmCreatePushButton (*wp, "MMStepPB", args, n); + set_xmstring (w, XmNlabelString, sop->title); + XtAddCallback (w, XmNactivateCallback, mm_step_cb, (XtPointer)sop); + wtip (w, sop->tip); + XtManageChild (w); + } + + return (prompt_w); +} + +/* go through the buffer bp and set the mm_step_option code. + * if the code is one that defines a fixed tminc, set it too. + * if bp doesn't match any of the step options, we assume it's a + * literal time value. + * N.B. continue to support RTC and rtc as code strings for compatability. + */ +static void +mm_set_step_code (bp) +char *bp; +{ + int i; + + for (i = 0; i < XtNumber(step_options); i++) { + StepOption *sop = &step_options[i]; + if (strcmp (sop->title, bp) == 0) { + mm_step_option = sop; + if (sop->stepcode == FIXED_SS) + tminc = sop->inc; + return; + } + } + + if (bp[0] == 'r' || bp[0] == 'R') + mm_step_option = RTC_SS_OPTION; + else { + mm_step_option = NULL; + if (strpbrk(bp, "dD")) + tminc = atod(bp) * 24.0; + else if (strpbrk(bp, "sS")) + tminc = atod(bp) * 24.0 * SIDRATE; + else if (strpbrk(bp, "yY")) + tminc = atod(bp) * 365.2425 * 24.0; /* mean gregorian */ + else + f_scansexa (bp, &tminc); + } +} + +/* draw the various marker pixmaps */ +static void +mm_pms() +{ + Obj *op; + Pixmap moonpm; + + /* dst */ + set_something (dst_w, XmNlabelPixmap, autotz ? dst_pm : empty_pm); + + /* moon up/phase */ + op = db_basic(MOON); + db_update (op); + moonpm = moon_pm[((int)((op->s_elong+202)/45))%NMOONBM]; + set_something (moon_w, XmNlabelPixmap, op->s_alt>0 ? moonpm : empty_pm); + + /* sun up */ + op = db_basic(SUN); + db_update (op); + set_something (sun_w, XmNlabelPixmap, op->s_alt>0 ? sun_pm : empty_pm); +} + +/* print all the time/date/where related stuff: the Now structure. + * print in a nice order, based on the field locations, as much as possible. + */ +static void +mm_now (all) +int all; +{ + double lmjd = mjd - tz/24.0; + double jd = mjd + MJD0; + char buf[32]; + double tmp; + + + mm_pms(); + f_string (fw(TZN_FID), tznm); + f_sexa (fw(TZONE_FID), tz, 3, 3600); + f_date (fw(LD_FID), mjd_day(lmjd)); + f_time (fw(LT_FID), mjd_hr(lmjd)); + if (autodt) + f_double (fw(DT_FID), "(Auto) %6.2f", DeltaT); + else + f_double (fw(DT_FID), "%.2f", DeltaT); + + f_time (fw(UT_FID), mjd_hr(mjd)); + f_date (fw(UD_FID), mjd_day(mjd)); + + f_double (fw(JD_FID), "%13.5f", jd); + + now_lst (&now, &tmp); + f_time (fw(LST_FID), tmp); + + f_showit(fw(SITE_FID), msitename ? absitename : nosite); + f_dms_angle (fw(LAT_FID), lat); + f_dms_angle (fw(LONG_FID), -lng); /* + west */ + print_magdecl (); + if (pref_get(PREF_UNITS) == PREF_ENGLISH) { + tmp = elev * (ERAD*FTPM); /* want ft, not earth radii*/ + f_double (fw(ELEV_FID), "%7.1f ft", tmp); + } else { + tmp = elev * ERAD; /* want m, not earth radii */ + f_double (fw(ELEV_FID), "%8.1f m", tmp); + } + + if (all) { + + tmp = temp; + if (pref_get(PREF_UNITS) == PREF_ENGLISH) { + tmp = 9.*temp/5. + 32.0; /* C -> F */ + strcpy (buf, "%5.1f F"); + } else { + strcpy (buf, "%5.1f C"); + } + f_double (fw(TEMP_FID), buf, tmp); + + tmp = pressure; + if (pref_get(PREF_UNITS) == PREF_ENGLISH) { + tmp /= 33.86; /* want to see in. Hg, not hPa */ + f_double (fw(PRES_FID), "%5.2f in", tmp); + } else { + f_double (fw(PRES_FID), "%5.0f hPa", tmp); + } + + if (epoch == EOD) + f_string (fw(EPOCH_FID), "Of Date"); + else { + mjd_year (epoch, &tmp); + f_double (fw(EPOCH_FID), "%7.1f", tmp); + } + } + + calm_set (&now); +} + +/* display dawn/dusk/length-of-night times. + * sneak in LST at midnight too since it too changes daily. + */ +/* ARGSUSED */ +static void +mm_twilight () +{ + static char nope[] = "-----"; + double dusk, dawn; + Now midnight; + int status; + + twilight_cir (&now, dip, &dawn, &dusk, &status); + + /* twilight_cir gives UTC times; switch to LOCAL if prefered */ + if (pref_get(PREF_ZONE) == PREF_LOCALTZ) { + dawn -= now.n_tz/24.0; + dusk -= now.n_tz/24.0; + } + + /* print what we can of dusk and dawn */ + if (status & (RS_NORISE|RS_ERROR|RS_CIRCUMPOLAR|RS_NEVERUP)) + f_string (fw(DAWN_FID), nope); + else + f_mtime (fw(DAWN_FID), mjd_hr(dawn)); + if (status & (RS_NOSET|RS_ERROR|RS_CIRCUMPOLAR|RS_NEVERUP)) + f_string (fw(DUSK_FID), nope); + else + f_mtime (fw(DUSK_FID), mjd_hr(dusk)); + + /* length of night */ + if (status & RS_NEVERUP) + f_mtime (fw(LON_FID), 24.0); + else if (status & RS_CIRCUMPOLAR) + f_mtime (fw(LON_FID), 0.0); + else if (status & RS_ERROR) + f_string (fw(LON_FID), nope); + else if ((status & RS_NORISE) && (status & RS_NOSET)) + f_string (fw(LON_FID), nope); + else { + /* at least one of dusk and dawn. + * if only rise, assume set at prior midnight. + * if only set, assume rises at next midnight. + * N.B. dawn+dusk are mjd + */ + double tmp; + if (status & RS_NORISE) + dawn = .5; + else if (status & RS_NOSET) + dusk = -.5; + tmp = (dawn - dusk)*24.0; + range (&tmp, 24.0); + f_mtime (fw(LON_FID), tmp); + } + + /* dip */ + f_double (fw(DIP_FID), "%g°", raddeg(dip)); + + /* LST at midnight tonight */ + midnight = now; + midnight.n_mjd = mjd_day(mjd+1-tz/24.0) + tz/24.0; + now_lst (&midnight, &dusk); + f_time (fw(LSTM_FID), dusk); + + /* also goose glance */ + ng_update (&now, 1); +} + +static void +mm_newcir (y) +int y; +{ + static int flag; /* 0:erase/stop 1:draw/pause 2:erase/pause */ + + if (y) { + if (!flag) { + flag = 1; + (void) XtAppAddTimeOut (xe_app, 1, mm_newcir_cb, + (XtPointer)&flag); + } + } else { + /* just setting flag to zero will stop the flashing soon */ + flag = 0; + } +} + +/* callback from the timer that makes NEW CIRCUMSTANCES blink. + * client is a pointer to static state variable. + */ +/* ARGSUSED */ +static void +mm_newcir_cb (client, id) +XtPointer client; +XtIntervalId *id; +{ + int *flag = (int *)client; + Pixel p; + + switch (*flag) { + case 0: /* stop -- make text invisible */ + get_something (newcir_w, XmNbackground, (XtArgVal)&p); + set_something (newcir_w, XmNforeground, (XtArgVal)p); + break; + case 1: /* make the message visible and repeat */ + get_something (status_w, XmNforeground, (XtArgVal)&p); + set_something (newcir_w, XmNforeground, (XtArgVal)p); + *flag = 2; /* toggle active state */ + (void) XtAppAddTimeOut (xe_app, NC_BLINK_DELAY, mm_newcir_cb, + (XtPointer)client); + break; + case 2: /* make the message invisible and repeat */ + get_something (newcir_w, XmNbackground, (XtArgVal)&p); + set_something (newcir_w, XmNforeground, (XtArgVal)p); + *flag = 1; /* toggle active state */ + (void) XtAppAddTimeOut (xe_app, NC_BLINK_DELAY, mm_newcir_cb, + (XtPointer)client); + break; + } +} + +/* ask for name of file to read for external input */ +static void +ext_fileask() +{ + if (!ext_w) + ext_create_w(); + XtManageChild (ext_w); +} + +/* create the external file input name prompt */ +static void +ext_create_w() +{ + Arg args[20]; + Widget t_w; + int n; + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + ext_w = XmCreatePromptDialog (toplevel_w, "ExtFile", args, n); + set_something (ext_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (ext_w, XmNdialogTitle, "xephem External File Setup"); + set_xmstring (ext_w, XmNselectionLabelString, "File name:"); + t_w = XmSelectionBoxGetChild (ext_w, XmDIALOG_TEXT); + defaultTextFN (t_w, 1, getPrivateDir(), "external.txt"); + sr_reg (t_w, NULL, maincategory, 1); + XtAddCallback (ext_w, XmNokCallback, ext_ok_cb, NULL); + XtAddCallback (ext_w, XmNhelpCallback, ext_help_cb, NULL); + XtAddCallback (ext_w, XmNmapCallback, prompt_map_cb, NULL); +} + +/* read the next entry from ext_fp. + * if find one, set Now fields and return 0. + * if can't find any entries, return -1 with ext_fp definitely closed. + */ +static int +ext_readnext() +{ + double rjd, rlat, rlng; + char buf[1024]; + + if (!ext_fp) + return (-1); + + while (fgets (buf, sizeof(buf), ext_fp)) { + if (sscanf (buf, "%lf %lf %lf", &rjd, &rlat, &rlng) == 3) { + /* update the new time/lat/long */ + lat = rlat; + lng = -rlng; /* we want <0 radians west */ + mjd = rjd - MJD0; + mm_setll (lat, lng, 0); + set_t0 (&now); + return (0); + } + } + + fclose (ext_fp); + ext_fp = NULL; + return (-1); +} + +/* called when the Ok button is hit in the external file input prompt */ +/* ARGSUSED */ +static void +ext_ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *name; + + /* get the file name */ + get_xmstring(w, XmNtextString, &name); + if (strlen(name) == 0) { + xe_msg (1, "Please enter the name of an external input file."); + XtFree (name); + return; + } + + /* open it */ + ext_fp = fopenh (name, "r"); + if (!ext_fp) { + xe_msg (1, "%s: %s", name, syserrstr()); + XtFree (name); + return; + } + + /* read one entry just to test */ + if (ext_readnext() < 0) { + xe_msg (1, "%s: contains no valid entries", name); + XtFree (name); + return; + } + + /* rewind to start from beginning */ + rewind (ext_fp); + + /* go */ + print_extrunning(); + nstep = MANYSTEPS; + mm_go(0); +} + +/* stop using an external file, if any */ +static void +ext_stop() +{ + if (ext_fp) { + fclose (ext_fp); + ext_fp = NULL; + } +} + +/* called when the Help button is hit in the external file input prompt */ +/* ARGSUSED */ +static void +ext_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +static char *hlp[] = { +"XEphem runs from entries in this file.", +"Format:", +" UTCMM/DD/YY UTCHH:MM:SS LATDD:MM:SS LONGDD:MM:SS", +"Longitude is +W." +}; + hlp_dialog ("ExternalInput", hlp, XtNumber(hlp)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: mainmenu.c,v $ $Date: 2014/07/15 02:11:33 $ $Revision: 1.91 $ $Name: $"}; diff --git a/GUI/xephem/map.h b/GUI/xephem/map.h new file mode 100644 index 0000000..a819bf0 --- /dev/null +++ b/GUI/xephem/map.h @@ -0,0 +1,22 @@ +#ifndef _MAP_H +#define _MAP_H + +/* these two structs are used to form lists of polygon vertices and lists + * of such lists. they are used to form maps. + */ + +typedef struct { + short lg, lt; /* longitude and latitude, degs (*100 for earth) */ +} MCoord; + +typedef struct { + char *rname; /* region name */ + MCoord *mcp; /* list of MCoords */ + int nmcp; /* number of entries in mcp[] */ +} MRegion; + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: map.h,v $ $Date: 2003/03/17 07:26:21 $ $Revision: 1.2 $ $Name: $ + */ + +#endif /* _MAP_H */ diff --git a/GUI/xephem/marsmenu.c b/GUI/xephem/marsmenu.c new file mode 100644 index 0000000..c3b7efa --- /dev/null +++ b/GUI/xephem/marsmenu.c @@ -0,0 +1,2993 @@ +/* code to manage the stuff on the mars display. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +/* shared by marsmmenu.c */ +char marscategory[] = "Mars -- View and Info"; /* Save category */ + +#define POLE_RA degrad(317.61) +#define POLE_DEC degrad(52.85) + +static void m_popup (XEvent *ep); +static void m_create_popup (void); + +static void m_create_shell (void); +static void m_create_msform (void); +static void m_create_mfform (void); +static void m_set_buttons (int whether); +static void m_mstats_close_cb (Widget w, XtPointer client, XtPointer call); +static void m_mstats_cb (Widget w, XtPointer client, XtPointer call); +static void m_features_ctrl_cb (Widget w, XtPointer client,XtPointer call); +static void m_features_cb (Widget w, XtPointer client, XtPointer call); +static void m_feasel_cb (Widget w, XtPointer client, XtPointer call); +static void m_moons_cb (Widget w, XtPointer client, XtPointer call); +static void m_selection_cb (Widget w, XtPointer client, XtPointer call); +static void m_cml_cb (Widget w, XtPointer client, XtPointer call); +static void m_slt_cb (Widget w, XtPointer client, XtPointer call); +static void m_see_cb (Widget w, XtPointer client, XtPointer call); +static void m_apply_cb (Widget w, XtPointer client, XtPointer call); +static void m_aim_cb (Widget w, XtPointer client, XtPointer call); +static void m_print_cb (Widget w, XtPointer client, XtPointer call); +static void m_print (void); +static void m_ps_annotate (void); +static void m_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void m_close_cb (Widget w, XtPointer client, XtPointer call); +static void m_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void m_list_cb (Widget w, XtPointer client, XtPointer call); +static void m_init_gcs (void); +static void m_help_cb (Widget w, XtPointer client, XtPointer call); +static void m_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void m_option_cb (Widget w, XtPointer client, XtPointer call); +static void m_exp_cb (Widget w, XtPointer client, XtPointer call); +static void m_pointer_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static void m_redraw (int newim); +static void m_refresh (XExposeEvent *ep); +static void m_stats (void); +static void m_drawpm (void); +static void m_setsize(void); +static void m_drFeatures (void); +static void mxim_setup (void); +static void m_orientation (void); +static void m_sizecal (void); +static void m_grid (void); +static void m_reportloc (int x, int y); +static void m_eqproject (Now *np, double ra, double dec, int *xp, int *yp); +static void m_setselected(void); +static void m_setnewpos (double l, double L); +static void mars_cml (Now *np, double *cmlp, double *sltp, double *pap); +static void swap_colors (void); +static int mxim_create (void); +static int m_readmap (void); +static int m_readFeatures (void); +static int xy2ll (int x, int y, double *ltp, double *lgp); +static int ll2xy (double l, double L, int *xp, int *yp); +static int mfsa_qsort (const void *p1, const void *p2); +static int mf_qsort (const void *p1, const void *p2); +static int m_ano (double *ixp, double *iyp, int *xp, int *yp, int w2x, int arg); + +/* the map image, read into mimage, is a IMHx(2*IMH) 8bit file of relief in + * square degree steps starting at longitude LONG0 on the left moving to the + * west, south latitude on the bottom. use it to build a window winszXwinsz of + * the visible face in m_xim. + */ +#define XEVERS 5 /* required version in header */ +#define LONG0 0 /* long of left side, degs */ +#define IMH 1440 /* n rows in file map */ +#define IMW (IMH*2) /* n columns in file map */ +#define WINR (winsz/2) /* handy window radius */ +#define REDCOLORS 50 /* n red ramp colors in map */ +#define BORD 80 /* extra drawing area border for labels/stars */ +#define LGAP 20 /* gap between NSEW labels and image edge */ +#define FMAG 16 /* faintest mag of sky background object */ +#define MAXR 10 /* max gap when picking sky objects, pixels */ +#define GSP degrad(15.0) /* grid spacing */ +#define FSP (GSP/5.) /* fine spacing */ +#define XRAD 5 /* radius of central mark, pixels */ +#define LANDSR 3 /* radius of landing site symbol */ +#define MARSD 6776. /* mars diam, km */ + +static unsigned char *mimage; /* malloced array of raw mars image */ +static Pixel mcolors[REDCOLORS];/* color-scale ramp for drawing image */ +static Pixel mbg; /* background color for image */ +static int mdepth; /* depth of image, in bits */ +static int mbpp; /* bits per pixel in image: 1, 8, 16 or 32 */ +static int winsz; /* n rows&cols in X window image */ +static XImage *m_xim; /* XImage of mars now at current size */ +static double m_cml; /* current central meridian longitude, rads */ +static double m_slt; /* current subearth latitude, rads */ +static double m_sslt, m_cslt; /* " handy sin/cos */ +static double m_pa; /* current N pole position angle, rads */ +static double m_spa, m_cpa; /* " handy sin/cos */ +static int m_seeing; /* seeing, tenths of arc seconds */ +static Obj *marsop; /* current mars info */ +static double cm_dec, sm_dec; /* handy cos and sin of mars' dec */ + +/* main's widgets */ +static Widget mshell_w; /* main mars shell */ +static Widget msw_w; /* main scrolled window */ +static Widget mda_w; /* image view DrawingArea */ +static Pixmap m_pm; /* image view staging pixmap */ +static Widget dt_w; /* main date/time stamp widget */ + +/* "More info" stats widgets */ +static Widget msform_w; /* statistics form dialog */ +static Widget sdt_w; /* statistics date/time stamp widget */ +static Widget lat_w, lng_w; /* lat/long under cursor */ +static Widget cml_w; /* central merdian longitude PB */ +static Widget cmls_w; /* central merdian longitude scale */ +static Widget slt_w; /* subearth latitude PB */ +static Widget slts_w; /* subearth latitude scale */ +static Widget see_w; /* seeing label */ +static Widget sees_w; /* seeing scale */ +static Widget apply_w; /* the Apply PB -- we fiddle with sensitive */ +static int fakepos; /* set when cml/slt/pa etc are not true */ + +/* surface object's widgets */ +static Widget pu_w; /* popup */ +static Widget pu_name_w; /* popup name label */ +static Widget pu_type_w; /* popup type label */ +static Widget pu_size_w; /* popup size label */ +static Widget pu_l_w; /* popup lat label */ +static Widget pu_L_w; /* popup Long label */ +static Widget pu_aim_w; /* popup Point PB */ +static double pu_l; /* latitude if Point PB is activated */ +static double pu_L; /* longitude if Point PB is activated */ + +static GC m_fgc, m_bgc, m_agc; /* various GCs */ +static XFontStruct *m_fsp; /* label font */ + +static int m_selecting; /* set while our fields are being selected */ +static char marsfcategory[] = "Mars -- Features"; /* Save category */ + +static XImage *glass_xim; /* glass XImage -- 0 means new or can't */ +static GC glassGC; /* GC for glass border */ + +#define GLASSSZ 50 /* mag glass width and heigth, pixels */ +#define GLASSMAG 2 /* mag glass factor (may be any integer > 0) */ + +/* options list */ +typedef enum { + HALFSIZ_OPT, GRID_OPT, FLIPLR_OPT, FLIPTB_OPT, + N_OPT +} Option; +static int option[N_OPT]; + +/* Image to X Windows coord converter macros, including flipping. + * image coords have 0 in the center +x/right +y/down of the m_xim, + * X Windows coords have upper left +x/right +y/down of the mda_w. + */ +#define IX2XX(x) (BORD + WINR + (option[FLIPLR_OPT] ? -(x) : (x))) +#define IY2XY(y) (BORD + WINR + (option[FLIPTB_OPT] ? -(y) : (y))) +#define XX2IX(x) (((x) - (BORD + WINR)) * (option[FLIPLR_OPT] ? -1 : 1)) +#define XY2IY(y) (((y) - (BORD + WINR)) * (option[FLIPTB_OPT] ? -1 : 1)) + +/* manage the feature labeling */ +typedef enum { + MFC_OK, + MFC_APPLY, + MFC_ALL, + MFC_NONE, + MFC_TOGGLE, + MFC_CLOSE, + MFC_HELP +} MFCtrl; /* feature controls */ +static Widget mfform_w; /* feature type form dialog */ +static Widget flist_w; /* feature scrolled list */ +typedef struct { + Widget tb; /* selection toggle button */ + int set; /* whether currently set */ + char type[128]; /* type */ + int n; /* count */ +} MFSel; +static MFSel *mfsa; /* malloced array of MFSel's */ +static int nmfsa; /* n entries in mfsp[] */ +typedef struct { + char name[32]; /* name */ + double lt, lg; /* lat/long, rads +N/+W */ + double dia; /* dia or largest dimenstion, km */ + int mfsai; /* feature type index into mfsa */ +} MFeature; +static MFeature *mf; /* malloced list of features */ +static int nmf; /* entries in mf[] */ + +/* called when the mars view is activated via the main menu pulldown. + * if first time, build everything, else just toggle whether we are mapped. + * allow for retrying to read the image file each time until find it. + */ +void +mars_manage () +{ + if (!mshell_w) { + /* one-time-only work */ + + /* all for nothing without the file and features db. */ + if (m_readmap() < 0 || m_readFeatures() < 0) + return; + + /* build dialogs */ + m_create_shell(); + m_create_msform(); + m_create_mfform(); + + /* establish depth, colors and bits per pixel */ + get_something (mda_w, XmNdepth, (XtArgVal)&mdepth); + m_init_gcs(); + mbpp = (mdepth==1) ? 1 : (mdepth>=17 ? 32 : (mdepth >= 9 ? 16 : 8)); + + /* establish initial mars circumstances */ + m_stats(); + m_setsize(); + } + + XtPopup (mshell_w, XtGrabNone); + set_something (mshell_w, XmNiconic, (XtArgVal)False); + centerScrollBars (msw_w); + + /* register we are now up */ + setXRes (mars_viewupres(), "1"); +} + +/* commanded from main to update with a new set of circumstances */ +void +mars_update (np, how_much) +Now *np; +int how_much; +{ + if (!mshell_w) + return; + if (!isUp(mshell_w) && !any_ison()) + return; + + /* new mars stats */ + m_stats(); + + /* new image */ + m_redraw(1); +} + +/* called when basic resources change. + * we also take care of mars moons. + * rebuild and redraw. + */ +void +mars_newres() +{ + marsm_newres(); + if (!mshell_w) + return; + m_init_gcs(); + mars_update (mm_get_now(), 1); +} + +int +mars_ison() +{ + return (isUp(mshell_w)); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +mars_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + m_selecting++; + else if (m_selecting > 0) + --m_selecting; + + if (mars_ison()) { + if ((whether && m_selecting == 1) /* first one to want on */ + || (!whether && m_selecting == 0) /* last one to want off */) + m_set_buttons (whether); + } +} + +/* called to put up or remove the watch cursor. */ +void +mars_cursor (c) +Cursor c; +{ + Window win; + + if (mshell_w && (win = XtWindow(mshell_w)) != 0) { + Display *dsp = XtDisplay(mshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (msform_w && (win = XtWindow(msform_w)) != 0) { + Display *dsp = XtDisplay(msform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (mfform_w && (win = XtWindow(mfform_w)) != 0) { + Display *dsp = XtDisplay(mfform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +mars_viewupres() +{ + return ("MarsViewUp"); +} + +static void +m_create_shell() +{ + typedef struct { + Option o; /* which option */ + char *name; /* name of TB */ + char *title; /* title string of option */ + char *tip; /* widget tip */ + } OpSetup; + static OpSetup ops[] = { + {HALFSIZ_OPT, "HalfSize", "Half size", + "Display map at half size"}, + {FLIPTB_OPT, "FlipTB", "Flip T/B", + "Flip the map top-to-bottom"}, + {FLIPLR_OPT, "FlipLR", "Flip L/R", + "Flip the map left-to-right"}, + {GRID_OPT, "Grid", "Grid", + "Overlay a 15 degree grid and mark Sub-Earth location"}, + }; + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Mars"}, + {"on Mouse...", "Mars_mouse"}, + {"on Control...", "Mars_control"}, + {"on View...", "Mars_view"}, + }; + Widget mb_w, pd_w, cb_w; + Widget mform_w; + Widget w; + unsigned long mask; + XmString str; + Arg args[20]; + int i; + int n; + + /* create master form in its shell */ + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Mars view"); n++; + XtSetArg (args[n], XmNiconName, "Mars"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + mshell_w = XtCreatePopupShell ("Mars", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (mshell_w); + set_something (mshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (mshell_w, XmNpopdownCallback, m_popdown_cb, 0); + sr_reg (mshell_w, "XEphem*Mars.width", marscategory, 0); + sr_reg (mshell_w, "XEphem*Mars.height", marscategory, 0); + sr_reg (mshell_w, "XEphem*Mars.x", marscategory, 0); + sr_reg (mshell_w, "XEphem*Mars.y", marscategory, 0); + sr_reg (NULL, mars_viewupres(), marscategory, 0); + + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + mform_w = XmCreateForm (mshell_w, "MarsForm", args, n); + XtAddCallback (mform_w, XmNhelpCallback, m_help_cb, 0); + XtManageChild (mform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (mform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* the "Print" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "MPrint", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, m_print_cb, 0); + wtip (w, "Print the current Mars map"); + XtManageChild (w); + + /* the "Annot" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "MAnn", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* the "movie loop" push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "MML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, m_mloop_cb, 0); + wtip (w, "Add this scene to the movie loop"); + XtManageChild (w); + + /* add a separator */ + n = 0; + w = XmCreateSeparator (pd_w, "CtS", args, n); + XtManageChild (w); + + /* add the close button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, m_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + /* add options */ + + for (i = 0; i < XtNumber(ops); i++) { + OpSetup *osp = &ops[i]; + Option o = osp->o; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (pd_w, osp->name, args, n); + XtAddCallback(w, XmNvalueChangedCallback, m_option_cb, + (XtPointer)o); + set_xmstring (w, XmNlabelString, osp->title); + option[o] = XmToggleButtonGetState (w); + if (osp->tip) + wtip (w, osp->tip); + XtManageChild (w); + sr_reg (w, NULL, marscategory, 1); + } + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the Feature control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Features", args, n); + set_xmstring (w, XmNlabelString, "Features..."); + XtAddCallback (w, XmNactivateCallback, m_features_cb, NULL); + wtip (w, "Display labeled features"); + XtManageChild (w); + + /* add the More Info control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Stats", args, n); + set_xmstring (w, XmNlabelString, "More info..."); + XtAddCallback (w, XmNactivateCallback, m_mstats_cb, NULL); + wtip (w, "Display additional information and controls"); + XtManageChild (w); + + /* add the Moons control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Moons", args, n); + set_xmstring (w, XmNlabelString, "Moon view..."); + XtAddCallback (w, XmNactivateCallback, m_moons_cb, NULL); + wtip (w, "Display schematic view of Mars and its moons"); + XtManageChild (w); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, m_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make a label for the date stamp */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + dt_w = XmCreateLabel (mform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* sets initial size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make a drawing area in a scrolled window for the image view */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + XtSetArg (args[n], XmNvisualPolicy, XmVARIABLE); n++; + msw_w = XmCreateScrolledWindow (mform_w, "MarsSW", args, n); + XtManageChild (msw_w); + + /* size gets changed to match the display later */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + mda_w = XmCreateDrawingArea (msw_w, "MarsMap", args, n); + XtAddCallback (mda_w, XmNexposeCallback, m_exp_cb, NULL); + mask = Button1MotionMask | ButtonPressMask | ButtonReleaseMask | + PointerMotionHintMask; + XtAddEventHandler (mda_w, mask, False, m_pointer_eh, 0); + XtManageChild (mda_w); + + /* SW assumes work is its child but just to be tidy about it .. */ + set_something (msw_w, XmNworkWindow, (XtArgVal)mda_w); + + /* match SW background to DA */ + get_something (msw_w, XmNclipWindow, (XtArgVal)&w); + if (w) { + Pixel p; + get_something (mda_w, XmNbackground, (XtArgVal)&p); + set_something (w, XmNbackground, (XtArgVal)p); + } +} + +/* create the "more info" stats dialog */ +static void +m_create_msform() +{ + typedef struct { + char *label; + Widget *wp; + char *tip; + } DItem; + static DItem citems[] = { + {"Under Cursor:", NULL, NULL}, + {"Latitude +N:", &lat_w, "Martian Latitude under cursor"}, + {"Longitude +W:", &lng_w, "Martian Longitude under cursor"}, + }; + Widget rc_w; + Widget sep_w; + Widget f_w; + Widget w; + char str[32]; + Arg args[20]; + int n; + int i; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + msform_w = XmCreateFormDialog (mshell_w, "MarsStats", args, n); + set_something (msform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(msform_w), "XEphem*MarsStats.x", marscategory,0); + sr_reg (XtParent(msform_w), "XEphem*MarsStats.y", marscategory,0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Mars info"); n++; + XtSetValues (XtParent(msform_w), args, n); + + /* make a rowcolumn to hold the cursor tracking info */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, XtNumber(citems)); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + rc_w = XmCreateRowColumn (msform_w, "SRC", args, n); + XtManageChild (rc_w); + + for (i = 0; i < XtNumber(citems); i++) { + DItem *dp = &citems[i]; + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (rc_w, "CLbl", args, n); + set_xmstring (w, XmNlabelString, dp->label); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreateLabel (rc_w, "CVal", args, n); + set_xmstring (w, XmNlabelString, " "); + + if (dp->wp) + *(dp->wp) = w; + if (dp->tip) + wtip (w, dp->tip); + XtManageChild (w); + } + + + /* make a separator between the 2 data sets */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + sep_w = XmCreateSeparator (msform_w, "Sep1", args, n); + XtManageChild(sep_w); + + /* make the slt row */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (msform_w, "SLTL", args, n); + set_xmstring (w, XmNlabelString, "Sub Earth Lat (+N):"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Mars.SubLat"); n++; + slt_w = XmCreatePushButton (msform_w, "SLTVal", args, n); + XtAddCallback (slt_w, XmNactivateCallback, m_selection_cb, NULL); + wtip (slt_w, "Martian latitude at center of map"); + XtManageChild (slt_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, slt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNminimum, -90); n++; + XtSetArg (args[n], XmNmaximum, 90); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + slts_w = XmCreateScale (msform_w, "SLTS", args, n); + XtAddCallback (slts_w, XmNvalueChangedCallback, m_slt_cb, NULL); + XtAddCallback (slts_w, XmNdragCallback, m_slt_cb, NULL); + wtip (slts_w, "Set arbitrary central latitude, then use Apply"); + XtManageChild (slts_w); + + /* make the cml row */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, slts_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (msform_w, "CMLL", args, n); + set_xmstring (w, XmNlabelString, "Central M Long (+W):"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, slts_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Mars.CML"); n++; + cml_w = XmCreatePushButton (msform_w, "CMLVal", args, n); + XtAddCallback (cml_w, XmNactivateCallback, m_selection_cb, NULL); + wtip (cml_w, "Martian longitude at center of map"); + XtManageChild (cml_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, cml_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, 359); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + cmls_w = XmCreateScale (msform_w, "CMLS", args, n); + XtAddCallback (cmls_w, XmNvalueChangedCallback, m_cml_cb, NULL); + XtAddCallback (cmls_w, XmNdragCallback, m_cml_cb, NULL); + wtip (cmls_w, "Set arbitrary central longitude, then use Apply"); + XtManageChild (cmls_w); + + /* make the seeing row */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, cmls_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (msform_w, "SeeingL", args, n); + set_xmstring (w, XmNlabelString, "Seeing (arc seconds):"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, cmls_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + see_w = XmCreateLabel (msform_w, "SeeingV", args, n); + wtip (see_w, "Image is blurred to simulate this seeing value"); + XtManageChild (see_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, see_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, 50); n++; /* 5 arcsecs */ + sees_w = XmCreateScale (msform_w, "Seeing", args, n); + XtAddCallback (sees_w, XmNvalueChangedCallback, m_see_cb, NULL); + XtAddCallback (sees_w, XmNdragCallback, m_see_cb, NULL); + wtip (sees_w, "Set desired seeing, then use Apply"); + XtManageChild (sees_w); + sr_reg (sees_w, NULL, marscategory, 1); + + /* pick up initial value */ + XmScaleGetValue (sees_w, &m_seeing); + (void) sprintf (str, "%.1f", m_seeing/10.0); + set_xmstring (see_w, XmNlabelString, str); + + /* add a label for the current date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sees_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + sdt_w = XmCreateLabel (msform_w, "SDTstamp", args, n); + wtip (sdt_w, "Date and Time for which data are computed"); + XtManageChild (sdt_w); + + /* add a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sdt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + sep_w = XmCreateSeparator (msform_w, "Sep3", args, n); + XtManageChild (sep_w); + + /* put the bottom controls in their own form */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNfractionBase, 13); n++; + f_w = XmCreateForm (msform_w, "ACH", args, n); + XtManageChild (f_w); + + /* the apply button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 4); n++; + apply_w = XmCreatePushButton (f_w, "Apply", args, n); + XtAddCallback (apply_w, XmNactivateCallback, m_apply_cb, NULL); + wtip (apply_w, "Apply the new values"); + XtManageChild (apply_w); + + /* the close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 8); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, m_mstats_close_cb, NULL); + wtip (w, "Close this dialog"); + XtManageChild (w); + + /* the help button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 9); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 12); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, m_helpon_cb, + (XtPointer)"Mars_moreinfo"); + wtip (w, "More info about this dialog"); + XtManageChild (w); +} + +/* given two pointers to MFSel pointers sort by type, qsort-style */ +static int +mfsa_qsort (const void *p1, const void *p2) +{ + MFSel *m1 = *(MFSel**)p1; + MFSel *m2 = *(MFSel**)p2; + return (strcmp (m1->type, m2->type)); +} + +/* create the "features" stats dialog. + * N.B. we assume mfsa[] and mf[] are all set up. + */ +static void +m_create_mfform() +{ + typedef struct { + MFCtrl mfce; /* which feature control */ + char *label; /* label */ + char *tip; /* helpfull tip */ + } MFC; + static MFC mfc[] = { + {MFC_OK, "Ok", "Draw the chosen features and close this dialog"}, + {MFC_APPLY, "Apply", "Draw the chosen features"}, + {MFC_TOGGLE, "Toggle", "Swap features on/off"}, + {MFC_ALL, "All", "Turn all features on"}, + {MFC_NONE, "None", "Turn all features off"}, + {MFC_CLOSE, "Close", "Close this dialog"}, + {MFC_HELP, "Help", "More info about this dialog"}, + }; + Widget rc_w, sep_w, f_w; + MFSel **sortmfsa; + XmString *flist; + Widget w; + Arg args[20]; + int n; + int i; + + /* create form */ + + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + mfform_w = XmCreateFormDialog (mshell_w, "MarsFeatures", args, n); + set_something (mfform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg(XtParent(mfform_w), "XEphem*MarsFeatures.x", marsfcategory, 0); + sr_reg(XtParent(mfform_w), "XEphem*MarsFeatures.y", marsfcategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Mars features"); n++; + XtSetValues (XtParent(mfform_w), args, n); + + /* make a rowcolumn and add the feature type TBs sorted by type */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNspacing, 1); n++; + rc_w = XmCreateRowColumn (mfform_w, "SRC", args, n); + XtManageChild (rc_w); + + sortmfsa = (MFSel **) XtMalloc (nmfsa * sizeof(MFSel*)); + for (i = 0; i < nmfsa; i++) + sortmfsa[i] = mfsa + i; + qsort (sortmfsa, nmfsa, sizeof(MFSel*), mfsa_qsort); + + for (i = 0; i < nmfsa; i++) { + MFSel *mfsp = sortmfsa[i]; + char buf[1024]; + int j; + + /* widget name is first word in type */ + for (j = 0; isalpha(mfsp->type[j]); j++) + buf[j] = mfsp->type[j]; + buf[j] = '\0'; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (rc_w, buf, args, n); + XtAddCallback(w, XmNvalueChangedCallback, m_feasel_cb, mfsp); + (void) sprintf (buf, "%4d %s", mfsp->n, mfsp->type); + set_xmstring (w, XmNlabelString, buf); + mfsp->set = XmToggleButtonGetState (w); + mfsp->tb = w; + XtManageChild (w); + sr_reg (w, NULL, marsfcategory, 1); + } + XtFree ((char*)sortmfsa); + + + /* add a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + sep_w = XmCreateSeparator (mfform_w, "Sep1", args, n); + XtManageChild (sep_w); + + /* add feature list */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNselectionPolicy, XmMULTIPLE_SELECT); n++; + flist_w = XmCreateScrolledList (mfform_w, "FL", args, n); + XtAddCallback (flist_w, XmNmultipleSelectionCallback, m_list_cb, 0); + XtManageChild (flist_w); + + flist = (XmString *) XtMalloc (nmf * sizeof(XmString)); + for (i = 0; i < nmf; i++) + flist[i] = XmStringCreateSimple (mf[i].name); + XmListAddItemsUnselected (flist_w, flist, nmf, 0); + for (i = 0; i < nmf; i++) + XmStringFree (flist[i]); + XtFree ((char*)flist); + m_setselected(); + + /* add the controls in their own form */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNfractionBase, 3*XtNumber(mfc)+1); n++; + f_w = XmCreateForm (mfform_w, "MFTF", args, n); + XtManageChild (f_w); + + for (i = 0; i < XtNumber(mfc); i++) { + MFC *mp = &mfc[i]; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1+3*i); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3+3*i); n++; + w = XmCreatePushButton (f_w, "MFTPB", args, n); + XtAddCallback (w, XmNactivateCallback, m_features_ctrl_cb, + (XtPointer)mp->mfce); + set_xmstring (w, XmNlabelString, mp->label); + wtip (w, mp->tip); + XtManageChild (w); + } +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +m_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + buttonAsButton (cml_w, whether); + buttonAsButton (slt_w, whether); +} + +/* callback when an item is de/selected in the feature list */ +/* ARGSUSED */ +static void +m_list_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListCallbackStruct *lp = (XmListCallbackStruct *)call; + + if (lp->selected_item_count == 1) { + int i = lp->selected_item_positions[0]-1; + m_setnewpos (mf[i].lt, mf[i].lg); + } else + m_redraw(0); +} + +/* callback from the Moons button */ +/* ARGSUSED */ +static void +m_moons_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + marsm_manage(); +} + +/* callback from the Close button on the stats menu */ +/* ARGSUSED */ +static void +m_mstats_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (msform_w); +} + +/* callback when want stats menu up */ +/* ARGSUSED */ +static void +m_mstats_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (msform_w); + m_set_buttons(m_selecting); +} + +/* callback from any of the Features dialog bottom controls. + * client is one of MFCtrl. + */ +/* ARGSUSED */ +static void +m_features_ctrl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + MFSel *mfsp; + + switch ((MFCtrl)client) { + case MFC_OK: + m_setselected(); + m_redraw(0); + XtUnmanageChild (mfform_w); + break; + case MFC_APPLY: + m_setselected(); + m_redraw(0); + break; + case MFC_ALL: + for (mfsp = mfsa; mfsp < &mfsa[nmfsa]; mfsp++) + XmToggleButtonSetState (mfsp->tb, mfsp->set=1, False); + break; + case MFC_NONE: + for (mfsp = mfsa; mfsp < &mfsa[nmfsa]; mfsp++) + XmToggleButtonSetState (mfsp->tb, mfsp->set=0, False); + break; + case MFC_TOGGLE: + for (mfsp = mfsa; mfsp < &mfsa[nmfsa]; mfsp++) + XmToggleButtonSetState (mfsp->tb, + mfsp->set = !XmToggleButtonGetState(mfsp->tb), False); + break; + case MFC_CLOSE: + XtUnmanageChild (mfform_w); + break; + case MFC_HELP: + hlp_dialog ("Mars_features", NULL, 0); + break; + default: + printf ("Bad MFCtrl: %d\n", (int)(long int)client); + abort(); + } +} + +/* callback when want features dialog up */ +/* ARGSUSED */ +static void +m_features_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (mfform_w); +} + +/* callback when want a features TB changes. + * client is pointer to MFSel whose set state is being changed. + */ +/* ARGSUSED */ +static void +m_feasel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + MFSel *mfsp = (MFSel *) client; + mfsp->set = XmToggleButtonGetState(w); +} + +/* callback from the Print PB */ +/* ARGSUSED */ +static void +m_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Mars View", m_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +m_print () +{ + /* must be up */ + if (!mars_ison()) { + xe_msg (1, "Mars must be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* fit view in square across the top and prepare to capture X calls */ + XPSXBegin (m_pm, BORD, BORD, winsz, winsz, 1*72, 10*72, (int)(6.5*72)); + + /* redraw everything into m_pm */ + m_redraw(1); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + m_ps_annotate (); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +m_ps_annotate () +{ + Now *np = mm_get_now(); + char dir[128]; + char buf[128]; + int ctr = 306; /* = 8.5*72/2 */ + int lx = 145, rx = 460; + int y; + + /* caption */ + y = AROWY(13); + (void) strcpy (buf, "XEphem Mars View"); + (void) sprintf (dir, "(%s) %d %d cstr", buf, ctr, y); + XPSDirect (dir); + + y = AROWY(9); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + (void) sprintf (dir, "(UTC Date:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + fs_dm_angle (buf, m_slt); + (void) sprintf (dir,"(%s Latitude:) %d %d rstr (%s) %d %d lstr\n", + fakepos ? "Center" : "Sub Earth", rx, y, buf, rx+10, y); + XPSDirect (dir); + + y = AROWY(8); + fs_time (buf, mjd_hr(mjd)); + (void) sprintf (dir, "(UTC Time:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + fs_dm_angle (buf, m_cml); + (void) sprintf (dir,"(%s Longitude:) %d %d rstr (%s) %d %d lstr\n", + fakepos ? "Center" : "Sub Earth", rx, y, buf, rx+10, y); + XPSDirect (dir); + + /* add site/lat/long if topocentric */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + char *site; + + /* put site name under caption */ + site = mm_getsite(); + if (site) { + y = AROWY(12); + (void) sprintf (dir, "(%s) %d %d cstr\n", + XPSCleanStr(site,strlen(site)), ctr, y); + XPSDirect (dir); + } + + /* then add lat/long */ + y = AROWY(10); + + fs_sexa (buf, raddeg(fabs(lat)), 3, 3600); + (void) sprintf (dir, "(Latitude:) %d %d rstr (%s %c) %d %d lstr\n", + lx, y, buf, lat < 0 ? 'S' : 'N', lx+10, y); + XPSDirect (dir); + + fs_sexa (buf, raddeg(fabs(lng)), 4, 3600); + (void) sprintf (dir,"(Longitude:) %d %d rstr (%s %c) %d %d lstr\n", + rx, y, buf, lng < 0 ? 'W' : 'E', rx+10, y); + XPSDirect (dir); + } + + /* add seeing if > 0 */ + if (m_seeing) { + y = AROWY(6); + (void) sprintf(dir,"(Simulated %.1f Arcsecond Seeing) %d %d cstr\n", + m_seeing/10.0, ctr, y); + XPSDirect (dir); + } + } + +/* callback from CML or SLT button being activated. + */ +/* ARGSUSED */ +static void +m_selection_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (m_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback from the CML scale */ +/* ARGSUSED */ +static void +m_cml_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleCallbackStruct *sp = (XmScaleCallbackStruct *)call; + int v = sp->value; + + f_dm_angle (cml_w, degrad((double)v)); + + /* Apply button is now useful */ + XtSetSensitive (apply_w, True); +} + +/* callback from the SLT scale */ +/* ARGSUSED */ +static void +m_slt_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleCallbackStruct *sp = (XmScaleCallbackStruct *)call; + int v = sp->value; + + f_dm_angle (slt_w, degrad((double)v)); + + /* Apply button is now useful */ + XtSetSensitive (apply_w, True); +} + +/* callback from the Seeing scale */ +/* ARGSUSED */ +static void +m_see_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleCallbackStruct *sp = (XmScaleCallbackStruct *)call; + char str[32]; + int v; + + v = sp->value; + (void) sprintf (str, "%4.1f", v/10.0); + set_xmstring (see_w, XmNlabelString, str); + + /* Apply button is now useful */ + XtSetSensitive (apply_w, True); +} + +/* callback from the Apply PB */ +/* ARGSUSED */ +static void +m_apply_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int v; + + /* gather the new values */ + XmScaleGetValue (cmls_w, &v); + m_cml = degrad(v); + f_dm_angle (cml_w, m_cml); + + XmScaleGetValue (slts_w, &v); + m_slt = degrad(v); + m_sslt = sin(m_slt); + m_cslt = cos(m_slt); + f_dm_angle (slt_w, m_slt); + + XmScaleGetValue (sees_w, &v); + m_seeing = v; + + /* force a redraw */ + fakepos = 1; + m_redraw(1); +} + +/* callback from the Point PB */ +/* ARGSUSED */ +static void +m_aim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + m_setnewpos (pu_l, pu_L); +} + +/* install a new lat/long with pa 0 */ +static void +m_setnewpos (double l, double L) +{ + m_slt = l; + m_sslt = sin(m_slt); + m_cslt = cos(m_slt); + f_dm_angle (slt_w, m_slt); + XmScaleSetValue (slts_w, (int)(raddeg(m_slt))); + + m_cml = L; + f_dm_angle (cml_w, m_cml); + XmScaleSetValue (cmls_w, (int)(raddeg(m_cml))); + + m_pa = 0.0; + m_spa = 0.0; + m_cpa = 1.0; + + fakepos = 1; + m_redraw(1); +} + +/* callback from mshell_w being popped down. + */ +/* ARGSUSED */ +static void +m_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (msform_w); + XtUnmanageChild (mfform_w); + + /* register we are now down */ + setXRes (mars_viewupres(), "0"); +} + +/* called from Close button */ +static void +m_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (mshell_w); + /* popdown will do all the real work */ +} + +/* called to add scene to the movie loop */ +static void +m_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (m_pm, dt_w); +} + +/* callback from the any of the option TBs. + * Option enum is in client. + */ +/* ARGSUSED */ +static void +m_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Option opt = (Option)client; + int set; + + watch_cursor (1); + + /* toggle the option */ + option[opt] = set = XmToggleButtonGetState (w); + + switch (opt) { + + case HALFSIZ_OPT: + m_setsize(); + m_redraw(1); + break; + + case GRID_OPT: + if (set) { + m_grid(); + m_refresh (NULL); + } else + m_redraw(0); + break; + + case FLIPTB_OPT: + /* swap color map when flip top/bottom */ + swap_colors(); + m_redraw(1); + break; + + case FLIPLR_OPT: + m_redraw(1); + break; + + case N_OPT: + break; + } + + + watch_cursor (0); +} + +/* swap dark-bright color map. + * this is used to keep mountains looking like mountains when flipping t/b + */ +static void +swap_colors() +{ + int i; + + for (i = 0; i < REDCOLORS/2; i++) { + int tmp = mcolors[i]; + mcolors[i] = mcolors[REDCOLORS-1-i]; + mcolors[REDCOLORS-1-i] = tmp; + } +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +m_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "This is a map of Mars.", + }; + + hlp_dialog ("Mars", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +m_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* set winsz from HALFSIZ_OPT then size of the scrolling window, image and pm.*/ +static void +m_setsize() +{ + Window win = RootWindow(XtD, DefaultScreen(XtD)); + Dimension wid, hei; + int fullsz; + + /* full size is IMH/(PI/2) because of wrapping cyl onto sphere */ + fullsz = (int)(IMH/(PI/2)); + winsz = option[HALFSIZ_OPT] ? fullsz/2 : fullsz; + + mxim_create(); + + wid = 2*BORD+winsz; + hei = 2*BORD+winsz; + set_something (mda_w, XmNwidth, (XtArgVal)wid); + set_something (mda_w, XmNheight, (XtArgVal)hei); + + if (m_pm) + XFreePixmap (XtD, m_pm); + m_pm = XCreatePixmap (XtD, win, wid, hei, mdepth); +} + +/* expose (or reconfig) of mars image view drawing area. + */ +/* ARGSUSED */ +static void +m_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + XExposeEvent *e = &c->event->xexpose; + + watch_cursor (1); + + switch (c->reason) { + case XmCR_EXPOSE: { + static int before; + + if (!before) { + /* turn off backing store, do first full draw */ + XSetWindowAttributes swa; + unsigned long mask = CWBackingStore; + + swa.backing_store = NotUseful; + XChangeWindowAttributes (e->display, e->window, mask, &swa); + + m_redraw(1); + + before = 1; + } + break; + } + default: + printf ("Unexpected mars mda_w event. type=%d\n", c->reason); + abort(); + } + + /* update exposed area */ + m_refresh (e); + + watch_cursor (0); +} + +/* make glass_xim of size GLASSSZ*GLASSMAG and same genre as m_xim. + * leave glass_xim NULL if trouble. + */ +static void +makeGlassImage (dsp) +Display *dsp; +{ + int nbytes = (GLASSSZ*GLASSMAG+7) * (GLASSSZ*GLASSMAG+7) * mbpp/8; + char *glasspix = (char *) malloc (nbytes); + + if (!glasspix) { + xe_msg (0, "Can not malloc %d for Glass pixels", nbytes); + return; + } + + glass_xim = XCreateImage (dsp, XDefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ m_xim->depth, + /* format */ m_xim->format, + /* offset */ 0, + /* data */ glasspix, + /* width */ GLASSSZ*GLASSMAG, + /* height */ GLASSSZ*GLASSMAG, + /* pad */ mbpp < 8 ? 8 : mbpp, + /* bpl */ 0); + + if (!glass_xim) { + free ((void *)glasspix); + xe_msg (0, "Can not make Glass XImage"); + return; + } + + glass_xim->bitmap_bit_order = LSBFirst; + glass_xim->byte_order = LSBFirst; +} + +/* make glassGC */ +static void +makeGlassGC (dsp, win) +Display *dsp; +Window win; +{ + XGCValues gcv; + unsigned int gcm; + Pixel p; + + if (get_color_resource (mda_w, "GlassBorderColor", &p) < 0) { + xe_msg (0, "Can not get GlassBorderColor -- using White"); + p = WhitePixel(dsp, DefaultScreen(dsp)); + } + gcm = GCForeground; + gcv.foreground = p; + glassGC = XCreateGC (dsp, win, gcm, &gcv); +} + +/* fill glass_xim with GLASSSZ*GLASSMAG view of m_xim centered at coords + * xc,yc. take care at the edges (m_xim is winsz x winsz) + */ +static void +fillGlass (xc, yc) +int xc, yc; +{ + int sx, sy; /* coords in m_xim */ + int gx, gy; /* coords in glass_xim */ + int i, j; + + gy = 0; + gx = 0; + for (sy = yc-GLASSSZ/2; sy < yc+GLASSSZ/2; sy++) { + for (sx = xc-GLASSSZ/2; sx < xc+GLASSSZ/2; sx++) { + Pixel p; + + if (sx < 0 || sx >= winsz || sy < 0 || sy >= winsz) + p = XGetPixel (m_xim, 0, 0); + else + p = XGetPixel (m_xim, sx, sy); + for (i = 0; i < GLASSMAG; i++) + for (j = 0; j < GLASSMAG; j++) + XPutPixel (glass_xim, gx+i, gy+j, p); + gx += GLASSMAG; + } + gx = 0; + gy += GLASSMAG; + } +} + +/* handle the operation of the magnifying glass. + * this is called whenever there is left button activity over the image. + */ +static void +doGlass (dsp, win, b1p, m1, b1r, wx, wy) +Display *dsp; +Window win; +int b1p, m1, b1r; /* button/motion state */ +int wx, wy; /* window coords of cursor */ +{ + static int lastwx, lastwy; + int rx, ry, rw, rh; /* region */ + + /* check for first-time stuff */ + if (!glass_xim) + makeGlassImage (dsp); + if (!glass_xim) + return; /* oh well */ + if (!glassGC) + makeGlassGC (dsp, win); + + if (m1) { + + /* motion: put back old pixels that won't just be covered again */ + + /* first the vertical strip that is uncovered */ + + rh = GLASSSZ*GLASSMAG; + ry = lastwy - (GLASSSZ*GLASSMAG/2); + if (ry < 0) { + rh += ry; + ry = 0; + } + if (wx < lastwx) { + rw = lastwx - wx; /* cursor moved left */ + rx = wx + (GLASSSZ*GLASSMAG/2); + } else { + rw = wx - lastwx; /* cursor moved right */ + rx = lastwx - (GLASSSZ*GLASSMAG/2); + } + if (rx < 0) { + rw += rx; + rx = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, m_pm, win, m_fgc, rx, ry, rw, rh, rx, ry); + + /* then the horizontal strip that is uncovered */ + + rw = GLASSSZ*GLASSMAG; + rx = lastwx - (GLASSSZ*GLASSMAG/2); + if (rx < 0) { + rw += rx; + rx = 0; + } + if (wy < lastwy) { + rh = lastwy - wy; /* cursor moved up */ + ry = wy + (GLASSSZ*GLASSMAG/2); + } else { + rh = wy - lastwy; /* cursor moved down */ + ry = lastwy - (GLASSSZ*GLASSMAG/2); + } + if (ry < 0) { + rh += ry; + ry = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, m_pm, win, m_fgc, rx, ry, rw, rh, rx, ry); + } + + if (b1p || m1) { + + /* start or new location: show glass and save new location */ + + fillGlass (wx-BORD, wy-BORD); + XPutImage (dsp, win, m_fgc, glass_xim, 0, 0, + wx-(GLASSSZ*GLASSMAG/2), wy-(GLASSSZ*GLASSMAG/2), + GLASSSZ*GLASSMAG, GLASSSZ*GLASSMAG); + lastwx = wx; + lastwy = wy; + + /* kinda hard to tell boundry of glass so draw a line around it */ + XDrawRectangle (dsp, win, glassGC, + wx-(GLASSSZ*GLASSMAG/2), wy-(GLASSSZ*GLASSMAG/2), + GLASSSZ*GLASSMAG-1, GLASSSZ*GLASSMAG-1); + } + + if (b1r) { + + /* end: restore all old pixels */ + + rx = lastwx - (GLASSSZ*GLASSMAG/2); + rw = GLASSSZ*GLASSMAG; + if (rx < 0) { + rw += rx; + rx = 0; + } + + ry = lastwy - (GLASSSZ*GLASSMAG/2); + rh = GLASSSZ*GLASSMAG; + if (ry < 0) { + rh += ry; + ry = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, m_pm, win, m_fgc, rx, ry, rw, rh, rx, ry); + } +} + +/* event handler from all Button events on the mda_w */ +static void +m_pointer_eh (w, client, ev, continue_to_dispatch) +Widget w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + Display *dsp = ev->xany.display; + Window win = ev->xany.window; + int evt = ev->type; + Window root, child; + int rx, ry, x, y; + unsigned mask; + int m1, b1p, b1r, b3p; + + /* what happened? */ + m1 = evt == MotionNotify && ev->xmotion.state & Button1Mask; + b1p = evt == ButtonPress && ev->xbutton.button == Button1; + b1r = evt == ButtonRelease && ev->xbutton.button == Button1; + b3p = evt == ButtonPress && ev->xbutton.button == Button3; + + /* do we care? */ + if (!m1 && !b1p && !b1r && !b3p) + return; + + /* where are we? */ + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &x, &y, &mask); + + /* dispatch */ + if (b3p) + m_popup (ev); + if (b1p || m1 || b1r) { + doGlass (dsp, win, b1p, m1, b1r, x, y); + m_reportloc (x, y); + } +} + +/* establish mimage and m_xim and return 0 else xe_msg() and return -1 */ +static int +m_readmap() +{ + unsigned char r[256], g[256], b[256]; + char why[256]; + char fn[1024]; + FILE *fp; + int w, h; + int i; + + /* open mars map */ + (void) sprintf (fn, "%s/auxil/marsmap.jpg", getShareDir()); + fp = fopenh (fn, "r"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return (-1); + } + + /* read mars file into mimage */ + mimage = jpegRead (fp, &w, &h, r, g, b, why); + fclose (fp); + if (!mimage) { + xe_msg (1, "%s:\n%s", fn, why); + return (-1); + } + + /* make some sanity checks */ + if (w != 2*IMH || h != IMH) { + xe_msg (1, "%s:\nExpected %d x %d but found %d x %d", fn, + 2*IMH, IMH, w, h); + free (mimage); + mimage = NULL; + return (-1); + } + + /* convert colormap index to gray using SMPTE convention */ + for (i = 0; i < w*h; i++) { + int c = mimage[i]; + mimage[i] = (unsigned char)(.33*r[c] + .5*g[c] + .17*b[c]); + } + + return(0); +} + +/* create m_xim of size winszxwinsz, depth mdepth and bit-per-pixel mbpp. + * make a Bitmap if only have 1 bit per pixel, otherwise a Pixmap. + * return 0 if ok else -1 and xe_msg(). + */ +static int +mxim_create () +{ + Display *dsp = XtDisplay (mda_w); + int nbytes = winsz*winsz*mbpp/8; + char *data; + + /* delete if old exists */ + if (m_xim) { + free ((void *)m_xim->data); + m_xim->data = NULL; + XDestroyImage (m_xim); + m_xim = NULL; + } + + /* get memory for image pixels. */ + data = (char *) malloc (nbytes); + if (!data) { + xe_msg (1, "Can not get %d bytes for shadow pixels", nbytes); + return (-1); + } + + /* create the XImage */ + m_xim = XCreateImage (dsp, DefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ mbpp == 1 ? 1 : mdepth, + /* format */ mbpp == 1 ? XYBitmap : ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ winsz, + /* height */ winsz, + /* pad */ mbpp < 8 ? 8 : mbpp, + /* bpl */ 0); + if (!m_xim) { + xe_msg (1, "Can not create shadow XImage"); + free ((void *)data); + return (-1); + } + + m_xim->bitmap_bit_order = LSBFirst; + m_xim->byte_order = LSBFirst; + + /* ok */ + return (0); +} + +/* select each entry in the scrolled list if and only if it is implied + * from the current list of chosen types. + */ +static void +m_setselected() +{ + int i; + + /* unselect all entries */ + XmListDeselectAllItems (flist_w); + + /* select each entry whose type is set */ + for (i = 0; i < nmf; i++) + if (mfsa[mf[i].mfsai].set) + XmListSelectPos (flist_w, i+1, False); +} + +/* full redraw takes three steps: fill image, fill pixmap, copy to screen. + * this does the first step if desired, then always the next 2. + */ +static void +m_redraw(newim) +int newim; +{ + watch_cursor (1); + + XmUpdateDisplay (toplevel_w); + if (newim) + mxim_setup (); + m_drawpm (); + m_refresh(NULL); + + watch_cursor (0); +} + +/* copy the m_pm pixmap to the drawing area mda_w. + * if ep just copy that much, else copy all. + */ +static void +m_refresh(ep) +XExposeEvent *ep; +{ + Display *dsp = XtDisplay(mda_w); + Window win = XtWindow (mda_w); + Pixmap pm = m_pm; + unsigned w, h; + int x, y; + + /* ignore of no pixmap now */ + if (!pm) + return; + + if (ep) { + x = ep->x; + y = ep->y; + w = ep->width; + h = ep->height; + } else { + w = winsz+2*BORD; + h = winsz+2*BORD; + x = y = 0; + } + + XCopyArea (dsp, pm, win, m_fgc, x, y, w, h, x, y); +} + +/* make the various gcs, handy pixel values and fill in mcolors[]. + * N.B. just call this once. + * TODO: reclaim old stuff if called again + */ +static void +m_init_gcs() +{ + Display *dsp = XtD; + Window win = XtWindow(toplevel_w); + Colormap cm = xe_cm; + XGCValues gcv; + Pixel reds[REDCOLORS]; + int nreds; + XColor xc; + unsigned int gcm; + Pixel fg; + Pixel p; + int i; + + /* fg and bg */ + get_color_resource (mda_w, "marsColor", &fg); + (void) get_color_resource (mda_w, "MarsBackground", &mbg); + + gcm = GCForeground | GCBackground; + gcv.foreground = fg; + gcv.background = mbg; + m_fgc = XCreateGC (dsp, win, gcm, &gcv); + + gcv.foreground = mbg; + gcv.background = fg; + m_bgc = XCreateGC (dsp, win, gcm, &gcv); + + /* make the label marker gc */ + (void) get_color_resource (mda_w, "MarsAnnotColor", &p); + gcm = GCForeground | GCBackground; + gcv.foreground = p; + gcv.background = mbg; + m_agc = XCreateGC (dsp, win, gcm, &gcv); + + get_views_font (dsp, &m_fsp); + + /* build red ramp for image. + * base the scale off the foreground color. + */ + xc.pixel = fg; + XQueryColor (dsp, cm, &xc); + nreds = alloc_ramp (dsp, &xc, cm, reds, REDCOLORS); + if (nreds < REDCOLORS) { + xe_msg (0, "Wanted %d but only found %d colors for Mars.", + REDCOLORS, nreds); + } + + /* set mcolors[] */ + for (i = 0; i < REDCOLORS; i++) + mcolors[i] = reds[nreds*i/REDCOLORS]; + if (!option[FLIPTB_OPT]) + swap_colors(); +} + +/* update mars info and draw the stat labels */ +static void +m_stats () +{ + Now *np = mm_get_now(); + + /* get fresh mars info */ + marsop = db_basic (MARS); + db_update (marsop); + cm_dec = cos(marsop->s_gaedec); + sm_dec = sin(marsop->s_gaedec); + + /* compute and display the CML and SLT and polar position angle */ + mars_cml (np, &m_cml, &m_slt, &m_pa); + m_sslt = sin(m_slt); + m_cslt = cos(m_slt); + m_spa = sin(m_pa); + m_cpa = cos(m_pa); + + f_dm_angle (cml_w, m_cml); + XmScaleSetValue (cmls_w, (int)(raddeg(m_cml))); + f_dm_angle (slt_w, m_slt); + XmScaleSetValue (slts_w, (int)(raddeg(m_slt))); + + /* reset fake flag */ + fakepos = 0; + + /* update time stamps too */ + timestamp (np, dt_w); + timestamp (np, sdt_w); +} + +/* fill the pixmap, m_pm. + * N.B. if mars image changed, call mxim_setup() before this. + * N.B. if want to draw, call m_refresh() after this. + */ +static void +m_drawpm () +{ + /* check assumptions */ + if (!m_pm) { + printf ("No mars m_pm Pixmap!\n"); + abort(); + } + + /* Apply button is no longer useful */ + XtSetSensitive (apply_w, False); + + /* clear m_pm, and copy m_xim within BORDER */ + XPSPaperColor (mbg); + XPSFillRectangle (XtD, m_pm, m_bgc, 0, 0, winsz+2*BORD, winsz+2*BORD); + XPutImage (XtD, m_pm, m_fgc, m_xim, 0, 0, BORD, BORD, winsz, winsz); + XPSPixmap (m_pm, winsz+2*BORD, winsz+2*BORD, xe_cm, m_bgc, 1); + + /* add grid, if enabled */ + if (option[GRID_OPT]) + m_grid(); + + /* add feature labels, as enabled */ + m_drFeatures(); + + /* add orientation markings */ + m_orientation(); + + /* and the size calibration */ + m_sizecal(); + + /* user annotation */ + ano_draw (mda_w, m_pm, m_ano, 0); +} + +static int +m_ano (double *latp, double *lngp, int *xp, int *yp, int w2x, int arg) +{ + int x, y; + + if (w2x) { + if (ll2xy (*latp, *lngp, &x, &y) < 0) + return (0); + *xp = IX2XX(x); + *yp = IY2XY(y); + } else { + x = XX2IX(*xp); + y = XY2IY(*yp); + if (xy2ll (x, y, latp, lngp) < 0) + return (0); + } + + return (1); +} + +/* discard trailing whitespace in name IN PLACE */ +static void +noTrWhite (name) +char *name; +{ + int l; + + for (l = strlen(name)-1; l >= 0 && isspace(name[l]); --l) + name[l] = '\0'; +} + +/* look through mfsa[] for type. + * if first time for this type, add to list. + * increment count. + * return index into mfsa. + */ +static int +findMFSel (type) +char *type; +{ + MFSel *mfsp; + + /* check for existing */ + for (mfsp = mfsa; mfsp < &mfsa[nmfsa]; mfsp++) + if (!strcmp (type, mfsp->type)) { + mfsp->n++; + return (mfsp-mfsa); + } + + /* add one */ + mfsa = (MFSel *) XtRealloc ((char*)mfsa, (nmfsa+1)*sizeof(MFSel)); + mfsp = &mfsa[nmfsa++]; + strcpy (mfsp->type, type); + mfsp->n = 1; + return (mfsp-mfsa); +} + +/* given two pointers to MFeature sort by name, qsort-style */ +static int +mf_qsort (const void *p1, const void *p2) +{ + MFeature *f1 = (MFeature*)p1; + MFeature *f2 = (MFeature*)p2; + return (strcmp (f1->name, f2->name)); +} + +/* read in the mars_db features list. + * build malloced lists mf and mfsa. + * features in mf[] will be sorted by name. + * N.B. mf[] point into mfsa[] so don't move them. + * return 0 if ok, else -1. + */ +static int +m_readFeatures() +{ + char buf[1024]; + char fn[1024]; + FILE *fp; + + /* open the file */ + (void) sprintf (fn, "%s/auxil/mars_db", getShareDir()); + fp = fopenh (fn, "r"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return (-1); + } + + /* prepare lists. + * really +1 to allow always using realloc, and as staging for next. + */ + if (mf) + XtFree ((void*)mf); + mf = (MFeature *) XtMalloc (sizeof(MFeature)); + nmf = 0; + if (mfsa) + XtFree ((void*)mfsa); + mfsa = (MFSel *) XtMalloc (sizeof(MFSel)); + nmfsa = 0; + + /* read and add each feature and unique feature type */ + while (fgets (buf, sizeof(buf), fp)) { + MFeature *mfp = &mf[nmf]; + char type[sizeof(((MFSel*)0)->type)]; + char name[128]; + int nf; + + /* ignore all lines that do not follow the pattern */ + nf = sscanf(buf,"%[^|]| %lf | %lf | %lf | %[^\n]", name, + &mfp->lt, &mfp->lg, &mfp->dia, type); + if (nf != 5) + continue; + mfp->lt = degrad(mfp->lt); + mfp->lg = degrad(mfp->lg); + + /* remove trailing white space */ + noTrWhite(type); + noTrWhite(name); + strncpy(mfp->name, name, sizeof(mfp->name)); + + /* find type, creating new if first time seen */ + mfp->mfsai = findMFSel (type); + + /* add */ + nmf++; + mf = (MFeature *) XtRealloc ((void*)mf, (nmf+1)*sizeof(MFeature)); + } + fclose(fp); + + /* sort features by name */ + qsort (mf, nmf, sizeof(MFeature), mf_qsort); + + /* ok */ + xe_msg (0, "Read %d features from mars_db", nmf); + return (0); +} + +/* draw the mf list, based on what is selected in flist_w */ +static void +m_drFeatures () +{ + Display *dsp = XtDisplay (mda_w); + int *selected, nselected; + int i; + + if (!XmListGetSelectedPos (flist_w, &selected, &nselected)) + return; + + XSetFont (dsp, m_agc, m_fsp->fid); + + for (i = 0; i < nselected; i++) { + MFeature *mfp = &mf[selected[i]-1]; + int dir, asc, des; + XCharStruct all; + int r, x, y; + int l; + + /* find map location in X windows coords */ + if (ll2xy (mfp->lt, mfp->lg, &x, &y) < 0) + continue; + x = IX2XX(x); + y = IY2XY(y); + + /* find radius if crater or single mountain or 0, in X pixels */ + if (!strncmp (mfsa[mfp->mfsai].type, "Crater", 6) + || strstr (mfp->name, "Mons")) + r = (int)(winsz*mfp->dia/MARSD)/2; + else if (!strncmp (mfsa[mfp->mfsai].type, "Landing", 7)) + r = LANDSR; + else + r = 0; + + /* center and display the name */ + l = strlen(mfp->name); + XTextExtents (m_fsp, mfp->name, l, &dir, &asc, &des, &all); + XPSDrawString (dsp, m_pm, m_agc, x-all.width/2,y-(r+2),mfp->name,l); + if (r > 0) + XPSDrawArc (dsp, m_pm, m_agc, x-r, y-r, 2*r, 2*r, 0, 360*64); + } + + XtFree ((char *)selected); +} + +/* draw the N/S E/W labels on m_pm */ +static void +m_orientation() +{ + Now *np = mm_get_now(); + double mr, mra, mdec; + double ra, dec; + int x, y; + + /* celestial plane has not meaning at arbitrary orientations */ + if (fakepos) + return; + + XSetFont (XtD, m_agc, m_fsp->fid); + mr = degrad(marsop->s_size/3600.0)/2 * 1.1; + mra = marsop->s_gaera; + mdec = marsop->s_gaedec; + + ra = mra + mr/cm_dec; + dec = mdec; + m_eqproject (np, ra, dec, &x, &y); + x = IX2XX(x); + y = IY2XY(y); + XPSDrawString (XtD, m_pm, m_agc, x, y, "E", 1); + + ra = mra - mr/cm_dec; + m_eqproject (np, ra, dec, &x, &y); + x = IX2XX(x); + y = IY2XY(y); + XPSDrawString (XtD, m_pm, m_agc, x, y, "W", 1); + + ra = mra; + dec = mdec + mr; + m_eqproject (np, ra, dec, &x, &y); + x = IX2XX(x); + y = IY2XY(y); + XPSDrawString (XtD, m_pm, m_agc, x, y, "N", 1); + + dec = mdec - mr; + m_eqproject (np, ra, dec, &x, &y); + x = IX2XX(x); + y = IY2XY(y); + XPSDrawString (XtD, m_pm, m_agc, x, y, "S", 1); +} + +/* draw the size calibration */ +static void +m_sizecal() +{ + int dir, asc, des; + XCharStruct xcs; + char buf[64]; + int l; + + (void) sprintf (buf, "%.1f\"", marsop->s_size); + l = strlen (buf); + XQueryTextExtents (XtD, m_fsp->fid, buf, l, &dir, &asc, &des, &xcs); + + XSetFont (XtD, m_agc, m_fsp->fid); + XPSDrawLine (XtD, m_pm, m_agc, BORD, winsz+3*BORD/2, winsz+BORD, + winsz+3*BORD/2); + XPSDrawLine (XtD, m_pm, m_agc, BORD, winsz+3*BORD/2-3, BORD, + winsz+3*BORD/2+3); + XPSDrawLine (XtD, m_pm, m_agc, BORD+winsz, winsz+3*BORD/2-3, BORD+winsz, + winsz+3*BORD/2+3); + XPSDrawString (XtD, m_pm, m_agc, BORD+winsz/2-xcs.width/2, + winsz+3*BORD/2+xcs.ascent+6, buf, l); +} + +/* draw a coordinate grid over the image already on m_pm */ +static void +m_grid() +{ + Display *dsp = XtDisplay (mda_w); + double fsp = FSP; + double lt, lg; + int x, y; + + /* set current font */ + XSetFont (dsp, m_agc, m_fsp->fid); + + /* lines of constant lat */ + for (lt = -PI/2 + GSP; lt < PI/2; lt += GSP) { + XPoint xpt[(int)(2*PI/FSP)+2]; + int npts = 0; + + for (lg = 0; lg <= 2*PI+fsp; lg += fsp) { + if (ll2xy(lt, lg, &x, &y) < 0) { + if (npts > 0) { + XPSDrawLines (dsp, m_pm,m_agc,xpt,npts,CoordModeOrigin); + npts = 0; + } + continue; + } + + if (npts >= XtNumber(xpt)) { + printf ("Mars lat grid overflow\n"); + abort(); + } + xpt[npts].x = IX2XX(x); + xpt[npts].y = IY2XY(y); + npts++; + } + + if (npts > 0) + XPSDrawLines (dsp, m_pm, m_agc, xpt, npts, CoordModeOrigin); + } + + /* lines of constant longitude */ + for (lg = 0; lg < 2*PI; lg += GSP) { + XPoint xpt[(int)(2*PI/FSP)+1]; + int npts = 0; + + for (lt = -PI/2; lt <= PI/2; lt += fsp) { + if (ll2xy(lt, lg, &x, &y) < 0) { + if (npts > 0) { + XPSDrawLines (dsp, m_pm,m_agc,xpt,npts,CoordModeOrigin); + npts = 0; + } + continue; + } + + if (npts >= XtNumber(xpt)) { + printf ("Mars lng grid overflow\n"); + abort(); + } + xpt[npts].x = IX2XX(x); + xpt[npts].y = IY2XY(y); + npts++; + } + + if (npts > 0) + XPSDrawLines (dsp, m_pm, m_agc, xpt, npts, CoordModeOrigin); + } + + /* X marks the center, unless rotated by hand */ + if (!fakepos) { + XPSDrawLine (dsp, m_pm, m_agc, IX2XX(-XRAD), IY2XY(-XRAD), + IX2XX(XRAD), IY2XY(XRAD)); + XPSDrawLine (dsp, m_pm, m_agc, IX2XX(-XRAD), IY2XY(XRAD), + IX2XX(XRAD), IY2XY(-XRAD)); + } +} + +/* fill in m_xim from mimage and current circumstances. + * m_xim is winszxwinsz, mimage is 2*IMH wide x IMH high. + */ +static void +mxim_setup () +{ +#define SQR(x) ((x)*(x)) + int pixseeing = (int)(winsz*m_seeing/marsop->s_size/10); + int tb = option[FLIPTB_OPT]; + int lr = option[FLIPLR_OPT]; + unsigned char *see; /* seeing temp array */ + unsigned char *pict; /* working temp copy */ + double csh; + int lsh; + int x, y; + + /* check assumptions */ + if (!m_xim) { + printf ("No mars m_xim!\n"); + abort(); + } + if (!mimage) { + printf ("No mars mimage!\n"); + abort(); + } + + /* make working copy -- background is 0 */ + pict = (unsigned char *) XtCalloc (winsz*winsz, 1); + + /* make seeing temp array if non-0 seeing */ + see = pixseeing > 0 ? (unsigned char *) XtMalloc (winsz) : NULL; + + /* scan to build up the morphed relief map, and allow for flipping */ + for (y = -WINR; y < WINR; y++) { + int iy = (tb ? -y-1 : y) + WINR; + unsigned char *prow = &pict[iy*winsz]; + + pm_set ((y+WINR)*50/winsz); + + for (x = -WINR; x < WINR; x++) { + int ix = (lr ? -x-1 : x) + WINR; + unsigned char *px = &prow[ix]; + + if (x*x + y*y < WINR*WINR) { + double l, L; + int mx, my; + + if (xy2ll (x, y, &l, &L) == 0) { + /* find the mimage pixel at l/L */ + my = (int)(IMH*(PI/2-l)/PI); + L = degrad(LONG0) - L; + range (&L, 2*PI); + mx = (int)(IMW*L/(2*PI)); + *px = mimage[my*IMW+mx]; + if (!*px) + *px = 1; + } + } + } + } + + /* find cos of shadow foreshortening angle based on planar + * sun-mars-earth triangle and earth-sun == 1. + * if we are faking it, turn off the shadow. + */ + csh = fakepos ? 1.0 : (SQR(marsop->s_sdist) + SQR(marsop->s_edist) - 1) + / (2*marsop->s_sdist*marsop->s_edist); + + /* shadow is on left if elongation is positive and flipped lr + * or elongation is negative and not flipped lr. + */ + lsh = (marsop->s_elong > 0.0 && lr) || (marsop->s_elong < 0.0 && !lr); + + /* scan again to blur, add shadow and place real pixels */ + for (y = -WINR; y < WINR; y++) { + int iy = y + WINR; + unsigned char *prow = &pict[iy*winsz]; + int lx, rx; + + pm_set (50+(y+WINR)*50/winsz); + + if (lsh) { + lx = (int)(-csh*sqrt((double)(WINR*WINR - y*y)) + .5); + rx = WINR; + } else { + lx = -WINR; + rx = (int)(csh*sqrt((double)(WINR*WINR - y*y)) + .5); + } + + /* fill in seeing table for this row */ + if (pixseeing > 0) { + for (x = -WINR; x < WINR; x++) { + int ix = x + WINR; + int s = (pixseeing+1)/2; + int nsc = 0; + int sc = 0; + int dx, dy; + int step; + + /* is center within mars circle? */ + if (x*x + y*y > WINR*WINR) + continue; + + /* establish sample step size, some fraction of seeing */ + step = s/7; + if (step < 1) + step = 1; + + /* average a sampled circle about ix,iy */ + for (dy = -s; dy <= s; dy += step) { + int sy = y + dy; + int maxdxdx = s*s - dy*dy; + int maxsxsx = WINR*WINR - sy*sy; + unsigned char *py = &pict[(sy+WINR)*winsz]; + for (dx = -s; dx <= s; dx += step) { + if (dx*dx <= maxdxdx) { /* within seeing circle? */ + int sx = x + dx; + if (sx*sx <= maxsxsx) { /* within mars ? */ + sc += py[sx+WINR]; + nsc++; + } + } + } + } + + see[ix] = nsc > 0 ? sc/nsc : 0; + } + } + + for (x = -WINR; x < WINR; x++) { + int ix = x + WINR; + unsigned long p; + int c; + + if (x < lx || x > rx || x*x + y*y >= WINR*WINR) + c = 0; + else if (pixseeing > 0) + c = see[ix]; + else + c = prow[ix]; + + p = c ? mcolors[c*REDCOLORS/256] : mbg; + XPutPixel (m_xim, ix, iy, p); + } + } + + XtFree ((char *)pict); + if (see) + XtFree ((char *)see); +} + +/* convert [x,y] to true mars lat/long, in rads. + * x: centered, +right, -WINR .. x .. WINR + * y: centered, +down, -WINR .. y .. WINR + * return 0 if x,y are really over the planet, else -1. + * caller can be assured -PI/2 .. l .. PI/2 and 0 .. L .. 2*PI. + * N.B. it is up to the caller to deal wth flipping. + */ +static int +xy2ll (x, y, lp, Lp) +int x, y; +double *lp, *Lp; +{ + double R = sqrt ((double)(x*x + y*y)); + double a; + double ca, B; + + if (R >= WINR) + return (-1); + + if (y == 0) + a = x < 0 ? -PI/2 : PI/2; + else + a = atan2((double)x,(double)y); + solve_sphere (a, asin(R/WINR), m_sslt, m_cslt, &ca, &B); + + *lp = PI/2 - acos(ca); + *Lp = m_cml + B; + range (Lp, 2*PI); + + return (0); +} + +/* convert true mars lat/long, in rads, to [x,y]. + * x: centered, +right, -WINR .. x .. WINR + * y: centered, +down, -WINR .. y .. WINR + * return 0 if loc is on the front face, else -1 (but still compute x,y); + * N.B. it is up to the caller to deal wth flipping of the resulting locs. + */ +static int +ll2xy (l, L, xp, yp) +double l, L; +int *xp, *yp; +{ + double sR, cR; + double A, sA, cA; + + solve_sphere (L - m_cml, PI/2 - l, m_sslt, m_cslt, &cR, &A); + sR = sqrt(1.0 - cR*cR); + sA = sin(A); + cA = cos(A); + + *xp = (int)floor(WINR*sR*sA + 0.5); + *yp = (int)floor(WINR*sR*cA + 0.5); + + return (cR > 0 ? 0 : -1); +} + +/* report the location of x,y, which are with respect to mda_w. + * N.B. allow for flipping and the borders. + */ +static void +m_reportloc (x, y) +int x, y; +{ + double lt, lg; + + /* convert from mda_w X Windows coords to centered m_xim coords */ + x = XX2IX(x); + y = XY2IY(y); + + if (xy2ll (x, y, <, &lg) == 0) { + f_dm_angle (lat_w, lt); + f_dm_angle (lng_w, lg); + } else { + set_xmstring (lat_w, XmNlabelString, " "); + set_xmstring (lng_w, XmNlabelString, " "); + } +} + +/* find the smallest entry in mf[] that [x,y] is within. + * if find one return its *MFeature else NULL. + * x and y are in image coords. + * N.B. we allow for flipping. + */ +static MFeature * +closeFeature (x, y) +int x, y; +#define RSLOP 5 +{ + MFeature *mfp, *smallp; + double lt, lg; /* location of [x,y] */ + double forsh; /* foreshortening (cos of angle from center) */ + double minr; + + /* find forshortening */ + if (xy2ll (x, y, <, &lg) < 0) + return (NULL); + solve_sphere (lg - m_cml, PI/2-m_slt, sin(lt), cos(lt), &forsh, NULL); + + watch_cursor(1); + + minr = 1e6; + smallp = NULL; + for (mfp = mf; mfp < &mf[nmf]; mfp++) { + int sz; /* radius, in pixels */ + int dx, dy; + int fx, fy; + double r; + + /* find pixels from cursor */ + if (ll2xy (mfp->lt, mfp->lg, &fx, &fy) < 0) + continue; + dx = fx - x; + dy = fy - y; + r = sqrt((double)dx*dx + (double)dy*dy); + + /* it's a candidate if we are inside its (foreshortened) size + * or we are within RSLOP pixel of it. + */ + sz = (int)(mfp->dia*(winsz/MARSD/2)); + if (r <= sz*forsh && r < minr) { + smallp = mfp; + minr = r; + } + } + + watch_cursor(0); + + return (smallp); +} + +/* called when hit button 3 over image */ +static void +m_popup (ep) +XEvent *ep; +{ + XButtonEvent *bep; + int overmars; + int x, y; + + /* get m_da convert to image coords */ + bep = &ep->xbutton; + x = XX2IX(bep->x); + y = XY2IY(bep->y); + + overmars = xy2ll (x, y, &pu_l, &pu_L) == 0; + + if (overmars) { + MFeature *mfp = closeFeature (x, y); + char buf[32]; + + /* create popup menu first time */ + if (!pu_w) + m_create_popup(); + + if (mfp) { + char *type = mfsa[mfp->mfsai].type; + + set_xmstring (pu_name_w, XmNlabelString, mfp->name); + XtManageChild (pu_name_w); + + (void) sprintf (buf, "%.*s", (int)strcspn (type, " ,-"), type); + set_xmstring (pu_type_w, XmNlabelString, buf); + XtManageChild (pu_type_w); + + (void) sprintf (buf, "%.1f km", mfp->dia); + set_xmstring (pu_size_w, XmNlabelString, buf); + XtManageChild (pu_size_w); + + /* show feature's coords */ + fs_sexa (buf, raddeg(mfp->lt), 3, 60); + (void) strcat (buf, " N"); + set_xmstring (pu_l_w, XmNlabelString, buf); + fs_sexa (buf, raddeg(mfp->lg), 3, 60); + (void) strcat (buf, " W"); + set_xmstring (pu_L_w, XmNlabelString, buf); + } else { + XtUnmanageChild (pu_name_w); + XtUnmanageChild (pu_type_w); + XtUnmanageChild (pu_size_w); + + /* show cursors coords */ + fs_sexa (buf, raddeg(pu_l), 3, 3600); + (void) strcat (buf, " N"); + set_xmstring (pu_l_w, XmNlabelString, buf); + fs_sexa (buf, raddeg(pu_L), 3, 3600); + (void) strcat (buf, " W"); + set_xmstring (pu_L_w, XmNlabelString, buf); + } + + XmMenuPosition (pu_w, (XButtonPressedEvent *)ep); + XtManageChild (pu_w); + } +} + +/* create the surface popup menu */ +static void +m_create_popup() +{ + Widget w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + pu_w = XmCreatePopupMenu (mda_w, "MSKYPU", args, n); + + n = 0; + pu_name_w = XmCreateLabel (pu_w, "MName", args, n); + wtip (pu_name_w, "Name"); + + n = 0; + pu_type_w = XmCreateLabel (pu_w, "MType", args, n); + wtip (pu_type_w, "Type"); + + n = 0; + pu_size_w = XmCreateLabel (pu_w, "MSizeat", args, n); + wtip (pu_size_w, "Size"); + + n = 0; + pu_l_w = XmCreateLabel (pu_w, "MLat", args, n); + wtip (pu_l_w, "Latitude"); + XtManageChild (pu_l_w); + + n = 0; + pu_L_w = XmCreateLabel (pu_w, "MLong", args, n); + wtip (pu_L_w, "Longitude"); + XtManageChild (pu_L_w); + + n = 0; + w = XmCreateSeparator (pu_w, "MSKYPS", args, n); + XtManageChild (w); + + n = 0; + pu_aim_w = XmCreatePushButton (pu_w, "Point", args, n); + XtAddCallback (pu_aim_w, XmNactivateCallback, m_aim_cb, NULL); + wtip (pu_aim_w, "Center this location in the view"); + XtManageChild (pu_aim_w); +} + +/* given geocentric ra and dec find image [xy] on martian equitorial projection. + * [0,0] is center, +x martian right/west (celestial east) +y down/north. + * N.B. we do *not* allow for flipping here. + * N.B. this only works when ra and dec are near mars. + * N.B. this uses m_pa. + */ +static void +m_eqproject (np, ra, dec, xp, yp) +Now *np; +double ra, dec; +int *xp, *yp; +{ + double scale = winsz/degrad(marsop->s_size/3600.0); /* pix/rad */ + double xr, yr; + double x, y; + + /* find x and y so +x is celestial right/east and +y is down/north */ + x = scale*(ra - marsop->s_gaera)*cm_dec; + y = scale*(dec - marsop->s_gaedec); + + /* rotate by position angle, m_pa. + */ + xr = x*m_cpa - y*m_spa; + yr = x*m_spa + y*m_cpa; + + *xp = (int)floor(xr + 0.5); + *yp = (int)floor(yr + 0.5); +} + +/* return: + * *cmlp: Martian central meridian longitude; + * *sltp: subearth latitude + * *pap: position angle of N pole (ie, rads E of N) + * all angles in rads. + */ + +#define M_CML0 degrad(325.845) /* Mars' CML towards Aries at M_MJD0 */ +#define M_MJD0 (2418322.0 - MJD0) /* mjd date of M_CML0 */ +#define M_PER degrad(350.891962) /* Mars' rotation period, rads/day */ + +static void +mars_cml(np, cmlp, sltp, pap) +Now *np; +double *cmlp; +double *sltp; +double *pap; +{ + Obj *sp; + double a; /* angle from Sun ccw to Earth seen from Mars, rads */ + double Ae; /* planetocentric longitude of Earth from Mars, rads */ + double cml0; /* Mar's CML towards Aries, rads */ + double lc; /* Mars rotation correction for light travel, rads */ + double tmp; + + sp = db_basic (SUN); + db_update (sp); + + a = asin (sp->s_edist/marsop->s_edist*sin(marsop->s_hlong-sp->s_hlong)); + Ae = marsop->s_hlong + PI + a; + cml0 = M_CML0 + M_PER*(mjd-M_MJD0) + PI/2; + range(&cml0, 2*PI); + lc = LTAU * marsop->s_edist/SPD*M_PER; + *cmlp = cml0 - Ae - lc; + range (cmlp, 2*PI); + + solve_sphere (POLE_RA - marsop->s_gaera, PI/2-POLE_DEC, sm_dec, cm_dec, + &tmp, pap); + + /* from Green (1985) "Spherical Astronomy", Cambridge Univ. Press, + * p.428. Courtesy Jim Bell. + */ + *sltp = asin (-sin(POLE_DEC)*sin(marsop->s_gaedec) - + cos(POLE_DEC)*cos(marsop->s_gaedec) + * cos(marsop->s_gaera-POLE_RA)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: marsmenu.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.78 $ $Name: $"}; diff --git a/GUI/xephem/marsmmenu.c b/GUI/xephem/marsmmenu.c new file mode 100644 index 0000000..6cdbc6e --- /dev/null +++ b/GUI/xephem/marsmmenu.c @@ -0,0 +1,2161 @@ +/* code to manage the mars moon stuff. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +extern char marscategory[]; + + +#define MINR 10 /* min distance for picking, pixels */ + +/* local record of what is now on screen for easy id from mouse picking. + */ +typedef struct { + Obj o; /* copy of object info. + * copy from DB or, if mars moon, we fill in just + * o_name and s_mag/ra/dec + */ + int x, y; /* screen coord */ +} ScreenObj; + +/* malloced arrays for each view */ +typedef enum { + SO_MAIN, SO_SHADOW, SO_TOP, SO_N +} SOIdx; +static ScreenObj *screenobj[SO_N]; +static int nscreenobj[SO_N]; + +static void marsm_create_shell_w (void); +static void marsm_create_tvform_w (void); +static void marsm_create_msform_w (void); +static void marsm_set_buttons (int whether); +static void marsm_sstats_close_cb (Widget w, XtPointer client, + XtPointer call); +static void marsm_sstats_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_option_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_cpdmapping_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_scale_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_activate_cb (Widget w, XtPointer client, XtPointer call); +static void mt_unmap_cb (Widget w, XtPointer client, XtPointer call); +static void mt_map_cb (Widget w, XtPointer client, XtPointer call); +static void mt_track_size (void); +static void mt_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_close_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_anim_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_da_input_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_create_popup (void); +static void marsm_fill_popup (ScreenObj *sop, int justname); +static void marsm_help_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_goto_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_print_cb (Widget w, XtPointer client, XtPointer call); +static void marsm_print (void); +static void make_gcs (Widget w); +static void marsm_ps_annotate (Now *np); +static void marsm_calibline (Display *dsp, Drawable win, GC gc, int xc, + int yc, char *tag, int tw, int th, int l); +static void marsm_draw_map (Widget w, Obj *mop, double msize, + MoonData md[M_NMOONS]); +static int marsm_ano (double *mX, double *mZ, int *xp, int *yp, int w2x, + int arg); +static int mtm_ano (double *mX, double *mZ, int *xp, int *yp, int w2x, int arg); + +static void add_screenobj (SOIdx, Obj *op, int x, int y); +static void reset_screenobj (SOIdx); +static ScreenObj *close_screenobj (SOIdx, int x, int y); + +static void sky_background (Drawable win, unsigned w, unsigned h, int fmag, + double ra0, double dec0, double scale, double rad, int fliptb, int fliplr); + +static Widget mmshell_w; /* main shell */ +static Widget msform_w; /* statistics form */ +static Widget mmframe_w; /* main frame */ +static Widget mtform_w; /* top-view form */ +static Widget mtframe_w; /* top-view frame */ +static Widget mda_w; /* main drawing area */ +static Widget mtda_w; /* top-view drawing area */ +static Widget scale_w; /* size scale */ +static Widget limmag_w; /* limiting magnitude scale */ +static Widget dt_w; /* main date/time stamp widget */ +static Widget sdt_w; /* statistics date/time stamp widget */ +static Widget skybkg_w; /* toggle for controlling sky background */ +static Widget topview_w; /* toggle for controlling top view */ +static Widget tel_w; /* PB to send position to telescope */ +static Pixmap marsm_pm; /* main pixmap */ +static Pixmap mt_pm; /* top-view pixmap */ +static GC marsm_fgc, marsm_bgc; /* various colors and operators */ +static GC marsm_xgc; /* xor for moons and labels */ +static XFontStruct *marsm_fs; /* font for labels */ +static int marsm_cw, marsm_ch; /* size of label font */ +static int marsm_selecting; /* set while our fields are being selected */ +static int brmoons; /* whether we want to brightten the moons */ +static int tags; /* whether we want tags on the drawing */ +static int flip_tb; /* whether we want to flip top/bottom */ +static int flip_lr; /* whether we want to flip left/right */ +static int skybkg; /* whether we want sky background */ +static int topview; /* whether we want the top view */ + +static Widget mmpu_w; /* main popup */ +static Widget mmpu_name_w; /* popup name label */ +static Widget mmpu_ra_w; /* popup RA label */ +static Widget mmpu_dec_w; /* popup Dec label */ +static Widget mmpu_mag_w; /* popup Mag label */ + +#define MAXSCALE 10.0 /* max scale mag factor */ +#define NORM 100.0 /* max radius; used to normalize */ +#define MAPSCALE(r) ((r)*((int)nx)/NORM/2*scale) +#define XCORD(x) ((int)(((int)nx)/2.0 + ew*MAPSCALE(x) + 0.5)) +#define YCORD(y) ((int)(((int)ny)/2.0 - ns*MAPSCALE(y) + 0.5)) +#define ZCORD(z) ((int)(((int)ny)/2.0 + MAPSCALE(z) + 0.5)) +#define MOVIE_STEPSZ (1./12.)/* movie step size, hours */ +#define PRTR 20 /* printing table row, up from bottom */ +#define PRCW 7 /* printing char width */ + +/* field star support */ +static ObjF *fstars; /* malloced list of field stars, or NULL */ +static int nfstars; /* number of entries in fstars[] */ +static double fsdec, fsra; /* location when field stars were loaded */ +#define FSFOV degrad(1.0) /* size of FOV to fetch, rads */ +#define FSMAG 20.0 /* limiting mag for fetch */ +#define FSMOVE degrad(.2) /* reload when mars has moved this far, rads */ +static void marsm_loadfs (double ra, double dec); + +enum {CEV, CSV, CPS, CTR, CX, CY, CZ, CRA, CDEC, CMAG, CNum};/*marsm_w col idx*/ +static Widget marsm_w[M_NMOONS][CNum]; /* the data display widgets */ + +static double pole_ra, pole_dec; + +/* called when the mars moon view is activated from the mars pulldown. + * then we begin a life of our own as a toplevel shell. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, just insure up. + */ +void +marsm_manage () +{ + if (!mmshell_w) { + marsm_create_shell_w(); + marsm_create_msform_w(); + marsm_create_tvform_w(); + } + + XtPopup (mmshell_w, XtGrabNone); + set_something (mmshell_w, XmNiconic, (XtArgVal)False); + marsm_set_buttons(marsm_selecting); +} + +/* called to recompute and fill in values for the Mars moon menu. + * don't bother if it doesn't exist or is unmanaged now or no one is logging. + */ +void +marsm_update (np, how_much) +Now *np; +int how_much; +{ + static char fmt[] = "%7.3f"; + Obj *eop = db_basic (SUN); + Obj *mop = db_basic (MARS); + MoonData md[M_NMOONS]; + char *dir, buf[1024]; + int wantstats; + double msize; + int i; + + /* see if we should bother */ + if (!mmshell_w) + return; + wantstats = XtIsManaged(msform_w) || any_ison() || how_much; + if (!isUp(mmshell_w) && !wantstats) + return; + + watch_cursor (1); + + /* compute md[0].x/y/z/mag/ra/dec and md[1..NM-1].x/y/z/mag info */ + sprintf (buf, "%s/auxil", getShareDir()); + dir = expand_home (buf); + marsm_data (mjd, dir, eop, mop, &msize, &pole_ra, &pole_dec, md); + + if (wantstats) { + for (i = 0; i < M_NMOONS; i++) { + if (i > 0) { + f_double (marsm_w[i][CEV], "%1.0f", (double)md[i].evis); + f_double (marsm_w[i][CSV], "%1.0f", (double)md[i].svis); + f_double (marsm_w[i][CPS], "%1.0f", (double)md[i].pshad); + f_double (marsm_w[i][CTR], "%1.0f", (double)md[i].trans); + f_double (marsm_w[i][CX], fmt, md[i].x); + f_double (marsm_w[i][CY], fmt, md[i].y); + f_double (marsm_w[i][CZ], fmt, md[i].z); + } + f_double (marsm_w[i][CMAG], "%4.1f", md[i].mag); + f_ra (marsm_w[i][CRA], md[i].ra); + f_prdec (marsm_w[i][CDEC], md[i].dec); + } + + timestamp (np, sdt_w); + } + + if (isUp(mmshell_w)) { + marsm_draw_map (mda_w, mop, msize, md); + timestamp (np, dt_w); + } + + watch_cursor (0); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +marsm_newres() +{ + if (!mmshell_w) + return; + make_gcs (mda_w); + marsm_update (mm_get_now(), 1); +} + +/* called when the database has changed. + * if we are drawing background, we'd best redraw everything. + */ +/* ARGSUSED */ +void +marsm_newdb (appended) +int appended; +{ + if (skybkg) + marsm_update (mm_get_now(), 1); +} + +int +marsm_ison() +{ + return (isUp(mmshell_w)); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +marsm_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + marsm_selecting++; + else if (marsm_selecting > 0) + --marsm_selecting; + + if (mmshell_w) + if ((whether && marsm_selecting == 1) /* first one to want on */ + || (!whether && marsm_selecting == 0) /* last one to want off */) + marsm_set_buttons (whether); +} + +/* called to put up or remove the watch cursor. */ +void +marsm_cursor (c) +Cursor c; +{ + Window win; + + if (mmshell_w && (win = XtWindow(mmshell_w)) != 0) { + Display *dsp = XtDisplay(mmshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (msform_w && (win = XtWindow(msform_w)) != 0) { + Display *dsp = XtDisplay(msform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (mtform_w && (win = XtWindow(mtform_w)) != 0) { + Display *dsp = XtDisplay(mtform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the main moons shell */ +static void +marsm_create_shell_w() +{ + typedef struct { + char *name; /* toggle button instance name, or NULL */ + char *label; /* label */ + int *flagp; /* pointer to global flag, or NULL if none */ + Widget *wp; /* widget to save, or NULL */ + char *tip; /* widget tip */ + } Option; + static Option options[] = { + {NULL, "Top view", &topview, &topview_w, + "When on, show view looking from high above N pole"}, + {"SkyBkg", "Sky background", &skybkg, &skybkg_w, + "When on, sky will include database objects and Field Stars"}, + {"BrightMoons","Bright moons", &brmoons, NULL, + "Display moons disproportionately bright, even if below limit"}, + {"Tags", "Tags", &tags, NULL, + "Label each moon with its Roman Numeral sequence number"}, + {"FlipTB", "Flip T/B", &flip_tb, NULL, + "Flip the display top-to-bottom"}, + {"FlipLR", "Flip L/R", &flip_lr, NULL, + "Flip the display left-to-right"}, + }; + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "MarsMoons"}, + {"on Mouse...", "MarsMoons_mouse"}, + {"on Control...", "MarsMoons_control"}, + {"on View...", "MarsMoons_view"}, + }; + Widget w; + Widget mb_w, pd_w, cb_w; + Widget mmform_w; + XmString str; + Arg args[20]; + int n; + int i; + + /* create form and its shell */ + + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Mars moon view"); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "MarsMoon"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + mmshell_w = XtCreatePopupShell ("MarsMoons", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (mmshell_w); + set_something (mmshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (mmshell_w, XmNpopdownCallback, marsm_popdown_cb, 0); + sr_reg (mmshell_w, "XEphem*MarsMoons.width", marscategory, 0); + sr_reg (mmshell_w, "XEphem*MarsMoons.height", marscategory, 0); + sr_reg (mmshell_w, "XEphem*MarsMoons.x", marscategory, 0); + sr_reg (mmshell_w, "XEphem*MarsMoons.y", marscategory, 0); + + n = 0; + mmform_w = XmCreateForm (mmshell_w, "MarsMoons", args, n); + XtAddCallback (mmform_w, XmNhelpCallback, marsm_help_cb, 0); + XtManageChild (mmform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (mmform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + XtAddCallback (pd_w, XmNmapCallback, marsm_cpdmapping_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* add the "Print" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "P", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, marsm_print_cb, 0); + wtip (w, "Print front view and detail table"); + XtManageChild (w); + + /* add the "Anno" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "A", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* add the "Field stars" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "FS", args, n); + set_xmstring (w, XmNlabelString, "Field Stars..."); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)fs_manage,0); + wtip (w, "Define where GSC and PPM catalogs are to be found"); + XtManageChild (w); + + /* add the "GOTO" push button */ + + n = 0; + tel_w = XmCreatePushButton (pd_w, "GOTO", args, n); + set_xmstring (tel_w, XmNlabelString, "Telescope GoTo"); + XtAddCallback (tel_w, XmNactivateCallback, marsm_goto_cb, 0); + wtip (tel_w, "Send position to external application"); + XtManageChild (tel_w); + + /* add the "movie" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Anim", args, n); + set_xmstring (w, XmNlabelString, "Animation demo"); + XtAddCallback (w, XmNactivateCallback, marsm_anim_cb, 0); + wtip (w, "Start/Stop a fun time-lapse animation"); + XtManageChild (w); + + /* add the "Movie" push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "ML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, marsm_mloop_cb, 0); + wtip (w, "Add this scene to the movie loop"); + XtManageChild (w); + + /* add the "close" push button beneath a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, marsm_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + for (i = 0; i < XtNumber(options); i++) { + Option *op = &options[i]; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (pd_w, op->name ? op->name : "MMTB", + args, n); + XtAddCallback (w, XmNvalueChangedCallback, marsm_option_cb, + (XtPointer)(op->flagp)); + set_xmstring (w, XmNlabelString, op->label); + if (op->flagp) + *(op->flagp) = XmToggleButtonGetState(w); + if (op->wp) + *op->wp = w; + if (op->tip) + wtip (w, op->tip); + XtManageChild (w); + if (op->name) + sr_reg (w, NULL, marscategory, 1); + } + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the More Info control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Stats", args, n); + set_xmstring (w, XmNlabelString, "More info..."); + XtAddCallback (w, XmNactivateCallback, marsm_sstats_cb, NULL); + wtip (w, "Display additional details"); + XtManageChild (w); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, marsm_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make the date/time stamp label */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + dt_w = XmCreateLabel (mmform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* establishes size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make the scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 10); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + scale_w = XmCreateScale (mmform_w, "Scale", args, n); + XtAddCallback (scale_w, XmNdragCallback, marsm_scale_cb, 0); + XtAddCallback (scale_w, XmNvalueChangedCallback, marsm_scale_cb, 0); + wtip (scale_w, "Zoom in and out"); + XtManageChild (scale_w); + sr_reg (scale_w, NULL, marscategory, 0); + + /* make the limiting mag scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 20); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + limmag_w = XmCreateScale (mmform_w, "LimMag", args, n); + XtAddCallback (limmag_w, XmNdragCallback, marsm_scale_cb, 0); + XtAddCallback (limmag_w, XmNvalueChangedCallback, marsm_scale_cb, 0); + wtip (limmag_w, "Adjust the brightness and limiting magnitude"); + XtManageChild (limmag_w); + sr_reg (limmag_w, NULL, marscategory, 0); + + /* make a frame for the drawing area. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, scale_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, limmag_w); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + mmframe_w = XmCreateFrame (mmform_w, "UFrame", args, n); + XtManageChild (mmframe_w); + + /* make a drawing area for drawing the little map */ + + n = 0; + mda_w = XmCreateDrawingArea (mmframe_w, "MarsMoons", args, n); + XtAddCallback (mda_w, XmNexposeCallback, marsm_da_exp_cb, 0); + XtAddCallback (mda_w, XmNinputCallback, marsm_da_input_cb, + (XtPointer)SO_MAIN); + XtManageChild (mda_w); +} + +/* make the statistics form dialog */ +static void +marsm_create_msform_w() +{ + typedef struct { + int col; /* C* column code */ + int moononly; /* applies to moons only */ + char *collabel; /* column label */ + char *suffix; /* suffix for plot/list/search name */ + char *tip; /* widget tip */ + } MoonColumn; + static MoonColumn mc[] = { + {CEV, 1, "E", "EVis", + "Whether geometrically visible from Earth"}, + {CSV, 1, "S", "SVis", + "Whether in Sun light"}, + {CPS, 1, "P", "PShad", + "Whether shadow falls on planet"}, + {CTR, 1, "T", "Transit", + "Whether moon is transitting face of planet"}, + {CX, 1, "X (+E)", "X", + "Apparent displacement east of planetary center"}, + {CY, 1, "Y (+S)", "Y", + "Apparent displacement south of planetary center"}, + {CZ, 1, "Z (+front)", "Z", + "Mars radii towards Earth from planetary center"}, + {CRA, 0, "RA", "RA", + "Right Ascension (to Main's settings)"}, + {CDEC, 0, "Dec", "Dec", + "Declination (to Main's settings)"}, + {CMAG, 0, "Mag", "Mag", + "Apparent visual magnitude"}, + }; + MoonData md[M_NMOONS]; + Widget w; + Widget rc_w, title_w, sep_w; + Arg args[20]; + int n; + int i; + + /* just get moon names */ + marsm_data (0.0, NULL, NULL, NULL, NULL, NULL, NULL, md); + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + msform_w = XmCreateFormDialog (mmshell_w, "MarsMoonStats", args, n); + set_something (msform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg(XtParent(msform_w), "XEphem*MarsMoonStats.x", marscategory, 0); + sr_reg(XtParent(msform_w), "XEphem*MarsMoonStats.y", marscategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Mars Moon info"); n++; + XtSetValues (XtParent(msform_w), args, n); + + /* make table title label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + title_w = XmCreateLabel (msform_w, "UML", args, n); + XtManageChild (title_w); + set_xmstring (title_w, XmNlabelString,"Moon Positions (Martian radii)"); + + /* make the moon table, one column at a time */ + + /* moon designator column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (msform_w, "UDes", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "TL", args, n); + set_xmstring (w, XmNlabelString, "Tag"); + wtip (w, "Roman Numeral sequence designation of moon"); + XtManageChild (w); + + for (i = 0; i < M_NMOONS; i++) { + char *tag = md[i].tag; + + n = 0; + w = XmCreatePushButton (rc_w, "UTag", args, n); /*PB for sz */ + set_xmstring (w, XmNlabelString, tag ? tag : " "); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* moon name column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (msform_w, "UName", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "NL", args, n); + set_xmstring (w, XmNlabelString, "Name"); + wtip (w, "Common name of body"); + XtManageChild (w); + + for (i = 0; i < M_NMOONS; i++) { + n = 0; + w = XmCreatePushButton (rc_w, "UName", args, n); /*PB for sz*/ + set_xmstring (w, XmNlabelString, md[i].full); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* make each of the X/Y/Z/Mag/RA/DEC information columns */ + + for (i = 0; i < XtNumber (mc); i++) { + MoonColumn *mp = &mc[i]; + int j; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (msform_w, "MMIRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "ULab", args, n); + set_xmstring (w, XmNlabelString, mp->collabel); + if (mp->tip) + wtip (w, mp->tip); + XtManageChild (w); + + for (j = 0; j < M_NMOONS; j++) { + if (!mp->moononly || j > 0) { + char *sel; + + sel = XtMalloc (strlen(md[j].full) + strlen(mp->suffix)+2); + (void) sprintf (sel, "%s.%s", md[j].full, mp->suffix); + + n = 0; + XtSetArg (args[n], XmNuserData, sel); n++; + w = XmCreatePushButton(rc_w, "UPB", args, n); + XtAddCallback(w, XmNactivateCallback, marsm_activate_cb, 0); + marsm_w[j][mp->col] = w; + } else { + n = 0; + w = XmCreateLabel(rc_w, "UPB", args, n); + set_xmstring (w, XmNlabelString, " "); + } + XtManageChild (w); + } + } + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (msform_w, "Sep1", args, n); + XtManageChild (sep_w); + + /* make a date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sdt_w = XmCreateLabel (msform_w, "JDateStamp", args, n); + wtip (sdt_w, "Date and Time for which data are computed"); + XtManageChild (sdt_w); + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sdt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (msform_w, "Sep2", args, n); + XtManageChild (sep_w); + + /* make the close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + w = XmCreatePushButton (msform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, marsm_sstats_close_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* create mtform_w, the top view dialog */ +static void +marsm_create_tvform_w() +{ + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + mtform_w = XmCreateFormDialog (mmshell_w, "MarsMoonsTV", args, n); + set_something (mtform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (mtform_w, XmNunmapCallback, mt_unmap_cb, 0); + XtAddCallback (mtform_w, XmNmapCallback, mt_map_cb, NULL); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Mars Moons top view"); n++; + XtSetValues (XtParent(mtform_w), args, n); + + /* fill with a drawing area in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mtframe_w = XmCreateFrame (mtform_w, "MTVF", args, n); + XtManageChild (mtframe_w); + + n = 0; + mtda_w = XmCreateDrawingArea (mtframe_w, "MarsTop", args, n); + XtAddCallback (mtda_w, XmNexposeCallback, mt_da_exp_cb, NULL); + XtAddCallback (mtda_w, XmNinputCallback, marsm_da_input_cb, + (XtPointer)SO_TOP); + XtManageChild (mtda_w); +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +marsm_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + int i, j; + + for (i = 0; i < M_NMOONS; i++) + for (j = 0; j < CNum; j++) + if (marsm_w[i][j]) + buttonAsButton (marsm_w[i][j], whether); +} + +/* callback when the Close button is activated on the stats menu */ +/* ARGSUSED */ +static void +marsm_sstats_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (msform_w); +} + +/* callback when the the More Info button is activated */ +/* ARGSUSED */ +static void +marsm_sstats_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (msform_w); + marsm_set_buttons(marsm_selecting); +} + +/* callback when the control menu is becoming visible + */ +/* ARGSUSED */ +static void +marsm_cpdmapping_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtSetSensitive (tel_w, telIsOn()); +} + +/* callback from any of the option buttons. + * client points to global flag to set; some don't have any. + * in any case then just redraw everything. + */ +/* ARGSUSED */ +static void +marsm_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (client) { + int *flagp = (int *)client; + *flagp = XmToggleButtonGetState(w); + if (flagp == &topview) { + if (topview) { + if (!mtform_w) + marsm_create_tvform_w(); + XtManageChild (mtform_w); + } else + XtUnmanageChild (mtform_w); + } + } + + marsm_update (mm_get_now(), 1); +} + +/* callback from the scales changing. + * just redraw everything. + */ +/* ARGSUSED */ +static void +marsm_scale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + marsm_update (mm_get_now(), 1); +} + +/* callback from any of the data menu buttons being activated. + */ +/* ARGSUSED */ +static void +marsm_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (marsm_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback from either expose or resize of the topview. + */ +/* ARGSUSED */ +static void +mt_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected mmform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!mt_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (mt_pm) + XFreePixmap (dsp, mt_pm); + mt_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + mt_track_size(); + marsm_update (mm_get_now(), 1); + } else + XCopyArea (dsp, mt_pm, win, marsm_fgc, 0, 0, nx, ny, 0, 0); +} + +/* called whenever the topview scene is mapped. */ +/* ARGSUSED */ +static void +mt_map_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + mt_track_size(); +} + +/* set the width of the topview DrawingArea the same as the main window's. + * we also try to center it just above, but it doesn't always work. + */ +static void +mt_track_size() +{ + Dimension w, h; + Position mfx, mfy, mdx, mdy; + Position sdy; + Arg args[20]; + int n; + + /* set widths equal */ + n = 0; + XtSetArg (args[n], XmNwidth, &w); n++; + XtGetValues (mda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNwidth, w); n++; + XtSetValues (mtda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNheight, &h); n++; + XtGetValues (mtda_w, args, n); + + /* set locations -- allow for different stuff on top of drawingareas */ + n = 0; + XtSetArg (args[n], XmNx, &mfx); n++; + XtSetArg (args[n], XmNy, &mfy); n++; + XtGetValues (mmshell_w, args, n); + n = 0; + XtSetArg (args[n], XmNx, &mdx); n++; + XtSetArg (args[n], XmNy, &mdy); n++; + XtGetValues (mmframe_w, args, n); + n = 0; + XtSetArg (args[n], XmNy, &sdy); n++; + XtGetValues (mtframe_w, args, n); + + n = 0; + XtSetArg (args[n], XmNx, mfx+mdx); n++; + XtSetArg (args[n], XmNy, mfy - h - sdy - mdy - 20); n++; + XtSetValues (mtform_w, args, n); +} + +/* callback when topview dialog is unmapped */ +/* ARGSUSED */ +static void +mt_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (topview_w, False, True); +} + +/* callback when main shell is popped down */ +/* ARGSUSED */ +static void +marsm_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (msform_w); + XtUnmanageChild (mtform_w); + + if (marsm_pm) { + XFreePixmap (XtDisplay(mda_w), marsm_pm); + marsm_pm = (Pixmap) NULL; + } + + /* free any field stars */ + if (fstars) { + free ((void *)fstars); + fstars = NULL; + nfstars = 0; + } + + /* stop movie that might be running */ + mm_movie (0.0); +} + +/* callback from the main Close button */ +/* ARGSUSED */ +static void +marsm_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do all the work */ + XtPopdown (mmshell_w); +} + +/* callback to add scene to movie loop */ +/* ARGSUSED */ +static void +marsm_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (marsm_pm, dt_w); +} + +/* callback from the Movie button + */ +/* ARGSUSED */ +static void +marsm_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* best effect if turn off worrying about the sky background */ + skybkg = 0; + XmToggleButtonSetState (skybkg_w, False, False); + + mm_movie (MOVIE_STEPSZ); +} + +/* callback from either expose or resize of the drawing area. + */ +/* ARGSUSED */ +static void +marsm_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected mmform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!marsm_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (marsm_pm) + XFreePixmap (dsp, marsm_pm); + marsm_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + if (topview) + mt_track_size(); + marsm_update (mm_get_now(), 1); + } else + XCopyArea (dsp, marsm_pm, win, marsm_fgc, 0, 0, nx, ny, 0, 0); +} + +/* callback from mouse or keyboard input over either drawing area. + * client is one of SOIdx. + */ +/* ARGSUSED */ +static void +marsm_da_input_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + ScreenObj *sop; + SOIdx soidx; + XEvent *ev; + int x, y; + + /* get x and y value iff it was from mouse button 3 */ + if (c->reason != XmCR_INPUT) + return; + ev = c->event; + if (ev->xany.type != ButtonPress || ev->xbutton.button != 3) + return; + x = ev->xbutton.x; + y = ev->xbutton.y; + + /* find something close on the screen */ + soidx = (SOIdx) client; + sop = close_screenobj (soidx, x, y); + if (!sop && soidx == SO_MAIN) { + /* try shadows */ + soidx = SO_SHADOW; + sop = close_screenobj (soidx, x, y); + } + if (!sop) + return; + + /* put info in popup, mmpu_w, creating it first if necessary */ + if (!mmpu_w) + marsm_create_popup(); + marsm_fill_popup (sop, soidx == SO_SHADOW); + + /* put it on screen */ + XmMenuPosition (mmpu_w, (XButtonPressedEvent *)ev); + XtManageChild (mmpu_w); +} + +/* create the (unmanaged for now) popup menu in mmpu_w. */ +static void +marsm_create_popup() +{ + static Widget *puw[] = { + &mmpu_name_w, + &mmpu_ra_w, + &mmpu_dec_w, + &mmpu_mag_w, + }; + Widget w; + Arg args[20]; + int n; + int i; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + mmpu_w = XmCreatePopupMenu (mda_w, "UPU", args, n); + + /* stack everything up in labels */ + for (i = 0; i < XtNumber(puw); i++) { + n = 0; + w = XmCreateLabel (mmpu_w, "SPUL", args, n); + XtManageChild (w); + *puw[i] = w; + } +} + +/* put up a popup at ev with info about sop */ +static void +marsm_fill_popup (ScreenObj *sop, int justname) +{ + char *name; + double ra, dec, mag; + char buf[64], buf2[64]; + + name = sop->o.o_name; + (void) sprintf (buf2, "%.*s", MAXNM, name); + set_xmstring (mmpu_name_w, XmNlabelString, buf2); + + if (justname) { + XtUnmanageChild (mmpu_mag_w); + XtUnmanageChild (mmpu_ra_w); + XtUnmanageChild (mmpu_dec_w); + } else { + mag = get_mag(&sop->o); + (void) sprintf (buf2, " Mag: %.3g", mag); + set_xmstring (mmpu_mag_w, XmNlabelString, buf2); + XtManageChild (mmpu_mag_w); + + ra = sop->o.s_ra; + fs_ra (buf, ra); + (void) sprintf (buf2, " RA: %s", buf); + set_xmstring (mmpu_ra_w, XmNlabelString, buf2); + XtManageChild (mmpu_ra_w); + + dec = sop->o.s_dec; + fs_prdec (buf, dec); + (void) sprintf (buf2, " Dec: %s", buf); + set_xmstring (mmpu_dec_w, XmNlabelString, buf2); + XtManageChild (mmpu_dec_w); + + } +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +marsm_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This is a simple schematic depiction of Mars and its moons.", +}; + + hlp_dialog ("MarsMoons", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +marsm_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback from the goto control. + */ +/* ARGSUSED */ +static void +marsm_goto_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op = db_basic (MARS); + telGoto (op); +} + +/* add one entry to the given global screenobj array. + */ +static void +add_screenobj (soidx, op, x, y) +SOIdx soidx; +Obj *op; +int x, y; +{ + char *mem = (char *) screenobj[soidx]; + int nmem = nscreenobj[soidx]; + ScreenObj *sop; + + /* grow screenobj by one */ + if (mem) + mem = realloc ((char *)mem, (nmem+1)*sizeof(ScreenObj)); + else + mem = malloc (sizeof(ScreenObj)); + if (!mem) { + xe_msg (0, "Out of memory -- %s will not be pickable", op->o_name); + return; + } + screenobj[soidx] = (ScreenObj *) mem; + + sop = &screenobj[soidx][nscreenobj[soidx]++]; + + /* fill new entry */ + sop->o = *op; + sop->x = x; + sop->y = y; +} + +/* reclaim any existing screenobj entries from the given collection */ +static void +reset_screenobj(soidx) +SOIdx soidx; +{ + if (screenobj[soidx]) { + free ((char *)screenobj[soidx]); + screenobj[soidx] = NULL; + } + nscreenobj[soidx] = 0; +} + +/* find the entry in the given screenobj closest to [x,y] within MINR. + * if found return the ScreenObj *, else NULL. + */ +static ScreenObj * +close_screenobj (soidx, x, y) +SOIdx soidx; +int x, y; +{ + ScreenObj *scop = screenobj[soidx]; + ScreenObj *minsop = NULL; + int nobj = nscreenobj[soidx]; + int minr = 2*MINR; + int i; + + for (i = 0; i < nobj; i++) { + ScreenObj *sop = &scop[i]; + int r = abs(x - sop->x) + abs(y - sop->y); + if (r < minr) { + minr = r; + minsop = sop; + } + } + if (minr <= MINR) + return (minsop); + else + return (NULL); +} + +/* callback from Print control. + */ +/* ARGSUSED */ +static void +marsm_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Martian moons", marsm_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +marsm_print () +{ + Display *dsp = XtDisplay (mda_w); + Now *np = mm_get_now(); + unsigned int w, h, bw, d; + Window root; + int x, y; + + if (!marsm_ison()) { + xe_msg (1, "Mars moons must be open to save a file."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get size of the rendering area */ + XGetGeometry(dsp, marsm_pm, &root, &x, &y, &w, &h, &bw, &d); + + /* draw in an area 5.5w x 5.5h centered 1in down from top */ + if (w >= h) + XPSXBegin (marsm_pm, 0, 0, w, h, 1*72, 10*72, (int)(5.5*72)); + else { + int pw = (int)(72*5.5*w/h+.5); /* width on paper when 5.5 hi */ + XPSXBegin (marsm_pm, 0, 0, w, h, (int)((8.5*72-pw)/2), 10*72, pw); + } + + /* redraw */ + marsm_update (np, 1); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + marsm_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +marsm_ps_annotate (np) +Now *np; +{ + int ctrx = (int)(8.5*72/2); + Obj *eop = db_basic (SUN); + Obj *mop = db_basic (MARS); + MoonData md[M_NMOONS]; + double msize; + double tzmjd; + char *bp, buf[256], buf2[32], dir[256]; + int n, x, y, i; + + /* compute all info */ + sprintf (buf, "%s/auxil", getShareDir()); + bp = expand_home (buf); + marsm_data (mjd, dir, eop, mop, &msize, &pole_ra, &pole_dec, md); + + /* border */ + y = (int)AROWY(PRTR+.5); + sprintf (buf, "newpath 72 %d moveto 540 %d lineto stroke\n", y, y); + XPSDirect (buf); + + /* title */ + y = AROWY(PRTR-2); + if (pref_get(PREF_ZONE) == PREF_UTCTZ) { + tzmjd = mjd; + bp = "UTC"; + } else { + tzmjd = mjd-tz/24; + bp = tznm; + } + fs_time (buf, mjd_hr(tzmjd)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(tzmjd)); + sprintf (dir,"(XEphem Mars View at %s %s %s, JD %13.5f) %d %d cstr\n", + buf, buf2, bp, mjd+MJD0, ctrx, y); + XPSDirect (dir); + + /* location if topocentric */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + char s, *site; + + bp = buf; + bp += sprintf (bp, "From "); + + site = mm_getsite(); + if (site) + bp += sprintf (bp, "%s at ", XPSCleanStr(site,strlen(site))); + + /* N.B. without the s= business the sign is printed wrong!! */ + + fs_sexa (buf2, raddeg(fabs(lat)), 3, 3600); + bp += sprintf (bp, "Latitude %s %c ", buf2, s=(lat<0 ? 'S' : 'N')); + + fs_sexa (buf2, raddeg(fabs(lng)), 4, 3600); + bp += sprintf (bp, "Longitude %s %c", buf2, s=(lng<0 ? 'W' : 'E')); + + sprintf (dir, "(%s) %d %d cstr\n", buf, ctrx, AROWY(PRTR-4)); + XPSDirect (dir); + } + + /* table heading */ + bp = buf; + bp += sprintf (bp, "%s ", pref_get(PREF_EQUATORIAL) == PREF_TOPO ? + "Topocentric" : "Geocentric"); + if (epoch == EOD) + bp += sprintf (bp, "Apparent EOD"); + else { + double tmp; + mjd_year (epoch, &tmp); + bp += sprintf (bp, "Astrometric %.2f", tmp); + } + y = AROWY(PRTR-5); + sprintf (dir, "(%s Moon Positions, XYZ in Martian radii) %d %d cstr\n", + buf, ctrx,y); + XPSDirect (dir); + + /* stats for each row */ + for (i = 0; i < M_NMOONS; i++) { + y = AROWY(PRTR-7-i); + x = 65; + + if (i == 0) { + sprintf (dir, "(Tag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + if (md[i].tag) { + n = sprintf (buf, "%-4s", md[i].tag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } else + n = 4; + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Name) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%-9s", md[i].full); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].evis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].svis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(P) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].pshad); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(T) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].trans); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( X +E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].x); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Y +S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].y); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Z +front) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].z); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( RA) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, radhr(md[i].ra), 2, 360000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Dec) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, raddeg(md[i].dec), 3, 36000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Mag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + sprintf (buf, "%4.1f ", md[i].mag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } +} + +/* given the loc of the moons, draw a nifty little picture. + * also save resulting screen locs of everything in the screenobj array. + * scale of the locations is in terms of Mars radii == 1. + * unflipped view is S up, E right. + * planet itself is in md[0], moons in md[1..NM-1]. + * +md[].x: East, mars radii + * +md[].y: South, mars radii + * +md[].z: in front, mars radii + */ +static void +marsm_draw_map (w, mop, msize, md) +Widget w; +Obj *mop; +double msize; +MoonData md[M_NMOONS]; +{ + Display *dsp = XtDisplay(w); + Window win; + Window root; + double scale; + int sv; + int fmag; + char c; + int x, y; + unsigned int nx, ny, bw, d; + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + int scale1; + int i; + + /* first the main graphic */ + win = XtWindow (mda_w); + + if (!marsm_fgc) + make_gcs(w); + + XmScaleGetValue (limmag_w, &fmag); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + /* get size and erase */ + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, marsm_pm, marsm_bgc, 0, 0, nx, ny); + scale1 = (int)floor(MAPSCALE(1)+0.5); + + /* prepare for a new list of things on the screen */ + reset_screenobj(SO_MAIN); + reset_screenobj(SO_SHADOW); + + /* draw Mars in center with unit radius */ + XPSFillArc(dsp, marsm_pm, marsm_fgc, nx/2-scale1, ny/2-scale1, + 2*scale1-1, 2*scale1-1, 0, 360*64); + add_screenobj (SO_MAIN, mop, nx/2, ny/2); + + /* draw background objects, if desired + * go out plenty wide to pick up moon during occultations. + */ + if (skybkg) + sky_background(marsm_pm, nx, ny, fmag, md[0].ra, md[0].dec, + msize/MAPSCALE(2), degrad(.5), flip_tb, flip_lr); + + /* draw labels */ + c = flip_lr ? 'W' : 'E'; + XPSDrawString(dsp, marsm_pm, marsm_fgc, nx-marsm_cw-1, ny/2-2, &c, 1); + c = flip_tb ? 'N' : 'S'; + XPSDrawString(dsp, marsm_pm, marsm_fgc, (nx-marsm_cw)/2-1, + marsm_fs->ascent, &c, 1); + + /* draw 1' calibration line */ + if (tags) + marsm_calibline (dsp, marsm_pm, marsm_fgc, nx/2, 5*ny/6, "1'", + marsm_cw*2, marsm_ch+4, + (int)MAPSCALE(degrad(1.0/60.0)/(msize/2))); + + /* draw each moon and its shadow + */ + for (i = 1; i < M_NMOONS; i++) { + double mx = md[i].x; + double my = md[i].y; + double mag = md[i].mag; + int diam; + Obj o; + + /* skip if behind or in shadow */ + if (!md[i].evis || !md[i].svis) + continue; + + diam = magdiam (fmag, 1, msize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + /* moon */ + x = XCORD(mx); + y = YCORD(my); + if (diam == 1) + XPSDrawPoint(dsp, marsm_pm, marsm_xgc, x, y); + else + XPSDrawStar (dsp, marsm_pm, marsm_xgc, x-diam/2, y-diam/2, + diam); + + /* add object to list of screen objects drawn */ + memset (&o, 0, sizeof(0)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_MAIN, &o, x, y); + + /* shadow, if in front */ + if (md[i].pshad) { + int scx = XCORD(md[i].sx); + int scy = YCORD(md[i].sy); + + XPSDrawStar (dsp, marsm_pm, marsm_bgc, scx-diam/2, scy-diam/2, + diam); + sprintf (o.o_name, "%s shadow", md[i].full); + add_screenobj (SO_SHADOW, &o, scx, scy); + } + + if (tags && md[i].tag) + XDrawString(dsp, marsm_pm, marsm_xgc, x-marsm_cw/2, + y+2*marsm_ch, md[i].tag, strlen(md[i].tag)); + } + + /* user annotation */ + ano_draw (mda_w, marsm_pm, marsm_ano, 0); + + XCopyArea (dsp, marsm_pm, win, marsm_fgc, 0, 0, nx, ny, 0, 0); + + /* then the top view, if desired */ + + if (!topview || !mt_pm) /* let expose make new pixmap */ + return; + + /* get size and erase */ + win = XtWindow (mtda_w); + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, mt_pm, marsm_bgc, 0, 0, nx, ny); + + /* draw Mars in center with unit radius */ + i = (int)(ew*64*raddeg(asin(sin(degrad(mop->s_elong))/mop->s_sdist))); + XPSFillArc(dsp, mt_pm, marsm_fgc, nx/2-scale1, ny/2-scale1, 2*scale1-1, + 2*scale1-1, -i, -180*64); + reset_screenobj(SO_TOP); + add_screenobj (SO_TOP, mop, nx/2, ny/2); + + /* draw each moon + */ + for (i = 1; i < M_NMOONS; i++) { + double mx = md[i].x; + double mz = md[i].z; + double mag = md[i].mag; + int diam; + Obj o; + + if (!md[i].svis) + continue; + + diam = magdiam (fmag, 1, msize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + x = XCORD(mx); + y = ZCORD(mz); + if (diam == 1) + XDrawPoint (dsp, mt_pm, marsm_xgc, x, y); + else + XFillArc (dsp, mt_pm, marsm_xgc, x-diam/2, y-diam/2, diam, + diam, 0, 360*64); + + /* add object to list of screen objects drawn */ + memset (&o, 0, sizeof(0)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_TOP, &o, x, y); + + if (tags && md[i].tag) + XDrawString(dsp, mt_pm, marsm_xgc, x-marsm_cw/2, y+2*marsm_ch, + md[i].tag, strlen(md[i].tag)); + } + + /* draw label towards earth */ + if (tags) { + XPoint xp[5]; + + XDrawString(dsp, mt_pm, marsm_fgc, nx/2, ny-marsm_ch, "Earth", 5); + xp[0].x = nx/2 - 15; xp[0].y = ny - 2*marsm_ch; + xp[1].x = 0; xp[1].y = 3*marsm_ch/2; + xp[2].x = -5; xp[2].y = -3*marsm_ch/4; + xp[3].x = 10; xp[3].y = 0; + xp[4].x = -5; xp[4].y = 3*marsm_ch/4; + XDrawLines (dsp, mt_pm, marsm_fgc, xp, 5, CoordModePrevious); + } + + /* user annotation */ + ano_draw (mtda_w, mt_pm, mtm_ano, 0); + + XCopyArea (dsp, mt_pm, win, marsm_fgc, 0, 0, nx, ny, 0, 0); +} + +/* convert mars X/Y to/from X windows coords depending on w2x. + * return whether visible. + */ +static int +marsm_ano (double *mX, double *mY, int *xp, int *yp, int w2x, int arg) +{ + Display *dsp = XtDisplay (mda_w); + Window win = XtWindow (mda_w); + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + unsigned int nx, ny, bw, d; + Window root; + double scale; + int x, y; + int sv; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + if (w2x) { + *xp = XCORD(*mX); + *yp = YCORD(*mY); + } else { + *mX = 2*NORM*(*xp-(int)nx/2.0)/(ew*(int)nx*scale); + *mY = 2*NORM*((int)ny/2.0-*yp)/(ns*(int)ny*scale); + } + + return (*xp>=0 && *xp=0 && *yp=0 && *xp=0 && *ypfid; + marsm_fgc = XCreateGC (dsp, win, gcm, &gcv); + marsm_cw = marsm_fs->max_bounds.width; + marsm_ch = marsm_fs->max_bounds.ascent + marsm_fs->max_bounds.descent; + + gcm = GCForeground; + (void) get_color_resource (w, "MarsBackground", &bg); + gcv.foreground = bg; + marsm_bgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground | GCFunction | GCFont; + gcv.foreground = fg ^ bg; + gcv.function = GXxor; + gcv.font = marsm_fs->fid; + marsm_xgc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* draw a calibration line l pixels long centered at [xc,yc] marked with tag + * in a bounding box tw x th. + */ +static void +marsm_calibline (dsp, win, gc, xc, yc, tag, tw, th, l) +Display *dsp; +Drawable win; +GC gc; +int xc, yc; +char *tag; +int tw, th; +int l; +{ + int lx = xc - l/2; + int rx = lx + l; + int i; + + XDrawLine (dsp, win, gc, lx, yc, rx, yc); + + for (i = 0; i <= 6; i++) { + int x = lx+i*l/6; + int dy = 3 + ((i%6)?0:3); + + XDrawLine (dsp, win, gc, x, yc-dy, x, yc+dy); + } + + XDrawString (dsp, win, gc, xc-tw/2, yc+th, tag, strlen(tag)); +} + +/* draw all database objects in a small sky patch about the given center. + * get field stars too if enabled and we have moved enough. + * save objects and screen locs in the global screenobj array for picking. + * this is used to draw the backgrounds for the planet closeups. + * Based on work by: Dan Bruton + */ +static void +sky_background (win, w, h, fmag, ra0,dec0,scale,rad,fliptb,fliplr) +Drawable win; /* window to draw on */ +unsigned w, h; /* window size */ +int fmag; /* faintest magnitude to display */ +double ra0, dec0; /* center of patch, rads */ +double scale; /* rads per pixel */ +double rad; /* maximum radius to draw away from ra0/dec0, rads */ +int fliptb, fliplr; /* flip direction; default is S up E right */ +{ + static int before; + double cdec0 = cos(dec0); + DBScan dbs; + Obj *op; + double hfov = w * scale; + double vfov = h * scale; + + if (!before && pref_get(PREF_EQUATORIAL) == PREF_GEO) { + xe_msg (1, "Equatorial preference should probably be set to Topocentric"); + before = 1; + } + + /* update field star list */ + marsm_loadfs (ra0, dec0); + + /* scan the database and draw whatever is near */ + for (db_scaninit(&dbs, ALLM, fstars, nfstars); + (op = db_scan (&dbs)) != NULL; ) { + double dra, ddec; + GC gc; + int dx, dy, x, y; + int diam; + + if (is_planet (op, MARS)) { + /* we draw it elsewhere */ + continue; + } + + db_update (op); + + /* find size, in pixels. */ + diam = magdiam (fmag, 1, scale, get_mag(op), + degrad(op->s_size/3600.0)); + if (diam <= 0) + continue; + + /* find x/y location if it's in the general area */ + dra = op->s_ra - ra0; /* + E */ + ddec = dec0 - op->s_dec; /* + S */ + if (fabs(ddec) > rad || delra(dra)*cdec0 > rad) + continue; + dx = (int)(dra/scale); + dy = (int)(ddec/scale); + x = fliplr ? (int)w/2-dx : (int)w/2+dx; + y = fliptb ? (int)h/2+dy : (int)h/2-dy; + + /* pick a gc */ + obj_pickgc(op, toplevel_w, &gc); + + /* draw 'er */ + sv_draw_obj_x (XtD, win, gc, op, x, y, diam, 0, fliptb, !fliplr, 0, 1, dec0, ra0, vfov, hfov, w, h); + + /* save 'er */ + add_screenobj (SO_MAIN, op, x, y); + } + + sv_draw_obj (XtD, win, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +/* load field stars around the given location, unless current set is + * already close enough. + */ +static void +marsm_loadfs (ra, dec) +double ra, dec; +{ + Now *np = mm_get_now(); + + if (fstars && fabs(dec-fsdec) 0) { + xe_msg (0, "Mars Moon View added %d field stars",nfstars); + fsdec = dec; + fsra = ra; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: marsmmenu.c,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.45 $ $Name: $"}; diff --git a/GUI/xephem/moonmenu.c b/GUI/xephem/moonmenu.c new file mode 100644 index 0000000..7474237 --- /dev/null +++ b/GUI/xephem/moonmenu.c @@ -0,0 +1,4014 @@ +/* code to manage the stuff on the moon display. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + +typedef struct { + double curlt, curlg; /* lat/long under cursor */ + double cursunalt; /* sun alt under cursor now */ + double curnsrt; /* next sunrise under cursor, tz mjd */ + double curnsst; /* next sunset under cursor, tz mjd */ + double srlng; /* longitude of the rising sun */ + double sslat; /* lat of subsolar point */ + double llat, llong; /* current libration in lat and long */ + double limb; /* limb angle, rads ccw from up */ + double tilt; /* angle of limb tilt, degrees towards earth */ + double age; /* days since new moon */ +} MoonInfo; + +typedef struct { + Obj *op; /* points into real db for more info */ + int x, y; /* X location on mda_w */ +} SkyObj; + +static SkyObj *skyobjs; /* malloced list of objects in sky background */ +static int nskyobjs; /* number of objects in skyobjs[] list */ +static char mooncategory[] = "Moon"; /* Save category */ + +#define MAXR 10 /* max gap when picking sky objects, pixels */ + +static void resetSkyObj (void); +static void addSkyObj (Obj *op, int x, int y); +static FILE *mlo_open (char *base); +static int mlo_installed(void); +static Obj *closeSkyObj (int x, int y); +static void fill_skypopup (Obj *op); +static void m_create_skypopup (void); + +static void m_create_shell (void); +static void mlo_create_shell (void); +static void m_create_msform (void); +static void m_create_esform (void); +static void m_set_buttons (int whether); +static void m_eshine_cb (Widget w, XtPointer client, XtPointer call); +static void m_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void m_eshineclose_cb (Widget w, XtPointer client, XtPointer call); +static void m_eshineup_cb (Widget w, XtPointer client, XtPointer call); +static void m_anim_cb (Widget w, XtPointer client, XtPointer call); +static void m_elab_cb (Widget w, XtPointer client, XtPointer call); +static void m_select_cb (Widget w, XtPointer client, XtPointer call); +static void m_mstats_cb (Widget w, XtPointer client, XtPointer call); +static void m_mstats_close_cb (Widget w, XtPointer client, XtPointer call); +static void m_activate_cb (Widget w, XtPointer client, XtPointer call); +static void m_print_cb (Widget w, XtPointer client, XtPointer call); +static void m_print (void); +static void m_ps_annotate (void); +static void m_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void mlo_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void mlo_select_cb (Widget w, XtPointer client, XtPointer call); +static void mlo_ann_cb (Widget w, XtPointer client, XtPointer call); +static void m_close_cb (Widget w, XtPointer client, XtPointer call); +static void mlo_close_cb (Widget w, XtPointer client, XtPointer call); +static void m_init_gcs (void); +static void m_init_gcs (void); +static void m_help_cb (Widget w, XtPointer client, XtPointer call); +static void m_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void m_pl_cb (Widget w, XtPointer client, XtPointer call); +static void m_copy_cb (Widget w, XtPointer client, XtPointer call); +static void m_showlo_cb (Widget w, XtPointer client, XtPointer call); +static void m_option_cb (Widget w, XtPointer client, XtPointer call); +static void m_shrink_cb (Widget w, XtPointer client, XtPointer call); +static void m_sizewidgets (void); +static int xy2ll (int x, int y, double *ltp, double *lgp); +static int ll2xy (double lt, double lg, int *xp, int *yp); +static int overMoon (int x, int y); +static void m_pointer_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static void m_exp_cb (Widget w, XtPointer client, XtPointer call); +static void m_redraw (void); +static void m_refresh (XExposeEvent *ep); +static void m_getsize (Drawable d, unsigned *wp, unsigned *hp,unsigned *dp); +static void m_info (Now *np); +static void m_pinfo (void); +static void m_draw (void); +static int mxim_create (void); +static void image_setup (void); +static int m_esedges (int y, double sinsrl, int right, int *lxp, int *rxp); +static void m_clip_mask_setup (void); +static void m_free_clip_mask (void); +static int m_shrink (int f); +static void mBWdither (void); +static void m_resize (unsigned char *in, int nr, int nc, int f, + unsigned char *out); +static void m_umbra (void); +static void fliptb (void); +static void fliplr (void); +static void m_fillSL(void); +static void mi_draw (void); +static int m_ano (double *latp, double *lngp, int *xp, int *yp, int w2x, + int arg); +static void m_orientation (void); +static void m_labels (void); +static void m_sky (void); +static void m_grid (void); +static void m_sub (void); +static void m_mark_libr (void); +static void m_reportloc (Display *dsp, Window win, int x, int y); + +static void makeGlassImage (Display *dsp); +static void makeGlassGC (Display *dsp, Window win); +static void doGlass (Display *dsp, Window win, int b1p, int m1, + int b1r, int wx, int wy); +static void fillGlass (int wx, int wy); +static void m_readdb (void); +static void m_freedb (void); +static void m_popup (XEvent *ep); + +/* stuff for the moon image. + * obviously, size and centering metrics are tuned to a particular image. + */ +#define XEVERS 3 /* required version in header */ +#define MOONRAD 311 /* radius of moon image, pixels */ +#define TOPMARG 25 /* top margin of moon image, pixels */ +#define LEFTMARG 25 /* left margin of moon image, pixels */ +#define MNROWS 670 /* number of rows in moon image */ +#define MNCOLS 670 /* number of columns in moon image */ +#define BORD 150 /* extra drawing area border for labels/stars */ +#define CLNG degrad(-4.6) /* longitude of image center, rads east */ +#define CLAT degrad(1.0) /* latitude of image center, rads north */ +#define MOVIE_STEPSZ (2.) /* movie step size without stars, hours */ +#define MOVIE_SSTEPSZ (1./60) /* movie step size with stars, hours */ + +static unsigned char *mimage; /* malloced array of full-size moon image */ +static Pixel *mgray; /* gray-scale ramp for drawing image */ +static int nmgray; /* number of pixels usable in mgray[] */ +static Pixel mbg; /* background color for image */ +static int mdepth; /* depth of image, in bits */ +static int mbpp; /* bits per pixel in image: 1, 8, 16 or 32 */ +static int topmarg, leftmarg; /* current TOPMARG/LEFTMARG after resize */ +static int moonrad; /* current MOONRAD after resize, pixels */ +static int mnrows, mncols; /* current size of image after resize, pixels */ +static XImage *m_xim; /* XImage of moon now at current size */ +static int mshrink; /* current shrink factor: 1 .. MAXSHRINK */ +static MoonInfo minfo; /* stats about the current situation */ +static Pixmap m_clip_mask; /* clipping mask used for creating m_pm from m_xim */ + +#define MAXSHRINK 6 /* max shrink factor */ +#define SYNP 29.53 /* average synodic period, days */ +#define SIDP 27.32 /* average sidereal period, days */ +#define MINKM 125 /* smallest feature we ever label, km */ +#define ESHINEF 10 /* earthshine factor range: 0 .. this */ +#define LMFRAC 40 /* libr marker is 1/x this of total size */ +#define LGAP 20 /* gap between NSEW labels and image edge */ +#define FMAG 12 /* faintest mag of sky background object */ + +/* main's widgets */ +static Widget mshell_w; /* main moon shell */ +static Widget msform_w; /* statistics form dialog */ +static Widget msw_w; /* main scrolled window */ +static Widget msl_w; /* main scrolled list */ +static Widget mda_w; /* image view DrawingArea */ +static Pixmap m_pm; /* image view staging pixmap */ +static Widget dt_w; /* main date/time stamp widget */ +static Widget sdt_w; /* statistics date/time stamp widget */ + +/* "More info" widgets */ +static Widget srlng_w; /* sunrise longitude PB widget */ +static Widget sslat_w; /* subsolar latitude PB widget */ +static Widget llat_w; /* lib in lat PB widget */ +static Widget llong_w; /* lib in long PB widget */ +static Widget limb_w; /* limb angle PB widget */ +static Widget lib_w; /* total lib PB widget */ +static Widget age_w; /* days since new moon PB widget */ +static Widget sunalt_w; /* sun altitude under cursor */ +static Widget infot_w; /* info title label */ +static Widget lat_w, lng_w; /* lat/long under cursor */ +static Widget nsrt_w, nsrd_w; /* next sunrise time/date under cursor */ +static Widget nsst_w, nssd_w; /* next sunset time/date under cursor */ + +/* lo shell widgets */ +static Widget mlo_shell_w; /* main shell */ +static Widget mlo_sw_w; /* scrolled window for pixmap image */ +static Widget mlo_pml_w; /* L for pixmap image */ +static Widget mlo_sl_w; /* scrolled list to show choices */ +static Widget mlo_ann_w; /* TB whether to show annotated version */ + +/* earthshine widgets */ +static Widget esform_w; /* main dialog */ +static Widget eshine_w; /* earthshine factor scale */ + +/* lunar surface popup's widgets */ +static Widget pu_w; /* main popup */ +static Widget pu_name_w; /* popup name label */ +static Widget pu_type_w; /* popup type label */ +static Widget pu_lat_w; /* popup latitude label */ +static Widget pu_lng_w; /* popup longitude label */ +static Widget pu_alt_w; /* popup sun altitude label */ +static Widget pu_pl_w; /* popup label TB */ +static Widget pu_copy_w; /* popup copy PB */ +static Widget pu_showlo_w; /* popup show lunar orbiter image PB */ + +/* sky background object's widgets */ +static Widget skypu_w; /* main popup */ +static Widget skypu_name_w; /* popup name label */ +static Widget skypu_mag_w; /* popup mag label */ +static Obj *skypu_op; /* current object being referred to */ + +/* field star support */ +static ObjF *fstars; /* malloced list of field stars, or NULL */ +static int nfstars; /* number of entries in fstars[] */ +static double fsdec, fsra; /* location when field stars were loaded */ +#define FSFOV degrad(3.0) /* size of FOV to fetch, rads */ +#define FSMAG ((double)FMAG) /* limiting mag for fetch */ +#define FSMOVE degrad(.2) /* reload when moon has moved this far, rads */ +static void m_loadfs (Now *np, double ra, double dec); + +static GC m_fgc, m_bgc, m_agc; /* various GCs */ +static XFontStruct *m_fsp; /* label font info */ + +static int m_selecting; /* set while our fields are being selected */ + +static XImage *glass_xim; /* glass XImage -- 0 means new or can't */ +static GC glassGC; /* GC for glass border */ + +#define GLASSSZ 50 /* mag glass width and heigth, pixels */ +#define GLASSMAG 2 /* mag glass factor (may be any integer > 0) */ + +/* options list */ +typedef enum { + SPACECRAFT_OPT, LABELS_OPT, GRID_OPT, FLIPLR_OPT, FLIPTB_OPT, SKY_OPT, + UMBRA_OPT, N_OPT +} Option; +static int option[N_OPT]; +static Widget option_w[N_OPT]; + +/* return the effective x or y values, allowing for flip options. + * N.B. this is with respect to the image, not the drawing area. + */ +#define FX(x) (option[FLIPLR_OPT] ? mncols-1-(x) : (x)) +#define FY(y) (option[FLIPTB_OPT] ? mnrows-1-(y) : (y)) + +/* lunar database */ +typedef struct { + char *name; /* malloced name */ + char *type; /* malloced type (may be shared) */ + double lt, lg; /* lunar coords, lat N and long E, rads */ + int x, y; /* image location, X pixels coords */ + char pl; /* whether want label */ + char **lofiles; /* malloced list of lunar orbiter file names */ + int nlofiles; /* number of lofiles */ +} MoonDB; +static MoonDB *moondb; /* malloced array from file */ +static int nmoondb; /* entries in moondb[] */ +static int m_wantlabel (MoonDB *mp); +static void fill_popup (MoonDB *mp, int x, int y); +static void m_create_popup (void); +static void mlo_load (MoonDB *ep); +static void mlo_load_image (char *fn); +static MoonDB *closeMoonDB (int x, int y); + +/* called when the moon view is activated via the main menu pulldown. + * if first time, build everything, else just up we go. + * allow for retrying to read the image file each time until find it. + */ +void +m_manage () +{ + if (!mshell_w) { + /* menu one-time-only work */ + + /* build dialogs */ + m_create_shell(); + m_create_msform(); + m_create_esform(); + mlo_create_shell(); + + /* establish depth, colors and bits per pixel */ + get_something (mda_w, XmNdepth, (XtArgVal)&mdepth); + m_init_gcs(); + mbpp = (mdepth == 1 || nmgray == 2) ? 1 : + (mdepth>=17 ? 32 : (mdepth >= 9 ? 16 : 8)); + + /* read moon database */ + m_readdb(); + m_fillSL(); + } + + if (!mimage) { + /* read image and display at initial size */ + if (m_shrink(mshrink) < 0) + return; + } + + XtPopup (mshell_w, XtGrabNone); + set_something (mshell_w, XmNiconic, (XtArgVal)False); + centerScrollBars (msw_w); + + /* register we are now up */ + setXRes (m_viewupres(), "1"); +} + +int +m_ison() +{ + return (isUp(mshell_w)); +} + +/* commanded from main to update with a new set of circumstances */ +void +m_update (np, how_much) +Now *np; +int how_much; +{ + if (!mshell_w) + return; + if (!isUp(mshell_w) && !any_ison() && !how_much) + return; + + watch_cursor (1); + m_redraw(); + watch_cursor (0); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +m_newres() +{ + if (!mshell_w) + return; + m_init_gcs(); + m_update (mm_get_now(), 1); +} + +/* called when the database has changed. + * if we are drawing background, we'd best redraw everything. + */ +void +m_newdb (appended) +int appended; +{ + if (option[SKY_OPT] && isUp(mshell_w)) { + if (!appended) + resetSkyObj(); /* still ok if just appended */ + m_redraw(); + } +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +m_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + m_selecting++; + else if (m_selecting > 0) + --m_selecting; + + if (mshell_w) { + if ((whether && m_selecting == 1) /* first one to want on */ + || (!whether && m_selecting == 0) /* last one to want off */) + m_set_buttons (whether); + } +} + +/* called to put up or remove the watch cursor. */ +void +m_cursor (c) +Cursor c; +{ + Window win; + + if (mshell_w && (win = XtWindow(mshell_w)) != 0) { + Display *dsp = XtDisplay(mshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (mlo_shell_w && (win = XtWindow(mlo_shell_w)) != 0) { + Display *dsp = XtDisplay(mlo_shell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (msform_w && (win = XtWindow(msform_w)) != 0) { + Display *dsp = XtDisplay(msform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +m_viewupres() +{ + return ("MoonViewUp"); +} + +static void +m_create_shell() +{ + typedef struct { + Option o; /* which option */ + char *name; /* name of TB */ + char *title; /* title string of option */ + char *tip; /* widget tip */ + } OpSetup; + static OpSetup ops[] = { + {SPACECRAFT_OPT, "Spacecraft", "Spacecraft", + "Label each Spacecraft landing site"}, + {LABELS_OPT, "Labels", "Labels", + "Whether to display selected labels"}, + {SKY_OPT, "SkyBkg", "Sky background", + "When on, sky will include database objects and Field Stars"}, + {UMBRA_OPT, "Umbra", "{Pen}Umbra", + "Display edges of Earth shadow (if near a lunar eclipse)"}, + {FLIPTB_OPT, "FlipTB", "Flip T/B", + "Flip map top-to-bottom"}, + {FLIPLR_OPT, "FlipLR", "Flip L/R", + "Flip map left-to-right"}, + {GRID_OPT, "Grid", "Grid", + "Overlay 15 degree grid and mark Sub-Earth location"}, + }; + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Moon"}, + {"on Mouse...", "Moon_mouse"}, + {"on Control...", "Moon_control"}, + {"on View...", "Moon_view"}, + {"on Scale...", "Moon_scale"}, + {"on Lunar Orbiter...", "Moon_lo"}, + }; + Widget mb_w, pd_w, cb_w; + Widget w; + Widget mform_w; + XmString str; + unsigned long mask; + Arg args[20]; + int i; + int n; + + /* create master form */ + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Moon view"); n++; + XtSetArg (args[n], XmNiconName, "Moon"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + mshell_w = XtCreatePopupShell ("Moon", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (mshell_w); + set_something (mshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (mshell_w, XmNpopdownCallback, m_popdown_cb, 0); + sr_reg (mshell_w, "XEphem*Moon.width", mooncategory, 0); + sr_reg (mshell_w, "XEphem*Moon.height", mooncategory, 0); + sr_reg (mshell_w, "XEphem*Moon.x", mooncategory, 0); + sr_reg (mshell_w, "XEphem*Moon.y", mooncategory, 0); + sr_reg (NULL, m_viewupres(), mooncategory, 0); + + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + mform_w = XmCreateForm (mshell_w, "MoonF", args, n); + XtAddCallback (mform_w, XmNhelpCallback, m_help_cb, 0); + XtManageChild (mform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (mform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* the "Print" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "PrintPB", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, m_print_cb, 0); + wtip (w, "Print the current Moon map"); + XtManageChild (w); + + /* the "Annot" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Ann", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* the "Field stars" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "FS", args, n); + set_xmstring (w, XmNlabelString, "Field Stars..."); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)fs_manage,0); + wtip (w, "Define where GSC and PPM catalogs are to be found"); + XtManageChild (w); + + /* button to bring up the earthshine dialog */ + + n = 0; + w = XmCreatePushButton (pd_w, "ESPB", args, n); + XtAddCallback (w, XmNactivateCallback, m_eshineup_cb, 0); + set_xmstring (w, XmNlabelString, "Set Earthshine..."); + wtip (w, "Display a dialog to set brightness of dark half of moon"); + XtManageChild (w); + + /* button for Movie demo */ + + n = 0; + w = XmCreatePushButton (pd_w, "EAnim", args, n); + XtAddCallback (w, XmNactivateCallback, m_anim_cb, 0); + set_xmstring (w, XmNlabelString, "Animation demo"); + wtip (w, "Start/Stop a fun time-lapse animation"); + XtManageChild (w); + + /* button to erase labels */ + + n = 0; + w = XmCreatePushButton (pd_w, "MEL", args, n); + XtAddCallback (w, XmNactivateCallback, m_elab_cb, 0); + set_xmstring (w, XmNlabelString, "Forget labels"); + wtip (w, "Forget all non-spacecraft labels added to the map"); + XtManageChild (w); + + /* the "Movie" push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "MovieL", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, m_mloop_cb, 0); + wtip (w, "Add lunar image to movie loop"); + XtManageChild (w); + + /* add a separator */ + n = 0; + w = XmCreateSeparator (pd_w, "CtS", args, n); + XtManageChild (w); + + /* add the close button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, m_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + /* add options */ + + for (i = 0; i < XtNumber(ops); i++) { + OpSetup *osp = &ops[i]; + Option o = osp->o; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + w = XmCreateToggleButton (pd_w, osp->name, args, n); + XtAddCallback(w, XmNvalueChangedCallback, m_option_cb, + (XtPointer)o); + set_xmstring (w, XmNlabelString, osp->title); + option[o] = XmToggleButtonGetState (w); + option_w[o] = w; + if (osp->tip) + wtip (w, osp->tip); + XtManageChild (w); + sr_reg (w, NULL, mooncategory, 1); + } + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the More Info control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Stats", args, n); + set_xmstring (w, XmNlabelString, "More info..."); + XtAddCallback (w, XmNactivateCallback, m_mstats_cb, 0); + wtip (w, "Display additional information"); + XtManageChild (w); + + /* make the Scale pulldown */ + + n = 0; + XtSetArg (args[n], XmNradioBehavior, True); n++; + pd_w = XmCreatePulldownMenu (mb_w, "ScalePD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'S'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ScaleCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Scale"); + wtip (cb_w, "Set the image size"); + XtManageChild (cb_w); + + for (i = 1; i <= MAXSHRINK; i++) { + char name[64], title[64]; + int shrink; + + /* just advertise whole values */ + if (MAXSHRINK%i) + continue; + shrink = MAXSHRINK/i; + + (void) sprintf (name, "Scale%dX", shrink); + n = 0; + w = XmCreateToggleButton (pd_w, name, args, n); + XtAddCallback(w, XmNvalueChangedCallback, m_shrink_cb, + (XtPointer)(long int)i); + (void) sprintf (title, " Scale %d X", shrink); + set_xmstring (w, XmNlabelString, title); + XtManageChild (w); + + /* pick up user's default */ + if (XmToggleButtonGetState(w)) { + if (mshrink != 0) + xe_msg (0, "Multiple setting: ignoring Moon*%s", name); + else + mshrink = i; + } + + /* if done and none set, default to last one */ + if (i == MAXSHRINK && mshrink == 0) { + xe_msg (0, "No Moon*ScaleX resource -- defaulting to 1"); + XmToggleButtonSetState (w, True, False); + mshrink = MAXSHRINK; + } + + sr_reg (w, NULL, mooncategory, 1); + } + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, m_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make a label for the date stamp */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + dt_w = XmCreateLabel (mform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* sets initial size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make a scrolled list on the right for the names */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + msl_w = XmCreateScrolledList (mform_w, "MoonSL", args, n); + XtAddCallback (msl_w, XmNbrowseSelectionCallback, m_select_cb,0); + XtAddCallback (msl_w, XmNdefaultActionCallback, m_select_cb,0); + XtManageChild (msl_w); + + /* make a drawing area in a scrolled window for the image view */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, XtParent(msl_w)); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + XtSetArg (args[n], XmNvisualPolicy, XmVARIABLE); n++; + msw_w = XmCreateScrolledWindow (mform_w, "MoonSW", args, n); + XtManageChild (msw_w); + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + mda_w = XmCreateDrawingArea (msw_w, "MoonMap", args, n); + XtAddCallback (mda_w, XmNexposeCallback, m_exp_cb, NULL); + mask = Button1MotionMask | ButtonPressMask | ButtonReleaseMask + | PointerMotionHintMask; + XtAddEventHandler (mda_w, mask, False, m_pointer_eh, 0); + XtManageChild (mda_w); + + /* SW assumes work is its child but just to be tidy about it .. */ + set_something (msw_w, XmNworkWindow, (XtArgVal)mda_w); + + /* match SW background to DA */ + get_something (msw_w, XmNclipWindow, (XtArgVal)&w); + if (w) { + Pixel p; + get_something (mda_w, XmNbackground, (XtArgVal)&p); + set_something (w, XmNbackground, (XtArgVal)p); + } +} + +static void +m_create_msform() +{ + typedef struct { + int islabel; + char *label; + Widget *wp; + char *tip; + } DItem; + static DItem citems[] = { + {1,"Latitude +N:", &lat_w, "Selenographic latitude under cursor"}, + {1,"Longitude +E:", &lng_w, "Selenographic longitude under cursor"}, + {0,"Sun altitude:", &sunalt_w, + "Sun angle above horizon as seen from location under cursor"}, + {1,"Next Sunrise:", &nsrt_w, + "Time of next sunrise as seen from location under cursor"}, + {1," ", &nsrd_w, + "Date of next sunrise as seen from location under cursor"}, + {1,"Next Sunset:", &nsst_w, + "Time of next sunset as seen from location under cursor"}, + {1," ", &nssd_w, + "Date of next sunset as seen from location under cursor"}, + }; + Widget rc_w; + Widget sep_w; + Widget w; + XmString str; + Arg args[20]; + int n; + int i; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + msform_w = XmCreateFormDialog (mshell_w, "MoonStats", args, n); + set_something (msform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(msform_w), "XEphem*MoonStats.x", mooncategory,0); + sr_reg (XtParent(msform_w), "XEphem*MoonStats.y", mooncategory,0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Moon info"); n++; + XtSetValues (XtParent(msform_w), args, n); + + /* label for title */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + infot_w = XmCreateLabel (msform_w, "MIL", args, n); + set_xmstring (infot_w, XmNlabelString, " "); + XtManageChild (infot_w); + + /* make a rowcolumn to hold the cursor tracking info */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, infot_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 5); n++; /* matches RC below better */ + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, XtNumber(citems)); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + rc_w = XmCreateRowColumn (msform_w, "SRC", args, n); + XtManageChild (rc_w); + + for (i = 0; i < XtNumber(citems); i++) { + DItem *dp = &citems[i]; + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (rc_w, "CLbl", args, n); + set_xmstring (w, XmNlabelString, dp->label); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + if (dp->islabel) { + w = XmCreateLabel (rc_w, "CVal", args, n); + } else { + XtSetArg (args[n], XmNuserData, "Moon.SunAlt"); n++; + w = XmCreatePushButton (rc_w, "CSA", args, n); + XtAddCallback (w, XmNactivateCallback, m_activate_cb, NULL); + } + set_xmstring (w, XmNlabelString, " "); + + if (dp->wp) + *(dp->wp) = w; + if (dp->tip) + wtip (w, dp->tip); + XtManageChild (w); + } + + /* make a separator between the 2 data sets */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (msform_w, "Sep1", args, n); + XtManageChild(sep_w); + + /* make a rowcolumn to hold the labels and info buttons */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, 8); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + rc_w = XmCreateRowColumn (msform_w, "SRC", args, n); + XtManageChild (rc_w); + + /* make the srlng, sslat and libration in lat/long rows */ + + str = XmStringCreate ("Sunrise Long:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MLCoL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.SunRiseLng"); n++; + srlng_w = XmCreatePushButton (rc_w, "MLCoLPB", args, n); + XtAddCallback (srlng_w, XmNactivateCallback, m_activate_cb, NULL); + wtip (srlng_w, "Selenographic longitude where sun is now rising"); + XtManageChild (srlng_w); + + str = XmStringCreate ("Subsolar Lat:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MLSL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.SubSolLat"); n++; + sslat_w = XmCreatePushButton (rc_w, "MLSLPB", args, n); + XtAddCallback (sslat_w, XmNactivateCallback, m_activate_cb, NULL); + wtip (sslat_w, "Selenographic latitude at which sun is directly overhead"); + XtManageChild (sslat_w); + + str = XmStringCreate ("Libr in Lat:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MLLatL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.LibrLat"); n++; + llat_w = XmCreatePushButton (rc_w, "MLLatPB", args, n); + XtAddCallback (llat_w, XmNactivateCallback, m_activate_cb, NULL); + wtip (llat_w, "Current tilt in latitude from nominal `face-on' direction, + Lunar N"); + XtManageChild (llat_w); + + str = XmStringCreate ("Libr in Long:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MLLongL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.LibrLong"); n++; + llong_w = XmCreatePushButton (rc_w, "MLLongPB", args, n); + XtAddCallback (llong_w, XmNactivateCallback, m_activate_cb, NULL); + wtip (llong_w, "Current tilt in longitude from nominal `face-on' direction, + Lunar E"); + XtManageChild (llong_w); + + /* make the limb/tilt rows */ + + str = XmStringCreate ("Limb angle:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MLimbL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.LibrLimb"); n++; + limb_w = XmCreatePushButton (rc_w, "MLimbPB", args, n); + XtAddCallback (limb_w, XmNactivateCallback, m_activate_cb, NULL); + wtip (limb_w, "Limb angle nearest Earth, + Lunar W of N"); + XtManageChild (limb_w); + + str = XmStringCreate ("Tilt:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MLibL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.LibrTilt"); n++; + lib_w = XmCreatePushButton (rc_w, "MLibPB", args, n); + XtAddCallback (lib_w, XmNactivateCallback, m_activate_cb, NULL); + wtip(lib_w,"Degrees by which nominal face is tilted towards Earth"); + XtManageChild (lib_w); + + str = XmStringCreate ("Age:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "MAge", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + XtSetArg (args[n], XmNuserData, "Moon.Age"); n++; + age_w = XmCreatePushButton (rc_w, "MLibPB", args, n); + XtAddCallback (age_w, XmNactivateCallback, m_activate_cb, NULL); + wtip (age_w, "Days since new moon"); + XtManageChild (age_w); + + /* add a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (msform_w, "Sep2", args, n); + XtManageChild (sep_w); + + /* add a label for the current date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + sdt_w = XmCreateLabel (msform_w, "SDTstamp", args, n); + wtip (sdt_w, "Date and Time for which data are computed"); + XtManageChild (sdt_w); + + /* add a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sdt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (msform_w, "Sep3", args, n); + XtManageChild (sep_w); + + /* add a close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + w = XmCreatePushButton (msform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, m_mstats_close_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* create the little earthshine scale factor dialog */ +static void +m_create_esform() +{ + Arg args[20]; + Widget sep_w; + Widget w; + int min, max, v; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNfractionBase, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + esform_w = XmCreateFormDialog (mshell_w, "MoonEShine", args, n); + set_something (esform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(esform_w), "XEphem*MoonEShine.x",mooncategory,0); + sr_reg (XtParent(esform_w), "XEphem*MoonEShine.y",mooncategory,0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Moon Earthshine"); n++; + XtSetValues (XtParent(esform_w), args, n); + + /* make a scale */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, ESHINEF); n++; + eshine_w = XmCreateScale (esform_w, "Earthshine", args, n); + wtip (eshine_w, "Set to desired relative Earthshine brightness"); + XtManageChild (eshine_w); + sr_reg (eshine_w, NULL, mooncategory, 1); + + get_something (eshine_w, XmNminimum, (XtArgVal)&min); + get_something (eshine_w, XmNmaximum, (XtArgVal)&max); + get_something (eshine_w, XmNvalue, (XtArgVal)&v); + + if (min >= max || v < min || v > max || v == 0) { + xe_msg (0, "Bogus moon Earthshine values -- setting defaults"); + set_something (eshine_w, XmNminimum, (XtArgVal)1); + set_something (eshine_w, XmNmaximum, (XtArgVal)10); + set_something (eshine_w, XmNvalue, (XtArgVal)4); + } + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, eshine_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + sep_w = XmCreateSeparator (esform_w, "Sep", args, n); + XtManageChild(sep_w); + + /* make the buttons at the bottom */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 2); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 4); n++; + w = XmCreatePushButton (esform_w, "Apply", args, n); + XtAddCallback (w, XmNactivateCallback, m_eshine_cb, NULL); + wtip (w, "Make it so"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 6); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 8); n++; + w = XmCreatePushButton (esform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, m_eshineclose_cb, NULL); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +m_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + buttonAsButton (sunalt_w, whether); + buttonAsButton (srlng_w, whether); + buttonAsButton (sslat_w, whether); + buttonAsButton (llat_w, whether); + buttonAsButton (llong_w, whether); + buttonAsButton (limb_w, whether); + buttonAsButton (lib_w, whether); + buttonAsButton (age_w, whether); +} + +/* callback from the Apply button in the earthshine dialog */ +/* ARGSUSED */ +static void +m_eshine_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + m_redraw(); +} + +/* callback to add the current scene to the movie loop */ +/* ARGSUSED */ +static void +m_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (m_pm, dt_w); +} + +/* callback from the Close button in the earthshine dialog */ +/* ARGSUSED */ +static void +m_eshineclose_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (esform_w); +} + +/* called to toggle whether the earthshine eshineactor is dialog */ +/* ARGSUSED */ +static void +m_eshineup_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XtIsManaged(esform_w)) + XtUnmanageChild (esform_w); + else + XtManageChild (esform_w); +} + + +/* callback from the Close button on the stats menu. + */ +/* ARGSUSED */ +static void +m_mstats_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (msform_w); +} + +/* callback from the More Info button on the main menu. + */ +/* ARGSUSED */ +static void +m_mstats_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (msform_w); + m_set_buttons(m_selecting); +} + +/* callback from the Print PB */ +/* ARGSUSED */ +static void +m_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Moon View", m_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +m_print () +{ + /* must be up */ + if (!m_ison()) { + xe_msg (1, "Moon must be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* fit view in square across the top and prepare to capture X calls */ + XPSXBegin (m_pm, BORD, BORD, mncols, mnrows, 1*72, 10*72, + (int)(6.5*72)); + + /* redraw everything now */ + m_redraw(); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + m_ps_annotate (); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +m_ps_annotate () +{ + Now *np = mm_get_now(); + char dir[128]; + char buf[128]; + int ctr = 306; /* = 8.5*72/2 */ + int lx = 180, rx = 460; + int y; + + /* caption */ + y = AROWY(13); + if (option[SKY_OPT]) + (void) sprintf (buf, "XEphem %s Moon View", + pref_get(PREF_EQUATORIAL)==PREF_GEO ? "Geocentric" + : "Topocentric"); + else + (void) strcpy (buf, "XEphem Moon View"); + (void) sprintf (dir, "(%s) %d %d cstr\n", buf, ctr, y); + XPSDirect (dir); + + y = AROWY(9); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + (void) sprintf (dir, "(UTC Date:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + fs_time (buf, mjd_hr(mjd)); + (void) sprintf (dir, "(UTC Time:) %d %d rstr (%s) %d %d lstr\n", + rx, y, buf, rx+10, y); + XPSDirect (dir); + + (void) sprintf (dir, "(%6.3f days old) %d %d cstr\n", minfo.age, ctr,y); + XPSDirect (dir); + + y = AROWY(8); + fs_dm_angle (buf, minfo.srlng); + (void) sprintf (dir,"(Sunrise Longitude:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + fs_dm_angle (buf, minfo.sslat); + (void) sprintf (dir,"(Subsolar Latitude:) %d %d rstr (%s) %d %d lstr\n", + rx, y, buf, rx+10, y); + XPSDirect (dir); + + y = AROWY(7); + fs_dm_angle (buf, minfo.llat); + (void) sprintf (dir, + "(Libration in Latitude:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + fs_dm_angle (buf, minfo.llong); + (void) sprintf (dir, + "(Libration in Longitude:) %d %d rstr (%s) %d %d lstr\n", + rx, y, buf, rx+10, y); + XPSDirect (dir); + + y = AROWY(6); + fs_dm_angle (buf, minfo.limb); + (void) sprintf (dir, + "(Limb Angle:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + fs_dm_angle (buf, minfo.limb); + (void) sprintf (dir, + "(Limb Tilt Angle:) %d %d rstr (%6.3f) %d %d lstr\n", + rx, y, minfo.tilt, rx+10, y); + XPSDirect (dir); + + /* add site/lat/long if showing real stars and topocentric */ + if (option[SKY_OPT] && pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + char *site; + + /* put site name under caption */ + site = mm_getsite(); + if (site) { + y = AROWY(12); + (void) sprintf (dir, "(%s) %d %d cstr\n", + XPSCleanStr(site,strlen(site)), ctr, y); + XPSDirect (dir); + } + + /* then add lat/long */ + y = AROWY(10); + + fs_sexa (buf, raddeg(fabs(lat)), 3, 3600); + (void) sprintf (dir, "(Latitude:) %d %d rstr (%s %c) %d %d lstr\n", + lx, y, buf, lat < 0 ? 'S' : 'N', lx+10, y); + XPSDirect (dir); + + fs_sexa (buf, raddeg(fabs(lng)), 4, 3600); + (void) sprintf (dir,"(Longitude:) %d %d rstr (%s %c) %d %d lstr\n", + rx, y, buf, lng < 0 ? 'W' : 'E', rx+10, y); + XPSDirect (dir); + } +} + +/* callback from any of the data menu buttons being activated. + */ +/* ARGSUSED */ +static void +m_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (m_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback from mshell_w being popped down. + */ +/* ARGSUSED */ +static void +m_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (esform_w); + XtUnmanageChild (msform_w); + + /* freeing the pixmap will prevent any useless updates while off and + * insure a fresh update on the next expose. + */ + if (m_pm) { + XFreePixmap (XtD, m_pm); + m_pm = 0; + } + + /* free any field stars */ + if (fstars) { + free ((void *)fstars); + fstars = NULL; + nfstars = 0; + } + + /* stop movie that might be running */ + mm_movie (0.0); + + /* register we are now down */ + setXRes (m_viewupres(), "0"); +} + +/* called from Close button */ +static void +m_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (mshell_w); + /* let popdown do all the work */ +} + +/* callback from the any of the option TBs. + * Option enum is in client. + */ +/* ARGSUSED */ +static void +m_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Option opt = (Option)client; + int set; + + watch_cursor (1); + + /* toggle the option */ + option[opt] = set = XmToggleButtonGetState (w); + + switch (opt) { + case GRID_OPT: + if (set) { + m_grid(); + m_refresh (NULL); + } else + m_redraw(); + break; + + case SKY_OPT: + m_redraw(); + break; + + case UMBRA_OPT: + if (set) { + m_umbra(); + m_sub(); + m_refresh (NULL); + } else + m_redraw(); + break; + + case SPACECRAFT_OPT: /* FALLTHRU */ + case LABELS_OPT: + if (set) { + m_labels(); + m_refresh (NULL); + } else + m_redraw(); + break; + + case FLIPTB_OPT: + m_free_clip_mask(); + fliptb(); + m_redraw(); + break; + + case FLIPLR_OPT: + m_free_clip_mask(); + fliplr(); + m_redraw(); + break; + + case N_OPT: + break; + } + + watch_cursor (0); +} + +/* callback from any of the Scale TBs. + * client is shrink factor: 1..MAXSHRINK + */ +/* ARGSUSED */ +static void +m_shrink_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int f = (long int)client; + int set = XmToggleButtonGetState (w); + + if (!set || f == mshrink) + return; + if (m_shrink (f) < 0) + return; + mshrink = f; +} + + +/* callback to erase all labels */ +/* ARGSUSED */ +static void +m_elab_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + MoonDB *mp; + + /* turn off all persistent label flags then redraw to erase */ + for (mp = moondb; mp < &moondb[nmoondb]; mp++) + mp->pl = 0; + m_redraw(); +} + +/* callback for when the Movie button is activated. */ +/* ARGSUSED */ +static void +m_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + mm_movie (option[SKY_OPT] ? MOVIE_SSTEPSZ : MOVIE_STEPSZ); +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +m_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "This is a depiction of the Moon.", + }; + + hlp_dialog ("Moon", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +m_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + + +/* given an [x,y] on m_xim, find latitude, rads north, and longitude, rads e. + * N.B. [x,y] must be with respect to the _original_ image size and orientation. + * return 0 if ok (inside image) else -1. + */ +static int +xy2ll (x, y, ltp, lgp) +int x, y; +double *ltp, *lgp; +{ + double cx, cy; + double lt, lg; + + /* convert to image center, scaled to radius */ + cx = (double)(x - (leftmarg + moonrad))/moonrad; /* + right */ + cy = (double)((topmarg + moonrad) - y)/moonrad; /* + up */ + + if (cx*cx + cy*cy > 1.0) + return (-1); + + lt = asin (cy); + lg = asin(cx/cos(lt)); + + lt += CLAT; + lg += CLNG; + if (lt > PI/2) { + lt = PI - lt; + lg += PI; + } else if (lt < -PI/2) { + lt = -PI - lt; + lg += PI; + } + + *ltp = lt; + *lgp = lg; + range (lgp, 2*PI); + + return (0); +} + +/* given a lat(+N)/long(+E) find its [x,y] location on the resized imae. + * N.B. the returned [x,y] is with respect to the image at its current size + * but does not include flipping or mda_w border. + * return 0 if ok (on front side) else -1, but always return x and y. + */ +static int +ll2xy (lt, lg, xp, yp) +double lt, lg; +int *xp, *yp; +{ + double cx, cy, cz; + double coslt, sinlt; + + lt -= CLAT; + lg -= CLNG; + if (lt > PI/2) { + lt = PI - lt; + lg += PI; + } else if (lt < -PI/2) { + lt = -PI - lt; + lg += PI; + } + + coslt = cos(lt); + cz = moonrad*coslt*cos(lg); + + sinlt = sin(lt); + cx = moonrad*coslt*sin(lg); + cy = moonrad*sinlt; + + *xp = (int)(cx + (leftmarg + moonrad) + 0.5); + *yp = (int)((topmarg + moonrad) - cy + 0.5); + + return (cz < 0 ? -1 : 0); +} + +/* return True if the given [x,y], relative to mda_w, refers to a spot over the + * lunar image, else return 0. + */ +static int +overMoon (x, y) +int x, y; +{ + /* convert to image center */ + x -= BORD + leftmarg + moonrad; + y -= BORD + topmarg + moonrad; + + return (x*x + y*y <= moonrad*moonrad); +} + +/* event handler from all Button events on the mda_w */ +static void +m_pointer_eh (w, client, ev, continue_to_dispatch) +Widget w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + Display *dsp = ev->xany.display; + Window win = ev->xany.window; + int evt = ev->type; + Window root, child; + int rx, ry, x, y; + unsigned mask; + int m1, b1p, b1r, b3p; + + /* what happened? */ + m1 = evt == MotionNotify && ev->xmotion.state & Button1Mask; + b1p = evt == ButtonPress && ev->xbutton.button == Button1; + b1r = evt == ButtonRelease && ev->xbutton.button == Button1; + b3p = evt == ButtonPress && ev->xbutton.button == Button3; + + /* do we care? */ + if (!m1 && !b1p && !b1r && !b3p) + return; + + /* where are we? */ + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &x, &y, &mask); + + /* dispatch */ + if (b3p) + m_popup (ev); + if (b1p || m1 || b1r) { + doGlass (dsp, win, b1p, m1, b1r, x, y); + m_reportloc (dsp, win, x, y); + } +} + +/* expose (or reconfig) of moon image view drawing area. + */ +/* ARGSUSED */ +static void +m_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + XExposeEvent *e = &c->event->xexpose; + Display *dsp = e->display; + Window win = e->window; + + watch_cursor (1); + + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + * also center the scroll bars initially. + */ + static int before; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; + XChangeWindowAttributes (e->display, e->window, mask, &swa); + + before = 1; + } + break; + } + default: + printf ("Unexpected mda_w event. type=%d\n", c->reason); + abort(); + } + + + /* insure pixmap exists -- it gets destroyed whenever mda_w is resized + * or the dialog is unmanaged. + */ + if (!m_pm) { + unsigned wid, hei, d; + + m_getsize (win, &wid, &hei, &d); + if ((int)wid != mncols+2*BORD || (int)hei != mnrows+2*BORD) { + printf ("m_da: Bad size: wid=%d mncols=%d hei=%d mnrows=%d\n", + wid, mncols, hei, mnrows); + abort(); + } + + m_pm = XCreatePixmap (dsp, win, wid, hei, d); + m_draw(); + } + + /* update exposed area */ + m_refresh (e); + + watch_cursor (0); +} + +/* redraw the current scene */ +static void +m_redraw() +{ + watch_cursor (1); + + m_draw (); + m_refresh(NULL); + + watch_cursor (0); +} + +/* copy the m_pm pixmap to the drawing area mda_w. + * if ep just copy that much, else copy all. + */ +static void +m_refresh(ep) +XExposeEvent *ep; +{ + Display *dsp = XtDisplay(mda_w); + Window win = XtWindow (mda_w); + Pixmap pm = m_pm; + unsigned w, h; + int x, y; + + /* ignore if no pixmap now */ + if (!pm) + return; + + if (ep) { + x = ep->x; + y = ep->y; + w = ep->width; + h = ep->height; + } else { + w = mncols+2*BORD; + h = mnrows+2*BORD; + x = y = 0; + } + + XCopyArea (dsp, pm, win, m_fgc, x, y, w, h, x, y); +} + +/* get the width, height and depth of the given drawable */ +static void +m_getsize (d, wp, hp, dp) +Drawable d; +unsigned *wp, *hp, *dp; +{ + Window root; + int x, y; + unsigned int bw; + + XGetGeometry (XtD, d, &root, &x, &y, wp, hp, &bw, dp); +} + +/* make the various gcs, handy pixel values and fill in mgray[]. + * N.B. just call this once. + * TODO: reclaim old stuff if called again. + */ +static void +m_init_gcs() +{ + Display *dsp = XtD; + Window win = XtWindow(toplevel_w); + Colormap cm = xe_cm; + XGCValues gcv; + unsigned int gcm; + Pixel fg; + Pixel p; + + /* fg and bg */ + get_something (mda_w, XmNforeground, (XtArgVal)&fg); + (void) get_color_resource (mda_w, "MoonBackground", &mbg); + + gcm = GCForeground | GCBackground; + gcv.foreground = fg; + gcv.background = mbg; + m_fgc = XCreateGC (dsp, win, gcm, &gcv); + + gcv.foreground = mbg; + gcv.background = fg; + m_bgc = XCreateGC (dsp, win, gcm, &gcv); + + /* make the label marker gc */ + (void) get_color_resource (mda_w, "MoonAnnotColor", &p); + gcm = GCForeground | GCBackground; + gcv.foreground = p; + gcv.background = mbg; + m_agc = XCreateGC (dsp, win, gcm, &gcv); + get_views_font (dsp, &m_fsp); + + /* build gray-scale ramp for image */ + nmgray = gray_ramp (dsp, cm, &mgray); + + /* unless we will be using a bitmap, force color 0 to background. */ + if (nmgray > 2) + mgray[0] = mbg; +} + +/* given curlt/lg and Now compute supporting moon info in minfo */ +static void +m_info(np) +Now *np; +{ + double tzo = pref_get(PREF_ZONE)==PREF_LOCALTZ ? -tz/24.0 : 0; + double srlng; + double t; + double nfmjd, nm, fm; + + moon_colong (mjd+MJD0, minfo.curlt, minfo.curlg, &srlng, NULL, + &minfo.cursunalt, &minfo.sslat); + + /* convert colong to sunrise longitude */ + srlng = -srlng; + range (&srlng, 2*PI); + minfo.srlng = srlng; + + t = srlng-minfo.curlg; + range (&t, 2*PI); + minfo.curnsrt = mjd + tzo + t/(2*PI)*SYNP; + + t = srlng-minfo.curlg+PI; + range (&t, 2*PI); + minfo.curnsst = mjd + tzo + t/(2*PI)*SYNP; + + /* libration info */ + llibration (mjd+MJD0, &minfo.llat, &minfo.llong); + minfo.limb = atan2 (-minfo.llong, minfo.llat); + if (minfo.limb < 0.0) + minfo.limb += 2*PI; /* limb angle is traditionally 0..360 */ + minfo.tilt = + raddeg(sqrt(minfo.llat*minfo.llat + minfo.llong*minfo.llong)); + + /* age, days from prev new moon */ + for (nfmjd = mjd, nm = mjd+1; nm > mjd; nfmjd -= 7) + moonnf (nfmjd, &nm, &fm); + minfo.age = mjd - nm; +} + +/* update "more info" labels. + * then, if m_pm is defined, compute a scene onto it. + */ +static void +m_draw () +{ + Now *np = mm_get_now(); + + /* update and print the latest info */ + m_info (np); + m_pinfo (); + + /* update time stamps too */ + timestamp (np, dt_w); + timestamp (np, sdt_w); + + if (m_pm) + mi_draw (); +} + +/* draw moon onto m_pm, using minfo. + * N.B. this just fills the pixmap; call m_refresh() to copy to the screen. + */ +static void +mi_draw () +{ + XGCValues gcv; + unsigned int gcm; + + /* check assumptions -- even graphic uses image under the glass */ + if (!mimage) { + printf ("No moon mimage!\n"); + abort(); + } + if (!m_xim) { + printf ("No m_xim!\n"); + abort(); + } + if (!m_pm) { + printf ("No m_pm Pixmap!\n"); + abort(); + } + + /* fill in m_xim from mimage */ + image_setup (); + + /* create clip_mask from mimage when needed */ + m_clip_mask_setup (); + + /* clear m_pm */ + XPSPaperColor (mbg); + XPSFillRectangle (XtD, m_pm, m_bgc, 0, 0, mncols+2*BORD, mnrows+2*BORD); + + /* add sky background objects */ + resetSkyObj(); + if (option[SKY_OPT]) + m_sky(); + + /* apply clipping mask to m_fgc */ + gcm = GCClipXOrigin | GCClipYOrigin | GCClipMask; + gcv.clip_mask = m_clip_mask; + gcv.clip_x_origin = BORD; + gcv.clip_y_origin = BORD; + XChangeGC(XtD, m_fgc, gcm, &gcv); + + /* copy m_xim within BORDER */ + XPutImage (XtD, m_pm, m_fgc, m_xim, 0, 0, BORD, BORD, mncols, mnrows); + + /* remove clipping mask from m_fgc */ + gcm = GCClipMask; + gcv.clip_mask = None; + XChangeGC(XtD, m_fgc, gcm, &gcv); + + XPSPixmap (m_pm, mncols+2*BORD, mnrows+2*BORD, xe_cm, m_bgc, 1); + + /* add eclipse pen/umbra boundaries and sub points, if enabled */ + if (option[UMBRA_OPT]) { + m_umbra(); + m_sub (); + } + + /* add the libration marker */ + m_mark_libr (); + + /* add grid, if enabled */ + if (option[GRID_OPT]) + m_grid(); + + /* add any desired feature labels */ + m_labels(); + + /* add orientation markings */ + m_orientation(); + + /* user annotation */ + ano_draw (mda_w, m_pm, m_ano, 0); +} + +/* convert relative moon center to/from X Windows coords depending on w2x. + * return whether visible. + */ +static int +m_ano (double *fracx, double *fracy, int *xp, int *yp, int w2x, int arg) +{ + if (w2x) { + *xp = (int)floor(FX(*fracx*moonrad+leftmarg+moonrad) + BORD + 0.5); + *yp = (int)floor(FY(*fracy*moonrad+topmarg+moonrad) + BORD + 0.5); + } else { + *fracx = (double)(FX(*xp - BORD) - (leftmarg+moonrad))/moonrad; + *fracy = (double)(FY(*yp - BORD) - (topmarg+moonrad))/moonrad; + } + + return (1); +} + +/* label the database entries marked for name display */ +static void +m_labels() +{ + MoonDB *mp; + + XSetFont (XtD, m_agc, m_fsp->fid); + + for (mp = moondb; mp < &moondb[nmoondb]; mp++) + if (m_wantlabel(mp)) { + char *n = mp->name; + int l = strlen (n); + int x = FX(mp->x)+BORD; + int y = FY(mp->y)+BORD; + + if (strstr (mp->type, "Landing")) { + XPSDrawArc (XtD, m_pm, m_agc, x-2, y-2, 5, 5, 0, 360*64); + XPSDrawString (XtD, m_pm, m_agc, x, y-5, n, l); + } else + XPSDrawString (XtD, m_pm, m_agc, x, y, n, l); + } +} + +/* add background sky objects to m_pm and to skyobjs[] list */ +static void +m_sky() +{ + static int before; + Now *np = mm_get_now(); + double scale; /* image scale, rads per pixel */ + double mra, mdec; /* moon's ra and dec */ + double cmdec; /* cos mdec */ + double mlat, mlng; /* moon's ecliptic coords */ + double cmlat; /* cos mlat*/ + double maxr; /* max dst from center we want to draw, rads */ + DBScan dbs; + Obj *moonop; + Obj *op; + + if (!before && pref_get(PREF_EQUATORIAL) == PREF_GEO) { + xe_msg (1, "Equatorial preference should probably be set to Topocentric"); + before = 1; + } + + /* get current moon info and derive scale, etc */ + moonop = db_basic (MOON); + db_update (moonop); + mra = moonop->s_ra; + mdec = moonop->s_dec; + cmdec = cos(mdec); + eq_ecl (mjd, mra, mdec, &mlat, &mlng); + cmlat = cos(mlat); + scale = (degrad(moonop->s_size/3600.0)/2.0) / moonrad; + maxr = 2*(sqrt((double)mnrows*mnrows + mncols*mncols) + BORD)*scale; + + int w = mncols + 2 * BORD; + int h = mnrows + 2 * BORD; + double hfov = w * scale; + double vfov = h * scale; + + /* load field stars */ + m_loadfs (np, mra, mdec); + + /* scan the database and draw whatever is near */ + for (db_scaninit(&dbs, ALLM, fstars, nfstars); + (op = db_scan (&dbs)) != NULL; ) { + + double ra, dec; /* object's ra/dec */ + double olat, olng; /* object's ecliptic lat/lng */ + double dlat, dlng; /* diff from moon's */ + int dx, dy; + int x, y; + int diam; + GC gc; + + if (is_planet (op, MOON)) { + /* we draw it elsewhere :-) */ + continue; + } + + db_update (op); + ra = op->s_ra; + dec = op->s_dec; + + /* find size, in pixels. */ + diam = magdiam (FMAG, 2, scale, get_mag(op), + degrad(op->s_size/3600.0)); + /* reject if too faint */ + if (diam <= 0) + continue; + + /* or if it's obviously outside field of view */ + if (fabs(mdec - dec) > maxr || delra(mra - ra)*cmdec > maxr) + continue; + + /* ecliptic coords match moons tilt far better than equatorial */ + eq_ecl (mjd, ra, dec, &olat, &olng); + + /* find [x,y] relative to image center */ + dlat = mlat - olat; + dlng = mlng - olng; + dx = (int)floor((dlng*cmlat)/scale + 0.5); /* + right */ + dy = (int)floor(dlat/scale + 0.5); /* + down */ + + /* allow for flipping and shift to find window coords */ + x = FX(dx+mncols/2) + BORD; + y = FY(dy+mnrows/2) + BORD; + + /* pick a gc */ + obj_pickgc(op, toplevel_w, &gc); + + /* draw 'er */ + sv_draw_obj_x (XtD, m_pm, gc, op, x, y, diam, 1, option[FLIPTB_OPT], option[FLIPLR_OPT], 0, 1, mdec, mra, vfov, hfov, w, h); + + /* add to skyobjs[] list */ + addSkyObj (op, x, y); + } + + sv_draw_obj (XtD, m_pm, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +/* load field stars around the given location, unless current set is + * already close enough. + */ +static void +m_loadfs (np, ra, dec) +Now *np; +double ra, dec; +{ + + if (fstars && fabs(dec-fsdec) 0) { + xe_msg (0, "Moon View added %d field stars", nfstars); + fsdec = dec; + fsra = ra; + } +} + +/* given a MoonDB entry, return 1 if we want to show its label now, else 0. */ +static int +m_wantlabel (mp) +MoonDB *mp; +{ + /* always show if marked as persistent and labels are on */ + if (option[LABELS_OPT] && mp->pl) + return (1); + + /* or if want spacecraft and it appears to be one and + * we are at full size or this is an Apollo site + */ + if (option[SPACECRAFT_OPT] && strstr (mp->type, "Landing") + && (mshrink == 1 || strstr (mp->name, "Apollo"))) + return (1); + + return (0); +} + +/* draw the N/S E/W labels on the four edges of the m_pm + * we are showing lunar coords. + */ +static void +m_orientation() +{ + int fw, fa, fd; + int dir, asc, des; + XCharStruct xcs; + + XQueryTextExtents (XtD, m_fsp->fid, "W", 1, &dir, &asc, &des, &xcs); + fw = xcs.width; + fa = xcs.ascent; + fd = xcs.descent; + + XSetFont (XtD, m_agc, m_fsp->fid); + XPSDrawString (XtD, m_pm, m_agc, BORD+(mncols-fw)/2, BORD-fd-LGAP, + option[FLIPTB_OPT] ? "S" : "N", 1); + XPSDrawString (XtD, m_pm, m_agc, BORD+(mncols-fw)/2,BORD+mnrows+fa+LGAP, + option[FLIPTB_OPT] ? "N" : "S", 1); + XPSDrawString (XtD, m_pm, m_agc, BORD-fw-LGAP, BORD+(mnrows+fa)/2, + option[FLIPLR_OPT] ? "E" : "W", 1); + XPSDrawString (XtD, m_pm, m_agc, BORD+mncols+LGAP, BORD+(mnrows+fa)/2, + option[FLIPLR_OPT] ? "W" : "E", 1); +} + +/* draw a coordinate grid over the image moon on m_pm */ +static void +m_grid() +{ +#define GSP degrad(15.0) /* grid spacing */ +#define FSP (GSP/4.) /* fine spacing */ + Display *dsp = XtDisplay (mda_w); + Window win = m_pm; + double lt, lg; + int x, y; + + /* lines of equal lat */ + for (lt = PI/2 - GSP; lt >= -PI/2 + GSP; lt -= GSP) { + XPoint xpt[(int)(PI/FSP)+1]; + int npts = 0; + + for (lg = -PI/2; lg <= PI/2; lg += FSP) { + if (ll2xy(lt, lg, &x, &y) < 0) + continue; + if (npts >= XtNumber(xpt)) { + printf ("Moon lat grid overflow\n"); + abort(); + } + xpt[npts].x = FX(x) + BORD; + xpt[npts].y = FY(y) + BORD; + npts++; + } + XPSDrawLines (dsp, win, m_agc, xpt, npts, CoordModeOrigin); + } + + /* lines of equal longitude */ + for (lg = -PI/2; lg <= PI/2; lg += GSP) { + XPoint xpt[(int)(PI/FSP)+1]; + int npts = 0; + + for (lt = -PI/2; lt <= PI/2; lt += FSP) { + if (ll2xy(lt, lg, &x, &y) < 0) + continue; + if (npts >= XtNumber(xpt)) { + printf ("Moon lng grid overflow\n"); + abort(); + } + xpt[npts].x = FX(x) + BORD; + xpt[npts].y = FY(y) + BORD; + npts++; + } + XPSDrawLines (dsp, win, m_agc, xpt, npts, CoordModeOrigin); + } +} + +/* draw an X at the subearth and a circle at the subsolar spot using minfo */ +static void +m_sub () +{ +#define SUBR 4 + Display *dsp = XtDisplay (mda_w); + Window win = m_pm; + int x, y; + + /* subearth point */ + if (ll2xy (minfo.llat, minfo.llong, &x, &y) == 0) { + x = FX(x) + BORD; + y = FY(y) + BORD; + XPSDrawLine (dsp, win, m_agc, x-SUBR, y-SUBR, x+SUBR, y+SUBR); + XPSDrawLine (dsp, win, m_agc, x-SUBR, y+SUBR, x+SUBR, y-SUBR); + } + + /* subsolar point -- open circle */ + if (ll2xy (minfo.sslat, minfo.srlng + PI/2, &x, &y) == 0) { + x = FX(x) + BORD; + y = FY(y) + BORD; + XPSDrawArc (dsp, win, m_agc, x-SUBR/2, y-SUBR/2,SUBR,SUBR,0,360*64); + } + + /* anti-subsolar point -- filled circle */ + if (ll2xy (-minfo.sslat, minfo.srlng - PI/2, &x, &y) == 0) { + x = FX(x) + BORD; + y = FY(y) + BORD; + XPSFillArc (dsp, win, m_agc, x-SUBR/2, y-SUBR/2,SUBR,SUBR,0,360*64); + } +} + +/* create m_xim of size mnrowsXmncols, depth mdepth and bit-per-pixel mbpp. + * make a Bitmap if only have 1 bit per pixel, otherwise a Pixmap. + * return 0 if ok else -1 and xe_msg(). + */ +static int +mxim_create () +{ + Display *dsp = XtDisplay (mda_w); + int nbytes = (mnrows+7)*(mncols+7)*mbpp/8; + char *data; + + /* get memory for image pixels. */ + data = (char *) malloc (nbytes); + if (!data) { + xe_msg(1, "Can not get %d bytes for shadow pixels", nbytes); + return (-1); + } + + /* create the XImage */ + m_xim = XCreateImage (dsp, XDefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ mbpp == 1 ? 1 : mdepth, + /* format */ mbpp == 1 ? XYBitmap : ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ mncols, + /* height */ mnrows, + /* pad */ mbpp < 8 ? 8 : mbpp, + /* bpl */ 0); + if (!m_xim) { + xe_msg (1, "Can not create shadow XImage"); + free ((void *)data); + return (-1); + } + + m_xim->bitmap_bit_order = LSBFirst; + m_xim->byte_order = LSBFirst; + + /* ok */ + return (0); +} + +/* compute a scene in m_xim, knowledge of the sunrise longitude and + * earthshine. + */ +static void +image_setup () +{ + double esrlng = minfo.srlng-CLNG; /* correct for earth viewpoint */ + int right = cos(esrlng) < 0; /*whther shadw reaches to right limb*/ + double sinsrl = sin(esrlng); + unsigned char *mp; + int x, y; + int esf; + + get_something (eshine_w, XmNvalue, (XtArgVal)&esf); + + /* copy intensities through mgray[] map to get pixels */ + for (y = 0; y < mnrows; y++) { + int lx, rx; /* left and right edge of scan line to darken */ + int fy; /* (possibly) flipped y */ + + (void) m_esedges (y, sinsrl, right, &lx, &rx); + fy = FY(y); + + /* scan across the whole row, drawing shadow between lx and rx */ + mp = &mimage[fy*mncols]; + for (x = 0; x < mncols; x++) { + int i = (int)(*mp++); + int v; + + if (x >= lx && x <= rx) + v = i*nmgray*esf/ESHINEF/256; /* shadow */ + else + v = i*nmgray/256; + + XPutPixel (m_xim, x, fy, mgray[v]); + } + } +} + +/* compute the left and right edge of earthshine for the given y. + * all coords wrt to m_xim and current orientation. + * sinsrl is sin of longitude of the rising sun. + */ +static int +m_esedges (y, sinsrl, right, lxp, rxp) +int y; /* image y */ +double sinsrl; /* sin of longitude of the rising sun */ +int right; /* whether shadow reaches to right limb */ +int *lxp, *rxp; /* left and right x of edges of earthshine */ +{ + int lx, rx; /* left and right edge of scan line to darken */ + int yc; /* y with respect to moon center */ + int ret; /* return value */ + + yc = y - (topmarg + moonrad); + + /* find left and right edge of shadow */ + if (abs(yc) <= moonrad) { + int r; /* pixels to limb at this y */ + + r = (int)(sqrt((double)(moonrad*moonrad - yc*yc))+1); /* round up */ + + /* compute shadow edges with respect to center */ + if (right) { + rx = r; + lx = -(int)(r * sinsrl); + } else { + lx = -r; + rx = (int)(r * sinsrl); + } + + /* convert to X coords */ + lx += leftmarg + moonrad; + rx += leftmarg + moonrad; + + ret = 0; + } else { + /* above or below moon image so no shadow */ + lx = -1; + rx = mncols; + ret = -1; + } + + /* allow for flipping */ + if (option[FLIPLR_OPT]) { + int tmp = lx; + lx = FX(rx); + rx = FX(tmp); + } + + *lxp = lx; + *rxp = rx; + + return (ret); +} + +/* create a clipping mask for applying m_xim to m_pm */ +static void +m_clip_mask_setup () +{ + if (!m_clip_mask) + { + XGCValues gcv; + Window win = RootWindow(XtD, DefaultScreen(XtD)); + GC sky_gc, moon_gc; + + unsigned char *mp; + int x, y; + + m_clip_mask = XCreatePixmap(XtD, win, mncols, mnrows, 1); + + /* setup clipping mask for m_fgc */ + gcv.foreground = 0; + sky_gc = XCreateGC(XtD, m_clip_mask, GCForeground, &gcv); + gcv.foreground = 1; + moon_gc = XCreateGC(XtD, m_clip_mask, GCForeground, &gcv); + + XFillRectangle(XtD, m_clip_mask, moon_gc, 0, 0, mncols, mnrows); + + for (y = 0; y < mnrows; y++) { + /* scan across the whole row */ + mp = &mimage[y*mncols]; + for (x = 0; x < mncols; x++) { + int i = (int)(*mp++); + + if (!i) + XDrawPoint (XtD, m_clip_mask, sky_gc, x, y); + } + } + XFreeGC(XtD, sky_gc); + XFreeGC(XtD, moon_gc); + } +} + +/* delete clipping mask so new one will get built when needed */ +static void +m_free_clip_mask () +{ + if (m_clip_mask) { + XFreePixmap (XtD, m_clip_mask); + m_clip_mask = 0; + } +} + +/* go through database and set screen loc given lat/long */ +static void +m_dbloc() +{ + MoonDB *mp; + + for (mp = moondb; mp < &moondb[nmoondb]; mp++) + ll2xy (mp->lt, mp->lg, &mp->x, &mp->y); +} + +/* do everything necessary to see a fresh image, shrunk by factor f: + * read full moon file; shrink by a factor of f; replace mimage with result; + * resize mda_w and m_xim; recompute image [x,y] values match new scale. + * when done, set mimage, m_xim, mncols, mnrows, topmarg, leftmarg and moonrad. + * return 0 if all ok, else xe_msg() and return -1. + */ +static int +m_shrink (f) +int f; +{ + char msg[1024]; + char fn[1024]; + FImage moonfits; + unsigned char *newim, *im; + int imnr, imnc; + int newnr, newnc; + int v; + int fd; + + /* open moon image */ + (void) sprintf (fn, "%s/auxil/moon.fts", getShareDir()); + fd = openh (fn, 0); + if (fd < 0) { + xe_msg (1, "%s: %s\n", fn, syserrstr()); + return (-1); + } + + /* read moon file into moonfits */ + if (readFITS (fd, &moonfits, msg) < 0) { + xe_msg (1, "%s: %s", fn, msg); + (void) close (fd); + return (-1); + } + (void) close (fd); + + /* make sure it's the new flipped version */ + if (getIntFITS (&moonfits, "XEVERS", &v) < 0 || v != XEVERS) { + xe_msg (1, "%s: Incorrect version", fn); + return (-1); + } + + /* make some local shortcuts */ + im = (unsigned char *) moonfits.image; + imnr = moonfits.sh; + imnc = moonfits.sw; + + /* make some sanity checks */ + + if (moonfits.bitpix != 8 || imnr != MNROWS || imnc != MNCOLS) { + xe_msg (1, "%s: Expected %d x %d but found %d x %d", + fn, MNROWS, MNCOLS, imnr, imnc); + resetFImage (&moonfits); + return (-1); + } + + /* set newim to resized version of im (it _is_ im if f is just 1) */ + if (f != 1) { + unsigned char *newmem; + + newnr = imnr / f; + newnc = imnc / f; + + /* get memory for resized copy */ + newmem = (unsigned char *) malloc (newnr * newnc); + if (!newmem) { + xe_msg (1, "No mem for 1/%dX %d x %d -> %d x %d resize", + f, imnr, imnc, newnr, newnc); + free ((void *)im); + return (-1); + } + + m_resize (im, MNROWS, MNCOLS, f, newmem); + newim = newmem; + free ((void *)im); + } else { + newim = im; + newnr = MNROWS; + newnc = MNCOLS; + } + + /* commit newim to mimage -- set global metrics */ + if (mimage) { + free ((void *)mimage); + mimage = NULL; + } + mimage = newim; + mnrows = newnr; + mncols = newnc; + topmarg = (int)((double)TOPMARG/f + 0.5); + leftmarg = (int)((double)LEFTMARG/f + 0.5); + moonrad = (int)((double)MOONRAD/f + 0.5); + + /* dither mimage if we only have 2 colors to work with */ + if (mbpp == 1) + mBWdither(); + + /* flip mimage, as desired */ + if (option[FLIPTB_OPT]) + fliptb(); + if (option[FLIPLR_OPT]) + fliplr(); + + /* (re)create the X image */ + if (m_xim) { + free ((void *)m_xim->data); + m_xim->data = NULL; + XDestroyImage (m_xim); + m_xim = NULL; + } + if (mxim_create() < 0) { + resetFImage (&moonfits); + mimage = NULL; + return (-1); + } + + /* delete clip_mask so new one will get built when needed */ + m_free_clip_mask (); + + /* delete pixmap so new one will get built on next expose */ + if (m_pm) { + XFreePixmap (XtD, m_pm); + m_pm = 0; + } + + /* recompute location of db on image at this scale */ + m_dbloc(); + + /* size the drawing area to hold the new image plus a border. + * this will give us an expose event to show the new image. + * also center the scrollbars. + */ + m_sizewidgets (); + centerScrollBars(msw_w); + + return(0); +} + +/* set size of mda_w as desired based on mnrows and mncols */ +static void +m_sizewidgets () +{ + int neww = mncols + 2*BORD; + int newh = mnrows + 2*BORD; + + /* mda_w should be image size + BORD all around */ + set_something (mda_w, XmNwidth, (XtArgVal)neww); + set_something (mda_w, XmNheight, (XtArgVal)newh); +} + +/* copy image in, of size nr x nr, to out by shrinking a factor f. + * N.B. we assume out is (nr/f) * (nr/f) bytes. + */ +static void +m_resize(in, nr, nc, f, out) +unsigned char *in, *out; +int nr, nc; +int f; +{ + int outx, outy; + int noutx, nouty; + + noutx = nc/f; + nouty = nr/f; + for (outy = 0; outy < nouty; outy++) { + unsigned char *inrp = &in[outy*f*nr]; + for (outx = 0; outx < noutx; outx++) { + *out++ = *inrp; + inrp += f; + } + } +} + +/* dither mimage into a 2-intensity image: 0 and 255. + * form 2x2 tiles whose pattern depends on intensity peak and spacial layout. + */ +static void +mBWdither() +{ + int idx[4]; + int y; + + idx[0] = 0; + idx[1] = 1; + idx[2] = mncols; + idx[3] = mncols+1; + + for (y = 0; y < mnrows - 1; y += 2) { + unsigned char *mp = &mimage[y*mncols]; + unsigned char *lp; + + for (lp = mp + mncols - 1; mp < lp; mp += 2) { + int sum, numon; + int i; + + sum = 0; + for (i = 0; i < 4; i++) + sum += (int)mp[idx[i]]; + numon = sum*5/1021; /* 1021 is 255*4 + 1 */ + + for (i = 0; i < 4; i++) + mp[idx[i]] = 0; + + switch (numon) { + case 0: + break; + case 1: + case 2: + mp[idx[0]] = 255; + break; + case 3: + mp[idx[0]] = 255; + mp[idx[1]] = 255; + mp[idx[3]] = 255; + break; + case 4: + mp[idx[0]] = 255; + mp[idx[1]] = 255; + mp[idx[2]] = 255; + mp[idx[3]] = 255; + break; + default: + printf ("Bad numon: %d\n", numon); + abort(); + } + } + } +} + +/* draw umbra and penumbra boundaries */ +static void +m_umbra() +{ + Now *np = mm_get_now(); + Obj *mop = db_basic (MOON); + Obj *sop = db_basic (SUN); + double scale; /* image scale, rads per pixel */ + double mrad; /* moon radius, rads */ + double ara, adec; /* anti-solar loc, equatorial coords, rads */ + double alat, alng; /* anti-solar loc, ecliptic coords, rads */ + double mlat, mlng; /* moon loc, ecliptic coords, rads */ + double dlat, dlng; /* difference, rads */ + double cmlat; /* cos moon's lat */ + double sed, med; /* sun-earth and moon-earth dist, au */ + double u, p; /* umbra and penumbra radius, m at moon dist*/ + double maxr; + int dx, dy; + int x, y, r; + + /* get basic info */ + db_update (mop); + db_update (sop); + mrad = degrad(mop->s_size/3600.0)/2.0; + scale = mrad / moonrad; + ara = sop->s_gaera + PI; + adec = -sop->s_gaedec; + eq_ecl (mjd, ara, adec, &alat, &alng); + eq_ecl (mjd, mop->s_gaera, mop->s_gaedec, &mlat, &mlng); + dlat = mlat - alat; + dlng = mlng - alng; + cmlat = cos (mlat); + + /* skip if obviously outside fov */ + maxr = 2*(sqrt((double)mnrows*mnrows + mncols*mncols) + BORD)*scale; + if (fabs(dlat) > maxr || delra(dlng)*cmlat > maxr) + return; + + /* find center of circle */ + dx = (int)floor((dlng*cmlat)/scale + 0.5); /* + right */ + dy = (int)floor(dlat/scale + 0.5); /* + down */ + x = FX(dx+mncols/2) + BORD; + y = FY(dy+mnrows/2) + BORD; + + /* compute diameters at moon (based on similar triangles) */ + med = mop->s_edist; + sed = sop->s_edist; + u = ERAD - med/sed*(SRAD-ERAD); + r = (int)floor(u/MRAD*moonrad + 0.5); + XPSDrawArc (XtD, m_pm, m_fgc, x-r, y-r, 2*r, 2*r, 0, 360*64); + p = ERAD + med/sed*(SRAD-ERAD); + r = (int)floor(p/MRAD*moonrad + 0.5); + XSetLineAttributes (XtD, m_fgc, 0, LineOnOffDash, CapButt, JoinMiter); + XPSDrawArc (XtD, m_pm, m_fgc, x-r, y-r, 2*r, 2*r, 0, 360*64); + XSetLineAttributes (XtD, m_fgc, 0, LineSolid, CapButt, JoinMiter); + + /* tried to draw a line along path by computing ecl loc +- a few + * hours from now but doesn't work since the perspective changes. + */ +} + +/* flip mimage left/right */ +static void +fliplr() +{ + int x, y; + + for (y = 0; y < mnrows; y++) { + unsigned char *rp = &mimage[y*mncols]; + for (x = 0; x < mncols/2; x++) { + unsigned char tmp = rp[x]; + rp[x] = rp[mncols-x-1]; + rp[mncols-x-1] = tmp; + } + } +} + +/* flip mimage top/bottom. + * N.B. will flip back option if can't do it for some reason. + */ +static void +fliptb() +{ + char buf[2048]; /* plenty :-) */ + int y; + + if (mncols > sizeof(buf)) { + xe_msg (1, "Can not flip -- rows are longer than %ld", + (long)sizeof(buf)); + XmToggleButtonSetState (option_w[FLIPTB_OPT], + option[FLIPTB_OPT] ^= 1, False); + return; + } + + + for (y = 0; y < mnrows/2; y++) { + unsigned char *r0 = &mimage[y*mncols]; + unsigned char *r1 = &mimage[(mnrows-y-1)*mncols]; + + (void) memcpy (buf, (void *)r0, mncols); + (void) memcpy ((void *)r0, (void *)r1, mncols); + (void) memcpy ((void *)r1, buf, mncols); + } +} + +/* draw a marker on m_pm to show the limb angle favored by libration */ +static void +m_mark_libr () +{ + int r; /* radius of marker */ + int x, y; /* center of marker */ + + r = moonrad/LMFRAC; + x = leftmarg + (int)(moonrad*(1 - sin(minfo.limb))); + y = topmarg + (int)(moonrad*(1 - cos(minfo.limb))); + + x = FX(x); + y = FY(y); + + XPSFillArc (XtD, m_pm, m_agc, BORD+x-r, BORD+y-r, 2*r, 2*r, 0, 360*64); +} + +/* report the location of x,y, which are with respect to mda_w. + * N.B. allow for flipping and the borders. + */ +static void +m_reportloc (dsp, win, x, y) +Display *dsp; +Window win; +int x, y; +{ + double lt, lg; + + /* convert from mda_w coords to m_xim coords */ + x -= BORD; + y -= BORD; + + if (xy2ll (FX(x), FY(y), <, &lg) == 0) { + Now *np = mm_get_now(); + + f_showit (infot_w, "User cursor:"); + minfo.curlt = lt; + minfo.curlg = lg; + m_info (np); + m_pinfo (); + + } else { + set_xmstring (lat_w, XmNlabelString, " "); + set_xmstring (lng_w, XmNlabelString, " "); + set_xmstring (sunalt_w, XmNlabelString, " "); + set_xmstring (nsrd_w, XmNlabelString, " "); + set_xmstring (nsrt_w, XmNlabelString, " "); + set_xmstring (nssd_w, XmNlabelString, " "); + set_xmstring (nsst_w, XmNlabelString, " "); + } +} + +/* print minfo */ +static void +m_pinfo() +{ + f_dm_angle (lat_w, minfo.curlt); + f_dm_angle (lng_w, minfo.curlg); + f_dm_angle (sunalt_w, minfo.cursunalt); + f_date (nsrd_w, mjd_day(minfo.curnsrt)); + f_mtime (nsrt_w, mjd_hr(minfo.curnsrt)); + f_date (nssd_w, mjd_day(minfo.curnsst)); + f_mtime (nsst_w, mjd_hr(minfo.curnsst)); + + /* update cursor indep info - always on */ + f_dm_angle (srlng_w, minfo.srlng); + f_dm_angle (sslat_w, minfo.sslat); + f_dm_angle (llat_w, minfo.llat); + f_dm_angle (llong_w, minfo.llong); + f_dm_angle (limb_w, minfo.limb); + f_double (lib_w, "%6.3f", minfo.tilt); + f_double (age_w, "%6.3f", minfo.age); +} + +/* make glass_xim of size GLASSSZ*GLASSMAG and same genre as m_xim. + * leave glass_xim NULL if trouble. + */ +static void +makeGlassImage (dsp) +Display *dsp; +{ + int nbytes = (GLASSSZ*GLASSMAG+7) * (GLASSSZ*GLASSMAG+7) * mbpp/8; + char *glasspix = (char *) malloc (nbytes); + + if (!glasspix) { + xe_msg (0, "Can not malloc %d for Glass pixels", nbytes); + return; + } + + glass_xim = XCreateImage (dsp, XDefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ m_xim->depth, + /* format */ m_xim->format, + /* offset */ 0, + /* data */ glasspix, + /* width */ GLASSSZ*GLASSMAG, + /* height */ GLASSSZ*GLASSMAG, + /* pad */ mbpp < 8 ? 8 : mbpp, + /* bpl */ 0); + + if (!glass_xim) { + free ((void *)glasspix); + xe_msg (0, "Can not make Glass XImage"); + return; + } + + glass_xim->bitmap_bit_order = LSBFirst; + glass_xim->byte_order = LSBFirst; +} + +/* make glassGC */ +static void +makeGlassGC (dsp, win) +Display *dsp; +Window win; +{ + XGCValues gcv; + unsigned int gcm; + Pixel p; + + (void) get_color_resource (mda_w, "GlassBorderColor", &p); + gcm = GCForeground; + gcv.foreground = p; + glassGC = XCreateGC (dsp, win, gcm, &gcv); +} + +/* handle the operation of the magnifying glass. + * this is called whenever there is left button activity over the image. + */ +static void +doGlass (dsp, win, b1p, m1, b1r, wx, wy) +Display *dsp; +Window win; +int b1p, m1, b1r; /* button/motion state */ +int wx, wy; /* window coords of cursor */ +{ + static int lastwx, lastwy; + int rx, ry, rw, rh; /* region */ + + /* check for first-time stuff */ + if (!glass_xim) + makeGlassImage (dsp); + if (!glass_xim) + return; /* oh well */ + if (!glassGC) + makeGlassGC (dsp, win); + + if (m1) { + + /* motion: put back old pixels that won't just be covered again */ + + /* first the vertical strip that is uncovered */ + + rh = GLASSSZ*GLASSMAG; + ry = lastwy - (GLASSSZ*GLASSMAG/2); + if (ry < 0) { + rh += ry; + ry = 0; + } + if (wx < lastwx) { + rw = lastwx - wx; /* cursor moved left */ + rx = wx + (GLASSSZ*GLASSMAG/2); + } else { + rw = wx - lastwx; /* cursor moved right */ + rx = lastwx - (GLASSSZ*GLASSMAG/2); + } + if (rx < 0) { + rw += rx; + rx = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, m_pm, win, m_fgc, rx, ry, rw, rh, rx, ry); + + /* then the horizontal strip that is uncovered */ + + rw = GLASSSZ*GLASSMAG; + rx = lastwx - (GLASSSZ*GLASSMAG/2); + if (rx < 0) { + rw += rx; + rx = 0; + } + if (wy < lastwy) { + rh = lastwy - wy; /* cursor moved up */ + ry = wy + (GLASSSZ*GLASSMAG/2); + } else { + rh = wy - lastwy; /* cursor moved down */ + ry = lastwy - (GLASSSZ*GLASSMAG/2); + } + if (ry < 0) { + rh += ry; + ry = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, m_pm, win, m_fgc, rx, ry, rw, rh, rx, ry); + } + + if (b1p || m1) { + + /* start or new location: show glass and save new location */ + + fillGlass (wx-BORD, wy-BORD); + XPutImage (dsp, win, m_fgc, glass_xim, 0, 0, + wx-(GLASSSZ*GLASSMAG/2), wy-(GLASSSZ*GLASSMAG/2), + GLASSSZ*GLASSMAG, GLASSSZ*GLASSMAG); + lastwx = wx; + lastwy = wy; + + /* kinda hard to tell boundry of glass so draw a line around it */ + XDrawRectangle (dsp, win, glassGC, + wx-(GLASSSZ*GLASSMAG/2), wy-(GLASSSZ*GLASSMAG/2), + GLASSSZ*GLASSMAG-1, GLASSSZ*GLASSMAG-1); + } + + if (b1r) { + + /* end: restore all old pixels */ + + rx = lastwx - (GLASSSZ*GLASSMAG/2); + rw = GLASSSZ*GLASSMAG; + if (rx < 0) { + rw += rx; + rx = 0; + } + + ry = lastwy - (GLASSSZ*GLASSMAG/2); + rh = GLASSSZ*GLASSMAG; + if (ry < 0) { + rh += ry; + ry = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, m_pm, win, m_fgc, rx, ry, rw, rh, rx, ry); + } +} + +/* fill glass_xim with GLASSSZ*GLASSMAG view of m_xim centered at coords + * xc,yc. take care at the edges (m_xim is mnrows x mncols) + */ +static void +fillGlass (xc, yc) +int xc, yc; +{ + int sx, sy; /* coords in m_xim */ + int gx, gy; /* coords in glass_xim */ + int i, j; + + gy = 0; + gx = 0; + for (sy = yc-GLASSSZ/2; sy < yc+GLASSSZ/2; sy++) { + for (sx = xc-GLASSSZ/2; sx < xc+GLASSSZ/2; sx++) { + Pixel p; + + if (sx < 0 || sx >= mncols || sy < 0 || sy >= mnrows) + p = XGetPixel (m_xim, 0, 0); + else + p = XGetPixel (m_xim, sx, sy); + for (i = 0; i < GLASSMAG; i++) + for (j = 0; j < GLASSMAG; j++) + XPutPixel (glass_xim, gx+i, gy+j, p); + gx += GLASSMAG; + } + gx = 0; + gy += GLASSMAG; + } +} + +/* read Moon database: fill up moodb[] and set nmoondb. + * N.B. to fill in x,y we assume the lat/long match the image orientation in + * its original form, ie, up N right E. + * if fail, leave moondb NULL. + */ +static void +m_readdb() +{ +#define NDBCHUNKS 32 /* malloc room for these many more each time */ + LilXML *xp; + XMLEle *root, *ep; + char buf[1024]; + char fn[1024]; + int ndb; + FILE *fp; + + /* open file */ + (void) sprintf (fn, "%s/lo/lodb.xml", getShareDir()); + fp = fopenh (fn, "r"); + if (!fp) { + xe_msg (1, "%s: %s", fn , syserrstr()); + return; + } + + /* reset moondb[] */ + m_freedb(); + ndb = 0; + + watch_cursor (1); + + /* prep and read the data file */ + xp = newLilXML(); + root = readXMLFile (fp, xp, buf); + fclose (fp); + delLilXML (xp); + if (!root) { + xe_msg (1, "%s:\n%s", fn, buf); + return; + } + if (strcmp (tagXMLEle(root), "XEphemLunarDB")) { + xe_msg (1, "%s:\nNot XEphem Lunar database", fn); + delXMLEle (root); + return; + } + + /* read each feature and add each to list */ + for (ep = nextXMLEle (root, 1); ep != NULL; ep = nextXMLEle(root,0)) { + XMLEle *fe; + MoonDB *mp; + char *type; + int x, y; + int i; + + /* confirm feature tag */ + if (strcmp (tagXMLEle(ep), "feature")) + continue; + + /* grow moondb if now filled */ + if (nmoondb == ndb) { + moondb = (MoonDB *) XtRealloc ((char *)moondb, + (ndb+NDBCHUNKS)*sizeof(MoonDB)); + ndb += NDBCHUNKS; + } + mp = &moondb[nmoondb]; + memset (mp, 0, sizeof(*mp)); + + /* build new entry at mp */ + + /* lat/long location, x/y gets set once we know the image scale */ + mp->lt = degrad(atof(findXMLAttValu(ep, "lat"))); + mp->lg = degrad(atof(findXMLAttValu(ep, "long"))); + if (ll2xy (mp->lt, mp->lg, &x, &y) < 0) + continue; /* far side */ + + /* copy name */ + mp->name = XtNewString(findXMLAttValu(ep, "name")); + + /* copy type, but try to reuse */ + type = findXMLAttValu(ep, "type"); + for (i = 0; i < nmoondb; i++) + if (strcmp (moondb[i].type, type) == 0) { + mp->type = moondb[i].type; + break; /* reuse type string */ + } + if (i == nmoondb) { + /* ok, first time we've seen this type */ + mp->type = XtNewString (type); + } + + /* add each file basename */ + for (fe = nextXMLEle (ep, 1); fe != NULL; fe = nextXMLEle(ep,0)) { + if (strcmp(tagXMLEle(fe), "file")) + continue; + mp->lofiles = (char **) XtRealloc ((char *)mp->lofiles, + (mp->nlofiles+1)*sizeof(char*)); + mp->lofiles[mp->nlofiles++] = + XtNewString (findXMLAttValu(fe, "base")); + } + + /* initialy not persistent label */ + mp->pl = 0; + + /* all ok */ + nmoondb++; + } + + /* finished with xml */ + delXMLEle (root); + + /* warn if nothing found */ + if (nmoondb == 0) + xe_msg (0, "%s:\nNo moon database entries found", fn); + + /* ok */ + watch_cursor(0); +} + +/* compare two pointers to string, qsort-style */ +static int +ncmp_qsort (const void *p1, const void *p2) +{ + return (strcmp (*(char**)p1, *(char**)p2)); +} + +/* fill the scrolled list with db names */ +static void +m_fillSL() +{ + char **names; + int i; + + /* build the list of names in sorted order */ + names = (char **) XtMalloc (nmoondb * sizeof(char *)); + for (i = 0; i < nmoondb; i++) + names[i] = moondb[i].name; + qsort (names, nmoondb, sizeof(char *), ncmp_qsort); + + /* put in scrolled list */ + XmListDeleteAllItems (msl_w); + for (i = 0; i < nmoondb; i++) { + XmString xms = XmStringCreateSimple (names[i]); + XmListAddItemUnselected (msl_w, xms, 0); + XmStringFree (xms); + } + + /* finished with sorted list */ + XtFree ((char *)names); +} + +/* free moondb[] and the names and types. + * N.B. beware that type strings may not all be unique. + * N.B. we allow for moondb being already NULL. + */ +static void +m_freedb() +{ + int i, j; + + if (moondb == NULL) + return; + + for (i = 0; i < nmoondb; i++) { + MoonDB *mp = &moondb[i]; + + /* free name for sure -- each is unique */ + XtFree (mp->name); + + /* free type once -- pointer might be reused */ + if (mp->type) { + XtFree (mp->type); + for (j = i+1; j < nmoondb; j++) + if (moondb[j].type == mp->type) + moondb[j].type = NULL; + } + + /* free lo images */ + if (mp->lofiles) { + for (j = 0; j < mp->nlofiles; j++) + XtFree (mp->lofiles[j]); + XtFree ((char *)mp->lofiles); + } + } + + /* now free the array itself */ + XtFree ((char *)moondb); + moondb = NULL; + nmoondb = 0; +} + +/* free the list of sky objects, if any */ +static void +resetSkyObj () +{ + if (skyobjs) { + free ((void *) skyobjs); + skyobjs = NULL; + } + nskyobjs = 0; +} + +/* add op at [x,y] to the list of background sky objects */ +static void +addSkyObj (op, x, y) +Obj *op; +int x, y; +{ + char *newmem; + + if (skyobjs) + newmem = realloc ((void *)skyobjs, (nskyobjs+1) * sizeof(SkyObj)); + else + newmem = malloc (sizeof(SkyObj)); + if (!newmem) { + xe_msg (1, "No mem for more sky objects"); + return; + } + + skyobjs = (SkyObj *) newmem; + skyobjs[nskyobjs].op = op; + skyobjs[nskyobjs].x = x; + skyobjs[nskyobjs].y = y; + nskyobjs++; +} + +/* find the object in skyobjs[] that is closest to [x,y]. + * return NULL if none within MAXR. + */ +static Obj * +closeSkyObj (x, y) +int x, y; +{ + SkyObj *closesp = NULL; + int mind = 0; + int i; + + for (i = 0; i < nskyobjs; i++) { + SkyObj *sp = &skyobjs[i]; + int d = abs(sp->x - x) + abs(sp->y - y); + + if (!closesp || d < mind) { + mind = d; + closesp = sp; + } + } + + if (closesp && mind <= MAXR) + return (closesp->op); + return (NULL); +} + +/* called when hit button 3 over image */ +static void +m_popup (ep) +XEvent *ep; +{ + XButtonEvent *bep; + int x, y; + + bep = &ep->xbutton; + x = bep->x; + y = bep->y; + + if (overMoon (x, y)) { + MoonDB *mp = closeMoonDB (x-BORD, y-BORD); + fill_popup (mp, x-BORD, y-BORD); + XmMenuPosition (pu_w, (XButtonPressedEvent *)ep); + XtManageChild (pu_w); + } else { + Obj *op = closeSkyObj (x, y); + if (op) { + fill_skypopup (op); + XmMenuPosition (skypu_w, (XButtonPressedEvent *)ep); + XtManageChild (skypu_w); + } + } +} + +/* create the popup menu */ +static void +m_create_popup() +{ + Widget w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + pu_w = XmCreatePopupMenu (mda_w, "MPU", args, n); + + n = 0; + pu_name_w = XmCreateLabel (pu_w, "MPN", args, n); + wtip (pu_name_w, "Name of feature"); + XtManageChild (pu_name_w); + + n = 0; + pu_type_w = XmCreateLabel (pu_w, "MPT", args, n); + wtip (pu_type_w, "Basic type of feature"); + XtManageChild (pu_type_w); + + n = 0; + pu_lat_w = XmCreateLabel (pu_w, "MPLat", args, n); + wtip (pu_lat_w, "Selenographic latitude of this feature"); + XtManageChild (pu_lat_w); + + n = 0; + pu_lng_w = XmCreateLabel (pu_w, "MPLng", args, n); + wtip (pu_lng_w, "Selenographic longitude of this feature"); + XtManageChild (pu_lng_w); + + n = 0; + pu_alt_w = XmCreateLabel (pu_w, "MPAlt", args, n); + wtip (pu_alt_w, "Altitude of Sun above horizon at this feature"); + XtManageChild (pu_alt_w); + + n = 0; + w = XmCreateSeparator (pu_w, "MPS", args, n); + XtManageChild (w); + + /* persistent label TB -- managed as needed */ + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + pu_pl_w = XmCreateToggleButton (pu_w, "MPPL", args, n); + XtAddCallback (pu_pl_w, XmNvalueChangedCallback, m_pl_cb, 0); + set_xmstring (pu_pl_w, XmNlabelString, "Label"); + wtip (pu_pl_w, "Whether to label this object on the map."); + + /* copy to Info table PB -- managed as needed */ + n = 0; + pu_copy_w = XmCreatePushButton (pu_w, "MPC", args, n); + XtAddCallback (pu_copy_w, XmNactivateCallback, m_copy_cb, 0); + set_xmstring (pu_copy_w, XmNlabelString, "Set info table"); + wtip (pu_copy_w, "Copy this feature location to the Moon info table"); + + /* show LO PB -- managed as needed */ + n = 0; + pu_showlo_w = XmCreatePushButton (pu_w, "MLO", args, n); + XtAddCallback (pu_showlo_w, XmNactivateCallback, m_showlo_cb, 0); + set_xmstring (pu_showlo_w, XmNlabelString, "Lunar Orbiter image"); + wtip (pu_showlo_w, "Show feature in lunar orbiter images"); +} + +/* fill in popup widgets from mp. if mp == NULL use x,y and skip name. + * x and y are in image coords, (as in m_xim), not mda_w. + * N.B. since we assume the database matches the original image orientation + * there is no need to correct mp->{x,y} for flipping. + */ +static void +fill_popup (mp, x, y) +MoonDB *mp; +int x, y; +{ + Now *np = mm_get_now(); + double lt, lg; + double a; + char str[64]; + + /* create popup first time */ + if (!pu_w) + m_create_popup(); + + if (mp) { + XtManageChild (pu_name_w); + f_showit (pu_name_w, mp->name); + XtManageChild (pu_type_w); + f_showit (pu_type_w, mp->type); + XtManageChild (pu_pl_w); + XmToggleButtonSetState (pu_pl_w, mp->pl, False); + set_something (pu_pl_w, XmNuserData, (XtArgVal)mp); + XtManageChild (pu_copy_w); + set_something (pu_copy_w, XmNuserData, (XtArgVal)mp); + lt = mp->lt; + lg = mp->lg; + if (mlo_installed() && mp->nlofiles > 0) { + XtManageChild (pu_showlo_w); + set_something (pu_showlo_w, XmNuserData, (XtArgVal)mp); + } else + XtUnmanageChild (pu_showlo_w); + } else { + XtUnmanageChild (pu_name_w); + XtUnmanageChild (pu_type_w); + XtUnmanageChild (pu_pl_w); + XtUnmanageChild (pu_copy_w); + XtUnmanageChild (pu_showlo_w); + xy2ll (FX(x), FY(y), <, &lg); + } + + (void) strcpy (str, "Lat: "); + if (lt < 0) { + fs_dm_angle (str+5, -lt); + (void) strcat (str, " S"); + } else { + fs_dm_angle (str+5, lt); + (void) strcat (str, " N"); + } + f_showit (pu_lat_w, str); + + (void) strcpy (str, "Long: "); + if (lg > PI) { + fs_dm_angle (str+6, 2*PI-lg); + (void) strcat (str, " W"); + } else { + fs_dm_angle (str+6, lg); + (void) strcat (str, " E"); + } + f_showit (pu_lng_w, str); + + moon_colong (mjd+MJD0, lt, lg, NULL, NULL, &a, NULL); + (void) strcpy (str, "Sun alt: "); + fs_dm_angle (str+9, a); + f_showit (pu_alt_w, str); +} + +/* find the closest entry in moondb[] to [x,y]. + * if find one return its *MoonDB else NULL. + * x and y are in image coords (as in m_xim), not mda_w. + * N.B. we allow for flipping. + */ +static MoonDB * +closeMoonDB (x, y) +int x, y; +{ + MoonDB *mp, *smallp; + double lt, lg; /* location of [x,y] */ + double forsh; /* foreshortening (cos of angle from center) */ + int minr2; + + /* allow for flipping */ + x = FX(x); + y = FY(y); + + /* find forshortening */ + if (xy2ll (x, y, <, &lg) < 0) + return (NULL); + solve_sphere (lg - CLNG, PI/2-CLAT, sin(lt), cos(lt), &forsh, NULL); + + watch_cursor(1); + + minr2 = 100000000; + smallp = NULL; + for (mp = moondb; mp < &moondb[nmoondb]; mp++) { + int dx = mp->x - x; + int dy = mp->y - y; + int r2 = dx*dx + dy*dy; + + if (r2 < minr2) { + smallp = mp; + minr2 = r2; + } + } + + watch_cursor(0); + + return (smallp); +} + +/* clicked or double-clicked a name in the main db list */ +static void +m_select_cb (Widget w, XtPointer client, XtPointer call) +{ + XmListCallbackStruct *lcb = (XmListCallbackStruct *)call; + int dblclick = lcb->reason == XmCR_DEFAULT_ACTION; + XmString sel = lcb->item; + char *name; + MoonDB *mp; + + XmStringGetLtoR (sel, XmSTRING_DEFAULT_CHARSET, &name); + + /* toggle label, and display if double-clicked */ + for (mp = moondb; mp < &moondb[nmoondb]; mp++) { + if (strcmp (mp->name, name) == 0) { + + if (dblclick) { + /* display lunar orbiter image if any */ + if (mlo_installed()) { + mlo_load (mp); + XtPopup (mlo_shell_w, XtGrabNone); + } + } else { + /* toggle label */ + mp->pl ^= 1; + if (mp->pl) { + if (!option[LABELS_OPT]) { + /* turn on all labels and draw */ + XmToggleButtonSetState (option_w[LABELS_OPT],1,1); + } else { + /* draw just this one */ + m_labels(); + m_refresh (NULL); + } + } else { + /* redraw to erase */ + m_redraw(); + } + } + + break; + } + } + + XtFree (name); +} + +/* called when the persistent label TB is activated in the popup. + * userData is the MoonDB entry whose pl we toggle, then redraw. + */ +/* ARGSUSED */ +static void +m_pl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + MoonDB *mp; + + get_something (w, XmNuserData, (XtArgVal)&mp); + mp->pl = XmToggleButtonGetState (w); + + /* draw just labels if adding or redraw all to erase */ + if (mp->pl) { + m_labels(); + m_refresh (NULL); + } else + m_redraw(); +} + +/* called when to copy the current feature to the moon info table. + * userData is the MoonDB entry to copy. + */ +/* ARGSUSED */ +static void +m_copy_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Now *np = mm_get_now(); + MoonDB *mp; + + get_something (w, XmNuserData, (XtArgVal)&mp); + xy2ll (mp->x, mp->y, &minfo.curlt, &minfo.curlg); + m_info (np); + set_xmstring (infot_w, XmNlabelString, mp->name); + m_pinfo (); + + /* display too */ + XtManageChild (msform_w); + m_set_buttons(m_selecting); +} + +/* called to display lunar orbiter image from popup. + * userData is the MoonDB entry to show. + */ +/* ARGSUSED */ +static void +m_showlo_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + MoonDB *mp; + + get_something (w, XmNuserData, (XtArgVal)&mp); + + /* if there /is/ an image for this feature... */ + if (mp->nlofiles > 0) { + /* display */ + mlo_load (mp); + XtPopup (mlo_shell_w, XtGrabNone); + + /* set label just to be helpful */ + mp->pl = 1; + m_labels(); + m_refresh (NULL); + } +} + +/* assign the object pointed to by skypu_op to Favorites + */ +static void +m_assign_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + fav_add (skypu_op); +} + +/* create the sky background object popup menu */ +static void +m_create_skypopup() +{ + Widget w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + skypu_w = XmCreatePopupMenu (mda_w, "MSKYPU", args, n); + + n = 0; + skypu_name_w = XmCreateLabel (skypu_w, "MSKYPN", args, n); + wtip (skypu_name_w, "Name of object"); + XtManageChild (skypu_name_w); + + n = 0; + skypu_mag_w = XmCreateLabel (skypu_w, "MSKYPM", args, n); + wtip (skypu_mag_w, "Nominal magnitude"); + XtManageChild (skypu_mag_w); + + /* sep */ + n = 0; + w = XmCreateSeparator (skypu_w, "MSKYS", args, n); + XtManageChild (w); + + /* a PB to add to Favorites */ + n = 0; + w = XmCreatePushButton (skypu_w, "ABPB", args, n); + XtAddCallback (w, XmNactivateCallback, m_assign_cb, 0); + set_xmstring (w, XmNlabelString, "Add to Favorites"); + XtManageChild (w); +} + +/* fill skypu_w with info from op */ +static void +fill_skypopup (op) +Obj *op; +{ + char buf[32]; + + /* create popup first time */ + if (!skypu_w) + m_create_skypopup(); + + /* save in case it's assigned */ + skypu_op = op; + + /* show name and mag */ + f_showit (skypu_name_w, op->o_name); + (void) sprintf (buf, "Mag: %.2f", get_mag(op)); + f_showit (skypu_mag_w, buf); +} + +/* create the shell to display lunar orbiter images */ +static void +mlo_create_shell() +{ + Widget w, credit_w; + Widget mform_w; + Arg args[20]; + int n; + + /* create master form */ + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Lunar Orbiter view"); n++; + XtSetArg (args[n], XmNiconName, "LOrbiter"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + mlo_shell_w = XtCreatePopupShell ("MoonLO", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (mlo_shell_w); + set_something (mlo_shell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (mlo_shell_w, XmNpopdownCallback, mlo_popdown_cb, 0); + sr_reg (mlo_shell_w, "XEphem*MoonLO.width", mooncategory, 0); + sr_reg (mlo_shell_w, "XEphem*MoonLO.height", mooncategory, 0); + sr_reg (mlo_shell_w, "XEphem*MoonLO.x", mooncategory, 0); + sr_reg (mlo_shell_w, "XEphem*MoonLO.y", mooncategory, 0); + + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + mform_w = XmCreateForm (mlo_shell_w, "MoonLOF", args, n); + XtManageChild (mform_w); + + /* scrolled list in lower right to display possible file choices */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + XtSetArg (args[n], XmNvisibleItemCount, 4); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + mlo_sl_w = XmCreateScrolledList (mform_w, "MLOSL", args, n); + XtAddCallback (mlo_sl_w, XmNbrowseSelectionCallback, mlo_select_cb,0); + XtManageChild (mlo_sl_w); + + /* annotation and close buttons */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 15); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + w = XmCreatePushButton (mform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, mlo_close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 15); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + mlo_ann_w = XmCreateToggleButton (mform_w, "Overlay", args, n); + XtAddCallback (mlo_ann_w, XmNvalueChangedCallback, mlo_ann_cb, NULL); + set_xmstring (mlo_ann_w, XmNlabelString, "Overlay annotation"); + sr_reg (mlo_ann_w, NULL, mooncategory, 0); + XtManageChild (mlo_ann_w); + + /* credit */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, XtParent(mlo_sl_w)); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + credit_w = XmCreateLabel (mform_w, "LOC", args, n); + set_xmstring (credit_w, XmNlabelString, "Lunar Orbiter images used by permission of\nLunar and Planetary Institute, http://www.lpi.usra.edu"); + XtManageChild (credit_w); + + /* label in a scrolled window for image */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, credit_w); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + mlo_sw_w = XmCreateScrolledWindow (mform_w, "MLOSW", args, n); + XtManageChild (mlo_sw_w); + + n = 0; + XtSetArg (args[n], XmNrecomputeSize, True); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + mlo_pml_w = XmCreateLabel (mlo_sw_w, "MLOPML", args, n); + XtManageChild (mlo_pml_w); +} + +/* callback from mlo_shell_w being popped down. + */ +/* ARGSUSED */ +static void +mlo_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +} + +/* called from Close button in lunar orbiter window */ +static void +mlo_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (mlo_shell_w); + /* let popdown do all the work */ +} + +/* load the files in the Lunar Orbiter scrolled list and load the first image */ +static void +mlo_load (MoonDB *mp) +{ + int i; + + /* load scrolled list */ + XmListDeleteAllItems (mlo_sl_w); + for (i = 0; i < mp->nlofiles; i++) { + XmString xms = XmStringCreateSimple (mp->lofiles[i]); + XmListAddItemUnselected (mlo_sl_w, xms, 0); + XmStringFree (xms); + } + + /* select first image and show it */ + XmListSelectPos (mlo_sl_w, 1, True); +} + +/* a file in the lunar orbiter scrolled list has been selected for display */ +static void +mlo_select_cb (Widget w, XtPointer client, XtPointer call) +{ + XmString sel = ((XmListCallbackStruct *)call)->item; + char *base; + + XmStringGetLtoR (sel, XmSTRING_DEFAULT_CHARSET, &base); + mlo_load_image (base); + XtFree (base); + centerScrollBars(mlo_sw_w); +} + +/* user has changed whether to show annotated or not */ +static void +mlo_ann_cb (Widget w, XtPointer client, XtPointer call) +{ + XmStringTable xmst; + char *base; + + get_something (mlo_sl_w, XmNselectedItems, (XtArgVal)&xmst); + XmStringGetLtoR (xmst[0], XmSTRING_DEFAULT_CHARSET, &base); + mlo_load_image (base); + XtFree (base); +} + +static void +mlo_load_image (char *base) +{ + static XColor xcol[256]; + static int xcolset; + Pixmap oldpm, pm; + FILE *fp; + char msg[1024]; + int w, h; + + fp = mlo_open (base); + if (!fp) { + xe_msg (1, "%s.jpg:\n%s", base, syserrstr()); + return; + } + + /* free last batch of colors */ + if (xcolset) { + freeXColors (XtD, xe_cm, xcol, XtNumber(xcol)); + xcolset = 0; + } + + /* create the expose pixmap */ + if (jpeg2pm (XtD, xe_cm, fp, &w, &h, &pm, xcol, msg) < 0) { + xe_msg (1, "%s:\n%s", base, msg); + fclose (fp); + return; + } + xcolset = 1; + + /* replace label pixmap */ + get_something (mlo_pml_w, XmNlabelPixmap, (XtArgVal)&oldpm); + if (oldpm != XmUNSPECIFIED_PIXMAP) + XFreePixmap (XtD, oldpm); + set_something (mlo_pml_w, XmNlabelPixmap, (XtArgVal)pm); + + /* clean up */ + fclose (fp); +} + +/* return 1 if lunar orbiter images appear to be installed, else 0 */ +static int +mlo_installed() +{ + FILE *fp = mlo_open ("IV-130-H1"); + if (fp) { + fclose (fp); + return (1); + } + return (0); +} + +/* given the base name open a lunar orbiter image. + */ +static FILE * +mlo_open (char *base) +{ + int ann = XmToggleButtonGetState (mlo_ann_w); + char fn[1024]; + + sprintf (fn, "%s/lo/%s/%s.jpg", getShareDir(), ann?"amg":"img", base); + return (fopen (fn, "r")); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moonmenu.c,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.64 $ $Name: $"}; diff --git a/GUI/xephem/moviemenu.c b/GUI/xephem/moviemenu.c new file mode 100644 index 0000000..d5d9b99 --- /dev/null +++ b/GUI/xephem/moviemenu.c @@ -0,0 +1,911 @@ +/* code to manage movie loop display. + * + * N.B. in order to keep the frame scale happy, we keep the min set to 0 and + * never set the max below 1 even if there are no images. always use npixmaps + * to tell how many frames are in the movie, not the max of the frame scale. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "png.h" + +static void ml_create_shell (void); +static void ml_create_prepd_w(void); +static void ml_help_cb (Widget w, XtPointer client, XtPointer data); +static void ml_close_cb (Widget w, XtPointer client, XtPointer data); +static void ml_frame_cb (Widget w, XtPointer client, XtPointer data); +static void ml_fwrd_cb (Widget w, XtPointer client, XtPointer data); +static void ml_back_cb (Widget w, XtPointer client, XtPointer data); +static void ml_rate_cb (Widget w, XtPointer client, XtPointer data); +static void ml_delone_cb (Widget w, XtPointer client, XtPointer data); +static void ml_delall_cb (Widget w, XtPointer client, XtPointer data); +static void ml_save_cb (Widget w, XtPointer client, XtPointer data); +static void ml_exp_cb (Widget w, XtPointer client, XtPointer data); +static void ml_prefix_cb (Widget w, XtPointer client, XtPointer call); +static void ml_timer_cb (XtPointer client, XtIntervalId *id); +static void getWH (Drawable d, unsigned int *wp, unsigned int *hp); +static void delall(void); +static void showFrame(int n); +static void stopLooping(void); +static void saveMovie(char *prefix); +static int addPixmap (Drawable pm, Widget timestamp); +static int getPMPix (Pixmap pm, unsigned char **raster, unsigned int *wp, + unsigned int *hp); +static int writePNG (char *fn, unsigned char *raster, unsigned int w, + unsigned int h); + +static Widget mlshell_w; /* main shell */ +static Widget prepd_w; /* prefix name prompt dialog */ +static Widget mlda_w; /* main drawing area */ +static Widget mlsw_w; /* scrolled window for image */ +static Widget bounce_w; /* TB whether to bounce */ +static Widget frame_w; /* scale to show/control frame number */ +static Widget rate_w; /* scale to control movie rate */ + +static int bouncing; /* whether currently moving backwards */ + +static Pixmap *pixmaps; /* malloced list of pixmaps in movie */ +static int npixmaps; /* number of pixmaps in movie */ + +static XtIntervalId ml_id; /* movie timer */ + +static char mlcategory[] = "Movie"; + +/* bring up the movie loop tool */ +void +ml_manage() +{ + /* create shell if first time */ + if (!mlshell_w) + ml_create_shell(); + + /* insure visible */ + XtPopup (mlshell_w, XtGrabNone); + set_something (mlshell_w, XmNiconic, (XtArgVal)False); +} + +/* add a pixmap to the movie loop, creating if first time */ +void +ml_add (Drawable pm, Widget timestamp) +{ + /* avoid misuse */ + if (!pm) + return; + + /* create shell if first time */ + if (!mlshell_w) + ml_create_shell(); + + /* add */ + if (timestamp) + XmUpdateDisplay (timestamp); + if (addPixmap (pm, timestamp) < 0) + return; + + /* up and show */ + ml_manage(); + showFrame (npixmaps-1); +} + +/* convenience function to add Ctrl-m accelerator to the given PB args at n. + * return number of entries added to args[] + */ +int +ml_addacc (Arg args[], int n) +{ + XtSetArg (args[n], XmNacceleratorText, + XmStringCreate("Ctrl+m", XmSTRING_DEFAULT_CHARSET)); n++; + XtSetArg (args[n], XmNaccelerator, "Ctrlm"); n++; + + return (2); +} + +/* called to put up or remove the watch cursor. */ +void +ml_cursor (Cursor c) +{ + Window win; + + if (mlshell_w && (win = XtWindow(mlshell_w)) != 0) { + Display *dsp = XtDisplay(mlshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create main shell */ +static void +ml_create_shell () +{ + Widget pd_w, cb_w, mb_w; + Widget w, f_w, ff_w, rf_w; + Arg args[20]; + int n; + + /* create outter shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Movie"); n++; + XtSetArg (args[n], XmNiconName, "Movie"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + mlshell_w = XtCreatePopupShell ("Movie", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (mlshell_w, XmNcolormap, (XtArgVal)xe_cm); + setup_icon (mlshell_w); + sr_reg (mlshell_w, "XEphem*Movie.x", mlcategory, 0); + sr_reg (mlshell_w, "XEphem*Movie.y", mlcategory, 0); + sr_reg (mlshell_w, "XEphem*Movie.height", mlcategory, 0); + sr_reg (mlshell_w, "XEphem*Movie.width", mlcategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 10); n++; + f_w = XmCreateForm (mlshell_w, "MovieF", args, n); + XtAddCallback (f_w, XmNhelpCallback, ml_help_cb, 0); + XtManageChild(f_w); + + /* menu bar */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (f_w, "SMB", args, n); + XtManageChild (mb_w); + + /* Control */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'D'); n++; + w = XmCreatePushButton (pd_w, "DelOne", args, n); + set_xmstring (w, XmNlabelString, "Delete current frame"); + wtip (w, "Delete the current frame from the movie"); + XtAddCallback (w, XmNactivateCallback, ml_delone_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'a'); n++; + w = XmCreatePushButton (pd_w, "DelAll", args, n); + set_xmstring (w, XmNlabelString, "Delete all frames"); + wtip (w, "Delete the entire movie"); + XtAddCallback (w, XmNactivateCallback, ml_delall_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'S'); n++; + w = XmCreatePushButton (pd_w, "Save", args, n); + set_xmstring (w, XmNlabelString, "Save frames ..."); + wtip (w, "Save each movie frame to individual files"); + XtAddCallback (w, XmNactivateCallback, ml_save_cb, 0); + XtManageChild (w); + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, ml_close_cb, 0); + wtip (w, "Close this window"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Control", args, n); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + XtManageChild (cb_w); + + /* help */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HPD", args, n); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + wtip (w, "Get more help on making and viewing movies"); + XtAddCallback (w, XmNactivateCallback, ml_help_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Help", args, n); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + XtManageChild (cb_w); + + /* frame control */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 45); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + ff_w = XmCreateForm (f_w, "FF", args, n); + XtManageChild (ff_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (ff_w, "SelLbl", args, n); + set_xmstring (w, XmNlabelString, "Frame selection:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNvalue, 0); n++; + XtSetArg (args[n], XmNmaximum, 1); n++; + frame_w = XmCreateScale (ff_w, "FSScale", args, n); + wtip (frame_w, "Displays and sets the movie frame to view"); + XtAddCallback (frame_w, XmNdragCallback, ml_frame_cb, NULL); + XtAddCallback (frame_w, XmNvalueChangedCallback, ml_frame_cb, NULL); + XtManageChild (frame_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, frame_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + bounce_w = XmCreateToggleButton (ff_w, "Bounce", args, n); + wtip (bounce_w,"Whether to flow forward-backward or forward-reset"); + XtManageChild (bounce_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, frame_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreatePushButton (ff_w, "Fwrd", args, n); + wtip (w, "Move to next frame, wrap to first from last"); + set_xmstring (w, XmNlabelString, "Step +1"); + XtAddCallback (w, XmNactivateCallback, ml_fwrd_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, frame_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, w); n++; + XtSetArg (args[n], XmNrightOffset, 10); n++; + w = XmCreatePushButton (ff_w, "Back", args, n); + wtip (w, "Move to previous frame, wrap to last from first"); + set_xmstring (w, XmNlabelString, "Step -1"); + XtAddCallback (w, XmNactivateCallback, ml_back_cb, NULL); + XtManageChild (w); + + /* rate control */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ff_w); n++; + XtSetArg (args[n], XmNtopOffset, 0); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 55); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + rf_w = XmCreateForm (f_w, "RF", args, n); + XtManageChild (rf_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (rf_w, "RateLbl", args, n); + set_xmstring (w, XmNlabelString, "Frames per second:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNmaximum, 10); n++; + rate_w = XmCreateScale (rf_w, "FRScale", args, n); + wtip (rate_w, "Set the number of frames displayed per second"); + XtAddCallback (rate_w, XmNvalueChangedCallback, ml_rate_cb, NULL); + XtAddCallback (rate_w, XmNdragCallback, ml_rate_cb, NULL); + XtManageChild (rate_w); + + /* remainder is scrolled window for images */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ff_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + XtSetArg (args[n], XmNshadowThickness, 1); n++; + mlsw_w = XmCreateScrolledWindow (f_w, "MovieSW", args, n); + XtManageChild (mlsw_w); + + /* workarea is a drawing area */ + + n = 0; + XtSetArg (args[n], XmNwidth, 500); n++; + XtSetArg (args[n], XmNheight, 500); n++; + mlda_w = XmCreateDrawingArea (mlsw_w, "MovieMap", args, n); + XtAddCallback (mlda_w, XmNexposeCallback, ml_exp_cb, NULL); + XtManageChild (mlda_w); + + /* SW assumes work is its child but just to be tidy about it .. */ + set_something (mlsw_w, XmNworkWindow, (XtArgVal)mlda_w); +} + +/* ARGSUSED */ +static void +ml_help_cb (Widget w, XtPointer client, XtPointer data) +{ + static char *msg[] = { + "This tool creates and controls a movie loop of pixmaps" + }; + + hlp_dialog ("Movie", msg, XtNumber(msg)); +} + +/* ARGSUSED */ +static void +ml_close_cb (Widget w, XtPointer client, XtPointer data) +{ + XtPopdown (mlshell_w); +} + +/* called to fill in the main drawing area with the current frame, if any */ +/* ARGSUSED */ +static void +ml_exp_cb (Widget wid, XtPointer client, XtPointer data) +{ + GC gc = DefaultGC(XtD,DefaultScreen(XtD)); + Window dawin = XtWindow(wid); + unsigned int w, h; + Pixmap pm; + int i; + + /* might be called before any pixmaps defined */ + if (npixmaps <= 0) { + XClearWindow (XtD, dawin); + return; + } + + /* get current pixmap. + * N.B. beware case of keeping XmNmax at least 1 even when only 1 frame. + */ + XmScaleGetValue (frame_w, &i); + if (i == npixmaps) { + i = 0; + } else if (i > npixmaps) { + printf ("movie frame %d > number of pixmaps %d\n", i, npixmaps); + abort(); + } + pm = pixmaps[i]; + getWH (pm, &w, &h); + XCopyArea (XtD, pm, dawin, gc, 0, 0, w, h, 0, 0); +} + +/* ARGSUSED */ +static void +ml_delone_cb (Widget w, XtPointer client, XtPointer data) +{ + int i; + + if (npixmaps == 0) + return; + + stopLooping(); + XmScaleGetValue (frame_w, &i); + XFreePixmap (XtD, pixmaps[i]); + memmove (&pixmaps[i], &pixmaps[i+1], (npixmaps-i-1)*sizeof(Pixmap)); + if (i == --npixmaps) { + i--; + XmScaleSetValue (frame_w, i >= 0 ? i : 0); + } + if (npixmaps > 0) + set_something (frame_w, XmNmaximum, npixmaps); /* keep max > 0 */ + showFrame (i); +} + +/* ARGSUSED */ +static void +ml_save_cb (Widget w, XtPointer client, XtPointer data) +{ + if (!prepd_w) + ml_create_prepd_w(); + + if (npixmaps == 0) { + xe_msg (1, "Movie contains no frames"); + return; + } + + XtManageChild (prepd_w); +} + +/* ARGSUSED */ +static void +ml_delall_cb (Widget w, XtPointer client, XtPointer data) +{ + if (npixmaps == 0) + return; + + stopLooping(); + + if (confirm()) + query (mlshell_w, "Delete entire movie?", "No", "Yes", NULL, + NULL, delall, NULL); + else + delall(); +} + +/* delete entire movie */ +static void +delall() +{ + int i; + + for (i = 0; i < npixmaps; i++) + XFreePixmap (XtD, pixmaps[i]); + + npixmaps = 0; + XmScaleSetValue (frame_w, 0); + set_something (frame_w, XmNmaximum, 1); /* keep max > 0 */ + showFrame (-1); +} + +/* callback from the rate control */ +static void +ml_rate_cb (Widget w, XtPointer client, XtPointer data) +{ + int r; + + XmScaleGetValue (w, &r); + + if (r == 0 && ml_id != 0) { + XtRemoveTimeOut (ml_id); + ml_id = 0; + } else if (r > 0 && ml_id == 0 && npixmaps >= 2) { + ml_id = XtAppAddTimeOut (xe_app, 0, ml_timer_cb, 0); + } +} + +/* callback to move one frame forward */ +static void +ml_fwrd_cb (Widget w, XtPointer client, XtPointer data) +{ + int i; + + if (npixmaps == 0) { + XmScaleSetValue (frame_w, 0); + return; + } + + stopLooping(); + XmToggleButtonSetState (bounce_w, False, True); + XmScaleGetValue (frame_w, &i); + i = (i+1)%npixmaps; + XmScaleSetValue (frame_w, i); + showFrame (i); +} + +/* callback to move one frame backward */ +static void +ml_back_cb (Widget w, XtPointer client, XtPointer data) +{ + int i; + + if (npixmaps == 0) { + XmScaleSetValue (frame_w, 0); + return; + } + + stopLooping(); + XmToggleButtonSetState (bounce_w, False, True); + XmScaleGetValue (frame_w, &i); + i = (i-1+npixmaps)%npixmaps; + XmScaleSetValue (frame_w, i); + showFrame (i); +} + +/* callback from the frame control scale */ +static void +ml_frame_cb (Widget w, XtPointer client, XtPointer data) +{ + int i; + + if (npixmaps == 0) { + XmScaleSetValue (frame_w, 0); + return; + } + + stopLooping(); + XmScaleGetValue (frame_w, &i); + + /* since we keep max at least 1, beware when fewer than 2 frames */ + if (i == 1 && npixmaps < 2) { + XmScaleSetValue (frame_w, 0); + return; + } + + showFrame (i); +} + +/* function called from the interval timer used to implement the movie loop. + * N.B. this assumes there are at least 2 images to show. + */ +/* ARGSUSED */ +static void +ml_timer_cb (XtPointer client, XtIntervalId *id) +{ + int i, r; + + /* check assumption */ + if (npixmaps < 2) { + printf ("movie timer called with %d pixmaps\n", npixmaps); + abort(); + } + + /* get current image number */ + XmScaleGetValue (frame_w, &i); + + /* advance to next image */ + if (bouncing) { + if (--i < 0) { + bouncing = 0; + i = 1; + } + } else { + if (++i == npixmaps) { + if (XmToggleButtonGetState(bounce_w)) { + bouncing = 1; + i = npixmaps-2; + } else + i = 0; + } + } + XmScaleSetValue (frame_w, i); + + /* show it */ + showFrame (i); + + /* repeat */ + XmScaleGetValue (rate_w, &r); + ml_id = XtAppAddTimeOut (xe_app, 1000/r, ml_timer_cb, 0); +} + +/* show frame i. + * if i < 0, show a blank image. + */ +static void +showFrame (int i) +{ + if (i >= npixmaps) { + printf ("Bad pixmap number: %d of %d\n", i, npixmaps); + abort(); + } + + /* establish size */ + if (i >= 0) { + Pixmap pm = pixmaps[i]; + Window dawin = XtWindow(mlda_w); + GC gc = DefaultGC(XtD,DefaultScreen(XtD)); + unsigned int w, h; + + getWH (pm, &w, &h); + set_something (mlda_w, XmNwidth, (XtArgVal)w); + set_something (mlda_w, XmNheight, (XtArgVal)h); + XCopyArea(XtD, pm, dawin, gc, 0, 0, w, h, 0, 0); + } else { + /* N.B. setting to 0,0 crashes */ + set_something (mlda_w, XmNwidth, (XtArgVal)1); + set_something (mlda_w, XmNheight, (XtArgVal)1); + } + +} + +/* get the width and height of the specified drawable */ +static void +getWH (Drawable dr, unsigned int *wp, unsigned int *hp) +{ + Window root; + unsigned int b, d; + int x, y; + + XGetGeometry (XtD, dr, &root, &x, &y, wp, hp, &b, &d); +} + +/* add the given pixmap to the movie. + * if defined, put timestamp just below. + * return 0 if ok else -1 + */ +static int +addPixmap (Drawable pm, Widget timestamp) +{ + Window tswin = timestamp ? XtWindow(timestamp) : 0; + GC gc = DefaultGC(XtD,DefaultScreen(XtD)); + unsigned int pw, ph, tw, th; + unsigned int b, d; + Window root; + int x, y; + Pixmap newpm; + + /* get sizes */ + XGetGeometry (XtD, pm, &root, &x, &y, &pw, &ph, &b, &d); + if (tswin) + getWH (tswin, &tw, &th); + else + tw = th = 0; + + /* dup pm with room for timestamp below, if any */ + newpm = XCreatePixmap (XtD, pm, pw, ph+th, d); + if (!newpm) { + xe_msg (1, "Can not duplicate pixmap"); + return (-1); + } + XCopyArea(XtD, pm, newpm, gc, 0, 0, pw, ph, 0, 0); + + /* put timestamp beneath bottom center, if any */ + if (tswin) { + Pixel p; + + get_something (timestamp, XmNbackground, (XtArgVal)&p); + XSetForeground (XtD, gc, p); + XFillRectangle (XtD, newpm, gc, 0, ph, pw, th); + XCopyArea (XtD, tswin, newpm, gc, 0, 0, tw, th, (pw-tw)/2, ph); + } + + /* add newpm to list */ + pixmaps = (Pixmap *) XtRealloc ((char*)pixmaps, + (npixmaps+1)*sizeof(Pixmap)); + pixmaps[npixmaps++] = newpm; + + /* grow frame scale -- always keep XmNmax > 0 */ + if (npixmaps > 1) + set_something (frame_w, XmNmaximum, (XtArgVal)(npixmaps-1)); + XmScaleSetValue (frame_w, npixmaps-1); + + return (0); +} + +/* stop looping (ok if not) */ +static void +stopLooping() +{ + if (ml_id != 0) { + XtRemoveTimeOut (ml_id); + ml_id = 0; + XmScaleSetValue (rate_w, 0); + } +} + +/* create the movie file prefix prompt */ +static void +ml_create_prepd_w() +{ + Widget t_w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg(args[n], XmNmarginWidth, 10); n++; + XtSetArg(args[n], XmNmarginHeight, 10); n++; + prepd_w = XmCreatePromptDialog (mlshell_w, "MoviePrefix", args,n); + set_something (prepd_w, XmNcolormap, (XtArgVal)xe_cm); + set_xmstring (prepd_w, XmNdialogTitle, "xephem Movie prefix"); + set_xmstring (prepd_w,XmNselectionLabelString,"Movie files prefix:"); + t_w = XmSelectionBoxGetChild(prepd_w, XmDIALOG_TEXT); + defaultTextFN (t_w, 1, "mymovie", NULL); + wtip (t_w, + "Enter the prefix for the set of files comprising this movie"); + XtUnmanageChild (XmSelectionBoxGetChild(prepd_w, XmDIALOG_HELP_BUTTON)); + XtAddCallback (prepd_w, XmNokCallback, ml_prefix_cb, NULL); + XtAddCallback (prepd_w, XmNmapCallback, prompt_map_cb, NULL); +} + +/* called when the Ok button is hit in the file prefix prompt */ +/* ARGSUSED */ +static void +ml_prefix_cb (Widget w, XtPointer client, XtPointer call) +{ + char *prefix; + + get_xmstring(w, XmNtextString, &prefix); + + if (strlen(prefix) == 0) { + xe_msg (1, "Please enter a prefix for the frame files."); + XtFree (prefix); + return; + } + + saveMovie (prefix); + XtFree (prefix); +} + +/* save each frame to /.png */ +static void +saveMovie(char *prefix) +{ + unsigned char *raster; + char fn[1024]; + unsigned int w, h; + int i; + + for (i = 0; i < npixmaps; i++) { + /* get pixmap as rgb raster */ + if (getPMPix (pixmaps[i], &raster, &w, &h) < 0) + break; + + /* create frame file */ + sprintf (fn, "%s/%s%03d.png", getPrivateDir(), prefix, i); + + /* write raster as png */ + if (writePNG (fn, raster, w, h) < 0) { + free (raster); + break; + } + + /* done */ + free (raster); + } +} + +/* suck out the pixels from the given pixmap and return as a list of rgb bytes. + * return size of image and malloced raster of bytes. + * N.B. if return 0 caller must free *raster + * return 0 if ok else -1 with xe_msg + */ +static int +getPMPix (Pixmap pm, unsigned char **raster, unsigned int *wp, unsigned int *hp) +{ + unsigned int w, h; + int x, y; + XColor xc; + XImage *xim; + unsigned char *rp; + + /* get server pixmap as a local image */ + getWH (pm, &w, &h); + xim = XGetImage (XtD, pm, 0, 0, w, h, ~0, ZPixmap); + if (!xim) { + xe_msg (1, "Can not create temp %dx%d image", w, h); + return (-1); + } + *raster = rp = malloc (w*h*3); + if (!rp) { + xe_msg (1, "Can not malloc %dx%d temp raster", w, h); + free (xim->data); + xim->data = NULL; + XDestroyImage (xim); + return (-1); + } + + /* scan image to retrieve rgb values */ + pixCache (NULL); + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + xc.pixel = XGetPixel (xim, x, y); + pixCache (&xc); + *rp++ = xc.red >> 8; + *rp++ = xc.green >> 8; + *rp++ = xc.blue >> 8; + } + } + + /* free temp image */ + free (xim->data); + xim->data = NULL; + XDestroyImage (xim); + + /* return size */ + *wp = w; + *hp = h; + return (0); +} + +/* given an rgb raster, save to the given file name in png format + * return 0 if ok else -1 with xe_msg + */ +static int +writePNG (char *fn, unsigned char *raster, unsigned int w, unsigned int h) +{ + FILE *fp; + png_structp png; + png_infop info; + png_bytepp row_pointers; + int i; + + /* create file */ + fp = fopen (fn, "wb"); + if (!fp) { + xe_msg (1, "Can not create %s:\n%s", fn, syserrstr()); + return (-1); + } + + /* build list of pointers to each row */ + row_pointers = (png_bytepp) malloc (h * sizeof(png_bytep)); + if (!row_pointers) { + xe_msg (1, "Can not malloc %d PNG row pointers", h); + fclose (fp); + return (-1); + } + for (i = 0; i < h; i++) + row_pointers[i] = raster + i*(w*3); + + /* write png */ + png = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + info = png_create_info_struct (png); + if (setjmp (png_jmpbuf (png))) { + xe_msg (1, "PNG error"); + png_destroy_write_struct (&png, &info); + free (row_pointers); + fclose (fp); + return (-1); + } + png_init_io(png, fp); + png_set_IHDR (png, info, w, h, 8, PNG_COLOR_TYPE_RGB, + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, + PNG_FILTER_TYPE_DEFAULT); + png_write_info (png, info); + png_write_image (png, row_pointers); + png_write_end (png, info); + png_destroy_write_struct (&png, &info); + free (row_pointers); + + /* check for io error */ + if (ferror(fp)) { + xe_msg (1, "Write error %s:\n%s", fn, syserrstr()); + fclose (fp); + return (-1); + } + + /* ok */ + fclose (fp); + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moviemenu.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.10 $ $Name: $"}; diff --git a/GUI/xephem/msgmenu.c b/GUI/xephem/msgmenu.c new file mode 100644 index 0000000..cd9e432 --- /dev/null +++ b/GUI/xephem/msgmenu.c @@ -0,0 +1,330 @@ +/* this file contains the code to put up misc messages: xe_msg(). + * we also create and use system messages dialog. + * the latter can be toggled on/off from the main menu. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +extern char maincategory[]; + +static void msg_create_w (void); +static void msg_erase_cb (Widget w, XtPointer client, XtPointer call); +static void msg_close_cb (Widget w, XtPointer client, XtPointer call); +static void msg_help_cb (Widget w, XtPointer client, XtPointer call); +static void msg_add (char *msg); +static void msg_scroll_down (void); +static void alert_ok_cb (Widget w, XtPointer client, XtPointer call); +static void xe_msg_alert (char *p); + + +#define MINBELLSECS 3 /* min time between bell rings, seconds */ + +static Widget msg_w; /* system error log widget */ +static Widget alert_w; /* system error message widget */ +static Widget txt_w; /* scrolled text widget */ +static int txtl; /* current length of text in txt_w */ + +/* called to force the scrolling message window to be up. + */ +void +msg_manage() +{ + if (!msg_w) + msg_create_w(); + + XtPopup (msg_w, XtGrabNone); + set_something (msg_w, XmNiconic, (XtArgVal)False); + if (XtWindow(msg_w)) + XMapRaised (XtDisplay(msg_w), XtWindow(msg_w)); +} + +/* ring the bellm but avoid overdoing a lot of them */ +void +msg_bell() +{ + static long lastbellt; + long t; + + t = time (NULL); + + if (t - lastbellt >= MINBELLSECS) { + XBell (XtDisplay(toplevel_w), 0); + lastbellt = t; + } +} + +/* add the printf-style fmt[] to the message list. + * if app_alert also show in an obnoxious app alert box. + */ +void +xe_msg (int app_alert, char *fmt, ...) +{ + char msg[2048]; + va_list ap; + + /* explode */ + va_start (ap, fmt); + vsprintf (msg, fmt, ap); + va_end (ap); + + + /* if this is the first message, create the message box */ + if (!msg_w) + msg_create_w(); + + /* add to message list */ + msg_add (msg); + + /* if an alert, display directly too */ + if (app_alert && isUp(toplevel_w)) + xe_msg_alert (msg); + + /* and ring the bell if turned on */ + if (pref_get (PREF_MSG_BELL) == PREF_MSGBELL) + msg_bell(); +} + +/* called to put up or remove the watch cursor. */ +void +msg_cursor (c) +Cursor c; +{ + Window win; + + if (msg_w && (win = XtWindow(msg_w)) != 0) { + Display *dsp = XtDisplay(msg_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (alert_w && (win = XtWindow(alert_w)) != 0) { + Display *dsp = XtDisplay(alert_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the message dialog */ +static void +msg_create_w() +{ + static struct { + char *name; + void (*cb)(); + char *tip; + } cb[] = { + {"Erase", msg_erase_cb, "Erase messages"}, + {"Close", msg_close_cb, "Close this dialog"}, + {"Help", msg_help_cb, "Get more information"}, + }; + Widget w, f_w; + Arg args[20]; + int i, n; + + /* make the help shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem System log"); n++; + XtSetArg (args[n], XmNiconName, "Sys log"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + msg_w = XtCreatePopupShell ("SysLog", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (msg_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (msg_w, "XEphem*SysLog.x", maincategory, 0); + sr_reg (msg_w, "XEphem*SysLog.y", maincategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNfractionBase, 12); n++; + f_w = XmCreateForm (msg_w, "SLF", args, n); + XtAddCallback (f_w, XmNhelpCallback, msg_help_cb, 0); + XtManageChild (f_w); + + /* make the control buttons */ + + for (i = 0; i < XtNumber(cb); i++) { + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1 + 4*i); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3 + 4*i); n++; + w = XmCreatePushButton (f_w, cb[i].name, args, n); + XtAddCallback (w, XmNactivateCallback, cb[i].cb, NULL); + wtip (w, cb[i].tip); + XtManageChild (w); + } + + /* make the scrolled text area to hold the messages */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + txt_w = XmCreateScrolledText (f_w, "Log", args, n); + sr_reg (txt_w, "XEphem*SysLog*Log.columns", maincategory, 0); + sr_reg (txt_w, "XEphem*SysLog*Log.rows", maincategory, 0); + XtManageChild (txt_w); +} + +/* callback from the erase pushbutton */ +/* ARGSUSED */ +static void +msg_erase_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmTextReplace (txt_w, 0, txtl, ""); + txtl = 0; + XFlush (XtDisplay(toplevel_w)); +} + +/* callback from the close pushbutton */ +/* ARGSUSED */ +static void +msg_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (msg_w); +} + +/* callback from the help pushbutton */ +/* ARGSUSED */ +static void +msg_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "System messages" + }; + + hlp_dialog ("SysLog", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* add msg to the txt_w widget. + * Always set the vertical scroll bar to the extreme bottom. + */ +static void +msg_add (msg) +char *msg; +{ + int l; + + l = strlen(msg); + if (l == 0) + return; + + XmTextReplace (txt_w, txtl, txtl, msg); + txtl += l; + + if (msg[l-1] != '\n') + msg_add ("\n"); + else + msg_scroll_down(); +} + +/* make sure the text is scrolled to the bottom */ +static void +msg_scroll_down() +{ + XmTextSetInsertionPosition (txt_w, txtl); +} + +/* print a message, p, in shell message box */ +static void +xe_msg_alert (p) +char *p; +{ + static Widget apmsg_w; + Arg args[20]; + int n; + + if (!apmsg_w) { + Widget w; + + /* Create shell. */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Alert"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + alert_w = XtCreatePopupShell ("Alert", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (alert_w); + XtAddCallback (alert_w, XmNpopupCallback, prompt_map_cb, NULL); + set_something (alert_w, XmNcolormap, (XtArgVal)xe_cm); + + /* Create MessageBox . */ + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++; + XtSetArg (args[n], XmNdialogType, XmDIALOG_WARNING); n++; + apmsg_w = XmCreateMessageBox (alert_w, "WB", args, n); + XtAddCallback (apmsg_w, XmNokCallback, alert_ok_cb, NULL); + XtManageChild (apmsg_w); + + w = XmMessageBoxGetChild (apmsg_w, XmDIALOG_CANCEL_BUTTON); + XtUnmanageChild (w); + w = XmMessageBoxGetChild (apmsg_w, XmDIALOG_HELP_BUTTON); + XtUnmanageChild (w); + } + + set_xmstring (apmsg_w, XmNmessageString, p); + + /* show it */ + XtPopdown (alert_w); /* so Popup causes position and raise */ + XtPopup (alert_w, XtGrabNone); + set_something (alert_w, XmNiconic, (XtArgVal)False); + + /* make sure it's up because we are occasionally used when the main + * loop might not run for a while + */ + XmUpdateDisplay (toplevel_w); + XSync (XtDisplay(toplevel_w), False); +} + +/* callback from the alert message box ok pushbutton */ +/* ARGSUSED */ +static void +alert_ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (alert_w); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: msgmenu.c,v $ $Date: 2012/11/23 05:36:46 $ $Revision: 1.15 $ $Name: $"}; diff --git a/GUI/xephem/net.h b/GUI/xephem/net.h new file mode 100644 index 0000000..349013b --- /dev/null +++ b/GUI/xephem/net.h @@ -0,0 +1,39 @@ +#ifndef _NET_H +#define _NET_H + +#ifdef VMS +#include +#include +#include +#include +#include +#else +#include +#include +#include +#include +#include +#endif + +#if !defined(FD_ZERO) || defined(_AIX) +/* one last place to look for select() stuff */ +#include +#endif + +/* support functions */ + +extern int httpGET (char *host, char *GETcmd, char msg[]); +extern int mkconnection (char *host, int port, char msg[]); +extern int recvbytes (int fd, unsigned char buf[], int n); +extern int readbytes (int fd, unsigned char buf[], int n); +extern int recvline (int fd, char buf[], int max); +extern int recvlineb (int sock, char *buf, int size); +extern int sendbytes (int fd, unsigned char buf[], int n); + + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: net.h,v $ $Date: 2003/03/17 07:26:21 $ $Revision: 1.3 $ $Name: $ + */ + +#endif /* _NET_H */ diff --git a/GUI/xephem/netmenu.c b/GUI/xephem/netmenu.c new file mode 100644 index 0000000..6380e9b --- /dev/null +++ b/GUI/xephem/netmenu.c @@ -0,0 +1,1038 @@ +/* code to manage networking */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define TOUT 180 /* max secs to wait for socket data. + * default http timeout is 3 minutes. + */ + + +static int net_save (void); +static void net_create_form (void); +static void defaultSOCKS (void); +static void net_setup (void); +static void ok_cb (Widget w, XtPointer client, XtPointer call); +static void tb_cb (Widget w, XtPointer client, XtPointer call); +static void cancel_cb (Widget w, XtPointer client, XtPointer call); +static void pw_cb (Widget w, XtPointer client, XtPointer call); +static void help_cb (Widget w, XtPointer client, XtPointer call); +static int tout (int maxt, int fd, int w); +static char *herr (char *errmsg); +static int connect_to (int sockfd, struct sockaddr *serv_addr, int addrlen); + +static Widget netshell_w; /* the main form dialog */ +static Widget ndir_w; /* net direct TB */ +static Widget socks_w; /* SOCKS option TB */ +static Widget socksh_w, socksp_w;/* SOCKS host and port TF */ +static Widget proxy_w; /* Proxy option TB */ +static Widget proxyh_w, proxyp_w;/* Proxy host and port TF */ +static Widget auth_w; /* Auth option TB */ +static Widget authn_w, authpw_w;/* Auth name and PW TF */ + +/* passed to the TB callbacks to choose network access method */ +typedef enum { + NETDIRTB, NETPROXTB, NETSOCKSTB +} TB; + +/* current info */ +static int proxy_on; /* whether proxy network connection is on */ +static char *proxy_host; /* proxy host */ +static int proxy_port; /* proxy port */ +static int socks_on; /* whether SOCKS network connection is on */ +static char *socks_host; /* SOCKS host */ +static char *socks_port; /* SOCKS port (as a string) */ +static int auth_on; /* whether to add Auth info */ +static char *auth_name; /* Auth name */ + +/* we keep the plaintext password here, but just display splats */ +static char *auth_pw; /* malloced plain text password */ + +/* buffer for recvlineb() */ +static char rb_linebuf[512]; /* [next .. bad-1] are good */ +static int rb_next; /* index of next good char */ +static int rb_unk; /* index of first unknown char */ + +static char netcategory[] = "Network"; /* Save category */ + +/* call to set up without actually bringing up the menus. + */ +void +net_create() +{ + if (!netshell_w) { + net_create_form(); + (void) net_save(); /* confirming here is just annoying */ + } +} + +void +net_manage() +{ + net_create(); + + if (!isUp (netshell_w)) + net_setup(); + + XtPopup (netshell_w, XtGrabNone); + set_something (netshell_w, XmNiconic, (XtArgVal)False); +} + +/* Base64 stuff lifted from downloader */ + +static void +three_to_four(what, where) +unsigned char *what, *where; +{ + static char Table64[64] = { + 'A','B','C','D','E','F','G','H', + 'I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X', + 'Y','Z','a','b','c','d','e','f', + 'g','h','i','j','k','l','m','n', + 'o','p','q','r','s','t','u','v', + 'w','x','y','z','0','1','2','3', + '4','5','6','7','8','9','+','/' + }; + int i; + + *where=(*what >> 2) & 63; + *(where+1)=((*what << 4) | (*(what+1) >> 4)) & 63; + *(where+2)=((*(what+1) << 2) | (*(what+2) >> 6)) & 63; + *(where+3)=*(what+2) & 63; + for (i=0;i<4;i++) + where[i]= Table64[where[i]]; +} + +static void +string_to_base64(plain, b64) +char *plain, *b64; +{ + unsigned char four[4]; + int len=strlen(plain),len2=0; + int i; + + if (len%3) len2=(len/3 +1)*4 +1; + else len2=(len/3)*4 +1; + while (len>=3) { + three_to_four((unsigned char *)plain,four); + for (i=0;i<4;i++) + *(b64++)=four[i]; + len-=3; + plain+=3; + } + if (len) { + unsigned char three[3]={0,0,0}; + for (i=0;ih_addr_list[0]))->s_addr; + serv_addr.sin_port = htons((short)Socks_port); + if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) { + (void) sprintf (msg, "SOCKS: %s/%d:\n%s", socks_host, port, + syserrstr()); + return (-1); + } + + /* Yes, again. Some variables inside are static */ + hp = gethostbyname (host); + + SocksPacket.DSTIP=((struct in_addr *)(hp->h_addr_list[0]))->s_addr; + if (connect_to (sockfd, (struct sockaddr *)&serv_addr, + sizeof(serv_addr)) < 0) { + (void) sprintf (msg, "SOCKS: %s: %s", socks_host, syserrstr()); + (void) close(sockfd); + return (-1); + } + (void)write (sockfd, &SocksPacket, sizeof (SocksPacket)); + (void)write (sockfd, "xephem", 7); /* yes, include trailing \0 */ + (void)read (sockfd, &SocksPacket, sizeof (SocksPacket)); + switch (SocksPacket.CD) { + case 90: + break; /* yes! */ + case 92: + (void) sprintf (msg, "SOCKS: cannot connect to client"); + (void) close(sockfd); + return (-1); + case 93: + (void) sprintf (msg, "SOCKS: client program and ident report different user-ids"); + (void) close(sockfd); + return (-1); + default: + (void) sprintf (msg, "SOCKS: Request rejected or failed"); + (void) close(sockfd); + return (-1); + } + + } else { + /* normal connection without SOCKS server */ + /* create a socket to the host's server */ + (void) memset ((char *)&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = + ((struct in_addr *)(hp->h_addr_list[0]))->s_addr; + serv_addr.sin_port = htons((short)port); + if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) { + (void) sprintf (msg, "%s/%d: %s", host, port, syserrstr()); + return (-1); + } + if (connect_to (sockfd, (struct sockaddr *)&serv_addr, + sizeof(serv_addr)) < 0) { + (void) sprintf (msg, "%s: %s", host, syserrstr()); + (void) close(sockfd); + return (-1); + } + } + + /* reset readahead in case user uses recvlineb() */ + rb_next = rb_unk = 0; + + /* ok */ + return (sockfd); +} + +/* send n bytes from buf to socket fd. + * return 0 if ok else -1 + */ +int +sendbytes (int fd, unsigned char buf[], int n) +{ + int ns, tot; + + for (tot = 0; tot < n; tot += ns) { + if (tout (TOUT, fd, 1) < 0) + return (-1); + ns = write (fd, (void *)(buf+tot), n-tot); + if (ns <= 0) + return (-1); + } + return (0); +} + +/* receive exactly n bytes from socket fd into buf. + * return -1, 0 or n. + */ +int +recvbytes (int fd, unsigned char buf[], int n) +{ + int ns, tot; + + for (tot = 0; tot < n; tot += ns) { + if (tout (TOUT, fd, 0) < 0) + return (-1); + ns = read (fd, (void *)(buf+tot), n-tot); + if (ns <= 0) + return (ns); + } + return (n); +} + +/* like read(2) except we time out and allow user to cancel. + * receive up to n bytes from socket fd into buf. + * return count, or 0 on eof or -1 on error. + */ +int +readbytes (int fd, unsigned char buf[], int n) +{ + int ns; + + if (tout (TOUT, fd, 0) < 0) + return (-1); + ns = read (fd, (void *)buf, n); + return (ns); +} + +/* read up to and including the next '\n' from socket fd into buf[max]. + * we silently ignore all '\r'. we add a trailing '\0'. + * return line lenth (not counting \0) if all ok, else -1. + * N.B. this never reads ahead -- if that's ok, recvlineb() is better + */ +int +recvline (int fd, char buf[], int max) +{ + unsigned char c; + int n; + + max--; /* leave room for trailing \0 */ + + for (n = 0; n < max && recvbytes (fd, &c, 1) == 1; ) { + if (c != '\r') { + buf[n++] = c; + if (c == '\n') { + buf[n] = '\0'; + return (n); + } + } + } + + return (-1); +} + +/* rather like recvline but reads ahead in big chunk for efficiency. + * return length if read a line ok, 0 if hit eof, -1 if error. + * N.B. we silently swallow all '\r'. + * N.B. we read ahead and can hide bytes after each call. + */ +int +recvlineb (int sock, char *buf, int size) +{ + char *origbuf = buf; /* save to prevent overfilling buf */ + char c = '\0'; + int ok = 1; + + /* always leave room for trailing \n */ + size -= 1; + + /* read and copy linebuf[next] to buf until buf fills or copied a \n */ + do { + + if (rb_next >= rb_unk) { + /* linebuf is empty -- refill */ + + int nr; + + if (tout (TOUT, sock, 0) < 0) { + nr = -1; + break; + } + nr = read (sock, rb_linebuf, sizeof(rb_linebuf)); + if (nr <= 0) { + ok = nr; + rb_next = 0; + rb_unk = 0; + break; + } + rb_next = 0; + rb_unk = nr; + } + + if ((c = rb_linebuf[rb_next++]) != '\r') + *buf++ = c; + + } while (buf-origbuf < size && c != '\n'); + + /* always give back a real line regardless, else status */ + if (ok > 0) { + *buf = '\0'; + ok = buf - origbuf; + } + + return (ok); +} + +static void +net_create_form() +{ + Widget netform_w; + Widget f, w; + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle,"xephem Network setup");n++; + XtSetArg (args[n], XmNiconName, "Net"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + netshell_w = XtCreatePopupShell ("NetSetup", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (netshell_w); + set_something (netshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (netshell_w, "XEphem*NetSetup.x", netcategory, 0); + sr_reg (netshell_w, "XEphem*NetSetup.y", netcategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + netform_w = XmCreateForm (netshell_w, "NetForm", args, n); + XtAddCallback (netform_w, XmNhelpCallback, help_cb, NULL); + XtManageChild (netform_w); + + /* make the title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (netform_w, "NetT", args, n); + set_xmstring (w, XmNlabelString, "Network setup:"); + XtManageChild (w); + + /* make the Direct toggle */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + ndir_w = XmCreateToggleButton (netform_w, "Direct", args, n); + XtAddCallback (ndir_w, XmNvalueChangedCallback, tb_cb, + (XtPointer)NETDIRTB); + set_xmstring (ndir_w, XmNlabelString, "Direct connect"); + wtip (ndir_w, "Use direct internet connection (no proxy or SOCKS)"); + XtManageChild (ndir_w); + sr_reg (ndir_w, NULL, netcategory, 1); + + /* make the SOCKS toggle and info (first because label is wider) */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ndir_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + socks_w = XmCreateToggleButton (netform_w, "SOCKS", args, n); + set_xmstring (socks_w, XmNlabelString, "via SOCKS"); + XtAddCallback (socks_w, XmNvalueChangedCallback, tb_cb, + (XtPointer)NETSOCKSTB); + wtip (socks_w, "Use SOCKS V4 to Internet"); + XtManageChild (socks_w); + sr_reg (socks_w, NULL, netcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ndir_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, socks_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNcolumns, 5); n++; + socksp_w = XmCreateTextField (netform_w, "SOCKSPort", args, n); + wtip (socksp_w, "SOCKS port number"); + XtManageChild (socksp_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ndir_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, socksp_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 40); n++; + socksh_w = XmCreateTextField (netform_w, "SOCKSHost", args, n); + wtip (socksh_w, "Name of SOCKS host"); + XtManageChild (socksh_w); + + defaultSOCKS(); + sr_reg (socksp_w, NULL, netcategory, 1); + sr_reg (socksh_w, NULL, netcategory, 1); + + /* make the Proxy toggle and info */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, socksh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + proxy_w = XmCreateToggleButton (netform_w, "Proxy", args, n); + set_xmstring (proxy_w, XmNlabelString, "via Proxy"); + XtAddCallback (proxy_w, XmNvalueChangedCallback, tb_cb, + (XtPointer)NETPROXTB); + wtip (proxy_w, "Reach the Internet through a proxy"); + XtManageChild (proxy_w); + sr_reg (proxy_w, NULL, netcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, socksh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, socks_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNcolumns, 5); n++; + proxyp_w = XmCreateTextField (netform_w, "ProxyPort", args, n); + wtip (proxyp_w, "Proxy port number"); + XtManageChild (proxyp_w); + sr_reg (proxyp_w, NULL, netcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, socksh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, proxyp_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 40); n++; + proxyh_w = XmCreateTextField (netform_w, "ProxyHost", args, n); + wtip (proxyh_w, "Name of Proxy host"); + XtManageChild (proxyh_w); + sr_reg (proxyh_w, NULL, netcategory, 1); + + /* make the Auth option and info */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, proxyh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + auth_w = XmCreateToggleButton (netform_w, "Auth", args, n); + set_xmstring (auth_w, XmNlabelString, "Auth Name"); + wtip (auth_w, "Apply authentication name and password"); + XtManageChild (auth_w); + sr_reg (auth_w, NULL, netcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, proxyh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, auth_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNcolumns, 15); n++; + authn_w = XmCreateTextField (netform_w, "AuthName", args, n); + wtip (authn_w, "Authentication name"); + XtManageChild (authn_w); + sr_reg (authn_w, NULL, netcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, proxyh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, authn_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + w = XmCreateLabel (netform_w, "Password", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, proxyh_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 15); n++; + authpw_w = XmCreateTextField (netform_w, "AuthPassword", args, n); + XtAddCallback (authpw_w, XmNmodifyVerifyCallback, pw_cb, 0); + wtip (authpw_w, "Authentication password"); + XtManageChild (authpw_w); + + /* malloc null string to start */ + auth_pw = XtNewString (""); + + + /* make the controls across the bottom under a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, authpw_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreateSeparator (netform_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNfractionBase, 21); n++; + f = XmCreateForm (netform_w, "CF", args, n); + XtManageChild (f); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 3); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + w = XmCreatePushButton (f, "Ok", args, n); + wtip (w, "Install changes and close dialog"); + XtAddCallback (w, XmNactivateCallback, ok_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 9); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 12); n++; + w = XmCreatePushButton (f, "Close", args, n); + wtip (w, "Close this menu without doing anything"); + XtAddCallback (w, XmNactivateCallback, cancel_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 18); n++; + w = XmCreatePushButton (f, "Help", args, n); + wtip (w, "More detailed descriptions"); + XtAddCallback (w, XmNactivateCallback, help_cb, NULL); + XtManageChild (w); +} + +/* init SOCKS host and port. first check SOCKS_PORT and SOCKS_NS env variables, + * respectively (same ones used by netscape) then X resources. + */ +static void +defaultSOCKS() +{ + char *str; + + str = getenv ("SOCKS_PORT"); + if (str) + XmTextFieldSetString (socksp_w, str ? str : "1080"); + + str = getenv ("SOCKS_NS"); + if (str) + XmTextFieldSetString (socksh_w, str); +} + +/* set up the dialog according to our static state */ +static void +net_setup () +{ + /* Net */ + XmToggleButtonSetState (ndir_w, !socks_on && !proxy_on, False); + + XmToggleButtonSetState (proxy_w, proxy_on, False); + if (proxy_host) + XmTextFieldSetString (proxyh_w, proxy_host); + if (proxy_port) { + char buf[32]; + (void) sprintf (buf, "%d", proxy_port); + XmTextFieldSetString (proxyp_w, buf); + } + + XmToggleButtonSetState (socks_w, socks_on, False); + if (socks_host) + XmTextFieldSetString (socksh_w, socks_host); + if (socks_port) + XmTextFieldSetString (socksp_w, socks_port); + + XmToggleButtonSetState (auth_w, auth_on, False); + if (auth_name) + XmTextFieldSetString (authn_w, auth_name); +} + +/* save the dialog as our static state. + * if any major trouble, issue xe_msg and return -1, else return 0. + */ +static int +net_save () +{ + char *str, msg[1024]; + int allok = 1; + int fd; + + watch_cursor (1); + + /* Network setup. + * N.B. do this before using the network :-) + */ + proxy_on = XmToggleButtonGetState (proxy_w); + if (proxy_host) + XtFree (proxy_host); + proxy_host = XmTextFieldGetString (proxyh_w); + str = XmTextFieldGetString (proxyp_w); + proxy_port = atoi (str); + XtFree (str); + if (proxy_on) { + fd = mkconnection (proxy_host, proxy_port, msg); + if (fd < 0) { + xe_msg (1, "%s", msg); + proxy_on = 0; + net_setup (); + allok = 0; + } else + (void) close (fd); + } + socks_on = XmToggleButtonGetState (socks_w); + if (socks_host) + XtFree (socks_host); + socks_host = XmTextFieldGetString (socksh_w); + if (socks_port) + XtFree (socks_port); + socks_port = XmTextFieldGetString (socksp_w); + if (socks_on) { + /* TODO: how to test? */ + fd = mkconnection (socks_host, atoi(socks_port), msg); + if (fd < 0) { + xe_msg (1, "%s", msg); + socks_on = 0; + net_setup (); + allok = 0; + } else + (void) close (fd); + } + auth_on = XmToggleButtonGetState (auth_w); + if (auth_name) + XtFree (auth_name); + auth_name = XmTextFieldGetString (authn_w); + /* TODO: how to test? */ + + watch_cursor (0); + + return (allok ? 0 : -1); +} + +/* called from Ok */ +/* ARGSUSED */ +static void +ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (net_save() == 0) + XtPopdown (netshell_w); +} + +/* called from Ok */ +/* ARGSUSED */ +static void +cancel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* outta here */ + XtPopdown (netshell_w); +} + +/* called whenever the Password text field is edited. + * add to auth_pw but echo as * + */ +/* ARGSUSED */ +static void +pw_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmTextVerifyCallbackStruct *vp = (XmTextVerifyCallbackStruct *)call; + int l = XmTextFieldGetLastPosition(w); + int sp = vp->startPos; + int ep = vp->endPos; + + if (sp < ep) { + /* cut sp .. ep-1 */ + memmove (auth_pw+sp, auth_pw+ep, l-ep+1); /* EOS too */ + l -= ep-sp; + } + + if (vp->text->length > 0) { + /* insert 1 @ sp */ + auth_pw = XtRealloc (auth_pw, l+2); /* new + EOS */ + memmove (auth_pw+sp+1, auth_pw+sp, l-sp+1); /* EOS too */ + auth_pw[sp] = vp->text->ptr[0]; + + /* echo as '*' */ + vp->text->ptr[0] = '*'; + } +} + +/* called from any of the choice toggle buttons. + * client is one of the TB enums to tell us which. + */ +/* ARGSUSED */ +static void +tb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState(w)) { + switch ((long int)client) { + case NETDIRTB: + /* turn off proxy, socks and auth */ + XmToggleButtonSetState (proxy_w, False, False); + XmToggleButtonSetState (socks_w, False, False); + XmToggleButtonSetState (auth_w, False, False); + break; + case NETPROXTB: + /* turn off direct and socks */ + XmToggleButtonSetState (ndir_w, False, False); + XmToggleButtonSetState (socks_w, False, False); + break; + case NETSOCKSTB: + /* turn off direct and proxy */ + XmToggleButtonSetState (ndir_w, False, False); + XmToggleButtonSetState (proxy_w, False, False); + break; + default: + printf ("FS: bad client: %d\n", (int)(long int)client); + abort(); + } + } +} + +/* called from Ok */ +/* ARGSUSED */ +static void +help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = {"Set up network connectivity options."}; + + hlp_dialog ("NetSetup", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* wait at most maxt secs for the ability to read/write using fd and allow X + * processing in the mean time. + * w is 0 is for reading, 1 for writing, 2 for either. + * return 0 if ok to proceed, else -1 if trouble or timeout. + */ +static int +tout (maxt, fd, w) +int maxt; +int fd; +int w; +{ + int i; + + for (i = 0; stopd_check() == 0 && i < maxt; i++) { + fd_set rset, wset; + struct timeval tv; + int ret; + + FD_ZERO (&rset); + FD_ZERO (&wset); + switch (w) { + case 0: + FD_SET (fd, &rset); + break; + case 1: + FD_SET (fd, &wset); + break; + case 2: + FD_SET (fd, &rset); + FD_SET (fd, &wset); + break; + default: + printf ("Bug: tout() called with %d\n", w); + abort(); + } + + tv.tv_sec = 1; + tv.tv_usec = 0; + + ret = select (fd+1, &rset, &wset, NULL, &tv); + if (ret > 0) + return (0); + if (ret < 0) + return (-1); + } + + errno = i == maxt ? ETIMEDOUT : EINTR; + return (-1); +} + +/* a networking error has occured. if we can dig out more details about why + * using h_errno, return its message, otherwise just return errmsg unchanged. + * we do this because we don't know how portable is h_errno? + */ +static char * +herr (errmsg) +char *errmsg; +{ +#if defined(HOST_NOT_FOUND) && defined(TRY_AGAIN) + switch (h_errno) { + case HOST_NOT_FOUND: + errmsg = "Host Not Found"; + break; + case TRY_AGAIN: + errmsg = "Might be a temporary condition -- try again later"; + break; + } +#endif + return (errmsg); +} + +/* just like connect(2) but tries to time out after TOUT yet let X continue. + * return 0 if ok, else -1. + */ +static int +connect_to (sockfd, serv_addr, addrlen) +int sockfd; +struct sockaddr *serv_addr; +int addrlen; +{ +#ifdef O_NONBLOCK /* _POSIX_SOURCE */ +#define NOBLOCK O_NONBLOCK +#else +#define NOBLOCK O_NDELAY +#endif + unsigned int len; + int err; + int flags; + int ret; + + /* set socket non-blocking */ + flags = fcntl (sockfd, F_GETFL, 0); + (void) fcntl (sockfd, F_SETFL, flags | NOBLOCK); + + /* start the connect */ + ret = connect (sockfd, serv_addr, addrlen); + if (ret < 0 && errno != EINPROGRESS) + return (-1); + + /* wait for sockfd to become useable */ + ret = tout (TOUT, sockfd, 2); + if (ret < 0) + return (-1); + + /* verify connection really completed */ + len = sizeof(err); + err = 0; + ret = getsockopt (sockfd, SOL_SOCKET, SO_ERROR, (char *) &err, &len); + if (ret < 0) + return (-1); + if (err != 0) { + errno = err; + return (-1); + } + + /* looks good - restore blocking */ + (void) fcntl (sockfd, F_SETFL, flags); + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: netmenu.c,v $ $Date: 2010/10/06 21:12:16 $ $Revision: 1.30 $ $Name: $"}; diff --git a/GUI/xephem/objmenu.c b/GUI/xephem/objmenu.c new file mode 100644 index 0000000..a2489c5 --- /dev/null +++ b/GUI/xephem/objmenu.c @@ -0,0 +1,1118 @@ +/* code to manage the stuff on the search menu. + * to show all names, entries are built from db_dups() list, not the real db. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +static void obj_unsetinfo (void); +static void obj_setinfo (Obj *op); +static void obj_create_shell (void); +static void obj_ctl_cb (Widget w, XtPointer client, XtPointer call); +static void obj_help (void); +static void obj_type_cb (Widget w, XtPointer client, XtPointer call); +static void obj_select_cb (Widget w, XtPointer client, XtPointer call); +static void obj_scroll_cb (Widget w, XtPointer client, XtPointer call); +static void obj_srch_cb (Widget w, XtPointer client, XtPointer call); +static void obj_newlist (void); +static void obj_setnames (void); +static int srch_match (char *n1, char *n2); +static int fpFld (char *buf, int nc, double f, char *title, char *units); +static int sizeFld (char *buf, int nc, double f, char *title); +static int dateFld (char *buf, int nc, double Mjd, char *title); +static int yearFld (char *buf, int nc, double Mjd, char *title); +static int magFld (char *buf, int nc, double m1, double m2, char *title); +static int sexaFld (char *buf, int nc, double a, char *title, char *units, + int w, int p); +static void dbFld (Obj *op); +static int strFld (char *buf, int nc, char *str, char *title, char *units); +static int strcenterFld (char *buf, int nc, char *str); +static int is_ss (Obj *op); +static int is_es (Obj *op); +static int is_st (Obj *op); +static int (*ty_test(void))(Obj *op); + + +#define NBTNS 20 /* number of buttons in name list */ +#define SB_WIDTH 12 /* scroll bar width, pixels */ + +static Widget objshell_w; /* overall shell */ +static Widget scroll_w; /* scroll widget */ +static Widget copt_w; /* text widet to show cop info */ +static Widget showgal_w; /* PB whether display gallery image */ +static Widget edb_w; /* text widet to show edb form */ +static Widget srch_w; /* the search text field */ +static Widget ss_w; /* display only solar system objs */ +static Widget ds_w; /* display only deep sky objs */ +static Widget es_w; /* display only earth sat objs */ +static Widget st_w; /* display only stellar objs */ +static Widget bi_w; /* display only binary stars */ +static Widget all_w; /* display all objs */ +static Widget tel_w; /*PB to send obj to external app */ + +static Widget namepb_w[NBTNS]; /* each name selection button */ +static Obj *cop; /* current obj being displayed */ +static int newdb; /* set when db changed & we are down */ +static int myfav; /* avoid rebuild when we set fav here */ +static DupName *mtdups; /* dupnames matching current type */ +static int nmtdups; /* number of dupnames matching type */ +static int localdups; /* whether mtdups is malloc or shared */ +static int topi; /* mtdups index of top button */ + +/* bottom control panel buttons */ +enum { + POINT, SETTEL, FAVORITE, SHOWGAL, CANCEL, HELP +}; + +static char objcategory[] = "Date index"; /* Save category */ + +/* called by the main menu pick. + * create the main form, if this is the first time we've been called. + * then we go for it. + */ +void +obj_manage() +{ + if (!objshell_w) { + obj_create_shell(); + newdb = 1; /* force a fresh list */ + } + + /* we don't bother to update the scrolled area while we are down + * but this flag tells us it has changed so we do it when coming up. + */ + if (newdb) { + obj_newlist(); + newdb = 0; + } + + XtSetSensitive (tel_w, telIsOn()); + XtPopup (objshell_w, XtGrabNone); + set_something (objshell_w, XmNiconic, (XtArgVal)False); +} + +/* called when a font has changed */ +void +obj_newres() +{ + if (cop) + obj_setinfo(cop); +} + +/* called when the db has changed. + * we don't care whether it was appended or deleted because we need to + * rebuild the whole list either way. + * if we are not up, don't bother building a new scrolled list, but + * set a flag so we know we need to the next time we do come up. + * N.B. ignore the case when we are called because we set a new fav. + */ +/* ARGSUSED */ +void +obj_newdb(appended) +int appended; +{ + if (!isUp(objshell_w)) { + newdb = 1; + return; + } + + if (!myfav) + obj_newlist(); +} + +/* called to put up or remove the watch cursor. */ +void +obj_cursor (c) +Cursor c; +{ + Window win; + + if (objshell_w && (win = XtWindow(objshell_w)) != 0) { + Display *dsp = XtDisplay(objshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* like strcmp() but ignores case and blanks and takes care to compare numerics + * by value. + */ +int +strnncmp (char *s1, char *s2) +{ + int d; + int p; + int q = 0; + + do { + p = *s1; + if (p == ' ') { + s1++; + d = 0; + continue; + } + q = *s2++; + if (q == ' ') { + d = 0; + continue; + } + s1++; + if (p <= '9' && isdigit(p) && isdigit(q)) { + int np = 0, nq = 0; + do { + np = np*10 + p - '0'; + p = *s1; + } while (isdigit(p) && s1++); + do { + nq = nq*10 + q - '0'; + q = *s2; + } while (isdigit(q) && s2++); + d = np - nq; + } else { + if (p >= 'a') + p -= ('a' - 'A'); + if (q >= 'a') + q -= ('a' - 'A'); + d = p - q; + } + } while (!d && (p || q)); + + return (d); +} + +/* called once to build the basic shell and form. + */ +static void +obj_create_shell () +{ + typedef struct { + int id; + Widget *wp; + char *name; + char *label; + char *tip; + } Btns; + static Btns ctlbtns[] = { + {CANCEL, NULL, NULL, "Close", + "Center Sky View on this Object and mark"}, + {POINT, NULL, NULL, "Sky Point", + "Mark this object on Sky View, recentering if out of field"}, + {SHOWGAL, &showgal_w, NULL, "Show in\nGallery", + "Show the Gallery image of this target"}, + {FAVORITE, NULL, NULL, "Save as\nFavorite", + "Add this object to list of Favorites"}, + {SETTEL, &tel_w, NULL, "Telescope\nGoto", + "Send coordinates of this Object to an external application"}, + {HELP, NULL, NULL, "Help", + "Display detailed help information"}, + }; + static Btns typebtns[] = { + {0, &all_w, "All", "All", "List objects of all types"}, + {0, &ds_w, "DeepSky", "Deep sky", "List deep sky objects"}, + {0, &st_w, "Stellar", "Stellar", "List stellar objects"}, + {0, &bi_w, "Binaries","Binaries", "List binary systems"}, + {0, &ss_w, "SolSys", "Sol sys", "List objects in solar system"}, + {0, &es_w, "EarthSat","Earth sat", "List earth satellites"}, + }; + Widget typrb_w; + Widget namerc_w; + Widget objform_w; + Widget ctl_w; + Widget srchpb_w; + Widget edbl_w; + Widget w; + Arg args[20]; + int n; + int i; + + /* create shell */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Loaded Object Index"); n++; + XtSetArg (args[n], XmNiconName, "Objects"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + objshell_w = XtCreatePopupShell ("Objects", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (objshell_w); + set_something (objshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (objshell_w, "XEphem*Objects.x", objcategory, 0); + sr_reg (objshell_w, "XEphem*Objects.y", objcategory, 0); + + /* create form */ + n = 0; + XtSetArg (args[n], XmNallowOverlap, False); n++; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + objform_w = XmCreateForm (objshell_w, "ObjF", args, n); + set_something (objform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (objform_w, XmNhelpCallback, obj_ctl_cb, (XtPointer)HELP); + XtManageChild (objform_w); + + /* make a form to hold the bottom control buttons */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNfractionBase, 35); n++; + ctl_w = XmCreateForm (objform_w, "CtlForm", args, n); + XtManageChild (ctl_w); + + /* make the control buttons */ + + for (i = 0; i < XtNumber(ctlbtns); i++) { + Btns *bp = &ctlbtns[i]; + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, i*6); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 5 + i*6); n++; + w = XmCreatePushButton (ctl_w, "OCB", args, n); + XtAddCallback (w, XmNactivateCallback, obj_ctl_cb, + (XtPointer)(long int)bp->id); + set_xmstring (w, XmNlabelString, bp->label); + wtip (w, bp->tip); + XtManageChild (w); + if (bp->wp) + *bp->wp = w; + } + + /* text field to show edb form */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ctl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + edbl_w = XmCreateLabel(objform_w, "EL", args, n); + set_xmstring (edbl_w, XmNlabelString, ".edb:"); + XtManageChild (edbl_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ctl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, edbl_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNcursorPositionVisible, True); n++; /* scrollable*/ + XtSetArg (args[n], XmNblinkRate, 0); n++; + edb_w = XmCreateTextField(objform_w, "OT", args, n); + wtip (edb_w, "XEphem's .edb file format for this object"); + XtManageChild (edb_w); + + /* make the type control radio box . */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, XtNumber(typebtns)); n++; + typrb_w = XmCreateRadioBox (objform_w, "TypeRB", args, n); + XtManageChild (typrb_w); + + for (i = 0; i < XtNumber(typebtns); i++) { + Btns *bp = &typebtns[i]; + n = 0; + XtSetArg (args[n], XmNmarginLeft, 2); n++; + w = XmCreateToggleButton (typrb_w, bp->name, args, n); + XtAddCallback (w, XmNvalueChangedCallback, obj_type_cb, 0); + set_xmstring (w, XmNlabelString, bp->label); + wtip (w, bp->tip); + sr_reg (w, NULL, objcategory, 0); + XtManageChild (w); + *bp->wp = w; + } + + /* make the scrollbar on the right edge */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, typrb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, edb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpageIncrement, NBTNS-1); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNwidth, SB_WIDTH); n++; + scroll_w = XmCreateScrollBar (objform_w, "ScrollB", args, n); + XtAddCallback (scroll_w, XmNdragCallback, obj_scroll_cb, 0); + XtAddCallback (scroll_w, XmNvalueChangedCallback, obj_scroll_cb, 0); + XtManageChild (scroll_w); + + /* make an rc to hold the scroll buttons */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, typrb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, edb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, scroll_w); n++; + namerc_w = XmCreateRowColumn (objform_w, "NameRC", args, n); + XtManageChild (namerc_w); + + for (i = 0; i < NBTNS; i++) { + n = 0; + w = XmCreatePushButton (namerc_w, "NamePB", args, n); + XtAddCallback (w, XmNactivateCallback, obj_select_cb, + (XtPointer)(long int)i); + XtManageChild (w); + wtip (w, "Click to view any Object's definition"); + namepb_w[i] = w; + } + + + /* make the search pb and its text field */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, typrb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + srchpb_w = XmCreatePushButton (objform_w, "SrchL", args, n); + set_xmstring (srchpb_w, XmNlabelString, "Search:"); + XtAddCallback (srchpb_w, XmNactivateCallback, obj_srch_cb, NULL); + wtip (srchpb_w, + "Scan for next Object in memory whose name matches glob at right"); + XtManageChild (srchpb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, typrb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, srchpb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, namerc_w); n++; + XtSetArg (args[n], XmNmaxLength, MAXNM-1); n++; + srch_w = XmCreateTextField (objform_w, "SrchTF", args, n); + wtip (srch_w, "Enter glob, click Search or type RETURN to search"); + XtAddCallback (srch_w, XmNactivateCallback, obj_srch_cb, NULL); + XtManageChild (srch_w); + +#if XmVersion >= 1001 + /* init kb focus here if possible */ + XmProcessTraversal (srch_w, XmTRAVERSE_CURRENT); + XmProcessTraversal (srch_w, XmTRAVERSE_CURRENT); +#endif + + /* make a R/O text field to show current object info */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, srch_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, edb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, namerc_w); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + copt_w = XmCreateText(objform_w, "OT", args, n); + wtip (copt_w, "Database fields for selected object"); + XtManageChild (copt_w); +} + +/* display info about op + */ +static void +obj_setinfo(Obj *op) +{ + Now *np = mm_get_now(); + DupName *dnp; + int ndn = db_dups (&dnp); + char buf[2048]; + DBCat *dbcp; + short nc; + int i, nn, l; + int pm; + + if (!objshell_w) + return; + + /* get field width */ + XtVaGetValues (copt_w, XmNcolumns, &nc, NULL); + + /* format, depending on class */ + + l = 0; + l += strcenterFld (buf+l, nc, op->o_name); + l += strcenterFld (buf+l, nc, obj_description(op)); + + switch (op->o_type) { + case BINARYSTAR: /* FALLTHRU part way */ + case FIXED: + pm = op->f_pmRA || op->f_pmdec; + l += sexaFld (buf+l, nc, radhr(op->f_RA), "RA", " H:M:S", 4,360000); + if (pm) + l += fpFld (buf+l, nc, cos(op->f_dec)*op->f_pmRA/1.327e-11, + "RA PM"," mas/yr on sky"); + l += sexaFld (buf+l, nc, raddeg(op->f_dec), "Dec"," D:M:S",3,36000); + if (pm) + l += fpFld (buf+l, nc,op->f_pmdec/1.327e-11,"Dec PM"," mas/yr"); + l += yearFld (buf+l, nc, op->f_epoch, "Equinox"); + l += fpFld (buf+l, nc, get_mag(op), "Magnitude", NULL); + if (op->f_size > 0) { + double r = get_ratio(op); + if (r < .99) { + l += sizeFld (buf+l, nc, op->f_size, "Major axis"); + l += sizeFld (buf+l, nc, op->f_size*get_ratio(op), + "Minor axis"); + } else { + l += sizeFld (buf+l, nc, op->f_size, "Size"); + } + } + if (op->f_spect[0]) { + char *label = "Spectral class"; + char tbuf[sizeof(op->f_spect)+1]; + strncpy (tbuf, op->f_spect, sizeof(op->f_spect)); + tbuf[sizeof(op->f_spect)] = '\0'; + if (op->o_type == FIXED) { + switch (op->f_class) { + case 'S': case 'B': case 'D': case 'M': case 'V': case 'T': + break; + default: + label = "Category"; + break; + } + } + l += strFld (buf+l, nc, tbuf, label, NULL); + } + if (op->o_type == FIXED && op->f_pa > 0) + l += fpFld (buf+l, nc, raddeg(get_pa(op)), "Position angle", + "° E of N"); + + /* stop here if FIXED */ + if (op->o_type == FIXED) + break; + + l += fpFld (buf+l, nc, op->b_2mag/MAGSCALE, "2 Magnitude", NULL); + if (op->b_2spect[0]) { + char tbuf[sizeof(op->b_2spect)+1]; + strncpy (tbuf, op->b_2spect, sizeof(op->b_2spect)); + tbuf[sizeof(op->b_2spect)] = '\0'; + l += strFld (buf+l, nc, tbuf, "2 Spectral class", NULL); + } + + for (i = 0; i < op->b_nbp; i++) { + char name[64]; + sprintf (name, "Epoch %d", i+1); + l += fpFld (buf+l, nc, op->b_bp[i].bp_ep, name, NULL); + sprintf (name, "Separation %d", i+1); + l += fpFld (buf+l, nc, op->b_bp[i].bp_sep, name, "\""); + sprintf (name, "Position angle %d", i+1); + l += fpFld (buf+l,nc,raddeg(op->b_bp[i].bp_pa),name,"° E of N"); + } + if (op->b_nbp == 0) { + l += fpFld(buf+l,nc,op->b_bo.bo_P,"Period", " years"); + l += fpFld(buf+l,nc,op->b_bo.bo_T,"Epoch of periastron", 0); + l += fpFld(buf+l,nc,op->b_bo.bo_e,"Eccentricity", NULL); + l += fpFld(buf+l,nc,op->b_bo.bo_o,"Argument of periastron","°"); + l += fpFld(buf+l,nc,op->b_bo.bo_O,"Longitude of node", "°"); + l += fpFld(buf+l,nc,op->b_bo.bo_i,"Inclination to sky","°"); + l += fpFld(buf+l,nc,op->b_bo.bo_a,"Semi major axis", "\""); + } + + /* finished with BINARY */ + break; + + case ELLIPTICAL: + l += fpFld (buf+l, nc, op->e_inc, "Inclination", "°"); + l += fpFld (buf+l, nc, op->e_Om, "Long of Asc node", "°"); + l += fpFld (buf+l, nc, op->e_om, "Arg of Peri", "°"); + l += fpFld (buf+l, nc, op->e_e, "Eccentricity", NULL); + l += fpFld (buf+l, nc, op->e_a, "Semi-major axis", " AU"); + l += fpFld (buf+l, nc, op->e_M, "Mean anomaly", "°"); + if (op->e_size > 0) + l += sizeFld (buf+l, nc, op->e_a, "Size @ 1AU"); + l += dateFld (buf+l, nc, op->e_cepoch, "Epoch"); + l += yearFld (buf+l, nc, op->e_epoch, "Equinox"); + if (op->e_startok) + l += dateFld (buf+l, nc, op->e_startok, "Valid from"); + if (op->e_endok) + l += dateFld (buf+l, nc, op->e_endok, "Valid to"); + if (op->e_mag.whichm == MAG_gk) + l += magFld (buf+l, nc, op->e_mag.m1, op->e_mag.m2, "Mag, g k"); + else + l += magFld (buf+l, nc, op->e_mag.m1, op->e_mag.m2, "Mag, H G"); + break; + + case HYPERBOLIC: + l += fpFld (buf+l, nc, op->h_inc, "Inclination", "°"); + l += fpFld (buf+l, nc, op->h_Om, "Long of Asc node", "°"); + l += fpFld (buf+l, nc, op->h_om, "Arg of Peri", "°"); + l += fpFld (buf+l, nc, op->h_e, "Eccentricity", NULL); + l += fpFld (buf+l, nc, op->h_qp, "Peri distance", " AU"); + if (op->h_size > 0) + l += sizeFld (buf+l, nc, op->h_size, "Size @ 1AU"); + l += dateFld (buf+l, nc, op->h_ep, "Epoch of Peri"); + l += yearFld (buf+l, nc, op->h_epoch, "Equinox"); + if (op->h_startok) + l += dateFld (buf+l, nc, op->h_startok, "Valid from"); + if (op->h_endok) + l += dateFld (buf+l, nc, op->h_endok, "Valid to"); + l += magFld (buf+l, nc, op->h_g, op->h_k, "Mag, g k"); + break; + + case PARABOLIC: + l += fpFld (buf+l, nc, op->p_inc, "Inclination", "°"); + l += fpFld (buf+l, nc, op->p_Om, "Long of Asc node", "°"); + l += fpFld (buf+l, nc, op->p_om, "Arg of Peri", "°"); + l += fpFld (buf+l, nc, op->p_qp, "Peri distance", " AU"); + if (op->p_size > 0) + l += sizeFld (buf+l, nc, op->p_size, "Size @ 1AU"); + l += dateFld (buf+l, nc, op->p_ep, "Epoch of Peri"); + l += yearFld (buf+l, nc, op->p_epoch, "Equinox"); + if (op->p_startok) + l += dateFld (buf+l, nc, op->p_startok, "Valid from"); + if (op->p_endok) + l += dateFld (buf+l, nc, op->p_endok, "Valid to"); + l += magFld (buf+l, nc, op->p_g, op->p_k, "Mag, g k"); + break; + + case EARTHSAT: + l += fpFld (buf+l, nc, op->es_inc, "Inclination", "°"); + l += fpFld (buf+l, nc, op->es_raan, "RA of Asc node", "°"); + l += fpFld (buf+l, nc, op->es_ap, "Arg of Peri", "°"); + l += fpFld (buf+l, nc, op->es_e, "Eccentricity", NULL); + l += fpFld (buf+l, nc, op->es_M, "Mean anomaly", "°"); + l += fpFld (buf+l, nc, op->es_n, "Mean motion", " Rev/Day"); + l += dateFld (buf+l, nc, op->es_epoch, "Epoch"); + l += fpFld (buf+l, nc, mjd - op->es_epoch, "Age", " days"); + if (op->es_startok) + l += dateFld (buf+l, nc, op->es_startok, "Valid from"); + if (op->es_endok) + l += dateFld (buf+l, nc, op->es_endok, "Valid to"); + l += fpFld (buf+l, nc, op->es_decay, "Orbit decay", " Rev/Day^2"); + l += fpFld (buf+l, nc, op->es_drag,"Drag coefficient"," ERad^-1"); + l += fpFld (buf+l, nc, (double)op->es_orbit, "Orbit number", NULL); + break; + + case PLANET: + /* fields not from catalog */ + break; + } + + /* alternate names */ + for (nn = i = 0; i < ndn; i++) { + if (dnp[i].op == op) { + nn++; + if (strcmp (dnp[i].nm, op->o_name)) + l += strFld (buf+l, nc, dnp[i].nm, "Alternate name", NULL); + } + } + if (!nn) { + printf ("%s not in dupnames\n", op->o_name); + abort(); + } + + /* catalog name */ + dbcp = db_opfindcat (op); + if (!dbcp) { + printf ("Object %s disappeared from its catalog\n", op->o_name); + abort(); + } + if (nn > 1) + l += strFld (buf+l, nc, dbcp->name, "Defining catalog", NULL); + else + l += strFld (buf+l, nc, dbcp->name, "Catalog", NULL); + + /* display */ + XmTextSetString (copt_w, buf); + + /* whether in gallery */ + XtSetSensitive (showgal_w, gal_opfind(op) >= 0); + + /* .edb too */ + dbFld (op); +} + +static int +fpFld (char *buf, int nc, double f, char *title, char *units) +{ + char fbuf[32]; + int tl, fl, ul, gl; + + tl = strlen (title); + fl = sprintf (fbuf, "%g", f); + if (!units) + units = ""; + ul = strlen (units); + gl = nc - (tl+fl+ul); + return (sprintf (buf, "%s%*s%s%s\n", title, gl, "", fbuf, units)); +} + +static int +sizeFld (char *buf, int nc, double f, char *title) +{ + char fbuf[32]; + int tl, fl, gl; + + tl = strlen (title); + if (f < 60) + fl = sprintf (fbuf, "%g\"", f); + else if (f < 3600) + fl = sprintf (fbuf, "%.1f'", f/60); + else + fl = sprintf (fbuf, "%.1f°", f/3600); + gl = nc - (tl+fl); + return (sprintf (buf, "%s%*s%s\n", title, gl, "", fbuf)); +} + +static int +sexaFld (char *buf, int nc, double a, char *title, char *units, int w, int p) +{ + char sbuf[32]; + int tl, sl, ul, gl; + + tl = strlen (title); + fs_sexa (sbuf, a, w, p); + sl = strlen (sbuf); + if (!units) + units = ""; + ul = strlen (units); + gl = nc - (tl+sl+ul); + return (sprintf (buf, "%s%*s%s%s\n", title, gl, "", sbuf, units)); +} + +static int +magFld (char *buf, int nc, double m1, double m2, char *title) +{ + char mbuf[64]; + int ml, tl, gl; + + ml = sprintf (mbuf, "%g %g", m1, m2); + tl = strlen (title); + gl = nc - (tl+ml); + return (sprintf (buf, "%s%*s%s\n", title, gl, "", mbuf)); +} + +static int +yearFld (char *buf, int nc, double Mjd, char *title) +{ + char ybuf[32]; + int tl, yl, gl; + double y; + + tl = strlen (title); + mjd_year (Mjd, &y); + yl = sprintf (ybuf, "%g", y); + gl = nc - (tl+yl); + return (sprintf (buf, "%s%*s%s\n", title, gl, "", ybuf)); +} + +static int +dateFld (char *buf, int nc, double Mjd, char *title) +{ + char dbuf[64]; + int tl, dl, gl; + + tl = strlen (title); + fs_date (dbuf, pref_get(PREF_DATE_FORMAT), Mjd); + dl = strlen (dbuf); + gl = nc - (tl+dl); + return (sprintf (buf, "%s%*s%s\n", title, gl, "", dbuf)); +} + +static int +strFld (char *buf, int nc, char *str, char *title, char *units) +{ + int tl, sl, ul, gl; + + tl = strlen (title); + sl = strlen (str); + if (!units) + units = ""; + ul = strlen (units); + gl = nc - (tl+sl+ul); + return (sprintf (buf, "%s%*s%s%s\n", title, gl, "", str, units)); +} + +static int +strcenterFld (char *buf, int nc, char *str) +{ + int sl = strlen (str); + int lg = (nc - sl)/2; + int rg = nc - (sl + lg); + return (sprintf (buf, "%*s%s%*s\n", lg, "", str, rg, "")); +} + +static void +dbFld (Obj *op) +{ + char dbuf[1024]; + + db_write_line (op, dbuf); + XmTextFieldSetString (edb_w, dbuf); +} + +/* erase info about object + */ +static void +obj_unsetinfo() +{ + if (!objshell_w) + return; + + XmTextSetString (copt_w, ""); +} + +/* callback from any of the botton control buttons. + * id is in client. + */ +/* ARGSUSED */ +static void +obj_ctl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int id = (long int) client; + + switch (id) { + case CANCEL: + XtPopdown (objshell_w); + break; + + case POINT: + if (cop) { + db_update (cop); + sv_point (cop); + } else + xe_msg (1, "No current object"); + break; + + case FAVORITE: + if (cop) { + myfav = 1; + fav_add (cop); + myfav = 0; + } else + xe_msg (1, "No current object"); + break; + + case SHOWGAL: + if (cop) + gal_opscroll (cop); + else + xe_msg (1, "No current object"); + break; + + case SETTEL: + if (cop) { + db_update (cop); + telGoto (cop); + } else + xe_msg (1, "No current object"); + break; + + case HELP: + obj_help(); + break; + } +} + +static void +obj_help() +{ + static char *msg[] = { + "List objects in memory, search for an object by name,", + "or assign it to a Favorite." + }; + hlp_dialog ("Object", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback for what type of object toggles. + * type is just determined by which TB is set. + */ +/* ARGSUSED */ +static void +obj_type_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState(w)) + obj_newlist(); +} + +/* callback when an item is selected from the scrolled list. + * client is the button number from 0. + */ +/* ARGSUSED */ +static void +obj_select_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int bi = (long int)client; + int idx = topi + bi; + + /* guard a rouge button off the end of the list */ + if (idx >= nmtdups) + return; + + cop = mtdups[idx].op; + obj_setinfo(cop); +} + +/* callback when the scroll bar is moved. + * scrollbar value is new topi. + */ +/* ARGSUSED */ +static void +obj_scroll_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScrollBarCallbackStruct *sp = (XmScrollBarCallbackStruct *)call; + int idx = sp->value; + + /* guard rolling off end of the list */ + if (idx < 0 || idx >= nmtdups) + return; + + topi = idx; + obj_setnames (); +} + +/* callback when CR is hit in the Srch text field or when the Search: PB is + * activated. + * N.B. Since we are used by two different kinds of widgets don't use w or call. + */ +/* ARGSUSED */ +static void +obj_srch_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char last_str[MAXNM]; /* last string we searched for */ + static int last_idx; /* index of last match for last_str */ + char *str; + int i, idx; + + /* get string to find */ + str = XmTextFieldGetString (srch_w); + + /* start from top if new string */ + if (strcmp (str, last_str)) { + last_idx = -1; + (void) strcpy (last_str, str); + } + + /* scan list, resuming from last */ + idx = last_idx; + for (i = 0; i < nmtdups; i++) { + + /* check new string after advaning with wrap */ + idx = (idx+1) % nmtdups; + if (srch_match (str, mtdups[idx].nm)) { + int scrollidx; + + /* set scroll bar, scroll only down to last whole set */ + scrollidx = idx; + if (scrollidx > nmtdups - NBTNS) + scrollidx = nmtdups - NBTNS; + set_something (scroll_w, XmNvalue, (XtArgVal)scrollidx); + + /* set buttons */ + topi = idx; + obj_setnames (); + + /* show info about the item and make current */ + obj_setinfo(cop = mtdups[idx].op); + + /* save to continue from here if search again */ + last_idx = idx; + break; + } + } + + if (i == nmtdups) + xe_msg (1, "%s: not found", str); + + XtFree (str); +} + +/* return 1 if pattern p match string s, else return 0. + * N.B. we only use the first MAXNM-1 chars from each string and assume \0. + */ +static int +srch_match (char *p, char *s) +{ + int flags = 0; +#if defined(FNM_CASEFOLD) /* GNU extension only */ + flags |= FNM_CASEFOLD; +#endif + return (!fnmatch (p, s, flags)); +} + +/* set up and display first NBTNS of the dupnames list. + */ +static void +obj_newlist() +{ + int (*typef)(Obj *) = ty_test(); + DupName *dnp; + int ndn = db_dups(&dnp); + int i, n, ssize, max; + Arg args[20]; + + watch_cursor(1); + + /* free old matching list unless it was the real one */ + if (localdups) { + XtFree ((char *)mtdups); + mtdups = NULL; + nmtdups = 0; + localdups = 0; + } + + /* build duplist with just our types, or use original if want all */ + if (typef) { + mtdups = (DupName *) XtMalloc (ndn*sizeof(DupName)); + nmtdups = 0; + localdups = 1; + for (i = 0; i < ndn; i++) + if ((*typef)(dnp[i].op)) + mtdups[nmtdups++] = dnp[i]; + } else { + mtdups = dnp; + nmtdups = ndn; + localdups = 0; + } + + /* set scrollbar limits, beware of 0 */ + max = nmtdups; + if (max < 1) + max = 1; + ssize = max; + if (ssize > NBTNS) + ssize = NBTNS; + n = 0; + XtSetArg (args[n], XmNmaximum, max); n++; + XtSetArg (args[n], XmNsliderSize, ssize); n++; + XtSetArg (args[n], XmNvalue, 0); n++; + XtSetValues (scroll_w, args, n); + XtManageChild(scroll_w); + + topi = 0; + obj_unsetinfo(); + obj_setnames(); + + watch_cursor(0); +} + +static int +is_ss (Obj *op) +{ + return (is_ssobj (op)); +} + +static int +is_es (Obj *op) +{ + return (is_type (op, EARTHSATM)); +} + +static int +is_bi (Obj *op) +{ + return (is_type (op, BINARYSTARM)); +} + +static int +is_st (Obj *op) +{ + return (is_type(op,FIXEDM) && !is_deepsky (op)); +} + +/* return pointer to function that when called with an Obj * will return + * 1 or 0 depending on whether the object fits the current type selection. + * N.B. we return NULL if all types will match. + */ +static int +(*ty_test(void))(Obj *) +{ + if (XmToggleButtonGetState(ss_w)) + return (is_ss); + else if (XmToggleButtonGetState(ds_w)) + return (is_deepsky); + else if (XmToggleButtonGetState(es_w)) + return (is_es); + else if (XmToggleButtonGetState(st_w)) + return (is_st); + else if (XmToggleButtonGetState(bi_w)) + return (is_bi); + else + return (NULL); +} + +/* fill the name buttons with the next set starting at topi */ +static void +obj_setnames() +{ + char name[MAXNM]; + int nb; /* number of good buttons to set, turn off others */ + int i; /* namepb_w[] index */ + + nb = nmtdups - topi; + if (nb > NBTNS) + nb = NBTNS; + + for (i = 0; i < NBTNS; i++) { + int sens; + if (i < nb) { + sprintf (name, "%-*s", MAXNM-1, mtdups[topi+i].nm); + buttonAsButton(namepb_w[i], 1); + sens = 1; + } else { + sprintf (name, "%-*s", MAXNM-1, ""); + buttonAsButton(namepb_w[i], 0); + sens = 0; + } + + XtSetSensitive (namepb_w[i], sens); + set_xmstring (namepb_w[i], XmNlabelString, name); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: objmenu.c,v $ $Date: 2013/03/02 02:57:08 $ $Revision: 1.55 $ $Name: $"}; diff --git a/GUI/xephem/obslog.c b/GUI/xephem/obslog.c new file mode 100644 index 0000000..8292d6e --- /dev/null +++ b/GUI/xephem/obslog.c @@ -0,0 +1,1248 @@ +/* provide a simple observer's log facility. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lilxml.h" +#include "xephem.h" + +typedef struct { + int justlabel; /* just a label not a field */ + char *label; /* row title */ + char *xml; /* xml tag, if different from label */ + Widget tfw; /* TF for display/entry */ + Widget ktb; /* TB whether to use as sort key */ + Widget ltb; /* TB whether to list */ + Widget stb; /* TB whether to use as search key */ + char *srchvalue; /* fast access to search value */ + int colw; /* col length */ +} LogField; + +/* definition of each log field. + * N.B. must stay in sync with LogTags + */ +static LogField logfields[] = { + {1, "Automatically defined fields:"}, + {0, "Object"}, + {0, "Location"}, + {0, "Local Date", "Date"}, + {0, "Local Time", "Time"}, + + {0, "UTC Date", "UTCDate"}, + {0, "UTC Time", "UTCTime"}, + {0, "JD", "JD"}, + {0, "H JD", "HJD"}, + {0, "Constel"}, + + {0, "Latitude"}, + {0, "Longitude"}, + {0, "RA 2000", "RA2000"}, + {0, "Dec 2000", "Dec2000"}, + {0, "Altitude"}, + + {0, "Azimuth"}, + {0, "Airmass"}, + {0, "Moon sep", "MoonSep"}, + {0, "Moon alt", "MoonAlt"}, + {0, "Moon phase", "MoonPhase"}, + + {0, "Sun alt", "SunAlt"}, + {0, "Elongation"}, + + {1, "User defined fields:"}, + {0, "Telescope"}, + {0, "Camera"}, + {0, "Eyepiece"}, + {0, "Filter"}, + + {0, "Seeing"}, + {0, "Transparency"}, + {0, "User 1", "User1"}, + {0, "User 2", "User2"}, +}; + +#define NFLDS XtNumber(logfields) + +#define TFCOL 20 /* n text field columns */ +#define TFROW 5 /* text field rows in notes field */ + +#define KTBPOS 0 /* position % for sort key TB */ +#define LTBPOS 8 /* position % for list TB */ +#define STBPOS 16 /* position % for search TB */ +#define LPOS 24 /* position % for label */ +#define LTFPOS 55 /* position % of text field left side */ + +static int srchMatch (XMLEle *ep); +static int notesMatch (XMLEle *ep); +static int strscmp (char *s1, char *s2); +static void ol_create(void); +static void oll_create(void); +static void ol_key_cb (Widget w, XtPointer client, XtPointer call); +static void ol_help_cb (Widget w, XtPointer client, XtPointer call); +static void ol_close_cb (Widget w, XtPointer client, XtPointer call); +static void ol_list_cb (Widget w, XtPointer client, XtPointer call); +static void ol_add_cb (Widget w, XtPointer client, XtPointer call); +static void ol1row (Widget rc_w, LogField *lp); +static void fillNowFields (void); +static void fillObjFields (Obj *op); +static void ol_writeLB(void); +static void ol_listLB(void); +static char *xmltag (LogField *lfp); +static Widget logfld (char *tag); +static void printHeadings(XMLEle **mpp, int nmpp, char **txt, int *txtl); +static void printEntry (XMLEle *ep, char **txt, int *txtl); +static void sortMatches (XMLEle **mpp, int nmpp); +static void oll_save_cb (Widget w, XtPointer client, XtPointer call); +static void oll_save(void); +static void oll_close_cb (Widget w, XtPointer client, XtPointer call); +static void oll_info_eh (Widget w, XtPointer client, XEvent *ev, Boolean *ctd); + +static Widget olshell_w; /* main shell */ +static Widget ollshell_w; /* list shell */ +static Widget ollst_w; /* scrolled list */ +static Widget ollstf_w; /* save text field */ +static Widget notes_w; /* notes Text */ +static Widget notesltb_w; /* notes list TB */ +static Widget notesstb_w; /* notes search TB */ + +static XMLEle **matches; /* malloced list of XMLEle* in list */ +static int nmatches; /* number in list */ +static XMLEle *matchesroot; /* root of entries in matches[] */ + +static char lbfn[] = "xelogbook.xml"; /* logbook file name */ +static char lbtag[] = "xelogbook"; /* outter xml tag for logbook */ +static char lbetag[] = "logentry"; /* tag for each entry */ +static char ntag[] = "Notes"; /* tag for notes */ +static double lbver = 1.1; /* logbook version attr */ + +static char olcategory[] = "Logbook"; /* save category */ + +/* bring up observer's log, create if first time */ +void +ol_manage() +{ + if (!olshell_w) { + ol_create(); + oll_create(); + } + + XtPopup (olshell_w, XtGrabNone); + set_something (olshell_w, XmNiconic, (XtArgVal)False); +} + +/* return whether logbook is currently showing */ +int +ol_isUp() +{ + return(isUp(olshell_w)); +} + +/* fill log fields from given object, and Now */ +void +ol_setObj (Obj *op) +{ + fillNowFields(); + fillObjFields(op); +} + +/* called to put up or remove the watch cursor. */ +void +ol_cursor (Cursor c) +{ + Window win; + + if (olshell_w && (win = XtWindow(olshell_w)) != 0) { + Display *dsp = XtDisplay(olshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the observer log window */ +static void +ol_create() +{ + Widget w, sep_w; + Widget rc_w, fo_w; + Arg args[20]; + int i, n; + + /* create the shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Observer's log"); n++; + XtSetArg (args[n], XmNiconName, "Logbook"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + olshell_w = XtCreatePopupShell ("Logbook", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (olshell_w); + set_something (olshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (olshell_w, "XEphem*Logbook.x", olcategory, 0); + sr_reg (olshell_w, "XEphem*Logbook.y", olcategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNfractionBase, 17); n++; + fo_w = XmCreateForm (olshell_w, "LF", args, n); + XtAddCallback (fo_w, XmNhelpCallback, ol_help_cb, 0); + XtManageChild (fo_w); + + /* controls attached across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 4); n++; + w = XmCreatePushButton (fo_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, ol_close_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 8); n++; + w = XmCreatePushButton (fo_w, "List", args, n); + wtip (w, "List fields L of all logbook entries matching requirements selected with < > *, sorted by K"); + XtAddCallback (w, XmNactivateCallback, ol_list_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 9); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 12); n++; + w = XmCreatePushButton (fo_w, "Add", args, n); + wtip (w, "Add above fields as a new entry in the log book"); + XtAddCallback (w, XmNactivateCallback, ol_add_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 13); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 16); n++; + w = XmCreatePushButton (fo_w, "Help", args, n); + wtip (w, "Get more info about this window."); + XtAddCallback (w, XmNactivateCallback, ol_help_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (fo_w, "LS", args, n); + XtManageChild (sep_w); + + /* rc for the tags */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + rc_w = XmCreateRowColumn (fo_w, "LRC", args, n); + XtManageChild (rc_w); + + for (i = 0; i < NFLDS; i++) + ol1row (rc_w, &logfields[i]); + + /* notes entry expands into remaining area between sep and rc */ + + n =0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (fo_w, "Notes", args, n); + set_xmstring (w, XmNlabelString, "Notes:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + notesltb_w = XmCreateToggleButton (fo_w, "L", args, n); + wtip (notesltb_w, "Include Notes in list"); + XtManageChild (notesltb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, notesltb_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + notesstb_w = XmCreateToggleButton (fo_w, "S", args, n); + wtip (notesstb_w, "Match notes against given glob pattern"); + XtManageChild (notesstb_w); + + n =0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, notesltb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNeditable, True); n++; + XtSetArg (args[n], XmNrows, TFROW); n++; + notes_w = XmCreateScrolledText (fo_w, "Value", args, n); + XtManageChild (notes_w); +} + +/* build up one row */ +static void +ol1row (Widget rc_w, LogField *lp) +{ + Widget w, fo_w; + Arg args[20]; + int n; + + /* main form for this row */ + n = 0; + fo_w = XmCreateForm (rc_w, "LRF", args, n); + XtManageChild (fo_w); + + /* sort key TB, unless just label */ + if (!lp->justlabel) { + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, KTBPOS); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + w = XmCreateToggleButton (fo_w, "KTB", args, n); + XtAddCallback (w, XmNvalueChangedCallback, ol_key_cb, NULL); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + lp->ktb = w; + } + + /* list TB, unless just label */ + if (!lp->justlabel) { + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, LTBPOS); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + w = XmCreateToggleButton (fo_w, xmltag(lp), args, n); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + lp->ltb = w; + sr_reg (w, NULL, olcategory, 1); + } + + /* search TB, if desired */ + if (!lp->justlabel) { + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, STBPOS); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + w = XmCreateToggleButton (fo_w, "WTB", args, n); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + lp->stb = w; + } + + /* field name */ + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, lp->justlabel ? 0 : LPOS); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (fo_w, "LRL", args, n); + set_xmstring (w, XmNlabelString, lp->label); + XtManageChild (w); + + if (lp->justlabel) { + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (fo_w, "K", args, n); + wtip (w, "Select one field as the sort key for listings"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, LTBPOS); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (fo_w, "L", args, n); + wtip (w, "Select the fields to be listed in a search result."); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, STBPOS); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (fo_w, "S", args, n); + set_xmstring (w, XmNlabelString, "S"); + wtip (w, "Select the fields to match for searching. Prefix numerical fields with < or >, other fields can use glob patterns"); + XtManageChild (w); + + } + + /* text field, unless just a label */ + if (!lp->justlabel) { + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, LTFPOS); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginTop, 0); n++; + XtSetArg (args[n], XmNmarginBottom, 0); n++; + XtSetArg (args[n], XmNcolumns, TFCOL); n++; + XtSetArg (args[n], XmNeditable, True); n++; + XtSetArg (args[n], XmNcursorPositionVisible, True); n++; + w = XmCreateTextField (fo_w, "LRTF", args, n); + fixTextCursor(w); + XtManageChild (w); + lp->tfw = w; + } +} + +/* called when a K key toggles */ +/* ARGSUSED */ +static void +ol_key_cb (Widget w, XtPointer client, XtPointer call) +{ + int i; + + /* do nothing when turning off */ + if (!XmToggleButtonGetState(w)) + return; + + /* turn all others off, and turn on list for ths entry as a convenice */ + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (lfp->ktb) { + if (lfp->ktb == w) + XmToggleButtonSetState (lfp->ltb, True, True); + else + XmToggleButtonSetState (lfp->ktb, False, True); + } + } +} + +/* callback from the overall Help button. + */ +/* ARGSUSED */ +static void +ol_help_cb (Widget w, XtPointer client, XtPointer call) +{ + static char *msg[] = { + "Save observing notes", + }; + + hlp_dialog ("ObsLog", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback from the Close PB */ +/* ARGSUSED */ +static void +ol_close_cb (Widget w, XtPointer client, XtPointer call) +{ + XtPopdown (olshell_w); +} + +/* callback from the List PB */ +/* ARGSUSED */ +static void +ol_list_cb (Widget w, XtPointer client, XtPointer call) +{ + /* fill in results */ + ol_listLB(); + + /* display */ + XtPopup (ollshell_w, XtGrabNone); + set_something (ollshell_w, XmNiconic, (XtArgVal)False); +} + +/* callback from the Add PB */ +/* ARGSUSED */ +static void +ol_add_cb (Widget w, XtPointer client, XtPointer call) +{ + ol_writeLB(); +} + +/* set tags from Now */ +static void +fillNowFields() +{ + Now *np = mm_get_now(); + double lmjd = mjd - tz/24.0; + char buf[32]; + + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(lmjd)); + XmTextFieldSetString (logfld("Date"), buf); + fs_time (buf, mjd_hr(lmjd)); + XmTextFieldSetString (logfld("Time"), buf); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + XmTextFieldSetString (logfld("UTCDate"), buf); + fs_time (buf, mjd_hr(mjd)); + XmTextFieldSetString (logfld("UTCTime"), buf); + sprintf (buf, "%13.5f", mjd+MJD0); + XmTextFieldSetString (logfld("JD"), buf); + fs_dms_angle (buf, lat); + XmTextFieldSetString (logfld("Latitude"), buf); + fs_dms_angle (buf, -lng); /* + west */ + XmTextFieldSetString (logfld("Longitude"), buf); +} + +/* set tags from Obj op */ +static void +fillObjFields (Obj *op) +{ + Now *np = mm_get_now(); + double e = epoch == EOD ? mjd : epoch; + double ra, dec, sep; + double hdiff, am; + Obj *fop; + char buf[32], *bp; + + XmTextFieldSetString (logfld("Object"), op->o_name); + if ((bp = mm_getsite()) != NULL) + XmTextFieldSetString (logfld("Location"), bp); + + /* TODO check for J2000 */ + + + bp = cns_name (cns_pick (op->s_ra, op->s_dec, e)); + bp += 5; /* skip the abbreviation */ + XmTextFieldSetString (logfld("Constel"), bp); + + ra = op->s_ra; + dec = op->s_dec; + if (epoch == EOD) + ap_as (np, e, &ra, &dec); + precess (e, J2000, &ra, &dec); + + fs_sexa (buf, radhr(ra), 4, 36000); + XmTextFieldSetString (logfld("RA2000"), buf); + fs_sexa (buf, raddeg(dec), 4, 3600); + XmTextFieldSetString (logfld("Dec2000"), buf); + + fs_sexa (buf, raddeg(op->s_alt), 4, 3600); + XmTextFieldSetString (logfld("Altitude"), buf); + fs_sexa (buf, raddeg(op->s_az), 4, 3600); + XmTextFieldSetString (logfld("Azimuth"), buf); + + heliocorr (mjd+MJD0, ra, dec, &hdiff); + sprintf (buf, "%13.5f", mjd+MJD0 - hdiff); + XmTextFieldSetString (logfld("HJD"), buf); + + airmass (op->s_alt, &am); + sprintf (buf, "%.4f", am); + XmTextFieldSetString (logfld("Airmass"), buf); + + fop = db_basic (MOON); + dm_separation (op, fop, &sep); + fs_sexa (buf, raddeg(sep), 4, 3600); + XmTextFieldSetString (logfld("MoonSep"), buf); + fs_sexa (buf, raddeg(fop->s_alt), 4, 3600); + XmTextFieldSetString (logfld("MoonAlt"), buf); + sprintf (buf, "%10.1f", fop->s_phase); + XmTextFieldSetString (logfld("MoonPhase"), buf); + + fop = db_basic (SUN); + fs_sexa (buf, raddeg(fop->s_alt), 4, 3600); + XmTextFieldSetString (logfld("SunAlt"), buf); + if (op->o_type != EARTHSAT) { + sprintf (buf, "%10.1f", op->s_elong); + XmTextFieldSetString (logfld("Elongation"), buf); + } else + XmTextFieldSetString (logfld("Elongation"), " "); +} + +/* read the existing log book and list all entries matching the selected fields. + */ +static void +ol_listLB() +{ + static LilXML *lp; + XMLEle *root, *ep; + char *txt = NULL; + int txtl = 0; + char fn[512]; + char buf[2048]; + FILE *fp; + int i; + + /* open and read in the xml log */ + sprintf (fn, "%s/%s", getPrivateDir(), lbfn); + fp = fopenh (fn, "r"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return; + } + if (!lp) + lp = newLilXML(); + root = readXMLFile (fp, lp, buf); + fclose (fp); + if (!root) { + xe_msg (1, "%s:\n%s", fn, buf); + return; + } + if (strcmp (tagXMLEle(root), lbtag)) { + delXMLEle (root); + xe_msg (1, "%s:\nNot an XEphem log file", fn); + return; + } + + /* collect values from the desired search keys */ + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (!lfp->justlabel && XmToggleButtonGetState(lfp->stb)) + lfp->srchvalue = XmTextFieldGetString (lfp->tfw); /* XtFree! */ + else + lfp->srchvalue = NULL; + } + + /* scan each entry to create new matches list */ + if (matches) { + delXMLEle (matchesroot); + XtFree ((char*)matches); + } + matches = NULL; + nmatches = 0; + matchesroot = root; + for (ep = nextXMLEle (root,1); ep != NULL; ep = nextXMLEle(root,0)) { + if (srchMatch(ep)) { + matches = (XMLEle **) XtRealloc ((char*)matches, + (nmatches+1)*sizeof(XMLEle *)); + matches[nmatches++] = ep; + } + } + + /* sort */ + sortMatches (matches, nmatches); + + /* print headings and figure column widths */ + printHeadings (matches, nmatches, &txt, &txtl); + + /* print each entry */ + for (i = 0; i < nmatches; i++) + printEntry (matches[i], &txt, &txtl); + + /* display */ + XmTextSetString (ollst_w, txt); + + /* clean up */ + for (i = 0; i < NFLDS; i++) + if (logfields[i].srchvalue) + XtFree (logfields[i].srchvalue); + XtFree (txt); +} + +/* append sl chars of src to *dstp, growing *dstp as required. + * update *dstp and return new final length, sans trailing '\0'. + */ +static int +mstrcat (char **dstp, int dl, char *src, int sl) +{ + int newl = dl+sl; + char *newdst = XtRealloc (*dstp, newl+1); + strncpy (newdst+dl, src, sl); + newdst[newl] = '\0'; + *dstp = newdst; + return (newl); +} + +/* print list header. + * N.B. number of lines added here must agree with num removed in oll_info_eh() + */ +static void +printHeadings(XMLEle **mpp, int nmpp, char **txt, int *txtl) +{ + static char dashes[] = "----------------------------------------------"; + char buf[1024]; + time_t t; + int i, j, l; + + /* init colw to label length as a min width */ + for (i = 0; i < NFLDS; i++) + logfields[i].colw = strlen(logfields[i].label); + + /* one pass to find max col length */ + for (i = 0; i < nmpp; i++) { + XMLEle *ep, *e = mpp[i]; + for (j = 0; j < NFLDS; j++) { + LogField *lfp = &logfields[j]; + if (!lfp->justlabel && XmToggleButtonGetState(lfp->ltb)) { + for (ep=nextXMLEle(e,1); ep!=NULL; ep=nextXMLEle(e,0)) { + if (!strcmp (xmltag(lfp), tagXMLEle(ep))) { + int l = strlen (pcdataXMLEle(ep)); + if (l > lfp->colw) + lfp->colw = l; + } + } + } + } + } + + /* print col heading */ + time (&t); + l = sprintf (buf, "XEphem %s Observers Log Book printed %s\n", + PATCHLEVEL, ctime(&t)); + *txtl = mstrcat (txt, *txtl, buf, l); + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (!lfp->justlabel && XmToggleButtonGetState(lfp->ltb)) { + l = sprintf (buf, "%-*.*s ", lfp->colw, lfp->colw, lfp->label); + *txtl = mstrcat (txt, *txtl, buf, l); + } + } + *txtl = mstrcat (txt, *txtl, "\n", 1); + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (!lfp->justlabel && XmToggleButtonGetState(lfp->ltb)) { + l = sprintf (buf, "%-*.*s ", lfp->colw, lfp->colw, dashes); + *txtl = mstrcat (txt, *txtl, buf, l); + } + } + *txtl = mstrcat (txt, *txtl, "\n", 1); +} + +/* add one entry from ep to txt */ +static void +printEntry (XMLEle *ep, char **txt, int *txtl) +{ + XMLEle *e, *notes = NULL; + int i; + + /* show each selected list field, but just find notes for later */ + for (e = nextXMLEle(ep,1); e != NULL; e = nextXMLEle(ep,0)) { + if (!strcmp (ntag, tagXMLEle(e))) { + notes = e; + continue; + } + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (!lfp->justlabel && !strcmp (xmltag(lfp), tagXMLEle(e)) + && XmToggleButtonGetState(lfp->ltb)) { + char buf[1024]; + int l = sprintf (buf, "%-*.*s ", lfp->colw, lfp->colw, + pcdataXMLEle(e)); + *txtl = mstrcat (txt, *txtl, buf, l); + } + } + } + *txtl = mstrcat (txt, *txtl, "\n", 1); + + /* append notes if exists and wanted */ + if (XmToggleButtonGetState (notesltb_w) && notes && + pcdatalenXMLEle(notes) > 0) { + /* preceed each line with indent and # */ + int l = pcdatalenXMLEle(notes); + char *np = pcdataXMLEle(notes); + *txtl = mstrcat (txt, *txtl, " # ", 4); + for (i = 0; i < l; i++) { + *txtl = mstrcat (txt, *txtl, &np[i], 1); + if (i < l-1 && np[i] == '\n') + *txtl = mstrcat (txt, *txtl, " # ", 4); + } + if (np[l-1] != '\n') + *txtl = mstrcat (txt, *txtl, "\n", 1); + } +} + +/* return 1 if the given logentry satisfies all the search keys else 0 */ +static int +srchMatch (XMLEle *ep) +{ + XMLEle *eli; + int i; + + for (eli = nextXMLEle (ep,1); eli != NULL; eli = nextXMLEle(ep,0)) + for (i = 0; i < NFLDS; i++) + if (logfields[i].srchvalue && + !strcmp (tagXMLEle(eli), xmltag(&logfields[i])) && + !strscmp(logfields[i].srchvalue, pcdataXMLEle(eli))) + return (0); + + /* all ok so far, now depends on notes if using it */ + if (XmToggleButtonGetState(notesstb_w)) + return (notesMatch (ep)); + + return (1); +} + +/* return 1 if the notes field and ep match else 0 */ +static int +notesMatch (XMLEle *ep) +{ + char *pattern, *string; + XMLEle *nep; + int flags, ok; + + /* find notes entry, fetch pattern and string */ + nep = findXMLEle (ep, ntag); + if (!nep) + return (0); + string = pcdataXMLEle (nep); + pattern = XmTextGetString (notes_w); + + /* test */ + flags = 0; +#if defined(FNM_CASEFOLD) /* GNU extension only */ + flags |= FNM_CASEFOLD; +#endif + ok = !fnmatch (pattern, string, flags); + + /* clean up and return */ + XtFree (pattern); + return (ok); +} + +/* add the current logbook settings to logbook in the private dir */ +static void +ol_writeLB() +{ + FILE *fp; + char buf[1024]; + char cltag[sizeof(lbtag)+10]; + char *str; + int i; + + /* need closing tag */ + sprintf (cltag, "\n", lbtag); + + /* open or create */ + sprintf (buf, "%s/%s", getPrivateDir(), lbfn); + fp = fopenh (buf, "r+"); + if (fp) { + /* found existing log, skip to just before closing tag */ + long offset = ftell (fp); + while (fgets (buf, sizeof(buf), fp)) { + if (strcmp (buf, cltag) == 0) + break; + offset = ftell (fp); + } + if (feof(fp) || ferror(fp)) { + xe_msg (1, "Can not find %s", cltag); + return; + } + fseek (fp, offset, SEEK_SET); + } else { + /* no log, create */ + if (errno != ENOENT || !(fp = fopenh (buf, "w"))) { + xe_msg (1, "%s:\n %s", buf, syserrstr()); + return; + } + fprintf (fp, "\n"); + fprintf (fp, "<%s version='%g'>\n", lbtag, lbver); + } + + /* write new entry, notes are special */ + fprintf (fp, " <%s>\n", lbetag); + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (lfp->justlabel) + continue; + str = XmTextFieldGetString (lfp->tfw); + fprintf (fp, " <%s>%s\n", xmltag(lfp),str,xmltag(lfp)); + XtFree (str); + } + str = XmTextGetString (notes_w); + fprintf (fp, " <%s>\n%s\n \n", ntag, str, ntag); + XtFree (str); + fprintf (fp, " \n", lbetag); + + /* finished */ + fprintf (fp, "%s", cltag); + xe_msg (1, "Added new log entry"); + fclose (fp); +} + +/* return str as a double, noting especially dates and sexagesimal angles + */ +static double +numeric (char *str) +{ + char *lslash = strchr (str, '/'); + char *rslash = strrchr (str, '/'); + + if (lslash && rslash && lslash != rslash) { + /* 2 distinct /'s so figure it's a date in user's preferred format*/ + double d; int m, y; + f_sscandate (str, pref_get(PREF_DATE_FORMAT), &m, &d, &y); + return (y + (m*32 + d)/416); /* ordinal */ + } else { + double v; + f_scansexa (str, &v); + return (v); + } +} + +/* return whether str matches pattern. + * if pattern starts with < or > treat things numerically, else treat as + * a wildcard match. + */ +static int +strscmp (char *pattern, char *str) +{ + int flags; + + if (pattern[0] == '<') + return (numeric (str) < numeric (pattern+1)); + if (pattern[0] == '>') + return (numeric (str) > numeric (pattern+1)); + + flags = 0; +#if defined(FNM_CASEFOLD) /* GNU extension only */ + flags |= FNM_CASEFOLD; +#endif + return (!fnmatch (pattern, str, flags)); +} + +/* return xml tag for the given logfield */ +static char * +xmltag (LogField *lfp) +{ + return (lfp->xml ? lfp->xml : lfp->label); +} + +/* find a TextField for a field given its xml tag */ +static Widget +logfld (char *tag) +{ + int i; + + for (i = 0; i < NFLDS; i++) + if (strcmp (tag, xmltag(&logfields[i])) == 0) + return (logfields[i].tfw); + + printf ("Obslog bug: no such tag: %s\n", tag); + abort(); +} + +static char *srchtag; + +static int +cmp_qsort (const void *v1, const void *v2) +{ + XMLEle *ep1 = *((XMLEle **)v1); + XMLEle *ep2 = *((XMLEle **)v2); + char *sv1 = NULL, *sv2 = NULL; + XMLEle *ep; + + for (ep = nextXMLEle (ep1,1); ep != NULL; ep = nextXMLEle(ep1,0)) { + if (!strcmp (srchtag, tagXMLEle(ep))) { + sv1 = pcdataXMLEle (ep); + break; + } + } + + for (ep = nextXMLEle (ep2,1); ep != NULL; ep = nextXMLEle(ep2,0)) { + if (!strcmp (srchtag, tagXMLEle(ep))) { + sv2 = pcdataXMLEle (ep); + break; + } + } + + if (!sv1) + return (-1); + if (!sv2) + return (1); + return (strnncmp (sv1, sv2)); +} + +/* sort the array of XML log file elements by the selected key */ +static void +sortMatches (XMLEle **mpp, int nmpp) +{ + int (*sortfp) (const void *v1, const void *v2); + int i; + + /* find the key, use Object if none set */ + srchtag = NULL; + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (lfp->ktb && XmToggleButtonGetState(lfp->ktb)) { + srchtag = xmltag (lfp); + break; + } + } + if (!srchtag) { + /* use Object */ + for (i = 0; i < NFLDS; i++) { + LogField *lfp = &logfields[i]; + if (!strcmp (xmltag(lfp), "Object")) { + srchtag = xmltag (lfp); + break; + } + } + } + + /* sort by the key */ + sortfp = cmp_qsort; + qsort (mpp, nmpp, sizeof(XMLEle*), sortfp); +} + +/* create the observer log list window */ +static void +oll_create() +{ + Widget w, fo_w; + Arg args[20]; + int n; + + /* create the shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Observer's log list"); n++; + XtSetArg (args[n], XmNiconName, "Log list"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + ollshell_w = XtCreatePopupShell ("LogList", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (ollshell_w); + set_something (olshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (ollshell_w, "XEphem*LogList.x", olcategory, 0); + sr_reg (ollshell_w, "XEphem*LogList.y", olcategory, 0); + sr_reg (ollshell_w, "XEphem*LogList.width", olcategory, 0); + sr_reg (ollshell_w, "XEphem*LogList.height", olcategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + fo_w = XmCreateForm (ollshell_w, "LL", args, n); + XtManageChild (fo_w); + + /* controls attached across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + w = XmCreatePushButton (fo_w, "OLS", args, n); + set_xmstring (w, XmNlabelString, "Save:"); + XtAddCallback (w, XmNactivateCallback, oll_save_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 75); n++; + ollstf_w = XmCreateTextField (fo_w, "filename", args, n); + XtAddCallback (ollstf_w, XmNactivateCallback, oll_save_cb, NULL); + XtManageChild (ollstf_w); + sr_reg (ollstf_w, NULL, olcategory, 1); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 90); n++; + w = XmCreatePushButton (fo_w, "OLS", args, n); + set_xmstring (w, XmNlabelString, "Close"); + XtAddCallback (w, XmNactivateCallback, oll_close_cb, NULL); + XtManageChild (w); + + /* scrolled text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ollstf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrows, 24); n++; + XtSetArg (args[n], XmNcolumns, 82); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + ollst_w = XmCreateScrolledText (fo_w, "OLST", args, n); + XtAddEventHandler (ollst_w, ButtonPressMask, False, oll_info_eh, 0); + XtManageChild (ollst_w); +} + +/* save the list text in file named in ollstf_w + * N.B. don't use call, this is called by a PB and a TF + */ +/* ARGSUSED */ +static void +oll_save_cb (Widget w, XtPointer client, XtPointer call) +{ + char *fn; + + /* get fn */ + fn = XmTextFieldGetString (ollstf_w); + if (strlen (fn) == 0) { + xe_msg (1, "Please enter a file name"); + XtFree (fn); + return; + } + + /* go, perhaps cautiously */ + if (existd (fn,NULL) == 0 && confirm()) { + char buf[1024]; + (void) sprintf (buf, "%s exists:\nOverwrite?", fn); + query (ollshell_w, buf, "Yes - overwrite", "No - cancel", NULL, + oll_save, NULL, NULL); + } else + oll_save(); /* just hammer it */ + + /* done with name */ + XtFree (fn); +} + +/* write ollst_w to file named in ollstf_w */ +static void +oll_save() +{ + char *fn = XmTextFieldGetString (ollstf_w); + FILE *fp = fopend (fn, NULL, "w"); + char *txt = XmTextGetString (ollst_w); + fprintf (fp, "%s", txt); + if (ferror(fp)) + xe_msg (1, "%s:\n%s", fn, syserrstr()); + else + xe_msg (1, "Wrote %s", fn); + fclose (fp); + XtFree (txt); + XtFree (fn); +} + +/* callback from the Close PB in the list window */ +/* ARGSUSED */ +static void +oll_close_cb (Widget w, XtPointer client, XtPointer call) +{ + XtPopdown (ollshell_w); +} + +/* extra ButtonPress handler added to scrolled text. + * used to provide few more options based on text under pointer. + * N.B. header offset must agree with printHeadings() + */ +static void +oll_info_eh (Widget w, XtPointer client, XEvent *ev, Boolean *c_to_dispatch) +{ + XMLEle *me, *ep; + char *txt, *rastr, *decstr; + double ra, dec; + Obj o; + int pos; + int r; + + /* only care about button3 press */ + if (!(ev->type == ButtonPress && ev->xbutton.button == Button3)) + return; + + /* TODO accommodate notes */ + if (XmToggleButtonGetState(notesltb_w)) + return; + + /* where are we? */ + pos = XmTextXYToPos (w, ev->xbutton.x, ev->xbutton.y); + if (pos < 0) + return; + + /* find row number */ + txt = XmTextGetString (w); + for (r = 0; pos > 0; --pos) + if (txt[pos] == '\n') + r++; + XtFree (txt); + + /* find match, account for header */ + r -= 4; + if (r < 0 || r >= nmatches) + return; + me = matches[r]; + + /* pull out ra/dec, build Obj for mark */ + ep = findXMLEle (me, "RA2000"); + if (!ep) + return; + rastr = pcdataXMLEle (ep); + ep = findXMLEle (me, "Dec2000"); + if (!ep) + return; + decstr = pcdataXMLEle (ep); + f_scansexa (rastr, &ra); + memset (&o, 0, sizeof(o)); + o.o_type = FIXED; + o.f_RA = (float)hrrad(ra); + f_scansexa (decstr, &dec); + o.f_dec = (float)degrad(dec); + o.f_epoch = J2000; + + obj_cir (mm_get_now(), &o); + sv_point(&o); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: obslog.c,v $ $Date: 2015/08/09 21:47:00 $ $Revision: 1.24 $ $Name: $"}; diff --git a/GUI/xephem/options.opt b/GUI/xephem/options.opt new file mode 100755 index 0000000..4918cf0 --- /dev/null +++ b/GUI/xephem/options.opt @@ -0,0 +1,13 @@ +! XEphem (v3.2.3) Linker Options list for VMS DEC C +! This assumes Motif v1.2-3 +[-.-.LibAstro]LibAstro.olb/Library +[-.-.libip]libip.olb/Library +[-.-.liblilxml]liblilxml.olb/Library +[-.-.libjpegd]libjpegd.olb/Library +[-.-.libpng]libpng.olb/Library +[-.-.libz]libz.olb/Library +Sys$Share:DECW$XMLibShr12.exe /Share +SYS$SHARE:DECW$XMuLibShrR5.EXE/SHARE +SYS$SHARE:DECW$XExtLibShr.EXE/SHARE +Sys$Share:DECW$XTLibShrR5.exe /Share +Sys$Share:DECW$XLibShr.exe /Share diff --git a/GUI/xephem/patchlevel.c b/GUI/xephem/patchlevel.c new file mode 100644 index 0000000..ae2de20 --- /dev/null +++ b/GUI/xephem/patchlevel.c @@ -0,0 +1,9 @@ +#include + +#include + +#include "xephem.h" + +char PATCHLEVEL[] = "4.0.0"; +char PATCHDATE[] = "Feb 7, 2021"; +char COPYRIGHT[] = "Copyright (c) 1990-2021 by Elwood Charles Downey"; diff --git a/GUI/xephem/patchlevel.h b/GUI/xephem/patchlevel.h new file mode 100644 index 0000000..2c101b8 --- /dev/null +++ b/GUI/xephem/patchlevel.h @@ -0,0 +1,12 @@ +#ifndef _PATCHLEVEL_H +#define _PATCHLEVEL_H + +extern char PATCHLEVEL[]; +extern char PATCHDATE[]; +extern char COPYRIGHT[]; + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: patchlevel.h,v $ $Date: 2003/03/17 07:26:21 $ $Revision: 1.3 $ $Name: $ + */ + +#endif /* _PATCHLEVEL_H */ diff --git a/GUI/xephem/plot.h b/GUI/xephem/plot.h new file mode 100644 index 0000000..de5d91d --- /dev/null +++ b/GUI/xephem/plot.h @@ -0,0 +1,32 @@ +/* glue between plotmenu and plot_aux + */ + + +#define MAXPLTLINES 40 /* maximum unique functions (ie tags) */ +#define MAXTAG 8 /* longest tag allowed */ + +/* one of these gets malloced and passed to the drawing area expose callback via + * its client parameter. be sure to free it when the parent FormDialog goes + * away too. + * by doing this, we can have lots of different plots up at once and yet we + * don't have to keep track of them - they clean up after themselves. + */ +typedef struct { + char *filename; /* name of file being plotted (also malloced) */ + FILE *fp; /* FILE pointer for the file */ + int flipx, flipy; /* flip state for this instance */ + Widget fx_w, fy_w; /* widgets for sr_unreg() */ + int grid; /* whether to include a grid */ + int xjd_asdate; /* whether to show x axis JDs as dates */ + int xyr_asdate; /* whether to show x axis years as dates */ + Widget yas_w, jas_w;/* show as dates options */ + Widget g_w; /* widgets for sr_unreg() */ + + /* info needed to allow plotting mouse location */ + double data_minx, data_maxx, data_miny, data_maxy; + int win_minx, win_maxx, win_miny, win_maxy; +} DrawInfo; + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: plot.h,v $ $Date: 2012/12/30 17:01:02 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/GUI/xephem/plot_aux.c b/GUI/xephem/plot_aux.c new file mode 100644 index 0000000..9be1a89 --- /dev/null +++ b/GUI/xephem/plot_aux.c @@ -0,0 +1,424 @@ +/* code to manage the actual drawing of plots. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "xephem.h" + +#define TL 5 /* tick mark length, in pixels */ +#define RB 30 /* right border */ +#define NT 10 /* rough number of tick marks on each axis */ + +static void mk_gcs (Widget w); +static double binsplit (int i); +static int x_ticks (int asdate, double minx, double maxx, int maxticks, + double ticks[]); +static int draw_x_label (Display *dsp, Window win, int asdate, double v, + int x, int y, int w); + +static GC plt_gc; /* the GC to use for everything */ +static Pixel plt_p[MAXPLTLINES];/* colors, one per category */ +static XFontStruct *plt_fs; /* handy font metrix for placing text */ +static Pixel da_p; /* the foreground color of the drawing area */ +static Pixel dabg_p; /* the background color of the drawing area */ +static int top_border; /* space for coords values */ + +/* plot based on the given info in the drawing area in cartesian coords. + * update di with graph boundaries. + * TODO: add z tags somehow + * return 0 if ok, else give a message about trouble and return -1. + */ +int +plot_cartesian (DrawInfo *di, Widget widget, Dimension nx, Dimension ny) +{ + Display *dsp = XtDisplay(widget); + Window win = XtWindow(widget); + double xticks[NT+2]; + double yticks[NT+2]; + int nxt, nyt; + static char fmt[] = "%[A-Za-z0-9 ],%lf,%lf"; + double x, y; /* N.B. be sure these match what scanf's %lf wants*/ + double minx=0, maxx=0, miny=0, maxy=0, xscale, yscale; + char buf[128]; + int lx[MAXPLTLINES], ly[MAXPLTLINES], one[MAXPLTLINES]; + char tag[MAXTAG+1], tags[MAXPLTLINES][MAXTAG+1]; + XCharStruct overall; + int sawtitle; + int ylblw; /* label width */ + int nlines; + int ix, iy; /* misc X drawing coords */ + int x0; /* X x coord of lower left of plotting box, in pixels */ + int y0; /* X y coord of lower left of plotting box, in pixels */ + int w, h; /* width and height of plotting box, in pixels */ + int asc, desc; /* font ascent and descent, in pixels */ + int maxlblw; /* width of longest y axis label, in pixels */ + int i; +#define XCORD(x) (x0 + (int)((di->flipx?maxx-(x):(x)-minx)*xscale + 0.5)) +#define YCORD(y) (y0 - (int)((di->flipy?maxy-(y):(y)-miny)*yscale + 0.5)) + + /* find ranges and number of and tags for each unique line */ + nlines = 0; + while (fgets (buf, sizeof(buf), di->fp)) { + if (sscanf (buf, fmt, tag, &x, &y) != 3) + continue; + if (di->xjd_asdate) + mjd_year (x-MJD0, &x); /* work in years */ + if (nlines == 0) { + maxx = minx = x; + maxy = miny = y; + } + for (i = 0; i < nlines; i++) + if (strcmp(tag, tags[i]) == 0) + break; + if (i == nlines) { + if (nlines == MAXPLTLINES) { + xe_msg (1, "Plot file contains more than %d functions.", + MAXPLTLINES); + return(-1); + } + strcpy (tags[nlines++], tag); + } + if (x > maxx) maxx = x; + else if (x < minx) minx = x; + if (y > maxy) maxy = y; + else if (y < miny) miny = y; + } + + if (nlines == 0) { + xe_msg (1, "Plot file appears to be empty."); + return(-1); + } +#define SMALL (1e-6) + if (fabs(minx-maxx) < SMALL || fabs(miny-maxy) < SMALL) { + xe_msg (1, "Plot file values contain insufficient spread."); + return(-1); + } + + /* build the gcs, fonts etc if this is the first time. */ + if (!plt_gc) + mk_gcs (widget); + XSetForeground (dsp, plt_gc, da_p); + XSetFont (dsp, plt_gc, plt_fs->fid); + + /* decide tickmarks */ + nxt = x_ticks (di->xjd_asdate || di->xyr_asdate, minx, maxx, NT, xticks); + di->data_minx = minx = xticks[0]; + di->data_maxx = maxx = xticks[nxt-1]; + nyt = tickmarks (miny, maxy, NT, yticks); + di->data_miny = miny = yticks[0]; + di->data_maxy = maxy = yticks[nyt-1]; + + /* compute length of longest y-axis label and other char stuff. + */ + maxlblw = 0; + for (i = 0; i < nyt; i++) { + int dir, l; + (void) sprintf (buf, "%g", yticks[i]); + l = strlen(buf); + XTextExtents (plt_fs, buf, l, &dir, &asc, &desc, &overall); + if (overall.width > maxlblw) + maxlblw = overall.width; + top_border = 2*(asc+desc) + 5; + } + + /* compute border sizes and the scaling factors */ + di->win_minx = x0 = maxlblw+TL+10; + w = nx - x0 - RB; + di->win_maxx = di->win_minx + w; + y0 = ny - (asc+desc+2+2*TL); + h = y0 - top_border; + di->win_miny = y0 - h; + di->win_maxy = di->win_miny + h; + xscale = w/(maxx-minx); + yscale = h/(maxy-miny); + + /* draw y axis, its labels, and optionally the horizontal grid */ + for (i = 0; i < nyt; i++) { + int l; + (void) sprintf (buf, "%g", yticks[i]); + l = strlen(buf); + iy = YCORD(yticks[i]); + XPSDrawLine (dsp, win, plt_gc, x0-TL, iy, x0, iy); + XPSDrawString (dsp, win, plt_gc, 1, iy+(asc-desc)/2, buf, l); + if (di->grid) + XPSDrawLine (dsp, win, plt_gc, x0, iy, x0+w-1, iy); + } + + /* draw x axis and label it's first and last tick mark. + * if there's room, label the center tickmark too. + * also grid, if requested. + */ + ylblw = 0; + for (i = 0; i < nxt; i++) { + ix = XCORD(xticks[i]); + if (di->grid) + XPSDrawLine (dsp, win, plt_gc, ix, y0, ix, y0-h); + } + ylblw += draw_x_label (dsp, win, di->xjd_asdate || di->xyr_asdate, minx, XCORD(minx),y0,w+x0+RB); + ylblw += draw_x_label (dsp, win, di->xjd_asdate || di->xyr_asdate, maxx, XCORD(maxx),y0,w+x0+RB); + if (ylblw < w/2) + (void) draw_x_label (dsp, win, di->xjd_asdate || di->xyr_asdate, xticks[nxt/2], + XCORD(xticks[nxt/2]), y0, w+x0+RB); + + /* draw border of actual plotting area */ + XPSDrawLine (dsp, win, plt_gc, x0, y0-h, x0, y0); + XPSDrawLine (dsp, win, plt_gc, x0, y0, x0+w, y0); + XPSDrawLine (dsp, win, plt_gc, x0+w, y0, x0+w, y0-h); + XPSDrawLine (dsp, win, plt_gc, x0+w, y0-h, x0, y0-h); + + /* read file again, this time plotting the data (finally!). + * also, the first line we see that doesn't look like a point + * is put up as a title line (minus its first two char and trailing \n). + */ + sawtitle = 0; + rewind (di->fp); + for (i = 0; i < nlines; i++) + one[i] = 0; + while (fgets (buf, sizeof(buf), di->fp)) { + if (sscanf (buf, fmt, tag, &x, &y) != 3) { + /* a title line ? */ + int l; + + if (!sawtitle && (l = strlen(buf)) > 2) { + int di, as, de; + XCharStruct ovl; + XTextExtents (plt_fs, buf+2, l-2, &di, &as, &de, &ovl); + XSetForeground (dsp, plt_gc, da_p); + XPSDrawString (dsp, win, plt_gc, x0+(w-ovl.width)/2, asc+1, + buf+2, l-3); + sawtitle = 1; + } + continue; + } + if (di->xjd_asdate) + mjd_year (x-MJD0, &x); /* work in years */ + for (i = 0; i < nlines; i++) + if (strcmp(tag, tags[i]) == 0) + break; + ix = XCORD(x); + iy = YCORD(y); + XSetForeground (dsp, plt_gc, plt_p[i]); + if (one[i]++ > 0) + XPSDrawLine (dsp, win, plt_gc, ix, iy, lx[i], ly[i]); + else { + int ytop = y0 - h + asc; + XPSDrawString (dsp, win, plt_gc, ix+2, (iywin_minx || window_x > di->win_maxx || window_y < di->win_miny + || window_y > di->win_maxy) + return; + wid = di->win_maxx - di->win_minx; + hei = di->win_maxy - di->win_miny; + graphx = window_x - di->win_minx; + if (di->flipx) + graphx = wid - graphx; + graphy = window_y - di->win_miny; + if (di->flipy) + graphy = hei - graphy; + datax = di->data_minx + graphx*(di->data_maxx - di->data_minx)/wid; + datay = di->data_maxy - graphy*(di->data_maxy - di->data_miny)/hei; /* window 0 is on top */ + + /* erase */ + XSetForeground (dsp, plt_gc, dabg_p); + XFillRectangle (dsp, win, plt_gc, 30, top_border/2, 200, top_border/2); + + /* draw */ + XSetForeground (dsp, plt_gc, da_p); + bufl = sprintf (buf, "%.6g", datax); + XDrawString (dsp, win, plt_gc, 30, top_border-2, buf, bufl); + bufl = sprintf (buf, "%.6g", datay); + XDrawString (dsp, win, plt_gc, 120, top_border-2, buf, bufl); +} + +static void +mk_gcs (w) +Widget w; +{ + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + int i; + + /* create the annotation and default plot color gc, + * using the foreground color of the PlotDA. + */ + get_something (w, XmNforeground, (XtArgVal)&da_p); + get_something (w, XmNbackground, (XtArgVal)&dabg_p); + plt_gc = XCreateGC (dsp, win, 0L, NULL); + XSetForeground (dsp, plt_gc, da_p); + get_views_font (dsp, &plt_fs); + + /* fill in plt_p array with pixels to use for function plotting. + */ + for (i = 0; i < MAXPLTLINES; i++) { + double h, s, v, r, g, b; + XColor xc; + + /* bounce around color wheel */ + h = binsplit (i); + s = i < MAXPLTLINES/2 ? 1.0 : 0.5; + v = 1.0; + + toRGB (h, s, v, &r, &g, &b); + xc.red = (int)(65535 * r); + xc.green = (int)(65535 * g); + xc.blue = (int)(65535 * b); + + if (!XAllocColor (dsp, xe_cm, &xc)) + xc.pixel = WhitePixel(dsp,DefaultScreen(dsp)); + plt_p[i] = xc.pixel; + } +} + +/* return a unique number between 0 and 1 for every non-neg value of i. + * arrange for them to move along ever finer binary steps. + */ +static double +binsplit (int i) +{ + /* 1-based */ + double oneb = i + 1; + + /* divide into base power of two parts */ + double ndiv = pow (2.0, floor(log(oneb)/log(2.0))); + + /* add remainder, divide last evenly on both ends */ + return ((0.5 + oneb - ndiv)/ndiv); +} + +static int +x_ticks (asdate, minx, maxx, maxticks, ticks) +int asdate; +double minx, maxx; +int maxticks; +double ticks[]; +{ + double jd, minjd, maxjd; + double d0, d1; + int m0, m1, y0, y1; + int nt; + int i; + + if (!asdate) + return (tickmarks (minx, maxx, maxticks, ticks)); + + /* find spanning period in mjds */ + year_mjd (minx, &minjd); + mjd_cal (minjd, &m0, &d0, &y0); + year_mjd (maxx, &maxjd); + mjd_cal (maxjd, &m1, &d1, &y1); + + /* use month ticks if spans well more than a month */ + if (maxjd - minjd > 40) { + /* put ticks on month boundaries */ + int dt, nm; + double jd0; + + if (d1 > 1 && ++m1 > 12) { /* next whole month */ + m1 = 1; + y1++; + } + nm = (y1*12+m1) - (y0*12+m0); /* period */ + dt = nm/maxticks + 1; /* step size */ + nt = (nm+(dt-1))/dt + 1; /* n ticks */ + for (i = 0; i < nt; i++) { + cal_mjd (m0, 1.0, y0, &jd0); + mjd_year (jd0, &ticks[i]); + m0 += dt; + while (m0 > 12) { + m0 -= 12; + y0++; + } + } + } else { + /* put ticks on day boundaries */ + int nd, dt; + + nd = (int)(maxjd - minjd + 1); /* period */ + dt = nd/maxticks + 1; /* round up */ + nt = (nd+(dt-1))/dt + 1; /* n ticks */ + jd = mjd_day (minjd); /* whole day */ + for (i = 0; i < nt; i++) { + mjd_year (jd, &ticks[i]); + jd += dt; + } + } + + return (nt); +} + +/* draw v centered at [x,y]. + * return width of string in pixels. + */ +static int +draw_x_label (dsp, win, asdate, v, x, y, w) +Display *dsp; +Window win; +int asdate; +double v; +int x, y; +int w; +{ + int dir, asc, des; + XCharStruct ovl; + char buf[128]; + int l, lx; + + if (asdate) { + double jd; + + year_mjd (v, &jd); + fs_date (buf, pref_get(PREF_DATE_FORMAT), jd); + } else + (void) sprintf (buf, "%g", v); + l = strlen(buf); + XTextExtents (plt_fs, buf, l, &dir, &asc, &des, &ovl); + XSetForeground (dsp, plt_gc, da_p); + XSetFont (dsp, plt_gc, plt_fs->fid); + XPSDrawLine (dsp, win, plt_gc, x, y+TL, x, y+2*TL); + lx = x-ovl.width/2; + if (lx < 0) + lx = 1; + else if (lx + ovl.width > w) + lx = w - ovl.width; + XPSDrawString (dsp, win, plt_gc, lx, y+2*TL+asc+1, buf, l); + + return (ovl.width); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plot_aux.c,v $ $Date: 2012/12/30 17:01:02 $ $Revision: 1.12 $ $Name: $"}; diff --git a/GUI/xephem/plotmenu.c b/GUI/xephem/plotmenu.c new file mode 100644 index 0000000..d2ebcc7 --- /dev/null +++ b/GUI/xephem/plotmenu.c @@ -0,0 +1,1592 @@ +/* code to manage the stuff on the "plot" menu. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + +static void plt_select (int whether); +static void plot_create_shell (void); +static void plt_active_cb (Widget w, XtPointer client, XtPointer call); +static void plt_select_cb (Widget w, XtPointer client, XtPointer call); +static void plt_show_cb (Widget w, XtPointer client, XtPointer call); +static void plt_savecfg_cb (Widget w, XtPointer client, XtPointer call); +static void plt_loadcfg_cb (Widget w, XtPointer client, XtPointer call); +static void plt_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void plt_close_cb (Widget w, XtPointer client, XtPointer call); +static void plt_help_cb (Widget w, XtPointer client, XtPointer call); +static void plt_undo_cb (Widget w, XtPointer client, XtPointer call); +static void plt_reset (void); +static void plt_stop_selecting (void); +static void plt_turn_off (void); +static void set_x (char *name); +static void set_y (char *name); +static void add_field (char *name); +static void init_row (void); +static void plt_try_append (void); +static void plt_try_overwrite (void); +static void plt_try_cancel (void); +static void plt_try_turn_on (void); +static void plt_turn_on (char *how); +static void plt_da_manage (char *fn); +static void plt_da_destroy (Widget da_w); +static void plt_print (void); +static void plt_da_print_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_close_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_unmap_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_flipx_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_flipy_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_grid_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_xyr_asdate_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_xjd_asdate_cb (Widget w, XtPointer client, XtPointer call); +static void plt_da_exp_cb (Widget da_w, XtPointer client, XtPointer call); +static void plt_da_motion_eh (Widget da_w, XtPointer client, XEvent *ev, Boolean *continue_to_dispatch); +static void plt_drawall (Widget da_w); +static int plt_ano (double *sx, double *sy, int *xp, int *yp, int w2x,int arg); + +#define MAXFLDNAM 32 /* longest allowed field name */ + +/* column indeces */ +typedef enum { + T=0 /* tag label text field */, + X /* X label */, + Y /* Y label */, + FORM /* the form that holds the three above */, + NPC /* number of columns */ +} PCols; + +static Widget plotshell_w; /* main shell */ +static Widget select_w; /* TB for selecting plot fields */ +static Widget active_w; /* TB for building plot file */ +static Widget prompt_w; /* what to do next label */ +static Widget title_w; /* TF for user's plot title */ +static Widget pfn_w; /* TF for new plot file name */ +static Widget cfn_w; /* TF for new config file name */ +static Widget undo_w; /* PB for undoing a field selection */ +static int selecting_xy; /* one of X or Y */ + +static FILE *plt_fp; /* the plot file; == 0 means don't plot */ + +static Widget da_w_save; /* used to set up for a print action */ +static char config_suffix[] = ".ptc"; /* file ext for plot config files */ +static char plot_suffix[] = ".plt"; /* file ext for plot files */ + +static char plotcategory[] = "Tools -- Plot"; /* Save category */ +static char xml_plotele[] = "XEphemPlotConfig"; + +/* store the name of each x and y line to track and their values. + * we get the tag straight from the Text widget in the table as needed. + */ +typedef struct { + char pl_xn[MAXFLDNAM]; /* name of x field, or 0 if none */ + double pl_xv; /* last known value of x field */ + char pl_yn[MAXFLDNAM]; /* name of y field, or 0 if none */ + double pl_yv; /* last known value of x field */ + Widget c_w[NPC]; /* column displays */ +} PltLine; +static PltLine pltlines[MAXPLTLINES]; +static int npltlines; /* number of completely defined plots */ + +/* called when the plot menu is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, just get going. + */ +void +plot_manage () +{ + if (!plotshell_w) + plot_create_shell(); + + XtPopup (plotshell_w, XtGrabNone); + set_something (plotshell_w, XmNiconic, (XtArgVal)False); +} + +/* called by the other menus (data, etc) as their buttons are + * selected to inform us that that button is to be included in a plot. + */ +void +plt_selection (name) +char *name; +{ + if (!isUp(plotshell_w) || !XmToggleButtonGetState(select_w)) + return; + + add_field (name); +} + +/* called as each different field is written -- just save in pltlines[] + * if we are interested in it. + * might have the same field listed more than once so can't stop if find one. + */ +void +plt_log (name, value) +char *name; +double value; +{ + if (plt_fp) { + PltLine *plp; + for (plp = pltlines; plp < &pltlines[npltlines]; plp++) { + if (strcmp (name, plp->pl_xn) == 0) + plp->pl_xv = value; + if (strcmp (name, plp->pl_yn) == 0) + plp->pl_yv = value; + } + } +} + +/* called when all fields have been updated and it's time to + * write the active plotfields to the current plot file, if one is open. + */ +void +plot() +{ + if (plt_fp) { + /* plot in order of original selection */ + PltLine *plp; + for (plp = pltlines; plp < &pltlines[npltlines]; plp++) { + char *lbl = XmTextFieldGetString(pltlines[plp-pltlines].c_w[T]); + (void) fprintf (plt_fp, "%s,%.12g,%.12g\n", lbl, + plp->pl_xv, plp->pl_yv); + XtFree (lbl); + } + } +} + +int +plot_ison() +{ + return (plt_fp != 0); +} + +/* called to put up or remove the watch cursor. */ +void +plt_cursor (c) +Cursor c; +{ + Window win; + + if (plotshell_w && (win = XtWindow(plotshell_w)) != 0) { + Display *dsp = XtDisplay(plotshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* inform the other menues whether we are setting up for them to tell us + * what fields to plot. + */ +static void +plt_select(whether) +int whether; +{ + all_selection_mode(whether); +} + +static void +plot_create_shell() +{ + XmString str; + Widget f_w, rc_w; + Widget pf_w, oms_w, omc_w; + Widget w, cfg_w; + Arg args[20]; + char *s[1]; + int i, n; + + /* create the main dialog */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Plot Control"); n++; + XtSetArg (args[n], XmNiconName, "Plot"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + plotshell_w = XtCreatePopupShell ("Plot", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (plotshell_w); + set_something (plotshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (plotshell_w, XmNpopdownCallback, plt_popdown_cb, NULL); + sr_reg (plotshell_w, "XEphem*Plot.x", plotcategory, 0); + sr_reg (plotshell_w, "XEphem*Plot.y", plotcategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++; + pf_w = XmCreateForm (plotshell_w, "PlotF", args, n); + XtAddCallback (pf_w, XmNhelpCallback, plt_help_cb, 0); + XtManageChild (pf_w); + + /* control to allow selecting an existing plot file to display */ + + s[0] = plot_suffix; + oms_w = createFSM (pf_w, s, 1, "auxil", plt_show_cb); + wtip (oms_w, "Select a plot configuration file to load"); + set_xmstring (oms_w, XmNlabelString, "Show plot file: "); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetValues (oms_w, args, n); + + /* control to allow selecting a config file to load */ + + s[0] = config_suffix; + omc_w = createFSM (pf_w, s, 1, "auxil", plt_loadcfg_cb); + set_xmstring (omc_w, XmNlabelString, "Load config file: "); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, oms_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetValues (omc_w, args, n); + + /* save config TB and its TF */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, omc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + cfg_w = XmCreateToggleButton(pf_w, "PSTB", args, n); + XtAddCallback(cfg_w, XmNvalueChangedCallback, plt_savecfg_cb, NULL); + set_xmstring (cfg_w, XmNlabelString, "Save config file: "); + wtip (cfg_w, "Save current plot definition to file"); + XtManageChild (cfg_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, omc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, cfg_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + cfn_w = XmCreateTextField (pf_w, "ConfigFile", args, n); + defaultTextFN (cfn_w, 0, "myconfig.ptc", NULL); + wtip (cfn_w, + "Enter name of file in which to save current plot definition"); + XtManageChild (cfn_w); + sr_reg (cfn_w, NULL, plotcategory, 0); + + /* field Select PB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, cfn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + select_w = XmCreateToggleButton(pf_w, "PSTB", args, n); + XtAddCallback(select_w, XmNvalueChangedCallback, plt_select_cb, NULL); + set_xmstring (select_w, XmNlabelString, "Select fields to plot"); + wtip (select_w, "Build plot functions from selectable buttons"); + XtManageChild (select_w); + + /* create plot TB and its TF */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, select_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + active_w = XmCreateToggleButton(pf_w, "PCTB", args, n); + XtAddCallback(active_w, XmNvalueChangedCallback, plt_active_cb, NULL); + set_xmstring (active_w, XmNlabelString, "Create plot file: "); + wtip (active_w, + "Selected fields are written to the named file at each Update"); + XtManageChild (active_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, select_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, active_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + pfn_w = XmCreateTextField (pf_w, "PlotFile", args, n); + defaultTextFN (pfn_w, 0, "myplot.plt", NULL); + wtip (pfn_w, "Enter name of plot file to create"); + XtManageChild (pfn_w); + sr_reg (pfn_w, NULL, plotcategory, 0); + + /* make a RowColumn to everything else */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, pfn_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 6); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn(pf_w, "PlotRC", args, n); + XtManageChild (rc_w); + + /* create title text area and its label */ + + n = 0; + str = XmStringCreate("Title:", XmSTRING_DEFAULT_CHARSET); + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (rc_w, "PlotTL", args, n); + XtManageChild (w); + XmStringFree (str); + + n = 0; + XtSetArg (args[n], XmNcolumns, 40); n++; + title_w = XmCreateTextField (rc_w, "PlotTitle", args, n); + wtip (title_w, "Enter a title to be written to the file"); + XtManageChild (title_w); + + /* create prompt line -- it will be managed as necessary */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + prompt_w = XmCreateLabel (rc_w, "PlotPrompt", args, n); + + /* create the table. + * each row is in a form to control its shape. + * loop index of -1 is used to make the column headings. + * the table entries are all managed but the forms are not at this time. + */ + + for (i = -1; i < MAXPLTLINES; i++) { + n = 0; + f_w = XmCreateForm (rc_w, "PlotTF", args, n); + + /* save the form unless we are just making the column headings */ + if (i == -1) + XtManageChild (f_w); + else + pltlines[i].c_w[FORM] = f_w; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 0); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + if (i == -1) { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (f_w, "Tag", args, n); + wtip (w, "Column of tags for each X/Y pair to plot"); + XtManageChild (w); + } else { + XtSetArg (args[n], XmNmaxLength, MAXTAG); n++; + XtSetArg (args[n], XmNcolumns, MAXTAG); n++; + pltlines[i].c_w[T] = XmCreateTextField (f_w, "PlotTag", args,n); + XtManageChild (pltlines[i].c_w[T]); + } + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 65); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + if (i == -1) { + w = XmCreateLabel (f_w, "_X_", args, n); + wtip (w, "Column of X fields for each X/Y pair to plot"); + XtManageChild (w); + } else { + pltlines[i].c_w[X] = XmCreateLabel (f_w, "PlotX", args, n); + XtManageChild (pltlines[i].c_w[X]); + } + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 65); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + if (i == -1) { + w = XmCreateLabel (f_w, "_Y_", args, n); + wtip (w, "Column of Y fields for each X/Y pair to plot"); + XtManageChild (w); + } else { + pltlines[i].c_w[Y] = XmCreateLabel (f_w, "PlotY", args, n); + XtManageChild (pltlines[i].c_w[Y]); + } + } + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + /* make a form to hold the close and help buttons evenly */ + + n = 0; + XtSetArg (args[n], XmNfractionBase, 10); n++; + f_w = XmCreateForm (rc_w, "PlotCF", args, n); + XtManageChild(f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + wtip (w, "Close this dialog ((but continue plotting if active)"); + XtAddCallback (w, XmNactivateCallback, plt_close_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + XtSetArg (args[n], XmNsensitive, False); n++; + undo_w = XmCreatePushButton (f_w, "Undo", args, n); + wtip (undo_w, "Undo last choice)"); + XtAddCallback (undo_w, XmNactivateCallback, plt_undo_cb, 0); + XtManageChild (undo_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 7); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + wtip (w, "More detailed usage information"); + XtAddCallback (w, XmNactivateCallback, plt_help_cb, 0); + XtManageChild (w); +} + +/* callback from one of the file names in the Show list. + * file name is label of this widget + */ +/* ARGSUSED */ +static void +plt_show_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + + /* turn off plotting, if on, to make sure file is complete. */ + if (XmToggleButtonGetState(active_w)) + XmToggleButtonSetState(active_w, False, True); + + get_xmstring (w, XmNlabelString, &fn); + plt_da_manage(fn); + XtFree (fn); +} + +/* callback from one of the config file names in load. + * file name is label of this widget + */ +/* ARGSUSED */ +static void +plt_loadcfg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024]; + FILE *fp; + char *fn; + + /* turn off plotting and selecting, if on */ + if (XmToggleButtonGetState(active_w)) + XmToggleButtonSetState(active_w, False, True); + if (XmToggleButtonGetState(select_w)) + XmToggleButtonSetState(select_w, False, True); + + get_xmstring (w, XmNlabelString, &fn); + fp = fopend (fn, NULL, "r"); + if (fp) { + LilXML *lp = newLilXML(); + XMLEle *pele = readXMLFile (fp, lp, buf); + + if (!pele) + xe_msg (1, "%s:\n%s", fn, buf); + else if (strcmp (tagXMLEle(pele), xml_plotele)) { + xe_msg (1, "Not a valid plot config file"); + } else { + XMLEle *ep; + + plt_reset(); + init_row(); /* set first tag to something and show it */ + selecting_xy = X; + for (ep= nextXMLEle(pele,1); ep != NULL; ep=nextXMLEle(pele,0)){ + if (strcmp (tagXMLEle(ep), "plot") == 0) { + XmTextFieldSetString (pltlines[npltlines].c_w[T], + findXMLAttValu (ep, "tag")); + add_field (findXMLAttValu (ep, "x")); + add_field (findXMLAttValu (ep, "y")); + } + } + + XmTextFieldSetString (title_w, + pcdataXMLEle(findXMLEle(pele,"title"))); + plt_stop_selecting(); + } + delXMLEle (pele); + delLilXML (lp); + fclose (fp); + } + + XtFree (fn); +} + +/* callback to save current configuration to file named by cfn_w. */ +/* ARGSUSED */ +static void +plt_savecfg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FILE *fp; + char *txt, *fn; + char buf[1024]; + int i; + + /* ignore if turning off */ + if (!XmToggleButtonGetState(w)) + return; + + /* stop selecting if on */ + if (XmToggleButtonGetState (select_w)) + XmToggleButtonSetState (select_w, False, True); + + /* get config file name, add suffix if not already */ + fn = txt = XmTextFieldGetString (cfn_w); + if (!strstr (txt, config_suffix)) { + sprintf (fn = buf, "%s%s", txt, config_suffix); + XmTextFieldSetString (cfn_w, fn); + } + + /* save each entry */ + fp = fopend (fn, NULL, "w"); + if (fp) { + char *title = XmTextFieldGetString (title_w); + fprintf (fp, "<%s>\n", xml_plotele); + fprintf (fp, " %s\n", title); + for (i = 0; i < npltlines; i++) { + PltLine *p = &pltlines[i]; + char *tn = XmTextFieldGetString (p->c_w[T]); + fprintf (fp, " \n", tn, + p->pl_xn, p->pl_yn); + XtFree (tn); + } + fprintf (fp, "\n", xml_plotele); + XtFree (title); + fclose (fp); + } + + /* act like a push button - give chance to see change. */ + if (confirm()) + xe_msg (1, "%s saved", fn); + XmToggleButtonSetState(w, False, True); + + /* finished */ + XtFree (txt); +} + +/* callback to allow selecting plot fields */ +/* ARGSUSED */ +static void +plt_select_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState(w)) { + /* first turn off plotting, if on, while we change things */ + if (XmToggleButtonGetState(active_w)) + XmToggleButtonSetState(active_w, False, True); + plt_reset(); /* reset pltlines array and unmanage the table*/ + plt_select(1); /* inform other menus to inform us of fields */ + init_row(); /* set first tag to something and show it */ + selecting_xy = X; + } else + plt_stop_selecting(); +} + +/* callback when user wants to start building a plot file */ +/* ARGSUSED */ +static void +plt_active_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState(w)) { + /* first turn off selecting, if on */ + if (XmToggleButtonGetState(select_w)) + XmToggleButtonSetState(select_w, False, True); + if (npltlines > 0) + plt_try_turn_on(); + else { + xe_msg (1, "Please select at least one pair of values to plot"); + XmToggleButtonSetState (w, False, False); + } + } else + plt_turn_off(); +} + +/* callback when the main plot window is closed */ +/* ARGSUSED */ +static void +plt_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +} + +/* callback from the Close button. + */ +/* ARGSUSED */ +static void +plt_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (plotshell_w); +} + +/* callback from the Help button. + */ +/* ARGSUSED */ +static void +plt_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +static char *help_msg[] = { +"This menu controls the plot generation and display functionality of xephem.", +"Select fields to form x/y pairs, enable plotting to write them to a file on", +"each xephem iteration step, then view. Each file may be titled, as desired." +}; + hlp_dialog ("Plot", help_msg, sizeof(help_msg)/sizeof(help_msg[0])); +} + +/* callback from the Undo button. + */ +/* ARGSUSED */ +static void +plt_undo_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (selecting_xy == X) { + if (npltlines > 0) { + /* delete row and previous y */ + XtUnmanageChild (pltlines[npltlines--].c_w[FORM]); + set_y (""); + selecting_xy = Y; + } + } else if (selecting_xy == Y) { + /* clear x */ + set_x (""); + selecting_xy = X; + } +} + +/* forget our list, and unmanage the table. + */ +static void +plt_reset() +{ + int i; + + for (i = 0; i < npltlines; i++) + XtUnmanageChild (pltlines[i].c_w[FORM]); + + npltlines = 0; +} + +/* stop selecting: unmanage a partitially filled in line specs; tell + * everybody else to drop their buttons, make sure toggle is off. + */ +static void +plt_stop_selecting() +{ + if (npltlines < MAXPLTLINES) + XtUnmanageChild (pltlines[npltlines].c_w[FORM]); + + XmToggleButtonSetState (select_w, False, False); + plt_select(0); + XtUnmanageChild (prompt_w); + XtSetSensitive (undo_w, False); +} + +static void +plt_turn_off () +{ + if (plt_fp) { + (void) fclose (plt_fp); + plt_fp = 0; + } +} + +/* set name as X coord on current row and change prompt to ask for Y */ +static void +set_x (name) +char *name; +{ + (void) strncpy (pltlines[npltlines].pl_xn, name, MAXFLDNAM-1); + set_xmstring (pltlines[npltlines].c_w[X], XmNlabelString, name); + set_xmstring (prompt_w, XmNlabelString, "Choose field for Y .."); + XtManageChild (prompt_w); +} + +/* set name as Y coord on current row */ +static void +set_y (name) +char *name; +{ + (void) strncpy (pltlines[npltlines].pl_yn, name, MAXFLDNAM-1); + set_xmstring (pltlines[npltlines].c_w[Y], XmNlabelString, name); +} + +/* init npltlines'th row and change prompt to ask for X */ +static void +init_row () +{ + char buf[100]; + + (void) sprintf (buf, "P%02d", npltlines+1); + XmTextFieldSetString (pltlines[npltlines].c_w[T], buf); + + set_xmstring (prompt_w, XmNlabelString, "Choose field for X .."); + XtManageChild (prompt_w); + + set_xmstring (pltlines[npltlines].c_w[X], XmNlabelString, " "); + set_xmstring (pltlines[npltlines].c_w[Y], XmNlabelString, " "); + + XtManageChild (pltlines[npltlines].c_w[FORM]); + + XtSetSensitive (undo_w, True); +} + +/* add the next field to the new plot configuration being build */ +static void +add_field (char *name) +{ + if (selecting_xy == X) { + set_x (name); + selecting_xy = Y; + } else { + set_y (name); + ++npltlines; + if (npltlines == MAXPLTLINES) + plt_stop_selecting(); + else { + init_row(); + selecting_xy = X; + } + } +} + +/* called from the query routine when want to append to an existing plot file.*/ +static void +plt_try_append() +{ + plt_turn_on("a"); +} + +/* called from the query routine when want to overwrite to an existing plot + * file. + */ +static void +plt_try_overwrite() +{ + plt_turn_on("w"); +} + +/* called from the query routine when want decided not to make a plot file. */ +static void +plt_try_cancel() +{ + XmToggleButtonSetState (active_w, False, False); +} + +/* attempt to open file for use as a plot file. + * if it doesn't exist, then go ahead and make it. + * but if it does, first ask wheher to append or overwrite. + */ +static void +plt_try_turn_on() +{ + char *txt; + char buf[1024], *fn; + + /* add suffix if not already */ + fn = txt = XmTextFieldGetString (pfn_w); + if (!strstr (txt, plot_suffix)) + sprintf (fn = buf, "%s%s", txt, plot_suffix); + + /* create, or modify if ok */ + if (existd (fn,NULL) == 0 && confirm()) { + char buf[256]; + (void) sprintf (buf, "%s exists:\nAppend or Overwrite?", fn); + query (plotshell_w, buf, "Append", "Overwrite", "Cancel", + plt_try_append, plt_try_overwrite, plt_try_cancel); + } else + plt_try_overwrite(); + + XtFree (txt); +} + +/* turn on plotting. + * establish a file to use (and thereby set plt_fp, the plotting_is_on flag). + */ +static void +plt_turn_on (how) +char *how; /* fopen how argument */ +{ + char buf[1024], *fn; + char *txt; + + /* add suffix if not already */ + fn = txt = XmTextFieldGetString (pfn_w); + if (!strstr (txt, plot_suffix)) { + sprintf (fn = buf, "%s%s", txt, plot_suffix); + XmTextFieldSetString (pfn_w, fn); + } + + /* plotting is on if file opens ok */ + plt_fp = fopend (fn, NULL, how); + if (!plt_fp) + XmToggleButtonSetState (active_w, False, False); + XtFree (txt); + + if (plt_fp) { + /* add a title if it's not null */ + txt = XmTextFieldGetString (title_w); + if (txt[0] != '\0') + (void) fprintf (plt_fp, "* %s\n", txt); + XtFree (txt); + } +} + +/* make a new drawing area widget and manage it. it's unmanaged and destroyed + * from the Close button or if something goes wrong during plotting. + * open the plot file and save it, the current state of the flipx/flipy/grid + * buttons and the filename in a DrawInfo struct in the userData resource + * for the FormDialog where the drawingarea callback can get at it each time. + * this way, we can have lots of different plots up at once yet we don't + * have to keep track of them. + * by leaving the file open, we gain some protection against it being removed + * or renamed. + */ +static void +plt_da_manage(char *fn) +{ + Widget daform_w; + Widget da_w, w; + Widget mb_w, pd_w, cb_w; + XmString str; + EventMask mask; + Arg args[20]; + char titlebuf[64]; + int n; + DrawInfo *di; + FILE *fp; + + /* first make sure we can open the plot file */ + fn = XtNewString (fn); + fp = fopend (fn, "auxil", "r"); + if (!fp) { + XtFree (fn); + return; + } + + /* create the form dialog parent. */ + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + daform_w = XmCreateFormDialog (plotshell_w, "PlotDisplay", args, n); + set_something (daform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (daform_w, XmNmapCallback, prompt_map_cb, NULL); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + (void) sprintf (titlebuf, "xephem Plot of `%.*s'", + (int)sizeof(titlebuf)-20, fn); + n = 0; + XtSetArg (args[n], XmNtitle, titlebuf); n++; + XtSetValues (XtParent(daform_w), args, n); + + /* make the DrawInfo structure and save it in the userData of the Form. + * the memory gets freed when the dialog is closed/unmanaged. + * the options get inited from their toggle buttons. + */ + di = (DrawInfo *) XtMalloc (sizeof(DrawInfo)); + di->filename = fn; + di->fp = fp; + set_something (daform_w, XmNuserData, (XtArgVal)di); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (daform_w, "MB", args, n); + XtManageChild (mb_w); + + /* create the drawing area and connect plt_da_exp_cb(). + * N.B. be sure this guys parent is the FormDialog so exp_cb can find + * the DrawInfo by looking there at its userData. + * make this as high as it is wide when it is first mapped. + * N.B. if ever want this in a frame beware that other functions + * assume that the daform_w is the parent of the DrawingArea. + */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 2); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + da_w = XmCreateDrawingArea (daform_w, "PlotMap", args, n); + XtAddCallback (da_w, XmNexposeCallback, plt_da_exp_cb, NULL); + mask = Button1MotionMask | PointerMotionMask | PointerMotionHintMask; + XtAddEventHandler (da_w, mask, False, plt_da_motion_eh, 0); + XtManageChild (da_w); + + /* when unmap the form, pass the da to the unmap callback */ + XtAddCallback (daform_w, XmNunmapCallback, plt_da_unmap_cb, + (XtPointer)da_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* make the print button */ + n = 0; + w = XmCreatePushButton (pd_w, "PltPrint", args, n); + XtAddCallback (w, XmNactivateCallback, plt_da_print_cb, da_w); + set_xmstring (w, XmNlabelString, "Print..."); + wtip (w, "Print this plot"); + XtManageChild (w); + + /* make the annot button */ + n = 0; + w = XmCreatePushButton (pd_w, "Ann", args, n); + XtAddCallback (w, XmNactivateCallback, ano_cb, NULL); + set_xmstring (w, XmNlabelString, "User annotation..."); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* make the movie loop button */ + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "ML", args, n); + XtAddCallback (w, XmNactivateCallback, plt_da_mloop_cb, da_w); + set_xmstring (w, XmNlabelString, "Add to movie..."); + wtip (w, "Add this plot to the movie loop"); + XtManageChild (w); + + /* add a separator */ + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* make the close button. + * it destroys the dialog and frees the DrawInfo struct. + */ + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + wtip (w, "Close this plot display"); + XtAddCallback (w, XmNactivateCallback, plt_da_close_cb, daform_w); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + str = XmStringCreate("Flip X", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton(pd_w, "FlipX", args, n); + di->flipx = XmToggleButtonGetState (w); + di->fx_w = w; + XmStringFree (str); + XtAddCallback (w, XmNvalueChangedCallback, plt_da_flipx_cb, da_w); + wtip (w, "Flip left-to-right"); + XtManageChild (w); + /* TODO - can not use until fix findWFB() + * sr_reg (w, NULL, plotcategory, 1); + */ + + str = XmStringCreate("Flip Y", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton(pd_w, "FlipY", args, n); + di->flipy = XmToggleButtonGetState (w); + di->fy_w = w; + XmStringFree (str); + XtAddCallback (w, XmNvalueChangedCallback, plt_da_flipy_cb, da_w); + wtip (w, "Flip top-to-bottom"); + XtManageChild (w); + /* TODO - can not use until fix findWFB() + * sr_reg (w, NULL, plotcategory, 1); + */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreateToggleButton(pd_w, "Grid", args, n); + di->grid = XmToggleButtonGetState (w); + di->g_w = w; + XtAddCallback (w, XmNvalueChangedCallback, plt_da_grid_cb, da_w); + wtip (w, "Overlay plot with calibrated grid"); + XtManageChild (w); + /* TODO - can not use until fix findWFB() + * sr_reg (w, NULL, plotcategory, 1); + */ + + str = XmStringCreate("Show X-Axis Years as Dates", + XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton(pd_w, "XYrAsDate", args, n); + di->xyr_asdate = XmToggleButtonGetState (w); + di->yas_w = w; + XmStringFree (str); + XtAddCallback (w, XmNvalueChangedCallback, plt_da_xyr_asdate_cb, da_w); + wtip (w, "Assume ordinate values are decimal years and display as dates"); + XtManageChild (w); + /* TODO - can not use until fix findWFB() + * sr_reg (w, NULL, plotcategory, 1); + */ + + str = XmStringCreate("Show X-Axis JDs as Dates", + XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton(pd_w, "XJDAsDate", args, n); + di->xjd_asdate = XmToggleButtonGetState (w); + di->jas_w = w; + XmStringFree (str); + XtAddCallback (w, XmNvalueChangedCallback, plt_da_xjd_asdate_cb, da_w); + wtip (w, "Assume ordinate values are Julian dates and display as dates"); + XtManageChild (w); + /* TODO - can not use until fix findWFB() + * sr_reg (w, NULL, plotcategory, 1); + */ + + /* go. the expose will do the actual plotting */ + XtManageChild (daform_w); +} + +/* called with the DrawingArea when finished with a plot. + * use it to get the FormDialog parent and reclaim all memory in its userData + * DrawInfo and destroy the Form and hence everything in it. + */ +static void +plt_da_destroy (da_w) +Widget da_w; +{ + Widget daform_w = XtParent(da_w); + DrawInfo *di; + + get_something (daform_w, XmNuserData, (XtArgVal)&di); + (void) fclose (di->fp); + XtFree(di->filename); + XtFree((char *)di); + /* TODO: don't do these until fix findWFB() + sr_unreg (di->fx_w); + sr_unreg (di->fy_w); + sr_unreg (di->g_w); + sr_unreg (di->as_w); + */ + + /* destroy the shell, not just the form */ + while (!XtIsWMShell (daform_w)) + daform_w = XtParent(daform_w); + XtDestroyWidget(daform_w); + + /* invalidate the saved print widget if it matches */ + if (da_w_save == da_w) + da_w_save = 0; +} + +/* proceed to generate a postscript file from da_w_save if it is still up. + * reset da_w_save and call XPSClose() when finished. + */ +static void +plt_print() +{ + if (da_w_save) { + Dimension w, h; + int iw, ih; + + get_something (da_w_save, XmNwidth, (XtArgVal)&w); + get_something (da_w_save, XmNheight, (XtArgVal)&h); + iw = (int)w; + ih = (int)h; + + /* draw in an area 6.5w x 8h centered 1in down from top */ + if (16*iw >= 13*ih) + XPSXBegin (XtWindow(da_w_save), 0, 0, iw, ih, 1*72, 10*72, + (int)(6.5*72)); + else { + int pw = 72*8*iw/ih; /* width on paper when 8 hi */ + XPSXBegin (XtWindow(da_w_save), 0, 0, iw, ih, + (int)((8.5*72-pw)/2), 10*72, pw); + } + + plt_drawall (da_w_save); + XPSXEnd(); + XPSClose(); + da_w_save = 0; + } else { + xe_msg (1, "Can not print after plot has been dismissed."); + XPSClose(); + } +} + +/* called when the Print button is pushed on a plot. + * store the da_w (passed in client) and ask for print setup info. + */ +/* ARGSUSED */ +static void +plt_da_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget da_w = (Widget)client; + + da_w_save = da_w; + XPSAsk ("Plot", plt_print); +} + +/* called to add plot to the movie loop. + * use the window of the da_w (passed in client) + */ +/* ARGSUSED */ +static void +plt_da_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget da_w = (Widget)client; + XmUpdateDisplay (da_w); /* handle expose after pulldown menu */ + ml_add (XtWindow(da_w), NULL); +} + +/* called when the Close button is pushed on a plot. + * just unmap the dialog (passed as client). + */ +/* ARGSUSED */ +static void +plt_da_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild ((Widget)client); +} + +/* called when a plot is unmapped, either via a WM command or the Close button. + * free the DrawInfo and destroy the DrawingArea (passed as client). + */ +/* ARGSUSED */ +static void +plt_da_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + plt_da_destroy ((Widget)client); +} + +/* callback from the Flip X toggle button within the drawing FormDiag itself. + * toggle the x bit in the parent's DrawInfo structure and fake an expose. + * client is the DrawingArea widget. + */ +/* ARGSUSED */ +static void +plt_da_flipx_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *t = (XmToggleButtonCallbackStruct *) call; + Widget da_w = (Widget) client; + Widget daform_w = XtParent(da_w); + Display *dsp = XtDisplay(da_w); + Window win = XtWindow(da_w); + DrawInfo *di; + XExposeEvent ev; + Window root; + int x, y; + unsigned int nx, ny, bw, d; + + get_something (daform_w, XmNuserData, (XtArgVal)&di); + di->flipx = t->set; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + + ev.type = Expose; + ev.send_event = 1; /* gets set anyways */ + ev.display = dsp; + ev.window = win; + ev.x = ev.y = 0; + ev.width = nx; + ev.height = ny; + ev.count = 0; + + XSendEvent (dsp, win, /*propagate*/False, ExposureMask, (XEvent *)&ev); +} + +/* callback from the Flip Y toggle button within the drawing FormDiag itself. + * toggle the y bit in the parent's DrawInfo structure and fake an expose. + * client is the DrawingArea widget. + */ +/* ARGSUSED */ +static void +plt_da_flipy_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *t = (XmToggleButtonCallbackStruct *) call; + Widget da_w = (Widget) client; + Widget daform_w = XtParent(da_w); + Display *dsp = XtDisplay(da_w); + Window win = XtWindow(da_w); + DrawInfo *di; + XExposeEvent ev; + Window root; + int x, y; + unsigned int nx, ny, bw, d; + + get_something (daform_w, XmNuserData, (XtArgVal)&di); + di->flipy = t->set; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + + ev.type = Expose; + ev.send_event = 1; /* gets set anyways */ + ev.display = dsp; + ev.window = win; + ev.x = ev.y = 0; + ev.width = nx; + ev.height = ny; + ev.count = 0; + + XSendEvent (dsp, win, /*propagate*/False, ExposureMask, (XEvent *)&ev); +} + +/* callback from the grid toggle button within the drawing FormDiag itself. + * toggle the grid flag in the parent's DrawInfo structure and fake an expose. + * client is the DrawingArea widget. + */ +/* ARGSUSED */ +static void +plt_da_grid_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *t = (XmToggleButtonCallbackStruct *) call; + Widget da_w = (Widget) client; + Widget daform_w = XtParent(da_w); + Display *dsp = XtDisplay(da_w); + Window win = XtWindow(da_w); + DrawInfo *di; + XExposeEvent ev; + Window root; + int x, y; + unsigned int nx, ny, bw, d; + + get_something (daform_w, XmNuserData, (XtArgVal)&di); + di->grid = t->set; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + + ev.type = Expose; + ev.send_event = 1; /* gets set anyways */ + ev.display = dsp; + ev.window = win; + ev.x = ev.y = 0; + ev.width = nx; + ev.height = ny; + ev.count = 0; + + XSendEvent (dsp, win, /*propagate*/False, ExposureMask, (XEvent *)&ev); +} + +/* callback from the X-as-Year-is-date toggle button within the drawing FormDiag itself. + * toggle the xisdate flag in the parent's DrawInfo structure and fake an + * expose. client is the DrawingArea widget. + */ +/* ARGSUSED */ +static void +plt_da_xyr_asdate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *t = (XmToggleButtonCallbackStruct *) call; + Widget da_w = (Widget) client; + Widget daform_w = XtParent(da_w); + Display *dsp = XtDisplay(da_w); + Window win = XtWindow(da_w); + DrawInfo *di; + XExposeEvent ev; + Window root; + int x, y; + unsigned int nx, ny, bw, d; + + /* honor this, and toggle off the other if on */ + get_something (daform_w, XmNuserData, (XtArgVal)&di); + di->xyr_asdate = t->set; + if (!di->xyr_asdate && di->xjd_asdate) + return; /* we were toggled off */ + if (di->xyr_asdate && di->xjd_asdate) { + di->xjd_asdate = 0; + XmToggleButtonSetState (di->jas_w, False, True); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + + ev.type = Expose; + ev.send_event = 1; /* gets set anyways */ + ev.display = dsp; + ev.window = win; + ev.x = ev.y = 0; + ev.width = nx; + ev.height = ny; + ev.count = 0; + + XSendEvent (dsp, win, /*propagate*/False, ExposureMask, (XEvent *)&ev); +} + +/* callback from the X-as-JD-is-date toggle button within the drawing FormDiag itself. + * toggle the xisdate flag in the parent's DrawInfo structure and fake an + * expose. client is the DrawingArea widget. + */ +/* ARGSUSED */ +static void +plt_da_xjd_asdate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *t = (XmToggleButtonCallbackStruct *) call; + Widget da_w = (Widget) client; + Widget daform_w = XtParent(da_w); + Display *dsp = XtDisplay(da_w); + Window win = XtWindow(da_w); + DrawInfo *di; + XExposeEvent ev; + Window root; + int x, y; + unsigned int nx, ny, bw, d; + + /* honor this, and toggle off the other if on */ + get_something (daform_w, XmNuserData, (XtArgVal)&di); + di->xjd_asdate = t->set; + if (!di->xjd_asdate && di->xyr_asdate) + return; /* we were toggled off */ + if (di->xjd_asdate && di->xyr_asdate) { + di->xyr_asdate = 0; + XmToggleButtonSetState (di->yas_w, False, True); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + + ev.type = Expose; + ev.send_event = 1; /* gets set anyways */ + ev.display = dsp; + ev.window = win; + ev.x = ev.y = 0; + ev.width = nx; + ev.height = ny; + ev.count = 0; + + XSendEvent (dsp, win, /*propagate*/False, ExposureMask, (XEvent *)&ev); +} + +/* plot drawing area's expose callback. + * redraw the graph to the (new?) size. + * get a DrawInfo from our parent's userData. + */ +/* ARGSUSED */ +static void +plt_da_exp_cb (da_w, client, call) +Widget da_w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + + switch (c->reason) { + case XmCR_EXPOSE: { + XExposeEvent *e = &c->event->xexpose; + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity; + + /* turn off gravity so we get fresh exposes when grow and shrink. + * do it every time because this expose handler is used for all + * the windows -- yes, it is over kill but not worth remembering + * which windows have already been set. + */ + swa.bit_gravity = ForgetGravity; + XChangeWindowAttributes (e->display, e->window, mask, &swa); + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected da_w event. type=%d\n", c->reason); + abort(); + } + + /* draw the plot from scratch */ + plt_drawall (da_w); +} + +/* plot drawing area's motion handler. + * called when pointer moves over a plot. + * get a DrawInfo from our parent's userData. + * report data at that location + */ +static void +plt_da_motion_eh (da_w, client, ev, continue_to_dispatch) +Widget da_w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + Display *dsp = XtDisplay(da_w); + Window win = XtWindow(da_w); + Window root, child; + int rx, ry, wx, wy; + unsigned mask; + Widget daform_w; + DrawInfo *di; + + daform_w = XtParent(da_w); + get_something (daform_w, XmNuserData, (XtArgVal)&di); + + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &wx, &wy, &mask); + + plot_coords (da_w, di, wx, wy); +} + + +/* given a drawing area, draw the plot. + * remember: the parent of the da is the form and it's userData is the di info. + */ +static void +plt_drawall (da_w) +Widget da_w; +{ + Dimension w, h; + Widget daform_w; + DrawInfo *di; + + watch_cursor (1); + + get_something (da_w, XmNwidth, (XtArgVal)&w); + get_something (da_w, XmNheight, (XtArgVal)&h); + + daform_w = XtParent(da_w); + get_something (daform_w, XmNuserData, (XtArgVal)&di); + XClearWindow (XtDisplay(da_w), XtWindow(da_w)); + rewind (di->fp); + if (plot_cartesian (di, da_w, w, h) < 0) { + /* had trouble, so done with this FormDialog. + */ + xe_msg (0, "Error plotting `%s'", di->filename); + plt_da_destroy (da_w); + } + + /* user annotation */ + ano_draw (da_w, XtWindow(da_w), plt_ano, 0); + + watch_cursor (0); +} + +/* support simple pixel based annotation + */ +static int +plt_ano (double *sx, double *sy, int *xp, int *yp, int w2x, int arg) +{ + if (w2x) { + *xp = (int)*sx; + *yp = (int)*sy; + } else { + *sx = (double)*xp; + *sy = (double)*yp; + } + + return (1); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plotmenu.c,v $ $Date: 2012/12/30 17:01:02 $ $Revision: 1.38 $ $Name: $"}; diff --git a/GUI/xephem/preferences.c b/GUI/xephem/preferences.c new file mode 100644 index 0000000..5bdb4aa --- /dev/null +++ b/GUI/xephem/preferences.c @@ -0,0 +1,487 @@ +/* code to support the preferences facility. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + + +char prefcategory[] = "Main -- Preferences"; /* Save category */ + +/* info to build a preference control */ +typedef struct { + int prefname; /* one of Preferences enum */ + char *pdname; /* pulldown name */ + char *ctip; /* tip text for the main cascade pair */ + char *cblabel; /* cascade button label */ + char cbmne; /* cascade button mnemonic character */ + XtCallbackProc cb; /* callback function */ + int op1pref; /* option 1 PREF code */ + char *op1name; /* option 1 TB name */ + char op1mne; /* option 1 TB mnemonic character */ + char *op1tip; /* option 1 tip string */ + int op2pref; /* option 2 PREF code */ + char *op2name; /* option 2 TB name */ + char op2mne; /* option 2 TB mnemonic character */ + char *op2tip; /* option 2 tip string */ + int op3pref; /* option 3 PREF code */ + char *op3name; /* option 3 TB name */ + char op3mne; /* option 3 TB mnemonic character */ + char *op3tip; /* option 3 tip string */ +} PrefSet; + +static void pref_topogeo_cb (Widget w, XtPointer client, XtPointer call); +static void pref_date_cb (Widget w, XtPointer client, XtPointer call); +static void pref_units_cb (Widget w, XtPointer client, XtPointer call); +static void pref_tz_cb (Widget w, XtPointer client, XtPointer call); +static void pref_dpy_prec_cb (Widget w, XtPointer client, XtPointer call); +static void pref_msg_bell_cb (Widget w, XtPointer client, XtPointer call); +static void pref_prefill_cb (Widget w, XtPointer client, XtPointer call); +static void pref_tips_cb (Widget w, XtPointer client, XtPointer call); +static void pref_confirm_cb (Widget w, XtPointer client, XtPointer call); +static void pref_weekstart_cb (Widget w, XtPointer client, XtPointer call); +static void pref_build (Widget pd, PrefSet *p); + +static PrefSet prefsets[] = { + {PREF_EQUATORIAL, "Equatorial", + "Whether RA/Dec values are topocentric or geocentric", + "Equatorial", 'E', pref_topogeo_cb, + PREF_TOPO, "Topocentric", 'T', "local perspective", + PREF_GEO, "Geocentric", 'G', "Earth-centered perspective" + }, + + {PREF_DPYPREC, "Precision", + "Whether numeric values are shown with more or fewer significant digits", + "Precision", 'P', pref_dpy_prec_cb, + PREF_HIPREC, "Hi", 'H', "display full precision", + PREF_LOPREC, "Low", 'L', "use less room" + }, + + {PREF_MSG_BELL, "LogBell", + "Whether to beep when a message is added to the System log", + "Log Bell", 'M', pref_msg_bell_cb, + PREF_NOMSGBELL, "Off", 'f', "other people are busy", + PREF_MSGBELL, "On", 'O', "the beeps are useful" + }, + + {PREF_PRE_FILL, "PromptPreFill", + "Whether prompt dialogs are prefilled with their current value", + "Prompt Prefill", 'f', pref_prefill_cb, + PREF_NOPREFILL, "No", 'N', "fresh prompt each time", + PREF_PREFILL, "Yes", 'Y', "current value is often close" + }, + + {PREF_UNITS, "Units", + "Whether to use english or metric units", + "Units", 'U', pref_units_cb, + PREF_ENGLISH, "English", 'E', "Feet, Fahrenheit", + PREF_METRIC, "Metric", 'M', "Meters, Celsius" + }, + + {PREF_ZONE, "TZone", + "Whether time stamps and the calendar are in local time or UTC", + "Time zone", 'z', pref_tz_cb, + PREF_LOCALTZ, "Local", 'L', "as per TZ Offset", + PREF_UTCTZ, "UTC", 'U', "Coordinated Universal Time" + }, + + {PREF_TIPS, "Tips", + "Whether to display these little tip boxes!", + "Show help tips", 't', pref_tips_cb, + PREF_NOTIPS, "No", 'N', "they are in the way", + PREF_TIPSON, "Yes", 'Y', "they are faster than reading Help" + }, + + {PREF_CONFIRM, "Confirm", + "Whether to ask before performing irreversible actions", + "Confirmations", 'C', pref_confirm_cb, + PREF_NOCONFIRM, "No", 'N', "just do it", + PREF_CONFIRMON, "Yes", 'Y', "ask first" + }, + + {PREF_WEEKSTART, "WeekStart", + "First day of week in calendar", + "Start week on", 'w', pref_weekstart_cb, + PREF_SAT, "Saturday", 'a', "start each calendar week on Saturday", + PREF_SUN, "Sunday", 'u', "start each calendar week on Sunday", + PREF_MON, "Monday", 'M', "start each calendar week on Monday" + }, + + {PREF_DATE_FORMAT, "DateFormat", + "Format for displaying dates", + "Date format", 'D', pref_date_cb, + PREF_MDY, "M/D/Y", 'M', "Month / Day / Year", + PREF_YMD, "Y/M/D", 'Y', "Year / Month / Day", + PREF_DMY, "D/M/Y", 'D', "Day / Month / Year" + }, +}; + +/* record of preferences values */ +static int prefs[NPREFS]; + +/* Create "Preferences" PulldownMenu. + * use the given menu_bar widget as a base. + * this is called early when the main menu bar is being built.. + * initialize the prefs[] array from the initial state of the toggle buttons. + * also, tack on some Save and resource controls. + */ +void +pref_create_pulldown (menu_bar) +Widget menu_bar; +{ + Widget w, cb_w, pd; + Arg args[20]; + int i, n; + + /* make the pulldown */ + n = 0; + pd = XmCreatePulldownMenu (menu_bar, "Preferences", args, n); + + /* install the preferences */ + for (i = 0; i < XtNumber(prefsets); i++) + pref_build (pd, &prefsets[i]); + + /* glue the pulldown to the menubar with a cascade button */ + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd); n++; + XtSetArg (args[n], XmNmnemonic, 'P'); n++; + cb_w = XmCreateCascadeButton (menu_bar, "PreferencesCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Preferences"); + XtManageChild (cb_w); + wtip (cb_w, "Options effecting overall XEphem operation"); + + /* tack on some Save and other resource controls */ + + n = 0; + w = XmCreateSeparator (pd, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd, "Fonts", args, n); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)srf_manage, 0); + wtip (w, "Try different fonts"); + set_xmstring (w, XmNlabelString, "Fonts..."); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd, "Colors", args, n); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)src_manage, 0); + wtip (w, "Try different colors"); + set_xmstring (w, XmNlabelString, "Colors..."); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd, "Save", args, n); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)sr_manage, 0); + wtip (w, "Save settings to disk"); + set_xmstring (w, XmNlabelString, "Save..."); + XtManageChild (w); +} + +/* called anytime we want to know a preference. + */ +int +pref_get(pref) +Preferences pref; +{ + return (prefs[pref]); +} + +/* call to force a certain preference, return the old setting. + * Use this wisely.. it does *not* change the menu system. + */ +int +pref_set (pref, new) +Preferences pref; +int new; +{ + int prior = pref_get(pref); + prefs[pref] = new; + return (prior); +} + +/* return 1 if want to confirm, else 0 */ +int +confirm() +{ + return (pref_get (PREF_CONFIRM) == PREF_CONFIRMON); +} + +/* build one option off the given pulldown menu. + * for pairs, state of first fallback[] sets other; for triples must set all 3. + */ +static void +pref_build (pd, pp) +Widget pd; /* parent pulldown menu */ +PrefSet *pp; +{ + Widget pr, cb_w; + Widget tb1_w, tb2_w, tb3_w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNradioBehavior, True); n++; + pr = XmCreatePulldownMenu (pd, pp->pdname, args,n); + + /* option 1 */ + + n = 0; + XtSetArg (args[n], XmNmnemonic, pp->op1mne); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + tb1_w = XmCreateToggleButton (pr, pp->op1name, args, n); + XtAddCallback (tb1_w, XmNvalueChangedCallback, pp->cb, + (XtPointer)(long int)pp->op1pref); + wtip (tb1_w, pp->op1tip); + XtManageChild (tb1_w); + sr_reg (tb1_w, NULL, prefcategory, 1); + + /* option 2 */ + + n = 0; + XtSetArg (args[n], XmNmnemonic, pp->op2mne); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + tb2_w = XmCreateToggleButton (pr, pp->op2name, args, n); + XtAddCallback (tb2_w, XmNvalueChangedCallback, pp->cb, + (XtPointer)(long int)pp->op2pref); + wtip (tb2_w, pp->op2tip); + XtManageChild (tb2_w); + + /* and maybe option 3 .. key off tip */ + + if (pp->op3tip) { + + /* when have 3 must save all */ + sr_reg (tb2_w, NULL, prefcategory, 1); + + n = 0; + XtSetArg (args[n], XmNmnemonic, pp->op3mne); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + tb3_w = XmCreateToggleButton (pr, pp->op3name, args, n); + XtAddCallback (tb3_w, XmNvalueChangedCallback, pp->cb, + (XtPointer)(long int)pp->op3pref); + wtip (tb3_w, pp->op3tip); + XtManageChild (tb3_w); + sr_reg (tb3_w, NULL, prefcategory, 1); + + if (XmToggleButtonGetState(tb1_w)) { + prefs[pp->prefname] = pp->op1pref; + XmToggleButtonSetState (tb2_w, False, False); + XmToggleButtonSetState (tb3_w, False, False); + } else if (XmToggleButtonGetState(tb2_w)) { + prefs[pp->prefname] = pp->op2pref; + XmToggleButtonSetState (tb1_w, False, False); + XmToggleButtonSetState (tb3_w, False, False); + } else if (XmToggleButtonGetState(tb3_w)) { + prefs[pp->prefname] = pp->op3pref; + XmToggleButtonSetState (tb1_w, False, False); + XmToggleButtonSetState (tb2_w, False, False); + } else { + printf ("No default for %s preference\n", pp->pdname); + abort(); + } + + } else { + /* only option 1 is in fallback, set 2 from it */ + int t1 = XmToggleButtonGetState(tb1_w); + XmToggleButtonSetState (tb2_w, !t1, False); + prefs[pp->prefname] = t1 ? pp->op1pref : pp->op2pref; + } + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pr); n++; + XtSetArg (args[n], XmNmnemonic, pp->cbmne); n++; + cb_w = XmCreateCascadeButton (pd, "PrefCB", args, n); + XtManageChild (cb_w); + set_xmstring (cb_w, XmNlabelString, pp->cblabel); + wtip (cb_w, pp->ctip); +} + +/* called when a PREF_DATE_FORMAT preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_date_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_DATE_FORMAT] = (long int)client; + redraw_screen (1); + } +} + +/* called when a PREF_UNITS preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_units_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_UNITS] = (long int)client; + redraw_screen (1); + } +} + +/* called when a PREF_ZONE preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_tz_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_ZONE] = (long int)client; + redraw_screen (1); + } +} + +/* called when a PREF_DPYPREC preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_dpy_prec_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_DPYPREC] = (long int)client; + redraw_screen (1); + } +} + +/* called when a PREF_EQUATORIAL preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_topogeo_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_EQUATORIAL] = (long int)client; + redraw_screen (1); + } +} + +/* called when a PREF_MSG_BELL preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_msg_bell_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_MSG_BELL] = (long int)client; + } +} + +/* called when a PREF_PRE_FILL preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_prefill_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_PRE_FILL] = (long int)client; + } +} + +/* called when a PREF_TIPS preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_tips_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_TIPS] = (long int)client; + } +} + +/* called when a PREF_CONFIRM preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_confirm_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_CONFIRM] = (long int)client; + } +} + +/* called when a PREF_WEEKSTART preference changes. + * the new value is in client. + */ +/* ARGSUSED */ +static void +pref_weekstart_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *s = (XmToggleButtonCallbackStruct *)call; + + if (s->set) { + prefs[PREF_WEEKSTART] = (long int)client; + redraw_screen (1); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: preferences.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.20 $ $Name: $"}; diff --git a/GUI/xephem/progress.c b/GUI/xephem/progress.c new file mode 100644 index 0000000..c2653e9 --- /dev/null +++ b/GUI/xephem/progress.c @@ -0,0 +1,315 @@ +/* this is a simple progress meter facility. + * the graphics are easy; the harder part is using it well. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +extern char maincategory[]; + +static void pm_createshell (void); +static void pm_close_cb (Widget w, XtPointer client, XtPointer call); +static void pm_exp_cb (Widget w, XtPointer client, XtPointer call); +static void show_progress (int p, int force); +static void make_gc (void); + +static Widget pmshell_w; /* the main shell */ +static Widget pm_da; /* graphics drawing area */ +static Widget p_w; /* percentage label */ + +static unsigned long pm_fgpix; /* drawing meter foreground color */ +static unsigned long pm_bgpix; /* drawing meter background color */ +static int last_per = 100; /* last percentage drawn */ +static int cur_per; /* current percentage (for exp) */ +static long t0; /* initial time at this run */ +static int p0; /* initial percentage at this run */ +static GC pm_gc; /* GC */ +static int nup; /* up/down stack */ + +/* called to manage the progress meter */ +void +pm_manage() +{ + if (!pmshell_w) + pm_createshell(); + + if (!isUp(pmshell_w)) { + XtPopup (pmshell_w, XtGrabNone); + set_something (pmshell_w, XmNiconic, (XtArgVal)False); + nup = 1; + } +} + +/* insure the progress meter is visible */ +void +pm_up() +{ + if (!pmshell_w) + pm_createshell(); + + XtPopdown (pmshell_w); /* so Popup causes raise */ + XtPopup (pmshell_w, XtGrabNone); + set_something (pmshell_w, XmNiconic, (XtArgVal)False); + + nup++; +} + +/* pop an instance of the progress meter, and unmanage if goes to 0 */ +void +pm_down() +{ + if (!pmshell_w) + pm_createshell(); + + if (--nup <= 0) { + nup = 0; + XtPopdown (pmshell_w); + } +} + +/* set the given percentage on the progress meter. + */ +void +pm_set (p) +int p; +{ + if (!isUp(pmshell_w)) + return; + show_progress (p, 0); +} + +void +pm_cursor(c) +Cursor c; +{ + Window win; + + if (pmshell_w && (win = XtWindow(pmshell_w)) != 0) { + Display *dsp = XtDisplay(pmshell_w); + if (c) + XDefineCursor(dsp, win, c); + else + XUndefineCursor(dsp, win); + } +} + +/* create the progress meter dialog */ +static void +pm_createshell() +{ + Arg args[20]; + Widget pm_formw, fr_w, c_w; + int n; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Progress"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + XtSetArg (args[n], XmNheight, 105); n++; + XtSetArg (args[n], XmNwidth, 210); n++; + pmshell_w = XtCreatePopupShell ("Progress", topLevelShellWidgetClass, + toplevel_w, args,n); + setup_icon (pmshell_w); + set_something (pmshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (pmshell_w, "XEphem*Progress.x", maincategory, 0); + sr_reg (pmshell_w, "XEphem*Progress.y", maincategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + pm_formw = XmCreateForm (pmshell_w, "Progress", args,n); + XtManageChild (pm_formw); + + /* Close PB on the bottom */ + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + c_w = XmCreatePushButton (pm_formw, "Close", args, n); + XtAddCallback (c_w, XmNactivateCallback, pm_close_cb, NULL); + wtip (c_w, "Close this dialog"); + XtManageChild (c_w); + + /* the progress label */ + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, c_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + p_w = XmCreateLabel (pm_formw, "Progress", args, n); + wtip (p_w, "Percentage complete and time remaining"); + XtManageChild (p_w); + + /* the drawing area in a frame */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, p_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 5); n++; + fr_w = XmCreateFrame (pm_formw, "F", args, n); + XtManageChild (fr_w); + + n = 0; + XtSetArg (args[n], XmNheight, 20); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + pm_da = XmCreateDrawingArea (fr_w, "DA", args, n); + XtAddCallback (pm_da, XmNexposeCallback, pm_exp_cb, NULL); + wtip (pm_da, + "Progress bar moves left to right to show 0 .. 100% complete"); + XtManageChild (pm_da); +} + +/* called from the Close PB */ +/* ARGSUSED */ +static void +pm_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (pmshell_w); +} + +/* called when the drawing area gets an expose. + */ +/* ARGSUSED */ +static void +pm_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity; + + swa.bit_gravity = ForgetGravity; + XChangeWindowAttributes (e->display, e->window, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected progress event. type=%d\n", c->reason); + abort(); + } + + show_progress (cur_per, 1); +} + +/* display the given percentage numerically and graphically. + * do as little as possible if we aren't going to do any drawing. + * update cur_per and last_per when finished. + */ +static void +show_progress (p, force) +int p; +int force; +{ + int new = 0; + + if (!pm_gc) + make_gc(); + + /* be kind */ + if (p > 100) + p = 100; + if (p < 0) + p = 0; + + /* start when see a lower percentage */ + if (p < last_per) { + /* new run when new precentage is less than prev (or first time) */ + t0 = time(NULL); + p0 = p; + new = 1; + } + + /* draw if new, forced or changed */ + if (new || force || p != last_per) { + Window win = XtWindow(pm_da); + Dimension daw, dah; + int perw; + long t1 = time(NULL); + char buf[64]; + + /* in case before realized (managed??) */ + if (!win) + return; + + /* numerically */ + + if (p-p0 >= 5 && t1-t0 >= 5) { /* minimum before estimating */ + int dt = (100-p)*(t1 - t0)/(p - p0); + (void) sprintf (buf, "%3d%% %3d:%02d", p, dt/60, dt%60); + } else { + (void) sprintf (buf, "%d%%", p); + } + set_xmstring (p_w, XmNlabelString, buf); + + /* graphically */ + + get_something (pm_da, XmNwidth, (XtArgVal)&daw); + get_something (pm_da, XmNheight, (XtArgVal)&dah); + + perw = p*(int)daw/100; + + XSetForeground (XtD, pm_gc, pm_fgpix); + XFillRectangle (XtD, win, pm_gc, 0, 0, perw, (int)dah); + XSetForeground (XtD, pm_gc, pm_bgpix); + XFillRectangle (XtD, win, pm_gc, perw, 0, (int)daw-perw, (int)dah); + + XmUpdateDisplay (toplevel_w); + } + + /* update history */ + last_per = cur_per; + cur_per = p; +} + +/* make the pm_gc GC and extablish the pm_{f,b}gpix pixels. */ +static void +make_gc() +{ + pm_gc = XCreateGC (XtD, XtWindow(pm_da), 0L, NULL); + + get_something (pm_da, XmNforeground, (XtArgVal)&pm_fgpix); + get_something (pm_da, XmNbackground, (XtArgVal)&pm_bgpix); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: progress.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.17 $ $Name: $"}; diff --git a/GUI/xephem/ps.c b/GUI/xephem/ps.c new file mode 100644 index 0000000..68fe8e7 --- /dev/null +++ b/GUI/xephem/ps.c @@ -0,0 +1,2337 @@ +/* code to support a set of functions which are called like X functions but + * which may in fact be creating postscript. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__NUTC__) +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +typedef enum { + CLOSED=0, /* not in use */ + ASKING, /* in process of asking user where to save */ + OPEN, /* FILE * is open and ready for writing */ + XDRAWING /* xforms set up and ready for X coords */ +} XPSState; + +typedef struct { + XPSState state; /* what's happ'nin' */ + char *lcnum; /* LC_NUMERIC locale stack, while we use "C" */ + void (*go)(); /* user's function to call when ok to proceed */ + FILE *fp; /* file accumulating PS commands */ + + char *prfile; /* malloced name of lpr temp file */ + int wantpr; /* set to print (as opposed to save) */ + int wantcolor; /* set to print in color, else B&W */ + int wantA4; /* set to print A4, else letter size*/ + int wantThick; /* set to print thick lines, else thin */ + int overimg; /* hint to tweak colors over an image */ + int black; /* if !wantcolor, whether to force black ovlay*/ + int papercolor; /* "paper" color when in black mode */ + int papercolorset; /* papercolor is active */ + + Window win; /* window we are capturing */ + double scale; /* PS's points / X's pixels */ +} XPSContext; + +typedef struct { + Font fid; /* Font ID */ + char *psname; /* malloced name of PS font to use */ + int pixsz; /* height of font, in points */ +} PSFontInfo; + +/* here is the implied state behind most of the XPS* functions */ +static XPSContext xpsc; + +/* gray from color, ala Soc of Motion Picture and TV Engineers */ +#define SMPTE(xc) ((unsigned)(.33*xc.red + .5*xc.green + .17*xc.blue)) + +/* cache of info about associating a Font with its Postscript counterpart */ +static PSFontInfo *psfi; /* malloced array info about registered fonts */ +static int npsfi; /* number of entries malloced in fi */ + +static char printcategory[] = "Print"; /* Save category */ + +/* handy reference to xpsc.fp */ +#define FP xpsc.fp + +static Widget print_w; /* overall print setup shell */ +static Widget color_w; /* TB set when want to print in color */ +static Widget A4_w; /* TB set A4 size */ +static Widget thicklw_w; /* TB set thick lines */ +static Widget prtb_w; /* TB set when want to print */ +static Widget filename_w; /* text field holding file name */ +static Widget prcmd_w; /* text field holding print command */ +static Widget title_w; /* text field holding title */ + +static char deffont[] = "Helvetica"; /* default font */ + +static int XPSOpen (char *fn); +static void setLineStyle (Display *dsp, GC gc); +static void setColor (Display *dsp, GC gc); +static void doEllipse (int fill, Display *dsp, Drawable win, GC gc, + int x, int y, int a0, unsigned w, unsigned h, int a1, int a2); +static void doArc (XArc *xap, int fill); +static void doPoly (XPoint xp[], int nxp, int mode, int fill); +static void doRect (int x, int y, int w, int h, int fill); +static void doSegment (int x1, int y1, int x2, int y2); +static PSFontInfo * find_psfont (Font fid); +static void checkState (char *funcname, XPSState s); +static void printTime (int x, int y); + +static void create_print_w (void); +static void ok_cb (Widget w, XtPointer client, XtPointer call); +static void cancel_cb (Widget w, XtPointer client, XtPointer call); +static void help_cb (Widget w, XtPointer client, XtPointer call); +static void toggle_cb (Widget w, XtPointer client, XtPointer call); +static void saveas_confirm (void); +static void xpsc_close (void); +static void no_go (void); +static void call_go (void); +static void x_fill_circle (Display *dsp, Drawable win, GC gc, int x, int y, + int diam); +static void x_drawstar (Display *dsp, Drawable win, GC gc, int x, int y, int d); +static Pixel haloCache (Display *dsp, Pixel p); + +#define MYMIN(a,b) ((a) < (b) ? (a) : (b)) +#define MYMAX(a,b) ((a) > (b) ? (a) : (b)) + +/* ask user to save or print. if ok, call his go() after we've called XPSOpen() + */ +void +XPSAsk (apname, go) +char *apname; +void (*go)(); +{ + char buf[1024]; + + if (xpsc.state != CLOSED) { + xe_msg (1, "Only one print/save request may be active at a time."); + return; + } + + /* set up state */ + if (!go) { + printf ("XPSAsk: !go\n"); + abort(); + } + memset (&xpsc, 0, sizeof(xpsc)); + xpsc.go = go; + xpsc.state = ASKING; + xpsc.lcnum = setlocale (LC_NUMERIC, "C"); + + /* bring up print dialog -- call go() if user says Ok */ + if (!print_w) + create_print_w(); + (void) sprintf (buf, "xephem %s Print", apname); + set_something (print_w, XmNtitle, (XtArgVal)buf); + + XtPopup (print_w, XtGrabNone); + set_something (print_w, XmNiconic, (XtArgVal)False); +} + +/* return 1 if currently drawing in color, else 0 */ +int +XPSInColor() +{ + return (xpsc.state == XDRAWING && xpsc.wantcolor); +} + +/* return 1 if currently drawing, else 0 */ +int +XPSDrawing() +{ + return (xpsc.state == XDRAWING); +} + +/* set a color which "draws" as no ink. + * not the same as not drawing, since this will white-out stuff. + */ +void +XPSPaperColor (p) +unsigned long p; +{ + xpsc.papercolorset = 1; + xpsc.papercolor = p; +} + +/* given a string to draw in postscript, look it over for characters to be + * escaped. Return a malloced copy with any and all such characters escaped. + * N.B. caller should make a copy of the returned sttring before calling again. + */ +char * +XPSCleanStr (s, l) +char *s; +int l; +{ + static char *lasts; + int i, o; + + lasts = XtRealloc (lasts, l*2 + 1); /* worst case is each char escped */ + + for (i = o = 0; i < l; i++) { + char c = s[i]; + if (c == '(' || c == ')' || c == '\\') + lasts[o++] = '\\'; + lasts[o++] = c; + } + lasts[o] = '\0'; + + return (lasts); +} + +/* called to put up or remove the watch cursor. */ +void +XPS_cursor (c) +Cursor c; +{ + Window win; + + if (print_w && (win = XtWindow(print_w)) != 0) { + Display *dsp = XtDisplay(print_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* set up to convert subsequent X drawing calls to the given X window + * into Postscript and send to xpsc.fp. [Xx0,Yy0] is the X coordinates of the + * upper left corner of a window Xw pixels wide to be mapped to a rectangle Pw + * points wide whose upper left corner is at [Px0,Py0], also specified in + * points. This allows any X rectangle to me mapped into any Postscript + * rectangle, scaled but with the same aspect ratio. + * we also define some handy functions. + */ +void +XPSXBegin (win, Xx0, Xy0, Xw, Xh, Px0, Py0, Pw) +Window win; /* what window we are capturing */ +int Xx0, Xy0; /* ul origin of X rectangle */ +int Xw; /* width of X rectangle -- clipped if Xh > 0*/ +int Xh; /* height of X rectangle -- > 0 means to clip */ +int Px0, Py0; /* ul origin of Page rectangle */ +int Pw; /* width of Page rectangle */ +{ + checkState ("Begin", OPEN); + + /* remember target */ + xpsc.win = win; + + /* Postscript */ + fprintf (FP, "%%!PS-Adobe\n\n"); + + /* define function to set solid or nominal dashed line. + * By: C. P. Price + */ + fprintf (FP, "%% Define solid and dashed\n"); + fprintf (FP, "/dashed { [4 6] 0 setdash } def\n"); + fprintf (FP, "/solid { [] 0 setdash } def\n"); + fprintf (FP, "\n"); + + /* define function Spline to draw an array of points as splint */ + fprintf (FP, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); + fprintf (FP, "%% Spline to Bezier curve\n"); + fprintf (FP, "%% [x0 y0 x1 y1 x2 y2 ... ] Spline\n"); + fprintf (FP, "%% Chris Beecroft (chrisb@netcom.com)\n"); + fprintf (FP, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); + fprintf (FP, "\n"); + fprintf (FP, "/SplineDict 7 dict def\n"); + fprintf (FP, "\n"); + fprintf (FP, "SplineDict begin\n"); + fprintf (FP, "\n"); + fprintf (FP, "/CPointDict 8 dict def\n"); + fprintf (FP, "/ComputeCPDict 21 dict def\n"); + fprintf (FP, "\n"); + fprintf (FP, "%% Some constants\n"); + fprintf (FP, "/Tension 0.65 def %% 0 (loose) to 1 (tight)\n"); + fprintf (FP, "/SQR2 2 sqrt def\n"); + fprintf (FP, "/recipSQR2 1 SQR2 div def\n"); + fprintf (FP, "\n"); + fprintf (FP, "/CPoint %% calculate control bezier points\n"); + fprintf (FP, "{ %% stack: x y len1 len2 angle1 angle2 \n"); + fprintf (FP, " %% return: xa ya xb yb\n"); + fprintf (FP, "CPointDict begin\n"); + fprintf (FP, " /theta2 exch def\n"); + fprintf (FP, " /theta1 exch def\n"); + fprintf (FP, "\n"); + fprintf (FP, " /theta theta1 theta2 add 2 div def\n"); + fprintf (FP, "\n"); + fprintf (FP, " theta1 theta2 gt {\n"); + fprintf (FP, " /s theta theta2 sub sin def\n"); + fprintf (FP, " /theta1 theta 90 add def\n"); + fprintf (FP, " /theta2 theta 90 sub def\n"); + fprintf (FP, " } {\n"); + fprintf (FP, " /s theta2 theta sub sin def\n"); + fprintf (FP, " /theta1 theta 90 sub def\n"); + fprintf (FP, " /theta2 theta 90 add def\n"); + fprintf (FP, " } ifelse\n"); + fprintf (FP, "\n"); + fprintf (FP, " s recipSQR2 gt {\n"); + fprintf (FP, " /s SQR2 s sub def\n"); + fprintf (FP, " } if\n"); + fprintf (FP, "\n"); + fprintf (FP, " /s s 1 Tension sub mul def\n"); + fprintf (FP, "\n"); + fprintf (FP, " %% stack: x y len1 len2\n"); + fprintf (FP, "\n"); + fprintf (FP, " /len2 exch s mul def %% len2 = len2 * s\n"); + fprintf (FP, " /len1 exch s mul def %% len1 = len1 * s\n"); + fprintf (FP, "\n"); + fprintf (FP, " /y exch def\n"); + fprintf (FP, " /x exch def\n"); + fprintf (FP, "\n"); + fprintf (FP, " x len1 theta1 cos mul add %% x + len1 * cos(theta1)\n"); + fprintf (FP, " y len1 theta1 sin mul sub %% y - len1 * sin(theta1)\n"); + fprintf (FP, " x len2 theta2 cos mul add %% x + len2 * cos(theta2)\n"); + fprintf (FP, " y len2 theta2 sin mul sub %% y - len2 * sin(theta2)\n"); + fprintf (FP, "end\n"); + fprintf (FP, "} def\n"); + fprintf (FP, "\n"); + fprintf (FP, "\n"); + fprintf (FP, "/ComputeCP %% spline through points\n"); + fprintf (FP, "{ %% stack: [ x0 y0 x1 y1 x2 y2 .... ]\n"); + fprintf (FP, " %% return: nothing %% spline path added to current path\n"); + fprintf (FP, "ComputeCPDict begin\n"); + fprintf (FP, " /SplinePoints exch def\n"); + fprintf (FP, " /elems SplinePoints length def\n"); + fprintf (FP, "\n"); + fprintf (FP, " /x1 SplinePoints 0 get def\n"); + fprintf (FP, " /y1 SplinePoints 1 get def\n"); + fprintf (FP, " /x2 SplinePoints 2 get def\n"); + fprintf (FP, " /y2 SplinePoints 3 get def\n"); + fprintf (FP, " /x3 SplinePoints 4 get def\n"); + fprintf (FP, " /y3 SplinePoints 5 get def\n"); + fprintf (FP, "\n"); + fprintf (FP, " /dx x1 x2 sub def\n"); + fprintf (FP, " /dy y2 y1 sub def\n"); + fprintf (FP, " /len1 dx dx mul dy dy mul add sqrt def\n"); + fprintf (FP, " len1 0.0 eq {\n"); + fprintf (FP, " /theta1 0.0 def\n"); + fprintf (FP, " } {\n"); + fprintf (FP, " /theta1 dy dx atan def\n"); + fprintf (FP, " theta1 0 lt {\n"); + fprintf (FP, " /theta1 theta1 360 add def\n"); + fprintf (FP, " } if\n"); + fprintf (FP, " } ifelse\n"); + fprintf (FP, "\n"); + fprintf (FP, " /dx x3 x2 sub def\n"); + fprintf (FP, " /dy y2 y3 sub def\n"); + fprintf (FP, " /len2 dx dx mul dy dy mul add sqrt def\n"); + fprintf (FP, " len2 0.0 eq {\n"); + fprintf (FP, " /theta2 0.0 def\n"); + fprintf (FP, " } {\n"); + fprintf (FP, " /theta2 dy dx atan def\n"); + fprintf (FP, " theta2 0 lt {\n"); + fprintf (FP, " /theta2 theta2 360 add def\n"); + fprintf (FP, " } if\n"); + fprintf (FP, " } ifelse\n"); + fprintf (FP, "\n"); + fprintf (FP, " %% compute and store the left and right control points\n"); + fprintf (FP, " x2 y2 len1 len2 theta1 theta2 CPoint\n"); + fprintf (FP, " /yright exch def\n"); + fprintf (FP, " /xright exch def\n"); + fprintf (FP, " /yleft exch def\n"); + fprintf (FP, " /xleft exch def\n"); + fprintf (FP, "\n"); + fprintf (FP, " x1 y1 moveto\n"); + fprintf (FP, "\n"); + fprintf (FP, " x1 3 xleft mul add 4 div\n"); + fprintf (FP, " y1 3 yleft mul add 4 div\n"); + fprintf (FP, " xleft 3 mul x2 add 4 div\n"); + fprintf (FP, " yleft 3 mul y2 add 4 div\n"); + fprintf (FP, " x2 y2 curveto\n"); + fprintf (FP, "\n"); + fprintf (FP, " /xsave xright def\n"); + fprintf (FP, " /ysave yright def\n"); + fprintf (FP, " \n"); + fprintf (FP, " 6 2 elems 1 sub {\n"); + fprintf (FP, " /index exch def\n"); + fprintf (FP, "\n"); + fprintf (FP, " /x2 x3 def\n"); + fprintf (FP, " /y2 y3 def\n"); + fprintf (FP, " /len1 len2 def\n"); + fprintf (FP, "\n"); + fprintf (FP, " theta2 180 ge {\n"); + fprintf (FP, " /theta1 theta2 180 sub def\n"); + fprintf (FP, " } {\n"); + fprintf (FP, " /theta1 theta2 180 add def\n"); + fprintf (FP, " } ifelse\n"); + fprintf (FP, "\n"); + fprintf (FP, " /x3 SplinePoints index get def\n"); + fprintf (FP, " /y3 SplinePoints index 1 add get def\n"); + fprintf (FP, "\n"); + fprintf (FP, " /dx x3 x2 sub def\n"); + fprintf (FP, " /dy y2 y3 sub def\n"); + fprintf (FP, " /len2 dx dx mul dy dy mul add sqrt def\n"); + fprintf (FP, " len2 0.0 eq {\n"); + fprintf (FP, " /theta2 0.0 def\n"); + fprintf (FP, " } {\n"); + fprintf (FP, " /theta2 dy dx atan def\n"); + fprintf (FP, " theta2 0 lt {\n"); + fprintf (FP, " /theta2 theta2 360 add def\n"); + fprintf (FP, " } if\n"); + fprintf (FP, " } ifelse\n"); + fprintf (FP, "\n"); + fprintf (FP, " x2 y2 len1 len2 theta1 theta2 CPoint\n"); + fprintf (FP, " /yright exch def\n"); + fprintf (FP, " /xright exch def\n"); + fprintf (FP, " /yleft exch def\n"); + fprintf (FP, " /xleft exch def\n"); + fprintf (FP, "\n"); + fprintf (FP, " xsave ysave xleft yleft x2 y2 curveto\n"); + fprintf (FP, " /xsave xright def\n"); + fprintf (FP, " /ysave yright def\n"); + fprintf (FP, " } for\n"); + fprintf (FP, "\n"); + fprintf (FP, " xright 3 mul x2 add 4 div\n"); + fprintf (FP, " yright 3 mul y2 add 4 div\n"); + fprintf (FP, " xright 3 mul x3 add 4 div\n"); + fprintf (FP, " yright 3 mul y3 add 4 div\n"); + fprintf (FP, " x3 y3 curveto\n"); + fprintf (FP, "end\n"); + fprintf (FP, "} def\n"); + fprintf (FP, "\n"); + fprintf (FP, "end\n"); + fprintf (FP, "\n"); + fprintf (FP, "\n"); + fprintf (FP, "/Spline\n"); + fprintf (FP, "{\n"); + fprintf (FP, " SplineDict begin ComputeCP end\n"); + fprintf (FP, "} def\n"); + + /* function to draw rotated ellipes -- thanks Chris! */ + fprintf (FP, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); + fprintf (FP, "%% General Rotated ellipses.\n"); + fprintf (FP, "%% x y a0 xrad yrad a1 a2 ellipse\n"); + fprintf (FP, "%% N.B. xrad and yrad must be != 0 \n"); + fprintf (FP, "%% Chris Beecroft (chrisb@netcom.com)\n"); + fprintf (FP, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); + fprintf (FP, "/ellipsedict 9 dict def\n"); + fprintf (FP, "ellipsedict /mtrx matrix put\n"); + fprintf (FP, "/ellipse\n"); + fprintf (FP, " { ellipsedict begin\n"); + fprintf (FP, " /endangle exch def\n"); + fprintf (FP, " /startangle exch def\n"); + fprintf (FP, " /yrad exch def\n"); + fprintf (FP, " /xrad exch def\n"); + fprintf (FP, " /rotation exch def\n"); + fprintf (FP, " /y exch def\n"); + fprintf (FP, " /x exch def\n"); + fprintf (FP, "\n"); + fprintf (FP, " /savematrix mtrx currentmatrix def\n"); + fprintf (FP, " x y translate\n"); + fprintf (FP, " rotation rotate\n"); + fprintf (FP, " xrad yrad scale\n"); + fprintf (FP, "\n"); + fprintf (FP, " %% convert angle/radius (radius=1) to x,y\n"); + fprintf (FP, " %% divide in x,y scaling and convert back to polar.\n"); + fprintf (FP, " %% subtract a bit off endangle to force 360 sin\n"); + fprintf (FP, " %% to be a small negative number so atan results in\n"); + fprintf (FP, " %% a degree of 360 rather than 0. If startangle is 0\n"); + fprintf (FP, " %% then a surprise appears and no ellipse is drawn.\n"); + fprintf (FP, "\n"); + fprintf (FP, " /endangle endangle 0.001 sub sin yrad div endangle cos xrad div atan def\n"); + fprintf (FP, " /startangle startangle sin yrad div startangle cos xrad div atan def\n"); + fprintf (FP, "\n"); + fprintf (FP, " 0 0 1 startangle endangle arc\n"); + fprintf (FP, " savematrix setmatrix\n"); + fprintf (FP, " end\n"); + fprintf (FP, " } def\n"); + + /* define function lstr to place and show a l-justifed string */ + fprintf (FP, "%% Define l-justified string: (..) x y lstr\n"); + fprintf (FP, "/lstr { newpath moveto show } def\n"); + fprintf (FP, "\n"); + + /* define function rstr to place and show a r-justifed string */ + fprintf (FP, "%% Define r-justified string: (..) x y rstr\n"); + fprintf (FP, "/rstr { newpath moveto\n"); + fprintf (FP, " dup %% make copies for stringwidth and show\n"); + fprintf (FP, " stringwidth %% yields X and Y size\n"); + fprintf (FP, " pop %% don't need Y\n"); + fprintf (FP, " neg 0 rmoveto %% move back\n"); + fprintf (FP, " show %% show the string\n"); + fprintf (FP, "} def\n"); + fprintf (FP, "\n"); + + /* define function cstr to place and show a centered string */ + fprintf (FP, "%% Define centered string: (..) x y cstr\n"); + fprintf (FP, "/cstr { newpath moveto\n"); + fprintf (FP, " dup %% make copies for stringwidth and show\n"); + fprintf (FP, " stringwidth %% yields X and Y size\n"); + fprintf (FP, " pop %% don't need Y\n"); + fprintf (FP, " 2 div neg 0 rmoveto %% move back halfway\n"); + fprintf (FP, " show %% show the string\n"); + fprintf (FP, "} def\n"); + fprintf (FP, "\n"); + + /* define function strsz to return width and height of a string */ + fprintf (FP, "%% Define string size: (..) strsz w h\n"); + fprintf (FP, "/strsz {\n"); + fprintf (FP, " gsave\n"); + fprintf (FP, " newpath 0 0 moveto true charpath pathbbox\n"); + fprintf (FP, " 4 2 roll pop pop\n"); + fprintf (FP, " grestore\n"); + fprintf (FP, "} def\n"); + fprintf (FP, "\n"); + + /* all the users of this module assume they are drawing on 8.5x11" + * letter size paper with 1" margins all around. By setting an + * initial transformation matrix, we can change to anything desired, + * such as A4 paper with 15mm margins. Along the way I decided to + * change the letter margins to .75". Easy. I love postscript. + */ + if (xpsc.wantA4) { + fprintf (FP, "%% change 8.5x11@1\" margin to A4@15mm margin\n"); + fprintf (FP, "306 396 translate\n"); + fprintf (FP, "1.0902 1.0902 scale\n"); + fprintf (FP, "-314 -375 translate\n"); + } else { + fprintf (FP, "%% change vertical margin from 1 to 3/4\"\n"); + fprintf (FP, "306 396 translate\n"); + fprintf (FP, "1.0556 1.0556 scale\n"); + fprintf (FP, "-306 -396 translate\n"); + } + fprintf (FP, "\n"); + + /* set up for possibly-clipped X Windows coord system, assuming + * 8.5x11" letter format with 1" margins + */ + xpsc.scale = (double)Pw/(double)Xw; + fprintf (FP, "%% Set up to use %sX Windows coord system.\n", + Xh > 0 ? "clipped " : ""); + fprintf (FP,"%% [%d,%d] maps to [%d,%d], scaled by %g and Y-flipped.\n", + Xx0, Xy0, Px0, Py0, xpsc.scale); + fprintf (FP, "gsave\n"); + fprintf (FP, "%g setlinewidth\n", xpsc.wantThick ? 0.5 : 0.0); + fprintf (FP, "%g %g translate\n", Px0 - xpsc.scale*Xx0, + Py0 + xpsc.scale*Xy0); + fprintf (FP, "%g %g scale\n", xpsc.scale, -xpsc.scale); + if (Xh > 0) { + fprintf (FP, "newpath\n"); + fprintf (FP, + " %d %d moveto %d 0 rlineto 0 %d rlineto %d 0 rlineto closepath\n", + Xx0, Xy0, Xw, Xh, -Xw); + fprintf (FP, "clip\n"); + } + fprintf (FP, "\n"); + + /* enable state */ + xpsc.state = XDRAWING; + + /* init a little cache to reduce using XQueryColor every time */ + pixCache (NULL); +} + +/* return the postscript coord system back to the original. + * this prepares for additional direct entries or closing down. + */ +void +XPSXEnd() +{ + checkState ("End", XDRAWING); + + /* back to native PS coord system */ + fprintf (FP, "\n"); + fprintf (FP, "%% Restore native PS coord system.\n"); + fprintf (FP, "grestore\n"); + + /* set a font to use */ + fprintf (FP, "\n"); + fprintf (FP, "%% Set up a font to use for remaining text.\n"); + fprintf (FP, "/%s findfont %d scalefont setfont\n",deffont,ANNOT_PTSZ); + + xpsc.state = OPEN; +} + +/* add a raw PS string to the file. + */ +void +XPSDirect (s) +char *s; +{ + checkState ("Direct", OPEN); + + fprintf (FP, "%s", s); +} + +/* finish up with any boiler plate, close the file and reset xpsc */ +void +XPSClose() +{ + char *title; + + checkState ("Close", OPEN); + + /* write the title at the top, if any */ + title = XmTextFieldGetString (title_w); + if ((int)strlen (title) > 0) { + fprintf (FP, "\n"); + fprintf (FP, "%% Title\n"); + fprintf (FP, "(%s) 306 %d cstr\n", title, 720 + ANNOT_PTSZ + 10); + } + XtFree (title); + + /* add some closing boiler plate */ + fprintf (FP, "\n"); + fprintf (FP, "%% Boiler plate:\n"); + fprintf (FP, "newpath 234 %d moveto 144 0 rlineto stroke\n", AROWY(4)); + fprintf (FP, "(Created by XEphem Version %s %s) 306 %d cstr\n", + PATCHLEVEL, PATCHDATE, AROWY(3)); + fprintf (FP, "(%s) 306 %d cstr\n", COPYRIGHT, AROWY(2)); + fprintf (FP, "(%s) 306 %d cstr\n", "http://www.xephem.com", AROWY(1)); + printTime (306, AROWY(0)); + + /* file is complete */ + fprintf (FP, "\n%% All finished\nshowpage\n"); + fclose (FP); + FP = NULL; + + /* if we are really trying to print, start the print command and + * remove the temp file. + */ + if (xpsc.wantpr) { + char buf[1024]; + char *cmd; + + cmd = XmTextFieldGetString (prcmd_w); + (void) sprintf (buf, "%s '%s'", cmd, xpsc.prfile); + XtFree (cmd); + + xe_msg (0, "Print command:\n%s", buf); + if (system (buf)) + xe_msg (1, "Error running print command:\n%s", buf); + +#if defined(__STDC__) || defined(VMS) + (void) remove (xpsc.prfile); +#else + (void) unlink (xpsc.prfile); +#endif + } + + xpsc_close(); +} + +/* draw a rotated ellipse. + * easy for postscript, not so for X. + * all angles are 64ths degree, 0 is 3oclock, positive ccw (all like in X). + */ +void +XPSDrawEllipse (dsp, win, gc, x, y, a0, w, h, a1, a2) +Display *dsp; +Drawable win; +GC gc; +int x, y; /* bounding box upper left corner */ +int a0; /* axis rotation */ +unsigned w, h; /* bounding box width, height */ +int a1, a2; /* initial angle, additional extent */ +{ + doEllipse (0, dsp, win, gc, x, y, a0, w, h, a1, a2); +} + +/* fill a rotated ellipse. + * easy for postscript, not so for X. + * all angles are 64ths degree, 0 is 3oclock, positive ccw (all like in X). + */ +void +XPSFillEllipse (dsp, win, gc, x, y, a0, w, h, a1, a2) +Display *dsp; +Drawable win; +GC gc; +int x, y; /* bounding box upper left corner */ +int a0; /* axis rotation */ +unsigned w, h; /* bounding box width, height */ +int a1, a2; /* initial angle, additional extent */ +{ + doEllipse (1, dsp, win, gc, x, y, a0, w, h, a1, a2); +} + +/* the following functions always perform their associated X Windows + * function, then might also draw to the xpsc state if it matches the win. + */ +void +XPSDrawArc (dsp, win, gc, x, y, w, h, a1, a2) +Display *dsp; +Drawable win; +GC gc; +int x, y; +unsigned w, h; +int a1, a2; +{ + XArc xa; + + XDrawArc (dsp, win, gc, x, y, w, h, a1, a2); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + xa.x = x; + xa.y = y; + xa.width = w; + xa.height = h; + xa.angle1 = a1; + xa.angle2 = a2; + setColor (dsp, gc); + setLineStyle (dsp, gc); + doArc (&xa, 0); +} + +void +XPSDrawArcs (dsp, win, gc, xa, nxa) +Display *dsp; +Drawable win; +GC gc; +XArc xa[]; +int nxa; +{ + int i; + + XDrawArcs (dsp, win, gc, xa, nxa); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + for (i = 0; i < nxa; i++) + doArc (&xa[i], 0); +} + +void +XPSDrawLine (dsp, win, gc, x1, y1, x2, y2) +Display *dsp; +Drawable win; +GC gc; +int x1, y1; +int x2, y2; +{ + XDrawLine (dsp, win, gc, x1, y1, x2, y2); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + fprintf (FP, "newpath"); + doSegment (x1, y1, x2, y2); + fprintf (FP, "stroke\n"); +} + +void +XPSDrawLines (dsp, win, gc, xp, nxp, mode) +Display *dsp; +Drawable win; +GC gc; +XPoint xp[]; +int nxp; +int mode; +{ + XDrawLines (dsp, win, gc, xp, nxp, mode); + if (xpsc.state != XDRAWING || xpsc.win != win || nxp < 2) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + doPoly (xp, nxp, mode, 0); +} + +void +XPSDrawPoint (dsp, win, gc, x, y) +Display *dsp; +Drawable win; +GC gc; +int x, y; +{ + XArc xa; + XDrawPoint (dsp, win, gc, x, y); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + xa.x = x; + xa.y = y; + xa.width = 1; + xa.height = 1; + xa.angle1 = 0; + xa.angle2 = 360*64; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + doArc (&xa, 1); +} + +void +XPSDrawPoints (dsp, win, gc, xp, nxp, mode) +Display *dsp; +Drawable win; +GC gc; +XPoint xp[]; +int nxp; +int mode; +{ + int i; + + XDrawPoints (dsp, win, gc, xp, nxp, mode); + if (xpsc.state != XDRAWING || xpsc.win != win || nxp == 0) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + for (i = 0; i < nxp; i++) { + XArc xa; + + xa.x = xp[i].x; + xa.y = xp[i].y; + xa.width = 1; + xa.height = 1; + xa.angle1 = 0; + xa.angle2 = 360*64; + doArc (&xa, 1); + } +} + +void +XPSDrawRectangle (dsp, win, gc, x, y, w, h) +Display *dsp; +Drawable win; +GC gc; +int x, y; +unsigned w, h; +{ + XDrawRectangle (dsp, win, gc, x, y, w, h); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + doRect (x, y, w+1, h+1, 0); /* X'S DrawRect is one bigger than asked */ +} + +void +XPSDrawRectangles (dsp, win, gc, xra, nxr) +Display *dsp; +Drawable win; +GC gc; +XRectangle xra[]; +int nxr; +{ + XRectangle *lastxra; + + XDrawRectangles (dsp, win, gc, xra, nxr); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + for (lastxra = xra+nxr; xra < lastxra; xra++) + doRect (xra->x, xra->y, xra->width+1, xra->height+1, 0); +} + +void +XPSDrawSegments (dsp, win, gc, xs, nxs) +Display *dsp; +Drawable win; +GC gc; +XSegment xs[]; +int nxs; +{ + int i; + + XDrawSegments (dsp, win, gc, xs, nxs); + if (xpsc.state != XDRAWING || xpsc.win != win || nxs == 0) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + fprintf (FP, "newpath"); + for (i = 0; i < nxs; i++) { + if (!(i & 1)) + fprintf (FP, "\n "); + doSegment (xs[i].x1, xs[i].y1, xs[i].x2, xs[i].y2); + } + fprintf (FP, "\nstroke\n"); + +} + +/* draw using the font from gc which matches a previously Registered PS font. + */ +void +XPSDrawString (dsp, win, gc, x, y, s, l) +Display *dsp; +Drawable win; +GC gc; +int x, y; +char *s; +int l; +{ + unsigned long gcm; + XGCValues gcv; + PSFontInfo *fi; + + XDrawString (dsp, win, gc, x, y, s, l); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + /* find gc's postscript font in preregistered list */ + gcm = GCFont; + XGetGCValues (dsp, gc, gcm, &gcv); + fi = find_psfont (gcv.font); + if (!fi) + return; + + /* load desired font and take care not to scale the text */ + fprintf (FP, "newpath %d %d moveto gsave\n", x, y); + setColor (dsp, gc); + setLineStyle (dsp, gc); + fprintf (FP, " %g %g scale /%s findfont %g scalefont setfont\n", + 1.0/xpsc.scale, -1.0/xpsc.scale, fi->psname, fi->pixsz*xpsc.scale); + + /* show the string -- beware a few special characters */ + fprintf (FP, " (%s)\n", XPSCleanStr(s,l)); + fprintf (FP, "show grestore\n"); +} + +/* draw a rotated string. + * align tells where [x,y] is with respect to the string then angle tells + * degrees ccw to rotate about x,y. + * mag is factor of how much larger than basic fs to draw. + */ +void +XPSRotDrawAlignedString (dsp, fs, angle, mag, win, gc, x, y, str, align) +Display *dsp; +XFontStruct *fs; +double angle; +double mag; +Drawable win; +GC gc; +int x, y; +char *str; +int align; +{ + PSFontInfo *fi; + char *clean; + + XRotSetMagnification (mag); + XRotDrawAlignedString (dsp, fs, angle, win, gc, x, y, str, align); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + /* find fs's postscript font in preregistered list */ + fi = find_psfont (fs->fid); + if (!fi) + return; + + clean = XPSCleanStr(str, strlen(str)); + + fprintf (FP, "newpath %d %d moveto gsave\n", x, y); + setColor (dsp, gc); + setLineStyle (dsp, gc); + fprintf (FP, " %g %g scale /%s findfont %g scalefont setfont\n", + 1.0/xpsc.scale, -1.0/xpsc.scale, + fi->psname, fi->pixsz*xpsc.scale*mag); + + /* [x,y] is the location of the `align' position of the string and + * is the location about which we are to appear to rotate. Since PS + * always rotates about the lower left corner of string we need to + * move the corner to where it will be after the rotation, then let + * PS rotate from there. Remember PS +Y is up. + */ + switch (align) { + case MLEFT: + fprintf (FP, " (%s) dup strsz\n", clean); + fprintf (FP, " exch pop 2 div dup %g sin mul\n", angle); + fprintf (FP, " exch %g cos mul neg rmoveto\n", angle); + break; + + case MRIGHT: + fprintf (FP, " (%s) dup strsz\n", clean); + fprintf (FP, " 2 div dup %g sin mul 2 index %g cos mul sub\n", + angle, angle); + fprintf (FP, " 3 1 roll %g cos mul exch %g sin mul add neg\n", + angle, angle); + fprintf (FP, " rmoveto\n"); + break; + + case BLEFT: + fprintf (FP, " (%s)\n", clean); + break; + + case BCENTRE: + fprintf (FP, " (%s) dup strsz\n", clean); + fprintf (FP, " pop 2 div dup %g cos mul neg\n", angle); + fprintf (FP, " exch %g sin mul neg rmoveto\n", angle); + break; + + case TLEFT: + fprintf (FP, " (%s) dup strsz\n", clean); + fprintf (FP, " exch pop dup %g sin mul\n", angle); + fprintf (FP, " exch %g cos mul neg rmoveto\n", angle); + break; + + case TCENTRE: + fprintf (FP, " (%s) dup strsz\n", clean); + fprintf (FP, " dup dup mul 3 2 roll 2 div dup dup mul\n"); + fprintf (FP, " exch 4 1 roll add sqrt 3 1 roll atan\n"); + fprintf (FP, " %g sub dup cos exch sin\n", angle); + fprintf (FP, " 3 2 roll dup 4 1 roll mul neg 3 1 roll mul neg\n"); + fprintf (FP, " rmoveto\n"); + break; + + default: + printf ("XPSRot: unsupported align: %d\n", align); + abort(); + } + + fprintf (FP, "%g rotate show grestore\n", angle); +} + +/* like XPSFillArc if filling a complete circle but tries to antialias. + */ +void +XPSDrawStar (dsp, win, gc, x, y, d) +Display *dsp; +Drawable win; +GC gc; +int x, y; +int d; +{ + XArc xa; + + x_drawstar (dsp, win, gc, x, y, d); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + xa.x = x; + xa.y = y; + xa.width = d; + xa.height = d; + xa.angle1 = 0; + xa.angle2 = 360*64; + setColor (dsp, gc); + setLineStyle (dsp, gc); + doArc (&xa, 1); +} + +void +XPSFillArc (dsp, win, gc, x, y, w, h, a1, a2) +Display *dsp; +Drawable win; +GC gc; +int x, y; +unsigned w, h; +int a1, a2; +{ + XArc xa; + + if (w == h && a2 == 360*64) + x_fill_circle (dsp, win, gc, x, y, w); + else + XFillArc (dsp, win, gc, x, y, w, h, a1, a2); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + xa.x = x; + xa.y = y; + xa.width = w; + xa.height = h; + xa.angle1 = a1; + xa.angle2 = a2; + setColor (dsp, gc); + setLineStyle (dsp, gc); + doArc (&xa, 1); +} + +void +XPSFillArcs (dsp, win, gc, xap, na) +Display *dsp; +Drawable win; +GC gc; +XArc *xap; +int na; +{ + XArc *ap, *lastap; + + /* sorry to break this up.. */ + for (ap = xap, lastap = ap+na; ap < lastap; ap++) { + if (ap->width == ap->height && ap->angle2 == 360*64) + x_fill_circle (dsp, win, gc, ap->x, ap->y, ap->width); + else + XFillArc (dsp, win, gc, ap->x, ap->y, ap->width, ap->height, + ap->angle1, ap->angle2); + } + + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + for (ap = xap, lastap = ap+na; ap < lastap; ap++) + doArc (ap, 1); +} + +void +XPSFillPolygon (dsp, win, gc, xp, nxp, shape, mode) +Display *dsp; +Drawable win; +GC gc; +XPoint xp[]; +int nxp; +int shape; +int mode; +{ + XFillPolygon (dsp, win, gc, xp, nxp, shape, mode); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + + fprintf (FP, "gsave "); + if (xpsc.wantcolor) + setColor (dsp, gc); + else + fprintf (FP, "0.5 setgray\n"); + setLineStyle (dsp, gc); + doPoly (xp, nxp, mode, 1); + fprintf (FP, "grestore\n"); +} + + +void +XPSFillRectangle (dsp, win, gc, x, y, w, h) +Display *dsp; +Drawable win; +GC gc; +int x, y; +unsigned w, h; +{ + XFillRectangle (dsp, win, gc, x, y, w, h); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + doRect (x, y, w, h, 1); +} + +void +XPSFillRectangles (dsp, win, gc, xra, nxr) +Display *dsp; +Drawable win; +GC gc; +XRectangle xra[]; +int nxr; +{ + XRectangle *lastxra; + + XFillRectangles (dsp, win, gc, xra, nxr); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + setColor (dsp, gc); + setLineStyle (dsp, gc); + for (lastxra = xra+nxr; xra < lastxra; xra++) + doRect (xra->x, xra->y, xra->width, xra->height, 1); +} +/* print the given pixmap of size widxhei using colormap cm. + * if bggc, print white for any pixel matching the bggc. + * if black, force all overlay to be black when not in color. + */ +void +XPSPixmap (pm, wid, hei, cm, bggc, black) +Pixmap pm; /* pixmap to print */ +unsigned int wid, hei; /* pixmap size */ +Colormap cm; /* pixels in pm are with respect to this colormap */ +GC bggc; /* background pixel to not draw, or 0 */ +int black; /* all drawing to be in black if !wantcolor */ +{ + Display *dsp = XtDisplay(toplevel_w); + Pixel white = WhitePixel (dsp, DefaultScreen (dsp)); + XImage *xim; + Window rootwin; + unsigned int b, d; + unsigned bgpix = 0; + XColor xc; + int x, y; + int n; + + + if (xpsc.state != XDRAWING) + return; + + /* get the bg pixel to avoid, if any */ + if (bggc) { + XGCValues gcv; + XGetGCValues (dsp, bggc, (unsigned long)GCForeground, &gcv); + bgpix = gcv.foreground; + } + + xpsc.overimg = 1; + xpsc.black = black; + + /* suck out the pixels as an image */ + XGetGeometry (dsp, pm, &rootwin, &x, &y, &wid, &hei, &b, &d); + xim = XGetImage (dsp, pm, 0, 0, wid, hei, ~0, ZPixmap); + if (!xim) { + xe_msg (1, "Can not create image for printing"); + return; + } + + /* set up postscript */ + fprintf (FP, "gsave /imgw %d def /imgh %d def\n", wid, hei); + fprintf (FP, " %d %d translate\n", 0, 0); + fprintf (FP, " imgw imgh scale\n"); + fprintf (FP, " imgw imgh 8 [imgw 0 0 imgh neg 0 imgh]\n"); + fprintf (FP, " { currentfile imgw string readhexstring pop }"); + + /* if color use 8 bits per pixel, RGB format, else 8 bit gray */ + if (xpsc.wantcolor) + fprintf (FP, " false 3 colorimage\n"); + else + fprintf (FP, " image\n"); + + /* postscript draws bottom-to-top so draw bottom up */ + n = 0; + for (y = hei-1; y >= 0; --y) { + for (x = 0; x < (int)wid; x++) { + xc.pixel = XGetPixel (xim, x, y); + if (bggc && xc.pixel == bgpix) + xc.pixel = white; + pixCache (&xc); + if (xpsc.wantcolor) { + fprintf (FP, "%02x%02x%02x", xc.red>>8, xc.green>>8, + xc.blue>>8); + if (((++n)%12) == 0) + fprintf (FP, "\n"); + } else { + fprintf (FP, "%02x", SMPTE(xc)>>8); + if (((++n)%36) == 0) + fprintf (FP, "\n"); + } + } + } + + fprintf (FP, "\ngrestore\n"); + + /* done */ + free ((void *)xim->data); + xim->data = NULL; + XDestroyImage (xim); +} + +/* RGB -> HSV, all [0..1) */ +void +toHSV (double r, double g, double b, double *hp, double *sp, double *vp) +{ + double min, max, diff; + double h, s, v; + + max = MYMAX (MYMAX (r, g), b); + min = MYMIN (MYMIN (r, g), b); + diff = max - min; + v = max; + s = max != 0 ? diff/max : 0; + if (s == 0) + h = 0; + else { + double rc = (max - r)/diff; + double gc = (max - g)/diff; + double bc = (max - b)/diff; + if (r == max) + h = bc - gc; + else if (g == max) + h = 2 + rc - bc; + else + h = 4 + gc - rc; + if (h < 0) + h += 6; + h /= 6; + } + + *hp = h; + *sp = s; + *vp = v; +} + +/* HSV -> RGB, all [0..1) */ +void +toRGB (double h, double s, double v, double *rp, double *gp, double *bp) +{ + double r, g, b; + double f, p, q, t; + int i; + + if (v == 0) + r = g = b = 0.0; + else if (s == 0) + r = g = b = v; + else { + h *= 6; + i = (int)floor(h); + f = h - i; + p = v * (1.0 - s); + q = v * (1.0 - s * f); + t = v * (1.0 - s * (1.0 - f)); + + switch (i) { + default: /* FALLTHRU */ + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + case 5: r = v; g = p; b = q; break; + } + } + + *rp = r; + *gp = g; + *bp = b; +} + +/* check gc's LineStyle and emit "solid" or "dashed" macro. + * also set line width. + * TODO: check dash details. + */ +static void +setLineStyle (dsp, gc) +Display *dsp; +GC gc; +{ + XGCValues gcv; + unsigned long gcm; + double lw; + + gcm = GCLineStyle | GCLineWidth; + XGetGCValues (dsp, gc, gcm, &gcv); + fprintf (FP, "%s ", gcv.line_style == LineSolid ? "solid" : "dashed"); + lw = gcv.line_width + (xpsc.wantThick ? 0.5 : 0.0); + fprintf (FP, "%g setlinewidth ", lw); +} + +/* set postscript value for FG color in gc. */ +static void +setColor (dsp, gc) +Display *dsp; +GC gc; +{ + XGCValues gcv; + XColor xc; + + XGetGCValues (dsp, gc, (unsigned long) GCForeground, &gcv); + xc.pixel = gcv.foreground; + + if (xpsc.papercolorset && xc.pixel == xpsc.papercolor) { + fprintf (FP, "1 setgray\n"); /* draw as "paper" */ + } else if (xpsc.wantcolor) { + double r, g, b; + pixCache (&xc); + r = (double)xc.red/65535.0; + g = (double)xc.green/65535.0; + b = (double)xc.blue/65535.0; + if (!xpsc.overimg) { + /* enrich colors when drawing on white paper */ + double h, s, v; + toHSV (r, g, b, &h, &s, &v); + s = sqrt(s); + v = .5*sqrt(v); + toRGB (h, s, v, &r, &g, &b); + } + fprintf (FP, "%g %g %g setrgbcolor\n", r, g, b); + } else if (!xpsc.overimg || xpsc.black) { + fprintf (FP, "0 setgray\n"); /* draw black */ + } else { + pixCache (&xc); + fprintf (FP, "%g setgray\n", SMPTE(xc)/65535.0); + } +} + +/* XFill and XDraw arc. same goofyness with whether it includes outter edge. + */ +static void +doArc (xap, fill) +XArc *xap; +int fill; +{ + int x = xap->x; + int y = xap->y; + int w = xap->width; + int h = xap->height; + + /* seems ellipse can't handle the thin cases */ + if (w == 0 && h == 0) + return; + if (w == 0 || h == 0) + doSegment (x, y, x+w, y+h); + else { + double hp = (w&1) ? 0 : 0.5; /* add half pixel for even widths */ + fprintf (FP, "newpath %g %g 0 %g %g %g %g ellipse %s\n", + x+(w-fill)/2.0+hp, y+(h-fill)/2.0+hp, w/2.0, h/2.0, + 360-(xap->angle1 + xap->angle2)/64.0, + 360-xap->angle1/64.0, + fill ? "fill" : "stroke"); + } +} + +/* draw or fill a rotated ellipse. + * easy for postscript, not so for X. + * all angles are 64ths degree, 0 is 3oclock, positive ccw (all like in X). + */ +static void +doEllipse (fill, dsp, win, gc, x, y, a0, w, h, a1, a2) +int fill; +Display *dsp; +Drawable win; +GC gc; +int x, y; /* bounding box upper left corner */ +int a0; /* axis rotation */ +unsigned w, h; /* bounding box width, height */ +int a1, a2; /* initial angle, additional extent */ +{ +#define MAXEPTS 50 /* n points to draw a full ellipse */ +#ifndef PI +#define PI 3.14159 +#endif + double ca0 = cos(a0/64.0*PI/180.0); + double sa0 = sin(a0/64.0*PI/180.0); + double a = (double)w/2.0; /* semi-major axis */ + double b = (double)h/2.0; /* semi-minor axis */ + XPoint xpt[MAXEPTS]; + int nxpt, maxpt; + int i; + + /* find number of points to draw an extent of a2 */ + if (a2 == 0) + return; + if (a2 > 360*64) + a2 = 360*64; + else if (a2 < -360*64) + a2 = -360*64; + maxpt = a2*MAXEPTS/(360*64); + if (maxpt < 0) + maxpt = -maxpt; + + /* compute each point, from a1 through a1+a2 */ + for (nxpt = i = 0; i < maxpt; i++) { + XPoint *xptp = &xpt[nxpt]; + double theta = PI/180.0*(a1 + i*a2/(maxpt-1))/64.0; + double ex = a*cos(theta); + double ey = -b*sin(theta); + double xp = ex*ca0 + ey*sa0; + double yp = -ex*sa0 + ey*ca0; + xptp->x = (short)floor(xp + x + a + 0.5); + xptp->y = (short)floor(yp + y + b + 0.5); + if (nxpt == 0 || (xptp[-1].x != xptp->x || xptp[-1].y != xptp->y)) + nxpt++; + } + if (fill) + XFillPolygon (dsp, win, gc, xpt, nxpt, Convex, CoordModeOrigin); + else + XDrawLines (dsp, win, gc, xpt, nxpt, CoordModeOrigin); + if (xpsc.state != XDRAWING || xpsc.win != win) + return; + + /* ellipse can't handle the thin cases */ + setColor (dsp, gc); + setLineStyle (dsp, gc); + if ((int)w == 0 || (int)h == 0) + doSegment (x, y, x+(int)w, y+(int)h); + else { + fprintf (FP, "newpath %g %g %g %g %g %g %g ellipse ", x + a, + y + b, -a0/64.0, a, b, 360-(a1 + a2)/64.0, 360-a1/64.0); + fprintf (FP, "%s\n", fill ? "fill" : "stroke"); + } +} + +static void +doPoly (xp, nxp, mode, fill) +XPoint xp[]; +int nxp; +int mode; +int fill; +{ + int i; + + if (nxp < 1) + return; + + if (nxp < 3 || mode == CoordModePrevious) { + char *lt = mode == CoordModeOrigin ? "lineto" : "rlineto"; + + fprintf (FP, "newpath %d %d moveto\n", xp[0].x, xp[0].y); + for (i = 1; i < nxp; i++) + fprintf (FP, " %d %d %s\n", xp[i].x, xp[i].y, lt); + fprintf (FP, "%s\n", fill ? "fill" : "stroke"); + } else if (nxp < 8) { + /* not enough points for a sensible spline */ + fprintf (FP, "newpath %d %d moveto", xp[0].x, xp[0].y); + for (i = 1; i < nxp; i++) + fprintf (FP, " %d %d lineto", xp[i].x, xp[i].y); + fprintf (FP, " %s\n", fill ? "fill" : "stroke"); + } else { + /* Spline requires at least 3 absolute points */ + fprintf (FP, "newpath\n ["); + for (i = 0; i < nxp; i++) + fprintf (FP, " %d %d ", xp[i].x, xp[i].y); + fprintf (FP, "]\nSpline %s\n", fill ? "fill" : "stroke"); + } +} + +static void +doRect (x, y, w, h, fill) +int x, y, w, h; +int fill; +{ + fprintf (FP, "newpath %d %d moveto %d %d lineto %d %d lineto\n", + x, y, x+w, y, x+w, y+h); + fprintf (FP, "%d %d lineto %d %d lineto", x, y+h, x, y); + fprintf (FP, " %s\n", fill ? "fill" : "stroke"); +} + +/* draw a line from [x1,y1] to [x2,y2] */ +static void +doSegment (x1, y1, x2, y2) +int x1, y1, x2, y2; +{ + fprintf (FP, " %4d %4d moveto %4d %4d lineto ", x1, y1, x2, y2); +} + +/* ARGSUSED */ +static int IgnoreXError(disp, event) +Display *disp; +XErrorEvent *event; +{ + return (0); +} + +/* find the postscipt info for fid, creating new one if necessary. + * xe_msg() why and return NULL if trouble. + */ +static PSFontInfo * +find_psfont (fid) +Font fid; +{ +#define PSDEFFAM 4 /* psmaps[] when no match found */ +#define PSDEFSIZ 12 /* default pixel size */ +#define XAT(a) XInternAtom(dsp,a,1) /* handy */ + typedef struct { + char *famkey; /* lowercase FONT family key string */ + char *psfam; /* ps family */ + char *pslight; /* ps light suffix, if any */ + char *psbold; /* ps bold suffix, if any */ + char *psital; /* ps italic suffix, if any */ + } PSMap; + static PSMap psmaps[] = { + {"avantgarde", "AvantGarde", "Book", "Demi", "Oblique"}, + {"bookman", "Bookman", "Light", "Demi", "Italic"}, + {"century", "NewCenturySchlbk", 0, "Bold", "Italic"}, + {"lucidatypewriter", "Courier", 0, "Bold", "Oblique"}, + {"courier", "Courier", 0, "Bold", "Oblique"}, + {"helvetica", "Helvetica", 0, "Bold", "Oblique"}, + {"palatino", "Palatino", 0, "Bold", "Italic"}, + {"symbol", "Symbol", 0, 0, 0}, + {"times", "Times", 0, "Bold", "Italic"}, + }; + Display *dsp = XtDisplay(toplevel_w); + int (*oldhandler)(); + int bold, ital; + char *fam; + char psname[64]; + PSFontInfo *fi; + XFontStruct *fsp; + PSMap *psm; + unsigned long card32; + int pixsz; + int i; + + /* see if already have info */ + for (i = 0; i < npsfi; i++) + if (fid == psfi[i].fid) + return (&psfi[i]); + + /* get font descriptor so we can get font properties */ + oldhandler = XSetErrorHandler (IgnoreXError); + fsp = XQueryFont (dsp, fid); + if (!fsp) { + xe_msg (1, "No font info!"); + XSetErrorHandler (oldhandler); + return (NULL); + } + + /* get string containing family and whether bold and italic */ + if (XGetFontProperty (fsp, XAT("FONT"), &card32)) { + /* get all from xlfd if available */ + char *xlfd = XGetAtomName (dsp, card32); + strtolower (xlfd); + fam = XtNewString (xlfd); + bold = strstr (xlfd, "bold") || strstr (xlfd, "demi"); + ital = strstr (xlfd, "-o-") || strstr (xlfd, "-i-"); + XFree (xlfd); + } else { + /* find family, or default */ + if (XGetFontProperty (fsp, XAT("FAMILY_NAME"), &card32)) { + char *fn = XGetAtomName (dsp, card32); + fam = XtNewString (fn); + strtolower (fam); + XFree (fn); + } else { + fam = XtNewString (psmaps[PSDEFFAM].famkey); + } + + /* decide whether bold */ + if (XGetFontProperty (fsp, XAT("WEIGHT_NAME"), &card32)) { + char *wt = XGetAtomName (dsp, card32); + strtolower (wt); + bold = strstr (wt, "bold") || strstr (wt, "demi"); + XFree (wt); + } else + bold = 0; + + /* decide whether italic */ + if (XGetFontProperty (fsp, XAT("SLANT"), &card32)) { + char *sl = XGetAtomName (dsp, card32); + strtolower (sl); + ital = strstr (sl, "o") || strstr (sl, "i"); + XFree (sl); + } else if (XGetFontProperty (fsp, XAT("ITALIC_ANGLE"), &card32)) { + ital = card32 != 90*64; + } else + ital = 0; + } + + /* find psmaps[] that matches family, or use default */ + for (i = 0; i < XtNumber(psmaps); i++) + if (strstr (fam, psmaps[i].famkey)) + break; + if (i == XtNumber(psmaps)) + i = PSDEFFAM; + psm = &psmaps[i]; + + /* assemble ps name */ + strcpy (psname, psm->psfam); + if (bold) { + if (psm->psbold) { + strcat (psname, "-"); + strcat (psname, psm->psbold); + } + } else { + if (psm->pslight) { + strcat (psname, "-"); + strcat (psname, psm->pslight); + } + } + if (ital) { + if (psm->psital) { + if (!strchr (psname, '-')) + strcat (psname, "-"); + strcat (psname, psm->psital); + } + } + + /* get pixel size */ + if (XGetFontProperty (fsp, XAT("PIXEL_SIZE"), &card32)) + pixsz = card32; + else if(XGetFontProperty(fsp,XAT("POINT_SIZE"),&card32)) { + unsigned long res; + if (XGetFontProperty(fsp, XAT("RESOLUTION"), &res)) + pixsz = card32*res/72/10; + else + pixsz = PSDEFSIZ; + } else + pixsz = PSDEFSIZ; + + /* TODO: how to free memory but retain fid? + XFreeFont (dsp, fsp); + */ + + /* add to psfi[] cache */ + psfi = (PSFontInfo*)XtRealloc((void*)psfi,(npsfi+1)*sizeof(PSFontInfo)); + fi = &psfi[npsfi++]; + fi->psname = XtNewString (psname); + fi->pixsz = pixsz; + fi->fid = fid; + + /* done */ + XSetErrorHandler (oldhandler); + XtFree (fam); + return (fi); +} + +static void +checkState (funcname, s) +char *funcname; +XPSState s; +{ + if (xpsc.state != s) { + printf ("XPS%s(): state is %d but expected %d\n", + funcname, (int)xpsc.state, (int)s); + abort(); + } +} + +static void +printTime (x, y) +int x, y; +{ + char *ct; + int ctl; + +#if defined(__STDC__) + struct tm *tmp; + time_t t; + + (void) time (&t); + tmp = gmtime (&t); + if (tmp) { + static char mons[12][4] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; + static char days[7][4] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + char buf[128]; + + (void) sprintf (buf, "%s %s %2d %02d:%02d:%02d %d", + days[tmp->tm_wday], mons[tmp->tm_mon], tmp->tm_mday, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec, tmp->tm_year+1900); + fprintf (FP, "(Generated %s UTC) %d %d cstr\n", buf , x, y); + return; + } +#else + long t; + + time (&t); +#endif + + /* use local time if not standard C or no gmtime() */ + ct = ctime (&t); + ctl = strlen (ct)-1; /* chop trailing '\n' */ + + fprintf (FP, "(Generated %.*s Local Time) %d %d cstr\n", ctl, ct, x, y); +} + +/* prepare the named file for writing postscript into. + * return 0 if ok, else report why with xe_msg(), reset xpsc and return -1. + */ +static int +XPSOpen (fn) +char *fn; +{ + checkState ("Open", ASKING); + + xpsc.fp = fopend (fn, NULL, "w"); + if (!xpsc.fp) { + xpsc_close(); + return (-1); + } + + xpsc.state = OPEN; + + return (0); +} + +/* create the print dialog */ +static void +create_print_w() +{ + Widget w; + Widget f_w, rc_w; + Widget thinlw_w, letter_w, bandw_w, filetb_w; + Widget rb_w; + Arg args[20]; + int n; + + /* create the form dialog -- title gets set later */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Print"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + print_w = XtCreatePopupShell ("Print", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (print_w); + set_something (print_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (print_w, "XEphem*Print.x", printcategory, 0); + sr_reg (print_w, "XEphem*Print.y", printcategory, 0); + + /* make a rowcolumn for stuff */ + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + rc_w = XmCreateRowColumn (print_w, "VRC", args, n); + XtAddCallback (rc_w, XmNhelpCallback, help_cb, 0); + XtManageChild (rc_w); + + /* make a prompt for the title */ + + n = 0; + w = XmCreateLabel (rc_w, "TitleL", args, n); + set_xmstring (w, XmNlabelString, "Title:"); + XtManageChild (w); + + n = 0; + title_w = XmCreateTextField (rc_w, "Title", args, n); + wtip (title_w, "Enter desired text to appear across top of print file"); + XtManageChild (title_w); + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep0", args, n); + XtManageChild (w); + + /* form for two side-by-side radio boxes */ + + n = 0; + f_w = XmCreateForm (rc_w, "PF", args, n); + XtManageChild (f_w); + + /* make the color/B&W radio box */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + rb_w = XmCreateRadioBox (f_w, "CGRB", args, n); + XtManageChild (rb_w); + + n = 0; + color_w = XmCreateToggleButton (rb_w, "Color", args, n); + set_xmstring (color_w, XmNlabelString, " Color"); + wtip (color_w, "When on, attempt to print in full color"); + XtManageChild (color_w); + sr_reg (color_w, NULL, printcategory, 1); + + n = 0; + bandw_w = XmCreateToggleButton (rb_w, "BW", args, n); + set_xmstring (bandw_w, XmNlabelString, " Black"); + wtip (bandw_w, "When on, print in black only (no color)"); + XtManageChild (bandw_w); + + /* color inits both */ + XmToggleButtonSetState(bandw_w, + !XmToggleButtonGetState(color_w), False); + + /* make the letter/A4 radio box */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + rb_w = XmCreateRadioBox (f_w, "PSZ", args, n); + XtManageChild (rb_w); + + n = 0; + letter_w = XmCreateToggleButton (rb_w, "Letter", args, n); + set_xmstring (letter_w, XmNlabelString, " Letter"); + wtip (letter_w, "Set size for US Letter (8½x11 inch) paper"); + XtManageChild (letter_w); + + n = 0; + A4_w = XmCreateToggleButton (rb_w, "A4", args, n); + set_xmstring (A4_w, XmNlabelString, " A4"); + wtip (A4_w, "Set size for A4 (210x297 mm) paper"); + XtManageChild (A4_w); + sr_reg (A4_w, NULL, printcategory, 1); + + /* A4 inits both */ + XmToggleButtonSetState(letter_w, + !XmToggleButtonGetState(A4_w), False); + + /* make the line width radio box */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + rb_w = XmCreateRadioBox (f_w, "LWSZ", args, n); + XtManageChild (rb_w); + + n = 0; + thinlw_w = XmCreateToggleButton (rb_w, "Thin", args, n); + set_xmstring (thinlw_w, XmNlabelString, " Thin lines"); + wtip (thinlw_w, "Use thin lines"); + XtManageChild (thinlw_w); + + n = 0; + thicklw_w = XmCreateToggleButton (rb_w, "Thick", args, n); + set_xmstring (thicklw_w, XmNlabelString, " Thick lines"); + wtip (thicklw_w, "Use thick lines"); + XtManageChild (thicklw_w); + sr_reg (thicklw_w, NULL, printcategory, 1); + + /* thick inits both */ + XmToggleButtonSetState(thinlw_w, + !XmToggleButtonGetState(thicklw_w), False); + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep1", args, n); + XtManageChild (w); + + /* make the fake "to file" toggle button and filename text field */ + + n = 0; + f_w = XmCreateForm (rc_w, "FileF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + filetb_w = XmCreateToggleButton (f_w, "Save", args, n); + set_xmstring (filetb_w, XmNlabelString, " Save to file: "); + wtip(filetb_w,"When on, plot will be saved to file named at right"); + XtManageChild (filetb_w); + sr_reg (filetb_w, NULL, printcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, filetb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + filename_w = XmCreateTextField (f_w, "Filename", args, n); + defaultTextFN (filename_w, 1, "xephem.ps", NULL); + wtip (filename_w, "Name of postscript file to create"); + XtManageChild (filename_w); + sr_reg (filename_w, NULL, printcategory, 1); + + /* make the fake "print" toggle button and print command text field */ + + n = 0; + f_w = XmCreateForm (rc_w, "PrintF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + prtb_w = XmCreateToggleButton (f_w, "Print", args, n); + set_xmstring (prtb_w, XmNlabelString, " Print command:"); + wtip (prtb_w, "When set, send postscript directly to printer using command at right"); + XtManageChild (prtb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, prtb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + prcmd_w = XmCreateTextField (f_w, "PrintCmd", args, n); + wtip (prcmd_w, "Command which will print a postscript file given name of file as first and only argument"); + XtManageChild (prcmd_w); + sr_reg (prcmd_w, NULL, printcategory, 1); + + /* connect them together so they work like a radio box */ + + XtAddCallback (filetb_w, XmNvalueChangedCallback, toggle_cb, + (XtPointer)prtb_w); + XtAddCallback (prtb_w, XmNvalueChangedCallback, toggle_cb, + (XtPointer)filetb_w); + + /* value of Save sets both */ + XmToggleButtonSetState(prtb_w, !XmToggleButtonGetState(filetb_w),False); + + /* add another separator */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep2", args, n); + XtManageChild (w); + + /* add the command buttons across the bottom */ + + n = 0; + XtSetArg (args[n], XmNfractionBase, 10); n++; + f_w = XmCreateForm (rc_w, "CmdF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton (f_w, "Ok", args, n); + XtAddCallback (w, XmNactivateCallback, ok_cb, 0); + wtip (w, "Commence printing and close this dialog"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + w = XmCreatePushButton (f_w, "Cancel", args, n); + XtAddCallback (w, XmNactivateCallback, cancel_cb, 0); + wtip (w, "Close this dialog and do nothing"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 7); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, help_cb, 0); + wtip (w, "Additional information"); + XtManageChild (w); +} + +/* called by either of the Save or Print togle buttons to enforce their + * radio behavior. client is the opposite Widget. + */ +static void +/* ARGSUSED */ +toggle_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState(w)) { + Widget otherw = (Widget)client; + XmToggleButtonSetState (otherw, False, False); + } else + XmToggleButtonSetState (w, True, False); /* just like a RB :-) */ +} + +/* called to reset the pending print query sequence */ +static void +no_go() +{ + checkState ("no_go", ASKING); + xpsc_close(); +} + +/* called when the Ok button is hit in the print dialog */ +/* ARGSUSED */ +static void +ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + xpsc.wantcolor = XmToggleButtonGetState (color_w); + xpsc.wantA4 = XmToggleButtonGetState (A4_w); + xpsc.wantThick = XmToggleButtonGetState (thicklw_w); + xpsc.wantpr = XmToggleButtonGetState (prtb_w); + + if (xpsc.wantpr) { + /* print */ + char name[2048]; + + tempfilename (name, "xepr", ".ps"); +#if defined(__NUTC__) + xpsc.prfile = XtMalloc (PATH_MAX+1); + _NutPathToWin32 (name, xpsc.prfile, 1); +#else + xpsc.prfile = XtNewString (name); +#endif + if (XPSOpen (xpsc.prfile) == 0) + call_go(); + + } else { + /* save to file -- ask whether to clobber if it already exits */ + char *name = XmTextFieldGetString (filename_w); + + if (existd (name,NULL) == 0 && confirm()) { + char buf[1024]; + (void) sprintf (buf, "%s exists:\nOk to Overwrite?", name); + query (print_w, buf, "Yes -- Overwrite", "No -- Cancel", + NULL, saveas_confirm, no_go, NULL); + } else + saveas_confirm(); + + XtFree (name); + } + + XtPopdown (print_w); +} + +/* called by Cancel */ +/* ARGSUSED */ +static void +cancel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + no_go(); + XtPopdown (print_w); +} + +/* called by Help */ +/* ARGSUSED */ +static void +help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Select Color or Grayscale;", +"Select Letter or A4 size;", +"Select to save to file (and give filename) or print (and give command);", +"Then press Ok.", +}; + + hlp_dialog ("Print", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* called when we have confirmed it's ok to clobber an existing save file */ +static void +saveas_confirm() +{ + char *name = XmTextFieldGetString (filename_w); + if (XPSOpen (name) == 0) + call_go(); + XtFree (name); +} + + +/* finished with xpsc */ +static void +xpsc_close() +{ + if (xpsc.fp) + fclose (xpsc.fp); + + if (xpsc.prfile) + XtFree (xpsc.prfile); + + if (xpsc.lcnum) + setlocale (LC_NUMERIC, xpsc.lcnum); + + memset (&xpsc, 0, sizeof(xpsc)); + +} + +/* called when it's confirmed to try and print or save */ +/* ARGSUSED */ +static void +call_go () +{ + /* call the user's function */ + if (xpsc.go) + (*xpsc.go) (); + else { + printf ("call_go() but no (*go)(). state = %d\n", (int)xpsc.state); + abort(); + } + + /* clean up if the user forgot */ + switch (xpsc.state) { + case CLOSED: + break; + case ASKING: + printf ("call_go() state = %d\n", (int)xpsc.state); + abort(); + break; /* :-) */ + case OPEN: + XPSClose (); + break; + case XDRAWING: + XPSXEnd(); + XPSClose(); + break; + } +} + +/* fill a circle with upper left bounding box at [x,y] with diameter diam. + * use custom bitmaps because many X servers get it poorly. + */ +static void +x_fill_circle (dsp, win, gc, x, y, diam) +Display *dsp; +Drawable win; +GC gc; +int x, y; +int diam; +{ + static unsigned char star2_bits[] = { + 0x03, 0x03}; + static unsigned char star3_bits[] = { + 0x07, 0x07, 0x07}; + static unsigned char star4_bits[] = { + 0x06, 0x0f, 0x0f, 0x06}; + static unsigned char star5_bits[] = { + 0x0e, 0x1f, 0x1f, 0x1f, 0x0e}; + static unsigned char star6_bits[] = { + 0x1e, 0x3f, 0x3f, 0x3f, 0x3f, 0x1e}; + static unsigned char star7_bits[] = { + 0x1c, 0x3e, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c}; + static unsigned char star8_bits[] = { + 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c}; + static unsigned char star9_bits[] = { + 0x38, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xff, 0x01, 0xff, 0x01, 0xff, + 0x01, 0xfe, 0x00, 0xfe, 0x00, 0x38, 0x00}; + static unsigned char star10_bits[] = { + 0x78, 0x00, 0xfe, 0x01, 0xfe, 0x01, 0xff, 0x03, 0xff, 0x03, 0xff, + 0x03, 0xff, 0x03, 0xfe, 0x01, 0xfe, 0x01, 0x78, 0x00}; + static unsigned char star11_bits[] = { + 0xf8, 0x00, 0xfe, 0x03, 0xfe, 0x03, 0xff, 0x07, 0xff, 0x07, 0xff, + 0x07, 0xff, 0x07, 0xff, 0x07, 0xfe, 0x03, 0xfe, 0x03, 0xf8, 0x00}; + static unsigned char star12_bits[] = { + 0xf0, 0x00, 0xfe, 0x07, 0xfe, 0x07, 0xfe, 0x07, 0xff, 0x0f, 0xff, + 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xfe, 0x07, 0xfe, 0x07, 0xfe, 0x07, + 0xf0, 0x00}; + static unsigned char *star_bits[] = { + NULL, + NULL, + star2_bits, + star3_bits, + star4_bits, + star5_bits, + star6_bits, + star7_bits, + star8_bits, + star9_bits, + star10_bits, + star11_bits, + star12_bits, + }; + static Pixmap pms[XtNumber(star_bits)]; + + /* build the pixmaps the first time through */ + if (!pms[2]) { + int i; + for (i = 0; i < XtNumber(pms); i++) + if (star_bits[i]) + pms[i] = XCreateBitmapFromData (dsp, win, + (char *)(star_bits[i]), i, i); + } + + /* see whether the special cases apply */ + if (diam < 1) + return; + if (diam < 2) { + XDrawPoint (dsp, win, gc, x, y); + return; + } + if (diam >= XtNumber(pms)) { + XFillArc (dsp, win, gc, x, y, diam, diam, 0, 360*64); + return; + } + + /* draw smaller dots with the bitmaps */ + XSetClipMask (dsp, gc, pms[diam]); + XSetClipOrigin (dsp, gc, x, y); + XFillRectangle (dsp, win, gc, x, y, diam, diam); + XSetClipMask (dsp, gc, None); /* TODO: probably should put back old */ +} + +/* fill a star with upper left bounding box at [x,y] with diameter diam. + * try to simulate antialiasing. + */ +static void +x_drawstar (dsp, win, gc, x, y, diam) +Display *dsp; +Drawable win; +GC gc; +int x, y; +int diam; +{ + static GC gc1; + XGCValues gcv; + Pixel hp; + + /* skip if invisible */ + if (diam <= 0) + return; + + /* build helper GC first time */ + if (!gc1) + gc1 = XCreateGC (dsp, win, 0L, NULL); + + /* 1 and 2 are single pixels */ + if (diam == 1) { + XDrawPoint (dsp, win, gc, x, y); /* already dimmed */ + return; + } + if (diam == 2) { + XDrawPoint (dsp, win, gc, x+1, y+1); + return; + } + + /* halo is dimmed version of main color */ + XGetGCValues (dsp, gc, (unsigned long) GCForeground, &gcv); + hp = haloCache (dsp, gcv.foreground); + XSetForeground (dsp, gc1, hp); + + /* center with surrounding halo */ + switch (diam) { + case 3: + XFillRectangle (dsp, win, gc1, x, y, 3, 2); + XDrawLine (dsp, win, gc, x+1, y, x+1, y+1); + break; + case 4: + x += 1; + y += 1; + diam -= 1; + XFillArc (dsp, win, gc, x, y, diam, diam, 0, 360*64); + XDrawArc (dsp, win, gc1, x, y, diam, diam, 0, 360*64); + break; + default: + XFillArc (dsp, win, gc, x, y, diam, diam, 0, 360*64); + XDrawArc (dsp, win, gc1, x, y, diam, diam, 0, 360*64); + } +} + +/* given a pixel, find a dimmed halo color. + * cache for later. + */ +static Pixel +haloCache (Display *dsp, Pixel p) +{ + static struct _hc { Pixel p, hp; } *hcache; + static int nhcache; + XColor xc; + double r, g, b; + double h, s, v; + int i; + + /* check cache */ + for (i = 0; i < nhcache; i++) + if (hcache[i].p == p) + return (hcache[i].hp); + + /* nope, create halo pixel */ + xc.pixel = p; + XQueryColor (dsp, xe_cm, &xc); + r = (double)xc.red/65535.0; + g = (double)xc.green/65535.0; + b = (double)xc.blue/65535.0; + toHSV (r, g, b, &h, &s, &v); + v *= 0.40; + toRGB (h, s, v, &r, &g, &b); + xc.red = (int)(r*65535); + xc.green = (int)(g*65535); + xc.blue = (int)(b*65535); + XAllocColor (dsp, xe_cm, &xc); + + /* add to hcache and return */ + hcache = (struct _hc *) realloc(hcache, (nhcache+1)*sizeof(struct _hc)); + hcache[nhcache].p = p; + hcache[nhcache].hp = xc.pixel; + return (hcache[nhcache++].hp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: ps.c,v $ $Date: 2006/08/21 09:18:56 $ $Revision: 1.67 $ $Name: $"}; diff --git a/GUI/xephem/ps.h b/GUI/xephem/ps.h new file mode 100644 index 0000000..06cadc6 --- /dev/null +++ b/GUI/xephem/ps.h @@ -0,0 +1,71 @@ +#ifndef _PS_H +#define _PS_H + +/* public include file for X postscript interface, ps.c. + */ + +extern void XPSAsk (char *title, void (*go)()); +extern void XPSXBegin (Window win, int Xx0, int Xy0, int Xw, int Xh, int Px0, + int Py0, int Pw); +extern void XPSXEnd (void); +extern void XPSDirect (char *s); +extern char *XPSCleanStr (char *s, int l); +extern void XPSClose (void); +extern int XPSInColor (void); +extern int XPSDrawing (void); +extern void XPSPaperColor (unsigned long pix); + +extern void XPSDrawEllipse (Display *dsp, Drawable win, GC gc, int x, int y, + int a0, unsigned w, unsigned h, int a1, int a2); +extern void XPSFillEllipse (Display *dsp, Drawable win, GC gc, int x, int y, + int a0, unsigned w, unsigned h, int a1, int a2); +extern void XPSDrawArc (Display *dsp, Drawable win, GC gc, int x, int y, + unsigned w, unsigned h, int a1, int a2); +extern void XPSDrawArcs (Display *dsp, Drawable win, GC gc, XArc xa[], int nxa); +extern void XPSDrawLine (Display *dsp, Drawable win, GC gc, int x1, int x2, + int y1, int y2); +extern void XPSDrawLines (Display *dsp, Drawable win, GC gc, XPoint xp[], + int nxp, int mode); +extern void XPSDrawPoint (Display *dsp, Drawable win, GC gc, int x, int y); +extern void XPSDrawPoints (Display *dsp, Drawable win, GC gc, XPoint xp[], + int nxp, int mode); +extern void XPSDrawRectangle (Display *dsp, Drawable win, GC gc, + int x, int y, unsigned w, unsigned h); +extern void XPSDrawRectangles (Display *dsp, Drawable win, GC gc, + XRectangle xra[], int nxr); +extern void XPSDrawSegments (Display *dsp, Drawable win, GC gc, + XSegment xs[], int nxs); +extern void XPSDrawString (Display *dsp, Drawable win, GC gc, int x, int y, + char *s, int l); +extern void XPSRotDrawAlignedString (Display *dpy, XFontStruct *font, + double angle, double mag, Drawable drawable, GC gc, int x, int y, char *str, + int alignment); +extern void XPSDrawStar(Display *dsp, Drawable win, GC gc, int x, int y, int d); +extern void XPSFillArc (Display *dsp, Drawable win, GC gc, int x, int y, + unsigned w, unsigned h, int a1, int a2); +extern void XPSFillArcs (Display *dsp, Drawable win, GC gc, XArc xa[], int nxa); +extern void XPSFillPolygon (Display *dsp, Drawable win, GC gc, XPoint xp[], + int nxp, int shape, int mode); +extern void XPSFillRectangle (Display *dsp, Drawable win, GC gc, + int x, int y, unsigned w, unsigned h); +extern void XPSFillRectangles (Display *dsp, Drawable win, GC gc, + XRectangle xra[], int nxr); +extern void XPSPixmap (Pixmap pm, unsigned wid, unsigned hei, Colormap cm, + GC bggc, int darken); +extern void toHSV (double r, double g, double b, double *hp, double *sp, + double *vp); +extern void toRGB (double h, double s, double v, double *rp, double *gp, + double *bp); + + +/* annotation y coord from row */ +#define ANNOT_PTSZ 8 /* font size for annotation, PS's points. + * if change, must redesign all annotations. + */ +#define AROWY(r) (72 + (ANNOT_PTSZ+1)*(r)) + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: ps.h,v $ $Date: 2006/05/07 02:11:52 $ $Revision: 1.11 $ $Name: $ + */ + +#endif /* _PS_H */ diff --git a/GUI/xephem/query.c b/GUI/xephem/query.c new file mode 100644 index 0000000..475b1f9 --- /dev/null +++ b/GUI/xephem/query.c @@ -0,0 +1,107 @@ +/* general purpose way to ask a question, in X. + */ + +#include +#include + +#include +#include +#include + + +#include "xephem.h" + + +static Widget query_create (Widget top); +static void query_cb (Widget w, XtPointer client, XtPointer call); + +static void (*funcs[3])(); + +/* put up an app-modal query message with up to three buttons. + * all args can safely be NULL; buttons without labels will be turned off. + * tw must be a shell and the query will be placed on top of the shell. + */ +void +query ( +Widget tw, /* toplevel widget */ +char *msg, /* query message */ +char *label0, /* label for button 0 */ +char *label1, /* label for button 1 */ +char *label2, /* label for button 2 */ +void (*func0)(), /* func to call if button 0 is pushed */ +void (*func1)(), /* func to call if button 1 is pushed */ +void (*func2)()) /* func to call if button 2 is pushed */ +{ + Widget q_w = query_create(tw); + + funcs[0] = func0; + funcs[1] = func1; + funcs[2] = func2; + + if (label0) { + set_xmstring (q_w, XmNokLabelString, label0); + XtManageChild (XmMessageBoxGetChild (q_w, XmDIALOG_OK_BUTTON)); + } else + XtUnmanageChild (XmMessageBoxGetChild (q_w, XmDIALOG_OK_BUTTON)); + + if (label1) { + set_xmstring (q_w, XmNcancelLabelString, label1); + XtManageChild (XmMessageBoxGetChild (q_w, XmDIALOG_CANCEL_BUTTON)); + } else + XtUnmanageChild (XmMessageBoxGetChild (q_w,XmDIALOG_CANCEL_BUTTON)); + + if (label2) { + set_xmstring (q_w, XmNhelpLabelString, label2); + XtManageChild (XmMessageBoxGetChild (q_w, XmDIALOG_HELP_BUTTON)); + } else + XtUnmanageChild (XmMessageBoxGetChild (q_w, XmDIALOG_HELP_BUTTON)); + + if (msg) + set_xmstring (q_w, XmNmessageString, msg); + else + set_xmstring (q_w, XmNmessageString, "?message?"); + + XtManageChild (q_w); +} + +static Widget +query_create(tw) +Widget tw; +{ + Widget q_w; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg(args[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; + XtSetArg(args[n], XmNtitle, "xephem Query"); n++; + q_w = XmCreateQuestionDialog(tw, "Query", args, n); + set_something (q_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (q_w, XmNokCallback, query_cb, (XtPointer)0); + XtAddCallback (q_w, XmNcancelCallback, query_cb, (XtPointer)1); + XtAddCallback (q_w, XmNhelpCallback, query_cb, (XtPointer)2); + + return (q_w); +} + +/* called when any button is clicked. + * w is dialog + */ +/* ARGSUSED */ +static void +query_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + void (*f)() = funcs[(long int)client]; + + if (f) + (*f)(); + + XtDestroyWidget (w); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: query.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.5 $ $Name: $"}; diff --git a/GUI/xephem/rotated.c b/GUI/xephem/rotated.c new file mode 100644 index 0000000..e7494b6 --- /dev/null +++ b/GUI/xephem/rotated.c @@ -0,0 +1,1581 @@ +/* ********************************************************************** */ + +/* xvertext 5.0, Copyright (c) 1993 Alan Richardson (mppa3@uk.ac.sussex.syma) + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both the + * copyright notice and this permission notice appear in supporting + * documentation. All work developed as a consequence of the use of + * this program should duly acknowledge such use. No representations are + * made about the suitability of this software for any purpose. It is + * provided "as is" without express or implied warranty. + */ + +/* ********************************************************************** */ + + +/* BETTER: xvertext now does rotation at any angle!! + * + * BEWARE: function arguments have CHANGED since version 2.0!! + */ + +/* ********************************************************************** */ + + +#include +#include +#include +#include + +#include +#include +#include + +#include "rotated.h" + + +/* ---------------------------------------------------------------------- */ + + +/* Make sure cache size is set */ + +#ifndef CACHE_SIZE_LIMIT +#define CACHE_SIZE_LIMIT 0 +#endif /*CACHE_SIZE_LIMIT */ + +/* Make sure a cache method is specified */ + +#ifndef CACHE_XIMAGES +#ifndef CACHE_BITMAPS +#define CACHE_BITMAPS +#endif /*CACHE_BITMAPS*/ +#endif /*CACHE_XIMAGES*/ + + +/* ---------------------------------------------------------------------- */ + + +/* Debugging macros */ + +#ifdef DEBUG +static int debug=1; +#else +static int debug=0; +#endif /*DEBUG*/ + +#define DEBUG_PRINT1(a) if (debug) printf (a) +#define DEBUG_PRINT2(a, b) if (debug) printf (a, b) +#define DEBUG_PRINT3(a, b, c) if (debug) printf (a, b, c) +#define DEBUG_PRINT4(a, b, c, d) if (debug) printf (a, b, c, d) +#define DEBUG_PRINT5(a, b, c, d, e) if (debug) printf (a, b, c, d, e) + + +/* ---------------------------------------------------------------------- */ + + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + + +/* ---------------------------------------------------------------------- */ + + +/* A structure holding everything needed for a rotated string */ + +typedef struct rotated_text_item_template { + Pixmap bitmap; + XImage *ximage; + + char *text; + char *font_name; + Font fid; + float angle; + int align; + float magnify; + + int cols_in; + int rows_in; + int cols_out; + int rows_out; + + int nl; + int max_width; + float *corners_x; + float *corners_y; + + long int size; + int cached; + + struct rotated_text_item_template *next; +} RotatedTextItem; + +RotatedTextItem *first_text_item=NULL; + + +/* ---------------------------------------------------------------------- */ + + +/* A structure holding current magnification and bounding box padding */ + +static struct style_template { + float magnify; + int bbx_pad; +} style={ + 1., + 0 + }; + + +/* ---------------------------------------------------------------------- */ + + +static char *my_strdup(); +static char *my_strtok(); + +float XRotVersion(); +void XRotSetMagnification(); +void XRotSetBoundingBoxPad(); +int XRotDrawString(); +int XRotDrawImageString(); +int XRotDrawAlignedString(); +int XRotDrawAlignedImageString(); +XPoint *XRotTextExtents(); + +static XImage *MakeXImage(); +static int XRotPaintAlignedString(); +static int XRotDrawHorizontalString(); +static RotatedTextItem *XRotRetrieveFromCache(); +static RotatedTextItem *XRotCreateTextItem(); +static void XRotAddToLinkedList(); +static void XRotFreeTextItem(); +static XImage *XRotMagnifyImage(); + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Routine to mimic `strdup()' (some machines don't have it) */ +/**************************************************************************/ + +static char *my_strdup(str) + char *str; +{ + char *s; + + if(str==NULL) + return NULL; + + s=(char *)malloc((unsigned)(strlen(str)+1)); + if(s!=NULL) + strcpy(s, str); + + return s; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Routine to replace `strtok' : this one returns a zero length string if */ +/* it encounters two consecutive delimiters */ +/**************************************************************************/ + +static char *my_strtok(str1, str2) + char *str1, *str2; +{ + char *ret; + int i, j, stop; + static int start, len; + static char *stext; + + if(str2==NULL) + return NULL; + + /* initialise if str1 not NULL */ + if(str1!=NULL) { + start=0; + stext=str1; + len=strlen(str1); + } + + /* run out of tokens ? */ + if(start>=len) + return NULL; + + /* loop through characters */ + for(i=start; i0.) + style.magnify=(float)m; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Set the padding used when calculating bounding boxes */ +/**************************************************************************/ + +void XRotSetBoundingBoxPad(p) + int p; +{ + if(p>=0) + style.bbx_pad=p; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Create an XImage structure and allocate memory for it */ +/**************************************************************************/ + +static XImage *MakeXImage(dpy, w, h) + Display *dpy; + int w, h; +{ + XImage *I; + char *data; + + /* reserve memory for image */ + data=(char *)calloc((unsigned)(((w-1)/8+1)*h), 1); + if(data==NULL) + return NULL; + + /* create the XImage */ + I=XCreateImage(dpy, DefaultVisual(dpy, DefaultScreen(dpy)), 1, XYBitmap, + 0, data, w, h, 8, 0); + if(I==NULL) + return NULL; + + I->byte_order=I->bitmap_bit_order=MSBFirst; + return I; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* A front end to XRotPaintAlignedString: */ +/* -no alignment, no background */ +/**************************************************************************/ + +int XRotDrawString(dpy, font, angle, drawable, gc, x, y, str) + Display *dpy; + XFontStruct *font; + float angle; + Drawable drawable; + GC gc; + int x, y; + char *str; +{ + return (XRotPaintAlignedString(dpy, font, angle, drawable, gc, + x, y, str, NONE, 0)); +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* A front end to XRotPaintAlignedString: */ +/* -no alignment, paints background */ +/**************************************************************************/ + +int XRotDrawImageString(dpy, font, angle, drawable, gc, x, y, str) + Display *dpy; + XFontStruct *font; + float angle; + Drawable drawable; + GC gc; + int x, y; + char *str; +{ + return(XRotPaintAlignedString(dpy, font, angle, drawable, gc, + x, y, str, NONE, 1)); +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* A front end to XRotPaintAlignedString: */ +/* -does alignment, no background */ +/**************************************************************************/ + +int XRotDrawAlignedString(dpy, font, angle, drawable, gc, x, y, text, align) + Display *dpy; + XFontStruct *font; + float angle; + Drawable drawable; + GC gc; + int x, y; + char *text; + int align; +{ + return(XRotPaintAlignedString(dpy, font, angle, drawable, gc, + x, y, text, align, 0)); +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* A front end to XRotPaintAlignedString: */ +/* -does alignment, paints background */ +/**************************************************************************/ + +int XRotDrawAlignedImageString(dpy, font, angle, drawable, gc, x, y, text, + align) + Display *dpy; + XFontStruct *font; + float angle; + Drawable drawable; + GC gc; + int x, y; + char *text; + int align; +{ + return(XRotPaintAlignedString(dpy, font, angle, drawable, gc, + x, y, text, align, 1)); +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Aligns and paints a rotated string */ +/**************************************************************************/ + +static int XRotPaintAlignedString(dpy, font, angle, drawable, gc, x, y, text, + align, bg) + Display *dpy; + XFontStruct *font; + float angle; + Drawable drawable; + GC gc; + int x, y; + char *text; + int align; + int bg; +{ + int i; + GC my_gc; + int xp, yp; + float hot_x, hot_y; + float hot_xp, hot_yp; + float sin_angle, cos_angle; + RotatedTextItem *item; + Pixmap bitmap_to_paint; + + /* return early for NULL/empty strings */ + if(text==NULL) + return 0; + + if(strlen(text)==0) + return 0; + + /* manipulate angle to 0<=angle<360 degrees */ + angle = floor(angle*100+.5)/100.; + while(angle<0) + angle+=360; + + while(angle>=360) + angle-=360; + + angle*=M_PI/180; + + /* horizontal text made easy */ + if(angle==0. && style.magnify==1.) + return(XRotDrawHorizontalString(dpy, font, drawable, gc, x, y, + text, align, bg)); + + /* get a rotated bitmap */ + item=XRotRetrieveFromCache(dpy, font, angle, text, align); + if(item==NULL) + return 0; + + /* this gc has similar properties to the user's gc */ + my_gc=XCreateGC(dpy, drawable, 0L, NULL); + XCopyGC(dpy, gc, GCForeground|GCBackground|GCFunction|GCPlaneMask, + my_gc); + + /* alignment : which point (hot_x, hot_y) relative to bitmap centre + coincides with user's specified point? */ + + /* y position */ + if(align==TLEFT || align==TCENTRE || align==TRIGHT) + hot_y=(float)item->rows_in/2*style.magnify; + else if(align==MLEFT || align==MCENTRE || align==MRIGHT) + hot_y=0; + else if(align==BLEFT || align==BCENTRE || align==BRIGHT) + hot_y=-(float)item->rows_in/2*style.magnify; + else + hot_y=-((float)item->rows_in/2-(float)font->descent)*style.magnify; + + /* x position */ + if(align==TLEFT || align==MLEFT || align==BLEFT || align==NONE) + hot_x=-(float)item->max_width/2*style.magnify; + else if(align==TCENTRE || align==MCENTRE || align==BCENTRE) + hot_x=0; + else + hot_x=(float)item->max_width/2*style.magnify; + + /* pre-calculate sin and cos */ + sin_angle=(float)sin(angle); + cos_angle=(float)cos(angle); + + /* rotate hot_x and hot_y around bitmap centre */ + hot_xp= hot_x*cos_angle - hot_y*sin_angle; + hot_yp= hot_x*sin_angle + hot_y*cos_angle; + + /* text background will be drawn using XFillPolygon */ + if(bg) { + GC depth_one_gc; + XPoint *xpoints; + Pixmap empty_stipple; + + /* reserve space for XPoints */ + xpoints=(XPoint *)malloc((unsigned)(4*item->nl*sizeof(XPoint))); + if(!xpoints) + return 1; + + /* rotate corner positions */ + for(i=0; i<4*item->nl; i++) { + xpoints[i].x=x + (int)( (item->corners_x[i]-hot_x)*cos_angle + + (item->corners_y[i]+hot_y)*sin_angle); + xpoints[i].y=y + (int)(-(item->corners_x[i]-hot_x)*sin_angle + + (item->corners_y[i]+hot_y)*cos_angle); + } + + /* we want to swap foreground and background colors here; + XGetGCValues() is only available in R4+ */ + + empty_stipple=XCreatePixmap(dpy, drawable, 1, 1, 1); + + depth_one_gc=XCreateGC(dpy, empty_stipple, 0L, NULL); + XSetForeground(dpy, depth_one_gc, 0); + XFillRectangle(dpy, empty_stipple, depth_one_gc, 0, 0, 2, 2); + + XSetStipple(dpy, my_gc, empty_stipple); + XSetFillStyle(dpy, my_gc, FillOpaqueStippled); + + XFillPolygon(dpy, drawable, my_gc, xpoints, 4*item->nl, Nonconvex, + CoordModeOrigin); + + /* free our resources */ + free((char *)xpoints); + XFreeGC(dpy, depth_one_gc); + XFreePixmap(dpy, empty_stipple); + } + + /* where should top left corner of bitmap go ? */ + xp=x-(int)((float)item->cols_out/2 +hot_xp); + yp=y-(int)((float)item->rows_out/2 -hot_yp); + + /* by default we draw the rotated bitmap, solid */ + bitmap_to_paint=item->bitmap; + + /* handle user stippling */ +#ifndef X11R3 + { + GC depth_one_gc; + XGCValues values; + Pixmap new_bitmap, inverse; + + /* try and get some GC properties */ + if(XGetGCValues(dpy, gc, + GCStipple|GCFillStyle|GCForeground|GCBackground| + GCTileStipXOrigin|GCTileStipYOrigin, + &values)) { + + /* only do this if stippling requested */ + if((values.fill_style==FillStippled || + values.fill_style==FillOpaqueStippled) && !bg) { + + /* opaque stipple: draw rotated text in background colour */ + if(values.fill_style==FillOpaqueStippled) { + XSetForeground(dpy, my_gc, values.background); + XSetFillStyle(dpy, my_gc, FillStippled); + XSetStipple(dpy, my_gc, item->bitmap); + XSetTSOrigin(dpy, my_gc, xp, yp); + XFillRectangle(dpy, drawable, my_gc, xp, yp, + item->cols_out, item->rows_out); + XSetForeground(dpy, my_gc, values.foreground); + } + + /* this will merge the rotated text and the user's stipple */ + new_bitmap=XCreatePixmap(dpy, drawable, + item->cols_out, item->rows_out, 1); + + /* create a GC */ + depth_one_gc=XCreateGC(dpy, new_bitmap, 0L, NULL); + XSetForeground(dpy, depth_one_gc, 1); + XSetBackground(dpy, depth_one_gc, 0); + + /* set the relative stipple origin */ + XSetTSOrigin(dpy, depth_one_gc, + values.ts_x_origin-xp, values.ts_y_origin-yp); + + /* fill the whole bitmap with the user's stipple */ + XSetStipple(dpy, depth_one_gc, values.stipple); + XSetFillStyle(dpy, depth_one_gc, FillOpaqueStippled); + XFillRectangle(dpy, new_bitmap, depth_one_gc, + 0, 0, item->cols_out, item->rows_out); + + /* set stipple origin back to normal */ + XSetTSOrigin(dpy, depth_one_gc, 0, 0); + + /* this will contain an inverse copy of the rotated text */ + inverse=XCreatePixmap(dpy, drawable, + item->cols_out, item->rows_out, 1); + + /* invert text */ + XSetFillStyle(dpy, depth_one_gc, FillSolid); + XSetFunction(dpy, depth_one_gc, GXcopyInverted); + XCopyArea(dpy, item->bitmap, inverse, depth_one_gc, + 0, 0, item->cols_out, item->rows_out, 0, 0); + + /* now delete user's stipple everywhere EXCEPT on text */ + XSetForeground(dpy, depth_one_gc, 0); + XSetBackground(dpy, depth_one_gc, 1); + XSetStipple(dpy, depth_one_gc, inverse); + XSetFillStyle(dpy, depth_one_gc, FillStippled); + XSetFunction(dpy, depth_one_gc, GXcopy); + XFillRectangle(dpy, new_bitmap, depth_one_gc, + 0, 0, item->cols_out, item->rows_out); + + /* free resources */ + XFreePixmap(dpy, inverse); + XFreeGC(dpy, depth_one_gc); + + /* this is the new bitmap */ + bitmap_to_paint=new_bitmap; + } + } + } +#endif /*X11R3*/ + + /* paint text using stipple technique */ + XSetFillStyle(dpy, my_gc, FillStippled); + XSetStipple(dpy, my_gc, bitmap_to_paint); + XSetTSOrigin(dpy, my_gc, xp, yp); + XFillRectangle(dpy, drawable, my_gc, xp, yp, + item->cols_out, item->rows_out); + + /* free our resources */ + XFreeGC(dpy, my_gc); + + /* stippled bitmap no longer needed */ + if(bitmap_to_paint!=item->bitmap) + XFreePixmap(dpy, bitmap_to_paint); + +#ifdef CACHE_XIMAGES + XFreePixmap(dpy, item->bitmap); +#endif /*CACHE_XIMAGES*/ + + /* if item isn't cached, destroy it completely */ + if(!item->cached) + XRotFreeTextItem(dpy,item); + + /* we got to the end OK! */ + return 0; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Draw a horizontal string in a quick fashion */ +/**************************************************************************/ + +static int XRotDrawHorizontalString(dpy, font, drawable, gc, x, y, text, + align, bg) + Display *dpy; + XFontStruct *font; + Drawable drawable; + GC gc; + int x, y; + char *text; + int align; + int bg; +{ + GC my_gc; + int nl=1, i; + int height; + int xp, yp; + char *str1, *str2, *str3; + char *str2_a="\0", *str2_b="\n\0"; + int dir, asc, desc; + XCharStruct overall; + + DEBUG_PRINT1("**\nHorizontal text.\n"); + + /* this gc has similar properties to the user's gc (including stipple) */ + my_gc=XCreateGC(dpy, drawable, 0L, NULL); + XCopyGC(dpy, gc, + GCForeground|GCBackground|GCFunction|GCStipple|GCFillStyle| + GCTileStipXOrigin|GCTileStipYOrigin|GCPlaneMask, my_gc); + XSetFont(dpy, my_gc, font->fid); + + /* count number of sections in string */ + if(align!=NONE) + for(i=0; i<(int)strlen(text)-1; i++) + if(text[i]=='\n') + nl++; + + /* ignore newline characters if not doing alignment */ + if(align==NONE) + str2=str2_a; + else + str2=str2_b; + + /* overall font height */ + height=font->ascent+font->descent; + + /* y position */ + if(align==TLEFT || align==TCENTRE || align==TRIGHT) + yp=y+font->ascent; + else if(align==MLEFT || align==MCENTRE || align==MRIGHT) + yp=y-nl*height/2+font->ascent; + else if(align==BLEFT || align==BCENTRE || align==BRIGHT) + yp=y-nl*height+font->ascent; + else + yp=y; + + str1=my_strdup(text); + if(str1==NULL) + return 1; + + str3=my_strtok(str1, str2); + + /* loop through each section in the string */ + do { + XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, + &overall); + + /* where to draw section in x ? */ + if(align==TLEFT || align==MLEFT || align==BLEFT || align==NONE) + xp=x; + else if(align==TCENTRE || align==MCENTRE || align==BCENTRE) + xp=x-overall.rbearing/2; + else + xp=x-overall.rbearing; + + /* draw string onto bitmap */ + if(!bg) + XDrawString(dpy, drawable, my_gc, xp, yp, str3, strlen(str3)); + else + XDrawImageString(dpy, drawable, my_gc, xp, yp, str3, strlen(str3)); + + /* move to next line */ + yp+=height; + + str3=my_strtok((char *)NULL, str2); + } + while(str3!=NULL); + + free(str1); + XFreeGC(dpy, my_gc); + + return 0; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Query cache for a match with this font/text/angle/alignment */ +/* request, otherwise arrange for its creation */ +/**************************************************************************/ + +static RotatedTextItem *XRotRetrieveFromCache(dpy, font, angle, text, align) + Display *dpy; + XFontStruct *font; + float angle; + char *text; + int align; +{ + Font fid; + char *font_name=NULL; + unsigned long name_value; + RotatedTextItem *item=NULL; + RotatedTextItem *i1=first_text_item; + + /* get font name, if it exists */ + if(XGetFontProperty(font, XA_FONT, &name_value)) { + DEBUG_PRINT1("got font name OK\n"); + font_name=XGetAtomName(dpy, name_value); + fid=0; + } +#ifdef CACHE_FID + /* otherwise rely (unreliably?) on font ID */ + else { + DEBUG_PRINT1("can't get fontname, caching FID\n"); + font_name=NULL; + fid=font->fid; + } +#else + /* not allowed to cache font ID's */ + else { + DEBUG_PRINT1("can't get fontname, can't cache\n"); + font_name=NULL; + fid=0; + } +#endif /*CACHE_FID*/ + + /* look for a match in cache */ + + /* matching formula: + identical text; + identical fontname (if defined, font ID's if not); + angles close enough (<0.00001 here, could be smaller); + HORIZONTAL alignment matches, OR it's a one line string; + magnifications the same */ + + while(i1 && !item) { + /* match everything EXCEPT fontname/ID */ + if(strcmp(text, i1->text)==0 && + fabs(angle-i1->angle)<0.00001 && + style.magnify==i1->magnify && + (i1->nl==1 || + ((align==0)?9:(align-1))%3== + ((i1->align==0)?9:(i1->align-1))%3)) { + + /* now match fontname/ID */ + if(font_name!=NULL && i1->font_name!=NULL) { + if(strcmp(font_name, i1->font_name)==0) { + item=i1; + DEBUG_PRINT1("Matched against font names\n"); + } + else + i1=i1->next; + } +#ifdef CACHE_FID + else if(font_name==NULL && i1->font_name==NULL) { + if(fid==i1->fid) { + item=i1; + DEBUG_PRINT1("Matched against FID's\n"); + } + else + i1=i1->next; + } +#endif /*CACHE_FID*/ + else + i1=i1->next; + } + else + i1=i1->next; + } + + if(item) + DEBUG_PRINT1("**\nFound target in cache.\n"); + if(!item) + DEBUG_PRINT1("**\nNo match in cache.\n"); + + /* no match */ + if(!item) { + /* create new item */ + item=XRotCreateTextItem(dpy, font, angle, text, align); + if(!item) + return NULL; + + /* record what it shows */ + item->text=my_strdup(text); + + /* fontname or ID */ + if(font_name!=NULL) { + item->font_name=my_strdup(font_name); + item->fid=0; + } + else { + item->font_name=NULL; + item->fid=fid; + } + + item->angle=(float)angle; + item->align=align; + item->magnify=style.magnify; + + /* cache it */ + XRotAddToLinkedList(dpy, item); + } + + if(font_name) + XFree(font_name); + + /* if XImage is cached, need to recreate the bitmap */ + +#ifdef CACHE_XIMAGES + { + GC depth_one_gc; + + /* create bitmap to hold rotated text */ + item->bitmap=XCreatePixmap(dpy, RootWindow(dpy, DefaultScreen(dpy)), + item->cols_out, item->rows_out, 1); + + /* depth one gc */ + depth_one_gc=XCreateGC(dpy, item->bitmap, NULL, 0); + XSetBackground(dpy, depth_one_gc, 0); + XSetForeground(dpy, depth_one_gc, 1); + + /* make the text bitmap from XImage */ + XPutImage(dpy, item->bitmap, depth_one_gc, item->ximage, 0, 0, 0, 0, + item->cols_out, item->rows_out); + + XFreeGC(dpy, depth_one_gc); + } +#endif /*CACHE_XIMAGES*/ + + return item; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Create a rotated text item */ +/**************************************************************************/ + +static RotatedTextItem *XRotCreateTextItem(dpy, font, angle, text, align) + Display *dpy; + XFontStruct *font; + float angle; + char *text; + int align; +{ + RotatedTextItem *item=NULL; + Pixmap canvas; + GC font_gc; + XImage *I_in; + register int i, j; + char *str1, *str2, *str3; + char *str2_a="\0", *str2_b="\n\0"; + int height; + int byte_w_in, byte_w_out; + int xp, yp; + float sin_angle, cos_angle; + int it, jt; + float di, dj; + int ic=0; + float xl, xr, xinc; + int byte_out; + int dir, asc, desc; + XCharStruct overall; + int old_cols_in=0, old_rows_in=0; + + /* allocate memory */ + item=(RotatedTextItem *)malloc((unsigned)sizeof(RotatedTextItem)); + if(!item) + return NULL; + + /* count number of sections in string */ + item->nl=1; + if(align!=NONE) + for(i=0; i<(int)strlen(text)-1; i++) + if(text[i]=='\n') + item->nl++; + + /* ignore newline characters if not doing alignment */ + if(align==NONE) + str2=str2_a; + else + str2=str2_b; + + /* find width of longest section */ + str1=my_strdup(text); + if(str1==NULL) + return NULL; + + str3=my_strtok(str1, str2); + + XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, + &overall); + + item->max_width=overall.rbearing; + + /* loop through each section */ + do { + str3=my_strtok((char *)NULL, str2); + + if(str3!=NULL) { + XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, + &overall); + + if(overall.rbearing>item->max_width) + item->max_width=overall.rbearing; + } + } + while(str3!=NULL); + + free(str1); + + /* overall font height */ + height=font->ascent+font->descent; + + /* dimensions horizontal text will have */ + item->cols_in=item->max_width; + item->rows_in=item->nl*height; + + /* bitmap for drawing on */ + canvas=XCreatePixmap(dpy, RootWindow(dpy, DefaultScreen(dpy)), + item->cols_in, item->rows_in, 1); + + /* create a GC for the bitmap */ + font_gc=XCreateGC(dpy, canvas, 0L, NULL); + XSetBackground(dpy, font_gc, 0); + XSetFont(dpy, font_gc, font->fid); + + /* make sure the bitmap is blank */ + XSetForeground(dpy, font_gc, 0); + XFillRectangle(dpy, canvas, font_gc, 0, 0, + item->cols_in+1, item->rows_in+1); + XSetForeground(dpy, font_gc, 1); + + /* pre-calculate sin and cos */ + sin_angle=(float)sin(angle); + cos_angle=(float)cos(angle); + + /* text background will be drawn using XFillPolygon */ + item->corners_x= + (float *)malloc((unsigned)(4*item->nl*sizeof(float))); + if(!item->corners_x) + return NULL; + + item->corners_y= + (float *)malloc((unsigned)(4*item->nl*sizeof(float))); + if(!item->corners_y) + return NULL; + + /* draw text horizontally */ + + /* start at top of bitmap */ + yp=font->ascent; + + str1=my_strdup(text); + if(str1==NULL) + return NULL; + + str3=my_strtok(str1, str2); + + /* loop through each section in the string */ + do { + XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, + &overall); + + /* where to draw section in x ? */ + if(align==TLEFT || align==MLEFT || align==BLEFT || align==NONE) + xp=0; + else if(align==TCENTRE || align==MCENTRE || align==BCENTRE) + xp=(item->max_width-overall.rbearing)/2; + else + xp=item->max_width-overall.rbearing; + + /* draw string onto bitmap */ + XDrawString(dpy, canvas, font_gc, xp, yp, str3, strlen(str3)); + + /* keep a note of corner positions of this string */ + item->corners_x[ic]=((float)xp-(float)item->cols_in/2)*style.magnify; + item->corners_y[ic]=((float)(yp-font->ascent)-(float)item->rows_in/2) + *style.magnify; + item->corners_x[ic+1]=item->corners_x[ic]; + item->corners_y[ic+1]=item->corners_y[ic]+(float)height*style.magnify; + item->corners_x[item->nl*4-1-ic]=item->corners_x[ic]+ + (float)overall.rbearing*style.magnify; + item->corners_y[item->nl*4-1-ic]=item->corners_y[ic]; + item->corners_x[item->nl*4-2-ic]= + item->corners_x[item->nl*4-1-ic]; + item->corners_y[item->nl*4-2-ic]=item->corners_y[ic+1]; + + ic+=2; + + /* move to next line */ + yp+=height; + + str3=my_strtok((char *)NULL, str2); + } + while(str3!=NULL); + + free(str1); + + /* create image to hold horizontal text */ + I_in=MakeXImage(dpy, item->cols_in, item->rows_in); + if(I_in==NULL) + return NULL; + + /* extract horizontal text */ + XGetSubImage(dpy, canvas, 0, 0, item->cols_in, item->rows_in, + 1, XYPixmap, I_in, 0, 0); + I_in->format=XYBitmap; + + /* magnify horizontal text */ + if(style.magnify!=1.) { + I_in=XRotMagnifyImage(dpy, I_in); + + old_cols_in=item->cols_in; + old_rows_in=item->rows_in; + item->cols_in=(int)(item->cols_in*style.magnify); + item->rows_in=(int)(item->rows_in*style.magnify); + } + + /* how big will rotated text be ? */ + item->cols_out=(int)(fabs(item->rows_in*sin_angle) + + fabs(item->cols_in*cos_angle) +0.99999) +2; + + item->rows_out=(int)(fabs(item->rows_in*cos_angle) + + fabs(item->cols_in*sin_angle) +0.99999) +2; + + if(item->cols_out%2==0) + item->cols_out++; + + if(item->rows_out%2==0) + item->rows_out++; + + /* create image to hold rotated text */ + item->ximage=MakeXImage(dpy, item->cols_out, item->rows_out); + if(item->ximage==NULL) + return NULL; + + byte_w_in=(item->cols_in-1)/8+1; + byte_w_out=(item->cols_out-1)/8+1; + + /* we try to make this bit as fast as possible - which is why it looks + a bit over-the-top */ + + /* vertical distance from centre */ + dj=(float)(0.5-(float)item->rows_out/2); + + /* where abouts does text actually lie in rotated image? */ + if(angle==0 || angle==M_PI/2 || + angle==M_PI || angle==3*M_PI/2) { + xl=0; + xr=(float)item->cols_out; + xinc=0; + } + else if(anglecols_out/2.+ + (dj-(float)item->rows_in/(2*cos_angle))/tan(angle)-2); + xr=(float)(item->cols_out/2.+ + (dj+(float)item->rows_in/(2*cos_angle))/tan(angle)+2); + xinc=(float)(1./tan(angle)); + } + else { + xl=(float)(item->cols_out/2.+ + (dj+(float)item->rows_in/(2*cos_angle))/tan(angle)-2); + xr=(float)(item->cols_out/2+ + (dj-(float)item->rows_in/(2*cos_angle))/tan(angle)+2); + + xinc=(float)(1./tan(angle)); + } + + /* loop through all relevent bits in rotated image */ + for(j=0; jrows_out; j++) { + + /* no point re-calculating these every pass */ + di=(float)(((xl<0)?0:(int)xl)+0.5-(float)item->cols_out/2); + byte_out=(item->rows_out-j-1)*byte_w_out; + + /* loop through meaningful columns */ + for(i=((xl<0)?0:(int)xl); + i<((xr>=item->cols_out)?item->cols_out:(int)xr); i++) { + + /* rotate coordinates */ + it=(int)(item->cols_in/2. + ( di*cos_angle + dj*sin_angle)); + jt=(int)(item->rows_in/2. - (-di*sin_angle + dj*cos_angle)); + + /* set pixel if required */ + if(it>=0 && itcols_in && jt>=0 && jtrows_in) + if((I_in->data[jt*byte_w_in+it/8] & 128>>(it%8))>0) + item->ximage->data[byte_out+i/8]|=128>>i%8; + + di+=1; + } + dj+=1; + xl+=xinc; + xr+=xinc; + } + XDestroyImage(I_in); + + if(style.magnify!=1.) { + item->cols_in=old_cols_in; + item->rows_in=old_rows_in; + } + + +#ifdef CACHE_BITMAPS + + /* create a bitmap to hold rotated text */ + item->bitmap=XCreatePixmap(dpy, DefaultRootWindow(dpy), + item->cols_out, item->rows_out, 1); + + /* make the text bitmap from XImage */ + XPutImage(dpy, item->bitmap, font_gc, item->ximage, 0, 0, 0, 0, + item->cols_out, item->rows_out); + + XDestroyImage(item->ximage); + +#endif /*CACHE_BITMAPS*/ + + XFreeGC(dpy, font_gc); + XFreePixmap(dpy, canvas); + + return item; +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Adds a text item to the end of the cache, removing as many items */ +/* from the front as required to keep cache size below limit */ +/**************************************************************************/ + +static void XRotAddToLinkedList(dpy, item) + Display *dpy; + RotatedTextItem *item; +{ + + static long int current_size=0; + static RotatedTextItem *last=NULL; + RotatedTextItem *i1=first_text_item, *i2=NULL; + +#ifdef CACHE_BITMAPS + + /* I don't know how much memory a pixmap takes in the server - + probably this + a bit more we can't account for */ + + item->size=((item->cols_out-1)/8+1)*item->rows_out; + +#else + + /* this is pretty much the size of a RotatedTextItem */ + + item->size=((item->cols_out-1)/8+1)*item->rows_out + + sizeof(XImage) + strlen(item->text) + + item->nl*8*sizeof(float) + sizeof(RotatedTextItem); + + if(item->font_name!=NULL) + item->size+=strlen(item->font_name); + else + item->size+=sizeof(Font); + +#endif /*CACHE_BITMAPS */ + +#ifdef DEBUG + /* count number of items in cache, for debugging */ + { + int i=0; + + while(i1) { + i++; + i1=i1->next; + } + DEBUG_PRINT2("Cache has %d items.\n", i); + i1=first_text_item; + } +#endif + + DEBUG_PRINT4("current cache size=%ld, new item=%ld, limit=%d\n", + current_size, item->size, CACHE_SIZE_LIMIT*1024); + + /* if this item is bigger than whole cache, forget it */ + if(item->size>CACHE_SIZE_LIMIT*1024) { + DEBUG_PRINT1("Too big to cache\n\n"); + item->cached=0; + return; + } + + /* remove elements from cache as needed */ + while(i1 && current_size+item->size>CACHE_SIZE_LIMIT*1024) { + + DEBUG_PRINT2("Removed %ld bytes\n", i1->size); + + if(i1->font_name!=NULL) + DEBUG_PRINT5(" (`%s'\n %s\n angle=%f align=%d)\n", + i1->text, i1->font_name, i1->angle, i1->align); + +#ifdef CACHE_FID + if(i1->font_name==NULL) + DEBUG_PRINT5(" (`%s'\n FID=%ld\n angle=%f align=%d)\n", + i1->text, i1->fid, i1->angle, i1->align); +#endif /*CACHE_FID*/ + + current_size-=i1->size; + + i2=i1->next; + + /* free resources used by the unlucky item */ + XRotFreeTextItem(dpy, i1); + + /* remove it from linked list */ + first_text_item=i2; + i1=i2; + } + + /* add new item to end of linked list */ + if(first_text_item==NULL) { + item->next=NULL; + first_text_item=item; + last=item; + } + else { + item->next=NULL; + last->next=item; + last=item; + } + + /* new cache size */ + current_size+=item->size; + + item->cached=1; + + DEBUG_PRINT1("Added item to cache.\n"); +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Free the resources used by a text item */ +/**************************************************************************/ + +static void XRotFreeTextItem(dpy, item) + Display *dpy; + RotatedTextItem *item; +{ + free(item->text); + + if(item->font_name!=NULL) + free(item->font_name); + + free((char *)item->corners_x); + free((char *)item->corners_y); + +#ifdef CACHE_BITMAPS + XFreePixmap(dpy, item->bitmap); +#else + XDestroyImage(item->ximage); +#endif /* CACHE_BITMAPS */ + + free((char *)item); +} + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Magnify an XImage using bilinear interpolation */ +/**************************************************************************/ + +static XImage *XRotMagnifyImage(dpy, ximage) + Display *dpy; + XImage *ximage; +{ + int i, j; + float x, y; + float u,t; + XImage *I_out; + int cols_in, rows_in; + int cols_out, rows_out; + register int i2, j2; + int z1, z2, z3, z4; + int byte_width_in, byte_width_out; + float mag_inv; + + /* size of input image */ + cols_in=ximage->width; + rows_in=ximage->height; + + /* size of final image */ + cols_out=(int)(cols_in*style.magnify); + rows_out=(int)(rows_in*style.magnify); + + /* this will hold final image */ + I_out=MakeXImage(dpy, cols_out, rows_out); + if(I_out==NULL) + return NULL; + + /* width in bytes of input, output images */ + byte_width_in=(cols_in-1)/8+1; + byte_width_out=(cols_out-1)/8+1; + + /* for speed */ + mag_inv=(float)(1./style.magnify); + + y=0.; + + /* loop over magnified image */ + for(j2=0; j2data[j*byte_width_in+i/8] & 128>>(i%8))>0; + z2=z1; + z3=(ximage->data[(j+1)*byte_width_in+i/8] & 128>>(i%8))>0; + z4=z3; + } + /* top edge */ + else if(i!=cols_in-1 && j==rows_in-1) { + t=x-(float)i; + u=0; + + z1=(ximage->data[j*byte_width_in+i/8] & 128>>(i%8))>0; + z2=(ximage->data[j*byte_width_in+(i+1)/8] & 128>>((i+1)%8))>0; + z3=z2; + z4=z1; + } + /* top right corner */ + else if(i==cols_in-1 && j==rows_in-1) { + u=0; + t=0; + + z1=(ximage->data[j*byte_width_in+i/8] & 128>>(i%8))>0; + z2=z1; + z3=z1; + z4=z1; + } + /* somewhere `safe' */ + else { + t=x-(float)i; + u=y-(float)j; + + z1=(ximage->data[j*byte_width_in+i/8] & 128>>(i%8))>0; + z2=(ximage->data[j*byte_width_in+(i+1)/8] & 128>>((i+1)%8))>0; + z3=(ximage->data[(j+1)*byte_width_in+(i+1)/8] & + 128>>((i+1)%8))>0; + z4=(ximage->data[(j+1)*byte_width_in+i/8] & 128>>(i%8))>0; + } + + /* if interpolated value is greater than 0.5, set bit */ + if(((1-t)*(1-u)*z1 + t*(1-u)*z2 + t*u*z3 + (1-t)*u*z4)>0.5) + I_out->data[j2*byte_width_out+i2/8]|=128>>i2%8; + + x+=mag_inv; + } + y+=mag_inv; + } + + /* destroy original */ + XDestroyImage(ximage); + + /* return big image */ + return I_out; +} + + + +/* ---------------------------------------------------------------------- */ + + +/**************************************************************************/ +/* Calculate the bounding box some text will have when painted */ +/**************************************************************************/ + +XPoint *XRotTextExtents(dpy, font, angle, x, y, text, align) + Display *dpy; + XFontStruct *font; + float angle; + int x, y; + char *text; + int align; +{ + register int i; + char *str1, *str2, *str3; + char *str2_a="\0", *str2_b="\n\0"; + int height; + float sin_angle, cos_angle; + int nl, max_width; + int cols_in, rows_in; + float hot_x, hot_y; + XPoint *xp_in, *xp_out; + int dir, asc, desc; + XCharStruct overall; + + /* manipulate angle to 0<=angle<360 degrees */ + while(angle<0) + angle+=360; + + while(angle>360) + angle-=360; + + angle*=M_PI/180; + + /* count number of sections in string */ + nl=1; + if(align!=NONE) + for(i=0; i<(int)strlen(text)-1; i++) + if(text[i]=='\n') + nl++; + + /* ignore newline characters if not doing alignment */ + if(align==NONE) + str2=str2_a; + else + str2=str2_b; + + /* find width of longest section */ + str1=my_strdup(text); + if(str1==NULL) + return NULL; + + str3=my_strtok(str1, str2); + + XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, + &overall); + + max_width=overall.rbearing; + + /* loop through each section */ + do { + str3=my_strtok((char *)NULL, str2); + + if(str3!=NULL) { + XTextExtents(font, str3, strlen(str3), &dir, &asc, &desc, + &overall); + + if(overall.rbearing>max_width) + max_width=overall.rbearing; + } + } + while(str3!=NULL); + + free(str1); + + /* overall font height */ + height=font->ascent+font->descent; + + /* dimensions horizontal text will have */ + cols_in=max_width; + rows_in=nl*height; + + /* pre-calculate sin and cos */ + sin_angle=(float)sin(angle); + cos_angle=(float)cos(angle); + + /* y position */ + if(align==TLEFT || align==TCENTRE || align==TRIGHT) + hot_y=(float)rows_in/2*style.magnify; + else if(align==MLEFT || align==MCENTRE || align==MRIGHT) + hot_y=0; + else if(align==BLEFT || align==BCENTRE || align==BRIGHT) + hot_y=-(float)rows_in/2*style.magnify; + else + hot_y=-((float)rows_in/2-(float)font->descent)*style.magnify; + + /* x position */ + if(align==TLEFT || align==MLEFT || align==BLEFT || align==NONE) + hot_x=-(float)max_width/2*style.magnify; + else if(align==TCENTRE || align==MCENTRE || align==BCENTRE) + hot_x=0; + else + hot_x=(float)max_width/2*style.magnify; + + /* reserve space for XPoints */ + xp_in=(XPoint *)malloc((unsigned)(5*sizeof(XPoint))); + if(!xp_in) + return NULL; + + xp_out=(XPoint *)malloc((unsigned)(5*sizeof(XPoint))); + if(!xp_out) + return NULL; + + /* bounding box when horizontal, relative to bitmap centre */ + xp_in[0].x=-(short)(cols_in*style.magnify/2-style.bbx_pad); + xp_in[0].y= (short)(rows_in*style.magnify/2+style.bbx_pad); + xp_in[1].x= (short)(cols_in*style.magnify/2+style.bbx_pad); + xp_in[1].y= (short)(rows_in*style.magnify/2+style.bbx_pad); + xp_in[2].x= (short)(cols_in*style.magnify/2+style.bbx_pad); + xp_in[2].y=-(short)(rows_in*style.magnify/2-style.bbx_pad); + xp_in[3].x=-(short)(cols_in*style.magnify/2-style.bbx_pad); + xp_in[3].y=-(short)(rows_in*style.magnify/2-style.bbx_pad); + xp_in[4].x=xp_in[0].x; + xp_in[4].y=xp_in[0].y; + + /* rotate and translate bounding box */ + for(i=0; i<5; i++) { + xp_out[i].x=x + (int)( ((float)xp_in[i].x-hot_x)*cos_angle + + ((float)xp_in[i].y+hot_y)*sin_angle); + xp_out[i].y=y + (int)(-((float)xp_in[i].x-hot_x)*sin_angle + + ((float)xp_in[i].y+hot_y)*cos_angle); + } + + free((char *)xp_in); + + return xp_out; +} + + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: rotated.c,v $ $Date: 2003/10/08 03:17:57 $ $Revision: 1.5 $ $Name: $"}; diff --git a/GUI/xephem/rotated.h b/GUI/xephem/rotated.h new file mode 100644 index 0000000..08a8961 --- /dev/null +++ b/GUI/xephem/rotated.h @@ -0,0 +1,82 @@ +/* ************************************************************************ */ + + +/* Header file for the `xvertext 5.0' routines. + + Copyright (c) 1993 Alan Richardson (mppa3@uk.ac.sussex.syma) */ + + +/* ************************************************************************ */ + +#ifndef _XVERTEXT_INCLUDED_ +#define _XVERTEXT_INCLUDED_ + +#define XV_VERSION 5.0 +#define XV_COPYRIGHT \ + "xvertext routines Copyright (c) 1993 Alan Richardson" + + +/* ---------------------------------------------------------------------- */ + + +/* text alignment */ + +#define NONE 0 +#define TLEFT 1 +#define TCENTRE 2 +#define TRIGHT 3 +#define MLEFT 4 +#define MCENTRE 5 +#define MRIGHT 6 +#define BLEFT 7 +#define BCENTRE 8 +#define BRIGHT 9 + + +/* ---------------------------------------------------------------------- */ + +/* this shoulf be C++ compliant, thanks to + vlp@latina.inesc.pt (Vasco Lopes Paulo) */ + +#if defined(__cplusplus) || defined(c_plusplus) + +extern "C" { +float XRotVersion(char*, int); +void XRotSetMagnification(float); +void XRotSetBoundingBoxPad(int); +int XRotDrawString(Display*, XFontStruct*, float, + Drawable, GC, int, int, char*); +int XRotDrawImageString(Display*, XFontStruct*, float, + Drawable, GC, int, int, char*); +int XRotDrawAlignedString(Display*, XFontStruct*, float, + Drawable, GC, int, int, char*, int); +int XRotDrawAlignedImageString(Display*, XFontStruct*, float, + Drawable, GC, int, int, char*, int); +XPoint *XRotTextExtents(Display*, XFontStruct*, float, + int, int, char*, int); +} + +#else + +extern float XRotVersion(); +extern void XRotSetMagnification(); +extern void XRotSetBoundingBoxPad(); +extern int XRotDrawString(); +extern int XRotDrawImageString(); +extern int XRotDrawAlignedString(); +extern int XRotDrawAlignedImageString(); +extern XPoint *XRotTextExtents(); + +#endif /* __cplusplus */ + +/* ---------------------------------------------------------------------- */ + + +#endif /* _XVERTEXT_INCLUDED_ */ + + + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: rotated.h,v $ $Date: 2003/03/17 07:26:21 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/GUI/xephem/satmenu.c b/GUI/xephem/satmenu.c new file mode 100644 index 0000000..11c3891 --- /dev/null +++ b/GUI/xephem/satmenu.c @@ -0,0 +1,2516 @@ +/* code to manage the stuff on the "saturn" menu. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +#define MINR 10 /* min distance for picking, pixels */ + +/* local record of what is now on screen for easy id from mouse picking. + */ +typedef struct { + Obj o; /* copy of object info. + * copy from DB or, if saturn moon, we fill in just + * o_name and s_mag/ra/dec + */ + int x, y; /* screen coord */ +} ScreenObj; + +/* malloced arrays for each view */ +typedef enum { + SO_MAIN, SO_SHADOW, SO_TOP, SO_N +} SOIdx; +static ScreenObj *screenobj[SO_N]; +static int nscreenobj[SO_N]; + +static void sm_create_shell_w (void); +static void sm_create_tvform_w (void); +static void sm_create_ssform_w (void); +static void sm_set_buttons (int whether); +static void sm_sstats_close_cb (Widget w, XtPointer client, XtPointer call); +static void sm_sstats_cb (Widget w, XtPointer client, XtPointer call); +static void sm_option_cb (Widget w, XtPointer client, XtPointer call); +static void sm_cpdmapping_cb (Widget w, XtPointer client, XtPointer call); +static void sm_scale_cb (Widget w, XtPointer client, XtPointer call); +static void sm_activate_cb (Widget w, XtPointer client, XtPointer call); +static int sm_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void sm_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void st_unmap_cb (Widget w, XtPointer client, XtPointer call); +static void st_map_cb (Widget w, XtPointer client, XtPointer call); +static void st_track_size (void); +static void st_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static int st_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void sm_close_cb (Widget w, XtPointer client, XtPointer call); +static void sm_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void sm_anim_cb (Widget w, XtPointer client, XtPointer call); +static void sm_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void sm_da_input_cb (Widget w, XtPointer client, XtPointer call); +static void sm_create_popup (void); +static void sm_fill_popup (ScreenObj *sop, int justname); +static void sm_help_cb (Widget w, XtPointer client, XtPointer call); +static void sm_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void sm_goto_cb (Widget w, XtPointer client, XtPointer call); +static void sm_print_cb (Widget w, XtPointer client, XtPointer call); +static void sm_print (void); +static void sm_ps_annotate (Now *np); +static void make_gcs (void); +static void sm_calibline (Display *dsp, Drawable win, GC gc, int xc, int yc, + char *tag, int tw, int th, int l); +static void sm_draw_map (Obj *sop, double etilt, double satsize, + MoonData md[S_NMOONS]); + +static void add_screenobj (SOIdx, Obj *op, int x, int y); +static void reset_screenobj (SOIdx); +static ScreenObj *close_screenobj (SOIdx, int x, int y); + +static void sky_background (Drawable win, unsigned w, unsigned h, int fmag, + double ra0, double dec0, double scale, double rad, int fliptb, int fliplr); + +static Widget satshell_w; /* main shell */ +static Widget ssform_w; /* statistics form */ +static Widget smframe_w; /* main frame */ +static Widget stform_w; /* top-view form */ +static Widget stframe_w; /* top-view frame */ +static Widget sda_w; /* main drawing area */ +static Widget stda_w; /* top-view drawing area */ +static Widget ringet_w, ringst_w;/* labels for displaying ring tilts */ +static Widget scale_w; /* size scale */ +static Widget limmag_w; /* limiting magnitude scale */ +static Widget dt_w; /* main date/time stamp widget */ +static Widget sdt_w; /* statistics date/time stamp widget */ +static Widget skybkg_w; /* toggle for controlling sky background */ +static Widget topview_w; /* toggle for controlling top view */ +static Widget tel_w; /* PB to send position to telescope */ +static Pixmap sm_pm; /* main pixmap */ +static Pixmap st_pm; /* top-view pixmap */ +static GC s_fgc, s_bgc, s_xgc; /* various colors and operators */ +static XFontStruct *s_fs; /* font for labels */ +static int s_cw, s_ch; /* size of label font */ +static int sm_selecting; /* set while our fields are being selected */ +static int brmoons; /* whether we want to brightten the moons */ +static int tags; /* whether we want tags on the drawing */ +static int flip_tb; /* whether we want to flip top/bottom */ +static int flip_lr; /* whether we want to flip left/right */ +static int skybkg; /* whether we want sky background */ +static int topview; /* whether we want the top view */ + +static Widget smpu_w; /* main popup */ +static Widget smpu_name_w; /* popup name label */ +static Widget smpu_ra_w; /* popup RA label */ +static Widget smpu_dec_w; /* popup Dec label */ +static Widget smpu_mag_w; /* popup Mag label */ + +#define MAXSCALE 20.0 /* max scale mag factor */ +#define NORM 27.0 /* max Callisto orbit radius */ +#define MAPSCALE(r) ((r)*((int)nx)/NORM/2*scale) +#define XCORD(x) ((int)(((int)nx)/2.0 + ew*MAPSCALE(x) + 0.5)) +#define YCORD(y) ((int)(((int)ny)/2.0 - ns*MAPSCALE(y) + 0.5)) +#define ZCORD(z) ((int)(((int)ny)/2.0 + MAPSCALE(z) + 0.5)) + +#define MOVIE_STEPSZ 0.25 /* movie step size, hours */ +#define PRTR 20 /* printing table row, up from bottom */ +#define PRCW 7 /* printing char width */ + +/* field star support */ +static ObjF *fstars; /* malloced list of field stars, or NULL */ +static int nfstars; /* number of entries in fstars[] */ +static double fsdec, fsra; /* location when field stars were loaded */ +#define FSFOV degrad(1.0) /* size of FOV to fetch, rads */ +#define FSMAG 20.0 /* limiting mag for fetch */ +#define FSMOVE degrad(.2) /* reload when sat has moved this far, rads */ +static void sm_loadfs (double ra, double dec); + +enum {CEV, CSV, CPS, CTR, CX, CY, CZ, CRA, CDEC, CMAG, CNum}; /* s_w col idx */ +static Widget s_w[S_NMOONS][CNum];/* the data display widgets */ + +static char satcategory[] = "Saturn"; /* Save category */ + +/* info about the gifs we use to create the image */ +static int simtilts[] = {0, 4, 10, 16, 20, 24}; /* available image tilts */ +static XColor smapxcols[256]; /* pixels and colors */ +static unsigned char *smappix; /* malloced wxh of gif pixels */ +#define SMAPW 550 /* gif width */ +#define SMAPH 242 /* gif height */ +static Pixel sbg_p; /* background color */ + +static double pole_ra, pole_dec; + +/* called when the saturn menu is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, otherwise, just get out there and do it! + */ +void +sm_manage () +{ + if (!satshell_w) { + sm_create_shell_w(); + sm_create_ssform_w(); + sm_create_tvform_w(); + make_gcs(); + } + + XtPopup (satshell_w, XtGrabNone); + set_something (satshell_w, XmNiconic, (XtArgVal)False); + sm_set_buttons(sm_selecting); + + /* register we are now up */ + setXRes (sm_viewupres(), "1"); +} + +/* called to recompute and fill in values for the saturn menu. + * don't bother if it doesn't exist or is unmanaged now or no one is logging. + */ +void +sm_update (np, how_much) +Now *np; +int how_much; +{ + static char fmt[] = "%7.3f"; + Obj *eop = db_basic (SUN); + Obj *sop = db_basic (SATURN); + MoonData md[S_NMOONS]; + char *dir, buf[1024]; + int wantstats; + double etilt, stilt; + double satsize; + int i; + + /* see if we should bother */ + if (!satshell_w) + return; + wantstats = XtIsManaged(ssform_w) || any_ison() || how_much; + if (!isUp(satshell_w) && !wantstats) + return; + + watch_cursor (1); + + /* compute info */ + sprintf (buf, "%s/auxil", getShareDir()); + dir = expand_home (buf); + saturn_data (mjd, dir, eop, sop, &satsize, &etilt, &stilt, &pole_ra, + &pole_dec, md); + + if (wantstats) { + for (i = 0; i < S_NMOONS; i++) { + if (i > 0) { + f_double (s_w[i][CEV], "%1.0f", (double)md[i].evis); + f_double (s_w[i][CSV], "%1.0f", (double)md[i].svis); + f_double (s_w[i][CPS], "%1.0f", (double)md[i].pshad); + f_double (s_w[i][CTR], "%1.0f", (double)md[i].trans); + f_double (s_w[i][CX], fmt, md[i].x); + f_double (s_w[i][CY], fmt, md[i].y); + f_double (s_w[i][CZ], fmt, md[i].z); + } + f_double (s_w[i][CMAG], "%4.1f", md[i].mag); + f_ra (s_w[i][CRA], md[i].ra); + f_prdec (s_w[i][CDEC], md[i].dec); + } + + f_double (ringet_w, fmt, raddeg(etilt)); + f_double (ringst_w, fmt, raddeg(stilt)); + timestamp (np, sdt_w); + } + + if (isUp(satshell_w)) { + sm_draw_map (sop, etilt, satsize, md); + timestamp (np, dt_w); + } + + watch_cursor (0); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +sm_newres() +{ + if (!satshell_w) + return; + make_gcs (); + sm_update (mm_get_now(), 1); +} + +/* called when the database has changed. + * if we are drawing background, we'd best redraw everything. + */ +/* ARGSUSED */ +void +sm_newdb (appended) +int appended; +{ + if (skybkg) + sm_update (mm_get_now(), 1); +} + +int +sm_ison() +{ + return (isUp(satshell_w)); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +sm_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + sm_selecting++; + else if (sm_selecting > 0) + --sm_selecting; + + if (satshell_w) + if ((whether && sm_selecting == 1) /* first one to want on */ + || (!whether && sm_selecting == 0) /* last one to want off */) + sm_set_buttons (whether); +} + +/* called to put up or remove the watch cursor. */ +void +sm_cursor (c) +Cursor c; +{ + Window win; + + if (satshell_w && (win = XtWindow(satshell_w)) != 0) { + Display *dsp = XtDisplay(satshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (ssform_w && (win = XtWindow(ssform_w)) != 0) { + Display *dsp = XtDisplay(ssform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (stform_w && (win = XtWindow(stform_w)) != 0) { + Display *dsp = XtDisplay(stform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +sm_viewupres() +{ + return ("SatViewUp"); +} + +/* create the main shell */ +static void +sm_create_shell_w() +{ + typedef struct { + char *name; /* toggle button instance name, or NULL */ + char *label; /* label */ + int *flagp; /* pointer to global flag, or NULL if none */ + Widget *wp; /* widget to save, or NULL */ + char *tip; /* widget tip */ + } Option; + static Option options[] = { + {NULL, "Top view", &topview, &topview_w, + "When on, show view looking from high above N pole"}, + {"SkyBkg", "Sky background", &skybkg, &skybkg_w, + "When on, sky will include database objects and Field Stars"}, + {"BrightMoons","Bright moons", &brmoons, NULL, + "Display moons disproportionately bright, even if below limit"}, + {"Tags", "Tags", &tags, NULL, + "Label each moon with its Roman Numeral sequence number"}, + {"FlipTB", "Flip T/B", &flip_tb, NULL, + "Flip the display top-to-bottom"}, + {"FlipLR", "Flip L/R", &flip_lr, NULL, + "Flip the display left-to-right"}, + }; + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Saturn"}, + {"on Mouse...", "Saturn_mouse"}, + {"on Control...", "Saturn_control"}, + {"on View...", "Saturn_view"}, + }; + Widget w; + Widget mb_w, pd_w, cb_w; + Widget satform_w; + XmString str; + Arg args[20]; + int n; + int i; + + /* create form and shell */ + + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Saturn view"); n++; + XtSetArg (args[n], XmNiconName, "Saturn"); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + satshell_w = XtCreatePopupShell ("Saturn", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (satshell_w); + set_something (satshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (satshell_w, XmNpopdownCallback, sm_popdown_cb, 0); + sr_reg (satshell_w, "XEphem*Saturn.width", satcategory, 0); + sr_reg (satshell_w, "XEphem*Saturn.height", satcategory, 0); + sr_reg (satshell_w, "XEphem*Saturn.x", satcategory, 0); + sr_reg (satshell_w, "XEphem*Saturn.y", satcategory, 0); + sr_reg (NULL, sm_viewupres(), satcategory, 0); + + n = 0; + satform_w = XmCreateForm (satshell_w, "SaturnF", args, n); + XtAddCallback (satform_w, XmNhelpCallback, sm_help_cb, 0); + XtManageChild (satform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (satform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + XtAddCallback (pd_w, XmNmapCallback, sm_cpdmapping_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* add the "Print... " push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "P", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, sm_print_cb, 0); + wtip (w, "Print front view and detail table"); + XtManageChild (w); + + /* add the "Annot... " push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "A", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* add the "Field stars" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "FS", args, n); + set_xmstring (w, XmNlabelString, "Field Stars..."); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)fs_manage,0); + wtip (w, "Define where GSC and PPM catalogs are to be found"); + XtManageChild (w); + + /* add the "GOTO" push button */ + + n = 0; + tel_w = XmCreatePushButton (pd_w, "GOTO", args, n); + set_xmstring (tel_w, XmNlabelString, "Telescope GoTo"); + XtAddCallback (tel_w, XmNactivateCallback, sm_goto_cb, 0); + wtip (tel_w, "Send position to external application"); + XtManageChild (tel_w); + + /* add the "movie" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Anim", args, n); + set_xmstring (w, XmNlabelString, "Animation demo"); + XtAddCallback (w, XmNactivateCallback, sm_anim_cb, 0); + wtip (w, "Start/Stop a fun time-lapse animation"); + XtManageChild (w); + + /* add the "Movie loop... " push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "ML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, sm_mloop_cb, 0); + wtip (w, "Add this scene to the movie loop"); + XtManageChild (w); + + /* add the "close" push button beneath a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, sm_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + for (i = 0; i < XtNumber(options); i++) { + Option *op = &options[i]; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (pd_w, op->name ? op->name : "SMTB", + args, n); + XtAddCallback (w, XmNvalueChangedCallback, sm_option_cb, + (XtPointer)(op->flagp)); + set_xmstring (w, XmNlabelString, op->label); + if (op->flagp) + *(op->flagp) = XmToggleButtonGetState(w); + if (op->wp) + *op->wp = w; + if (op->tip) + wtip (w, op->tip); + XtManageChild (w); + if (op->name) + sr_reg (w, NULL, satcategory, 1); + } + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the More Info control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Stats", args, n); + set_xmstring (w, XmNlabelString, "More info..."); + XtAddCallback (w, XmNactivateCallback, sm_sstats_cb, NULL); + wtip (w, "Display additional details"); + XtManageChild (w); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, sm_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make the date/time stamp label */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + dt_w = XmCreateLabel (satform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* establishes size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make the scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 10); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + scale_w = XmCreateScale (satform_w, "Scale", args, n); + XtAddCallback (scale_w, XmNdragCallback, sm_scale_cb, 0); + XtAddCallback (scale_w, XmNvalueChangedCallback, sm_scale_cb, 0); + wtip (scale_w, "Zoom in and out"); + XtManageChild (scale_w); + sr_reg (scale_w, NULL, satcategory, 0); + + /* make the limiting mag scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 20); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + limmag_w = XmCreateScale (satform_w, "LimMag", args, n); + XtAddCallback (limmag_w, XmNdragCallback, sm_scale_cb, 0); + XtAddCallback (limmag_w, XmNvalueChangedCallback, sm_scale_cb, 0); + wtip (limmag_w, "Adjust the brightness and limiting magnitude"); + XtManageChild (limmag_w); + sr_reg (limmag_w, NULL, satcategory, 0); + + /* make a frame for the drawing area. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, scale_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, limmag_w); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + smframe_w = XmCreateFrame (satform_w, "SatFrame", args, n); + XtManageChild (smframe_w); + + /* make a drawing area for drawing the little map */ + + n = 0; + sda_w = XmCreateDrawingArea (smframe_w, "SaturnMap", args, n); + XtAddCallback (sda_w, XmNexposeCallback, sm_da_exp_cb, 0); + XtAddCallback (sda_w, XmNinputCallback, sm_da_input_cb, + (XtPointer)SO_MAIN); + XtManageChild (sda_w); +} + +/* make the statistics form dialog */ +static void +sm_create_ssform_w() +{ + typedef struct { + int col; /* C* column code */ + int moononly; /* applies to moons only */ + char *collabel; /* column label */ + char *suffix; /* suffix for plot/list/search name */ + char *tip; /* widget tip */ + } MoonColumn; + static MoonColumn mc[] = { + {CEV, 1, "E", "EVis", + "Whether geometrically visible from Earth"}, + {CSV, 1, "S", "SVis", + "Whether in Sun light"}, + {CPS, 1, "P", "PShad", + "Whether shadow falls on planet"}, + {CTR, 1, "T", "Transit", + "Whether moon is transitting face of planet"}, + {CX, 1, "X (+E)", "X", + "Apparent displacement east of planetary center"}, + {CY, 1, "Y (+S)", "Y", + "Apparent displacement south of planetary center"}, + {CZ, 1, "Z (+front)", "Z", + "Saturn radii towards Earth from planetary center"}, + {CRA, 0, "RA", "RA", + "Right Ascension (to Main's settings)"}, + {CDEC, 0, "Dec", "Dec", + "Declination (to Main's settings)"}, + {CMAG, 0, "Mag", "Mag", + "Apparent visual magnitude"}, + }; + MoonData md[S_NMOONS]; + Widget w; + Widget rc_w, title_w, sep_w; + Arg args[20]; + int n; + int i; + + /* just get moon names */ + saturn_data (0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, md); + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + ssform_w = XmCreateFormDialog (satshell_w, "SaturnStats", args, n); + set_something (ssform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(ssform_w), "XEphem*SaturnStats.x",satcategory,0); + sr_reg (XtParent(ssform_w), "XEphem*SaturnStats.y",satcategory,0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Saturn info"); n++; + XtSetValues (XtParent(ssform_w), args, n); + + /* make ring tilt label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + title_w = XmCreateLabel (ssform_w, "SatTL", args, n); + XtManageChild (title_w); + set_xmstring (title_w, XmNlabelString, "Ring tilt (degrees, front +S)"); + + /* make the earth ring tilt r/c */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 1); n++; + rc_w = XmCreateRowColumn (ssform_w, "SatERC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "SatETMsg", args, n); + set_xmstring (w, XmNlabelString, "From Earth:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNuserData, "Saturn.ETilt"); n++; + ringet_w = XmCreatePushButton (rc_w, "SatET", args, n); + XtAddCallback (ringet_w, XmNactivateCallback, sm_activate_cb, 0); + wtip (ringet_w, "Ring tilt as seen from Earth"); + XtManageChild (ringet_w); + + /* make the sun tilt r/c */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 1); n++; + rc_w = XmCreateRowColumn (ssform_w, "SatSRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "SatSTMsg", args, n); + set_xmstring (w, XmNlabelString, "From Sun:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNuserData, "Saturn.STilt"); n++; + ringst_w = XmCreatePushButton (rc_w, "SatST", args, n); + XtAddCallback (ringst_w, XmNactivateCallback, sm_activate_cb, 0); + wtip (ringst_w, "Ring tilt as seen from Sun"); + XtManageChild (ringst_w); + + /* make table title label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + title_w = XmCreateLabel (ssform_w, "SatML", args, n); + XtManageChild (title_w); + set_xmstring (title_w, XmNlabelString,"Moon Positions (Saturn radii)"); + + /* make the moon table, one column at a time */ + + /* moon designator column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (ssform_w, "SatDes", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "TL", args, n); + set_xmstring (w, XmNlabelString, "Tag"); + wtip (w, "Roman Numeral sequence designation of moon"); + XtManageChild (w); + + for (i = 0; i < S_NMOONS; i++) { + char *tag = md[i].tag; + + n = 0; + w = XmCreatePushButton (rc_w, "SatTag", args, n); /*PB for sz */ + set_xmstring (w, XmNlabelString, tag ? tag : " "); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* moon name column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (ssform_w, "SatName", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "NL", args, n); + set_xmstring (w, XmNlabelString, "Name"); + wtip (w, "Common name of body"); + XtManageChild (w); + + for (i = 0; i < S_NMOONS; i++) { + n = 0; + w = XmCreatePushButton (rc_w, "SatName", args, n); /*PB for sz*/ + set_xmstring (w, XmNlabelString, md[i].full); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* make each of the X/Y/Z/Mag/RA/DEC information columns */ + + for (i = 0; i < XtNumber (mc); i++) { + MoonColumn *mp = &mc[i]; + int j; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (ssform_w, "SMIRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "SatLab", args, n); + set_xmstring (w, XmNlabelString, mp->collabel); + if (mp->tip) + wtip (w, mp->tip); + XtManageChild (w); + + for (j = 0; j < S_NMOONS; j++) { + char *sel; + if (!mp->moononly || j > 0) { + + sel = XtMalloc (strlen(md[j].full) + strlen(mp->suffix)+2); + (void) sprintf (sel, "%s.%s", md[j].full, mp->suffix); + + n = 0; + XtSetArg (args[n], XmNuserData, sel); n++; + w = XmCreatePushButton(rc_w, "SatPB", args, n); + XtAddCallback(w, XmNactivateCallback, sm_activate_cb, 0); + s_w[j][mp->col] = w; + } else { + n = 0; + w = XmCreateLabel(rc_w, "SatPB", args, n); + set_xmstring (w, XmNlabelString, " "); + } + XtManageChild (w); + } + } + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (ssform_w, "Sep1", args, n); + XtManageChild (sep_w); + + /* make a date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sdt_w = XmCreateLabel (ssform_w, "JDateStamp", args, n); + wtip (sdt_w, "Date and Time for which data are computed"); + XtManageChild (sdt_w); + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sdt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (ssform_w, "Sep2", args, n); + XtManageChild (sep_w); + + /* make the close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + w = XmCreatePushButton (ssform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, sm_sstats_close_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* create stform_w, the top view dialog */ +static void +sm_create_tvform_w() +{ + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + stform_w = XmCreateFormDialog (satshell_w, "SaturnTV", args, n); + set_something (stform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (stform_w, XmNunmapCallback, st_unmap_cb, 0); + XtAddCallback (stform_w, XmNmapCallback, st_map_cb, NULL); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Saturn top view"); n++; + XtSetValues (XtParent(stform_w), args, n); + + /* fill with a drawing area in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + stframe_w = XmCreateFrame (stform_w, "STVF", args, n); + XtManageChild (stframe_w); + + n = 0; + stda_w = XmCreateDrawingArea (stframe_w, "SaturnTop", args, n); + XtAddCallback (stda_w, XmNexposeCallback, st_da_exp_cb, NULL); + XtAddCallback (stda_w, XmNinputCallback, sm_da_input_cb, + (XtPointer)SO_TOP); + XtManageChild (stda_w); +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +sm_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + int i, j; + + for (i = 0; i < S_NMOONS; i++) + for (j = 0; j < CNum; j++) + if (s_w[i][j]) + buttonAsButton (s_w[i][j], whether); + + buttonAsButton (ringet_w, whether); + buttonAsButton (ringst_w, whether); +} + +/* callback when the Close button is activated on the stats menu */ +/* ARGSUSED */ +static void +sm_sstats_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (ssform_w); +} + +/* callback when the More Info button is activated */ +/* ARGSUSED */ +static void +sm_sstats_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (ssform_w); + sm_set_buttons(sm_selecting); +} + +/* callback when the control menu is becoming visible + */ +/* ARGSUSED */ +static void +sm_cpdmapping_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtSetSensitive (tel_w, telIsOn()); +} + +/* callback from any of the option buttons. + * client points to global flag to set; some don't have any. + * in any case then just redraw everything. + */ +/* ARGSUSED */ +static void +sm_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (client) { + int *flagp = (int *)client; + *flagp = XmToggleButtonGetState(w); + if (flagp == &topview) { + if (topview) { + if (!stform_w) + sm_create_tvform_w(); + XtManageChild (stform_w); + } else + XtUnmanageChild (stform_w); + } + } + + sm_update (mm_get_now(), 1); +} + +/* callback from the scales changing. + * just redraw everything. + */ +/* ARGSUSED */ +static void +sm_scale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sm_update (mm_get_now(), 1); +} + +/* callback from any of the data menu buttons being activated. + */ +/* ARGSUSED */ +static void +sm_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (sm_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback from either expose or resize of the topview. + */ +/* ARGSUSED */ +static void +st_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected satform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!st_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (st_pm) + XFreePixmap (dsp, st_pm); + st_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + st_track_size(); + sm_update (mm_get_now(), 1); + } else + XCopyArea (dsp, st_pm, win, s_fgc, 0, 0, nx, ny, 0, 0); +} + +/* called whenever the topview scene is mapped. */ +/* ARGSUSED */ +static void +st_map_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + st_track_size(); +} + +/* set the width of the topview DrawingArea the same as the main window's. + * we also try to center it just above, but it doesn't always work. + */ +static void +st_track_size() +{ + Dimension w, h; + Position mfx, mfy, mdx, mdy; + Position sdy; + Arg args[20]; + int n; + + /* set widths equal */ + n = 0; + XtSetArg (args[n], XmNwidth, &w); n++; + XtGetValues (sda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNwidth, w); n++; + XtSetValues (stda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNheight, &h); n++; + XtGetValues (stda_w, args, n); + + /* set locations -- allow for different stuff on top of drawingareas */ + n = 0; + XtSetArg (args[n], XmNx, &mfx); n++; + XtSetArg (args[n], XmNy, &mfy); n++; + XtGetValues (satshell_w, args, n); + n = 0; + XtSetArg (args[n], XmNx, &mdx); n++; + XtSetArg (args[n], XmNy, &mdy); n++; + XtGetValues (smframe_w, args, n); + n = 0; + XtSetArg (args[n], XmNy, &sdy); n++; + XtGetValues (stframe_w, args, n); + + n = 0; + XtSetArg (args[n], XmNx, mfx+mdx); n++; + XtSetArg (args[n], XmNy, mfy - h - sdy - mdy - 20); n++; + XtSetValues (stform_w, args, n); +} + +/* callback when topview dialog is unmapped */ +/* ARGSUSED */ +static void +st_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (topview_w, False, True); +} + +/* callback when main shell is popped down */ +/* ARGSUSED */ +static void +sm_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (ssform_w); + XtUnmanageChild (stform_w); + + if (sm_pm) { + XFreePixmap (XtDisplay(sda_w), sm_pm); + sm_pm = (Pixmap) NULL; + } + + /* free any field stars */ + if (fstars) { + free ((void *)fstars); + fstars = NULL; + nfstars = 0; + } + + /* stop movie that might be running */ + mm_movie (0.0); + + /* register we are now down */ + setXRes (sm_viewupres(), "0"); +} + +/* callback from the main Close button */ +/* ARGSUSED */ +static void +sm_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let pop down do all the work */ + XtPopdown (satshell_w); +} + +/* callback to add scene to movie loop */ +/* ARGSUSED */ +static void +sm_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (sm_pm, dt_w); +} + +/* callback from the Movie button + */ +/* ARGSUSED */ +static void +sm_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* smoother if turn off the sky background */ + skybkg = 0; + XmToggleButtonSetState (skybkg_w, False, False); + + mm_movie (MOVIE_STEPSZ); +} + +/* callback from either expose or resize of the drawing area. + */ +/* ARGSUSED */ +static void +sm_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected satform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!sm_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (sm_pm) + XFreePixmap (dsp, sm_pm); + sm_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + if (topview) + st_track_size(); + sm_update (mm_get_now(), 1); + } else + XCopyArea (dsp, sm_pm, win, s_fgc, 0, 0, nx, ny, 0, 0); +} + +/* callback from mouse or keyboard input over either drawing area + * client is one of SOIdx. + */ +/* ARGSUSED */ +static void +sm_da_input_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + ScreenObj *sop; + SOIdx soidx; + XEvent *ev; + int x, y; + + /* get x and y value iff it was from mouse button 3 */ + if (c->reason != XmCR_INPUT) + return; + ev = c->event; + if (ev->xany.type != ButtonPress || ev->xbutton.button != 3) + return; + x = ev->xbutton.x; + y = ev->xbutton.y; + + /* find something close on the screen */ + soidx = (SOIdx) client; + sop = close_screenobj (soidx, x, y); + if (!sop && soidx == SO_MAIN) { + /* try shadows */ + soidx = SO_SHADOW; + sop = close_screenobj (soidx, x, y); + } + if (!sop) + return; + + /* put info in popup, smpu_w, creating it first if necessary */ + if (!smpu_w) + sm_create_popup(); + sm_fill_popup (sop, soidx == SO_SHADOW); + + /* put it on screen */ + XmMenuPosition (smpu_w, (XButtonPressedEvent *)ev); + XtManageChild (smpu_w); +} + +/* create the (unmanaged for now) popup menu in smpu_w. */ +static void +sm_create_popup() +{ + static Widget *puw[] = { + &smpu_name_w, + &smpu_ra_w, + &smpu_dec_w, + &smpu_mag_w, + }; + Widget w; + Arg args[20]; + int n; + int i; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + smpu_w = XmCreatePopupMenu (sda_w, "SatPU", args, n); + + /* stack everything up in labels */ + for (i = 0; i < XtNumber(puw); i++) { + n = 0; + w = XmCreateLabel (smpu_w, "SPUL", args, n); + XtManageChild (w); + *puw[i] = w; + } +} + +/* put up a popup at ev with info about sop */ +static void +sm_fill_popup (sop, justname) +ScreenObj *sop; +int justname; +{ + char *name; + double ra, dec, mag; + char buf[64], buf2[64]; + + name = sop->o.o_name; + (void) sprintf (buf2, "%.*s", MAXNM, name); + set_xmstring (smpu_name_w, XmNlabelString, buf2); + + if (justname) { + XtUnmanageChild (smpu_mag_w); + XtUnmanageChild (smpu_ra_w); + XtUnmanageChild (smpu_dec_w); + } else { + mag = get_mag(&sop->o); + (void) sprintf (buf2, " Mag: %.3g", mag); + set_xmstring (smpu_mag_w, XmNlabelString, buf2); + XtManageChild (smpu_mag_w); + + ra = sop->o.s_ra; + fs_ra (buf, ra); + (void) sprintf (buf2, " RA: %s", buf); + set_xmstring (smpu_ra_w, XmNlabelString, buf2); + XtManageChild (smpu_ra_w); + + dec = sop->o.s_dec; + fs_prdec (buf, dec); + (void) sprintf (buf2, " Dec: %s", buf); + set_xmstring (smpu_dec_w, XmNlabelString, buf2); + XtManageChild (smpu_dec_w); + } +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +sm_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This is a simple schematic depiction of Saturn and its moons.", +}; + + hlp_dialog ("Saturn", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +sm_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback from the goto control. + */ +/* ARGSUSED */ +static void +sm_goto_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op = db_basic (SATURN); + telGoto (op); +} + +/* add one entry to the given global screenobj array. + */ +static void +add_screenobj (soidx, op, x, y) +SOIdx soidx; +Obj *op; +int x, y; +{ + char *mem = (char *) screenobj[soidx]; + int nmem = nscreenobj[soidx]; + ScreenObj *sop; + + /* grow screenobj by one */ + if (mem) + mem = realloc ((char *)mem, (nmem+1)*sizeof(ScreenObj)); + else + mem = malloc (sizeof(ScreenObj)); + if (!mem) { + xe_msg (0, "Out of memory -- %s will not be pickable", op->o_name); + return; + } + screenobj[soidx] = (ScreenObj *) mem; + + sop = &screenobj[soidx][nscreenobj[soidx]++]; + + /* fill new entry */ + sop->o = *op; + sop->x = x; + sop->y = y; +} + +/* reclaim any existing screenobj entries from the given collection */ +static void +reset_screenobj(soidx) +SOIdx soidx; +{ + if (screenobj[soidx]) { + free ((char *)screenobj[soidx]); + screenobj[soidx] = NULL; + } + nscreenobj[soidx] = 0; +} + +/* find the entry in the given screenobj closest to [x,y] within MINR. + * if found return the ScreenObj *, else NULL. + */ +static ScreenObj * +close_screenobj (soidx, x, y) +SOIdx soidx; +int x, y; +{ + ScreenObj *scop = screenobj[soidx]; + ScreenObj *minsop = NULL; + int nobj = nscreenobj[soidx]; + int minr = 2*MINR; + int i; + + for (i = 0; i < nobj; i++) { + ScreenObj *sop = &scop[i]; + int r = abs(x - sop->x) + abs(y - sop->y); + if (r < minr) { + minr = r; + minsop = sop; + } + } + if (minr <= MINR) + return (minsop); + else + return (NULL); +} + +/* callback from Print control. + */ +/* ARGSUSED */ +static void +sm_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Saturn", sm_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +sm_print () +{ + Display *dsp = XtDisplay (sda_w); + Now *np = mm_get_now(); + unsigned int w, h, bw, d; + Window root; + int x, y; + + if (!sm_ison()) { + xe_msg (1, "Saturn must be open to save a file."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get size of the rendering area */ + XGetGeometry(dsp, sm_pm, &root, &x, &y, &w, &h, &bw, &d); + + /* draw in an area 5.5w x 5.5h centered 1in down from top */ + if (w >= h) + XPSXBegin (sm_pm, 0, 0, w, h, 1*72, 10*72, (int)(5.5*72)); + else { + int pw = (int)(72*5.5*w/h+.5); /* width on paper when 5.5 hi */ + XPSXBegin (sm_pm, 0, 0, w, h, (int)((8.5*72-pw)/2), 10*72, pw); + } + + /* redraw */ + sm_update (np, 1); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + sm_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +sm_ps_annotate (np) +Now *np; +{ + int ctrx = (int)(8.5*72/2); + Obj *eop = db_basic (SUN); + Obj *sop = db_basic (SATURN); + MoonData md[S_NMOONS]; + double etilt, stilt; + double tzmjd, satsize; + char *bp, buf[1024], buf2[32], dir[256]; + int n, x, y, i; + + /* compute all info */ + sprintf (buf, "%s/auxil", getShareDir()); + bp = expand_home (buf); + saturn_data (mjd, bp, eop, sop, &satsize, &etilt, &stilt, &pole_ra, + &pole_dec, md); + + /* border */ + y = (int)AROWY(PRTR+.5); + sprintf (buf, "newpath 72 %d moveto 540 %d lineto stroke\n", y, y); + XPSDirect (buf); + + /* title */ + y = AROWY(PRTR-2); + if (pref_get(PREF_ZONE) == PREF_UTCTZ) { + tzmjd = mjd; + bp = "UTC"; + } else { + tzmjd = mjd-tz/24; + bp = tznm; + } + fs_time (buf, mjd_hr(tzmjd)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(tzmjd)); + sprintf (dir,"(XEphem Saturn View at %s %s %s, JD %13.5f) %d %d cstr\n", + buf, buf2, bp, mjd+MJD0, ctrx, y); + XPSDirect (dir); + + /* ring tilts */ + sprintf (buf, + "Ring tilt, degrees, front +S: From Earth = %7.3f, From Sun = %7.3f", + raddeg(etilt), raddeg(stilt)); + y = AROWY(PRTR-3); + sprintf (dir, "(%s) %d %d cstr\n", buf, ctrx, y); + XPSDirect (dir); + + /* location if topocentric */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + char s, *site; + + bp = buf; + bp += sprintf (bp, "From "); + + site = mm_getsite(); + if (site) + bp += sprintf (bp, "%s at ", XPSCleanStr(site,strlen(site))); + + /* N.B. without the s= business the sign is printed wrong!! */ + + fs_sexa (buf2, raddeg(fabs(lat)), 3, 3600); + bp += sprintf (bp, "Latitude %s %c ", buf2, s=(lat<0 ? 'S' : 'N')); + + fs_sexa (buf2, raddeg(fabs(lng)), 4, 3600); + bp += sprintf (bp, "Longitude %s %c", buf2, s=(lng<0 ? 'W' : 'E')); + + sprintf (dir, "(%s) %d %d cstr\n", buf, ctrx, AROWY(PRTR-4)); + XPSDirect (dir); + } + + /* table heading */ + bp = buf; + bp += sprintf (bp, "%s ", pref_get(PREF_EQUATORIAL) == PREF_TOPO ? + "Topocentric" : "Geocentric"); + if (epoch == EOD) + bp += sprintf (bp, "Apparent EOD"); + else { + double tmp; + mjd_year (epoch, &tmp); + bp += sprintf (bp, "Astrometric %.2f", tmp); + } + y = AROWY(PRTR-5); + sprintf (dir, "(%s Moon Positions, XYZ in Saturn radii) %d %d cstr\n", + buf, ctrx,y); + XPSDirect (dir); + + /* stats for each row */ + for (i = 0; i < S_NMOONS; i++) { + y = AROWY(PRTR-7-i); + x = 65; + + if (i == 0) { + sprintf (dir, "(Tag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + if (md[i].tag) { + n = sprintf (buf, "%-4s", md[i].tag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } else + n = 4; + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Name) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%-9s", md[i].full); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].evis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].svis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(P) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].pshad); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(T) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].trans); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( X +E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].x); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Y +S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].y); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Z +front) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].z); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( RA) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, radhr(md[i].ra), 2, 360000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Dec) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, raddeg(md[i].dec), 3, 36000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Mag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + sprintf (buf, "%4.1f ", md[i].mag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } +} + +/* given a tilt return suffix of closest image, sign same as tilt */ +static int +sm_closesttilt (tilt) +double tilt; +{ + double minerr = 1e10; + int mini = 0; + int sign; + int i; + + tilt = raddeg(tilt); + if (tilt < 0) { + tilt = -tilt; + sign = -1; + } else + sign = 1; + + for (i = 0; i < XtNumber(simtilts); i++) { + double err = fabs(simtilts[i] - tilt); + if (err < minerr) { + mini = i; + minerr = err; + } + } + + return (simtilts[mini] * sign); +} + +/* make sure the proper gif is loaded for the given ring tilt. + * harmless if called again. + * return 0 if ok else -1. + */ +static int +sm_getgif(dsp, tilt) +Display *dsp; +double tilt; /* ring tilt from earth, front +S rads */ +{ +#define BOGUSCT 12389 + static int lastct = BOGUSCT; /* last index, sign set from tilt */ + unsigned char *gif; + char *smapbasenm; + int ngif; + char fn[256]; + char buf[256]; + int w, h; + FILE *fp; + int ct; + + /* find image index with closest tilt, done if same as last time */ + ct = sm_closesttilt (tilt); + if (ct == lastct) + return (0); + + /* read in the gif */ + sprintf (fn, "%s/auxil/saturn%02d.gif", getShareDir(), abs(ct)); + smapbasenm = strrchr (fn, '/') + 1; + fp = fopenh (fn, "r"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + lastct = BOGUSCT; + return (-1); + } + if (fseek (fp, 0L, SEEK_END) < 0) { + xe_msg (1, "%s:\nCan not seek", smapbasenm); + fclose (fp); + lastct = BOGUSCT; + return (-1); + } + ngif = ftell (fp); + gif = (unsigned char *) XtMalloc (ngif); + rewind (fp); + if (fread (gif, ngif, 1, fp) != 1) { + XtFree ((char *)gif); + xe_msg (1, "%s:\n%s", smapbasenm, syserrstr()); + fclose (fp); + lastct = BOGUSCT; + return (-1); + } + fclose (fp); + + /* explode */ + if (gif2X (dsp, xe_cm, gif, ngif, &w, &h, &smappix, + smapxcols, buf) < 0) { + xe_msg (1, "%s:\n%s", smapbasenm, buf); + XtFree ((char *)gif); + lastct = BOGUSCT; + return (-1); + } + XtFree ((char *)gif); + + if (w != SMAPW || h != SMAPH) { + xe_msg (1, "%s:\nincorrect file size", smapbasenm); + lastct = BOGUSCT; + return (-1); + } + + /* flip t/b if tilt < 0 */ + if (tilt < 0) { + for (h = 0; h < SMAPH/2; h++) { + unsigned char rowtmp[SMAPW]; + memcpy (rowtmp, &smappix[h*SMAPW], sizeof(rowtmp)); + memcpy (&smappix[h*SMAPW], &smappix[(SMAPH-h-1)*SMAPW], + sizeof(rowtmp)); + memcpy (&smappix[(SMAPH-h-1)*SMAPW], rowtmp, sizeof(rowtmp)); + } + } + + /* ready */ + lastct = ct; + return (0); +#undef BOGUSCT +} + +/* fill win with front image of Saturn. sz is pixels for 1 planet diameter. + * lx and ly are position of upper left corner of square surrounding planet. + * factoids: default orientation is E on right, S on top. + * return 0 if ok, else -1 + */ +static int +sm_fimage (dsp, win, lx, ty, sz, tilt) +Display *dsp; /* Display */ +Drawable win; /* drawable */ +int lx, ty, sz; /* left x, top y, sz */ +double tilt; /* ring tilt from earth, front +S rads */ +{ + Obj *sop = db_basic (SATURN); + XImage *xip; + Pixel gbg; + int imsz; + int depth; + int bpp; + int nbytes; + char *data; + int imx, imy; + double scale; + double tvc, pvc, theta, phi, sa, ca; + + /* load the proper gif */ + if (sm_getgif(dsp, tilt) < 0) + return(-1); + + /* assume gif height is exactly one planet diameter, and width just + * contains rings. create image that is square with width equal to + * gif width at same scale. + */ + scale = (double)SMAPH/sz; + imsz = sz*SMAPW/SMAPH; + + /* create a working image */ + get_something (sda_w, XmNdepth, (XtArgVal)&depth); + bpp = depth>=17 ? 32 : (depth >= 9 ? 16 : 8); + nbytes = imsz*imsz*bpp/8; + data = XtMalloc (nbytes); + xip = XCreateImage (dsp, DefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ depth, + /* format */ ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ imsz, + /* height */ imsz, + /* pad */ bpp, + /* bpl */ 0); + xip->bitmap_bit_order = LSBFirst; + xip->byte_order = LSBFirst; + + /* use background color wherever gif pixels match one in its corner, + * assumed to be gif's background color + */ + gbg = smapxcols[(int)smappix[0]].pixel; + + /* sky-plane rotation */ + tvc = PI/2.0 - sop->s_dec; + pvc = sop->s_ra; + theta = PI/2.0 - pole_dec; + phi = pole_ra; + sa = sin(tvc)*sin(theta)*(cos(pvc)*sin(phi) - sin(pvc)*cos(phi)); + ca = sqrt (1.0 - sa*sa); + + /* fill xip, include effects of sky plane rotation about center */ + for (imy = 0; imy < imsz; imy++) { + int imycf = (flip_tb ? imsz - imy - 1 : imy) - imsz/2; + for (imx = 0; imx < imsz; imx++) { + int imxcf = (flip_lr ? imsz - imx - 1 : imx) - imsz/2; + int gx= (int)floor((imxcf*ca - imycf*sa)*scale + SMAPW/2 + .5); + int gy= (int)floor((imxcf*sa + imycf*ca)*scale + SMAPH/2 + .5); + unsigned long p; + + if (gx < 0 || gx >= SMAPW || gy < 0 || gy >= SMAPH) + p = sbg_p; + else { + p = smapxcols[(int)smappix[gy*SMAPW+gx]].pixel; + if (p == gbg) + p = sbg_p; + } + XPutPixel (xip, imx, imy, p); + } + } + + /* copy to win */ + XPutImage (dsp, win, s_fgc, xip, 0, 0, lx-(imsz-sz)/2, ty-(imsz-sz)/2, imsz, imsz); + + /* done */ + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); + return (0); +} + +/* given the loc of the moons, draw a nifty little picture. + * also save resulting screen locs of everything in the screenobj array. + * scale of the locations is in terms of saturn radii == 1. + * unflipped view is S up, E right. + * positive tilt means the front rings are tilted southward, in rads. + * planet itself is in md[0], moons in md[1..S_NMOONS-1]. + * +md[].x: East, sat radii + * +md[].y: South, sat radii + * +md[].z: in front, sat radii + */ +static void +sm_draw_map (sop, etilt, satsize, md) +Obj *sop; +double etilt; +double satsize; +MoonData md[S_NMOONS]; +{ +#define RLW 3 /* ring line width, pixels */ +#define IRR 1.528 /* inner edge of ring system */ +#define ORR 2.267 /* outter edge of A ring */ + + static int noim; + Display *dsp = XtDisplay(sda_w); + Window win; + Window root; + double scale; + int sv; + int fmag; + char c; + int x, y; + int irw, orw, irx, iry, orx, ory; + unsigned int nx, ny, bw, d; + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + int scale1; + int i, b; + + /* first the main graphic */ + win = XtWindow (sda_w); + + XmScaleGetValue (limmag_w, &fmag); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + /* get size and erase */ + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, sm_pm, s_bgc, 0, 0, nx, ny); + scale1 = (int)floor(MAPSCALE(1)+0.5); + + /* prepare for a new list of things on the screen */ + reset_screenobj(SO_MAIN); + reset_screenobj(SO_SHADOW); + + /* draw saturn in center with unit radius */ + if (noim || + sm_fimage(dsp,sm_pm,nx/2-scale1,ny/2-scale1,2*scale1-1,etilt)<0){ + /* can't load image so draw graphically. + * rings of radius IRR and ORR. + * draw rings in front of planet using xor. + * positive tilt means the front rings are tilted southward. + * always draw the solid s_fgc last in case we are near the ring + * plane. + */ + int irh = (int)(MAPSCALE(2*IRR*fabs(sin(etilt)))); + int orh = (int)(MAPSCALE(2*ORR*fabs(sin(etilt)))); + irw = (int)(MAPSCALE(2*IRR)); + orw = (int)MAPSCALE(2*ORR); + irx = (int)(nx/2 - MAPSCALE(IRR)); + iry = (int)(ny/2 - MAPSCALE(IRR*fabs(sin(etilt)))); + orx = (int)(nx/2 - MAPSCALE(ORR)); + ory = (int)(ny/2 - MAPSCALE(ORR*fabs(sin(etilt)))); + XPSFillArc(dsp, sm_pm, s_fgc, nx/2-scale1, ny/2-scale1, 2*scale1-1, + 2*scale1-1, 0, 360*64); + if (irh < RLW || orh < RLW) { + /* too near the ring plane to draw a fill ellipse */ + XPSDrawLine (dsp, sm_pm, s_fgc, orx, ny/2, nx-orx, ny/2); + } else { + /* near rings are up if tilt is positive and we are not + * flipping n/s or if tilt is negative and we are flipping n/s. + */ + int nearup = ((etilt>0.0) == !flip_tb); + + XPSDrawArc (dsp, sm_pm, s_xgc, irx, iry, irw, irh, + nearup ? 0 : 180*64, 180*64-1); + XPSDrawArc (dsp, sm_pm, s_xgc, orx, ory, orw, orh, + nearup ? 0 : 180*64, 180*64-1); + XPSDrawArc (dsp, sm_pm, s_fgc, irx, iry, irw, irh, + nearup ? 180*64 : 0, 180*64-1); + XPSDrawArc (dsp, sm_pm, s_fgc, orx, ory, orw, orh, + nearup ? 180*64 : 0, 180*64-1); + } + + /* don't try image again */ + noim = 1; + } else + XPSPixmap (sm_pm, nx, ny, xe_cm, s_bgc, 1); + add_screenobj (SO_MAIN, sop, nx/2, ny/2); + + /* draw background objects, if desired. + * go out plenty wide to pick up moon during occultations. + */ + if (skybkg) + sky_background(sm_pm, nx, ny, fmag, md[0].ra, md[0].dec, + satsize/MAPSCALE(2), degrad(.5), flip_tb, flip_lr); + + /* draw labels */ + c = flip_lr ? 'W' : 'E'; + XPSDrawString(dsp, sm_pm, s_fgc, nx-s_cw-1, ny/2-2, &c, 1); + c = flip_tb ? 'N' : 'S'; + XPSDrawString(dsp, sm_pm, s_fgc, (nx-s_cw)/2-1, s_fs->ascent, &c, 1); + + /* draw 1' calibration line */ + if (tags) + sm_calibline (dsp, sm_pm, s_fgc, nx/2, 5*ny/6, "1'", s_cw*2, s_ch+4, + (int)MAPSCALE(degrad(1.0/60.0)/(satsize/2))); + + /* draw each moon + */ + for (i = 1; i < S_NMOONS; i++) { + double mx = md[i].x; + double my = md[i].y; + double mag = md[i].mag; + int diam; + Obj o; + + /* skip if behind or in shadow */ + if (!md[i].evis || !md[i].svis) + continue; + + diam = magdiam (fmag, 1, satsize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + x = XCORD(mx); + y = YCORD(my); + if (diam == 1) + XPSDrawPoint(dsp, sm_pm, s_xgc, x, y); + else + XPSDrawStar (dsp, sm_pm, s_xgc, x-diam/2, y-diam/2, diam); + + /* add object to list of screen objects drawn */ + memset (&o, 0, sizeof(o)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_MAIN, &o, x, y); + + /* shadow, if in front */ + if (md[i].pshad) { + int scx = XCORD(md[i].sx); + int scy = YCORD(md[i].sy); + + XPSDrawStar (dsp, sm_pm, s_bgc, scx-diam/2, scy-diam/2, diam); + sprintf (o.o_name, "%s shadow", md[i].full); + add_screenobj (SO_SHADOW, &o, scx, scy); + } + + /* labels last to cover all */ + if (tags && md[i].tag) + XPSDrawString(dsp, sm_pm, s_xgc, x-s_cw/2, y+2*s_ch, + md[i].tag, strlen(md[i].tag)); + } + + ano_draw (sda_w, sm_pm, sm_ano, 0); + + XCopyArea (dsp, sm_pm, win, s_fgc, 0, 0, nx, ny, 0, 0); + + /* then the top view, if desired */ + + if (!topview || !st_pm) /* let expose make new pixmap */ + return; + + /* get size and erase */ + win = XtWindow (stda_w); + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, st_pm, s_bgc, 0, 0, nx, ny); + + /* draw saturn in center with unit radius */ + i = (int)(ew*64*raddeg(asin(sin(degrad(sop->s_elong))/sop->s_sdist))); + XPSFillArc(dsp, st_pm, s_fgc, nx/2-scale1, ny/2-scale1, 2*scale1-1, + 2*scale1-1, -i, -180*64); + reset_screenobj(SO_TOP); + add_screenobj (SO_TOP, sop, nx/2, ny/2); + + /* rings of radius IRR and ORR... simple arcs from up here */ + irw = (int)(MAPSCALE(2*IRR)); + orw = (int)(MAPSCALE(2*ORR)); + irx = (int)(nx/2 - MAPSCALE(IRR)); + iry = (int)(ny/2 - MAPSCALE(IRR)); + orx = (int)(nx/2 - MAPSCALE(ORR)); + ory = (int)(ny/2 - MAPSCALE(ORR)); + b = (int)(64*raddeg(acos(1./IRR))); + XDrawArc (dsp, st_pm, s_xgc, irx, iry, irw, irw, b-i, -(180*64+2*b)); + b = (int)(64*raddeg(acos(1./ORR))); + XDrawArc (dsp, st_pm, s_xgc, orx, ory, orw, orw, b-i, -(180*64+2*b)); + + /* draw each moon + */ + for (i = 1; i < S_NMOONS; i++) { + double mx = md[i].x; + double mz = md[i].z; + double mag = md[i].mag; + int diam; + Obj o; + + if (!md[i].svis) + continue; + + diam = magdiam (fmag, 1, satsize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + x = XCORD(mx); + y = ZCORD(mz); + if (diam == 1) + XDrawPoint (dsp, st_pm, s_xgc, x, y); + else + XFillArc (dsp, st_pm, s_xgc, x-diam/2, y-diam/2, diam, diam, + 0, 360*64); + + /* add object to list of screen objects drawn */ + memset (&o, 0, sizeof(o)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_TOP, &o, x, y); + + if (tags && md[i].tag) + XDrawString(dsp, st_pm, s_xgc, x-s_cw/2, y+2*s_ch, + md[i].tag, strlen(md[i].tag)); + } + + /* draw label towards earth */ + if (tags) { + XPoint xp[5]; + + XDrawString(dsp, st_pm, s_fgc, nx/2, ny-s_ch, "Earth", 5); + xp[0].x = nx/2 - 15; xp[0].y = ny - 2*s_ch; + xp[1].x = 0; xp[1].y = 3*s_ch/2; + xp[2].x = -5; xp[2].y = -3*s_ch/4; + xp[3].x = 10; xp[3].y = 0; + xp[4].x = -5; xp[4].y = 3*s_ch/4; + XDrawLines (dsp, st_pm, s_fgc, xp, 5, CoordModePrevious); + } + + ano_draw (stda_w, st_pm, st_ano, 0); + + XCopyArea (dsp, st_pm, win, s_fgc, 0, 0, nx, ny, 0, 0); +} + +/* convert saturn X/Y to/from X windows coords depending on w2x. + * return whether visible. + */ +static int +sm_ano (double *xS, double *sY, int *xp, int *yp, int w2x, int arg) +{ + Display *dsp = XtDisplay (sda_w); + Window win = XtWindow (sda_w); + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + unsigned int nx, ny, bw, d; + Window root; + double scale; + int x, y; + int sv; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + if (w2x) { + *xp = XCORD(*xS); + *yp = YCORD(*sY); + } else { + *xS = 2*NORM*(*xp-(int)nx/2.0)/(ew*(int)nx*scale); + *sY = 2*NORM*((int)ny/2.0-*yp)/(ns*(int)ny*scale); + } + + return (*xp>=0 && *xp=0 && *yp=0 && *xp=0 && *ypmax_bounds.width; + s_ch = s_fs->max_bounds.ascent + s_fs->max_bounds.descent; + + gcm = GCForeground | GCFont; + get_color_resource (toplevel_w, "saturnColor", &fg); + gcv.foreground = fg; + gcv.font = s_fs->fid; + s_fgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground; + get_color_resource (toplevel_w, "SaturnBackground", &sbg_p); + gcv.foreground = sbg_p; + s_bgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground | GCFunction | GCFont; + fsp = getXResFont ("moonsFont"); + gcv.foreground = fg ^ sbg_p; + gcv.function = GXxor; + gcv.font = fsp->fid; + s_xgc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* draw a calibration line l pixels long centered at [xc,yc] marked with tag + * with is in a bounding box tw x th. + */ +static void +sm_calibline (dsp, win, gc, xc, yc, tag, tw, th, l) +Display *dsp; +Drawable win; +GC gc; +int xc, yc; +char *tag; +int tw, th; +int l; +{ + int lx = xc - l/2; + int rx = lx + l; + + XPSDrawLine (dsp, win, gc, lx, yc, rx, yc); + XPSDrawLine (dsp, win, gc, lx, yc-3, lx, yc+3); + XPSDrawLine (dsp, win, gc, rx, yc-3, rx, yc+3); + XPSDrawString (dsp, win, gc, xc-tw/2, yc+th, tag, strlen(tag)); +} + +/* draw all database objects in a small sky patch about the given center. + * get field stars too if enabled and we have moved enough. + * save objects and screen locs in the global screenobj array for picking. + * this is used to draw the backgrounds for the planet closeups. + * Based on work by: Dan Bruton + */ +static void +sky_background (win, w, h, fmag, ra0,dec0,scale,rad,fliptb,fliplr) +Drawable win; /* window to draw on */ +unsigned w, h; /* window size */ +int fmag; /* faintest magnitude to display */ +double ra0, dec0; /* center of patch, rads */ +double scale; /* rads per pixel */ +double rad; /* maximum radius to draw away from ra0/dec0, rads */ +int fliptb, fliplr; /* flip direction; default is S up E right */ +{ + static int before; + double cdec0 = cos(dec0); + DBScan dbs; + Obj *op; + double hfov = w * scale; + double vfov = h * scale; + + if (!before && pref_get(PREF_EQUATORIAL) == PREF_GEO) { + xe_msg (1, "Equatorial preference should probably be set to Topocentric"); + before = 1; + } + + /* update field star list */ + sm_loadfs (ra0, dec0); + + /* scan the database and draw whatever is near */ + for (db_scaninit(&dbs, ALLM, fstars, nfstars); + (op = db_scan (&dbs)) != NULL; ) { + double dra, ddec; + GC gc; + int dx, dy, x, y; + int diam; + + if (is_planet (op, SATURN)) { + /* we draw it elsewhere :-) */ + continue; + } + + db_update (op); + + /* find size, in pixels. */ + diam = magdiam (fmag, 1, scale, get_mag(op), + degrad(op->s_size/3600.0)); + if (diam <= 0) + continue; + + /* find x/y location if it's in the general area */ + dra = op->s_ra - ra0; /* + E */ + ddec = dec0 - op->s_dec; /* + S */ + if (fabs(ddec) > rad || delra(dra)*cdec0 > rad) + continue; + dx = (int)(dra/scale); + dy = (int)(ddec/scale); + x = fliplr ? (int)w/2-dx : (int)w/2+dx; + y = fliptb ? (int)h/2+dy : (int)h/2-dy; + + /* pick a gc */ + obj_pickgc(op, toplevel_w, &gc); + + /* draw 'er */ + sv_draw_obj_x (XtD, win, gc, op, x, y, diam, 0, fliptb, !fliplr, 0, 1, dec0, ra0, vfov, hfov, w, h); + + /* save 'er */ + add_screenobj (SO_MAIN, op, x, y); + } + + sv_draw_obj (XtD, win, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +/* load field stars around the given location, unless current set is + * already close enough. + */ +static void +sm_loadfs (ra, dec) +double ra, dec; +{ + Now *np = mm_get_now(); + + if (fstars && fabs(dec-fsdec) 0) { + xe_msg (0, "Saturn View added %d field stars", nfstars); + fsdec = dec; + fsra = ra; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: satmenu.c,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.65 $ $Name: $"}; diff --git a/GUI/xephem/saveres.c b/GUI/xephem/saveres.c new file mode 100644 index 0000000..4d8046a --- /dev/null +++ b/GUI/xephem/saveres.c @@ -0,0 +1,4099 @@ +/* code to manage current resource. + * Terminology: "resource" = "name":"value" + */ + +#include +#include +#include +#include +#include +#include + +#include /* to define struct _WidgetRec */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +extern char prefcategory[]; +extern char helpcategory[]; + +/* the general idea is to keep a list of each widget registered with + * sr_reg() in a Resource and a separate list of unique Categories. + * sr_refresh() updates the current value of each registered widget. + * sr_display() displays each Resource grouped by Categories in a window. + * sr_save() writes all Resources which have save True. + */ + +typedef struct { + char *name; /* cat name. N.B. must be permanent memory */ + int exp; /* whether to show expanded view */ + int nanew; /* n new autosave resources in this category */ + int ntnew; /* n new transient resources in this category */ +} Category; + +typedef struct { + Widget live_w; /* live widget to monitor, else getXRes(fb) */ + char *fb; /* entry in fallbacks[] or getXRes name */ + char *val; /* current value, malloced */ + char *lsv; /* last-saved value, malloced */ + int cati; /* index into catlist (N.B. no ptr: realloced)*/ + unsigned int new : 1; /* set if val != lsv */ + unsigned int save : 1; /* whether to save, regardless of new */ + unsigned int autosav : 1; /* set if want to mark for save whenevr chngs */ +} Resource; + +/* one of these to describe each color or font we control */ +typedef struct { + int heading; /* 0=button, 1=heading */ + char *title; /* name to show user */ + char *res; /* resource pattern */ + char reg; /* whether to register in Save list */ + char autosav; /* if reg, whether as autosav */ + char *res2; /* 2nd resource pattern if any, or *_newres() */ + char reg2; /* whether to register in Save list */ + char autosav2; /* if reg2, whether as autosav */ + XtCallbackProc cb; /* callback */ + int (*isf)(); /* class comparitor function */ + char *tip; /* help tip text */ + Widget w; /* PB control (once created that is) */ +} Choice; + +static void create_srshell (void); +static void sr_save_cb (Widget w, XtPointer client, XtPointer call); +static void sr_refresh_cb (Widget w, XtPointer client, XtPointer call); +static void sr_close_cb (Widget w, XtPointer client, XtPointer call); +static void sr_help_cb (Widget w, XtPointer client, XtPointer call); +static void sr_display (void); +static void sr_createpms (void); +static void sr_init (void); +static void sr_setnnew (int nanew, int ntnew); +static int crackNam (char *res, char *nam); +static int crackVal (char *res, char *val); +static void getCurVal (Resource *rp, char **val); +static void getGeometry (Widget w, int *xp, int *yp); +static void fmtRes (char *res, char *nam, char *val); +static void cpyNoWS (char *to, char *from); +static char *findWFB (Widget w); +static char *findRFB (char *res); +static int findCat (char *cat); +static Resource *findRes (char *findnam); +static int cmpRes (Resource *r1, Resource *r2); +static char *fullWName (Widget w, char *buf); +static void loadArgsChildren (Widget w, int (*isf)(), Arg *args, int nargs); +static int fgetres (char *buf, int bufl, FILE *fp); +static void fputres (FILE *fp, char *buf); +static void skyview_newres(void); + +/* pixmaps for the "directory" listing */ + +#define more_width 16 +#define more_height 16 +static unsigned char more_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x04, 0x10, 0x84, 0x10, 0x84, 0x10, + 0x84, 0x10, 0xf4, 0x17, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x04, 0x10, + 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define nomore_width 16 +#define nomore_height 16 +static unsigned char nomore_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x04, 0x10, 0x04, 0x10, 0x04, 0x10, + 0x04, 0x10, 0xf4, 0x17, 0x04, 0x10, 0x04, 0x10, 0x04, 0x10, 0x04, 0x10, + 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define majorres_width 16 +#define majorres_height 16 +static unsigned char majorres_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, + 0xe0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define minorres_width 16 +#define minorres_height 16 +static unsigned char minorres_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, + 0x20, 0x02, 0x10, 0x04, 0x10, 0x04, 0x10, 0x04, 0x20, 0x02, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define blankres_width 16 +#define blankres_height 16 +static unsigned char blankres_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static Category *catlist; /* malloced list of Categorys */ +static int ncatlist; /* entries in catlist[] */ +static Resource *reslist; /* malloced list of Resources */ +static int nreslist; /* entries in reslist[] */ +static Pixmap more_pm; /* more stuff */ +static Pixmap nomore_pm; /* no more stuff */ +static Pixmap majorres_pm; /* new autosav */ +static Pixmap minorres_pm; /* new non-autosav */ +static Pixmap blankres_pm; /* not new */ +static int nmyclass; /* handy length of myclass[] */ + +/* name of default per-user dir and name of file that can override */ +/* patched by CHAPG Alexey Chupahin */ +#ifdef __VMS +static char mydirdef[] = "~dot_xephem"; +static char mdovride[] = "~xephemrc"; +static char mdres[] = "XEphem.PrivateDir"; +#elif defined(__APPLE__) +static char mydirdef[] = "~/Library/XEphem"; +static char mdovride[] = "~/.xephemrc"; +static char mdres[] = "XEphem.PrivateDir"; +#else +static char mydirdef[] = "~/.xephem"; +static char mdovride[] = "~/.xephemrc"; +static char mdres[] = "XEphem.PrivateDir"; +#endif + +#define RESWID 45 /* columns for resource name, if possible */ +#define PGWID 75 /* overall number of default columns */ +#define MRNAM 1024 /* max chars in resource name (not critical) */ +#define MLL 1024 /* max line length (not critical) */ + +/* Save window info */ +static Widget srshell_w; /* main shell */ +static Widget srsw_w; /* XmScrolledWindow to hold report */ +static Widget asav_w; /* autosave TB */ +static Widget asel_w; /* autoselect major resources TB */ +static Widget msel_w; /* autoselect minor resources TB */ +static Widget majorres_w; /* sample majorres_pm label */ +static Widget minorres_w; /* sample minorres_pm label */ +static Widget majorn_w; /* count of changed major resources */ +static Widget minorn_w; /* count of changed minor resources */ +static int pendingexit; /* set when saving just before exiting */ + +/* a family of functions that checks for an exact class match. + * (can't use xm*Class in static initialization!!) + */ +#define CLASSCHKF(f,c1, c2) \ + static int f(w) Widget w; { \ + WidgetClass wc = XtClass(w); \ + return (wc == c1 || wc == c2); \ + } +CLASSCHKF (isLabel, xmLabelWidgetClass, xmLabelGadgetClass) +CLASSCHKF (isAB, xmArrowButtonWidgetClass, xmArrowButtonGadgetClass) +CLASSCHKF (isPB, xmPushButtonWidgetClass, xmPushButtonGadgetClass) +CLASSCHKF (isTB, xmToggleButtonWidgetClass, xmToggleButtonGadgetClass) +CLASSCHKF (isCB, xmCascadeButtonWidgetClass, xmCascadeButtonGadgetClass) +CLASSCHKF (isList, xmListWidgetClass, 0) +CLASSCHKF (isText, xmTextWidgetClass, 0) +CLASSCHKF (isTextF, xmTextFieldWidgetClass, 0) +CLASSCHKF (isScale, xmScaleWidgetClass, 0) +static int isAny(w) Widget w; { return (1); } + +/* Font window info */ +static Widget srfshell_w; /* main shell */ +static Widget srfhl_w; /* font history scrolled list */ +static Widget srfpat_w; /* font pattern TF */ +static Widget srfaf_w; /* list of all fonts */ +static Widget srfsample_w; /* label to show sample */ +static Widget srfsname_w; /* label to show sample name */ +static Widget fappto_w; /* Apply-to TB */ +static Widget fsetd_w; /* Set-default TB */ +static Widget fgetc_w; /* Get-current TB */ +static Widget fgetd_w; /* Get-default TB */ +static void create_srfshell (void); +static XFontStruct * srf_install (char *res, char *res2, char *xlfd); +static void srf_search (void); +static void srf_go_cb (Widget w, XtPointer client, XtPointer call); +static void srf_tracking_cb (Widget w, XtPointer client, XtPointer call); +static void srf_views_cb (Widget w, XtPointer client, XtPointer call); +static void srf_moons_cb (Widget w, XtPointer client, XtPointer call); +static void srf_appres_cb (Widget w, XtPointer client, XtPointer call); + +/* N.B. see create_menus() for grouping rules */ +static Choice fchoices[] = { + {1, "Buttons", 0, 0, 0, 0, 0, 0, 0, 0, + "Target fonts in Buttons and labels"}, + {0, "Push buttons", + "XEphem*XmPushButton.fontList", 1, 1, + "XEphem*XmPushButtonGadget.fontList", 1, 1, + srf_go_cb, isPB, "Font for all push buttons"}, + {0, "Toggle buttons", + "XEphem*XmToggleButton.fontList", 1, 1, + "XEphem*XmToggleButtonGadget.fontList", 1, 1, + srf_go_cb, isTB, "Font for all toggle buttons"}, + {0, "Cascade buttons", + "XEphem*XmCascadeButton.fontList", 1, 1, + "XEphem*XmCascadeButtonGadget.fontList", 1, 1, + srf_go_cb, isCB, "Font for all buttons that spring pulldown menus"}, + + {1, "Text", 0, 0, 0, 0, 0, 0, 0, 0, + "Target fonts for text in various contexts"}, + {0, "Text fields", + "XEphem*XmTextField.fontList", 1, 1, + 0, 0, 0, + srf_go_cb, isTextF, "Font for all 1-line text fields"}, + {0, "Text boxes", + "XEphem*XmText.fontList", 1, 1, + 0, 0, 0, + srf_go_cb, isText, "Font for all multiline text fields"}, + {0, "Lists", + "XEphem*XmList.fontList", 1, 1, + 0, 0, 0, + srf_go_cb, isList, "Font for text presented in lists"}, + {0, "Labels", + "XEphem*XmLabel.fontList", 1, 1, + "XEphem*XmLabelGadget.fontList", 1, 1, + srf_go_cb, isLabel, "Font for all passive labels"}, + {0, "Scales", + "XEphem*XmScale.fontList", 1, 1, + 0, 0, 0, + srf_go_cb, isScale, "Font for scales using standard Motif labeling"}, + {0, "Annotation", + "XEphem.AnnoFont", 1, 1, + (char *)ano_newres, 0, 0, + srf_appres_cb, NULL, "Font for user annotation entries"}, + {0, "Tips", + "XEphem.tipFont", 1, 1, + (char *)wtip_init, 0, 0, + srf_appres_cb, NULL, "Font for the help tip balloons"}, + + {1, "Other", 0, 0, 0, 0, 0, 0, 0, 0, + "Target fonts in various contexts"}, + {0, "Sky constel", + "XEphem.CnsFont", 1, 1, + (char *)skyview_newres, 0, 0, + srf_appres_cb, NULL, "Font to draw constellation names in Sky View"}, + {0, "Sky grid", + "XEphem.SkyGridFont", 1, 1, + (char *)skyview_newres, 0, 0, + srf_appres_cb, NULL, "Font to draw the grid labels in Sky View"}, + {0, "Greek", + "XEphem.viewsGreekFont", 1, 1, + (char *)skyview_newres, 0, 0, + srf_appres_cb, NULL, + "Font for Greek portion of Bayer names in map views"}, + {0, "Cursor data", + "XEphem.cursorTrackingFont", 1, 1, + 0, 0, 0, + srf_tracking_cb, NULL, + "Font to show the cursor tracking coordinates in maps"}, + {0, "Map trails", + "XEphem.trailsFont", 1, 1, + (char *)tr_newres, 0, 0, + srf_appres_cb, NULL, "Font for time trails in maps"}, + {0, "Map labels", + "XEphem.viewsFont", 1, 1, + 0, 0, 0, + srf_views_cb, NULL, "Font to label objects in map views"}, + {0, "Moons labels", + "XEphem.moonsFont", 1, 1, + 0, 0, 0, + srf_moons_cb, NULL, "Font to label moons in map views"}, +}; + +/* Color window info */ +static Widget srcshell_w; /* main shell */ +static Widget srcsl_w; /* color history scrolled list */ +static Widget cappto_w; /* Apply-to TB */ +static Widget csetd_w; /* Set-default TB */ +static Widget cgetc_w; /* Get-current TB */ +static Widget cgetd_w; /* Get-default TB */ +static Widget srctf_w; /* color text field */ +static Widget srcRH_w; /* R/H scale */ +static Widget srcGS_w; /* G/S scale */ +static Widget srcBV_w; /* B/V scale */ +static Widget srcrgb_w; /* rgb TB scale */ +static Widget srcda_w; /* sample drawing area */ +static Widget cpicker_w; /* color picker TB */ +static Widget nightv_w; /* night vision TB */ +static void create_srcshell (void); +static void src_fg_cb (Widget w, XtPointer client, XtPointer call); +static void src_bg_cb (Widget w, XtPointer client, XtPointer call); +static void src_appres_cb (Widget w, XtPointer client, XtPointer call); +static void src_obj_cb (Widget w, XtPointer client, XtPointer call); +static void src_nightv_cb (Widget w, XtPointer client, XtPointer call); +static void src_install (char *res, char *res2, char *cnam); +static void src_setbg (Widget w, Pixel bg, int (*isf)()); +static void src_showcolor (char *name, int scalestoo); +static void installNVBg (void); +static void installNVFg (void); + +/* N.B. see create_menus() for grouping rules */ +static Choice cchoices[] = { + {1, "Text", 0, 0, 0, 0, 0, 0, 0, 0, + "Target colors used for text in various contexts"}, + {0, "Labels", + "XEphem*XmLabel.foreground", 1, 1, + "XEphem*XmLabelGadget.foreground", 1, 1, + src_fg_cb, isLabel, "Color of passive labels"}, + {0, "Arrow buttons", + "XEphem*XmArrowButton.foreground", 1, 1, + "XEphem*XmArrowButtonGadget.foreground", 1, 1, + src_fg_cb, isAB, "Color of arrow buttons"}, + {0, "Push buttons", + "XEphem*XmPushButton.foreground", 1, 1, + "XEphem*XmPushButtonGadget.foreground", 1, 1, + src_fg_cb, isPB, "Color of push buttons"}, + {0, "Toggle buttons", + "XEphem*XmToggleButton.foreground", 1, 1, + "XEphem*XmToggleButtonGadget.foreground", 1, 1, + src_fg_cb, isTB, "Color of toggle buttons"}, + {0, "Cascade buttons", + "XEphem*XmCascadeButton.foreground", 1, 1, + "XEphem*XmCascadeButtonGadget.foreground", 1, 1, + src_fg_cb, isCB, "Color of buttons that pull down menus"}, + {0, "Text fields", + "XEphem*XmTextField.foreground", 1, 1, + 0, 0, 0, + src_fg_cb, isTextF, "Color of 1-line text fields"}, + {0, "Text boxes", + "XEphem*XmText.foreground", 1, 1, + 0, 0, 0, + src_fg_cb, isText, "Color of multiline text fields"}, + {0, "Lists", + "XEphem*XmList.foreground", 1, 1, + 0, 0, 0, + src_fg_cb, isList, "Color of text presented in lists"}, + {0, "Scales", + "XEphem*XmScale.foreground", 1, 1, + 0, 0, 0, + src_fg_cb, isScale, "Color of text used in slider controls"}, + {0, "Annotation", + "XEphem.AnnoColor", 1, 1, + (char *)ano_newres, 0, 0, + src_appres_cb, NULL, "Color of user annotation entries"}, + {0, "Night vision", + "XEphem.NightColor", 1, 1, + 0, 0, 0, + src_appres_cb, NULL, "Color of text in Night vision mode"}, + {0, "Moon overlay", + "XEphem.MoonAnnotColor", 1, 1, + (char *)m_newres, 0, 0, + src_appres_cb, NULL, "Color of text overlay on Moon view"}, + {0, "Mars overlay", + "XEphem.MarsAnnotColor", 1, 1, + (char *)mars_newres, 0, 0, + src_appres_cb, NULL, "Color of text overlay on Mars view"}, + {0, "Tips", + "XEphem.tipForeground", 1, 1, + (char *)wtip_init, 0, 0, + src_appres_cb, NULL, "Color of text in bubble tips"}, + {0, "NaaG", + "XEphem.NaaGOneColor", 1, 1, + (char *)ng_newres, 0, 0, + src_appres_cb, NULL, "Single color to use in Night at a Glance"}, + + {1, "Backgrounds", 0, 0, 0, 0, 0, 0, 0, 0, + "Target colors in various background contexts"}, + {0, "- All -", /* N.B. must be first so others override */ + "XEphem*background", 1, 1, + 0, 0, 0, + src_bg_cb, isAny, "Color of all backgrounds -- do first, then details"}, + {0, "Text fields", + "XEphem*XmTextField.background", 1, 1, + 0, 0, 0, + src_bg_cb, isTextF, "Color of 1-line text field backgrounds"}, + {0, "Text boxes", + "XEphem*XmText.background", 1, 1, + 0, 0, 0, + src_bg_cb, isText, "Color of multiline text field backgrounds"}, + {0, "Lists", + "XEphem*XmList.background", 1, 1, + 0, 0, 0, + src_bg_cb, isList, "Color of lists background"}, + {0, "Tips", + "XEphem.tipBackground", 1, 1, + (char *)wtip_init, 0, 0, + src_appres_cb, NULL, "Color of background in bubble tips"}, + {0, "Moon", + "XEphem.MoonBackground", 1, 1, + (char *)m_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Moon window"}, + {0, "Mars", + "XEphem.MarsBackground", 1, 1, + (char *)mars_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Mars windows"}, + {0, "Jupiter", + "XEphem.JupiterBackground", 1, 1, + (char *)jm_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Jupiter window"}, + {0, "Saturn", + "XEphem.SaturnBackground", 1, 1, + (char *)sm_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Saturn window"}, + {0, "Uranus", + "XEphem.UranusBackground", 1, 1, + (char *)um_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Uranus window"}, + {0, "Solar system", + "XEphem.SolSysBackground", 1, 1, + (char *)ss_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Solar system windows"}, + + {1, "Sky", 0, 0, 0, 0, 0, 0, 0, 0, + "Target colors used in Sky View"}, + {0, "Background sky", + "XEphem.SkyColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View sky background"}, + {0, "Cns bounds", + "XEphem.SkyCnsBndColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View constellation boundaries"}, + {0, "Cns figures", + "XEphem.SkyCnsFigColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View constellation figures"}, + {0, "Cns names", + "XEphem.SkyCnsNamColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View constellation names"}, + {0, "Annotation", + "XEphem.SkyAnnotColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Sky View annotation color"}, + {0, "Eyepieces", + "XEphem.SkyEyePColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View eyepieces"}, + {0, "Grid", + "XEphem.SkyGridColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View grid and labels"}, + {0, "Milky Way", + "XEphem.SkyMWColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Milky Way outline in Sky View"}, + {0, "Coord planes", + "XEphem.SkyEqColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, + "Color of Sky View equatorial, ecliptic and galactic planes"}, + {0, "Horizon", + "XEphem.HorizonColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View horizon profile"}, + {0, "Dim star", + "XEphem.DimStarColor", 1, 1, + (char *)skyview_newres, 0, 0, + src_appres_cb, NULL, "Color of Sky View stars near mag cutoff"}, + + {1, "Earth", 0, 0, 0, 0, 0, 0, 0, 0, + "Target colors used in Earth view"}, + {0, "Sun light", + "XEphem.EarthSunColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color of sunlit portion of Earth surface"}, + {0, "Grid", + "XEphem.EarthGridColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color of coordinate grid"}, + {0, "Sites", + "XEphem.EarthSiteColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color of dots which denote each pickable Site"}, + {0, "Totality", + "XEphem.EarthEclipseColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, + "Color of mark denoting location of totality during solar eclipse"}, + {0, "Continents", + "XEphem.EarthBorderColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw continent outlines"}, + {0, "Here cross", + "XEphem.EarthHereColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color of cross marking focus position"}, + {0, "Great Circle", + "XEphem.EarthGreatCircleColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color of Great Circle"}, + {0, "Background", + "XEphem.EarthBackground", 1, 1, + (char *)e_newres, 0, 0, + src_appres_cb, NULL, "Color of background in Earth window"}, + + {1, "Objects", 0, 0, 0, 0, 0, 0, 0, 0, + "Target colors used to identify specific objects or code a major characteristic"}, + {0, "Mercury", + "XEphem.mercuryColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Mercury on maps"}, + {0, "Venus", + "XEphem.venusColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Venus on maps"}, + {0, "Mars", + "XEphem.marsColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Mars on maps"}, + {0, "Jupiter", + "XEphem.jupiterColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Jupiter on maps"}, + {0, "Saturn", + "XEphem.saturnColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Saturn on maps"}, + {0, "Uranus", + "XEphem.uranusColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Uranus on maps"}, + {0, "Neptune", + "XEphem.neptuneColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Neptune on maps"}, + {0, "Pluto", + "XEphem.plutoColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw Pluto on maps"}, + {0, "Sun", + "XEphem.sunColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw the Sun on maps"}, + {0, "Moon", + "XEphem.moonColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw the Moon on maps"}, + {0, "Asteroids", + "XEphem.solSysColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw asteroids and comets on maps"}, + {0, "Satellites", + "XEphem.satellitesColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw earth satellites on maps"}, + {0, "Other objs", + "XEphem.otherObjColor", 1, 1, + 0, 0, 0, + src_obj_cb, NULL, "Color used to draw objects of unknown type on maps"}, +}; + +static char preffontcategory[] = "Main -- Preferences -- Fonts"; +static char prefcolrcategory[] = "Main -- Preferences -- Colors"; +static char prefsavecategory[] = "Main -- Preferences -- Save"; + +#define MAXSCALE 255 /* max value in color scales */ + +/* register the given widget and/or resource to the collection we use for Save, + * assigning it to the given category. + * if !w then res is a resource to monitor purely via Xrm. + * if !res then w is the widget to follow and has a real entry in fallbacks[]. + * if both then w is the widget to follow but fallbacks[] has a resource. + * if neither then this is illegal! + * autosav indicates whether this resource is automatically marked for save + * when its value changes. + * N.B. memory at res and cat must be permanent. + * N.B. we assume this is called before app changes anything from its initial + * value. + */ +void +sr_reg (w, res, cat, autosav) +Widget w; +char *res; +char *cat; +int autosav; +{ + Resource *rp, newr, *newrp = &newr; + char *val; + + /* need at least one */ + if (!w && !res) { + printf ("Bug! Nothing for sr_reg()\n"); + abort(); + } + + /* one-time setup */ + sr_init(); + + /* init new Resource */ + memset (newrp, 0, sizeof(*newrp)); + newrp->cati = findCat (cat); + newrp->fb = res ? findRFB(res) : findWFB (w); + newrp->live_w = w; + getCurVal (newrp, &val); + newrp->val = XtNewString (val); + newrp->lsv = XtNewString (val); + XtFree (val); + newrp->new = newrp->save = 0; + newrp->autosav = autosav; + + /* expand list of resources */ + reslist = (Resource *) XtRealloc ((char *)reslist, + (nreslist+1)*sizeof(Resource)); + + /* bubble rp to new position */ + for (rp=&reslist[nreslist-1]; rp>=reslist && cmpRes(newrp,rp)<0; --rp) + memcpy (rp+1, rp, sizeof(*rp)); + + /* insert */ + memcpy (rp+1, &newr, sizeof(newr)); + nreslist++; + + /* must refresh if up */ + if (sr_isUp()) { + sr_refresh(); + sr_display(); + } +} + +/* unregister all instances of the given widget */ +void +sr_unreg (w) +Widget w; +{ + Resource *rp, *endrp; + + /* search for each matching live_w */ + endrp = &reslist[nreslist]; + for (rp = reslist; rp < endrp; rp++) { + if (rp->live_w == w) { + /* reclaim value memory */ + XtFree (rp->val); + XtFree (rp->lsv); + + /* copy down to remove from reslist, tweak scan */ + memmove (rp, rp+1, sizeof(Resource)*(endrp-(rp+1))); + endrp = &reslist[--nreslist]; + --rp; + } + } +} + +/* called to put up or remove the watch cursor on any of the Save windows */ +void +sr_cursor (c) +Cursor c; +{ + Window win; + + if (srshell_w && (win = XtWindow(srshell_w)) != 0) { + Display *dsp = XtDisplay(srshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (srfshell_w && (win = XtWindow(srfshell_w)) != 0) { + Display *dsp = XtDisplay(srfshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (srcshell_w && (win = XtWindow(srcshell_w)) != 0) { + Display *dsp = XtDisplay(srcshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* call to possibly engage night mode when first coming up. */ +void +sr_chknightv() +{ + sr_init(); + + if (XmToggleButtonGetState (nightv_w)) { + installNVBg(); + installNVFg(); + } +} + +/* return 1/0 whether either autotag is on */ +int +sr_autosaveon() +{ + sr_init(); + return (XmToggleButtonGetState (asav_w)); +} + +/* update our knowledge of each Resource's value. + * return the total number of enabled autosav entries that do not match their + * last-saved value. + */ +int +sr_refresh() +{ + char *val; + Category *lastcp; + Resource *rp; + int wantasel, wantmsel; + int totntnew, totnanew; + + sr_init(); + watch_cursor(1); + + wantasel = XmToggleButtonGetState (asel_w); + wantmsel = XmToggleButtonGetState (msel_w); + + totntnew = totnanew = 0; + lastcp = NULL; + for (rp = reslist; rp < &reslist[nreslist]; rp++) { + Category *cp = &catlist[rp->cati]; + if (lastcp != cp) { + lastcp = cp; + cp->ntnew = 0; + cp->nanew = 0; + } + getCurVal (rp, &val); + if ((rp->new = !!strcmp (val, rp->lsv))) { + if (rp->autosav) { + cp->nanew++; + totnanew++; + } else { + cp->ntnew++; + totntnew++; + } + } + rp->save = rp->new && ((rp->autosav && wantasel) + || (!rp->autosav && wantmsel)); + if (strcmp (val, rp->val)) { + XtFree (rp->val); + rp->val = XtNewString (val); + } + XtFree (val); + } + + sr_setnnew (totnanew, totntnew); + + watch_cursor(0); + return (totnanew); +} + +/* compute and display resources that have changed since last saved. + */ +void +sr_manage() +{ + /* create if first time */ + sr_init(); + watch_cursor(1); + + /* fresh report */ + sr_refresh(); + sr_display(); + watch_cursor(0); + + /* show */ + XtPopup (srshell_w, XtGrabNone); + set_something (srshell_w, XmNiconic, (XtArgVal)False); +} + +/* just like sr_manage() but exits when saving is completed */ +void +sr_xmanage() +{ + pendingexit = 1; + sr_manage(); +} + +/* bring up the font management window */ +void +srf_manage() +{ + sr_init(); + XtPopup (srfshell_w, XtGrabNone); + set_something (srfshell_w, XmNiconic, (XtArgVal)False); +} + +/* bring up the color management window */ +void +src_manage() +{ + sr_init(); + XtPopup (srcshell_w, XtGrabNone); + set_something (srcshell_w, XmNiconic, (XtArgVal)False); +} + +/* return 1/0 whether Save window is currently up */ +int +sr_isUp() +{ + return (isUp (srshell_w)); +} + +/* save the selected resources to the local file. + * when finished all resources as "up to date". + */ +int +sr_save(talk) +int talk; +{ + char nam[MRNAM]; /* resource name */ + char buf[1024]; /* handy buffer */ + char *resfn; /* full path to user's resource file */ + FILE *oldfp; /* existing resource file, if any */ + FILE *newfp; /* new resource file */ + int nnew, nrepl; /* count of entries added and replaced */ + Resource *rp; + + /* start */ + sr_init(); + watch_cursor(1); + + /* open existing if possible, rename since about to create new */ + resfn = userResFile(); + oldfp = fopen (resfn, "r"); + if (oldfp) { + fclose (oldfp); + sprintf (buf, "%s.bak", resfn); + if (rename (resfn, buf) < 0) { + xe_msg (1, "Can not backup %s:\n%s", resfn, syserrstr()); + watch_cursor(0); + return (-1); + } + oldfp = fopen (buf, "r"); + } + + /* create new resource file */ + newfp = fopen (resfn, "w"); + if (!newfp) { + if (oldfp) + fclose (oldfp); + xe_msg (1, "Can not create %s:\n%s", resfn, syserrstr()); + watch_cursor(0); + return (-1); + } + + /* scan for matching selected reslist[] entries in oldfp, replace + * in-place and mark so don't save again. + */ + nrepl = 0; + if (oldfp) { + while (!fgetres (buf, sizeof(buf), oldfp)) { + if (!crackNam (buf, nam) && (rp = findRes (nam)) && rp->save) { + fmtRes (buf, nam, rp->val); + rp->save = 0; + nrepl++; + } + fputres (newfp, buf); + } + fclose (oldfp); + } + + /* append all remaining selected entries and mark all as current */ + nnew = 0; + for (rp = reslist; rp < &reslist[nreslist]; rp++) { + if (rp->save) { + crackNam (rp->fb, nam); + fmtRes (buf, nam, rp->val); + rp->save = 0; + nnew++; + fputres (newfp, buf); + } + + /* no longer out of date */ + if (rp->new) { + XtFree (rp->lsv); + rp->lsv = XtNewString (rp->val); + rp->new = 0; + } + } + fclose (newfp); + + /* possibly inform and done */ + if (talk) { + xe_msg (1, "%s:\n%3d replaced\n%3d added", userResFile(), + nrepl, nnew); + } + watch_cursor(0); + return (0); +} + +/* this is to export our more/nomore Windows-like dir control pixmaps. + * N.B. these pixmaps should be factors out of here someday. + */ +void +sr_getDirPM (pmopen, pmclose) +Pixmap *pmopen, *pmclose; +{ + sr_init(); + *pmopen = more_pm; + *pmclose = nomore_pm; +} + +/* return full path of per-user working directory, + * allowing for possible override. + */ +char * +getPrivateDir() +{ + static char *mydir; + + if (!mydir) { + /* try mdovride else use default */ + FILE *ofp = fopenh (mdovride, "r"); + char *vhome, *vp = NULL; + char nam[MRNAM], val[MLL], buf[MLL]; + + if (ofp) { + while (fgets (buf, sizeof(buf), ofp)) { + if (!crackNam (buf, nam) && !strcmp (nam, mdres) && + !crackVal (buf, val)) { + vp = val; + break; + } + } + fclose(ofp); + if (!vp) + fprintf (stderr, "%s: %s not found. Using %s\n", + mdovride, mdres, mydirdef); + } + if (!vp) + vp = mydirdef; + vhome = expand_home(vp); + mydir = XtNewString (vhome); /* macro! */ + if (access (mydir, X_OK) < 0 && mkdir (mydir, 0744) < 0) { + /* don't try and fake it */ + printf ("%s: %s\n", mydir, syserrstr()); + abort(); + } + } + + return (mydir); +} + +/* return full path of of per-user resource file. + */ +char * +userResFile () +{ + static char *myres; + + if (!myres && !(myres = getXRes("resfile", NULL))) { + char *pd = getPrivateDir(); + myres = XtMalloc (strlen(pd) + strlen(myclass) + 2); /* '/'+'\0' */ + sprintf (myres, "%s/%s", pd, myclass); + } + + return (myres); +} + +static void +create_srshell() +{ + Widget srform_w, close_w; + Widget t_w, w; + Arg args[20]; + int n; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Save"); n++; + XtSetArg (args[n], XmNiconName, "Save"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + srshell_w = XtCreatePopupShell ("SaveRes", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (srshell_w); + set_something (srshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (srshell_w, "XEphem*SaveRes.width", prefsavecategory, 0); + sr_reg (srshell_w, "XEphem*SaveRes.height", prefsavecategory, 0); + sr_reg (srshell_w, "XEphem*SaveRes.x", prefsavecategory, 0); + sr_reg (srshell_w, "XEphem*SaveRes.y", prefsavecategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNfractionBase, 13); n++; + srform_w = XmCreateForm (srshell_w, "SRForm", args, n); + XtAddCallback (srform_w, XmNhelpCallback, sr_help_cb, 0); + XtManageChild (srform_w); + + /* controls at bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton (srform_w, "Save", args, n); + XtAddCallback (w, XmNactivateCallback, sr_save_cb, NULL); + set_xmstring (w, XmNlabelString, "Save now"); + wtip (w, "Write all tagged preferences to disk"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + w = XmCreatePushButton (srform_w, "Refresh", args, n); + wtip (w, "Tag preferences which now differ from those last saved"); + XtAddCallback (w, XmNactivateCallback, sr_refresh_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 7); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + close_w = XmCreatePushButton (srform_w, "Close", args, n); + wtip (close_w, "Close this window"); + XtAddCallback (close_w, XmNactivateCallback, sr_close_cb, NULL); + XtManageChild (close_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 12); n++; + w = XmCreatePushButton (srform_w, "Help", args, n); + wtip (w, "More information about this window"); + XtAddCallback (w, XmNactivateCallback, sr_help_cb, 0); + XtManageChild (w); + + /* title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + t_w = XmCreateLabel (srform_w, "Title", args, n); + set_xmstring (t_w, XmNlabelString, "Save Preferences"); + XtManageChild (t_w); + + /* Autosave TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, t_w); n++; + XtSetArg (args[n], XmNtopOffset, 2); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + asav_w = XmCreateToggleButton (srform_w, "AutoSave", args, n); + set_xmstring (asav_w, XmNlabelString, + " Automatically save all tagged preferences when Quitting"); + wtip (asav_w, "Silently save all tagged preferences when Quit"); + XtManageChild (asav_w); + + /* Major count */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, asav_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + /* labelPixmap is set later */ + majorres_w = XmCreateLabel (srform_w, "ChgChk", args, n); + XtManageChild (majorres_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, asav_w); n++; + XtSetArg (args[n], XmNtopOffset, 12); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, majorres_w); n++; + majorn_w = XmCreateLabel (srform_w, "ChgL", args, n); + /* label is set later */ + XtManageChild (majorn_w); + + /* Autoselect major resurces TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, majorn_w); n++; + XtSetArg (args[n], XmNtopOffset, 2); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + asel_w = XmCreateToggleButton (srform_w, "AutoSel", args, n); + XtAddCallback (asel_w, XmNvalueChangedCallback, sr_refresh_cb,NULL); + set_xmstring (asel_w, XmNlabelString, + " Automatically tag modified Major preferences for saving"); + wtip (asel_w, + "Whether modified Major preferences are selected for Saving"); + XtManageChild (asel_w); + + /* minor count */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, asel_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + /* labelPixmap is set later */ + minorres_w = XmCreateLabel (srform_w, "ChgPChk", args, n); + XtManageChild (minorres_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, asel_w); n++; + XtSetArg (args[n], XmNtopOffset, 12); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, minorres_w); n++; + minorn_w = XmCreateLabel (srform_w, "ChgL", args, n); + /* label is set later */ + XtManageChild (minorn_w); + + /* Autoselect minor resurces TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, minorn_w); n++; + XtSetArg (args[n], XmNtopOffset, 2); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 30); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + msel_w = XmCreateToggleButton (srform_w, "AutoMinorSel", args, n); + XtAddCallback (msel_w, XmNvalueChangedCallback, sr_refresh_cb,NULL); + set_xmstring (msel_w, XmNlabelString, + " Automatically tag modified Minor preferences for saving"); + wtip (msel_w, + "Whether modified Minor preferences are selected for Saving"); + XtManageChild (msel_w); + + /* the big scrolled window for all the preferences */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, msel_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, close_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + srsw_w = XmCreateScrolledWindow (srform_w, "SaveSW", args, n); + XtManageChild (srsw_w); + + /* add one dummy until first display */ + n = 0; + w = XmCreateRowColumn (srsw_w, "RCD", args, n); + XtManageChild (w); +} + +/* set majorn_w and minorn_w with message of counts */ +static void +sr_setnnew (nanew, ntnew) +int nanew; +int ntnew; +{ + char buf[128]; + + sprintf (buf, "%3d Major preference%s been modified since last Save", + nanew, nanew == 1 ? " has" : "s have"); + set_xmstring (majorn_w, XmNlabelString, buf); + sprintf (buf, "%3d Minor preference%s been modified since last Save", + ntnew, ntnew == 1 ? " has" : "s have"); + set_xmstring (minorn_w, XmNlabelString, buf); +} + +/* one-time stuff */ +static void +sr_init() +{ + int i; + + /* be harmless if called more than once */ + if (srshell_w) + return; + + /* create GUI */ + create_srshell(); + create_srcshell(); + create_srfshell(); + + /* create the pixmaps */ + sr_createpms(); + + /* handy */ + nmyclass = strlen (myclass); + + /* register our own stuff too */ + sr_reg (asav_w, NULL, prefsavecategory, 1); + sr_reg (asel_w, NULL, prefsavecategory, 1); + sr_reg (msel_w, NULL, prefsavecategory, 1); + for (i = 0; i < XtNumber(fchoices); i++) { + Choice *fcp = &fchoices[i]; + if (fcp->heading) + continue; + if (fcp->res && fcp->reg) + sr_reg((Widget)0, fcp->res, preffontcategory, fcp->autosav); + if (fcp->res2 && fcp->reg2) + sr_reg((Widget)0, fcp->res2, preffontcategory, fcp->autosav2); + } + for (i = 0; i < XtNumber(cchoices); i++) { + Choice *ccp = &cchoices[i]; + if (ccp->heading) + continue; + if (ccp->res && ccp->reg) + sr_reg((Widget)0, ccp->res, prefcolrcategory, ccp->autosav); + if (ccp->res2 && ccp->reg2) + sr_reg((Widget)0, ccp->res2, prefcolrcategory, ccp->autosav2); + } + + /* init resource counts */ + sr_setnnew (0, 0); +} + +/* (re)create the pixmaps */ +static void +sr_createpms() +{ + Display *dsp = XtDisplay(toplevel_w); + Window win = RootWindow(dsp, DefaultScreen(dsp)); + Pixel fg, bg; + int d; + + /* sneak info from All Save TB. + * turns out Motif 1.2 can not handle a Bitmap and 2.x can, but we + * go the conservative route. + */ + get_something (asav_w, XmNforeground, (XtArgVal)&fg); + get_something (asav_w, XmNbackground, (XtArgVal)&bg); + get_something (asav_w, XmNdepth, (XtArgVal)&d); + + /* create the pixmaps for the directory layout */ + +#if 0 /* TODO: freeing these confuses their widgets when destroyed */ + if (more_pm) + XFreePixmap (dsp, more_pm); + if (nomore_pm) + XFreePixmap (dsp, nomore_pm); + if (majorres_pm) + XFreePixmap (dsp, majorres_pm); + if (minorres_pm) + XFreePixmap (dsp, minorres_pm); + if (blankres_pm) + XFreePixmap (dsp, blankres_pm); +#endif + + more_pm = XCreatePixmapFromBitmapData (dsp, win, (char *)more_bits, + more_width, more_height, fg, bg, d); + nomore_pm = XCreatePixmapFromBitmapData (dsp, win, (char *)nomore_bits, + nomore_width, nomore_height, fg, bg, d); + majorres_pm = XCreatePixmapFromBitmapData (dsp,win,(char*)majorres_bits, + majorres_width, majorres_height, fg, bg, d); + minorres_pm = XCreatePixmapFromBitmapData (dsp,win,(char*)minorres_bits, + minorres_width, minorres_height, fg, bg, d); + blankres_pm = XCreatePixmapFromBitmapData (dsp,win,(char*)blankres_bits, + blankres_width, blankres_height, fg, bg, d); + + /* now can set sample checkmark */ + set_something (majorres_w, XmNlabelPixmap, (XtArgVal)majorres_pm); + set_something (minorres_w, XmNlabelPixmap, (XtArgVal)minorres_pm); +} + +/* ARGSUSED */ +static void +sr_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + watch_cursor(1); + + /* save then exit if pending */ + if (pendingexit) { + if (!sr_save(0)) + exit(0); + /* trouble saving, so stand down */ + pendingexit = 0; + } else { + (void) sr_save(1); + sr_refresh(); + sr_display(); + } + + watch_cursor(0); +} + +/* ARGSUSED */ +static void +sr_refresh_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + watch_cursor(1); + sr_refresh(); + sr_display(); + watch_cursor(0); +} + +/* ARGSUSED */ +static void +sr_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + pendingexit = 0; + XtPopdown (srshell_w); +} + +/* callback from the Help button. + */ +/* ARGSUSED */ +static void +sr_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +static char *help_msg[] = { +"Display preferences changed since last Save and allowing saving.", +}; + hlp_dialog ("Save", help_msg, sizeof(help_msg)/sizeof(help_msg[0])); +} + +/* callback from a Category expand TB. + * client is pointer to Resource. + */ +/* ARGSUSED */ +static void +sr_catexp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Resource *rp = (Resource *)client; + + catlist[rp->cati].exp = XmToggleButtonGetState(w); + sr_display(); +} + +/* callback from a Resource Save TB. + * client is pointer to Resource. + */ +/* ARGSUSED */ +static void +sr_ressav_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Resource *rp = (Resource *)client; + rp->save = XmToggleButtonGetState(w); +} + +/* compare two Resources, in qsort fashion. + * first sort by category, then by fb, pushing all !autosav after all autosav. + */ +static int +cmpRes (r1, r2) +Resource *r1, *r2; +{ + Category *c1 = &catlist[r1->cati]; + Category *c2 = &catlist[r2->cati]; + int c = strcmp (c1->name, c2->name); + + if (c) + return (c); + if (r1->autosav == r2->autosav) + return (strcmp (r1->fb, r2->fb)); + if (r1->autosav) + return (-1); + return (1); +} + +/* add one entry to rc_w for the Category used by rp */ +static void +sr_1cat (rc_w, rp) +Widget rc_w; +Resource *rp; +{ + Widget s_w, x_w, l_w, fo_w; + Category *cp = &catlist[rp->cati]; + Pixmap pm; + Arg args[20]; + int n; + + /* form */ + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 4); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + fo_w = XmCreateForm (rc_w, "CatF", args, n); + XtManageChild (fo_w); + + /* set pixmap depending on totals */ + if (cp->nanew > 0) + pm = majorres_pm; + else if (cp->ntnew > 0) + pm = minorres_pm; + else + pm = blankres_pm; + + /* label to show whether any are new */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, pm); n++; + s_w = XmCreateLabel (fo_w, "CatC", args, n); + wtip (s_w, "Checked if this category has any new unsaved preferences"); + XtManageChild (s_w); + + /* expand TB */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, s_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, more_pm); n++; + XtSetArg (args[n], XmNselectPixmap, nomore_pm); n++; + XtSetArg (args[n], XmNindicatorOn, False); n++; + XtSetArg (args[n], XmNset, cp->exp); n++; + x_w = XmCreateToggleButton (fo_w, "CatD", args, n); + wtip (x_w, "Show or Hide specific preferences for this category"); + XtAddCallback (x_w, XmNvalueChangedCallback,sr_catexp_cb,(XtPointer)rp); + XtManageChild (x_w); + + /* category name label */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, x_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + l_w = XmCreateLabel (fo_w, "CatL", args, n); + set_xmstring (l_w, XmNlabelString, cp->name); + XtManageChild (l_w); +} + +/* add one entry to rc_w for the Resource rp */ +static void +sr_1res (rc_w, rp, center) +Widget rc_w; +Resource *rp; +int center; +{ + Widget s_w, l_w, v_w, fo_w; + Arg args[20]; + Pixmap pm; + char nam[MRNAM]; + int n; + + /* form */ + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + fo_w = XmCreateForm (rc_w, "ResF", args, n); + XtManageChild (fo_w); + + /* determine pixmap */ + if (rp->new) + pm = rp->autosav ? majorres_pm : minorres_pm; + else + pm = blankres_pm; + + /* "new" label */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 44); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, pm); n++; + l_w = XmCreateLabel (fo_w, "ResC", args, n); + XtManageChild (l_w); + + /* save TB */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, l_w); n++; + XtSetArg (args[n], XmNleftOffset, 4); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNset, !!rp->save); n++; /* bitfield */ + s_w = XmCreateToggleButton (fo_w, "ResTB", args, n); + XtAddCallback (s_w, XmNvalueChangedCallback, sr_ressav_cb, + (XtPointer)rp); + XtManageChild (s_w); + wtip (s_w, "Whether to Save this preference"); + + /* value "label" -- use TB just to get same color */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, center); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorOn, False); n++; + v_w = XmCreateToggleButton (fo_w, "ResV", args, n); + XtManageChild (v_w); + + /* label with current name and val */ + crackNam (rp->fb, nam); + set_xmstring (s_w, XmNlabelString, nam); + set_xmstring (v_w, XmNlabelString, rp->val); +} + +/* make a non-autosave header */ +static void +sr_1nonas (rc_w) +Widget rc_w; +{ + Widget w, fo_w; + Arg args[20]; + int n; + + /* form */ + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + fo_w = XmCreateForm (rc_w, "ResHF", args, n); + XtManageChild (fo_w); + + /* "Not saved!" label */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, blankres_width + 25 + 4); n++; + XtSetArg (args[n], XmNmarginHeight, 2); n++; + w = XmCreateLabel (fo_w, "ResHL", args, n); + set_xmstring (w, XmNlabelString, "Minor Preferences:"); + XtManageChild (w); +} + +/* build a report from reslist[] and replace as workwindow in srsw_w. + * N.B. reslist[] assumed to be in cmpRes() sorted order. + */ +static void +sr_display() +{ + XmScrollBarCallbackStruct sbcs; + Widget ww; + Arg args[20]; + Resource *rp; + Category *lastcp; + Dimension size; + Widget vsb; + int valu, max, slsz; + int lastas; + int n; + + /* admit it is some work */ + watch_cursor(1); + + /* get current scroll bar value */ + get_something (srsw_w, XmNverticalScrollBar, (XtArgVal)&vsb); + get_something (vsb, XmNvalue, (XtArgVal)&valu); + + /* get location for values */ + get_something (srshell_w, XmNwidth, (XtArgVal)&size); + size = 2*size/3; + + /* replace workWindow */ + get_something (srsw_w, XmNworkWindow, (XtArgVal)&ww); + XtDestroyWidget (ww); + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + ww = XmCreateRowColumn (srsw_w, "SRRC", args, n); + set_something (srsw_w, XmNworkWindow, (XtArgVal)ww); + + /* fill with each category and resource */ + lastcp = NULL; + lastas = 0; + for (rp = reslist; rp < &reslist[nreslist]; rp++) { + if (lastcp != &catlist[rp->cati]) { + lastcp = &catlist[rp->cati]; + sr_1cat (ww, rp); + lastas = 1; + } + if (lastcp->exp) { + if (!rp->autosav && lastas) { + /* put header over first non-autosav */ + sr_1nonas (ww); + lastas = 0; + } + sr_1res (ww, rp, size); + } + } + + /* show it */ + XtManageChild (ww); + + /* set vertical scroll position to maintain same location */ + get_something (vsb, XmNmaximum, (XtArgVal)&max); + get_something (vsb, XmNsliderSize, (XtArgVal)&slsz); + if (valu > max - slsz) + valu = max - slsz; + set_something (vsb, XmNvalue, (XtArgVal)valu); + + /* yud think setting a new value would affect the change, but noo + * (and yes we tried valu+1) + */ + sbcs.reason = XmCR_VALUE_CHANGED; + sbcs.event = NULL; /* ? */ + sbcs.value = valu; + XtCallCallbacks (vsb, XmNvalueChangedCallback, &sbcs); + XmUpdateDisplay (srshell_w); /* helps insure scroll kicks in */ + + watch_cursor (0); +} + +/* given a full resource spec, extract name, sans any surrounding white space. + * return 0 if ok, or -1 if doesn't even look like a resource. + */ +static int +crackNam (res, nam) +char *res, *nam; +{ + char *colp = strchr (res, ':'); + char wsnam[MRNAM]; + + if (!colp || strncmp (res, myclass, nmyclass)) + return (-1); + sprintf (wsnam, "%.*s", (int)(colp-res), res); + cpyNoWS (nam, wsnam); + return(0); +} + +/* given a full resource spec, extract value, sans any surrounding white space. + * return 0 if ok, or -1 if doesn't even look like a resource. + */ +static int +crackVal (res, val) +char *res, *val; +{ + char *colp = strchr (res, ':'); + + if (!colp || strncmp (res, myclass, nmyclass)) + return (-1); + cpyNoWS (val, colp+1); + return (0); +} + +/* find the fallback that corresponds to w. + * TODO: using XtNameToWidget precludes cases of multiple instances, eg plot. + */ +static char * +findWFB (findw) +Widget findw; +{ + char wnam[MRNAM]; + Widget w; + char *fb, **fbp; + char *findn; + char *dot; + + /* fallback[] must at least contain root name */ + findn = XtName(findw); + + /* scan fallbacks */ + for (fbp = fallbacks; (fb = *fbp) != NULL; fbp++) { + if (!strstr(fb, findn)) + continue; + crackNam (fb, wnam); + /* chop off widget's own resource, if any */ + dot = strrchr (wnam, '.'); + if (dot && (!strcmp (dot, ".value") || !strcmp (dot, ".set") + || !strcmp (dot, ".labelString"))) + *dot = '\0'; + w = XtNameToWidget (toplevel_w, wnam+nmyclass); + if (w == findw) + return (fb); + } + + printf ("Bug! No fallback for widget %s\n", fullWName(findw, wnam)); + abort(); + return (0); /* lint */ +} + +/* find the fallback that corresponds to res. + */ +static char * +findRFB (res) +char *res; +{ + char fbnam[MRNAM]; + char resnam[MRNAM]; + char **fbp; + + /* create full res name */ + if (strncmp (res, myclass, nmyclass)) + sprintf (resnam, "%s.%s", myclass, res); + else + strcpy (resnam, res); + + /* scan fallbacks */ + for (fbp = fallbacks; *fbp; fbp++) { + crackNam (*fbp, fbnam); + if (!strcmp (fbnam, resnam)) + return (*fbp); + } + + printf ("Bug! No fallback for resource %s\n", res); + abort(); + return (0); /* lint */ +} + +/* print "nam":"val" into res; try to look nice */ +static void +fmtRes (res, nam, val) +char *res, *nam, *val; +{ + int rl; + + rl = sprintf (res, "%s: ", nam); + if (rl < RESWID) + sprintf (res+rl, "%*s%s", RESWID-rl, "", val); + else + sprintf (res+rl, "%s", val); +} + +/* copy from[] to to[], sans any white space on either end. + */ +static void +cpyNoWS (to, from) +char *to; +char *from; +{ + char *lastnwsp; /* last non w/s char in to not counting '\0' */ + + while (isspace(*from)) + from++; + for (lastnwsp = NULL; (*to = *from) != '\0'; to++, from++) + if (!isspace(*to)) + lastnwsp = to; + if (lastnwsp) + *++lastnwsp = '\0'; +} + +/* search for resource with the given name. + * if find, return pointer else NULL. + * TODO: speed this up somehow making use of knowing it is in cmpRes() order? + */ +static Resource * +findRes (findnam) +char *findnam; +{ + char nam[MRNAM]; + int i; + + for (i = 0; i < nreslist; i++) { + (void) crackNam (reslist[i].fb, nam); + if (!strcmp (findnam, nam)) + return (&reslist[i]); + } + + /* nope */ + return (NULL); +} + +/* put full name of w into buf[] */ +static char * +fullWName (w, buf) +Widget w; +char *buf; +{ + if (w == toplevel_w) + sprintf (buf, "%s", XtName(w)); + else { + Widget pw = XtParent (w); + buf = fullWName (pw, buf); + sprintf (buf+strlen(buf), ".%s", XtName(w)); + } + return (buf); +} + +/* scan catlist[] and return index of entry with name of cat, making a new + * entry if none currently exist. + */ +static int +findCat (cat) +char *cat; +{ + Category *cp; + + for (cp = catlist; cp < &catlist[ncatlist]; cp++) + if (!strcmp (cat, cp->name)) + return (cp - catlist); + + catlist = (Category *) XtRealloc ((char *)catlist, + (ncatlist+1)*sizeof(Category)); + cp = &catlist[ncatlist++]; + memset (cp, 0, sizeof(*cp)); + cp->name = cat; + return (cp - catlist); +} + +/* called once for each resource in entire database. + * if find a match to _xrmNam copy malloced value to xrmVal and return True, + * else return False. + */ +static char *_xrmNam; +static char *_xrmVal; +/* stolen from appres.c and Xlib Xrm.c */ +/*ARGSUSED*/ +static Bool +DumpEntry(db, bindings, quarks, type, value, data) +XrmDatabase *db; +XrmBindingList bindings; +XrmQuarkList quarks; +XrmRepresentation *type; +XrmValuePtr value; +XPointer data; +{ + static XrmQuark qstring; + char buf[MRNAM]; + int l = 0; + Bool firstNameSeen; + + if (!qstring) + qstring = XrmPermStringToQuark("String"); + + if (*type != qstring) + return (False); + + /* build name */ + for (firstNameSeen = False; *quarks; bindings++, quarks++) { + if (*bindings == XrmBindLoosely) + l += sprintf (buf+l, "*"); + else if (firstNameSeen) + l += sprintf (buf+l, "."); + firstNameSeen = True; + l += sprintf (buf+l, "%s", XrmQuarkToString(*quarks)); + } + + /* compare to _xrmNam */ + if (l > 0 && !strcmp (buf, _xrmNam)) { + /* bingo! */ + _xrmVal = XtMalloc ((int)value->size + 1); + sprintf (_xrmVal, "%.*s", (int)value->size, value->addr); + return (True); + } + + return (False); +} + +/* search entire display resource database for entry matching nam[]. + * if find copy malloced value to *val and return 0, else return -1. + */ +static int +getXrmDB (nam, val) +char *nam, **val; +{ + XrmDatabase db = XtDatabase(XtDisplay(toplevel_w)); + XrmName names[101]; + XrmClass classes[101]; + Bool r; + + XrmStringToNameList("xephem", names); + XrmStringToClassList(myclass, classes); + + /* call DumpEntry for each entry in display database. + * if find, malloced value is in _xrmVal + */ + _xrmNam = nam; + r = XrmEnumerateDatabase(db, names, classes, XrmEnumAllLevels, + DumpEntry, 0); + if (r == True) { + *val = XtNewString(_xrmVal); + XtFree(_xrmVal); + _xrmVal = NULL; + return (0); + } + return (-1); +} + +/* given a Shell widget, dig up to the root and find the x/y location of + * the window manager's window. This is want is wanted in the *.x and *.y + * resources (which are similar to *.geometry, hence the name). + * if we run into trouble, we just return .x and .y from w. + */ +static void +getGeometry (w, xp, yp) +Widget w; +int *xp, *yp; +{ + Display *dsp = XtDisplay(w); + Window win = XtWindow (w); + XWindowAttributes xwa;; + + /* in case we get called before we are realized */ + if (!win) { + Position x, y; + punt: + get_something (w, XmNx, (XtArgVal)&x); + get_something (w, XmNy, (XtArgVal)&y); + *xp = x; + *yp = y; + return; + } + + /* move win up until win is child of root */ + while (1) { + Window *children = NULL; + unsigned int nchildren; + Window root, parent; + + if (!XQueryTree (dsp, win, &root, &parent, &children, &nchildren)) + goto punt; + if (children) + XFree((char *)children); + if (parent == root) + break; + win = parent; + } + + /* use win's location as shell's location */ + if (!XGetWindowAttributes(dsp, win, &xwa)) + goto punt; + *xp = xwa.x; + *yp = xwa.y; +} + +/* dig out the current value of rp as a string and fill into malloced *valp. + * exit if fails. + */ +static void +getCurVal (rp, valp) +Resource *rp; +char **valp; +{ + /* if in night vision mode, just return the "current" value of the + * resource, don't actually read its real value since we know that is + * different because night mode is in effect and that is not + * interesting. + */ + if (rp->val && XmToggleButtonGetState (nightv_w) && + (strstr (rp->fb, ".foreground") || strstr (rp->fb, "background"))) { + *valp = XtNewString (rp->val); + return; + } + + if (rp->live_w) { + Widget w = rp->live_w; + + if (XmIsToggleButton(w)) { + *valp = XtMalloc (6); + strcpy (*valp, XmToggleButtonGetState(w) ? "True" : "False"); + } else if (XmIsLabel(w)) { + get_xmstring (w, XmNlabelString, valp); + cpyNoWS(*valp, *valp); + } else if (XmIsTextField(w) || XmIsText(w)) { + if (strstr (rp->fb, ".value")) { + *valp = XmTextGetString (w); + cpyNoWS (*valp, *valp); + } else if (strstr (rp->fb, ".rows")) { + short n; + get_something (w, XmNrows, (XtArgVal)&n); + *valp = XtMalloc (20); + sprintf (*valp, "%d", n); + } else if (strstr (rp->fb, ".columns")) { + short n; + get_something (w, XmNcolumns, (XtArgVal)&n); + *valp = XtMalloc (20); + sprintf (*valp, "%d", n); + } else if (strstr (rp->fb, ".height")) { + Dimension d; + get_something (w, XmNheight, (XtArgVal)&d); + *valp = XtMalloc (20); + sprintf (*valp, "%d", d); + } else { + char nam[MRNAM]; + printf ("Bug! %s not supported from %s\n", rp->fb, + fullWName(w,nam)); + abort(); + } + } else if (XmIsScale(w)) { + int i; + XmScaleGetValue (w, &i); + *valp = XtMalloc (20); + sprintf (*valp, "%d", i); + } else if (XtIsShell(w)) { + Dimension d; + int i; + + if (strstr (rp->fb, ".width")) { + get_something (w, XmNwidth, (XtArgVal)&d); + i = d; + } else if (strstr (rp->fb, ".height")) { + get_something (w, XmNheight, (XtArgVal)&d); + i = d; + } else if (strstr (rp->fb, ".x")) { + int tmp; + getGeometry (w, &i, &tmp); + } else if (strstr (rp->fb, ".y")) { + int tmp; + getGeometry (w, &tmp, &i); + } else { + char nam[MRNAM]; + printf ("Bug! Only w/h from Shell %s\n", fullWName(w,nam)); + abort(); + } + *valp = XtMalloc (20); + sprintf (*valp, "%d", i); + } else { + char nam[MRNAM]; + printf ("Bug! Unsupported Save type for %s\n",fullWName(w,nam)); + abort(); + } + } else { + /* try app resource, then whole display db */ + char *vp, nam[MRNAM]; + + crackNam (rp->fb, nam); + if (nam[nmyclass]=='.' && (vp=getXRes(nam+nmyclass+1,NULL)) != 0) + *valp = XtNewString (vp); + else if (getXrmDB (nam, valp) < 0) { + printf ("Bug! No Save value for %s\n", rp->fb); + abort(); + } + } +} + +/* starting with w, load it and all children for which (*isf)(w) is true + * with args[nargs] + */ +static void +loadArgsChildren (w, isf, args, nargs) +Widget w; +int (*isf)(); +Arg *args; +int nargs; +{ + if (XtIsComposite (w)) { + WidgetList children; + Cardinal numChildren; + int i; + + get_something (w, XmNchildren, (XtArgVal)&children); + get_something (w, XmNnumChildren, (XtArgVal)&numChildren); + for (i = 0; i < (int)numChildren; i++) + loadArgsChildren (children[i], isf, args, nargs); + for (i = 0; i < (int)w->core.num_popups; i++) + loadArgsChildren (w->core.popup_list[i], isf, args, nargs); + } + + if ((*isf)(w)) { + /* gadgets rely on their parents for most things */ + if (XmIsLabelGadget(w) /* includes all *Buttons */ + || XmIsSeparatorGadget(w) || XmIsArrowButtonGadget(w)) { + /* beware changing non-realize*/ + if (XtWindow(w)) + w = XtParent(w); + } + XtSetValues (w, args, nargs); + } +} + +/* Font control */ + +/* display the named font in srfsample_w and store name in srfsname_w */ +static void +srf_showsample (xlfd) +char *xlfd; +{ + Display *dsp = XtDisplay (toplevel_w); + XFontStruct *fsp; + XmFontList fl; + XmFontListEntry entry; + Arg args[20]; + int n; + + fsp = XLoadQueryFont (dsp, xlfd); + if (!fsp) { + xe_msg (1, "%s\nFont not found", xlfd); + return; + } + entry = XmFontListEntryCreate(XmSTRING_DEFAULT_CHARSET, + XmFONT_IS_FONT, (XtPointer)fsp); + fl = XmFontListAppendEntry(NULL,entry); + n = 0; + XtSetArg (args[n], XmNfontList, fl); n++; + XtSetValues (srfsample_w, args, n); + XmFontListFree (fl); + + set_xmstring (srfsname_w, XmNlabelString, xlfd); +} + +/* add the given xlfd to the scrolled history list if not already present */ +static void +srf_addhistory (xlfd) +char *xlfd; +{ + XmString xms = XmStringCreateSimple (xlfd); + if (!XmListItemExists (srfhl_w, xms)) + XmListAddItem (srfhl_w, xms, 0); + XmListSelectItem (srfhl_w, xms, False); + XmListSetBottomItem (srfhl_w, xms); + XmStringFree (xms); +} + +/* perform the Get-and-show current or default actions for the Choice */ +static void +srf_getshow (fcp) +Choice *fcp; +{ + Resource *rp = findRes (fcp->res); + char *val = NULL; + char *xlfd; + + if (XmToggleButtonGetState (fgetc_w)) { + /* get current */ + getCurVal (rp, &val); + xlfd = val; + } else { + /* get default */ + xlfd = rp->lsv; + } + + /* show */ + srf_showsample (xlfd); + srf_addhistory (xlfd); + + if (val) + XtFree(val); +} + +/* install xlfd in res and maybe res2 in database and our history list. + * return XFontStruct if ok else NULL if xlfd is bogus. + * N.B. caller should not XFreeFont with returned value, even if it does not + * need it immediately; doing so will blow when the using widget runs; + * evidently it must remain loaded. + */ +static XFontStruct * +srf_install (res, res2, xlfd) +char *res, *res2; +char *xlfd; +{ + Display *dsp = XtDisplay(toplevel_w); + XrmDatabase db = XrmGetDatabase (dsp); + XFontStruct *fsp = XLoadQueryFont (dsp, xlfd); + Resource *rp; + char buf[MLL]; + + /* check that xlfd is real */ + if (!fsp) { + xe_msg (1, "%s\nFont not found", xlfd); + return(NULL); + } + + /* install in db for new */ + fmtRes (buf, res, xlfd); + XrmPutLineResource (&db, buf); + if (res2) { + fmtRes (buf, res2, xlfd); + XrmPutLineResource (&db, buf); + } + + /* add lsv to history if new */ + rp = findRes (res); + srf_addhistory (rp->lsv); + if (res2) { + rp = findRes (res2); + srf_addhistory (rp->lsv); + } + + /* add to history if new */ + srf_addhistory (xlfd); + + /* ok */ + return (fsp); +} + +/* called when a class button is activated for a font. + * client is pointer to a fchoice + */ +/* ARGSUSED */ +static void +srf_go_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *fcp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (fsetd_w))) { + Resource *rp = findRes (fcp->res); + srf_showsample (rp->lsv); + } + + if (setdef || XmToggleButtonGetState (fappto_w)) { + char *xlfd; + XFontStruct *fsp; + XmFontListEntry entry; + Arg args[1]; + + /* get name of font */ + get_xmstring (srfsname_w, XmNlabelString, &xlfd); + + /* save in db and show in history */ + fsp = srf_install (fcp->res, fcp->res2, xlfd); + if (fsp) { + entry = XmFontListEntryCreate(XmSTRING_DEFAULT_CHARSET, + XmFONT_IS_FONT, (XtPointer)fsp); + XmFontList fl = XmFontListAppendEntry(NULL,entry); + + /* distribute to existing widgets */ + XtSetArg (args[0], XmNfontList, fl); + loadArgsChildren (toplevel_w, fcp->isf, args, 1); + XmFontListFree (fl); + + /* spread the word */ + ng_newres(); + obj_newres(); + } + + /* done */ + XtFree (xlfd); + } else + srf_getshow (fcp); +} + +/* called to change any one app defined font resource. + * client is pointer to a Choice + * ccp->res2 is really a pointer to the *_newres() function to call. + */ +/* ARGSUSED */ +static void +srf_appres_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *fcp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (fsetd_w))) { + Resource *rp = findRes (fcp->res); + srf_showsample (rp->lsv); + } + + if (setdef || XmToggleButtonGetState (fappto_w)) { + char *xlfd; + + /* get name of font */ + get_xmstring (srfsname_w, XmNlabelString, &xlfd); + + /* save in db and show in history, then tell */ + if (srf_install (fcp->res, NULL, xlfd) && fcp->res2) + ((void (*)())fcp->res2)(); + + /* done */ + XtFree (xlfd); + } else + srf_getshow (fcp); +} + +/* called when viewsFont is to be set. + * client is pointer to a Choice + */ +/* ARGSUSED */ +static void +srf_views_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *fcp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (fsetd_w))) { + Resource *rp = findRes (fcp->res); + srf_showsample (rp->lsv); + } + + if (setdef || XmToggleButtonGetState (fappto_w)) { + XFontStruct *fsp; + char *xlfd; + + /* get name of font */ + get_xmstring (srfsname_w, XmNlabelString, &xlfd); + + /* save in db and show in history, then install and tell all */ + fsp = srf_install (fcp->res, fcp->res2, xlfd); + if (fsp) { + /* install */ + set_views_font(XtDisplay(w), fsp); + + /* spread the word */ + ng_newres(); + m_newres(); + mars_newres(); + ss_newres(); + skyview_newres(); + } + + /* done */ + XtFree (xlfd); + } else + srf_getshow (fcp); +} + +/* called when cursorTrackingFont is to be set. + * client is pointer to a Choice + */ +/* ARGSUSED */ +static void +srf_tracking_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *fcp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (fsetd_w))) { + Resource *rp = findRes (fcp->res); + srf_showsample (rp->lsv); + } + + if (setdef || XmToggleButtonGetState (fappto_w)) { + XFontStruct *fsp; + char *xlfd; + + /* get name of font */ + get_xmstring (srfsname_w, XmNlabelString, &xlfd); + + /* save in db and show in history */ + fsp = srf_install (fcp->res, fcp->res2, xlfd); + if (fsp) { + /* install */ + set_tracking_font(XtDisplay(w), fsp); + + /* spread the word */ + e_newres(); + skyview_newres(); + sun_newres(); + } + + /* done */ + XtFree (xlfd); + } else + srf_getshow (fcp); +} + +/* called when moonsFont is to be set. + * client is pointer to a fchoice + */ +/* ARGSUSED */ +static void +srf_moons_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *fcp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (fsetd_w))) { + Resource *rp = findRes (fcp->res); + srf_showsample (rp->lsv); + } + + if (setdef || XmToggleButtonGetState (fappto_w)) { + XFontStruct *fsp; + char *xlfd; + + /* get name of font */ + get_xmstring (srfsname_w, XmNlabelString, &xlfd); + + /* save in db and show in history */ + fsp = srf_install (fcp->res, fcp->res2, xlfd); + if (fsp) { + /* install */ + set_views_font(XtDisplay(w), fsp); + + /* spread the word */ + mars_newres(); + sm_newres(); + jm_newres(); + um_newres(); + } + + /* done */ + XtFree (xlfd); + } else + srf_getshow (fcp); +} + +/* called when an item in the font history list is selected */ +/* ARGSUSED */ +static void +srf_hist_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListCallbackStruct *lp = (XmListCallbackStruct *)call; + char *txt; + + XmStringGetLtoR (lp->item, XmSTRING_DEFAULT_CHARSET, &txt); + XmTextFieldSetString (srfpat_w, txt); + srf_showsample (txt); + XtFree (txt); +} + +/* called to clear font pattern field */ +/* ARGSUSED */ +static void +srf_clear_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmTextFieldSetString (srfpat_w, ""); +} + + +/* called to Search for the fonts named in the pattern field. + * N.B. used by a PushButton and a TextField so don't use call. + */ +/* ARGSUSED */ +static void +srf_search_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + srf_search (); +} + +/* called to clear font history list */ +/* ARGSUSED */ +static void +srf_clrhistory_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListDeleteAllItems (srfhl_w); +} + +/* called to close font chooser */ +/* ARGSUSED */ +static void +srf_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (srfshell_w); +} + +/* callback from the font Help button. + */ +/* ARGSUSED */ +static void +srf_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +static char *fhelp_msg[] = { +"Type a font, then install into the specified widgets.", +}; + hlp_dialog ("Save_fonts", fhelp_msg, + sizeof(fhelp_msg)/sizeof(fhelp_msg[0])); +} + +/* compare two strings, qsort-style */ +static int +cmpStr (const void *p1, const void *p2) +{ + return (strcmp (*(char **)p1, *(char **)p2)); +} + +/* fill list srfaf_w with names matching pattern in srfpat_w */ +static void +srf_search () +{ + Display *dsp = XtDisplay (toplevel_w); + char *pattern; + char **names, **namescpy; + int i, nnames; + + /* get all font names matching pattern */ + pattern = XmTextFieldGetString (srfpat_w); + names = XListFonts (dsp, pattern, 99999, &nnames); + if (!nnames) { + xe_msg (1, "No fonts match pattern\n%s", pattern); + XtFree (pattern); + return; + } + XtFree (pattern); + + /* seems XFreeFontNames doesn't like the names to be rearranged + * so must sort a copy. + */ + namescpy = (char **)XtMalloc (nnames*sizeof(char *)); + for (i = 0; i < nnames; i++) + namescpy[i] = XtNewString (names[i]); + qsort ((void *)namescpy, nnames, sizeof(char *), cmpStr); + + /* build fresh list */ + XmListDeleteAllItems (srfaf_w); + for (i = 0; i < nnames; i++) { + XmString str = XmStringCreateSimple (namescpy[i]); + XmListAddItem (srfaf_w, str, 0); + XmStringFree (str); + XtFree(namescpy[i]); + } + + /* clean up */ + XtFree ((char *)namescpy); + XFreeFontNames (names); +} + +/* called when an item in the font list is selected */ +/* ARGSUSED */ +static void +srf_sel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListCallbackStruct *lp = (XmListCallbackStruct *)call; + char *txt; + + XmStringGetLtoR (lp->item, XmSTRING_DEFAULT_CHARSET, &txt); + srf_showsample (txt); + XtFree (txt); +} + +/* build menus across the given menu bar based on given array of Choices */ +static void +create_menus (mb_w, cp, ncp) +Widget mb_w; +Choice *cp; +int ncp; +{ + Widget pd_w = (Widget)0, cb_w, w; + Choice *lastcp; + Arg args[20]; + int n; + + for (lastcp = &cp[ncp]; cp < lastcp; cp++) { + if (cp->heading) { + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "SPD", args, n); + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, cp->title[0]); n++; + cb_w = XmCreateCascadeButton (mb_w, "SCB", args, n); + set_xmstring (cb_w, XmNlabelString, cp->title); + if (cp->tip) + wtip (cb_w, cp->tip); + XtManageChild (cb_w); + } else { + n = 0; + w = XmCreatePushButton (pd_w, "SPB", args, n); + XtAddCallback (w, XmNactivateCallback, cp->cb, (XtPointer)cp); + set_xmstring (w, XmNlabelString, cp->title); + if (cp->tip) + wtip (w, cp->tip); + XtManageChild (w); + cp->w = w; + } + } +} + +static void +create_srfshell() +{ + Widget mf_w, w; + Widget tl_w, al_w; + Widget mb_w, pd_w, cb_w; + Widget rb_w, sep_w; + Arg args[20]; + int n; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Fonts"); n++; + XtSetArg (args[n], XmNiconName, "Fonts"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + srfshell_w = XtCreatePopupShell ("Fonts", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (srfshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (srfshell_w, "XEphem*Fonts.x", preffontcategory, 0); + sr_reg (srfshell_w, "XEphem*Fonts.y", preffontcategory, 0); + sr_reg (srfshell_w, "XEphem*Fonts.width", preffontcategory, 0); + sr_reg (srfshell_w, "XEphem*Fonts.height", preffontcategory, 0); + + /* master form */ + + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_GROW); n++; + mf_w = XmCreateForm (srfshell_w, "SRFMF", args, n); + XtAddCallback (mf_w, XmNhelpCallback, srf_help_cb, 0); + XtManageChild (mf_w); + + /* menu bar */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (mf_w, "FMB", args, n); + XtManageChild (mb_w); + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "FCPD", args, n); + n = 0; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Control", args, n); + wtip (cb_w, "Access to font controls"); + XtManageChild (cb_w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, srf_close_cb, NULL); + XtManageChild (w); + + create_menus (mb_w, fchoices, XtNumber(fchoices)); + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "FHPD", args, n); + n = 0; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Help", args, n); + wtip (cb_w, "Additional help"); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + XtManageChild (cb_w); + + n = 0; + w = XmCreatePushButton (pd_w, "Help", args, n); + wtip (w, "More info about this window"); + XtAddCallback (w, XmNactivateCallback, srf_help_cb, NULL); + XtManageChild (w); + + /* sub-master form -- same but with inner spacing */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + mf_w = XmCreateForm (mf_w, "SRFMF2", args, n); + XtManageChild (mf_w); + + /* "Action" label and menu on top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + al_w = XmCreateLabel (mf_w, "TFL", args, n); + set_xmstring (al_w, XmNlabelString, "Choose action here first:"); + XtManageChild (al_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, al_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 20); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 2); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + rb_w = XmCreateRadioBox (mf_w, "SFRB", args, n); + XtManageChild (rb_w); + + n = 0; + XtSetArg (args[n], XmNset, True); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + fgetc_w = XmCreateToggleButton (rb_w, "Get", args, n); + set_xmstring (fgetc_w, XmNlabelString, "Get current"); + wtip (fgetc_w, + "Choosing a menu target retrieves its current font"); + XtManageChild (fgetc_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + fgetd_w = XmCreateToggleButton (rb_w, "GDef", args, n); + set_xmstring (fgetd_w, XmNlabelString, "Get default"); + wtip (fgetd_w,"Choosing a menu target retrieves its default font"); + XtManageChild (fgetd_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + fappto_w = XmCreateToggleButton (rb_w, "Set", args, n); + set_xmstring (fappto_w, XmNlabelString, "Set"); + wtip (fappto_w, "Choosing a menu target sets its font"); + XtManageChild (fappto_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + fsetd_w = XmCreateToggleButton (rb_w, "SDef", args, n); + set_xmstring (fsetd_w, XmNlabelString, "Restore default"); + wtip (fsetd_w, "Choosing a menu target restores its default font"); + XtManageChild (fsetd_w); + + /* "Target" directions */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + tl_w = XmCreateLabel (mf_w, "TL", args, n); + set_xmstring (tl_w, XmNlabelString,"Then set target from menus above."); + XtManageChild (tl_w); + + /* sep */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (mf_w, "FSEP", args, n); + XtManageChild (sep_w); + + /* title for font pattern and a few controls */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (mf_w, "PL", args, n); + set_xmstring (w, XmNlabelString, "Font pattern:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + w = XmCreatePushButton (mf_w, "Clear", args, n); + XtAddCallback (w, XmNactivateCallback, srf_clear_cb, NULL); + wtip (w, "Erase font pattern"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + w = XmCreatePushButton (mf_w, "Search", args, n); + XtAddCallback (w, XmNactivateCallback, srf_search_cb, NULL); + wtip (w, "Search all fonts for those matching pattern"); + XtManageChild (w); + + /* TF for font pattern */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + srfpat_w = XmCreateTextField (mf_w, "Pattern", args, n); + XtAddCallback (srfpat_w, XmNactivateCallback, srf_search_cb, NULL); + wtip (srfpat_w, "Limit font list to those matching this pattern"); + sr_reg (srfpat_w, "XEphem*Fonts*Pattern.value", preffontcategory, 0); + XtManageChild (srfpat_w); + + /* scrolled list is built last so it grows with shell */ + + /* label for name of and sample at bottom */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + srfsname_w = XmCreateLabel (mf_w, "TFL", args, n); + set_xmstring (srfsname_w, XmNlabelString, " "); + XtManageChild (srfsname_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, srfsname_w); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNheight, 100); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + srfsample_w = XmCreateLabel (mf_w, "TFL", args, n); + set_xmstring (srfsample_w, XmNlabelString, +"\ +ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\ +abcdefghijklmnopqrstuvwxyz\n\ +01234567890 ±²³´µ¶·¸¹°"); + + XtManageChild (srfsample_w); + + /* history scrolled list */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, srfsample_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNvisibleItemCount, 8); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + XtSetArg (args[n], XmNlistSizePolicy, XmCONSTANT); n++; + srfhl_w = XmCreateScrolledList (mf_w, "CBox", args, n); + XtAddCallback (srfhl_w, XmNbrowseSelectionCallback, srf_hist_cb, 0); + wtip (srfhl_w, "Click on an entry to copy to font text field below"); + XtManageChild (srfhl_w); + + /* history title and Clear PB */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, XtParent(srfhl_w)); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (mf_w, "FH", args, n); + set_xmstring (w, XmNlabelString, "Font history:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, XtParent(srfhl_w)); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + w = XmCreatePushButton (mf_w, "Clear", args, n); + XtAddCallback (w, XmNactivateCallback, srf_clrhistory_cb, 0); + wtip (w, "Erase the font history"); + XtManageChild (w); + + /* scrolled list of all matching fonts is last to grow with shell */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, srfpat_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNvisibleItemCount, 8); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + XtSetArg (args[n], XmNlistSizePolicy, XmCONSTANT); n++; + srfaf_w = XmCreateScrolledList (mf_w, "SRFALL", args, n); + XtAddCallback (srfaf_w, XmNbrowseSelectionCallback, srf_sel_cb, 0); + wtip (srfaf_w, "Click on an entry to stage and see sample"); + srf_search (); + XtManageChild (srfaf_w); +} + +/* Color control */ + +/* display the named color in the sample area and maybe set scales to match */ +static void +src_showcolor (name, scalestoo) +char *name; +int scalestoo; +{ + Display *dsp = XtDisplay(toplevel_w); + Window win = XtWindow (srcda_w); + XColor defxc, dbxc; + int rh, gs, bv; + int r255, g255, b255; + + if (!win) + return; + if (!XAllocNamedColor (dsp, xe_cm, name, &defxc, &dbxc)) { + xe_msg (1, "Can not find color\n%s", name); + return; + } + XSetWindowBackground (dsp, win, defxc.pixel); + XClearWindow (dsp, win); + XFreeColors (dsp, xe_cm, &defxc.pixel, 1, 0); + + if (!scalestoo) + return; + + r255 = defxc.red >> 8; + g255 = defxc.green >> 8; + b255 = defxc.blue >> 8; + + if (XmToggleButtonGetState (srcrgb_w)) { + rh = MAXSCALE*r255/255; + gs = MAXSCALE*g255/255; + bv = MAXSCALE*b255/255; + } else { + double h, s, v; + toHSV (r255/255.0, g255/255.0, b255/255.0, &h, &s, &v); + rh = (int)(h*MAXSCALE+.5); + gs = (int)(s*MAXSCALE+.5); + bv = (int)(v*MAXSCALE+.5); + } + + XmScaleSetValue (srcRH_w, rh); + XmScaleSetValue (srcGS_w, gs); + XmScaleSetValue (srcBV_w, bv); +} + +/* perform the Get-and-show current or default actions for the cchoice */ +static void +src_getshow (ccp) +Choice *ccp; +{ + Resource *rp = findRes (ccp->res); + char *val = NULL; + XmString xms; + char *cnam; + + if (XmToggleButtonGetState (cgetc_w)) { + /* get current */ + getCurVal (rp, &val); + cnam = val; + } else { + /* get default */ + cnam = rp->lsv; + } + + /* show */ + XmTextFieldSetString (srctf_w, cnam); + src_showcolor (cnam, 1); + xms = XmStringCreateSimple (cnam); + if (!XmListItemExists (srcsl_w, xms)) + XmListAddItem (srcsl_w, xms, 0); + XmStringFree (xms); + + if (val) + XtFree(val); +} + +/* load w and its children with the background colors assoc with bg. */ +static void +src_setbg (w, bg, isf) +Widget w; +Pixel bg; +int (*isf)(); +{ + Display *dsp = XtDisplay(w); + Screen *scr = DefaultScreenOfDisplay(dsp); + Pixel fg, ts, bs, sl; + Arg args[20]; + int n; + + /* get corresponding 3d colors */ + XmGetColors (scr, xe_cm, bg, &fg, &ts, &bs, &sl); + + /* distribute to existing widgets */ + n = 0; + XtSetArg (args[n], XmNbackground, bg); n++; + XtSetArg (args[n], XmNtopShadowColor, ts); n++; + XtSetArg (args[n], XmNbottomShadowColor,bs); n++; + XtSetArg (args[n], XmNarmColor, sl); n++; + XtSetArg (args[n], XmNselectColor, sl); n++; + XtSetArg (args[n], XmNtroughColor, sl); n++; + XtSetArg (args[n], XmNfillOnSelect, False); n++; + loadArgsChildren (w, isf, args, n); +} + +/* install colorname in res{,2} in database and our history list */ +static void +src_install (res, res2, cnam) +char *res, *res2; +char *cnam; +{ + Display *dsp = XtDisplay(toplevel_w); + XrmDatabase db = XrmGetDatabase (dsp); + Resource *rp; + XmString xms; + char buf[MLL]; + + /* install in db for new */ + fmtRes (buf, res, cnam); + XrmPutLineResource (&db, buf); + if (res2) { + fmtRes (buf, res2, cnam); + XrmPutLineResource (&db, buf); + } + + /* add lsv to history if new */ + rp = findRes (res); + xms = XmStringCreateSimple (rp->lsv); + if (!XmListItemExists (srcsl_w, xms)) + XmListAddItem (srcsl_w, xms, 0); + XmStringFree (xms); + if (res2) { + rp = findRes (res2); + xms = XmStringCreateSimple (rp->lsv); + if (!XmListItemExists (srcsl_w, xms)) + XmListAddItem (srcsl_w, xms, 0); + XmStringFree (xms); + } + + /* add cnam to history if new */ + xms = XmStringCreateSimple (cnam); + if (!XmListItemExists (srcsl_w, xms)) + XmListAddItem (srcsl_w, xms, 0); + XmStringFree (xms); + + /* make sure showing on scales */ + src_showcolor (cnam, 1); +} + +/* called when a Background color button is activated. + * we compute all the related colors too if installing. + * client is pointer to a cchoice[] + */ +/* ARGSUSED */ +static void +src_bg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *ccp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (csetd_w))) { + Resource *rp = findRes (ccp->res); + XmTextFieldSetString (srctf_w, rp->lsv); + } + + if (setdef || XmToggleButtonGetState (cappto_w)) { + Display *dsp = XtDisplay(w); + char *cnam = XmTextFieldGetString (srctf_w); + XColor defxc, dbxc; + Pixel bg; + + /* set new bg color */ + if (!XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc)) { + xe_msg (1, "Can not find color\n%s", cnam); + XtFree (cnam); + return; + } + bg = defxc.pixel; + src_setbg (toplevel_w, bg, ccp->isf); + + /* save in db and show in history */ + src_install (ccp->res, ccp->res2, cnam); + + /* other special needs */ + setButtonInfo(); + all_selection_mode (0); /* TODO: what if selecting? */ + sr_createpms(); + sr_display(); + calm_newres(); + mm_newres(); + ss_newres(); + skyview_newres(); + indi_newres(); + + /* done */ + XtFree (cnam); + XFreeColors (dsp, xe_cm, &bg, 1, 0); + } else + src_getshow (ccp); + +} + +/* called when a class button is activated for a foreground color. + * client is pointer to a Choice + */ +/* ARGSUSED */ +static void +src_fg_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *ccp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (csetd_w))) { + Resource *rp = findRes (ccp->res); + XmTextFieldSetString (srctf_w, rp->lsv); + } + + if (setdef || XmToggleButtonGetState (cappto_w)) { + Display *dsp = XtDisplay(w); + char *cnam = XmTextFieldGetString (srctf_w); + XColor defxc, dbxc; + Pixel fg; + Arg args[1]; + + /* get new color */ + if (!XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc)) { + xe_msg (1, "Can not find color\n%s", cnam); + XtFree (cnam); + return; + } + fg = defxc.pixel; + + /* distribute to existing widgets */ + XtSetArg (args[0], XmNforeground, fg); + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + + /* save in db and show in history */ + src_install (ccp->res, ccp->res2, cnam); + + /* tell others too */ + calm_newres(); + mm_newres(); + skyview_newres(); + + /* done */ + XtFree (cnam); + XFreeColors (dsp, xe_cm, &fg, 1, 0); + } else + src_getshow(ccp); +} + +/* install night vision foreground color from XEphem.NightColor + */ +static void +installNVFg() +{ + Display *dsp = XtDisplay(toplevel_w); + XrmDatabase db = XrmGetDatabase (dsp); + XColor defxc, dbxc; + char *cnam; + Pixel pix; + Arg args[1]; + char buf[MLL]; + int i; + + cnam = getXRes ("NightColor", "#00cc00"); + XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc); + pix = defxc.pixel; + + /* distribute to existing widgets and disable further changes */ + XtSetArg (args[0], XmNforeground, pix); + for (i = 0; i < XtNumber(cchoices); i++) { + Choice *ccp = &cchoices[i]; + if (ccp->res && strstr (ccp->res, ".foreground")) { + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + XtSetSensitive (ccp->w, False); + } + if (ccp->res2 && strstr (ccp->res2, ".foreground")) { + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + } + } + + /* save in db for subsequent new widgets */ + for (i = 0; i < nreslist; i++) { + if (strstr (reslist[i].fb, ".foreground")) { + char nam[MRNAM]; + crackNam (reslist[i].fb, nam); + fmtRes (buf, nam, cnam); + XrmPutLineResource (&db, buf); + } + } + + XFreeColors (dsp, xe_cm, &pix, 1, 0); + + /* other special distribution needs */ + setButtonInfo(); + all_selection_mode (0); /* TODO: what if selecting? */ + sr_createpms(); + sr_display(); + calm_newres(); + mm_newres(); + ss_newres(); + skyview_newres(); + indi_newres(); +} + +/* distribute night vision foreground color from XEphem.NightColor + */ +static void +installNVBg() +{ + Display *dsp = XtDisplay(toplevel_w); + XrmDatabase db = XrmGetDatabase (dsp); + Resource *rp; + char *cnam; + Pixel pix; + char buf[MLL]; + int i; + + pix = BlackPixel (dsp, DefaultScreen (dsp)); + cnam = "#000000"; + + /* disable changeability */ + for (i = 0; i < XtNumber(cchoices); i++) { + Choice *ccp = &cchoices[i]; + if (ccp->res && strstr (ccp->res, "background")) { + XtSetSensitive (ccp->w, False); + rp = findRes (ccp->res); + if (rp->val) { + XtFree (rp->val); + rp->val = NULL; + } + getCurVal (rp, &rp->val); + } + if (ccp->res2 && strstr (ccp->res2, "background")) { + rp = findRes (ccp->res2); + if (rp->val) { + XtFree (rp->val); + rp->val = NULL; + } + getCurVal (rp, &rp->val); + } + } + + /* save in db for subsequent new widgets */ + for (i = 0; i < nreslist; i++) { + if (strstr (reslist[i].fb, "background")) { + char nam[MRNAM]; + crackNam (reslist[i].fb, nam); + fmtRes (buf, nam, cnam); + XrmPutLineResource (&db, buf); + } + } + + /* install bg */ + src_setbg (toplevel_w, pix, isAny); +} + +/* called when night vision TB changes. + */ +/* ARGSUSED */ +static void +src_nightv_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Display *dsp = XtDisplay(w); + XrmDatabase db = XrmGetDatabase (dsp); + XColor defxc, dbxc; + char *cnam; + Pixel pix; + Arg args[1]; + int i; + + if (XmToggleButtonGetState(w)) { + /* turning on .. set all fg to NightColor, bg to black */ + installNVBg(); + installNVFg(); + + } else { + /* turning off .. reinstall "current" values */ + + for (i = 0; i < XtNumber(cchoices); i++) { + Choice *ccp = &cchoices[i]; + Resource *rp; + char buf[MLL]; + + if (ccp->res && strstr (ccp->res, ".foreground")) { + rp = findRes (ccp->res); + cnam = rp->val; + XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc); + pix = defxc.pixel; + XtSetArg (args[0], XmNforeground, pix); + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + XFreeColors (dsp, xe_cm, &pix, 1, 0); + + /* save in db for subsequent new widgets */ + fmtRes (buf, ccp->res, cnam); + XrmPutLineResource (&db, buf); + + /* res2 too */ + if (ccp->res2 && strstr (ccp->res2, ".foreground")) { + rp = findRes (ccp->res2); + cnam = rp->val; + XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc); + pix = defxc.pixel; + XtSetArg (args[0], XmNforeground, pix); + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + XFreeColors (dsp, xe_cm, &pix, 1, 0); + + /* save in db for subsequent new widgets */ + fmtRes (buf, ccp->res2, cnam); + XrmPutLineResource (&db, buf); + } + + /* ok to let user changed again */ + XtSetSensitive (ccp->w, True); + } else if (ccp->res && strstr (ccp->res, "background")) { + rp = findRes (ccp->res); + cnam = rp->val; + XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc); + pix = defxc.pixel; + XtSetArg (args[0], XmNbackground, pix); + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + + /* save in db for subsequent new widgets */ + fmtRes (buf, ccp->res, cnam); + XrmPutLineResource (&db, buf); + + /* a few other special needs */ + src_setbg (toplevel_w, pix, ccp->isf); + XFreeColors (dsp, xe_cm, &pix, 1, 0); + + /* res2 too */ + if (ccp->res2 && strstr (ccp->res2, "background")) { + rp = findRes (ccp->res2); + cnam = rp->val; + XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc); + pix = defxc.pixel; + XtSetArg (args[0], XmNbackground, pix); + loadArgsChildren (toplevel_w, ccp->isf, args, 1); + + /* save in db for subsequent new widgets */ + fmtRes (buf, ccp->res2, cnam); + XrmPutLineResource (&db, buf); + + XFreeColors (dsp, xe_cm, &pix, 1, 0); + } + + /* ok to let user change again */ + XtSetSensitive (ccp->w, True); + } + } + + /* other special distribution needs */ + setButtonInfo(); + all_selection_mode (0); /* TODO: what if selecting? */ + sr_createpms(); + sr_display(); + calm_newres(); + mm_newres(); + ss_newres(); + skyview_newres(); + indi_newres(); + } +} + +/* called when a single object (planet, star) resource is to be changed then + * call make_objgcs() then inform all the other views. + * client is pointer to a Choice + */ +/* ARGSUSED */ +static void +src_obj_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *ccp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (csetd_w))) { + Resource *rp = findRes (ccp->res); + XmTextFieldSetString (srctf_w, rp->lsv); + } + + if (setdef || XmToggleButtonGetState (cappto_w)) { + char *cnam = XmTextFieldGetString (srctf_w); + + /* save in db and show in history */ + src_install (ccp->res, ccp->res2, cnam); + + /* make the new GCs */ + make_objgcs(); + + /* tell others */ + skyview_newres(); + e_newres(); + ng_newres(); + ss_newres(); + sm_newres(); + jm_newres(); + mars_newres(); + um_newres(); + + /* done */ + XtFree (cnam); + } else + src_getshow (ccp); +} + +/* called to change any one app defined resource. + * client is pointer to a Choice + * ccp->res2 is really a pointer to the *_newres() function to call, if any. + */ +/* ARGSUSED */ +static void +src_appres_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Choice *ccp = (Choice *)client; + int setdef; + + if ((setdef = XmToggleButtonGetState (csetd_w))) { + Resource *rp = findRes (ccp->res); + XmTextFieldSetString (srctf_w, rp->lsv); + } + + if (setdef || XmToggleButtonGetState (cappto_w)) { + char *cnam = XmTextFieldGetString (srctf_w); + + /* save in db and show in history */ + src_install (ccp->res, NULL, cnam); + if (XmToggleButtonGetState(nightv_w)) + installNVFg(); + + /* inform by calling the proper *_newres() */ + if (ccp->res2) + ((void (*)())ccp->res2)(); + + /* done */ + XtFree (cnam); + } else + src_getshow (ccp); +} + +/* called when an item in the color history list is selected */ +/* ARGSUSED */ +static void +src_hist_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListCallbackStruct *lp = (XmListCallbackStruct *)call; + char *txt; + + XmStringGetLtoR (lp->item, XmSTRING_DEFAULT_CHARSET, &txt); + XmTextFieldSetString (srctf_w, txt); + src_showcolor (txt, 1); + XtFree (txt); +} + +/* called to clear color text list */ +/* ARGSUSED */ +static void +src_clrl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmListDeleteAllItems (srcsl_w); +} + +/* called to close color chooser */ +/* ARGSUSED */ +static void +src_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (srcshell_w); +} + +/* called when ENTER is typed in the color text field */ +/* ARGSUSED */ +static void +src_enter_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *txt = XmTextFieldGetString (w); + src_showcolor (txt, 1); + XtFree (txt); +} + +/* called when RGB TB changes */ +/* ARGSUSED */ +static void +src_rgb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *rgbstr; + + /* just redo scales.. nothing else changes */ + rgbstr = XmTextFieldGetString (srctf_w); + src_showcolor (rgbstr, 1); + XtFree (rgbstr); +} + +/* called while any RGB/HSV scale is being dragged */ +/* ARGSUSED */ +static void +src_scale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int r, g, b; + char buf[32]; + + XmScaleGetValue (srcRH_w, &r); + XmScaleGetValue (srcGS_w, &g); + XmScaleGetValue (srcBV_w, &b); + + if (!XmToggleButtonGetState (srcrgb_w)) { + double rd, gd, bd; + toRGB ((double)r/MAXSCALE, (double)g/MAXSCALE, (double)b/MAXSCALE, + &rd, &gd, &bd); + r = (int)(MAXSCALE*rd+.5); + g = (int)(MAXSCALE*gd+.5); + b = (int)(MAXSCALE*bd+.5); + } + + sprintf(buf, "#%02x%02x%02x", 255*r/MAXSCALE, 255*g/MAXSCALE, + 255*b/MAXSCALE); + XmTextFieldSetString (srctf_w, buf); + src_showcolor (buf, 0); +} + +/* callback from the color Help button */ +/* ARGSUSED */ +static void +src_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +static char *chelp_msg[] = { +"Type a color name, then install into the specified widgets.", +}; + hlp_dialog ("Save_colors", chelp_msg, + sizeof(chelp_msg)/sizeof(chelp_msg[0])); +} + +/* called to start color picker */ +/* ARGSUSED */ +static void +cpk_grab_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static Cursor wc; + Display *dsp = XtDisplay(w); + Window root = RootWindow(dsp, DefaultScreen(dsp)); + Window rw, cw; + int rx, ry, lastrx, lastry; + unsigned int m; + int x, y; + XColor xcol; + Pixel pix; + XImage *xim; + char cnam[32]; + + /* make roaming cursor */ + if (!wc) + wc = XCreateFontCursor (dsp, XC_crosshair); + + /* grab pointer and show color until see button1 */ + XmUpdateDisplay (toplevel_w); /* helps insure menu pops back up */ + if (XGrabPointer (dsp, root, False, ButtonPressMask, GrabModeAsync, + GrabModeSync, None, wc, CurrentTime) != GrabSuccess) { + xe_msg (1, "Could not grab pointer"); + return; + } + xcol.pixel = 0; + lastrx = lastry = -1000; + do { + if (!XQueryPointer (dsp, root, &rw, &cw, &rx, &ry, &x, &y, &m)){ + xe_msg (1, "XQueryPointer error"); + break; + } + + /* avoid i/o while idle */ + if (rx == lastrx && ry == lastry) + continue; + lastrx = rx; + lastry = ry; + + /* pull out pixel */ + xim = XGetImage (dsp, root, x, y, 1, 1, ~0, ZPixmap); + if (!xim) { + xe_msg (1, "XGetImage error"); + break; + } + pix = XGetPixel (xim, 0, 0); + XDestroyImage (xim); + + /* avoid jitters while same color */ + if (pix == xcol.pixel) + continue; + xcol.pixel = pix; + + /* convert to rgb */ + XQueryColor (dsp, xe_cm, &xcol); + sprintf (cnam, "#%02x%02x%02x", xcol.red>>8, xcol.green>>8, + xcol.blue>>8); + XmTextFieldSetString (srctf_w, cnam); + src_showcolor (cnam, 1); + } while (!(m & Button1Mask)); + + XUngrabPointer (dsp, CurrentTime); +} + +static void +create_srcshell() +{ + Display *dsp = XtDisplay(toplevel_w); + Widget mf_w, ti_w, fr_w, top_w, ttl_w, rb_w; + Widget tl_w, al_w; + Widget mb_w, cb_w, pd_w; + Widget sep_w, w; + Arg args[20]; + int n; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Colors"); n++; + XtSetArg (args[n], XmNiconName, "Colors"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + srcshell_w = XtCreatePopupShell ("Colors", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (srcshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (srcshell_w, "XEphem*Colors.x", prefcolrcategory, 0); + sr_reg (srcshell_w, "XEphem*Colors.y", prefcolrcategory, 0); + + /* master form */ + + n = 0; + mf_w = XmCreateForm (srcshell_w, "SRCMF", args, n); + XtAddCallback (mf_w, XmNhelpCallback, src_help_cb, 0); + XtManageChild (mf_w); + + /* menu bar at top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (mf_w, "CMB", args, n); + XtManageChild (mb_w); + + /* control pd/cb */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Control", args, n); + wtip (cb_w, "Access to color controls"); + XtManageChild (cb_w); + + n = 0; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + nightv_w = XmCreateToggleButton (pd_w, "NightMode", args, n); + set_xmstring (nightv_w, XmNlabelString, "Night mode"); + XtAddCallback (nightv_w, XmNvalueChangedCallback, src_nightv_cb, + NULL); + wtip (nightv_w, "Toggle night-vision black-background mode"); + sr_reg (nightv_w, "XEphem*Colors*NightMode.set", + prefcolrcategory, 1); + XtManageChild (nightv_w); + + n = 0; + cpicker_w = XmCreatePushButton (pd_w, "Grab color", args, n); + wtip (cpicker_w,"Grab color under cursor when click Button 1"); + XtAddCallback (cpicker_w, XmNactivateCallback, cpk_grab_cb, 0); + XtManageChild (cpicker_w); + + n = 0; + w = XmCreatePushButton (pd_w, "CPB", args, n); + set_xmstring (w, XmNlabelString, "Clear history"); + XtAddCallback (w, XmNactivateCallback, src_clrl_cb, 0); + wtip (w, "Erase the color history"); + XtManageChild (w); + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, src_close_cb, NULL); + XtManageChild (w); + + /* color category menus */ + + create_menus (mb_w, cchoices, XtNumber(cchoices)); + + /* help pd/cb */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HPD", args, n); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Help", args, n); + wtip (cb_w, "Additional help"); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + XtManageChild (cb_w); + + n = 0; + w = XmCreatePushButton (pd_w, "Help", args, n); + wtip (w, "More info about this window"); + XtAddCallback (w, XmNactivateCallback, src_help_cb, NULL); + XtManageChild (w); + + /* sub-master form -- same but with inner spacing */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + mf_w = XmCreateForm (mf_w, "SRCMF2", args, n); + XtManageChild (mf_w); + + /* "Action" label and menu on top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + al_w = XmCreateLabel (mf_w, "TCL", args, n); + set_xmstring (al_w, XmNlabelString, "Choose action here first:"); + XtManageChild (al_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, al_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 20); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 2); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + rb_w = XmCreateRadioBox (mf_w, "SCRB", args, n); + XtManageChild (rb_w); + + n = 0; + XtSetArg (args[n], XmNset, True); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + cgetc_w = XmCreateToggleButton (rb_w, "Get", args, n); + set_xmstring (cgetc_w, XmNlabelString, "Get current"); + wtip (cgetc_w, + "Choosing a menu target retrieves its current color"); + XtManageChild (cgetc_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + cgetd_w = XmCreateToggleButton (rb_w, "GDef", args, n); + set_xmstring (cgetd_w, XmNlabelString, "Get default"); + wtip (cgetd_w, + "Choosing a menu target retrieves its default color"); + XtManageChild (cgetd_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + cappto_w = XmCreateToggleButton (rb_w, "Set", args, n); + set_xmstring (cappto_w, XmNlabelString, "Set"); + wtip (cappto_w, "Choosing a menu target sets its color"); + XtManageChild (cappto_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + csetd_w = XmCreateToggleButton (rb_w, "SDef", args, n); + set_xmstring (csetd_w, XmNlabelString, "Restore default"); + wtip (csetd_w, "Choosing a menu target restores its default color"); + XtManageChild (csetd_w); + + /* "Target" directions */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + tl_w = XmCreateLabel (mf_w, "TL", args, n); + set_xmstring (tl_w, XmNlabelString,"Then set target from menus above."); + XtManageChild (tl_w); + + /* sep on top of color controls */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (mf_w, "Sep", args, n); + XtManageChild (sep_w); + + /* control section title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + top_w = XmCreateLabel (mf_w, "Title", args, n); + set_xmstring (top_w, XmNlabelString, "Color history:"); + XtManageChild (top_w); + + /* scrolled history is built in center so it is the one to grow */ + + /* TF for new color */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 45); n++; + srctf_w = XmCreateTextField (mf_w, "Color", args, n); + XtAddCallback (srctf_w, XmNactivateCallback, src_enter_cb, NULL); + XmTextFieldSetString (srctf_w, "#000000"); /* match scales */ + wtip (srctf_w, "Entered or retrieved color name or value"); + XtManageChild (srctf_w); + + /* color instructions next up */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, srctf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + ti_w = XmCreateLabel (mf_w, "SRCST", args, n); + set_xmstring (ti_w, XmNlabelString, "Name or spec:"); + XtManageChild (ti_w); + + /* history scrolled list in top left */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, top_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ti_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 45); n++; + XtSetArg (args[n], XmNvisibleItemCount, 8); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + srcsl_w = XmCreateScrolledList (mf_w, "CBox", args, n); + XtAddCallback (srcsl_w, XmNbrowseSelectionCallback, src_hist_cb, 0); + wtip (srcsl_w, "Click on an entry to see again"); + XtManageChild (srcsl_w); + + /* color method */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + ttl_w = XmCreateLabel (mf_w, "ST", args, n); + set_xmstring (ttl_w, XmNlabelString, "Method:"); + XtManageChild(ttl_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + rb_w = XmCreateRadioBox (mf_w, "RHRB", args, n); + XtManageChild(rb_w); + + n = 0; + XtSetArg (args[n], XmNset, True); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + srcrgb_w = XmCreateToggleButton (rb_w, "RGB", args, n); + XtAddCallback (srcrgb_w, XmNvalueChangedCallback, src_rgb_cb, 0); + wtip (srcrgb_w, "Scales are in RGB"); + XtManageChild (srcrgb_w); + + n = 0; + XtSetArg (args[n], XmNset, False); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + w = XmCreateToggleButton (rb_w, "HSV", args, n); + wtip (w, "Scales are in HSV"); + XtManageChild (w); + + /* color patch */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, XtParent(srcsl_w)); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fr_w = XmCreateFrame (mf_w, "DAF", args, n); + XtManageChild (fr_w); + + /* create black drawing area to match initial scale settings */ + n = 0; + XtSetArg (args[n], XmNbackground, BlackPixel(dsp, + DefaultScreen(dsp))); n++; + srcda_w = XmCreateDrawingArea (fr_w, "DA", args, n); + wtip (srcda_w, "Color patch showing above settings"); + XtManageChild (srcda_w); + + /* 3 scales */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttl_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, fr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 45); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, MAXSCALE); n++; + XtSetArg (args[n], XmNvalue, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + srcRH_w = XmCreateScale (mf_w, "RHScale", args, n); + XtAddCallback (srcRH_w, XmNdragCallback, src_scale_cb, NULL); + XtAddCallback (srcRH_w, XmNvalueChangedCallback, src_scale_cb, NULL); + wtip (srcRH_w, "Slide to adjust Red or Hue"); + XtManageChild(srcRH_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttl_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, fr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 65); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, MAXSCALE); n++; + XtSetArg (args[n], XmNvalue, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + srcGS_w = XmCreateScale (mf_w, "GSScale", args, n); + XtAddCallback (srcGS_w, XmNdragCallback, src_scale_cb, NULL); + XtAddCallback (srcGS_w, XmNvalueChangedCallback, src_scale_cb, NULL); + wtip (srcGS_w, "Slide to adjust Green or Saturation"); + XtManageChild(srcGS_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttl_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, fr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 85); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, MAXSCALE); n++; + XtSetArg (args[n], XmNvalue, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + srcBV_w = XmCreateScale (mf_w, "BVScale", args, n); + XtAddCallback (srcBV_w, XmNdragCallback, src_scale_cb, NULL); + XtAddCallback (srcBV_w, XmNvalueChangedCallback, src_scale_cb, NULL); + wtip (srcBV_w, "Slide to adjust the Blue or Brightness"); + XtManageChild(srcBV_w); +} + +/* read the next resource from file fp. + * absorb continuation lines and convert each (bslash n) to (nl). + * N.B. this does not handle LONG lines (lines longer than bufl). + * this also removes the final nl. + * return 0 if ok, -1 if EOF. + */ +static int +fgetres (buf, bufl, fp) +char *buf; +int bufl; +FILE *fp; +{ + int c; + + while (bufl > 0 && (c = fgetc(fp)) != EOF && c != '\n') + if (c == '\\') { + c = fgetc(fp); + switch (c) { + case 'n': + /* convert */ + *buf++ = '\n'; + bufl--; + break; + case '\n': + /* absorb */ + break; + default: + /* copy through */ + *buf++ = '\\'; + *buf++ = c; + bufl -= 2; + break; + } + } else { + *buf++ = c; + bufl--; + } + + if (bufl <= 0 || feof(fp) || ferror(fp)) + return (-1); + + *buf = '\0'; + return (0); +} + +/* write the resource spec in buf to fp converting each (nl) to (backslash n). + * see comment at setXRes() for more insite. + */ +static void +fputres (fp, buf) +FILE *fp; +char *buf; +{ + int c; + + while ((c = *buf++) != '\0') + if (c == '\n') + fputs ("\\n", fp); + else + fputc (c, fp); + + fputc ('\n', fp); +} + +/* one update for both skyview and binary star window */ +static void +skyview_newres() +{ + sv_newres(); + svbs_newres(); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: saveres.c,v $ $Date: 2012/08/17 01:53:59 $ $Revision: 1.129 $ $Name: $"}; diff --git a/GUI/xephem/scope.c b/GUI/xephem/scope.c new file mode 100644 index 0000000..78e8403 --- /dev/null +++ b/GUI/xephem/scope.c @@ -0,0 +1,868 @@ +/* this file glues XEphem to INDI. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +static void sc_create_w (void); +static void sc_help_cb (Widget w, XtPointer client, XtPointer call); +static void oneConfigRow (Widget rc_w, Widget *tb_wp, XtCallbackProc cb, + char *savereg, char *prompt, char *name, Widget *v_wp, Widget *m_wp, + Widget *b_wp); +static int getINDIprop (Widget tf_w, char **dev, char **prop, char **ele); +static int getINDIele (Widget w1, Widget w2, char **dev, char **prop, + char *ele[]); +static INumber *findNumber (INumberVectorProperty *nvp, char *name); +static double toINDIValue (double localv, Widget m_w, Widget b_w); +static double fromINDIValue (double indiv, Widget m_w, Widget b_w); + +static void jd_cb (Widget w, XtPointer client, XtPointer call); +static void posixtm_cb (Widget w, XtPointer client, XtPointer call); +static void ll_cb (Widget w, XtPointer client, XtPointer call); +static void wx_cb (Widget w, XtPointer client, XtPointer call); +static void marker_cb (Widget w, XtPointer client, XtPointer call); +static void marker_tcb (XtPointer client, XtIntervalId *id); +static void close_cb (Widget w, XtPointer client, XtPointer call); + +static Widget scopeshell_w; /* overall shell */ +static Widget host_w; /* INDI tcp/ip host TF */ +static Widget port_w; /* INDI tcp/ip port TF */ +static Widget jdv_w; /* INDI JD value */ +static Widget jdm_w; /* INDI JD slope */ +static Widget jdb_w; /* INDI JD offset */ +static Widget posixtmv_w; /* INDI POSIX time value */ +static Widget latv_w; /* INDI latitude value */ +static Widget latm_w; /* INDI latitude slope */ +static Widget latb_w; /* INDI latitude offset */ +static Widget lngv_w; /* INDI longitude value */ +static Widget lngm_w; /* INDI longitude slope */ +static Widget lngb_w; /* INDI longitude offset */ +static Widget tempv_w; /* INDI temperature value */ +static Widget tempm_w; /* INDI temperature slope */ +static Widget tempb_w; /* INDI temperature offset */ +static Widget presv_w; /* INDI pressure value */ +static Widget presm_w; /* INDI pressure slope */ +static Widget presb_w; /* INDI pressure offset */ +static Widget rav_w; /* INDI ra value */ +static Widget ram_w; /* INDI ra slope */ +static Widget rab_w; /* INDI ra offset */ +static Widget decv_w; /* INDI dec value */ +static Widget decm_w; /* INDI dec slope */ +static Widget decb_w; /* INDI dec offset */ +static Widget edbv_w; /* INDI edb value */ +static Widget gotorav_w; /* INDI goto ra value */ +static Widget gotoram_w; /* INDI goto ra slope */ +static Widget gotorab_w; /* INDI goto ra offset */ +static Widget gotodecv_w; /* INDI goto dec value */ +static Widget gotodecm_w; /* INDI goto dec slope */ +static Widget gotodecb_w; /* INDI goto dec offset */ + +static Widget edbon_w; /* TB whether edb GOTO is on */ +static Widget rdon_w; /* TB whether ra/dec GOTO is on */ +static Widget markeron_w; /* TB whether skyview marker is on */ + +static XtIntervalId marker_tid; /* timer to display sky marker */ +#define MARK_INT 333 /* marker update interval, ms */ + +static char scopecategory[] = "INDI Configuration"; + +void +sc_manage() +{ + if (!scopeshell_w) + sc_create_w(); + + XtPopup (scopeshell_w, XtGrabNone); + set_something (scopeshell_w, XmNiconic, (XtArgVal)False); +} + +void +sc_unmanage() +{ + if (scopeshell_w) + XtPopdown (scopeshell_w); +} + +/* return malloced name of host and port to connect to INDI services. + * N.B. caller must XtFree() each + */ +void +sc_gethost (char **host, char **port) +{ + if (!host_w) + sc_create_w(); + *host = XmTextFieldGetString (host_w); + *port = XmTextFieldGetString (port_w); +} + +/* return whether we are sending goto commands */ +int +sc_isGotoOn() +{ + if (!scopeshell_w) + sc_create_w(); + return (XmToggleButtonGetState(edbon_w) || + XmToggleButtonGetState(rdon_w)); +} + +/* send the given object to INDI if On and alt>0. + */ +void +sc_goto (op) +Obj *op; +{ + char buf[1024]; + + /* check whether enabled */ + if (!sc_isGotoOn()) + return; + + /* assert */ + if (!op) { + printf ("sc_goto called with no op\n"); + abort(); + } + + /* send as edb if on */ + if (XmToggleButtonGetState (edbon_w)) { + char *dev, *prop, *ele; + db_write_line (op, buf); + if (!getINDIprop (edbv_w, &dev, &prop, &ele)) { + char *bp = buf; + if (indi_setTProperty (dev, prop, &ele, &bp, 1, buf) < 0) { + xe_msg (1, "%s", buf); + XmToggleButtonSetState (edbon_w, False, True); + } + } + } + + /* send as astrometric J2000 ra/dec if on */ + if (XmToggleButtonGetState (rdon_w)) { + char *dev, *prop, *ele[2]; + double v[2]; + Now now, *np; + Obj obj; + + /* update ephemeris for op */ + np = mm_get_now(); + if (epoch != J2000) { + now = *np; + np = &now; + epoch = J2000; + obj = *op; + op = &obj; + } + obj_cir (np, op); + + /* scale to INDI coords */ + v[0] = toINDIValue (op->s_ra, gotoram_w, gotorab_w); + v[1] = toINDIValue (op->s_dec, gotodecm_w, gotodecb_w); + + /* send INDI ra/dec elements */ + if (getINDIele (gotorav_w, gotodecv_w, &dev, &prop, ele) < 0) { + XmToggleButtonSetState (rdon_w, False, True); + return; + } + if (indi_setNProperty (dev, prop, ele, v, 2, buf) < 0) { + xe_msg (1, "%s", buf); + XmToggleButtonSetState (edbon_w, False, True); + } + + /* clean up */ + XtFree (dev); + XtFree (prop); + XtFree (ele[0]); + XtFree (ele[1]); + } +} + +/* called to put up or remove the watch cursor. */ +void +sc_cursor (c) +Cursor c; +{ + Window win; + + if (scopeshell_w && (win = XtWindow(scopeshell_w)) != 0) { + Display *dsp = XtDisplay(scopeshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the main scope dialog. + * init Running TB according to whether process is already running. + */ +static void +sc_create_w() +{ + Widget rc_w, f_w, sep_w; + Widget scopef_w; + Widget w; + Arg args[20]; + int n; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem INDI configuration"); n++; + XtSetArg (args[n], XmNiconName, "INDI conf"); n++; + scopeshell_w = XtCreatePopupShell ("INDIConfig", + topLevelShellWidgetClass, toplevel_w, args, n); + setup_icon (scopeshell_w); + set_something (scopeshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (scopeshell_w, "XEphem*INDIConfig.x", scopecategory, 0); + sr_reg (scopeshell_w, "XEphem*INDIConfig.y", scopecategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + scopef_w = XmCreateForm (scopeshell_w, "ScF", args, n); + XtAddCallback (scopef_w, XmNhelpCallback, sc_help_cb, 0); + XtManageChild (scopef_w); + + /* big vertical RC */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + rc_w = XmCreateRowColumn (scopef_w, "SRC", args, n); + XtManageChild (rc_w); + + /* host/port form */ + + n = 0; + f_w = XmCreateForm (rc_w, "SHPF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (f_w, "SHL", args, n); + set_xmstring (w, XmNlabelString, "Host:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + host_w = XmCreateTextField (f_w, "Host", args, n); + wtip (host_w, "Network host for connecting to INDI server"); + fixTextCursor (host_w); + sr_reg (host_w, NULL, scopecategory, 1); + XtManageChild (host_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, host_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + w = XmCreateLabel (f_w, "SPL", args, n); + set_xmstring (w, XmNlabelString, "Port:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + port_w = XmCreateTextField (f_w, "Port", args, n); + wtip (host_w, "Network port number for connecting to INDI server"); + fixTextCursor (port_w); + sr_reg (port_w, NULL, scopecategory, 1); + XtManageChild (port_w); + + n = 0; + w = XmCreateLabel (rc_w, "SGap", args, n); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + + /* config entries */ + + oneConfigRow (rc_w, NULL, jd_cb, NULL, + "Send computer time as JD once to", + "JD", &jdv_w, &jdm_w, &jdb_w); + oneConfigRow (rc_w, NULL, posixtm_cb, NULL, + "Send computer time as POSIX once to", + "POSIXTM", &posixtmv_w, NULL, NULL); + oneConfigRow (rc_w, NULL, ll_cb, NULL, + "Send lat and long once to", + "Latitude", &latv_w, &latm_w, &latb_w); + oneConfigRow (rc_w, NULL, NULL, NULL, NULL, + "Longitude", &lngv_w, &lngm_w, &lngb_w); + oneConfigRow (rc_w, NULL, wx_cb, NULL, + "Get temp and pressure once from", + "Temperature", &tempv_w, &tempm_w,&tempb_w); + oneConfigRow (rc_w, NULL, NULL, NULL, NULL, + "Pressure", &presv_w,&presm_w,&presb_w); + oneConfigRow (rc_w, &edbon_w, NULL, "EnableEDB", + "Enable sending edb target to", + "EDB", &edbv_w, NULL, NULL); + oneConfigRow (rc_w, &rdon_w, NULL, "EnableRADec", + "Enable sending RA/Dec goto to", + "GotoRA", &gotorav_w, &gotoram_w, &gotorab_w); + oneConfigRow (rc_w, NULL, NULL, NULL, NULL, + "GotoDec", &gotodecv_w, &gotodecm_w, &gotodecb_w); + oneConfigRow (rc_w, &markeron_w, marker_cb, "SkyMarker", + "Enable Sky marker from", + "SkyRA", &rav_w, &ram_w, &rab_w); + oneConfigRow (rc_w, NULL, NULL, NULL, NULL, + "SkyDec", &decv_w, &decm_w, &decb_w); + + /* start listening right away if default for sky marker is On. + * also manage keep-vis option in skyview + */ + if (XmToggleButtonGetState (markeron_w)) { + marker_tid = XtAppAddTimeOut (xe_app, MARK_INT, marker_tcb, 0); + sv_showkeeptelvis (1); + } + + + /* bottom controls */ + + n = 0; + f_w = XmCreateForm (rc_w, "SHPF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (f_w, "Sep", args, n); + XtManageChild (sep_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 25); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 35); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 65); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 75); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, sc_help_cb, NULL); + XtManageChild (w); +} + +/* add a row to the configuration table. + */ +static void +oneConfigRow ( +Widget rc_w, /* table RC */ +Widget *tb_wp, /* TB widget, or NULL */ +XtCallbackProc cb, /* tb callback, or NULL */ +char *savereg, /* name of persisent TB, or NULL */ +char *prompt, /* tb label, or NULL */ +char *name, /* base of widget names */ +Widget *v_wp, /* indi property value TF widget */ +Widget *m_wp, /* slope TF widget, or NULL */ +Widget *b_wp) /* intercept TF widget, or NULL */ +{ + Widget w, f_w; + Arg args[20]; + char tfname[64]; + int n; + + /* main form */ + n = 0; + f_w = XmCreateForm (rc_w, "SRCF", args, n); + XtManageChild (f_w); + + /* toggle button on left, if we have prompt */ + if (prompt) { + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateToggleButton (f_w, savereg?savereg:"SFTB", args, n); + if (cb) + XtAddCallback (w, XmNvalueChangedCallback, cb, NULL); + set_xmstring (w, XmNlabelString, prompt); + XtManageChild (w); + if (tb_wp) + *tb_wp = w; + if (savereg) + sr_reg (w, NULL, scopecategory, 1); + } + + /* value and optional slope and intercept TFs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 40); n++; + XtSetArg (args[n], XmNcolumns, 40); n++; + sprintf (tfname, "%sValue", name); + *v_wp = XmCreateTextField (f_w, tfname, args, n); + fixTextCursor (*v_wp); + sr_reg (*v_wp, NULL, scopecategory, 1); + wtip (*v_wp, "INDI Device.Property.Element for this quantity"); + XtManageChild (*v_wp); + + if (m_wp && b_wp) { + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, *v_wp); n++; + w = XmCreateLabel (f_w, "SM", args, n); + set_xmstring (w, XmNlabelString, " x "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + sprintf (tfname, "%sSlope", name); + *m_wp = XmCreateTextField (f_w, tfname, args, n); + sr_reg (*m_wp, NULL, scopecategory, 1); + fixTextCursor (*m_wp); + wtip (*m_wp, "Scale multiplier applied to INDI value"); + XtManageChild (*m_wp); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, *m_wp); n++; + w = XmCreateLabel (f_w, "SL", args, n); + set_xmstring (w, XmNlabelString, " + "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + sprintf (tfname, "%sOffset", name); + *b_wp = XmCreateTextField (f_w, tfname, args, n); + sr_reg (*b_wp, NULL, scopecategory, 1); + fixTextCursor (*b_wp); + wtip (*b_wp, "Offset added to INDI value"); + XtManageChild (*b_wp); + } +} + +/* called when the help button is hit */ +/* ARGSUSED */ +static void +sc_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "Configure how INDI services connect with XEphem." + }; + + hlp_dialog ("SkyView_telescope", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* callback to send JD */ +static void +jd_cb (Widget w, XtPointer client, XtPointer call) +{ + char *dev, *prop, *ele; + char buf[1024]; + Now now; + double v; + + /* act like a pushbutton */ + if (!XmToggleButtonGetState(w)) + return; + XmToggleButtonSetState (w, False, True); + + /* gather property name */ + if (getINDIprop (jdv_w, &dev, &prop, &ele) < 0) + return; + + /* convert computer mjd to indi jd and send */ + time_fromsys (&now); + v = toINDIValue (now.n_mjd, jdm_w, jdb_w); + if (indi_setNProperty (dev, prop, &ele, &v, 1, buf) < 0) + xe_msg (1, "%s", buf); + + /* clean up */ + XtFree (dev); + XtFree (prop); + XtFree (ele); +} + +/* callback to send time in POSIX format */ +static void +posixtm_cb (Widget w, XtPointer client, XtPointer call) +{ + char *dev, *prop, *ele; + char buf[1024], *bp = buf; + int mm, yy, d, h, m, s; + double dd, dh, dm, ds; + Now now; + + /* act like a pushbutton */ + if (!XmToggleButtonGetState(w)) + return; + XmToggleButtonSetState (w, False, True); + + /* gather property name */ + if (getINDIprop (posixtmv_w, &dev, &prop, &ele) < 0) + return; + + /* convert computer mjd to POSIX and send */ + time_fromsys (&now); + mjd_cal (now.n_mjd, &mm, &dd, &yy); + d = (int)dd; + dh = (dd - d)*24.; + h = (int)dh; + dm = (dh - h)*60.; + m = (int)dm; + ds = (dm - m)*60.; + if (ds >= 59.5) { + s = 0; + if (++m == 60) { + m = 0; + h += 1; /* TODO: roll date if hits 24 */ + } + } else + s = (int)ds; + + sprintf (buf, "%4d-%02d-%02dT%02d:%02d:%02d", yy, mm, d, h, m, s); + + if (indi_setTProperty (dev, prop, &ele, &bp, 1, buf) < 0) + xe_msg (1, "%s", buf); + + /* clean up */ + XtFree (dev); + XtFree (prop); + XtFree (ele); +} + +/* callback to send lat/long */ +static void +ll_cb (Widget w, XtPointer client, XtPointer call) +{ + Now *np = mm_get_now(); + char *dev, *prop, *ele[2]; + double v[2]; + char buf[1024]; + + /* act like a pushbutton */ + if (!XmToggleButtonGetState(w)) + return; + XmToggleButtonSetState (w, False, True); + + /* get INDI elements with lat/long */ + if (getINDIele (latv_w, lngv_w, &dev, &prop, ele) < 0) + return; + + v[0] = toINDIValue (lat, latm_w, latb_w); + v[1] = toINDIValue (lng, lngm_w, lngb_w); + if (indi_setNProperty (dev, prop, ele, v, 2, buf) < 0) + xe_msg (1, "%s", buf); + + /* clean up */ + XtFree (dev); + XtFree (prop); + XtFree (ele[0]); + XtFree (ele[1]); +} + +/* set our temp/pres from INDI */ +static void +wx_cb (Widget w, XtPointer client, XtPointer call) +{ + INumberVectorProperty *wxp; + char *dev, *prop, *ele[2]; + + /* act like a pushbutton */ + if (!XmToggleButtonGetState(w)) + return; + XmToggleButtonSetState (w, False, True); + + /* get INDI elements with current temp/pres */ + if (getINDIele (tempv_w, presv_w, &dev, &prop, ele) < 0) + return; + + wxp = indi_getNProperty (dev, prop); + if (wxp) { + INumber *tnp = findNumber (wxp, ele[0]); + if (tnp) { + INumber *pnp = findNumber (wxp, ele[1]); + if (pnp) { + Now *np = mm_get_now(); + temp = fromINDIValue (tnp->value, tempm_w, tempb_w); + pressure = fromINDIValue (pnp->value, presm_w, presb_w); + redraw_screen (1); + } else { + xe_msg (1, "INDI: %s.%s.%s not found", dev,prop,ele[1]); + } + } else { + xe_msg (1, "INDI: %s.%s.%s not found", dev,prop,ele[0]); + } + } + + /* clean up */ + XtFree (dev); + XtFree (prop); + XtFree (ele[0]); + XtFree (ele[1]); +} + +static void +close_cb (Widget w, XtPointer client, XtPointer call) +{ + XtPopdown (scopeshell_w); +} + +/* toggle whether to display the sky marker */ +static void +marker_cb (Widget w, XtPointer client, XtPointer call) +{ + int on = XmToggleButtonGetState (w); + + /* always remove any old timer */ + if (marker_tid) { + XtRemoveTimeOut (marker_tid); + marker_tid = (XtIntervalId)0; + } + + /* start fresh if turning on */ + if (on) + marker_tid = XtAppAddTimeOut (xe_app, MARK_INT, marker_tcb, 0); + + /* only show keep-vis in skyview is marker is on */ + sv_showkeeptelvis(on); +} + +/* timer callback to put up the sky marker. + * ok if properties not available now + */ +static void +marker_tcb (XtPointer client, XtIntervalId *id) +{ + char *dev, *prop, *ele[2]; + int ok = 1; + + /* if connected, get names of ra/dec properties */ + if (indi_connected() == 0) { + if (getINDIele (rav_w,decv_w,&dev,&prop,ele) < 0) + ok = 0; /* already issued xe_msg() */ + else { + /* get the live vector, ok if not available yet */ + INumberVectorProperty *rap = indi_getNProperty (dev, prop); + if (rap) { + /* extract the ra/dec values */ + INumber *rnp = findNumber (rap, ele[0]); + if (rnp) { + INumber *dnp = findNumber (rap, ele[1]); + if (dnp) { + Obj o; + Now *np; + + /* build object */ + memset (&o, 0, sizeof(o)); + o.f_RA = fromINDIValue (rnp->value, ram_w, rab_w); + o.f_dec = fromINDIValue (dnp->value, decm_w,decb_w); + o.o_type = FIXED; + o.f_epoch = J2000; + + /* mark, on screen */ + np = mm_get_now(); + obj_cir (np, &o); + sv_scopeMark (&o); + } else { + xe_msg(1,"INDI:%s.%s.%s not found",dev,prop,ele[1]); + ok = 0; + } + } else { + xe_msg (1, "INDI: %s.%s.%s not found", dev,prop,ele[0]); + ok = 0; + } + } + + /* clean up */ + XtFree (dev); + XtFree (prop); + XtFree (ele[0]); + XtFree (ele[1]); + } + } + + /* repeat if ok */ + if (ok) + marker_tid = XtAppAddTimeOut (xe_app, MARK_INT, marker_tcb, 0); + else + XmToggleButtonSetState (markeron_w, False, True); +} + +/* get the name of the INDI d.p.e(s) described by TF w1 and possibly w2. + * return 0 if ok else issue xe_msg() and return -1. + * N.B. if return 0 caller must XtFree() each pointer + */ +static int +getINDIele (Widget w1, Widget w2, char **dev, char **prop, char *ele[]) +{ + char *dev1, *prop1; + char *dev2, *prop2; + char *myele[2]; + + /* gather property names */ + if (getINDIprop (w1, &dev1, &prop1, &myele[0]) < 0) + return (-1); + if (w2 && getINDIprop (w2, &dev2, &prop2, &myele[1]) < 0) { + XtFree (dev1); + XtFree (prop1); + XtFree (myele[0]); + return (-1); + } + + /* if two then must be the same */ + if (w2 && (strcmp (dev1,dev2) || strcmp (prop1,prop2))) { + xe_msg (1, "Properties %s.%s and %s.%s must match to be atomic", + dev1, prop1, dev2, prop2); + XtFree (dev1); + XtFree (prop1); + XtFree (myele[0]); + XtFree (dev2); + XtFree (prop2); + XtFree (myele[1]); + return (-1); + } + + /* ok */ + *dev = dev1; + *prop = prop1; + ele[0] = myele[0]; + if (w2) + ele[1] = myele[1]; + return (0); +} + +/* extract the device.property.element name from the given text field. + * return 0 if ok else issue xe_msg() and return -1. + * N.B. if return 0 caller must XtFree() each pointer + */ +static int +getINDIprop (Widget tf_w, char **dev, char **prop, char **ele) +{ + char *string = XmTextFieldGetString (tf_w); + char devstr[64], propstr[64], elestr[64]; + int ok; + + ok = sscanf (string, "%[^.].%[^.].%s", devstr, propstr, elestr) == 3; + if (!ok) { + xe_msg (1, "%s:\nINDI format must be dev.prop.element", string); + } + XtFree (string); + if (ok) { + *dev = XtNewString (devstr); + *prop = XtNewString (propstr); + *ele = XtNewString (elestr); + return (0); + } + return (-1); +} + +/* find a particular INumber in a INumberVector */ +static INumber * +findNumber (INumberVectorProperty *nvp, char *name) +{ + INumber *np; + + for (np = nvp->np; np < &nvp->np[nvp->nnp]; np++) + if (strcmp (np->name, name) == 0) + return (np); + return (NULL); +} + +/* convert the given local number to its INDI value using the slope and offset + * values in the given TF widgets + */ +static double +toINDIValue (double localv, Widget m_w, Widget b_w) +{ + char *mstr = XmTextFieldGetString (m_w); + char *bstr = XmTextFieldGetString (b_w); + double indiv = (localv - atod(bstr))/atod(mstr); + XtFree (mstr); + XtFree (bstr); + return (indiv); +} + +/* convert the given INDI number to its local value using the slope and offset + * values in the given TF widgets + */ +static double +fromINDIValue (double indiv, Widget m_w, Widget b_w) +{ + char *mstr = XmTextFieldGetString (m_w); + char *bstr = XmTextFieldGetString (b_w); + double localv = indiv*atod(mstr) + atod(bstr); + XtFree (mstr); + XtFree (bstr); + return (localv); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: scope.c,v $ $Date: 2011/09/23 01:52:39 $ $Revision: 1.28 $ $Name: $"}; diff --git a/GUI/xephem/sites.c b/GUI/xephem/sites.c new file mode 100644 index 0000000..799f792 --- /dev/null +++ b/GUI/xephem/sites.c @@ -0,0 +1,1056 @@ +/* code to read and manipulate the shared and private site files. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +extern char maincategory[]; + +static void read_files (void); +static int sites_cmpf (const void * v1, const void * v2); +static void create_sq_w (void); +static void fill_list (void); +static void buildNew (Widget w); +static void buildDST (Widget mb_w, char *prompt, Widget *m_w, Widget *w_w, + Widget *d_w, Widget *at_w); +static void addButtons (Widget pd_w, char **names, int nnames); +static void setMenuHistory (Widget w, int i); +static void read_file (FILE *fp); +static void scroll_sites (int i); +static void sq_set_cb (Widget w, XtPointer client, XtPointer call); +static void sq_search_cb (Widget w, XtPointer client, XtPointer call); +static void sq_dblclick_cb (Widget w, XtPointer client, XtPointer call); +static void sq_click_cb (Widget w, XtPointer client, XtPointer call); +static void sq_help_cb (Widget w, XtPointer client, XtPointer call); +static void sq_cancel_cb (Widget w, XtPointer client, XtPointer call); +static void sq_create_cb (Widget w, XtPointer client, XtPointer call); +static void sq_save_cb (Widget w, XtPointer client, XtPointer call); +static void sq_setmain_cb (Widget w, XtPointer client, XtPointer call); +static int buildNewSite (Site *sp); +static char *nows (char *bp); +static char *getTF (Widget w, char buf[], int bl); +static int getPDmH (Widget pd); +static Site *moreSites(void); + +static Widget sq_w; /* sites query form dialog */ +static Widget sql_w; /* sites query scrolled list */ +static Widget srtf_w; /* search text field */ +static Widget settf_w; /* set text field */ +static Widget newf_w; /* form to un/manage to show create */ +static Widget nsn_w; /* new site name TF*/ +static Widget nlt_w; /* new site lat TF */ +static Widget nlg_w; /* new site long TF */ +static Widget nel_w; /* new site elev TF */ +static Widget nzn_w; /* new site tz name TF */ +static Widget nzo_w; /* new site tz offset TF */ +static Widget ndn_w; /* new site dst name */ +static Widget ndo_w; /* new site dst offset TF */ +static Widget dbm_w; /* dst beg month pulldown */ +static Widget dbw_w; /* dst beg week pulldown */ +static Widget dbd_w; /* dst beg day-of-week pulldown */ +static Widget dbat_w; /* dst beg time TF */ +static Widget dem_w; /* dst end month pulldown */ +static Widget dew_w; /* dst end week pulldown */ +static Widget ded_w; /* dst end day-of-week pulldown */ +static Widget deat_w; /* dst end time TF */ + +#define MAXSITELLEN 512 /* maximum site file line length */ +static Site *sites; /* malloced list of Sites */ +static int nsites; /* number of entries in sites array */ +static char sfn[] = "xephem_sites";/* xephem site file */ + +/* strings in dst begin/end pulldown + * N.B. we don't use the string values, we presume to use children[] index + */ +static char *months[] = { + "January ", "February ", "March ", "April ", "May ", "June ", + "July ", "August ", "September", "October ", "November ", "December " +}; +static char *weeks[] = { + "1", "2", "3", "4", "Last" +}; +static char *dow[] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" +}; +static char twoam[] = " 2:00:00"; + + +/* let user choose a site from a scrolled list */ +void +sites_manage() +{ + if (!sites) + read_files(); + if (!sq_w) { + create_sq_w(); + fill_list(); + } + + XtManageChild (sq_w); +} + +/* give caller our list of sites, if wanted, but always return count */ +int +sites_get_list (Site **sipp) +{ + if (!sites) + read_files(); + if (sipp) + *sipp = sites; + return (nsites); +} + +/* search the sites list for one containing glob p. + * start after the current selection in the list, if any. + * return index into sites[] if find, else return -1. + */ +int +sites_search (char *p) +{ + int *poslist, poscount; + int startpos; + int flags; + int i, n; + + /* read files if first time */ + if (!sites) + read_files(); + + /* decide where to start - resume if gui up, else just at front */ + if (sql_w && XmListGetSelectedPos (sql_w, &poslist, &poscount)==True) { + startpos = poslist[0]%nsites; /* 1-based so already +1 */ + XtFree ((char *)poslist); + } else + startpos = 0; + + /* check each possible offset location starting at startpos. + */ + flags = 0; +#if defined(FNM_CASEFOLD) /* GNU extension only */ + flags |= FNM_CASEFOLD; +#endif + for (n = 0, i = startpos; n < nsites; n++, i = (i+1)%nsites) { + Site *sip = &sites[i]; + if (!fnmatch (p, sip->si_name, flags)) + return (i); + } + + return (-1); +} + +/* fill ab[maxn] with an abbreviated version of full. + * N.B. allow for full == NULL or full[0] == '\0'. + */ +void +sites_abbrev (full, ab, maxn) +char *full, ab[]; +int maxn; +{ + int fl; + int n; + + /* check edge conditions */ + if (!full || (fl = strlen(full)) == 0) + return; + + /* just copy if it all fits ok */ + if (fl < maxn-1) { + (void) strcpy (ab, full); + return; + } + + /* clip off words from the right until short enough. + * n is an index, not a count. + */ + for (n = fl-1; n >= maxn-4; ) { + while (n > 0 && isalnum(full[n])) + n--; + while (n > 0 && (ispunct(full[n]) || isspace(full[n]))) + n--; + } + (void) sprintf (ab, "%.*s...", n+1, full); +} + +/* make the site selection dialog */ +static void +create_sq_w() +{ + Widget w, cl_w, fr_w, add_w; + Arg args[20]; + int n; + + /* create outter form dialog */ + + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNverticalSpacing, 7); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 7); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + sq_w = XmCreateFormDialog(toplevel_w, "Sites", args, n); + set_something (sq_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (sq_w, XmNhelpCallback, sq_help_cb, NULL); + sr_reg (XtParent(sq_w), "XEphem*Sites.x", maincategory, 0); + sr_reg (XtParent(sq_w), "XEphem*Sites.y", maincategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Site Selection"); n++; + XtSetValues (XtParent(sq_w), args, n); + + /* make Close Add and Help across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 30); n++; + cl_w = XmCreatePushButton (sq_w, "Close", args, n); + wtip (cl_w, "Close this window"); + XtAddCallback (cl_w, XmNactivateCallback, sq_cancel_cb, NULL); + XtManageChild (cl_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 40); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 60); n++; + add_w = XmCreateToggleButton (sq_w, "Create", args, n); + wtip (add_w, "Build a new site definition"); + wtip (add_w, "Show fields to build a new site entry"); + XtAddCallback (add_w, XmNvalueChangedCallback, sq_create_cb, NULL); + XtManageChild (add_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 70); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 90); n++; + w = XmCreatePushButton (sq_w, "Help", args, n); + wtip (w, "Get more info about this window"); + XtAddCallback (w, XmNactivateCallback, sq_help_cb, NULL); + XtManageChild (w); + + /* build new section */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, cl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fr_w = XmCreateFrame (sq_w, "New", args, n); + XtManageChild (fr_w); + + buildNew (fr_w); + + /* make a PB and TF to enter the set string above that */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, fr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + w = XmCreatePushButton (sq_w, "Set", args, n); + XtAddCallback (w, XmNactivateCallback, sq_set_cb, NULL); + wtip (w, "Set Main site to string at right"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, fr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 30); n++; + settf_w = XmCreateTextField (sq_w, "SetTF", args, n); + wtip (settf_w, "Candidate site"); + XtAddCallback (settf_w, XmNactivateCallback, sq_set_cb, NULL); + XtManageChild (settf_w); + + /* make a PB and TF to enter the search string above that */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, settf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + w = XmCreatePushButton (sq_w, "Search", args, n); + XtAddCallback (w, XmNactivateCallback, sq_search_cb, NULL); + wtip (w, "Search for next Site matching glob at right"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, settf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 30); n++; + srtf_w = XmCreateTextField (sq_w, "SearchTF", args, n); + wtip (srtf_w, "Candidate glob pattern"); + XtAddCallback (srtf_w, XmNactivateCallback, sq_search_cb, NULL); + XtManageChild (srtf_w); + + /* make the scrolled list at the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, srtf_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++; + sql_w = XmCreateScrolledList (sq_w, "SiteSL", args, n); + wtip (sql_w, "Sites.. click to copy below, double-click to Set too"); + XtAddCallback (sql_w, XmNdefaultActionCallback, sq_dblclick_cb, NULL); + XtAddCallback (sql_w, XmNbrowseSelectionCallback, sq_click_cb, NULL); + XtManageChild (sql_w); +} + +/* build the section that lets the user build a new entry */ +static void +buildNew (Widget frame_w) +{ + typedef struct { + char *prompt; /* prompt label, or NULL for gap */ + char *defstr; /* default string */ + Widget *wp; /* text widget */ + char *tip; /* tool tip */ + } NewRC; + static NewRC newrc[] = { + {"Latitude:", " 40:00:00", &nlt_w, "Latitude, D:M:S +N"}, + {"Longitude:", " 75:00:00", &nlg_w, "Longitude, D:M:S +W"}, + {"Elevation:", " 0", &nel_w, "Elevation, m above MSL"}, + {NULL}, + {NULL}, + {"Zone name:", " EST", &nzn_w, "Local time zone name"}, + {"Offset:", " 5", &nzo_w, "Local hours west of UTC"}, + {"DST name:", " EDT", &ndn_w, "Time zone name when DST"}, + {"Offset:", " 4", &ndo_w, "Hours west when DST"}, + }; + Widget rc_w, mrc_w, w; + Arg args[20]; + int i, n; + + /* master form -- managed elsewhere */ + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 7); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + newf_w = XmCreateForm (frame_w, "NF", args, n); + + /* site name */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 20); n++; + w = XmCreateLabel (newf_w, "SN", args, n); + set_xmstring (w, XmNlabelString, "Site name:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + nsn_w = XmCreateTextField (newf_w, "SN", args, n); + wtip (nsn_w, "Enter name for new site"); + XtManageChild (nsn_w); + + /* next set consistent enough to use a RC */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, nsn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, 4); n++; + XtSetArg (args[n], XmNspacing, 7); n++; + rc_w = XmCreateRowColumn (newf_w, "RC", args, n); + XtManageChild (rc_w); + + /* build fields */ + + for (i = 0; i < XtNumber(newrc); i++) { + NewRC *p = &newrc[i]; + + if (p->prompt) { + n = 0; + w = XmCreateLabel (rc_w, "NSL", args, n); + set_xmstring (w, XmNlabelString, p->prompt); + XtManageChild (w); + n = 0; + XtSetArg (args[n], XmNvalue, p->defstr); n++; + XtSetArg (args[n], XmNcolumns, 10); n++; + w = XmCreateTextField (rc_w, "NST", args, n); + XtManageChild (w); + wtip (w, p->tip); + *p->wp = w; + } else { + n = 0; + w = XmCreateLabel (rc_w, "NSG", args, n); + set_xmstring (w, XmNlabelString, " "); + XtManageChild (w); + } + } + + /* build DST begins and end controls */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + mrc_w = XmCreateRowColumn (newf_w, "BMB", args, n); + wtip (mrc_w, "Rules for when summer savings time begins"); + XtManageChild (mrc_w); + buildDST (mrc_w, "DST Beg", &dbm_w, &dbw_w, &dbd_w, &dbat_w); + setMenuHistory (dbm_w, 3); + setMenuHistory (dbw_w, 0); + setMenuHistory (dbd_w, 0); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mrc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + mrc_w = XmCreateRowColumn (newf_w, "BMB", args, n); + wtip (mrc_w, "Rules for when summer savings time ends"); + XtManageChild (mrc_w); + buildDST (mrc_w, "DST End", &dem_w, &dew_w, &ded_w, &deat_w); + setMenuHistory (dem_w, 9); + setMenuHistory (dew_w, 4); + setMenuHistory (ded_w, 0); + + /* Set main and Save PBs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mrc_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 40); n++; + w = XmCreatePushButton (newf_w, "S", args, n); + wtip (w, "Install new site definition into Main"); + set_xmstring (w, XmNlabelString, "Set main"); + XtAddCallback (w, XmNactivateCallback, sq_setmain_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mrc_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 85); n++; + w = XmCreatePushButton (newf_w, "S", args, n); + wtip (w, "Save new site definition to private xephem_sites file"); + set_xmstring (w, XmNlabelString, "Save"); + XtAddCallback (w, XmNactivateCallback, sq_save_cb, NULL); + XtManageChild (w); +} + +static void +buildDST (Widget p_w, char *prompt, Widget *m_w, Widget *w_w, Widget *d_w, +Widget *at_w) +{ + Widget w, om_w; + char buf[32]; + Arg args[20]; + int n; + + n = 0; + w = XmCreateLabel (p_w, "DL", args, n); + set_xmstring (w, XmNlabelString, prompt); + XtManageChild (w); + + n = 0; + *m_w = XmCreatePulldownMenu (p_w, "MPD", args, n); + addButtons (*m_w, months, XtNumber(months)); + n = 0; + XtSetArg (args[n], XmNsubMenuId, *m_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + om_w = XmCreateOptionMenu (p_w, "MCB", args, n); + XtManageChild (om_w); + w = XmOptionButtonGadget (om_w); + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetValues (w, args, n); + + n = 0; + *w_w = XmCreatePulldownMenu (p_w, "WPD", args, n); + addButtons (*w_w, weeks, XtNumber(weeks)); + n = 0; + XtSetArg (args[n], XmNsubMenuId, *w_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + om_w = XmCreateOptionMenu (p_w, "WCB", args, n); + XtManageChild (om_w); + w = XmOptionButtonGadget (om_w); + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetValues (w, args, n); + + n = 0; + *d_w = XmCreatePulldownMenu (p_w, "DPD", args, n); + addButtons (*d_w, dow, XtNumber(dow)); + n = 0; + XtSetArg (args[n], XmNsubMenuId, *d_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + om_w = XmCreateOptionMenu (p_w, "DCB", args, n); + XtManageChild (om_w); + w = XmOptionButtonGadget (om_w); + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetValues (w, args, n); + + n = 0; + w = XmCreateLabel (p_w, "AT", args, n); + set_xmstring (w, XmNlabelString, "at"); + XtManageChild (w); + n = 0; + XtSetArg (args[n], XmNcolumns, 10); n++; + sprintf (buf, "%10s", twoam); + XtSetArg (args[n], XmNvalue, buf); n++; + *at_w = XmCreateTextField (p_w, "ATT", args, n); + XtManageChild (*at_w); +} + +static void +addButtons (Widget pd_w, char **names, int nnames) +{ + Widget w; + Arg args[20]; + int i, n; + + for (i = 0; i < nnames; i++) { + n = 0; + w = XmCreatePushButton (pd_w, "SPB", args, n); + set_xmstring (w, XmNlabelString, names[i]); + XtManageChild (w); + } +} + +/* menuHistory in the given option menu to widget number i */ +static void +setMenuHistory (Widget w, int i) +{ + WidgetList children; + + get_something (w, XmNchildren, (XtArgVal)&children); + set_something (w, XmNmenuHistory, (XtArgVal)children[i]); +} + +/* shift the scrolled list so sites[i] is selected and visible */ +static void +scroll_sites (i) +int i; +{ + i += 1; /* List is 1-based */ + XmListSetPos (sql_w, i); /* scroll it to top */ + XmListSelectPos (sql_w, i, False); /* just highlight it */ +} + +/* reset the current sites list, read shared then merge private and sort */ +static void +read_files () +{ + char fn[1024]; + FILE *fp; + + /* reset current list */ + XtFree ((char *)sites); + sites = NULL; + nsites = 0; + + /* try share then private */ + sprintf (fn, "%s/auxil/%s", getShareDir(), sfn); + fp = fopenh (fn, "r"); + if (fp) { + read_file (fp); + fclose (fp); + } else { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + } + sprintf (fn, "%s/%s", getPrivateDir(), sfn); + fp = fopenh (fn, "r"); + if (fp) { + read_file (fp); + fclose (fp); + } else if (errno != ENOENT) { /* ok if just absent */ + xe_msg (1, "%s:\n%s", fn, syserrstr()); + } + + /* sort by name */ + qsort ((void *)sites, nsites, sizeof(Site), sites_cmpf); +} + +/* read the given sites file and append to sites list. + * caller checks if nsites increased to gauge success + */ +static void +read_file (FILE *fp) +{ + char buf[MAXSITELLEN]; + + /* read each entry, building up list */ + while (fgets (buf, sizeof(buf), fp) != NULL) { + char name[MAXSITELLEN]; + char tzdefn[128]; + int latd, latm; + int lngd, lngm; + double lats, lngs; + char latNS, lngEW; + double lt, lg; + double ele; + Site *sp; + int l; + int nf; + + /* read line.. skip if not complete. tz is optional */ + tzdefn[0] = '\0'; + nf = sscanf (buf, "%[^;]; %3d %2d %lf %c ; %3d %2d %lf %c ;%lf ; %s", + name, &latd, &latm, &lats, &latNS, + &lngd, &lngm, &lngs, &lngEW, &ele, tzdefn); + if (nf < 10) + continue; + + /* strip trailing blanks off name */ + for (l = strlen (name); --l >= 0; ) + if (isspace(name[l])) + name[l] = '\0'; + else + break; + + /* crack location */ + lt = degrad (latd + latm/60.0 + lats/3600.0); + if (latNS == 'S') + lt = -lt; + lg = degrad (lngd + lngm/60.0 + lngs/3600.0); + if (lngEW == 'W') + lg = -lg; + + /* extend sites array */ + sp = moreSites(); + + /* fill a new Site record */ + memset ((void *)sp, 0, sizeof(Site)); + sp->si_lat = (float)lt; + sp->si_lng = (float)lg; + sp->si_elev = (float)ele; + (void) strncpy (sp->si_tzdefn, tzdefn, sizeof(sp->si_tzdefn)-1); + (void) strncpy (sp->si_name, name, sizeof(sp->si_name)-1); + } +} + +/* (re)fill the scrolled list sql_w with the set of sites. + * also tell earth view to redraw. + */ +static void +fill_list () +{ + XmString *xms; + int i; + + /* build array of XmStrings for fast updating of the ScrolledList */ + xms = (XmString *) XtMalloc (nsites * sizeof(XmString)); + for (i = 0; i < nsites; i++) + xms[i] = XmStringCreateSimple (sites[i].si_name); + XmListDeleteAllItems (sql_w); + XmListAddItems (sql_w, xms, nsites, 0); + + /* finished with the XmStrings table */ + for (i = 0; i < nsites; i++) + XmStringFree (xms[i]); + XtFree ((void *)xms); + + /* update earth list */ + e_update (mm_get_now(), 1); +} + +/* compare name portions of two pointers to Sites in qsort fashion. + */ +static int +sites_cmpf (const void * v1, const void * v2) +{ + char *name1 = ((Site *)v1)->si_name; + char *name2 = ((Site *)v2)->si_name; + + return (strcmp (name1, name2)); +} + +/* called when CR is hit in the Set text field /or/ from Set PB. + */ +/* ARGSUSED */ +static void +sq_set_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *str = XmTextFieldGetString (settf_w); + int i; + + /* if text field matches a site, use the full definition, else just + * use the simple string. + */ + for (i = 0; i < nsites; i++) { + if (!strcmp (sites[i].si_name, str)) { + scroll_sites (i); + mm_setsite(&sites[i], 0); + break; + } + } + if (i == nsites) + mm_sitename (str); + + XtFree (str); +} + +/* called when CR is hit in the search text field /or/ from Search PB */ +/* ARGSUSED */ +static void +sq_search_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *str; + int i; + + str = XmTextFieldGetString (srtf_w); + i = sites_search (str); + if (i < 0) + xe_msg (1, "No matching site found."); + else { + /* Set and scroll */ + XmTextFieldSetString (settf_w, sites[i].si_name); + scroll_sites (i); + } + XtFree (str); +} + +/* called when an item in the scrolled list is double-clicked */ +/* ARGSUSED */ +static void +sq_dblclick_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int *pos, npos; + int free; + + /* put into Set field and install in Main, all at once */ + if ((free = XmListGetSelectedPos (sql_w, &pos, &npos)) && + npos == 1 && pos[0] > 0 && pos[0] <= nsites) { + Site *sip = &sites[pos[0]-1]; /* pos is 1-based */ + XmTextFieldSetString (settf_w, sip->si_name); + mm_setsite(sip, 0); + } else { + xe_msg (1, "Bogus list selection"); + } + + if (free) + XtFree ((char *)pos); +} + +/* called when an item in the scrolled list is single-clicked */ +/* ARGSUSED */ +static void +sq_click_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int *pos, npos; + int free; + + /* copy to set field */ + if ((free = XmListGetSelectedPos (sql_w, &pos, &npos)) && + npos == 1 && pos[0] > 0 && pos[0] <= nsites) { + Site *sip = &sites[pos[0]-1]; /* pos is 1-based */ + XmTextFieldSetString (settf_w, sip->si_name); + } else { + xe_msg (1, "Bogus list selection"); + } + + if (free) + XtFree ((char *)pos); +} + +/* callback from the Help button + */ +/* ARGSUSED */ +static void +sq_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Load and select from a list of sites." +}; + + hlp_dialog ("MainMenu_sites_dialog", msg, XtNumber(msg)); +} + +/* called when the Cancel button is hit */ +/* ARGSUSED */ +static void +sq_cancel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (sq_w); +} + +/* called when the Add TB is hit */ +/* ARGSUSED */ +static void +sq_create_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState (w)) + XtManageChild (newf_w); + else + XtUnmanageChild (newf_w); +} + +/* called when the Set main PB is hit */ +/* ARGSUSED */ +static void +sq_setmain_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Site ns; + + if (buildNewSite(&ns) < 0) + return; + mm_setsite (&ns, 0); +} + +/* called when the Save PB is hit */ +/* ARGSUSED */ +static void +sq_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char fn[1024]; + Site ns; + FILE *fp; + + if (buildNewSite(&ns) < 0) + return; + + /* add to display set */ + memcpy (moreSites(), &ns, sizeof(ns)); + qsort ((void *)sites, nsites, sizeof(Site), sites_cmpf); + fill_list(); + + /* append to private file */ + sprintf (fn, "%s/%s", getPrivateDir(), sfn); + fp = fopenh (fn, "a+"); + if (fp) { + /* 123:45:67 */ + char latbuf[32], lngbuf[32]; + fs_sexa (latbuf, raddeg(fabs(ns.si_lat)), 3, 3600); + fs_sexa (lngbuf, raddeg(fabs(ns.si_lng)), 3, 3600); + fprintf (fp, + "%-40s; %.3s %.2s %.2s %c ; %.3s %.2s %.2s %c ;%6.1f ; %s\n", + ns.si_name, + latbuf, latbuf+4, latbuf+7, ns.si_lat < 0 ? 'S' : 'N', + lngbuf, lngbuf+4, lngbuf+7, ns.si_lng < 0 ? 'W' : 'E', + ns.si_elev, ns.si_tzdefn); + fclose (fp); + } else { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + } +} + +/* gather widget settings and build a new Site. + * return 0 if looks ok, else -1 + */ +static int +buildNewSite (Site *sp) +{ + char buf[128], *bp; + int bl = sizeof(buf); + double tmp; + int zl; + + /* init */ + + memset (sp, 0, sizeof(*sp)); + + /* always gather name lat long elev */ + + strncpy (sp->si_name, getTF(nsn_w,buf,bl), sizeof(sp->si_name)-1); + if (strlen(sp->si_name) == 0) { + xe_msg (1, "Please specify a site name"); + return (-1); + } + + f_scansexa (getTF(nlt_w,buf,bl), &tmp); + sp->si_lat = (float) degrad (tmp); + + f_scansexa (getTF(nlg_w,buf,bl), &tmp); + sp->si_lng = (float) degrad (-tmp); + + sp->si_elev = (float) strtod (getTF(nel_w,buf,bl), NULL); + + zl = 0; + + zl += sprintf (sp->si_tzdefn+zl, "%s", nows(getTF(nzn_w,buf,bl))); + + f_scansexa (getTF(nzo_w,buf,bl), &tmp); + if (tmp - (int)tmp != 0) + fs_sexa (buf, tmp, 2, 60); + zl += sprintf (sp->si_tzdefn+zl, "%s", nows(buf)); + + /* only do the rest if dst name is non-blank */ + + bp = nows(getTF(ndn_w,buf,bl)); + if (strlen(bp) > 0) { + zl += sprintf (sp->si_tzdefn+zl, "%s", bp); + + f_scansexa (getTF(ndo_w,buf,bl), &tmp); + if (tmp - (int)tmp != 0) + fs_sexa (buf, tmp, 2, 60); + zl += sprintf (sp->si_tzdefn+zl, "%s", nows(buf)); + + + zl += sprintf (sp->si_tzdefn+zl, ",M%d", getPDmH (dbm_w)+1); + zl += sprintf (sp->si_tzdefn+zl, ".%d", getPDmH (dbw_w)+1); + zl += sprintf (sp->si_tzdefn+zl, ".%d", getPDmH (dbd_w)); + f_scansexa (getTF(dbat_w,buf,bl), &tmp); + fs_sexa (buf, tmp, 3, 3600); + if (strcmp(buf,twoam)) + zl += sprintf (sp->si_tzdefn+zl, "/%s", nows(buf)); + + zl += sprintf (sp->si_tzdefn+zl, ",M%d", getPDmH (dem_w)+1); + zl += sprintf (sp->si_tzdefn+zl, ".%d", getPDmH (dew_w)+1); + zl += sprintf (sp->si_tzdefn+zl, ".%d", getPDmH (ded_w)); + f_scansexa (getTF(deat_w,buf,bl), &tmp); + fs_sexa (buf, tmp, 3, 3600); + if (strcmp(buf,twoam)) + zl += sprintf (sp->si_tzdefn+zl, "/%s", nows(buf)); + } + + /* + fprintf (stderr, "'%s' '%s'\n", sp->si_name, sp->si_tzdefn); + */ + + return (0); +} + +/* extract up to bl-1 chars of text from given text field widget into buf, + * return buf which always includes EOS. + */ +static char * +getTF (Widget w, char buf[], int bl) +{ + char *txt; + + txt = XmTextFieldGetString (w); + strncpy (buf, txt, bl); + XtFree (txt); + buf[bl-1] = '\0'; + return (buf); +} + +/* remove all white space from bp IN PLACE and return first non-white char */ +static char * +nows (char *bp) +{ + char *start = NULL, *dest; + + for (dest = bp; *bp; bp++) { + if (*bp != ' ') { + if (!start) + start = dest; + *dest++ = *bp; + } + } + *dest = '\0'; + + return (start ? start : bp); +} + +/* scan the children of the given pulldown menu and return the children[] + * index of the one matching menuHistory + */ +static int +getPDmH (Widget pd) +{ + WidgetList children; + Cardinal numChildren; + Widget mh; + int i; + + get_something (pd, XmNchildren, (XtArgVal)&children); + get_something (pd, XmNnumChildren, (XtArgVal)&numChildren); + get_something (pd, XmNmenuHistory, (XtArgVal)&mh); + + for (i = 0; i < numChildren; i++) + if (children[i] == mh) + return (i); + + printf ("Bug! no menuHistory for %s\n", XtName(pd)); + abort(); +} + +/* extend sites[] by one and return pointer to new entry */ +static Site * +moreSites() +{ + sites = (Site *) XtRealloc ((void *)sites, (nsites+1)*sizeof(Site)); + return (&sites[nsites++]); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sites.c,v $ $Date: 2006/08/21 20:04:30 $ $Revision: 1.27 $ $Name: $"}; diff --git a/GUI/xephem/sites.h b/GUI/xephem/sites.h new file mode 100644 index 0000000..f8c21e1 --- /dev/null +++ b/GUI/xephem/sites.h @@ -0,0 +1,30 @@ +#ifndef _SITES_H +#define _SITES_H + +/* interface to e_read_sites(). */ + +/* this is to form a list of sites */ +typedef struct { + float si_lat; /* lat (+N), rads */ + float si_lng; /* long (+E), rads */ + float si_elev; /* elevation above sea level, meters (-1 means ?) */ + char si_tzdefn[64]; /* timezone info.. same format as UNIX tzset(3) */ + char si_name[40]; /* name */ +} Site; + +extern void mm_setsite (Site *sp, int update); +extern void mm_sitename (char *name); +extern char *mm_getsite (void); + +extern int sites_get_list (Site **sipp); +extern int sites_search (char *str); +extern void sites_manage (void); +extern void sites_abbrev (char *full, char ab[], int maxn); + + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: sites.h,v $ $Date: 2003/05/28 23:56:19 $ $Revision: 1.8 $ $Name: $ + */ + +#endif /* _SITES_H */ diff --git a/GUI/xephem/skybinary.c b/GUI/xephem/skybinary.c new file mode 100644 index 0000000..23245c5 --- /dev/null +++ b/GUI/xephem/skybinary.c @@ -0,0 +1,601 @@ +/* code to display a binary star orbit + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define PSTARD 6 /* primary star diameter, pixels */ +#define FSTARD 4 /* future star diameter, pixels */ +#define SSTARD 2 /* secondary star diameter, pixels */ +#define NPLOTS 50 /* points to plot orbit */ + +static void bs_create_shell_w (void); +static void bs_exp_cb (Widget w, XtPointer client, XtPointer call); +static void bs_close_cb (Widget w, XtPointer client, XtPointer call); +static void bs_help_cb (Widget w, XtPointer client, XtPointer call); +static void bs_print_cb (Widget w, XtPointer client, XtPointer call); +static void bs_print (void); +static void bs_annotate (Now *np); +static void bs_update(void); +static void bs_refresh(void); +static void bs_discrete(Obj *op); +static void bs_orbit(Obj *op); +static void bs_mkgcs(void); + +static Widget bsshell_w; /* main shell */ +static Widget bstable_w; /* ephemerides text */ +static Widget bsda_w; /* orbit drawing area */ +static Pixmap bs_pm; /* off screen drawing staging area */ +static Obj bsobj; /* record of binary to redraw */ +static Pixel annot_p; /* annotation color */ +static Pixel skybg_p; /* sky background color */ +static GC bs_gc; /* drawing context */ +static int bsmapw, bsmaph; /* map size */ + +static char skybscategory[] = "Sky View -- Binary system map";/*Save category */ + +/* called to display op, a BINARYSTAR. + */ +void +svbs_manage (Obj *op) +{ + if (!bsshell_w) { + bs_create_shell_w(); + bs_mkgcs(); + } + + if (!is_type(op, BINARYSTARM)) { + printf ("svbs called without BIN type %d\n", op->o_type); + abort(); + } + + /* save locally for bs_update */ + bsobj = *op; + + if (isUp (bsshell_w)) + bs_update (); /* already up, just draw */ + else + XtManageChild (bsshell_w); /* expose will update */ +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +svbs_newres() +{ + if (!bsshell_w) + return; + bs_mkgcs(); + bs_update(); +} + +/* create bsshell_w, the top view dialog */ +static void +bs_create_shell_w() +{ + typedef struct { + char *label; + char *tip; + XtCallbackProc cb; + } Ctrl; + static Ctrl ctrls[] = { + {"Close", "Close this window", bs_close_cb}, + {"Print", "Print this window", bs_print_cb}, + {"Help", "More info about this window", bs_help_cb} + }; + Widget w, f_w; + Arg args[20]; + int i; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + bsshell_w = XmCreateFormDialog (svshell_w, "BinaryStar", args, n); + set_something (bsshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(bsshell_w),"XEphem*BinaryStar.width",skybscategory,0); + sr_reg (XtParent(bsshell_w),"XEphem*BinaryStar.height",skybscategory,0); + sr_reg (XtParent(bsshell_w),"XEphem*BinaryStar.x",skybscategory,0); + sr_reg (XtParent(bsshell_w),"XEphem*BinaryStar.y",skybscategory,0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Binary system map"); n++; + XtSetValues (XtParent(bsshell_w), args, n); + + /* controls across the bottom */ + + for (i = 0; i < XtNumber(ctrls); i++) { + Ctrl *cp = &ctrls[i]; + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 100*(1+i*4)/(4*XtNumber(ctrls)+1)); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100*(4+i*4)/(4*XtNumber(ctrls)+1)); n++; + w = XmCreatePushButton (bsshell_w, "BSPB", args, n); + XtAddCallback (w, XmNactivateCallback, cp->cb, NULL); + set_xmstring (w, XmNlabelString, cp->label); + wtip (w, cp->tip); + XtManageChild (w); + } + + /* drawing area in a frame on left half */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 50); n++; + f_w = XmCreateFrame (bsshell_w, "BSDAF", args, n); + XtManageChild (f_w); + + n = 0; + bsda_w = XmCreateDrawingArea (f_w, "Map", args, n); + XtAddCallback (bsda_w, XmNexposeCallback, bs_exp_cb, NULL); + XtManageChild (bsda_w); + + /* scrolled text on right */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, f_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + bstable_w = XmCreateScrolledText (bsshell_w, "BSST", args, n); + XtManageChild (bstable_w); + +} + +/* callback from either expose or resize of the topview. + */ +/* ARGSUSED */ +static void +bs_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected bsda_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!bs_pm || (int)nx != bsmapw || (int)ny != bsmaph) { + if (bs_pm) + XFreePixmap (dsp, bs_pm); + bs_pm = XCreatePixmap (dsp, win, nx, ny, d); + bsmapw = nx; + bsmaph = ny; + } + + /* recompute, might be new object */ + bs_update (); +} + +/* update bs_pm and ephemerides from bsobj then refresh */ +static void +bs_update() +{ + Obj *op = &bsobj; + + if (op->b_nbp > 0) + bs_discrete(op); + else + bs_orbit(op); + + bs_refresh(); +} + +/* plot discrete binary positions */ +static void +bs_discrete (Obj *op) +{ + BinPos *bpp = op->b_bp; + Obj secondary; + XArc xa[MAXBINPOS]; + GC stargc; + int x0, y0, x, y; + double maxsep; + double nicescale, ppas; + char buf[1024]; + int l, txtl; + int i; + + /* print header, center if short */ + i = strlen(op->o_name); + i = i < 13 ? (13-strlen(op->o_name))/2 : 0; + txtl = 0; + l = sprintf (buf, "%*sBinary system %s\n", i, "", op->o_name); + XmTextSetString (bstable_w, buf); + txtl += l; + l = sprintf (buf, " Year Sep PA\n"); + XmTextInsert (bstable_w, txtl, buf); + txtl += l; + + /* find largest separation */ + maxsep = 0; + for (i = 0; i < op->b_nbp; i++) + if (bpp[i].bp_sep > maxsep) + maxsep = bpp[i].bp_sep; + + /* set center and pixels/arcsec scale */ + x0 = bsmapw/2; + y0 = bsmaph/2; + ppas = 0.35 * (bsmapw>bsmaph ? bsmaph/maxsep : bsmapw/maxsep); + + /* erase */ + XSetForeground (XtD, bs_gc, skybg_p); + XFillRectangle (XtD, bs_pm, bs_gc, 0, 0, bsmapw, bsmaph); + + /* primary star in center */ + obj_pickgc(op, toplevel_w, &stargc); + xa[0].x = x0-PSTARD/2; + xa[0].y = y0-PSTARD/2; + xa[0].width = xa[0].height = PSTARD; + xa[0].angle1 = 0; + xa[0].angle2 = 360*64; + XPSFillArcs (XtD, bs_pm, stargc, &xa[0], 1); + + /* convenient scale indicator */ + XSetForeground (XtD, bs_gc, annot_p); + nicescale = pow (10.0, floor(log10(2*maxsep))); + i = (int)floor(ppas*nicescale + 0.5); + y = y0 + (int)floor(1.2*ppas*maxsep); + XPSDrawLine (XtD, bs_pm, stargc, x0-i/2, y, x0+i/2, y); + l = sprintf (buf, "%g\"", nicescale); + XPSDrawString (XtD, bs_pm, bs_gc, x0-i/2, y+15, buf, l); + + /* N/E annotation */ + y = y0 - (int)floor(1.1*ppas*maxsep); + XPSDrawString (XtD, bs_pm, bs_gc, x0-3, y, "N", 1); + x = x0 - (int)floor(1.1*ppas*maxsep); + XPSDrawString (XtD, bs_pm, bs_gc, x, y0+5, "E", 1); + + memset (&secondary, 0, sizeof(secondary)); + secondary.o_type = FIXED; + secondary.f_class = 'S'; + strcpy (secondary.o_name, "BinaryTemp"); + memmove (secondary.f_spect, op->b_2spect, sizeof(secondary.f_spect)); + obj_pickgc(&secondary, toplevel_w, &stargc); + + for (i = 0; i < op->b_nbp; i++) { + XArc *xap = &xa[i]; + + xap->width = xap->height = FSTARD; + + l = sprintf (buf, "%2d %8.3f %7.2f %5.1f\n", i+1, bpp[i].bp_ep, + bpp[i].bp_sep, raddeg(bpp[i].bp_pa)); + XmTextInsert (bstable_w, txtl, buf); + txtl += l; + + xap->angle1 = 0; + xap->angle2 = 360*64; + xap->x = x0 - (int)floor(ppas * bpp[i].bp_sep * sin(bpp[i].bp_pa) + + 0.5) - xap->width/2; + xap->y = y0 - (int)floor(ppas * bpp[i].bp_sep * cos(bpp[i].bp_pa) + + 0.5) - xap->height/2; + + } + + XPSFillArcs (XtD, bs_pm, stargc, xa, op->b_nbp); + + for (i = 0; i < op->b_nbp; i++) { + l = sprintf (buf, "%d", i+1); + XPSDrawString (XtD, bs_pm, bs_gc, xa[i].x+5, xa[i].y-5, buf, l); + } +} + + +/* plot one orbit using orbital elements */ +static void +bs_orbit (Obj *op) +{ + typedef struct { double yr, pa, sep; } BSO; + Now *np = mm_get_now(), now = *np; + BinOrbit *bop = &op->b_bo; + double P = op->b_bo.bo_P; /* period in years */ + double yr0; /* starting year */ + Obj secondary; + XArc xa[NPLOTS+2]; + BSO bso[NPLOTS+2]; + double ticks[NPLOTS+2]; + GC stargc; + int x0, y0, sz, x, y; + double maxsep, nicescale, ppas; + char buf[1024]; + int l, txtl, nt; + int i; + + /* find nice orbit marks no more than once around */ + mjd_year (mjd, &yr0); + nt = tickmarks (yr0, yr0+P, NPLOTS, ticks); + while (ticks[nt-1] >= ticks[0]+P) + --nt; + + /* compute orbit points, and find max sep */ + maxsep = 0; + for (i = 0; i < nt; i++) { + BSO *bsp = &bso[i]; + double yr = ticks[i]; + + year_mjd (yr, &now.n_mjd); + op->b_2compute = 1; + obj_cir (&now, op); + + bsp->yr = yr; + bsp->sep = bop->bo_sep; + bsp->pa = bop->bo_pa; + + if (bsp->sep > maxsep) + maxsep = bsp->sep; + } + + /* set center and pixels/arcsec scale */ + x0 = bsmapw/2; + y0 = bsmaph/2; + sz = bsmapw>bsmaph ? bsmaph : bsmapw; + ppas = (sz-50)/(2*maxsep); + + /* erase */ + XSetForeground (XtD, bs_gc, skybg_p); + XFillRectangle (XtD, bs_pm, bs_gc, 0, 0, bsmapw, bsmaph); + + /* plot primary star in center */ + obj_pickgc(op, toplevel_w, &stargc); + xa[0].x = x0-PSTARD/2; + xa[0].y = y0-PSTARD/2; + xa[0].width = xa[0].height = PSTARD; + xa[0].angle1 = 0; + xa[0].angle2 = 360*64; + XPSFillArcs (XtD, bs_pm, stargc, &xa[0], 1); + + /* draw scale indicator */ + XSetForeground (XtD, bs_gc, annot_p); + nicescale = pow (10.0, floor(log10(2*bop->bo_a))); + i = (int)floor(ppas*nicescale + 0.5); + y = y0 + sz/2 - 20; + XPSDrawLine (XtD, bs_pm, stargc, x0-i/2, y, x0+i/2, y); + l = sprintf (buf, "%g\"", nicescale); + XPSDrawString (XtD, bs_pm, bs_gc, x0-i/2, y+15, buf, l); + + /* N/E annotation */ + y = y0 - sz/2 + 20; + XPSDrawString (XtD, bs_pm, bs_gc, x0-3, y, "N", 1); + x = x0 - sz/2 + 10; + XPSDrawString (XtD, bs_pm, bs_gc, x, y0+5, "E", 1); + + /* print table header, center if short */ + i = strlen(op->o_name); + i = i < 13 ? (13-strlen(op->o_name))/2 : 0; + txtl = 0; + l = sprintf (buf, "%*sOne orbit for %s\n", i, "", op->o_name); + XmTextSetString (bstable_w, buf); + txtl += l; + l = sprintf (buf, " Year Sep PA\n"); + XmTextInsert (bstable_w, txtl, buf); + txtl += l; + + /* pick a GC representing the spectral class of the secondary */ + memset (&secondary, 0, sizeof(secondary)); + secondary.o_type = FIXED; + secondary.f_class = 'S'; + strcpy (secondary.o_name, "BinaryTemp"); + memmove (secondary.f_spect, op->b_2spect, sizeof(secondary.f_spect)); + obj_pickgc(&secondary, toplevel_w, &stargc); + + /* plot the secondary and fill in the table */ + for (i = 0; i < nt; i++) { + BSO *bsp = &bso[i]; + XArc *xap = &xa[i]; + + if (i == 0) + xap->width = xap->height = PSTARD; + else if (iwidth = xap->height = FSTARD; + else + xap->width = xap->height = SSTARD; + + l = sprintf (buf, "%2d %8.3f %7.2f %5.1f\n", i+1, bsp->yr, + bsp->sep, raddeg(bsp->pa)); + XmTextInsert (bstable_w, txtl, buf); + txtl += l; + + xap->angle1 = 0; + xap->angle2 = 360*64; + xap->x = x0 - (int)floor(ppas * bsp->sep * sin(bsp->pa) + 0.5) + - xap->width/2; + xap->y = y0 - (int)floor(ppas * bsp->sep * cos(bsp->pa) + 0.5) + - xap->height/2; + + } + XPSFillArcs (XtD, bs_pm, stargc, xa, nt); + + /* add some labels */ + for (i = 0; i < nt; i++) { + if (i == 0 || (i bsmapw/2 ? 5 : -10; + int yoff = xa[i].y > bsmaph/2 ? 15 : -5; + l = sprintf (buf, "%d", i+1); + XPSDrawString (XtD, bs_pm, bs_gc, xa[i].x+xoff, xa[i].y+yoff, + buf, l); + } + } +} + +/* display bs_pm */ +static void +bs_refresh () +{ + XCopyArea (XtD, bs_pm, XtWindow(bsda_w), bs_gc, 0, 0,bsmapw,bsmaph,0,0); +} + +/* ARGSUSED */ +static void +bs_close_cb (Widget w, XtPointer client, XtPointer call) +{ + XtUnmanageChild (bsshell_w); +} + +/* ARGSUSED */ +static void +bs_print_cb (Widget w, XtPointer client, XtPointer call) +{ + XPSAsk ("Binary system map", bs_print); +} + +/* ARGSUSED */ +static void +bs_help_cb (Widget w, XtPointer client, XtPointer call) +{ + static char *msg[] = { + "Shows a binary system map and ephemeris from now" + }; + hlp_dialog ("SkyView_binary", msg, sizeof(msg)/sizeof(msg[0])); +} + +static void +bs_mkgcs() +{ + XFontStruct *vfp; + + (void) get_color_resource (bsda_w, "SkyAnnotColor", &annot_p); + (void) get_color_resource (bsda_w, "SkyColor", &skybg_p); + + bs_gc = XCreateGC (XtD, RootWindow (XtD, DefaultScreen(XtD)), 0L, NULL); + get_views_font (XtD, &vfp); + XSetFont (XtD, bs_gc, vfp->fid); +} + +static void +bs_print (void) +{ + Now *np = mm_get_now(); + int x0, y0, w, h; + + if (!isUp(bsshell_w)) { + xe_msg (1, "Binary system map must be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* chop out square center */ + if (bsmapw > bsmaph) { + w = h = bsmaph; + x0 = (bsmapw - bsmaph)/2; + y0 = 0; + } else { + w = h = bsmapw; + x0 = 0; + y0 = (bsmaph - bsmapw)/2; + } + XPSXBegin (bs_pm, x0, y0, w, h, 1*72, 10*72, (int)(3.5*72)); + + /* redraw */ + bs_update(); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + bs_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +bs_annotate (Now *np) +{ + char *txt = XmTextGetString (bstable_w); + char *tcpy = XtNewString (txt); + char buf[1024]; + char *nlp, *t0; + int r = 70; + + XPSDirect ("/Courier findfont 8 scalefont setfont\n"); + + for (t0 = tcpy; (nlp = strchr (t0, '\n')) != NULL; t0 = nlp+1) { + *nlp = '\0'; + sprintf (buf, "(%s) 350 %d lstr\n", t0, AROWY(r--)); + XPSDirect (buf); + } + + XPSDirect ("/Helvetica findfont 8 scalefont setfont\n"); + + XtFree (txt); + XtFree (tcpy); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skybinary.c,v $ $Date: 2004/06/17 15:19:53 $ $Revision: 1.12 $ $Name: $"}; diff --git a/GUI/xephem/skyeyep.c b/GUI/xephem/skyeyep.c new file mode 100644 index 0000000..4f6905a --- /dev/null +++ b/GUI/xephem/skyeyep.c @@ -0,0 +1,1783 @@ +/* stuff for the eyepiece dialog */ + +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + +/* a list of EyePieces */ +static EyePiece *eyep; /* malloced list of eyepieces */ +static int neyep; /* number of entries off eyep */ + +#define MXSCALE degrad(90) /* max angle to show */ +#define LOSCALE degrad(1./60) /* rads/step at low end */ +#define HISCALE degrad(10./60) /* rads/step at hi end */ +#define CHSCALE degrad(10.) /* where they switch */ +#define SCALEMAX ((int)(CHSCALE/LOSCALE + (MXSCALE-CHSCALE)/HISCALE)) + +/* favorites are managed in an array which is never shuffled. Entries are + * reassigned when needed from unused entries or the array is expanded. + * callbacks have the array index in their client param. + */ +#define MAXEPNM 60 /* maximum name for eyepiece (including \0) */ +#define MAXEPNMD 21 /* maximum name displayed */ +typedef struct { + int inuse; /* whether this entry is in use */ + char name[MAXEPNM]; /* use's name */ + double w, h; /* size, rads */ + int isE; /* whether Elliptical or Rectangular */ + int isS; /* whether Solid or Outline */ + Widget row_w; /* widget with GUI controls for this entry */ + Widget name_w; /* TF with name */ +} FavEyeP; +static FavEyeP *favs; /* malloced array of favorite eyepieces */ +static int nfavs; /* number of entries (regardless of inuse) */ +static Widget favrc_w; /* RC for listing favorites */ +static Widget saved_w; /* TF for name of file to save definitions */ +static Widget savep_w; /* TF for name of file to save positions */ + +static char defeyepfn[] = "eyepieces.epd"; /* default defs file name */ +static char eyep_suffix[] = ".epd"; /* def file name suffix */ +static char defeyelfn[] = "eyepieces.epp"; /* default positions file name*/ +static char eyel_suffix[] = ".epp"; /* positions file name suffix */ + +static Widget eyep_w; /* overall eyepiece dialog */ +static Widget eyepws_w; /* eyepiece width scale */ +static Widget eyephs_w; /* eyepiece height scale */ +static Widget eyepwl_w; /* eyepiece width label */ +static Widget eyepa_w; /* eyepiece rotation angle, scale */ +static Widget eyepal_w; /* eyepiece rotation angle label */ +static Widget eyephl_w; /* eyepiece height label */ +static Widget eyer_w; /* eyepiece Round TB */ +static Widget eyes_w; /* eyepiece Square TB */ +static Widget eyef_w; /* eyepiece filled TB */ +static Widget eyeb_w; /* eyepiece border TB */ +static Widget telrad_w; /* telrad on/off TB */ +static Widget delep_w; /* the delete all PB */ +static Widget lock_w; /* lock scales TB */ +static Widget sa1_w; /* sky angle L for formula 1 results */ +static Widget sa2_w; /* sky angle L for formula 2 results */ +static Widget fl_w; /* focal length TF */ +static Widget fp_w; /* focal plane length TF */ +static Widget afov_w; /* apparent eyepiece fov TF */ +static Widget efl_w; /* eyepiece focal length TF */ +static Widget mfl_w; /* mirror focal length TF */ + +static void se_create_eyep_w (void); +static void se_eyepsz (double *wp, double *hp, double *pp, int *rp, int *fp); +static void se_scale_fmt (Widget s_w, Widget l_w); +static void se_pascale_fmt (Widget s_w, Widget l_w); +static void se_telrad_cb (Widget w, XtPointer client, XtPointer call); +static void se_skyW_cb (Widget w, XtPointer client, XtPointer call); +static void se_skyH_cb (Widget w, XtPointer client, XtPointer call); +static void se_wscale_cb (Widget w, XtPointer client, XtPointer call); +static void se_hscale_cb (Widget w, XtPointer client, XtPointer call); +static void se_pscale_cb (Widget w, XtPointer client, XtPointer call); +static void se_delall_cb (Widget w, XtPointer client, XtPointer call); +static void se_close_cb (Widget w, XtPointer client, XtPointer call); +static void se_addfav_cb (Widget w, XtPointer client, XtPointer call); +static void se_saved_cb (Widget w, XtPointer client, XtPointer call); +static void se_loadd_cb (Widget w, XtPointer client, XtPointer call); +static void se_savep_cb (Widget w, XtPointer client, XtPointer call); +static void se_loadp_cb (Widget w, XtPointer client, XtPointer call); +static void se_delfav_cb (Widget w, XtPointer client, XtPointer call); +static void se_usefav_cb (Widget w, XtPointer client, XtPointer call); +static void se_help_cb (Widget w, XtPointer client, XtPointer call); +static void se_calc1_cb (Widget w, XtPointer client, XtPointer call); +static void se_calc1 (void); +static void se_calc2_cb (Widget w, XtPointer client, XtPointer call); +static void se_calc2 (void); +static void se_delall (void); +static EyePiece *se_addeyep (void); +static double se_getScale (Widget w); +static void se_setScale (Widget w, double a); +static double se_getPScale (Widget w); +static void se_addFavEyeP (FavEyeP *newfp); +static void se_loadEyep (char *fn); +static void se_saveFav (char *fn); +static void se_loadPos (char *fn); +static void se_savePos (char *fn); + +/* telrad circle diameters, degrees */ +static double telrad_sz[] = {.5, 2., 4.}; + +static char skyepcategory[] = "Sky View -- Eyepieces"; + +void +se_manage() +{ + if (!eyep_w) + se_create_eyep_w(); + XtManageChild (eyep_w); +} + +void +se_unmanage() +{ + if (eyep_w) + XtUnmanageChild (eyep_w); +} + +/* called to put up or remove the watch cursor. */ +void +se_cursor (c) +Cursor c; +{ + Window win; + + if (eyep_w && (win = XtWindow(eyep_w)) != 0) { + Display *dsp = XtDisplay(eyep_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* add one eyepiece with the current definition for the given location */ +void +se_add (int aamode, double azra, double altdec) +{ + int telrad; + int nnew; + + /* check for first time */ + if (!eyep_w) + se_create_eyep_w(); + + /* add 1 or 3 if telrad */ + telrad = XmToggleButtonGetState (telrad_w); + nnew = telrad ? 3 : 1; + + /* fill in the details */ + while (--nnew >= 0) { + EyePiece *new = se_addeyep(); + new->azra = azra; + new->altdec = altdec; + new->aamode = aamode; + if (telrad) { + new->eyepw = degrad(telrad_sz[nnew]); + new->eyeph = degrad(telrad_sz[nnew]); + new->eyepa = 0; + new->round = 1; + new->solid = 0; + } else + se_eyepsz (&new->eyepw, &new->eyeph, &new->eyepa, &new->round, &new->solid); + } + + /* at least one to delete now */ + XtSetSensitive (delep_w, True); +} + +/* return whether there are any eyepieces that cover the given location, + * aamode determining the interpretation of the coords. + */ +int +se_isOneHere (int aamode, double azra, double altdec) +{ + double caltdec = cos(altdec); + double saltdec = sin(altdec); + int i; + + for (i = 0; i < neyep; i++) { + EyePiece *ep = &eyep[i]; + double L, l, csep, maxr; + + if (aamode == ep->aamode) { + L = ep->azra; + l = ep->altdec; + } else { + sv_other (ep->altdec, ep->azra, ep->aamode, &l, &L); + } + + solve_sphere (azra-L, PI/2-l, saltdec, caltdec, &csep, NULL); + maxr = (ep->eyepw < ep->eyeph ? ep->eyepw : ep->eyeph)/2; + if (acos(csep) < maxr) + return (1); /* yes, there is */ + } + + /* none found */ + return (0); +} + +/* delete eyepiece that most closely covers the given location. + * aamode determines how to interpret the coords. + */ +void +se_del (int aamode, double azra, double altdec) +{ + double caltdec, saltdec; + double r, maxcsep; + EyePiece *ep, *endep, *minep; + + /* scan for eyepiece closest to target position, leave in minep */ + caltdec = cos(altdec); + saltdec = sin(altdec); + maxcsep = 0; + endep = &eyep[neyep]; + minep = NULL; + for (ep = eyep; ep < endep; ep++) { + double L, l, csep; + + if (aamode == ep->aamode) { + L = ep->azra; + l = ep->altdec; + } else { + sv_other (ep->altdec, ep->azra, ep->aamode, &l, &L); + } + + solve_sphere (azra-L, PI/2-l, saltdec, caltdec, &csep, NULL); + if (csep > maxcsep) { + maxcsep = csep; + minep = ep; + } + } + if (!minep) + return; + + /* if actually under eyepiece, remove it */ + r = (minep->eyepw < minep->eyeph ? minep->eyepw : minep->eyeph)/2; + if (maxcsep > cos(r)) { + while (++minep < endep) + minep[-1] = minep[0]; + + /* drop count, but leave array.. likely grows again anyway */ + neyep--; + + /* may have no more left now! */ + XtSetSensitive (delep_w, neyep); + } +} + + +/* return the list of current eyepieces, if interested, and the count. + */ +int +se_getlist (EyePiece **ep) +{ + if (ep) + *ep = eyep; + if (delep_w) + XtSetSensitive (delep_w, neyep); + return (neyep); +} + +/* fetch the current eyepiece size and rotation angle, all in rads, + * whether it is round, and whether it is filled from the dialog. + */ +static void +se_eyepsz(double *wp, double *hp, double *ap, int *rp, int *fp) +{ + if (!eyep_w) + se_create_eyep_w(); + + *wp = se_getScale (eyepws_w); + *hp = se_getScale (eyephs_w); + *ap = se_getPScale (eyepa_w); + + *rp = XmToggleButtonGetState (eyer_w); + *fp = XmToggleButtonGetState (eyef_w); +} + +/* increase size of eyep[] by one and return pointer to new location */ +static EyePiece * +se_addeyep () +{ + eyep = (EyePiece *) XtRealloc ((void*)eyep, (neyep+1)*sizeof(EyePiece)); + return (&eyep[neyep++]); +} + +/* create the eyepiece size dialog */ +static void +se_create_eyep_w() +{ + Widget w, sep_w; + Widget l_w, rb_w; + Widget pb_w, sfm_w; + Arg args[20]; + char *s[1]; + int n; + + /* create form */ + + n = 0; + XtSetArg(args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + eyep_w = XmCreateFormDialog (svshell_w, "SkyEyep", args, n); + set_something (eyep_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (eyep_w, XmNhelpCallback, se_help_cb, 0); + sr_reg (XtParent(eyep_w), "XEphem*SkyEyep.x", skyepcategory, 0); + sr_reg (XtParent(eyep_w), "XEphem*SkyEyep.y", skyepcategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Eyepiece Setup"); n++; + XtSetValues (XtParent(eyep_w), args, n); + + /* title label */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (eyep_w, "L", args, n); + set_xmstring (w, XmNlabelString, "Set next eyepiece size, angle, shape and style:"); + XtManageChild (w); + + /* w scale and its labels */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + eyepwl_w = XmCreateLabel (eyep_w, "EyepWL", args, n); + XtManageChild (eyepwl_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNminimum, 1); n++; + XtSetArg (args[n], XmNmaximum, SCALEMAX); n++; + eyepws_w = XmCreateScale (eyep_w, "EyepW", args, n); + XtAddCallback (eyepws_w, XmNdragCallback, se_wscale_cb, 0); + XtAddCallback (eyepws_w, XmNvalueChangedCallback, se_wscale_cb, 0); + wtip (eyepws_w, "Slide to desired width of eyepiece, D:M"); + sr_reg (eyepws_w, NULL, skyepcategory, 0); + se_scale_fmt (eyepws_w, eyepwl_w); + XtManageChild (eyepws_w); + + /* h scale and its label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, eyepws_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + eyephl_w = XmCreateLabel (eyep_w, "EyepHL", args, n); + XtManageChild (eyephl_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, eyepws_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNminimum, 1); n++; + XtSetArg (args[n], XmNmaximum, SCALEMAX); n++; + eyephs_w = XmCreateScale (eyep_w, "EyepH", args, n); + XtAddCallback (eyephs_w, XmNdragCallback, se_hscale_cb, 0); + XtAddCallback (eyephs_w, XmNvalueChangedCallback, se_hscale_cb, 0); + wtip (eyephs_w, "Slide to desired height of eyepiece, D:M"); + sr_reg (eyephs_w, NULL, skyepcategory, 0); + se_scale_fmt (eyephs_w, eyephl_w); + XtManageChild (eyephs_w); + + /* angle scale and its label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, eyephs_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + eyepal_w = XmCreateLabel (eyep_w, "EyepPL", args, n); + XtManageChild (eyepal_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, eyephs_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNmaximum, 359); n++; + eyepa_w = XmCreateScale (eyep_w, "EyepA", args, n); + XtAddCallback (eyepa_w, XmNdragCallback, se_pscale_cb, 0); + XtAddCallback (eyepa_w, XmNvalueChangedCallback, se_pscale_cb, 0); + wtip (eyepa_w, "Rotation angle of eyepiece, from Z if Alt/Az else from NCP"); + sr_reg (eyepa_w, NULL, skyepcategory, 0); + se_pascale_fmt (eyepa_w, eyepal_w); + XtManageChild (eyepa_w); + + /* lock TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, eyepa_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + lock_w = XmCreateToggleButton (eyep_w, "Lock", args, n); + set_xmstring (lock_w, XmNlabelString, "Lock W and H together"); + wtip (lock_w, "When on, width and height scales move as one"); + XtManageChild (lock_w); + sr_reg (lock_w, NULL, skyepcategory, 0); + + /* telrad TB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, lock_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + telrad_w = XmCreateToggleButton (eyep_w, "Telrad", args, n); + XtAddCallback (telrad_w, XmNvalueChangedCallback, se_telrad_cb, NULL); + set_xmstring (telrad_w, XmNlabelString, "Telrad circles of 0.5, 2 and 4° diameter"); + wtip (telrad_w, "When on, next eyepiece will be 3 open circles matching the Telrad."); + XtManageChild (telrad_w); + sr_reg (telrad_w, NULL, skyepcategory, 0); + + /* shape label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, telrad_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + l_w = XmCreateLabel (eyep_w, "S", args, n); + set_xmstring (l_w, XmNlabelString, "Shape:"); + XtManageChild (l_w); + + /* round or square Radio box */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, telrad_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, l_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + rb_w = XmCreateRadioBox (eyep_w, "RSRB", args, n); + XtManageChild (rb_w); + + n = 0; + eyer_w = XmCreateToggleButton (rb_w, "Elliptical", args, n); + wtip (eyer_w, "When on, next eyepiece will be elliptical"); + XtManageChild (eyer_w); + sr_reg (eyer_w, NULL, skyepcategory, 0); + + n = 0; + eyes_w = XmCreateToggleButton (rb_w, "Rectangular", args, n); + wtip (eyes_w, "When on, next eyepiece will be rectangular"); + XtManageChild (eyes_w); + + /* "Elliptical" establishes truth setting */ + XmToggleButtonSetState (eyes_w, !XmToggleButtonGetState(eyer_w), 0); + + /* style label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, telrad_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + l_w = XmCreateLabel (eyep_w, "St", args, n); + set_xmstring (l_w, XmNlabelString, "Style:"); + XtManageChild (l_w); + + /* style Radio box */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, telrad_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, l_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + rb_w = XmCreateRadioBox (eyep_w, "FBRB", args, n); + XtManageChild (rb_w); + + n = 0; + eyef_w = XmCreateToggleButton (rb_w, "Solid", args, n); + wtip (eyef_w, "When on, next eyepiece will be solid"); + XtManageChild (eyef_w); + sr_reg (eyef_w, NULL, skyepcategory, 0); + + n = 0; + eyeb_w = XmCreateToggleButton (rb_w, "Outline", args, n); + wtip (eyeb_w, "When on, next eyepiece will be just a border"); + XtManageChild (eyeb_w); + + /* "Solid" establishes truth setting */ + XmToggleButtonSetState (eyeb_w, !XmToggleButtonGetState(eyef_w), 0); + + /* calculator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNseparatorType, XmDOUBLE_LINE); n++; + sep_w = XmCreateSeparator (eyep_w, "Sep", args, n); + XtManageChild (sep_w); + + /* title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + l_w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring(l_w,XmNlabelString,"Field-of-View Calculators"); + XtManageChild (l_w); + + /* formula # 1 */ + + /* labels */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 28); n++; + w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (w, XmNlabelString, "Focal length\n(mm) m in"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 58); n++; /*first includes 10*/ + w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (w, XmNlabelString, "F Plane Size\n(µm) mm in"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 88); n++; + w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (w, XmNlabelString, "Sky angle\nD:M:S"); + XtManageChild (w); + + /* TFs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 28); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + fl_w = XmCreateTextField (eyep_w, "FocalLength", args, n); + wtip (fl_w, "Enter effective focal length, specifying units of mm, m or inches"); + sr_reg (fl_w, NULL, skyepcategory, 0); + XtManageChild (fl_w); + XtAddCallback (fl_w, XmNvalueChangedCallback, se_calc1_cb, NULL); + XtAddCallback (fl_w, XmNactivateCallback, se_calc1_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 58); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + fp_w = XmCreateTextField (eyep_w, "FPlaneSize", args, n); + wtip (fp_w, "Enter size of object on focal plane, in microns, mm or inches"); + sr_reg (fp_w, NULL, skyepcategory, 0); + XtManageChild (fp_w); + XtAddCallback (fp_w, XmNvalueChangedCallback, se_calc1_cb, NULL); + XtAddCallback (fp_w, XmNactivateCallback, se_calc1_cb, NULL); + + /* formula #1 sky angle result label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 88); n++; + sa1_w = XmCreateLabel (eyep_w, "SAL", args, n); + wtip (sa1_w, "Sky angle with given focal length and plane size"); + set_xmstring (sa1_w, XmNlabelString, "xxx:xx:xx.x"); + XtManageChild (sa1_w); + + /* formula #1 set w and h */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 90); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (eyep_w, "Set", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNtopOffset, 1); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 90); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (eyep_w, "W", args, n); + wtip (w, "Set eyepiece width scale to this Sky angle"); + XtAddCallback (w, XmNactivateCallback, se_skyW_cb,(XtPointer)sa1_w); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNtopOffset, 1); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 90); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (eyep_w, "H", args, n); + wtip (w, "Set eyepiece height scale to this Sky angle"); + XtAddCallback (w, XmNactivateCallback, se_skyH_cb,(XtPointer)sa1_w); + XtManageChild (w); + + /* formula #2 */ + + /* labels */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fp_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 19); n++; + l_w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (l_w, XmNlabelString, "Apparent\nFOV, °"); + XtManageChild (l_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fp_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 21); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 38); n++; /*first includes 10*/ + w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (w, XmNlabelString, "Eyepiece\nFL, mm"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fp_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 40); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 58); n++; + w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (w, XmNlabelString, "Mirror FL\n(mm) m in"); + XtManageChild (w); + + /* TFs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 19); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + afov_w = XmCreateTextField (eyep_w, "ApparentFOV", args, n); + wtip (afov_w, + "Enter apparent field of view through the eyepiece, in degrees"); + sr_reg (afov_w, NULL, skyepcategory, 0); + XtManageChild (afov_w); + XtAddCallback (afov_w, XmNvalueChangedCallback, se_calc2_cb, NULL); + XtAddCallback (afov_w, XmNactivateCallback, se_calc2_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 21); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 38); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + efl_w = XmCreateTextField (eyep_w, "EyepieceFL", args, n); + wtip (efl_w, "Enter focal length of eyepiece, in millimeters"); + sr_reg (efl_w, NULL, skyepcategory, 0); + XtManageChild (efl_w); + XtAddCallback (efl_w, XmNvalueChangedCallback, se_calc2_cb, NULL); + XtAddCallback (efl_w, XmNactivateCallback, se_calc2_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 40); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 58); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + mfl_w = XmCreateTextField (eyep_w, "MirrorFL", args, n); + wtip (mfl_w, "Enter focal length of primary mirror, in units of mm, m or inches"); + sr_reg (mfl_w, NULL, skyepcategory, 0); + XtManageChild (mfl_w); + XtAddCallback (mfl_w, XmNvalueChangedCallback, se_calc2_cb, NULL); + XtAddCallback (mfl_w, XmNactivateCallback, se_calc2_cb, NULL); + + /* formula #2 sky angle result label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 88); n++; + sa2_w = XmCreateLabel (eyep_w, "SAL", args, n); + wtip (sa2_w, "Sky angle with given eyepiece and mirror"); + set_xmstring (sa2_w, XmNlabelString, "xxx:xx:xx.x"); + XtManageChild (sa2_w); + + /* formula #2 set w and h */ + + n = 0; + XtSetArg (args[n],XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET);n++; + XtSetArg (args[n], XmNbottomWidget, l_w); n++; + XtSetArg (args[n], XmNbottomOffset, 0); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 90); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (eyep_w, "W", args, n); + wtip (w, "Set eyepiece width scale to this Sky angle"); + XtAddCallback (w, XmNactivateCallback, se_skyW_cb,(XtPointer)sa2_w); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, w); n++; + XtSetArg (args[n], XmNtopOffset, 1); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 90); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (eyep_w, "H", args, n); + wtip (w, "Set eyepiece height scale to this Sky angle"); + XtAddCallback (w, XmNactivateCallback, se_skyH_cb,(XtPointer)sa2_w); + XtManageChild (w); + + /* favorites */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mfl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNseparatorType, XmDOUBLE_LINE); n++; + sep_w = XmCreateSeparator (eyep_w, "Sep", args, n); + XtManageChild (sep_w); + + /* title and "Add" */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + l_w = XmCreateLabel (eyep_w, "EL", args, n); + set_xmstring (l_w, XmNlabelString, "Eyepieces Definitions"); + XtManageChild (l_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + pb_w = XmCreatePushButton (eyep_w, "Add current", args, n); + wtip (pb_w, "Add current settings to list of favorites"); + XtAddCallback (pb_w, XmNactivateCallback, se_addfav_cb, NULL); + XtManageChild (pb_w); + + /* all favorites in a RC, empty until favorites get defined */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, pb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + favrc_w = XmCreateRowColumn (eyep_w, "EPRC", args, n); + XtManageChild (favrc_w); + + /* load/save controls */ + + s[0] = eyep_suffix; + sfm_w = createFSM (eyep_w, s, 1, "auxil", se_loadd_cb); + wtip (sfm_w, "Select file of favorite eyepieces to load"); + set_xmstring (sfm_w, XmNlabelString, "Load file: "); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, favrc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + XtSetValues (sfm_w, args, n); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sfm_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + pb_w = XmCreatePushButton (eyep_w, "ESPB", args, n); + set_xmstring (pb_w, XmNlabelString, "Save to:"); + wtip (pb_w, "Save these Eyepieces definitions in the file named at right"); + XtAddCallback (pb_w, XmNactivateCallback, se_saved_cb, NULL); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sfm_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 85); n++; + saved_w = XmCreateTextField (eyep_w, "EyePDefFile", args, n); + XtAddCallback (saved_w, XmNactivateCallback, se_saved_cb, NULL); + sr_reg (saved_w, NULL, skyepcategory, 0); + defaultTextFN (saved_w, 0, defeyepfn, NULL); + wtip (saved_w, "File in which to save these Eyepiece definitions"); + XtManageChild (saved_w); + + /* eyepice locations */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, saved_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNseparatorType, XmDOUBLE_LINE); n++; + sep_w = XmCreateSeparator (eyep_w, "Sep", args, n); + XtManageChild (sep_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + l_w = XmCreateLabel (eyep_w, "Pos", args, n); + set_xmstring (l_w, XmNlabelString, "Current Sky View Eyepieces"); + XtManageChild (l_w); + + s[0] = eyel_suffix; + sfm_w = createFSM (eyep_w, s, 1, "auxil", se_loadp_cb); + wtip (sfm_w, "Select existing eyepiece positions file to load"); + set_xmstring (sfm_w, XmNlabelString, "Load file: "); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, l_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + XtSetValues (sfm_w, args, n); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sfm_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + pb_w = XmCreatePushButton (eyep_w, "ELS", args, n); + set_xmstring (pb_w, XmNlabelString, "Save to:"); + wtip (pb_w, "Save current eyepiece positions in file named at right"); + XtAddCallback (pb_w, XmNactivateCallback, se_savep_cb, NULL); + XtManageChild (pb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sfm_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 85); n++; + savep_w = XmCreateTextField (eyep_w, "EyePPosFile", args, n); + XtAddCallback (savep_w, XmNactivateCallback, se_savep_cb, NULL); + sr_reg (savep_w, NULL, skyepcategory, 0); + defaultTextFN (savep_w, 0, defeyelfn, NULL); + wtip (savep_w, "File in which to save current eyepiece positions"); + XtManageChild (savep_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, savep_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + delep_w = XmCreatePushButton (eyep_w, "DelE", args, n); + XtAddCallback (delep_w, XmNactivateCallback, se_delall_cb, NULL); + wtip (delep_w, "Delete all eyepieces now on Sky View"); + set_xmstring (delep_w,XmNlabelString,"Delete all placed eyepieces"); + XtSetSensitive (delep_w, False); /* works when there are some */ + XtManageChild (delep_w); + + /* separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, delep_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (eyep_w, "Sep", args, n); + XtManageChild (sep_w); + + /* a close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 40); n++; + w = XmCreatePushButton (eyep_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, se_close_cb, NULL); + wtip (w, "Close this dialog"); + XtManageChild (w); + + /* a help button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + w = XmCreatePushButton (eyep_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, se_help_cb, NULL); + wtip (w, "More info about this dialog"); + XtManageChild (w); + + /* engage side effects if telrad on initially */ + if (XmToggleButtonGetState(telrad_w)) { + XmToggleButtonSetState(telrad_w, False, True); + XmToggleButtonSetState(telrad_w, True, True); + } + + /* calculate sky angles from default values */ + se_calc1(); + se_calc2(); + + /* load default favorites */ + se_loadEyep(NULL); + se_loadPos(NULL); +} + +/* read the given w or h scale and write it's value in the given label */ +static void +se_scale_fmt (s_w, l_w) +Widget s_w, l_w; +{ + char buf[64]; + + buf[0] = l_w == eyephl_w ? 'H' : 'W'; + fs_sexa (buf+1, raddeg(se_getScale(s_w)), 3, 60); + set_xmstring (l_w, XmNlabelString, buf); +} + +/* read the given pa scale and write it's value in the given label */ +static void +se_pascale_fmt (s_w, l_w) +Widget s_w, l_w; +{ + char buf[64]; + + sprintf (buf, "A %4.0f", raddeg(se_getPScale(s_w))); + set_xmstring (l_w, XmNlabelString, buf); +} + +/* called when the telrad TB is activated */ +static void +se_telrad_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int set = XmToggleButtonGetState (w); + + if (set) { + XtSetSensitive (eyef_w, False); + XtSetSensitive (eyeb_w, False); + XtSetSensitive (eyer_w, False); + XtSetSensitive (eyes_w, False); + XtSetSensitive (lock_w, False); + XtSetSensitive (eyephs_w, False); + XtSetSensitive (eyepws_w, False); + XtSetSensitive (eyepa_w, False); + } else { + XtSetSensitive (eyef_w, True); + XtSetSensitive (eyeb_w, True); + XtSetSensitive (eyer_w, True); + XtSetSensitive (eyes_w, True); + XtSetSensitive (lock_w, True); + XtSetSensitive (eyephs_w, True); + XtSetSensitive (eyepws_w, True); + XtSetSensitive (eyepa_w, True); + } +} + +/* drag callback from the height scale */ +static void +se_hscale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + se_scale_fmt (eyephs_w, eyephl_w); + + /* slave the w scale to the h scale */ + if (XmToggleButtonGetState(lock_w)) { + se_setScale (eyepws_w, se_getScale (eyephs_w)); + se_scale_fmt (eyepws_w, eyepwl_w); + XmToggleButtonSetState (telrad_w, False, True); + } +} + +/* drag callback from the width scale */ +static void +se_wscale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + se_scale_fmt (eyepws_w, eyepwl_w); + + /* slave the w scale to the h scale */ + if (XmToggleButtonGetState(lock_w)) { + se_setScale (eyephs_w, se_getScale (eyepws_w)); + se_scale_fmt (eyephs_w, eyephl_w); + XmToggleButtonSetState (telrad_w, False, True); + } +} + +/* drag callback from the pa scale */ +static void +se_pscale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + se_pascale_fmt (eyepa_w, eyepal_w); +} + +/* callback from the delete-all eyepieces control. + */ +/* ARGSUSED */ +static void +se_delall_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (eyep) { + if (confirm()) { + char msg[128]; + switch (neyep) { + case 0: + printf ("Bug! tried to delete %d eyepieces\n", neyep); + abort(); + case 1: + sprintf (msg, "Delete the placed eyepiece?"); + break; + case 2: + sprintf (msg, "Delete both placed eyepieces?"); + break; + default: + sprintf (msg, "Delete all %d placed eyepieces?", neyep); + break; + } + query (eyep_w, msg, "Yes -- delete", "No -- cancel", NULL, + se_delall, NULL, NULL); + } else + se_delall(); + } +} + +/* delete memory for and display of all currently placed eyepieces. + */ +static void +se_delall() +{ + XtFree ((void *)eyep); + eyep = NULL; + neyep = 0; + sv_all(mm_get_now()); + XtSetSensitive (delep_w, False); +} + +/* callback from the close PB. + */ +/* ARGSUSED */ +static void +se_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (eyep_w); +} + +/* called when the help button is hit in the eyepiece dialog */ +/* ARGSUSED */ +static void +se_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "Define eyepiece shapes and sizes." + }; + + hlp_dialog ("SkyView_eyepieces", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* called to take the sky angle from the calculator and set width scale. + * client points to a label widget from which the angle is extracted. + */ +/* ARGSUSED */ +static void +se_skyW_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget angle_w = (Widget)client; + char *str; + double a; + + get_xmstring (angle_w, XmNlabelString, &str); + f_scansexa (str, &a); + XtFree (str); + se_setScale (eyepws_w, degrad(a)); + se_scale_fmt (eyepws_w, eyepwl_w); + if (XmToggleButtonGetState (lock_w)) { + se_setScale (eyephs_w, degrad(a)); + se_scale_fmt (eyephs_w, eyephl_w); + } +} + +/* called to take the sky angle from the calculator and set height scale. + * client points to a label widget from which the angle is extracted. + */ +/* ARGSUSED */ +static void +se_skyH_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget angle_w = (Widget)client; + char *str; + double a; + + get_xmstring (angle_w, XmNlabelString, &str); + f_scansexa (str, &a); + XtFree (str); + se_setScale (eyephs_w, degrad(a)); + se_scale_fmt (eyephs_w, eyephl_w); + if (XmToggleButtonGetState (lock_w)) { + se_setScale (eyepws_w, degrad(a)); + se_scale_fmt (eyepws_w, eyepwl_w); + } +} + +/* called when any of the factors in formula 1 change */ +/* ARGSUSED */ +static void +se_calc1_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + se_calc1(); +} + +static void +se_calc1() +{ + char *tmp, *flstr, *fpstr, sastr[32]; + double fl, fp, sa; + + /* get focal length, convert to mm */ + flstr = XmTextFieldGetString (fl_w); + fl = atof (flstr); + if (fl == 0) { + XtFree (flstr); + return; + } + if ((tmp = strchr (flstr, 'm')) && strrchr (flstr, 'm') == tmp) + fl *= 1e3; /* m to mm */ + else if (strchr (flstr, '"') || strchr (flstr, 'i')) + fl *= 25.4; /* inches to mm */ + /* else assume mm */ + XtFree (flstr); + + /* get focal plane length, convert to um */ + fpstr = XmTextFieldGetString (fp_w); + fp = atof (fpstr); + if ((tmp = strchr (fpstr, 'm')) && strrchr(fpstr, 'm') != tmp) + fp *= 1e3; /* mm to um */ + else if (strchr (fpstr, '"') || strchr (fpstr, 'i')) + fp *= 25.4e6; /* inches to um */ + /* else assume um */ + XtFree (fpstr); + + /* compute and show sky angle */ + sa = 206*fp/fl; /* arc seconds */ + fs_sexa (sastr, sa/3600., 3, 36000); + set_xmstring (sa1_w, XmNlabelString, sastr); +} + +/* called when any of the factors in formula 2 change */ +/* ARGSUSED */ +static void +se_calc2_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + se_calc2(); +} + +/* gather values and compute sky angle using formula 2 */ +static void +se_calc2() +{ + char *tmp, *mflstr, sastr[32]; + double afov, efl, mfl, sa; + + /* get apparent field of view, assume degrees */ + tmp = XmTextFieldGetString (afov_w); + afov = atof (tmp); + XtFree (tmp); + + /* get eyepiece focal length, assume mm */ + tmp = XmTextFieldGetString (efl_w); + efl = atof (tmp); + XtFree (tmp); + if (efl <= 0) + return; + + /* get focal length of primary, convert to mm */ + mflstr = XmTextFieldGetString (mfl_w); + mfl = atof (mflstr); + if ((tmp = strchr (mflstr, 'm')) && strrchr(mflstr, 'm') == tmp) + mfl *= 1e3; /* m to mm */ + else if (strchr (mflstr, '"') || strchr (mflstr, 'i')) + mfl *= 25.4; /* inches to mm */ + /* else assume mm */ + XtFree (mflstr); + + /* compute and show sky angle */ + sa = afov*efl/mfl; + fs_sexa (sastr, sa, 3, 36000); + set_xmstring (sa2_w, XmNlabelString, sastr); +} + +/* read the given Scale widget and return it's current setting, in rads */ +static double +se_getScale (w) +Widget w; +{ + int v; + double a; + + XmScaleGetValue (w, &v); + + a = v*LOSCALE; + if (a > CHSCALE) + a = CHSCALE + (a - CHSCALE)/LOSCALE*HISCALE; + return (a); +} + +/* set the given Scale widget to the given setting, in rads */ +static void +se_setScale (w, a) +Widget w; +double a; +{ + int v; + + if (a > CHSCALE) + a = (a - CHSCALE)*LOSCALE/HISCALE + CHSCALE; + v = (int)(a/LOSCALE+.5); + if (v > SCALEMAX) { + xe_msg (1, "Sorry, scale only goes to %g", raddeg(MXSCALE)); + } else { + if (v < 1) + v = 1; + XmScaleSetValue (w, v); + } +} + +/* read the given pos angle widget and return it's current setting, in rads */ +static double +se_getPScale (w) +Widget w; +{ + int v; + + XmScaleGetValue (w, &v); + return (degrad(v)); +} + +/* called to install "use" a FavEyeP. + * client is index into favs[] + */ +/* ARGSUSED */ +static void +se_usefav_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FavEyeP *fp = &favs[(long int)client]; + + se_setScale (eyepws_w, fp->w); + se_scale_fmt (eyepws_w, eyepwl_w); + se_setScale (eyephs_w, fp->h); + se_scale_fmt (eyephs_w, eyephl_w); + XmToggleButtonSetState (fp->isE ? eyer_w : eyes_w, True, True); + XmToggleButtonSetState (fp->isS ? eyef_w : eyeb_w, True, True); + XmToggleButtonSetState (telrad_w, False, True); + XmToggleButtonSetState (lock_w, False, True); +} + +/* called to delete a FavEyeP. + * client is index into favs[] + */ +/* ARGSUSED */ +static void +se_delfav_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FavEyeP *fp = &favs[(long int)client]; + XtDestroyWidget (fp->row_w); + fp->inuse = 0; +} + +/* called to add a new FavEyeP */ +/* ARGSUSED */ +static void +se_addfav_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FavEyeP newfav; + double aunused; + + memset (&newfav, 0, sizeof(newfav)); + se_eyepsz (&newfav.w, &newfav.h, &aunused, &newfav.isE, &newfav.isS); + sprintf (newfav.name, "My eyepiece #%d", nfavs+1); + se_addFavEyeP (&newfav); +} + +/* callback to load eyepiece defintions from file. + * file name is label of this widget + */ +/* ARGSUSED */ +static void +se_loadd_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + get_xmstring (w, XmNlabelString, &fn); + se_loadEyep(fn); + XtFree (fn); +} + +/* callback to Save the current eyepiece definitions to file named in saved_w + * N.B. don't use call, this is used by TF and PB + */ +/* ARGSUSED */ +static void +se_saved_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024], *fn; + char *txt; + + /* get file name */ + fn = txt = XmTextFieldGetString (saved_w); + if (!strstr (txt, eyep_suffix)) { + sprintf (fn = buf, "%s%s", txt, eyep_suffix); + XmTextFieldSetString (saved_w, fn); + } + + /* save */ + se_saveFav(fn); + + /* clean up */ + XtFree (txt); +} + +/* callback to load eyepiece positions list from file. + * file name is label of this widget + */ +/* ARGSUSED */ +static void +se_loadp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + get_xmstring (w, XmNlabelString, &fn); + se_loadPos(fn); + XtFree (fn); +} + +/* callback to Save the current eyepiece positions to file named in savep_w + * N.B. don't use call, this is used by TF and PB + */ +/* ARGSUSED */ +static void +se_savep_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024], *fn; + char *txt; + + /* get file name */ + fn = txt = XmTextFieldGetString (savep_w); + if (!strstr (txt, eyel_suffix)) { + sprintf (fn = buf, "%s%s", txt, eyel_suffix); + XmTextFieldSetString (savep_w, fn); + } + + /* save */ + se_savePos(fn); + + /* clean up */ + XtFree (txt); +} + +/* add (or reuse) a new (or unused) entry to favs[], create and show in favrc_w. + */ +static void +se_addFavEyeP (newfp) +FavEyeP *newfp; +{ + char buf[32], wstr[32], hstr[32]; + Widget w; + Arg args[20]; + FavEyeP *fp; + int n, fn; + + /* find/create a new entry */ + for (fn = 0; fn < nfavs; fn++) + if (!favs[fn].inuse) + break; + if (fn == nfavs) + favs = (FavEyeP *) XtRealloc ((char *)favs, + (++nfavs)*sizeof(FavEyeP)); + fp = &favs[fn]; + + /* start filling with new */ + *fp = *newfp; + fp->inuse = 1; + + /* add the widgets */ + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + fp->row_w = XmCreateRowColumn (favrc_w, "EPF", args, n); + XtManageChild (fp->row_w); + + n = 0; + w = XmCreatePushButton (fp->row_w, "Del", args, n); + XtAddCallback (w, XmNactivateCallback, se_delfav_cb, (XtPointer)(long int)fn); + wtip (w, "Delete this eyepiece from the list of favorites"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (fp->row_w, "Use", args, n); + XtAddCallback (w, XmNactivateCallback, se_usefav_cb, (XtPointer)(long int)fn); + wtip (w, "Install this eyepiece in the `next' settings above."); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNcolumns, MAXEPNMD); n++; + XtSetArg (args[n], XmNmaxLength, MAXEPNM-1); n++; + XtSetArg (args[n], XmNvalue, fp->name); n++; + w = XmCreateTextField (fp->row_w, "FTF", args, n); + wtip (w, "Type in a name for this eyepiece configuration"); + XtManageChild (w); + fp->name_w = w; + + n = 0; + w = XmCreateLabel (fp->row_w, "FL", args, n); + fs_sexa (wstr, raddeg(fp->w), 2, 60); + fs_sexa (hstr, raddeg(fp->h), 2, 60); + sprintf (buf, "%s %s %c %c", wstr, hstr, + fp->isE ? 'E' : 'R', fp->isS ? 'S' : 'O'); + set_xmstring (w, XmNlabelString, buf); + wtip (w, "Coded definition for this eyepiece: W H Shape Style"); + XtManageChild (w); +} + +/* save the current (used) entries in favs[] to the given file */ +static void +se_saveFav(char *fn) +{ + FILE *fp; + int i; + + /* create */ + fp = fopend (fn, NULL, "w"); + if (!fp) + return; /* already informed user */ + + /* write */ + fprintf (fp, "\n"); + for (i = 0; i < nfavs; i++) { + FavEyeP *fvp = &favs[i]; + char *name; + + if (!fvp->inuse) + continue; + name = XmTextFieldGetString (fvp->name_w); + fprintf (fp, " %s\n", + raddeg(fvp->w), raddeg(fvp->h), fvp->isE, fvp->isS, name); + XtFree (name); + } + fprintf (fp, "\n"); + + /* finished */ + fclose (fp); + + if (confirm()) + xe_msg (1, "Wrote %d definitions to %s", nfavs, fn); +} + +/* read and replace the favorites list from the given file, or file named in + * saved_w if !fn + */ +static void +se_loadEyep(char *fn) +{ + char msg[1024]; + char buf[1024]; + XMLEle *root, *ep; + FILE *fp; + LilXML *xp; + int i; + + /* get file name */ + if (!fn) { + char *txt = XmTextFieldGetString (saved_w); + if (!strstr (txt, eyep_suffix)) + sprintf (buf, "%s%s", txt, eyep_suffix); + else + strcpy (buf, txt); + XtFree (txt); + fn = buf; + } + + /* open */ + fp = fopend (fn, "auxil", "r"); + if (!fp) + return; /* already informed user */ + + /* read */ + xp = newLilXML (); + root = readXMLFile (fp, xp, msg); + fclose (fp); + delLilXML (xp); + if (!root) { + xe_msg (1, "%s: %s", fn, msg[0] ? msg : "bad format"); + return; + } + if (strcmp (tagXMLEle(root), "EyepieceDefinitions")) { + xe_msg (1, "%s: not an Eyepieces file", fn); + delXMLEle (root); + return; + } + + /* clear the favs[] array */ + for (i = 0; i < nfavs; i++) + if (favs[i].inuse) + XtDestroyWidget (favs[i].row_w); + XtFree ((char *)favs); + favs = NULL; + nfavs = 0; + + /* build new */ + for (ep = nextXMLEle(root,1); ep != NULL; ep = nextXMLEle(root,0)) { + FavEyeP newf; + + if (strcmp (tagXMLEle(ep), "eyepiece")) + continue; + + memset (&newf, 0, sizeof(newf)); + strncpy (newf.name, pcdataXMLEle(ep), sizeof(newf.name)-1); + newf.isE = atoi(findXMLAttValu(ep,"isElliptical")); + newf.isS = atoi(findXMLAttValu(ep,"isSolid")); + newf.w = degrad(atof(findXMLAttValu(ep,"width"))); + newf.h = degrad(atof(findXMLAttValu(ep,"height"))); + se_addFavEyeP (&newf); + } + + if (confirm()) + xe_msg (1, "Read %d definitions from %s", nfavs, fn); + + /* finished */ + delXMLEle (root); +} + +/* save eyep[] to the given file */ +static void +se_savePos(char *fn) +{ + FILE *fp; + int i; + + /* create */ + fp = fopend (fn, NULL, "w"); + if (!fp) + return; /* already informed user */ + + /* write */ + fprintf (fp, "\n"); + for (i = 0; i < neyep; i++) { + EyePiece *ep = &eyep[i]; + + fprintf (fp, " altdec, ep->azra, ep->aamode); + fprintf (fp, " width='%g' height='%g' angle='%g'", + ep->eyepw, ep->eyeph, ep->eyepa); + fprintf (fp, " isRound='%d' isSolid='%d' />\n",ep->round,ep->solid); + } + fprintf (fp, "\n"); + + if (confirm()) + xe_msg (1, "Wrote %d eyepiece placements to %s", neyep, fn); + + /* finished */ + fclose (fp); +} + +/* read and replace the list of eyepiece positions from the given file, or + * file named in savep_w if !fn + */ +static void +se_loadPos(char *fn) +{ + char msg[1024]; + char buf[1024]; + XMLEle *root, *ep; + FILE *fp; + LilXML *xp; + + /* get file name */ + if (!fn) { + char *txt = XmTextFieldGetString (savep_w); + if (!strstr (txt, eyel_suffix)) + sprintf (buf, "%s%s", txt, eyel_suffix); + else + strcpy (buf, txt); + XtFree (txt); + fn = buf; + } + + /* open */ + fp = fopend (fn, "auxil", "r"); + if (!fp) + return; /* already informed user */ + + /* read */ + xp = newLilXML (); + root = readXMLFile (fp, xp, msg); + fclose (fp); + delLilXML (xp); + if (!root) { + xe_msg (1, "%s: %s", fn, msg[0] ? msg : "bad format"); + return; + } + if (strcmp (tagXMLEle(root), "EyepiecePlacements")) { + xe_msg (1, "%s: not an Eyepiece Placements file", fn); + delXMLEle (root); + return; + } + + /* clear the eyep[] array */ + XtFree ((char *)eyep); + eyep = NULL; + neyep = 0; + + /* build new list */ + for (ep = nextXMLEle(root,1); ep != NULL; ep = nextXMLEle(root,0)) { + EyePiece *nep; + + if (strcmp (tagXMLEle(ep), "placement")) + continue; + + nep = se_addeyep (); + nep->altdec = atof(findXMLAttValu(ep,"altdec")); + nep->azra = atof(findXMLAttValu(ep,"azra")); + nep->aamode = atof(findXMLAttValu(ep,"aamode")); + nep->eyepw = atof(findXMLAttValu(ep,"width")); + nep->eyeph = atof(findXMLAttValu(ep,"height")); + nep->eyepa = atof(findXMLAttValu(ep,"angle")); + nep->round = atoi(findXMLAttValu(ep,"isRound")); + nep->solid = atoi(findXMLAttValu(ep,"isSolid")); + } + + if (confirm()) + xe_msg (1, "Read %d eyepiece placements from %s", neyep, fn); + + /* finished */ + delXMLEle (root); + + /* draw */ + sv_all (mm_get_now()); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyeyep.c,v $ $Date: 2011/05/16 02:32:23 $ $Revision: 1.32 $ $Name: $"}; diff --git a/GUI/xephem/skyeyep.h b/GUI/xephem/skyeyep.h new file mode 100644 index 0000000..a57d089 --- /dev/null +++ b/GUI/xephem/skyeyep.h @@ -0,0 +1,31 @@ +#ifndef _SKYEPEP_H +#define _SKYEPEP_H + +/* include file to hook skyviewmenu.c and skyeyep.c together. + */ + +typedef struct { + double altdec, azra; /* location when created */ + double eyepw, eyeph; /* width and height, rads */ + double eyepa; /* rotation from Z if aadef else NCP, rads */ + int aamode; /* whether defined as Alt/Az or else RA/Dec */ + int round; /* true if want round, false if square */ + int solid; /* true if want solid, else just border */ +} EyePiece; + +/* skyeyep.c */ + +extern void se_add (int aamode, double azra, double altdec); +extern void se_cursor (Cursor c); +extern int se_getlist (EyePiece **ep); +extern void se_unmanage(void); +extern void se_manage(void); +extern int se_isOneHere (int aamode, double azra, double altdec); +extern void se_del (int aamode, double azra, double altdec); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: skyeyep.h,v $ $Date: 2011/05/16 02:32:23 $ $Revision: 1.6 $ $Name: $ + */ + +#endif /* _SKYEPEP_H */ diff --git a/GUI/xephem/skyfifos.c b/GUI/xephem/skyfifos.c new file mode 100644 index 0000000..b2f715e --- /dev/null +++ b/GUI/xephem/skyfifos.c @@ -0,0 +1,190 @@ +/* this file implements two handy fifo interfaces to sky view. + * 1. Inbound: A marker may be placed on the Sky View by writing a text string + * to the fifo named fifos/xephem_in_fifo. The format is "RA:X Dec:Y", + * where X and Y are in radians at epoch 2000.0. This fifo is opened and + * closed each time the Sky View window is opened and closed. + * 2. Outbound: If a process has the fifo fifos/xephem_loc_fifo open for reading + * then sky view popup menu will offer a button to send the cursor postion to + * this fifo. The format is the same as a line in .edb format. This fifo is + * attempted opened each time the popup is activated, and remains open until + * writing to it fails. + * Both fifos must be in the ShareDir directory. + * We also implement a common query and command interface to this facility and + * INDI. + */ + +#include +#include +#include + +#include + +#include "xephem.h" + +static int sfifo_outready(void); +static void sfifo_sendout (Obj *op); +static void ififo_cb (XtPointer client, int *fdp, XtInputId *idp); + +/* fifo names, with respect to ShareDir */ +static char iname[] = "fifos/xephem_in_fifo"; /* inbound name */ +static char oname[] = "fifos/xephem_loc_fifo"; /* outbound name */ + +/* inbound fifo fd and XtAddInput id */ +static int ififo_fd = -1; +static XtInputId ififo_id; + +/* outbound fifo fd */ +static int ofifo_fd = -1; + +/* return whether either our fifos or INDI is currently accepting commands */ +int +telIsOn() +{ + return (sc_isGotoOn() || !sfifo_outready()); +} + +/* send object to our fifos and INDI, ok if either not open */ +void +telGoto (Obj *op) +{ + /* check horizons */ + if (op->s_alt < 0) { + xe_msg (1, "%s is below the horizon", op->o_name); + return; + } else if (!sv_hznOpOk(op)) { + xe_msg (1, "%s is below Sky View user horizon map", op->o_name); + return; + } + + /* ok */ + sfifo_sendout (op); + (void) sc_goto (op); +} + +/* return 0 if the outbound fifo is ready, else -1. + * if successful, leave open. harmless if already open. + */ +static int +sfifo_outready() +{ + char fn[1024]; + + /* success if already open */ + if (ofifo_fd >= 0) + return(0); + + /* open for write, non-blocking. only succeeds if a reader is active */ + sprintf (fn, "%s/%s", getPrivateDir(), oname); + ofifo_fd = open (fn, O_WRONLY|O_NONBLOCK); + if (ofifo_fd < 0) { + sprintf (fn, "%s/%s", getShareDir(), oname); + ofifo_fd = open (fn, O_WRONLY|O_NONBLOCK); + if (ofifo_fd < 0) + return (-1); + } + return (0); +} + +/* send op to ofifo, must be open already. close if trouble. */ +static void +sfifo_sendout (Obj *op) +{ + char buf[256]; + + /* must already be open */ + if (ofifo_fd < 0) + return; + + /* format and write */ + db_write_line (op, buf); + strcat (buf, "\n"); + if (write (ofifo_fd, buf, strlen(buf)) < 0) { + close (ofifo_fd); + ofifo_fd = -1; + } +} + +/* connect to the inbound fifo. arrange for a marker to be drawn on skyview if + * a legal string is ever received. harmless to call if already open. + */ +void +sfifo_openin() +{ + char fn[1024]; + + /* do nothing if already open */ + if (ififo_fd >= 0) + return; + + /* open r/w so we never block on the open but do block on reads */ + sprintf (fn, "%s/%s", getPrivateDir(), iname); + ififo_fd = open (fn, O_RDWR); + if (ififo_fd < 0) { + sprintf (fn, "%s/%s", getShareDir(), iname); + ififo_fd = open (fn, O_RDWR); + if (ififo_fd < 0) + return; + } + + /* connect a callback to monitor */ + ififo_id = XtAppAddInput(xe_app, ififo_fd, (XtPointer)XtInputReadMask, + ififo_cb, NULL); +} + +/* close the inbound fifo, if open */ +void +sfifo_closein() +{ + if (ififo_fd >= 0) { + close (ififo_id); + ififo_fd = -1; + XtRemoveInput (ififo_id); + } +} + +/* called when reading from ififo will not block */ +static void +ififo_cb (XtPointer client, int *fdp, XtInputId *idp) +{ + char buf[64]; + double ra, dec; + double alt, az; + int nr; + + /* read */ + nr = read (ififo_fd, buf, sizeof(buf)); + if (nr <= 0) { + sfifo_closein(); + return; + } + buf[nr] = '\0'; + + /* parse and mark */ + if (sscanf (buf, "RA:%lf Dec:%lf", &ra, &dec) == 2) { + Now *np = mm_get_now(); + Obj o; + + memset (&o, 0, sizeof(o)); + o.o_type = FIXED; + o.f_RA = ra; + o.f_dec = dec; + o.f_epoch = J2000; + obj_cir (np, &o); + sv_scopeMark (&o); + } else if (sscanf (buf, "Alt:%lf Az:%lf", &alt, &az) == 2) { + Now *np = mm_get_now(); + Obj o; + + sv_other (alt, az, 1, &dec, &ra); + memset (&o, 0, sizeof(o)); + o.o_type = FIXED; + o.f_RA = ra; + o.f_dec = dec; + o.f_epoch = epoch == EOD ? mjd : epoch; + obj_cir (np, &o); + sv_scopeMark (&o); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyfifos.c,v $ $Date: 2011/09/23 01:52:39 $ $Revision: 1.8 $ $Name: $"}; diff --git a/GUI/xephem/skyfiltmenu.c b/GUI/xephem/skyfiltmenu.c new file mode 100644 index 0000000..4ec5d49 --- /dev/null +++ b/GUI/xephem/skyfiltmenu.c @@ -0,0 +1,1017 @@ +/* code to manage the stuff on the sky view filter display. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +/* info for each filter option toggle */ +typedef struct { + char *label; /* label on the toggle button */ + char *name; /* name of toggle button, for resource setting */ + int type; /* as in Obj.o_type */ + char class; /* if type==FIXED then as in Obj.f.f_class */ + char state; /* 0 or 1 depending on whether this class is on */ + Widget tbw; /* the toggle button widget */ +} FilterTB; + +/* info for a set of filters forming a category */ +typedef struct { + char *label; /* label for this category */ + char *ltip; /* tip for this category */ + FilterTB *ftb; /* array of toggle button filters in this class */ + int nftb; /* entries in ftb[] */ + Widget pbw; /* the category "toggle" pushbutton */ +} FilterCat; + +/* struct to hold automag settings */ +typedef struct { + double r; /* max FOV radius for this mag, rads */ + int st; /* star faintest mag */ + int ss; /* sol sys faintest mag */ + int ds; /* deep-sky faintest mag */ + int s; /* mag step per dot size */ +} AutoMag; + +static void svf_create_filter (Widget mainrc, FilterCat *fcp); +static void svf_reset (void); +static void svf_apply (void); +static int svf_bright_ok (Obj *op); +static void svf_da_cb (Widget w, XtPointer client, XtPointer call); +static void svf_draw_symbol (FilterTB *ftbp, Widget daw); +static void svf_magdrag_cb (Widget w, XtPointer client, XtPointer call); +static void svf_apply_cb (Widget w, XtPointer client, XtPointer call); +static void svf_ok_cb (Widget w, XtPointer client, XtPointer call); +static void svf_close_cb (Widget w, XtPointer client, XtPointer call); +static void svf_help_cb (Widget w, XtPointer client, XtPointer call); +static void svf_toggle_cb (Widget w, XtPointer client, XtPointer call); +static void svf_all_cb (Widget w, XtPointer client, XtPointer call); +static void svf_reset_cb (Widget w, XtPointer client, XtPointer call); +static void svf_cat_toggle_cb (Widget w, XtPointer client, XtPointer call); +static int svf_initautomag (AutoMag **ampp); + + +static FilterTB solsys_f[] = { + {"Planets", "Planets", PLANET, 0}, + {"Elliptical", "Elliptical", ELLIPTICAL, 0}, + {"Hyperbolic", "Hyperbolic", HYPERBOLIC, 0}, + {"Parabolic", "Parabolic", PARABOLIC, 0}, + {"Earth Sat", "EarthSat", EARTHSAT, 0} +}; + +static FilterTB other_f[] = { + {"Q Quasars", "Quasars", FIXED, 'Q'}, + {"L Pulsars", "Pulsars", FIXED, 'L'}, + {"J Radio", "Radio", FIXED, 'J'}, + {"Y Supernova", "Supernova", FIXED, 'Y'}, + {"R S/N Rem", "SNRemnants", FIXED, 'R'}, +}; + +static FilterTB stars_f[] = { + {"S Single", "Stars", FIXED, 'S'}, + {"B Binary", "Binary", BINARYSTAR, 0}, + /* B as a subfield of FIXED merged into D as of BINARYSTAR */ + {"D Double", "Double", FIXED, 'D'}, + {"M Multiple", "Multiple", FIXED, 'M'}, + {"V Variable", "Variable", FIXED, 'V'}, + {"T Star-like", "Stellar", FIXED, 'T'} +}; + +static FilterTB nebulae_f[] = { + {"N Bright", "BrightNeb", FIXED, 'N'}, + {"F Diffuse", "DiffuseNeb", FIXED, 'F'}, + {"K Dark", "DarkNeb", FIXED, 'K'}, + {"P Planetary", "PlanetaryNeb", FIXED, 'P'} +}; + +static FilterTB galaxies_f[] = { + {"G Spiral", "SpiralGal", FIXED, 'G'}, + {"H Spherical", "SphericalGal", FIXED, 'H'}, + {"A Clusters", "GalClusters", FIXED, 'A'} +}; + +static FilterTB clusters_f[] = { + {"C Globular", "GlobularCl", FIXED, 'C'}, + {"O Open", "OpenCl", FIXED, 'O'}, + {"U in Nebula", "ClInNeb", FIXED, 'U'} +}; + +static FilterCat filters[] = { + {"Solar System:", + "Whether to display Planets, asteroids, comets, Earth satellites", + solsys_f, XtNumber(solsys_f)}, + {"Clusters:", + "Whether to display various types of star clusters", + clusters_f, XtNumber(clusters_f)}, + {"Other:", + "Whether to display a variety of miscellaneous classes of objects", + other_f, XtNumber(other_f)}, + {"Galaxies:", + "Whether to display galaxies and clusters of galaxies", + galaxies_f, XtNumber(galaxies_f)}, + {"Nebulae:", + "Whether to display various types of nebulae, and planetary nebulae", + nebulae_f, XtNumber(nebulae_f)}, + {"Stars:", + "Whether to display various classes of stars and star-like objects", + stars_f, XtNumber(stars_f)}, +}; + +/* these form rapid lookup tables for the state of an object. + * type_table can be directly indexed by Obj.o_type and, if type is FIXED, + * fclass_table by Obj.f.f_class. + */ +static char type_table[NOBJTYPES]; +static char fclass_table[NCLASSES]; + +#define BMAGLIMIT (-28) /* brightest setting for the Mag scale */ +#define FMAGLIMIT 30 /* faintest setting for the Mag scale */ +#define MAXMAGSTP 30 /* mag mag step */ +static int stmag, ssmag, dsmag; /* current values of the mag limits */ +static int magstp; /* current value of mag step */ +static Widget stmag_w, ssmag_w, dsmag_w; /* mag scales */ +static Widget magst_w; /* mag steps scale */ +static Widget filter_w; /* main filter dialog */ + +static char skyfcategory[] = "Sky View -- Filter"; /* Save category */ + +/* create, but do not manage, the filter dialog. + * we also apply its state info immediately to the initial resource + * settings of the toggle buttons since they are used to set up the real filter + * right away. + */ +void +svf_create(shell_w) +Widget shell_w; +{ + static struct { + char *name; + char *tip; + void (*cb)(); + } ctls[] = { + /* balance in half */ + {"Ok", "Apply changes and close", svf_ok_cb}, + {"Apply", "Apply changes and stay up", svf_apply_cb}, + {"Toggle", "Toggle all selections on->off and off->on", + svf_toggle_cb}, + {"All", "Turn all selections on", svf_all_cb}, + {"Reset", "Restore settings to what is now in effect",svf_reset_cb}, + {"Close", "Make no changes and close", svf_close_cb}, + {"Help", "Display additional information", svf_help_cb} + }; + Arg args[20]; + XmString str; + Widget w, f_w; + Widget rc_w, lrc_w, rrc_w, mrc_w; + int n; + int i; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNverticalSpacing, 6); n++; + XtSetArg (args[n], XmNmarginWidth, 8); n++; + XtSetArg (args[n], XmNmarginHeight, 8); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + filter_w = XmCreateFormDialog (shell_w, "SkyFilter", args, n); + set_something (filter_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (filter_w, XmNhelpCallback, svf_help_cb, NULL); + sr_reg (XtParent(filter_w), "XEphem*SkyFilter.x", skyfcategory, 0); + sr_reg (XtParent(filter_w), "XEphem*SkyFilter.y", skyfcategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Sky view Filter"); n++; + XtSetValues (XtParent(filter_w), args, n); + + /* put the control buttons across the bottom in a horizontal RC + */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustLast, True); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNspacing, 2); n++; + rc_w = XmCreateRowColumn (filter_w, "CRC", args, n); + XtManageChild (rc_w); + + for (i = 0; i < XtNumber(ctls); i++) { + str = XmStringCreateLtoR(ctls[i].name,XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginLeft, 0); n++; + XtSetArg (args[n], XmNmarginRight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreatePushButton (rc_w, "FilterCB", args, n); + wtip (w, ctls[i].tip); + XtManageChild(w); + XmStringFree (str); + XtAddCallback (w, XmNactivateCallback, ctls[i].cb, NULL); + } + + /* pile all but the control buttons in a main rowcolumn */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, rc_w); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNnumColumns, 2); n++; + mrc_w = XmCreateRowColumn (filter_w, "MRC", args, n); + XtManageChild (mrc_w); + + /* make the left rc */ + n = 0; + lrc_w = XmCreateRowColumn (mrc_w, "LRC", args, n); + XtManageChild (lrc_w); + + /* add half the FilterCats */ + + for (i = 0; i < XtNumber(filters)/2; i++) + svf_create_filter (lrc_w, &filters[i]); + + /* add sol sys limit scale in a frame */ + + n = 0; + f_w = XmCreateFrame (lrc_w, "SSF", args, n); + XtManageChild (f_w); + + str = XmStringCreate ("Sol Sys Lim Mag", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, BMAGLIMIT); n++; + XtSetArg (args[n], XmNmaximum, FMAGLIMIT); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, str); n++; + ssmag_w = XmCreateScale (f_w, "SolSysMag", args, n); + XtAddCallback (ssmag_w, XmNdragCallback, svf_magdrag_cb, 0); + XtAddCallback (ssmag_w, XmNvalueChangedCallback, svf_magdrag_cb, 0); + wtip (ssmag_w, "Faint limit for solar system objects"); + XtManageChild (ssmag_w); + XmStringFree (str); + sr_reg (ssmag_w, NULL, skyfcategory, 0); + + /* add mag step scale in a frame */ + + n = 0; + f_w = XmCreateFrame (lrc_w, "SSF", args, n); + XtManageChild (f_w); + + str = XmStringCreate ("Mag dot step", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, 1); n++; + XtSetArg (args[n], XmNmaximum, MAXMAGSTP); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, str); n++; + magst_w = XmCreateScale (f_w, "MagStep", args, n); + wtip (magst_w, "Select magnitude change for each dot size step"); + XtManageChild (magst_w); + XmStringFree (str); + XmScaleGetValue (magst_w, &magstp); + sr_reg (magst_w, NULL, skyfcategory, 0); + + /* make the right rc */ + n = 0; + XtSetArg (args[n], XmNisAligned, False); n++; + rrc_w = XmCreateRowColumn (mrc_w, "RRC", args, n); + XtManageChild (rrc_w); + + /* add the other half of the FilterCat */ + + for (i = XtNumber(filters)/2; i < XtNumber(filters); i++) + svf_create_filter (rrc_w, &filters[i]); + + /* add stars mag-scale in a frame */ + + n = 0; + f_w = XmCreateFrame (rrc_w, "STF", args, n); + XtManageChild (f_w); + + str = XmStringCreate ("Stars Lim Mag", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, BMAGLIMIT); n++; + XtSetArg (args[n], XmNmaximum, FMAGLIMIT); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, str); n++; + stmag_w = XmCreateScale (f_w, "StarMag", args, n); + XtAddCallback (stmag_w, XmNdragCallback, svf_magdrag_cb, 0); + XtAddCallback (stmag_w, XmNvalueChangedCallback, svf_magdrag_cb, 0); + wtip (stmag_w, "Faint limit for stars."); + XtManageChild (stmag_w); + XmStringFree (str); + sr_reg (stmag_w, NULL, skyfcategory, 0); + + n = 0; + f_w = XmCreateFrame (rrc_w, "DSF", args, n); + XtManageChild (f_w); + + str = XmStringCreate ("Deep Sky Lim Mag", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, BMAGLIMIT); n++; + XtSetArg (args[n], XmNmaximum, FMAGLIMIT); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, str); n++; + dsmag_w = XmCreateScale (f_w, "DeepSkyMag", args, n); + XtAddCallback (dsmag_w, XmNdragCallback, svf_magdrag_cb, 0); + XtAddCallback (dsmag_w, XmNvalueChangedCallback, svf_magdrag_cb, 0); + wtip (dsmag_w, "Faint limit for deep sky objects."); + XtManageChild (dsmag_w); + XmStringFree (str); + sr_reg (dsmag_w, NULL, skyfcategory, 0); + + /* set the real filter according to the state of the toggle buttons */ + svf_apply(); +} + +/* return 1 if we are now up, else 0. + */ +int +svf_ismanaged() +{ + + return (filter_w && XtIsManaged(filter_w)); +} + +/* called to manage the filter dialog. + * whenever we are managed, reset the state of the toggle buttons back + * to the way the real filter is. + */ +void +svf_manage() +{ + svf_reset(); + XtManageChild(filter_w); +} + +/* called to manage the filter dialog. + */ +void +svf_unmanage() +{ + XtUnmanageChild(filter_w); +} + +/* return a copy of the currently enforced type and class tables. + * this is to support sky history. + */ +void +svf_gettables (tt, ct) +char tt[NOBJTYPES]; +char ct[NCLASSES]; +{ + (void) memcpy (tt, type_table, NOBJTYPES); + (void) memcpy (ct, fclass_table, NCLASSES); +} + +/* install a new copy of the type and class tables and update the buttons + * to match. + * this is to support sky history. + */ +void +svf_settables (tt, ct) +char tt[NOBJTYPES]; +char ct[NCLASSES]; +{ + (void) memcpy (type_table, tt, NOBJTYPES); + (void) memcpy (fclass_table, ct, NCLASSES); + + svf_reset(); +} + +/* return the current mag limits and mag step */ +void +svf_getmaglimits (int *stmagp, int *ssmagp, int *dsmagp, int *magstpp) +{ + *stmagp = stmag; + *ssmagp = ssmag; + *dsmagp = dsmag; + *magstpp = magstp; +} + +/* set the current deep- and near-sky limit and mag step */ +void +svf_setmaglimits (st, ss, ds, s) +int st, ss, ds, s; +{ + stmag = st; + ssmag = ss; + dsmag = ds; + magstp = s; + XmScaleSetValue (stmag_w, stmag); + XmScaleSetValue (ssmag_w, ssmag); + XmScaleSetValue (dsmag_w, dsmag); + XmScaleSetValue (magst_w, s); +} + +/* return 1 if p satisfies the stuff in the filter dialog, else 0. + * N.B. because svf_apply() has to have already been called we do not need + * to range check the type and class. + */ +int +svf_filter_ok (op) +Obj *op; +{ + int tok; + + if (is_type(op,FIXEDM)) + tok = fclass_table[((int)op->f_class) & (NCLASSES-1)]; + else + tok = type_table[op->o_type]; + + if (tok) + return (svf_bright_ok (op)); + + return (0); +} + +/* called to put up or remove the watch cursor. */ +void +svf_cursor (c) +Cursor c; +{ + Window win; + + if (filter_w && (win = XtWindow(filter_w)) != 0) { + Display *dsp = XtDisplay(filter_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* establish faintest mags according to given fov */ +void +svf_automag(fov) +double fov; +{ + static AutoMag amdef = {degrad(360.0), 6, 6, 8, 1}; + static AutoMag *amp; + static int namp; + int i; + + /* establish table sorted in ascending order by r if first time */ + if (namp == 0) { + namp = svf_initautomag (&); + if (namp <= 0) { + namp = 1; + amp = &amdef; + } + } + + /* search for largest entry <= current fov */ + for (i = 0; i < namp && fov > amp[i].r; i++) + continue; + i %= namp; + svf_setmaglimits (amp[i].st, amp[i].ss, amp[i].ds, amp[i].s); +} + +/* create one FilterCat filter category in the given RowColumn */ +static void +svf_create_filter (mainrc, fcp) +Widget mainrc; +FilterCat *fcp; +{ + Arg args[20]; + Widget l_w; + Widget rc_w; /* rc for the label and controls */ + Widget fr_w, da_w; + Widget w; + int n; + int i; + + /* make a rc within a frame for the tb rowcol */ + + n = 0; + fr_w = XmCreateFrame (mainrc, "Frame", args, n); + XtManageChild (fr_w); + n = 0; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + rc_w = XmCreateRowColumn (fr_w, "CategoryRC", args, n); + XtManageChild (rc_w); + + /* make a label for the category */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + l_w = XmCreateLabel (rc_w, fcp->label, args, n); + wtip (l_w, fcp->ltip); + XtManageChild (l_w); + + /* make a pushbutton used to toggle all entries in this category */ + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreatePushButton (rc_w, "Toggle", args, n); + wtip (w, "Toggle all selections in this category"); + XtAddCallback (w, XmNactivateCallback, svf_cat_toggle_cb, + (XtPointer)fcp); + XtManageChild (w); + + /* add each filter */ + + for (i = 0; i < fcp->nftb; i++) { + Widget f_w; + Widget tb_w; + FilterTB *ftbp = &fcp->ftb[i]; + XmString str; + + n = 0; + f_w = XmCreateForm (rc_w, "FTBF", args, n); + XtManageChild (f_w); + + /* create a frame around a drawing area in which to show the + * object symbol + */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + fr_w = XmCreateFrame (f_w, "SymbolF", args, n); + XtManageChild (fr_w); + n = 0; + da_w = XmCreateDrawingArea (fr_w, "SymbolDA", args, n); + XtAddCallback (da_w, XmNexposeCallback, svf_da_cb, + (XtPointer)ftbp); + XtManageChild (da_w); + + /* create the filter selection toggle button */ + + str = XmStringCreateLtoR (ftbp->label,XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, fr_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + tb_w = XmCreateToggleButton (f_w, ftbp->name, args, n); + XmStringFree(str); + XtManageChild (tb_w); + ftbp->tbw = tb_w; + sr_reg (tb_w, NULL, skyfcategory, 0); + } +} + +/* set the real filter states and the toggle button states according to the + * rapid-access tables. + * also, set the mag scales and dot scales from the real mag limits. + */ +static void +svf_reset() +{ + int i, j; + + for (i = 0; i < XtNumber(filters); i++) { + FilterCat *fcp = &filters[i]; + for (j = 0; j < fcp->nftb; j++) { + FilterTB *ftbp = &fcp->ftb[j]; + ftbp->state = (ftbp->type == FIXED) + ? fclass_table[(int)ftbp->class] : type_table[ftbp->type]; + XmToggleButtonSetState (ftbp->tbw, ftbp->state, True); + } + } + + svf_setmaglimits (stmag, ssmag, dsmag, magstp); +} + +/* set the real filter and rapid-access tables according to the present state + * of the toggle buttons. + * also set the mag limits and dot scale from their controls. + */ +static void +svf_apply() +{ + int i, j; + + for (i = 0; i < XtNumber(filters); i++) { + FilterCat *fcp = &filters[i]; + for (j = 0; j < fcp->nftb; j++) { + FilterTB *ftbp = &fcp->ftb[j]; + int t = ftbp->type; + if (t < 0 || t >= XtNumber(type_table)) { + printf ("svf_apply: type out of range: %d\n", t); + abort(); + } + ftbp->state = XmToggleButtonGetState (ftbp->tbw); + if (t == FIXED) { + int c = (int)ftbp->class; + if (c < 0 || c >= XtNumber(fclass_table)) { + printf ("svf_apply: FIXED class out of range: %d\n", c); + abort(); + } + fclass_table[c] = ftbp->state; + } else + type_table[t] = ftbp->state; + } + } + + svtb_updateCTTT(fclass_table, type_table); + + XmScaleGetValue (stmag_w, &stmag); + XmScaleGetValue (ssmag_w, &ssmag); + XmScaleGetValue (dsmag_w, &dsmag); + XmScaleGetValue (magst_w, &magstp); +} + +/* return 1 if db object is ever possibly brighter than allowed range; else 0. + * don't worry too much, this is just a first-stage culling. real mag cutoff + * is done later. + */ +static int +svf_bright_ok(op) +Obj *op; +{ + switch (op->o_type) { + case PLANET: + /* always just go for the planets */ + return (1); + /* break; */ + case HYPERBOLIC: return (1); /* and interlopers */ + case PARABOLIC: return (1); + case ELLIPTICAL: { + double mag; /* magnitude */ + double per, aph; /* perihelion and aphelion distance */ + + per = op->e_a*(1.0 - op->e_e); + aph = op->e_a*(1.0 + op->e_e); + if (per <= 1.1 && aph >= 0.9) + return (1); /* might be blazing in the back yard some day */ + if (op->e_mag.whichm == MAG_HG) + mag = op->e_mag.m1 + 5*log10(per*fabs(per-1.0)); + else + gk_mag(op->e_mag.m1, op->e_mag.m2, + per, fabs(per-1.0), &mag); + return (mag <= ssmag); + /* break; */ + } + case FIXED: /* FALLTHRU */ + case BINARYSTAR: + return (get_mag(op) <= (is_deepsky(op) ? dsmag : stmag)); + /* break; */ + case EARTHSAT: + /* TODO: work on satellite magnitudes someday */ + return (1); + default: + printf ("sv_bright_ok(): bad type: %d\n", op->o_type); + abort(); + return (0); /* for lint */ + } +} + +/* called when a symbol drawing area is exposed. + * client is a pointer to the FilterTB. + */ +/* ARGSUSED */ +static void +svf_da_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + FilterTB *ftbp = (FilterTB *) client; + + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + swa.bit_gravity = ForgetGravity; + XChangeWindowAttributes (e->display, e->window, + CWBitGravity, &swa); + before = 1; + } + /* wait for the last in the series */ + if (e->count != 0) + return; + } + break; + default: + return; + } + + svf_draw_symbol(ftbp, w); +} + +/* draw the symbol used for the object described by ftbp into the + * DrawingArea widget daw. + */ +static void +svf_draw_symbol(ftbp, daw) +FilterTB *ftbp; +Widget daw; +{ + static GC gc; + static Pixel fg_p, bg_p; + Display *dsp = XtDisplay(daw); + Window win = XtWindow(daw); + Obj o; + Dimension w, h; + int diam; + + zero_mem ((void *)&o, sizeof(Obj)); + o.o_type = ftbp->type; + switch (ftbp->type) { + case BINARYSTAR: + o.b_nbp = 1; /* just to avoid orb ele calc */ + break; + case FIXED: + o.f_class = ftbp->class; + set_ratio (&o, 2, 1); + set_pa (&o, PI/2); + break; + case PLANET: + o.s_phase = 100; + break; + } + + get_something (daw, XmNwidth, (XtArgVal)&w); + get_something (daw, XmNheight, (XtArgVal)&h); + diam = (w > h ? h : w) - 2; /* allow for a small border */ + + if (!gc) { + get_something (daw, XmNforeground, (XtArgVal)&fg_p); + get_something (daw, XmNbackground, (XtArgVal)&bg_p); + gc = XCreateGC (dsp, win, 0L, NULL); + } + + XSetForeground (dsp, gc, bg_p); + XFillRectangle (dsp, win, gc, 0, 0, w, h); + XSetForeground (dsp, gc, fg_p); + sv_draw_obj (dsp, win, gc, &o, (int)w/2-1, (int)h/2-1, diam, 0); + sv_draw_obj (dsp, win, gc, NULL, 0, 0, 0, 0); /* flush */ +} + +/* called when either mag scale is dragged */ +/* ARGSUSED */ +static void +svf_magdrag_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sv_amagoff(); +} + +/* called when Apply is pushed on the filter dialog */ +/* ARGSUSED */ +static void +svf_apply_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + svf_apply(); + sv_all(mm_get_now()); +} + +/* called when Ok is pushed on the filter dialog */ +/* ARGSUSED */ +static void +svf_ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + svf_apply(); + sv_all(mm_get_now()); + XtUnmanageChild (filter_w); +} + +/* called when Close is pushed on the filter dialog */ +/* ARGSUSED */ +static void +svf_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (filter_w); +} + +/* callback from the Help button. + */ +/* ARGSUSED */ +static void +svf_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This allows settings the types of objects to display." +}; + + hlp_dialog ("SkyView_filter", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* called when Toggle is pushed on the filter dialog */ +/* ARGSUSED */ +static void +svf_toggle_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i, j; + + for (i = 0; i < XtNumber(filters); i++) { + FilterCat *fcp = &filters[i]; + for (j = 0; j < fcp->nftb; j++) { + FilterTB *ftbp = &fcp->ftb[j]; + XmToggleButtonSetState (ftbp->tbw, + !XmToggleButtonGetState(ftbp->tbw), True); + } + } +} + +/* called when All is pushed on the filter dialog */ +/* ARGSUSED */ +static void +svf_all_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i, j; + + for (i = 0; i < XtNumber(filters); i++) { + FilterCat *fcp = &filters[i]; + for (j = 0; j < fcp->nftb; j++) { + FilterTB *ftbp = &fcp->ftb[j]; + XmToggleButtonSetState (ftbp->tbw, True, True); + } + } +} + +/* called when Reset is pushed on the filter dialog */ +/* ARGSUSED */ +static void +svf_reset_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + svf_reset(); +} + +/* called when the "Toggle" button is activated on a particular category. + * client is the FilterCat pointer. + */ +/* ARGSUSED */ +static void +svf_cat_toggle_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FilterCat *fcp = (FilterCat *) client; + int i; + + for (i = 0; i < fcp->nftb; i++) { + FilterTB *ftbp = &fcp->ftb[i]; + XmToggleButtonSetState (ftbp->tbw, + !XmToggleButtonGetState(ftbp->tbw), True); + } +} + +/* given two pointers to MagAuto, return how they sort by r in qsort-style. + */ +static int +am_cf (const void * v1, const void * v2) +{ + AutoMag *am1 = (AutoMag *)v1; + AutoMag *am2 = (AutoMag *)v2; + double r1 = am1->r; + double r2 = am2->r; + + if (r1 < r2) + return (-1); + if (r1 > r2) + return (1); + return (0); +} + +/* digest the AutoMag resource. + * the format is five values in each group, groups separated by commas. + * each group is max fov, star mag, sol sys mag, deep sky mag, step-size. + * return number of entries and put into *ampp. + * array will be sorted into ascending order of fov radius. + * N.B. don't set *ampp unless we return > 0. + */ +static int +svf_initautomag(ampp) +AutoMag **ampp; +{ + static char AMResource[] = "AutoMag"; + double r; + int st, ss, ds, s; + AutoMag *amp; + int sam; + int namp; + char *am; + int i; + + /* get the automag resource */ + am = getXRes (AMResource, NULL); + if (!am) { + xe_msg (0, "No %s resource found", AMResource); + return (0); + } + + /* scan for the quads -- build up amp as we go. + * stop at first sign of trouble. + */ + sam = sizeof(AutoMag); + amp = (AutoMag *)0; + namp = 0; + while (sscanf (am, "%lf %d %d %d %d", &r, &st, &ss, &ds, &s) == 5) { + char *new = amp ? realloc ((void *)amp, (namp+1)*sam) : malloc(sam); + AutoMag *tamp; + + if (!new) { + xe_msg (0, "Insufficient memory for AutoMag table"); + break; + } + amp = (AutoMag *)new; + tamp = &[namp++]; + tamp->r = degrad(r); + tamp->st = st; + tamp->ss = ss; + tamp->ds = ds; + tamp->s = s; + + /* skip past next comma */ + while (*am != ',' && *am != '\0') + am++; + if (*am == '\0') + break; + am++; + } + + if (namp == 0) { + xe_msg (0, "No valid entries in AutoMag resource"); + return (0); + } + + /* sort into ascending order of fov radius */ + qsort ((void *)amp, namp, sizeof(AutoMag), am_cf); + + /* report results to message log because the format is a bit obscure */ + xe_msg(0, "Sky View found %d AutoMag table entries as follows:", namp); + xe_msg(0, " FOV Stars SolSys DeepSky DotSiz"); + for (i = 0; i < namp; i++) { + xe_msg (0, " %6.2f %3d %3d %3d %3d", + raddeg(amp[i].r), amp[i].st, amp[i].ss, amp[i].ds, amp[i].s); + } + + *ampp = amp; + return (namp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyfiltmenu.c,v $ $Date: 2004/05/05 17:43:32 $ $Revision: 1.24 $ $Name: $"}; diff --git a/GUI/xephem/skyfits.c b/GUI/xephem/skyfits.c new file mode 100644 index 0000000..48122d4 --- /dev/null +++ b/GUI/xephem/skyfits.c @@ -0,0 +1,1653 @@ +/* code to open local or fetch FITS files for skyview from STScI or ESO. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "xephem.h" + +#define MAXDSSFOV (30.) /* max field size we retreive, arcmins*/ +#define MINDSSFOV (5.) /* min field size we retreive, arcmins*/ + + +static int sf_readFile (char *name); +static void sf_create (void); +static void initFSB (Widget w); +static void initPubShared (Widget rc_w, Widget fsb_w); +static void sf_save_cb (Widget w, XtPointer client, XtPointer call); +static void save_file (void); +static void sf_open_cb (Widget w, XtPointer client, XtPointer call); +static void sf_close_cb (Widget w, XtPointer client, XtPointer call); +static void sf_help_cb (Widget w, XtPointer client, XtPointer call); +static void sf_setdate_cb (Widget w, XtPointer client, XtPointer call); +static void sf_setSaveName (char *newfn); +static char *bname (char *buf); + +static void eso_fits (void); +static void stsci_fits (void); +static void fits_read_icb (XtPointer client, int *fd, XtInputId *id); +static int fitsObs (double *mjdp); +static void sf_setObsDate (void); +static int prepOpen (char fn[], char errmsg[]); +static XtInputId read_iid; /* set while working on reading from socket */ +static XtIntervalId read_to; /* callback to poll for read cancel */ +static void fits_read_to (XtPointer client, XtIntervalId *id); +static void fits_read_abort (FImage *fip); +static int fr_socket; /* FITS reading socket */ + +static Widget sf_w; /* main dialog */ +static Widget savefn_w; /* TF for save filename */ +static Widget stsci_w; /* TB for STScI, else ESO */ +static Widget fsb_w; /* FSB for opening a file */ +static Widget hdr_w; /* ScrolledText for the FITS header */ +static Widget autoname_w; /* TB for whether to auto set save filename */ +static Widget obsdate_w; /* label for obs date string */ +static Widget setobsdate_w; /* PB to set main to obs date */ +static Widget dss1_w; /* TB set to use DSS 1 */ +static Widget dss2r_w; /* TB set to use DSS 2 red */ +static Widget dss2b_w; /* TB set to use DSS 2 blue */ + + +#define FWDT 1234 /* FITS file poll interval, ms */ +static int fw_isFifo (char *name); +static void fw_to (XtPointer client, XtIntervalId *id); +static void fw_icb (XtPointer client, int *fd, XtInputId *id); +static void fw_cb (Widget w, XtPointer client, XtPointer call); +static void fw_on (int whether); +static XtIntervalId fw_tid; /* used to poll for file naming FITS file */ +static XtInputId fw_iid; /* used to monitor FIFO for name of FITS file */ +static Widget fwfn_w; /* TF holding Watch file name */ +static Widget fw_w; /* TB whether to watch for FITS file */ +static int fw_fd; /* file watch fifo id */ + +/* which survey */ +typedef enum { + DSS_1, DSS_2R, DSS_2B +} Survey; +static Survey whichSurvey (void); + +#define FCPP 500 /* FITS read cancel poll period, ms */ + + +static char fitsp[] = "FITSpattern"; /* resource name of FITS file pattern */ +#if defined (__NUTC__) +static char gexe[] = "gunzip.exe"; /* gunzip executable */ +#else +static char gexe[] = "gunzip"; /* gunzip executable */ +#endif +static char gcmd[] = "gunzip"; /* gunzip command's argv[0] */ + +static char skyfitscategory[] = "Sky View -- FITS"; /* Save category */ + +/* called to manage the fits dialog. + */ +void +sf_manage() +{ + if (!sf_w) { + sf_create(); + si_create(); + } + + XtManageChild(sf_w); +} + +/* called to unmanage the fits dialog. + */ +void +sf_unmanage() +{ + if (!sf_w) + return; + XtUnmanageChild (sf_w); +} + +/* return 1 if dialog is up, else 0. + */ +int +sf_ismanaged() +{ + return (sf_w && XtIsManaged(sf_w)); +} + +/* called to put up or remove the watch cursor. */ +void +sf_cursor (Cursor c) +{ + Window win; + + if (sf_w && (win = XtWindow(sf_w)) != 0) { + Display *dsp = XtDisplay(sf_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* install fip as the new current image with the given name. + * N.B. fip memory is made persistent, do not reset on return + * last argument determines whether contrast and WCS are set automatically. + */ +void +sf_newFITS (FImage *fip, char name[], int autocon) +{ + /* install fip as current image */ + si_newfim (fip, name, autocon); + + /* set save name from image center, if enabled */ + if (XmToggleButtonGetState(autoname_w)) + sf_setSaveName (name); + + /* set image date */ + sf_setObsDate (); +} + +/* fill the hdr_w scrolled text with the FITS header entries. + * keep hdrl up to date. + */ +void +sf_showHeader (fip) +FImage *fip; +{ + char *header; + int i; + + if (!sf_w) { + sf_create(); + si_create(); + } + + /* room for each FITS line, with nl and a final END and \0 */ + header = malloc ((fip->nvar+1)*(FITS_HCOLS+1) + 1); + if (!header) { + xe_msg (0, "No memory to display FITS header"); + return; + } + + /* copy from fip->var to header, adding \n after each line */ + for (i = 0; i < fip->nvar; i++) { + memcpy(header + i*(FITS_HCOLS+1), fip->var[i], FITS_HCOLS); + header[(i+1)*(FITS_HCOLS+1)-1] = '\n'; + } + + /* add END and '\0' to make it a real string */ + (void) sprintf (&header[i*(FITS_HCOLS+1)], "END"); + + XmTextSetString (hdr_w, header); + free (header); + + /* scroll to the top */ + XmTextShowPosition (hdr_w, (XmTextPosition)0); +} + +/* return copies of the current filename and OBJECT or TARGET keywords. + * if either can not be determined, the returned string will be 0 length. + * N.B. we assume the caller supplies "enough" space. + */ +void +sf_getName (fn, on) +char *fn; /* filename */ +char *on; /* object name */ +{ + FImage *fip; + char *savefn; + int i, n; + + fip = si_getFImage (); + if (!fip) { + *fn = *on = '\0'; + return; + } + + savefn = XmTextFieldGetString (savefn_w); + n = strlen (savefn); + + for (i = n-1; i >= 0 && savefn[i] != '/' && savefn[i] != '\\'; --i) + continue; + strcpy (fn, &savefn[i+1]); + XtFree (savefn); + + if (getStringFITS (fip, "OBJECT", on) < 0 && + getStringFITS (fip, "TARGET", on) < 0) + *on = '\0'; +} + +/* t00fri: include possibility to read .fth compressed files */ +static int +prepOpen (fn, errmsg) +char fn[]; +char errmsg[]; +{ + int fd; + int l; + + l = strlen (fn); + if (l < 4 || strcmp(fn+l-4, ".fth")) { + /* just open directly */ + fd = openh (fn, O_RDONLY); + if (fd < 0) + strcpy (errmsg, syserrstr()); + } else { + /* ends with .fth so need to run through fdecompress + * TODO: this is a really lazy way to do it -- + */ + char cmd[2048]; + char tmp[2048]; + int s; + + tempfilename (tmp, "xefts", ".fth"); + sprintf (cmd, "cp %s %s; fdecompress -r %s", fn, tmp, tmp); + s = system (cmd); + if (s != 0) { + sprintf (errmsg, "Can not execute `%s' ", cmd); + if (s < 0) + strcat (errmsg, syserrstr()); + fd = -1; + } else { + tmp[strlen(tmp)-1] = 's'; + fd = openh (tmp, O_RDONLY); + (void) unlink (tmp); /* once open, remove the .fts copy */ + if (fd < 0) + sprintf (errmsg, "Can not decompress %s: %s", tmp, + syserrstr()); + } + } + + return (fd); +} + +/* open and read a FITS file. + * if all ok return 0, else return -1. + */ +static int +sf_readFile (name) +char *name; +{ + char buf[1024]; + FImage fim, *fip = &fim; + char errmsg[1024]; + int fd; + int s; + + /* open the fits file */ + fd = prepOpen (name, errmsg); + if (fd < 0) { + xe_msg (1, "%s: %s", name, errmsg); + return(-1); + } + + /* read in */ + s = readFITS (fd, fip, buf); + close (fd); + if (s < 0) { + xe_msg (1, "%s: %s", name, buf); + return(-1); + } + + /* ok!*/ + sf_newFITS (fip, name, 1); + return (0); +} + +/* create, but do not manage, the FITS file dialog */ +static void +sf_create() +{ + Widget tf_w, bf_w; + Widget rc_w, rb_w; + Widget go_w; + Widget pw_w; + Widget h_w; + Widget w; + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNallowResize, True); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNmarginWidth, 5); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + sf_w = XmCreateFormDialog (svshell_w, "SkyFITS", args, n); + set_something (sf_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (sf_w, XmNhelpCallback, sf_help_cb, NULL); + sr_reg (XtParent(sf_w), "XEphem*SkyFITS.x", skyfitscategory, 0); + sr_reg (XtParent(sf_w), "XEphem*SkyFITS.y", skyfitscategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Sky FITS"); n++; + XtSetValues (XtParent(sf_w), args, n); + + /* top and bottom halves are in their own forms, then + * each form is in a paned window + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + pw_w = XmCreatePanedWindow (sf_w, "FITSPW", args, n); + XtManageChild (pw_w); + + /* the top form */ + + n = 0; + tf_w = XmCreateForm (pw_w, "TF", args, n); + XtManageChild (tf_w); + + /* controls to fetch networked images */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 6); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + go_w = XmCreatePushButton (tf_w, "Get", args, n); + wtip (go_w, "Retrieve image of Sky View center over Internet"); + XtAddCallback (go_w, XmNactivateCallback, sf_go_cb, NULL); + XtManageChild (go_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 8); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, go_w); n++; + XtSetArg (args[n], XmNleftOffset, 4); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (tf_w, "GL", args, n); + set_xmstring (w,XmNlabelString,"Digitized Sky Survey image:"); + XtManageChild (w); + + /* institution selection */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, go_w); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 3); n++; + w = XmCreateLabel (tf_w, "From:", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, go_w); n++; + XtSetArg (args[n], XmNtopOffset, 1); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 25); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNspacing, 6); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + rb_w = XmCreateRadioBox (tf_w, "GRB", args, n); + XtManageChild (rb_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + stsci_w = XmCreateToggleButton (rb_w, "STScI", args, n); + wtip (stsci_w, "Get image from Maryland USA"); + XtManageChild (stsci_w); + sr_reg (stsci_w, NULL, skyfitscategory, 1); + + /* stsci sets logic */ + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg(args[n],XmNset,!XmToggleButtonGetState(stsci_w)); n++; + w = XmCreateToggleButton (rb_w, "ESO", args, n); + wtip (stsci_w, "Get image from Germany"); + XtManageChild (w); + + /* survey selection */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNtopOffset, 1); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 3); n++; + w = XmCreateLabel (tf_w, "Survey:", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNtopOffset, 0); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 25); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNspacing, 6); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + rb_w = XmCreateRadioBox (tf_w, "GRB", args, n); + XtManageChild (rb_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + dss1_w = XmCreateToggleButton (rb_w, "DSS1", args, n); + set_xmstring (dss1_w, XmNlabelString, "DSS 1"); + wtip (dss1_w, "Original DSS"); + XtManageChild (dss1_w); + sr_reg (dss1_w, NULL, skyfitscategory, 1); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + dss2r_w = XmCreateToggleButton (rb_w, "DSS2R", args, n); + set_xmstring (dss2r_w, XmNlabelString, "DSS 2R"); + wtip (dss2r_w, "DSS 2, Red band (90% complete)"); + XtManageChild (dss2r_w); + sr_reg (dss2r_w, NULL, skyfitscategory, 1); + + n = 0; + XtSetArg (args[n], XmNspacing, 4); n++; + dss2b_w = XmCreateToggleButton (rb_w, "DSS2B", args, n); + set_xmstring (dss2b_w, XmNlabelString, "DSS 2B"); + wtip (dss2b_w, "DSS 2, Blue band (50% complete)"); + XtManageChild (dss2b_w); + sr_reg (dss2b_w, NULL, skyfitscategory, 1); + + /* header, with possible date */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + h_w = XmCreateLabel (tf_w, "Lab", args, n); + set_xmstring (h_w, XmNlabelString, "FITS Header:"); + XtManageChild (h_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + setobsdate_w = XmCreatePushButton (tf_w, "SO", args, n); + set_xmstring (setobsdate_w, XmNlabelString, "Set time"); + XtAddCallback (setobsdate_w, XmNactivateCallback, sf_setdate_cb, 0); + wtip(setobsdate_w,"Set main XEphem time to this Observation time"); + XtManageChild (setobsdate_w); + XtSetSensitive (setobsdate_w, False); /* set true when have date */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rb_w); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, h_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, setobsdate_w); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + obsdate_w = XmCreateLabel (tf_w, "ObsDate", args, n); + set_xmstring (obsdate_w, XmNlabelString, " "); + wtip(obsdate_w, "Best-guess of time of Observation"); + XtManageChild (obsdate_w); + + /* scrolled text in which to display the header */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, setobsdate_w); n++; + XtSetArg (args[n], XmNtopOffset, 2); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNautoShowCursorPosition, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + hdr_w = XmCreateScrolledText (tf_w, "Header", args, n); + wtip (hdr_w, "Scrolled text area containing FITS File header"); + XtManageChild (hdr_w); + + /* the bottom form */ + + n = 0; + bf_w = XmCreateForm (pw_w, "BF", args, n); + XtManageChild (bf_w); + + /* auto listen */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 16); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (bf_w, "FFWL", args, n); + set_xmstring (w, XmNlabelString, "File watch:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 15); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 45); n++; + fw_w = XmCreateToggleButton (bf_w, "Watch", args, n); + /* N.B. don't sr_reg because that can trigger before SV ever up */ + XtAddCallback (fw_w, XmNvalueChangedCallback, fw_cb, NULL); + wtip (fw_w, + "Whether to watch this file for name of FITS file to load"); + XtManageChild (fw_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fw_w); n++; + XtSetArg (args[n], XmNtopOffset, 2); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fwfn_w = XmCreateTextField (bf_w, "WatchFile", args, n); + defaultTextFN (fwfn_w, 0, getPrivateDir(), "watch.txt"); + sr_reg (fwfn_w, NULL, skyfitscategory, 1); + wtip (fwfn_w,"Name of file to watch for name of FITS file to load"); + XtManageChild (fwfn_w); + + /* label, go PB, Auto name TB and TF for saving a file */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fwfn_w); n++; + XtSetArg (args[n], XmNtopOffset, 16); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (bf_w, "Save", args, n); + set_xmstring (w, XmNlabelString, "Save as:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fwfn_w); n++; + XtSetArg (args[n], XmNtopOffset, 15); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 45); n++; + w = XmCreatePushButton (bf_w, "Save", args, n); + set_xmstring (w, XmNlabelString, "Save now"); + XtAddCallback (w, XmNactivateCallback, sf_save_cb, NULL); + wtip (w, "Save the current image to the file named below"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, fwfn_w); n++; + XtSetArg (args[n], XmNtopOffset, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + autoname_w = XmCreateToggleButton (bf_w, "AutoName", args, n); + set_xmstring (autoname_w, XmNlabelString, "Auto name"); + XtManageChild (autoname_w); + wtip (autoname_w, "When on, automatically chooses a filename based on RA and Dec"); + sr_reg (autoname_w, NULL, skyfitscategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, autoname_w); n++; + XtSetArg (args[n], XmNtopOffset, 2); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + savefn_w = XmCreateTextField (bf_w, "SaveFN", args, n); + defaultTextFN (savefn_w, 0, getPrivateDir(), "xxx.fts"); + XtAddCallback (savefn_w, XmNactivateCallback, sf_save_cb, NULL); + wtip (savefn_w, "Enter name of file to write, then press Enter"); + XtManageChild (savefn_w); + + /* the Open FSB */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, savefn_w); n++; + XtSetArg (args[n], XmNtopOffset, 16); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (bf_w, "Lab", args, n); + set_xmstring (w, XmNlabelString, "Open:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, savefn_w); n++; + XtSetArg (args[n], XmNtopOffset, 14); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + rc_w = XmCreateRowColumn (bf_w, "USRB", args, n); + XtManageChild (rc_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + /* t00fri: keeps FILE scrolled list width correct */ + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + fsb_w = XmCreateFileSelectionBox (bf_w, "FSB", args, n); + XtManageChild (fsb_w); + initFSB(fsb_w); + initPubShared (rc_w, fsb_w); +} + +/* init the directory and pattern resources of the given FileSelectionBox. + * we try to pull these from the basic program resources. + */ +static void +initFSB (fsb_w) +Widget fsb_w; +{ + Widget w; + + /* set default dir and pattern */ + set_xmstring (fsb_w, XmNdirectory, getPrivateDir()); + set_xmstring (fsb_w, XmNpattern, getXRes (fitsp, "*.f*t*")); + + /* change some button labels. + * N.B. can't add tips because these are really Gadgets. + */ + w = XmFileSelectionBoxGetChild (fsb_w, XmDIALOG_OK_BUTTON); + set_xmstring (w, XmNlabelString, "Open"); + w = XmFileSelectionBoxGetChild (fsb_w, XmDIALOG_CANCEL_BUTTON); + set_xmstring (w, XmNlabelString, "Close"); + + /* some other tips */ + w = XmFileSelectionBoxGetChild (fsb_w, XmDIALOG_FILTER_TEXT); + wtip (w, "Current directory and pattern; press `Filter' to rescan"); + w = XmFileSelectionBoxGetChild (fsb_w, XmDIALOG_TEXT); + wtip (w, "FITS file name to be read if press `Open'"); + + /* connect an Open handler */ + XtAddCallback (fsb_w, XmNokCallback, sf_open_cb, NULL); + + /* connect a Close handler */ + XtAddCallback (fsb_w, XmNcancelCallback, sf_close_cb, NULL); + + /* connect a Help handler */ + XtAddCallback (fsb_w, XmNhelpCallback, sf_help_cb, NULL); +} + +/* callback from the Public dir PB */ +/* ARGSUSED */ +static void +sharedDirCB (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget fsb_w = (Widget)client; + char buf[1024]; + + (void) sprintf (buf, "%s/fits", getShareDir()); + set_xmstring (fsb_w, XmNdirectory, expand_home(buf)); +} + +/* callback from the Private dir PB */ +/* ARGSUSED */ +static void +privateDirCB (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget fsb_w = (Widget)client; + + set_xmstring (fsb_w, XmNdirectory, getPrivateDir()); +} + +/* build a set of PB in RC rc_w so that they + * set the XmNdirectory resource in the FSB fsb_w and invoke the Filter. + */ +static void +initPubShared (rc_w, fsb_w) +Widget rc_w, fsb_w; +{ + Arg args[20]; + char tip[1024]; + Widget w; + int n; + + n = 0; + w = XmCreateLabel (rc_w, "Dir", args, n); + set_xmstring (w, XmNlabelString, "Look in:"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Private", args, n); + XtAddCallback(w, XmNactivateCallback, privateDirCB, (XtPointer)fsb_w); + sprintf (tip, "Set directory to %s", getPrivateDir()); + wtip (w, XtNewString(tip)); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Shared", args, n); + XtAddCallback(w, XmNactivateCallback, sharedDirCB, (XtPointer)fsb_w); + sprintf (tip, "Set directory to %s/fits", getShareDir()); + wtip (w, XtNewString(tip)); + XtManageChild (w); +} + +/* called when Watch TB changes */ +/* ARGSUSED */ +static void +fw_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + fw_on (XmToggleButtonGetState(w)); +} + +/* called when Get PB or toolbar PB is hit */ +/* ARGSUSED */ +void +sf_go_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!sf_w) { + sf_create(); + si_create(); + } + + if (read_iid) { + xe_msg (1, "DSS download is already in progress."); + return; + } + + if (XmToggleButtonGetState(stsci_w)) + stsci_fits(); + else + eso_fits(); +} + +/* called when CR is hit in the Save text field or the Save PB is hit */ +/* ARGSUSED */ +static void +sf_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + + if (!si_getFImage ()) { + xe_msg (1, "No current FITS file to save"); + return; + } + + fn = XmTextFieldGetString (savefn_w); + if (!fn || (int)strlen(fn) < 1) { + xe_msg (1, "Please specify a filename"); + XtFree (fn); + return; + } + + if (existsh (fn) == 0 && confirm()) { + char buf[1024]; + (void) sprintf (buf, "%s exists:\nOk to overwrite?", bname(fn)); + query (sf_w, buf, "Yes -- Overwrite", "No -- Cancel", + NULL, save_file, NULL, NULL); + } else + save_file(); + + XtFree (fn); +} + +/* save to file named in savefn_w. + * we already know everything is ok to just do it now. + */ +static void +save_file() +{ + FImage *fip; + char buf[1024]; + char *fn; + int fd; + + fn = XmTextFieldGetString (savefn_w); + + fd = openh (fn, O_CREAT|O_WRONLY, 0666); + if (fd < 0) { + xe_msg (1, "%s: %s", fn, syserrstr()); + XtFree (fn); + return; + } + + fip = si_getFImage (); + if (!fip) { + printf ("FImage disappeared in save_file\n"); + abort(); + } + si_setContrast(fip); + if (writeFITS (fd, fip, buf, 1) < 0) { + xe_msg (1, "%s: %s", fn, buf); + } else { + xe_msg (confirm(), "%s:\nwritten successfully", fn); + } + + (void) close (fd); + XtFree (fn); +} + +/* called when a file selected by the FSB is to be opened */ +static void +/* ARGSUSED */ +sf_open_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmFileSelectionBoxCallbackStruct *s = + (XmFileSelectionBoxCallbackStruct *)call; + char *sp; + + if (s->reason != XmCR_OK) { + printf ("%s: Unknown reason = 0x%x\n", "sf_open_cb()", s->reason); + abort(); + } + + watch_cursor(1); + + XmStringGetLtoR (s->value, XmSTRING_DEFAULT_CHARSET, &sp); + sf_readFile (sp); + XtFree (sp); + + watch_cursor(0); +} + +/* ARGSUSED */ +static void +sf_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (sf_w); +} + +/* ARGSUSED */ +static void +sf_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Read in local FITS files or read from Network.", +"Resulting image will be displayed in Sky View." +}; + + hlp_dialog ("Sky FITS", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback to set main time to match FITS */ +/* ARGSUSED */ +static void +sf_setdate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + double newmjd; + + if (fitsObs(&newmjd) == 0) + mm_newcaldate(newmjd); +} + +/* set savefn_w to newfn. + * preserve any existing directory. + */ +static void +sf_setSaveName(newfn) +char *newfn; +{ + char buf[1024]; + char *fn; + + fn = XmTextFieldGetString (savefn_w); + (void) sprintf (buf, "%.*s%s", (int)(bname(fn)-fn), fn, bname(newfn)); + XtFree (fn); + XmTextFieldSetString (savefn_w, buf); +} + +/* return pointer to basename portion of filename fn. + */ +static char * +bname (fn) +char *fn; +{ + char *base; + + if (!(base = strrchr(fn,'/')) && !(base = strrchr(fn,'\\'))) + base = fn; + else + base++; /* skip the / */ + + return (base); +} + +/* return 0 if find the string str in buf, else -1 */ +static int +chk4str (str, buf) +char str[]; +char buf[]; +{ + int l = strlen (str); + + while (*buf != '\0') + if (strncmp (str, buf++, l) == 0) + return (0); + return (-1); +} + +/* return 0 if have gunzip else -1 */ +static int +chk_gunzip() +{ +#define NOGZEXIT 88 /* any impossible gzip exit value */ + static int know = 1; /* 0 or -1 when know for sure */ + int wstatus; + sigset_t oss, nss; + int pid; + + /* only really test once */ + if (know <= 0) + return (know); + + /* main program reaps children with a SIGCHLD handler to avoid + * zombies. we want to temporarily prevent that here so we can wait. + */ + sigemptyset (&nss); + sigaddset (&nss, SIGCHLD); + sigprocmask (SIG_BLOCK, &nss, &oss); + + /* fork/exec and see how it exits */ + pid = fork(); + if (pid < 0) + return (know = -1); + if (pid == 0) { + /* new process: exec gunzip reading /dev/null else exit NOGZEXIT */ + int nullfd = open ("/dev/null", O_RDWR); + if (nullfd < 0) + _exit(NOGZEXIT); + dup2 (nullfd, 0); + dup2 (nullfd, 1); + dup2 (nullfd, 2); + execlp (gexe, gcmd, NULL); + /* does not return if works */ + _exit(NOGZEXIT); + } + + /* parent waits for exit status */ + know = (waitpid (pid, &wstatus, 0) == pid && WIFEXITED(wstatus) + && WEXITSTATUS(wstatus) != NOGZEXIT) ? 0 : -1; + + /* resume allowing SIGCHLD */ + sigprocmask (SIG_SETMASK, &oss, NULL); + + return (know); +} + +/* return 1 if have/want to use gunzip, else 0 */ +static int +use_gunzip() +{ + if (chk_gunzip() < 0) { + xe_msg (1,"Can not find %s.\nProceeding without compression", gcmd); + return (0); + } + + return (1); +} + +/* setup the pipe between gunzip and xephem to decompress the data. + * return pid if ok, else -1. + */ +static int +setup_gunzip_pipe(int sockfd) +{ + int gzfd[2]; /* file descriptors for gunzip pipe */ + int pid; + int errfd; + + /* make the pipe to gunzip */ + if (pipe(gzfd) < 0) { + xe_msg (1, "Can not make pipe for gunzip"); + return (-1); + } + + /* fork/exec gunzip */ + switch((pid = fork())) { + case 0: /* child: put gunzip between socket and us */ + close (gzfd[0]); /* do not need read side of pipe */ + dup2 (sockfd, 0); /* socket becomes gunzip's stdin */ + close (sockfd); /* do not need after dup */ + dup2 (gzfd[1], 1); /* write side of pipe becomes gunzip's stdout */ + close (gzfd[1]); /* do not need after dup */ + errfd = open ("/dev/null", O_RDWR); + if (errfd >= 0) { + dup2 (errfd, 2);/* dump gunzip's stderr */ + close (errfd); + } + execlp (gexe, gcmd, "-c", NULL); /*should work, already checked*/ + _exit(1); /* exit in case gunzip disappeared */ + break; /* :) */ + + case -1: /* fork failed */ + xe_msg (1, "Can not fork for gunzip"); + return (-1); + + default: /* parent */ + break; + } + + /* put gunzip between the socket and us */ + close (gzfd[1]); /* do not need write side of pipe */ + dup2 (gzfd[0], sockfd); /* read side of pipe masquarades as socket */ + close (gzfd[0]); /* do not need after dup */ + + /* return gunzip's pid */ + return (pid); +} + +static Survey +whichSurvey() +{ + if (XmToggleButtonGetState(dss2r_w)) + return (DSS_2R); + if (XmToggleButtonGetState(dss2b_w)) + return (DSS_2B); + return (DSS_1); +} + +/* start an input stream reading a FITS image from ESO */ +static void +eso_fits() +{ + static char host[] = "archive.eso.org"; + static FImage fim, *fip = &fim; + double fov, alt, az, ra, dec; + char rastr[32], *rap, decstr[32], *decp; + char buf[2048], msg[1024]; + char *survey; + int gzpid; + int aamode; + int sawfits; + + /* do not turn off watch until completely finished */ + watch_cursor (1); + + /* let user abort */ + stopd_up(); + + /* init fip (not reset because we copy the malloc'd fields to fim) */ + initFImage (fip); + + /* find current skyview center and size, in degrees */ + sv_getcenter (&aamode, &fov, &alt, &az, &ra, &dec); + fov = 60*raddeg(fov); + ra = radhr (ra); + dec = raddeg (dec); + + if (fov > MAXDSSFOV) + fov = MAXDSSFOV; + if (fov < MINDSSFOV) + fov = MINDSSFOV; + + /* get desired survey */ + switch (whichSurvey()) { + default: + case DSS_1: survey = "DSS1"; break; + case DSS_2R: survey = "DSS2-red"; break; + case DSS_2B: survey = "DSS2-blue"; break; + } + + /* format and send the request. + * N.B. ESO can't tolerate leading blanks in ra dec specs + */ + fs_sexa (rastr, ra, 2, 3600); + for (rap = rastr; *rap == ' '; rap++) + continue; + fs_sexa (decstr, dec, 3, 3600); + for (decp = decstr; *decp == ' '; decp++) + continue; + (void) sprintf (buf, "GET http://%s/dss/dss?ra=%s&dec=%s&equinox=J2000&Sky-Survey=%s&mime-type=%s&x=%.0f&y=%.0f HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n", + host, rap, decp, survey, + use_gunzip() ? "display/gz-fits" : "application/x-fits", + fov, fov, PATCHLEVEL); + xe_msg (0, "Command to %s:\n%s", host, buf); + fr_socket = httpGET (host, buf, msg); + if (fr_socket < 0) { + xe_msg (1, msg); + stopd_down(); + watch_cursor (0); + return; + } + + /* read back the header -- ends with a blank line */ + sawfits = 0; + while (recvline (fr_socket, buf, sizeof(buf)) > 1) { + xe_msg (0, "Rcv: %s", buf); + if (chk4str ("application/x-fits", buf) == 0 + || chk4str ("image/x-fits", buf) == 0) + sawfits = 1; + } + + /* if do not see a fits file, show what we do find */ + if (!sawfits) { + xe_msg (0, " "); + xe_msg (1, "Message from server in File->System log"); + xe_msg (0, "------------------"); + while (recvline (fr_socket, buf, sizeof(buf)) > 0) + xe_msg (0, "Rcv: %s", buf); + xe_msg (0, "------------------"); + xe_msg (0, "End of Message from server"); + msg_manage(); + watch_cursor (0); + close (fr_socket); + stopd_down(); + return; + } + + /* possibly connect via gunzip -- weird if have gunzip but can't */ + if (use_gunzip()) { + gzpid = setup_gunzip_pipe(fr_socket); + if (gzpid < 0) { + watch_cursor (0); + close (fr_socket); + stopd_down(); + return; + } + } else + gzpid = -1; + + + /* read the FITS header portion */ + if (readFITSHeader (fr_socket, fip, buf) < 0) { + watch_cursor (0); + xe_msg (1, "%s", buf); + resetFImage (fip); + close (fr_socket); + if (gzpid > 0) + kill (gzpid, SIGTERM); + stopd_down(); + return; + } + + /* ok, start reading the pixels and give user a way to abort */ + pm_up(); /* for your viewing pleasure */ + read_iid = XtAppAddInput (xe_app, fr_socket, (XtPointer)XtInputReadMask, + fits_read_icb, (XtPointer)fip); + read_to = XtAppAddTimeOut (xe_app, FCPP, fits_read_to, (XtPointer)(fip)); +} + +/* start an input stream reading a FITS image from STScI */ +static void +stsci_fits() +{ + static char host[] = "archive.stsci.edu"; + static FImage fim, *fip = &fim; + double fov, alt, az, ra, dec; + char buf[1024], msg[1024]; + char *survey; + int gzpid; + int aamode; + int sawfits; + + /* do not turn off watch until completely finished */ + watch_cursor (1); + + /* let user abort */ + stopd_up(); + + /* init fip (not reset because we copy the malloc'd fields to fim) */ + initFImage (fip); + + /* find current skyview center and size, in degrees */ + sv_getcenter (&aamode, &fov, &alt, &az, &ra, &dec); + fov = 60*raddeg(fov); + ra = raddeg (ra); + dec = raddeg (dec); + + if (fov > MAXDSSFOV) + fov = MAXDSSFOV; + if (fov < MINDSSFOV) + fov = MINDSSFOV; + + /* get desired survey */ + switch (whichSurvey()) { + default: + case DSS_1: survey = "1"; break; + case DSS_2R: survey = "2r"; break; + case DSS_2B: survey = "2b"; break; + } + + /* format and send the request */ + (void) sprintf(buf,"GET http://%s/cgi-bin/dss_search?ra=%.5f&dec=%.5f&equinox=J2000&v=%s&height=%.0f&width=%.0f&format=FITS&compression=%s&version=3 HTTP/1.0\nUser-Agent: xephem/%s\r\n\r\n", + host, ra, dec, survey, fov, fov, + use_gunzip() ? "gz" : "NONE", + PATCHLEVEL); + xe_msg (0, "Command to %s:\n%s", host, buf); + fr_socket = httpGET (host, buf, msg); + if (fr_socket < 0) { + xe_msg (1, "http get: %s", msg); + stopd_down(); + watch_cursor (0); + return; + } + + /* read back the header -- ends with a blank line */ + sawfits = 0; + while (recvline (fr_socket, buf, sizeof(buf)) > 1) { + xe_msg (0, "Rcv: %s", buf); + if (chk4str ("image/x-fits", buf) == 0) + sawfits = 1; + } + + /* if do not see a fits file, show what we do find */ + if (!sawfits) { + xe_msg (0, " "); + xe_msg (1, "Message from server in File -> System log"); + xe_msg (0, "------------------"); + while (recvline (fr_socket, buf, sizeof(buf)) > 0) + xe_msg (0, "%s", buf); + xe_msg (0, "------------------"); + xe_msg (0, "End of Message from server"); + msg_manage(); + watch_cursor (0); + close (fr_socket); + stopd_down(); + return; + } + + + /* possibly connect via gunzip -- weird if have gunzip but can't */ + if (use_gunzip()) { + gzpid = setup_gunzip_pipe(fr_socket); + if (gzpid < 0) { + watch_cursor (0); + close (fr_socket); + stopd_down(); + return; + } + } else + gzpid = -1; + + /* read the FITS header portion */ + if (readFITSHeader (fr_socket, fip, buf) < 0) { + watch_cursor (0); + xe_msg (1, "%s", buf); + resetFImage (fip); + close (fr_socket); + if (gzpid > 0) + kill (gzpid, SIGTERM); + stopd_down(); + return; + } + + /* ok, start reading the pixels and give user a way to abort */ + pm_up(); /* for your viewing pleasure */ + read_iid = XtAppAddInput (xe_app, fr_socket, (XtPointer)XtInputReadMask, + fits_read_icb, (XtPointer)fip); + read_to = XtAppAddTimeOut (xe_app, FCPP, fits_read_to, (XtPointer)(fip)); +} + +/* called whenever there is more data available on the sockfd. + * client is *FImage being accumulated. + */ +static void +fits_read_icb (client, fd, id) +XtPointer client; +int *fd; +XtInputId *id; +{ + FImage *fip = (FImage *)client; + int sockfd = *fd; + double ra, dec; + char buf[1024]; + + /* read another chunk */ + if (readIncFITS (sockfd, fip, buf) < 0) { + xe_msg (1, "%s", buf); + fits_read_abort (fip); + return; + } + + /* report progress */ + pm_set (fip->nbytes * 100 / fip->totbytes); + XmUpdateDisplay (toplevel_w); + + /* keep going if expecting more */ + if (fip->nbytes < fip->totbytes) + return; + + /* finished reading */ + stopd_down(); + pm_down(); + close (sockfd); + XtRemoveInput (read_iid); + read_iid = (XtInputId)0; + XtRemoveTimeOut (read_to); + read_to = (XtIntervalId)0; + + /* YES! */ + + /* give it a name */ + + if (xy2RADec (fip, fip->sw/2.0, fip->sh/2.0, &ra, &dec) < 0) { + /* no headers! use time I guess */ + struct tm *tp; + time_t t0; + + time (&t0); + tp = gmtime (&t0); + if (!tp) + localtime (&t0); + + sprintf (buf, "%04d%02d%02dT%02d%02d%02d.fts", + tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday, tp->tm_hour, + tp->tm_min, tp->tm_sec); + } else { + int dneg, rh, rm, dd, dm; + ra = radhr(ra); + dec = raddeg(dec); + if ((dneg = (dec < 0))) + dec = -dec; + rh = (int)floor(ra); + rm = (int)floor((ra - rh)*60.0 + 0.5); + if (rm == 60) { + if (++rh == 24) + rh = 0; + rm = 0; + } + dd = (int)floor(dec); + dm = (int)floor((dec - dd)*60.0 + 0.5); + if (dm == 60) { + dd++; + dm = 0; + } + (void) sprintf (buf, "%02d%02d%c%02d%02d.fts", rh, rm, + dneg ? '-' : '+', dd, dm); + + } + + /* commit and display */ + + sf_newFITS (fip, buf, 1); /* N.B. copies fip .. do not resetFImage */ + watch_cursor (0); +} + +/* called to poll cancelling FITS file download + * client is *FImage being accumulated. + */ +static void +fits_read_to (XtPointer client, XtIntervalId *id) +{ + FImage *fip = (FImage *)client; + + if (stopd_check() < 0) { + fits_read_abort (fip); + } else { + read_to = XtAppAddTimeOut (xe_app, FCPP, fits_read_to, (XtPointer)(fip)); + } +} + +static void +fits_read_abort (FImage *fip) +{ + resetFImage (fip); + close (fr_socket); + XtRemoveInput (read_iid); + read_iid = (XtInputId)0; + XtRemoveTimeOut (read_to); + read_to = (XtIntervalId)0; + stopd_down(); + pm_down(); + watch_cursor (0); +} + +/* poke around in the headers and try to find the mjd of the observation. + * return 0 if think we found something, else -1 + */ +static int +fitsObs(mjdp) +double *mjdp; +{ + FImage *fip = si_getFImage(); + char buf[128]; + double x; + + if (!fip) + return (-1); + + if (getRealFITS (fip, "JD", &x) == 0) { + *mjdp = x - MJD0; + return (0); + } + + if (getRealFITS (fip, "EPOCH", &x) == 0) { + year_mjd (x, mjdp); + return (0); + } + + if (getStringFITS (fip, "DATE-OBS", buf) == 0) { + /* try ISO 8601 then a few guesses */ + int a, b, c, d, e, f; + if (sscanf (buf, "%d-%d-%dT%d:%d:%d", &a, &b, &c, &d, &e, &f) == 6){ + double day = c + (d + ((e + f/60.0)/60.0))/24.0; + cal_mjd (b, day, a, mjdp); + return (0); + } + if (sscanf (buf, "%d%*[/-]%d%*[/-]%d", &a, &b, &c) == 3) { + if (a > 1900) { + /* yyyy-mm-dd? */ + cal_mjd (b, (double)c, a, mjdp); + return (0); + } else if (a <= 12 && b <= 31 && c < 100) { + /* mm-dd-yy? */ + c += (c < 50 ? 2000 : 1900); + cal_mjd (a, (double)b, c, mjdp); + return (0); + } + } + } + + return (-1); +} + +/* get and display the time of observation from the current FITS image */ +static void +sf_setObsDate() +{ + double objsmjd; + + if (fitsObs(&objsmjd) == 0) { + int mm, yy, d, h, m, s; + double dd, dh, dm, ds; + char buf[128]; + + mjd_cal (objsmjd, &mm, &dd, &yy); + d = (int)dd; + dh = (dd - d)*24.; + h = (int)dh; + dm = (dh - h)*60.; + m = (int)dm; + ds = (dm - m)*60.; + if (ds > 59.5) { + s = 0; + if (++m == 60) { + m = 0; + h += 1; /* TODO: roll date if hits 24 */ + } + } else + s = (int)ds; + + sprintf (buf, "%d-%d-%d %02d:%02d:%02d", yy, mm, d, h, m, s); + set_xmstring (obsdate_w, XmNlabelString, buf); + XtSetSensitive (setobsdate_w, True); + } else { + set_xmstring (obsdate_w, XmNlabelString, " "); + XtSetSensitive (setobsdate_w, False); + } +} + +/* turn on or off file watching. + */ +static void +fw_on (whether) +int whether; +{ + /* turn everything off */ + if (fw_tid) { + XtRemoveTimeOut (fw_tid); + fw_tid = 0; + } + if (fw_iid) { + close (fw_fd); + XtRemoveInput (fw_iid); + fw_iid = 0; + } + + /* then maybe restart */ + if (whether) { + char *txt, wfn[1024]; + + /* clean scrubbed file name to watch */ + txt = XmTextFieldGetString (fwfn_w); + strcpy (wfn, expand_home(txt)); + XtFree (txt); + + /* start timer or input depending on whether fifo */ + if (fw_isFifo(wfn)) { + fw_fd = open (wfn, O_RDWR); + if (fw_fd < 0) { + char msg[1024]; + sprintf (msg, "%s: %s", wfn, syserrstr()); + XmToggleButtonSetState (fw_w, False, False); + } else { + fw_iid = XtAppAddInput (xe_app, fw_fd, + (XtPointer)XtInputReadMask, fw_icb, NULL); + } + } else { + fw_tid = XtAppAddTimeOut (xe_app, 0, fw_to, 0); + } + } +} + +/* called periodically to check whether file in fwfn_w names a FITS file + * to load. when it does, load the named file and delete the watch file + * as a simple form of ACK. + */ +static void +fw_to (client, id) +XtPointer client; +XtIntervalId *id; +{ + char wfn[512], ffn[512]; + char *txt, *nl; + int wfd, nr; + + /* try to open watch file */ + txt = XmTextFieldGetString (fwfn_w); + strcpy (wfn, expand_home(txt)); + XtFree (txt); + wfd = open (wfn, O_RDONLY|O_NONBLOCK); + if (wfd < 0) + goto again; + + /* read it to get name of FITS file */ + nr = read (wfd, ffn, sizeof(ffn)); + close (wfd); + if (nr <= 0) + goto again; + ffn[nr] = '\0'; + nl = strchr (ffn, '\n'); + if (nl) + *nl = '\0'; + strcpy (ffn, expand_home(ffn)); + + /* display and remove */ + sv_manage(); + sf_readFile (ffn); + remove (wfn); + + again: + + fw_tid = XtAppAddTimeOut (xe_app, FWDT, fw_to, 0); +} + +/* called whenever the FITS filename fifo might have something to read. + */ +static void +fw_icb (client, fdp, id) +XtPointer client; +int *fdp; +XtInputId *id; +{ + char *nl, ffn[1024]; + int nr; + + nr = read (fw_fd, ffn, sizeof(ffn)); + if (nr <= 0) { + if (nr < 0) + sprintf (ffn, "FITS Watch fifo: %s", syserrstr()); + else + sprintf (ffn, "EOF from Watch fifo."); + strcat (ffn, "\nTurning FITS Watching off"); + xe_msg (1, ffn); + XmToggleButtonSetState (fw_w, False, True); /* let it clean up */ + } + + ffn[nr] = '\0'; + nl = strchr (ffn, '\n'); + if (nl) + *nl = '\0'; + strcpy (ffn, expand_home(ffn)); + + /* display */ + sv_manage(); + sf_readFile (ffn); +} + +/* return whether fn claims to be a fifo */ +static int +fw_isFifo (fn) +char *fn; +{ + struct stat st; + return (!stat (fn, &st) && (st.st_mode & S_IFIFO)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyfits.c,v $ $Date: 2010/10/23 02:59:13 $ $Revision: 1.66 $ $Name: $"}; diff --git a/GUI/xephem/skyhist.c b/GUI/xephem/skyhist.c new file mode 100644 index 0000000..3382248 --- /dev/null +++ b/GUI/xephem/skyhist.c @@ -0,0 +1,918 @@ +/* handle the history feature of skyview */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +extern char skycategory[]; + +static char skyhfn[]= "xephem_skyhist"; /* file name to store history */ +#define VERSIONN 5 /* version number */ + +/* info to manage any number of history entries and their controls. + * we destroy and recreate all the entries in the Dialog each time the + * history changes, but we keep reusing the PBs in the Pulldown menu. + */ +typedef struct { + SvHistory h; /* history */ + char *ulbl; /* malloced user label */ + Widget ltf_w; /* TF widget showing ulbl */ +} SVHEntry; +static SVHEntry *hist; /* malloced list of SVHEntry */ +static int nhist; /* number of entries in nhist[] */ +static Widget *pdpb_w; /* malloced list of PBs for pulldown */ +static int npdpb; /* number in pdpb_w[] */ + +static Widget svhshell_w; /* main form shell */ +static Widget pd_w; /* pulldown menu */ +static Widget sw_w; /* list scrolled window */ + +static int autonum; /* for building a unique def ulbl */ + +static void svh_manage_cb (Widget w, XtPointer client, XtPointer call); +static void svh_add_cb (Widget w, XtPointer client, XtPointer call); +static void svh_del_cb (Widget w, XtPointer client, XtPointer call); +static void svh_rep_cb (Widget w, XtPointer client, XtPointer call); +static void svh_go_cb (Widget w, XtPointer client, XtPointer call); +static void svh_up_cb (Widget w, XtPointer client, XtPointer call); +static void svh_down_cb (Widget w, XtPointer client, XtPointer call); +static void svh_cascading_cb (Widget w, XtPointer client, XtPointer call); +static void svh_save_cb (Widget w, XtPointer client, XtPointer call); +static void svh_load_cb (Widget w, XtPointer client, XtPointer call); +static void svh_ltfc_cb (Widget w, XtPointer client, XtPointer call); +static void svh_help_cb (Widget w, XtPointer client, XtPointer call); +static void svh_close_cb (Widget w, XtPointer client, XtPointer call); +static void show_entries (void); +static void setup_1row (Widget rc_w, int i); +static void setup_label (Widget lbl_w, SvHistory *hp); +static FILE *openhist (char *buf, char *how); +static int loadhist (FILE *histfp, char *fn, char msg[]); + +/* create the History pulldown off the given menubar; + * and create the history control dialog; + * and Apply the first history entry, if any. + */ +void +svh_create (Widget mb_w) +{ + Widget w; + Arg args[20]; + FILE *hfp; + char buf[1024]; + char fn[1024]; + Widget svhform_w; + int n; + + /* create the pulldown menu */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + w = XmCreateCascadeButton (mb_w, "History", args, n); + XtAddCallback (w, XmNcascadingCallback, svh_cascading_cb, 0); + wtip (w, "Manage a collection of Sky View settings"); + XtManageChild (w); + + /* add the "Edit" PB */ + + n = 0; + w = XmCreatePushButton (pd_w, "WPB", args, n); + XtAddCallback (w, XmNactivateCallback, svh_manage_cb, NULL); + wtip(w,"Open a window to manage the History list"); + set_xmstring (w, XmNlabelString, "Edit..."); + XtManageChild (w); + + /* add a separator to set off the list of entries */ + + n = 0; + w = XmCreateSeparator (pd_w, "HSep", args, n); + XtManageChild (w); + + /* remaining PBs are added as needed when cascading */ + + /* create the History shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "Sky history"); n++; + XtSetArg (args[n], XmNiconName, "Sky"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + svhshell_w = XtCreatePopupShell ("SkyHist", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (svhshell_w); + set_something (svhshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (svhshell_w, "XEphem*SkyHist.width", skycategory, 0); + sr_reg (svhshell_w, "XEphem*SkyHist.height", skycategory, 0); + sr_reg (svhshell_w, "XEphem*SkyHist.x", skycategory, 0); + sr_reg (svhshell_w, "XEphem*SkyHist.y", skycategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNfractionBase, 30); n++; + svhform_w = XmCreateForm (svhshell_w, "SVHForm", args, n); + XtAddCallback (svhform_w, XmNhelpCallback, svh_help_cb, 0); + XtManageChild (svhform_w); + + /* controls attached across the bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + w = XmCreatePushButton (svhform_w, "Add", args, n); + wtip (w, "Add the current Sky View settings to the History list"); + XtAddCallback (w, XmNactivateCallback, svh_add_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 9); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 11); n++; + w = XmCreatePushButton (svhform_w, "Save", args, n); + (void) sprintf (buf, "Save the History list to %s/%s", getPrivateDir(), + skyhfn); + wtip (w, XtNewString(buf)); /* must be permanent memory */ + XtAddCallback (w, XmNactivateCallback, svh_save_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 14); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 16); n++; + w = XmCreatePushButton (svhform_w, "Load", args, n); + (void) sprintf(buf,"Load the History list from %s/%s else %s/auxil/%s", + getPrivateDir(), skyhfn, getShareDir(), skyhfn); + wtip (w, XtNewString(buf)); /* must be permanent memory */ + XtAddCallback (w, XmNactivateCallback, svh_load_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 19); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 21); n++; + w = XmCreatePushButton (svhform_w, "Close", args, n); + wtip (w, "Close this window"); + XtAddCallback (w, XmNactivateCallback, svh_close_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 24); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 26); n++; + w = XmCreatePushButton (svhform_w, "Help", args, n); + wtip (w, "Get more info about this window."); + XtAddCallback (w, XmNactivateCallback, svh_help_cb, 0); + XtManageChild (w); + + /* SW for RC of entries stretches between top and row of controls */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + sw_w = XmCreateScrolledWindow (svhform_w, "SW", args, n); + XtManageChild (sw_w); + + /* add a dummy RC just so it can be replaced when add entries */ + + n = 0; + w = XmCreateRowColumn (sw_w, "Dummy", args, n); + XtManageChild (w); + + /* init from history file if opens ok */ + hfp = openhist(fn, "r"); + if (hfp) { + char buf[1024]; + if (loadhist (hfp, fn, buf) < 0) { + xe_msg (1, "%s", buf); + } else { + show_entries(); + xe_msg (0, "%s", buf); /* just log */ + } + fclose (hfp); + } +} + +/* called to put up or remove the watch cursor. */ +void +svh_cursor (c) +Cursor c; +{ + Window win; + + if (svhshell_w && (win = XtWindow(svhshell_w)) != 0) { + Display *dsp = XtDisplay(svhshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* close the History control dialog, if any */ +void +svh_unmanage() +{ + if (svhshell_w) + XtPopdown (svhshell_w); +} + +/* get current settings and assign to next position */ +void +svh_add_current() +{ + char buf[32]; + + hist = (SVHEntry *) XtRealloc ((char*)hist, (nhist+1)*sizeof(SVHEntry)); + zero_mem ((void *)(&hist[nhist]), sizeof(hist[0])); + svh_get (&hist[nhist].h); + (void) sprintf (buf, "New entry %d", ++autonum); + hist[nhist].ulbl = XtNewString (buf); + nhist++; + show_entries (); +} + +/* return the current number of history entries */ +int +svh_nhist() +{ + return (nhist); +} + +/* display each of the nhist SvHistory entries in the dialog. */ +static void +show_entries() +{ + Widget ww; + Arg args[20]; + int i, n; + + /* replace workWindow with a fresh RC */ + get_something (sw_w, XmNworkWindow, (XtArgVal)&ww); + XtDestroyWidget (ww); /* destroys all the ltf_w too */ + n = 0; + XtSetArg (args[n], XmNspacing, 0); n++; + ww = XmCreateRowColumn (sw_w, "CatRC", args, n); + set_something (sw_w, XmNworkWindow, (XtArgVal)ww); + + /* fill with info */ + for (i = 0; i < nhist; i++) + setup_1row (ww, i); + + /* ok */ + XtManageChild (ww); +} + +/* using info from hist[i] create its row in the history window */ +static void +setup_1row (rc_w, i) +Widget rc_w; +int i; +{ + Widget f_w, del_w, rep_w, go_w, up_w, down_w, lbl_w, tf_w; + Arg args[20]; + int n; + + /* create the row's form */ + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + f_w = XmCreateForm (rc_w, "HF", args, n); + XtManageChild (f_w); + + /* PB to Apply */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 2); n++; + go_w = XmCreatePushButton (f_w, "Apply", args, n); + XtAddCallback (go_w, XmNactivateCallback, svh_go_cb, (XtPointer)(long int)i); + wtip (go_w, "Put this History entry into effect"); + XtManageChild (go_w); + + /* PB to move up in list */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, go_w); n++; + XtSetArg (args[n], XmNarrowDirection, XmARROW_UP); n++; + up_w = XmCreateArrowButton (f_w, "Up", args, n); + XtAddCallback (up_w, XmNactivateCallback, svh_up_cb, (XtPointer)(long int)i); + wtip (up_w, "Move this History entry up one row in the list"); + if (i == 0) + XtSetSensitive (up_w, False); + XtManageChild (up_w); + + /* PB to move down in list */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, up_w); n++; + XtSetArg (args[n], XmNarrowDirection, XmARROW_DOWN); n++; + down_w = XmCreateArrowButton (f_w, "Down", args, n); + XtAddCallback (down_w, XmNactivateCallback, svh_down_cb, (XtPointer)(long int)i); + wtip (down_w, "Move this History entry down one row in the list"); + if (i == nhist-1) + XtSetSensitive (down_w, False); + XtManageChild (down_w); + + /* PB to delete */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, down_w); n++; + del_w = XmCreatePushButton (f_w, "Delete", args, n); + XtAddCallback (del_w, XmNactivateCallback, svh_del_cb, (XtPointer)(long int)i); + wtip (del_w, "Delete this History entry"); + XtManageChild (del_w); + + /* PB to replace */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, del_w); n++; + rep_w = XmCreatePushButton (f_w, "Replace", args, n); + XtAddCallback (rep_w, XmNactivateCallback, svh_rep_cb, (XtPointer)(long int)i); + wtip (rep_w, "Replace this History entry with current settings"); + XtManageChild (rep_w); + + /* label for info */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rep_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + lbl_w = XmCreateLabel (f_w, "TL", args, n); + setup_label (lbl_w, &hist[i].h); + XtManageChild (lbl_w); + + /* TF for label */ + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, lbl_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 100); n++; + XtSetArg (args[n], XmNvalue, hist[i].ulbl); n++; + tf_w = XmCreateTextField (f_w, "Label", args, n); + XtAddCallback (tf_w, XmNvalueChangedCallback, svh_ltfc_cb,(XtPointer)(long int)i); + wtip (tf_w, "Your label for this entry"); + XtManageChild (tf_w); + hist[i].ltf_w = tf_w; + XmTextFieldSetString (tf_w, hist[i].ulbl); +} + +/* called just as the pulldown menu is cascading */ +/* ARGSUSED */ +static void +svh_cascading_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i; + + /* assign a PB to each hist[], creating as necessary */ + for (i = 0; i < nhist; i++) { + Widget pb; + + if (i >= npdpb) { + Arg args[20]; + int n; + + n = 0; + pb = XmCreatePushButton (pd_w, "HPB", args, n); + XtAddCallback (pb,XmNactivateCallback, svh_go_cb, (XtPointer)(long int)i); + wtip (pb, "Apply this History entry"); + pdpb_w = (Widget *) XtRealloc ((char *)pdpb_w, + ++npdpb*sizeof(Widget)); + pdpb_w[i] = pb; + } else + pb = pdpb_w[i]; + + set_xmstring (pb, XmNlabelString, hist[i].ulbl); + XtManageChild (pb); + } + + /* unmanage any excess pulldown buttons */ + while (i < npdpb) + XtUnmanageChild (pdpb_w[i++]); +} + +/* callback each time a char is typed in a ltf_w. + * client is index into hist[] + */ +/* ARGSUSED */ +static void +svh_ltfc_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i = (long int)client; + + XtFree(hist[i].ulbl); + hist[i].ulbl = XmTextFieldGetString (hist[i].ltf_w); +} + +/* callback from the overall Help button. + */ +/* ARGSUSED */ +static void +svh_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"Collects and Installs collections of Sky View settings", +}; + + hlp_dialog ("SkyView_history", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback from the manage PB in the pulldown + */ +/* ARGSUSED */ +static void +svh_manage_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopup (svhshell_w, XtGrabNone); + set_something (svhshell_w, XmNiconic, (XtArgVal)False); +} + +/* callback from the Close PB */ +/* ARGSUSED */ +static void +svh_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (svhshell_w); +} + +/* called when the Add button is hit in the history window */ +/* ARGSUSED */ +static void +svh_add_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + svh_add_current(); +} + +/* used to delete history entry deli, possibly after confirming */ +static int deli; +static void +del_i() +{ + /* free ulbl */ + XtFree (hist[deli].ulbl); + + /* remove deli from hist */ + memcpy (&hist[deli], &hist[deli+1], (nhist-(deli+1))*sizeof(SVHEntry)); + nhist--; + + /* show list now */ + show_entries(); +} + +/* called when a Delete button is hit in the history window. + * client is index into hist[] + */ +/* ARGSUSED */ +static void +svh_del_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* save index */ + deli = (long int)client; + + /* confirm */ + if (confirm()) { + char buf[1024]; + + (void) sprintf (buf, "Delete \"%s\"?", hist[deli].ulbl); + query (svhshell_w, buf, "Yes -- delete", "No -- keep it", NULL, + del_i, NULL, NULL); + } else + del_i(); +} + +/* used to replace history entry repi, possibly after confirming */ +static int repi; +static void +rep_i() +{ + char *ulbl = hist[repi].ulbl; + + zero_mem ((void *)(&hist[repi]), sizeof(hist[0])); + svh_get (&hist[repi].h); + hist[repi].ulbl = ulbl; + show_entries (); +} + +/* called when a Replace button is hit in the history window. + * client is index into hist[] + */ +/* ARGSUSED */ +static void +svh_rep_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* save index */ + repi = (long int)client; + + /* confirm */ + if (confirm()) { + char buf[1024]; + + (void) sprintf (buf, "Replace \"%s\"?", hist[repi].ulbl); + query (svhshell_w, buf, "Yes -- replace", "No -- keep it", NULL, + rep_i, NULL, NULL); + } else + rep_i(); +} + +/* called when a Go button is hit in the history window. + * client is index into hist[] + */ +/* ARGSUSED */ +static void +svh_go_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i = (long int)client; + svh_goto (&hist[i].h); +} + +/* called when an Up button is hit in the history window. + * client is index into hist[] + */ +/* ARGSUSED */ +static void +svh_up_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i = (long int)client; + SVHEntry tmp; + + /* nothing to do if chose top already */ + if (i == 0) + return; + + /* swap up */ + tmp = hist[i-1]; + hist[i-1] = hist[i]; + hist[i] = tmp; + + /* show list now */ + show_entries(); +} + +/* called when a Down button is hit in the history window. + * client is index into hist[] + */ +/* ARGSUSED */ +static void +svh_down_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int i = (long int)client; + SVHEntry tmp; + + /* nothing to do if chose end already */ + if (i >= nhist-1) + return; + + /* swap down */ + tmp = hist[i+1]; + hist[i+1] = hist[i]; + hist[i] = tmp; + + /* show list now */ + show_entries(); +} + +/* setup the label lbl_w from the given SvHistory */ +static void +setup_label (lbl_w, hp) +Widget lbl_w; +SvHistory *hp; +{ + char *projstr = hp->cyl_proj ? "Cyl" : "Sph"; + char str1[32], str2[32]; + char adstr[32]; + char fovstr[32]; + char buf[128]; + + fs_sexa (fovstr, raddeg(hp->fov), 3, 60); + + if (hp->aa_mode) { + fs_sexa (str1, raddeg(hp->altdec), 3, 60); + fs_sexa (str2, raddeg(hp->azra), 3, 60); + strcpy (adstr, "Alt/Az"); + } else { + fs_sexa (str1, radhr(hp->azra), 3, 60); + fs_sexa (str2, raddeg(hp->altdec), 3, 60); + strcpy (adstr, "RA/Dec"); + } + + (void) sprintf (buf,"%s %s %s %s %s", projstr, adstr, str1,str2,fovstr); + set_xmstring (lbl_w, XmNlabelString, buf); +} + +/* called when the Save button is hit */ +/* ARGSUSED */ +static void +svh_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + FILE *histfp; + SvHistory *hp; + int i, j; + char fn[1024]; + + histfp = openhist(fn, "w"); + if (!histfp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return; + } + + fprintf(histfp, "# skyview history file\n"); + fprintf(histfp, "Version %d\n", VERSIONN); + for (i = 0; i < nhist; i++) { + hp = &hist[i].h; + fprintf(histfp, ":%d\n", i); + fprintf(histfp, "%s\n", hist[i].ulbl); + fprintf(histfp, "%g %g %g %d %d %d %d %d %d %d %d\n", + hp->fov, hp->azra, hp->altdec, + hp->stmag, hp->ssmag, hp->dsmag, hp->magstp, + hp->grid, hp->autogrid, hp->aagrid, hp->gridlbl); + fprintf(histfp, "%*s\n", GRIDLEN, hp->vgrid); + fprintf(histfp, "%*s\n", GRIDLEN, hp->hgrid); + fprintf(histfp, + "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", + hp->winw, hp->winh, hp->cyl_proj, hp->aa_mode, + hp->flip_lr, hp->flip_tb, + hp->justd, hp->eclip, hp->galac, hp->eq, + hp->hznmap, hp->conf, hp->conb, hp->conn, hp->cona, + hp->eyep, hp->magscale, hp->automag, + hp->lbl_lst, hp->lbl_lfs, hp->lbl_lss, hp->lbl_lds, + hp->lbl_bst, hp->lbl_bfs, hp->lbl_bss, hp->lbl_bds, + hp->conr, hp->hznclipping); + for (j=0; j < (int)NOBJTYPES; j++) + fprintf(histfp, "%c", hp->type_table[j]?'1':'0'); + fprintf(histfp, "\n"); + for (j=0; j < (int)NCLASSES; j++) + fprintf(histfp, "%c", hp->fclass_table[j]?'1':'0'); + fprintf(histfp, "\n"); + } + fprintf(histfp, "# end\n"); + (void)fclose(histfp); + + if (confirm()) + xe_msg (1, "%s saved", fn); +} + +/* called when the Load button is hit in the history pulldown */ +/* ARGSUSED */ +static void +svh_load_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char fn[1024]; + char buf[1024]; + FILE *hfp; + + hfp = openhist(fn, "r"); + if (hfp) { + if (loadhist(hfp, fn, buf) < 0) + xe_msg (1, "%s", buf); + else + show_entries(); + fclose (hfp); + } else { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + } +} + +/* load the history file named fn[] already open on histfp. + * return 0 if ok, -1 if trouble. + * some sort of message is also always in msg[]. + */ +static int +loadhist (histfp, fn, msg) +FILE *histfp; +char *fn; +char *msg; +{ + char buf[1024]; + char *ulbl; + SvHistory hp; + int i, j, n; + int v; + + /* first look for Version */ + while (fgets(buf, sizeof(buf), histfp)) + if (buf[0] != '#' && buf[0] != '\n') + break; + if (sscanf(buf, "Version %d", &v) != 1) { + sprintf (msg, "%s:\nNo Version line:\n%s\n", fn, buf); + goto err; + } else if (!(v <= VERSIONN && v >= VERSIONN-2)) { + sprintf (msg, "%s:\nWrong version, must be %d.", fn, VERSIONN); + goto err; + } + + /* now loop over each group of lines defining one History entry */ + nhist = 0; + ulbl = 0; + while (fgets(buf, sizeof(buf), histfp)) { + if (buf[0] == '#' || buf[0] == '\n') + continue; /* initial comment */ + + if (sscanf(buf, ":%d", &i) != 1) { + sprintf (msg, "%s:\nBogus \":\" line:\n%s", fn, buf); + goto err; + } + + if (!fgets (buf, sizeof(buf), histfp)) + goto err; + buf[strlen(buf)-1] = '\0'; /* no \n */ + ulbl = XtNewString (buf); /* malloced copy */ + + if (!fgets(buf, sizeof(buf), histfp)) + goto err; + if (sscanf(buf, "%lg %lg %lg %d %d %d %d %d %d %d %d", + &hp.fov, &hp.azra, &hp.altdec, + &hp.stmag, &hp.ssmag, &hp.dsmag, &hp.magstp, + &hp.grid, &hp.autogrid, &hp.aagrid, &hp.gridlbl)!=11) { + sprintf (msg, "%s:\nBogus fov .. \n%s", fn, buf); + goto err; + } + + if (!fgets(buf, sizeof(buf), histfp)) + goto err; + (void) sprintf (hp.vgrid, "%*.*s", GRIDLEN, GRIDLEN, buf); + + if (!fgets(buf, sizeof(buf), histfp)) + goto err; + (void) sprintf (hp.hgrid, "%*.*s", GRIDLEN, GRIDLEN, buf); + + if (!fgets(buf, sizeof(buf), histfp)) + goto err; + n = sscanf(buf, + "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", + &hp.winw, &hp.winh, &hp.cyl_proj, &hp.aa_mode, + &hp.flip_lr, &hp.flip_tb, + &hp.justd, &hp.eclip, &hp.galac, &hp.eq, + &hp.hznmap, &hp.conf, &hp.conb, &hp.conn, &hp.cona, + &hp.eyep, &hp.magscale, &hp.automag, + &hp.lbl_lst, &hp.lbl_lfs, &hp.lbl_lss, &hp.lbl_lds, + &hp.lbl_bst, &hp.lbl_bfs, &hp.lbl_bss, &hp.lbl_bds, + &hp.conr, &hp.hznclipping ); + if (v == 4 && n == 27) { + hp.hznclipping = 1; + } else if (v == 3 && n == 24) { + hp.lbl_bds = hp.lbl_bfs; + hp.lbl_bss = hp.lbl_bst; + hp.lbl_bst = hp.lbl_lds; + hp.lbl_lds = hp.lbl_lss; + hp.lbl_lss = hp.lbl_lfs; + + hp.lbl_bss = 10; + hp.lbl_bds = 10; + hp.conr = 0; + hp.hznclipping = 1; + } else if (!(v == VERSIONN && n == 28)) { + sprintf (msg, "%s:\nBogus switches line .. \n%s", fn, buf); + goto err; + } + + if (!fgets(buf, sizeof(buf), histfp)) + goto err; + for (j = 0; j < sizeof(hp.type_table); j++) { + switch (buf[j]) { + case '0': hp.type_table[j] = 0; break; + case '1': hp.type_table[j] = 1; break; + default: goto err; + } + } + + if (!fgets(buf, sizeof(buf), histfp)) + goto err; + for (j = 0; j < sizeof(hp.fclass_table); j++) { + switch (buf[j]) { + case '0': hp.fclass_table[j] = 0; break; + case '1': hp.fclass_table[j] = 1; break; + default: goto err; + } + } + + /* got one! */ + hist = (SVHEntry *) XtRealloc ((char *)hist, + (nhist+1)*sizeof(SVHEntry)); + memcpy(&hist[nhist].h, &hp, sizeof(hp)); + hist[nhist].ulbl = ulbl; + nhist++; + } + + sprintf (msg, "%s:\nLoaded %d skyhistory entries.", fn, nhist); + return (0); + + err: + /* overwrite err if something more basic is wrong */ + if (ferror(histfp)) + sprintf (msg, "%s:\n%s", fn, syserrstr()); + else if (feof(histfp)) + sprintf (msg, "%s:\nUnexpected EOF\n", fn); + + for (i = 0; i < nhist; i++) + XtFree (hist[i].ulbl); + nhist = 0; + return (-1); +} + +/* fill fn with full history file name and try to open. + * if opening for write try to create in PrivateDir. + */ +static FILE * +openhist(fn, how) +char *fn; +char *how; +{ + FILE *fp; + + /* first try local copy, r or w */ + (void) sprintf (fn, "%s/%s", getPrivateDir(), skyhfn); + fp = fopenh (fn, how); + + /* if fails try global copy if for r */ + if (!fp && how[0] == 'r') { + (void) sprintf (fn, "%s/auxil/%s", getShareDir(), skyhfn); + fp = fopenh (fn, how); + } + + return (fp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyhist.c,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.40 $ $Name: $"}; diff --git a/GUI/xephem/skyhist.h b/GUI/xephem/skyhist.h new file mode 100644 index 0000000..0a22802 --- /dev/null +++ b/GUI/xephem/skyhist.h @@ -0,0 +1,59 @@ +#ifndef _SKYHIST_H +#define _SKYHIST_H + +/* glue to hook skyviewmenu.c and skyhist.c together. + */ + + +/* history record */ +#define GRIDLEN 9 /* useable chars in grid size TF */ +typedef struct { + double fov; /* sv_fov value */ + double azra; /* sv_azra value */ + double altdec; /* sv_altdec value */ + int winw, winh; /* window width/height */ + + int stmag, ssmag, dsmag; /* star, solsys and deep sky limiting mag */ + int magstp; /* magnitude step size */ + + int grid; /* grid option */ + int autogrid; /* auto grid option */ + int aagrid; /* alt-az grid option */ + int gridlbl; /* grid labels option */ + char vgrid[GRIDLEN+1]; /* vertical grid size text */ + char hgrid[GRIDLEN+1]; /* vertical grid size text */ + + int aa_mode; /* aa_mode value */ + int cyl_proj; /* cyl_proj value */ + int flip_lr, flip_tb; /* flip values */ + int justd; /* justdots option */ + int eclip, galac, eq; /* ecliptic, galactic and equator options */ + int hznmap; /* horizon map */ + int hznclipping; /* horizon clipping option */ + int conn; /* constellatin name opt */ + int conf, conr; /* constellatin figures opts */ + int conb, cona; /* constellatin boundaries, abbrev opts */ + int eyep; /* eyepiece option */ + int magscale; /* mag scale option */ + int automag; /* auto mag option */ + + int lbl_lst, lbl_lfs, lbl_lss, lbl_lds; /* name/mags label flags */ + int lbl_bst, lbl_bfs, lbl_bss, lbl_bds; /* N brightest */ + + char type_table[NOBJTYPES]; /* copy of skyfilt's type table */ + char fclass_table[NCLASSES];/* copy of skyfilt's fclass table */ +} SvHistory; + +extern void svh_goto (SvHistory *hp); +extern void svh_get (SvHistory *hp); +extern void svh_create (Widget mb_w); +extern void svh_unmanage(void); +extern void svh_add_current(void); +extern int svh_nhist(void); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: skyhist.h,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.13 $ $Name: $ + */ + +#endif /* _SKYHIST_H */ diff --git a/GUI/xephem/skyip.c b/GUI/xephem/skyip.c new file mode 100644 index 0000000..8e2393e --- /dev/null +++ b/GUI/xephem/skyip.c @@ -0,0 +1,3619 @@ +/* code to control image processing operations. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "xephem.h" +#include "fsmatch.h" + +void si_off (void); + +static Pixel gray_pixel (int fp); +static Widget addPB (Widget rc_w, char *label, int align); +static Widget addTF (Widget rc_w, char *name, int rw); +static void addLabel (Widget rc_w, char *label, int align); +static void build_colormap (void); +static void build_histo (void); +static void chooseMag (int sw, int sh, int lr, int tb, ZM_Undo *zp, int nz); +static void glassSetup (void); +static void glassSize (void); +static void si_ne (void); +static void si_createdialog (void); +static void si_createwcsdialog (void); +static void sectionCtrl (Widget par_w, char *hlptag, Widget *tb, + char *tbname, char *tblabel, char *tbtip); +static void si_wcsuse_cb (Widget w, XtPointer client, XtPointer call); +static void si_markstars_cb (Widget w, XtPointer client, XtPointer call); +static void si_lohi_cb (Widget w, XtPointer client, XtPointer call); +static void si_wcsgo_cb (Widget w, XtPointer client, XtPointer call); +static void si_wcsclose_cb (Widget w, XtPointer client, XtPointer call); +static void si_close_cb (Widget w, XtPointer client, XtPointer call); +static void si_exp_cb (Widget w, XtPointer client, XtPointer call); +static void si_drawHistogram (void); +static void si_gamma_cb (Widget w, XtPointer client, XtPointer call); +static void si_help_cb (Widget w, XtPointer client, XtPointer call); +static void si_wcshelp_cb (Widget w, XtPointer client, XtPointer call); +static void si_inv_cb (Widget w, XtPointer client, XtPointer call); +static void si_contrast_cb (Widget w, XtPointer client, XtPointer call); +static void si_markrefstar_cb (Widget w, XtPointer client, XtPointer call); +static void si_newrefstar_cb (Widget w, XtPointer client, XtPointer call); +static void si_newref_cb (Widget w, XtPointer client, XtPointer call); +static void si_managetb_cb (Widget w, XtPointer client, XtPointer call); +static void si_newImage (char *name, int autocon); +static void printGlassStats (ImRegion *rp, double cimx, double cimy); +static void printImageStats (char *name); +static void drawSlice (int x0, int y0, int ww, int wh, int x1, int y1, + int lr, int tb); +static void drawGraphGrid (Display *dsp, Window win, int ww, int wh, + double xmin, double max, double ymin, double ymax); +static void drawGlassRow (Widget w, ImRegion *rp, int rx, int rw); +static void drawGlassCol (Widget w, ImRegion *rp, int ry, int rh); +static void defContrast (void); +static void si_wide (void); +static void si_narrow (void); +static void si_full (void); +static void si_duller (void); +static void si_sharper (void); +static void si_brighter (void); +static void si_darker (void); +static void si_mcontrast (void); +static void si_motion_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static void mkGCs (void); +static void wcsMatch (void); +static int initSolverFields (void); +static int glimsz (void); +static void findWholeImageStats (void); +static void matchStats (ObjF *fsp, double *sx, double *sy, int nfs); +static void imPhotom (double ix, double iy); + +static void makeGlassImage (void); +static void fillGlass (int wx, int wy); + +static Widget si_w; /* main imaging tools dialog */ +static Widget wcs_w; /* main wcs dialog */ +static Widget fda_w; /* Drawing area for the contrast map */ +static Widget sda_w; /* Drawing area for slice cross sections */ +static Widget glrda_w; /* Drawing area for glass row plot */ +static Widget glcda_w; /* Drawing area for glass column plot */ +static Widget gamma_w; /* gamma scale */ +static Widget ctb_w; /* TB for contrast section */ +static Widget ptb_w; /* TB for gaussian section */ +static Widget gtb_w; /* TB for glass Stats section */ +static Widget stb_w; /* TB for Slice section */ +static Widget rtb_w; /* TB for ROI section */ +static Widget ostxt_w; /* R/O Text for overall image stats */ +static Widget phtxt_w; /* R/O Text for photometric stats */ +static Widget phmagref_w; /* R/W TF for photometric magnitude reference */ +static Widget glcol_w; /* TB whether to draw vertical cross section */ +static Widget glrow_w; /* TB whether to draw horizontl cross section */ +static Widget lo_w; /* lower contrast setting */ +static Widget hi_w; /* higher contrast setting */ +static Widget rstxt_w; /* Text for ROI stats */ +static Widget burnt_w; /* TF for specifying burned out pix */ +static Widget snr_w; /* TF for specifying star snr */ +static Widget bsep_w; /* TF for best wcs separation */ +static Widget wsep_w; /* TF for worst wcs separation */ +static Widget inv_w; /* TB for reverse vid */ +static Widget slmax_w; /* TB slice auto contrast */ + +typedef enum { + WCS_RA, WCS_DEC, WCS_RSCALE, WCS_USCALE, WCS_ROT, + WCS_N +} WCSFName; /* callback code */ +typedef struct { + WCSFName which; /* field name code to allow for random access */ + char *label; /* field label */ + char *kwtip; /* help tip for keyword TF */ + char *vtip; /* help tip for value TF */ + char *res; /* instance name of TF with FITS fields */ + Widget kw_w; /* FITS keyword TF */ + Widget v_w; /* value TF */ + double v; /* handy value */ +} WCSSeed; +static WCSSeed wcsseed[WCS_N] = { + {WCS_RA, "RA, H:M:S", "FITS field for Center RA", "Center RA", "RA"}, + {WCS_DEC, "Dec, D:M:S", "FITS field for Center Dec","Center Dec","Dec"}, + {WCS_RSCALE, "°/Pixel right", "FITS field for sky step right", + "Sky angle right, degrees per pixel", "StepRight"}, + {WCS_USCALE, "°/Pixel up", "FITS field for sky step up", + "Sky angle up, degrees per pixel", "StepUp"}, + {WCS_ROT, "Rotate °EofN", "FITS field for rotation", "Image rotation", + "Rotation"}, +}; +static int setWCSField (WCSSeed *wsp, char msg[]); +static int getWCSSeed (WCSSeed *wsp, double *vp); + +static FImage fim; /* current FITS image */ +static Pixmap fpm; /* current pixmap with image */ +static int fpmw, fpmh; /* dimensions of fpm */ +static int fimok; /* 1 if fim is ok, else 0 */ +static Pixel *gray; /* gray-scale ramp for drawing image */ +static int ngray; /* number of pixels usable in gray[] */ +static int fdepth; /* depth of image, in bits */ +static int fbpp; /* bits per pixel in image: 1, 8, 16 or 32 */ +static double fmag; /* screen pix / image pix */ +static double fximoff, fyimoff; /* image offsets that put center on screen */ +static int lopix, hipix; /* current LUT lo and hi image pixel values */ +static int *histo; /* malloced histogram of current image */ +static int h_mini, h_maxi; /* histo[] index to first and last pixel used */ +static int h_peaki; /* index of largest value in histo[] */ +static char *colormap; /* malloced gray[] indeces for current image */ +static int want_inv; /* set when want inverse video effect */ +static int nup; /* set if fim has north up */ +static int elf; /* set if fim has east left */ +static ImStats wims; /* handy stats for whole image */ + +static Pixel imbg_p; /* grid background color */ +static Pixel img_p; /* grid color 1 */ +static Pixel imc1_p; /* handy color 1 */ +static Pixel imc2_p; /* handy color 2 */ +static Pixel imc3_p; /* handy color 3 */ +static GC imgc; /* handy GC */ + +#define MMH 10 /* map marker height */ +#define MMW 5 /* map marker half-width */ +#define MONUHI 30 /* height of tallest monument, pixels */ +#define GAM_MAX 3.0 /* gamma ranges from 1/GAM_MAX .. GAM_MAX */ +#define DEFGAMMA 75 /* default gamma (in scale's range) */ +#define NTICKS 5 /* rough number of tick marks in plots */ +#define SINDENT 15 /* main section indent */ +#define FOVMORE 1.1 /* size factor over diagonal for wcs fit */ +#define BORDER 8 /* edge to ignore looking for stars */ + +static XImage *glass_xim; /* glass XImage -- 0 means new or can't */ +static GC glassGC; /* GC for glass border */ +static Widget glstxt_w; /* Text for glass stats */ + +typedef struct { + char *name; /* TB name for resource */ + char *label; /* toggle button label */ + int value; /* numeric value to use when selected */ + Widget w; /* TB widget in radio box */ +} RadioSet; +static RadioSet glmag[] = { + {"1x", " 1x", 1}, + {"2x", " 2x", 2}, + {"4x", " 4x", 4}, + {"8x", " 8x", 8}, +}; +static RadioSet glsz[] = { + {"16x16", " 16", 16}, + {"32x32", " 32", 32}, + {"64x64", " 64", 64}, + {"128x128", "128", 128}, +}; + +static char lopixkw[] = "XELOGLUT"; /* our FITS hw for lopix */ +static char hipixkw[] = "XEHIGLUT"; /* our FITS hw for hipix */ +static char gammakw[] = "XEGAMMA"; /* our FITS hw for gamma */ + + +#define MINGLSZ 3 /* anything smaller causes several grief */ +static int glassmag; /* glass mag factor, any integer > 0 */ +static int glasssz; /* glass edge, screen pixels, int X of mag */ + +static Star newstar; /* current photometric computation */ +static Star refstar; /* photometric reference */ +static int refstarok; /* set when refstar is valid */ +static int newstarok; /* set when newstar is valid */ + +static char skyipcategory[] = "Sky View -- Image tools";/* Save category */ + +/* called to create but not manage the imaging dialog */ +void +si_create() +{ + if (!si_w) { + si_createdialog(); + si_createwcsdialog(); + mkGCs(); + ngray = gray_ramp (XtD, xe_cm, &gray); + fdepth = DefaultDepth (XtD, DefaultScreen(XtD)); + fbpp = (fdepth == 1 || ngray == 2) ? 1 : + (fdepth>=17 ? 32 : (fdepth >= 9 ? 16 : 8)); + glassSetup(); /* insure glassmag/sz set */ + } +} + +/* called to bring up the imaging dialog */ +void +si_manage() +{ + si_create(); + XtManageChild(si_w); +} + +/* called to find whether Imaging window is up */ +int +si_isup() +{ + return (isUp (si_w)); +} + +/* called to unmanage the imaging dialog. + * N.B. do not try to reclaim memory so we can leave FITS watch on while down. + */ +void +si_unmanage() +{ + if (!si_w) + return; + XtUnmanageChild (si_w); +} + +/* return 1 if dialog is up, else 0. + */ +int +si_ismanaged() +{ + return (si_w && XtIsManaged(si_w)); +} + +/* return 1 if there is currently a valid FITS image available, else 0 */ +int +si_ison() +{ + return (fimok); +} + +/* discard any current FITS image */ +void +si_off() +{ + if (fimok) { + resetFImage (&fim); + fimok = 0; + } + if (fpm) { + XFreePixmap (XtD, fpm); + fpm = (Pixmap)0; + } +} + +/* set the object at the given image coords as the new reference object, + * assigned with magnitude mag. + */ +void +si_setPhotomRef (ix, iy, mag) +double ix, iy, mag; +{ + char magstr[32]; + + /* install new ref mag number */ + sprintf (magstr, "%.2f", mag); + XmTextFieldSetString (phmagref_w, magstr); + + /* force new refstar, compute and mark */ + refstarok = 0; + imPhotom (ix, iy); + sv_all(NULL); /* erase */ + sv_drawimdot (ix, iy, 5, 0); +} + +/* called when the Gauss toolbar TB is used. + * N.B. can be called before we are created + */ +void +si_updateGauss (on) +int on; +{ + if (fimok && on) + si_manage(); + else + si_create(); + XmToggleButtonSetState (ptb_w, on, True); +} + +/* called when the Glass toolbar TB is used. + * N.B. can be called before we are created + */ +void +si_updateGlass (on) +int on; +{ + /* always close, open only if window already up */ + si_create(); + if (!on || si_isup()) + XmToggleButtonSetState (gtb_w, on, True); +} + +/* called when the ROI toolbar TB is used. + * N.B. can be called before we are created + */ +void +si_updateROI (on) +int on; +{ + /* always close, open only if window already up */ + si_create(); + if (!on || (si_isup() && si_ison())) + XmToggleButtonSetState (rtb_w, on, True); +} + +/* called when the Contrast toolbar TB is used. + * N.B. can be called before we are created + */ +void +si_updateContrast (on) +int on; +{ + if (fimok && on) + si_manage(); + else + si_create(); + XmToggleButtonSetState (ctb_w, on, True); +} + +/* called when the Slice toolbar TB is used. + * N.B. can be called before we are created + */ +void +si_updateSlice (on) +int on; +{ + if (fimok && on) + si_manage(); + else + si_create(); + XmToggleButtonSetState (stb_w, on, True); +} + +/* called to put up or remove the watch cursor. + * we grab the WCS window while we're at it. + */ +void +si_cursor (c) +Cursor c; +{ + Window win; + + if (si_w && (win = XtWindow(si_w)) != 0) { + Display *dsp = XtDisplay(si_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (wcs_w && (win = XtWindow(wcs_w)) != 0) { + Display *dsp = XtDisplay(wcs_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return pointer to the current FImage. + * if no current FImage, return NULL. + */ +FImage * +si_getFImage () +{ + return (fimok ? &fim : NULL); +} + +/* set the contrast fields in the given FITS header */ +void +si_setContrast (fip) +FImage *fip; +{ + int lpix, hpix; + int gamma; + + /* lo>hi will imply reverse video */ + if (want_inv) { + lpix = hipix; + hpix = lopix; + } else { + lpix = lopix; + hpix = hipix; + } + + setIntFITS (fip, lopixkw, lpix, "XEphem: Pixel at low LUT end"); + setIntFITS (fip, hipixkw, hpix, "XEphem: Pixel at hi LUT end"); + XmScaleGetValue (gamma_w, &gamma); + setRealFITS (fip, gammakw, gamma/100., 4, "XEphem: LUT gamma value"); + sf_showHeader(fip); +} + +/* return the current Pixmap */ +Pixmap +si_getPixmap () +{ + return (fpm); +} + +/* send the current image to the postscript machine */ +void +si_ps () +{ + XPSPixmap (fpm, fpmw, fpmh, xe_cm, 0, 0); +} + +/* build a pixmap, fpm, from the XImage fim with the given size, flipping and + * zoom inf, using the current colormap. + */ +void +si_newPixmap (w, h, lr, tb, zp, nz) +int w, h; /* screen size */ +int lr, tb; /* display's flipping */ +ZM_Undo *zp; /* entire current zoom stack */ +int nz; /* items on zoom stack */ +{ + Display *dsp = XtDisplay (toplevel_w); + Window win = XtWindow (toplevel_w); + GC gc = DefaultGC(dsp, DefaultScreen(dsp)); + CamPix *ip = (CamPix *)fim.image; /* just handy */ + XImage *f_xim; /* XImage: adjusted for flipping and lo/hi */ + char *data; /* pixel data for f_xim */ + int nbytes; /* total bytes in data[] */ + int x, y; /* screen coords */ + int wantmonu; /* whether we want monument mode */ + int dpix; /* h_maxi - h_mini */ + + if (!fimok) + return; + + watch_cursor (1); + + /* create a temp XImage in which to build image for pixmap */ + /* get memory for image pixels */ + nbytes = (h+7)*(w+7)*fbpp/8; + data = (char *) malloc (nbytes); + if (!data) { + xe_msg (1, "Can not get %d bytes for FITS pixels", nbytes); + watch_cursor (0); + return; + } + + /* create the XImage */ + f_xim = XCreateImage (dsp, XDefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ fbpp == 1 ? 1 : fdepth, + /* format */ fbpp == 1 ? XYBitmap : ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ w, + /* height */ h, + /* pad */ fbpp < 8 ? 8 : fbpp, + /* bpl */ 0); + if (!f_xim) { + xe_msg (1, "Can not create shadow XImage"); + free ((void *)data); + watch_cursor (0); + return; + } + f_xim->bitmap_bit_order = LSBFirst; + f_xim->byte_order = LSBFirst; + + /* decide magnification and offsets */ + chooseMag (w, h, lr, tb, zp, nz); + + /* fill image via gray map and allow for flipping, centering, monument. + * use fast/clean nearest-neighbor interpolation. + */ + if (!elf) + lr = !lr; + if (!nup) + tb = !tb; + dpix = h_maxi - h_mini; + wantmonu = svtb_monumentIsOn() && dpix > 0; + for (y = 0; y < h; y++) { + int flipy = tb ? h-y-1 : y; + CamPix *rowp = &ip[fim.sw*((int)(flipy/fmag+fyimoff+.5))]; + for (x = 0; x < w; x++) { + int flipx = lr ? w-x-1 : x; + int p = rowp[(int)(flipx/fmag+fximoff+.5)]; + Pixel xp = gray_pixel (p); + XPutPixel (f_xim, x, y, xp); + if (wantmonu) { + int z, zmax = (int)(MONUHI*fmag*(p-h_mini)/dpix); + for (z = 1; z < zmax && z <= y; z++) + XPutPixel (f_xim, x, y-z, xp); + } + } + } + + /* (re)create the pixmap if first or new size */ + if (!fpm || w != fpmw || h != fpmh) { + fpm = XCreatePixmap (dsp, win, w, h, fdepth); + fpmw = w; + fpmh = h; + } + + /* copy the image to the pixmap */ + XPutImage (dsp, fpm, gc, f_xim, 0, 0, 0, 0, w, h); + + /* finished with the image */ + free ((void *)f_xim->data); + f_xim->data = NULL; + XDestroyImage (f_xim); + + watch_cursor (0); +} + +/* install fip as the new fim and display. + * N.B. malloced fields in fip are just re-used, so do not reset it on return. + * name might include leading path, if so we strip off. + * last argument determines whether contrast and WCS are set automatically. + */ +void +si_newfim (fip, name, autocon) +FImage *fip; +char *name; +int autocon; +{ + double eq; + + /* we support 8 bit images by converting them to 16 */ + if (fip->bitpix == 8) { + /* convert to 16 bits. + * thanks to Egil Kvaleberg totbytes * 2; + unsigned char *new_image = (unsigned char *) realloc (fip->image, + new_bytes); + if (!new_image) { + xe_msg (1, "Could not realloc %d for pixels", new_bytes); + resetFImage (fip); + return; + } + + /* convert from BITPIX 8 to BITPIX 16 */ + for (n=fip->totbytes-1; n>=0; --n) + ((unsigned short *)new_image)[n] = 256*new_image[n]; + + /* update FITS header to reflect BITPIX 16 */ + fip->totbytes = new_bytes; + fip->image = (char *) new_image; + fip->bitpix = 16; + setIntFITS (fip, "BITPIX", 16, "Bits per pixel"); + } + + /* EQUINOX is preferred, but we'll accept EPOCH in a pinch */ + if (getRealFITS (fip, "EQUINOX", &eq) < 0) { + if (getRealFITS (fip, "EPOCH", &eq) < 0) { + setRealFITS (fip, "EQUINOX", 2000.0, 10, "Faked"); + } else { + setRealFITS (fip, "EQUINOX", eq, 10, "Copied from EPOCH"); + } + } + + resetFImage (&fim); + (void) memcpy ((void *)&fim, (void *)fip, sizeof(fim)); + fimok = 1; + + si_newImage(name, autocon); +} + +/* convert FITS x/y (well, 0-based "FITS") to X Windows x/y. + * this always assumes you want east-left and north-up + */ +void +si_im2win ( +double imx, double imy, /* FITS image coords */ +int winw, int winh, /* X window w and h */ +int *winxp, int *winyp) /* return X window x and y */ +{ + *winxp = (int)floor(fmag*(imx-fximoff) + .5); + *winyp = (int)floor(fmag*(imy-fyimoff) + .5); + if (!elf) + *winxp = winw - 1 - *winxp; + if (!nup) + *winyp = winh - 1 - *winyp; +} + +/* convert X Windows x/y to FITS x/y (well, 0-based "FITS"). + * this always assumes you want east-left and north-up + */ +void +si_win2im ( +int winx, int winy, /* X window x and y */ +int winw, int winh, /* X window w and h */ +double *imxp, double *imyp) /* return FITS image coords */ +{ + if (!elf) + winx = winw - 1 - winx; + if (!nup) + winy = winh - 1 - winy; + *imxp = winx/fmag+fximoff; + *imyp = winy/fmag+fyimoff; +} + +/* get the given WCS seed value from the GUI. + * return 0 if ok, else fuss with xe_msg and return -1 + */ +static int +getWCSSeed (wsp, vp) +WCSSeed *wsp; +double *vp; +{ + double v; + char *str; + int ok; + + /* read TF */ + str = XmTextFieldGetString (wsp->v_w); + ok = f_scansexa (str, &v); + XtFree (str); + if (ok < 0) { + xe_msg (1, "Missing or ill-formed format for %s", wsp->label); + return (-1); + } + + /* a few special cases */ + switch (wsp->which) { + case WCS_RA: + *vp = hrrad(v); + return(0); + case WCS_RSCALE: /* FALLTHRU */ + case WCS_USCALE: + if (v == 0) { + xe_msg (1, "Missing or 0 for %s", wsp->label); + return (-1); + } + break; + default: + break; + } + *vp = degrad(v); + return (0); +} + +/* set global fmag/fximoff/fyimoff for given window and image portion */ +static void +setMag (ww, wh, imx, imy, imw, imh) +int ww, wh; +double imx, imy, imw, imh; +{ + /* set mag and offsets to display desired portion */ + fmag = wh/imh; + if (fmag*imw < ww) { + /* full width, center in height */ + fmag = ww/imw; + fximoff = imx - 0.5; + fyimoff = imy + (imh - wh/fmag)/2 - 0.5; + } else { + /* full height, center in width */ + fximoff = imx + (imw - ww/fmag)/2 - 0.5; + fyimoff = imy - 0.5; + } +} + + +/* find a magnification and image offsets to center image such that we always + * fill the screen, centering and cropping if necessary. + * in order to establish zoom current context, go through all entries in order. + */ +static void +chooseMag (ww, wh, lr, tb, zp, nz) +int ww, wh; /* window w/h */ +int lr, tb; /* user's notion of what is flipped */ +ZM_Undo *zp; /* zoom info in screen coords, else NULL */ +int nz; /* n zoom entries */ +{ + double imx, imy; /* corner of image to display, im pixels */ + double imw, imh; /* size of image to display, im pixels */ + int fx, fy; /* flipped coords */ + + /* start with no zoom, then work through stack */ + imw = fim.sw; + imh = fim.sh; + imx = 0; + imy = 0; + setMag (ww, wh, imx, imy, imw, imh); + + for (; nz--; zp++) { + /* display cropped portion */ + double ix0, iy0; /* one corner of image */ + double ix1, iy1; /* other corner of image */ + + fx = lr ? ww - 1 - zp->x0 : zp->x0; + fy = tb ? wh - 1 - zp->y0 : zp->y0; + si_win2im (fx, fy, ww, wh, &ix0, &iy0); + fx = lr ? ww - 1 - zp->x1 : zp->x1; + fy = tb ? wh - 1 - zp->y1 : zp->y1; + si_win2im (fx, fy, ww, wh, &ix1, &iy1); + imw = fabs(ix1-ix0); + imh = fabs(iy1-iy0); + imx = ix0 < ix1 ? ix0 : ix1; + imy = iy0 < iy1 ? iy0 : iy1; + setMag (ww, wh, imx, imy, imw, imh); + } +} + +/* compute the histogram for fim and put it in histo[]. + */ +static void +build_histo() +{ + FImage *fip = &fim; + CamPix *ip = (CamPix *)fip->image; + int npix = fip->sw*fip->sh; + int i; + + /* insure memory */ + if (!histo) { + histo = (int *) malloc (MAXCAMPIX * sizeof(histo[0])); + if (!histo) { + printf ("No memory for histogram\n"); + abort(); + } + } + + /* zero the histogram */ + memset ((void *)histo, 0, MAXCAMPIX*sizeof(histo[0])); + + /* compute histogram */ + for (i = 0; i < npix; i++) + histo[(int)(*ip++)]++; + + /* find boundary stats */ + for (h_mini = 0; histo[h_mini] == 0; h_mini++) + continue; + for (h_maxi = MAXCAMPIX; histo[--h_maxi] == 0; ) + continue; + if (h_mini == h_maxi) { + if (h_mini > 0) + h_mini -= 1; + else + h_maxi += 1; + } + h_peaki = 0; + for (i = h_mini; i <= h_maxi; i++) + if (histo[i] > histo[h_peaki]) + h_peaki = i; +} + +/* compute the colormap for fim and put in colormap, allowing for method + * and lo/hi. + * N.B. if we need the histogram, we assume it's already built. + */ +static void +build_colormap() +{ + int range = hipix - lopix; + int g, i; + + /* insure memory */ + if (!colormap) { + colormap = malloc (MAXCAMPIX*sizeof(colormap[0])); + if (!colormap) { + printf ("No memory for colormap\n"); + abort(); + } + } + + /* build ramp for current gamma setting */ + for (i = 0; i < lopix; i++) + colormap[i] = 0; + XmScaleGetValue (gamma_w, &g); + for (; i < hipix; i++) + colormap[i] = (int)(pow((double)(i-lopix)/range, g/100.0)*ngray); + for (; i < MAXCAMPIX; i++) + colormap[i] = ngray-1; +} + +/* given a FITS pixel, return an X pixel */ +static Pixel +gray_pixel (fp) +int fp; +{ + int gp = (int)colormap[fp]; + + if (want_inv) + gp = (ngray-1) - gp; + + return (gray[gp]); + +} + +/* walk gradient to brightest pixel. + * no use using true max because of errors introduced changing from win, to im + * to win to im coords (here and in, say, computing the glass stats). + */ +void +si_findSnap ( +int ww, int wh, /* size of X Window */ +int wx, int wy, /* X window coords of cursor */ +int lr, int tb, /* user's flip settings */ +int *sxp, int *syp) /* snap coords */ +{ + ImRegion imr; + double ix, iy; + int fx, fy; + int bx, by; + + /* null case if no image */ + if (!fimok) { + *sxp = wx; + *syp = wy; + return; + } + + /* find image coord of cursor */ + fx = lr ? ww - 1 - wx : wx; + fy = tb ? wh - 1 - wy : wy; + si_win2im (fx, fy, ww, wh, &ix, &iy); + + /* walk up the hill */ + imr.im = (CamPix *) fim.image; + imr.iw = fim.sw; + imr.ih = fim.sh; + imr.rx = (int)(ix + .5); + imr.ry = (int)(iy + .5); + imr.rw = 1; + imr.rh = 1; + brightWalk (&imr, NULL, &bx, &by); + + /* turn back into X cursor coords */ + si_im2win ((double)bx, (double)by, ww, wh, &fx, &fy); + *sxp = lr ? ww - 1 - fx : fx; + *syp = tb ? wh - 1 - fy : fy; +} + +/* handle the operation of the magnifying glass. + */ +void +si_doGlass ( +Display *dsp, +Window win, +int b1p, int m1, /* button/motion state */ +int ww, int wh, /* size of X Window */ +int wx, int wy, /* true X window coords of cursor */ +int sx, int sy, /* snap-to-max X window coords */ +int lr, int tb) /* user's flip settings */ +{ + static int lastsx, lastsy; /* last windos x/y */ + int rx, ry, rw, rh; /* region */ + + if (!fimok) + return; + + if (b1p) + glassSetup(); + + if (m1) { + + /* motion: put back old pixels that won't just be covered again */ + + /* first the vertical strip that is uncovered */ + + rh = glasssz; + ry = lastsy - (glasssz/2); + if (ry < 0) { + rh += ry; + ry = 0; + } + if (sx < lastsx) { + rw = lastsx - sx; /* cursor moved left */ + rx = sx + (glasssz/2); + } else { + rw = sx - lastsx; /* cursor moved right */ + rx = lastsx - (glasssz/2); + } + if (rx < 0) { + rw += rx; + rx = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, fpm, win, glassGC, rx, ry, rw, rh, rx, ry); + + /* then the horizontal strip that is uncovered */ + + rw = glasssz; + rx = lastsx - (glasssz/2); + if (rx < 0) { + rw += rx; + rx = 0; + } + if (sy < lastsy) { + rh = lastsy - sy; /* cursor moved up */ + ry = sy + (glasssz/2); + } else { + rh = sy - lastsy; /* cursor moved dosn */ + ry = lastsy - (glasssz/2); + } + if (ry < 0) { + rh += ry; + ry = 0; + } + + if (rw > 0 && rh > 0) + XCopyArea (dsp, fpm, win, glassGC, rx, ry, rw, rh, rx, ry); + } + + if (b1p || m1) { + + /* start or new location: show glass and save new location */ + + fillGlass (sx, sy); + XPutImage (dsp, win, glassGC, glass_xim, 0, 0, + sx-(glasssz/2), sy-(glasssz/2), + glasssz, glasssz); + lastsx = sx; + lastsy = sy; + + /* kinda hard to tell boundry of glass so draw a line around it */ + XDrawRectangle (dsp, win, glassGC, sx-(glasssz/2), sy-(glasssz/2), + glasssz-1, glasssz-1); + + /* show stats and graphs as desired */ + if (svtb_glassIsOn() && gtb_w && XmToggleButtonGetState(gtb_w)) { + int fx = lr ? ww - 1 - sx : sx; + int fy = tb ? wh - 1 - sy : sy; + int gsz = glimsz(); + ImRegion imr; + int cx, cy; + double gix, giy; + + /* find glass region */ + si_win2im (fx, fy, ww, wh, &gix, &giy); + cx = (int)(gix + .5); + cy = (int)(giy + .5); + imr.im = (CamPix *) fim.image; + imr.iw = fim.sw; + imr.ih = fim.sh; + imr.rx = cx - gsz/2; + imr.ry = cy - gsz/2; + imr.rw = gsz; + imr.rh = gsz; + if (clampRegion (&imr) < 0) + return; + + /* print stats */ + printGlassStats(&imr, gix, giy); + + /* plot desired crosssection through center of glass */ + if (XmToggleButtonGetState (glrow_w)) + drawGlassRow (glrda_w, &imr, cx - gsz/2, gsz); + if (XmToggleButtonGetState (glcol_w)) + drawGlassCol (glcda_w, &imr, cy - gsz/2, gsz); + } + } +} + +/* print stats for glass given image location of center */ +static void +printGlassStats(rp, ix, iy) +ImRegion *rp; +double ix, iy; +{ + ImStats ims; + int cx, cy; + char buf[1024]; + + regionStats (rp, &ims); + + cx = (int)(ix + .5); + cy = (int)(iy + .5); + sprintf (buf, " %3dW x %dH\nCenter: %5d @:%6.1f,%6.1f\n Max: %5d @:%4d.0,%4d.0\n Min: %5d Mean: %8.1f\nMedian: %5d StDev: %8.1f", + rp->rw, rp->rh, + rp->im[cy*rp->iw + cx], ix, iy, + ims.max, ims.maxatx, ims.maxaty, + ims.min, ims.mean, + ims.median, ims.std); + XmTextSetString (glstxt_w, buf); +} + +/* plot central row of region rp. + * rp is already clamped, rx and rw are the original rp->rx and rp->rw. + * N.B. may be called before w is realized, eg, glass row set in app defaults. + */ +static void +drawGlassRow (w, rp, rx, rw) +Widget w; +ImRegion *rp; +int rx, rw; +{ + Display *dsp = XtDisplay (w); + Window win = XtWindow(w); + XPoint xpcache[256]; + XPoint *xps, *xp; + Dimension daw, dah; + int divs = rw-1; /* fence posts -> rails */ + double bot, top; + CamPix *im; + int i; + + /* benign if called before being realized */ + if (!win) + return; + + /* use stack and avoid malloc if possible */ + xps = 2*rw<=XtNumber(xpcache) ? xpcache + : (XPoint*)XtMalloc(2*rw*sizeof(XPoint)); + xp = xps; + + /* get size of drawing area */ + get_something (w, XmNwidth, (XtArgVal)&daw); + get_something (w, XmNheight, (XtArgVal)&dah); + + /* draw background box and labels first */ + bot = h_mini; + top = h_maxi; + drawGraphGrid (dsp, win, daw, dah, (double)rx, (double)rx+divs,bot,top); + + /* pixels */ + XSetForeground (dsp, imgc, imc1_p); + im = &rp->im[(rp->ry+rp->rh/2)*rp->iw + rx]; + for (i = 0; i < rw; i++) { + if (i + rx >= 0 && rx + i < rp->iw) { + CamPix p = im[i]; + xp->x = i*(int)daw/divs - (int)daw/divs/2; /* center */ + xp->y = (short)((int)dah - (int)dah*(p-bot)/(top-bot)); + xp++; + xp->x = (i+1)*(int)daw/divs - (int)daw/divs/2; /* exact match */ + xp->y = xp[-1].y; + xp++; + } + } + XDrawLines (dsp, win, imgc, xps, xp-xps, CoordModeOrigin); + + if (xps != xpcache) + XtFree ((char *)xps); +} + +/* plot central column of region rp. + * rp is already clamped, ry and rh are the original rp->ry and rp->rh. + * N.B. may be called before w is realized, eg, glass row set in app defaults. + */ +static void +drawGlassCol (w, rp, ry, rh) +Widget w; +ImRegion *rp; +int ry, rh; +{ + Display *dsp = XtDisplay (w); + Window win = XtWindow(w); + XPoint xpcache[256]; + XPoint *xps, *xp; + Dimension daw, dah; + int divs = rh-1; + double bot, top; + CamPix *im; + int i; + + /* benign if called before being realized */ + if (!win) + return; + + /* use stack and avoid malloc if possible */ + xps = 2*rh<=XtNumber(xpcache) ? xpcache + : (XPoint*)XtMalloc(2*rh*sizeof(XPoint)); + xp = xps; + + /* get size of drawing area */ + get_something (w, XmNwidth, (XtArgVal)&daw); + get_something (w, XmNheight, (XtArgVal)&dah); + + /* draw background box and labels first */ + bot = h_mini; + top = h_maxi; + drawGraphGrid (dsp, win, daw, dah, (double)ry, (double)ry+divs,bot,top); + + /* pixels */ + XSetForeground (dsp, imgc, imc1_p); + im = &rp->im[rp->ry*rp->iw + rp->rx + rp->rw/2]; + for (i = 0; i < rh; i++) { + if (i + ry >= 0 && ry + i < rp->ih) { + CamPix p = im[i*rp->iw]; + xp->x = i*(int)daw/divs - (int)daw/divs/2; /* center */ + xp->y = (short)((int)dah - (int)dah*(p-bot)/(top-bot)); + xp++; + xp->x = (i+1)*(int)daw/divs - (int)daw/divs/2; /* exact match */ + xp->y = xp[-1].y; + xp++; + } + } + XDrawLines (dsp, win, imgc, xps, xp-xps, CoordModeOrigin); + + if (xps != xpcache) + XtFree ((char *)xps); +} + +/* print overall image stats */ +static void +printImageStats(name) +char *name; +{ + char buf[1024]; + char center[1024]; + char *base; + short columns; + int centerl; + + /* strip any leading path portion */ + if ((base = strrchr (name, '/')) || (base = strrchr (name, '\\'))) + name = base+1; + + /* prepare to center name and size */ + centerl = sprintf (center, "%s %dW x %dH", name, fim.sw, fim.sh); + get_something (ostxt_w, XmNcolumns, (XtArgVal)&columns); + + sprintf (buf, "%*s%s\n Max: %5d at:%4d,%4d\n Min: %5d Mean: %8.1f\nMedian: %5d StDev: %8.1f", + (columns-centerl)/2, "", center, + wims.max, wims.maxatx, wims.maxaty, + wims.min, wims.mean, + wims.median, wims.std); + + XmTextSetString (ostxt_w, buf); +} + +/* compute wims based on fim */ +static void +findWholeImageStats() +{ + ImRegion imr; + + imr.im = (CamPix *) fim.image; + imr.iw = fim.sw; + imr.ih = fim.sh; + imr.rx = BORDER; + imr.ry = BORDER; + imr.rw = fim.sw - 2*BORDER; + imr.rh = fim.sh - 2*BORDER; + regionStats (&imr, &wims); +} + +/* handle the operation of the cross-sectional slice. + */ +void +si_doSlice ( +Display *dsp, +Window win, +int state, /* -1: new 0: erase 1: draw 2: void next erase */ +int ww, int wh, /* size of image drawing area */ +int wx, int wy, /* cursor coords on drawing area */ +int lr, int tb) /* user's flip settings */ +{ + static int startwx, startwy; /* session starting point */ + static int lastwx, lastwy; /* last window endpoint x/y */ + static GC xogc; /* GC for XORing slice */ + + if (!fimok) + return; + if (!xogc) { + unsigned long mask; + XGCValues gcv; + + mask = GCFunction | GCForeground; + gcv.function = GXxor; + gcv.foreground = imc2_p ^ BlackPixel(dsp,DefaultScreen(dsp)); + xogc = XCreateGC (dsp, win, mask, &gcv); + } + + switch (state) { + case -1: + /* new starting pos */ + startwx = lastwx = wx; + startwy = lastwy = wy; + break; + + case 0: + XDrawLine (dsp, win, xogc, startwx, startwy, lastwx, lastwy); + break; + + case 1: + XDrawLine (dsp, win, xogc, startwx, startwy, wx, wy); + lastwx = wx; + lastwy = wy; + if (si_ismanaged()) + drawSlice (startwx, startwy, ww, wh, wx, wy, lr, tb); + break; + + case 2: + lastwx = startwx; + lastwy = startwy; + break; + + default: + printf ("bad doSlice state: %d\n", state); + abort(); + break; + } +} + +/* draw pixels along line from [x0,y0] to [x1,y1] in window of size wwXwh */ +static void +drawSlice (x0, y0, ww, wh, x1, y1, lr, tb) +int x0, y0, ww, wh, x1, y1, lr, tb; +{ + Display *dsp = XtDisplay (sda_w); + Window win = XtWindow (sda_w); + CamPix *ip = (CamPix *)fim.image; /* just handy */ + Dimension sdaw, sdah; /* sda size */ + XPoint xpcache[1024], *xp; + int l, h; + double len; + int sdax; + + /* length if slice */ + len = sqrt(sqr((double)(x1-x0))+sqr((double)(y1-y0)))/fmag; + if (len == 0) + return; + + /* get size of drawing area */ + get_something (sda_w, XmNwidth, (XtArgVal)&sdaw); + get_something (sda_w, XmNheight, (XtArgVal)&sdah); + + /* use stack if possible to avoid malloc */ + xp = sdaw <= XtNumber(xpcache) ? xpcache + : (XPoint*)XtMalloc(sdaw*sizeof(XPoint)); + + /* account for user's flipping */ + if (lr) { + x0 = ww - 1 - x0; + x1 = ww - 1 - x1; + } + if (tb) { + y0 = wh - 1 - y0; + y1 = wh - 1 - y1; + } + + /* range */ + if (XmToggleButtonGetState (slmax_w)) { + h = h_maxi; + l = h_mini; + } else { + h = hipix; + l = lopix; + } + + /* walk along */ + for (sdax = 0; sdax < sdaw; sdax++) { + double ix, iy; + int p, wx, wy; + wx = x0 + sdax*(x1-x0)/(int)sdaw; + wy = y0 + sdax*(y1-y0)/(int)sdaw; + si_win2im (wx, wy, ww, wh, &ix, &iy); + p = ip[(int)(fim.sw*(int)(iy + .5) + ix + .5)]; + xp[sdax].x = sdax; + xp[sdax].y = sdah-sdah*(p-l)/(h-l); /* +y is down */ + } + + /* grid */ + XSetForeground (dsp, imgc, img_p); + drawGraphGrid (dsp, win, sdaw, sdah, 0.0, len, (double)l, (double)h); + + /* graph */ + XSetForeground (dsp, imgc, imc1_p); + XDrawLines (dsp, win, imgc, xp, sdaw, CoordModeOrigin); + + if (xp != xpcache) + XtFree ((char *)xp); +} + +/* handle the operation of gaussian measurement. + */ +void +si_doGauss ( +Display *dsp, +int ww, int wh, /* size of X Window */ +int wx, int wy, /* X window coords of cursor */ +int lr, int tb) /* user's flip settings */ +{ + + int fx, fy; /* flipped X coords */ + double ix, iy; /* image coords under cursor */ + + /* find image coords under cursor */ + fx = lr ? ww - 1 - wx : wx; + fy = tb ? wh - 1 - wy : wy; + si_win2im (fx, fy, ww, wh, &ix, &iy); + imPhotom (ix, iy); +} + +/* compute and display photometry of star in glass-size region around image + * coords [ix,iy]. + * N.B. must be called after doGlass for gaussian overlays to work. + */ +static void +imPhotom (ix, iy) +double ix, iy; +{ + Display *dsp = XtD; + char buf[256], rastr[32], decstr[32], vfwhmstr[32], hfwhmstr[32]; + char magstr[64]; + ImRegion imr; /* region to gauss fit */ + int len; /* size of region to fit */ + int back; /* handy len/2 */ + double ra, dec; /* ra/dec of gaussian peak */ + double mag, merr; /* magnitude and error */ + double vfwhm, hfwhm; /* v and h fwhm, in pixels */ + int x, y; /* integral image coords of peak */ + + /* just paranoid */ + if (!fimok) + return; + + /* get star here */ + x = (int)(ix + .5); + y = (int)(iy + .5); + len = glimsz(); + back = len/2; + imr.im = (CamPix *) fim.image; + imr.iw = fim.sw; + imr.ih = fim.sh; + imr.rx = x - back; + imr.ry = y - back; + imr.rw = len; + imr.rh = len; + if (clampRegion (&imr) < 0) + return; + if (getStar (&imr, &newstar) < 0) { + /* blank out if trouble */ + if (XmToggleButtonGetState (glrow_w)) + XClearWindow (dsp, XtWindow(glrda_w)); + if (XmToggleButtonGetState (glcol_w)) + XClearWindow (dsp, XtWindow(glcda_w)); + XmTextSetString (phtxt_w, ""); + return; + } + newstarok = 1; + sv_drawimdot (newstar.x, newstar.y, 5, 1); + + /* find magnitude compared to reference. + * if no current reference, then use this one. + */ + if (!refstarok) { + refstar = newstar; + refstarok = 1; + } + if (cmpStars (&refstar, &newstar, &mag, &merr) < 0) { + magstr[0] = '\0'; + } else { + /* add user's reference value */ + char *txt = XmTextFieldGetString (phmagref_w); + mag += atof (txt); + XtFree (txt); + sprintf (magstr, "%6.2f ±%6.2f", mag, merr); + } + + /* print stats of peak */ + hfwhm = newstar.hg.s*FWHMSIG; + vfwhm = newstar.vg.s*FWHMSIG; + if (xy2RADec (&fim, newstar.x, newstar.y, &ra, &dec) == 0) { + fs_sexa (rastr, radhr(ra), 2, 360000); + fs_sexa (decstr, raddeg(dec), 3, 36000); + sprintf (hfwhmstr, "%5.1f\"", fabs(hfwhm*fim.xinc*3600.)); + sprintf (vfwhmstr, "%5.1f\"", fabs(vfwhm*fim.yinc*3600.)); + } else { + hfwhmstr[0] = vfwhmstr[0] = decstr[0] = '\0'; + strcpy (rastr, " (No WCS)"); + } + sprintf (buf, "Mag: %s\n X: %6.1f RA: %s\n Y: %6.1f Dec: %s\nXFWHM:%4.1fp%6s Base:%6.0f\nYFWHM:%4.1fp%6s Peak:%6.0f", + magstr, + newstar.x, rastr, + newstar.y, decstr, + hfwhm, hfwhmstr, newstar.hg.B, + vfwhm, vfwhmstr, newstar.hg.B+newstar.hg.A); + + XmTextSetString (phtxt_w, buf); +} + +/* draw stats for current zoom. + */ +void +si_doROI ( +Display *dsp, +int ww, int wh, /* size of X Window */ +int lr, int tb, /* user's flip settings */ +ZM_Undo *zp) +{ + int fx, fy; /* flipped screen coords */ + double ix, iy; /* image coords */ + ImRegion imr; /* ROI region */ + int cx, cy; /* cursor image coords */ + char buf[1024]; /* info */ + + /* quiet noop w/o and image */ + if (!fimok) + return; + + /* start defining region */ + imr.im = (CamPix *) fim.image; + imr.iw = fim.sw; + imr.ih = fim.sh; + + /* find image coords at each corner */ + fx = lr ? ww - 1 - zp->x0 : zp->x0; + fy = tb ? wh - 1 - zp->y0 : zp->y0; + si_win2im (fx, fy, ww, wh, &ix, &iy); + imr.rx = (int)(ix + .5); + imr.ry = (int)(iy + .5); + fx = lr ? ww - 1 - zp->x1 : zp->x1; + fy = tb ? wh - 1 - zp->y1 : zp->y1; + si_win2im (fx, fy, ww, wh, &ix, &iy); + cx = (int)(ix + .5); + cy = (int)(iy + .5); + imr.rw = cx - imr.rx; + imr.rh = cy - imr.ry; + + /* straight if necessary */ + if (imr.rw < 0) { + imr.rw = -imr.rw; + imr.rx -= imr.rw; + } + if (imr.rh < 0) { + imr.rh = -imr.rh; + imr.ry -= imr.rh; + } + + /* get stats .. need more than 1 pixel to work with */ + if (imr.rw * imr.rh >= 2) { + ImStats ims; + + regionStats (&imr, &ims); + sprintf (buf, " Diag:%6.1f WxH:%4d,%4d\nCursor: %5d at:%4d,%4d\n Max: %5d at:%4d,%4d\n Min: %5d Mean: %8.1f\nMedian: %5d StDev: %8.1f", + sqrt(sqr((double)imr.rw) + sqr((double)imr.rh)), + imr.rw, imr.rh, + imr.im[cy*imr.iw + cx], cx, cy, + ims.max, ims.maxatx, ims.maxaty, + ims.min, ims.mean, + ims.median, ims.std); + } else + buf[0] = '\0'; + + /* display */ + XmTextSetString (rstxt_w, buf); +} + +/* draw a nice labeled graph in the given window */ +static void +drawGraphGrid (dsp, win, ww, wh, xmin, xmax, ymin, ymax) +Display *dsp; +Window win; +int ww, wh; /* size of win */ +double xmin, xmax; /* x range */ +double ymin, ymax; /* y range */ +{ + double ticks[NTICKS+2]; /* see tickmarks() */ + XSegment xs[2*(NTICKS+2)]; /* room for both */ + int nticks, nxs; + char buf[32]; + int i, l, x, y; + + /* erase to background */ + XSetForeground (dsp, imgc, imbg_p); + XFillRectangle (dsp, win, imgc, 0, 0, ww, wh); + + /* init one set of segments for both directions */ + nxs = 0; + + /* horizontal */ + XSetForeground (dsp, imgc, img_p); + nticks = tickmarks (ymin, ymax, NTICKS, ticks); + for (i = 0; i < nticks; i++) { + y = wh - (int)(wh*(ticks[i]-ymin)/(ymax-ymin)); + if (y < 0 || y > wh) + continue; + xs[nxs].x1 = 0; + xs[nxs].y1 = y; + xs[nxs].x2 = ww; + xs[nxs].y2 = y; + nxs++; + l = sprintf (buf, "%.0f", ticks[i]); + XDrawString (dsp, win, imgc, 2, y-1, buf, l); + } + + /* vertical */ + nticks = tickmarks (xmin, xmax, NTICKS, ticks); + for (i = 0; i < nticks; i++) { + x = (int)(ww*(ticks[i]-xmin)/(xmax-xmin)); + if (x < 0 || x > ww) + continue; + xs[nxs].x1 = x; + xs[nxs].y1 = 0; + xs[nxs].x2 = x; + xs[nxs].y2 = wh; + nxs++; + l = sprintf (buf, "%.0f", ticks[i]); + XDrawString (dsp, win, imgc, x+1, wh-1, buf, l); + } + + /* draw grid in one blast */ + if (nxs > XtNumber(xs)) { + printf ("drawGraphGrid stack corrupted: %d\n", nxs); + abort(); + } + XDrawSegments (dsp, win, imgc, xs, nxs); +} + +/* make some GCs and get some pixels we use in several places */ +static void +mkGCs() +{ + Display *dsp = XtD; + Widget tlw = toplevel_w; + Window win = RootWindow(dsp, DefaultScreen(dsp)); + Pixel p; + + imgc = XCreateGC (dsp, win, 0L, NULL); + if (get_color_resource (tlw, "GraphBGColor", &imbg_p) < 0) + imbg_p = BlackPixel(dsp,DefaultScreen(dsp)); + if (get_color_resource (tlw, "ImGridColor", &img_p) < 0) + img_p = WhitePixel(dsp,DefaultScreen(dsp)); + if (get_color_resource (tlw, "ImPlotColor1", &imc1_p) < 0) + imc1_p = WhitePixel(dsp,DefaultScreen(dsp)); + if (get_color_resource (tlw, "ImPlotColor2", &imc2_p) < 0) + imc2_p = WhitePixel(dsp,DefaultScreen(dsp)); + if (get_color_resource (tlw, "ImPlotColor3", &imc3_p) < 0) + imc3_p = WhitePixel(dsp,DefaultScreen(dsp)); + + if (get_color_resource (tlw, "GlassBorderColor", &p) < 0) + p = WhitePixel (dsp, 0); + glassGC = XCreateGC (dsp, win, 0L, NULL); + XSetForeground (dsp, glassGC, p); +} + +/* pick a good initial contrast for the new fim. + * use our keywords if present and reasonable. + */ +static void +defContrast() +{ + int lpix, hpix; + double gamma; + + if (!getIntFITS (&fim, lopixkw, &lpix) && lpix >= h_mini && + !getIntFITS (&fim, hipixkw, &hpix) && hpix <= h_maxi && + !getRealFITS (&fim, gammakw, &gamma) && gamma >= 1./GAM_MAX + && gamma <= GAM_MAX) { + if (lpix > hpix) { + /* implies inverse video */ + lopix = hpix; + hipix = lpix; + want_inv = 1; + } else { + /* normal video */ + lopix = lpix; + hipix = hpix; + want_inv = 0; + } + XmToggleButtonSetState (inv_w, want_inv, False); + + XmScaleSetValue (gamma_w, (int)(gamma*100)); + } else { + si_wide(); + } +} + +/* set up lopix and hipix and a resonable gamma for medium contrast setting */ +static void +si_mcontrast() +{ + lopix = h_peaki - (h_peaki - h_mini)/2; + hipix = h_peaki + (h_maxi - h_peaki)/2; + XmScaleSetValue (gamma_w, DEFGAMMA); +} + +/* increase contrast */ +static void +si_sharper() +{ + lopix += (h_peaki-lopix)/3; + hipix -= (hipix-h_peaki)/3; +} + +/* decrease contrast */ +static void +si_duller() +{ + lopix = (3*lopix - h_peaki)/(3-1); + if (lopix < h_mini) + lopix = h_mini; + + hipix = (3*hipix - h_peaki)/(3-1); + if (hipix > h_maxi) + hipix = h_maxi; + + if (lopix == h_mini && hipix == h_maxi) { + int g; + XmScaleGetValue (gamma_w, &g); + g -= 10; + if (g >= (int)(1./GAM_MAX*100)) + XmScaleSetValue (gamma_w, g); + } +} + +/* set to narrow statistical contrast */ +static void +si_narrow() +{ + lopix = (int)(wims.mean - wims.std/3); + if (lopix < h_mini) + lopix = h_mini; + hipix = (int)(wims.mean + wims.std/3); + if (hipix > h_maxi) + hipix = h_maxi; + XmScaleSetValue (gamma_w, DEFGAMMA); +} + +/* set to wide statistical contrast */ +static void +si_wide() +{ + lopix = (int)(wims.mean - wims.std); + if (lopix < h_mini) + lopix = h_mini; + hipix = (int)(wims.mean + 2*wims.std); + if (hipix > h_maxi) + hipix = h_maxi; + XmScaleSetValue (gamma_w, DEFGAMMA); +} + +/* set to full pixel contrast */ +static void +si_full() +{ + lopix = h_mini; + hipix = h_maxi; + XmScaleSetValue (gamma_w, DEFGAMMA); +} + +/* increase brightness */ +static void +si_brighter() +{ + lopix = (3*lopix - h_peaki)/(3-1); + if (lopix < h_mini) + lopix = h_mini; + hipix -= (hipix-h_peaki)/3; +} + +/* decrease brightness */ +static void +si_darker() +{ + lopix += (h_peaki-lopix)/3; + hipix = (3*hipix - h_peaki)/(3-1); + if (hipix > h_maxi) { + int g; + hipix = h_maxi; + XmScaleGetValue (gamma_w, &g); + g += 10; + if (g < (int)(GAM_MAX*100)) + XmScaleSetValue (gamma_w, g); + } +} + +/* add a new section control */ +static void +sectionCtrl (Widget par_w, char *hlptag, Widget *tb, char *tbname, + char *tblabel, char *tbtip) +{ + Arg args[20]; + Widget w, tb_w, f_w; + int n; + + n = 0; + XtSetArg (args[n], XmNspacing, 10); n++; + f_w = XmCreateForm (par_w, "SF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + tb_w = XmCreateToggleButton (f_w, tbname, args, n); + sr_reg (tb_w, NULL, skyipcategory, 0); + set_xmstring (tb_w, XmNlabelString, tblabel); + wtip (tb_w, tbtip); + XtManageChild (tb_w); + *tb = tb_w; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, si_help_cb, hlptag); + wtip (w, "Get detailed help on this section"); + XtManageChild (w); +} + +/* create the imaging dialog */ +static void +si_createdialog() +{ + Widget mrc_w, rc_w, rc2_w; + Widget f_w; + Widget ml_w, fr_w; + Widget rb_w; + Widget w; + Arg args[20]; + long mask; + int i; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNallowResize, True); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + si_w = XmCreateFormDialog (svshell_w, "SkyIP", args, n); + set_something (si_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (si_w, XmNhelpCallback, si_help_cb, "SkyIP"); + sr_reg (XtParent(si_w), "XEphem*SkyIP.x", skyipcategory, 0); + sr_reg (XtParent(si_w), "XEphem*SkyIP.y", skyipcategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Sky Image Tools"); n++; + XtSetValues (XtParent(si_w), args, n); + + /* each separately controllable chunk in main RC */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNadjustLast, True); n++; + mrc_w = XmCreateRowColumn (si_w, "SIMRC", args, n); + XtManageChild (mrc_w); + + /* overall info -- always on */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + f_w = XmCreateForm (mrc_w, "Image", args, n); + XtManageChild (f_w); + + /* info Text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + XtSetArg (args[n], XmNrows, 4); n++; + XtSetArg (args[n], XmNcolumns, 29); n++; + ostxt_w = XmCreateText (f_w, "GM", args, n); + wtip (ostxt_w, "Overall image statistics"); + XtManageChild (ostxt_w); + + /* contrast controls */ + + sectionCtrl (mrc_w, "SkyIP_Contrast", &ctb_w, "ContrastSection", + "Brightness and Contrast", "Whether to show the Contrast section"); + + n = 0; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + f_w = XmCreateForm (mrc_w, "CF", args, n); + if (XmToggleButtonGetState(ctb_w)) + XtManageChild (f_w); + + XtAddCallback (ctb_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNnumColumns, 3); n++; + XtSetArg (args[n], XmNspacing, 3); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + XtSetArg (args[n], XmNadjustLast, False); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + rc_w = XmCreateRowColumn (f_w, "Contrast", args, n); + XtManageChild (rc_w); + + n = 0; + inv_w = XmCreateToggleButton (rc_w, "Reverse", args, n); + XtAddCallback (inv_w, XmNvalueChangedCallback, si_inv_cb, 0); + wtip (inv_w, "Whether image is displayed black-on-white"); + XtManageChild (inv_w); + want_inv = XmToggleButtonGetState (inv_w); + sr_reg (inv_w, NULL, skyipcategory, 1); + + n = 0; + w = XmCreatePushButton (rc_w, "Nominal", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_mcontrast); + wtip (w, "Set nominal contrast"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Narrow", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_narrow); + wtip (w, "Set contrast range to -StDev/3 .. +StDev/3"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Sharper", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_sharper); + wtip (w, "Increase contrast"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Duller", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_duller); + wtip (w, "Decrease contrast"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Wide", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_wide); + wtip (w, "Set contrast range to -StDev .. +2*StDev"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Brighter", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_brighter); + wtip (w, "Increase brightness"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Darker", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_darker); + wtip (w, "Decrease brightness"); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Full", args, n); + XtAddCallback (w, XmNactivateCallback, si_contrast_cb, + (XtPointer)si_full); + wtip (w, "Set contrast range to show all pixels"); + XtManageChild (w); + + /* min/max fields */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 4); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreateLabel (f_w, "Low ", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNcolumns, 5); n++; + lo_w = XmCreateTextField (f_w, "Low", args, n); + XtAddCallback (lo_w, XmNactivateCallback, si_lohi_cb, NULL); + XtManageChild (lo_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 4); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, lo_w); n++; + w = XmCreateLabel (f_w, " ... ", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNcolumns, 5); n++; + hi_w = XmCreateTextField (f_w, "Hi", args, n); + XtAddCallback (hi_w, XmNactivateCallback, si_lohi_cb, NULL); + XtManageChild (hi_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNtopOffset, 4); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, hi_w); n++; + w = XmCreateLabel (f_w, "Hi ", args, n); + XtManageChild (w); + + /* gamma scale */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, lo_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, (int)(1./GAM_MAX*100)); n++; + XtSetArg (args[n], XmNmaximum, (int)(GAM_MAX*100)); n++; + XtSetArg (args[n], XmNscaleMultiple, 20); n++; + XtSetArg (args[n], XmNdecimalPoints, 2); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + gamma_w = XmCreateScale (f_w, "GammaScale", args, n); + XtAddCallback (gamma_w, XmNdragCallback, si_gamma_cb, NULL); + XtAddCallback (gamma_w, XmNvalueChangedCallback, si_gamma_cb, NULL); + wtip (gamma_w, "Select new Gamma factor: brightness = pixel^Gamma"); + XtManageChild (gamma_w); + sr_reg (gamma_w, NULL, skyipcategory, 0); + + /* drawing area in a frame for the contrast map */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, gamma_w); n++; + XtSetArg (args[n], XmNtopOffset, 6); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fr_w = XmCreateFrame (f_w, "HF", args, n); + XtManageChild (fr_w); + + n = 0; + fda_w = XmCreateDrawingArea (fr_w, "Histogram", args, n); + XtAddCallback (fda_w, XmNexposeCallback, si_exp_cb, NULL); + mask = Button1MotionMask | ButtonPressMask | ButtonReleaseMask + | PointerMotionHintMask; + XtAddEventHandler (fda_w, mask, False, si_motion_eh, NULL); + XtManageChild (fda_w); + wtip (fda_w, + "Histogram and colormap.. slide points to change limits"); + + /* cross section slice */ + + sectionCtrl (mrc_w, "SkyIP_Slice", &stb_w, "SliceSection", + "Cross section Slice", + "Whether to show the Cross-section Slice section"); + + n = 0; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + f_w = XmCreateForm (mrc_w, "Slice", args, n); + if (XmToggleButtonGetState(stb_w)) { + XtManageChild (f_w); + svtb_updateSlice (1); + } + + XtAddCallback (stb_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + slmax_w = XmCreateToggleButton (f_w, "FullScale", args, n); + set_xmstring (slmax_w, XmNlabelString, "Full pixel range"); + wtip (slmax_w, "Whether scale is Full or from Bright/Contrast"); + sr_reg (slmax_w, NULL, skyipcategory, 1); + XtManageChild (slmax_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, slmax_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + fr_w = XmCreateFrame (f_w, "SF", args, n); + XtManageChild (fr_w); + + n = 0; + sda_w = XmCreateDrawingArea (fr_w, "SlicePlot", args, n); + XtManageChild (sda_w); + wtip (sda_w, "Cross-sectional slice"); + + /* glass section */ + + sectionCtrl (mrc_w, "SkyIP_Glass", >b_w, "GlassSection", + "Magnifying Glass", "Whether to show the glass statistics section"); + + n = 0; + XtSetArg (args[n], XmNspacing, 2); n++; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + rc_w = XmCreateRowColumn (mrc_w, "Glass", args, n); + if (XmToggleButtonGetState(gtb_w)) { + XtManageChild (rc_w); + svtb_updateGlass(1); + } + + XtAddCallback (gtb_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)rc_w); + + /* size RB */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + f_w = XmCreateForm (rc_w, "Size", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + ml_w = XmCreateLabel (f_w, "SL", args, n); + set_xmstring (ml_w, XmNlabelString, "Size:"); + XtManageChild (ml_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, ml_w); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + rb_w = XmCreateRadioBox (f_w, "GS", args, n); + wtip (rb_w, "Glass' final size on screen"); + XtManageChild (rb_w); + + for (i = 0; i < XtNumber(glsz); i++) { + RadioSet *rp = &glsz[i]; + + n = 0; + rp->w = XmCreateToggleButton (rb_w, rp->name, args, n); + sr_reg (rp->w, NULL, skyipcategory, 1); + set_xmstring (rp->w, XmNlabelString, rp->label); + XtManageChild (rp->w); + } + + /* mag RB */ + + n = 0; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + f_w = XmCreateForm (rc_w, "Mag", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + ml_w = XmCreateLabel (f_w, "ML", args, n); + set_xmstring (ml_w, XmNlabelString, " Mag:"); + XtManageChild (ml_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, ml_w); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + rb_w = XmCreateRadioBox (f_w, "GM", args, n); + wtip (rb_w, "Glass' magnification factor"); + XtManageChild (rb_w); + + for (i = 0; i < XtNumber(glmag); i++) { + RadioSet *rp = &glmag[i]; + + n = 0; + rp->w = XmCreateToggleButton (rb_w, rp->name, args, n); + sr_reg (rp->w, NULL, skyipcategory, 1); + set_xmstring (rp->w, XmNlabelString, rp->label); + XtManageChild (rp->w); + } + + /* info Text */ + + n = 0; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + XtSetArg (args[n], XmNrows, 5); n++; + XtSetArg (args[n], XmNcolumns, 29); n++; + glstxt_w = XmCreateText (rc_w, "GM", args, n); + wtip (glstxt_w, "Glass' statistics"); + XtManageChild (glstxt_w); + + /* row/col plot controls */ + + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + rc2_w = XmCreateRowColumn (rc_w, "Plot", args, n); + XtManageChild (rc2_w); + + n = 0; + w = XmCreateLabel (rc2_w, "PCSL", args, n); + set_xmstring (w, XmNlabelString, "Plot center: "); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNspacing, 3); n++; + glrow_w = XmCreateToggleButton (rc2_w, "Row", args, n); + sr_reg (glrow_w, NULL, skyipcategory, 0); + wtip (glrow_w, + "Whether to draw a horizontal cross section"); + XtManageChild (glrow_w); + + n = 0; + XtSetArg (args[n], XmNspacing, 3); n++; + glcol_w = XmCreateToggleButton (rc2_w, "Column", args, n); + sr_reg (glcol_w, NULL, skyipcategory, 0); + wtip (glcol_w, + "Whether to draw a vertical cross section"); + XtManageChild (glcol_w); + + /* drawing areas for each direction in frames */ + + n = 0; + fr_w = XmCreateFrame (rc_w, "GRF", args, n); + XtAddCallback (glrow_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)fr_w); + if (XmToggleButtonGetState(glrow_w)) + XtManageChild (fr_w); + + /* N.B. since this DA may not be mapped (if the frame is not + * managed) take care it is not used before it is really up. + */ + + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + glrda_w = XmCreateDrawingArea (fr_w, "RowPlot", args, n); + XtManageChild (glrda_w); + wtip (glrda_w, "Plot of central row under glass"); + + n = 0; + fr_w = XmCreateFrame (rc_w, "GCF", args, n); + XtAddCallback (glcol_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)fr_w); + if (XmToggleButtonGetState(glcol_w)) + XtManageChild (fr_w); + + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + glcda_w = XmCreateDrawingArea (fr_w, "ColPlot", args, n); + XtManageChild (glcda_w); + wtip (glcda_w, "Plot of central column under glass"); + + /* ROI section */ + + sectionCtrl (mrc_w, "SkyIP_ROI", &rtb_w, "ROISection", + "Region of Interest", "Whether to draw region of interest"); + + n = 0; + XtSetArg (args[n], XmNspacing, 2); n++; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + rc_w = XmCreateRowColumn (mrc_w, "ROI", args, n); + if (XmToggleButtonGetState(rtb_w)) { + XtManageChild (rc_w); + svtb_updateROI(1); + } + + XtAddCallback (rtb_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)rc_w); + + /* info Text */ + + n = 0; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + XtSetArg (args[n], XmNrows, 5); n++; + XtSetArg (args[n], XmNcolumns, 29); n++; + rstxt_w = XmCreateText (rc_w, "GM", args, n); + wtip (rstxt_w, "ROI statistics"); + XtManageChild (rstxt_w); + + /* gaussian section */ + + sectionCtrl (mrc_w, "SkyIP_2D_Gaussian", &ptb_w, "GaussianSection", + "2D Gaussian Measurements", + "Whether to show the Gaussian Photometry/Astrometry section"); + + n = 0; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + XtSetArg (args[n], XmNverticalSpacing, 4); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 4); n++; + f_w = XmCreateForm (mrc_w, "Gaussian", args, n); + if (XmToggleButtonGetState(ptb_w)) + XtManageChild (f_w); + + XtAddCallback (ptb_w, XmNvalueChangedCallback, si_managetb_cb, + (XtPointer)f_w); + + /* reference */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + ml_w = XmCreateLabel (f_w, "PP", args, n); + set_xmstring (ml_w, XmNlabelString, "Reference Mag:"); + XtManageChild (ml_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + w = XmCreatePushButton (f_w, "Mark", args, n); + XtAddCallback (w, XmNactivateCallback, si_markrefstar_cb, NULL); + wtip (w, "Mark the current reference star on the image"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, w); n++; + w = XmCreatePushButton (f_w, "New", args, n); + XtAddCallback (w, XmNactivateCallback, si_newrefstar_cb, NULL); + wtip (w, "Assign the last star as the new reference star"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, ml_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, w); n++; + XtSetArg (args[n], XmNcolumns, 5); n++; + phmagref_w = XmCreateTextField (f_w, "RefMag", args, n); + XtAddCallback (phmagref_w, XmNactivateCallback, si_newref_cb, NULL); + sr_reg (phmagref_w, NULL, skyipcategory, 0); + wtip (phmagref_w, "Magnitude to use as reference to other stars"); + XtManageChild (phmagref_w); + + /* info Text */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, phmagref_w); n++; + XtSetArg (args[n], XmNtopOffset, 3); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + XtSetArg (args[n], XmNrows, 5); n++; + XtSetArg (args[n], XmNcolumns, 29); n++; + phtxt_w = XmCreateText (f_w, "GM", args, n); + XtAddCallback (phtxt_w, XmNactivateCallback, si_newrefstar_cb,NULL); + wtip (phtxt_w, "Gaussian solution details"); + XtManageChild (phtxt_w); + + /* bottom PBs */ + + n = 0; + w = XmCreateSeparator (mrc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + f_w = XmCreateForm (mrc_w, "F", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 40); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, si_close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 60); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, si_help_cb, "SkyIP"); + XtManageChild (w); +} + +/* we just read a fits image into fim -- do everything necessary to display it. + * last argument determines whether contrast and WCS are set automatically. + */ +static void +si_newImage(name, autocon) +char *name; +int autocon; +{ + double ra, dec; + + watch_cursor(1); + + /* compute overall image stats */ + findWholeImageStats(); + + /* put the fits fields into the scrolled text */ + sf_showHeader(&fim); + + /* build the histogram */ + build_histo(); + + /* pick a good initial lopix/hipix */ + if (autocon) + defContrast(); + + /* assign the colors */ + build_colormap(); + + /* draw the histogram */ + si_drawHistogram(); + + /* establish north and east */ + si_ne(); + + /* show basic stats */ + printImageStats(name); + + /* if find seed values but no WCS run solver, else just display*/ + if (autocon && initSolverFields() && xy2RADec(&fim,0,0,&ra,&dec) < 0) + wcsMatch (); + else + sv_newFITS(); + + watch_cursor(0); +} + +/* set nup and elf from fim */ +static void +si_ne() +{ + FImage *fip = &fim; + double ra1, dec1, ra2, dec2; + + /* compare upper left corner to center */ + if (xy2RADec (fip, fip->sw/2.0, fip->sh/2.0, &ra1, &dec1) < 0) { + nup = elf = 1; /* good as any */ + return; + } + (void) xy2RADec (fip, 0.0, 0.0, &ra2, &dec2); + + nup = (dec2 > dec1); + elf = (ra2 > ra1); +} + +/* mark refstar on the image */ +/* ARGSUSED */ +static void +si_markrefstar_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!fimok) + xe_msg (1, "First open an image"); + else if (!refstarok) + xe_msg (1, "Reference star not defined"); + else + sv_drawimdot (refstar.x, refstar.y, 5, 0); +} + +/* make newstar the new refstar. + * N.B. do not use call: used by PB and TF + */ +/* ARGSUSED */ +static void +si_newrefstar_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!fimok) + xe_msg (1, "First open an image"); + else if (newstarok) { + refstar = newstar; + refstarok = 1; + imPhotom (refstar.x, refstar.y); /* show stats */ + sv_all(NULL); /* erase */ + sv_drawimdot (refstar.x, refstar.y, 5, 0); /* mark */ + } else { + xe_msg (1, "No star is defined as a photometric reference.\nPlease click on a star to set one."); + } +} + +/* user typed ENTER with a new reference value. + */ +/* ARGSUSED */ +static void +si_newref_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!fimok) + xe_msg (1, "First open an image"); + else if (newstarok) { + imPhotom (newstar.x, newstar.y); /* reshow stats */ + } else { + xe_msg (1, "No star is defined as a photometric reference.\nPlease click on a star to set one."); + } +} + +/* toggle a manager, in client, on or off. + * some also mirror to the toolbar. + */ +/* ARGSUSED */ +static void +si_managetb_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int state = XmToggleButtonGetState(w); + Widget sw = (Widget)client; + + if (state) + XtManageChild (sw); + else + XtUnmanageChild(sw); + + if (w == stb_w) + svtb_updateSlice(state); + else if (w == ptb_w) + svtb_updateGauss(state); + else if (w == rtb_w) + svtb_updateROI(state); + else if (w == ctb_w) + svtb_updateContrast(state); + else if (w == gtb_w) + svtb_updateGlass(state); +} + +/* ARGSUSED */ +static void +si_lohi_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *lostr = XmTextFieldGetString (lo_w); + char *histr = XmTextFieldGetString (hi_w); + int lo, hi; + + lo = atoi(lostr); + hi = atoi(histr); + if (lo<0 || lo>MAXCAMPIX || hi<0 || hi>MAXCAMPIX || hikw_w); + if (!*kw || ((bp = strrchr(kw,' ')) && bp[1] == '\0')) { + sprintf (msg, "Please specify %s", wsp->kwtip); + ret = -1; + goto done; + } + + /* relax need for user to type in upper case */ + for (bp = kw; *bp; bp++) + if (islower(*bp)) + *bp = toupper(*bp); + + /* get from FITS header and copy to our value field */ + if (getStringFITS (&fim, kw, valu) == 0) { + XmTextFieldSetString (wsp->v_w, valu); + } else if (getRealFITS (&fim, kw, &dvalu) == 0) { + sprintf (valu, "%g", dvalu); + XmTextFieldSetString (wsp->v_w, valu); + } else { + sprintf (msg, "Header does not contain a field named '%s'", kw); + ret = -1; + goto done; + } + + done: + XtFree (kw); + return (ret); +} + +/* button motion and press/release event handler for the gray map */ +/* ARGSUSED */ +static void +si_motion_eh (w, client, ev, continue_to_dispatch) +Widget w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + static int moving_lopix; + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + Dimension wid, hei; + Window root, child; + int rx, ry, x, y; + unsigned mask; + int evt = ev->type; + int m1, b1p, b1r; + int newpix; + + /* do nothing if no current image */ + if (!fimok) + return; + + /* what happened? */ + b1p = evt == ButtonPress && ev->xbutton.button == Button1; + b1r = evt == ButtonRelease && ev->xbutton.button == Button1; + m1 = evt == MotionNotify && ev->xmotion.state & Button1Mask; + + /* ignore everything else */ + if (!b1p && !m1) + return; + + watch_cursor(1); + + /* where are we? */ + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &x, &y, &mask); + get_something (w, XmNwidth, (XtArgVal)&wid); + get_something (w, XmNheight, (XtArgVal)&hei); + if (x < 0) x = 0; + if (x >= (int)wid) x = wid-1; + if (y < 0) y = 0; + if (y >= (int)hei) y = hei-1; + + /* scale x to pixel value */ + newpix = h_mini + x*(h_maxi - h_mini)/(int)wid; + + /* if button was just pressed, choose which end to track */ + if (b1p) + moving_lopix = newpix < (lopix + hipix)/2; + + /* track the current end -- but never cross over */ + if (moving_lopix && newpix < hipix) + lopix = newpix; + else if (!moving_lopix && newpix > lopix) + hipix = newpix; + + /* rebuild colormap and redraw histogram to show new markers */ + build_colormap(); + si_drawHistogram(); + + /* display net result */ + sv_dspFITS(); + + watch_cursor(0); +} + +/* expose callback for the gray map */ +/* ARGSUSED */ +static void +si_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Display *dsp = XtDisplay(fda_w); + Window win = XtWindow(fda_w); + + switch (c->reason) { + case XmCR_EXPOSE: { + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity; + + swa.bit_gravity = ForgetGravity; + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected fda_w event. type=%d\n", c->reason); + abort(); + } + + si_drawHistogram(); +} + +/* callback to set a preset contrast level. + * client is pointer to function that sets lo/hipix (and maybe gamma) + */ +/* ARGSUSED */ +static void +si_contrast_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + void (*pfv)() = (void (*)())client; + + if (!fimok) + return; + + /* implement desired contrast */ + (*pfv)(); + + /* reassign the colors */ + build_colormap(); + + /* redraw histogram to show new markers */ + si_drawHistogram(); + + /* tell skyview to redraw */ + sv_dspFITS(); +} + +/* callback from Drag or ValueChanged on the gamma scale */ +/* ARGSUSED */ +static void +si_gamma_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!fimok) + return; + + watch_cursor(1); + + build_colormap(); + si_drawHistogram(); + sv_dspFITS(); + + watch_cursor(0); +} + + +/* callback for the gray map Inverse Vid TB */ +/* ARGSUSED */ +static void +si_inv_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + want_inv = XmToggleButtonGetState(w); + + if (!fimok) + return; + + sv_dspFITS(); +} + +/* draw histgram, if any, in the drawing area, and the lo/hi markers. + * we stretch and only show from h_mini .. h_maxi + * N.B. we might be called before the first expose + */ +static void +si_drawHistogram() +{ +#define MAXPTS 50 + Display *dsp = XtDisplay(fda_w); + Window win = XtWindow(fda_w); + int h_peak; + XPoint pts[MAXPTS]; + Dimension wid, hei; + char buf[32]; + int np; + int x; + + /* might not be far enough */ + if (!win || !histo) + return; + h_peak = histo[h_peaki]; + + /* nothing to do if no image yet */ + if (!fimok) + return; + + /* get window size */ + get_something (fda_w, XmNwidth, (XtArgVal)&wid); + get_something (fda_w, XmNheight, (XtArgVal)&hei); + + /* clear */ + XSetForeground (dsp, imgc, imbg_p); + XFillRectangle (dsp, win, imgc, 0, 0, wid, hei); + + /* draw the histogram all across each x of the window */ + XSetForeground (dsp, imgc, imc1_p); + for (np = x = 0; x < (int)wid; x++) { + int i, p, y; + int l, h; + + /* find lo and hi pixel values binned into this x */ + l = h_mini + x*(h_maxi - h_mini)/(int)wid; + h = h_mini + (x+1)*(h_maxi - h_mini)/(int)wid; + + /* find peak in histogram portion shown at this x */ + p = 0; + h = h < MAXCAMPIX ? h : MAXCAMPIX; + for (i = l; i < h; i++) + if (histo[i] > p) + p = histo[i]; + + /* scale to window y value */ + y = (int)hei-1 - p*((int)hei-1)/h_peak; + + /* add another line segment if its y changes */ + if (np == 0 || y != pts[np-1].y || x == (int)wid-1) { + XPoint *xp = &pts[np++]; + xp->x = x; + xp->y = y; + } + if (np == MAXPTS) { + XDrawLines (dsp, win, imgc, pts, np, CoordModeOrigin); + pts[0].x = pts[np-1].x; + pts[0].y = pts[np-1].y; + np = 1; + } + } + if (np > 1) + XDrawLines (dsp, win, imgc, pts, np, CoordModeOrigin); + + /* then overlay with the colormap within the lo/hi */ + XSetForeground (dsp, imgc, imc2_p); + for (np = x = 0; x < (int)wid; x++) { + int i, p, y; + int l, h; + + /* find lo and hi pixel values binned into this x */ + l = h_mini + x*(h_maxi - h_mini)/(int)wid; + h = h_mini + (x+1)*(h_maxi - h_mini)/(int)wid; + + /* only draw inside the indicators */ + if (h < lopix || l > hipix) + continue; + + /* find peak in colormap portion shown at this x */ + p = 0; + h = h < MAXCAMPIX ? h : MAXCAMPIX; + for (i = l; i < h; i++) + if (colormap[i] > p) + p = colormap[i]; + + /* scale to window y value */ + y = (int)hei-1 - p*((int)hei-1)/(ngray-1); + + /* add another line segment if its y changes */ + if (np == 0 || y != pts[np-1].y || x == (int)wid-1) { + XPoint *xp = &pts[np++]; + xp->x = x; + xp->y = y; + } + if (np == MAXPTS) { + XDrawLines (dsp, win, imgc, pts, np, CoordModeOrigin); + pts[0].x = pts[np-1].x; + pts[0].y = pts[np-1].y; + np = 1; + } + } + if (np > 1) + XDrawLines (dsp, win, imgc, pts, np, CoordModeOrigin); + + /* add the indicators */ + XSetForeground (dsp, imgc, imc3_p); + x = (lopix - h_mini)*(int)wid/(h_maxi - h_mini); + pts[0].x = x-MMW; pts[0].y = 0; + pts[1].x = x; pts[1].y = MMH; + pts[2].x = x+MMW; pts[2].y = 0; + XFillPolygon (dsp, win, imgc, pts, 3, Convex, CoordModeOrigin); + + x = (hipix - h_mini)*(int)wid/(h_maxi - h_mini); + pts[0].x = x-MMW; pts[0].y = 0; + pts[1].x = x; pts[1].y = MMH; + pts[2].x = x+MMW; pts[2].y = 0; + XFillPolygon (dsp, win, imgc, pts, 3, Convex, CoordModeOrigin); + + /* add the numeric values too */ + sprintf (buf, "%5d", lopix); + XmTextFieldSetString (lo_w, buf); + sprintf (buf, "%5d", hipix); + XmTextFieldSetString (hi_w, buf); + +} + +/* set up glass' resources according to current size and mag selections. + */ +static void +glassSetup () +{ + + glassSize(); + makeGlassImage (); +} + +/* set glassmag/sz from widgets */ +static void +glassSize() +{ + int i; + + /* get current mag and and size */ + glassmag = 0; + for (i = 0; i < XtNumber(glmag); i++) { + if (XmToggleButtonGetState(glmag[i].w)) { + glassmag = glmag[i].value; + break; + } + } + if (!glassmag) { + printf ("Glass mag radiobox broke!\n"); + abort(); + } + glasssz = 0; + for (i = 0; i < XtNumber(glsz); i++) { + if (XmToggleButtonGetState(glsz[i].w)) { + glasssz = glsz[i].value; + break; + } + } + if (!glasssz) { + printf ("Glass size radiobox broke!\n"); + abort(); + } +} + +/* (re)make glass_xim of size glasssz and same genre as fim. + */ +static void +makeGlassImage () +{ + Display *dsp = XtD; + char *glassdata; + int nbytes; + + /* free any old then create with new size */ + if (glass_xim) { + free((char *)glass_xim->data); + glass_xim->data = NULL; + XDestroyImage(glass_xim); + glass_xim = 0; + } + + nbytes = (glasssz+7) * (glasssz+7) * fbpp/8; + glassdata = XtMalloc (nbytes); + if (!glassdata) { + xe_msg (0, "Can not malloc %d for Glass pixels", nbytes); + return; + } + + glass_xim = XCreateImage (dsp, XDefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ fbpp == 1 ? 1 : fdepth, + /* format */ fbpp == 1 ? XYBitmap : ZPixmap, + /* offset */ 0, + /* data */ glassdata, + /* width */ glasssz, + /* height */ glasssz, + /* pad */ fbpp < 8 ? 8 : fbpp, + /* bpl */ 0); + + if (!glass_xim) { + free ((void *)glassdata); + xe_msg (0, "Can not make Glass XImage"); + return; + } + + glass_xim->bitmap_bit_order = LSBFirst; + glass_xim->byte_order = LSBFirst; +} + +/* fill glass_xim with glasssz (X pixels) view of fim centered at X + * coords xc,yc. take care at the edges. + */ +/* ARGSUSED */ +static void +fillGlass (xc, yc) +int xc, yc; /* center of glass, in X window coords */ +{ + int isz = glasssz/glassmag; /* size of patch image */ + int x, y, w, h; /* pixmap patch to extract */ + int gx, gy; /* glass coords */ + int px, py; /* patch coords */ + Pixel p; + + /* get mag patch from pixmap and save in LR corner of glass image */ + px = py = glasssz-isz; + x = xc-isz/2; + if (x < 0) { + px -= x; + x = 0; + } + y = yc-isz/2; + if (y < 0) { + py -= y; + y = 0; + } + w = h = isz; + if (x + w > fpmw) + w = fpmw - x; + if (y + h > fpmh) + h = fpmh - y; + XGetSubImage (XtD, fpm, x, y, w, h, AllPlanes, + fbpp == 1 ? XYBitmap : ZPixmap, glass_xim, px, py); + + /* spread patch out into entire glass in place */ + px = py = glasssz-isz; + for (gy = 0; gy < glasssz; gy += glassmag) { + for (gx = 0; gx < glasssz; gx += glassmag) { + p = XGetPixel (glass_xim, px+gx/glassmag, py+gy/glassmag); + for (y = 0; y < glassmag; y++) { + for (x = 0; x < glassmag; x++) { + XPutPixel (glass_xim, gx+x, gy+y, p); + } + } + } + } +} + +/* compare two ObjF wrt f_mag, qsort style */ +static int +objf_qsortf (const void *f1p, const void *f2p) +{ + Obj *o1p = (Obj *)f1p; + Obj *o2p = (Obj *)f2p; + double magdiff = get_mag(o1p) - get_mag(o2p); + return (magdiff == 0 ? 0 : (magdiff < 0 ? -1 : 1)); +} + +/* find WCS solution for current image. + */ +static void +wcsMatch () +{ + Now *np = mm_get_now(); + double mag; + double ra0, dec0, right0, up0, rot0; + double bestsep, worstsep; + double *sx, *sy; + int oldnodups; + FImage tmpfi; + int burnt; + double std; + double fov; + char msg[1024]; + char *txt; + ObjF *fsp; + int nis, nfs; /* n image, n field stars */ + + /* get starting conditions */ + if (!fimok) { + xe_msg (1, "First open an image"); + return; + } + if (getWCSSeed (&wcsseed[WCS_RA], &ra0) < 0) + return; + if (getWCSSeed (&wcsseed[WCS_DEC], &dec0) < 0) + return; + if (getWCSSeed (&wcsseed[WCS_USCALE], &up0) < 0) + return; + if (getWCSSeed (&wcsseed[WCS_RSCALE], &right0) < 0) + return; + if (getWCSSeed (&wcsseed[WCS_ROT], &rot0) < 0) + return; + txt = XmTextFieldGetString (burnt_w); + burnt = atoi (txt); + XtFree (txt); + txt = XmTextFieldGetString (snr_w); + std = atof (txt); + XtFree (txt); + txt = XmTextFieldGetString (bsep_w); + bestsep = atof (txt); + XtFree (txt); + txt = XmTextFieldGetString (wsep_w); + worstsep = atof (txt); + XtFree (txt); + + sv_dspFITS(); /* clean */ + + /* get image stars, sorted by brightness */ + nis = quickStars (&fim, &wims, BORDER, burnt, std, &sx, &sy); + if (nis < 0) { + xe_msg (1, "No memory to find stars"); + return; + } + xe_msg (0,"Using %d image stars @ burnt = %d, SNR = %g", nis,burnt,std); + + /* get field stars in vicinity, sort by brightness. + * N.B. turn off nodups so we are imune to loaded catalogs + */ + fov = FOVMORE*sqrt (sqr(right0*fim.sw) + sqr(up0*fim.sh)); + mag = fov > degrad(10) ? 15 : 20; /* no USNO if really big */ + oldnodups = fs_setnodups (0); + nfs = fs_fetch (np, ra0, dec0, fov, mag, &fsp); + fs_setnodups (oldnodups); + if (nfs <= 0) { + free ((char *)sx); + free ((char *)sy); + xe_msg (1, "Field stars are required for pattern matching"); + return; + } + qsort ((void*)fsp, nfs, sizeof(*fsp), objf_qsortf); + xe_msg (0, "Using %d field stars, magnitude range %g .. %g", nfs, + get_mag ((Obj*)&fsp[0]), get_mag((Obj*)&fsp[nfs-1])); + + /* initial rough coord system. + * N.B. take care with tmpfi since this copy shares the same pointers + */ + tmpfi = fim; + tmpfi.xref = raddeg(ra0); + tmpfi.yref = raddeg(dec0); + tmpfi.xrefpix = fim.sw/2; + tmpfi.yrefpix = fim.sh/2; + tmpfi.xinc = raddeg(right0); + tmpfi.yinc = raddeg(up0); + tmpfi.rot = raddeg(rot0); + strcpy (tmpfi.type, "-TAN"); + tmpfi.wcsset = 1; + + /* here we go */ + nfs = fsmatch (&tmpfi, sv_drawimdot, fsp, nfs, sx, sy, nis, bestsep, + worstsep, msg); + if (nfs < 0) { + free ((char *)fsp); + free ((char *)sx); + free ((char *)sy); + xe_msg (1, "%s", msg); + return; + } + + /* ok! install new result */ + fim = tmpfi; + + /* show with its proud new WCS solution */ + sf_showHeader (&fim); + (void) initSolverFields(); + si_ne(); + sv_newFITS(); + + /* mark and report stats of solution */ + matchStats (fsp, sx, sy, nfs); + + /* clean up */ + free ((char *)fsp); + free ((char *)sx); + free ((char *)sy); +} + +/* report just how well fim supposedly maps these stars to these image coords. + */ +static void +matchStats (fsp, sx, sy, nfs) +ObjF *fsp; +double *sx, *sy; +int nfs; +{ + double m, *med; + double sum; + Obj *bestop, *worstop; + double best, worst; + double asppix; + int i; + + /* sanity check */ + if (nfs < 1) + return; + + /* get an array for finding median err */ + med = (double*)XtMalloc(nfs*sizeof(double)); + + /* scan to build stats */ + sum = 0; + worst = 0; + best = 1e9; + bestop = worstop = NULL; + for (i = 0; i < nfs; i++) { + Obj *op = (Obj *)fsp++; + double x, y, err; + + RADec2xy (&fim, op->f_RA, op->f_dec, &x, &y); + err = sqrt(sqr(x-sx[i]) + sqr(y-sy[i])); + if (err > worst) { + worst = err; + worstop = op; + } + if (err < best) { + best = err; + bestop = op; + } + sum += err; + med[i] = err; + + sv_drawimdot (sx[i], sy[i], 5, 0); + sv_drawimdot (x, y, 7, 1); + } + m = dmedian (med, nfs); + + /* report info */ + asppix = 3600*sqrt(sqr((double)fim.xinc) + sqr((double)fim.yinc)); + xe_msg (confirm(), "Found WCS Solution using %d star pairs\n%5.2fp = %5.2f\" minimum error at %s\n%5.2fp = %5.2f\" maximum error at %s\n%5.2fp = %5.2f\" mean error\n%5.2fp = %5.2f\" median error", + nfs, + best, best*asppix, bestop->o_name, + worst, worst*asppix, worstop->o_name, + sum/nfs, sum/nfs*asppix, + m, m*asppix); + + /* cleanup */ + XtFree ((char *)med); +} + +/* return size of glass in whole image pixels, rounded up */ +static int +glimsz() +{ + int proper = (int)ceil(glasssz/glassmag/fmag); + return (proper >= MINGLSZ ? proper : MINGLSZ); +} + + +/* WCS dialog stuff + */ + +/* called to bring up the wcs solver dialog */ +void +siwcs_manage() +{ + si_create(); + XtManageChild(wcs_w); +} + +/* called to bring down the wcs solver dialog */ +void +siwcs_unmanage() +{ + if (wcs_w) + XtUnmanageChild (wcs_w); +} + +/* set up the WCS solver fields from fip keywords, if possible. + * return whether all fields are found. + */ +static int +initSolverFields () +{ + char msg[1024]; + int ok = 1; + int i; + + si_create(); + for (i = 0; i < XtNumber(wcsseed); i++) + if (setWCSField (&wcsseed[i], msg) < 0) + ok = 0; + + return (ok); +} + +/* create the WCS dialog */ +static void +si_createwcsdialog() +{ + Widget sep_w, rc_w; + Widget w; + Arg args[20]; + int i; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNallowResize, True); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + wcs_w = XmCreateFormDialog (svshell_w, "WCS", args, n); + set_something (wcs_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (wcs_w, XmNhelpCallback, si_wcshelp_cb, NULL); + sr_reg (XtParent(wcs_w), "XEphem*WCS.x", skyipcategory, 0); + sr_reg (XtParent(wcs_w), "XEphem*WCS.y", skyipcategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem WCS solver"); n++; + XtSetValues (XtParent(wcs_w), args, n); + + /* most go in an rc */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNnumColumns, XtNumber(wcsseed)+2); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, True); n++; + XtSetArg (args[n], XmNadjustLast, True); n++; + XtSetArg (args[n], XmNmarginWidth, SINDENT); n++; + rc_w = XmCreateRowColumn (wcs_w, "WCS", args, n); + XtManageChild (rc_w); + + for (i = 0; i < XtNumber(wcsseed); i++) { + WCSSeed *wsp = &wcsseed[i]; + char kwres[64]; + + addLabel (rc_w, wsp->label, -1); + + wsp->v_w = addTF (rc_w, wsp->res, 1); + sr_reg (wsp->v_w, NULL, skyipcategory, 0); + wtip (wsp->v_w, wsp->vtip); + + w = addPB (rc_w, "Use field:", 0); + wtip (w,"Click to search FITS header for field named at right"); + XtAddCallback (w, XmNactivateCallback, si_wcsuse_cb, + (XtPointer)wsp); + + sprintf (kwres, "%sField", wsp->res); + wsp->kw_w = addTF (rc_w, kwres, 1); + XtAddCallback (wsp->kw_w, XmNactivateCallback, si_wcsuse_cb, + (XtPointer)wsp); + sr_reg (wsp->kw_w, NULL, skyipcategory, 1); + wtip (wsp->kw_w, wsp->kwtip); + } + + + addLabel (rc_w, "Burned out:", -1); + burnt_w = addTF (rc_w, "BurnedOut", 1); + XtAddCallback (burnt_w, XmNactivateCallback, si_markstars_cb, 0); + sr_reg (burnt_w, NULL, skyipcategory, 1); + wtip (burnt_w, "Maximum pixel value to trust"); + XtManageChild (burnt_w); + + addLabel (rc_w, "S/N ratio:", -1); + snr_w = addTF (rc_w, "SNR", 1); + XtAddCallback (snr_w, XmNactivateCallback, si_markstars_cb, 0); + sr_reg (snr_w, NULL, skyipcategory, 1); + wtip (snr_w, "Minimum standard deviation above mean for stars"); + XtManageChild (snr_w); + + addLabel (rc_w, "Max pix acc:", -1); + bsep_w = addTF (rc_w, "BestAcc", 1); + sr_reg (bsep_w, NULL, skyipcategory, 1); + wtip (bsep_w, + "Best accuracy this image can possibly produce, pixels"); + XtManageChild (bsep_w); + + addLabel (rc_w, "Min pix acc:", -1); + wsep_w = addTF (rc_w, "WorstAcc", 1); + sr_reg (wsep_w, NULL, skyipcategory, 1); + wtip (wsep_w, "Worst accuracy we will accept, pixels"); + XtManageChild (wsep_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (wcs_w, "Sep", args, n); + XtManageChild (sep_w); + + /* bottom PBs */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 24); n++; + w = XmCreatePushButton (wcs_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, si_wcsclose_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 28); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 48); n++; + w = XmCreatePushButton (wcs_w, "Go", args, n); + XtAddCallback (w, XmNactivateCallback, si_wcsgo_cb, 0); + wtip (w, "Begin solving for WCS headers"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 52); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 72); n++; + w = XmCreatePushButton (wcs_w, "MS", args, n); + set_xmstring (w, XmNlabelString, "Mark stars"); + wtip (w, "Mark the image stars that will be used in the solution"); + XtAddCallback (w, XmNactivateCallback, si_markstars_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 76); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 96); n++; + w = XmCreatePushButton (wcs_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, si_wcshelp_cb, NULL); + XtManageChild (w); +} + +/* add a Label to a RC */ +static void +addLabel (rc_w, label, alignment) +Widget rc_w; +char *label; +int alignment; +{ + Arg args[20]; + Widget w; + int n; + + n = 0; + if (alignment < 0) { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + } else if (alignment > 0) { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + } else { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + } + w = XmCreateLabel (rc_w, "L", args, n); + XtManageChild (w); + set_xmstring (w, XmNlabelString, label); +} + +/* add a PB to a RC */ +static Widget +addPB (rc_w, str, alignment) +Widget rc_w; +char *str; +int alignment; +{ + Arg args[20]; + Widget w; + int n; + + n = 0; + if (alignment < 0) { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + } else if (alignment > 0) { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + } else { + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + } + w = XmCreatePushButton (rc_w, "L", args, n); + XtManageChild (w); + set_xmstring (w, XmNlabelString, str); + return (w); +} + +/* add a TextField to a RC */ +static Widget +addTF (rc_w, name, rw) +Widget rc_w; +char *name; +int rw; +{ + Arg args[20]; + Widget w; + int n; + + n = 0; + XtSetArg (args[n], XmNcolumns, 14); n++; + XtSetArg (args[n], XmNeditable, rw); n++; + XtSetArg (args[n], XmNcursorPositionVisible, rw); n++; + w = XmCreateTextField (rc_w, name, args, n); + XtManageChild (w); + return (w); +} + +/* ARGSUSED */ +static void +si_wcsclose_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (wcs_w); +} + +/* called to start a WCS solution */ +/* ARGSUSED */ +static void +si_wcsgo_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + watch_cursor (1); + wcsMatch (); + watch_cursor (0); +} + +/* called to mark seed stars */ +/* ARGSUSED */ +static void +si_markstars_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + double *sx, *sy; + int burnt; + double std; + char *txt; + int nis; + int i; + + if (!fimok) { + xe_msg (1, "First open an image"); + return; + } + + watch_cursor (1); + + /* get max pix to use */ + txt = XmTextFieldGetString (burnt_w); + burnt = atoi (txt); + XtFree (txt); + if (burnt < 0 || burnt > 65535) { + watch_cursor (0); + xe_msg (1, "Value for burned out pixel is missing or bogus.\nMust be in range 0 .. 65535"); + return; + } + + /* get SNR */ + txt = XmTextFieldGetString (snr_w); + std = atof (txt); + XtFree (txt); + + /* extract list of brighter isolated pixels as seeds for stars */ + nis = quickStars (&fim, &wims, BORDER, burnt, std, &sx, &sy); + if (nis < 0) { + xe_msg (1, "No memory to find stars"); + return; + } + xe_msg (0,"Found %d image stars @ burnt = %d, SNR = %g", nis,burnt,std); + + /* draw */ + sv_all(NULL); /* clean */ + for (i = 0; i < nis; i++) + sv_drawimdot (sx[i], sy[i], 5, 0); + + /* clean up */ + free ((char *)sx); + free ((char *)sy); + + watch_cursor (0); +} + +/* called to plug in a nominal WCS value from an existing field. + * N.B. don't use call: this is used for a PB and a TF + * client is pointer into wcsseed[]. + */ +/* ARGSUSED */ +static void +si_wcsuse_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + WCSSeed *wsp = (WCSSeed *)client; + char msg[1024]; + + /* do nothing if no current image */ + if (!fimok) { + xe_msg (1, "First open an image"); + return; + } + + if (setWCSField (wsp, msg) < 0) + xe_msg (1, msg); +} + +/* ARGSUSED */ +static void +si_wcshelp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "Pattern match with field stars to find a WCS solution." + }; + + hlp_dialog ("SkyIP_WCS", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyip.c,v $ $Date: 2012/11/23 04:14:01 $ $Revision: 1.43 $ $Name: $"}; diff --git a/GUI/xephem/skyip.h b/GUI/xephem/skyip.h new file mode 100644 index 0000000..ad23040 --- /dev/null +++ b/GUI/xephem/skyip.h @@ -0,0 +1,57 @@ +#ifndef _SKYIP_H +#define _SKYIP_H + +/* zoom support */ +typedef struct { + int x0, y0, x1, y1; /* aoi corners */ + double ad; /* alt/dec */ + double ar; /* az/ra */ + double fov; /* fov */ +} ZM_Undo; /* info about each undo level */ + +extern FImage *si_getFImage (void); +extern Pixmap si_getPixmap (void); + +extern void sf_cursor (Cursor c); +extern void sf_getName (char *filename, char *objname); +extern void sf_newFITS (FImage *fip, char name[], int autocon); +extern void sf_go_cb (Widget w, XtPointer client, XtPointer call); +extern void sf_manage (void); +extern void sf_showHeader (FImage *fip); +extern void sf_unmanage (void); + +extern int si_ison (void); +extern int si_isup (void); +extern void si_create (void); +extern void si_cursor (Cursor c); +extern void si_doGauss (Display *dsp, int ww, int wh, int wx, int wy, + int lr, int tb); +extern void si_doGlass (Display *dsp, Window win, int b1p, int m1, + int ww, int wh, int wx, int wy, int sx, int sy, int lr, int tb); +extern void si_doROI (Display *dsp, int ww, int wh, int lr, int tb,ZM_Undo *zp); +extern void si_doSlice (Display *dsp, Window win, int state, + int ww, int wh, int wx, int wy, int lr, int tb); +extern void si_findSnap (int ww, int wh, int wx, int wy, int lr, int tb, + int *sxp, int *syp); +extern void si_im2win (double imx, double imy, int winw, int winh, + int *winxp, int *winyp); +extern void si_manage (void); +extern void si_newPixmap (int w, int h, int lr, int tb, ZM_Undo *zp,int nz); +extern void si_newfim (FImage *fip, char *name, int autocon); +extern void si_off (void); +extern void si_ps (void); +extern void si_setContrast (FImage *fip); +extern void si_setPhotomRef (double ix, double iy, double newmag); +extern void si_setRefMag (double newmag); +extern void si_unmanage (void); +extern void si_win2im (int winx, int winy, int winw, int winh, + double *imxp, double *imyp); + +extern void siwcs_manage (void); +extern void siwcs_unmanage (void); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: skyip.h,v $ $Date: 2005/11/18 13:42:59 $ $Revision: 1.4 $ $Name: $ + */ + +#endif /* _SKYIP_H */ diff --git a/GUI/xephem/skylist.c b/GUI/xephem/skylist.c new file mode 100644 index 0000000..bef8c6d --- /dev/null +++ b/GUI/xephem/skylist.c @@ -0,0 +1,1541 @@ +/* handle the list feature of skyview */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static void sl_create_list_w (void); +static void sl_create_pu (void); +static void sl_cr_sorttable (Widget f_w); +static void sl_toggle_cb (Widget w, XtPointer client, XtPointer call); +static void sl_save_cb (Widget w, XtPointer client, XtPointer call); +static void sl_clear_cb (Widget w, XtPointer client, XtPointer call); +static void sl_undo_cb (Widget w, XtPointer client, XtPointer call); +static void sl_so_cb (Widget w, XtPointer client, XtPointer call); +static void sl_sort_cb (Widget w, XtPointer client, XtPointer call); +static void sl_close_cb (Widget w, XtPointer client, XtPointer call); +static void sl_help_cb (Widget w, XtPointer client, XtPointer call); +static void slpu_mark_cb (Widget w, XtPointer client, XtPointer call); +static void slpu_del_cb (Widget w, XtPointer client, XtPointer call); +static void sl_info_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static void sl_append_qcb (void); +static void sl_write_qcb (void); +static void sl_sort (void); +static void sl_colhdr (char *txt); +static int sort_name (const void *v1, const void *v2); +static int sort_size (const void *v1, const void *v2); +static int sort_spect (const void *v1, const void *v2); +static int sort_ura (const void *v1, const void *v2); +static int sort_u2k (const void *v1, const void *v2); +static int sort_msa (const void *v1, const void *v2); +static int sort_airmass (const void *v1, const void *v2); +static int sort_desc (const void *v1, const void *v2); +static int sort_ha (const void *v1, const void *v2); +static int sort_edist (const void *v1, const void *v2); +static int sort_sdist (const void *v1, const void *v2); +static int sort_ra (const void *v1, const void *v2); +static int sort_dec (const void *v1, const void *v2); +static int sort_alt (const void *v1, const void *v2); +static int sort_az (const void *v1, const void *v2); +static int sort_settm (const void *v1, const void *v2); +static int sort_setaz (const void *v1, const void *v2); +static int sort_risetm (const void *v1, const void *v2); +static int sort_riseaz (const void *v1, const void *v2); +static int sort_trantm (const void *v1, const void *v2); +static int sort_tranalt (const void *v1, const void *v2); +static int sort_elong (const void *v1, const void *v2); +static int sort_mag (const void *v1, const void *v2); +static int sort_cns (const void *v1, const void *v2); +static int sort_glat (const void *v1, const void *v2); +static int sort_glng (const void *v1, const void *v2); +static int sort_hlat (const void *v1, const void *v2); +static int sort_hlng (const void *v1, const void *v2); +static int sort_eclat (const void *v1, const void *v2); +static int sort_eclng (const void *v1, const void *v2); +static int sort_z (const void *v1, const void *v2); +static int sort_sep (const void *v1, const void *v2); + +static Widget list_w; /* object list dialog */ +static Widget txttb_w; /* text-format TB */ +static Widget txtfn_w; /* text-format file name */ +static Widget edbtb_w; /* edb-format TB */ +static Widget edbfn_w; /* edb-format file name */ +static Widget nl_w; /* count label */ +static Widget clpb_w; /* Clear PB */ +static Widget undo_w; /* Undo PB */ +static Widget listt_w; /* text for showing list */ +static Widget hdrtf_w; /* text field for showing column headings */ + +#define LSTINDENT 20 /* list item indent, pixels */ +#define ATLASLEN 30 /* room for atlas info */ + +/* all info about one object, including some things not in an Obj */ +typedef struct { + Obj *op; /* Obj */ + RiseSet rs; /* rise/set info */ + double glat, glng; /* galactic lat/long */ + double eclat, eclng; /* ecliptic lat/long */ + double ha; /* hour angle */ + double Z; /* airmass */ + char *cns; /* constellation name */ + char *desc; /* description */ + char ura[ATLASLEN]; /* Uranometria page number */ + char u2k[ATLASLEN]; /* Uranometria 200 page number */ + char msa[ATLASLEN]; /* Millenium Star Atlas page number */ +} ObjInfo; + +/* handy "no rise/set" test */ +#define NORS (RS_ERROR|RS_CIRCUMPOLAR|RS_NEVERUP) + +/* info about each sort field */ +typedef struct { + char *lname; /* label widget instance name */ + char *title; /* sort description */ + int (*cmp_f)(); /* qsort-style compare function */ + Widget lw; /* sort-order label widget */ + Widget pw; /* sort-order pushb widget */ +} SortInfo; +static SortInfo sinfo[] = { + {"Name", "Name", sort_name}, + {"Type", "Type", sort_desc}, + {"Cns", "Constellation", sort_cns}, + {"RA", "Right Asc", sort_ra}, + {"HA", "Hour angle", sort_ha}, + {"Dec", "Declination", sort_dec}, + {"Az", "Azimuth", sort_az}, + {"Alt", "Altitude", sort_alt}, + {"Zenith", "Zenith", sort_z}, + {"Air", "Air mass", sort_airmass}, + {"Spect", "Spect class", sort_spect}, + + {"Size", "Size", sort_size}, + {"Mag", "Magnitude", sort_mag}, + {"Elong", "Elongation", sort_elong}, + {"HLat", "Helio lat", sort_hlat}, + {"HLong", "Helio long", sort_hlng}, + {"GLat", "Galactic lat", sort_glat}, + {"GLong", "Galactic long", sort_glng}, + {"EcLat", "Ecliptic lat", sort_eclat}, + {"EcLong", "Ecliptic long", sort_eclng}, + {"EaDst", "Earth dist", sort_edist}, + {"SnDst", "Sun dist", sort_sdist}, + + {"Urano", "Uranometria", sort_ura}, + {"Uran2k", "Uranom 2000", sort_u2k}, + {"MillSA", "Millenium", sort_msa}, + {"RisTm", "Rise time", sort_risetm}, + {"RisAz", "Rise azimuth", sort_riseaz}, + {"TrnTm", "Transit time", sort_trantm}, + {"TrnAlt", "Transit alt", sort_tranalt}, + {"SetTm", "Set time", sort_settm}, + {"SetAz", "Set azimuth", sort_setaz}, + {"Sep", "Separation", sort_sep}, +}; +#define NSINFO XtNumber(sinfo) +#define NTCOLS 4 /* desired number of columns for table */ +#define NTROWS ((NSINFO-1)/NTCOLS+1) +#define LBLPC 25 /* % of each cell for sort-order label */ + +/* popup for more info on a given line */ +typedef struct { + Widget pu_w; /* popup */ + Widget name_w; /* name label */ + int linepos; /* index into listt_w text at BOL */ + Obj *op; /* named object */ +} PopupInfo; +static PopupInfo pu; + +/* pointers into sinfo[] in order of sort */ +static SortInfo *sortorder[NSINFO]; +static int nsortorder; /* number in use */ + +static char skylcategory[] = "Sky View -- List"; + +void +sl_manage() +{ + if (!list_w) { + sl_create_list_w(); + sl_create_pu(); + } + XtManageChild (list_w); +} + +void +sl_unmanage() +{ + if (list_w) + XtUnmanageChild (list_w); +} + +/* called to put up or remove the watch cursor. */ +void +sl_cursor (c) +Cursor c; +{ + Window win; + + if (list_w && (win = XtWindow(list_w)) != 0) { + Display *dsp = XtDisplay(list_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* create the list filename prompt */ +static void +sl_create_list_w() +{ + Widget dspb_w, lbl_w, tbl_w; + Widget w; + Arg args[20]; + int n; + + /* create form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, False); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_NONE); n++; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNfractionBase, 13); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + list_w = XmCreateFormDialog (svshell_w, "SkyList", args, n); + set_something (list_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (list_w, XmNhelpCallback, sl_help_cb, 0); + sr_reg (XtParent(list_w), "XEphem*SkyList.x", skylcategory, 0); + sr_reg (XtParent(list_w), "XEphem*SkyList.y", skylcategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "Sky list"); n++; + XtSetValues (XtParent(list_w), args, n); + + /* title */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + lbl_w = XmCreateLabel (list_w, "TTB", args, n); + set_xmstring (lbl_w, XmNlabelString, + "List, Sort and Save current Sky View objects"); + XtManageChild (lbl_w); + + /* format options */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, lbl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + lbl_w = XmCreateLabel (list_w, "FFL", args, n); + set_xmstring (lbl_w, XmNlabelString, + "Choose format and set file name for Save:"); + XtManageChild (lbl_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, lbl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, LSTINDENT); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + XtSetArg (args[n], XmNmarginWidth, 4); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + edbtb_w = XmCreateToggleButton (list_w, "EDB", args, n); + set_xmstring (edbtb_w, XmNlabelString, ".edb:"); + XtManageChild (edbtb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, lbl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, edbtb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + edbfn_w = XmCreateTextField (list_w, "EdbFilename", args, n); + defaultTextFN (edbfn_w, 1, "skylist.edb", NULL); + wtip (edbfn_w, "Name of .edb file to create"); + XtManageChild (edbfn_w); + sr_reg (edbfn_w, NULL, skylcategory, 1); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, edbfn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, LSTINDENT); n++; + XtSetArg (args[n], XmNmarginWidth, 4); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + txttb_w = XmCreateToggleButton (list_w, "Text", args, n); + set_xmstring (txttb_w, XmNlabelString, "Text:"); + XtManageChild (txttb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, edbfn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, txttb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + txtfn_w = XmCreateTextField (list_w, "TextFilename", args, n); + defaultTextFN (txtfn_w, 1, "skylist.txt", NULL); + wtip (txtfn_w, "Name of text file to create"); + XtManageChild (txtfn_w); + sr_reg (txtfn_w, NULL, skylcategory, 1); + + /* implement txt/edb as a radio pair */ + if (XmToggleButtonGetState(txttb_w) == XmToggleButtonGetState(edbtb_w)){ + XmToggleButtonSetState(txttb_w, True, 0); + XmToggleButtonSetState(edbtb_w, False, 0); + } + XtAddCallback (txttb_w, XmNvalueChangedCallback, sl_toggle_cb, + (XtPointer)edbtb_w); + XtAddCallback (edbtb_w, XmNvalueChangedCallback, sl_toggle_cb, + (XtPointer)txttb_w); + + sr_reg (txttb_w, NULL, skylcategory, 1); + + /* sort options heading */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, txtfn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + lbl_w = XmCreateLabel (list_w, "STB", args, n); + set_xmstring (lbl_w, XmNlabelString, + "Pick sort keys in desired order:"); + XtManageChild (lbl_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, txtfn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, lbl_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNsensitive, False); n++; + clpb_w = XmCreatePushButton (list_w, "Clear", args, n); + XtAddCallback (clpb_w, XmNactivateCallback, sl_clear_cb, NULL); + wtip (clpb_w, "Start key selection over"); + XtManageChild (clpb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, txtfn_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, clpb_w); n++; + XtSetArg (args[n], XmNleftOffset, 10); n++; + XtSetArg (args[n], XmNsensitive, False); n++; + undo_w = XmCreatePushButton (list_w, "Undo", args, n); + XtAddCallback (undo_w, XmNactivateCallback, sl_undo_cb, NULL); + wtip (undo_w, "Undo last key pick"); + XtManageChild (undo_w); + + /* sort option table */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, undo_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + tbl_w = XmCreateForm (list_w, "SortTable", args, n); + XtManageChild (tbl_w); + + sl_cr_sorttable(tbl_w); + + /* bottom controls */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton (list_w, "Save", args, n); + XtAddCallback (w, XmNactivateCallback, sl_save_cb, NULL); + wtip (w, "Write the file chosen above"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + w = XmCreatePushButton (list_w, "Sort", args, n); + XtAddCallback (w, XmNactivateCallback, sl_sort_cb, NULL); + wtip (w, "Rebuild the list with new settings"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 7); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + w = XmCreatePushButton (list_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, sl_close_cb, NULL); + wtip (w, "Close this window"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 10); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 12); n++; + w = XmCreatePushButton (list_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, sl_help_cb, NULL); + wtip (w, "Get more info"); + XtManageChild (w); + + /* scrolled text in between, beneath title and column headings */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tbl_w); n++; + XtSetArg (args[n], XmNtopOffset, 12); n++; /* lazy: nudge for PB */ + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + nl_w = XmCreateLabel (list_w, "STB", args, n); + set_xmstring (nl_w, XmNlabelString, + "List: 0 objects. Set columns with"); + XtManageChild (nl_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, tbl_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, nl_w); n++; + XtSetArg (args[n], XmNleftOffset, 4); n++; + dspb_w = XmCreatePushButton (list_w, "STB", args, n); + XtAddCallback (dspb_w, XmNactivateCallback, dm_setup_cb, NULL); + wtip (dspb_w,"Bring up Data Table setup window to change list columns"); + set_xmstring (dspb_w, XmNlabelString, "Data Table setup..."); + XtManageChild (dspb_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, dspb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 12); n++; /* lazy: margin + shadow */ + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNshadowThickness, 0); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + hdrtf_w = XmCreateTextField (list_w, "HdrTF", args, n); + XtManageChild (hdrtf_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, hdrtf_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNeditable, True); n++; + listt_w = XmCreateScrolledText (list_w, "List", args, n); + XtAddEventHandler (listt_w, ButtonPressMask, False, sl_info_eh, 0); + sr_reg (listt_w, "XEphem*SkyList*List.rows", skylcategory, 0); + XtManageChild (listt_w); +} + +/* create the popup skeleton */ +static void +sl_create_pu() +{ + Widget w; + Arg args[20]; + int n; + + /* make the popup shell */ + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + pu.pu_w = XmCreatePopupMenu (listt_w, "SLPopup", args, n); + + /* add the name, separator and controls. + * we always wants these so manage them now. + */ + pu.name_w = XmCreateLabel (pu.pu_w, "SLLab", args, 0); + XtManageChild (pu.name_w); + w = XmCreateSeparator (pu.pu_w, "SLSep", args, 0); + XtManageChild (w); + w = XmCreatePushButton (pu.pu_w, "Sky Mark", args, 0); + XtAddCallback (w, XmNactivateCallback, slpu_mark_cb, 0); + XtManageChild (w); + wtip (w, "Mark this object on the Sky View"); + w = XmCreatePushButton (pu.pu_w, "Delete", args, 0); + XtAddCallback (w, XmNactivateCallback, slpu_del_cb, 0); + XtManageChild (w); + wtip (w, "Delete this object from the list"); +} + +/* build the sort table in the given XmForm */ +static void +sl_cr_sorttable(f_w) +Widget f_w; +{ + Arg args[20]; + Widget fr_w; + Widget w; + int n; + int i; + + /* build in column-major order */ + for (i = 0; i < NSINFO; i++) { + SortInfo *sip = &sinfo[i]; + int r = i%NTROWS; /* row 0..(NTROWS-1)*/ + int c = i/NTROWS; /* col 0..(NTCOLS-1)*/ + int t = 100*r/NTROWS; /* top % */ + int b = 100*(r+1)/NTROWS; /* bottom % */ + int l = 100*c/NTCOLS; /* left % */ + int h = 100*(c+1)/NTCOLS; /* right % */ + int p = l + LBLPC/NTCOLS; /* left pushb % */ + + /* label to display sort position */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNtopPosition, t); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNbottomPosition, b); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, l); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, p); n++; + XtSetArg (args[n], XmNshadowThickness, 2); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + fr_w = XmCreateFrame (f_w, "STFr", args, n); + XtManageChild (fr_w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + w = XmCreateLabel (fr_w, sip->lname, args, n); + XtManageChild (w); + set_xmstring (w, XmNlabelString, " "); + sip->lw = w; + + /* push button to define sort position */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNtopPosition, t); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNbottomPosition, b); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, p); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, h); n++; + w = XmCreatePushButton (f_w, "STPB", args, n); + XtAddCallback (w, XmNactivateCallback, sl_so_cb, + (XtPointer)&sinfo[i]); + XtManageChild (w); + set_xmstring (w, XmNlabelString, sip->title); + sip->pw = w; + } +} + +/* called from either file format TB to implement a radio pair. + * client is the opposite TB. + */ +/* ARGSUSED */ +static void +sl_toggle_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int set = XmToggleButtonGetState(w); + Widget otherw = (Widget)client; + + XmToggleButtonSetState (otherw, !set, 0); +} + +/* called when the Close button is hit in the file list prompt */ +/* ARGSUSED */ +static void +sl_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (list_w); +} + +/* called when the help button is hit in the file list prompt */ +/* ARGSUSED */ +static void +sl_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { + "List and Save Sky View objects in two formats." + }; + + hlp_dialog ("SkyView_list", msg, sizeof(msg)/sizeof(msg[0])); + +} + +/* clear most recent entry from sortorder[]. + * if last, desensitize Clear and Undo. + * N.B. desensitizing is key because there is NO OVER or UNDERFLOW checking. + */ +static void +sl_clearlast() +{ + SortInfo *sip; + + /* clear last */ + sip = sortorder[--nsortorder]; + set_xmstring (sip->lw, XmNlabelString, " "); + XtSetSensitive (sip->pw, True); + + /* if none left, can not clear/undo now */ + if (!nsortorder) { + XtSetSensitive (clpb_w, False); + XtSetSensitive (undo_w, False); + } +} + +/* called when the Clear button is hit */ +/* ARGSUSED */ +static void +sl_clear_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* clear all */ + while (nsortorder) + sl_clearlast(); +} + +/* called when the Undo button is hit */ +/* ARGSUSED */ +static void +sl_undo_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sl_clearlast(); +} + +/* called when any sort-order table button is hit. + * client is pointer into sinfo[] + */ +/* ARGSUSED */ +static void +sl_so_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + SortInfo *sip = (SortInfo *)client; + char buf[10]; + + /* add this function next in sortforder list */ + sortorder[nsortorder++] = sip; + + /* indicate order */ + sprintf (buf, "%d", nsortorder); + set_xmstring (sip->lw, XmNlabelString, buf); + + /* can't use this again */ + XtSetSensitive (sip->pw, False); + + /* ok to clear and undo now */ + XtSetSensitive (clpb_w, True); + XtSetSensitive (undo_w, True); +} + +/* called when the Sort button is hit */ +/* ARGSUSED */ +static void +sl_sort_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sl_sort(); +} + +/* called when the Save button is hit */ +/* ARGSUSED */ +static void +sl_save_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *fn; + + /* get and sanity-check the appropriate file name */ + if (XmToggleButtonGetState(txttb_w)) { + fn = XmTextFieldGetString (txtfn_w); + if (strlen(fn) == 0) { + xe_msg (1, "Please enter a text file name."); + XtFree (fn); + return; + } + } else { + fn = XmTextFieldGetString (edbfn_w); + if (strlen(fn) == 0) { + xe_msg (1, "Please enter an .edb file name."); + XtFree (fn); + return; + } + } + + /* go, perhaps cautiously */ + if (existd (fn,NULL) == 0 && confirm()) { + char buf[1024]; + (void) sprintf (buf, "%s exists:\nAppend or Overwrite?", fn); + query (list_w, buf, "Append", "Overwrite", "Cancel", + sl_append_qcb, sl_write_qcb, NULL); + } else + sl_write_qcb(); /* just hammer it */ + + /* done with name */ + XtFree (fn); +} + +/* called when the Mark button is hit on the popup */ +/* ARGSUSED */ +static void +slpu_mark_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* sanity check */ + if (!pu.op) + return; + + sv_point (pu.op); +} + +/* called when the Delete button is hit on the popup */ +/* ARGSUSED */ +static void +slpu_del_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *txt; + int end; + + /* sanity check */ + if (!pu.op) + return; + + /* get text */ + txt = XmTextGetString (listt_w); + + /* delete from pu.linepos to next nl or EOS */ + for (end = pu.linepos; txt[end] && txt[end] != '\n'; end++) + continue; + if (txt[end] == '\n') + end++; + XmTextReplace (listt_w, pu.linepos, end, ""); + XmTextShowPosition (listt_w, pu.linepos); + + XtFree (txt); +} + +/* extra ButtonPress handler added to scrolled text. + * used to provide few more options based on text under pointer. + */ +static void +sl_info_eh (w, client, ev, continue_to_dispatch) +Widget w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + char objname[MAXNM]; + DBScan dbs; + ObjF *fs; + Obj *op; + int nfs; + char *txt; + int pos; + int i; + + /* only care about button3 press */ + if (!(ev->type == ButtonPress && ev->xbutton.button == Button3)) + return; + + /* where are we? */ + pos = XmTextXYToPos (w, ev->xbutton.x, ev->xbutton.y); + if (pos < 0) + return; + + /* find name at beginning of this line */ + txt = XmTextGetString (w); + for (; pos > 0; --pos) { + if (txt[pos] == '\n') { + pos++; + break; + } + } + i = sprintf (objname, "%*.*s", MAXNM-1, MAXNM-1, &txt[pos]); + + /* finished with txt now */ + XtFree (txt); + + /* dig out pure object name */ + if (XmToggleButtonGetState(txttb_w)) { + while (--i >= 0 && objname[i] == ' ') + objname[i] = '\0'; + if (i < 0) + return; + } else { + char *comma = strchr (objname, ','); + if (comma) + *comma = '\0'; + } + + /* find object with name matching that at start of this line */ + sv_getfldstars (&fs, &nfs); + for (db_scaninit(&dbs, ALLM, fs, nfs); (op = db_scan(&dbs)) != NULL; ) + if (!strcmp (op->o_name, objname)) + break; + if (!op) + return; /* no name found */ + + /* set up for popup and go */ + + /* create popup first time */ + if (!pu.pu_w) + sl_create_pu(); + + pu.linepos = pos; + pu.op = op; + set_xmstring (pu.name_w, XmNlabelString, objname); + XmMenuPosition (pu.pu_w, (XButtonPressedEvent *)ev); + XtManageChild (pu.pu_w); +} + +/* save the text widget in the appropriate file */ +static void +sl_save (how) +char *how; +{ + char *fn = XmToggleButtonGetState(txttb_w) + ? XmTextFieldGetString (txtfn_w) + : XmTextFieldGetString (edbfn_w); + FILE *fp = fopend (fn, NULL, how); + char *txt = XmTextGetString (listt_w); + + fprintf (fp, "%s", txt); + fclose (fp); + XtFree (txt); + XtFree (fn); +} + +/* called when we want to append .. filename already checked */ +static void +sl_append_qcb () +{ + sl_save ("a"); +} + +/* called when we want to ceate a new text-format file */ +static void +sl_write_qcb () +{ + sl_save ("w"); +} + +static int +spaceship (diff) +double diff; +{ + if (diff < 0) + return (-1); + if (diff > 0) + return (1); + return (0); +} + +/* compare 2 ObjInfos for RA, ala qsort() */ +static int +sort_ra (const void *v1, const void* v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->op->s_ra - lp2->op->s_ra)); +} + +/* compare 2 ObjInfos for HA, ala qsort() */ +static int +sort_ha (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->ha - lp2->ha)); +} + +/* compare 2 ObjInfos for alt, ala qsort() */ +static int +sort_alt (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp2->op->s_alt - lp1->op->s_alt)); +} + +/* compare 2 ObjInfos for zenith distance, ala qsort() */ +static int +sort_z (const void *v1, const void *v2) +{ + return (-sort_alt(v1, v2)); +} + +/* compare 2 ObjInfos for az, ala qsort() */ +static int +sort_az (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->op->s_az - lp2->op->s_az)); +} + +/* compare 2 ObjInfos for airmass, ala qsort() */ +static int +sort_airmass (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->Z - lp2->Z)); +} + +/* compare 2 ObjInfos for Dec, ala qsort() */ +static int +sort_dec (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->op->s_dec - lp2->op->s_dec)); +} + +/* compare 2 ObjInfos for rise time, ala qsort() */ +static int +sort_risetm (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int no1 = lp1->rs.rs_flags & (RS_NORISE|NORS); + int no2 = lp2->rs.rs_flags & (RS_NORISE|NORS); + + /* float entries with no rise info to end of list */ + if (no1) + return (no2 ? 0 : 1); + else if (no2) + return (-1); + else + return (spaceship (lp1->rs.rs_risetm - lp2->rs.rs_risetm)); +} + +/* compare 2 ObjInfos for rise az, ala qsort() */ +static int +sort_riseaz (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int no1 = lp1->rs.rs_flags & (RS_NORISE|NORS); + int no2 = lp2->rs.rs_flags & (RS_NORISE|NORS); + + /* float entries with no rise info to end of list */ + if (no1) + return (no2 ? 0 : 1); + else if (no2) + return (-1); + else + return (spaceship (lp1->rs.rs_riseaz - lp2->rs.rs_riseaz)); +} + +/* compare 2 ObjInfos for set time, ala qsort() */ +static int +sort_settm (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int no1 = lp1->rs.rs_flags & (RS_NOSET|NORS); + int no2 = lp2->rs.rs_flags & (RS_NOSET|NORS); + + /* float entries with no rise info to end of list */ + if (no1) + return (no2 ? 0 : 1); + else if (no2) + return (-1); + else + return (spaceship (lp1->rs.rs_settm - lp2->rs.rs_settm)); +} + +/* compare 2 ObjInfos for set az, ala qsort() */ +static int +sort_setaz (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int no1 = lp1->rs.rs_flags & (RS_NOSET|NORS); + int no2 = lp2->rs.rs_flags & (RS_NOSET|NORS); + + /* float entries with no rise info to end of list */ + if (no1) + return (no2 ? 0 : 1); + else if (no2) + return (-1); + else + return (spaceship (lp1->rs.rs_setaz - lp2->rs.rs_setaz)); +} + +/* compare 2 ObjInfos for transit time, ala qsort() */ +static int +sort_trantm (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int no1 = lp1->rs.rs_flags & (RS_ERROR|RS_NEVERUP|RS_NOTRANS); + int no2 = lp2->rs.rs_flags & (RS_ERROR|RS_NEVERUP|RS_NOTRANS); + + /* float entries with no transit info to end of list */ + if (no1) + return (no2 ? 0 : 1); + else if (no2) + return (-1); + else + return (spaceship (lp1->rs.rs_trantm - lp2->rs.rs_trantm)); +} + +/* compare 2 ObjInfos for transit alt, ala qsort() */ +static int +sort_tranalt (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int no1 = lp1->rs.rs_flags & (RS_ERROR|RS_NEVERUP|RS_NOTRANS); + int no2 = lp2->rs.rs_flags & (RS_ERROR|RS_NEVERUP|RS_NOTRANS); + + /* float entries with no transit info to end of list */ + if (no1) + return (no2 ? 0 : 1); + else if (no2) + return (-1); + else + return (spaceship (lp1->rs.rs_tranalt - lp2->rs.rs_tranalt)); +} + +/* compare 2 ObjInfos for galactic latitude, ala qsort() */ +static int +sort_glat (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->glat - lp2->glat)); +} + +/* compare 2 ObjInfos for galactic longitude, ala qsort() */ +static int +sort_glng (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->glng - lp2->glng)); +} + +/* compare 2 ObjInfos for ecliptic latitude, ala qsort() */ +static int +sort_eclat (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->eclat - lp2->eclat)); +} + +/* compare 2 ObjInfos for ecliptic longitude, ala qsort() */ +static int +sort_eclng (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp1->eclng - lp2->eclng)); +} + +/* compare 2 ObjInfos for heliocentric latitude, ala qsort() */ +static int +sort_hlat (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int ss1 = is_ssobj(lp1->op); + int ss2 = is_ssobj(lp2->op); + + /* float non-solsys objects to end of list */ + if (ss1) { + if (ss2) + return (spaceship(lp1->op->s_hlat - lp2->op->s_hlat)); + return (-1); + } else + return (ss2 ? 1 : 0); +} + +/* compare 2 ObjInfos for heliocentric longitude, ala qsort() */ +static int +sort_hlng (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int ss1 = is_ssobj(lp1->op); + int ss2 = is_ssobj(lp2->op); + + /* float non-solsys objects to end of list */ + if (ss1) { + if (ss2) + return (spaceship(lp1->op->s_hlong - lp2->op->s_hlong)); + return (-1); + } else + return (ss2 ? 1 : 0); +} + +/* compare 2 ObjInfos for earth distance, ala qsort() */ +static int +sort_edist (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int ss1 = is_ssobj(lp1->op); + int ss2 = is_ssobj(lp2->op); + + /* float non-solsys objects to end of list */ + if (ss1) { + if (ss2) + return (spaceship(lp1->op->s_edist - lp2->op->s_edist)); + return (-1); + } else + return (ss2 ? 1 : 0); +} + +/* compare 2 ObjInfos for sun distance, ala qsort() */ +static int +sort_sdist (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + int ss1 = is_ssobj(lp1->op); + int ss2 = is_ssobj(lp2->op); + + /* float non-solsys objects to end of list */ + if (ss1) { + if (ss2) + return (spaceship(lp1->op->s_sdist - lp2->op->s_sdist)); + return (-1); + } else + return (ss2 ? 1 : 0); +} + +/* compare 2 ObjInfos for elongation , ala qsort() */ +static int +sort_elong (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp2->op->s_elong - lp1->op->s_elong)); +} + +/* compare 2 ObjInfos for magnitude, ala qsort() */ +static int +sort_mag (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(get_mag(lp1->op) - get_mag(lp2->op))); +} + +/* compare 2 ObjInfos for constellation name, ala qsort() */ +static int +sort_cns (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (strcmp(lp1->cns, lp2->cns)); +} + +/* compare 2 ObjInfos for ura[], ala qsort() */ +static int +sort_ura (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (strcmp(lp1->ura, lp2->ura)); +} + +/* compare 2 ObjInfos for u2k[], ala qsort() */ +static int +sort_u2k (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (strcmp(lp1->u2k, lp2->u2k)); +} + +/* compare 2 ObjInfos for msa[] name, ala qsort() */ +static int +sort_msa (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (strcmp(lp1->msa, lp2->msa)); +} + +/* compare 2 ObjInfos for f_spect[], ala qsort() */ +static int +sort_spect (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + Obj *op1 = lp1->op; + Obj *op2 = lp2->op; + int o1ok= is_type(op1,FIXEDM) && op1->f_class!='G' && op1->f_spect[0]; + int o2ok= is_type(op2,FIXEDM) && op2->f_class!='G' && op2->f_spect[0]; + + if (!o1ok) + return (o2ok ? 1 : 0); + if (!o2ok) + return (o1ok ? -1 : 0); + return (strncmp (op1->f_spect, op2->f_spect, sizeof(op1->f_spect))); +} + +/* compare 2 ObjInfos for description, ala qsort() */ +static int +sort_desc (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (strcmp(lp1->desc, lp2->desc)); +} + +/* compare 2 ObjInfos for name, ala qsort() */ +static int +sort_name (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + char *s1 = lp1->op->o_name; + char *s2 = lp2->op->o_name; + + return (strnncmp(s1, s2)); +} + +/* compare 2 ObjInfos for size, ala qsort() */ +static int +sort_size (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + return (spaceship(lp2->op->s_size - lp1->op->s_size)); +} + +/* compare 2 ObjInfos for their separation from the current datatable sep + * object, ala qsort() + */ +static int +sort_sep (const void *v1, const void *v2) +{ + ObjInfo *lp1 = (ObjInfo *)v1; + ObjInfo *lp2 = (ObjInfo *)v2; + double sep1 = dm_sep (lp1->op); + double sep2 = dm_sep (lp2->op); + return (spaceship (sep1 - sep2)); +} + +/* compare 2 ObjInfos according to each sort key, ala qsort() */ +static int +mastercmp_f (const void *v1, const void *v2) +{ + int i; + + for (i = 0; i < nsortorder; i++) { + int c = (*sortorder[i]->cmp_f)(v1, v2); + if (c) + return (c); + } + + return (0); +} + +/* append src to *dstp, growing *dstp as required. + * update *dstp and return new final length, sans trailing '\0'. + */ +static int +mstrcat (dstp, dl, src, sl) +char **dstp, *src; +int dl, sl; +{ + char *newdst = XtRealloc (*dstp, sl+dl+1); + strcpy (newdst+dl, src); + *dstp = newdst; + return (sl+dl); +} + +/* fill listt_w with oinfo[noinfo] in ".edb" format */ +static void +fill_edbfmt (oinfo, noinfo) +ObjInfo *oinfo; +int noinfo; +{ + char *txt = NULL; + int txtl = 0; + char buf[256]; + char lbuf[256]; + int l, i; + + /* just install each db object */ + for (i = 0; i < noinfo; i++) { + db_write_line (oinfo[i].op, lbuf); + l = sprintf (buf, "%s\n", lbuf); + txtl = mstrcat (&txt, txtl, buf, l); + } + + /* N.B. removing last nl looks better here, but complicates line + * deleting and must be put back when saving. + */ + + /* no header */ + XmTextFieldSetString (hdrtf_w, ""); + + /* install in text widget, then finished */ + XmTextSetString (listt_w, txt); + XtFree (txt); +} + +/* fill listt_w with oinfo[noinfo] in ".txt" format */ +static void +fill_txtfmt (oinfo, noinfo) +ObjInfo *oinfo; +int noinfo; +{ + static char dashes[] = "--------------------------"; + Now *np = mm_get_now(); + char *txt = NULL; + int txtl = 0; + char tsbuf[64]; + char buf[256]; + double tmp; + int lineno; + int l, i; + + /* summarize the current circumstances */ + mjd_year (epoch == EOD ? mjd : epoch, &tmp); + fs_timestamp (np, tsbuf); + l = sprintf (buf, "XEphem %s Sky List: %s %s place, Epoch %7.2f, %s\n", + PATCHLEVEL, + pref_get (PREF_EQUATORIAL) == PREF_TOPO ? "Topocentric" + : "Geocentric", + epoch == EOD ? "Apparent" : "Mean", + tmp, tsbuf); + txtl = mstrcat (&txt, txtl, buf, strlen(buf)); + + /* print name, Data Table columns, description. + * column heading spacing based on size of data. + * lineno is used to build up a header.. goofy but works. + */ + lineno = 0; + for (i = 0; i < noinfo; i++) { + ObjInfo *lp = &oinfo[i]; + Obj *op = lp->op; + char dbbuf[64]; + DMCol c; + + switch (lineno) { + case 0: + l = sprintf (buf, "%-*s", MAXNM-1, "Name"); + break; + case 1: + l = sprintf (buf, "%.*s", MAXNM-1, dashes); + break; + default: + l = sprintf (buf, "%-*.*s", MAXNM-1, MAXNM-1, op->o_name); + break; + } + txtl = mstrcat (&txt, txtl, buf, l); + + for (c = 0; c < NDMCol; c++) { + if (!dm_colFormat (np, op, &lp->rs, c, dbbuf)) { + int f, h; + switch (lineno) { + case 0: /* column heading */ + f = strlen(dbbuf); /* width of field */ + dm_colHeader (c, dbbuf); + h = strlen(dbbuf); /* width of heading */ + l = sprintf (buf, " %*s%-*s", (f-h)/2, "", f-(f-h)/2, + dbbuf); + break; + case 1: /* dashes */ + f = strlen(dbbuf); + l = sprintf (buf, " %.*s", f, dashes); + break; + default: /* real field :) */ + l = sprintf (buf, " %s", dbbuf); + break; + } + txtl = mstrcat (&txt, txtl, buf, l); + } + } + + switch (lineno) { + case 0: + l = sprintf (buf, " Type\n"); + i--; /* repeat */ + break; + case 1: + l = sprintf (buf, " %.4s\n", dashes); + i--; /* repeat */ + break; + default: + l = sprintf (buf, " %s\n", lp->desc); + break; + } + txtl = mstrcat (&txt, txtl, buf, l); + + lineno++; + } + + /* N.B. removing last nl looks better here, but complicates line + * deleting and must be put back when saving. + */ + + /* extract 2nd line and use as column heading */ + sl_colhdr (txt); + + /* install in text widget, then finished */ + XmTextSetString (listt_w, txt); + XtFree (txt); +} + +/* extract 2nd line of list and use as column heading. + * maintain common background color. + */ +static void +sl_colhdr (txt) +char *txt; +{ + Pixel bg; + char *nl1, *nl2; + + nl1 = strchr (txt, '\n'); + nl2 = strchr (nl1+1, '\n'); + + *nl2 = '\0'; + get_something (nl_w, XmNbackground, (XtArgVal)&bg); + set_something (hdrtf_w, XmNbackground, (XtArgVal)bg); + XmTextFieldSetString (hdrtf_w, nl1+1); + *nl2 = '\n'; +} + +/* sort, then fill listt_w with report. + * also show count in nl_w. + */ +static void +sl_sort () +{ + Now *np = mm_get_now(); + ObjInfo *oinfo = NULL; + DBScan dbs; + char buf[128]; + int noinfo; + double e; + ObjF *fs; + int nfs; + Obj *op; + + if (!nsortorder) { + xe_msg (1, "Please pick at least one sort key"); + return; + } + + watch_cursor(1); + + /* scan db for all objects on Sky screen, add to list */ + e = epoch == EOD ? mjd : epoch; + sv_getfldstars (&fs, &nfs); + noinfo = 0; + for (db_scaninit(&dbs, ALLM, fs, nfs); (op = db_scan(&dbs)) != NULL; ) { + ObjInfo *lp; + + if (!(op->o_flags & OBJF_ONSCREEN)) + continue; + + /* add to list */ + oinfo = (ObjInfo *) XtRealloc ((void*)oinfo, + (noinfo+1)*sizeof(ObjInfo)); + lp = &oinfo[noinfo++]; + lp->op = op; + + /* add supporting info for sorts */ + dm_riset (np, op, &lp->rs); + lp->cns = cns_name (cns_pick (op->s_ra, op->s_dec, e)); + eq_gal (e, op->s_ra, op->s_dec, &lp->glat, &lp->glng); + eq_ecl (e, op->s_gaera, op->s_gaedec, &lp->eclat, &lp->eclng); + airmass (op->s_alt, &lp->Z); + lp->desc = obj_description (op); + radec2ha (np, op->s_ra, op->s_dec, &lp->ha); + strncpy (lp->ura, um_atlas(op->s_ra, op->s_dec), sizeof(lp->ura)); + strncpy (lp->u2k, u2k_atlas(op->s_ra, op->s_dec), sizeof(lp->u2k)); + strncpy (lp->msa, msa_atlas(op->s_ra, op->s_dec), sizeof(lp->msa)); + } + + /* sort as desired */ + qsort ((void *)oinfo, noinfo, sizeof(ObjInfo), mastercmp_f); + + /* display list, else clear */ + if (!noinfo) { + XmTextSetString (listt_w, ""); + XmTextFieldSetString (hdrtf_w, ""); + } else if (XmToggleButtonGetState(txttb_w)) + fill_txtfmt (oinfo, noinfo); + else + fill_edbfmt (oinfo, noinfo); + + /* show count -- N.B. match string set when created */ + sprintf (buf, "List: %d objects. Choose columns with", noinfo); + set_xmstring (nl_w, XmNlabelString, buf); + + /* free */ + XtFree ((void *)oinfo); + + watch_cursor(0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skylist.c,v $ $Date: 2006/02/05 21:10:43 $ $Revision: 1.42 $ $Name: $"}; diff --git a/GUI/xephem/skylist.h b/GUI/xephem/skylist.h new file mode 100644 index 0000000..6fb6815 --- /dev/null +++ b/GUI/xephem/skylist.h @@ -0,0 +1,23 @@ +#ifndef _SKYLIST_H +#define _SKYLIST_H + +/* include file to hook skyviewmenu.c and skylist.c together. + */ + +/* Obj.flags or TSky flags values */ +#define OBJF_ONSCREEN FUSER0 /* bit set if obj is on screen */ +#define OBJF_RLABEL FUSER1 /* set if right-label is to be on */ +#define OBJF_LLABEL FUSER4 /* set if left-label is to be on */ +#define OBJF_PERSLB (OBJF_RLABEL|OBJF_LLABEL) /* either means persistent */ +#define OBJF_NLABEL FUSER5 /* set if name-label is to be on */ +#define OBJF_MLABEL FUSER6 /* set if magnitude-label is to be on */ + + +extern void sl_manage(void); +extern void sl_unmanage(void); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: skylist.h,v $ $Date: 2003/05/02 04:36:21 $ $Revision: 1.6 $ $Name: $ + */ + +#endif /* _SKYLIST_H */ diff --git a/GUI/xephem/skytoolbar.c b/GUI/xephem/skytoolbar.c new file mode 100644 index 0000000..97c1f59 --- /dev/null +++ b/GUI/xephem/skytoolbar.c @@ -0,0 +1,1214 @@ +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +static void svtb_ct_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_tt_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_cyl_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_sph_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_toggle_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_monument_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_contrast_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_glass_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_gauss_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_slice_cb (Widget w, XtPointer client, XtPointer call); +static void svtb_roi_cb (Widget w, XtPointer client, XtPointer call); + +/* bitmaps and basic organization for skyvnew toolbars */ + +#define zoomin_width 21 +#define zoomin_height 21 +static unsigned char zoomin_bits[] = { + 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x38, 0x38, 0x00, 0x0c, 0x60, 0x00, + 0x84, 0x43, 0x00, 0x86, 0xc3, 0x00, 0x82, 0x83, 0x00, 0xf2, 0x9f, 0x00, + 0xf2, 0x9f, 0x00, 0xf2, 0x9f, 0x00, 0x82, 0x83, 0x00, 0x86, 0xc3, 0x00, + 0x84, 0x43, 0x00, 0x0c, 0xe0, 0x00, 0x38, 0xf8, 0x00, 0xe0, 0xef, 0x03, + 0x00, 0x80, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x1c}; + +#define zoomin_ins_width 21 +#define zoomin_ins_height 21 +static unsigned char zoomin_ins_bits[] = { + 0x00, 0x00, 0x00, 0x60, 0x09, 0x00, 0x28, 0x28, 0x00, 0x0c, 0x40, 0x00, + 0x80, 0x02, 0x00, 0x06, 0xc1, 0x00, 0x82, 0x82, 0x00, 0x50, 0x15, 0x00, + 0xa2, 0x8a, 0x00, 0x50, 0x15, 0x00, 0x80, 0x82, 0x00, 0x06, 0x41, 0x00, + 0x80, 0x82, 0x00, 0x04, 0xa0, 0x00, 0x28, 0x08, 0x01, 0x60, 0x35, 0x02, + 0x00, 0x40, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x14}; + +#define unzoom_width 21 +#define unzoom_height 21 +static unsigned char unzoom_bits[] = { + 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x38, 0x38, 0x00, 0x0c, 0x60, 0x00, + 0x04, 0x40, 0x00, 0x06, 0xc0, 0x00, 0x02, 0x80, 0x00, 0xf2, 0x9f, 0x00, + 0xf2, 0x9f, 0x00, 0xf2, 0x9f, 0x00, 0x02, 0x80, 0x00, 0x06, 0xc0, 0x00, + 0x04, 0x40, 0x00, 0x0c, 0xe0, 0x00, 0x38, 0xf8, 0x00, 0xe0, 0xef, 0x03, + 0x00, 0x80, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x1c}; + +#define unzoom_ins_width 21 +#define unzoom_ins_height 21 +static unsigned char unzoom_ins_bits[] = { + 0x00, 0x00, 0x00, 0x60, 0x09, 0x00, 0x28, 0x28, 0x00, 0x0c, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x02, 0x80, 0x00, 0x50, 0x15, 0x00, + 0xa2, 0x8a, 0x00, 0x50, 0x15, 0x00, 0x00, 0x80, 0x00, 0x06, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x04, 0xa0, 0x00, 0x28, 0x08, 0x01, 0x60, 0x35, 0x02, + 0x00, 0x40, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x14}; + +#define brighter_width 21 +#define brighter_height 21 +static unsigned char brighter_bits[] = { + 0x88, 0x24, 0x02, 0x10, 0x15, 0x01, 0x20, 0x80, 0x10, 0x07, 0x1f, 0x0c, + 0x98, 0x3f, 0x03, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xcf, 0x7f, 0x1e, + 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0x00}; + +#define dimmer_width 21 +#define dimmer_height 21 +static unsigned char dimmer_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, + 0x80, 0x2a, 0x00, 0x40, 0x55, 0x00, 0xc0, 0x6a, 0x00, 0x40, 0x55, 0x00, + 0xc0, 0x6a, 0x00, 0x40, 0x55, 0x00, 0x80, 0x2a, 0x00, 0x80, 0x35, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0x00}; + +#define automag_width 21 +#define automag_height 21 +static unsigned char automag_bits[] = { + 0x00, 0x91, 0x00, 0x00, 0xa2, 0x02, 0x30, 0x04, 0x00, 0xc0, 0xe0, 0x03, + 0x00, 0xb3, 0x04, 0x00, 0x78, 0x09, 0x00, 0xb8, 0x08, 0x00, 0x78, 0x09, + 0x00, 0xb8, 0x08, 0xf8, 0x78, 0x09, 0x06, 0xb3, 0x04, 0x02, 0x72, 0x05, + 0x89, 0xe4, 0x02, 0x01, 0xe4, 0x03, 0x01, 0xe4, 0x03, 0x89, 0x44, 0x01, + 0x71, 0xe4, 0x03, 0x02, 0xc2, 0x01, 0x06, 0xe3, 0x03, 0xf8, 0xc0, 0x01, + 0x00, 0x00, 0x00}; + +#define constel_width 21 +#define constel_height 21 +static unsigned char constel_bits[] = { + 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x40, 0x12, 0x0e, 0x47, 0x28, 0x01, + 0x47, 0x28, 0x06, 0x47, 0x28, 0x08, 0x82, 0x73, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x9c, 0x0f, 0x00, 0x7c, 0x0e, 0x00, + 0x1c, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x1c, + 0x00, 0x10, 0x1c, 0x00, 0x10, 0x1e, 0x00, 0x70, 0x01, 0x00, 0xf0, 0x00, + 0x00, 0x70, 0x00}; + +#define grid_width 21 +#define grid_height 21 +static unsigned char grid_bits[] = { + 0x82, 0x20, 0x08, 0xff, 0xff, 0x1f, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, + 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0xff, 0xff, 0x1f, + 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, + 0x82, 0x20, 0x08, 0xff, 0xff, 0x1f, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, + 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0xff, 0xff, 0x1f, + 0x82, 0x20, 0x08}; + +#define what_width 50 +#define what_height 21 +static unsigned char what_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x10, 0x24, 0x00, 0x00, 0x00, 0x00, 0x43, 0x10, 0x24, 0x00, 0x20, + 0x00, 0x80, 0x43, 0x28, 0x24, 0x00, 0x20, 0x00, 0xc0, 0x83, 0x28, 0xa2, + 0xc3, 0xf3, 0x00, 0xe0, 0x83, 0x28, 0x62, 0x66, 0x26, 0x00, 0xf0, 0x83, + 0x28, 0x22, 0x04, 0x24, 0x00, 0xe0, 0x03, 0x45, 0x21, 0xc4, 0x27, 0x00, + 0xc0, 0x03, 0x45, 0x21, 0x64, 0x24, 0x00, 0x80, 0x03, 0x45, 0x21, 0x24, + 0x24, 0x00, 0x00, 0x03, 0x82, 0x20, 0x64, 0x26, 0x00, 0x00, 0x02, 0x82, + 0x20, 0xc4, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define how_width 21 +#define how_height 40 +static unsigned char how_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x03, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x10, 0x00, + 0x80, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1c, 0x00, + 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x80, 0x61, 0x00, + 0x80, 0x40, 0x00, 0x80, 0x40, 0x00, 0x80, 0x61, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x02, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define where_width 21 +#define where_height 56 +static unsigned char where_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, + 0x00, 0x1c, 0x00, 0x80, 0x03, 0x00, 0x60, 0x00, 0x00, 0x80, 0x03, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x03, 0x00, + 0x60, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x60, 0x1a, 0x00, + 0x20, 0x12, 0x00, 0x20, 0x12, 0x00, 0x60, 0x1a, 0x00, 0x40, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x0f, 0x00, + 0x60, 0x1a, 0x00, 0x20, 0x12, 0x00, 0x20, 0x12, 0x00, 0x60, 0x1a, 0x00, + 0x40, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define orient_width 21 +#define orient_height 21 +static unsigned char orient_bits[] = { + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x15, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x44, 0x04, 0x07, 0xff, 0xff, 0x1f, 0x44, 0x04, 0x07, + 0x04, 0x80, 0x01}; + +#define orient_ins_width 21 +#define orient_ins_height 21 +static unsigned char orient_ins_bits[] = { + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x44, 0x04, 0x05, 0xaa, 0xaa, 0x12, 0x44, 0x04, 0x05, + 0x00, 0x80, 0x00}; + +#define magscale_width 21 +#define magscale_height 21 +static unsigned char magscale_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x88, 0x01, 0x30, 0x48, 0x01, 0x30, 0xc8, 0x01, + 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xc8, 0x01, 0x78, 0x08, 0x01, 0x78, 0xc8, 0x01, 0x30, 0x48, 0x00, + 0x00, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc8, 0x01, + 0xf8, 0x48, 0x01, 0xf8, 0x48, 0x01, 0xf8, 0x48, 0x01, 0x70, 0xc8, 0x01, + 0x00, 0x00, 0x00}; + +#define planes_width 21 +#define planes_height 21 +static unsigned char planes_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x08, 0x06, 0x01, + 0x90, 0x01, 0x02, 0x60, 0x00, 0x02, 0x60, 0x00, 0x02, 0x90, 0x00, 0x02, + 0x10, 0x01, 0x02, 0x08, 0x02, 0x01, 0x08, 0x00, 0x01, 0x04, 0x80, 0x00, + 0x04, 0x80, 0x00, 0x04, 0x40, 0x00, 0x04, 0x20, 0x00, 0x04, 0x98, 0x00, + 0x08, 0x06, 0x01, 0xf0, 0x01, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define fliplr_width 21 +#define fliplr_height 21 +static unsigned char fliplr_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0xe0, 0x00, 0xf0, 0xff, 0x03, 0x08, 0xe0, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0xc0, 0x01, 0x04, 0xf0, 0xff, 0x03, 0xc0, 0x01, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define fliptb_width 21 +#define fliptb_height 21 +static unsigned char fliptb_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x40, 0x40, 0x00, 0x40, 0x40, 0x00, 0x40, 0xe0, 0x00, 0x40, 0xe0, 0x00, + 0x40, 0xf0, 0x01, 0x40, 0x50, 0x01, 0x40, 0x40, 0x00, 0x40, 0x40, 0x00, + 0x50, 0x41, 0x00, 0xf0, 0x41, 0x00, 0xe0, 0x40, 0x00, 0xe0, 0x40, 0x00, + 0x40, 0x40, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define horizon_width 21 +#define horizon_height 21 +static unsigned char horizon_bits[] = { + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xd0, 0x00, 0x00, 0xa8, 0x00, 0x00, + 0x58, 0x03, 0x00, 0x84, 0x02, 0x00, 0x04, 0x04, 0x00, 0x02, 0x08, 0x00, + 0x01, 0x08, 0x00, 0x10, 0x10, 0x07, 0x10, 0xa4, 0x0d, 0x38, 0xe4, 0x08, + 0x10, 0x46, 0x10, 0x74, 0x4c, 0x00, 0x1c, 0x95, 0x01, 0x30, 0x0e, 0x02, + 0x9c, 0x04, 0x00, 0x70, 0x04, 0x00, 0x16, 0x00, 0x00, 0xfc, 0x00, 0x00, + 0x10, 0x00, 0x00}; + +#define cyl_width 21 +#define cyl_height 21 +static unsigned char cyl_bits[] = { + 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x38, 0x80, 0x03, 0x06, 0x00, 0x0c, + 0x01, 0x00, 0x10, 0x01, 0x00, 0x10, 0x07, 0x00, 0x1c, 0x39, 0x80, 0x1f, + 0xe1, 0xff, 0x1e, 0x01, 0x40, 0x1f, 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, + 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, + 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x06, 0x80, 0x0e, 0x38, 0xc0, 0x03, + 0xc0, 0x7f, 0x00}; + +#define cyl_ins_width 21 +#define cyl_ins_height 21 +static unsigned char cyl_ins_bits[] = { + 0x00, 0x00, 0x00, 0x80, 0x2a, 0x00, 0x28, 0x80, 0x02, 0x02, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x04, 0x00, 0x08, 0x29, 0x00, 0x15, + 0x80, 0xaa, 0x0a, 0x01, 0x40, 0x15, 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, + 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, + 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x04, 0x80, 0x0a, 0x28, 0x40, 0x01, + 0x80, 0x2a, 0x00}; + +#define sph_width 21 +#define sph_height 21 +static unsigned char sph_bits[] = { + 0x80, 0x3f, 0x00, 0x60, 0xf0, 0x00, 0x18, 0xe0, 0x03, 0x04, 0xd0, 0x07, + 0x04, 0xa0, 0x07, 0x02, 0x40, 0x0f, 0x02, 0xa0, 0x0f, 0x01, 0x40, 0x1f, + 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, + 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x02, 0xa0, 0x0f, 0x02, 0x40, 0x0f, + 0x04, 0xa0, 0x07, 0x04, 0xd0, 0x07, 0x18, 0xe0, 0x03, 0x60, 0xf0, 0x00, + 0x80, 0x3f, 0x00}; + +#define sph_ins_width 21 +#define sph_ins_height 21 +static unsigned char sph_ins_bits[] = { + 0x80, 0x2a, 0x00, 0x40, 0x50, 0x01, 0x10, 0xa0, 0x02, 0x04, 0x50, 0x05, + 0x00, 0xa0, 0x0a, 0x02, 0x40, 0x05, 0x00, 0xa0, 0x0a, 0x01, 0x40, 0x15, + 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, + 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x00, 0xa0, 0x0a, 0x02, 0x40, 0x05, + 0x00, 0xa0, 0x0a, 0x04, 0x50, 0x05, 0x10, 0xa0, 0x02, 0x40, 0x50, 0x01, + 0x80, 0x2a, 0x00}; + +#define names_width 21 +#define names_height 21 +static unsigned char names_bits[] = { + 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x44, 0x77, 0x07, 0x44, 0x55, 0x05, 0x44, 0x55, 0x05, + 0x44, 0x57, 0x05, 0x44, 0x51, 0x05, 0x28, 0x51, 0x05, 0x10, 0x77, 0x0f, + 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x20, 0x40, 0x00, 0x70, 0x70, 0x00, + 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define fstars_width 21 +#define fstars_height 21 +static unsigned char fstars_bits[] = { + 0x80, 0x00, 0x48, 0xc4, 0x44, 0x41, 0x0a, 0x00, 0x90, 0x23, 0xb0, 0x28, + 0x62, 0x0a, 0x85, 0x10, 0xa0, 0x10, 0xb5, 0x84, 0x2a, 0x40, 0x10, 0x61, + 0x12, 0xb1, 0xb0, 0x42, 0x24, 0x01, 0x0c, 0x80, 0xc4, 0x41, 0x30, 0x02, + 0x04, 0xad, 0x04, 0x82, 0x00, 0x28, 0x24, 0xa4, 0x05, 0x18, 0x01, 0x80, + 0x62, 0xa4, 0x88, 0x12, 0x04, 0x04, 0x81, 0x18, 0x44, 0xc8, 0x80, 0xc0, + 0x00, 0x02, 0x08}; + +#define smallgap_width 7 +#define smallgap_height 7 +static unsigned char smallgap_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define clusters_width 21 +#define clusters_height 21 +static unsigned char clusters_bits[] = { + 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x04, 0x80, 0x74, 0x00, + 0xc0, 0x21, 0x00, 0x88, 0x04, 0x00, 0x00, 0x5e, 0x00, 0x00, 0xe5, 0x00, + 0x44, 0x40, 0x00, 0xe0, 0x12, 0x00, 0x40, 0xb8, 0x00, 0x00, 0x12, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define galaxies_width 21 +#define galaxies_height 21 +static unsigned char galaxies_bits[] = { + 0x00, 0x07, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0x00, 0xe0, 0x60, 0x00, 0xe0, + 0x10, 0x00, 0xe0, 0x70, 0x0f, 0xe0, 0x70, 0x0f, 0xe0, 0xf0, 0x1f, 0xe0, + 0xf0, 0x3f, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, 0xff, 0xe0, + 0x80, 0xff, 0xe0, 0x00, 0xef, 0xe0, 0x00, 0xc0, 0xe0, 0x00, 0xc0, 0xe0, + 0x00, 0x20, 0xe0, 0x00, 0x30, 0xe0, 0x00, 0x0e, 0xe0, 0x00, 0x0e, 0xe0, + 0x00, 0x00, 0xe0}; + +#define nebulae_width 21 +#define nebulae_height 21 +static unsigned char nebulae_bits[] = { + 0x00, 0x06, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xff, 0x00, 0x80, 0xff, 0x01, + 0xf0, 0xff, 0x01, 0xf0, 0xff, 0x03, 0xf0, 0xf9, 0x03, 0xf0, 0xf8, 0x03, + 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x03, + 0x10, 0xf8, 0x07, 0xa4, 0xfa, 0x03, 0x51, 0xfd, 0x07, 0xa4, 0xfe, 0x0b, + 0x52, 0xff, 0x05, 0xad, 0xff, 0x0b, 0xf2, 0xff, 0x17, 0xff, 0xff, 0x0b, + 0xff, 0xff, 0x1f}; + +#define stars_width 21 +#define stars_height 21 +static unsigned char stars_bits[] = { + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x80, 0x1c, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x82, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00}; + +#define other_width 21 +#define other_height 21 +static unsigned char other_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x10, 0x20, 0x02, 0x10, 0xd0, 0x05, + 0x7c, 0x50, 0x05, 0x10, 0xd0, 0x05, 0x10, 0x20, 0x02, 0x00, 0xc0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, + 0x80, 0x0a, 0x04, 0x00, 0x05, 0x08, 0x00, 0x02, 0x08, 0x00, 0x00, 0x08, + 0x44, 0x40, 0x04, 0x6c, 0x80, 0x03, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define solsys_width 21 +#define solsys_height 21 +static unsigned char solsys_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0xc0, 0xf1, 0x00, 0x20, 0xe0, 0x00, + 0x10, 0x00, 0x01, 0x08, 0x00, 0x02, 0x04, 0x00, 0x04, 0x04, 0x00, 0x04, + 0x04, 0x0e, 0x04, 0x02, 0x1f, 0x08, 0x02, 0x1f, 0x08, 0x02, 0x1f, 0x08, + 0x04, 0x0e, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x04, 0x08, 0x00, 0x02, + 0x10, 0x00, 0x01, 0x20, 0x80, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0x00}; + +#define dss_width 21 +#define dss_height 21 +static unsigned char dss_bits[] = { + 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x30, 0x40, 0x0f, + 0xf0, 0x7f, 0x0f, 0xfc, 0xff, 0x0b, 0x0c, 0x00, 0x0c, 0x86, 0x3f, 0x08, + 0xc6, 0x7f, 0x0c, 0xe2, 0xf1, 0x08, 0x72, 0xc0, 0x0d, 0x72, 0xc2, 0x09, + 0x32, 0x82, 0x0d, 0xb2, 0x8d, 0x09, 0x32, 0x82, 0x0d, 0x72, 0xc2, 0x09, + 0x76, 0xc0, 0x0d, 0xe6, 0xf1, 0x08, 0xdc, 0x7f, 0x07, 0x80, 0x3f, 0x00, + 0x00, 0x00, 0x00}; + +#define glass_width 21 +#define glass_height 21 +static unsigned char glass_bits[] = { + 0x88, 0x80, 0x01, 0x20, 0x80, 0x01, 0x00, 0x10, 0x04, 0xf8, 0xff, 0x00, + 0x09, 0x80, 0x02, 0x08, 0x80, 0x00, 0xc8, 0x80, 0x00, 0xe8, 0x81, 0x10, + 0xe8, 0xc1, 0x00, 0xc8, 0xe0, 0x00, 0x0a, 0xe0, 0x06, 0x08, 0xc6, 0x06, + 0x08, 0x8f, 0x00, 0x09, 0x8f, 0x08, 0x08, 0x86, 0x00, 0xfa, 0xff, 0x08, + 0x40, 0x00, 0x00, 0x00, 0x86, 0x02, 0x06, 0x06, 0x00, 0x46, 0x10, 0x08, + 0x00, 0x02, 0x01}; + +#define glass_ins_width 21 +#define glass_ins_height 21 +static unsigned char glass_ins_bits[] = { + 0x08, 0x00, 0x01, 0x20, 0x80, 0x00, 0x00, 0x10, 0x04, 0x50, 0x55, 0x00, + 0x09, 0x80, 0x02, 0x00, 0x00, 0x00, 0x48, 0x81, 0x00, 0xa0, 0x00, 0x00, + 0x48, 0xa1, 0x00, 0xa0, 0x40, 0x00, 0x08, 0xa0, 0x02, 0x00, 0x45, 0x00, + 0x08, 0x8a, 0x00, 0x01, 0x05, 0x08, 0x08, 0x8a, 0x00, 0x12, 0x55, 0x08, + 0x40, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x00, 0x44, 0x10, 0x00, + 0x00, 0x02, 0x01}; + +static int glass_on; + +#define report_width 21 +#define report_height 21 +static unsigned char report_bits[] = { + 0x00, 0x00, 0x00, 0x5a, 0x60, 0x0b, 0xfa, 0x20, 0x0f, 0x00, 0x00, 0x00, + 0x64, 0x20, 0x05, 0xf6, 0x60, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x40, 0x03, 0x00, 0x80, 0x04, 0x00, 0x80, 0x02, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define slice_width 21 +#define slice_height 21 +static unsigned char slice_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc3, 0x03, 0xfc, 0x37, 0x04, + 0x0c, 0x1e, 0x08, 0x06, 0x0c, 0x08, 0x06, 0x00, 0x08, 0x06, 0x00, 0x04, + 0x04, 0x00, 0x04, 0x0c, 0x00, 0x04, 0x0c, 0x00, 0x04, 0x0c, 0x00, 0x04, + 0x18, 0x00, 0x02, 0x18, 0x00, 0x02, 0x18, 0x00, 0x02, 0x30, 0x00, 0x02, + 0x30, 0x00, 0x01, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define slice_ins_width 21 +#define slice_ins_height 21 +static unsigned char slice_ins_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x42, 0x01, 0x54, 0x15, 0x04, + 0x04, 0x0a, 0x00, 0x02, 0x04, 0x08, 0x04, 0x00, 0x00, 0x02, 0x00, 0x04, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x10, 0x00, 0x00, 0x08, 0x00, 0x02, 0x10, 0x00, 0x00, 0x20, 0x00, 0x02, + 0x10, 0x00, 0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +static int slice_on; + +#define roi_width 21 +#define roi_height 21 +static unsigned char roi_bits[] = { + 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x02, 0x08, 0x40, 0x00, 0x08, 0x4f, 0x01, + 0x88, 0x50, 0x00, 0x89, 0x43, 0x08, 0x88, 0x47, 0x01, 0x88, 0x47, 0x0c, + 0x08, 0x47, 0x0c, 0x28, 0x44, 0x00, 0xca, 0x43, 0x00, 0x08, 0x40, 0x08, + 0x08, 0x40, 0x00, 0xf8, 0xff, 0x00, 0x02, 0x40, 0x03, 0x00, 0x81, 0x04, + 0x00, 0x81, 0x02, 0x44, 0x10, 0x05, 0x0e, 0x02, 0x08, 0x04, 0x00, 0x00, + 0x00, 0x08, 0x00}; + +static int roi_on; + +#define roi_ins_width 21 +#define roi_ins_height 21 +static unsigned char roi_ins_bits[] = { + 0x00, 0x00, 0x00, 0xa8, 0x2a, 0x02, 0x00, 0x40, 0x00, 0x28, 0x05, 0x01, + 0x00, 0x50, 0x02, 0x89, 0x02, 0x09, 0x00, 0x45, 0x01, 0x88, 0x02, 0x00, + 0x00, 0x45, 0x00, 0x28, 0x00, 0x02, 0x82, 0x42, 0x00, 0x08, 0x00, 0x08, + 0x00, 0x40, 0x00, 0xa8, 0xaa, 0x00, 0x02, 0x40, 0x03, 0x00, 0x81, 0x00, + 0x00, 0x81, 0x02, 0x44, 0x10, 0x00, 0x0e, 0x02, 0x08, 0x04, 0x00, 0x00, + 0x00, 0x08, 0x00}; + +#define snap_width 21 +#define snap_height 21 +static unsigned char snap_bits[] = { + 0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x0c, 0xe0, 0x01, + 0x06, 0xe0, 0x01, 0x02, 0xc0, 0x00, 0x11, 0x00, 0x00, 0x31, 0x0f, 0x00, + 0xe3, 0x1f, 0x00, 0xfe, 0x1f, 0x00, 0xe0, 0x1f, 0x08, 0xb0, 0x1f, 0x08, + 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x82, 0x00, 0x06, 0x07, 0x10, 0x00, 0x02, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x60, 0x00}; + +#define snap_ins_width 21 +#define snap_ins_height 21 +static unsigned char snap_ins_bits[] = { + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x80, 0x00, 0x08, 0x40, 0x01, + 0x04, 0x80, 0x00, 0x02, 0x00, 0x00, 0x11, 0x05, 0x00, 0xa0, 0x0a, 0x00, + 0x41, 0x15, 0x00, 0xaa, 0x0a, 0x00, 0x40, 0x15, 0x08, 0xa0, 0x0a, 0x00, + 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x82, 0x00, 0x02, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x00}; + +static int snap_on; + +#define monument_width 21 +#define monument_height 21 +static unsigned char monument_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x15, 0x00, 0x80, 0x3b, 0x00, + 0x80, 0x35, 0x00, 0x80, 0x2a, 0x00, 0x40, 0x55, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define monument_ins_width 21 +#define monument_ins_height 21 +static unsigned char monument_ins_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x15, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x15, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x15, 0x00, 0x80, 0x2a, 0x00, + 0x00, 0x15, 0x00, 0x80, 0x2a, 0x00, 0x40, 0x55, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +static int monument_on; + +#define contrast_width 21 +#define contrast_height 21 +static unsigned char contrast_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7c, 0x00, 0x40, 0x7c, 0x00, + 0x20, 0xfc, 0x00, 0x20, 0xfc, 0x00, 0x20, 0xfc, 0x00, 0x20, 0xfc, 0x00, + 0x20, 0xfc, 0x00, 0x40, 0x7c, 0x00, 0xc0, 0x7c, 0x00, 0x00, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +#define contrast_ins_width 21 +#define contrast_ins_height 21 +static unsigned char contrast_ins_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x80, 0x54, 0x00, 0x40, 0xa8, 0x00, + 0x00, 0x54, 0x00, 0x20, 0xa8, 0x00, 0x00, 0x54, 0x00, 0x20, 0xa8, 0x00, + 0x00, 0x54, 0x00, 0x40, 0xa8, 0x00, 0x80, 0x54, 0x00, 0x00, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00}; + +static int contrast_on; + +#define gauss_width 21 +#define gauss_height 21 +static unsigned char gauss_bits[] = { + 0x03, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x80, 0x20, 0x00, + 0x87, 0x20, 0x00, 0x80, 0x20, 0x00, 0x40, 0x40, 0x00, 0x40, 0x40, 0x00, + 0x43, 0x40, 0x00, 0x40, 0x40, 0x00, 0x20, 0x91, 0x00, 0xe0, 0xff, 0x00, + 0x27, 0x91, 0x00, 0x20, 0x80, 0x00, 0x20, 0x80, 0x00, 0x10, 0x00, 0x01, + 0x13, 0x00, 0x01, 0x18, 0x00, 0x03, 0x0c, 0x04, 0x06, 0x4c, 0x44, 0x06, + 0x47, 0x44, 0x1c}; + +#define gauss_ins_width 21 +#define gauss_ins_height 21 +static unsigned char gauss_ins_bits[] = { + 0x02, 0x04, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, + 0x02, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x11, 0x00, 0xa0, 0xaa, 0x00, + 0x05, 0x11, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x04, 0x00, 0x48, 0x40, 0x02, + 0x05, 0x04, 0x14}; + +static int gauss_on; + +typedef enum { + LTB, TTB, RTB +} TBWhere; + +typedef struct { + TBWhere where; /* which toolbar */ + int tb; /* TB, else PB (or Label if !tip) */ + int igonly; /* 1=for images only, 2=gr only 3=either ok */ + char *tip; /* tip text, or NULL */ + unsigned char *bits; /* bitmap pattern */ + unsigned char *insbits; /* bitmap pattern when insensitive, if any */ + int w, h; /* bitmap size */ + XtCallbackProc cb; /* callback when activated or changed */ + XtPointer client; /* client arg, if any */ + char *ct; /* svf class table, also implies make TB */ + ObjType_t tt[NOBJTYPES]; /* svf type table, also implies make TB */ + Widget wid; /* widget */ + Pixmap pm, ipm; /* normal and insensitive pixmaps */ +} SVTBarItem; +static SVTBarItem svtb[] = { + /* corner is DSS */ + {TTB, 0, 3, "Fetch and display DSS image", + dss_bits, 0, dss_width, dss_height, sf_go_cb, 0}, + + /* top bar is for "what" */ + {TTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height}, + {TTB, 1, 3, "Toggle coordinate grid underlay matching display mode, or Off", + grid_bits, 0, grid_width, grid_height, svtb_grid_cb, 0}, + {TTB, 1, 3,"Toggle horizon line and cutoff (if Alt/Az mode) off or restore", + horizon_bits, 0, horizon_width, horizon_height, svtb_hzn_cb, 0}, + {TTB, 1, 3, "Toggle constellations graphics and names off or restore", + constel_bits, 0, constel_width, constel_height, svtb_constel_cb, 0}, + {TTB, 1, 3, "Toggle object names off or restore", + names_bits, 0, names_width, names_height, svtb_names_cb, 0}, + {TTB, 1, 3, "Toggle magnitude key on or off",magscale_bits,0,magscale_width, + magscale_height, svtb_magscale_cb, 0}, + {TTB, 1, 3, "Turn Equatorial, Ecliptic and Galactic planes on or off", + planes_bits, 0, planes_width, planes_height, svtb_planes_cb, 0}, + + {TTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height}, + {TTB, 1, 3, "Toggle Solar System objects on or off", + solsys_bits, 0, solsys_width, solsys_height, svtb_tt_cb, 0, + NULL, {ELLIPTICAL, HYPERBOLIC, PARABOLIC, PLANET, EARTHSAT}}, + {TTB, 1, 3, "Toggle Clusters on or off", + clusters_bits, 0, clusters_width, clusters_height, svtb_ct_cb, 0, + "COU"}, + {TTB, 1, 3, "Toggle Galaxies on or off", + galaxies_bits, 0, galaxies_width, galaxies_height, svtb_ct_cb, 0, + "GHA"}, + {TTB, 1, 3, "Toggle Nebulae on or off", + nebulae_bits, 0, nebulae_width, nebulae_height, svtb_ct_cb, 0, + "NFKP"}, + {TTB, 1, 3, "Toggle Other types on or off", + other_bits, 0, other_width, other_height, svtb_ct_cb, 0, + "QLJYR"}, + {TTB, 1, 3, "Toggle Stars on or off", + stars_bits, 0, stars_width, stars_height, svtb_ct_cb, 0, + "SBDMVT"}, + {TTB, 1, 3, "Toggle automatic Field Star loading and display on or off", + fstars_bits, 0, fstars_width, fstars_height, svtb_fstars_cb, 0}, + {TTB, 0, 0, NULL, what_bits, 0, what_width, what_height, NULL, 0}, + + /* left bar is for "how" */ + {LTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height}, + {LTB, 0, 3, "Set all magnitude limits one fainter", + brighter_bits, 0, brighter_width, brighter_height, svtb_brighter_cb, 0}, + {LTB, 0, 3, "Set all magnitude limits one brighter", + dimmer_bits, 0, dimmer_width, dimmer_height, svtb_dimmer_cb, 0}, + {LTB, 1, 3, "Toggle automatic magnitude control on or off", + automag_bits, 0, automag_width, automag_height, svtb_automag_cb, 0}, + {LTB, 1, 1, "3d Monument image view", monument_bits, monument_ins_bits, + monument_width, monument_height, svtb_monument_cb, NULL}, + {LTB, 1, 1, "Brightness and Contrast control", contrast_bits, + contrast_ins_bits, contrast_width, contrast_height, svtb_contrast_cb, + NULL}, + + {LTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height}, + {LTB, 0, 2, "Toggle between Alt-Az and RA-Dec orientation", orient_bits, + orient_ins_bits, orient_width, orient_height, svtb_orient_cb, 0}, + {LTB, 1, 2, "Set Spherical projection mode", + sph_bits, sph_ins_bits, sph_width, sph_height, svtb_sph_cb, 0}, + {LTB, 1, 2, "Set Cylindrical projection mode", + cyl_bits, cyl_ins_bits, cyl_width, cyl_height, svtb_proj_cb, 0}, + {LTB, 1, 3, "Flip Left/Right", + fliplr_bits, 0, fliplr_width, fliplr_height, svtb_flip_cb, 0}, + {LTB, 1, 3, "Flip Top/Bottom", + fliptb_bits, 0, fliptb_width, fliptb_height, svtb_flip_cb,(XtPointer)1}, + {LTB, 0, 0, NULL, how_bits, 0, how_width, how_height, NULL, 0}, + + /* right bar is "where" */ + {RTB, 1, 3, "Toggle live report in corners", report_bits, NULL, + report_width, report_height, svtb_report_cb, NULL}, + + {RTB, 0, 3, NULL, smallgap_bits, 0, smallgap_width, smallgap_height}, + {RTB, 0, 3, "Zoom in so selected region expands to fill the window", + zoomin_bits, zoomin_ins_bits, zoomin_width, zoomin_height, + svtb_zoomin_cb, 0}, + {RTB, 0, 3, "Undo last Zoom", + unzoom_bits, unzoom_ins_bits, unzoom_width, unzoom_height, + svtb_unzoom_cb, 0}, + {RTB, 1, 3, "Draw region of interest", roi_bits, roi_ins_bits, + roi_width, roi_height, svtb_roi_cb, NULL}, + + {RTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height}, + {RTB, 1, 1, "Enable magnifying glass", glass_bits, glass_ins_bits, + glass_width, glass_height, svtb_glass_cb, NULL}, + {RTB, 1, 1, "Climb gradient to max", snap_bits, snap_ins_bits, snap_width, + snap_height, svtb_toggle_cb, (XtPointer)&snap_on}, + {RTB, 1, 1, "Plot along a cross-sectional slice", slice_bits,slice_ins_bits, + slice_width, slice_height, svtb_slice_cb, NULL}, + {RTB, 1, 1, "Measure and compare star brightness", gauss_bits, + gauss_ins_bits, gauss_width, gauss_height, svtb_gauss_cb, NULL}, + {RTB, 0, 0, NULL, where_bits, 0, where_width, where_height, NULL, 0}, +}; + +/* search for the SVTBarItem containing the bitmaps bits */ +static SVTBarItem * +findSVTB (bits) +unsigned char *bits; +{ + SVTBarItem *sp; + + for (sp = svtb; sp < &svtb[XtNumber(svtb)]; sp++) + if (sp->bits == bits) + return (sp); + + printf ("Bug! Can not find SVTB\n"); + abort(); + return(0); /* ! */ +} + +/* go through each toolbar TB and PB set its pixmap + * rc_w is just any manager in Sky View we can use to make a temp TB to learn + * current color scheme. + */ +void +svtb_newpm (rc_w) +Widget rc_w; +{ + static Pixel last_fg, last_bg; + Display *dsp = XtDisplay(toplevel_w); + Window win = RootWindow (dsp, DefaultScreen(dsp)); + Arg args[20]; + Pixel fg, bg; + Widget w; + int n; + int d; + int i; + + /* make a temp TB just so we can sneak its colors and depth. + * turns out Motif 1.2 can not handle a Bitmap and 2.x can, but we + * go the conservative route. + */ + n = 0; + w = XmCreateToggleButton (rc_w, "TMP", args, n); + n = 0; + XtSetArg (args[n], XmNforeground, &fg); n++; + XtSetArg (args[n], XmNbackground, &bg); n++; + XtSetArg (args[n], XmNdepth, &d); n++; + XtGetValues (w, args, n); + XtDestroyWidget (w); + + /* don't bother if no change .. avoids extra blinking */ + if (fg == last_fg && bg == last_bg) + return; + last_fg = fg; + last_bg = bg; + + for (i = 0; i < XtNumber(svtb); i++) { + SVTBarItem *ip = &svtb[i]; + + if (ip->pm) + XFreePixmap (dsp, ip->pm); + ip->pm = XCreatePixmapFromBitmapData (dsp, win, (char *)ip->bits, + ip->w, ip->h, fg, bg, d); + set_something (ip->wid, XmNlabelPixmap, (XtArgVal)(ip->pm)); + if (ip->insbits) { + if (ip->ipm) + XFreePixmap (dsp, ip->ipm); + ip->ipm = XCreatePixmapFromBitmapData (dsp, win, + (char *)ip->insbits, ip->w, ip->h, fg, bg, d); + set_something (ip->wid, XmNlabelInsensitivePixmap, + (XtArgVal)(ip->ipm)); + } + } + +} + +/* create top/left/right toolbar controls in the given RowColumn widgets */ +void +svtb_create (trc_w, lrc_w, rrc_w) +Widget trc_w, lrc_w, rrc_w; +{ + SVTBarItem *ip; + Arg args[20]; + Widget rc_w, w; + int i; + int n; + + /* create the widgets */ + for (i = 0; i < XtNumber(svtb); i++) { + ip = &svtb[i]; + rc_w= ip->where == LTB ? lrc_w : (ip->where == RTB ? rrc_w : trc_w); + + n = 0; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + if (!ip->tip) { + w = XmCreateLabel (rc_w, "SVTBL", args, n); + } else if (ip->tb) { + XtPointer client; + + /* N.B. we rely on resources to set shadowThickness > 0 */ + + XtSetArg (args[n], XmNindicatorOn, False); n++; + w = XmCreateToggleButton (rc_w, "SVTBTB", args, n); + if (ip->ct) + client = (XtPointer)ip->ct; + else if (ip->tt[0]) + client = (XtPointer)ip->tt; + else + client = ip->client; + if (ip->cb) + XtAddCallback (w, XmNvalueChangedCallback, ip->cb, client); + wtip (w, ip->tip); + } else { + w = XmCreatePushButton (rc_w, "SVTBPB", args, n); + if (ip->cb) + XtAddCallback (w, XmNactivateCallback, ip->cb, ip->client); + wtip (w, ip->tip); + } + XtManageChild (w); + ip->wid = w; + } + + /* create their pixmaps */ + svtb_newpm (trc_w); + + /* no zooming until ROI defined */ + svtb_zoomok(0); + svtb_unzoomok(0); + + /* add radio-box behavior to sph/cyl pair */ + ip = findSVTB (cyl_bits); + XtAddCallback (ip->wid, XmNvalueChangedCallback, svtb_cyl_cb, 0); +} + +/* called to desensitize those controls inappropriate to images. + * TODO N.B. zoom/unzoom ain't this easy .. they come and go based on their + * stack and svtb_iszoomok() tests it directly. Need to implement non-Sen + * version of iszoomok then teach callbacks to tolerate stack end cases and + * implement image cropping. + */ +void +svtb_imMode (on) +int on; +{ + Widget zi = findSVTB(zoomin_bits)->wid; + Widget uz = findSVTB(unzoom_bits)->wid; + int i; + + /* important it be 1 or 0 */ + on = !!on; + + for (i = 0; i < XtNumber(svtb); i++) { + SVTBarItem *sp = &svtb[i]; + /* !tip implies label */ + if (sp->tip && sp->wid != zi && sp->wid != uz) + XtSetSensitive(sp->wid, (on && (sp->igonly & 1)) || + (!on && (sp->igonly & 2))); + } +} + +/* return 1 if zooming now is ok, else 0 */ +int +svtb_iszoomok(void) +{ + return (XtIsSensitive(findSVTB(zoomin_bits)->wid)); +} + +/* show whether zooming now is ok */ +void +svtb_zoomok(ok) +int ok; +{ + XtSetSensitive (findSVTB(zoomin_bits)->wid, ok); +} + +/* set whether unzooming now is ok */ +void +svtb_unzoomok(ok) +int ok; +{ + XtSetSensitive (findSVTB(unzoom_bits)->wid, ok); +} + +/* call to set the Grid TB */ +void +svtb_updateGrid (on) +int on; +{ + XmToggleButtonSetState (findSVTB(grid_bits)->wid, on, False); +} + +/* call to set the LR flip TB */ +void +svtb_updateLRFlip (on) +int on; +{ + XmToggleButtonSetState (findSVTB(fliplr_bits)->wid, on, False); +} + +/* call to set the TB flip TB */ +void +svtb_updateTBFlip (on) +int on; +{ + XmToggleButtonSetState (findSVTB(fliptb_bits)->wid, on, False); +} + +/* call to set the Horizon TB */ +void +svtb_updateHorizon (on) +int on; +{ + XmToggleButtonSetState (findSVTB(horizon_bits)->wid, on, False); +} + +/* call to set the Field Stars TB */ +void +svtb_updateFStars (on) +int on; +{ + XmToggleButtonSetState (findSVTB(fstars_bits)->wid, on, False); +} + +/* call to set the Cns TB */ +void +svtb_updateCns (on) +int on; +{ + XmToggleButtonSetState (findSVTB(constel_bits)->wid, on, False); +} + +/* call to set the Automag TB */ +void +svtb_updateAutoMag (on) +int on; +{ + XmToggleButtonSetState (findSVTB(automag_bits)->wid, on, False); +} + +/* call to set the Cyl and Sph projection TBs */ +void +svtb_updateCyl (on) +int on; +{ + XmToggleButtonSetState (findSVTB(cyl_bits)->wid, on, False); + XmToggleButtonSetState (findSVTB(sph_bits)->wid, !on, False); +} + +/* call to set the Names TB */ +void +svtb_updateNames (on) +int on; +{ + XmToggleButtonSetState (findSVTB(names_bits)->wid, on, False); +} + +/* call to set the Planes TB */ +void +svtb_updatePlanes (on) +int on; +{ + XmToggleButtonSetState (findSVTB(planes_bits)->wid, on, False); +} + +/* call to set the MagScale TB */ +void +svtb_updateMagScale (on) +int on; +{ + XmToggleButtonSetState (findSVTB(magscale_bits)->wid, on, False); +} + +/* call to set the LiveReport TB */ +void +svtb_updateReport (on) +int on; +{ + XmToggleButtonSetState(findSVTB(report_bits)->wid, on, False); +} + +/* call to set the Slice TB */ +void +svtb_updateSlice (on) +int on; +{ + XmToggleButtonSetState (findSVTB(slice_bits)->wid, slice_on=on, False); +} + +/* call to set the ROI TB */ +void +svtb_updateROI (on) +int on; +{ + XmToggleButtonSetState (findSVTB(roi_bits)->wid, roi_on=on, False); +} + +/* call to set the Gauss TB */ +void +svtb_updateGauss (on) +int on; +{ + XmToggleButtonSetState(findSVTB(gauss_bits)->wid, gauss_on=on, False); +} + +/* call to set the Contrast TB */ +void +svtb_updateContrast (on) +int on; +{ + XmToggleButtonSetState(findSVTB(contrast_bits)->wid, contrast_on=on, 0); +} + +/* call to set the Glass TB */ +void +svtb_updateGlass (on) +int on; +{ + XmToggleButtonSetState(findSVTB(glass_bits)->wid, glass_on=on, False); +} + +/* call to set the Class and Solsys TB according to svf filter tables */ +void +svtb_updateCTTT(ct, tt) +char ct[NCLASSES]; +char tt[NOBJTYPES]; +{ + int i, j; + + /* beware being called before being initialized */ + if (!svtb[0].w) + return; + + /* search each TB involved with a filter */ + for (i = 0; i < XtNumber(svtb); i++) { + SVTBarItem *ip = &svtb[i]; + if (ip->ct) { + int l = strlen (ip->ct); + int set = 0; + /* set if any classes for this TB are set */ + for (j = 0; j < l; j++) { + if (ct[(int)ip->ct[j]]) { + set = 1; + break; + } + } + XmToggleButtonSetState (ip->wid, set, False); + } + if (ip->tt[0]) { + int set = 0; + /* set if any types for this TB are set */ + for (j = 0; j < NOBJTYPES; j++) { + if (tt[(int)ip->tt[j]]) { + set = 1; + break; + } + } + XmToggleButtonSetState (ip->wid, set, False); + } + } +} + +/* whether monument view */ +int +svtb_monumentIsOn() +{ + return (monument_on); +} + +/* whether snap-to-max is on */ +int +svtb_snapIsOn() +{ + return (snap_on); +} + +/* whether slice is on */ +int +svtb_sliceIsOn() +{ + return (slice_on); +} + +/* whether ROI is on */ +int +svtb_ROIIsOn() +{ + return (roi_on); +} + +/* whether glass is on */ +int +svtb_glassIsOn() +{ + return (glass_on); +} + +/* whether gauss is on */ +int +svtb_gaussIsOn() +{ + return (gauss_on); +} + +/* callback from any of the Class TBs. + * client is ct list. + */ +static void +svtb_ct_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int set = XmToggleButtonGetState(w); + char *types = (char *)client; + char tt[NOBJTYPES]; + char ct[NCLASSES]; + int ntypes; + int i; + + svf_gettables (tt, ct); + + ntypes = strlen(types); + for (i = 0; i < ntypes; i++) { + ct[(int)types[i]] = set; + if (types[i] == 'B') + tt[BINARYSTAR] = set; + } + + svf_settables (tt, ct); + + sv_all(mm_get_now()); +} + +/* callback from the solsys TB. + * client is tt list. + */ +static void +svtb_tt_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int set = XmToggleButtonGetState(w); + ObjType_t *types = (ObjType_t *)client; + char tt[NOBJTYPES]; + char ct[NCLASSES]; + int i; + + svf_gettables (tt, ct); + + for (i = 0; i < NOBJTYPES; i++) + if (types[i]) + tt[(int)types[i]] = set; + + svf_settables (tt, ct); + + sv_all(mm_get_now()); +} + +/* called when the Sph TB changes. + * activate the Cyl TB to the opposite state. + */ +static void +svtb_sph_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + SVTBarItem *ip = findSVTB (cyl_bits); + + XmToggleButtonSetState (ip->wid, !XmToggleButtonGetState(w), True); +} + +/* called when the Cyl TB changes. + * slace the Sph TB to the opposite state. + */ +static void +svtb_cyl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + SVTBarItem *ip = findSVTB (sph_bits); + + XmToggleButtonSetState (ip->wid, !XmToggleButtonGetState(w), False); +} + +/* fast control of a simple toggle setting. + * client is addr of int to set. + */ +static void +svtb_toggle_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + *(int *)client = XmToggleButtonGetState(w); +} + +/* monument toggle */ +static void +svtb_monument_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + monument_on = XmToggleButtonGetState(w); + if (si_ison()) + sv_dspFITS(); +} + +/* contrast toggle */ +static void +svtb_contrast_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + contrast_on = XmToggleButtonGetState(w); + si_updateContrast(contrast_on); +} + +/* glass toggle */ +static void +svtb_glass_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + glass_on = XmToggleButtonGetState(w); + si_updateGlass(glass_on); +} + +/* roi toggle */ +static void +svtb_roi_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + roi_on = XmToggleButtonGetState(w); + si_updateROI(roi_on); +} + +/* gauss toggle */ +static void +svtb_gauss_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + gauss_on = XmToggleButtonGetState(w); + si_updateGauss(gauss_on); +} + +/* slice toggle */ +static void +svtb_slice_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + slice_on = XmToggleButtonGetState(w); + si_updateSlice(slice_on); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skytoolbar.c,v $ $Date: 2008/08/17 20:18:31 $ $Revision: 1.57 $ $Name: $"}; diff --git a/GUI/xephem/skytoolbar.h b/GUI/xephem/skytoolbar.h new file mode 100644 index 0000000..35bc2eb --- /dev/null +++ b/GUI/xephem/skytoolbar.h @@ -0,0 +1,72 @@ +#ifndef _SKYTOOLBAR_H +#define _SKYTOOLBAR_H + +/* glue for skyview tool bar */ + +#define SVTB_NHIST 4 /* number of History references */ + +extern void svtb_create (Widget trc_w, Widget lrc_w, Widget rrc_w); +extern void svtb_newpm (Widget rc_w); + +extern void svtb_brighter_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_constel_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_dimmer_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_grid_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_automag_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_hzn_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_fstars_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_names_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_planes_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_magscale_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_orient_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_proj_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_flip_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_print_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_zoomin_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_unzoom_cb (Widget w, XtPointer client, XtPointer call); +extern void svtb_report_cb (Widget w, XtPointer client, XtPointer call); + +extern void svtb_imMode (int on); +extern void svtb_zoomok (int whether); +extern void svtb_unzoomok (int whether); +extern int svtb_iszoomok (void); +extern void svtb_updateCTTT (char fclass_table[NCLASSES], + char type_table[NOBJTYPES]); +extern void svtb_updateHorizon (int on); +extern void svtb_updateFStars (int on); +extern void svtb_updateGrid (int on); +extern void svtb_updateLRFlip (int on); +extern void svtb_updateTBFlip (int on); +extern void svtb_updateAutoMag (int on); +extern void svtb_updateCyl (int on); +extern void svtb_updateCns (int on); +extern void svtb_updateNames (int on); +extern void svtb_updatePlanes (int on); +extern void svtb_updateMagScale (int on); +extern void svtb_updateSlice (int on); +extern void svtb_updateROI (int on); +extern void svtb_updateGauss (int on); +extern void svtb_updateContrast (int on); +extern void svtb_updateGlass (int on); +extern void svtb_updateReport (int on); + +extern int svtb_glassIsOn (void); +extern int svtb_reportIsOn (void); +extern int svtb_snapIsOn (void); +extern int svtb_monumentIsOn (void); +extern int svtb_sliceIsOn (void); +extern int svtb_ROIIsOn (void); +extern int svtb_glassIsOn (void); +extern int svtb_gaussIsOn (void); + +extern void si_updateGauss (int on); +extern void si_updateROI (int on); +extern void si_updateContrast (int on); +extern void si_updateSlice (int on); +extern void si_updateGlass (int on); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: skytoolbar.h,v $ $Date: 2008/08/17 20:18:31 $ $Revision: 1.21 $ $Name: $ + */ + +#endif /* _SKYTOOLBAR_H */ diff --git a/GUI/xephem/skyviewmenu.c b/GUI/xephem/skyviewmenu.c new file mode 100644 index 0000000..03c1e85 --- /dev/null +++ b/GUI/xephem/skyviewmenu.c @@ -0,0 +1,10444 @@ +/* code code to manage the stuff on the sky view display. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +/* we keep a linked-list of TrailObj's we want trails for. these in turn + * contain an array of TSky's for each location in the trail. + * objects are added and controlled from the popup; we only ever actually + * discard an object if the whole db changes or it is off when we get an + * update. + */ +typedef struct { + unsigned char flags;/* OBJF_* flags (shared with Obj->o_flags) */ + TrTS trts; /* mjd of o and whether to draw timestamp */ + Obj o; /* copy of the object at ts_mjd */ +} TSky; +typedef struct _trailObj { + struct _trailObj *ntop; /* pointer to next, or NULL */ + int on; /* turn trail on/off (discarded if off during update) */ + TrState trs; /* general details of the trail setup */ + Obj *op; /* pointer to actual db object being trailed */ + int nsky; /* number of items in use within sky[] */ + TSky sky[1]; /* array of Objs (gotta love C :-) */ +} TrailObj; + +static double x_angle (double ra, double dec, double pa); +static int sv_ano (double *ap, double *bp, int *xp, int *yp, int w2x, int arg); +static int objdiam (Obj *op); +static void sv_copy_sky (void); +static void sv_create_svshell (void); +static void sv_create_favmenu (Widget parent); +static void sv_create_options (void); +static void sv_create_op_lbl (Widget rc_w); +static void sv_create_grid_option (Widget f_w); +static void sv_closeopdialog_cb (Widget w, XtPointer client,XtPointer call); +static void sv_draw_pl (Display *dsp, Drawable win, GC gc, Obj *op, int x, + int y, int diam); +static void sv_opdialog_cb (Widget w, XtPointer client, XtPointer call); +static void sv_close_cb (Widget w, XtPointer client, XtPointer call); +static void sv_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void sv_help_cb (Widget w, XtPointer client, XtPointer call); +static void sv_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void sv_aa_cb (Widget w, XtPointer client, XtPointer call); +static void sv_cyl_cb (Widget w, XtPointer client, XtPointer call); +static void sv_filter_cb (Widget w, XtPointer client, XtPointer call); +static void sv_fits_cb (Widget w, XtPointer client, XtPointer call); +static void sv_image_cb (Widget w, XtPointer client, XtPointer call); +static void sv_registration_cb (Widget w, XtPointer client, XtPointer call); +static void sv_wcs_cb (Widget w, XtPointer client, XtPointer call); +static void sv_addframe_cb (Widget w, XtPointer client, XtPointer call); +static void sv_gt_cb (Widget w, XtPointer client, XtPointer call); +static void sv_tcp_cb (Widget w, XtPointer client, XtPointer call); +static void sv_indi_cb (Widget w, XtPointer client, XtPointer call); +static void sv_grid_cb (Widget w, XtPointer client, XtPointer call); +static void sv_brs_cb (Widget w, XtPointer client, XtPointer call); +static void sv_gridtf_cb (Widget w, XtPointer client, XtPointer call); +static void sv_list_cb (Widget w, XtPointer client, XtPointer call); +static void sv_mancoord_cb (Widget w, XtPointer client, XtPointer call); +static void sv_print_cb (Widget w, XtPointer client, XtPointer call); +static void sv_print (void); +static void sv_ps_annotate (Now *np); +static void sv_track_cb (Widget w, XtPointer client, XtPointer call); +static void sv_set_fov (double fov); +static void sv_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void sv_resize (int neww, int newh); +static void sv_pick (XEvent *ev, int wx, int wy); +static void sv_da_ptr_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static void sv_scale_cb (Widget w, XtPointer client, XtPointer call); +static void sv_lbln_cb (Widget w, XtPointer client, XtPointer call); +static void sv_lblm_cb (Widget w, XtPointer client, XtPointer call); +static void sv_option_cb (Widget w, XtPointer client, XtPointer call); +static void sv_eyep_cb (Widget w, XtPointer client, XtPointer call); +static void sv_altdecsc_cb (Widget w, XtPointer client, XtPointer call); +static void sv_fovsc_cb (Widget w, XtPointer client, XtPointer call); +static void sv_faving_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_fav_cb (Widget w, XtPointer client, XtPointer call); +static void sv_bsmap_cb (Widget w, XtPointer client, XtPointer call); +static void sv_loadcnsfigs_cb (Widget w, XtPointer client, XtPointer call); +static void sv_popup (XEvent *ev, Obj *op, TSky *tsp); +static void sv_punames (Obj *op); +static void sv_riset (Now *np, Obj *op); +static void sv_create_popup (void); +static void sv_magscale (Display *dsp, Window win); +static void sv_create_zoomcascade (Widget pd_w); +static void sv_create_labellr (Widget pd_w); +static void sv_pu_activate_cb (Widget w, XtPointer client, XtPointer call); +static void sv_pu_zoom_cb (Widget w, XtPointer client, XtPointer call); +static void sv_pu_trail_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_pu_label_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_pu_track_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_telpd_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_dtelpd_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_etelpd_cb (Widget wid, XtPointer client, XtPointer call); +static void sv_addtelpd (Obj *op); +static void sv_erasetelpd (void); +static void sv_drawBin (Obj *op, XArc *xfap[], XSegment *xsp[], int diam, + int x, int y); +static void sv_read_scale (int which); +static void sv_set_scale (int which, int cutzoom); +static void sv_erase_report_coords (void); +static void sv_draw_report_coords (int new, int sep, int winx, int winy, + double altdec, double azra); +static void sv_drawtm (Display *dsp, Window win, int x, int y); +static void sv_drawm (Display *dsp, Window win, int x, int y); +static int sv_mark (Obj *op, int in_center, int out_center, int mark, + int msg, int use_window, double newfov); +static void sv_set_dashed_cnsgc (Display *dsp, int dashed); +static void sv_win2im (int wx, int wy, double *ix, double *yp); +static void svtb_sync (void); +static void tobj_rmoff (void); +static void tobj_rmobj (Obj *op); +static TrailObj *tobj_addobj (Obj *op, int nsky); +static void tobj_newdb (void); +static TrailObj *tobj_find (Obj *op); +static void tobj_display_all (void); +static void aatwarn_msg (void); +static int sv_mktrail (TrTS ts[], TrState *statep, XtPointer client); +static int sv_dbobjloc (Obj *op, int *xp, int *yp, int *dp); +static int sv_drawComet (XArc xfa[], int diam, int x, int y); +static int sv_trailobjloc (TSky *tsp, int *xp, int *yp); +static int sv_precheck (Obj *op); +static int sv_onscrn (Now *np, Obj *op); +static int sv_loc (double altdec, double azra, int *xp, int *yp); +static int sv_unloc (int x, int y, double *altdecp, double *azrap); +static void sv_fullwhere (Now *np, double altdec, double azra, int aa, + double *altp, double *azp, double *rap, double *decp); +static void draw_hznmap (Now *np, Display *dsp, Window win, GC gc); +static void draw_hznac (Display *dsp, Window win, GC gc); +static void draw_hznother (Display *dsp, Window win, GC gc); +static void draw_hznProfile (Display *dsp, Window win, GC gc); +static void draw_compass (Display *dsp, Drawable win); +static void draw_ecliptic (Now *np, Display *dsp, Window win, GC gc); +static void draw_umbra (Now *np, Display *dsp, Window win, GC gc); +static void draw_equator (Now *np, Display *dsp, Window win, GC gc); +static void draw_galactic (Now *np, Display *dsp, Window win, GC gc); +static int split_line (Display *dsp, Window win, GC gc, int x1, int y1, + int x2, int y2); +static int split_lines (Display *dsp, Window win, GC gc,XPoint xp[],int np); +static int split_segs (Display *dsp, Window win,GC gc,XSegment sp[],int ns); +static void split_wrap (XSegment *sp, int *xwp, int *ywp); +static void draw_milkyway (Now *np, Display *dsp, Window win, GC gc); +static void draw_cnsbounds (Now *np, Display *dsp, Window win); +static void draw_cns (Now *np, Display *dsp, Window win); +static void draw_cnsname ( Display *dsp, Window win, int conid, + int minx, int miny, int maxx, int maxy); +static void draw_grid_label (Display *dsp, Window win, GC gc, double ad, + double ar, int x, int y, int samesys, int arlabel, double dv, double dh); +static void draw_grid (Display *dsp, Window win, GC gc); +static void draw_allobjs (Display *dsp, Drawable win); +static void draw_label (Window win, GC gc, Obj *op, int flags, int x, int y, + int d); +static int chk_greeklabel (char name[], int *glp, char *gcodep); +static void load_deffig (Widget om); +static void gridStepLabel (void); +static void draw_eyep (Display *dsp, Window win, GC gc); +static void setImFOVScales (FImage *fip); +static void objGC(Obj *op, int d, GC *gcp); +static void sv_mk_gcs (void); +static int segisvis (int x1, int y1, int x2, int y2, + int *cx1, int *cy1, int *cx2, int *cy2); +static void chkFS_to (XtPointer client, XtIntervalId *id); + +#define MAXGRID 20 /* max grid lines each dimension */ +#define GMARG 20 /* min margin of grid label from edge */ +#define NGSEGS 3 /* piecewise segments per grid arc */ +#define NHZNSEG 360 /* number of horizon map segments */ +#define EQ_NON 3 /* dots on in equator line pattern */ +#define EQ_NOFF 6 /* dots off in equator line pattern */ +#define ECL_NON 2 /* dots on in ecliptic line pattern */ +#define ECL_NOFF 2 /* dots off in ecliptic line pattern */ +#define GAL_NON 1 /* dots on in galaxy plane line pattern */ +#define GAL_NOFF 4 /* dots off in galaxy plane line pattern */ +#define GAL_W 5 /* half-width of galactic pole X */ +#define MARKR 20 /* pointer marker half-width, pixels */ +#define TICKLEN 2 /* length of trail tickmarks, pixels */ +#define MINEPR 1 /* minimum eyepiece radius we'll draw, pixels */ +#define MIND 5 /* min diam for non-star non-planet symbols*/ +#define MAXBRLBLS 100 /* max number of brightest objects we label */ +#define MAGBOXN 6 /* number of mag steps to show in box */ +#define FOV_STEP 5 /* FOV min and step size, arc mins */ +#define MAXPMOK 30 /* min days for fs reload (Barnard's ~ 1"/mo) */ +#define FSTO 1000 /* field star load timer, ms */ +#define MAXFSFOV 30.0 /* max fov we ever load field stars, degs */ +#define ASR 4 /* anti-solar marker radius, pixels */ +#define TBORD 4 /* tracking border from edge, pixels */ +#define UDLRF 8 /* up/dn/lf/rt toolbar motion fraction */ +#define LOSTBSZ 10 /* Label option TB and Scale size */ +#define MAXXW 16000 /* max X Win pos (SHRT_MAX broke XFree 4.2.0) */ +#define PUTW 10 /* popup line title width */ + +static char telAnon[] = "Anonymous"; /* name used for anon (pure loc) objs */ +static char cns_suffix[] = ".csf"; /* constellation figure file suffix */ +static char cns_ffres[] = "CnsFigFile"; /* resource with default cons figures */ + +Widget svshell_w; /* main sky view shell */ +static Widget svda_w; /* sky view drawing area */ +static Widget svops_w; /* main options dialog */ +static Widget fov_w, altdec_w, azra_w; /* scale widgets ... */ +static Widget fovl_w, altdecl_w, azral_w; /* ... and their labels */ +static Widget hgrid_w, vgrid_w; /* h and v grid spacing TF */ +static Widget hgridl_w, vgridl_w; /* h and v grid spacing labels */ +static Widget grid_w; /* want grid TB */ +static Widget autogrid_w; /* want auto grid spacing TB */ +static Widget gridlbl_w; /* want grid labels TB */ +static Widget aagrid_w; /* want AA grid TB */ +static Widget naagrid_w; /* notwant AA grid TB */ +static Widget aa_w, rad_w; /* altaz/radec toggle buttons */ +static Widget sph_w, cyl_w; /* spherical/cylindrical toggle buttons */ +static Widget fliplr_w, fliptb_w; /* orientation TBs */ +static Widget conn_w; /* constellation name TB */ +static Widget conf_w; /* constellation fig TB */ +static Widget conb_w, cona_w; /* constellation boundry and abbr TBs */ +static Widget justd_w; /* justdots TB */ +static Widget eclip_w, galac_w, eq_w; /* eclip, galactic, equator TBs */ +static Widget dt_w; /* the date/time stamp label widget */ +static Widget fovimg_w; /* image aspect PB */ +static Widget keeptelvis_w; /* TB whether to keep tel marker visible */ +static Pixmap sv_pm; /* off-screen pixmap we *really* draw */ +static XFontStruct *sv_tf; /* font for the tracking coord display*/ +static XFontStruct *sv_pf; /* font for all object labels */ +static XFontStruct *sv_gf; /* greek font */ +static XFontStruct *sv_cf; /* constellation names font */ +static XFontStruct *sv_rf; /* grid font */ +static GC sv_ggc; /* greek gc */ +static Pixmap trk_pm; /* used to draw track info smoothly */ +static unsigned int trk_w, trk_h; /* size of trk_pm, iff trk_pm */ + +/* pixels and GCs + */ +static Pixel annot_p; /* annotation color */ +static Pixel bg_p; /* background color */ +static Pixel cnsfig_p; /* constellation figures color */ +static Pixel cnsbnd_p; /* constellation boundaries color */ +static Pixel cnsnam_p; /* constellation name color */ +static Pixel sky_p; /* sky background color */ +static Pixel hzn_p; /* horizon profile color */ +static Pixel grid_p; /* grid color */ +static Pixel eq_p; /* equator color */ +static Pixel mw_p; /* milky way color */ +static GC sv_gc; /* the default GC */ +static GC sv_tmgc; /* gc for transient window marker */ +static GC sv_cnsgc; /* the GC for constellations */ +static GC sv_strgc; /* gc for use in drawing text */ +static GC zm_xorgc; /* gc for zoom box */ +static GC dimgc; /* gray for small tiny stars */ + +static int aa_mode = -1; /* 1 for alt/az or 0 for ra/dec */ +static int cyl_proj = -1; /* 1 for cylindrical proj or 0 for spherical */ +static double sv_altdec; /* view center alt or dec, rads */ +static double sv_azra; /* view center az or ra, rads */ +static double sv_vfov; /* vertical field of view, rads */ +static double sv_hfov; /* horizontal field of view, rads */ +static double sv_dfov; /* diagonal field of view, rads */ +static int sv_w, sv_h; /* size of svda_w, pixels */ +static int justdots; /* set when only want to use dots on the map */ +static int want_livedrag; /* set when want live dragging */ +static int flip_lr; /* set when want to flip left/right */ +static int flip_tb; /* set when want to flip top/bottom */ +static int want_ec; /* set when want to see the ecliptic */ +static int want_eq; /* set when want to see the equator */ +static int want_ga; /* set when want to see galactic poles and eq*/ +static int want_hznmap; /* set when want to see horizon map */ +static int want_clipping; /* set when not want to see objects below horizon */ +static int want_conb; /* set when want to see the constel boundaries*/ +static int want_conf; /* set when want to see the constel figures */ +static int want_conn; /* set when want to see the constel names */ +static int want_cona; /* set when want to see the constel abbrevs */ +static int want_eyep; /* set when want to see eyepieces */ +static int want_grid; /* set when we want to draw the coord grid */ +static int want_aagrid; /* set when we want an AA grid */ +static int want_gridlbl; /* set when we want grid labeling */ +static int want_autogrid; /* set when we want auto coord spacing */ +static int want_fs; /* set when we want to see field stars */ +static int want_magscale; /* set when we want to see the mag scale */ +static int want_compass; /* set when we want to see the compass rose */ +static int want_automag; /* set when we want to automatically set mags */ +static int user_automagoff; /* set when user manually turns off automag */ +static int anytrails; /* set to add postscript trail time comment */ +static int want_report; /* set when we want live report */ + +static ObjF *fldstars; /* malloced list of field stars, or NULL */ +static int nfldstars; /* number of entries in fldstars[] */ + +static TrailObj *trailobj; /* head of a malloced linked-list -- 0 when + * empty + */ +static TrState trstate = { /* trail setup state */ + TRLR_FL, TRI_DAY, TRF_DATE, TRR_NONE, TRO_PATHL, TRS_MEDIUM, 10 +}; +static Obj *track_op; /* object to track, when not NULL */ +static Widget tracktb_w; /* toggle button indicating tracking is on */ +static Widget wanteyep_w; /* TB for whether to show eyepieces */ +static Widget wantfs_w; /* TB for whether to show field stars */ +static Widget wantmag_w; /* TB for whether to show mag scale */ +static Widget wantcompass_w; /* TB for whether to show compass rose */ +static Widget wantamag_w; /* TB for whether to automatically set mag */ +static Widget hznmap_w; /* TB for whether to show horizon map */ +static Widget ttbar_w; /* top toolbar RC */ +static Widget ltbar_w; /* left toolbar RC */ +static Widget rtbar_w; /* right toolbar RC */ +static Widget telpd_w; /* Telescope pulldown, for adding histories */ +static Widget wantreport_w; /* TB for whether to show live report */ + +static int lbl_lst; /* catalog star name/mag label options */ +static int lbl_lfs; /* field star name/mag label options */ +static int lbl_lss; /* sol sys name/mag label options */ +static int lbl_lds; /* deep sky name/mag label options */ +static Widget lbl_nst_w; /* TB for star name label */ +static Widget lbl_mst_w; /* TB for star mag label */ +static Widget lbl_nfs_w; /* TB for field star name label */ +static Widget lbl_mfs_w; /* TB for field star mag label */ +static Widget lbl_nss_w; /* TB for sol sys name label */ +static Widget lbl_mss_w; /* TB for sol sys mag label */ +static Widget lbl_nds_w; /* TB for deep sky name label */ +static Widget lbl_mds_w; /* TB for deep sky mag label */ +static Widget lbl_bst_w; /* Scale for brightest stars */ +static Widget lbl_bfs_w; /* Scale for brightest stars */ +static Widget lbl_bss_w; /* Scale for brightest sol sys */ +static Widget lbl_bds_w; /* Scale for brightest deep sky */ + +static Pixel eyep_p; /* eyepiece color */ +static EyePiece *largeyepr; /* largest eyepiece printed, for print label */ +static int neyepr; /* number of eyepieces printed, " */ + +static int sv_tmx; /* last transient marker x coord */ +static int sv_tmy; /* last transient marker y coord */ +static int sv_tmon; /* whether transient marker is on screen now */ + +/* info for the popup widget. + * we make one once and keep reusing it -- seems to be a bit faster that way. + * but see sv_popup() for all the work to get it customized for each object. + */ +typedef struct { + int wx, wy; /* screen coords of cursor at moment of click */ + Widget pu_w; /* the overall PopupMenu */ + Widget name_w; /* label for object name */ + Widget altnm_w; /* cascade button for alternate names */ + Widget desc_w; /* label for object description */ + Widget infocb_w; /* CB for misc object info */ + Widget spect_w; /* label for object spectral class */ + Widget size_w; /* label for object size */ + Widget pa_w; /* label for object position angle */ + Widget eclipsed_w; /* label for whether esat is eclipsed */ + Widget ud_w; /* label for object date */ + Widget ut_w; /* label for object time */ + Widget rise_w; /* label for object rise time */ + Widget trans_w; /* label for object transit time */ + Widget transalt_w; /* label for object transit altitude */ + Widget transaz_w; /* label for object transit azimuth */ + Widget set_w; /* label for object set time */ + Widget ra_w; /* label for object RA */ + Widget dec_w; /* label for object Dec */ + Widget alt_w; /* label for object Alt */ + Widget az_w; /* label for object Az */ + Widget nmsep_w; /* separator under obj name */ + Widget mag_w; /* label for object mag */ + Widget refmag_w; /* PB to set mag as photom ref */ + Widget deleyep_w; /* PB to delete an eyepiece */ + Widget goto_w; /* PB to send coords to telescope */ + Widget gal_w; /* PB to show gallery image */ + Widget av_w; /* PB to load nearest AAVSO */ + Widget label_w; /* CB to select left/label */ + Widget llabel_w; /* TB to select left label be drawn */ + Widget rlabel_w; /* TB to select right label be drawn */ + Widget fav_w; /* PB to add this obj to favs list */ + Widget obslog_w; /* PB to add this obj to observer's log */ + Widget track_w; /* TB to track this object */ + Widget trail_w; /* TB to let existing trail be turned on/off */ + Widget newtrail_w; /* PB to create new trail */ + Widget bsmap_w; /* PB to bring up binary star orbit */ + Obj *op; /* real database pointer, or possibly svobj */ + TSky *tsp; /* used iff we are displaying a trailed object*/ +} Popup; +static Popup pu; +static Obj svobj; /* used to point when far from any real object*/ + +/* popup button activate codes */ +enum PUB { + AIM, SETPHOTOMREF, PEYEPIECE, DEYEPIECE, TGOTO, OBSLOG, + GALLERY, LOADAV, ADD2FAV, NEWTRAIL +}; + +enum SCALES { /* scale changed codes */ + FOV_S, ALTDEC_S, AZRA_S +}; + +/* zoom support */ +static ZM_Undo *zm_undo; /* malloced list of zoom undo info */ +static int zm_nundo; /* n valid entries in zm_undo */ +static int zm_cundo; /* current depth on zm_undo */ +static ZM_Undo wzm; /* working zoom while drawing */ +static void zm_noundo (void); +static int zm_addundo (void); +static void zm_flip (int lr); +static void zm_installundo (void); +static void zm_cutundo (void); +static void zm_draw (void); + +/* connect handler for some fun kb shortcuts */ +static void sv_shortcuts (Widget w, XEvent *e,String *args,Cardinal *nargs); +static XtActionsRec scuts[] = { + {"SVScut", sv_shortcuts} +}; + +static char skyocategory[] = "Sky View -- Options"; /* Save category */ +char skycategory[] = "Sky View"; /* Save category */ +static char svtrres[] = "SkyViewTrailState"; /* trail resource */ + +/* used for creating the Options menu */ +typedef struct { + char *label; /* toggle button label */ + char oneofmany; /* 1 for ONE_OF_MANY, 0 for N_OF_MANY */ + char *name; /* instance name */ + int *flagp; /* address of flag it controls */ + Widget *wp; /* controlling widget, or NULL */ + char *tip; /* tip text */ +} ViewOpt; + +/* cursor used while mag glass is on */ +static Cursor magglass_cursor; + +static XtIntervalId fs_to; /* set while checking field stars */ + +/* bring up Sky view shell, creating if first time */ +void +sv_manage () +{ + if (!svshell_w) { + sv_create_svshell(); + indi_createShell(); + } + + sfifo_openin(); + XtPopup (svshell_w, XtGrabNone); + set_something (svshell_w, XmNiconic, (XtArgVal)False); + if (fs_to != 0) { + XtRemoveTimeOut (fs_to); + fs_to = 0; + } + fs_to = XtAppAddTimeOut (xe_app, FSTO, chkFS_to, 0); + /* rely on expose to cause a fresh update */ + + setXRes (sv_viewupres(), "1"); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +sv_newres() +{ + if (!svshell_w) + return; + sv_mk_gcs(); + svtb_newpm(ttbar_w); + sv_update (mm_get_now(), 1); +} + +/* return true if sky view is up now and ok to draw to, else 0 */ +int +sv_ison() +{ + return(isUp(svshell_w) && sv_pm); +} + +/* called when we are to update our view. + * don't bother if we are not managed or if fields are off. + * discard any trails that have been turned off. + * reaim if we are tracking an object. + */ +/* ARGSUSED */ +void +sv_update (np, how_much) +Now *np; +int how_much; +{ + if (!svshell_w || !sv_pm) + return; + if (!sv_ison() && !how_much) + return; + + /* remove trails not on now */ + tobj_rmoff(); + + if (track_op) { + db_update (track_op); + if (sv_mark (track_op, 1, 1, 0, 1, 0, 0.0) < 0) + sv_all(np); /* still need it even if mark failed */ + } else + sv_all(np); +} + +/* mark a new scope location. + * if inview, move sky view if necessary to keep it visible. + */ +void +sv_scopeMark (Obj *op) +{ + if (sv_ison()) + sv_mark (op, 0, XmToggleButtonGetState(keeptelvis_w), 1, 0, 1, 0.0); +} + +/* called when the db beyond the builtin objects has changed. + * if it was appended to we can just redraw else it was reduced and we need to + * discard any trails we are keeping for objects that no longer exist and + * make sure no pending trail creations can come in and do something. + */ +void +sv_newdb(appended) +int appended; +{ + if (!appended) { + tobj_newdb(); + pu.op = NULL; /* effectively disables sv_mktrail() */ + } + + sv_update (mm_get_now(), 1); +} + +/* display a new FITS image */ +void +sv_newFITS () +{ + double ra, dec; + FImage *fip; + + watch_cursor(1); + + /* fetch the FITS descriptor */ + fip = si_getFImage(); + if (!fip) { + printf ("newfits Bug! FITS file disappeared in newfits()!\n"); + abort(); + } + + /* set loc and size .. if have WCS fields */ + if (xy2RADec (fip, fip->sw/2.0, fip->sh/2.0, &ra, &dec) == 0) { + + /* !aa_mode and sph_proj. + * N.B. do this before calling sv_set_scale(). + */ + if (aa_mode) { + aa_mode = 0; + XmToggleButtonSetState (aa_w, aa_mode, False); + XmToggleButtonSetState (rad_w, !aa_mode, False); + } + if (cyl_proj) { + cyl_proj = 0; + XmToggleButtonSetState (cyl_w, cyl_proj, False); + XmToggleButtonSetState (sph_w, !cyl_proj, False); + svtb_updateCyl (cyl_proj); + } + + /* set aim scales */ + sv_altdec = dec; + sv_set_scale(ALTDEC_S, 1); + sv_azra = ra; + sv_set_scale(AZRA_S, 1); + + /* FOV */ + setImFOVScales (fip); + } + + /* discard zooms */ + zm_noundo(); + + /* let's have a look! */ + sv_dspFITS(); + watch_cursor(0); +} + +/* called to display a FITS image whose aim and scale have already been set. */ +void +sv_dspFITS () +{ + /* build a pixmap to match our current size and orientation */ + si_newPixmap (sv_w, sv_h, flip_lr, flip_tb, zm_undo, zm_cundo); + + /* display */ + sv_all(NULL); +} + +/* called to turn on the horizon. */ +void +sv_hznOn() +{ + if (!want_hznmap) + XmToggleButtonSetState (hznmap_w, True, True); +} + +/* whether to show TB that sets whether to keep telescope marker visible */ +void +sv_showkeeptelvis (int on) +{ + if (on) + XtManageChild (keeptelvis_w); + else + XtUnmanageChild (keeptelvis_w); +} + +/* return the name of the resource containing whether this view is up */ +char * +sv_viewupres() +{ + return ("SkyViewUp"); +} + +/* set FOV scales to current /image/ display. + * mimic si_newPixmap's cropping behavior. + */ +static void +setImFOVScales (fip) +FImage *fip; +{ + double ra1, dec1, ra2, dec2, cvfov, vfov; + + /* use image height -- not critical to be exact */ + if (fip && xy2RADec (fip, fip->sw/2.0, 0.0, &ra1, &dec1) == 0) { + (void) xy2RADec (fip, fip->sw/2.0, fip->sh-1, &ra2, &dec2); + solve_sphere (ra2-ra1, PI/2-dec1, sin(dec2), cos(dec2), &cvfov, 0); + vfov = acos (cvfov); + if (sv_h*fip->sw < sv_w*fip->sh) + vfov *= (double)sv_h/sv_w; + sv_set_fov (vfov); + sv_set_scale(FOV_S, 1); + } +} + +/* draw a circle of radius rad on screen over image coords ix/iy. + * color has no meaning, but different values may result in different colors. + * this is not for heavy use, just a simple means for files that otherwise have + * no need for X stuff to draw a little on the sky view window. + */ +void +sv_drawimdot (ix, iy, rad, color) +double ix, iy; +int rad, color; +{ + static Pixel *colrs[] = {&eq_p, &cnsfig_p, &grid_p}; + Display *dsp = XtDisplay (svda_w); + Window win = XtWindow (svda_w); + int wx, wy; + + if (!si_ison() || !win) + return; + si_im2win (ix, iy, sv_w, sv_h, &wx, &wy); + if (flip_lr) + wx = sv_w - 1 - wx; + if (flip_tb) + wy = sv_h - 1 - wy; + XSetForeground (dsp, sv_gc, *colrs[color%XtNumber(colrs)]); + if (rad < 1) rad = 1; /* friendly clamp */ + XDrawArc (dsp, win, sv_gc, wx-rad, wy-rad, 2*rad, 2*rad, 0, 360*64); + XSync (dsp, False); +} + +/* called to reinstate a SvHistory */ +void +svh_goto (SvHistory *hp) +{ + /* don't even try to get back a FITS image */ + si_off(); + + /* restore aa_mode. + * N.B. do this before calling sv_set_scale(). + */ + if (hp->aa_mode != aa_mode) { + aa_mode = hp->aa_mode; + XmToggleButtonSetState (aa_w, aa_mode, False); + XmToggleButtonSetState (rad_w, !aa_mode, False); + } + + /* restore aim scales */ + sv_altdec = hp->altdec; + sv_set_scale (ALTDEC_S, 1); + sv_azra = hp->azra; + sv_set_scale (AZRA_S, 1); + + /* restore fov scale */ + sv_set_fov (hp->fov); + sv_set_scale(FOV_S, 1); + + /* restore flip orientation */ + XmToggleButtonSetState (fliplr_w, flip_lr = hp->flip_lr, False); + XmToggleButtonSetState (fliptb_w, flip_tb = hp->flip_tb, False); + + /* restore mag limits and filter settings */ + svf_setmaglimits (hp->stmag, hp->ssmag, hp->dsmag, hp->magstp); + svf_settables (hp->type_table, hp->fclass_table); + + /* restore the grid options */ + XmToggleButtonSetState (grid_w, want_grid = hp->grid, False); + XmToggleButtonSetState (autogrid_w, want_autogrid = hp->autogrid,False); + XmToggleButtonSetState (aagrid_w, want_aagrid = hp->aagrid, False); + XmToggleButtonSetState (naagrid_w, !want_aagrid, False); + XmToggleButtonSetState (gridlbl_w, want_gridlbl = hp->gridlbl, False); + XmTextFieldSetString (vgrid_w, hp->vgrid); + XmTextFieldSetString (hgrid_w, hp->hgrid); + gridStepLabel(); + + /* restore labeling options */ + lbl_lst = hp->lbl_lst; + XmToggleButtonSetState(lbl_nst_w, !!(lbl_lst & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mst_w, !!(lbl_lst & OBJF_MLABEL), False); + lbl_lfs = hp->lbl_lfs; + XmToggleButtonSetState(lbl_nfs_w, !!(lbl_lfs & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mfs_w, !!(lbl_lfs & OBJF_MLABEL), False); + lbl_lss = hp->lbl_lss; + XmToggleButtonSetState(lbl_nss_w, !!(lbl_lss & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mss_w, !!(lbl_lss & OBJF_MLABEL), False); + lbl_lds = hp->lbl_lds; + XmToggleButtonSetState(lbl_nds_w, !!(lbl_lds & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mds_w, !!(lbl_lds & OBJF_MLABEL), False); + XmScaleSetValue (lbl_bst_w, hp->lbl_bst); + XmScaleSetValue (lbl_bfs_w, hp->lbl_bfs); + XmScaleSetValue (lbl_bss_w, hp->lbl_bss); + XmScaleSetValue (lbl_bds_w, hp->lbl_bds); + + /* restore other misc options */ + XmToggleButtonSetState (justd_w, justdots = hp->justd, False); + XmToggleButtonSetState (eclip_w, want_ec = hp->eclip, False); + XmToggleButtonSetState (eq_w, want_eq = hp->eq, False); + XmToggleButtonSetState (galac_w, want_ga = hp->galac, False); + XmToggleButtonSetState (hznmap_w, want_hznmap = hp->hznmap, False); + XmToggleButtonSetState (conb_w, want_conb = hp->conb, False); + XmToggleButtonSetState (conf_w, want_conf = hp->conf, False); + XmToggleButtonSetState (conn_w, want_conn = hp->conn, False); + XmToggleButtonSetState (cona_w, want_cona = hp->cona, False); + XmToggleButtonSetState (wanteyep_w, want_eyep = hp->eyep, False); + XmToggleButtonSetState (wantmag_w, want_magscale = hp->magscale, False); + XmToggleButtonSetState (wantamag_w, want_automag = hp->automag, False); + XmToggleButtonSetState (cyl_w, cyl_proj = hp->cyl_proj, False); + XmToggleButtonSetState (sph_w, !hp->cyl_proj, False); + + /* set to prevent automag from coming on and wiping out restored mags */ + if (!want_automag) + user_automagoff = 1; + + /* sync the toolbar to match */ + svtb_sync(); + + /* resize will do it all */ + sv_resize (hp->winw, hp->winh); +} + +/* called by the history mechanism when it needs to know the current settings. + */ +void +svh_get (SvHistory *hp) +{ + Dimension w, h; + char *str; + Arg args[10]; + int n; + + hp->fov = sv_vfov; + hp->altdec = sv_altdec; + hp->azra = sv_azra; + hp->aa_mode = aa_mode; + hp->flip_lr = flip_lr; + hp->flip_tb = flip_tb; + svf_getmaglimits (&hp->stmag, &hp->ssmag, &hp->dsmag, &hp->magstp); + hp->justd = justdots; + hp->eclip = want_ec; + hp->eq = want_eq; + hp->galac = want_ga; + hp->hznmap = want_hznmap; + hp->conb = want_conb; + hp->conf = want_conf; + hp->conn = want_conn; + hp->cona = want_cona; + hp->eyep = want_eyep; + hp->magscale = want_magscale; + hp->automag = want_automag; + hp->cyl_proj = cyl_proj; + + hp->grid = want_grid; + hp->autogrid = want_autogrid; + hp->aagrid = want_aagrid; + hp->gridlbl = want_gridlbl; + str = XmTextFieldGetString (vgrid_w); + (void) strcpy (hp->vgrid, str); + XtFree (str); + str = XmTextFieldGetString (hgrid_w); + (void) strcpy (hp->hgrid, str); + XtFree (str); + + hp->lbl_lst = lbl_lst; + hp->lbl_lfs = lbl_lfs; + hp->lbl_lss = lbl_lss; + hp->lbl_lds = lbl_lds; + XmScaleGetValue (lbl_bst_w, &hp->lbl_bst); + XmScaleGetValue (lbl_bfs_w, &hp->lbl_bfs); + XmScaleGetValue (lbl_bss_w, &hp->lbl_bss); + XmScaleGetValue (lbl_bds_w, &hp->lbl_bds); + svf_gettables (hp->type_table, hp->fclass_table); + + n = 0; + XtSetArg (args[n], XmNwidth, (XtArgVal)&w); n++; + XtSetArg (args[n], XmNheight, (XtArgVal)&h); n++; + XtGetValues (svda_w, args, n); + hp->winw = w; + hp->winh = h; +} + +/* turn off auto mag for an internal logic reason. + * N.B. do not use this to implement user turning off manually, that would + * interfere with user_automagoff. + */ +void +sv_amagoff () +{ + want_automag = 0; + XmToggleButtonSetState (wantamag_w, False, False); + svtb_updateAutoMag (0); +} + +/* called when the toolbar "brighter" PB is hit */ +void +svtb_brighter_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int stmag, ssmag, dsmag, magstp; + + svf_getmaglimits (&stmag, &ssmag, &dsmag, &magstp); + stmag += 1; + ssmag += 1; + dsmag += 1; + sv_amagoff (); + svf_setmaglimits (stmag, ssmag, dsmag, magstp); + sv_all(mm_get_now()); +} + +/* called when either toolbar "flip" PB is hit. + * client is 0 for l/r, else 1 for t/b + */ +void +svtb_flip_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int tb = (long int)client; + + if (tb) + XmToggleButtonSetState (fliptb_w, flip_tb ^= 1, True); + else + XmToggleButtonSetState (fliplr_w, flip_lr ^= 1, True); +} + +/* called when the toolbar "constel" TB changes */ +void +svtb_constel_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int want_conb_atoff = -1; /* flag as uninitialized */ + static int want_conf_atoff; + static int want_conn_atoff; + static int want_cona_atoff; + + int set = XmToggleButtonGetState(w); + + if (set) { + if (want_conb_atoff < 0) { + want_conb_atoff = want_conb; + want_conf_atoff = want_conf; + want_conn_atoff = want_conn; + want_cona_atoff = want_cona; + } + + if (!want_conb_atoff && !want_conf_atoff && !want_conn_atoff + && !want_cona_atoff) + want_conf_atoff = 1; + + /* restore settings when last turned off */ + XmToggleButtonSetState (conf_w, want_conf=want_conf_atoff, False); + XmToggleButtonSetState (cona_w, want_cona=want_cona_atoff, False); + XmToggleButtonSetState (conn_w, want_conn=want_conn_atoff, False); + XmToggleButtonSetState (conb_w, want_conb=want_conb_atoff, False); + } else { + /* save current settings then turn all off */ + want_conb_atoff = want_conb; + want_conf_atoff = want_conf; + want_conn_atoff = want_conn; + want_cona_atoff = want_cona; + XmToggleButtonSetState (conf_w, want_conf=False, False); + XmToggleButtonSetState (cona_w, want_cona=False, False); + XmToggleButtonSetState (conn_w, want_conn=False, False); + XmToggleButtonSetState (conb_w, want_conb=False, False); + } + + sv_all(mm_get_now()); +} + +/* called when the toolbar "dimmer" PB is hit */ +void +svtb_dimmer_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int stmag, ssmag, dsmag, magstp; + + svf_getmaglimits (&stmag, &ssmag, &dsmag, &magstp); + stmag -= 1; + ssmag -= 1; + dsmag -= 1; + sv_amagoff (); + svf_setmaglimits (stmag, ssmag, dsmag, magstp); + sv_all(mm_get_now()); +} + +/* called when the toolbar "grid" TB changes */ +void +svtb_grid_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int onnow = XmToggleButtonGetState(grid_w); + + /* rely on redraw in callback */ + if (onnow) { + XmToggleButtonSetState (grid_w, False, True); + } else { + /* match grid coord to display mode */ + want_aagrid = aa_mode; + XmToggleButtonSetState (aagrid_w, want_aagrid, False); + XmToggleButtonSetState (naagrid_w, !want_aagrid, False); + XmToggleButtonSetState (grid_w, True, True); + } +} + +/* called when the toolbar "automag" TB changes */ +void +svtb_automag_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (wantamag_w, + !XmToggleButtonGetState(wantamag_w), True); +} + +/* called when the toolbar "horizon" TB changes */ +void +svtb_hzn_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (hznmap_w, !XmToggleButtonGetState(hznmap_w), 1); +} + +/* called when the toolbar "live report" TB changes */ +void +svtb_report_cb(w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + want_report = XmToggleButtonGetState(w); + XmToggleButtonSetState (wantreport_w, want_report, 1); +} + + +/* called when the toolbar "field stars" TB is hit */ +void +svtb_fstars_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (wantfs_w, !XmToggleButtonGetState(wantfs_w), 1); +} + +/* called when the toolbar "names" TB changes */ +void +svtb_names_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int lbl_lst_atoff = -1; /* flag as uninitialized */ + static int lbl_lfs_atoff; + static int lbl_lss_atoff; + static int lbl_lds_atoff; + + int set = XmToggleButtonGetState (w); + + if (set) { + if (lbl_lst_atoff < 0) { + lbl_lst_atoff = lbl_lst; + lbl_lfs_atoff = lbl_lfs; + lbl_lss_atoff = lbl_lss; + lbl_lds_atoff = lbl_lds; + } + + if (!lbl_lst_atoff && !lbl_lss_atoff & !lbl_lds_atoff) + lbl_lst_atoff = lbl_lss_atoff = lbl_lds_atoff = OBJF_NLABEL; + + lbl_lst = lbl_lst_atoff; + XmToggleButtonSetState(lbl_nst_w, !!(lbl_lst & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mst_w, !!(lbl_lst & OBJF_MLABEL), False); + lbl_lfs = lbl_lfs_atoff; + XmToggleButtonSetState(lbl_nfs_w, !!(lbl_lfs & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mfs_w, !!(lbl_lfs & OBJF_MLABEL), False); + lbl_lss = lbl_lss_atoff; + XmToggleButtonSetState(lbl_nss_w, !!(lbl_lss & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mss_w, !!(lbl_lss & OBJF_MLABEL), False); + lbl_lds = lbl_lds_atoff; + XmToggleButtonSetState(lbl_nds_w, !!(lbl_lds & OBJF_NLABEL), False); + XmToggleButtonSetState(lbl_mds_w, !!(lbl_lds & OBJF_MLABEL), False); + } else { + XmToggleButtonSetState (lbl_nst_w, False, False); + XmToggleButtonSetState (lbl_mst_w, False, False); + lbl_lst_atoff = lbl_lst; + lbl_lst = 0; + XmToggleButtonSetState (lbl_nfs_w, False, False); + XmToggleButtonSetState (lbl_mfs_w, False, False); + lbl_lfs_atoff = lbl_lfs; + lbl_lfs = 0; + XmToggleButtonSetState (lbl_nss_w, False, False); + XmToggleButtonSetState (lbl_mss_w, False, False); + lbl_lss_atoff = lbl_lss; + lbl_lss = 0; + XmToggleButtonSetState (lbl_nds_w, False, False); + XmToggleButtonSetState (lbl_mds_w, False, False); + lbl_lds_atoff = lbl_lds; + lbl_lds = 0; + } + + sv_all(mm_get_now()); +} + +/* whether roaming report */ +int +svtb_reportIsOn() +{ + return (want_report); +} + + +/* called when the toolbar "planes" TB changes */ +void +svtb_planes_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int want_eq_atoff = -1; /* flag as uninitialized */ + static int want_ga_atoff; + static int want_ec_atoff; + + int set = XmToggleButtonGetState (w); + + if (set) { + if (want_eq_atoff < 0) { + want_eq_atoff = want_eq; + want_ga_atoff = want_ga; + want_ec_atoff = want_ec; + } + + if (!want_eq_atoff && !want_ga_atoff && !want_ec_atoff) + want_eq_atoff = want_ga_atoff = want_ec_atoff = 1; + + XmToggleButtonSetState (eclip_w, want_ec = want_ec_atoff, False); + XmToggleButtonSetState (galac_w, want_ga = want_ga_atoff, False); + XmToggleButtonSetState (eq_w, want_eq = want_eq_atoff, False); + } else { + XmToggleButtonSetState (eclip_w, False, False); + want_ec_atoff = want_ec; + want_ec = 0; + XmToggleButtonSetState (galac_w, False, False); + want_ga_atoff = want_ga; + want_ga = 0; + XmToggleButtonSetState (eq_w, False, False); + want_eq_atoff = want_eq; + want_eq = 0; + } + + sv_all(mm_get_now()); +} + +/* called when the toolbar "magscale" TB changes */ +void +svtb_magscale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (wantmag_w, XmToggleButtonGetState(w), True); +} + +/* called when the toolbar "orient" TB changes */ +void +svtb_orient_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (aa_mode) + XmToggleButtonSetState (rad_w, True, True); + else + XmToggleButtonSetState (aa_w, True, True); +} + +/* called when the toolbar "cylindrical projection" TB is hit */ +void +svtb_proj_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (sph_w, !XmToggleButtonGetState(w), True); +} + +/* called when the toolbar "print" PB is hit */ +void +svtb_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Sky View", sv_print); +} + +/* called when the toolbar "zoom in" PB is hit */ +void +svtb_zoomin_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* asserts */ + if (zm_cundo < 0) { + printf ("zoom Bug! zm_cundo=%d\n", zm_cundo); + abort(); + } + + /* use undo list if in the middle somewhere else create new */ + if (zm_nundo - zm_cundo >= 2) { + /* install next from undo stack */ + zm_cundo++; + zm_installundo (); + svtb_zoomok(1); + svtb_unzoomok(1); + if (si_ison()) + sv_dspFITS(); + else + sv_all(NULL); + } else { + /* save new */ + if (zm_addundo() == 0) { + svtb_zoomok(0); + if (si_ison()) + sv_dspFITS(); + else + sv_all(NULL); + svtb_unzoomok(1); + } + /* else error already reported */ + } +} + +/* called when the toolbar "unzoom" PB is hit */ +void +svtb_unzoom_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* asserts */ + if (!zm_undo || zm_cundo <= 0) { + printf ("unzoom Bug! zm_undo=%d zm_cundo=%d\n", !!zm_undo,zm_cundo); + abort(); + } + + /* show previous undo; disable PB if hit the top */ + --zm_cundo; + zm_installundo(); + svtb_zoomok(1); + if (si_ison()) + sv_dspFITS(); + else + sv_all(NULL); + svtb_unzoomok (zm_cundo != 0); /* no more unzooms? */ +} + +/* sync the toolbar to match the options */ +static void +svtb_sync() +{ + char tt[NOBJTYPES]; + char ct[NCLASSES]; + + svtb_updateCyl (cyl_proj); + svtb_updateGrid (want_grid); + svtb_updateLRFlip (flip_lr); + svtb_updateTBFlip (flip_tb); + svtb_updateAutoMag (want_automag); + svtb_updateNames (lbl_lst || lbl_lfs || lbl_lss || lbl_lds); + svtb_updateHorizon (want_hznmap); + svtb_updateFStars (want_fs); + svtb_updateCns (want_conb||want_conf||want_conn||want_cona); + svtb_updatePlanes (want_eq || want_ec || want_ga); + svtb_updateMagScale (want_magscale); + svtb_updateReport (want_report); + + svf_gettables (tt, ct); + svtb_updateCTTT (ct, tt); +} + +/* mark the given object, centering if outside current fov. + * N.B. we do *not* update the s_ fields of op. + */ +void +sv_point (op) +Obj *op; +{ + if (!sv_ison() || !op || op->o_type == UNDEFOBJ) + return; + + /* turn off following remote inputs when told explicitly to point */ + XmToggleButtonSetState (keeptelvis_w, False, 1); + + (void) sv_mark (op, 0, 1, 1, 1, 0, 0.0); +} + +/* show a marker at the location of the given object *if* it's in fov now. + * N.B. we do *not* update the s_ fields of op. + */ +void +sv_id (op) +Obj *op; +{ + if (!sv_ison() || !op || op->o_type == UNDEFOBJ) + return; + + (void) sv_mark (op, 0, 0, 1, 1, 0, 0.0); +} + +/* called to put up or remove the watch cursor. */ +void +sv_cursor (c) +Cursor c; +{ + Window win; + + if (svshell_w && (win = XtWindow(svshell_w)) != 0) { + Display *dsp = XtDisplay(svshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (svops_w && (win = XtWindow(svops_w)) != 0) { + Display *dsp = XtDisplay(svops_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* draw everything subject to any filtering. + */ +void +sv_all(np) +Now *np; +{ + Display *dsp = XtDisplay(svda_w); + /* N.B. don't cache sv_pm, it can change if resized vis XmUpdate */ + + /* busy */ + watch_cursor(1); + + /* print "sky" as paper */ + XPSPaperColor (sky_p); + + /* use current time if none provided */ + if (!np) + np = mm_get_now(); + + /* put up the timestamp */ + timestamp (np, dt_w); + + /* rebuild a clean sky */ + if (si_ison()) { + Pixmap fpm = si_getPixmap(); + FImage *fip = si_getFImage(); + double ra, dec; + if (!fpm) { + printf ("sv_all Bug! FITS pixmap disappeared!\n"); + abort(); + } + if (!fip) { + printf ("sv_all Bug! FITS FImage disappeared!\n"); + abort(); + } + XCopyArea (dsp, fpm, sv_pm, sv_gc, 0, 0, sv_w, sv_h, 0, 0); + if (XPSDrawing()) + si_ps (); + svtb_imMode (1); + XtManageChild (fovimg_w); + if (xy2RADec (fip, 0.0, 0.0, &ra, &dec) < 0) { + /* no WCS coords, so can't draw anything else */ + sv_copy_sky(); + watch_cursor(0); + return; + } + } else if (!cyl_proj && sv_dfov > PI) { + /* full horizon will show */ + int w = (int)(PI*sv_h/sv_vfov); + int x = (sv_w - w)/2; + int y = (sv_h - w)/2; + + XSetForeground (dsp, sv_gc, sky_p); + XPSFillRectangle (dsp, sv_pm, sv_gc, 0, 0, sv_w, sv_h); + XSetForeground (dsp, sv_gc, bg_p); + XPSDrawArc (dsp, sv_pm, sv_gc, x, y, w, w, 0, 360*64); + + /* N.B. we assume no FITS file could ever be displayed this large */ + svtb_imMode (0); + XtUnmanageChild (fovimg_w); + } else { + /* solid sky bkq, just border on paper */ + XSetForeground (dsp, sv_gc, sky_p); + XPSFillRectangle (dsp, sv_pm, sv_gc, 0, 0, sv_w, sv_h); + XSetForeground (dsp, sv_gc, bg_p); + XPSDrawRectangle (dsp, sv_pm, sv_gc, 0, 0, sv_w-1, sv_h-1); + svtb_imMode (0); + XtUnmanageChild (fovimg_w); + } + + /* draw eyepieces next so everything is on top of them */ + if (want_eyep) + draw_eyep (dsp, sv_pm, sv_gc); + + /* draw the coord grid if desired */ + if (want_grid) { + XSetForeground (dsp, sv_gc, grid_p); + draw_grid(dsp, sv_pm, sv_gc); + } + + /* draw the equator if desired */ + if (want_eq) { + XSetForeground (dsp, sv_gc, eq_p); + draw_equator (np, dsp, sv_pm, sv_gc); + } + + /* draw the galactic isophote, poles and eq if desired */ + if (want_ga) { + XSetForeground (dsp, sv_gc, eq_p); + draw_galactic (np, dsp, sv_pm, sv_gc); + XSetForeground (dsp, sv_gc, mw_p); + draw_milkyway (np, dsp, sv_pm, sv_gc); + } + + /* draw the ecliptic */ + if (want_ec) { + XSetForeground (dsp, sv_gc, eq_p); + draw_ecliptic (np, dsp, sv_pm, sv_gc); + } + + /* draw constellation boundaries if desired */ + if (want_conb) + draw_cnsbounds (np, dsp, sv_pm); + + /* draw constellation figures and/or names if desired */ + if (want_conf || want_conn || want_cona) + draw_cns (np, dsp, sv_pm); + + /* go through the trailobj list and display that stuff too. */ + tobj_display_all(); + + /* draw umbra (late, so shows over moon) */ + if (want_ec) { + XSetForeground (dsp, sv_gc, eq_p); + draw_umbra (np, dsp, sv_pm, sv_gc); + } + + /* draw horizon map if desired, late so skyline can do clipping */ + if (want_hznmap) + draw_hznmap (np, dsp, sv_pm, sv_gc); + + /* draw all the objects -- they do their own clipping so + * this way their names are not clipped + */ + draw_allobjs (dsp, sv_pm); + + /* draw the magnitude scale last so it always covers everything else */ + if (want_magscale) + sv_magscale (dsp, sv_pm); + + /* user annotation */ + ano_draw (svda_w, sv_pm, sv_ano, aa_mode); + + /* compass rose */ + if (want_compass) + draw_compass (dsp, sv_pm); + + /* and we're done */ + sv_copy_sky(); + + watch_cursor(0); + +} + +/* convert world to/from X coords depending on w2x. + * if arg then a/b are alt/az else dec/ra + * return whether visible. + */ +static int +sv_ano (double *ap, double *bp, int *xp, int *yp, int w2x, int arg) +{ + double altdec, azra; + int v; + + if (w2x) { + if (arg != aa_mode) + sv_other (*ap, *bp, arg, &altdec, &azra); + else { + altdec = *ap; + azra = *bp; + } + v = sv_loc (altdec, azra, xp, yp); + } else { + v = sv_unloc (*xp, *yp, &altdec, &azra); + if (arg != aa_mode) + sv_other (altdec, azra, arg, ap, bp); + else { + *ap = altdec; + *bp = azra; + } + } + + return (v); +} + +/* compute the angle ccw from 3 o'clock at which we should draw the galaxy + * ellipse + */ +static double +x_angle (double ra, double dec, double pa) +{ + Now *np = mm_get_now(); + double na; /* angle from 3 o'clock to N */ + double a; /* ellipse axis: angle CCW from 3 oclk*/ + int x0, y0; /* location of object */ + int xn, yn; /* location a little N of object */ + int xe, ye; /* location a little E of object */ + double step; /* "a little" */ + Obj o; /* test object */ + double altdec, azra; /* test location */ + int eccw; /* 1 if E shows CCW of N, else 0 */ + + /* move by about 50 pixels each way (or 1 degree if new) */ + step = sv_h>0 ? sv_vfov/sv_h*50 : degrad(1); + + /* location of object */ + memset (&o, 0, sizeof(o)); + o.o_type = FIXED; + o.f_RA = ra; + o.f_dec = dec; + o.f_epoch = (float)epoch; + (void) obj_cir (np, &o); + altdec = aa_mode ? o.s_alt : o.s_dec; + azra = aa_mode ? o.s_az : o.s_ra; + (void) sv_loc (altdec, azra, &x0, &y0); + + /* location due north */ + o.f_RA = ra; + o.f_dec = (float)(dec + step); + if (o.f_dec > PI/2) { + o.f_RA += (float)PI; + o.f_dec = (float)PI - o.f_dec; + } + (void) obj_cir (np, &o); + altdec = aa_mode ? o.s_alt : o.s_dec; + azra = aa_mode ? o.s_az : o.s_ra; + (void) sv_loc (altdec, azra, &xn, &yn); + + /* location due east */ + o.f_RA = (float)(ra + step/cos(dec)); + o.f_dec = dec; + (void) obj_cir (np, &o); + altdec = aa_mode ? o.s_alt : o.s_dec; + azra = aa_mode ? o.s_az : o.s_ra; + (void) sv_loc (altdec, azra, &xe, &ye); + + /* see which way is east from north -- use cross product */ + eccw = (xn-x0)*(y0-ye)-(y0-yn)*(xe-x0) > 0 ? 1 : 0; + + /* find angle ccw from 3-oclock */ + if (xn == x0) + na = yn > y0 ? -PI/2 : PI/2; + else + na = atan2 ((double)(y0-yn), (double)(xn-x0)); + a = eccw ? na+pa : na-pa; + range (&a, 2*PI); + + return (a); +} + +/* draw the given object so it has a nominal diameter of diam pixels. + * we maintain a static cache of common X drawing objects for efficiency. + * (mallocing seemed to keep the memory arena too fragmented). + * to force a flush of this cache, call with op == NULL. + * N.B. X's DrawRect function is actually w+1 wide and h+1 high. + */ +void +sv_draw_obj (Display *dsp, Drawable win, GC gc, Obj *op, int x, int y, +int diam, int dotsonly) +{ +#define MINSYMDIA 4 /* never use fancy symbol at diam this small */ +#define CACHE_SZ 75 /* size of points/arcs/etc cache */ +#define CACHE_PAD 10 /* most we ever need in one call */ +#define CACHE_HWM (CACHE_SZ - CACHE_PAD) /* hi water mark */ + static XPoint xpoints[CACHE_SZ], *xp = xpoints; + static XArc xdrawarcs[CACHE_SZ], *xda = xdrawarcs; + static XArc xfillarcs[CACHE_SZ], *xfa = xfillarcs; + static XArc xstars[CACHE_SZ], *xst = xstars; + static XSegment xsegments[CACHE_SZ], *xs = xsegments; + static XRectangle xdrawrects[CACHE_SZ], *xdr = xdrawrects; + static XRectangle xfillrects[CACHE_SZ], *xfr = xfillrects; + static GC cache_gc; + int force; + int n; + + /* might be called to draw on other screens before us */ + if (!svshell_w) + sv_create_svshell(); + + /* for sure if no op or different gc */ + force = !op || gc != cache_gc; + + if ((n = xp - xpoints) >= CACHE_HWM || (force && n > 0)) { + XPSDrawPoints (dsp, win, cache_gc, xpoints, n, CoordModeOrigin); + xp = xpoints; + } + if ((n = xda - xdrawarcs) >= CACHE_HWM || (force && n > 0)) { + XPSDrawArcs (dsp, win, cache_gc, xdrawarcs, n); + xda = xdrawarcs; + } + if ((n = xfa - xfillarcs) >= CACHE_HWM || (force && n > 0)) { + XPSFillArcs (dsp, win, cache_gc, xfillarcs, n); + xfa = xfillarcs; + } + if ((n = xs - xsegments) >= CACHE_HWM || (force && n > 0)) { + XPSDrawSegments (dsp, win, cache_gc, xsegments, n); + xs = xsegments; + } + if ((n = xdr - xdrawrects) >= CACHE_HWM || (force && n > 0)) { + XPSDrawRectangles (dsp, win, cache_gc, xdrawrects, n); + xdr = xdrawrects; + } + if ((n = xfr - xfillrects) >= CACHE_HWM || (force && n > 0)) { + XPSFillRectangles (dsp, win, cache_gc, xfillrects, n); + xfr = xfillrects; + } + if ((n = xst - xstars) >= CACHE_HWM || (force && n > 0)) { + int i; + for (i = 0; i < n; i++) + XPSDrawStar (dsp, win, cache_gc, xstars[i].x, xstars[i].y, + xstars[i].width); + xst = xstars; + } + + cache_gc = gc; + + if (!op) + return; /* just flushing, thanks */ + + /* if object is smallish then we don't use the fancy + * symbols, just use dots or filled circles. + */ + if (diam <= MINSYMDIA) { + if (diam <= 1) { + xp->x = x; + xp->y = y; + xp++; + } else { + xst->x = x - diam/2; + xst->y = y - diam/2; + xst->width = diam; + xst++; + } + return; + } + + switch (op->o_type) { + case PLANET: + if (op->s_phase > 98) { + /* just use a filled circle */ + xst->x = x - diam/2; + xst->y = y - diam/2; + xst->width = diam; + xst++; + } else + sv_draw_pl (dsp, win, gc, op, x, y, diam); + break; + + case FIXED: + switch (op->f_class) { + case 'G': /* galaxies */ + case 'H': + { + int xa; /* X angle: + CCW from 3 oclock */ + int hh; /* half-height */ + double a; /* ellipse axis: angle CCW from 3 oclk*/ + + a = x_angle (op->s_ra, op->s_dec, get_pa(op)); + + /* convert to X Windows units */ + xa = (int)floor(raddeg(a)*64 + 0.5); + + /* draw ellipse */ + n = diam/2; + hh = (int)floor(n*get_ratio(op) + 0.5); + XPSDrawEllipse (dsp, win, gc, x - n, y - hh, + xa, 2*n, 2*hh, 0, 360*64); + } + break; + + case 'A': /* galaxy cluster */ + /* ellipse */ + n = diam/2; + xda->x = x - n; + xda->y = y - n/2; + xda->width = diam; + xda->height = n; + xda->angle1 = 0; + xda->angle2 = 360*64; + xda++; + break; + + case 'C': /* globular clusters */ + /* plus in a circle, like Tirion */ + n = diam/2; + xda->x = x - n; + xda->y = y - n; + xda->width = 2*n; + xda->height = 2*n; + xda->angle1 = 0; + xda->angle2 = 360*64; + xda++; + xs->x1 = x-n; xs->y1 = y; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x; xs->y1 = y-n; xs->x2 = x; xs->y2 = y+n; xs++; + break; + + case 'U': /* glubular cluster within nebulosity */ + /* plus in a dotted circle */ + n = diam/2; + xs->x1 = x-n; xs->y1 = y; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x; xs->y1 = y-n; xs->x2 = x; xs->y2 = y+n; xs++; + + /* FALLTHRU */ + + case 'O': /* open cluster */ + /* dotted circle */ + { + int nd = (int)(PI*diam/12 + 1); /* every 3rd dot */ + double da = PI/2/nd; + int r = diam/2; + int i; + + /* reflect for quadrants 2-4 */ + for (i = 0; i < nd; i++) { + int dx = (int)floor(r*cos(i*da) + 0.5); + int dy = (int)floor(r*sin(i*da) + 0.5); + + /* be mindful of filling the xpoints cache */ + if ((n = xp - xpoints) > CACHE_HWM-4) { + XPSDrawPoints (dsp, win, cache_gc, xpoints, n, + CoordModeOrigin); + xp = xpoints; + } + + xp->x = x + dx; xp->y = y + dy; xp++; + xp->x = x - dy; xp->y = y + dx; xp++; + xp->x = x - dx; xp->y = y - dy; xp++; + xp->x = x + dy; xp->y = y - dx; xp++; + } + } + break; + + case 'P': /* planetary nebula */ + /* open square */ + n = diam/2; + xdr->x = x-n; + xdr->y = y-n; + xdr->width = diam; + xdr->height = diam; + xdr++; + break; + + case 'R': /* supernova remnant */ + /* two concentric circles */ + n = diam/2; + xda->x = x - n; + xda->y = y - n; + xda->width = 2*n+1; + xda->height = 2*n+1; + xda->angle1 = 0; + xda->angle2 = 360*64; + xda++; + + if (diam > 3) { + n /= 2; /* well inside */ + xda->x = x - n; + xda->y = y - n; + xda->width = 2*n+1; + xda->height = 2*n+1; + xda->angle1 = 0; + xda->angle2 = 360*64; + xda++; + } else { + xp->x = x; + xp->y = y; + xp++; + } + + break; + + case 'Y': /* supernova */ + /* filled circle in diamond */ + n = diam/2; + + xs->x1 = x-n; xs->y1 = y; xs->x2 = x; xs->y2 = y-n; xs++; + xs->x1 = x; xs->y1 = y-n; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x+n; xs->y1 = y; xs->x2 = x; xs->y2 = y+n; xs++; + xs->x1 = x; xs->y1 = y+n; xs->x2 = x-n; xs->y2 = y; xs++; + + if (diam > 3) { + n /= 2; /* well inside */ + xfa->x = x - n; + xfa->y = y - n; + xfa->width = 2*n+1; + xfa->height = 2*n+1; + xfa->angle1 = 0; + xfa->angle2 = 360*64; + xfa++; + } else { + xp->x = x; + xp->y = y; + xp++; + } + + break; + + case 'S': /* stars */ + /* filled circle */ + n = diam/2; + xst->x = x - n; + xst->y = y - n; + xst->width = diam; + xst++; + break; + + case 'D': /* double stars */ + /* filled circle with one horizontal line through it */ + n = diam/2; + xst->x = x - n; + xst->y = y - n; + xst->width = diam; + xst++; + + if (!dotsonly) { + xs->x1 = x - n - diam/4; + xs->y1 = y; + xs->x2 = x - n + diam + diam/4; + xs->y2 = y; + xs++; + } + + break; + + case 'M': /* multiple stars */ + /* open circle with two horizontal lines through it */ + n = diam/2; + xda->x = x - n; + xda->y = y - n; + xda->width = diam; + xda->height = diam; + xda->angle1 = 0; + xda->angle2 = 360*64; + xda++; + + if (!dotsonly) { + xs->x1 = x - n - diam/4; + xs->x2 = x - n + diam + diam/4; + xs->y2 = xs->y1 = y - n + n/2 + 1; + xs++; + xs->x1 = x - n - diam/4; + xs->x2 = x - n + diam + diam/4; + xs->y2 = xs->y1 = y - n + diam - 1 - n/2; + xs++; + } + + break; + case 'V': /* variable star */ + /* central dot with concentric circle */ + n = diam/2; + if (dotsonly) { + xst->x = x - n; + xst->y = y - n; + xst->width = diam; + xst++; + } else { + xda->x = x - n; + xda->y = y - n; + xda->width = 2*n+1; + xda->height = 2*n+1; + xda->angle1 = 0; + xda->angle2 = 360*64; + xda++; + + if (diam > 3) { + n /= 2; + xfa->x = x - n+1; + xfa->y = y - n+1; + xfa->width = 2*n; + xfa->height = 2*n; + xfa->angle1 = 0; + xfa->angle2 = 360*64; + xfa++; + } + } + + break; + + case 'F': /* diffuse nebula */ + /* open diamond with top and bottom bar */ + n = diam/2; + xs->x1 = x-n; xs->y1 = y; xs->x2 = x; xs->y2 = y-n; xs++; + xs->x1 = x; xs->y1 = y-n; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x+n; xs->y1 = y; xs->x2 = x; xs->y2 = y+n; xs++; + xs->x1 = x; xs->y1 = y+n; xs->x2 = x-n; xs->y2 = y; xs++; + xs->x1 = x-n; xs->y1 = y-n; xs->x2 = x+n; xs->y2 = y-n; xs++; + xs->x1 = x-n; xs->y1 = y+n; xs->x2 = x+n; xs->y2 = y+n; xs++; + break; + + case 'K': /* dark nebulae */ + /* open diamond */ + n = diam/2; + xs->x1 = x-n; xs->y1 = y; xs->x2 = x; xs->y2 = y-n; xs++; + xs->x1 = x; xs->y1 = y-n; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x+n; xs->y1 = y; xs->x2 = x; xs->y2 = y+n; xs++; + xs->x1 = x; xs->y1 = y+n; xs->x2 = x-n; xs->y2 = y; xs++; + break; + + case 'N': /* bright nebulae */ + /* open hexagon */ + n = diam/2; + xs->x1 = x-n; xs->y1 = y; xs->x2 = x-n/2; xs->y2 = y-n; xs++; + xs->x1 = x-n/2; xs->y1 = xs->y2 = y-n; xs->x2 = x+n/2; xs++; + xs->x1 = x+n/2; xs->y1 = y-n; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x+n; xs->y1 = y; xs->x2 = x+n/2; xs->y2 = y+n; xs++; + xs->x1 = x+n/2; xs->y1 = xs->y2 = y+n; xs->x2 = x-n/2; xs++; + xs->x1 = x-n/2; xs->y1 = y+n; xs->x2 = x-n; xs->y2 = y; xs++; + break; + + case 'Q': /* Quasar */ + /* plus sign */ + n = diam/2; + xs->x1 = x-n; xs->y1 = y; xs->x2 = x+n; xs->y2 = y; xs++; + xs->x1 = x; xs->y1 = y-n; xs->x2 = x; xs->y2 = y+n; xs++; + break; + + case 'L': /* Pulsar */ + /* opposing jets */ + n = diam/2; + xfa->x = x - n; + xfa->y = y - n; + xfa->width = diam; + xfa->height = diam; + xfa->angle1 = 160*64; + xfa->angle2 = 40*64; + xfa++; + xfa->x = x - n; + xfa->y = y - n; + xfa->width = diam; + xfa->height = diam; + xfa->angle1 = 340*64; + xfa->angle2 = 40*64; + xfa++; + break; + + case 'J': /* Radio source */ + /* half-circle pointing up and to the left */ + n = diam/2; + xda->x = x - n; + xda->y = y - n; + xda->width = diam; + xda->height = diam; + xda->angle1 = 225*64; + xda->angle2 = 180*64; + xda++; + break; + + case 'T': /* stellar object */ + if (dotsonly) { + /* filled circle */ + n = diam/2; + xst->x = x - n; + xst->y = y - n; + xst->width = diam; + xst++; + break; + } + /* FALLTHRU */ + + default: /* unknown type */ + /* an X */ + n = diam/3; + xs->x1= x-n; xs->y1= y-n; xs->x2= x+n; xs->y2= y+n; xs++; + xs->x1= x-n; xs->y1= y+n; xs->x2= x+n; xs->y2= y-n; xs++; + break; + } + break; + + case HYPERBOLIC: + case PARABOLIC: + /* hopefully has a tail -- draw a filled circle with one */ + xfa += sv_drawComet (xfa, diam, x, y); + break; + + case ELLIPTICAL: /* asteroids --- and periodic comets */ + if (op->o_name[0] == 'C' && op->o_name[1] == '/') { + /* name looks like a comet - draw tail */ + xfa += sv_drawComet (xfa, diam, x, y); + } else { + /* asteroid is filled square */ + n = diam/2; + xfr->x = x - n; + xfr->y = y - n; + xfr->width = diam; + xfr->height = diam; + xfr++; + } + break; + case EARTHSAT: + /* bird */ + n = diam/2; + xda->x = x - diam/4 - n; + xda->y = y - diam/15; + xda->width = diam; + xda->height = diam; + xda->angle1 = 60*64; + xda->angle2 = 60*64+1; /* insure completion */ + xda++; + xda->x = x - diam/4; + xda->y = y - diam/15; + xda->width = diam; + xda->height = diam; + xda->angle1 = 60*64; + xda->angle2 = 60*64; + xda++; + + break; + + case BINARYSTAR: + /* filled circle, or two angled properly if not dotsonly */ + if (dotsonly) { + n = diam/2; + xst->x = x - n; + xst->y = y - n; + xst->width = diam; + xst++; + } else + sv_drawBin (op, &xfa, &xs, diam, x, y); + break; + + default: + printf ("Bad type to sv_draw_obj: %d\n", op->o_type); + abort(); + } +} + +/* wrapper for calling sv_draw_obj from outside skyviewmenu.c*/ +void +sv_draw_obj_x (Display *dsp, Drawable win, GC gc, Obj *op, int x, int y, +int diam, int dotsonly, int flip_tb_x, int flip_lr_x, int aa_mode_x, int cyl_proj_x, +double altdec_x, double azra_x, double vfov_x, double hfov_x, int w_x, int h_x) +{ + /* might be called to draw on other screens before us */ + if (!svshell_w) + sv_create_svshell(); + + int flip_tb_i = flip_tb; + int flip_lr_i = flip_lr; + int aa_mode_i = aa_mode; + int cyl_proj_i = cyl_proj; + + double altdec_i = sv_altdec; + double azra_i = sv_azra; + double vfov_i = sv_vfov; + double hfov_i = sv_hfov; + int w_i = sv_w; + int h_i = sv_h; + + flip_tb = flip_tb_x; + flip_lr = flip_lr_x; + aa_mode = aa_mode_x; + cyl_proj = cyl_proj_x; + + sv_altdec = altdec_x; + sv_azra = azra_x; + sv_vfov = vfov_x; + sv_hfov = hfov_x; + sv_w = w_x; + sv_h = h_x; + + sv_draw_obj (dsp, win, gc, op, x, y, diam, dotsonly); + + flip_tb = flip_tb_i; + flip_lr = flip_lr_i; + aa_mode = aa_mode_i; + cyl_proj = cyl_proj_i; + + sv_altdec = altdec_i; + sv_azra = azra_i; + sv_vfov = vfov_i; + sv_hfov = hfov_i; + sv_w = w_i; + sv_h = h_i; +} + +static void +sv_drawBin (Obj *op, XArc *xfap[], XSegment *xsp[], int diam, int x, int y) +{ + XArc *xfa = *xfap; + XSegment *xs = *xsp; + int n = diam/2; + double xa; /* X angle: rads CCW from 3 oclock */ + int dx, dy; + + /* find X Windows angle from primary to secondary */ + if (op->b_nbp == 0) { + Now *np = mm_get_now(); + op->b_2compute = 1; + obj_cir (np, op); + xa = x_angle (op->s_ra, op->s_dec, op->b_bo.bo_pa); + } else { + xa = 0; + } + + /* offset in direction of sec */ + dx = n * cos(xa); + dy = n * sin(xa); + + /* primary full size opposite direction */ + xfa->x = x - dx - n; + xfa->y = y + dy - n; + xfa->width = diam; + xfa->height = diam; + xfa->angle1 = 0; + xfa->angle2 = 360*64; + xfa++; + + /* secondary half size correct direction */ + xfa->x = x + dx - n/2; + xfa->y = y - dy - n/2; + xfa->width = n; + xfa->height = n; + xfa->angle1 = 0; + xfa->angle2 = 360*64; + xfa++; + + /* connector */ + xs->x1 = x - 3*dx/2; + xs->y1 = y + 3*dy/2; + xs->x2 = x + 3*dx/2; + xs->y2 = y - 3*dy/2; + xs++; + + *xfap = xfa; + *xsp = xs; +} + +static int +sv_drawComet (XArc xfa[], int diam, int x, int y) +{ + int n = diam/2; + + xfa->x = x; + xfa->y = y; + xfa->width = n; + xfa->height = n; + xfa->angle1 = 0; + xfa->angle2 = 360*64; + xfa++; + + xfa->x = x - n; + xfa->y = y - n; + xfa->width = diam; + xfa->height = diam; + xfa->angle1 = 120*64; + xfa->angle2 = 30*64; + xfa++; + + return (2); +} + +/* draw the planet at [x,y] with diameter d showing proper phase */ +static void +sv_draw_pl (dsp, win, gc, op, x, y, d) +Display *dsp; +Drawable win; +GC gc; +Obj *op; +int x, y; +int d; +{ + double f = op->s_phase/100.0; /* fraction lit */ + int x0 = x-d/2, y0 = y-d/2; /* corner of moon bounding box */ + int sx, sy; /* screen x,y of sun */ + int r; /* rotation to face sun, X units */ + int df; /* diam to terminator */ + Obj *sop; /* Sun info */ + + /* find direction towards sun from input x,y */ + sop = db_basic (SUN); + db_update (sop); + if (aa_mode) + sv_loc (sop->s_alt, sop->s_az, &sx, &sy); + else + sv_loc (sop->s_dec, sop->s_ra, &sx, &sy); + r = (int)floor(64*raddeg(atan2((double)(y-sy),(double)(sx-x))) + .5); + + /* all sky, then half towards sun lit, then ellipse for phase */ + XSetForeground (dsp, sv_gc, sky_p); + XPSFillArc (dsp, win, sv_gc, x0, y0, d, d, 0, 360*64); + if (f > .5) { + /* gibbous: more than half is lit */ + df = (int)floor(d*(2*f - 1) + .5); + XPSFillEllipse (dsp, win, gc, x0, y0, r, d, d, -90*64, 180*64); + XPSFillEllipse (dsp, win, gc, x-df/2, y0, r, df, d, 0, 64*360); + } else if (f*d > 3) { + /* crescent: more than half is sky */ + df = (int)floor(d*(1 - 2*f) + .5); + XPSFillEllipse (dsp, win, gc, x0, y0, r, d, d, -90*64, 180*64); + XPSFillEllipse (dsp, win, sv_gc, x-df/2, y0, r, df, d, 0, 64*360); + } else { + /* almost new, idealized crescent with variable angle, to a point */ + df = (int)((1.0-f*d/6)*180*64); + if (df > 120*64) + df = 181*64; + XPSDrawArc (dsp, win, gc, x0, y0, d, d, r-df, 2*df); + } +} + +/* called by outsiders to get the current pointing info */ +void +sv_getcenter (int *aamodep, double *fovp, double *altp, double *azp, +double *rap, double *decp) +{ + sv_fullwhere (mm_get_now(), sv_altdec, sv_azra, aa_mode, altp, azp, + rap, decp); + + *aamodep = aa_mode; + *fovp = sv_vfov; +} + +/* return to the caller our current field star list. + * if !want_fs we return NULL even if there is a pending list. + */ +void +sv_getfldstars (ObjF **fspp, int *nfsp) +{ + if (want_fs) { + *fspp = fldstars; + *nfsp = nfldstars; + } else { + *fspp = NULL; + *nfsp = 0; + } +} + +/* called by trails.c to create a new trail for pu.op. + * client is the Obj* to which a trail will be added. + * return 0 if ok else -1. + */ +static int +sv_mktrail (ts, statep, client) +TrTS ts[]; +TrState *statep; +XtPointer client; +{ + Obj *trop = (Obj *)client; + TrailObj *top; + Now *np, now; + int i; + + /* set trop to object getting new trail. + * started out as popup object but if that has changed we search the + * db to make sure it is still valid. if not, well it's gone. + */ + if (trop != pu.op) { + DBScan dbs; + Obj *op; + + for (db_scaninit(&dbs,ALLM, want_fs ? fldstars : NULL, nfldstars); + (op = db_scan (&dbs)) != NULL; ) + if (trop == op && !strcmp (trop->o_name, op->o_name)) + break; + if (!op) { + xe_msg (1, "Object has disappeared -- no trail created"); + return (-1); + } + } + + /* turn on watch cursor for really slow systems */ + watch_cursor (1); + + /* discard any preexisting trails for this object. */ + tobj_rmobj (trop); /* silently does nothing if op not on list */ + + /* allocate a new trailobj for this trail */ + top = tobj_addobj (trop, statep->nticks); + + /* work with a copy of Now because we modify n_mjd */ + np = mm_get_now(); + now = *np; + + /* make each entry */ + for (i = 0; i < statep->nticks; i++) { + TSky *tsp = &top->sky[i]; + TrTS *tp = &ts[i]; + + /* save the timestamp info time */ + tsp->trts = *tp; + + /* compute circumstances */ + tsp->o = *trop; + now.n_mjd = tp->t; + (void) obj_cir (&now, &tsp->o); + } + + /* save the other setup details for this trail */ + top->trs = *statep; + + /* retain setup state as default for next time */ + trstate = *statep; + + /* update trail state resource */ + tr_setres (svtrres, &trstate); + + /* redraw everything with the new trail, if we are up */ + if (isUp(svshell_w)) + sv_all (mm_get_now()); + + watch_cursor (0); + + return (0); +} + +/* helper function to fill in the Help menu*/ +static void +sv_fillin_help (mb_w) +Widget mb_w; +{ + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "SkyView"}, + {"on Control...", "SkyView_control"}, + {"on Images...", "SkyView_images"}, + {"on Favorites...", "SkyView_favorites"}, + {"on Telescope...", "SkyView_telescope"}, + {"on History...", "SkyView_history"}, + {"on Toolbars...", "SkyView_toolbars"}, + {"on Mouse...", "SkyView_mouse"}, + {"on Trails...", "SkyView_trails"}, + {"on Scales...", "SkyView_scales"}, + }; + Widget pd_w, cb_w; + Widget w; + XmString str; + Arg args[20]; + int n; + int i; + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "Help", args, n); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, sv_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } +} + +/* helper function to fill in the menubar */ +static void +sv_fillin_mb (mb_w) +Widget mb_w; +{ + Widget cb_w, pd_w; + Widget w; + Arg args[20]; + int n; + + /* control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "Control", args, n); + wtip (cb_w, "Access to many Sky View supporting features"); + XtManageChild (cb_w); + + /* make the PB which can bring up the Options dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "FPB", args, n); + XtAddCallback (w, XmNactivateCallback, sv_opdialog_cb, 0); + set_xmstring (w, XmNlabelString, "Options..."); + wtip (w, "List of several viewing options"); + XtManageChild (w); + + /* make the pb that controls the filter menu */ + n = 0; + w = XmCreatePushButton (pd_w, "Filter", args, n); + XtAddCallback (w, XmNactivateCallback, sv_filter_cb, NULL); + set_xmstring (w, XmNlabelString, "Filter..."); + wtip (w, "Dialog to select type and brightness of objects"); + XtManageChild (w); + + /* create the print control */ + n = 0; + w = XmCreatePushButton (pd_w, "SVPrint", args, n); + XtAddCallback (w, XmNactivateCallback, sv_print_cb, NULL); + set_xmstring (w, XmNlabelString, "Print..."); + wtip (w, "Print the current Sky View map"); + XtManageChild (w); + + /* create the list control */ + n = 0; + w = XmCreatePushButton (pd_w, "List", args, n); + XtAddCallback (w, XmNactivateCallback, sv_list_cb, NULL); + set_xmstring (w, XmNlabelString, "List..."); + wtip (w, "Create a file listing all objects in the current view"); + XtManageChild (w); + + /* make the PB which can bring up the horizon setup dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "Hzn", args, n); + XtAddCallback (w, XmNactivateCallback,(XtCallbackProc)hzn_manage,0); + set_xmstring (w, XmNlabelString, "Horizon..."); + wtip (w, "Define local horizon shape"); + XtManageChild (w); + + /* make the PB which can bring up the field star setup dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "FS", args, n); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)fs_manage,0); + set_xmstring (w, XmNlabelString, "Field Stars..."); + wtip (w, "Setup for GSC and other big catalogs"); + XtManageChild (w); + + /* make the PB which can bring up the Favorites setup dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "Fav", args, n); + XtAddCallback (w, XmNactivateCallback,(XtCallbackProc)fav_manage,0); + set_xmstring (w, XmNlabelString, "Favorites..."); + wtip (w, "Manage the list of Favorites"); + XtManageChild (w); + + /* make the PB which can bring up the Eyepiece dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "SVEPSz", args, n); + XtAddCallback (w, XmNactivateCallback, sv_eyep_cb, NULL); + set_xmstring (w, XmNlabelString, "Eyepieces..."); + wtip (w, "Setup Eyepiece parameters"); + XtManageChild (w); + + /* make the PB which can bring up the manual Coordinates dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "SVMC", args, n); + XtAddCallback (w, XmNactivateCallback, sv_mancoord_cb, NULL); + set_xmstring (w, XmNlabelString, "Coordinates..."); + wtip (w, "Handy coordinates converter"); + XtManageChild (w); + + /* make the PB which can bring up the user annotation dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "SVUA", args, n); + XtAddCallback (w, XmNactivateCallback, ano_cb, NULL); + set_xmstring (w, XmNlabelString, "User annotation..."); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* make a pb to add the current scene to a movie loop */ + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "Mloop", args, n); + XtAddCallback (w, XmNactivateCallback, sv_addframe_cb, NULL); + set_xmstring (w, XmNlabelString, "Add to movie..."); + wtip (w, "Add the current Sky View frame to the movie loop"); + XtManageChild (w); + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* create the tracking tb */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNset, False); n++; /* insure not overrode*/ + tracktb_w = XmCreateToggleButton (pd_w, "Tracking", args, n); + XtAddCallback (tracktb_w, XmNvalueChangedCallback, sv_track_cb, 0); + XtSetSensitive (tracktb_w, False); + wtip (tracktb_w,"When on, Sky View stays locked onto an object"); + XtManageChild (tracktb_w); + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, sv_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* Images pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "IPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'I'); n++; + cb_w = XmCreateCascadeButton (mb_w, "Images", args, n); + wtip (cb_w, "Access to features for viewing and analysing images"); + XtManageChild (cb_w); + + /* make the pb which can bring up the FITS file dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "Fits", args, n); + XtAddCallback (w, XmNactivateCallback, sv_fits_cb, NULL); + set_xmstring (w, XmNlabelString, "Load and save..."); + wtip (w, "Open and Save FITS files and download DSS images"); + XtManageChild (w); + + /* make the pb which can bring up the image analysis dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "Image", args, n); + XtAddCallback (w, XmNactivateCallback, sv_image_cb, NULL); + set_xmstring (w, XmNlabelString, "Analysis tools..."); + wtip (w, "Image analysis functions"); + XtManageChild (w); + + /* make the pb which can bring up the image registration dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "Registration", args, n); + XtAddCallback (w, XmNactivateCallback, sv_registration_cb, NULL); + set_xmstring (w, XmNlabelString, "Registration..."); + wtip (w, "Align one or more images to a reference image."); + XtManageChild (w); + + /* make the pb which can bring up the WCS solver dialog */ + n = 0; + w = XmCreatePushButton (pd_w, "WCS", args, n); + XtAddCallback (w, XmNactivateCallback, sv_wcs_cb, NULL); + set_xmstring (w, XmNlabelString, "WCS solver..."); + wtip (w, "Pattern match with field stars to find WCS solution"); + XtManageChild (w); + + /* make the Favorites cascade button and pulldown */ + + sv_create_favmenu (mb_w); + + /* make the telescope control pulldown */ + + n = 0; + XtSetArg (args[n], XmNisAligned, False); n++; + telpd_w = XmCreatePulldownMenu (mb_w, "FPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, telpd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'T'); n++; + cb_w = XmCreateCascadeButton (mb_w, "Telescope", args, n); + wtip (cb_w, "Control connections to telescope control system"); + XtManageChild (cb_w); + + /* make the PB to bring up the config dialog */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreatePushButton (telpd_w, "TCFG", args, n); + XtAddCallback (w, XmNactivateCallback, sv_tcp_cb, NULL); + set_xmstring (w, XmNlabelString, "Configure..."); + wtip (w, "Open the telescope configuration window"); + XtManageChild (w); + + /* make the PB to bring up the INDI panel */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreatePushButton (telpd_w, "TIN", args, n); + XtAddCallback (w, XmNactivateCallback, sv_indi_cb, NULL); + set_xmstring (w, XmNlabelString, "INDI panel..."); + wtip (w, "Open the INDI control panel"); + XtManageChild (w); + + /* TB whether to keep tel visible */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNvisibleWhenOff, (XtArgVal)True); n++; + keeptelvis_w = XmCreateToggleButton (telpd_w, "KTV", args, n); + set_xmstring (keeptelvis_w, XmNlabelString, "Keep visible"); + wtip (w, "Whether to move view to keep telescope marker visible"); + /* N.B. managed elsewhere! */ + + /* history */ + + n = 0; + w = XmCreateSeparator (telpd_w, "TGS", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreateLabel (telpd_w, "TH", args, n); + set_xmstring (w, XmNlabelString, "GoTo History"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreatePushButton (telpd_w, "Erase", args, n); + XtAddCallback (w, XmNactivateCallback, sv_etelpd_cb, NULL); + wtip (w, "Erase all GoTo History entries"); + XtManageChild (w); + + /* history */ + svh_create (mb_w); + + /* help */ + sv_fillin_help (mb_w); +} + +/* create the main skyview shell */ +static void +sv_create_svshell() +{ + Widget altdecsc_w, fovsc_w; + Widget mb_w; + Widget fr_w; + Widget svform_w; + XmString xms; + Arg args[20]; + EventMask mask; + int n; + + /* connect shortcuts */ + XtAppAddActions (xe_app, scuts, XtNumber(scuts)); + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Sky View"); n++; + XtSetArg (args[n], XmNiconName, "Sky View"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + svshell_w = XtCreatePopupShell ("SkyView", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (svshell_w); + set_something (svshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (svshell_w, XmNpopdownCallback, sv_popdown_cb, 0); + sr_reg (svshell_w, "XEphem*SkyView.width", skycategory, 0); + sr_reg (svshell_w, "XEphem*SkyView.height", skycategory, 0); + sr_reg (svshell_w, "XEphem*SkyView.x", skycategory, 0); + sr_reg (svshell_w, "XEphem*SkyView.y", skycategory, 0); + sr_reg (NULL, sv_viewupres(), skycategory, 0); + + n = 0; + svform_w = XmCreateForm (svshell_w, "SVForm", args, n); + XtAddCallback (svform_w, XmNhelpCallback, sv_help_cb, 0); + XtManageChild (svform_w); + + /* make a menu bar across the top -- fill in later */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (svform_w, "MB", args, n); + XtManageChild (mb_w); + + /* top toolbar below */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 0); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 0); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + ttbar_w = XmCreateRowColumn (svform_w, "TToolbar", args, n); + XtManageChild (ttbar_w); + + /* make a timestamp label across the bottom */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 25); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 75); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + dt_w = XmCreateLabel (svform_w, "TimeStamp", args, n); + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild(dt_w); + + /* altdec short cuts in lower right corner. + * create with XmString because of !XmNrecomputeSize + */ + + xms = XmStringCreateSimple ("45:00"); + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 1); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + altdecsc_w = XmCreatePushButton (svform_w, "ADSC", args, n); + XmStringFree (xms); + XtAddCallback (altdecsc_w, XmNactivateCallback, sv_altdecsc_cb, + (XtPointer)45); + wtip (altdecsc_w, "Press to slide Alt/Dec scale to 45:00"); + XtManageChild (altdecsc_w); + + xms = XmStringCreateSimple ("0:00"); + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, altdecsc_w); n++; + XtSetArg (args[n], XmNrightOffset, 1); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + altdecsc_w = XmCreatePushButton (svform_w, "ADSC", args, n); + XmStringFree (xms); + XtAddCallback (altdecsc_w, XmNactivateCallback, sv_altdecsc_cb, + (XtPointer)0); + wtip (altdecsc_w, "Press to slide Alt/Dec scale to 0:00"); + XtManageChild (altdecsc_w); + + xms = XmStringCreateSimple ("-45:00"); + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, altdecsc_w); n++; + XtSetArg (args[n], XmNrightOffset, 1); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + altdecsc_w = XmCreatePushButton (svform_w, "ADSC", args, n); + XmStringFree (xms); + XtAddCallback (altdecsc_w, XmNactivateCallback, sv_altdecsc_cb, + (XtPointer)-45); + wtip (altdecsc_w, "Press to slide Alt/Dec scale to 45:00"); + XtManageChild (altdecsc_w); + + /* FOV short cuts in lower left corner. + * create with XmString because of !XmNrecomputeSize + */ + + xms = XmStringCreateSimple ("90H"); + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 1); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + fovsc_w = XmCreatePushButton (svform_w, "FOVSC", args, n); + XtAddCallback (fovsc_w, XmNactivateCallback, sv_fovsc_cb,(XtPointer)0); + XmStringFree (xms); + wtip (fovsc_w, "Set FOV scale to 90:00H"); + XtManageChild (fovsc_w); + + xms = XmStringCreateSimple ("1:1"); + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, fovsc_w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + fovsc_w = XmCreatePushButton (svform_w, "FOVSC", args, n); + XtAddCallback (fovsc_w, XmNactivateCallback, sv_fovsc_cb,(XtPointer)1); + XmStringFree (xms); + wtip (fovsc_w, "Resize width to create 1:1 window size"); + XtManageChild (fovsc_w); + + xms = XmStringCreateSimple ("2:1"); + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, fovsc_w); n++; + XtSetArg (args[n], XmNleftOffset, 1); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + fovsc_w = XmCreatePushButton (svform_w, "FOVSC", args, n); + XtAddCallback (fovsc_w, XmNactivateCallback, sv_fovsc_cb,(XtPointer)2); + XmStringFree (xms); + wtip (fovsc_w, "Resize width to create 2:1 window size"); + XtManageChild (fovsc_w); + + xms = XmStringCreateSimple ("Image"); + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, fovsc_w); n++; + XtSetArg (args[n], XmNleftOffset, 1); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 1); n++; + XtSetArg (args[n], XmNmarginWidth, 1); n++; + XtSetArg (args[n], XmNmarginHeight, 1); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNlabelString, xms); n++; + fovimg_w = XmCreatePushButton (svform_w, "FOVSC", args, n); + XtAddCallback (fovimg_w, XmNactivateCallback, sv_fovsc_cb,(XtPointer)3); + XmStringFree (xms); + wtip (fovimg_w, "Resize to match image aspect ratio"); + /* manage when loading image XtManageChild (fovimg_w); */ + + /* make the three scale value displays above the shortcuts */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 33); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, altdecsc_w); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + fovl_w = XmCreateLabel (svform_w, "FOVL", args, n); + wtip (fovl_w, "Field of View, Deg:Min"); + XtManageChild (fovl_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 34); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 66); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, altdecsc_w); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + azral_w = XmCreateLabel (svform_w, "AzRAL", args, n); + wtip (azral_w, "Azimuth in Deg:Min or RA in Hours:Min"); + XtManageChild (azral_w); + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 67); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, altdecsc_w); n++; + XtSetArg (args[n], XmNrecomputeSize, False); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_END); n++; + altdecl_w = XmCreateLabel (svform_w, "AltDecL", args, n); + wtip (altdecl_w, "Altitude or Declination, Deg:Min"); + XtManageChild (altdecl_w); + + /* make the bottom scale above the row of scale values */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, azral_w); n++; /* typical */ + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, 4320-1); n++; /* 5' steps */ + XtSetArg (args[n], XmNshowValue, False); n++; + azra_w = XmCreateScale (svform_w, "AzRAScale", args, n); + wtip (azra_w, "Azimuth or RA scale"); + XtAddCallback (azra_w, XmNdragCallback, sv_scale_cb, (XtPointer)AZRA_S); + XtAddCallback (azra_w, XmNvalueChangedCallback, sv_scale_cb, + (XtPointer)AZRA_S); + XtManageChild (azra_w); + sr_reg (azra_w, NULL, skycategory, 0); + + /* make the left toolbar */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttbar_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, azra_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 0); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + ltbar_w = XmCreateRowColumn (svform_w, "LToolbar", args, n); + XtManageChild (ltbar_w); + + /* make the right toolbar */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttbar_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, azra_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightOffset, 0); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNpacking, XmPACK_TIGHT); n++; + rtbar_w = XmCreateRowColumn (svform_w, "RToolbar", args, n); + XtManageChild (rtbar_w); + + /* make the left (fov) scale */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttbar_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, ltbar_w); n++; + XtSetArg (args[n], XmNleftOffset, 0); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, azra_w); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNminimum, 1); n++; + XtSetArg (args[n], XmNmaximum, 180*(60/FOV_STEP)); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_BOTTOM); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + fov_w = XmCreateScale (svform_w, "FOVScale", args, n); + wtip (fov_w, "Field of view scale"); + XtAddCallback (fov_w, XmNdragCallback, sv_scale_cb, (XtPointer)FOV_S); + XtAddCallback (fov_w, XmNvalueChangedCallback, sv_scale_cb, + (XtPointer)FOV_S); + XtManageChild (fov_w); + sr_reg (fov_w, NULL, skycategory, 0); + + /* make the right scale */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttbar_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, rtbar_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, azra_w); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNminimum, -1080); n++; /* changed dynamicly */ + XtSetArg (args[n], XmNmaximum, 1080); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + altdec_w = XmCreateScale (svform_w, "AltDecScale", args, n); + wtip (altdec_w, "Altitude or Declination scale"); + XtAddCallback (altdec_w, XmNdragCallback, sv_scale_cb, + (XtPointer)ALTDEC_S); + XtAddCallback (altdec_w, XmNvalueChangedCallback, sv_scale_cb, + (XtPointer)ALTDEC_S); + XtManageChild (altdec_w); + sr_reg (altdec_w, NULL, skycategory, 0); + + /* make the sky drawing area in a frame inside the sliders */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ttbar_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, azra_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, fov_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, altdec_w); n++; + fr_w = XmCreateFrame (svform_w, "MapF", args, n); + XtManageChild (fr_w); + + n = 0; + svda_w = XmCreateDrawingArea (fr_w, "SkyMap", args, n); + XtAddCallback (svda_w, XmNexposeCallback, sv_da_exp_cb, 0); + mask = Button1MotionMask | Button2MotionMask | ButtonPressMask + | ButtonReleaseMask | PointerMotionMask + | EnterWindowMask | LeaveWindowMask + | PointerMotionHintMask; + XtAddEventHandler (svda_w, mask, False, sv_da_ptr_eh, 0); + XtManageChild (svda_w); + + /* fill in toolbars */ + svtb_create (ttbar_w, ltbar_w, rtbar_w); + + /* create the filter dialog. + * it's not managed yet, but its state info is used right off. + */ + svf_create(svshell_w); + + /* make the options menu */ + sv_create_options (); + + /* set up user's defaults. + * N.B. need Options by now since sv_set_scale(FOV_S) uses wantamag_w + * si_create() is to sync ROI tb state with resource + */ + sv_read_scale(AZRA_S); + sv_set_scale(AZRA_S, 1); + sv_read_scale(ALTDEC_S); + sv_set_scale(ALTDEC_S, 1); + sv_read_scale(FOV_S); + sv_set_scale(FOV_S, 1); + si_create(); + + /* now fill in the menu bar. this late because "History" pd must follow + * creating other stuff since it adds the first item. + */ + sv_fillin_mb (mb_w); + + /* init toolbar to match options */ + svtb_sync(); + +#if XmVersion == 1001 + /* try to connect arrow and page up/down keys to FOV initially */ + XmProcessTraversal (fov_w, XmTRAVERSE_CURRENT); + XmProcessTraversal (fov_w, XmTRAVERSE_CURRENT); /* yes, twice!! */ +#endif + +#ifdef XmNinitialFocus + /* try to connect arrow and page up/down keys to FOV initially */ + /* this approach showed up in Motif 1.2 */ + set_something (svform_w, XmNinitialFocus, (XtArgVal)fov_w); +#endif + + /* make the gcs and set up pixels */ + sv_mk_gcs(); + + /* register trail resource and init setup */ + sr_reg (NULL, svtrres, skycategory, 0); + tr_getres (svtrres, &trstate); + + /* create the crosshair cursur used under the mag glass */ + magglass_cursor = XCreateFontCursor (XtD, XC_tcross); +} + +static void +gridStepLabel() +{ + /* f_showit avoids blinking when updating scope position */ + f_showit (vgridl_w, want_aagrid ? "Alt: " : "Dec: "); + f_showit (hgridl_w, want_aagrid ? "Az: " : "RA: "); +} + +/* create the Options dialog. + */ +static void +sv_create_options () +{ + static ViewOpt vopts[] = { + {"Just dots", 0, "JustDots", &justdots, &justd_w, + "Draw all star types using simple dots, not typed symbols"}, + {"Flip Left/Right", 0, "FlipLR", &flip_lr, &fliplr_w, + "Flip display left-to-right"}, + {"Flip Top/Bottom", 0, "FlipTB", &flip_tb, &fliptb_w, + "Flip display top-to-bottom"}, + {"Equatorial plane", 0, "Equator", &want_eq, &eq_w, + "Draw the Celestial Equator as a 1:2 dotted line"}, + {"Ecliptic plane", 0, "Ecliptic", &want_ec, &eclip_w, + "Draw the Ecliptic as a 1:3 dotted line, and mark anti-solar location"}, + {"Galactic plane", 0, "Galactic", &want_ga, &galac_w, + "Draw the galactic equator as a 1:4 dotted line, and mark the pole"}, + {"Eyepieces", 0, "Eyepieces", &want_eyep, &wanteyep_w, + "Display eyepieces in current view, if any"}, + {"Magnitude key", 0, "MagScale", &want_magscale, &wantmag_w, + "Display table of dot sizes vs. star magnitudes in lower corner"}, + {"Compass rose", 0, "Compass", &want_compass, &wantcompass_w, + "Display compass rose showing directions at center of chart"}, + {"Auto magnitude", 0, "AutoMag", &want_automag, &wantamag_w, + "Maintain a reasonable faint magnitude based on Field of View"}, + {"Field stars",0, "FieldStars", &want_fs, &wantfs_w, + "Auto load and show Field Stars when position changes)"}, + {"Live dragging", 0, "LiveDrag", &want_livedrag, NULL, + "Update scene while dragging, not just when release"}, + {"Horizon map", 0, "HznMap", &want_hznmap, &hznmap_w, + "Draw horizon map from Az/Alt profile in .hzn file"}, + {"Clipping", 0, "ClipObjects", &want_clipping, NULL, + "Don't draw objects which are below horizon, if a horizon is drawn"}, + {"Live report", 0, "LiveReport", &want_report, &wantreport_w, + "Live report in corners" }, + }; + static ViewOpt cnsopts[] = { + {"Figures", 0, "CnsFigures", &want_conf, &conf_w, + "Draw constellation figures from above file"}, + {"Boundaries", 0, "CnsBoundaries", &want_conb, &conb_w, + "Draw constellation boundaries"}, + {"Full names", 0, "CnsNames", &want_conn, &conn_w, + "Label constellations with full name centered in figure"}, + {"Abbreviations", 0, "CnsAbbr", &want_cona, &cona_w, + "Label constellations with abbreviation centered in figure"}, + }; + Widget w, f_w, rc_w; + Widget hcrc_w, cfom_w; + Arg args[20]; + XmString str; + char *s[1]; + int i; + int n; + + /* create form */ + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + svops_w = XmCreateFormDialog (svshell_w, "SkyOps", args, n); + set_something (svops_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(svops_w), "XEphem*SkyOps.x", skyocategory, 0); + sr_reg (XtParent(svops_w), "XEphem*SkyOps.y", skyocategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "Sky options"); n++; + XtSetValues (XtParent(svops_w), args, n); + + /* put everything in a RC */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + rc_w = XmCreateRowColumn (svops_w, "RC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "SOL", args, n); + set_xmstring (w, XmNlabelString, "Display mode:"); + XtManageChild (w); + + /* simulate a radio boxes for alt-az/ra-dec and spherical/cylindrical */ + + n = 0; + f_w = XmCreateForm (rc_w, "AARDF", args, n); + XtManageChild (f_w); + + str = XmStringCreate ("Alt-Az", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + aa_w = XmCreateToggleButton (f_w, "AltAzMode", args, n); + XtAddCallback (aa_w, XmNvalueChangedCallback, sv_aa_cb, 0); + wtip (aa_w, "Orient display with Az Left-Right, Alt Up-Down"); + XtManageChild (aa_w); + XmStringFree (str); + sr_reg (aa_w, NULL, skyocategory, 0); + + str = XmStringCreate ("RA-Dec", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, aa_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + rad_w = XmCreateToggleButton(f_w, "RADecMode", args, n); + XtAddCallback (rad_w, XmNvalueChangedCallback, sv_aa_cb, 0); + wtip (rad_w, "Orient display with RA Left-Right, Dec Up-Down"); + XtManageChild (rad_w); + XmStringFree (str); + + aa_mode = XmToggleButtonGetState (aa_w); + XmToggleButtonSetState (rad_w, !aa_mode, False); + + str = XmStringCreate ("Sphere", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + sph_w = XmCreateToggleButton (f_w, "SphProj", args, n); + XtAddCallback (sph_w, XmNvalueChangedCallback, sv_cyl_cb, 0); + wtip (sph_w, "Draw using Spherical projection"); + XtManageChild (sph_w); + XmStringFree (str); + + str = XmStringCreate ("Cylinder", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sph_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + cyl_w = XmCreateToggleButton(f_w, "CylProj", args, n); + XtAddCallback (cyl_w, XmNvalueChangedCallback, sv_cyl_cb, 0); + wtip (cyl_w, "Draw using Cylindrical projection"); + XtManageChild (cyl_w); + XmStringFree (str); + sr_reg (cyl_w, NULL, skyocategory, 0); + + cyl_proj = XmToggleButtonGetState (cyl_w); + XmToggleButtonSetState (sph_w, !cyl_proj, False); + + /* make all the "grid" controls in their own form */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreateLabel (rc_w, "SOL", args, n); + set_xmstring (w, XmNlabelString, "Grid Control:"); + XtManageChild (w); + + n = 0; + f_w = XmCreateForm (rc_w, "Grid", args, n); + XtManageChild (f_w); + + sv_create_grid_option (f_w); + + /* make the collection of options */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreateLabel (rc_w, "SOL", args, n); + set_xmstring (w, XmNlabelString, "View Options:"); + XtManageChild (w); + + for (i = 0; i < XtNumber(vopts); i++) { + ViewOpt *vp = &vopts[i]; + + str = XmStringCreate (vp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton (rc_w, vp->name, args, n); + XtAddCallback (w, XmNvalueChangedCallback, sv_option_cb, + (XtPointer)(vp->flagp)); + + XtManageChild (w); + XmStringFree(str); + + if (vp->flagp) + *vp->flagp = XmToggleButtonGetState (w); + if (vp->wp) + *vp->wp = w; + if (vp->tip) + wtip (w, vp->tip); + sr_reg (w, NULL, skyocategory, 0); + } + + /* if automag off initially consider as having been turned off */ + if (!want_automag) + user_automagoff = 1; + + /* add the Constellations options */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreateLabel (rc_w, "SOL", args, n); + set_xmstring (w, XmNlabelString, "Constellation:"); + XtManageChild (w); + + s[0] = cns_suffix; + cfom_w = createFSM (rc_w, s, 1, "auxil", sv_loadcnsfigs_cb); + set_xmstring (cfom_w, XmNlabelString, ""); + wtip (cfom_w, "Select a constellation figure definition file"); + load_deffig (cfom_w); + + for (i = 0; i < XtNumber(cnsopts); i++) { + ViewOpt *vp = &cnsopts[i]; + + str = XmStringCreate (vp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton (rc_w, vp->name, args, n); + XtAddCallback (w, XmNvalueChangedCallback, sv_option_cb, + (XtPointer)(vp->flagp)); + XtManageChild (w); + *(vp->flagp) = XmToggleButtonGetState (w); + XmStringFree(str); + + if (vp->wp) + *vp->wp = w; + if (vp->tip) + wtip (w, vp->tip); + sr_reg (w, NULL, skyocategory, 0); + } + + /* add the Labeling controls */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreateLabel (rc_w, "SOL", args, n); + set_xmstring (w, XmNlabelString, "Labeling:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNseparatorType, XmNO_LINE); n++; + XtSetArg (args[n], XmNheight, 2); n++; + w = XmCreateSeparator (rc_w, "LS", args, n); + XtManageChild (w); + + sv_create_op_lbl (rc_w); + + /* the help and close buttons in its own rc so it can be centered */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNisAligned, False); n++; + hcrc_w = XmCreateRowColumn (rc_w, "HCRC", args, n); + XtManageChild (hcrc_w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreatePushButton (hcrc_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, sv_helpon_cb, "SkyView_ops"); + wtip (w, "Additional details"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + w = XmCreatePushButton (hcrc_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, sv_closeopdialog_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* load the default cns_ffres constellation figures file and set the + * given option menu to display it + * abort if trouble, we really need this now. + */ +static void +load_deffig (Widget om) +{ + WidgetList children; + Cardinal numChildren; + char msg[1024]; + Widget pane; + char *fn; + FILE *fp; + + /* open */ + fn = getXRes (cns_ffres, NULL); + fp = fopendq (fn, "auxil", "r"); + if (!fp) { + printf ("can not find %s\n", fn); + abort(); + } + + /* load */ + if (cns_loadfigs (fp, msg) < 0) { + printf ("%s: %s\n", fn, msg); + abort(); + } + fclose (fp); + + /* register file name resource */ + sr_reg (NULL, cns_ffres, skyocategory, 0); + + /* set name in om's pulldown */ + get_something (om, XmNsubMenuId, (XtArgVal)&pane); + get_something (pane, XmNchildren, (XtArgVal)&children); + get_something (pane, XmNnumChildren, (XtArgVal)&numChildren); + if (numChildren == 1) + set_xmstring (children[0], XmNlabelString, fn); +} + +/* helper func to make all the "grid" controls in the given form */ +static void +sv_create_grid_option (f_w) +Widget f_w; +{ + Arg args[20]; + int n; + + /* main grid on/off toggle */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + grid_w = XmCreateToggleButton (f_w, "Grid", args, n); + XtAddCallback (grid_w, XmNvalueChangedCallback, sv_grid_cb, + (XtPointer)&want_grid); + wtip (grid_w, "Overlay map with a coordinate grid"); + XtManageChild (grid_w); + sr_reg (grid_w, NULL, skyocategory, 0); + + want_grid = XmToggleButtonGetState (grid_w); + + /* grid auto spacing on/off toggle */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + autogrid_w = XmCreateToggleButton (f_w, "Auto", args, n); + XtAddCallback (autogrid_w, XmNvalueChangedCallback, sv_grid_cb, + (XtPointer)&want_autogrid); + wtip (autogrid_w, "Whether to automatically set grid spacing"); + XtManageChild (autogrid_w); + sr_reg (autogrid_w, NULL, skyocategory, 0); + + want_autogrid = XmToggleButtonGetState (autogrid_w); + + /* V grid label and text field */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, grid_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, GRIDLEN); n++; + XtSetArg (args[n], XmNmaxLength, GRIDLEN); n++; + vgrid_w = XmCreateTextField (f_w, "VGrid", args, n); + XtAddCallback (vgrid_w, XmNactivateCallback, sv_gridtf_cb, 0); + wtip (vgrid_w, "Vertical grid step size"); + sr_reg (vgrid_w, NULL, skyocategory, 0); + XtManageChild (vgrid_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, grid_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + vgridl_w = XmCreateLabel (f_w, "SVGridVL", args, n); + XtManageChild (vgridl_w); + + /* H grid label and text field */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, vgrid_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, GRIDLEN); n++; + XtSetArg (args[n], XmNmaxLength, GRIDLEN); n++; + hgrid_w = XmCreateTextField (f_w, "HGrid", args, n); + XtAddCallback (hgrid_w, XmNactivateCallback, sv_gridtf_cb, 0); + wtip (hgrid_w, "Horizontal grid step size"); + sr_reg (hgrid_w, NULL, skyocategory, 0); + XtManageChild (hgrid_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, vgrid_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + hgridl_w = XmCreateLabel (f_w, "SVGridHL", args, n); + XtManageChild (hgridl_w); + + /* fake a left radio box for grid system */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, hgrid_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + aagrid_w = XmCreateToggleButton (f_w, "AltAz", args, n); + XtAddCallback (aagrid_w, XmNvalueChangedCallback, sv_grid_cb, + (XtPointer)&want_aagrid); + wtip (aagrid_w, "Draw Alt-Az grid"); + set_xmstring (aagrid_w, XmNlabelString, "Alt-Az"); + XtManageChild (aagrid_w); + sr_reg (aagrid_w, NULL, skyocategory, 0); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, aagrid_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + naagrid_w = XmCreateToggleButton (f_w, "RADec", args, n); + wtip (naagrid_w, "Draw RA-Dec grid"); + XtAddCallback (naagrid_w, XmNvalueChangedCallback, sv_gt_cb, + (XtPointer)aagrid_w); + set_xmstring (naagrid_w, XmNlabelString, "RA-Dec"); + XtManageChild (naagrid_w); + + want_aagrid = XmToggleButtonGetState (aagrid_w); + XmToggleButtonSetState (naagrid_w, !want_aagrid, False); + gridStepLabel(); + + /* TB whether want labels */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, hgrid_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + XtSetArg (args[n], XmNmarginHeight, 2); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + gridlbl_w = XmCreateToggleButton (f_w, "Labels", args, n); + XtAddCallback (gridlbl_w, XmNvalueChangedCallback, sv_grid_cb, + (XtPointer)&want_gridlbl); + want_gridlbl = XmToggleButtonGetState (gridlbl_w); + wtip (gridlbl_w, "Add labels to grid lines"); + XtManageChild (gridlbl_w); + sr_reg (gridlbl_w, NULL, skyocategory, 0); +} + +/* helper function to create the labeling controls in the Options dialog */ +static void +sv_create_op_lbl (rc_w) +Widget rc_w; +{ + static ViewOpt lblnbr[] = { + /* these are TB/TB/Scale triples */ + {"N", 0, "LblStName", &lbl_lst, &lbl_nst_w, + "Whether Name is in label for stars"}, + {"M", 0, "LblStMag", &lbl_lst, &lbl_mst_w, + "Whether Magnitude is in label for stars"}, + {"Stars", 0,"LblNStars", 0, &lbl_bst_w, + "Number of the brightest catalog stars to label"}, + + {"N", 0, "LblFSName", &lbl_lfs, &lbl_nfs_w, + "Whether Name is in label for field stars"}, + {"M", 0, "LblFSMag", &lbl_lfs, &lbl_mfs_w, + "Whether Magnitude is in label for stars"}, + {"Field stars", 0, "LblNFStars", 0, &lbl_bfs_w, + "Number of the brightest field stars to label"}, + + {"N", 0, "LblSSName", &lbl_lss, &lbl_nss_w, + "Whether Name is in label for Solar System objects"}, + {"M", 0, "LblSSMag", &lbl_lss, &lbl_mss_w, + "Whether Magnitude is in label for Solar System objects"}, + {"Sol Sys", 0,"LblNSolSys", 0, &lbl_bss_w, + "Number of the brightest solar system objects to label"}, + + {"N", 0, "LblDSName", &lbl_lds, &lbl_nds_w, + "Whether Name is in label for Deep Sky objects"}, + {"M", 0, "LblDSMag", &lbl_lds, &lbl_mds_w, + "Whether Magnitude is in label for Deep Sky objects"}, + {"Deep Sky", 0, "LblNDeepSky", 0, &lbl_bds_w, + "Number of the brightest deep sky objects to lablel"}, + }; + Widget n_w, m_w, s_w; + XmFontList sfl; + Widget nl_w, ml_w; + Widget f_w; + Arg args[20]; + int i; + int n; + + /* put everything in a form */ + + n = 0; + f_w = XmCreateForm (rc_w, "VOLF", args, n); + XtManageChild (f_w); + + /* the three stacked controls */ + + for (i = 0; i < XtNumber(lblnbr); /* incremented in body */ ) { + ViewOpt *vp; + + vp = &lblnbr[i++]; + n = 0; + if (vp == lblnbr) { + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + } else { + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, *vp[-1].wp); n++; + } + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorSize, LOSTBSZ); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + n_w = XmCreateToggleButton (f_w, vp->name, args, n); + XtAddCallback (n_w, XmNvalueChangedCallback, sv_lbln_cb, + (XtPointer)vp->flagp); + set_xmstring (n_w, XmNlabelString, ""); + XtManageChild (n_w); + *vp->wp = n_w; + wtip (n_w, vp->tip); + if (XmToggleButtonGetState (n_w)) + *(vp->flagp) |= OBJF_NLABEL; + sr_reg (n_w, NULL, skyocategory, 0); + + vp = &lblnbr[i++]; + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, n_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, n_w); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorSize, LOSTBSZ); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + m_w = XmCreateToggleButton (f_w, vp->name, args, n); + XtAddCallback (m_w, XmNvalueChangedCallback, sv_lblm_cb, + (XtPointer)vp->flagp); + set_xmstring (m_w, XmNlabelString, ""); + XtManageChild (m_w); + *vp->wp = m_w; + wtip (m_w, vp->tip); + if (XmToggleButtonGetState (m_w)) + *(vp->flagp) |= OBJF_MLABEL; + sr_reg (m_w, NULL, skyocategory, 0); + + vp = &lblnbr[i++]; + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, n_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, m_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNmaximum, MAXBRLBLS); n++; + XtSetArg (args[n], XmNshowValue, False); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNscaleHeight, LOSTBSZ); n++; + s_w = XmCreateScale (f_w, vp->name, args, n); + XtAddCallback (s_w, XmNvalueChangedCallback, sv_brs_cb, 0); + set_xmstring (s_w, XmNtitleString, vp->label); + XtManageChild (s_w); + *vp->wp = s_w; + wtip (s_w, vp->tip); + sr_reg (s_w, NULL, skyocategory, 0); + } + + /* last scale is hooked to bottom */ + + set_something (s_w, XmNbottomAttachment, XmATTACH_FORM); + + /* add two more labels in lower left.. match Scale font */ + + get_something (s_w, XmNfontList, (XtArgVal)&sfl); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, n_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, m_w); n++; + XtSetArg (args[n], XmNfontList, sfl); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + ml_w = XmCreateLabel (f_w, "M", args, n); + XtManageChild (ml_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, n_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, n_w); n++; + XtSetArg (args[n], XmNfontList, sfl); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + nl_w = XmCreateLabel (f_w, "N", args, n); + XtManageChild (nl_w); +} + +/* callback from selecting the Close PB in the Options control. */ +/* ARGSUSED */ +static void +sv_closeopdialog_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (svops_w); +} + +/* callback from selecting the Options control. */ +/* ARGSUSED */ +static void +sv_opdialog_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!XtIsManaged(svops_w)) + XtManageChild (svops_w); +} + +/* make the "Favorites" cascade button and menu. + * empty for now, filled when cascades + */ +static void +sv_create_favmenu (parent) +Widget parent; +{ + Arg args[20]; + Widget pd_w, cb_w; + int n; + + n = 0; + pd_w = XmCreatePulldownMenu (parent, "FavPD", args, n); + XtAddCallback (pd_w, XmNmapCallback, sv_faving_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmnemonic, 'F'); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + cb_w = XmCreateCascadeButton (parent, "FavCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Favorites"); + wtip (cb_w, "Center on a Favorite"); + XtManageChild (cb_w); +} + +/* callback from the main Close button */ +/* ARGSUSED */ +static void +sv_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do all the work */ + XtPopdown (svshell_w); +} + +/* callback from closing the main skyview shell. + * N.B. do not try to reclaim memory so that we can run FITS Watch while down. + */ +/* ARGSUSED */ +static void +sv_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (svops_w); + sl_unmanage (); + svf_unmanage(); + sf_unmanage (); + si_unmanage (); + sc_unmanage (); + hzn_unmanage (); + siwcs_unmanage (); + se_unmanage (); + svh_unmanage(); + sfifo_closein(); + + if (fs_to != 0) { + XtRemoveTimeOut (fs_to); + fs_to = 0; + } + + setXRes (sv_viewupres(), "0"); +} + +/* callback from the overall Help button. + */ +/* ARGSUSED */ +static void +sv_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This displays all database objects currently in memory onto the sky. The view", +"may be Alt/Az or RA/Dec. The three sliders adjust the field of fov, the", +"azimuth (or RA), and the altitude (or Dec). Objects may be filtered out by", +"type and magnitude." +}; + + hlp_dialog ("SkyView", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +sv_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback when either the Cylindrical or Spherical projection TB changes. + * distinguish by comparing w to sph_w or cyl_w. + */ +/* ARGSUSED */ +static void +sv_cyl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonCallbackStruct *sp = (XmToggleButtonCallbackStruct *)call; + int cyl = (w == cyl_w); + Now *np = mm_get_now(); + + /* set new state */ + cyl_proj = (cyl == sp->set); + svtb_updateCyl (cyl_proj); + + /* implement radio box */ + if (cyl) + XmToggleButtonSetState (sph_w, !cyl_proj, False); + else + XmToggleButtonSetState (cyl_w, cyl_proj, False); + + /* deactivate any FITS image */ + si_off(); + + /* discard zoom history */ + zm_noundo(); + + /* redraw */ + sv_all(np); +} + +/* callback when either the alt/az or ra/dec button changes state. + * distinguish by comparing w to aa_w or rad_w. + */ +/* ARGSUSED */ +static void +sv_aa_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +#define POLEERR degrad(90 - 1.0/3600.0) /* polar ambiguous area */ + XmToggleButtonCallbackStruct *sp = (XmToggleButtonCallbackStruct *)call; + static double last_az_polar_angle = 0.0; + static double last_ra_polar_angle = 0.0; + int aaw = (w == aa_w); + int wantaa = (aaw == sp->set); + Now *np = mm_get_now(); + double alt, az, ra, dec; + + /* save the ambiguous polar angle if at the pole for later restore */ + if (fabs(sv_altdec) > POLEERR) { + if (aa_mode) + last_az_polar_angle = sv_azra; + else + last_ra_polar_angle = sv_azra; + } + + /* prepare for current coords in opposite coord system */ + sv_fullwhere (np, sv_altdec, sv_azra, aa_mode, &alt, &az, &ra, &dec); + + /* engage */ + if (wantaa) { + /* change from ra/dec to alt/az mode */ + sv_altdec = alt; + sv_azra = az; + aa_mode = 1; + } else { + /* change from alt/az to ra/dec mode */ + sv_azra = ra; + sv_altdec = dec; + aa_mode = 0; + } + + /* restore the ambiguous polar angle if came back */ + if (fabs(sv_altdec) > POLEERR) { + if (aa_mode) + sv_azra = last_az_polar_angle; + else + sv_azra = last_ra_polar_angle; + } + + /* simulate radiobox pair. + * N.B. only change the _other_ TB + */ + if (aaw) + XmToggleButtonSetState (rad_w, !aa_mode, False); + else + XmToggleButtonSetState (aa_w, aa_mode, False); + + si_off(); + zm_noundo(); + sv_set_scale(ALTDEC_S, 0); + sv_set_scale(AZRA_S, 0); + + /* redraw */ + if (track_op) { + if (sv_mark (track_op, 1, 1, 1, 1, 0, 0.0) < 0) + sv_all(np); /* still need it even if mark failed */ + } else + sv_all(np); +} + +/* callback from the filter button. + * just bring up the filter dialog. + */ +/* ARGSUSED */ +static void +sv_filter_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + svf_manage(); +} + +/* callback from the FITS dialog button. + * just bring up the FITS dialog. + */ +/* ARGSUSED */ +static void +sv_fits_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sf_manage(); +} + +/* callback from the image dialog button. + * just bring up the image dialog. + */ +/* ARGSUSED */ +static void +sv_image_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + si_manage(); +} + +/* bring up the image reg dialog. + */ +/* ARGSUSED */ +static void +sv_registration_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ir_manage(); +} + +/* callback from the wcs dialog button. + * just bring up the wcs dialog. + */ +/* ARGSUSED */ +static void +sv_wcs_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + siwcs_manage(); +} + +/* callback to add the current scene to a movie loop. + */ +/* ARGSUSED */ +static void +sv_addframe_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (sv_pm, dt_w); +} + +/* callback from the List control. + * just bring up the list dialog. + */ +/* ARGSUSED */ +static void +sv_list_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sl_manage(); +} + +/* callback from the two fake radio buttons in the grid control. + * client is the paired widget to toggle. + */ +/* ARGSUSED */ +static void +sv_gt_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget pw = (Widget)client; + + XmToggleButtonSetState (pw, !XmToggleButtonGetState(w), True); +} + +/* callback from any of the grid control buttons. + * client is pointer to want_* flag effected. + * redrawing all keeps the overlays in good order. + */ +/* ARGSUSED */ +static void +sv_grid_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int state = XmToggleButtonGetState(w); + int *wantp = (int *)client; + + /* update state flag and inform toolbar */ + *wantp = state; + svtb_updateGrid(want_grid); + + /* implement the fake radio box */ + if (w == aagrid_w) + XmToggleButtonSetState (naagrid_w, !state, False); + + /* no need to actually redraw if already off or just turning off auto */ + if (wantp != &want_grid && !want_grid) + return; + if (wantp == &want_autogrid && !want_autogrid) + return; + + sv_all(mm_get_now()); +} + +/* callback from any of the N Brightest scale. + */ +/* ARGSUSED */ +static void +sv_brs_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sv_all(mm_get_now()); +} + +/* callback from RETURN in either grid size TF */ +/* ARGSUSED */ +static void +sv_gridtf_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* turns off Auto as a side effect */ + XmToggleButtonSetState (autogrid_w, want_autogrid = False, True); + + if (want_grid) + sv_all(mm_get_now()); +} + +/* callback from the manual coordinates PB + */ +/* ARGSUSED */ +static void +sv_mancoord_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + cc_manage(); +} + +/* callback from the Print control. + */ +/* ARGSUSED */ +static void +sv_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Sky View", sv_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +sv_print () +{ + Now *np = mm_get_now(); + + if (!sv_ison()) { + xe_msg (1, "Sky View must be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* fit view in square across the top and prepare to capture X calls*/ + if (sv_w > sv_h) + XPSXBegin (sv_pm, 0, 0, sv_w, sv_h, 1*72, 10*72, (int)(6.5*72)); + else { + int pw = (int)(72*6.5*sv_w/sv_h+.5); /* width on paper as 6.5 hi */ + XPSXBegin (sv_pm, 0, 0, sv_w, sv_h, (int)((8.5*72-pw)/2), 10*72,pw); + } + + /* redraw */ + sv_all (np); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + sv_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +sv_ps_annotate (np) +Now *np; +{ + double alt, az, ra, dec; + double fov; + char dir[256]; + char buf[256]; + char *bp; + char *site; + double tmp; + int aamode; + int ctr = 306; /* = 8.5*72/2 */ + int y; + + /* separator */ + y = (int)AROWY(14.5); + sprintf (buf, "newpath 108 %d moveto 504 %d lineto stroke\n", y, y); + XPSDirect (buf); + + /* if displaying an image, start with filename and object name */ + if (si_ison()) { + char fn[1024]; + + sf_getName (fn, buf); + if (fn[0] || buf[0]) { + y = AROWY(15); + (void) sprintf (dir, "(%s %s) %d %d cstr", fn, buf, ctr, y); + XPSDirect (dir); + } + } + + sv_getcenter (&aamode, &fov, &alt, &az, &ra, &dec); + + /* caption */ + XPSDirect ("\n% Circumstances\n"); + y = AROWY(13); + if (aa_mode) { + (void) strcpy (dir, "(XEphem Alt/Az Sky View"); + } else { + (void) sprintf (dir, "(XEphem %s %s RA/Dec Sky View", + pref_get (PREF_EQUATORIAL) == PREF_TOPO ? "Topocentric" + : "Geocentric", + epoch == EOD ? "Apparent" : "Mean"); + } + if (anytrails) { + char *wtz= pref_get(PREF_ZONE)==PREF_LOCALTZ ? "Local time" : "UTC"; + (void) sprintf (dir+strlen(dir), " -- Trail Times are in %s", wtz); + } + (void) sprintf (dir+strlen(dir), ") %d %d cstr", ctr, y); + XPSDirect (dir); + + site = mm_getsite(); + if (site) { + y = AROWY(12); + (void) sprintf (dir, "(%s) %d %d cstr\n", + XPSCleanStr(site,strlen(site)), ctr, y); + XPSDirect (dir); + } + + /* left column */ + + y = AROWY(11); + fs_sexa (buf, radhr(ra), 2, 36000); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(Center RA:) 124 %d rstr (%s) 134 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(10); + fs_sexa (buf, raddeg(dec), 3, 3600); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(Declination:) 124 %d rstr (%s) 134 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(9); + if (epoch == EOD) + (void) strcpy (buf, "EOD"); + else { + mjd_year (epoch, &tmp); + (void) sprintf (buf, "%.2f", tmp); + } + (void) sprintf (dir, "(Epoch:) 124 %d rstr (%s) 134 %d lstr\n",y,buf,y); + XPSDirect (dir); + + y = AROWY(8); + fs_sexa (buf, raddeg(alt), 3, 3600); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(Altitude:) 124 %d rstr (%s) 134 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(7); + fs_sexa (buf, raddeg(az), 4, 3600); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(Azimuth:) 124 %d rstr (%s) 134 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(6); + fs_sexa (buf, raddeg(fov), 3, 60); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir,"(Field Width:) 124 %d rstr (%s) 134 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + /* right column */ + + y = AROWY(11); + (void) sprintf (dir,"(Julian Date:) 460 %d rstr (%13.5f) 470 %d lstr\n", + y, mjd+MJD0, y); + XPSDirect (dir); + + y = AROWY(10); + now_lst (np, &tmp); + fs_time (buf, tmp); + for (bp = buf; *bp == ' '; bp++) continue; + (void)sprintf(dir,"(Sidereal Time:) 460 %d rstr (%s) 470 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(9); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(UTC Date:) 460 %d rstr (%s) 470 %d lstr\n", + y, bp,y); + XPSDirect (dir); + + y = AROWY(8); + fs_time (buf, mjd_hr(mjd)); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(UTC Time:) 460 %d rstr (%s) 470 %d lstr\n", + y, bp,y); + XPSDirect (dir); + + y = AROWY(7); + fs_sexa (buf, raddeg(fabs(lat)), 3, 3600); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(Latitude:) 460 %d rstr (%s %c) 470 %d lstr\n", + y, bp, lat < 0 ? 'S' : 'N', y); + XPSDirect (dir); + + y = AROWY(6); + fs_sexa (buf, raddeg(fabs(lng)), 4, 3600); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir,"(Longitude:) 460 %d rstr (%s %c) 470 %d lstr\n", + y, bp, lng < 0 ? 'W' : 'E', y); + XPSDirect (dir); + + /* center column */ + + /* show basic directions unless compass on or pole is visible */ + if (!want_compass && sv_altdec - sv_vfov/2 > -PI/2 + && sv_altdec + sv_vfov/2 < PI/2) { + y = AROWY(10); + if (aa_mode) + (void) sprintf (dir, "(Zenith is %s - CW is %s) %d %d cstr\n", + flip_tb ? "down" : "up", + flip_lr ? "left" : "right", + ctr, y); + else + (void) sprintf (dir, "(North is %s - West is %s) %d %d cstr\n", + flip_tb ? "down" : "up", + flip_lr ? "left" : "right", + ctr, y); + XPSDirect (dir); + } + + if (want_grid) { + char *hval, *vval; + char *nam1, *val1; + char *nam2, *val2; + + hval = XmTextFieldGetString (hgrid_w); + vval = XmTextFieldGetString (vgrid_w); + + if (want_aagrid) { + nam1 = "Alt"; + nam2 = "Az"; + val1 = vval; + val2 = hval; + } else { + nam1 = "RA"; + nam2 = "Dec"; + val1 = hval; + val2 = vval; + } + + y = AROWY(9); + (void) sprintf (dir, "(Grid Steps:) %d %d cstr\n", ctr, y); + XPSDirect (dir); + + y = AROWY(8); + (void) sprintf (dir,"(%s: %s) %d %d cstr\n", nam1, val1, ctr, y); + XPSDirect (dir); + + y = AROWY(7); + (void) sprintf (dir,"(%s: %s) %d %d cstr\n", nam2, val2, ctr, y); + XPSDirect (dir); + + XtFree (hval); + XtFree (vval); + } + + if (want_eyep && largeyepr) { + char wbuf[32], *wbp, hbuf[32], *hbp; + char *sz; + + fs_sexa (wbuf, raddeg(largeyepr->eyepw), 3, 60); + for (wbp = wbuf; *wbp == ' '; wbp++) continue; + fs_sexa (hbuf, raddeg(largeyepr->eyeph), 3, 60); + for (hbp = hbuf; *hbp == ' '; hbp++) continue; + + y = AROWY(6); + sz = neyepr > 1 ? "Largest " : ""; + if (largeyepr->eyepw == largeyepr->eyeph) + (void) sprintf (dir, "(%sEyepiece: %s) %d %d cstr\n", sz, + wbp, ctr, y); + else + (void) sprintf (dir, "(%sEyepiece: %s x %s) %d %d cstr\n", + sz, wbp, hbp, ctr, y); + XPSDirect (dir); + } +} + +/* callback when the Control->tracking tb is toggled. + * N.B. also triggered to implement turning tracking off from the popup too. + */ +/* ARGSUSED */ +static void +sv_track_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (!XmToggleButtonGetState (w)) { + track_op = (Obj *)0; + XtSetSensitive (w, False); + sv_all (mm_get_now()); /* erase the mark */ + } +} + +/* set one of the scales and its labels from the current real values. + * also possibly reset any unzoom records. + */ +static void +sv_set_scale(which, cutzoom) +int which; +int cutzoom; +{ + Arg args[20]; + char buf[64]; + int a, n; + + switch (which) { + case ALTDEC_S: + a = (int)floor(raddeg(sv_altdec)*(60./FOV_STEP) + 0.5); + XmScaleSetValue (altdec_w, a); + + (void) strcpy (buf, aa_mode ? "Alt: " : "Dec: "); + fs_dm_angle (buf+5, sv_altdec); + set_xmstring (altdecl_w, XmNlabelString, buf); + break; + + case AZRA_S: + a = (int)floor(raddeg(sv_azra)*(60./FOV_STEP) + 0.5); + if (a >= 4320) /* beware of round-up */ + a -= 4320; + + n = 0; + XtSetArg (args[n], XmNvalue, a); n++; + XtSetArg (args[n], XmNprocessingDirection, + aa_mode ? XmMAX_ON_RIGHT : XmMAX_ON_LEFT); n++; + XtSetValues (azra_w, args, n); + + if (aa_mode) { + (void) strcpy (buf, "Az: "); + fs_sexa (buf+4, raddeg(sv_azra), 3, 60); + } else { + (void) strcpy (buf, "RA: "); + fs_sexa (buf+4, radhr(sv_azra), 2, 3600); + } + set_xmstring (azral_w, XmNlabelString, buf); + break; + + case FOV_S: { + char vbuf[32], hbuf[32]; + + a = (int)floor(raddeg(sv_vfov)*(60./FOV_STEP)+0.5); + if (a < 1) + a = 1; + if (a > 180*(60/FOV_STEP)) + a = 180*(60/FOV_STEP); + XmScaleSetValue (fov_w, a); + + fs_dm_angle (vbuf, sv_vfov); + fs_dm_angle (hbuf, sv_hfov); + if (strcmp (vbuf, hbuf)) + sprintf (buf, "FOV: %sW x %sH", hbuf, vbuf); + else + sprintf (buf, "FOV: %s", hbuf); + set_xmstring (fovl_w, XmNlabelString, buf); + + /* turn on automag when changing FOV unless user turned it off */ + if (!user_automagoff) { + XmToggleButtonSetState (wantamag_w, want_automag = 1, False); + svtb_updateAutoMag (1); + svf_automag(sv_vfov); + } + } + + break; + + default: + printf ("sv_set_scale Bug! bogus which: %d\n", which); + abort(); + } + + /* check for desired resets */ + if (cutzoom) { + zm_cutundo(); + svtb_zoomok(0); + } +} + +/* given a new vertical fov set sv_vfov, sv_hfov and sv_dfov. + * N.B. might be called before first expose when we don't yet know sv_h + */ +static void +sv_set_fov(vfov) +double vfov; +{ + if (vfov > degrad(180.)) + vfov = degrad(180.); + sv_vfov = vfov; + sv_hfov = sv_h ? sv_vfov*sv_w/sv_h : 0; + sv_dfov = sqrt((double)(sv_hfov*sv_hfov + sv_vfov*sv_vfov)); +} + +/* expose event of sky view drawing area. + * if same size just copy from pixmap, else recompute all (it's resized). + * N.B. we set bit_gravity to ForgetGravity so we can just use Expose events. + * N.B. we turn off backing store since we effectively do it in the pixmap. + */ +/* ARGSUSED */ +static void +sv_da_exp_cb (w, client, +call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Display *dsp = XtDisplay(svda_w); + Window win = XtWindow(svda_w); + Window root; + int x, y; + unsigned int bw, d; + unsigned int wid, hei; + + switch (c->reason) { + case XmCR_EXPOSE: { + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + + before = 1; + + if (svh_nhist() == 0) + svh_add_current(); + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected svda_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry (dsp, win, &root, &x, &y, &wid, &hei, &bw, &d); + + if (!sv_pm || (int)wid != sv_w || (int)hei != sv_h) { + if (sv_pm) { + /* user resized, else from within */ + XFreePixmap (dsp, sv_pm); + sv_pm = (Pixmap) NULL; + } + + sv_pm = XCreatePixmap (dsp, win, wid, hei, d); + XSetForeground (dsp, sv_gc, bg_p); + XFillRectangle (dsp, sv_pm, sv_gc, 0, 0, wid, hei); + sv_w = wid; + sv_h = hei; + zm_noundo(); /* coords no longer valid if unzoom */ + + /* update FOV */ + if (si_ison()) { + si_newPixmap (sv_w, sv_h, flip_lr, flip_tb, NULL, 0); + setImFOVScales (si_getFImage()); + } else { + sv_set_fov(sv_vfov); /* update angular dimensions */ + sv_set_scale(FOV_S, 1); + } + + sv_all(mm_get_now()); + } else { + /* same size; just copy from the pixmap */ + sv_copy_sky(); + } +} + +/* resize to [neww, newh]. + * try to keep all on screen too. + */ +static void +sv_resize (neww, newh) +int neww, newh; +{ + Display *dsp = XtDisplay(svda_w); + int dspw = DisplayWidth(dsp, DefaultScreen(dsp)) - 100; /* fudge */ + int dsph = DisplayHeight(dsp, DefaultScreen(dsp)) - 100; /* fudge */ + Position shx, shy; + Arg args[10]; + int n; + + /* removing the shadow pixmap tells exp_cb() this resize is internal */ + if (sv_pm) { + XFreePixmap (dsp, sv_pm); + sv_pm = (Pixmap) NULL; + } + + /* setting new size will cause expose IF size really changes. + * we tell by looking for a new sv_pm. + */ + n = 0; + XtSetArg (args[n], XmNwidth, neww); n++; + XtSetArg (args[n], XmNheight, newh); n++; + XtSetValues (svda_w, args, n); + XmUpdateDisplay (svda_w); + + if (!sv_pm) { + /* no expose so force */ + Window win = XtWindow(svda_w); + XExposeEvent e; + + e.type = Expose; + e.display = dsp; + e.window = win; + e.x = e.y = 0; + e.width = neww; + e.height = newh; + e.count = 0; + + XSendEvent (dsp, win, False, ExposureMask, (XEvent *)&e); + XmUpdateDisplay (svda_w); + } + + /* toolbars impose min sizes, so grow again if still not right */ + if (sv_h > newh && sv_h > sv_w*newh/neww) { + /* height was forced larger by toolbar, so make wider too */ + sv_resize (sv_h*neww/newh, sv_h); + } else if (sv_w > neww && sv_w > sv_h*neww/newh) { + /* width was forced larger by toolbar, so make taller too */ + sv_resize (sv_w, sv_w*newh/neww); + } + + /* see if should move left or up to keep on screen */ + n = 0; + XtSetArg (args[n], XmNx, &shx); n++; + XtSetArg (args[n], XmNy, ­); n++; + XtGetValues (svshell_w, args, n); + n = 0; + if (shx + sv_w > dspw) { + XtSetArg (args[n], XmNx, 0); n++; + } + if (shy + sv_h > dsph) { + XtSetArg (args[n], XmNy, 0); n++; + } + XtSetValues (svshell_w, args, n); +} + +/* draw the magnitude scale, based on the near-sky setting */ +static void +sv_magscale (dsp, win) +Display *dsp; +Window win; +{ + int cw, ch; /* w and h of typical digit */ + int x0, y0; /* ul corner of box */ + int boxw, boxh; /* overall box size */ + int stmag, ssmag, dsmag, magstp; + int faintest; + char buf[16]; + int dir, asc, dsc; + XCharStruct all; + GC gc; + Obj o; + int i; + + /* get size of a typical digit -- none have descenders */ + buf[0] = '3'; /* a typical wide digit :-) */ + XTextExtents (sv_pf, buf, 1, &dir, &asc, &dsc, &all); + cw = all.width; + ch = asc; /* just numbers so no descenders */ + + /* establish box height. + * use 3/2 vertical char spacing per symbol + 1 gap after each plus + * another half at the bottom for balance. + */ + boxh = (ch*3/2+1)*MAGBOXN + ch/2; + + /* set box width based on longest string to be displayed then add + * 1 cw for the dot, 1 for a gap, + 1/2 on each end + */ + svf_getmaglimits (&stmag, &ssmag, &dsmag, &magstp); + faintest = stmag; + boxw = 0; + for (i = 0; i < MAGBOXN; i++) { + int sw; + + (void) sprintf (buf, "%d", faintest - i*magstp); + sw = strlen(buf)*cw; + if (sw > boxw) + boxw = sw; + } + boxw += 3*cw; + + /* position in lower left corner with a small gap for fun */ + x0 = 5; + y0 = sv_h - boxh - 5; + + /* draw a solid sky box with a bg border. + * TODO: fix printing kludge + */ + if (si_ison()) + XPSPaperColor (bg_p); + XSetForeground (dsp, sv_gc, sky_p); + XPSFillRectangle (dsp, win, sv_gc, x0, y0, boxw, boxh); + if (si_ison()) + XPSPaperColor (sky_p); + XSetForeground (dsp, sv_gc, bg_p); + XPSDrawRectangle (dsp, win, sv_gc, x0, y0, boxw-1, boxh-1); + + /* ok, draw the scale */ + memset (&o, 0, sizeof(o)); + o.o_type = FIXED; + o.f_class = 'S'; + o.f_spect[0] = 'G'; + o.s_size = 0; + for (i = 0; i < MAGBOXN; i++) { + int d, y; + + set_smag (&o, faintest - i*magstp); + d = objdiam(&o); + objGC (&o, d, &gc); + y = y0 + (ch*3/2 + 1)*(i+1); + sv_draw_obj (dsp, win, gc, &o, x0 + cw, y - ch/2, d, 1); + (void) sprintf (buf, "%g", get_mag(&o)); + XPSDrawString (dsp, win, gc, x0 + 5*cw/2, y, buf, strlen(buf)); + } + sv_draw_obj (dsp, win, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +/* copy the pixmap to the drawing area and add zoom box if on. + */ +static void +sv_copy_sky() +{ + Display *dsp = XtDisplay (svda_w); + Window win = XtWindow (svda_w); + + if (sv_pm) { + XCopyArea (dsp, sv_pm, win, sv_gc, 0, 0, sv_w, sv_h, 0, 0); + if (svtb_iszoomok()) + zm_draw(); + sv_tmon = 0; + } +} + +/* called when there is mouse activity over the drawing area */ +/* ARGSUSED */ +static void +sv_da_ptr_eh (w, client, ev, continue_to_dispatch) +Widget w; +XtPointer client; +XEvent *ev; +Boolean *continue_to_dispatch; +{ + Now *np = mm_get_now(); + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + double altdec, azra; + Window root, child; + int rx, ry, wx, wy; + unsigned mask; + int evt = ev->type; + int mo, bp, br, en, lv; + int m1, b1p, b1r; + int m2, b2p, b2r; + int b3p, b3r; + int inwin, inside; + + /* what happened? */ + en = evt == EnterNotify; + lv = evt == LeaveNotify; + mo = evt == MotionNotify; + bp = evt == ButtonPress; + br = evt == ButtonRelease; + m1 = mo && ev->xmotion.state & Button1Mask; + m2 = mo && ev->xmotion.state & Button2Mask; + b1p = bp && ev->xbutton.button == Button1; + b1r = br && ev->xbutton.button == Button1; + b2p = bp && ev->xbutton.button == Button2; + b2r = br && ev->xbutton.button == Button2; + b3p = bp && ev->xbutton.button == Button3; + b3r = br && ev->xbutton.button == Button3; + + /* where are we? + * N.B. can't depend on en/lv for inwin if moving fast + */ + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &wx, &wy, &mask); + inwin = wx>=0 && wx=0 && wy PI/2) + sv_altdec = PI/2; + if (sv_altdec < -PI/2) + sv_altdec = -PI/2; + + dar = sv_vfov*(wx - lastx)/sv_h*(flip_lr?-1:1); + if (fabs(altdec) < PI/2) + dar /= cos(altdec); + sv_azra -= aa_mode ? dar : -dar; + range (&sv_azra, 2*PI); + + lastx = wx; + lasty = wy; + + /* update scales, redraw */ + sv_set_scale (ALTDEC_S, 1); + sv_set_scale (AZRA_S, 1); + sv_all(np); + + /* turn off following remote inputs when dragging */ + XmToggleButtonSetState (keeptelvis_w, False, 1); + } + } + + if (b2r) + XUndefineCursor (dsp, win); + } else { + int sx, sy; + + if (b1p && inwin && ir_setting()) { + double ix, iy; + sv_win2im (wx, wy, &ix, &iy); + ir_setstar (ix, iy); + return; + } + + if (hznDrawing() && inside && (b1p || m1 || b1r)) { + /* drawing new horizon -- temp suppress other mouse actions */ + double alt = altdec, az = azra; + if (!aa_mode) + sv_other (altdec, azra, 0, &alt, &az); + if (b1p) { + XSetFunction (dsp, sv_gc, GXxor); + hznRawProfile(1); + } + draw_hznProfile (dsp, win, sv_gc); + hznAdd (b1p, alt, az); + sv_draw_report_coords (b1p, 0, wx, wy, altdec, azra); + draw_hznProfile (dsp, win, sv_gc); + if (b1r) { + XSetFunction (dsp, sv_gc, GXcopy); + hznRawProfile(0); + sv_all(NULL); + } + return; + } + + /* modify cursor pos to closest object if snap is on */ + if (inwin && svtb_snapIsOn()) + si_findSnap (sv_w, sv_h, wx, wy, flip_lr, flip_tb, &sx,&sy); + else { + sx = wx; + sy = wy; + } + + /* region of interest. + * erase before glass, if any + */ + if (inwin && svtb_ROIIsOn()) { + if (b1p) { + /* erase current, if any */ + if (svtb_iszoomok()) + zm_draw(); + + /* discard subsequent undos, init new location, show hope */ + zm_cutundo(); + wzm.x0 = wzm.x1 = sx; + wzm.y0 = wzm.y1 = sy; + svtb_zoomok(1); + } else if (m1) { + /* erase old */ + zm_draw(); + } + } + + /* show coords if on or dragging */ + if (inside && (svtb_reportIsOn() || (b1p||m1))) + sv_draw_report_coords (b1p, (b1p||m1) && svtb_ROIIsOn(), + wx, wy, altdec, azra); + + /* maybe glass, slice and photom */ + if (inwin && si_ison()) { + + /* area-based glass between erase/draw of line-oriented ops */ + if (svtb_sliceIsOn()) { + if (en && (mask & Button1Mask)) + si_doSlice (dsp, win, 2, sv_w, sv_h, sx, sy, + flip_lr, flip_tb); + else if (m1) + si_doSlice (dsp, win, 0, sv_w, sv_h, sx, sy, + flip_lr, flip_tb); + } + if (svtb_glassIsOn() && (b1p || m1)) { + si_doGlass (dsp, win, b1p, m1, sv_w, sv_h, wx, wy, sx, sy, + flip_lr, flip_tb); + XDefineCursor (XtD, XtWindow(svda_w), magglass_cursor); + } + if (svtb_sliceIsOn() && (b1p || m1)) + si_doSlice (dsp, win, b1p?-1:1, sv_w, sv_h, sx, sy, + flip_lr, flip_tb); + + if (svtb_gaussIsOn() && (b1p || m1)) + si_doGauss (dsp, sv_w, sv_h, sx, sy, flip_lr,flip_tb); + } + + /* clean stuff off when finished or leave */ + if (b1r || lv) { + if (svtb_glassIsOn() || svtb_sliceIsOn()) { + sv_copy_sky(); + XUndefineCursor(XtD, XtWindow(svda_w)); + } else if (lv || !svtb_reportIsOn()) + sv_erase_report_coords (); + } else if (!inwin) + sv_erase_report_coords (); + + /* draw ROI after glass, if any */ + if (svtb_ROIIsOn()) { + if (inwin && m1) { + /* draw new */ + wzm.x1 = sx; + wzm.y1 = sy; + zm_draw(); + if (si_ison()) + si_doROI (dsp, sv_w, sv_h, flip_lr, flip_tb, &wzm); + } + + if (b1r) { + /* no area no box */ + svtb_zoomok (wzm.x0 != wzm.x1 && wzm.y0 != wzm.y1); + } + } + } +} + +/* erase the tracking coords by copying back from sv_pm */ +static void +sv_erase_report_coords () +{ + Display *dsp = XtDisplay(svda_w); + Window win = XtWindow(svda_w); + int x, y; + + /* beware being called after sv_pm is freed during closing */ + if (!sv_pm) + return; + + x = TBORD; + y = TBORD; + XCopyArea (dsp,sv_pm,win,sv_gc,x,y,trk_w,trk_h,x,y); + + x = sv_w-TBORD-trk_w; + y = TBORD; + XCopyArea (dsp,sv_pm,win,sv_gc,x,y,trk_w,trk_h,x,y); +} + +/* a dot has been picked: + * find what it is and report stuff about it in a popup. + */ +/* ARGSUSED */ +static void +sv_pick (XEvent *ev, int wx, int wy) +{ +#define PICKRANGE 10 /* dist allowed from pointer */ + double csep, maxcsep; /* cos(separation) and max so far */ + double altdec, azra; /* cursor location */ + double saltdec, caltdec;/* sin/cos altdec */ + double ad, ar; /* candidate location */ + TSky *mintsp = NULL; /* set to a TSky if find one close */ + Obj *minop = NULL; /* set to an Obj if find one closer */ + DBScan dbs; + TrailObj *top; + int x, y; + Obj *op; + int i; + + /* find world coord of cursor -- don't proceed if outside the svda_w */ + if (!sv_unloc (wx, wy, &altdec, &azra)) + return; + + /* ok, own up to some work in progress */ + watch_cursor(1); + + /* find object with largest cos from current pos */ + caltdec = cos(altdec); + saltdec = sin(altdec); + maxcsep = 0.0; + + /* search the trailed stuff first */ + for (top = trailobj; top; top = top->ntop) { + if (!top->on) + continue; + for (i = 0; i < top->nsky; i++) { + op = &top->sky[i].o; + ad = aa_mode ? op->s_alt : op->s_dec; + ar = aa_mode ? op->s_az : op->s_ra; + csep = saltdec*sin(ad) + caltdec*cos(ad)*cos(azra-ar); + if (csep > maxcsep) { + mintsp = &top->sky[i]; + maxcsep = csep; + } + } + } + + /* search the database too -- might be something closer */ + for (db_scaninit(&dbs, ALLM, want_fs ? fldstars : NULL, nfldstars); + (op = db_scan (&dbs)) != NULL; ) { + if (!(op->o_flags & OBJF_ONSCREEN)) + continue; + ad = aa_mode ? op->s_alt : op->s_dec; + ar = aa_mode ? op->s_az : op->s_ra; + csep = saltdec*sin(ad) + caltdec*cos(ad)*cos(azra-ar); + if (csep > maxcsep) { + minop = op; + maxcsep = csep; + } + } + + /* show info about closest object, if any near, else generic */ + if (minop || mintsp) { + op = minop ? minop : &mintsp->o; + ad = aa_mode ? op->s_alt : op->s_dec; + ar = aa_mode ? op->s_az : op->s_ra; + if (sv_loc (ad, ar, &x, &y) && abs(x-wx) <= PICKRANGE + && abs(y-wy) <= PICKRANGE) + sv_popup (ev, minop, minop ? NULL : mintsp); + else + sv_popup (ev, NULL, NULL); + } else + sv_popup (ev, NULL, NULL); + + watch_cursor(0); +} + +/* callback when any of the scales change value. + * client is a SCALES enum to tell us which. + */ +/* ARGSUSED */ +static void +sv_scale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleCallbackStruct *s = (XmScaleCallbackStruct *)call; + int which = (long int) client; + + /* finish up then avoid runaway auto repeat */ + XmUpdateDisplay (svda_w); + XSync (XtD, True); + + /* disables any image display */ + si_off(); + + /* read the widget to set the new value */ + sv_read_scale (which); + sv_set_scale (which, 1); + + /* only do the map work if this is the final value or want live drag */ + if (want_livedrag || s->reason == XmCR_VALUE_CHANGED) { + /* update the map */ + sv_all(mm_get_now()); + + /* turn off following remote inputs when told explicitly to point */ + XmToggleButtonSetState (keeptelvis_w, False, 1); + } +} + +/* callback to load a new constellation figure file. + * file basename is in label of this widget + */ +static void +sv_loadcnsfigs_cb (Widget w, XtPointer client, XtPointer call) +{ + char msg[1024]; + char *fn; + FILE *fp; + + get_xmstring (w, XmNlabelString, &fn); + fp = fopend (fn, "auxil", "r"); /* calls xe_msg() if fails */ + if (fp) { + if (cns_loadfigs (fp, msg) < 0) + xe_msg (1, "%s:\n%s", fn, msg); + else { + setXRes (cns_ffres, fn); + if (want_conf) + sv_all(mm_get_now()); + } + fclose (fp); + } + XtFree (fn); +} + +/* callback when any of the Name label TB's change state. + * client points to a state variable that should track the new state. + */ +/* ARGSUSED */ +static void +sv_lbln_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int *lp = (int *)client; + + /* update flag */ + if (XmToggleButtonGetState(w)) + *lp |= OBJF_NLABEL; + else + *lp &= ~OBJF_NLABEL; + + /* update tollbar */ + svtb_updateNames (lbl_lst || lbl_lfs || lbl_lss || lbl_lds); + + /* redraw everything to pick up the new option state */ + sv_all(mm_get_now()); +} + +/* callback when any of the Magnitude label TB's change state. + * client points to a state variable that should track the new state. + */ +/* ARGSUSED */ +static void +sv_lblm_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int *lp = (int *)client; + + if (XmToggleButtonGetState(w)) + *lp |= OBJF_MLABEL; + else + *lp &= ~OBJF_MLABEL; + + /* update tollbar */ + svtb_updateNames (lbl_lst || lbl_lfs || lbl_lss || lbl_lds); + + /* redraw everything to pick up the new option state */ + sv_all(mm_get_now()); +} + +/* callback when any of the options toggle buttons change state that just + * causes a redraw. + * client points to a state variable that should track the new state. + */ +/* ARGSUSED */ +static void +sv_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int *p = (int *)client; + + /* update the flag for sure */ + *p = XmToggleButtonGetState (w); + + /* load fstars immediately, rather than wait for timer */ + if (p == &want_fs && want_fs) + sv_loadfs(0); + + /* update any corresponding toolbar */ + svtb_sync(); + + /* insure horizon editing off if hzn being turn off */ + if (p == &want_hznmap && !want_hznmap) + hznEditingOff(); + + /* capture manual user desire about automag. + * also, no need to redraw if just turning it off. + */ + if (p == &want_automag) { + user_automagoff = !want_automag; + if (want_automag) + svf_automag(sv_vfov); + else + return; + } + + /* no need to do anything if changing live-dragging option */ + if (p == &want_livedrag) + return; + + /* special consideration for turning on eyepieces when there aren't + * any now + */ + if (p == &want_eyep && want_eyep) { + if (se_getlist (NULL) == 0) + return; + } + + /* special consideration for making constellation buttons work like + * a radio pair but ok if both off + */ + if (p == &want_cona && *p && want_conn) { + XmToggleButtonSetState (conn_w, False, True); /* draws */ + return; + } + if (p == &want_conn && *p && want_cona) { + XmToggleButtonSetState (cona_w, False, True); /* draws */ + return; + } + + /* if flipping, update undoes and tell FITS to make a new pixmap */ + if (p == &flip_lr || p == &flip_tb) { + zm_flip (p == &flip_lr); + if (si_ison()) + si_newPixmap (sv_w, sv_h, flip_lr, flip_tb, zm_undo, zm_cundo); + } + + /* redraw everything to pick up the new option state */ + sv_all(mm_get_now()); +} + +/* called to bring up the eyepiece control dialog */ +/* ARGSUSED */ +static void +sv_eyep_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + se_manage(); +} + +/* called to bring up the binary star orbit map */ +/* ARGSUSED */ +static void +sv_bsmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + svbs_manage(pu.op); +} + +/* callback just before the "Favorite" menu comes up. + * fill with the current loaded Favorites + * w is the pulldown menu. + */ +/* ARGSUSED */ +static void +sv_faving_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj **favs; + int nfavs = fav_get_loaded (&favs); + Cardinal npb; + WidgetList pbl; + int i; + + /* get current set of push buttons */ + get_something (w, XmNnumChildren, (XtArgVal)&npb); + get_something (w, XmNchildren, (XtArgVal)&pbl); + + /* make sure there are at least nfavs buttons */ + for (i = 0; i < nfavs; i++) { + Widget pbw; + if (i < npb) + pbw = pbl[i]; + else { + pbw = XmCreatePushButton (w, "FPB", NULL, 0); + XtAddCallback (pbw, XmNactivateCallback,sv_fav_cb,(XtPointer)(long int)i); + } + set_xmstring (pbw, XmNlabelString, favs[i]->o_name); + XtManageChild (pbw); + } + + /* unmanage any extra */ + for (; i < npb; i++) + XtUnmanageChild (pbl[i]); +} + +/* callback when one of the favorites cascade buttons changes state. + * client is index into favs list. + */ +/* ARGSUSED */ +static void +sv_fav_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XEvent *ev = ((XmAnyCallbackStruct*)call)->event; + Obj **favs, *op; + int nfavs = fav_get_loaded (&favs); + int i = (long int)client; + int dax, day; + double altdec, azra; + Window cw; + + if (i < 0 || i >= nfavs) { + printf ("SV bogus favorite %d of %d\n", i, nfavs); + abort(); + } + + /* turn off following remote inputs when told explicitly to point */ + XmToggleButtonSetState (keeptelvis_w, False, 1); + + /* put up the same popup as if user right-clicked on the favorite */ + op = favs[i]; + db_update (op); + sv_mark (op, 0, 1, 1, 0, 0, 0.0); + altdec = aa_mode ? op->s_alt : op->s_dec; + azra = aa_mode ? op->s_az : op->s_ra; + sv_loc (altdec, azra, &dax, &day); + XTranslateCoordinates (XtD, + XtWindow(svda_w), + RootWindow (XtD, DefaultScreen(XtD)), + dax, day, + &ev->xbutton.x_root, &ev->xbutton.y_root, + &cw); + sv_popup ((XEvent *)ev, op, NULL); +} + +/* given one of the SCALES enums, read it and compute the corresponding + * real value. + */ +static void +sv_read_scale (which) +int which; +{ + int i; + + switch (which) { + case FOV_S: + XmScaleGetValue (fov_w, &i); + sv_set_fov(degrad(i/(60./FOV_STEP))); + break; + case ALTDEC_S: + XmScaleGetValue (altdec_w, &i); + sv_altdec = degrad(i/(60./FOV_STEP)); + break; + case AZRA_S: + XmScaleGetValue (azra_w, &i); + sv_azra = degrad(i/(60./FOV_STEP)); + break; + default: + printf ("sv_read_scale Bug! bad which: %d\n", which); + abort(); + } +} + +/* load fresh set of field stars if new circumstances and yet stable. + * base mag limit on value of near-sky mag limit. + * we are called every FSTO to monitor for change and steady state. + * set force to disregard tests for stable conditions. + */ +void +sv_loadfs(force) +int force; +{ + static double lcfov, lcazra, lcaltdec; /* last call */ + static double lsmjd, lsfov, lsra, lsdec; /* last shown */ + static int lsmag; + Now *np = mm_get_now(); + double alt, az, ra, dec; + int chging; + int stmag, ssmag, dsmag, magstp; + double epsfov; + + /* check some basic conditions */ + if (!sv_ison()) + return; + + /* wait until things are not changing and meet basic requirements */ + chging = lcazra!=sv_azra || lcaltdec!=sv_altdec || lcfov!=sv_dfov; + lcazra = sv_azra; + lcaltdec = sv_altdec; + lcfov = sv_dfov; + if ((!force && chging) || !want_fs) + return; + + /* get current display values */ + sv_fullwhere (np, sv_altdec, sv_azra, aa_mode, &alt, &az, &ra, &dec); + svf_getmaglimits (&stmag, &ssmag, &dsmag, &magstp); + + /* skip unless forced if nearly the same as last time displayed */ + epsfov = sv_dfov/10.; /* "small" fov change */ + if (!force && fabs(lsdec-dec) < epsfov /* small dec move */ + && delra(lsra-ra)*cos(dec) < epsfov /* small ra move */ + && fabs(lsfov-sv_dfov) < epsfov /* small zoom */ + && lsmag >= stmag /* brighter limit */ + && (!fs_pmon() || fabs(lsmjd-mjd) degrad(MAXFSFOV)) + return; + + /* ok, now we can go */ + + watch_cursor(1); + nfldstars = fs_fetch (np, ra, dec, sv_dfov, (double)stmag, &fldstars); + lsra = ra; + lsdec = dec; + lsfov = sv_dfov; + lsmag = stmag; + lsmjd = mjd; + + /* update the state and its PB */ + if (nfldstars < 0) { + /* fs_fetch() has already put up the error message */ + XmToggleButtonSetState (wantfs_w, False, False); + want_fs = 0; + svtb_updateFStars (want_fs); + nfldstars = 0; + } else if (nfldstars > 0) { + char rastr[32], decstr[32]; + fs_sexa (rastr, radhr(ra), 2, 36000); + fs_sexa (decstr, raddeg(dec), 3, 3600); + xe_msg (0, "Loaded %5d field stars to mag %2d @ %s %s diam %g deg", + nfldstars, stmag, rastr, decstr, raddeg(sv_dfov)); + XmToggleButtonSetState (wantfs_w, True, False); + want_fs = 1; + svtb_updateFStars (want_fs); + } + + /* show */ + sv_all (np); + watch_cursor(0); +} + +/* make sure trk_pm is at least minw x minh */ +static void +sv_track_pm (dsp, win, minw, minh) +Display *dsp; +Window win; +int minw, minh; +{ + Window root; + unsigned int bw, d; + unsigned int wid, hei; + int x, y; + + if (trk_pm) { + if ((int)trk_w >= minw && (int)trk_h >= minh) + return; + XFreePixmap (dsp, trk_pm); + } + + trk_w = (unsigned int) minw; + trk_h = (unsigned int) minh; + XGetGeometry (dsp, win, &root, &x, &y, &wid, &hei, &bw, &d); + trk_pm = XCreatePixmap (dsp, win, trk_w, trk_h, d); +} + +/* draw all the stuff in the coord tracking areas in the corners of the drawing + * area. + * if new, reset the angular reference. + * if sep, show separations from angular reference, else absolute coords. + * N.B. draw coords directly to svda_w, *NOT* sv_pm, so it can be erased by + * just copying sv_pm to svda_w again. + */ +static void +sv_draw_report_coords (new, sep, winx, winy, altdec, azra) +int new, sep; +int winx, winy; +double altdec, azra; +{ +#define NTLAB 12 /* /even/ number of labels */ + static double start_altdec, start_azra; /* angular reference */ + static double start_gl, start_gL; /* " galactic */ + static double start_pa; /* parallactic angle */ + static int maxrw; /* right width, never shrinks */ + Now *np = mm_get_now(); + Window win = XtWindow(svda_w); + Display *dsp = XtDisplay(svda_w); + double alt, az, asra, ra, ha, asdec, dec, e, gl, gL, pa; + char alt_buf[64], zen_buf[64], az_buf[64]; + char ra_buf[64], ha_buf[64], dec_buf[64]; + char gl_buf[64], gL_buf[64]; + char sep_buf[64]; + char fits_buf[64]; + char pa_buf[64]; + char *cns; + char *strp[NTLAB]; + int maxlw, maxh; + double ca; + int asc; + int i; + + /* alt/az and ra/dec regardless of current display mode */ + sv_fullwhere (np, altdec, azra, aa_mode, &alt, &az, &ra, &dec); + + /* gal coords */ + asra = ra; + asdec = dec; + e = epoch == EOD ? mjd : epoch; + if (epoch == EOD) + ap_as (np, mjd, &asra, &asdec); + eq_gal (e, asra, asdec, &gl, &gL); + + /* HA and Parallactic angle */ + radec2ha (np, ra, dec, &ha); + pa = parallacticLHD (lat, ha, dec); + + /* save if new reference */ + if (new) { + start_altdec = altdec; + start_azra = azra; + start_gl = gl; + start_gL = gL; + start_pa = pa; + } + + /* fill in each string. + * N.B. later we assume the left set is always wider than the right + */ + if (sep) { + double salt, saz, sra, sdec, dx; + sv_fullwhere (np, start_altdec, start_azra, aa_mode, + &salt, &saz, &sra, &sdec); + (void) strcpy (alt_buf, "dAlt:"); + dx = raddeg(alt-salt); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (alt_buf+5, dx, 5, 60); + else + fs_sexa (alt_buf+5, dx, 5, 3600); + + (void) strcpy (zen_buf, "dZD: "); + dx = raddeg(salt-alt); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (zen_buf+5, dx, 5, 60); + else + fs_sexa (zen_buf+5, dx, 5, 3600); + + (void) strcpy (az_buf, "dAz: "); + dx = raddeg(az-saz)+180.; + range (&dx, 360.0); + dx -= 180.; + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (az_buf+5, dx, 5, 60); + else + fs_sexa (az_buf+5, dx, 5, 3600); + + (void) strcpy (gl_buf, "dGLat:"); + dx = raddeg(gl-start_gl)+180; + range (&dx, 360.0); + dx -= 180.; + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (gl_buf+6, dx, 4, 60); + else + fs_sexa (gl_buf+6, dx, 4, 3600); + + (void) strcpy (gL_buf, "dGLng:"); + dx = raddeg(gL-start_gL); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (gL_buf+6, dx, 4, 60); + else + fs_sexa (gL_buf+6, dx, 4, 3600); + + (void) strcpy (ra_buf, "dRA:"); + dx = radhr(ra-sra)+12.; + range (&dx, 24.0); + dx -= 12.; + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (ra_buf+4, dx, 6, 600); + else + fs_sexa (ra_buf+4, dx, 6, 360000); + + (void) strcpy (ha_buf, "dHA:"); + dx = radhr(sra-ra)+12.; + range (&dx, 24.0); + dx -= 12.; + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (ha_buf+4, dx, 6, 600); + else + fs_sexa (ha_buf+4, dx, 6, 360000); + + (void) strcpy (dec_buf, "dDec:"); + dx = raddeg(dec-sdec); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (dec_buf+5, dx, 5, 600); + else + fs_sexa (dec_buf+5, dx, 5, 36000); + + (void) strcpy (pa_buf, "dPA: "); + dx = raddeg(pa - start_pa); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (pa_buf+4, dx, 6, 60); + else + fs_sexa (pa_buf+4, dx, 6, 3600); + + } else { + (void) strcpy (alt_buf, "Alt: "); + fs_pangle (alt_buf+7, alt); + (void) strcpy (zen_buf, "ZD: "); + fs_pangle (zen_buf+7, PI/2 - alt); + (void) strcpy (az_buf, "Az: "); + fs_pangle (az_buf+7, az); + (void) strcpy (ra_buf, "RA: "); + fs_ra (ra_buf+7, ra); + (void) strcpy (ha_buf, "HA: "); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (ha_buf+6, radhr(ha), 3, 600); + else + fs_sexa (ha_buf+6, radhr(ha), 3, 360000); + (void) strcpy (dec_buf, "Dec: "); + fs_prdec (dec_buf+6, dec); + + gl = raddeg(gl); + gL = raddeg(gL); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) { + fs_sexa(gl_buf+strlen(strcpy(gl_buf, "GLat: ")),gl,3,60); + fs_sexa(gL_buf+strlen(strcpy(gL_buf, "GLong: ")),gL,3,60); + } else { + fs_sexa(gl_buf+strlen(strcpy(gl_buf, "GLat: ")),gl,3,3600); + fs_sexa(gL_buf+strlen(strcpy(gL_buf, "GLong: ")),gL,3,3600); + } + + (void) strcpy (pa_buf, "PA: "); + if (pref_get(PREF_DPYPREC) == PREF_LOPREC) + fs_sexa (pa_buf+6, raddeg(pa), 4, 60); + else + fs_sexa (pa_buf+6, raddeg(pa), 4, 3600); + } + cns = cns_name(cns_pick (ra, dec, epoch==EOD ? mjd : epoch)); + cns += 5; /* skip the abbreviation */ + solve_sphere (azra - start_azra, PI/2-start_altdec, sin(altdec), + cos(altdec), &ca, &pa); + (void) strcpy (sep_buf, "Sep: "); + fs_pangle (sep_buf+6, acos(ca)); + sprintf (sep_buf+strlen(sep_buf), "@%.2f", + fmod(540-raddeg(pa),360.0)); + + fits_buf[0] = '\0'; + if (si_ison()) { + FImage *fip = si_getFImage(); + double ix, iy; + int p; + sv_win2im (winx, winy, &ix, &iy); + p = ((CamPix *)fip->image)[(int)(fip->sw*(int)(iy + .5) + ix + .5)]; + sprintf (fits_buf, "%5d @ %6.1f %6.1f", p, ix, iy); + } + + /* use the tracking font */ + XSetFont (dsp, sv_strgc, sv_tf->fid); + + /* assign strings, down left side then down right */ + strp[0] = ra_buf; + strp[1] = ha_buf; + strp[2] = dec_buf; + strp[3] = sep_buf; + strp[4] = cns; + strp[5] = fits_buf; + + strp[6] = alt_buf; + strp[7] = zen_buf; + strp[8] = az_buf; + strp[9] = gl_buf; + strp[10] = gL_buf; + strp[11] = pa_buf; + + /* find largest string in each side */ + maxlw = maxh = 0; + for (i = 0; i < NTLAB; i++) { + char *sp = strp[i]; + int l = strlen (sp); + XCharStruct all; + int dir, des; + + XTextExtents (sv_tf, sp, l, &dir, &asc, &des, &all); + if (i < NTLAB/2) { + if (all.width > maxlw) + maxlw = all.width; + } else { + if (all.width > maxrw) + maxrw = all.width; + } + if (asc + des > maxh) + maxh = asc + des; + } + + /* insure trk_pm is large enough, (re)creating if necessary. + * N.B. we assume the left half is always widest, right highest + */ + sv_track_pm (dsp, win, maxlw, ((NTLAB+1)/2)*maxh); + + /* erase and draw left side */ + XSetForeground (dsp, sv_strgc, sky_p); + XFillRectangle (dsp, trk_pm, sv_strgc, 0, 0, trk_w, trk_h); + XSetForeground (dsp, sv_strgc, annot_p); + for (i = 0; i < NTLAB/2; i++) { + char *sp = strp[i]; + int l = strlen (sp); + int y = asc + i*maxh; + XDrawString (dsp, trk_pm, sv_strgc, 0, y, sp, l); + } + XCopyArea (dsp,trk_pm,win,sv_strgc,0,0,trk_w,trk_h,TBORD,TBORD); + + /* erase and draw right side */ + XSetForeground (dsp, sv_strgc, sky_p); + XFillRectangle (dsp, trk_pm, sv_strgc, 0, 0, trk_w, trk_h); + XSetForeground (dsp, sv_strgc, annot_p); + for (i = NTLAB/2; i < NTLAB; i++) { + char *sp = strp[i]; + int l = strlen (sp); + int y = asc + (i-NTLAB/2)*maxh; + XDrawString (dsp, trk_pm, sv_strgc, 0, y, sp, l); + } + XCopyArea (dsp, trk_pm, win, sv_strgc, 0, 0, maxrw, trk_h, + sv_w-TBORD-maxrw, TBORD); + +#undef NTLAB +} + +/* draw the transient window marker at [x,y] using sv_tmgc */ +static void +sv_drawtm (dsp, win, x, y) +Display *dsp; +Window win; +int x, y; +{ + int diag = 707*MARKR/1000; + + /* draw window marker */ + XDrawLine (dsp, win, sv_tmgc, x-diag, y-diag, x-diag/2, y-diag/2); + XDrawLine (dsp, win, sv_tmgc, x+diag, y-diag, x+diag/2, y-diag/2); + XDrawLine (dsp, win, sv_tmgc, x+diag, y+diag, x+diag/2, y+diag/2); + XDrawLine (dsp, win, sv_tmgc, x-diag, y+diag, x-diag/2, y+diag/2); + XDrawArc (dsp, win, sv_tmgc, x-MARKR, y-MARKR, 2*MARKR, 2*MARKR, + 0, 64*360); + XDrawArc (dsp, win, sv_tmgc, x-MARKR/2, y-MARKR/2, MARKR, MARKR, + 0, 64*360); +} + +/* draw the stickier pixmap marker at [x,y] using sv_gc */ +static void +sv_drawm (dsp, pm, x, y) +Display *dsp; +Pixmap pm; +int x, y; +{ + int diag = 707*MARKR/1000; + + /* draw window marker */ + XSetForeground (dsp, sv_gc, annot_p); + XDrawLine (dsp, pm, sv_gc, x-diag, y-diag, x+diag, y+diag); + XDrawLine (dsp, pm, sv_gc, x+diag, y-diag, x-diag, y+diag); + XDrawArc (dsp, pm, sv_gc, x-MARKR, y-MARKR, 2*MARKR, 2*MARKR, 0,64*360); +} + +/* mark the given object, possibly reaiming depending on the center flags. + * then if newfov is not 0, change to new fov, silently enforcing limits. + * return 0 if did all that was asked else generate a message using xe_msg(*,1) + * and return -1. + * N.B. we do *not* update the s_ fields of op. + */ +static int +sv_mark (op, in_center, out_center, mark, xemsg, use_window, newfov) +Obj *op; +int in_center; /* whether to center an object already within the fov */ +int out_center; /* whether to center an object not already within the fov */ +int mark; /* whether to mark the object if it ends up visible */ +int xemsg; /* whether to issue an xe_msg if object is out of view */ +int use_window; /* write directly to the window, not the pixmap (for speed) */ +double newfov; /* new fov if other conditions met. leave unchanged if == 0 */ +{ + Display *dsp = XtDisplay (svda_w); + Window win = XtWindow (svda_w); + double altdec, azra; + int onscrn; + int x, y; + + /* see if it's within the current fov. + * maybe complain if it's not and we have no permission to recenter. + */ + altdec = aa_mode ? op->s_alt : op->s_dec; + azra = aa_mode ? op->s_az : op->s_ra; + onscrn = sv_loc (altdec, azra, &x, &y); + if (!onscrn && !out_center) { + if (xemsg) { + xe_msg (1, "`%.*s' is outside the field of view.\n", + MAXNM, op->o_name); + } + if (sv_tmon) { + sv_drawtm (dsp, win, sv_tmx, sv_tmy); /* erase */ + sv_tmon = 0; + } + return (-1); + } + + /* recenter if we can/may */ + if ((onscrn && in_center) || (!onscrn && out_center)) { + si_off(); + if (newfov != 0.0) { + sv_set_fov (newfov); + sv_set_scale(FOV_S, 1); + } + sv_altdec = altdec; + sv_set_scale (ALTDEC_S, 1); + sv_azra = azra; + sv_set_scale (AZRA_S, 1); + sv_all(mm_get_now()); + + /* get window loc at new view */ + if (sv_loc (altdec, azra, &x, &y) < 0) { + printf ("sv_mark bug! object disappeared from view?!\n"); + abort(); + } + } + + /* and mark if asked to. + * by now we are certainly visible. + */ + if (mark) { + if (use_window) { + /* transient marker drawn/erased; sv_copy_sky looks bad */ + if (sv_tmon) + sv_drawtm (dsp, win, sv_tmx, sv_tmy); /* erase */ + sv_drawtm (dsp, win, x, y); + sv_tmx = x; + sv_tmy = y; + sv_tmon = 1; + } else { + /* transient marker drawn on pixmap to be stickier */ + sv_drawm (dsp, sv_pm, x, y); + /* update */ + sv_copy_sky(); + } + + /* if want it, no buttons and off-screen then show marker coords */ + if (svtb_reportIsOn()) { + Window root, child; + int rx, ry, wx, wy; + unsigned mask; + + XQueryPointer (dsp,win,&root,&child,&rx,&ry,&wx,&wy,&mask); + if (!mask) { + double caltdec, cazra; + if (!sv_unloc (wx, wy, &caltdec, &cazra)) + sv_draw_report_coords(0, 0, wx, wy, altdec, azra); + } + } + } + + return (0); +} + +/* we are called when the right mouse button is pressed because the user wants + * to identify and possibly control an object in some way. we fill in the popup + * with goodies and manage it. + * three cases: + * 1) we are called with op set and tsp == 0. this means we were called with + * a real db object so just use *op; + * 2) we are called with op == 0 and tsp set. this means we were called with + * a trailed object and so use *tsp->op; + * 3) we are called with neither op nor tsp set. this means we were called + * far from any object; compute the location and display it. also set + * pu.op to a static FIXED object with basic info set for possible + * pointing. + * position the popup as indicated by ev and display it. + * it goes down by itself. + */ +static void +sv_popup (ev, op, tsp) +XEvent *ev; +Obj *op; +TSky *tsp; +{ + Now *np = mm_get_now(); + char buf[32], buf2[64]; + int noobj; + int newfav = op && fav_already(op->o_name) < 0; + int llabel = 0, rlabel = 0; + int hastrail = 0, trailon = 0; + int track = 0; + double jd; + + /* create popup first time */ + if (!pu.pu_w) + sv_create_popup(); + + /* save cursor coords at moment of popup */ + pu.wx = ev->xbutton.x; + pu.wy = ev->xbutton.y; + + /* set op */ + if (tsp) { + /* we were given a trailed Obj. + * pu.op is the top object, pu.tsp is tsp. + */ + TrailObj *top; + + op = &tsp->o; + top = tobj_find (op); + jd = tsp->trts.t; + llabel = !!(tsp->flags & OBJF_LLABEL); + rlabel = !!(tsp->flags & OBJF_RLABEL); + track = top->op == track_op; + hastrail = 1; + trailon = 1; + pu.op = top->op; + pu.tsp = tsp; + noobj = 0; + } else if (op) { + /* not called with tsp trail -- just op. + * pu.op is op, pu.tsp is NULL. + */ + TrailObj *top = tobj_find(op); + + jd = mjd; + llabel = !!(op->o_flags & OBJF_LLABEL); + rlabel = !!(op->o_flags & OBJF_RLABEL); + noobj = 0; + track = op == track_op; + hastrail = top ? 1 : 0; + trailon = hastrail && top->on; + pu.op = op; + pu.tsp = NULL; + } else { + /* nothing -- compute from ev and use svobj + * pu.op and op are &svobj, pu.tsp is NULL. + */ + double altdec, azra, alt, az, ra, dec; + + if (!sv_unloc (pu.wx, pu.wy, &altdec, &azra)) + return; /* outside the window */ + sv_fullwhere (np, altdec, azra, aa_mode, &alt, &az, &ra, &dec); + jd = mjd; + /* some will need current state, some will need definition */ + memset (&svobj, 0, sizeof(svobj)); + svobj.o_type = FIXED; + (void) strcpy (svobj.o_name, telAnon); + svobj.f_RA = (float)ra; + svobj.f_dec = (float)dec; + svobj.f_epoch = (float)(epoch == EOD ? mjd : epoch); + svobj.s_ra = (float)ra; + svobj.s_dec = (float)dec; + svobj.s_az = (float)az; + svobj.s_alt = (float)alt; + pu.op = op = &svobj; + pu.tsp = NULL; + noobj = 1; + } + + /* set up popup */ + + /* prep info for BINARY */ + if (!noobj && is_type (op,BINARYSTARM)) { + op->b_2compute = 1; + obj_cir (np, op); + } + + if (noobj) { + XtUnmanageChild (pu.name_w); + XtUnmanageChild (pu.altnm_w); + XtUnmanageChild (pu.desc_w); + XtUnmanageChild (pu.nmsep_w); + XtUnmanageChild (pu.infocb_w); + } else { + /* display name(s) */ + sv_punames(op); + + /* display description */ + set_xmstring (pu.desc_w, XmNlabelString, obj_description(op)); + XtManageChild (pu.desc_w); + XtManageChild (pu.nmsep_w); + XtManageChild (pu.infocb_w); + } + + if (!noobj && is_type(op, FIXEDM|BINARYSTARM) && op->f_spect[0]) { + char *label = "Spect"; + int l; + + if (is_type (op, FIXEDM)) { + switch (op->f_class) { + case 'T': case 'B': case 'D': case 'M': case 'S': case 'V': + break; + default: + label = "Type"; + break; + } + } + + l = sprintf (buf2, "%*s: %.*s", 6, label, + (int)sizeof(op->f_spect), op->f_spect); + if (is_type(op, BINARYSTARM) && op->b_2spect[0]) + sprintf (buf2+l, ", %.*s", (int)sizeof(op->b_2spect), + op->b_2spect); + set_xmstring (pu.spect_w, XmNlabelString, buf2); + XtManageChild (pu.spect_w); + } else + XtUnmanageChild (pu.spect_w); + + if (!noobj && ((is_type(op,BINARYSTARM) && op->b_nbp == 0) || + ((is_type(op,FIXEDM)||is_type(op,PLANETM)) && op->s_size>0))) { + char *szstr= is_type(op,BINARYSTARM) ? "Sep" : "Size"; + double szv = is_type(op,BINARYSTARM) ? op->b_bo.bo_sep : op->s_size; + if (szv < 60) + (void) sprintf (buf2, "%*s: %.1f\"", 6, szstr, szv); + else if (szv < 3600) + (void) sprintf (buf2, "%*s: %.1f'", 6, szstr, szv/60.0); + else + (void) sprintf (buf2, "%*s: %.2f°", 6, szstr, szv/3600.0); + set_xmstring (pu.size_w, XmNlabelString, buf2); + XtManageChild (pu.size_w); + } else + XtUnmanageChild (pu.size_w); + + if (!noobj && is_type(op,EARTHSATM)) { + sprintf (buf, "Sunlit: %*s", 6, op->s_eclipsed ? "No" : "Yes"); + set_xmstring (pu.eclipsed_w, XmNlabelString, buf); + XtManageChild (pu.eclipsed_w); + } else + XtUnmanageChild (pu.eclipsed_w); + + if (!noobj && ((is_type(op,BINARYSTARM) && op->b_nbp == 0) || + (is_type(op,FIXEDM) && op->f_pa>0) )) { + double pa = is_type(op,BINARYSTARM) ? op->b_bo.bo_pa : get_pa(op); + sprintf (buf, "%*s: %.0f° EofN", 6, "PA", raddeg(pa)); + set_xmstring (pu.pa_w, XmNlabelString, buf); + XtManageChild (pu.pa_w); + } else + XtUnmanageChild (pu.pa_w); + + if (ol_isUp() && !noobj && !tsp) + XtManageChild (pu.obslog_w); + else + XtUnmanageChild (pu.obslog_w); + + if (noobj) { + XtUnmanageChild (pu.ud_w); + XtUnmanageChild (pu.ut_w); + } else { + /* show in preferred zone to match rise/set */ + double tzjd = pref_get(PREF_ZONE)==PREF_UTCTZ ? jd : jd-tz/24; + + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(tzjd)); + (void) sprintf (buf2, "%*s: %s", 5, "Date", buf); + set_xmstring (pu.ud_w, XmNlabelString, buf2); + XtManageChild (pu.ud_w); + + fs_time (buf, mjd_hr(tzjd)); + (void) sprintf (buf2, "%*s: %s", 5, "Time", buf); + set_xmstring (pu.ut_w, XmNlabelString, buf2); + XtManageChild (pu.ut_w); + } + + fs_ra (buf, op->s_ra); + (void) sprintf (buf2, "%*s: %s", 5, "RA", buf); + set_xmstring (pu.ra_w, XmNlabelString, buf2); + + fs_prdec (buf, op->s_dec); + (void) sprintf (buf2, "%*s: %s", 5, "Dec", buf); + set_xmstring (pu.dec_w, XmNlabelString, buf2); + + fs_pangle (buf, op->s_alt); + (void) sprintf (buf2, "%*s: %s", 6, "Alt", buf); + set_xmstring (pu.alt_w, XmNlabelString, buf2); + + fs_pangle (buf, op->s_az); + (void) sprintf (buf2, "%*s: %s", 6, "Az", buf); + set_xmstring (pu.az_w, XmNlabelString, buf2); + + if (noobj) { + XtUnmanageChild (pu.mag_w); + XtUnmanageChild (pu.refmag_w); + } else { + int l = sprintf (buf2, "%*s: %6.2f", 5, "Mag", get_mag(op)); + if (is_type(op,BINARYSTARM)) + sprintf (buf2+l, ",%.2f", op->b_2mag/MAGSCALE); + set_xmstring (pu.mag_w, XmNlabelString, buf2); + XtManageChild (pu.mag_w); + if (si_ison() && si_isup() && svtb_gaussIsOn()) + XtManageChild (pu.refmag_w); + else + XtUnmanageChild (pu.refmag_w); + } + + if (tsp) { + Now n = *np; + n.n_mjd = jd; + sv_riset (&n, op); + } else { + sv_riset (np, op); + } + + if (telIsOn()) + XtManageChild (pu.goto_w); + else + XtUnmanageChild (pu.goto_w); + + if (noobj) { + XtUnmanageChild (pu.label_w); + XtUnmanageChild (pu.fav_w); + XtUnmanageChild (pu.track_w); + XtUnmanageChild (pu.trail_w); + XtUnmanageChild (pu.newtrail_w); + } else { + XtManageChild (pu.label_w); + XmToggleButtonSetState (pu.llabel_w, llabel, False); + XmToggleButtonSetState (pu.rlabel_w, rlabel, False); + if (newfav) + XtManageChild (pu.fav_w); + else + XtUnmanageChild (pu.fav_w); /* fs and trails not in real db */ + XtManageChild (pu.track_w); + XmToggleButtonSetState (pu.track_w, track, False); + if (hastrail) { + XtManageChild (pu.trail_w); + XmToggleButtonSetState (pu.trail_w, trailon, False); + set_xmstring (pu.newtrail_w, XmNlabelString, "Change Trail..."); + } else { + XtUnmanageChild (pu.trail_w); + set_xmstring (pu.newtrail_w, XmNlabelString, "Create Trail..."); + } + XtManageChild (pu.newtrail_w); + } + + if ((aa_mode && se_isOneHere (1, op->s_az, op->s_alt)) + || (!aa_mode && se_isOneHere (0, op->s_ra, op->s_dec))) + XtManageChild (pu.deleyep_w); + else + XtUnmanageChild (pu.deleyep_w); + + if (noobj || gal_opfind (op) < 0) + XtUnmanageChild (pu.gal_w); + else + XtManageChild (pu.gal_w); + + if (!noobj && is_type (pu.op, BINARYSTARM)) + XtManageChild (pu.bsmap_w); + else + XtUnmanageChild (pu.bsmap_w); + + XmMenuPosition (pu.pu_w, (XButtonPressedEvent *)ev); + XtManageChild (pu.pu_w); +} + +/* if there are no dupnames for op, put it in the pu.name_w label, else + * put the original name in the pu.altnm_w cascade button and put the rest in a + * pullright menu. + */ +static void +sv_punames (Obj *op) +{ + DupName *dnp; + int i, nn, ndn = db_dups (&dnp); + + /* count number of names */ + for (i = nn = 0; i < ndn; i++) + if (dnp[i].op == op) + nn++; + + if (nn > 1) { + /* put primary in CB, build pullright with alternates */ + Widget pd; + Arg args[20]; + int n; + + /* first name in CB itself */ + set_xmstring (pu.altnm_w, XmNlabelString, op->o_name); + XtManageChild (pu.altnm_w); + XtUnmanageChild (pu.name_w); + + /* remaining in new pullright */ + get_something (pu.altnm_w, XmNsubMenuId, (XtArgVal)&pd); + if (pd) + XtDestroyWidget(pd); + n = 0; + pd = XmCreatePulldownMenu (pu.pu_w, "ALTPD", args, n); + set_something (pu.altnm_w, XmNsubMenuId, (XtArgVal)pd); + + for (i = 0; i < ndn; i++) { + if (dnp[i].op == op && strcmp (dnp[i].nm, op->o_name)) { + Widget lbl = XmCreateLabel (pd, "AL", args, 0); + set_xmstring (lbl, XmNlabelString, dnp[i].nm); + XtManageChild (lbl); + } + } + } else { + /* put only name in label */ + XtUnmanageChild (pu.altnm_w); + set_xmstring (pu.name_w, XmNlabelString, op->o_name); + XtManageChild (pu.name_w); + } +} + +/* fill in the pu.rise/trans/set_w widgets from op at np. + * we are never called for trailed objects so the time is always just Now. + */ +static void +sv_riset (Now *np, Obj *op) +{ + char buf1[64], buf2[64]; + RiseSet rs; + + dm_riset (np, op, &rs); + + dm_colFormat (np, op, &rs, RSTIME_ID, buf1); + (void) sprintf (buf2, "%*s: %s", PUTW, "Rise at", buf1); + set_xmstring (pu.rise_w, XmNlabelString, buf2); + + dm_colFormat (np, op, &rs, TRTIME_ID, buf1); + (void) sprintf (buf2, "%*s: %s", PUTW, "Trans at", buf1); + set_xmstring (pu.trans_w, XmNlabelString, buf2); + + dm_colFormat (np, op, &rs, TRALT_ID, buf1); + (void) sprintf (buf2, "%*s: %s", PUTW, "Trans alt", buf1); + set_xmstring (pu.transalt_w, XmNlabelString, buf2); + + dm_colFormat (np, op, &rs, TRAZ_ID, buf1); + (void) sprintf (buf2, "%*s: %s", PUTW, "Trans az", buf1); + set_xmstring (pu.transaz_w, XmNlabelString, buf2); + + dm_colFormat (np, op, &rs, SETTIME_ID, buf1); + (void) sprintf (buf2, "%*s: %s", PUTW, "Set at", buf1); + set_xmstring (pu.set_w, XmNlabelString, buf2); +} + +/* create the id popup */ +static void +sv_create_popup() +{ + Widget pd_w, cb_w; + Arg args[20]; + XmString str; + Widget w; + int n; + + /* create the outer window */ + + n = 0; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNspacing, 0); n++; /* getting crowded */ + pu.pu_w = XmCreatePopupMenu (svda_w, "SVPopup", args, n); + + /* passive name and cascade for alternates */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + pu.name_w = XmCreateLabel (pu.pu_w, "SVPopNM", args, n); + wtip (pu.name_w, "Object name"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + pu.altnm_w = XmCreateCascadeButton (pu.pu_w, "SVPopCB", args, n); + wtip (pu.altnm_w, "Object name and alternates"); + + /* description on name */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + pu.desc_w = XmCreateLabel (pu.pu_w, "SVPopNM", args, n); + wtip (pu.desc_w, "Object classification"); + XtManageChild (pu.desc_w); + + /* add a separator -- managed only if there is a name */ + + n = 0; + XtSetArg (args[n], XmNmargin, 15); n++; + XtSetArg (args[n], XmNseparatorType, XmSINGLE_LINE); n++; + pu.nmsep_w = XmCreateSeparator (pu.pu_w, "SVSep", args, n); + + /* make the command buttons */ + + str = XmStringCreateLtoR ("Center", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreatePushButton (pu.pu_w, "SVPopPoint", args, n); + XtAddCallback (w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)AIM); + XtManageChild (w); + wtip (w, "Center the Sky View at this location"); + XmStringFree (str); + + /* make the zoom cascade */ + + sv_create_zoomcascade (pu.pu_w); + + /* make the label l/r casade menu */ + + sv_create_labellr (pu.pu_w); + + str = XmStringCreateLtoR ("Place eyepiece", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreatePushButton (pu.pu_w, "SVPopEyeP", args, n); + XtAddCallback (w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)PEYEPIECE); + XtManageChild (w); + wtip (w, "Drop an eyepiece centered at this location"); + XmStringFree(str); + + str = XmStringCreateLtoR ("Delete eyepiece", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.deleyep_w = XmCreatePushButton (pu.pu_w, "SVPopDelEyeP", args, n); + XtAddCallback (pu.deleyep_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)DEYEPIECE); + wtip (pu.deleyep_w, "Delete the eyepiece covering this location"); + XmStringFree(str); + + str = XmStringCreateLtoR("New Photom ref", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.refmag_w = XmCreatePushButton (pu.pu_w, "SVPopRefMag", args, n); + XtAddCallback (pu.refmag_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)SETPHOTOMREF); + wtip (pu.refmag_w, "Define this object as the photometric reference"); + XmStringFree(str); + + str = XmStringCreateLtoR ("Telescope GoTo", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.goto_w = XmCreatePushButton (pu.pu_w, "SVPopGoto", args, n); + XtAddCallback (pu.goto_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)TGOTO); + wtip (pu.goto_w, "Send coordinates of this location to external app"); + XmStringFree (str); + + str = XmStringCreateLtoR ("Add to logbook", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.obslog_w = XmCreatePushButton (pu.pu_w, "SVPopLog", args, n); + XtAddCallback (pu.obslog_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)OBSLOG); + wtip (pu.obslog_w, "Set logbook to info about this object"); + XmStringFree (str); + +#ifdef AAVSO + str=XmStringCreateLtoR("AAVSO", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.av_w = XmCreatePushButton (pu.pu_w, "SVPopAV", args, n); + wtip (pu.av_w,"Load closest AAVSO star into Tools->AAVSO"); + XtAddCallback (pu.av_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)LOADAV); + XmStringFree (str); + XtManageChild (pu.av_w); +#endif + + str = XmStringCreateLtoR("Add to Favorites",XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.fav_w = XmCreatePushButton (pu.pu_w, "SVPopF", args, n); + XtAddCallback (pu.fav_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)ADD2FAV); + wtip (pu.fav_w, "Add this object to list of Favorites"); + XmStringFree (str); + + str = XmStringCreateLtoR ("Show in gallery", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + pu.gal_w = XmCreatePushButton (pu.pu_w, "SVGal", args, n); + XtAddCallback (pu.gal_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)GALLERY); + wtip (pu.gal_w, "Display the gallery image of this object"); + XmStringFree (str); + + /* BINARYSTAR button */ + + n = 0; + pu.bsmap_w = XmCreatePushButton (pu.pu_w, "BPB", args, n); + XtAddCallback (pu.bsmap_w, XmNactivateCallback, sv_bsmap_cb, 0); + set_xmstring (pu.bsmap_w, XmNlabelString, "Show orbit..."); + wtip (pu.bsmap_w,"Open window to display orbit of this binary system"); + + /* the Change Trail PB: must un/manage and set labelString each use */ + n = 0; + pu.newtrail_w = XmCreatePushButton (pu.pu_w, "SVPopNewTrail", args, n); + XtAddCallback (pu.newtrail_w, XmNactivateCallback, sv_pu_activate_cb, + (XtPointer)NEWTRAIL); + wtip (pu.newtrail_w, + "Create (or change) a time-sequence trail for this object"); + + /* the Trail TB: must un/manage and set state on each use */ + str = XmStringCreateLtoR ("Trail", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + pu.trail_w = XmCreateToggleButton (pu.pu_w, "SVPopTrail", args, n); + XtAddCallback(pu.trail_w, XmNvalueChangedCallback, sv_pu_trail_cb,NULL); + wtip(pu.trail_w,"Whether to display an existing trail for this object"); + XmStringFree(str); + + str = XmStringCreateLtoR ("Track", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + pu.track_w = XmCreateToggleButton (pu.pu_w, "SVPopTrack", args, n); + XtAddCallback (pu.track_w, XmNvalueChangedCallback, sv_pu_track_cb, 0); + wtip (pu.track_w, "Keep this object centered after each Main Update"); + XtManageChild (pu.track_w); + XmStringFree (str); + + /* add a nice separator */ + n = 0; + w = XmCreateSeparator (pu.pu_w, "SVSep", args, n); + XtManageChild(w); + + /* date/time */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.ud_w = XmCreateLabel (pu.pu_w, "SVPopValueL", args, n); + XtManageChild (pu.ud_w); + wtip (pu.ud_w, "Date of this information, as per time zone Pref"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.ut_w = XmCreateLabel (pu.pu_w, "SVPopValueL", args, n); + XtManageChild (pu.ut_w); + wtip (pu.ut_w, "Time of this information, as per time zone Pref"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.ra_w = XmCreateLabel (pu.pu_w, "SVPopValueL", args, n); + XtManageChild (pu.ra_w); + wtip (pu.ra_w, "RA of this location or object"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.dec_w = XmCreateLabel (pu.pu_w, "SVPopValueL", args, n); + XtManageChild (pu.dec_w); + wtip (pu.dec_w, "Declination of this location or object"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.mag_w = XmCreateLabel (pu.pu_w, "SVPopValueL", args, n); + XtManageChild (pu.mag_w); + wtip (pu.mag_w, "Nominal brightness"); + + /* rise/set pull right */ + + n = 0; + pd_w = XmCreatePulldownMenu (pu.pu_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (pu.pu_w, "CCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Rise-Set"); + XtManageChild (cb_w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.rise_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.rise_w); + wtip (pu.rise_w, "Rise time today, as per time zone Preference"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.trans_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.trans_w); + wtip (pu.trans_w,"Transit time today, as per time zone Preference"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.transalt_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.transalt_w); + wtip (pu.transalt_w, "Transit altitude today"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.transaz_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.transaz_w); + wtip (pu.transaz_w, "Transit azimuth today"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.set_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.set_w); + wtip (pu.set_w, "Set time today, as per time zone Preference"); + + /* info pull right */ + + n = 0; + pd_w = XmCreatePulldownMenu (pu.pu_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + pu.infocb_w = XmCreateCascadeButton (pu.pu_w, "CCB", args, n); + set_xmstring (pu.infocb_w, XmNlabelString, "More info"); + XtManageChild (pu.infocb_w); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.alt_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.alt_w); + wtip (pu.alt_w, "Local altitude: angle above horizon"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.az_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.az_w); + wtip (pu.az_w, "Local azimuth: angle E of N"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.spect_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.spect_w); + wtip (pu.spect_w, "Spectral classification"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.size_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.size_w); + wtip (pu.size_w, "Angular diameter or separation"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.pa_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.pa_w); + wtip (pu.pa_w, "Position angle, degs E of N"); + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + pu.eclipsed_w = XmCreateLabel (pd_w, "SVPopValueL", args, n); + XtManageChild (pu.eclipsed_w); + wtip (pu.eclipsed_w, "Whether satellite is eclipsed or sunlit"); +} + +/* create the zoom cascade menu off pulldown menu pd_w */ +static void +sv_create_zoomcascade (pd_w) +Widget pd_w; +{ + Widget cb_w, zpd_w, w; + Arg args[20]; + int n; + int i; + + n = 0; + zpd_w = XmCreatePulldownMenu (pd_w, "ZPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, zpd_w); n++; + cb_w = XmCreateCascadeButton (pd_w, "ZCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Center + Zoom"); + wtip (cb_w, "Center at this location and zoom in or out"); + XtManageChild (cb_w); + + for (i = 0; i < 6; i++) { + int z = 0; + char buf[64]; + + /* z is the numerator, 10 is the denominator of zoom-in ratio */ + switch (i) { + case 0: z = 20; break; + case 1: z = 50; break; + case 2: z = 100; break; + case 3: z = 5; break; + case 4: z = 2; break; + case 5: z = 1; break; + default: + printf ("create_zoom Bug! bad setup %d\n", i); + abort(); + } + + if (z >= 10) + (void) sprintf (buf, "Zoom in %dX", z/10); + else + (void) sprintf (buf, "Zoom out %dX", 10/z); + + n = 0; + w = XmCreatePushButton (zpd_w, "Zoom", args, n); + XtAddCallback (w, XmNactivateCallback, sv_pu_zoom_cb, (XtPointer)(long int)z); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + } +} + +/* create the label l/r cascade menu off pulldown menu pd_w */ +static void +sv_create_labellr (pd_w) +Widget pd_w; +{ + Widget lpd_w; + Arg args[20]; + int n; + + n = 0; + lpd_w = XmCreatePulldownMenu (pd_w, "LPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, lpd_w); n++; + pu.label_w = XmCreateCascadeButton (pd_w, "Persistent Label", + args, n); + wtip (pu.label_w, "Control how/if this object is labeled"); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + pu.llabel_w = XmCreateToggleButton (lpd_w, "on Left", args, n); + XtAddCallback(pu.llabel_w, XmNvalueChangedCallback, sv_pu_label_cb, + (XtPointer)OBJF_LLABEL); + wtip (pu.llabel_w, "Label with name to the left of the symbol"); + XtManageChild (pu.llabel_w); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + pu.rlabel_w = XmCreateToggleButton (lpd_w, "on Right", args, n); + XtAddCallback(pu.rlabel_w, XmNvalueChangedCallback, sv_pu_label_cb, + (XtPointer)OBJF_RLABEL); + wtip (pu.rlabel_w, "Label with name to the right of the symbol"); + XtManageChild (pu.rlabel_w); +} + +/* called when any of the popup's pushbuttons are activated. + * (the zoom cascade is not done here though). + * client is a code to indicate which. + * obtain current state from pu. The current object is at pu.op. If it is on + * a trail that specific entry is at pu.tsp->o. + */ +/* ARGSUSED */ +static void +sv_pu_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int code = (long int)client; + Obj *op = pu.tsp ? &pu.tsp->o : pu.op; + + switch (code) { + case AIM: + /* turn off following remote inputs when told explicitly to point */ + XmToggleButtonSetState (keeptelvis_w, False, 1); + (void) sv_mark (op, 1, 1, 0, 1, 0, 0.0); + break; + + case SETPHOTOMREF: { + double ix, iy; + sv_win2im (pu.wx, pu.wy, &ix, &iy); + si_setPhotomRef (ix, iy, get_mag(op)); + } + break; + + case PEYEPIECE: + if (aa_mode) + se_add (1, op->s_az, op->s_alt); + else + se_add (0, op->s_ra, op->s_dec); + XmToggleButtonSetState (wanteyep_w, True, False); + want_eyep = 1; + sv_all (mm_get_now()); + break; + + case DEYEPIECE: + if (aa_mode) + se_del (1, op->s_az, op->s_alt); + else + se_del (0, op->s_ra, op->s_dec); + sv_all (mm_get_now()); + break; + + case TGOTO: + /* send the current object to the telecope. */ + (void) telGoto (op); + + /* add to Telescope pulldown */ + sv_addtelpd (op); + break; + + case OBSLOG: + ol_setObj (op); + break; + + case LOADAV: + av_load (op); + break; + + case ADD2FAV: + /* N.B. we assume we won't get here unless op is in real db */ + fav_add (op); + break; + + case GALLERY: + gal_opscroll (op); + break; + + case NEWTRAIL: { + TrailObj *top; + TrState *sp; + + sp= pu.tsp && (top = tobj_find (&pu.tsp->o)) != 0 + ? &top->trs : &trstate; + tr_setup ("xephem Sky Trail setup", pu.op->o_name, sp, sv_mktrail, + (XtPointer)pu.op); + + } + break; + + default: + printf ("sv_pu_activate_db Bug! code=%d\n", code); + abort(); + break; + } +} + +/* called when any of the zoom cascade buttons is activated. + * client is the zoom-in factor numerator -- the denominator is 10. + */ +/* ARGSUSED */ +static void +sv_pu_zoom_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int factor = (long int)client; + double newfov = sv_vfov*10.0/factor; + Obj *op = pu.tsp ? &pu.tsp->o : pu.op; + + /* turn off following remote inputs when told explicitly to point */ + XmToggleButtonSetState (keeptelvis_w, False, 1); + + (void) sv_mark (op, 1, 1, 0, 1, 0, newfov); +} + +/* called when the Trail popup toggle button changes. + * when called, pu.op will point to the base object (which is known to have a + * trail, but may not be on) + */ +/* ARGSUSED */ +static void +sv_pu_trail_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + TrailObj *top = tobj_find (pu.op); + + if (!top) { + printf ("sv_pu_trail_cb() Bug! no trail!\n"); + abort(); + } + + if (XmToggleButtonGetState(wid)) { + /* trail is being turned on. just display it */ + top->on = 1; + tobj_display_all(); + sv_copy_sky(); + } else { + /* trailing is being turned off. mark it as being off. + * it will get discarded at the next update if it's still off. + * redraw sky so it disappears. + */ + top->on = 0; + sv_all (mm_get_now()); + } +} + +/* called when the Label popup toggle button changes. + * client is one of OBJF_{L,R}LABEL. + * we get all other context from the pu structure. + */ +/* ARGSUSED */ +static void +sv_pu_label_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + int set = ((XmToggleButtonCallbackStruct *)call)->set; + int side = (long int)client; + int oside = (side & OBJF_LLABEL) ? OBJF_RLABEL : OBJF_LLABEL; + unsigned char *flagsp; + + /* if this is a trailed item then its TSky will be in pu.tsp + * otherwise it is a plain db object so use pu.op. + */ + flagsp = pu.tsp ? &pu.tsp->flags : &pu.op->o_flags; + if (set) { + *flagsp |= (side|OBJF_PERSLB); + *flagsp &= ~oside; + } else + *flagsp &= ~(side|OBJF_PERSLB); + + sv_all (mm_get_now()); +} + +/* called when the Track popup toggle button changes. + * we get all context from the pu structure. + */ +/* ARGSUSED */ +static void +sv_pu_track_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (XmToggleButtonGetState (w)) { + track_op = pu.op; + XtSetSensitive (tracktb_w, True); + XmToggleButtonSetState (tracktb_w, True, True); + (void) sv_mark (track_op, 0, 0, 1, 1, 0, 0.0); + } else + XmToggleButtonSetState (tracktb_w, False, True); +} + +/* action routine to implement some keyboard shortcuts. + * SVScut(a,x) where a selects what and x is a factor. + */ +static void +sv_shortcuts (w, e, p, n) +Widget w; +XEvent *e; +String *p; +Cardinal *n; +{ + int what; + double factor; + + if (!(n && *n == 2)) { + printf ("Bad sv_shortcuts: %p %d %p\n", n, n?*n:0, p); + abort(); + } + + /* disable any image display */ + si_off(); + + /* perform the action */ + what = atoi(p[0]); + factor = atof(p[1]); + switch (what) { + case 0: /* pan horizontal */ + /* account for flipping and somewhat faster near poles */ + sv_azra += factor*sv_hfov*((aa_mode ^ flip_lr) ? 1 : -1) + /(1+.9*(cos(sv_altdec)-1)); + range (&sv_azra, 2*PI); + sv_set_scale(AZRA_S, 0); + break; + case 1: /* pan vertical */ + /* account for flipping */ + sv_altdec += factor*sv_vfov*(flip_tb ? -1 : 1); + if (sv_altdec < -PI/2) sv_altdec = -PI/2; + if (sv_altdec > PI/2) sv_altdec = PI/2; + sv_set_scale(ALTDEC_S, 0); + break; + case 2: /* zoom */ + sv_vfov *= factor; + sv_set_fov (sv_vfov); + sv_set_scale(FOV_S, 0); + } + + /* draw then abandon auto repeats */ + sv_all(NULL); + XmUpdateDisplay (svda_w); + XSync (XtD, True); +} + + +/* remove trails which are no longer turned on. */ +static void +tobj_rmoff() +{ + TrailObj **topp; /* address to be changed if we decide to + * remove *topp + */ + TrailObj *top; /* handy *topp */ + + for (topp = &trailobj; (top = *topp) != NULL; ) { + if (top->on) { + topp = &top->ntop; + } else { + *topp = top->ntop; + XtFree ((char *)top); + } + } +} + +/* remove the trailobj list that contains the given pointer. + * we have to search each trail list to find the one with this pointer. + * it might be the one on TrailObj itself or one of the older ones on + * the TSky list. + * it's no big deal if op isn't really on any trail list. + */ +static void +tobj_rmobj (op) +Obj *op; +{ + TrailObj **topp; /* address to be changed if we decide to + * remove *topp + */ + TrailObj *top; /* handy *topp */ + + for (topp = &trailobj; (top = *topp) != NULL; ) { + int i; + if (top->op == op) + goto out; + for (i = 0; i < top->nsky; i++) + if (&top->sky[i].o == op) + goto out; + topp = &top->ntop; + } + + out: + + if (!top) + return; /* oh well */ + + *topp = top->ntop; + XtFree ((char *)top); +} + +/* add a new TrailObj entry to the trailobj list for db object op. + * make enough room in the sky array for nsky entries. + * return a pointer to the new TrailObj. + * (we never return if there's no memory) + */ +static TrailObj * +tobj_addobj (op, nsky) +Obj *op; +int nsky; +{ + TrailObj *top; + int nbytes; + + /* don't forget there is inherently room for one TSky in a TrailObj */ + nbytes = sizeof(TrailObj) + (nsky-1)*sizeof(TSky); + top = (TrailObj *) XtMalloc (nbytes); + zero_mem ((void *)top, nbytes); + top->nsky = nsky; /* though none are in use now */ + top->op = op; + top->on = 1; + + /* link directly off trailobj -- order is unimportant */ + top->ntop = trailobj; + trailobj = top; + + return (top); +} + +/* remove each trail that refers to a db object, including field stars, no + * longer around. also reset the tracked object if it is gone. + * this is done after the db has been reduced. + */ +static void +tobj_newdb() +{ + TrailObj *top; + DBScan dbs; + Obj *op; + + for (top = trailobj; top; ) { + for (db_scaninit (&dbs, ALLM, fldstars, nfldstars); + (op = db_scan (&dbs)) != NULL; ) + if (top->op == op) + break; + if (op == NULL) { + /* trailed object is gone -- remove trail and restart */ + tobj_rmobj (top->op); + top = trailobj; + } else + top = top->ntop; + } + + + if (track_op) { + for (db_scaninit (&dbs, ALLM, fldstars, nfldstars); + (op = db_scan (&dbs)) != NULL; ) + if (track_op == op) + break; + if (op == NULL) { + /* tracked object is gone */ + XmToggleButtonSetState (tracktb_w, False, False); + XtSetSensitive (tracktb_w, False); + track_op = NULL; + } + } +} + +/* find the TrailObj that contains op. + * return NULL if don't find it. + */ +static TrailObj * +tobj_find (op) +Obj *op; +{ + TrailObj *top; + + for (top = trailobj; top; top = top->ntop) { + int i; + if (top->op == op) + return (top); + for (i = 0; i < top->nsky; i++) + if (&top->sky[i].o == op) + return (top); + } + + return (NULL); +} + +/* display everything in the trailobj list that is marked on onto sv_pm + * clipped to the current window. + */ +static void +tobj_display_all() +{ + static int aatrailwarn; + Display *dsp = XtDisplay(svda_w); + TrailObj *top; + + /* reset trail counter -- increment if actually print any trails. + * this is just used when printing to know whether to include a message. + */ + anytrails = 0; + + for (top = trailobj; top; top = top->ntop) { + int x1 = 0, y1 = 0, x2, y2; + int i, d; + GC gc; + + if (!top->on) + continue; + + d = objdiam (top->op); + objGC (top->op, d, &gc); + + /* warn about aa trails and topo ra/dec first time only */ + if (!aatrailwarn && aa_mode && top->nsky > 1) { + aatwarn_msg(); + aatrailwarn = 1; + } + + for (i = 0; i < top->nsky; i++) { + TSky *sp = &top->sky[i]; + Obj *op = &sp->o; + + if (sv_trailobjloc (sp, &x2, &y2)) { + if (sp->flags & OBJF_PERSLB) { + int lflags; + if (is_deepsky (op)) + lflags = lbl_lds; + else if (is_ssobj (op)) + lflags = lbl_lss; + else if (op->o_flags & FLDSTAR) + lflags = lbl_lfs; + else + lflags = lbl_lst; + draw_label (sv_pm, gc, op, lflags|sp->flags, x2, y2, d); + } + } + if (i > 0) { + int sx1, sy1, sx2, sy2; + + if (segisvis (x1, y1, x2, y2, &sx1, &sy1, &sx2, &sy2)) { + TrTS *tp = (x2==sx2 && y2==sy2) ? &sp->trts : NULL; + TrTS *ltp = (i==1 && x1==sx1 && y1==sy1) + ? &top->sky[0].trts : NULL; + int e = (is_type(op,EARTHSATM) && op->s_eclipsed); + int xwrap, ywrap; + XSegment xs; + + xs.x1 = sx1; + xs.y1 = sy1; + xs.x2 = sx2; + xs.y2 = sy2; + split_wrap (&xs, &xwrap, &ywrap); + + if (xwrap || ywrap) { + tr_draw (dsp, sv_pm, gc, e, TICKLEN, tp, ltp, + &top->trs, sx1, sy1, sx2+xwrap, sy2+ywrap); + tr_draw (dsp, sv_pm, gc, e, TICKLEN, tp, ltp, + &top->trs, sx1-xwrap, sy1-ywrap, sx2, sy2); + } else + tr_draw (dsp, sv_pm, gc, e, TICKLEN, tp, ltp, + &top->trs, sx1, sy1, sx2, sy2); + anytrails++; + } + } + x1 = x2; + y1 = y2; + } + + } + + sv_draw_obj (dsp, sv_pm, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +static void +aatwarn_msg () +{ + xe_msg (1, +"\n\ +Please be aware that due to diurnal motion Alt/Az trails can be\n\ +very misleading when viewed against the fixed background of stars.\n\ +\n\ + This message will only appear one time"); +} + +/* determine if the given object is visible and within sv_w/sv_h. + * if so, return 1 and compute the size and location, else return 0. + * N.B. only call this for bona fide db objects -- *not* for objects in the + * TrailObj lists -- it will destroy their history. + */ +static int +sv_dbobjloc (Obj *op, int *xp, int *yp, int *dp) +{ + double altdec, azra; + + if (!sv_precheck(op)) + return (0); + + /* remaining things need accurate s_* fields */ + db_update(op); + if (op->o_flags & NOCIRCUM) + return (0); + + if (!sv_hznOpOk(op)) + return(0); + + /* persistent labels are immune to faint cutoff */ + if (!(op->o_flags & OBJF_PERSLB)) { + int stmag, ssmag, dsmag, magstp; + double m = get_mag(op); + + svf_getmaglimits (&stmag, &ssmag, &dsmag, &magstp); + if (m > (is_deepsky(op) ? dsmag : (is_ssobj(op) ? ssmag : stmag))) + return(0); /* it's not within mag range after all */ + } + + /* check if any part of object is on screen */ + altdec = aa_mode ? op->s_alt : op->s_dec; + azra = aa_mode ? op->s_az : op->s_ra; + *dp = objdiam (op); + if (sv_loc (altdec, azra, xp, yp)) + return (1); + if (abs(*xp)!=MAXXW && abs(*yp)!=MAXXW && sv_dfov=0 && *xp-r=0 && *yp-ro in any way. + */ +static int +sv_trailobjloc (tsp, xp, yp) +TSky *tsp; +int *xp, *yp; +{ + Obj *op = &tsp->o; + double altdec, azra; + + altdec = aa_mode ? op->s_alt : op->s_dec; + azra = aa_mode ? op->s_az : op->s_ra; + return (sv_loc (altdec, azra, xp, yp) && sv_hznOpOk(op)); +} + +/* do as much as possible to pre-check whether op should be on screen now + * WITHOUT computing it's actual coordinates. put another way, we are not to + * use any s_* fields in these tests. + * return 0 if we know it's definitely not on screen, or 1 if it might be. + */ +static int +sv_precheck (op) +Obj *op; +{ + Now *np = mm_get_now(); + + if (op->o_type == UNDEFOBJ) + return(0); + + /* check orbital elements for proper date range */ + if (dateOK (np, op) < 0) + return (0); + + /* persistent labels are immune to faint cutoff */ + if (!(op->o_flags & OBJF_PERSLB) && !svf_filter_ok(op)) + return(0); + if (!sv_onscrn(np, op)) + return(0); + + return (1); +} + +/* return 1 if the object can potentially be on screen, else 0. + * N.B. this is meant to be cheap - we only do fixed objects and we don't + * precess. most specifically, !! we don't use any s_* fields. !! + */ +static int +sv_onscrn (Now *np, Obj *op) +{ +#define DELEP 3650 /* maximum epoch difference we dare go without + * precessing, days + */ +#define MARGIN degrad(1.0) /* border around fov still considered "in" + * in spite of having not precessed. + */ + double ra0, dec0; /* ra/dec of our center of view */ + double r; + int polecap; + + if (!is_type (op, FIXEDM)) + return (1); + if (fabs (mjd - op->f_epoch) > DELEP) + return (1); + + if (aa_mode) { + /* compute ra/dec of view center; worth caching too */ + static double last_lat = 9876, last_alt, last_az; + static double last_ha, last_dec0; + double ha, lst; + + if(lat == last_lat && sv_altdec == last_alt && sv_azra == last_az) { + ha = last_ha; + dec0 = last_dec0; + } else { + aa_hadec (lat, sv_altdec, sv_azra, &ha, &dec0); + last_lat = lat; + last_alt = sv_altdec; + last_az = sv_azra; + last_ha = ha; + last_dec0 = dec0; + } + + /* now_lst() already knows how to cache; others are very cheap */ + now_lst (np, &lst); + ra0 = hrrad(lst) - ha; + range (&ra0, 2*PI); + } else { + ra0 = sv_azra; + dec0 = sv_altdec; + } + + r = sv_dfov/2 + MARGIN; + polecap = fabs(op->f_dec) > PI/2 - (r + fabs(dec0)); + + /* just check a surrounding "rectangular" region. */ + return (fabs(op->f_dec - dec0) < r + && (polecap || delra(op->f_RA-ra0)*cos(op->f_dec) < r)); +} + +/* compute x/y loc of a point at azra/altdec as viewed from sv_azra/sv_altdec. + * if we are displaying a FITS image, use it directly. + * always set *x/yp, but return value is whether it is really on screen now. + */ +static int +sv_loc (altdec, azra, xp, yp) +double altdec; /* angle up from spherical equator, such as alt or dec; rads */ +double azra; /* angle around spherical pole, such as az or ra; rads */ +int *xp, *yp; /* return X coords within sv_w/h window */ +{ + if (si_ison()) { + /* use FITS image */ + double x, y; + FImage *fip; + + fip = si_getFImage(); + if (!fip) { + printf ("sv_loc Bug! FITS disappeared\n"); + abort(); + } + if (RADec2xy (fip, azra, altdec, &x, &y) < 0) { + *xp = sv_w/2; + *yp = sv_h/2; + return (0); + } + + si_im2win (x, y, sv_w, sv_h, xp, yp); + if (flip_lr) + *xp = sv_w - 1 - *xp; + if (flip_tb) + *yp = sv_h - 1 - *yp; + } else if (cyl_proj) { + /* cylindrical: + * lines of constant altdec are horizontal, + * lines of constant azra are vertical. + * nothing shows beyond the poles. + */ + double scale = sv_h/sv_vfov; + int fullwide = (int)(2*PI*scale+.5); + int halfwide = (int)(1*PI*scale+.5); + + /* looks nice to space evenly with sv_azra in center */ + *xp = (int)floor((sv_azra - azra)*scale + sv_w/2 + .5); + if (*xp < sv_w/2-halfwide) + *xp += fullwide; + if (*xp >= sv_w/2+halfwide) + *xp -= fullwide; + *yp = (int)floor((sv_altdec - altdec)*scale + sv_h/2 + .5); + + /* flipping */ + if (aa_mode != flip_lr) /* a/a opposite of r/d */ + *xp = sv_w - *xp; + if (flip_tb) + *yp = sv_h - *yp; + + } else { + /* spherical */ +#define LOCEPS (1e-7) /* an angle too small to see on screen, rads */ + static double last_sv_altdec = 123.0, last_sa, last_ca; + double a,sa,ca; /* angle from viewpoint to pole */ + double b,sb,cb; /* angle from object to pole */ + double c,sc,cc; /* difference in polar angles of obj and vwpt */ + double d,sd,cd; /* angular separation of object and viewpoint */ + double r; /* proportion of d to desired field of view */ + double se, ce; /* angle between (vwpt,pole) and (vwpt,obj) */ + + + a = PI/2 - sv_altdec; + if (sv_altdec == last_sv_altdec) { + sa = last_sa; + ca = last_ca; + } else { + last_sv_altdec = sv_altdec; + last_sa = sa = sin(a); + last_ca = ca = cos(a); + } + + b = PI/2 - altdec; + sb = sin(b); + cb = cos(b); + + c = aa_mode ? azra - sv_azra : sv_azra - azra; + cc = cos(c); + + cd = ca*cb + sa*sb*cc; + if (cd > 1.0) cd = 1.0; + if (cd < -1.0) cd = -1.0; + d = acos(cd); + + if (d < LOCEPS) { + *xp = sv_w/2; + *yp = sv_h/2; + return (1); + } + + r = d/(sv_vfov/2.0); + + sc = sin(c); + sd = sin(d); + se = sc*sb/sd; + *xp = (int)floor ((sv_w + sv_h*r*se)/2 + 0.5); + if (flip_lr) + *xp = sv_w - *xp; + if (a < LOCEPS) { + /* as viewpoint approaches N pole, e approaches PI - c */ + ce = -cc; + } else if (a > PI - LOCEPS) { + /* as viewpoint approaches S pole, e approaches c */ + ce = cc; + } else { + /* ok (we've already checked for small d) */ + ce = (cb - cd*ca)/(sd*sa); + } + *yp = (int)floor ((sv_h - sv_h*r*ce)/2 + 0.5); + if (flip_tb) + *yp = sv_h - *yp; + + if (d > PI/2) + return (0); +#undef LOCEPS + } + + /* maintain angles but reign in huge values */ + if (abs(*xp) > MAXXW || abs(*yp) > MAXXW) { + if (abs(*xp) > abs(*yp)) { + /* set x to MAXXW and scale y to maintain ratio */ + *yp = (int)floor((MAXXW/(double)abs(*xp))*(*yp) + .5); + *xp = *xp >= 0 ? MAXXW : -MAXXW; + } else { + /* set y to MAXXW and scale x to maintain ratio */ + *xp = (int)floor((MAXXW/(double)abs(*yp))*(*xp) + .5); + *yp = *yp >= 0 ? MAXXW : -MAXXW; + } + } + + /* in any coord system, return whether on screen */ + return(*xp >= 0 && *xp < sv_w && *yp >= 0 && *yp < sv_h); +} + +/* compute azra/altdec loc of a point at x/y as viewed from sv_azra/sv_altdec. + * if displaying a FITS image, use it directly. + * return true if x/y is valid, else 0. + */ +static int +sv_unloc (x, y, altdecp, azrap) +int x, y; /* X coords within window */ +double *altdecp;/* angle up from spherical equator, such as alt or dec; rad */ +double *azrap; /* angle around spherical pole, such as az or ra; rad */ +{ + /* basic bounds check */ + if (x < 0 || x >= sv_w || y < 0 || y >= sv_h) + return (0); + + if (si_ison()) { + FImage *fip = si_getFImage(); + double ix, iy; + sv_win2im (x, y, &ix, &iy); + if (xy2RADec (fip, ix, iy, azrap, altdecp) < 0) + return (0); + } else if (cyl_proj) { + double scale = sv_vfov/sv_h; + + if (aa_mode != flip_lr) /* a/a opposite of r/d */ + x = sv_w - x; + if (flip_tb) + y = sv_h - y; + + *altdecp = sv_altdec - scale*(y - sv_h/2); + *azrap = sv_azra - scale*(x - sv_w/2); + if (*altdecp > PI/2) { + *altdecp = PI - *altdecp; + *azrap += PI; + } + if (*altdecp < -PI/2) { + *altdecp = -PI - *altdecp; + *azrap += PI; + } + range (azrap, 2*PI); + } else { +#define UNLOCEPS (1e-7) /* sufficiently close to pole to not know az/ra; rads */ + double a,sa,ca; /* angle from viewpoint to pole */ + double r; /* distance from center to object, pixels */ + double d,sd,cd; /* distance from center to object, rads */ + double se,ce; /* angle between (vwpt,pole) and (vwpt,obj) */ + double b,sb,cb; /* angle from object to pole */ + double c, cc; /* difference in polar angles of obj and vwpt */ + int x0 = sv_w/2, y0 = sv_h/2; /* screen center */ + + /* undo flipping first in case either sv_[wh] is odd ... */ + if (flip_lr) + x = sv_w - x; + if (flip_tb) + y = sv_h - y; + + /* then check for center -- avoids cases where r == 0 */ + if (x == x0 && y == y0) { + *altdecp = sv_altdec; + *azrap = sv_azra; + return (1); + } + + a = PI/2 - sv_altdec; + sa = sin(a); + ca = cos(a); + + r = sqrt ((double)((x-x0)*(x-x0) + (y-y0)*(y-y0))); + d = r*sv_vfov/sv_h; + if (fabs(d) >= PI/2) + return (0); /* outside sphere */ + sd = sin(d); + cd = cos(d); + ce = (y0 - y)/r; + se = (x - x0)/r; + cb = ca*cd + sa*sd*ce; + b = acos(cb); + *altdecp = PI/2 - b; + + /* find c, the polar angle between viewpoint and object */ + if (a < UNLOCEPS) { + /* as viewpoint approaches N pole, c approaches PI - e */ + c = acos(-ce); + } else if (a > PI - UNLOCEPS) { + /* as viewpoint approaches S pole, c approaches e */ + c = acos(ce); + } else if (b < UNLOCEPS || b > PI - UNLOCEPS) { + /* as object approaches either pole, c becomes arbitary */ + c = 0.0; + } else { + sb = sin(b); + cc = (cd - ca*cb)/(sa*sb); + if (cc < -1.0) cc = -1.0; /* heh man, it happens */ + if (cc > 1.0) cc = 1.0; /* yah man, it happens */ + c = acos (cc); /* 0 .. PI; next step checks if c + * should be > PI + */ + } + if (se < 0.0) /* if e > PI */ + c = PI + (PI - c); /* so is c */ + + if (aa_mode) + *azrap = sv_azra + c; + else + *azrap = sv_azra - c; + range (azrap, 2*PI); + +#undef UNLOCEPS + } + + return (1); +} + +/* if aa + * altdec/azra are alt/az and return dec/ra + * else + * altdec/azra are dec/ra and return alt/az + */ +void +sv_other (double altdec, double azra, int aa, double *altdecp, double *azrap) +{ + Now *np = mm_get_now(); + double tmp; + + if (aa) + sv_fullwhere (np, altdec, azra, aa, &tmp, &tmp, azrap, altdecp); + else + sv_fullwhere (np, altdec, azra, aa, altdecp, azrap, &tmp, &tmp); +} + +/* given an altdec/azra pair (decided by aa), find all coords for our current + * location. all values will be topocentric if we are currently in Alt/Az + * display mode, else all values will be geocentric. + */ +static void +sv_fullwhere (np, altdec, azra, aa, altp, azp, rap, decp) +Now *np; +double altdec, azra; +int aa; +double *altp, *azp; +double *rap, *decp; +{ + double ha; + double lst; + + now_lst (np, &lst); + lst = hrrad(lst); + + if (aa) { + /* need to make the ra/dec entries */ + *altp = altdec; + *azp = azra; + unrefract (pressure, temp, altdec, &altdec); + aa_hadec (lat, altdec, azra, &ha, decp); + *rap = lst - ha; + range (rap, 2*PI); + if (epoch != EOD) + ap_as (np, epoch, rap, decp); + } else { + /* need to make the alt/az entries */ + double ra, dec; + + ra = *rap = azra; + dec = *decp = altdec; + if (epoch != EOD) + as_ap (np, epoch, &ra, &dec); + ha = lst - ra; + hadec_aa (lat, ha, dec, altp, azp); + refract (pressure, temp, *altp, altp); + } +} + +/* aux info for labeling */ + +/* one per label category, order sets position priority */ +typedef enum +{ + DrawLblFirst = 0, + LBLFS = DrawLblFirst, + LBLDS, + LBLST, + LBLSS, /* last so gets drawn last */ + DrawLblNb /* Number of label categories */ +} DrawLbl; + +/* one per object drawn on screen */ +typedef struct { + Obj *op; /* Obj to draw */ + int x, y, d; /* x,y, diam */ + GC gc; /* GC */ + int lbl; /* DrawLbl category */ +} OneObj; + +/* one per category */ +typedef struct +{ + OneObj *objlist; /* list of objects on screen */ + int objlistsize; /* total room */ + int objlistnb; /* n in use */ +} OneObjList; + +/* given two LBLSS OneObj* compare by decreasing edist, qsort-style */ +static int +draw_edist_cmpf (const void *v1, const void *v2) +{ + OneObj *oop1 = (OneObj*)v1; + OneObj *oop2 = (OneObj*)v2; + return (oop1->op->s_edist > oop2->op->s_edist ? -1 : 1); +} + +/* given two OneObj* compare by increasing numeric mag, qsort-style */ +static int +draw_mag_cmpf (const void *v1, const void *v2) +{ + OneObj *oop1 = (OneObj*)v1; + OneObj *oop2 = (OneObj*)v2; + return (get_mag(oop1->op) < get_mag(oop2->op) ? -1 : 1); +} + + +/* decide which side to draw label */ +static int +labelSide(OneObj *oop, Region lr, int cw, int ch, XRectangle *xrp, int lblflags) +{ + int d, lx, rx, y, w, h; + int prefl; + + /* find label size. TODO: use exact same as draw_label() */ + d = oop->d/3; /* ~d/(2*sqrt2)) */ + w = 0; + if (lblflags & OBJF_MLABEL) + w += cw * 3; + if (lblflags & OBJF_NLABEL) + w += cw * strlen (oop->op->o_name); + h = ch; + lx = oop->x - w - d; + rx = oop->x + d; + y = oop->y - d - ch; + + /* use preferred side unless it overlaps and opposite side does not */ + prefl = (oop->op->o_flags & OBJF_LLABEL); + if (XRectInRegion (lr, prefl?lx:rx, y, w, h) != RectangleOut && + XRectInRegion (lr, prefl?rx:lx, y, w, h) == RectangleOut) + prefl = !prefl; + + /* assign desired region */ + xrp->y = y; + xrp->width = w; + xrp->height = h; + if (prefl) { + xrp->x = lx; + lblflags &= ~OBJF_RLABEL; + lblflags |= OBJF_LLABEL; + } else { + xrp->x = rx; + lblflags &= ~OBJF_LLABEL; + lblflags |= OBJF_RLABEL; + } + + return (lblflags); +} + +/* draw all visible objects */ +static void +draw_allobjs (dsp, win) +Display *dsp; +Drawable win; +{ +#define NOPMEM 4096 + OneObjList oplist[DrawLblNb]; /* objects on screen, by category */ + OneObjList *catlist; /* Object list for one category */ + int nwant=0, nlbl=0; /* n wanted labeled, n so far */ + DBScan dbs; /* db scan context */ + int lblflags=0; /* how to label current category */ + int cw, ch; /* char w and h */ + int dir, asc, des; /* char dir, ascent and descent */ + XCharStruct xcs; /* char info */ + Region lr; /* all labels in one region */ + DrawLbl lbl; + OneObj *oop; + Obj *op; + int i; + int d; + + /* Initialize each list */ + for (lbl = DrawLblFirst; lbl < DrawLblNb; lbl++ ) { + oplist[lbl].objlist = (OneObj*) malloc (1); /* seed for realloc */ + oplist[lbl].objlistsize = 0; + oplist[lbl].objlistnb = 0; + } + + /* go through the database and find what we want to display */ + for (db_scaninit(&dbs, ALLM, want_fs ? fldstars : NULL, nfldstars); + (op = db_scan(&dbs)) != NULL; ) { + int x, y; + + if (!sv_dbobjloc(op, &x, &y, &d)) + op->o_flags &= ~OBJF_ONSCREEN; + else { + op->o_flags |= OBJF_ONSCREEN; + + /* Determine object type */ + if (op->o_flags & FLDSTAR) + lbl = LBLFS; + else if (is_ssobj (op)) + lbl = LBLSS; + else if (is_deepsky (op)) + lbl = LBLDS; + else + lbl = LBLST; + + /* Fill list according to category */ + catlist = &oplist[lbl]; + + /* expand list if need more room */ + if (catlist->objlistnb >= catlist->objlistsize) { + catlist->objlistsize += NOPMEM; + catlist->objlist = (OneObj*) realloc (catlist->objlist, + catlist->objlistsize*sizeof(OneObj)); + } + + /* find info for this obj once */ + oop = &catlist->objlist[catlist->objlistnb++]; + memset (oop, 0, sizeof(*oop)); + oop->op = op; + oop->x = x; + oop->y = y; + oop->d = d; + objGC (op, d, &oop->gc); + oop->lbl = lbl; + } + } + + /* Sort only solar system objects by distance */ + qsort (oplist[LBLSS].objlist, oplist[LBLSS].objlistnb, sizeof(OneObj), + draw_edist_cmpf); + + /* draw objects by decreasing distance from earth */ + for (lbl = DrawLblFirst; lbl < DrawLblNb; lbl++) { + catlist = &oplist[lbl]; + + for (i = 0; i < catlist->objlistnb; i++) { + oop = &catlist->objlist[i]; + sv_draw_obj (dsp, win, oop->gc, oop->op, oop->x, oop->y, oop->d, + justdots); + } + } + sv_draw_obj (dsp, win, (GC)0, NULL, 0, 0, 0, 0); /* flush */ + + /* get rough char size */ + XTextExtents (sv_pf, "A", 1, &dir, &asc, &des, &xcs); + cw = xcs.width; + ch = xcs.ascent; + + /* init label regions */ + lr = XCreateRegion(); + + /* label all persistent and n brightest per category */ + for (lbl = DrawLblFirst; lbl < DrawLblNb; lbl++ ) { + switch (lbl) { + case LBLST: + XmScaleGetValue (lbl_bst_w, &nwant); + lblflags = lbl_lst; + break; + case LBLDS: + XmScaleGetValue (lbl_bds_w, &nwant); + lblflags = lbl_lds; + break; + case LBLFS: + XmScaleGetValue (lbl_bfs_w, &nwant); + lblflags = lbl_lfs; + break; + case LBLSS: + XmScaleGetValue (lbl_bss_w, &nwant); + lblflags = lbl_lss; + break; + case DrawLblNb: + break; /* for lint */ + } + nlbl = 0; + + catlist = &oplist[lbl]; + + qsort (catlist->objlist, catlist->objlistnb, sizeof(OneObj), + draw_mag_cmpf); + + for (i = 0; i < catlist->objlistnb; i++) { + oop = &catlist->objlist[i]; + op = oop->op; + + if ((op->o_flags & OBJF_PERSLB) || + ((lblflags&(OBJF_NLABEL|OBJF_MLABEL)) + && nlbl++ < nwant)) { + XRectangle xr; + Region tmpr; + + /* draw on best side */ + lblflags = labelSide (oop, lr, cw, ch, &xr, lblflags); + draw_label (win, oop->gc, op, lblflags|op->o_flags, oop->x, + oop->y, oop->d); + + /* add label to region */ + tmpr = XCreateRegion(); + XUnionRectWithRegion (&xr, lr, tmpr); + XDestroyRegion (lr); + lr = tmpr; + } + } + + /* This list is not needed any more */ + free (catlist->objlist) ; + } + + XDestroyRegion (lr); + +#undef NOPMEM +} + +/* choose a nice step size for about MAXGRID steps for angular range a. + * *dp will be step size, *np will be number of steps to include full range. + * all angles in rads. + */ +static void +niceStep (a, dp, np) +double a; +double *dp; +int *np; +{ + static int nicesecs[] = { + 1, 2, 5, 10, 20, 30, + 60, 120, 300, 600, 1200, 1800, + 3600, 7200, 18000, 36000, 72000, 108000, + 1296000 /* safety net */ + }; + double as = raddeg(a)*3600.0; + double d; + int i; + + for (i = 0; i < XtNumber(nicesecs); i++) + if ((int)floor(as/nicesecs[i]) < MAXGRID) + break; + + d = degrad(nicesecs[i]/3600.0); + *np = (int)ceil(a/d); + *dp = d; +} + +/* draw label on grid near [x,y] */ +static void +draw_grid_label (dsp, win, gc, ad, ar, x0, y0, samesys, arlabel, dv, dh) +Display *dsp; +Window win; +GC gc; +double ad, ar; /* location known to be at intersection*/ +int x0, y0; /* location known to be at intersection*/ +int samesys; /* whether grid is in same coord system as display */ +int arlabel; /* whether want azra or altdec label */ +double dv, dh; /* altdec and azra whole grid step sizes, rads */ +{ + char buf[32]; /* coord string */ + double a; /* text rotation angle */ + int x1, y1; /* other end */ + int xc, yc; /* center pos */ + + /* comes in as display mode, we need grid mode coordinates */ + if (!samesys) + sv_other (ad, ar, !want_aagrid, &ad, &ar); + + /* want perfect grid crossing and no wrap */ + ad = dv*floor((ad+dv/2)/dv); + ar = dh*floor((ar+dh/2)/dh); + range (&ar, 2*PI); + + /* build string and move to other end one grid step away */ + if (arlabel) { + fs_sexa (buf, want_aagrid ? raddeg(ar) : radhr(ar), 3, 3600); + ad += (ad > 0) ? -dv : dv; /* back off from poles */ + } else { + fs_sexa (buf, raddeg(ad), 3, 3600); + ar -= dh; /* not down the center */ + } + + /* back to display mode to get screen coords of other end */ + if (!samesys) + sv_other (ad, ar, want_aagrid, &ad, &ar); + if (!sv_loc (ad, ar, &x1, &y1)) + return; + + /* rotate so text is never upside down */ + a = raddeg(atan2((double)y0-y1, (double)(x1==x0?1:x1-x0))); + if (a > 90) + a -= 180; + if (a < -90) + a += 180; + + /* center label between parallels */ + xc = (x0+x1)/2; + yc = (y0+y1)/2; + XPSRotDrawAlignedString (dsp, sv_rf, a, 1.0, win, gc,xc,yc,buf,BCENTRE); +} + +/* draw a nice grid, with labels */ +static void +draw_grid(dsp, win, gc) +Display *dsp; +Window win; +GC gc; +{ + XSegment xsegs[50], *xs;/* segments cache */ + int samesys; /* whether grid is in same coord sys as dsp */ + double altdec, azra; /* center in grid coords */ + double dv, dh; /* v and h step size in grid coords */ + double pangle; /* grid coord polar angle */ + int seepole; /* whether can see pole in grid coord sys */ + double polegap; /* don't crowd closer than this to pole */ + int nvt, nht; /* num v and h steps */ + char msg[128]; + int i, j; + + /* decide whether grid is in different coord system than display mode */ + samesys = (!!want_aagrid == !!aa_mode); + + /* find center and whether pole is visible in grid system */ + if (samesys) { + altdec = sv_altdec; + azra = sv_azra; + seepole = sv_loc (altdec >= 0.0 ? PI/2 : -PI/2, 0.0, &i, &j); + } else { + double h, v; + sv_other (sv_altdec, sv_azra, aa_mode, &altdec, &azra); + sv_other (PI/2, 0.0, want_aagrid, &v, &h); + seepole = sv_loc (v, h, &i, &j); + if (!seepole) { + sv_other (-PI/2, 0.0, want_aagrid, &v, &h); + seepole = sv_loc (v, h, &i, &j); + } + } + + /* grid's polar angle: 2*PI if pole visible, else scales by 1/cos */ + if (seepole || fabs(altdec) >= PI/2) + pangle = 2*PI; + else + pangle = sv_dfov/cos(altdec) * 1.2; /* fudge */ + if (pangle > 2*PI) + pangle = 2*PI; + + /* pick size and number of steps, either from user or automatically */ + if (want_autogrid) { + if (want_aagrid) + niceStep (pangle, &dh, &nht); + else { + /* do RA in hours */ + niceStep (pangle/15.0, &dh, &nht); + dh *= 15.0; + } + niceStep (sv_dfov, &dv, &nvt); + } else { + char *str; + + str = XmTextFieldGetString (hgrid_w); + f_scansexa (str, &dh); + XtFree (str); + dh = want_aagrid ? degrad(dh) : hrrad(dh); + if (dh > pangle/2) { + xe_msg (1, "Horizontal grid spacing must be < FOV/2"); + return; + } + nht = (int)floor(pangle/dh + 0.5) + 1; /* inclusive */ + + str = XmTextFieldGetString (vgrid_w); + f_scansexa (str, &dv); + XtFree (str); + dv = degrad(dv); + if (dv > sv_dfov/2) { + xe_msg (1, "Vertical grid spacing must be < FOV/2"); + return; + } + nvt = (int)floor(sv_dfov/dv + 0.5) + 1; /* inclusive */ + } + + /* round center to nearest whole multiple of step size */ + altdec -= fmod (altdec, dv); + azra -= fmod (azra, dh); + + /* report */ + fs_sexa (msg, raddeg(dv), 3, 3600); + XmTextFieldSetString (vgrid_w, msg); + fs_sexa(msg, want_aagrid ? raddeg(dh) : radhr(dh), 3, 3600); + XmTextFieldSetString (hgrid_w, msg); + gridStepLabel(); + + /* set up max eq dist, dv down then seg size up towards PI/2 */ + polegap = dv*floor(PI/2/dv - dv/NGSEGS/2) + dv/NGSEGS/2; + + /* do the vertical lines (constant ra or az): + * for each horizontal tick mark + * for each vertical tick mark, by NGSEGS + * compute coord on screen + * if we've at least 2 pts now + * connect the points with what is visible within the circle. + */ + nht*=2; + nvt*=2; + for (i = -nht/2; i <= nht/2; i++) { + double h0 = azra + i*dh; + int before = 0; + int vis1 = 0, vis2; + int x1 = 0, y1 = 0, x2, y2; + xs = xsegs; + for (j = -NGSEGS*nvt/2; j <= NGSEGS*nvt/2; j++) { + double h = h0, v = altdec + j*dv/NGSEGS; + if (fabs(v) > polegap) + continue; + if (!samesys) + sv_other (v, h0, want_aagrid, &v, &h); + vis2 = sv_loc(v,h,&x2,&y2); /* hzn done with clipping */ + if (before++ && (vis1 || vis2)) { + int sx1, sy1, sx2, sy2; + + /* move label away from pole and a little off center */ + if (want_gridlbl && j == (altdec<0?1:-1)*NGSEGS) + draw_grid_label(dsp,win,gc,v,h,x2,y2,samesys,1,dv,dh); + + /* draw segment if visible */ + if (segisvis(x1, y1, x2, y2, &sx1, &sy1, &sx2, &sy2)) { + xs->x1 = sx1; xs->y1 = sy1; + xs->x2 = sx2; xs->y2 = sy2; + if (++xs == &xsegs[XtNumber(xsegs)]) { + split_segs (dsp, win, gc, xsegs, xs - xsegs); + xs = xsegs; + } + } + } + x1 = x2; + y1 = y2; + vis1 = vis2; + } + if (xs > xsegs) + split_segs (dsp, win, gc, xsegs, xs - xsegs); + } + + /* do the horizontal lines (constant dec or alt): + * for each vertical tick mark + * for each horizontal tick mark, by NGSEGS + * compute coord on screen + * if we've at least 2 pts now + * connect the points with what is visible within the circle. + */ + for (j = -nvt/2; j <= nvt/2; j++) { + double v0 = altdec + j*dv; + int before = 0; + int vis1 = 0, vis2; + int x1 = 0, y1 = 0, x2, y2; + xs = xsegs; + for (i = -NGSEGS*nht/2; i <= NGSEGS*nht/2; i++) { + double v = v0, h = azra + i*dh/NGSEGS; + if (fabs(v) > polegap) + continue; + if (!samesys) + sv_other (v, h, want_aagrid, &v, &h); + vis2 = sv_loc(v,h,&x2,&y2); /* hzn down with clipping */ + if (before++ && (vis1 || vis2)) { + int sx1, sy1, sx2, sy2; + + /* draw label once a little off center */ + if (want_gridlbl && i == -NGSEGS) + draw_grid_label(dsp,win,gc,v,h,x2,y2,samesys,0,dv,dh); + + /* draw segment if visible */ + if (segisvis(x1, y1, x2, y2, &sx1, &sy1, &sx2, &sy2)) { + xs->x1 = sx1; xs->y1 = sy1; + xs->x2 = sx2; xs->y2 = sy2; + if (++xs == &xsegs[XtNumber(xsegs)]) { + split_segs (dsp, win, gc, xsegs, xs - xsegs); + xs = xsegs; + } + } + } + x1 = x2; + y1 = y2; + vis1 = vis2; + } + if (xs > xsegs) + split_segs (dsp, win, gc, xsegs, xs - xsegs); + } +} + +/* draw the horizon map. + */ +static void +draw_hznmap (np, dsp, win, gc) +Now *np; +Display *dsp; +Window win; +GC gc; +{ + if (cyl_proj && aa_mode) + draw_hznac (dsp, win, gc); + else + draw_hznother (dsp, win, gc); +} + +/* draw the filled horizon in aa_mode && cyl_proj. + * this one is easy because the path to infinity is always parallel to the + * vertical dimension of the screen. + */ +static void +draw_hznac (dsp, win, gc) +Display *dsp; +Window win; +GC gc; +{ +#define UNIVLEN 2 /* points for wrap around the universe */ + XPoint *xpts; + short top; + int x; + + /* get points array, contour plus fill pattern */ + xpts = (XPoint *) XtMalloc ((sv_w+UNIVLEN) * sizeof(XPoint)); + + /* walk across the screen */ + for (x = 0; x < sv_w; x++) { + double alt, az, halt; + int hx, hy; + + sv_unloc (x, sv_h/2, &alt, &az); + halt = hznAlt (az); + if (!sv_loc (halt, az, &hx, &hy)) + hy = hy < 0 ? 0 : sv_h; + xpts[x].x = x; + xpts[x].y = hy; + } + + /* add path around top (or bottom if flipped) */ + top = (short)(flip_tb ? 0 : sv_h); + xpts[x].x = sv_w; xpts[x].y = top; x++; + xpts[x].x = 0; xpts[x].y = top; x++; + + /* black fill */ + if (want_clipping) { + if (XPSDrawing()) { + XSetForeground (dsp, gc, WhitePixel(dsp, DefaultScreen(dsp))); + XPSFillPolygon (dsp, win, gc, xpts, sv_w+UNIVLEN, Complex, + CoordModeOrigin); + } + XSetForeground (dsp, gc, BlackPixel(dsp, DefaultScreen(dsp))); + XFillPolygon (dsp, win, gc, xpts, sv_w+UNIVLEN, Complex, + CoordModeOrigin); + } + + /* crisp boundary */ + draw_hznProfile (dsp, win, gc); + + /* finished */ + XtFree ((char *)xpts); +#undef UNIVLEN +} + +/* draw the filled horizon in !aa_mode && cyl_proj. + * if !cyl_proj then only the horizon border is drawn + */ +static void +draw_hznother (dsp, win, gc) +Display *dsp; +Window win; +GC gc; +{ +#define UNIVLEN 2 /* points for wrap around the universe */ + int wx, lx; + int sv_w_eff = sv_w; + XPoint *xpts; + short top; + int nprofile; + int npts; + int i; + + /* get n entries in profile, skip if none */ + nprofile = hznNProfile(); + if (!nprofile) + return; + + if (!cyl_proj || !want_clipping) { + /* crisp boundary */ + draw_hznProfile (dsp, win, gc); + return; + } + + /* calculate effective screen width */ + if (sv_hfov > 2 * PI) + sv_w_eff = (int)((2 * PI / sv_hfov) * sv_w); + + /* get array for contour */ + xpts = (XPoint *) XtMalloc (((5*nprofile)+UNIVLEN) * sizeof(XPoint)); + + /* top/left position for path completion */ + + /* find points around entire horizon */ + wx = -1; + lx = 0; + npts = 0; + for (i = 0; i < nprofile; i++) { + double altdec, azra; + int x, y; + + /* find x,y */ + hznProfile (i, &altdec, &azra); + if (!aa_mode) + sv_other (altdec, azra, 1, &altdec, &azra); + sv_loc (altdec, azra, &x, &y); + + /* find the maximum right pixel */ + if (x > wx) + wx = x; + + /* collect and mind the wrap */ + xpts[npts].x = x; + xpts[npts].y = y; + npts++; + + if (npts > 1 && abs(lx-x) > sv_w_eff/2) { + /* wrapped */ + if (!flip_lr) { + x = x + wx - (sv_w - wx); + } else + { + x = x - wx + (sv_w - wx); + } + xpts[npts-1].x = x; + } + + lx = x; + } + + /* make the horizon wider */ + memcpy(&xpts[npts], xpts, nprofile * sizeof(XPoint)); + memcpy(&xpts[2*npts], xpts, nprofile * sizeof(XPoint)); + memcpy(&xpts[3*npts], xpts, nprofile * sizeof(XPoint)); + memcpy(&xpts[4*npts], xpts, nprofile * sizeof(XPoint)); + + int xshift = wx - (sv_w - wx); + if (flip_lr) { + for (i = 0; i < nprofile; i++) { + xpts[i].x = xpts[i].x + 2 * xshift; + xpts[i+npts].x = xpts[i+npts].x + xshift; + xpts[i+3*npts].x = xpts[i+3*npts].x - xshift; + xpts[i+4*npts].x = xpts[i+4*npts].x - 2 * xshift; + } + } else + { + for (i = 0; i < nprofile; i++) { + xpts[i].x = xpts[i].x - 2 * xshift; + xpts[i+npts].x = xpts[i+npts].x - xshift; + xpts[i+3*npts].x = xpts[i+3*npts].x + xshift; + xpts[i+4*npts].x = xpts[i+4*npts].x + 2 * xshift; + } + } + npts = 5 * npts; + + /* add path around top (or bottom if flipped) */ + top = (short)(flip_tb ? 0 : sv_h); + xpts[npts].x = xpts[npts-1].x; xpts[npts].y = top; npts++; + xpts[npts].x = xpts[0].x; xpts[npts].y = top; npts++; + + /* black fill */ + if (XPSDrawing()) { + XSetForeground (dsp, gc, WhitePixel(dsp, DefaultScreen(dsp))); + XPSFillPolygon (dsp, win, gc, xpts, npts, Complex, CoordModeOrigin); + } + XSetForeground (dsp, gc, BlackPixel(dsp, DefaultScreen(dsp))); + XFillPolygon (dsp, win, gc, xpts, npts, Complex, CoordModeOrigin); + + /* finished */ + XtFree ((char *)xpts); + + /* crisp boundary */ + draw_hznProfile (dsp, win, gc); +#undef UNIVLEN +} + +/* draw the horizon profile in any mode */ +static void +draw_hznProfile (dsp, win, gc) +Display *dsp; +Window win; +GC gc; +{ + int lx, ly, lv; + int sv_w_eff = sv_w; + XPoint *xpts; + int nprofile; + int npts; + int i; + + /* get n entries in profile, skip if none */ + nprofile = hznNProfile(); + if (!nprofile) + return; + + /* calculate effective screen width */ + if (sv_hfov > 2 * PI) + sv_w_eff = (int)((2 * PI / sv_hfov) * sv_w); + + /* get array for contour */ + xpts = (XPoint *) XtMalloc (nprofile * sizeof(XPoint)); + + /* find points around entire horizon, draw at exit/entry */ + XSetForeground (dsp, gc, hzn_p); + lx = ly = lv = 0; + npts = 0; + for (i = 0; i < nprofile; i++) { + double altdec, azra; + int x, y, v; + + /* find x,y and whether visible */ + hznProfile (i, &altdec, &azra); + if (!aa_mode) + sv_other (altdec, azra, 1, &altdec, &azra); + v = sv_loc (altdec, azra, &x, &y); + + /* collect and break cleanly where it exits/enters or wraps */ + xpts[npts].x = x; + xpts[npts].y = y; + npts++; + if (v || lv) { + if (v != lv && npts > 1) { + /* just became visible */ + int x1, y1, x2, y2; + if (segisvis (lx, ly, x, y, &x1, &y1, &x2, &y2)) { + xpts[npts-2].x = (short)x1; + xpts[npts-2].y = (short)y1; + xpts[npts-1].x = (short)x2; + xpts[npts-1].y = (short)y2; + } else + npts -= 2; + } + if (!v && lv) { + /* just went non-visible so draw and restart */ + XPSDrawLines (dsp, win, gc, xpts, npts,CoordModeOrigin); + npts = 0; + } + if (npts > 1 && abs(lx-x) > sv_w_eff/2) { + /* wrapped */ + XPSDrawLines (dsp, win, gc, xpts, npts-1, CoordModeOrigin); + xpts[0] = xpts[npts-1]; + npts = 1; + } + } else + npts = 1; + + lx = x; + ly = y; + lv = v; + } + + /* remaining boundary */ + XPSDrawLines (dsp, win, gc, xpts, npts, CoordModeOrigin); + + /* finished */ + XtFree ((char *)xpts); +} + +/* return whether op is visible with respect to horizon choices */ +int +sv_hznOpOk (Obj *op) +{ + return (!want_clipping || !want_hznmap || op->s_alt >= hznAlt(op->s_az)); +} + +/* draw compass */ +static void +draw_compass (dsp, win) +Display *dsp; +Drawable win; +{ +#define COMPASSHH 25 /* compass half-height, pixels */ + XCharStruct xcs; /* char metrics */ + int dir, asc, des; /* more char metrics */ + int chh, chw; /* char half-height and half-width */ + double minpole; /* min pole distance, rads */ + int dxu=0, dyu=0; /* step up */ + int dxr=0, dyr=0; /* step right */ + int dxn=0, dyn=0; /* step north */ + int dxe=0, dye=0; /* step east */ + int xaa0=0, yaa0=0; /* alt/az cross center */ + int xrd0=0, yrd0=0; /* ra/dec cross center */ + int x0, y0; /* image center */ + double step; /* COMPASSHH in rads */ + double altdec, azra; /* center in opposite coords */ + int aaok, rdok; /* whether ok, ie, away from pole */ + double r; /* normalization radius */ + + /* basic size based upon font */ + XSetFont (dsp, sv_strgc, sv_pf->fid); + XSetForeground (dsp, sv_strgc, annot_p); + XTextExtents (sv_pf, "E", 1, &dir, &asc, &des, &xcs); + chh = xcs.ascent/2; + chw = xcs.width/2; + + /* find step north, east, up and right directions */ + sv_other (sv_altdec, sv_azra, aa_mode, &altdec, &azra); + step = sv_dfov/8; + minpole = PI/2-1.1*step; /* don't step over pole */ + x0 = sv_w/2; + y0 = sv_h/2; + if (aa_mode) { + aaok = (fabs(sv_altdec) < minpole); + if (aaok) { + /* U-D always vertical */ + dxu = 0; + dyu = flip_tb ? COMPASSHH : -COMPASSHH; + + /* L-R always horizontal */ + dxr = flip_lr ? -COMPASSHH/2 : COMPASSHH/2; + dyr = 0; + + xaa0 = sv_w - 3*COMPASSHH/2; + yaa0 = sv_h - 3*COMPASSHH/2; + } + + rdok = (fabs(altdec) < minpole); + if (rdok) { + double a, b; + int x, y; + + sv_other (altdec+step, azra, !aa_mode, &a, &b); + sv_loc (a, b, &x, &y); + dxn = x - x0; + dyn = y - y0; + r = sqrt((double)dxn*dxn + (double)dyn*dyn); + dxn = (int)floor(COMPASSHH * dxn / r + 0.5); + dyn = (int)floor(COMPASSHH * dyn / r + 0.5); + + /* E-W always right angles to N-S */ + dxe = flip_tb ^ flip_lr ? -dyn/2 : dyn/2; + dye = flip_tb ^ flip_lr ? dxn/2 : -dxn/2; + + xrd0 = sv_w - 9*COMPASSHH/2; + yrd0 = sv_h - 3*COMPASSHH/2; + } + } else { + int x, y; + + rdok = (fabs(sv_altdec) < minpole); + if (rdok) { + if (si_ison()) { + sv_loc (sv_altdec+step, sv_azra, &x, &y); + dxn = x - x0; + dyn = y - y0; + r = sqrt((double)dxn*dxn + (double)dyn*dyn); + dxn = (int)floor(COMPASSHH * dxn / r + 0.5); + dyn = (int)floor(COMPASSHH * dyn / r + 0.5); + + sv_loc (sv_altdec, sv_azra+step/cos(sv_altdec), &x, &y); + dxe = (x > x0) ? abs(dyn)/2 : -abs(dyn)/2; + dye = (y > y0) ? abs(dxn)/2 : -abs(dxn)/2; + } else { + /* N-S always vertical */ + dxn = 0; + dyn = flip_tb ? COMPASSHH : -COMPASSHH; + + /* E-W always horizontal */ + dxe = flip_lr ? COMPASSHH/2 : -COMPASSHH/2; + dye = 0; + } + + xrd0 = sv_w - 3*COMPASSHH/2; + yrd0 = sv_h - 3*COMPASSHH/2; + } + + aaok = (fabs(altdec) < minpole); + if (aaok) { + double r, d; + + sv_other (altdec+step, azra, !aa_mode, &r, &d); + sv_loc (r, d, &x, &y); + dxu = x - x0; + dyu = y - y0; + r = sqrt((double)dxu*dxu + (double)dyu*dyu); + dxu = (int)floor(COMPASSHH * dxu / r + 0.5); + dyu = (int)floor(COMPASSHH * dyu / r + 0.5); + + if (si_ison()) { + sv_other (altdec, azra+step/cos(altdec), !aa_mode,&r,&d); + sv_loc (r, d, &x, &y); + dxr = x - x0; + dyr = y - y0; + r = sqrt((double)dxr*dxr + (double)dyr*dyr); + dxr = (int)floor(COMPASSHH/2 * dxr / r + 0.5); + dyr = (int)floor(COMPASSHH/2 * dyr / r + 0.5); + } else { + /* R-L always at right angles to U-D */ + dxr = flip_tb ^ flip_lr ? dyu/2 : -dyu/2; + dyr = flip_tb ^ flip_lr ? -dxu/2 : dxu/2; + } + + xaa0 = sv_w - 9*COMPASSHH/2; + yaa0 = sv_h - 3*COMPASSHH/2; + } + } + + /* draw each rose, if known */ + if (aaok) { + XPSDrawLine (dsp,win,sv_strgc,xaa0-dxu,yaa0-dyu,xaa0+dxu,yaa0+dyu); + r = sqrt ((double)dxu*dxu + (double)dyu*dyu); + r = (r + 3*chh)/r; + dxu = (int)floor(r*dxu + 0.5); + dyu = (int)floor(r*dyu + 0.5); + XPSDrawString (dsp, win, sv_strgc, xaa0+dxu-chw,yaa0+dyu+chh,"Z",1); + + XPSDrawLine (dsp,win,sv_strgc,xaa0-dxr,yaa0-dyr,xaa0+dxr,yaa0+dyr); + r = sqrt ((double)dxr*dxr + (double)dyr*dyr); + r = (r + 3*chh)/r; + dxr = (int)floor(r*dxr + 0.5); + dyr = (int)floor(r*dyr + 0.5); + XPSDrawString (dsp, win, sv_strgc, xaa0+dxr-chw,yaa0+dyr+chh,"R",1); + } + + if (rdok) { + XPSDrawLine (dsp,win,sv_strgc,xrd0-dxn,yrd0-dyn,xrd0+dxn,yrd0+dyn); + r = sqrt ((double)dxn*dxn + (double)dyn*dyn); + r = (r + 3*chh)/r; + dxn = (int)floor(r*dxn + 0.5); + dyn = (int)floor(r*dyn + 0.5); + XPSDrawString (dsp, win, sv_strgc, xrd0+dxn-chw,yrd0+dyn+chh,"N",1); + + XPSDrawLine (dsp,win,sv_strgc,xrd0-dxe,yrd0-dye,xrd0+dxe,yrd0+dye); + r = sqrt ((double)dxe*dxe + (double)dye*dye); + r = (r + 3*chh)/r; + dxe = (int)floor(r*dxe + 0.5); + dye = (int)floor(r*dye + 0.5); + XPSDrawString (dsp, win, sv_strgc, xrd0+dxe-chw,yrd0+dye+chh,"E",1); + } +} + + +/* draw the ecliptic */ +static void +draw_ecliptic(np, dsp, win, gc) +Now *np; +Display *dsp; +Window win; +GC gc; +{ + XPoint ptcache[100]; + double elat0, elng0; /* ecliptic lat and long at center of fov */ + double elngmin, elngmax;/* ecliptic long limits */ + double ra, dec; + double altdec, azra; + double elng; + double lst; + int ncache; + int x, y; + int on, n; + + now_lst (np, &lst); + XSetFont (dsp, sv_strgc, sv_pf->fid); + XSetForeground (dsp, sv_strgc, eq_p); + + /* poles */ + + ecl_eq (mjd, PI/2, 0.0, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "NEP"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + ecl_eq (mjd, -PI/2, 0.0, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "SEP"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + + /* some points of interest on the ecliptic */ + + ecl_eq (mjd, 0.0, 0.0, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "VEq"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + ecl_eq (mjd, 0.0, PI, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "AEq"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + ecl_eq (mjd, 0.0, PI/2., &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "SS"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + ecl_eq (mjd, 0.0, -PI/2., &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "WS"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + + /* find equatorial coords of center of view */ + + if (aa_mode) { + double ha0; /* local hour angle */ + aa_hadec (lat, sv_altdec, sv_azra, &ha0, &dec); + ra = hrrad(lst) - ha0; + } else { + ra = sv_azra; + dec = sv_altdec; + } + eq_ecl (mjd, ra, dec, &elat0, &elng0); + + /* no ecliptic visible if ecliptic latitude at center of view + * is more than the window diagonal. + */ + if (fabs(elat0) >= sv_dfov) + return; + + /* worst-case elong limits is center elong += half size unless cyl */ + if (cyl_proj) { + elngmin = elng0 - PI; + elngmax = elng0 + PI; + } else { + elngmin = elng0 - sv_dfov/2.0; + elngmax = elng0 + sv_dfov/2.0; + } + + /* draw dashed line */ + ncache = 0; + on = 1; + n = 0; + for (elng = elngmin; elng <= elngmax; elng += sv_vfov/sv_h) { + + /* dashed pattern */ + if (on && n == ECL_NON) + on = 0, n = 0; + else if (!on && n == ECL_NOFF) + on = 1, n = 0; + n++; + if (!on) + continue; + + /* convert longitude along the ecliptic to ra/dec */ + ecl_eq (mjd, 0.0, elng, &azra, &altdec); + + /* if in aa mode, we need it in alt/az */ + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + + /* if visible, display point */ + if (sv_loc (altdec, azra, &x, &y)) { + XPoint *xp = &ptcache[ncache++]; + xp->x = x; + xp->y = y; + + if (ncache == XtNumber(ptcache)) { + XPSDrawPoints(dsp,win,gc,ptcache,ncache,CoordModeOrigin); + ncache = 0; + } + } + } + + if (ncache > 0) + XPSDrawPoints (dsp, win, gc, ptcache, ncache, CoordModeOrigin); +} + +/* draw the [pe]numbra, and throw in the anti-solar point too */ +static void +draw_umbra(np, dsp, win, gc) +Now *np; +Display *dsp; +Window win; +GC gc; +{ + Obj *sop, *mop; + double altdec, azra; + double asra, asdec; + int x, y; + + /* mark the far-field anti-solar point */ + sop = db_basic (SUN); + mop = db_basic (MOON); + asra = sop->s_ra + PI; + asdec = -sop->s_dec; + azra = asra; + altdec = asdec; + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + XPSDrawLine (dsp, win, gc, x-ASR, y, x+ASR, y); + XPSDrawLine (dsp, win, gc, x, y-ASR, x, y+ASR); + XPSDrawArc (dsp, win, gc, x-ASR, y-ASR, 2*ASR, 2*ASR, 0, 64*360); + } + + /* mark the umbra/penumbra. + * account for parallax if showing topocentric + */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + double ha_in, ha_out; + double lst, rho_topo; + now_lst (np, &lst); + ha_in = hrrad(lst) - asra; + rho_topo = mop->s_edist * MAU/ERAD; /* convert to earth radii */ + ta_par (ha_in, asdec, lat, elev, &rho_topo, &ha_out, &asdec); + asra -= ha_out - ha_in; + azra = asra; + altdec = asdec; + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + } + + if (sv_loc (altdec, azra, &x, &y)) { + double rsn = sop->s_edist; + double rmn = mop->s_edist; + double shadow0 = ERAD + rmn / rsn * (ERAD - SRAD); /* umbra */ + double shadow1 = ERAD + rmn / rsn * (ERAD + SRAD); /* penumbra */ + double urad = asin(shadow0/MAU/rmn); + double prad = asin(shadow1/MAU/rmn); + int upix = (int)floor(urad/(sv_vfov/sv_h) + 0.5); + int ppix = (int)floor(prad/(sv_vfov/sv_h) + 0.5); + + XPSDrawArc (dsp, win, gc, x-upix,y-upix,2*upix+1,2*upix+1,0,64*360); + XSetLineAttributes (XtD, gc, 0, LineOnOffDash, CapButt, JoinMiter); + XPSDrawArc (dsp, win, gc, x-ppix,y-ppix,2*ppix+1,2*ppix+1,0,64*360); + XSetLineAttributes (XtD, gc, 0, LineSolid, CapButt, JoinMiter); + } +} + +/* draw the equator */ +static void +draw_equator(np, dsp, win, gc) +Now *np; +Display *dsp; +Window win; +GC gc; +{ + XPoint ptcache[100]; + double alt0, az0, ra0, dec0; + double ramin, ramax; /* display limits */ + double ra; + double altdec, azra; + double lst; + int ncache; + int on, n; + int x, y; + + now_lst (np, &lst); + XSetFont (dsp, sv_strgc, sv_pf->fid); + XSetForeground (dsp, sv_strgc, eq_p); + + /* first the poles as little crosses with labels */ + azra = 0.; + altdec = PI/2.; + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "NCP"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + azra = 0.; + altdec = -PI/2.; + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "SCP"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + + /* no equator visible if dec at center of view + * is not less than half the window diagonal. + */ + sv_fullwhere (np, sv_altdec, sv_azra, aa_mode, &alt0, &az0, &ra0,&dec0); + if (fabs(dec0) >= sv_dfov/2.0) + return; + + /* worst-case limits is center += half diag size unless cyl */ + if (cyl_proj) { + ramin = ra0 - PI; + ramax = ra0 + PI; + } else { + ramin = ra0 - sv_dfov/2.0; + ramax = ra0 + sv_dfov/2.0; + } + + /* draw dashed line */ + ncache = 0; + on = 1; + n = 0; + for (ra = ramin; ra <= ramax; ra += sv_vfov/sv_h) { + double altdec = 0.0, azra = ra; + int x, y; + + /* dashed pattern */ + if (on && n == EQ_NON) + on = 0, n = 0; + else if (!on && n == EQ_NOFF) + on = 1, n = 0; + n++; + if (!on) + continue; + + /* if in aa mode, we need it in alt/az */ + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + + /* if visible, display point */ + if (sv_loc (altdec, azra, &x, &y)) { + XPoint *xp = &ptcache[ncache++]; + xp->x = x; + xp->y = y; + + if (ncache == XtNumber(ptcache)) { + XPSDrawPoints(dsp,win,gc,ptcache,ncache,CoordModeOrigin); + ncache = 0; + } + } + } + + if (ncache > 0) + XPSDrawPoints (dsp, win, gc, ptcache, ncache, CoordModeOrigin); +} + +/* draw the galactic plane and poles */ +static void +draw_galactic(np, dsp, win, gc) +Now *np; +Display *dsp; +Window win; +GC gc; +{ + XPoint ptcache[100]; + double e = epoch == EOD ? mjd : epoch; + double glat0, glng0; /* galactic lat and long at center of fov */ + double glngmin, glngmax;/* galactic long limits */ + double altdec, azra; + double ra, dec; + double glng; + double lst; + int x, y; + int ncache; + int on, n; + + now_lst (np, &lst); + XSetFont (dsp, sv_strgc, sv_pf->fid); + XSetForeground (dsp, sv_strgc, eq_p); + + /* first the poles and center as little crosses with labels */ + gal_eq (e, PI/2, 0.0, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "NGP"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + gal_eq (e, -PI/2, 0.0, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "SGP"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + gal_eq (e, 0.0, 0.0, &azra, &altdec); + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + if (sv_loc (altdec, azra, &x, &y)) { + int dir, asc, dsc; + XCharStruct all; + char buf[32]; + int l; + + XPSDrawLine(dsp, win, gc, x-GAL_W, y, x+GAL_W, y); + XPSDrawLine(dsp, win, gc, x, y-GAL_W, x, y+GAL_W); + + l = sprintf (buf, "%s", "GC"); + XQueryTextExtents (dsp, XGContextFromGC(sv_strgc), buf, l, + &dir, &asc, &dsc, &all); + XPSDrawString (dsp, win, sv_strgc, x-all.width/2, y-GAL_W-2, buf,l); + } + + /* now the equator */ + + /* find ecliptic coords of center of view */ + if (aa_mode) { + double ha0; /* local hour angle */ + aa_hadec (lat, sv_altdec, sv_azra, &ha0, &dec); + ra = hrrad(lst) - ha0; + } else { + ra = sv_azra; + dec = sv_altdec; + } + eq_gal (e, ra, dec, &glat0, &glng0); + + /* no galactic eq visible if galactic latitude at center of view + * is not less than diagonal window radius. + */ + if (fabs(glat0) >= sv_dfov/2.0) + return; + + /* worst-case glng limits is center glng += half win size unless cyl */ + if (cyl_proj) { + glngmin = glng0 - PI; + glngmax = glng0 + PI; + } else { + glngmin = glng0 - sv_dfov/2; + glngmax = glng0 + sv_dfov/2; + } + + /* draw dashed line */ + ncache = 0; + on = 1; + n = 0; + for (glng = glngmin; glng <= glngmax; glng += sv_vfov/sv_h) { + + /* dashed pattern */ + if (on && n == GAL_NON) + on = 0, n = 0; + else if (!on && n == GAL_NOFF) + on = 1, n = 0; + n++; + if (!on) + continue; + + /* convert longitude along the galactic eq to ra/dec */ + gal_eq (e, 0.0, glng, &azra, &altdec); + + /* if in aa mode, we need it in alt/az */ + if (aa_mode) + sv_other (altdec, azra, 0, &altdec, &azra); + + /* if visible, display point */ + if (sv_loc (altdec, azra, &x, &y)) { + XPoint *xp = &ptcache[ncache++]; + xp->x = x; + xp->y = y; + + if (ncache == XtNumber(ptcache)) { + XPSDrawPoints(dsp,win,gc,ptcache,ncache,CoordModeOrigin); + ncache = 0; + } + } + } + + if (ncache > 0) + XPSDrawPoints (dsp, win, gc, ptcache, ncache, CoordModeOrigin); +} + +/* draw the Milky Way */ +/* Pertti Paakkonen, Nov. 24, 2003 */ +static void +draw_milkyway(np, dsp, win, gc) +Now *np; +Display *dsp; +Window win; +GC gc; +{ + /* rough presentation of the Milky Way edges */ + static float mw1[257][2] = { + {180.0,-1.1}, {178.5,-1.6}, {177.1,-2.0}, {174.1,-1.7}, + {172.7,-1.1}, {171.0,-1.6}, {170.3,-1.2}, {170.2,-0.3}, + {169.5,-0.3}, {169.0,0.3}, {167.9,-0.0}, {165.9,-0.3}, + {163.4,-1.2}, {162.0,-2.8}, {161.1,-5.1}, {160.8,-6.4}, + {159.5,-6.6}, {158.0,-6.2}, {155.7,-5.7}, {153.7,-6.1}, + {153.6,-6.8}, {151.8,-6.7}, {148.9,-7.5}, {146.3,-8.4}, + {144.7,-9.8}, {142.8,-10.0}, {141.9,-9.2}, {140.9,-7.7}, + {139.5,-7.4}, {138.6,-8.2}, {137.6,-7.8}, {136.3,-7.3}, + {135.0,-6.5}, {134.1,-6.6}, {134.0,-7.8}, {133.1,-7.8}, + {132.0,-8.1}, {131.7,-7.6}, {130.1,-6.8}, {129.5,-5.9}, + {128.3,-5.3}, {126.0,-5.6}, {124.3,-5.6}, {123.0,-5.9}, + {121.1,-7.2}, {119.3,-7.7}, {118.8,-8.7}, {118.0,-8.7}, + {117.7,-7.9}, {116.8,-7.8}, {115.7,-8.8}, {114.3,-10.2}, + {112.5,-12.0}, {111.2,-12.1}, {109.7,-11.5}, {108.1,-10.7}, + {106.4,-9.5}, {104.2,-8.7}, {102.1,-8.7}, {100.9,-8.4}, + {100.2,-7.3}, {98.8,-6.8}, {97.1,-7.0}, {95.1,-7.8}, {93.7,-7.9}, + {93.2,-7.5}, {92.3,-7.0}, {90.3,-8.1}, {90.4,-9.3}, {90.0,-10.3}, + {88.5,-11.1}, {86.8,-10.7}, {84.3,-10.7}, {83.5,-11.7}, + {82.4,-11.8}, {80.3,-11.2}, {78.1,-10.9}, {76.8,-11.1}, + {74.8,-11.1}, {73.9,-10.6}, {72.3,-11.0}, {69.1,-10.7}, + {65.3,-11.0}, {63.0,-11.0}, {61.3,-9.3}, {60.0,-9.2}, + {58.3,-9.8}, {56.9,-9.2}, {55.5,-9.7}, {53.6,-10.4}, + {52.4,-10.4}, {51.1,-9.6}, {50.2,-9.9}, {48.9,-10.0}, + {45.7,-9.3}, {43.1,-8.9}, {41.3,-8.6}, {39.7,-7.9}, {38.5,-7.0}, + {37.9,-7.3}, {37.6,-8.8}, {36.7,-9.3}, {34.8,-8.6}, {34.6,-6.9}, + {33.9,-6.1}, {33.1,-6.3}, {33.2,-8.3}, {32.6,-10.2}, + {30.8,-11.0}, {27.8,-11.2}, {25.7,-11.5}, {24.5,-12.4}, + {24.1,-14.0}, {22.2,-14.4}, {19.2,-14.2}, {16.9,-13.8}, + {14.9,-14.0}, {13.3,-13.1}, {12.0,-11.5}, {11.0,-10.3}, + {10.2,-10.4}, {10.2,-12.3}, {10.4,-14.5}, {9.2,-17.1}, + {6.9,-18.3}, {3.7,-18.0}, {1.6,-17.1}, {-0.3,-16.8}, + {-2.2,-16.2}, {-5.0,-15.0}, {-8.0,-13.2}, {-10.4,-11.3}, + {-13.1,-10.3}, {-15.8,-10.5}, {-18.5,-11.7}, {-21.1,-12.3}, + {-24.0,-11.8}, {-26.2,-11.4}, {-27.5,-10.4}, {-29.4,-9.8}, + {-31.5,-10.1}, {-33.5,-11.4}, {-36.4,-12.2}, {-39.6,-12.1}, + {-41.2,-11.5}, {-42.6,-9.8}, {-44.9,-7.9}, {-47.1,-5.8}, + {-49.6,-5.4}, {-51.9,-7.2}, {-53.0,-9.3}, {-53.9,-10.9}, + {-55.3,-11.3}, {-56.6,-10.1}, {-58.2,-9.3}, {-59.8,-8.9}, + {-59.9,-8.4}, {-58.9,-8.1}, {-59.3,-7.6}, {-62.2,-7.8}, + {-63.9,-9.0}, {-65.7,-10.4}, {-67.8,-10.3}, {-70.0,-9.6}, + {-72.3,-8.9}, {-74.2,-8.9}, {-75.3,-8.6}, {-74.9,-7.6}, + {-74.3,-6.5}, {-74.8,-6.3}, {-76.2,-7.2}, {-77.7,-7.3}, + {-80.4,-7.0}, {-82.7,-6.4}, {-84.4,-6.1}, {-86.3,-5.5}, + {-88.2,-5.0}, {-89.7,-4.4}, {-90.6,-3.3}, {-91.5,-3.0}, + {-93.2,-3.3}, {-95.3,-3.0}, {-96.5,-2.2}, {-96.5,-2.8}, + {-96.0,-3.9}, {-94.8,-5.1}, {-95.5,-6.9}, {-97.7,-8.8}, + {-99.0,-8.9}, {-100.1,-7.8}, {-100.0,-7.2}, {-98.7,-7.4}, + {-98.6,-6.9}, {-100.8,-6.2}, {-102.9,-4.7}, {-104.7,-4.5}, + {-106.7,-4.0}, {-106.4,-3.0}, {-104.2,-2.2}, {-104.3,-1.2}, + {-106.6,-0.3}, {-107.6,0.6}, {-108.2,1.9}, {-109.9,2.2}, + {-108.9,1.4}, {-109.0,0.9}, {-112.3,1.2}, {-113.6,1.9}, + {-114.9,2.0}, {-115.5,1.1}, {-117.6,0.9}, {-118.6,0.3}, + {-121.9,-0.4}, {-124.9,-0.8}, {-126.4,-0.5}, {-127.7,-1.1}, + {-127.9,-3.1}, {-129.4,-3.6}, {-130.6,-3.3}, {-131.0,-2.1}, + {-132.3,-2.1}, {-133.1,-3.1}, {-134.2,-3.7}, {-135.7,-2.4}, + {-137.3,-1.8}, {-138.2,-0.3}, {-138.6,1.3}, {-141.1,1.9}, + {-143.5,1.7}, {-145.1,1.2}, {-146.3,-0.2}, {-147.3,-0.7}, + {-147.6,-2.0}, {-147.1,-3.0}, {-148.1,-3.4}, {-150.3,-3.0}, + {-152.6,-2.8}, {-155.8,-3.1}, {-158.7,-3.0}, {-161.3,-3.6}, + {-163.0,-4.4}, {-163.9,-5.3}, {-165.8,-5.9}, {-167.3,-6.0}, + {-168.8,-5.4}, {-168.4,-6.3}, {-169.9,-7.0}, {-171.4,-7.9}, + {-172.8,-8.0}, {-173.6,-7.0}, {-173.9,-4.0}, {-174.6,-2.9}, + {-174.4,-1.4}, {-174.8,-0.3}, {-176.6,-0.3}, {-178.2,-1.1}, + {-180.0,-1.1} + }; + + static float mw2[537][2] = { + {-180.0,9.2}, {-178.2,8.6}, {-177.4,7.1}, {-176.0,5.9}, + {-174.2,5.4}, {-173.7,5.7}, {-173.8,6.3}, {-175.2,7.1}, + {-175.7,8.4}, {-175.4,9.5}, {-174.4,10.3}, {-174.0,11.5}, + {-173.7,12.7}, {-172.9,13.1}, {-171.9,12.5}, {-171.9,11.3}, + {-171.2,10.9}, {-170.1,10.6}, {-169.2,10.2}, {-168.4,9.5}, + {-167.6,9.3}, {-166.4,9.9}, {-166.2,10.4}, {-164.9,10.7}, + {-164.2,11.1}, {-163.6,10.9}, {-163.5,10.3}, {-163.9,9.6}, + {-163.2,9.0}, {-161.8,8.4}, {-161.1,8.6}, {-160.7,9.6}, + {-160.0,10.2}, {-158.8,10.2}, {-158.0,9.5}, {-157.6,8.3}, + {-157.5,6.9}, {-157.1,6.7}, {-156.6,7.0}, {-156.0,8.4}, + {-155.5,8.7}, {-154.2,8.7}, {-153.0,8.5}, {-152.1,8.9}, + {-151.5,8.9}, {-151.1,7.9}, {-150.2,7.7}, {-149.5,8.2}, + {-149.7,9.2}, {-150.2,10.3}, {-150.7,11.7}, {-150.2,12.2}, + {-148.6,11.8}, {-147.3,11.6}, {-146.7,11.0}, {-146.1,10.0}, + {-145.1,9.9}, {-144.5,10.4}, {-144.6,11.7}, {-143.9,12.1}, + {-142.8,11.8}, {-141.1,11.2}, {-139.0,10.9}, {-136.8,10.0}, + {-134.3,8.7}, {-133.0,7.4}, {-132.5,6.5}, {-131.4,5.8}, + {-130.3,5.9}, {-129.1,6.6}, {-127.8,7.8}, {-126.1,8.9}, + {-124.4,9.9}, {-122.7,10.7}, {-120.3,11.5}, {-117.7,11.5}, + {-115.4,11.4}, {-114.1,10.7}, {-113.3,10.0}, {-112.3,10.0}, + {-111.0,10.9}, {-109.4,11.6}, {-108.0,12.0}, {-106.6,11.8}, + {-105.1,10.7}, {-103.6,9.0}, {-101.8,7.8}, {-99.2,6.5}, + {-96.9,5.3}, {-95.5,4.7}, {-94.8,3.1}, {-93.6,2.0}, {-92.3,1.7}, + {-90.9,2.2}, {-90.2,1.9}, {-90.5,0.4}, {-90.5,-0.3}, + {-89.8,-0.9}, {-88.2,-0.9}, {-86.9,0.0}, {-87.0,0.8}, + {-87.8,1.7}, {-87.9,2.9}, {-87.3,3.7}, {-87.8,4.7}, {-87.5,6.0}, + {-86.9,6.9}, {-86.9,7.5}, {-87.3,8.6}, {-86.4,10.1}, + {-84.6,11.1}, {-83.5,11.0}, {-82.0,10.4}, {-79.3,10.4}, + {-77.8,9.6}, {-77.5,8.9}, {-77.2,7.9}, {-76.4,7.6}, {-74.8,8.7}, + {-73.7,10.5}, {-72.3,11.8}, {-70.8,12.5}, {-69.9,12.3}, + {-70.4,11.2}, {-70.4,10.7}, {-70.8,10.5}, {-70.7,10.0}, + {-69.7,10.0}, {-68.2,10.7}, {-66.3,11.7}, {-64.4,12.5}, + {-62.4,12.9}, {-62.0,12.5}, {-63.1,11.5}, {-63.0,10.6}, + {-62.3,10.3}, {-60.3,11.2}, {-57.9,11.8}, {-57.2,11.5}, + {-57.5,10.8}, {-59.8,9.6}, {-61.1,8.8}, {-61.8,7.8}, {-61.4,7.5}, + {-59.2,7.9}, {-56.0,8.7}, {-52.7,9.7}, {-49.7,10.0}, {-46.6,9.9}, + {-44.7,9.2}, {-44.6,7.8}, {-43.7,7.0}, {-42.9,7.3}, {-42.2,8.3}, + {-41.6,9.2}, {-40.1,8.9}, {-38.8,9.2}, {-38.3,10.1}, + {-39.0,11.5}, {-38.8,13.2}, {-38.0,13.8}, {-37.1,12.8}, + {-36.6,10.5}, {-36.4,8.9}, {-34.7,8.4}, {-31.4,8.6}, + {-28.6,9.8}, {-28.7,10.6}, {-29.8,11.6}, {-30.0,12.9}, + {-28.4,14.4}, {-27.0,15.5}, {-26.3,16.9}, {-25.2,16.8}, + {-24.8,13.7}, {-24.4,12.0}, {-23.5,11.7}, {-21.9,12.0}, + {-19.7,12.5}, {-18.3,11.8}, {-18.2,10.7}, {-20.4,9.0}, + {-22.0,7.8}, {-24.1,7.1}, {-25.5,5.8}, {-26.7,5.3}, {-27.6,3.6}, + {-28.8,3.1}, {-29.4,1.9}, {-29.4,1.0}, {-30.0,0.6}, {-31.1,0.9}, + {-32.5,0.8}, {-34.5,0.6}, {-37.2,1.3}, {-39.0,1.9}, {-41.0,3.4}, + {-42.5,3.6}, {-43.2,2.6}, {-43.0,0.6}, {-42.3,0.0}, {-40.2,0.1}, + {-38.2,-0.2}, {-36.5,-1.0}, {-35.3,-1.8}, {-33.7,-1.6}, + {-32.7,-1.2}, {-30.5,-1.2}, {-28.2,-0.3}, {-27.2,1.4}, + {-24.4,1.8}, {-23.0,2.4}, {-21.9,2.9}, {-19.9,2.8}, {-18.2,2.2}, + {-17.4,3.0}, {-17.4,3.8}, {-16.6,5.2}, {-15.8,7.2}, {-14.6,8.4}, + {-12.9,8.9}, {-11.8,8.6}, {-11.2,7.9}, {-10.2,7.8}, {-10.1,8.4}, + {-10.1,9.0}, {-8.8,10.1}, {-7.0,11.7}, {-5.9,12.3}, {-4.2,12.3}, + {-2.7,13.3}, {-1.4,13.5}, {-0.5,13.4}, {0.1,13.9}, {0.9,14.3}, + {2.5,14.3}, {3.7,13.9}, {4.9,13.1}, {7.1,12.1}, {7.8,11.9}, + {9.3,10.6}, {10.1,10.3}, {10.3,11.1}, {10.8,11.4}, {11.2,10.8}, + {11.5,9.2}, {12.3,7.5}, {13.6,6.2}, {13.7,4.4}, {12.8,3.0}, + {11.2,2.6}, {10.2,2.0}, {10.4,1.3}, {12.2,0.8}, {13.6,1.6}, + {15.1,2.5}, {16.3,2.5}, {17.1,2.1}, {17.8,0.9}, {19.1,0.4}, + {21.3,-0.1}, {22.3,-0.2}, {22.3,-0.5}, {21.7,-1.2}, {22.0,-1.8}, + {23.4,-1.4}, {24.5,-0.5}, {24.2,0.0}, {24.5,0.5}, {26.1,0.8}, + {27.0,1.2}, {28.1,2.0}, {30.2,2.2}, {32.2,1.7}, {34.0,1.6}, + {34.7,0.8}, {36.3,-0.1}, {38.1,0.1}, {39.7,0.2}, {41.2,-0.2}, + {43.4,-0.6}, {44.7,-0.2}, {45.6,-0.2}, {46.1,-0.9}, {47.4,-1.2}, + {49.1,-1.3}, {50.2,-1.6}, {52.3,-1.5}, {52.7,-1.0}, {53.1,-0.5}, + {54.4,-1.0}, {55.9,-1.6}, {57.7,-1.6}, {58.9,-1.9}, {60.2,-1.8}, + {61.5,-2.8}, {62.6,-3.8}, {65.4,-4.0}, {66.1,-3.4}, {67.2,-2.5}, + {68.9,-2.5}, {69.8,-1.7}, {70.3,-0.9}, {71.1,-0.9}, {72.1,-1.2}, + {74.1,-0.9}, {76.0,-0.6}, {77.2,-1.0}, {78.8,-1.9}, {80.3,-2.2}, + {81.6,-2.5}, {83.0,-1.8}, {83.5,-1.2}, {84.0,-0.3}, {84.1,1.2}, + {84.8,2.2}, {84.7,3.4}, {83.5,4.9}, {82.6,5.0}, {81.7,4.6}, + {81.5,3.4}, {80.5,2.6}, {79.8,1.9}, {78.2,1.2}, {76.6,0.5}, + {72.6,0.4}, {70.3,0.2}, {68.6,-0.7}, {66.8,-0.4}, {65.1,-0.9}, + {63.8,-1.5}, {62.3,-1.2}, {61.8,-0.1}, {62.3,1.3}, {61.9,2.2}, + {60.8,2.5}, {59.8,2.2}, {58.6,2.8}, {58.3,3.9}, {58.6,4.8}, + {57.4,5.9}, {56.2,6.4}, {55.2,6.4}, {54.9,5.6}, {54.6,5.3}, + {54.1,5.8}, {54.1,6.7}, {53.4,7.2}, {53.0,6.8}, {52.5,6.1}, + {51.3,5.0}, {50.3,3.7}, {50.3,2.6}, {49.9,1.8}, {48.4,1.7}, + {47.7,2.6}, {47.4,3.3}, {46.7,3.3}, {45.9,2.4}, {44.7,2.1}, + {43.4,2.8}, {41.6,2.8}, {40.0,3.6}, {38.6,4.0}, {37.2,3.9}, + {36.2,3.3}, {35.4,2.9}, {34.2,3.4}, {33.3,5.2}, {32.5,6.5}, + {30.5, 8.6}, {28.8,10.3}, {27.4,11.5}, {27.3,12.3}, {28.3,14.1}, + {29.4,14.5}, {30.8,13.9}, {31.9,12.7}, {33.1,11.5}, {35.2,10.7}, + {37.0,10.0}, {38.4,10.1}, {40.5,10.3}, {42.0,9.5}, {43.4,8.2}, + {45.5,7.6}, {47.1,7.6}, {49.2,8.6}, {51.5,9.6}, {53.6,9.9}, + {55.9,9.9}, {56.6,10.4}, {57.4,10.9}, {59.0,10.7}, {61.1,11.0}, + {62.0,11.9}, {62.8,11.6}, {63.0,10.1}, {63.3,9.1}, {64.9,8.8}, + {67.3,9.2}, {69.2,10.7}, {69.1,11.0}, {68.8,11.6}, {69.8,11.7}, + {71.6,10.9}, {72.6,10.5}, {75.4,10.6}, {76.9,11.1}, {78.8,11.8}, + {80.8,11.6}, {81.5,12.0}, {81.7,12.6}, {82.4,11.8}, {82.8,11.2}, + {83.6,11.1}, {84.5,11.8}, {85.6,11.7}, {87.2,11.0}, {88.6,11.0}, + {90.5,11.7}, {92.0,10.8}, {92.3,9.9}, {91.1,7.6}, {90.1,5.9}, + {90.5,4.0}, {89.5,1.9}, {89.5,1.1}, {90.3,0.4}, {90.0,-0.2}, + {90.6,-0.5}, {91.3,0.4}, {92.6,1.2}, {94.2,2.1}, {95.5,2.1}, + {96.0,2.9}, {95.4,3.7}, {95.5,4.7}, {96.2,5.1}, {96.7,4.9}, + {97.6,3.9}, {98.4,4.2}, {98.8,5.1}, {98.8,6.7}, {100.5,8.2}, + {102.1,8.4}, {104.0,7.9}, {105.6,8.1}, {107.1,9.6}, + {108.2,10.6}, {109.1,10.4}, {108.7,8.8}, {108.8,8.2}, + {110.1,7.6}, {110.3,6.3}, {109.5,5.5}, {108.1,6.0}, {106.3,5.5}, + {105.1,4.5}, {104.5,3.4}, {104.0,2.3}, {104.1,1.1}, {105.8,0.7}, + {109.1,1.4}, {111.4,1.6}, {114.4,1.9}, {117.4,2.5}, {120.5,2.5}, + {122.5,2.5}, {122.8,2.0}, {121.8,0.8}, {121.8,0.2}, {122.3,0.0}, + {123.6,0.6}, {125.3,1.4}, {125.0,1.9}, {124.1,2.2}, {124.2,2.8}, + {126.7,3.4}, {128.7,3.8}, {130.2,4.4}, {133.4,4.5}, {137.6,5.6}, + {140.9,5.3}, {142.6,5.5}, {143.5,4.1}, {142.6,3.0}, {140.8,2.6}, + {138.8,2.0}, {136.2,2.0}, {133.4,2.0}, {131.4,1.6}, {131.3,0.9}, + {132.6,0.5}, {135.0,0.6}, {137.5,1.0}, {138.9,1.0}, {139.4,0.4}, + {139.0,-1.7}, {138.2,-3.1}, {138.5,-4.0}, {142.2,-5.9}, + {145.7,-6.8}, {147.5,-6.8}, {147.6,-5.9}, {146.7,-4.9}, + {147.2,-3.7}, {149.0,-3.6}, {151.2,-4.0}, {153.1,-4.0}, + {154.9,-3.8}, {156.8,-3.7}, {156.9,-2.8}, {155.6,-2.0}, + {154.1,-0.9}, {153.8,-0.2}, {152.3,1.2}, {152.9,2.6}, + {154.6,2.5}, {155.9,1.7}, {156.1,0.8}, {157.6,-0.3}, + {159.7,-0.8}, {161.1,-0.4}, {161.9,1.6}, {161.9,2.5}, + {161.9,3.8}, {162.3,5.5}, {164.3,7.3}, {165.4,7.8}, {169.4,7.8}, + {171.4,8.4}, {172.7,9.8}, {175.0,10.3}, {177.1,10.0}, + {179.3,9.3}, {180.0,9.2} + }; + + XSegment xsegs[100], *xs; /* segments cache */ + double e = epoch == EOD ? mjd : epoch; + double altdec, azra; + double glon, glat; + int n, i; + + for (i=0; i<2; i++) { + int nmax = i==0 ? XtNumber(mw1) : XtNumber(mw2); + int x1 = 0, y1 = 0, x2, y2; + int before = 0; + int vis1 = 0, vis2; + xs = xsegs; + + for (n=0; nx1 = sx1; xs->y1 = sy1; + xs->x2 = sx2; xs->y2 = sy2; + if (++xs == &xsegs[XtNumber(xsegs)]) { + split_segs (dsp, win, gc, xsegs, xs - xsegs); + xs = xsegs; + } + } + } + x1 = x2; + y1 = y2; + vis1 = vis2; + } + + if (xs > xsegs) + split_segs (dsp, win, gc, xsegs, xs - xsegs); + } +} + +/* draw the constellation lines */ +static void +draw_cnsbounds(np, dsp, win) +Now *np; +Display *dsp; +Window win; +{ +#define NCONSEGS 23 /* draw with this fraction of r (primes look best) */ + double alt, az, ra, dec; + double e = epoch == EOD ? mjd : epoch; + double segsize = sv_dfov/NCONSEGS; + double cdec, sdec; + double *era0, *edec0, *era1, *edec1; + double lst; + int nedges; + + /* get all the edges, precessed to e. + */ + nedges = cns_edges (e, &era0, &edec0, &era1, &edec1); + if (nedges <= 0) { + xe_msg (1, "Can't find constellation edges"); + return; + } + + /* prepare for drawing */ + XSetForeground (dsp, sv_cnsgc, cnsbnd_p); + sv_fullwhere (np, sv_altdec, sv_azra, aa_mode, &alt, &az, &ra, &dec); + now_lst (np, &lst); + cdec = cos(dec); + sdec = sin(dec); + + /* for each edge.. break into smaller segments + * and draw any that are even partially visible. + */ + while (--nedges >= 0) { + double ra0 = era0[nedges]; + double dec0 = edec0[nedges]; + double ra1 = era1[nedges]; + double dec1 = edec1[nedges]; + XPoint xpts[NCONSEGS+10]; + int lastvis, lastx, lasty; + double dra, ddec; + double sep, csep; + int see0, see1; + int nsegs; + int npts; + int j; + + /* cull segments that aren't even close */ + solve_sphere (ra-ra0, PI/2-dec0, sdec, cdec, &csep, NULL); + see0 = (acos(csep) < sv_dfov); + solve_sphere (ra-ra1, PI/2-dec1, sdec, cdec, &csep, NULL); + see1 = (acos(csep) < sv_dfov); + if (!see0 && !see1) + continue; + + /* find number of segments with which to draw this edge */ + solve_sphere (ra1-ra0, PI/2-dec1, sin(dec0), cos(dec0), &csep,NULL); + sep = acos(csep); + nsegs = (int)(sep/segsize) + 1; + + /* find step sizes. + * N.B. watch for RA going the long way through 0 + */ + dra = ra1 - ra0; + if (dra < -PI) + dra += 2*PI; + else if (dra > PI) + dra -= 2*PI; + dra /= nsegs; + ddec = (dec1 - dec0)/nsegs; + + /* step along the segment ends */ + lastvis = -1; /* illegal return value from sv_loc() */ + lastx = lasty = 0; + npts = 0; + for (j = 0; j <= nsegs; j++) { + int vis, x, y; + double ad, ar; + + ad = dec0 + j*ddec; + ar = ra0 + j*dra; + + /* need alt/az when are in aa mode */ + if (aa_mode) + sv_other (ad, ar, 0, &ad, &ar); + + vis = sv_loc (ad, ar, &x, &y); /* hzn down with clipping */ + + if (lastvis >= 0 && vis != lastvis) { + int x1, y1, x2, y2; + + /* at edge of circle -- find crossing point */ + if (segisvis (lastx, lasty, x, y, &x1, &y1, &x2, &y2)) { + if (vis) { + xpts[npts].x = x1; + xpts[npts].y = y1; + npts++; + } else { + xpts[npts].x = x2; + xpts[npts].y = y2; + npts++; + break; /* end of visible portion */ + } + } + } + if (vis) { + xpts[npts].x = x; + xpts[npts].y = y; + npts++; + } + + lastvis = vis; + lastx = x; + lasty = y; + } + + if (npts > XtNumber(xpts)) { + /* stack has already overflowed but try to show how much */ + printf ("cnsbounds Bug! npts=%d N=%d\n", npts, XtNumber(xpts)); + abort(); + } + + if (npts > 1) + split_lines(dsp, win, sv_cnsgc, xpts, npts); + } +#undef NCONSEGS +} + +/* like XPSDrawLine but for use when cyl_proj to split around left or right + * edge if longer than half a screen width. + * return 1 if had to split, else 0. + */ +static int +split_line (dsp, win, gc, x1, y1, x2, y2) +Display *dsp; +Window win; +GC gc; +int x1, y1; +int x2, y2; +{ + if (cyl_proj) { + XSegment xs; + + xs.x1 = x1; + xs.y1 = y1; + xs.x2 = x2; + xs.y2 = y2; + return (split_segs (dsp, win, gc, &xs, 1)); + } else { + XPSDrawLine (dsp, win, gc, x1, y1, x2, y2); + return (0); + } +} + +/* like XPSDrawLines but for use when in cyl_proj to split around left or + * right edge if any leg longer than half a screen width. + * return the number of legs that were split. + * N.B. we assume np >= 2. + */ +static int +split_lines (dsp, win, gc, xp, np) +Display *dsp; +Window win; +GC gc; +XPoint xp[]; +int np; +{ + if (cyl_proj) { + int ns = np-1; + XSegment *sp0 = (XSegment *) XtMalloc (ns * sizeof(XSegment)); + XSegment *sp = sp0; + XPoint *lxp; + int nsplit; + + for (lxp = xp+ns; xpx1 = xp->x; + sp->y1 = xp->y; + sp->x2 = xp[1].x; + sp->y2 = xp[1].y; + } + nsplit = split_segs (dsp, win, gc, sp0, ns); + XtFree ((void*)sp0); + return (nsplit); + } else { + XPSDrawLines (dsp, win, gc, xp, np, CoordModeOrigin); + return (0); + } +} + +/* like XPSDrawSegments but for use when in cyl_proj to split around edge. + * we know that both ends of each segment are visible. + * return the number of segments that were split. + * N.B. unlike XPSDrawSegments we may modify sp[] IN PLACE + */ +static int +split_segs (dsp, win, gc, xsp, ns) +Display *dsp; +Window win; +GC gc; +XSegment xsp[]; +int ns; +{ + int nsplit = 0; + + /* check for probably wraps */ + if (cyl_proj) { + XSegment *sp = xsp, *lsp; + int xwrap, ywrap; + + for (lsp = sp+ns; spx1, sp->y1, + sp->x2+xwrap, sp->y2+ywrap); + sp->x1 -= xwrap; + sp->y1 -= ywrap; + nsplit++; + } + } + } + + XPSDrawSegments (dsp, win, gc, xsp, ns); + + return (nsplit); +} + +/* given a segment, determine if wraps around in the cyl projection. + * if so, return how far to wrap in each direction, or 0 if none. + */ +static void +split_wrap (sp, xwp, ywp) +XSegment *sp; +int *xwp, *ywp; +{ + double scale = sv_h/sv_vfov; + int diff; + + if (abs(diff = sp->x2 - sp->x1) > PI*scale) + *xwp = (int)floor((2*PI)*scale * (diff > 1 ? -1 : 1) + .5); + else + *xwp = 0; + + if (abs(diff = sp->y2 - sp->y1) > 2*scale) + *ywp = (int)floor(PI*scale * (diff > 1 ? -1 : 1) + .5); + else + *ywp = 0; +} + +/* draw the constellation figures and/or names */ +static void +draw_cns(np, dsp, win) +Now *np; +Display *dsp; +Window win; +{ +#define BBOX(x1,y1,x2,y2) { \ + if (want_conn || want_cona) { \ + if (!begun || x1 < minx) minx = x1; \ + if (!begun || x1 > maxx) maxx = x1; \ + if (!begun || y1 < miny) miny = y1; \ + if (!begun || y1 > maxy) maxy = y1; \ + if (x2 < minx) minx = x2; \ + if (x2 > maxx) maxx = x2; \ + if (y2 < miny) miny = y2; \ + if (y2 > maxy) maxy = y2; \ + begun = 1; \ + } \ + } + double alt, az, ra, dec; + double altdec, azra; + double e = epoch == EOD ? mjd : epoch; + double fra[40], fdec[40]; + double lst; + int dcodes[40]; + int conids[89]; + int ncns, ndc; + int x, lastx = 0, y, lasty = 0; + int vis, lastvis = 0; + int sx1, sy1, sx2, sy2; + int minx = 0, maxx = 0, miny = 0, maxy = 0; + int begun; + int split; + int i; + + XSetForeground (dsp, sv_cnsgc, cnsfig_p); + sv_fullwhere (np, sv_altdec, sv_azra, aa_mode, &alt, &az, &ra, &dec); + ncns = cns_list (ra, dec, e, sv_dfov/2, conids); + now_lst (np, &lst); + + while (--ncns >= 0) { + ndc = cns_figure (conids[ncns], e, fra, fdec, dcodes); + if (ndc <= 0) { + printf ("Can't get cns figures! id=%d\n", conids[ncns]); + abort(); + } + split = begun = 0; + for (i = 0; i < ndc; i++) { + /* need alt/az if in alt/az mode */ + if (aa_mode) { + sv_other (fdec[i], fra[i], 0, &altdec, &azra); + } else { + altdec = fdec[i]; + azra = fra[i]; + } + vis = sv_loc (altdec, azra, &x, &y); /* hzn uses clipping */ + + if (dcodes[i]) { + if (want_conf) + sv_set_dashed_cnsgc (dsp, dcodes[i] == 2); + if (vis != lastvis) { + if (segisvis(lastx,lasty,x,y,&sx1,&sy1,&sx2,&sy2)) { + if (want_conf) + split += split_line (dsp, win, sv_cnsgc, sx1, + sy1, sx2, sy2); + BBOX(sx1, sy1, sx2, sy2); + } + } else if (vis) { + if (want_conf) + split += split_line (dsp, win, sv_cnsgc, lastx, + lasty, x, y); + BBOX(lastx, lasty, x, y); + } + } + lastx = x; + lasty = y; + lastvis = vis; + } + + if ((want_conn || want_cona) && begun && !split) + draw_cnsname (dsp, win, conids[ncns], minx, miny, maxx, maxy); + } + + sv_set_dashed_cnsgc (dsp, 0); +#undef BBOX +} + +/* draw the name of the given constellation centered in the bounding box */ +static void +draw_cnsname (dsp, win, conid, minx, miny, maxx, maxy) +Display *dsp; +Window win; +int conid; +int minx, miny, maxx, maxy; +{ + char *name = cns_name (conid); + XCharStruct all; + int len; + int dir, asc, des; + int x, y; + + if (want_conn) { + name += 5; /* skip "XXX: " */ + len = strlen (name); + } else + len = 3; /* just XXX: */ + XTextExtents (sv_cf, name, len, &dir, &asc, &des, &all); + + x = minx + (maxx - minx - all.rbearing)/2; + y = miny + (maxy - miny - (all.ascent + all.descent))/2 + all.ascent; + + XSetFont (dsp, sv_strgc, sv_cf->fid); + XSetForeground (dsp, sv_strgc, cnsnam_p); + XPSDrawString (dsp, win, sv_strgc, x, y, name, len); +} + +/* draw a label for an object that is located at [x,y] with symbol diam d. + * the label consists OBJF_* in flags. + * label may contain greek names with superscripts. + */ +static void +draw_label (win, gc, op, flags, x, y, d) +Window win; +GC gc; +Obj *op; +int flags; /* mask of OBJF_{L,R,N,M,PERSLB}LABEL set */ +int x, y; /* center of object we are labeling, pixels */ +int d; /* diam of object we are labeling, pixels */ +{ + Display *dsp = XtDisplay (svda_w); + char *name = op->o_name; + int gw = 0; /* greek width, pixels */ + int sw = 0; /* superscript width */ + int sa = 0; /* superscript ascent */ + int nw = 0; /* regular name width (might include mag too) */ + int gl = 0; /* n chars in greek name, if any */ + char g = '\0'; /* char code to drawn greek character, if any */ + XCharStruct xcs; + char buf[128]; + int dir, asc, des; + int sx, sy; + int tw; + + /* check the trivial case of not drawing anything :-) */ + if (!name[0] || !(flags & (OBJF_NLABEL|OBJF_MLABEL|OBJF_PERSLB))) + return; + + /* default to name if persistent and neither name or mag are set */ + if (!(flags & (OBJF_NLABEL|OBJF_MLABEL))) { + flags |= OBJF_NLABEL; + if (!(flags & (OBJF_LLABEL|OBJF_RLABEL))) + flags |= OBJF_RLABEL; + } + + /* deal with name portion first */ + if (flags & OBJF_NLABEL) { + if (sv_ggc && chk_greeklabel (name, &gl, &g)) { + XTextExtents (sv_gf, &g, 1, &dir, &asc, &des, &xcs); + gw = xcs.width; + if (isdigit(name[4+gl])) { + /* don't crowd the superscript */ + XTextExtents (sv_pf, name+gl+4, 1, &dir, &asc, &des, &xcs); + gw += 1; + sw = xcs.width + 1; + sa = xcs.ascent; + (void) strcpy (buf, name+gl+5); + } else + (void) strcpy (buf, name+gl+4); + } else + (void) strcpy (buf, name); + } + + /* set (or append) mag in buf (too) if enabled */ + if (flags & OBJF_MLABEL) { + int m = (int)floor(get_mag(op)*10.0 + 0.5); + if (flags & OBJF_NLABEL) + (void) sprintf (buf+strlen(buf), "(%d)", m); + else + (void) sprintf (buf, "%d", m); + } + + /* eclipsed earth sat in parens */ + if (is_type(op,EARTHSATM) && op->s_eclipsed) { + int l = strlen(buf); + memmove (buf+1, buf, l); + buf[0] = '['; + buf[++l] = ']'; + buf[++l] = '\0'; + } + + XTextExtents (sv_pf, buf, strlen(buf), &dir, &asc, &des, &xcs); + nw = xcs.width; + + /* find total offset from x to be drawn then starting x and y */ + tw = gw + sw + nw; + sx = (flags & OBJF_LLABEL) ? x - tw - 2*d/5 - 2 : x + 2*d/5 + 2; + sy = y - 2*d/5; + + /* draw everything, starting at sx,sy */ + if (gw) { + unsigned long gcm; + XGCValues gcv; + + /* use same color in ggc as in gc */ + gcm = GCForeground; + (void) XGetGCValues (dsp, gc, gcm, &gcv); + XSetForeground (dsp, sv_ggc, gcv.foreground); + + XPSDrawString (dsp, win, sv_ggc, sx, sy, &g, 1); + sx += gw; + if (sw) { + XPSDrawString (dsp, win, gc, sx, sy-sa/2, name+gl+4, 1); + sx += sw; + } + } + XPSDrawString (dsp, win, gc, sx, sy, buf, strlen(buf)); +} + +/* see if the given name is of the form "Cns BayerN-Flams". If so, find the + * number of chars in the Bayer (greek) part and the greek font code and ret 1. + * else return 0. + */ +static int +chk_greeklabel (name, glp, gcodep) +char name[]; /* name */ +int *glp; /* number of chars in the greek name part */ +char *gcodep; /* code to use for drawing the greek character */ +{ + static char *greeks[] = { + "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", + "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", + "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", + "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega", + }; + static char grfontidx[] = "abgdezhqiklmnxoprstufcjw"; + static int glen[XtNumber(greeks)]; + int strl; + int gl; + int i; + + /* forget it if no greek gc available */ + if (!sv_ggc) + return (0); + + /* init glen array the first time */ + if (glen[0] == 0) + for (i = 0; i < XtNumber(greeks); i++) + glen[i] = strlen(greeks[i]); + + /* fast preliminary checks */ + strl = strlen (name); + if (strl < 6) /* shortest greek entry is "Cns Pi" */ + return (0); + if (name[3] != ' ') + return (0); + + /* find length of potentionally greek portion */ + for (gl = 0; ; gl++) + if (!isalpha(name[4+gl])) + break; + if (gl < 2) /* shortest greek name is 2 chars */ + return (0); + + /* scan for greek name -- it may be truncated */ + for (i = 0; i < XtNumber(greeks); i++) { + if (gl <= glen[i] && strncmp (name+4, greeks[i], gl) == 0) { + *gcodep = grfontidx[i]; + *glp = gl; + return (1); + } + } + + return (0); +} + +/* draw all visible eyepieces */ +static void +draw_eyep (dsp, win, gc) +Display *dsp; +Window win; +GC gc; +{ + int cir = 360*64;/* 360 degrees in X */ + EyePiece *eyep; + int neyep; + int i; + + /* gather the list */ + neyep = se_getlist (&eyep); + if (neyep == 0) + return; + + /* use ep color unless it matches the sky then use fg color */ + XSetForeground (dsp, gc, eyep_p == sky_p ? annot_p : eyep_p); + + /* set this to the largest eyep we actually draw -- just used for the + * print label. + */ + largeyepr = NULL; + neyepr = 0; + + /* draw each eyepiece */ + for (i = 0; i < neyep; i++) { + EyePiece *ep = &eyep[i]; + double altdec, azra; + int epw, eph; /* eyepiece half width, height, pixels */ + double xra, xdec, xpa; + int x, y; + + /* forget it if too small */ + epw = (int)floor(ep->eyepw*sv_h/sv_vfov/2 + 0.5); + eph = (int)floor(ep->eyeph*sv_h/sv_vfov/2 + 0.5); + if (epw < MINEPR && eph < MINEPR) + continue; + + /* get ep coords in this display mode */ + if (aa_mode == ep->aamode) { + altdec = ep->altdec; + azra = ep->azra; + } else { + sv_other (ep->altdec, ep->azra, ep->aamode, &altdec, &azra); + } + + /* get ep ra/dec/pa */ + if (ep->aamode) { + Now *np = mm_get_now(); + double lst; + sv_other (ep->altdec, ep->azra, 1, &xdec, &xra); + now_lst (np, &lst); + xpa = parallacticLHD (lat, hrrad(lst) - xra, xdec) - ep->eyepa; + } else { + xra = ep->azra; + xdec = ep->altdec; + xpa = ep->eyepa; + } + + /* only draw if center is on screen */ + if (sv_loc (altdec, azra, &x, &y)) { + double a = x_angle (xra, xdec, xpa) + PI/2; + if (ep->round) { + int xa = (int)floor(raddeg(a)*64 + 0.5); + if (ep->solid) + XPSFillEllipse(dsp, win, gc, x-epw, y-eph, xa, 2*epw, + 2*eph, 0, cir); + else + XPSDrawEllipse(dsp, win, gc, x-epw, y-eph, xa, 2*epw, + 2*eph, 0, cir); + } else { + XPoint r[5]; + double ca = cos(a); + double sa = sin(a); + int xr = epw*ca + eph*sa; + int yr = -epw*sa + eph*ca; + int xl = -epw*ca + eph*sa; + int yl = epw*sa + eph*ca; + r[0].x = x + xr; r[0].y = y + yr; + r[1].x = x + xl; r[1].y = y + yl; + r[2].x = x - xr; r[2].y = y - yr; + r[3].x = x - xl; r[3].y = y - yl; + r[4] = r[0]; + if (ep->solid) + XPSFillPolygon (dsp, win, gc, r, 4, Nonconvex, + CoordModeOrigin); + else + XPSDrawLines (dsp, win, gc, r, 5, CoordModeOrigin); + } + if (!largeyepr || largeyepr->eyepw < ep->eyepw + || largeyepr->eyeph < ep->eyeph) + largeyepr = ep; + neyepr++; + } + } +} + +/* given an object return its desired diameter, in pixels. + * the size is the larger of the actual size at the current window scale or + * a size designed to be proportional to the objects visual magnitude. + * but we also force deep sky objects to be at least MIND. + * N.B. we assume we already know op is at least as bright as dsmag or fsmag + * (depending on is_deepsky(), respectively). + */ +static int +objdiam(Obj *op) +{ + int stmag, ssmag, dsmag, magstp; + int isdeep = is_deepsky(op); + int faint, d; + + svf_getmaglimits (&stmag, &ssmag, &dsmag, &magstp); + faint = isdeep ? dsmag : (is_ssobj(op) ? ssmag : stmag); + d = magdiam (faint, magstp, sv_vfov/sv_h, get_mag(op), + degrad(op->s_size/3600.0)); + + if (isdeep) { + if (d < MIND) + d = MIND; + } + + return (d); +} + +/* given an object and its diameter return its desired gc. + */ +static void +objGC(Obj *op, int d, GC *gcp) +{ + if (d <= 1) + *gcp = dimgc; + else + obj_pickgc (op, svda_w, gcp); +} + +/* make the GCs, load the fonts and gather the colors. + * TODO: clean up previous stuff if called more than once. + */ +static void +sv_mk_gcs() +{ + Display *dsp = XtDisplay(toplevel_w); + Window win = XtWindow(toplevel_w); + unsigned long gcm; + XGCValues gcv; + Pixel p; + + get_something (svda_w, XmNbackground, (XtArgVal)&bg_p); + + (void) get_color_resource (svda_w, "SkyAnnotColor", &annot_p); + (void) get_color_resource (svda_w, "SkyColor", &sky_p); + (void) get_color_resource (svda_w, "HorizonColor", &hzn_p); + (void) get_color_resource (svda_w, "SkyCnsFigColor", &cnsfig_p); + (void) get_color_resource (svda_w, "SkyCnsBndColor", &cnsbnd_p); + (void) get_color_resource (svda_w, "SkyCnsNamColor", &cnsnam_p); + (void) get_color_resource (svda_w, "SkyGridColor", &grid_p); + (void) get_color_resource (svda_w, "SkyEqColor", &eq_p); + (void) get_color_resource (svda_w, "SkyMWColor", &mw_p); + (void) get_color_resource (svda_w, "SkyEyePColor", &eyep_p); + + sv_rf = getXResFont ("SkyGridFont"); + gcm = GCFont; + gcv.font = sv_rf->fid; + sv_gc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = 0L; + sv_cnsgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = 0L; + sv_strgc = XCreateGC (dsp, win, gcm, &gcv); + + /* load the tracking and constellation fonts */ + get_tracking_font (dsp, &sv_tf); + sv_cf = getXResFont ("CnsFont"); + + /* load the greek font */ + loadGreek (dsp, win, &sv_ggc, &sv_gf); + + /* get font used by all gcs from obj_pickgc() */ + get_views_font (dsp, &sv_pf); + + /* build gc for dim stars */ + (void) get_color_resource (svda_w, "DimStarColor", &p); + gcm = GCForeground | GCFont; + gcv.foreground = p; + gcv.font = sv_pf->fid; + dimgc = XCreateGC (dsp, win, gcm, &gcv); + + /* zoom box gc */ + gcm = GCForeground | GCFunction; + gcv.foreground = sky_p ^ WhitePixel (dsp, DefaultScreen (dsp)); + gcv.function = GXxor; + zm_xorgc = XCreateGC (dsp, win, gcm, &gcv); + + /* transient window marker gc */ + gcm = GCForeground | GCFunction; + gcv.foreground = sky_p ^ annot_p; + gcv.function = GXxor; + sv_tmgc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* set line_style of sv_cnsgc to LineSolid if dashed==0 else to LineOnOffDash. + * keep a cache so we don't mess with it any more than necessary. + */ +static void +sv_set_dashed_cnsgc (dsp, dashed) +Display *dsp; +int dashed; +{ + static int last_dashed = -1243; /* anything bogus */ + XGCValues xgcv; + unsigned long mask; + + if (last_dashed == dashed) + return; + last_dashed = dashed; + + mask = GCLineStyle; + xgcv.line_style = dashed ? LineOnOffDash : LineSolid; + XChangeGC (dsp, sv_cnsgc, mask, &xgcv); +} + +/* convert the given X windows coords to image coords. + * N.B. we assume an image is indeed being displayed + */ +static void +sv_win2im (wx, wy, ix, iy) +int wx, wy; +double *ix, *iy; +{ + if (flip_lr) + wx = sv_w - 1 - wx; + if (flip_tb) + wy = sv_h - 1 - wy; + si_win2im (wx, wy, sv_w, sv_h, ix, iy); +} + +/* if a circular edge is showing clip, else just copy. + * return 1 if any part MAY be visible, else 0. + */ +static int +segisvis (x1, y1, x2, y2, cx1, cy1, cx2, cy2) +int x1, y1, x2, y2; /* original segment */ +int *cx1, *cy1, *cx2, *cy2; /* clipped segment */ +{ + int vis; + + if (cyl_proj || sv_dfov < PI) { + /* no round edge so just check for rectangle vis. + */ + *cx1 = x1; + *cy1 = y1; + *cx2 = x2; + *cy2 = y2; + + vis = (x1>=0 || x2>=0) && (x1=0 || y2>=0) && (y1x0 = sv_w - zp->x0; + zp->x1 = sv_w - zp->x1; + } else { + zp->y0 = sv_h - zp->y0; + zp->y1 = sv_h - zp->y1; + } +} + +/* user has flipped image .. update zoom regions to match */ +static void +zm_flip (lr) +int lr; +{ + int i; + + /* flip working zoom and all on stack */ + zm_flip0 (lr, &wzm); + for (i = 0; i < zm_nundo; i++) + zm_flip0 (lr, &zm_undo[i]); + +} + +/* add the current settings in a new zoom undo entry and install. + * if successful all deeper entries are discarded. + * return -1 with no change if zoom box center is not in map, else 0. + */ +static int +zm_addundo() +{ + ZM_Undo *zp; + double ad, ar; + double dx, dy; + double ratio; + double newfov; + + /* assert */ + if (zm_cundo < 0) { + printf ("addundo Bug! zm_cundo=%d zm_nundo=%d\n",zm_cundo,zm_nundo); + abort(); + } + + /* always add to end of list */ + zm_cutundo(); + + /* compute new center. + * beware off image + * just use x/y if image has no WCS + */ + if (!sv_unloc ((wzm.x0+wzm.x1)/2, (wzm.y0+wzm.y1)/2, &ad, &ar)) { + if (si_ison()) { + ad = sv_altdec; + ar = sv_azra; + } else { + xe_msg (1, "Center of zoom box must be inside window"); + return (-1); + } + } + + /* make room for 1 new undo entry */ + zm_undo = (ZM_Undo *) XtRealloc ((void *)zm_undo, + (++zm_nundo)*sizeof(ZM_Undo)); + zp = &zm_undo[zm_cundo++]; + + /* save current settings in new entry */ + zp->ad = sv_altdec; + zp->ar = sv_azra; + zp->fov = sv_vfov; + zp->x0 = wzm.x0; + zp->y0 = wzm.y0; + zp->x1 = wzm.x1; + zp->y1 = wzm.y1; + + /* compute new fov */ + dx = abs(wzm.x0 - wzm.x1); + dy = abs(wzm.y0 - wzm.y1); + ratio = (dx>dy?dx:dy)/sv_h; + newfov = ratio*sv_vfov; + + /* install */ + sv_altdec = ad; + sv_set_scale(ALTDEC_S, 0); + sv_azra = ar; + sv_set_scale(AZRA_S, 0); + sv_set_fov (newfov); + sv_set_scale(FOV_S, 0); + + return (0); +} + +/* install the zm_cundo entry of the zoom undo stack */ +static void +zm_installundo() +{ + ZM_Undo *zp = &zm_undo[zm_cundo]; + + /* set new center and fov */ + sv_altdec = zp->ad; + sv_set_scale(ALTDEC_S, 0); + sv_azra = zp->ar; + sv_set_scale(AZRA_S, 0); + sv_set_fov (zp->fov); + sv_set_scale(FOV_S, 0); + + /* set to new aoi box */ + wzm.x0 = zp->x0; + wzm.y0 = zp->y0; + wzm.x1 = zp->x1; + wzm.y1 = zp->y1; +} + +/* discard zoom undo stack deeper than current setting */ +static void +zm_cutundo() +{ + zm_nundo = zm_cundo; +} + +/* disable and forget all unzooms */ +static void +zm_noundo() +{ + /* disable for later sv_all's */ + svtb_zoomok(0); + + if (zm_undo) { + XtFree ((void *)zm_undo); + zm_undo = NULL; + zm_nundo = zm_cundo = 0; + svtb_unzoomok(0); + } +} + +/* draw rectangle defined by zm_[xy][01] using XOR. + * this is used both to draw and erase. + */ +static void +zm_draw() +{ + Display *dsp = XtDisplay(svda_w); + Window win = XtWindow(svda_w); + XPoint xp[5]; + + /* TODO: leaves bit turd if have 0 thickness */ + xp[0].x = wzm.x0; xp[0].y = wzm.y0; + xp[1].x = wzm.x1; xp[1].y = wzm.y0; + xp[2].x = wzm.x1; xp[2].y = wzm.y1; + xp[3].x = wzm.x0; xp[3].y = wzm.y1; + xp[4].x = wzm.x0; xp[4].y = wzm.y0; + XPSDrawLines (dsp, win, zm_xorgc, xp, 5, CoordModeOrigin); +} + +/* respond to fov shortcut PB. + * client is secret code.. see various XtAdds + */ +static void +sv_fovsc_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int code = (long int)client; + + switch (code) { + case 0: /* 90:00 FOV */ + si_off(); + sv_set_fov (degrad(90)); + sv_set_scale (FOV_S, 1); + sv_all (mm_get_now()); + break; + + case 1: /* 1:1 */ + sv_resize (sv_h, sv_h); + break; + + case 2: /* 2:1 */ + sv_resize (sv_h & ~1, sv_h/2); /* insure exact */ + break; + + case 3: + if (si_ison()) { + FImage *fip = si_getFImage(); + int neww = sv_h * fip->sw / fip->sh; + int newh = sv_w * fip->sh / fip->sw; + if (neww > sv_w) + sv_resize (neww, sv_h); + else if (newh > sv_h) + sv_resize (sv_w, newh); + } + break; + + default: + printf ("Bug! Bogus fovsc code: %d\n", code); + abort(); + } +} + +/* respond to an altdec shortcut PB. + * client is desired position, in degrees. + */ +static void +sv_altdecsc_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + si_off(); + sv_altdec = degrad((long int)client); + sv_set_scale (ALTDEC_S, 1); + sv_all (mm_get_now()); +} + +/* bring up telescope configure window */ +/* ARGSUSED */ +static void +sv_tcp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sc_manage(); +} + +/* bring up INDI operations panel window */ +/* ARGSUSED */ +static void +sv_indi_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + indi_manage(); +} + +/* callback when a Telescope history item is destroyed */ +/* ARGSUSED */ +static void +sv_dtelpd_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPointer ud; + + get_something (w, XmNuserData, (XtArgVal)&ud); + if (ud) + XtFree ((char *)ud); +} + +/* callback to erase all telescope history */ +/* ARGSUSED */ +static void +sv_etelpd_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + sv_erasetelpd(); +} + +/* callback when a Telescope history item is activated. + * userData is a pointer to a malloced copy of the Obj to which we are to point. + */ +/* ARGSUSED */ +static void +sv_telpd_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op; + + get_something (w, XmNuserData, (XtArgVal)&op); + telGoto (op); +} + +/* add op to the Telescope pulldown as a history entry. + * we add a new PB and store a copy of op in its userData. + */ +static void +sv_addtelpd (op) +Obj *op; +{ + char label[64]; + XtPointer ud; + Widget w; + Arg args[20]; + int n; + WidgetList ch; + Cardinal nch; + int i; + + /* create the label for the button */ + if (strcmp (op->o_name, telAnon)) + strcpy (label, op->o_name); + else { + char rastr[32], decstr[32]; + fs_ra (rastr, op->f_RA); + fs_prdec (decstr, op->f_dec); + sprintf (label, "%s %s", rastr, decstr); + } + + /* check for already in list */ + get_something (telpd_w, XmNchildren, (XtArgVal)&ch); + get_something (telpd_w, XmNnumChildren, (XtArgVal)&nch); + for (i = 0; i < (int)nch; i++) { + char *chlabel; + int found; + + if (!XmIsPushButton(ch[i])) + continue; + get_xmstring (ch[i], XmNlabelString, &chlabel); + found = !strcmp (chlabel, label); + XtFree (chlabel); + if (found) + return; + } + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreatePushButton (telpd_w, "TELH", args, n); + XtAddCallback (w, XmNactivateCallback, sv_telpd_cb, NULL); + XtAddCallback (w, XmNdestroyCallback, sv_dtelpd_cb, NULL); + set_xmstring (w, XmNlabelString, label); + ud = (XtPointer) XtMalloc (sizeof(Obj)); + memcpy ((void *)ud, (void *)op, sizeof(Obj)); + set_something (w, XmNuserData, (XtArgVal)ud); + XtManageChild (w); +} + +/* erase the entire telescope goto history. + * N.B. relies on fact they are the only children of telpd_w using userData. + */ +/* ARGSUSED */ +static void +sv_erasetelpd () +{ + WidgetList ch; + Cardinal nch; + int i; + + get_something (telpd_w, XmNchildren, (XtArgVal)&ch); + get_something (telpd_w, XmNnumChildren, (XtArgVal)&nch); + for (i = 0; i < (int)nch; i++) { + XtPointer ud; + get_something (ch[i], XmNuserData, (XtArgVal)&ud); + if (ud) + XtDestroyWidget (ch[i]); + } +} + +/* called periodically to decide whether to reload field stars. + */ +static void +chkFS_to (client, id) +XtPointer client; +XtIntervalId *id; +{ + sv_loadfs(0); + fs_to = XtAppAddTimeOut (xe_app, FSTO, chkFS_to, 0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: skyviewmenu.c,v $ $Date: 2015/04/09 00:23:02 $ $Revision: 1.351 $ $Name: $"}; diff --git a/GUI/xephem/solsysmenu.c b/GUI/xephem/solsysmenu.c new file mode 100644 index 0000000..d96d55a --- /dev/null +++ b/GUI/xephem/solsysmenu.c @@ -0,0 +1,2380 @@ +/* code to manage the stuff on the solar system display. + * functions and data to support the main display begin with ss_. + * function and data to support the stereo display begin with st_. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +/* heliocentric coordinates, and enough info to locate it on screen */ +typedef struct { + Obj o; /* copy of Obj at the given moment */ + TrTS trts; /* mjd when Obj was valid and whether to timestamp */ + int sx, sy; /* main view window coords of object */ + int stx; /* stereo view x coord (y is the same in both) */ + double x, y, z; /* heliocentric cartesian coords */ +} HLoc; + +/* list of coords when "all objects" are being displayed */ +typedef struct { + Obj *op; /* into the real DB */ + short sx, stx, sy; /* dot location on screen */ +} AllP; + +static void ss_create_shell (void); +static void st_create_form (void); +static void ss_trail_cb (Widget w, XtPointer client, XtPointer call); +static void ss_activate_cb (Widget w, XtPointer client, XtPointer call); +static void ss_changed_cb (Widget w, XtPointer client, XtPointer call); +static void ss_close_cb (Widget w, XtPointer client, XtPointer call); +static void ss_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void ss_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void ss_print_cb (Widget w, XtPointer client, XtPointer call); +static void ss_print (void); +static void ss_ps_annotate (Now *np); +static void ss_anim_cb (Widget w, XtPointer client, XtPointer call); +static void ss_help_cb (Widget w, XtPointer client, XtPointer call); +static void ss_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void ss_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void ss_da_input_cb (Widget w, XtPointer client, XtPointer call); +static void st_parallax_cb (Widget w, XtPointer client, XtPointer call); +static void st_map_cb (Widget wid, XtPointer client, XtPointer call); +static void st_track_size (void); +static void st_unmap_cb (Widget wid, XtPointer client, XtPointer call); +static void st_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void ss_popup (XEvent *ev, Obj *op, double Mjd, int fav); +static void ss_fav_cb (Widget w, XtPointer client, XtPointer call); +static void ss_create_popup (void); +static void ss_all (void); +static void ss_redraw (void); +static void ss_refresh (void); +static int ss_ano (double *fracx, double *fracy, int *xp, int *yp, int w2x, + int arg); +static void st_redraw (void); +static void st_refresh (void); +static int st_ano (double *fracx, double *fracy, int *xp, int *yp, int w2x, + int arg); +static void ss_allobj (Display *dsp, int stview, double scale, double selt, + double celt, double selg, double celg, unsigned nx, unsigned ny); +static void ss_loc (HLoc *hp, double scale, double selt, double celt, + double selg, double celg, unsigned nx, unsigned ny); +static int ss_newtrail (TrTS ts[], TrState *statep, XtPointer client); +static void hloc_reset (Now *np); +static HLoc *hloc_grow (int dbidx); +static int hloc_add (int dbidx, Now *np, int lbl); +static void ap_free (void); +static int ap_add (Obj *op, HLoc *hp); +static void ap_label_cb (Widget w, XtPointer client, XtPointer call); +static void mk_gcs (void); + +static Widget ssshell_w; /* main solar system shell */ +static Widget hr_w, hlng_w, hlat_w; /* scales for heliocentric R, long, lat */ +static Widget ssda_w; /* solar system drawring area */ +static Widget ssframe_w; /* main's DA frame */ +static Widget dt_w; /* date/time stamp label widget */ +static Pixmap ss_pm; /* main view pixmap */ +static GC bgc; /* background GC */ + +static Widget stform_w; /* main stereo form dialog */ +static Widget parallax_w; /* scale to set amount of parallax */ +static Widget stda_w; /* stereo solar system drawring area */ +static Widget stframe_w; /* stereo's DA frame */ +static Pixmap st_pm; /* stereo view pixmap */ +static Widget stereo_w; /* stereo option TB */ +static int ss_w, ss_h; /* main window size */ +static int st_w, st_h; /* stereo window size */ + +static TrState trstate = { + TRLR_NONE, TRI_DAY, TRF_DATE, TRR_DAY, TRO_RIGHT, TRS_SMALL, 30 +}; + +enum {DRAGTOO, TRAILS, ECLIPTIC, LABELS, LEGS, DBTOO, STEREO}; + +#define WANTLBL FUSER2 /* mark object to be labeled */ + +#define MINMAG 3.0 /* minimum mag factor, pixels/AU */ +#define MAXMAG 250.0 /* maximum mag factor, pixels/AU */ +#define GAP 4 /* from object to its name, pixels */ +#define NECLPT 10 /* approx number of circles in ecliptic grid */ +#define NECLSEG 31 /* segments in each stereo ecliptic line */ +#define MOVIE_STEPSZ 120.0 /* movie step size, hours */ +#define BLOBW 2 /* size of dot dot drawn for objects, pixels */ +#define PICKRANGE 100 /* sqr of dist allowed from pointer */ + +/* whether each option is currently on */ +static int dbtoo; +static int dragtoo; +static int trails; +static Widget trails_w; /* trails TB, so we can turn on automatically*/ +static int ecliptic; +static int legs; +static int nametags; +static int stereo; +static int parallax; /* current value of desired parallax */ +static int anytrails; /* set if any trails -- for postscript label */ + +/* these are managed by the hloc_* functions. + * there is always at least one to show the object at the current location. + */ +static HLoc **points; /* malloc'd lists of points for each fav now */ +static int *npoints; /* number of points for each fav */ +static Obj **favs; /* current list of Favorites */ +static int nfavs; /* n */ + +#define ALLPCK 64 /* increase allp this many at once */ +static AllP *allp; /* malloced list of "all" objects */ +static int nallp; /* entries in allp[] in use */ +static int mallp; /* entries in allp[] at most */ + +/* info about the popup widget and what it is currently working with */ +typedef struct { + Widget pu_w; + Widget name_w; + Widget ud_w; + Widget ut_w; + Widget ra_w; + Widget dec_w; + Widget hlong_w; + Widget hlat_w; + Widget eadst_w; + Widget sndst_w; + Widget elong_w; + Widget mag_w; + Widget lbl_w; + Widget fav_w; + Obj *op; /* selected object */ +} Popup; +static Popup pu; + +static GC egc; /* gc for drawing */ +static XFontStruct *efsp; /* text info for drawing */ + +/* connect handler for some fun kb shortcuts */ +static void ss_shortcuts (Widget w, XEvent *e,String *args,Cardinal *nargs); +static XtActionsRec scuts[] = { + {"SSScut", ss_shortcuts} +}; + + +static char earthname[] = "Earth"; /* local "Moon" alias */ +static char sscategory[] = "Solar System"; /* Save category */ +static char sstrres[] = "SolSysTrailState"; /* trail resource */ + +/* called when the solar system view is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, just go for it. + */ +void +ss_manage () +{ + if (!ssshell_w) { + XtAppAddActions (xe_app, scuts, XtNumber(scuts)); + ss_create_shell(); + st_create_form(); + hloc_reset (mm_get_now()); + timestamp (mm_get_now(), dt_w); + } + + XtPopup (ssshell_w, XtGrabNone); + set_something (ssshell_w, XmNiconic, (XtArgVal)False); + + /* register we are now up */ + setXRes (ss_viewupres(), "1"); +} + +/* called when we are to update our view. + * don't bother if we are unmanaged. + */ +/* ARGSUSED */ +void +ss_update (np, how_much) +Now *np; +int how_much; +{ + if (!isUp(ssshell_w)) + return; + + watch_cursor (1); + + /* set the first (current) entry for each favorite object to now + * and erase all other entries. + */ + hloc_reset (np); + + /* redraw everything */ + ss_all(); + timestamp (np, dt_w); + + watch_cursor (0); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +ss_newres() +{ + if (!ssshell_w) + return; + mk_gcs(); + ss_update (mm_get_now(), 1); +} + +/* database has changed, or been appended to. + */ +void +ss_newdb (appended) +int appended; +{ + ss_update (mm_get_now(), 1); +} + +int +ss_ison() +{ + return (isUp(ssshell_w)); +} + +/* called to put up or remove the watch cursor. */ +void +ss_cursor (c) +Cursor c; +{ + Window win; + + if (ssshell_w && (win = XtWindow(ssshell_w)) != 0) { + Display *dsp = XtDisplay(ssshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +ss_viewupres() +{ + return ("SolSysViewUp"); +} + +/* create the main solarsystem shell */ +static void +ss_create_shell() +{ + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Solsys"}, + {"on Scales...", "Solsys_scales"}, + {"on Mouse...", "Solsys_mouse"}, + {"on Control...", "Solsys_control"}, + {"on View...", "Solsys_view"}, + }; + typedef struct { + char *name; /* name of widget, or NULL for sep */ + char *label; /* label on toggle button */ + int id; /* one of the toggle ids */ + int *state; /* int we use to keep state */ + Widget *wp; /* widget, or NULL */ + char *tip; /* tips text */ + } DrCtrl; + static DrCtrl drctrls[] = { + {"Trails", "Trails", TRAILS, &trails, &trails_w, + "Display trails, if currently defined"}, + {"Ecliptic", "Ecliptic", ECLIPTIC, &ecliptic, NULL, + "Display sun-centered circles to mark the ecliptic plane"}, + {"Labels", "Labels", LABELS, &nametags, NULL, + "Label Favorites with their names "}, + {"Legs", "Legs", LEGS, &legs, NULL, + "Connect objects to the ecliptic to depict height"}, + {"DBToo", "DB too", DBTOO, &dbtoo, NULL, + "Display all loaded solar system objects, not just favorites"}, + }; + Widget mb_w, pd_w, cb_w; + Widget w; + Widget ssform_w; + XmString str; + Arg args[20]; + int i; + int n; + + /* create the form and shell */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Solar System view"); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "SolSys"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + ssshell_w = XtCreatePopupShell ("SolarSystem", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (ssshell_w); + set_something (ssshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (ssshell_w, XmNpopdownCallback, ss_popdown_cb, 0); + sr_reg (ssshell_w, "XEphem*SolarSystem.width", sscategory, 0); + sr_reg (ssshell_w, "XEphem*SolarSystem.height", sscategory, 0); + sr_reg (ssshell_w, "XEphem*SolarSystem.x", sscategory, 0); + sr_reg (ssshell_w, "XEphem*SolarSystem.y", sscategory, 0); + sr_reg (NULL, ss_viewupres(), sscategory, 0); + + n = 0; + ssform_w = XmCreateForm (ssshell_w, "SSF", args, n); + XtAddCallback (ssform_w, XmNhelpCallback, ss_help_cb, 0); + XtManageChild (ssform_w); + + /* put a menu bar across the top with the various pulldown menus */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (ssform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* add the print push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "SSPrint", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, ss_print_cb, (XtPointer)1); + wtip (w, "Print this view"); + XtManageChild (w); + + /* add the favorites push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "SSFav", args, n); + set_xmstring (w, XmNlabelString, "Favorites..."); + XtAddCallback (w, XmNactivateCallback,(XtCallbackProc)fav_manage,0); + wtip (w, "Bring up the Favorites window"); + XtManageChild (w); + + /* add the annot push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "SSUA", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, NULL); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* make a PB to bring up the trail definer */ + + str = XmStringCreate("Create Trails...", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreatePushButton (pd_w, "TPB", args, n); + XtAddCallback (w, XmNactivateCallback, ss_trail_cb, NULL); + wtip (w, "Set up to display object locations over time"); + XtManageChild (w); + XmStringFree (str); + + /* add the "movie" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Anim", args, n); + set_xmstring (w, XmNlabelString, "Animation demo"); + XtAddCallback (w, XmNactivateCallback, ss_anim_cb, 0); + wtip (w, "Start/Stop a fun time-lapse animation"); + XtManageChild (w); + + /* add the movie loop push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "SSML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, ss_mloop_cb, NULL); + wtip (w, "Add this scene to the movie loop"); + XtManageChild (w); + + /* add the "drag too" toggle button after a sep */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (pd_w, "LiveDrag", args, n); + XtAddCallback (w, XmNvalueChangedCallback, ss_activate_cb, + (XtPointer)DRAGTOO); + wtip(w,"Update scene while dragging scales, not just when release"); + XtManageChild (w); + set_xmstring (w, XmNlabelString, "Live Dragging"); + dragtoo = XmToggleButtonGetState (w); + sr_reg (w, NULL, sscategory, 1); + + /* add the "stereo" toggle button */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + stereo_w = XmCreateToggleButton (pd_w, "Stereo", args, n); + XtAddCallback (stereo_w, XmNvalueChangedCallback, ss_activate_cb, + (XtPointer)STEREO); + wtip (stereo_w, "Open another window showing view for 2nd eye"); + set_xmstring (stereo_w, XmNlabelString, "Stereo pair"); + XtManageChild (stereo_w); + stereo = XmToggleButtonGetState (stereo_w); + + /* add the "close" push button beneath a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, ss_close_cb, 0); + wtip (w, "Close this and all supporing dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + /* make all the view options TBs */ + + for (i = 0; i < XtNumber(drctrls); i++) { + DrCtrl *cp = &drctrls[i]; + + if (cp->name) { + str = XmStringCreate(cp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton(pd_w, cp->name, args, n); + *(cp->state) = XmToggleButtonGetState (w); + XtAddCallback(w, XmNvalueChangedCallback, ss_activate_cb, + (XtPointer)(long int)cp->id); + if (cp->wp) + *(cp->wp) = w; + if (cp->tip) + wtip (w, cp->tip); + XtManageChild (w); + XmStringFree (str); + sr_reg (w, NULL, sscategory, 1); + } else { + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + } + } + + /* make the "help" pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hop = &helpon[i]; + + n = 0; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtManageChild (w); + XtAddCallback (w, XmNactivateCallback, ss_helpon_cb, + (XtPointer)(hop->key)); + set_xmstring (w, XmNlabelString, hop->label); + } + + /* make the time/date stamp label across the bottom */ + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + dt_w = XmCreateLabel (ssform_w, "DateStamp", args, n); + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make the bottom scale */ + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNmaximum, 359); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + hlng_w = XmCreateScale (ssform_w, "HLongScale", args, n); + XtAddCallback (hlng_w, XmNdragCallback, ss_changed_cb, 0); + XtAddCallback (hlng_w, XmNvalueChangedCallback, ss_changed_cb, 0); + wtip (hlng_w, "Set heliocentric longitude of vantage point"); + XtManageChild (hlng_w); + sr_reg (hlng_w, NULL, sscategory, 0); + + /* make the left scale */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, hlng_w); n++; + XtSetArg (args[n], XmNdecimalPoints, 1); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + hr_w = XmCreateScale (ssform_w, "DistScale", args, n); + XtAddCallback (hr_w, XmNdragCallback, ss_changed_cb, 0); + XtAddCallback (hr_w, XmNvalueChangedCallback, ss_changed_cb, 0); + wtip (hr_w, "Zoom in and out"); + XtManageChild (hr_w); + sr_reg (hr_w, NULL, sscategory, 0); + + /* make the right scale */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, hlng_w); n++; + XtSetArg (args[n], XmNmaximum, 90); n++; + XtSetArg (args[n], XmNminimum, -90); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + hlat_w = XmCreateScale (ssform_w, "HLatScale", args, n); + XtAddCallback (hlat_w, XmNdragCallback, ss_changed_cb, 0); + XtAddCallback (hlat_w, XmNvalueChangedCallback, ss_changed_cb, 0); + wtip (hlat_w, "Set heliocentric latitude of vantage point"); + XtManageChild (hlat_w); + sr_reg (hlat_w, NULL, sscategory, 0); + + /* make a frame for the drawing area */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, hlng_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, hr_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, hlat_w); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + ssframe_w = XmCreateFrame (ssform_w, "SolarFrame", args, n); + XtManageChild (ssframe_w); + + /* make a drawing area for drawing the solar system */ + + n = 0; + ssda_w = XmCreateDrawingArea (ssframe_w, "SolSysMap", args, n); + XtAddCallback (ssda_w, XmNexposeCallback, ss_da_exp_cb, 0); + XtAddCallback (ssda_w, XmNinputCallback, ss_da_input_cb, 0); + XtManageChild (ssda_w); + + /* register trail resource and init setup */ + sr_reg (NULL, sstrres, sscategory, 0); + tr_getres (sstrres, &trstate); +} + +/* create the stereo solarsystem form */ +static void +st_create_form() +{ + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + XtSetArg (args[n], XmNnoResize, True); n++; /* user can't resize */ + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + stform_w = XmCreateFormDialog (ssshell_w, "StereoSolarSystem", args,n); + set_something (stform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (stform_w, XmNmapCallback, st_map_cb, NULL); + XtAddCallback (stform_w, XmNunmapCallback, st_unmap_cb, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Stereo Solar System"); n++; + XtSetValues (XtParent(stform_w), args, n); + + /* make the parallax scale at the bottom. + * the value is the offset of the sun (at a=0), in pixels. + */ + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 20); n++; + XtSetArg (args[n], XmNminimum, -20); n++; + XtSetArg (args[n], XmNscaleMultiple, 2); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; + parallax_w = XmCreateScale (stform_w, "Parallax", args, n); + XtAddCallback (parallax_w, XmNdragCallback, st_parallax_cb, 0); + XtAddCallback (parallax_w, XmNvalueChangedCallback, st_parallax_cb, 0); + XtManageChild (parallax_w); + XmScaleGetValue (parallax_w, ¶llax); + + /* make a frame for the drawing area */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, parallax_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + stframe_w = XmCreateFrame (stform_w, "StereoFrame", args, n); + XtManageChild (stframe_w); + + /* make a drawing area for drawing the stereo solar system */ + + n = 0; + stda_w = XmCreateDrawingArea (stframe_w, "SSStereo", args, n); + XtAddCallback (stda_w, XmNexposeCallback, st_da_exp_cb, 0); + XtAddCallback (stda_w, XmNinputCallback, ss_da_input_cb, 0); + XtManageChild (stda_w); +} + +/* callback to bring up the "Create trails.." PB. + */ +/* ARGSUSED */ +static void +ss_trail_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + tr_setup ("xephem Solar System trails setup", "Solar System", &trstate, + ss_newtrail, NULL); +} + +/* callback from the control toggle buttons + */ +/* ARGSUSED */ +static void +ss_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int what = (long int) client; + + switch (what) { + case DRAGTOO: + dragtoo = XmToggleButtonGetState(w); + break; + case TRAILS: + trails = XmToggleButtonGetState(w); + ss_all (); + break; + case ECLIPTIC: + ecliptic = XmToggleButtonGetState(w); + ss_all (); + break; + case LEGS: + legs = XmToggleButtonGetState(w); + ss_all (); + break; + case LABELS: + nametags = XmToggleButtonGetState(w); + ss_all (); + break; + case DBTOO: + dbtoo = XmToggleButtonGetState(w); + ss_all (); + break; + case STEREO: + stereo = XmToggleButtonGetState(w); + if (stereo) + XtManageChild(stform_w); /* expose will update it */ + else + XtUnmanageChild(stform_w); + break; + default: + printf ("solsysmenu.c: unknown toggle button\n"); + abort(); + } +} + +/* callback when any of the scales change value. + * we disable dragging when "All objects" is on. + */ +/* ARGSUSED */ +static void +ss_changed_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleCallbackStruct *sp = (XmScaleCallbackStruct *) call; + + if (w != hr_w && w != hlng_w && w != hlat_w) { + printf ("solsysmenu.c: Unknown scaled callback\n"); + abort(); + } + + if (!dbtoo || dragtoo || sp->reason == XmCR_VALUE_CHANGED) + ss_all(); +} + +/* callback from the Close button. + */ +/* ARGSUSED */ +static void +ss_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do rest of the work */ + XtPopdown (ssshell_w); +} + +/* callback to add scene to the movie loop + */ +/* ARGSUSED */ +static void +ss_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (ss_pm, dt_w); +} + +/* callback from popping down the main view */ +/* ARGSUSED */ +static void +ss_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (stform_w); + + if (ss_pm) { + XFreePixmap (XtD, ss_pm); + ss_pm = (Pixmap) 0; + } + + /* stop movie that might be running */ + mm_movie (0.0); + + ap_free(); + + /* register we are now down */ + setXRes (ss_viewupres(), "0"); +} + +/* callback from the Print button. + */ +/* ARGSUSED */ +static void +ss_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Solar System", ss_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +ss_print () +{ + Now *np = mm_get_now(); + unsigned int nx, ny; + unsigned int bw, d; + Window root; + int x, y; + + if (!ss_ison()) { + xe_msg (1, "Solar System View must be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get info about ss_pm size */ + XGetGeometry(XtD, ss_pm, &root, &x, &y, &nx, &ny, &bw, &d); + + /* draw in an area 6.5w x 7h centered 1in down from top */ + if (14*nx >= 13*ny) + XPSXBegin (ss_pm, 0, 0, nx, ny, 1*72, 10*72, (int)(6.5*72)); + else { + int pw = 72*7*nx/ny; /* width on paper when 7 hi */ + XPSXBegin (ss_pm, 0, 0, nx, ny, (int)((8.5*72-pw)/2), 10*72, pw); + } + + /* redraw the main view -- *not* the stereo view */ + ss_redraw (); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + ss_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +ss_ps_annotate (np) +Now *np; +{ + char dir[128]; + char buf[128]; + char *bp; + double elt, elng; + int sv; + int y; + + XmScaleGetValue (hlat_w, &sv); + elt = degrad(sv); + XmScaleGetValue (hlng_w, &sv); + elng = degrad(sv); + + /* title, of sorts */ + + y = AROWY(9); + (void) sprintf (dir, "(XEphem Solar System View) 306 %d cstr\n", y); + XPSDirect (dir); + + /* label trail interval, if any */ + if (trails && anytrails) { + switch (trstate.i) { + case TRI_5MIN: (void) strcpy (buf, "5 Minutes"); break; + case TRI_HOUR: (void) strcpy (buf, "1 Hour"); break; + case TRI_DAY: (void) strcpy (buf, "1 Day"); break; + case TRI_WEEK: (void) strcpy (buf, "1 Week"); break; + case TRI_MONTH:(void) strcpy (buf, "1 Month"); break; + case TRI_YEAR: (void) strcpy (buf, "1 Year"); break; + case TRI_CUSTOM: (void) sprintf (buf, "%g Days", trstate.customi); + break; + default: printf ("Solsys trstate.i = %d\n", trstate.i); abort(); + } + + y = AROWY(8); + (void) sprintf (dir, "(Trail Interval is %s) 306 %d cstr\n", buf,y); + XPSDirect (dir); + } + + /* left column */ + y = AROWY(7); + fs_sexa (buf, raddeg(elt), 3, 60); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, + "(Heliocentric Latitude:) 204 %d rstr (%s) 214 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(6); + fs_sexa (buf, raddeg(elng), 4, 60); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, + "(Heliocentric Longtude:) 204 %d rstr (%s) 214 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + /* right column */ + y = AROWY(7); + fs_time (buf, mjd_hr(mjd)); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(UTC Time:) 450 %d rstr (%s) 460 %d lstr\n", + y, bp, y); + XPSDirect (dir); + + y = AROWY(6); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + for (bp = buf; *bp == ' '; bp++) continue; + (void) sprintf (dir, "(UTC Date:) 450 %d rstr (%s) 460 %d lstr\n", + y, bp, y); + XPSDirect (dir); +} + +/* action routine to implement some keyboard shortcuts. + * SSScut(a,x) where a selects what and x is a factor. + */ +static void +ss_shortcuts (w, e, p, n) +Widget w; +XEvent *e; +String *p; +Cardinal *n; +{ + int what, scale; + int add; + + if (!(n && *n == 2)) { + printf ("Bad ss_shortcuts: %p %d %p\n", n, n?*n:0, p); + abort(); + } + + what = atoi(p[0]); + add = atoi(p[1]); + switch (what) { + case 0: /* rotate */ + XmScaleGetValue (hlng_w, &scale); + scale += add; + if (scale < 0) scale += 360; + if (scale > 359) scale -= 360; + XmScaleSetValue (hlng_w, scale); + break; + + case 1: /* tilt */ + XmScaleGetValue (hlat_w, &scale); + scale += add; + if (scale < -90) scale = -90; + if (scale > 90) scale = 90; + XmScaleSetValue (hlat_w, scale); + break; + + case 2: /* zoom */ + XmScaleGetValue (hr_w, &scale); + scale += add; + if (scale < 0) scale = 0; + if (scale > 100) scale = 100; + XmScaleSetValue (hr_w, scale); + break; + + case 3: /* perspective */ + XmScaleGetValue (parallax_w, &scale); + scale += add; + if (scale < -20) scale = -20; + if (scale > 20) scale = 20; + parallax = scale; + XmScaleSetValue (parallax_w, scale); + break; + } + + /* draw then abandon auto repeats. + * N.B.: you'd think XmScaleSetValue would trigger callback but nope. + */ + ss_all(); + XSync (XtD, True); +} + +/* callback from the Movie button. + */ +/* ARGSUSED */ +static void +ss_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + mm_movie (MOVIE_STEPSZ); +} + +/* callback from the Help button. + */ +/* ARGSUSED */ +static void +ss_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This displays the solar system. The sun is always at the center. The left", +"slider controls your distance from the sun - further up is closer. The", +"bottom slider controls your heliocentric longitude. The right slider controls", +"your heliocentric latitude - your angle above the ecliptic." +}; + + hlp_dialog ("Solsys", msg, sizeof(msg)/sizeof(msg[0])); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +ss_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* expose of solar system drawing area. + */ +/* ARGSUSED */ +static void +ss_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Display *dsp = XtDisplay (w); + Window win = XtWindow (w); + unsigned int new_w, new_h; + unsigned int bw, d; + Window root; + int x, y; + + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + swa.bit_gravity = ForgetGravity; + XChangeWindowAttributes (e->display, e->window, + CWBitGravity, &swa); + before = 1; + } + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected ssda_w event. type=%d\n", c->reason); + abort(); + } + + /* make sure gc's are ready */ + if (!bgc) + mk_gcs(); + + /* make the pixmap if new or changed size */ + XGetGeometry(dsp, win, &root, &x, &y, &new_w, &new_h, &bw, &d); + if (!ss_pm || ss_w != new_w || ss_h != new_h) { + ss_w = new_w; + ss_h = new_h; + if (ss_pm) + XFreePixmap (dsp, ss_pm); + ss_pm = XCreatePixmap (dsp, win, ss_w, ss_h, d); + if (stereo) + st_track_size(); + ss_redraw(); + } + + ss_refresh(); +} + +/* ARGSUSED */ +static void +st_parallax_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmScaleGetValue (w, ¶llax); + ss_all (); +} + +/* called whenever the stereo scene is mapped. */ +/* ARGSUSED */ +static void +st_map_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + st_track_size(); +} + +/* set the size of the stereo DrawingArea the same as the main window's. + * we also try to position it just to the left, but it doesn't always work. + */ +static void +st_track_size() +{ + Dimension w, h; + Position mfx, mfy; + Arg args[20]; + int n; + + /* set sizes equal */ + n = 0; + XtSetArg (args[n], XmNwidth, &w); n++; + XtSetArg (args[n], XmNheight, &h); n++; + XtGetValues (ssda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNwidth, w); n++; + XtSetArg (args[n], XmNheight, h); n++; + XtSetValues (stda_w, args, n); + + /* set locations */ + n = 0; + XtSetArg (args[n], XmNx, &mfx); n++; + XtSetArg (args[n], XmNy, &mfy); n++; + XtGetValues (ssshell_w, args, n); + + n = 0; + XtSetArg (args[n], XmNx, mfx-w-30); n++; + XtSetArg (args[n], XmNy, mfy); n++; + XtSetValues (XtParent(stform_w), args, n); +} + +/* callback from unmapping the stereo view */ +/* ARGSUSED */ +static void +st_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + stereo = 0; + XmToggleButtonSetState(stereo_w, False, False); + + if (st_pm) { + XFreePixmap (XtD, st_pm); + st_pm = (Pixmap) 0; + } +} + +/* expose of stereo solar system drawing area. + */ +/* ARGSUSED */ +static void +st_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Display *dsp = XtDisplay (w); + Window win = XtWindow (w); + unsigned int new_w, new_h; + unsigned int bw, d; + Window root; + int x, y; + + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + swa.bit_gravity = ForgetGravity; + XChangeWindowAttributes (e->display, e->window, + CWBitGravity, &swa); + before = 1; + } + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected stda_w event. type=%d\n", c->reason); + abort(); + } + + /* make sure gc's are ready */ + if (!bgc) + mk_gcs(); + + /* make the pixmap if new or changed size */ + XGetGeometry(dsp, win, &root, &x, &y, &new_w, &new_h, &bw, &d); + if (!st_pm || st_w != new_w || st_h != new_h) { + st_w = new_w; + st_h = new_h; + if (st_pm) + XFreePixmap (dsp, st_pm); + st_pm = XCreatePixmap (dsp, win, st_w, st_h, d); + st_track_size(); + st_redraw(); + } + + st_refresh(); +} + +/* a dot has been picked: find what it is and report it. + * used for both main and stereo windows, decide based on w. + */ +/* ARGSUSED */ +static void +ss_da_input_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Now *np = mm_get_now(); + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + XEvent *ev = c->event; /* what happened */ + int st = w == stda_w; /* whether stereo or main window */ + int mind = PICKRANGE+1; /* min cursor distance so far */ + Obj *op = 0; /* closest */ + int fav = 0; /* whether op is fav or at large db */ + double Mjd = 0; /* when op is valid */ + int x, y; /* mouse coords */ + int i, j; /* indices */ + + if (c->reason != XmCR_INPUT) + return; + ev = c->event; + if (ev->xany.type != ButtonPress || ev->xbutton.button != Button3) + return; + + x = ((XButtonPressedEvent *)ev)->x; + y = ((XButtonPressedEvent *)ev)->y; + + /* first check the fav objects and their trails */ + for (i = 0; i < nfavs; i++) { + if (!is_ssobj(favs[i])) + continue; + for (j = 0; j < npoints[i]; j++) { + HLoc *hp = &points[i][j]; + int dx = st ? x - hp->stx : x - hp->sx; + int d = dx*dx + (y - hp->sy)*(y - hp->sy); + if (d < mind) { + mind = d; + op = &hp->o; + Mjd = hp->trts.t; + fav = 1; + } + } + } + + /* then check the other objects for anything closer still */ + for (i = 0; i < nallp; i++) { + AllP *ap = &allp[i]; + int dx = st ? x - ap->stx : x - ap->sx; + int d = dx*dx + (y - ap->sy)*(y - ap->sy); + if (d < mind) { + mind = d; + op = ap->op; + Mjd = mjd; + fav = 0; + } + } + + /* do nothing if whatever was closest is within picking range */ + if (mind > PICKRANGE) + return; + + /* advertise op for the controls and put up info */ + pu.op = op; + ss_popup (ev, op, Mjd, fav); +} + +/* fill in the popup with info from op whose info is valid at Mjd. + * fav is set if op is already one of the favorites. + * display fields the same way they are in main data menu. + * position the popup as indicated by ev and display it. + * it goes down by itself. + */ +static void +ss_popup (XEvent *ev, Obj *op, double Mjd, int fav) +{ + char buf[128]; + double d; + + /* create the popup first time */ + if (!pu.pu_w) + ss_create_popup(); + + /* set TB based on op */ + XmToggleButtonSetState (pu.lbl_w, !!(op->o_flags & WANTLBL), False); + + if (is_planet(op, MOON)) { + /* MOON is used to hold Earth info */ + set_xmstring (pu.name_w, XmNlabelString, earthname); + XtManageChild (pu.ud_w); + XtManageChild (pu.ut_w); + XtManageChild (pu.hlong_w); + XtUnmanageChild (pu.ra_w); + XtUnmanageChild (pu.dec_w); + XtUnmanageChild (pu.mag_w); + XtUnmanageChild (pu.hlat_w); + XtUnmanageChild (pu.eadst_w); + XtManageChild (pu.sndst_w); + XtUnmanageChild (pu.elong_w); + } else { + set_xmstring (pu.name_w, XmNlabelString, op->o_name); + XtManageChild (pu.ra_w); + XtManageChild (pu.dec_w); + XtManageChild (pu.mag_w); + if (is_planet (op, SUN)) { + XtUnmanageChild (pu.ud_w); + XtUnmanageChild (pu.ut_w); + XtUnmanageChild (pu.hlong_w); + XtUnmanageChild (pu.hlat_w); + XtUnmanageChild (pu.eadst_w); + XtUnmanageChild (pu.sndst_w); + XtUnmanageChild (pu.elong_w); + } else { + XtManageChild (pu.ud_w); + XtManageChild (pu.ut_w); + XtManageChild (pu.hlong_w); + XtManageChild (pu.hlat_w); + XtManageChild (pu.eadst_w); + XtManageChild (pu.sndst_w); + XtManageChild (pu.elong_w); + } + } + + if (fav) + XtUnmanageChild (pu.fav_w); + else + XtManageChild (pu.fav_w); + + (void)strcpy (buf, "UT Date: "); + fs_date (buf+strlen(buf), pref_get(PREF_DATE_FORMAT), mjd_day(Mjd)); + set_xmstring (pu.ud_w, XmNlabelString, buf); + + (void)strcpy (buf, "UT Time: "); + fs_time (buf+strlen(buf), mjd_hr(Mjd)); + set_xmstring (pu.ut_w, XmNlabelString, buf); + + (void)strcpy (buf, "RA: "); + fs_ra (buf+strlen(buf), op->s_ra); + set_xmstring (pu.ra_w, XmNlabelString, buf); + + (void)strcpy (buf, "Dec: "); + fs_prdec (buf+strlen(buf), op->s_dec); + set_xmstring (pu.dec_w, XmNlabelString, buf); + + (void) sprintf (buf, "Mag: %.3g", get_mag(op)); + set_xmstring (pu.mag_w, XmNlabelString, buf); + + (void)strcpy (buf, "Hel Long: "); + fs_pangle (buf+strlen(buf), op->s_hlong); + set_xmstring (pu.hlong_w, XmNlabelString, buf); + + (void)strcpy (buf, "Hel Lat: "); + fs_pangle (buf+strlen(buf), op->s_hlat); + set_xmstring (pu.hlat_w, XmNlabelString, buf); + + d = op->s_edist; + (void)strcpy (buf, "Earth Dist: "); + (void)sprintf (buf+strlen(buf), d >= 9.99995 ? "%6.3f" : "%6.4f", d); + set_xmstring (pu.eadst_w, XmNlabelString, buf); + + (void)strcpy (buf, "Sun Dist: "); + d = is_planet(op, MOON) ? op->s_edist : op->s_sdist; + (void)sprintf (buf+strlen(buf), d >= 9.99995 ? "%6.3f" : "%6.4f", d); + set_xmstring (pu.sndst_w, XmNlabelString, buf); + + (void)strcpy (buf, "Elongation: "); + (void)sprintf (buf+strlen(buf), "%6.1f", op->s_elong); + set_xmstring (pu.elong_w, XmNlabelString, buf); + + XmMenuPosition (pu.pu_w, (XButtonPressedEvent *)ev); + XtManageChild (pu.pu_w); +} + +/* create the id popup */ +static void +ss_create_popup() +{ + static struct { + Widget *wp; + char *tip; + } puw[] = { + {&pu.name_w, "Object name"}, + {&pu.ud_w, "UT Date of this information"}, + {&pu.ut_w, "UT Time of this information"}, + {&pu.ra_w, "RA of object"}, + {&pu.dec_w, "Declination of object"}, + {&pu.hlong_w, "Heliocentric longitude"}, + {&pu.hlat_w, "Heliocentric latitide"}, + {&pu.eadst_w, "AU from Earth to object"}, + {&pu.sndst_w, "AU from Sun to object"}, + {&pu.elong_w, "Angle between Sun and object, +East"}, + {&pu.mag_w, "Nominal magnitude"}, + }; + Arg args[20]; + Widget w; + int n; + int i; + + /* create the popup */ + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + pu.pu_w = XmCreatePopupMenu (ssda_w, "SSPopup", args, n); + + /* create the main label widgets */ + + for (i = 0; i < XtNumber(puw); i++) { + n = 0; + w = XmCreateLabel (pu.pu_w, "SSPopLbl", args, n); + XtManageChild (w); + *(puw[i].wp) = w; + wtip (w, puw[i].tip); + } + + /* separator */ + + n = 0; + w = XmCreateSeparator (pu.pu_w, "Sep", args, n); + XtManageChild (w); + + /* the label TB */ + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + pu.lbl_w = XmCreateToggleButton (pu.pu_w, "LblTB", args, n); + XtAddCallback (pu.lbl_w, XmNvalueChangedCallback, ap_label_cb, NULL); + set_xmstring (pu.lbl_w, XmNlabelString, "Persistent Label"); + wtip (pu.lbl_w, "Whether to always label this object on the map"); + XtManageChild (pu.lbl_w); + + /* PB to add to favorites */ + + n = 0; + pu.fav_w = XmCreatePushButton (pu.pu_w, "FPB", args, n); + XtAddCallback (pu.fav_w, XmNactivateCallback, ss_fav_cb, NULL); + set_xmstring (pu.fav_w, XmNlabelString, "Add to Favorites"); + wtip (pu.fav_w, "Add this object to the Favorites list"); + XtManageChild (pu.fav_w); +} + +/* redraw the main view and, if enables, the stereo view. + * ok to use this everywhere _except_ the individual window expose callbacks. + */ +static void +ss_all() +{ + watch_cursor (1); + + ss_redraw(); + if (stereo) + st_redraw(); + ss_refresh(); + if (stereo) + st_refresh(); + + watch_cursor (0); +} + +/* redraw the main sol system view. + */ +static void +ss_redraw() +{ + Display *dsp = XtDisplay(ssda_w); + int sv; /* ScaleValue tmp */ + double scale; /* pixels per au */ + double elt, selt, celt; /* heliocentric lat of eye, rads */ + double elg, selg, celg; /* heliocentric lng of eye, rads */ + int i; + + watch_cursor (1); + + /* flag set for postscript if any trails drawn */ + anytrails = 0; + + /* clear */ + XFillRectangle (dsp, ss_pm, bgc, 0, 0, ss_w, ss_h); + + /* establish the scales */ + XmScaleGetValue (hr_w, &sv); + scale = MINMAG * pow (MAXMAG/MINMAG, sv/100.); + XmScaleGetValue (hlat_w, &sv); + elt = degrad(sv); + selt = sin(elt); + celt = cos(elt); + XmScaleGetValue (hlng_w, &sv); + elg = degrad(sv+90.0); + selg = sin(elg); + celg = cos(elg); + + /* draw the ecliptic plane, if desired */ + if (ecliptic) { + double minau, maxau; + double aus[NECLPT+2]; + char spacing[64]; + int nau, i; + + XSetFont (XtD, egc, efsp->fid); + + minau = 0; + maxau = ss_w > ss_h ? ss_w/2.0/scale : ss_h/2.0/scale; + nau = tickmarks (minau, maxau, NECLPT, aus); + + /* draw tick mark spacing message in upper left corner */ + (void) sprintf (spacing, "%g AU", aus[1] - aus[0]); + XPSDrawString(dsp, ss_pm, egc, 1, 15, spacing, strlen(spacing)); + + /* draw each grid line. + * the main view uses simple elipses. + */ + for (i = 0; i < nau; i++) { + int arcx, arcy, arcw, arch; + double au = aus[i]; + HLoc hhl, whl; /* width and height */ + + if (au <= 0.0) + continue; + + whl.x = au*celg; /* a point to the right */ + whl.y = au*selg; + whl.z = 0.0; + ss_loc (&whl, scale, selt, celt, selg, celg, ss_w, ss_h); + hhl.x = -au*selg; /* a point up */ + hhl.y = au*celg; + hhl.z = 0.0; + ss_loc (&hhl, scale, selt, celt, selg, celg, ss_w, ss_h); + if (selt < 0.0) + hhl.sy = ss_h - hhl.sy; + + arcx = ss_w - whl.sx; + arcy = hhl.sy; + arcw = 2*whl.sx - ss_w - 1; + arch = ss_h - 2*hhl.sy - 1; + if (arch <= 0) + arch = 1; /* avoid pushing our luck with XDrawArc */ + if (arcw <= 0) + arcw = 1; /* avoid pushing our luck with XDrawArc */ + XPSDrawArc (dsp, ss_pm, egc, arcx, arcy, arcw, arch, 0,360*64); + } + } + + /* now draw the "all" objects, if interested */ + ap_free(); + if (dbtoo) + ss_allobj (dsp, 0, scale, selt, celt, selg, celg, ss_w, ss_h); + + /* overlay each favorite and any additional points as trails. */ + for (i = 0; i < nfavs; i++) { + int np = npoints[i]; + Obj *op = favs[i]; + GC gc; + + if (!is_ssobj(op)) + continue; + + obj_pickgc (op, ssda_w, &gc); /* moonColor for Earth? */ + + if (np > 0) { + int j; + + for (j = 0; j < np; j++) { + HLoc *hp = &points[i][j]; + HLoc leghl; /* for projection of planet on ecliptic plane */ + + if (!trails && j > 0) + break; + + /* compute screen location */ + ss_loc (hp, scale, selt, celt, selg, celg, ss_w, ss_h); + + /* draw leg down to ecliptic if desired */ + if (legs) { + leghl = *hp; + leghl.z = 0; + ss_loc (&leghl, scale, selt, celt, selg, celg, + ss_w, ss_h); + XPSDrawLine(dsp, ss_pm, gc, hp->sx, hp->sy, leghl.sx, + leghl.sy); + } + + /* draw a blob for the object */ + XPSDrawArc (dsp, ss_pm, gc, hp->sx-1, hp->sy-1, BLOBW,BLOBW, + 0, 64*360); + + /* connect and draw time stamp if more than one trail point. + * (first point is current pos; 2nd is first of trail set) + * we do our own tick marks. + */ + if (j > 1) { + HLoc *pp = &points[i][j-1]; /* prior trail point */ + + tr_draw (dsp, ss_pm, gc, 0, 0, &hp->trts, + j==2 ? &pp->trts : NULL, + &trstate, pp->sx, pp->sy, hp->sx, hp->sy); + anytrails++; + } + + /* draw the SUN as a circle at the center */ + if (op == db_basic(SUN)) + XPSDrawArc (dsp, ss_pm, gc, hp->sx-3, hp->sy-3, + 7, 7, 0, 64*360); + + /* draw the object name if desired. + * first item on list uses real object's flags. + */ + if (j > 0) + op = &hp->o; + if ((op->o_flags & WANTLBL) || (j == 0 && nametags)) { + char *name = op->pl_code==MOON ? earthname : op->o_name; + XPSDrawString (dsp, ss_pm, gc, hp->sx+GAP, hp->sy, + name, strlen(name)); + } + } + } + } + + /* user annotation */ + ano_draw (ssda_w, ss_pm, ss_ano, 0); + + /* all finished */ + watch_cursor (0); +} + +/* convert X Windows coords to/from X Windows coords depending on w2x (!) + * TODO: I know this is lame but au scale uses tickmarks, making it hard to use + * relative screen loc and the scene is 3D making it ambiguous to try and + * store a sol sys position. + * return whether visible + */ +static int +ss_ano (double *sxp, double *syp, int *xp, int *yp, int w2x, int arg) +{ + if (w2x) { + *xp = (int)*sxp; + *yp = (int)*syp; + } else { + *sxp = (double)*xp; + *syp = (double)*yp; + } + + return (1); +} + +/* copy the existing main pixmap to the visible screen window */ +static void +ss_refresh () +{ + Display *dsp = XtDisplay(ssda_w); + Window win = XtWindow(ssda_w); + + /* copy the work pixmap to the screen */ + XCopyArea (dsp, ss_pm, win, bgc, 0, 0, ss_w, ss_h, 0, 0); +} + +/* redraw the stereo view. + */ +static void +st_redraw() +{ + Display *dsp = XtDisplay(stda_w); + int sv; /* ScaleValue tmp */ + double scale; /* pixels per au */ + double elt, selt, celt; /* heliocentric lat of eye, rads */ + double elg, selg, celg; /* heliocentric lng of eye, rads */ + int i; + + watch_cursor (1); + + /* clear */ + XFillRectangle (dsp, st_pm, bgc, 0, 0, st_w, st_h); + + /* establish the scales */ + XmScaleGetValue (hr_w, &sv); + scale = MINMAG * pow (MAXMAG/MINMAG, sv/100.); + XmScaleGetValue (hlat_w, &sv); + elt = degrad(sv); + selt = sin(elt); + celt = cos(elt); + XmScaleGetValue (hlng_w, &sv); + elg = degrad(sv+90.0); + selg = sin(elg); + celg = cos(elg); + + /* draw the ecliptic plane, if desired */ + if (ecliptic) { + double minau, maxau; + double aus[NECLPT+2]; + char spacing[64]; + int nau, i; + + XSetFont (XtD, egc, efsp->fid); + + minau = 0; + maxau = st_w > st_h ? st_w/2.0/scale : st_h/2.0/scale; + nau = tickmarks (minau, maxau, NECLPT, aus); + + /* draw tick mark spacing message in upper left corner */ + (void) sprintf (spacing, "%g AU", aus[1] - aus[0]); + XDrawString(dsp, st_pm, egc, 1, 15, spacing, strlen(spacing)); + + /* draw each grid line. + * the stereo view uses polylines drawn in world coords -- slower! + */ + for (i = 0; i < nau; i++) { + double au = aus[i]; + XPoint xps[NECLSEG+1]; /* +1 to close */ + int s; + + if (au <= 0.0) + continue; + + for (s = 0; s < NECLSEG; s++) { + double hlng = s*2*PI/NECLSEG; + HLoc hloc; + + hloc.x = au*cos(hlng); + hloc.y = au*sin(hlng); + hloc.z = 0.0; + ss_loc (&hloc, scale, selt, celt, selg, celg, st_w, st_h); + xps[s].x = (short) hloc.stx; + xps[s].y = (short) hloc.sy; + } + + xps[NECLSEG] = xps[0]; /* close */ + XDrawLines (dsp, st_pm, egc, xps, NECLSEG+1, CoordModeOrigin); + } + } + + /* now draw the "all" objects, if interested */ + if (dbtoo) + ss_allobj (dsp, 1, scale, selt, celt, selg, celg, st_w, st_h); + + /* overlay each favorite and any additional points as trails. */ + for (i = 0; i < nfavs; i++) { + Obj *op = favs[i]; + GC gc; + + if (!is_ssobj(op)) + continue; + + obj_pickgc (op, ssda_w, &gc); /* moonColor for Earth? */ + + if (npoints[i] > 0) { + int np = npoints[i]; + int j; + + for (j = 0; j < np; j++) { + HLoc *hp = &points[i][j]; + HLoc leghl; /* for projection of planet on ecliptic plane */ + + if (!trails && j > 0) + break; + + /* compute screen location */ + ss_loc (hp, scale, selt, celt, selg, celg, st_w, st_h); + + /* draw leg down to ecliptic if desired */ + if (legs) { + leghl = *hp; + leghl.z = 0; + ss_loc (&leghl, scale, selt, celt, selg, celg, + st_w, st_h); + XPSDrawLine(dsp, st_pm, gc, hp->stx, hp->sy, leghl.stx, + leghl.sy); + } + + /* draw a blob for the object */ + XPSDrawArc (dsp, st_pm, gc, hp->stx-1, hp->sy-1,BLOBW,BLOBW, + 0, 64*360); + + /* connect and draw time stamp if more than one trail point. + * (first point is current pos; 2nd is first of trail set) + * we do our own tick marks. + */ + if (j > 1) { + HLoc *pp = &points[i][j-1]; /* prior trail point */ + + tr_draw (dsp, st_pm, gc, 0, 0, &hp->trts, + j==2 ? &pp->trts : NULL, + &trstate, pp->stx, pp->sy, hp->stx, hp->sy); + anytrails++; + } + + /* draw the SUN as a circle at the center */ + if (op == db_basic(SUN)) + XPSDrawArc (dsp, st_pm, gc, hp->stx-3, hp->sy-3, + 7, 7, 0, 64*360); + + /* draw the object name if desired. + * first item on list uses real object's flags. + */ + if (j > 0) + op = &hp->o; + if ((op->o_flags & WANTLBL) || (j == 0 && nametags)) { + char *name = op->pl_code==MOON ? earthname : op->o_name; + XPSDrawString (dsp, st_pm, gc, hp->stx+GAP, hp->sy, + name, strlen(name)); + } + } + } + } + + /* user annotation */ + ano_draw (stda_w, st_pm, st_ano, 0); + + /* all finished */ + watch_cursor (0); +} + +/* convert X Windows coords to/from X Windows coords depending on w2x (!) + * this is lame but au scale uses tickmarks, making it hard to use relative + * screen loc and the scene is 3D making it ambiguous to try and store a + * sol sys position. + * return whether visible + */ +static int +st_ano (double *sxp, double *syp, int *xp, int *yp, int w2x, int arg) +{ + if (w2x) { + *xp = (int)*sxp; + *yp = (int)*syp; + } else { + *sxp = (double)*xp; + *syp = (double)*yp; + } + + return (1); +} + +/* copy the existing stereo pixmap to the visible screen window */ +static void +st_refresh() +{ + Display *dsp = XtDisplay(stda_w); + Window win = XtWindow(stda_w); + + /* copy the work pixmap to the screen */ + XCopyArea (dsp, st_pm, win, bgc, 0, 0, st_w, st_h, 0, 0); +} + +/* draw all the comets and asteroids in the db. + * if stview it's the stereo view so use st_pm and HLoc.stx, else ss_pm/sx. + * add the coordinates in allp[] unless drawing the stereo view. + */ +static void +ss_allobj (dsp, stview, scale, selt, celt, selg, celg, nx, ny) +Display *dsp; +int stview; +double scale; /* pixels per au */ +double selt, celt; /* heliocentric lat of eye, rads */ +double selg, celg; /* heliocentric lng of eye, rads */ +unsigned nx, ny; +{ +#define ASCHSZ 50 + Now *np = mm_get_now(); + XPoint xps[ASCHSZ], *xp = xps; + XSegment xls[ASCHSZ], *xl = xls; + XArc xas[ASCHSZ], *xa = xas; + Drawable win = stview ? st_pm : ss_pm; + int dbmask = ELLIPTICALM | HYPERBOLICM | PARABOLICM; + Obj *op; + DBScan dbs; + GC gc = 0; + + for (db_scaninit(&dbs, dbmask, NULL, 0); (op = db_scan(&dbs))!=NULL; ) { + double sd; + HLoc hl; + + if (dateOK (np, op) < 0) + continue; + + db_update (op); + if (!gc) + obj_pickgc (op, ssda_w, &gc); /* use first asteriod for gc */ + + sd = op->s_sdist; + hl.x = sd*cos(op->s_hlat)*cos(op->s_hlong); + hl.y = sd*cos(op->s_hlat)*sin(op->s_hlong); + hl.z = sd*sin(op->s_hlat); + + ss_loc (&hl, scale, selt, celt, selg, celg, nx, ny); + + if (!stview) { + if (ap_add (op, &hl) < 0) { + xe_msg (1, "No memory for All Objects"); + ap_free(); + return; + } + } + + /* draw object, possibly with a leg to the ecliptic. + * draw as a blob if want legs, else just a point + */ + if (legs) { + HLoc leghl; + + /* the blob */ + xa->x = (short)((stview ? hl.stx : hl.sx) - BLOBW/2); + xa->y = (short)hl.sy; + xa->width = BLOBW; + xa->height = BLOBW; + xa->angle1 = 0; + xa->angle2 = 360*64; + xa++; + + if (xa == &xas[ASCHSZ]) { + XPSDrawArcs (dsp, win, gc, xas, ASCHSZ); + xa = xas; + } + + /* the leg */ + leghl = hl; + leghl.z = 0; + ss_loc (&leghl, scale, selt, celt, selg, celg, nx, ny); + if (stview) { + xl->x1 = (short)hl.stx; + xl->x2 = (short)leghl.stx; + } else { + xl->x1 = (short)hl.sx; + xl->x2 = (short)leghl.sx; + } + xl->y1 = (short)hl.sy; + xl->y2 = (short)leghl.sy; + xl++; + + if (xl == &xls[ASCHSZ]) { + XPSDrawSegments (dsp, win, gc, xls, ASCHSZ); + xl = xls; + } + } else { + xp->x = stview ? (short)hl.stx : (short)hl.sx; + xp->y = (short)hl.sy; + xp++; + + if (xp == &xps[ASCHSZ]) { + XPSDrawPoints (dsp, win, gc, xps, ASCHSZ, CoordModeOrigin); + xp = xps; + } + } + + /* draw label if persistent */ + if (op->o_flags & WANTLBL) + XPSDrawString (dsp, win, gc, stview ? hl.stx+GAP : hl.sx+GAP, + hl.sy, op->o_name, strlen(op->o_name)); + } + + /* clean up any partial items */ + if (xp > xps) + XPSDrawPoints (dsp, win, gc, xps, xp - xps, CoordModeOrigin); + if (xl > xls) + XPSDrawSegments (dsp, win, gc, xls, xl - xls); + if (xa > xas) + XPSDrawArcs (dsp, win, gc, xas, xa - xas); +} + +/* compute location of HLoc in window of size [nx,ny]. + * N.B. others assume we only use hp->{x,y,z} and set lp->{sx,sy,sty} + */ +static void +ss_loc (hp, scale, selt, celt, selg, celg, nx, ny) +HLoc *hp; +double scale; /* mag factor */ +double selt, celt; /* sin/cos heliocentric lat of eye, rads */ +double selg, celg; /* sin/cos heliocentric lng of eye, rads */ +unsigned nx, ny; /* size of drawing area, in pixels */ +{ + double x, y, z; /* progressive transform values... */ + double xp, yp, zp; + double xpp, ypp, zpp; + double back; + + /* initial loc of points[i] */ + x = hp->x; + y = hp->y; + z = hp->z; + + /* rotate by -elg about z axis to get to xz plane. + * once we rotate up about x to the z axis (next step) that will put + * +x to the right and +y up. + * tmp = -elg; + * xp = x*cos(tmp) - y*sin(tmp); + * yp = x*sin(tmp) + y*cos(tmp); + */ + xp = x*celg + y*selg; + yp = -x*selg + y*celg; + zp = z; + + /* rotate by -(PI/2-elt) about x axis to get to z axis. + * +x right, +y up, +z towards, all in AU. + * tmp = -(PI/2-elt); + * ypp = yp*cos(tmp) - zp*sin(tmp); + * zpp = yp*sin(tmp) + zp*cos(tmp); + */ + xpp = xp; + ypp = yp*selt + zp*celt; + zpp = -yp*celt + zp*selt; + + /* now, straight ortho projection */ + hp->sx = (int)(nx/2 + xpp*scale); + hp->sy = (int)(ny/2 - ypp*scale); + + /* back is y coord, in AU, behind which there is no parallax. + * parallax is the offset of the sun (at a=0), in pixels. + */ + back = (nx > ny ? nx : ny)/-2.0/scale; /* based on screen size */ + if (zpp < back) + hp->stx = hp->sx; + else + hp->stx = hp->sx + (int)(parallax*(back-zpp)/back); +} + +/* called by trails.c to create a new set of trails for all solar sys favorites. + * TODO: client is unused; any validation checks we can do? + * return 0 if ok else -1. + */ +/* ARGSUSED */ +static int +ss_newtrail (ts, statep, client) +TrTS ts[]; +TrState *statep; +XtPointer client; +{ + Now *np = mm_get_now(); + int i; + Now n; + + watch_cursor (1); + + /* discard previous set and just insert the current position */ + hloc_reset(np); + + /* work with a local copy since we change mjd */ + n = *np; + + /* add statep->nticks entries for each object. + * N.B. we tag earth's data (from SUN object) as object MOON. + */ + for (i = 0; i < nfavs; i++) { + int j; + + if (!is_ssobj(favs[i])) + continue; + + for (j = 0; j < statep->nticks; j++) { + TrTS *tp = &ts[j]; + + /* set up n.n_mjd */ + n.n_mjd = tp->t; + if (dateOK (&n, favs[i]) < 0) + continue; + + /* add an entry */ + if (hloc_add (i, &n, tp->lbl) < 0) + break; + } + } + + /* retain state for next time */ + trstate = *statep; + + /* update trail state resource */ + tr_setres (sstrres, &trstate); + + /* enable Trail option as a service */ + if (!trails) { + XmToggleButtonSetState (trails_w, True, False); + trails = 1; + } + + /* redraw everything to display the new trails, if we are up */ + if (isUp(ssshell_w)) + ss_all (); + + watch_cursor (0); + + return (0); +} + +/* set the first entry (the one for the current object location) for each + * new favorite at *np, and erase any other entries. + */ +static void +hloc_reset (np) +Now *np; +{ + int i; + + /* free the existing favorite info */ + if (points) { + for (i = 0; i < nfavs; i++) { + if (points[i]) { + free ((char*)points[i]); + points[i] = NULL; + } + } + free ((char *)points); + points = NULL; + } + if (npoints) { + free ((char *)npoints); + npoints = NULL; + } + + /* get fresh list of favorites */ + nfavs = fav_get_loaded (&favs); + + /* add a single entry for current location of object */ + for (i = 0; i < nfavs; i++) { + if (!is_ssobj(favs[i]) || dateOK (np, favs[i]) < 0) + continue; + (void) hloc_add (i, np, 0); + } +} + +/* make room for one more entry for the given favorite in the points array and + * return its new address or NULL and xe_msg() if no more memory. + */ +static HLoc * +hloc_grow (favi) +int favi; +{ + char *newmem; + int i, n; + + if (favi >= nfavs) { + printf ("hloc_grow %d >= %d\n", favi, nfavs); + abort(); + } + + /* build lists themselves if new */ + if (!points) { + /* first entry */ + points = (HLoc **) malloc (nfavs*sizeof(HLoc *)); + npoints = (int *) malloc (nfavs*sizeof(int)); + for (i = 0; i < nfavs; i++) { + points[i] = (HLoc *) malloc (sizeof(HLoc)); + npoints[i] = 0; + } + } + + n = npoints[favi] + 1; + newmem = realloc (points[favi], n*sizeof(HLoc)); + if (!newmem) { + xe_msg (0, "No memory for new point"); + return (NULL); + } + + points[favi] = (HLoc *) newmem; + npoints[favi] = n; + + return (&points[favi][n-1]); +} + +/* add one entry for the given favorite for np. + * N.B. we tag earth's data (from SUN object) as object MOON. + * return 0 if ok else xe_msg() and -1 if trouble. + */ +static int +hloc_add (favi, np, lbl) +int favi; +Now *np; +int lbl; +{ + Obj *op = favs[favi]; + HLoc *hp; + double sd; + + /* just one SUN entry will do since it is fixed at the center */ + if (favs[favi] == db_basic(SUN) && npoints && npoints[SUN] > 0) + return(0); + + /* add memory for one more entry */ + hp = hloc_grow (favi); + if (!hp) + return (-1); /* go with what we have */ + + /* compute the circumstances at np and save in hp->o. + * we get earth info from SUN then tag it as MOON. + */ + if (favs[favi] == db_basic(MOON)) { + /* really want earth info here; get it from SUN */ + op = db_basic (SUN); + hp->o = *op; + op = &hp->o; + (void) obj_cir (np, op); + sd = op->s_edist; + op->pl_code = MOON; + } else { + hp->o = *op; + op = &hp->o; + (void) obj_cir (np, op); + sd = op->s_sdist; + } + + /* don't inherit WANTLBL */ + op->o_flags &= ~WANTLBL; + + /* compute cartesian coords */ + hp->x = sd*cos(op->s_hlat)*cos(op->s_hlong); + hp->y = sd*cos(op->s_hlat)*sin(op->s_hlong); + hp->z = sd*sin(op->s_hlat); + + /* save the trail info */ + hp->trts.t = mjd; + hp->trts.lbl = lbl; + + return (0); +} + +/* free allp array, if any */ +static void +ap_free() +{ + if (allp) { + free ((void *)allp); + allp = NULL; + nallp = 0; + mallp = 0; + } +} + +/* add op and hp to allp. + * return 0 if ok else -1. + */ +static int +ap_add (op, hp) +Obj *op; +HLoc *hp; +{ + AllP *ap; + + /* insure there is room for one more */ + if (nallp >= mallp) { + char *newmem; + + newmem = allp ? realloc ((void *)allp, (mallp+ALLPCK)*sizeof(AllP)) + : malloc (ALLPCK*sizeof(AllP)); + if (!newmem) + return (-1); + allp = (AllP *)newmem; + mallp += ALLPCK; + } + + /* add to end of list, and inc count */ + ap = &allp[nallp++]; + ap->op = op; + ap->sx = hp->sx; + ap->stx = hp->stx; + ap->sy = hp->sy; + + return (0); +} + +/* called by the persistent label popup PB. + * toggle the WANTLBL of pu.op and redraw. + */ +/* ARGSUSED */ +static void +ap_label_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op = pu.op; + + if (op->o_flags & WANTLBL) + op->o_flags &= ~WANTLBL; + else + op->o_flags |= WANTLBL; + + ss_all(); +} + +/* called to add pu.op to the Favorites list. + */ +/* ARGSUSED */ +static void +ss_fav_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op = pu.op; + if (op == db_basic(MOON)) + op = db_basic(SUN); + fav_add (op); +} + +/* create our GCs. + * TODO: reclaim old stuff if called again. + */ +static void +mk_gcs() +{ + Display *dsp = XtDisplay(ssda_w); + Window win = XtWindow(ssda_w); + XGCValues gcv; + unsigned int gcm; + Pixel p; + + get_color_resource (toplevel_w, "SolSysBackground", &p); + gcm = GCForeground; + gcv.foreground = p; + bgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground; + get_something (ssda_w, XmNforeground, (XtArgVal)&p); + gcv.foreground = p; + egc = XCreateGC (dsp, win, gcm, &gcv); + get_views_font (XtD, &efsp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: solsysmenu.c,v $ $Date: 2009/08/04 03:04:42 $ $Revision: 1.47 $ $Name: $"}; diff --git a/GUI/xephem/splash.c b/GUI/xephem/splash.c new file mode 100644 index 0000000..74ff02a --- /dev/null +++ b/GUI/xephem/splash.c @@ -0,0 +1,382 @@ +/* build a shell in a separate process to display info before main XEphem + * window appears. reads messages on stdin, dies when sees eof. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static int wantSplash (void); +static void forkSplash (int argc, char *argv[], XrmOptionDescRec options[], + int nops); +static void createSplash (int argc, char *argv[], XrmOptionDescRec options[], + int nops); +static void noteSplash (int on); +static void inputCB (XtPointer client, int *fdp, XtInputId *idp); +static void life_to (XtPointer client, XtIntervalId *id); +static void life_mark (Display *dsp, Window win, GC gc, int x); +static void life_exp_cb (Widget w, XtPointer client, XtPointer call); +static void onoff_cb (Widget w, XtPointer client, XtPointer call); + +#define MWW 400 /* main window width */ +#define LTO 100 /* life meter pause, ms */ +#define LMH 7 /* life meter height */ +#define LMT 3 /* life meter line thickness */ +#define NMM 5 /* number of moving markers */ + +static Widget stf_w; /* message text field */ +static FILE *splashpipe; /* write here to send message */ +static Widget life_w; /* scrolling life meter */ +static GC lgc; /* life meter gc */ +static Pixel lfg, lbg; /* life meter fg and bg colors */ +static Dimension llw, llh; /* life meter size */ +static char nsfn[] = "nosplash";/* nosplash flag file name */ + +/* perhaps start splash, depending on args and nosplash file. + * scan argv for following, remove if found + * -nosplash: do not run splash and remove nsfn[] + * -splash: run splash and create nsfn[] + * [neither]: run splash depending on whether nsfs[] exists + */ +void +splashOpen (int *argc, char *argv[], XrmOptionDescRec options[], int nops) +{ + int go = -1; + int i; + + /* scan for -splash and -nosplash and remove if found */ + for (i = 0; i < *argc; i++) { + if (strcmp (argv[i], "-nosplash") == 0) { + go = 0; + *argc -= 1; + memmove (&argv[i], &argv[i+1], (*argc+1) * sizeof(char *)); + noteSplash (0); + break; + } + if (strcmp (argv[i], "-splash") == 0) { + go = 1; + *argc -= 1; + memmove (&argv[i], &argv[i+1], (*argc+1) * sizeof(char *)); + noteSplash (1); + break; + } + } + +/* CHAPG Alex Chupahin patched +it seems, OpenVMS 7.3-1 Motif version has a bug(?) or specific fiches (?), so splash screen is not work for a while. +I hope, this is not very importent, because the program is working nicely :), but I will work to fix it :) +*/ +#ifdef VMS + go=0; + noteSplash (0); +#endif + + + /* if neither honor flag file */ + if (go < 0) + go = wantSplash(); + + if (go) { + /* copy argv so our XtAppInit can eat it sep from xephem's */ + int myargc = *argc; + char **myargv = (char **) malloc ((myargc+1)*sizeof(char *)); + memcpy (myargv, argv, (myargc+1)*sizeof(char *)); + forkSplash(myargc, myargv, options, nops); + free ((char *)myargv); + } +} + +/* called by the real xephem to display a line of text on the splash window, + * of stderr if not enabled + */ +void +splashMsg (char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + vfprintf (splashpipe ? splashpipe : stderr, fmt, ap); + va_end (ap); +} + +/* called by the real xephem to close the splash window */ +void +splashClose () +{ + if (!splashpipe) + return; + + fclose (splashpipe); + splashpipe = NULL; +} + +/* create the splash GUI. + * we already a separate process + */ +static void +createSplash (int argc, char *argv[], XrmOptionDescRec options[], int nops) +{ + XrmDatabase dspdb; + Widget l_w, rc_w, nsrc_w, ns_w; + char t[1024]; + Arg args[20]; + int sw; + int n; + + /* create splash shell */ + + newEnv(&argc, argv); + + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Splash"); n++; + XtSetArg (args[n], XmNy, 200); n++; + XtSetArg (args[n], XmNwidth, MWW); n++; + XtSetArg (args[n], XmNoverrideRedirect, True); n++; + XtSetArg (args[n], XmNborderWidth, 2); n++; + toplevel_w = XtAppInitialize (&xe_app, myclass, options, nops, + &argc, argv, fallbacks, args, n); + + /* get XEphem resources */ + + dspdb = XtDatabase (XtDisplay(toplevel_w)); + XrmCombineFileDatabase("/etc/XEphem", &dspdb, True); + XrmCombineFileDatabase(userResFile(), &dspdb, True); + + /* set private colormap if desired */ + + xe_cm = checkCM (DefaultColormap(XtD,DefaultScreen(XtD)), 20); + set_something (toplevel_w, XmNcolormap, (XtArgVal)xe_cm); + + /* center on screen */ + + sw = WidthOfScreen (XtScreen(toplevel_w)); + set_something (toplevel_w, XmNx, (XtArgVal)((sw-MWW)/2)); + + /* main manager is a rowcolumn */ + + n = 0; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNspacing, 10); n++; + rc_w = XmCreateRowColumn (toplevel_w, "Splash", args, n); + XtManageChild (rc_w); + + /* title */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + l_w = XmCreateLabel (rc_w, "title", args, n); + set_xmstring (l_w, XmNlabelString, + "XEphem ... from Clear Sky Institute Inc"); + XtManageChild (l_w); + + make_logo (rc_w); + + /* subtitle */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + l_w = XmCreateLabel (rc_w, "subtitle", args, n); + sprintf (t,"Version %s -- released %s\n%s", PATCHLEVEL, PATCHDATE, + COPYRIGHT); + set_xmstring (l_w, XmNlabelString, t); + XtManageChild (l_w); + + /* add drawing area for life meter, with timer */ + + n = 0; + XtSetArg (args[n], XmNheight, LMH); n++; + life_w = XmCreateDrawingArea (rc_w, "DA", args, n); + XtAddCallback (life_w, XmNexposeCallback, life_exp_cb, NULL); + XtManageChild (life_w); + + /* add text widget for progress messages */ + + n = 0; + XtSetArg (args[n], XmNrows, 15); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNblinkRate, 0); n++; + stf_w = XmCreateText (rc_w, "messages", args, n); + XtManageChild (stf_w); + + /* add a disable PB -- RC is to prevent it being full width */ + + n = 0; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + nsrc_w = XmCreateRowColumn (rc_w, "NSRC", args, n); + XtManageChild (nsrc_w); + + n = 0; + ns_w = XmCreateToggleButton (nsrc_w, "NS", args, n); + XtAddCallback (ns_w, XmNvalueChangedCallback, onoff_cb, NULL); + set_xmstring (ns_w, XmNlabelString,"Disable this splash next time"); + XtManageChild (ns_w); + + /* connect what real xephem writes to splashpipe to our stdin */ + + XtAppAddInput (xe_app, 0, (XtPointer)XtInputReadMask, inputCB, NULL); + + /* go */ + + XtRealizeWidget(toplevel_w); + XtAppMainLoop(xe_app); +} + +/* called whenever input arrives from the real xephem. exit on eof */ +static void +inputCB (XtPointer client, int *fdp, XtInputId *idp) +{ + char buf[1024]; + int nr; + + nr = read (*fdp, buf, sizeof(buf)-1); + if (nr <= 0) + exit(0); + + buf[nr] = '\0'; + XmTextInsert (stf_w, XmTextGetLastPosition(stf_w), buf); +} + +/* called when life meter gets exp -- use to init and start heartbeat */ +static void +life_exp_cb (Widget w, XtPointer client, XtPointer call) +{ + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNforeground, &lfg); n++; + XtSetArg (args[n], XmNbackground, &lbg); n++; + XtGetValues (stf_w, args, n); + + XtSetArg (args[n], XmNwidth, &llw); n++; + XtSetArg (args[n], XmNheight, &llh); n++; + XtGetValues (life_w, args, n); + + if (!lgc) { + /* just once: build GC, init, start timer */ + lgc = XCreateGC (dsp, win, 0L, NULL); + XSetLineAttributes (dsp, lgc, LMT, LineSolid, CapRound, JoinRound); + + XSetForeground (dsp, lgc, lfg); + for (n = -LMT*2; n < llw; n += LMT*2) + life_mark (dsp, win, lgc, n); + + XtAppAddTimeOut (xe_app, LTO, life_to, (XtPointer)1); + } +} + +/* called regularly to show activity */ +static void +life_to (XtPointer client, XtIntervalId *id) +{ + static int lmx; + Display *dsp = XtDisplay(life_w); + Window win = XtWindow(life_w); + int gap = (LMT*2)*((llw/NMM)/(LMT*2)); + int i; + + /* move forward, wrap */ + if ((lmx += LMT*2) > llw + LMT*2) + lmx = 0; + + /* point markers every gap, each way of lmx, let X clip */ + for (i = 0; i < NMM*2; i++) { + int dx = (i - NMM)*gap; + + /* draw new */ + XSetForeground (dsp, lgc, lbg); + life_mark (dsp, win, lgc, lmx + dx); + + /* erase prev */ + XSetForeground (dsp, lgc, lfg); + life_mark (dsp, win, lgc, lmx + dx - LMT*2); + } + + XSync (dsp, True); + + /* repeat */ + XtAppAddTimeOut (xe_app, LTO, life_to, NULL); +} + +/* draw one life marker pip */ +static void +life_mark (Display *dsp, Window win, GC gc, int x) +{ + XDrawLine (dsp, win, gc, x+llh-LMT/2, LMT/2, x+LMT/2, llh-LMT/2-1); +} + +/* create the splash process, connect splashpipe to its stdin */ +static void +forkSplash (int argc, char *argv[], XrmOptionDescRec options[], int nops) +{ + int p[2]; + + if (pipe(p) < 0) + exit(0); + if (fork() == 0) { + dup2 (p[0], 0); + close (p[0]); + close (p[1]); + createSplash(argc, argv, options, nops); + abort(); + } + close (p[0]); + splashpipe = fdopen (p[1], "w"); + setbuf (splashpipe, NULL); +} + +/* called to toggle splash screen now and forever */ +static void +onoff_cb (Widget w, XtPointer client, XtPointer call) +{ + noteSplash (!XmToggleButtonGetState(w)); +} + +/* record in flag file whether we want splash */ +static void +noteSplash (int on) +{ + char nos[1024]; + FILE *fp; + + sprintf (nos, "%s/%s", getPrivateDir(), nsfn); + + if (on) { + remove (nos); + } else { + fp = fopen (nos, "w"); + if (fp) + fclose (fp); + } +} + +/* return 1 if flag file indicates we want splash else 0 */ +static int +wantSplash() +{ + char nos[1024]; + FILE *fp; + + sprintf (nos, "%s/%s", getPrivateDir(), nsfn); + fp = fopen (nos, "r"); + if (fp) + fclose (fp); + return (!fp); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: splash.c,v $ $Date: 2006/04/02 12:56:47 $ $Revision: 1.27 $ $Name: $"}; diff --git a/GUI/xephem/srchmenu.c b/GUI/xephem/srchmenu.c new file mode 100644 index 0000000..cf87822 --- /dev/null +++ b/GUI/xephem/srchmenu.c @@ -0,0 +1,1119 @@ +/* this file contains functions to support iterative xephem searches. + * we support several kinds of searching and solving algorithms. + * the expressions being evaluated are compiled and executed from compiler.c. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" +#include "lilxml.h" + +static void srch_create_shell (void); +static int srch_isup (void); +static void get_tmlimit(void); +static int srching_now (void); +static void compile_func (void); +static void srch_set_buttons (int whether); +static void srch_use_cb (Widget w, XtPointer client, XtPointer call); +static void srch_loadfn_cb (Widget w, XtPointer client, XtPointer call); +static void srch_savefn_cb (Widget w, XtPointer client, XtPointer call); +static void srch_newfunc_cb (Widget w, XtPointer client, XtPointer call); +static void srch_compile_cb (Widget w, XtPointer client, XtPointer call); +static void srch_help_cb (Widget w, XtPointer client, XtPointer call); +static void srch_clear_cb (Widget w, XtPointer client, XtPointer call); +static void srch_fields_cb (Widget w, XtPointer client, XtPointer call); +static void srch_close_cb (Widget w, XtPointer client, XtPointer call); +static void srch_acc_cb (Widget wid, XtPointer client, XtPointer call); +static void srch_goal_cb (Widget w, XtPointer client, XtPointer call); +static void srch_on_off_cb (Widget w, XtPointer client, XtPointer call); +static int srch_min (double Mjd, double v, double *tmincp); +static int srch_max (double Mjd, double v, double *tmincp); +static int srch_solve0 (double Mjd, double v, double *tmincp); +static int srch_binary (double Mjd, double v, double *tmincp); + + +/* the widgets we need direct access to */ +static Widget srchshell_w; /* main shell */ +static Widget acc_w; /* TF to enter desired search accuracy */ +static Widget field_w; /* TB whether to set buttons to define func */ +static Widget func_w; /* T contains the search function */ +static Widget err_w; /* label to show compile errors */ +static Widget valu_w; /* label to display calulated value */ +static Widget on_w; /* TB whether searching is active */ +static Widget save_w; /* TF naming file to save */ + +/* name is it appears when valu_w is selected for plotting or lising */ +static char srchvname[] = "SolveValue"; +static char solvecategory[] = "Tools -- Solve"; /* Save category */ +static char xml_srchele[] = "XEphemSolver"; + +static int (*srch_f)(); /* 0 or pointer to one of the search functions*/ +static int srch_tmscalled; /* number of iterations so far */ +static double tmlimit; /* search accuracy, hrs */ +static char config_suffix[] = ".svc"; /* file ext for solver config files */ + +static int srch_selecting; /* whether our value is currently selectable */ +static int srch_self_selection_mode; /* flag to prevent self-selection */ + +typedef struct { + char *title; + char *name; + XtPointer cb_data; + char *tip; + Widget w; +} Goal; +static Goal goals[] = { + {"Find Maximum", "FindMax", (XtPointer)srch_max, + "Solve for a time at which the Function experiences a local maxima"}, + {"Find Minimum", "FindMin", (XtPointer)srch_min, + "Solve for a time at which the Function experiences a local minima"}, + {"Find 0", "Find0", (XtPointer)srch_solve0, + "Solve for a time at which the Function evaluates to 0"}, + {"Binary", "Binary", (XtPointer)srch_binary, + "Step time along until the truth value of the Function changes"}, +}; + +/* called when the search menu is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, just go for it. + */ +void +srch_manage () +{ + if (!srchshell_w) + srch_create_shell(); + + XtPopup (srchshell_w, XtGrabNone); + set_something (srchshell_w, XmNiconic, (XtArgVal)False); + srch_set_buttons(srch_selecting); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + * N.B. we cooperate with a flag from the Enable pushbutton to prevent + * being able use the search function result as a term in the search funtion. + */ +void +srch_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (srch_self_selection_mode) + return; + + if (whether) + srch_selecting++; + else if (srch_selecting > 0) + --srch_selecting; + + if (isUp(srchshell_w)) + if ((whether && srch_selecting == 1) /* first one to want on */ + || (!whether && srch_selecting == 0) /* last one to want off */) + srch_set_buttons (whether); +} + +/* called when other modules, such as data menu, have a button pushed + * and we have asked (by enabling field buttons) that they inform us that + * that button is to be included in the search function. + * other modules that use buttons, such as plotting and listing, might ask + * too so it might not really be us that wants to use it. + */ +void +srch_selection (name) +char *name; +{ + int ins; + char *qname; + + if (!isUp(srchshell_w) || !XmToggleButtonGetState(field_w)) + return; + + ins = XmTextGetInsertionPosition (func_w); + qname = XtMalloc (strlen(name) + 3); /* two '"' and \0 */ + (void) sprintf (qname, "\"%s\"", name); + XmTextReplace (func_w, /* from */ ins, /* to */ ins, qname); + XtFree (qname); + + /* move the focus right back to the search menu so the insertion point + * remains visible. + */ + XSetInputFocus (XtDisplay(srchshell_w), XtWindow(srchshell_w), + RevertToParent, CurrentTime); +} + +/* if searching is in effect call the search type function. + * it might modify *tmincp according to where it next wants to eval. + * (remember tminc is in hours, not days). + * if searching ends for any reason it is also turned off. + * if we are not searching but are plotting or listing we still execute the + * search function (if it is ok) and flog and display it. + * return 0 if caller can continue or -1 if it is time to stop. + */ +int +srch_eval(Mjd, tmincp) +double Mjd; +double *tmincp; +{ + int s; + + if (prog_isgood() && any_ison()) { + char errbuf[128]; + double v; + s = execute_expr (&v, errbuf); + if (s == 0) { + f_double (valu_w, "%g", v); + if (srching_now()) { + xe_msg (0, "Solver step %3d @ %13.5f %g", srch_tmscalled, + Mjd+MJD0, v); + s = (*srch_f)(Mjd, v, tmincp); + srch_tmscalled++; + } + } else { + xe_msg (0, "Solver evaluation error: %.200s", errbuf); + } + } else + s = 0; + + if (s < 0) + XmToggleButtonSetState(on_w, False, /*invoke cb*/True); + + return (s); +} + +/* called by other systems to decide whether it is worth computing and + * logging values to the search system. + * we say True whenever there is a validly compiled function and either we are + * searching (obviously) or the srch control menu is up. + */ +int +srch_ison() +{ + return (prog_isgood() && (srching_now() || srch_isup())); +} + +/* called as each different field is written -- just tell the compiler + * if we are interested in it. + * we have to check if *anything* is on because we might be plotting/listing + * the srch function itself. + */ +void +srch_log (name, value) +char *name; +double value; +{ + if (any_ison()) + compiler_log (name, value); +} + +/* called to put up or remove the watch cursor. */ +void +srch_cursor (c) +Cursor c; +{ + Window win; + + if (srchshell_w && (win = XtWindow(srchshell_w)) != 0) { + Display *dsp = XtDisplay(srchshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +static void +srch_create_shell() +{ + XmString str; + Widget w, trc_w, brc_w, f_w, rb_w; + Widget oms_w, compile_w; + Widget help_w; + Widget srchform_w; + Arg args[20]; + char *s[1]; + int i, n; + + /* create form dialog */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Solve"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + XtSetArg (args[n], XmNtitle, "xephem Solver Control"); n++; + srchshell_w = XtCreatePopupShell ("Solve", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (srchshell_w); + set_something (srchshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (srchshell_w, "XEphem*Solve.x", solvecategory, 0); + sr_reg (srchshell_w, "XEphem*Solve.y", solvecategory, 0); + + n = 0; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_GROW); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + srchform_w = XmCreateForm (srchshell_w, "SrchF", args, n); + XtAddCallback (srchform_w, XmNhelpCallback, srch_help_cb, 0); + XtManageChild (srchform_w); + + /* create a RowColumn to hold stuff on top of the text */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + trc_w = XmCreateRowColumn (srchform_w, "TSrchRC", args, n); + XtManageChild (trc_w); + + /* searching on/off toggle button */ + + n = 0; + on_w = XmCreateToggleButton (trc_w, "SAct", args, n); + XtAddCallback (on_w, XmNvalueChangedCallback, srch_on_off_cb, 0); + set_xmstring (on_w, XmNlabelString, "Solver is Active"); + wtip (on_w, "When on, solver controls Main's step size and searches for goal"); + XtManageChild (on_w); + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (trc_w, "Sep1", args, n); + XtManageChild (w); + + /* compiler area title */ + + n = 0; + f_w = XmCreateForm (trc_w, "SrchAF", args, n); + XtManageChild (f_w); + + str = XmStringCreate ("Function:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (f_w, "FuncL", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 2); n++; + w = XmCreatePushButton (f_w, "Clear", args, n); + XtAddCallback (w, XmNactivateCallback, srch_clear_cb, NULL); + XtManageChild (w); + + /* create another RC for the bottom stuff. + * text will connect them together. + * this is so text follows user resizing. + */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 5); n++; + XtSetArg (args[n], XmNisAligned, False); n++; + XtSetArg (args[n], XmNadjustMargin, False); n++; + brc_w = XmCreateRowColumn (srchform_w, "BSrchRC", args, n); + XtManageChild (brc_w); + + /* compiler message label */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + err_w = XmCreateLabel (brc_w, "SrchErrsL", args, n); + set_xmstring (err_w, XmNlabelString, " "); + wtip (err_w, "Result from compiling the search Function"); + XtManageChild (err_w); + + /* use-fields button */ + + str = XmStringCreate("Enable field buttons", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + field_w = XmCreateToggleButton (brc_w, "SrchFEnable", args, n); + XtAddCallback (field_w, XmNvalueChangedCallback, srch_fields_cb, 0); + wtip (field_w, "When on, data fields eligible for use in Function are selectable buttons"); + XtManageChild (field_w); + XmStringFree(str); + + /* COMPILE push button */ + + n = 0; + XtSetArg (args[n], XmNshowAsDefault, True); n++; + compile_w = XmCreatePushButton (brc_w, "Compile", args, n); + XtAddCallback (compile_w, XmNactivateCallback, srch_compile_cb, 0); + set_something (srchform_w, XmNdefaultButton, (XtArgVal)w); + wtip (compile_w, "Press to compile the Function"); + XtManageChild (compile_w); + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (brc_w, "Sep2", args, n); + XtManageChild (w); + + /* config file load */ + + s[0] = config_suffix; + oms_w = createFSM (brc_w, s, 1, "auxil", srch_loadfn_cb); + wtip (oms_w, "Select existing plot configuration file to load"); + set_xmstring (oms_w, XmNlabelString, "Load file: "); + n = 0; + + /* config file save */ + + n = 0; + f_w = XmCreateForm (brc_w, "CFF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + w = XmCreatePushButton (f_w, "CFL", args, n); + XtAddCallback (w, XmNactivateCallback, srch_savefn_cb, NULL); + wtip (w,"Save search function and settings to file named at right"); + set_xmstring (w, XmNlabelString, "Save to:"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + XtSetArg (args[n], XmNleftOffset, 5); n++; + save_w = XmCreateTextField (f_w, "ConfigFile", args, n); + sr_reg (save_w, NULL, solvecategory, 0); + defaultTextFN (save_w, 0, "mysolver.svc", NULL); + XtAddCallback (save_w, XmNactivateCallback, srch_savefn_cb, NULL); + wtip (save_w, "File name in which to save search function"); + XtManageChild (save_w); + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (brc_w, "Sep2", args, n); + XtManageChild (w); + + /* create goal radio box and its toggle buttons */ + + str = XmStringCreate ("Goal:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (brc_w, "SrchRBL", args, n); + XtManageChild(w); + XmStringFree(str); + + n = 0; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + rb_w = XmCreateRadioBox (brc_w, "SrchGoalRadioBox", args, n); + XtManageChild (rb_w); + + for (i = 0; i < XtNumber(goals); i++) { + n = 0; + str = XmStringCreate(goals[i].title, XmSTRING_DEFAULT_CHARSET); + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton (rb_w, goals[i].name, args, n); + XtAddCallback (w, XmNvalueChangedCallback, srch_goal_cb, + (XtPointer)goals[i].cb_data); + XmStringFree(str); + if (goals[i].tip) + wtip (w, goals[i].tip); + XtManageChild (w); + goals[i].w = w; + sr_reg (w, NULL, solvecategory, 1); + } + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (brc_w, "Sep3", args, n); + XtManageChild (w); + + /* Accuracy label and its push button in a form */ + + n = 0; + f_w = XmCreateForm (brc_w, "SrchAF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNcolumns, 8); n++; + acc_w = XmCreateTextField (f_w, "Accuracy", args, n); + XtAddCallback (acc_w, XmNactivateCallback, srch_acc_cb, 0); + wtip (acc_w, "Set desired time accuracy of solution, hours"); + XtManageChild (acc_w); + sr_reg (acc_w, NULL, solvecategory, 1); + get_tmlimit(); + + str = XmStringCreate("Desired accuracy:", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, acc_w); n++; + XtSetArg (args[n], XmNrightOffset, 5); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (f_w, "SrchAccL", args, n); + XtManageChild (w); + XmStringFree (str); + + /* current search value in a form */ + + n = 0; + f_w = XmCreateForm (brc_w, "SrchVF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNuserData, (XtArgVal)srchvname); n++; + valu_w = XmCreatePushButton (f_w, "CurValue", args, n); + set_xmstring (valu_w, XmNlabelString, "0.0"); + buttonAsButton (valu_w, False); + XtAddCallback (valu_w, XmNactivateCallback, srch_use_cb, 0); + wtip (valu_w, "Value of Function evaluated at current time"); + XtManageChild (valu_w); + + str = XmStringCreate ("Current value: ", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, valu_w); n++; + XtSetArg (args[n], XmNrightOffset, 5); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateLabel (f_w, "SrchValuL", args, n); + XtManageChild (w); + XmStringFree (str); + + /* create a separator */ + + n = 0; + w = XmCreateSeparator (brc_w, "Sep4", args, n); + XtManageChild (w); + + /* form to hold bottom control buttons */ + + n = 0; + XtSetArg (args[n], XmNfractionBase, 7); n++; + f_w = XmCreateForm (brc_w, "SrchCF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + w = XmCreatePushButton(f_w, "Close", args,n); + XtAddCallback(w, XmNactivateCallback, srch_close_cb, 0); + wtip (w, "Close this dialog (but continue solving if active)"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 4); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 6); n++; + help_w = XmCreatePushButton(f_w, "Help", args, n); + XtAddCallback(help_w, XmNactivateCallback, srch_help_cb, 0); + wtip (help_w, "More detailed usage information"); + XtManageChild (help_w); + + /* function text connected in between the rc's. + * arrange for Return to activate the Compile button. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, trc_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, brc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNwordWrap, True); n++; + func_w = XmCreateText (srchform_w, "Function", args, n); + XtAddCallback (func_w, XmNvalueChangedCallback, srch_newfunc_cb, NULL); + wtip(func_w,"Function to solve: enter fields manually, or via buttons"); + XtManageChild (func_w); + sr_reg (func_w, NULL, solvecategory, 1); +} + +/* set tmlimit from user's widget */ +static void +get_tmlimit() +{ + char *str = XmTextFieldGetString (acc_w); + f_scansexa (str, &tmlimit); + XtFree (str); +} + +/* return True whenever the srch control menu is up */ +static int +srch_isup() +{ + return (isUp(srchshell_w)); +} + +/* return True whenever we are actually in the midst of controlling a search. + */ +static int +srching_now() +{ + return (on_w && XmToggleButtonGetState(on_w)); +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons. + */ +static void +srch_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + buttonAsButton(valu_w, whether); +} + +/* callback from the value button when it is to be used for + * plotting or listing. if we have been put us in selecting mode, we look like + * a button and we should inform them we have been picked. + * otherwise, we do nothing (we didn't look like a button anyway). + */ +/* ARGSUSED */ +static void +srch_use_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (srch_selecting) { + if (prog_isgood()) { + plt_selection (srchvname); + lst_selection (srchvname); + } else + xe_msg (0, "You must first successfully compile a search\nfunction before value may be selected."); + } +} + +/* callback when the function definition changes + */ +/* ARGSUSED */ +static void +srch_newfunc_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + f_showit (err_w, "New function not compiled"); +} + +/* callback to load a function from a file. + * file name is label of this widget. + */ +/* ARGSUSED */ +static void +srch_loadfn_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char msg[1024]; + char *g, *f, *a; + char *fn; + FILE *fp; + + get_xmstring (w, XmNlabelString, &fn); + fp = fopend (fn, NULL, "r"); + if (fp) { + LilXML *lp = newLilXML (); + XMLEle *sele = readXMLFile (fp, lp, msg); + int i; + + if (!sele) + xe_msg (1, "%s", msg); + else if (strcmp (tagXMLEle(sele), xml_srchele) + || !(g = pcdataXMLEle (findXMLEle (sele, "goal"))) + || !(f = pcdataXMLEle (findXMLEle (sele, "function"))) + || !(a = pcdataXMLEle (findXMLEle (sele, "accuracy")))) + xe_msg (1, "Not a valid solver file"); + else { + for (i = 0; i < XtNumber(goals); i++) { + if (!strcmp(goals[i].title, g)) { + XmToggleButtonSetState (goals[i].w, True, True); + break; + } + } + if (i == XtNumber(goals)) { + xe_msg (1, "Unknown goal: %s", g); + } else { + /* ok, all looks good */ + XmTextSetString (func_w, f); + XmTextFieldSetString (acc_w, a); + get_tmlimit(); + compile_func(); + } + } + + delXMLEle (sele); + delLilXML (lp); + fclose (fp); + } + + XtFree (fn); +} + +/* save the current search function to a file. + * N.B. don't use call, used by both TF and PB + */ +/* ARGSUSED */ +static void +srch_savefn_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char buf[1024], *txt; + char *goal; + char *fn; + FILE *fp; + int i; + + /* find current goal setting */ + goal = NULL; + for (i = 0; i < XtNumber(goals); i++) { + if (XmToggleButtonGetState(goals[i].w)) { + goal = goals[i].title; + break; + } + } + if (!goal) { + xe_msg (1, "Goal must be selected before saving"); + return; + } + + /* get file name */ + fn = txt = XmTextFieldGetString (save_w); + if (!strstr(txt, config_suffix)) { + sprintf (fn = buf, "%s%s", txt, config_suffix); + XmTextFieldSetString (save_w, fn); + } + + /* create file */ + fp = fopend (fn, NULL, "w"); + if (fp) { + char *func = XmTextGetString (func_w); + char *acc = XmTextFieldGetString (acc_w); + fprintf (fp, "<%s>\n", xml_srchele); + fprintf (fp, " %s\n", entityXML(func)); + fprintf (fp, " %s\n", acc); + fprintf (fp, " %s\n", goal); + fprintf (fp, "\n", xml_srchele); + XtFree (func); + XtFree (acc); + fclose (fp); + } + + /* clean up */ + if (confirm()) + xe_msg (1, "%s saved", fn); + XtFree (txt); +} + +/* callback from the compile button. + */ +/* ARGSUSED */ +static void +srch_compile_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + compile_func(); +} + +/* callback from the help button. + */ +/* ARGSUSED */ +static void +srch_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ +static char *help_msg[] = { +"This menu controls the automatic searching facility. You define an arithmetic", +"or boolean function, using most of the fields xephem displays, then xephem", +"will automatically evaluate the function and adjust the time on each", +"iteration to search for the goal.", +"", +"To perform a search:", +" enter a function,", +" compile it,", +" select a goal,", +" set the desired accuracy,", +" enable searching,", +" perform the search by stepping xephem." +}; + + hlp_dialog ("Search", help_msg, sizeof(help_msg)/sizeof(help_msg[0])); +} + +/* callback from the "clear" function puch button. + */ +/* ARGSUSED */ +static void +srch_clear_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + char *txt = XmTextGetString (func_w); + XmTextReplace (func_w, 0, strlen(txt), ""); + XtFree (txt); +} + +/* callback from the "field enable" push button. + * inform the other menues whether we are setting up for them to tell us + * what fields to plot. + */ +/* ARGSUSED */ +static void +srch_fields_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int whether = XmToggleButtonGetState(w); + + /* don't use our own result to srch with */ + srch_self_selection_mode = 1; + all_selection_mode(whether); + srch_self_selection_mode = 0; +} + +/* callback from the Close button. + */ +/* ARGSUSED */ +static void +srch_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (srchshell_w); +} + +/* user typed Return in accuracy field. get his new value and use it */ +/* ARGSUSED */ +static void +srch_acc_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + get_tmlimit(); +} + +/* callback from the search goal selection radio buttons. + * same callback used for all of them. + * client is pointer to desired search function. + */ +/* ARGSUSED */ +static void +srch_goal_cb(w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int (*sfp)()= (int (*)())client; + + if (XmToggleButtonGetState(w)) { + /* better turn off searching if changing the search function! */ + if (srch_f != sfp && srching_now()) + XmToggleButtonSetState(on_w, False, True /* invoke cb */); + srch_f = sfp; + } +} + +/* callback from the on/off toggle button activate. + */ +/* ARGSUSED */ +static void +srch_on_off_cb(w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg = + "You must first successfully compile a search Function and\n select a Goal algorithm before searching may be enabled."; + + if (XmToggleButtonGetState(w)) { + /* insure there is a valid function and goal algorithm selected + * if turning searching on. + */ + if (!prog_isgood()) { + XmToggleButtonSetState(on_w, False, True/* invoke cb */); + xe_msg (1, "%s", msg); + + } else if (srch_f == 0) { + XmToggleButtonSetState(on_w, False, True/* invoke cb */); + xe_msg (1, "%s", msg); + } else { + srch_tmscalled = 0; + /* turning on searhing so as a courtesy turn off the + * field selection mechanism if it's on now. + * get fresh desired acc. + */ + if (XmToggleButtonGetState(field_w)) + XmToggleButtonSetState(field_w, False, True); + get_tmlimit(); + } + } +} + +static void +compile_func() +{ + char *newexp; + char errbuf[256]; + + newexp = XmTextGetString (func_w); + if (compile_expr (newexp, errbuf) < 0) + set_xmstring (err_w, XmNlabelString, errbuf); + else + set_xmstring (err_w, XmNlabelString, "Function compiled successfully"); + + XtFree (newexp); + + /* as a courtesy, turn off searching if it's currently active */ + if (XmToggleButtonGetState(on_w)) + XmToggleButtonSetState(on_w, False, True/*invoke cb*/); + + /* compute the new function. + * must update everything else first because our function uses that + * stuff in all likelihood. + */ + if (prog_isgood()) { + Now *np = mm_get_now(); + redraw_screen(1); + (void) srch_eval (mjd, (double *)NULL); + } +} + +/* search for time when expression is at a local maximum. + * uses globals srch_tmscalled and tmlimit. + * return -1 when finished. + */ +static int +srch_max(Mjd, v, tmincp) +double Mjd; +double v; +double *tmincp; +{ + static double v0, lastv0, j0, v1, lastv1, j1; + static double lastv; + + /* save first time and keep going */ + if (srch_tmscalled == 0) { + j0 = -1e100; + j1 = 1e100; + lastv = v; + return (0); + } + + /* record and turn around at half speed whenever value shrinks again */ + if (v < lastv) { + if (*tmincp > 0) { + j1 = Mjd; + lastv1 = v1; + v1 = v; + } else { + j0 = Mjd; + lastv0 = v0; + v0 = v; + } + if (lastv0 == v0 && lastv1 == v1) { + xe_msg (1, "Function is too broad to find max so precisely"); + return (-1); + } + + *tmincp *= -0.5; + } + + lastv = v; + + return (24*(j1 - j0) < tmlimit ? -1 : 0); +} + +/* search for time when expression is at a local minimum. + * uses globals srch_tmscalled and tmlimit. + * return -1 when finished. + */ +static int +srch_min(Mjd, v, tmincp) +double Mjd; +double v; +double *tmincp; +{ + static double v0, lastv0, j0, v1, lastv1, j1; + static double lastv; + + /* save first time and keep going */ + if (srch_tmscalled == 0) { + j0 = -1e100; + j1 = 1e100; + lastv = v; + return (0); + } + + /* record and turn around at half speed whenever value grows again */ + if (v > lastv) { + if (*tmincp > 0) { + j1 = Mjd; + lastv1 = v1; + v1 = v; + } else { + j0 = Mjd; + lastv0 = v0; + v0 = v; + } + if (lastv0 == v0 && lastv1 == v1) { + xe_msg (1, "Function is too broad to find min so precisely"); + return (-1); + } + + *tmincp *= -0.5; + } + + lastv = v; + + return (24*(j1 - j0) < tmlimit ? -1 : 0); +} + +/* use secant method to solve for time when expression passes through 0. + * uses globals srch_tmscalled and tmlimit. + */ +static int +srch_solve0(Mjd, v, tmincp) +double Mjd; +double v; +double *tmincp; +{ + static double x0, x_1; /* x(n-1) and x(n) */ + static double y_0, y_1; /* y(n-1) and y(n) */ + double x_2; /* x(n+1) */ + double df; /* y(n) - y(n-1) */ + + switch (srch_tmscalled) { + case 0: x0 = Mjd; y_0 = v; return(0); + case 1: x_1 = Mjd; y_1 = v; break; + default: x0 = x_1; y_0 = y_1; x_1 = Mjd; y_1 = v; break; + } + + df = y_1 - y_0; + if (fabs(df) < 1e-10) { + /* near-0 zero denominator, ie, curve is pretty flat here, + * so assume we are done enough. + * signal this by forcing a 0 tminc. + */ + *tmincp = 0.0; + return (-1); + } + x_2 = x_1 - y_1*(x_1-x0)/df; + *tmincp = (x_2 - Mjd)*24.0; + return (fabs (*tmincp) < tmlimit ? -1 : 0); +} + +/* binary search for time when expression changes from its initial state. + * uses globals srch_tmscalled and tmlimit. + * if the change is outside the initial tminc range, then keep searching in that + * direction by tminc first before starting to divide down. + */ +static int +srch_binary(Mjd, v, tmincp) +double Mjd; +double v; +double *tmincp; +{ + static double lb, ub; /* lower and upper bound */ + static int initial_state; + int this_state = v >= 0.5; + +#define FLUNDEF -9e10 + + if (srch_tmscalled == 0) { + if (*tmincp >= 0.0) { + /* going forwards in time so first Mjd is lb and no ub yet */ + lb = Mjd; + ub = FLUNDEF; + } else { + /* going backwards in time so first Mjd is ub and no lb yet */ + ub = Mjd; + lb = FLUNDEF; + } + initial_state = this_state; + return (0); + } + + if (ub != FLUNDEF && lb != FLUNDEF) { + if (this_state == initial_state) + lb = Mjd; + else + ub = Mjd; + *tmincp = ((lb + ub)/2.0 - Mjd)*24.0; +#ifdef TRACEBIN + xe_msg (0, "lb=%g ub=%g tminc=%g Mjd=%g is=%d ts=%d", + lb, ub, *tmincp, Mjd, initial_state, this_state); +#endif + /* signal to stop if asking for time change less than TMLIMIT */ + return (fabs (*tmincp) < tmlimit ? -1 : 0); + } else if (this_state != initial_state) { + /* gone past; turn around half way */ + if (*tmincp >= 0.0) + ub = Mjd; + else + lb = Mjd; + *tmincp /= -2.0; + return (0); + } else { + /* just keep going, looking for first state change but we keep + * learning the lower (or upper, if going backwards) bound. + */ + if (*tmincp >= 0.0) + lb = Mjd; + else + ub = Mjd; + return (0); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: srchmenu.c,v $ $Date: 2008/01/31 16:40:52 $ $Revision: 1.25 $ $Name: $"}; diff --git a/GUI/xephem/sunmenu.c b/GUI/xephem/sunmenu.c new file mode 100644 index 0000000..e0c08b0 --- /dev/null +++ b/GUI/xephem/sunmenu.c @@ -0,0 +1,1213 @@ +/* code to manage the sun display + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static void sun_create_shell (void); +static void sun_help_cb (Widget w, XtPointer client, XtPointer data); +static void sun_close_cb (Widget w, XtPointer client, XtPointer data); +static void sun_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void sun_fpd_cb (Widget w, XtPointer client, XtPointer data); +static void sun_load_cb (Widget w, XtPointer client, XtPointer data); +static void sun_exp_cb (Widget w, XtPointer client, XtPointer data); +static void sun_download_cb (Widget w, XtPointer client, XtPointer data); +static void sun_save_cb (Widget w, XtPointer client, XtPointer data); +static void sun_load1(void); +static void sun_print_cb (Widget w, XtPointer client, XtPointer data); +static void sun_mloop_cb (Widget w, XtPointer client, XtPointer data); +static void sun_motion_eh (Widget w, XtPointer client, XEvent *ev, + Boolean *continue_to_dispatch); +static int readSOHOImage(void); +static int displayPic (char fn[], unsigned char *pic, int picl); +static void storePicFN (char fn[], int w); +static int getTS (int *tp, int *sp); +static int scanDir (char *dir, char ***files, int nfiles); +static void sun_refresh(void); +static int sun_ano (double *fracX, double *fracY, int *xp, int *yp, int w2x, + int arg); +static void sun_print(void); +static void sun_ps_annotate(void); +static void location (int x, int dx, int y, int dy, double scale, double *rap, + double *decp); +static int sun_gather (char ***files); +static void sun_display (FILE *fp, char *name); +static double carrington(Now *np); + +#define SUNPOLERA degrad(286.13000) /* RA of n pole */ +#define SUNPOLEDEC degrad(63.87000) /* dec of n pole */ + +#define NSREAD 2048 /* size of socket read */ + +static Widget sunshell_w; /* main shell */ +static Widget sunda_w; /* main drawing area */ +static Widget ssw_w; /* scrolled window for sun */ +static Widget lpd_w; /* Load pulldown */ +static Widget bytype_w; /* whether to filter by Type */ +static Widget bysize_w; /* whether to filter by Size */ +static Widget ts_w; /* timestamp label */ +static Widget save_w; /* save PB */ +static Widget coords_w; /* coordinates label */ +static Widget crn_w; /* Carrington rotation number label */ +static Pixmap sun_pm; /* staging area */ +static unsigned char *rawpic; /* current raw picture file, if any */ +static long rawpicl; /* length of rawpic */ +static char *picfn; /* malloced name of current picture */ + +/* info about each image format choice */ +typedef struct { + char *name; /* widget name of this choice */ + char *label; /* widget label of this choice */ + char *file; /* string in file name for this type */ + int dx, dy; /* shift from image center to sun @ 1024 */ + float scale; /* image scale, rads/pixel @ 1024 */ + Widget w; /* controlling TB */ +} SOHOType; +/* N.B. order must agree with switch in sun_print() */ +static SOHOType stype[] = { + {"EIT171", "EIT 171", "eit_171", 0, 0, degrad(0.00075)}, + {"EIT195", "EIT 195", "eit_195", 0, 0, degrad(0.00075)}, + {"EIT284", "EIT 284", "eit_284", 0, 0, degrad(0.00075)}, + {"EIT304", "EIT 304", "eit_304", 0, 0, degrad(0.00075)}, + {"HMICon", "HMI Continuum", "hmi_igr", 0, 0, degrad(0.00055)}, + {"HMIMag", "HMI Magnetogram", "hmi_mag", 0, 0, degrad(0.00055)}, + {"LASC2", "LASCO C2", "c2", -16, 20, degrad(0.00365)}, + {"LASC3", "LASCO C3", "c3", -16, 20, degrad(0.00775)}, +}; + +/* info about size of image to get/display */ +typedef struct { + char *name; /* widget name of this choice */ + char *label; /* widget label of this choice */ + char *file; /* string in file name for this size */ + int scale; /* wrt 256 */ + Widget w; /* controlling TB */ +} SOHOSize; +static SOHOSize ssize[] = { + {"512x512", "512x512", "512", 2}, + {"1024x1024", "1024x1024", "1024", 1}, +}; + +static char *sohohost; /* SOHO web site */ +static char suncategory[] = "Sun"; + +/* bring up the sun menu, creating if first time */ +void +sun_manage() +{ + if (!sunshell_w) { + sun_create_shell(); + sohohost = getXRes ("SOHOhost", NULL); + } + + XtPopup (sunshell_w, XtGrabNone); + set_something (sunshell_w, XmNiconic, (XtArgVal)False); + /* rely on expose to do fresh update */ + + /* register we are now up */ + setXRes (sun_viewupres(), "1"); +} + +/* called to update our scene */ +void +sun_update (Now *np, int how_much) +{ + if (!isUp(sunshell_w)) + return; + + timestamp (np, ts_w); + f_double (crn_w, "CRN: %.6f", carrington(np)); + if (sun_pm) + sun_refresh(); +} + +/* called to put up or remove the watch cursor. */ +void +sun_cursor (Cursor c) +{ + Window win; + + if (sunshell_w && (win = XtWindow(sunshell_w)) != 0) { + Display *dsp = XtDisplay(sunshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* called when basic resources change */ +void +sun_newres() +{ + if (!sunshell_w) + return; + sun_update (mm_get_now(), 1); +} + +/* return the name of the resource containing whether this view is up */ +char * +sun_viewupres() +{ + return ("SunViewUp"); +} + +/* create main shell */ +static void +sun_create_shell () +{ + Widget pd_w, cb_w, mb_w; + Widget w, f_w; + Arg args[20]; + char buf[64]; + int i; + int n; + + /* create outter shell and form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem Sun"); n++; + XtSetArg (args[n], XmNiconName, "Sun"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + sunshell_w = XtCreatePopupShell ("Sun", topLevelShellWidgetClass, + toplevel_w, args, n); + set_something (sunshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (sunshell_w, XmNpopdownCallback, sun_popdown_cb, 0); + setup_icon (sunshell_w); + sr_reg (sunshell_w, "XEphem*Sun.x", suncategory, 0); + sr_reg (sunshell_w, "XEphem*Sun.y", suncategory, 0); + sr_reg (sunshell_w, "XEphem*Sun.height", suncategory, 0); + sr_reg (sunshell_w, "XEphem*Sun.width", suncategory, 0); + sr_reg (NULL, sun_viewupres(), suncategory, 0); + + n = 0; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + f_w = XmCreateForm (sunshell_w, "SunF", args, n); + XtAddCallback (f_w, XmNhelpCallback, sun_help_cb, 0); + XtManageChild(f_w); + + /* menu bar */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (f_w, "SMB", args, n); + XtManageChild (mb_w); + + /* Control */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "CPD", args, n); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'D'); n++; + w = XmCreatePushButton (pd_w, "Download", args, n); + set_xmstring (w, XmNlabelString, "Download latest"); + wtip (w, "Download latest SOHO image of given Type and Size"); + XtAddCallback (w, XmNactivateCallback, sun_download_cb, 0); + XtManageChild (w); + + /* save not sensitive until image has been downloaded */ + n = 0; + XtSetArg (args[n], XmNmnemonic, 'S'); n++; + XtSetArg (args[n], XmNsensitive, False); n++; + save_w = XmCreatePushButton (pd_w, "Save", args, n); + set_xmstring (save_w, XmNlabelString, "Save downloaded image"); + wtip (save_w, "Save newly downloaded image to local disk"); + XtAddCallback (save_w, XmNactivateCallback, sun_save_cb, 0); + XtManageChild (save_w); + + n = 0; + w = XmCreateSeparator (pd_w, "S1", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'T'); n++; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + bytype_w = XmCreateToggleButton (pd_w, "ByType", args, n); + set_xmstring (bytype_w, XmNlabelString, "Filter Files by Type"); + wtip (bytype_w, "Whether Files restricts choices to Type"); + sr_reg (bytype_w, NULL, suncategory, 0); + XtManageChild (bytype_w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'F'); n++; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + bysize_w = XmCreateToggleButton (pd_w, "BySize", args, n); + set_xmstring (bysize_w, XmNlabelString, "Filter Files by Size"); + wtip (bysize_w, "Whether Files restricts choices to Size"); + sr_reg (bysize_w, NULL, suncategory, 0); + XtManageChild (bysize_w); + + n = 0; + w = XmCreateSeparator (pd_w, "S1", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'P'); n++; + w = XmCreatePushButton (pd_w, "Print", args, n); + XtAddCallback (w, XmNactivateCallback, sun_print_cb, NULL); + wtip (w, "Print the current SOHO image"); + set_xmstring (w, XmNlabelString, "Print..."); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'U'); n++; + w = XmCreatePushButton (pd_w, "Ann", args, n); + XtAddCallback (w, XmNactivateCallback, ano_cb, NULL); + set_xmstring (w, XmNlabelString, "User annotation..."); + wtip (w, "Draw text and lines on curret SOHO image"); + XtManageChild (w); + + n = 0; + n += ml_addacc (args, n); + XtSetArg (args[n], XmNmnemonic, 'm'); n++; + w = XmCreatePushButton (pd_w, "Movie", args, n); + XtAddCallback (w, XmNactivateCallback, sun_mloop_cb, NULL); + set_xmstring (w, XmNlabelString, "Add to movie..."); + wtip (w, "Add current image to movie loop"); + XtManageChild (w); + + n = 0; + w = XmCreateSeparator (pd_w, "S1", args, n); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + w = XmCreatePushButton (pd_w, "Close", args, n); + wtip (w, "Close this SOHO window"); + XtAddCallback (w, XmNactivateCallback, sun_close_cb, NULL); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Control", args, n); + XtManageChild (cb_w); + + /* Load */ + + n = 0; + lpd_w = XmCreatePulldownMenu (mb_w, "FPD", args, n); + XtAddCallback (lpd_w, XmNmapCallback, sun_fpd_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'L'); n++; + XtSetArg (args[n], XmNsubMenuId, lpd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Files", args, n); + wtip (cb_w, "Select a local SOHO file to display"); + XtManageChild (cb_w); + + /* Type */ + + n = 0; + XtSetArg (args[n], XmNradioBehavior, True); n++; + XtSetArg (args[n], XmNradioAlwaysOne, True); n++; + pd_w = XmCreatePulldownMenu (mb_w, "TPD", args, n); + + for (i = 0; i < XtNumber(stype); i++) { + SOHOType *tp = &stype[i]; + n = 0; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + tp->w = XmCreateToggleButton (pd_w, tp->name, args, n); + set_xmstring (tp->w, XmNlabelString, tp->label); + sprintf (buf, "XEphem*Sun*%s.set", tp->name); + sr_reg (tp->w, buf, suncategory, 0); + XtManageChild (tp->w); + } + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'T'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Type", args, n); + wtip (cb_w, "Specify SOHO image type to download"); + XtManageChild (cb_w); + + /* Size */ + + n = 0; + XtSetArg (args[n], XmNradioBehavior, True); n++; + XtSetArg (args[n], XmNradioAlwaysOne, True); n++; + pd_w = XmCreatePulldownMenu (mb_w, "TPD", args, n); + + for (i = 0; i < XtNumber(ssize); i++) { + SOHOSize *sp = &ssize[i]; + n = 0; + XtSetArg (args[n], XmNindicatorOn, True); n++; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + sp->w = XmCreateToggleButton (pd_w, sp->name, args, n); + set_xmstring (sp->w, XmNlabelString, sp->label); + sprintf (buf, "XEphem*Sun*%s.set", sp->name); + sr_reg (sp->w, buf, suncategory, 0); + XtManageChild (sp->w); + } + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'S'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Size", args, n); + wtip (cb_w, "Specify SOHO image size to download"); + XtManageChild (cb_w); + + /* help */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "TPD", args, n); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, sun_help_cb, 0); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + cb_w = XmCreateCascadeButton (mb_w, "Help", args, n); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + XtManageChild (cb_w); + + /* time stamp and CRN at bottom */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 50); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + ts_w = XmCreateLabel (f_w, "TS", args, n); + XtManageChild (ts_w); + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 50); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + crn_w = XmCreateLabel (f_w, "CRN", args, n); + XtManageChild (crn_w); + + /* cursor coords above */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ts_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + coords_w = XmCreateLabel (f_w, "Coordinates", args, n); + XtManageChild (coords_w); + + /* remainder is scrolled window for image */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, coords_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNscrollingPolicy, XmAUTOMATIC); n++; + XtSetArg (args[n], XmNshadowThickness, 1); n++; + ssw_w = XmCreateScrolledWindow (f_w, "SunSW", args, n); + XtManageChild (ssw_w); + + /* workarea is a drawing area */ + + n = 0; + XtSetArg (args[n], XmNwidth, 1024); n++; /* not critical */ + XtSetArg (args[n], XmNheight, 1024); n++; /* not critical */ + XtSetArg (args[n], XmNmarginHeight, 0); n++; + sunda_w = XmCreateDrawingArea (ssw_w, "SunMap", args, n); + XtAddEventHandler (sunda_w,PointerMotionMask,False,sun_motion_eh,0); + XtAddCallback (sunda_w, XmNexposeCallback, sun_exp_cb, NULL); + XtManageChild (sunda_w); + + /* SW assumes work is its child but just to be tidy about it .. */ + set_something (ssw_w, XmNworkWindow, (XtArgVal)sunda_w); +} + +/* called when the main scrolled area needs refreshing */ +/* ARGSUSED */ +static void +sun_exp_cb (Widget w, XtPointer client, XtPointer call) +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + XExposeEvent *e = &c->event->xexpose; + Now *np = mm_get_now(); + + watch_cursor (1); + + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + * also center the scroll bars initially. + */ + static int before; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; + XChangeWindowAttributes (e->display, e->window, mask, &swa); + + before = 1; + } + break; + } + default: + printf ("Unexpected mda_w event. type=%d\n", c->reason); + abort(); + } + + if (!sun_pm) + sun_load1(); /* load initial if possible */ + if (sun_pm) + sun_refresh(); + timestamp (np, ts_w); + f_double (crn_w, "CRN: %.6f", carrington(np)); + + watch_cursor (0); +} + +/* ARGSUSED */ +static void +sun_help_cb (Widget w, XtPointer client, XtPointer data) +{ + static char *msg[] = { + "This tool opens and displays solar images" + }; + + hlp_dialog ("Sun", msg, XtNumber(msg)); +} + +static void +sun_popdown_cb (Widget w, XtPointer client, XtPointer data) +{ + /* register we are now down */ + setXRes (sun_viewupres(), "0"); +} + +/* ARGSUSED */ +static void +sun_close_cb (Widget w, XtPointer client, XtPointer data) +{ + /* let popdown do the real work */ + XtPopdown (sunshell_w); +} + +static int +fn_cmp (const void *s1, const void *s2) +{ + return (strcmp (*(char **)s1, *(char **)s2)); +} + +/* ARGSUSED */ +static void +sun_print_cb (Widget w, XtPointer client, XtPointer data) +{ + XPSAsk ("Sun View", sun_print); +} + +/* ARGSUSED */ +static void +sun_mloop_cb (Widget w, XtPointer client, XtPointer data) +{ + ml_add (sun_pm, ts_w); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +sun_print () +{ + Display *dsp = XtDisplay(sunda_w); + Window win = XtWindow(sunda_w); + Window root; + Pixmap drawpm; + int rx, ry; + unsigned int bw, dep; + unsigned int wid, hei; + int s, t; + + /* must be up and showing */ + if (!isUp(sunshell_w) || !sun_pm) { + xe_msg (1, "Sun image be open to print."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get size */ + getTS (&t, &s); + s = 1024/ssize[s].scale; + + /* fit view in square across the top and prepare to capture X calls */ + XPSXBegin (sun_pm, 0, 0, s, s, 1*72, 10*72, (int)(6.5*72)); + + /* since our normal expose refresh draws annotation directly into the + * sunda_w window (which in turn is because we don't want to burn it + * into the sun_pm which we create only once when the image is read) + * we have to build another temp pixmap here just to add annotation + * Also, it would look nice to block out the black background of + * the MDI images but they use the same color in the dark sunspots. + */ + XGetGeometry (dsp, win, &root, &rx, &ry, &wid, &hei, &bw, &dep); + drawpm = XCreatePixmap (dsp, win, wid, hei, dep); + XCopyArea (XtD, sun_pm, drawpm, DefaultGC(XtD, DefaultScreen(XtD)), + 0, 0, wid, hei, 0, 0); + ano_draw (sunda_w, drawpm, sun_ano, 0); + XPSPixmap (drawpm, s, s, xe_cm, 0, 0); + XFreePixmap (dsp, drawpm); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + sun_ps_annotate (); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +sun_ps_annotate() +{ + Now *np = mm_get_now(); + char dir[128]; + char buf[128]; + int ctr = 306; /* = 8.5*72/2 */ + int lx = ctr-5; + int y; + + /* caption */ + y = AROWY(13); + (void) strcpy (buf, "XEphem Solar View"); + (void) sprintf (dir, "(%s) %d %d cstr", buf, ctr, y); + XPSDirect (dir); + + y = AROWY(9); + fs_date (buf, pref_get(PREF_DATE_FORMAT), mjd_day(mjd)); + (void) sprintf (dir, "(UTC Date:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + y = AROWY(8); + fs_time (buf, mjd_hr(mjd)); + (void) sprintf (dir, "(UTC Time:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); + + y = AROWY(7); + sprintf (buf, "%.6f", carrington(np)); + (void) sprintf (dir,"(Carrington number:) %d %d rstr (%s) %d %d lstr\n", + lx, y, buf, lx+10, y); + XPSDirect (dir); +} + +/* load one file initially for fun */ +static void +sun_load1() +{ + char **files; + int nfiles; + + nfiles = sun_gather (&files); + if (nfiles > 0) { + FILE *fp = fopend (files[0], "auxil", "r"); + sun_display (fp, files[0]); + fclose (fp); + XtFree ((char *) files); + } +} + +/* gather and sort all qualified file names. + * N.B. caller must free *files + */ +static int +sun_gather (char ***files) +{ + char sdir[1024]; + int nfiles = 0; + + *files = NULL; + sprintf (sdir, "%s/auxil", getShareDir()); + nfiles += scanDir (sdir, files, nfiles); + nfiles += scanDir (getPrivateDir(), files, nfiles); + qsort (*files, nfiles, sizeof(char *), fn_cmp); + + return (nfiles); +} + +/* display the given picture file stream */ +static void +sun_display (FILE *fp, char *name) +{ + unsigned char *pic; + int picl; + + fseek (fp, 0L, SEEK_END); + picl = (int) ftell(fp); + pic = (unsigned char *) XtMalloc (picl); + fseek (fp, 0L, SEEK_SET); + fread (pic, picl, 1, fp); + if (displayPic (name, pic, picl) < 0) + XtFree ((char *)pic); /* already told user why */ +} + +/* called when the Files pulldown is about to come up */ +/* ARGSUSED */ +static void +sun_fpd_cb (Widget w, XtPointer client, XtPointer data) +{ + WidgetList children; + Cardinal numChildren; + char **files; + int i, nfiles; + + /* gather and sort all file names */ + nfiles = sun_gather (&files); + + /* load into pulldown menu */ + get_something (lpd_w, XmNchildren, (XtArgVal)&children); + get_something (lpd_w, XmNnumChildren, (XtArgVal)&numChildren); + for (i = 0; i < nfiles; i++) { + Widget w; + if (i < numChildren) { + w = children[i]; + } else { + w = XmCreatePushButton (lpd_w, "LPDPB", NULL, 0); + XtAddCallback (w, XmNactivateCallback, sun_load_cb, NULL); + } + set_xmstring (w, XmNlabelString, files[i]); + XtManageChild (w); + } + + /* turn off unused buttons */ + for (; i < numChildren; i++) + XtUnmanageChild (children[i]); + + /* set to multi-column if lots of files */ + if (nfiles >= 5) + set_something (w,XmNnumColumns,(XtArgVal)((int)(sqrt(nfiles/5.0)))); + else + set_something (w, XmNnumColumns, (XtArgVal)1); + + /* finished with list */ + XtFree ((char *) files); +} + +/* called to load a local file when a Load PB is clicked. + * local file name is our labelString + */ +/* ARGSUSED */ +static void +sun_load_cb (Widget w, XtPointer client, XtPointer data) +{ + char *name; + FILE *fp; + int i; + + get_xmstring (w, XmNlabelString, &name); + + fp = fopend (name, "auxil", "r"); + if (fp) { + /* display */ + sun_display (fp, name); + fclose (fp); + + /* set type and size in menus to match based on fn */ + for (i = 0; i < XtNumber(stype); i++) { + if (strstr (name, stype[i].file)) { + XmToggleButtonSetState (stype[i].w, True, True); + break; + } + } + for (i = 0; i < XtNumber(ssize); i++) { + if (strstr (name, ssize[i].file)) { + XmToggleButtonSetState (ssize[i].w, True, True); + break; + } + } + + /* can not save a file loaded from disk */ + XtSetSensitive (save_w, False); + } + + XtFree (name); +} + +/* called to download the latest image of the current type and size */ +/* ARGSUSED */ +static void +sun_download_cb (Widget w, XtPointer client, XtPointer data) +{ + watch_cursor (1); + + /* read image */ + if (readSOHOImage() < 0) { + stopd_down(); + watch_cursor (0); + return; + } + + /* ok to save */ + XtSetSensitive (save_w, True); + + stopd_down(); + watch_cursor (0); +} + +/* called to save giffn[], if any, in private dir */ +/* ARGSUSED */ +static void +sun_save_cb (Widget w, XtPointer client, XtPointer data) +{ + char fn[1024]; + FILE *fp; + + /* never allowed again until new download */ + XtSetSensitive (save_w, False); + + /* sanity check */ + if (!picfn || !rawpic) { + xe_msg (1, "No image to save"); + return; + } + + /* create file */ + sprintf (fn, "%s/%s", getPrivateDir(), picfn); + fp = fopenh (fn, "w"); + if (!fp) { + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return; + } + + /* write */ + if (fwrite (rawpic, rawpicl, 1, fp) != 1) { + xe_msg (1, "%s:\n%s", picfn, syserrstr()); + fclose (fp); + return; + } + + /* ok */ + if (confirm()) + xe_msg (1, "%s:\nWritten successfully", picfn); + fclose (fp); +} + +/* called to display coords from cursor roaming */ +static void +sun_motion_eh (Widget w, XtPointer client, XEvent *ev, Boolean *dispatch) +{ + Display *dsp = XtDisplay(w); + Window win = XtWindow(w); + SOHOType *tp; + SOHOSize *sp; + int t, s; + Window root, child; + int rx, ry, wx, wy; + unsigned mask; + unsigned int bw, dep; + unsigned int wid, hei; + double r, d; + char cbuf[64], rbuf[32], dbuf[32]; + + if (!picfn || !rawpic) + return; + + XGetGeometry (dsp, win, &root, &rx, &ry, &wid, &hei, &bw, &dep); + XQueryPointer (dsp, win, &root, &child, &rx, &ry, &wx, &wy, &mask); + + getTS (&t, &s); + tp = &stype[t]; + sp = &ssize[s]; + location (wx-wid/2, tp->dx/sp->scale, wy-hei/2, tp->dy/sp->scale, + tp->scale*sp->scale, &r, &d); + + fs_sexa (rbuf, radhr(r), 3, 600); + fs_sexa (dbuf, raddeg(d), 3, 60); + sprintf (cbuf, "RA, Dec: %s %s", rbuf, dbuf); + set_xmstring (coords_w, XmNlabelString, cbuf); +} + +/* read picture from sohohost and display. + * store picture in rawpic[] and its filename in *picfn. + * return 0 if ok else xe_msg and -1 + */ +static int +readSOHOImage() +{ + char fn[1024]; + int t, s; + char get[1024]; + char buf[1024]; + char filetime[100]; + char filetype[100]; + int isjpeg, jpegl; + int njpeg; + unsigned char *jpeg; + int fd, nr; + struct tm tm; + + memset(&tm, 0, sizeof(struct tm)); + + /* get desired type and size */ + if (getTS (&t, &s) < 0) + return (-1); + + /* build latest fn */ + sprintf (filetype, "%s", stype[t].file); + sprintf (fn, "/data/realtime/%s/%s/latest.jpg", filetype, ssize[s].file); + + /* build GET command */ + sprintf (get, "GET http://%s%s HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n", sohohost, fn, PATCHLEVEL); + + /* query server */ + fd = httpGET (sohohost, get, buf); + if (fd < 0) { + xe_msg (1, "http get: %s", buf); + return (-1); + } + + /* read header (everything to first blank line), looking for jpeg */ + isjpeg = 0; + jpegl = 0; + while (recvline (fd, buf, sizeof(buf)) > 1) { + xe_msg (0, "Rcv: %s", buf); + if (strstr (buf, "Content-Type:") && strstr (buf, "image/jpeg")) + isjpeg = 1; + if (strstr (buf, "Content-Length:")) + jpegl = atoi (buf+15); + if (strstr (buf, "Last-Modified:")) { + strptime(buf+20, "%d %b %Y %H:%M:%S %Z", &tm); + strftime(filetime, sizeof(filetime), "%Y%m%d_%H%M%S", &tm); + xe_msg (0, "Rcv: Filetime: %s", filetime); + } + } + if (!isjpeg) { + while (recvline (fd, buf, sizeof(buf)) > 0) + xe_msg (0, "Rcv: %s", buf); + xe_msg (1, "Error talking to SOHO .. see File->System log\n"); + close (fd); + return (-1); + } + if (jpegl == 0) { + xe_msg (1, "No Content-Length in header"); + close (fd); + return (-1); + } + + /* remainder should be a jpeg file, read into jpeg[] */ + pm_up(); + jpeg = NULL; + for (njpeg = 0; njpeg < jpegl; njpeg += nr) { + pm_set (100*njpeg/jpegl); + jpeg = (unsigned char *) XtRealloc ((char*)jpeg, njpeg+NSREAD); + nr = readbytes (fd, jpeg+njpeg, NSREAD); + if (nr < 0) { + xe_msg (1, "%s:\n%s", sohohost, syserrstr()); + pm_down(); + close (fd); + return (-1); + } + if (nr == 0) + break; + } + pm_down(); + close (fd); + + sprintf (fn, "/%s_%s.jpg", filetime, filetype); + /* display jpeg */ + if (displayPic (fn, jpeg, njpeg) < 0) + return (-1); + + /* clean up */ + return (0); +} + +/* display the picture file named fn and install as the "current" file. + * return 0 if ok, else -1 and why xe_msg() + * N.B. picture must be malloced memory and user should /not/ free, let us manage it + */ +static int +displayPic (char fn[], unsigned char *pic, int picl) +{ + static XColor xcol[256]; + static int xcolset; + Pixmap pm; + char buf[1024]; + int w, h; + int ok = 0; + + /* explode into pm */ + if (strstr (fn, ".gif")) { + ok = 1; + if (gif2pm (XtD, xe_cm, pic, picl, &w, &h, &pm, buf) < 0) { + xe_msg (1, "Display GIF: %s:\n%s", fn, buf); + return (-1); + } + } + if (strstr (fn, ".jpg")) { + char tmpfn[2048]; + FILE *tmpfp; + + ok = 1; + + /* free last batch of colors */ + if (xcolset) { + freeXColors (XtD, xe_cm, xcol, XtNumber(xcol)); + xcolset = 0; + } + + /* convert JPEG to pixmap */ + (void) tempfilename (tmpfn, "suntmp", ".jpg"); + tmpfp = fopen (tmpfn, "wb+"); + if (!tmpfp) { + xe_msg (1, "Can not create tmp file: %s", tmpfn); + return (-1); + } + fwrite(pic, picl, 1, tmpfp); + rewind(tmpfp); + if (jpeg2pm (XtD, xe_cm, tmpfp, &w, &h, &pm, xcol, buf) < 0) { + xe_msg (1, "Display JPEG: %s:\n%s", fn, buf); + fclose (tmpfp); + unlink (tmpfn); + return (-1); + } + xcolset = 1; + fclose (tmpfp); + unlink (tmpfn); + } + + if (ok == 0) { + xe_msg (1, "Unknown file type: %s", fn); + return (-1); + } + + /* replace pixmap and center */ + if (sun_pm) + XFreePixmap (XtD, sun_pm); + sun_pm = pm; + set_something (sunda_w, XmNwidth, (XtArgVal)(Dimension)w); + set_something (sunda_w, XmNheight, (XtArgVal)(Dimension)h); + centerScrollBars(ssw_w); + sun_refresh(); + if (rawpic) + XtFree ((char *)rawpic); + rawpic = pic; + rawpicl = picl; + storePicFN (fn, w); + + return (0); +} + +/* store base of fn[] in picfn[], include width w in name somewhere */ +static void +storePicFN (char fn[], int w) +{ + char buf[1024]; + char *sp, *lsp; + + /* find last slash in fn */ + lsp = NULL; + for (sp = fn; sp; sp = strchr (sp+1, '/')) + lsp = sp; + if (!lsp) { + printf ("Bug! no / in filename '%s'\n", fn); + abort(); + } + + sprintf (buf, "SOHO_%d_%s", w, lsp+1); + if (picfn) + XtFree (picfn); + picfn = XtNewString (buf); +} + +/* get indices into user's current type and size settings. + * either can be NULL if not interested. + */ +static int +getTS (int *tp, int *sp) +{ + int i; + + if (tp) { + for (i = 0; i < XtNumber(stype); i++) { + if (XmToggleButtonGetState (stype[i].w)) { + *tp = i; + break; + } + } + if (i == XtNumber(stype)) { + xe_msg (1, "No SOHO type"); + return (-1); + } + } + + if (sp) { + for (i = 0; i < XtNumber(ssize); i++) { + if (XmToggleButtonGetState (ssize[i].w)) { + *sp = i; + break; + } + } + if (i == XtNumber(ssize)) { + xe_msg (1, "No SOHO size"); + return (-1); + } + } + + return (0); +} + +static int +scanDir (char *dir, char ***files, int nfiles) +{ + int bytype = XmToggleButtonGetState (bytype_w); + int bysize = XmToggleButtonGetState (bysize_w); + int t, s; + DIR *dirp; + struct dirent *dp; + int n; + + /* get type and size settings if currently interested */ + if ((bytype || bysize) && getTS (&t, &s) < 0) + return (0); + + /* open and scan the directory for matching names */ + dirp = opendir (dir); + if (!dirp) + return (0); + for (n = 0; (dp = readdir (dirp)) != NULL; ) { + if (strncmp (dp->d_name, "SOHO", 4) == 0 && + (!bytype || strstr (dp->d_name, stype[t].file)) && + (!bysize || strstr (dp->d_name, ssize[s].file))) { + *files = (char **) XtRealloc ((char *)(*files), + (nfiles + n + 1) * sizeof(char *)); + (*files)[nfiles + n++] = XtNewString (dp->d_name); + } + } + + /* finished */ + closedir (dirp); + return (n); +} + +static void +sun_refresh() +{ + Dimension w, h; + + get_something (sunda_w, XmNwidth, (XtArgVal)&w); + get_something (sunda_w, XmNheight, (XtArgVal)&h); + XCopyArea (XtD, sun_pm, XtWindow(sunda_w), + DefaultGC(XtD, DefaultScreen(XtD)), 0, 0, w, h, 0, 0); + + /* draw annotation directly onto window so we don't dirty up the + * pixmap (which we only load with the image once) + */ + ano_draw (sunda_w, XtWindow(sunda_w), sun_ano, 0); +} + +/* convert image proportions to/from X windows coords depending on w2x. + * return whether visible. + */ +static int +sun_ano (double *fracX, double *fracY, int *xp, int *yp, int w2x, int arg) +{ + Display *dsp = XtDisplay (sunda_w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + XGetGeometry(dsp, sun_pm, &root, &x, &y, &nx, &ny, &bw, &d); + + if (w2x) { + *xp = (int)floor(*fracX*nx + 0.5); + *yp = (int)floor(*fracY*ny + 0.5); + } else { + *fracX = (double)*xp/nx; + *fracY = (double)*yp/ny; + } + + return (*xp>=0 && *xp=0 && *yps_dec); + double cd = cos (sop->s_dec); + double xp, yp, p, cp, sp; + + /* SOHO image is always rotated with N solar axis vertical. + * find rotation, p, to bring equatoral N up. + */ + solve_sphere (sop->s_ra-SUNPOLERA, PI/2-SUNPOLEDEC, sd, cd, NULL, &p); + + /* rotate screen coords so eq N is up */ + cp = cos(p); + sp = sin(p); + y -= dy; + x -= dx; + xp = x*cp - y*sp; + yp = x*sp + y*cp; + + *decp = sop->s_dec - yp*scale; + *rap = sop->s_ra - xp*scale/cos(*decp); + range (rap, 2*PI); +} + +/* display carrington coord for current time */ +static double +carrington(Now *np) +{ + return ((1./27.2753)*((mjd+MJD0)-2398167.0) + 1.0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sunmenu.c,v $ $Date: 2012/03/07 01:10:15 $ $Revision: 1.23 $ $Name: $"}; + diff --git a/GUI/xephem/time.c b/GUI/xephem/time.c new file mode 100644 index 0000000..fa28276 --- /dev/null +++ b/GUI/xephem/time.c @@ -0,0 +1,127 @@ +/* get the time from the os. + */ + +#include +#include +#include + +#include + +#include "xephem.h" + + +static long c0; +static double mjd0; + +/* save current mjd and corresponding system clock for use by inc_mjd(). + * this establishes the base correspondence between the mjd and system clock. + */ +void +set_t0 (np) +Now *np; +{ + mjd0 = mjd; + c0 = time (NULL); +} + +/* fill in n_mjd from the system clock. + * try to set timezone name and offset too but only if __STDC__ -- there's too + * many conflicting ways to do it otherwise. + */ +void +time_fromsys (np) +Now *np; +{ + time_t t; + + t = time(NULL); + + /* t is seconds since 00:00:00 1/1/1970 UTC on UNIX systems; + * mjd was 25567.5 then. + */ +#if defined(VMS) && (__VMS_VER < 70000000) + /* VMS returns t in seconds since 00:00:00 1/1/1970 Local Time + * so we need to add the timezone offset to get UTC. + * Don't need to worry about 'set_t0' and 'inc_mjd' because + * they only deal in relative times. + * this change courtesy Stephen Hirsch + * - OpenVMS V7.0 finally has gmt support! so use standard time + * - algorithm Vance Haemmerle + */ + mjd = (25567.5 + t/3600.0/24.0) + (tz/24.0); +#else + mjd = 25567.5 + t/3600.0/24.0; +#endif + + (void) tz_fromsys(np); +} + +/* given the mjd within np, try to figure the timezone from the os. + * return 0 if it looks like it worked, else -1. + */ +int +tz_fromsys (np) +Now *np; +{ + struct tm *gtmp; + double m0; + time_t t; + + /* if outside UNIX time range (~1901..2038) use 2000 */ + if (mjd < 713 || mjd > 50422) { + int m, y; + double d; + mjd_cal (mjd, &m, &d, &y); + y = 2000; + cal_mjd (m, d, y, &m0); + } else + m0 = mjd; + + + /* UNIX uses a 1970 epoch */ + t = (time_t)((m0 - 25567.5) * (3600.0*24.0) + 0.5); + + /* try to find out timezone by comparing local with UTC time. + * GNU doesn't have difftime() so we do time math with doubles. + */ + gtmp = gmtime (&t); + if (gtmp) { + double gmkt, lmkt; + struct tm *ltmp; + + gtmp->tm_isdst = 0; /* _should_ always be 0 already */ + gmkt = (double) mktime (gtmp); + + ltmp = localtime (&t); + ltmp->tm_isdst = 0; /* let mktime() figure out zone */ + lmkt = (double) mktime (ltmp); + + tz = (gmkt - lmkt) / 3600.0; + (void) strftime (tznm, sizeof(tznm)-1, "%Z", ltmp); + return (0); + } else + return (-1); +} + +void +inc_mjd (np, inc, rev, rtcflag) +Now *np; +double inc; /* hours to increment mjd */ +int rev; /* set if want to go in reverse */ +int rtcflag; /* relative since set mjd0 */ +{ + if (rtcflag) { + if (rev) + mjd = mjd0 - (time(NULL) - c0)/SPD; + else + mjd = mjd0 + (time(NULL) - c0)/SPD; + } else { + if (rev) + mjd -= inc/24.0; + else + mjd += inc/24.0; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: time.c,v $ $Date: 2005/07/09 02:11:56 $ $Revision: 1.9 $ $Name: $"}; diff --git a/GUI/xephem/tips.c b/GUI/xephem/tips.c new file mode 100644 index 0000000..ff4253e --- /dev/null +++ b/GUI/xephem/tips.c @@ -0,0 +1,401 @@ +/* this file contains code to manage the widget tips facility. + * + * N.B. this code assumes the strings registered with wtip() live for the + * lifetime of the widget. If this is not the case, malloced copies must be + * kept here. This is performed if #define MALLOC_COPIES is set. This is not + * the default to avoid needlessly peppering the heap with long-lived copies. + */ + +#include +#include + +#include /* easy way to bring in Xt stuff is all */ + +#include "xephem.h" + + +/* keep a list of the tips for each registered widget. + * w == 0 is used to mark a recycled entry. + */ +typedef enum { + T_DOWN, T_ARMED, T_UP +} TState; +typedef struct { + Widget w; /* the widget for this tip */ + String s; /* its text */ + TState state; /* down, armed or up */ +} Tip; + +void wtip_init (void); + +static void tip_new (Widget w, String s); +static void tip_reclaim (Widget w); +static void tip_eh (Widget w, XtPointer c, XEvent *e, Boolean *cont); +static void tip_startup (Tip *tp); +static void timer_cb (XtPointer client, XtIntervalId *id); +static void tip_up (Tip *tp); +static void tip_down (Tip *tp); +static void tip_destroy_cb (Widget w, XtPointer client, XtPointer call); +static Tip *tip_find (Widget w); +static int tip_sf (const void * a1, const void * a2); +static void tip_sort (void); + +#define GAP 5 /* gap around text, pixels */ +#define BW 1 /* window border width */ +#define VOFFSET 15 /* dist from pointer to window top, pixels */ +#define EDGE 10 /* min space to edge of screen */ +#define TIPTO 1100 /* time to wait before raising tip, ms */ +#define MAXDW 1280 /* max dsp width, beware large virtual roots */ + +static Tip *tips; /* all current tips -- w==0 when not in use */ +static int ntips; /* total tips in tips[] */ +static Window the_w; /* tips window */ +static GC the_gc; /* tips gc */ +static XFontStruct *the_fs; /* tips font */ +static Pixel the_fg, the_bg; /* foreground and background colors */ +static int tips_sorted; /* flag set when tips array is sorted */ + +/* connect the given string as the tip for the given widget */ +void +wtip (w, tip) +Widget w; +char *tip; +{ + /* gadgets don't have windows and hence no events or even a XtDisplay */ + if (XmIsGadget (w)) { + fprintf (stderr, "Widget is really a Gadget. tip=%s\n", tip); + return; + } + + /* one-time initialization */ + if (!the_w) + wtip_init(); + + /* connect handlers to this widget. + * we tried using translations but it interfered too much + */ + XtAddEventHandler (w, EnterWindowMask, False, tip_eh, (XtPointer)1); + XtAddEventHandler (w, LeaveWindowMask, False, tip_eh, (XtPointer)0); + XtAddEventHandler (w, ButtonPressMask, False, tip_eh, (XtPointer)0); + XtAddEventHandler (w, ButtonReleaseMask, False, tip_eh, (XtPointer)0); + XtAddCallback (w, XmNdestroyCallback, tip_destroy_cb, NULL); + + /* add info to the master list */ + tip_new (w, tip); +} + +/* go through all the tips and make sure they are all down. + */ +void +wtip_alldown() +{ + Tip *tp, *ltp; + + for (tp = tips, ltp = &tips[ntips]; tp < ltp; tp++) { + if (tp->w && tp->state != T_DOWN) { + tip_down(tp); + tp->state = T_DOWN; + } + } +} + +/* one-time initialization stuff: create a window, font and gc. + * TODO: reclaim old stuff when called again + */ +void +wtip_init () +{ + Display *dsp = XtDisplay(toplevel_w); + Window root = RootWindow (dsp, DefaultScreen(dsp)); + XSetWindowAttributes wa; + unsigned long mask; + XColor defxc, dbxc; + XGCValues gcv; + char *cnam; + + /* get tip colors */ + cnam = getXRes ("tipForeground", "black"); + if (!XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc)) + the_fg = BlackPixel (dsp, DefaultScreen(dsp)); + else + the_fg = defxc.pixel; + cnam = getXRes ("tipBackground", "white"); + if (!XAllocNamedColor (dsp, xe_cm, cnam, &defxc, &dbxc)) + the_bg = WhitePixel (dsp, DefaultScreen(dsp)); + else + the_bg = defxc.pixel; + + /* create the tips window -- use same one for all. + * any size/color will do for now since we change each time anyway. + */ + the_w = XCreateSimpleWindow (dsp, root, 0, 0, 10, 10, BW, + the_fg, the_bg); + + /* prevent window manager from decorating */ + mask = CWOverrideRedirect | CWSaveUnder; + wa.override_redirect = True; + wa.save_under = True; + XChangeWindowAttributes (dsp, the_w, mask, &wa); + + /* pick a font and make a GC */ + the_fs = XLoadQueryFont (dsp, getXRes ("tipFont", "xxx")); + if (!the_fs) + the_fs = XLoadQueryFont (dsp, "fixed"); + if (!the_fs) { + printf ("Tips: no fixed font ?!?\n"); + abort(); + } + gcv.font = the_fs->fid; + mask = GCFont; + the_gc = XCreateGC (dsp, root, mask, &gcv); +} + +/* add a new tip to tips[]. + * these tend to occur in bunches so just add to the end and mark the + * array as unsorted. it will be sorted before being used. + */ +static void +tip_new (w, s) +Widget w; +String s; +{ + Tip *tp, *ltp; + + /* find an empty spot, or grow if none */ + for (tp = tips, ltp = &tips[ntips]; tp < ltp; tp++) + if (tp->w == 0) + break; + if (tp == ltp) { + /* nope -- make a new spot */ + tips = (Tip *) XtRealloc ((void *)tips, (ntips+1)*sizeof(Tip)); + tp = &tips[ntips++]; + } + + /* save widget */ + tp->w = w; + + /* save text */ +#ifdef MALLOC_COPIES + tp->s = XtNewString (s); +#else + tp->s = s; +#endif + + /* init state */ + tp->state = T_DOWN; + + /* mark array as being unsorted now */ + tips_sorted = 0; +} + +/* reclaim storage for tip info associated with w */ +static void +tip_reclaim (w) +Widget w; +{ + Tip *tp; + + tp = tip_find (w); + if (tp) { + tp->w = (Widget) 0; +#ifdef MALLOC_COPIES + XtFree (tp->s); +#endif + tips_sorted = 0; + return; + } + + /* ha? */ + fprintf (stderr, "Tips: stranger reclaimed: %s\n", XtName(w)); +} + +/* event handler -- c is 1 if want up, 0 for down */ +static void +tip_eh (w, c, e, cont) +Widget w; +XtPointer c; +XEvent *e; +Boolean *cont; +{ + Tip *tp; + int wantup; + + /* don't do anything if the tips preference is currently turned off */ + if (pref_get (PREF_TIPS) == PREF_NOTIPS) + return; + + tp = tip_find (w); + if (!tp) + return; + + wantup = ((long int)c == 1); + if (wantup) { + if (tp->state == T_DOWN) { + tip_startup (tp); + tp->state = T_ARMED; + } + } else { + if (tp->state == T_UP) + tip_down (tp); + tp->state = T_DOWN; + } +} + +/* start a timer which, if it springs, will pop up the given tip */ +static void +tip_startup (tp) +Tip *tp; +{ + XtAppContext ac = XtWidgetToApplicationContext (tp->w); + + /* N.B. tp can move if realloced, index can move if sorted. */ + (void) XtAppAddTimeOut (ac, TIPTO, timer_cb, (XtPointer)(tp->w)); +} + +/* timer expired so pop up tip for widget in client unless went DOWN again */ +/* ARGSUSED */ +static void +timer_cb (client, id) +XtPointer client; +XtIntervalId *id; +{ + Widget w = (Widget)client; + Tip *tp = tip_find (w); + + /* conceivable it was destroyed */ + if (!tp) + return; + + if (tp->state == T_ARMED) { + tip_up (tp); + tp->state = T_UP; + } +} + +/* pop up the given tip */ +static void +tip_up (tp) +Tip *tp; +{ + Display *dsp = XtDisplay (tp->w); + Window win = XtWindow (tp->w); + int scr = DefaultScreen(dsp); + int dw = DisplayWidth(dsp,scr); + int dh = DisplayHeight(dsp,scr); + int l = strlen (tp->s); + int dir, asc, des; + int wid, hei; + Window root, child; + XCharStruct oa; + int x, y, wx, wy; + unsigned int pqmask; + XSetWindowAttributes wa; + unsigned long mask; + + /* compute size of window to wrap nicely around text */ + XTextExtents (the_fs, tp->s, l, &dir, &asc, &des, &oa); + wid = oa.width + 2*GAP; + hei = oa.ascent + oa.descent + 2*GAP; + + /* set position near pointer but never over it and beware screen edge */ + if (dw > MAXDW) + dw = MAXDW; + XQueryPointer (dsp, win, &root, &child, &x, &y, &wx, &wy, &pqmask); + if (x + wid + 2*BW > dw-EDGE) + x = dw-EDGE - wid - 2*BW; + y += VOFFSET; + if (y + hei + 2*BW > dh-EDGE) + y -= 2*VOFFSET + hei + 2*BW; /* never on pointer */ + XMoveResizeWindow (dsp, the_w, x, y, wid, hei); + + /* set colors to match source */ + mask = CWBackPixel|CWBorderPixel|CWColormap; + wa.background_pixel = the_bg; + wa.border_pixel = the_fg; + wa.colormap = xe_cm; + XChangeWindowAttributes (dsp, the_w, mask, &wa); + XClearWindow (dsp, the_w); + XMapRaised (dsp, the_w); + XSync (dsp, 0); /* so we don't need to wait for Expose elsewhere */ + + /* draw the text */ + XSetForeground (dsp, the_gc, the_fg); + XDrawString (dsp, the_w, the_gc, GAP, oa.ascent+GAP, tp->s, l); +} + +/* pop down the tip window */ +static void +tip_down(tp) +Tip *tp; +{ + XUnmapWindow (XtDisplay(tp->w), the_w); +} + +/* w is being destroyed so reclaim its tip info */ +/* ARGSUSED */ +static void +tip_destroy_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + tip_reclaim (w); +} + +/* find the Tip for the given widget, else NULL. + * use a binary search. sort the array first if necessary. + */ +static Tip * +tip_find (w) +Widget w; +{ + long wl = (long)w; + long s; + int t, b, m; + + if (!tips_sorted) + tip_sort(); + + /* binary search */ + t = ntips - 1; + b = 0; + while (b <= t) { + m = (t+b)/2; + s = wl - (long)(tips[m].w); + if (s == 0) + return (&tips[m]); + if (s < 0) + t = m-1; + else + b = m+1; + } + + return (NULL); +} + +/* qsort-style function to sort the tips array by widget */ +static int +tip_sf (const void *a1, const void *a2) +{ + Tip *t1 = (Tip *)a1; + Tip *t2 = (Tip *)a2; + long d = (long)(t1->w) - (long)(t2->w); + + if (d < 0) + return (-1); + if (d > 0) + return (1); + return (0); +} + +/* sort the tips array by widget id, then mark it sorted */ +static void +tip_sort () +{ + if (ntips > 0) + qsort ((void *)tips, ntips, sizeof(Tip), tip_sf); + tips_sorted = 1; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: tips.c,v $ $Date: 2009/01/05 20:55:54 $ $Revision: 1.14 $ $Name: $"}; diff --git a/GUI/xephem/tools/._encke2edb.pl b/GUI/xephem/tools/._encke2edb.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._encke2edb.pl differ diff --git a/GUI/xephem/tools/._extract.awk b/GUI/xephem/tools/._extract.awk new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._extract.awk differ diff --git a/GUI/xephem/tools/._jost2edb.awk b/GUI/xephem/tools/._jost2edb.awk new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._jost2edb.awk differ diff --git a/GUI/xephem/tools/._libastro_sample.c b/GUI/xephem/tools/._libastro_sample.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._libastro_sample.c differ diff --git a/GUI/xephem/tools/._mpccomet2edb.pl b/GUI/xephem/tools/._mpccomet2edb.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._mpccomet2edb.pl differ diff --git a/GUI/xephem/tools/._mpec2edb.pl b/GUI/xephem/tools/._mpec2edb.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._mpec2edb.pl differ diff --git a/GUI/xephem/tools/._tle2edb.pl b/GUI/xephem/tools/._tle2edb.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/._tle2edb.pl differ diff --git a/GUI/xephem/tools/encke2edb.pl b/GUI/xephem/tools/encke2edb.pl new file mode 100755 index 0000000..faca531 --- /dev/null +++ b/GUI/xephem/tools/encke2edb.pl @@ -0,0 +1,95 @@ +#!/usr/bin/perl +# convert elements appearing in http://encke.jpl.nasa.gov/eph to xephem format. +# we need to scan the entire ephemeris so we can dig out the various values +# which are sprinkled near the beginning and end of the file. +# (C) 1996 Elwood Charles Downey +# Feb 6, 1996. v1.0 +# Feb 7, 1996. v1.1 incorporated nice perl tweaks from dbrooks@x.org. +# Feb 17,1996 v1.2 work harder to pull out a name. + +# read the file and pick out the good stuff. +while (<>) { + # Capture the name from a title line -- example: + # TWO BODY EPHEMERIS (J2000.0 EQUINOX) FOR C/1995 Y1 (HYAKUTAKE) + if (/TWO BODY EPHEMERIS \([BJ0-9.]+ EQUINOX\) FOR(.*)/) { + $_ = $1; + chop(); + s/^ *//; + s/ *$//; + s/ ?Comet ?//; + s/[()]//g; + s/[CP]\///; + $name = $_; + next; + } + + # Capture the epoch from the title line before the elements -- example: + # THE ABOVE COMET EPHEMERIS IS BASED UPON THE FOLLOWING ECLIPTIC ORBITAL ELEMENTS(J2000.0 + if (/THE ABOVE COMET EPHEMERIS IS BASED UPON THE FOLLOWING ECLIPTIC ORBITAL ELEMENTS\([BJ]([\d.]+)\)/) { + $epoch = $1; + next; + } + + # Capture the orbital elements on line following their headings. + if (/YR MN DY HR J.D. Q\(AU\) E SOMEGA\(DEG\) LOMEGA\(DEG\) I\(DEG\)/) { + warn "Warning: multiple data sets found -- using last.\n" + if defined($YR); + $_ = <>; + ($YR,$MN,$DY,$HR,$JD,$Q,$E,$SOMEGA,$LOMEGA,$I) = split(' '); + next; + } + + # Capture magnitude model from line clear at the bottom -- example: + # TMAG = TOTAL MAGNITUDE = 7.5 + 5.00*LOG10(DELTA) + 10.00*LOG10(R). + if (/TMAG = TOTAL MAGNITUDE[\s=]+([\d.]+)[\s+]+5\.00\*LOG10\(DELTA\)[\s+]+([\d.]+)\*LOG10\(R\)/) { + $g = $1; + $k = $2/2.5; + next; + } +} + +# did we find everything necessary? +length($name) > 0 || die "No name found.\n"; +$epoch > 1900 || die "No epoch found.\n"; +defined($YR) || die "No orbital elements found.\n"; +$g > 0 || $k > 0 || warn "No magnitude model found.\n"; # not especially fatal. + +# format output depending on orbital shape. +if ($E < 1) { + # elliptical + $i = $I; # inclination + $O = $LOMEGA; # long of asc node + $o = $SOMEGA; # arg of peri + $a = $Q/(1-$E); # mean distance + $n = 0; # mean daily motion (derived) + $e = $E; # eccentricity + $M = 0; # mean anomaly + $D = $epoch; # date of i/O/o + + printf "%s,e,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%g/%.8g/%g,%g,g%g,%g\n", + $name, $i, $O, $o, $a, $n, $e, $M, $MN, $DY+$HR/24, $YR, $D, $g, $k; +} elsif ($E > 1) { + # hyperbolic + $i = $I; # inclination + $O = $LOMEGA; # long of asc node + $o = $SOMEGA; # arg of peri + $e = $E; # eccentricity + $q = $Q; # peri distance + $D = $epoch; # date of i/O/o + + printf "%s,h,%g/%.8g/%g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%g,%g\n", + $name, $MN, $DY+$HR/24, $YR, $i, $O, $o, $e, $q, $D, $g, $k; +} else { + # parabolic + $i = $I; # inclination + $o = $SOMEGA; # arg of peri + $q = $Q; # peri distance + $O = $LOMEGA; # long of asc node + $D = $epoch; # date of i/O/o + + printf "%s,p,%g/%.8g/%g,%.8g,%.8g,%.8g,%.8g,%.8g,%g,%g\n", + $name, $MN, $DY+$HR/24, $YR, $i, $o, $q, $O, $D, $g, $k; +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: encke2edb.pl,v $ $Date: 1996/10/11 14:47:17 $ $Revision: 1.1 $ $Name: $ diff --git a/GUI/xephem/tools/extract.awk b/GUI/xephem/tools/extract.awk new file mode 100755 index 0000000..11ea5be --- /dev/null +++ b/GUI/xephem/tools/extract.awk @@ -0,0 +1,642 @@ +#!/bin/sh +# +# (l) 1996 by Pawel T. Jochym +# +# $Header: /home/ecdowney/telescope/GUI/xephem/tools/RCS/extract.awk,v 1.1 1996/08/26 19:40:53 ecdowney Exp $ +# +# Shell (bash)/awk (gawk) script for extracting +# Comets orbital elements from various internet postings. +# It creates on stdout records in XEphem edb format from +# analysis of files enumerated in command line. +# +# Synopsis +# extr [file1 file2 ...] +# +# History: +# +# $Log: extract.awk,v $ +# Revision 1.1 1996/08/26 19:40:53 ecdowney +# Initial revision +# +# Revision 1.2 1996/06/02 15:49:32 jochym +# First full implementation of Don Yeomas format decoder. +# +# Revision 1.1 1996/06/02 11:11:20 jochym +# Initial revision +# +# +# Yes, this is a free software (GPL). +# +# You can always send comments, additions, +# bug raports, money and beautiful woman +# to the above address. +# + +SUFF=$$ +TMPDIR="/tmp" + +# Create file names + +AWKENCKE=$TMPDIR/extract.encke.$SUFF +AWKYEOMAS=$TMPDIR/extract.yeomas.$SUFF +AWKSKYMAP=$TMPDIR/extract.skymap.$SUFF +AWKCOMET=$TMPDIR/extract.comet.$SUFF +AWKREC=$TMPDIR/extract.type.$SUFF +AWKTYPEOUT=$TMPDIR/extract.out.$SUFF + +# Create awk scripts + +# Type of file recognizer + +cat >$AWKREC <<"EOF" +# AWK script for recognizing file type +# Returns (prints to stdout) name of file type +# ID's are: +# Yeomas +# Encke +# Comet +# SkyMap +# Unrecognized + +# Initialization + +BEGIN{ + result="Unrecognized"; + yeomas=0; + encke=0; + comet=0; + skymap=0; +} + +END{ + print result +} + +# Don Yeomas format + +/Don/ && /Yeomas/{ + result="Yeomas" + if (++yeomas>3) exit; +} + +/Planetary/ && /Ephemeris/{ + result="Yeomas" + if (++yeomas>3) exit; +} + +/\(with/ && /perturbations\)/{ + result="Yeomas" + if (++yeomas>3) exit; +} + +/Moon-Earth-Object/{ + result="Yeomas" + if (++yeomas>3) exit; +} + +/Corrected/ && /Elements/ && /Solution/{ + result="Yeomas" + if (++yeomas>3) exit; +} + +# Encke + +/TWO/ && /BODY/ && /EPHEMERIS/ && /GENERATOR/{ + result="Encke"; + exit; +} + +# Comet page format + + +/Latitude/ && /Longitude/ && /Magnetic/{ + result="Comet" + exit; +} + + +# Sky Map page (html) format + +/SkyMap/ && /Comet/ && /Orbital/{ + result="SkyMap" + exit; +} + +/Refer/ && /bottom/ && /page/ && /explanation/{ + result="SkyMap" + exit; +} + +EOF + +#Result line generator +cat >$AWKTYPEOUT <<"EOF" +#Type out the result +# Get params in the following order: +# T e i o O q g k name +{ +# print "# Got: "$0 + if ( substr($1,1,1) == "#" ){ + print "# " $0 ; + }else{ + T=$1; + e=$2+0.0; + i=$3+0.0; + o=$4+0.0; + O=$5+0.0; + q=$6+0.0; + epoch=$7+0.0; + g=$8+0.0; + k=$9+0.0; + name=$10 + for( l=11; l<=NF; l++ ) name=name " " $(l); + design=sprintf("%.13s",$10" "$11); + design=sprintf("%s",$10" "$11); + + # print name, design + + if (e < 1) { + # elliptical + a = q/(1-e); + printf "%-.13s,e,%.12g,%.12g,%.12g,%.12g,%.12g,%.12g,%.12g,%s,%.12g,g%g,%g #%s\n", \ + design, i, O, o, a, 0, e, 0, T, epoch, g, k, name ; + } else if (e > 1) { + # hyperbolic + printf "%-.13s,h,%s,%.12g,%.12g,%.12g,%.12g,%.12g,%.12g,g%g,%g #%s\n", \ + design, T, i, O, o, e, q, epoch, g, k, name ; + } else { + # parabolic + printf "%-.13s,p,%s,%.12g,%.12g,%.12g,%.12g,%.12g,g%g,%g #%s\n", \ + design, T, i, o, q, O, epoch, g, k, name ; + } + } +} + +EOF + +#SkyMap posting extractor + +cat >$AWKSKYMAP <<"EOF" +# AWK script for extracting orbital elements +# from SkyMap postings + +BEGIN{ +# print "# Sky Map decoder not implemented" + + state=0; + CONVFMT="%.12g" + OFMT="%.12g" + + mon["Jan"]=1; + mon["Feb"]=2; + mon["Mar"]=3; + mon["Apr"]=4; + mon["May"]=5; + mon["Jun"]=6; + mon["Jul"]=7; + mon["Aug"]=8; + mon["Sep"]=9; + mon["Oct"]=10; + mon["Nov"]=11; + mon["Dec"]=12; + + epoch=2000.0; + g=5; + k=4; +} + +/\<\/PRE\>/{ + if ( state==6 || state==8 ) { + printf ("%s %.12g %.12g %.12g %.12g %.12g %.12g %.12g %.12g %s\n", \ + T, e, i, o, O, q, epoch, g, k, name); + epoch=2000.0; + g=5; + k=4; + state=0; + } +} + +/\/{ + if ( state==0 ) state=1; + +} + +/\/ && /\<\/H4\>/{ + if ( state==1 ) { + state=2; + name=substr($0,10); + name=substr(name,2,length(name)-6); + # print "#"name +# if ( substr(name,2,1) == "/" ) { +# # tmpname=substr(name,6); +# name=substr(name,3,4)"/"substr(name,1,1)substr(name,7); +# # print "#"name +# } + } +} + +/\/{ + if ( state==2 ) { + state=3 ; + } +} + +/Epoch/{ + if (state==3) { + #This is anly an approximation ! + epoch=$3+(mon[$4]-1)/12+($5/365); + } +} + +/T:/ && /w:/ { + if ( state==3 ) { + state=4; + o=$7+0.0; + T=sprintf("%d/%g/%d", mon[$3]+0, $4+0.0, $2+0); + } +} + +/e:/ && /W:/ { + if ( state==4 ) { + state=5; + O=$4+0.0; + e=$2+0.0; + } +} + +/q:/ && /i:/ { + if ( state==5 ) { + state=6; #exit state + q=$2+0.0; + i=$4+0.0; + } +} + +/Magnitude/ && /parameters/{ + if (state==6) { + state=7; + } +} + +/H\ =/ && /G\ =/{ + if (state==7) { + state=8; #exit state + g=$3+0.0; + k=$6+0.0; + } +} + + +EOF + + + +#Comets page posting extractor + +cat >$AWKCOMET <<"EOF" +# AWK script for extracting orbital elements +# from Comets page postings + +BEGIN{ +} + + +EOF + +#Don Yeomas posting extractor + +cat >$AWKYEOMAS <<"EOF" +# AWK script for extracting orbital elements +# from Don Yeomas postings + +BEGIN{ +# print "# Don Yeomas decoder" + + mon["Jan"]=1; + mon["Feb"]=2; + mon["Mar"]=3; + mon["Apr"]=4; + mon["May"]=5; + mon["Jun"]=6; + mon["Jul"]=7; + mon["Aug"]=8; + mon["Sep"]=9; + mon["Oct"]=10; + mon["Nov"]=11; + mon["Dec"]=12; + + epoch=2000.0; + object = "" + state = 0 + nr_elems = 0; +} + + +END{ + if (nr_elems>0) { + for( l=0; l1) && (state<8)) { # We are in the main elements block - collect the data + if ($1=="e") { e=$2+0.0 ; state++ } + else if ($1=="q") { q=$2+0.0 ; state++ } + else if ($1=="Tp") { T=mon[$5]"/"$6"/"$4 ; state++ } + else if ($1=="Node") { O=$2+0.0 ; state++ } + else if ($1=="w") { w=$2+0.0 ; state++ } + else if ($1=="i") { i=$2+0.0 ; state++ } + else if ($1=="Post-Fit") ; + else print "# WHAT ?! state="state" in "$0; + }else if (state == 8) { # We are past main block - add the result and search for additionals +# print "# Elements for epoch: "etime + addelem( etime, T, e, i, w, O, q, 2000.0, object ); + state++; + }else if ((state == 11) && (NF==11)) { # We are at other epochs lines collect the data + etime=$3"/"$2"/"$1 +# print "# Elements for epoch: "etime + T=mon[$10]"/"$11"/"$9 + addelem( etime, T, $4+0.0, $8+0.0, $7+0.0, $6+0.0, $5+0.0, 2000.0, object ); + } else if ((state == 11) && (NF==8)) { # We are at other epochs lines header - do nothing + ; + } else if ((state == 11)) { # End of other epochs block - search for magnitude model +# print "# End of other epochs, NF="NF" state="state + state++ + } else if (state==13) { # Magnitude line found - analyse it + state++; + # find position of first plus sign first + g_base=-1 + k_base=-1 + for(l=1;l<=NF;l++) { + if (index($l,"+")!=0) { + if (g_base==-1) { + g_base=l; + } else if (k_base==-1) { + k_base=l; + } + } + } +# print "# g_base="g_base" k_base="k_base + g=$(g_base-1)+0.0 + k=$(k_base+1) + gsub("*log(r)","",k); + k=k/2.5 +# print "# TMag line g="g" k="k" - "$0 + updategk( g, k ) + } else if (state==14) { # all done - type the result + state++; + } +} + +EOF + +#Encke posting extractor + +cat >$AWKENCKE <<"EOF" +# AWK script for extracting orbital elements +# from encke postings + +# Initialize +BEGIN{ + FS="[=*+ \(\)]+" + state=0; + CONVFMT="%.12g" + OFMT="%.12g" +} + +#Type out the result +END{ + printf "%s %.12g %.12g %.12g %.12g %.12g %.12g %.12g %.12g %s\n", T, e, i, o, O, q, 2000.0, g, k, comment +} + +# Pattern based recognizers + +#Total magnitude line +/TOTAL/ && /MAGNITUDE/ { +# print "g=", $5," k=", $9 ; +# print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 ; + g=$5+0.0; + k=($9+0.0)/2.5; +} + +#Name line +/EPHEMERIS/ && /FOR/ { +# print "Comet: " $8, $9, $10 ; + if ( $8=="Comet" ) { + pos=9; + } + else { + pos=8; + }; + name = $(pos)$(pos+1); + comment=""; + for (j=pos; j 1) { + # hyperbolic + printf "%s,h,%s,%g,%g,%g,%g,%g,2000,%g,%g\n", \ + name, T, i, O, o, e, q, g, k + } else { + # parabolic + printf "%s,p,%s,%g,%g,%g,%g,2000,%g,%g\n", \ + name, T, i, o, q, O, g, k + } +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: jost2edb.awk,v $ $Date: 1998/04/30 02:19:21 $ $Revision: 1.1 $ $Name: $ diff --git a/GUI/xephem/tools/libastro_sample.c b/GUI/xephem/tools/libastro_sample.c new file mode 100644 index 0000000..815af56 --- /dev/null +++ b/GUI/xephem/tools/libastro_sample.c @@ -0,0 +1,84 @@ +/* example program to use libastro + */ + +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + +static void reportPosition (Now *np, Obj *op); + +int +main (int ac, char *av[]) +{ + Now now, *np = &now; /* Now and handy pointer */ + Obj obj, *op = &obj; /* Obj and handy pointer */ + + /* define local circumstances */ + + memset (np, 0, sizeof(*np)); /* zero everything initially */ + cal_mjd (1, 1.0, 2014, &mjd); /* mjd from calendar date and time */ + lat = degrad(30.0); /* latitude, +n rads */ + lng = degrad (-100.0); /* longitude, +e rads */ + tz = 7.0; /* time zone, hrs behind UTC */ + temp = 10; /* ambient air temp, C */ + pressure = 900; /* ambient air pressure, mBar */ + elev = 100/ERAD; /* local height above MSL, earth equatorial radii */ + dip = degrad(18); /* sun horizon altitude at twilight, rads down */ + epoch = J2000; /* time of computed coords, MJD or EOD */ + pref_set (PREF_EQUATORIAL, PREF_TOPO); /* set topocentric place, else GEO */ + + /* define target object, example star */ + + memset (op, 0, sizeof(*op)); /* zero everything initially */ + op->o_type = FIXED; /* fixed, except possibly for proper motion */ + op->f_RA = hrrad(1.0); /* RA, rads */ + op->f_dec = degrad(20.0); /* dec, +n rads */ + op->f_epoch = J2000; /* coord system */ + (void) strcpy (op->o_name, "Star"); /* name */ + (void) obj_cir (np, op); /* compute position @ now */ + reportPosition (np, op); /* print */ + + /* define target object, example Moon */ + + memset (op, 0, sizeof(*op)); /* zero everything initially */ + op->o_type = PLANET; /* core type */ + op->pl_code = MOON; /* ID code if PLANET */ + (void) strcpy (op->o_name, "Moon"); /* name */ + (void) obj_cir (np, op); /* compute position @ now */ + reportPosition (np, op); /* print */ + + return (0); +} + +static void +reportPosition (Now *np, Obj *op) +{ + int mon, year; + double day; + char sexa[32]; + + printf ("Circumstances:\n"); + mjd_cal (mjd, &mon, &day, &year); + printf ("UTC: %d/%g/%d\n", mon, day, year); + fs_sexa (sexa, raddeg(lat), 3, 3600); + printf ("Latitude: %s D:M:S +N\n", sexa); + fs_sexa (sexa, raddeg(lng), 3, 3600); + printf ("Longitude: %s D:M:S +E\n", sexa); + printf ("\n"); + + printf ("%s:\n", op->o_name); + fs_sexa (sexa, radhr(op->s_ra), 3, 3600); + printf ("RA: %s H:M:S\n", sexa); + fs_sexa (sexa, raddeg(op->s_dec), 3, 3600); + printf ("Dec: %s D:M:S\n", sexa); + fs_sexa (sexa, raddeg(op->s_alt), 3, 3600); + printf ("Altitude: %s D:M:S\n", sexa); + fs_sexa (sexa, raddeg(op->s_az), 3, 3600); + printf ("Azimuth: %s D:M:S\n", sexa); + printf ("\n"); + + printf ("\n"); +} diff --git a/GUI/xephem/tools/lx200xed/._LICENSE b/GUI/xephem/tools/lx200xed/._LICENSE new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/lx200xed/._LICENSE differ diff --git a/GUI/xephem/tools/lx200xed/._Makefile b/GUI/xephem/tools/lx200xed/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/lx200xed/._Makefile differ diff --git a/GUI/xephem/tools/lx200xed/._README b/GUI/xephem/tools/lx200xed/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/lx200xed/._README differ diff --git a/GUI/xephem/tools/lx200xed/._liblx200.c b/GUI/xephem/tools/lx200xed/._liblx200.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/lx200xed/._liblx200.c differ diff --git a/GUI/xephem/tools/lx200xed/._liblx200.h b/GUI/xephem/tools/lx200xed/._liblx200.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/lx200xed/._liblx200.h differ diff --git a/GUI/xephem/tools/lx200xed/._lx200xed.c b/GUI/xephem/tools/lx200xed/._lx200xed.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/lx200xed/._lx200xed.c differ diff --git a/GUI/xephem/tools/lx200xed/LICENSE b/GUI/xephem/tools/lx200xed/LICENSE new file mode 100644 index 0000000..b8cf3a1 --- /dev/null +++ b/GUI/xephem/tools/lx200xed/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/GUI/xephem/tools/lx200xed/Makefile b/GUI/xephem/tools/lx200xed/Makefile new file mode 100644 index 0000000..607d0dc --- /dev/null +++ b/GUI/xephem/tools/lx200xed/Makefile @@ -0,0 +1,25 @@ +LIBASTRO = ../../../../libastro +CLDFLAGS = +CFLAGS = -Wall -O2 $(CLDFLAGS) -I$(LIBASTRO) +LDFLAGS = $(CLDFLAGS) -L$(LIBASTRO) +CC = gcc + +LIBS = -lastro -lm + +OBJS = \ + liblx200.o \ + lx200xed.o + +TARS = Makefile GPL README liblx200.c liblx200.h lx200xed.c + +lx200xed: $(OBJS) + $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + +lx200xed.tar.gz: $(TARS) + tar cfz lx200xed.tar.gz $(TARS) + +clobber: + rm -f $(OBJS) lx200xed + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2000/11/27 21:55:46 $ $Revision: 1.1 $ $Name: $ diff --git a/GUI/xephem/tools/lx200xed/README b/GUI/xephem/tools/lx200xed/README new file mode 100644 index 0000000..e63f3a6 --- /dev/null +++ b/GUI/xephem/tools/lx200xed/README @@ -0,0 +1,56 @@ +What is this: + +lx200xed is a daemon to connect XEphem to a Meade LX200 on a serial port. It +connects between the serial port into which the telescope is plugged and +XEphem by using its two fifos xephem_in_fifo and xephem_loc_fifo. XEphem +expects to find these fifos in a directory named fifos within its ShareDir +resource directory. lx200xed is told where they are with its -m and -g command +line options, respectively. It is told which serial port to use with its -t +option. Neither program creates the fifos; they must be created ahead of time +using mkfifo(1). XEphem does not start the lx200xed daemon, you must do that +from a command line before opening the Sky View. Using ASCII art it works like +this (this assumes the ShareDir is /usr/local/xephem): + + ----------- ---------- + | XEphem | ---> /usr/local/xephem/fifos/xephem_loc_fifo -> | | + | Sky View | | lx200xed | + | | <--- /usr/local/xephem/fifos/xephem_in_fifo <- | | + ----------- ---------- + | + | + v + /dev/ttyS0 + + +Testing: + +To test the connection with XEphem without connecting to real hardware, use +the -e option. This emulates a telescope without needing real hardware. The +telescope starts pointing at RA/Dec 0/0 and shows a symbol there in the +Sky View. Right-clicking somewhere then clicking "Telescope GOTO" will command +the emulated telescope to move to the new location. If this works, XEphem and +lx200xed are communicating both ways correctly. + +History: + +As of XEphem release 3.6 this is consideredd a legacy interface. 3.6 introduces +the INDI control protocol. Drivers for a variety of devices can be found at +http://sourceforge.net/projects/indi. + +Terms: + +The source code files in this directory, namely liblx200.c, liblx200.h and +lx200xed.c, are Copyright (c) 1999, 2000 Mike Stute and Elwood Charles +Downey and are governed by the terms of the GNU General Public License. See +the file GPL for the complete terms of this license but basically it allows +you to use, modify and redistribute these files freely. + +However, the final executable, lx200xed, links with XEphem's libastro which +is governed by the terms of XEphem which is distinctly _not_ GPL. It only +allows you to use and modify its code for your personal and non-commercial +use; you may _not_ pass your changes on to anyone else (except back to me, ECD). + +Disclaimer: + +NO REPRESENTATION IS MADE ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY +PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. diff --git a/GUI/xephem/tools/lx200xed/liblx200.c b/GUI/xephem/tools/lx200xed/liblx200.c new file mode 100644 index 0000000..a944491 --- /dev/null +++ b/GUI/xephem/tools/lx200xed/liblx200.c @@ -0,0 +1,1239 @@ +/* + * liblx200 v0.8.1 + * A library for controlling the Meade LX200 series scopes + * + * Copyright (C) 1999, Mike Stute + * + * Todo: + * V0.6 will make this a daemon controlled with the usual + * signals with all functions available + * V1.1 will add lx200_errno queue and be concurrent + * non-blocking or async I/O or alarm on telescope reads + * V1.2 will add the TDB (telescope data block) for + * faster data retrieving and less scope chatter + * V1.3 will add configuration templates (if we get that far) + * V1.5 Clean up, bug free (hah) and ready for GTCCS + * V2.0 will swallow the file descriptor and no longer let + * the application program have access to it. But + * since this is concurrent, we do synchronization + * not the app., this may or may not be a needed by the + * time I get there. This means all apps would need to + * be rewritten; hence, the major version change + * + * Throughout all versions I am sure functions will be added + * to increase the high-level functionality as I get + * feedback (hopefully). + * + * A few notes: + * This library was designed for my use in writing the + * GTCCS modules (Generic Telescope and Camera Control System) + * I toyed with two main ideas when writing it and didn't + * end up with the initial design (hindsight vs. foresight). + * + * Originally I used a table look up with a set of tokens + * to pull the command from the tokenized table and a set + * of about 5 functions in the Base Library Functions + * with a function dispatcher to handle scope control. + * The dispatcher was called with a token and a buffer. + * This worked great, but did limit what the + * application program could do because the intelligence + * was built into the dispatcher and table. If an application + * needed lower level services, they weren't there. This was + * because my original design was high-level control only. + * + * But I decided a library that could provide both low and + * high level services would be more useful to more people + * and rewrote it as a module block library, that is a library + * of bottom-up functions where small low-level are combined + * to create high-level calls, thus allowing the application + * access to both high- and low-level services. This yielded + * the Base Library Functions, the Main Library Functions, + * and the Support Library Functions. This means + * more stack frames and a little more overhead, but in + * addition to providing both kinds of services, it also + * makes the code extremely easy to maintain and read. + * + * Two defines are called public and private. This is + * just a indication to application program developers + * on my original intentions. It's a free use library + * but I suggest you don't call private functions directly. + * I reserve the right to change then from version to version. + * All scope functions can be accessed through the public + * functions. + * + * As always, comments and suggestions are welcome. + * Mike Stute + * Feb 1999 + * mrstute@attbi.com + * + * Changes: + * Fixed lx200_fset_longitude(x,y) macro as + * pointed out by Jason Etherton + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liblx200.h" + +#define TREADTO 10 /* telescope read timeout, secs */ + +/* Globals*/ +private static struct termios lx200_oldtio,lx200_newtio; +private static char *lx200_planets[9]={"Mercury","Venus","","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"}; +private static char fHardwareEmulate=FALSE; +private static char iHardwareMode=TRUE; +/*TDB structure goes here*/ + +#undef DEBUG +/************************************************************** + * I/O Functions * + * These are the low-level input and output routines defined * + * for the scope. There is no generic "read-a-char" because * + * the point of liblx200 is to provided a "black box" module * + * for talking to the scope. An application program shouldn't * + * need to directly call any of the I/O routines, except * + * opening and closing the scope. However, currently (v1.0) * + * the application program is returned the file descriptor * + * so it is possible for an app. to handle all communications * + * with the scope directly. In that case, why is this code * + * linked in anyway? * + * Exports: * + * lx200_open-scope * + * lx200_close_scope * + **************************************************************/ +public int +lx200_open_scope(char *szDevice) +{ + int fd; + + /*Return the fake port if emulating a scope*/ + if(fHardwareEmulate) + return(LX200_EMULATE_FD); + + /* Open serial device to telescope */ + fd = open(szDevice,O_RDWR|O_NOCTTY); + if (fd<0) { +#ifdef DEBUG + perror(szDevice); +#endif + return(LX200_FALSE); + } + + /* Set the terminal for 9600,8-N-1 + * Non-canonical input processing + * no flow control + */ + + /*Clear the new term struct*/ + memset(&lx200_newtio,0,sizeof(lx200_newtio)); + tcgetattr(fd,&lx200_oldtio); /*save port settings*/ + + /* Set for 9600 CS8=8n1n CLOCAL=local connection CREAD=enable reading */ + cfsetospeed(&lx200_newtio, (speed_t) B9600); + cfsetispeed(&lx200_newtio, (speed_t) B9600); + lx200_newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; + lx200_newtio.c_iflag = IGNPAR; + lx200_newtio.c_oflag = 0; /* Raw output */ + + /* set input mode (non-canonical, no echo, ... */ + lx200_newtio.c_lflag = 0; + + lx200_newtio.c_cc[VTIME] = 0; /* inter-character timer unused, block instead */ + lx200_newtio.c_cc[VMIN] = 1; /* read 1 character minimum */ + + tcflush(fd, TCIFLUSH); /* clear the channel */ + tcsetattr(fd,TCSANOW,&lx200_newtio); /* set it */ + return(fd); +} + +/* Simple for serial scopes, not so simple for parallel + * or special dev scopes. + * Return saved terminal settings and close the device. + */ +public int +lx200_close_scope(int fd) +{ + if(!fHardwareEmulate) { + tcsetattr(fd,TCSANOW,&lx200_oldtio); + close(fd); + } + return(LX200_TRUE); +} + +/* + * You would think Meade designed the scope with blocking I/O in mind + * since they terminate everything with a TERMINATOR of #. But they + * broke their own rule, when they return "0" pr "1" with no terminator. + * This function reads and verifies an expected "0" + * if it doesn't ever come back from the scope, we're toast + * in the current version. But that indicates a problem with + * either the scope or the serial link, so it may just stay that + * way in the future. + * + * Perhaps ASYNC IO is in order for the scope channel + */ +private int +lx200_read_ok(int fd) +{ + char cIn; + + /*Fake a hardware response*/ + if(fHardwareEmulate) { + switch(iHardwareMode) { + case LX200_EMULATE_FALSE: + return(LX200_FALSE); + break; + case LX200_EMULATE_TRUE: + return(LX200_TRUE); + break; + } + } + + if((cIn=lx200_read_one(fd))==LX200_FALSE) + return(LX200_FALSE); + if(cIn=='1') + return(LX200_TRUE); + return(LX200_FALSE); +} + +/* + * Again Meade doesn't terminate with a '#' when returning + * a 0, 1, or 2 for some calls + * I rest my case + * The scope uses these to indicate success or errors for a few different calls + */ +private char +lx200_read_one(int fd) +{ + struct timeval tv; + fd_set rd; + char szIn[2]; + int iBytes; + + /* Fake a hardware response*/ + if(fHardwareEmulate) { + switch(iHardwareMode) { + case LX200_EMULATE_FALSE: + return('0'); + break; + case LX200_EMULATE_TRUE: + return('1'); + break; + } + } + + /* only wait so long for a response */ + FD_ZERO (&rd); + FD_SET (fd, &rd); + tv.tv_sec = TREADTO; + tv.tv_usec = 0; + if (select (fd+1, &rd, NULL, NULL, &tv) != 1) + return(LX200_FALSE); + + iBytes = read(fd,szIn,1); + if(iBytes==1) + return(szIn[0]); + return(LX200_FALSE); +} + +/* Read two from the scope and return them in a string*/ +private int +lx200_read_two(int fd, char *szIn) +{ + int iBytes; + + if(fHardwareEmulate) { + switch(iHardwareMode) { + case LX200_EMULATE_FALSE: + return(LX200_FALSE); + break; + case LX200_EMULATE_TRUE: + szIn[0]='1'; + szIn[1]='2'; + szIn[2]='\0'; + return(LX200_TRUE); + break; + } + } + + iBytes = lx200_read_one (fd); + if (iBytes == LX200_FALSE) + return(LX200_FALSE); + szIn[0] = iBytes; + iBytes = lx200_read_one (fd); + if (iBytes == LX200_FALSE) + return(LX200_FALSE); + szIn[1] = iBytes; + szIn[2]='\0'; + return(LX200_TRUE); +} + +/* + * Write a command to the scope + * Prefix the INITIATOR + * Suffix the TERMINATOR + * write to the stream + * ALL comunications to the scope must use this + * except send ACK in get_scope_mode() + * Gotta love Meade's consistentecy + */ +private int +lx200_write_to_scope(int fd, char *szpCmd) +{ + char szCmd[17]; + + strcpy(szCmd,LX200_INITIATOR); /*Initiator*/ + strncat(szCmd,szpCmd,14); + strcat(szCmd,LX200_TERMINATOR); /*Terminator*/ +#ifdef DEBUG + printf("Out: %s on %d\n",szCmd, fd); +#endif + + if(fHardwareEmulate) { + switch(iHardwareMode) { + case LX200_EMULATE_FALSE: + return(LX200_FALSE); + break; + case LX200_EMULATE_TRUE: + return(strlen(szCmd)); + break; + } + } + + return(write(fd,szCmd,strlen(szCmd))); +} + +/* + * Send an ACK to the scope + * This is only used by lx200_get_mode() + */ +private int +lx200_send_ACK(int fd) +{ + char szACK[1]={(char)0x06}; + + if(fHardwareEmulate) { + switch(iHardwareMode) { + case LX200_EMULATE_FALSE: + return(0); + break; + case LX200_EMULATE_TRUE: + return(1); + break; + } + } + + return(write(fd,szACK,1)); +} + +/* + * Reads a terminated line from the scope + * Returns the number of chars read + */ +private int +lx200_read_from_scope(int fd, char *szpBuffer) +{ + unsigned char szIn[5], *szp=szpBuffer; + int iChars = 0, iBytes; + + /* Emulation will be performed with an addition to lx200_get_generic() + * of a parameter of what to return in each instance. But, + * full hardware emulation is for later + */ + if(fHardwareEmulate) + return(TRUE); + + while(1) { /* loop from input */ + iBytes = lx200_read_one (fd); + if (iBytes == LX200_FALSE) + return (LX200_FALSE); + szIn[0] = iBytes; /* to debug later */ + if(szIn[0]==LX200_TERMINATOR_C) { + *szp='\0'; +#ifdef DEBUG + printf("Reply: %s\n",szpBuffer); +#endif + break; + } + *szp++=szIn[0]; + iChars++; + } + return iChars; +} + +/**************************************************************************** + * Base Library Functions * + * These functions perform a single action by communicating with the scope * + * in a simple step. The output is performed and any input is returned. * + * All functions return 1 on success and -1 on failure. * + * Any informational functions return values as parameters * + * These simple functions are combined to perform more powerful functions * + * All functions should should make a single call to use, and await a * + * return value, indicating success or failure. * + * * + * An application may choose to use some of these, so most are exported * + * Exports: * + ****************************************************************************/ + +/* + * The generic get routine + * Given a command, it returns the raw string form the scope + * with appropriate error checking + */ +private int +lx200_get_generic(int fd, char *szCmd, char *buf, char *szEmulated) +{ + + if(fHardwareEmulate) { + if(iHardwareMode==TRUE) { + strcpy(buf,szEmulated); + return(LX200_TRUE); + } + else { + return(LX200_FALSE); + } + } + + if(!lx200_write_to_scope(fd,szCmd)) /*Request RA*/ + return(LX200_FALSE); + if(!lx200_read_from_scope(fd, buf)) + return(LX200_FALSE); + return(LX200_TRUE); +} + +/********************** Get Functions ****************************/ +/* Most of these are implemented through a macro in liblx200.h + * to call lx200_get_generic() + * There really ins't a lot of code this way. + * See lx200_get in liblx200.h + */ + +/* + * Request the alignment mode + * returns on of the following: + * LX200_OPT_MODE_ALTAZ - Alt-Az mode + * LX200_OPT_MODE_POLAR - Polar aligned + * LX200_OPT_MODE_LAND - Land mode (no tracking) + * LX200_OPT_MODE_GPOLAR - German Polar + * LX200_FALSE - Smell the smoke? + */ +public int +lx200_get_mode(int fd) +{ + char cMode; + + if(fHardwareEmulate) { + if(iHardwareMode==TRUE) + return(LX200_MODE_POLAR); + else + return(LX200_FALSE); + } + + if(lx200_send_ACK(fd)==LX200_FALSE) + return(LX200_FALSE); + cMode = lx200_read_one(fd); + switch(cMode) { + case 'A': + return(LX200_MODE_ALTAZ); + case 'L': + return(LX200_MODE_LAND); + case 'P': + return(LX200_MODE_POLAR); + case 'G': + return(LX200_MODE_GPOLAR); + default: + return(LX200_FALSE); + } +} + +/* Macro defined functions + * Request the Alt and return a string in format sDD:MM:SS + * lx200_get_alt() + + * Request the Az and return a string in format DDD:MM:SS + * lx200_get_az() + + * Request the sidereal time and return a string in format HH:MM:SS + * lx200_get_sidereal() + + * Request the local time and return a string in format DDD:MM:SS + * lx200_get_local12() + + * Request the local time and return a string in format DDD:MM:SS + * lx200_get_local24() + + * Request the date and return a string in format MM/DD/YY + * lx200_get_date() + + * Request the site latitude and return a string in format sDD*MM + * lx200_get_latitude() + + * Request the site longitude and return a string in format DDD*MM + * lx200_get_longitude() + + * Request the offset from GMT and return a string in format sHH + * lx200_get_GMT_offset() + + * Request the object RA and return a string in format HH:MM:SS + * lx200_get_obj_RA() + + * Request the object dec and return a string in format sDD*MM:SS + * lx200_get_obj_dec() + + * Request the filter type string and return a string containing the types + * Types can be looked up with lx200_filter_type_map() + * A type string can be broken into an array of types with lx200_filter_string_map() + * lx200_get_filter_type() + + * Request the filter quality and return a string with the quality code + * The quality code can be looked up with lx200_filter_quality_map() + * lx200_get_filter_quality() + + * Request the filter horizon limit and return a string in format DD* + * lx200_get_filter_horizon() + + * Request the filter minimum magnitude and return a string in format sMM.M + * lx200_get_filter_minmag() + + * Request the filter maximum magnitude and return a string in format sMM.M + * lx200_get_filter_maxmag() + + * Request the filter minimum size and return a string in format NNN' + * lx200_get_filter_minsize() + + * Request the filter maximum size and return a string in format NNN' + * lx200_get_filter_maxsize() + + * Request the field radius and return a string in format NNN' + * lx200_get_field_radius() + + * Request the field information and return it in a string + * The string contains the number of objects in the field + * and the object closest to the center + * use lx200_field_info_map to crack it + * lx200_get_field_info() + + * Request the object information + * use lx200_obj_info_map() to build an lx200_obj structure + * lx200_get_obj_field() + + * Request the track frequency in the format TT.T + * use lx200_freq_map() to map to a double + * lx200_get_track() + + * Request the status bars on a GOTO + * use lx200_status_map() to map to an integer indicating + * how far the GOTO is along + * lx200_get_status() + + */ + +/* + * Request a site name (0-4), this is a three letter code + * The code is virtually worthless, but it probably + * means something to the user + */ +public int +lx200_get_site_name(int fd, char *buf, int iSite) +{ + char szCmd[3]="G"; + + switch(iSite) { + case 1: + szCmd[1]='M'; + break; + case 2: + szCmd[1]='N'; + break; + case 3: + szCmd[1]='O'; + break; + case 4: + szCmd[1]='P'; + break; + default: + return(LX200_FALSE); + } + szCmd[2]='\0'; /*Don't forget the Terminator*/ + return(lx200_get_generic(fd, szCmd, buf,"PBY")); +} + +/* + * Request the status of the clock + * returns LX200_OPT_CLOCK24 if it's set for 24 hours + * returns LX200_OPT_CLOCK12 if it's set for 12 hours + */ +public int +lx200_get_clock_format(int fd) +{ + char szIn[3]; + + if(fHardwareEmulate) { + if(iHardwareMode==TRUE) + return(LX200_OPT_CLOCK12); + else + return(LX200_FALSE); + } + + if(lx200_read_two(fd, szIn)==LX200_FALSE) + return(LX200_FALSE); + if(szIn[0]=='1' && szIn[1]=='2') + return(LX200_OPT_CLOCK12); + if(szIn[0]=='2' && szIn[1]=='4') + return(LX200_OPT_CLOCK24); + return(LX200_FALSE); +} + +/******************* Telescope Movement ************************/ +/* Starts the scope slewing to set object */ +public int +lx200_goto(int fd) +{ + char response,szReturn[201]; + + if(fHardwareEmulate) { + if(iHardwareMode==TRUE) + return(LX200_TRUE); + else + return(LX200_FALSE); + } + + if(lx200_write_to_scope(fd,"MS")==LX200_FALSE) + return(LX200_FALSE); + response=lx200_read_one(fd); + if(response=='0') + return(LX200_TRUE); + lx200_read_from_scope(fd,szReturn); + return(LX200_FALSE); +} + +/************************ Set Commands **************************/ +/* All _fset_ expect a preformatted string + * Use the lx200_format commands to format the strings properly + * Here was the first decision I could go either way with. + * + * All these functions except a string, ie, they have been + * preformatted. The intention being an app. first calls + * a formatter, then the set command. But this means the + * app. has to make two calls, one to format then one + * to send. Some apps may not need to format, others + * might, so I came up with two sets of calls. + * + * The unformatted calls in which each function accepts the + * proper number of parameters, calls the formatter, and + * sends the command. Each function has a varying number of + * parameters depending on it's function. This means lots + * of referencing the library documentation to find out + * what accepts what. Ugly (especially when, if you're + * reading this, you're reading the documentation for now). + * + * The formatted set expects to to be previously + * formatted and sends it. This makes the unformatted calls + * wrappers to the formatted calls. Then we use about 10 functions + * to create the proper format. They implement the unformatted + * calls as macros (most anyway) to call the proper formatter and the + * asscoiated formatted call. This means less reference work, + * but more complex library code. I'd rather have the library + * complicated then the application. + * + * With this in place, anyone gets whatever they need, though + * most will probably end up using the macros in the header + * file. If the application performs verification and formatting + * the _fset_ calls are used + */ + +/* + * Send out a set command + * All sets are followed by the return of "Ok" + */ +private int +lx200_set_generic(int fd, char *szCmd, char *szValue) +{ + char szFCmd[255]; + + snprintf(szFCmd,254,"%s%s",szCmd,szValue); + if(lx200_write_to_scope(fd,szFCmd)==LX200_FALSE) + return(LX200_FALSE); + return(lx200_read_ok(fd)); +} + +/* This sends a command that the scope will do or not do + * as it sees fit, because it doesn't tell us anything. + * Therefore we always return the value of the write + * operation the scope is actually does it + * + * Used primarily for macro expansion + */ +private int +lx200_send_command(int fd, char *szCmd) +{ + return((lx200_write_to_scope(fd,szCmd)==LX200_FALSE)); +} + +/***** The formated calls******* + * Keep in mind that using these means the application is + * responsible for ALL data verifcation. If you ask a + * user and supply that input to a _fset_, make sure + * you validate it before passing it to the library. + * + * Use the _set_ functions with raw data to get proper + * validation + */ + +/* + * lx200_toggle_format() + * + * The scope can be set for long format using this call + * Scopes with version 3.30 or above can use this + * Note with liblx200 v1.0 the short format is + * NOT supported (too inaccurate) and probably never + * will be. + * + * There is no way to determine the current state of the scope, + * so this function can only toggle. Use lx200_set_format() + * to specify a particular format. + * + * The formatted ( _fset_ ) functions are marked private + * but feel free to call them. You won't be invalidating + * the library. + * + * (MACRO) + */ + + +/* The macro functions*/ +/* + * Set sidereal time + * Format is HH:MM:SS (24 hour clock) + * lx200_fset_sidereal() + + * Set target local time + * Format is HH:MM:SS + * lx200_fset_local24() + + * Set target date + * Format is MM/DD/YY + * lx200_fset_date() + + * Set site latitude + * Format is sDD*MM + * lx200_fset_latitude() + + * Set site longitude + * Format is sDD*MM + * lx200_fset_longitude() + + * Set GMT offset + * Format is sHH + * lx200_fset_GMT_offset() + + * Set object RA + * Format is HH:MM:SS + * lx200_fset_obj_RA() + + * Set object declination + * Format is sDD*MM:SS + * lx200_fset_obj_dec() + + * Set the filter type string + * Format is special + * lx200_fset_filter_type() + + * Set the filter horizon + * Format is DD + * lx200_fset_filter_horizon() + + * Set the filter minimum magnitude + * Format is sMM.M + * lx200_fset_filter_minmag() + + * Set the filter maximum magnitude + * Format is sMM.M + * lx200_fset_filter_maxmag() + + * Set the filter minimum size + * Format is NNN (in arc minutes) + * lx200_fset_filter_minsize() + + * Set the filter maximum size + * Format is NNN (in arc minutes) + * lx200_fset_filter_maxsize() + + * Set the field radius + * Format is NNN + * lx200_fset_field_radius + + * Set the catalog to use for stars + * format is N + + * Set target to a star + * Format is NNNN + * This selects within the current catalog + * Use lx200_set_star_catalog() to choose a catalog + * lx200_goto_star() does both + */ + + +/* + * Set the calendar date + * Could have used a macro but + * the scope returns "Updating planetary data" + * first followed by a string of blanks. + * The only questions is, "Why?" + */ +public int +lx200_fset_date(int fd, char *sDate) +{ + char szReturn[51],szCmd[11]; + + snprintf(szCmd,10,"SC%8s",sDate); + if(lx200_write_to_scope(fd,szCmd)==LX200_FALSE) + return(LX200_FALSE); + if(lx200_read_from_scope(fd,szReturn)) + return(LX200_FALSE); + if(lx200_read_from_scope(fd,szReturn)) + return(LX200_FALSE); + return(LX200_TRUE); +} + +/* + * Set the reticle brightness to a level 1-3 + * Mode is + * LX200_OPT_CONTINOUS reticle on all the time + * LX200_OPT_FLASH50 reticle on 50% + * LX200_OPT_FLASH25 reticle on 25% + * LX200_OPT_FLASH10 reticle on 10% + */ +public int +lx200_set_reticle_flash(int fd, int iMode) +{ + char szCmd[4]="B"; + + if(iModeLX200_OPT_FLASH10) + return(LX200_FALSE); + + szCmd[1]=iMode - LX200_OPT_CONTINOUS; + szCmd[2]='\0'; + return(lx200_send_command(fd,szCmd)); + +} + +/* + * Sync on current object + */ +public int +lx200_obj_sync(int fd, char *szpObj) +{ + if(lx200_send_command(fd,"CM")==FALSE) + return(LX200_FALSE); + if(lx200_read_from_scope(fd,szpObj)==LX200_FALSE) + return(LX200_FALSE); + return(LX200_TRUE); +} + +/* + * Set a site (1-4) name to a + * three letter name + */ +public int +lx200_set_site_name(int fd, char *buf, int iSite) +{ + char szCmd[3]="S",szSite[4]; + + if(iSite<1 || iSite>4) /*Error condition invalid site*/ + return(LX200_FALSE); + if(strlen(buf)>3 || buf[0]=='\0') /*Error condition invalid name*/ + return(LX200_FALSE); /*Probably ought to verify all characters are acceptable*/ + szCmd[1]='L' + iSite; + szCmd[2]='\0'; + snprintf(szSite,6,"%3s",buf); + return(lx200_set_generic(fd,szCmd,szSite)); +} + +/************************************************************************ + * Main Library Functions * + * These functions are the ones the most applications programs will * + * call. They combine the base library functions together to perform * + * large actions, such as selecting and slewing to a target object, * + * returning scope information, or performing telescope finds. * + * * + * These are consider the high-level routines of the library. * + ************************************************************************/ +/* + * Given a star number and catalog, this performs a goto + */ +/* +public int +lx200_goto_star(int fd, int iStar, int iCatalog) +{ + +#ifdef DEBUG + printf("Called lx200_goto_star for %d\n",iStar,iCatalog); fflush(stdout); +#endif + if(lx200_set_star_catalog(fd,iCatalog)==LX200_FALSE) + return(LX200_FALSE); + if(lx200_set_star(fd, iStar)==LX200_FALSE) + return(LX200_FALSE); + return(lx200_goto(fd)); +} +*/ + +/* + * Goto a given Dec and RA + */ +public int +lx200_goto_RADec(int fd, char *szpRa, char *szpDec) +{ + if(lx200_fset_obj_RA(fd, szpRa)==LX200_FALSE) + return(LX200_FALSE); + if(lx200_fset_obj_dec(fd, szpDec)==FALSE) + return(LX200_FALSE); + return(lx200_goto(fd)); +} + +/* + * Goto to an extended object + * Need catalog which is one of the following + * LX200_MESSIER_CATLOG + * LX200_NGC_CATALOG + * LX200_IC_CATALOG + * LX200_UGC_CATALOG + * and the object number + */ +public int +lx200_goto_ext(int fd, int iObj, int iCatalog) +{ + char szObj[6]; + + /*Check catalog. Is it valid?*/ + if(iCatalog LX200_UGC_CATALOG) + return(LX200_FALSE); + if(iObj<1) /*Object less then one*/ + return(LX200_FALSE); + + switch(iCatalog) { + case LX200_MESSIER_CATALOG: + if(iObj>101) + return(LX200_FALSE); + if(lx200_format_messier(iObj,szObj)) + return(LX200_FALSE); + if(lx200_fset_messier(fd,szObj)) + return(LX200_FALSE); + break; + case LX200_NGC_CATALOG: + if(iObj>7840) + return(LX200_FALSE); + /*I can cheat, it's my library!*/ + if(lx200_set_ext_ngc(fd)==LX200_FALSE) + return(LX200_FALSE); + if(lx200_format_ngc(iObj,szObj)) + return(LX200_FALSE); + if(lx200_fset_ext(fd,szObj)==LX200_FALSE) + return(LX200_FALSE); + break; + case LX200_IC_CATALOG: + if(iObj>5386) + return(LX200_FALSE); + if(lx200_set_ext_ic(fd)==LX200_FALSE) + return(LX200_FALSE); + if(lx200_format_ic(iObj,szObj)) + return(LX200_FALSE); + return(lx200_fset_ext(fd,szObj)); + break; + case LX200_UGC_CATALOG: + if(iObj>12921) + return(LX200_FALSE); + if(lx200_set_ext_ugc(fd)==LX200_FALSE) + return(LX200_FALSE); + if(lx200_format_ugc(iObj,szObj)) + return(LX200_FALSE); + if(lx200_fset_ext(fd,szObj)==LX200_FALSE) + return(LX200_FALSE); + break; + default: + return(LX200_FALSE); + } + return(lx200_goto(fd)); +} + +/* Set the format to long or short + * All other liblx200 functions + * assume the format is long, so the application + * currently needs to call lx200_set_format + * passing in LX200_OPT_LONG_FORMAT + * if anything involing degrees + * hours minutes and seconds + * Old format New format + * HH:MM.T HH:MM:SS + * sDD*MM sDD:MM:SS + * DDD*MM SSS*MM:SS + */ +public int +lx200_set_format(int fd, int iSetState) +{ + char szBuf[15]; + int iCurState; + + /* Get the current state.*/ + if(lx200_get_dec(fd, szBuf)==LX200_FALSE) + return(LX200_FALSE); +#ifdef DEBUG + printf("lx200lib %s\n",szBuf); +#endif + if(strlen(szBuf)<8) + iCurState=LX200_OPT_SHORT_FORMAT; + else + iCurState=LX200_OPT_LONG_FORMAT; + + if(iSetState!=iCurState) + return(lx200_toggle_format(fd)); + return(LX200_TRUE); +} + +/* + * Set filter type + * Type is a bitmap of the following + * LX200_TYPE_GALAXIES + * LX200_TYPE_PLANETARY + * LX200_TYPE_DIFFUSE + * LX200_TYPE_GLOBULAR + * LX200_TYPE_OPEN + */ +private int +lx200_set_filter_type(int fd, int iType) +{ + char szType[5]=""; + + /*Build type string*/ + if(iType & LX200_TYPE_GALAXIES) + strcat(szType,"G"); + if(iType & LX200_TYPE_PLANETARY) + strcat(szType,"P"); + if(iType & LX200_TYPE_DIFFUSE) + strcat(szType,"D"); + if(iType & LX200_TYPE_GLOBULAR) + strcat(szType,"C"); + if(iType & LX200_TYPE_OPEN) + strcat(szType,"O"); + + return(lx200_fset_filter_type(fd,szType)); +} + +/* Set site number 1 - 4 + * see lx200_get_site_name() and lx200_set_site_name() + */ +public int +lx200_set_site_number(int fd, int iSite) +{ + char szCmd[5]="W"; + + if(iSite<1 || iSite>4) + return(LX200_FALSE); + szCmd[1]='0' + iSite; + return(lx200_send_command(fd,szCmd)); +} + +/************************************************************************* + * Support Library Functions * + * These functions are support functions that don't actually perform * + * telescope functions. Instead they perform such actions as formatting * + * data, performing table lookups, and handling data conversion. * + *************************************************************************/ + +/* + * A very fast way to break LX200 RA string into integers + * And no, I won't stop using atoi() in lieu of strtol(). + * Some things just don't need to be fixed. You can have + * it when you pry the keyboard from my cold, dead + * fingers. + */ +public int +lx200_convert_RA(char *szpRA, int *RH, int *RM, int *RS) +{ + char s[3]; + + s[2] = 0; + /*Get R HOUR*/ + s[0] = szpRA[0]; + s[1] = szpRA[1]; + *RH=atoi(s); + + /*Get R Minute*/ + s[0] = szpRA[3]; + s[1] = szpRA[4]; + *RM=atoi(s); + + /*Get R Seond*/ + s[0] = szpRA[6]; + s[1] = szpRA[7]; + *RS=atoi(s); + + return(LX200_TRUE); +} + +/* + * A very fast way to break LX200 Dec string into integers + */ +public int +lx200_convert_Dec(char *szpRA, int *DD, int *DM, int *DS) +{ + char s[4]; + + s[3] = 0; + + /*Get Dec Degrees*/ + s[0] = szpRA[0]; + s[1] = szpRA[1]; + s[2] = szpRA[2]; + *DD=atoi(s); + + /*Get Dec Minute*/ + s[0] = szpRA[4]; + s[1] = szpRA[5]; + s[2] = 0; + *DM=atoi(s); + + /*Get D Second*/ + s[0] = szpRA[7]; + s[1] = szpRA[8]; + *DS=atoi(s); + + return(LX200_TRUE); +} + +/* + * Given a planet name, this function returns the star number + * if the planet string isn't real, return -1 */ +public int +lx200_map_planet_id(char *szName) +{ + int i; + + for(i=0;i<9;i++) + if(!strcmp(szName,lx200_planets[i])) + return(900 + i); + return(LX200_FALSE); +} + +/************************ Format functions ****************************** + * These perform generic format routines + * and are called by macro in almost all + * cases + * Once again, an application can call them + * directly, but the macros make more sense. + * the _format_ macros are put together from + * the are _fmt_ functions + */ + +/*An integer iDigits in length*/ +private int +lx200_fmt_number(int iNumber, int iDigits, char cEnd, char *szp) +{ + char szFormat[8],szEnd[2]; + + sprintf(szFormat,"%c%ds",'%',iDigits); + sprintf(szp,szFormat,iNumber); + if(cEnd!='\0') { + szEnd[0]=cEnd; + szEnd[1]='\0'; + strcat(szp,szEnd); + } + + return(LX200_TRUE); +} + +/* NNNNNN for + * HH:MM:SS + * MM/DD/YY + */ +private int +lx200_fmt_time(int HH, int MM, int SS, char cIFS1, char cIFS2, int iSigned, char *szp) +{ + if(iSigned) + snprintf(szp,9,"%c%2d%c%2d%c%2d",HH < 0 ? '-' : '+',HH,cIFS1,MM,cIFS2,SS); + else + snprintf(szp,8,"%2d%c%2d%c%2d",HH,cIFS1,MM,cIFS2,SS); + return(LX200_TRUE); +} + +/*DDDMMSS*/ +private int +lx200_fmt_coord(int DDD, int MM, int SS, char cIFS1, char cIFS2, char *szp) +{ + snprintf(szp,9,"%3d%c%2d%c%2d",DDD,cIFS1,MM,cIFS2,SS); + return(LX200_TRUE); +} + +/*sHH or DD or DD(*) */ +private int +lx200_fmt_hour(int HH, int iSigned, char cEnd, char *szp) +{ + char szEnd[2]; + + if(iSigned) + snprintf(szp,3,"%c%2d",HH < 0 ? '-' : '+',HH); + else + snprintf(szp,2,"%2d",HH); + if(cEnd!='\0') { + szEnd[0]=cEnd; + szEnd[1]='\0'; + strcat(szp,szEnd); + } + return(LX200_TRUE); +} + +/*sMM.M or TT.T*/ +private int +lx200_fmt_magnitude(double d, int iSigned, char *szp) +{ + if(iSigned) + snprintf(szp,5,"%c%3.1f",(char)d < 0 ? '-' : '+',d); + else + snprintf(szp,4,"%3.1f",d); + return(LX200_TRUE); +} + + +/******************* MISC *********************/ + +/* + * Return the version of liblx200 in a string + */ +public int +lx200_get_lib_version(char *sz) +{ + strcpy (sz, "$Revision: 1.8 $"); + return(LX200_TRUE); +} + +/* + * Control hardware emulate mode + */ +public int +lx200_set_lib_emulate(int fEmulate, int iMode) +{ + if(iMode!=LX200_EMULATE_FALSE && iMode!=LX200_EMULATE_TRUE) + return(LX200_FALSE); + if(fEmulate==LX200_TRUE) { + fHardwareEmulate=LX200_TRUE; + iHardwareMode=iMode; + } + else + if(fEmulate==LX200_FALSE) + fHardwareEmulate=LX200_FALSE; + else + return(LX200_FALSE); + return(LX200_TRUE); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: liblx200.c,v $ $Date: 2002/01/04 17:36:52 $ $Revision: 1.8 $ $Name: $"}; diff --git a/GUI/xephem/tools/lx200xed/liblx200.h b/GUI/xephem/tools/lx200xed/liblx200.h new file mode 100644 index 0000000..f0be191 --- /dev/null +++ b/GUI/xephem/tools/lx200xed/liblx200.h @@ -0,0 +1,226 @@ +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#define LX200_FALSE -1 +#define LX200_TRUE 1 + +#define LX200_EMULATE_FALSE 0 +#define LX200_EMULATE_TRUE 1 +#define LX200_EMULATE_FD 5000 + +/*Setable values for options*/ +#define LX200_OPT_LONG_FORMAT 1 +#define LX200_OPT_SHORT_FORMAT 2 +#define LX200_OPT_CLOCK24 3 +#define LX200_OPT_CLOCK12 4 +#define LX200_OPT_CONTINOUS 5 +#define LX200_OPT_FLASH50 6 +#define LX200_OPT_FLASH25 7 +#define LX200_OPT_FLASH10 8 + +/*Object type bit masks*/ +#define LX200_TYPE_GALAXIES 0x00 +#define LX200_TYPE_PLANETARY 0x01 +#define LX200_TYPE_DIFFUSE 0x02 +#define LX200_TYPE_GLOBULAR 0x04 +#define LX200_TYPE_OPEN 0x08 + +/*telescope modes*/ +#define LX200_MODE_ALTAZ 1 +#define LX200_MODE_LAND 2 +#define LX200_MODE_POLAR 3 +#define LX200_MODE_GPOLAR 4 + +#define BAUDRATE B9600 +#define TELESCOPE "/dev/ttyS0" + +#define DEBUG + +#define _POSIX_SOURCE 1 + +#define LX200_INITIATOR ":" +#define LX200_TERMINATOR "#" +#define LX200_INITIATOR_C ':' +#define LX200_TERMINATOR_C '#' +#define LX200_DEGREE 223 +#define LX200_RETURN_OK '0' + +/* Catalogs */ +#define LX200_ALIGN_CATALOG 0 +#define LX200_SAO_CATALOG 1 +#define LX200_GCVS_CATALOG 2 +#define LX200_MESSIER_CATALOG 3 +#define LX200_NGC_CATALOG 4 +#define LX200_IC_CATALOG 5 +#define LX200_UGC_CATALOG 6 + +/*Some code clarifiers*/ +#define private +#define public + +/*Pre-defines*/ +private char lx200_read_one(int); +private int lx200_fmt_number(int, int, char, char *); + +/*The _get_ macros */ +#define lx200_get(x,y,z,s) lx200_get_generic(x,y,z,s) +#define lx200_get_ra(x,y) lx200_get(x,"GR",y,"05:55:3") +#define lx200_get_dec(x,y) lx200_get(x,"GD",y,"+07:23:26") +#define lx200_get_alt(x,y) lx200_get(x,"GA",y,"62:06:29") +#define lx200_get_ax(x,y) lx200_get(x,"GZ",y,"206:57:17") +#define lx200_get_sidereal(x,y) lx200_get(x,"GS",y,"01:30:15") +#define lx200_get_local12(x,y) lx200_get(x,"Ga",y,"01:30:15") +#define lx200_get_local24(x,y) lx200_get(x,"GL",y,"21:30:15") +#define lx200_get_date(x,y) lx200_get(x,"GC",y,"11/25/99") +#define lx200_get_latitude(x,y) lx200_get(x,"Gt",y,"+32:47:09") +#define lx200_get_longitude(x,y) lx200_get(x,"Gg",y,"+96:47:37") +#define lx200_get_GMT_offset(x,y) lx200_get(x,"GG",y,"+06") +#define lx200_get_obj_RA(x,y) lx200_get(x,"Gr",y,"+06:08:44") +#define lx200_get_obj_dec(x,y) lx200_get(x,"Gd",y,"+24:15:18") +#define lx200_get_filter_type(x,y) lx200_get(x,"Gy",y,"GPDC") +#define lx200_get_filter_quality(x,y) lx200_get(x,"Gq",y,"EX") +#define lx200_get_filter_horizon(x,y) lx200_get(x,"Gh",y,"00") +#define lx200_get_filter_minmag(x,y) lx200_get(x,"Gb",y,"+20.0") +#define lx200_get_filter_maxmag(x,y) lx200_get(x,"Gf",y,"-01.0") +#define lx200_get_filter_minsize(x,y) lx200_get(x,"GI",y,"000'") +#define lx200_get_filter_maxsize(x,y) lx200_get(x,"Gs",y,"200'") +#define lx200_get_field_radius(x,y) lx200_get(x,"GF",y,"015'") +#define lx200_get_field_info(x,y) lx200_get(x,"Lf",y,"004 CNGC1976 SU DNEB MAG 3,9 SZ 66.0'") +#define lx200_get_obj_field(x,y) lx200_get(x,"LI",y,"CNGC1976 SU DNEB MAG 3,9 SZ 66.0'") +#define lx200_get_track(x,y) lx200_get(x,"GT",y,"60.1") +#define lx200_get_status(x,y) lx200_get(x,"D",y,"24") + +/*The _fset_ marcos*/ +#define lx200_set(x,y,z) lx200_set_generic(x,y,z) +#define lx200_fset_sidereal(x,y) lx200_set(x,"SS",y) +#define lx200_fset_local24(x,y) lx200_set(x,"SL",y) +#define lx200_fset_latitude(x,y) lx200_set(x,"St",y) +#define lx200_fset_longitude(x,y) lx200_set(x,"Sg",y) +#define lx200_fset_GMT_offset(x,y) lx200_set(x,"SG",y) +#define lx200_fset_obj_RA(x,y) lx200_set(x,"Sr",y) +#define lx200_fset_obj_dec(x,y) lx200_set(x,"Sd",y) +#define lx200_fset_filter_type(x,y) lx200_set(x,"Sy",y) +#define lx200_fset_filter_horizon(x,y) lx200_set(x,"Sh",y) +#define lx200_fset_filter_minmag(x,y) lx200_set(x,"Sb",y) +#define lx200_fset_filter_maxmag(x,y) lx200_set(x,"Sf",y) +#define lx200_fset_filter_minsize(x,y) lx200_set(x,"SI",y) +#define lx200_fset_filter_maxsize(x,y) lx200_set(x,"Ss",y) +#define lx200_fset_field_radius(x,y) lx200_set(x,"SF",y) +#define lx200_fset_track_freq(x,y) lx200_set(x,"ST",y) +#define lx200_fset_star_catalog(x,y) lx200_set(x,"Ls",y) +#define lx200_fset_ext_catalog(x,y) lx200_set(x,"Lo",y) +#define lx200_fset_star(x,y) lx200_set(x,"LS",y) +#define lx200_fset_messier(x,y) lx200_set(x,"LM",y) +#define lx200_fset_ext(x,y) lx200_set(x,"LC",y) + +/*A few shorthanders to make code easier to read*/ +#define lx200_set_ext_ngc(x) lx200_fset_ext_catalog(x,"0") +#define lx200_set_ext_ic(x) lx200_fset_ext_catalog(x,"1") +#define lx200_set_ext_ugc(x) lx200_fset_ext_catalog(x,"2") + +/*Commands that the scope doesn't return a reply*/ +#define lx200_cmd(x,y) lx200_send_command(x,y) +#define lx200_toggle_format(x) lx200_cmd(x,"U") +#define lx200_move_north(x) lx200_cmd(x,"Mn") +#define lx200_move_south(x) lx200_cmd(x,"Ms") +#define lx200_move_east(x) lx200_cmd(x,"Me") +#define lx200_move_west(x) lx200_cmd(x,"Mw") +#define lx200_stop_north(x) lx200_cmd(x,"Qn") +#define lx200_stop_south(x) lx200_cmd(x,"Qs") +#define lx200_stop_east(x) lx200_cmd(x,"Qe") +#define lx200_stop_west(x) lx200_cmd(x,"Qw") +#define lx200_stop_slew(x) lx200_cmd(x,"Q") +#define lx200_set_speed_guide(x) lx200_cmd(x,"RG") +#define lx200_set_speed_center(x) lx200_cmd(x,"RC") +#define lx200_set_speed_find(x) lx200_cmd(x,"RM") +#define lx200_set_speed_slew(x) lx200_cmd(x,"RS") +#define lx200_step_quality(x) lx200_cmd(x,"Sq") +#define lx200_find_start(x) lx200_cmd(x,"LF") +#define lx200_find_next(x) lx200_cmd(x,"LN") +#define lx200_find_prev(x) lx200_cmd(x,"LB") +#define lx200_reticle_brighter(x) lx200_cmd(x,"B+") +#define lx200_reticle_dimmer(x) lx200_cmd(x,"B-") +#define lx200_focus_out(x) lx200_cmd(x,"F+") +#define lx200_focus_in(x) lx200_cmd(x,"F-") +#define lx200_focus_stop(x) lx200_cmd(x,"FQ"); +#define lx200_set_focus_fast(x) lx200_cmd(x,"FF"); +#define lx200_set_focus_slow(x) lx200_cmd(x,"FS"); +#define lx200_set_track_manual(x) lx200_cmd(x,"TM") +#define lx200_set_track_quartz(x) lx200_cmd(x,"TQ") +#define lx200_track_increment(x) lx200_cmd(x,"T+") +#define lx200_track_decrement(x) lx200_cmd(x,"T-") +#define lx200_toggle_clock_format(x) lx200_cmd(x,"H") +#define lx200_toggle_smart_learn(x) lx200_cmd(x,"Q1") +#define lx200_toggle_smart_update(x) lx200_cmd(x,"Q2") +#define lx200_toggle_smart_erase(x) lx200_cmd(x,"Q3") +#define lx200_toggle_smart_dlearn(x) lx200_cms(x,"Q4") +#define lx200_toggle_smart_dcorrect(x) lx200_cms(x,"Q5") + +/*Format macros*/ +#define lx200_format_messier(y,x) lx200_fmt_number(y,3,'\0',x) +#define lx200_format_ngc(y,x) lx200_fmt_number(y,4,'\0',x) +#define lx200_format_ic(y,x) lx200_fmt_number(y,4,'\0',x) +#define lx200_format_ugc(y,x) lx200_fmt_number(y,5,'\0',x) +#define lx200_format_date(M,D,Y,x) lx200_fmt_time(M,D,Y,'/','/',FALSE,x) +#define lx200_format_latitude(D,M,S,x) lx200_fmt_time(D,M,S,LX200_DEGREE,';',TRUE,x) +#define lx200_format_longitude(D,M,S,x) lx200_fmt_coord(D,M,S,LX200_DEGREE,';',TRUE,x) +#define lx200_format_GMT_offset(H,x) lx200_fmt_hour(H,TRUE,NULL,x) +#define lx200_format_RA(H,M,S,x) lx200_fmt_time(H,M,S,':',':',FALSE,x) +#define lx200_format_dec(D,M,S,x) lx200_fmt_time(D,M,S,LX200_DEGREE,':',TRUE,x) +#define lx200_format_horizon(D,x) lx200_fmt_hour(H,FALSE,LX200_DEGREE,x) +#define lx200_format_magnitude(M,x) lx200_fmt_magnitude(M,TRUE,x) +#define lx200_format_size(y,x) lx200_fmt_number(y,3,'\0',x) +#define lx200_format_radius(y,x) lx200_fmt_number(y,3,'\'',x) +#define lx200_format_track_freq(y,x) lx200_fmt_magnitude(y,FALSE,x) + + +/*Predecs*/ +int lx200_open_scope(char *); +int lx200_close_scope(int); +int lx200_read_ok(int); +char lx200_read_one(int); +int lx200_read_two(int, char *); +int lx200_write_to_scope(int, char *); +int lx200_send_ACK(int); +int lx200_read_from_scope(int, char *); +int lx200_get_generic(int, char *, char *, char *); +int lx200_get_mode(int); +int lx200_get_site_name(int, char *, int); +int lx200_get_clock_format(int); +int lx200_goto(int); +int lx200_set_generic(int, char *, char *); +int lx200_send_command(int, char *); +int lx200_fset_date(int, char *); +int lx200_set_reticle_flash(int, int); +int lx200_obj_sync(int, char *); +int lx200_set_site_name(int, char *, int); +int lx200_goto_star(int, int, int); +int lx200_goto_RADec(int, char *, char *); +int lx200_goto_ext(int, int, int); +int lx200_set_format(int, int); +int lx200_set_filter_type(int, int); +int lx200_set_site_number(int, int); +int lx200_convert_RA(char *, int *, int *, int *); +int lx200_convert_Dec(char *, int *, int *, int *); +int lx200_map_planet_id(char *); +int lx200_fmt_number(int, int, char, char *); +int lx200_fmt_time(int, int, int, char, char, int, char *); +int lx200_fmt_coord(int, int, int, char, char, char *); +int lx200_fmt_hour(int, int, char, char *); +int lx200_fmt_magnitude(double, int, char *); +int lx200_get_lib_version(char *); +int lx200_set_lib_emulate(int, int); + + + + + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: liblx200.h,v $ $Date: 2001/12/09 08:18:09 $ $Revision: 1.3 $ $Name: $ + */ diff --git a/GUI/xephem/tools/lx200xed/lx200xed.c b/GUI/xephem/tools/lx200xed/lx200xed.c new file mode 100644 index 0000000..34bdb33 --- /dev/null +++ b/GUI/xephem/tools/lx200xed/lx200xed.c @@ -0,0 +1,667 @@ +/* + * liblx200 v0.8 + * A library for controlling the Meade LX200 series scopes + * + * Copyright (C) 2000, Mike Stute +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*Stuff needed by libastro*/ +#include "astro.h" + +#include "liblx200.h" + +#define _POSIX_SOURCE 1 + +#define GOTOFIFO_NAME "/usr/local/xephem/fifos/xephem_loc_fifo" +#define MARKFIFO_NAME "/usr/local/xephem/fifos/xephem_in_fifo" + +#define TEMPERATURE 10. /* air temp, C */ +#define PRESSURE 1010. /* air pressure, mB */ +#define SUNDIP degrad(18.) /* dusk, rads below horizon */ +#define ELEVATION 0. /* elevation, m */ +#define MINMOV 60 /* secs between moving objs updates */ +#define UPDDEF 500 /* default graphical update period, ms*/ + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#define tracing config.iTrace + +typedef int BOOLEAN; + +/***** Predefines ****/ +void usage(void); +void parse_opts(int, char **); +void die(char *, char *); +void initNow (int fd); +void replace(char, char, char *); +void telescope_goto(int, int, char); +int send_goto(int fd); +int open_fifo(char *, int, BOOLEAN); +void time_fromsys(Now *); +int tz_fromsys(Now *); +void trace(int, char *, char *); + +/******* Globals *******/ + +static Obj op; /* Object for libastro, here due to laziness*/ +static Now now; /* Now for libastro, here due to same laziness */ +static BOOLEAN moving; /* TRUE if current object is not fixed*/ +static char szMsg[101]; /* For trace*/ +static int nohw; /* set by -e */ +static int updper = UPDDEF; /* update period, ms */ + +static struct { + BOOLEAN fGoto; /*If TRUE then gotos okay, else don't do them*/ + BOOLEAN fMarker; /*If TRUE then marker enabled*/ + BOOLEAN fMoving; /*If TRUE then following moving objects*/ + double dTemp; /*Temperature to use in C*/ + double dDip; /*Sun dip (degress above horizon) in radians */ + double dPressure; /*Pressure in mBars*/ + double dElev; /*Elevation in meters*/ + int iTrace; /*Trace level*/ + char szFifo_goto_name[256];/*FIFO for telescope control (from xephem) */ + char szFifo_mark_name[256];/*FIFO fir telescope marker (to xephem) */ + char szTelDev[256]; /*Telescope device name*/ + int minimum_move_time; /*How often goto is resent for moving object, sec*/ +} config; + +/* + * minimum_move_time determines how often to recenter the scope + * for a moving object. I have picked once a minute, but + * once every 3 or 5 is probably good too. The program pulses 3 times + * a second roughly and there's a little overhead due to scope + * communications for the marker, so I picked 57 seconds + * for the default + */ + +int +main(int argc, char **argv) +{ + int fd,fd_marker_fifo,fd_goto_fifo; /*File descriptors*/ + unsigned char buf[101]; + double ra,tmp; + int ra_hour, ra_min, ra_sec; + double dec; + int dec_deg, dec_min, dec_sec; + char szIn[5]; + int iBytes; + long last_send_time = 0; + double ep; + + /*Setup default config*/ + strncpy(config.szFifo_goto_name, GOTOFIFO_NAME,255); + strncpy(config.szFifo_mark_name, MARKFIFO_NAME,255); + strncpy(config.szTelDev,TELESCOPE,255); + config.dTemp=TEMPERATURE; + config.dDip=SUNDIP; + config.dPressure=PRESSURE; + config.dElev=ELEVATION; + config.fMarker=TRUE; + config.fGoto=TRUE; + config.fMoving=TRUE; + config.minimum_move_time = MINMOV; + + parse_opts(argc, argv); + + /**************** Open out fifo *******************/ + /* This is used for the telescope marker */ + fd_marker_fifo = open_fifo(config.szFifo_mark_name,O_RDWR,TRUE); + + /**************** Open in fifo ********************/ + /* This is used to read for telescope gotos */ + fd_goto_fifo = open_fifo(config.szFifo_goto_name,O_RDWR,FALSE); + + /*************** Open the scope *******************/ + /* This is, well, the telescope */ + /**************************************************/ + fd = lx200_open_scope(config.szTelDev); + if(fd==-1) + die(config.szTelDev, strerror(errno)); + + /*Set scope for long format*/ + + if(lx200_set_format(fd,LX200_OPT_LONG_FORMAT)==LX200_FALSE) + die("The scope is not responding", NULL); + + /* set up global "now" for EOD */ + initNow(fd); + + while(1) { + /* Check for a goto */ + + if(config.fGoto) { + iBytes=0; + iBytes = read(fd_goto_fifo,szIn,1); + if(iBytes==1) { + if(tracing) { + szMsg[0]=szIn[0]; + szMsg[1]='\0'; + } + trace(1,"Reading GOTO %s\n",szMsg); + telescope_goto(fd_goto_fifo,fd,szIn[0]); + last_send_time = time(NULL); + } + + if(moving && time(NULL) > last_send_time + config.minimum_move_time) { + send_goto(fd); /*Recenter a moving object*/ + last_send_time = time(NULL); + } else { + usleep(updper*1000); + } + } + else + usleep(updper*1000); + + if(config.fMarker) { + trace(7,"Sending get ra\n",NULL); + lx200_get_ra(fd,buf); + lx200_convert_RA(buf,&ra_hour,&ra_min,&ra_sec); /*Parse it*/ + if(tracing) { + snprintf(szMsg,100,"%s RH: %d RM: %d RS: %d\n",buf,ra_hour,ra_min,ra_sec); + trace(8,szMsg,NULL); + } + /*Scan and convert it to radians*/ + f_scansexa(buf,&tmp); + ra = nohw ? op.s_ra : hrrad(tmp); + + + lx200_get_dec(fd,buf); + lx200_convert_Dec(buf,&dec_deg,&dec_min,&dec_sec); /*Parse it*/ + buf[3]=':'; + if(tracing) { + snprintf(szMsg,100,"%s %d %d %d\n",buf,dec_deg,dec_min,dec_sec); + trace(8," %s\n",szMsg); + } + /*Scan it and convert to radians*/ + f_scansexa(buf,&tmp); + dec = nohw ? op.s_dec : degrad(tmp); + + time_fromsys( &now); + mjd_year( now.n_mjd, &ep); + snprintf(buf,sizeof(buf),"RA:%9.6f Dec:%9.6f Epoch:%13.8f\n",ra,dec,ep); + trace(7,"To XEphem: %s\n", buf); + write(fd_marker_fifo, buf, strlen(buf)); + } + } + /*A clean exit*/ + die(NULL,NULL); +} + +/* + * Standard usage + */ +void +usage(void) +{ + printf("Usage: lx200xed [options]\n"); + printf("Purpose: allow XEphem to control a Meade LX200 telescope\n"); + printf("Options:\n"); + printf(" -e Turn on hardware emulation\n"); + printf(" -m path alternate FIFO to XEphem for telescope marker\n"); + printf(" default %s\n", MARKFIFO_NAME); + printf(" -g path alternate FIFO from XEphem for telescope GOTOs\n"); + printf(" default %s\n", GOTOFIFO_NAME); + printf(" -t path device for telescope; default %s\n", TELESCOPE); + printf(" -p number air pressure, mbars; default %g\n", PRESSURE); + printf(" -c temp air temperature, Celius; default %g\n", TEMPERATURE); + printf(" -d dip sun angle down at end of twilight; default %g\n", + raddeg(SUNDIP)); + printf(" -h elev elevation in meters; default %g\n", ELEVATION); + printf(" -l lat use this latitude, not scope's, D:M:S, +N\n"); + printf(" -L lng use this longitude, not scope's, D:M:S, +E\n"); + printf(" -N turn off GOTO control\n"); + printf(" -M turn off telescope marker\n"); + printf(" -A turn off automatic follow of moving objects\n"); + printf(" -i secs interval betweens moves for automatic follow, secs; default %d\n", MINMOV); + printf(" -u ms graphical update period, ms; default %d\n", UPDDEF); + printf(" -x level set debug level to level\n"); + printf(" -v print version and exit\n"); + printf(" - this schpeel\n"); + die(NULL,NULL); +} + +static void +prVersion(void) +{ + char buf[128]; + + lx200_get_lib_version(buf); + printf("lx200xed $Revision: 1.18 $\n"); + printf("liblx200 %s\n", buf); +} + +/* + * Handle command line options + */ +void +parse_opts(int argc, char **argv) +{ + char cOption; + double tmp; + + trace(6,"In parse_opts...\n",NULL); + while (1) { + cOption=getopt(argc,argv,"l:L:ep:d:m:g:t:NMAx:u:i:h:vc:"); + if(cOption==EOF) + break; + switch(cOption) { + case 'v': + prVersion(); + die(NULL,NULL); + break; + case 'e': /*set liblx200 to emulate hardware*/ + lx200_set_lib_emulate(LX200_TRUE,LX200_EMULATE_TRUE); + nohw = 1; + break; + + case 'm': /*Override the default marker FIFO*/ + strncpy(config.szFifo_mark_name,optarg,255); + break; + case 'l': /* new latitude D:M:S +N */ + f_scansexa(optarg,&tmp); + now.n_lat = degrad(tmp); + break; + case 'L': /* new longitude D:M:S +W */ + f_scansexa(optarg,&tmp); + now.n_lng = degrad(-tmp); + break; + case 'g': /*Override the default goto FIFO*/ + strncpy(config.szFifo_goto_name,optarg,255); + break; + case 't': /*Override the default telescope device*/ + strncpy(config.szTelDev,optarg,255); + break; + case 'p': /*Set the pressure*/ + config.dPressure=strtod(optarg,NULL); + break; + case 'd': /*Set the dip*/ + config.dDip=strtod(optarg,NULL); + if(!errno) + config.dDip=degrad(config.dDip); + break; + case 'c': /*Set the temperature*/ + config.dTemp=strtod(optarg,NULL); + break; + case 'h': /*Set the elevation*/ + config.dElev=strtod(optarg,NULL); + break; + case 'N': /*No goto control*/ + config.fGoto=FALSE; + break; + case 'M': /*No marker control*/ + config.fMarker=FALSE; + break; + case 'A': /*No automatic following of moving objects*/ + config.fMoving=FALSE; + break; + case 'i': + config.minimum_move_time=atoi(optarg); + if(errno) { + printf("Invalid number of seconds for interval, setting to %d\n", + MINMOV); + config.minimum_move_time= MINMOV; + } + break; + case 'x': /*Debug level*/ + config.iTrace=(int)strtol(optarg,NULL,10); + if(errno) { + printf("Invalid trace level, setting to no trace\n"); + config.iTrace=0; + } + break; + case 'u': + updper = strtol (optarg, NULL, 10); + break; + default: + usage(); + break; + } + } +} + +/* + * die cleanly, possibly with a message and argument + */ +void +die(char *szMsg, char *szArg) +{ + trace(6,"In die...\n",NULL); + + /* + if(fd!=-1) { + lx200_close_scope(fd); + close(fd_goto_fifo); + close(fd_marker_fifo); + }*/ + + if(szMsg!=NULL && szArg!=NULL) + printf("%s: %s\n",szMsg, szArg); + else + if(szMsg!=NULL) + printf("%s\n",szMsg); + trace(1,"lx200xed exiting\n",NULL); + exit(0); +} + +/* init now -- all but mjd, that gets set as needed. + * Get the latitude and longitude from scope if not already known. + */ +void +initNow (int fd) +{ + if (!now.n_lng && !now.n_lat) { + char szLat[21],szLong[21]; + double tmp; + + lx200_get_latitude(fd,szLat); + if(tracing) trace(4,"Lat from scope: '%s' ",szLat); + szLat[3] = ':'; + strcat(szLat,":00"); + if(tracing) trace(4,"becomes '%s'\n",szLat); + + lx200_get_longitude(fd,szLong); + if(tracing) trace(4,"Lng from scope: '%s' ",szLong); + szLong[3] = ':'; + strcat(szLong,":00"); + if(tracing) trace(4,"becomes '%s'\n",szLong); + + f_scansexa(szLong,&tmp); + now.n_lng = degrad(-tmp); + f_scansexa(szLat,&tmp); + now.n_lat = degrad(tmp); + } + + now.n_elev=config.dElev/ERAD; + now.n_dip=config.dDip; + now.n_epoch=J2000; + now.n_temp=config.dTemp; + now.n_pressure=config.dPressure; +} + +/* + * Replace one character in a string with another + */ +void +replace(char cFrom, char cTo, char *szp) +{ + char *c=szp; + + trace(6,"In replace...",NULL); + while(*c++!='\0') + if(*c==cFrom) + *c=cTo; +} + +/* + * Telescope GOTO + * Reads the in fifo to get the object information + * Calls db_crack_line from libastro + * sets the moving flag and then calls send_goto + * to calculate the position and move the scope + */ +void +telescope_goto(int fd_in, int fd_out, char c) +{ + int iBytes,iRead=1; + char sz[121],szIn[2],szMsg[100]; + + trace(6,"In telescope_goto...",NULL); + sz[0]=c; + trace(1,"Telescope goto\n",NULL); + + while(1) { + trace(5,"Reading a byte\n",NULL); + iBytes = read(fd_in,szIn,1); + if(tracing) { + szMsg[0]=c; + szMsg[1]='\0'; + trace(6,"Read c=%.1s\n",szIn); + } + if(iBytes==-1) { + sz[iRead]='\0'; + trace(5,"Received: %s\n",sz); + break; + } + if(iRead<120) + sz[iRead++]=szIn[0]; + + } + + trace(4,"Cracking line:%s\n", sz); + if(db_crack_line(sz,&op,NULL,0,szMsg)<0) { + trace(4,"Couldn't crack edb info:%s\n", szMsg); + return; + } + if(op.o_type ==FIXED) + moving=FALSE; + else + moving=config.fMoving; + + if(tracing) { + trace(4,"Cracked edb line for %s",op.o_name); + trace(4," %s\n",moving ? "Moving" : "Fixed" ); + } + + send_goto(fd_out); +} + +/* + * send_goto + * This sends a goto by calling obj_cir + * from libastro to get current information, + * and then sending the goto to the scope. + * + * op should contain a valid object before this call. + */ +int +send_goto(int fd) +{ + char szRa[20], szDec[20]; + + trace(6,"In send_goto...",NULL); + + if(tracing) { + char szEp[10]; + double tmp; + mjd_year (op.f_epoch, &tmp); + sprintf (szEp, "%8.3f", tmp); + fs_sexa(szRa,radhr(op.f_RA),2,3600); + fs_sexa(szDec,raddeg(op.f_dec),3,3600); + trace(5,"From XEphem RA=%s",szRa); + trace(5," Dec=%s",szDec); + trace(5," Ep=%s\n", szEp); + } + + /*And finally calculate the emphererid for the object*/ + trace(3,"Calling obj_cir\n",NULL); + time_fromsys(&now); + if(obj_cir(&now,&op)<0) { + trace(4,"obj_cir failed\n",NULL); + return LX200_FALSE; + } + trace(3,"Formatting scope goto values\n",NULL); + fs_sexa(szRa,radhr(op.s_ra),2,3600); + + /* this gives always create 4 chars left of first : + * no zero pad, no explicit + + */ + fs_sexa(szDec,raddeg(op.s_dec),4,3600); + + if(tracing) { + trace(5,"EOD RA=%s",szRa); + trace(5," Dec=%s\n",szDec); + } + /*Leading zeros are required by the LX200*/ + /*RA is easy*/ + if(szRa[0]==' ') + szRa[0]='0'; + + /*Deal with sign, but liblx200 accepts : or 223 for degree sign*/ + /*However, this is a little harder. + * FS requires exactly "Sd SDD:MM:SS", we build " SDD:MM:SS" portion here. + */ + /* always leave szDec[0] a blank */ + if (szDec[2] == ' ' || szDec[2] == '-') { + /* zero-pad degrees to 2 places */ + szDec[1] = szDec[2]; + szDec[2] = '0'; + } + if (szDec[1] != '-') { + /* explicit + before positive deg */ + szDec[1] = '+'; + } + + if(tracing) { + trace(5,"Real: RA %s ,",szRa); + trace(5," Dec: %s\n",szDec); + } + return(lx200_goto_RADec(fd,szRa,szDec)); +} + +/* + * Open a FIFO using mode "mode" + * If blocking is false, set the stream + * to block + */ +int +open_fifo(char *szName, int mode, BOOLEAN blocking) +{ + struct stat fbuf; + int fd; + + trace(6,"In send_goto...",NULL); + + if (stat(szName, &fbuf) == -1) { + die(szName,strerror(errno)); + } + else if (!S_ISFIFO(fbuf.st_mode)) + { + die(szName, "not a fifo"); + } + + trace(4,"Open the FIFO\n",NULL); + + if (!blocking) + mode |= O_NONBLOCK; + fd = open(szName,mode); + if(fd<0) { + die(szName, strerror(errno)); + } + return(fd); +} + +/* + * Shamelessly ripped from E.C. Downey's XEphem + * Gets time from system + */ +void +time_fromsys (Now *np) +{ +#if defined(__STDC__) + time_t t; +#else + long t; +#endif + + trace(6,"In time_fromsys...\n",NULL); + + t = time(NULL); + + /* t is seconds since 00:00:00 1/1/1970 UTC on UNIX systems; + * mjd was 25567.5 then. + */ +#if defined(VMS) && (__VMS_VER < 70000000) + /* VMS returns t in seconds since 00:00:00 1/1/1970 Local Time + * so we need to add the timezone offset to get UTC. + * Don't need to worry about 'set_t0' and 'inc_mjd' because + * they only deal in relative times. + * this change courtesy Stephen Hirsch + * - OpenVMS V7.0 finally has gmt support! so use standard time + * - algorithm Vance Haemmerle + */ + mjd = (25567.5 + t/3600.0/24.0) + (tz/24.0); +#else + mjd = 25567.5 + t/3600.0/24.0; +#endif + snprintf(szMsg,100,"TFS: %f\n",mjd); + trace(5,szMsg,NULL); + + (void) tz_fromsys(np); + + if(tracing) { + snprintf(szMsg,100,"TFS2 MJD: %f TZ=%f TZN=%s\n",mjd,tz,tznm); + trace(5,szMsg,NULL); + } +} + +/* given the mjd within np, try to figure the timezone from the os. + * return 0 if it looks like it worked, else -1. + * + * Shamelessly ripped from E.C. Downey's XEphem + */ +int +tz_fromsys (Now *np) +{ + struct tm *gtmp; + time_t t; + + trace(6,"In tz_fromsys...",NULL); + t = (time_t)((mjd - 25567.5) * (3600.0*24.0) + 0.5); + + /* try to find out timezone by comparing local with UTC time. + * GNU doesn't have difftime() so we do time math with doubles. + */ + gtmp = gmtime (&t); + if (gtmp) { + double gmkt, lmkt; + struct tm *ltmp; + + gtmp->tm_isdst = 0; /* _should_ always be 0 already */ + gmkt = (double) mktime (gtmp); + + ltmp = localtime (&t); + ltmp->tm_isdst = 0; /* let mktime() figure out zone */ + lmkt = (double) mktime (ltmp); + + tz = (gmkt - lmkt) / 3600.0; + (void) strftime (tznm, sizeof(tznm)-1, "%Z", ltmp); + return (0); + } else + return (-1); +} + +/* + * General debug printer + * The higher iLevel the more information + * you get + */ +void +trace(int iLevel, char *szpFormat, char *szpArg) +{ + if(iLevel<=config.iTrace) { + if(szpArg==NULL) + printf(szpFormat); + else + printf(szpFormat,szpArg); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: lx200xed.c,v $ $Date: 2004/04/20 03:58:44 $ $Revision: 1.18 $ $Name: $"}; diff --git a/GUI/xephem/tools/mpccomet2edb.pl b/GUI/xephem/tools/mpccomet2edb.pl new file mode 100755 index 0000000..4cda272 --- /dev/null +++ b/GUI/xephem/tools/mpccomet2edb.pl @@ -0,0 +1,136 @@ +#!/usr/bin/perl +# read Soft00Cmt.txt on stdin and generate two files. The name of the files +# is $1.edb and $1_dim.edb, where $1 refers to the first (and only) argument +# to this script. +# +# $1.edb will contain only those comets which might ever be brighter than +# $dimmag (set below); the remaining comets are saved in $1_dim.edb. +# +# Soft00Cmt.txt is a service of the Minor Planet Center, +# http://cfa-www.harvard.edu/iau/Ephemerides/Comets/Soft00Cmt.txt +# +# Copyright (c) 2000 Elwood Downey + +# grab RCS version +$ver = '$Revision: 1.3 $'; +$ver =~ s/\$//g; + +# setup cutoff mag +$dimmag = 13; # dimmest mag to be saved in "bright" file + +# require exactly one arg +&usage() if (@ARGV != 1 or $ARGV[0] eq "-help"); + +# create files +$fnbase = $ARGV[0]; +$brtfn = "$fnbase.edb"; # name of file for bright comets +open BRT, ">$brtfn" or die "Can not create $brtfn\n"; +$dimfn = "$fnbase"."_dim.edb";# name of file for dim comets +open DIM, ">$dimfn" or die "Can not create $dimfn\n"; + +# build some common boilerplate +($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime; +$year += 1900; +$mon += 1; +$from = "# Data is from http://cfa-www.harvard.edu/iau/Ephemerides/Comets\n"; +$what = "# Generated by mpccomet2edb.pl $ver, (c) 2000 Elwood Downey\n"; +$when = "# Processed $year-$mon-$mday $hour:$min:$sec UTC\n"; + +# add boilerplate to each file +print BRT "# Comets ever brighter than $dimmag.\n"; +print BRT $from; +print BRT $what; +print BRT $when; +print DIM "# Comets never brighter than $dimmag.\n"; +print DIM $from; +print DIM $what; +print DIM $when; + +# process each Soft00Cmt.txt entry +while () { + chomp(); + next if (length() < 100); + + # build the name + $name = &s(103, length()); + $name =~ s/[\(\)]//g; + $name =~ s/^ *//; + $name =~ s/ *$//; + next if ($name eq ""); + + # gather the orbital params + $i = &s(71,79) + 0; + $O = &s(61,69) + 0; + $o = &s(51,59) + 0; + $q = &s(31,39) + 0; + $e = &s(41,49) + 0; + $M = 0; + $E = &s(20,21) . "/" . &s(23,29) . "/" . &s(15,18); # Y/M/D + $E =~ s/ //g; + $H = &s(97,100) + 0; + $G = &s(91,95) + 0; + + # decide whether it's ever brighter than $dimmag + $aph = $e == 1 ? $q : $q*(1+$e)/(1-$e); + if ($q < 1.1 && $aph > .9) { + $fd = BRT; # might be in the back yard some day :-) + } else { + $maxmag = $H + 5*&log10($q*&absv($q-1)); + $fd = $maxmag > $dimmag ? DIM : BRT; + } + + # print, depending on eccentricity + if ($e < .99) { + # elliptical orbit + # better to avoid if e is getting very close to 1 + $a = $q/(1-$e); + print $fd "$name,e,$i,$O,$o,$a,0,$e,$M,$E,2000.0,$H,$G\n"; + } elsif ($e > 1) { + # hyperbolic orbit + print $fd "$name,h,$E,$i,$O,$o,$e,$q,2000.0,$H,$G\n"; + } else { + # parabolic orbit + print $fd "$name,p,$E,$i,$o,$q,$O,2000.0,$H,$G\n"; + } +} + +# like substr($_,first,last), but one-based. +sub s +{ + substr ($_, $_[0]-1, $_[1]-$_[0]+1); +} + +# return log base 10 +sub log10 +{ + .43429*log($_[0]); +} + +# return absolute value +sub absv +{ + $_[0] < 0 ? -$_[0] : $_[0]; +} + +# return min of two values +sub min +{ + $_[0] < $_[1] ? $_[0] : $_[1]; +} + +# print usage message then die +sub usage +{ + print "Usage: $0 < Soft00Cmt.txt\n"; + print "$ver\n"; + print "Purpose: convert Soft00Cmt.txt file to .edb format.\n"; + print "Creates two files:\n"; + print " .edb: all comets ever brighter than $dimmag\n"; + print " _dim.edb: all comets never brighter than $dimmag\n"; + print "Nothing occurs on our stdout and stderr except error messages.\n"; + + exit 1; +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: mpccomet2edb.pl,v $ $Date: 2000/06/30 17:14:43 $ $Revision: 1.3 $ $Name: $ diff --git a/GUI/xephem/tools/mpec2edb.pl b/GUI/xephem/tools/mpec2edb.pl new file mode 100755 index 0000000..792cc90 --- /dev/null +++ b/GUI/xephem/tools/mpec2edb.pl @@ -0,0 +1,28 @@ +#!/usr/bin/perl +# convert Minor Planet Electronic Circular, MPEC, to edb format + +# Sample: +# Orbital elements: +# 2003 UB313 +# Epoch 2005 Aug. 18.0 TT = JDT 2453600.5 MPC +# M 197.53790 (2000.0) P Q +# n 0.00176902 Peri. 151.31153 -0.91258509 -0.02028701 +# a 67.7091000 Node 35.87500 -0.34877687 -0.48266077 +# e 0.4416129 Incl. 44.17700 +0.21340843 -0.87557240 +# P 557 H -1.1 G 0.15 U 5 + +while (<>) { + if (/Orbital elements/) { + chomp ($name = <>); + ($e,$y,$m,$d) = split (/ +/, <>); + next unless ($e =~ /Epoch/); + ($x,$M,$ep) = split (/[ ()]+/, <>); + ($x,$n,$x,$P) = split (/ +/, <>); + ($x,$a,$x,$N) = split (/ +/, <>); + ($x,$e,$x,$i) = split (/ +/, <>); + ($x,$x,$x,$H,$x,$G) = split (/ +/, <>); + + print "$name,e,$i,$N,$P,$a,$n,$e,$M,8/$d/$y,$ep,H$H,$G\n", + } +} + diff --git a/GUI/xephem/tools/simpleINDI/._Makefile b/GUI/xephem/tools/simpleINDI/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/simpleINDI/._Makefile differ diff --git a/GUI/xephem/tools/simpleINDI/._simpleINDI.c b/GUI/xephem/tools/simpleINDI/._simpleINDI.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/simpleINDI/._simpleINDI.c differ diff --git a/GUI/xephem/tools/simpleINDI/Makefile b/GUI/xephem/tools/simpleINDI/Makefile new file mode 100644 index 0000000..c8b9444 --- /dev/null +++ b/GUI/xephem/tools/simpleINDI/Makefile @@ -0,0 +1,24 @@ +CC = gcc + +LILXML = ../../../../liblilxml +ASTRO = ../../../../libastro + +LILXMLA = $(LILXML)/liblilxml.a +ASTROA = $(ASTRO)/libastro.a + +CLDFLAGS = -g +CFLAGS = $(CLDFLAGS) -O2 -Wall -I$(LILXML) -I$(ASTRO) +LDFLAGS = $(CLDFLAGS) +LIBS = $(LILXMLA) $(ASTROA) -lm + +simpleINDI: simpleINDI.o $(LILXMLA) $(ASTROA) + $(CC) $(LDFLAGS) simpleINDI.o -o $@ $(LIBS) + +$(LILXMLA): + cd $(LILXML); make + +$(ASTROA): + cd $(ASTRO); make + +clean: + rm -f simpleINDI simpleINDI.o diff --git a/GUI/xephem/tools/simpleINDI/simpleINDI.c b/GUI/xephem/tools/simpleINDI/simpleINDI.c new file mode 100644 index 0000000..c766bc0 --- /dev/null +++ b/GUI/xephem/tools/simpleINDI/simpleINDI.c @@ -0,0 +1,711 @@ +/* This is a stand-alone INDI server process to demonstrate a minimal implementation of + * listening for and taking action from a Telescope GoTo from XEphem. No indiserver is + * required which means all the intended multiple client/driver topological flexibility in + * the INDI protocol is lost, but hopefully it helps a programmer guickly understand how + * to talk with INDI and use the libastro circum() function call to compute ephemerides + * and thence control a telescope mount device of the user's choice. + * + * This server intentionally mosty uses only standard C/POSIX library calls to be as portable + * as possible. The only extra libraries required are the "little XML" parser and libastro + * included with all XEphem distros. The structure is intentionally as straighforward as + * possible for pedagogical reasons; a production version would be more flexible and robust. + * The more glaring compromises and shortcuts are marked with the comment "TODO". + * Connections to real hardware are, of course, not provided but local alt/az values are + * printed once a second providing a programmer with an easy starting point + * for their own control of real hardware. + * + * This server can be started at any time before, after or during running XEphem. Once + * XEphem sends the current location and a target edb description, it continuously + * computes and prints to stdout its topocentric ephemerides, and also sends them back to + * XEphem for display on the Sky View with its telescope marker. + * + * To use: + * + * build using the accompanying Makefile: make + * start the program: ./simpleINDI + * + * In XEphem: + * + * On the front pane: + * Set Latitude and Longitude to your location. + * Click "RT" in Looping control. + * + * Open Views -> Sky View + * + * Open Sky View -> Telescope -> Configure... + * + * Fill in the fields next to "Send lat and long once to" with the following: + * SimpleTelescope.Location.Latitude 0.174532 0 + * SimpleTelescope.Location.Longitude 0.174532 0 + * + * Check "Enable sending edb" and fill in the field with: + * SimpleTelescope.TrackEDB.edb + * + * Check "Enable Sky marker from" and fill in the field with: + * SimpleTelescope.Pointing.RA2K 0.2617993 0 + * SimpleTelescope.Pointing.Dec2K 0.174532 0 + * + * On the main panel, open Preferences -> Save ... + * + * Cick "Save now" + * + * Open Sky View -> Telescope -> INDI panel... + * + * Click on Connect + * + * Open Sky View -> Telescope -> Configure... + * + * Click "Send lat and long once to" once + * + * Turn on Sky View -> Telescope -> "Keep visible" + * + * Right-click on any location or target in the Sky View then + * release on "Telescope GoTo" + * + * simpleINDI now prints topocentric RA/Dec@J2000 and Alt/Az of this target once per second + * continuously and its location is marked on the Sky View while XEphem is connected. + * A different target may be sent at any time. + */ + +/* system includes */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* local includes */ +#include "astro.h" +#include "preferences.h" +#include "lilxml.h" + +/* configuration variables -- set as required */ +static const int indi_port = 7624; /* listening port on localhost */ +static const int poll_period = 1000; /* device update period, ms */ + +/* local globals */ +static Now now, *my_nowp; /* current time&location if known */ +static Obj obj, *my_objp; /* target description, if known */ +static const char my_device[] = "SimpleTelescope"; /* INDI property device name */ + +/* INDI property elements. + * TODO: a real implementation would support all info, not just these core components. + */ +typedef struct { + char *name; + double value; +} NumberElement; +typedef struct { + char *name; + NumberElement *np; + int nnp; +} NumberProperty; +typedef struct { + char *name; + char *value; +} TextElement; +typedef struct { + char *name; + TextElement *tp; + int ntp; +} TextProperty; +#define NELE(x) (sizeof(x)/sizeof(x[0])) + +static NumberElement location_ele[] = { + { "Latitude", 0.0}, + { "Longitude", 0.0} +}; +static NumberProperty location_prop = { + "Location", + location_ele, + NELE (location_ele) +}; + +static NumberElement pointing_ele[] = { + { "RA2K", 0.0}, + { "Dec2K", 0.0} +}; +static NumberProperty pointing_prop = { + "Pointing", + pointing_ele, + NELE(pointing_ele) +}; + +static TextElement trackedb_ele[] = { + { "edb", NULL } +}; +static TextProperty trackedb_prop = { + "TrackEDB", + trackedb_ele, + NELE(trackedb_ele) +}; + +/* local functions */ +static void usage (const char *me); +static int openINDI(void); +static void runINDI (int listen_socket); +static int newClSocket(int listen_socket); +static int moreClientMessage (FILE *cl_fp, LilXML *lp); +static void updateDevice(FILE *cl_fp); +static void dispatchINDI (XMLEle *root, FILE *cl_fp); +static void handleLocationMessage (XMLEle *root, FILE *cl_fp); +static void handleTrackEBDMessage (XMLEle *root, FILE *cl_fp); +static void handleGetPropertiesMessage (XMLEle *root, FILE *cl_fp); +static void sendINDINumber (FILE *fp, int isdef, int isok, const char *device, NumberProperty *np, + const char *fmt, ...); +static int getINDINumber(XMLEle *root, NumberProperty *np); +static void sendINDIText (FILE *fp, int isdef, int isok, const char *device, TextProperty *tp, + const char *fmt, ...); +static int getINDIText(XMLEle *root, TextProperty *np); +static char *tsNow(); +static double mjdNow(void); +static void vsmessage (FILE *fp, const char *fmt, va_list ap); +static int sexagesimal (const char *str0, double *dp); +static void Bye (const char *fmt, ...); + +int +main (int ac, char *av[]) +{ + int listen_socket; + + if (ac > 1) + usage (av[0]); + + /* start listening for connections on standard INDI port 7624 */ + listen_socket = openINDI(); + + /* set preferences */ + pref_set (PREF_EQUATORIAL, PREF_TOPO); + + /* service one client at a time, forever */ + runINDI(listen_socket); + + return (0); +} + +/* print usage summary for the given program and exit + */ +static void +usage (const char *me) +{ + fprintf (stderr, "Usage: %s\n", me); + fprintf (stderr, "Purpose: simple stand-alone INDI telescope service\n"); + exit(1); +} + +/* return a public indiserver socket endpoint on indi_port + */ +static int +openINDI() +{ + struct sockaddr_in serv_socket; + int reuse = 1; + int sfd; + + /* make socket endpoint */ + if ((sfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) + Bye ("socket: %s\n", strerror(errno)); + + /* bind to port for any IP address */ + memset (&serv_socket, 0, sizeof(serv_socket)); + serv_socket.sin_family = AF_INET; + serv_socket.sin_addr.s_addr = htonl (INADDR_ANY); + serv_socket.sin_port = htons ((unsigned short)indi_port); + if (setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0) + Bye ("setsockopt: %s\n", strerror(errno)); + if (bind(sfd,(struct sockaddr*)&serv_socket,sizeof(serv_socket)) < 0) + Bye ("bind: %s\n", strerror(errno)); + + /* willing to accept connections with a backlog of 5 pending */ + if (listen (sfd, 5) < 0) + Bye ("listen: %s\n", strerror(errno)); + + /* ok */ + printf ("listening to port %d with fd %d\n", indi_port, sfd); + return (sfd); +} + +/* run the server forever accepting new clients on listen_socket. + * dispatch messages while client exists, else check for new client, + * call updateDevice if neither. + */ +static void +runINDI (int listen_socket) +{ + FILE *cl_fp = NULL; /* client, if any. fileno read, * formatted writes */ + LilXML *lp; /* parsing context, if client connected */ + + while (1) { + struct timeval to; + fd_set rset; + int s, maxn; + + /* listen for client messages else for new client connection */ + FD_ZERO (&rset); + if (cl_fp) { + FD_SET (fileno(cl_fp), &rset); + maxn = fileno(cl_fp); + } else { + FD_SET (listen_socket, &rset); + maxn = listen_socket; + } + + /* set timeout if neither */ + to.tv_sec = poll_period/1000; + to.tv_usec = 1000*(poll_period%1000); + + s = select (maxn+1, &rset, NULL, NULL, &to); + if (s < 0) + Bye ("select: %s\n", strerror(errno)); + if (s == 0) { + updateDevice(cl_fp); + } else if (FD_ISSET (listen_socket, &rset)) { + /* new client arrival. open private socket and create new parsing context */ + int cl_socket = newClSocket (listen_socket); + cl_fp = fdopen (cl_socket, "w"); + lp = newLilXML(); + } else if (FD_ISSET (fileno(cl_fp), &rset)) { + /* more client message. if closes connection, close socket and delete context */ + if (moreClientMessage (cl_fp, lp) < 0) { + printf ("client on socket %d disconnected\n", fileno(cl_fp)); + fclose (cl_fp); /* also closes cl_socket */ + cl_fp = NULL; + delLilXML (lp); + } + } else { + Bye ("impossible fd_set\n"); + } + + } +} + +/* accept a known pending new client arriving on listen_socket. + * return private socket or exit + */ +static int +newClSocket(int listen_socket) +{ + struct sockaddr_in cli_socket; + socklen_t cli_len; + int cli_fd; + + /* get a private connection to new client */ + cli_len = sizeof(cli_socket); + cli_fd = accept (listen_socket, (struct sockaddr *)&cli_socket, &cli_len); + if(cli_fd < 0) + Bye ("accept: %s\n", strerror(errno)); + + /* ok */ + printf ("New client arrived, using socket %d\n", cli_fd); + return (cli_fd); +} + +/* read and dispatch more messages known to be pending on cl_fp using parser context lp. + * return 0 if ok else -1 if closes connected. + * exit if real trouble. + */ +static int +moreClientMessage (FILE *cl_fp, LilXML *lp) +{ + char buf[1024]; + char err[1024]; + int i, r; + + /* perform exactly one read */ + r = read (fileno(cl_fp), buf, sizeof(buf)); + if (r <= 0) + return (-1); + + /* parse more XML, dispatch when see closure */ + for (i = 0; i < r; i++) { + XMLEle *root = readXMLEle (lp, buf[i], err); + if (root) { + dispatchINDI (root, cl_fp); + delXMLEle (root); + } else if (err[0]) + Bye ("XML error from '%.*s': %s\n", buf, r, err); + } + + /* finished parsing this read */ + return (0); +} + +/* compute new ephemeris for my_objp at my_nowp, if known. + * print, and send to cl_fp if open. + * TODO: control real device! + */ +static void +updateDevice(FILE *cl_fp) +{ + if (!my_objp || !my_nowp) + return; + + /* update time */ + my_nowp->n_mjd = mjdNow(); + + /* update my_objp @ my_nowp */ + obj_cir (my_nowp, my_objp); + + /* print */ + printf ("%13.5f: %8.5f %8.5f %8.5f %8.5f\n", + my_nowp->n_mjd + MJD0, + radhr(my_objp->s_ra), raddeg(my_objp->s_dec), + raddeg(my_objp->s_alt), raddeg(my_objp->s_az)); + + /* send to client also, if open */ + if (cl_fp) { + pointing_prop.np[0].value = radhr(my_objp->s_ra); + pointing_prop.np[1].value = raddeg(my_objp->s_dec); + sendINDINumber (cl_fp, 0, 1, my_device, &pointing_prop, NULL); + } +} + +/* crack and perform the given INDI XML message. + * ignore if unrecognized. + */ +static void +dispatchINDI (XMLEle *root, FILE *cl_fp) +{ + char *roottag = tagXMLEle(root); + char *dev = findXMLAttValu (root, "device"); + char *name = findXMLAttValu (root, "name"); + + printf ("Parsing ncoming %s %s.%s\n", roottag, dev, name); + + /* decide type of message -- TODO */ + if (!strcmp (roottag, "getProperties")) + handleGetPropertiesMessage (root, cl_fp); + else if (!strncmp (roottag, "new", 3) && !strcmp (dev, my_device)) { + if (!strcmp (name, "Location")) + handleLocationMessage (root, cl_fp); + else if (!strcmp (name, "TrackEDB")) + handleTrackEBDMessage (root, cl_fp); + } + +} + +/* handline incoming getProperties message + */ +static void +handleGetPropertiesMessage (XMLEle *root, FILE *cl_fp) +{ + char *version = findXMLAttValu (root, "version"); + + /* require at least version 1 */ + if (atoi(version) < 1) + return; + + /* report each supported property */ + sendINDINumber (cl_fp, 1, 1, my_device, &location_prop, NULL); + sendINDINumber (cl_fp, 1, 1, my_device, &pointing_prop, NULL); + sendINDIText (cl_fp, 1, 1, my_device, &trackedb_prop, NULL); +} + +/* handle incoming Location message + */ +static void +handleLocationMessage (XMLEle *root, FILE *cl_fp) +{ + if (getINDINumber(root, &location_prop) < 0) + return; + + /* init my_nowp to indicate it is now valid */ + my_nowp = &now; + memset (my_nowp, 0, sizeof(*my_nowp)); + my_nowp->n_mjd = mjdNow(); + my_nowp->n_lat = degrad(location_prop.np[0].value); + my_nowp->n_lng = degrad(location_prop.np[1].value); + my_nowp->n_tz = 0; /* TODO */ + my_nowp->n_temp = 0; /* TODO */ + my_nowp->n_pressure = 1000; /* TODO */ + my_nowp->n_elev = 0; /* TODO */ + my_nowp->n_dip = 0; /* TODO */ + my_nowp->n_epoch = J2000; /* TODO */ + strcpy (my_nowp->n_tznm, "UTC"); /* TODO */ + + /* ack successful */ + sendINDINumber (cl_fp, 0, 1, my_device, &location_prop, NULL); +} + +/* handle incoming TrackEDB message + */ +static void +handleTrackEBDMessage (XMLEle *root, FILE *cl_fp) +{ + char ynot[1024]; + char *edb; + + if (getINDIText (root, &trackedb_prop) < 0) + return; + edb = trackedb_prop.tp[0].value; + + /* init my_objp if valid and ack */ + if (db_crack_line (edb, &obj, NULL, 0, ynot) > 0) { + my_objp = &obj; + sendINDIText (cl_fp, 0, 1, my_device, &trackedb_prop, "Now tracking %s", my_objp->o_name); + } else { + my_objp = NULL; + sendINDIText (cl_fp, 0, 0, my_device, &trackedb_prop, "Can not grok '%s': %s", edb, ynot); + } +} + +/* send the given INDI Number to fp with an optional message + */ +static void +sendINDINumber (FILE *fp, int isdef, int isok, const char *device, NumberProperty *np, +const char *fmt, ...) +{ + char *tv = isdef ? "def" : "set"; + int i; + + fprintf (fp, "<%sNumberVector\n", tv); + fprintf (fp, " device='%s'\n", device); + fprintf (fp, " name='%s'\n", np->name); + fprintf (fp, " state='%s'\n", isok ? "Ok" : "Alert"); + fprintf (fp, " timestamp='%s'\n", tsNow()); + if (isdef) { + fprintf (fp, " label='%s'\n", ""); /* TODO */ + fprintf (fp, " group='%s'\n", ""); /* TODO */ + fprintf (fp, " perm='%s'\n", "rw"); /* TODO */ + fprintf (fp, " timeout='%g'\n", 0.0); /* TODO */ + } + + if (fmt) { + va_list ap; + va_start (ap, fmt); + vsmessage (fp, fmt, ap); + va_end (ap); + } + fprintf (fp, ">\n"); + + for (i = 0; i < np->nnp; i++) { + if (isdef) { + fprintf (fp, "np[i].name); + fprintf (fp, " label='%s'\n", ""); /* TODO */ + fprintf (fp, " format='%s'\n", "%10.5g"); /* TODO */ + fprintf (fp, " min='%g'\n", 0.0); /* TODO */ + fprintf (fp, " max='%g'\n", 0.0); /* TODO */ + fprintf (fp, " step='%g'>\n", 0.0); /* TODO */ + fprintf (fp, " %.20g\n", np->np[i].value); + fprintf (fp, "\n"); + } else { + fprintf (fp, " \n", np->np[i].name); + fprintf (fp, " %.20g\n", np->np[i].value); + fprintf (fp, " \n"); + } + } + + fprintf (fp, "\n", tv); + fflush (fp); +} + + +/* extract the given INDI Number values from the XML message. + * return 0 if all ok, else -1 + */ +static int +getINDINumber(XMLEle *root, NumberProperty *np) +{ + XMLEle *ep; + int i, nfound = 0; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(ep)+3, "Number") == 0) { // def or set ok + char *en = findXMLAttValu (ep, "name"); + for (i = 0; i < np->nnp; i++) { + if (!strcmp (en, np->np[i].name)) { + if (sexagesimal (pcdataXMLEle(ep), &np->np[i].value) < 0) + return (-1); /* bad format */ + break; + } + } + if (i == np->nnp) + return (-1); /* unknown name in message */ + nfound++; + } + } + if (nfound != np->nnp) + return (-1); /* some numbers missing */ + return (0); /* ok */ +} + +/* send the given INDI Text to fp + */ +static void +sendINDIText (FILE *fp, int isdef, int isok, const char *device, TextProperty *tp, +const char *fmt, ...) +{ + char *tv = isdef ? "def" : "set"; + int i; + + fprintf (fp, "<%sTextVector\n", tv); + fprintf (fp, " device='%s'\n", device); + fprintf (fp, " name='%s'\n", tp->name); + fprintf (fp, " state='%s'\n", isok ? "Ok" : "Alert"); + if (isdef) { + fprintf (fp, " label='%s'\n", ""); /* TODO */ + fprintf (fp, " group='%s'\n", ""); /* TODO */ + fprintf (fp, " perm='%s'\n", "rw"); /* TODO */ + fprintf (fp, " timeout='%g'\n", 0.0); /* TODO */ + } + fprintf (fp, " timestamp='%s'\n", tsNow()); + if (fmt) { + va_list ap; + va_start (ap, fmt); + vsmessage (fp, fmt, ap); + va_end (ap); + } + fprintf (fp, ">\n"); + + for (i = 0; i < tp->ntp; i++) { + char *v = tp->tp[i].value; + if (isdef) { + fprintf (fp, " tp[i].name); + fprintf (fp, " label='%s'>\n", ""); /* TODO */ + fprintf (fp, " %s\n", v ? entityXML(v) : ""); + fprintf (fp, " \n"); + } else { + fprintf (fp, " \n", tp->tp[i].name); + fprintf (fp, " %s\n", v ? entityXML(v) : ""); + fprintf (fp, " \n"); + } + } + + fprintf (fp, "\n", tv); + fflush (fp); +} + + +/* extract the given INDI Text values from the XML message. + * return 0 if all ok, else -1 + * N.B. strings are re/malloc()ed so caller must eventually free() + */ +static int +getINDIText(XMLEle *root, TextProperty *tp) +{ + XMLEle *ep; + int i, nfound = 0; + + for (ep = nextXMLEle(root,1); ep; ep = nextXMLEle(root,0)) { + if (strcmp (tagXMLEle(ep)+3, "Text") == 0) { + char *en = findXMLAttValu (ep, "name"); + for (i = 0; i < tp->ntp; i++) { + if (!strcmp (en, tp->tp[i].name)) { + char *v = pcdataXMLEle(ep); + tp->tp[i].value = strcpy (realloc (tp->tp[i].value, strlen(v)+1), v); + break; + } + } + if (i == tp->ntp) + return (-1); /* unknown name in message */ + nfound++; + } + } + if (nfound != tp->ntp) + return (-1); /* some values missing */ + return (0); +} + + +/* print message to fp + * N.B. can not vfprint directly, must go through entityXML() + */ +static void +vsmessage (FILE *fp, const char *fmt, va_list ap) +{ + char msg[2048]; + vsnprintf (msg, sizeof(msg), fmt, ap); + fprintf (fp, " message='%s'\n", entityXML(msg)); +} + + +/* return current MJD from computer time + */ +static double +mjdNow() +{ + struct timeval tv; + gettimeofday (&tv, NULL); + return (2440587.5 + (tv.tv_sec+tv.tv_usec/1e6)/SPD - MJD0); +} + +/* return current UTC in ISO-8601 format. + * N.B. returned string is always the same static, will be reused on each subsequent call + */ +static char * +tsNow() +{ + static char timestamp[32]; + time_t t0 = time(NULL); + struct tm *tmp = gmtime (&t0); + + strftime (timestamp, sizeof(timestamp), "%Y-%m-%dT%H:%M:%S", tmp); + return(timestamp); +} + +/* convert sexagesimal string str AxBxC to double. + * x can be anything non-numeric. Any missing A, B or C will be assumed 0. + * optional - and + can be anywhere. + * return 0 if ok, -1 if can't find a thing. + */ +static int +sexagesimal ( +const char *str0, /* input string */ +double *dp) /* cracked value, if return 0 */ +{ + double a, b, c; + char str[256]; + char *neg; + int i, l, isneg; + + /* copy str0 so we can play with it */ + strncpy (str, str0, sizeof(str)-1); + str[sizeof(str)-1] = '\0'; + + /* note first negative (but not fooled by neg exponent) */ + isneg = 0; + neg = strchr(str, '-'); + if (neg && (neg == str || (neg[-1] != 'E' && neg[-1] != 'e'))) { + *neg = ' '; + isneg = 1; + } + + /* crack up to three components -- treat blank as 0 */ + a = b = c = 0.0; + l = strlen(str); + for (i = 0; i < l; i++) { + if (!isspace(str[i])) { + if (sscanf (str, "%lf%*[^0-9]%lf%*[^0-9]%lf", &a, &b, &c) < 1) + return (-1); + break; + } + } + + /* back to one value, restoring neg */ + *dp = (c/60.0 + b)/60.0 + a; + if (isneg) + *dp *= -1; + return (0); +} + +/* print the given error message to stderr and exit + */ +static void +Bye (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + + exit (1); +} diff --git a/GUI/xephem/tools/tle2edb.pl b/GUI/xephem/tools/tle2edb.pl new file mode 100755 index 0000000..4e6b601 --- /dev/null +++ b/GUI/xephem/tools/tle2edb.pl @@ -0,0 +1,140 @@ +#!/usr/bin/perl -w +# tle2edb.pl: perl script to convert NASA "2-line" geocentric orbital elements +# to XEphem .edb. we crack everything that looks reasonable. we allow the TLE +# to be embedded in other text, just so long as it stands on three successive +# lines of their own. the idea is to keep rolling successive lines into l1, +# l2 and l3 and crack whenever they all look correct. +# +# (c) 1993,1995,1998,2000 Elwood Charles Downey +# +# v2.2 9/22/00 add drag term +# v2.1 12/8/98 change to perl. actually use the checksum. support Y2K. +# v2: 6/26/95 allow names up to 22 chars long (official format change). +# v1.3 10/26/93 looks even harder. +# v1.2 9/12/93 fixes for NORAD-format (by bon@LTE.E-TECHNIK.uni-erlangen.de) +# v1.1 9/8/93 change type code to E +# v1.0 8/10/93 initial cut +# +# usage: +# tle2edb.pl [file] +# +# Data for each satellite consists of three lines in the following format: +# +# AAAAAAAAAAAAAAAAAAAAAA +# 1 NNNNNU NNNNNAAA NNNNN.NNNNNNNN +.NNNNNNNN +NNNNN-N +NNNNN-N N NNNNN +# 2 NNNNN NNN.NNNN NNN.NNNN NNNNNNN NNN.NNNN NNN.NNNN NN.NNNNNNNNNNNNNN +# +# Line 0 is a 22-character name. +# +# Lines 1 and 2 are the standard Two-Line Orbital Element Set Format identical +# to that used by NORAD and NASA. The format description is: +# +# Line 1 +# Column Description +# 01-01 Line Number of Element Data +# 03-07 Satellite Number +# 10-11 International Designator (Last two digits of launch year) +# 12-14 International Designator (Launch number of the year) +# 15-17 International Designator (Piece of launch) +# 19-20 Epoch Year (Last two digits of year). 2000+ if < 57. +# 21-32 Epoch (Julian Day and fractional portion of the day) +# 34-43 First Time Derivative of the Mean Motion +# or Ballistic Coefficient (Depending on ephemeris type) +# 45-52 Second Time Derivative of Mean Motion (decimal point assumed; +# blank if N/A) +# 54-61 BSTAR drag term if GP4 general perturbation theory was used. +# Otherwise, radiation pressure coefficient. (Decimal point assumed) +# 63-63 Ephemeris type +# 65-68 Element number +# 69-69 Check Sum (Modulo 10) +# (Letters, blanks, periods, plus signs = 0; minus signs = 1) +# +# Line 2 +# Column Description +# 01-01 Line Number of Element Data +# 03-07 Satellite Number +# 09-16 Inclination [Degrees] +# 18-25 Right Ascension of the Ascending Node [Degrees] +# 27-33 Eccentricity (decimal point assumed) +# 35-42 Argument of Perigee [Degrees] +# 44-51 Mean Anomaly [Degrees] +# 53-63 Mean Motion [Revs per day] +# 64-68 Revolution number at epoch [Revs] +# 69-69 Check Sum (Modulo 10) +# +# All other columns are blank or fixed. +# +# Example: +# +# NOAA 6 +# 1 11416U 86 50.28438588 0.00000140 67960-4 0 5293 +# 2 11416 98.5105 69.3305 0012788 63.2828 296.9658 14.24899292346978 +# +# shield yield: +# +# NOAA 6-529,E,1/ 50.28438588/1986, 98.5105, 69.3305,0.0012788, 63.2828,296.9658,14.24899292,0.00000140,34697 +# + +$[ = 1; # set array base to 1 +$l1 = ""; +$l2 = ""; +$l3 = ""; + +while (<>) { + chop; # discard newline + s/^[\s]*//; # strip leading whitespace + s/[\s]*$//; # strip trailing whitespace + $l1 = $l2; # roll into place + $l2 = $l3; + $l3 = $_; + + # sanity checks + next if (length($l1)>22 or $l2 !~ /^1 / or $l3 !~ /^2 /); + next if (!&chksum ($l2)); + next if (!&chksum ($l3)); + + # $l1 is just the satellite name + $name = $l1; + + # pick out the goodies from l2, "line 1" of the TLE + $year = substr($l2, 19, 2); + if ($year >= 57) {$year += 1900;} else {$year += 2000;} + $dayno = substr($l2, 21, 12); + + $decay = substr($l2, 34, 10); + $drag = substr($l2,54,1) . + substr($l2, 55, 5) * (10 ** substr($l2, 60, 2)) * 1e-5; + $set = substr($l2, 65, 4); + + # pick out the goodies from l3, "line 2" of the TLE + $inc = substr($l3, 9, 8); + $ra = substr($l3, 18, 8); + $e = substr($l3, 27, 7) * 1e-7; + $ap = substr($l3, 35, 8); + $anom = substr($l3, 44, 8); + $n = substr($l3, 53, 11); + $rev = substr($l3, 64, 5); + + # print in xephem format. + printf "%s-%d,E,1/%s/%d,%s,%s,%s,%s,%s,%s,%s,%d,%s\n", $name, $set, $dayno, + $year, $inc, $ra, $e, $ap, $anom, $n, $decay, $rev, $drag; +} + +sub chksum +{ + my $line = $_[0]; + my $len = length($line); + my ($sum, $i, $c); + + $sum = 0; + for ($i = 1; $i < $len; $i++) { + $c = substr($line,$i,1); + $sum += $c if ($c =~ /[\d]/); + $sum += 1 if ($c eq "-"); + } + $c = substr($line,$len,1); + return (($sum % 10) == $c); +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: tle2edb.pl,v $ $Date: 2000/09/26 23:33:09 $ $Revision: 1.3 $ $Name: $ diff --git a/GUI/xephem/tools/xedb/._Makefile b/GUI/xephem/tools/xedb/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xedb/._Makefile differ diff --git a/GUI/xephem/tools/xedb/._README b/GUI/xephem/tools/xedb/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xedb/._README differ diff --git a/GUI/xephem/tools/xedb/._print.c b/GUI/xephem/tools/xedb/._print.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xedb/._print.c differ diff --git a/GUI/xephem/tools/xedb/._sample.res b/GUI/xephem/tools/xedb/._sample.res new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xedb/._sample.res differ diff --git a/GUI/xephem/tools/xedb/._xedb.c b/GUI/xephem/tools/xedb/._xedb.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xedb/._xedb.c differ diff --git a/GUI/xephem/tools/xedb/Makefile b/GUI/xephem/tools/xedb/Makefile new file mode 100644 index 0000000..4f00bf0 --- /dev/null +++ b/GUI/xephem/tools/xedb/Makefile @@ -0,0 +1,27 @@ +# Makefile for xedb. +# assumes gcc, adjust to suit. + +ASLIBDIR = ../../../../libastro +CLDFLAGS = +GCCFLAGS = -O2 -ffast-math -Wall +CFLAGS = $(CLDFLAGS) $(GCCFLAGS) -I$(ASLIBDIR) +LDFLAGS = $(CLDFLAGS) -L$(ASLIBDIR) +LIBS = -lastro -lm + +OBJS = xedb.o \ + print.o + +xedb: $(OBJS) + $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + +TARFILES = Makefile README print.c sample.res xedb.c + +xedb.tar.gz: $(TARFILES) + cd ..; tar cvfz xedb/$@ `cd xedb; ls $(TARFILES) | sed -e s,^,xedb/,` + +clean: + touch x.o + rm -f *.o xedb + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2002/03/07 18:47:58 $ $Revision: 1.6 $ $Name: $ diff --git a/GUI/xephem/tools/xedb/README b/GUI/xephem/tools/xedb/README new file mode 100644 index 0000000..f259ab2 --- /dev/null +++ b/GUI/xephem/tools/xedb/README @@ -0,0 +1,67 @@ +xedb is a command line program that reads lines of sources in .edb format on +stdin and writes ephemeris data for each source on stdout. The output format +is the same as xephemdbd; please see it's README for details. + +Several operating parameters are extracted from the same resource file +used by XEphem. Although not linked with X libraries, xedb looks for this +file using the same rules as XEphem and should make sharing these parameters +between programs easy. The resources used, and defaults if not found for those +which are optional, are: + +XEphem.Lat d:m:s north, required +XEphem.Long d:m:s west, required +XEphem.Elevation m above mean sea level, required +XEphem.Pressure 1010 hPa, optional +XEphem.Temp 10 C, optional +XEphem.TZone 0 hours behind UTC, optional +XEphem.Equinox 2000.0, optional + +xedb also has a few command line arguments as follows: + + -j j : set time to JD j, else use current host + -r f : use XEphem resource file f, else round up the usual suspects + -t : generate topocentric, else geocentric + -v : verbose + +To build xedb, put the source in tools/xedb below the XEphem source code +directory and type make. The libastro library is required and should be +in ../../../../libastro. + +After building xedb, run a quick sanity test as follows: + +1. set up a trial reource file, sample.res, containing this: + +XEphem.Lat: 42:29:40 +XEphem.Long: 92:20:20 +XEphem.Elevation: 259.1 +XEphem.Pressure: 1010 +XEphem.Temp: 10 +XEphem.TZone: 6:00:00 +XEphem.Equinox: 2000 + +2. run this: + +echo 'C/2002 C1 (Ikeya-Zhan,e,28.1206,93.3718,34.6666,51.27566,,0.9901111,0, 3/18.9784/2002, 1/01/2000,g7.5,4,0' | xedb -j 2452330.50000 -v -t -r sample.res + +3. the output should be this: + +Using resource file sample.res + mjd 2002.15068 AD + lat 42.49444 ° + lng -92.33889 ° + temp 10.00000 °C +press 1010.00000 hPa + elev 259.10000 m + tz 6.00000 hrs behind UTC +epoch 2000.00000 AD + equ Topo +Processing: C/2002 C1 (Ikeya-Zhan,e,28.1206,93.3718,34.6666,51.27566,,0.9901111,0, 3/18.9784/2002, 1/01/2000,g7.5,4,0 + +C/2002 C1 (Ikeya-Zhan e 0:53:18.09 -3:11:56.8 6.52 0 65:12:36 -14:10:09 1.233 0.719 80 3:15:59.8 26:28:51 237:18:40 14:54 94:11 20:44 44:13 2:35 266:18 + + +Elwood Downey +ecdowney@clearskyinstitute.com + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: README,v $ $Date: 2002/04/12 22:20:24 $ $Revision: 1.4 $ $Name: $ diff --git a/GUI/xephem/tools/xedb/print.c b/GUI/xephem/tools/xedb/print.c new file mode 100644 index 0000000..024cd0e --- /dev/null +++ b/GUI/xephem/tools/xedb/print.c @@ -0,0 +1,224 @@ +/* print info about op at np, with local stuff if topo */ + +#include +#include +#include + +#include "astro.h" + +static void txt_common (Now *np, Obj *op); +static void txt_fixed (Now *np, Obj *op); +static void txt_helio (Now *np, Obj *op); +static void txt_topo (Now *np, Obj *op); +static void txt_riset (Now *np, Obj *op); + +void +txt_report (Now *np, Obj *op, int topo) +{ + txt_common (np, op); + if (op->o_type == FIXED) + txt_fixed (np, op); + else + txt_helio (np, op); + if (topo) + txt_topo (np, op); + printf ("\n"); +} + +static void +txt_common (Now *np, Obj *op) +{ + char buf[32]; + + printf ("%-*s", MAXNM-1, op->o_name); + switch (op->o_type) { + case FIXED: printf (" f"); break; + case ELLIPTICAL: printf (" e"); break; + case HYPERBOLIC: printf (" h"); break; + case PARABOLIC: printf (" p"); break; + case PLANET: printf (" P"); break; + default: + fprintf (stderr, "Bogus type for %s: %d\n", op->o_name, op->o_type); + exit(1); + } + +#if WANT_CONSTELLATION + id = cns_pick (op->s_ra, op->s_dec, epoch == EOD ? mjd : epoch); + name = cns_name (id); + printf (" %.3s", name); +#else + printf (" %.3s", " "); +#endif + + fs_sexa (buf, radhr(op->s_ra), 2, 360000); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_dec), 3, 36000); + printf (" %s", buf); + + printf (" %6.2f", get_mag (op)); + + printf (" %4.0f", op->s_size); +} + +static void +txt_fixed (Now *np, Obj *op) +{ + printf (" %c", op->f_class != '\0' ? op->f_class : ' '); + + if (op->f_spect[0] != '\0') + printf (" %c%c", op->f_spect[0], + op->f_spect[1] != '\0' ? op->f_spect[1] : ' '); + else + printf (" "); + + printf ("%25s", ""); /* gap to align HA same as for planets */ + + if (op->f_class == 'G' || op->f_class == 'H') + printf ("%4.0f %3.0f", (int)op->f_size*get_ratio(op), + raddeg(get_pa(op))); + else + printf (" "); +} + +static void +txt_helio (Now *np, Obj *op) +{ + char buf[32]; + + fs_sexa (buf, raddeg(op->s_hlong), 3, 3600); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_hlat), 3, 3600); + printf (" %s", buf); + + printf (" %6.3f", op->s_edist); + + printf (" %6.3f", op->s_sdist); + + printf (" %3.0f", op->s_phase); +} + +static void +txt_topo (Now *np, Obj *op) +{ + double raeod = op->s_ra; + double deceod = op->s_dec; + double tmp; + char buf[32]; + + if (epoch != EOD) { + /* need apparent */ + Obj o; + Now n; + + (void) memcpy ((void *)&o, (void *)op, sizeof(Obj)); + (void) memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + (void) obj_cir (&n, &o); + raeod = o.s_ra; + deceod = o.s_dec; + } + + now_lst (np, &tmp); + tmp = tmp - radhr(raeod); /* HA = LST - RA */ + if (tmp > 12) + tmp -= 24; + if (tmp < -12) + tmp += 24; + + fs_sexa (buf, tmp, 3, 36000); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_alt), 3, 3600); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_az), 3, 3600); + printf (" %s", buf); + + txt_riset (np, op); +} + +static void +txt_riset (Now *np, Obj *op) +{ + RiseSet rs; + double dis; + char buf[32]; + + /* semi-diameter displacement */ + dis = degrad(op->s_size/3600./2.0); + riset_cir (np, op, dis, &rs); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, "Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPl"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, "NvrUp"); + else if (rs.rs_flags & RS_NORISE) + (void) strcpy (buf, "NoRis"); + else + fs_sexa (buf, mjd_hr(rs.rs_risetm), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, " Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPol"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, " NvrUp"); + else if (rs.rs_flags & RS_NORISE) + (void) strcpy (buf, "NoRise"); + else + fs_sexa (buf, raddeg(rs.rs_riseaz), 3, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, "Error"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, "NvrUp"); + else if (rs.rs_flags & RS_NOTRANS) + (void) strcpy (buf, "NoTrn"); + else + fs_sexa (buf, mjd_hr(rs.rs_trantm), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, " Error"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, " NvrUp"); + else if (rs.rs_flags & RS_NOTRANS) + (void) strcpy (buf, "NoTran"); + else + fs_sexa (buf, raddeg(rs.rs_tranalt), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, "Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPl"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, "NvrUp"); + else if (rs.rs_flags & RS_NOSET) + (void) strcpy (buf, "NoSet"); + else + fs_sexa (buf, mjd_hr(rs.rs_settm), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, " Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPol"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, " NvrUp"); + else if (rs.rs_flags & RS_NOSET) + (void) strcpy (buf, " NoSet"); + else + fs_sexa (buf, raddeg(rs.rs_setaz), 3, 60); + printf (" %s", buf); +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: print.c,v $ $Date: 2003/04/18 07:36:48 $ $Revision: 1.2 $ $Name: $"}; diff --git a/GUI/xephem/tools/xedb/sample.res b/GUI/xephem/tools/xedb/sample.res new file mode 100644 index 0000000..b4e7112 --- /dev/null +++ b/GUI/xephem/tools/xedb/sample.res @@ -0,0 +1,7 @@ +XEphem.Lat: 42:29:40 +XEphem.Long: 92:20:20 +XEphem.Elevation: 259.1 +XEphem.Pressure: 1010 +XEphem.Temp: 10 +XEphem.TZone: 6:00:00 +XEphem.Equinox: 2000 diff --git a/GUI/xephem/tools/xedb/xedb.c b/GUI/xephem/tools/xedb/xedb.c new file mode 100644 index 0000000..80f75f1 --- /dev/null +++ b/GUI/xephem/tools/xedb/xedb.c @@ -0,0 +1,350 @@ +#include +#include +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + +extern void txt_report (Now *np, Obj *op, int topo); + +static void crackArgs (int ac, char *av[]); +static void usage (void); +static void initNow (Now *np); +static int findResFile (char path[]); +static int findRes (FILE *fp, char *name, char valu[]); +static void processResFile (Now *np, char path[]); +static double crackSexa (char str[]); +static void process1edb (Now *np, char edbline[]); + +static char *myname; +static char *myresfile; +static char *myjd; +static int wanttopo; +static int verbose; + +int +main (int ac, char *av[]) +{ + char buf[1024]; + Now now; + + /* save our name */ + myname = av[0]; + + /* crack args */ + crackArgs (ac, av); + + /* init circumstances */ + initNow(&now); + + /* process each input line */ + while (fgets (buf, sizeof(buf), stdin)) + process1edb (&now, buf); + + /* finished */ + return (0); +} + +/* go through argv list processing arguments. + * exit(1) with usage message if find something unexpected. + */ +static void +crackArgs (int ac, char *av[]) +{ + while ((--ac > 0) && ((*++av)[0] == '-')) { + char *s; + for (s = av[0]+1; *s != '\0'; s++) { + switch (*s) { + case 'j': + if (ac < 2) + usage(); + myjd = *++av; + ac--; + break; + case 'r': + if (ac < 2) + usage(); + myresfile = *++av; + ac--; + break; + case 't': + wanttopo++; + break; + case 'v': + verbose++; + break; + default: + usage(); + } + } + } + + /* no strays */ + if (ac > 0) + usage(); +} + +/* print program args and exit(1) */ +static void +usage() +{ + fprintf (stderr, "Usage: %s [options]\n", myname); + fprintf (stderr, "Purpose: compute ephemerides from .edb on stdin\n"); + fprintf (stderr, "$Revision: 1.6 $\n"); + fprintf (stderr, "Options:\n"); + fprintf (stderr, " -j j : set time to JD j, else use current host\n"); + fprintf (stderr, " -r f : use XEphem resource file f, else round up the usual suspects\n"); + fprintf (stderr, " -t : generate topocentric, else geocentric\n"); + fprintf (stderr, " -v : verbose\n"); + + exit (1); +} + +/* initialize np. + * exit(1) if trouble + */ +static void +initNow (Now *np) +{ + char buf[1024]; + + /* fresh start */ + memset (np, 0, sizeof(*np)); + + /* get position info from an XEphem resource file */ + if (myresfile) + processResFile (np, myresfile); + else if (!findResFile(buf)) + processResFile (np, buf); + else { + fprintf (stderr, "Can not find an XEphem resource file\n"); + exit(1); + } + + /* get time from arg else OS */ + if (myjd) + mjd = atof (myjd) - MJD0; + else { + /* t is seconds since 00:00:00 1/1/1970 UTC on UNIX systems; + * mjd was 25567.5 then. + */ + time_t t; + time (&t); + mjd = 25567.5 + t/3600.0/24.0; + } + + /* set desired vantage */ + pref_set (PREF_EQUATORIAL, wanttopo ? PREF_TOPO : PREF_GEO); + + if (verbose) { + double y; + mjd_year (mjd, &y); + fprintf (stderr, " mjd %13.5f AD\n", y); + fprintf (stderr, " lat %13.5f °\n", raddeg(lat)); + fprintf (stderr, " lng %13.5f °\n", raddeg(lng)); + fprintf (stderr, " temp %13.5f °C\n", temp); + fprintf (stderr, "press %13.5f hPa\n", pressure); + fprintf (stderr, " elev %13.5f m\n", elev*ERAD); + fprintf (stderr, " tz %13.5f hrs behind UTC\n", tz); + if (epoch == EOD) + fprintf (stderr, "epoch %13s\n", "EOD"); + else { + mjd_year (epoch, &y); + fprintf (stderr, "epoch %13.5f AD\n", y); + } + fprintf (stderr, " equ %13s\n", wanttopo ? "Topo" : "Geo"); + } +} + +/* look for an XEphem resource file. + * do this manually so we aren't a full X program just for this. + * if find fill path and return 0, else return -1. + */ +static int +findResFile (char path[]) +{ + char *home = getenv ("HOME"); + char buf[1024]; + FILE *fp; + + /* try default */ + sprintf (path, "%s/XEphem/XEphem", home); + if ((fp = fopen (path, "r")) != NULL) { + fclose (fp); + return (0); + } + + /* try specified local */ + sprintf (buf, "%s/.xephemrc", home); + fp = fopen (buf, "r"); + if (fp) { + int found = findRes (fp, "XEphem.PrivateDir", path); + fclose (fp); + if (found == 0) + strcat (path, "/XEphem"); + return (found); + } + + /* try some common system places */ + sprintf (path, "/usr/X11R6/lib/X11/app-defaults/XEphem"); + if ((fp = fopen (path, "r")) != NULL) { + fclose (fp); + return (0); + } + sprintf (path, "/usr/lib/X11/app-defaults/XEphem"); + if ((fp = fopen (path, "r")) != NULL) { + fclose (fp); + return (0); + } + + /* sorry */ + return (-1); +} + +/* scan entire file fp for line of the form ": ". + * if find, fill valu[] sans leading white space and return 0 else -1. + */ +static int +findRes (FILE *fp, char *name, char valu[]) +{ + char buf[1024]; + + rewind (fp); + while (fgets (buf, sizeof(buf), fp)) { + char *colon = strchr(buf, ':'); + if (colon) { + *colon = '\0'; + if (!strcmp (name, buf)) { + while (*++colon == ' ') + continue; + colon[strlen(colon)-1] = '\0'; /* no \n */ + strcpy (valu, colon); + return (0); + } + } + } + + return (-1); +} + +/* read the given XEphem resource file and fill in np. + * exit(1) if insufficient enties. + */ +static void +processResFile (Now *np, char path[]) +{ + char *resn, resv[1024]; + FILE *fp; + + /* open resource file */ + + if (verbose) + fprintf (stderr, "Using resource file %s\n", path); + fp = fopen (path, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", path, strerror(errno)); + exit(1); + } + + /* extract required fields */ + + resn = "XEphem.Lat"; + if (findRes(fp, resn, resv) < 0) { + fprintf (stderr, "%s: need %s\n", path, resn); + exit(1); + } + lat = degrad(crackSexa(resv)); + + resn = "XEphem.Long"; + if (findRes(fp, resn, resv) < 0) { + fprintf (stderr, "%s: need %s\n", path, resn); + exit(1); + } + lng = -degrad(crackSexa(resv)); /* want +E */ + + resn = "XEphem.Elevation"; + if (findRes(fp, resn, resv) < 0) { + fprintf (stderr, "%s: need %s\n", path, resn); + exit(1); + } + elev = atof(resv)/ERAD; /* want earth radii */ + + /* extract optional fields */ + + resn = "XEphem.Pressure"; + if (findRes(fp, resn, resv) < 0) + strcpy (resv, "1010"); + pressure = atof(resv); + + resn = "XEphem.Temp"; + if (findRes(fp, resn, resv) < 0) + strcpy (resv, "10"); + temp = atof(resv); + + resn = "XEphem.TZone"; + if (findRes(fp, resn, resv) < 0) + strcpy (resv, "0"); + tz = crackSexa(resv); + + resn = "XEphem.Equinox"; + if (findRes(fp, resn, resv) < 0) + strcpy (resv, "2000"); + if (!strcmp (resv, "Of Date")) + epoch = EOD; + else + year_mjd (atof(resv), &epoch); + + fclose (fp); +} + +/* crack str of the form h:m:s to a double. + * no error checking. + */ +static double +crackSexa (char str[]) +{ + double h = 0, m = 0, s = 0; + char *neg = strchr (str, '-'); + + if (neg) + *neg = ' '; + sscanf (str, "%lf:%lf:%lf", &h, &m, &s); + h += m/60 + s/3600; + if (neg) + h = -h; + return (h); +} + +/* process 1 edb line according to np. + * skip if trouble. + */ +static void +process1edb (Now *np, char edbline[]) +{ + Obj o, *op = &o; + char buf[1024]; + + if (verbose) + fprintf (stderr, "Processing: %s\n", edbline); + + /* convert line to Obj */ + if (db_crack_line (edbline, op, NULL, 0, buf) < 0) { + fprintf (stderr, "%s: %s\n", edbline, buf); + return; + } + + /* compute circumstances @ np */ + if (obj_cir (np, op) < 0) { + fprintf (stderr, "%s: can not compute ephemeris\n", op->o_name); + return; + } + + /* print */ + txt_report (np, op, wanttopo); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: xedb.c,v $ $Date: 2003/11/05 01:47:59 $ $Revision: 1.6 $ $Name: $"}; diff --git a/GUI/xephem/tools/xephemdbd/._INSTALL b/GUI/xephem/tools/xephemdbd/._INSTALL new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._INSTALL differ diff --git a/GUI/xephem/tools/xephemdbd/._Makefile b/GUI/xephem/tools/xephemdbd/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._Makefile differ diff --git a/GUI/xephem/tools/xephemdbd/._README b/GUI/xephem/tools/xephemdbd/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._README differ diff --git a/GUI/xephem/tools/xephemdbd/._cgi-lib.pl b/GUI/xephem/tools/xephemdbd/._cgi-lib.pl new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._cgi-lib.pl differ diff --git a/GUI/xephem/tools/xephemdbd/._db.c b/GUI/xephem/tools/xephemdbd/._db.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._db.c differ diff --git a/GUI/xephem/tools/xephemdbd/._fsfetch.c b/GUI/xephem/tools/xephemdbd/._fsfetch.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._fsfetch.c differ diff --git a/GUI/xephem/tools/xephemdbd/._request.c b/GUI/xephem/tools/xephemdbd/._request.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._request.c differ diff --git a/GUI/xephem/tools/xephemdbd/._start-xephemdbd.pl b/GUI/xephem/tools/xephemdbd/._start-xephemdbd.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._start-xephemdbd.pl differ diff --git a/GUI/xephem/tools/xephemdbd/._stubs.c b/GUI/xephem/tools/xephemdbd/._stubs.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._stubs.c differ diff --git a/GUI/xephem/tools/xephemdbd/._xephemdbd.c b/GUI/xephem/tools/xephemdbd/._xephemdbd.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._xephemdbd.c differ diff --git a/GUI/xephem/tools/xephemdbd/._xephemdbd.html b/GUI/xephem/tools/xephemdbd/._xephemdbd.html new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._xephemdbd.html differ diff --git a/GUI/xephem/tools/xephemdbd/._xephemdbd.pl b/GUI/xephem/tools/xephemdbd/._xephemdbd.pl new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/GUI/xephem/tools/xephemdbd/._xephemdbd.pl differ diff --git a/GUI/xephem/tools/xephemdbd/INSTALL b/GUI/xephem/tools/xephemdbd/INSTALL new file mode 100644 index 0000000..2d0840d --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/INSTALL @@ -0,0 +1,53 @@ +xephemdbd, xephemdbd.html, start-xephemdbd.pl and xephemdbd.pl (with +cgi-lib.pl), together with the xephem *.edb, gsc and ppm.xe database files, +form a complete package for operating an astronomical database web service. +The service is useful enough just from the sample html form interface. But +providing the data via the web access mechanism reduces firewall issues and +provides access from several interface options without the need to invent and +support dedicated tcp/ip services. The data become available to any form of +web clients, such as java apps, perl scripts, etc. + +To install as a web service: + + 1) build xephemdbd (see README and Makefile). + + 2) edit start-xephemdbd.pl so the variable "dbdir" is an absolute path to + the directory containing your collection of *.edb, ppm.xe and gsc + catalogs. This is expected to be the same directory as XEphem refers to + as ShareDir/catalogs. + + 3) make a fresh directory named xephemdbd off your cgi-bin root + directory, for example /home/httpd/cgi-bin/xephemdbd. then copy + xephemdbd, start-xephemdbd.pl, xephemdbd.pl and cgi-bin.pl there. Make + sure permissions are such as to allow these files to be executed by + whatever uid your web server runs as, and also so the server can + create new files in the xephemdbd directory. Usually the easiest way + is to do the work as root, then chown -R to the effective uid of + the server, often `nobody'. The files xephemdbd.log and xephemdbd.trace + will accumulate information over time; take a look at them occasionally + and clean out as desired. + + 4) Edit xephemdbd.html so the "
/xephemdbd.html. + +Fill in the form, press Submit. xephemdbd.pl should start xephemdbd running. +This might take a little time depending on your hardware and the number of *.edb +files. Having a lot of memory helps; figure about 100 bytes per object. Once +xephemdbd gets going, it will fork a child process to service each request which +then exits when complete. Eventually you will get back the results on your +browser. Subsequent requests will go faster. The sample xephemdbd.html form +provided is just an example to of how a client accesses the GET service. The +same service can be accessed from any web client, such as XEphem once the +Field Stars setup form is set up to point to your site. + +Let me know how it goes, + +Elwood Downey +ecdowney@ClearSkyInstitute.com + +! For RCS Only -- Do Not Edit +! @(#) $RCSfile: INSTALL,v $ $Date: 2003/12/05 06:27:38 $ $Revision: 1.4 $ $Name: $ diff --git a/GUI/xephem/tools/xephemdbd/Makefile b/GUI/xephem/tools/xephemdbd/Makefile new file mode 100644 index 0000000..54fdaf2 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/Makefile @@ -0,0 +1,39 @@ +# Makefile for xephemdbd. +# run this after successfully making XEphem and its libs. +# Only tested on Linux. + +CC = gcc + +XED = ../.. +LAS = $(XED)/../../libastro +IPH = $(XED)/../../libip + +XI = /opt/local/include +XL = /opt/local/lib + +CLDFLAGS =-g +CFLAGS = $(CLDFLAGS) -Wall -ffast-math -I$(XED) -I$(LAS) -I$(IPH) -I$(XI) +LDFLAGS = $(CLDFLAGS) -L$(LAS) -L$(XL) +LIBS = -lastro -lm + +OBJS = xephemdbd.o \ + db.o \ + fsfetch.o \ + request.o \ + stubs.o \ + $(XED)/gsc.o \ + $(XED)/xe2.o + +xephemdbd: $(OBJS) + $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + +xephemdbd_static: $(OBJS) + $(CC) -static $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + +clobber: + touch x.o + rm -f *.o xephemdbd + + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2003/12/05 06:27:38 $ $Revision: 1.5 $ $Name: $ diff --git a/GUI/xephem/tools/xephemdbd/README b/GUI/xephem/tools/xephemdbd/README new file mode 100644 index 0000000..3b7ea02 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/README @@ -0,0 +1,174 @@ +XEphemdbd is a filter to find astronomical objects within a given field of +view. All files accessable to XEphem are searched. It can also be used as a +deamon to feed other processes, or from a cgi-bin script (see sample +xephemdbd.html and xephemdbd.pl). + +To build xephemdbd, first build XEphem then just type 'make' here. + +To install on a web server, see INSTALL. + +As a filter, xephemdbd reads lines of input from stdin until EOF. Each line +defines a center RA and Dec, field of view and observing circumstances. Each +request yields lines of output of all objects falling within the field on +stdout. The search may be restricted to various classes of objects, may be +topocentric or geocentric, astrometric or apparent. The output format may be +in .edb format or in a column-based text format. + +As a daemon, input may come from a file designated with the -i command +argument. This file is opened R/W in anticipation of it being a fifo to +prevent xephemdbd from seeing EOF as clients using the fifo come and go. +xephemdbd will exit if no more requests appear within 30 minutes (or a time +as set using -t). Xephemdbd reads all *.edb files into memory one time at +start-up, then forks a process to perform each search which includes a +separate output file specification. If the underlying system supports COW, +copy-on-write, this forking scheme allows the data files to only be read +into memory one time and never copied. + +Usage: xephemdbd [options]: + -c alternate catalogs directory; + default is /usr/local/xephem/catalogs + -d do not fork/exit as a daemon process + -f do not try to use field star catalogs + -i open file R/W for input; default is stdin + -l lock file; default is /tmp/xephemdbd.pid + -m dir of moon models; default is /usr/local/xephem/auxil + -t max idle minutes, 0=forever. default is 30 + -v verbose to stderr + + + +Each input request is one line of text, read from stdin (or where ever -i +is set). Args are separated by commas, formatted as follows: + +[>file,]outputmode,types,year,RA,Dec,FOV,Mag[,lat,long,elev] + + >file: + + Optional. If the first argument begins with '>', it names an output + file. xephemdbd will fork a child process to handle this request, + write the output to this file, and the child will exit. + + if this argument is missing, the output goes to stdout + + outputmode: sum of: + + 1 columnar text (see below), + else edb format + 2 topocentric (requires lat/long/elev), + else geocentric + 4 apparent@year (requires lat/long/elev), + else astrometric@2000 + 8 include header detail + + object types: sum of: + + 1 planets + 2 elliptical + 4 parabolic + 8 hyperbolic + 16 stars + 32 clusters + 64 galaxies + 128 other deep sky + 256 PPM/SAO/HD + 512 GSC + + year: + + the desired time for the ephemerides to be calculated, as decimal year. + + RA, Dec: + + center of the field of view, radians + + FOV: + + diameter of field of view, radians + + Mag: + + limiting magnitude, that is, only report object at least this bright + + lat, long, elev; + + latitude and longitude of observing site, in radians. longitude is + +eastwards. elev is the height abov sea level, in meters. These + + fields are only necessary if outputmode specified topocentric or + apparent place coordinates. + + +The .edb output format is for feeding XEphem. Therefore for non-fixed objects +the values are the orbital elements, not ephemerides. + +The .txt format is for feeding web pages or some other application. It is a +true ephemerides and is intended primarily to be easy to parse and be +*fairly* human readable. + + The format assignes fixed columns to each field as follows, depending on + the basic type. Beware that fields unique to a subset of objects can + overlap fields from a different type, so key off the Type field when + parsing. + + Name Col N Value Format + -------- --- - ----------- ------ + Name 1 13 Name left justified + Type 15 1 P type planet + Cns 17 3 Constellation 3-char IAU Abbreviation + RA 21 11 Right Ascension hh:mm:ss.ss + Dec 33 11 Declination (-)dd:mm:ss.s + Mag 45 6 Magnitude mmm.mm + Size 52 4 Size, arcseconds ssss + HeLong 57 9 Heliocentric Long ddd:mm:ss + HeLat 67 9 Heliocentric Lat (-)dd:mm:ss + EaDst 77 6 Earth distance, AU %6.3f + SnDst 84 6 Sun distance, AU %6.3f + Phs 91 3 % illumination percent 0..100 + *HA 95 11 Hour Angle (-)hh:mm:ss.s + *Alt 107 9 Altitude (-)dd:mm:ss + *Az 117 9 Azimuth, E of N ddd:mm:ss + *RiseTm 127 5 Rise time, UTC hh:mm + *RiseAz 133 6 Rise Azimuth ddd:mm + *TransTm 140 5 Transit Time hh:mm + *TransAlt 146 5 Transit Altitude dd:mm + *SetTm 152 5 Set Time hh:mm + *SetAz 158 6 Set Azimuth ddd:mm + + Name 1 13 Name left justified + Type 15 1 p type parabolic + [remaining same as P] + + Name 1 13 Name left justified + Type 15 1 e type elliptical + [remaining same as P] + + Name 1 13 Name left justified + Type 15 1 h type hyperbolic + [remaining same as P] + + Name 1 13 Name left justified + Type 15 1 f type fixed + Cns 17 3 Constellation 3-char IAU Abbreviation + RA 21 11 Right Ascension hh:mm:ss.ss + Dec 33 11 Declination (-)dd:mm:ss.s + Mag 45 6 Magnitude mmm.mm + Size 52 4 Size, arcseconds ssss + C 57 1 Classification code A + Sp 59 2 Spectral classification A2 + ^MnAx 86 4 Minor axis diam, asecs ssss + ^PA 91 3 Pstn angle, degs E of N 0..360 + *HA 95 11 Hour Angle (-)hh:mm:ss.s + *Alt 107 9 Altitude (-)dd:mm:ss + *Az 117 9 Azimuth, E of N ddd:mm:ss + *RiseTm 127 5 Rise time, UTC hh:mm + *RiseAz 133 6 Rise Azimuth ddd:mm + *TransTm 140 5 Transit Time hh:mm + *TransAlt 146 5 Transit Altitude dd:mm + *SetTm 152 5 Set Time hh:mm + *SetAz 158 6 Set Azimuth ddd:mm + +* Only if outputmode includes 2 or 4 (requires lat/long/elev with input) +^ Blank unless Class is G or H for galaxy. + +For RCS Only -- Do Not Edit +@(#) $RCSfile: README,v $ $Date: 2003/12/05 06:27:38 $ $Revision: 1.6 $ $Name: $ diff --git a/GUI/xephem/tools/xephemdbd/cgi-lib.pl b/GUI/xephem/tools/xephemdbd/cgi-lib.pl new file mode 100644 index 0000000..8c8e339 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/cgi-lib.pl @@ -0,0 +1,460 @@ +# Perl Routines to Manipulate CGI input +# S.E.Brenner@bioc.cam.ac.uk +# $Id: cgi-lib.pl,v 1.1 1998/03/12 02:30:12 ecdowney Exp $ +# +# Copyright (c) 1996 Steven E. Brenner +# Unpublished work. +# Permission granted to use and modify this library so long as the +# copyright above is maintained, modifications are documented, and +# credit is given for any use of the library. +# +# Thanks are due to many people for reporting bugs and suggestions +# especially Meng Weng Wong, Maki Watanabe, Bo Frese Rasmussen, +# Andrew Dalke, Mark-Jason Dominus, Dave Dittrich, Jason Mathews + +# For more information, see: +# http://www.bio.cam.ac.uk/cgi-lib/ + +$cgi_lib'version = sprintf("%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/); + + +# Parameters affecting cgi-lib behavior +# User-configurable parameters affecting file upload. +$cgi_lib'maxdata = 131072; # maximum bytes to accept via POST - 2^17 +$cgi_lib'writefiles = 0; # directory to which to write files, or + # 0 if files should not be written +$cgi_lib'filepre = "cgi-lib"; # Prefix of file names, in directory above + +# Do not change the following parameters unless you have special reasons +$cgi_lib'bufsize = 8192; # default buffer size when reading multipart +$cgi_lib'maxbound = 100; # maximum boundary length to be encounterd +$cgi_lib'headerout = 0; # indicates whether the header has been printed + + +# ReadParse +# Reads in GET or POST data, converts it to unescaped text, and puts +# key/value pairs in %in, using "\0" to separate multiple selections + +# Returns >0 if there was input, 0 if there was no input +# undef indicates some failure. + +# Now that cgi scripts can be put in the normal file space, it is useful +# to combine both the form and the script in one place. If no parameters +# are given (i.e., ReadParse returns FALSE), then a form could be output. + +# If a reference to a hash is given, then the data will be stored in that +# hash, but the data from $in and @in will become inaccessable. +# If a variable-glob (e.g., *cgi_input) is the first parameter to ReadParse, +# information is stored there, rather than in $in, @in, and %in. +# Second, third, and fourth parameters fill associative arrays analagous to +# %in with data relevant to file uploads. + +# If no method is given, the script will process both command-line arguments +# of the form: name=value and any text that is in $ENV{'QUERY_STRING'} +# This is intended to aid debugging and may be changed in future releases + +sub ReadParse { + local (*in) = shift if @_; # CGI input + local (*incfn, # Client's filename (may not be provided) + *inct, # Client's content-type (may not be provided) + *insfn) = @_; # Server's filename (for spooled files) + local ($len, $type, $meth, $errflag, $cmdflag, $perlwarn, $got); + + # Disable warnings as this code deliberately uses local and environment + # variables which are preset to undef (i.e., not explicitly initialized) + $perlwarn = $^W; + $^W = 0; + + binmode(STDIN); # we need these for DOS-based systems + binmode(STDOUT); # and they shouldn't hurt anything else + binmode(STDERR); + + # Get several useful env variables + $type = $ENV{'CONTENT_TYPE'}; + $len = $ENV{'CONTENT_LENGTH'}; + $meth = $ENV{'REQUEST_METHOD'}; + + if ($len > $cgi_lib'maxdata) { #' + &CgiDie("cgi-lib.pl: Request to receive too much data: $len bytes\n"); + } + + if (!defined $meth || $meth eq '' || $meth eq 'GET' || + $type eq 'application/x-www-form-urlencoded') { + local ($key, $val, $i); + + # Read in text + if (!defined $meth || $meth eq '') { + $in = $ENV{'QUERY_STRING'}; + $cmdflag = 1; # also use command-line options + } elsif($meth eq 'GET' || $meth eq 'HEAD') { + $in = $ENV{'QUERY_STRING'}; + } elsif ($meth eq 'POST') { + if (($got = read(STDIN, $in, $len) != $len)) + {$errflag="Short Read: wanted $len, got $got\n";}; + } else { + &CgiDie("cgi-lib.pl: Unknown request method: $meth\n"); + } + + @in = split(/[&;]/,$in); + push(@in, @ARGV) if $cmdflag; # add command-line parameters + + foreach $i (0 .. $#in) { + # Convert plus to space + $in[$i] =~ s/\+/ /g; + + # Split into key and value. + ($key, $val) = split(/=/,$in[$i],2); # splits on the first =. + + # Convert %XX from hex numbers to alphanumeric + $key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; + $val =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; + + # Associate key and value + $in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator + $in{$key} .= $val; + } + + } elsif ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) { + # for efficiency, compile multipart code only if needed +$errflag = !(eval <<'END_MULTIPART'); + + local ($buf, $boundary, $head, @heads, $cd, $ct, $fname, $ctype, $blen); + local ($bpos, $lpos, $left, $amt, $fn, $ser); + local ($bufsize, $maxbound, $writefiles) = + ($cgi_lib'bufsize, $cgi_lib'maxbound, $cgi_lib'writefiles); + + + # The following lines exist solely to eliminate spurious warning messages + $buf = ''; + + ($boundary) = $type =~ /boundary="([^"]+)"/; #"; # find boundary + ($boundary) = $type =~ /boundary=(\S+)/ unless $boundary; + &CgiDie ("Boundary not provided: probably a bug in your server") + unless $boundary; + $boundary = "--" . $boundary; + $blen = length ($boundary); + + if ($ENV{'REQUEST_METHOD'} ne 'POST') { + &CgiDie("Invalid request method for multipart/form-data: $meth\n"); + } + + if ($writefiles) { + local($me); + stat ($writefiles); + $writefiles = "/tmp" unless -d _ && -r _ && -w _; + # ($me) = $0 =~ m#([^/]*)$#; + $writefiles .= "/$cgi_lib'filepre"; + } + + # read in the data and split into parts: + # put headers in @in and data in %in + # General algorithm: + # There are two dividers: the border and the '\r\n\r\n' between + # header and body. Iterate between searching for these + # Retain a buffer of size(bufsize+maxbound); the latter part is + # to ensure that dividers don't get lost by wrapping between two bufs + # Look for a divider in the current batch. If not found, then + # save all of bufsize, move the maxbound extra buffer to the front of + # the buffer, and read in a new bufsize bytes. If a divider is found, + # save everything up to the divider. Then empty the buffer of everything + # up to the end of the divider. Refill buffer to bufsize+maxbound + # Note slightly odd organization. Code before BODY: really goes with + # code following HEAD:, but is put first to 'pre-fill' buffers. BODY: + # is placed before HEAD: because we first need to discard any 'preface,' + # which would be analagous to a body without a preceeding head. + + $left = $len; + PART: # find each part of the multi-part while reading data + while (1) { + die $@ if $errflag; + + $amt = ($left > $bufsize+$maxbound-length($buf) + ? $bufsize+$maxbound-length($buf): $left); + $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt); + die "Short Read: wanted $amt, got $got\n" if $errflag; + $left -= $amt; + + $in{$name} .= "\0" if defined $in{$name}; + $in{$name} .= $fn if $fn; + + $name=~/([-\w]+)/; # This allows $insfn{$name} to be untainted + if (defined $1) { + $insfn{$1} .= "\0" if defined $insfn{$1}; + $insfn{$1} .= $fn if $fn; + } + + BODY: + while (($bpos = index($buf, $boundary)) == -1) { + die $@ if $errflag; + if ($name) { # if no $name, then it's the prologue -- discard + if ($fn) { print FILE substr($buf, 0, $bufsize); } + else { $in{$name} .= substr($buf, 0, $bufsize); } + } + $buf = substr($buf, $bufsize); + $amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf); + $errflag = (($got = read(STDIN, $buf, $amt, $maxbound)) != $amt); + die "Short Read: wanted $amt, got $got\n" if $errflag; + $left -= $amt; + } + if (defined $name) { # if no $name, then it's the prologue -- discard + if ($fn) { print FILE substr($buf, 0, $bpos-2); } + else { $in {$name} .= substr($buf, 0, $bpos-2); } # kill last \r\n + } + close (FILE); + last PART if substr($buf, $bpos + $blen, 4) eq "--\r\n"; + substr($buf, 0, $bpos+$blen+2) = ''; + $amt = ($left > $bufsize+$maxbound-length($buf) + ? $bufsize+$maxbound-length($buf) : $left); + $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt); + die "Short Read: wanted $amt, got $got\n" if $errflag; + $left -= $amt; + + + undef $head; undef $fn; + HEAD: + while (($lpos = index($buf, "\r\n\r\n")) == -1) { + die $@ if $errflag; + $head .= substr($buf, 0, $bufsize); + $buf = substr($buf, $bufsize); + $amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf); + $errflag = (($got = read(STDIN, $buf, $amt, $maxbound)) != $amt); + die "Short Read: wanted $amt, got $got\n" if $errflag; + $left -= $amt; + } + $head .= substr($buf, 0, $lpos+2); + push (@in, $head); + @heads = split("\r\n", $head); + ($cd) = grep (/^\s*Content-Disposition:/i, @heads); + ($ct) = grep (/^\s*Content-Type:/i, @heads); + + ($name) = $cd =~ /\bname="([^"]+)"/i; #"; + ($name) = $cd =~ /\bname=([^\s:;]+)/i unless defined $name; + + ($fname) = $cd =~ /\bfilename="([^"]*)"/i; #"; # filename can be null-str + ($fname) = $cd =~ /\bfilename=([^\s:;]+)/i unless defined $fname; + $incfn{$name} .= (defined $in{$name} ? "\0" : "") . + (defined $fname ? $fname : ""); + + ($ctype) = $ct =~ /^\s*Content-type:\s*"([^"]+)"/i; #"; + ($ctype) = $ct =~ /^\s*Content-Type:\s*([^\s:;]+)/i unless defined $ctype; + $inct{$name} .= (defined $in{$name} ? "\0" : "") . $ctype; + + if ($writefiles && defined $fname) { + $ser++; + $fn = $writefiles . ".$$.$ser"; + open (FILE, ">$fn") || &CgiDie("Couldn't open $fn\n"); + binmode (FILE); # write files accurately + } + substr($buf, 0, $lpos+4) = ''; + undef $fname; + undef $ctype; + } + +1; +END_MULTIPART + if ($errflag) { + local ($errmsg, $value); + $errmsg = $@ || $errflag; + foreach $value (values %insfn) { + unlink(split("\0",$value)); + } + &CgiDie($errmsg); + } else { + # everything's ok. + } + } else { + &CgiDie("cgi-lib.pl: Unknown Content-type: $ENV{'CONTENT_TYPE'}\n"); + } + + # no-ops to avoid warnings + $insfn = $insfn; + $incfn = $incfn; + $inct = $inct; + + $^W = $perlwarn; + + return ($errflag ? undef : scalar(@in)); +} + + +# PrintHeader +# Returns the magic line which tells WWW that we're an HTML document + +sub PrintHeader { + return "Content-type: text/html\n\n"; +} + + +# HtmlTop +# Returns the of a document and the beginning of the body +# with the title and a body

header as specified by the parameter + +sub HtmlTop +{ + local ($title) = @_; + + return < + +$title + + +

$title

+END_OF_TEXT +} + + +# HtmlBot +# Returns the , codes for the bottom of every HTML page + +sub HtmlBot +{ + return "\n\n"; +} + + +# SplitParam +# Splits a multi-valued parameter into a list of the constituent parameters + +sub SplitParam +{ + local ($param) = @_; + local (@params) = split ("\0", $param); + return (wantarray ? @params : $params[0]); +} + + +# MethGet +# Return true if this cgi call was using the GET request, false otherwise + +sub MethGet { + return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "GET"); +} + + +# MethPost +# Return true if this cgi call was using the POST request, false otherwise + +sub MethPost { + return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "POST"); +} + + +# MyBaseUrl +# Returns the base URL to the script (i.e., no extra path or query string) +sub MyBaseUrl { + local ($ret, $perlwarn); + $perlwarn = $^W; $^W = 0; + $ret = 'http://' . $ENV{'SERVER_NAME'} . + ($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') . + $ENV{'SCRIPT_NAME'}; + $^W = $perlwarn; + return $ret; +} + + +# MyFullUrl +# Returns the full URL to the script (i.e., with extra path or query string) +sub MyFullUrl { + local ($ret, $perlwarn); + $perlwarn = $^W; $^W = 0; + $ret = 'http://' . $ENV{'SERVER_NAME'} . + ($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') . + $ENV{'SCRIPT_NAME'} . $ENV{'PATH_INFO'} . + (length ($ENV{'QUERY_STRING'}) ? "?$ENV{'QUERY_STRING'}" : ''); + $^W = $perlwarn; + return $ret; +} + + +# MyURL +# Returns the base URL to the script (i.e., no extra path or query string) +# This is obsolete and will be removed in later versions +sub MyURL { + return &MyBaseUrl; +} + + +# CgiError +# Prints out an error message which which containes appropriate headers, +# markup, etcetera. +# Parameters: +# If no parameters, gives a generic error message +# Otherwise, the first parameter will be the title and the rest will +# be given as different paragraphs of the body + +sub CgiError { + local (@msg) = @_; + local ($i,$name); + + if (!@msg) { + $name = &MyFullUrl; + @msg = ("Error: script $name encountered fatal error\n"); + }; + + if (!$cgi_lib'headerout) { #') + print &PrintHeader; + print "\n\n$msg[0]\n\n\n"; + } + print "

$msg[0]

\n"; + foreach $i (1 .. $#msg) { + print "

$msg[$i]

\n"; + } + + $cgi_lib'headerout++; +} + + +# CgiDie +# Identical to CgiError, but also quits with the passed error message. + +sub CgiDie { + local (@msg) = @_; + &CgiError (@msg); + die @msg; +} + + +# PrintVariables +# Nicely formats variables. Three calling options: +# A non-null associative array - prints the items in that array +# A type-glob - prints the items in the associated assoc array +# nothing - defaults to use %in +# Typical use: &PrintVariables() + +sub PrintVariables { + local (*in) = @_ if @_ == 1; + local (%in) = @_ if @_ > 1; + local ($out, $key, $output); + + $output = "\n
\n"; + foreach $key (sort keys(%in)) { + foreach (split("\0", $in{$key})) { + ($out = $_) =~ s/\n/
\n/g; + $output .= "
$key\n
:$out:
\n"; + } + } + $output .= "
\n"; + + return $output; +} + +# PrintEnv +# Nicely formats all environment variables and returns HTML string +sub PrintEnv { + &PrintVariables(*ENV); +} + + +# The following lines exist only to avoid warning messages +$cgi_lib'writefiles = $cgi_lib'writefiles; +$cgi_lib'bufsize = $cgi_lib'bufsize ; +$cgi_lib'maxbound = $cgi_lib'maxbound; +$cgi_lib'version = $cgi_lib'version; +$cgi_lib'filepre = $cgi_lib'filepre; + +1; #return true + + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: cgi-lib.pl,v $ $Date: 1998/03/12 02:30:12 $ $Revision: 1.1 $ $Name: $ diff --git a/GUI/xephem/tools/xephemdbd/db.c b/GUI/xephem/tools/xephemdbd/db.c new file mode 100644 index 0000000..6fea850 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/db.c @@ -0,0 +1,391 @@ +/* code to manage what the outside world sees as the db_ interface. + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include "xephem.h" + +static int db_objadd (Obj *newop); +static void db_init (void); + +#define MAXDBLINE 256 /* longest allowed db line */ + +/* This counter is incremented when we want to mark all the Obj derived entries + * as being out-of-date. This works because then each of the age's will be != + * db_age. This is to eliminate ever calling obj_cir() under the same + * circumstances for a given db object. + * N.B. For this to work, call db_update() not obj_cir(). + */ +static ObjAge_t db_age = 1; /* insure all objects are initially o-o-d */ + +/* the "database". + * one such struct per object type. the space for objects is malloced in + * seperate chunks of DBCHUNK to avoid needing big contiguous memory blocks. + * the space is never freed, the total is just reduced and can be reused. + * N.B. deleting by catalog depends on all objects from a given catalog being + * appended contiguously within their respective ObjType list. + * N.B. because the number is fixed and known, we use static storage for the + * NOBJ Objects for the PLANET type, not malloced storage; see db_init(). + */ +#define DBCHUNK 256 /* number we malloc more of at once; a power of two + * might help the compiler optimize the divides and + * modulo arithmetic. + */ +typedef struct { + char **dblist; /* malloced list of malloced DBCHUNKS arrays */ + int nobj; /* number of objects actually in use */ + int nmem; /* total number of objects for which we have room */ + int size; /* bytes per object */ +} DBMem; +static DBMem db[NOBJTYPES]; /* this is the head for each object */ + +/* return true if the database has been initialized */ +#define DBINITED (db[PLANET].dblist) /* anything setup by db_init()*/ + +/* macro that returns the address of an object given its type and index */ +#define OBJP(t,n) \ + ((Obj *)(db[t].dblist[(n)/DBCHUNK] + ((n)%DBCHUNK)*db[t].size)) + +#define DB_SIZE_ROUND(s) \ + (((s) + sizeof(double) - 1) & ~(sizeof(double) - 1)) + +static void db_free (DBMem *dmp); + +/* return number of objects in the database. + * this includes the NOBJ basic objects. + * N.B. this is expected to be inexpensive to call. + */ +int +db_n() +{ + DBMem *dmp; + int n; + + if (!DBINITED) + db_init(); + + for (n = 0, dmp = db; dmp < &db[NOBJTYPES]; dmp++) + n += dmp->nobj; + return (n); +} + +/* given one of the basic ids in astro.h or circum.h return pointer to its + * updated Obj in the database. + */ +Obj * +db_basic(id) +int id; +{ + Obj *op; + + if (!DBINITED) + db_init(); + + if (id < 0 || id >= db[PLANET].nobj) { + printf ("db_basic(): bad id: %d\n", id); + exit (1); + } + + op = OBJP(PLANET,id); + if (op->o_type != UNDEFOBJ) + db_update(op); + return (op); +} + +/* mark all db objects as out-of-date + */ +void +db_invalidate() +{ + if (!DBINITED) + db_init(); + + db_age++; /* ok if wraps */ +} + +/* initialize the given DBScan for a database scan. mask is a collection of + * *M masks for the desired types of objects. op/nop describe a list of + * ObjF which will also be scanned in addition to what is in the database. + * the idea is to call this once, then repeatedly call db_scan() to get all + * objects in the db of those types, then those is op (if any). + * return NULL when there are no more. + * N.B. nothing should be assumed as to the order these are returned. + */ +void +db_scaninit (sp, mask, op, nop) +DBScan *sp; +int mask; +ObjF *op; +int nop; +{ + if (!DBINITED) + db_init(); + + sp->t = UNDEFOBJ; + sp->n = 0; + sp->m = mask; + sp->op = op; + sp->nop = nop; +} + +/* fetch the next object. + * N.B. the s_ fields are *not* updated -- call db_update() when you need that. + */ +Obj * +db_scan (sp) +DBScan *sp; +{ + if (!DBINITED) + db_init(); + + /* find next object, splicing in ObjF list with FIXED */ + while (sp->t < NOBJTYPES) { + if ((1<t) & sp->m) { + if (sp->t == FIXED && sp->op) { + if (sp->n < sp->nop) + return ((Obj*)&sp->op[sp->n++]); + sp->op = NULL; /* flag to turn off op list */ + sp->n = 0; + } + /* return next for this type, skipping any UNDEF user objects */ + while (sp->n < db[sp->t].nobj) { + Obj *op = OBJP(sp->t, sp->n); /* MACRO 2nd arg twice*/ + sp->n++; + if (op->o_type != UNDEFOBJ) + return (op); + } + } + sp->t++; + sp->n = 0; + } + return (NULL); +} + +/* see to it that all the s_* fields in the given db object are up to date. + * always recompute the user defined objects because we don't know when + * they might have been changed. + * N.B. it is ok to call this even if op is not actually in the database + * although we guarantee an actual update occurs if it's not. + */ +void +db_update(op) +Obj *op; +{ + static char me[] = "db_update()"; + + if (!DBINITED) + db_init(); + + if (op->o_type == UNDEFOBJ) { + printf ("%s: called with UNDEFOBJ pointer\n", me); + exit (1); + } + if ((int)op->o_type >= NOBJTYPES) { + printf ("%s: called with bad pointer\n", me); + exit (1); + } + + if (op->o_age != db_age) { + if (obj_cir (mm_get_now(), op) < 0) + xe_msg (0, "%s: no longer valid", op->o_name); + op->o_age = db_age; + } +} + +/* delete all but the basic objects. + */ +void +db_del_all() +{ + DBMem *dmp; + + if (!DBINITED) + db_init(); + + /* free memory for each type */ + for (dmp = db; dmp < &db[NOBJTYPES]; dmp++) { + /* N.B. PLANET entries are fixed -- not malloced */ + if (dmp == &db[PLANET]) + continue; /* N.B. except planets! */ + db_free (dmp); + } +} + +/* read the given .edb or .tle file into memory. + * add a new catalog entry, sorted by catalog name, update GUI. + * stop gracefully if we run out of memory. + * keep operator informed. + * look in several places for file. + * if enabled and only one object in whole file, preload into an ObjXYZ. + */ +void +db_read (fn) +char *fn; +{ + char bufs[3][MAXDBLINE]; + char *brot, *b0 = bufs[0], *b1 = bufs[1], *b2 = bufs[2]; + int nobjs; + Obj o; + char *base; + FILE *fp; + long len; + int fok; + + if (!DBINITED) + db_init(); + + /* skip any leading blanks */ + while (*fn == ' ') + fn++; + + /* open the file. + * try looking for fn in several places. + */ + fp = fopenh (fn, "r"); + if (fp) + goto ok; + xe_msg (1, "%s:\n%s", fn, syserrstr()); + return; + + /* need pure base of fn */ + ok: + for (base = fn+strlen(fn); + base > fn && base[-1] != '/' && base[-1] != '\\'; --base) + continue; + + /* set up to run the progress meter based on file position */ + (void) fseek (fp, 0L, SEEK_END); + len = ftell (fp); + (void) fseek (fp, 0L, SEEK_SET); + + /* read each line from the file and add good ones to the db */ + nobjs = 0; + while (fgets (b2, MAXDBLINE, fp)) { + if (db_crack_line (b2,&o,0,0,0) > 0 || !db_tle (b0,b1,b2,&o)) { + if (db_objadd (&o) < 0) { + xe_msg (1, "No more memory"); + fclose(fp); + return; + } + nobjs++; + } + + /* rotate for possible TLE */ + brot = b0; + b0 = b1; + b1 = b2; + b2 = brot; + } + + /* clean up */ + fok = !ferror(fp); + fclose(fp); + + /* check for trouble */ + if (!fok) { + xe_msg (1, "%s:\n%s", base, syserrstr()); + return; + } + + /* record result */ + if (nobjs == 0) + xe_msg (1, "%s contains no data", base); + else + xe_msg (0, "%s: contained %d objects", base, nobjs); +} + +/* allocate *newop to the appropriate list, growing if necessary. + * return 0 if ok, -1 if no more memory. + * N.B we do *not* validate newop in any way. + */ +static int +db_objadd (newop) +Obj *newop; +{ + int t = newop->o_type; + DBMem *dmp = &db[t]; + Obj *op; + + /* allocate another chunk if this type can't hold another one */ + if (dmp->nmem <= dmp->nobj) { + int ndbl = dmp->nmem/DBCHUNK; + int newdblsz = (ndbl + 1) * sizeof(char *); + char **newdbl; + char *newchk; + + /* grow list of chunks */ + newdbl = dmp->dblist ? (char **) realloc (dmp->dblist, newdblsz) + : (char **) malloc (newdblsz); + if (!newdbl) + return (-1); + + /* add 1 chunk */ + newchk = malloc (dmp->size * DBCHUNK); + if (!newchk) { + free ((char *)newdbl); + return (-1); + } + newdbl[ndbl] = newchk; + + dmp->dblist = newdbl; + dmp->nmem += DBCHUNK; + } + + op = OBJP (t, dmp->nobj); + dmp->nobj++; + memcpy ((void *)op, (void *)newop, dmp->size); + + return (0); +} + +/* set up the basic database. + */ +static void +db_init() +{ + static Obj *plan_dblist[1]; + + /* init the object sizes. + * N.B. must do this before using the OBJP macro + */ + db[UNDEFOBJ].size = 0; + db[FIXED].size = DB_SIZE_ROUND(sizeof(ObjF)); + db[BINARYSTAR].size = DB_SIZE_ROUND(sizeof(ObjB)); + db[ELLIPTICAL].size = DB_SIZE_ROUND(sizeof(ObjE)); + db[HYPERBOLIC].size = DB_SIZE_ROUND(sizeof(ObjH)); + db[PARABOLIC].size = DB_SIZE_ROUND(sizeof(ObjP)); + db[EARTHSAT].size = DB_SIZE_ROUND(sizeof(ObjES)); + + /* init access to the built-in objects + */ + db[PLANET].nmem = db[PLANET].nobj = getBuiltInObjs (&plan_dblist[0]); + db[PLANET].dblist = (char **) plan_dblist; + db[PLANET].size = sizeof(Obj); /* *NOT* ObjPl */ +} + +/* free all the memory associated with the given DBMem */ +static void +db_free (dmp) +DBMem *dmp; +{ + if (dmp->dblist) { + int i; + for (i = 0; i < dmp->nmem/DBCHUNK; i++) + free (dmp->dblist[i]); + free ((char *)dmp->dblist); + dmp->dblist = NULL; + } + + dmp->nobj = 0; + dmp->nmem = 0; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: db.c,v $ $Date: 2004/06/21 02:48:15 $ $Revision: 1.5 $ $Name: $"}; diff --git a/GUI/xephem/tools/xephemdbd/fsfetch.c b/GUI/xephem/tools/xephemdbd/fsfetch.c new file mode 100644 index 0000000..a24e337 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/fsfetch.c @@ -0,0 +1,255 @@ +/* code to gather ppm and gsc stars in a region + */ + +#include +#include +#include +#include +typedef const void *qsort_arg; + +#include "xephem.h" + +#define DUPSEP degrad(4/3600.) /* dup if < this close, rads */ +#define DUPMAG (3.0) /* dup if mags differ < this much */ + +static int objfd_cmp (qsort_arg v1, qsort_arg v2); +static int fs_nodbdups (ObjF *fop, int nfop, double ra, double dec, + double fov); +static int scanchk (Obj *mop, Obj *op, double cdec); + +static char ppm_fn[1024]; +static char gsc_fn[1024]; + + +/* establish the file paths off basedir. + * return 0 if ok, else -1 and excuse in msg[] + */ +int +fs_setup (char basedir[], char msg[]) +{ + (void) sprintf (ppm_fn, "%s/ppm.xe2", basedir); + if (xe2chkfile (ppm_fn, msg) < 0) + return (-1); + (void) sprintf (gsc_fn, "%s/gsc", basedir); + if (GSCSetup (NULL, gsc_fn, msg) < 0) + return (-1); + return (0); +} + +/* call to fetch a set of ObjF from the field star sources. + * we eliminate any that seem to be dups of existing FIXED db objects. + * each o_flag in each resulting star is marked with FLDSTAR. + * return -1 if something looks busted else count. + * N.B. we only malloc *opp if we return > 0. + */ +int +fsfetch (np, want_ppm, want_gsc, ra, dec, fov, mag, opp) +Now *np; /* now */ +int want_ppm; /* whether to fetch ppm stars */ +int want_gsc; /* whether to fetch gsc stars */ +double ra, dec; /* at np->n_epoch */ +double fov; /* field of view, rads */ +double mag; /* limiting mag */ +ObjF **opp; /* we set *opp to a malloced list of ObjF */ +{ + ObjF *op = NULL; + int nop = 0; + int s = 0; + char msg[256]; + int i; + + /* the fetch tools all want and return J2000 values */ + if (epoch != J2000) + precess (epoch == EOD ? mjd : epoch, J2000, &ra, &dec); + + /* get up to one PM catalog */ + if (want_ppm) + nop = xe2fetch (ppm_fn, np, ra, dec, fov, mag, &op, msg); + + /* add the GSC, if desired */ + if (want_gsc) + nop = GSCFetch (ra, dec, fov, mag, &op, nop, msg); /* adds */ + + /* set the s_fields to np */ + for (i = 0; i < nop; i++) + obj_cir (np, (Obj *)&op[i]); + + /* squeeze out stars which duplicate each other or the main database. + */ + if (nop > 0) { + int newnop = fs_nodbdups (op, nop, ra, dec, fov); + if (newnop < nop) { + /* shrink down to just newnop entries now */ + nop = newnop; + if (nop > 0) + op = (ObjF *) realloc ((void *)op, nop*sizeof(ObjF)); + else { + free ((void *)op); /* *all* are dups! */ + op = NULL; + nop = 0; + } + } + } else { + /* still set the FLDSTAR flag on all entries */ + for (i = 0; i < nop; i++) + ((Obj *)(&op[i]))->o_flags |= FLDSTAR; + } + + /* pass back the result, if there's something left */ + if (nop > 0) { + *opp = op; + s = nop; + } else if (nop < 0) { + s = -1; + } + + return (s); +} + +/* qsort-style comparison of two ObjF's by dec */ +static int +objfd_cmp (v1, v2) +qsort_arg v1, v2; +{ + Obj *op1 = (Obj *)v1; + Obj *op2 = (Obj *)v2; + double d = op1->s_dec - op2->s_dec; + + if (d < 0.0) + return (-1); + if (d > 0.0) + return (1); + return (0); +} + +/* squeeze out all entries in fop[] which are located within DUPSEP and have a + * magnitude within DUPMAG of any FIXED object currently in the database. We + * also squeeze out any GSC or which meet those same criteria + * for any PM star. + * when finished, all remaining entries will be contiguous at the front of the + * fop array and each will have FLDSTAR set in o_flag. + * return the number of objects which remain. + * N.B. we assume FLDSTAR bit is initially off in each o_flag. + * N.B. we assume all fop[] have already been obj_cir()'d to mm_get_now(). + * N.B. we assume all entries in fop[] are within fov of ra/dec. + */ +static int +fs_nodbdups (fop, nfop, ra, dec, fov) +ObjF *fop; +int nfop; +double ra, dec, fov; +{ + double rov = fov/2; + Obj *op; + DBScan dbs; + int l, u, m; + Obj *mop; + double diff; + double cdec; + + /* sort fop by increasing dec */ + qsort ((void *)fop, nfop, sizeof(ObjF), objfd_cmp); + + /* mark all GSC stars with FLDSTAR flag which are close to any PM. + * don't compare GSC and PM stars with themselves. + */ + for (m = 0; m < nfop; m++) { + mop = (Obj *)&fop[m]; + + /* only check for GSC stars close to PM stars, not v.v. */ + if (mop->o_name[0] == 'G') + continue; + + /* scan each way from mop and mark close GSC stars */ + cdec = cos(mop->s_dec); + for (u = m+1; u < nfop; u++) { + op = (Obj *)&fop[u]; + if (fabs(mop->s_dec - op->s_dec) >= DUPSEP) + break; + if (op->o_name[0] == 'G' + && cdec*delra(mop->s_ra - op->s_ra) < DUPSEP + && fabs(get_mag(mop) - get_mag(op)) < DUPMAG) + op->o_flags |= FLDSTAR; + } + for (l = m-1; l >= 0; l--) { + op = (Obj *)&fop[l]; + if (fabs(mop->s_dec - op->s_dec) >= DUPSEP) + break; + if (op->o_name[0] == 'G' + && cdec*delra(mop->s_ra - op->s_ra) < DUPSEP + && fabs(get_mag(mop) - get_mag(op)) < DUPMAG) + op->o_flags |= FLDSTAR; + } + } + + /* scan all FIXED objects and mark all field stars with FLDSTAR + * which appears to be the same any one. + */ + for (db_scaninit(&dbs, FIXEDM, NULL, 0); (op = db_scan(&dbs)) != 0; ) { + /* update the s_ra/dec fields */ + db_update (op); + + /* skip ops outside the given field */ + cdec = cos(op->s_dec); + if (fabs(op->s_dec - dec) > rov || cdec*delra(op->s_ra - ra) > rov) + continue; + + /* binary search to find the fop closest to op */ + l = 0; + u = nfop - 1; + while (l <= u) { + m = (l+u)/2; + mop = (Obj *)(&fop[m]); + diff = mop->s_dec - op->s_dec; + if (diff < 0.0) + l = m+1; + else + u = m-1; + } + + /* scan each way from m and mark all that are dups with FLDSTAR. + * N.B. here, FLDSTAR marks *dups* (not the entries to keep) + * N.B. remember, u and l have crossed each other by now. + */ + for (; l < nfop; l++) + if (scanchk ((Obj *)(&fop[l]), op, cdec) < 0) + break; + for (; u >= 0; --u) + if (scanchk ((Obj *)(&fop[u]), op, cdec) < 0) + break; + } + + /* squeeze all entries marked with FLDSTAR to the front of fop[] + * and mark those that remain with FLDSTAR (yes, the bit now finally + * means what it says). + */ + for (u = l = 0; u < nfop; u++) { + mop = (Obj *)(&fop[u]); + if (!(mop->o_flags & FLDSTAR)) { + mop->o_flags |= FLDSTAR; /* now the mark means a *keeper* */ + if (u > l) + memcpy ((void *)(&fop[l]), (void *)mop, sizeof(ObjF)); + l++; + } + } + + return (l); +} + +/* if mop is further than DUPSEP from op in dec, return -1. + * then if mop is within DUPSEP in ra and within DUPMAG in mag too set FLDSTAR + * in mop->o_flags. + * return 0. + */ +static int +scanchk (mop, op, cdec) +Obj *mop, *op; +double cdec; +{ + if (fabs(mop->s_dec - op->s_dec) >= DUPSEP) + return (-1); + if (cdec*delra(mop->s_ra - op->s_ra) < DUPSEP + && fabs(get_mag(mop) - get_mag(op)) < DUPMAG) + mop->o_flags |= FLDSTAR; + return (0); +} diff --git a/GUI/xephem/tools/xephemdbd/request.c b/GUI/xephem/tools/xephemdbd/request.c new file mode 100644 index 0000000..ad20e99 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/request.c @@ -0,0 +1,431 @@ +/* code to handle one request. + */ + +#include +#include +#include +#include + +#include "xephem.h" + +extern int fsfetch (Now *np, int want_ppm, int want_gsc, double ra, + double dec, double fov, double mag, ObjF **opp); + +#define MAXFOV degrad(15) /* max allowed FOV, rads */ + +static void pr_info (Now *np, int omode, double ra, double dec, double rov); +static int typeOk (Obj *op, int types); +static void txt_report (Now *np, Obj *op, int topo); +static void txt_common (Now *np, Obj *op); +static void txt_fixed (Now *np, Obj *op); +static void txt_helio (Now *np, Obj *op); +static void txt_topo (Now *np, Obj *op); +static void txt_riset (Now *np, Obj *op); +static void edb_report (Now *np, Obj *op); + +/* output mode bits */ +#define COLUMNAR 1 +#define TOPOCENTRIC 2 +#define APPARENT 4 +#define HEADER 8 + +Now * +mm_get_now() +{ + static Now now; + return (&now); +} + +/* crack the request and write the result to stdout. + * return number of objects. + * all errors go to stderr. + * N.B. we assume ra/dec always come in as J2000 + */ +int +handle_request (char *req, int nofs) +{ + Now *np = mm_get_now(); + DBScan dbs; + ObjF *fstars; + int nfstars; + Obj *op; + int outputmode; + int types; + int mask; + double year; + double ra; + double dec; + double fov; + double mag; + double lt; + double lg; + double el; + double rov; + double cdec; + int nobjs; + int n; + + /* basic cracking */ + lt = lg = el = 0.0; + n = sscanf (req, "%d,%d,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", + &outputmode, &types, &year, &ra, &dec, &fov, &mag, <, &lg, &el); + if (n != 7 && n != 10) { + fprintf (stderr, "Bad format: %s\n", req); + return(0); + } + if ((outputmode & (TOPOCENTRIC|APPARENT)) && n != 10) { + fprintf (stderr, "Missing topo data: %s\n", req); + return(0); + } + if (fov > MAXFOV) + fov = MAXFOV; + rov = fov/2; + cdec = cos(dec); + + /* fill in now */ + year_mjd (year, &year); + mjd = year; + lat = lt; + lng = lg; + tz = floor(-raddeg(lg)/15); /* rough, but helps rise/set */ + temp = 10.0; + pressure = 1010.0; + elev = el/ERAD; + dip = 0.0; + epoch = (outputmode & APPARENT) ? EOD : J2000; + + /* start with header if desired */ + if (outputmode & HEADER) + pr_info (np, outputmode, ra, dec, rov); + + /* set equatorial preference */ + pref_set (PREF_EQUATORIAL, + (outputmode&TOPOCENTRIC) ? PREF_TOPO : PREF_GEO); + + /* make ra/dec match n_epoch */ + if (epoch == EOD) + as_ap (np, J2000, &ra, &dec); + + /* set up the scan mask according to desired types */ + mask = 0; + if (types & 1) mask |= PLANETM; + if (types & 2) mask |= ELLIPTICALM; + if (types & 4) mask |= PARABOLICM; + if (types & 8) mask |= HYPERBOLICM; + if (types & 240) mask |= FIXEDM | BINARYSTARM; /* refined in typeOk */ + if ((types & 768) && !nofs) { + /* expects ra/dec to be at np->n_epoch, always returns J2000 */ + nfstars = fsfetch (np, types&256, types&512, ra, dec, fov, + mag, &fstars); + } else { + fstars = NULL; + nfstars = 0; + } + + /* scan and print the good stuff */ + nobjs = 0; + for (db_scaninit(&dbs, mask, fstars, nfstars); + (op = db_scan (&dbs)) != NULL; ) { + + if (!typeOk (op, types)) + continue; + obj_cir (np, op); + if (get_mag(op) > mag) + continue;; + + if (cdec*delra(ra - op->s_ra) > rov || fabs(dec - op->s_dec) > rov) + continue; + + /* ok! */ + nobjs++; + if (outputmode & COLUMNAR) + txt_report (np, op, outputmode & (TOPOCENTRIC|APPARENT)); + else + edb_report (np, op); + } + + if (fstars) + free ((void *)fstars); + + return (nobjs); +} + +static void +pr_info (Now *np, int omode, double ra, double dec, double rov) +{ + char str1[32], str2[32]; + + fs_date (str1, PREF_YMD, mjd_day(mjd)); + fs_sexa (str2, mjd_hr(mjd), 2, 3600); + printf ("UTC Time: %s %s JD %13.5f\n", str1, str2, mjd+MJD0); + + if (omode & (TOPOCENTRIC|APPARENT)) { + fs_sexa (str1, raddeg(lat), 3, 3600); + fs_sexa (str2, raddeg(lng), 4, 3600); + printf ("Location: %sN %sE\n", str1, str2); + } + + fs_sexa (str1, radhr(ra), 2, 36000); + fs_sexa (str2, raddeg(dec), 3, 3600); + printf (" Field: %s %s @ J2000, radius %.3f degrees\n", str1, + str2, raddeg(rov)); + + printf (" Output: %s %s\n", + omode&TOPOCENTRIC ? "Topocentric" : "Geocentric", + omode&APPARENT ? "Apparent @ EOD" : "Astrometric @ J2000"); + + printf ("\n"); + printf ("Name T Cns RA Dec Mag Size HeLong HeLat EaDst SnDst Phs "); + if (omode & (TOPOCENTRIC|APPARENT)) + printf ("HA Alt Az RiseTmRiseAz TrnTm TrnAl SetTm SetAz"); + printf ("\n"); + printf (" f C Sp MnAx PA\n"); + printf ("\n"); +} + +/* return !0 if op is one of types, else 0 */ +static int +typeOk (Obj *op, int type) +{ + if (is_type(op, PLANETM)) + return (type & 1); + if (is_type(op, ELLIPTICALM)) + return (type & 2); + if (is_type(op, PARABOLICM)) + return (type & 4); + if (is_type(op, HYPERBOLICM)) + return (type & 8); + if (is_type(op, FIXEDM)) { + switch (op->f_class) { + case 'S': case 'B': case 'D': case 'M': case 'V': case 'T': + return (type & (16+256+512)); + case 'C': case 'O': case 'U': + return (type & 32); + case 'G': case 'H': case 'A': + return (type & 64); + default: + return (type & 128); + } + } + if (is_type(op, BINARYSTARM)) + return (type & 16); + + return (0); +} + +static void +txt_report (Now *np, Obj *op, int topo) +{ + txt_common (np, op); + if (op->o_type == FIXED) + txt_fixed (np, op); + else + txt_helio (np, op); + if (topo) + txt_topo (np, op); + printf ("\n"); +} + +static void +txt_common (Now *np, Obj *op) +{ + char buf[32]; + char *name; + int id; + + printf ("%-*s", MAXNM-1, op->o_name); + switch (op->o_type) { + case FIXED: printf (" f"); break; + case ELLIPTICAL: printf (" e"); break; + case HYPERBOLIC: printf (" h"); break; + case PARABOLIC: printf (" p"); break; + case PLANET: printf (" P"); break; + default: + fprintf (stderr, "Bogus type for %s: %d\n", op->o_name, op->o_type); + exit(1); + } + + id = cns_pick (op->s_ra, op->s_dec, epoch == EOD ? mjd : epoch); + name = cns_name (id); + printf (" %.3s", name); + + fs_sexa (buf, radhr(op->s_ra), 2, 360000); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_dec), 3, 36000); + printf (" %s", buf); + + printf (" %6.2f", get_mag (op)); + + printf (" %4.0f", op->s_size); +} + +static void +txt_fixed (Now *np, Obj *op) +{ + printf (" %c", op->f_class != '\0' ? op->f_class : ' '); + + if (op->f_spect[0] != '\0') + printf (" %c%c", op->f_spect[0], + op->f_spect[1] != '\0' ? op->f_spect[1] : ' '); + else + printf (" "); + + printf ("%25s", ""); /* gap to align HA same as for planets */ + + if (op->f_class == 'G' || op->f_class == 'H') + printf ("%4.0f %3.0f", (int)op->f_size*get_ratio(op), + raddeg(get_pa(op))); + else + printf (" "); +} + +static void +txt_helio (Now *np, Obj *op) +{ + char buf[32]; + + fs_sexa (buf, raddeg(op->s_hlong), 3, 3600); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_hlat), 3, 3600); + printf (" %s", buf); + + printf (" %6.3f", op->s_edist); + + printf (" %6.3f", op->s_sdist); + + printf (" %3.0f", op->s_phase); +} + +static void +txt_topo (Now *np, Obj *op) +{ + double raeod = op->s_ra; + double deceod = op->s_dec; + double tmp; + char buf[32]; + + if (epoch != EOD) { + /* need apparent */ + Obj o; + Now n; + + (void) memcpy ((void *)&o, (void *)op, sizeof(Obj)); + (void) memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + (void) obj_cir (&n, &o); + raeod = o.s_ra; + deceod = o.s_dec; + } + + now_lst (np, &tmp); + tmp = tmp - radhr(raeod); /* HA = LST - RA */ + if (tmp > 12) + tmp -= 24; + if (tmp < -12) + tmp += 24; + + fs_sexa (buf, tmp, 3, 36000); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_alt), 3, 3600); + printf (" %s", buf); + + fs_sexa (buf, raddeg(op->s_az), 3, 3600); + printf (" %s", buf); + + txt_riset (np, op); +} + +static void +txt_riset (Now *np, Obj *op) +{ + RiseSet rs; + double dis; + char buf[32]; + + /* semi-diameter displacement */ + dis = degrad(op->s_size/3600./2.0); + riset_cir (np, op, dis, &rs); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, "Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPl"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, "NvrUp"); + else if (rs.rs_flags & RS_NORISE) + (void) strcpy (buf, "NoRis"); + else + fs_sexa (buf, mjd_hr(rs.rs_risetm), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, " Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPol"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, " NvrUp"); + else if (rs.rs_flags & RS_NORISE) + (void) strcpy (buf, "NoRise"); + else + fs_sexa (buf, raddeg(rs.rs_riseaz), 3, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, "Error"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, "NvrUp"); + else if (rs.rs_flags & RS_NOTRANS) + (void) strcpy (buf, "NoTrn"); + else + fs_sexa (buf, mjd_hr(rs.rs_trantm), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, " Error"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, " NvrUp"); + else if (rs.rs_flags & RS_NOTRANS) + (void) strcpy (buf, "NoTran"); + else + fs_sexa (buf, raddeg(rs.rs_tranalt), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, "Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPl"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, "NvrUp"); + else if (rs.rs_flags & RS_NOSET) + (void) strcpy (buf, "NoSet"); + else + fs_sexa (buf, mjd_hr(rs.rs_settm), 2, 60); + printf (" %s", buf); + + if (rs.rs_flags & RS_ERROR) + (void) strcpy (buf, " Error"); + else if (rs.rs_flags & RS_CIRCUMPOLAR) + (void) strcpy (buf, "CirPol"); + else if (rs.rs_flags & RS_NEVERUP) + (void) strcpy (buf, " NvrUp"); + else if (rs.rs_flags & RS_NOSET) + (void) strcpy (buf, " NoSet"); + else + fs_sexa (buf, raddeg(rs.rs_setaz), 3, 60); + printf (" %s", buf); +} + +static void +edb_report (Now *np, Obj *op) +{ + char line[1024]; + + db_write_line (op, line); + printf ("%s\n", line); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: request.c,v $ $Date: 2006/12/24 20:08:26 $ $Revision: 1.8 $ $Name: $"}; diff --git a/GUI/xephem/tools/xephemdbd/start-xephemdbd.pl b/GUI/xephem/tools/xephemdbd/start-xephemdbd.pl new file mode 100755 index 0000000..53a9883 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/start-xephemdbd.pl @@ -0,0 +1,16 @@ +#!/usr/bin/perl +# start one instance of xephemdbd + +# full path to catalogs +$dbdir = '/usr/local/xephem/catalogs'; + +# define helpers +$lkfile = 'xephemdbd.pid'; +$logfn = "xephemdbd.log"; +$infifo = 'xephemdbd.in'; + +# create a fifo unique to this instance +system "mkfifo $infifo" if (! -e $infifo); + +# start xephemdbd with this fifo +system "./xephemdbd -vtlic 0 $lkfile $infifo $dbdir >> $logfn 2>&1"; diff --git a/GUI/xephem/tools/xephemdbd/stubs.c b/GUI/xephem/tools/xephemdbd/stubs.c new file mode 100644 index 0000000..30aa93f --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/stubs.c @@ -0,0 +1,64 @@ +/* stubs to support xephem references */ + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +void +pm_set (int p) +{ +} + + +void +xe_msg (int loud, char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); +} + +FILE * +fopenh (name, how) +char *name; +char *how; +{ + return (fopen (name, how)); +} + +int +existsh (name) +char *name; +{ + FILE *fp = fopen (name, "r"); + + if (fp) { + fclose (fp); + return (0); + } + return (-1); +} + +char * +expand_home (path) +char *path; +{ + return (strcpy (malloc (strlen(path)+1), path)); +} + + +char * +syserrstr () +{ + return (strerror(errno)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: stubs.c,v $ $Date: 2004/06/21 02:48:15 $ $Revision: 1.6 $ $Name: $"}; diff --git a/GUI/xephem/tools/xephemdbd/xephemdbd.c b/GUI/xephem/tools/xephemdbd/xephemdbd.c new file mode 100644 index 0000000..eb01b9d --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/xephemdbd.c @@ -0,0 +1,409 @@ +/* xephemdbd: read lines of FOV requests and produce object lists in .edb or + * plain text format. Requests which specify their own output file are each + * handled by a separate child process. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "xephem.h" + + +extern int handle_request (char *req, int nofs); +extern void db_read (char *fn); +extern int fs_setup (char catdir[], char msg[]); + +static void usage (void); +static void chklkfile (void); +static void mklkfile (void); +static void newstdin (void); +static void daemonize (void); +static void find_edb (void); +static void go(void); +static void new_process (char *req); +static void rmlkfile(void); + +static char catdir_def[] = "/usr/local/xephem/catalogs"; +static char moddir_def[] = "/usr/local/xephem/auxil"; +static char lkfile_def[] = "/tmp/xephemdbd.pid"; + +static int dflag; +static int vflag; +static int fflag; +static char *pname; +static char *catdir = catdir_def; +static char *moddir = moddir_def; +static char *lkfile = lkfile_def; +static char *ifile; + +/* we exit after this many minutes with no request. + * but we allow waiting forever for that first exciting one. + */ +#define IDLET_DEF 30 +static int idlet = IDLET_DEF; + +int +main (int ac, char *av[]) +{ + /* save name */ + pname = av[0]; + + /* scan args */ + while ((--ac > 0) && ((*++av)[0] == '-')) { + char *s; + for (s = av[0]+1; *s != '\0'; s++) + switch (*s) { + case 'c': + if (ac < 2) + usage(); + catdir = *++av; + ac--; + break; + case 'd': + dflag++; + break; + case 'f': + fflag++; + break; + case 'i': + if (ac < 2) + usage (); + ifile = *++av; + ac--; + break; + case 'l': + if (ac < 2) + usage (); + lkfile = *++av; + ac--; + break; + case 'm': + if (ac < 2) + usage (); + moddir = *++av; + ac--; + break; + case 't': + if (ac < 2) + usage (); + idlet = atoi(*++av); + ac--; + break; + case 'v': + vflag++; + break; + default: + usage(); + break; + } + } + if (ac > 0) + usage(); + + /* see if already running */ + chklkfile (); + + /* fork/exit unless d flag */ + if (!dflag) + daemonize(); + + /* make the lock file */ + mklkfile (); + + /* read in all edb files and check for ppm and gsc */ + find_edb(); + + /* reassign stdin if given -i */ + if (ifile) + newstdin (); + + /* start listening for commands on stdin until eof */ + go(); + + rmlkfile(); + return (0); +} + +static void +usage() +{ + FILE *fp = stderr; + + fprintf(fp,"%s [options]:\n", pname); + fprintf(fp,"Options:\n"); + fprintf(fp," -c alternate catalogs directory;\n"); + fprintf(fp," default is %s\n", catdir_def); + fprintf(fp," -d do not fork/exit as a daemon process\n"); + fprintf(fp," -f do not try to use field star catalogs\n"); + fprintf(fp," -i open file R/W for input; default is stdin\n"); + fprintf(fp," -l lock file; default is %s\n",lkfile_def); + fprintf(fp," -m dir of moon models; default is %s\n",moddir_def); + fprintf(fp," -t max idle minutes, 0=forever. default is %d\n", + IDLET_DEF); + fprintf(fp," -v verbose to stderr\n"); + fprintf(fp,"\n"); + fprintf(fp,"Input format:\n"); + fprintf(fp," [>file] optional input source, else stdin\n"); + fprintf(fp," outputmode 1:column; 2:topo; 4:apparent; 8:header\n"); + fprintf(fp," objtypes 15:sol sys; 16:br stars; 224:deep sky; 768:field\n"); + fprintf(fp," year time of ephemerides, decimal year\n"); + fprintf(fp," RA,Dec position of center, rads\n"); + fprintf(fp," FOV field of view, rads\n"); + fprintf(fp," Mag limiting magnitude\n"); + fprintf(fp," [lt,lg,el] location, if topocentric\n"); + + exit (1); +} + +/* if lkfile indicates another xephemdbd is running exit 0; + * if we can't tell but can't rule it out exit 1; + * else just return, which means we appear to be alone and it's ok to run. + */ +static void +chklkfile () +{ + char buf[1024]; + int n, fd; + + fd = open (lkfile, O_RDONLY); + if (fd < 0) { + if (errno == EACCES) { + fprintf (stderr, "%s: exists but can not read to check pid\n", + lkfile); + exit (1); + } + } else { + n = read (fd, buf, sizeof(buf)); + close (fd); + if (n < 0) { + fprintf (stderr, "%s: %s\n", lkfile, strerror(errno)); + exit (1); + } + buf[n] = '\0'; + n = atoi (buf); + if (kill (n, 0) == 0 || errno != ESRCH) { + if (vflag) + fprintf (stderr, "Already running\n"); + exit(0); + } + } +} + +/* make the lock file with our pid in it. + * exit if trouble. + */ +static void +mklkfile () +{ + char buf[1024]; + int n, fd; + + fd = open (lkfile, O_CREAT|O_WRONLY, 0644); + if (fd < 0) { + fprintf (stderr, "%s: %s\n", lkfile, strerror(errno)); + exit (1); + } + n = sprintf (buf, "%d\n", getpid()); + if (write (fd, buf, n) < 0) { + fprintf (stderr, "%s: %s\n", lkfile, strerror(errno)); + exit (1); + } + close (fd); +} + +static void +rmlkfile() +{ + remove (lkfile); +} + +/* reopen stdin as ifile. + * N.B. open R/W in case it is a fifo so we will never see EOF and can + * stand by forever waiting for requests. + */ +static void +newstdin () +{ + if (!freopen (ifile, "r+", stdin)) { + fprintf (stderr, "%s: %s\n", ifile, strerror(errno)); + rmlkfile(); + exit (1); + } +} + +/* make a new process to serve as the daemon. + * this only returns if we are the new daemon process. + */ +static void +daemonize() +{ + int i; + long n; + + switch (fork()) { + case -1: + perror ("fork"); + exit (1); + break; + case 0: + /* close all, but preserve out/err for messages */ + n = sysconf (_SC_OPEN_MAX); + for (i = 3; i < n; i++) + (void) close (i); + (void) setsid(); + break; + default: + exit (0); + } +} + +/* read in all edb we can find. + * also check for ppm and gsc files. + */ +static void +find_edb() +{ + struct dirent *dirent; + char buf[1024]; + DIR *dir; + + /* register moon model dir */ + setMoonDir (moddir); + + /* check for field star catalogs unless disabled */ + if (!fflag) { + if (vflag) + fprintf (stderr, "Checking GSC and PPM\n"); + if (fs_setup(catdir, buf) < 0) { + fprintf (stderr, "%s\n", buf); + rmlkfile(); + exit (1); + } + } + + /* open dir */ + dir = opendir (catdir); + if (!dir) { + fprintf (stderr, "%s: %s", catdir, strerror(errno)); + rmlkfile(); + exit (1); + } + + /* scan for and read each .edb catalog -- skip sao! */ + if (vflag) + fprintf (stderr, "Loading %s/*.edb (except sao.edb)\n", catdir); + while ((dirent = readdir (dir)) != NULL) { + char *name = dirent->d_name; + int l = strlen (name); + + if (l > 4 && !strcasecmp (name+(l-4), ".edb") + && strncasecmp (name, "sao", 3)) { + (void) sprintf (buf, "%s/%s", catdir, name); + if (vflag) + fprintf (stderr, " %s\n", name); + db_read (buf); + } + } + + if (vflag) + fprintf (stderr, "done\n"); + + (void) closedir (dir); +} + +static void +on_alarm (int signo) +{ + if (vflag) + fprintf (stderr, "Idle time-out\n"); + rmlkfile(); + exit (0); +} + +/* loop reading stdin until see eof, sending results to stdout. + * if nothing after idlet minutes, exit (but allow first read to wait forever). + */ +static void +go() +{ + char request[1024]; + + /* no zombies */ + signal (SIGCHLD, SIG_IGN); + + /* prepare for SIGALRM */ + signal (SIGALRM, on_alarm); + + if (vflag) + fprintf (stderr, "%6d: Master daemon pid\n", getpid()); + + while (fgets (request, sizeof(request), stdin) != NULL) { + alarm (0); /* cancel timeout */ + request[strlen(request)-1] = '\0'; /* strip \n */ + if (vflag) + fprintf (stderr, "Request: %s\n", request); + + if (request[0] == '>') + new_process (request); + else + (void) handle_request (request, fflag); + alarm (60*idlet); /* arm timeout */ + } +} + +/* handle the given request in its own process. + */ +static void +new_process (char *req) +{ + int pid; + + pid = fork(); + + if (pid == 0) { + /* child */ + char *fnp; + + /* after '>' and up to ',' is new file name */ + fnp = strchr (req++, ','); + if (!fnp) { + fprintf (stderr, "No file name\n"); + exit(1); + } + *fnp = '\0'; + + /* open req file as stdout, no buffering */ + if (vflag) + fprintf (stderr, "Opening %s\n", req); + if (!freopen (req, "w", stdout)) { + fprintf (stderr, "%s: %s", req, strerror(errno)); + exit(1); + } + setbuf (stdout, NULL); + + /* handle remainder of string as the request as usual */ + (void) handle_request (fnp + 1, fflag); + exit(0); + + } else if (pid < 0) { + + perror ("fork"); + rmlkfile(); + exit (1); + } + + /* parent just resumes */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: xephemdbd.c,v $ $Date: 2003/12/05 06:27:38 $ $Revision: 1.6 $ $Name: $"}; diff --git a/GUI/xephem/tools/xephemdbd/xephemdbd.html b/GUI/xephem/tools/xephemdbd/xephemdbd.html new file mode 100644 index 0000000..2bdae75 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/xephemdbd.html @@ -0,0 +1,122 @@ + + + + + + +XEphemdbd Sky Request + + + + + +

+XEphemdbd Sky Request
+

+ +
+ +

+Retrieve celestial objects in any region of the sky. Fill in the +form below then press Submit. + + + + + + +

+ + + + + +
Set basic processing options:
+ Columnar text format, or + + ephem.edb format + +
+ Geocentric, or + + Topocentric (Requires Lat/Long/Elev, below) + +
+ Astrometric precessed to 2000, or + + Apparent @ EOD (Requires Lat/Long/Elev, below) + +
+ +

+ + +
Select desired object types:
Major planets +
Minor planets and comets +
Bright stars +
Deep sky objects +
PPM, HD, SAO stars +
GSC stars +
+ +

+ + + + To indicate the current time, set the Date to + Now and leave the Time blank. + + +
Set Date and Time (UTC):
Date, M D Y +
Time, H M S +
+ +

+ + +
Set Center (J2000) and Size of field:
RA, H M S.S +
Dec, (-)D M S +
Size, degrees +
Limiting magnitude +
+ +

+ + +
Set Location, if requesting Topocentric or Apparent coordinates:
Latitude, (-)D M S, +North +
Longitude, (-)D M S, +East +
Elevation, m above sea level +
+ +

+ + + +

+
+ +

+© 2000 Elwood Charles Downey. All rights reserved. +

+For more astronomy software and services, see www.ClearSkyInstitute.com + +

+ + + + + + + + + + + + + + + + + + + diff --git a/GUI/xephem/tools/xephemdbd/xephemdbd.pl b/GUI/xephem/tools/xephemdbd/xephemdbd.pl new file mode 100755 index 0000000..ad06ac1 --- /dev/null +++ b/GUI/xephem/tools/xephemdbd/xephemdbd.pl @@ -0,0 +1,272 @@ +#!/usr/bin/perl +# xephemdbd.pl: digest a GET form request and process using xephemdbd. +# (c) 1998 Elwood Charles Downey. All rights reserved. +# 24 Feb 98: begin +# 11 Mar 98: final tweaks + +# generally no need to change anything from here on. +# ================================================== + +# set $trace to 1 to see steps in $tracefile +$tracefile = 'xephemdbd.trace'; +$trace = 1; + +# set to lock file location +$lkfile = 'xephemdbd.pid'; + +# set to common input fifo location +$infifo = 'xephemdbd.in'; + +# set to unique output fifo location +$outfifo = "xephemdbd.$$"; + +# set to xephemdbd log file +$logfn = "xephemdbd.log"; + +# certainly no need to change anything from here on. +# ================================================== + +# version number +$ver = 3; + +# get some handy utility functions. +use Time::Local; +require "cgi-lib.pl"; + +# autoflush output +&afon (STDOUT); + +# set up log file +open (LOG, ">>$logfn") || !print "

$logfn $!\n" || goto wrapup; +&afon (LOG); +printf LOG "xephemdbd.pl $$ started %s UTC from $ENV{'REMOTE_ADDR'}\n", gmtime().""; + +# set up trace file, if enabled +!$trace || open(TR,">>$tracefile") || !print "

$tracefile $!\n" || goto wrapup; +!$trace || &afon (TR); +!$trace || printf TR "xephemdbd.pl $$ started %s UTC from $ENV{'REMOTE_ADDR'}\n", gmtime().""; + +# Read in all the variables set by the form so we can access as $input{'name'} +&ReadParse(*input); + +# Print the HTML header once -- match the default xephem colors. +print "Content-type: text/html\n\n"; +print "\n"; +print "xephemdbd results\n"; +print "\n"; +print "

XEphemdbd Results

\n"; + +# check versions match. +$tmp = $input{'VERSION'}; +!$trace || print TR " checking version match"; +if ($tmp != $ver) { + print "

Wrong version: $ver vs. $tmp\n"; + goto wrapup; +} + +# make sure we have the fifo to the xephemdbd +!$trace || print TR " checking $infifo\n"; +if (! -p $infifo && system ("mkfifo $infifo")) { + print "

Can not create fifo $infifo: $!\n"; + goto wrapup; +} + +# start xephemdbd -- it knows to exit if already running. +!$trace || print TR " checking for xephemdbd\n"; +if (system ("./start-xephemdbd.pl")) { + print "

Can not start xephemdbd\n"; + goto wrapup; +} + +# start building up the command to xephemdbd in $ecmd in the following format: +# >file,outputmode,types,year,RA,Dec,FOV,Mag[,lat,long,elev] +!$trace || print TR " cracking FORM args\n"; +$ecmd = ">$outfifo"; + +# gather the basic options +$ops = 0; +$ops += 1 if $input{'FMT'} eq 'TXT'; +$ops += 2 if $input{'CENTRIC'} eq 'TOPO'; +$ops += 4 if $input{'PRECES'} eq 'APP'; +$ops += 8 if $input{'FMT'} eq 'TXT'; +$ecmd .= ",$ops"; + +# gather the desired object types +$obj = 0; +$obj += 1 if $input{'PL'}; +$obj += 14 if $input{'SS'}; +$obj += 16 if $input{'BS'}; +$obj += 224 if $input{'DS'}; +$obj += 256 if $input{'PP'}; +$obj += 512 if $input{'GS'}; +$ecmd .= ",$obj"; + +# gather the date and time as a decimal year +$tmp = $input{'DATE'}; +if (!$tmp) { + print "

Date is required\n"; + goto wrapup; +} +if ($tmp =~ /now/i) { + $tm = time(); +} else { + ($month, $day, $year) = split (/\D/, $tmp); + $tmp = $input{'TIME'}; + if (!$tmp) { + print "

Time is required\n"; + goto wrapup; + } + ($hr, $min, $sec) = split (/\D/, $tmp); + $tm = timegm ($sec, $min, $hr, $day, $month-1, $year-1900); +} +($sec, $min, $hr, $day, $month, $year) = gmtime ($tm); +$tmyr0 = timegm (0, 0, 0, 1, 0, $year); +$tmyr1 = timegm (0, 0, 0, 1, 0, $year+1); +$decyear = 1900 + $year + ($tm - $tmyr0)/($tmyr1 - $tmyr0); +$ecmd .= ",$decyear"; + +# get the RA in rads +$tmp = $input{'RA'}; +if (!$tmp) { + print "

RA is required\n"; + goto wrapup; +} +$tmp = &sextorads ($tmp)*15; +$ecmd .= ",$tmp"; + +# get Dec in rads +$tmp = $input{'DEC'}; +if (!$tmp) { + print "

DEC is required\n"; + goto wrapup; +} +$tmp = &sextorads ($tmp); +$ecmd .= ",$tmp"; + +# get FOV in rads, limit to 15 degrees +$tmp = $input{'FOV'}; +if (!$tmp) { + print "

FOV is required\n"; + goto wrapup; +} +if ($tmp > 15) { + print "

FOV is limited to 15 degrees\n"; + goto wrapup; +} +$tmp *= 0.0174533; +$ecmd .= ",$tmp"; + +# get limiting magnitude +$tmp = $input{'MAG'}; +if (!$tmp) { + print "

Limiting magnitude is required\n"; + goto wrapup; +} +$ecmd .= ",$tmp"; + +if ($ops & 6) { + # if computing topocentric or apparent position, need location too + $tmp = $input{'LAT'}; + if (!$tmp) { + print "

Latitude is required\n"; + goto wrapup; + } + $lat = &sextorads ($tmp); + $ecmd .= ",$lat"; + + $tmp = $input{'LONG'}; + if (!$tmp) { + print "

Longitude is required\n"; + goto wrapup; + } + $lng = &sextorads ($tmp); + $ecmd .= ",$lng"; + + $elev = $input{'ELEV'}; + $ecmd .= ",$elev"; +} + +!$trace || print TR " command = `$ecmd'\n"; + +# give command to xephemdbd to use outfifo and echo results +!$trace || print TR " creating $outfifo\n"; +if (!system ("mkfifo -m 0666 $outfifo")) { + !$trace || print TR " opening $infifo\n"; + if (open (EIN, ">>$infifo")) { + &afon(EIN); + !$trace || print TR " sending command\n"; + if (print EIN "$ecmd\n") { + !$trace || print TR " opening $outfifo\n"; + if (open (EOUT, "<$outfifo")) { + !$trace || print TR " reading $outfifo\n"; + # finally! copy result back to client + print "

\n";
+		while () {
+		    print "$_";
+		}
+		print "
\n"; + !$trace || print TR " closing $outfifo\n"; + close (EOUT); + } else { + !$trace || print TR " opening $outfifo failed\n"; + print "

Opening $outfifo failed: $!\n"; + goto wrapup; + } + } else { + !$trace || print TR " printing to $infifo failed\n"; + print "

Print to $infifo failed: $!\n"; + goto wrapup; + } + close (EIN); + } else { + !$trace || print TR " opening $infifo failed\n"; + print "

Opening $infifo failed: $!\n"; + goto wrapup; + } +} else { + !$trace || print TR " creating $outfifo failed\n"; + print "

Creating $outfifo failed: $!\n"; + goto wrapup; +} + +!$trace || print TR " finished successfully\n"; + +# final boilerplate +wrapup: +!$trace || print TR " wrapup\n"; + +# remove temp response fifo +!$trace || print TR " unlinking $outfifo\n"; +unlink ($outfifo); + +print <Use your browser's \"Go back\" feature to modify the same request. + + +

+© 1998 Elwood Charles Downey. All rights reserved. +

+For more astronomy software and services, see www.ClearSkyInstitute.com +ENDOFTEXT + +exit (0); + +# call with a sexigesimal string in @_[0] and return in rads +sub sextorads { + local ($v) = @_[0]; + $v =~ s/\+//; + $v =~ s/(-)//; + local ($sign) = $1 eq "-" ? -1 : 1; + local ($d, $m, $s) = split (/\D/, $v); + local ($a) = ($s/3600 + $m/60 + $d)*.0174533; + return ($a * $sign); +} + +# turn on autoflush for the filehandle passed in @_[0] +sub afon { + # "bizarre and obscure", Programming Perl, page 211 + select ((select(@_[0]), $| = 1)[0]); +} + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: xephemdbd.pl,v $ $Date: 2003/12/05 06:27:38 $ $Revision: 1.5 $ $Name: $ diff --git a/GUI/xephem/trailmenu.c b/GUI/xephem/trailmenu.c new file mode 100644 index 0000000..ea96cf0 --- /dev/null +++ b/GUI/xephem/trailmenu.c @@ -0,0 +1,1284 @@ + /* code to handle setting up and generating trails. + * + * to use: let user define a trail with tr_setup(). + * when user hits Ok we call your function and you build the actual trails + * and do the drawing with tr_draw(). + * + * ok to have several of these at once; they each maintain their own context. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define SMALL_MAG 1.0 /* small char mag */ +#define MEDIUM_MAG 1.4 /* medium char mag */ +#define LARGE_MAG 2.0 /* large char mag */ +#define HUGE_MAG 2.8 /* huge char mag */ +#define GAP 4 /* space from line to text, pixels */ + +static char fontxr[] = "trailsFont"; /* X resource naming font to use */ +static XFontStruct *tr_fs; /* font for trails */ + +/* context information per dialog. + * one of these gets malloced and saved in client callback. + */ +typedef struct { + Widget sh_w; /* overall shell */ + Widget nb_w, na_w; /* Scales setting n ticks before and after */ + Widget l_w[TRLR_N]; /* TBs for time stamp label rate options */ + Widget i_w[TRI_N]; /* TBs for interval options */ + Widget f_w[TRF_N]; /* TBs for format options */ + Widget r_w[TRR_N]; /* TBs for the rounding options */ + Widget s_w[TRS_N]; /* TBs for the size options */ + Widget o_w[TRO_N]; /* TBs for the orientation options */ + Widget custom_w; /* TextField for custom interval */ + TrCB cb; /* saved caller's callback function */ + XtPointer client; /* saved in tr_setup() and sent back in callbk*/ +} TrContext; + +/* make an array of these to create a row/col for the options */ +typedef struct { + char *name; /* widget instance name */ + char *label; /* widget's label */ + char *tip; /* tip text */ +} RCOption; + +/* N.B. must correspond to the entries in TrLR */ +static RCOption l_options[TRLR_N] = { + {"every1", "Every 1", "Label each tick mark"}, + {"every2", "Every 2", "Label every other tick mark"}, + {"every5", "Every 5", "Label every 5th tick mark"}, + {"every10", "Every 10", "Label every 10th tick mark"}, + {"fl", "First+Last","Label only the first and last tick mark"}, + {"ml", "Mid+Last", "Label only the middle and last tick mark"}, + {"fm", "First+Mid", "Label only the first and middle tick mark"}, + {"fml", "F+M+L", "Label only the first, middle and last tick mark"}, + {"none", "None", "Do not label any tick marks"}, +}; + +/* N.B. must correspond to the entries in TrInt */ +static RCOption i_options[TRI_N] = { + {"1min", "1 Minute", "One tick mark every minute"}, + {"5mins", "5 Minutes", "One tick mark every 5 minutes"}, + {"hour", "1 Hour", "One tick mark each hour"}, + {"day", "1 Day", "One tick mark each day"}, + {"week", "1 Week", "One tick mark each 7 days"}, + {"month", "1 Month", "One tick mark per month"}, + {"year", "1 Year", "One tick mark per year"}, + {"custom", "Custom", "One tick mark for each interval, below"}, +}; + +/* N.B. must correspond to the entries in TrFormat */ +static RCOption f_options[TRF_N] = { + {"time", "H:M:S","Label tick marks as Hour:Minutes:Seconds"}, + {"time", "H:M", "Label tick marks as Hour:Minutes"}, + {"date", "Date", "Label tick marks according to the current Date format Preference"}, +}; + +/* N.B. must correspond to the entries in TrRound */ +static RCOption r_options[TRR_N] = { + {"min", "Whole min", "Begin tick marks at the next whole minute"}, + {"day", "Whole day", "Begin tick marks at the next whole day"}, + {"whole", "Whole interval", "Begin tick marks at the next whole interval selection"}, + {"now", "Now", "Begin tick marks at the current Main menu time"}, +}; + +/* N.B. must correspond to the entries in TrOrient */ +static RCOption o_options[TRO_N] = { + {"up", "Up", "Labels written up from tick mark, tilt head left to read"}, + {"down", "Down", "Labels written down from tick mark, tilt head right to read"}, + {"left", "Left", "Labels written to left of tick mark"}, + {"right","Right","Labels written to right of tick mark"}, + {"above","Above","Labels centered above tick mark"}, + {"below","Below","Labels centered below tick mark"}, + {"upr", "Up 45","Labels at 45 degree angle up and right of tick mark"}, + {"downr","Down 45","Labels at 45 degree angle down and right of tick mark"}, + {"pathl","Path-Left","Labels would be to your left if you walked the trail"}, + {"pathr","Path-Right","Labels would be to your right if you walked the trail"}, +}; + +/* N.B. must correspond to the entries in TrSize */ +static RCOption s_options[TRS_N] = { + {"small", "Small", "Tick mark labels are small"}, + {"medium", "Medium", "Tick mark labels are medium size"}, + {"large", "Large", "Tick mark labels are large"}, + {"huge", "Huge", "Tick mark labels are huge"}, +}; + +static Widget create_form (char *title, char *hdr, TrState *init, TrCB cb, + XtPointer client); +static void make_rb (Widget rc_w, char *title, char *name, RCOption *op, + int nop, Widget savew[]); +static void customint_cb (Widget w, XtPointer client, XtPointer call); +static void ok_cb (Widget w, XtPointer client, XtPointer call); +static void apply_cb (Widget w, XtPointer client, XtPointer call); +static int do_trails (TrContext *tcp); +static void tStep (double *tp, TrState *statep, int dir); +static int get_options (TrContext *tcp, TrState *statep); +static void popdown_cb (Widget w, XtPointer client, XtPointer call); +static void destroy_cb (Widget w, XtPointer client, XtPointer call); +static void close_cb (Widget w, XtPointer client, XtPointer call); +static void help_cb (Widget w, XtPointer client, XtPointer call); +static void draw_stamp (Display *dsp, Drawable win, GC gc, TrTS *tp, + TrState *sp, int mark, int ticklen, int lx, int ly, int x, int y); + +/* put up a window to ask how to make a trail. OK will call (*cb)(). + * ok to have several at once -- they keep their own context in client callback. + */ +void +tr_setup( +char *title, /* window manager title */ +char *hdr, /* label across top */ +TrState *init, /* default setup */ +TrCB cb, /* callback when/if user hits Ok */ +XtPointer client) /* saved and passed back to (*cb)() */ +{ + static char me[] = "tr_setup()"; + Widget w; + + /* do some sanity checks */ + if (init->l >= TRLR_N) { + printf ("%s: Bogus label rate: %d\n", me, init->l); + abort(); + } + if (init->i >= TRI_N) { + printf ("%s: Bogus interval: %d\n", me, init->i); + abort(); + } + if (init->f >= TRF_N) { + printf ("%s: Bogus format: %d\n", me, init->f); + abort(); + } + if (init->r >= TRR_N) { + printf ("%s: Bogus round: %d\n", me, init->r); + abort(); + } + if (init->o >= TRO_N) { + printf ("%s: Bogus orientation: %d\n", me, init->o); + abort(); + } + if (init->s >= TRS_N) { + printf ("%s: Bogus size: %d\n", me, init->s); + abort(); + } + if (!cb) { + printf ("%s: No cb()\n", me); + abort(); + } + + /* ok, go for it */ + w = create_form (title, hdr, init, cb, client); + if (w) + XtPopup (w, XtGrabNone); +} + +/* called when basic resources change. + * rebuild and redraw. + * TODO: reclaim old stuff when called again. + */ +void +tr_newres() +{ + tr_fs = NULL; +} + +/* draw a line from [lx,ly] to [x,y]. iff tp, draw a tickmark (in parens if + * mark) of halfsize ticklen pixels and draw a time stamp according to tp and + * sp at [x,y]. iff ltp, do the same according to ltp and sp at [lx,ly]. + */ +void +tr_draw (Display *dsp, Drawable win, GC gc, int mark, int ticklen, TrTS *tp, +TrTS *ltp, TrState *sp, int lx, int ly, int x, int y) +{ + /* the base line for sure */ + XPSDrawLine (dsp, win, gc, lx, ly, x, y); + + /* if tp, draw tick mark and stamp at [x,y] */ + if (tp) { + XPSFillArc (dsp, win, gc, x-ticklen, y-ticklen, 2*ticklen+1, + 2*ticklen+1, 0, 360*64); + draw_stamp (dsp, win, gc, tp, sp, mark, ticklen, lx, ly, x, y); + } + + /* same for other end if ltp */ + if (ltp) { + XPSFillArc (dsp, win, gc, lx-ticklen, ly-ticklen, 2*ticklen+1, + 2*ticklen+1, 0, 360*64); + draw_stamp (dsp, win, gc, ltp, sp, mark, ticklen, + x-2*(x-lx), y-2*(y-ly), lx, ly); + } + +} + +/* set a trail state resource + */ +void +tr_setres (name, state) +char *name; +TrState *state; +{ + char val[50]; + + sprintf (val, "%d %d %d %d %d %d %d %d %.9f", + (int) state->l, (int) state->i, (int) state->f, + (int) state->r, (int) state->o, (int) state->s, + state->nticks, state->nbefore, state->customi); + setXRes (name, val); +} + +/* get a trail state from a resource + */ +void +tr_getres (name, state) +char *name; +TrState *state; +{ + char *val; + int l, i, f, r, o, s, n, b; + double c; + + val = getXRes (name, ""); + if (*val) { + if (sscanf (val, "%d %d %d %d %d %d %d %d %lf", + &l, &i, &f, &r, &o, &s, &n, &b, &c) == 9) { + state->l = (TrLR) l; + state->i = (TrInt) i; + state->f = (TrFormat) f; + state->r = (TrRound) r; + state->o = (TrOrient) o; + state->s = (TrSize) s; + state->nticks = n; + state->nbefore = b; + state->customi = c; + } else + xe_msg (0, "Trail state resource value of %s invalid.", name); + } +} + + +/* create a trail control window. + * A pointer to malloc'd TrContext is kept in client destroy callback, be sure + * to free this whenever the window is destroyed. + */ +static Widget +create_form (title, hdr, init, cb, client) +char *title; +char *hdr; +TrState *init; +TrCB cb; +XtPointer client; +{ + TrContext *tcp; + Widget ok_w, apply_w, close_w, help_w; + Widget sep_w, lbl_w, n_w; + Widget sh_w, mf_w, hdr_w, rc_w, f_w, fr_w; + Widget ofr_w, ifr_w, lrfr_w; + Widget w; + XmString str; + Arg args[20]; + int n; + + /* make a fresh trails context */ + tcp = (TrContext *) malloc (sizeof(TrContext)); + if (!tcp) { + xe_msg (1, "Can not malloc for trail setup context."); + return (NULL); + } + + /* save caller's callback function and client data */ + tcp->cb = cb; + tcp->client = client; + + /* make the shell */ + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNtitle, title); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Trail"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + sh_w = XtCreatePopupShell ("Trails", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (sh_w); + set_something (sh_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (sh_w, XmNpopupCallback, prompt_map_cb, NULL); + XtAddCallback (sh_w, XmNpopdownCallback, popdown_cb, NULL); + XtAddCallback (sh_w, XmNdestroyCallback, destroy_cb, (XtPointer)tcp); + + /* make the form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNfractionBase, 16); n++; + XtSetArg (args[n], XmNverticalSpacing, 8); n++; + mf_w = XmCreateForm (sh_w, "TF", args, n); + XtAddCallback (mf_w, XmNhelpCallback, help_cb, NULL); + XtManageChild (mf_w); + + /* save shell in tcp for later destruction */ + tcp->sh_w = sh_w; + + /* create the bottons along the bottom */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 1); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 3); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + ok_w = XmCreatePushButton (mf_w, "Ok", args, n); + XtAddCallback (ok_w, XmNactivateCallback, ok_cb, (XtPointer)tcp); + wtip (ok_w, "Use settings to create trail, close dialog"); + XtManageChild (ok_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 7); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + apply_w = XmCreatePushButton (mf_w, "Apply", args, n); + XtAddCallback (apply_w, XmNactivateCallback, apply_cb, (XtPointer)tcp); + wtip (apply_w, "Use settings to create trail, leave dialog up"); + XtManageChild (apply_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 9); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 11); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + close_w = XmCreatePushButton (mf_w, "Close", args, n); + XtAddCallback (close_w, XmNactivateCallback, close_cb, (XtPointer)tcp); + wtip (close_w, "Close dialog, make no trails"); + XtManageChild (close_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 13); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 15); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + help_w = XmCreatePushButton (mf_w, "Help", args, n); + XtAddCallback (help_w, XmNactivateCallback, help_cb, 0); + wtip (help_w, "More detailed information"); + XtManageChild (help_w); + + /* separator above bottom controls */ + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, help_w); n++; + sep_w = XmCreateSeparator (mf_w, "Sep", args, n); + XtManageChild (sep_w); + + /* labels and fields for before and after counts above separator */ + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 5); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + lbl_w = XmCreateLabel (mf_w, "LB", args, n); + set_xmstring (lbl_w, XmNlabelString, "Ticks before Start:"); + XtManageChild (lbl_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 9); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNmaximum, 256); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++; + n_w = XmCreateScale (mf_w, "TicksBefore", args, n); + wtip (n_w, "Set number of desired tick marks before Start time"); + XtManageChild (n_w); + + /* save counts-before widget id for later retrieval */ + tcp->nb_w = n_w; + + /* set default */ + XmScaleSetValue (n_w, init->nbefore); + + n = 0; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 11); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + lbl_w = XmCreateLabel (mf_w, "LA", args, n); + set_xmstring (lbl_w, XmNlabelString, "after:"); + XtManageChild (lbl_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 11); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 15); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, sep_w); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNmaximum, 256); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + n_w = XmCreateScale (mf_w, "TicksAfter", args, n); + wtip (n_w, "Set number of desired tick marks after Start time"); + XtManageChild (n_w); + + /* save counts-after widget id for later retrieval */ + tcp->na_w = n_w; + + /* set desired default tick mark count */ + XmScaleSetValue (n_w, init->nticks - init->nbefore); + + /* add tables at the top in their own form */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, n_w); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + f_w = XmCreateForm (mf_w, "TF1", args, n); + XtManageChild (f_w); + + /* make the header label across the top */ + str = XmStringCreateSimple (hdr); + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + hdr_w = XmCreateLabel (f_w, "Header", args, n); + XtManageChild (hdr_w); + XmStringFree (str); + + + /* make a radio box for orientations in a frame. */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, hdr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 2); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 33); n++; + ofr_w = XmCreateFrame (f_w, "OFR", args, n); + XtManageChild (ofr_w); + + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn (ofr_w, "ORC", args, n); + XtManageChild (rc_w); + + /* make rb for orientation options */ + make_rb(rc_w, "Orientation:", "Orientation", o_options, TRO_N, + tcp->o_w); + + /* set desired default orientation */ + XmToggleButtonSetState (tcp->o_w[init->o], True, True); + + + /* make a radio box for intervals in a frame. + * also put the custom TF and "whole" tb in the rc. + */ + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, hdr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 35); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 66); n++; + ifr_w = XmCreateFrame (f_w, "IFR", args, n); + XtManageChild (ifr_w); + + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn (ifr_w, "IRC", args, n); + XtManageChild (rc_w); + + /* make rb for interval options */ + make_rb (rc_w, "Interval:", "Interval", i_options, TRI_N, tcp->i_w); + + /* set desired default interval */ + XmToggleButtonSetState (tcp->i_w[init->i], True, True); + + /* add the TextField for entering custom interval, + * add callback to custom to let it change TextField sense, + * and init TF sens here now. + */ + n = 0; + XtSetArg (args[n], XmNcolumns, 10); n++; + w = XmCreateTextField (rc_w, "CustomInterval", args, n); + wtip (w, "Enter a custom tick mark interval, h:m:s d y"); + XtManageChild (w); + tcp->custom_w = w; + XtSetSensitive (w, XmToggleButtonGetState(tcp->i_w[TRI_CUSTOM])); + XtAddCallback (tcp->i_w[TRI_CUSTOM], XmNvalueChangedCallback, + customint_cb, tcp->custom_w); + if (init->i == TRI_CUSTOM) { + char buf[64]; + fs_sexa (buf, init->customi*24.0, 2, 3600); + XmTextFieldSetString (tcp->custom_w, buf); + } + + /* make a radio box for label rates in a frame. */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, hdr_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 68); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 98); n++; + lrfr_w = XmCreateFrame (f_w, "LRFR", args, n); + XtManageChild (lrfr_w); + + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn (lrfr_w, "LRRC", args, n); + XtManageChild (rc_w); + + /* make rb for label rates options */ + make_rb(rc_w, "Label:", "TimeStamp",l_options,TRLR_N,tcp->l_w); + + /* set desired default label rate */ + XmToggleButtonSetState (tcp->l_w[init->l], True, True); + + + + /* make a radio box for format options in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ofr_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNbottomPosition, 95); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 2); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 33); n++; + fr_w = XmCreateFrame (f_w, "FFR", args, n); + XtManageChild (fr_w); + + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn (fr_w, "FRC", args, n); + XtManageChild (rc_w); + + /* make rb for format options */ + make_rb (rc_w, "Format:", "Format", f_options, TRF_N, tcp->f_w); + + /* set desired default format */ + XmToggleButtonSetState (tcp->f_w[init->f], True, True); + + /* make a radio box for size options in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, ifr_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNbottomPosition, 95); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 35); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 66); n++; + fr_w = XmCreateFrame (f_w, "SFR", args, n); + XtManageChild (fr_w); + + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn (fr_w, "SRC", args, n); + XtManageChild (rc_w); + + /* make rb for size options */ + make_rb (rc_w, "Font:", "Size", s_options, TRS_N, tcp->s_w); + + /* set desired default rounding */ + XmToggleButtonSetState (tcp->s_w[init->s], True, True); + + + /* make a radio box for rounding options in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, lrfr_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNbottomPosition, 95); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 68); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 98); n++; + fr_w = XmCreateFrame (f_w, "RFR", args, n); + XtManageChild (fr_w); + + n = 0; + XtSetArg (args[n], XmNadjustMargin, False); n++; + rc_w = XmCreateRowColumn (fr_w, "RRC", args, n); + XtManageChild (rc_w); + + /* make rb for rounding options */ + make_rb (rc_w, "Start:", "Start", r_options, TRR_N, tcp->r_w); + + /* set desired default rounding */ + XmToggleButtonSetState (tcp->r_w[init->r], True, True); + + + return (sh_w); +} + +/* make a title and radio box inside rc. + * save each toggle button widget in savew[] array. + * would use frame's new title child but don't want to lock into 1.2 (yet) + */ +static void +make_rb (rc_w, title, name, op, nop, savew) +Widget rc_w; +char *title; +char *name; +RCOption *op; +int nop; +Widget savew[]; +{ + Widget l_w, rb_w, w; + XmString str; + Arg args[20]; + int n; + int i; + + str = XmStringCreateSimple (title); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + l_w = XmCreateLabel (rc_w, "L", args, n); + XtManageChild (l_w); + XmStringFree (str); + + n = 0; + rb_w = XmCreateRadioBox (rc_w, name, args, n); + XtManageChild (rb_w); + + for (i = 0; i < nop; i++, op++) { + str = XmStringCreateSimple (op->label); + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + w = XmCreateToggleButton (rb_w, op->name, args, n); + XtManageChild (w); + XmStringFree (str); + savew[i] = w; + if (op->tip) + wtip (w, op->tip); + } +} + +/* called when the Custom time interval TB changes. + * client is the TextField widget used to enter custom intervals. + */ +/* ARGSUSED */ +static void +customint_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtSetSensitive ((Widget)client, XmToggleButtonGetState(w)); +} + +/* called when the Ok is hit. + * client is pointer to TrContext. + * pull out desired trail parameters then call the user's callback function. + * close if went ok. + */ +/* ARGSUSED */ +static void +ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + TrContext *tcp; + + /* fetch the TrContext */ + tcp = (TrContext *)client; + + /* do the work, close unless err */ + if (do_trails (tcp) == 0) + XtPopdown (tcp->sh_w); +} + +/* called when the Apply is hit. + * client is pointer to TrContext. + * pull out desired trail parameters then call the user's callback function. + */ +/* ARGSUSED */ +static void +apply_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + TrContext *tcp; + + /* fetch the TrContext */ + tcp = (TrContext *)client; + + /* do the work, stay up regardless */ + (void) do_trails (tcp); +} + +/* perform the actual trails work. + * return 0 if ok, else -1. + */ +static int +do_trails (tcp) +TrContext *tcp; +{ + Now *np = mm_get_now(); + TrState state; + TrTS *ttp; + int dow; + int m, y; + double d; + double t; + int cbret; + int i; + + /* gather trail configuration */ + if (get_options(tcp, &state) < 0) + return (-1); + + /* get memory for list of time stamps */ + ttp = (TrTS *) malloc (state.nticks * sizeof(TrTS)); + if (!ttp) { + xe_msg (1, "Can not malloc tickmarks array."); + return (-1); + } + + /* set initial time, t, as UTC according to rounding options. + */ + t = mjd; + if (pref_get(PREF_ZONE) == PREF_LOCALTZ) + t -= tz/24.; /* rounding in local time */ + switch (state.r) { + case TRR_MIN: + t = ceil(t*24*60)/(24*60); + break; + + case TRR_DAY: + t = ceil(t-0.5)+0.5; + break; + + case TRR_INTER: + switch (state.i) { + case TRI_MIN: + t = ceil(t*24*60)/(24*60); + break; + case TRI_5MIN: + t = ceil(t*24*(60/5))/(24*(60/5)); + break; + case TRI_HOUR: + t = ceil(t*24)/24; + break; + case TRI_DAY: + t = ceil(t-0.5)+0.5; + break; + case TRI_WEEK: + t = mjd_day (t); + while (mjd_dow (t, &dow) == 0 && dow != 0) + t += 1; + break; + case TRI_MONTH: + mjd_cal (t, &m, &d, &y); + d = 1; + if (++m > 12) { + m = 1; + y += 1; + } + cal_mjd (m, d, y, &t); + break; + case TRI_YEAR: + mjd_cal (t, &m, &d, &y); + d = 1; + m = 1; + y++; + cal_mjd (m, d, y, &t); + break; + case TRI_CUSTOM: + /* round to next nearest multiple of custom */ + t = ceil(t*(1.0/state.customi))/(1.0/state.customi); + break; + default: + break; + } + break; + + case TRR_NONE: + /* stay with current moment */ + break; + + default: + printf ("Bogus trail rounding code: %d\n", state.r); + abort(); + } + if (pref_get(PREF_ZONE) == PREF_LOCALTZ) + t += tz/24.; /* back to UT */ + + /* move back by nbefore */ + for (i = 0; i < state.nbefore; i++) + tStep (&t, &state, -1); + + /* now fill in the time stamp times and formats */ + for (i = 0; i < state.nticks; i++) { + TrTS *tp = &ttp[i]; + + /* time is just t */ + tp->t = t; + + /* determine whether to stamp this tickmark */ + switch (state.l) { + case TRLR_1: + tp->lbl = 1; + break; + case TRLR_2: + tp->lbl = !(i % 2); + break; + case TRLR_5: + tp->lbl = !(i % 5); + break; + case TRLR_10: + tp->lbl = !(i % 10); + break; + case TRLR_FL: + tp->lbl = (i == 0 || i == state.nticks-1); + break; + case TRLR_FM: + tp->lbl = (i == 0 || i == state.nticks/2); + break; + case TRLR_ML: + tp->lbl = (i == state.nticks/2 || i == state.nticks-1); + break; + case TRLR_FML: + tp->lbl = (i==0 || i==state.nticks/2 || i==state.nticks-1); + break; + case TRLR_NONE: + tp->lbl = 0; + break; + default: + printf ("Bogus trail label rate code=%d\n", state.l); + abort(); + } + + /* advance time */ + tStep (&t, &state, 1); + } + + /* now call the users callback */ + cbret = (*tcp->cb) (ttp, &state, tcp->client); + + /* clean up what we malloced except + * TrContext isn't destroyed until user closes dialog. + */ + free ((char *)ttp); + + /* ok */ + return (cbret); +} + +/* advance t forward or backward based on state */ +static void +tStep (tp, statep, sign) +double *tp; +TrState *statep; +int sign; +{ + int m, y; + double d; + + if (abs(sign) != 1) { + printf ("tStep called with %d\n", sign); + abort(); + } + + switch (statep->i) { + case TRI_CUSTOM: *tp += sign*statep->customi; break; + case TRI_MIN: *tp += sign*1./(24.*60.); break; + case TRI_5MIN: *tp += sign*5./(24.*60.); break; + case TRI_HOUR: *tp += sign*1./24.; break; + case TRI_DAY: *tp += sign*1.0; break; + case TRI_WEEK: *tp += sign*7.0; break; + case TRI_MONTH: + mjd_cal (*tp, &m, &d, &y); + m += sign; + if (m > 12) { + m = 1; + y += 1; + } else if (m < 1) { + m = 12; + y -= 1; + } + cal_mjd (m, d, y, tp); + break; + case TRI_YEAR: + mjd_cal (*tp, &m, &d, &y); + y += sign; + cal_mjd (m, d, y, tp); + break; + default: + printf ("Bogus interval: %d\n", statep->i); + abort(); + } +} + +/* pull the options from tcp. + * return 0 if ok, else xe_msg() wny not and return -1. + */ +static int +get_options(tcp, statep) +TrContext *tcp; +TrState *statep; +{ + int i, j; + + /* find label rate */ + for (i = 0; i < TRLR_N; i++) { + if (XmToggleButtonGetState(tcp->l_w[i])) + break; + } + if (i == TRLR_N) { + xe_msg (1, "Please select a tick mark label rate."); + return(-1); + } + statep->l = (TrLR)i; + + + /* find interval -- might be custom */ + for (i = 0; i < TRI_N; i++) { + if (XmToggleButtonGetState(tcp->i_w[i])) + break; + } + if (i == TRI_N) { + xe_msg (1, "Please select a tick mark interval."); + return(-1); + } + statep->i = (TrInt)i; + if (statep->i == TRI_CUSTOM) { + char *str; + double days; + + str = XmTextFieldGetString (tcp->custom_w); + if (strchr (str, 'y')) + days = strtod (str, NULL)*365.0; + else if (strchr (str, 'd')) + days = strtod (str, NULL); + else if (f_scansexa (str, &days) == 0) + days /= 24.0; + else { + xe_msg (1, "Format must be one of h:m:s d y"); + XtFree (str); + return (-1); + } + XtFree (str); + + if (days <= 0.0) { + xe_msg (1, "Please specify a positive custom interval."); + return(-1); + } + + statep->customi = days; + } + + + /* find rounding mode */ + for (i = 0; i < TRR_N; i++) { + if (XmToggleButtonGetState(tcp->r_w[i])) + break; + } + if (i == TRR_N) { + xe_msg (1, "Please select a rounding mode."); + return(-1); + } + statep->r = (TrRound)i; + + + /* find format mode */ + for (i = 0; i < TRF_N; i++) { + if (XmToggleButtonGetState(tcp->f_w[i])) + break; + } + if (i == TRF_N) { + xe_msg (1, "Please select a format mode."); + return(-1); + } + statep->f = (TrFormat)i; + + /* find size */ + for (i = 0; i < TRS_N; i++) { + if (XmToggleButtonGetState(tcp->s_w[i])) + break; + } + if (i == TRS_N) { + xe_msg (1, "Please select a size."); + return(-1); + } + statep->s = (TrSize)i; + + /* find orientation */ + for (i = 0; i < TRO_N; i++) { + if (XmToggleButtonGetState(tcp->o_w[i])) + break; + } + if (i == TRO_N) { + xe_msg (1, "Please select an orientation."); + return(-1); + } + statep->o = (TrOrient)i; + + + /* get total number of tickmarks */ + XmScaleGetValue (tcp->nb_w, &i); + XmScaleGetValue (tcp->na_w, &j); + if (i + j < 2) { + xe_msg (1, "Please specify at least 2 tick marks."); + return(-1); + } + statep->nbefore = i; + statep->nticks = i+j; + + /* ok */ + return (0); +} + +/* called when unmapped */ +/* ARGSUSED */ +static void +popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* N.B. don't free the userData here -- wait for destroy. + * turns out unmap callbacks run before ok_cb! + */ + XtDestroyWidget (w); +} + +/* called when destroyed, client is TrContext to be free'd */ +/* ARGSUSED */ +static void +destroy_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + free ((char *)client); +} + +/* called when the Close button is hit. + * client is a TrContext. + */ +/* ARGSUSED */ +static void +close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + TrContext *tcp; + + /* fetch the TrContext */ + tcp = (TrContext *)client; + + XtPopdown (tcp->sh_w); +} + +/* called when the Help button is hit */ +/* ARGSUSED */ +static void +help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ("Trails", NULL, 0); +} + +/* draw a timestamp (in parens if mark) for the given trail object at x, y. + * direction, size and content depend on tp, sp and the line endpoints. + */ +static void +draw_stamp (dsp, win, gc, tp, sp, mark, ticklen, lx, ly, x, y) +Display *dsp; +Drawable win; +GC gc; +TrTS *tp; +TrState *sp; +int mark; +int ticklen; +int lx, ly; +int x, y; +{ + char buf[64], *bp; + double mag = 1.0; + double a = 0, ca, sa; + int align = 0; + int gap = GAP + ticklen; + Now *np = mm_get_now(); + double t = tp->t; + + /* do nothing if no labeling at all or none for this stamp */ + if (sp->l == TRLR_NONE || !tp->lbl) + return; + + /* make sure the fonts are ready */ + if (!tr_fs) + tr_fs = getXResFont (fontxr); + + /* establish character size */ + switch (sp->s) { + case TRS_SMALL: mag = SMALL_MAG; break; + case TRS_MEDIUM: mag = MEDIUM_MAG; break; + case TRS_LARGE: mag = LARGE_MAG; break; + case TRS_HUGE: mag = HUGE_MAG; break; + case TRS_N: break; + } + + /* fill buf with appropriate message and trim leading blanks */ + if (pref_get(PREF_ZONE) == PREF_LOCALTZ) t -= tz/24.; + switch (sp->f) { + case TRF_HMS: + fs_time (buf, mjd_hr(t)); + break; + case TRF_TIME: + fs_mtime (buf, mjd_hr(t)); + break; + case TRF_DATE: + fs_date (buf, pref_get(PREF_DATE_FORMAT), t); + break; + case TRF_N: + buf[0] = '\0'; + break; + } + for (bp = buf; *bp == ' '; bp++) + continue; + if (mark) { + int l = strlen(bp); + memmove (bp+1, bp, l); + bp[0] = '['; + bp[++l] = ']'; + bp[++l] = '\0'; + } + + /* set up angle and alignment to rotate and translate into position. + * one rule is to never ask the user to look upside down even a little. + */ + switch (sp->o) { + case TRO_UP: + y -= gap; align = MLEFT; a = 90; + break; + + case TRO_DOWN: + y += gap; align = MLEFT; a = -90; + break; + + case TRO_LEFT: + x -= gap; align = MRIGHT; a = 0; + break; + + case TRO_RIGHT: + x += gap; align = MLEFT; a = 0; + break; + + case TRO_ABOVE: + y -= gap; align = BCENTRE; a = 0; + break; + + case TRO_BELOW: + y += gap; align = TCENTRE; a = 0; + break; + + case TRO_UPR: + x += gap; y -= gap; align = MLEFT; a = 45; + break; + + case TRO_DOWNR: + x += gap; y += gap; align = MLEFT; a = -45; + break; + + case TRO_PATHL: + if (x-lx == 0) + a = ly-y < 0 ? -PI/2 : PI/2; + else + a = atan2((double)(ly-y),(double)(x-lx)); /* -PI .. +PI */ + a += PI/2; + ca = cos(a); + sa = sin(a); + x += (int)(ca*gap); + y -= (int)(sa*gap); + if (a > PI/2) { + a -= PI; + align = MRIGHT; + } else if (a < -PI/2) { + a += PI; + align = MRIGHT; + } else { + align = MLEFT; + } + a = raddeg(a); + break; + + case TRO_PATHR: + if (x-lx == 0) + a = ly-y < 0 ? -PI/2 : PI/2; + else + a = atan2((double)(ly-y),(double)(x-lx)); /* -PI .. +PI */ + a -= PI/2; + ca = cos(a); + sa = sin(a); + x += (int)(ca*gap); + y -= (int)(sa*gap); + if (a > PI/2) { + a -= PI; + align = MRIGHT; + } else if (a < -PI/2) { + a += PI; + align = MRIGHT; + } else { + align = MLEFT; + } + a = raddeg(a); + break; + + case TRO_N: + break; + } + + XPSRotDrawAlignedString (dsp, tr_fs, a, mag, win, gc, x, y, bp, align); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: trailmenu.c,v $ $Date: 2008/03/25 01:16:16 $ $Revision: 1.29 $ $Name: $"}; diff --git a/GUI/xephem/trails.h b/GUI/xephem/trails.h new file mode 100644 index 0000000..b53b985 --- /dev/null +++ b/GUI/xephem/trails.h @@ -0,0 +1,119 @@ +#ifndef _TRAILS_H +#define _TRAILS_H + +/* include file for users of the trail module. + */ + +/* codes to indicate tickmark label rate */ +typedef enum { + TRLR_1, /* every label */ + TRLR_2, /* every 2nd label */ + TRLR_5, /* every 5th label */ + TRLR_10, /* every 10th label */ + TRLR_FL, /* first and last */ + TRLR_ML, /* middle and last */ + TRLR_FM, /* first and middle */ + TRLR_FML, /* first middle and last */ + TRLR_NONE, /* none */ + TRLR_N +} TrLR; + +/* codes to indicate tickmark intervals */ +typedef enum { + TRI_MIN, /* one minute */ + TRI_5MIN, /* 5 minutes */ + TRI_HOUR, /* one hour */ + TRI_DAY, /* one day */ + TRI_WEEK, /* one week */ + TRI_MONTH, /* one month */ + TRI_YEAR, /* one year */ + TRI_CUSTOM, /* custom -- enter any h:m you want */ + TRI_N +} TrInt; + +/* code to indicate format of label */ +typedef enum { + TRF_HMS, /* stamp with hh:mm:ss */ + TRF_TIME, /* stamp with hh:mm */ + TRF_DATE, /* stamp with date (in current preference format) */ + TRF_N +} TrFormat; + +/* code to indicate initial time-step rounding */ +typedef enum { + TRR_MIN, /* round up to next whole minute */ + TRR_DAY, /* round up to next whole day */ + TRR_INTER, /* round up to next whole interval */ + TRR_NONE, /* no rounding -- use current time */ + TRR_N +} TrRound; + +/* code to indicate label orientation */ +typedef enum { + TRO_UP, /* upwards */ + TRO_DOWN, /* downwards */ + TRO_LEFT, /* leftwards */ + TRO_RIGHT, /* rightwards */ + TRO_ABOVE, /* centered above */ + TRO_BELOW, /* centered below */ + TRO_UPR, /* upwards and to the right */ + TRO_DOWNR, /* downwards and to the right */ + TRO_PATHL, /* leftwards of current path direction */ + TRO_PATHR, /* rightwards of current path direction */ + TRO_N +} TrOrient; + +/* code to indicate the desired label size. + * see *_SIZE #defines in trails.c for actual pixel sizes. + */ +typedef enum { + TRS_SMALL, /* small label */ + TRS_MEDIUM, /* medium label */ + TRS_LARGE, /* large label */ + TRS_HUGE, /* huge label */ + TRS_N +} TrSize; + +/* state of trail options. + * N.B. some views init private instances of these, so beware if change anything + */ +typedef struct { + TrLR l; + TrInt i; + TrFormat f; + TrRound r; + TrOrient o; + TrSize s; + int nticks; /* total number of tick marks */ + int nbefore; /* number of nticks to be before the start time*/ + double customi; /* custom interval, days (use only if i==TRI_CUSTOM) */ +} TrState; + +/* one time stamp and whether it should be labeled */ +typedef struct { + double t; /* mjd of time stamp */ + int lbl; /* whether this mark should be labeled */ +} TrTS; + +/* user's function to call when Ok/Apply is pressed */ +typedef int (*TrCB)( +#if NeedFunctionPrototypes + TrTS ts[], /* time stamps -- count is in state->nticks */ + TrState *state, /* all trail options */ + XtPointer client /* saved by tr_setup() and returned to callback */ +#endif +); + +extern void tr_setup(char *title, char *hdr, TrState *init, TrCB cb, + XtPointer client); +extern void tr_draw (Display *dsp, Drawable win, GC gc, int mark, int ticklen, + TrTS *tp, TrTS *ltp, TrState *sp, int lx, int ly, int x, int y); +extern void tr_newres (void); +extern void tr_setres (char *name, TrState *state); +extern void tr_getres (char *name, TrState *state); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: trails.h,v $ $Date: 2008/03/21 20:12:11 $ $Revision: 1.6 $ $Name: $ + */ + +#endif /* _TRAILS_H */ diff --git a/GUI/xephem/ucac.c b/GUI/xephem/ucac.c new file mode 100644 index 0000000..63d5e68 --- /dev/null +++ b/GUI/xephem/ucac.c @@ -0,0 +1,792 @@ +/* read the UCAC2, 3 or 4 catalog, depending on which index file is found. + * UCACSetup(): call to change options and base directories. + * UCACFetch(): return an array of ObjF matching the given criteria. + * UCAC2 and 3 stars are in 360 files each .5 deg hi, within 240 bins each + .1 hour RA wide. + * UCAC4 stars are in 900 files each .2 deg hi, within 1440 bins each + 1 minute of RA wide. + */ + +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define MAXFOV 15.0 /* max fov, degs */ + +typedef unsigned char UC; /* byte */ +typedef unsigned int UI; /* unsigned integer */ + +/* access an I*2 or I*4 at offset i in UC array a in little-endian byte order. + * a bit slow but ultra portable. + */ +#define I2(a,i) ((int)(short)((((UI)(a)[i]) | (((UI)(a)[i+1])<<8)))) +#define I4(a,i) ((int)((((UI)(a)[i]) | (((UI)(a)[i+1])<<8) | \ + (((UI)(a)[i+2])<<16) | (((UI)(a)[i+3])<<24)))) + +/* keep track of an array of ObjF */ +typedef struct { + ObjF *mem; /* malloced array, or NULL if none */ + int n; /* number actually in use */ +} ObjFArray; + +/* zone sizes for UCAC2 and 3 */ +#define NZW 240 /* number ra zones wide */ +#define ZW (24./NZW) /* zone width, hours */ +#define NZH 360 /* number dec zones hi */ +#define ZH (180./NZH) /* zone height, degrees */ + +/* zones sizes for UCAC4 */ +#define NZW4 1440 /* number ra zones wide */ +#define ZW4 (24./NZW4) /* zone width, hours */ +#define NZH4 900 /* number dec zones hi */ +#define ZH4 (180./NZH4) /* zone height, degrees */ + +#define DPMAS (1.0/3600000.0) /* degrees per milliarcsecond */ + +typedef UC U2Star[44]; /* UCAC2 record */ +typedef UC U3Star[84]; /* UCAC3 record */ +typedef UC U4Star[78]; /* UCAC4 record */ +static char *basedir; /* full dir with zone files and index */ +static FILE *indexfp; /* index file handle */ + +static FILE *openIndex (char dir[], char msg[], int *ucacvp); +static int add4Bin (ObjFArray *oap, int rz, int dz); +static int read4Index (int rz, int dz, int *nskip, int *nnew); +static int read4Raw (U4Star u[], int dz, int nskip, int nraw); +static void crack4 (U4Star u, int dz, int znm, Obj *op); +static int readu4hpm (int rnm, int *pmra, int *pmdec); +static int add3Bin (ObjFArray *oap, int rz, int dz); +static int read3Index (int rz, int dz, int *nskip, int *nnew); +static int read3Raw (U3Star u[], int dz, int nskip, int nraw); +static void crack3 (U3Star u, Obj *op); +static int add2Bin (ObjFArray *oap, int rz, int dz); +static int get2N (int rz, int dz, int *idp); +static int read2Raw (U2Star u[], int dz, int nskip, int nnew); +static void crack2 (U2Star u, int id, Obj *op); +static void jkspect (double j, double k, Obj *op); + +/* save the path to the base dir. + * test for some reasonable entries. + * return 0 if looks ok, else -1 and reason in msg[]. + */ +int +UCACSetup (char *path, char msg[]) +{ + FILE *fp; + int ucacv; + + /* sanity check the path by looking for the index file */ + fp = openIndex (path, msg, &ucacv); + if (!fp) + return (-1); + fclose (fp); + + /* store persistent copy of path */ + if (basedir) + free (basedir); + strcpy (basedir = malloc(strlen(path)+1), path); + + /* probably ok */ + return (0); + +} + +/* create or add to a malloced array of ObjF at *opp in the given region and + * return the new total count. + * if opp == NULL we don't malloc anything but just do the side effects; + * else *opp already has nopp ObjF in it (it's ok if *opp == NULL). + * we return new total number of stars or -1 if real trouble. + * *opp is only changed if we added any. + * msg might contain a message regardless of the return value. + */ +int +UCACFetch ( +double r0, /* center RA, rads */ +double d0, /* center Dec, rads */ +double fov, /* field of view, rads */ +double fmag, /* faintest mag */ +ObjF **opp, /* *opp will be a malloced array of the ObjF in region */ +int nopp, /* if opp: initial number of ObjF already in *opp */ +char msg[] /* status or error message if msg[0] != '\0' on return */ +) +{ + int (*doucac)() = 0; /* function to process */ + int d0z, drovz; /* dec center and radius, in 0-zones */ + ObjFArray oa; /* malloc accumulator */ + int dz; /* scanning dec zone number */ + double zw = 0, zh = 0; /* zone width and height */ + int nzw = 0, nzh = 0; /* number of zones wide and high */ + int ucacv; /* version 2, 3, or 4 */ + + /* init message */ + msg[0] = '\0'; + + /* insure there is a basedir set up */ + if (!basedir) { + strcpy (msg, "UCACFetch() called before UCACSetup()"); + return (-1); + } + + /* don't go crazy */ + if (fov > degrad(MAXFOV)) { + sprintf (msg, "UCAC FOV being clamped to %g degs", MAXFOV); + fov = degrad(MAXFOV); + } + + /* open the index file */ + indexfp = openIndex (basedir, msg, &ucacv); + if (!indexfp) + return (-1); + + /* setup based on which version */ + switch (ucacv) { + case 2: + doucac = add2Bin; + zw = ZW; + zh = ZH; + nzw = NZW; + nzh = NZH; + break; + + case 3: + doucac = add3Bin; + zw = ZW; + zh = ZH; + nzw = NZW; + nzh = NZH; + break; + + case 4: + doucac = add4Bin; + zw = ZW4; + zh = ZH4; + nzw = NZW4; + nzh = NZH4; + break; + } + + /* init the array. + * mem==NULL means we just keep a count but don't build the array. + */ + if (opp) { + oa.mem = *opp; + if (!oa.mem) + oa.mem = (ObjF*)malloc(1); /* seed for realloc */ + oa.n = nopp; + } else { + oa.mem = NULL; + oa.n = 0; + } + + /* convert to zones */ + d0z = (int)floor(raddeg(d0+PI/2)/zh); + drovz = (int)ceil(raddeg(fov/2)/zh); + + /* scan each ra bin in each dec band */ + for (dz = d0z - drovz; dz <= d0z + drovz; dz++) { + int rz, rz0, rz1; /* scanning ra zones */ + if (dz < 0 || dz >= nzh) + continue; /* over a pole */ + if (dz > 2*nzh-d0z-drovz || dz < drovz-d0z) { + rz0 = 0; /* pole in view */ + rz1 = nzw-1; + } else { + int r0z, rrovz; /* RA center and rad, 0-zones */ + r0z = (int)floor(radhr(r0)/zw); + if (fabs(d0) < PI/2) { + rrovz = (int)ceil(radhr(fov/2)/zw/cos(d0)); + if (rrovz > nzw/2) + rrovz = nzw/2; + } else + rrovz = nzw/2; + rz0 = r0z - rrovz; /* normal patch */ + rz1 = r0z + rrovz; + } + for (rz = rz0; rz <= rz1; rz++) + if ((*doucac) (&oa, rz, dz) < 0) { + char rstr[32], dstr[32]; + fs_sexa (rstr, rz*zw, 2, 60); + fs_sexa (dstr, dz*zh-90, 3, 60); + sprintf (msg, "Error reading UCAC data near %s %s",rstr,dstr); + if (!opp && oa.mem) + free ((void *)oa.mem); + fclose (indexfp); + return (-1); + } + } + + /* pass back to caller if interested */ + if (opp) + *opp = oa.mem; + + /* close index file */ + fclose (indexfp); + + /* return list */ + return (oa.n); +} + +/* add the stars in the given 0-based ra/dec zone to oap. + * return 0 if ok, else -1 + * N.B. rz may wrap + */ +static int +add4Bin (ObjFArray *oap, int rz, int dz) +{ + int nskip, nnew; + U4Star *u; + int i; + + /* beware of ra wrap */ + if (rz < 0) + rz += NZW4; + if (rz >= NZW4) + rz -= NZW4; + + /* n stars up through and including this patch */ + if (read4Index (rz, dz, &nskip, &nnew) < 0) + return (-1); + + /* read the raw star records in this record */ + u = malloc (nnew * sizeof(U4Star)); + if (!u) { + xe_msg (0, "UCAC: malloc(%d) failed", nnew*sizeof(U4Star)); + return (-1); + } + if (read4Raw (u, dz, nskip, nnew) < 0) { + free ((char *)u); + return (-1); + } + + /* expand obj memory and crack if interested */ + if (oap->mem) { + char *moreobj = realloc (oap->mem, (oap->n + nnew)*sizeof(ObjF)); + if (!moreobj) { + xe_msg (0, "UCAC: malloc failed"); + free (u); + return (-1); + } + oap->mem = (ObjF *)moreobj; + + for (i = 0; i < nnew; i++) + crack4 (u[i], dz+1, nskip+i+1, (Obj *)(oap->mem + oap->n + i)); + } + + /* always update count */ + oap->n += nnew; + + /* ok */ + free ((char *)u); + return (0); +} + +/* given 0-based ra and dec zone, return number of stars to skip in dec band + * and how many are in the zone. + * return 0 if ok, else -1 + */ +static int +read4Index (int rz, int dz, int *nskip, int *nnew) +{ + off_t offset; + UC i4[4]; + + offset = (rz*NZH4 + dz)*sizeof(i4); + if (fseek (indexfp, offset, SEEK_SET) < 0) { + xe_msg (0, "UCAC: index n0 seek %ld: %s", offset, syserrstr()); + return (-1); + } + if (fread (i4, sizeof(i4), 1, indexfp) != 1) { + xe_msg (0, "UCAC: index n0 read %d: %s", sizeof(i4), syserrstr()); + return (-1); + } + *nskip = I4(i4, 0); + + + offset = (NZW4*NZH4 + rz*NZH4 + dz)*sizeof(i4); + if (fseek (indexfp, offset, SEEK_SET) < 0) { + xe_msg (0, "UCAC: index nn seek %ld: %s", offset, syserrstr()); + return (-1); + } + if (fread (i4, sizeof(i4), 1, indexfp) != 1) { + xe_msg (0, "UCAC: index nn read %d: %s", sizeof(i4), syserrstr()); + return (-1); + } + *nnew = I4(i4, 0); + + return (0); +} + +/* read the nnew raw star records starting after nskip records for the given + * 0-based dec zone. + * return 0 if ok, else -1 + */ +static int +read4Raw (U4Star u[], int dz, int nskip, int nnew) +{ + char fn[1024]; + FILE *fp; + + sprintf (fn, "%s/u4b/z%03d", basedir, dz+1); + fp = fopen (fn, "r"); + if (!fp) { + xe_msg (0, "UCAC: open %s: %s", fn, syserrstr()); + return (-1); + } + if (fseek (fp, nskip*sizeof(U4Star), SEEK_SET) < 0) { + xe_msg (0, "UCAC: seek %ld %s: %s", nskip*sizeof(U4Star), fn, syserrstr()); + fclose (fp); + return (-1); + } + if (fread (u, sizeof(U4Star), nnew, fp) != nnew) { + xe_msg (0, "UCAC: read %d, %s: %s", sizeof(U4Star), fn, syserrstr()); + fclose (fp); + return (-1); + } + fclose (fp); + return (0); +} + +/* convert the raw UCAC record into the ObjF portion of op. + * proper motion applied to 2000, libastro::circum.c takes it from there. + */ +static void +crack4 (U4Star u, int dz, int znm, Obj *op) +{ + int rawpmra, rawpmdec; + double epra, epdc; + double spd; + + memset (op, 0, sizeof(ObjF)); /* N.B. ObjF, not Obj */ + + op->o_type = FIXED; + op->f_class = (u[14] == 0) ? ((u[13] == 0) ? 'S' : 'T') : 'D'; + op->f_RA = degrad (I4(u,0)*DPMAS); + spd = I4(u,4)*DPMAS; + op->f_dec = degrad (spd - 90); + op->f_epoch = J2000; + set_fmag (op, I2(u,10)/1000.0); + + epra = I2(u,20)*.01+1900; /* pmra epoch, years */ + epdc = I2(u,22)*.01+1900; /* pmdec epoch, years */ + rawpmra = I2(u,24); /* .1 mas/yr, on sky */ + rawpmdec = I2(u,26); /* .1 mas/yr */ + if (rawpmra == 32767 || rawpmdec == 32767) { + int rnm = I4(u,68); + if (readu4hpm (rnm, &rawpmra, &rawpmdec) < 0) + xe_msg (1, "Can not find proper motion for star UCAC4 %d", rnm); + } + op->f_pmRA = degrad(rawpmra*0.1*DPMAS)/365.25/cos(op->f_dec); /* want RA rad/day */ + op->f_pmdec = degrad(rawpmdec*0.1*DPMAS)/365.25; /* want Dec rad/day */ + op->f_RA += op->f_pmRA * (2000.0 - epra)*365.25; /* move to 2000 */ + op->f_dec += op->f_pmdec * (2000.0 - epdc)*365.25; /* move to 2000 */ + + jkspect (I2(u,34)*0.001, I2(u,38)*0.001, op); + + sprintf (op->o_name, "UCAC4-%03d-%06d", dz, znm); +} + +/* convert running star number to proper motion. + * return 0 if ok, else -1 + */ +static int +readu4hpm (int rnm, int *pmra, int *pmdec) +{ + typedef struct { + int rnm; + int zn; + int rnz; + int pmrc; + int pmd; + int ra; + int spd; + int maga; + } U4HPM; + static U4HPM *u4hpm; + static int nu4hpm; + int i; + + /* cache file first time only */ + if (!u4hpm) { + char fn[1024]; + char line[128]; + FILE*fp; + + sprintf (fn, "%s/u4i/u4hpm.dat", basedir); + fp = fopen (fn, "r"); + if (!fp) { + xe_msg (1, "Can not open %s", fn); + return (-1); + } + while (fgets (line, sizeof(line), fp)) { + u4hpm = (U4HPM *) realloc (u4hpm, (nu4hpm+1)*sizeof(U4HPM)); + U4HPM *up = &u4hpm[nu4hpm++]; + sscanf (line, "%d %d %d %d %d %d %d %d", &up->rnm, &up->zn, &up->rnz, + &up->pmrc, &up->pmd, &up->ra, &up->spd, &up->maga); + } + fclose (fp); + + }; + + /* search for matching rnm */ + for (i = 0; i < nu4hpm; i++) { + if (rnm == u4hpm[i].rnm) { + *pmra = u4hpm[i].pmrc; + *pmdec = u4hpm[i].pmd; + return (0); + } + } + + xe_msg (1, "Can not find UCAC4 u4hpm entry for %d", rnm); + /* not found */ + return (-1); +} + +/* add the stars in the given 0-based ra/dec zone to oap. + * return 0 if ok, else -1 + * N.B. rz may wrap + */ +static int +add3Bin (ObjFArray *oap, int rz, int dz) +{ + int nskip, nnew; + U3Star *u; + int i; + + /* beware of ra wrap */ + if (rz < 0) + rz += NZW; + if (rz >= NZW) + rz -= NZW; + + /* n stars up through and including this patch */ + if (read3Index (rz, dz, &nskip, &nnew) < 0) + return (-1); + + /* read the raw star records in this record */ + u = malloc (nnew * sizeof(U3Star)); + if (!u) { + xe_msg (0, "UCAC: malloc(%d) failed", nnew*sizeof(U3Star)); + return (-1); + } + if (read3Raw (u, dz, nskip, nnew) < 0) { + free ((char *)u); + return (-1); + } + + /* expand obj memory and crack if interested */ + if (oap->mem) { + char *moreobj = realloc (oap->mem, (oap->n + nnew)*sizeof(ObjF)); + if (!moreobj) { + xe_msg (0, "UCAC: malloc failed"); + free (u); + return (-1); + } + oap->mem = (ObjF *)moreobj; + + for (i = 0; i < nnew; i++) + crack3 (u[i], (Obj *)(oap->mem + oap->n + i)); + } + + /* always update count */ + oap->n += nnew; + + /* ok */ + free ((char *)u); + return (0); +} + +/* given 0-based ra and dec zone, return number of stars to skip in dec band + * and how many are in the zone. + * return 0 if ok, else -1 + */ +static int +read3Index (int rz, int dz, int *nskip, int *nnew) +{ + off_t offset; + UC i4[4]; + + offset = (rz*NZH + dz)*sizeof(i4); + if (fseek (indexfp, offset, SEEK_SET) < 0) { + xe_msg (0, "UCAC: index n0 seek %ld: %s", offset, syserrstr()); + return (-1); + } + if (fread (i4, sizeof(i4), 1, indexfp) != 1) { + xe_msg (0, "UCAC: index n0 read %d: %s", sizeof(i4), syserrstr()); + return (-1); + } + *nskip = I4(i4, 0); + + + offset = (NZW*NZH + rz*NZH + dz)*sizeof(i4); + if (fseek (indexfp, offset, SEEK_SET) < 0) { + xe_msg (0, "UCAC: index nn seek %ld: %s", offset, syserrstr()); + return (-1); + } + if (fread (i4, sizeof(i4), 1, indexfp) != 1) { + xe_msg (0, "UCAC: index nn read %d: %s", sizeof(i4), syserrstr()); + return (-1); + } + *nnew = I4(i4, 0); + + return (0); +} + +/* read the nnew raw star records starting after nskip records for the given + * 0-based dec zone. + * return 0 if ok, else -1 + */ +static int +read3Raw (U3Star u[], int dz, int nskip, int nnew) +{ + char fn[1024]; + FILE *fp; + + sprintf (fn, "%s/z%03d", basedir, dz+1); + fp = fopen (fn, "r"); + if (!fp) { + xe_msg (0, "UCAC: open %s: %s", fn, syserrstr()); + return (-1); + } + if (fseek (fp, nskip*sizeof(U3Star), SEEK_SET) < 0) { + xe_msg (0, "UCAC: seek %ld %s: %s", nskip*sizeof(U3Star), fn, syserrstr()); + fclose (fp); + return (-1); + } + if (fread (u, sizeof(U3Star), nnew, fp) != nnew) { + xe_msg (0, "UCAC: read %d, %s: %s", sizeof(U3Star), fn, syserrstr()); + fclose (fp); + return (-1); + } + fclose (fp); + return (0); +} + +/* convert the raw UCAC record into the ObjF portion of op */ +static void +crack3 (U3Star u, Obj *op) +{ + memset (op, 0, sizeof(ObjF)); /* N.B. ObjF, not Obj */ + + sprintf (op->o_name, "3UCAC%09d", I4(u,80)); + op->o_type = FIXED; + op->f_class = (u[14] == 0 || u[14] == 1) ? 'S' : 'T'; + op->f_RA = degrad (I4(u,0)*DPMAS); + op->f_dec = degrad (I4(u,4)*DPMAS - 90.0); + op->f_epoch = J2000; + set_fmag (op, I2(u,10)/1000.0); + op->f_pmRA = degrad(I4(u,28)/10.0*DPMAS)/365.0/cos(op->f_dec); + op->f_pmdec = degrad(I4(u,32)/10.0*DPMAS)/365.0; + jkspect (I2(u,44)*0.001, I2(u,48)*0.001, op); +} + +/* add the stars in the given 0-based ra/dec zone to oap. + * return 0 if ok, else -1 + * N.B. rz may wrap + */ +static int +add2Bin (ObjFArray *oap, int rz, int dz) +{ + int nthis, nprior, npriorzone, nnew; + U2Star *u; + int r, d; + int i; + + /* beware of ra wrap */ + if (rz < 0) + rz += NZW; + if (rz >= NZW) + rz -= NZW; + + /* n stars up through and including this patch */ + if (get2N (rz, dz, &nthis) < 0) + return (-1); + + /* n stars up to but not including this patch */ + if (rz > 0) { + r = rz-1; + d = dz; + } else { + r = NZW-1; + d = dz-1; + } + if (d < 0) + nprior = 0; + else if (get2N (r, d, &nprior) < 0) + return (-1); + + /* n stars up through last dec zone */ + if (dz == 0) + npriorzone = 0; + else if (get2N (NZW-1, dz-1, &npriorzone) < 0) + return (-1); + + /* read the raw star records in this record */ + nnew = nthis - nprior; + u = malloc (nnew * sizeof(U2Star)); + if (!u) + return (-1); + if (read2Raw (u, dz, nprior-npriorzone, nnew) < 0) { + free ((char *)u); + return (-1); + } + + /* expand obj memory and crack if interested */ + if (oap->mem) { + char *moreobj = realloc (oap->mem, (oap->n + nnew)*sizeof(ObjF)); + if (!moreobj) { + free (u); + return (-1); + } + oap->mem = (ObjF *)moreobj; + + for (i = 0; i < nnew; i++) + crack2 (u[i], nprior+i+1, (Obj *)(oap->mem + oap->n + i)); + } + + /* always count */ + oap->n += nnew; + + /* ok */ + free ((char *)u); + return (0); +} + +/* return the number of stars up through and including the given 0-based patch. + * return 0 if ok, else -1 + */ +static int +get2N (int rz, int dz, int *idp) +{ + off_t offset; + UC nat[4]; + + offset = (dz*NZW + rz)*sizeof(nat); + if (fseek (indexfp, offset, SEEK_SET) < 0) + return (-1); + if (fread (nat, sizeof(nat), 1, indexfp) != 1) + return (-1); + *idp = I4(nat,0); + return (0); +} + +/* read the n raw star records starting after nskip records from the given + * 0-based dec zone. + * return 0 if ok, else -1 + */ +static int +read2Raw (U2Star u[], int dz, int nskip, int nnew) +{ + char fn[1024]; + FILE *fp; + + sprintf (fn, "%s/z%03d", basedir, dz+1); + fp = fopen (fn, "r"); + if (!fp) + return (-1); + if (fseek (fp, nskip*sizeof(U2Star), SEEK_SET) < 0) { + fclose (fp); + return (-1); + } + if (fread (u, sizeof(U2Star), nnew, fp) != nnew) { + fclose (fp); + return (-1); + } + fclose (fp); + return (0); +} + +/* convert the raw UCAC record into the ObjF portion of op */ +static void +crack2 (U2Star u, int id, Obj *op) +{ + memset (op, 0, sizeof(ObjF)); /* N.B. ObjF, not Obj */ + + sprintf (op->o_name, "UCAC%08d", id); + op->o_type = FIXED; + op->f_class = 'S'; + op->f_RA = degrad (I4(u,0)*DPMAS); + op->f_dec = degrad (I4(u,4)*DPMAS); + op->f_epoch = J2000; + set_fmag (op, I2(u,8)*0.01); + if ((char)u[30] <= -27 && (char)u[31] <= -27) { + /* PM only store if "goodness of fit" is less than 5 */ + op->f_pmRA = degrad(I4(u,20)*0.1*DPMAS)/365.0; + op->f_pmdec = degrad(I4(u,24)*0.1*DPMAS)/365.0; + } + jkspect (I2(u,36)*0.001, I2(u,40)*0.001, op); +} + +/* open index file in dir, return version and FILE * else NULL with message */ +static FILE * +openIndex (char dir[], char msg[], int *ucacvp) +{ + static char u2[] = "u2index.da"; /* zone index file name */ + static char u3[] = "u3index.unf"; /* zone index file name */ + static char u4[] = "u4index.unf"; /* zone index file name */ + char full[1024]; + FILE *fp; + + sprintf (full, "%s/%s", dir, u2); + fp = fopen (full, "r"); + if (fp) { + *ucacvp = 2; + } else { + sprintf (full, "%s/%s", dir, u3); + fp = fopen (full, "r"); + if (fp) { + *ucacvp = 3; + } else { + sprintf (full, "%s/u4i/%s", dir, u4); + fp = fopen (full, "r"); + if (fp) { + *ucacvp = 4; + } else { + sprintf (msg, "Can not find %s or %s or %s", u2, u3, u4); + } + } + } + return (fp); +} + +/* given the J and K_s fields in the UCAC catalog, fill in f_spect[] in op. + * from Brian Skiff off TASS "Stellar Catalogs" page, with artistic license. + * http://stupendous.rit.edu/tass/catalogs/uvby.calib + */ +static void +jkspect (double j, double k, Obj *op) +{ + static struct { + char sp[sizeof(op->f_spect)+1]; /* +1 for \0 in init string */ + float jminusk; /* j - k */ + } jkmag[] = { + {"B2", -0.22}, + {"B5", -0.20}, + {"B0", -0.17}, + {"A0", 0.00}, + {"F0", 0.15}, + {"G2", 0.37}, + {"G8", 0.58}, + {"K0", 0.63}, + {"M0", 1.01}, + {"M2", 1.22}, + {"M5", 1.25}, + {"M6", 1.26}, + {"M7", 1.27}, + {"V4", 1.57}, + }; + + double jmk = j-k; + int i; + + for (i = 1; i < sizeof(jkmag)/sizeof(jkmag[0]); i++) { + if (jmk <= jkmag[i].jminusk) { + strncpy (op->f_spect, jkmag[i-1].sp, sizeof(op->f_spect)); + return; + } + } +} diff --git a/GUI/xephem/uranusmenu.c b/GUI/xephem/uranusmenu.c new file mode 100644 index 0000000..526ba0b --- /dev/null +++ b/GUI/xephem/uranusmenu.c @@ -0,0 +1,2155 @@ +/* code to manage the stuff on the "uranus" menu. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define MINR 10 /* min distance for picking, pixels */ + +/* local record of what is now on screen for easy id from mouse picking. + */ +typedef struct { + Obj o; /* copy of object info. + * copy from DB or, if uranus moon, we fill in just + * o_name and s_mag/ra/dec + */ + int x, y; /* screen coord */ +} ScreenObj; + +/* malloced arrays for each view */ +typedef enum { + SO_MAIN, SO_SHADOW, SO_TOP, SO_N +} SOIdx; +static ScreenObj *screenobj[SO_N]; +static int nscreenobj[SO_N]; + +static void um_create_shell_w (void); +static void um_create_usform_w (void); +static void um_create_tvform_w (void); +static void um_set_buttons (int whether); +static void um_sstats_close_cb (Widget w, XtPointer client, XtPointer call); +static void um_sstats_cb (Widget w, XtPointer client, XtPointer call); +static void um_option_cb (Widget w, XtPointer client, XtPointer call); +static void um_cpdmapping_cb (Widget w, XtPointer client, XtPointer call); +static void um_scale_cb (Widget w, XtPointer client, XtPointer call); +static void um_activate_cb (Widget w, XtPointer client, XtPointer call); +static int um_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void ut_unmap_cb (Widget w, XtPointer client, XtPointer call); +static void ut_map_cb (Widget w, XtPointer client, XtPointer call); +static void ut_track_size (void); +static void ut_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static int ut_ano (double *latp, double *longp, int *xp, int *yp, int w2x, + int arg); +static void um_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void um_close_cb (Widget w, XtPointer client, XtPointer call); +static void um_mloop_cb (Widget w, XtPointer client, XtPointer call); +static void um_anim_cb (Widget w, XtPointer client, XtPointer call); +static void um_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void um_da_input_cb (Widget w, XtPointer client, XtPointer call); +static void um_create_popup (void); +static void um_fill_popup (ScreenObj *sop); +static void um_help_cb (Widget w, XtPointer client, XtPointer call); +static void um_helpon_cb (Widget w, XtPointer client, XtPointer call); +static void um_goto_cb (Widget w, XtPointer client, XtPointer call); +static void um_print_cb (Widget w, XtPointer client, XtPointer call); +static void um_print (void); +static void um_ps_annotate (Now *np); +static void make_gcs (void); +static void u_calibline (Display *dsp, Drawable win, GC gc, int xc, int yc, + char *tag, int tw, int th, int l); +static void um_draw_map (Widget w, Obj *uop, double usize,MoonData md[U_NMOONS]); + +static void add_screenobj (SOIdx, Obj *op, int x, int y); +static void reset_screenobj (SOIdx); +static ScreenObj *close_screenobj (SOIdx, int x, int y); + +static void sky_background (Drawable win, unsigned w, unsigned h, int fmag, + double ra0, double dec0, double scale, double rad, int fliptb, int fliplr); + +static Widget ushell_w; /* main shell */ +static Widget usform_w; /* statistics form */ +static Widget umframe_w; /* main frame */ +static Widget utform_w; /* top-view form */ +static Widget utframe_w; /* top-view frame */ +static Widget uda_w; /* main drawing area */ +static Widget utda_w; /* top-view drawing area */ +static Widget scale_w; /* size scale */ +static Widget limmag_w; /* limiting magnitude scale */ +static Widget dt_w; /* main date/time stamp widget */ +static Widget sdt_w; /* statistics date/time stamp widget */ +static Widget skybkg_w; /* toggle for controlling sky background */ +static Widget topview_w; /* toggle for controlling top view */ +static Widget tel_w; /* PB to send position to telescope */ +static Pixmap um_pm; /* main pixmap */ +static Pixmap ut_pm; /* top-view pixmap */ +static GC u_fgc, u_bgc, u_xgc; /* various colors and operators */ +static XFontStruct *u_fs; /* font for labels */ +static int u_cw, u_ch; /* size of label font */ +static int um_selecting; /* set while our fields are being selected */ +static int brmoons; /* whether we want to brightten the moons */ +static int tags; /* whether we want tags on the drawing */ +static int flip_tb; /* whether we want to flip top/bottom */ +static int flip_lr; /* whether we want to flip left/right */ +static int skybkg; /* whether we want sky background */ +static int topview; /* whether we want the top view */ + +static Widget umpu_w; /* main popup */ +static Widget umpu_name_w; /* popup name label */ +static Widget umpu_ra_w; /* popup RA label */ +static Widget umpu_dec_w; /* popup Dec label */ +static Widget umpu_mag_w; /* popup Mag label */ + +#define MAXSCALE 10.0 /* max scale mag factor */ +#define NORM 27.0 /* max Callisto orbit radius */ +#define MAPSCALE(r) ((r)*((int)nx)/NORM/2*scale) +#define XCORD(x) ((int)(((int)nx)/2.0 + ew*MAPSCALE(x) + 0.5)) +#define YCORD(y) ((int)(((int)ny)/2.0 - ns*MAPSCALE(y) + 0.5)) +#define ZCORD(z) ((int)(((int)ny)/2.0 + MAPSCALE(z) + 0.5)) +#define MOVIE_STEPSZ 0.25 /* movie step size, hours */ +#define PRTR 17 /* printing table row, up from bottom */ +#define PRCW 7 /* printing char width */ + +/* field star support */ +static ObjF *fstars; /* malloced list of field stars, or NULL */ +static int nfstars; /* number of entries in fstars[] */ +static double fsdec, fsra; /* location when field stars were loaded */ +#define FSFOV degrad(1.0) /* size of FOV to fetch, rads */ +#define FSMAG 20.0 /* limiting mag for fetch */ +#define FSMOVE degrad(.1) /* reload when u has moved this far, rads */ +static void um_loadfs (double ra, double dec); + +enum {CEV, CSV, CPS, CTR, CX, CY, CZ, CRA, CDEC, CMAG, CNum}; /* u_w col idx */ +static Widget u_w[U_NMOONS][CNum];/* the data display widgets */ + +static char ucategory[] = "Uranus"; /* Save category */ + +static double pole_ra, pole_dec; + +/* called when the uranus menu is activated via the main menu pulldown. + * if never called before, create and manage all the widgets as a child of a + * form. otherwise, just get out there and do it! + */ +void +um_manage () +{ + if (!ushell_w) { + um_create_shell_w(); + um_create_usform_w(); + um_create_tvform_w(); + make_gcs(); + } + + XtPopup (ushell_w, XtGrabNone); + set_something (ushell_w, XmNiconic, (XtArgVal)False); + um_set_buttons(um_selecting); + + /* register we are now up */ + setXRes (um_viewupres(), "1"); +} + +/* called to recompute and fill in values for the Uranus menu. + * don't bother if it doesn't exist or is unmanaged now or no one is logging. + */ +void +um_update (np, how_much) +Now *np; +int how_much; +{ + static char fmt[] = "%7.3f"; + Obj *eop = db_basic (SUN); + Obj *uop = db_basic (URANUS); + char *dir, buf[1024]; + MoonData md[U_NMOONS]; + int wantstats; + double usize; + int i; + + /* see if we should bother */ + if (!ushell_w) + return; + wantstats = XtIsManaged(usform_w) || any_ison() || how_much; + if (!isUp(ushell_w) && !wantstats) + return; + + watch_cursor (1); + + /* compute md[0].x/y/z/mag/ra/dec and md[1..NM-1].x/y/z/mag info */ + sprintf (buf, "%s/auxil", getShareDir()); + dir = expand_home (buf); + uranus_data(mjd, dir, eop, uop, &usize, &pole_ra, &pole_dec, md); + + if (wantstats) { + for (i = 0; i < U_NMOONS; i++) { + if (i > 0) { + f_double (u_w[i][CEV], "%1.0f", (double)md[i].evis); + f_double (u_w[i][CSV], "%1.0f", (double)md[i].svis); + f_double (u_w[i][CPS], "%1.0f", (double)md[i].pshad); + f_double (u_w[i][CTR], "%1.0f", (double)md[i].trans); + f_double (u_w[i][CX], fmt, md[i].x); + f_double (u_w[i][CY], fmt, md[i].y); + f_double (u_w[i][CZ], fmt, md[i].z); + } + f_double (u_w[i][CMAG], "%4.1f", md[i].mag); + f_ra (u_w[i][CRA], md[i].ra); + f_prdec (u_w[i][CDEC], md[i].dec); + } + + timestamp (np, sdt_w); + } + + if (isUp(ushell_w)) { + um_draw_map (uda_w, uop, usize, md); + timestamp (np, dt_w); + } + + watch_cursor (0); +} + +/* called when basic resources change. + * rebuild and redraw. + */ +void +um_newres() +{ + if (!ushell_w) + return; + make_gcs (); + um_update (mm_get_now(), 1); +} + +/* called when the database has changed. + * if we are drawing background, we'd best redraw everything. + */ +/* ARGSUSED */ +void +um_newdb (appended) +int appended; +{ + if (skybkg) + um_update (mm_get_now(), 1); +} + +int +um_ison() +{ + return (isUp(ushell_w)); +} + +/* called by other menus as they want to hear from our buttons or not. + * the "on"s and "off"s stack - only really redo the buttons if it's the + * first on or the last off. + */ +void +um_selection_mode (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + if (whether) + um_selecting++; + else if (um_selecting > 0) + --um_selecting; + + if (ushell_w) + if ((whether && um_selecting == 1) /* first one to want on */ + || (!whether && um_selecting == 0) /* last one to want off */) + um_set_buttons (whether); +} + +/* called to put up or remove the watch cursor. */ +void +um_cursor (c) +Cursor c; +{ + Window win; + + if (ushell_w && (win = XtWindow(ushell_w)) != 0) { + Display *dsp = XtDisplay(ushell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (usform_w && (win = XtWindow(usform_w)) != 0) { + Display *dsp = XtDisplay(usform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } + + if (utform_w && (win = XtWindow(utform_w)) != 0) { + Display *dsp = XtDisplay(utform_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* return the name of the resource containing whether this view is up */ +char * +um_viewupres() +{ + return ("UranusViewUp"); +} + +/* create the main shell */ +static void +um_create_shell_w() +{ + typedef struct { + char *name; /* toggle button instance name, or NULL */ + char *label; /* label */ + int *flagp; /* pointer to global flag, or NULL if none */ + Widget *wp; /* widget to save, or NULL */ + char *tip; /* widget tip */ + } Option; + static Option options[] = { + {NULL, "Top view", &topview, &topview_w, + "When on, show view looking from high above N pole"}, + {"SkyBkg", "Sky background", &skybkg, &skybkg_w, + "When on, sky will include database objects and Field Stars"}, + {"BrightMoons","Bright moons", &brmoons, NULL, + "Display moons disproportionately bright, even if below limit"}, + {"Tags", "Tags", &tags, NULL, + "Label each moon with its Roman Numeral sequence number"}, + {"FlipTB", "Flip T/B", &flip_tb, NULL, + "Flip the display top-to-bottom"}, + {"FlipLR", "Flip L/R", &flip_lr, NULL, + "Flip the display left-to-right"}, + }; + typedef struct { + char *label; /* what goes on the help label */ + char *key; /* string to call hlp_dialog() */ + } HelpOn; + static HelpOn helpon[] = { + {"Intro...", "Uranus"}, + {"on Mouse...", "Uranus_mouse"}, + {"on Control...", "Uranus_control"}, + {"on View...", "Uranus_view"}, + }; + Widget w; + Widget mb_w, pd_w, cb_w; + Widget uform_w; + XmString str; + Arg args[20]; + int n; + int i; + + /* create shell and form */ + + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Uranus view"); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNiconName, "Uranus"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + ushell_w = XtCreatePopupShell ("Uranus", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (ushell_w); + set_something (ushell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (ushell_w, XmNpopdownCallback, um_popdown_cb, 0); + sr_reg (ushell_w, "XEphem*Uranus.width", ucategory, 0); + sr_reg (ushell_w, "XEphem*Uranus.height", ucategory, 0); + sr_reg (ushell_w, "XEphem*Uranus.x", ucategory, 0); + sr_reg (ushell_w, "XEphem*Uranus.y", ucategory, 0); + sr_reg (NULL, um_viewupres(), ucategory, 0); + + n = 0; + uform_w = XmCreateForm (ushell_w, "UranusF", args, n); + XtAddCallback (uform_w, XmNhelpCallback, um_help_cb, 0); + XtManageChild (uform_w); + + /* create the menu bar across the top */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + mb_w = XmCreateMenuBar (uform_w, "MB", args, n); + XtManageChild (mb_w); + + /* make the Control pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ControlPD", args, n); + XtAddCallback (pd_w, XmNmapCallback, um_cpdmapping_cb, NULL); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'C'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ControlCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Control"); + XtManageChild (cb_w); + + /* add the "Print... " push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "P", args, n); + set_xmstring (w, XmNlabelString, "Print..."); + XtAddCallback (w, XmNactivateCallback, um_print_cb, 0); + wtip (w, "Print front view and detail table"); + XtManageChild (w); + + /* add the "Annot... " push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "A", args, n); + set_xmstring (w, XmNlabelString, "User annotation..."); + XtAddCallback (w, XmNactivateCallback, ano_cb, 0); + wtip (w, "Open window to create and manage your own annotation"); + XtManageChild (w); + + /* add the "Field stars" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "FS", args, n); + set_xmstring (w, XmNlabelString, "Field Stars..."); + XtAddCallback (w, XmNactivateCallback, (XtCallbackProc)fs_manage,0); + wtip (w, "Define where GSC and PPM catalogs are to be found"); + XtManageChild (w); + + /* add the "GOTO" push button */ + + n = 0; + tel_w = XmCreatePushButton (pd_w, "GOTO", args, n); + set_xmstring (tel_w, XmNlabelString, "Telescope GoTo"); + XtAddCallback (tel_w, XmNactivateCallback, um_goto_cb, 0); + wtip (tel_w, "Send position to external application"); + XtManageChild (tel_w); + + /* add the "movie" push button */ + + n = 0; + w = XmCreatePushButton (pd_w, "Anim", args, n); + set_xmstring (w, XmNlabelString, "Animation demo"); + XtAddCallback (w, XmNactivateCallback, um_anim_cb, 0); + wtip (w, "Start/Stop a fun time-lapse animation"); + XtManageChild (w); + + /* add the "Movie loop... " push button */ + + n = 0; + n += ml_addacc (args, n); + w = XmCreatePushButton (pd_w, "ML", args, n); + set_xmstring (w, XmNlabelString, "Add to movie..."); + XtAddCallback (w, XmNactivateCallback, um_mloop_cb, 0); + wtip (w, "Add this scene to the movie loop"); + XtManageChild (w); + + /* add the "close" push button beneath a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (pd_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, um_close_cb, 0); + wtip (w, "Close this and all supporting dialogs"); + XtManageChild (w); + + /* make the View pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "ViewPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'V'); n++; + cb_w = XmCreateCascadeButton (mb_w, "ViewCB", args, n); + set_xmstring (cb_w, XmNlabelString, "View"); + XtManageChild (cb_w); + + for (i = 0; i < XtNumber(options); i++) { + Option *op = &options[i]; + + n = 0; + XtSetArg (args[n], XmNvisibleWhenOff, True); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY); n++; + w = XmCreateToggleButton (pd_w, op->name ? op->name : "UMTB", + args, n); + XtAddCallback (w, XmNvalueChangedCallback, um_option_cb, + (XtPointer)(op->flagp)); + set_xmstring (w, XmNlabelString, op->label); + if (op->flagp) + *(op->flagp) = XmToggleButtonGetState(w); + if (op->wp) + *op->wp = w; + if (op->tip) + wtip (w, op->tip); + XtManageChild (w); + if (op->name) + sr_reg (w, NULL, ucategory, 1); + } + + /* add a separator */ + + n = 0; + w = XmCreateSeparator (pd_w, "Sep", args, n); + XtManageChild (w); + + /* add the More Info control */ + + n = 0; + w = XmCreatePushButton (pd_w, "Stats", args, n); + set_xmstring (w, XmNlabelString, "More info..."); + XtAddCallback (w, XmNactivateCallback, um_sstats_cb, NULL); + wtip (w, "Display additional details"); + XtManageChild (w); + + /* make the help pulldown */ + + n = 0; + pd_w = XmCreatePulldownMenu (mb_w, "HelpPD", args, n); + + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + XtSetArg (args[n], XmNmnemonic, 'H'); n++; + cb_w = XmCreateCascadeButton (mb_w, "HelpCB", args, n); + set_xmstring (cb_w, XmNlabelString, "Help"); + XtManageChild (cb_w); + set_something (mb_w, XmNmenuHelpWidget, (XtArgVal)cb_w); + + for (i = 0; i < XtNumber(helpon); i++) { + HelpOn *hp = &helpon[i]; + + str = XmStringCreate (hp->label, XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNlabelString, str); n++; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + w = XmCreatePushButton (pd_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, um_helpon_cb, + (XtPointer)(hp->key)); + XtManageChild (w); + XmStringFree(str); + } + + /* make the date/time stamp label */ + + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + dt_w = XmCreateLabel (uform_w, "DateStamp", args, n); + timestamp (mm_get_now(), dt_w); /* establishes size */ + wtip (dt_w, "Date and Time for which map is computed"); + XtManageChild (dt_w); + + /* make the scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 10); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + scale_w = XmCreateScale (uform_w, "Scale", args, n); + XtAddCallback (scale_w, XmNdragCallback, um_scale_cb, 0); + XtAddCallback (scale_w, XmNvalueChangedCallback, um_scale_cb, 0); + wtip (scale_w, "Zoom in and out"); + XtManageChild (scale_w); + sr_reg (scale_w, NULL, ucategory, 0); + + /* make the limiting mag scale widget. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNmaximum, 20); n++; + XtSetArg (args[n], XmNminimum, 0); n++; + XtSetArg (args[n], XmNscaleMultiple, 1); n++; + XtSetArg (args[n], XmNorientation, XmVERTICAL); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_TOP); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + limmag_w = XmCreateScale (uform_w, "LimMag", args, n); + XtAddCallback (limmag_w, XmNdragCallback, um_scale_cb, 0); + XtAddCallback (limmag_w, XmNvalueChangedCallback, um_scale_cb, 0); + wtip (limmag_w, "Adjust the brightness and limiting magnitude"); + XtManageChild (limmag_w); + sr_reg (limmag_w, NULL, ucategory, 0); + + /* make a frame for the drawing area. + * attach both top and bottom so it's the one to follow resizing. + */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, mb_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, dt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, scale_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNrightWidget, limmag_w); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + umframe_w = XmCreateFrame (uform_w, "UFrame", args, n); + XtManageChild (umframe_w); + + /* make a drawing area for drawing the little map */ + + n = 0; + uda_w = XmCreateDrawingArea (umframe_w, "Uranus", args, n); + XtAddCallback (uda_w, XmNexposeCallback, um_da_exp_cb, 0); + XtAddCallback (uda_w, XmNinputCallback, um_da_input_cb, + (XtPointer)SO_MAIN); + XtManageChild (uda_w); +} + +/* make the statistics form dialog */ +static void +um_create_usform_w() +{ + typedef struct { + int col; /* C* column code */ + int moononly; /* applies to moons only */ + char *collabel; /* column label */ + char *suffix; /* suffix for plot/list/search name */ + char *tip; /* widget tip */ + } MoonColumn; + static MoonColumn mc[] = { + {CEV, 1, "E", "EVis", + "Whether geometrically visible from Earth"}, + {CSV, 1, "S", "SVis", + "Whether in Sun light"}, + {CPS, 1, "P", "PShad", + "Whether shadow falls on planet"}, + {CTR, 1, "T", "Transit", + "Whether moon is transitting face of planet"}, + {CX, 1, "X (+E)", "X", + "Apparent displacement east of planetary center"}, + {CY, 1, "Y (+S)", "Y", + "Apparent displacement south of planetary center"}, + {CZ, 1, "Z (+front)", "Z", + "Uranus radii towards Earth from planetary center"}, + {CRA, 0, "RA", "RA", + "Right Ascension (to Main's settings)"}, + {CDEC, 0, "Dec", "Dec", + "Declination (to Main's settings)"}, + {CMAG, 0, "Mag", "Mag", + "Apparent visual magnitude"}, + }; + MoonData md[U_NMOONS]; + Widget w; + Widget rc_w, title_w, sep_w; + Arg args[20]; + int n; + int i; + + /* just get moon names */ + uranus_data (0.0, NULL, NULL, NULL, NULL, NULL, NULL, md); + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNresizePolicy, XmRESIZE_ANY); n++; + XtSetArg (args[n], XmNverticalSpacing, 5); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + usform_w = XmCreateFormDialog (ushell_w, "UranusStats", args, n); + set_something (usform_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (XtParent(usform_w), "XEphem*UranusStats.x", ucategory, 0); + sr_reg (XtParent(usform_w), "XEphem*UranusStats.y", ucategory, 0); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Uranus info"); n++; + XtSetValues (XtParent(usform_w), args, n); + + /* make table title label */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNtopOffset, 10); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + title_w = XmCreateLabel (usform_w, "UML", args, n); + XtManageChild (title_w); + set_xmstring (title_w, XmNlabelString,"Moon Positions (Uranus radii)"); + + /* make the moon table, one column at a time */ + + /* moon designator column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (usform_w, "UDes", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "TL", args, n); + set_xmstring (w, XmNlabelString, "Tag"); + wtip (w, "Roman Numeral sequence designation of moon"); + XtManageChild (w); + + for (i = 0; i < U_NMOONS; i++) { + char *tag = md[i].tag; + + n = 0; + w = XmCreatePushButton (rc_w, "UTag", args, n); /*PB for sz */ + set_xmstring (w, XmNlabelString, tag ? tag : " "); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* moon name column */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_BEGINNING); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (usform_w, "UName", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "NL", args, n); + set_xmstring (w, XmNlabelString, "Name"); + wtip (w, "Common name of body"); + XtManageChild (w); + + for (i = 0; i < U_NMOONS; i++) { + n = 0; + w = XmCreatePushButton (rc_w, "UName", args, n); /*PB for sz*/ + set_xmstring (w, XmNlabelString, md[i].full); + buttonAsButton (w, False); + XtManageChild (w); + } + + /* make each of the X/Y/Z/Mag/RA/DEC information columns */ + + for (i = 0; i < XtNumber (mc); i++) { + MoonColumn *mp = &mc[i]; + int j; + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, title_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, rc_w); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + XtSetArg (args[n], XmNisAligned, True); n++; + rc_w = XmCreateRowColumn (usform_w, "UMIRC", args, n); + XtManageChild (rc_w); + + n = 0; + w = XmCreateLabel (rc_w, "ULab", args, n); + set_xmstring (w, XmNlabelString, mp->collabel); + if (mp->tip) + wtip (w, mp->tip); + XtManageChild (w); + + for (j = 0; j < U_NMOONS; j++) { + if (!mp->moononly || j > 0) { + char *sel; + + sel = XtMalloc (strlen(md[j].full) + strlen(mp->suffix)+2); + (void) sprintf (sel, "%s.%s", md[j].full, mp->suffix); + + n = 0; + XtSetArg (args[n], XmNuserData, sel); n++; + w = XmCreatePushButton(rc_w, "UPB", args, n); + XtAddCallback(w, XmNactivateCallback, um_activate_cb, 0); + u_w[j][mp->col] = w; + } else { + n = 0; + w = XmCreateLabel(rc_w, "UPB", args, n); + set_xmstring (w, XmNlabelString, " "); + } + XtManageChild (w); + } + } + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, rc_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (usform_w, "Sep1", args, n); + XtManageChild (sep_w); + + /* make a date/time stamp */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sdt_w = XmCreateLabel (usform_w, "JDateStamp", args, n); + wtip (sdt_w, "Date and Time for which data are computed"); + XtManageChild (sdt_w); + + /* make a separator */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sdt_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + sep_w = XmCreateSeparator (usform_w, "Sep2", args, n); + XtManageChild (sep_w); + + /* make the close button */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNtopWidget, sep_w); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 5); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 30); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 70); n++; + w = XmCreatePushButton (usform_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, um_sstats_close_cb, 0); + wtip (w, "Close this dialog"); + XtManageChild (w); +} + +/* create utform_w, the top view dialog */ +static void +um_create_tvform_w() +{ + Arg args[20]; + int n; + + /* create form */ + n = 0; + XtSetArg (args[n], XmNautoUnmanage, False); n++; + XtSetArg (args[n], XmNdefaultPosition, False); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + utform_w = XmCreateFormDialog (ushell_w, "UranusTV", args, n); + set_something (utform_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (utform_w, XmNunmapCallback, ut_unmap_cb, 0); + XtAddCallback (utform_w, XmNmapCallback, ut_map_cb, NULL); + + /* set some stuff in the parent DialogShell. + * setting XmNdialogTitle in the Form didn't work.. + */ + n = 0; + XtSetArg (args[n], XmNtitle, "xephem Uranus top view"); n++; + XtSetValues (XtParent(utform_w), args, n); + + /* fill with a drawing area in a frame */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + utframe_w = XmCreateFrame (utform_w, "JTVF", args, n); + XtManageChild (utframe_w); + + n = 0; + utda_w = XmCreateDrawingArea (utframe_w, "UranusTop", args, n); + XtAddCallback (utda_w, XmNexposeCallback, ut_da_exp_cb, NULL); + XtAddCallback (utda_w, XmNinputCallback, um_da_input_cb, + (XtPointer)SO_TOP); + XtManageChild (utda_w); +} + +/* go through all the buttons pickable for plotting and set whether they + * should appear to look like buttons or just flat labels. + */ +static void +um_set_buttons (whether) +int whether; /* whether setting up for plotting or for not plotting */ +{ + int i, j; + + for (i = 0; i < U_NMOONS; i++) + for (j = 0; j < CNum; j++) + if (u_w[i][j]) + buttonAsButton (u_w[i][j], whether); +} + +/* callback when the Close button is activated on the stats menu */ +/* ARGSUSED */ +static void +um_sstats_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (usform_w); +} + +/* callback when the More Info button is activated */ +/* ARGSUSED */ +static void +um_sstats_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtManageChild (usform_w); + um_set_buttons(um_selecting); +} + +/* callback when the control menu is becoming visible + */ +/* ARGSUSED */ +static void +um_cpdmapping_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtSetSensitive (tel_w, telIsOn()); +} + +/* callback from any of the option buttons. + * client points to global flag to set; some don't have any. + * in any case then just redraw everything. + */ +/* ARGSUSED */ +static void +um_option_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (client) { + int *flagp = (int *)client; + *flagp = XmToggleButtonGetState(w); + if (flagp == &topview) { + if (topview) { + if (!utform_w) + um_create_tvform_w(); + XtManageChild (utform_w); + } else + XtUnmanageChild (utform_w); + } + } + + um_update (mm_get_now(), 1); +} + +/* callback from the scales changing. + * just redraw everything. + */ +/* ARGSUSED */ +static void +um_scale_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + um_update (mm_get_now(), 1); +} + +/* callback from any of the data menu buttons being activated. + */ +/* ARGSUSED */ +static void +um_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (um_selecting) { + char *name; + get_something (w, XmNuserData, (XtArgVal)&name); + register_selection (name); + } +} + +/* callback from either expose or resize of the topview. + */ +/* ARGSUSED */ +static void +ut_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected uform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!ut_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (ut_pm) + XFreePixmap (dsp, ut_pm); + ut_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + ut_track_size(); + um_update (mm_get_now(), 1); + } else + XCopyArea (dsp, ut_pm, win, u_fgc, 0, 0, nx, ny, 0, 0); +} + +/* called whenever the topview scene is mapped. */ +/* ARGSUSED */ +static void +ut_map_cb (wid, client, call) +Widget wid; +XtPointer client; +XtPointer call; +{ + ut_track_size(); +} + +/* set the width of the topview DrawingArea the same as the main window's. + * we also try to center it just above, but it doesn't always work. + */ +static void +ut_track_size() +{ + Dimension w, h; + Position mfx, mfy, mdx, mdy; + Position sdy; + Arg args[20]; + int n; + + /* set widths equal */ + n = 0; + XtSetArg (args[n], XmNwidth, &w); n++; + XtGetValues (uda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNwidth, w); n++; + XtSetValues (utda_w, args, n); + + n = 0; + XtSetArg (args[n], XmNheight, &h); n++; + XtGetValues (utda_w, args, n); + + /* set locations -- allow for different stuff on top of drawingareas */ + n = 0; + XtSetArg (args[n], XmNx, &mfx); n++; + XtSetArg (args[n], XmNy, &mfy); n++; + XtGetValues (ushell_w, args, n); + n = 0; + XtSetArg (args[n], XmNx, &mdx); n++; + XtSetArg (args[n], XmNy, &mdy); n++; + XtGetValues (umframe_w, args, n); + n = 0; + XtSetArg (args[n], XmNy, &sdy); n++; + XtGetValues (utframe_w, args, n); + + n = 0; + XtSetArg (args[n], XmNx, mfx+mdx); n++; + XtSetArg (args[n], XmNy, mfy - h - sdy - mdy - 20); n++; + XtSetValues (utform_w, args, n); +} + +/* callback when topview dialog is unmapped */ +/* ARGSUSED */ +static void +ut_unmap_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmToggleButtonSetState (topview_w, False, True); +} + +/* callback when main shell is popped down */ +/* ARGSUSED */ +static void +um_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtUnmanageChild (usform_w); + XtUnmanageChild (utform_w); + + if (um_pm) { + XFreePixmap (XtDisplay(uda_w), um_pm); + um_pm = (Pixmap) NULL; + } + + /* free any field stars */ + if (fstars) { + free ((void *)fstars); + fstars = NULL; + nfstars = 0; + } + + /* stop movie that might be running */ + mm_movie (0.0); + + /* register we are now down */ + setXRes (um_viewupres(), "0"); +} + +/* callback from the main Close button */ +/* ARGSUSED */ +static void +um_close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* let popdown do all the work */ + XtPopdown (ushell_w); +} + +/* callback to add this scene to the movie loop */ +/* ARGSUSED */ +static void +um_mloop_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + ml_add (um_pm, dt_w); +} + +/* callback from the Movie button + */ +/* ARGSUSED */ +static void +um_anim_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* best effect if turn off worrying about the sky background */ + skybkg = 0; + XmToggleButtonSetState (skybkg_w, False, False); + + mm_movie (MOVIE_STEPSZ); +} + +/* callback from either expose or resize of the drawing area. + */ +/* ARGSUSED */ +static void +um_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static int last_nx, last_ny; + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + Window win = XtWindow(w); + Display *dsp = XtDisplay(w); + unsigned int nx, ny, bw, d; + Window root; + int x, y; + + /* filter out a few oddball cases */ + switch (c->reason) { + case XmCR_EXPOSE: { + /* turn off gravity so we get expose events for either shrink or + * expand. + */ + static int before; + XExposeEvent *e = &c->event->xexpose; + + if (!before) { + XSetWindowAttributes swa; + unsigned long mask = CWBitGravity | CWBackingStore; + + swa.bit_gravity = ForgetGravity; + swa.backing_store = NotUseful; /* we use a pixmap */ + XChangeWindowAttributes (dsp, win, mask, &swa); + before = 1; + } + + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected uform_w event. type=%d\n", c->reason); + abort(); + } + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + if (!um_pm || (int)nx != last_nx || (int)ny != last_ny) { + if (um_pm) + XFreePixmap (dsp, um_pm); + um_pm = XCreatePixmap (dsp, win, nx, ny, d); + last_nx = nx; + last_ny = ny; + if (topview) + ut_track_size(); + um_update (mm_get_now(), 1); + } else + XCopyArea (dsp, um_pm, win, u_fgc, 0, 0, nx, ny, 0, 0); +} + +/* callback from mouse or keyboard input over either drawing area. + * client is one of SOIdx. + */ +/* ARGSUSED */ +static void +um_da_input_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + ScreenObj *sop; + SOIdx soidx; + XEvent *ev; + int x, y; + + /* get x and y value iff it was from mouse button 3 */ + if (c->reason != XmCR_INPUT) + return; + ev = c->event; + if (ev->xany.type != ButtonPress || ev->xbutton.button != 3) + return; + x = ev->xbutton.x; + y = ev->xbutton.y; + + /* find something close on the screen */ + soidx = (SOIdx) client; + sop = close_screenobj (soidx, x, y); + if (!sop) + return; + + /* put info in popup, umpu_w, creating it first if necessary */ + if (!umpu_w) + um_create_popup(); + um_fill_popup (sop); + + /* put it on screen */ + XmMenuPosition (umpu_w, (XButtonPressedEvent *)ev); + XtManageChild (umpu_w); +} + +/* create the (unmanaged for now) popup menu in umpu_w. */ +static void +um_create_popup() +{ + static Widget *puw[] = { + &umpu_name_w, + &umpu_ra_w, + &umpu_dec_w, + &umpu_mag_w, + }; + Widget w; + Arg args[20]; + int n; + int i; + + n = 0; + XtSetArg (args[n], XmNisAligned, True); n++; + XtSetArg (args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + umpu_w = XmCreatePopupMenu (uda_w, "UPU", args, n); + + /* stack everything up in labels */ + for (i = 0; i < XtNumber(puw); i++) { + n = 0; + w = XmCreateLabel (umpu_w, "SPUL", args, n); + XtManageChild (w); + *puw[i] = w; + } +} + +/* put up a popup at ev with info about sop */ +static void +um_fill_popup (sop) +ScreenObj *sop; +{ + char *name; + double ra, dec, mag; + char buf[64], buf2[64]; + + name = sop->o.o_name; + mag = get_mag(&sop->o); + ra = sop->o.s_ra; + dec = sop->o.s_dec; + + (void) sprintf (buf2, "%.*s", MAXNM, name); + set_xmstring (umpu_name_w, XmNlabelString, buf2); + + fs_ra (buf, ra); + (void) sprintf (buf2, " RA: %s", buf); + set_xmstring (umpu_ra_w, XmNlabelString, buf2); + + fs_prdec (buf, dec); + (void) sprintf (buf2, " Dec: %s", buf); + set_xmstring (umpu_dec_w, XmNlabelString, buf2); + + (void) sprintf (buf2, " Mag: %.3g", mag); + set_xmstring (umpu_mag_w, XmNlabelString, buf2); +} + +/* callback from the Help all button + */ +/* ARGSUSED */ +static void +um_help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = { +"This is a simple schematic depiction of Uranus and its moons.", +}; + + hlp_dialog ("Uranus", msg, XtNumber(msg)); +} + +/* callback from a specific Help button. + * client is a string to use with hlp_dialog(). + */ +/* ARGSUSED */ +static void +um_helpon_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + hlp_dialog ((char *)client, NULL, 0); +} + +/* callback from the goto control. + */ +/* ARGSUSED */ +static void +um_goto_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Obj *op = db_basic (URANUS); + telGoto (op); +} + +/* add one entry to the given global screenobj array. + */ +static void +add_screenobj (soidx, op, x, y) +SOIdx soidx; +Obj *op; +int x, y; +{ + char *mem = (char *) screenobj[soidx]; + int nmem = nscreenobj[soidx]; + ScreenObj *sop; + + /* grow screenobj by one */ + if (mem) + mem = realloc ((char *)mem, (nmem+1)*sizeof(ScreenObj)); + else + mem = malloc (sizeof(ScreenObj)); + if (!mem) { + xe_msg (1, "Out of memory -- %s will not be pickable", op->o_name); + return; + } + screenobj[soidx] = (ScreenObj *) mem; + + sop = &screenobj[soidx][nscreenobj[soidx]++]; + + /* fill new entry */ + sop->o = *op; + sop->x = x; + sop->y = y; +} + +/* reclaim any existing screenobj entries from the given collection */ +static void +reset_screenobj(soidx) +SOIdx soidx; +{ + if (screenobj[soidx]) { + free ((char *)screenobj[soidx]); + screenobj[soidx] = NULL; + } + nscreenobj[soidx] = 0; +} + +/* find the entry in the given screenobj closest to [x,y] within MINR. + * if found return the ScreenObj *, else NULL. + */ +static ScreenObj * +close_screenobj (soidx, x, y) +SOIdx soidx; +int x, y; +{ + ScreenObj *scop = screenobj[soidx]; + ScreenObj *minsop = NULL; + int nobj = nscreenobj[soidx]; + int minr = 2*MINR; + int i; + + for (i = 0; i < nobj; i++) { + ScreenObj *sop = &scop[i]; + int r = abs(x - sop->x) + abs(y - sop->y); + if (r < minr) { + minr = r; + minsop = sop; + } + } + if (minr <= MINR) + return (minsop); + else + return (NULL); +} + +/* callback from Print control. + */ +/* ARGSUSED */ +static void +um_print_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XPSAsk ("Uranus", um_print); +} + +/* proceed to generate a postscript file. + * call XPSClose() when finished. + */ +static void +um_print () +{ + Display *dsp = XtDisplay (uda_w); + Now *np = mm_get_now(); + unsigned int w, h, bw, d; + Window root; + int x, y; + + if (!um_ison()) { + xe_msg (1, "Uranus must be open to save a file."); + XPSClose(); + return; + } + + watch_cursor(1); + + /* get size of the rendering area */ + XGetGeometry(dsp, um_pm, &root, &x, &y, &w, &h, &bw, &d); + + /* draw in an area 6.0w x 6.0h centered 1in down from top */ + if (w >= h) + XPSXBegin (um_pm, 0, 0, w, h, 1*72, 10*72, (int)(6.0*72)); + else { + int pw = (int)(72*6.0*w/h+.5); /* width on paper when 6.0 hi */ + XPSXBegin (um_pm, 0, 0, w, h, (int)((8.5*72-pw)/2), 10*72, pw); + } + + /* redraw */ + um_update (np, 1); + + /* no more X captures */ + XPSXEnd(); + + /* add some extra info */ + um_ps_annotate (np); + + /* finished */ + XPSClose(); + + watch_cursor(0); +} + +static void +um_ps_annotate (np) +Now *np; +{ + int ctrx = (int)(8.5*72/2); + Obj *eop = db_basic (SUN); + Obj *uop = db_basic (URANUS); + MoonData md[U_NMOONS]; + double tzmjd, usize; + char *bp, buf[256], buf2[32], dir[256]; + int n, x, y, i; + + /* compute md[0].x/y/z/mag/ra/dec and md[1..NM-1].x/y/z/mag info */ + sprintf (buf, "%s/auxil", getShareDir()); + bp = expand_home (buf); + uranus_data(mjd, bp, eop, uop, &usize, &pole_ra, &pole_dec, md); + + /* border */ + y = (int)AROWY(PRTR+.5); + sprintf (buf, "newpath 72 %d moveto 540 %d lineto stroke\n", y, y); + XPSDirect (buf); + + /* title */ + y = AROWY(PRTR-2); + if (pref_get(PREF_ZONE) == PREF_UTCTZ) { + tzmjd = mjd; + bp = "UTC"; + } else { + tzmjd = mjd-tz/24; + bp = tznm; + } + fs_time (buf, mjd_hr(tzmjd)); + fs_date (buf2, pref_get(PREF_DATE_FORMAT), mjd_day(tzmjd)); + sprintf(dir,"(XEphem Uranus View at %s %s %s, JD %13.5f) %d %d cstr\n", + buf, buf2, bp, mjd+MJD0, ctrx, y); + XPSDirect (dir); + + /* location if topocentric */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + char s, *site; + + bp = buf; + bp += sprintf (bp, "From "); + + site = mm_getsite(); + if (site) + bp += sprintf (bp, "%s at ", XPSCleanStr(site,strlen(site))); + + /* N.B. without the s= business the sign is printed wrong!! */ + + fs_sexa (buf2, raddeg(fabs(lat)), 3, 3600); + bp += sprintf (bp, "Latitude %s %c ", buf2, s=(lat<0 ? 'S' : 'N')); + + fs_sexa (buf2, raddeg(fabs(lng)), 4, 3600); + bp += sprintf (bp, "Longitude %s %c", buf2, s=(lng<0 ? 'W' : 'E')); + + sprintf (dir, "(%s) %d %d cstr\n", buf, ctrx, AROWY(PRTR-4)); + XPSDirect (dir); + } + + /* table heading */ + bp = buf; + bp += sprintf (bp, "%s ", pref_get(PREF_EQUATORIAL) == PREF_TOPO ? + "Topocentric" : "Geocentric"); + if (epoch == EOD) + bp += sprintf (bp, "Apparent EOD"); + else { + double tmp; + mjd_year (epoch, &tmp); + bp += sprintf (bp, "Astrometric %.2f", tmp); + } + y = AROWY(PRTR-5); + sprintf (dir, "(%s Moon Positions, XYZ in Uranus radii) %d %d cstr\n", + buf, ctrx,y); + XPSDirect (dir); + + /* stats for each row */ + for (i = 0; i < U_NMOONS; i++) { + y = AROWY(PRTR-7-i); + x = 75; + + if (i == 0) { + sprintf (dir, "(Tag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + if (md[i].tag) { + n = sprintf (buf, "%-3s", md[i].tag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } else + n = 3; + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Name) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%-8s", md[i].full); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].evis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].svis); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(P) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].pshad); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(T) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%1.0f ", (double)md[i].trans); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( X +E) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].x); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Y +S) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].y); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Z +front) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + n = sprintf (buf, "%7.3f ", md[i].z); + if (i > 0) { + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( RA) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, radhr(md[i].ra), 2, 360000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "( Dec) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + fs_sexa (buf, raddeg(md[i].dec), 3, 36000); + n = 11; + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + x += n*PRCW; + + if (i == 0) { + sprintf (dir, "(Mag) %d %d lstr\n", x, AROWY(PRTR-6-i)); + XPSDirect (dir); + } + sprintf (buf, "%4.1f ", md[i].mag); + sprintf (dir, "(%s) %d %d lstr\n", buf, x, y); + XPSDirect (dir); + } +} + +/* given the loc of the moons, draw a nifty little picture. + * also save resulting screen locs of everything in the screenobj array. + * scale of the locations is in terms of Uranus radii == 1. + * unflipped view is S up, E right. + * planet itself is in md[0], moons in md[1..NM-1]. + * +md[].x: East, u radii + * +md[].y: South, u radii + * +md[].z: in front, u radii + */ +static void +um_draw_map (w, uop, usize, md) +Obj *uop; +Widget w; +double usize; +MoonData md[U_NMOONS]; +{ + Display *dsp = XtDisplay(w); + Window win; + Window root; + double scale; + int sv; + int fmag; + char c; + int x, y; + unsigned int nx, ny, bw, d; + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + int scale1; + int i; + + /* first the main graphic */ + win = XtWindow (uda_w); + + XmScaleGetValue (limmag_w, &fmag); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + /* get size and erase */ + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, um_pm, u_bgc, 0, 0, nx, ny); + scale1 = (int)floor(MAPSCALE(1)+0.5); + + /* prepare for a new list of things on the screen */ + reset_screenobj(SO_MAIN); + reset_screenobj(SO_SHADOW); + + /* draw Uranus in center with unit radius */ + XPSFillArc(dsp, um_pm, u_fgc, nx/2-scale1, ny/2-scale1, 2*scale1-1, + 2*scale1-1, 0, 360*64); + add_screenobj (SO_MAIN, uop, nx/2, ny/2); + + /* draw background objects, if desired. + * go out plenty wide to pick up moon during occultations. + */ + if (skybkg) + sky_background(um_pm, nx, ny, fmag, md[0].ra, md[0].dec, + usize/MAPSCALE(2), degrad(.5), flip_tb, flip_lr); + + /* draw labels */ + c = flip_lr ? 'W' : 'E'; + XPSDrawString(dsp, um_pm, u_fgc, nx-u_cw-1, ny/2-2, &c, 1); + c = flip_tb ? 'N' : 'S'; + XPSDrawString(dsp, um_pm, u_fgc, (nx-u_cw)/2-1, u_fs->ascent, &c, 1); + + /* draw 1' calibration line */ + if (tags) + u_calibline (dsp, um_pm, u_fgc, nx/2, 5*ny/6, "1'", u_cw*2, u_ch+4, + (int)MAPSCALE(degrad(1.0/60.0)/(usize/2))); + + /* draw each moon and shadow + */ + for (i = 1; i < U_NMOONS; i++) { + double mx = md[i].x; + double my = md[i].y; + double mag = md[i].mag; + int diam; + Obj o; + + /* skip if behind or in shadow */ + if (!md[i].evis || !md[i].svis) + continue; + + diam = magdiam (fmag, 1, usize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + /* moon */ + x = XCORD(mx); + y = YCORD(my); + if (diam == 1) + XPSDrawPoint(dsp, um_pm, u_xgc, x, y); + else + XPSDrawStar (dsp, um_pm, u_xgc, x-diam/2, y-diam/2, diam); + + /* add moon to list of screen objects drawn */ + memset (&o, 0, sizeof(o)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_MAIN, &o, x, y); + + /* shadow, if in front */ + if (md[i].pshad) { + int scx = XCORD(md[i].sx); + int scy = YCORD(md[i].sy); + + XPSDrawStar (dsp, um_pm, u_bgc, scx-diam/2, scy-diam/2, diam); + sprintf (o.o_name, "%s shadow", md[i].full); + add_screenobj (SO_SHADOW, &o, scx, scy); + } + + if (tags && md[i].tag) + XPSDrawString(dsp, um_pm, u_xgc, x-u_cw/2, y+2*u_ch, + md[i].tag, strlen(md[i].tag)); + } + + ano_draw (uda_w, um_pm, um_ano, 0); + + XCopyArea (dsp, um_pm, win, u_fgc, 0, 0, nx, ny, 0, 0); + + /* then the top view, if desired */ + + if (!topview || !ut_pm) /* let expose make new pixmap */ + return; + + /* get size and erase */ + win = XtWindow (utda_w); + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XFillRectangle (dsp, ut_pm, u_bgc, 0, 0, nx, ny); + + /* draw Uranus in center with unit radius */ + i = (int)(ew*64*raddeg(asin(sin(degrad(uop->s_elong))/uop->s_sdist))); + XPSFillArc(dsp, ut_pm, u_fgc, nx/2-scale1, ny/2-scale1, 2*scale1-1, + 2*scale1-1, -i, -180*64); + reset_screenobj(SO_TOP); + add_screenobj (SO_TOP, uop, nx/2, ny/2); + + /* draw each moon + */ + for (i = 1; i < U_NMOONS; i++) { + double mx = md[i].x; + double mz = md[i].z; + double mag = md[i].mag; + int diam; + Obj o; + + if (!md[i].svis) + continue; + + diam = magdiam (fmag, 1, usize/(2*scale1), mag, 0.0); + if (brmoons) + diam += 3; + if (diam <= 0) + continue; /* too faint */ + + x = XCORD(mx); + y = ZCORD(mz); + if (diam == 1) + XDrawPoint (dsp, ut_pm, u_xgc, x, y); + else + XFillArc (dsp, ut_pm, u_xgc, x-diam/2, y-diam/2, diam, diam, + 0, 360*64); + + /* add object to list of screen objects drawn */ + memset (&o, 0, sizeof(o)); + (void) strcpy (o.o_name, md[i].full); + set_smag (&o, mag); + o.s_ra = (float)md[i].ra; + o.s_dec = (float)md[i].dec; + add_screenobj (SO_TOP, &o, x, y); + + if (tags && md[i].tag) + XDrawString(dsp, ut_pm, u_xgc, x-u_cw/2, y+2*u_ch, + md[i].tag, strlen(md[i].tag)); + } + + /* draw label towards earth */ + if (tags) { + XPoint xp[5]; + + XDrawString(dsp, ut_pm, u_fgc, nx/2, ny-u_ch, "Earth", 5); + xp[0].x = nx/2 - 15; xp[0].y = ny - 2*u_ch; + xp[1].x = 0; xp[1].y = 3*u_ch/2; + xp[2].x = -5; xp[2].y = -3*u_ch/4; + xp[3].x = 10; xp[3].y = 0; + xp[4].x = -5; xp[4].y = 3*u_ch/4; + XDrawLines (dsp, ut_pm, u_fgc, xp, 5, CoordModePrevious); + } + + ano_draw (utda_w, ut_pm, ut_ano, 0); + + XCopyArea (dsp, ut_pm, win, u_fgc, 0, 0, nx, ny, 0, 0); +} + +/* convert uranus X/Y to/from X windows coords depending on w2x. + * return whether visible. + */ +static int +um_ano (double *uX, double *uY, int *xp, int *yp, int w2x, int arg) +{ + Display *dsp = XtDisplay (uda_w); + Window win = XtWindow (uda_w); + int ns = flip_tb ? -1 : 1; + int ew = flip_lr ? -1 : 1; + unsigned int nx, ny, bw, d; + Window root; + double scale; + int x, y; + int sv; + + XGetGeometry(dsp, win, &root, &x, &y, &nx, &ny, &bw, &d); + XmScaleGetValue (scale_w, &sv); + scale = pow(MAXSCALE, sv/100.0); + + if (w2x) { + *xp = XCORD(*uX); + *yp = YCORD(*uY); + } else { + *uX = 2*NORM*(*xp-(int)nx/2.0)/(ew*(int)nx*scale); + *uY = 2*NORM*((int)ny/2.0-*yp)/(ns*(int)ny*scale); + } + + return (*xp>=0 && *xp=0 && *yp=0 && *xp=0 && *ypmax_bounds.width; + u_ch = u_fs->max_bounds.ascent + u_fs->max_bounds.descent; + + gcm = GCForeground | GCFont; + get_color_resource (toplevel_w, "uranusColor", &fg); + gcv.foreground = fg; + gcv.font = u_fs->fid; + u_fgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground; + get_color_resource (toplevel_w, "UranusBackground", &bg); + gcv.foreground = bg; + u_bgc = XCreateGC (dsp, win, gcm, &gcv); + + gcm = GCForeground | GCFunction | GCFont; + fsp = getXResFont ("moonsFont"); + gcv.foreground = fg ^ bg; + gcv.function = GXxor; + gcv.font = fsp->fid; + u_xgc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* draw a calibration line l pixels long centered at [xc,yc] marked with tag + * with is in a bounding box tw x th. + */ +static void +u_calibline (dsp, win, gc, xc, yc, tag, tw, th, l) +Display *dsp; +Drawable win; +GC gc; +int xc, yc; +char *tag; +int tw, th; +int l; +{ + int lx = xc - l/2; + int rx = lx + l; + int i; + + XPSDrawLine (dsp, win, gc, lx, yc, rx, yc); + + for (i = 0; i <= 6; i++) { + int x = lx+i*l/6; + int dy = 3 + ((i%6)?0:3); + + XPSDrawLine (dsp, win, gc, x, yc-dy, x, yc+dy); + } + + XPSDrawString (dsp, win, gc, xc-tw/2, yc+th, tag, strlen(tag)); +} + +/* draw all database objects in a small sky patch about the given center. + * get field stars too if enabled and we have moved enough. + * save objects and screen locs in the global screenobj array for picking. + * this is used to draw the backgrounds for the planet closeups. + * Based on work by: Dan Bruton + */ +static void +sky_background (win, w, h, fmag, ra0,dec0,scale,rad,fliptb,fliplr) +Drawable win; /* window to draw on */ +unsigned w, h; /* window size */ +int fmag; /* faintest magnitude to display */ +double ra0, dec0; /* center of patch, rads */ +double scale; /* rads per pixel */ +double rad; /* maximum radius to draw away from ra0/dec0, rads */ +int fliptb, fliplr; /* flip direction; default is S up E right */ +{ + static int before; + double cdec0 = cos(dec0); + DBScan dbs; + Obj *op; + double hfov = w * scale; + double vfov = h * scale; + + if (!before && pref_get(PREF_EQUATORIAL) == PREF_GEO) { + xe_msg (1, + "Equatorial preference should probably be set to Topocentric"); + before = 1; + } + + /* update field star list */ + um_loadfs (ra0, dec0); + + /* scan the database and draw whatever is near */ + for (db_scaninit(&dbs, ALLM, fstars, nfstars); + (op = db_scan (&dbs)) != NULL; ) { + double dra, ddec; + GC gc; + int dx, dy, x, y; + int diam; + + if (is_planet (op, URANUS)) { + /* we draw it elsewhere */ + continue; + } + + db_update (op); + + /* find size, in pixels. */ + diam = magdiam (fmag, 1, scale, get_mag(op), + degrad(op->s_size/3600.0)); + if (diam <= 0) + continue; + + /* find x/y location if it's in the general area */ + dra = op->s_ra - ra0; /* + E */ + ddec = dec0 - op->s_dec; /* + S */ + if (fabs(ddec) > rad || delra(dra)*cdec0 > rad) + continue; + dx = (int)(dra/scale); + dy = (int)(ddec/scale); + x = fliplr ? (int)w/2-dx : (int)w/2+dx; + y = fliptb ? (int)h/2+dy : (int)h/2-dy; + + /* pick a gc */ + obj_pickgc(op, toplevel_w, &gc); + + /* draw 'er */ + sv_draw_obj_x (XtD, win, gc, op, x, y, diam, 0, fliptb, !fliplr, 0, 1, dec0, ra0, vfov, hfov, w, h); + + /* save 'er */ + add_screenobj (SO_MAIN, op, x, y); + } + + sv_draw_obj (XtD, win, (GC)0, NULL, 0, 0, 0, 0); /* flush */ +} + +/* load field stars around the given location, unless current set is + * already close enough. + */ +static void +um_loadfs (ra, dec) +double ra, dec; +{ + Now *np = mm_get_now(); + + if (fstars && fabs(dec-fsdec) 0) { + xe_msg (0, "Uranus View added %d field stars", nfstars); + fsdec = dec; + fsra = ra; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: uranusmenu.c,v $ $Date: 2012/07/07 18:04:42 $ $Revision: 1.52 $ $Name: $"}; diff --git a/GUI/xephem/usno.c b/GUI/xephem/usno.c new file mode 100644 index 0000000..b0ab93f --- /dev/null +++ b/GUI/xephem/usno.c @@ -0,0 +1,416 @@ +/* USNOSetup(): call to change options and base directories. + * USNOFetch(): return an array of ObjF matching the given criteria. + * based on sample code in demo.tar on SA1.0 CDROM and info in read.use. + */ + +#include +#include +#include +#include +#include + +#include "xephem.h" + +#define CATBPR 12 /* bytes per star record in .cat file */ +#define ACCBPR 30 /* bytes per record in .acc file */ + +typedef unsigned int UI; +typedef unsigned char UC; + +/* One Field star */ +typedef struct { + float ra, dec; /* J2000, rads */ + float mag; /* magnitude */ +} FieldStar; + +/* an array of ObjF which can be grown efficiently in mults of NINC */ +typedef struct { + ObjF *mem; /* malloced array */ + int used; /* number actually in use */ + int max; /* cells in mem[] */ +} StarArray; + +#define NINC 16 /* grow StarArray array this many at a time */ + +static int corner (double r0, double d0, double rov, int *nr, double fr[2], + double lr[2], int *nd, double fd[2], double ld[2], int zone[2], char msg[]); +static int fetchSwath (int zone, double maxmag, double fr, double lr, + double fd, double ld, StarArray *sap, char msg[]); +static int crackCatBuf (UC buf[CATBPR], FieldStar *fsp); +static int addGS (StarArray *sap, FieldStar *fsp); + +static char *cdpath; /* where CD rom is mounted */ +static int nogsc; /* set to 1 to exclude GSC stars */ + +/* save the path to the base of the cdrom. + * test for some reasonable entries. + * return 0 if looks ok, else -1 and reason in msg[]. + */ +int +USNOSetup (cdp, wantgsc, msg) +char *cdp; +int wantgsc; +char msg[]; +{ + char tstname[1024]; + FILE *fp = NULL; + int n; + + /* look for any legal zone*.cat file (this allows for A CDs) */ + for (n = 0; n <= 1725; n += 75) { + (void) sprintf (tstname, "%s/zone%04d.cat", cdp, n); + fp = fopenh (tstname, "r"); + if (fp) + break; + } + if (!fp) { + sprintf (msg, "No zone files in %s: %s", cdp, syserrstr()); + return (-1); + } + fclose (fp); + + /* store our own copy of path */ + if (cdpath) + free (cdpath); + cdpath = malloc (strlen(cdp) + 1); + strcpy (cdpath, cdp); + + /* store GSC flag */ + nogsc = !wantgsc; + + /* probably ok */ + return (0); + +} + +/* create or add to a malloced array of ObjF at *opp in the given region and + * return the new total count. + * if opp == NULL we don't malloc anything but just do the side effects; + * else *opp already has nopp ObjF in it (it's ok if *opp == NULL). + * we return new total number of stars or -1 if real trouble. + * *opp is only changed if we added any. + * msg might contain a message regardless of the return value. + */ +int +USNOFetch (r0, d0, fov, fmag, opp, nopp, msg) +double r0; /* center RA, rads */ +double d0; /* center Dec, rads */ +double fov; /* field of view, rads */ +double fmag; /* faintest mag */ +ObjF **opp; /* *opp will be a malloced array of the ObjF in region */ +int nopp; /* if opp: initial number of ObjF already in *opp */ +char msg[]; /* filled with error message if return -1 */ +{ + double fr[2], lr[2]; /* first and last ra in each region, up to 2 */ + double fd[2], ld[2]; /* first and last dec in each region, up to 2 */ + int nr, nd; /* number of ra and dec regions, max 2 each */ + int zone[2]; /* zone for filename, up to 2 */ + double rov; /* radius of view, degrees */ + StarArray sa; /* malloc accumulator */ + int i, j, s; + + /* insure there is a cdpath set up */ + if (!cdpath) { + strcpy (msg, "USNOFetch() called before USNOSetup()"); + return (-1); + } + + /* convert to cdrom units */ + r0 = raddeg(r0); + d0 = raddeg(d0); + rov = raddeg (fov)/2; + if (rov >= 7.5) { + xe_msg (0, "USNO FOV being cut to 15 degrees"); + rov = 7.5; + } + + /* find the files to use and ranges in each */ + i = corner (r0, d0, rov, &nr, fr, lr, &nd, fd, ld, zone, msg); + if (i < 0) + return (-1); + + /* init the array. + * max == -1 will mean we just keep a count but don't build the array. + */ + if (opp) { + sa.mem = *opp; + sa.used = nopp; + sa.max = nopp; + } else { + sa.mem = NULL; + sa.used = 0; + sa.max = -1; + } + + /* fetch each chunk, adding to sa */ + for (i = 0; i < nd; i++) { + for (j = 0; j < nr; j++) { + s = fetchSwath(zone[i],fmag,fr[j],lr[j],fd[i],ld[i],&sa,msg); + if (s < 0) { + /* array has likely moved */ + if (opp && sa.mem) + *opp = sa.mem; + return (-1); + } + } + } + + /* pass back to caller if interested else just toss */ + if (opp && sa.mem) + *opp = sa.mem; + else if (sa.mem) + free ((void *)sa.mem); + + return (sa.used); +} + +static int +corner (double r0, double d0, double rov, int *nr, double fr[2], double lr[2], +int *nd, double fd[2], double ld[2], int zone[2], char msg[]) +{ + double x1, x2; + int z1, z2; + int z, j; + + /* find limits on ra, taking care at poles and if span 24h */ + if (d0 - rov <= -90.0 || d0 + rov >= 90.0) { + x1 = 0.0; + x2 = 360.0; + } else { + double cd = cos(degrad(d0)); + x1 = r0 - rov/cd; + x2 = r0 + rov/cd; + } + if (x1 < 0.0) { + *nr = 2; + fr[0] = 0.0; + lr[0] = x2; + fr[1] = 360.0 + x1; + lr[1] = 360.0; + } else if (x2 > 360.0) { + *nr = 2; + fr[0] = 0.0; + lr[0] = x2 - 360.0; + fr[1] = x1; + lr[1] = 360.0; + } else { + *nr = 1; + fr[0] = x1; + lr[0] = x2; + } + + /* find dec limits and zones */ + x1 = d0 - rov; + if (x1 < -90.0) + x1 = -90.0; + x2 = d0 + rov; + if (x2 >= 90.0) + x2 = 90.0 - 1./1e5; + z1 = (int)floor((x1 + 90.0)/7.5); + z2 = (int)floor((x2 + 90.0)/7.5); + *nd = z2 - z1 + 1; + if (*nd > 2) { + *nd = 2; + z2 = z1 + 1; + /* + sprintf (msg, "No! ndec = %d", *nd); + return (-1); + */ + } + j = 0; + for (z = z1; z <= z2; z++) { + double dmin = z*7.5 - 90.0; + double dmax = dmin+7.5; + zone[j] = z*75; + fd[j] = x1 > dmin ? x1 : dmin; + ld[j] = x2 < dmax ? x2 : dmax; + j++; + } + + return (0); +} + +static int +fetchSwath (int zone, double maxmag, double fr, double lr, double fd, +double ld, StarArray *sap, char msg[]) +{ + char fn[1024]; + char buf[ACCBPR]; + UC catbuf[CATBPR]; + FieldStar fs; + long frec; + long os; + FILE *fp; + + /* read access file for position in catalog file */ + sprintf (fn, "%s/zone%04d.acc", cdpath, zone); + fp = fopenh (fn, "r"); + if (fp == NULL) { + sprintf (msg, "%s: %s", fn, syserrstr()); + return (-1); + } + os = ACCBPR*(long)floor(fr/3.75); + if (fseek (fp, os, SEEK_SET) < 0) { + sprintf (msg, "%s: fseek(%ld): %s", fn, (long)os, syserrstr()); + fclose (fp); + return (-1); + } + if (fread (buf, ACCBPR, 1, fp) != 1) { + sprintf (msg, "%s: fread(@%ld): %s", fn, (long)os,syserrstr()); + fclose (fp); + return (-1); + } + fclose (fp); + if (sscanf (buf, "%*f %ld", &frec) != 1) { + sprintf (msg, "%s: sscanf(%s)", fn, buf); + return (-1); + } + + /* open and position the catalog file */ + sprintf (fn, "%s/zone%04d.cat", cdpath, zone); + fp = fopenh (fn, "r"); + if (fp == NULL) { + sprintf (msg, "%s: %s", fn, syserrstr()); + return (-1); + } + os = (long)(frec-1)*CATBPR; + if (fseek (fp, os, SEEK_SET) < 0) { + sprintf (msg, "%s: fseek(%ld): %s", fn, (long)os, syserrstr()); + fclose (fp); + return (-1); + } + + /* now want in rads */ + fr = degrad(fr); + lr = degrad(lr); + fd = degrad(fd); + ld = degrad(ld); + + /* read until end or find star with RA larger than lr */ + while (fread (catbuf, CATBPR, 1, fp) == 1) { + os += CATBPR; + if (crackCatBuf (catbuf, &fs)==0 && fs.mag<=maxmag && fs.ra>=fr + && fs.ra<=lr && fs.dec>=fd && fs.dec<=ld) { + if (addGS (sap, &fs) < 0) { + sprintf (msg, "No more memory"); + fclose (fp); + return (-1); + } + } + + /* sorted by ra so finished when hit upper limit */ + if (fs.ra > lr) + break; + } + + /* finished */ + fclose (fp); + + /* ok*/ + return (0); +} + +/* crack the star field in buf. + * return 0 if ok, else -1. + */ +static int +crackCatBuf (UC buf[CATBPR], FieldStar *fsp) +{ +#define BEUPACK(b) (((UI)((b)[0])<<24) | ((UI)((b)[1])<<16) | ((UI)((b)[2])<<8)\ + | ((UI)((b)[3]))) + double ra, dec; + int red, blu; + UI mag; + + /* first 4 bytes are packed RA, big-endian */ + ra = BEUPACK(buf)/(100.0*3600.0*15.0); + fsp->ra = (float)hrrad(ra); + + /* next 4 bytes are packed Dec, big-endian */ + dec = BEUPACK(buf+4)/(100.0*3600.0) - 90.0; + fsp->dec = (float)degrad(dec); + + /* last 4 bytes are packed mag info -- can lead to rejection */ + mag = BEUPACK(buf+8); + if (mag & 0x8000) { + /* negative means corresponding GSC */ + if (nogsc) + return (-1); + mag &= 0x7fffffff; /* 1's or 2's comp?? */ + } + if (mag/1000000000 != 0) + return (-1); /* poor magnitudes */ + red = mag % 1000u; /* lower 3 digits */ + blu = (mag/1000u)%1000u;/* next 3 digits up */ + if (red > 250) { + if (blu > 250) + return (-1); + else + fsp->mag = (float)(blu/10.); + } else + fsp->mag = (float)(red/10.); + + return (0); +} + +/* add fsp to sa as another ObjF. + * return -1 if no more memory, else 0. + */ +static int +addGS (StarArray *sap, FieldStar *fsp) +{ + char rstr[32], dstr[32]; + Obj *op; + + /* if max < 0, we are just counting */ + if (sap->max < 0) + return (0); + + /* get next entry, mallocing if fresh out */ + if (sap->used == sap->max) { + char *newmem = (char *)sap->mem; + int nbytesnow = sap->max * sizeof(ObjF); + int morebytes = NINC * sizeof(ObjF); + + newmem = newmem ? realloc (newmem, nbytesnow + morebytes) + : malloc (morebytes); + if (!newmem) + return (-1); + zero_mem (newmem + nbytesnow, morebytes); + sap->mem = (ObjF *)newmem; + sap->max += NINC; + } + + /* next ObjF */ + op = (Obj *) &sap->mem[sap->used++]; + + /* make up a fixed name */ + fs_sexa (rstr, radhr(fsp->ra), 2, 3600); + if (rstr[0] == ' ') rstr[0] = '0'; + memmove (rstr+2, rstr+3, 2); + memmove (rstr+4, rstr+6, 3); + fs_sexa (dstr, raddeg(fsp->dec), 3, 3600); + if (dstr[1] == ' ') { dstr[0] = '+'; dstr[1] = '0'; } + if (dstr[1] == '-') { dstr[0] = '-'; dstr[1] = '0'; } + if (dstr[0] == ' ') dstr[0] = '+'; + memmove (dstr+3, dstr+4, 2); + memmove (dstr+5, dstr+7, 3); + if (sprintf (op->o_name, "USNO %s%s", rstr, dstr) >= MAXNM) { + printf ("Bug! USNO name format too long\n"); + abort(); + } + + /* other info */ + op->o_type = FIXED; + op->f_class = 'S'; + op->f_RA = fsp->ra; + op->f_dec = fsp->dec; + op->f_epoch = J2000; + set_fmag (op, fsp->mag); + + /* ok */ + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: usno.c,v $ $Date: 2004/05/05 17:43:32 $ $Revision: 1.15 $ $Name: $"}; diff --git a/GUI/xephem/versionmenu.c b/GUI/xephem/versionmenu.c new file mode 100644 index 0000000..6c062b1 --- /dev/null +++ b/GUI/xephem/versionmenu.c @@ -0,0 +1,537 @@ +/* code to manage the stuff on the version display. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +extern char helpcategory[]; + +static void v_create_vshell (void); +static void fill_msg (Widget w); +static void v_popdown_cb (Widget w, XtPointer client, XtPointer call); +static void v_ok_cb (Widget w, XtPointer client, XtPointer call); +static void v_da_exp_cb (Widget w, XtPointer client, XtPointer call); +static void v_draw (void); +static void v_timer_cb (XtPointer client, XtIntervalId *id); +static void drawComet (Display *dsp, Window win, GC gc, double ang, int rad, + int tlen, int w, int h); +static void drawPlanet (Display *dsp, Window win, GC gc, int sx, int sy, + int w, int h); +static void v_define_gc (void); + +/* text message */ +static char *msg[] = { +"", +"XEphem", +"\"eks i 'fem\"", +"", +"An Interactive Astronomical Ephemeris Program for the X Window System", +"+", +"", +"MIT License", +"", +"Copyright (c) 2021 Elwood Charles Downey", +"", +"Permission is hereby granted, free of charge, to any person obtaining a copy", +"of this software and associated documentation files (the "Software"), to deal", +"in the Software without restriction, including without limitation the rights", +"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", +"copies of the Software, and to permit persons to whom the Software is", +"furnished to do so, subject to the following conditions:", +"", +"The above copyright notice and this permission notice shall be included in all", +"copies or substantial portions of the Software.", +"", +"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE", +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", +"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", +"SOFTWARE.", +}; + + +#define NMSGR XtNumber(msg) /* number of rows in message text */ + +/* generate a random number between min and max, of the same type as the + * highest type of either. + */ +#define RAND(min,max) (((rand() & 0xfff)*((max)-(min))/0xfff) + min) + +static Widget vshell_w; /* main shell */ +static Widget vda_w; /* drawing area for mock solar system */ +static XtIntervalId v_timer_id; /* timer for ss motion */ +static GC v_gc; /* drawing GC */ +Pixel fg_p, bg_p; /* two colors */ +static double rotrate; /* rotation rate - filled on first manage */ + +/* table of circular orbit radii to portray and the last screen coords. + * the real solar system has planet radii from .3 to 30, but the 100:1 ratio is + * so large we don't try and include everything. + */ +typedef struct { + double r; /* radius, AU */ + double theta; /* angle */ + int x, y; /* last X x,y coord drawn */ +} Orbit; + +#define UNDEFX (-1) /* value of x when never drawn yet */ +static Orbit orbit[] = { + {1.6, 0.0, UNDEFX, 0}, + {5.4, 0.0, UNDEFX, 0}, + {10., 0.0, UNDEFX, 0}, + {19., 0.0, UNDEFX, 0}, + {30., 0.0, UNDEFX, 0} +}; +#define NORBIT (sizeof(orbit)/sizeof(orbit[0])) +#define MAXRAD (orbit[NORBIT-1].r) /* N.B.use orbit[] with largest radius*/ +#define MINRAD (orbit[0].r) /* N.B. use orbit[] with smallest radius */ +#define PR 4 /* radius of planet, pixels */ +#define DT 100 /* pause between screen steps, ms */ +#define NSTARS 100 /* number of background stars to sprinkle in */ +#define DPI 30 /* inner orbit motion per step, degrees*/ +#define TXTCOLS 77 /* text columns wide */ + +/* comet state and info */ +#define CMAXPERI 30 /* max comet perihelion, pixels */ +#define CMAXTAIL 50 /* max comet tail length, pixels */ +#define CMINTAIL 3 /* min comet tail length, pixels */ +#define CMAXDELA 20 /* max comet area per step, sqr pixels */ +#define CMINDELA 10 /* min comet area per step, sqr pixels */ + +static double angle; /* angle ccw from straight right, rads */ +static double rotation; /* whole scene rot, rads */ +static int radius; /* dist from sun, pixels (0 means undefined) */ +static int taillen; /* tail length, pixels */ +static int delta_area; /* change in area per step, sqr pixels */ +static int perihelion; /* min dist from sun, pixels */ +static int maxtail; /* max tail len (ie, tail@peri), pixels */ + +/* called when mainmenu "About.." help is selected. + */ +void +version() +{ + /* make the version form if this is our first time. + * also take this opportunity to do things once to init the + * planet locations and set the rotation rate. + */ + if (!vshell_w) { + int i; + v_create_vshell(); + for (i = 0; i < NORBIT; i++) + orbit[i].theta = RAND(0,2*PI); + rotrate = degrad(DPI)/pow(MINRAD/MAXRAD, -3./2.); + } + + XtPopup (vshell_w, XtGrabNone); + set_something (vshell_w, XmNiconic, (XtArgVal)False); +} + +/* called to put up or remove the watch cursor. */ +void +v_cursor (c) +Cursor c; +{ + Window win; + + if (vshell_w && (win = XtWindow(vshell_w)) != 0) { + Display *dsp = XtDisplay(vshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* make the v_w widget. + */ +static void +v_create_vshell() +{ + Widget pw_w; + Widget vform_w; + Widget ok_w; + Widget frame_w; + Widget text_w; + XmString str; + Arg args[20]; + int n; + + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle, "xephem About"); n++; + XtSetArg (args[n], XmNiconName, "About"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + vshell_w = XtCreatePopupShell ("About", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (vshell_w); + set_something (vshell_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (vshell_w, XmNpopdownCallback, v_popdown_cb, 0); + sr_reg (vshell_w, "XEphem*About.x", helpcategory, 0); + sr_reg (vshell_w, "XEphem*About.y", helpcategory, 0); + + /* put text in top of paned window, DA and Ok in bottom */ + + n = 0; + pw_w = XmCreatePanedWindow (vshell_w, "VPW", args, n); + XtManageChild (pw_w); + + /* make text widget for the version info */ + + XtSetArg (args[n], XmNscrolledWindowMarginWidth, 10); n++; + XtSetArg (args[n], XmNscrolledWindowMarginHeight, 10); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; + XtSetArg (args[n], XmNcursorPositionVisible, False); n++; + XtSetArg (args[n], XmNeditable, False); n++; + XtSetArg (args[n], XmNcolumns, TXTCOLS); n++; + XtSetArg (args[n], XmNrows, NMSGR+1); n++; + text_w = XmCreateScrolledText (pw_w, "VText", args, n); + fill_msg (text_w); + XtManageChild (text_w); + + /* form for the DA and Ok PB */ + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + XtSetArg (args[n], XmNhorizontalSpacing, 10); n++; + vform_w = XmCreateForm (pw_w, "AF", args, n); + XtManageChild (vform_w); + + /* make the "Ok" push button */ + + str = XmStringCreate("Ok", XmSTRING_DEFAULT_CHARSET); + n = 0; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 5); n++; + XtSetArg (args[n], XmNlabelString, str); n++; + ok_w = XmCreatePushButton (vform_w, "VOk", args, n); + XtAddCallback (ok_w, XmNactivateCallback, v_ok_cb, NULL); + XtManageChild (ok_w); + XmStringFree (str); + + /* make a frame for the drawing area */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNbottomWidget, ok_w); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 20); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 80); n++; + XtSetArg (args[n], XmNshadowType, XmSHADOW_ETCHED_OUT); n++; + frame_w = XmCreateFrame (vform_w, "VFrame", args, n); + XtManageChild (frame_w); + + /* make a drawing area for drawing the solar system */ + + n = 0; + XtSetArg (args[n], XmNheight, 150); n++; + vda_w = XmCreateDrawingArea (frame_w, "AboutMap", args, n); + XtAddCallback (vda_w, XmNexposeCallback, v_da_exp_cb, 0); + XtAddCallback (vda_w, XmNresizeCallback, v_da_exp_cb, 0); + XtManageChild (vda_w); +} + +static void +fill_msg (w) +Widget w; +{ + char m[100*NMSGR], *mp = m; + int i; + + /* Generate message to display as one string */ + for (i = 0; i < NMSGR; i++) { + char *mi = msg[i]; + char vers[100]; + + switch (mi[0]) { + case '-': + (void) sprintf (mp, "%s\n", &mi[1]); + break; + + case '+': + (void) sprintf (vers, "Version %s %s", PATCHLEVEL, PATCHDATE); + mi = vers; + /* FALLTHRU */ + + default: + (void) sprintf (mp, "%*s%s\n", (78-(int)strlen(mi))/2, "", mi); + break; + } + + mp += strlen(mp); + } + + XmTextSetString (w, m); +} + +/* version dialog is going away. + * stop the rotation timer. + */ +/* ARGSUSED */ +static void +v_popdown_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + if (v_timer_id) { + XtRemoveTimeOut (v_timer_id); + v_timer_id = 0; + } +} + +/* ok */ +/* ARGSUSED */ +static void +v_ok_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XtPopdown (vshell_w); +} + +/* expose version drawing area. + * redraw the scene to the (new?) size. + * start timer if not going already. + */ +/* ARGSUSED */ +static void +v_da_exp_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmDrawingAreaCallbackStruct *c = (XmDrawingAreaCallbackStruct *)call; + + switch (c->reason) { + case XmCR_RESIZE: + /* seems we can get one resize before the first expose. + * hence, we don't have a good window to use yet. just let it + * go; we'll get the expose soon. + */ + if (!XtWindow(w)) + return; + break; + case XmCR_EXPOSE: { + XExposeEvent *e = &c->event->xexpose; + /* wait for the last in the series */ + if (e->count != 0) + return; + break; + } + default: + printf ("Unexpected v_w event. type=%d\n", c->reason); + abort(); + } + + v_draw(); + + if (!v_timer_id) + v_timer_id = XtAppAddTimeOut (xe_app, DT, v_timer_cb, 0); +} + +static void +v_draw() +{ + Display *dsp = XtDisplay(vda_w); + Window win = XtWindow(vda_w); + unsigned int w, h; + Window root; + int x, y; + unsigned int bw, d; + int i; + + if (!v_gc) + v_define_gc(); + + XGetGeometry(dsp, win, &root, &x, &y, &w, &h, &bw, &d); + XSetForeground (dsp, v_gc, bg_p); + XSetFunction (dsp, v_gc, GXcopy); + XFillRectangle (dsp, win, v_gc, 0, 0, w, h); + + /* draw the orbit ellipsii and forget last drawn locs */ + XSetForeground (dsp, v_gc, fg_p^bg_p); + XSetFunction (dsp, v_gc, GXxor); + for (i = 0; i < NORBIT; i++) { + int lx, ty; /* left and top x */ + int nx, ny; /* width and height */ + lx = (int)(w/2 - orbit[i].r/MAXRAD*w/2 + 0.5); + nx = (int)(orbit[i].r/MAXRAD*w + 0.5); + ty = (int)(h/2 - orbit[i].r/MAXRAD*h/2 + 0.5); + ny = (int)(orbit[i].r/MAXRAD*h + 0.5); + XDrawArc (dsp, win, v_gc, lx, ty, nx-1, ny-1, 0, 360*64); + orbit[i].x = UNDEFX; + } + + /* forget the comet */ + radius = 0; + + /* draw sun at the center */ + drawPlanet (dsp, win, v_gc, w/2-PR, h/2-PR, 2*PR-1, 2*PR-1); + + /* draw some background stars */ + for (i = 0; i < NSTARS; i++) { + int sx, sy; + sx = RAND(0,w-1); + sy = RAND(0,h-1); + XDrawPoint (dsp, win, v_gc, sx, sy); + } +} + +/* called whenever the timer goes off. + * we advance all the planets, draw any that have moved at least a few + * pixels, and restart a timer. + */ +/* ARGSUSED */ +static void +v_timer_cb (client, id) +XtPointer client; +XtIntervalId *id; +{ + Display *dsp = XtDisplay(vda_w); + Window win = XtWindow(vda_w); + unsigned int w, h; + Window root; + int x, y; + unsigned int bw, d; + int i; + + XGetGeometry(dsp, win, &root, &x, &y, &w, &h, &bw, &d); + + for (i = 0; i < NORBIT; i++) { + int px, py; /* planets new center position */ + double f = orbit[i].r/MAXRAD; /* fraction of largest radius */ + orbit[i].theta += rotrate*pow(f, -3./2.); + px = (int)(w/2 + cos(orbit[i].theta)*w*f/2 + 0.5); + py = (int)(h/2 - sin(orbit[i].theta)*h*f/2 + 0.5); + if (px != orbit[i].x || py != orbit[i].y) { + /* erase then redraw at new pos, using the XOR GC */ + if (orbit[i].x != UNDEFX) + drawPlanet (dsp, win, v_gc, + orbit[i].x-PR, orbit[i].y-PR, 2*PR-1, 2*PR-1); + drawPlanet (dsp, win, v_gc, px-PR, py-PR, 2*PR-1, 2*PR-1); + orbit[i].x = px; + orbit[i].y = py; + } + } + + /* erase last comet position. + * N.B. use radius == 0 to mean the very first loop. + */ + if (radius != 0) + drawComet (dsp, win, v_gc, angle, radius, taillen, w, h); + + /* comet is definitely outside scene, set fresh initial conditions. + */ + if (radius <= 0 || radius > (int)(w+h)/2) { + radius = (w+h)/2; + rotation = RAND(0,2*PI); + perihelion = RAND(PR,CMAXPERI); + maxtail = RAND(CMINTAIL,CMAXTAIL); + delta_area = RAND(CMINDELA,CMAXDELA); + angle = acos(1.0 - 2.0*perihelion/radius) + rotation; +#if 0 + printf ("initial rad=%d rot=%g peri=%d maxt=%d da=%d angle=%g\n", + radius, rotation, perihelion, maxtail, delta_area, angle); +#endif + } + + /* recompute next step location and draw new comet + */ +#if 0 + printf ("rad=%d rot=%g peri=%d maxt=%d da=%d angle=%g\n", + radius, rotation, perihelion, maxtail, delta_area, angle); +#endif + angle += (double)delta_area/(radius*radius); + radius = (int)(2*perihelion/(1.0 - cos(angle - rotation))); + taillen = (maxtail*perihelion*perihelion)/(radius*radius); + drawComet (dsp, win, v_gc, angle, radius, taillen, w, h); + + /* restart timer */ + v_timer_id = XtAppAddTimeOut (xe_app, DT, v_timer_cb, 0); +} + +/* draw the comet + */ +static void +drawComet (dsp, win, gc, ang, rad, tlen, w, h) +Display *dsp; +Window win; +GC gc; +double ang; /* desired angle ccw from +x, in rads */ +int rad; /* in pixels from center */ +int tlen; /* length of tail, in pixels */ +int w, h; /* window width and height */ +{ + double ca, sa; + int sx, sy; + int ex, ey; + + if (tlen < CMINTAIL) + tlen = CMINTAIL; + + /* angle is made <0 to get ccw rotation with X's y-down coord system */ + ang = -ang; + ca = cos(ang); + sa = sin(ang); + + sx = (int)(w/2 + rad * ca); + sy = (int)(h/2 + rad * sa); + ex = (int)(w/2 + (rad+tlen) * ca); + ey = (int)(h/2 + (rad+tlen) * sa); + + XDrawLine (dsp, win, gc, sx, sy, ex, ey); +} + +/* draw the planet. + */ +static void +drawPlanet (dsp, win, gc, sx, sy, w, h) +Display *dsp; +Window win; +GC gc; +int sx, sy, w, h; +{ + XFillArc (dsp, win, gc, sx, sy, w, h, 0, 360*64); +} + +static void +v_define_gc() +{ + Display *dsp = XtDisplay(vda_w); + Window win = XtWindow(vda_w); + + get_something (vda_w, XmNforeground, (XtArgVal)&fg_p); + get_something (vda_w, XmNbackground, (XtArgVal)&bg_p); + + v_gc = XCreateGC (dsp, win, 0L, NULL); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: versionmenu.c,v $ $Date: 2005/08/24 21:30:19 $ $Revision: 1.35 $ $Name: $"}; diff --git a/GUI/xephem/webdbmenu.c b/GUI/xephem/webdbmenu.c new file mode 100644 index 0000000..a606f92 --- /dev/null +++ b/GUI/xephem/webdbmenu.c @@ -0,0 +1,500 @@ +/* code to manage downloading database files off the web */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + +static void wdb_create (void); +static void getURL (char *url); +static void close_cb (Widget w, XtPointer client, XtPointer call); +static void help_cb (Widget w, XtPointer client, XtPointer call); +static void getast_cb (Widget w, XtPointer client, XtPointer call); +static void geturl_cb (Widget w, XtPointer client, XtPointer call); +static void ast_tcb (XtPointer client, XtIntervalId *ip); +static void ast_icb (XtPointer client, int *fdp, XtInputId *idp); + +static Widget wdbshell_w; /* the main shell */ + +#define WDBNFILES 8 /* number of web files in table */ +#define WDBINDENT 20 /* table indent, pixels */ +#define POLLINT 2000 /* ast download status polling interval, ms */ + +/* asteroid download info */ +typedef struct { + char *name; /* organization name */ + char *prefix; /* prefix of files to create */ + char *script; /* name of perl script */ + char *cmpfn; /* name of compressed file being downloaded */ + char *expfn; /* name of expanded after uncompressed */ + int allsz; /* approx number of MB in all final files */ + FILE *pipefp; /* fp from popen(), NULL when not in use */ +} AstInfo; +static AstInfo astinfo[] = { + {"Minor Planet Center", "AstMPC", "mpcorb2edb.pl", "MPCORB.ZIP", + "MPCORB.DAT", 160}, + {"Lowell Observatory", "AstLowell", "astorb2edb.pl", "astorb.dat.gz", + "astorb.dat", 220}, +}; +#define NAST XtNumber(astinfo) + +static char wdbcategory[] = "Web Databases"; /* Save category */ + +void +wdb_manage() +{ + if (!wdbshell_w) + wdb_create(); + + XtPopup (wdbshell_w, XtGrabNone); + set_something (wdbshell_w, XmNiconic, (XtArgVal)False); +} + +/* called to put up or remove the watch cursor. */ +void +wdb_cursor (c) +Cursor c; +{ + Window win; + + if (wdbshell_w && (win = XtWindow(wdbshell_w)) != 0) { + Display *dsp = XtDisplay(wdbshell_w); + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +static void +wdb_create() +{ + Widget mf_w, f_w, rc_w; + Widget pb_w, tf_w; + Widget w; + int i; + char buf[1024]; + Arg args[20]; + int n; + + /* create shell and main form */ + + n = 0; + XtSetArg (args[n], XmNcolormap, xe_cm); n++; + XtSetArg (args[n], XmNtitle,"xephem Web update");n++; + XtSetArg (args[n], XmNiconName, "WebDB"); n++; + XtSetArg (args[n], XmNdeleteResponse, XmUNMAP); n++; + wdbshell_w = XtCreatePopupShell ("WebDB",topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (wdbshell_w); + set_something (wdbshell_w, XmNcolormap, (XtArgVal)xe_cm); + sr_reg (wdbshell_w, "XEphem*WebDB.x", wdbcategory, 0); + sr_reg (wdbshell_w, "XEphem*WebDB.y", wdbcategory, 0); + + n = 0; + XtSetArg (args[n], XmNmarginHeight, 10); n++; + XtSetArg (args[n], XmNmarginWidth, 10); n++; + XtSetArg (args[n], XmNverticalSpacing, 10); n++; + mf_w = XmCreateForm (wdbshell_w, "WDBForm", args, n); + XtAddCallback (mf_w, XmNhelpCallback, help_cb, NULL); + XtManageChild (mf_w); + + /* everything in a RC */ + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNspacing, 4); n++; + rc_w = XmCreateRowColumn (mf_w, "WRC", args, n); + XtManageChild (rc_w); + + /* .edb section */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (rc_w, "WTL", args, n); + set_xmstring (w, XmNlabelString, + "Download a file containing .edb or TLE formats:"); + XtManageChild (w); + + for (i = 0; i < WDBNFILES; i++) { + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + f_w = XmCreateForm (rc_w, "WDTF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, WDBINDENT); n++; + pb_w = XmCreatePushButton (f_w, "Get", args, n); + wtip (pb_w, "Download this file"); + XtManageChild (pb_w); + + sprintf (buf, "URL%d", i); + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, pb_w); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + tf_w = XmCreateTextField (f_w, buf, args, n); + defaultTextFN (tf_w, 1, "", NULL); + wtip (tf_w, "URL of file to download (must use HTTP)"); + XtManageChild (tf_w); + sprintf (buf, "XEphem*WebDB*URL%d.value", i); + sr_reg (tf_w, buf, wdbcategory, 1); + + /* pass TF to PB callback */ + XtAddCallback (pb_w, XmNactivateCallback, geturl_cb, + (XtPointer)tf_w); + } + + /* gap */ + + n = 0; + w = XmCreateLabel (rc_w, " ", args, n); + XtManageChild (w); + + /* asteroid section */ + + n = 0; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; + w = XmCreateLabel (rc_w, "WTA", args, n); + set_xmstring (w, XmNlabelString, "Download large daily epoch asteroid data set:"); + XtManageChild (w); + + for (i = 0; i < NAST; i++) { + AstInfo *ap = &astinfo[i]; + + n = 0; + XtSetArg (args[n], XmNhorizontalSpacing, 5); n++; + f_w = XmCreateForm (rc_w, "WAF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, WDBINDENT); n++; + w = XmCreatePushButton (f_w, "Get", args, n); + wtip (w, "Download and reformat very large asteroid data set"); + XtAddCallback (w, XmNactivateCallback, getast_cb, (XtPointer)ap); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; + XtSetArg (args[n], XmNleftWidget, w); n++; + w = XmCreateLabel (f_w, "WDBML", args, n); + sprintf (buf, "from %s, saved in %s.edb and %s_dim.edb", ap->name, + ap->prefix, ap->prefix); + set_xmstring (w, XmNlabelString, buf); + XtManageChild (w); + } + + /* controls at the bottom */ + + n = 0; + w = XmCreateSeparator (rc_w, "Sep", args, n); + XtManageChild (w); + + n = 0; + f_w = XmCreateForm (rc_w, "WBF", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 15); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 35); n++; + w = XmCreatePushButton (f_w, "Close", args, n); + XtAddCallback (w, XmNactivateCallback, close_cb, NULL); + wtip (w, "Close this window"); + XtManageChild (w); + + n = 0; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNleftPosition, 55); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_POSITION); n++; + XtSetArg (args[n], XmNrightPosition, 75); n++; + w = XmCreatePushButton (f_w, "Help", args, n); + XtAddCallback (w, XmNactivateCallback, help_cb, NULL); + wtip (w, "Get more information about this window"); + XtManageChild (w); +} + +/* called from Close */ +/* ARGSUSED */ +static void +close_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + /* outta here */ + XtPopdown (wdbshell_w); +} + +/* called from any of the top Get PBs. + * client is TF widget containing URL + */ +/* ARGSUSED */ +static void +geturl_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Widget tf_w = (Widget)client; + char *url = XmTextFieldGetString(tf_w); + + getURL (url); + XtFree (url); +} + +/* called from any Asteroid "Get". + * client is pointer to AstInfo. + * basic idea is run a perl script to do the work, put anything in it + * says in the message log and monitor progress by watching file sizes. + */ +/* ARGSUSED */ +static void +getast_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + AstInfo *ap = (AstInfo *)client; + char cmd[1024]; + + /* check if already trying */ + if (ap->pipefp) { + xe_msg (1, "%s:\nDownload is already in progress", ap->name); + return; + } + + /* open a channel */ + sprintf (cmd, "cd '%s'; %s/auxil/%s -f %s", getPrivateDir(), + getShareDir(), ap->script, ap->prefix); + ap->pipefp = popen (cmd, "r"); + if (!ap->pipefp) { + xe_msg (1, "Can not start process for %s:\n%s", ap->name, + syserrstr()); + return; + } + + /* log anything that comes back, done when EOF */ + XtAppAddInput(xe_app, fileno(ap->pipefp), (XtPointer)XtInputReadMask, + ast_icb, (XtPointer)ap); + + /* use disk space as crude progress indicator */ + pm_set (0); + pm_up(); + XtAppAddTimeOut (xe_app, POLLINT, ast_tcb, (XtPointer)ap); +} + +/* timer callback for asteroid download monitoring. + * report progress by judging disk space change. + * client is pointer to AstInfo. + * repeat so long as ap->pipefp. + */ +/* ARGSUSED */ +static void +ast_tcb (client, ip) +XtPointer client; +XtIntervalId *ip; +{ + AstInfo *ap = (AstInfo *)client; + struct stat st; + char buf[1024]; + int sz = 0; + + /* all done */ + if (!ap->pipefp) + return; + + sprintf (buf, "%s/%s", getPrivateDir(), ap->cmpfn); + if (stat (buf, &st) == 0) + sz += st.st_size; + sprintf (buf, "%s/%s", getPrivateDir(), ap->expfn); + if (stat (buf, &st) == 0) + sz += st.st_size; + sprintf (buf, "%s/%s.edb", getPrivateDir(), ap->prefix); + if (stat (buf, &st) == 0) + sz += st.st_size; + sprintf (buf, "%s/%s_dim.edb", getPrivateDir(), ap->prefix); + if (stat (buf, &st) == 0) + sz += st.st_size; + + /* show progress and repeat */ + pm_set (sz/10000/ap->allsz); /* MB to % */ + XtAppAddTimeOut (xe_app, POLLINT, ast_tcb, (XtPointer)ap); +} + +/* Input callback whenever there is input from an asteroid perl script. + * client is AstInfo *. + */ +static void +ast_icb (client, fdp, idp) +XtPointer client; +int *fdp; +XtInputId *idp; +{ + AstInfo *ap = (AstInfo *)client; + int fd = *fdp; + char buf[1024]; + int n; + + n = read (fd, buf, sizeof(buf)); + if (n < 0) { + /* trouble */ + xe_msg (1, "Error from %s:\n%s", ap->name, syserrstr()); + XtRemoveInput (*idp); + (void) pclose (ap->pipefp); + ap->pipefp = NULL; + pm_down(); + } else if (n == 0) { + /* EOF -- assume script already sent final message */ + XtRemoveInput (*idp); + pclose (ap->pipefp); /* return useless, always ECHILD */ + ap->pipefp = NULL; + pm_down(); + } else { + /* log and contune */ + buf[n] = '\0'; + xe_msg (1, "%s", buf); /* show progress, and done */ + } +} + +/* called from Ok */ +/* ARGSUSED */ +static void +help_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + static char *msg[] = {"Download database files from the Web."}; + + hlp_dialog ("WebDB", msg, XtNumber(msg)); + +} + +/* download the given URL. + * it may contain .edb or TLE. + * collect what we find and save in basename(url).edb + */ +static void +getURL (url) +char *url; +{ + static char http[] = "http://"; + char buf[512], msg[1024]; + char l0[512], l1[512], l2[512]; + char *l0p = l0, *l1p = l1, *l2p = l2; + char host[128]; + char *slash, *dot; + char filename[256]; + FILE *fp; + int sockfd; + int nfound; + + /* start */ + watch_cursor(1); + l0[0] = l1[0] = l2[0] = '\0'; + + /* find transport and host */ + if (strncmp (url, http, 7)) { + xe_msg (1, "URL must begin with %s", http); + watch_cursor (0); + return; + } + + slash = strchr (url+7, '/'); + dot = strrchr (url, '.'); + if (!slash || !dot) { + xe_msg (1, "Badly formed URL"); + watch_cursor (0); + return; + } + + /* connect to check url */ + sprintf (host, "%.*s", (int)(slash-url-7), url+7); + sprintf (buf, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nUser-Agent: xephem/%s\r\n\r\n", + url, host, PATCHLEVEL); + stopd_up(); + sockfd = httpGET (host, buf, msg); + if (sockfd < 0) { + xe_msg (1, "http GET to %s failed: %s%s\n", host, buf, msg); + stopd_down(); + watch_cursor (0); + return; + } + + /* create local file */ + slash = strrchr (url+7, '/'); + sprintf (filename, "%s/%.*sedb", getPrivateDir(), (int)(dot-slash), slash+1); + fp = fopen (filename, "w"); + if (!fp) { + xe_msg (1, "%s:\n%s", filename, syserrstr()); + watch_cursor (0); + close (sockfd); + return; + } + + /* copy to file, insuring only .edb lines. + */ + nfound = 0; + while (recvlineb (sockfd, l2p, sizeof(l2)) > 0) { + char *lrot; + Obj o; + + /* look lively while working */ + XCheck (xe_app); + + if (db_crack_line (l2p, &o, NULL, 0, msg) > 0) { + fprintf (fp, "%s", l2p); /* retain full name */ + nfound++; + } else if (db_tle (l0p, l1p, l2p, &o) == 0) { + db_write_line (&o, buf); + fprintf (fp, "%s\n", buf); + nfound++; + } + + lrot = l0p; + l0p = l1p; + l1p = l2p; + l2p = lrot; + } + + /* tidy up and done */ + fclose (fp); + close (sockfd); + if (!nfound) { + xe_msg (1, "No objects in file"); + remove (filename); + } else { + db_read (filename); + all_newdb(1); + } + stopd_down(); + watch_cursor(0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: webdbmenu.c,v $ $Date: 2012/11/23 05:22:03 $ $Revision: 1.26 $ $Name: $"}; diff --git a/GUI/xephem/xe2.c b/GUI/xephem/xe2.c new file mode 100644 index 0000000..57e269b --- /dev/null +++ b/GUI/xephem/xe2.c @@ -0,0 +1,402 @@ +/* Fetch the desired region of xe2-formatted catalog stars. + * This format supports proper motion. The format is: + * + * Note 1: all multibyte quantities are big-endian, aka, network byte order + * Note 2: header consists of ASCII version number followed by newline. + * Byte Bits Description + * 0 2..0 Name code: + * 0: PPM + * 1: SAO + * 2: HD + * 3: Tycho 2 + * 4: HIP + * 5: GSC22 + * 6..7: reserved + * 0 5..3 Type code: + * 0: star + * 1: star-like + * 2: double + * 3..7: reserved + * 0 7..6 Reserved + * 1..4 Name value is just the number except for Tycho 2: + * TYC1 = (B[3]<<6)|(B[4]>>2) + * TYC2 = (B[1]<<8)|(B[2]) + * TYC3 = (B[4]&3) + * 5..7 RA, J2000, rads, 0 .. 2*PI mapped to 0 .. 1<<24 + * 8..10 Dec, J2000, rads, -PI/2 .. PI/2 mapped to 0 .. (1<<24)-1 + * 11 Magnitude, -2..17 mapped to 0..255 + * 12..13 Spectral class, ASCII characters, left justified, blank filled + * 14..15 Proper motion in RA on sky, 2*(mas/yr) + 32768 + * 16..17 Proper motion in Dec, 2*(mas/yr) + 32768 + */ + +#include +#include +#include +#include + +#include "xephem.h" + + +#define XE2PKTSZ 18 /* packet size - DO NOT CHANGE */ + +typedef unsigned char UC; +typedef unsigned long UL; +typedef UC PKT[XE2PKTSZ]; + + +/* an array of ObjF which can be grown efficiently in mults of NINC */ +typedef struct { + ObjF *mem; /* malloced array */ + int max; /* max number of cells in mem[] or -1 to just count */ + int used; /* number actually in use */ +} ObjFArray; + +#define NINC 32 /* grow mem mem this many at a time */ + +static FILE *xe2open (char *file, char msg[]); +static void unpackObj (PKT pkt, Now *np, Obj *op); +static int addOneObjF (ObjFArray *ap, ObjF *fop); +static void unpack (PKT pkt, double *ra, double *dec, double *pma, + double *pmd, double *mag, char name[MAXNM], char *spect, int *type); + +/* return 0 if file looks like a xe2, else -1 + */ +int +xe2chkfile (char *file, char *msg) +{ + FILE *fp; + + fp = xe2open (file, msg); + if (!fp) + return (-1); + fclose (fp); + return (0); +} + +/* malloc a collection of XE2 stars around the given location at *opp. + * if trouble fill msg[] and return -1, else return count. + * N.B. memory is only actually malloced at *opp if we return > 0. + * N.B. we very much rely on file being sorted by increasing dec. + * TODO: proper motion. hard because sort is only valid at one epoch. + */ +int +xe2fetch (char *file, Now *np, double ra, double dec, double fov, double mag, +ObjF **opp, char *msg) +{ + double rov; + double cdec; + double sdec; + double crov; + ObjFArray ofa; + FILE *fp; + long l0, l, u, m; + double ldec, udec; + Obj o; + PKT pkt; + + /* initial setup */ + rov = fov/2; + cdec = cos(dec); + sdec = sin(dec); + crov = cos(rov); + + /* bug if not given a place to save new stars */ + if (!opp) { + printf ("xe2fetch with opp == NULL\n"); + abort(); + } + + /* open the XE2 file */ + fp = xe2open (file, msg); + if (!fp) + return (-1); + l0 = ftell(fp); + + /* binary search for star nearest lower dec */ + ldec = dec - rov; + if (ldec < -PI/2) + ldec = -PI/2; + l = 0; + fseek (fp, 0, SEEK_END); + u = (ftell(fp)-l0) / XE2PKTSZ - 1; + while (l <= u) { + m = (l+u)/2; + if (fseek (fp, m*XE2PKTSZ+l0, SEEK_SET) < 0) { + (void) sprintf (msg, "%s:\nseek error: %s", file, syserrstr()); + fclose (fp); + return (-1); + } + if (fread (pkt, XE2PKTSZ, 1, fp) != 1) { + (void) sprintf (msg, "%s:\nread error: %s", file, syserrstr()); + fclose (fp); + return (-1); + } + unpackObj (pkt, np, &o); + if (ldec < o.f_dec) + u = m-1; + else + l = m+1; + } + + /* add each entry from m up to upper dec */ + udec = dec + rov; + if (udec > PI/2) + udec = PI/2; + ofa.mem = NULL; + ofa.max = 0; + ofa.used = 0; + while (o.f_dec <= udec) { + if (get_mag(&o) <= mag && sin(o.f_dec)*sdec + + cos(o.f_dec)*cdec*cos(ra-o.f_RA) >= crov) { + if (addOneObjF (&ofa, (ObjF *)&o) < 0) { + (void) sprintf (msg, "%s:\nno more memory", file); + fclose (fp); + if (ofa.mem) + free ((void *)ofa.mem); + return (-1); + } + } + + if (fread (pkt, XE2PKTSZ, 1, fp) != 1) { + if (feof(fp)) + break; + (void) sprintf (msg, "%s:\nread error: %s", file, syserrstr()); + fclose (fp); + if (ofa.mem) + free ((void *)ofa.mem); + return (-1); + } + + unpackObj (pkt, np, &o); + } + + fclose (fp); + if (ofa.mem) + *opp = ofa.mem; + return (ofa.used); +} + +/* open the xe2 file. + * return the FILE * positioned at first record if ok, + * else NULL with a reason in msg[]. + */ +static FILE * +xe2open (file, msg) +char *file; +char msg[]; +{ + FILE *fp = fopenh (file, "rb"); + char header[32]; + + if (!fp) { + (void) sprintf (msg, "%s:\n%s", file, syserrstr()); + return (NULL); + } + if (fgets (header, sizeof(header), fp) == NULL) { + sprintf (msg, "%s:\nno header: %s", file, syserrstr()); + fclose (fp); + return(NULL); + } + if (strncmp (header, "XE2.", 4)) { + sprintf (msg, "%s:\nnot an XE2 file", file); + fclose (fp); + return(NULL); + } + + return (fp); +} + +/* crack open pkt and fill in op */ +static void +unpackObj (pkt, np, op) +PKT pkt; +Now *np; +Obj *op; +{ +#define MASRAD(mas) degrad((mas)/(3600.*1000.)) + double ra; + double dec; + double pma; + double pmd; + double mag; + char name[MAXNM]; + char spect[32]; + int type; + + unpack (pkt, &ra, &dec, &pma, &pmd, &mag, name, spect, &type); + + zero_mem ((void *)op, sizeof (*op)); + + (void) strncpy (op->o_name, name, MAXNM-1); + op->o_type = FIXED; + op->f_class = type == 2 ? 'D' : type == 1 ? 'T' : 'S'; + op->f_spect[0] = spect[0] == ' ' ? '\0' : spect[0]; + op->f_spect[1] = spect[1] == ' ' ? '\0' : spect[1]; + op->f_pmdec = (float)(MASRAD(pmd)/365.24); + op->f_dec = (float)(dec); + op->f_pmRA = (float)(MASRAD(pma)/cos(op->f_dec)/365.24); + op->f_RA = (float)(ra); + op->f_epoch = (float)J2000; + set_fmag (op, mag); +#undef MASRAD +} + +/* add one ObjF entry to ap[], growing if necessary. + * return 0 if ok else return -1 + */ +static int +addOneObjF (ap, fop) +ObjFArray *ap; +ObjF *fop; +{ + ObjF *newf; + + if (ap->used >= ap->max) { + /* add room for NINC more */ + char *newmem = ap->mem ? realloc ((void *)ap->mem, + (ap->max+NINC)*sizeof(ObjF)) + : malloc (NINC*sizeof(ObjF)); + if (!newmem) + return (-1); + ap->mem = (ObjF *)newmem; + ap->max += NINC; + } + + newf = &ap->mem[ap->used++]; + (void) memcpy ((void *)newf, (void *)fop, sizeof(ObjF)); + + return (0); +} + +/* unpack the raw PKT into its basic parts. + */ +static void +unpack (pkt, ra, dec, pma, pmd, mag, name, spect, type) +PKT pkt; +double *ra; +double *dec; +double *pma; +double *pmd; +double *mag; +char name[MAXNM]; +char *spect; +int *type; +{ + UL t; + + /* type code */ + *type = (pkt[0]>>3) & 7; + + /* RA, rads */ + t = ((UL)pkt[5] << 16) | ((UL)pkt[6] << 8) | (UL)pkt[7]; + *ra = 2*PI*t/(1L<<24); + + /* Dec, rads */ + t = ((UL)pkt[8] << 16) | ((UL)pkt[9] << 8) | (UL)pkt[10]; + *dec = PI*t/((1L<<24)-1) - PI/2; + + /* mag */ + t = (UL)pkt[11]; + *mag = (19./255.)*t - 2; + + /* spect */ + spect[0] = pkt[12]; + spect[1] = pkt[13]; + + /* pm ra, mas/yr */ + t = ((UL)pkt[14] << 8) | (UL)pkt[15]; + *pma = (t-32768.)/2.; + + /* pm dec, mas/yr */ + t = ((UL)pkt[16] << 8) | (UL)pkt[17]; + *pmd = (t-32768.)/2.; + + /* name */ + if ((pkt[0]&7) == 3) { + /* tycho format */ + UL tyc1 = ((UL)pkt[3] << 6) | ((UL)pkt[4] >> 2); + UL tyc2 = ((UL)pkt[1] << 8) | ((UL)pkt[2]); + UL tyc3 = ((UL)pkt[4] & 3); + sprintf (name, "Tyc %ld-%ld-%ld", tyc1, tyc2, tyc3); /* MAXNM! */ + } else { + /* just a number */ + t = ((UL)pkt[1] << 24) | ((UL)pkt[2] << 16) | ((UL)pkt[3] << 8) + | (UL)pkt[4]; + switch (pkt[0]&7) { + case 0: sprintf (name, "PPM %ld", t); break; + case 1: sprintf (name, "SAO %ld", t); break; + case 2: sprintf (name, "HD %ld", t); break; + case 4: sprintf (name, "HIP %ld", t); break; + case 5: sprintf (name, "GSC2201 %c %ld", *dec<0?'S':'N', t); break; + default: sprintf (name, ""); break; + } + } +} + +#ifdef MAIN_TEST +/* dump entire named .xe2 in .edb format to stdout. + */ + +#include + +int +main (int ac, char *av[]) +{ + ObjF *ofp = NULL; + Now now, *np = &now; + char *file; + char msg[1024]; + int i, n; + + if (ac != 2) { + fprintf (stderr, "usage: %s x.xe2 > x.edb\n", av[0]); + abort(); + } + file = av[1]; + if (xe2chkfile (file, msg) < 0) { + fprintf (stderr, "%s\n", msg); + abort(); + } + + zero_mem (np, sizeof(*np)); + np->n_mjd = J2000 + 3*365; /* ~ 1/1/2003 */ + n = xe2fetch (file, np, 0.0, PI/2, PI, 100.0, &ofp, msg); + if (n < 0) { + fprintf (stderr, "%s\n", msg); + abort(); + } + for (i = 0; i < n; i++) { + db_write_line ((Obj *)&ofp[i], msg); + printf ("%s\n", msg); + } + free (ofp); + ofp = NULL; + n = xe2fetch (file, np, 0.0, -PI/2, PI, 100.0, &ofp, msg); + if (n < 0) { + fprintf (stderr, "%s\n", msg); + abort(); + } + for (i = 0; i < n; i++) { + db_write_line ((Obj *)&ofp[i], msg); + printf ("%s\n", msg); + } + return (0); +} + +char * +syserrstr () +{ + return (strerror(errno)); +} + +FILE * +fopenh (char *name, char *how) +{ + return (fopen (name, how)); +} + +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: xe2.c,v $ $Date: 2004/05/05 17:43:32 $ $Revision: 1.14 $ $Name: $"}; diff --git a/GUI/xephem/xe3.c b/GUI/xephem/xe3.c new file mode 100644 index 0000000..c1a8d24 --- /dev/null +++ b/GUI/xephem/xe3.c @@ -0,0 +1,464 @@ +/* Fetch the desired region of xe3-formatted catalog stars. + * + * xe3 is a very compact format storing just ra/dec/mag/class for each star. + * Each star occupies 3 bytes and stores RA to a precision of +/- .38 arcsecs, + * Dec to .44 arcsec, Mag in the range 10..20 to .16 and 1 class bit set to 0 + * for star or 1 for other. One xe3 file stores all stars in a band of + * declination one degree hi, beginning on an integral dec boundary. Thus 180 + * xe3 files are required to cover the entire sky. + * + * The overall file structure is an initial line of ASCII giving file type and + * the base declination, followed by a table of 360 records indexed by RA in + * whole degs giving the file offset and starting RA into the star records + * for that RA, followed by any number of star records sorted by increasing RA. + * Each star record occupies 3 bytes and stores the dec offset from the base + * dec of the band, the RA offset from the RA of the previous record, the mag + * and the class. + * + * The file starts with 8 ASCII chars including a final newline in the format + * "xe3 HDD\n", where H is 'N' for north hemishere else 'S'. DD is the base + * of the dec band, zero filled whole degrees. Dec offsets in the star + * records are added to the base dec if H is 'N' else subtracted from base. + * + * Following the header is a table of 360 records each 8 bytes long. The array + * is indexed by RA in whole degrees. Each index record contains a file offset + * in bytes from the front of the file to the first star record with an RA + * greater than or equal to the index RA value, and the RA of said star. Each + * of these values is 4 bytes stored big-endian. + * + * Following the index table are star records sorted in increasing RA. Each star + * record is 3 bytes. The bits are packed as follows (stored bigendian): + * 0.. 5 rabits + * 6..17 decbits + * 18..22 magbits + * 23 star + * then + * ra = (rasum + rabits+.5)*RAPBIT/cos(decband) + * dec = (north ? decband + (decbits+.5) : decband - (decbits+.5))*DECPBIT + * mag = BRMAG + (magbits + .5)*MAGPBIT + * starlike if star else really a star + * where decband is the integer from the ASCII header line, rasum is an unsigned + * int to accumulate the rabits values (initialized at the start of a sweep + * from the index table entry) and dec and ra are in degrees (so beware if + * your cos() expects rads). + */ + +#include +#include +#include +#include + +#include "xephem.h" + +#define MAXGSC22FOV degrad(5) /* max FOV to fetch */ + +/* packing in each record */ +#define DECBITS 12 /* dec stored in 12 bits */ +#define DECHI 1.0 /* height of dec band, degrees */ +#define DECPBIT (DECHI/(1< 0. + */ +int +xe3fetch (char *dir, double ra, double dec, double fov, double mag, +ObjF **opp, int nop, char *msg) +{ + int topd, botd, d; + double dmin, dmax; + double rov; + ObjFArray ofa; + int s = 0; + + /* bug if not given a place to save new stars */ + if (!opp) { + printf ("xe3fetch with opp == NULL\n"); + abort(); + } + + /* enforce limit */ + if (fov > MAXGSC22FOV) { + static int fovwarned; + if (!fovwarned) { + xe_msg (1, "All XE3 catalog requests will be limited to %.2f degree FOV", raddeg(MAXGSC22FOV)); + fovwarned = 1; + } + + fov = MAXGSC22FOV; + } + + /* switch everything to degrees */ + ra = raddeg(ra); + dec = raddeg(dec); + rov = raddeg(fov/2); + + /* find top and bottom dec limits, in degrees */ + dmin = dec - rov; + dmax = dec + rov; + botd = (int)floor(dmin); + topd = (int)floor(dmax); + + /* init ofa */ + ofa.mem = *opp; + ofa.max = nop; + ofa.used = nop; + + /* read across ra range for each dec band, beware 360 wrap */ + for (d = botd; d <= topd; d++) { + double rovdec = d==90||d==-90 ? 180 : rov/cos(degrad(d)); + double rmin = ra - rovdec, rmax = ra + rovdec; + int db = d; + if (d < -90) { + db = -181-d; + rmin = 0; + rmax = 360; + } else if (d > 89) { + db = 179-d; + rmin = 0; + rmax = 360; + } else if (rmin < 0) { + s = addDec (&ofa, dir, mag, db, dmin, dmax, rmin+360, 360, msg); + if (s < 0) + break; + rmin = 0; + } else if (rmax > 360) { + s = addDec (&ofa, dir, mag, db, dmin, dmax, 0.0, rmax-360, msg); + if (s < 0) + break; + rmax = 360; + } + s = addDec (&ofa, dir, mag, db, dmin, dmax, rmin, rmax, msg); + if (s < 0) + break; + } + + /* finished */ + if (s < 0) { + if (ofa.mem) + free (ofa.mem); + return (-1); + } + if (ofa.mem) + *opp = ofa.mem; + return (ofa.used); +} + +/* add stars for dec band [-90..89] from dmin..dmax rmin..rmax to ofap. + * all units in degrees. + * if ok return 0 else -1 with reason in msg[]. + * dec is floor of band, ie, -90 .. 89. + */ +static int +addDec (ObjFArray *ofap, char *dir, double mag, int dec, double dmin, + double dmax, double rmin, double rmax, char *msg) +{ + int north = dec >= 0; + int db = north ? dec : dec+1; + double cdb = cos(degrad(db)); + int rabase = (int)floor(rmin); + char fn[1024]; + unsigned rasum, offset; + UC idx[BPIDX]; + PKT pkt; + FILE *fp; + Obj o; + + /* + fprintf (stderr, "addDec %g .. %g %g .. %g\n", rmin, rmax, dmin, dmax); + */ + + /* open file */ + fp = xe3open (dir, north, db, fn, msg); + if (!fp) + return (-1); + + /* read index */ + if (fseek (fp, HDRLEN + rabase*BPIDX, SEEK_SET) < 0) { + sprintf (msg, "%s:\nindex is short", fn); + fclose (fp); + return (-1); + } + if (fread (idx, BPIDX, 1, fp) != 1) { + sprintf (msg, "%s:\nindex entry is short", fn); + fclose (fp); + return (-1); + } + offset = (idx[0] << 24) | (idx[1] << 16) | (idx[2] << 8) | idx[3]; + rasum = (idx[4] << 24) | (idx[5] << 16) | (idx[6] << 8) | idx[7]; + + /* move to first ra packet */ + if (fseek (fp, offset, SEEK_SET) < 0) { + sprintf (msg, "%s:\npacket list is short", fn); + fclose (fp); + return (-1); + } + + /* scan to rmax, work in rads */ + dmin = degrad(dmin); + dmax = degrad(dmax); + rmin = degrad(rmin); + rmax = degrad(rmax); + while (1) { + if (fread (pkt, sizeof(pkt), 1, fp) != 1) { + if (feof(fp)) + break; + sprintf (msg, "%s:\n%s", fn, syserrstr()); + fclose (fp); + return (-1); + } + unpack (&rasum, cdb, dec, pkt, &o); + if (o.f_RA > rmax) + break; + if (get_fmag(&o) <= mag && o.f_RA >= rmin && dmin <= o.f_dec && + o.f_dec <= dmax) { + mkxe3name (dir, &o); + if (addOneObjF (ofap, &o) < 0) { + sprintf (msg, "not enough memory after %d objects", + ofap->used); + fclose (fp); + return (-1); + } + } + } + + /* ok */ + fclose(fp); + return (0); +} + +/* unpack the raw PKT into Obj *op. + * dec is -90..89 + */ +static void +unpack (unsigned *rasump, double cdb, int dec, PKT pkt, Obj *op) +{ + unsigned v = (pkt[0] << 16) | (pkt[1] << 8) | pkt[2]; + unsigned radelta = (v&RAMASK); + double decoffset = (((v>>RABITS)&DECMASK) + 0.5)*DECPBIT; + double mag = (((v>>(RABITS+DECBITS))&MAGMASK) + 0.5)*MAGPBIT + BRMAG; + int isother = (v >> (RABITS+DECBITS+MAGBITS)); + double ra = (*rasump + radelta + 0.5)*RAPBIT/cdb; + double dc = dec<0 ? dec+1-decoffset : dec+decoffset; + + *rasump += radelta; + + zero_mem ((void *)op, sizeof(ObjF)); + + op->o_type = FIXED; + op->f_class = isother ? 'T' : 'S'; + op->f_RA = (float)degrad(ra); + op->f_dec = (float)degrad(dc); + op->f_epoch = (float)J2000; + set_fmag (op, mag); +} + +/* make up a name from the f_RA/dec fields of the given object */ +static void +mkxe3name (char *dir, Obj *op) +{ + char rstr[32], dstr[32]; + char *cat; + + /* get RA and dec as fixed-length strings */ + fs_sexa (rstr, radhr(op->f_RA), 2, 36000); + if (rstr[0] == ' ') rstr[0] = '0'; + rstr[2] = rstr[3]; + rstr[3] = rstr[4]; + rstr[4] = rstr[6]; + rstr[5] = rstr[7]; + rstr[6] = rstr[9]; + rstr[7] = '\0'; + + fs_sexa (dstr, raddeg(op->f_dec), 3, 3600); + if (dstr[1] == ' ') { dstr[0] = '+'; dstr[1] = '0'; } + if (dstr[1] == '-') { dstr[0] = '-'; dstr[1] = '0'; } + if (dstr[0] == ' ') dstr[0] = '+'; + dstr[3] = dstr[4]; + dstr[4] = dstr[5]; + dstr[5] = dstr[7]; + dstr[6] = dstr[8]; + dstr[7] = '\0'; + + /* use as much as possible of basename as catalog name */ + if ((cat = strrchr(dir,'/')) || (cat = strrchr(dir,'\\'))) + cat++; /* skip the / */ + else + cat = dir; + sprintf (op->o_name, "%.*s %s%s", MAXNM-(7+7+2), cat, rstr, dstr); +} + +/* add one ObjF entry to ap[], growing if necessary. + * return 0 if ok else return -1 + */ +static int +addOneObjF (ObjFArray *ap, Obj *op) +{ + ObjF *newf; + + if (ap->used >= ap->max) { + /* add room for NINC more */ + char *newmem = ap->mem ? realloc ((void *)ap->mem, + (ap->max+NINC)*sizeof(ObjF)) + : malloc (NINC*sizeof(ObjF)); + if (!newmem) + return (-1); + ap->mem = (ObjF *)newmem; + ap->max += NINC; + } + + newf = &ap->mem[ap->used++]; + (void) memcpy ((void *)newf, (void *)op, sizeof(ObjF)); + + return (0); +} + +/* open the given xe3 file. + * if ok return name and FILE * else return NULL with reason in msg[] + * north is 1 for dec floors 0..89, 0 for dec floors -90..-1. + * db is dec band as used in xe3 file, ie, rounded towards 0, ie, -89..89. + */ +static FILE * +xe3open (char *dir, int north, int db, char fn[], char msg[]) +{ + char nschar = north ? 'N' : 'S'; + char header[HDRLEN+1]; + FILE *fp; + char myns; + int mydb; + + /* want abs band in file name and header */ + db = abs(db); + + /* open and check header */ + sprintf (fn, "%s/%c%02d.xe3", dir, nschar, db); + fp = fopenh (fn, "rb"); + if (!fp) { + (void) sprintf (msg, "%s:\n%s", fn, syserrstr()); + return (NULL); + } + if (fread (header, HDRLEN, 1, fp) != 1) { + sprintf (msg, "%s:\nno header: %s", fn, syserrstr()); + fclose (fp); + return(NULL); + } + header[HDRLEN-1] = '\0'; + if (sscanf (header, "xe3 %c%2d", &myns, &mydb) != 2 + || myns != nschar || mydb != db) { + sprintf (msg, "%s:\nnot an XE3 file", fn); + fclose (fp); + return(NULL); + } + + /* ok */ + return (fp); +} + +#ifdef MAIN_TEST +/* stand alone dump a region of xe3 to stdout. + * cc -o xe3 -DMAIN_TEST -Ilibastro -Ilibip -Llibastro xe3.c -lastro -lm + */ + +#include + +int +main (int ac, char *av[]) +{ + ObjF *ofp = NULL; + char msg[1024]; + double ra, dec, fov; + char *dir; + int n; + + if (ac != 5) { + fprintf (stderr, "usage: %s xe3dir ra dec fov (all degs)\n", av[0]); + return(1); + } + + dir = av[1]; + ra = degrad(atof(av[2])); + dec = degrad(atof(av[3])); + fov = degrad(atof(av[4])); + + n = xe3fetch (dir, ra, dec, fov, 100.0, &ofp, msg); + if (n < 0) { + fprintf (stderr, "%s\n", msg); + exit(1); + } + while (n) { + db_write_line ((Obj *)&ofp[--n], msg); + printf ("%s\n", msg); + } + return (0); +} + +char * +syserrstr () +{ + return (strerror(errno)); +} + +FILE * +fopenh (char *name, char *how) +{ + return (fopen (name, how)); +} + +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: xe3.c,v $ $Date: 2009/01/05 21:44:18 $ $Revision: 1.5 $ $Name: $"}; diff --git a/GUI/xephem/xephem.c b/GUI/xephem/xephem.c new file mode 100644 index 0000000..c411af8 --- /dev/null +++ b/GUI/xephem/xephem.c @@ -0,0 +1,999 @@ +/* main() for xephem. + * Copyright (c) 1990-2013 by Elwood Charles Downey + */ + +#include +#include +#include +#include +#include + +#if defined(__NUTC__) +#include +#endif + +#include +#include /* for XT_REVISION */ +#include + +/* define WANT_EDITRES if want to try and support X11R5's EditRes feature. + * this will require linking with -lXmu and -lXext too. +#define WANT_EDITRES + */ +#if defined(WANT_EDITRES) && (XT_REVISION >= 5) +#define DO_EDITRES +#endif + +#ifdef DO_EDITRES +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if XmVersion >= 1002 +#include +#endif /* XmVersion >= 1002 */ + + +#include "xephem.h" + +extern char Version_resource[]; +extern char maincategory[]; + +#define NMINCOL 150 /* min colors we want for the main colormap */ + +/* these are used to describe and semi-automate making the main pulldown menus + */ +typedef struct { + char *tip; /* tip text, if any */ + char *name; /* button name, or separator name if !cb */ + /* N.B. watch for a few special cases */ + char *label; /* button label (use name if 0) */ + char *acc; /* button accelerator, if any */ + char *acctext; /* button accelerator text, if any */ + char mne; /* button mnemonic */ + void (*cb)(); /* button callback, or NULL if none */ + XtPointer client; /* button callback client data */ +} ButtonInfo; +typedef struct { + char *tip; /* tip text, if any */ + char *cb_name; /* cascade button name */ + char *cb_label; /* cascade button label (use name if 0) */ + char cb_mne; /* cascade button mnemonic */ + char *pd_name; /* pulldown menu name */ + ButtonInfo *bip; /* array of ButtonInfos, one per button in pulldown */ + int nbip; /* number of entries in bip[] */ +} PullDownMenu; + +#define SEPARATOR_N "MainSep" /* special ButtonInfo->name */ + + +static void addOurDBs (void); +static void chk_args (int argc, char *argv[]); +static void chk_pos (void); +static void chk_version (void); +static void set_title (void); +static void make_main_window (void); +static Widget make_pulldown (Widget mb_w, PullDownMenu *pdmp); +static void setup_sigs (void); +static void m_activate_cb (Widget w, XtPointer client, XtPointer call); +static void x_quit (void); +static void initialUps(void); + + +/* client arg to m_activate_cb(). + */ +typedef enum { + PROGRESS, QUIT, GALLERY, MSGTXT, NETSETUP, EXTIN, + SUNV, DATA, MOONV, EARTH, MARSV, JUPMOON, SATMOON, UMOON, SKYVIEW, + SOLARSYS, PLOT, LIST, SEARCH, GLANCE, AAVSO, CCONV, OBSLOG, + EDB, OBJS, CLOSEOBJS, FAVS, FIELDSTARS, WEBDB, MOVIELOOP, + ABOUT, REFERENCES, CONFIGHLP, INTRO, MAINMENU, FILEHLP, VIEWHLP, TOOLSHLP, + OBJHLP, PREFHLP, OPERATION, CONTEXTHLP, SRCHHLP, DATETIME, NOTES +} MBOptions; + +Widget toplevel_w; +#define XtD XtDisplay(toplevel_w) +Colormap xe_cm; +XtAppContext xe_app; +char myclass[] = "XEphem"; + +#define xephem_width 32 +#define xephem_height 32 +static unsigned char xephem_bits[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xfe, 0xff, 0xff, 0xbf, + 0xfd, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0x7f, + 0xfe, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xbf, + 0xfd, 0xff, 0xff, 0x7f, 0x1e, 0x8e, 0x01, 0xbc, 0x3d, 0xc4, 0x03, 0x7c, + 0x7e, 0xe0, 0xe3, 0xbd, 0x7d, 0xe0, 0xe3, 0x7f, 0xfe, 0xf0, 0x63, 0xbf, + 0xfd, 0xf0, 0x03, 0x7f, 0xfe, 0xf0, 0x03, 0xbf, 0xfd, 0xf0, 0x63, 0x7f, + 0x7e, 0xe0, 0xe3, 0xbf, 0x7d, 0xe0, 0xe3, 0x7d, 0x3e, 0xc2, 0x03, 0xbc, + 0x1d, 0x87, 0x01, 0x7c, 0xfe, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0x7f, + 0xfe, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xbf, + 0xfd, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0x7f, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55}; + +static XrmOptionDescRec options[] = { + {"--help", ".help", XrmoptionIsArg, NULL}, + {"-help", ".help", XrmoptionIsArg, NULL}, + {"-install", ".install", XrmoptionSepArg, NULL}, + {"-log", ".log", XrmoptionIsArg, NULL}, + {"-nowin", ".nowin", XrmoptionIsArg, NULL}, + {"-prfb", ".prfb", XrmoptionIsArg, NULL}, + {"-resfile", ".resfile", XrmoptionSepArg, NULL}, +}; + +int +main(argc, argv) +int argc; +char *argv[]; +{ + Arg args[10]; + int n; + + /* set up signal handling */ + setup_sigs(); + + /* check for -nosplash or nosplash file .. can't wait for resources */ + splashOpen (&argc, argv, options, XtNumber(options)); + +#ifdef __APPLE__ + /* hack around two-level namespace linker problem in libXt wrt libXm. + * first appeared in XFree86 4.2.0 build; should remain harmless in + * subsequent builds even if the problem is fixed. + */ + { + extern void *topLevelShellClassRec; + extern void *transientShellClassRec; + extern void *vendorShellClassRec; + topLevelShellClassRec = (void *) &vendorShellClassRec; + transientShellClassRec = (void *) &vendorShellClassRec; + } +#endif + + /* check for alternate env before starting toolkit. + * (don't even ask why this is here) + */ + newEnv(&argc, argv); + + /* set this before using fallbacks[] */ + (void)sprintf (Version_resource,"%s.Version: %s", myclass, PATCHLEVEL); + + /* open display and gather standard resources. + * we grab fallbacks[] last + */ + splashMsg ("Building shell\n"); + n = 0; + XtSetArg (args[n], XmNallowShellResize, True); n++; + toplevel_w = XtAppInitialize (&xe_app, myclass, options, + XtNumber(options), &argc, argv, NULL, args, n); + + /* add our resources from non-standard places */ + splashMsg ("Reading X resources\n"); + addOurDBs(); + + splashMsg ("Checking args\n"); + chk_args (argc, argv); + chk_version(); + set_title(); + + /* load xe_cm and toplevel_w with default or private colormap */ + splashMsg ("Checking colormap\n"); + xe_cm = checkCM (DefaultColormap(XtD,DefaultScreen(XtD)), NMINCOL); + set_something (toplevel_w, XmNcolormap, (XtArgVal)xe_cm); + +#ifdef DO_EDITRES + XtAddEventHandler (toplevel_w, (EventMask)0, True, + _XEditResCheckMessages, NULL); +#endif + +#if WANT_TEAR_OFF + /* install converter so tearOffModel can be set in resource files + * to TEAR_OFF_{EN,DIS}ABLED. + */ + XmRepTypeInstallTearOffModelConverter(); +#endif + + /* connect up the icon pixmap */ + splashMsg ("Building icon\n"); + setup_icon (toplevel_w); + + /* make the main menu bar and form (other stuff is in mainmenu.c) */ + splashMsg ("Building main window system\n"); + make_main_window (); + + /* set up networking, but don't manage it here */ + splashMsg ("Init networking\n"); + net_create(); + + /* start in night mode? */ + splashMsg ("Checking night mode\n"); + sr_chknightv(); + + /* install then monitor position */ + chk_pos(); + + /* here we go */ + splashMsg ("Realizing top widget\n"); + XtRealizeWidget(toplevel_w); + splashClose(); + if (!getXRes ("nowin", NULL)) + initialUps(); + XtAppMainLoop(xe_app); + + printf ("XtAppMainLoop returned :-)\n"); + return (1); +} + +/* called to put up or remove the watch cursor. */ +void +main_cursor (c) +Cursor c; +{ + Window win; + + if (toplevel_w && (win = XtWindow(toplevel_w)) != 0) { + Display *dsp = XtD; + if (c) + XDefineCursor (dsp, win, c); + else + XUndefineCursor (dsp, win); + } +} + +/* look for -env arg. + * if find replace as specified and remove from argv list. + */ +void +newEnv (int *argcp, char *argv[]) +{ + int argc = *argcp; + int i; + + /* look for any/all -env */ + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-env") == 0) { + char *argeq, *newenv; + int n; + + /* new value is in next arg */ + if (i == argc-1) { + printf ("-env requires another arg\n"); + abort(); + } + newenv = argv[++i]; + + argeq = strchr (newenv, '='); + if (!argeq) { + printf ("%s: -env requires X=Y\n", newenv); + abort(); + } + +#if defined(__NUTC__) + { + /* convert filenames to internal format. + * N.B. assumes exactly 1 file name + */ + char *cp, *cpeq; + + cp = strcpy (malloc (PATH_MAX+1), newenv); + cpeq = strchr (cp, '='); + (void) _NutPathToNutc (argeq+1, cpeq+1, 1); + newenv = cp; + } +#endif + /* install new env */ + putenv (newenv); + + /* remove from argv */ + (*argcp) -= 2; + for (n = i+1; n < argc; n++) + argv[n-2] = argv[n]; + } + } + + argv[*argcp] = NULL; +} + +/* connect up logo.gif */ +void +make_logo (Widget rc) +{ + Display *dsp = XtDisplay(toplevel_w); + char fn[1024]; + unsigned char gif[200000]; + char why[1024]; + Arg args[20]; + Widget f_w, l_w; + Pixmap pm; + FILE *fp; + int w, h; + int ngif; + int n; + + /* open and read the gif */ + (void) sprintf (fn, "%s/auxil/logo.gif", getShareDir()); + fp = fopenh (fn, "rb"); + if (!fp) { + (void) fprintf (stderr, "%s: %s\n", fn, syserrstr()); + return; /* darn */ + } + ngif = fread (gif, 1, sizeof(gif), fp); + fclose (fp); + if (ngif < 0) { + (void) fprintf (stderr, "%s: %s\n", fn, syserrstr()); + return; /* darn again */ + } + if (ngif == sizeof(gif)) { + (void) fprintf (stderr, "%s: Max size = %d\n", fn,(int)sizeof(gif)); + return; /* darn again */ + } + + /* convert to pm */ + if (gif2pm (dsp, xe_cm, gif, ngif, &w, &h, &pm, why) < 0) { + fprintf (stderr, "%s: %s\n", fn, why); + return; /* darn again */ + } + + /* put pm in a label and let it handle it from now on. + * put label in a form so it stretches clear across the rc + */ + n = 0; + f_w = XmCreateForm (rc, "LogoForm", args, n); + XtManageChild (f_w); + + n = 0; + XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++; + XtSetArg (args[n], XmNlabelPixmap, pm); n++; + XtSetArg (args[n], XmNalignment, XmALIGNMENT_CENTER); n++; + l_w = XmCreateLabel (f_w, "LogoLabel", args, n); + wtip (l_w, "The file /auxil/logo.gif"); + XtManageChild (l_w); +} + +/* add the xephem icon to shell widget w */ +void +setup_icon (Widget w) +{ + static Pixmap pm; + + if (!pm) { + Display *dsp = XtDisplay (w); + Window win = RootWindow (dsp, DefaultScreen(dsp)); + pm = XCreateBitmapFromData (dsp, win, (char *)xephem_bits, + xephem_width, xephem_height); + } + + set_something (w, XmNiconPixmap, (XtArgVal)pm); + set_something (w, XmNiconMask, (XtArgVal)pm); +} + +/* merge more resource files into final db; harmless if missing. + * finally add any fallbacks[] not already in db. + */ +static void +addOurDBs() +{ + XrmDatabase dspdb = XtDatabase (XtD); + XrmDatabase fbdb = NULL; + char **pp, *p; + + /* check in TELHOME */ + if ((p = getenv("TELHOME")) != NULL) { + char fullp[256]; + sprintf (fullp, "%s/archive/config/XEphem", p); + XrmCombineFileDatabase(fullp, &dspdb, True); + } + + /* then non-standard system-wide */ + XrmCombineFileDatabase("/etc/XEphem", &dspdb, True); + + /* then per-user's so it has max priority */ + XrmCombineFileDatabase(userResFile(), &dspdb, True); + + /* finally add any fallbacks[] not already known */ + for (pp = fallbacks; (p = *pp++) != NULL; ) + XrmPutLineResource (&fbdb, p); /* creates fbdb if first */ + XrmCombineDatabase (fbdb, &dspdb, False); + + /* Combine evidently uses pointers.. we die if we destroy fbdb + XrmDestroyDatabase (fbdb); + */ +} + + +/* ARGSUSED */ +static void +chk_args (argc, argv) +int argc; +char *argv[]; +{ + + if (getXRes ("log", NULL)) { + /* trouble output, if any, goes to log flie */ + char buf[1024]; + sprintf (buf, "%s/exitlog.txt", getPrivateDir()); + freopen (buf, "at", stdout); + freopen (buf, "at", stderr); + } + + if (getXRes ("prfb", NULL)) { + String *fbp = fallbacks; + for (fbp = fallbacks; *fbp != NULL; fbp++) + printf ("%s\n", *fbp); + exit (0); + } + + if (argc > 1 || getXRes ("help", NULL)) { + fprintf (stderr, "Usage: xephem [options]\n"); + fprintf (stderr, "Purpose: interactive astronomical ephemeris.\n"); + fprintf (stderr, "Version: %s Build: %s\n", PATCHLEVEL, PATCHDATE); + fprintf (stderr, "Options:\n"); + fprintf (stderr, " -env N=V : set alternate env Name=Value\n"); + fprintf (stderr, " -help : print this message then exit\n"); + fprintf (stderr, " -install {yes|no|guess}: whether to install a private colormap\n"); + fprintf (stderr, " -log : save exit trouble to private log\n"); + fprintf (stderr, " -nosplash : disable splash screen\n"); + fprintf (stderr, " -nowin : do not restore windows\n"); + fprintf (stderr, " -prfb : print all fallback resources then exit\n"); + fprintf (stderr, " -resfile f: load alternate resource file, f\n"); + fprintf (stderr, " -splash : enable splash screen\n"); + exit (0); + } +} + +/* support position of main window in our preferences system */ +static void +chk_pos() +{ + Position x = (Position)atoi(getXRes ("x", "100")); /* XEphem.x */ + Position y = (Position)atoi(getXRes ("y", "100")); /* XEphem.y */ + + set_something (toplevel_w, XmNx, (XtArgVal)x); + set_something (toplevel_w, XmNy, (XtArgVal)y); + + sr_reg (toplevel_w, "XEphem.x", maincategory, 0); + sr_reg (toplevel_w, "XEphem.y", maincategory, 0); +} + + +/* insure that resource version and (sometimes) X server matches. */ +static void +chk_version() +{ + char *v = getXRes ("Version", "??"); + + if (strcmp (v, PATCHLEVEL)) { + printf ("Version skew: Found %s but should be %s\n", v, PATCHLEVEL); + abort(); + } +} + +static void +set_title() +{ + char title[100]; + + (void) sprintf (title, "XEphem %s", PATCHLEVEL); + set_something (toplevel_w, XmNtitle, (XtArgVal) title); +} + +/* put together the menu bar, the main form, and fill in the form with the + * initial xephem buttons. + */ +static void +make_main_window () +{ + static ButtonInfo file_buttons[] = { + {"Display a dialog containing supporting informational messages", + "SysLog", "System log...", 0, 0, 'l', m_activate_cb, + (XtPointer)MSGTXT}, + {"Display pictures from the Gallery collection", + "Gallery", "Gallery...", 0, 0, 'G', m_activate_cb, + (XtPointer)GALLERY}, + {"Setup networking options", "Net", "Network setup...", 0, 0, + 'N', m_activate_cb, (XtPointer)NETSETUP}, + {"Set up to run xephem Time and Location from an external file", + "ExtIn", "External file...", 0, 0, 'E', m_activate_cb, + (XtPointer)EXTIN}, + {"Display a simple Progress meter", + "Progress", "Progress Meter...", 0, 0, 'P', m_activate_cb, + (XtPointer)PROGRESS}, + {NULL, SEPARATOR_N}, + {"Run 1 Step forward", + "Forward1", "Forward 1 Step", "Ctrlf", "Ctrl+f", 'F', + mm_go_cb, (XtPointer)1}, + {"Run 1 Step backward", + "Backward1", "Backward 1 Step", "Ctrlb", "Ctrl+b", 'B', + mm_go_cb, (XtPointer)-1}, + {"Run or stop the main execution loop", + "Update", "Update", "Ctrlu", "Ctrl+u", 'U', + mm_go_cb, (XtPointer)0}, + {NULL, SEPARATOR_N}, + {"Exit xephem", + "Quit", "Quit...", "Ctrld", "Ctrl+d", 'Q', m_activate_cb, + (XtPointer)QUIT} + }; + static ButtonInfo view_buttons[] = { + {"Display many statistics for any objects", + "GenData", "Data Table...", 0, 0, 'D', m_activate_cb, + (XtPointer)DATA}, + {NULL, SEPARATOR_N}, + {"Display an image of the Sun and supporting information", + "Sun", "Sun...", 0, 0, 'S', m_activate_cb, (XtPointer)SUNV}, + {"Display an image of the Moon and supporting information", + "Moon", "Moon...", 0, 0, 'M', m_activate_cb, (XtPointer)MOONV}, + {"Display a map of Earth and supporting information", + "Earth", "Earth...", 0, 0, 'E', m_activate_cb,(XtPointer)EARTH}, + {"Display an image of Mars and supporting information", + "Mars", "Mars...", 0, 0, 'r', m_activate_cb, (XtPointer)MARSV}, + {"Display a schematic of Jupiter, GRS, its moons, and other info", + "Jupiter", "Jupiter...", 0, 0, 'J', m_activate_cb, + (XtPointer)JUPMOON}, + {"Display schematic of Saturn, its rings and moons, and other info", + "Saturn", "Saturn...", 0, 0, 'a', m_activate_cb, + (XtPointer)SATMOON}, + {"Display schematic of Uranus, its moons, and other info", + "Uranus", "Uranus...", 0, 0, 'U', m_activate_cb, + (XtPointer)UMOON}, + {NULL, SEPARATOR_N}, + {"Display a full-featured map of the night sky", + "SkyV", "Sky View...", 0, 0, 'V', m_activate_cb, + (XtPointer)SKYVIEW}, + {"Display a map of the solar system", + "SolSys", "Solar System...", 0, 0, 'S', m_activate_cb, + (XtPointer)SOLARSYS} + }; + static ButtonInfo ctrl_buttons[] = { + {"Capture any XEphem values for making and displaying plots", + "Plot", "Plot values...", 0, 0, 'P', m_activate_cb, + (XtPointer)PLOT}, + {"Capture any XEphem values in a tabular text file", + "List", "List values...", 0, 0, 'L', m_activate_cb, + (XtPointer)LIST}, + {"Define an equation of XEphem fields and solve for min, max or 0", + "Solve", "Solve equation...", 0, 0, 'S', m_activate_cb, + (XtPointer)SEARCH}, + {"Find all pairs of close objects in memory", + "CloseObjs", "Find close pairs...", 0, 0, 'F', + m_activate_cb, (XtPointer)CLOSEOBJS}, + {"Show twilight and all basic objects on a 24 hour timeline map", + "Glance", "Night at a glance...", 0, 0, 'N', + m_activate_cb, (XtPointer)GLANCE}, +#ifdef AAVSO + {"Fetch light curves from AAVSO", + "AAVSO", "AAVSO light curves...", 0, 0, 'A', m_activate_cb, + (XtPointer)AAVSO}, +#endif + {"Sky coordinates converter", + "Coordinates converter", "Coordinates converter...",0,0,'C', + m_activate_cb, (XtPointer)CCONV}, + {"Manage Observers log", "ObsLog", "Observers log book...",0,0,'O', + m_activate_cb, (XtPointer)OBSLOG}, + {"Movie loop control", "MLoop", "Movie loop...", 0, 0,'M', + m_activate_cb, (XtPointer)MOVIELOOP}, + }; + static ButtonInfo objs_buttons[] = { + {"Load and delete .edb files to and from memory", + "Files", "Files...", 0, 0, 'L', m_activate_cb, (XtPointer)EDB}, + {"Search and inspect loaded objects", "Index", "Index...", 0, + 0,'S', m_activate_cb, (XtPointer)OBJS}, + {"Manage list of favorites", "Favorites", "Favorites...", 0, 0,'F', + m_activate_cb, (XtPointer)FAVS}, + {"Download .edb or .tle files from web", + "WebDB", "Download...", 0, 0, 'I', + m_activate_cb, (XtPointer)WEBDB}, + {"Setup field star options and catalog locations", + "FieldStars", "Field stars...", 0, 0, 'C', + m_activate_cb, (XtPointer)FIELDSTARS}, + }; + static ButtonInfo help_buttons[] = { + {"Configure Help system find a browser", + "Configure", "Configure help...", 0, 0, 'C', m_activate_cb, + (XtPointer)CONFIGHLP}, + {"Click here then roam over controls to see help tips", + "onContext", "on Context", 0, 0, 'x', m_activate_cb, + (XtPointer)CONTEXTHLP}, + {"Overall features of xephem", + "Introduction", "Introduction...", 0, 0, 'I', m_activate_cb, + (XtPointer)INTRO}, + {"How to control xephem's running behavior, including looping", + "onOperation", "on Operation...", 0, 0, 'e', m_activate_cb, + (XtPointer)OPERATION}, + {"Shortcuts to setting date and time formats", + "onTriad", "on Triad formats...", 0, 0, 'f', m_activate_cb, + (XtPointer)DATETIME}, + {NULL, SEPARATOR_N}, + {"Description of the overall Main xephem menu", + "onMainMenu", "on Main Window...", 0, 0, 'M', m_activate_cb, + (XtPointer)MAINMENU}, + {"Description of the options available under File", + "onFile", "on File...", 0, 0, 'F', m_activate_cb, + (XtPointer)FILEHLP}, + {"Description of the options available under View", + "onView", "on View...", 0, 0, 'V', m_activate_cb, + (XtPointer)VIEWHLP}, + {"Description of the options available under Tools", + "onTools", "on Tools...", 0, 0, 'T', m_activate_cb, + (XtPointer)TOOLSHLP}, + {"Description of the options available under Data", + "onObjects", "on Data...", 0, 0, 'D', m_activate_cb, + (XtPointer)OBJHLP}, + {"Description of the options available under Preferences", + "onPrefs", "on Preferences...", 0, 0, 'P', m_activate_cb, + (XtPointer)PREFHLP}, + {NULL, SEPARATOR_N}, + {"Credits, references and other kudos.", + "onReferences", "Credits...", 0, 0, 'C', m_activate_cb, + (XtPointer)REFERENCES}, + {"A few supporting issues", + "Notes", "Notes...", 0, 0, 'N', m_activate_cb,(XtPointer)NOTES}, + {"Version, copyright, fun graphic", + "About", "About...", 0, 0, 'A', m_activate_cb, (XtPointer)ABOUT} + }; + static PullDownMenu file_pd = + {"Overall control functions", + "File", 0, 'F', "file_pd", file_buttons,XtNumber(file_buttons)}; + static PullDownMenu view_pd = + {"Major display options", + "View", 0, 'V', "view_pd", view_buttons,XtNumber(view_buttons)}; + static PullDownMenu ctrl_pd = + {"Supporting analysis tools", + "Tools", 0,'T',"ctrl_pd",ctrl_buttons,XtNumber(ctrl_buttons)}; + static PullDownMenu objs_pd = + {"Add, delete and inspect objects in memory", + "Data",0,'D',"objs_pd",objs_buttons,XtNumber(objs_buttons)}; + static PullDownMenu help_pd = + {"Additional information about xephem and the Main display", + "Help", 0, 'H', "help_pd", help_buttons,XtNumber(help_buttons)}; + + Widget mainrc; + Widget mb_w; + Widget cb_w; + Arg args[20]; + int n; + + /* Create main window as a vertical r/c */ + n = 0; + XtSetArg (args[n], XmNmarginHeight, 0); n++; + XtSetArg (args[n], XmNmarginWidth, 0); n++; + mainrc = XmCreateRowColumn (toplevel_w, "XephemMain", args, n); + XtAddCallback (mainrc, XmNhelpCallback, m_activate_cb, + (XtPointer)MAINMENU); + XtManageChild (mainrc); + + /* connect actions */ + + splashMsg ("Connecting actions\n"); + mm_connActions (); + + /* Create MenuBar in mainrc */ + + n = 0; + splashMsg ("Building main menu bar\n"); + mb_w = XmCreateMenuBar (mainrc, "MB", args, n); + XtManageChild (mb_w); + + /* create each pulldown */ + + (void) make_pulldown (mb_w, &file_pd); + (void) make_pulldown (mb_w, &view_pd); + (void) make_pulldown (mb_w, &ctrl_pd); + (void) make_pulldown (mb_w, &objs_pd); + pref_create_pulldown (mb_w); + cb_w = make_pulldown (mb_w, &help_pd); + + n = 0; + XtSetArg (args[n], XmNmenuHelpWidget, cb_w); n++; + XtSetValues (mb_w, args, n); + + /* make a spot for the logo */ + splashMsg ("Building logo\n"); + make_logo (mainrc); + + /* add the remainder of the main window */ + + mm_create (mainrc); +} + +/* create/manage a cascade button with a pulldown menu off a menu bar. + * return the cascade button. + * N.B. watch for special bip->name. + */ +static Widget +make_pulldown (mb_w, pdmp) +Widget mb_w; +PullDownMenu *pdmp; +{ + Widget pulldown_w; + Widget button; + Widget cascade; + XmString accstr, labstr; + Arg args[20]; + int n; + int i; + + /* make the pulldown menu */ + + n = 0; + pulldown_w = XmCreatePulldownMenu (mb_w, pdmp->pd_name, args, n); + + /* fill it with buttons and/or separators */ + + for (i = 0; i < pdmp->nbip; i++) { + ButtonInfo *bip = &pdmp->bip[i]; + int separator = !strcmp (bip->name, SEPARATOR_N); + + if (separator) { + Widget s = XmCreateSeparator (pulldown_w, bip->name, args, n); + XtManageChild (s); + continue; + } + + accstr = NULL; + labstr = NULL; + + n = 0; + if (bip->acctext && bip->acc) { + accstr = XmStringCreate(bip->acctext, XmSTRING_DEFAULT_CHARSET); + XtSetArg (args[n], XmNacceleratorText, accstr); n++; + XtSetArg (args[n], XmNaccelerator, bip->acc); n++; + } + if (bip->label) { + labstr = XmStringCreate (bip->label, XmSTRING_DEFAULT_CHARSET); + XtSetArg (args[n], XmNlabelString, labstr); n++; + } + XtSetArg (args[n], XmNmnemonic, bip->mne); n++; + button = XmCreatePushButton (pulldown_w, bip->name, args, n); + XtManageChild (button); + if (bip->cb) + XtAddCallback (button, XmNactivateCallback, bip->cb, + (XtPointer)bip->client); + if (accstr) + XmStringFree (accstr); + if (labstr) + XmStringFree (labstr); + + if (bip->tip) + wtip (button, bip->tip); + } + + /* create a cascade button and glue them together */ + + labstr = NULL; + + n = 0; + if (pdmp->cb_label) { + labstr = XmStringCreate (pdmp->cb_label, XmSTRING_DEFAULT_CHARSET); + XtSetArg (args[n], XmNlabelString, labstr); n++; + } + XtSetArg (args[n], XmNsubMenuId, pulldown_w); n++; + XtSetArg (args[n], XmNmnemonic, pdmp->cb_mne); n++; + cascade = XmCreateCascadeButton (mb_w, pdmp->cb_name, args, n); + if (labstr) + XmStringFree (labstr); + XtManageChild (cascade); + if (pdmp->tip) + wtip (cascade, pdmp->tip); + + return (cascade); +} + +/* this method of avoiding zombies courtesy Dean Huxley */ +static void +reapchildren (int signo) +{ + while (wait3(NULL, WNOHANG, NULL) > 0) + continue; +} + +static void +setup_sigs() +{ + /* ignore FPE, though we do have a matherr() handler in misc.c. */ + (void) signal (SIGFPE, SIG_IGN); + + /* we deal with write errors directly -- don't want the signal */ + (void) signal (SIGPIPE, SIG_IGN); + + /* no zombies */ + /* SIG_IGN doesn't do it on netbsd. better to reap. see + * http://www.opengroup.org/onlinepubs/007908799/xsh/exit.html + * http://www.opengroup.org/onlinepubs/007908799/xsh/sigaction.html + * if you /do/ want to wait, the temporarily block SIGCHLD. + */ + signal (SIGCHLD, reapchildren); +} + +static void +hlp_onContext() +{ + static Cursor qc; + Display *dsp = XtDisplay (toplevel_w); + Window root = RootWindow(dsp, DefaultScreen(dsp)); + Window rw, cw; + int oldtips; + int rx, ry; + unsigned int m; + int x, y; + + /* make query cursor */ + if (!qc) + qc = XCreateFontCursor (dsp, XC_question_arrow); + + /* grab pointer and allow tips to work until press any button */ + if (XGrabPointer (dsp, root, True, ButtonPressMask, GrabModeAsync, + GrabModeSync, None, qc, CurrentTime) != GrabSuccess) { + xe_msg (1, "Could not grab pointer"); + return; + } + oldtips = pref_get (PREF_TIPS); + pref_set (PREF_TIPS, PREF_TIPSON); + do { + if (!XQueryPointer (dsp, root, &rw, &cw, &rx, &ry, &x, &y, &m)){ + xe_msg (1, "XQueryPointer error"); + break; + } + + while (XtAppPending(xe_app)) { + XEvent e; + XtAppNextEvent (xe_app, &e); + switch (e.type) { + case EnterNotify: + case LeaveNotify: + case Expose: + XtDispatchEvent (&e); + break; + } + } + } while (!(m & Button1Mask)); + + XUngrabPointer (dsp, CurrentTime); + + /* restore to Preference */ + if (oldtips == PREF_NOTIPS) + wtip_alldown(); + pref_set (PREF_TIPS, oldtips); +} + +/* bring up the initial set of desired windows */ +static void +initialUps() +{ + if (atoi(getXRes (dm_viewupres(), "0"))) + dm_manage(); + if (atoi(getXRes (sun_viewupres(), "0"))) + sun_manage(); + if (atoi(getXRes (m_viewupres(), "0"))) + m_manage(); + if (atoi(getXRes (e_viewupres(), "0"))) + e_manage(); + if (atoi(getXRes (mars_viewupres(), "0"))) + mars_manage(); + if (atoi(getXRes (jm_viewupres(), "0"))) + jm_manage(); + if (atoi(getXRes (sm_viewupres(), "0"))) + sm_manage(); + if (atoi(getXRes (um_viewupres(), "0"))) + um_manage(); + if (atoi(getXRes (sv_viewupres(), "0"))) + sv_manage(); + if (atoi(getXRes (ss_viewupres(), "0"))) + ss_manage(); + if (atoi(getXRes (ng_viewupres(), "0"))) + ng_manage(); + if (atoi(getXRes (mm_autortres(), "0"))) + mm_startrt(); +} + +/* main menubar controls callback. + * client is one of MBOptions. + */ +/* ARGSUSED */ +static void +m_activate_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + int code = (long int)client; + + watch_cursor(1); + + switch (code) { + case MSGTXT: msg_manage(); break; + case NETSETUP: net_manage(); break; + case EXTIN: mm_external(); break; + case PROGRESS: pm_manage(); break; + case QUIT: x_quit(); break; + case DATA: dm_manage(); break; + case SUNV: sun_manage(); break; + case EARTH: e_manage(); break; + case MOONV: m_manage(); break; + case MARSV: mars_manage(); break; + case JUPMOON: jm_manage(); break; + case SATMOON: sm_manage(); break; + case UMOON: um_manage(); break; + case GALLERY: gal_manage(); break; + case SKYVIEW: sv_manage(); break; + case SOLARSYS: ss_manage(); break; + case PLOT: plot_manage(); break; + case LIST: lst_manage(); break; + case SEARCH: srch_manage(); break; + case GLANCE: ng_manage(); break; + case AAVSO: av_manage(); break; + case CCONV: cc_manage(); break; + case OBSLOG: ol_manage(); break; + case FAVS: fav_manage(); break; + case OBJS: obj_manage(); break; + case EDB: db_manage(); break; + case CLOSEOBJS: c_manage(); break; + case FIELDSTARS:fs_manage(); break; + case WEBDB: wdb_manage(); break; + case MOVIELOOP: ml_manage(); break; + case ABOUT: version(); break; + case CONFIGHLP: hlp_config (); break; + case REFERENCES:hlp_dialog ("Credits", NULL, 0); break; + case INTRO: hlp_dialog ("Intro", NULL, 0); break; + case MAINMENU: hlp_dialog ("MainMenu", NULL, 0); break; + case FILEHLP: hlp_dialog ("MainMenu_file", NULL, 0); break; + case VIEWHLP: hlp_dialog ("MainMenu_view", NULL, 0); break; + case TOOLSHLP: hlp_dialog ("MainMenu_tools", NULL, 0); break; + case OBJHLP: hlp_dialog ("MainMenu_objects", NULL, 0); break; + case PREFHLP: hlp_dialog ("MainMenu_preferences", NULL, 0); break; + case OPERATION: hlp_dialog ("Operation", NULL, 0); break; + case DATETIME: hlp_dialog ("Date_time", NULL, 0); break; + case NOTES: hlp_dialog ("Notes", NULL, 0); break; + case CONTEXTHLP:hlp_onContext (); break; + default: printf ("Main menu bug: code=%d\n", code); abort(); + } + + watch_cursor(0); +} + +/* outta here */ +static void +goodbye() +{ + XtCloseDisplay (XtDisplay (toplevel_w)); + exit(0); +} + +/* user wants to quit */ +static void +x_quit() +{ + int nchg = sr_refresh(); + + if (confirm()) { + if (!nchg || (sr_autosaveon() && !sr_save(0)) || sr_isUp()) { + query (toplevel_w, "Exit xephem?", + " Yes ", " No ", 0, + goodbye, 0, 0); + } else { + query (toplevel_w, "Review unsaved Major\nresources before exiting?", + " Yes ", " No ", 0, + sr_xmanage, goodbye, 0); + } + } else { + if (nchg > 0 && sr_autosaveon() && sr_save(0) < 0) + return; /* abort exit if save failed */ + goodbye(); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: xephem.c,v $ $Date: 2013/01/14 01:04:24 $ $Revision: 1.114 $ $Name: $"}; diff --git a/GUI/xephem/xephem.h b/GUI/xephem/xephem.h new file mode 100644 index 0000000..19186b1 --- /dev/null +++ b/GUI/xephem/xephem.h @@ -0,0 +1,461 @@ +#ifndef _XEPHEM_H +#define _XEPHEM_H + +/* master include file for xephem. + * first portion to be used by all, second assumes X already included. + */ + +/* CHAPG Alex Chupahin */ +#ifdef VMS +#define fork vfork +#endif + +#include /* be kind to those who don't use xe_msg() */ + +#include "astro.h" +#include "ip.h" + +/* local glue files */ +#include "map.h" +#include "net.h" +#include "patchlevel.h" +#include "preferences.h" +#include "db.h" +#include "dm.h" +#include "sites.h" +#include "indiapi.h" + +extern FILE *fopenh (char *name, char *how); +extern FILE *fopend (char *name, char *sdir, char *how); +extern FILE *fopendq (char *fn, char *sdir, char *how); +extern INumberVectorProperty *indi_getNProperty (char *dev, char *prop); +extern Now *mm_get_now (void); +extern Obj *db_basic (int id); +extern Obj *db_scan (DBScan *sp); +extern char *dm_viewupres(void); +extern char *sun_viewupres(void); +extern char *e_viewupres(void); +extern char *m_viewupres(void); +extern char *mars_viewupres(void); +extern char *ng_viewupres (void); +extern char *jm_viewupres(void); +extern char *sm_viewupres(void); +extern char *um_viewupres(void); +extern char *sv_viewupres(void); +extern char *ss_viewupres(void); +extern char *mm_autortres(void); +extern Obj *fav_scan (int *np, int typemask); +extern char *cns_name (int id); +extern char *expand_home (char *path); +extern char *getPrivateDir (void); +extern char *getShareDir (void); +extern char *getXRes (char *name, char *def); +extern char *tempfilename (char *buf, char *name, char *suffix); +extern char *obj_description (Obj *op); +extern char *strtolower (char *str); +extern char *syserrstr (void); +extern char *userResFile (void); +extern double atod (char *buf); +extern double delra (double dra); +extern double hznAlt (double az); +extern double dm_sep (Obj *op); +extern void hznProfile (int i, double *altp, double *azp); +extern int hznDrawing (void); +extern int hznNProfile (void); +extern int GSCFetch (double ra0, double dec0, double fov, double fmag, ObjF **spp, int nspp, char msg[]); +extern int GSCSetup (char *cdp, char *chp, char msg[]); +extern int UCACSetup (char *path, char msg[]); +extern int UCACFetch (double r0, double d0, double fov, double fmag, ObjF **opp, int nopp, char msg[]); +extern int USNOFetch (double r0, double d0, double fov, double fmag, ObjF **opp, int nopp, char msg[]); +extern int USNOSetup (char *cdp, int wantgsc, char msg[]); +extern int any_ison (void); +extern int cns_pick (double ra, double dec, double e); +extern int compile_expr (char *ex, char *errbuf); +extern int confirm (void); +extern int dateOK (Now *np, Obj *op); +extern int db_load1 (void); +extern int db_n (void); +extern int db_set_field (char bp[], int id, PrefDateFormat pref, Obj *op); +extern int execute_expr (double *vp, char *errbuf); +extern int existsh (char *path); +extern int existd (char *path, char *sdir); +extern int f_ison (void); +extern int fav_already (char *name); +extern int fav_get_loaded (Obj ***oppp); +extern int fs_fetch (Now *np, double ra, double dec, double fov, double mag, ObjF **opp); +extern int fs_pmon (void); +extern int fs_setnodups (int new); +extern int gal_opfind (Obj *op); +extern int gsc23fetch (char *url, Now *np, double ra, double dec, double fov, double mag, ObjF **opp, int nop, char msg[]); +extern int indi_connected (void); +extern int indi_setNProperty (char *dev, char *prop, char *n[], double v[], int nv, char whynot[]); +extern int indi_setTProperty (char *dev, char *prop, char *n[], char *v[], int nv, char whynot[]); +extern int is_deepsky (Obj *op); +extern int listing_ison (void); +extern int ol_isUp (void); +extern int openh (char *name, int flags, ...); +extern int plot_ison (void); +extern int prog_isgood (void); +extern int sc_isGotoOn (void); +extern int sr_autosaveon (void); +extern int sr_isUp (void); +extern int sr_refresh (void); +extern int sr_save (int talk); +extern int srch_eval (double Mjd, double *tmincp); +extern int srch_ison (void); +extern int stopd_check (void); +extern int strnncmp (char *s1, char *s2); +extern int sv_ison (void); +extern int sv_hznOpOk (Obj *op); +extern int svf_filter_ok (Obj *op); +extern int svf_ismanaged (void); +extern int telIsOn (void); +extern int tickmarks (double min, double max, int numdiv, double ticks[]); +extern int tz_fromsys (Now *np); +extern int xe2chkfile (char *file, char *msg); +extern int xe2fetch (char *file, Now *np, double ra, double dec, double fov, double mag, ObjF **opp, char *msg); +extern int xe3chkdir (char *dir, char *msg); +extern int xe3fetch (char *dir, double ra, double dec, double fov, double mag, ObjF **opp, int nop, char *msg); +extern void all_newdb (int appended); +extern void all_newfavs (void); +extern void all_selection_mode (int whether); +extern void all_update (Now *np, int how_much); +extern void ano_newres (void); +extern void av_load (Obj *op); +extern void av_manage (void); +extern void c_manage (void); +extern void c_update (Now *np, int force); +extern void calm_newres (void); +extern void calm_set (Now *np); +extern void cc_manage (void); +extern void cc_update (Now *np, int force); +extern void compiler_log (char *name, double value); +extern void db_clr_cp (void); +extern void db_connect_fifo (void); +extern void db_invalidate (void); +extern void db_loadinitial (void); +extern void db_manage (void); +extern void db_newdb (int appended); +extern void db_read (char *fn); +extern void db_scaninit (DBScan *sp, int tmask, ObjF *op, int nop); +extern void db_update (Obj *op); +extern void dm_create_shell (void); +extern void dm_manage (void); +extern void dm_newfavs (void); +extern void dm_riset (Now *np, Obj *op, RiseSet *rsp); +extern void dm_selection_mode (int whether); +extern void dm_separation (Obj *p, Obj *q, double *sep); +extern void dm_update (Now *np, int how_much); +extern void e_manage (void); +extern void e_newfavs (void); +extern void e_newdb (int appended); +extern void e_newres (void); +extern void e_selection_mode (int whether); +extern void e_update (Now *np, int force); +extern void f_off (void); +extern void f_on (void); +extern void fav_add (Obj *op); +extern void fav_manage (void); +extern void fav_newdb (void); +extern void fs_create (void); +extern void fs_dm_angle (char out[], double a); +extern void fs_dms_angle (char out[], double a); +extern void fs_manage (void); +extern void fs_mtime (char out[], double t); +extern void fs_pangle (char out[], double a); +extern void fs_prdec (char out[], double jd); +extern void fs_ra (char out[], double ra); +extern void fs_time (char out[], double t); +extern void fs_timestamp (Now *np, char stamp[]); +extern void fs_tz (char *timezonename, int tzpref, Now *np); +extern void gal_manage (void); +extern void gal_opscroll (Obj *op); +extern void gk_mag (double g, double k, double rp, double rho, double *mp); +extern void hlp_config (void); +extern void hlp_dialog (char *tag, char *deflt[], int ndeflt); +extern void hznAdd (int init, double alt, double az); +extern void hznEditingOff (void); +extern void hznRawProfile (int on); +extern void hzn_manage (void); +extern void inc_mjd (Now *np, double inc, int rev, int rtcflag); +extern void indi_createShell (void); +extern void indi_manage (void); +extern void indi_newres (void); +extern void ir_manage (void); +extern void ir_setstar (double ix, double iy); +extern int ir_setting (void); +extern void jm_manage (void); +extern void jm_newdb (int appended); +extern void jm_newres (void); +extern void jm_selection_mode (int whether); +extern void jm_update (Now *np, int how_much); +extern void listing (void); +extern void llibration (double JD, double *llatp, double *llonp); +extern void lst_log (char *name, char *str); +extern void lst_manage (void); +extern void lst_selection (char *name); +extern void m_manage (void); +extern void m_newdb (int appended); +extern void m_newres (void); +extern void m_selection_mode (int whether); +extern void m_update (Now *np, int how_much); +extern void make_objgcs (void); +extern void mars_manage (void); +extern void mars_newres (void); +extern void mars_selection_mode (int whether); +extern void mars_update (Now *np, int force); +extern void marsm_manage (void); +extern void marsm_newdb (int appended); +extern void marsm_newres (void); +extern void marsm_selection_mode (int whether); +extern void marsm_update (Now *np, int how_much); +extern void mm_connActions (void); +extern void mm_external (void); +extern void mm_movie (double stepsz); +extern void mm_newcaldate (double newmjd); +extern void mm_newres (void); +extern void mm_selection_mode (int whether); +extern void mm_setll (double slat, double slng, int update); +extern void mm_startrt(void); +extern void moonnf (double Mjd, double *Mjdn, double *Mjdf); +extern void msg_manage (void); +extern void net_create (void); +extern void net_manage (void); +extern void ng_manage (void); +extern void ng_newfavs (void); +extern void ng_newres (void); +extern void ng_update (Now *np, int force); +extern void obj_manage (void); +extern void obj_newdb (int appended); +extern void obj_newres (void); +extern void ol_manage (void); +extern void ol_setObj (Obj *op); +extern void plot (void); +extern void plot_manage (void); +extern void plt_log (char *name, double value); +extern void plt_selection (char *name); +extern void pm_down (void); +extern void pm_manage (void); +extern void pm_set (int percentage); +extern void pm_up (void); +extern void redraw_screen (int how_much); +extern void register_selection (char *name); +extern void riset_cir (Now *np, Obj *op, double dis, RiseSet *rp); +extern void sc_gethost (char **host, char **port); +extern void sc_goto (Obj *op); +extern void sc_manage (void); +extern void sc_unmanage (void); +extern void setButtonInfo (void); +extern void setXRes (char *name, char *val); +extern void setXRes (char *name, char *value); +extern void set_t0 (Now *np); +extern void sm_manage (void); +extern void sfifo_openin(void); +extern void sfifo_closein(void); +extern void sm_newdb (int appended); +extern void sm_newres (void); +extern void sm_selection_mode (int whether); +extern void sm_update (Now *np, int how_much); +extern void sr_addFallbacks (void); +extern void sr_chknightv (void); +extern void sr_manage (void); +extern void sr_xmanage (void); +extern void src_manage (void); +extern void srch_log (char *name, double value); +extern void srch_manage (void); +extern void srch_selection (char *name); +extern void srch_selection_mode (int whether); +extern void srf_manage (void); +extern void ss_manage (void); +extern void ss_newdb (int appended); +extern void ss_newres (void); +extern void ss_update (Now *np, int how_much); +extern void sun_update (Now *np, int how_much); +extern void stopd_down (void); +extern void stopd_up (void); +extern void sun_newres (void); +extern void sv_all (Now *np); +extern void sv_hznOn(void); +extern void sv_amagoff (void); +extern void sv_drawimdot (double ix, double iy, int rad, int color); +extern void sv_dspFITS (void); +extern void sv_getcenter (int *aamodep, double *fovp, double *altp, double *azp, double *rap, double *decp); +extern void sv_getfldstars (ObjF **fspp, int *nfsp); +extern void sv_id (Obj *op); +extern void sv_loadfs (int force); +extern void sv_manage (void); +extern void sv_newFITS (void); +extern void sv_newdb (int appended); +extern void sv_newres (void); +extern void sv_point (Obj *op); +extern void sv_showkeeptelvis (int on); +extern void sv_scopeMark (Obj *); +extern void sv_update (Now *np, int how_much); +extern void svbs_manage (Obj *op); +extern void svbs_newres (void); +extern void svf_automag (double fov); +extern void svf_getmaglimits (int *stmagp, int *ssmagp, int *dsmagp, int *magstpp); +extern void svf_gettables (char tt[NOBJTYPES], char ct[NCLASSES]); +extern void svf_manage (void); +extern void svf_setmaglimits (int stmag, int ssmag, int dsmag, int magstp); +extern void svf_settables (char tt[NOBJTYPES], char ct[NCLASSES]); +extern void svf_unmanage (void); +extern void telGoto (Obj *op); +extern void time_fromsys (Now *np); +extern void um_manage (void); +extern void um_newdb (int appended); +extern void um_newres (void); +extern void um_selection_mode (int whether); +extern void um_update (Now *np, int how_much); +extern void version (void); +extern void watch_cursor (int want); +extern void wdb_manage (void); +extern void wtip_alldown (void); +extern void wtip_init (void); +extern void xe_msg (int modal, char *fmt, ...); +extern void zero_mem (void *loc, unsigned len); + +#if defined (X_PROTOCOL) +/* these require X Windows */ + +#include "plot.h" +#include "ps.h" +#include "rotated.h" +#include "skyeyep.h" +#include "skyhist.h" +#include "skyip.h" +#include "skylist.h" +#include "skytoolbar.h" +#include "trails.h" + +#define XtD XtDisplay(toplevel_w) +extern Colormap xe_cm; +extern String fallbacks[]; +extern Widget svshell_w; +extern Widget toplevel_w; +extern XtAppContext xe_app; +extern char myclass[]; + +extern Colormap checkCM (Colormap cm, int nwant); +extern Widget calm_create (Widget parent); +extern Widget createFSM (Widget p, char **suffix, int nsuffix, char *sdir, + XtCallbackProc cb); +extern XFontStruct * getXResFont (char *rn); +extern XImage *create_xim (int w, int h); +extern int alloc_ramp (Display *dsp, XColor *basep, Colormap cm, Pixel pix[], int maxn); +extern int get_color_resource (Widget w, char *cname, Pixel *p); +extern int gif2X (Display *dsp, Colormap cm, unsigned char gif[], int ngif, int *wp, int *hp, unsigned char **gifpix, XColor xcols[256], char err[]); +extern int gif2pm (Display *dsp, Colormap cm, unsigned char gif[], int ngif, int *wp, int *hp, Pixmap *pmp, char why[]); +extern int gray_ramp (Display *dsp, Colormap cm, Pixel **pix); +extern int isUp (Widget shell_w); +extern int jpeg2pm (Display *dsp, Colormap cm, FILE *jpegfp, int *wp, int *hp, Pixmap *pmp, XColor xcols[256], char why[]); +extern unsigned char *jpegRead(FILE *infile, int *width, int *height, unsigned char r[256], unsigned char g[256], unsigned char b[256], char why[]); +extern int plot_cartesian (DrawInfo *di, Widget widget, Dimension nx, Dimension ny); +extern void plot_coords (Widget da_w, DrawInfo *di, int window_x, int window_y); +extern void XCheck (XtAppContext app); +extern void XPS_cursor (Cursor c); +extern void ano_cb (Widget w, XtPointer client, XtPointer call); +extern void ano_cursor (Cursor c); +extern void ano_draw (Widget w, Drawable dr, int convwx(double *ap, double *bp, + int *xp, int *yp, int w2x, int arg), int arg); +extern void av_cursor (Cursor c); +extern void buttonAsButton (Widget w, int whether); +extern void c_cursor (Cursor c); +extern void cc_cursor (Cursor c); +extern void centerScrollBars (Widget sw_w); +extern void db_cursor (Cursor c); +extern void defaultTextFN (Widget w, int setcols, char *x, char *y); +extern void dm_cursor (Cursor c); +extern void dm_setup_cb (Widget w, XtPointer client, XtPointer call); +extern void e_cursor (Cursor c); +extern void f_date (Widget w, double jd); +extern void f_dm_angle (Widget w, double a); +extern void f_dms_angle (Widget w, double a); +extern void f_double (Widget w, char *fmt, double f); +extern void f_mtime (Widget w, double t); +extern void f_pangle (Widget w, double a); +extern void f_prdec (Widget w, double a); +extern void f_ra (Widget w, double ra); +extern void f_sexa (Widget wid, double a, int w, int fracbase); +extern void f_showit (Widget w, char *s); +extern void f_string (Widget w, char *s); +extern void f_time (Widget w, double t); +extern void fav_cursor (Cursor c); +extern void field_log (Widget w, double value, int logv, char *str); +extern void fixTextCursor (Widget w); +extern void freeXColors (Display *dsp, Colormap cm, XColor xcols[], int nxcols); +extern void fs_cursor (Cursor c); +extern void gal_cursor (Cursor c); +extern void get_something (Widget w, char *resource, XtArgVal value); +extern void get_tracking_font (Display *dsp, XFontStruct **fspp); +extern void get_views_font (Display *dsp, XFontStruct **fspp); +extern void get_xmlabel_font (Widget w, XFontStruct **f); +extern void get_xmstring (Widget w, char *resource, char **txtp); +extern void hzn_cursor (Cursor c); +extern void hzn_unmanage (void); +extern void jm_cursor (Cursor c); +extern void loadGreek (Display *dsp, Drawable win, GC *greekgcp, XFontStruct **greekfspp); +extern void lst_cursor (Cursor c); +extern void m_cursor (Cursor c); +extern void main_cursor (Cursor c); +extern void make_logo (Widget rc); +extern void mars_cursor (Cursor c); +extern void marsm_cursor (Cursor c); +extern void ml_add (Drawable pm, Widget timestamp); +extern void ml_cursor (Cursor c); +extern void ml_manage (void); +extern int ml_addacc (Arg args[], int n); +extern void mm_create (Widget mainrc); +extern void mm_go_cb (Widget w, XtPointer client, XtPointer call); +extern void msg_cursor (Cursor c); +extern void newEnv (int *argcp, char *argv[]); +extern void ng_cursor (Cursor c); +extern void obj_cursor (Cursor c); +extern void obj_pickgc (Obj *op, Widget w, GC *gcp); +extern void ol_cursor (Cursor c); +extern void pixCache (XColor *xcp); +extern void plt_cursor (Cursor c); +extern void pm_cursor (Cursor c); +extern void pref_create_pulldown (Widget mb_w); +extern void prompt_map_cb (Widget w, XtPointer client, XtPointer call); +extern void query (Widget tw, char *msg, char *label0, char *label1, char *label2, void (*func0)(), void (*func1)(), void (*func2)()); +extern void sc_cursor (Cursor c); +extern void set_something (Widget w, char *resource, XtArgVal value); +extern void set_tracking_font (Display *dsp, XFontStruct *fsp); +extern void set_views_font (Display *dsp, XFontStruct *fsp); +extern void set_xmstring (Widget w, char *resource, char *text); +extern void setup_icon(Widget w); +extern void sl_cursor (Cursor c); +extern void sm_cursor (Cursor c); +extern void splashOpen (int *argc, char *argv[], XrmOptionDescRec options[], int nops); +extern void splashClose (void); +extern void splashMsg (char *fmt, ...); +extern void sr_cursor (Cursor c); +extern void sr_getDirPM (Pixmap *pmopen, Pixmap *pmclose); +extern void sr_reg (Widget w, char *res, char *cat, int autosav); +extern void sr_unreg (Widget w); +extern void srch_cursor (Cursor c); +extern void ss_cursor (Cursor c); +extern void sun_cursor (Cursor c); +extern void sun_manage (void); +extern void sv_cursor (Cursor c); +extern void sv_draw_obj (Display *dsp, Drawable win, GC gc, Obj *op, int x, int y, int diam, int dotsonly); +extern void sv_draw_obj_x (Display *dsp, Drawable win, GC gc, Obj *op, int x, int y, int diam, int dotsonly, int flip_tb_x, int flip_lr_x, int aa_mode_x, int cyl_proj_x, double altdec_x, double azra_x, double vfov_x, double hfov_x, int w_x, int h_x); +extern void sv_other (double altdec, double azra, int aa, double *altdecp, double *azrap); +extern void svf_create (Widget shell_w); +extern void svf_cursor (Cursor c); +extern void svh_cursor (Cursor c); +extern void timestamp (Now *np, Widget w); +extern void um_cursor (Cursor c); +extern void v_cursor (Cursor c); +extern void wdb_cursor (Cursor c); +extern void wtip (Widget w, char *tip); + + +#endif + +#endif /* _XEPHEM_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: xephem.h,v $ $Date: 2012/12/30 17:01:02 $ $Revision: 1.63 $ $Name: $ + */ diff --git a/GUI/xephem/xephem.man b/GUI/xephem/xephem.man new file mode 100644 index 0000000..2a72704 --- /dev/null +++ b/GUI/xephem/xephem.man @@ -0,0 +1,159 @@ +.TH XEphem 1X +.SH Name +XEphem 3.7 \- an interactive astronomical ephemeris for X11 +.SH Syntax +\fBxephem [-prfb] [-install {yes|no|guess}] [-resfile ] [-[no]splash]\fP +.SH Description +.na +.nh +.PP +XEphem is an interactive astronomical ephemeris program for the X Window System. +It provides many graphical views as well as quantitative heliocentric, +geocentric and topocentric information for Earth satellites, solar system +and celestial objects. + +XEphem primarily uses two directories at runtime. One is referred to as the +Shared directory, the other as the Private directory. Shared is read-only and +holds supporting files that can be shared among all users on a system. Private +is writable and one is expected to exist for each user. See the section +below on X Resources for more information about defining these directories. + +XEphem contains extensive context-sensitive on-line help. Virtually none of +that help is duplicated here so go ahead and run XEphem to learn more. The first +thing to do once XEphem is up is configure the browser interface. All of +XEphem help is written in html and stored in a file named xephem.html. The +first entry in the Help menu brings up a table of browsers and defines a command +for each that will invoke the browser and pass it the URL and anchor of the +text to display. XEphem comes configured to support several different +browsers. If yours is listed, just click the button to its left and your help +system should be working. If your browser is not listed, please check the FAQ +for the latest news. + +Note that if you are running XEphem under cygwin on Windows, before starting +XEphem set an environment variable XEHELPURL to the full path of the +xephem.html file on your system using Windows path syntax (not cygwin paths). +This file is in the +.I help +directory within the source directory of the master distribution. +After this is in the place, run xephem and it can use MS IE to display help. + +The XEphem +.I Main window +is the master panel for setting up observing circumstances, time looping, and +for accessing all the additional tools and displays. +Observing circumstances includes location, date, time, local magnetic deviation +and atmospheric conditions (used for the refraction model). +Looping provides the ability to +set up XEphem so that it automatically increments time at a desired step size +and rate. Additional displays provide all of the graphical and quantitative +information available, which are always computed with respect to the +circumstances defined in the Main menu. Tools provide access to plotting, +searching, AAVSO and much more. + +.SH Command line Options +.B -prfb +displays all the built-in default resources, then exits. Some of them are +described here. + +.B -install +controls whether XEphem will install a private colormap. Without this option +XEphem will try to decide automatically whether it is necessary. To force +using a private colormap, use +.I -install yes. +To prevent it, use +.I -install no. +The default automatic behavior is equivalent to +.I -install guess. + +.B -resfile +tells XEphem to use an alternate file for initial resource settings. See below +for the default situation. + +.B -splash +or +.B -nosplash +controls whether XEphem will display a progress window front and center while it is +coming up. The choice is yours because this can be a useful sign of life on a +slow system, or be the source of an annoying flash on a fast system. The setting +is persistent so it will remain until changed. + +.SH Menu Tour +.B File + +This menu controls access to the System log; +setting up network access; accessing the gallery; +displaying a progress meter; controlling time and location information +remotely; and keyboard accelerators for time stepping. + +.B View + +This menu offers several graphical displays if the Sun, Earth, Moon and several +planets; a user configurable data table; and Sky and Solar System views. + +.B Tools + +This menu gives access to tools which can plot any XEphem +data items; save any data items to text files for easy export to other +programs; enter an arbitrary function to evaluate and solve using any +XEphem data items; access AAVSO online; show the Night at a glance; find close +pairs of objects; convert among various astonomical coordinate systems; and a +handy log for taking observing notes. + +.B Data + +This menu gives control over which objects XEphem will work with. +Objects may be created on the fly, read from catalog files, downloaded +from the Internet, deleted or searched. A special category of objects known as +.I Field Stars +may be configured, which are very large catalogs of objects whose access +has been optimized. Any number of +.I Favorite +objects may be defined for especially +easy access in several other places throughout XEphem. + +.B Preferences + +This menu offers several configuration choices and tools for changing fonts +and colors used throughout XEphem. +These choices can be changed at runtime and saved to disk to become the new defaults. + +.B Help + +This menu offers overall information about XEphem; +context sensitive help; +references; version number and the Copyright statement. + +.SH X Resources +When first started, XEphem looks for a file named +.B .xephemrc +in your $HOME directory. It should contain one line of the form: + +XEphem.PrivateDir: ~/.xephem + +This defines the Private directory, where XEphem will store your personal +settings. The example line shown here, which is also the assumption if the +file is not present, means XEphem will create and use a directory named +.B .xephem +for this purpose in your home directory. + +Within this directory a text file named +.B XEphem +will contain all the Preferences that differ from those built in. One +important entry defines the Shared directory. This is in intended for +multi-user installations. XEphem looks here for support files. Unless +defined otherwise, the Shared directory is ".", that is, the current +directory. + +.SH Author +.PP +Elwood C. Downey, email ecdowney@ClearSkyInstitute.com. + +.SH References +.PP +The Web homepage, including the FAQ, is maintained at +.I http://www.clearskyinstitute.com/xephem +.PP +The online Help entry +.I on Credits +lists many of the references, individuals and organizations which have +contributed to XEphem. diff --git a/GUI/xephem/xmisc.c b/GUI/xephem/xmisc.c new file mode 100644 index 0000000..0431b9d --- /dev/null +++ b/GUI/xephem/xmisc.c @@ -0,0 +1,1495 @@ +/* misc handy X Windows functions. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "xephem.h" + + +static void stopd_cb (Widget w, XtPointer data, XtPointer call); +static Widget stopd_w; /* dialog for user-stop */ +static int stopd_stopped; /* flag set by the stopd PB */ + +#define MAXGRAY 30 /* max colors in a grayscale ramp */ + +/* createFSM aux info */ +typedef struct { + char **suffixes; /* malloced list of suffixes */ + int nsuffixes; /* number of suffixes */ + char *sharedir; /* dir within ShareDir to scan */ + XtCallbackProc cb; /* callback for each PB */ +} FSMInfo; + +/* names of resource colors for the planets. + * N.B. must be in the same order as the defines in astro.h + */ +static char *plcolnames[] = { + "mercuryColor", "venusColor", "marsColor", "jupiterColor", + "saturnColor", "uranusColor", "neptuneColor", "plutoColor", + "sunColor", "moonColor" +}; + +/* name of resource for all other solar system objects */ +static char solsyscolname[] = "solSysColor"; + +/* spectral colors are defined with X res names starSpectX or starSpectXX. + * resource is looked up first pick is requested + */ +static char sresbase[] = "starSpect"; /* base name for all spect res names */ +typedef struct { + char class[2]; /* 1 or 2 char spec class */ + GC gc; /* gc to use */ +} SpColor; +static SpColor *spcolors; /* malloced array as discovered */ +static int nspcolors; /* entries in spcolors[] */ + +/* font and GCs we manage */ +static XFontStruct *viewsfsp; +static XFontStruct *trackingfsp; +static GC pl_gc[XtNumber(plcolnames)]; +static GC solsys_gc; +static GC esat_gc; +static GC other_gc; +static GC otherstar_gc; + +/* info used to make XmButton look like XmButton or XmLabel */ +static Arg look_like_button[] = { + {XmNtopShadowColor, (XtArgVal) 0}, + {XmNbottomShadowColor, (XtArgVal) 0}, + {XmNtopShadowPixmap, (XtArgVal) 0}, + {XmNbottomShadowPixmap, (XtArgVal) 0}, + {XmNfillOnArm, (XtArgVal) True}, + {XmNtraversalOn, (XtArgVal) True}, +}; +static Arg look_like_label[] = { + {XmNtopShadowColor, (XtArgVal) 0}, + {XmNbottomShadowColor, (XtArgVal) 0}, + {XmNtopShadowPixmap, (XtArgVal) 0}, + {XmNbottomShadowPixmap, (XtArgVal) 0}, + {XmNfillOnArm, (XtArgVal) False}, + {XmNtraversalOn, (XtArgVal) False}, +}; +static int look_like_inited; + +/* handy way to set one resource for a widget. + * shouldn't use this if you have several things to set for the same widget. + */ +void +set_something (w, resource, value) +Widget w; +char *resource; +XtArgVal value; +{ + Arg a[1]; + + if (!w) { + printf ("set_something(w=%p, res=%s)\n", w, resource); + abort(); + } + + XtSetArg (a[0], resource, value); + XtSetValues (w, a, 1); +} + +/* handy way to get one resource for a widget. + * shouldn't use this if you have several things to get for the same widget. + */ +void +get_something (w, resource, value) +Widget w; +char *resource; +XtArgVal value; +{ + Arg a[1]; + + if (!w) { + printf ("get_something (%s) called with w==0\n", resource); + abort(); + } + + XtSetArg (a[0], resource, value); + XtGetValues (w, a, 1); +} + +/* return the given XmString resource from the given widget as a char *. + * N.B. based on a sample in Heller, pg 178, the string back from + * XmStringGetLtoR should be XtFree'd. Therefore, OUR caller should always + * XtFree (*txtp). + */ +void +get_xmstring (w, resource, txtp) +Widget w; +char *resource; +char **txtp; +{ + static char me[] = "get_xmstring()"; + static char hah[] = "??"; + + if (!w) { + printf ("%s: called for %s with w==0\n", me, resource); + abort(); + } else { + XmString str; + get_something(w, resource, (XtArgVal)&str); + if (!XmStringGetLtoR (str, XmSTRING_DEFAULT_CHARSET, txtp)) { + /* + fprintf (stderr, "%s: can't get string resource %s\n", me, + resource); + abort(); + */ + (void) strcpy (*txtp = XtMalloc(sizeof(hah)), hah); + } + XmStringFree (str); + } +} + +void +set_xmstring (w, resource, txt) +Widget w; +char *resource; +char *txt; +{ + XmString str; + + if (!w) { + printf ("set_xmstring(w=%p, res=%s, txt=%s)\n", w, resource, txt); + abort(); + } + + str = XmStringCreateLtoR (txt, XmSTRING_DEFAULT_CHARSET); + set_something (w, resource, (XtArgVal)str); + XmStringFree (str); +} + +/* return 1 if w is on screen else 0 */ +int +isUp (w) +Widget w; +{ + XWindowAttributes wa; + Display *dsp; + Window win; + + if (!w) + return (0); + dsp = XtDisplay(w); + win = XtWindow(w); + return (win && XGetWindowAttributes(dsp, win, &wa) && + wa.map_state == IsViewable); +} + +/* may be connected as the mapCallback or XmNpopupCallback to + * center a window on the cursor (allowing for the screen edges). + */ +/* ARGSUSED */ +void +prompt_map_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + Window root, child; + int rx, ry, wx, wy; /* rx/y: cursor loc on root window */ + unsigned sw, sh; /* screen width/height */ + Dimension ww, wh; /* this widget's width/height */ + Position x, y; /* final location */ + unsigned mask; + Arg args[20]; + int n; + + XQueryPointer (XtDisplay(w), XtWindow(w), + &root, &child, &rx, &ry, &wx, &wy, &mask); + sw = WidthOfScreen (XtScreen(w)); + sh = HeightOfScreen(XtScreen(w)); + n = 0; + XtSetArg (args[n], XmNwidth, &ww); n++; + XtSetArg (args[n], XmNheight, &wh); n++; + XtGetValues (w, args, n); + + x = rx - ww/2; + if (x < 0) + x = 0; + else if (x + ww >= (int)sw) + x = sw - ww; + y = ry - wh/2; + if (y < 0) + y = 0; + else if (y + wh >= (int)sh) + y = sh - wh; + + n = 0; + XtSetArg (args[n], XmNx, x); n++; + XtSetArg (args[n], XmNy, y); n++; + XtSetValues (w, args, n); +} + +/* get the named color for w's colormap in *p, else set to White. + * return 0 if the color was found, -1 if White had to be used. + */ +int +get_color_resource (w, cname, p) +Widget w; +char *cname; +Pixel *p; +{ + Display *dsp = XtDisplay(w); + Colormap cm; + XColor defxc, dbxc; + Arg arg; + char *cval; + + XtSetArg (arg, XmNcolormap, &cm); + XtGetValues (w, &arg, 1); + cval = getXRes (cname, NULL); + + if (!cval || !XAllocNamedColor (dsp, cm, cval, &defxc, &dbxc)) { + char msg[128]; + if (!cval) + sprintf (msg, "Can not find resource `%.80s'", cname); + else + sprintf (msg, "Can not XAlloc color `%.80s'", cval); + strcat (msg, " ... using White"); + xe_msg (0, msg); + *p = WhitePixel (dsp, DefaultScreen(dsp)); + return (-1); + } else { + *p = defxc.pixel; + return (0); + } +} + +/* get the XFontStruct we want to use when drawing text for the display views. + */ +void +get_views_font (dsp, fspp) +Display *dsp; +XFontStruct **fspp; +{ + if (!viewsfsp) + viewsfsp = getXResFont ("viewsFont"); + + *fspp = viewsfsp; +} + +/* set the XFontStruct we want to use when drawing text for the display views. + * this also means setting all the GCs for objects. + */ +void +set_views_font (dsp, fsp) +Display *dsp; +XFontStruct *fsp; +{ + Font fid; + int i; + + /* TODO: free old? */ + viewsfsp = fsp; + + /* may not have created gcs yet */ + if (!other_gc) + make_objgcs(); + + /* update all Fonts in GCs */ + fid = fsp->fid; + for (i = 0; i < XtNumber(plcolnames); i++) + XSetFont (dsp, pl_gc[i], fid); + for (i = 0; i < nspcolors; i++) + XSetFont (dsp, spcolors[i].gc, fid); + XSetFont (dsp, solsys_gc, fid); + XSetFont (dsp, other_gc, fid); + XSetFont (dsp, otherstar_gc, fid); + XSetFont (dsp, esat_gc, fid); +} + +/* get the XFontStruct we want to use when drawing text while tracking cursor. + */ +void +get_tracking_font (dsp, fspp) +Display *dsp; +XFontStruct **fspp; +{ + if (!trackingfsp) + trackingfsp = getXResFont ("cursorTrackingFont"); + + *fspp = trackingfsp; +} + +/* set the XFontStruct we want to use when drawing text while tracking cursor. + */ +void +set_tracking_font (dsp, fsp) +Display *dsp; +XFontStruct *fsp; +{ + /* TODO: free old? */ + trackingfsp = fsp; +} + +/* make all the various GCs used for objects from obj_pickgc(). + * TODO: reclaim old stuff if called again, but beware of hoarding users. + */ +void +make_objgcs() +{ + Display *dsp = XtDisplay(toplevel_w); + Window win = RootWindow (dsp, DefaultScreen (dsp)); + unsigned long gcm; + XFontStruct *fsp; + XGCValues gcv; + Pixel p; + int i, j; + + /* always set font and foreground */ + gcm = GCFont | GCForeground; + get_views_font (dsp, &fsp); + gcv.font = fsp->fid; + + /* make the planet gcs */ + for (i = 0; i < XtNumber(pl_gc); i++) { + (void) get_color_resource (toplevel_w, plcolnames[i], &p); + gcv.foreground = p; + pl_gc[i] = XCreateGC (dsp, win, gcm, &gcv); + } + + /* make the gc for other solar system objects */ + (void) get_color_resource (toplevel_w, solsyscolname, &p); + gcv.foreground = p; + solsys_gc = XCreateGC (dsp, win, gcm, &gcv); + + /* make the gc for fixed types other than stars */ + (void) get_color_resource (toplevel_w, "otherObjColor", &p); + gcv.foreground = p; + other_gc = XCreateGC (dsp, win, gcm, &gcv); + + /* make the gc for stars without a matching spectral color */ + gcv.foreground = WhitePixel (dsp, DefaultScreen(dsp)); + otherstar_gc = XCreateGC (dsp, win, gcm, &gcv); + + /* build all spectral colors in resource database */ + for (i = 0; i < nspcolors; i++) + XFreeGC (dsp, spcolors[i].gc); + nspcolors = 0; + for (i = 'A'; i <= 'Z'; i++) { + for (j = 0; j <= '9'; j = j ? j+1 : '0') { + char *v, res[sizeof(sresbase)+3]; + SpColor *sp; + + sprintf (res, "%s%c%c", sresbase, i, j); + v = getXRes (res, NULL); + if (v) { + XColor defxc, dbxc; + if (!XAllocNamedColor (dsp, xe_cm, v, &defxc, &dbxc)) + defxc.pixel = WhitePixel (dsp, DefaultScreen(dsp)); + spcolors = (SpColor *) XtRealloc ((char *)spcolors, + (nspcolors+1)*sizeof(SpColor)); + sp = &spcolors[nspcolors++]; + gcv.foreground = defxc.pixel; + sp->gc = XCreateGC (dsp, win, gcm, &gcv); + sp->class[0] = i; + sp->class[1] = j; + } + } + } + + /* make the gc for earth sats */ + (void) get_color_resource (toplevel_w, "satellitesColor", &p); + gcv.foreground = p; + esat_gc = XCreateGC (dsp, win, gcm, &gcv); +} + +/* given an object, return a GC for it. + * Use the colors defined for objects in the X resources, else White. + */ +void +obj_pickgc(op, w, gcp) +Obj *op; +Widget w; +GC *gcp; +{ + /* insure GCs are ready */ + if (!other_gc) + make_objgcs(); + + if (is_type (op, PLANETM)) + *gcp = pl_gc[op->pl_code]; /* moons share parent color */ + else if (is_ssobj(op)) + *gcp = solsys_gc; + else if (is_type (op, EARTHSATM)) + *gcp = esat_gc; + else if (is_type (op, FIXEDM) || is_type (op, BINARYSTARM)) { + int l, u, m = 0, d = -1; + + /* all but bonafide stars use "other" */ + if (is_type (op, FIXEDM)) { + switch (op->f_class) { + case 'T': case 'B': case 'D': case 'M': case 'S': case 'V': + break; + default: + *gcp = other_gc; + return; + } + } + + /* binary search for perfect match */ + l = 0; + u = nspcolors - 1; + while (l <= u) { + m = (l+u)/2; + d = strncmp (spcolors[m].class, op->f_spect, 2); + if (d == 0) + break; + if (d < 0) + l = m+1; + else + u = m-1; + } + + /* select perfect or +/- 1 if same first char */ + if (d == 0 || op->f_spect[0] == spcolors[m].class[0]) + *gcp = spcolors[m].gc; + else if (m > 0 && op->f_spect[0] == spcolors[m-1].class[0]) + *gcp = spcolors[m-1].gc; + else if (m< nspcolors-1 && op->f_spect[0] == spcolors[m+1].class[0]) + *gcp = spcolors[m+1].gc; + else { + if (op->f_spect[0]) { + xe_msg (0, + "No color specified for %s class %c spectral class %.2s", + op->o_name, op->f_class, op->f_spect); + } + *gcp = otherstar_gc; + } + } else { + printf ("Unknown object type %d for coloring\n", op->o_type); + abort(); + } +} + +/* given any widget built from an XmLabel return pointer to the first + * XFontStruct in its XmFontList. + */ +void +get_xmlabel_font (w, f) +Widget w; +XFontStruct **f; +{ + static char me[] = "get_xmlable_font"; + XmFontList fl; + XmFontContext fc; + XmStringCharSet charset; + + get_something (w, XmNfontList, (XtArgVal)&fl); + if (XmFontListInitFontContext (&fc, fl) != True) { + printf ("%s: No Font context!\n", me); + abort(); + } + if (XmFontListGetNextFont (fc, &charset, f) != True) { + printf ("%s: no font!\n", me); + abort(); + } + XmFontListFreeFontContext (fc); +} + +/* get the font named by the given X resource, else fixed, else bust */ +XFontStruct * +getXResFont (rn) +char *rn; +{ + static char fixed[] = "fixed"; + char *fn = getXRes (rn, NULL); + Display *dsp = XtDisplay(toplevel_w); + XFontStruct *fsp; + + if (!fn) { + xe_msg (0, "No resource `%s' .. using fixed", rn); + fn = fixed; + } + + /* use XLoadQueryFont because it returns gracefully if font is not + * found; XLoadFont calls the default X error handler. + */ + fsp = XLoadQueryFont (dsp, fn); + if (!fsp) { + xe_msg (0, "No font `%s' for `%s' .. using fixed", fn,rn); + fsp = XLoadQueryFont (dsp, fixed); + if (!fsp) { + printf ("Can't even get %s!\n", fixed); + abort(); + } + } + + return (fsp); +} + + +/* load the greek font into *greekfspp then create a new gc at *greekgcp and + * set its font to the font id.. + * leave *greekgcp and greekfssp unchanged if there's any problems. + */ +void +loadGreek (Display *dsp, Drawable win, GC *greekgcp, XFontStruct **greekfspp) +{ + static char grres[] = "viewsGreekFont"; + XFontStruct *fsp; /* local fast access */ + GC ggc; /* local fast access */ + unsigned long gcm; + XGCValues gcv; + char *greekfn; + + greekfn = getXRes (grres, NULL); + if (!greekfn) { + xe_msg (0, "No resource: %s", grres); + return; + } + + fsp = XLoadQueryFont (dsp, greekfn); + if (!fsp) { + xe_msg (0, "No font %.100s: %.800s", grres, greekfn); + return; + } + + gcm = GCFont; + gcv.font = fsp->fid; + ggc = XCreateGC (dsp, win, gcm, &gcv); + if (!ggc) { + XFreeFont (dsp, fsp); + xe_msg (0, "Can not make Greek GC"); + return; + } + + *greekgcp = ggc; + *greekfspp = fsp; + + return; +} + +/* return a gray-scale ramp of pixels at *pixp, and the number in the ramp + * N.B. don't change the pixels -- they are shared with other users. + */ +int +gray_ramp (dsp, cm, pixp) +Display *dsp; +Colormap cm; +Pixel **pixp; +{ + static Pixel gramp[MAXGRAY]; + static int ngray; + + if (ngray == 0) { + /* get gray ramp pixels once */ + XColor white; + + white.red = white.green = white.blue = ~0; + ngray = alloc_ramp (dsp, &white, cm, gramp, MAXGRAY); + if (ngray < MAXGRAY) + xe_msg (0, "Wanted %d but only found %d grays.",MAXGRAY,ngray); + } + + *pixp = gramp; + return (ngray); +} + +/* try to fill pix[maxn] with linear ramp from black to whatever is in base. + * each entry will be unique; return said number, which can be <= maxn. + * N.B. if we end up with just 2 colors, we set pix[0]=0 and pix[1]=1 in + * anticipation of caller using a XYBitmap and thus XPutImage for which + * color 0/1 uses the background/foreground of a GC. + */ +int +alloc_ramp (Display *dsp, XColor *basep, Colormap cm, Pixel pix[], int maxn) +{ + int nalloc, nunique; + double r, g, b, h, s, v; + XColor xc; + int i, j; + + /* work in HSV space from 0..V */ + r = basep->red/65535.; + g = basep->green/65535.; + b = basep->blue/65535.; + toHSV (r, g, b, &h, &s, &v); + + /* first just try to get them all */ + for (nalloc = 0; nalloc < maxn; nalloc++) { + toRGB (h, s, v*nalloc/(maxn-1), &r, &g, &b); + xc.red = (int)(r*65535); + xc.green = (int)(g*65535); + xc.blue = (int)(b*65535); + if (XAllocColor (dsp, cm, &xc)) + pix[nalloc] = xc.pixel; + else + break; + } + + /* see how many are actually unique */ + nunique = 0; + for (i = 0; i < nalloc; i++) { + for (j = i+1; j < nalloc; j++) + if (pix[i] == pix[j]) + break; + if (j == nalloc) + nunique++; + } + + if (nunique < maxn) { + /* rebuild the ramp using just nunique entries. + * N.B. we assume we can get nunique colors again right away. + */ + XFreeColors (dsp, cm, pix, nalloc, 0); + + if (nunique <= 2) { + /* we expect caller to use a XYBitmap via GC */ + pix[0] = 0; + pix[1] = 1; + nunique = 2; + } else { + for (i = 0; i < nunique; i++) { + toRGB (h, s, v*i/(nunique-1), &r, &g, &b); + xc.red = (int)(r*65535); + xc.green = (int)(g*65535); + xc.blue = (int)(b*65535); + if (!XAllocColor (dsp, cm, &xc)) { + nunique = i; + break; + } + pix[i] = xc.pixel; + } + } + } + + return (nunique); +} + +/* create an XImage of size wXh. + * return XImage * if ok else NULL and xe_msg(). + */ +XImage * +create_xim (int w, int h) +{ + Display *dsp = XtDisplay(toplevel_w); + XImage *xip; + int mdepth; + int mbpp; + int nbytes; + char *data; + + /* establish depth and bits per pixel */ + get_something (toplevel_w, XmNdepth, (XtArgVal)&mdepth); + if (mdepth < 8) { + fprintf (stderr, "Require at least 8 bit pixel depth\n"); + return (NULL); + } + mbpp = mdepth>=17 ? 32 : (mdepth >= 9 ? 16 : 8); + nbytes = w*h*mbpp/8; + + /* get memory for image pixels. */ + data = malloc (nbytes); + if (!data) { + fprintf(stderr,"Can not get %d bytes for image pixels", nbytes); + return (NULL); + } + + /* create the XImage */ + xip = XCreateImage (dsp, DefaultVisual (dsp, DefaultScreen(dsp)), + /* depth */ mdepth, + /* format */ ZPixmap, + /* offset */ 0, + /* data */ data, + /* width */ w, + /* height */ h, + /* pad */ mbpp, + /* bpl */ 0); + if (!xip) { + fprintf (stderr, "Can not create %dx%d XImage\n", w, h); + free ((void *)data); + return (NULL); + } + + xip->bitmap_bit_order = LSBFirst; + xip->byte_order = LSBFirst; + + /* ok */ + return (xip); +} + +/* like XFreeColors but frees the pixels in xcols[nxcols] + */ +void +freeXColors (Display *dsp, Colormap cm, XColor xcols[], int nxcols) +{ + unsigned long *xpix = (Pixel*)XtMalloc(nxcols * sizeof(unsigned long)); + int i; + + for (i = 0; i < nxcols; i++) + xpix[i] = xcols[i].pixel; + + XFreeColors (dsp, cm, xpix, nxcols, 0); + + XtFree ((void *)xpix); +} + +/* given a raw (still compressed) gif file in gif[ngif], malloc its 1-byte + * pixels in *gifpix[*wp][*hp] and fill xcols[256] with X pixels and colors + * that work when indexed by an gifpix entry. + * return 0 if ok, else -1 with err[] containing a reason why not. + */ +int +gif2X ( +Display *dsp, /* X server */ +Colormap cm, /* colormap for xcols[] */ +unsigned char gif[], /* raw (still compressed) gif file contents */ +int ngif, /* bytes in gif[] */ +int *wp, int *hp, /* size of exploded gif */ +unsigned char **gifpix, /* ptr to array we malloc for gif pixels */ +XColor xcols[256], /* X pixels and colors when indexed by gifpix */ +char err[]) /* error message if we return -1 */ +{ + unsigned char gifr[256], gifg[256], gifb[256]; + int i; + + /* uncompress */ + if (explodeGIF(gif, ngif, wp, hp, gifpix, gifr, gifg, gifb, err) < 0) + return (-1); + + /* allocate colors -- don't be too fussy */ + for (i = 0; i < 256; i++) { + XColor *xcp = xcols+i; + xcp->red = ((short)(gifr[i] & 0xf8) << 8) | 0x7ff; + xcp->green = ((short)(gifg[i] & 0xf8) << 8) | 0x7ff; + xcp->blue = ((short)(gifb[i] & 0xf8) << 8) | 0x7ff; + if (!XAllocColor (dsp, cm, xcp)) { + strcpy (err, "Can not get all image map colors"); + free ((void *)(*gifpix)); + if (i > 0) + freeXColors (dsp, cm, xcols, i); + return (-1); + } + } + + /* ok */ + return (0); +} + +/* given a raw gif file in gif[ngif] return a new pixmap and its size. + * return 0 if ok, else fill why[] and return -1. + */ +int +gif2pm (Display *dsp, +Colormap cm, +unsigned char gif[], +int ngif, +int *wp, int *hp, +Pixmap *pmp, +char why[]) +{ + Window win = RootWindow(dsp, DefaultScreen(dsp)); + unsigned char *gifpix; + XColor xcols[256]; + XImage *xip; + Pixmap pm; + GC gc; + int w, h; + int x, y; + + /* get X version of image */ + if (gif2X (dsp, cm, gif, ngif, &w, &h, &gifpix, xcols, why) < 0) + return (-1); + + /* create XImage */ + xip = create_xim (w, h); + if (!xip) { + freeXColors (dsp, cm, xcols, 256); + free ((void *)gifpix); + strcpy (why, "No memory for image"); + return (-1); + } + + /* N.B. now obligued to free xip */ + + /* fill XImage with image */ + for (y = 0; y < h; y++) { + int yrow = y*w; + for (x = 0; x < w; x++) { + int gp = (int)gifpix[x + yrow]; + unsigned long p = xcols[gp].pixel; + XPutPixel (xip, x, y, p); + } + } + + /* create pixmap and fill with image */ + pm = XCreatePixmap (dsp, win, w, h, xip->depth); + gc = DefaultGC (dsp, DefaultScreen(dsp)); + XPutImage (dsp, pm, gc, xip, 0, 0, 0, 0, w, h); + + /* free gifpix and xip */ + free ((void *)gifpix); + free ((void *)xip->data); + xip->data = NULL; + XDestroyImage (xip); + + /* that's it! */ + *wp = w; + *hp = h; + *pmp = pm; + return (0); +} + +/* search for the named X resource from all the usual places. + * this looks in more places than XGetDefault(). + * we just return it as a string -- caller can do whatever. + * return def if can't find it anywhere. + * N.B. memory returned is _not_ malloced so leave it be. + * N.B. see setXRes for how newlines are handled in the Xrm. + */ +char * +getXRes (name, def) +char *name; +char *def; +{ + static char notfound[] = "_Not_Found_"; + char *res = NULL; + XtResource xr; + + xr.resource_name = name; + xr.resource_class = "AnyClass"; + xr.resource_type = XmRString; + xr.resource_size = sizeof(String); + xr.resource_offset = 0; + xr.default_type = XmRImmediate; + xr.default_addr = (XtPointer)notfound; + + XtGetApplicationResources (toplevel_w, (void *)&res, &xr, 1, NULL, 0); + if (!res || strcmp (res, notfound) == 0) + res = def; + + return (res); +} + +/* set the given application (ie, myclass.name) resource. + * N.B. the combination of setXRes/getXRes has the effect that each backslash-n + * in val comes back as a real nl and everything including and after the + * the first real nl is discarded. if you think about it, this is the same + * behavior as writing to and reading back one res to an app-defaults file. + */ +void +setXRes (name, val) +char *name, *val; +{ + XrmDatabase db = XrmGetDatabase (XtDisplay(toplevel_w)); + char buf[1024]; + + sprintf (buf, "%s.%s:%s", myclass, name, val ? val : ""); + XrmPutLineResource (&db, buf); +} + +/* build and return a private colormap for toplevel_w. + * nnew is how many colors we expect to add. + */ +Colormap +createCM(nnew) +int nnew; +{ +#define NPRECM 50 /* try to preload new cm with NPRECM colors from def cm */ + Display *dsp = XtDisplay (toplevel_w); + Window win = RootWindow (dsp, DefaultScreen(dsp)); + Colormap defcm = DefaultColormap (dsp, DefaultScreen(dsp)); + int defcells = DisplayCells (dsp, DefaultScreen(dsp)); + Visual *v = DefaultVisual (dsp, DefaultScreen(dsp)); + Colormap newcm; + + /* make a new colormap */ + newcm = XCreateColormap (dsp, win, v, AllocNone); + + /* preload with some existing colors to hedge flashing, if room */ + if (nnew + NPRECM < defcells) { + XColor preload[NPRECM]; + int i; + + for (i = 0; i < NPRECM; i++) + preload[i].pixel = (unsigned long) i; + XQueryColors (dsp, defcm, preload, NPRECM); + for (i = 0; i < NPRECM; i++) + (void) XAllocColor (dsp, newcm, &preload[i]); + } + + return (newcm); +} + +/* depending on the "install" resource and whether cm can hold nwant more + * colors, return a new colormap or cm again. + */ +Colormap +checkCM(cm, nwant) +Colormap cm; +int nwant; +{ + Display *dsp = XtDisplay(toplevel_w); + char *inst; + + /* get the install resource value */ + inst = getXRes ("install", "guess"); + + /* check each possible value */ + if (strcmp (inst, "no") == 0) + return (cm); + else if (strcmp (inst, "yes") == 0) + return (createCM (nwant)); + else if (strcmp (inst, "guess") == 0) { + /* get a smattering of colors and opt for private cm if can't. + * we use alloc_ramp() because it verifies unique pixels. + * we use three to not overstress the resolution of colors. + */ + Pixel *rr, *gr, *br; + int neach, nr, ng, nb; + XColor xc; + + /* grab some to test */ + neach = nwant/3; + xc.red = 255 << 8; + xc.green = 0; + xc.blue = 0; + rr = (Pixel *) malloc (neach * sizeof(Pixel)); + nr = alloc_ramp (dsp, &xc, cm, rr, neach); + xc.red = 0; + xc.green = 255 << 8; + xc.blue = 0; + gr = (Pixel *) malloc (neach * sizeof(Pixel)); + ng = alloc_ramp (dsp, &xc, cm, gr, neach); + xc.red = 0; + xc.green = 0; + xc.blue = 255 << 8; + br = (Pixel *) malloc (neach * sizeof(Pixel)); + nb = alloc_ramp (dsp, &xc, cm, br, neach); + + /* but don't keep them. + * N.B. alloc_ramp just cheats us with B&W if it returns 2. + */ + if (nr > 2) + XFreeColors (dsp, cm, rr, nr, 0); + if (ng > 2) + XFreeColors (dsp, cm, gr, ng, 0); + if (nb > 2) + XFreeColors (dsp, cm, br, nb, 0); + free ((void *)rr); + free ((void *)gr); + free ((void *)br); + + if (nr + ng + nb < 3*neach) + return (createCM(nwant)); + } else + printf ("Unknown install `%s' -- defaulting to No\n", inst); + + return (cm); +} + +/* explicitly handle pending X events when otherwise too busy */ +void +XCheck (app) +XtAppContext app; +{ + while ((XtAppPending (app) & XtIMXEvent) == XtIMXEvent) + XtAppProcessEvent (app, XtIMXEvent); +} + +/* center the scrollbars in the given scrolled window */ +void +centerScrollBars(sw_w) +Widget sw_w; +{ + int min, max, slidersize, value; + XmScrollBarCallbackStruct sbcs; + Widget sb_w; + + /* you would think setting XmNvalue would be enough but seems we + * must trigger the callback too, at least on MKS + */ + memset (&sbcs, 0, sizeof(sbcs)); + sbcs.reason = XmCR_VALUE_CHANGED; + sbcs.event = NULL; /* ? */ + + get_something (sw_w, XmNhorizontalScrollBar, (XtArgVal)&sb_w); + get_something (sb_w, XmNminimum, (XtArgVal)&min); + get_something (sb_w, XmNmaximum, (XtArgVal)&max); + get_something (sb_w, XmNsliderSize, (XtArgVal)&slidersize); + sbcs.value = value = (min+max-slidersize)/2; + set_something (sb_w, XmNvalue, (XtArgVal)value); + XtCallCallbacks (sb_w, XmNvalueChangedCallback, &sbcs); + + get_something (sw_w, XmNverticalScrollBar, (XtArgVal)&sb_w); + get_something (sb_w, XmNminimum, (XtArgVal)&min); + get_something (sb_w, XmNmaximum, (XtArgVal)&max); + get_something (sb_w, XmNsliderSize, (XtArgVal)&slidersize); + sbcs.value = value = (min+max-slidersize)/2; + set_something (sb_w, XmNvalue, (XtArgVal)value); + XtCallCallbacks (sb_w, XmNvalueChangedCallback, &sbcs); +} + +/* set the XmNcolumns resource of the given Text or TextField widget to the + * full length of the current string. + */ +void +textColumns (w) +Widget w; +{ + Arg args[10]; + char *bp; + int n; + + if (XmIsText(w)) + bp = XmTextGetString (w); + else if (XmIsTextField(w)) + bp = XmTextFieldGetString (w); + else + return; + + n = 0; + XtSetArg (args[n], XmNcolumns, strlen(bp)); n++; + XtSetValues (w, args, n); + + XtFree (bp); + +} + +/* check the given XmText or XmTextField value: + * if empty, fill with "x/y", or just "x" if !y. + * then set size to accommodate if setcols. + * while we're at it, fix the text cursor. + */ +void +defaultTextFN (w, setcols, x, y) +Widget w; +int setcols; +char *x, *y; +{ + char *tp = XmTextGetString (w); + + if (tp[0] == '\0') { + char buf[1024]; + if (y) + sprintf (buf, "%s/%s", x, y); + else + strcpy (buf, x); + XmTextSetString (w, buf); + } + XtFree (tp); + + if (setcols) + textColumns (w); + + fixTextCursor (w); +} + +/* turn cursor on/off to follow focus */ +static void +textFixCursorCB(w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + XmAnyCallbackStruct *ap = (XmAnyCallbackStruct *)call; + Arg a; + + XtSetArg (a, XmNcursorPositionVisible, ap->reason == XmCR_FOCUS); + XtSetValues (w, &a, 1); +} + +/* call just after creation to work around ugly grey cursor in idle Text or + * TextField + */ +void +fixTextCursor (w) +Widget w; +{ + Arg a; + + XtSetArg (a, XmNcursorPositionVisible, False); + XtSetValues (w, &a, 1); + + XtAddCallback (w, XmNfocusCallback, textFixCursorCB, 0); + XtAddCallback (w, XmNlosingFocusCallback, textFixCursorCB, 0); +} + +/* convert str to all lowercase IN PLACE */ +char * +strtolower (char *str) +{ + char *s = str; + + /* actually faster to /not/ call isupper() first */ + do + *s = tolower (*s); + while (*s++); + + return (str); +} + +/* check whether op is within its valid date range at np. + * if not make a note and return -1 else return 0. + */ +int +dateOK (Now *np, Obj *op) +{ + char dbuf[32]; + + if (dateRangeOK (np, op) == 0) + return (0); + + fs_date (dbuf, pref_get(PREF_DATE_FORMAT), mjd); + xe_msg (0, "Elements for %s are not valid on %s", op->o_name, dbuf); + return (-1); +} + +/* set up look_like_button[] and look_like_label[] */ +void +setButtonInfo() +{ + Pixel topshadcol, botshadcol, bgcol; + Pixmap topshadpm, botshadpm; + Widget sample; + Arg args[20]; + int n; + + n = 0; + sample = XmCreatePushButton (toplevel_w, "TEST", args, n); + + n = 0; + XtSetArg (args[n], XmNtopShadowColor, &topshadcol); n++; + XtSetArg (args[n], XmNbottomShadowColor, &botshadcol); n++; + XtSetArg (args[n], XmNtopShadowPixmap, &topshadpm); n++; + XtSetArg (args[n], XmNbottomShadowPixmap, &botshadpm); n++; + XtSetArg (args[n], XmNbackground, &bgcol); n++; + XtGetValues (sample, args, n); + + look_like_button[0].value = topshadcol; + look_like_button[1].value = botshadcol; + look_like_button[2].value = topshadpm; + look_like_button[3].value = botshadpm; + look_like_label[0].value = bgcol; + look_like_label[1].value = bgcol; + look_like_label[2].value = XmUNSPECIFIED_PIXMAP; + look_like_label[3].value = XmUNSPECIFIED_PIXMAP; + + XtDestroyWidget (sample); +} + +/* manipulate the given XmButton resources so it indeed looks like a button + * or like a label. + */ +void +buttonAsButton (w, whether) +Widget w; +int whether; +{ + if (!look_like_inited) { + setButtonInfo(); + look_like_inited = 1; + } + + if (whether) + XtSetValues (w, look_like_button, XtNumber(look_like_button)); + else + XtSetValues (w, look_like_label, XtNumber(look_like_label)); +} + +/* pop up a dialog to allow aborting a lengthy operation. + * then check occasionally using stopd_check() + */ +void +stopd_up() +{ + /* create if first time */ + if (!stopd_w) { + Widget rc_w, w; + Arg args[20]; + int n; + + /* create shell */ + + n = 0; + XtSetArg(args[n], XmNcolormap, xe_cm); n++; + XtSetArg(args[n], XmNtitle, "xephem Stop"); n++; + XtSetArg(args[n], XmNiconName, "Stop"); n++; + XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); n++; + stopd_w = XtCreatePopupShell("NetStop", topLevelShellWidgetClass, + toplevel_w, args, n); + setup_icon (stopd_w); + set_something (stopd_w, XmNcolormap, (XtArgVal)xe_cm); + XtAddCallback (stopd_w, XmNpopupCallback, prompt_map_cb, NULL); + + /* rc for controls */ + + n = 0; + XtSetArg(args[n], XmNisAligned, True); n++; + XtSetArg(args[n], XmNentryAlignment, XmALIGNMENT_CENTER); n++; + XtSetArg(args[n], XmNspacing, 10); n++; + XtSetArg(args[n], XmNmarginHeight, 10); n++; + XtSetArg(args[n], XmNmarginWidth, 10); n++; + rc_w = XmCreateRowColumn (stopd_w, "SRC", args, n); + XtManageChild (rc_w); + + /* label and stop button */ + + n = 0; + w = XmCreateLabel (rc_w, "SL", args, n); + set_xmstring (w, XmNlabelString, " Press Stop to cancel... "); + XtManageChild (w); + + n = 0; + w = XmCreatePushButton (rc_w, "Stop", args, n); + XtAddCallback (w, XmNactivateCallback, stopd_cb, NULL); + XtManageChild (w); + } + + /* bring it up for sure */ + XtPopdown (stopd_w); /* so Popup causes position and raise */ + XtPopup (stopd_w, XtGrabNone); + set_something (stopd_w, XmNiconic, (XtArgVal)False); + XFlush (XtDisplay(stopd_w)); + XmUpdateDisplay (stopd_w); + XSync (XtDisplay(stopd_w), 0); + + /* init button not pressed */ + stopd_stopped = 0; +} + +/* bring down the user-stop dialog */ +void +stopd_down() +{ + if (stopd_w) + XtPopdown (stopd_w); + stopd_stopped = 0; +} + +/* after calling stopd_up(), poll this to check whether the user wants to stop. + * return -1 to stop, else 0. + */ +int +stopd_check() +{ + /* check for user button presses */ + XCheck (xe_app); + + if (stopd_stopped) { + stopd_stopped = 0; + return (-1); + } + return (0); +} + +/* called when the user presses the Stop button */ +/* ARGSUSED */ +static void +stopd_cb (w, client, call) +Widget w; +XtPointer client; +XtPointer call; +{ + xe_msg (0, "User stop"); + stopd_stopped = 1; +} + +/* compare two pointers to strings, qsort style */ +static int +strc_qs (const void *v1, const void *v2) +{ + return (strcmp (*(char **)v1, *(char **)v2)); +} + +/* called when a pulldown built by createFSM, w, is coming up. + * client is an FSBInfo. + */ +static void +FSMfillcb (Widget w, XtPointer client, XtPointer call) +{ + FSMInfo *fsm = (FSMInfo *) client; + WidgetList chil; + Cardinal nchil; + Widget pb_w; + char **files; + int nfiles; + char dirs[2][1024]; + int i, j, k; + + /* init dirs and file list, private first */ + sprintf (dirs[0], "%s", getPrivateDir()); + sprintf (dirs[1], "%s/%s", getShareDir(), fsm->sharedir); + files = NULL; + nfiles = 0; + + /* scan each dir for each suffix, use only first one seen */ + for (i = 0; i < 2; i++) { + DIR *dirp = opendir (dirs[i]); + struct dirent *dp; + if (!dirp) + continue; + while ((dp = readdir(dirp)) != NULL) { + for (j = 0; j < fsm->nsuffixes; j++) { + int sl = strlen(fsm->suffixes[j]); + int fl = strlen(dp->d_name); + int dl = fl - sl; + if (dl > 0 && !strcmp (dp->d_name+dl, fsm->suffixes[j])) { + for (k = 0; k < nfiles; k++) + if (strcmp (dp->d_name, files[k]) == 0) + break; /* already seen */ + if (k == nfiles) { + files = (char **) XtRealloc ((char *)files, + (nfiles+1)*sizeof(char*)); + files[nfiles++] = XtNewString (dp->d_name); + } + } + } + } + closedir (dirp); + } + + /* sort */ + qsort (files, nfiles, sizeof(char *), strc_qs); + + /* put each file into pulldown, add if more now */ + get_something (w, XmNnumChildren, (XtArgVal)&nchil); + for (i = 0; i < nfiles; i++) { + if (i < nchil) { + /* get fresh pointer in case it moves when grown */ + get_something (w, XmNchildren, (XtArgVal)&chil); + pb_w = chil[i]; + } else { + /* add new */ + pb_w = XmCreatePushButton (w, "FSMPB", NULL, 0); + XtAddCallback (pb_w, XmNactivateCallback, fsm->cb, NULL); + nchil++; + } + set_xmstring (pb_w, XmNlabelString, files[i]); + XtFree (files[i]); + XtManageChild (pb_w); + } + XtFree ((char *)files); + + /* multi-column if really long list */ + if (nfiles >= 3) + set_something (w,XmNnumColumns,(XtArgVal)((int)(sqrt(nfiles/3.0)))); + else + set_something (w, XmNnumColumns, (XtArgVal)1); + + /* turn off any extra PBs */ + get_something (w, XmNchildren, (XtArgVal)&chil); + for (; i < nchil; i++) + XtUnmanageChild (chil[i]); +} + +/* create a pulldown that fills itself with names of all files in Shared/sdir + * and Private with any of the given suffixes. If parent p is a MenuBar we + * build a pulldown triggered by a cascade button and return the cascade button, + * else we build and return an option menu. cb will be called when the user + * selects an item in the menu, it should get file name from the labelString + * resource of the w. + * N.B. we assume memory for sdir and each entry in suffix[] are persistent. + * N.B. we malloc one new FSMInfo for each pulldown. + * N.B. each suffix must include leading '.' + */ +Widget +createFSM (Widget p, char **suffix, int nsuffix, char *sdir, XtCallbackProc cb) +{ + FSMInfo *fsm; + Widget pd_w, mgr_w; + unsigned char rctype; + Arg args[20]; + int n; + + /* gather the info */ + fsm = (FSMInfo *) XtMalloc (sizeof(FSMInfo)); + fsm->suffixes = (char **) XtMalloc (nsuffix * sizeof(char *)); + fsm->nsuffixes = nsuffix; + memcpy (fsm->suffixes, suffix, nsuffix * sizeof(char *)); + fsm->sharedir = sdir; + fsm->cb = cb; + + /* create the pulldown, allow for multicolumn, connect fsm cb */ + n = 0; + pd_w = XmCreatePulldownMenu (p, "FSM", args, n); + set_something (pd_w, XmNpacking, (XtArgVal)XmPACK_COLUMN); + XtAddCallback (pd_w, XmNmapCallback, FSMfillcb, (XtPointer)fsm); + + /* create the pulldown's manager */ + n = 0; + XtSetArg (args[n], XmNsubMenuId, pd_w); n++; + if (XmIsRowColumn(p) && (get_something (p, XmNrowColumnType, + (XtArgVal)&rctype), rctype == XmMENU_BAR)) { + mgr_w = XmCreateCascadeButton (p, "FSBCB", args, n); + set_xmstring (mgr_w, XmNlabelString, "Files"); + } else { + /* put one entry for something to show in putton */ + Widget pb_w = XmCreatePushButton (pd_w, "XX", NULL, 0); + XtAddCallback (pb_w, XmNactivateCallback, cb, NULL); + XtManageChild (pb_w); + set_xmstring (pb_w, XmNlabelString, "Make selection"); + mgr_w = XmCreateOptionMenu (p, "FSBOM", args, n); + } + XtManageChild (mgr_w); + + return (mgr_w); +} + +/* look up xcp->pixel in xe_cm and fill in xcp->red/green/blue. + * keep a cache of known values to reduce server round trips. + * if xcp == NULL reset the cache collection. + */ +void +pixCache (XColor *xcp) +{ + static XColor *xc; + static int nxc; + int t, b; + + /* just reset if no xcp */ + if (!xcp) { + if (xc) { + free (xc); + xc = NULL; + } + nxc = 0; + return; + } + + /* binary search */ + t = nxc - 1; + b = 0; + while (b <= t) { + int m = (t+b)/2; + XColor *mxcp = &xc[m]; + if (xcp->pixel == mxcp->pixel) { + *xcp = *mxcp; + return; + } + if (xcp->pixel < mxcp->pixel) + t = m-1; + else + b = m+1; + } + + /* not found, get the r/g/b */ + XQueryColor (XtDisplay(toplevel_w), xe_cm, xcp); + + /* add to cache in ascending order */ + xc = xc ? realloc(xc, (nxc+1)*sizeof(XColor)) : malloc(sizeof(XColor)); + for (t = nxc-1; t >= 0 && xc[t].pixel > xcp->pixel; --t) + xc[t+1] = xc[t]; + xc[t+1] = *xcp; + nxc++; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: xmisc.c,v $ $Date: 2006/04/10 09:00:06 $ $Revision: 1.57 $ $Name: $"}; diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..7e6a5df --- /dev/null +++ b/INSTALL @@ -0,0 +1,111 @@ +How to install XEphem Version 4.0.0, either for just yourself or system-wide: + +1) Build the executable: + + Explode xephem-4.0.0.tar.gz and change to the build directory: + + $ tar xfz xephem-4.0.0.tar.gz + $ cd xephem-4.0.0/GUI/xephem + + On Intel x86_32 linux just do this: + + $ make MOTIF=../../libXm/linux86 + + On Mac OS X just do this: + + $ make MOTIF=../../libXm/osx + + On OpenVMS just do this (from this directory): + + $@build + $set def [.GUI.XEPHEM] + $run xephem + + Otherwise edit Makefile to set the MOTIFI and MOTIFL macros for + your system then make. If you can not find Motif on your system try + using your package manager to search for it, for exampe: + $ yum search openmotif + $ zypper search openmotif + $ apt-file search openmotif + or look for binary kits at http://motif.ics.com/motif or build from + source from http://sourceforge.net/projects/motif. You'll also need + a bunch of supporting X11 Windows stuff too, but decent package + managers will bring those dependencies in for you also automatically. + In all cases, you'll want the development versions so you can use them + to build new programs, not just run existing ones. + +2) For a sneak peek, run it now; then click File->Quit and go to the next step: + + $ ./xephem + + If you get a message "X Resources out of date" you have installed + XEphem before and must locate and remove the old resource file. + +Next do either 3a or 3b, not both: + +3a) Installing XEphem for just yourself without root permission (see + next step for system-wide multiuser installation): + + 3a.1 Copy the executable where you keep your private programs: + + $ cp xephem $HOME/bin # or where ever + + 3a.2 Create a directory off your HOME called .xephem for all per-user files + + $ mkdir $HOME/.xephem + + 3a.3 Create an initial resource file called $HOME/.xephem/XEphem with + just one line in it as follows: + + XEphem.ShareDir:

+ + where is the full path of the directory containing the directories + auxil, catalogs, fifos, fits, gallery, help, and lo. These are in the + source directory of the original tar kit which is where you are now, if + you have been following along. You can leave them here if you like or move + them, just set to where ever they end up. + +3b) Installing XEphem for multiple users (requires root permission) (skip if + installing just for yourself): + + 3b.1 Copy the executable where everyone can find it: + + $ cp xephem /usr/bin # or elsewhere in your PATH + + 3b.2 Create a directory for system-wide read-only files to be shared by all + XEphem users and fill with the defaults included in this kit: + + $ mkdir /usr/local/xephem # or where ever + $ cp -R auxil /usr/local/xephem # copy auxil dir and contents + $ cp -R catalogs /usr/local/xephem # copy catalogs dir and contents + $ cp -R fifos /usr/local/xephem # copy fifos dir and contents + $ cp -R fits /usr/local/xephem # copy fits dir and contents + $ cp -R gallery /usr/local/xephem # copy gallery images + $ cp -R help /usr/local/xephem # copy help files + $ cp -R lo /usr/local/xephem # copy lunar db + + 3b.3 Do the same as step 3a.3 above but create the new file in a place + where XEphem can find it from anywhere: + + /etc/XEphem + + 3b.4 Copy the man page: + + $ cp xephem.1 /usr/local/man/man1 # or where ever + +4) XEphem uses your browser to display Help. Open Help->Configure and select + your browser of choice. Use %s where ever the real URL should go. If your + browser is not listed, figure out the command line to tell it to display a + local URL, add it to the list and send it to me so I can add it to the FAQ. + +5) Done at least, now just run and go: + + $ xephem + + +Thanks for using XEphem! + + +Elwood Downey +ecdowney@ClearSkyInstitute.com +http://www.ClearSkyInstitute.com diff --git a/README b/README new file mode 100644 index 0000000..8bfb65f --- /dev/null +++ b/README @@ -0,0 +1,3 @@ +Welcome to XEphem, an interactive astronomy program for all UNIX platforms. + +Start with the INSTALL file. diff --git a/build.com b/build.com new file mode 100644 index 0000000..a8215f5 --- /dev/null +++ b/build.com @@ -0,0 +1,14 @@ +$set def [.libastro] +$mms/ign=war +$set def [-.libip] +$mms/ign=war +$set def [-.LIBJPEGD] +$mms/ign=war +$set def [-.LIBLILXML] +$mms/ign=war +$set def [-.LIBPNG] +$mms/ign=war +$set def [-.LIBZ] +$mms/ign=war +$set def [-.GUI.XEPHEM] +$mms/ign=war diff --git a/libXm/._README b/libXm/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/._README differ diff --git a/libXm/README b/libXm/README new file mode 100644 index 0000000..f29f91d --- /dev/null +++ b/libXm/README @@ -0,0 +1,4 @@ +These are the bare-bones files needed to build a Motif program on Linux and +Mac OSX. These are culled from the full distribution of Open Motif, available +from http://www.motifzone.org + diff --git a/libXm/linux86/._libXm.a b/libXm/linux86/._libXm.a new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/._libXm.a differ diff --git a/libXm/linux86/Xm/._AccColorT.h b/libXm/linux86/Xm/._AccColorT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._AccColorT.h differ diff --git a/libXm/linux86/Xm/._AccTextT.h b/libXm/linux86/Xm/._AccTextT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._AccTextT.h differ diff --git a/libXm/linux86/Xm/._ActivatableT.h b/libXm/linux86/Xm/._ActivatableT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ActivatableT.h differ diff --git a/libXm/linux86/Xm/._ArrowB.h b/libXm/linux86/Xm/._ArrowB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ArrowB.h differ diff --git a/libXm/linux86/Xm/._ArrowBG.h b/libXm/linux86/Xm/._ArrowBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ArrowBG.h differ diff --git a/libXm/linux86/Xm/._ArrowBGP.h b/libXm/linux86/Xm/._ArrowBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ArrowBGP.h differ diff --git a/libXm/linux86/Xm/._ArrowBP.h b/libXm/linux86/Xm/._ArrowBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ArrowBP.h differ diff --git a/libXm/linux86/Xm/._AtomMgr.h b/libXm/linux86/Xm/._AtomMgr.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._AtomMgr.h differ diff --git a/libXm/linux86/Xm/._BaseClassP.h b/libXm/linux86/Xm/._BaseClassP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._BaseClassP.h differ diff --git a/libXm/linux86/Xm/._BulletinB.h b/libXm/linux86/Xm/._BulletinB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._BulletinB.h differ diff --git a/libXm/linux86/Xm/._BulletinBP.h b/libXm/linux86/Xm/._BulletinBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._BulletinBP.h differ diff --git a/libXm/linux86/Xm/._ButtonBox.h b/libXm/linux86/Xm/._ButtonBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ButtonBox.h differ diff --git a/libXm/linux86/Xm/._ButtonBoxP.h b/libXm/linux86/Xm/._ButtonBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ButtonBoxP.h differ diff --git a/libXm/linux86/Xm/._CacheP.h b/libXm/linux86/Xm/._CacheP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CacheP.h differ diff --git a/libXm/linux86/Xm/._CareVisualT.h b/libXm/linux86/Xm/._CareVisualT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CareVisualT.h differ diff --git a/libXm/linux86/Xm/._CascadeB.h b/libXm/linux86/Xm/._CascadeB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CascadeB.h differ diff --git a/libXm/linux86/Xm/._CascadeBG.h b/libXm/linux86/Xm/._CascadeBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CascadeBG.h differ diff --git a/libXm/linux86/Xm/._CascadeBGP.h b/libXm/linux86/Xm/._CascadeBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CascadeBGP.h differ diff --git a/libXm/linux86/Xm/._CascadeBP.h b/libXm/linux86/Xm/._CascadeBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CascadeBP.h differ diff --git a/libXm/linux86/Xm/._ClipWindowP.h b/libXm/linux86/Xm/._ClipWindowP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ClipWindowP.h differ diff --git a/libXm/linux86/Xm/._ColorObjP.h b/libXm/linux86/Xm/._ColorObjP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ColorObjP.h differ diff --git a/libXm/linux86/Xm/._ColorP.h b/libXm/linux86/Xm/._ColorP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ColorP.h differ diff --git a/libXm/linux86/Xm/._ColorS.h b/libXm/linux86/Xm/._ColorS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ColorS.h differ diff --git a/libXm/linux86/Xm/._ColorSP.h b/libXm/linux86/Xm/._ColorSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ColorSP.h differ diff --git a/libXm/linux86/Xm/._Column.h b/libXm/linux86/Xm/._Column.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Column.h differ diff --git a/libXm/linux86/Xm/._ColumnP.h b/libXm/linux86/Xm/._ColumnP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ColumnP.h differ diff --git a/libXm/linux86/Xm/._ComboBox.h b/libXm/linux86/Xm/._ComboBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ComboBox.h differ diff --git a/libXm/linux86/Xm/._ComboBox2.h b/libXm/linux86/Xm/._ComboBox2.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ComboBox2.h differ diff --git a/libXm/linux86/Xm/._ComboBox2P.h b/libXm/linux86/Xm/._ComboBox2P.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ComboBox2P.h differ diff --git a/libXm/linux86/Xm/._ComboBoxP.h b/libXm/linux86/Xm/._ComboBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ComboBoxP.h differ diff --git a/libXm/linux86/Xm/._Command.h b/libXm/linux86/Xm/._Command.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Command.h differ diff --git a/libXm/linux86/Xm/._CommandP.h b/libXm/linux86/Xm/._CommandP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CommandP.h differ diff --git a/libXm/linux86/Xm/._ContItemT.h b/libXm/linux86/Xm/._ContItemT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ContItemT.h differ diff --git a/libXm/linux86/Xm/._Container.h b/libXm/linux86/Xm/._Container.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Container.h differ diff --git a/libXm/linux86/Xm/._ContainerP.h b/libXm/linux86/Xm/._ContainerP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ContainerP.h differ diff --git a/libXm/linux86/Xm/._ContainerT.h b/libXm/linux86/Xm/._ContainerT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ContainerT.h differ diff --git a/libXm/linux86/Xm/._CutPaste.h b/libXm/linux86/Xm/._CutPaste.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._CutPaste.h differ diff --git a/libXm/linux86/Xm/._DataF.h b/libXm/linux86/Xm/._DataF.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DataF.h differ diff --git a/libXm/linux86/Xm/._DataFP.h b/libXm/linux86/Xm/._DataFP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DataFP.h differ diff --git a/libXm/linux86/Xm/._DataFSelP.h b/libXm/linux86/Xm/._DataFSelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DataFSelP.h differ diff --git a/libXm/linux86/Xm/._DesktopP.h b/libXm/linux86/Xm/._DesktopP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DesktopP.h differ diff --git a/libXm/linux86/Xm/._DialogS.h b/libXm/linux86/Xm/._DialogS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DialogS.h differ diff --git a/libXm/linux86/Xm/._DialogSEP.h b/libXm/linux86/Xm/._DialogSEP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DialogSEP.h differ diff --git a/libXm/linux86/Xm/._DialogSP.h b/libXm/linux86/Xm/._DialogSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DialogSP.h differ diff --git a/libXm/linux86/Xm/._DialogSavvyT.h b/libXm/linux86/Xm/._DialogSavvyT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DialogSavvyT.h differ diff --git a/libXm/linux86/Xm/._Display.h b/libXm/linux86/Xm/._Display.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Display.h differ diff --git a/libXm/linux86/Xm/._DisplayP.h b/libXm/linux86/Xm/._DisplayP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DisplayP.h differ diff --git a/libXm/linux86/Xm/._DragC.h b/libXm/linux86/Xm/._DragC.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragC.h differ diff --git a/libXm/linux86/Xm/._DragCP.h b/libXm/linux86/Xm/._DragCP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragCP.h differ diff --git a/libXm/linux86/Xm/._DragDrop.h b/libXm/linux86/Xm/._DragDrop.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragDrop.h differ diff --git a/libXm/linux86/Xm/._DragIcon.h b/libXm/linux86/Xm/._DragIcon.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragIcon.h differ diff --git a/libXm/linux86/Xm/._DragIconP.h b/libXm/linux86/Xm/._DragIconP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragIconP.h differ diff --git a/libXm/linux86/Xm/._DragOverS.h b/libXm/linux86/Xm/._DragOverS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragOverS.h differ diff --git a/libXm/linux86/Xm/._DragOverSP.h b/libXm/linux86/Xm/._DragOverSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DragOverSP.h differ diff --git a/libXm/linux86/Xm/._DrawP.h b/libXm/linux86/Xm/._DrawP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DrawP.h differ diff --git a/libXm/linux86/Xm/._DrawUtils.h b/libXm/linux86/Xm/._DrawUtils.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DrawUtils.h differ diff --git a/libXm/linux86/Xm/._DrawingA.h b/libXm/linux86/Xm/._DrawingA.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DrawingA.h differ diff --git a/libXm/linux86/Xm/._DrawingAP.h b/libXm/linux86/Xm/._DrawingAP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DrawingAP.h differ diff --git a/libXm/linux86/Xm/._DrawnB.h b/libXm/linux86/Xm/._DrawnB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DrawnB.h differ diff --git a/libXm/linux86/Xm/._DrawnBP.h b/libXm/linux86/Xm/._DrawnBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DrawnBP.h differ diff --git a/libXm/linux86/Xm/._DropSMgr.h b/libXm/linux86/Xm/._DropSMgr.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DropSMgr.h differ diff --git a/libXm/linux86/Xm/._DropSMgrP.h b/libXm/linux86/Xm/._DropSMgrP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DropSMgrP.h differ diff --git a/libXm/linux86/Xm/._DropTrans.h b/libXm/linux86/Xm/._DropTrans.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DropTrans.h differ diff --git a/libXm/linux86/Xm/._DropTransP.h b/libXm/linux86/Xm/._DropTransP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._DropTransP.h differ diff --git a/libXm/linux86/Xm/._Ext.h b/libXm/linux86/Xm/._Ext.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Ext.h differ diff --git a/libXm/linux86/Xm/._Ext18List.h b/libXm/linux86/Xm/._Ext18List.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Ext18List.h differ diff --git a/libXm/linux86/Xm/._Ext18ListP.h b/libXm/linux86/Xm/._Ext18ListP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Ext18ListP.h differ diff --git a/libXm/linux86/Xm/._ExtObjectP.h b/libXm/linux86/Xm/._ExtObjectP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ExtObjectP.h differ diff --git a/libXm/linux86/Xm/._ExtP.h b/libXm/linux86/Xm/._ExtP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ExtP.h differ diff --git a/libXm/linux86/Xm/._FileSB.h b/libXm/linux86/Xm/._FileSB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._FileSB.h differ diff --git a/libXm/linux86/Xm/._FileSBP.h b/libXm/linux86/Xm/._FileSBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._FileSBP.h differ diff --git a/libXm/linux86/Xm/._FontS.h b/libXm/linux86/Xm/._FontS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._FontS.h differ diff --git a/libXm/linux86/Xm/._FontSP.h b/libXm/linux86/Xm/._FontSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._FontSP.h differ diff --git a/libXm/linux86/Xm/._Form.h b/libXm/linux86/Xm/._Form.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Form.h differ diff --git a/libXm/linux86/Xm/._FormP.h b/libXm/linux86/Xm/._FormP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._FormP.h differ diff --git a/libXm/linux86/Xm/._Frame.h b/libXm/linux86/Xm/._Frame.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Frame.h differ diff --git a/libXm/linux86/Xm/._FrameP.h b/libXm/linux86/Xm/._FrameP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._FrameP.h differ diff --git a/libXm/linux86/Xm/._Gadget.h b/libXm/linux86/Xm/._Gadget.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Gadget.h differ diff --git a/libXm/linux86/Xm/._GadgetP.h b/libXm/linux86/Xm/._GadgetP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._GadgetP.h differ diff --git a/libXm/linux86/Xm/._GrabShell.h b/libXm/linux86/Xm/._GrabShell.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._GrabShell.h differ diff --git a/libXm/linux86/Xm/._GrabShellP.h b/libXm/linux86/Xm/._GrabShellP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._GrabShellP.h differ diff --git a/libXm/linux86/Xm/._Hierarchy.h b/libXm/linux86/Xm/._Hierarchy.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Hierarchy.h differ diff --git a/libXm/linux86/Xm/._HierarchyP.h b/libXm/linux86/Xm/._HierarchyP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._HierarchyP.h differ diff --git a/libXm/linux86/Xm/._IconBox.h b/libXm/linux86/Xm/._IconBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconBox.h differ diff --git a/libXm/linux86/Xm/._IconBoxP.h b/libXm/linux86/Xm/._IconBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconBoxP.h differ diff --git a/libXm/linux86/Xm/._IconButton.h b/libXm/linux86/Xm/._IconButton.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconButton.h differ diff --git a/libXm/linux86/Xm/._IconButtonP.h b/libXm/linux86/Xm/._IconButtonP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconButtonP.h differ diff --git a/libXm/linux86/Xm/._IconFile.h b/libXm/linux86/Xm/._IconFile.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconFile.h differ diff --git a/libXm/linux86/Xm/._IconFileP.h b/libXm/linux86/Xm/._IconFileP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconFileP.h differ diff --git a/libXm/linux86/Xm/._IconG.h b/libXm/linux86/Xm/._IconG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconG.h differ diff --git a/libXm/linux86/Xm/._IconGP.h b/libXm/linux86/Xm/._IconGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconGP.h differ diff --git a/libXm/linux86/Xm/._IconH.h b/libXm/linux86/Xm/._IconH.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconH.h differ diff --git a/libXm/linux86/Xm/._IconHP.h b/libXm/linux86/Xm/._IconHP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._IconHP.h differ diff --git a/libXm/linux86/Xm/._JoinSideT.h b/libXm/linux86/Xm/._JoinSideT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._JoinSideT.h differ diff --git a/libXm/linux86/Xm/._Label.h b/libXm/linux86/Xm/._Label.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Label.h differ diff --git a/libXm/linux86/Xm/._LabelG.h b/libXm/linux86/Xm/._LabelG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._LabelG.h differ diff --git a/libXm/linux86/Xm/._LabelGP.h b/libXm/linux86/Xm/._LabelGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._LabelGP.h differ diff --git a/libXm/linux86/Xm/._LabelP.h b/libXm/linux86/Xm/._LabelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._LabelP.h differ diff --git a/libXm/linux86/Xm/._LayoutT.h b/libXm/linux86/Xm/._LayoutT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._LayoutT.h differ diff --git a/libXm/linux86/Xm/._List.h b/libXm/linux86/Xm/._List.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._List.h differ diff --git a/libXm/linux86/Xm/._ListP.h b/libXm/linux86/Xm/._ListP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ListP.h differ diff --git a/libXm/linux86/Xm/._MainW.h b/libXm/linux86/Xm/._MainW.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MainW.h differ diff --git a/libXm/linux86/Xm/._MainWP.h b/libXm/linux86/Xm/._MainWP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MainWP.h differ diff --git a/libXm/linux86/Xm/._Manager.h b/libXm/linux86/Xm/._Manager.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Manager.h differ diff --git a/libXm/linux86/Xm/._ManagerP.h b/libXm/linux86/Xm/._ManagerP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ManagerP.h differ diff --git a/libXm/linux86/Xm/._MenuProcP.h b/libXm/linux86/Xm/._MenuProcP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MenuProcP.h differ diff --git a/libXm/linux86/Xm/._MenuShell.h b/libXm/linux86/Xm/._MenuShell.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MenuShell.h differ diff --git a/libXm/linux86/Xm/._MenuShellP.h b/libXm/linux86/Xm/._MenuShellP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MenuShellP.h differ diff --git a/libXm/linux86/Xm/._MenuStateP.h b/libXm/linux86/Xm/._MenuStateP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MenuStateP.h differ diff --git a/libXm/linux86/Xm/._MenuT.h b/libXm/linux86/Xm/._MenuT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MenuT.h differ diff --git a/libXm/linux86/Xm/._MenuUtilP.h b/libXm/linux86/Xm/._MenuUtilP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MenuUtilP.h differ diff --git a/libXm/linux86/Xm/._MessageB.h b/libXm/linux86/Xm/._MessageB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MessageB.h differ diff --git a/libXm/linux86/Xm/._MessageBP.h b/libXm/linux86/Xm/._MessageBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MessageBP.h differ diff --git a/libXm/linux86/Xm/._MwmUtil.h b/libXm/linux86/Xm/._MwmUtil.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._MwmUtil.h differ diff --git a/libXm/linux86/Xm/._NavigatorT.h b/libXm/linux86/Xm/._NavigatorT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._NavigatorT.h differ diff --git a/libXm/linux86/Xm/._Notebook.h b/libXm/linux86/Xm/._Notebook.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Notebook.h differ diff --git a/libXm/linux86/Xm/._NotebookP.h b/libXm/linux86/Xm/._NotebookP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._NotebookP.h differ diff --git a/libXm/linux86/Xm/._Outline.h b/libXm/linux86/Xm/._Outline.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Outline.h differ diff --git a/libXm/linux86/Xm/._OutlineP.h b/libXm/linux86/Xm/._OutlineP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._OutlineP.h differ diff --git a/libXm/linux86/Xm/._Paned.h b/libXm/linux86/Xm/._Paned.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Paned.h differ diff --git a/libXm/linux86/Xm/._PanedP.h b/libXm/linux86/Xm/._PanedP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PanedP.h differ diff --git a/libXm/linux86/Xm/._PanedW.h b/libXm/linux86/Xm/._PanedW.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PanedW.h differ diff --git a/libXm/linux86/Xm/._PanedWP.h b/libXm/linux86/Xm/._PanedWP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PanedWP.h differ diff --git a/libXm/linux86/Xm/._Picture.h b/libXm/linux86/Xm/._Picture.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Picture.h differ diff --git a/libXm/linux86/Xm/._PictureP.h b/libXm/linux86/Xm/._PictureP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PictureP.h differ diff --git a/libXm/linux86/Xm/._PointInT.h b/libXm/linux86/Xm/._PointInT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PointInT.h differ diff --git a/libXm/linux86/Xm/._Primitive.h b/libXm/linux86/Xm/._Primitive.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Primitive.h differ diff --git a/libXm/linux86/Xm/._PrimitiveP.h b/libXm/linux86/Xm/._PrimitiveP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PrimitiveP.h differ diff --git a/libXm/linux86/Xm/._Print.h b/libXm/linux86/Xm/._Print.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Print.h differ diff --git a/libXm/linux86/Xm/._PrintSP.h b/libXm/linux86/Xm/._PrintSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PrintSP.h differ diff --git a/libXm/linux86/Xm/._Protocols.h b/libXm/linux86/Xm/._Protocols.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Protocols.h differ diff --git a/libXm/linux86/Xm/._ProtocolsP.h b/libXm/linux86/Xm/._ProtocolsP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ProtocolsP.h differ diff --git a/libXm/linux86/Xm/._PushB.h b/libXm/linux86/Xm/._PushB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PushB.h differ diff --git a/libXm/linux86/Xm/._PushBG.h b/libXm/linux86/Xm/._PushBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PushBG.h differ diff --git a/libXm/linux86/Xm/._PushBGP.h b/libXm/linux86/Xm/._PushBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PushBGP.h differ diff --git a/libXm/linux86/Xm/._PushBP.h b/libXm/linux86/Xm/._PushBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._PushBP.h differ diff --git a/libXm/linux86/Xm/._RCLayoutP.h b/libXm/linux86/Xm/._RCLayoutP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._RCLayoutP.h differ diff --git a/libXm/linux86/Xm/._RCMenuP.h b/libXm/linux86/Xm/._RCMenuP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._RCMenuP.h differ diff --git a/libXm/linux86/Xm/._RepType.h b/libXm/linux86/Xm/._RepType.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._RepType.h differ diff --git a/libXm/linux86/Xm/._RowColumn.h b/libXm/linux86/Xm/._RowColumn.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._RowColumn.h differ diff --git a/libXm/linux86/Xm/._RowColumnP.h b/libXm/linux86/Xm/._RowColumnP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._RowColumnP.h differ diff --git a/libXm/linux86/Xm/._SSpinB.h b/libXm/linux86/Xm/._SSpinB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SSpinB.h differ diff --git a/libXm/linux86/Xm/._SSpinBP.h b/libXm/linux86/Xm/._SSpinBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SSpinBP.h differ diff --git a/libXm/linux86/Xm/._SashP.h b/libXm/linux86/Xm/._SashP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SashP.h differ diff --git a/libXm/linux86/Xm/._Scale.h b/libXm/linux86/Xm/._Scale.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Scale.h differ diff --git a/libXm/linux86/Xm/._ScaleP.h b/libXm/linux86/Xm/._ScaleP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScaleP.h differ diff --git a/libXm/linux86/Xm/._Screen.h b/libXm/linux86/Xm/._Screen.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Screen.h differ diff --git a/libXm/linux86/Xm/._ScreenP.h b/libXm/linux86/Xm/._ScreenP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScreenP.h differ diff --git a/libXm/linux86/Xm/._ScrollBar.h b/libXm/linux86/Xm/._ScrollBar.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScrollBar.h differ diff --git a/libXm/linux86/Xm/._ScrollBarP.h b/libXm/linux86/Xm/._ScrollBarP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScrollBarP.h differ diff --git a/libXm/linux86/Xm/._ScrollFrameT.h b/libXm/linux86/Xm/._ScrollFrameT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScrollFrameT.h differ diff --git a/libXm/linux86/Xm/._ScrolledW.h b/libXm/linux86/Xm/._ScrolledW.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScrolledW.h differ diff --git a/libXm/linux86/Xm/._ScrolledWP.h b/libXm/linux86/Xm/._ScrolledWP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ScrolledWP.h differ diff --git a/libXm/linux86/Xm/._SelectioB.h b/libXm/linux86/Xm/._SelectioB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SelectioB.h differ diff --git a/libXm/linux86/Xm/._SelectioBP.h b/libXm/linux86/Xm/._SelectioBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SelectioBP.h differ diff --git a/libXm/linux86/Xm/._SeparatoG.h b/libXm/linux86/Xm/._SeparatoG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SeparatoG.h differ diff --git a/libXm/linux86/Xm/._SeparatoGP.h b/libXm/linux86/Xm/._SeparatoGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SeparatoGP.h differ diff --git a/libXm/linux86/Xm/._Separator.h b/libXm/linux86/Xm/._Separator.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Separator.h differ diff --git a/libXm/linux86/Xm/._SeparatorP.h b/libXm/linux86/Xm/._SeparatorP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SeparatorP.h differ diff --git a/libXm/linux86/Xm/._ShellEP.h b/libXm/linux86/Xm/._ShellEP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ShellEP.h differ diff --git a/libXm/linux86/Xm/._SlideC.h b/libXm/linux86/Xm/._SlideC.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SlideC.h differ diff --git a/libXm/linux86/Xm/._SlideCP.h b/libXm/linux86/Xm/._SlideCP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SlideCP.h differ diff --git a/libXm/linux86/Xm/._SpecRenderT.h b/libXm/linux86/Xm/._SpecRenderT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SpecRenderT.h differ diff --git a/libXm/linux86/Xm/._SpinB.h b/libXm/linux86/Xm/._SpinB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SpinB.h differ diff --git a/libXm/linux86/Xm/._SpinBP.h b/libXm/linux86/Xm/._SpinBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._SpinBP.h differ diff --git a/libXm/linux86/Xm/._TabBox.h b/libXm/linux86/Xm/._TabBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TabBox.h differ diff --git a/libXm/linux86/Xm/._TabBoxP.h b/libXm/linux86/Xm/._TabBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TabBoxP.h differ diff --git a/libXm/linux86/Xm/._TabList.h b/libXm/linux86/Xm/._TabList.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TabList.h differ diff --git a/libXm/linux86/Xm/._TabStack.h b/libXm/linux86/Xm/._TabStack.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TabStack.h differ diff --git a/libXm/linux86/Xm/._TabStackP.h b/libXm/linux86/Xm/._TabStackP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TabStackP.h differ diff --git a/libXm/linux86/Xm/._Table.h b/libXm/linux86/Xm/._Table.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Table.h differ diff --git a/libXm/linux86/Xm/._TableP.h b/libXm/linux86/Xm/._TableP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TableP.h differ diff --git a/libXm/linux86/Xm/._TakesDefT.h b/libXm/linux86/Xm/._TakesDefT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TakesDefT.h differ diff --git a/libXm/linux86/Xm/._TearOffBP.h b/libXm/linux86/Xm/._TearOffBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TearOffBP.h differ diff --git a/libXm/linux86/Xm/._TearOffP.h b/libXm/linux86/Xm/._TearOffP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TearOffP.h differ diff --git a/libXm/linux86/Xm/._Text.h b/libXm/linux86/Xm/._Text.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Text.h differ diff --git a/libXm/linux86/Xm/._TextF.h b/libXm/linux86/Xm/._TextF.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextF.h differ diff --git a/libXm/linux86/Xm/._TextFP.h b/libXm/linux86/Xm/._TextFP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextFP.h differ diff --git a/libXm/linux86/Xm/._TextFSelP.h b/libXm/linux86/Xm/._TextFSelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextFSelP.h differ diff --git a/libXm/linux86/Xm/._TextInP.h b/libXm/linux86/Xm/._TextInP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextInP.h differ diff --git a/libXm/linux86/Xm/._TextOutP.h b/libXm/linux86/Xm/._TextOutP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextOutP.h differ diff --git a/libXm/linux86/Xm/._TextP.h b/libXm/linux86/Xm/._TextP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextP.h differ diff --git a/libXm/linux86/Xm/._TextSelP.h b/libXm/linux86/Xm/._TextSelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextSelP.h differ diff --git a/libXm/linux86/Xm/._TextStrSoP.h b/libXm/linux86/Xm/._TextStrSoP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TextStrSoP.h differ diff --git a/libXm/linux86/Xm/._ToggleB.h b/libXm/linux86/Xm/._ToggleB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ToggleB.h differ diff --git a/libXm/linux86/Xm/._ToggleBG.h b/libXm/linux86/Xm/._ToggleBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ToggleBG.h differ diff --git a/libXm/linux86/Xm/._ToggleBGP.h b/libXm/linux86/Xm/._ToggleBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ToggleBGP.h differ diff --git a/libXm/linux86/Xm/._ToggleBP.h b/libXm/linux86/Xm/._ToggleBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._ToggleBP.h differ diff --git a/libXm/linux86/Xm/._TraitP.h b/libXm/linux86/Xm/._TraitP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TraitP.h differ diff --git a/libXm/linux86/Xm/._Transfer.h b/libXm/linux86/Xm/._Transfer.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Transfer.h differ diff --git a/libXm/linux86/Xm/._TransferP.h b/libXm/linux86/Xm/._TransferP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TransferP.h differ diff --git a/libXm/linux86/Xm/._TransferT.h b/libXm/linux86/Xm/._TransferT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TransferT.h differ diff --git a/libXm/linux86/Xm/._TransltnsP.h b/libXm/linux86/Xm/._TransltnsP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TransltnsP.h differ diff --git a/libXm/linux86/Xm/._TravConT.h b/libXm/linux86/Xm/._TravConT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TravConT.h differ diff --git a/libXm/linux86/Xm/._Tree.h b/libXm/linux86/Xm/._Tree.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Tree.h differ diff --git a/libXm/linux86/Xm/._TreeP.h b/libXm/linux86/Xm/._TreeP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TreeP.h differ diff --git a/libXm/linux86/Xm/._TxtPropCv.h b/libXm/linux86/Xm/._TxtPropCv.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._TxtPropCv.h differ diff --git a/libXm/linux86/Xm/._UnhighlightT.h b/libXm/linux86/Xm/._UnhighlightT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._UnhighlightT.h differ diff --git a/libXm/linux86/Xm/._UnitTypeT.h b/libXm/linux86/Xm/._UnitTypeT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._UnitTypeT.h differ diff --git a/libXm/linux86/Xm/._VaSimpleP.h b/libXm/linux86/Xm/._VaSimpleP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._VaSimpleP.h differ diff --git a/libXm/linux86/Xm/._VendorS.h b/libXm/linux86/Xm/._VendorS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._VendorS.h differ diff --git a/libXm/linux86/Xm/._VendorSEP.h b/libXm/linux86/Xm/._VendorSEP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._VendorSEP.h differ diff --git a/libXm/linux86/Xm/._VendorSP.h b/libXm/linux86/Xm/._VendorSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._VendorSP.h differ diff --git a/libXm/linux86/Xm/._VirtKeys.h b/libXm/linux86/Xm/._VirtKeys.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._VirtKeys.h differ diff --git a/libXm/linux86/Xm/._VirtKeysP.h b/libXm/linux86/Xm/._VirtKeysP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._VirtKeysP.h differ diff --git a/libXm/linux86/Xm/._Xm.h b/libXm/linux86/Xm/._Xm.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Xm.h differ diff --git a/libXm/linux86/Xm/._XmAll.h b/libXm/linux86/Xm/._XmAll.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._XmAll.h differ diff --git a/libXm/linux86/Xm/._XmIm.h b/libXm/linux86/Xm/._XmIm.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._XmIm.h differ diff --git a/libXm/linux86/Xm/._XmP.h b/libXm/linux86/Xm/._XmP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._XmP.h differ diff --git a/libXm/linux86/Xm/._XmStrDefs.h b/libXm/linux86/Xm/._XmStrDefs.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._XmStrDefs.h differ diff --git a/libXm/linux86/Xm/._Xmfuncs.h b/libXm/linux86/Xm/._Xmfuncs.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._Xmfuncs.h differ diff --git a/libXm/linux86/Xm/._XmosP.h b/libXm/linux86/Xm/._XmosP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._XmosP.h differ diff --git a/libXm/linux86/Xm/._XpmP.h b/libXm/linux86/Xm/._XpmP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._XpmP.h differ diff --git a/libXm/linux86/Xm/._xmlist.h b/libXm/linux86/Xm/._xmlist.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/linux86/Xm/._xmlist.h differ diff --git a/libXm/linux86/Xm/AccColorT.h b/libXm/linux86/Xm/AccColorT.h new file mode 100644 index 0000000..58c86e6 --- /dev/null +++ b/libXm/linux86/Xm/AccColorT.h @@ -0,0 +1,100 @@ +/* $XConsortium: AccColorT.h /main/5 1995/07/15 20:47:59 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmAccessColorsT_H +#define _XmAccessColorsT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTaccessColors; + +/* this one can be expanded in the future */ +typedef struct _XmAccessColorDataRec { + Mask valueMask ; + Pixel foreground ; + Pixel background ; + Pixel highlight_color ; + Pixel top_shadow_color ; + Pixel bottom_shadow_color ; + Pixel select_color ; +} XmAccessColorDataRec, *XmAccessColorData; + +typedef void (*XmAccessColorsGetProc)(Widget widget, + XmAccessColorData color_data); +typedef void (*XmAccessColorsSetProc)(Widget widget, + XmAccessColorData color_data); + +/* Trait structures and typedefs, place typedefs first */ + +/* Version 0: initial release. */ + +typedef struct _XmAccessColorsTraitRec { + int version; /* 0 */ + XmAccessColorsGetProc getColors; + XmAccessColorsGetProc setColors; +} XmAccessColorsTraitRec, *XmAccessColorsTrait; + +#define AccessColorInvalid 0L +#define AccessForeground (1L<<0) +#define AccessBackgroundPixel (1L<<1) +#define AccessHighlightColor (1L<<2) +#define AccessTopShadowColor (1L<<3) +#define AccessBottomShadowColor (1L<<4) +#define AccessSelectColor (1L<<5) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +/* to do: + + add it to PushB/G and ToggleB/G so that they can report their + select color + implement the setValues ? + +*/ + +#endif /* _XmAccessColorsT_H */ diff --git a/libXm/linux86/Xm/AccTextT.h b/libXm/linux86/Xm/AccTextT.h new file mode 100644 index 0000000..4b63e85 --- /dev/null +++ b/libXm/linux86/Xm/AccTextT.h @@ -0,0 +1,72 @@ +/* $XConsortium: AccTextT.h /main/5 1995/07/15 20:48:04 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmAccessTextualT_H +#define _XmAccessTextualT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTaccessTextual; + +typedef XtPointer (*XmAccessTextualGetValuesProc)(Widget, int); +typedef int (*XmAccessTextualPreferredProc)(Widget); +typedef void (*XmAccessTextualSetValuesProc)(Widget, XtPointer, int); + +enum { XmFORMAT_XmSTRING, XmFORMAT_MBYTE, XmFORMAT_WCS }; + +/* Trait structures and typedefs, place typedefs first */ + +/* Version 0: initial release. */ + +typedef struct _XmAccessTextualTraitRec { + int version; /* 0 */ + XmAccessTextualGetValuesProc getValue; + XmAccessTextualSetValuesProc setValue; + XmAccessTextualPreferredProc preferredFormat; +} XmAccessTextualTraitRec, *XmAccessTextualTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmAccessTextualT_H */ diff --git a/libXm/linux86/Xm/ActivatableT.h b/libXm/linux86/Xm/ActivatableT.h new file mode 100644 index 0000000..2466213 --- /dev/null +++ b/libXm/linux86/Xm/ActivatableT.h @@ -0,0 +1,70 @@ +/* $XConsortium: ActivatableT.h /main/5 1995/07/15 20:48:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmActivatableT_H +#define _XmActivatableT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTactivatable; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmActivatableCallBackProc)(Widget w, + XtCallbackProc activCB, + XtPointer closure, + Boolean setunset); + +/* Version 0: initial release. */ + +typedef struct _XmActivatableTraitRec { + int version; /* 0 */ + XmActivatableCallBackProc changeCB; +} XmActivatableTraitRec, *XmActivatableTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmActivatableT_H */ diff --git a/libXm/linux86/Xm/ArrowB.h b/libXm/linux86/Xm/ArrowB.h new file mode 100644 index 0000000..63a830a --- /dev/null +++ b/libXm/linux86/Xm/ArrowB.h @@ -0,0 +1,77 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowB.h /main/12 1995/07/14 10:08:56 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowButton_h +#define _XmArrowButton_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsArrowButton +#define XmIsArrowButton(w) XtIsSubclass(w, xmArrowButtonWidgetClass) +#endif /* XmIsArrowButton */ + +externalref WidgetClass xmArrowButtonWidgetClass; + +typedef struct _XmArrowButtonClassRec * XmArrowButtonWidgetClass; +typedef struct _XmArrowButtonRec * XmArrowButtonWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateArrowButton( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowButton_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ArrowBG.h b/libXm/linux86/Xm/ArrowBG.h new file mode 100644 index 0000000..c4ae87f --- /dev/null +++ b/libXm/linux86/Xm/ArrowBG.h @@ -0,0 +1,77 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowBG.h /main/12 1995/07/14 10:09:33 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowButtonGadget_h +#define _XmArrowButtonGadget_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsArrowButtonGadget +#define XmIsArrowButtonGadget(w) XtIsSubclass(w, xmArrowButtonGadgetClass) +#endif /* XmIsArrowButtonGadget */ + +externalref WidgetClass xmArrowButtonGadgetClass; + +typedef struct _XmArrowButtonGadgetClassRec * XmArrowButtonGadgetClass; +typedef struct _XmArrowButtonGadgetRec * XmArrowButtonGadget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateArrowButtonGadget( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowButtonGadget_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ArrowBGP.h b/libXm/linux86/Xm/ArrowBGP.h new file mode 100644 index 0000000..52fac6c --- /dev/null +++ b/libXm/linux86/Xm/ArrowBGP.h @@ -0,0 +1,169 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowBGP.h /main/13 1995/07/14 10:09:51 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowGadgetP_h +#define _XmArrowGadgetP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Arrow class structure */ + +typedef struct _XmArrowButtonGadgetClassPart +{ + XtPointer extension; +} XmArrowButtonGadgetClassPart; + + +/* Full class record declaration for Arrow class */ + +typedef struct _XmArrowButtonGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmArrowButtonGadgetClassPart arrow_button_class; +} XmArrowButtonGadgetClassRec; + +externalref XmArrowButtonGadgetClassRec xmArrowButtonGadgetClassRec; + +/* The Arrow instance record */ + +typedef struct _XmArrowButtonGadgetPart +{ + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + unsigned char direction; /* The direction the arrow is pointing. */ + + Boolean selected; + + short top_count; + short cent_count; + short bot_count; + XRectangle *top; + XRectangle *cent; + XRectangle *bot; + + Position old_x; + Position old_y; + + GC arrow_GC; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + GC insensitive_GC; + + + GC background_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + GC highlight_GC; + + Pixel foreground; + Pixel background; + + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Pixel highlight_color; + Pixmap highlight_pixmap; + + Boolean fill_bg_box; + Dimension detail_shadow_thickness ; +} XmArrowButtonGadgetPart; + + +/* Full instance record declaration */ + +typedef struct _XmArrowButtonGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmArrowButtonGadgetPart arrowbutton; +} XmArrowButtonGadgetRec; + + + +#define ArrowBG_BackgroundGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. background_GC) +#define ArrowBG_TopShadowGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. top_shadow_GC) +#define ArrowBG_BottomShadowGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. bottom_shadow_GC) +#define ArrowBG_HighlightGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. highlight_GC) +#define ArrowBG_Foreground(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. foreground) +#define ArrowBG_Background(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. background) +#define ArrowBG_TopShadowColor(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. top_shadow_color) +#define ArrowBG_TopShadowPixmap(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. top_shadow_pixmap) +#define ArrowBG_BottomShadowColor(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. bottom_shadow_color) +#define ArrowBG_BottomShadowPixmap(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. bottom_shadow_pixmap) +#define ArrowBG_HighlightColor(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. highlight_color) +#define ArrowBG_HighlightPixmap(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. highlight_pixmap) + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowGadgetP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ArrowBP.h b/libXm/linux86/Xm/ArrowBP.h new file mode 100644 index 0000000..52ac02d --- /dev/null +++ b/libXm/linux86/Xm/ArrowBP.h @@ -0,0 +1,120 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowBP.h /main/13 1995/07/14 10:10:05 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowButtonP_h +#define _XmArrowButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Arrow class structure */ + +typedef struct _XmArrowButtonClassPart +{ + XtPointer extension; +} XmArrowButtonClassPart; + + +/* Full class record declaration for Arrow class */ + +typedef struct _XmArrowButtonClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmArrowButtonClassPart arrowbutton_class; +} XmArrowButtonClassRec; + +externalref XmArrowButtonClassRec xmArrowButtonClassRec; + + +/* The ArrowButton instance record */ + +typedef struct _XmArrowButtonPart +{ + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + unsigned char direction; /* The direction the arrow is pointing. */ + + Boolean selected; + short top_count; + short cent_count; + short bot_count; + XRectangle *top; + XRectangle *cent; + XRectangle *bot; + + GC arrow_GC; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + Time armTimeStamp; + GC insensitive_GC; + Dimension detail_shadow_thickness ; +} XmArrowButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmArrowButtonRec +{ + CorePart core; + XmPrimitivePart primitive; + XmArrowButtonPart arrowbutton; +} XmArrowButtonRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/AtomMgr.h b/libXm/linux86/Xm/AtomMgr.h new file mode 100644 index 0000000..0c30feb --- /dev/null +++ b/libXm/linux86/Xm/AtomMgr.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: AtomMgr.h /main/12 1997/09/10 11:15:15 mgreess $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmAtomMgr_h +#define _XmAtomMgr_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* X11r5' XInternAtom equivalent */ +extern Atom XmInternAtom( + Display *display, + String name, +#if NeedWidePrototypes + int only_if_exists ); +#else + Boolean only_if_exists ); +#endif /* NeedWidePrototypes */ + +/* X11r5's XGetAtomName equivalent */ +extern String XmGetAtomName( Display *display, Atom atom); + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +/* This macro name is confusing, and of unknown benefit. + * #define XmNameToAtom(display, atom) \ + * XmGetAtomName(display, atom) + */ + +#endif /* _XmAtomMgr_h */ diff --git a/libXm/linux86/Xm/BaseClassP.h b/libXm/linux86/Xm/BaseClassP.h new file mode 100644 index 0000000..3e010f3 --- /dev/null +++ b/libXm/linux86/Xm/BaseClassP.h @@ -0,0 +1,200 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BaseClassP.h /main/11 1995/10/25 19:53:53 cde-sun $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmBaseClassP_h +#define _XmBaseClassP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define _XmBCEPTR(wc) ((XmBaseClassExt *)(&(((WidgetClass)(wc))\ + ->core_class.extension))) +#define _XmBCE(wc) ((XmBaseClassExt)(((WidgetClass)(wc))\ + ->core_class.extension)) + +#define _XmGetBaseClassExtPtr(wc, owner) \ + ((_XmBCE(wc) && (((_XmBCE(wc))->record_type) == owner)) ? \ + _XmBCEPTR(wc) : \ + ((XmBaseClassExt *) _XmGetClassExtensionPtr( \ + ((XmGenericClassExt *) \ + _XmBCEPTR( wc)), \ + owner))) + +/* defines for 256 bit (at least) bit field + */ +#define _XmGetFlagsBit(field, bit) \ + (field[ (bit >> 3) ]) & (1 << (bit & 0x07)) + +#define _XmSetFlagsBit(field, bit) \ + (field[ (bit >> 3) ] |= (1 << (bit & 0x07))) + + +#ifndef XTHREADS +#define _XmFastSubclassInit(wc, bit_field) { \ + if((_Xm_fastPtr = _XmGetBaseClassExtPtr( wc, XmQmotif)) && \ + (*_Xm_fastPtr)) \ + _XmSetFlagsBit((*_Xm_fastPtr)->flags, bit_field) ; \ + } + +/* _XmGetBaseClassExtPtr can return NULL or a pointer to a NULL extension, + * for non Motif classes in particular, so we check that up front. + * We use the global _Xm_fastPtr for that purpose, this variable exists + * already in BaseClass.c for apparently no other use. + */ + +#define _XmIsFastSubclass(wc, bit) \ + ((_Xm_fastPtr = _XmGetBaseClassExtPtr((wc),XmQmotif)) && \ + (*_Xm_fastPtr)) ? \ + (_XmGetFlagsBit(((*_Xm_fastPtr)->flags), bit) ? TRUE : FALSE) \ + : FALSE + +#else +extern void _XmFastSubclassInit(WidgetClass, unsigned int); +extern Boolean _XmIsFastSubclass(WidgetClass, unsigned int); +#endif /* XTHREADS */ + +#define XmBaseClassExtVersion 2L +#define XmBaseClassExtVersion 2L + + +typedef Cardinal (*XmGetSecResDataFunc)( WidgetClass, + XmSecondaryResourceData **); + +typedef struct _XmObjectClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; +} XmObjectClassExtRec, *XmObjectClassExt; + +typedef struct _XmGenericClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; +} XmGenericClassExtRec, *XmGenericClassExt; + +typedef struct _XmWrapperDataRec{ + struct _XmWrapperDataRec *next; + WidgetClass widgetClass; + XtInitProc initializeLeaf; + XtSetValuesFunc setValuesLeaf; + XtArgsProc getValuesLeaf; + XtRealizeProc realize; + XtWidgetClassProc classPartInitLeaf; + XtWidgetProc resize; + XtGeometryHandler geometry_manager; + + /* init_depth is obselete now .. */ + Cardinal init_depth; + + int initializeLeafCount; + int setValuesLeafCount; + int getValuesLeafCount; + XtInitProc constraintInitializeLeaf; + XtSetValuesFunc constraintSetValuesLeaf; + int constraintInitializeLeafCount; + int constraintSetValuesLeafCount; +} XmWrapperDataRec, *XmWrapperData; + +typedef struct _XmBaseClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XtInitProc initializePrehook; + XtSetValuesFunc setValuesPrehook; + XtInitProc initializePosthook; + XtSetValuesFunc setValuesPosthook; + WidgetClass secondaryObjectClass; + XtInitProc secondaryObjectCreate; + XmGetSecResDataFunc getSecResData; + unsigned char flags[32]; + XtArgsProc getValuesPrehook; + XtArgsProc getValuesPosthook; + XtWidgetClassProc classPartInitPrehook; + XtWidgetClassProc classPartInitPosthook; + XtResourceList ext_resources; + XtResourceList compiled_ext_resources; + Cardinal num_ext_resources; + Boolean use_sub_resources; + XmWidgetNavigableProc widgetNavigable; + XmFocusChangeProc focusChange; + XmWrapperData wrapperData; +} XmBaseClassExtRec, *XmBaseClassExt; + + +typedef struct _XmWidgetExtDataRec{ + Widget widget; + Widget reqWidget; + Widget oldWidget; +} XmWidgetExtDataRec, *XmWidgetExtData; + +externalref XrmQuark XmQmotif; +externalref int _XmInheritClass; +externalref XmBaseClassExt * _Xm_fastPtr; + +/******** Private Function Declarations ********/ + + +extern XmGenericClassExt * _XmGetClassExtensionPtr( + XmGenericClassExt *listHeadPtr, + XrmQuark owner) ; +extern Boolean _XmIsSubclassOf(WidgetClass wc, WidgetClass sc); + + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBaseClassP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/BulletinB.h b/libXm/linux86/Xm/BulletinB.h new file mode 100644 index 0000000..980c219 --- /dev/null +++ b/libXm/linux86/Xm/BulletinB.h @@ -0,0 +1,88 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BulletinB.h /main/12 1995/07/14 10:11:57 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmBulletinBoard_h +#define _XmBulletinBoard_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmBulletinBoardWidgetClass; + +typedef struct _XmBulletinBoardClassRec * XmBulletinBoardWidgetClass; +typedef struct _XmBulletinBoardRec * XmBulletinBoardWidget; + + +#ifndef XmIsBulletinBoard +#define XmIsBulletinBoard(w) (XtIsSubclass (w, xmBulletinBoardWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateBulletinBoard( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmCreateBulletinBoardDialog( + Widget ds_p, + String name, + ArgList bb_args, + Cardinal bb_n) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBulletinBoard_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/BulletinBP.h b/libXm/linux86/Xm/BulletinBP.h new file mode 100644 index 0000000..ee4ca3e --- /dev/null +++ b/libXm/linux86/Xm/BulletinBP.h @@ -0,0 +1,192 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BulletinBP.h /main/13 1995/09/19 22:59:44 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmBulletinBoardP_h +#define _XmBulletinBoardP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/**************************************************************************** + * this suffix is added to dialog shells created by Xm convenience routines * + * so that, for example, a call to create a form dialog named f generates a * + * dialog shell named f_popup in addition to a form named f * + ****************************************************************************/ + +#define XmDIALOG_SUFFIX "_popup" +#define XmDIALOG_SUFFIX_SIZE 6 + + + +typedef struct _XmBulletinBoardConstraintPart +{ + char unused; +} XmBulletinBoardConstraintPart, * XmBulletinBoardConstraint; + + +/* New fields for the BulletinBoard widget class record */ + +typedef struct +{ + Boolean always_install_accelerators; + XmGeoCreateProc geo_matrix_create; + XmFocusMovedProc focus_moved_proc; + XtPointer extension; +} XmBulletinBoardClassPart; + + +/* Full class record declaration */ + +typedef struct _XmBulletinBoardClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; +} XmBulletinBoardClassRec; + +externalref XmBulletinBoardClassRec xmBulletinBoardClassRec; + + +/* New fields for the BulletinBoard widget record */ + +typedef struct +{ + Dimension margin_width; /* margins */ + Dimension margin_height; + + Widget default_button; /* widgets */ + Widget dynamic_default_button; /* widgets */ + Widget cancel_button; + Widget dynamic_cancel_button; + + XtCallbackList focus_callback; /* callback lists */ + XtCallbackList map_callback; + XtCallbackList unmap_callback; + + XtTranslations text_translations; + + XmFontList button_font_list; /* font lists */ + XmFontList label_font_list; + XmFontList text_font_list; + + Boolean allow_overlap; /* policies */ + Boolean default_position; + Boolean auto_unmanage; + unsigned char resize_policy; + + Dimension old_width; /* shadow resources */ + Dimension old_height; + Dimension old_shadow_thickness; + unsigned char shadow_type; + + Boolean in_set_values; /* internal flag */ + Boolean initial_focus; + + Boolean no_resize; /* dialog resources */ + unsigned char dialog_style; + XmString dialog_title; + Widget shell; + Widget _UNUSED; + + XmGeoMatrix geo_cache; /* Cache for geometry management. */ + + unsigned char check_set; /* For XmNfontList & XmNRenderTable */ +} XmBulletinBoardPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmBulletinBoardRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; +} XmBulletinBoardRec; + + +/* Access macros */ +#define BB_CancelButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.cancel_button) +#define BB_DynamicCancelButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.dynamic_cancel_button) +#define BB_DefaultButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.default_button) +#define BB_DynamicDefaultButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.dynamic_default_button) +#define BB_MarginHeight(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.margin_height) +#define BB_MarginWidth(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.margin_width) +#define BB_ButtonFontList(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.button_font_list) +#define BB_LabelFontList(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.label_font_list) +#define BB_TextFontList(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.text_font_list) +#define BB_StringDirection(w) (XmDirectionToStringDirection\ + (((XmBulletinBoardWidget) w)->manager.string_direction)) +#define BB_ResizePolicy(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.resize_policy) +#define BB_InSetValues(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.in_set_values) +#define BB_InitialFocus(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.initial_focus) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBulletinBoardP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ButtonBox.h b/libXm/linux86/Xm/ButtonBox.h new file mode 100644 index 0000000..9a428f7 --- /dev/null +++ b/libXm/linux86/Xm/ButtonBox.h @@ -0,0 +1,85 @@ +/* + * Copyright 1991, 1992 - Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Scott Knowlton + * + * Resources: + * + * --------------------------------------------------------------------------- + * Name Class Type InitialValue + * --------------------------------------------------------------------------- + * + * equalSize EqualSize Boolean False + * fillOption FillOption XmFillOption XmFillNone + * marginHeight Margin Dimension 0 + * marginWidth Margin Dimension 0 + * orientation Orientation unsigned char XmHORIZONTAL + * + * --------------------------------------------------------------------------- + * + */ +#ifndef _XmButtonBox_h +#define _XmButtonBox_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmButtonBoxClassRec *XmButtonBoxWidgetClass; +typedef struct _XmButtonBoxRec *XmButtonBoxWidget; + +typedef enum { XmFillNone, XmFillMajor, XmFillMinor, XmFillAll } XmFillOption; + +/************************************************************ + * MACROS + ************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +/* Function Name: XmCreateButtonBox + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateButtonBox( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmButtonBoxWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmButtonBox_h */ diff --git a/libXm/linux86/Xm/ButtonBoxP.h b/libXm/linux86/Xm/ButtonBoxP.h new file mode 100644 index 0000000..a997489 --- /dev/null +++ b/libXm/linux86/Xm/ButtonBoxP.h @@ -0,0 +1,126 @@ +/* + * Copyright 1991, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Scott Knowlton + * + */ + +#ifndef ButtonBoxP_h +#define ButtonBoxP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +#include +#include + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +/************************************************************ + * MACROS + ************************************************************/ + +#define XmButtonBoxIndex (XmManagerIndex + 1) + +extern XmOffsetPtr XmButtonBox_offsets; +extern XmOffsetPtr XmButtonBoxC_offsets; + +#define BBoxField(w,f,t) XmField(w, XmButtonBox_offsets, XmButtonBox, f, t) +#define XmButtonBox_equal_size(w) BBoxField(w, equal_size, Boolean) +#define XmButtonBox_fill_option(w) BBoxField(w, fill_option, XmFillOption) +#define XmButtonBox_margin_width(w) BBoxField(w, margin_width, Dimension) +#define XmButtonBox_margin_height(w) BBoxField(w, margin_height, Dimension) +#define XmButtonBox_spacing(w) BBoxField(w, spacing, Dimension) +#define XmButtonBox_orientation(w) BBoxField(w, orientation, unsigned char) + +#define BBoxCField(w,f,t) XmConstraintField(w, XmButtonBoxC_offsets, XmButtonBox, f, t) +#define XmButtonBoxC_pref_width(w) BBoxCField(w, pref_width, Dimension) +#define XmButtonBoxC_pref_height(w) BBoxCField(w, pref_height, Dimension) + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmButtonBoxClassPart +{ + XtPointer extension; /* In case its needed later */ +} XmButtonBoxClassPart; + +typedef struct _XmButtonBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmButtonBoxClassPart buttonbox_class; + +} XmButtonBoxClassRec; + +typedef struct _XmBBoxConstraintsPart { + Dimension pref_width, pref_height; +} XmBBoxConstraintsPart; + +typedef struct _XmBBoxConstraintsRec { + XmManagerConstraintPart manager; + XmBBoxConstraintsPart bbox; +} XmBBoxConstraintsRec, *XmBBoxConstraints; + +/* + * Match XmOffset nomenclature + */ +typedef XmBBoxConstraintsPart XmButtonBoxConstraintPart; + +typedef struct +{ + /* resources */ + + Boolean equal_size; + XmFillOption fill_option; + Dimension margin_width, margin_height; + Dimension spacing; + unsigned char orientation; + +} XmButtonBoxPart; + +typedef struct _XmButtonBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmButtonBoxPart button_box; + +} XmButtonBoxRec; + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +extern XmButtonBoxClassRec xmButtonBoxClassRec; + +/************************************************************ + * STATIC DECLARATIONS + ************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmButtonBoxP_h */ diff --git a/libXm/linux86/Xm/CacheP.h b/libXm/linux86/Xm/CacheP.h new file mode 100644 index 0000000..15efc9a --- /dev/null +++ b/libXm/linux86/Xm/CacheP.h @@ -0,0 +1,67 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CacheP.h /main/11 1995/07/14 10:12:51 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCacheP_h +#define _XmCacheP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* A few convenience macros */ + +#define ClassCacheHead(cp) ((cp)->cache_head) +#define ClassCacheCopy(cp) ((cp)->cache_copy) +#define ClassCacheCompare(cp) ((cp)->cache_compare) +#define CacheDataPtr(p) ((XtPointer)&((XmGadgetCacheRef*)p)->data) +#define DataToGadgetCache(p) ((char*)p - XtOffsetOf(XmGadgetCacheRef,data)) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCacheP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/CareVisualT.h b/libXm/linux86/Xm/CareVisualT.h new file mode 100644 index 0000000..2d90503 --- /dev/null +++ b/libXm/linux86/Xm/CareVisualT.h @@ -0,0 +1,83 @@ +/* $XConsortium: CareVisualT.h /main/5 1995/07/15 20:48:21 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmCareVisualT_H +#define _XmCareVisualT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTcareParentVisual; + +/* Trait structures and typedefs, place typedefs first */ + +typedef Boolean (*XmCareVisualRedrawProc)(Widget kid, + Widget cur_parent, + Widget new_parent, + Mask visual_flag); + +/* Version 0: initial release. */ + +typedef struct _XmCareVisualTraitRec { + int version; /* 0 */ + XmCareVisualRedrawProc redraw; +} XmCareVisualTraitRec, *XmCareVisualTrait; + + +#define NoVisualChange 0L +#define VisualForeground (1L<<0) +#define VisualHighlightPixmap (1L<<1) +#define VisualHighlightColor (1L<<2) +#define VisualBottomShadowPixmap (1L<<3) +#define VisualBottomShadowColor (1L<<4) +#define VisualTopShadowPixmap (1L<<5) +#define VisualTopShadowColor (1L<<6) +#define VisualBackgroundPixel (1L<<7) +#define VisualBackgroundPixmap (1L<<8) +#define VisualSelectColor (1L<<9) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCareVisualT_H */ diff --git a/libXm/linux86/Xm/CascadeB.h b/libXm/linux86/Xm/CascadeB.h new file mode 100644 index 0000000..29034d4 --- /dev/null +++ b/libXm/linux86/Xm/CascadeB.h @@ -0,0 +1,87 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeB.h /main/12 1995/07/14 10:13:57 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeB_h +#define _XmCascadeB_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmCascadeButtonWidgetClass; + +typedef struct _XmCascadeButtonRec * XmCascadeButtonWidget; +typedef struct _XmCascadeButtonClassRec * XmCascadeButtonWidgetClass; + +/* fast subclass define */ +#ifndef XmIsCascadeButton +#define XmIsCascadeButton(w) XtIsSubclass(w, xmCascadeButtonWidgetClass) +#endif /* XmIsCascadeButton */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateCascadeButton( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern void XmCascadeButtonHighlight( + Widget cb, +#if NeedWidePrototypes + int highlight) ; +#else + Boolean highlight) ; +#endif /* NeedWidePrototypes */ + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeB_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/CascadeBG.h b/libXm/linux86/Xm/CascadeBG.h new file mode 100644 index 0000000..28a5046 --- /dev/null +++ b/libXm/linux86/Xm/CascadeBG.h @@ -0,0 +1,88 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeBG.h /main/12 1995/07/14 10:14:28 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeBG_h +#define _XmCascadeBG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmCascadeButtonGadgetClass; + +typedef struct _XmCascadeButtonGadgetClassRec * XmCascadeButtonGadgetClass; +typedef struct _XmCascadeButtonGadgetRec * XmCascadeButtonGadget; +typedef struct _XmCascadeButtonGCacheObjRec * XmCascadeButtonGCacheObject; + +/*fast subclass define */ +#ifndef XmIsCascadeButtonGadget +#define XmIsCascadeButtonGadget(w) XtIsSubclass(w, xmCascadeButtonGadgetClass) +#endif /* XmIsCascadeButtonGadget */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateCascadeButtonGadget( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern void XmCascadeButtonGadgetHighlight( + Widget wid, +#if NeedWidePrototypes + int highlight) ; +#else + Boolean highlight) ; +#endif /* NeedWidePrototypes */ + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/CascadeBGP.h b/libXm/linux86/Xm/CascadeBGP.h new file mode 100644 index 0000000..f0f702d --- /dev/null +++ b/libXm/linux86/Xm/CascadeBGP.h @@ -0,0 +1,245 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeBGP.h /main/13 1996/03/25 14:52:33 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeBGP_h +#define _XmCascadeBGP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************************************************* + * The Arrow Cache record for the menu cascade button + *********************************************************************/ +typedef struct _XmArrowPixmap +{ + Dimension height, width; + unsigned int depth; + unsigned char direction; + Pixel top_shadow_color; + Pixel bottom_shadow_color; + Pixel foreground_color; + Display *display; + Screen *screen; + Pixmap pixmap; +} XmArrowPixmap; + + +/*********************************************************************/ +/* The CascadeButton Gadget Cache Object's class and instance records*/ +/*********************************************************************/ + + +typedef struct _XmCascadeButtonGCacheObjClassPart +{ + int foo; +} XmCascadeButtonGCacheObjClassPart; + + +typedef struct _XmCascadeButtonGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; + XmCascadeButtonGCacheObjClassPart cascade_button_class_cache; +} XmCascadeButtonGCacheObjClassRec; + +externalref XmCascadeButtonGCacheObjClassRec xmCascadeButtonGCacheObjClassRec; + + +typedef struct _XmCascadeButtonGCacheObjPart +{ + Pixmap cascade_pixmap; /* pixmap for the cascade */ + int map_delay; /* time delay for posting */ + Pixmap armed_pixmap; + GC arm_gc; + GC background_gc; +} XmCascadeButtonGCacheObjPart; + +typedef struct _XmCascadeButtonGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; + XmCascadeButtonGCacheObjPart cascade_button_cache; +} XmCascadeButtonGCacheObjRec; + +/* The CascadeButtonGadget instance record */ + +typedef struct _XmCascadeButtonGadgetPart +{ /* resources */ + Widget submenu; /* the menu to pull down */ + XtCallbackList activate_callback; /* widget fired callback */ + XtCallbackList cascade_callback; /* optional callback, called */ + /* when the menu is about */ + /* to be pulled down */ + /* internal fields */ + Boolean armed; /* armed flag */ + XRectangle cascade_rect; /* location of cascade*/ + XtIntervalId timer; /* timeout id */ + XmCascadeButtonGCacheObjPart *cache; +} XmCascadeButtonGadgetPart; + + +/* Full instance record declaration */ + +typedef struct _XmCascadeButtonGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; + XmCascadeButtonGadgetPart cascade_button; +} XmCascadeButtonGadgetRec; + + +/* CascadeButton class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmCascadeButtonGadgetClassPart; + + +/* Full class record declaration for CascadeButton class */ + +typedef struct _XmCascadeButtonGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; + XmCascadeButtonGadgetClassPart cascade_button_class; +} XmCascadeButtonGadgetClassRec; + + +externalref XmCascadeButtonGadgetClassRec xmCascadeButtonGadgetClassRec; + + +/* Access macro definitions for UNcached fields*/ + +#define CBG_Submenu(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.submenu) +#define CBG_ActivateCall(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.activate_callback) +#define CBG_CascadeCall(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_callback) +#define CBG_Armed(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.armed) +#define CBG_CascadeRect(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect) +#define CBG_Timer(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.timer) +#define CBG_Cascade_x(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.x) +#define CBG_Cascade_y(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.y) +#define CBG_Cascade_width(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.width) +#define CBG_Cascade_height(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.height) +#define CBG_HasCascade(cb) (((LabG_MenuType(cb) == XmMENU_PULLDOWN) || \ + (LabG_MenuType(cb) == XmMENU_POPUP) || \ + (LabG_MenuType(cb) == XmMENU_OPTION)) && \ + (CBG_Submenu(cb))) + +#define XmCBG_ARMED_BIT (1 << 0) +#define XmCBG_TRAVERSE_BIT (1 << 1) +#define XmCBG_WAS_POSTED_BIT (1 << 2) + +#define CBG_IsArmed(cb) (((XmCascadeButtonGadget)(cb))->cascade_button.armed \ + & XmCBG_ARMED_BIT) + +#define CBG_Traversing(cb) (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed & XmCBG_TRAVERSE_BIT) + +#define CBG_WasPosted(cb) (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed & XmCBG_WAS_POSTED_BIT) + +#define CBG_SetBit(byte,bit,v) byte = (byte & (~bit)) | (v ? bit : 0) + +#define CBG_SetArmed(cb,v) CBG_SetBit (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed, \ + XmCBG_ARMED_BIT, v) + +#define CBG_SetTraverse(cb,v) CBG_SetBit (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed, \ + XmCBG_TRAVERSE_BIT, v) + +#define CBG_SetWasPosted(cb,v) CBG_SetBit (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed, \ + XmCBG_WAS_POSTED_BIT, v) + + + +/* Access macro definitions for Cached fields*/ + +#define CBG_CascadePixmap(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->cascade_pixmap) +#define CBG_MapDelay(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->map_delay) +#define CBG_ArmedPixmap(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->armed_pixmap) +#define CBG_ArmGC(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->arm_gc) +#define CBG_BackgroundGC(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->background_gc) + + +/******************************/ +/* Convenience Macros */ +/******************************/ + + +#define CBG_Cache(w) (((XmCascadeButtonGadget)(w))->\ + cascade_button.cache) +#define CBG_ClassCachePart(w) \ + (((XmCascadeButtonGadgetClass)xmCascadeButtonGadgetClass)->gadget_class.cache_part) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBGP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/CascadeBP.h b/libXm/linux86/Xm/CascadeBP.h new file mode 100644 index 0000000..94ff6dc --- /dev/null +++ b/libXm/linux86/Xm/CascadeBP.h @@ -0,0 +1,187 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeBP.h /main/12 1996/03/25 14:52:42 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeBP_h +#define _XmCascadeBP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The CascadeButton instance record */ + +typedef struct +{ /* resources */ + XtCallbackList activate_callback; /* widget fired callback */ + XtCallbackList cascade_callback; /* called when the menu is */ + /* about to be pulled down */ + + Widget submenu; /* the menu to pull down */ + Pixmap cascade_pixmap; /* pixmap for the cascade */ + int map_delay; /* time delay for posting */ + + /* internal fields */ + + GC arm_GC; /* armed GC */ + GC background_GC; /* normal GC */ + Boolean armed; /* armed flag */ + XRectangle cascade_rect; /* location of cascade*/ + XtIntervalId timer; /* timeout id */ + Pixmap armed_pixmap; /* arm arrow cascade */ + +} XmCascadeButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmCascadeButtonRec +{ + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmCascadeButtonPart cascade_button; +} XmCascadeButtonRec; + +typedef struct _XmCascadeButtonWidgetRec/* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmCascadeButtonPart cascade_button; +} XmCascadeButtonWidgetRec; + + +/* CascadeButton class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmCascadeButtonClassPart; + + +/* Full class record declaration for CascadeButton class */ + +typedef struct _XmCascadeButtonClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmCascadeButtonClassPart cascade_button_class; +} XmCascadeButtonClassRec; + + +externalref XmCascadeButtonClassRec xmCascadeButtonClassRec; + + +/* Access macro definitions */ + +#define CB_Submenu(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.submenu) + +#define CB_ActivateCall(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.activate_callback) +#define CB_CascadeCall(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_callback) + + +#define CB_CascadePixmap(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_pixmap) +#define CB_ArmedPixmap(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.armed_pixmap) + +#define CB_ArmGC(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.arm_GC) +#define CB_BackgroundGC(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.background_GC) + +#define CB_Cascade_x(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.x) +#define CB_Cascade_y(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.y) +#define CB_Cascade_width(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.width) +#define CB_Cascade_height(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.height) + +#define CB_HasCascade(cb) (((Lab_MenuType(cb) == XmMENU_PULLDOWN) || \ + (Lab_MenuType(cb) == XmMENU_POPUP)) && \ + (CB_Submenu(cb))) + + +#define XmCB_ARMED_BIT (1 << 0) +#define XmCB_TRAVERSE_BIT (1 << 1) +#define XmCB_WAS_POSTED_BIT (1 << 2) + + +#define CB_IsArmed(cb) (((XmCascadeButtonWidget)(cb))->cascade_button.armed \ + & XmCB_ARMED_BIT) + +#define CB_Traversing(cb) (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed & XmCB_TRAVERSE_BIT) + +#define CB_WasPosted(cb) (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed & XmCB_WAS_POSTED_BIT) + +#define CB_SetBit(byte,bit,v) byte = (byte & (~bit)) | (v ? bit : 0) + +#define CB_SetArmed(cb,v) CB_SetBit (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed, \ + XmCB_ARMED_BIT, v) + +#define CB_SetTraverse(cb,v) CB_SetBit (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed, \ + XmCB_TRAVERSE_BIT, v) + +#define CB_SetWasPosted(cb,v) CB_SetBit (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed, \ + XmCB_WAS_POSTED_BIT, v) + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ClipWindowP.h b/libXm/linux86/Xm/ClipWindowP.h new file mode 100644 index 0000000..14b1358 --- /dev/null +++ b/libXm/linux86/Xm/ClipWindowP.h @@ -0,0 +1,118 @@ +/* $XConsortium: ClipWindowP.h /main/5 1995/07/15 20:48:39 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmClipWindowP_h +#define _XmClipWindowP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmClipWindowWidgetClass; + +typedef struct _XmClipWindowClassRec * XmClipWindowWidgetClass; +typedef struct _XmClipWindowRec * XmClipWindowWidget; + + +#ifndef XmIsClipWindow +#define XmIsClipWindow(w) (XtIsSubclass (w, xmClipWindowWidgetClass)) +#endif + + +/* New fields for the ClipWindow widget class record */ + +typedef struct +{ + XtPointer extension; +} XmClipWindowClassPart; + + +/* Full class record declaration */ + +typedef struct _XmClipWindowClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmDrawingAreaClassPart drawing_area_class; + XmClipWindowClassPart clip_window_class; +} XmClipWindowClassRec; + +externalref XmClipWindowClassRec xmClipWindowClassRec; + + +/* New fields for the ClipWindow widget record */ + +typedef struct +{ + unsigned char flags; + Dimension old_width ; +} XmClipWindowPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmClipWindowRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmDrawingAreaPart drawing_area; + XmClipWindowPart clip_window; +} XmClipWindowRec; + + +/******** Private Function Declarations ********/ +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmClipWindowP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ColorObjP.h b/libXm/linux86/Xm/ColorObjP.h new file mode 100644 index 0000000..0324846 --- /dev/null +++ b/libXm/linux86/Xm/ColorObjP.h @@ -0,0 +1,180 @@ +/* $XConsortium: ColorObjP.h /main/10 1996/12/16 18:30:49 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmColorObjP_h +#define _XmColorObjP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** misc structures, defines, and functions for using ColorObj **/ + +#define XmCO_MAX_NUM_COLORS 8 +#define XmCO_NUM_COLORS XmCO_MAX_NUM_COLORS +#define XmPIXEL_SET_PROP_VERSION '1' + +/* Constants for color usage */ +enum { XmCO_BLACK_WHITE, XmCO_LOW_COLOR, XmCO_MEDIUM_COLOR, XmCO_HIGH_COLOR }; + +typedef struct { + Pixel fg; + Pixel bg; + Pixel ts; + Pixel bs; + Pixel sc; +} XmPixelSet; + +typedef XmPixelSet Colors[XmCO_NUM_COLORS]; + +typedef struct _XmColorObjPart { + XtArgsProc RowColInitHook; + XmPixelSet *myColors; /* colors for my (application) screen */ + int myScreen; + Display *display; /* display connection for "pseudo-app" */ + Colors *colors; /* colors per screen for workspace mgr */ + int numScreens; /* for workspace manager */ + Atom *atoms; /* to identify colorsrv screen numbers */ + Boolean colorIsRunning; /* used for any color problem */ + Boolean done; + int *colorUse; + int primary; + int secondary; + int text; /* color set id for text widgets */ + int active; + int inactive; + Boolean useColorObj; /* read only resource variable */ + Boolean useText; /* use text color set id for text? */ + Boolean useTextForList; /* use text color set id for lists? */ + + Boolean useMask; + Boolean useMultiColorIcons; + Boolean useIconFileCache; + +} XmColorObjPart; + + +typedef struct _XmColorObjRec { + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + XmColorObjPart color_obj; +} XmColorObjRec; + +typedef struct _XmColorObjClassPart { + XtPointer extension; +} XmColorObjClassPart; + +/* + * we make it a appShell subclass so it can have it's own instance + * hierarchy + */ +typedef struct _XmColorObjClassRec{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + XmColorObjClassPart color_obj_class; +} XmColorObjClassRec; + + +externalref XmColorObjClassRec xmColorObjClassRec; + + +#ifndef XmIsColorObj +#define XmIsColorObj(w) (XtIsSubclass(w, xmColorObjClass)) +#endif /* XmIsXmDisplay */ + +externalref WidgetClass xmColorObjClass; +typedef struct _XmColorObjClassRec *XmColorObjClass; +typedef struct _XmColorObjRec *XmColorObj; + + +#define XmCO_DitherTopShadow(display, screen, pixelSet) \ + ((pixelSet)->bs == BlackPixel((display), (screen))) + +#define XmCO_DitherBottomShadow(display, screen, pixelSet) \ + ((pixelSet)->ts == WhitePixel((display), (screen))) + +#define XmCO_DITHER XmS50_foreground +#define XmCO_NO_DITHER XmSunspecified_pixmap + + +/******** Private Function Declarations ********/ + +extern Boolean XmeGetIconControlInfo( + Screen *screen, + Boolean *useMaskRtn, + Boolean *useMultiColorIconsRtn, + Boolean *useIconFileCacheRtn) ; + +extern Boolean XmeUseColorObj( void ) ; + + +extern Boolean XmeGetColorObjData( + Screen * screen, + int *colorUse, + XmPixelSet *pixelSet, + unsigned short num_pixelSet, + short *active_id, + short *inactive_id, + short *primary_id, + short *secondary_id, + short *text_id) ; + +extern Boolean XmeGetDesktopColorCells ( + Screen * screen, + Colormap colormap, + XColor * colors, + int n_colors, + int * ncolors_returns) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmColorObjP_h */ + diff --git a/libXm/linux86/Xm/ColorP.h b/libXm/linux86/Xm/ColorP.h new file mode 100644 index 0000000..3204734 --- /dev/null +++ b/libXm/linux86/Xm/ColorP.h @@ -0,0 +1,139 @@ +/* $XConsortium: ColorP.h /main/4 1995/07/15 20:49:10 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _ColorP_h +#define _ColorP_h + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Default Color Allocation proc */ + +#define DEFAULT_ALLOCCOLOR_PROC (XAllocColor) + +/* Defines and functions for processing dynamic defaults */ + +#define XmMAX_SHORT 65535 + +#define XmCOLOR_PERCENTILE (XmMAX_SHORT / 100) +#define BoundColor(value)\ + ((value < 0) ? 0 : (((value > XmMAX_SHORT) ? XmMAX_SHORT : value))) + +/* Contributions of each primary to overall luminosity, sum to 1.0 */ + +#define XmRED_LUMINOSITY 0.30 +#define XmGREEN_LUMINOSITY 0.59 +#define XmBLUE_LUMINOSITY 0.11 + +/* Percent effect of intensity, light, and luminosity & on brightness, + sum to 100 */ + +#define XmINTENSITY_FACTOR 75 +#define XmLIGHT_FACTOR 0 +#define XmLUMINOSITY_FACTOR 25 + +/* LITE color model + percent to interpolate RGB towards black for SEL, BS, TS */ + +#define XmCOLOR_LITE_SEL_FACTOR 15 +#define XmCOLOR_LITE_BS_FACTOR 40 +#define XmCOLOR_LITE_TS_FACTOR 20 + +/* DARK color model + percent to interpolate RGB towards white for SEL, BS, TS */ + +#define XmCOLOR_DARK_SEL_FACTOR 15 +#define XmCOLOR_DARK_BS_FACTOR 30 +#define XmCOLOR_DARK_TS_FACTOR 50 + +/* STD color model + percent to interpolate RGB towards black for SEL, BS + percent to interpolate RGB towards white for TS + HI values used for high brightness (within STD) + LO values used for low brightness (within STD) + Interpolate factors between HI & LO values based on brightness */ + +#define XmCOLOR_HI_SEL_FACTOR 15 +#define XmCOLOR_HI_BS_FACTOR 40 +#define XmCOLOR_HI_TS_FACTOR 60 + +#define XmCOLOR_LO_SEL_FACTOR 15 +#define XmCOLOR_LO_BS_FACTOR 60 +#define XmCOLOR_LO_TS_FACTOR 50 + + +/* For the default color calculation and caching */ + +#define XmLOOK_AT_SCREEN (1<<0) +#define XmLOOK_AT_CMAP (1<<1) +#define XmLOOK_AT_BACKGROUND (1<<2) +#define XmLOOK_AT_FOREGROUND (1<<3) +#define XmLOOK_AT_TOP_SHADOW (1<<4) +#define XmLOOK_AT_BOTTOM_SHADOW (1<<5) +#define XmLOOK_AT_SELECT (1<<6) + +#define XmBACKGROUND ((unsigned char) (1<<0)) +#define XmFOREGROUND ((unsigned char) (1<<1)) +#define XmTOP_SHADOW ((unsigned char) (1<<2)) +#define XmBOTTOM_SHADOW ((unsigned char) (1<<3)) +#define XmSELECT ((unsigned char) (1<<4)) +#define XmHIGHLIGHT ((unsigned char) (1<<5)) + +/* Structure used to hold color schemes */ +typedef struct _XmColorData +{ Screen * screen; + Colormap color_map; + unsigned char allocated; + XColor background; + XColor foreground; + XColor top_shadow; + XColor bottom_shadow; + XColor select; +} XmColorData; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + +#endif /* _ColorP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ColorS.h b/libXm/linux86/Xm/ColorS.h new file mode 100644 index 0000000..6604280 --- /dev/null +++ b/libXm/linux86/Xm/ColorS.h @@ -0,0 +1,52 @@ +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Mark F. Antonelli, Chris D. Peterson + * + */ + +#ifndef _XmColorSelector_h +#define _XmColorSelector_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmColorSelectorClassRec *XmColorSelectorWidgetClass; +typedef struct _XmColorSelectorRec *XmColorSelectorWidget; + +typedef enum {XmListMode = 0, XmScaleMode = 1} XmColorMode; + +/* Function Name: XmCreateColorSelector + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateColorSelector( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmColorSelectorWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmColorSelect_h DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ColorSP.h b/libXm/linux86/Xm/ColorSP.h new file mode 100644 index 0000000..e6bcd35 --- /dev/null +++ b/libXm/linux86/Xm/ColorSP.h @@ -0,0 +1,171 @@ +/* + * Copyright 1990 - 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Mark F. Antonelli, Chris D. Peterson + * + */ + +#ifndef _XmColorSelectorP_h +#define _XmColorSelectorP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + *************************************************************/ + +#include +#include + +/************************************************************ + * TYPEDEFS AND DEFINES + *************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmColorSelector_COLOR_NAME_SIZE 100 +#define XmColorSelector_NUM_TOGGLES 2 + +typedef struct _ColorSelStrings { + XmString slider_labels[3]; + + XmString tog_labels[XmColorSelector_NUM_TOGGLES]; + XmString no_cell_error, file_read_error; +} ColorSelStrings; + +typedef struct _ColorInfo { + char name[XmColorSelector_COLOR_NAME_SIZE], no_space_lower_name[XmColorSelector_COLOR_NAME_SIZE]; + unsigned short red, green, blue; +} ColorInfo; + +typedef struct _ColorSelectorClassPart { + XtPointer extension; +} ColorSelectorClassPart; + +typedef struct _XmColorSelectorClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + ColorSelectorClassPart color_selector_class; +} XmColorSelectorClassRec; + +typedef struct _XmColorSelectorPart +{ + /* resources */ + + XmColorMode color_mode; /* selector mode */ + char *color_name; /* the colorname we select */ + String rgb_file; /* where to look for */ + Dimension margin_width; /* for geom management */ + Dimension margin_height; /* for geom management */ + + ColorSelStrings strings; /* strings for I18N. */ + + /* private state */ + + int slider_red; /* slider values */ + int slider_green; /* slider values */ + int slider_blue; /* slider values */ + Widget bb; /* area to hold all the sliders */ + Widget sliders[3]; /* red,green,blue sliders(slider) */ + Widget scrolled_list; /* list (scrolled window) */ + Widget list; /* list (simple) */ + Widget color_window; /* label to show selected color */ + Widget chose_radio; /* selector type radio box */ + Widget chose_mode[2]; /* selector type toggles */ + + Pixel color_pixel; /* pixel value for colors */ + Boolean good_cell; /* does color_pixel contain + * a good value? */ + ColorInfo *colors; /* infomation about all color names */ + short num_colors; /* The number of colors. */ +} XmColorSelectorPart; + +typedef struct _XmColorSelectorRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmColorSelectorPart cs; +} XmColorSelectorRec; + +typedef struct _XmColorSelectorConstraintPart +{ + XtPointer extension; +} XmColorSelectorConstraintPart; + +typedef struct _XmColorSelectorConstraintRec +{ + XmManagerConstraintPart manager; + XmColorSelectorConstraintPart cs; +} XmColorSelectorConstraintRec; + +/************************************************************ + * MACROS + *************************************************************/ + +#define XmColorSelectorIndex (XmManagerIndex + 1) + +#define XmColorSField(w,f,t) XmField(w,XmColorS_offsets,XmColorSelector,f,t) + +/* + * Special handling for array members. The XmField macro can't deal with + * them + */ +#define XmColorSArrayField(w, field, type) \ + ((type*)((char*)w + XmColorS_offsets[XmColorSelectorIndex] \ + + XtOffsetOf(XmColorSelectorPart, field))) + +#define XmColorS_color_mode(w) XmColorSField(w, color_mode, XmColorMode) +#define XmColorS_color_name(w) XmColorSField(w, color_name, char*) +#define XmColorS_rgb_file(w) XmColorSField(w, rgb_file, String) +#define XmColorS_margin_width(w) XmColorSField(w, margin_width, Dimension) +#define XmColorS_margin_height(w) XmColorSField(w, margin_height, Dimension) +#define XmColorS_strings(w) XmColorSField(w, strings, ColorSelStrings) +#define XmColorS_slider_red(w) XmColorSField(w, slider_red, int) +#define XmColorS_slider_green(w) XmColorSField(w, slider_green, int) +#define XmColorS_slider_blue(w) XmColorSField(w, slider_blue, int) +#define XmColorS_bb(w) XmColorSField(w, bb, Widget) +#define XmColorS_sliders(w) XmColorSArrayField(w, sliders, Widget) +#define XmColorS_scrolled_list(w) XmColorSField(w, scrolled_list, Widget) +#define XmColorS_list(w) XmColorSField(w, list, Widget) +#define XmColorS_color_window(w) XmColorSField(w, color_window, Widget) +#define XmColorS_chose_radio(w) XmColorSField(w, chose_radio, Widget) +#define XmColorS_chose_mode(w) XmColorSArrayField(w, chose_mode, Widget) +#define XmColorS_color_pixel(w) XmColorSField(w, color_pixel, Pixel) +#define XmColorS_good_cell(w) XmColorSField(w, good_cell, Boolean) +#define XmColorS_colors(w) XmColorSField(w, colors, ColorInfo*) +#define XmColorS_num_colors(w) XmColorSField(w, num_colors, short) + +/************************************************************ + * GLOBAL DECLARATIONS + *************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +extern XmColorSelectorClassRec xiColorSelectorClassRec; + +/************************************************************ + * STATIC DECLARATIONS + ************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmColorSelectP_h DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Column.h b/libXm/linux86/Xm/Column.h new file mode 100644 index 0000000..813846c --- /dev/null +++ b/libXm/linux86/Xm/Column.h @@ -0,0 +1,36 @@ +#ifndef __column_h__ +#define __column_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +extern WidgetClass xmColumnWidgetClass; + +typedef struct _XmColumnClassRec * XmColumnWidgetClass; +typedef struct _XmColumnRec * XmColumnWidget; + +enum { XmFILL_UNSPECIFIED, XmFILL_FLUSH, XmFILL_RAGGED }; + +enum { XmDISTRIBUTE_TIGHT, XmDISTRIBUTE_SPREAD }; + +#ifndef XmIsColumn +#define XmIsColumn(w) (XtIsSubclass(w, xmColumnWidgetClass)) +#endif + +#if NeedFunctionPrototypes +extern Widget XmCreateColumn(Widget, String, ArgList, Cardinal); +extern Widget XmColumnGetChildLabel(Widget); +#else +extern Widget XmCreateColumn(); +extern Widget XmColumnGetChildLabel(); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __column_h__ */ diff --git a/libXm/linux86/Xm/ColumnP.h b/libXm/linux86/Xm/ColumnP.h new file mode 100644 index 0000000..e9cf3b8 --- /dev/null +++ b/libXm/linux86/Xm/ColumnP.h @@ -0,0 +1,113 @@ +#ifndef __columnp_h__ +#define __columnp_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +typedef struct _XmColumnClassPart { + XtPointer extension; +} XmColumnClassPart; + +typedef struct _XmColumnClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmColumnClassPart column_class; +} XmColumnClassRec; + +typedef struct _XmColumnConstraintPart { + + /* Public */ + unsigned char label_alignment; + unsigned char label_type; + unsigned char fill_style; + + Boolean show_label; + Boolean stretchable; + + Pixmap label_pixmap; + XmString label_string; + + XmFontList label_font_list; + + /* Private */ + + Widget label_widget; + Dimension request_width; + Dimension request_height; + XRectangle position; +} XmColumnConstraintPart; + +typedef struct _XmColumnConstraintRec { + XmManagerConstraintPart manager; + XmBulletinBoardConstraintPart bboard; + XmColumnConstraintPart column; +} XmColumnConstraintRec, * XmColumnConstraintPtr; + +typedef struct _XmColumnPart { + + /* Public */ + + unsigned char default_label_alignment; + unsigned char default_fill_style; + unsigned char orientation; + unsigned char distribution; + + Dimension item_spacing; + Dimension label_spacing; + + /* Private */ + + Boolean resize_done; + +} XmColumnPart; + +typedef struct _XmColumnRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmColumnPart column; +} XmColumnRec; + +#define XmColumnIndex (XmBulletinBoardIndex + 1) + +extern XmOffsetPtr XmColumn_offsets; +extern XmOffsetPtr XmColumnC_offsets; + +#define XmColCField(w,f,t) XmConstraintField(w, XmColumnC_offsets, XmColumn, f, t) +#define XmColumnC_label_alignment(w) XmColCField(w, label_alignment, unsigned char) +#define XmColumnC_label_type(w) XmColCField(w, label_type, unsigned char) +#define XmColumnC_fill_style(w) XmColCField(w, fill_style, unsigned char) +#define XmColumnC_show_label(w) XmColCField(w, show_label, Boolean) +#define XmColumnC_stretchable(w) XmColCField(w, stretchable, Boolean) +#define XmColumnC_label_pixmap(w) XmColCField(w, label_pixmap, Pixmap) +#define XmColumnC_label_string(w) XmColCField(w, label_string, XmString) +#define XmColumnC_label_font_list(w) XmColCField(w, label_font_list, XmFontList) +#define XmColumnC_label_widget(w) XmColCField(w, label_widget, Widget) +#define XmColumnC_request_width(w) XmColCField(w, request_width, Dimension) +#define XmColumnC_request_height(w) XmColCField(w, request_height, Dimension) +#define XmColumnC_position(w) XmColCField(w, position, XRectangle) + +#define XmColField(w,f,t) XmField(w, XmColumn_offsets, XmColumn, f, t) +#define XmColumn_default_label_alignment(w) XmColField(w, default_label_alignment, unsigned char) +#define XmColumn_default_fill_style(w) XmColField(w, default_fill_style, unsigned char) +#define XmColumn_orientation(w) XmColField(w, orientation, unsigned char) +#define XmColumn_distribution(w) XmColField(w, distribution, unsigned char) +#define XmColumn_item_spacing(w) XmColField(w, item_spacing, Dimension) +#define XmColumn_label_spacing(w) XmColField(w, label_spacing, Dimension) +#define XmColumn_resize_done(w) XmColField(w, resize_done, Boolean) + +#ifdef __cplusplus +} +#endif + +#endif /* __columnp_h__ */ diff --git a/libXm/linux86/Xm/ComboBox.h b/libXm/linux86/Xm/ComboBox.h new file mode 100644 index 0000000..581995a --- /dev/null +++ b/libXm/linux86/Xm/ComboBox.h @@ -0,0 +1,102 @@ +/* $TOG: ComboBox.h /main/7 1998/02/23 10:32:29 cshi $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* ComboBox.h */ + +#ifndef _XmComboBox_h +#define _XmComboBox_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmComboBoxWidgetClass; + +typedef struct _XmComboBoxClassRec * XmComboBoxWidgetClass; +typedef struct _XmComboBoxRec * XmComboBoxWidget; + + +/* XmIsComboBox may already be defined for Fast Subclassing */ +#ifndef XmIsComboBox +#define XmIsComboBox(w) XtIsSubclass(w, xmComboBoxWidgetClass) +#endif /* XmIsComboBox */ + +/******** Public Function Declarations ********/ + +extern Widget XmCreateComboBox (Widget parent, + char *name, + ArgList args, + Cardinal argCount); +extern Widget XmCreateDropDownComboBox (Widget parent, + char *name, + ArgList args, + Cardinal argCount); +extern Widget XmCreateDropDownList (Widget parent, + char *name, + ArgList args, + Cardinal argCount); + +extern void XmComboBoxAddItem (Widget widget, + XmString item, + int pos, + Boolean unique); +extern void XmComboBoxDeletePos (Widget widget, + int pos); +extern void XmComboBoxSelectItem (Widget widget, + XmString item); + +/* JIM ADDED THIS TO APEASE SYMBOL GOD */ +extern XmString XmCombinationBoxGetValue(Widget widget); + +extern void XmComboBoxSetItem (Widget widget, + XmString item); +extern void XmComboBoxUpdate (Widget widget); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmComboBox_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + diff --git a/libXm/linux86/Xm/ComboBox2.h b/libXm/linux86/Xm/ComboBox2.h new file mode 100644 index 0000000..b8f3a48 --- /dev/null +++ b/libXm/linux86/Xm/ComboBox2.h @@ -0,0 +1,136 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmCominationBox2_h +#define _XmCominationBox2_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +#include + +#include +#include +#include +#include + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmCombinationBox2ClassRec *XmCombinationBox2WidgetClass; +typedef struct _XmCombinationBox2Rec *XmCombinationBox2Widget; + +/************************************************************ + * MACROS + ************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +/* Function Name: XmCombinationBox2GetValue + * Description: Retreives the value from the combo box. + * Arguments: w - the combination box. + * Returns: The value in the text widget. + */ + +String XmCombinationBox2GetValue( +#ifndef _NO_PROTO +Widget /* Combination box widget. */ +#endif +); + +/* Function Name: XmCreateCombinationBox2 + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateCombinationBox2( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/* Function Name: XmCombinationBox2GetLabel + * Description: Returns the "label" child of the XmCombinationBox2 + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmCombinationBox2 + */ + +Widget XmCombinationBox2GetLabel( +#ifndef _NO_PROTO +Widget +#endif +); + +/* Function Name: XmCombinationBox2GetArrow + * Description: Returns the "arrow" child of the XmCombinationBox2 + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmCombinationBox2 + */ + +Widget XmCombinationBox2GetArrow( +#ifndef _NO_PROTO +Widget +#endif +); + +/* Function Name: XmCombinationBox2GetText + * Description: Returns the "text" child of the XmCombinationBox2 + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmCombinationBox2 + */ + +Widget XmCombinationBox2GetText( +#ifndef _NO_PROTO +Widget +#endif +); + +/* Function Name: XmCombinationBox2GetList + * Description: Returns the "list" child of the XmCombinationBox2 + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmCombinationBox2 + */ + +Widget XmCombinationBox2GetList( +#ifndef _NO_PROTO +Widget +#endif +); + + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +extern WidgetClass xmCombinationBox2WidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmCombinationBox2_h */ diff --git a/libXm/linux86/Xm/ComboBox2P.h b/libXm/linux86/Xm/ComboBox2P.h new file mode 100644 index 0000000..5a136ec --- /dev/null +++ b/libXm/linux86/Xm/ComboBox2P.h @@ -0,0 +1,222 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmCombinationBox2P_h +#define _XmCombinationBox2P_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmCombinationBox2_UP ((unsigned char) 0) +#define XmCombinationBox2_UNPOSTED XmCombinationBox2_UP +#define XmCombinationBox2_DOWN ((unsigned char) 1) +#define XmCombinationBox2_POSTED XmCombinationBox2_DOWN +#define XmCombinationBox2_IN_PROGRESS ((unsigned char) 2) +#define XmCombinationBox2_BEGIN_POPUP_FROM_TEXT ((unsigned char) 3) + +#define XmCombinationBox2Index (XmManagerIndex + 1) + +extern XmOffsetPtr XmCombinationBox2_offsets; +extern XmOffsetPtr XmCombinationBox2C_offsets; + +#define ComboField(w, f, t) XmField(w, XmCombinationBox2_offsets, \ + XmCombinationBox2, f, t) +#define XmComboBox2_h_space(w) ComboField(w, h_space, Dimension) +#define XmComboBox2_v_space(w) ComboField(w, v_space, Dimension) +#define XmComboBox2_popup_offset(w) ComboField(w, popup_offset, int) +#define XmComboBox2_verify(w) ComboField(w, verify, Boolean) +#define XmComboBox2_editable(w) ComboField(w, editable, Boolean) +#define XmComboBox2_show_label(w) ComboField(w, show_label, Boolean) +#define XmComboBox2_customized_combo_box(w) ComboField(w, customized_combo_box, Boolean) +#define XmComboBox2_use_text_field(w) ComboField(w, use_text_field, Boolean) +#define XmComboBox2_popup_shell(w) ComboField(w, popup_shell, Widget) +#define XmComboBox2_popup_cursor(w) ComboField(w, popup_cursor, Cursor) +#define XmComboBox2_translations(w) ComboField(w, translations, XtTranslations) +#define XmComboBox2_verify_text_callback(w) ComboField(w, verify_text_callback, XtCallbackList) +#define XmComboBox2_verify_text_failed_callback(w) ComboField(w, verify_text_failed_callback, XtCallbackList) +#define XmComboBox2_update_text_callback(w) ComboField(w, update_text_callback, XtCallbackList) +#define XmComboBox2_update_shell_callback(w) ComboField(w, update_shell_callback, XtCallbackList) +#define XmComboBox2_visible_items(w) ComboField(w, visible_items, int) +#define XmComboBox2_new_visual_style(w) ComboField(w, new_visual_style, Boolean) + +#define XmComboBox2_old_text(w) ComboField(w, old_text, String) +#define XmComboBox2_focus_owner(w) ComboField(w, focus_owner, Window) +#define XmComboBox2_focus_state(w) ComboField(w, focus_state, int) +#define XmComboBox2_list_state(w) ComboField(w, list_state, unsigned char) +#define XmComboBox2_text_x(w) ComboField(w, text_x, Position) +#define XmComboBox2_list(w) ComboField(w, list, Widget) +#define XmComboBox2_label(w) ComboField(w, label, Widget) +#define XmComboBox2_text(w) ComboField(w, text, Widget) +#define XmComboBox2_arrow(w) ComboField(w, arrow, Widget) + +#define XmComboBox2_autoTraversal(w) ComboField(w, autoTraversal, Boolean) +#define XmComboBox2_activateOnFill(w) ComboField(w, activateOnFill, int) +#define XmComboBox2_doActivate(w) ComboField(w, doActivate, Boolean) +#define XmComboBox2_inValueChanged(w) ComboField(w, inValueChanged, Boolean) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/* Should return True to ignore invalid entry warning. Combination Box + * does not currently use this. Presumes do it in subclasses + */ +typedef Boolean (*XmCombinationBox2TextProc)( +#ifndef _NO_PROTO + Widget, + char *text +#endif +); + +typedef Boolean (*XmCombinationBox2TextListMapProc)( +#ifndef _NO_PROTO + Widget, /* combo box */ + Widget, /* text */ + Widget /* list */ +#endif +); + +/* Version number for the first Revision */ +#define XmCombinationBox2ExtensionVersion 2 + +typedef struct { + /* standard extension fields */ + + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + + /* extra fields */ + XmCombinationBox2TextProc verify; + XmCombinationBox2TextProc update; + XmCombinationBox2TextListMapProc setTextFromList; + XmCombinationBox2TextListMapProc setListFromText; +} XmCombinationBox2ClassPartExtension; + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmCombinationBox2ClassPart; + +typedef struct _XmCombinationBox2ClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmCombinationBox2ClassPart combo_class; +} XmCombinationBox2ClassRec; + +typedef struct { + /* resources */ + + Dimension h_space; /* The amount of space to leave between */ + Dimension v_space; /* widgets and the box edges. */ + + int popup_offset; /* The offset of the popup offset from the + left edge of the text widget. */ + + Boolean verify; /* Verify the contents of the Text widget + on leave or CR when this is True. */ + + Boolean editable; /* Allow the text field to be edited? */ + + Boolean show_label; /* Whether or not to show the label. */ + + Boolean customized_combo_box; /* Is this a customized combo box. */ + + Boolean use_text_field; /* Use XmTextField of XmText for textual input */ + + Widget popup_shell; /* The id of the popup shell. */ + + Cursor popup_cursor; /* Cursor for the Popup Window. */ + + XtTranslations translations; /* The translation table for all children. */ + + /* + * Callbacks to verify, and update the text and shell widgets. + */ + + XtCallbackList verify_text_callback; + XtCallbackList verify_text_failed_callback; + XtCallbackList update_text_callback; + XtCallbackList update_shell_callback; + + /* private state */ + + String old_text; /* The old text value. */ + Window focus_owner; /* Previous owner and state of the focus. */ + int focus_state; + + unsigned char list_state; /* XmCombinationBox2_UP, XmCombinationBox2_DOWN or XmCombinationBox2_IN_PROGRESS. */ + + Position text_x; /* X location of the text widget. */ + + Widget list; /* List contained in the popup shell. */ + + Widget label; /* The three children of the combo box. */ + Widget text; + Widget arrow; + + int visible_items; /* only to set/get XmNvisibleItemCount, which is + ** a sop for non-customized combobox users */ + + Boolean new_visual_style; + + Boolean autoTraversal; /* traverse next on return */ + int activateOnFill; /* activate when we fill this many chars */ + Boolean doActivate; /* do activate on next value changed */ + Boolean inValueChanged; /* recursion prevention */ +} XmCombinationBox2Part; + +typedef struct _XmCombinationBox2Rec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmCombinationBox2Part combo; +} XmCombinationBox2Rec; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmCombinationBox2ClassRec xmCombinationBox2ClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmCombinationBox2P_h */ diff --git a/libXm/linux86/Xm/ComboBoxP.h b/libXm/linux86/Xm/ComboBoxP.h new file mode 100644 index 0000000..b708afd --- /dev/null +++ b/libXm/linux86/Xm/ComboBoxP.h @@ -0,0 +1,166 @@ +/* $XConsortium: ComboBoxP.h /main/8 1995/09/19 23:00:21 cde-sun $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* ComboBoxP.h */ +#ifndef _XmComboBoxP_H +#define _XmComboBoxP_H + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* New fields for the ComboBox widget class record. */ + +typedef struct _XmComboBoxClassPart { + XtPointer extension; /* Pointer to extension record. */ +} XmComboBoxClassPart; + + +/* Full class record declaration. */ +typedef struct _XmComboBoxClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmComboBoxClassPart combo_box_class; +} XmComboBoxClassRec; + +externalref XmComboBoxClassRec xmComboBoxClassRec; + +/* + * New fields for the ComboBox widget record. + */ + +typedef struct _XmComboBoxPart { + /* Resources */ + unsigned char type; + unsigned char match_behavior; + Dimension highlight_thickness; + Dimension arrow_size; + Dimension arrow_spacing; + Dimension margin_width; + Dimension margin_height; + XtCallbackList selection_callback; + XmString selected_item; /* synthetic, not updated */ + int selected_position; + XmFontList render_table; + + /* Internal data */ + Widget list_shell; + Widget list; /* Now accessible as a resource */ + Widget scrolled_w; + Widget vsb; + Widget hsb; + int ideal_ebheight; + int ideal_ebwidth; + GC arrow_GC; + XRectangle hit_rect; + Dimension arrow_shadow_width; + Boolean arrow_pressed; + Boolean highlighted; + Boolean scrolling; + XtEnum shell_state; + /* NOTE that text_changed is also used for MT_safe resolution of + * the XmNRenderTable, XmNFontList resource settings + */ + Boolean text_changed; + + /* New resources/data for CDE compatibility. */ + Widget edit_box; + XmStringTable items; + int item_count; + int visible_item_count; + short columns; + XtEnum position_mode; + +} XmComboBoxPart; + + +/* Full instance record declaration. */ + +typedef struct _XmComboBoxRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmComboBoxPart combo_box; +} XmComboBoxRec; + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +/* Access macros */ +#define CB_ArrowPressed(w) (((XmComboBoxWidget)(w))->combo_box.arrow_pressed) +#define CB_ArrowSize(w) (((XmComboBoxWidget)(w))->combo_box.arrow_size) +#define CB_ArrowSpacing(w) (((XmComboBoxWidget)(w))->combo_box.arrow_spacing) +#define CB_EditBox(w) (((XmComboBoxWidget)(w))->combo_box.edit_box) +#define CB_HighlightThickness(w) \ + (((XmComboBoxWidget)(w))->combo_box.highlight_thickness) +#define CB_Highlighted(w) (((XmComboBoxWidget)(w))->combo_box.highlighted) +#define CB_HitRect(w) (((XmComboBoxWidget)(w))->combo_box.hit_rect) +#define CB_List(w) (((XmComboBoxWidget)(w))->combo_box.list) +#define CB_ListShell(w) (((XmComboBoxWidget)(w))->combo_box.list_shell) +#define CB_MarginHeight(w) (((XmComboBoxWidget)(w))->combo_box.margin_height) +#define CB_MarginWidth(w) (((XmComboBoxWidget)(w))->combo_box.margin_width) +#define CB_MatchBehavior(w) \ + (((XmComboBoxWidget)(w))->combo_box.match_behavior) +#define CB_PositionMode(w) (((XmComboBoxWidget)(w))->combo_box.position_mode) +#define CB_RenderTable(w) (((XmComboBoxWidget)(w))->combo_box.render_table) +#define CB_ScrolledW(w) (((XmComboBoxWidget)(w))->combo_box.scrolled_w) +#define CB_SelectionCB(w) \ + (((XmComboBoxWidget)(w))->combo_box.selection_callback) +#define CB_ShellState(w) (((XmComboBoxWidget)(w))->combo_box.shell_state) +#define CB_TextChanged(w) (((XmComboBoxWidget)(w))->combo_box.text_changed) +#define CB_Type(w) (((XmComboBoxWidget)(w))->combo_box.type) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + +#endif /* _XmComboBoxP_H */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Command.h b/libXm/linux86/Xm/Command.h new file mode 100644 index 0000000..ca3ae0c --- /dev/null +++ b/libXm/linux86/Xm/Command.h @@ -0,0 +1,105 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Command.h /main/12 1995/07/14 10:16:15 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCommand_h +#define _XmCommand_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmCommandWidgetClass; + +typedef struct _XmCommandClassRec * XmCommandWidgetClass; +typedef struct _XmCommandRec * XmCommandWidget; + + +#ifndef XmIsCommand +#define XmIsCommand(w) (XtIsSubclass (w, xmCommandWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateCommand( + Widget parent, + String name, + ArgList al, + Cardinal ac) ; +extern Widget XmCommandGetChild( + Widget widget, +#if NeedWidePrototypes + unsigned int child) ; +#else + unsigned char child) ; +#endif /* NeedWidePrototypes */ +extern void XmCommandSetValue( + Widget widget, + XmString value) ; +extern void XmCommandAppendValue( + Widget widget, + XmString value) ; +extern void XmCommandError( + Widget widget, + XmString error) ; +extern Widget XmCreateCommandDialog( + Widget ds_p, + String name, + ArgList fsb_args, + Cardinal fsb_n) ; + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCommand_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/CommandP.h b/libXm/linux86/Xm/CommandP.h new file mode 100644 index 0000000..aa50692 --- /dev/null +++ b/libXm/linux86/Xm/CommandP.h @@ -0,0 +1,118 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CommandP.h /main/11 1995/07/14 10:16:43 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCommandP_h +#define _XmCommandP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constraint part record for Command widget */ + +typedef struct _XmCommandConstraintPart +{ + char unused; +} XmCommandConstraintPart, * XmCommandConstraint; + +/* New fields for the Command widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmCommandClassPart; + + +/* Full class record declaration */ + +typedef struct _XmCommandClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmSelectionBoxClassPart selection_box_class; + XmCommandClassPart command_class; +} XmCommandClassRec; + +externalref XmCommandClassRec xmCommandClassRec; + +/* New fields for the Command widget record */ + +typedef struct +{ + XtCallbackList callback; + XtCallbackList value_changed_callback; + int history_max_items; + Boolean error; /* error has been made visible in list */ +} XmCommandPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmCommandRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmSelectionBoxPart selection_box; + XmCommandPart command; +} XmCommandRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCommandP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ContItemT.h b/libXm/linux86/Xm/ContItemT.h new file mode 100644 index 0000000..b99c6a4 --- /dev/null +++ b/libXm/linux86/Xm/ContItemT.h @@ -0,0 +1,89 @@ +/* $XConsortium: ContItemT.h /main/5 1995/07/15 20:49:36 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmContainerItemT_H +#define _XmContainerItemT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTcontainerItem; + +/* Trait structures and typedefs, place typedefs first */ + +/* this one can be expanded in the future */ +typedef struct _XmContainerItemDataRec { + Mask valueMask ; /* on setValues, give the information on + what to change in the Icon, on getValues, + on what to put in the record returned */ + unsigned char view_type; + unsigned char visual_emphasis; + Dimension icon_width ; /* get value */ + Cardinal detail_count; /* get value */ +} XmContainerItemDataRec, *XmContainerItemData; + +#define ContItemAllValid (0xFFFF) +#define ContItemViewType (1L<<0) +#define ContItemVisualEmphasis (1L<<1) +#define ContItemIconWidth (1L<<2) +#define ContItemDetailCount (1L<<3) + + +typedef void (*XmContainerItemSetValuesProc)(Widget w, + XmContainerItemData contItemData); +typedef void (*XmContainerItemGetValuesProc)(Widget w, + XmContainerItemData contItemData); + +/* Version 0: initial release. */ + +typedef struct _XmContainerItemTraitRec { + int version; /* 0 */ + XmContainerItemSetValuesProc setValues; + XmContainerItemGetValuesProc getValues; +} XmContainerItemTraitRec, *XmContainerItemTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainerItemT_H */ diff --git a/libXm/linux86/Xm/Container.h b/libXm/linux86/Xm/Container.h new file mode 100644 index 0000000..8a5caa7 --- /dev/null +++ b/libXm/linux86/Xm/Container.h @@ -0,0 +1,99 @@ +/* $XConsortium: Container.h /main/5 1995/07/15 20:50:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmContainer_h +#define _XmContainer_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Class record constants */ +externalref WidgetClass xmContainerWidgetClass; + +typedef struct _XmContainerClassRec *XmContainerWidgetClass; +typedef struct _XmContainerRec *XmContainerWidget; + +#ifndef XmIsContainer +#define XmIsContainer(w) XtIsSubclass(w, xmContainerWidgetClass) +#endif /* XmIsContainer */ + + +/******** Public Function Declarations ********/ +extern Widget XmCreateContainer( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount); +extern int XmContainerGetItemChildren( + Widget wid, + Widget item, + WidgetList *item_children); +extern void XmContainerRelayout( + Widget wid); +extern void XmContainerReorder( + Widget wid, + WidgetList cwid_list, + int cwid_count); +extern Boolean XmContainerCut( + Widget wid, + Time timestamp); +extern Boolean XmContainerCopy( + Widget wid, + Time timestamp); +extern Boolean XmContainerPaste( + Widget wid); +extern Boolean XmContainerCopyLink( + Widget wid, + Time timestamp); +extern Boolean XmContainerPasteLink( + Widget wid); +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainer_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ContainerP.h b/libXm/linux86/Xm/ContainerP.h new file mode 100644 index 0000000..77b2e2e --- /dev/null +++ b/libXm/linux86/Xm/ContainerP.h @@ -0,0 +1,405 @@ +/* $XConsortium: ContainerP.h /main/8 1996/06/13 16:45:53 pascale $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmContainerP_h +#define _XmContainerP_h + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * One _XmCwidNodeRec structure is allocated by Container for each of + * it's children (except for OutlineButtons). Information about the + * relationship of the child to other Container children (parentage and + * order) is maintained here by Container. + * + * _XmCwidNodeRec structures are XtCalloc'd by Container in the + * ConstraintInitialize method and XtFree'd in the ConstraintDestroy method. + * They are linked/unlinked to other _XmCwidNodeRec structures in the + * ChangeManaged method. + */ +typedef struct _XmCwidNodeRec + { + struct _XmCwidNodeRec * next_ptr; + struct _XmCwidNodeRec * prev_ptr; + struct _XmCwidNodeRec * child_ptr; + struct _XmCwidNodeRec * parent_ptr; + Widget widget_ptr; + } XmCwidNodeRec, *CwidNode; + +/* + * Container allocates a _XmContainerXfrActionRec structure to store + * the data from a ContainerStartTransfer action until it can determine + * whether the action should start a primary transfer or begin a drag. + */ +typedef struct _XmContainerXfrActionRec + { + Widget wid; + XEvent *event; + String *params; + Cardinal *num_params; + Atom operation; + } XmContainerXfrActionRec, *ContainerXfrAction; + +/* + * Container allocates an array of _XmContainerCwidCellInfoRec structures + * to use in calculating an ideal size in the GetSpatialSize procedure when + * XmNspatialStyle is XmCELLS. The array is created and destroyed in the + * GetSpatialSize procedure. + */ +typedef struct _XmContainerCwidCellInfoRec + { + int cwid_width_in_cells; + int cwid_height_in_cells; + } XmContainerCwidCellInfoRec, *ContainerCwidCellInfo; + +/* Container constraint class part record */ +typedef struct _XmContainerConstraintPart + { + Widget entry_parent; /* XmNentryParent */ + Widget related_cwid; + CwidNode node_ptr; + int position_index; /* XmNpositionIndex */ + int depth; + int cell_idx; + Boolean visible_in_outline; + Position user_x; + Position user_y; + unsigned char outline_state; /* XmNoutlineState */ + unsigned char selection_visual; + unsigned char selection_state; + unsigned char cwid_type; + } XmContainerConstraintPart, * XmContainerConstraint; + +typedef struct _XmContainerConstraintRec + { + XmManagerConstraintPart manager; + XmContainerConstraintPart container; + } XmContainerConstraintRec, * XmContainerConstraintPtr; + +/* move the other typedef here */ +typedef void (*XmSpatialGetSize)(Widget, Dimension *, Dimension *); + +/* Container widget class record */ +typedef struct _XmContainerClassPart + { + XmSpatialTestFitProc test_fit_item; + XmSpatialPlacementProc place_item; + XmSpatialRemoveProc remove_item; + XmSpatialGetSize get_spatial_size; + XtPointer extension; + } XmContainerClassPart; + +/* Full class record declaration */ +typedef struct _XmContainerClassRec + { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmContainerClassPart container_class; + } XmContainerClassRec, *XmContainerClass; + +externalref XmContainerClassRec xmContainerClassRec; + +/* Container instance record */ +typedef struct _XmContainerPart + { + WidgetList selected_items; /* XmNselectedItems */ + Widget icon_header; + Widget anchor_cwid; + Widget druggee; + Widget size_ob; + Widget drag_context; + CwidNode first_node; + CwidNode last_node; + Cardinal * detail_order; /* XmNdetailOrder */ + XmString * detail_heading; /* XmNdetailColumnHeading */ + XSegment * outline_segs; + XtCallbackList convert_cb; /* XmNconvertCallback */ + XtCallbackList default_action_cb; /* XmNdefaultActionCallback */ + XtCallbackList destination_cb; /* XmNdestinationCallback */ + XtCallbackList outline_cb; /* XmNoutlineChangedCallback */ + XtCallbackList selection_cb; /* XmNselectionCallback */ + XmTabList detail_tablist; /* XmNdetailTabList */ + XmFontList render_table; /* XmNfontList */ + Pixel select_color; /* XmNselectColor */ + Pixmap collapsed_state_pixmap; /* XmNcollapsedStatePixmap */ + Pixmap expanded_state_pixmap; /* XmNexpandedStatePixmap */ + GC normalGC; + GC marqueeGC; + Time last_click_time; + Region cells_region; + ContainerXfrAction transfer_action; + XtIntervalId transfer_timer_id; + XPoint anchor_point; + XPoint marquee_start; + XPoint marquee_end; + XPoint marquee_smallest; + XPoint marquee_largest; + XPoint dropspot; + unsigned long dynamic_resource; + int max_depth; + int outline_seg_count; + int *cells; + int cell_count; + int next_free_cell; + int current_width_in_cells; + int current_height_in_cells; + int drag_offset_x; + int drag_offset_y; + unsigned int selected_item_count; /* XmNselectedItemCount */ + Cardinal detail_heading_count; /* XmNdetailColumnHeadingCount */ + Cardinal saved_detail_heading_count; + Cardinal detail_order_count; /* XmNdetailOrderCount */ + Dimension first_col_width; /* XmNoutlineColumnWidth */ + Dimension real_first_col_width; + Dimension large_cell_height; /* XmNlargeCellHeight */ + Dimension large_cell_width; /* XmNlargeCellWidth */ + Dimension small_cell_height; /* XmNsmallCellHeight */ + Dimension small_cell_width; /* XmNsmallCellWidth */ + Dimension real_large_cellh; + Dimension real_large_cellw; + Dimension real_small_cellh; + Dimension real_small_cellw; + Dimension margin_h; /* XmNmarginHeight */ + Dimension margin_w; /* XmNmarginWidth */ + Dimension outline_indent; /* XmNoutlineIndentation */ + Dimension ob_width; + Dimension ob_height; + Dimension prev_width; + Dimension ideal_width; + Dimension ideal_height; + /* Note: first_change_managed is also used to resolve between + * XmRenderTable & XmFontList when setting up the resource table + */ + Boolean first_change_managed; + Boolean extending_mode; + Boolean marquee_mode; + Boolean self; + Boolean toggle_pressed; + Boolean extend_pressed; + Boolean ob_pressed; + Boolean cancel_pressed; + Boolean kaddmode; + Boolean no_auto_sel_changes; + Boolean started_in_anchor; + Boolean marquee_drawn; + Boolean have_primary; + Boolean selecting; + Boolean large_cell_dim_fixed; + Boolean small_cell_dim_fixed; + unsigned char automatic; /* XmNautomaticSelection */ + unsigned char entry_viewtype; /* XmNentryViewType */ + unsigned char include_model; /* XmNspatialIncludeModel */ + unsigned char layout_type; /* XmNlayoutType */ + unsigned char ob_policy; /* XmNoutlineButtonPolicy */ + unsigned char outline_sep_style; /* XmNoutlineLineStyle */ + unsigned char spatial_style; /* XmNspatialStyle */ + unsigned char primary_ownership; /* XmNprimaryOwnership */ + unsigned char resize_model; /* XmNspatialResizeModel */ + unsigned char selection_policy; /* XmNselectionPolicy */ + unsigned char selection_technique; /* XmNselectionTechnique */ + unsigned char snap_model; /* XmNspatialSnapModel */ + unsigned char create_cwid_type; + unsigned char selection_state; + unsigned char LeaveDir; /* leave direction */ + XtIntervalId scroll_proc_id; /* scroll TimeOutProc */ + int last_xmotion_x; + int last_xmotion_y; + XmString * cache_detail_heading; /* XmNdetailColumnHeading + getValues */ + } XmContainerPart; + +/* Full instance record declaration */ +typedef struct _XmContainerRec + { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmContainerPart container; + } XmContainerRec; + +/* enums to keep up with cwid types */ +enum { CONTAINER_ICON, + CONTAINER_OUTLINE_BUTTON, + CONTAINER_HEADER}; + +#define TABLIST (1L<<0) +#define FIRSTCW (1L<<1) +#define CtrIsDynamic(w,mask) \ + (((XmContainerWidget)(w))->container.dynamic_resource & mask) + +#define CtrDynamicSmallCellHeight(w) \ + (((XmContainerWidget)(w))->container.small_cell_height == 0) +#define CtrDynamicSmallCellWidth(w) \ + (((XmContainerWidget)(w))->container.small_cell_width == 0) +#define CtrDynamicLargeCellHeight(w) \ + (((XmContainerWidget)(w))->container.large_cell_height == 0) +#define CtrDynamicLargeCellWidth(w) \ + (((XmContainerWidget)(w))->container.large_cell_width == 0) + +#define CtrIsAUTO_SELECT(w) \ + ((((XmContainerWidget)(w))->container.automatic == XmAUTO_SELECT) && \ + (((XmContainerWidget)(w))->container.selection_policy \ + != XmSINGLE_SELECT)) +#define CtrViewIsLARGE_ICON(w) \ + (((XmContainerWidget)(w))->container.entry_viewtype == XmLARGE_ICON) +#define CtrViewIsSMALL_ICON(w) \ + (((XmContainerWidget)(w))->container.entry_viewtype == XmSMALL_ICON) +#define CtrViewIsANY_ICON(w) \ + (((XmContainerWidget)(w))->container.entry_viewtype == XmANY_ICON) +#define CtrIsHORIZONTAL(w) \ + (XmDirectionMatchPartial \ + (((XmContainerWidget)(w))->manager.string_direction,\ + XmDEFAULT_DIRECTION,XmPRECEDENCE_HORIZ_MASK)) +#define CtrIsVERTICAL(w) \ + (XmDirectionMatchPartial \ + (((XmContainerWidget)(w))->manager.string_direction,\ + XmDEFAULT_DIRECTION,XmPRECEDENCE_VERT_MASK)) +#define CtrLayoutIsDETAIL(w) \ + (((XmContainerWidget)(w))->container.layout_type == XmDETAIL) +#define CtrLayoutIsOUTLINE_DETAIL(w) \ + ((((XmContainerWidget)(w))->container.layout_type == XmDETAIL) || \ + (((XmContainerWidget)(w))->container.layout_type == XmOUTLINE)) + +#define CtrDrawLinesOUTLINE(w) \ + (CtrLayoutIsOUTLINE_DETAIL(w) && \ + (((XmContainerWidget)(w))->container.outline_sep_style \ + == XmSINGLE)) +#define CtrLayoutIsSPATIAL(w) \ + (((XmContainerWidget)(w))->container.layout_type == XmSPATIAL) +#define CtrSpatialStyleIsNONE(w) \ + (((XmContainerWidget)(w))->container.spatial_style == XmNONE) +#define CtrSpatialStyleIsGRID(w) \ + (((XmContainerWidget)(w))->container.spatial_style == XmGRID) +#define CtrSpatialStyleIsCELLS(w) \ + (((XmContainerWidget)(w))->container.spatial_style == XmCELLS) +#define CtrIncludeIsAPPEND(w) \ + (((XmContainerWidget)(w))->container.include_model == XmAPPEND) +#define CtrIncludeIsCLOSEST(w) \ + (((XmContainerWidget)(w))->container.include_model == XmCLOSEST) +#define CtrIncludeIsFIRST_FIT(w) \ + (((XmContainerWidget)(w))->container.include_model == XmFIRST_FIT) +#define CtrSnapModelIsNONE(w) \ + (((XmContainerWidget)(w))->container.snap_model == XmNONE) +#define CtrSnapModelIsSNAP(w) \ + (((XmContainerWidget)(w))->container.snap_model == XmSNAP_TO_GRID) +#define CtrSnapModelIsCENTER(w) \ + (((XmContainerWidget)(w))->container.snap_model == XmCENTER) +#define CtrResizeModelIsGROW_MINOR(w) \ + (((XmContainerWidget)(w))->container.resize_model == XmGROW_MINOR) +#define CtrResizeModelIsGROW_MAJOR(w) \ + (((XmContainerWidget)(w))->container.resize_model == XmGROW_MAJOR) +#define CtrResizeModelIsGROW_BALANCED(w) \ + (((XmContainerWidget)(w))->container.resize_model == XmGROW_BALANCED) +#define CtrPolicyIsSINGLE(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmSINGLE_SELECT) +#define CtrPolicyIsBROWSE(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmBROWSE_SELECT) +#define CtrPolicyIsMULTIPLE(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmMULTIPLE_SELECT) +#define CtrPolicyIsEXTENDED(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmEXTENDED_SELECT) +#define CtrTechIsTOUCH_OVER(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmTOUCH_OVER) +#define CtrTechIsTOUCH_ONLY(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmTOUCH_ONLY) +#define CtrTechIsMARQUEE(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmMARQUEE) +#define CtrTechIsMARQUEE_ES(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmMARQUEE_EXTEND_START) +#define CtrTechIsMARQUEE_EB(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmMARQUEE_EXTEND_BOTH) +#define CtrOB_PRESENT(w) \ + (((XmContainerWidget)(w))->container.ob_policy \ + == XmOUTLINE_BUTTON_PRESENT) +#define CtrOB_ABSENT(w) \ + (((XmContainerWidget)(w))->container.ob_policy \ + == XmOUTLINE_BUTTON_ABSENT) +#define GetContainerConstraint(w) \ + (&((XmContainerConstraintPtr) (w)->core.constraints)->container) +#define CtrItemIsPlaced(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cell_idx \ + != NO_CELL) +#define CtrICON(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cwid_type\ + == CONTAINER_ICON) +#define CtrOUTLINE_BUTTON(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cwid_type\ + == CONTAINER_OUTLINE_BUTTON) +#define CtrHEADER(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cwid_type\ + == CONTAINER_HEADER) + +#define XmInheritSpatialTestFitProc ((XmSpatialTestFitProc) _XtInherit) +#define XmInheritSpatialPlacementProc ((XmSpatialPlacementProc) _XtInherit) +#define XmInheritSpatialRemoveProc ((XmSpatialRemoveProc) _XtInherit) +#define XmInheritSpatialGetSize ((XmSpatialGetSize) _XtInherit) + +/* possible directions when leaving the container */ +#define TOPLEAVE (1<<0) +#define BOTTOMLEAVE (1<<1) +#define LEFTLEAVE (1<<2) +#define RIGHTLEAVE (1<<3) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainerP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + diff --git a/libXm/linux86/Xm/ContainerT.h b/libXm/linux86/Xm/ContainerT.h new file mode 100644 index 0000000..3e2233c --- /dev/null +++ b/libXm/linux86/Xm/ContainerT.h @@ -0,0 +1,90 @@ +/* $XConsortium: ContainerT.h /main/6 1996/02/09 15:05:04 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmContainerT_H +#define _XmContainerT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTcontainer; + +/* Trait structures and typedefs, place typedefs first */ + +/* this one can be expanded in the future */ +typedef struct _XmContainerDataRec { + Mask valueMask ; + + Cardinal * detail_order ; + Cardinal detail_order_count ; + XmTabList detail_tablist ; + Dimension first_column_width ; + XtEnum selection_mode ; /* XmNORMAL_MODE, XmADD_MODE */ + Pixel select_color ; + +} XmContainerDataRec, *XmContainerData; + +#define ContAllValid (0xFFFF) +#define ContDetailOrder (1L<<0) +#define ContDetailTabList (1L<<1) +#define ContFirstColumnWidth (1L<<2) +#define ContSelectionMode (1L<<3) +#define ContSelectColor (1L<<4) + + +typedef void (*XmContainerGetValuesProc)(Widget w, + XmContainerData contData); + +/* Version 0: initial release. */ + +typedef struct _XmContainerTraitRec { + int version; /* 0 */ + XmContainerGetValuesProc getValues; +} XmContainerTraitRec, *XmContainerTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainerT_H */ diff --git a/libXm/linux86/Xm/CutPaste.h b/libXm/linux86/Xm/CutPaste.h new file mode 100644 index 0000000..6e6147c --- /dev/null +++ b/libXm/linux86/Xm/CutPaste.h @@ -0,0 +1,194 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CutPaste.h /main/13 1995/07/14 10:17:18 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCutPaste_h +#define _XmCutPaste_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* XmClipboard return status definitions */ + +typedef enum { + XmClipboardFail = 0, + XmClipboardSuccess = 1, + XmClipboardTruncate = 2, + XmClipboardLocked = 4, + XmClipboardBadFormat = 5, + XmClipboardNoData = 6 +} XmClipboardStatus; + +/* XmClipboard pre-1.2 definitions */ + +#define ClipboardFail 0 +#define ClipboardSuccess 1 +#define ClipboardTruncate 2 +#define ClipboardLocked 4 +#define ClipboardBadFormat 5 +#define ClipboardNoData 6 + +typedef struct { + long DataId; + long PrivateId; +} XmClipboardPendingRec, *XmClipboardPendingList; + +typedef void (*XmCutPasteProc)( Widget w, long * data_id, long * private_id, + int * reason) ; +typedef void (*VoidProc)( Widget w, int * data_id, int * private_id, + int * reason) ; + + +/******** Public Function Declarations ********/ + +extern int XmClipboardBeginCopy( + Display *display, + Window window, + XmString label, + Widget widget, + VoidProc callback, + long *itemid) ; +extern int XmClipboardStartCopy( + Display *display, + Window window, + XmString label, + Time timestamp, + Widget widget, + XmCutPasteProc callback, + long *itemid) ; +extern int XmClipboardCopy( + Display *display, + Window window, + long itemid, + char *format, + XtPointer buffer, + unsigned long length, + long private_id, + long *dataid) ; +extern int XmClipboardEndCopy( + Display *display, + Window window, + long itemid) ; +extern int XmClipboardCancelCopy( + Display *display, + Window window, + long itemid) ; +extern int XmClipboardWithdrawFormat( + Display *display, + Window window, + long data) ; +extern int XmClipboardCopyByName( + Display *display, + Window window, + long data, + XtPointer buffer, + unsigned long length, + long private_id) ; +extern int XmClipboardUndoCopy( + Display *display, + Window window) ; +extern int XmClipboardLock( + Display *display, + Window window) ; +extern int XmClipboardUnlock( + Display *display, + Window window, +#if NeedWidePrototypes + int all_levels) ; +#else + Boolean all_levels) ; +#endif /* NeedWidePrototypes */ +extern int XmClipboardStartRetrieve( + Display *display, + Window window, + Time timestamp) ; +extern int XmClipboardEndRetrieve( + Display *display, + Window window) ; +extern int XmClipboardRetrieve( + Display *display, + Window window, + char *format, + XtPointer buffer, + unsigned long length, + unsigned long *outlength, + long *private_id) ; +extern int XmClipboardInquireCount( + Display *display, + Window window, + int *count, + unsigned long *maxlength) ; +extern int XmClipboardInquireFormat( + Display *display, + Window window, + int n, + XtPointer buffer, + unsigned long bufferlength, + unsigned long *outlength) ; +extern int XmClipboardInquireLength( + Display *display, + Window window, + char *format, + unsigned long *length) ; +extern int XmClipboardInquirePendingItems( + Display *display, + Window window, + char *format, + XmClipboardPendingList *list, + unsigned long *count) ; +extern int XmClipboardRegisterFormat( + Display *display, + char *format_name, + int format_length) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCutPaste_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DataF.h b/libXm/linux86/Xm/DataF.h new file mode 100644 index 0000000..190b135 --- /dev/null +++ b/libXm/linux86/Xm/DataF.h @@ -0,0 +1,155 @@ +#ifndef _XmDataF_h +#define _XmDataF_h + +#include +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmDataFieldClassRec *XmDataFieldWidgetClass; +typedef struct _XmDataFieldRec *XmDataFieldWidget; + +/* Function Name: XmCreateDataField + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateDataField( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +Boolean _XmDataFieldReplaceText( +#ifndef _NO_PROTO +XmDataFieldWidget, XEvent*, XmTextPosition, XmTextPosition, char*, int, Boolean +#endif +); + +void XmDataFieldSetString( +#ifndef _NO_PROTO +Widget, char* +#endif +); + +extern char * XmDataFieldGetString( +#ifndef _NO_PROTO +Widget +#endif +); + +extern wchar_t * XmDataFieldGetStringWcs( +#ifndef _NO_PROTO +Widget +#endif +); + +void _XmDataFieldSetClipRect( +#ifndef _NO_PROTO +XmDataFieldWidget +#endif +); + +void _XmDataFieldDrawInsertionPoint( +#ifndef _NO_PROTO +XmDataFieldWidget, Boolean +#endif +); + +void XmDataFieldSetHighlight( +#ifndef _NO_PROTO +Widget, XmTextPosition, XmTextPosition, XmHighlightMode +#endif +); + +void XmDataFieldSetAddMode( +#ifndef _NO_PROTO +Widget, Boolean +#endif +); + +char * XmDataFieldGetSelection( +#ifndef _NO_PROTO +Widget +#endif +); + +void XmDataFieldSetSelection( +#ifndef _NO_PROTO +Widget, XmTextPosition, XmTextPosition, Time +#endif +); + +void _XmDataFieldSetSel2( +#ifndef _NO_PROTO +Widget, XmTextPosition, XmTextPosition, Boolean, Time +#endif +); + +Boolean XmDataFieldGetSelectionPosition( +#ifndef _NO_PROTO +Widget, XmTextPosition *, XmTextPosition * +#endif +); + +XmTextPosition XmDataFieldXYToPos( +#ifndef _NO_PROTO +Widget, Position, Position +#endif +); + +void XmDataFieldShowPosition( +#ifndef _NO_PROTO +Widget, XmTextPosition +#endif +); + +Boolean XmDataFieldCut( +#ifndef _NO_PROTO +Widget, Time +#endif +); + +Boolean XmDataFieldCopy( +#ifndef _NO_PROTO +Widget, Time +#endif +); + +Boolean XmDataFieldPaste( +#ifndef _NO_PROTO +Widget +#endif +); + +void XmDataFieldSetEditable( +#ifndef _NO_PROTO +Widget, Boolean +#endif +); + +void XmDataFieldSetInsertionPosition( +#ifndef _NO_PROTO +Widget, XmTextPosition +#endif +); + +extern WidgetClass xmDataFieldWidgetClass; + +typedef struct _XmDataFieldCallbackStruct { + Widget w; /* The XmDataField */ + String text; /* Proposed string */ + Boolean accept; /* Accept return value, for validation */ +} XmDataFieldCallbackStruct; + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#endif /* _XmDataF_h */ diff --git a/libXm/linux86/Xm/DataFP.h b/libXm/linux86/Xm/DataFP.h new file mode 100644 index 0000000..3cf3512 --- /dev/null +++ b/libXm/linux86/Xm/DataFP.h @@ -0,0 +1,165 @@ +#ifndef _XmDataFP_h +#define _XmDataFP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Motif doesn't define this: go figure + */ +#ifndef XmTextFieldIndex +#define XmTextFieldIndex (XmPrimitiveIndex + 1) +#endif + +#define XmDataFieldIndex (XmTextFieldIndex) + +typedef struct _XmDataFieldClassPart { + XtPointer extension; +} XmDataFieldClassPart; + +typedef struct _XmDataFieldClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmDataFieldClassPart data_class; +} XmDataFieldClassRec; + +typedef struct _XmDataFieldPart { + unsigned char alignment; /* XmALIGNMENT_BEGINNING by default */ + String picture_source; + XmPicture picture; + Boolean auto_fill; + XtCallbackList picture_error_cb; + XtCallbackList validate_cb; +} XmDataFieldPart; + +typedef struct _XmDataFieldRec { + CorePart core; + XmPrimitivePart primitive; + XmDataFieldPart data; +} XmDataFieldRec; + +extern XmDataFieldClassRec xmDataFieldClassRec; + +extern XmOffsetPtr XmDataField_offsets; + +#define XmTextFField(w,f,t) XmField(w, XmDataField_offsets, XmTextField, f, t) + +#define XmTextF_activate_callback(w) XmTextFField(w, activate_callback, XtCallbackList) +#define XmTextF_focus_callback(w) XmTextFField(w, focus_callback, XtCallbackList) +#define XmTextF_losing_focus_callback(w) XmTextFField(w, losing_focus_callback, XtCallbackList) +#define XmTextF_modify_verify_callback(w) XmTextFField(w, modify_verify_callback, XtCallbackList) +#define XmTextF_wcs_modify_verify_callback(w) XmTextFField(w, wcs_modify_verify_callback, XtCallbackList) +#define XmTextF_motion_verify_callback(w) XmTextFField(w, motion_verify_callback, XtCallbackList) +#define XmTextF_gain_primary_callback(w) XmTextFField(w, gain_primary_callback, XtCallbackList) +#define XmTextF_lose_primary_callback(w) XmTextFField(w, lose_primary_callback, XtCallbackList) +#define XmTextF_value_changed_callback(w) XmTextFField(w, value_changed_callback, XtCallbackList) +#define XmTextF_value(w) XmTextFField(w, value, char*) +#define XmTextF_wc_value(w) XmTextFField(w, wc_value, wchar_t*) +#define XmTextF_font_list(w) XmTextFField(w, font_list, XmFontList) +#define XmTextF_font(w) XmTextFField(w, font, XFontStruct*) +#define XmTextF_selection_array(w) XmTextFField(w, selection_array, XmTextScanType*) +#define XmTextF_highlight(w) XmTextFField(w, highlight, _XmHighlightData) +#define XmTextF_gc(w) XmTextFField(w, gc, GC) +#define XmTextF_image_gc(w) XmTextFField(w, image_gc, GC) +#define XmTextF_save_gc(w) XmTextFField(w, save_gc, GC) +#define XmTextF_ibeam_off(w) XmTextFField(w, ibeam_off, Pixmap) +#define XmTextF_add_mode_cursor(w) XmTextFField(w, add_mode_cursor, Pixmap) +#define XmTextF_cursor(w) XmTextFField(w, cursor, Pixmap) +#define XmTextF_putback(w) XmTextFField(w, putback, Pixmap) +#define XmTextF_stipple_tile(w) XmTextFField(w, stipple_tile, Pixmap) +#define XmTextF_image_clip(w) XmTextFField(w, image_clip, Pixmap) +#define XmTextF_cursor_position(w) XmTextFField(w, cursor_position, XmTextPosition) +#define XmTextF_new_h_offset(w) XmTextFField(w, new_h_offset, XmTextPosition) +#define XmTextF_h_offset(w) XmTextFField(w, h_offset, XmTextPosition) +#define XmTextF_orig_left(w) XmTextFField(w, orig_left, XmTextPosition) +#define XmTextF_orig_right(w) XmTextFField(w, orig_right, XmTextPosition) +#define XmTextF_prim_pos_left(w) XmTextFField(w, prim_pos_left, XmTextPosition) +#define XmTextF_prim_pos_right(w) XmTextFField(w, prim_pos_right, XmTextPosition) +#define XmTextF_prim_anchor(w) XmTextFField(w, prim_anchor, XmTextPosition) +#define XmTextF_sec_pos_left(w) XmTextFField(w, sec_pos_left, XmTextPosition) +#define XmTextF_sec_pos_right(w) XmTextFField(w, sec_pos_right, XmTextPosition) +#define XmTextF_sec_anchor(w) XmTextFField(w, sec_anchor, XmTextPosition) +#define XmTextF_stuff_pos(w) XmTextFField(w, stuff_pos, XmTextPosition) +#define XmTextF_select_pos_x(w) XmTextFField(w, select_pos_x, Position) +#define XmTextF_prim_time(w) XmTextFField(w, prim_time, Time) +#define XmTextF_dest_time(w) XmTextFField(w, dest_time, Time) +#define XmTextF_sec_time(w) XmTextFField(w, sec_time, Time) +#define XmTextF_last_time(w) XmTextFField(w, last_time, Time) +#define XmTextF_timer_id(w) XmTextFField(w, timer_id, XtIntervalId) +#define XmTextF_select_id(w) XmTextFField(w, select_id, XtIntervalId) +#define XmTextF_blink_rate(w) XmTextFField(w, blink_rate, int) +#define XmTextF_selection_array_count(w) XmTextFField(w, selection_array_count, int) +#define XmTextF_threshold(w) XmTextFField(w, threshold, int) +#define XmTextF_size_allocd(w) XmTextFField(w, size_allocd, int) +#define XmTextF_string_length(w) XmTextFField(w, string_length, int) +#define XmTextF_cursor_height(w) XmTextFField(w, cursor_height, int) +#define XmTextF_cursor_width(w) XmTextFField(w, cursor_width, int) +#define XmTextF_sarray_index(w) XmTextFField(w, sarray_index, int) +#define XmTextF_max_length(w) XmTextFField(w, max_length, int) +#define XmTextF_max_char_size(w) XmTextFField(w, max_char_size, int) +#define XmTextF_columns(w) XmTextFField(w, columns, short) +#define XmTextF_margin_width(w) XmTextFField(w, margin_width, Dimension) +#define XmTextF_margin_height(w) XmTextFField(w, margin_height, Dimension) +#define XmTextF_average_char_width(w) XmTextFField(w, average_char_width, Dimension) +#define XmTextF_margin_top(w) XmTextFField(w, margin_top, Dimension) +#define XmTextF_margin_bottom(w) XmTextFField(w, margin_bottom, Dimension) +#define XmTextF_font_ascent(w) XmTextFField(w, font_ascent, Dimension) +#define XmTextF_font_descent(w) XmTextFField(w, font_descent, Dimension) +#define XmTextF_resize_width(w) XmTextFField(w, resize_width, Boolean) +#define XmTextF_pending_delete(w) XmTextFField(w, pending_delete, Boolean) +#define XmTextF_editable(w) XmTextFField(w, editable, Boolean) +#define XmTextF_verify_bell(w) XmTextFField(w, verify_bell, Boolean) +#define XmTextF_cursor_position_visible(w) XmTextFField(w, cursor_position_visible, Boolean) +#define XmTextF_traversed(w) XmTextFField(w, traversed, Boolean) +#define XmTextF_add_mode(w) XmTextFField(w, add_mode, Boolean) +#define XmTextF_has_focus(w) XmTextFField(w, has_focus, Boolean) +#define XmTextF_blink_on(w) XmTextFField(w, blink_on, Boolean) +#define XmTextF_cursor_on(w) XmTextFField(w, cursor_on, short int) +#define XmTextF_refresh_ibeam_off(w) XmTextFField(w, refresh_ibeam_off, Boolean) +#define XmTextF_have_inverted_image_gc(w) XmTextFField(w, have_inverted_image_gc, Boolean) +#define XmTextF_has_primary(w) XmTextFField(w, has_primary, Boolean) +#define XmTextF_has_secondary(w) XmTextFField(w, has_secondary, Boolean) +#define XmTextF_has_destination(w) XmTextFField(w, has_destination, Boolean) +#define XmTextF_sec_drag(w) XmTextFField(w, sec_drag, Boolean) +#define XmTextF_selection_move(w) XmTextFField(w, selection_move, Boolean) +#define XmTextF_pending_off(w) XmTextFField(w, pending_off, Boolean) +#define XmTextF_fontlist_created(w) XmTextFField(w, fontlist_created, Boolean) +#define XmTextF_has_rect(w) XmTextFField(w, has_rect, Boolean) +#define XmTextF_do_drop(w) XmTextFField(w, do_drop, Boolean) +#define XmTextF_cancel(w) XmTextFField(w, cancel, Boolean) +#define XmTextF_extending(w) XmTextFField(w, extending, Boolean) +#define XmTextF_sec_extending(w) XmTextFField(w, sec_extending, Boolean) +#define XmTextF_changed_visible(w) XmTextFField(w, changed_visible, Boolean) +#define XmTextF_have_fontset(w) XmTextFField(w, have_fontset, Boolean) +#define XmTextF_in_setvalues(w) XmTextFField(w, in_setvalues, Boolean) +#define XmTextF_do_resize(w) XmTextFField(w, do_resize, Boolean) +#define XmTextF_redisplay(w) XmTextFField(w, redisplay, Boolean) +#define XmTextF_overstrike(w) XmTextFField(w, overstrike, Boolean) +#define XmTextF_sel_start(w) XmTextFField(w, sel_start, Boolean) +#define XmTextF_extension(w) XmTextFField(w, extension, XtPointer) + +#define XmDataFieldField(w,f,t) \ + (*(t *)(((char *) (w)) + XmDataField_offsets[XmTextFieldIndex] \ + + sizeof(XmTextFieldPart) \ + + XtOffsetOf(XmDataFieldPart, f))) + +#define XmDataField_alignment(w) XmDataFieldField(w, alignment, unsigned char) +#define XmDataField_picture_source(w) XmDataFieldField(w, picture_source, String) +#define XmDataField_picture(w) XmDataFieldField(w, picture, XmPicture) +#define XmDataField_picture_state(w) XmDataFieldField(w, picture_state, XmPictureState) +#define XmDataField_auto_fill(w) XmDataFieldField(w, auto_fill, Boolean) +#define XmDataField_picture_error_cb(w) XmDataFieldField(w, picture_error_cb, XtCallbackList) +#define XmDataField_validate_cb(w) XmDataFieldField(w, validate_cb, XtCallbackList) + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XmDataFP_h */ diff --git a/libXm/linux86/Xm/DataFSelP.h b/libXm/linux86/Xm/DataFSelP.h new file mode 100644 index 0000000..06f3fb3 --- /dev/null +++ b/libXm/linux86/Xm/DataFSelP.h @@ -0,0 +1,57 @@ +/* + * (c) Copyright 1989, 1990, 1991, 1992 OPEN SOFTWARE FOUNDATION, INC. + * ALL RIGHTS RESERVED +*/ +/* + * Motif Release 1.2 +*/ +/* $RCSfile: DataFSelP.h,v $ $Revision: 1.4 $ $Date: 2002/01/15 17:30:40 $ */ +/* +* (c) Copyright 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDataFSelP_h +#define _XmDataFSelP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** External (DataF.c) function declaration *******/ +#ifdef _NO_PROTO +extern Widget _XmDataFieldGetDropReciever() ; +#else +extern Widget _XmDataFieldGetDropReciever( Widget w ) ; +#endif /* _NO_PROTO */ + + +/******** Private Function Declarations ********/ +#ifdef _NO_PROTO + +extern Boolean _XmDataFieldConvert() ; +extern void _XmDataFieldLoseSelection() ; + +#else + +extern Boolean _XmDataFieldConvert( + Widget w, + Atom *selection, + Atom *target, + Atom *type, + XtPointer *value, + unsigned long *length, + int *format) ; +extern void _XmDataFieldLoseSelection( + Widget w, + Atom *selection) ; + +#endif /* _NO_PROTO */ +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDataFSelP_h */ +/* DON't ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DesktopP.h b/libXm/linux86/Xm/DesktopP.h new file mode 100644 index 0000000..4c7ed5c --- /dev/null +++ b/libXm/linux86/Xm/DesktopP.h @@ -0,0 +1,106 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DesktopP.h /main/10 1995/07/14 10:17:44 drk $ */ +/* +* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDesktopP_h +#define _XmDesktopP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsDesktopObject +#define XmIsDesktopObject(w) XtIsSubclass(w, xmDesktopClass) +#endif /* XmIsDesktopObject */ + +typedef struct _XmDesktopRec *XmDesktopObject; +typedef struct _XmDesktopClassRec *XmDesktopObjectClass; +externalref WidgetClass xmDesktopClass; + + +typedef struct _XmDesktopClassPart{ + WidgetClass child_class; + XtWidgetProc insert_child; /* physically add child to parent */ + XtWidgetProc delete_child; /* physically remove child */ + XtPointer extension; +}XmDesktopClassPart, *XmDesktopClassPartPtr; + +typedef struct _XmDesktopClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; +}XmDesktopClassRec; + +typedef struct { + Widget parent; + Widget *children; + Cardinal num_children; + Cardinal num_slots; +} XmDesktopPart, *XmDesktopPartPtr; + +externalref XmDesktopClassRec xmDesktopClassRec; + +typedef struct _XmDesktopRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; +}XmDesktopRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDesktopP_h */ diff --git a/libXm/linux86/Xm/DialogS.h b/libXm/linux86/Xm/DialogS.h new file mode 100644 index 0000000..b571a55 --- /dev/null +++ b/libXm/linux86/Xm/DialogS.h @@ -0,0 +1,84 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DialogS.h /main/13 1995/07/14 10:18:50 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDialogShell_h +#define _XmDialogShell_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsDialogShell +#define XmIsDialogShell(w) XtIsSubclass(w, xmDialogShellWidgetClass) +#endif /* XmIsDialogShell */ + +externalref WidgetClass xmDialogShellWidgetClass; + +typedef struct _XmDialogShellClassRec * XmDialogShellWidgetClass; +typedef struct _XmDialogShellRec * XmDialogShellWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDialogShell( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DialogSEP.h b/libXm/linux86/Xm/DialogSEP.h new file mode 100644 index 0000000..b473f35 --- /dev/null +++ b/libXm/linux86/Xm/DialogSEP.h @@ -0,0 +1,108 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DialogSEP.h /main/10 1995/07/14 10:19:17 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDialogShellExtP_h +#define _XmDialogShellExtP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsDialogShellExt +#define XmIsDialogShellExt(w) XtIsSubclass(w, xmDialogShellExtObjectClass) +#endif /* XmIsDialogShellExt */ + +externalref WidgetClass xmDialogShellExtObjectClass; + +typedef struct _XmDialogShellExtClassRec *XmDialogShellExtObjectClass ; +typedef struct _XmDialogShellExtRec *XmDialogShellExtObject ; + + +typedef struct _XmDialogShellExtClassPart{ + XtPointer extension; /* Pointer to extension record */ +}XmDialogShellExtClassPart, *XmDialogShellExtClassPartPtr; + +typedef struct _XmDialogShellExtClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; + XmShellExtClassPart shell_class; + XmVendorShellExtClassPart vendor_class; + XmDialogShellExtClassPart dialog_class; +}XmDialogShellExtClassRec; + +typedef struct _XmDialogShellExtPart{ + int empty; +} XmDialogShellExtPart; + +externalref XmDialogShellExtClassRec xmDialogShellExtClassRec; + +typedef struct _XmDialogShellExtRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; + XmShellExtPart shell; + XmVendorShellExtPart vendor; + XmDialogShellExtPart dialog; +}XmDialogShellExtRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogShellExtP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DialogSP.h b/libXm/linux86/Xm/DialogSP.h new file mode 100644 index 0000000..33b94be --- /dev/null +++ b/libXm/linux86/Xm/DialogSP.h @@ -0,0 +1,131 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DialogSP.h /main/13 1995/07/14 10:19:42 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDialogShellP_h +#define _XmDialogShellP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The DialogShell instance record */ + +typedef struct +{ + /* internal fields */ + XtGrabKind grab_kind; + Position old_x, old_y; +} XmDialogShellPart; + + +/* Full instance record declaration */ + +typedef struct _XmDialogShellRec +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TransientShellPart transient; + XmDialogShellPart dialog; +} XmDialogShellRec; + +typedef struct _XmDialogShellWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TransientShellPart transient; + XmDialogShellPart dialog; +} XmDialogShellWidgetRec; + + + +/* DialogShell class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmDialogShellClassPart; + + +/* Full class record declaration */ + +typedef struct _XmDialogShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + TransientShellClassPart transient_shell_class; + XmDialogShellClassPart dialog_shell_part; +} XmDialogShellClassRec; + + +externalref XmDialogShellClassRec xmDialogShellClassRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DialogSavvyT.h b/libXm/linux86/Xm/DialogSavvyT.h new file mode 100644 index 0000000..3742152 --- /dev/null +++ b/libXm/linux86/Xm/DialogSavvyT.h @@ -0,0 +1,84 @@ +/* $XConsortium: DialogSavvyT.h /main/5 1995/07/15 20:50:29 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmDialogSavvyT_H +#define _XmDialogSavvyT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTdialogShellSavvy; +/* This trait also requires a resource named "defaultPosition". + If the child has the trait, the resource will be get and set by + the DialogShell ChangeManaged */ + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmDialogSavvyMapUnmapProc)(Widget wid, + Boolean map_unmap); + + +/* Version 0: initial release. */ + +typedef struct _XmDialogSavvyTraitRec { + int version; /* 0 */ + XmDialogSavvyMapUnmapProc callMapUnmapCB; +} XmDialogSavvyTraitRec,*XmDialogSavvyTrait; + + +/* This macro is part of the trait and is used for the following situation + DialogShells always mimic the child position on themselves. + If the SetValues on a bb child position was 0, + which is always the _current_ position of the bb in a DialogShell, + Xt does not see a change and therefore not trigerred a geometry request. + So BB (or any dialogShellSavvy child) has to catch this case + and change the position request to use a special value in its + SetValues method, XmDIALOG_SAVVY_FORCE_ORIGIN, to notify the Dialog that + it really wants to move in 0 */ + +#define XmDIALOG_SAVVY_FORCE_ORIGIN ((Position)~0L) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogSavvyT_H */ diff --git a/libXm/linux86/Xm/Display.h b/libXm/linux86/Xm/Display.h new file mode 100644 index 0000000..638c01f --- /dev/null +++ b/libXm/linux86/Xm/Display.h @@ -0,0 +1,93 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Display.h /main/10 1995/07/14 10:20:21 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDisplay_h +#define _XmDisplay_h + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsDisplay +#define XmIsDisplay(w) (XtIsSubclass(w, xmDisplayClass)) +#endif /* XmIsXmDisplay */ + +enum { + XmDRAG_NONE, + XmDRAG_DROP_ONLY, + XmDRAG_PREFER_PREREGISTER, + XmDRAG_PREREGISTER, + XmDRAG_PREFER_DYNAMIC, + XmDRAG_DYNAMIC, + XmDRAG_PREFER_RECEIVER +}; + +/* Class record constants */ + +typedef struct _XmDisplayRec *XmDisplay; +typedef struct _XmDisplayClassRec *XmDisplayClass; +externalref WidgetClass xmDisplayClass; + +#define XmGetDisplay(w) XmGetXmDisplay(XtDisplayOfObject(w)) + +/******** Public Function Declarations ********/ + +extern Widget XmGetDragContext( + Widget w, + Time time) ; +extern Widget XmGetXmDisplay( + Display *display) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDisplay_h */ + + diff --git a/libXm/linux86/Xm/DisplayP.h b/libXm/linux86/Xm/DisplayP.h new file mode 100644 index 0000000..c5aecb2 --- /dev/null +++ b/libXm/linux86/Xm/DisplayP.h @@ -0,0 +1,174 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DisplayP.h /main/13 1996/11/21 11:32:08 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDisplayP_h +#define _XmDisplayP_h + +#include +#include +#include +#include +#include + +/* A little incest */ +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef Widget (*XmDisplayGetDisplayProc)(Display *); + + +typedef struct { + XmDisplayGetDisplayProc GetDisplay; + XtPointer extension; +} XmDisplayClassPart; + +/* + * we make it a appShell subclass so it can have it's own instance + * hierarchy + */ +typedef struct _XmDisplayClassRec{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + TopLevelShellClassPart top_level_shell_class; + ApplicationShellClassPart application_shell_class; + XmDisplayClassPart display_class; +} XmDisplayClassRec; + +typedef struct _XmModalDataRec{ + Widget wid; + XmVendorShellExtObject ve; + XmVendorShellExtObject grabber; + Boolean exclusive; + Boolean springLoaded; +} XmModalDataRec, *XmModalData; + +typedef struct { + unsigned char dragInitiatorProtocolStyle; + unsigned char dragReceiverProtocolStyle; + + unsigned char userGrabbed; /* flag for menu vs dnd */ + + WidgetClass dragContextClass; + WidgetClass dropTransferClass; + WidgetClass dropSiteManagerClass; + XmDragContext activeDC; + XmDropSiteManagerObject dsm; + Time lastDragTime; + Window proxyWindow; + + XmModalData modals; + Cardinal numModals; + Cardinal maxModals; + XtPointer xmim_info; + + String bindingsString; + XmVKeyBindingRec *bindings; + XKeyEvent *lastKeyEvent; /* unused */ + unsigned char keycode_tag[XmKEYCODE_TAG_SIZE]; /* unused */ + + int shellCount; + XtPointer displayInfo; /* extension */ + XtPointer user_data; + int motif_version ; + XtEnum enable_warp ; + Cardinal num_bindings; + XtCallbackList dragStartCallback; + XtCallbackList noFontCallback; + XtCallbackList noRenditionCallback; + Boolean displayHasShapeExtension; + + XtEnum enable_btn1_transfer ; + Boolean enable_button_tab ; + Boolean enable_etched_in_menu; + Boolean default_button_emphasis; + Boolean enable_toggle_color; + Boolean enable_toggle_visual; + Boolean enable_drag_icon; + Boolean enable_unselectable_drag; + Boolean enable_thin_thickness; + Boolean enable_multi_key_bindings; +} XmDisplayPart, *XmDisplayPartPtr; + +typedef struct _XmDisplayInfo { + /* so much for information hiding */ + Cursor SashCursor; /* Sash.c */ + Widget destinationWidget; /* Dest.c */ + Cursor TearOffCursor; /* TearOff.c */ + XtPointer UniqueStamp; /* UniqueEvnt.c */ + XmExcludedParentPaneRec excParentPane;/* TearOff.c */ + unsigned short resetFocusFlag; /* TravAct.c */ + Boolean traversal_in_progress; /* Traversal.c */ +} XmDisplayInfo; + +typedef struct _XmDisplayRec{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TopLevelShellPart topLevel; + ApplicationShellPart application; + XmDisplayPart display; +} XmDisplayRec; + +externalref XmDisplayClassRec xmDisplayClassRec; + +externalref String _Xm_MOTIF_DRAG_AND_DROP_MESSAGE ; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDisplayP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/linux86/Xm/DragC.h b/libXm/linux86/Xm/DragC.h new file mode 100644 index 0000000..21990c7 --- /dev/null +++ b/libXm/linux86/Xm/DragC.h @@ -0,0 +1,259 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragC.h /main/13 1998/02/03 14:56:15 csn $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* $TOG: DragC.h /main/13 1998/02/03 14:56:15 csn $ */ + +#ifndef _XmDragController_h +#define _XmDragController_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* defines for the dragFinish completionStatus field */ + +#define XmHELP 2 + +/* + * Some global stuff that will go into Xm.h + */ +typedef unsigned int XmID; + +/*********************************************************************** + * + * DragContext + * + ***********************************************************************/ + +#ifndef XmIsDragContext +#define XmIsDragContext(w) XtIsSubclass(w,xmDragContextClass) +#endif /* XmIsDragContext */ + +#ifndef _XA_MOTIF_DROP +#define _XA_MOTIF_DROP "_MOTIF_DROP" +#define _XA_DRAG_FAILURE "_MOTIF_DRAG_FAILURE" +#define _XA_DRAG_SUCCESS "_MOTIF_DRAG_SUCCESS" +#endif /* _XA_MOTIF_DROP */ + + +/* enums used for the message_type in client messages */ + +enum{ XmTOP_LEVEL_ENTER, XmTOP_LEVEL_LEAVE, + XmDRAG_MOTION, XmDROP_SITE_ENTER, + XmDROP_SITE_LEAVE, XmDROP_START, + XmDROP_FINISH, XmDRAG_DROP_FINISH, + XmOPERATION_CHANGED + } ; + +/* enums for completionStatus */ +enum{ XmDROP, XmDROP_HELP, + XmDROP_CANCEL, XmDROP_INTERRUPT + } ; + +/* values for operation */ +#define XmDROP_NOOP 0L +#define XmDROP_MOVE (1L << 0) +#define XmDROP_COPY (1L << 1) +#define XmDROP_LINK (1L << 2) + +enum{ XmMOVE = XmDROP_MOVE, XmCOPY = XmDROP_COPY, + XmLINK = XmDROP_LINK, XmOTHER + } ; + +enum{ XmBLEND_ALL, XmBLEND_STATE_SOURCE, + XmBLEND_JUST_SOURCE, XmBLEND_NONE + } ; + +enum{ XmDROP_FAILURE, XmDROP_SUCCESS + } ; + + +/* enums used for the public callback reason */ + +enum{ XmCR_TOP_LEVEL_ENTER, XmCR_TOP_LEVEL_LEAVE, + XmCR_DRAG_MOTION, XmCR_DROP_SITE_ENTER, + XmCR_DROP_SITE_LEAVE, XmCR_DROP_START, + XmCR_DROP_FINISH, XmCR_DRAG_DROP_FINISH, + XmCR_OPERATION_CHANGED, + + _XmNUMBER_DND_CB_REASONS + } ; + + +/* Class record constants */ +typedef struct _XmDragContextClassRec *XmDragContextClass; +typedef struct _XmDragContextRec *XmDragContext; +externalref WidgetClass xmDragContextClass; + +typedef struct _XmAnyICCCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; +}XmAnyICCCallbackStruct, *XmAnyICCCallback; + +typedef struct _XmTopLevelEnterCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + Screen *screen; + /* + * the window field is different if this is an outbound or inbound + * callback. Outbound == reciever, Inbound == initiator. + */ + Window window; + Position x, y; + unsigned char dragProtocolStyle; + Atom iccHandle; +}XmTopLevelEnterCallbackStruct, *XmTopLevelEnterCallback; + +typedef struct _XmTopLevelLeaveCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + Screen *screen; + Window window; +}XmTopLevelLeaveCallbackStruct, *XmTopLevelLeaveCallback; + +/* + * this message is sent from the receiver to the initiator to + * indicate that the motion message with the associated timestamp has + * caused a drop-site to be entered + */ +typedef struct _XmDropSiteEnterCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + Position x, y; +}XmDropSiteEnterCallbackStruct, *XmDropSiteEnterCallback; + +/* + * this message is sent from the receiver to the initiator to + * indicate that the motion message with the associated timestamp has + * caused a drop-site to be left + */ +typedef struct _XmDropSiteLeaveCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; +}XmDropSiteLeaveCallbackStruct, *XmDropSiteLeaveCallback; + +typedef struct _XmDragMotionCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + Position x, y; +}XmDragMotionCallbackStruct, *XmDragMotionCallback; + +typedef struct _XmOperationChangedCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; +}XmOperationChangedCallbackStruct, *XmOperationChangedCallback; + +typedef struct _XmDropStartCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + unsigned char dropAction; + Position x, y; + Window window; + Atom iccHandle; +}XmDropStartCallbackStruct, *XmDropStartCallback; + +typedef struct _XmDropFinishCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + unsigned char dropAction; + unsigned char completionStatus; +}XmDropFinishCallbackStruct, *XmDropFinishCallback; + +typedef struct _XmDragDropFinishCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; +}XmDragDropFinishCallbackStruct, *XmDragDropFinishCallback; + + +/******** Public Function Declarations ********/ + +extern Widget XmDragStart( + Widget w, + XEvent *event, + ArgList args, + Cardinal numArgs) ; +extern void XmDragCancel( + Widget dragContext) ; +extern Boolean XmTargetsAreCompatible( + Display *dpy, + Atom *exportTargets, + Cardinal numExportTargets, + Atom *importTargets, + Cardinal numImportTargets) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _DragController_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DragCP.h b/libXm/linux86/Xm/DragCP.h new file mode 100644 index 0000000..ea0e7ce --- /dev/null +++ b/libXm/linux86/Xm/DragCP.h @@ -0,0 +1,200 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragCP.h /main/12 1996/10/17 16:45:27 cde-osf $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragCP_h +#define _XmDragCP_h + +#include +#include + +#include +#include + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** + * + * DragContext (RootWrapper) Widget Private Data + * + ***********************************************************************/ + +typedef void (*XmDragStartProc)( XmDragContext, Widget, XEvent *); +typedef void (*XmDragCancelProc)( XmDragContext) ; + + +typedef struct { + XmDragStartProc start; + XmDragCancelProc cancel; + XtPointer extension; +} XmDragContextClassPart; + +typedef struct _XmDragContextClassRec { + CoreClassPart core_class; + XmDragContextClassPart drag_class; +} XmDragContextClassRec; + +externalref XmDragContextClassRec xmDragContextClassRec; + +#define XtDragByPoll 0 +#define XtDragByEvent 1 + +typedef struct { + Window frame; + Window window; + Widget shell; + unsigned char flags; + unsigned char dragProtocolStyle; + int xOrigin, yOrigin; + unsigned int width, height; + unsigned int depth; + XtPointer iccInfo; +} XmDragReceiverInfoStruct, *XmDragReceiverInfo; + + +typedef union _XmConvertSelectionRec + { + XtConvertSelectionIncrProc sel_incr ; + XtConvertSelectionProc sel ; + } XmConvertSelectionRec ; + + +typedef struct _XmDragContextPart{ + /**** resources ****/ + + Atom *exportTargets; + Cardinal numExportTargets; + XmConvertSelectionRec convertProc; + XtPointer clientData; + XmDragIconObject sourceCursorIcon; + XmDragIconObject stateCursorIcon; + XmDragIconObject operationCursorIcon; + XmDragIconObject sourcePixmapIcon; + Pixel cursorBackground; + Pixel cursorForeground; + Pixel validCursorForeground; + Pixel invalidCursorForeground; + Pixel noneCursorForeground; + XtCallbackList dragMotionCallback; + XtCallbackList operationChangedCallback; + XtCallbackList siteEnterCallback; + XtCallbackList siteLeaveCallback; + XtCallbackList topLevelEnterCallback; + XtCallbackList topLevelLeaveCallback; + XtCallbackList dropStartCallback; + XtCallbackList dropFinishCallback; + XtCallbackList dragDropFinishCallback; + unsigned char dragOperations; + Boolean incremental; + unsigned char blendModel; + + /* private resources */ + Window srcWindow; + Time dragStartTime; + Atom iccHandle; + Widget sourceWidget; + Boolean sourceIsExternal; + + /**** instance data ****/ + Boolean topWindowsFetched; + unsigned char commType; + unsigned char animationType; + + unsigned char operation; + unsigned char operations; + unsigned int lastEventState; + unsigned char dragCompletionStatus; + unsigned char dragDropCompletionStatus; + Boolean forceIPC; + Boolean serverGrabbed; + Boolean useLocal; + Boolean inDropSite; + XtIntervalId dragTimerId; + + Time roundOffTime; + Time lastChangeTime; + Time crossingTime; + + Time dragFinishTime; + Time dropFinishTime; + + Atom dropSelection; + Widget srcShell; + Position startX, startY; + + XmID siteID; + + Screen *currScreen; + Window currWmRoot; + XmDragOverShellWidget curDragOver; + XmDragOverShellWidget origDragOver; + + XmDragReceiverInfoStruct *currReceiverInfo; + XmDragReceiverInfoStruct *rootReceiverInfo; + XmDragReceiverInfoStruct *receiverInfos; + Cardinal numReceiverInfos; + Cardinal maxReceiverInfos; + + unsigned char trackingMode; + unsigned char activeProtocolStyle; + unsigned char activeBlendModel; + Boolean dragDropCancelEffect; + long SaveEventMask; /* Save the current root eventMask so that D&D works for MWM */ +} XmDragContextPart; + + +typedef struct _XmDragContextRec{ + CorePart core; + XmDragContextPart drag; +} XmDragContextRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragCP_h */ diff --git a/libXm/linux86/Xm/DragDrop.h b/libXm/linux86/Xm/DragDrop.h new file mode 100644 index 0000000..794924a --- /dev/null +++ b/libXm/linux86/Xm/DragDrop.h @@ -0,0 +1,52 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragDrop.h /main/9 1998/02/23 10:33:54 cshi $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragDrop_h +#define _XmDragDrop_h + +#include +#include +#include +#include +#include +#include + +#endif /* _XmDragDrop_h */ diff --git a/libXm/linux86/Xm/DragIcon.h b/libXm/linux86/Xm/DragIcon.h new file mode 100644 index 0000000..a89de60 --- /dev/null +++ b/libXm/linux86/Xm/DragIcon.h @@ -0,0 +1,87 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragIcon.h /main/12 1997/03/04 14:19:39 dbl $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragIcon_h +#define _XmDragIcon_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmIsDragIconObjectClass(w) (XtIsSubclass(w, xmDragIconObjectClass)) + +enum { + XmATTACH_NORTH_WEST, + XmATTACH_NORTH, + XmATTACH_NORTH_EAST, + XmATTACH_EAST, + XmATTACH_SOUTH_EAST, + XmATTACH_SOUTH, + XmATTACH_SOUTH_WEST, + XmATTACH_WEST, + XmATTACH_CENTER, + XmATTACH_HOT +}; + +typedef struct _XmDragIconRec *XmDragIconObject; +typedef struct _XmDragIconClassRec *XmDragIconObjectClass; +externalref WidgetClass xmDragIconObjectClass; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDragIcon( + Widget parent, + String name, + ArgList argList, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragIcon_h */ diff --git a/libXm/linux86/Xm/DragIconP.h b/libXm/linux86/Xm/DragIconP.h new file mode 100644 index 0000000..f1a1766 --- /dev/null +++ b/libXm/linux86/Xm/DragIconP.h @@ -0,0 +1,98 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragIconP.h /main/11 1995/07/14 10:25:42 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDragIconP_h +#define _XmDragIconP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef void (*XmCloneVisualProc) (XmDragIconObject, Widget, Widget); +typedef void (*XmMovePixmapProc) (XmDragIconObject, + XmDragIconObject, + XmDragIconObject, +#if NeedWidePrototypes + int, int); +#else + Position, Position); +#endif /* NeedWidePrototypes */ + +typedef struct { + XtPointer extension; +} XmDragIconClassPart; + +typedef struct _XmDragIconClassRec{ + RectObjClassPart rectangle_class; + XmDragIconClassPart dragIcon_class; +} XmDragIconClassRec; + +typedef struct { + Cardinal depth; + Pixmap pixmap; + Dimension width, height; + Pixmap mask; + Position hot_x, hot_y; + Position offset_x, offset_y; + unsigned char attachment; + Boolean isDirty; + Region region; + Region restore_region; + Position x_offset, y_offset; +} XmDragIconPart, *XmDragIconPartPtr; + +externalref XmDragIconClassRec xmDragIconClassRec; + +typedef struct _XmDragIconRec{ + ObjectPart object; + RectObjPart rectangle; + XmDragIconPart drag; +} XmDragIconRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragIconP_h */ diff --git a/libXm/linux86/Xm/DragOverS.h b/libXm/linux86/Xm/DragOverS.h new file mode 100644 index 0000000..73f63a1 --- /dev/null +++ b/libXm/linux86/Xm/DragOverS.h @@ -0,0 +1,73 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragOverS.h /main/9 1995/07/14 10:26:11 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragOverS_h +#define _XmDragOverS_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** + * + * DragOverShell Widget + * + ***********************************************************************/ + +/* Class record constants */ + +typedef struct _XmDragOverShellRec *XmDragOverShellWidget; +typedef struct _XmDragOverShellClassRec *XmDragOverShellWidgetClass; + +externalref WidgetClass xmDragOverShellWidgetClass; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragOverS_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/linux86/Xm/DragOverSP.h b/libXm/linux86/Xm/DragOverSP.h new file mode 100644 index 0000000..1f8f55c --- /dev/null +++ b/libXm/linux86/Xm/DragOverSP.h @@ -0,0 +1,148 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragOverSP.h /main/9 1995/07/14 10:26:38 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragOverSP_h +#define _XmDragOverSP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define DOExpose(do) \ + ((XtClass(do))->core_class.expose) ((Widget)(do), NULL, NULL) + +/* + * DRAGOVER SHELL + */ +typedef struct +{ + XtPointer extension; +} XmDragOverShellClassPart; + +/* Full class record declaration */ + +typedef struct _XmDragOverShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + XmDragOverShellClassPart dragOver_shell_class; +} XmDragOverShellClassRec; + +externalref XmDragOverShellClassRec xmDragOverShellClassRec; + +typedef struct _XmBackingRec{ + Position x, y; + Pixmap pixmap; +}XmBackingRec, *XmBacking; + +typedef struct _XmDragOverBlendRec{ + XmDragIconObject sourceIcon; /* source icon */ + Position sourceX; /* source location in blend */ + Position sourceY; /* source location in blend */ + XmDragIconObject mixedIcon; /* blended icon */ + GC gc; /* appropriate depth */ +}XmDragOverBlendRec, *XmDragOverBlend; + +typedef struct _XmDragOverShellPart{ + Position hotX; /* current hotX */ + Position hotY; /* current hotY */ + unsigned char cursorState; /* current cursor state */ + unsigned char mode; + unsigned char activeMode; + + Position initialX; /* initial hotX */ + Position initialY; /* initial hotY */ + + XmDragIconObject stateIcon; /* current state icon */ + XmDragIconObject opIcon; /* current operation icon */ + + XmDragOverBlendRec cursorBlend; /* cursor blending */ + XmDragOverBlendRec rootBlend; /* pixmap or window blending */ + Pixel cursorForeground; + Pixel cursorBackground; + Cursor ncCursor; /* noncached cursor */ + Cursor activeCursor; /* the current cursor */ + + XmBackingRec backing; /* backing store for pixdrag */ + Pixmap tmpPix; /* temp storage for pixdrag */ + Pixmap tmpBit; /* temp storage for pixdrag */ + Boolean isVisible; /* shell is visible */ + + /* Added for ShapedWindow dragging */ + /* Resources */ + Boolean installColormap;/* Install the colormap */ + + /* locals */ + Boolean holePunched; /* true if hole is punched */ + + /* the following variables are used to make sure the correct colormap */ + /* is installed. colormapWidget is initially the parent widget, but */ + /* can be changed by calling DragShellColormapWidget. */ + Widget colormapWidget; /* The widget I'm dragging from */ + Widget colormapShell; /* It's shell, install colormap here */ + Boolean colormapOverride; /* shell is override rediirect */ + Colormap* savedColormaps; /* used with override redirect */ + int numSavedColormaps; +}XmDragOverShellPart; + +typedef struct _XmDragOverShellRec{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + XmDragOverShellPart drag; +} XmDragOverShellRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragOverSP_h */ diff --git a/libXm/linux86/Xm/DrawP.h b/libXm/linux86/Xm/DrawP.h new file mode 100644 index 0000000..e3d169e --- /dev/null +++ b/libXm/linux86/Xm/DrawP.h @@ -0,0 +1,279 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawP.h /main/10 1995/07/14 10:27:48 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDrawP_h +#define _XmDrawP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*---------------------------------------------------------------*/ +/* Functions used by Xm widgets for the Motif visual drawing */ +/*---------------------------------------------------------------*/ +/* All these functions have an Xlib draw like API: + a Display*, a Drawable, then GCs, Positions and Dimensions + and finally some specific paramaters */ + +/******** The Draw.c file has been split in several module for + a better link profile *********/ + +/*--------------------------------------------------------------- + XmeDrawShadows, + use in place of the 1.1 _XmDrawShadow and _XmDrawShadowType + with changes to the interface (widget vs window, offsets, new order) + and in the implementation (uses XSegments instead of XRectangles). + Both etched and regular shadows use now a single private routine + xmDrawSimpleShadow. + XmeDrawHighlight. + Implementation using FillRectangles, for solid highlight only. + _XmDrawHighlight. + Highlight using wide lines, so that dash mode works. + XmeClearBorder, + new name for _XmEraseShadow (_XmClearShadowType, which clear half a + shadow with a 'widget' API stays in Manager.c ) + XmClearBorder is only usable on window, not on drawable. + XmeDrawSeparator, + use in place of the duplicate redisplay method of both separator and + separatorgadget (highlight_thickness not used, must be incorporated + in the function call parameters). use xmDrawSimpleShadow. + Has 2 new separator types for dash shadowed lines. + XmeDrawDiamond, + new interface for _XmDrawDiamondButton (_XmDrawSquareButton is + really a simple draw shadow and will be in the widget file as is). + XmeDrawArrow, + same algorithm as before but in one function that re-uses the malloced + rects and does not store anything in the wigdet instance. + XmeDrawPolygonShadow, + new one that use the RegionDrawShadow API to implement an Xme call + XmeDrawCircle, + new one for toggle visual + XmeDrawIndicator + new one for toggle drawing +---------------------------------------------------------------------------*/ + + +/******** Private Function Declarations ********/ + +extern void XmeDrawShadows( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shad_thick, +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shad_thick, +#endif /* NeedWidePrototypes */ + unsigned int shad_type); +extern void XmeClearBorder( + Display *display, + Window w, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick); +#endif /* NeedWidePrototypes */ +extern void XmeDrawSeparator( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + GC separator_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + int margin, + unsigned int orientation, + unsigned int separator_type); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + Dimension margin, + unsigned char orientation, + unsigned char separator_type); +#endif /* NeedWidePrototypes */ +extern void XmeDrawDiamond( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + GC center_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + int margin); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + Dimension margin); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawCircle( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + GC center_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + int margin); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + Dimension margin); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawHighlight( + Display *display, + Drawable d, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int highlight_thick +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension highlight_thick +#endif /* NeedWidePrototypes */ + ); +extern void XmeDrawArrow( + Display *display, + Drawable d, + GC top_gc, + GC bot_gc, + GC cent_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + unsigned int direction); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + unsigned char direction); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawPolygonShadow( + Display *dpy, + Drawable d, + GC topGC, + GC bottomGC, + XPoint *points, + int n_points, +#if NeedWidePrototypes + int shadowThickness, + unsigned int shadowType); +#else + Dimension shadowThickness, + unsigned char shadowType); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawIndicator(Display *display, + Drawable d, + GC gc, +#if NeedWidePrototypes + int x, int y, + int width, int height, + int margin, + int type); +#else + Position x, Position y, + Dimension width, Dimension height, + Dimension margin, + XtEnum type); +#endif /* NeedWidePrototypes */ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawP_h */ diff --git a/libXm/linux86/Xm/DrawUtils.h b/libXm/linux86/Xm/DrawUtils.h new file mode 100644 index 0000000..0d5da84 --- /dev/null +++ b/libXm/linux86/Xm/DrawUtils.h @@ -0,0 +1,31 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ +#ifndef __XmDraw_h__ +#define __XmDraw_h__ + +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef enum {XmBEVEL_BOTTOM, XmBEVEL_TOP, XmBEVEL_BOTH} XmBevelOption; + +void XmDrawBevel( +#ifndef _NO_PROTO +Display*, Drawable, GC, GC, int, int, unsigned int, XmBevelOption +#endif +); + +#if defined(__cplusplus) +} +#endif + +#endif /* __XmDraw_h__ */ diff --git a/libXm/linux86/Xm/DrawingA.h b/libXm/linux86/Xm/DrawingA.h new file mode 100644 index 0000000..0ec5a5d --- /dev/null +++ b/libXm/linux86/Xm/DrawingA.h @@ -0,0 +1,81 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawingA.h /main/12 1995/07/14 10:28:21 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDrawingArea_h +#define _XmDrawingArea_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmDrawingAreaWidgetClass; + +typedef struct _XmDrawingAreaClassRec * XmDrawingAreaWidgetClass; +typedef struct _XmDrawingAreaRec * XmDrawingAreaWidget; + + +#ifndef XmIsDrawingArea +#define XmIsDrawingArea(w) (XtIsSubclass (w, xmDrawingAreaWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDrawingArea( + Widget p, + String name, + ArgList args, + Cardinal n) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawingArea_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DrawingAP.h b/libXm/linux86/Xm/DrawingAP.h new file mode 100644 index 0000000..82aeacb --- /dev/null +++ b/libXm/linux86/Xm/DrawingAP.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawingAP.h /main/13 1996/04/01 15:22:11 daniel $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDrawingAreaP_h +#define _XmDrawingAreaP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmRESIZE_SWINDOW 10 + + +/* Constraint part record for DrawingArea widget */ + +typedef struct _XmDrawingAreaConstraintPart +{ + char unused; +} XmDrawingAreaConstraintPart, * XmDrawingAreaConstraint; + +/* New fields for the DrawingArea widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmDrawingAreaClassPart; + + +/* Full class record declaration */ + +typedef struct _XmDrawingAreaClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmDrawingAreaClassPart drawing_area_class; +} XmDrawingAreaClassRec; + +externalref XmDrawingAreaClassRec xmDrawingAreaClassRec; + + +/* New fields for the DrawingArea widget record */ + +typedef struct +{ + Dimension margin_width; + Dimension margin_height; + + XtCallbackList resize_callback; + XtCallbackList expose_callback; + XtCallbackList input_callback; + + unsigned char resize_policy; + +#ifndef XM_PART_BC + XtCallbackList convert_callback; + XtCallbackList destination_callback; +#endif +} XmDrawingAreaPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmDrawingAreaRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmDrawingAreaPart drawing_area; +} XmDrawingAreaRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawingAreaP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DrawnB.h b/libXm/linux86/Xm/DrawnB.h new file mode 100644 index 0000000..61d0194 --- /dev/null +++ b/libXm/linux86/Xm/DrawnB.h @@ -0,0 +1,85 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawnB.h /main/12 1995/07/14 10:29:23 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/*********************************************************************** + * + * DrawnButton Widget + * + ***********************************************************************/ + +#ifndef _XmDButton_h +#define _XmDButton_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsDrawnButton +#define XmIsDrawnButton(w) XtIsSubclass(w, xmDrawnButtonWidgetClass) +#endif /* XmIsDrawnButton */ + +/* DrawnButon Widget */ + +externalref WidgetClass xmDrawnButtonWidgetClass; + +typedef struct _XmDrawnButtonClassRec *XmDrawnButtonWidgetClass; +typedef struct _XmDrawnButtonRec *XmDrawnButtonWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDrawnButton( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDButton_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DrawnBP.h b/libXm/linux86/Xm/DrawnBP.h new file mode 100644 index 0000000..4d1c201 --- /dev/null +++ b/libXm/linux86/Xm/DrawnBP.h @@ -0,0 +1,119 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawnBP.h /main/13 1995/07/14 10:29:40 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDButtonP_h +#define _XmDButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DrawnButton class structure */ + +typedef struct _XmDrawnButtonClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmDrawnButtonClassPart; + + +/* Full class record declaration for DrawnButton class */ + +typedef struct _XmDrawnButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmDrawnButtonClassPart drawnbutton_class; +} XmDrawnButtonClassRec; + + +externalref XmDrawnButtonClassRec xmDrawnButtonClassRec; + + +/* DrawnButton instance record */ + +typedef struct _XmDrawnButtonPart +{ + Boolean pushbutton_enabled; + unsigned char shadow_type; + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + XtCallbackList expose_callback; + XtCallbackList resize_callback; + + Boolean armed; + Dimension old_width; + Dimension old_height; + Dimension old_shadow_thickness; + Dimension old_highlight_thickness; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + Time armTimeStamp; + +} XmDrawnButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmDrawnButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmDrawnButtonPart drawnbutton; +} XmDrawnButtonRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DropSMgr.h b/libXm/linux86/Xm/DropSMgr.h new file mode 100644 index 0000000..29f5b99 --- /dev/null +++ b/libXm/linux86/Xm/DropSMgr.h @@ -0,0 +1,178 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DropSMgr.h /main/12 1997/03/04 14:20:59 dbl $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDropSMgr_h +#define _XmDropSMgr_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmCR_DROP_SITE_LEAVE_MESSAGE 1 +#define XmCR_DROP_SITE_ENTER_MESSAGE 2 +#define XmCR_DROP_SITE_MOTION_MESSAGE 3 +#define XmCR_DROP_MESSAGE 4 + +#define XmNO_DROP_SITE 1 +#define XmINVALID_DROP_SITE 2 +#define XmVALID_DROP_SITE 3 + +/* begin fix for CR 5754 */ +/* documented values are XmDROP_SITE_VALID and XmDROP_SITE_INVALID. + However, we can't just throw out the incorrect Xm[IN]VALID_DROP_SITE + now since people have probably started using them. Instead, we just + define the correct values using the incorrect ones. +*/ + +#define XmDROP_SITE_INVALID XmINVALID_DROP_SITE +#define XmDROP_SITE_VALID XmVALID_DROP_SITE + +/* end fix for CR 5754 */ + +enum { XmDRAG_UNDER_NONE, XmDRAG_UNDER_PIXMAP, + XmDRAG_UNDER_SHADOW_IN, XmDRAG_UNDER_SHADOW_OUT, + XmDRAG_UNDER_HIGHLIGHT }; + +enum { XmDROP_SITE_SIMPLE, XmDROP_SITE_COMPOSITE, + XmDROP_SITE_SIMPLE_CLIP_ONLY = 128, + XmDROP_SITE_COMPOSITE_CLIP_ONLY }; + +enum { XmABOVE, XmBELOW }; + +enum { XmDROP_SITE_ACTIVE, XmDROP_SITE_INACTIVE, XmDROP_SITE_IGNORE }; + +typedef struct _XmDragProcCallbackStruct { + int reason; + XEvent * event; + Time timeStamp; + Widget dragContext; + Position x, y; + unsigned char dropSiteStatus; + unsigned char operation; + unsigned char operations; + Boolean animate; +} XmDragProcCallbackStruct, * XmDragProcCallback; + +typedef struct _XmDropProcCallbackStruct { + int reason; + XEvent * event; + Time timeStamp; + Widget dragContext; + Position x, y; + unsigned char dropSiteStatus; + unsigned char operation; + unsigned char operations; + unsigned char dropAction; +} XmDropProcCallbackStruct, * XmDropProcCallback; + + +typedef struct _XmDropSiteVisualsRec { + Pixel background; + Pixel foreground; + Pixel topShadowColor; + Pixmap topShadowPixmap; + Pixel bottomShadowColor; + Pixmap bottomShadowPixmap; + Dimension shadowThickness; + Pixel highlightColor; + Pixmap highlightPixmap; + Dimension highlightThickness; + Dimension borderWidth; +} XmDropSiteVisualsRec, * XmDropSiteVisuals; + + +/* DropSite Widget */ + +externalref WidgetClass xmDropSiteManagerObjectClass; + +typedef struct _XmDropSiteManagerClassRec *XmDropSiteManagerObjectClass; +typedef struct _XmDropSiteManagerRec *XmDropSiteManagerObject; + +#ifndef XmIsDropSiteManager +#define XmIsDropSiteManager(w) XtIsSubclass((w), xmDropSiteManagerObjectClass) +#endif /* XmIsDropSite */ + +/******** Public Function Declarations ********/ + +extern void XmDropSiteRegister( + Widget widget, + ArgList args, + Cardinal argCount) ; +extern void XmDropSiteUnregister( + Widget widget) ; +extern Boolean XmDropSiteRegistered( + Widget widget) ; +extern void XmDropSiteStartUpdate( + Widget refWidget) ; +extern void XmDropSiteUpdate( + Widget enclosingWidget, + ArgList args, + Cardinal argCount) ; +extern void XmDropSiteEndUpdate( + Widget refWidget) ; +extern void XmDropSiteRetrieve( + Widget enclosingWidget, + ArgList args, + Cardinal argCount) ; +extern int XmDropSiteQueryStackingOrder( + Widget widget, + Widget *parent_rtn, + Widget **children_rtn, + Cardinal *num_children_rtn) ; +extern void XmDropSiteConfigureStackingOrder( + Widget widget, + Widget sibling, + Cardinal stack_mode) ; +extern XmDropSiteVisuals XmDropSiteGetActiveVisuals( + Widget widget) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropSMgr_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DropSMgrP.h b/libXm/linux86/Xm/DropSMgrP.h new file mode 100644 index 0000000..49f44ee --- /dev/null +++ b/libXm/linux86/Xm/DropSMgrP.h @@ -0,0 +1,291 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropSMgrP.h /main/11 1995/07/14 10:31:14 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropSMgrP_h +#define _XmDropSMgrP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*XmDSMCreateInfoProc) + (XmDropSiteManagerObject, Widget, ArgList, Cardinal); +typedef void (*XmDSMDestroyInfoProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMStartUpdateProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMRetrieveInfoProc) + (XmDropSiteManagerObject, Widget, ArgList, Cardinal); +typedef void (*XmDSMUpdateInfoProc) + (XmDropSiteManagerObject, Widget, ArgList, Cardinal); +typedef void (*XmDSMEndUpdateProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMUpdateProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMProcessMotionProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMProcessDropProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMOperationChangedProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMChangeRootProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMInsertInfoProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMRemoveInfoProc) + (XmDropSiteManagerObject, XtPointer); +typedef void (*XmDSMSyncTreeProc) + (XmDropSiteManagerObject, Widget); +typedef int (*XmDSMGetTreeFromDSMProc) + (XmDropSiteManagerObject, Widget, XtPointer); +typedef void (*XmDSMCreateDSInfoTable) + (XmDropSiteManagerObject); +typedef void (*XmDSMDestroyDSInfoTable) + (XmDropSiteManagerObject); +typedef void (*XmDSMRegisterInfoProc) + (XmDropSiteManagerObject, Widget, XtPointer); +typedef XtPointer (*XmDSMWidgetToInfoProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMUnregisterInfoProc) + (XmDropSiteManagerObject, XtPointer); + +typedef struct { + XmDSMCreateInfoProc createInfo; + XmDSMDestroyInfoProc destroyInfo; + XmDSMStartUpdateProc startUpdate; + XmDSMRetrieveInfoProc retrieveInfo; + XmDSMUpdateInfoProc updateInfo; + XmDSMEndUpdateProc endUpdate; + + /* Used by DragController Object */ + + XmDSMUpdateProc updateDSM; + + /* Used by update proc */ + + XmDSMProcessMotionProc processMotion; + XmDSMProcessDropProc processDrop; + XmDSMOperationChangedProc operationChanged; + XmDSMChangeRootProc changeRoot; + + /* Used to manage DropSites */ + + XmDSMInsertInfoProc insertInfo; + /* Need a get and a put function for update? */ + XmDSMRemoveInfoProc removeInfo; + + /* Used to manage the pre-register information */ + + XmDSMSyncTreeProc syncTree; + XmDSMGetTreeFromDSMProc getTreeFromDSM; + + /* Used to hash between widgets and info */ + + XmDSMCreateDSInfoTable createTable; + XmDSMDestroyDSInfoTable destroyTable; + XmDSMRegisterInfoProc registerInfo; + XmDSMWidgetToInfoProc widgetToInfo; + XmDSMUnregisterInfoProc unregisterInfo; + + XtPointer extension; +} XmDropSiteManagerClassPart; + +/* Full class record declaration for dropSite class */ + +typedef struct _XmDropSiteManagerClassRec{ + ObjectClassPart object_class; + XmDropSiteManagerClassPart dropManager_class; +} XmDropSiteManagerClassRec; + +externalref XmDropSiteManagerClassRec xmDropSiteManagerClassRec; + +/* Macros for calling methods */ + +#define DSMCreateInfo(dsm, widget, args, numArgs) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.createInfo) \ + ((dsm), (widget), (args), (numArgs)) + +#define DSMDestroyInfo(dsm, widget) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.destroyInfo) \ + ((dsm), (widget)) + +#define DSMStartUpdate(dsm, widget) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.startUpdate) \ + ((dsm), (widget)) + +#define DSMRetrieveInfo(dsm, widget, args, numArgs) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.retrieveInfo) \ + ((dsm), (widget), (args), (numArgs)) + +#define DSMUpdateInfo(dsm, widget, args, numArgs) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.updateInfo) \ + ((dsm), (widget), (args), (numArgs)) + +#define DSMEndUpdate(dsm, widget) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.endUpdate) \ + ((dsm), (widget)) + +#define DSMUpdate(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.updateDSM) \ + ((dsm), (clientData), (callData)) + +#define DSMProcessMotion(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.processMotion) \ + ((dsm), (clientData), (callData)) + +#define DSMProcessDrop(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.processDrop) \ + ((dsm),(clientData), (callData)) + +#define DSMOperationChanged(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.operationChanged) \ + ((dsm),(clientData), (callData)) + +#define DSMChangeRoot(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.changeRoot) \ + ((dsm), (clientData), (callData)) + +#define DSMInsertInfo(dsm, info, call_data) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.insertInfo) \ + ((dsm), (info), (call_data)) + +#define DSMRemoveInfo(dsm, info) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.removeInfo) \ + ((dsm), (info)) + +#define DSMSyncTree(dsm, shell) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.syncTree) \ + ((dsm), (shell)) + +#define DSMGetTreeFromDSM(dsm, shell, dataPtr) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.getTreeFromDSM) \ + ((dsm), (shell), (dataPtr)) + +#define DSMCreateTable(dsm) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.createTable) \ + ((dsm)) + +#define DSMDestroyTable(dsm) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.destroyTable) \ + ((dsm)) + +#define DSMRegisterInfo(dsm, widget, info) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.registerInfo) \ + ((dsm), (widget), (info)) + +#define DSMWidgetToInfo(dsm, widget) \ + (XtPointer) ((((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.widgetToInfo) \ + ((dsm), (widget))) + +#define DSMUnregisterInfo(dsm, info) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.unregisterInfo) \ + ((dsm), (info)) + +/* Internal update struct */ + +typedef struct __XmDropSiteUpdateInfoRec { + XmDropSiteManagerObject dsm; + Widget refWidget; + struct __XmDropSiteUpdateInfoRec *next; +} _XmDropSiteUpdateInfoRec, *_XmDropSiteUpdateInfo; + +/* DropSiteManager instance record */ + +typedef struct _XmDropSiteManagerPart{ + XtCallbackProc notifyProc; + XtCallbackProc treeUpdateProc; + XtPointer client_data; + XtPointer dragUnderData; + XtPointer curInfo; + Time curTime; + Position curX, curY, oldX, oldY; + unsigned char curDropSiteStatus; + Widget curDragContext; + Boolean curAnimate; + unsigned char curOperations; + unsigned char curOperation; + XmRegion curAncestorClipRegion; + XmRegion newAncestorClipRegion; + XtPointer dsTable; + XtPointer dsRoot; + Position rootX, rootY; + Dimension rootW, rootH; + XtPointer clipperList; + _XmDropSiteUpdateInfo updateInfo; + XtIntervalId updateTimeOutId; +} XmDropSiteManagerPart, *XmDropSiteManagerPartPtr; + +/* Full instance record declaration */ + +typedef struct _XmDropSiteManagerRec{ + ObjectPart object; + XmDropSiteManagerPart dropManager; +} XmDropSiteManagerRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropSMgrP_h */ diff --git a/libXm/linux86/Xm/DropTrans.h b/libXm/linux86/Xm/DropTrans.h new file mode 100644 index 0000000..af12e2f --- /dev/null +++ b/libXm/linux86/Xm/DropTrans.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropTrans.h /main/11 1995/07/14 10:31:45 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropTrans_h +#define _XmDropTrans_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmTRANSFER_FAILURE 0 +#define XmTRANSFER_SUCCESS 1 + +externalref WidgetClass xmDropTransferObjectClass; + +typedef struct _XmDropTransferClassRec * XmDropTransferObjectClass; +typedef struct _XmDropTransferRec * XmDropTransferObject; + +#ifndef XmIsDropTransfer +#define XmIsDropTransfer(w) \ + XtIsSubclass((w), xmDropTransferObjectClass) +#endif /* XmIsDropTransfer */ + +typedef struct _XmDropTransferEntryRec { + XtPointer client_data; + Atom target; +} XmDropTransferEntryRec, * XmDropTransferEntry; + +/******** Public Function Declarations ********/ + +extern Widget XmDropTransferStart( + Widget refWidget, + ArgList args, + Cardinal argCount) ; +extern void XmDropTransferAdd( + Widget widget, + XmDropTransferEntry transfers, + Cardinal num_transfers) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropTrans_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/DropTransP.h b/libXm/linux86/Xm/DropTransP.h new file mode 100644 index 0000000..150a6ef --- /dev/null +++ b/libXm/linux86/Xm/DropTransP.h @@ -0,0 +1,130 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropTransP.h /main/11 1995/07/14 10:31:56 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropTransferP_h +#define _XmDropTransferP_h + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* DropTransfer class structure */ + +typedef Widget (*XmDropTransferStartTransferProc)(Widget, + ArgList, Cardinal); +typedef void (*XmDropTransferAddTransferProc)(Widget, + XmDropTransferEntry, Cardinal); + +typedef struct _XmDropTransferClassPart +{ + XmDropTransferStartTransferProc start_drop_transfer; + XmDropTransferAddTransferProc add_drop_transfer; + XtPointer extension; +} XmDropTransferClassPart; + +/* Full class record declaration */ + +typedef struct _XmDropTransferClassRec +{ + ObjectClassPart object_class; + XmDropTransferClassPart dropTransfer_class; +} XmDropTransferClassRec; + +externalref XmDropTransferClassRec xmDropTransferClassRec; + + +typedef struct _XmDropTransferListRec { + XmDropTransferEntry transfer_list; + Cardinal num_transfers; +} XmDropTransferListRec, * XmDropTransferList; + + +/* The DropTransfer instance record */ + +typedef struct _XmDropTransferPart +{ + XmDropTransferEntry drop_transfers; + Cardinal num_drop_transfers; + Atom selection; + Widget dragContext; + Time timestamp; + Boolean incremental; + Window source_window; + unsigned int tag; + XtSelectionCallbackProc transfer_callback; + unsigned char transfer_status; + + Atom motif_drop_atom; + + XmDropTransferList drop_transfer_lists; + Cardinal num_drop_transfer_lists; + Cardinal cur_drop_transfer_list; + Cardinal cur_xfer; + Atom * cur_targets; + XtPointer * cur_client_data; +} XmDropTransferPart; + +/* Full instance record declaration */ + +typedef struct _XmDropTransferRec +{ + ObjectPart object; + XmDropTransferPart dropTransfer; +} XmDropTransferRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropTransferP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Ext.h b/libXm/linux86/Xm/Ext.h new file mode 100644 index 0000000..0dbb515 --- /dev/null +++ b/libXm/linux86/Xm/Ext.h @@ -0,0 +1,153 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmExt_h_ +#define _XmExt_h_ + + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + + + +typedef Widget (*XmWidgetFunc)(Widget); + + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +/* + * General name definitions. + */ + + +#define XmNbadActionParameters "badActionParameters" +#define XmNbadActionParametersMsg \ + "Bad parameters passed to an action routine of widget '%s'." + +#define XmNbadMotionParams "badMotionParams" +#define XmNbadMotionParamsMsg \ +"%s - Motion Action : must have exactly 1 parameter, either '%s' or '%s'." + +#define XmNbadRowPixmap "badRowPixmap" +#define XmNbadRowPixmapMsg "Extended List: Row pixmaps must have depth of 1." + +#define XmNbadXlfdFont "badXlfdFont" +#define XmNbadXlfdFontMsg \ +"%s: All Xlfd fonts must contain 14 hyphens\n'%s' is not valid." + +#define XmNcellNotEmpty "cellNotEmpty" +#define XmNcellNotEmptyMsg "XmIconBox: Cell %s is not empty" + +#define XmNcolorNameTooLong "colorNameTooLong" +#define XmNcolorNameTooLongMsg \ + "%s: Color name '%s' is too long, truncated to '%s'." + +#define XmNcontextSaveFailed "contextSaveFailed" +#define XmNcontextSaveFailedMsg "Internal Error: Could not save context data." + +#define XmNconversionFailure "conversionFailure" +#define XmNconversionFailureMsg \ + "%s: Unable to perform string to %s conversion." + +#define XmNcouldNotFindFamilyData "couldNotFindFamilyData" +#define XmNcouldNotFindFamilyDataMsg \ + "%s: Could not find family data for family '%s'." + +#define XmNforceGreaterThanZero "forceGreaterThanZero" +#define XmNforceGreaterThanZeroMsg \ +"%s : %s must be greater than zero being reset to one (1)." + +#define XmNinsertBeforeNotSibling "insertBeforeNotSibling" +#define XmNinsertBeforeNotSiblingMsg "XmHierarchy: InsertBefore Widget\ + is not a sibling of '%s'.\nInserting child at end of list." + +#define XmNnoComboShell "noComboShell" +#define XmNnoComboShellMsg \ + "Combination Box: When using a custom combo box a shell must be provided." + +#define XmNnoEmptyCells "noEmptyCells" +#define XmNnoEmptyCellsMsg "XmIconBox: Could not find any empty cells." + +#define XmNnoGadgetSupport "noGadgetSupport" +#define XmNnoGadgetSupportMsg "Widget %s does not support gadget children." + +#define XmNpixEditBadImageCreate "pixEditBadImageCreate" +#define XmNpixEditBadImageCreateMsg "Pixmap Editor: Can't allocate image data" + +#define XmNsameAsImageOrPix "sameAsImageOrPix" +#define XmNsameAsImageOrPixMsg \ +"%s : The bitmapMode resource can only be changed at the same time as the pixmap or image" + +#define XmNselfOrOutsideOfApplicationDrop "selfOrOutsideOfApplicationDrop" +#define XmNselfOrOutsideOfApplicationDropMsg \ + "Attempt to drop into illegal object." + +#define XmNstaticResource "staticResource" +#define XmNstaticResourceMsg \ + "The resource '%s' may not be changed dynamically." + +#define XmNtextVerifyFailed "textVerifyFailed" +#define XmNtextVerifyFailedMsg "Combination Box: Text item validation failed." + +#define XmNunexpectedEvent "unexpectedEvent" +#define XmNunexpectedEventMsg "%s: Unexpected Event Type %s.\n" + +#define XmNunparsableColor "unparsableColor" +#define XmNunparsableColorMsg \ + "%s: Could not parse the color name '%s'." + +#define XmNnodeParentIsSelf "nodeParentIsSelf" +#define XmNnodeParentIsSelfMsg \ + "%s: The node parent cannot be self referential." + +#define XmNstringGetFailed "stringGetFailed" +#define XmNstringGetFailedMsg "%s: XmGetStringLToR Failed." + +#define XmCICSWidgetSetError "ICSWidgetSetError" + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + + +void XmCopyISOLatin1Lowered(char *, char *); + +int XmCompareISOLatin1(char*, char*); + +Boolean XmCompareXtWidgetGeometryToWidget(XtWidgetGeometry*, Widget); + +Boolean XmCompareXtWidgetGeometry(XtWidgetGeometry*, XtWidgetGeometry*); + + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __Ext_h__ */ diff --git a/libXm/linux86/Xm/Ext18List.h b/libXm/linux86/Xm/Ext18List.h new file mode 100644 index 0000000..f19e940 --- /dev/null +++ b/libXm/linux86/Xm/Ext18List.h @@ -0,0 +1,267 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmExt18List_h +#define _XmExt18List_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmANY_COLUMN -1 + +enum { XmEXT18LIST_FOUND, XmEXT18LIST_NOT_FOUND }; + +typedef struct _XmExt18ListClassRec *XmExt18ListWidgetClass; +typedef struct _XmExt18ListRec *XmExt18ListWidget; + +typedef struct _Xm18RowInfo { + /* + * Used by the XmIList widget. + */ + XmString * values; /* The array of column strings */ + Pixmap pixmap; /* the mini-icon pixmaps. */ + Boolean selected; /* Is this row selected. */ + + /* + * Provided for the convience of the application programmer. + */ + short *sort_id; + XtPointer data; + + /* + * Private to the XmIList widget (do not modify these). + */ + short pix_width; /* width of the pixmap. */ + short pix_height; /* height of the pixmap. */ + short height; /* height of the row */ + Boolean old_sel_state; /* previous select state. */ + short pix_depth; /* height of the pixmap. */ +} Xm18RowInfo; + +typedef struct _Xm18ExtListCallbackStruct { + int reason; /* Why was callback called? */ + XEvent *event; /* The X Event associated with find button press... */ + String string; /* The search string used to do find */ + int column; /* The column index into row values */ + Xm18RowInfo *row; /* The row info structure of the matching row */ +} XmExt18ListCallbackStruct; + +typedef int (*Xm18SortFunction)( +#ifndef _NO_PROTO +short, Xm18RowInfo *, Xm18RowInfo * +#endif +); + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/* + * Function Name: XmExt18ListGetSelectedRows + * Description: Takes an Extended List and returns a NULL terminated array + * of pointers to selected rows from the internal list + * Arguments: w - the extended list widget + * Returns: Xm18RowInfo ** + */ + +Xm18RowInfo ** XmExt18ListGetSelectedRows( +#ifndef _NO_PROTO +Widget +#endif +); + +/* Function Name: XmCreateExtended18List + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateExtended18List( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +Widget XmCreateExt18List( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + + +/* Function Name: XmExt18ListUnselectAllItems + * Description: Unselects all rows + * Arguments: w - the ilist widget. + * Returns: none + */ +void +XmExt18ListUnselectAllItems( +#ifndef _NO_PROTO +Widget +#endif +); + +/* Function Name: XmExt18ListUnselectItem + * Description: Unselects the row passed in + * Arguments: w - the ilist widget. + * row_info - ptr to the row passed in + * Returns: none + */ +void +XmExt18ListUnselectItem( +#ifndef _NO_PROTO +Widget, Xm18RowInfo * +#endif +); + +/* Function Name: XmExt18ListToggleRow + * Description: Toggles the selection state of a specified row + * Arguments: w - the extended list widget + * Returns: none + */ +extern void +XmExt18ListToggleRow( +#ifndef _NO_PROTO +Widget, short +#endif +); + +/* Function Name: XmExt18ListSelectItems + * Description: Set selection state by matching column entries to XmString + * Arguments: w - the extended list widget + * item - XmString to use as selection key + * column - column number (0 - N) to match (or XmANY_COLUMN) + * notify - if True, call XmNsingleSelectionCallback + * Returns: none + */ +extern void +XmExt18ListSelectItems( +#ifndef _NO_PROTO +Widget, XmString, int, Boolean +#endif +); + +/* Function Name: XmExt18ListDeselectItems + * Description: Set selection state by matching column entries to XmString + * Arguments: w - the extended list widget + * item - XmString to use as selection key + * column - column number (0 - N) to match (or XmANY_COLUMN) + * Returns: none + */ +extern void +XmExt18ListDeselectItems( +#ifndef _NO_PROTO +Widget, XmString, int +#endif +); + +/* Function Name: XmExt18ListSelectAllItems + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * notify - if True, call XmNsingleSelectionCallback for each + * Returns: none + */ +extern void +XmExt18ListSelectAllItems( +#ifndef _NO_PROTO +Widget, Boolean +#endif +); + +/* Function Name: XmExt18ListSelectRow + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * row - the row to select + * notify - if True, call XmNsingleSelectionCallback + * Returns: none + */ +extern void +XmExt18ListSelectRow( +#ifndef _NO_PROTO +Widget, int, Boolean +#endif +); + +/* Function Name: XmExt18ListDeselectRow + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * row - the row to select + * Returns: none + */ +extern void +XmExt18ListDeselectRow( +#ifndef _NO_PROTO +Widget, int +#endif +); + +/* + * Function Name: XmExt18ListGetSelectedRowArray + * Description: Takes an Extended List and returns a NULL terminated array + * of pointers to selected rows from the internal list + * Arguments: w - the extended list widget + * num_rows - pointer to the number of rows + * Returns: array of integer (selected) row numbers + */ +extern int * +XmExt18ListGetSelectedRowArray( +#ifndef _NO_PROTO +Widget, int * +#endif +); + +/* Function Name: XmExt18ListMakeRowVisible + * Description: Shifts the visible extended list rows as desired + * Arguments: w - the extended list widget + * row - the row number wished to be made visible + * Returns: none + */ +void +XmExt18ListMakeRowVisible( +#ifndef _NO_PROTO +Widget, int +#endif +); + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern WidgetClass xmExt18ListWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmExt18List_h */ diff --git a/libXm/linux86/Xm/Ext18ListP.h b/libXm/linux86/Xm/Ext18ListP.h new file mode 100644 index 0000000..d3ac9c2 --- /dev/null +++ b/libXm/linux86/Xm/Ext18ListP.h @@ -0,0 +1,320 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmExt18ListP_h +#define _XmExt18ListP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include + +#include + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/* + * IList Stuff. + */ + +#define XmExt18List_DEFAULT_VISIBLE_COUNT 5 /* XmNvisibleItemCount */ + +/************************************************************ +* MACROS +*************************************************************/ + +#define XmExt18ListIndex (XmManagerIndex + 1) +#define XmI18ListIndex (XmPrimitiveIndex + 1) + +extern XmOffsetPtr XmExt18List_offsets; +extern XmOffsetPtr XmExt18ListC_offsets; + +extern XmOffsetPtr XmI18List_offsets; + +#define I18field(w,f,t) XmField(w, XmI18List_offsets, XmI18List, f, t) +#define XmI18List_selection_policy(w) I18field(w, selection_policy, unsigned char) +#define XmI18List_num_columns(w) I18field(w, num_columns, short) +#define XmI18List_column_titles(w) I18field(w, column_titles, XmString*) +#define XmI18List_num_rows(w) I18field(w, num_rows, short) +#define XmI18List_row_data(w) I18field(w, row_data, Xm18RowInfo*) +#define XmI18List_first_col_pixmaps(w) I18field(w, first_col_pixmaps, Boolean) +#define XmI18List_font_list(w) I18field(w, font_list, XmFontList) +#define XmI18List_v_bar(w) I18field(w, v_bar, Widget) +#define XmI18List_h_bar(w) I18field(w, h_bar, Widget) +#define XmI18List_first_row(w) I18field(w, first_row, short) +#define XmI18List_first_col(w) I18field(w, first_col, short) +#define XmI18List_double_click(w) I18field(w, double_click, XtCallbackList) +#define XmI18List_single_select(w) I18field(w, single_select, XtCallbackList) +#define XmI18List_selected_header(w) I18field(w, selected_header, short) +#define XmI18List_sort_functions(w) I18field(w, sort_functions, Xm18SortFunction*) +#define XmI18List_string_direction(w) I18field(w, string_direction, unsigned char) +#define XmI18List_alignment(w) I18field(w, alignment, unsigned char) +#define XmI18List_column_widths(w) I18field(w, column_widths, short*) +#define XmI18List_end(w) I18field(w, end, short) +#define XmI18List_anchor(w) I18field(w, anchor, short) +#define XmI18List_sep_y(w) I18field(w, sep_y, int) +#define XmI18List_title_row_height(w) I18field(w, title_row_height, short) +#define XmI18List_row_height(w) I18field(w, row_height, short) +#define XmI18List_gc(w) I18field(w, gc, GC) +#define XmI18List_rev_gc(w) I18field(w, rev_gc, GC) +#define XmI18List_stippled_gc(w) I18field(w, stippled_gc, GC) +#define XmI18List_stippled_rev_gc(w) I18field(w, stippled_rev_gc, GC) +#define XmI18List_inv_gc(w) I18field(w, inv_gc, GC) +#define XmI18List_state(w) I18field(w, state, unsigned short) +#define XmI18List_timeout(w) I18field(w, timeout, XtIntervalId) +#define XmI18List_working_row(w) I18field(w, working_row, short) +#define XmI18List_working_col(w) I18field(w, working_col, short ) +#define XmI18List_time(w) I18field(w, time, Time) +#define XmI18List_left_loc(w) I18field(w, left_loc, int) +#define XmI18List_search_column(w) I18field(w, search_column, short) +#define XmI18List_visible_rows(w) I18field(w, visible_rows, int) +#define XmI18List_new_visual_style(w) I18field(w, new_visual_style, Boolean) +#define XmI18List_entry_background_pixel(w) I18field(w, entry_background_pixel, Pixel) +#define XmI18List_entry_background_use(w) I18field(w, entry_background_use, Boolean) +#define XmI18List_entry_background_gc(w) I18field(w, entry_background_gc, GC) +#define XmI18List_entry_background_fill_gc(w) I18field(w, entry_background_fill_gc, GC) +#define XmI18List_entry_background_rev_gc(w) I18field(w, entry_background_rev_gc, GC) +#define XmI18List_entry_background_stippled_gc(w) I18field(w, entry_background_stippled_gc, GC) +#define XmI18List_entry_background_stippled_rev_gc(w) I18field(w, entry_background_stippled_rev_gc, GC) +#define XmI18List_entry_background_inv_gc(w) I18field(w, entry_background_inv_gc, GC) + +#define E18field(w,f,t) XmField(w, XmExt18List_offsets, XmExt18List, f, t) +#define XmExt18List_title(w) E18field(w, title, XmString) +#define XmExt18List_find_label(w) E18field(w, find_label, XmString) +#define XmExt18List_double_click(w) E18field(w, double_click, XtCallbackList) +#define XmExt18List_single_select(w) E18field(w, single_select, XtCallbackList) +#define XmExt18List_show_find(w) E18field(w, show_find, Boolean) +#define XmExt18List_title_wid(w) E18field(w, title_wid, Widget) +#define XmExt18List_frame(w) E18field(w, frame, Widget) +#define XmExt18List_ilist(w) E18field(w, ilist, Widget) +#define XmExt18List_v_bar(w) E18field(w, v_bar, Widget) +#define XmExt18List_h_bar(w) E18field(w, h_bar, Widget) +#define XmExt18List_find(w) E18field(w, find, Widget) +#define XmExt18List_find_text(w) E18field(w, find_text, Widget) +#define XmExt18List_last_search(w) E18field(w, last_search, String) +#define XmExt18List_item_found(w) E18field(w, item_found, XtCallbackList) +#define XmExt18List_not_found(w) E18field(w, not_found, XtCallbackList) +#define XmExt18List_visible_rows(w) E18field(w, visible_rows, int) +#define XmExt18List_title_string(w) E18field(w, title_string, XmString) + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/* + * IList widget definitions. + */ + +typedef struct _I18ListClassPart { + XtPointer extension; /* Just in case we need it later. */ +} I18ListClassPart; + +typedef struct _XmI18ListClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive; + I18ListClassPart ilist_class; +} XmI18ListClassRec; + +typedef struct _XmI18ListPart { + /* + * Resources + */ + + unsigned char selection_policy; /* selection mode - kat 12-28-90 */ + short num_columns; /* number of columns in the list. */ + XmString * column_titles; /* title for each column. */ + short num_rows; /* number of rows in the list. */ + Xm18RowInfo * row_data; /* Data to put into each column. */ + Boolean first_col_pixmaps; /* Should we put mini_icons in the first + column of each entry? */ + XmFontList font_list; /* This widget's font list. */ + + Widget v_bar, h_bar; /* Scrollbars that may be used + to scroll this widget. */ + + short first_row; /* which row is at the top of the display. */ + short first_col; /* which column is at the far left. */ + + XtCallbackList double_click; /* The double click callback list. */ + XtCallbackList single_select; /*The single click callback list. */ + + short selected_header; /* The currently selected header. */ + + Xm18SortFunction *sort_functions; /* The client supplied sort functions */ + + unsigned char string_direction; + unsigned char alignment; + + /* + * Private State + */ + + short * column_widths; /* Width of each column. */ + short end; /* The non-anchor end point. */ + short anchor; /* The anchor point for the extended + selection. */ + + int sep_y; /*location of the top of the separator line.*/ + + short title_row_height; /* height of title row */ + short row_height; /* height of all other data rows */ + + GC gc; /* The graphics context for normal text. */ + GC rev_gc; /* The graphics context for inverted text. */ + GC stippled_gc; /* The graphics context for normal text. */ + GC stippled_rev_gc; /* The graphics context for inverted text. */ + GC inv_gc; /* The graphics context for inverting areas. */ + + unsigned short state; /* The state of this widget. */ + XtIntervalId timeout; /* The mulit - click timout. */ + + short working_row, working_col; /* A Working row and column. */ + Time time; /*The server time of the last button click. */ + + int left_loc; /* left margin in pixels. */ + + short search_column; /* added for I18List Find support */ + + int visible_rows; /* Visible item (row) count */ + + Boolean new_visual_style; + + Pixel entry_background_pixel; + Boolean entry_background_use; + GC entry_background_gc; + GC entry_background_fill_gc; + GC entry_background_stippled_gc; + GC entry_background_stippled_rev_gc; + GC entry_background_inv_gc; + GC entry_background_rev_gc; + +} XmI18ListPart; + +typedef struct _XmI18ListRec { + CorePart core; + XmPrimitivePart primitive; + XmI18ListPart ilist; +} XmI18ListRec; + +/* + * Extended List. + */ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmExt18ListClassPart; + +typedef struct _XmExt18ListClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmExt18ListClassPart ext_list_class; +} XmExt18ListClassRec; + +typedef struct { + /* resources */ + + XmString title; /* Title for the list (backwards compatible) */ + XmString find_label; /* label for Find button */ + + XtCallbackList double_click; /* The double click callbacks. */ + XtCallbackList single_select; /* The single click callbacks. -kat */ + + Boolean show_find; /* whether to display the Find button and textF */ + + /* private state */ + + Widget title_wid; /* The list title widget. */ + Widget frame; /* Frame to display list into. */ + Widget ilist; /* The internal list widget. */ + Widget v_bar, h_bar; /* The scrollbars. */ + Widget find, find_text; /* Widgets used for a find. */ + + String last_search; + + XtCallbackList item_found; /* Called when find succeeds */ + XtCallbackList not_found; /* Called when find doesn't succeed */ + + int visible_rows; /* visible items (mirrored in XmI18ListPart) */ + XmString title_string; /* (preferred use) Title for the list */ + +} XmExt18ListPart; + +typedef struct _XmExt18ListRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmExt18ListPart ext_list; +} XmExt18ListRec; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +Xm18RowInfo ** XmI18ListGetSelectedRows( +#ifndef _NO_PROTO +Widget +#endif +); + +void +Xm18IListUnselectItem( +#ifndef _NO_PROTO +Widget , Xm18RowInfo * +#endif +); + +void +Xm18IListUnselectAllItems( +#ifndef _NO_PROTO +Widget +#endif +); + +void +XmI18ListToggleRow( +#ifndef _NO_PROTO +Widget , short +#endif +); + +typedef struct _XmI18ListClassRec *XmI18ListWidgetClass; +typedef struct _XmI18ListRec *XmI18ListWidget; + +extern XmExt18ListClassRec xmExt18ListClassRec; + +extern XmI18ListClassRec xiI18ListClassRec; +extern WidgetClass xmI18ListWidgetClass; + +#if defined(__cplusplus) +} +#endif + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmExt18ListP_h */ diff --git a/libXm/linux86/Xm/ExtObjectP.h b/libXm/linux86/Xm/ExtObjectP.h new file mode 100644 index 0000000..fc157e6 --- /dev/null +++ b/libXm/linux86/Xm/ExtObjectP.h @@ -0,0 +1,102 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* $XConsortium: ExtObjectP.h /main/11 1995/07/14 10:32:48 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmExtObjectP_h +#define _XmExtObjectP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + XmCACHE_EXTENSION = 1, XmDESKTOP_EXTENSION, + XmSHELL_EXTENSION, XmPROTOCOL_EXTENSION, + XmDEFAULT_EXTENSION +}; + +#ifndef XmIsExtObject +#define XmIsExtObject(w) XtIsSubclass(w, xmExtObjectClass) +#endif /* XmIsExtObject */ + +#define XmLOGICAL_PARENT_RESOURCE (0x80 << sizeof(Cardinal)) + +/* Class record constants */ + +typedef struct _XmExtRec *XmExtObject; +typedef struct _XmExtClassRec *XmExtObjectClass; + +externalref WidgetClass xmExtObjectClass; + +/* Class Extension definitions */ + +typedef struct _XmExtClassPart { + XmSyntheticResource *syn_resources; + int num_syn_resources; + XtPointer extension; +} XmExtClassPart, *XmExtClassPartPtr; + +typedef struct _XmExtClassRec { + ObjectClassPart object_class; + XmExtClassPart ext_class; +} XmExtClassRec; + +typedef struct { + Widget logicalParent; + unsigned char extensionType; +} XmExtPart, *XmExtPartPtr; + +externalref XmExtClassRec xmExtClassRec; + +typedef struct _XmExtRec { + ObjectPart object; + XmExtPart ext; +} XmExtRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmExtObjectP_h */ diff --git a/libXm/linux86/Xm/ExtP.h b/libXm/linux86/Xm/ExtP.h new file mode 100644 index 0000000..73f4144 --- /dev/null +++ b/libXm/linux86/Xm/ExtP.h @@ -0,0 +1,124 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmExtP_h_ +#define _XmExtP_h_ + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#if defined(hpux) && OS_MAJOR_VERSION < 10 +#include +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef void (*XmVoidFunc)(void); +typedef int (*XmIntFunc)(void); +typedef unsigned int (*XmUnsignedIntFunc)(void); + +extern String xm_std_filter[], xm_std_constraint_filter[]; + +/************************************************************ +* MACROS +*************************************************************/ + +#define streq(a, b) (((a) != NULL) && ((b) != NULL) && (strcmp((a), (b)) == 0)) + +#define ForAllChildren(w, childP) \ + for ( (childP) = (w)->composite.children ; \ + (childP) < (w)->composite.children + (w)->composite.num_children ; \ + (childP)++ ) + +/* + * Math Stuff + * + * Some Systems define MIN and MAX so I have to undef them before I make + * my own definitions. + */ + +#undef MIN +#undef MAX +#undef ABS + +#define MIN(a,b) (((int)(a) < (int)(b)) ? (a) : (b)) +#define MAX(a,b) (((int)(a) > (int)(b)) ? (a) : (b)) +#define ABS(a) (((int)(a) >= 0) ? (a) : -(a)) + +#define ASSIGN_MAX(a, b) ((a) = ((int)(a) > (int)(b) ? (a) : (b))) +#define ASSIGN_MIN(a, b) ((a) = ((int)(a) < (int)(b) ? (a) : (b))) + +#define XM_ICON_BUTTON_CLASS_NAME ("XmIconButton") +#define XM_EXT_LIST_CLASS_NAME ("XmExtendedList") +#define XM_ILIST_CLASS_NAME ("XmIList") +#define XM_EXT_18_LIST_CLASS_NAME ("XmExtended18List") +#define XM_I18LIST_CLASS_NAME ("XmI18List") + + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + + + +void XmResolveAllPartOffsets64(WidgetClass, XmOffsetPtr*, XmOffsetPtr*); +void _XmMoveWidget(Widget, Position, Position); +void _XmResizeWidget(Widget, Dimension, Dimension, Dimension); +void _XmConfigureWidget(Widget, Position, Position, + Dimension, Dimension, Dimension); + +XtGeometryResult _XmRequestNewSize(Widget, Boolean, Dimension, + Dimension, + Dimension *, Dimension *); + +XtGeometryResult _XmHWQuery(Widget, XtWidgetGeometry*, XtWidgetGeometry *); + +void _XmGetFocus(Widget, XEvent *, String *, Cardinal *); + +void _XmFilterArgs(ArgList, Cardinal, String *, + ArgList *, Cardinal *); + +void _XmSetValuesOnChildren(Widget, ArgList, Cardinal); + +Boolean _XmGadgetWarning(Widget); + +String _XmGetMBStringFromXmString(XmString); + +/* + * Context Managment Routines. + */ + +void _XmSetContextData(Widget, XContext, XtPointer); +void _XmDeleteContextData(Widget, XContext); +Boolean _XmGetContextData(Widget, XContext, XtPointer *); +Boolean _XmUtilIsSubclassByNameQ(Widget, XrmQuark); +void _XmInitialIzeConverters(Widget); + +void _XmExtHighlightBorder(Widget); +void _XmExtUnhighlightBorder(Widget); + + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/libXm/linux86/Xm/FileSB.h b/libXm/linux86/Xm/FileSB.h new file mode 100644 index 0000000..e0cc235 --- /dev/null +++ b/libXm/linux86/Xm/FileSB.h @@ -0,0 +1,106 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: FileSB.h /main/12 1995/07/14 10:33:32 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFSelect_h +#define _XmFSelect_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Type definitions for FileSB resources: */ + + +typedef void (*XmQualifyProc)( Widget, XtPointer, XtPointer) ; +typedef void (*XmSearchProc)( Widget, XtPointer) ; + + + +/* Class record constants */ + +externalref WidgetClass xmFileSelectionBoxWidgetClass; + +typedef struct _XmFileSelectionBoxClassRec * XmFileSelectionBoxWidgetClass; +typedef struct _XmFileSelectionBoxRec * XmFileSelectionBoxWidget; + + +#ifndef XmIsFileSelectionBox +#define XmIsFileSelectionBox(w) (XtIsSubclass((w),xmFileSelectionBoxWidgetClass)) +#endif + + +/******** Public Function Declarations ********/ + +extern Widget XmFileSelectionBoxGetChild( + Widget fs, +#if NeedWidePrototypes + unsigned int which) ; +#else + unsigned char which) ; +#endif /* NeedWidePrototypes */ +extern void XmFileSelectionDoSearch( + Widget fs, + XmString dirmask) ; +extern Widget XmCreateFileSelectionBox( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmCreateFileSelectionDialog( + Widget ds_p, + String name, + ArgList fsb_args, + Cardinal fsb_n) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFSelect_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/FileSBP.h b/libXm/linux86/Xm/FileSBP.h new file mode 100644 index 0000000..7b870be --- /dev/null +++ b/libXm/linux86/Xm/FileSBP.h @@ -0,0 +1,217 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: FileSBP.h /main/13 1995/09/19 23:02:34 cde-sun $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFSelectP_h +#define _XmFSelectP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Defines for use in allocation geometry matrix. */ + +#define XmFSB_MAX_WIDGETS_VERT 12 + +/* Bit locations for the state_flags bit field. +*/ +#define XmFS_NO_MATCH (1 << 0) +#define XmFS_IN_FILE_SEARCH (1 << 1) +#define XmFS_DIR_SEARCH_PROC (1 << 2) + +/* Constraint part record for FileSelectionBox widget */ + +typedef struct _XmFileSelectionBoxConstraintPart +{ + char unused; +} XmFileSelectionBoxConstraintPart, * XmFileSelectionBoxConstraint; + +/* New fields for the FileSelectionBox widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmFileSelectionBoxClassPart; + + +/* Full class record declaration */ + +typedef struct _XmFileSelectionBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmSelectionBoxClassPart selection_box_class; + XmFileSelectionBoxClassPart file_selection_box_class; +} XmFileSelectionBoxClassRec; + +externalref XmFileSelectionBoxClassRec xmFileSelectionBoxClassRec; + + +/* New fields for the FileSelectionBox widget record */ + +typedef struct +{ + XmString directory; /* directory specification */ + XmString pattern; /* file search pattern */ + Widget dir_list_label; /* directory list Label */ + XmString dir_list_label_string;/* directory list label text */ + Widget dir_list; /* directory List */ + XmString * dir_list_items; /* items in directory List */ + int dir_list_item_count;/* number of items in directory List */ + int dir_list_selected_item_position; + Widget filter_label; /* file search filter label */ + XmString filter_label_string;/* filter label text */ + Widget filter_text; /* filter text entry field */ + XmString dir_mask; /* string in filter text entry field */ + XmString no_match_string; /* string in list when no file match */ + XmQualifyProc qualify_search_data_proc; /* directory and mask routine */ + XmSearchProc dir_search_proc; /* change directory routine */ + XmSearchProc file_search_proc; /* file search routine */ + unsigned char file_type_mask; /* mask for type of files in file list */ + Boolean list_updated; /* flag to indicate file list update */ + Boolean directory_valid ; /* flag to indicate valid new directory*/ + unsigned char state_flags ; /* internal flags to indicate state. */ + + XtEnum path_mode ; + XtEnum file_filter_style ; + Widget dir_text ; + Widget dir_text_label ; + XmString dir_text_label_string ; + time_t prev_dir_modtime; +} XmFileSelectionBoxPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmFileSelectionBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmSelectionBoxPart selection_box; + XmFileSelectionBoxPart file_selection_box; +} XmFileSelectionBoxRec; + + +/* Access macros */ + +#define FS_Directory( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.directory) +#define FS_DirMask( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_mask) +#define FS_DirListLabel( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_label) +#define FS_DirListLabelString( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_label_string) +#define FS_DirList( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list) +#define FS_DirListItems( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_items) +#define FS_DirListItemCount( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_item_count) +#define FS_FilterLabel( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.filter_label) +#define FS_FilterLabelString( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.filter_label_string) +#define FS_FilterText( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.filter_text) +#define FS_Pattern( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.pattern) +#define FS_NoMatchString( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.no_match_string) +#define FS_QualifySearchDataProc( w) (((XmFileSelectionBoxWidget) \ + (w))->file_selection_box.qualify_search_data_proc) +#define FS_DirSearchProc( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_search_proc) +#define FS_FileSearchProc( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.file_search_proc) +#define FS_RealDefaultButton( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.real_default_button) +#define FS_FileTypeMask( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.file_type_mask) +#define FS_ListUpdated( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.list_updated) +#define FS_DirectoryValid( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.directory_valid) +#define FS_StateFlags( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.state_flags) +#define FS_DirListSelectedItemPosition( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_list_selected_item_position) + +#define FS_PathMode( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.path_mode) +#define FS_FileFilterStyle( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.file_filter_style) +#define FS_DirText( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_text) +#define FS_DirTextLabel( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_text_label) +#define FS_DirTextLabelString( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_text_label_string) +#define FS_PrevDirModTime( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.prev_dir_modtime) + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFSelectP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/FontS.h b/libXm/linux86/Xm/FontS.h new file mode 100644 index 0000000..82e71d1 --- /dev/null +++ b/libXm/linux86/Xm/FontS.h @@ -0,0 +1,70 @@ +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmFontSelector_h +#define _XmFontSelector_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +typedef struct _XmFontSelectorClassRec *XmFontSelectorWidgetClass; +typedef struct _XmFontSelectorRec *XmFontSelectorWidget; + +/************************************************************ + * MACROS + ************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +/* Function Name: XmCreateFontSelector + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateFontSelector( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmFontSelectorWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmFontSelector_h - DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/FontSP.h b/libXm/linux86/Xm/FontSP.h new file mode 100644 index 0000000..0bb2c87 --- /dev/null +++ b/libXm/linux86/Xm/FontSP.h @@ -0,0 +1,301 @@ +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmFontSelectorP_h +#define _XmFontSelectorP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + *************************************************************/ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmFontSelectorIndex (XmPanedIndex + 1) + +extern XmOffsetPtr XmFontS_offsets; +extern XmOffsetPtr XmFontSC_offsets; + +#define FontSField(w,f,t) XmField(w, XmFontS_offsets, XmFontSelector, f, t) +#define XmFontS_current_font(w) FontSField(w, current_font, String) +#define XmFontS_show_font_name(w) FontSField(w, show_font_name, Boolean) +#define XmFontS_iso_fonts_only(w) FontSField(w, iso_fonts_only, Boolean) +#define XmFontS_use_scaling(w) FontSField(w, use_scaling, Boolean) +#define XmFontS_text_rows(w) FontSField(w, text_rows, Dimension) +#define XmFontS_font_changed_callback(w) FontSField(w, font_changed_callback, XtCallbackList) +#define XmFontS_strings(w) FontSField(w, strings, XmFontSelStringInfo) +#define XmFontS_xlfd_mode(w) FontSField(w, xlfd_mode, Boolean) +#define XmFontS_font_info(w) FontSField(w, font_info, FontInfo*) +#define XmFontS_text(w) FontSField(w, text, Widget) +#define XmFontS_name_label(w) FontSField(w, name_label, Widget) +#define XmFontS_middle_pane(w) FontSField(w, middle_pane, Widget) +#define XmFontS_family_box(w) FontSField(w, family_box, Widget) +#define XmFontS_size_box(w) FontSField(w, size_box, Widget) +#define XmFontS_bold_toggle(w) FontSField(w, bold_toggle, Widget) +#define XmFontS_italic_toggle(w) FontSField(w, italic_toggle, Widget) +#define XmFontS_xlfd_toggle(w) FontSField(w, xlfd_toggle, Widget) +#define XmFontS_other_toggle(w) FontSField(w, other_toggle, Widget) +#define XmFontS_show_font_toggle(w) FontSField(w, show_font_toggle, Widget) +#define XmFontS_use_scaling_toggle(w) FontSField(w, use_scaling_toggle, Widget) +#define XmFontS_option_menu(w) FontSField(w, option_menu, Widget) +#define XmFontS_encoding_menu_shell(w) FontSField(w, encoding_menu_shell, Widget) +#define XmFontS_xlfd_only(w) FontSField(w, xlfd_only, WidgetList) +#define XmFontS_xlfd_sensitive(w) FontSField(w, xlfd_sensitive, WidgetList) +#define XmFontS_num_xlfd_only(w) FontSField(w, num_xlfd_only, char) +#define XmFontS_num_xlfd_sensitive(w) FontSField(w, num_xlfd_sensitive, char) +#define XmFontS_alloc_xlfd_only(w) FontSField(w, alloc_xlfd_only, char) +#define XmFontS_alloc_xlfd_sensitive(w) FontSField(w, alloc_xlfd_sensitive, char) +#define XmFontS_user_state(w) FontSField(w, user_state, Flag) +#define XmFontS_current_text(w) FontSField(w, current_text, String) +#define XmFontS_get_font(w) FontSField(w, get_font, String) +#define XmFontS_encoding(w) FontSField(w, encoding, String) +#define XmFontS_old_fontlist(w) FontSField(w, old_fontlist, XmFontList) +#define XmFontS_old_fontdata(w) FontSField(w, old_fontdata, XFontStruct*) +#define XmFontS_dpi75(w) FontSField(w, dpi75, Widget) +#define XmFontS_dpi100(w) FontSField(w, dpi100, Widget) +#define XmFontS_dpiAny(w) FontSField(w, dpiAny, Widget) +#define XmFontS_proportional(w) FontSField(w, proportional, Widget) +#define XmFontS_monospace(w) FontSField(w, monospace, Widget) +#define XmFontS_any_spacing(w) FontSField(w, any_spacing, Widget) + + +#define SAMPLE_TEXT(fsw) (XmFontS_strings((fsw)).sample_text) +#define ANY_STRING(fsw) (XmFontS_strings((fsw)).any) +#define LOWER_ANY_STRING(fsw) (XmFontS_strings((fsw)).lower_any) +#define FAMILY_STRING(fsw) (XmFontS_strings((fsw)).family) +#define SIZE_STRING(fsw) (XmFontS_strings((fsw)).size) +#define BOLD_STRING(fsw) (XmFontS_strings((fsw)).bold) +#define ITALIC_STRING(fsw) (XmFontS_strings((fsw)).italic) + +#define OPTION_STRING(fsw) (XmFontS_strings((fsw)).option) + +#define BOTH_STRING(fsw) (XmFontS_strings((fsw)).both) +#define MONO_SPACE_STRING(fsw) (XmFontS_strings((fsw)).mono_space) +#define PROPORTIONAL_STRING(fsw)(XmFontS_strings((fsw)).prop_space) + +#define XLFD_STRING(fsw) (XmFontS_strings((fsw)).xlfd) +#define OTHER_FONT_STRING(fsw) (XmFontS_strings((fsw)).other_font) + +#define DPI75_STRING(fsw) (XmFontS_strings((fsw)).dpi_75) +#define DPI100_STRING(fsw) (XmFontS_strings((fsw)).dpi_100) + +#define SCALING_STRING(fsw) (XmFontS_strings((fsw)).scaling) +#define SHOW_NAME_STRING(fsw) (XmFontS_strings((fsw)).show_name) + +#define ENCODING_ONLY_STRING(fsw) (XmFontS_strings((fsw)).encoding_only) +#define ENCODING_LIST(fsw) (XmFontS_strings((fsw)).encoding_list) + +#define ENCODING_STRING(fsw) XmFontS_encoding((fsw)) + +/* this structure provides the table for font selection */ + +#define WEIGHT_LEN 15 +#define SLANT_LEN 3 +#define SPACING_LEN 3 + +typedef unsigned char Flag; +typedef unsigned int LongFlag; + +#define FIXED ((Flag) 1 << 0) +#define BOLD ((Flag) 1 << 1) +#define ITALIC ((Flag) 1 << 2) +#define PROPORTIONAL ((Flag) 1 << 3) +#define SCALED_75 ((Flag) 1 << 4) +#define SCALED_100 ((Flag) 1 << 5) +#define DPI_75 ((Flag) 1 << 6) +#define DPI_100 ((Flag) 1 << 7) + +/* + * This allows me to reuse flag bits in the user_state since + * ISO is never set in the user state. + */ + +#define USER_PROPORTIONAL PROPORTIONAL +#define USER_FIXED FIXED + +typedef struct _FontData { + XrmQuark familyq; /* quarkified family name. */ + XrmQuark weightq; /* quarkified weight name. */ + char slant[SLANT_LEN + 1]; + char spacing[SPACING_LEN + 1]; + short resolution_x, resolution_y; + short point_size; + XrmQuark encoding; + Flag state; +} FontData; + +typedef struct FamilyInfo { + XrmQuark nameq; /* quarkified family name. */ + XrmQuark bold_nameq, medium_nameq; + XrmQuark italic_nameq, upright_nameq; + char fixed_spacing[SPACING_LEN + 1]; + LongFlag sizes_75, sizes_100; + Flag state; + XrmQuark *encodings; + int encoding_alloc; +} FamilyInfo; + +typedef struct FontInfo { + FontData *current_font; + String *others; + FamilyInfo *family_info; + short num_others; + short num_families; + short resolution; +} FontInfo; + +typedef struct _XmFontSelStringInfo { + XmString sample_text; + XmString any, lower_any; + XmString family, size; + XmString bold, italic, option, both; + XmString mono_space, prop_space; + XmString xlfd, other_font; + XmString dpi_75, dpi_100; + XmString scaling, encoding_only, show_name; + + String *encoding_list; +} XmFontSelStringInfo; + +/************************************************************ + * TYPEDEFS AND DEFINES + *************************************************************/ + +typedef struct _FontSelectorClassPart +{ + XtPointer extension; /* For later use. */ +} FontSelectorClassPart; + +typedef struct _XmFontSelectorClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmPanedClassPart paned_class; + FontSelectorClassPart font_selector_class; +} XmFontSelectorClassRec; + +typedef struct _XmFontSelectorPart +{ + /* Resources */ + String current_font; /* The currently shown font. */ + + Boolean show_font_name; /* show the font name window? */ + Boolean iso_fonts_only; /* show only iso fonts? */ + Boolean use_scaling; /* use font scaling? */ + + Dimension text_rows; /* The number of text rows to display*/ + + XtCallbackList font_changed_callback; /* when font changes. */ + + XmFontSelStringInfo strings; /* The font selectors external strings. */ + + /* Private Data */ + + Boolean xlfd_mode; /* True if we are int xlfd mode. */ + + FontInfo *font_info; /* The font information. */ + Widget text, name_label; /* Text and label widget below top area. */ + Widget middle_pane; /* The option info middle pane. */ + Widget family_box; /* The family choices combo box. */ + Widget size_box; /* The family choices combo box. */ + Widget bold_toggle, italic_toggle; /* The bold and italic toggle buttons */ + Widget xlfd_toggle, other_toggle; /* The xlfd and other font toggles. */ + Widget show_font_toggle, use_scaling_toggle; + Widget option_menu; /* The option menu. */ + Widget encoding_menu_shell; /* The menu shell associated with the */ + /* encoding menu. */ + + WidgetList xlfd_only; /* Only visable when in xlfd mode. */ + WidgetList xlfd_sensitive; /* Only sensitive when in xlfd mode. */ + + char num_xlfd_only, num_xlfd_sensitive; + char alloc_xlfd_only, alloc_xlfd_sensitive; + + Flag user_state; /* The current user selections. */ + + String current_text; /* The current text in the text widget. */ + String get_font; /* Where to store returned get values on + current_font. */ + String encoding; /* The encoding, may change. */ + + /* + * The previously set font_data, free when font changed, or widget + * destroyed. + */ + + XmFontList old_fontlist; + XFontStruct * old_fontdata; + + /* + * These values were added 2/1/94 + */ + Widget dpi75, dpi100, dpiAny; /* DPI toggle buttons. */ + Widget proportional, monospace, any_spacing; + /* Spacing toggle buttons */ +} XmFontSelectorPart; + +typedef struct _XmFontSelectorRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmPanedPart paned; + XmFontSelectorPart fs; +} XmFontSelectorRec; + +typedef struct _XmFontSelectorConstraintsPart +{ + XtPointer dummy; +} XmFontSelectorConstraintsPart; + +typedef struct _XmFontSelectorConstraintsRec +{ + XmManagerConstraintPart manager; + XmPanedConstraintsPart paned; + XmFontSelectorConstraintsPart fs; +} XmFontSelectorConstraintsRec, *XmFontSelectorConstraints; + +/************************************************************ + * MACROS + *************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + *************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +/************************************************************ + * STATIC DECLARATIONS + ************************************************************/ + +extern XmFontSelectorClassRec xmFontSelectorClassRec; + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmFontSelectorP_h - DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Form.h b/libXm/linux86/Xm/Form.h new file mode 100644 index 0000000..97c146f --- /dev/null +++ b/libXm/linux86/Xm/Form.h @@ -0,0 +1,88 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Form.h /main/12 1995/07/14 10:34:46 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmForm_h +#define _XmForm_h + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Form Widget */ + +externalref WidgetClass xmFormWidgetClass; + +typedef struct _XmFormClassRec * XmFormWidgetClass; +typedef struct _XmFormRec * XmFormWidget; + + +/* ifndef for Fast Subclassing */ + +#ifndef XmIsForm +#define XmIsForm(w) XtIsSubclass(w, xmFormWidgetClass) +#endif /* XmIsForm */ + +/******** Public Function Declarations ********/ + +extern Widget XmCreateForm( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmCreateFormDialog( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmForm_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/FormP.h b/libXm/linux86/Xm/FormP.h new file mode 100644 index 0000000..cf8ab0b --- /dev/null +++ b/libXm/linux86/Xm/FormP.h @@ -0,0 +1,155 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: FormP.h /main/13 1998/03/25 12:25:28 csn $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFormP_h +#define _XmFormP_h + + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* define index constants which are used to access attribute array of Form + * so that subclass of Form can make use of them. + */ + +#define _XmFORM_LEFT 0 +#define _XmFORM_RIGHT 1 +#define _XmFORM_TOP 2 +#define _XmFORM_BOTTOM 3 + + +typedef struct _XmFormAttachmentRec +{ + unsigned char type; + Widget w; + int percent; + int offset; + int value; + int tempValue; +} XmFormAttachmentRec, * XmFormAttachment; + + +#ifdef att +#undef att +#endif + +typedef struct _XmFormConstraintPart +{ + XmFormAttachmentRec att[4]; + Widget next_sibling; + Boolean sorted; + Boolean resizable; + Dimension preferred_width, preferred_height; +} XmFormConstraintPart, * XmFormConstraint; + +typedef struct _XmFormConstraintRec +{ + XmManagerConstraintPart manager; + XmFormConstraintPart form; +} XmFormConstraintRec, * XmFormConstraintPtr; + + +/* Form class structure */ + +typedef struct _XmFormClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmFormClassPart; + + +/* Full class record declaration for form class */ + +typedef struct _XmFormClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmFormClassPart form_class; +} XmFormClassRec; + +externalref XmFormClassRec xmFormClassRec; + + +/* The Form instance record */ + +typedef struct _XmFormPart +{ + Dimension horizontal_spacing; + Dimension vertical_spacing; + int fraction_base; + Boolean rubber_positioning; + Widget first_child; + Boolean initial_width, initial_height; + Boolean processing_constraints; +} XmFormPart; + + +/* Full instance record declaration */ + +typedef struct _XmFormRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmFormPart form; +} XmFormRec; + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFormP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Frame.h b/libXm/linux86/Xm/Frame.h new file mode 100644 index 0000000..8bb66ad --- /dev/null +++ b/libXm/linux86/Xm/Frame.h @@ -0,0 +1,79 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Frame.h /main/12 1995/07/14 10:35:48 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFrame_h +#define _XmFrame_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsFrame +#define XmIsFrame(w) XtIsSubclass(w, xmFrameWidgetClass) +#endif /* XmIsFrame */ + +/* Class record constants */ + +externalref WidgetClass xmFrameWidgetClass; + +typedef struct _XmFrameClassRec * XmFrameWidgetClass; +typedef struct _XmFrameRec * XmFrameWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateFrame( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFrame_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/FrameP.h b/libXm/linux86/Xm/FrameP.h new file mode 100644 index 0000000..81179b9 --- /dev/null +++ b/libXm/linux86/Xm/FrameP.h @@ -0,0 +1,130 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: FrameP.h /main/13 1995/09/19 23:03:22 cde-sun $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFrameP_h +#define _XmFrameP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Full class records */ + +typedef struct +{ + XtPointer extension; +} XmFrameClassPart; + +typedef struct _XmFrameClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmFrameClassPart frame_class; +} XmFrameClassRec; + +externalref XmFrameClassRec xmFrameClassRec; + + +/* Frame instance records */ + +typedef struct +{ + Dimension margin_width; + Dimension margin_height; + unsigned char shadow_type; + Dimension old_width; + Dimension old_height; + Dimension old_shadow_thickness; + Position old_shadow_x; + Position old_shadow_y; + Widget work_area; + Widget title_area; + Boolean processing_constraints; +} XmFramePart; + +typedef struct _XmFrameRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmFramePart frame; +} XmFrameRec; + + +/* Frame constraint records */ + +typedef struct _XmFrameConstraintPart +{ + /* "unused" is actually being used in the CheckSetChildType defaultproc ! */ + int unused; + unsigned char child_type; + unsigned char child_h_alignment; + Dimension child_h_spacing; + unsigned char child_v_alignment; +} XmFrameConstraintPart, * XmFrameConstraint; + +typedef struct _XmFrameConstraintRec +{ + XmManagerConstraintPart manager; + XmFrameConstraintPart frame; +} XmFrameConstraintRec, * XmFrameConstraintPtr; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFrameP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Gadget.h b/libXm/linux86/Xm/Gadget.h new file mode 100644 index 0000000..997e4c7 --- /dev/null +++ b/libXm/linux86/Xm/Gadget.h @@ -0,0 +1,70 @@ +/* $XConsortium: Gadget.h /main/5 1995/07/15 20:51:03 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmGadget_h +#define _XmGadget_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsGadget +#define XmIsGadget(w) XtIsSubclass(w, xmGadgetClass) +#endif /* XmIsGadget */ + +externalref WidgetClass xmGadgetClass; + +typedef struct _XmGadgetClassRec * XmGadgetClass; +typedef struct _XmGadgetRec * XmGadget; + + +/******** Public Function Declarations ********/ + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGadget_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/GadgetP.h b/libXm/linux86/Xm/GadgetP.h new file mode 100644 index 0000000..f8f1bbb --- /dev/null +++ b/libXm/linux86/Xm/GadgetP.h @@ -0,0 +1,201 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: GadgetP.h /main/8 1995/07/13 17:27:17 drk $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmGadgetP_h +#define _XmGadgetP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Masks to define input the gadget is interested in */ + +#define XmNO_EVENT 0x000 +#define XmENTER_EVENT 0x001 +#define XmLEAVE_EVENT 0x002 +#define XmFOCUS_IN_EVENT 0x004 +#define XmFOCUS_OUT_EVENT 0x008 +#define XmMOTION_EVENT 0x010 +#define XmARM_EVENT 0x020 +#define XmACTIVATE_EVENT 0x040 +#define XmHELP_EVENT 0x080 +#define XmKEY_EVENT 0x100 +#define XmMULTI_ARM_EVENT 0x200 +#define XmMULTI_ACTIVATE_EVENT 0x400 +#define XmBDRAG_EVENT 0x800 +#define XmALL_EVENT 0xFFF + + +/* Gadget access Macros */ +#define G_ShadowThickness(g) \ + (((XmGadget)(g))->gadget.shadow_thickness) +#define G_HighlightThickness(g) \ + (((XmGadget)(g))->gadget.highlight_thickness) + +#define GCEPTR(wc) ((XmGadgetClassExt *)(&(((XmGadgetClass)(wc))->gadget_class.extension))) +#define _XmGetGadgetClassExtPtr(wc, owner) \ + ((*GCEPTR(wc) && (((*GCEPTR(wc))->record_type) == owner))\ + ? GCEPTR(wc) \ + :((XmGadgetClassExt *) _XmGetClassExtensionPtr(((XmGenericClassExt *)GCEPTR(wc)), owner))) + +#define XmGadgetClassExtVersion 2L + + +/* Gadget cache header for each gadget's Cache Part */ + +typedef struct _XmGadgetCache +{ + struct _XmGadgetCache *next; + struct _XmGadgetCache *prev; + int ref_count; +} XmGadgetCache, *XmGadgetCachePtr; + + +/* A cache entry for each class which desires gadget caching */ + +typedef struct _XmCacheClassPart +{ + XmGadgetCache cache_head; + XmCacheCopyProc cache_copy; + XmGadgetCacheProc cache_delete; + XmCacheCompareProc cache_compare; +} XmCacheClassPart, *XmCacheClassPartPtr; + +/* A struct for properly aligning the data part of the cache entry. */ + +typedef struct _XmGadgetCacheRef +{ + XmGadgetCache cache; + XtArgVal data; +} XmGadgetCacheRef, *XmGadgetCacheRefPtr; + +/* Gadget class structure */ + +typedef struct _XmGadgetClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmWidgetBaselineProc widget_baseline; + XmWidgetDisplayRectProc widget_display_rect; + XmWidgetMarginsProc widget_margins; +}XmGadgetClassExtRec, *XmGadgetClassExt; + +typedef struct _XmGadgetClassPart +{ + XtWidgetProc border_highlight; + XtWidgetProc border_unhighlight; + XtActionProc arm_and_activate; + XmWidgetDispatchProc input_dispatch; + XmVisualChangeProc visual_change; /* unused in Motif 2.0 */ + XmSyntheticResource * syn_resources; + int num_syn_resources; + XmCacheClassPartPtr cache_part; + XtPointer extension; +} XmGadgetClassPart; + + +/* Full class record declaration for Gadget class */ + +typedef struct _XmGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; +} XmGadgetClassRec; + +externalref XmGadgetClassRec xmGadgetClassRec; + + +/* The Gadget instance record */ + +typedef struct _XmGadgetPart +{ + Dimension shadow_thickness; + Dimension highlight_thickness; + + XtCallbackList help_callback; + XtPointer user_data; + + Boolean traversal_on; + Boolean highlight_on_enter; + Boolean have_traversal; + + unsigned char unit_type; + XmNavigationType navigation_type; + + Boolean highlight_drawn; + Boolean highlighted; + Boolean visible; + + Mask event_mask; + XmDirection layout_direction; + XmString tool_tip_string; +} XmGadgetPart; + +/* Full instance record declaration */ + +typedef struct _XmGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; +} XmGadgetRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGadgetP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + + + diff --git a/libXm/linux86/Xm/GrabShell.h b/libXm/linux86/Xm/GrabShell.h new file mode 100644 index 0000000..2c2ad6b --- /dev/null +++ b/libXm/linux86/Xm/GrabShell.h @@ -0,0 +1,74 @@ +/* $XConsortium: GrabShell.h /main/5 1995/07/15 20:51:22 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmGrabShell_h +#define _XmGrabShell_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmGrabShellWidgetClass; + +typedef struct _XmGrabShellClassRec * XmGrabShellWidgetClass; +typedef struct _XmGrabShellWidgetRec * XmGrabShellWidget; + +#ifndef XmIsGrabShell +#define XmIsGrabShell(w) XtIsSubclass(w, xmGrabShellWidgetClass) +#endif /* XmIsGrabShell */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateGrabShell( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGrabShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/GrabShellP.h b/libXm/linux86/Xm/GrabShellP.h new file mode 100644 index 0000000..dba9237 --- /dev/null +++ b/libXm/linux86/Xm/GrabShellP.h @@ -0,0 +1,131 @@ +/* $XConsortium: GrabShellP.h /main/5 1995/07/15 20:51:26 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmGrabShellP_h +#define _XmGrabShellP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The GrabShell instance record */ + +typedef struct +{ + Cursor cursor; + Dimension shadow_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + GC top_shadow_GC; + GC bottom_shadow_GC; + Boolean owner_events; + int grab_style; + /* Internal fields */ + Time post_time; + Time unpost_time; + Boolean mapped; + Window old_focus; + int old_revert_to; +} XmGrabShellPart; + + +/* Full instance record declaration */ + +typedef struct _XmGrabShellRec +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm_shell; + VendorShellPart vendor_shell; + XmGrabShellPart grab_shell; +} XmGrabShellRec; + +typedef struct _XmGrabShellWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm_shell; + VendorShellPart vendor_shell; + XmGrabShellPart grab_shell; +} XmGrabShellWidgetRec; + + + +/* GrabShell class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmGrabShellClassPart; + + +/* Full class record declaration */ + +typedef struct _XmGrabShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + XmGrabShellClassPart grab_shell_class; +} XmGrabShellClassRec; + + +externalref XmGrabShellClassRec xmGrabShellClassRec; + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGrabShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Hierarchy.h b/libXm/linux86/Xm/Hierarchy.h new file mode 100644 index 0000000..a2d5fe3 --- /dev/null +++ b/libXm/linux86/Xm/Hierarchy.h @@ -0,0 +1,78 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _Hierarchy_h +#define _Hierarchy_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmHierarchyClassRec *XmHierarchyWidgetClass; +typedef struct _XmHierarchyRec *XmHierarchyWidget; + +typedef enum {XmAlwaysOpen, XmOpen, XmClosed, XmHidden, + XmNotInHierarchy} XmHierarchyNodeState; + +typedef struct _XmHierarchyNodeStateData { + Widget widget; + XmHierarchyNodeState state; +} XmHierarchyNodeStateData; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL FUNCTION DECLARATIONS +*************************************************************/ + +/* Function Name: XmHierarchyOpenAllAncestors + * Description: This function opens all ancestors of the given node. + * Arguments: nw - the node (widget) that will be changed. + * Returns: none + */ + +void XmHierarchyOpenAllAncestors( +#ifndef _NO_PROTO +Widget +#endif +); + +WidgetList XmHierarchyGetChildNodes( +#ifndef _NO_PROTO +Widget +#endif +); + +extern WidgetClass xiHierarchyWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _Hierarchy_h */ diff --git a/libXm/linux86/Xm/HierarchyP.h b/libXm/linux86/Xm/HierarchyP.h new file mode 100644 index 0000000..6ae17a4 --- /dev/null +++ b/libXm/linux86/Xm/HierarchyP.h @@ -0,0 +1,222 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _HierarchyP_h +#define _HierarchyP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include +#include + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define IS_MAPPED (1L << 1) +#define IS_COMPRESSED (1L << 2) +#define PARENT_GONE (1L << 3) +#define IS_SELECTED (1L << 4) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct _HierNodeInfo { + /* + * Public (Resource) data. + */ + + XmHierarchyNodeState state; /* State of the node. */ + Widget parent; /* parent of this child. */ + Widget insert_before; /* Sibling to insert this node before; + NULL will place it at the end. */ + Pixmap open_folder, close_folder; /* Images for open/close buttons. */ + + /* + * Private data. + */ + + Widget widget; /* Back pointer to this node's widget. */ + Widget open_close_button; /* The open or close button. */ + + struct _HierarchyConstraintRec ** children; /* norm children. */ + Cardinal num_children; /* number of each type of children. */ + Cardinal alloc_attrs, alloc; /* amount of allocated space for each */ + + unsigned char status; /* 8 status bits. */ +} HierNodeInfo; + +typedef struct _HierarchyConstraintRec { + XmManagerConstraintPart manager; + HierNodeInfo hierarchy; +} HierarchyConstraintRec, *HierarchyConstraints; + +typedef void (*XmHierarchyNodeProc)(HierarchyConstraints); +typedef void (*XmHierarchyExtraNodeProc)(Widget, HierarchyConstraints); +typedef void (*XmHierarchyBuildTableProc)(Widget, + HierarchyConstraints, Cardinal *); +typedef void (*XmHierarchyResetButtonProc)(Widget, HierarchyConstraints); + +typedef struct { + /* Class function for changing node state. */ + XmHierarchyNodeProc change_node_state; + /* map or unmap a given node. */ + XmHierarchyNodeProc map_node; + XmHierarchyNodeProc unmap_node; + /* Unmaps all the extra nodes. */ + XmHierarchyExtraNodeProc unmap_all_extra_nodes; + /* Builds the node table. */ + XmHierarchyBuildTableProc build_node_table; + /* Correctly sets the state of the open/close button. */ + XmHierarchyResetButtonProc reset_open_close_button; + /* Toggles state of a node. */ + XtCallbackProc toggle_node_state; + /* Just in case we need it later. */ + XtPointer extension; +} HierarchyClassPart; + +typedef struct _XmHierarchyClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + HierarchyClassPart hierarchy_class; +} XmHierarchyClassRec; + +typedef struct _HierarchyPart { + /* resources */ + + Boolean auto_close; /* Auto-close children when parent is closed?*/ + Boolean refigure_mode; /* Do refigures? */ + + Dimension h_margin; /* The horizontal margin. */ + Dimension v_margin; /* The vertical margin. */ + Pixmap open_folder, close_folder; /* Images for open/close buttons. */ + + XtCallbackList node_state_callback; /* Called when the node button is + clicked */ + XtCallbackList node_state_changed_callback; /* Called when the node state + changes */ + XtCallbackList node_state_beg_end_callback; /* Called when beginning + or ending a set of node + state changes */ + + /* private state */ + + HierarchyConstraintRec ** node_table; + HierarchyConstraints top_node; + Cardinal num_nodes, alloc_nodes; + Pixmap def_open_folder, def_close_folder; /* Default folder button Images*/ + + XtWorkProcId work_proc_id; /* work proc id for the move nodes wp */ +} HierarchyPart; + +typedef struct _XmHierarchyRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + HierarchyPart hierarchy; +} XmHierarchyRec; + +/* + * These are necessary because the XmResolvePartOffset macros assume a + * certain naming convention + */ +typedef HierarchyPart XmHierarchyPart; +typedef HierNodeInfo XmHierarchyConstraintPart; + +#define XmHierarchyIndex (XmManagerIndex + 1) + +#define XmHierarchyField(w,f,t) XmField(w, XmHierarchy_offsets, XmHierarchy, f, t) +#define XmHierarchy_auto_close(w) XmHierarchyField(w, auto_close, Boolean) +#define XmHierarchy_refigure_mode(w) XmHierarchyField(w, refigure_mode, Boolean) +#define XmHierarchy_h_margin(w) XmHierarchyField(w, h_margin, Dimension) +#define XmHierarchy_v_margin(w) XmHierarchyField(w, v_margin, Dimension) +#define XmHierarchy_open_folder(w) XmHierarchyField(w, open_folder, Pixmap) +#define XmHierarchy_close_folder(w) XmHierarchyField(w, close_folder, Pixmap) +#define XmHierarchy_node_state_callback(w) XmHierarchyField(w, node_state_callback, XtCallbackList) +#define XmHierarchy_node_state_changed_callback(w) XmHierarchyField(w, node_state_changed_callback, XtCallbackList) +#define XmHierarchy_node_state_beg_end_callback(w) XmHierarchyField(w, node_state_beg_end_callback, XtCallbackList) +#define XmHierarchy_node_table(w) XmHierarchyField(w, node_table, HierarchyConstraintRec**) +#define XmHierarchy_top_node(w) XmHierarchyField(w, top_node, HierarchyConstraints) +#define XmHierarchy_num_nodes(w) XmHierarchyField(w, num_nodes, Cardinal) +#define XmHierarchy_alloc_nodes(w) XmHierarchyField(w, alloc_nodes, Cardinal) +#define XmHierarchy_def_open_folder(w) XmHierarchyField(w, def_open_folder, Pixmap) +#define XmHierarchy_def_close_folder(w) XmHierarchyField(w, def_close_folder, Pixmap) +#define XmHierarchy_work_proc_id(w) XmHierarchyField(w, work_proc_id, XtWorkProcId) + +/* + * WARNING! + * + * These macros don't use the standard fieldmacro(widget) form. They take + * _pointers to HierarchyConstraintsRec structures_. Be careful. + */ +#define XmHierarchyCField(constraints, variable, type) \ + (*(type *)(((char *) constraints) + \ + XmHierarchyC_offsets[XmHierarchyIndex] + \ + XtOffsetOf(XmHierarchyConstraintPart, variable))) + +#define XmHierarchyC_state(constraints) XmHierarchyCField(constraints, state, XmHierarchyNodeState) +#define XmHierarchyC_parent(constraints) XmHierarchyCField(constraints, parent, Widget) +#define XmHierarchyC_insert_before(constraints) XmHierarchyCField(constraints, insert_before, Widget) +#define XmHierarchyC_open_folder(constraints) XmHierarchyCField(constraints, open_folder, Pixmap) +#define XmHierarchyC_close_folder(constraints) XmHierarchyCField(constraints, close_folder, Pixmap) +#define XmHierarchyC_widget(constraints) XmHierarchyCField(constraints, widget, Widget) +#define XmHierarchyC_open_close_button(constraints) XmHierarchyCField(constraints, open_close_button, Widget) +#define XmHierarchyC_children(constraints) XmHierarchyCField(constraints, children, struct _HierarchyConstraintRec **) +#define XmHierarchyC_num_children(constraints) XmHierarchyCField(constraints, num_children, Cardinal) +#define XmHierarchyC_alloc_attrs(constraints) XmHierarchyCField(constraints, alloc_attrs, Cardinal) +#define XmHierarchyC_alloc(constraints) XmHierarchyCField(constraints, alloc, Cardinal) +#define XmHierarchyC_status(constraints) XmHierarchyCField(constraints, status, unsigned char) + +#define XtInheritChangeNodeState ((XmHierarchyNodeProc)_XtInherit) +#define XtInheritUnmapAllExtraNodes ((XmHierarchyExtraNodeProc)_XtInherit) +#define XtInheritUnmapNode ((XmHierarchyNodeProc)_XtInherit) +#define XtInheritMapNode ((XmHierarchyNodeProc)_XtInherit) +#define XtInheritBuildNodeTable ((XmHierarchyBuildTableProc)_XtInherit) +#define XtInheritResetOpenCloseButton ((XmHierarchyResetButtonProc)_XtInherit) +#define XtInheritToggleNodeState ((XtCallbackProc)_XtInherit) + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmHierarchyClassRec xiHierarchyClassRec; +extern XmOffsetPtr XmHierarchy_offsets; +extern XmOffsetPtr XmHierarchyC_offsets; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _HierarchyP_h */ diff --git a/libXm/linux86/Xm/IconBox.h b/libXm/linux86/Xm/IconBox.h new file mode 100644 index 0000000..e0e6b16 --- /dev/null +++ b/libXm/linux86/Xm/IconBox.h @@ -0,0 +1,90 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconBox_h +#define _XmIconBox_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmIconBoxAnyCell (-5) + +typedef struct _XmIconBoxClassRec *XmIconBoxWidgetClass; +typedef struct _XmIconBoxRec *XmIconBoxWidget; + +typedef struct _XmIconBoxDropData { + Position cell_x, cell_y; /* drop location in cell coordinates. */ +} XmIconBoxDropData; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/* Function Name: XmIconBoxIsCellEmpty + * Description: Returns true if this cell is unused. + * Arguments: w - the icon box. + * x, y - cell to check. + * ignore - ignore this widget when checking. + * Returns: Returns true if this cell is unused. + */ + +Boolean XmIconBoxIsCellEmpty( +#ifndef _NO_PROTO +Widget, Position, Position, Widget +#endif +); + +/* Function Name: XmCreateIconBox + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateIconBox( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern WidgetClass xmIconBoxWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmIconBox_h */ diff --git a/libXm/linux86/Xm/IconBoxP.h b/libXm/linux86/Xm/IconBoxP.h new file mode 100644 index 0000000..5232904 --- /dev/null +++ b/libXm/linux86/Xm/IconBoxP.h @@ -0,0 +1,153 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconBoxP_h +#define _XmIconBoxP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + + +/* + * Hack to get around naming conventions. The XmConstraintPartOffset macro + * requires our contraint part structure to have this name + */ +#define XmIconBoxConstraintPart IconInfo + +#define XmIconBoxIndex (XmManagerIndex + 1) + +extern XmOffsetPtr XmIconBox_offsets; /* instance offsets */ +extern XmOffsetPtr XmIconBoxC_offsets; /* contraint offsets */ + +/* + * Access macros for widget instance fields + */ +#define XmIconBoxField(w,f,t) XmField(w, XmIconBox_offsets, XmIconBox, f, t) + +#define XmIconBox_min_v_cells(w) XmIconBoxField(w, min_v_cells, Dimension) +#define XmIconBox_min_h_cells(w) XmIconBoxField(w, min_h_cells, Dimension) +#define XmIconBox_v_margin(w) XmIconBoxField(w, v_margin, Dimension) +#define XmIconBox_h_margin(w) XmIconBoxField(w, h_margin, Dimension) +#define XmIconBox_min_cell_width(w) XmIconBoxField(w, min_cell_width, Dimension) +#define XmIconBox_min_cell_height(w) XmIconBoxField(w, min_cell_height, Dimension) +#define XmIconBox_cell_width(w) XmIconBoxField(w, cell_width, Dimension) +#define XmIconBox_cell_height(w) XmIconBoxField(w, cell_height, Dimension) + +/* + * Access macros for widget constraint fields + */ +#define XmIconBoxCField(w,f,t) \ + XmConstraintField(w, XmIconBoxC_offsets, XmIconBox, f, t) + +#define XmIconBoxC_cell_x(w) XmIconBoxCField(w, cell_x, short) +#define XmIconBoxC_cell_y(w) XmIconBoxCField(w, cell_y, short) +#define XmIconBoxC_pref_width(w) XmIconBoxCField(w, pref_width, Dimension) +#define XmIconBoxC_pref_height(w) XmIconBoxCField(w, pref_height, Dimension) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmIconBoxClassPart; + +typedef struct _XmIconBoxClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmIconBoxClassPart box_class; +} XmIconBoxClassRec; + +typedef struct { + /* resources */ + + Dimension min_v_cells; /* Default number of cells in the vert dir. */ + Dimension min_h_cells; /* Default number of cells in the horiz dir. */ + Dimension v_margin; /* Amount of space to leave between cells */ + Dimension h_margin; /* and window edges. */ + Dimension min_cell_width; /* Minimum width of the cells. */ + Dimension min_cell_height; /* Minimum height of the cells. */ + + /* private state */ + + Dimension cell_width; /* Width and height of all cells. */ + Dimension cell_height; + +} XmIconBoxPart; + + +typedef struct _XmIconBoxRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmIconBoxPart box; +} XmIconBoxRec; + +typedef struct _IconInfo { + + /* + * Resources. + */ + + short cell_x; /* X location of this icon in cell space. */ + short cell_y; /* Y location of this icon in cell space. */ + + /* + * Private state. + */ + + Dimension pref_width, pref_height; /* The preferred size of this widget. */ +} IconInfo; + +typedef struct _XmIconBoxConstraintsRec { + XmManagerConstraintPart manager; + IconInfo icon; +} XmIconBoxConstraintsRec, *XmIconBoxConstraints; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmIconBoxClassRec xmIconBoxClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmIconBoxP_h */ diff --git a/libXm/linux86/Xm/IconButton.h b/libXm/linux86/Xm/IconButton.h new file mode 100644 index 0000000..798ddae --- /dev/null +++ b/libXm/linux86/Xm/IconButton.h @@ -0,0 +1,78 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconButton_h +#define _XmIconButton_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmIconButtonClassRec *XmIconButtonWidgetClass; +typedef struct _XmIconButtonRec *XmIconButtonWidget; + +typedef enum { XmIconTop, XmIconLeft, XmIconRight, XmIconBottom, + XmIconOnly, XmIconNone } XmIconPlacement; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct _XmIconButtonCallbackInfo { + Boolean state; /* The current state of the icon button. */ + XEvent * event; /* The event that caused this action. */ +} XmIconButtonCallbackInfo; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +/* Function Name: XmCreateIconButton + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateIconButton( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmIconButtonWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmIconButton_h */ diff --git a/libXm/linux86/Xm/IconButtonP.h b/libXm/linux86/Xm/IconButtonP.h new file mode 100644 index 0000000..486e3bc --- /dev/null +++ b/libXm/linux86/Xm/IconButtonP.h @@ -0,0 +1,190 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconButtonP_h +#define _XmIconButtonP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#define XmIconButtonIndex (XmPrimitiveIndex + 1) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmIconButtonClassPart; + +typedef struct _XmIconButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmIconButtonClassPart icon_class; +} XmIconButtonClassRec; + +typedef struct { + /* resources */ + + String label; /* The label to display. */ + Pixmap pixmap; /* The pixmap to display. */ + Pixel arm_color; /* The color to arm this widget with. */ + XmFontList font_list; /* The font in MOTIF(tm) format. */ + XmIconPlacement icon_placement; /* Where to place the icon label. */ + Boolean recompute; /* Whether to recompute size every time. */ + Boolean set; /* State of the button. */ + Boolean armed; /* Armed value for button. */ + + Dimension v_space; /* The amount of space between the edges */ + Dimension h_space; /* of the widget and the picture/text. */ + + Dimension icon_text_padding; /* padding between the icon and the text. */ + + XtCallbackList activate_callback; /* Called when I am selected */ + XtCallbackList double_click_callback; /* Called when I am 2 clicked. */ + + /* + * Added in 1.2 for I18N. + */ + + XmString label_string; /* The label stored as an XmString. */ + unsigned char string_direction; + unsigned char alignment; + + /* private state */ + + Position pix_x, pix_y; /* Location of the pixmap. */ + + /* public state */ + Dimension pix_width, pix_height; /* size of the pixmap. */ + Dimension pix_depth; /* Depth of the pixmap. */ + + /* private state */ + Position text_x, text_y; /* Location to begin drawing text. */ + Dimension max_text_width; /* maximum space the text can take up. */ + Dimension max_text_height; /* maximum vertical space for the text */ + + XtIntervalId unset_timer; /* The arm and activate timer. */ + GC gc; /* The graphics context. */ + GC fill_gc; /* The gc for filling on the arm. */ + GC pixmap_fill_gc; /* The gc for drawing the pixmap when + the button is filled. */ + + GC stippled_text_gc; /* GC to use stippling text. */ + GC stippled_set_text_gc; /* GC to use for stip. text in a set button. */ + GC stippled_set_gc; /* GC to use for images when toggle is set. */ + GC stippled_unset_gc; /* GC to use for images when toggle is unset.*/ + + Time time; /* The server time of the last button click. */ + + Boolean label_from_name; +} XmIconButtonPart; + +#define XmIconButtonField(w,f,t) XmField(w, XmIconButton_offsets, XmIconButton, f, t) + +extern XmOffsetPtr XmIconButton_offsets; + +#define XmIconButton_label(w) XmIconButtonField(w, label, String) +#define XmIconButton_pixmap(w) XmIconButtonField(w, pixmap, Pixmap) +#define XmIconButton_arm_color(w) XmIconButtonField(w, arm_color, Pixel) +#define XmIconButton_font_list(w) XmIconButtonField(w, font_list, XmFontList) +#define XmIconButton_icon_placement(w) XmIconButtonField(w, icon_placement, XmIconPlacement) +#define XmIconButton_recompute(w) XmIconButtonField(w, recompute, Boolean) +#define XmIconButton_set(w) XmIconButtonField(w, set, Boolean) +#define XmIconButton_armed(w) XmIconButtonField(w, armed, Boolean) +#define XmIconButton_v_space(w) XmIconButtonField(w, v_space, Dimension) +#define XmIconButton_h_space(w) XmIconButtonField(w, h_space, Dimension) +#define XmIconButton_icon_text_padding(w) XmIconButtonField(w, icon_text_padding, Dimension) +#define XmIconButton_activate_callback(w) XmIconButtonField(w, activate_callback, XtCallbackList) +#define XmIconButton_double_click_callback(w) XmIconButtonField(w, double_click_callback, XtCallbackList) +#define XmIconButton_label_string(w) XmIconButtonField(w, label_string, XmString) +#define XmIconButton_string_direction(w) XmIconButtonField(w, string_direction, unsigned char) +#define XmIconButton_alignment(w) XmIconButtonField(w, alignment, unsigned char) +#define XmIconButton_pix_x(w) XmIconButtonField(w, pix_x, Position) +#define XmIconButton_pix_y(w) XmIconButtonField(w, pix_y, Position) +#define XmIconButton_pix_width(w) XmIconButtonField(w, pix_width, Dimension) +#define XmIconButton_pix_height(w) XmIconButtonField(w, pix_height, Dimension) +#define XmIconButton_pix_depth(w) XmIconButtonField(w, pix_depth, Dimension) +#define XmIconButton_text_x(w) XmIconButtonField(w, text_x, Position) +#define XmIconButton_text_y(w) XmIconButtonField(w, text_y, Position) +#define XmIconButton_max_text_width(w) XmIconButtonField(w, max_text_width, Dimension) +#define XmIconButton_max_text_height(w) XmIconButtonField(w, max_text_height, Dimension) +#define XmIconButton_unset_timer(w) XmIconButtonField(w, unset_timer, XtIntervalId) +#define XmIconButton_gc(w) XmIconButtonField(w, gc, GC) +#define XmIconButton_fill_gc(w) XmIconButtonField(w, fill_gc, GC) +#define XmIconButton_pixmap_fill_gc(w) XmIconButtonField(w, pixmap_fill_gc, GC) +#define XmIconButton_stippled_text_gc(w) XmIconButtonField(w, stippled_text_gc, GC) +#define XmIconButton_stippled_set_text_gc(w) XmIconButtonField(w, stippled_set_text_gc, GC) +#define XmIconButton_stippled_set_gc(w) XmIconButtonField(w, stippled_set_gc, GC) +#define XmIconButton_stippled_unset_gc(w) XmIconButtonField(w, stippled_unset_gc, GC) +#define XmIconButton_time(w) XmIconButtonField(w, time, Time) +#define XmIconButton_label_from_name(w) XmIconButtonField(w, label_from_name, Boolean) + +#define XmIconButtonIndex (XmPrimitiveIndex + 1) + + +typedef struct _XmIconButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmIconButtonPart icon; +} XmIconButtonRec; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmIconButtonClassRec xiIconButtonClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + + + +extern void _XmPrimitiveEnter( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveLeave( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; + + + +#endif /* _XmIconButtonP_h */ diff --git a/libXm/linux86/Xm/IconFile.h b/libXm/linux86/Xm/IconFile.h new file mode 100644 index 0000000..8f67353 --- /dev/null +++ b/libXm/linux86/Xm/IconFile.h @@ -0,0 +1,78 @@ +/* $XConsortium: IconFile.h /main/5 1995/07/15 20:51:44 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmIconFile_h +#define _XmIconFile_h + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/* + * values for icon magnitude + */ +#define XmUNSPECIFIED_ICON_SIZE 0 +#define XmLARGE_ICON_SIZE 1 +#define XmMEDIUM_ICON_SIZE 2 +#define XmSMALL_ICON_SIZE 3 +#define XmTINY_ICON_SIZE 4 + + +/******** Public Function Declarations for IconFile.c ********/ + +extern String XmGetIconFileName( + Screen *screen, + String imageInstanceName, + String imageClassName, + String hostPrefix, + unsigned int size) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconFile_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/linux86/Xm/IconFileP.h b/libXm/linux86/Xm/IconFileP.h new file mode 100644 index 0000000..114e529 --- /dev/null +++ b/libXm/linux86/Xm/IconFileP.h @@ -0,0 +1,66 @@ +/* $XConsortium: IconFileP.h /main/5 1995/07/15 20:51:48 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmIconFileP_h +#define _XmIconFileP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations for IconFile.c ********/ + +extern void XmeFlushIconFileCache(String path); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconFile_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/linux86/Xm/IconG.h b/libXm/linux86/Xm/IconG.h new file mode 100644 index 0000000..6093f21 --- /dev/null +++ b/libXm/linux86/Xm/IconG.h @@ -0,0 +1,76 @@ +/* $XConsortium: IconG.h /main/5 1995/07/15 20:52:04 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconG_h +#define _XmIconG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Class record constants */ +extern WidgetClass xmIconGadgetClass; + +typedef struct _XmIconGadgetClassRec * XmIconGadgetClass; +typedef struct _XmIconGadgetRec * XmIconGadget; + +#ifndef XmIsIconGadget +#define XmIsIconGadget(w) XtIsSubclass(w, xmIconGadgetClass) +#endif /* XmIsIconGadget */ + +/******** Public Function Declarations ********/ +extern Widget XmCreateIconGadget( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconG_h */ + +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/IconGP.h b/libXm/linux86/Xm/IconGP.h new file mode 100644 index 0000000..9af0c67 --- /dev/null +++ b/libXm/linux86/Xm/IconGP.h @@ -0,0 +1,273 @@ +/* $XConsortium: IconGP.h /main/9 1995/10/25 20:06:59 cde-sun $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconGP_h +#define _XmIconGP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef Widget (*XmGetContainerParentProc)(Widget) ; + +#define XmInheritGetContainerParentProc ((XmGetContainerParentProc) _XtInherit) + + +/* IconGadget class record */ +typedef struct _XmIconGadgetClassPart + { + XmGetContainerParentProc get_container_parent; + XtPointer extension ; + } XmIconGadgetClassPart; + + +/* Full class record declaration */ +typedef struct _XmIconGadgetClassRec + { + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmIconGadgetClassPart icong_class; + } XmIconGadgetClassRec; + +extern XmIconGadgetClassRec xmIconGadgetClassRec; + +/*****************************************************************/ +/* The Icon Gadget Cache Object's class and instance records*/ +/*****************************************************************/ + +typedef struct _XmIconGCacheObjClassPart +{ + XtPointer extension; +} XmIconGCacheObjClassPart; + + +typedef struct _XmIconGCacheObjClassRec /* Icon cache class record */ +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmIconGCacheObjClassPart icon_class_cache; +} XmIconGCacheObjClassRec; + +externalref XmIconGCacheObjClassRec xmIconGCacheObjClassRec; + +/* The Icon Gadget Cache instance record */ + +typedef struct _XmIconGCacheObjPart +{ + XmRenderTable render_table; /* XmNrenderTable */ + GC selected_GC; + GC inverse_GC; + + Pixel background; + Pixel foreground; + Pixel top_shadow_color; + Pixel bottom_shadow_color; + Pixel highlight_color; + + Pixmap background_pixmap; + Pixmap top_shadow_pixmap; + Pixmap bottom_shadow_pixmap; + Pixmap highlight_pixmap; + + GC normal_GC; + GC background_GC; + GC insensitive_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + GC highlight_GC; + + unsigned char alignment; + Dimension spacing; + Dimension margin_width; + Dimension margin_height; +} XmIconGCacheObjPart; + +typedef struct _XmIconGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmIconGCacheObjPart icon_cache; +} XmIconGCacheObjRec; + +typedef struct _XmIconGCacheObjRec * XmIconGCacheObject; + +/* IconGadget instance record */ +typedef struct _XmIconGadgetPart + { + XmString label_string; /* XmNlabelString */ + Pixmap large_icon_mask; /* XmNlargeIconMask */ + Pixmap large_icon_pixmap; /* XmNlargeIconPixmap */ + Pixmap small_icon_mask; /* XmNsmallIconMask */ + Pixmap small_icon_pixmap; /* XmNsmallIconPixmap */ + unsigned char viewtype; /* XmNviewType */ + unsigned char visual_emphasis; /* XmNvisualEmphasis */ + XmString * detail; /* XmNdetail */ + Cardinal detail_count; /* XmNdetailCount */ + /* Private variables */ + Dimension label_rect_width ; + Dimension label_rect_height ; + Dimension large_icon_rect_width; + Dimension large_icon_rect_height; + Dimension small_icon_rect_width; + Dimension small_icon_rect_height; + String large_pixmap_name ; + String small_pixmap_name ; + + XmIconGCacheObjPart *cache; + Boolean check_set_render_table; +} XmIconGadgetPart; + +/* Full instance record declaration */ +typedef struct _XmIconGadgetRec + { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmIconGadgetPart icong; + } XmIconGadgetRec; + + +/* Useful macros */ +#define IG_LabelString(w) (((XmIconGadget)(w))->icong.label_string) +#define IG_LargeIconMask(w) (((XmIconGadget)(w))->icong.large_icon_mask) +#define IG_LargeIconPixmap(w) (((XmIconGadget)(w))->icong.large_icon_pixmap) +#define IG_SmallIconMask(w) (((XmIconGadget)(w))->icong.small_icon_mask) +#define IG_SmallIconPixmap(w) (((XmIconGadget)(w))->icong.small_icon_pixmap) +#define IG_ViewType(w) (((XmIconGadget)(w))->icong.viewtype) +#define IG_VisualEmphasis(w) (((XmIconGadget)(w))->icong.visual_emphasis) +#define IG_Detail(w) (((XmIconGadget)(w))->icong.detail) +#define IG_DetailCount(w) (((XmIconGadget)(w))->icong.detail_count) +#define IG_LabelRectWidth(w) (((XmIconGadget)(w))->icong.label_rect_width) +#define IG_LabelRectHeight(w) (((XmIconGadget)(w))->icong.label_rect_height) +#define IG_LargeIconRectWidth(w) \ + (((XmIconGadget)(w))->icong.large_icon_rect_width) +#define IG_LargeIconRectHeight(w) \ + (((XmIconGadget)(w))->icong.large_icon_rect_height) +#define IG_SmallIconRectWidth(w) \ + (((XmIconGadget)(w))->icong.small_icon_rect_width) +#define IG_SmallIconRectHeight(w) \ + (((XmIconGadget)(w))->icong.small_icon_rect_height) +#define IG_LargePixmapName(w) (((XmIconGadget)(w))->icong.large_pixmap_name) +#define IG_SmallPixmapName(w) (((XmIconGadget)(w))->icong.small_pixmap_name) + +/* XmNrecomputeSize didn't make it as a resource, but since the + code is already written, I'll keep it and force its value here. + If it's ever wanted back, just replace that macro by: + #define IG_RecomputeSize(w) (((XmIconGadget)(w))->icong.recompute_size) */ +#define IG_RecomputeSize(w) (True) + +#define IG_LayoutDirection(w) (((XmIconGadget)(w))->gadget.layout_direction) +#define IG_Highlighted(w) (((XmIconGadget)(w))->gadget.highlighted) +#define IG_HLThickness(w) (((XmIconGadget)(w))->gadget.highlight_thickness) +#define IG_ShadowThickness(w) (((XmIconGadget)(w))->gadget.shadow_thickness) +#define IG_Depth(w) (((XmManagerWidget) \ + (((XmGadget)(w))->object.parent))->core.depth) + +/* cached resources for IconGadget */ +#define IG_RenderTable(w) (((XmIconGadget)(w))-> \ + icong.cache->render_table) +#define IG_SelectedGC(w) (((XmIconGadget)(w))-> \ + icong.cache->selected_GC) +#define IG_InverseGC(w) (((XmIconGadget)(w))-> \ + icong.cache->inverse_GC) + +/** These are gadget resources really. hopefully in 2.1, + that will be replaced by stuff like: + #define IG_Background(w) Gad_Background(w) + #define IG_BackgroundGC(w) Gad_BackgroundGC(w) + etc, etc ***/ +#define IG_Background(w) (((XmIconGadget)(w))-> \ + icong.cache->background) +#define IG_Foreground(w) (((XmIconGadget)(w))-> \ + icong.cache->foreground) +#define IG_TopShadowColor(w) (((XmIconGadget)(w))-> \ + icong.cache->top_shadow_color) +#define IG_BottomShadowColor(w) (((XmIconGadget)(w))-> \ + icong.cache->bottom_shadow_color) +#define IG_HighlightColor(w) (((XmIconGadget)(w))-> \ + icong.cache->highlight_color) + +#define IG_BackgroundPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->background_pixmap) +#define IG_TopShadowPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->top_shadow_pixmap) +#define IG_BottomShadowPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->bottom_shadow_pixmap) +#define IG_HighlightPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->highlight_pixmap) + +#define IG_NormalGC(w) (((XmIconGadget)(w))-> \ + icong.cache->normal_GC) +#define IG_BackgroundGC(w) (((XmIconGadget)(w))-> \ + icong.cache->background_GC) +#define IG_InsensitiveGC(w) (((XmIconGadget)(w))-> \ + icong.cache->insensitive_GC) +#define IG_TopShadowGC(w) (((XmIconGadget)(w))-> \ + icong.cache->top_shadow_GC) +#define IG_BottomShadowGC(w) (((XmIconGadget)(w))-> \ + icong.cache->bottom_shadow_GC) +#define IG_HighlightGC(w) (((XmIconGadget)(w))-> \ + icong.cache->highlight_GC) +#define IG_Alignment(w) (((XmIconGadget)(w))-> \ + icong.cache->alignment) +#define IG_Spacing(w) (((XmIconGadget)(w))-> \ + icong.cache->spacing) +#define IG_MarginWidth(w) (((XmIconGadget)(w))-> \ + icong.cache->margin_width) +#define IG_MarginHeight(w) (((XmIconGadget)(w))-> \ + icong.cache->margin_height) + + +/* Convenience Macros */ +#define IG_Cache(w) (((XmIconGadget)(w))->icong.cache) +#define IG_ClassCachePart(w) (((XmIconGadgetClass)xmIconGadgetClass)->\ + gadget_class.cache_part) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/IconH.h b/libXm/linux86/Xm/IconH.h new file mode 100644 index 0000000..a117034 --- /dev/null +++ b/libXm/linux86/Xm/IconH.h @@ -0,0 +1,76 @@ +/* $XConsortium: IconH.h /main/5 1995/07/15 20:52:21 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconH_h +#define _XmIconH_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Class record constants */ +extern WidgetClass xmIconHeaderClass; + +typedef struct _XmIconHeaderClassRec * XmIconHeaderClass; +typedef struct _XmIconHeaderRec * XmIconHeader; + +#ifndef XmIsIconHeader +#define XmIsIconHeader(w) XtIsSubclass(w, xmIconHeaderClass) +#endif /* XmIsIconHeader */ + +/******** Public Function Declarations ********/ +extern Widget XmCreateIconHeader( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconH_h */ + +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/IconHP.h b/libXm/linux86/Xm/IconHP.h new file mode 100644 index 0000000..0dfc411 --- /dev/null +++ b/libXm/linux86/Xm/IconHP.h @@ -0,0 +1,90 @@ +/* $XConsortium: IconHP.h /main/4 1995/07/15 20:52:25 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconHP_h +#define _XmIconHP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IconHeader class record */ +typedef struct _XmIconHeaderClassPart + { + XtPointer extension ; + } XmIconHeaderClassPart; + + +/* Full class record declaration */ +typedef struct _XmIconHeaderClassRec + { + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmIconGadgetClassPart icong_class; + XmIconHeaderClassPart iconh_class; + } XmIconHeaderClassRec; + +extern XmIconHeaderClassRec xmIconHeaderClassRec; + +/* IconHeader instance record */ +typedef struct _XmIconHeaderPart + { + Widget container_ID; /* XmNcontainerID */ + } XmIconHeaderPart; + +/* Full instance record declaration */ +typedef struct _XmIconHeaderRec + { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmIconGadgetPart icong; + XmIconHeaderPart iconh; + } XmIconHeaderRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconHP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/JoinSideT.h b/libXm/linux86/Xm/JoinSideT.h new file mode 100644 index 0000000..9124e3c --- /dev/null +++ b/libXm/linux86/Xm/JoinSideT.h @@ -0,0 +1,75 @@ +/* $XConsortium: JoinSideT.h /main/5 1995/07/15 20:52:34 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmJoinSideT_H +#define _XmJoinSideT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTjoinSide; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmJoinSideSetValueProc)(Widget tab, + unsigned char join_side, + Dimension join_thickness) ; +typedef unsigned char (*XmJoinSideGetValueProc)(Widget tab, + Dimension * join_thickness); + + +/* Version 0: initial release. */ + +typedef struct _XmJoinSideTraitRec { + int version; /* 0 */ + XmJoinSideSetValueProc setValue; + XmJoinSideGetValueProc getValue; +} XmJoinSideTraitRec, *XmJoinSideTrait; + +enum {/* XmNONE already defined in Xm.h */ + XmLEFT = 1, XmRIGHT, XmTOP, XmBOTTOM} ; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmJoinSideT_H */ diff --git a/libXm/linux86/Xm/Label.h b/libXm/linux86/Xm/Label.h new file mode 100644 index 0000000..5df90a3 --- /dev/null +++ b/libXm/linux86/Xm/Label.h @@ -0,0 +1,82 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Label.h /main/11 1995/07/13 17:30:38 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabel_h +#define _XmLabel_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Widget class and record definitions */ + +externalref WidgetClass xmLabelWidgetClass; + +typedef struct _XmLabelClassRec * XmLabelWidgetClass; +typedef struct _XmLabelRec * XmLabelWidget; + +/*fast subclass define */ +#ifndef XmIsLabel +#define XmIsLabel(w) XtIsSubclass(w, xmLabelWidgetClass) +#endif /* XmIsLabel */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateLabel( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabel_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/LabelG.h b/libXm/linux86/Xm/LabelG.h new file mode 100644 index 0000000..2aabe7a --- /dev/null +++ b/libXm/linux86/Xm/LabelG.h @@ -0,0 +1,84 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: LabelG.h /main/11 1995/07/13 17:31:23 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabelG_h +#define _XmLabelG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Widget class and record definitions */ + + +externalref WidgetClass xmLabelGadgetClass; + +typedef struct _XmLabelGadgetClassRec * XmLabelGadgetClass; +typedef struct _XmLabelGadgetRec * XmLabelGadget; +typedef struct _XmLabelGCacheObjRec * XmLabelGCacheObject; + +/*fast subclass define */ +#ifndef XmIsLabelGadget +#define XmIsLabelGadget(w) XtIsSubclass(w, xmLabelGadgetClass) +#endif /* XmIsLabelGadget */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateLabelGadget( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/LabelGP.h b/libXm/linux86/Xm/LabelGP.h new file mode 100644 index 0000000..bb89a3d --- /dev/null +++ b/libXm/linux86/Xm/LabelGP.h @@ -0,0 +1,346 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: LabelGP.h /main/12 1995/10/25 20:08:21 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabelGP_h +#define _XmLabelGP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ +/* The Label Gadget Cache Object's class and instance records*/ +/*************************************************************/ + +/* Enumerations for fill_bg_box. */ +enum { _XmPLAIN_BG_BOX, _XmFILL_BG_BOX, _XmALWAYS_FILL_BG_BOX }; + +typedef struct _XmLabelGCacheObjClassPart +{ + int foo; +} XmLabelGCacheObjClassPart; + + +typedef struct _XmLabelGCacheObjClassRec /* label cache class record */ +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; +} XmLabelGCacheObjClassRec; + +externalref XmLabelGCacheObjClassRec xmLabelGCacheObjClassRec; + + +/* The Label Gadget Cache instance record */ + +typedef struct _XmLabelGCacheObjPart +{ + unsigned char label_type; + unsigned char alignment; + unsigned char string_direction; + + Dimension margin_height; /* margin around widget */ + Dimension margin_width; + + Dimension margin_left; /* additional margins on */ + Dimension margin_right; /* each side of widget */ + Dimension margin_top; /* text (or pixmap) is placed */ + Dimension margin_bottom; /* inside the margins */ + + Boolean recompute_size; + + Boolean skipCallback; /* set by RowColumn with entryCallback */ + unsigned char menu_type; + + /* + * Following are color resources and instance variables for Gadgets. + * Because of problems involving the history of the gadget cache these + * variables appear here rather than in XmGadget. + * + * XmArrowButtonGadget and XmSeparatorGadget have effectively the same + * set of color resources implemented for each. + * + * XmLabelGadget does not use all of these variables (e.g top_shadow_color). + * It initializes them and maintains them but does not use all of them + * to render the label gadget. They are here for use by subclasses. + * + * Sterling Barrett + * sterling@ics.com + */ + + GC background_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + GC highlight_GC; + + Pixel foreground; + Pixel background; + + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Pixel highlight_color; + Pixmap highlight_pixmap; + +} XmLabelGCacheObjPart; + +typedef struct _XmLabelGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; +} XmLabelGCacheObjRec; + +/* The Label Widget Class and instance records */ +/*************************************************/ + +typedef struct _XmLabelGadgetClassPart /* label class record */ +{ + XtWidgetProc setOverrideCallback; + XmMenuProc menuProcs; + XtPointer extension; +} XmLabelGadgetClassPart; + +typedef struct _XmLabelGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; +} XmLabelGadgetClassRec; + +externalref XmLabelGadgetClassRec xmLabelGadgetClassRec; + +typedef struct _XmLabelGadgetPart +{ + _XmString _label; /* String sent to this widget */ + _XmString _acc_text; + KeySym mnemonic; + XmStringCharSet mnemonicCharset; + char *accelerator; + XmFontList font; + + Pixmap pixmap; + Pixmap pixmap_insen; + + /* PRIVATE members -- values computed by LabelWidgetClass methods */ + + GC normal_GC; /* GC for text */ + GC insensitive_GC; + XRectangle TextRect; /* The bounding box of the text or clip */ + XRectangle acc_TextRect; /* rectangle of the window; whichever is + smaller */ + + XmLabelGCacheObjPart *cache; + + Dimension acc_left_delta; /* Amount we increased the margins */ + Dimension acc_right_delta; /* to accomodate accelerator text */ + + Dimension * baselines; /* Cached baseline information. */ + + XtEnum fill_bg_box; /* Computed by LabelGadget or */ + /* pinned by subclasses. */ + Boolean check_set_render_table; + +} XmLabelGadgetPart; + + +typedef struct _XmLabelGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; +} XmLabelGadgetRec; + +typedef struct _LRectangle +{ + int x, y; + int width, height; +} LRectangle; + +/* Inherited Functions exported by label */ + +#define XmInheritSetOverrideCallback ((XtWidgetProc) _XtInherit) +#define XmInheritResize ((XtWidgetProc) _XtInherit) + +#define INVALID_PIXEL ((Pixel) -1) +#define INVALID_PIXMAP ((Pixmap) -1) +/* Padding between label text and accelerator text */ + +#define LABELG_ACC_PAD 15 + +/* MACROS */ +/******** + * Macros for cached instance fields + */ +#define LabG_LabelType(w) (((XmLabelGadget)(w)) -> \ + label.cache-> label_type) +#define LabG_Alignment(w) (((XmLabelGadget)(w)) -> \ + label.cache-> alignment) +#define LabG_StringDirection(w) (((XmLabelGadget)(w)) -> \ + label.cache-> string_direction) +#define LabG_MarginHeight(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_height) +#define LabG_MarginWidth(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_width) +#define LabG_MarginLeft(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_left) +#define LabG_MarginRight(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_right) +#define LabG_MarginTop(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_top) +#define LabG_MarginBottom(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_bottom) +#define LabG_RecomputeSize(w) (((XmLabelGadget)(w)) -> \ + label.cache-> recompute_size) +#define LabG_SkipCallback(w) (((XmLabelGadget)(w)) -> \ + label.cache-> skipCallback) +#define LabG_MenuType(w) (((XmLabelGadget)(w)) -> \ + label.cache-> menu_type) +#define LabG_BackgroundGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> background_GC) +#define LabG_TopShadowGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> top_shadow_GC) +#define LabG_BottomShadowGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> bottom_shadow_GC) +#define LabG_HighlightGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> highlight_GC) +#define LabG_Foreground(w) (((XmLabelGadget)(w)) -> \ + label.cache-> foreground) +#define LabG_Background(w) (((XmLabelGadget)(w)) -> \ + label.cache-> background) +#define LabG_TopShadowColor(w) (((XmLabelGadget)(w)) -> \ + label.cache-> top_shadow_color) +#define LabG_TopShadowPixmap(w) (((XmLabelGadget)(w)) -> \ + label.cache-> top_shadow_pixmap) +#define LabG_BottomShadowColor(w) (((XmLabelGadget)(w)) -> \ + label.cache-> bottom_shadow_color) +#define LabG_BottomShadowPixmap(w) (((XmLabelGadget)(w)) -> \ + label.cache-> bottom_shadow_pixmap) +#define LabG_HighlightColor(w) (((XmLabelGadget)(w)) -> \ + label.cache-> highlight_color) +#define LabG_HighlightPixmap(w) (((XmLabelGadget)(w)) -> \ + label.cache-> highlight_pixmap) +/******** + * Macros for UNcached instance fields + */ +#define LabG__label(w) (((XmLabelGadget)(w)) -> \ + label._label) +#define LabG__acceleratorText(w) (((XmLabelGadget)(w)) -> \ + label._acc_text) +#define LabG_Font(w) (((XmLabelGadget)(w)) -> \ + label.font) +#define LabG_Mnemonic(w) (((XmLabelGadget)(w)) -> \ + label.mnemonic) +#define LabG_MnemonicCharset(w) (((XmLabelGadget)(w)) -> \ + label.mnemonicCharset) +#define LabG_Accelerator(w) (((XmLabelGadget)(w)) -> \ + label.accelerator) +#define LabG_Pixmap(w) (((XmLabelGadget)(w)) -> \ + label.pixmap) +#define LabG_PixmapInsensitive(w) (((XmLabelGadget)(w)) -> \ + label.pixmap_insen) +#define LabG_NormalGC(w) (((XmLabelGadget)(w)) -> \ + label.normal_GC) +#define LabG_InsensitiveGC(w) (((XmLabelGadget)(w)) -> \ + label.insensitive_GC) +#define LabG_TextRect(w) (((XmLabelGadget)(w)) -> \ + label.TextRect) +#define LabG_AccTextRect(w) (((XmLabelGadget)(w)) -> \ + label.acc_TextRect) + + +/******** + * Convenience Macros + */ +#define LabG_TextRect_x(w) (LabG_TextRect(w).x) + +#define LabG_TextRect_y(w) (LabG_TextRect(w).y) + +#define LabG_TextRect_width(w) (LabG_TextRect(w).width) + +#define LabG_TextRect_height(w) (LabG_TextRect(w).height) + +#define LabG_IsText(w) (LabG_LabelType(w) == XmSTRING) + +#define LabG_IsPixmap(w) (LabG_LabelType(w) == XmPIXMAP) + +#define LabG_Cache(w) (((XmLabelGadget)(w))-> \ + label.cache) +#define LabG_Shadow(w) (((XmLabelGadget)(w))->gadget.shadow_thickness) +#define LabG_Highlight(w) (((XmLabelGadget)(w))->gadget.highlight_thickness) +#define LabG_Baseline(w) (_XmStringBaseline ((LabG_Font(w)), (LabG__Label(w)))) +#define LabG_ClassCachePart(w) \ + (((XmLabelGadgetClass)xmLabelGadgetClass)->gadget_class.cache_part) + +#define LabG_IsMenupane(w) ((LabG_MenuType(w) == XmMENU_POPUP) || \ + (LabG_MenuType(w) == XmMENU_PULLDOWN)) + +#define _XmAssignLabG_MarginHeight_r(cache, val) \ + cache->margin_height = val +#define _XmAssignLabG_MarginWidth_r(cache, val) \ + cache->margin_width = val +#define _XmAssignLabG_MarginLeft_r(cache, val) \ + cache->margin_left = val +#define _XmAssignLabG_MarginRight_r(cache, val) \ + cache->margin_right = val +#define _XmAssignLabG_MarginTop_r(cache, val) \ + cache->margin_top = val +#define _XmAssignLabG_MarginBottom_r(cache, val) \ + cache->margin_bottom = val + +extern void _XmQualifyLabelLocalCache(XmLabelGCacheObjPart *, XmLabelGadget); +extern void _XmReCacheLabG_r(XmLabelGCacheObjPart *, XmLabelGadget); + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/LabelP.h b/libXm/linux86/Xm/LabelP.h new file mode 100644 index 0000000..65e826f --- /dev/null +++ b/libXm/linux86/Xm/LabelP.h @@ -0,0 +1,178 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: LabelP.h /main/13 1995/10/25 20:08:32 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabelP_h +#define _XmLabelP_h + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* The Label Widget Class and instance records */ + +typedef struct _XmLabelClassPart /* label class record */ +{ + XtWidgetProc setOverrideCallback; + XmMenuProc menuProcs; + String translations; + XtPointer extension; +} XmLabelClassPart; + +typedef struct _XmLabelClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; +} XmLabelClassRec; + +externalref XmLabelClassRec xmLabelClassRec; + + +/* Inherited Functions exported by label */ + +#define XmInheritSetOverrideCallback ((XtWidgetProc) _XtInherit) +#define XmInheritResize ((XtWidgetProc) _XtInherit) +#define XmInheritRealize ((XtRealizeProc) _XtInherit) + +/* The padding between label text and accelerator text */ + +# define LABEL_ACC_PAD 15 + +/* The Label instance record */ + +typedef struct _XmLabelPart +{ + _XmString _label; /* String sent to this widget */ + _XmString _acc_text; + KeySym mnemonic; + XmStringCharSet mnemonicCharset; + char *accelerator; + unsigned char label_type; + unsigned char alignment; + unsigned char string_direction; + XmFontList font; + + Dimension margin_height; /* margin around widget */ + Dimension margin_width; + + Dimension margin_left; /* additional margins on */ + Dimension margin_right; /* each side of widget */ + Dimension margin_top; /* text (or pixmap) is placed */ + Dimension margin_bottom; /* inside the margins */ + + Boolean recompute_size; + + Pixmap pixmap; + Pixmap pixmap_insen; + + /* PRIVATE members -- values computed by LabelWidgetClass methods */ + + GC normal_GC; /* GC for text */ + GC insensitive_GC; + XRectangle TextRect; /* The bounding box of the text or clip */ + XRectangle acc_TextRect; /* rectangle of the window; whichever is */ + /* smaller */ + + Boolean skipCallback; /* set by RowColumn with entryCallback. */ + unsigned char menu_type; + Boolean computing_size; /* suppresses DrawnB resize callbacks. */ + + Dimension acc_left_delta; /* Amount we increased the margins */ + Dimension acc_right_delta; /* to accomodate accelerator text. */ + + Dimension * baselines; /* Cached baseline information */ + + Boolean check_set_render_table; + +} XmLabelPart; + + +typedef struct _XmLabelRec +{ + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; +} XmLabelRec; + + +/* MACROS */ + +#define Lab_MarginWidth(w) (((XmLabelWidget)(w)) ->label.margin_width) +#define Lab_MarginHeight(w) (((XmLabelWidget)(w)) ->label.margin_height) +#define Lab_MarginTop(w) (((XmLabelWidget)(w)) ->label.margin_top) +#define Lab_MarginBottom(w) (((XmLabelWidget)(w)) ->label.margin_bottom) +#define Lab_MarginRight(w) (((XmLabelWidget)(w)) ->label.margin_right) +#define Lab_MarginLeft(w) (((XmLabelWidget)(w)) ->label.margin_left) +#define Lab_TextRect_x(w) (((XmLabelWidget)(w)) ->label.TextRect.x) +#define Lab_TextRect_y(w) (((XmLabelWidget)(w)) ->label.TextRect.y) +#define Lab_TextRect_width(w) (((XmLabelWidget)(w)) ->label.TextRect.width) +#define Lab_TextRect_height(w) (((XmLabelWidget)(w)) ->label.TextRect.height) + +#define Lab_IsText(w) (((XmLabelWidget)(w)) ->label.label_type == XmSTRING) +#define Lab_IsPixmap(w) (((XmLabelWidget)(w)) ->label.label_type == XmPIXMAP) + +#define Lab_Font(w) (((XmLabelWidget)(w)) ->label.font) + +#define Lab_Mnemonic(w) (((XmLabelWidget)(w)) ->label.mnemonic) +#define Lab_Accelerator(w) (((XmLabelWidget)(w)) ->label.accelerator) +#define Lab_AcceleratorText(w) (((XmLabelWidget)(w)) ->label.acc_text) +#define Lab_MenuType(w) (((XmLabelWidget)(w))->label.menu_type) +#define Lab_Shadow(w) (((XmLabelWidget)(w))->primitive.shadow_thickness) +#define Lab_Highlight(w) (((XmLabelWidget)(w))->primitive.highlight_thickness) +#define Lab_Baseline(w) \ + (_XmStringBaseline (((XmLabelWidget)(w))->label.font, \ + ((XmLabelWidget)(w))->label._label)) + +#define Lab_ComputingSize(w) (((XmLabelWidget)(w))->label.computing_size) +#define Lab_IsMenupane(w) ((Lab_MenuType(w) == XmMENU_POPUP) || \ + (Lab_MenuType(w) == XmMENU_PULLDOWN)) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/LayoutT.h b/libXm/linux86/Xm/LayoutT.h new file mode 100644 index 0000000..64c0efb --- /dev/null +++ b/libXm/linux86/Xm/LayoutT.h @@ -0,0 +1,66 @@ +/* $XConsortium: LayoutT.h /main/5 1995/07/15 20:52:38 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmLayoutT_H +#define _XmLayoutT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTspecifyLayoutDirection; + +/* Trait structures and typedefs, place typedefs first */ + +typedef XmDirection (*XmGetLayoutDirectionProc)(Widget); + +/* Version 0: initial release. */ + +typedef struct { + int version; /* 0 */ + XmGetLayoutDirectionProc get_direction; +} XmSpecifyLayoutDirectionTraitRec, *XmSpecifyLayoutDirectionTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLayoutT_H */ diff --git a/libXm/linux86/Xm/List.h b/libXm/linux86/Xm/List.h new file mode 100644 index 0000000..296029f --- /dev/null +++ b/libXm/linux86/Xm/List.h @@ -0,0 +1,229 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: List.h /main/12 1995/07/13 17:33:36 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmList_h +#define _XmList_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmListWidgetClass; + +#define XmINITIAL 0 +#define XmADDITION 1 +#define XmMODIFICATION 2 + +#ifndef XmIsList +#define XmIsList(w) XtIsSubclass(w, xmListWidgetClass) +#endif /* XmIsList */ + +typedef struct _XmListClassRec * XmListWidgetClass; +typedef struct _XmListRec * XmListWidget; + +/******** Public Function Declarations ********/ + +extern void XmListAddItem( + Widget w, + XmString item, + int pos) ; +extern void XmListAddItems( + Widget w, + XmString *items, + int item_count, + int pos) ; +extern void XmListAddItemsUnselected( + Widget w, + XmString *items, + int item_count, + int pos) ; +extern void XmListAddItemUnselected( + Widget w, + XmString item, + int pos) ; +extern void XmListDeleteItem( + Widget w, + XmString item) ; +extern void XmListDeleteItems( + Widget w, + XmString *items, + int item_count) ; +extern void XmListDeletePositions( + Widget w, + int *position_list, + int position_count ) ; +extern void XmListDeletePos( + Widget w, + int pos) ; +extern void XmListDeleteItemsPos( + Widget w, + int item_count, + int pos) ; +extern void XmListDeleteAllItems( + Widget w) ; +extern void XmListReplaceItems( + Widget w, + XmString *old_items, + int item_count, + XmString *new_items) ; +extern void XmListReplaceItemsPos( + Widget w, + XmString *new_items, + int item_count, + int position) ; +extern void XmListReplaceItemsUnselected( + Widget w, + XmString *old_items, + int item_count, + XmString *new_items) ; +extern void XmListReplaceItemsPosUnselected( + Widget w, + XmString *new_items, + int item_count, + int position) ; +extern void XmListReplacePositions( + Widget w, + int *position_list, + XmString *item_list, + int item_count ) ; +extern void XmListSelectItem( + Widget w, + XmString item, +#if NeedWidePrototypes + int notify) ; +#else + Boolean notify) ; +#endif /* NeedWidePrototypes */ +extern void XmListSelectPos( + Widget w, + int pos, +#if NeedWidePrototypes + int notify) ; +#else + Boolean notify) ; +#endif /* NeedWidePrototypes */ +extern void XmListDeselectItem( + Widget w, + XmString item) ; +extern void XmListDeselectPos( + Widget w, + int pos) ; +extern void XmListDeselectAllItems( + Widget w) ; +extern void XmListSetPos( + Widget w, + int pos) ; +extern void XmListSetBottomPos( + Widget w, + int pos) ; +extern void XmListSetItem( + Widget w, + XmString item) ; +extern void XmListSetBottomItem( + Widget w, + XmString item) ; +extern void XmListSetAddMode( + Widget w, +#if NeedWidePrototypes + int add_mode) ; +#else + Boolean add_mode) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmListItemExists( + Widget w, + XmString item) ; +extern int XmListItemPos( + Widget w, + XmString item) ; +extern int XmListGetKbdItemPos( + Widget w) ; +extern Boolean XmListSetKbdItemPos( + Widget w, + int pos ) ; +extern int XmListYToPos( + Widget w, + Position y) ; /* NeedWidePrototypes ????? */ +extern Boolean XmListPosToBounds( + Widget w, + int position, + Position *x, + Position *y, + Dimension *width, + Dimension *height) ; +extern Boolean XmListGetMatchPos( + Widget w, + XmString item, + int **pos_list, + int *pos_count) ; +extern Boolean XmListGetSelectedPos( + Widget w, + int **pos_list, + int *pos_count) ; +extern void XmListSetHorizPos( + Widget w, + int position) ; +extern void XmListUpdateSelectedList( + Widget w) ; +extern Boolean XmListPosSelected( + Widget w, + int pos); +extern Widget XmCreateList( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; +extern Widget XmCreateScrolledList( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmList_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ListP.h b/libXm/linux86/Xm/ListP.h new file mode 100644 index 0000000..cf5b869 --- /dev/null +++ b/libXm/linux86/Xm/ListP.h @@ -0,0 +1,242 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ListP.h /main/12 1995/09/19 23:04:39 cde-sun $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmListP_h +#define _XmListP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* List struct passed to Convert proc for drag and drop */ +typedef struct _XmListDragConvertStruct +{ + Widget w; + XmString *strings; + int num_strings; +} XmListDragConvertStruct; + +/* List class structure */ +typedef struct _XmListClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmListClassPart; + + +/* Full class record declaration for List class */ +typedef struct _XmListClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmListClassPart list_class; +} XmListClassRec; + +externalref XmListClassRec xmListClassRec; + +/* Internal form of the list elements. */ +typedef struct { + Dimension height; + Dimension width; + Boolean selected; + Boolean last_selected; + Boolean LastTimeDrawn; + int length; + wchar_t first_char; +} Element, *ElementPtr; + +/* The List instance record */ +typedef struct _XmListPart +{ + Dimension spacing; + short ItemSpacing; + Dimension margin_width; + Dimension margin_height; + XmFontList font; + XmString *items; + int itemCount; + XmString *selectedItems; + int *selectedPositions; /* "selectedIndices" in Motif 1.2 */ + int selectedItemCount; + int visibleItemCount; + int LastSetVizCount; + unsigned char SelectionPolicy; + unsigned char ScrollBarDisplayPolicy; + unsigned char SizePolicy; + XmStringDirection StrDir; + + XtEnum AutoSelect; + Boolean DidSelection; + Boolean FromSetSB; + Boolean FromSetNewSize; + unsigned char SelectionMode; /* "Boolean AddMode" in Motif 1.2 */ + unsigned char LeaveDir; + unsigned char HighlightThickness; + int ClickInterval; + XtIntervalId DragID; + XtCallbackList SingleCallback; + XtCallbackList MultipleCallback; + XtCallbackList ExtendCallback; + XtCallbackList BrowseCallback; + XtCallbackList DefaultCallback; + + + GC NormalGC; + GC InverseGC; + GC HighlightGC; + Pixmap DashTile; /* unused in Motif 1.2 */ + ElementPtr *InternalList; + int LastItem; /* position of last item in list */ + int FontHeight; /* unused in Motif 1.2 */ + int top_position; + char Event; + int LastHLItem; + + /* These fields specify the boundaries of the selection (i.e. + * the current selection) as specified by the "selected" field + * of the InternalList elements and the boundaries of the + * last_selected selection (i.e. the previous selection) as + * specified by the "last_selected" field of the InternalList + * elements. + */ + int StartItem; + int OldStartItem; + int EndItem; + int OldEndItem; + + Position BaseX; + Position BaseY; + + /* MouseMoved: unused resource from Motif1.2, used now in the + * CheckSetRenderTable default proc (see List.c). + */ + Boolean MouseMoved; + + Boolean AppendInProgress; + Boolean Traversing; + Boolean KbdSelection; + short DownCount; + Time DownTime; + int CurrentKbdItem; /* position of location cursor */ + unsigned char SelectionType; + GC InsensitiveGC; + + int vmin; /* unused in Motif 1.2 */ + int vmax; /* unused in Motif 2.0 */ + int vOrigin; /* unused in Motif 2.0 */ + int vExtent; /* unused in Motif 2.0 */ + + int hmin; /* slider minimum coordiate position */ + int hmax; /* slider maximum coordiate position */ + int hOrigin; /* slider edge location */ + int hExtent; /* slider size */ + + Dimension MaxWidth; + Dimension CharWidth; /* unused in Motif 1.2 */ + Position XOrigin; + + XmScrollBarWidget hScrollBar; + XmScrollBarWidget vScrollBar; + XmScrolledWindowWidget Mom; + Dimension MaxItemHeight; + + /*--- New fields in Motif 2.0. ---*/ + int selectedPositionCount; + + unsigned char matchBehavior; + + /* The AutoSelectionType is used to designate where in the selection + * process the user currently is when auto select is enabled. For + * instance, during an extended select, there is a beginning to + * the selection, possible mouse motions and finally a button release + * resulting in either a selection identical to what was selected + * before the beginning or to a selection that is different. + */ + unsigned char AutoSelectionType; + + /* PrimaryOwnership is used to describe how the list show take + * ownership of the primary selection when the user selects list + * items, with a possible value of NEVER. + */ + unsigned char PrimaryOwnership; + + XtCallbackList DestinationCallback; + + /* Selection rendition fields */ + XmRendition scratchRend; + Pixel selectColor; + + /* This field is used to house the top position of the list before a + * scrolling action begins. If the scrolling action is cancelled, then + * we restore the list top position by using this field. When scrolling + * by directly using the scroll bar, we don't need this field since the + * scroll frame trait handles the reset. When scrolling by selecting + * items and dragging off the edge of the list, we need to use this + * field to reset the list position when a user presses the cancel key. + */ + int previous_top_position; + + XtIntervalId drag_start_timer; + char * drag_abort_action; + XEvent drag_event; + XmListDragConvertStruct *drag_conv; +} XmListPart; + + +/* Full instance record declaration */ +typedef struct _XmListRec +{ + CorePart core; + XmPrimitivePart primitive; + XmListPart list; +} XmListRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmListP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MainW.h b/libXm/linux86/Xm/MainW.h new file mode 100644 index 0000000..87bb223 --- /dev/null +++ b/libXm/linux86/Xm/MainW.h @@ -0,0 +1,90 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MainW.h /main/12 1995/07/13 17:34:12 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMainWindow_h +#define _XmMainWindow_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsMainWindow +#define XmIsMainWindow(w) XtIsSubclass(w, xmMainWindowWidgetClass) +#endif /* XmIsMainWindow */ + +externalref WidgetClass xmMainWindowWidgetClass; + +typedef struct _XmMainWindowClassRec * XmMainWindowWidgetClass; +typedef struct _XmMainWindowRec * XmMainWindowWidget; + + +/******** Public Function Declarations ********/ + +extern void XmMainWindowSetAreas( + Widget w, + Widget menu, + Widget command, + Widget hscroll, + Widget vscroll, + Widget wregion) ; +extern Widget XmMainWindowSep1( + Widget w) ; +extern Widget XmMainWindowSep2( + Widget w) ; +extern Widget XmMainWindowSep3( + Widget w) ; +extern Widget XmCreateMainWindow( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMainWindow_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MainWP.h b/libXm/linux86/Xm/MainWP.h new file mode 100644 index 0000000..5a28734 --- /dev/null +++ b/libXm/linux86/Xm/MainWP.h @@ -0,0 +1,133 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MainWP.h /main/12 1995/07/13 17:34:19 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMainWindowP_h +#define _XmMainWindowP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define DEFAULT_HEIGHT 20 +#define DEFAULT_WIDTH 20 + +/* Constraint part record for MainWindow widget */ +typedef struct _XmMainWindowConstraintPart +{ + char unused; +} XmMainWindowConstraintPart, * XmMainWindowConstraint; + + +/* New fields for the MainWindow widget class record */ +typedef struct { + XtPointer extension; /* Pointer to extension record */ +} XmMainWindowClassPart; + +/**************** + * + * Class record declaration + * + ****************/ +typedef struct _XmMainWindowClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmScrolledWindowClassPart swindow_class; + XmMainWindowClassPart mwindow_class; +} XmMainWindowClassRec; + +externalref XmMainWindowClassRec xmMainWindowClassRec; + +/**************** + * + * Main Window instance structure. + * + ****************/ +typedef struct { + + + Dimension AreaWidth,AreaHeight; + Dimension margin_width,margin_height; + Widget CommandWindow; + Widget MenuBar; + Widget Message; + unsigned char CommandLoc; + XmSeparatorGadget Sep1,Sep2,Sep3; + Boolean ManagingSep; + Boolean ShowSep; + +} XmMainWindowPart; + + +/************************************************************************ + * * + * Full instance record declaration * + * * + ************************************************************************/ + +typedef struct _XmMainWindowRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmScrolledWindowPart swindow; + XmMainWindowPart mwindow; +} XmMainWindowRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMainWindowP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Manager.h b/libXm/linux86/Xm/Manager.h new file mode 100644 index 0000000..a2e83a1 --- /dev/null +++ b/libXm/linux86/Xm/Manager.h @@ -0,0 +1,70 @@ +/* $XConsortium: Manager.h /main/5 1995/07/15 20:52:43 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmManager_h +#define _XmManager_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsManager +#define XmIsManager(w) XtIsSubclass(w, xmManagerWidgetClass) +#endif /* XmIsManager */ + +externalref WidgetClass xmManagerWidgetClass; + +typedef struct _XmManagerClassRec * XmManagerWidgetClass; +typedef struct _XmManagerRec * XmManagerWidget; + + +/******** Public Function Declarations ********/ + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmManager_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ManagerP.h b/libXm/linux86/Xm/ManagerP.h new file mode 100644 index 0000000..f925cf1 --- /dev/null +++ b/libXm/linux86/Xm/ManagerP.h @@ -0,0 +1,215 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ManagerP.h /main/10 1996/03/28 15:59:43 daniel $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmManagerP_h +#define _XmManagerP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Access Macros */ + +#define XmParentTopShadowGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.top_shadow_GC) + +#define XmParentBottomShadowGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.bottom_shadow_GC) + +#define XmParentHighlightGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.highlight_GC) + +#define XmParentBackgroundGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.background_GC) + + +#define MGR_KeyboardList(m) \ + (((XmManagerRec *) (m))->manager.keyboard_list) +#define MGR_NumKeyboardEntries(m) \ + (((XmManagerRec *) (m))->manager.num_keyboard_entries) +#define MGR_SizeKeyboardList(m) \ + (((XmManagerRec *) (m))->manager.size_keyboard_list) +#define MGR_ShadowThickness(m) \ + (((XmManagerRec *) (m))->manager.shadow_thickness) + + +#define XmInheritTraversalChildrenProc ((XmTraversalChildrenProc) _XtInherit) +#define XmInheritObjectAtPointProc ((XmObjectAtPointProc) _XtInherit) + +typedef Boolean (*XmTraversalChildrenProc)( Widget, Widget **, Cardinal *) ; +typedef Widget (*XmObjectAtPointProc)(Widget, Position, Position) ; + + +/* Structure used for storing accelerator and mnemonic information. */ + +typedef struct +{ + unsigned int eventType; + KeySym keysym; + KeyCode key; + unsigned int modifiers; + Widget component; + Boolean needGrab; + Boolean isMnemonic; +} XmKeyboardData; + + +/* The class definition */ + +typedef struct { + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmTraversalChildrenProc traversal_children ; + XmObjectAtPointProc object_at_point ; +} XmManagerClassExtRec, *XmManagerClassExt ; + +#define XmManagerClassExtVersion 1L + +typedef struct _XmManagerClassPart +{ + String translations; + XmSyntheticResource * syn_resources; + int num_syn_resources; + XmSyntheticResource * syn_constraint_resources; + int num_syn_constraint_resources; + XmParentProcessProc parent_process; + XtPointer extension; +} XmManagerClassPart; + +typedef struct _XmManagerClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; +} XmManagerClassRec; + +externalref XmManagerClassRec xmManagerClassRec; + + +/* The instance definition */ + +typedef struct _XmManagerPart +{ + Pixel foreground; + + Dimension shadow_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Pixel highlight_color; + Pixmap highlight_pixmap; + + XtCallbackList help_callback; + XtPointer user_data; + + Boolean traversal_on; + unsigned char unit_type; + XmNavigationType navigation_type; + + Boolean event_handler_added; + Widget active_child; + Widget highlighted_widget; + Widget accelerator_widget; + + Boolean has_focus; + + XmStringDirection string_direction; + + XmKeyboardData * keyboard_list; + short num_keyboard_entries; + short size_keyboard_list; + + XmGadget selected_gadget; + XmGadget eligible_for_multi_button_event; + + GC background_GC; + GC highlight_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + + Widget initial_focus; + +#ifndef XM_PART_BC + XtCallbackList popup_handler_callback; +#endif + +} XmManagerPart; + +typedef struct _XmManagerRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; +} XmManagerRec; + + +/* The constraint definition */ + +typedef struct _XmManagerConstraintPart +{ + int unused; +} XmManagerConstraintPart; + +typedef struct _XmManagerConstraintRec +{ + XmManagerConstraintPart manager; +} XmManagerConstraintRec, * XmManagerConstraintPtr; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmManagerP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MenuProcP.h b/libXm/linux86/Xm/MenuProcP.h new file mode 100644 index 0000000..e8cfd6b --- /dev/null +++ b/libXm/linux86/Xm/MenuProcP.h @@ -0,0 +1,61 @@ +/* $XConsortium: MenuProcP.h /main/4 1995/07/15 20:52:51 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmMenuProcP_h +#define _XmMenuProcP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct _XmTranslRec +{ + XtTranslations translations; + struct _XmTranslRec * next; +}; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuProcP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MenuShell.h b/libXm/linux86/Xm/MenuShell.h new file mode 100644 index 0000000..b354d9f --- /dev/null +++ b/libXm/linux86/Xm/MenuShell.h @@ -0,0 +1,79 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MenuShell.h /main/11 1995/07/13 17:36:21 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMenuShell_h +#define _XmMenuShell_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmMenuShellWidgetClass; + +typedef struct _XmMenuShellClassRec * XmMenuShellWidgetClass; +typedef struct _XmMenuShellWidgetRec * XmMenuShellWidget; + +#ifndef XmIsMenuShell +#define XmIsMenuShell(w) XtIsSubclass(w, xmMenuShellWidgetClass) +#endif /* XmIsMenuShell */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateMenuShell( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MenuShellP.h b/libXm/linux86/Xm/MenuShellP.h new file mode 100644 index 0000000..e51dd80 --- /dev/null +++ b/libXm/linux86/Xm/MenuShellP.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MenuShellP.h /main/11 1995/07/13 17:36:37 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMenuShellP_h +#define _XmMenuShellP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The MenuShell instance record */ + +typedef struct +{ + unsigned char focus_policy; + XmFocusData focus_data; + Boolean private_shell; + XmFontList default_font_list; + XmFontList button_font_list; + XmFontList label_font_list; + XmDirection layout_direction; + Boolean animate; +} XmMenuShellPart; + + +/* Full instance record declaration */ + +typedef struct _XmMenuShellRec +{ + CorePart core; + CompositePart composite; + ShellPart shell; + OverrideShellPart override; + XmMenuShellPart menu_shell; +} XmMenuShellRec; + +typedef struct _XmMenuShellWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ShellPart shell; + OverrideShellPart override; + XmMenuShellPart menu_shell; +} XmMenuShellWidgetRec; + + + +/* MenuShell class structure */ + +typedef struct +{ + XtActionProc popdownOne; /* unpost portion or all of menu */ + XtActionProc popdownEveryone; /* unpost portion of menu */ + XtActionProc popdownDone; /* unpost all menus */ + XmMenuPopupProc popupSharedMenupane; /* post shared menus */ + /* (should be popupSharedMenuShell) */ + XtPointer extension; /* Pointer to extension record */ +} XmMenuShellClassPart; + + +/* Full class record declaration */ + +typedef struct _XmMenuShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + OverrideShellClassPart override_shell_class; + XmMenuShellClassPart menu_shell_class; +} XmMenuShellClassRec; + + +externalref XmMenuShellClassRec xmMenuShellClassRec; + +#define MS_FocusPolicy(m) \ + (((XmMenuShellWidget)m)->menu_shell.focus_policy) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MenuStateP.h b/libXm/linux86/Xm/MenuStateP.h new file mode 100644 index 0000000..7a1d427 --- /dev/null +++ b/libXm/linux86/Xm/MenuStateP.h @@ -0,0 +1,56 @@ +/* $XConsortium: MenuStateP.h /main/4 1995/07/15 20:52:59 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmMenuStateP_h +#define _XmMenuStateP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuStateP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MenuT.h b/libXm/linux86/Xm/MenuT.h new file mode 100644 index 0000000..8d6289e --- /dev/null +++ b/libXm/linux86/Xm/MenuT.h @@ -0,0 +1,143 @@ +/* $XConsortium: MenuT.h /main/5 1995/07/15 20:53:03 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmMenuT_H +#define _XmMenuT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Quick fix for Linux-ARM where "arm" is the #define symbol */ +#ifdef arm +# undef arm +#endif + +/* Menu System Traits */ +externalref XrmQuark XmQTmenuSystem; +externalref XrmQuark XmQTmenuSavvy; + +/* Trait structures and typedefs, place typedefs first */ + +/* Used by the disable callback method of the menu savvy trait */ +typedef enum { + XmDISABLE_ACTIVATE, /* defer to the entryCallback */ + XmENABLE_ACTIVATE /* invoke own activate callback */ +} XmActivateState; + +/* Menu trait typedefs */ + +typedef int (*XmMenuSystemWidgetProc)(Widget); +typedef Boolean (*XmMenuSystemVerifyProc)(Widget, XEvent*); +typedef void (*XmMenuSystemControlTraversalProc)(Widget, Boolean); +typedef void (*XmMenuSystemCascadeProc)(Widget, Widget, XEvent*); +typedef void (*XmMenuSystemPositionProc)(Widget, XEvent*); +typedef Boolean (*XmMenuSystemPopdownProc)(Widget, XEvent*); +typedef void (*XmMenuSystemEntryCallbackProc)(Widget, Widget, XtPointer); +typedef Boolean (*XmMenuSystemUpdateHistoryProc)(Widget, Widget, Boolean); +typedef void (*XmMenuSystemUpdateBindingsProc)(Widget, int); +typedef void (*XmMenuSystemRecordPostFromWidgetProc)(Widget, Widget, Boolean); +typedef void (*XmMenuSystemDisarmProc)(Widget); +typedef Widget (*XmMenuSystemPopupPostedProc)(Widget); +typedef void (*XmMenuSavvyDisableProc)(Widget, XmActivateState); +typedef char* (*XmMenuSavvyGetAcceleratorProc)(Widget); +typedef KeySym (*XmMenuSavvyGetMnemonicProc)(Widget); +typedef char* (*XmMenuSavvyGetActivateCBNameProc)(); +#define XmMenuSystemTypeProc XmMenuSystemWidgetProc +#define XmMenuSystemStatusProc XmMenuSystemWidgetProc +#define XmMenuSystemGetPostedFromWidgetProc XmMenuSystemDisarmProc +#define XmMenuSystemArmProc XmMenuSystemDisarmProc +#define XmMenuSystemMenuBarCleanupProc XmMenuSystemDisarmProc +#define XmMenuSystemTearOffArmProc XmMenuSystemDisarmProc +#define XmMenuSystemReparentProc XmMenuSystemPositionProc +#define XmMenuSystemPopdownAllProc XmMenuSystemPositionProc +#define XmMenuSystemChildFocusProc XmMenuSystemDisarmProc + +/* XmTmenuProcTrait */ + +/* Version 0: initial release. */ + +typedef struct _XmMenuSystemTraitRec +{ + int version; /* 0 */ + XmMenuSystemTypeProc type; + XmMenuSystemStatusProc status; + XmMenuSystemCascadeProc cascade; + XmMenuSystemVerifyProc verifyButton; + XmMenuSystemControlTraversalProc controlTraversal; + XmMenuSystemMenuBarCleanupProc menuBarCleanup; + XmMenuSystemPopdownProc popdown; + XmMenuSystemPopdownProc buttonPopdown; + XmMenuSystemReparentProc reparentToTearOffShell; + XmMenuSystemReparentProc reparentToMenuShell; + XmMenuSystemArmProc arm; + XmMenuSystemDisarmProc disarm; + XmMenuSystemTearOffArmProc tearOffArm; + XmMenuSystemEntryCallbackProc entryCallback; + XmMenuSystemUpdateHistoryProc updateHistory; + XmMenuSystemGetPostedFromWidgetProc getLastSelectToplevel; + XmMenuSystemPositionProc position; + XmMenuSystemUpdateBindingsProc updateBindings; + XmMenuSystemRecordPostFromWidgetProc recordPostFromWidget; + XmMenuSystemPopdownAllProc popdownEveryone; + XmMenuSystemChildFocusProc childFocus; + XmMenuSystemPopupPostedProc getPopupPosted; +} XmMenuSystemTraitRec, *XmMenuSystemTrait; + +/* XmTmenuSavvyTrait */ + +/* Version 0: initial release. */ + +typedef struct _XmMenuSavvyTraitRec +{ + int version; /* 0 */ + XmMenuSavvyDisableProc disableCallback; + XmMenuSavvyGetAcceleratorProc getAccelerator; + XmMenuSavvyGetMnemonicProc getMnemonic; + XmMenuSavvyGetActivateCBNameProc getActivateCBName; +} XmMenuSavvyTraitRec, *XmMenuSavvyTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuT_H */ diff --git a/libXm/linux86/Xm/MenuUtilP.h b/libXm/linux86/Xm/MenuUtilP.h new file mode 100644 index 0000000..9e1f42d --- /dev/null +++ b/libXm/linux86/Xm/MenuUtilP.h @@ -0,0 +1,56 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MenuUtilP.h /main/9 1995/07/13 17:37:16 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmMenuUtilP_h +#define _XmMenuUtilP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuUtilP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MessageB.h b/libXm/linux86/Xm/MessageB.h new file mode 100644 index 0000000..ce311d1 --- /dev/null +++ b/libXm/linux86/Xm/MessageB.h @@ -0,0 +1,124 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MessageB.h /main/11 1995/07/13 17:37:42 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMessage_h +#define _XmMessage_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmMessageBoxWidgetClass; + +typedef struct _XmMessageBoxClassRec * XmMessageBoxWidgetClass; +typedef struct _XmMessageBoxRec * XmMessageBoxWidget; + +/* fast XtIsSubclass define */ +#ifndef XmIsMessageBox +#define XmIsMessageBox(w) XtIsSubclass (w, xmMessageBoxWidgetClass) +#endif + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateMessageBox( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateMessageDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateErrorDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateInformationDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateQuestionDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateWarningDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateWorkingDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateTemplateDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmMessageBoxGetChild( + Widget widget, +#if NeedWidePrototypes + unsigned int child) ; +#else + unsigned char child) ; +#endif /* NeedWidePrototypes */ + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMessage_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MessageBP.h b/libXm/linux86/Xm/MessageBP.h new file mode 100644 index 0000000..52b2cba --- /dev/null +++ b/libXm/linux86/Xm/MessageBP.h @@ -0,0 +1,136 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MessageBP.h /main/10 1995/07/13 17:38:00 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmessageP_h +#define _XmessageP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constraint part record for MessageBox widget */ + +typedef struct _XmMessageBoxConstraintPart +{ + char unused; +} XmMessageBoxConstraintPart, * XmMessageBoxConstraint; + + +/* New fields for the MessageBox widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmMessageBoxClassPart; + + +/* Full class record declaration */ + +typedef struct _XmMessageBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmMessageBoxClassPart message_box_class; +} XmMessageBoxClassRec; + +externalref XmMessageBoxClassRec xmMessageBoxClassRec; + + +/* New fields for the MessageBox widget record */ + +typedef struct +{ + unsigned char dialog_type; + unsigned char default_type; + Boolean internal_pixmap; + Boolean minimize_buttons; + + unsigned char message_alignment; + XmString message_string; + Widget message_wid; + + Pixmap symbol_pixmap; + Widget symbol_wid; + + XmString ok_label_string; + XtCallbackList ok_callback; + Widget ok_button; + + XmString cancel_label_string; + XtCallbackList cancel_callback; + + XmString help_label_string; + Widget help_button; + + Widget separator; + +} XmMessageBoxPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmMessageBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmMessageBoxPart message_box; +} XmMessageBoxRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMessage_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/MwmUtil.h b/libXm/linux86/Xm/MwmUtil.h new file mode 100644 index 0000000..d2ffebf --- /dev/null +++ b/libXm/linux86/Xm/MwmUtil.h @@ -0,0 +1,248 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MwmUtil.h /main/11 1995/08/18 17:42:47 drk $ */ +/* +* (c) Copyright 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMwmUtil_h +#define _XmMwmUtil_h + +#include /* for protocol typedefs */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Contents of the _MWM_HINTS property. + */ + +typedef struct +{ + /* These correspond to XmRInt resources. (VendorSE.c) */ + int flags; + int functions; + int decorations; + int input_mode; + int status; +} MotifWmHints; + +typedef MotifWmHints MwmHints; + +/* bit definitions for MwmHints.flags */ +#define MWM_HINTS_FUNCTIONS (1L << 0) +#define MWM_HINTS_DECORATIONS (1L << 1) +#define MWM_HINTS_INPUT_MODE (1L << 2) +#define MWM_HINTS_STATUS (1L << 3) + +/* bit definitions for MwmHints.functions */ +#define MWM_FUNC_ALL (1L << 0) +#define MWM_FUNC_RESIZE (1L << 1) +#define MWM_FUNC_MOVE (1L << 2) +#define MWM_FUNC_MINIMIZE (1L << 3) +#define MWM_FUNC_MAXIMIZE (1L << 4) +#define MWM_FUNC_CLOSE (1L << 5) + +/* bit definitions for MwmHints.decorations */ +#define MWM_DECOR_ALL (1L << 0) +#define MWM_DECOR_BORDER (1L << 1) +#define MWM_DECOR_RESIZEH (1L << 2) +#define MWM_DECOR_TITLE (1L << 3) +#define MWM_DECOR_MENU (1L << 4) +#define MWM_DECOR_MINIMIZE (1L << 5) +#define MWM_DECOR_MAXIMIZE (1L << 6) + + +/* definitions for running automated tests */ + + +#define WINDOW_MINIMIZE_INFO 0 +#define WINDOW_MAXIMIZE_INFO 1 +#define WINDOW_MOVE_INFO 2 +#define WINDOW_RAISE_INFO 3 +#define WINDOW_RESIZE_NORTH_INFO 4 +#define WINDOW_RESIZE_SOUTH_INFO 5 +#define WINDOW_RESIZE_EAST_INFO 6 +#define WINDOW_RESIZE_WEST_INFO 7 +#define WINDOW_RESIZE_NORTHEAST_INFO 8 +#define WINDOW_RESIZE_NORTHWEST_INFO 9 +#define WINDOW_RESIZE_SOUTHEAST_INFO 10 +#define WINDOW_RESIZE_SOUTHWEST_INFO 11 +#define WINDOW_MENU_ITEM_SELECT_INFO 12 +#define WINDOW_DEICONIFY_INFO 13 +#define WINDOW_MENU_POST_INFO 14 +#define WINDOW_FOCUS_INFO 15 +#define WINDOW_MENU_UNPOST_INFO 16 +#define WINDOW_MENU_ITEM_CHECK_INFO 17 +#define ICON_MOVE_INFO 18 +#define ICON_MENU_POST_INFO 19 +#define ICON_MENU_UNPOST_INFO 20 +#define ICON_MENU_ITEM_SELECT_INFO 21 + +#define WM_NORTHWEST 0 +#define WM_NORTH 1 +#define WM_NORTHEAST 2 +#define WM_WEST 3 +#define WM_EAST 4 +#define WM_SOUTHWEST 5 +#define WM_SOUTH 6 +#define WM_SOUTHEAST 7 + +#define INVALID -1 +#define MAX_MENU_ITEMS 20 +#define MAX_NAME_LEN 95 + + +/* values for MwmHints.input_mode */ +#define MWM_INPUT_MODELESS 0 +#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1 +#define MWM_INPUT_SYSTEM_MODAL 2 +#define MWM_INPUT_FULL_APPLICATION_MODAL 3 + +/* bit definitions for MwmHints.status */ +#define MWM_TEAROFF_WINDOW (1L << 0) + +/* + * The following is for compatibility only. It use is deprecated. + */ +#define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL + + +/* + * Contents of the _MWM_INFO property. + */ + +typedef struct +{ + long flags; + Window wm_window; +} MotifWmInfo; + +typedef MotifWmInfo MwmInfo; + +/* bit definitions for MotifWmInfo .flags */ +#define MWM_INFO_STARTUP_STANDARD (1L << 0) +#define MWM_INFO_STARTUP_CUSTOM (1L << 1) + + + +/* + * Definitions for the _MWM_HINTS property. + */ + +typedef struct +{ + /* 32-bit property items are stored as long on the client (whether + * that means 32 bits or 64). XChangeProperty handles the conversion + * to the actual 32-bit quantities sent to the server. + */ + unsigned long flags; + unsigned long functions; + unsigned long decorations; + long inputMode; + unsigned long status; +} PropMotifWmHints; + +typedef PropMotifWmHints PropMwmHints; + + +/* number of elements of size 32 in _MWM_HINTS */ +#define PROP_MOTIF_WM_HINTS_ELEMENTS 5 +#define PROP_MWM_HINTS_ELEMENTS PROP_MOTIF_WM_HINTS_ELEMENTS + +/* atom name for _MWM_HINTS property */ +#define _XA_MOTIF_WM_HINTS "_MOTIF_WM_HINTS" +#define _XA_MWM_HINTS _XA_MOTIF_WM_HINTS + +/* + * Definitions for the _MWM_MESSAGES property. + */ + +#define _XA_MOTIF_WM_MESSAGES "_MOTIF_WM_MESSAGES" +#define _XA_MWM_MESSAGES _XA_MOTIF_WM_MESSAGES + +/* atom that enables client frame offset messages */ +#define _XA_MOTIF_WM_OFFSET "_MOTIF_WM_OFFSET" + +/* + * Definitions for the _MWM_MENU property. + */ + +/* atom name for _MWM_MENU property */ +#define _XA_MOTIF_WM_MENU "_MOTIF_WM_MENU" +#define _XA_MWM_MENU _XA_MOTIF_WM_MENU + + +/* + * Definitions for the _MWM_INFO property. + */ + +typedef struct +{ + /* 32-bit property items are stored as long on the client (whether + * that means 32 bits or 64). XChangeProperty handles the conversion + * to the actual 32-bit quantities sent to the server. + */ + long flags; + Window wmWindow; +} PropMotifWmInfo; + +typedef PropMotifWmInfo PropMwmInfo; + + +/* number of elements of size 32 in _MWM_INFO */ +#define PROP_MOTIF_WM_INFO_ELEMENTS 2 +#define PROP_MWM_INFO_ELEMENTS PROP_MOTIF_WM_INFO_ELEMENTS + +/* atom name for _MWM_INFO property */ +#define _XA_MOTIF_WM_INFO "_MOTIF_WM_INFO" +#define _XA_MWM_INFO _XA_MOTIF_WM_INFO + + +/* + * Miscellaneous atom definitions + */ + +/* atom for motif input bindings */ +#define _XA_MOTIF_BINDINGS "_MOTIF_BINDINGS" + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMwmUtil_h */ diff --git a/libXm/linux86/Xm/NavigatorT.h b/libXm/linux86/Xm/NavigatorT.h new file mode 100644 index 0000000..4a86301 --- /dev/null +++ b/libXm/linux86/Xm/NavigatorT.h @@ -0,0 +1,126 @@ +/* $XConsortium: NavigatorT.h /main/5 1995/07/15 20:53:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmNavigatorT_H +#define _XmNavigatorT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTnavigator; + +/* Trait structures and typedefs, place typedefs first */ + + +/* this structure is equivalent to an XPoint but in int, + not in Position, which are short */ +typedef struct _TwoDInt { + int x; + int y; +} TwoDIntRec, *TwoDInt; + + +/* this one can be expanded in the future */ +typedef struct _XmNavigatorDataRec { + Mask valueMask ; + Mask dimMask ; + TwoDIntRec value; + TwoDIntRec minimum; + TwoDIntRec maximum; + TwoDIntRec slider_size; + TwoDIntRec increment; + TwoDIntRec page_increment; +} XmNavigatorDataRec, *XmNavigatorData; + +#define NavAllValid (OxFFFF) +#define NavDimMask (1L<<0) +#define NavValue (1L<<1) +#define NavMinimum (1L<<2) +#define NavMaximum (1L<<3) +#define NavSliderSize (1L<<4) +#define NavIncrement (1L<<5) +#define NavPageIncrement (1L<<6) + + + +typedef void (*XmNavigatorMoveCBProc)(Widget nav, + XtCallbackProc moveCB, + XtPointer closure, + Boolean setunset); +typedef void (*XmNavigatorSetValueProc)(Widget nav, + XmNavigatorData nav_data, + Boolean notify); +typedef void (*XmNavigatorGetValueProc)(Widget nav, + XmNavigatorData nav_data); + + + +/* Version 0: initial release. */ + +typedef struct _XmNavigatorTraitRec { + int version; /* 0 */ + XmNavigatorMoveCBProc changeMoveCB; + XmNavigatorSetValueProc setValue; + XmNavigatorGetValueProc getValue; +} XmNavigatorTraitRec, *XmNavigatorTrait; + + +#define NavigDimensionX (1L<<0) +#define NavigDimensionY (1L<<1) + +/* convenience Macros */ +#define ACCESS_DIM(mask,field) ((mask & NavigDimensionX)?(field.x):(field.y)) + +#define ASSIGN_DIM(mask,field,val) \ + { \ + if (mask & NavigDimensionX) \ + (field.x)=(val); \ + else \ + (field.y)=(val); \ + } + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmNavigatorT_H */ diff --git a/libXm/linux86/Xm/Notebook.h b/libXm/linux86/Xm/Notebook.h new file mode 100644 index 0000000..eed1607 --- /dev/null +++ b/libXm/linux86/Xm/Notebook.h @@ -0,0 +1,105 @@ +/* $XConsortium: Notebook.h /main/5 1995/07/15 20:53:41 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmNotebook_h +#define _XmNotebook_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmNotebookWidgetClass; + +typedef struct _XmNotebookClassRec *XmNotebookWidgetClass; +typedef struct _XmNotebookRec *XmNotebookWidget; + + +/************************************************************************ + * Notebook Defines + ************************************************************************/ + +/* XmNotebookPageStatus */ +typedef enum +{ + XmPAGE_FOUND, /* page widget found */ + XmPAGE_INVALID, /* page number out of the range */ + XmPAGE_EMPTY, /* no page widget found */ + XmPAGE_DUPLICATED /* there are more than one page widgets */ +} XmNotebookPageStatus; + +/* Notebook page information structure */ +typedef struct +{ + int page_number; + Widget page_widget; + Widget status_area_widget; + Widget major_tab_widget; + Widget minor_tab_widget; +} XmNotebookPageInfo; + + +/************************************************************************ + * Public Functions + ************************************************************************/ + +#ifndef XmIsNotebook +#define XmIsNotebook(w) XtIsSubclass((w), xmNotebookWidgetClass) +#endif + +extern Widget XmCreateNotebook( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount); + +extern XmNotebookPageStatus XmNotebookGetPageInfo( + Widget notebook, + int page_number, + XmNotebookPageInfo *page_info) ; + + +#ifdef __cplusplus +} +#endif + +#endif /* _XmNotebook_h */ + diff --git a/libXm/linux86/Xm/NotebookP.h b/libXm/linux86/Xm/NotebookP.h new file mode 100644 index 0000000..87e724d --- /dev/null +++ b/libXm/linux86/Xm/NotebookP.h @@ -0,0 +1,212 @@ +/* $XConsortium: NotebookP.h /main/4 1995/07/15 20:53:46 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmNotebookP_h +#define _XmNotebookP_h + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Notebook's constraint info. fields */ +typedef struct _XmNotebookConstraintPart +{ + /* resources */ + int page_number; /* page number */ + unsigned char child_type; /* notebook child type */ + Boolean resizable; /* is this child resizable? */ + + /* private variables */ + Boolean active; /* True if the child is active */ +} XmNotebookConstraintPart, *XmNotebookConstraint; + +typedef struct _XmNotebookConstraintRec +{ + XmManagerConstraintPart manager; + XmNotebookConstraintPart notebook; +} XmNotebookConstraintRec, *XmNotebookConstraintPtr; + + +/* New fields for the Notebook widget class record */ +typedef struct _XmNotebookClassPart +{ + XtPointer extension; +} XmNotebookClassPart; + + +/* Full class record declaration */ +typedef struct _NotebookClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmNotebookClassPart notebook_class; +} XmNotebookClassRec; + +externalref XmNotebookClassRec xmNotebookClassRec; + + +/* New fields for the Notebook widget instance record */ +typedef struct _XmNotebookPart +{ + /* resources */ + int current_page_number; /* the current page number */ + int first_page_number; /* the first page number */ + int last_page_number; /* the last page number */ + unsigned char orientation; /* notebook orientation */ + unsigned char back_page_pos; /* position of back pages */ + Cardinal back_page_number; /* the of back page lines */ + Dimension back_page_size; /* the thickness of back pages */ + Pixel back_page_foreground; /* foreground color for bk pgs */ + Pixel back_page_background; /* background color for bk pgs */ + Pixel frame_background; /* background color for frame */ + unsigned char binding_type; /* binding type */ + Pixmap binding_pixmap; /* pixmap for the binding */ + Pixmap spiral_pixmap; /* pixmap for the spiral binding */ + Dimension binding_width; /* the width of the binding */ + Dimension margin_width; /* horizontal margin between widgets */ + Dimension margin_height; /* vertical margin between widgets */ + Dimension major_spacing; /* gap between major tabs */ + Dimension minor_spacing; /* gap between minor tabs */ + Dimension shadow_thickness; /* notebook frame shadow thickness */ + XtCallbackList page_change_callback;/* the page change callback */ + + /* child widgets */ + Widget scroller; /* the page scroller widget */ + Widget scroller_child; /* TextF child of def page scroller */ + Widget next_major; /* next major tab scroll button */ + Widget prev_major; /* prev major tab scroll button */ + Widget next_minor; /* next minor tab scroll button */ + Widget prev_minor; /* prev minor tab scroll button */ + + /* preferred children sizes */ + Dimension real_binding_width; /* real binding width */ + Dimension real_back_page_number; /* real back page number */ + Dimension page_width; /* width of page widgets */ + Dimension page_height; /* height of page widgets */ + Dimension status_width; /* width of the status areas */ + Dimension status_height; /* height of the status areas */ + Dimension major_width; /* width of major tabs */ + Dimension major_height; /* height of major tabs */ + Dimension minor_width; /* width of minor tabs */ + Dimension minor_height; /* height of minor tabs */ + Dimension scroller_width; /* width of the page scroller */ + Dimension scroller_height; /* height of the page scroller */ + Dimension major_scroller_width; /* width of major scrollers */ + Dimension major_scroller_height; /* height of major scroller */ + Dimension minor_scroller_width; /* width of minor scrollers */ + Dimension minor_scroller_height; /* height of minor scrollers */ + Dimension frame_width; /* width of the frame */ + Dimension frame_height; /* height of the frame */ + + /* for layouting tabs */ + Widget first_major; /* the first major tab */ + Widget old_top_major; /* the old top major tab */ + Widget top_major; /* the top major tab */ + Widget last_major; /* the last major tab */ + Widget first_minor; /* the first minor tab */ + Widget old_top_minor; /* the old top minor tab */ + Widget top_minor; /* the top minor tab */ + Widget last_minor; /* the last minor tab */ + Widget constraint_child; /* changing geom during ConstraintSV */ + + /* shadow thickness state for current page major and minor tab */ + Dimension major_shadow_thickness; /* joined major tab shadow thickness */ + Dimension minor_shadow_thickness; /* joined minor tab shadow thickness */ + Widget major_shadow_child; /* saved shadow thickness tab */ + Widget minor_shadow_child; /* saved shadow thickness tab */ + Boolean in_setshadow; /* setting tab shadow thickness */ + + /* extra position information */ + unsigned char major_pos; /* position of major tabs */ + unsigned char minor_pos; /* position of minor tabs */ + unsigned char binding_pos; /* binding position */ + + /* other misc. variables */ + unsigned char which_tab; /* currently active tab type */ + int last_alloc_num; /* lastly allocated page number */ + unsigned char scroller_status; /* status of the page scroller */ + unsigned short need_scroller; /* need for tab scrollers */ + Boolean dynamic_last_page_num; /* True if using dynamic last page# */ + Boolean in_callback; /* True if processing a callback */ + GC back_page_gc; /* GC for drawing backpages */ + GC frame_gc; /* GC for drawing frame */ + GC binding_gc; /* GC for drawing binding */ + GC foreground_gc; /* GC for drawing foreground */ + GC background_gc; /* GC for drawing background */ + + Boolean first_change_managed; /* flags 1st call to ChangeManaged */ + XmScrollFrameData scroll_frame_data; /* data for ScrollFrame trait */ +} XmNotebookPart; + + +/* Full instance record declaration */ +typedef struct _XmNotebookRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmNotebookPart notebook; +} XmNotebookRec; + + +/****************************************************************************** + * * + * constants & useful macros * + * * + ******************************************************************************/ + +/* internal child types, must not conflict with XmRNBChildType enum */ +#define XmMAJOR_TAB_SCROLLER 12 +#define XmMINOR_TAB_SCROLLER 13 +#define XmTAB_SCROLLER 14 + +#ifdef __cplusplus +} +#endif + +#endif /* _XmNotebookP_h */ + diff --git a/libXm/linux86/Xm/Outline.h b/libXm/linux86/Xm/Outline.h new file mode 100644 index 0000000..c8ae59b --- /dev/null +++ b/libXm/linux86/Xm/Outline.h @@ -0,0 +1,67 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _Outline_h +#define _Outline_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmOutlineClassRec *XmOutlineWidgetClass; +typedef struct _XmOutlineRec *XmOutlineWidget; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL FUNCTION DECLARATIONS +*************************************************************/ + +/* Function Name: XmCreateOutline + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateOutline( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmOutlineWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _Outline_h */ diff --git a/libXm/linux86/Xm/OutlineP.h b/libXm/linux86/Xm/OutlineP.h new file mode 100644 index 0000000..3b534e7 --- /dev/null +++ b/libXm/linux86/Xm/OutlineP.h @@ -0,0 +1,188 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _OutlineP_h +#define _Outlinels -P_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +/************************************************************ +* MACROS +*************************************************************/ + +#define XmOutlineIndex (XmHierarchyIndex + 1) + +extern XmOffsetPtr XmOutline_offsets; +extern XmOffsetPtr XmOutlineC_offsets; + +#define XmOutlineField(w,f,t) XmField(w, XmOutline_offsets, XmOutline, f, t) +#define XmOutline_top_node_of_display(w) XmOutlineField(w, top_node_of_display, OutlineConstraints) +#define XmOutline_max_width(w) XmOutlineField(w, max_width, Dimension) +#define XmOutline_max_widget_width(w) XmOutlineField(w, max_widget_width, Dimension) +#define XmOutline_child_op_list(w) XmOutlineField(w, child_op_list, XmList) +#define XmOutline_ul_point(w) XmOutlineField(w, ul_point, XPoint) +#define XmOutline_lr_point(w) XmOutlineField(w, lr_point, XPoint) +#define XmOutline_draw_gc(w) XmOutlineField(w, draw_gc, GC) + +#define XmOutline_indent_space(w) XmOutlineField(w, indent_space, Dimension) +#define XmOutline_constrain_width(w) XmOutlineField(w, constrain_width, Boolean) +#define XmOutline_connect_nodes(w) XmOutlineField(w, connect_nodes, Boolean) + + + +/* + * WARNING! + * + * These macros don't use the standard fieldmacro(widget) form. They take + * _pointers to OutlineConstraintsRec structures_. Be careful. + */ +#define XmOutlineCField(constraints, variable, type) \ + (*(type *)(((char *) constraints) + \ + XmOutlineC_offsets[XmOutlineIndex] + \ + XtOffsetOf(XmOutlineConstraintPart, variable))) + +#define XmOutlineC_top_node_of_display(c) XmOutlineCField(c, top_node_of_display, HierarchyConstraintRec*) +#define XmOutlineC_widget_x(c) XmOutlineCField(c, widget_x, Position) +#define XmOutlineC_open_close_x(c) XmOutlineCField(c, open_close_x, Position) +#define XmOutlineC_height(c) XmOutlineCField(c, height, Dimension) +#define XmOutlineC_new_x(c) XmOutlineCField(c, new_x, Position) +#define XmOutlineC_new_y(c) XmOutlineCField(c, new_y, Position) +#define XmOutlineC_oc_new_x(c) XmOutlineCField(c, oc_new_x, Position) +#define XmOutlineC_oc_new_y(c) XmOutlineCField(c, oc_new_y, Position) +#define XmOutlineC_map(c) XmOutlineCField(c, map, Boolean) +#define XmOutlineC_unmap(c) XmOutlineCField(c, unmap, Boolean) +#define XmOutlineC_move(c) XmOutlineCField(c, move, Boolean) + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef void (*XmOutlineCalcLocationProc)(Widget, Boolean); +typedef int (*XmOutlineMaxWidthProc)(Widget); + +typedef struct { + /*Calculates the maximum width of the outline.*/ + XmOutlineMaxWidthProc calc_max_width; + /* Calculates the locations of the objects. */ + XmOutlineCalcLocationProc calc_locations; + /* Just in case we need it later. */ + XtPointer extension; +} OutlineClassPart; + +typedef struct _XmOutlineClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + HierarchyClassPart hierarchy_class; + OutlineClassPart outline_class; +} XmOutlineClassRec; + +typedef struct _OutlineNodeInfo { + /* + * Public (Resource) data. + */ + + /* + * Private data. + */ + + HierarchyConstraintRec * top_node_of_display; + + Position widget_x, open_close_x; /*location of node and open/close button*/ + + Dimension height; /* height of this row (max of node and open button). */ + + Position new_x, new_y, oc_new_x, oc_new_y; + Boolean map, unmap, move; +} OutlineNodeInfo; + +typedef OutlineNodeInfo XmOutlineConstraintPart; + +typedef struct _OutlineConstraintRec { + XmManagerConstraintPart manager; + HierNodeInfo hierarchy; + OutlineNodeInfo outline; +} OutlineConstraintRec, *OutlineConstraints; + + +typedef struct _OutlinePart { + /* Resources */ + Dimension indent_space; /* The number of pixels to indent each level */ + + /* Private State */ + + OutlineConstraints top_node_of_display; + + Dimension max_width; /* Width of the widest row. */ + Dimension max_widget_width; /* Width of the widgets in the widest row. */ + + XmList child_op_list; /* List of child operations */ + XPoint ul_point, lr_point; /* Bounding box for exposure compression */ + + /* more resources */ + Boolean constrain_width; + Boolean connect_nodes; + + /* more private */ + GC draw_gc; + +} OutlinePart; + +typedef OutlinePart XmOutlinePart; + +typedef struct _XmOutlineRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + HierarchyPart hierarchy; + OutlinePart outline; +} XmOutlineRec; + +#define XtInheritCalcMaxWidth ((XmOutlineMaxWidthProc)_XtInherit) +#define XtInheritCalcLocations ((XmOutlineCalcLocationProc)_XtInherit) + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmOutlineClassRec xiOutlineClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _OutlineP_h */ diff --git a/libXm/linux86/Xm/Paned.h b/libXm/linux86/Xm/Paned.h new file mode 100644 index 0000000..ec75266 --- /dev/null +++ b/libXm/linux86/Xm/Paned.h @@ -0,0 +1,116 @@ +/*********************************************************** +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * Paned.h - Paned Composite Widget's public header file. + * + * Updated and significantly modifided from the Athena VPaned Widget. + * + * Date: March 1, 1989 + * + * By: Chris D. Peterson + * MIT X Consortium + * kit@expo.lcs.mit.edu + */ + +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Tony Auito, Chris D. Peterson + */ + +#ifndef _XmPaned_h +#define _XmPaned_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmPanedAskChild 0 + +typedef struct _XmPanedClassRec *XmPanedWidgetClass; +typedef struct _XmPanedRec *XmPanedWidget; + +/* + * For people used to Motif names this will make things easier. + */ + +#define xmPanedWindowWidgetClass xmPanedWidgetClass + +/************************************************************ + * + * Public Procedures + * + ************************************************************/ + +/* Function Name: XmPanedGetPanes + * Description: Returns the number of panes in the paned widget. + * Arguments: w - the paned widget. + * panes - the list of all panes contained in this widget. + * num - the number of panes. + * Returns: the number of panes in the paned widget. + */ + +extern int XmPanedGetPanes( +#ifndef _NO_PROTO + Widget /* w */, + WidgetList * /* panes */, + int * /* num */ +#endif +); + +/* Function Name: XmCreatePaned + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreatePaned( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/* Class record constant */ +extern WidgetClass xmPanedWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmPaned_h -- DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PanedP.h b/libXm/linux86/Xm/PanedP.h new file mode 100644 index 0000000..aa82c32 --- /dev/null +++ b/libXm/linux86/Xm/PanedP.h @@ -0,0 +1,297 @@ +/*********************************************************** + +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * PanedP.h - Paned Composite Widget's private header file. + * + * Updated and significantly modified from the Athena VPaned Widget. + * + * Date: March 1, 1989 + * + * By: Chris D. Peterson + * MIT X Consortium + * kit@expo.lcs.mit.edu + */ + +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Tony Auito, Chris D. Peterson + */ + +#ifndef _XmPanedP_h +#define _XmPanedP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************************************************* + * + * Paned Widget Private Data + * + *********************************************************************/ + +/* New fields for the Paned widget class record */ + +typedef struct _XmPanedClassPart { + XtPointer extension; +} XmPanedClassPart; + +/* Full Class record declaration */ +typedef struct _XmPanedClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmPanedClassPart paned_class; +} XmPanedClassRec; + +extern XmPanedClassRec xmPanedClassRec; + +/* Paned constraint record */ +typedef struct _XmPanedConstraintsPart { + /* Resources. */ + Dimension min; /* Minimum height */ + Dimension max; /* Maximum height */ + Boolean allow_resize; /* TRUE iff child resize requests are ok */ + Boolean show_sash; /* TRUE iff child will have sash below it, + when it is not the bottom pane. */ + Boolean skip_adjust; /* TRUE iff child's height should not be */ + /* changed without explicit user action. */ + int position; /* position location in Paned (relative to + other children) ** NIY ** */ + Dimension preferred_size; /* The Preferred size of the pane. + Iff this is zero then ask child for size.*/ + Boolean resize_to_pref; /* resize this pane to its preferred size + on a resize or change managed after + realize. */ + Boolean is_a_pane; /* INTERNAL INFO */ + + + /* Private state. */ + Position delta; /* Desired Location */ + Position olddelta; /* The last value of delta. */ + Dimension wp_size; /* widget's preferred on size */ + Dimension wp_off_size; /* widget's preferred off size */ + int size; /* the size the widget will actually get. */ + Widget sash; /* The sash for this child */ + Widget separator; /* The separator for this child */ + + Boolean prefs_inited; /* Preferences have been inited... */ +} XmPanedConstraintsPart, *Pane; + +typedef struct _XmPanedConstraintsRec { + XmManagerConstraintPart manager; + XmPanedConstraintsPart paned; +} XmPanedConstraintsRec, *XmPanedConstraints; + +/* + * Ugliness: the XmOffset macros require this naming convention, yet + * epak already depends on the pluralized name ;( + */ +typedef XmPanedConstraintsPart XmPanedConstraintPart; + +/* + * The Pane Stack Structure. + */ + +typedef struct _PaneStack { + struct _PaneStack * next; /* The next element on the stack. */ + Pane pane; /* The pane in this element on the stack. */ + int start_size; /* The size of this element when it was pushed + onto the stack. */ +} PaneStack; + +#define NO_ADJUST ((char) 0) +#define BEGAN_ADJUST ((char) 1) + +/* New Fields for the XmPaned widget record */ +typedef struct { + /* resources */ + Position sash_indent; /* Location of sashs (per motif) */ + Boolean refiguremode; /* Whether to refigure changes + right now */ + XtTranslations sash_translations; /* sash translation table */ + Dimension internal_bw; /* internal border width. */ + unsigned char orientation; /* Orientation of paned widget. */ + + Cursor cursor; /* Cursor for paned window */ + + /* Things from Motif behaviour */ + Boolean separator_on; /* make separator visible */ + Dimension margin_width; /* space between right and left edges of + Paned window and it's children */ + Dimension margin_height; /* space between top and bottom edges of + Paned window and it's children */ + + /* sash modifying resources */ + Dimension sash_width; /* Modify sash width */ + Dimension sash_height; /* Modify sash height */ + Dimension sash_shadow_thickness; /* Modify sash shadow_thickness */ + + /* Private */ + Boolean recursively_called; /* for ChangeManaged */ + Boolean resize_children_to_pref; /* override constraint resources + and resize all children to + preferred size. */ + short increment_count; /* Sash increment count */ + char repane_status; /* current adjust state. */ + Position start_loc; /* mouse origin when adjusting */ + GC flipgc; /* GC to use when animating + borders */ + short num_panes; /* count of managed panes */ + short num_slots; /*number of avail. slots for kids */ + + PaneStack * stack; /* The pane stack for this widget.*/ + WidgetList managed_children; /* keep track of managed children */ + + Boolean allow_unused_space; /* should the paned widget allow + * a pane to be shrunk to the point + * that there is unused space at + * the bottom/right of the widget */ +} XmPanedPart; + +extern XmOffsetPtr XmPaned_offsets; +extern XmOffsetPtr XmPanedC_offsets; + +/************************************************************************** + * + * Full instance record declaration + * + **************************************************************************/ + +typedef struct _XmPanedRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmPanedPart paned; +} XmPanedRec; + +/************************************************************ + * + * Functions + * + ************************************************************/ +void _XmFromPanedPixels(Widget, int, XtArgVal *); +XmImportOperator _XmToPanedPixels(Widget, int, XtArgVal *); + + +/************************************************************ + * + * Macros + * + ************************************************************/ +/* + * XmResolvePartOffsets stuff follows + */ +#define XmPanedIndex (XmManagerIndex + 1) + +#define PanedField(w, f, t) XmField(w, XmPaned_offsets, XmPaned, f, t) +#define XmPaned_sash_indent(w) PanedField(w, sash_indent, Position) +#define XmPaned_refiguremode(w) PanedField(w, refiguremode, Boolean) +#define XmPaned_sash_translations(w) PanedField(w, sash_translations, XtTranslations) +#define XmPaned_internal_bw(w) PanedField(w, internal_bw, Dimension) +#define XmPaned_orientation(w) PanedField(w, orientation, unsigned char) +#define XmPaned_cursor(w) PanedField(w, cursor, Cursor) +#define XmPaned_separator_on(w) PanedField(w, separator_on, Boolean) +#define XmPaned_margin_width(w) PanedField(w, margin_width, Dimension) +#define XmPaned_margin_height(w) PanedField(w, margin_height, Dimension) +#define XmPaned_sash_width(w) PanedField(w, sash_width, Dimension) +#define XmPaned_sash_height(w) PanedField(w, sash_height, Dimension) +#define XmPaned_sash_shadow_thickness(w) PanedField(w, sash_shadow_thickness, Dimension) +#define XmPaned_recursively_called(w) PanedField(w, recursively_called, Boolean) +#define XmPaned_resize_children_to_pref(w) PanedField(w, resize_children_to_pref, Boolean) +#define XmPaned_increment_count(w) PanedField(w, increment_count, short) +#define XmPaned_repane_status(w) PanedField(w, repane_status, char) +#define XmPaned_start_loc(w) PanedField(w, start_loc, Position) +#define XmPaned_flipgc(w) PanedField(w, flipgc, GC) +#define XmPaned_num_panes(w) PanedField(w, num_panes, short) +#define XmPaned_num_slots(w) PanedField(w, num_slots, short) +#define XmPaned_stack(w) PanedField(w, stack, PaneStack*) +#define XmPaned_managed_children(w) PanedField(w, managed_children, WidgetList) +#define XmPaned_allow_unused_space(w) PanedField(w, allow_unused_space, Boolean) + +#define PanedCField(w,f,t) XmConstraintField(w, XmPanedC_offsets, \ + XmPaned, f, t) +#define XmPanedC_min(w) PanedCField(w, min, Dimension) +#define XmPanedC_max(w) PanedCField(w, max, Dimension) +#define XmPanedC_allow_resize(w) PanedCField(w, allow_resize, Boolean) +#define XmPanedC_show_sash(w) PanedCField(w, show_sash, Boolean) +#define XmPanedC_skip_adjust(w) PanedCField(w, skip_adjust, Boolean) +#define XmPanedC_position(w) PanedCField(w, position, int) +#define XmPanedC_preferred_size(w) PanedCField(w, preferred_size, Dimension) +#define XmPanedC_resize_to_pref(w) PanedCField(w, resize_to_pref, Boolean) +#define XmPanedC_is_a_pane(w) PanedCField(w, is_a_pane, Boolean) +#define XmPanedC_delta(w) PanedCField(w, delta, Position) +#define XmPanedC_olddelta(w) PanedCField(w, olddelta, Position) +#define XmPanedC_wp_size(w) PanedCField(w, wp_size, Dimension) +#define XmPanedC_wp_off_size(w) PanedCField(w, wp_off_size, Dimension) +#define XmPanedC_size(w) PanedCField(w, size, int) +#define XmPanedC_sash(w) PanedCField(w, sash, Widget) +#define XmPanedC_separator(w) PanedCField(w, separator, Widget) +#define XmPanedC_prefs_inited(w) PanedCField(w, prefs_inited, Boolean) + +#define ForceSashOff(pane) ((pane)->min == (pane)->max) +#define PaneConsRec(w) ((XmPanedConstraints)(w)->core.constraints) +#define PaneInfo(w) ((Pane)((char*)((w)->core.constraints) \ + + XmPanedC_offsets[XmPanedIndex])) +#define HasSash(w) (XmPanedC_sash(w) != NULL) +#define HasSep(w) (XmPanedC_separator(w) != NULL) + +#define PaneIndex(w) (XmPanedC_position(w)) +#define IsVert(w) (XmPaned_orientation(w) == XmVERTICAL) + +#define IsLastPane(pw, childP) ((XmPaned_managed_children((pw)) + \ + XmPaned_num_panes((pw)) - 1) == childP) + +#define ForAllPaned(pw, childP) \ + for ( ((childP) = (XmPaned_managed_children((pw)))) ; \ + ((childP) < ((XmPaned_managed_children((pw))) \ + + (XmPaned_num_panes((pw))))) ; \ + (childP)++ ) + +#define NthPane(pw, paneIndex) (XmPaned_managed_children((pw)) + (paneIndex)) + +#ifdef _cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmPanedP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PanedW.h b/libXm/linux86/Xm/PanedW.h new file mode 100644 index 0000000..e9c1ed2 --- /dev/null +++ b/libXm/linux86/Xm/PanedW.h @@ -0,0 +1,87 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PanedW.h /main/11 1995/07/13 17:40:28 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/**************************************************************** + * + * Vertical Paned Widget (SubClass of CompositeClass) + * + ****************************************************************/ +#ifndef _XmPanedW_h +#define _XmPanedW_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constant */ +externalref WidgetClass xmPanedWindowWidgetClass; + +#ifndef XmIsPanedWindow +#define XmIsPanedWindow(w) XtIsSubclass(w, xmPanedWindowWidgetClass) +#endif /* XmIsPanedWindow */ + +typedef struct _XmPanedWindowClassRec *XmPanedWindowWidgetClass; +typedef struct _XmPanedWindowRec *XmPanedWindowWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreatePanedWindow( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPanedWindow_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PanedWP.h b/libXm/linux86/Xm/PanedWP.h new file mode 100644 index 0000000..2f918bc --- /dev/null +++ b/libXm/linux86/Xm/PanedWP.h @@ -0,0 +1,180 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PanedWP.h /main/12 1995/07/13 17:40:37 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/********************************************************************* + * + * XmPanedWindowWidget Private Data + * + *********************************************************************/ + +#ifndef _XmPanedWP_h +#define _XmPanedWP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* New fields for the PanedWindow widget class record */ + +typedef struct _XmPanedWindowClassPart +{ + XtPointer extension; +} XmPanedWindowClassPart; + + +/* Full Class record declaration */ + +typedef struct _XmPanedWindowClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmPanedWindowClassPart paned_window_class; +} XmPanedWindowClassRec; + +externalref XmPanedWindowClassRec xmPanedWindowClassRec; + + +/* PanedWindow constraint record */ + +typedef struct _XmPanedWindowConstraintPart { + int position; /* position location in PanedWindow */ + int dheight; /* Desired size */ + Position dy; /* Desired Location */ + Position olddy; /* The last value of dy. */ + Dimension min; /* Minimum height */ + Dimension max; /* Maximum height */ + Boolean isPane; /* true if constraint of pane, false if + constraint of sash */ + Boolean allow_resize; /* TRUE iff child resize requests are ok */ + Boolean skip_adjust; /* TRUE iff child's height should not be */ + /* changed without explicit user action. */ + Widget sash; /* The sash for this child */ + Widget separator; /* The separator for this child */ + short position_index; /* new 1.2 positionIndex resource */ +} XmPanedWindowConstraintPart; + +typedef struct _XmPanedWindowConstraintRec +{ + XmManagerConstraintPart manager; + XmPanedWindowConstraintPart panedw; +} XmPanedWindowConstraintRec, * XmPanedWindowConstraintPtr; + + +/* New Fields for the PanedWindow widget record */ + +typedef struct { + /* resources */ + Boolean refiguremode; /* Whether to refigure changes right now */ + Boolean separator_on; /* make separator visible */ + + Dimension margin_width; /* space between right and left edges of + PanedWindow window and it's children */ + Dimension margin_height; /* space between top and bottom edges of + PanedWindow window and it's children */ + Dimension spacing; /* whitespace between panes + around window, else leave none */ + /* sash modifying resources */ + Dimension sash_width; /* Modify sash width */ + Dimension sash_height; /* Modify sash height */ + Dimension sash_shadow_thickness; /* Modify sash shadow_thickness */ + + Position sash_indent; /* Location of sashs (offset + from right margin) */ + /* private */ + int starty; /* mouse origin when adjusting */ + + short increment_count; /* Sash increment count */ + short pane_count; /* number of managed panes */ + short num_slots; /* number of avail. slots for children*/ + short num_managed_children; /* holds number of managed children */ + + Boolean recursively_called; /* For change_managed AND creation of + * private sash and separator + * children + */ + Boolean resize_at_realize; /* For realize if GeometryNo condition */ + + XmPanedWindowConstraintPtr top_pane; /* pane closest to 0 index */ + XmPanedWindowConstraintPtr bottom_pane; /* pane farthest away from 0 index*/ + + GC flipgc; /* GC to use when animating borders */ + WidgetList managed_children; /* keep track of managed children */ + + unsigned char orientation ; /* horizontal or vertical panedw */ + + XtIntervalId timer ; /* handle key event on sash */ +} XmPanedWindowPart; + +/************************************************************************** + * + * Full instance record declaration + * + **************************************************************************/ + +typedef struct _XmPanedWindowRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmPanedWindowPart paned_window; +} XmPanedWindowRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPanedWP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Picture.h b/libXm/linux86/Xm/Picture.h new file mode 100644 index 0000000..6c7be97 --- /dev/null +++ b/libXm/linux86/Xm/Picture.h @@ -0,0 +1,64 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _XmPicture_h +#define _XmPicture_h + +#include +#include +#include +#include + +typedef struct _XmPictureRec* XmPicture; +typedef struct _XmPictureStateRec* XmPictureState; + +#ifdef __cplusplus +extern "C" { +#endif + +XmPicture XmParsePicture (char*); +XmPictureState XmGetNewPictureState (XmPicture); +char* XmPictureProcessCharacter(XmPictureState, char, Boolean*); +void XmPictureDelete (XmPicture); +void XmPictureDeleteState (XmPictureState); +char* XmPictureGetCurrentString(XmPictureState); +char* XmPictureDoAutoFill (XmPictureState); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PictureP.h b/libXm/linux86/Xm/PictureP.h new file mode 100644 index 0000000..ad442b2 --- /dev/null +++ b/libXm/linux86/Xm/PictureP.h @@ -0,0 +1,74 @@ +#include + +#define NUMDIGIT '#' +#define HEXDIGIT 'x' +#define OCTALDIGIT 'o' +#define NONCASELETTER '?' +#define UPCASELETTER '&' +#define NONCASECHAR '@' +#define UPCASECHAR '!' +#define ESCAPE ';' +#define CLOSURE '*' +#define LBRACKET '[' +#define RBRACKET ']' +#define LBRACE '{' +#define RBRACE '}' +#define ALTERNATIVE ',' + +#define NODE_START_COUNT 40 + +typedef enum { + NullTransition, /* Transition on no input */ + NumericDigit, /* eqivalent to [0-9] */ + HexDigit, /* eqivalent to [0-9a-fA-F] */ + OctalDigit, /* eqivalent to [0-7] */ + AnyLetter, /* [a-zA-Z] */ + UpCaseLetter, /* ditto, but translates [a-zA-Z] -> [A-Z] */ + AnyCharacter, /* Any printing character */ + UpCaseCharacter, /* ditto, case transition as above */ + LiteralCharacter /* Single character */ +} XmTransType; + +typedef struct _XmPictureTransition { + int destination; /* Node to transition to */ + XmTransType type; /* literal, null, upcasechar, etc... */ + char c; /* key -- used for literals */ + /* OR: count for closures */ + struct _XmPictureTransition *next; /* Next transition from our node */ +} XmPictureTransition; + +typedef struct _XmPictureNode { + int index; + XmPictureTransition *transitions; +} XmPictureNode; + +typedef struct _XmPictureRec { + char * source; /* string it was parsed from */ + int num_nodes; + int nodes_alloced; + int start_node; + int final_node; + XmPictureNode **nodes; /* array of nodes */ +} XmPictureRec; + +typedef struct _XmPictureStateRec { + XmPictureRec *picture; + char *current_string; + char *append; + int statesize; + unsigned char *state; /* bitvector of states */ + unsigned char *newstate; /* scratch space for use in + transitions */ + char current; /* currently added character */ + Boolean upcase; +} XmPictureStateRec; + +typedef struct _XmAutoFill { + char c; /* char to fill */ + Boolean reject; /* literal's didn't match: it's "right out" */ + Boolean digit; /* isdigit(c) must be true */ + Boolean upcase; /* isupper(c) must be true */ + Boolean letter; /* isalpha(c) must be true */ + Boolean hexdigit; /* isxdigit(c) must be true */ + Boolean octaldigit; /* must be 0-7 */ +} XmAutoFill; diff --git a/libXm/linux86/Xm/PointInT.h b/libXm/linux86/Xm/PointInT.h new file mode 100644 index 0000000..184bcb0 --- /dev/null +++ b/libXm/linux86/Xm/PointInT.h @@ -0,0 +1,69 @@ +/* $XConsortium: PointInT.h /main/5 1995/07/15 20:54:18 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmPointInT_H +#define _XmPointInT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTpointIn; + +/* Trait structures and typedefs, place typedefs first */ + +typedef Boolean (*XmPointInProc)(Widget w, + Position x, + Position y); + +typedef struct _XmPointInTraitRec { + int version ; + XmPointInProc pointIn; +} XmPointInTraitRec, *XmPointInTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPointInT_H */ diff --git a/libXm/linux86/Xm/Primitive.h b/libXm/linux86/Xm/Primitive.h new file mode 100644 index 0000000..93ae435 --- /dev/null +++ b/libXm/linux86/Xm/Primitive.h @@ -0,0 +1,70 @@ +/* $XConsortium: Primitive.h /main/5 1995/07/15 20:54:22 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmPrimitive_h +#define _XmPrimitive_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsPrimitive +#define XmIsPrimitive(w) XtIsSubclass(w, xmPrimitiveWidgetClass) +#endif /* XmIsPrimitive */ + +externalref WidgetClass xmPrimitiveWidgetClass; + +typedef struct _XmPrimitiveClassRec * XmPrimitiveWidgetClass; +typedef struct _XmPrimitiveRec * XmPrimitiveWidget; + + +/******** Public Function Declarations ********/ + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrimitive_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PrimitiveP.h b/libXm/linux86/Xm/PrimitiveP.h new file mode 100644 index 0000000..0f3a9c7 --- /dev/null +++ b/libXm/linux86/Xm/PrimitiveP.h @@ -0,0 +1,167 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PrimitiveP.h /main/10 1996/03/28 15:59:54 daniel $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmPrimitiveP_h +#define _XmPrimitiveP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Access Macros */ + +#define Prim_ShadowThickness(w) (((XmPrimitiveWidget)(w))->primitive.shadow_thickness) +#define Prim_HaveTraversal(w) (((XmPrimitiveWidget)(w))->primitive.have_traversal) + +#define PCEPTR(wc) ((XmPrimitiveClassExt *)(&(((XmPrimitiveWidgetClass)(wc))->primitive_class.extension))) +#define _XmGetPrimitiveClassExtPtr(wc, owner) \ + ((*PCEPTR(wc) && (((*PCEPTR(wc))->record_type) == owner))\ + ? PCEPTR(wc) \ + :((XmPrimitiveClassExt *) _XmGetClassExtensionPtr(((XmGenericClassExt *)PCEPTR(wc)), owner))) + + +#define XmPrimitiveClassExtVersion 1L + + +typedef struct _XmPrimitiveClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmWidgetBaselineProc widget_baseline; + XmWidgetDisplayRectProc widget_display_rect; + XmWidgetMarginsProc widget_margins; +} XmPrimitiveClassExtRec, *XmPrimitiveClassExt; + +typedef struct _XmPrimitiveClassPart +{ + XtWidgetProc border_highlight; + XtWidgetProc border_unhighlight; + String translations; + XtActionProc arm_and_activate; + XmSyntheticResource * syn_resources; + int num_syn_resources; + XtPointer extension; +} XmPrimitiveClassPart; + +typedef struct _XmPrimitiveClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; +} XmPrimitiveClassRec; + +externalref XmPrimitiveClassRec xmPrimitiveClassRec; + + +/* The Primitive instance record */ + +typedef struct _XmPrimitivePart +{ + Pixel foreground; + + Dimension shadow_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Dimension highlight_thickness; + Pixel highlight_color; + Pixmap highlight_pixmap; + + XtCallbackList help_callback; + XtPointer user_data; + + Boolean traversal_on; + Boolean highlight_on_enter; + Boolean have_traversal; + + unsigned char unit_type; + XmNavigationType navigation_type; + + Boolean highlight_drawn; + Boolean highlighted; + + GC highlight_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + + /* New fields in Motif 2.0 */ + +#ifndef XM_PART_BC + + XtCallbackList convert_callback; /* Selection convert callback */ + XtCallbackList popup_handler_callback; + + XmDirection layout_direction; +#endif + XmString tool_tip_string; +} XmPrimitivePart; + +#ifdef XM_PART_BC +extern XmDirection XmPrimLayoutDir ; +#define XmPrim_layout_direction(w) (XmPrimLayoutDir) +#else +#define XmPrim_layout_direction(w) ((w)->primitive.layout_direction) +#endif + + +typedef struct _XmPrimitiveRec +{ + CorePart core; + XmPrimitivePart primitive; +} XmPrimitiveRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrimitiveP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Print.h b/libXm/linux86/Xm/Print.h new file mode 100644 index 0000000..02cfd42 --- /dev/null +++ b/libXm/linux86/Xm/Print.h @@ -0,0 +1,60 @@ +/* $XConsortium: Print.h /main/14 1996/10/29 15:50:44 drk $ */ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ +#ifndef _XmPrintShell_h +#define _XmPrintShell_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmPrintShellWidgetClass; + +typedef struct _XmPrintShellClassRec * XmPrintShellWidgetClass; +typedef struct _XmPrintShellRec * XmPrintShellWidget; + + +#ifndef XmIsPrintShell +#define XmIsPrintShell(w) (XtIsSubclass (w, xmPrintShellWidgetClass)) +#endif + +/******** Public Function Declarations ********/ + +extern Widget XmPrintSetup( + Widget video_widget, + Screen *print_screen, + String print_shell_name, + ArgList args, + Cardinal num_args); + +extern void XmRedisplayWidget(Widget widget) ; + +extern XtEnum XmPrintToFile(Display *dpy, + char *file_name, + XPFinishProc finish_proc, + XPointer client_data) ; + +extern XtEnum XmPrintPopupPDM(Widget print_shell, + Widget transient_for); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrintShell_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PrintSP.h b/libXm/linux86/Xm/PrintSP.h new file mode 100644 index 0000000..dca01e9 --- /dev/null +++ b/libXm/linux86/Xm/PrintSP.h @@ -0,0 +1,78 @@ +/* $XConsortium: PrintSP.h /main/8 1996/10/11 10:31:32 drk $ */ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ +#ifndef _XmPrintShellP_h +#define _XmPrintShellP_h + +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * we make it a appShell subclass so it can have it's own instance + * hierarchy + */ + +typedef struct { + XmSyntheticResource * syn_resources; + int num_syn_resources; + XtPointer extension; +} XmPrintShellClassPart; + +typedef struct _XmPrintShellClassRec{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + TopLevelShellClassPart top_level_shell_class; + ApplicationShellClassPart application_shell_class; + XmPrintShellClassPart print_shell_class; +} XmPrintShellClassRec; + + +typedef struct { + Boolean xp_connected ; + Boolean last_page ; + unsigned short print_resolution ; + Position min_x, min_y, max_x, max_y ; + unsigned short default_pixmap_resolution ; + XtCallbackList start_job_callback; + XtCallbackList end_job_callback; + XtCallbackList page_setup_callback; + XtCallbackList pdm_notification_callback ; +} XmPrintShellPart, *XmPrintShellPartPtr; + + +typedef struct _XmPrintShellRec{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TopLevelShellPart topLevel; + ApplicationShellPart application; + XmPrintShellPart print; +} XmPrintShellRec; + +externalref XmPrintShellClassRec xmPrintShellClassRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrintShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/linux86/Xm/Protocols.h b/libXm/linux86/Xm/Protocols.h new file mode 100644 index 0000000..4f70ae5 --- /dev/null +++ b/libXm/linux86/Xm/Protocols.h @@ -0,0 +1,142 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Protocols.h /main/11 1995/07/13 17:41:53 drk $ */ +/* +* (c) Copyright 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmProtocols_h +#define _XmProtocols_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* should be in XmP.h */ + +#ifndef XmCR_WM_PROTOCOLS +#define XmCR_WM_PROTOCOLS 6666 +#endif /* XmCR_WM_PROTOCOLS */ + +/* define the XM_PROTOCOLS atom for use in routines */ +#ifdef XA_WM_PROTOCOLS +#define XM_WM_PROTOCOL_ATOM(shell) XA_WM_PROTOCOLS +#else +#define XM_WM_PROTOCOL_ATOM(shell) \ + XInternAtom(XtDisplay(shell),"WM_PROTOCOLS",FALSE) +#endif /* XA_WM_PROTOCOLS */ + + +#define XmAddWMProtocols(shell, protocols, num_protocols) \ + XmAddProtocols(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocols, num_protocols) + +#define XmRemoveWMProtocols(shell, protocols, num_protocols) \ + XmRemoveProtocols(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocols, num_protocols) + +#define XmAddWMProtocolCallback(shell, protocol, callback, closure) \ + XmAddProtocolCallback(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocol, callback, closure) + +#define XmRemoveWMProtocolCallback(shell, protocol, callback, closure) \ + XmRemoveProtocolCallback(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocol, callback, closure) + +#define XmActivateWMProtocol(shell, protocol) \ + XmActivateProtocol(shell, XM_WM_PROTOCOL_ATOM(shell), protocol) + +#define XmDeactivateWMProtocol(shell, protocol) \ + XmDeactivateProtocol(shell, XM_WM_PROTOCOL_ATOM(shell), protocol) + +#define XmSetWMProtocolHooks(shell, protocol, pre_h, pre_c, post_h, post_c) \ + XmSetProtocolHooks(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocol, pre_h, pre_c, post_h, post_c) + + +/******** Public Function Declarations ********/ + +extern void XmAddProtocols( + Widget shell, + Atom property, + Atom *protocols, + Cardinal num_protocols) ; +extern void XmRemoveProtocols( + Widget shell, + Atom property, + Atom *protocols, + Cardinal num_protocols) ; +extern void XmAddProtocolCallback( + Widget shell, + Atom property, + Atom proto_atom, + XtCallbackProc callback, + XtPointer closure) ; +extern void XmRemoveProtocolCallback( + Widget shell, + Atom property, + Atom proto_atom, + XtCallbackProc callback, + XtPointer closure) ; +extern void XmActivateProtocol( + Widget shell, + Atom property, + Atom proto_atom) ; +extern void XmDeactivateProtocol( + Widget shell, + Atom property, + Atom proto_atom) ; +extern void XmSetProtocolHooks( + Widget shell, + Atom property, + Atom proto_atom, + XtCallbackProc pre_hook, + XtPointer pre_closure, + XtCallbackProc post_hook, + XtPointer post_closure) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmProtocols_h */ diff --git a/libXm/linux86/Xm/ProtocolsP.h b/libXm/linux86/Xm/ProtocolsP.h new file mode 100644 index 0000000..f5070b3 --- /dev/null +++ b/libXm/linux86/Xm/ProtocolsP.h @@ -0,0 +1,102 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ProtocolsP.h /main/10 1995/07/13 17:42:13 drk $ */ +/* (c) Copyright 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmProtocolsP_h +#define _XmProtocolsP_h + +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmProtocolClassPart { + XtPointer extension; +} XmProtocolClassPart; + +typedef struct _XmProtocolClassRec { + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmProtocolClassPart protocol_class; +} XmProtocolClassRec, *XmProtocolObjectClass; + +typedef struct _XmProtocolPart { + XtCallbackRec pre_hook, post_hook; + XtCallbackList callbacks; + Atom atom; + Boolean active; +} XmProtocolPart, *XmProtocolPartPtr; + +typedef struct _XmProtocolRec { + ObjectPart object; + XmExtPart ext; + XmProtocolPart protocol; +} XmProtocolRec, *XmProtocol, **XmProtocolList; + +#ifndef XmIsProtocol +#define XmIsProtocol(w) XtIsSubclass(w, xmProtocolObjectClass) +#endif /* XmIsProtocol */ + +/* Class record constants */ + +externalref XmProtocolClassRec xmProtocolClassRec; +externalref WidgetClass xmProtocolObjectClass; + +typedef struct _XmProtocolMgrRec{ + Atom property; + XmProtocolList protocols; + Cardinal num_protocols; + Cardinal max_protocols; +}XmProtocolMgrRec, *XmProtocolMgr, **XmProtocolMgrList; + + +typedef struct _XmAllProtocolsMgrRec{ + XmProtocolMgrList protocol_mgrs; + Cardinal num_protocol_mgrs; + Cardinal max_protocol_mgrs; + Widget shell; +}XmAllProtocolsMgrRec, *XmAllProtocolsMgr; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmProtocolsP_h */ diff --git a/libXm/linux86/Xm/PushB.h b/libXm/linux86/Xm/PushB.h new file mode 100644 index 0000000..6743aaa --- /dev/null +++ b/libXm/linux86/Xm/PushB.h @@ -0,0 +1,91 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PushB.h /main/12 1995/07/13 17:43:06 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +/*********************************************************************** + * + * PushButton Widget + * + ***********************************************************************/ + +#ifndef _XmPButton_h +#define _XmPButton_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsPushButton +#define XmIsPushButton(w) XtIsSubclass(w, xmPushButtonWidgetClass) +#endif /* XmIsPushButton */ + +/* PushButton Widget */ + +externalref WidgetClass xmPushButtonWidgetClass; + +typedef struct _XmPushButtonClassRec *XmPushButtonWidgetClass; +typedef struct _XmPushButtonRec *XmPushButtonWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreatePushButton( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButton_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PushBG.h b/libXm/linux86/Xm/PushBG.h new file mode 100644 index 0000000..c346bfb --- /dev/null +++ b/libXm/linux86/Xm/PushBG.h @@ -0,0 +1,90 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PushBG.h /main/12 1995/07/13 17:43:54 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +/*********************************************************************** + * + * PushButton Widget + * + ***********************************************************************/ + +#ifndef _XmPButtonG_h +#define _XmPButtonG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsPushButtonGadget +#define XmIsPushButtonGadget(w) XtIsSubclass(w, xmPushButtonGadgetClass) +#endif /* XmIsPushButtonGadget */ + +externalref WidgetClass xmPushButtonGadgetClass; + +typedef struct _XmPushButtonGadgetClassRec *XmPushButtonGadgetClass; +typedef struct _XmPushButtonGadgetRec *XmPushButtonGadget; +typedef struct _XmPushButtonGCacheObjRec *XmPushButtonGCacheObject; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreatePushButtonGadget( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButtonG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PushBGP.h b/libXm/linux86/Xm/PushBGP.h new file mode 100644 index 0000000..b795f71 --- /dev/null +++ b/libXm/linux86/Xm/PushBGP.h @@ -0,0 +1,222 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: PushBGP.h /main/14 1997/04/07 14:57:52 dbl $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmPButtonGP_h +#define _XmPButtonGP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ +/* The PushButton Gadget Cache Object's class and instance records*/ +/*************************************************************/ + +typedef struct _XmPushButtonGCacheObjClassPart +{ + int foo; +} XmPushButtonGCacheObjClassPart; + + +typedef struct _XmPushButtonGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; + XmPushButtonGCacheObjClassPart pushbutton_class_cache; +} XmPushButtonGCacheObjClassRec; + +externalref XmPushButtonGCacheObjClassRec xmPushButtonGCacheObjClassRec; + + +typedef struct _XmPushButtonGCacheObjPart +{ + Boolean fill_on_arm; + Pixel arm_color; + Pixmap arm_pixmap; + Pixmap unarm_pixmap; + unsigned char multiClick; /* KEEP/DISCARD resource */ + Dimension default_button_shadow_thickness; + /* New resource - always add it to gadget's dimension. */ + + GC fill_gc; + GC background_gc; + + /* following items have some persistence across gadget instances and are + ** here only for data-space savings + */ + XtIntervalId timer; + Widget timer_widget; + +} XmPushButtonGCacheObjPart; + +typedef struct _XmPushButtonGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; + XmPushButtonGCacheObjPart pushbutton_cache; +} XmPushButtonGCacheObjRec; + + +/* PushButton class structure */ + +typedef struct _XmPushButtonGadgetClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmPushButtonGadgetClassPart; + + +/* Full class record declaration for PushButton class */ + +typedef struct _XmPushButtonGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; + XmPushButtonGadgetClassPart pushbutton_class; + +} XmPushButtonGadgetClassRec; + + +externalref XmPushButtonGadgetClassRec xmPushButtonGadgetClassRec; + + +/* PushButton instance record */ + +typedef struct _XmPushButtonGadgetPart +{ + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + + Dimension show_as_default; + Boolean armed; + int click_count; + + Boolean compatible; /* if false it is Motif 1.1 else Motif 1.0 */ + /* not cached for performance reasons */ + + XmPushButtonGCacheObjPart *cache; /* Replace cache instance fields */ + /* with a pointer */ +} XmPushButtonGadgetPart; + +/* Full instance record declaration */ + +typedef struct _XmPushButtonGadgetRec { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; + XmPushButtonGadgetPart pushbutton; +} XmPushButtonGadgetRec; + +/* MACROS */ +/**********/ + +/* Macros for cached instance fields */ + +#define PBG_FillOnArm(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->fill_on_arm) +#define PBG_ArmColor(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->arm_color) +#define PBG_FillGc(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->fill_gc) +#define PBG_BackgroundGc(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->background_gc) +#define PBG_Timer(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->timer) +#define PBG_ArmPixmap(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->arm_pixmap) +#define PBG_UnarmPixmap(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->unarm_pixmap) +#define PBG_MultiClick(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->multiClick) +#define PBG_DefaultButtonShadowThickness(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->default_button_shadow_thickness) + +/* Macros for uncached instance fields */ + +#define PBG_ActivateCallback(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.activate_callback) +#define PBG_ArmCallback(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.arm_callback) +#define PBG_DisarmCallback(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.disarm_callback) +#define PBG_Armed(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.armed) +#define PBG_ClickCount(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.click_count) +#define PBG_Compatible(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.compatible) +#define PBG_ShowAsDefault(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.show_as_default) + +/******************************/ +/* Convenience Macros */ +/******************************/ + +#define PBG_Cache(w) (((XmPushButtonGadget)(w))->\ + pushbutton.cache) +#define PBG_ClassCachePart(w) \ + (((XmPushButtonGadgetClass)xmPushButtonGadgetClass)->gadget_class.cache_part) + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButtonGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/PushBP.h b/libXm/linux86/Xm/PushBP.h new file mode 100644 index 0000000..b2543c4 --- /dev/null +++ b/libXm/linux86/Xm/PushBP.h @@ -0,0 +1,126 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PushBP.h /main/12 1995/07/13 17:44:19 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmPButtonP_h +#define _XmPButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PushButton class structure */ + +typedef struct _XmPushButtonClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmPushButtonClassPart; + + +/* Full class record declaration for PushButton class */ + +typedef struct _XmPushButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmPushButtonClassPart pushbutton_class; +} XmPushButtonClassRec; + + +externalref XmPushButtonClassRec xmPushButtonClassRec; + +/* PushButton instance record */ + +typedef struct _XmPushButtonPart +{ + Boolean fill_on_arm; + Dimension show_as_default; + Pixel arm_color; + Pixmap arm_pixmap; + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + + Boolean armed; + Pixmap unarm_pixmap; + GC fill_gc; + GC background_gc; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + Time armTimeStamp; + Boolean compatible; /* if false it is Motif 1.1 else Motif 1.0 */ + Dimension default_button_shadow_thickness; + /* New resource - always add it + to widgets dimension. */ + +} XmPushButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmPushButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmPushButtonPart pushbutton; +} XmPushButtonRec; + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/RCLayoutP.h b/libXm/linux86/Xm/RCLayoutP.h new file mode 100644 index 0000000..630b760 --- /dev/null +++ b/libXm/linux86/Xm/RCLayoutP.h @@ -0,0 +1,55 @@ +/* $XConsortium: RCLayoutP.h /main/4 1995/07/15 20:54:35 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmRCLayoutP_h +#define _XmRCLayoutP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRCLayoutP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/RCMenuP.h b/libXm/linux86/Xm/RCMenuP.h new file mode 100644 index 0000000..58d5800 --- /dev/null +++ b/libXm/linux86/Xm/RCMenuP.h @@ -0,0 +1,53 @@ +/* $XConsortium: RCMenuP.h /main/4 1995/07/15 20:54:39 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmRCMenuP_h +#define _XmRCMenuP_h + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRCMenuP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/RepType.h b/libXm/linux86/Xm/RepType.h new file mode 100644 index 0000000..00f090d --- /dev/null +++ b/libXm/linux86/Xm/RepType.h @@ -0,0 +1,122 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: RepType.h /main/9 1995/07/13 17:47:50 drk $ */ +/* (c) Copyright 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmRepType_h +#define _XmRepType_h + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmREP_TYPE_INVALID 0x1FFF + +typedef unsigned short XmRepTypeId ; + +typedef struct +{ + String rep_type_name ; + String *value_names ; + unsigned char *values ; + unsigned char num_values ; + Boolean reverse_installed ; + XmRepTypeId rep_type_id ; + }XmRepTypeEntryRec, *XmRepTypeEntry, XmRepTypeListRec, *XmRepTypeList ; + + +/******** Public Function Declarations ********/ + +extern XmRepTypeId XmRepTypeRegister( + String rep_type, + String *value_names, + unsigned char *values, +#if NeedWidePrototypes + unsigned int num_values) ; +#else + unsigned char num_values) ; +#endif /* NeedWidePrototypes */ +extern void XmRepTypeAddReverse( +#if NeedWidePrototypes + int rep_type_id) ; +#else + XmRepTypeId rep_type_id) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmRepTypeValidValue( +#if NeedWidePrototypes + int rep_type_id, + unsigned int test_value, +#else + XmRepTypeId rep_type_id, + unsigned char test_value, +#endif /* NeedWidePrototypes */ + Widget enable_default_warning) ; +extern XmRepTypeList XmRepTypeGetRegistered( void ) ; +extern XmRepTypeEntry XmRepTypeGetRecord( +#if NeedWidePrototypes + int rep_type_id) ; +#else + XmRepTypeId rep_type_id) ; +#endif /* NeedWidePrototypes */ +extern XmRepTypeId XmRepTypeGetId( + String rep_type) ; +extern String * XmRepTypeGetNameList( +#if NeedWidePrototypes + int rep_type_id, + int use_uppercase_format) ; +#else + XmRepTypeId rep_type_id, + Boolean use_uppercase_format) ; +#endif /* NeedWidePrototypes */ +extern void XmRepTypeInstallTearOffModelConverter( void ) ; + +/******** End Public Function Declarations ********/ + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRepType_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/RowColumn.h b/libXm/linux86/Xm/RowColumn.h new file mode 100644 index 0000000..538c8da --- /dev/null +++ b/libXm/linux86/Xm/RowColumn.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: RowColumn.h /main/13 1999/01/19 14:07:48 mgreess $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmRowColumn_h +#define _XmRowColumn_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmRowColumnWidgetClass; + +typedef struct _XmRowColumnClassRec * XmRowColumnWidgetClass; +typedef struct _XmRowColumnRec * XmRowColumnWidget; + +#ifndef XmIsRowColumn +#define XmIsRowColumn(w) XtIsSubclass((w),xmRowColumnWidgetClass) +#endif + + +/******** Public Function Declarations ********/ + +extern void XmMenuPosition( + Widget p, + XButtonPressedEvent *event) ; +extern Widget XmCreateRowColumn( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateWorkArea( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateRadioBox( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateOptionMenu( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmOptionLabelGadget( + Widget m) ; +extern Widget XmOptionButtonGadget( + Widget m) ; +extern Widget XmCreateMenuBar( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreatePopupMenu( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreatePulldownMenu( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmGetPostedFromWidget( + Widget menu) ; +extern Widget XmGetTearOffControl( + Widget menu) ; + +extern void XmAddToPostFromList( + Widget m, + Widget widget ); +extern void XmRemoveFromPostFromList( + Widget m, + Widget widget ); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRowColumn_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/RowColumnP.h b/libXm/linux86/Xm/RowColumnP.h new file mode 100644 index 0000000..93d4236 --- /dev/null +++ b/libXm/linux86/Xm/RowColumnP.h @@ -0,0 +1,455 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: RowColumnP.h /main/13 1996/05/21 12:03:34 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmRowColumnP_h +#define _XmRowColumnP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Button Event Status Record for popup verification at manage time */ +typedef struct _XmButtonEventStatusRec +{ + Time time; + Boolean verified; + Boolean waiting_to_be_managed; + XButtonEvent event; +} XmButtonEventStatusRec; + +/* replay info rec - last menu that was posted before event replay */ +typedef struct _XmReplayInfoRec +{ + Time time; + Widget toplevel_menu; +} XmReplayInfoRec; + +typedef struct _XmMenuFocusRec +{ + Widget oldWidget; + Window oldFocus; + int oldRevert; + Time oldTime; +} XmMenuFocusRec; + +/* Menu State is per screen */ +typedef struct _XmMenuStateRec +{ + Widget RC_LastSelectToplevel; + XmButtonEventStatusRec RC_ButtonEventStatus; + XmReplayInfoRec RC_ReplayInfo; +/* + * needed for funky menubar mode so that the traversal can be restored + * to the correct highlighted item when we are done. + */ + Widget RC_activeItem; + XmMenuFocusRec RC_menuFocus; +/* + * A workaround is provided to allow applications to get insensitive + * menu items. This is useful for context "sensitive-shared-tear off- + * accelerated" menu items. Accessed via internal (for now) function, + * _XmAllowAcceleratedInsensitiveUmanagedMenuItems(). + */ + Boolean RC_allowAcceleratedInsensitiveUnmanagedMenuItems; + Time MS_LastManagedMenuTime; + Boolean MU_InDragMode; + Widget MU_CurrentMenuChild; + Boolean MU_InPMMode; +} XmMenuStateRec, *XmMenuState; + + +typedef struct _XmRCKidGeometryRec +{ + Widget kid; + XtWidgetGeometry box; + Dimension margin_top; + Dimension margin_bottom; + Dimension baseline; +} XmRCKidGeometryRec, *XmRCKidGeometry; + +/* The RowColumn instance record */ + +typedef struct _XmRowColumnPart +{ + Dimension margin_height; /* margin around inside of widget */ + Dimension margin_width; + + + Dimension spacing; /* pixels between entries */ + Dimension entry_border; /* size of entry borders */ + + /* next only used w/ menubars */ + + Widget help_pushbutton; /* ptr to help pushbutton widget */ + + Widget cascadeBtn; /* if this menu is pulled down by a */ + /* pulldown widget this will point */ + /* at the pulldown. needed to go */ + /* up the cascade */ + + /* next two only used w/ option menus */ + /* they are really only temporary */ + /* since the data is passed off to */ + /* the pulldown widget which is */ + /* automatically built */ + + XmString option_label; /* label for option menu pulldown */ + + Widget option_submenu; /* which submenu to pulldown */ + + + XmRCKidGeometry boxes; /* when doing menu layouts is an */ + /* array of geo req's to make it easy */ + + WidgetClass entry_class; /* if homogeneous, what class */ + + XtCallbackList entry_callback; /* a child fired off */ + XtCallbackList map_callback; /* about to be mapped call back */ + XtCallbackList unmap_callback; /* about to be unmapped call back */ + + Widget memory_subwidget; /* id of last subwidget that */ + /* fired off. Recorded by the */ + /* entry_fired proc, can be set too */ + /* this causes mouse/muscle memory */ + /* to also be reset */ + + short num_columns; /* if columnar packing this is how */ + /* many columns to use */ + + String menuPost; /* a translation for posting popups */ + unsigned int postButton; /* active mouse button */ + int postEventType; /* active mouse event type */ + unsigned int postModifiers; /* active mouse modifier */ + + String menu_accelerator; + KeySym mnemonic; + XmStringCharSet mnemonicCharSet; + + unsigned char entry_alignment; /* type of label alignment */ + /* our children should have */ + + /* next two are layout, Tight is the */ + /* standard menubar packing. Columns */ + /* is radio box style, orientation */ + /* determines if it is column or row */ + /* major, Vert = column major */ + + unsigned char packing; /* entry packing (layout) style */ + + unsigned char type; /* temporary: diff between menu/bar */ + + unsigned char orientation; /* horizontal or vertical */ + + /* next two indicate how the widget */ + /* responds to size changes if there */ + /* is no geo mgr. If true then the */ + /* dimension is never changed. Set */ + /* to true if dimension is spec'd */ + /* at create time */ + + Boolean armed; /* controls whether pulldowns work */ + /* or not, button down in any part of */ + /* the menubar arms it, this is a bit field */ + /* used for other internal flags, see macros */ + + /* next is only valid for popup menus */ + + Boolean adjust_margin; /* T/F, indicating if we should force */ + /* all subwidgets to have similar */ + /* margins */ + + Boolean adjust_last; /* Indicates whether or not the last row */ + /* row or column should be stretched to */ + /* the edge of the row_column widget. */ + + Boolean do_alignment; /* T/F, do we force alignment on all */ + /* our children */ + + Boolean radio; /* T/F, do we do the toggle button */ + /* 'only-one-down' enforcement */ + + Boolean radio_one; /* T/F, must have one radio button */ + /* set to on */ + + + Boolean homogeneous; /* T/F, do we only allow a single */ + /* class of children */ + + Boolean resize_width; + Boolean resize_height; + + XtEnum popup_enabled; + + Dimension old_width; /* save the old width, etc to use */ + Dimension old_height; /* at resize time since it now has */ + Dimension old_shadow_thickness; /* NW gravity */ + + Widget * postFromList; /* list for sharing menupanes */ + int postFromCount; /* count of the list */ + int postFromListSize; /* size of the malloc'ed list */ + + Widget lastSelectToplevel; /* returned in XmGetPostedFromWidget*/ + Widget popupPosted; /* popup submenu currently posted */ + + unsigned char oldFocusPolicy; /* save when menus begin traversal */ + + /***************** 1.2 ***************/ + unsigned char TearOffModel; /* enable/disable flag */ + Widget ParentShell; /* Save the parent shell when torn */ + Widget tear_off_control; + Boolean to_state; /* tear off state */ + /* tear off activate/deactivate callbacks */ + XtCallbackList tear_off_activated_callback; + XtCallbackList tear_off_deactivated_callback; + Widget tear_off_lastSelectToplevel; + Widget tear_off_focus_item; /* when tear off is inactive */ + + unsigned char entry_vertical_alignment; + unsigned char popup_menu_click; + XtWorkProcId popup_workproc; + XmString tear_off_title; +} XmRowColumnPart; + + +/* Full instance record declaration */ + +typedef struct _XmRowColumnRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmRowColumnPart row_column; +} XmRowColumnRec; + +typedef struct _XmRowColumnWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmRowColumnPart row_column; +} XmRowColumnWidgetRec; + + + +/* RowColumn class structure */ + +typedef struct _XmRowColumnClassPart +{ + XmMenuProc menuProcedures; /* proc to interface with menu widgets */ + XtActionProc armAndActivate; /* proc triggered by acclerator */ + XmMenuTraversalProc traversalHandler;/* proc to handle menu traversal */ + XtPointer extension; /* Pointer to extension record */ +} XmRowColumnClassPart; + + + +typedef struct _XmRowColumnClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmRowColumnClassPart row_column_class; +} XmRowColumnClassRec, *XmRowColumnClass; + +externalref XmRowColumnClassRec xmRowColumnClassRec; + + + +/* Constraint Definition */ + +/* No constraint resources */ + +typedef struct _XmRowColumnConstraintPart +{ + Boolean was_managed; + Dimension margin_top; + Dimension margin_bottom; + Dimension baseline; + short position_index; +} XmRowColumnConstraintPart; + +typedef struct _XmRowColumnConstraintRec +{ + XmManagerConstraintPart manager; + XmRowColumnConstraintPart row_column; +} XmRowColumnConstraintRec; + + +/* Access macros */ + +#define XmRC_ARMED_BIT (1 << 0) +#define XmRC_BEING_ARMED_BIT (1 << 1) /* bits in menu's armed byte */ +#define XmRC_EXPOSE_BIT (1 << 2) /* used in both menu and */ +#define XmRC_WINDOW_MOVED_BIT (1 << 3) /* popup menu, careful */ +#define XmRC_WIDGET_MOVED_BIT (1 << 4) +#define XmRC_POPPING_DOWN_BIT (1 << 5) +#define XmRC_FROM_RESIZE_BIT (1 << 6) + +#define RC_IsArmed(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_ARMED_BIT) +#define RC_BeingArmed(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_BEING_ARMED_BIT) +#define RC_DoExpose(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_EXPOSE_BIT) +#define RC_WidgetHasMoved(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_WIDGET_MOVED_BIT) +#define RC_WindowHasMoved(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_WINDOW_MOVED_BIT) +#define RC_PoppingDown(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_POPPING_DOWN_BIT) +#define RC_FromResize(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_FROM_RESIZE_BIT) + + +#define RC_SetBit(byte,bit,v) byte = (byte & (~bit)) | (v ? bit : 0) + +#define RC_SetArmed(m,v) RC_SetBit (((XmRowColumnWidget)(m))->row_column.armed, XmRC_ARMED_BIT, v) +#define RC_SetBeingArmed(m,v) RC_SetBit (((XmRowColumnWidget)(m))->row_column.armed, XmRC_BEING_ARMED_BIT, v) +#define RC_SetExpose(m,v) RC_SetBit (((XmRowColumnWidget)(m))->row_column.armed, XmRC_EXPOSE_BIT, v) +#define RC_SetWidgetMoved(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_WIDGET_MOVED_BIT,v) +#define RC_SetWindowMoved(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_WINDOW_MOVED_BIT,v) +#define RC_SetPoppingDown(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_POPPING_DOWN_BIT,v) +#define RC_SetFromResize(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_FROM_RESIZE_BIT,v) + +#define RC_MarginW(m) (((XmRowColumnWidget)(m))->row_column.margin_width) +#define RC_MarginH(m) (((XmRowColumnWidget)(m))->row_column.margin_height) + +#define RC_Entry_cb(m) (((XmRowColumnWidget)(m))->row_column.entry_callback) +#define RC_Map_cb(m) (((XmRowColumnWidget)(m))->row_column.map_callback) +#define RC_Unmap_cb(m) (((XmRowColumnWidget)(m))->row_column.unmap_callback) + +#define RC_Orientation(m) (((XmRowColumnWidget)(m))->row_column.orientation) +#define RC_Spacing(m) (((XmRowColumnWidget)(m))->row_column.spacing) +#define RC_EntryBorder(m) (((XmRowColumnWidget)(m))->row_column.entry_border) +#define RC_HelpPb(m) (((XmRowColumnWidget)(m))->row_column.help_pushbutton) +#define RC_DoMarginAdjust(m) (((XmRowColumnWidget)(m))->row_column.adjust_margin) +#define RC_EntryAlignment(m) (((XmRowColumnWidget)(m))->row_column.entry_alignment) +#define RC_EntryVerticalAlignment(m) (((XmRowColumnWidget)(m))->row_column.entry_vertical_alignment) +#define RC_Packing(m) (((XmRowColumnWidget)(m))->row_column.packing) +#define RC_NCol(m) (((XmRowColumnWidget)(m))->row_column.num_columns) +#define RC_AdjLast(m) (((XmRowColumnWidget)(m))->row_column.adjust_last) +#define RC_AdjMargin(m) (((XmRowColumnWidget)(m))->row_column.adjust_margin) +#define RC_MemWidget(m) (((XmRowColumnWidget)(m))->row_column.memory_subwidget) +#define RC_CascadeBtn(m) (((XmRowColumnWidget)(m))->row_column.cascadeBtn) +#define RC_OptionLabel(m) (((XmRowColumnWidget)(m))->row_column.option_label) +#define RC_OptionSubMenu(m) (((XmRowColumnWidget)(m))->row_column.option_submenu) +#define RC_RadioBehavior(m) (((XmRowColumnWidget)(m))->row_column.radio) +#define RC_RadioAlwaysOne(m) (((XmRowColumnWidget)(m))->row_column.radio_one) +#define RC_PopupPosted(m) (((XmRowColumnWidget)(m))->row_column.popupPosted) +#define RC_ResizeHeight(m) (((XmRowColumnWidget)(m))->row_column.resize_height) +#define RC_ResizeWidth(m) (((XmRowColumnWidget)(m))->row_column.resize_width) +#define RC_Type(m) (((XmRowColumnWidget)(m))->row_column.type) +#define RC_EntryClass(m) (((XmRowColumnWidget)(m))->row_column.entry_class) +#define RC_IsHomogeneous(m) (((XmRowColumnWidget)(m))->row_column.homogeneous) +#define RC_Boxes(m) (((XmRowColumnWidget)(m))->row_column.boxes) +#define RC_PopupEnabled(m) (((XmRowColumnWidget)(m))->row_column.popup_enabled) +#define RC_MenuAccelerator(m) (((XmRowColumnWidget)(m))->row_column.menu_accelerator) +#define RC_Mnemonic(m) (((XmRowColumnWidget)(m))->row_column.mnemonic) +#define RC_MnemonicCharSet(m) (((XmRowColumnWidget)(m))->row_column.mnemonicCharSet) +#define RC_MenuPost(m) (((XmRowColumnWidget) m)->row_column.menuPost) +#define RC_PostButton(m) (((XmRowColumnWidget) m)->row_column.postButton) +#define RC_PostModifiers(m) (((XmRowColumnWidget) m)->row_column.postModifiers) +#define RC_PostEventType(m) (((XmRowColumnWidget) m)->row_column.postEventType) + +#define RC_OldFocusPolicy(m) (((XmRowColumnWidget) m)->row_column.oldFocusPolicy) +#define RC_ParentShell(m) (((XmRowColumnWidget) m)->row_column.ParentShell) +#define RC_TearOffControl(m) (((XmRowColumnWidget) m)->row_column.tear_off_control) +#define RC_TearOffModel(m) (((XmRowColumnWidget) m)->row_column.TearOffModel) + +#define RC_popupMenuClick(m) (((XmRowColumnWidget)(m))->row_column.popup_menu_click) + +#define RC_TearOffTitle(m) (((XmRowColumnWidget)(m))->row_column.tear_off_title) + +/* Tear Off State */ + +#define XmTO_TORN_OFF_BIT (1 << 0) +#define XmTO_FROM_INIT_BIT (1 << 1) +#define XmTO_VISUAL_DIRTY_BIT (1 << 2) +#define XmTO_ACTIVE_BIT (1 << 3) + +#define RC_SetTornOff(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_TORN_OFF_BIT,v) + +#define RC_TornOff(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_TORN_OFF_BIT) + +#define RC_SetFromInit(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_FROM_INIT_BIT,v) + +#define RC_FromInit(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_FROM_INIT_BIT) + +#define RC_SetTearOffDirty(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_VISUAL_DIRTY_BIT,v) + +#define RC_TearOffDirty(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_VISUAL_DIRTY_BIT) + +#define RC_TearOffActive(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_ACTIVE_BIT) + +#define RC_SetTearOffActive(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_ACTIVE_BIT,v) + +#define initial_value 0 + +/* Defines used when calling _XmProcessMenuTree() */ + +#define XmADD 0 +#define XmDELETE 1 +#define XmREPLACE 2 + + +/* Defines used when calling _XmMenuIsAccessible() */ + +#define XmWEAK_CHECK 1 +#define XmMEDIUM_CHECK 2 +#define XmSTRONG_CHECK 3 + +#define XmMENU_BEGIN 0 +#define XmMENU_MIDDLE 1 +#define XmMENU_END 2 + +/* Defines used when calling find_first_managed_child() */ +#define ANY_CHILD 0 +#define FIRST_BUTTON 1 + + +#define XmInheritMenuProceduresProc ((XmMenuProc) _XtInherit) +#define XmInheritArmAndActivateProc ((XtActionProc) _XtInherit) +#define XmInheritMenuTraversalProc ((XmMenuTraversalProc) _XtInherit) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRowColumnP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SSpinB.h b/libXm/linux86/Xm/SSpinB.h new file mode 100644 index 0000000..40c7a24 --- /dev/null +++ b/libXm/linux86/Xm/SSpinB.h @@ -0,0 +1,63 @@ +/* $XConsortium: SSpinB.h /main/4 1995/07/15 20:54:58 drk $ */ +/* + * (c) Copyright 1995 Digital Equipment Corporation. + * (c) Copyright 1995 Hewlett-Packard Company. + * (c) Copyright 1995 International Business Machines Corp. + * (c) Copyright 1995 Sun Microsystems, Inc. + * (c) Copyright 1995 Novell, Inc. + * (c) Copyright 1995 FUJITSU LIMITED. + * (c) Copyright 1995 Hitachi. + */ +/****************************************************************************** + * + * File: SSpinB.h + * Date: June 1, 1995 + * Author: Mitchell Greess + * + * Contents: + * Public header file for the XmSimpleSpinBox widget. + * Implements the XmSimpleSpinBox. + * + ******************************************************************************/ + +#ifndef _SSpinB_h +#define _SSpinB_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* XmSimpleSpinBox Widget */ +externalref WidgetClass xmSimpleSpinBoxWidgetClass; + +typedef struct _XmSimpleSpinBoxClassRec *XmSimpleSpinBoxWidgetClass; +typedef struct _XmSimpleSpinBoxRec *XmSimpleSpinBoxWidget; + +/* Spin externs for application accessible functions */ +extern Widget XmCreateSimpleSpinBox( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); + +extern void XmSimpleSpinBoxAddItem( + Widget widget, + XmString item, + int pos); + +extern void XmSimpleSpinBoxDeletePos( + Widget widget, + int pos); + +extern void XmSimpleSpinBoxSetItem( + Widget widget, + XmString item); + +#ifdef __cplusplus +} +#endif + +#endif /* _SSpinB_h */ + diff --git a/libXm/linux86/Xm/SSpinBP.h b/libXm/linux86/Xm/SSpinBP.h new file mode 100644 index 0000000..1921ca8 --- /dev/null +++ b/libXm/linux86/Xm/SSpinBP.h @@ -0,0 +1,117 @@ +/* $TOG: SSpinBP.h /main/6 1999/09/01 17:13:50 mgreess $ */ +/* + * (c) Copyright 1995 Digital Equipment Corporation. + * (c) Copyright 1995 Hewlett-Packard Company. + * (c) Copyright 1995 International Business Machines Corp. + * (c) Copyright 1995 Sun Microsystems, Inc. + * (c) Copyright 1995 Novell, Inc. + * (c) Copyright 1995 FUJITSU LIMITED. + * (c) Copyright 1995 Hitachi. + */ +/****************************************************************************** + * + * File: SSpinBP.h + * Date: June 1, 1995 + * Author: Mitchell Greess + * + * Contents: + * Private header file for the XmSimpleSpinBox widget. + * Implements the XmSimpleSpinBox. + * + ******************************************************************************/ + +#ifndef _SSpinBP_h +#define _SSpinBP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmSimpleSpinBoxConstraint +{ + int unused; +} XmSimpleSpinBoxConstraintPart, *XmSimpleSpinBoxConstraint; + +typedef struct _XmSimpleSpinBoxConstraintRec +{ + XmManagerConstraintPart manager; + XmSpinBoxConstraintPart spinBox; + XmSimpleSpinBoxConstraintPart simpleSpinBox; +} XmSimpleSpinBoxConstraintRec, *XmSimpleSpinBoxConstraintPtr; + +/* Simple Spin Box class structure */ +typedef struct _XmSimpleSpinBoxClassPart +{ + XtPointer extension; /* not used */ +} XmSimpleSpinBoxClassPart; + + +/* Full class record declaration for Simple Spin Box class */ +typedef struct _XmSimpleSpinBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmSpinBoxClassPart spinBox_class; + XmSimpleSpinBoxClassPart simpleSpinBox_class; +} XmSimpleSpinBoxClassRec; + +externalref XmSimpleSpinBoxClassRec xmSimpleSpinBoxClassRec; + +/* The Simple Spin Box instance record */ +typedef struct _XmSimpleSpinBoxPart +{ + /* + * (Public) resources + */ + unsigned char arrow_sensitivity; + Boolean wrap; + + /* Resources for autonumeric mode */ + short decimal_points; + int increment_value; + int maximum_value; + int minimum_value; + + /* Resources for string values mode */ + int num_values; /* number of XmString in the array */ + int position; /* 1-based pos'n of current selection */ + unsigned char position_type; /* governs interpretation of .position: + XmPOSITION_{ARRAY,VALUE} */ + XmStringTable values; /* array of XmString */ + + /* Resources for the text field child of the XmSimpleSpinBox */ + short columns; /* number of columns */ + Boolean editable; /* whether the text field is editable */ + unsigned char sb_child_type; /* XmSTRING or XmNUMERIC */ + Widget text_field; + + /* (Private) state */ +} XmSimpleSpinBoxPart; + + +/* Full instance record declaration */ + +typedef struct _XmSimpleSpinBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmSpinBoxPart spinBox; + XmSimpleSpinBoxPart simpleSpinBox; +} XmSimpleSpinBoxRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _SSpinBP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/linux86/Xm/SashP.h b/libXm/linux86/Xm/SashP.h new file mode 100644 index 0000000..374d738 --- /dev/null +++ b/libXm/linux86/Xm/SashP.h @@ -0,0 +1,128 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SashP.h /main/12 1995/07/13 17:52:08 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* + * SashP.h - Private definitions for Sash widget (Used by VPane Widget) + * + */ + +#ifndef _XmSashP_h +#define _XmSashP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************** + * + * Sash Widget Private Data + * + *****************************************************************************/ + +/* New fields for the Sash widget class record */ +typedef struct { + XtPointer extension; /* Pointer to extension record */ +} XmSashClassPart; + +/* Full Class record declaration */ +typedef struct _XmSashClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmSashClassPart sash_class; +} XmSashClassRec; + +typedef struct _XmSashClassRec *XmSashWidgetClass; + +externalref XmSashClassRec xmSashClassRec; + +/* New fields for the Sash widget record */ +typedef struct { + XtCallbackList sash_action; + Boolean has_focus; +} XmSashPart; + +/***************************************************************************** + * + * Full instance record declaration + * + ****************************************************************************/ + +typedef struct _XmSashRec { + CorePart core; + XmPrimitivePart primitive; + XmSashPart sash; +} XmSashRec; + +typedef struct _XmSashRec *XmSashWidget; + +typedef struct { + XEvent *event; /* the event causing the SashAction */ + String *params; /* the TranslationTable params */ + Cardinal num_params; /* count of params */ +} SashCallDataRec, *SashCallData; + +/* Class Record Constant */ + +externalref WidgetClass xmSashWidgetClass; + +#ifndef XmIsSash +#define XmIsSash(w) XtIsSubclass(w, xmSashWidgetClass) +#endif /* XmIsSash */ + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSashP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Scale.h b/libXm/linux86/Xm/Scale.h new file mode 100644 index 0000000..f7de2a9 --- /dev/null +++ b/libXm/linux86/Xm/Scale.h @@ -0,0 +1,96 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Scale.h /main/11 1995/07/13 17:52:48 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScale_h +#define _XmScale_h + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmScaleWidgetClass; + +/* fast XtIsSubclass define */ +#ifndef XmIsScale +#define XmIsScale(w) XtIsSubclass (w, xmScaleWidgetClass) +#endif + +typedef struct _XmScaleClassRec * XmScaleWidgetClass; +typedef struct _XmScaleRec * XmScaleWidget; + + +/******** Public Function Declarations ********/ + +extern void XmScaleSetValue( + Widget w, + int value) ; +extern void XmScaleGetValue( + Widget w, + int *value) ; +extern Widget XmCreateScale( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern void XmScaleSetTicks( + Widget scale, + int big_every, + Cardinal num_med, + Cardinal num_small, + Dimension size_big, + Dimension size_med, + Dimension size_small); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScale_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ScaleP.h b/libXm/linux86/Xm/ScaleP.h new file mode 100644 index 0000000..8af3de7 --- /dev/null +++ b/libXm/linux86/Xm/ScaleP.h @@ -0,0 +1,163 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScaleP.h /main/13 1995/10/25 20:17:37 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScaleP_h +#define _XmScaleP_h + + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constraint part record for Scale widget */ + +typedef struct _XmScaleConstraintPart +{ + char unused; +} XmScaleConstraintPart, * XmScaleConstraint; + + +/* New fields for the Scale widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmScaleClassPart; + + +/* Full class record declaration */ + +typedef struct _XmScaleClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmScaleClassPart scale_class; +} XmScaleClassRec; + +externalref XmScaleClassRec xmScaleClassRec; + + +/* New fields for the Scale widget record */ + +typedef struct +{ + int value; + int maximum; + int minimum; + unsigned char orientation; + unsigned char processing_direction; + XmString title; + XmFontList font_list; + XFontStruct * font_struct; + Boolean show_value; + short decimal_points; + Dimension scale_width; + Dimension scale_height; + Dimension highlight_thickness; + Boolean highlight_on_enter; + XtCallbackList drag_callback; + XtCallbackList value_changed_callback; + + /* this field is unused since 1.2 and + has a new meaning in 2.0: a bitfield + that carries instance states: FROM_SET_VALUE, etc + The field will be referenced as scale.state_flags + using a define in the .c file */ + /* Note: Instead, last_value is now being used to resolve between + * XmRenderTable & XmFontList when setting up the resource table + */ + int last_value; + + int slider_size; + GC foreground_GC; + int show_value_x; + int show_value_y; + int show_value_width; + int show_value_height; + int scale_multiple; + + XtEnum sliding_mode; + XtEnum slider_visual; + XtEnum slider_mark; + XtEnum show_arrows; + Boolean editable; + + XtCallbackList convert_callback; /* Selection convert callback */ + + Region value_region; +} XmScalePart; + + +#define FROM_SET_VALUE (1<<0) + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmScaleRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmScalePart scale; +} XmScaleRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScaleP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Screen.h b/libXm/linux86/Xm/Screen.h new file mode 100644 index 0000000..d4f5ee6 --- /dev/null +++ b/libXm/linux86/Xm/Screen.h @@ -0,0 +1,81 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Screen.h /main/9 1995/07/13 17:53:35 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmScreen_h +#define _XmScreen_h + +#include +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsScreen +#define XmIsScreen(w) (XtIsSubclass(w, xmScreenClass)) +#endif /* XmIsScreen */ + +/* Class record constants */ + +typedef struct _XmScreenRec *XmScreen; +typedef struct _XmScreenClassRec *XmScreenClass; +externalref WidgetClass xmScreenClass; + + +/******** Public Function Declarations ********/ + +typedef void (*XmScreenColorProc) (Screen * screen, + XColor *bg_color, XColor *fg_color, + XColor *sel_color, XColor *ts_color, + XColor *bs_color); +typedef Status (*XmAllocColorProc) (Display *display, + Colormap colormap, + XColor *screen_in_out); +extern Widget XmGetXmScreen( + Screen *screen) ; +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScreen_h */ + diff --git a/libXm/linux86/Xm/ScreenP.h b/libXm/linux86/Xm/ScreenP.h new file mode 100644 index 0000000..9ba0726 --- /dev/null +++ b/libXm/linux86/Xm/ScreenP.h @@ -0,0 +1,164 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScreenP.h /main/8 1995/07/13 17:53:51 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmScreenP_h +#define _XmScreenP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmScreenClassPart { + XtPointer extension; +} XmScreenClassPart, *XmScreenClassPartPtr; + +typedef struct _XmScreenClassRec { +/* ObjectClassPart object_class; + XmExtClassPart ext_class; */ + CoreClassPart core_class ; + XmDesktopClassPart desktop_class; + XmScreenClassPart screen_class; +} XmScreenClassRec; + +typedef struct _XmDragCursorRec { + struct _XmDragCursorRec *next; + Cursor cursor; + XmDragIconObject stateIcon; + XmDragIconObject opIcon; + XmDragIconObject sourceIcon; + Boolean dirty; +} XmDragCursorRec, *XmDragCursorCache; + +typedef struct _XmScratchPixmapKeyRec *XmScratchPixmapKey; + +typedef struct _XmScratchPixmapKeyRec { + Cardinal depth; + Dimension width; + Dimension height; +} XmScratchPixmapKeyRec; + +typedef struct { + Boolean mwmPresent; + unsigned short numReparented; + int darkThreshold; + int foregroundThreshold; + int lightThreshold; + XmDragIconObject defaultNoneCursorIcon; + XmDragIconObject defaultValidCursorIcon; + XmDragIconObject defaultInvalidCursorIcon; + XmDragIconObject defaultMoveCursorIcon; + XmDragIconObject defaultCopyCursorIcon; + XmDragIconObject defaultLinkCursorIcon; + XmDragIconObject defaultSourceCursorIcon; + + Cursor nullCursor; + XmDragCursorRec *cursorCache; + Cardinal maxCursorWidth; + Cardinal maxCursorHeight; + + Cursor menuCursor; + unsigned char unpostBehavior; + XFontStruct * font_struct; + int h_unit; + int v_unit; + XtPointer scratchPixmaps; + unsigned char moveOpaque; + XmScreenColorProc color_calc_proc; + XmAllocColorProc color_alloc_proc; + XtEnum bitmap_conversion_model; + + /* to save internally-created XmDragIcons */ + + XmDragIconObject xmStateCursorIcon; + XmDragIconObject xmMoveCursorIcon; + XmDragIconObject xmCopyCursorIcon; + XmDragIconObject xmLinkCursorIcon; + XmDragIconObject xmSourceCursorIcon; + + GC imageGC; /* OBSOLETE FIELD */ + int imageGCDepth; /* OBSOLETE FIELD */ + Pixel imageForeground; /* OBSOLETE FIELD */ + Pixel imageBackground; /* OBSOLETE FIELD */ + + XtPointer screenInfo; /* extension */ + + XtPointer user_data; + + Pixmap insensitive_stipple_bitmap; + +#ifdef DEFAULT_GLYPH_PIXMAP + Pixmap default_glyph_pixmap ; + unsigned int default_glyph_pixmap_width ; + unsigned int default_glyph_pixmap_height ; +#endif + + XtPointer inUsePixmaps; +} XmScreenPart, *XmScreenPartPtr; + +typedef struct _XmScreenInfo { + /* so much for information hiding */ + XtPointer menu_state; /* MenuUtil.c */ + Boolean destroyCallbackAdded; /* ImageCache.c */ +} XmScreenInfo; + +externalref XmScreenClassRec xmScreenClassRec; + +typedef struct _XmScreenRec { +/* ObjectPart object; + XmExtPart ext; */ + CorePart core ; + XmDesktopPart desktop; + XmScreenPart screen; +} XmScreenRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScreenP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ScrollBar.h b/libXm/linux86/Xm/ScrollBar.h new file mode 100644 index 0000000..0580dfd --- /dev/null +++ b/libXm/linux86/Xm/ScrollBar.h @@ -0,0 +1,102 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrollBar.h /main/11 1995/07/13 17:54:59 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrollBar_h +#define _XmScrollBar_h + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* ScrollBar Widget */ + +externalref WidgetClass xmScrollBarWidgetClass; + +typedef struct _XmScrollBarClassRec * XmScrollBarWidgetClass; +typedef struct _XmScrollBarRec * XmScrollBarWidget; + +/* ifndef for Fast Subclassing */ + +#ifndef XmIsScrollBar +#define XmIsScrollBar(w) XtIsSubclass(w, xmScrollBarWidgetClass) +#endif /* XmIsScrollBar */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateScrollBar( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern void XmScrollBarGetValues( + Widget w, + int *value, + int *slider_size, + int *increment, + int *page_increment) ; +extern void XmScrollBarSetValues( + Widget w, + int value, + int slider_size, + int increment, + int page_increment, +#if NeedWidePrototypes + int notify) ; +#else + Boolean notify) ; +#endif /* NeedWidePrototypes */ + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollBar_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ScrollBarP.h b/libXm/linux86/Xm/ScrollBarP.h new file mode 100644 index 0000000..8b6d180 --- /dev/null +++ b/libXm/linux86/Xm/ScrollBarP.h @@ -0,0 +1,225 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrollBarP.h /main/13 1995/07/13 17:55:17 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrollBarP_h +#define _XmScrollBarP_h + + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Minimum slider width or height */ + +#define MIN_SLIDER_THICKNESS 1 +#define MIN_SLIDER_LENGTH 6 +#define DEFAULT_ROUND_MARK_RADIUS 3 +#define THERMO_MARK_OFFSET 10 + +/* ScrollBar class structure */ + +typedef struct _XmScrollBarClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmScrollBarClassPart; + + +/* Full class record declaration for CheckBox class */ + +typedef struct _XmScrollBarClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmScrollBarClassPart scrollBar_class; +} XmScrollBarClassRec; + +externalref XmScrollBarClassRec xmScrollBarClassRec; + + +/* The ScrollBar instance record */ + +typedef struct _XmScrollBarPart +{ + int value; + int minimum; + int maximum; + int slider_size; + + unsigned char orientation; + unsigned char processing_direction; + XtEnum show_arrows; + + int increment; + int page_increment; + + int initial_delay; + int repeat_delay; + + XtCallbackList value_changed_callback; + XtCallbackList increment_callback; + XtCallbackList decrement_callback; + XtCallbackList page_increment_callback; + XtCallbackList page_decrement_callback; + XtCallbackList to_top_callback; + XtCallbackList to_bottom_callback; + XtCallbackList drag_callback; + + /* obsolete */ + GC unhighlight_GC; + /* Change the logical name of this one in 2.0 */ + + GC foreground_GC; + Pixel trough_color; + + Drawable pixmap; + Boolean sliding_on; + int saved_value; + + XtEnum etched_slider; + /* we used a #define slider_visual to referenced this field in + the c file, etched_slider is not a good name anymore, */ + XtEnum slider_mark; + + unsigned char flags; +/* Values for the XmScrollBarPart flags field */ + +#define FIRST_SCROLL_FLAG (1<<0) +#define VALUE_SET_FLAG (1<<1) +#define END_TIMER (1<<2) +#define ARROW1_AVAILABLE (1<<3) +#define ARROW2_AVAILABLE (1<<4) +#define SLIDER_AVAILABLE (1<<5) +#define KEYBOARD_GRABBED (1<<6) +#define OPERATION_CANCELLED (1<<7) /* last field */ + + unsigned char add_flags; +/* Values for the additionnal flags field */ +#define SNAPPED_OUT (1<<0) + + + unsigned char change_type; + XtIntervalId timer; + + short initial_x; + short initial_y; + short separation_x; + short separation_y; + + short slider_x; + short slider_y; + short slider_width; + short slider_height; + + short slider_area_x; + short slider_area_y; + short slider_area_width; + short slider_area_height; + + short arrow1_x; + short arrow1_y; + unsigned char arrow1_orientation; + Boolean arrow1_selected; + + short arrow2_x; + short arrow2_y; + unsigned char arrow2_orientation; + Boolean arrow2_selected; + + short arrow_width; + short arrow_height; + + /* Obsolete fields as 1.2.0 */ + short arrow1_top_count; + short arrow1_cent_count; + short arrow1_bot_count; + + XRectangle * arrow1_top; + XRectangle * arrow1_cent; + XRectangle * arrow1_bot; + + short arrow2_top_count; + short arrow2_cent_count; + short arrow2_bot_count; + + XRectangle * arrow2_top; + XRectangle * arrow2_cent; + XRectangle * arrow2_bot; + /***********/ + + /* new for 1.2 */ + GC unavailable_GC; + + /* new for 2.0 */ + unsigned short snap_back_multiple; + XtEnum sliding_mode; + Boolean editable; + + Mask dimMask ; /* for the navigator trait */ +} XmScrollBarPart; + + + + +/* Full instance record declaration */ + +typedef struct _XmScrollBarRec +{ + CorePart core; + XmPrimitivePart primitive; + XmScrollBarPart scrollBar; +} XmScrollBarRec; + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollBarP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ScrollFrameT.h b/libXm/linux86/Xm/ScrollFrameT.h new file mode 100644 index 0000000..26ee286 --- /dev/null +++ b/libXm/linux86/Xm/ScrollFrameT.h @@ -0,0 +1,100 @@ +/* $TOG: ScrollFrameT.h /main/6 1997/07/25 16:49:23 samborn $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmScrollFrameT_H +#define _XmScrollFrameT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTscrollFrame; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmScrollFrameInitProc)(Widget sf, + XtCallbackProc moveCB, + Widget scrollable); +typedef Boolean (*XmScrollFrameGetInfoProc)(Widget sf, + Cardinal * dimension, + Widget ** nav_list, + Cardinal * num_nav_list); +typedef void (*XmScrollFrameAddNavigatorProc)(Widget sf, + Widget nav, + Mask dimMask); +typedef void (*XmScrollFrameRemoveNavigatorProc)(Widget sf, + Widget nav); +typedef void (*XmScrollFrameUpdateOrigGeomProc)(Widget sf, + Widget child, + XtWidgetGeometry *geom); + + +/* Version 1: added updateOrigGeom */ + +typedef struct _XmScrollFrameTraitRec { + int version; /* 1 */ + XmScrollFrameInitProc init; + XmScrollFrameGetInfoProc getInfo; + XmScrollFrameAddNavigatorProc addNavigator; + XmScrollFrameRemoveNavigatorProc removeNavigator; + XmScrollFrameUpdateOrigGeomProc updateOrigGeom; +} XmScrollFrameTraitRec, *XmScrollFrameTrait; + + +/* This one gets allocated per instance by the scrollFrame + class. It is just a convenient structure reusable by other scrollFrame + and it needs not to be part of the public trait API */ + +typedef struct _XmScrollFrameDataRec { + XtCallbackProc move_cb ; + Widget scrollable ; + Widget * nav_list; + Cardinal num_nav_list ; + Cardinal num_nav_slots; +} XmScrollFrameDataRec, *XmScrollFrameData; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollFrameT_H */ diff --git a/libXm/linux86/Xm/ScrolledW.h b/libXm/linux86/Xm/ScrolledW.h new file mode 100644 index 0000000..32c4f55 --- /dev/null +++ b/libXm/linux86/Xm/ScrolledW.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrolledW.h /main/11 1995/07/13 17:56:18 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrolledWindow_h +#define _XmScrolledWindow_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsScrolledWindow +#define XmIsScrolledWindow(w) XtIsSubclass(w, xmScrolledWindowWidgetClass) +#endif /* XmIsScrolledWindow */ + + +externalref WidgetClass xmScrolledWindowWidgetClass; + +typedef struct _XmScrolledWindowClassRec * XmScrolledWindowWidgetClass; +typedef struct _XmScrolledWindowRec * XmScrolledWindowWidget; + + +/******** Public Function Declarations ********/ + +extern void XmScrolledWindowSetAreas( + Widget w, + Widget hscroll, + Widget vscroll, + Widget wregion) ; +extern Widget XmCreateScrolledWindow( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; +extern void XmScrollVisible( + Widget scrw, + Widget wid, + Dimension hor_margin, + Dimension ver_margin) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrolledWindow_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ScrolledWP.h b/libXm/linux86/Xm/ScrolledWP.h new file mode 100644 index 0000000..4b10a75 --- /dev/null +++ b/libXm/linux86/Xm/ScrolledWP.h @@ -0,0 +1,200 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrolledWP.h /main/13 1995/09/19 23:08:30 cde-sun $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrolledWindowP_h +#define _XmScrolledWindowP_h + +#include +#include + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*XmGetAutoDragRectsProc)(Widget, XRectangle **, Cardinal *) ; + +#define XmInheritGetAutoDragRectsProc ((XmGetAutoDragRectsProc) _XtInherit) + +#define XmScrolledWindowClassExtVersion 1L + +typedef struct _XmScrolledWindowClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmGetAutoDragRectsProc get_hor_rects; + XmGetAutoDragRectsProc get_vert_rects; +} XmScrolledWindowClassExtRec, *XmScrolledWindowClassExt; + +/* New fields for the ScrolledWindow widget class record */ +typedef struct { + XtPointer extension; /* extension to new class methods */ +} XmScrolledWindowClassPart; + +/**************** + * + * Class record declaration + * + ****************/ +typedef struct _XmScrolledWindowClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmScrolledWindowClassPart swindow_class; +} XmScrolledWindowClassRec; + +externalref XmScrolledWindowClassRec xmScrolledWindowClassRec; + +/**************** + * + * Scrolled Window instance structure. + * + ****************/ +typedef struct { + + int vmin; /* slider minimum coordinate position */ + int vmax; /* slider maximum coordinate position */ + int vOrigin; /* slider edge location */ + int vExtent; /* slider size */ + + int hmin; /* Same as above for horizontal bar. */ + int hmax; + int hOrigin; + int hExtent; + + Position hsbX,hsbY; + Dimension hsbWidth,hsbHeight; /* Dimensions for the horiz bar */ + + Position vsbX,vsbY; + Dimension vsbWidth,vsbHeight; /* Dimensions for the vertical bar */ + + Position GivenHeight, GivenWidth; + /* these 2 fields are now obsolete, we re-use them for + a different purpose, to track the initial position + of the scrollbars */ +#define sw_prev_x GivenWidth +#define sw_prev_y GivenHeight + + Dimension AreaWidth,AreaHeight; + Dimension WidthPad,HeightPad; + Position XOffset, YOffset; + + Dimension pad; + + Boolean hasHSB; + Boolean hasVSB; + Boolean InInit; + Boolean FromResize; + + unsigned char VisualPolicy; + unsigned char ScrollPolicy; + unsigned char ScrollBarPolicy; + unsigned char Placement; + + XmScrollBarWidget hScrollBar; + XmScrollBarWidget vScrollBar; + XmDrawingAreaWidget ClipWindow; + Widget WorkWindow; + + XtCallbackList traverseObscuredCallback; + + XtEnum auto_drag_model; + XtIntervalId auto_drag_timer; + + Boolean scroll_frame_inited ; + XmScrollFrameData scroll_frame_data ; + + XtPointer auto_drag_rects; + XtPointer auto_drag_closure; +} XmScrolledWindowPart; + + +/************************************************************************ + * * + * Full instance record declaration * + * * + ************************************************************************/ + +typedef struct _XmScrolledWindowRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmScrolledWindowPart swindow; +} XmScrolledWindowRec; + + +/* Frame constraint records */ + +typedef struct _XmScrolledWindowConstraintPart +{ + unsigned char child_type; + Position orig_x; + Position orig_y; +} XmScrolledWindowConstraintPart, * XmScrolledWindowConstraint; + +typedef struct _XmScrolledWindowConstraintRec +{ + XmManagerConstraintPart manager; + XmScrolledWindowConstraintPart swindow; +} XmScrolledWindowConstraintRec, * XmScrolledWindowConstraintPtr; + + +#define DEFAULT_HEIGHT 20 +#define DEFAULT_WIDTH 20 + +#define RESOURCE_DEFAULT (-1) + +#define GetSWConstraint(w) \ + (&((XmScrolledWindowConstraintPtr) (w)->core.constraints)->swindow) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrolledWindowP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SelectioB.h b/libXm/linux86/Xm/SelectioB.h new file mode 100644 index 0000000..fc9d1da --- /dev/null +++ b/libXm/linux86/Xm/SelectioB.h @@ -0,0 +1,100 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SelectioB.h /main/11 1995/07/13 17:57:36 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSelectionBox_h +#define _XmSelectionBox_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmSelectionBoxWidgetClass; + +typedef struct _XmSelectionBoxClassRec * XmSelectionBoxWidgetClass; +typedef struct _XmSelectionBoxRec * XmSelectionBoxWidget; + + +#ifndef XmIsSelectionBox +#define XmIsSelectionBox(w) (XtIsSubclass (w, xmSelectionBoxWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmSelectionBoxGetChild( + Widget sb, +#if NeedWidePrototypes + unsigned int which) ; +#else + unsigned char which) ; +#endif /* NeedWidePrototypes */ +extern Widget XmCreateSelectionBox( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmCreateSelectionDialog( + Widget ds_p, + String name, + ArgList sb_args, + Cardinal sb_n) ; +extern Widget XmCreatePromptDialog( + Widget ds_p, + String name, + ArgList sb_args, + Cardinal sb_n) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSelectionBox_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SelectioBP.h b/libXm/linux86/Xm/SelectioBP.h new file mode 100644 index 0000000..04ec276 --- /dev/null +++ b/libXm/linux86/Xm/SelectioBP.h @@ -0,0 +1,214 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SelectioBP.h /main/11 1995/07/13 17:58:07 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSelectionBoxP_h +#define _XmSelectionBoxP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Defines for use in allocation geometry matrix. */ + +#define XmSB_MAX_WIDGETS_VERT 8 + +/* Constraint part record for SelectionBox widget */ +typedef struct _XmSelectionBoxConstraintPart +{ + char unused; +} XmSelectionBoxConstraintPart, * XmSelectionBoxConstraint; + +/* New fields for the SelectionBox widget class record */ + +typedef struct +{ + XtCallbackProc list_callback ; + XtPointer extension; /* Pointer to extension record */ +} XmSelectionBoxClassPart; + + +/* Full class record declaration */ + +typedef struct _XmSelectionBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmSelectionBoxClassPart selection_box_class; +} XmSelectionBoxClassRec; + +externalref XmSelectionBoxClassRec xmSelectionBoxClassRec; + + +/* New fields for the SelectionBox widget record */ + +typedef struct +{ + Widget list_label; /* list Label */ + XmString list_label_string; + + Widget list; /* List */ + XmString *list_items; + int list_item_count; + int list_visible_item_count; + int list_selected_item_position; + + Widget selection_label; /* selection Label */ + XmString selection_label_string; + + Widget text; /* Text */ + XmString text_string; + short text_columns; + + Widget work_area; /* other widget */ + + Widget separator; /* separator */ + + Widget ok_button; /* enter button */ + XmString ok_label_string; + + Widget apply_button; /* apply button */ + XmString apply_label_string; + + XmString cancel_label_string; /* cancel button label */ + + Widget help_button; /* help button */ + XmString help_label_string; + + XtCallbackList ok_callback; /* callbacks */ + XtCallbackList apply_callback; + XtCallbackList cancel_callback; + XtCallbackList no_match_callback; + + XtAccelerators text_accelerators; + + Boolean must_match; /* flags */ + Boolean adding_sel_widgets; + Boolean minimize_buttons; + + unsigned char dialog_type; /* prompt or selection */ + unsigned char child_placement; +} XmSelectionBoxPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmSelectionBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmSelectionBoxPart selection_box; +} XmSelectionBoxRec; + + +/* Access Macros */ + +#define SB_ListLabel(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.list_label) +#define SB_List(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.list) +#define SB_SelectionLabel(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.selection_label) +#define SB_Text(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.text) +#define SB_WorkArea(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.work_area) +#define SB_Separator(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.separator) +#define SB_OkButton(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.ok_button) +#define SB_ApplyButton(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.apply_button) +#define SB_CancelButton(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.cancel_button) +#define SB_HelpButton(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.help_button) +#define SB_DefaultButton(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.default_button) +#define SB_MarginHeight(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.margin_height) +#define SB_MarginWidth(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.margin_width) +#define SB_ButtonFontList(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.button_font_list) +#define SB_LabelFontList(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.label_font_list) +#define SB_TextFontList(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.text_font_list) +#define SB_StringDirection(w) \ + (XmDirectionToStringDirection\ + (((XmSelectionBoxWidget)(w))->manager.string_direction)) +#define SB_AddingSelWidgets(w) \ + (((XmSelectionBoxWidget) w)->selection_box.adding_sel_widgets) +#define SB_TextAccelerators(w) \ + (((XmSelectionBoxWidget) w)->selection_box.text_accelerators) +#define SB_ListItemCount(w) \ + (((XmSelectionBoxWidget) w)->selection_box.list_item_count) +#define SB_ListSelectedItemPosition(w) \ + (((XmSelectionBoxWidget) w)->selection_box.list_selected_item_position) +#define SB_ListVisibleItemCount(w) \ + (((XmSelectionBoxWidget) w)->selection_box.list_visible_item_count) +#define SB_TextColumns(w) \ + (((XmSelectionBoxWidget) w)->selection_box.text_columns) +#define SB_MinimizeButtons(w) \ + (((XmSelectionBoxWidget) w)->selection_box.minimize_buttons) +#define SB_MustMatch(w) \ + (((XmSelectionBoxWidget) w)->selection_box.must_match) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSelectionBoxP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SeparatoG.h b/libXm/linux86/Xm/SeparatoG.h new file mode 100644 index 0000000..be815ff --- /dev/null +++ b/libXm/linux86/Xm/SeparatoG.h @@ -0,0 +1,79 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SeparatoG.h /main/11 1995/07/13 17:58:45 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* Separator Gadget */ +#ifndef _XmSeparatorGadget_h +#define _XmSeparatorGadget_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsSeparatorGadget +#define XmIsSeparatorGadget(w) XtIsSubclass(w, xmSeparatorGadgetClass) +#endif /* XmIsSeparator */ + +externalref WidgetClass xmSeparatorGadgetClass; + +typedef struct _XmSeparatorGadgetClassRec * XmSeparatorGadgetClass; +typedef struct _XmSeparatorGadgetRec * XmSeparatorGadget; +typedef struct _XmSeparatorGCacheObjRec * XmSeparatorGCacheObject; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateSeparatorGadget( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatorGadget_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SeparatoGP.h b/libXm/linux86/Xm/SeparatoGP.h new file mode 100644 index 0000000..bb5faf5 --- /dev/null +++ b/libXm/linux86/Xm/SeparatoGP.h @@ -0,0 +1,183 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SeparatoGP.h /main/11 1995/07/13 17:59:16 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSeparatorGadgetP_h +#define _XmSeparatorGadgetP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*****************************************************************/ +/* The Separator Gadget Cache Object's class and instance records*/ +/*****************************************************************/ + +typedef struct _XmSeparatorGCacheObjClassPart +{ + int foo; +} XmSeparatorGCacheObjClassPart; + + +/* separator cache class record */ +typedef struct _XmSeparatorGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmSeparatorGCacheObjClassPart separator_class_cache; +} XmSeparatorGCacheObjClassRec; + +externalref XmSeparatorGCacheObjClassRec xmSeparatorGCacheObjClassRec; + + +/* The Separator Gadget Cache instance record */ + +typedef struct _XmSeparatorGCacheObjPart +{ + Dimension margin; + unsigned char orientation; + unsigned char separator_type; + GC separator_GC; + + GC background_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + + Pixel foreground; + Pixel background; + + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; +} XmSeparatorGCacheObjPart; + +typedef struct _XmSeparatorGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmSeparatorGCacheObjPart separator_cache; +} XmSeparatorGCacheObjRec; + + +/*****************************************************/ +/* The Separator Widget Class and instance records */ +/*****************************************************/ + +typedef struct _XmSeparatorGadgetClassPart +{ + XtPointer extension; +} XmSeparatorGadgetClassPart; + + +/* Full class record declaration for Separator class */ + +typedef struct _XmSeparatorGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmSeparatorGadgetClassPart separator_class; +} XmSeparatorGadgetClassRec; + +externalref XmSeparatorGadgetClassRec xmSeparatorGadgetClassRec; + +typedef struct _XmSeparatorGadgetPart +{ + XmSeparatorGCacheObjPart *cache; + Boolean fill_bg_box; +} XmSeparatorGadgetPart; + +/* Full instance record declaration */ + +typedef struct _XmSeparatorGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmSeparatorGadgetPart separator; +} XmSeparatorGadgetRec; + + +/* MACROS for accessing instance fields*/ +#define SEPG_Margin(w) \ + (((XmSeparatorGadget)(w))->separator.cache->margin) +#define SEPG_Orientation(w) \ + (((XmSeparatorGadget)(w))->separator.cache->orientation) +#define SEPG_SeparatorType(w) \ + (((XmSeparatorGadget)(w))->separator.cache->separator_type) +#define SEPG_SeparatorGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->separator_GC) +#define SEPG_BackgroundGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->background_GC) +#define SEPG_TopShadowGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->top_shadow_GC) +#define SEPG_BottomShadowGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->bottom_shadow_GC) +#define SEPG_Foreground(w) \ + (((XmSeparatorGadget)(w))->separator.cache->foreground) +#define SEPG_Background(w) \ + (((XmSeparatorGadget)(w))->separator.cache->background) +#define SEPG_TopShadowColor(w) \ + (((XmSeparatorGadget)(w))->separator.cache->top_shadow_color) +#define SEPG_TopShadowPixmap(w) \ + (((XmSeparatorGadget)(w))->separator.cache->top_shadow_pixmap) +#define SEPG_BottomShadowColor(w) \ + (((XmSeparatorGadget)(w))->separator.cache->bottom_shadow_color) +#define SEPG_BottomShadowPixmap(w) \ + (((XmSeparatorGadget)(w))->separator.cache->bottom_shadow_pixmap) + +/* Convenience Macros */ +#define SEPG_Cache(w) \ + (((XmSeparatorGadget)(w))->separator.cache) +#define SEPG_ClassCachePart(w) \ + (((XmSeparatorGadgetClass)xmSeparatorGadgetClass)->gadget_class.cache_part) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatorGadgetP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Separator.h b/libXm/linux86/Xm/Separator.h new file mode 100644 index 0000000..2531a4a --- /dev/null +++ b/libXm/linux86/Xm/Separator.h @@ -0,0 +1,78 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Separator.h /main/11 1995/07/13 17:59:45 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* Separator Widget */ +#ifndef _XmSeparator_h +#define _XmSeparator_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsSeparator +#define XmIsSeparator(w) XtIsSubclass(w, xmSeparatorWidgetClass) +#endif /* XmIsSeparator */ + +externalref WidgetClass xmSeparatorWidgetClass; + +typedef struct _XmSeparatorClassRec * XmSeparatorWidgetClass; +typedef struct _XmSeparatorRec * XmSeparatorWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateSeparator( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparator_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SeparatorP.h b/libXm/linux86/Xm/SeparatorP.h new file mode 100644 index 0000000..81c4b2e --- /dev/null +++ b/libXm/linux86/Xm/SeparatorP.h @@ -0,0 +1,104 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SeparatorP.h /main/12 1995/07/13 17:59:57 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSeparatorP_h +#define _XmSeparatorP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Separator class structure */ + +typedef struct _XmSeparatorClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmSeparatorClassPart; + + +/* Full class record declaration for Separator class */ + +typedef struct _XmSeparatorClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmSeparatorClassPart separator_class; +} XmSeparatorClassRec; + +externalref XmSeparatorClassRec xmSeparatorClassRec; + + +/* The Separator instance record */ + +typedef struct _XmSeparatorPart +{ + Dimension margin; + unsigned char orientation; + unsigned char separator_type; + GC separator_GC; +} XmSeparatorPart; + + +/* Full instance record declaration */ + +typedef struct _XmSeparatorRec +{ + CorePart core; + XmPrimitivePart primitive; + XmSeparatorPart separator; +} XmSeparatorRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatorP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ShellEP.h b/libXm/linux86/Xm/ShellEP.h new file mode 100644 index 0000000..2265720 --- /dev/null +++ b/libXm/linux86/Xm/ShellEP.h @@ -0,0 +1,112 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ShellEP.h /main/9 1995/07/13 18:00:25 drk $ */ +/* +* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmShellEP_h +#define _XmShellEP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmInheritEventHandler ((XtEventHandler)_XtInherit) + +#define _XmRAW_MAP 0 +#define _XmPOPUP_MAP 1 +#define _XmMANAGE_MAP 2 + + +#ifndef XmIsShellExt +#define XmIsShellExt(w) XtIsSubclass(w, xmShellExtObjectClass) +#endif /* XmIsShellExt */ + +typedef struct _XmShellExtRec *XmShellExtObject; +typedef struct _XmShellExtClassRec *XmShellExtObjectClass; +externalref WidgetClass xmShellExtObjectClass; + + +typedef struct _XmShellExtClassPart{ + XtEventHandler structureNotifyHandler; + XtPointer extension; +}XmShellExtClassPart, *XmShellExtClassPartPtr; + +typedef struct _XmShellExtClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; + XmShellExtClassPart shell_class; +}XmShellExtClassRec; + +typedef struct { + unsigned long lastConfigureRequest; + Boolean useAsyncGeometry; +} XmShellExtPart, *XmShellExtPartPtr; + +externalref XmShellExtClassRec xmShellExtClassRec; + +typedef struct _XmShellExtRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; + XmShellExtPart shell; +}XmShellExtRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmShellEP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/SlideC.h b/libXm/linux86/Xm/SlideC.h new file mode 100644 index 0000000..3e05e5c --- /dev/null +++ b/libXm/linux86/Xm/SlideC.h @@ -0,0 +1,85 @@ +/** + * + * $Id: SlideC.h,v 1.1 2000/10/15 15:46:41 rwscott Exp $ + * + **/ + +#ifndef _SLIDEC_H +#define _SLIDEC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsSlideContext +#define XmIsSlideContext(w) XtIsSubclass(w,xmSlideContextClass) +#endif +#ifndef XmNslideFinishCallback +#define XmNslideFinishCallback "slideFinishCallback" +#endif +#ifndef XmCSlideFinishCallback +#define XmCSlideFinishCallback "SlideFinishCallback" +#endif +#ifndef XmNslideMotionCallback +#define XmNslideMotionCallback "slideMotionCallback" +#endif +#ifndef XmCSlideMotionCallback +#define XmCSlideMotionCallback "SlideMotionCallback" +#endif +#ifndef XmNslideWidget +#define XmNslideWidget "slideWidget" +#endif +#ifndef XmCSlideWidget +#define XmCSlideWidget "SlideWidget" +#endif +#ifndef XmNslideInterval +#define XmNslideInterval "slideInterval" +#endif +#ifndef XmCSlideInterval +#define XmCSlideInterval "SlideInterval" +#endif +#ifndef XmNslideDestWidth +#define XmNslideDestWidth "slideDestWidth" +#endif +#ifndef XmCSlideDestWidth +#define XmCSlideDestWidth "SlideDestWidth" +#endif +#ifndef XmNslideDestHeight +#define XmNslideDestHeight "slideDestHeight" +#endif +#ifndef XmCSlideDestHeight +#define XmCSlideDestHeight "SlideDestHeight" +#endif +#ifndef XmNslideDestX +#define XmNslideDestX "slideDestX" +#endif +#ifndef XmCSlideDestX +#define XmCSlideDestX "SlideDestX" +#endif +#ifndef XmNslideDestY +#define XmNslideDestY "slideDestY" +#endif +#ifndef XmCSlideDestY +#define XmCSlideDestY "SlideDestY" +#endif + +extern WidgetClass xmSlideContextWidgetClass; + +typedef struct _XmSlideContextRec *XmSlideContextWidget; +typedef struct _XmSlideContextClassRec *XmSlideContextWidgetClass; + +typedef struct _XmSlideStruct { + Widget w; + XtWidgetGeometry dest; + unsigned long interval; + XtIntervalId id; +} XmSlideStruct, *XmSlidePtr; + +void XmSlide(XmSlidePtr slide_info); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/libXm/linux86/Xm/SlideCP.h b/libXm/linux86/Xm/SlideCP.h new file mode 100644 index 0000000..29a8b19 --- /dev/null +++ b/libXm/linux86/Xm/SlideCP.h @@ -0,0 +1,65 @@ +/** + * + * $Id: SlideCP.h,v 1.1 2000/10/15 15:46:41 rwscott Exp $ + * + **/ + +#ifndef _SLIDECP_H +#define _SLIDECP_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmUNSPECIFIED_POSITION +#define XmUNSPECIFIED_POSITION (-1) +#endif + +typedef struct { + XtPointer extension; +} XmSlideContextClassPart; + +typedef struct _XmSlideContextClassRec { + ObjectClassPart object_class; + XmSlideContextClassPart slide_class; +} XmSlideContextClassRec; + +extern XmSlideContextClassRec xmSlideContextClassRec; + +typedef struct _XmSlideContextPart { + XtIntervalId id; + XtCallbackList slideFinishCallback; + XtCallbackList slideMotionCallback; + Widget slide_widget; + unsigned long interval; + Dimension dest_width; + Dimension dest_height; + Position dest_x; + Position dest_y; +} XmSlideContextPart; + +typedef struct _XmSlideContextRec { + ObjectPart object; + XmSlideContextPart slide; +} XmSlideContextRec; + +#define Slide_Id(w) (((XmSlideContextWidget)w)->slide.id) +#define Slide_Widget(w) (((XmSlideContextWidget)w)->slide.slide_widget) +#define Slide_Interval(w) (((XmSlideContextWidget)w)->slide.interval) +#define Slide_DestWidth(w) (((XmSlideContextWidget)w)->slide.dest_width) +#define Slide_DestHeight(w) (((XmSlideContextWidget)w)->slide.dest_height) +#define Slide_DestX(w) (((XmSlideContextWidget)w)->slide.dest_x) +#define Slide_DestY(w) (((XmSlideContextWidget)w)->slide.dest_y) +#define Slide_FinishCallback(w) (((XmSlideContextWidget)w)->slide.slideFinishCallback) +#define Slide_MotionCallback(w) (((XmSlideContextWidget)w)->slide.slideMotionCallback) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libXm/linux86/Xm/SpecRenderT.h b/libXm/linux86/Xm/SpecRenderT.h new file mode 100644 index 0000000..ade59ca --- /dev/null +++ b/libXm/linux86/Xm/SpecRenderT.h @@ -0,0 +1,69 @@ +/* $XConsortium: SpecRenderT.h /main/5 1995/07/15 20:55:28 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmSpecRenderT_H +#define _XmSpecRenderT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTspecifyRenderTable; + +/* Trait structures and typedefs, place typedefs first */ + +typedef XmFontList (*XmSpecRenderGetTableProc)(Widget wid, + XtEnum type); + +/* Version 0: initial release. */ + +typedef struct _XmSpecRenderTraitRec { + int version; /* 0 */ + XmSpecRenderGetTableProc getRenderTable; +} XmSpecRenderTraitRec, *XmSpecRenderTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSpecRenderT_H */ + diff --git a/libXm/linux86/Xm/SpinB.h b/libXm/linux86/Xm/SpinB.h new file mode 100644 index 0000000..d06fb20 --- /dev/null +++ b/libXm/linux86/Xm/SpinB.h @@ -0,0 +1,52 @@ +/* $XConsortium: SpinB.h /main/6 1995/07/15 20:55:46 drk $ */ +/* + * (c) Copyright 1995 Digital Equipment Corporation. + * (c) Copyright 1995 Hewlett-Packard Company. + * (c) Copyright 1995 International Business Machines Corp. + * (c) Copyright 1995 Sun Microsystems, Inc. + * (c) Copyright 1995 Novell, Inc. + * (c) Copyright 1995 FUJITSU LIMITED. + * (c) Copyright 1995 Hitachi. + */ +/* + * HISTORY + */ + +#ifndef _SpinB_h +#define _SpinB_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SpinB Widget + */ +externalref WidgetClass xmSpinBoxWidgetClass; + +typedef struct _XmSpinBoxClassRec *XmSpinBoxWidgetClass; +typedef struct _XmSpinBoxRec *XmSpinBoxWidget; + + +/* + * Spin externs for application accessible functions + */ + +extern Widget XmCreateSpinBox(Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); + +extern int XmSpinBoxValidatePosition( + Widget text_field, + int *position_value); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _SpinB_h */ diff --git a/libXm/linux86/Xm/SpinBP.h b/libXm/linux86/Xm/SpinBP.h new file mode 100644 index 0000000..36f88cd --- /dev/null +++ b/libXm/linux86/Xm/SpinBP.h @@ -0,0 +1,198 @@ +/* $TOG: SpinBP.h /main/7 1999/09/01 17:14:17 mgreess $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _SpinBP_h +#define _SpinBP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Spin constraints */ + +typedef struct _XmSpinBoxConstraint +{ + XmStringTable values; /* array of XmString */ + int position; /* position of current selection */ + int num_values; /* number of XmString in the array */ + + int minimum_value; /* parameters for autonumeric mode */ + int maximum_value; + int increment_value; + short decimal_points; + + unsigned char sb_child_type; + unsigned char arrow_sensitivity; + Boolean wrap; + unsigned char position_type; /* governs interpretation of .position: + XmPOSITION_{ARRAY,VALUE} */ +} XmSpinBoxConstraintPart, *XmSpinBoxConstraint; + +typedef struct _XmSpinBoxConstraintRec +{ + XmManagerConstraintPart manager; + XmSpinBoxConstraintPart spinBox; +} XmSpinBoxConstraintRec, *XmSpinBoxConstraintPtr; + +typedef Widget (*XmGetCallbackWidgetProc)(Widget); + +/* Spin class structure */ +typedef struct _XmSpinBoxClassPart +{ + XmGetCallbackWidgetProc get_callback_widget; + XtPointer extension; /* not used */ +} XmSpinBoxClassPart; + + +/* Full class record declaration for Spin class */ + +typedef struct _XmSpinBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmSpinBoxClassPart spinBox_class; +} XmSpinBoxClassRec; + +externalref XmSpinBoxClassRec xmSpinBoxClassRec; + +/* The Spin instance record */ + +typedef struct _XmSpinBoxPart +{ + Dimension arrow_size; + Dimension margin_width; + Dimension margin_height; + Dimension spacing; + unsigned int initial_delay; + unsigned int repeat_delay; + XtCallbackList modify_verify_cb; /* CB list for new selection */ + XtCallbackList value_changed_cb; /* CB list for new selection */ + XRectangle up_arrow_rect; + XRectangle down_arrow_rect; + Widget textw; /* text widget */ + int boundary; + int last_hit; + int make_change; + Dimension ideal_height; + Dimension ideal_width; + GC arrow_gc; + GC insensitive_gc; + Mask dim_mask; /* for the navigator trait */ + XtIntervalId spin_timer; + Boolean up_arrow_pressed; + Boolean down_arrow_pressed; + unsigned char arrow_layout; + unsigned char default_arrow_sensitivity; + Dimension detail_shadow_thickness; + unsigned char arrow_orientation; /* Xm_ARROWS_{VERTICAL,HORIZONTAL} */ +} XmSpinBoxPart; + + +/* Full instance record declaration */ + +typedef struct _XmSpinBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmSpinBoxPart spinBox; +} XmSpinBoxRec; + +/* Macros */ +#define XmRPositionValue "PositionValue" + +#define SB_GetConstraintRec(w) \ + ((XmSpinBoxConstraint)(&((XmSpinBoxConstraintPtr) (w)->core.constraints)->spinBox)) + +#define SB_WithChild(w) \ + (((XmSpinBoxRec *) (w))->spinBox.textw != NULL) + +#define SB_ChildCount(w) \ + (((XmSpinBoxRec *) (w))->composite.num_children) + +#define SB_GetArrowOrientation(w) \ + (((XmSpinBoxRec *) (w))->spinBox.arrow_orientation) + +#define SB_ChildIsNumeric(wc) \ + (((XmSpinBoxConstraint) (wc))->sb_child_type == (unsigned char) XmNUMERIC) + +#define SB_ChildPositionTypeIsValue(wc) \ + (((XmSpinBoxConstraint) (wc))->position_type == \ + (unsigned char) XmPOSITION_VALUE) + +#define SB_ChildMaximumPositionValue(wc) \ + ( ( ((wc) == (XmSpinBoxConstraint) NULL) ? \ + 0 : \ + ( (SB_ChildIsNumeric(wc)) ? \ + (wc)->maximum_value : \ + ( ((wc)->num_values > 0) ? \ + ((wc)->num_values - 1) : \ + 0 \ + ) \ + ) \ + ) \ + ) + +#define SB_ChildMinimumPositionValue(wc) \ + ( ( ((wc) == (XmSpinBoxConstraint) NULL) ? \ + 0 : \ + ( (SB_ChildIsNumeric(wc)) ? \ + (wc)->minimum_value : \ + 0 \ + ) \ + ) \ + ) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _SpinBP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/linux86/Xm/TabBox.h b/libXm/linux86/Xm/TabBox.h new file mode 100644 index 0000000..d9e343f --- /dev/null +++ b/libXm/linux86/Xm/TabBox.h @@ -0,0 +1,94 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifndef _XmTabBox_h_ +#define _XmTabBox_h_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum {XmTABS_SQUARED, XmTABS_ROUNDED, XmTABS_BEVELED} XmTabStyle; +typedef enum {XmTABS_BASIC, XmTABS_STACKED, XmTABS_STACKED_STATIC, + XmTABS_SCROLLED, XmTABS_OVERLAYED} XmTabMode; + +typedef enum {XmTAB_ORIENTATION_DYNAMIC, XmTABS_RIGHT_TO_LEFT, + XmTABS_LEFT_TO_RIGHT, XmTABS_TOP_TO_BOTTOM, + XmTABS_BOTTOM_TO_TOP} XmTabOrientation; + +typedef enum {XmTAB_EDGE_TOP_LEFT, XmTAB_EDGE_BOTTOM_RIGHT} XmTabEdge; + +typedef enum {XmTAB_ARROWS_ON_RIGHT, XmTAB_ARROWS_ON_LEFT, + XmTAB_ARROWS_SPLIT} XmTabArrowPlacement; + +enum {XmCR_TAB_SELECTED, XmCR_TAB_UNSELECTED}; + +typedef struct _XmTabBoxCallbackStruct { + int reason; + XEvent *event; + int tab_index; + int old_index; +} XmTabBoxCallbackStruct; + +typedef struct _XmTabBoxRec *XmTabBoxWidget; +typedef struct _XmTabBoxClassRec *XmTabBoxWidgetClass; + +extern WidgetClass xiTabBoxWidgetClass; + +#ifndef XmIsTabBox +#define XmIsTabBox(w) XtIsSubclass(w, xiTabBoxWidgetClass) +#endif /* XmIsTabBox */ + +Widget XmCreateTabBox(Widget, String, ArgList, Cardinal); +int XmTabBoxGetIndex(Widget, int, int); +int XmTabBoxGetNumRows(Widget); +int XmTabBoxGetNumColumns(Widget); +int XmTabBoxGetNumTabs(Widget); +int XmTabBoxGetTabRow(Widget, int); +int XmTabBoxXYToIndex(Widget, int, int); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __TabBox_h__ */ diff --git a/libXm/linux86/Xm/TabBoxP.h b/libXm/linux86/Xm/TabBoxP.h new file mode 100644 index 0000000..dea928e --- /dev/null +++ b/libXm/linux86/Xm/TabBoxP.h @@ -0,0 +1,212 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _XmTabBoxP_h_ +#define _XmTabBoxP_h_ + + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct _XmTabBoxClassPart { + XtPointer extension; +} XmTabBoxClassPart; + +typedef struct _XmTabBoxClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmTabBoxClassPart tab_box_class; +} XmTabBoxClassRec; + +typedef struct _XmTabBoxPart { + XmFontList font_list; + XmTabStyle tab_style; + XmTabMode tab_mode; + XmTabbedStackList tab_list; + XmTabOrientation tab_orientation; + XmTabEdge tab_edge; + XmTabArrowPlacement arrow_placement; + unsigned char orientation; + Dimension tab_margin_width; + Dimension tab_margin_height; + Dimension tab_label_spacing; + Dimension highlight_thickness; + int tab_corner_percent; + Dimension tab_offset; + Boolean uniform_tab_size; + Boolean tab_auto_select; + Boolean use_image_cache; + + Pixel select_color; + Pixmap select_pixmap; + + int num_stacks; + int selected_index; + int traversal_index; + + Boolean stacked_effect; + + XtCallbackList select_callback; + XtCallbackList unselect_callback; + + /* Private */ + GC _tab_GC; + GC _text_GC; + Pixmap _gray_stipple; + XRectangle *_wanted; + int _num_wanted; + struct _XmTabRect *_actual; + int _num_actual; + int _selected; + int _keyboard; + + int _armed_tab; + + int _scroll_x; + XRectangle _scroll_rect; + + int _corner_size; + + int _num_columns; + int _num_rows; + + /* + * The following data memebers are used for the rotation of + * the pixmap and the text. + */ + int _bitmap_width; + int _bitmap_height; + Pixmap _bitmap; + + GC _zero_GC; + GC _one_GC; + + Widget _canvas; + Widget _left_arrow; + Widget _right_arrow; + + Boolean _inited; + + struct _XmCache *_cache; + int _cache_size; +} XmTabBoxPart; + +/* + * Access macros for instance variables + */ +#define XmTabBoxIndex (XmManagerIndex + 1) +extern XmOffsetPtr XmTabBox_offsets; + +#define XmTabBoxField(w,f,t) XmField(w, XmTabBox_offsets, XmTabBox, f, t) + +#define XmTabBox_font_list(w) XmTabBoxField(w, font_list, XmFontList) +#define XmTabBox_tab_style(w) XmTabBoxField(w, tab_style, XmTabStyle) +#define XmTabBox_tab_mode(w) XmTabBoxField(w, tab_mode, XmTabMode) +#define XmTabBox_tab_list(w) XmTabBoxField(w, tab_list, XmTabbedStackList) +#define XmTabBox_tab_orientation(w) XmTabBoxField(w, tab_orientation, XmTabOrientation) +#define XmTabBox_tab_edge(w) XmTabBoxField(w, tab_edge, XmTabEdge) +#define XmTabBox_arrow_placement(w) XmTabBoxField(w, arrow_placement, XmTabArrowPlacement) +#define XmTabBox_orientation(w) XmTabBoxField(w, orientation, unsigned char) +#define XmTabBox_tab_margin_width(w) XmTabBoxField(w, tab_margin_width, Dimension) +#define XmTabBox_tab_margin_height(w) XmTabBoxField(w, tab_margin_height, Dimension) +#define XmTabBox_tab_label_spacing(w) XmTabBoxField(w, tab_label_spacing, Dimension) +#define XmTabBox_highlight_thickness(w) XmTabBoxField(w, highlight_thickness, Dimension) +#define XmTabBox_tab_corner_percent(w) XmTabBoxField(w, tab_corner_percent, int) +#define XmTabBox_tab_offset(w) XmTabBoxField(w, tab_offset, Dimension) +#define XmTabBox_uniform_tab_size(w) XmTabBoxField(w, uniform_tab_size, Boolean) +#define XmTabBox_tab_auto_select(w) XmTabBoxField(w, tab_auto_select, Boolean) +#define XmTabBox_use_image_cache(w) XmTabBoxField(w, use_image_cache, Boolean) +#define XmTabBox_select_color(w) XmTabBoxField(w, select_color, Pixel) +#define XmTabBox_select_pixmap(w) XmTabBoxField(w, select_pixmap, Pixmap) +#define XmTabBox_num_stacks(w) XmTabBoxField(w, num_stacks, int) +#define XmTabBox_selected_index(w) XmTabBoxField(w, selected_index, int) +#define XmTabBox_traversal_index(w) XmTabBoxField(w, traversal_index, int) +#define XmTabBox_stacked_effect(w) XmTabBoxField(w, stacked_effect, Boolean) +#define XmTabBox_select_callback(w) XmTabBoxField(w, select_callback, XtCallbackList) +#define XmTabBox_unselect_callback(w) XmTabBoxField(w, unselect_callback, XtCallbackList) +#define XmTabBox__tab_GC(w) XmTabBoxField(w, _tab_GC, GC) +#define XmTabBox__text_GC(w) XmTabBoxField(w, _text_GC, GC) +#define XmTabBox__gray_stipple(w) XmTabBoxField(w, _gray_stipple, Pixmap) +#define XmTabBox__wanted(w) XmTabBoxField(w, _wanted, XRectangle*) +#define XmTabBox__num_wanted(w) XmTabBoxField(w, _num_wanted, int) +#define XmTabBox__actual(w) XmTabBoxField(w, _actual, struct _XmTabRect*) +#define XmTabBox__num_actual(w) XmTabBoxField(w, _num_actual, int) +#define XmTabBox__selected(w) XmTabBoxField(w, _selected, int) +#define XmTabBox__keyboard(w) XmTabBoxField(w, _keyboard, int) +#define XmTabBox__armed_tab(w) XmTabBoxField(w, _armed_tab, int) +#define XmTabBox__scroll_x(w) XmTabBoxField(w, _scroll_x, int) +#define XmTabBox__scroll_rect(w) XmTabBoxField(w, _scroll_rect, XRectangle) +#define XmTabBox__corner_size(w) XmTabBoxField(w, _corner_size, int) +#define XmTabBox__num_columns(w) XmTabBoxField(w, _num_columns, int) +#define XmTabBox__num_rows(w) XmTabBoxField(w, _num_rows, int) +#define XmTabBox__bitmap_width(w) XmTabBoxField(w, _bitmap_width, int) +#define XmTabBox__bitmap_height(w) XmTabBoxField(w, _bitmap_height, int) +#define XmTabBox__bitmap(w) XmTabBoxField(w, _bitmap, Pixmap) +#define XmTabBox__zero_GC(w) XmTabBoxField(w, _zero_GC, GC) +#define XmTabBox__one_GC(w) XmTabBoxField(w, _one_GC, GC) +#define XmTabBox__canvas(w) XmTabBoxField(w, _canvas, Widget) +#define XmTabBox__left_arrow(w) XmTabBoxField(w, _left_arrow, Widget) +#define XmTabBox__right_arrow(w) XmTabBoxField(w, _right_arrow, Widget) +#define XmTabBox__inited(w) XmTabBoxField(w, _inited, Boolean) +#define XmTabBox__cache(w) XmTabBoxField(w, _cache, struct _XmCache*) +#define XmTabBox__cache_size(w) XmTabBoxField(w, _cache_size, int) + +typedef struct _XmTabBoxRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmTabBoxPart tab_box; +} XmTabBoxRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __TabBoxP_h__ */ diff --git a/libXm/linux86/Xm/TabList.h b/libXm/linux86/Xm/TabList.h new file mode 100644 index 0000000..09869b7 --- /dev/null +++ b/libXm/linux86/Xm/TabList.h @@ -0,0 +1,186 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _Xm_TabList_h_ +#define _Xm_TabList_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum {XmPIXMAP_TOP, XmPIXMAP_BOTTOM, XmPIXMAP_RIGHT, XmPIXMAP_LEFT, + XmPIXMAP_NONE, XmPIXMAP_ONLY} XmPixmapPlacement; +typedef enum {XmTAB_VALUE_COPY, XmTAB_VALUE_SHARE} XmTabValueMode; + +typedef enum {XmTAB_CMP_VISUAL, XmTAB_CMP_SIZE, XmTAB_CMP_EQUAL} XmTabResult; + +#define XmCOLOR_DYNAMIC ((Pixel)-1) +#define XmPIXMAP_DYNAMIC ((Pixmap) 3) +#define XmTAB_LAST_POSITION -1 +#define XmTAB_NOT_FOUND -1 + +#define XmTAB_LABEL_STRING (1L<<0) +#define XmTAB_LABEL_PIXMAP (1L<<1) +#define XmTAB_PIXMAP_PLACEMENT (1L<<2) +#define XmTAB_BACKGROUND (1L<<3) +#define XmTAB_FOREGROUND (1L<<4) +#define XmTAB_VALUE_MODE (1L<<5) +#define XmTAB_LABEL_ALIGNMENT (1L<<6) +#define XmTAB_STRING_DIRECTION (1L<<7) +#define XmTAB_BACKGROUND_PIXMAP (1L<<8) +#define XmTAB_SENSITIVE (1L<<9) +#define XmTAB_ALL_FLAGS (XmTAB_LABEL_STRING|XmTAB_LABEL_PIXMAP|\ + XmTAB_PIXMAP_PLACEMENT|XmTAB_BACKGROUND|\ + XmTAB_FOREGROUND|XmTAB_VALUE_MODE|\ + XmTAB_LABEL_ALIGNMENT|XmTAB_STRING_DIRECTION|\ + XmTAB_BACKGROUND_PIXMAP|XmTAB_SENSITIVE) + +typedef struct _XmTabAttributeRec { + XmString label_string; /* default: NULL */ + XmStringDirection string_direction; /* default: XmSTRING_DIRECTION_L_TO_R*/ + Pixmap label_pixmap; /* default: XmUNSPECIFIED_PIXMAP */ + int label_alignment; /* default: XmALIGNEMENT_CENTER */ + XmPixmapPlacement pixmap_placement; /* default: XmPIXMAP_RIGHT */ + Pixel foreground; /* default: XmCOLOR_DYNAMIC */ + Pixel background; /* default: XmCOLOR_DYNAMIC */ + Pixmap background_pixmap;/* default: XmPIXMAP_DYNAMIC */ + Boolean sensitive; /* default: True */ + XmTabValueMode value_mode; /* default: XmTAB_VALUE_COPY */ +} XmTabAttributeRec, * XmTabAttributes; + +typedef struct _XmTabbedStackListRec *XmTabbedStackList; + +XmTabbedStackList XmTabbedStackListCreate( +#ifndef _NO_PROTO +void +#endif +); + +XmTabbedStackList XmTabbedStackListCopy( +#ifndef _NO_PROTO +XmTabbedStackList +#endif +); + +void XmTabbedStackListFree( +#ifndef _NO_PROTO +XmTabbedStackList +#endif +); + +void XmTabbedStackListRemove( +#ifndef _NO_PROTO +XmTabbedStackList, int +#endif +); + +int XmTabbedStackListInsert( +#ifndef _NO_PROTO +XmTabbedStackList, int, XtValueMask, XmTabAttributes +#endif +); + +int XmTabbedStackListAppend( +#ifndef _NO_PROTO +XmTabbedStackList, XtValueMask, XmTabAttributes +#endif +); + +void XmTabbedStackListModify( +#ifndef _NO_PROTO +XmTabbedStackList, int, XtValueMask, XmTabAttributes +#endif +); + +void XmTabbedStackListQuery( +#ifndef _NO_PROTO +XmTabbedStackList, int, XmTabAttributes +#endif +); + +int XmTabbedStackListFind( +#ifndef _NO_PROTO +XmTabbedStackList, XmString +#endif +); + +void XmTabbedStackListSimpleRemove( +#ifndef _NO_PROTO +XmTabbedStackList, XmString +#endif +); + +int XmTabbedStackListSimpleInsert( +#ifndef _NO_PROTO +XmTabbedStackList, int, XmString +#endif +); + +int XmTabbedStackListSimpleAppend( +#ifndef _NO_PROTO +XmTabbedStackList, XmString +#endif +); + +void XmTabbedStackListSimpleModify( +#ifndef _NO_PROTO +XmTabbedStackList, int, XmString +#endif +); + +XmString XmTabbedStackListSimpleQuery( +#ifndef _NO_PROTO +XmTabbedStackList, int +#endif +); + +XmTabResult XmTabbedStackListCompare( +#ifndef _NO_PROTO +XmTabbedStackList, XmTabbedStackList +#endif +); + +void XmTabAttibutesFree( +#ifndef _NO_PROTO +XmTabAttributes +#endif +); + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + + +#endif diff --git a/libXm/linux86/Xm/TabStack.h b/libXm/linux86/Xm/TabStack.h new file mode 100644 index 0000000..e1f8754 --- /dev/null +++ b/libXm/linux86/Xm/TabStack.h @@ -0,0 +1,56 @@ +#ifndef __TabStack_h__ +#define __TabStack_h__ + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum {XmTABS_ON_TOP, XmTABS_ON_BOTTOM, XmTABS_ON_RIGHT, + XmTABS_ON_LEFT} XmTabSide; + +typedef struct _XmTabStackCallbackStruct { + int reason; + XEvent *event; + Widget selected_child; +} XmTabStackCallbackStruct; + +typedef struct _XmTabStackRec *XmTabStackWidget; +typedef struct _XmTabStackClassRec *XmTabStackWidgetClass; +extern WidgetClass xmTabStackWidgetClass; + +#ifndef XmIsTabStack +#define XmIsTabStack(w) XtIsSubclass(w, xmTabStackWidgetClass) +#endif /* XmIsTabStack */ + +#ifdef _NO_PROTO +extern Widget XmCreateTabStack(); +extern Widget XmTabStackGetSelectedTab(); +extern void XmTabStackSelectTab(); +extern Widget XmTabStackIndexToWidget(); +extern Widget XmTabStackXYToWidget(); +#else +extern Widget XmCreateTabStack(Widget, String, ArgList, Cardinal); +extern Widget XmTabStackGetSelectedTab(Widget); +extern void XmTabStackSelectTab(Widget, Boolean); +extern Widget XmTabStackIndexToWidget(Widget, int); +extern Widget XmTabStackXYToWidget(Widget, int, int); +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __TabStack_h__ */ diff --git a/libXm/linux86/Xm/TabStackP.h b/libXm/linux86/Xm/TabStackP.h new file mode 100644 index 0000000..0de6e2f --- /dev/null +++ b/libXm/linux86/Xm/TabStackP.h @@ -0,0 +1,204 @@ +#ifndef __TabStackP_h__ +#define __TabStackP_h__ + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmTabStackClassPart { + String drag_translations; + XtPointer extension; +} XmTabStackClassPart; + +typedef struct _XmTabStackClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmTabStackClassPart tab_stack_class; +} XmTabStackClassRec; + +typedef struct _XmTabStackPart { + /* Resources for the Tab Stack */ + + XtCallbackList tab_select_callback; + + /* Resource to pass down to Tab Box */ + XmFontList font_list; + XmTabStyle tab_style; + XmTabMode tab_mode; + XmTabSide tab_side; + XmTabOrientation tab_orientation; + + XmString tear_off_label; + + Boolean allow_tear_offs; + Boolean uniform_tab_size; + Boolean use_image_cache; + Boolean stacked_effect; + Boolean tab_auto_select; + + Dimension tab_margin_width; + Dimension tab_margin_height; + Dimension tab_label_spacing; + Dimension tab_offset; + Dimension highlight_thickness; + + Pixel select_color; + Pixel select_pixmap; + + int tab_corner_percent; + + Widget tab_box; + + /* Private Values */ + + XmTabbedStackList _tab_list; + + XRectangle _size; + + Widget _active_child; + GC _gc; + + Boolean _inited; + Boolean _set_tab_list; + + Widget _menu; + Widget _tear_off_button; + + /* Drag And Drop Stuff */ + Pixmap _source_pixmap; + Pixmap _source_mask; + Pixmap _invalid_pixmap; + Pixmap _invalid_mask; + Widget _source_icon; + Widget _invalid_icon; + + Widget _selected_tab; /* used within realize method */ + Boolean _selected_notify; /* used within realize method */ + + Boolean do_notify; /* for notify XmNtabSelectedCallback */ + +} XmTabStackPart; + +#define XmTabStackField(w,f,t) XmField(w, XmTabStack_offsets, XmTabStack, f, t) + +#define XmTabStack_tab_select_callback(w) XmTabStackField(w, tab_select_callback, XtCallbackList) +#define XmTabStack_font_list(w) XmTabStackField(w, font_list, XmFontList) +#define XmTabStack_tab_style(w) XmTabStackField(w, tab_style, XmTabStyle) +#define XmTabStack_tab_mode(w) XmTabStackField(w, tab_mode, XmTabMode) +#define XmTabStack_tab_side(w) XmTabStackField(w, tab_side, XmTabSide) +#define XmTabStack_tab_orientation(w) XmTabStackField(w, tab_orientation, XmTabOrientation) +#define XmTabStack_tear_off_label(w) XmTabStackField(w, tear_off_label, XmString) +#define XmTabStack_allow_tear_offs(w) XmTabStackField(w, allow_tear_offs, Boolean) +#define XmTabStack_uniform_tab_size(w) XmTabStackField(w, uniform_tab_size, Boolean) +#define XmTabStack_use_image_cache(w) XmTabStackField(w, use_image_cache, Boolean) +#define XmTabStack_stacked_effect(w) XmTabStackField(w, stacked_effect, Boolean) +#define XmTabStack_tab_auto_select(w) XmTabStackField(w, tab_auto_select, Boolean) +#define XmTabStack_tab_margin_width(w) XmTabStackField(w, tab_margin_width, Dimension) +#define XmTabStack_tab_margin_height(w) XmTabStackField(w, tab_margin_height, Dimension) +#define XmTabStack_tab_label_spacing(w) XmTabStackField(w, tab_label_spacing, Dimension) +#define XmTabStack_tab_offset(w) XmTabStackField(w, tab_offset, Dimension) +#define XmTabStack_highlight_thickness(w) XmTabStackField(w, highlight_thickness, Dimension) +#define XmTabStack_select_color(w) XmTabStackField(w, select_color, Pixel) +#define XmTabStack_select_pixmap(w) XmTabStackField(w, select_pixmap, Pixel) +#define XmTabStack_tab_corner_percent(w) XmTabStackField(w, tab_corner_percent, int) +#define XmTabStack_tab_box(w) XmTabStackField(w, tab_box, Widget) +#define XmTabStack__tab_list(w) XmTabStackField(w, _tab_list, XmTabbedStackList) +#define XmTabStack__size(w) XmTabStackField(w, _size, XRectangle) +#define XmTabStack__active_child(w) XmTabStackField(w, _active_child, Widget) +#define XmTabStack__gc(w) XmTabStackField(w, _gc, GC) +#define XmTabStack__inited(w) XmTabStackField(w, _inited, Boolean) +#define XmTabStack__set_tab_list(w) XmTabStackField(w, _set_tab_list, Boolean) +#define XmTabStack__menu(w) XmTabStackField(w, _menu, Widget) +#define XmTabStack__tear_off_button(w) XmTabStackField(w, _tear_off_button, Widget) +#define XmTabStack__source_pixmap(w) XmTabStackField(w, _source_pixmap, Pixmap) +#define XmTabStack__source_mask(w) XmTabStackField(w, _source_mask, Pixmap) +#define XmTabStack__invalid_pixmap(w) XmTabStackField(w, _invalid_pixmap, Pixmap) +#define XmTabStack__invalid_mask(w) XmTabStackField(w, _invalid_mask, Pixmap) +#define XmTabStack__source_icon(w) XmTabStackField(w, _source_icon, Widget) +#define XmTabStack__invalid_icon(w) XmTabStackField(w, _invalid_icon, Widget) +#define XmTabStack__selected_tab(w) XmTabStackField(w, _selected_tab, Widget) +#define XmTabStack__selected_notify(w) XmTabStackField(w, _selected_notify, Boolean) +#define XmTabStack_do_notify(w) XmTabStackField(w, do_notify, Boolean) + +typedef struct _XmTabStackRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmTabStackPart tab_stack; +} XmTabStackRec; + +typedef struct _XmTabStackConstraintPart { + XmString tab_label_string; + XmStringDirection tab_string_direction; + unsigned char tab_alignment; + Pixmap tab_label_pixmap; + XmPixmapPlacement tab_pixmap_placement; + Pixel tab_foreground; + Pixel tab_background; + Pixmap tab_background_pixmap; + Boolean free_tab_pixmap; + + Boolean tear_off_enabled; + + /* Private Memebers */ + int index; + Dimension width; + Dimension height; +} XmTabStackConstraintPart; +#define XmTabStackCField(w, f, t) XmConstraintField(w, XmTabStackC_offsets, \ + XmTabStack, f, t) + +#define XmTabStackC_tab_label_string(w) XmTabStackCField(w, tab_label_string, XmString) +#define XmTabStackC_tab_string_direction(w) XmTabStackCField(w, tab_string_direction, XmStringDirection) +#define XmTabStackC_tab_alignment(w) XmTabStackCField(w, tab_alignment, unsigned char) +#define XmTabStackC_tab_label_pixmap(w) XmTabStackCField(w, tab_label_pixmap, Pixmap) +#define XmTabStackC_tab_pixmap_placement(w) XmTabStackCField(w, tab_pixmap_placement, XmPixmapPlacement) +#define XmTabStackC_tab_foreground(w) XmTabStackCField(w, tab_foreground, Pixel) +#define XmTabStackC_tab_background(w) XmTabStackCField(w, tab_background, Pixel) +#define XmTabStackC_tab_background_pixmap(w) XmTabStackCField(w, tab_background_pixmap, Pixmap) +#define XmTabStackC_free_tab_pixmap(w) XmTabStackCField(w, free_tab_pixmap, Boolean) +#define XmTabStackC_tear_off_enabled(w) XmTabStackCField(w, tear_off_enabled, Boolean) +#define XmTabStackC_index(w) XmTabStackCField(w, index, int) +#define XmTabStackC_width(w) XmTabStackCField(w, width, Dimension) +#define XmTabStackC_height(w) XmTabStackCField(w, height, Dimension) + +typedef struct _XmTabStackConstraintRec { + XmManagerConstraintPart manager; + XmTabStackConstraintPart tab_stack; +} XmTabStackConstraintRec, * XmTabStackConstraintPtr; + +extern XmOffsetPtr XmTabStack_offsets; +extern XmOffsetPtr XmTabStackC_offsets; + +#define XmNillegalUniformTabSizeMsg \ +"XmNuniformTabSize must be true if XmNtabMode is XmTABS_STACKED or\n\ +XmTABS_STACKED_STATIC." + +#define XmTabStackIndex (XmBulletinBoardIndex + 1) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __TabStackP_h__ */ diff --git a/libXm/linux86/Xm/Table.h b/libXm/linux86/Xm/Table.h new file mode 100644 index 0000000..36b0c45 --- /dev/null +++ b/libXm/linux86/Xm/Table.h @@ -0,0 +1,66 @@ +/* + * COPYRIGHT NOTICE + * Copyright (c) 1995 Integrated Computer Solutions + */ + + +#ifndef __xm_table_h__ +#define __xm_table_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifndef XmIsTable +#define XmIsTable(w) XtIsSubclass((w), xmTableWidgetClass) +#endif + +extern WidgetClass xmTableWidgetClass; + +typedef struct _XmTableClassRec *XmTableWidgetClass; +typedef struct _XmTableRec *XmTableWidget; + +#if NeedFunctionPrototypes +typedef String (*XmStringFunc)(Widget); +typedef void (*XmFreeProc)(XtPointer); +typedef void (*XmRenderProc)(Widget, Widget, XRectangle*, GC, String); +typedef String (*XmFetchCellValueFunc)(Widget, Widget, int); +typedef void (*XmStoreCellValueProc)(Widget, Widget, int, String); +typedef void (*XmFreeCellValueProc)(Widget, String); + +extern Widget XmCreateTable(Widget, String, ArgList, Cardinal); +extern void XmTableGotoCell(Widget, Widget, int); +extern void XmTableUpdate(Widget); +#else +typedef String (*XmStringFunc)(); +typedef void (*XmFreeProc)(); +typedef void (*XmRenderProc)(); +typedef String (*XmFetchCellValueFunc)(); +typedef void (*XmStoreCellValueProc)(); +typedef void (*XmFreeCellValueProc)(); + +extern Widget XmCreateTable(); +extern void XmTableGotoCell(); +extern void XmTableUpdate(); +#endif + +#define XmCR_CELL_VERIFY_TRAVERSE 0 +#define XmCR_CELL_TRAVERSE 1 +typedef struct _XmTableCallbackStruct { + int reason; + XEvent *event; + Widget from_cell; + int from_row; + Widget to_cell; + int to_row; + Boolean confirm; +} XmTableCallbackStruct; + +#ifdef __cplusplus +} +#endif + +#endif /* __xm_table_h__ */ + diff --git a/libXm/linux86/Xm/TableP.h b/libXm/linux86/Xm/TableP.h new file mode 100644 index 0000000..c1d1be3 --- /dev/null +++ b/libXm/linux86/Xm/TableP.h @@ -0,0 +1,320 @@ +/* + * COPYRIGHT NOTICE + * Copyright (c) 1995 Integrated Computer Solutions + */ + +#ifndef __xm_tablep_h__ +#define __xm_tablep_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#ifndef __SCROLL_MANAGER__ +#define __SCROLL_MANAGER__ +typedef struct _SmScrollNode { + struct _SmScrollNode *next; + struct _SmScrollNode *prev; + int x; + int y; +} SmScrollNodeRec, *SmScrollNode; + +typedef struct _SmScrollMgr { + int offset_x; + int offset_y; + int scroll_count; + SmScrollNode scroll_queue; + Boolean scrolling; +} SmScrollMgrRec, *SmScrollMgr; +#endif /* __SCROLL_MANAGER__ */ + +typedef struct _XmTableDefaultProcRec { + String widget_class_name; + WidgetClass widget_class; + XmWidgetFunc focus_widget_func; + XtWidgetProc select_text_proc; + XtWidgetProc unselect_text_proc; + XtStringProc set_value_proc; + XmStringFunc get_value_func; + XmFreeProc free_proc; + XmRenderProc render_proc; +} XmTableDefaultProcRec, * XmTableDefaultProcs; + +typedef struct _XmTableClassPart { + String traversal_translations; + String edit_translations; + XmTableDefaultProcs default_procs; + Cardinal num_default_procs; + XtPointer extension; +} XmTableClassPart; + +typedef struct _XmTableClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmTableClassPart table_class; +} XmTableClassRec; + +typedef struct _XmTableConstraintPart { + /* Public */ + + XmString column_title; + Boolean resizable; + + XmWidgetFunc focus_widget_func; + XtWidgetProc select_text_proc; + XtWidgetProc unselect_text_proc; + XtStringProc set_value_proc; + XmStringFunc get_value_func; + XmFreeProc free_proc; + XmRenderProc render_proc; + + /* Private */ + + Boolean translations_inited; + XtTranslations edit_translations; + XtTranslations traversal_translations; + + XmString _column_title; + + int column_index; + int offset; + + Widget label; + + /* new public */ + Boolean editable; +} XmTableConstraintPart, * XmTableConstraint; + +typedef struct _XmTableConstraintRec { + XmManagerConstraintPart manager; + XmTableConstraintPart table; +} XmTableConstraintRec, * XmTableConstraintPtr; + +typedef struct _XmTablePart { + + /* Public */ + + Cardinal num_rows; + Boolean resize_width; + Boolean resize_height; + + XmFontList font_list; + + Dimension margin_width; + Dimension margin_height; + Dimension spacing; + Dimension line_width; + + Boolean show_titles; + Boolean set_child_color; + unsigned char title_alignment; + XmFontList title_font_list; + + Pixel title_foreground; + Pixel title_background; + Pixmap title_background_pixmap; + Pixel title_top_shadow_color; + Pixmap title_top_shadow_pixmap; + Pixel title_bottom_shadow_color; + Pixmap title_bottom_shadow_pixmap; + Pixel title_shade_color; + Pixmap title_shade_pixmap; + Pixel table_color; + Pixmap table_pixmap; + Pixel shade_color; + Pixmap shade_pixmap; + Pixel line_color; + Pixmap line_pixmap; + + XmFetchCellValueFunc fetch_cell_value_func; + XmStoreCellValueProc store_cell_value_proc; + XmFreeCellValueProc free_cell_value_proc; + + XtCallbackList cell_traverse_verify_callback; + XtCallbackList cell_traverse_callback; + + /* Private */ + + Boolean inited; + + SmScrollMgr scroll_mgr; + + int y_origin; + int x_origin; + + int cell_x; + int cell_y; + Widget active_cell; + + int move_status; + int move_start_x; + int move_cur_x; + int half_line_width; + Widget move_widget; + + Cursor move_cursor; + + XRectangle save_size; + Dimension save_shadow_thickness; + + int title_height; + int table_height; + int table_width; + int row_height; + int valid_cnt; + + int *offset; + int num_offsets; + + Widget vscroll; + Widget hscroll; + Widget clip; + Widget title_clip; + Widget title_backing; + + GC foreground_GC; + GC title_top_shadow_GC; + GC title_bottom_shadow_GC; + GC table_GC; + GC line_GC; + GC shade_GC; + GC move_GC; +} XmTablePart; + +typedef struct _XmTableRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmTablePart table; +} XmTableRec; + +#define XmProcTableAppend \ + { "__APPEND__", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } + + +#define XmTableIndex (XmManagerIndex + 1) + +extern XmOffsetPtr XmTable_offsets; +extern XmOffsetPtr XmTableC_offsets; + +#define XmTableCField(w,f,t) XmConstraintField(w, XmTableC_offsets, XmTable, f, t) +#define XmTableC_column_title(w) XmTableCField(w, column_title, XmString) +#define XmTableC_resizable(w) XmTableCField(w, resizable, Boolean) +#define XmTableC_editable(w) XmTableCField(w, editable, Boolean) +#define XmTableC_focus_widget_func(w) XmTableCField(w, focus_widget_func, XmWidgetFunc) +#define XmTableC_select_text_proc(w) XmTableCField(w, select_text_proc, XtWidgetProc) +#define XmTableC_unselect_text_proc(w) XmTableCField(w, unselect_text_proc, XtWidgetProc) +#define XmTableC_set_value_proc(w) XmTableCField(w, set_value_proc, XtStringProc) +#define XmTableC_get_value_func(w) XmTableCField(w, get_value_func, XmStringFunc) +#define XmTableC_free_proc(w) XmTableCField(w, free_proc, XmFreeProc) +#define XmTableC_render_proc(w) XmTableCField(w, render_proc, XmRenderProc) +#define XmTableC_translations_inited(w) XmTableCField(w, translations_inited, Boolean) +#define XmTableC_edit_translations(w) XmTableCField(w, edit_translations, XtTranslations) +#define XmTableC_traversal_translations(w) XmTableCField(w, traversal_translations, XtTranslations) +#define XmTableC__column_title(w) XmTableCField(w, _column_title, XmString) +#define XmTableC_column_index(w) XmTableCField(w, column_index, int) +#define XmTableC_offset(w) XmTableCField(w, offset, int) +#define XmTableC_label(w) XmTableCField(w, label, Widget) + +#define XmTableField(w,f,t) XmField(w, XmTable_offsets, XmTable, f, t) +#define XmTable_num_rows(w) XmTableField(w, num_rows, Cardinal) +#define XmTable_resize_width(w) XmTableField(w, resize_width, Boolean) +#define XmTable_resize_height(w) XmTableField(w, resize_height, Boolean) +#define XmTable_font_list(w) XmTableField(w, font_list, XmFontList) +#define XmTable_margin_width(w) XmTableField(w, margin_width, Dimension) +#define XmTable_margin_height(w) XmTableField(w, margin_height, Dimension) +#define XmTable_spacing(w) XmTableField(w, spacing, Dimension) +#define XmTable_line_width(w) XmTableField(w, line_width, Dimension) +#define XmTable_show_titles(w) XmTableField(w, show_titles, Boolean) +#define XmTable_set_child_color(w) XmTableField(w, set_child_color, Boolean) +#define XmTable_title_alignment(w) XmTableField(w, title_alignment, unsigned char) +#define XmTable_title_font_list(w) XmTableField(w, title_font_list, XmFontList) +#define XmTable_title_foreground(w) XmTableField(w, title_foreground, Pixel) +#define XmTable_title_background(w) XmTableField(w, title_background, Pixel) +#define XmTable_title_background_pixmap(w) XmTableField(w, title_background_pixmap, Pixmap) +#define XmTable_title_top_shadow_color(w) XmTableField(w, title_top_shadow_color, Pixel) +#define XmTable_title_top_shadow_pixmap(w) XmTableField(w, title_top_shadow_pixmap, Pixmap) +#define XmTable_title_bottom_shadow_color(w) XmTableField(w, title_bottom_shadow_color, Pixel) +#define XmTable_title_bottom_shadow_pixmap(w) XmTableField(w, title_bottom_shadow_pixmap, Pixmap) +#define XmTable_title_shade_color(w) XmTableField(w, title_shade_color, Pixel) +#define XmTable_title_shade_pixmap(w) XmTableField(w, title_shade_pixmap, Pixmap) +#define XmTable_table_color(w) XmTableField(w, table_color, Pixel) +#define XmTable_table_pixmap(w) XmTableField(w, table_pixmap, Pixmap) +#define XmTable_shade_color(w) XmTableField(w, shade_color, Pixel) +#define XmTable_shade_pixmap(w) XmTableField(w, shade_pixmap, Pixmap) +#define XmTable_line_color(w) XmTableField(w, line_color, Pixel) +#define XmTable_line_pixmap(w) XmTableField(w, line_pixmap, Pixmap) +#define XmTable_fetch_cell_value_func(w) XmTableField(w, fetch_cell_value_func, XmFetchCellValueFunc) +#define XmTable_store_cell_value_proc(w) XmTableField(w, store_cell_value_proc, XmStoreCellValueProc) +#define XmTable_free_cell_value_proc(w) XmTableField(w, free_cell_value_proc, XmFreeCellValueProc) +#define XmTable_cell_traverse_verify_callback(w) XmTableField(w, cell_traverse_verify_callback, XtCallbackList) +#define XmTable_cell_traverse_callback(w) XmTableField(w, cell_traverse_callback, XtCallbackList) +#define XmTable_inited(w) XmTableField(w, inited, Boolean) +#define XmTable_scroll_mgr(w) XmTableField(w, scroll_mgr, SmScrollMgr) +#define XmTable_y_origin(w) XmTableField(w, y_origin, int) +#define XmTable_x_origin(w) XmTableField(w, x_origin, int) +#define XmTable_cell_x(w) XmTableField(w, cell_x, int) +#define XmTable_cell_y(w) XmTableField(w, cell_y, int) +#define XmTable_active_cell(w) XmTableField(w, active_cell, Widget) +#define XmTable_move_status(w) XmTableField(w, move_status, int) +#define XmTable_move_start_x(w) XmTableField(w, move_start_x, int) +#define XmTable_move_cur_x(w) XmTableField(w, move_cur_x, int) +#define XmTable_half_line_width(w) XmTableField(w, half_line_width, int) +#define XmTable_move_widget(w) XmTableField(w, move_widget, Widget) +#define XmTable_move_cursor(w) XmTableField(w, move_cursor, Cursor) +#define XmTable_save_size(w) XmTableField(w, save_size, XRectangle) +#define XmTable_save_shadow_thickness(w) XmTableField(w, save_shadow_thickness, Dimension) +#define XmTable_title_height(w) XmTableField(w, title_height, int) +#define XmTable_table_height(w) XmTableField(w, table_height, int) +#define XmTable_table_width(w) XmTableField(w, table_width, int) +#define XmTable_row_height(w) XmTableField(w, row_height, int) +#define XmTable_valid_cnt(w) XmTableField(w, valid_cnt, int) +#define XmTable_offset(w) XmTableField(w, offset, int*) +#define XmTable_num_offsets(w) XmTableField(w, num_offsets, int) +#define XmTable_vscroll(w) XmTableField(w, vscroll, Widget) +#define XmTable_hscroll(w) XmTableField(w, hscroll, Widget) +#define XmTable_clip(w) XmTableField(w, clip, Widget) +#define XmTable_title_clip(w) XmTableField(w, title_clip, Widget) +#define XmTable_title_backing(w) XmTableField(w, title_backing, Widget) +#define XmTable_foreground_GC(w) XmTableField(w, foreground_GC, GC) +#define XmTable_title_top_shadow_GC(w) XmTableField(w, title_top_shadow_GC, GC) +#define XmTable_title_bottom_shadow_GC(w) XmTableField(w, title_bottom_shadow_GC, GC) +#define XmTable_table_GC(w) XmTableField(w, table_GC, GC) +#define XmTable_line_GC(w) XmTableField(w, line_GC, GC) +#define XmTable_shade_GC(w) XmTableField(w, shade_GC, GC) +#define XmTable_move_GC(w) XmTableField(w, move_GC, GC) + + +#define XmYOffset(t,i) (((i) < 0 || XmTable_offset(t)== NULL) ? 0 : \ + XmTable_offset(t)[(i)]) + +#ifdef XmRENAME_WIDGETS +#define xmTableClassRec xmXXTableClassRec +#endif + + +extern void _XmTopShadowColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmManagerTopShadowPixmapDefault( + Widget widget, + int offset, + XrmValue *value) ; + + +extern XmTableClassRec xmTableClassRec; + +#ifdef __cplusplus +} +#endif + +#endif /* __xm_table_h__ */ + diff --git a/libXm/linux86/Xm/TakesDefT.h b/libXm/linux86/Xm/TakesDefT.h new file mode 100644 index 0000000..cc8ea9e --- /dev/null +++ b/libXm/linux86/Xm/TakesDefT.h @@ -0,0 +1,70 @@ +/* $XConsortium: TakesDefT.h /main/5 1995/07/15 20:55:59 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmTakesDefaultT_H +#define _XmTakesDefaultT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTtakesDefault; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmTakesDefaultNotifyProc)(Widget w, + XtEnum state); + +/* Version 0: initial release. */ + +typedef struct _XmTakesDefaultTraitRec { + int version; /* 0 */ + XmTakesDefaultNotifyProc showAsDefault; +} XmTakesDefaultTraitRec, *XmTakesDefaultTrait; + +enum {XmDEFAULT_READY, XmDEFAULT_ON, XmDEFAULT_OFF, XmDEFAULT_FORGET} ; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTakesDefaultT_H */ diff --git a/libXm/linux86/Xm/TearOffBP.h b/libXm/linux86/Xm/TearOffBP.h new file mode 100644 index 0000000..08e0883 --- /dev/null +++ b/libXm/linux86/Xm/TearOffBP.h @@ -0,0 +1,131 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TearOffBP.h /main/11 1995/10/25 20:20:56 cde-sun $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* + * TearOffBP.h - Private definitions for TearOffButton widget + * (Used by RowColumn Tear Off Menupanes) + * + */ + +#ifndef _XmTearOffBP_h +#define _XmTearOffBP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************** + * + * TearOffButton Widget Private Data + * + *****************************************************************************/ + +/* New fields for the TearOffButton widget class record */ +typedef struct _XmTearOffButtonClassPart +{ + String translations; +} XmTearOffButtonClassPart; + +/* Full Class record declaration */ +typedef struct _XmTearOffButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmPushButtonClassPart pushbutton_class; + XmTearOffButtonClassPart tearoffbutton_class; +} XmTearOffButtonClassRec; + +typedef struct _XmTearOffButtonClassRec *XmTearOffButtonWidgetClass; + +externalref XmTearOffButtonClassRec xmTearOffButtonClassRec; + +/* New fields for the TearOffButton widget record */ +typedef struct { + Dimension margin; + unsigned char orientation; + unsigned char separator_type; + GC separator_GC; + Boolean set_recompute_size; +} XmTearOffButtonPart; + +/***************************************************************************** + * + * Full instance record declaration + * + ****************************************************************************/ + +typedef struct _XmTearOffButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmPushButtonPart pushbutton; + XmTearOffButtonPart tear_off_button; +} XmTearOffButtonRec; + +typedef struct _XmTearOffButtonRec *XmTearOffButtonWidget; + +/* Class Record Constant */ + +externalref WidgetClass xmTearOffButtonWidgetClass; + +#ifndef XmIsTearOffButton +#define XmIsTearOffButton(w) XtIsSubclass(w, xmTearOffButtonWidgetClass) +#endif /* XmIsTearOffButton */ + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTearOffButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TearOffP.h b/libXm/linux86/Xm/TearOffP.h new file mode 100644 index 0000000..c32a15d --- /dev/null +++ b/libXm/linux86/Xm/TearOffP.h @@ -0,0 +1,62 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TearOffP.h /main/8 1995/10/25 20:21:05 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmTearOffP_h +#define _XmTearOffP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmExcludedParentPaneRec +{ + short pane_list_size; + Widget *pane; + short num_panes; +} XmExcludedParentPaneRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTearOffP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/Text.h b/libXm/linux86/Xm/Text.h new file mode 100644 index 0000000..4e4d972 --- /dev/null +++ b/libXm/linux86/Xm/Text.h @@ -0,0 +1,273 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Text.h /main/15 1996/01/29 13:20:20 daniel $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmText_h +#define _XmText_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* -------------- * + * type defines * + * -------------- */ +typedef struct _XmTextSourceRec *XmTextSource; +typedef struct _XmTextClassRec *XmTextWidgetClass; +typedef struct _XmTextRec *XmTextWidget; + +/* -------------- * + * extern class * + * -------------- */ +externalref WidgetClass xmTextWidgetClass; + + +/* --------------------------------------- * + * text widget fast subclassing fallback * + * --------------------------------------- */ + +#ifndef XmIsText +#define XmIsText(w) XtIsSubclass(w, xmTextWidgetClass) +#endif /* XmIsText */ + + +/* ----------------------------------- * + * text widget public functions * + * ----------------------------------- */ + +/******** Public Function Declarations ********/ + +extern void XmTextSetHighlight( + Widget w, + XmTextPosition left, + XmTextPosition right, + XmHighlightMode mode) ; +extern Widget XmCreateScrolledText( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmCreateText( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern int XmTextGetSubstring( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + char *buffer) ; +extern int XmTextGetSubstringWcs( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + wchar_t *buffer) ; +extern char * XmTextGetString( + Widget widget) ; +extern wchar_t * XmTextGetStringWcs( + Widget widget) ; +extern XmTextPosition XmTextGetLastPosition( + Widget widget) ; +extern void XmTextSetString( + Widget widget, + char *value) ; +extern void XmTextSetStringWcs( + Widget widget, + wchar_t *wc_value) ; +extern void XmTextReplace( + Widget widget, + XmTextPosition frompos, + XmTextPosition topos, + char *value) ; +extern void XmTextReplaceWcs( + Widget widget, + XmTextPosition frompos, + XmTextPosition topos, + wchar_t *value) ; +extern void XmTextInsert( + Widget widget, + XmTextPosition position, + char *value) ; +extern void XmTextInsertWcs( + Widget widget, + XmTextPosition position, + wchar_t *wc_value) ; +extern void XmTextSetAddMode( + Widget widget, +#if NeedWidePrototypes + int state) ; +#else + Boolean state) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmTextGetAddMode( + Widget widget) ; +extern Boolean XmTextGetEditable( + Widget widget) ; +extern void XmTextSetEditable( + Widget widget, +#if NeedWidePrototypes + int editable) ; +#else + Boolean editable) ; +#endif /* NeedWidePrototypes */ +extern int XmTextGetMaxLength( + Widget widget) ; +extern void XmTextSetMaxLength( + Widget widget, + int max_length) ; +extern XmTextPosition XmTextGetTopCharacter( + Widget widget) ; +extern void XmTextSetTopCharacter( + Widget widget, + XmTextPosition top_character) ; +extern XmTextPosition XmTextGetCursorPosition( + Widget widget) ; +extern XmTextPosition XmTextGetInsertionPosition( + Widget widget) ; +extern void XmTextSetInsertionPosition( + Widget widget, + XmTextPosition position) ; +extern void XmTextSetCursorPosition( + Widget widget, + XmTextPosition position) ; +extern Boolean XmTextRemove( + Widget widget) ; +extern Boolean XmTextCopy( + Widget widget, + Time copy_time) ; +extern Boolean XmTextCopyLink( + Widget widget, + Time copy_time) ; +extern Boolean XmTextCut( + Widget widget, + Time cut_time) ; +extern Boolean XmTextPaste( + Widget widget) ; +extern Boolean XmTextPasteLink( + Widget widget) ; +extern char * XmTextGetSelection( + Widget widget) ; +extern wchar_t * XmTextGetSelectionWcs( + Widget widget) ; +extern void XmTextSetSelection( + Widget widget, + XmTextPosition first, + XmTextPosition last, + Time set_time) ; +extern void XmTextClearSelection( + Widget widget, + Time clear_time) ; +extern Boolean XmTextGetSelectionPosition( + Widget widget, + XmTextPosition *left, + XmTextPosition *right) ; +extern XmTextPosition XmTextXYToPos( + Widget widget, +#if NeedWidePrototypes + int x, + int y) ; +#else + Position x, + Position y) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmTextPosToXY( + Widget widget, + XmTextPosition position, + Position *x, + Position *y) ; +extern XmTextSource XmTextGetSource( + Widget widget) ; +extern void XmTextSetSource( + Widget widget, + XmTextSource source, + XmTextPosition top_character, + XmTextPosition cursor_position) ; +extern void XmTextShowPosition( + Widget widget, + XmTextPosition position) ; +extern void XmTextScroll( + Widget widget, + int n) ; +extern int XmTextGetBaseline( + Widget widget) ; +extern int XmTextGetCenterline( + Widget widget) ; +extern void XmTextDisableRedisplay( + Widget widget) ; +extern void XmTextEnableRedisplay( + Widget widget) ; +extern Boolean XmTextFindString( + Widget w, + XmTextPosition start, + char *search_string, + XmTextDirection direction, + XmTextPosition *position) ; +extern Boolean XmTextFindStringWcs( + Widget w, + XmTextPosition start, + wchar_t *wc_string, + XmTextDirection direction, + XmTextPosition *position) ; + +/******** End Public Function Declarations ********/ + +/* tmp: go to XmStrDefs */ +#define XmNtotalLines "totalLines" +#define XmCTotalLines "TotalLines" + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmText_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextF.h b/libXm/linux86/Xm/TextF.h new file mode 100644 index 0000000..e885e7d --- /dev/null +++ b/libXm/linux86/Xm/TextF.h @@ -0,0 +1,221 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextF.h /main/11 1995/07/13 18:05:20 drk $ */ +/* +* (c) Copyright 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextF_h +#define _XmTextF_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************** + * type defines * + ******************/ +typedef struct _XmTextFieldClassRec *XmTextFieldWidgetClass; +typedef struct _XmTextFieldRec *XmTextFieldWidget; + +/****************** + * extern class * + ******************/ +externalref WidgetClass xmTextFieldWidgetClass; + + +/************************ + * fast subclass define * + ************************/ +#ifndef XmIsTextField +#define XmIsTextField(w) XtIsSubclass(w, xmTextFieldWidgetClass) +#endif /* XmIsTextField */ + + +/******************** + * public functions * + ********************/ + +/******** Public Function Declarations ********/ + +extern char * XmTextFieldGetString( + Widget w) ; +extern int XmTextFieldGetSubstring( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + char *buffer) ; +extern wchar_t * XmTextFieldGetStringWcs( + Widget w) ; +extern int XmTextFieldGetSubstringWcs( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + wchar_t *buffer) ; +extern XmTextPosition XmTextFieldGetLastPosition( + Widget w) ; +extern void XmTextFieldSetString( + Widget w, + char *value) ; +extern void XmTextFieldSetStringWcs( + Widget w, + wchar_t *wc_value) ; +extern void XmTextFieldReplace( + Widget w, + XmTextPosition from_pos, + XmTextPosition to_pos, + char *value) ; +extern void XmTextFieldReplaceWcs( + Widget w, + XmTextPosition from_pos, + XmTextPosition to_pos, + wchar_t *wc_value) ; +extern void XmTextFieldInsert( + Widget w, + XmTextPosition position, + char *value) ; +extern void XmTextFieldInsertWcs( + Widget w, + XmTextPosition position, + wchar_t *wcstring) ; +extern void XmTextFieldSetAddMode( + Widget w, +#if NeedWidePrototypes + int state) ; +#else + Boolean state) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmTextFieldGetAddMode( + Widget w) ; +extern Boolean XmTextFieldGetEditable( + Widget w) ; +extern void XmTextFieldSetEditable( + Widget w, +#if NeedWidePrototypes + int editable) ; +#else + Boolean editable) ; +#endif /* NeedWidePrototypes */ +extern int XmTextFieldGetMaxLength( + Widget w) ; +extern void XmTextFieldSetMaxLength( + Widget w, + int max_length) ; +extern XmTextPosition XmTextFieldGetCursorPosition( + Widget w) ; +extern XmTextPosition XmTextFieldGetInsertionPosition( + Widget w) ; +extern void XmTextFieldSetCursorPosition( + Widget w, + XmTextPosition position) ; +extern void XmTextFieldSetInsertionPosition( + Widget w, + XmTextPosition position) ; +extern Boolean XmTextFieldGetSelectionPosition( + Widget w, + XmTextPosition *left, + XmTextPosition *right) ; +extern char * XmTextFieldGetSelection( + Widget w) ; +extern wchar_t * XmTextFieldGetSelectionWcs( + Widget w) ; +extern Boolean XmTextFieldRemove( + Widget w) ; +extern Boolean XmTextFieldCopy( + Widget w, + Time clip_time) ; +extern Boolean XmTextFieldCopyLink( + Widget w, + Time clip_time) ; +extern Boolean XmTextFieldCut( + Widget w, + Time clip_time) ; +extern Boolean XmTextFieldPaste( + Widget w) ; +extern Boolean XmTextFieldPasteLink( + Widget w) ; +extern void XmTextFieldClearSelection( + Widget w, + Time sel_time) ; +extern void XmTextFieldSetSelection( + Widget w, + XmTextPosition first, + XmTextPosition last, + Time sel_time) ; +extern XmTextPosition XmTextFieldXYToPos( + Widget w, +#if NeedWidePrototypes + int x, + int y) ; +#else + Position x, + Position y) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmTextFieldPosToXY( + Widget w, + XmTextPosition position, + Position *x, + Position *y) ; +extern void XmTextFieldShowPosition( + Widget w, + XmTextPosition position) ; +extern void XmTextFieldSetHighlight( + Widget w, + XmTextPosition left, + XmTextPosition right, + XmHighlightMode mode) ; +extern int XmTextFieldGetBaseline( + Widget w) ; +extern Widget XmCreateTextField( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextF_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextFP.h b/libXm/linux86/Xm/TextFP.h new file mode 100644 index 0000000..1adea24 --- /dev/null +++ b/libXm/linux86/Xm/TextFP.h @@ -0,0 +1,341 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY +*/ +/* $TOG: TextFP.h /main/17 1997/03/04 17:00:01 dbl $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextFP_h +#define _XmTextFP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Defines for different cursors + */ + +#define IBEAM_WIDTH 3 +#define CARET_WIDTH 9 +#define CARET_HEIGHT 5 + +/* + * Here is the Text Field Widget class structure. + */ + +typedef struct _XmTextFieldClassPart { + XtPointer extension; /* Pointer to extension record. */ +} XmTextFieldClassPart; + +typedef struct _XmTextFieldClassRec { + CoreClassPart core_class; /* Not RectObjClassPart so I can reference + core_class s */ + XmPrimitiveClassPart primitive_class; + XmTextFieldClassPart text_class; +} XmTextFieldClassRec; + +externalref XmTextFieldClassRec xmTextFieldClassRec; + +/* + * On the spot support. + */ +typedef struct _OnTheSpotData { + XmTextPosition start; + XmTextPosition end; + XmTextPosition cursor; + int over_len; + int over_maxlen; + char *over_str; + int under_preedit; + Boolean under_verify_preedit; + Boolean verify_commit; + int pad; +} OnTheSpotDataRec, *OnTheSpotData; + +/* + * Here is the Text Field Widget instance structures. + */ + +typedef struct _XmTextFieldPart { + XtCallbackList activate_callback; /* Command activate callback */ + XtCallbackList focus_callback; /* Verify gain focus callback */ + XtCallbackList losing_focus_callback; /* Verify losing focus + callback */ + XtCallbackList modify_verify_callback; /* Verify value to change + callback */ + XtCallbackList wcs_modify_verify_callback; /* Verify value to change + callback */ + XtCallbackList motion_verify_callback; /* Verify insert cursor position + to change callback */ + XtCallbackList gain_primary_callback; /* Gained ownership of Primary + Selection */ + XtCallbackList lose_primary_callback; /* Lost ownership of Primary + Selection */ + XtCallbackList value_changed_callback; /* Notify that value has changed + callback */ + char * value; /* pointer to widget value stored as char * */ + wchar_t * wc_value; /* pointer to widget value stored as + wchar_t * */ + + XmFontList font_list; /* Uses only the font portion of fontlist */ + XFontStruct *font; /* font retrieved from the fontlist */ + XmTextScanType *selection_array; /* Description of what to cycle + through on selections */ + _XmHighlightData highlight; /* Info on the highlighting regions. */ + + GC gc; /* Normal GC for drawing text and cursor */ + GC image_gc; /* Image GC for drawing text cursor*/ + GC save_gc; /* GC for saving/restoring under IBeam */ + + Pixmap ibeam_off; /* pixmap for area under the IBeam */ + Pixmap add_mode_cursor; /* The add mode cursor pixmap */ + Pixmap cursor; /* The ibeam cursor stencil */ + Pixmap putback; /* AVAILABLE: was in 1.1 but not really used */ + Pixmap stipple_tile; /* The tile pattern for the stippled I-beam */ + Pixmap image_clip; /* AVAILABLE: was in 1.2 but not used now */ + + XmTextPosition cursor_position; /* Character location of the insert + cursor */ + XmTextPosition new_h_offset; /* AVAILABLE: was in 1.1 but not used */ + XmTextPosition h_offset; /* The x position of the first character + (relative to left edge of widget) */ + XmTextPosition orig_left; /* Left primary selection prior to + extend */ + XmTextPosition orig_right; /* Right primary selection prior to + extend */ + XmTextPosition prim_pos_left; /* Left primary selection position */ + XmTextPosition prim_pos_right; /* Right primary selection position */ + XmTextPosition prim_anchor; /* Primary selection pivot point */ + + XmTextPosition sec_pos_left; /* Left secondary selection position */ + XmTextPosition sec_pos_right; /* Right secondary selection position */ + XmTextPosition sec_anchor; /* Secondary selection pivot point */ + + XmTextPosition stuff_pos; /* Position to stuff the primary selection */ + + Position select_pos_x; /* x position for timer-based scrolling */ + + Time prim_time; /* Timestamp of primary selection */ + Time dest_time; /* Timestamp of destination selection */ + Time sec_time; /* Timestamp of secondary selection */ + Time last_time; /* Time of last selection event */ + + XtIntervalId timer_id; /* Blinking cursor timer */ + XtIntervalId select_id; /* Timer based scrolling identifier */ + + int blink_rate; /* Rate of blinking text cursor in msec */ + int selection_array_count; /* Selection array count */ + int threshold; /* Selection threshold */ + int size_allocd; /* Size allocated for value string */ + int string_length; /* The number of characters in the string + (including the trailing NULL) */ + int cursor_height; /* Save cursor dimensions */ + int cursor_width; /* Save cursor dimensions */ + int sarray_index; /* Index into selection array */ + int max_length; /* Maximum number of character that can be + inserted into the text field widget */ + + int max_char_size; /* Max bytes per character in cur locale */ + short columns; /* The number of characters in the width */ + + Dimension margin_width; /* Height between text borders and text */ + Dimension margin_height; /* Width between text borders and text */ + Dimension average_char_width; /* Average character width based on font */ + Dimension margin_top; /* Height between text borders and top of + text */ + Dimension margin_bottom; /* Height between text borders and bottom of + text */ + Dimension font_ascent; /* Ascent of font or fontset used by widget */ + Dimension font_descent; /* Descent of font or fontset used by widget */ + + Boolean resize_width; /* Allows the widget to grow horizontally + when borders are reached */ + Boolean pending_delete; /* Delete primary selection on insert when + set to True */ + Boolean editable; /* Sets editablility of text */ + Boolean verify_bell; /* Determines if bell is sounded when verify + callback returns doit - False */ + Boolean cursor_position_visible; /* Sets visibility of insert cursor */ + + Boolean traversed; /* Flag used with losing focus verification to + indicate a traversal key pressed event */ + Boolean add_mode; /* Add mode for cursor movement */ + Boolean has_focus; /* Flag that indicates whether the widget + has input focus */ + Boolean blink_on; /* State of Blinking insert cursor */ + short int cursor_on; /* Indicates whether the cursor is visible */ + Boolean refresh_ibeam_off; /* Indicates whether the area under IBeam needs + to be re-captured */ + Boolean have_inverted_image_gc; /* fg/bg of image gc have been swapped */ + Boolean has_primary; /* Indicates that is has the + primary selection */ + Boolean has_secondary; /* Indicates that is has the + secondary selection */ + Boolean has_destination; /* Indicates that is has the + destination selection */ + Boolean sec_drag; /* Indicates a secondary drag was made */ + Boolean selection_move; /* Indicates that the action requires a + secondary move (i.e. copy & cut) */ + Boolean pending_off; /* indicates pending delete state */ + Boolean fontlist_created; /* Indicates that the text field widget created + it's own fontlist */ + Boolean has_rect; /* currently has clipping rectangle */ + Boolean do_drop; /* Indicates that the widget the recieved the + button release, did not have a previous + button press, so it is o.k. to request + the MOTIF_DROP selection. */ + Boolean cancel; /* Cancels selection actions when true */ + Boolean extending; /* Indicates extending primary selection */ + Boolean sec_extending; /* Indicates extending secondary selection */ + Boolean changed_visible; /* Indicates whether the dest_visible flag + is in a temporary changed state */ + Boolean have_fontset; /* The widgets font is a fontset, not a + fontstruct... use R5 draw routines */ + Boolean in_setvalues; /* used to disable unnecessary redisplays */ + Boolean do_resize; /* used to prevent inappropriate resizes */ + Boolean redisplay; /* used to set redisplay flag in setvalues */ + Boolean overstrike; /* overstrike mode for character input */ + Boolean sel_start; /* overstrike mode for character input */ + XtPointer extension; /* Pointer to extension record. */ + + XtCallbackList destination_callback; /* Selection destination cb */ + Boolean selection_link; /* Indicates that the action requires a + link */ + /* New for 2.0 */ + Boolean take_primary; /* Indicates that is has to take the + primary selection */ + GC cursor_gc; /* 1-bit depth GC for creating the I-beam + stipples (normal & add mode) */ + XtIntervalId drag_id; /* timer to start btn1 drag */ + _XmTextActionRec *transfer_action; /* to keep track of delayed action */ + /* Boolean rt_save; */ /* used for MT work */ + OnTheSpotData onthespot; /* data for on-the-spot im support */ + + Boolean check_set_render_table; /* used for MT safe work */ + Boolean programmatic_highlights; /* XmTextFieldSetHighlight called */ +} XmTextFieldPart; + +typedef struct _XmTextFieldRec { + CorePart core; + XmPrimitivePart primitive; + XmTextFieldPart text; +} XmTextFieldRec; + + +/**************** + * + * Macros for the uncached data + * + ****************/ + +#define TextF_ActivateCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.activate_callback) +#define TextF_LosingFocusCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.losing_focus_callback) +#define TextF_FocusCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.focus_callback) +#define TextF_ModifyVerifyCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.modify_verify_callback) +#define TextF_ModifyVerifyCallbackWcs(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.wcs_modify_verify_callback) +#define TextF_MotionVerifyCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.motion_verify_callback) +#define TextF_ValueChangedCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.value_changed_callback) +#define TextF_Value(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.value) +#define TextF_WcValue(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.wc_value) +#define TextF_MarginHeight(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.margin_height) +#define TextF_MarginWidth(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.margin_width) +#define TextF_CursorPosition(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.cursor_position) +#define TextF_Columns(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.columns) +#define TextF_MaxLength(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.max_length) +#define TextF_BlinkRate(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.blink_rate) +#define TextF_FontList(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font_list) +#define TextF_Font(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font) +#define TextF_FontAscent(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font_ascent) +#define TextF_FontDescent(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font_descent) +#define TextF_SelectionArray(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.selection_array) +#define TextF_SelectionArrayCount(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.selection_array_count) +#define TextF_ResizeWidth(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.resize_width) +#define TextF_PendingDelete(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.pending_delete) +#define TextF_Editable(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.editable) +#define TextF_CursorPositionVisible(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.cursor_position_visible) +#define TextF_Threshold(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.threshold) +#define TextF_UseFontSet(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.have_fontset) + +/* + * On the spot support. + */ +#define PreStart(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->start) +#define PreEnd(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->end) +#define PreCursor(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->cursor) +#define FUnderVerifyPreedit(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->under_verify_preedit) +#define FVerifyCommitNeeded(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->verify_commit) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextFieldWidgetP_h */ diff --git a/libXm/linux86/Xm/TextFSelP.h b/libXm/linux86/Xm/TextFSelP.h new file mode 100644 index 0000000..ddff23b --- /dev/null +++ b/libXm/linux86/Xm/TextFSelP.h @@ -0,0 +1,57 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextFSelP.h /main/8 1995/07/13 18:06:15 drk $ */ +/* (c) Copyright 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmTextFSelP_h +#define _XmTextFSelP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextFSelP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextInP.h b/libXm/linux86/Xm/TextInP.h new file mode 100644 index 0000000..bebad29 --- /dev/null +++ b/libXm/linux86/Xm/TextInP.h @@ -0,0 +1,166 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextInP.h /main/13 1995/07/13 18:07:54 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextInP_h +#define _XmTextInP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************** + * + * Definitions for modules implementing text input modules. + * + ****************************************************************/ + +typedef struct { + int x; + int y; +} SelectionHint; + +typedef struct _InputDataRec { + XmTextWidget widget; /* Back-pointer to widget record. */ + XmTextScanType *sarray; /* Description of what to cycle through on */ + /* selections. */ + int sarraycount; /* Number of elements in above. */ + int new_sel_length; /* New selection length for selection moves. */ + int threshold; /* number of pixels crossed -> drag */ + SelectionHint selectionHint; /* saved coords of button down */ + SelectionHint Sel2Hint; /* saved the coords of button down */ + XtIntervalId select_id; + XmTextScanType stype; /* Current selection type. */ + XmTextScanDirection extendDir; + XmTextScanDirection Sel2ExtendDir; + XmTextPosition origLeft, origRight; + XmTextPosition Sel2OrigLeft, Sel2OrigRight; + XmTextPosition stuffpos; + XmTextPosition sel2Left, sel2Right; /* secondary selection */ + XmTextPosition anchor; /* anchor point of the primary selection */ + Position select_pos_x; /* x position for timer-based scrolling */ + Position select_pos_y; /* y position for timer-based scrolling */ + Boolean pendingdelete; /* TRUE if we're implementing pending delete */ + Boolean syncing; /* If TRUE, then we've multiple keystrokes */ + Boolean extending; /* true if we are extending */ + Boolean Sel2Extending; /* true if we are extending */ + Boolean hasSel2; /* has secondary selection */ + Boolean has_destination; /* has destination selection */ + Boolean selectionMove; /* delete selection after stuff */ + Boolean cancel; /* indicates that cancel was pressed */ + Boolean overstrike; /* overstrike */ + Boolean sel_start; /* indicates that a btn2 was pressed */ + Time dest_time; /* time of destination selection ownership */ + Time sec_time; /* time of secondary selection ownership */ + Time lasttime; /* Time of last event. */ + Boolean selectionLink; /* This is a link vs. a copy operation */ + XtIntervalId drag_id; /* timer to start btn1 drag */ + _XmTextActionRec *transfer_action; /* to keep track of delayed action */ +} InputDataRec, *InputData; + + +/* + * Create a new instance of an input object. By the time this is called, + * the widget context has been saved. + */ + +typedef void (*InputCreateProc)( + Widget, + ArgList, + Cardinal) ; + +/* + * Get values out of the input object. + */ +typedef void (*InputGetValuesProc)( + Widget, + ArgList, + Cardinal) ; + +/* + * Set values in the input object. + */ + +typedef void (*InputSetValuesProc)( + Widget, + Widget, + Widget, + ArgList, + Cardinal *) ; + +/* + * Inform input of invalidated positions. + */ +typedef void (*InputInvalidateProc)( + XmTextWidget, + XmTextPosition, + XmTextPosition, + long) ; + +/* + * Get secondary resources. + */ +typedef void (*InputGetSecResProc)( + XmSecondaryResourceData *) ; + + +typedef struct _InputRec { + struct _InputDataRec *data; /* Input-specific data; opaque type. */ + InputInvalidateProc Invalidate; + InputGetValuesProc GetValues; + InputSetValuesProc SetValues; + XtWidgetProc destroy; + InputGetSecResProc GetSecResData; +} InputRec; + + +externalref XtPointer _XmdefaultTextActionsTable; +externalref Cardinal _XmdefaultTextActionsTableSize; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextInP_h */ +/*DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextOutP.h b/libXm/linux86/Xm/TextOutP.h new file mode 100644 index 0000000..baa2298 --- /dev/null +++ b/libXm/linux86/Xm/TextOutP.h @@ -0,0 +1,342 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: TextOutP.h /main/17 1997/03/18 10:55:51 dbl $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmTextOutP_h +#define _XmTextOutP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************** + * + * Definitions for modules implementing and using text output routines. + * + ****************************************************************/ + +#define ShouldWordWrap(data, widget) (data->wordwrap && \ + (!(((XmDirectionMatch(XmPrim_layout_direction(widget), \ + XmTOP_TO_BOTTOM_RIGHT_TO_LEFT)) ? \ + data->scrollvertical : data->scrollhorizontal) \ + && XmIsScrolledWindow(widget->core.parent))) \ + && widget->text.edit_mode != XmSINGLE_LINE_EDIT) + +typedef struct _LineTableExtraRec { + Dimension width; + Boolean wrappedbychar; +} LineTableExtraRec, *LineTableExtra ; + +/* + * output.c (part of stext) + */ + +typedef unsigned int LineNum; +typedef enum {on, off} OnOrOff; /* For when Booleans aren't obvious enough. */ + +/* + * Return the line number containing the given position. If text currently + * knows of no line containing that position, returns NOLINE. + */ + +#define NOLINE 30000 + +/* + * These next define the types of the routines that output is required + * to export for use by text and by input. + */ + +typedef struct _OutputDataRec { + XmFontList fontlist; /* Fontlist for text. */ + unsigned int blinkrate; + Boolean wordwrap; /* Whether to wordwrap. */ + Boolean cursor_position_visible; + Boolean autoshowinsertpoint; + Boolean hasfocus; + Boolean has_rect; + Boolean handlingexposures; /* TRUE if in the midst of expose events. */ + Boolean exposevscroll; /* Non-zero if we expect expose events to be + off vertically. */ + Boolean exposehscroll; /* Non-zero if we expect expose events to be + off horizontally. */ + Boolean resizewidth, resizeheight; + Boolean scrollvertical, scrollhorizontal; + Boolean scrollleftside, scrolltopside; + Boolean ignorevbar; /* Whether to ignore callbacks from vbar. */ + Boolean ignorehbar; /* Whether to ignore callbacks from hbar. */ + short int cursor_on; /* Whether IBeam cursor is visible. */ + Boolean refresh_ibeam_off; /* Indicates whether area under IBeam needs + * to be re-captured */ + Boolean suspend_hoffset; /* temporarily suspend horizontal scrolling */ + Boolean use_fontset; /* True if font to be used is fontset (and + * thus need X11R5 Xmb* routines to draw */ + Boolean have_inverted_image_gc; /* fg/bg of image gc have been swapped; + * on == True, off == False */ + OnOrOff blinkstate; + Position insertx, inserty; + int number_lines; /* Number of lines that fit in the window. */ + int leftmargin, rightmargin; + int topmargin, bottommargin; + int scrollwidth; /* Total width of text we have to display. */ + int vsliderSize; /* How big the thumb is in the vbar. */ + int hoffset; /* How much we've scrolled off the left. */ + int averagecharwidth; /* Number of pixels for an "average" char. */ + int tabwidth; /* Number of pixels for a tab. */ + short columns, rows; + Dimension lineheight; /* Number of pixels per line. */ + Dimension minwidth, minheight; + Dimension prevW; + Dimension prevH; + Dimension cursorwidth, cursorheight; + Dimension font_ascent; /* ascent of the font[set] */ + Dimension font_descent; /* descent of the font[set] */ + XtIntervalId timerid; + Pixmap cursor; /* Pixmap for IBeam cursor stencil. */ + Pixmap add_mode_cursor; /* Pixmap to use for add mode cursor. */ + Pixmap ibeam_off; /* Pixmap for area under the IBeam. */ + Pixmap stipple_tile; /* stipple for add mode cursor. */ + GC gc, imagegc; + Widget vbar, hbar; + XFontStruct *font; /* font used when NULL font is set. */ +/* New for 1.2 */ + GC save_gc; /* GC for saving/resotring under IBeam */ + short columns_set, rows_set; /* history of previously set dimensions */ +/* New for 2.0 */ + XmRenderTable rendertable; /* Alias for fontlist - only for resource + setting */ + GC cursor_gc; /* 1-bit depth GC for creating the I-beam + stipples (normal & add mode) */ + int scrollheight; /* Total height of text we have to display. */ + int voffset; /* How much we've scrolled off the top. */ + int tabheight; /* Number of pixels for a tab. */ + Dimension linewidth; /* Number of pixels per line (when vw). */ + Boolean suspend_voffset; /* temporarily suspend horizontal scrolling */ +} OutputDataRec, *OutputData; + + +/* + * Create a new instance of an output object. This is expected to fill in + * info about innerwidget and output in the widget record. + */ + +typedef void (*OutputCreateProc)( + Widget, + ArgList, + Cardinal) ; +/* + * Given an (x,y) coordinate, return the closest corresponding position. (For + * use by input; text shouldn't ever need to know.) + */ + +typedef XmTextPosition (*XYToPosProc)( + XmTextWidget, +#if NeedWidePrototypes + int, + int) ; +#else + Position, /* These are relative to the */ + Position) ; /* innerwindow returned above. */ +#endif + +/* + * Return the (x,y) coordinate corresponing to the given position. If this + * returns FALSE, then the given position isn't being displayed. + */ + +typedef Boolean (*PosToXYProc)( + XmTextWidget, + XmTextPosition, + Position *, /* These are relative to the */ + Position *) ; /* innerwindow returned above. */ + +/* + * Measures the extent of a line. Given the line number and starting position + * of a line, returns the starting position of the next line. Also returns + * any extra information that the output module may want to associate with + * this line for future reference. (In particular, it will want to associate + * a vertical coordinate for this line.) This routine should return FALSE if + * it decides that this line will not fit in the window. FALSE should never + * be returned if the line number is zero. Output may assume that the line + * table for all preceeding lines have already been set. In particular, when + * this routine will return FALSE, then output knows that the entire linetable + * has been calculated; that is a good time for it to look over the linetable + * and decide if it wants to do something obnoxious like resize the window. + * + * A possible value to put in nextpos is PASTENDPOS. This indicates that the + * current line contains the end of the text in the source. + * + * nextpos may be NULL. If it is, then this indicates that we only want to + * know if the line will fit on the window. The caller already has its own + * idea where the next line will start if it does fit. (If nextpos is NULL, + * then no extra information should be generated, and the 'extra' parameter + * should be ignored.) + */ + +#define PASTENDPOS 2147483647 /* Biggest number that can fit in long */ + +typedef Boolean (*MeasureLineProc)( + XmTextWidget, + LineNum, + XmTextPosition, + XmTextPosition *, + LineTableExtraRec **) ; + +/* + * Draw some text within a line. The output finds out information about the + * line by calling the line table routines. + * + * %%% Document special cases (like lines containing PASTENDPOS). + */ + +typedef void (*DrawProc)( + XmTextWidget, + LineNum, + XmTextPosition, + XmTextPosition, + XmHighlightMode) ; + +/* + * Output should draw or erase an insertion point at the given position. + */ + +typedef void (*DrawInsertionPointProc)( + XmTextWidget, + XmTextPosition, + OnOrOff) ; + +/* + * Output should ensure that the given position is visible (e.g., not scrolled + * off horizontally). + */ +typedef void (*MakePositionVisibleProc)( + XmTextWidget, + XmTextPosition) ; + +/* Text would like to move some lines around on the screen. It would like to + * move lines fromline through toline (inclusive) to now start at line + * destline. If output can perform this move by means of a XCopyArea or + * similar simple call, it does so and returns TRUE; otherwise, it will return + * FALSE. If TRUE, output should modify affected values in the + * "extra" entries in the linetable, because after returning text will go ahead + * and move linetable entries around. + */ + +typedef Boolean (*MoveLinesProc)( + XmTextWidget, + LineNum, + LineNum, + LineNum) ; + +/* + * Inform output of invalidated positions. + */ + +typedef void (*InvalidateProc)( + XmTextWidget, + XmTextPosition, + XmTextPosition, + long) ; + +/* + * Get preferred size of text widget based on the row and column + * resources multiplied by font attributes as well as adding the + * margin resource values to the computed size. + */ +typedef void (*GetPreferredSizeProc)( + Widget, + Dimension *, + Dimension *) ; + +/* + * Get values out of the output object. + */ + +typedef void (*GetValuesProc)( + Widget, + ArgList, + Cardinal) ; + +/* + * Set values in the output object. + */ + +typedef Boolean (*SetValuesProc)( + Widget, + Widget, + Widget, + ArgList, + Cardinal *) ; + + +typedef struct _OutputRec { + struct _OutputDataRec *data; /* Output-specific data; opaque type. */ + XYToPosProc XYToPos; + PosToXYProc PosToXY; + MeasureLineProc MeasureLine; + DrawProc Draw; + DrawInsertionPointProc DrawInsertionPoint; + MakePositionVisibleProc MakePositionVisible; + MoveLinesProc MoveLines; + InvalidateProc Invalidate; + GetPreferredSizeProc GetPreferredSize; + GetValuesProc GetValues; + SetValuesProc SetValues; + XmRealizeOutProc realize; + XtWidgetProc destroy; + XmResizeFlagProc resize; + XtExposeProc expose; +} OutputRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextOutP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextP.h b/libXm/linux86/Xm/TextP.h new file mode 100644 index 0000000..51c369d --- /dev/null +++ b/libXm/linux86/Xm/TextP.h @@ -0,0 +1,244 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextP.h /main/16 1996/05/21 12:09:47 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmTextP_h +#define _XmTextP_h + +#include +#include +#include +#include + +typedef struct _InputRec *Input; +typedef struct _OutputRec *Output; + +#ifdef __cplusplus +extern "C" { +#endif + +#define NODELTA LONG_MAX + +#define TEXTWIDGETCLASS "Text" /* Resource class for the text widget. */ + +#define GetSrc(widget) (((XmTextWidget) (widget))->text.source) + +typedef struct { + XtPointer extension; /* Pointer to extension record */ +} XmTextClassPart; + +typedef struct _XmTextClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmTextClassPart text_class; +} XmTextClassRec; + +externalref XmTextClassRec xmTextClassRec; + +typedef struct { + XmTextPosition start; /* First position in this line. */ + Boolean changed; /* TRUE if something in this line changed. */ + XmTextPosition changed_position; /* First position within the line that + has changed, if any. */ + Boolean past_end; /* TRUE if this line is past the end of any */ + /* line actually on the screen. */ + LineTableExtra extra; /* Extra info the output module keeps. */ +} LineRec, *Line; + +typedef struct _XmTextLineTableRec{ + unsigned int start_pos:31; + unsigned int virt_line:1; +} XmTextLineTableRec, *XmTextLineTable; + +typedef struct { + XmTextPosition from, to; /* Information on one range to repaint. */ +} RangeRec; + +typedef struct { + Cardinal number; /* Number of ranges defined. */ + Cardinal maximum; /* Number of ranges we have space for. */ + RangeRec *range; /* Pointer to array of ranges. */ +} Ranges; + +/* + * The data for on-the-spot support. + */ +typedef struct _OnTheSpotDataTW { + XmTextPosition start; + XmTextPosition end; + XmTextPosition cursor; + XmTextPosition over_len; + XmTextPosition over_maxlen; + char *over_str; + int under_preedit; + Boolean under_verify_preedit; + Boolean verify_commit; + int pad; +} OnTheSpotDataRecTW, *OnTheSpotDataTW; + +#define PreStartTW(tw) ((tw)->text.onthespot->start) +#define PreEndTW(tw) ((tw)->text.onthespot->end) +#define PreCursorTW(tw) ((tw)->text.onthespot->cursor) +#define PreOverLen(tw) ((tw)->text.onthespot->over_len) +#define PreOverMaxLen(tw) ((tw)->text.onthespot->over_maxlen) +#define PreOverStr(tw) ((tw)->text.onthespot->over_str) +#define PreUnder(tw) ((tw)->text.onthespot->under_preedit) +#define UnderVerifyPreedit(tw) ((tw)->text.onthespot->under_verify_preedit) +#define VerifyCommitNeeded(tw) ((tw)->text.onthespot->verify_commit) + + +/* + * Structure for main text info. + */ + +typedef struct _XmTextPart { + XmTextSource source; /* The source for this widget. */ + XtCallbackList activate_callback; /* command activate callback. */ + XtCallbackList focus_callback; /* Focus callback. */ + XtCallbackList losing_focus_callback; /* Losing focus callback. */ + XtCallbackList value_changed_callback; /* Value changed callback. */ + XtCallbackList modify_verify_callback; /* Verify value to change callback.*/ + XtCallbackList wcs_modify_verify_callback; /* Verify value to change + * callback.*/ + XtCallbackList motion_verify_callback; /* Insert cursor position + change callback. */ + XtCallbackList gain_primary_callback; /* Gained ownership of Primary + Selection */ + XtCallbackList lose_primary_callback; /* Lost ownership of Primary + Selection */ + char *value; /* The sring value in the widget */ + wchar_t *wc_value; /* Pointer for wchar_t value set by app */ + Dimension margin_height; /* height between text borders and text */ + Dimension margin_width; /* width between text borders and text */ + Position cursor_position_x; /* x pixel location of cursor */ + OutputCreateProc output_create; /* Routine to create the output portion. */ + InputCreateProc input_create; /* Routine to create the input portion. */ + /* The naming incongruity amongst the next three items was introduced */ + /* due to a collision with top_position as used as a Form constraint; */ + /* It has no other implications. */ + XmTextPosition top_character; /* First position to display. */ + XmTextPosition bottom_position; /* Last position to display. */ + XmTextPosition cursor_position; /* Location of the insertion point. */ + int max_length; /* Sets the max. length of string */ + int edit_mode; /* Sets the line editing mode + (i.e. sinlge_line, multi_line, ...) */ + Boolean auto_show_cursor_position; /* If true, automatically try to show + the cursor position whenever it + changes. */ + Boolean editable; /* Determines if text is editable */ + Boolean verify_bell; /* Determines if bell is sounded when verify + * callback returns doit - False + */ + Boolean add_mode; /* Determines the state of add moder */ + Boolean traversed; /* Flag used with losing focus verification to + indicate a traversal key pressed event */ + Boolean in_redisplay; /* Whether currently in the redisplay proc. */ + Boolean needs_redisplay; /* Whether we need to repaint or refigure. */ + Boolean in_refigure_lines; /* Whether currently in refigurelines proc. */ + Boolean needs_refigure_lines; /* Whether we need to refigure. */ + Boolean in_setvalues; /* Use to reduce unnecessary redisplays and + geometry requsets */ + Boolean in_resize; /* Make sure there are no geometry requests + while we are in resize procedure. */ + Boolean in_expose; /* Make sure there are no geometry requests + while we are in expose procedure. */ + Boolean highlight_changed; /* Whether highlighting recently changed. */ + Boolean pendingoff; /* TRUE if we shouldn't do pending delete on + the current selection. */ + char char_size; /* number of bytes for storing a character */ + + OnOrOff on_or_off; /* used to halt unecessary motion verify + callback calls during primary moves.*/ + Output output; /* The output portion. */ + Input input; /* The input portion. */ + + XmTextPosition first_position; /* First legal position in the source. */ + XmTextPosition last_position; /* Last legal position in the source. */ + XmTextPosition forget_past; /* Forget all about positions past this. */ + XmTextPosition force_display; /* Force this position to be displayed. */ + XmTextPosition new_top; /* Desired new top position. */ + XmTextPosition last_top_char; /* unused - available. */ + XmTextPosition dest_position; /* Location of the destination point. */ + int disable_depth; /* How many levels of disable we've done. */ + + int pending_scroll; /* Number of lines we want to scroll. */ + int total_lines; /* Total number of lines in the text widget */ + int top_line; /* Line number of the top visible line */ + int vsbar_scrolling; /* scrolling using the vertical scrollbar */ + + Cardinal number_lines; /* Number of line table entries. */ + Cardinal maximum_lines; /* Maximum number of line table entries. */ + Line line; /* Pointer to array of line table entries. */ + + Ranges repaint; /* Info on the repaint ranges. */ + _XmHighlightData highlight; /* Info on the highlighting regions. */ + _XmHighlightData old_highlight;/* Old value of above. */ + Widget inner_widget; /* Pointer to widget which actually contains + text (may be same or different from + this record). */ + XmTextLineTable line_table; + unsigned int table_size; + unsigned int table_index; + + XtCallbackList destination_callback; /* Selection destination cb */ + int hsbar_scrolling;/* scroring using the horizontal scrollbar */ + + OnTheSpotDataTW onthespot; /* On the spot preedit style support. */ +} XmTextPart; + +typedef struct _XmTextRec { + CorePart core; + XmPrimitivePart primitive; + XmTextPart text; +} XmTextRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextP_h */ +/* DON't ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextSelP.h b/libXm/linux86/Xm/TextSelP.h new file mode 100644 index 0000000..7d7ac02 --- /dev/null +++ b/libXm/linux86/Xm/TextSelP.h @@ -0,0 +1,57 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextSelP.h /main/8 1995/07/13 18:10:16 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextSelP_h +#define _XmTextSelP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextSelP_h */ +/* DON't ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TextStrSoP.h b/libXm/linux86/Xm/TextStrSoP.h new file mode 100644 index 0000000..827a123 --- /dev/null +++ b/libXm/linux86/Xm/TextStrSoP.h @@ -0,0 +1,148 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextStrSoP.h /main/9 1995/07/13 18:11:11 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextStrSoP_h +#define _XmTextStrSoP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************** + * + * Definitions for use by sources and source users. + * + ****************************************************************/ + +typedef struct _XmSourceDataRec { + XmTextSource source; /* Backpointer to source record. */ + XmTextWidget *widgets; /* Array of widgets displaying this source. */ + XmTextPosition left, right; /* Left and right extents of selection. */ + char * ptr; /* Actual string data. */ + char * value; /* Value of the string data. */ + char * gap_start; /* Gapped buffer start pointer */ + char * gap_end; /* Gapped buffer end pointer */ + char * PSWC_NWLN; /* Holder for char*, short*, int* rep of NWLN */ + int length; /* Number of chars of data. */ + int maxlength; /* Space allocated. */ + int old_length; /* Space allocated for value pointer. */ + int numwidgets; /* Number of entries in above. */ + int maxallowed; /* The user is not allowed to grow source */ + /* to a size greater than this. */ + Time prim_time; /* time of primary selection */ + Boolean hasselection; /* Whether we own the selection. */ + Boolean editable; /* Whether we allow any edits. */ + Boolean take_selection; /* Whether we should take the selection. */ +} XmSourceDataRec, *XmSourceData; + +typedef void (*AddWidgetProc)(XmTextSource, + XmTextWidget); + +typedef int (*CountLinesProc)(XmTextSource, + XmTextPosition, + unsigned long); + +typedef void (*RemoveWidgetProc)(XmTextSource, + XmTextWidget); + +typedef XmTextPosition (*ReadProc)(XmTextSource, + XmTextPosition, /* starting position */ + XmTextPosition, /* The last position + we're interested in. + Don't return info + about any later + positions. */ + XmTextBlock); /* RETURN: text read */ + +typedef XmTextStatus (*ReplaceProc)(XmTextWidget, + XEvent *, + XmTextPosition *, + XmTextPosition *, + XmTextBlock, +#if NeedWidePrototypes + int); +#else + Boolean); +#endif /* NeedsWidePrototypes */ + +typedef XmTextPosition (*ScanProc)(XmTextSource, + XmTextPosition, + XmTextScanType, + XmTextScanDirection, /*XmsdLeft/XmsdRight*/ + int, +#if NeedWidePrototypes + int); +#else + Boolean); +#endif /* NeedsWidePrototypes */ + +typedef Boolean (*GetSelectionProc)(XmTextSource, + XmTextPosition *, + XmTextPosition *); + +typedef void (*SetSelectionProc)(XmTextSource, + XmTextPosition, + XmTextPosition, + Time); + + +typedef struct _XmTextSourceRec { + struct _XmSourceDataRec *data; /* Source-defined data (opaque type). */ + AddWidgetProc AddWidget; + CountLinesProc CountLines; + RemoveWidgetProc RemoveWidget; + ReadProc ReadSource; + ReplaceProc Replace; + ScanProc Scan; + GetSelectionProc GetSelection; + SetSelectionProc SetSelection; +} XmTextSourceRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextStrSoP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ToggleB.h b/libXm/linux86/Xm/ToggleB.h new file mode 100644 index 0000000..6e2a7b5 --- /dev/null +++ b/libXm/linux86/Xm/ToggleB.h @@ -0,0 +1,107 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleB.h /main/12 1995/07/13 18:11:58 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/*********************************************************************** + * + * Toggle Widget + * + ***********************************************************************/ +#ifndef _XmToggle_h +#define _XmToggle_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmToggleButtonWidgetClass; + +typedef struct _XmToggleButtonClassRec *XmToggleButtonWidgetClass; +typedef struct _XmToggleButtonRec *XmToggleButtonWidget; + +/*fast subclass define */ +#ifndef XmIsToggleButton +#define XmIsToggleButton(w) XtIsSubclass(w, xmToggleButtonWidgetClass) +#endif /* XmIsToggleButton */ + + +/******** Public Function Declarations ********/ + +extern Boolean XmToggleButtonGetState( + Widget w) ; +extern void XmToggleButtonSetState( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify) ; +#else + Boolean newstate, + Boolean notify) ; +#endif /* NeedWidePrototypes */ + +extern Boolean +XmToggleButtonSetValue( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify ); +#else + XmToggleButtonState newstate, + Boolean notify ); +#endif /* NeedWidePrototypes */ +extern Widget XmCreateToggleButton( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggle_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ToggleBG.h b/libXm/linux86/Xm/ToggleBG.h new file mode 100644 index 0000000..973a374 --- /dev/null +++ b/libXm/linux86/Xm/ToggleBG.h @@ -0,0 +1,110 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleBG.h /main/12 1995/07/13 18:12:49 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/*********************************************************************** + * + * Toggle Gadget + * + ***********************************************************************/ +#ifndef _XmToggleG_h +#define _XmToggleG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +externalref WidgetClass xmToggleButtonGadgetClass; + +typedef struct _XmToggleButtonGadgetClassRec *XmToggleButtonGadgetClass; +typedef struct _XmToggleButtonGadgetRec *XmToggleButtonGadget; +typedef struct _XmToggleButtonGCacheObjRec *XmToggleButtonGCacheObject; + + +/*fast subclass define */ +#ifndef XmIsToggleButtonGadget +#define XmIsToggleButtonGadget(w) XtIsSubclass(w, xmToggleButtonGadgetClass) +#endif /* XmIsToggleButtonGadget */ + + +/******** Public Function Declarations ********/ + +extern Boolean XmToggleButtonGadgetGetState( + Widget w) ; +extern void XmToggleButtonGadgetSetState( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify) ; +#else + Boolean newstate, + Boolean notify) ; +#endif /* NeedWidePrototypes */ + +extern Boolean XmToggleButtonGadgetSetValue( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify); +#else + XmToggleButtonState newstate, + Boolean notify); +#endif /* NeedWidePrototypes */ + +extern Widget XmCreateToggleButtonGadget( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ToggleBGP.h b/libXm/linux86/Xm/ToggleBGP.h new file mode 100644 index 0000000..c1ea783 --- /dev/null +++ b/libXm/linux86/Xm/ToggleBGP.h @@ -0,0 +1,265 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleBGP.h /main/13 1996/03/29 18:56:49 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +/******************************************** + * + * No new fields need to be defined + * for the Toggle widget class record + * + ********************************************/ + +#ifndef _XmToggleButtonGP_h +#define _XmToggleButtonGP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ +/* The ToggleButton Gadget Cache Object's class and instance records*/ +/*************************************************************/ + + +typedef struct _XmToggleButtonGCacheObjClassPart +{ + int foo; +} XmToggleButtonGCacheObjClassPart; + + +typedef struct _XmToggleButtonGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; + XmToggleButtonGCacheObjClassPart toggle_class_cache; +} XmToggleButtonGCacheObjClassRec; + +externalref XmToggleButtonGCacheObjClassRec xmToggleButtonGCacheObjClassRec; + + +typedef struct _XmToggleButtonGCacheObjPart +{ + unsigned char ind_type; + Boolean visible; + Dimension spacing; + Dimension indicator_dim; + Pixmap on_pixmap; + Pixmap insen_pixmap; + unsigned char ind_on; + Boolean fill_on_select; + Pixel select_color; + GC select_GC; + GC background_gc; + GC arm_GC; /* used in menus when enableEtchedInMenu + is set. */ + unsigned char toggle_mode; + Boolean reversed_select; + Pixmap indeterminate_pixmap; + Pixmap indeterminate_insensitive_pixmap; + Pixel unselect_color; + GC unselect_GC; + GC indeterminate_GC; + GC indeterminate_box_GC; + Dimension ind_left_delta; + Dimension ind_right_delta; + Dimension ind_top_delta; + Dimension ind_bottom_delta; +} XmToggleButtonGCacheObjPart; + +typedef struct _XmToggleButtonGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; + XmToggleButtonGCacheObjPart toggle_cache; +} XmToggleButtonGCacheObjRec; + + +/**************************************************** + * + * Full class record declaration for Toggle class + * + ****************************************************/ + +typedef struct _XmToggleButtonGadgetClassPart + { + XtPointer extension; + } XmToggleButtonGadgetClassPart; + + +typedef struct _XmToggleButtonGadgetClassRec { + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; + XmToggleButtonGadgetClassPart toggle_class; +} XmToggleButtonGadgetClassRec; + + +externalref XmToggleButtonGadgetClassRec xmToggleButtonGadgetClassRec; + + +typedef struct _XmToggleButtonGadgetPart +{ + Boolean indicator_set; + unsigned char set; + unsigned char visual_set; /* used for visuals and does not reflect + the true state of the button */ + Boolean Armed; + XtCallbackList value_changed_CB, + arm_CB, + disarm_CB; + + XmToggleButtonGCacheObjPart *cache; /* Replace cache instance fields */ + /* with a pointer */ + + Dimension detail_shadow_thickness ; +} XmToggleButtonGadgetPart; + + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmToggleButtonGadgetRec { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; + XmToggleButtonGadgetPart toggle; +} XmToggleButtonGadgetRec; + + +/**********/ +/* MACROS */ +/**********/ + +/* Macros for cached instance fields */ + +#define TBG_IndType(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_type) +#define TBG_Visible(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->visible) +#define TBG_Spacing(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->spacing) +#define TBG_IndicatorDim(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indicator_dim) +#define TBG_OnPixmap(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->on_pixmap) +#define TBG_InsenPixmap(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->insen_pixmap) +#define TBG_IndOn(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_on) +#define TBG_FillOnSelect(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->fill_on_select) +#define TBG_ReversedSelect(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->reversed_select) +#define TBG_SelectColor(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->select_color) +#define TBG_SelectGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->select_GC) +#define TBG_BackgroundGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->background_gc) +#define TBG_ArmGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->arm_GC) +#define TBG_ToggleMode(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->toggle_mode) +#define TBG_IndeterminatePixmap(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indeterminate_pixmap) +#define TBG_IndeterminateInsensitivePixmap(w) \ + (((XmToggleButtonGadget) (w)) -> \ + toggle.cache->indeterminate_insensitive_pixmap) +#define TBG_IndeterminateGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indeterminate_GC) +#define TBG_IndeterminateBoxGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indeterminate_box_GC) +#define TBG_UnselectColor(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->unselect_color) +#define TBG_UnselectGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->unselect_GC) +#define TBG_IndLeftDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_left_delta) +#define TBG_IndRightDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_right_delta) +#define TBG_IndTopDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_top_delta) +#define TBG_IndBottomDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_bottom_delta) + +/***************************************/ +/* Macros for uncached instance fields */ + +#define TBG_IndicatorSet(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.indicator_set) +#define TBG_Set(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.set) +#define TBG_VisualSet(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.visual_set) +#define TBG_ValueChangedCB(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.value_changed_CB) +#define TBG_ArmCB(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.arm_CB) +#define TBG_DisarmCB(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.disarm_CB) +#define TBG_Armed(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.Armed) + +/******************************/ +/* Convenience Macros */ +/******************************/ + +#define TBG_Cache(w) (((XmToggleButtonGadget)(w))->toggle.cache) +#define TBG_ClassCachePart(w) \ + (((XmToggleButtonGadgetClass)xmToggleButtonGadgetClass)->gadget_class.cache_part) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleButtonGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/ToggleBP.h b/libXm/linux86/Xm/ToggleBP.h new file mode 100644 index 0000000..42039df --- /dev/null +++ b/libXm/linux86/Xm/ToggleBP.h @@ -0,0 +1,152 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleBP.h /main/14 1996/03/29 18:56:59 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/******************************************** + * + * No new fields need to be defined + * for the Toggle widget class record + * + ********************************************/ + +#ifndef _XmToggleButtonP_h +#define _XmToggleButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmToggleButtonClassPart + { + XtPointer extension; /* Pointer to extension record */ + } XmToggleButtonClassPart; + + +/**************************************************** + * + * Full class record declaration for Toggle class + * + ****************************************************/ +typedef struct _XmToggleButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmToggleButtonClassPart toggle_class; +} XmToggleButtonClassRec; + + +externalref XmToggleButtonClassRec xmToggleButtonClassRec; + + +/******************************************** + * + * No new fields needed for instance record + * + ********************************************/ + +typedef struct _XmToggleButtonPart +{ + unsigned char ind_type; + Boolean visible; + Dimension spacing; + Dimension indicator_dim; + Boolean indicator_set; + Pixmap on_pixmap; + Pixmap insen_pixmap; + unsigned char set; + unsigned char visual_set; /* used for visuals and does not reflect + the true state of the button */ + unsigned char ind_on; + Boolean fill_on_select; + Pixel select_color; + GC select_GC; + GC background_gc; + GC arm_GC; /* used in menus when enableEtchedInMenu + is set. */ + XtCallbackList value_changed_CB, + arm_CB, + disarm_CB; + Boolean Armed; + unsigned char toggle_mode; + Boolean reversed_select; + Pixmap indeterminate_pixmap; + Pixmap indeterminate_insensitive_pixmap; + Pixel unselect_color; + GC unselect_GC; + GC indeterminate_GC; + GC indeterminate_box_GC; + Dimension ind_left_delta; + Dimension ind_right_delta; + Dimension ind_top_delta; + Dimension ind_bottom_delta; + Dimension detail_shadow_thickness ; +} XmToggleButtonPart; + + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmToggleButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmToggleButtonPart toggle; +} XmToggleButtonRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TraitP.h b/libXm/linux86/Xm/TraitP.h new file mode 100644 index 0000000..3d4a266 --- /dev/null +++ b/libXm/linux86/Xm/TraitP.h @@ -0,0 +1,92 @@ +/* $XConsortium: TraitP.h /main/5 1995/07/15 20:56:18 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmTraitP_H +#define _XmTraitP_H 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Macros */ + +#define XmeTraitRemove(w, t) XmeTraitSet((XtPointer) w, t, NULL) + + +/******** Private Function Declarations ********/ + +/* + * XmeTraitGet(object, trait) returns a pointer to the trait_record + * from looking up the trait on this object. If the trait + * is not found then NULL is returned. This can therefore be used + * in the following cliche' + * + * if (trait_rec = XmeTraitGet(XtClass(w), XmQTactivate)) { + * trait_rec -> activate(); + * trait_rec -> disarm(); + * } + */ + +extern XtPointer XmeTraitGet(XtPointer, XrmQuark); + +/* + * Boolean XmeTraitSet(object, traitname, traitrecord) + * + * Installs the trait on the object. Boolean will indicate + * success of the installation. + * + * Install will use the direct pointer to traitrecord given. The + * implementation is therefore not allowed to use automatic + * storage for traitrecord, but can use malloc or static initialization + * + */ + +extern Boolean XmeTraitSet(XtPointer, XrmQuark, XtPointer); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTraitP_H */ + diff --git a/libXm/linux86/Xm/Transfer.h b/libXm/linux86/Xm/Transfer.h new file mode 100644 index 0000000..7783d83 --- /dev/null +++ b/libXm/linux86/Xm/Transfer.h @@ -0,0 +1,146 @@ +/* $TOG: Transfer.h /main/8 1998/02/03 14:55:22 csn $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmTransfer_H +#define _XmTransfer_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Proc typedefs */ + +#define XmConvertCallbackProc XtCallbackProc +#define XmSelectionDoneProc XtSelectionDoneProc +#define XmCancelSelectionProc XtCancelConvertSelectionProc +#define XmDestinationCallbackProc XtCallbackProc +#define XmSelectionCallbackProc XtSelectionCallbackProc + +/* Flags */ + +typedef enum { XmTRANSFER_DONE_SUCCEED = 0, XmTRANSFER_DONE_FAIL, + XmTRANSFER_DONE_CONTINUE, XmTRANSFER_DONE_DEFAULT + } XmTransferStatus; + +enum { XmSELECTION_DEFAULT = 0, XmSELECTION_INCREMENTAL, + XmSELECTION_PERSIST, XmSELECTION_SNAPSHOT, + XmSELECTION_TRANSACT }; + +enum { XmCONVERTING_NONE = 0, + XmCONVERTING_SAME = 1, + XmCONVERTING_TRANSACT = 2, + XmCONVERTING_PARTIAL = 4 }; + +enum { XmCONVERT_DEFAULT = 0, XmCONVERT_MORE, + XmCONVERT_MERGE, XmCONVERT_REFUSE, XmCONVERT_DONE }; + +/* Callback structures */ + +typedef struct { + int reason; + XEvent *event; + Atom selection; + Atom target; + XtPointer source_data; + XtPointer location_data; + int flags; + XtPointer parm; + int parm_format; + unsigned long parm_length; + Atom parm_type; + int status; + XtPointer value; + Atom type; + int format; + unsigned long length; +} XmConvertCallbackStruct; + +typedef struct { + int reason; + XEvent *event; + Atom selection; + XtEnum operation; + int flags; + XtPointer transfer_id; + XtPointer destination_data; + XtPointer location_data; + Time time; +} XmDestinationCallbackStruct; + +typedef struct { + int reason; + XEvent *event; + Atom selection; + Atom target; + Atom type; + XtPointer transfer_id; + int flags; + int remaining; + XtPointer value; + unsigned long length; + int format; +} XmSelectionCallbackStruct; + +typedef struct { + int reason; + XEvent *event; + Atom selection; + XtPointer transfer_id; + XmTransferStatus status; + XtPointer client_data; +} XmTransferDoneCallbackStruct; + +typedef void (*XmSelectionFinishedProc)(Widget, XtEnum, + XmTransferDoneCallbackStruct*); + +void XmTransferDone(XtPointer, XmTransferStatus); +void XmTransferValue(XtPointer, Atom, XtCallbackProc, + XtPointer, Time); +void XmTransferSetParameters(XtPointer, XtPointer, int, unsigned long, Atom); +void XmTransferStartRequest(XtPointer); +void XmTransferSendRequest(XtPointer, Time); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransfer_H */ diff --git a/libXm/linux86/Xm/TransferP.h b/libXm/linux86/Xm/TransferP.h new file mode 100644 index 0000000..cac1bd5 --- /dev/null +++ b/libXm/linux86/Xm/TransferP.h @@ -0,0 +1,74 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* $TOG: TransferP.h /main/6 1999/09/01 17:14:43 mgreess $ */ +#ifndef _TransferP_H +#define _TransferP_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern void XmeConvertMerge(XtPointer, Atom, int, unsigned long, + XmConvertCallbackStruct*); +extern Boolean XmePrimarySource(Widget, Time); +extern Boolean XmeNamedSource(Widget, Atom, Time); +extern Boolean XmeSecondarySource(Widget, Time); +extern void XmeSecondaryTransfer(Widget, Atom, XtEnum, Time); +extern Boolean XmeClipboardSource(Widget, XtEnum, Time); +extern Widget XmeDragSource(Widget, XtPointer, XEvent*, ArgList, Cardinal); + +extern Boolean XmePrimarySink(Widget, XtEnum, XtPointer, Time); +extern Boolean XmeNamedSink(Widget, Atom, XtEnum, XtPointer, Time); +extern Boolean XmeSecondarySink(Widget, Time); +extern Boolean XmeClipboardSink(Widget, XtEnum, XtPointer); +extern void XmeDropSink(Widget, ArgList, Cardinal); + +extern Atom *XmeStandardTargets(Widget, int, int*); +extern void XmeStandardConvert(Widget, XtPointer, XmConvertCallbackStruct*); +extern Atom XmeGetEncodingAtom(Widget); +extern void XmeTransferAddDoneProc(XtPointer, + XmSelectionFinishedProc); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _TransferP_H */ diff --git a/libXm/linux86/Xm/TransferT.h b/libXm/linux86/Xm/TransferT.h new file mode 100644 index 0000000..bf44b55 --- /dev/null +++ b/libXm/linux86/Xm/TransferT.h @@ -0,0 +1,68 @@ +/* $XConsortium: TransferT.h /main/4 1995/07/15 20:56:34 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmTransferT_H +#define _XmTransferT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTtransfer; + +/* Trait structures and typedefs, place typedefs first */ + +/* Version 0: initial release. */ + +typedef struct _XmTransferTraitRec { + int version; /* 0 */ + XmConvertCallbackProc convertProc; + XmDestinationCallbackProc destinationProc; + XmDestinationCallbackProc destinationPreHookProc; +} XmTransferTraitRec, *XmTransferTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransferT_H */ diff --git a/libXm/linux86/Xm/TransltnsP.h b/libXm/linux86/Xm/TransltnsP.h new file mode 100644 index 0000000..f533ae9 --- /dev/null +++ b/libXm/linux86/Xm/TransltnsP.h @@ -0,0 +1,141 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* $TOG: TransltnsP.h /main/14 1999/04/29 13:05:42 samborn $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmTransltnsP_h +#define _XmTransltnsP_h + +#include /* for externalref */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef _XmConst +#define _XmConst +#endif + + +externalref _XmConst char _XmArrowB_defaultTranslations[]; +externalref _XmConst char _XmBulletinB_defaultTranslations[]; +externalref _XmConst char _XmCascadeB_menubar_events[]; +externalref _XmConst char _XmCascadeB_p_events[]; +externalref _XmConst char _XmComboBox_defaultTranslations[]; +externalref _XmConst char _XmComboBox_defaultAccelerators[]; +externalref _XmConst char _XmComboBox_dropDownComboBoxAccelerators[]; +externalref _XmConst char _XmComboBox_dropDownListTranslations[]; +externalref _XmConst char _XmComboBox_textFocusTranslations[]; +externalref _XmConst char _XmContainer_defaultTranslations[]; +externalref _XmConst char _XmContainer_traversalTranslations[]; +externalref _XmConst char _XmDisplay_baseTranslations[]; +externalref _XmConst char _XmDragC_defaultTranslations[]; +externalref _XmConst char _XmDrawingA_defaultTranslations[]; +externalref _XmConst char _XmDrawingA_traversalTranslations[]; +externalref _XmConst char _XmDrawnB_defaultTranslations[]; +externalref _XmConst char _XmDrawnB_menuTranslations[]; +externalref _XmConst char _XmFrame_defaultTranslations[]; +externalref _XmConst char _XmGrabShell_translations []; +externalref _XmConst char _XmLabel_defaultTranslations[]; +externalref _XmConst char _XmLabel_menuTranslations[]; +externalref _XmConst char _XmLabel_menu_traversal_events[]; +externalref _XmConst char _XmList_ListXlations1[]; +externalref _XmConst char _XmList_ListXlations2[]; +externalref _XmConst char _XmManager_managerTraversalTranslations[]; +externalref _XmConst char _XmManager_defaultTranslations[]; +externalref _XmConst char _XmNotebook_manager_translations[]; +externalref _XmConst char _XmNotebook_TabAccelerators[]; +externalref _XmConst char _XmMenuShell_translations []; +externalref _XmConst char _XmPrimitive_defaultTranslations[]; +externalref _XmConst char _XmPushB_defaultTranslations[]; +externalref _XmConst char _XmPushB_menuTranslations[]; +externalref _XmConst char _XmRowColumn_menu_traversal_table[]; +externalref _XmConst char _XmRowColumn_bar_table[]; +externalref _XmConst char _XmRowColumn_option_table[]; +externalref _XmConst char _XmRowColumn_menu_table[]; +externalref _XmConst char _XmSash_defTranslations[]; +externalref _XmConst char _XmScrollBar_defaultTranslations[]; +externalref _XmConst char _XmScrolledW_ScrolledWindowXlations[]; +externalref _XmConst char _XmClipWindowTranslationTable[]; +externalref _XmConst char _XmScrolledW_WorkWindowTranslationTable[]; +externalref _XmConst char _XmSelectioB_defaultTextAccelerators[]; +externalref _XmConst char _XmSpinB_defaultTranslations[]; +externalref _XmConst char _XmSpinB_defaultAccelerators[]; +externalref _XmConst char _XmTearOffB_overrideTranslations[]; +externalref _XmConst char _XmTextF_EventBindings1[]; +externalref _XmConst char _XmTextF_EventBindings2[]; +externalref _XmConst char _XmTextF_EventBindings3[]; +externalref _XmConst char _XmTextIn_XmTextEventBindings1[]; +externalref _XmConst char _XmTextIn_XmTextEventBindings2[]; +externalref _XmConst char _XmTextIn_XmTextEventBindings3[]; +externalref _XmConst char _XmTextIn_XmTextVEventBindings[]; +externalref _XmConst char _XmToggleB_defaultTranslations[]; +externalref _XmConst char _XmToggleB_menuTranslations[]; +externalref _XmConst char _XmVirtKeys_fallbackBindingString[]; + +/* + * The following keybindings have been "grandfathered" + * for backward compatablility. + */ +externalref _XmConst char _XmVirtKeys_acornFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_apolloFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_dgFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_decFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_dblclkFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_hpFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_ibmFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_ingrFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_megatekFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_motorolaFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_sgiFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_siemensWx200FallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_siemens9733FallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_sunFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_tekFallbackBindingString[]; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransltnsP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/TravConT.h b/libXm/linux86/Xm/TravConT.h new file mode 100644 index 0000000..86aac8b --- /dev/null +++ b/libXm/linux86/Xm/TravConT.h @@ -0,0 +1,72 @@ +/* $XConsortium: TravConT.h /main/5 1995/07/15 20:56:44 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmTravConT_h +#define _XmTravConT_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTtraversalControl; + + +typedef Widget (*XmTraversalRedirectionProc)(Widget old_focus, + Widget new_focus, + unsigned int focus_policy, + XmTraversalDirection direction, + unsigned int pass); + + +/* Version 0: initial release. */ + +typedef struct _XmTraversalControlTraitRec { + int version; /* 0 */ + XmTraversalRedirectionProc redirect; +} XmTraversalControlTraitRec, *XmTraversalControlTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* XmTravConT_h */ diff --git a/libXm/linux86/Xm/Tree.h b/libXm/linux86/Xm/Tree.h new file mode 100644 index 0000000..36fefde --- /dev/null +++ b/libXm/linux86/Xm/Tree.h @@ -0,0 +1,73 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _Tree_h +#define _Tree_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmTreeClassRec *XmTreeWidgetClass; +typedef struct _XmTreeRec *XmTreeWidget; + +typedef enum { XmTreeLadder, XmTreeDirect } XmTreeConnectStyle; + +typedef enum { XmTreeCompressNone=0, XmTreeCompressLeaves=1, + XmTreeCompressAll=2 } XmTreeCompressStyle; + +/* Function Name: XmCreateTree + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateTree( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmTreeWidgetClass; + +/************************************************************ +* MACROS +*************************************************************/ + + +/************************************************************ +* GLOBAL FUNCTION DECLARATIONS +*************************************************************/ + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _Tree_h */ diff --git a/libXm/linux86/Xm/TreeP.h b/libXm/linux86/Xm/TreeP.h new file mode 100644 index 0000000..e6efcb1 --- /dev/null +++ b/libXm/linux86/Xm/TreeP.h @@ -0,0 +1,211 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _TreeP_h +#define _TreeP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#include +#include +#include + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + + +/************************************************************ +* MACROS +*************************************************************/ + +#define XmTreeIndex (XmHierarchyIndex + 1) + +extern XmOffsetPtr XmTree_offsets; +extern XmOffsetPtr XmTreeC_offsets; + +#define XmTreeField(w,f,t) XmField(w, XmTree_offsets, XmTree, f, t) + +#define XmTree_h_node_space(w) XmTreeField(w, h_node_space, Dimension) +#define XmTree_v_node_space(w) XmTreeField(w, v_node_space, Dimension) +#define XmTree_connect_style(w) XmTreeField(w, connect_style, XmTreeConnectStyle) +#define XmTree_max_width(w) XmTreeField(w, max_width, Dimension) +#define XmTree_max_height(w) XmTreeField(w, max_height, Dimension) +#define XmTree_child_op_list(w) XmTreeField(w, child_op_list, XmList) +#define XmTree_ul_point(w) XmTreeField(w, ul_point, XPoint) +#define XmTree_lr_point(w) XmTreeField(w, lr_point, XPoint) +#define XmTree_orientation(w) XmTreeField(w, orientation, unsigned char) +#define XmTree_compress_style(w) XmTreeField(w, compress_style, XmTreeCompressStyle) +#define XmTree_vertical_delta(w) XmTreeField(w, vertical_delta, Dimension) +#define XmTree_horizontal_delta(w) XmTreeField(w, horizontal_delta, Dimension) + +/* + * WARNING! + * + * These macros don't use the standard fieldmacro(widget) form. They take + * _pointers to TreeConstraints structures_. Be careful. + */ +#define XmTreeCField(constraints, variable, type) \ + (*(type *)(((char *) constraints) + \ + XmTreeC_offsets[XmTreeIndex] + \ + XtOffsetOf(XmTreeConstraintPart, variable))) + +#define XmTreeC_open_close_padding(c) XmTreeCField(c, open_close_padding, int) +#define XmTreeC_box_x(c) XmTreeCField(c, box_x, Position) +#define XmTreeC_box_y(c) XmTreeCField(c, box_y, Position) +#define XmTreeC_bb_width(c) XmTreeCField(c, bb_width, Dimension) +#define XmTreeC_bb_height(c) XmTreeCField(c, bb_height, Dimension) +#define XmTreeC_widget_offset(c) XmTreeCField(c, widget_offset, Dimension) +#define XmTreeC_placed(c) XmTreeCField(c, placed, Boolean) +#define XmTreeC_color(c) XmTreeCField(c, color, Pixel) +#define XmTreeC_background_color(c) XmTreeCField(c, background_color, Pixel) +#define XmTreeC_line_width(c) XmTreeCField(c, line_width, int) +#define XmTreeC_line_style(c) XmTreeCField(c, line_style, int) +#define XmTreeC_gc(c) XmTreeCField(c, gc, GC) +#define XmTreeC_new_x(c) XmTreeCField(c, new_x, Position) +#define XmTreeC_new_y(c) XmTreeCField(c, new_y, Position) +#define XmTreeC_oc_new_x(c) XmTreeCField(c, oc_new_x, Position) +#define XmTreeC_oc_new_y(c) XmTreeCField(c, oc_new_y, Position) +#define XmTreeC_map(c) XmTreeCField(c, map, Boolean) +#define XmTreeC_unmap(c) XmTreeCField(c, unmap, Boolean) +#define XmTreeC_move(c) XmTreeCField(c, move, Boolean) +#define XmTreeC_is_compressed(c) XmTreeCField(c, is_compressed, Boolean) + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} TreeClassPart; + +typedef struct _XmTreeClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + HierarchyClassPart hierarchy_class; + TreeClassPart tree_class; +} XmTreeClassRec; + +typedef struct _TreeNodeInfo { + /* + * Public (Resource) data. + */ + + int open_close_padding; /* Number of pixels to leave between o/c button + and node button (can be negative). */ + + /* + * Private data. + */ + + Position box_x, box_y; + Dimension bb_width, bb_height; /*Bounding box for myself and my children*/ + Dimension widget_offset; /* Amount of space to leave for the open + close button to the left of the node.*/ + Boolean placed; + + Pixel color; /* color to draw line in. */ + int line_width; + + GC gc; + + Position new_x, new_y, oc_new_x, oc_new_y; + Boolean map, unmap, move; + Boolean is_compressed; /* for space compression, is this node moved? */ + + /* more resources */ + int line_style; + Pixel background_color; /* color to draw line in. */ +} TreeNodeInfo; + +typedef struct _TreeConstraintRec { + XmManagerConstraintPart manager; + HierNodeInfo hierarchy; + TreeNodeInfo tree; +} TreeConstraintRec, *TreeConstraints; + + +typedef struct _TreePart { + /* Resources */ + + Dimension h_node_space, v_node_space; /* Space between various nodes. */ + + XmTreeConnectStyle connect_style; /* The connection style. */ + + + /* Private State */ + + Dimension max_width; /* Our new desired width. */ + Dimension max_height; /* Our new desired height. */ + + XmList child_op_list; /* List of child operations */ + XPoint ul_point, lr_point; /* Bounding box for exposure compression. */ + + /* more resources */ + unsigned char orientation; /* XmHORIZONTAL or XmVERTICAL */ + + XmTreeCompressStyle compress_style; /* how to do space compression */ + + Dimension vertical_delta; /* if doing space compression, how many pixels */ + /* to offset alternating siblings vertically */ + Dimension horizontal_delta; /* or horizontally */ +} TreePart; + +typedef struct _XmTreeRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + HierarchyPart hierarchy; + TreePart tree; +} XmTreeRec; + +/* + * Typedefs to conform to the XmField macro's naming convention + */ +typedef TreePart XmTreePart; +typedef TreeNodeInfo XmTreeConstraintPart; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmTreeClassRec xmTreeClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _TreeP_h */ + + + + + + diff --git a/libXm/linux86/Xm/TxtPropCv.h b/libXm/linux86/Xm/TxtPropCv.h new file mode 100644 index 0000000..f324d70 --- /dev/null +++ b/libXm/linux86/Xm/TxtPropCv.h @@ -0,0 +1,69 @@ +/* $XConsortium: TxtPropCv.h /main/5 1995/07/15 20:56:52 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmTxtPropCvP_h +#define _XmTxtPropCvP_h + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Public Function Declarations ********/ + +extern int XmCvtXmStringTableToTextProperty(Display *display, + XmStringTable string_table, + int count, + XmICCEncodingStyle style, + XTextProperty *text_prop_return); + +extern int XmCvtTextPropertyToXmStringTable(Display *display, + XTextProperty *text_prop, + XmStringTable *string_table_return, + int *count_return); + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTxtPropCvP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/UnhighlightT.h b/libXm/linux86/Xm/UnhighlightT.h new file mode 100644 index 0000000..133657c --- /dev/null +++ b/libXm/linux86/Xm/UnhighlightT.h @@ -0,0 +1,68 @@ +/* $XConsortium: UnhighlightT.h /main/5 1995/07/15 20:56:56 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmSpecifyUnhighlightT_H +#define _XmSpecifyUnhighlightT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTspecifyUnhighlight; + +/* Trait structures and typedefs, place typedefs first */ + +typedef GC (*XmSpecifyUnhighlightProc)(Widget wid, Widget child); + +/* Version 0: initial release. */ + +typedef struct _XmSpecifyUnhighlightTraitRec { + int version; /* 0 */ + XmSpecifyUnhighlightProc getUnhighlightGC; +} XmSpecifyUnhighlightTraitRec, *XmSpecifyUnhighlightTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSpecifyUnhighlightT_H */ diff --git a/libXm/linux86/Xm/UnitTypeT.h b/libXm/linux86/Xm/UnitTypeT.h new file mode 100644 index 0000000..e295b47 --- /dev/null +++ b/libXm/linux86/Xm/UnitTypeT.h @@ -0,0 +1,69 @@ +/* $XConsortium: UnitTypeT.h /main/5 1995/07/15 20:57:00 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmUnitTypeT_H +#define _XmUnitTypeT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTspecifyUnitType; + +/* Trait structures and typedefs, place typedefs first */ + +typedef unsigned char (*XmSpecUnitTypeGetProc)(Widget wid); + +/* Version 0: initial release. */ + +typedef struct _XmSpecUnitTypeTraitRec { + int version; /* 0 */ + XmSpecUnitTypeGetProc getUnitType; +} XmSpecUnitTypeTraitRec, *XmSpecUnitTypeTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmUnitTypeT_H */ + diff --git a/libXm/linux86/Xm/VaSimpleP.h b/libXm/linux86/Xm/VaSimpleP.h new file mode 100644 index 0000000..757e03c --- /dev/null +++ b/libXm/linux86/Xm/VaSimpleP.h @@ -0,0 +1,61 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VaSimpleP.h /main/10 1996/10/16 16:57:41 drk $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmVaSimpleP_h +#define _XmVaSimpleP_h + +#include + +# include +# define Va_start(a,b) va_start(a,b) + + +#ifdef __cplusplus +extern "C" { +#endif + +#define StringToName(string) XrmStringToName(string) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVaSimpleP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/VendorS.h b/libXm/linux86/Xm/VendorS.h new file mode 100644 index 0000000..0534392 --- /dev/null +++ b/libXm/linux86/Xm/VendorS.h @@ -0,0 +1,82 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VendorS.h /main/9 1995/07/13 18:18:56 drk $ */ +/* +* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmVendorS_h +#define _XmVendorS_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsVendorShell +#define XmIsVendorShell(w) XtIsSubclass(w, vendorShellWidgetClass) +#endif /* XmIsVendorShell */ + +typedef struct _XmVendorShellRec *XmVendorShellWidget; +typedef struct _XmVendorShellClassRec *XmVendorShellWidgetClass; +externalref WidgetClass vendorShellWidgetClass; + + +/******** Public Function Declarations ********/ + +extern Boolean XmIsMotifWMRunning( + Widget shell) ; +extern Widget XmToolTipGetLabel(Widget wid); + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorS_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/VendorSEP.h b/libXm/linux86/Xm/VendorSEP.h new file mode 100644 index 0000000..f2554f7 --- /dev/null +++ b/libXm/linux86/Xm/VendorSEP.h @@ -0,0 +1,166 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VendorSEP.h /main/14 1996/05/21 12:11:50 pascale $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmVendorSEP_h +#define _XmVendorSEP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsVendorShellExt +#define XmIsVendorShellExt(w) XtIsSubclass(w, xmVendorShellExtObjectClass) +#endif /* XmIsVendorShellExt */ + +typedef struct _XmVendorShellExtRec *XmVendorShellExtObject; +typedef struct _XmVendorShellExtClassRec *XmVendorShellExtObjectClass; +externalref WidgetClass xmVendorShellExtObjectClass; + + +#define XmInheritProtocolHandler ((XtCallbackProc)_XtInherit) + +typedef struct _XmVendorShellExtClassPart{ + XtCallbackProc delete_window_handler; + XtCallbackProc offset_handler; + XtPointer extension; +}XmVendorShellExtClassPart, *XmVendorShellExtClassPartPtr; + +typedef struct _XmVendorShellExtClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; + XmShellExtClassPart shell_class; + XmVendorShellExtClassPart vendor_class; +}XmVendorShellExtClassRec; + +typedef struct { + XmFontList default_font_list; + unsigned char focus_policy; + XmFocusData focus_data; + unsigned char delete_response; + unsigned char unit_type; + MwmHints mwm_hints; + MwmInfo mwm_info; + String mwm_menu; + XtCallbackList focus_moved_callback; + /* + * internal fields + */ + Widget old_managed; + Position xAtMap, yAtMap, xOffset, yOffset; + unsigned long lastOffsetSerial; + unsigned long lastMapRequest; + Boolean externalReposition; + + /* mapStyle is an unused field. I'm using this field to keep + * track of the *font_list resource values. Refer + * CheckSetRenderTable in VendorSE.c + */ + unsigned char mapStyle; + + XtCallbackList realize_callback; + XtGrabKind grab_kind; + Boolean audible_warning; + XmFontList button_font_list; + XmFontList label_font_list; + XmFontList text_font_list; + String input_method_string; + String preedit_type_string; + unsigned int light_threshold; + unsigned int dark_threshold; + unsigned int foreground_threshold; + unsigned int im_height; + XtPointer im_info; + Boolean im_vs_height_set; + + /* New public resources for Motif 2.0 */ + XmDirection layout_direction; + XmInputPolicy input_policy; + + Boolean verify_preedit; + + /* toolTip related stuff */ + Widget label; /* XmLabel for the tips */ + int post_delay; /* delay before posting XmNtoolTipPostDelay */ + int post_duration; /* duration XmNtoolTipPostDuration */ + XtIntervalId timer; /* timer for post delay */ + XtIntervalId duration_timer; /* timer for duration */ + Time leave_time; /* time of the last leave event */ + Widget slider; /* the XmSlideContext used to slide in the tip */ + Boolean enable; /* flag to disable all this stuff */ + +} XmVendorShellExtPart, *XmVendorShellExtPartPtr; + +externalref XmVendorShellExtClassRec xmVendorShellExtClassRec; + +typedef struct _XmVendorShellExtRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; + XmShellExtPart shell; + XmVendorShellExtPart vendor; +} XmVendorShellExtRec; + + +/******** Xme Functions ********/ + +void XmeAddFocusChangeCallback(Widget, XtCallbackProc, XtPointer); +void XmeRemoveFocusChangeCallback(Widget, XtCallbackProc, XtPointer); + +/******** End Xme Functions ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorSEP_h */ diff --git a/libXm/linux86/Xm/VendorSP.h b/libXm/linux86/Xm/VendorSP.h new file mode 100644 index 0000000..598b538 --- /dev/null +++ b/libXm/linux86/Xm/VendorSP.h @@ -0,0 +1,67 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VendorSP.h /main/8 1995/07/13 18:19:53 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmVendorSP_h +#define _XmVendorSP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref VendorShellClassRec vendorShellClassRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorSP_h */ diff --git a/libXm/linux86/Xm/VirtKeys.h b/libXm/linux86/Xm/VirtKeys.h new file mode 100644 index 0000000..843c99a --- /dev/null +++ b/libXm/linux86/Xm/VirtKeys.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VirtKeys.h /main/10 1995/07/13 18:20:33 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmVirtKeys_h +#define _XmVirtKeys_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _OSF_Keysyms +#define _OSF_Keysyms + +#define osfXK_Activate 0x1004FF44 +#define osfXK_AddMode 0x1004FF31 +#define osfXK_BackSpace 0x1004FF08 +#define osfXK_BackTab 0x1004FF07 +#define osfXK_BeginData 0x1004FF5A +#define osfXK_BeginLine 0x1004FF58 +#define osfXK_Cancel 0x1004FF69 +#define osfXK_Clear 0x1004FF0B +#define osfXK_Copy 0x1004FF02 +#define osfXK_Cut 0x1004FF03 +#define osfXK_Delete 0x1004FFFF +#define osfXK_DeselectAll 0x1004FF72 +#define osfXK_Down 0x1004FF54 +#define osfXK_EndData 0x1004FF59 +#define osfXK_EndLine 0x1004FF57 +#define osfXK_Escape 0x1004FF1B +#define osfXK_Extend 0x1004FF74 +#define osfXK_Help 0x1004FF6A +#define osfXK_Insert 0x1004FF63 +#define osfXK_Left 0x1004FF51 +#define osfXK_LeftLine 0x1004FFF8 +#define osfXK_Menu 0x1004FF67 +#define osfXK_MenuBar 0x1004FF45 +#define osfXK_Next 0x1004FF56 +#define osfXK_NextField 0x1004FF5E +#define osfXK_NextMenu 0x1004FF5C +#define osfXK_NextMinor 0x1004FFF5 +#define osfXK_PageDown 0x1004FF42 +#define osfXK_PageLeft 0x1004FF40 +#define osfXK_PageRight 0x1004FF43 +#define osfXK_PageUp 0x1004FF41 +#define osfXK_Paste 0x1004FF04 +#define osfXK_PrevField 0x1004FF5D +#define osfXK_PrevMenu 0x1004FF5B +#define osfXK_PrimaryPaste 0x1004FF32 +#define osfXK_Prior 0x1004FF55 +#define osfXK_PriorMinor 0x1004FFF6 +#define osfXK_QuickPaste 0x1004FF33 +#define osfXK_Reselect 0x1004FF73 +#define osfXK_Restore 0x1004FF78 +#define osfXK_Right 0x1004FF53 +#define osfXK_RightLine 0x1004FFF7 +#define osfXK_Select 0x1004FF60 +#define osfXK_SelectAll 0x1004FF71 +#define osfXK_SwitchDirection 0x1004FF7E +#define osfXK_Undo 0x1004FF65 +#define osfXK_Up 0x1004FF52 + +#endif /* OSF_Keysyms */ + + +/******** Public Function Declarations ********/ + +extern void XmTranslateKey( + Display *dpy, +#if NeedWidePrototypes + unsigned int keycode, +#else + KeyCode keycode, +#endif /* NeedWidePrototypes */ + Modifiers modifiers, + Modifiers *modifiers_return, + KeySym *keysym_return) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVirtKeys_h */ diff --git a/libXm/linux86/Xm/VirtKeysP.h b/libXm/linux86/Xm/VirtKeysP.h new file mode 100644 index 0000000..a27c536 --- /dev/null +++ b/libXm/linux86/Xm/VirtKeysP.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VirtKeysP.h /main/10 1995/07/13 18:21:10 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmVirtKeysP_h +#define _XmVirtKeysP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmKEYCODE_TAG_SIZE 32 + +typedef struct _XmDefaultBindingStringRec { + String vendorName; + String defaults; +} XmDefaultBindingStringRec, *XmDefaultBindingString; + +typedef struct _XmVirtualKeysymRec { + String name; + KeySym keysym; +} XmVirtualKeysymRec, *XmVirtualKeysym; + +/* For converting a Virtual keysym to a real keysym. */ +typedef struct _XmVKeyBindingRec +{ + KeySym keysym; + Modifiers modifiers; + KeySym virtkey; +} XmVKeyBindingRec, *XmVKeyBinding; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVirtKeysP_h */ diff --git a/libXm/linux86/Xm/Xm.h b/libXm/linux86/Xm/Xm.h new file mode 100644 index 0000000..c8d0646 --- /dev/null +++ b/libXm/linux86/Xm/Xm.h @@ -0,0 +1,2004 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* $TOG: Xm.h /main/38 1999/10/18 14:50:22 samborn $ + * + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1987-1992,1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ + +#ifndef _Xm_h +#define _Xm_h + +#if !defined(__STDC__) \ + && !defined(__cplusplus) && !defined(c_plusplus) \ + && !defined(FUNCPROTO) && !defined(XTFUNCPROTO) && !defined(XMFUNCPROTO) +#define _NO_PROTO +#endif /* __STDC__ */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmVERSION 2 +#define XmREVISION 2 +#define XmUPDATE_LEVEL 3 +#define XmVersion (XmVERSION * 1000 + XmREVISION) +#define XmVERSION_STRING "@(#)Motif Version 2.2.2" + +externalref int xmUseVersion; + + +/* define used to denote an unspecified pixmap */ + +#define XmUNSPECIFIED_PIXMAP 2 + +/* define for an unspecified position */ + +#define XmUNSPECIFIED_POSITION -1 + +/******************* + * + * Defines for resources to be defaulted by vendors. + * String are initialized in Xmos.c + * + ****************/ + +#define XmSTRING_OS_CHARSET XmSTRING_ISO8859_1 +#ifndef XmFALLBACK_CHARSET +#define XmFALLBACK_CHARSET XmSTRING_ISO8859_1 +#endif + +#define XmDEFAULT_FONT _XmSDEFAULT_FONT +#define XmDEFAULT_BACKGROUND _XmSDEFAULT_BACKGROUND +#define XmDEFAULT_DARK_THRESHOLD 20 +#define XmDEFAULT_LIGHT_THRESHOLD 93 +#define XmDEFAULT_FOREGROUND_THRESHOLD 70 + +externalref char _XmSDEFAULT_FONT[]; /* In Xmos.c */ +externalref char _XmSDEFAULT_BACKGROUND[]; /* In Xmos.c */ + +typedef unsigned char XmDirection; + +#define XmDIRECTION_IGNORED 0x30 + +#define XmRIGHT_TO_LEFT_MASK 0x01 /* 0x01 for bc */ +#define XmLEFT_TO_RIGHT_MASK 0x02 +#define XmHORIZONTAL_MASK 0x03 +#define XmTOP_TO_BOTTOM_MASK 0x04 +#define XmBOTTOM_TO_TOP_MASK 0x08 +#define XmVERTICAL_MASK 0x0c +#define XmPRECEDENCE_HORIZ_MASK 0x40 +#define XmPRECEDENCE_VERT_MASK 0x80 +#define XmPRECEDENCE_MASK 0xc0 + +enum { + XmRIGHT_TO_LEFT_TOP_TO_BOTTOM = + XmRIGHT_TO_LEFT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_HORIZ_MASK, + XmLEFT_TO_RIGHT_TOP_TO_BOTTOM = + XmLEFT_TO_RIGHT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_HORIZ_MASK, + XmRIGHT_TO_LEFT_BOTTOM_TO_TOP = + XmRIGHT_TO_LEFT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_HORIZ_MASK, + XmLEFT_TO_RIGHT_BOTTOM_TO_TOP = + XmLEFT_TO_RIGHT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_HORIZ_MASK, + XmTOP_TO_BOTTOM_RIGHT_TO_LEFT = + XmRIGHT_TO_LEFT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_VERT_MASK, + XmTOP_TO_BOTTOM_LEFT_TO_RIGHT = + XmLEFT_TO_RIGHT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_VERT_MASK, + XmBOTTOM_TO_TOP_RIGHT_TO_LEFT = + XmRIGHT_TO_LEFT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_VERT_MASK, + XmBOTTOM_TO_TOP_LEFT_TO_RIGHT = + XmLEFT_TO_RIGHT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_VERT_MASK, + XmTOP_TO_BOTTOM = + XmTOP_TO_BOTTOM_MASK | XmHORIZONTAL_MASK | XmPRECEDENCE_MASK, + XmBOTTOM_TO_TOP = + XmBOTTOM_TO_TOP_MASK | XmHORIZONTAL_MASK | XmPRECEDENCE_MASK, + XmRIGHT_TO_LEFT = + XmRIGHT_TO_LEFT_MASK | XmVERTICAL_MASK | XmPRECEDENCE_MASK, + XmLEFT_TO_RIGHT = + XmLEFT_TO_RIGHT_MASK | XmVERTICAL_MASK | XmPRECEDENCE_MASK, + XmDEFAULT_DIRECTION = 0xff + }; + + +extern Boolean XmDirectionMatch(XmDirection d1, + XmDirection d2); +extern Boolean XmDirectionMatchPartial(XmDirection d1, + XmDirection d2, + XmDirection dmask); + +/**************** + * + * XmString structure defines. These must be here (at the start of the file) + * becaused they are used later on. + * + ****************/ +typedef enum{ XmFONT_IS_FONT, XmFONT_IS_FONTSET + } XmFontType; + +enum { XmSTRING_DIRECTION_L_TO_R, + XmSTRING_DIRECTION_R_TO_L, + XmSTRING_DIRECTION_UNSET = 3, + XmSTRING_DIRECTION_DEFAULT = XmDEFAULT_DIRECTION + }; + +typedef unsigned char XmStringDirection; +typedef union __XmStringRec *XmString; /* opaque to outside */ +typedef XmString * XmStringTable; /* opaque to outside */ +typedef char * XmStringCharSet; /* Null term string */ +typedef char * XmStringTag; /* Null term string */ +typedef unsigned char XmStringComponentType; /* component tags */ + +typedef struct __XmRenditionRec **XmFontListEntry; /* opaque to outside */ +typedef struct __XmRenderTableRec **XmFontList; /* opaque to outside */ +typedef struct _XmFontListContextRec *XmFontContext; /* opaque to outside */ + +typedef struct __XmStringContextRec *_XmStringContext; /* opaque to outside */ +typedef union __XmStringRec *_XmString; /* opaque to outside */ +typedef struct __XmStringContextRec *XmStringContext; /* opaque to outside */ + +enum{ XmSTRING_COMPONENT_UNKNOWN, XmSTRING_COMPONENT_CHARSET, + XmSTRING_COMPONENT_TEXT, XmSTRING_COMPONENT_DIRECTION, + XmSTRING_COMPONENT_SEPARATOR, XmSTRING_COMPONENT_LOCALE_TEXT, + XmSTRING_COMPONENT_LOCALE, XmSTRING_COMPONENT_WIDECHAR_TEXT, + XmSTRING_COMPONENT_LAYOUT_PUSH, XmSTRING_COMPONENT_LAYOUT_POP, + XmSTRING_COMPONENT_RENDITION_BEGIN, XmSTRING_COMPONENT_RENDITION_END, + XmSTRING_COMPONENT_TAB + /* 13-125 reserved */ + } ; + +#define XmSTRING_COMPONENT_FONTLIST_ELEMENT_TAG XmSTRING_COMPONENT_CHARSET + +#define XmSTRING_COMPONENT_TAG XmSTRING_COMPONENT_CHARSET + +#define XmSTRING_COMPONENT_END ((XmStringComponentType) 126) + +#define XmSTRING_COMPONENT_USER_BEGIN ((XmStringComponentType) 128) + /* 128-255 are user tags */ +#define XmSTRING_COMPONENT_USER_END ((XmStringComponentType) 255) + +typedef enum { + XmCHARSET_TEXT, XmMULTIBYTE_TEXT, + XmWIDECHAR_TEXT, XmNO_TEXT + } XmTextType; + +typedef enum { + XmOUTPUT_ALL, XmOUTPUT_BETWEEN, + XmOUTPUT_BEGINNING, XmOUTPUT_END, + XmOUTPUT_BOTH + } XmParseModel; + +typedef unsigned char XmIncludeStatus; +enum { + XmINSERT, XmTERMINATE, XmINVOKE + }; + +/* We are making an attempt (perhaps unnecessaryily) to keep our style + constants the same as the equivalent Xlib style constants. The first + Motif specific style constant starts at 32 so that the consortium can + add constants to their list without overlapping with ours. */ +typedef enum { + XmSTYLE_STRING = XStringStyle, + XmSTYLE_COMPOUND_TEXT = XCompoundTextStyle, + XmSTYLE_TEXT = XTextStyle, + XmSTYLE_STANDARD_ICC_TEXT = XStdICCTextStyle, + XmSTYLE_LOCALE = 32, + XmSTYLE_COMPOUND_STRING + } XmICCEncodingStyle; + +/**************** + * + * XmParseTable structure defines. These must be here (at the start of + * the file) because they are used later on. + * + ****************/ + +typedef struct __XmParseMappingRec *XmParseMapping; /* opaque */ +typedef XmParseMapping *XmParseTable; + +/* A special pattern used to match a change of character direction. */ +#define XmDIRECTION_CHANGE NULL + + +typedef XmIncludeStatus (*XmParseProc) (XtPointer *in_out, + XtPointer text_end, + XmTextType type, + XmStringTag locale_tag, + XmParseMapping entry, + int pattern_length, + XmString *str_include, + XtPointer call_data); + + +/**************** + * + * XmTabList structure defines. These must be here (at the start of the file) + * becaused they are used later on. + * + ****************/ +typedef enum { + XmABSOLUTE, XmRELATIVE + } XmOffsetModel; + +typedef struct __XmTabRec *XmTab; /* opaque */ +typedef struct __XmTabListRec *XmTabList; /* opaque */ + + +/**************** + * + * XmRenderTable structure defines. These must be here (at the start of the file) + * becaused they are used later on. + * + ****************/ +/* XmRendition declarations */ +typedef struct __XmRenditionRec **XmRendition; /* opaque */ +typedef struct __XmRenderTableRec **XmRenderTable; /* opaque */ + +typedef enum { + XmSKIP, XmMERGE_REPLACE, + XmMERGE_OLD, XmMERGE_NEW, + XmDUPLICATE /* For XmFontListAdd and XmFontListAppendEntry. */ + } XmMergeMode; + +#define XmAS_IS 255 +#define XmFORCE_COLOR 1 + +#define XmUNSPECIFIED_PIXEL ((Pixel) (~0)) +#define XmDEFAULT_SELECT_COLOR XmUNSPECIFIED_PIXEL +#define XmREVERSED_GROUND_COLORS (XmDEFAULT_SELECT_COLOR - 1) +#define XmHIGHLIGHT_COLOR (XmREVERSED_GROUND_COLORS - 1) + +enum { XmUNSPECIFIED_LOAD_MODEL, XmLOAD_DEFERRED, XmLOAD_IMMEDIATE }; + + + +/************************************************************************ + * Primitive Resources and define values + ************************************************************************/ + +/* size policy values */ + +enum{ XmCHANGE_ALL, XmCHANGE_NONE, + XmCHANGE_WIDTH, XmCHANGE_HEIGHT + } ; + +/* unit type values */ + +enum{ XmPIXELS, Xm100TH_MILLIMETERS, + Xm1000TH_INCHES, Xm100TH_POINTS, + Xm100TH_FONT_UNITS, XmINCHES, + XmCENTIMETERS, XmMILLIMETERS, + XmPOINTS, XmFONT_UNITS + } ; + +/* DeleteResponse values */ + +enum{ XmDESTROY, XmUNMAP, + XmDO_NOTHING + } ; +enum{ XmEXPLICIT, XmPOINTER + } ; +/************************************************************************ + * Navigation defines + ************************************************************************/ + +enum{ XmNONE, XmTAB_GROUP, + XmSTICKY_TAB_GROUP, XmEXCLUSIVE_TAB_GROUP + } ; + +#define XmDYNAMIC_DEFAULT_TAB_GROUP (255) + +/************************************************************************ + * Audible warning + ************************************************************************/ + +enum{ /* XmNONE */ XmBELL = 1 + } ; + +/************************************************************************ + * Input Manager defines + ************************************************************************/ + +enum { + XmPER_SHELL, XmPER_WIDGET, + XmINHERIT_POLICY = 255 + } ; + +typedef unsigned char XmInputPolicy; + +/************************************************************************ + * Menu defines + ************************************************************************/ + +enum{ XmNO_ORIENTATION, XmVERTICAL, + XmHORIZONTAL + } ; +enum{ XmWORK_AREA, XmMENU_BAR, + XmMENU_PULLDOWN, XmMENU_POPUP, + XmMENU_OPTION + } ; +enum{ XmNO_PACKING, XmPACK_TIGHT, + XmPACK_COLUMN, XmPACK_NONE + } ; +enum{/* XmALIGNMENT_BASELINE_TOP, XmALIGNMENT_CENTER, + XmALIGNMENT_BASELINE_BOTTOM, */ XmALIGNMENT_CONTENTS_TOP = 3, + XmALIGNMENT_CONTENTS_BOTTOM + } ; +enum{ XmTEAR_OFF_ENABLED, XmTEAR_OFF_DISABLED + } ; +enum{ XmUNPOST, XmUNPOST_AND_REPLAY + } ; +enum{ XmLAST_POSITION = -1, XmFIRST_POSITION + } ; +enum{ XmPOPUP_DISABLED = 0, XmPOPUP_KEYBOARD = 1, + XmPOPUP_AUTOMATIC, XmPOPUP_AUTOMATIC_RECURSIVE }; + +/************************************************************************ + * ComboBox defines + ************************************************************************/ + +enum{ XmCOMBO_BOX=0, XmDROP_DOWN_COMBO_BOX, + XmDROP_DOWN_LIST + } ; + +enum{ /* XmNONE */ XmQUICK_NAVIGATE = 1, XmINVALID_MATCH_BEHAVIOR + } ; + +enum{ XmZERO_BASED, XmONE_BASED + } ; + +#define XmINVALID_POSITION -1 + +/************************************************************************ + * Label/Frame defines + ************************************************************************/ + +enum{ XmALIGNMENT_BEGINNING, XmALIGNMENT_CENTER, + XmALIGNMENT_END, XmALIGNMENT_UNSPECIFIED + } ; +enum{ XmALIGNMENT_BASELINE_TOP, /* XmALIGNMENT_CENTER, */ + XmALIGNMENT_BASELINE_BOTTOM = 2, XmALIGNMENT_WIDGET_TOP, + XmALIGNMENT_WIDGET_BOTTOM + } ; +/* new enum introduced in 2.0 to clear up the confusion in + widget top/bottom attachment */ +#define XmALIGNMENT_CHILD_TOP XmALIGNMENT_WIDGET_BOTTOM +#define XmALIGNMENT_CHILD_BOTTOM XmALIGNMENT_WIDGET_TOP + +/************************************************************************ + * Frame defines + ************************************************************************/ + +enum{ XmFRAME_GENERIC_CHILD, XmFRAME_WORKAREA_CHILD, + XmFRAME_TITLE_CHILD + } ; +/************************************************************************ + * ToggleButton defines + ************************************************************************/ + +enum{ XmN_OF_MANY = 1, XmONE_OF_MANY, + XmONE_OF_MANY_ROUND, XmONE_OF_MANY_DIAMOND + } ; +/************************************************************************ + * Form defines + ************************************************************************/ + +enum{ XmATTACH_NONE, XmATTACH_FORM, + XmATTACH_OPPOSITE_FORM, XmATTACH_WIDGET, + XmATTACH_OPPOSITE_WIDGET, XmATTACH_POSITION, + XmATTACH_SELF + } ; +enum{ XmRESIZE_NONE, XmRESIZE_GROW, + XmRESIZE_ANY + } ; + +/**************************************************************************** + * Callback reasons + ****************************************************************************/ + +enum{ XmCR_NONE, XmCR_HELP, + XmCR_VALUE_CHANGED, XmCR_INCREMENT, + XmCR_DECREMENT, XmCR_PAGE_INCREMENT, + XmCR_PAGE_DECREMENT, XmCR_TO_TOP, + XmCR_TO_BOTTOM, XmCR_DRAG, + XmCR_ACTIVATE, XmCR_ARM, + XmCR_DISARM, XmCR_MAP = 16, + XmCR_UNMAP, XmCR_FOCUS, + XmCR_LOSING_FOCUS, XmCR_MODIFYING_TEXT_VALUE, + XmCR_MOVING_INSERT_CURSOR, XmCR_EXECUTE, + XmCR_SINGLE_SELECT, XmCR_MULTIPLE_SELECT, + XmCR_EXTENDED_SELECT, XmCR_BROWSE_SELECT, + XmCR_DEFAULT_ACTION, XmCR_CLIPBOARD_DATA_REQUEST, + XmCR_CLIPBOARD_DATA_DELETE, XmCR_CASCADING, + XmCR_OK, XmCR_CANCEL, + XmCR_APPLY = 34, XmCR_NO_MATCH, + XmCR_COMMAND_ENTERED, XmCR_COMMAND_CHANGED, + XmCR_EXPOSE, XmCR_RESIZE, + XmCR_INPUT, XmCR_GAIN_PRIMARY, + XmCR_LOSE_PRIMARY, XmCR_CREATE, + XmCR_TEAR_OFF_ACTIVATE, XmCR_TEAR_OFF_DEACTIVATE, + XmCR_OBSCURED_TRAVERSAL, XmCR_FOCUS_MOVED, + XmCR_REPOST = 54, XmCR_COLLAPSED, + XmCR_EXPANDED, XmCR_SELECT, + XmCR_DRAG_START, XmCR_NO_FONT, + XmCR_NO_RENDITION, XmCR_POST, + XmCR_SPIN_NEXT, XmCR_SPIN_PRIOR, + XmCR_SPIN_FIRST, XmCR_SPIN_LAST, + XmCR_PAGE_SCROLLER_INCREMENT, XmCR_PAGE_SCROLLER_DECREMENT, + XmCR_MAJOR_TAB, XmCR_MINOR_TAB, + XmCR_START_JOB, XmCR_END_JOB, + XmCR_PAGE_SETUP, XmCR_PDM_NONE, + XmCR_PDM_UP, XmCR_PDM_START_ERROR, + XmCR_PDM_START_VXAUTH, XmCR_PDM_START_PXAUTH, + XmCR_PDM_OK, XmCR_PDM_CANCEL, + XmCR_PDM_EXIT_ERROR, + XmCR_UPDATE_SHELL, XmCR_UPDATE_TEXT, + XmCR_VERIFY_TEXT, XmCR_VERIFY_TEXT_FAILED, + XmCR_ENTER_CHILD, XmCR_LEAVE_CHILD, + XmCR_PROTOCOLS = 6666 /* required for BC. See CR 9158 */ + } ; + +/************************************************************************ + * new ScrollBar showArrows define + ************************************************************************/ + +enum{ /* XmNONE */ XmEACH_SIDE = 1, + XmMAX_SIDE, XmMIN_SIDE + } ; + + +/************************************************************************ + * Sliding mode + ************************************************************************/ + +enum{ XmSLIDER, XmTHERMOMETER} ; + + +/************************************************************************ + * Slider Visual + ************************************************************************/ + +enum{ XmBACKGROUND_COLOR, XmFOREGROUND_COLOR, + XmTROUGH_COLOR, XmSHADOWED_BACKGROUND} ; + + +/************************************************************************ + * Slider Mark + ************************************************************************/ + +enum{ /* XmNONE, */ XmETCHED_LINE = 1, + XmTHUMB_MARK, XmROUND_MARK } ; + + +/************************************************************************ + * new Scale showValue + ************************************************************************/ + +enum{ /* XmNONE */ XmNEAR_SLIDER = 1, + XmNEAR_BORDER + } ; + + +/************************************************************************ + * new ScrolledWindow/MainWindow chidType + ************************************************************************/ + +/* XmWORK_AREA, XmMENU_BAR and XmSEPARATOR have to match the existing ones */ +enum{ /* XmWORK_AREA = 0, XmMENU_BAR = 1, */ + XmHOR_SCROLLBAR = 2, + XmVERT_SCROLLBAR, + XmCOMMAND_WINDOW, + /* XmSEPARATOR = 5 */ + XmMESSAGE_WINDOW = 6, + XmSCROLL_HOR, XmSCROLL_VERT, XmNO_SCROLL, + XmCLIP_WINDOW, XmGENERIC_CHILD + } ; + +/************************************************************************ + * new ScrolledWindow auto drag enum + ************************************************************************/ + +enum{ XmAUTO_DRAG_ENABLED, XmAUTO_DRAG_DISABLED + } ; + +/************************************************************************ + * new Display enable warp enum + ************************************************************************/ + +enum{ XmENABLE_WARP_ON, XmENABLE_WARP_OFF + } ; + +/************************************************************************ + * new Display enable btn1 transfer enum + ************************************************************************/ + +enum{ XmOFF, XmBUTTON2_ADJUST, + XmBUTTON2_TRANSFER }; + +/************************************************************************ + * auto_selection_type + ************************************************************************/ + +enum{ XmAUTO_UNSET, XmAUTO_BEGIN, + XmAUTO_MOTION, XmAUTO_CANCEL, + XmAUTO_NO_CHANGE, XmAUTO_CHANGE + }; + +/************************************************************************ + * Callback structures + ************************************************************************/ + +typedef struct +{ + int reason; + XEvent *event; +} XmAnyCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + int click_count; +} XmArrowButtonCallbackStruct; + +typedef struct _XmDragStartCallbackStruct { + int reason; + XEvent *event; + Widget widget; + Boolean doit; +} XmDragStartCallbackStruct, *XmDragStartCallback; + +typedef struct +{ + int reason; + XEvent *event; + XmString item_or_text; + int item_position; +} XmComboBoxCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Window window; +} XmDrawingAreaCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Window window; + int click_count; +} XmDrawnButtonCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + int click_count; +} XmPushButtonCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Widget widget; + char *data; + char *callbackstruct; +} XmRowColumnCallbackStruct; + +typedef struct +{ + int reason; + XEvent * event; + int value; + int pixel; +} XmScrollBarCallbackStruct; + +typedef struct +{ + int reason; + XEvent * event; + int set; +} XmToggleButtonCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString item; + int item_length; + int item_position; + XmString *selected_items; + int selected_item_count; + int *selected_item_positions; + char selection_type; + char auto_selection_type; +} XmListCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString value; + int length; +} XmSelectionBoxCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString value; + int length; +} XmCommandCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString value; + int length; + XmString mask; + int mask_length; + XmString dir ; + int dir_length ; + XmString pattern ; + int pattern_length ; +} XmFileSelectionBoxCallbackStruct; + + +typedef struct +{ + int reason; + XEvent * event; + int value; +} XmScaleCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Widget menuToPost; + Boolean postIt; + Widget target; +} XmPopupHandlerCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Widget item; + unsigned char new_outline_state; +} XmContainerOutlineCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + WidgetList selected_items; + int selected_item_count; + unsigned char auto_selection_type; +} XmContainerSelectCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + int page_number; + Widget page_widget; + int prev_page_number; + Widget prev_page_widget; +} XmNotebookCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmRendition rendition; + char *font_name; + XmRenderTable render_table; + XmStringTag tag; +} XmDisplayCallbackStruct; + +typedef struct +{ + int reason; /* XmCR_START_JOB, XmCR_END_JOB, XmCR_PAGE_SETUP */ + XEvent *event; + XPContext context; + Boolean last_page; /* in_out */ + XtPointer detail; +} XmPrintShellCallbackStruct; + + +/************************************************************************ + * PushButton defines + ************************************************************************/ + +enum{ XmMULTICLICK_DISCARD, XmMULTICLICK_KEEP + } ; +/************************************************************************ + * DrawnButton defines + ************************************************************************/ + +enum{ XmSHADOW_IN = 7, XmSHADOW_OUT + } ; +/************************************************************************ + * Arrow defines + ************************************************************************/ + +enum{ XmARROW_UP, XmARROW_DOWN, + XmARROW_LEFT, XmARROW_RIGHT + } ; +/************************************************************************ + * Separator defines + * Note: XmINVALID_SEPARATOR_TYPE marks the last+1 separator type + ************************************************************************/ + +enum{ XmNO_LINE, XmSINGLE_LINE, + XmDOUBLE_LINE, XmSINGLE_DASHED_LINE, + XmDOUBLE_DASHED_LINE, XmSHADOW_ETCHED_IN, + XmSHADOW_ETCHED_OUT, XmSHADOW_ETCHED_IN_DASH, + XmSHADOW_ETCHED_OUT_DASH, XmINVALID_SEPARATOR_TYPE + } ; + +enum{ XmPIXMAP = 1, XmSTRING + } ; + +/************************************************************************ + * Drag and Drop defines + ************************************************************************/ + +enum{ XmWINDOW, /* XmPIXMAP, */ + XmCURSOR = 2, XmDRAG_WINDOW = 3 + } ; + +/************************************************************************ + * ScrollBar defines + ************************************************************************/ + +enum{ XmMAX_ON_TOP, XmMAX_ON_BOTTOM, + XmMAX_ON_LEFT, XmMAX_ON_RIGHT + } ; +/************************************************************************ + * * + * List Widget defines * + * * + ************************************************************************/ + +enum{ XmSINGLE_SELECT, XmMULTIPLE_SELECT, + XmEXTENDED_SELECT, XmBROWSE_SELECT + } ; +enum{ XmSTATIC, XmDYNAMIC + } ; +enum{ XmNORMAL_MODE, XmADD_MODE + } ; +/************************************************************************ + * * + * Container Widget defines * + * * + ************************************************************************/ + + /* XmRAutomaticSelection */ +enum { XmNO_AUTO_SELECT, + XmAUTO_SELECT + }; + + /* XmRLineStyle */ +enum { /* XmNO_LINE */ + XmSINGLE = 1 + }; + + /* XmREntryViewType */ +enum { /* XmLARGE_ICON */ + /* XmSMALL_ICON */ + XmANY_ICON = 2 + }; + + /* XmRSpatialIncludeModel */ +enum { XmAPPEND, + XmCLOSEST, + XmFIRST_FIT + }; + + /* XmRLayoutType */ +enum { XmOUTLINE, + XmSPATIAL, + XmDETAIL + }; + + /* XmNoutlineButtonPolicy */ +enum { XmOUTLINE_BUTTON_PRESENT, + XmOUTLINE_BUTTON_ABSENT + }; + + /* XmRSpatialPlaceStyle */ +enum { /* XmNONE */ + XmGRID = 1, + XmCELLS + }; + + /* XmRPrimaryOwnership */ +enum { XmOWN_NEVER, + XmOWN_ALWAYS, + XmOWN_MULTIPLE, + XmOWN_POSSIBLE_MULTIPLE + }; + + /* XmRSpatialResizeModel */ +enum { XmGROW_MINOR, + XmGROW_MAJOR, + XmGROW_BALANCED + }; + + /* XmRSelectionTechnique */ +enum { XmMARQUEE, + XmMARQUEE_EXTEND_START, + XmMARQUEE_EXTEND_BOTH, + XmTOUCH_ONLY, + XmTOUCH_OVER + }; + + /* XmRSpatialSnapModel */ +enum { /* XmNONE */ + XmSNAP_TO_GRID = 1, + XmCENTER + }; + + /* XmROutlineState */ +enum { XmCOLLAPSED, + XmEXPANDED + }; + +/************************************************************************ + * * + * IconGadget defines * + * * + ************************************************************************/ + + /* XmRViewType */ +enum { XmLARGE_ICON, + XmSMALL_ICON + }; + + /* XmRVisualEmphasis */ +enum { XmSELECTED, + XmNOT_SELECTED + }; + +/************************************************************************ + * * + * Notebook Widget defines * + * * + ************************************************************************/ + +#define XmUNSPECIFIED_PAGE_NUMBER (-32768) + + /* XmRBindingType */ +enum { /* XmNONE */ + /* XmPIXMAP */ + XmSOLID = 2, + XmSPIRAL, + XmPIXMAP_OVERLAP_ONLY + }; + + /* XmRNBChildType */ +enum { /* XmNONE */ + XmPAGE = 1, + XmMAJOR_TAB, + XmMINOR_TAB, + XmSTATUS_AREA, + XmPAGE_SCROLLER + }; + +/************************************************************************ + * * + * Spin button defines. * + * * + ************************************************************************/ + +/* XmNarrowOrientation */ +enum +{ + XmARROWS_VERTICAL, + XmARROWS_HORIZONTAL +}; + +/* XmNarrowLayout */ +enum +{ + XmARROWS_END, + XmARROWS_BEGINNING, + XmARROWS_SPLIT, + XmARROWS_FLAT_END, + XmARROWS_FLAT_BEGINNING +}; + +/* XmNarrowSensitivity and XmNdefaultArrowSensitivity */ +/* Please note that these arrows form the proper values + for a bit mask. */ +enum +{ + XmARROWS_INSENSITIVE, + XmARROWS_INCREMENT_SENSITIVE, + XmARROWS_DECREMENT_SENSITIVE, + XmARROWS_SENSITIVE, + XmARROWS_DEFAULT_SENSITIVITY +}; + +/* XmNpositionType */ +enum +{ + XmPOSITION_INDEX, + XmPOSITION_VALUE +}; + +/* XmNspinButtonChildType */ +enum +{ + /* XmPIXMAP = 1 */ + /* XmSTRING */ + XmNUMERIC = 3 +}; + +/* Return values for Xm[Simple]SpinBoxValidatePosition */ +enum +{ + XmVALID_VALUE, + XmCURRENT_VALUE, + XmMAXIMUM_VALUE, + XmMINIMUM_VALUE, + XmINCREMENT_VALUE +}; + +typedef struct +{ + int reason; + XEvent *event; + Widget widget; + Boolean doit; + int position; + XmString value; + Boolean crossed_boundary; +} XmSpinBoxCallbackStruct; + + +/************************************************************************ + * * + * Scrolled Window defines. * + * * + ************************************************************************/ + +enum{ XmVARIABLE, XmCONSTANT, + XmRESIZE_IF_POSSIBLE + } ; +enum{ XmAUTOMATIC, XmAPPLICATION_DEFINED + } ; +enum{ /* XmSTATIC */ XmAS_NEEDED = 1 + } ; + +#define SW_TOP 1 +#define SW_BOTTOM 0 +#define SW_LEFT 2 +#define SW_RIGHT 0 + +#define XmTOP_LEFT (SW_TOP | SW_LEFT) +#define XmBOTTOM_LEFT (SW_BOTTOM | SW_LEFT) +#define XmTOP_RIGHT (SW_TOP | SW_RIGHT) +#define XmBOTTOM_RIGHT (SW_BOTTOM | SW_RIGHT) + +/************************************************************************ + * * + * MainWindow Resources * + * * + ************************************************************************/ + +enum{ XmCOMMAND_ABOVE_WORKSPACE, XmCOMMAND_BELOW_WORKSPACE + } ; +/************************************************************************ + * * + * Text Widget defines * + * * + ************************************************************************/ + +enum{ XmMULTI_LINE_EDIT, XmSINGLE_LINE_EDIT + } ; + +typedef enum{ + XmTEXT_FORWARD, + XmTEXT_BACKWARD + } XmTextDirection; + +typedef long XmTextPosition; +typedef Atom XmTextFormat; + +#define XmFMT_8_BIT ((XmTextFormat) XA_STRING) /* 8-bit text. */ +#define XmFMT_16_BIT ((XmTextFormat) 2) /* 16-bit text. */ + +#define FMT8BIT XmFMT_8_BIT /* For backwards compatibility only.*/ +#define FMT16BIT XmFMT_16_BIT /* For backwards compatibility only.*/ + +typedef enum{ + XmSELECT_POSITION, XmSELECT_WHITESPACE, + XmSELECT_WORD, XmSELECT_LINE, + XmSELECT_ALL, XmSELECT_PARAGRAPH, + XmSELECT_OUT_LINE + } XmTextScanType ; + +typedef enum{ + XmHIGHLIGHT_NORMAL, XmHIGHLIGHT_SELECTED, + XmHIGHLIGHT_SECONDARY_SELECTED, XmSEE_DETAIL + } XmHighlightMode ; + +/* XmTextBlock's are used to pass text around. */ + +typedef struct { + char *ptr; /* Pointer to data. */ + int length; /* Number of bytes of data. */ + XmTextFormat format; /* Representations format */ +} XmTextBlockRec, *XmTextBlock; + +typedef struct +{ + int reason; + XEvent *event; + Boolean doit; + long currInsert, newInsert; + long startPos, endPos; + XmTextBlock text; +} XmTextVerifyCallbackStruct, *XmTextVerifyPtr; + +/* XmTextBlockWcs's are used in 1.2 modifyVerifyWcs callbacks for Text[Field] + * widgets. */ + +typedef struct { + wchar_t *wcsptr; /* Pointer to data. */ + int length; /* Number of characters (not bytes) of data. */ +} XmTextBlockRecWcs, *XmTextBlockWcs; + +typedef struct +{ + int reason; + XEvent *event; + Boolean doit; + long currInsert, newInsert; + long startPos, endPos; + XmTextBlockWcs text; +} XmTextVerifyCallbackStructWcs, *XmTextVerifyPtrWcs; + +/* functions renamed after 1.0 release due to resource name overlap */ +#define XmTextGetTopPosition XmTextGetTopCharacter +#define XmTextSetTopPosition XmTextSetTopCharacter + +#define XmCOPY_FAILED 0 +#define XmCOPY_SUCCEEDED 1 +#define XmCOPY_TRUNCATED 2 + +/************************************************************************ + * * + * DIALOG defines.. BulletinBoard and things common to its subclasses * + * CommandBox MessageBox Selection FileSelection * + * * + ************************************************************************/ + +/* child type defines for Xm...GetChild() */ + +enum{ XmDIALOG_NONE, XmDIALOG_APPLY_BUTTON, + XmDIALOG_CANCEL_BUTTON, XmDIALOG_DEFAULT_BUTTON, + XmDIALOG_OK_BUTTON, XmDIALOG_FILTER_LABEL, + XmDIALOG_FILTER_TEXT, XmDIALOG_HELP_BUTTON, + XmDIALOG_LIST, XmDIALOG_LIST_LABEL, + XmDIALOG_MESSAGE_LABEL, XmDIALOG_SELECTION_LABEL, + XmDIALOG_SYMBOL_LABEL, XmDIALOG_TEXT, + XmDIALOG_SEPARATOR, XmDIALOG_DIR_LIST, + XmDIALOG_DIR_LIST_LABEL + } ; + +#define XmDIALOG_HISTORY_LIST XmDIALOG_LIST +#define XmDIALOG_PROMPT_LABEL XmDIALOG_SELECTION_LABEL +#define XmDIALOG_VALUE_TEXT XmDIALOG_TEXT +#define XmDIALOG_COMMAND_TEXT XmDIALOG_TEXT +#define XmDIALOG_FILE_LIST XmDIALOG_LIST +#define XmDIALOG_FILE_LIST_LABEL XmDIALOG_LIST_LABEL + +/* dialog style defines */ + +enum{ XmDIALOG_MODELESS, XmDIALOG_PRIMARY_APPLICATION_MODAL, + XmDIALOG_FULL_APPLICATION_MODAL,XmDIALOG_SYSTEM_MODAL + } ; + +/* The following is for compatibility only. Its use is deprecated. + */ +#define XmDIALOG_APPLICATION_MODAL XmDIALOG_PRIMARY_APPLICATION_MODAL + +/************************************************************************ + * XmSelectionBox, XmFileSelectionBox and XmCommand - misc. stuff * + ***********************************************************************/ + +/* Defines for Selection child placement +*/ +enum{ XmPLACE_TOP, XmPLACE_ABOVE_SELECTION, + XmPLACE_BELOW_SELECTION + } ; + +/* Defines for file type mask: +*/ +#define XmFILE_DIRECTORY (1 << 0) +#define XmFILE_REGULAR (1 << 1) +#define XmFILE_ANY_TYPE (XmFILE_DIRECTORY | XmFILE_REGULAR) + +/* Defines for selection dialog type: +*/ +enum{ XmDIALOG_WORK_AREA, XmDIALOG_PROMPT, + XmDIALOG_SELECTION, XmDIALOG_COMMAND, + XmDIALOG_FILE_SELECTION + } ; + +/************************************************************************ + * XmMessageBox stuff not common to other dialogs * + ***********************************************************************/ + +/* defines for dialog type */ + +enum{ XmDIALOG_TEMPLATE, XmDIALOG_ERROR, + XmDIALOG_INFORMATION, XmDIALOG_MESSAGE, + XmDIALOG_QUESTION, XmDIALOG_WARNING, + XmDIALOG_WORKING + } ; + +/* Traversal types */ + +typedef enum{ + XmVISIBILITY_UNOBSCURED, XmVISIBILITY_PARTIALLY_OBSCURED, + XmVISIBILITY_FULLY_OBSCURED + } XmVisibility ; + + +typedef enum{ + XmTRAVERSE_CURRENT, XmTRAVERSE_NEXT, + XmTRAVERSE_PREV, XmTRAVERSE_HOME, + XmTRAVERSE_NEXT_TAB_GROUP, XmTRAVERSE_PREV_TAB_GROUP, + XmTRAVERSE_UP, XmTRAVERSE_DOWN, + XmTRAVERSE_LEFT, XmTRAVERSE_RIGHT, + XmTRAVERSE_GLOBALLY_FORWARD, XmTRAVERSE_GLOBALLY_BACKWARD + } XmTraversalDirection ; + +typedef struct _XmTraverseObscuredCallbackStruct +{ int reason ; + XEvent * event ; + Widget traversal_destination ; + XmTraversalDirection direction ; + } XmTraverseObscuredCallbackStruct ; + +typedef unsigned char XmNavigationType; + + +/*********************************************************************** + * + * SimpleMenu declarations and definitions. + * + ***********************************************************************/ + +typedef unsigned char XmButtonType; +typedef XmButtonType * XmButtonTypeTable; +typedef KeySym * XmKeySymTable; +typedef XmStringCharSet * XmStringCharSetTable; + +enum{ XmPUSHBUTTON = 1, XmTOGGLEBUTTON, + XmRADIOBUTTON, XmCASCADEBUTTON, + XmSEPARATOR, XmDOUBLE_SEPARATOR, + XmTITLE + } ; +#define XmCHECKBUTTON XmTOGGLEBUTTON + + +/*********************************************************************** + * + * BitmapConversionModel + * + ***********************************************************************/ + +enum{ XmMATCH_DEPTH, XmDYNAMIC_DEPTH } ; + + +/************************************************************************ + * PrintShell defines + ************************************************************************/ + +enum { XmPDM_NOTIFY_FAIL, XmPDM_NOTIFY_SUCCESS } ; + + +/* This one cannot be put at the beginning because it needs + XmStringTable */ +#include + + +/******** BaseClass.c ********/ +typedef XtPointer (*XmResourceBaseProc)( Widget, XtPointer) ; + +typedef struct _XmSecondaryResourceDataRec{ + XmResourceBaseProc base_proc; + XtPointer client_data; + String name; + String res_class; + XtResourceList resources; + Cardinal num_resources; +}XmSecondaryResourceDataRec, *XmSecondaryResourceData; + +/******** Public Function Declarations for BaseClass.c ********/ + +extern Cardinal XmGetSecondaryResourceData( + WidgetClass w_class, + XmSecondaryResourceData **secondaryDataRtn) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for ImageCache.c ********/ + +extern Boolean XmInstallImage( + XImage *image, + char *image_name) ; +extern Boolean XmUninstallImage( + XImage *image) ; +extern Pixmap XmGetPixmap( + Screen *screen, + char *image_name, + Pixel foreground, + Pixel background) ; +extern Pixmap XmGetPixmapByDepth( + Screen *screen, + char *image_name, + Pixel foreground, + Pixel background, + int depth) ; +extern Boolean XmDestroyPixmap( + Screen *screen, + Pixmap pixmap) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Resolve.c ********/ +/*-- XmeResolvePartOffsets is defined in XmP.h. + These also belong there but for source compatibility, we let + them here --- */ + +typedef long XmOffset; +typedef XmOffset *XmOffsetPtr; + + + +extern void XmResolveAllPartOffsets( + WidgetClass w_class, + XmOffsetPtr *offset, + XmOffsetPtr *constraint_offset) ; +extern void XmResolvePartOffsets( + WidgetClass w_class, + XmOffsetPtr *offset) ; + +/******** End Public Function Declarations ********/ + + + +/******** Public Function Declarations for Xm.c ********/ + + +extern void XmUpdateDisplay( + Widget w) ; +extern Widget XmObjectAtPoint( + Widget wid, + Position x, + Position y ) ; + +extern Boolean XmWidgetGetBaselines( + Widget wid, + Dimension **baselines, + int *line_count); +extern Boolean XmWidgetGetDisplayRect( + Widget wid, + XRectangle *displayrect); + +/******** End Public Function Declarations ********/ + + + +/******** Primitive.c ********/ + +/******** Public Function Declarations for Primitive.c ********/ + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for ResConvert.c ********/ + +extern void XmCvtStringToUnitType( + XrmValuePtr args, + Cardinal *num_args, + XrmValue *from_val, + XrmValue *to_val) ; +extern char * XmRegisterSegmentEncoding( + char *fontlist_tag, + char *ct_encoding) ; +extern char * XmMapSegmentEncoding( + char *fontlist_tag) ; +extern XmString XmCvtCTToXmString( + char *text) ; +extern Boolean XmCvtTextToXmString( + Display *display, + XrmValuePtr args, + Cardinal *num_args, + XrmValue *from_val, + XrmValue *to_val, + XtPointer *converter_data) ; +extern char * XmCvtXmStringToCT( + XmString string) ; +extern Boolean XmCvtXmStringToText( + Display *display, + XrmValuePtr args, + Cardinal *num_args, + XrmValue *from_val, + XrmValue *to_val, + XtPointer *converter_data) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for ResInd.c ********/ + +extern int XmConvertStringToUnits( + Screen *screen, + String spec, + int orientation, + int to_type, + XtEnum *parse_error); +extern int XmConvertUnits( + Widget widget, + int dimension, + register int from_type, + register int from_val, + register int to_type) ; +extern int XmCvtToHorizontalPixels( + Screen *screen, + register int from_val, + register int from_type) ; +extern int XmCvtToVerticalPixels( + Screen *screen, + register int from_val, + register int from_type) ; +extern int XmCvtFromHorizontalPixels( + Screen *screen, + register int from_val, + register int to_type) ; +extern int XmCvtFromVerticalPixels( + Screen *screen, + register int from_val, + register int to_type) ; +extern void XmSetFontUnits( + Display *display, + int h_value, + int v_value) ; +extern void XmSetFontUnit( + Display *display, + int value) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for MenuUtil.c ********/ + +extern void XmSetMenuCursor( + Display *display, + Cursor cursorId) ; +extern Cursor XmGetMenuCursor( + Display *display) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Simple.c ********/ + +extern Widget XmCreateSimpleMenuBar( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimplePopupMenu( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimplePulldownMenu( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimpleOptionMenu( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimpleRadioBox( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimpleCheckBox( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for VaSimple.c ********/ +extern Widget XmVaCreateSimpleMenuBar( + Widget parent, + String name, + ...) ; +extern Widget XmVaCreateSimplePopupMenu( + Widget parent, + String name, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimplePulldownMenu( + Widget parent, + String name, + int post_from_button, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimpleOptionMenu( + Widget parent, + String name, + XmString option_label, + KeySym option_mnemonic, + int button_set, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimpleRadioBox( + Widget parent, + String name, + int button_set, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimpleCheckBox( + Widget parent, + String name, + XtCallbackProc callback, + ...) ; +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for TrackLoc.c ********/ + +extern Widget XmTrackingEvent( + Widget widget, + Cursor cursor, +#if NeedWidePrototypes + int confineTo, +#else + Boolean confineTo, +#endif /* NeedWidePrototypes */ + XEvent *pev) ; +extern Widget XmTrackingLocate( + Widget widget, + Cursor cursor, +#if NeedWidePrototypes + int confineTo) ; +#else + Boolean confineTo) ; +#endif /* NeedWidePrototypes */ + +/******** End Public Function Declarations ********/ + +/******** Visual.c ********/ +typedef void (*XmColorProc) (XColor *bg_color, XColor *fg_color, + XColor *sel_color, XColor *ts_color, XColor *bs_color); + +/******** Public Function Declarations for Visual.c ********/ + +extern XmColorProc XmSetColorCalculation( + XmColorProc proc) ; +extern XmColorProc XmGetColorCalculation( void ) ; +extern void XmGetColors( + Screen *screen, + Colormap color_map, + Pixel background, + Pixel *foreground_ret, + Pixel *top_shadow_ret, + Pixel *bottom_shadow_ret, + Pixel *select_ret) ; +extern void XmChangeColor( + Widget widget, + Pixel background) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for XmString.c ********/ + +extern XmString XmStringCreate( + char *text, + XmStringCharSet charset) ; +extern XmString XmStringCreateSimple( + char *text) ; +extern XmString XmStringCreateLocalized( + String text) ; +extern XmString XmStringDirectionCreate( +#if NeedWidePrototypes + int direction) ; +#else + XmStringDirection direction) ; +#endif /* NeedWidePrototypes */ +extern XmString XmStringSeparatorCreate( void ) ; +extern XmString XmStringSegmentCreate( + char *text, + XmStringCharSet charset, +#if NeedWidePrototypes + int direction, + int separator) ; +#else + XmStringDirection direction, + Boolean separator) ; +#endif /* NeedWidePrototypes */ +extern XmString XmStringLtoRCreate( + char *text, + XmStringCharSet charset) ; +extern XmString XmStringCreateLtoR( + char *text, + XmStringCharSet charset) ; +extern Boolean XmStringInitContext( + XmStringContext *context, + XmString string) ; +extern void XmStringFreeContext( + XmStringContext context) ; +extern XmStringComponentType XmStringGetNextComponent( + XmStringContext context, + char **text, + XmStringCharSet *charset, + XmStringDirection *direction, + XmStringComponentType *unknown_tag, + unsigned short *unknown_length, + unsigned char **unknown_value) ; +extern XmStringComponentType XmStringPeekNextComponent( + XmStringContext context) ; +extern Boolean XmStringGetNextSegment( + XmStringContext context, + char **text, + XmStringCharSet *charset, + XmStringDirection *direction, + Boolean *separator) ; +extern Boolean XmStringGetLtoR( + XmString string, + XmStringCharSet charset, + char **text) ; +extern XmFontListEntry XmFontListEntryCreate( + char *tag, + XmFontType type, + XtPointer font) ; +extern XmFontListEntry XmFontListEntryCreate_r( + char *tag, + XmFontType type, + XtPointer font, + Widget wid) ; +extern void XmFontListEntryFree( + XmFontListEntry *entry) ; +extern XtPointer XmFontListEntryGetFont( + XmFontListEntry entry, + XmFontType *typeReturn) ; +extern char * XmFontListEntryGetTag( + XmFontListEntry entry) ; +extern XmFontList XmFontListAppendEntry( + XmFontList old, + XmFontListEntry entry) ; +extern XmFontListEntry XmFontListNextEntry( + XmFontContext context) ; +extern XmFontList XmFontListRemoveEntry( + XmFontList old, + XmFontListEntry entry) ; +extern XmFontListEntry XmFontListEntryLoad( + Display *display, + char *fontName, + XmFontType type, + char *tag) ; +extern XmFontList XmFontListCreate( + XFontStruct *font, + XmStringCharSet charset) ; +extern XmFontList XmFontListCreate_r( + XFontStruct *font, + XmStringCharSet charset, + Widget wid) ; +extern XmFontList XmStringCreateFontList( + XFontStruct *font, + XmStringCharSet charset) ; +extern XmFontList XmStringCreateFontList_r( + XFontStruct *font, + XmStringCharSet charset, + Widget wid) ; +extern void XmFontListFree( + XmFontList fontlist) ; +extern XmFontList XmFontListAdd( + XmFontList old, + XFontStruct *font, + XmStringCharSet charset) ; +extern XmFontList XmFontListCopy( + XmFontList fontlist) ; +extern Boolean XmFontListInitFontContext( + XmFontContext *context, + XmFontList fontlist) ; +extern Boolean XmFontListGetNextFont( + XmFontContext context, + XmStringCharSet *charset, + XFontStruct **font) ; +extern void XmFontListFreeFontContext( + XmFontContext context) ; +extern XmString XmStringConcat( + XmString a, + XmString b) ; +extern XmString XmStringConcatAndFree( + XmString a, + XmString b) ; +extern XmString XmStringNConcat( + XmString first, + XmString second, + int n) ; +extern XmString XmStringCopy( + XmString string) ; +extern XmString XmStringNCopy( + XmString str, + int n) ; +extern Boolean XmStringByteCompare( + XmString a1, + XmString b1) ; +extern Boolean XmStringCompare( + XmString a, + XmString b) ; +extern int XmStringLength( + XmString string) ; +extern Boolean XmStringEmpty( + XmString string) ; +extern Boolean XmStringIsVoid(XmString string); +extern Boolean XmStringHasSubstring( + XmString string, + XmString substring) ; +extern void XmStringFree( + XmString string) ; +extern Dimension XmStringBaseline( + XmFontList fontlist, + XmString string) ; +extern Dimension XmStringWidth( + XmFontList fontlist, + XmString string) ; +extern Dimension XmStringHeight( + XmFontList fontlist, + XmString string) ; +extern void XmStringExtent( + XmFontList fontlist, + XmString string, + Dimension *width, + Dimension *height) ; +extern int XmStringLineCount( + XmString string) ; +extern void XmStringDraw( + Display *d, + Window w, + XmFontList fontlist, + XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip) ; +extern void XmStringDrawImage( + Display *d, + Window w, + XmFontList fontlist, + XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip) ; +extern void XmStringDrawUnderline( + Display *d, + Window w, + XmFontList fntlst, + XmString str, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip, + XmString under) ; +extern unsigned int XmCvtXmStringToByteStream( + XmString string, + unsigned char **prop_return); +extern XmString XmCvtByteStreamToXmString( + unsigned char *property); +extern unsigned int XmStringByteStreamLength(unsigned char *string); +extern XmStringComponentType XmStringPeekNextTriple(XmStringContext context); +extern XmStringComponentType XmStringGetNextTriple(XmStringContext context, + unsigned int *length, + XtPointer *value); +extern XmString XmStringComponentCreate(XmStringComponentType tag, + unsigned int length, + XtPointer value); +extern XtPointer XmStringUnparse(XmString string, + XmStringTag tag, + XmTextType tag_type, + XmTextType output_type, + XmParseTable parse_table, + Cardinal parse_count, + XmParseModel parse_model); +extern XmString XmStringParseText(XtPointer text, + XtPointer *text_end, + XmStringTag tag, + XmTextType type, + XmParseTable parse_table, + Cardinal parse_count, + XtPointer call_data); +extern Cardinal XmStringToXmStringTable(XmString string, + XmString break_comp, + XmStringTable *table); +extern XmString XmStringTableToXmString(XmStringTable table, + Cardinal count, + XmString break_component); +extern XtPointer *XmStringTableUnparse(XmStringTable table, + Cardinal count, + XmStringTag tag, + XmTextType tag_type, + XmTextType output_type, + XmParseTable parse, + Cardinal parse_count, + XmParseModel parse_model); +extern XmStringTable XmStringTableParseStringArray(XtPointer *strings, + Cardinal count, + XmStringTag tag, + XmTextType type, + XmParseTable parse, + Cardinal parse_count, + XtPointer call_data); + +extern XmStringDirection XmDirectionToStringDirection(XmDirection dir); +extern XmDirection XmStringDirectionToDirection(XmStringDirection dir); + +extern XmString XmStringGenerate(XtPointer text, + XmStringTag tag, + XmTextType type, + XmStringTag rendition); +extern XmString XmStringPutRendition(XmString string, + XmStringTag rendition); + +extern XmParseMapping XmParseMappingCreate(ArgList arg_list, + Cardinal arg_count); +extern void XmParseMappingSetValues(XmParseMapping parse_mapping, + ArgList arg_list, + Cardinal arg_count); +extern void XmParseMappingGetValues(XmParseMapping parse_mapping, + ArgList arg_list, + Cardinal arg_count); +extern void XmParseMappingFree(XmParseMapping parse_mapping); +extern void XmParseTableFree(XmParseTable parse_table, + Cardinal parse_count); + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for XmTabList.c ********/ + +extern XmTabList + XmStringTableProposeTablist(XmStringTable strings, + Cardinal num_strings, + Widget widget, + float pad_value, + XmOffsetModel offset_model); +extern void XmTabSetValue(XmTab xmtab, float value); +extern float + XmTabGetValues(XmTab xmtab, + unsigned char *units, + XmOffsetModel *offset, + unsigned char *alignment, + char **decimal); +extern void XmTabFree(XmTab xmtab); +extern XmTab XmTabCreate(float value, + unsigned char units, + XmOffsetModel offset_model, + unsigned char alignment, + char *decimal); +extern XmTabList + XmTabListRemoveTabs(XmTabList oldlist, + Cardinal *position_list, + Cardinal position_count); +extern XmTabList + XmTabListReplacePositions(XmTabList oldlist, + Cardinal *position_list, + XmTab *tabs, + Cardinal tab_count); +extern XmTab XmTabListGetTab(XmTabList tablist, Cardinal position); +extern Cardinal XmTabListTabCount(XmTabList tablist); +extern XmTabList XmTabListCopy(XmTabList tablist, int offset, Cardinal count); +extern void XmTabListFree(XmTabList tablist); +extern XmTabList XmTabListInsertTabs(XmTabList oldlist, + XmTab *tabs, + Cardinal tab_count, + int position); +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for XmRenderTable.c ********/ + +extern XmRenderTable XmRenderTableCvtFromProp(Widget, char *prop, unsigned int len); +extern unsigned int XmRenderTableCvtToProp(Widget, XmRenderTable table, char **prop_return); +extern void XmRenditionUpdate(XmRendition rendition, ArgList arglist, Cardinal argcount); +extern void XmRenditionRetrieve(XmRendition rendition, + ArgList arglist, + Cardinal argcount); +extern void XmRenditionFree(XmRendition rendition); +extern XmRendition XmRenditionCreate(Widget widget, + XmStringTag tag, + ArgList arglist, + Cardinal argcount); +extern XmRendition + *XmRenderTableGetRenditions(XmRenderTable table, + XmStringTag *tags, + Cardinal tag_count); +extern XmRendition XmRenderTableGetRendition(XmRenderTable table, + XmStringTag tag); +extern int XmRenderTableGetTags(XmRenderTable table, + XmStringTag **tag_list); +extern void XmRenderTableFree(XmRenderTable table); +extern XmRenderTable XmRenderTableCopy(XmRenderTable table, + XmStringTag *tags, + int tag_count); +extern XmRenderTable + XmRenderTableRemoveRenditions(XmRenderTable oldtable, + XmStringTag *tags, + int tag_count); +extern XmRenderTable + XmRenderTableAddRenditions(XmRenderTable oldtable, + XmRendition *renditions, + Cardinal rendition_count, + XmMergeMode merge_mode); + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Dest.c ********/ + +extern Widget XmGetDestination( + Display *display) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Traversal.c ********/ + +extern Boolean XmIsTraversable( + Widget wid) ; +extern XmVisibility XmGetVisibility( + Widget wid) ; +extern Widget XmGetTabGroup( + Widget wid) ; +extern Widget XmGetFocusWidget( + Widget wid) ; +extern Boolean XmProcessTraversal( + Widget w, + XmTraversalDirection dir) ; +extern void XmAddTabGroup( + Widget tabGroup) ; +extern void XmRemoveTabGroup( + Widget w) ; + +/******** End Public Function Declarations ********/ + +/******** ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +/* + * The following includes are for source compatibility. They might be + * removed at some future time. + */ +#include +#include + +#define XmINDICATOR_3D_BOX 0x01 +#define XmINDICATOR_FLAT_BOX 0x02 +#define XmINDICATOR_CHECK_GLYPH 0x10 +#define XmINDICATOR_CROSS_GLYPH 0x20 + +enum { + XmINDICATOR_NONE = 0, + XmINDICATOR_FILL = 1, /* Treated as _BOX or _CHECK_BOX */ + XmINDICATOR_BOX = 255, /* Treated as XmINDICATOR_3D_BOX */ + XmINDICATOR_CHECK = XmINDICATOR_CHECK_GLYPH, + XmINDICATOR_CHECK_BOX = XmINDICATOR_CHECK_GLYPH + XmINDICATOR_3D_BOX, + XmINDICATOR_CROSS = XmINDICATOR_CROSS_GLYPH, + XmINDICATOR_CROSS_BOX = XmINDICATOR_CROSS_GLYPH + XmINDICATOR_3D_BOX +}; + +enum { XmUNSET, XmSET, XmINDETERMINATE }; +enum { XmTOGGLE_BOOLEAN, XmTOGGLE_INDETERMINATE }; +typedef unsigned char XmToggleButtonState; + +/* Shared text enum. */ +typedef enum { EditDone, EditError, EditReject } XmTextStatus; + +/* XmDisplay.XmNdefaultButtonEmphasis enum */ +enum { XmEXTERNAL_HIGHLIGHT, XmINTERNAL_HIGHLIGHT }; + +/* new for XmString */ +#define _MOTIF_DEFAULT_LOCALE "_MOTIF_DEFAULT_LOCALE" + +enum { XmPATH_MODE_FULL, XmPATH_MODE_RELATIVE }; +enum { XmFILTER_NONE, XmFILTER_HIDDEN_FILES} ; + +#endif /* _Xm_h */ + /* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/XmAll.h b/libXm/linux86/Xm/XmAll.h new file mode 100644 index 0000000..ed4d7e8 --- /dev/null +++ b/libXm/linux86/Xm/XmAll.h @@ -0,0 +1,113 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: XmAll.h /main/12 1996/10/11 11:17:39 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmAll_h +#define _XmAll_h + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif /* _XmAll_h */ + /* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/XmIm.h b/libXm/linux86/Xm/XmIm.h new file mode 100644 index 0000000..a224e05 --- /dev/null +++ b/libXm/linux86/Xm/XmIm.h @@ -0,0 +1,111 @@ +/* $XConsortium: XmIm.h /main/7 1996/05/21 12:13:36 pascale $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIm_h +#define _XmIm_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Public Function Declarations ********/ + +extern void XmImRegister( + Widget w, + unsigned int reserved) ; +extern void XmImUnregister( + Widget w) ; +extern void XmImSetFocusValues( + Widget w, + ArgList args, + Cardinal num_args) ; +extern void XmImSetValues( + Widget w, + ArgList args, + Cardinal num_args) ; +extern void XmImUnsetFocus( + Widget w) ; +extern XIM XmImGetXIM( + Widget w) ; +extern void XmImCloseXIM( + Widget w) ; + +extern int XmImMbLookupString( + Widget w, + XKeyPressedEvent *event, + char *buf, + int nbytes, + KeySym *keysym, + int *status) ; +extern void XmImVaSetFocusValues( + Widget w, + ...) ; +extern void XmImVaSetValues( + Widget w, + ...) ; +extern XIC XmImGetXIC( + Widget w, +#if NeedWidePrototypes + unsigned int input_policy, +#else + XmInputPolicy input_policy, +#endif /*NeedWidePrototypes*/ + ArgList args, + Cardinal num_args) ; +extern XIC XmImSetXIC( + Widget w, + XIC input_context) ; +extern void XmImFreeXIC( + Widget w, + XIC input_context) ; + +extern void XmImMbResetIC( + Widget w, + char **mb); + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIm_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/XmP.h b/libXm/linux86/Xm/XmP.h new file mode 100644 index 0000000..63bba1e --- /dev/null +++ b/libXm/linux86/Xm/XmP.h @@ -0,0 +1,1411 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: XmP.h /main/23 1997/09/15 14:22:29 cshi $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +/************************************<+>************************************* + **************************************************************************** + ** + ** File: XmP.h + ** + ** Description: This include file contains the class and instance record + ** definitions for all meta classes. It also contains externs + ** for internally shared functions and defines for internally + ** shared values. + ** + **************************************************************************** + ************************************<+>*************************************/ +#ifndef _XmP_h +#define _XmP_h + +#include +#include +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/*************************************************************************** + * + * Macros replacing toolkit macros so that gadgets are handled properly. + * + ***************************************************************************/ + +/* Temporary hack until we can clean up our own code. ??? */ +#ifndef NO_XM_1_2_XTMACROS +#define XM_1_2_XTMACROS 1 +#endif + +#ifdef XM_1_2_XTMACROS + +/* XtClass is a macro in IntrinsicP.h, but it does no casting + so removing this one would certainly generate warnings everywhere, + we can keep it */ +#ifdef XtClass +#undef XtClass +#endif +#define XtClass(widget) (((Object)(widget))->object.widget_class) + + +/* Exist in IntrinsicP.h, but does no casting, so removing this + one will probably generate a lot of warnings */ +#ifdef XtParent +#undef XtParent +#endif +#define XtParent(widget) (((Object)(widget))->object.parent) + + +/* The following routines exist in Xt, but do not accept Gadgets. */ + +#ifdef XtDisplay +#undef XtDisplay +#endif +#define XtDisplay(widget) XtDisplayOfObject((Widget) widget) + +#ifdef XtScreen +#undef XtScreen +#endif +#define XtScreen(widget) XtScreenOfObject((Widget) widget) + +#ifdef XtWindow +#undef XtWindow +#endif +#define XtWindow(widget) XtWindowOfObject((Widget) widget) + + +/* The following macros are not provided by Xt */ +#define XtX(w) ((w)->core.x) +#define XtY(w) ((w)->core.y) +#define XtWidth(w) ((w)->core.width) +#define XtHeight(w) ((w)->core.height) +#define XtBorderWidth(w) ((w)->core.border_width) +#define XtBackground(w) ((w)->core.background_pixel) +#define XtCoreProc(w,proc) ((w)->core.widget_class->core_class.proc) + +#endif /* XM_1_2_XTMACROS */ + + +/*********************************************************************** + * + * Miscellaneous SemiPrivate Defines + * + ***********************************************************************/ + +/* new for the initialized gadget checking */ +#define XmNdotCache ".cache" +#define XmCDotCache ".Cache" + +#define XmDELAYED_PIXMAP (XmUNSPECIFIED_PIXMAP - 1) + +#define XmUNSPECIFIED (~0) +#define XmUNSPECIFIED_COUNT (~0) + + +/* Used by conversion routine in ResConvert.c, RepType.c, IconG.c, etc */ + +#define _XM_CONVERTER_DONE( to_rtn, type, value, failure ) \ + { \ + static type buf ; \ + \ + if (to_rtn->addr) \ + { \ + if (to_rtn->size < sizeof(type)) \ + { \ + failure \ + to_rtn->size = sizeof(type); \ + return FALSE; \ + } \ + else \ + { \ + *((type *) (to_rtn->addr)) = value; \ + } \ + } \ + else \ + { \ + buf = value; \ + to_rtn->addr = (XPointer) &buf; \ + } \ + to_rtn->size = sizeof(type); \ + return TRUE; \ + } + + + +/* defines needed for 3D visual enhancement of defaultButtonshadow and + * implementation of ToggleButton Indicatorsize. **/ + +#define Xm3D_ENHANCE_PIXEL 2 +#define XmINDICATOR_SHADOW_THICKNESS 2 + +#define XmINVALID_DIMENSION 0xFFFF + +/*********************************************************************** + * + * Const stuff + * + ***********************************************************************/ + +#ifndef XmConst +#if defined(__STDC__) || !defined( NO_CONST ) +#define XmConst const +#else +#define XmConst +#endif /* __STDC__ */ +#endif /* XmConst */ + + +/*********************************************************************** + * + * Status for menus + * + ***********************************************************************/ + +/* Defines used for menu/button communication */ +enum{ XmMENU_POPDOWN, XmMENU_PROCESS_TREE, + XmMENU_TRAVERSAL, XmMENU_SHELL_POPDOWN, + XmMENU_CALLBACK, XmMENU_BUTTON, + XmMENU_CASCADING, XmMENU_SUBMENU, + XmMENU_ARM, XmMENU_DISARM, + XmMENU_BAR_CLEANUP, XmMENU_STATUS, + XmMENU_MEMWIDGET_UPDATE, XmMENU_BUTTON_POPDOWN, + XmMENU_RESTORE_EXCLUDED_TEAROFF_TO_TOPLEVEL_SHELL, + XmMENU_RESTORE_TEAROFF_TO_TOPLEVEL_SHELL, + XmMENU_RESTORE_TEAROFF_TO_MENUSHELL, + XmMENU_GET_LAST_SELECT_TOPLEVEL, + XmMENU_TEAR_OFF_ARM + } ; + + + +#define XmMENU_TORN_BIT (1 << 0) +#define XmMENU_TEAR_OFF_SHELL_DESCENDANT_BIT (1 << 1) +#define XmMENU_POPUP_POSTED_BIT (1 << 2) +#define XmMENU_IN_DRAG_MODE_BIT (1 << 3) + +#define XmIsTorn(mask) \ + (mask & XmMENU_TORN_BIT) +#define XmIsTearOffShellDescendant(mask) \ + (mask & XmMENU_TEAR_OFF_SHELL_DESCENDANT_BIT) +#define XmPopupPosted(mask) \ + (mask & XmMENU_POPUP_POSTED_BIT) +#define XmIsInDragMode(mask) \ + (mask & XmMENU_IN_DRAG_MODE_BIT) + +typedef void (*XmMenuProc)( int, Widget, ...) ; + +/*********************************************************************** + * + * Simple Menu Structure + * + ***********************************************************************/ + +typedef struct _XmSimpleMenuRec { + int count; + int post_from_button; + XtCallbackProc callback; + XmStringTable label_string; + String *accelerator; + XmStringTable accelerator_text; + XmKeySymTable mnemonic; + XmStringCharSetTable mnemonic_charset; + XmButtonTypeTable button_type; + int button_set; + XmString option_label; + KeySym option_mnemonic; +} XmSimpleMenuRec, * XmSimpleMenu; + + +/* For MapEvent: _XmMatchBtnEvent */ +#define XmIGNORE_EVENTTYPE -1 + +/* Default minimum Toggle indicator dimension */ +#define XmDEFAULT_INDICATOR_DIM 9 + + + + + +/************************************************************************ + * + * SyntheticP.h + * + ************************************************************************/ + +typedef enum{ XmSYNTHETIC_NONE, XmSYNTHETIC_LOAD } XmImportOperator ; + +typedef void (*XmExportProc)( Widget, int, XtArgVal *) ; +typedef XmImportOperator (*XmImportProc)( Widget, int, XtArgVal *) ; + +typedef struct _XmSyntheticResource +{ + String resource_name; + Cardinal resource_size; + Cardinal resource_offset; + XmExportProc export_proc; + XmImportProc import_proc; +} XmSyntheticResource; + + + +/*********************************************************************** + * + * ParProcP.h + * + ***********************************************************************/ + + +typedef struct +{ + int process_type ; /* Common to all parent process records. */ + } XmParentProcessAnyRec ; + +typedef struct +{ + int process_type ; /* Common to all parent process records. */ + XEvent * event ; + int action ; + String * params ; + Cardinal * num_params ; +} XmParentInputActionRec ; + +typedef union +{ + XmParentProcessAnyRec any ; + XmParentInputActionRec input_action ; +} XmParentProcessDataRec, * XmParentProcessData ; + +enum{ XmPARENT_PROCESS_ANY, XmINPUT_ACTION + } ; +enum{ XmPARENT_ACTIVATE, XmPARENT_CANCEL + } ; +#define XmRETURN XmPARENT_ACTIVATE /* For Motif 1.1 BC. */ +#define XmCANCEL XmPARENT_CANCEL /* For Motif 1.1 BC. */ + + +/*********************************************************************** + * + * BaselineP.h + * + ***********************************************************************/ + +enum{ XmBASELINE_GET, XmBASELINE_SET + } ; + +typedef struct _XmBaselineMargins +{ + unsigned char get_or_set; + Dimension margin_top; + Dimension margin_bottom; + Dimension shadow; + Dimension highlight; + Dimension text_height; + Dimension margin_height; +} XmBaselineMargins; + + +typedef enum{ XmFOCUS_IN, XmFOCUS_OUT, XmENTER, XmLEAVE } XmFocusChange ; + +typedef enum{ + XmNOT_NAVIGABLE, XmCONTROL_NAVIGABLE, + XmTAB_NAVIGABLE, XmDESCENDANTS_NAVIGABLE, + XmDESCENDANTS_TAB_NAVIGABLE + } XmNavigability ; + +/*********************************************************************** + * + * Various proc types + * + ***********************************************************************/ + +#define XmVoidProc XtProc + + +typedef Boolean (*XmParentProcessProc)( Widget, XmParentProcessData) ; +typedef void (*XmWidgetDispatchProc)( Widget, XEvent *, Mask) ; +typedef void (*XmGrabShellPopupProc)( Widget, Widget, XEvent *) ; +typedef void (*XmMenuPopupProc)( Widget, Widget, XEvent *) ; +typedef void (*XmMenuTraversalProc)( Widget, Widget, XmTraversalDirection) ; +typedef void (*XmResizeFlagProc)( + Widget, +#if NeedWidePrototypes + int) ; +#else + Boolean) ; +#endif /* NeedWidePrototypes */ +typedef void (*XmRealizeOutProc)( Widget, Mask *, XSetWindowAttributes *) ; +typedef Boolean (*XmVisualChangeProc)( Widget, Widget, Widget) ; +typedef void (*XmTraversalProc)( Widget, XtPointer, XtPointer, int) ; +typedef void (*XmFocusMovedProc)( Widget, XtPointer, XtPointer) ; +typedef void (*XmCacheCopyProc)( XtPointer, XtPointer, size_t) ; +typedef void (*XmGadgetCacheProc)( XtPointer) ; +typedef int (*XmCacheCompareProc)( XtPointer, XtPointer) ; +typedef Boolean (*XmWidgetBaselineProc)(Widget, Dimension **, int *); +typedef Boolean (*XmWidgetDisplayRectProc)(Widget, XRectangle *); +typedef void (*XmWidgetMarginsProc)(Widget, XmBaselineMargins *); +typedef XmNavigability (*XmWidgetNavigableProc)( Widget) ; +typedef void (*XmFocusChangeProc)(Widget, XmFocusChange); +typedef Boolean (*XmSpatialPlacementProc)(Widget, Widget, unsigned char); +typedef Boolean (*XmSpatialRemoveProc)(Widget, Widget); +typedef Boolean (*XmSpatialTestFitProc)(Widget, Widget, Position, Position); + + +/**************** + * + * Data structure for building a real translation table out of a + * virtual string. + * + ****************/ + +typedef struct { + Modifiers mod; + char *key; + char *action; +} _XmBuildVirtualKeyStruct; + +typedef struct _XmKeyBindingRec +{ + KeySym keysym; + Modifiers modifiers; +} XmKeyBindingRec, *XmKeyBinding; + + +/*********************************************************************** + * + * Types shared by text widgets + * + ***********************************************************************/ + +typedef enum { XmsdLeft, XmsdRight } XmTextScanDirection; + + +/* + * This struct is for support of Insert Selection targets. + */ +typedef struct { + Atom selection; + Atom target; +} _XmTextInsertPair; + +typedef struct { + XmTextPosition position; /* Starting position. */ + XmHighlightMode mode; /* Highlighting mode for this position. */ +} _XmHighlightRec; + +typedef struct { + Cardinal number; /* Number of different highlight areas. */ + Cardinal maximum; /* Number we've allocated space for. */ + _XmHighlightRec *list; /* Pointer to array of highlight data. */ +} _XmHighlightData; + +typedef enum { XmDEST_SELECT, XmPRIM_SELECT } XmSelectType; + +typedef struct { + Boolean done_status; /* completion status of insert selection */ + Boolean success_status; /* success status of insert selection */ + XmSelectType select_type; /* insert selection type */ + XSelectionRequestEvent *event; /* event that initiated the + insert selection */ +} _XmInsertSelect; + +typedef struct { + XEvent *event; + String *params; + Cardinal *num_params; +} _XmTextActionRec; + +typedef struct { + Widget widget; + XmTextPosition insert_pos; + int num_chars; + Time timestamp; + Boolean move; +} _XmTextDropTransferRec; + +typedef struct { + XmTextPosition position; + Atom target; + Time time; + int num_chars; + int ref_count; +} _XmTextPrimSelect; + +typedef struct { + Screen *screen; + XContext context; + unsigned char type; +} XmTextContextDataRec, *XmTextContextData; + +enum {_XM_IS_DEST_CTX, _XM_IS_GC_DATA_CTX, _XM_IS_PIXMAP_CTX}; + +#define XmTEXT_DRAG_ICON_WIDTH 64 +#define XmTEXT_DRAG_ICON_HEIGHT 64 +#define XmTEXT_DRAG_ICON_X_HOT 10 +#define XmTEXT_DRAG_ICON_Y_HOT 4 + + +/*********************************************************************** + * + * GeoUtilsP.h + * + ***********************************************************************/ + +/* Defines used by geometry manager utilities */ + +enum{ XmGET_ACTUAL_SIZE = 1, XmGET_PREFERRED_SIZE, + XmGEO_PRE_SET, XmGEO_POST_SET + } ; + +/* Defaults for Geometry Utility defines are always 0. */ +enum{ XmGEO_EXPAND, XmGEO_CENTER, + XmGEO_PACK + } ; +enum{ XmGEO_PROPORTIONAL, XmGEO_AVERAGING, + XmGEO_WRAP + } ; +enum{ XmGEO_ROW_MAJOR, XmGEO_COLUMN_MAJOR + } ; +/* XmGEO_COLUMN_MAJOR is not yet supported. */ + + +typedef struct _XmGeoMatrixRec *XmGeoMatrix ; +typedef union _XmGeoMajorLayoutRec *XmGeoMajorLayout ; +typedef struct _XmKidGeometryRec +{ + Widget kid; /* ptr to kid */ + XtWidgetGeometry box; /* kid geo box */ +} XmKidGeometryRec, *XmKidGeometry; + +typedef void (*XmGeoArrangeProc)( XmGeoMatrix, +#if NeedWidePrototypes + int, int, +#else + Position, Position, +#endif /* NeedWidePrototypes */ + Dimension *, Dimension *) ; +typedef Boolean (*XmGeoExceptProc)( XmGeoMatrix ) ; +typedef void (*XmGeoExtDestructorProc)( XtPointer ) ; +typedef void (*XmGeoSegmentFixUpProc)( XmGeoMatrix, int, XmGeoMajorLayout, + XmKidGeometry) ; + +typedef struct +{ Boolean end ; /* Flag to mark end of rows. */ + XmGeoSegmentFixUpProc fix_up ;/* Used for non-ordinary layouts. */ + Dimension even_width ; /* If non-zero, set all boxes to same width.*/ + Dimension even_height ;/* If non-zero, set all boxes to same height*/ + Dimension min_height ; /* Minimum height, if stretch_height TRUE. */ + Boolean stretch_height ;/* Stretch height to fill vertically. */ + Boolean uniform_border ;/* Enforce on all kids this row, dflt F. */ + Dimension border ; /* Value to use if uniform_border set. */ + unsigned char fill_mode ; /* Possible values: XmGEO_PACK, XmGEO_CENTER,*/ + /* or XmGEO_EXPAND (default). */ + unsigned char fit_mode ; /* Method for fitting boxes into space, */ + /* XmGEO_PROPORTIONAL (dflt), XmGEO_AVERAGING, or XmGEO_WRAP.*/ + Boolean sticky_end ; /* Last box in row sticks to edge, dflt F. */ + Dimension space_above ; /* Between-line spacing, default 0. */ + Dimension space_end ; /* End spacing (XmGEO_CENTER), default 0. */ + Dimension space_between ; /* Internal spacing, default 0. */ + Dimension max_box_height ;/* Set during arrange routine. */ + Dimension boxes_width ; /* Set during arrange routine. */ + Dimension fill_width ; /* Set during arrange routine. */ + Dimension box_count ; /* Set during arrange routine. */ + } XmGeoRowLayoutRec, *XmGeoRowLayout ; + +typedef struct +{ Boolean end ; /* Flag to mark end of columns. */ + XmGeoSegmentFixUpProc fix_up ;/* Used for non-ordinary layouts. */ + Dimension even_height ;/* If non-zero, set all boxes to same height*/ + Dimension even_width ; /* If non-zero, set all boxes to same width.*/ + Dimension min_width ; /* Minimum width, if stretch_width TRUE. */ + Boolean stretch_width ;/* Stretch width to fill horizontally. */ + Boolean uniform_border ;/* Enforce on all kids this row, dflt F. */ + Dimension border ; /* Value to use if uniform_border set. */ + unsigned char fill_mode ; /* Possible values: XmGEO_PACK, XmGEO_CENTER,*/ + /* or XmGEO_EXPAND (default). */ + unsigned char fit_mode ; /* Method for fitting boxes into space, */ + /* XmGEO_PROPORTIONAL (dflt), XmGEO_AVERAGING, or XmGEO_WRAP.*/ + Boolean sticky_end ; /* Last box in row sticks to edge, dflt F. */ + Dimension space_left ; /* Between-column spacing, default 0. */ + Dimension space_end ; /* End spacing (XmGEO_CENTER), default 0. */ + Dimension space_between ; /* Internal spacing, default 0. */ + Dimension max_box_width ; /* Set during arrange routine. */ + Dimension boxes_height ; /* Set during arrange routine. */ + Dimension fill_height ; /* Set during arrange routine. */ + Dimension box_count ; /* Set during arrange routine. */ + } XmGeoColumnLayoutRec, *XmGeoColumnLayout ; + +typedef union _XmGeoMajorLayoutRec +{ + XmGeoRowLayoutRec row ; + XmGeoColumnLayoutRec col ; +} XmGeoMajorLayoutRec ; + +typedef struct _XmGeoMatrixRec +{ Widget composite ; /* Widget managing layout. */ + Widget instigator ; /* Widget initiating re-layout. */ + XtWidgetGeometry instig_request ;/* Geometry layout request of instigatr.*/ + XtWidgetGeometry parent_request ;/* Subsequent layout request to parent. */ + XtWidgetGeometry *in_layout ; /* Geo. of instig. in layout (after Get).*/ + XmKidGeometry boxes ;/* Array of boxes, lines separated by NULL record.*/ + XmGeoMajorLayout layouts ; /* Array of major_order format info. */ + Dimension margin_w ;/*Sum of margin, highlight, & shadow thickness.*/ + Dimension margin_h ;/*Sum of margin, highlight, & shadow thickness.*/ + Boolean stretch_boxes ; /* Set during arrange routine. */ + Boolean uniform_border ;/* Enforce on all kids, default FALSE. */ + Dimension border ; /* Value to use if uniform_border TRUE. */ + Dimension max_major ; /* Set during arrange routine. */ + Dimension boxes_minor ; /* Set during arrange routine. */ + Dimension fill_minor ; /* Set during arrange routine. */ + Dimension width ; /* Set during arrange routine. */ + Dimension height ; /* Set during arrange routine. */ + XmGeoExceptProc set_except ; + XmGeoExceptProc almost_except ; + XmGeoExceptProc no_geo_request ; + XtPointer extension ; + XmGeoExtDestructorProc ext_destructor ; + XmGeoArrangeProc arrange_boxes ;/* For user-defined arrangement routine. */ + unsigned char major_order ; + } XmGeoMatrixRec; + +typedef XmGeoMatrix (*XmGeoCreateProc)( Widget, Widget, XtWidgetGeometry *) ; + +/*********************************************************************** + * + * XmInheritP.h + * + ***********************************************************************/ + +#define XmInheritCallbackProc ((XtCallbackProc) _XtInherit) +#define XmInheritTraversalProc ((XmTraversalProc) _XtInherit) +#define XmInheritParentProcess ((XmParentProcessProc) _XtInherit) +#define XmInheritWidgetProc ((XtWidgetProc) _XtInherit) +#define XmInheritMenuProc ((XmMenuProc) _XtInherit) +#define XmInheritTranslations XtInheritTranslations +#define XmInheritCachePart ((XmCacheClassPartPtr) _XtInherit) +#define XmInheritBaselineProc ((XmWidgetBaselineProc) _XtInherit) +#define XmInheritDisplayRectProc ((XmWidgetDisplayRectProc) _XtInherit) +#define XmInheritMarginsProc ((XmWidgetMarginsProc) _XtInherit) +#define XmInheritGeoMatrixCreate ((XmGeoCreateProc) _XtInherit) +#define XmInheritFocusMovedProc ((XmFocusMovedProc) _XtInherit) +#define XmInheritClass ((WidgetClass) &_XmInheritClass) +#define XmInheritInitializePrehook ((XtInitProc) _XtInherit) +#define XmInheritSetValuesPrehook ((XtSetValuesFunc) _XtInherit) +#define XmInheritGetValuesPrehook ((XtArgsProc) _XtInherit) +#define XmInheritInitializePosthook ((XtInitProc) _XtInherit) +#define XmInheritSetValuesPosthook ((XtSetValuesFunc) _XtInherit) +#define XmInheritGetValuesPosthook ((XtArgsProc) _XtInherit) +#define XmInheritSecObjectCreate ((XtInitProc) _XtInherit) +#define XmInheritGetSecResData ((XmGetSecResDataFunc) _XtInherit) +#define XmInheritInputDispatch ((XmWidgetDispatchProc) _XtInherit) +#define XmInheritVisualChange ((XmVisualChangeProc) _XtInherit) +#define XmInheritArmAndActivate ((XtActionProc) _XtInherit) +#define XmInheritActionProc ((XtActionProc) _XtInherit) +#define XmInheritFocusChange ((XmFocusChangeProc) _XtInherit) +#define XmInheritWidgetNavigable ((XmWidgetNavigableProc) _XtInherit) +#define XmInheritClassPartInitPrehook ((XtWidgetClassProc) _XtInherit) +#define XmInheritClassPartInitPosthook ((XtWidgetClassProc) _XtInherit) +#define XmInheritBorderHighlight ((XtWidgetProc) _XtInherit) +#define XmInheritBorderUnhighlight ((XtWidgetProc) _XtInherit) + + +/************************************************************************ + * + * Fast subclassing macros and definitions + * + ************************************************************************/ +/* WARNING: Application subclasses which choose to use fast + * subclassing must use only those bits between + * 192 (XmFIRST_APPLICATION_SUBCLASS_BIT) and 255. + * All other fast subclass bits are reserved for + * future use. Use of reserved fast subclass bits + * will cause binary compatibility breaks with + * future Motif versions. + */ +#define XmFIRST_APPLICATION_SUBCLASS_BIT 192 + +enum{ XmCASCADE_BUTTON_BIT = 1, XmCASCADE_BUTTON_GADGET_BIT, + XmCOMMAND_BOX_BIT, XmDIALOG_SHELL_BIT, + XmLIST_BIT, XmFORM_BIT, + XmTEXT_FIELD_BIT, XmGADGET_BIT, + XmLABEL_BIT, XmLABEL_GADGET_BIT, + XmMAIN_WINDOW_BIT, XmMANAGER_BIT, + XmMENU_SHELL_BIT, XmDRAWN_BUTTON_BIT, + XmPRIMITIVE_BIT, XmPUSH_BUTTON_BIT, + XmPUSH_BUTTON_GADGET_BIT, XmROW_COLUMN_BIT, + XmSCROLL_BAR_BIT, XmSCROLLED_WINDOW_BIT, + XmSELECTION_BOX_BIT, XmSEPARATOR_BIT, + XmSEPARATOR_GADGET_BIT, XmTEXT_BIT, + XmTOGGLE_BUTTON_BIT, XmTOGGLE_BUTTON_GADGET_BIT, + XmDROP_TRANSFER_BIT, XmDROP_SITE_MANAGER_BIT, + XmDISPLAY_BIT, XmSCREEN_BIT, + XmPRINT_SHELL_BIT, XmARROW_BUTTON_BIT, + XmARROW_BUTTON_GADGET_BIT, XmBULLETIN_BOARD_BIT, + XmDRAWING_AREA_BIT, XmFILE_SELECTION_BOX_BIT, + XmFRAME_BIT, XmMESSAGE_BOX_BIT, + XmSASH_BIT, XmSCALE_BIT, + XmPANED_WINDOW_BIT, XmVENDOR_SHELL_BIT, + XmCLIP_WINDOW_BIT, XmDRAG_ICON_BIT, + XmTEAROFF_BUTTON_BIT, XmDRAG_OVER_SHELL_BIT, + XmDRAG_CONTEXT_BIT, XmCONTAINER_BIT, + XmICONGADGET_BIT, XmNOTEBOOK_BIT, + XmCSTEXT_BIT, XmGRAB_SHELL_BIT, + XmCOMBO_BOX_BIT, XmSPINBOX_BIT, + XmICONHEADER_BIT, + + XmFAST_SUBCLASS_TAIL_BIT /* New entries precede this. */ + } ; + +#define XmLAST_FAST_SUBCLASS_BIT (XmFAST_SUBCLASS_TAIL_BIT - 1) + + +#undef XmIsCascadeButton +#define XmIsCascadeButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmCASCADE_BUTTON_BIT)) + +#undef XmIsCascadeButtonGadget +#define XmIsCascadeButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmCASCADE_BUTTON_GADGET_BIT)) + +#undef XmIsClipWindow +#define XmIsClipWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmCLIP_WINDOW_BIT)) + +#undef XmIsComboBox +#define XmIsComboBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmCOMBO_BOX_BIT)) + +#undef XmIsCommandBox +#define XmIsCommandBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmCOMMAND_BOX_BIT)) + +#undef XmIsContainer +#define XmIsContainer(w) \ + (_XmIsFastSubclass(XtClass(w), XmCONTAINER_BIT)) + +#undef XmIsDialogShell +#define XmIsDialogShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmDIALOG_SHELL_BIT)) + +#undef XmIsDisplay +#define XmIsDisplay(w) \ + (_XmIsFastSubclass(XtClass(w), XmDISPLAY_BIT)) + +#undef XmIsGrabShell +#define XmIsGrabShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmGRAB_SHELL_BIT)) + +#undef XmIsIconGadget +#define XmIsIconGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmICONGADGET_BIT)) + +#undef XmIsList +#define XmIsList(w) \ + (_XmIsFastSubclass(XtClass(w), XmLIST_BIT)) + +#undef XmIsForm +#define XmIsForm(w) \ + (_XmIsFastSubclass(XtClass(w), XmFORM_BIT)) + +#undef XmIsTextField +#define XmIsTextField(w) \ + (_XmIsFastSubclass(XtClass(w), XmTEXT_FIELD_BIT)) + +#undef XmIsGadget +#define XmIsGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmGADGET_BIT)) + +#undef XmIsLabel +#define XmIsLabel(w) \ + (_XmIsFastSubclass(XtClass(w), XmLABEL_BIT)) + +#undef XmIsLabelGadget +#define XmIsLabelGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmLABEL_GADGET_BIT)) + +#undef XmIsMainWindow +#define XmIsMainWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmMAIN_WINDOW_BIT)) + +#undef XmIsManager +#define XmIsManager(w) \ + (_XmIsFastSubclass(XtClass(w), XmMANAGER_BIT)) + +#undef XmIsMenuShell +#define XmIsMenuShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmMENU_SHELL_BIT)) + +#undef XmIsNotebook +#define XmIsNotebook(w) \ + (_XmIsFastSubclass(XtClass(w), XmNOTEBOOK_BIT)) + +#undef XmIsDragIcon +#define XmIsDragIcon(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAG_ICON_BIT)) + +#undef XmIsDropSiteManager +#define XmIsDropSiteManager(w) \ + (_XmIsFastSubclass(XtClass(w), XmDROP_SITE_MANAGER_BIT)) + +#undef XmIsDropTransfer +#define XmIsDropTransfer(w) \ + (_XmIsFastSubclass(XtClass(w), XmDROP_TRANSFER_BIT)) + +#undef XmIsDragOverShell +#define XmIsDragOverShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAG_OVER_SHELL_BIT)) + +#undef XmIsDragContext +#define XmIsDragContext(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAG_CONTEXT_BIT)) + +#undef XmIsDrawnButton +#define XmIsDrawnButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAWN_BUTTON_BIT)) + +#undef XmIsPrimitive +#define XmIsPrimitive(w) \ + (_XmIsFastSubclass(XtClass(w), XmPRIMITIVE_BIT)) + +#undef XmIsPushButton +#define XmIsPushButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmPUSH_BUTTON_BIT)) + +#undef XmIsPushButtonGadget +#define XmIsPushButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmPUSH_BUTTON_GADGET_BIT)) + +#undef XmIsRowColumn +#define XmIsRowColumn(w) \ + (_XmIsFastSubclass(XtClass(w), XmROW_COLUMN_BIT)) + +#undef XmIsScreen +#define XmIsScreen(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCREEN_BIT)) + +#undef XmIsScrollBar +#define XmIsScrollBar(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCROLL_BAR_BIT)) + +#undef XmIsScrolledWindow +#define XmIsScrolledWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCROLLED_WINDOW_BIT)) + +#undef XmIsSelectionBox +#define XmIsSelectionBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmSELECTION_BOX_BIT)) + +#undef XmIsSeparator +#define XmIsSeparator(w) \ + (_XmIsFastSubclass(XtClass(w), XmSEPARATOR_BIT)) + +#undef XmIsSeparatorGadget +#define XmIsSeparatorGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmSEPARATOR_GADGET_BIT)) + +#undef XmIsSpinButton +#define XmIsSpinButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmSPINBUTTON_BIT)) + +#undef XmIsText +#define XmIsText(w) \ + (_XmIsFastSubclass(XtClass(w), XmTEXT_BIT)) + +#undef XmIsTearOffButton +#define XmIsTearOffButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmTEAROFF_BUTTON_BIT)) + +#undef XmIsToggleButton +#define XmIsToggleButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmTOGGLE_BUTTON_BIT)) + +#undef XmIsToggleButtonGadget +#define XmIsToggleButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmTOGGLE_BUTTON_GADGET_BIT)) + +#undef XmIsPrintShell +#define XmIsPrintShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmPRINT_SHELL_BIT)) + +#undef XmIsArrowButton +#define XmIsArrowButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmARROW_BUTTON_BIT)) + +#undef XmIsArrowButtonGadget +#define XmIsArrowButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmARROW_BUTTON_GADGET_BIT)) + +#undef XmIsBulletinBoard +#define XmIsBulletinBoard(w) \ + (_XmIsFastSubclass(XtClass(w), XmBULLETIN_BOARD_BIT)) + +#undef XmIsDrawingArea +#define XmIsDrawingArea(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAWING_AREA_BIT)) + +#undef XmIsFileSelectionBox +#define XmIsFileSelectionBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmFILE_SELECTION_BOX_BIT)) + +#undef XmIsFrame +#define XmIsFrame(w) \ + (_XmIsFastSubclass(XtClass(w), XmFRAME_BIT)) + +#undef XmIsMessageBox +#define XmIsMessageBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmMESSAGE_BOX_BIT)) + +#undef XmIsSash +#define XmIsSash(w) \ + (_XmIsFastSubclass(XtClass(w), XmSASH_BIT)) + +#undef XmIsScale +#define XmIsScale(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCALE_BIT)) + +#undef XmIsPanedWindow +#define XmIsPanedWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmPANED_WINDOW_BIT)) + +#undef XmIsCSText +#define XmIsCSText(w) \ + (_XmIsFastSubclass(XtClass(w), XmCSTEXT_BIT)) + + +/************************************************************************ + * + * ResolveP.h + * + ************************************************************************/ + + +/* Widget class indices used with XmPartOffset and XmField macros */ + +#define XmObjectIndex 0 +#define ObjectIndex XmObjectIndex +#define XmRectObjIndex (XmObjectIndex + 1) +#define RectObjIndex XmRectObjIndex +#define XmWindowObjIndex (XmRectObjIndex + 1) +#define WindowObjIndex XmWindowObjIndex +#define XmCoreIndex 0 +#define CoreIndex XmCoreIndex +#define XmCompositeIndex (XmWindowObjIndex + 2) +#define CompositeIndex XmCompositeIndex +#define XmConstraintIndex (XmCompositeIndex + 1) +#define ConstraintIndex XmConstraintIndex +#define XmGadgetIndex (XmRectObjIndex + 1) +#define XmPrimitiveIndex (XmWindowObjIndex + 2) +#define XmManagerIndex (XmConstraintIndex + 1) + +#define XmArrowBIndex (XmPrimitiveIndex + 1) +#define XmArrowButtonIndex XmArrowBIndex +#define XmLabelIndex (XmPrimitiveIndex + 1) +#define XmListIndex (XmPrimitiveIndex + 1) +#define XmScrollBarIndex (XmPrimitiveIndex + 1) +#define XmSeparatorIndex (XmPrimitiveIndex + 1) +#define XmTextIndex (XmPrimitiveIndex + 1) +#define XmTextFieldIndex (XmPrimitiveIndex + 1) +#define XmCSTextIndex (XmPrimitiveIndex + 1) + +#define XmCascadeBIndex (XmLabelIndex + 1) +#define XmCascadeButtonIndex XmCascadeBIndex +#define XmDrawnBIndex (XmLabelIndex + 1) +#define XmDrawnButtonIndex XmDrawnBIndex +#define XmPushBIndex (XmLabelIndex + 1) +#define XmPushButtonIndex XmPushBIndex +#define XmToggleBIndex (XmLabelIndex + 1) +#define XmToggleButtonIndex XmToggleBIndex +#define XmTearOffButtonIndex (XmPushBIndex + 1) + +#define XmArrowBGIndex (XmGadgetIndex + 1) +#define XmArrowButtonGadgetIndex XmArrowBGIndex +#define XmLabelGIndex (XmGadgetIndex + 1) +#define XmLabelGadgetIndex XmLabelGIndex +#define XmSeparatoGIndex (XmGadgetIndex + 1) +#define XmSeparatorGadgetIndex XmSeparatoGIndex + +#define XmCascadeBGIndex (XmLabelGIndex + 1) +#define XmCascadeButtonGadgetIndex XmCascadeBGIndex +#define XmPushBGIndex (XmLabelGIndex + 1) +#define XmPushButtonGadgetIndex XmPushBGIndex +#define XmToggleBGIndex (XmLabelGIndex + 1) +#define XmToggleButtonGadgetIndex XmToggleBGIndex +#define XmIconGadgetIndex (XmGadgetIndex + 1) + +#define XmBulletinBIndex (XmManagerIndex + 1) +#define XmBulletinBoardIndex XmBulletinBIndex +#define XmDrawingAIndex (XmManagerIndex + 1) +#define XmDrawingAreaIndex XmDrawingAIndex +#define XmClipWindowIndex (XmDrawingAIndex + 1) +#define XmFrameIndex (XmManagerIndex + 1) +#define XmPanedWIndex (XmManagerIndex + 1) +#define XmPanedWindowIndex XmPanedWIndex +#define XmSashIndex (XmPrimitiveIndex + 1) +#define XmRowColumnIndex (XmManagerIndex + 1) +#define XmScaleIndex (XmManagerIndex + 1) +#define XmScrolledWIndex (XmManagerIndex + 1) +#define XmScrolledWindowIndex XmScrolledWIndex + +#define XmFormIndex (XmBulletinBIndex + 1) +#define XmMessageBIndex (XmBulletinBIndex + 1) +#define XmMessageBoxIndex XmMessageBIndex +#define XmSelectioBIndex (XmBulletinBIndex + 1) +#define XmSelectionBoxIndex XmSelectioBIndex + +#define XmMainWIndex (XmScrolledWIndex + 1) +#define XmMainWindowIndex XmMainWIndex + +#define XmCommandIndex (XmSelectioBIndex + 1) +#define XmFileSBIndex (XmSelectioBIndex + 1) +#define XmFileSelectionBoxIndex XmFileSBIndex + +#define XmShellIndex (XmCompositeIndex + 1) +#define ShellIndex XmShellIndex +#define XmOverrideShellIndex (XmShellIndex + 1) +#define OverrideShellIndex XmOverrideShellIndex +#define XmWMShellIndex (XmShellIndex + 1) +#define WMShellIndex XmWMShellIndex +#define XmVendorShellIndex (XmWMShellIndex + 1) +#define VendorShellIndex XmVendorShellIndex +#define XmTransientShellIndex (XmVendorShellIndex + 1) +#define TransientShellIndex XmTransientShellIndex +#define XmTopLevelShellIndex (XmVendorShellIndex + 1) +#define TopLevelShellIndex XmTopLevelShellIndex +#define XmApplicationShellIndex (XmTopLevelShellIndex + 1) +#define ApplicationShellIndex XmApplicationShellIndex +#define XmGrabShellIndex (XmVendorShellIndex + 1) +#define XmDisplayIndex (XmApplicationShellIndex + 1) + +#define XmDialogSIndex (XmTransientShellIndex + 1) +#define XmDialogShellIndex XmDialogSIndex +#define XmMenuShellIndex (XmOverrideShellIndex + 1) + +#define XmContainerIndex (XmManagerIndex + 1) +#define XmNotebookIndex (XmManagerIndex + 1) +#define XmSpinButtonIndex (XmManagerIndex + 1) +#define XmComboBoxIndex (XmManagerIndex + 1) + +#define XmDragIconIndex (XmRectObjIndex + 1) +#define XmDropSiteManagerIndex (XmObjectIndex + 1) +#define XmDropTransferIndex (XmObjectIndex + 1) +#define XmDragOverShellIndex (XmVendorShellIndex + 1) +#define XmDragContextIndex (XmCoreIndex + 1) + +/* + * XmOFFSETBITS is the number of bits used for the part offset within the + * resource_offset field in the XmPartResource struct. XmOFFSETMASK is the + * bitmask to mask for the part offset. + */ +#define XmOFFSETBITS (sizeof(Cardinal)*8/2) +#define XmOFFSETMASK ((1<resource_offset & XmOFFSETMASK) + \ + (*(offset))[(r)->resource_offset >> XmOFFSETBITS] + +# define XmField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)) + offsetrecord[part##Index] + \ + XtOffsetOf( part##Part, variable))) + +# define XmConstraintField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)->core.constraints) + \ + offsetrecord[part##Index] + \ + XtOffsetOf( part##ConstraintPart, variable))) +#else +# define XmPartOffset(part, variable) \ + ((part/**/Index) << XmOFFSETBITS) + XtOffsetOf( part/**/Part, variable) + +# define XmConstraintPartOffset(part, variable) \ + ((part/**/Index) << XmOFFSETBITS) + \ + XtOffsetOf( part/**/ConstraintPart, variable) + +# define XmGetPartOffset(r, offset) \ + ((r)->resource_offset & XmOFFSETMASK) + \ + (*(offset))[(r)->resource_offset >> XmOFFSETBITS]; + +# define XmField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)) + offsetrecord[part/**/Index] + \ + XtOffsetOf( part/**/Part, variable))) + +# define XmConstraintField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)->core.constraints) + \ + offsetrecord[part/**/Index] + \ + XtOffsetOf( part/**/ConstraintPart, variable))) +#endif + +/*********************************************************************** + * + * RegionP.h + * + * This structure must match the opaque libX Region structure. + ***********************************************************************/ + +typedef struct { + short x1, x2, y1, y2; +} XmRegionBox; + +typedef struct _XmRegion { + long size; + long numRects; + XmRegionBox *rects; + XmRegionBox extents; +} XmRegionRec, *XmRegion; + + +/******** ResConvert.c ********/ + +enum{ XmLABEL_FONTLIST = 1, XmBUTTON_FONTLIST, + XmTEXT_FONTLIST + } ; + +enum { + XmLABEL_RENDER_TABLE = 1, + XmBUTTON_RENDER_TABLE, + XmTEXT_RENDER_TABLE +} ; + +/**** Private Defines, Typedefs, and Function Declarations for XmString.c ****/ + +/* For _XmStringIndexCacheTag() and _XmStringCacheTag() length. */ +#define XmSTRING_TAG_STRLEN -1 + +/* For _XmStringGetNextTabWidth. EOS = End Of String. */ +typedef enum { XmTAB_NEXT, XmTAB_NEWLINE, XmTAB_EOS } NextTabResult; + +/******** End Private Function Declarations ********/ + +/******** Traversal.c ********/ + +#define XmTAB_ANY ((XmNavigationType) 255) +#define XmNONE_OR_BC ((XmNavigationType) 254) + +typedef struct _XmFocusMovedCallbackStruct{ + int reason; + XEvent *event; + Boolean cont; + Widget old_focus; + Widget new_focus; + unsigned char focus_policy; + XmTraversalDirection direction; +} XmFocusMovedCallbackStruct, *XmFocusMovedCallback; + +typedef struct _XmFocusDataRec *XmFocusData; + + +/******** ResInd.c ********/ + +typedef enum { + XmPARSE_ERROR, XmPARSE_NO_UNITS, XmPARSE_UNITS_OK +} XmParseResult; + + + +/******** Function Declarations for Xme ********/ + + /* GadgetUtil.c */ +extern void XmeRedisplayGadgets( + Widget w, + register XEvent *event, + Region region) ; +extern void XmeConfigureObject( + Widget g, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int border_width) ; +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension border_width) ; +#endif /* NeedWidePrototypes */ + /* Traversal.c */ +extern void XmeNavigChangeManaged( + Widget wid) ; +extern Boolean XmeFocusIsInShell( + Widget wid) ; + /* ResInd.c */ +extern XmImportOperator XmeToHorizontalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern XmImportOperator XmeToVerticalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern void XmeFromHorizontalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern void XmeFromVerticalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern XmParseResult XmeParseUnits(String spec, int *unitType); + /* DragIcon. c */ +extern Widget XmeGetTextualDragIcon(Widget w) ; + /* BulletinB.c */ +extern Widget XmeCreateClassDialog( + WidgetClass w_class, + Widget ds_p, + String name, + ArgList bb_args, + Cardinal bb_n ) ; + /* ImageCache.c */ +extern Boolean XmeGetPixmapData( + Screen *screen, + Pixmap pixmap, + char **image_name, + int *depth, + Pixel *foreground, + Pixel *background, + int *hot_x, + int *hot_y, + unsigned int *width, + unsigned int *height) ; +extern Pixmap XmeGetMask( + Screen *screen, + char *image_name) ; + /* VirtKeys.c */ +extern int XmeVirtualToActualKeysyms( + Display *dpy, + KeySym virtKeysym, + XmKeyBinding *actualKeyData) ; + /* Screen.c */ +extern Cursor XmeGetNullCursor(Widget w) ; +extern void XmeQueryBestCursorSize( + Widget w, + Dimension *width, + Dimension *height ); + /* Xm.c */ +extern void XmeWarning( Widget w, char *message ) ; + /* ResConvert.c */ +extern XmFontList XmeGetDefaultRenderTable( + Widget w, +#if NeedWidePrototypes + unsigned int fontListType ); +#else + unsigned char fontListType ); +#endif /* NeedWidePrototypes */ +extern Boolean XmeNamesAreEqual( + register char *in_str, + register char *test_str ); + /* Primitive.c */ +extern void XmeResolvePartOffsets( + WidgetClass w_class, + XmOffsetPtr *offset, + XmOffsetPtr *constraint_offset ) ; + /* XmString.c */ +extern Boolean XmeStringIsValid( XmString string ) ; +extern void XmeSetWMShellTitle( + XmString xmstr, + Widget shell) ; +extern XmIncludeStatus XmeGetDirection(XtPointer *in_out, + XtPointer text_end, + XmTextType type, + XmStringTag locale_tag, + XmParseMapping entry, + int pattern_length, + XmString *str_include, + XtPointer call_data); +extern XmIncludeStatus XmeGetNextCharacter(XtPointer *in_out, + XtPointer text_end, + XmTextType type, + XmStringTag locale_tag, + XmParseMapping entry, + int pattern_length, + XmString *str_include, + XtPointer call_data); +extern XmStringComponentType XmeStringGetComponent(_XmStringContext context, + Boolean update_context, + Boolean copy_data, + unsigned int *length, + XtPointer *value); + /* XmFontList.c */ +extern Boolean XmeRenderTableGetDefaultFont( + XmFontList fontlist, + XFontStruct **font_struct ) ; + /* GMUtils.c */ +extern XtGeometryResult XmeReplyToQueryGeometry( + Widget widget, + XtWidgetGeometry * intended, + XtWidgetGeometry * desired) ; + /* Color.c */ +extern void XmeGetDefaultPixel( + Widget widget, + int type, + int offset, + XrmValue *value) ; + /* Xmos.c */ +extern String XmeGetHomeDirName(void) ; +extern int XmeMicroSleep( + long secs) ; +extern XmString XmeGetLocalizedString( + char *reserved, + Widget widget, + char *resource, + String string) ; + +/******** End Function Declarations for Xme ********/ + +/******** ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + + +#include + + +/*********************************************************************** + * + * Motif 1.2 BC compilation. + * + ***********************************************************************/ + +#ifndef NO_XM_1_2_BC + +/* + * These routines have all been made obsolete by public Xme functions. + * The declarations here are intended solely as an aid to porting, + * and will be removed in a future release. All applications should + * name the Xme methods directly. + * + * _XmVirtualToActualKeysym, _XmResizeObject, and _XmMoveObject have + * Xme counterparts with slightly different semantics or parameters, + * so a simple rename will not work for them. + */ + +#define _XmClearBorder XmeClearBorder +#define _XmConfigureObject XmeConfigureObject +#define _XmDrawArrow XmeDrawArrow +#define _XmDrawDiamond XmeDrawDiamond +#define _XmDrawSeparator XmeDrawSeparator +#define _XmDrawShadows XmeDrawShadows +#define _XmDrawSimpleHighlight XmeDrawHighlight +#define _XmFontListGetDefaultFont XmeRenderTableGetDefaultFont +#define _XmFromHorizontalPixels XmeFromHorizontalPixels +#define _XmFromVerticalPixels XmeFromVerticalPixels +#define _XmGMReplyToQueryGeometry XmeReplyToQueryGeometry +#define _XmGetDefaultFontList XmeGetDefaultRenderTable +#define _XmGetMaxCursorSize XmeQueryBestCursorSize +#define _XmGetNullCursor XmeGetNullCursor +#define _XmGetTextualDragIcon XmeGetTextualDragIcon +#define _XmInputInGadget XmObjectAtPoint +#define _XmMicroSleep XmeMicroSleep +#define _XmNavigChangeManaged XmeNavigChangeManaged +#define _XmOSGetHomeDirName XmeGetHomeDirName +#define _XmOSGetLocalizedString XmeGetLocalizedString +#define _XmRedisplayGadgets XmeRedisplayGadgets +#define _XmStringIsXmString XmeStringIsValid +#define _XmStringUpdateWMShellTitle XmeSetWMShellTitle +#define _XmStringsAreEqual XmeNamesAreEqual +#define _XmToHorizontalPixels XmeToHorizontalPixels +#define _XmToVerticalPixels XmeToVerticalPixels +#define _XmWarning XmeWarning + + +/* + * These routines are really undocumented and internal, but have been + * used widely enough as data that they are preserved here for source + * compatibility. + */ + +extern void _XmDestroyParentCallback( + Widget w, + XtPointer client_data, + XtPointer call_data) ; + + +/* + * Use of these internal macros is sufficiently widespread that they + * are still made available here for source compatibility. + */ + +/* The _XmCreateImage macro is used to create XImage with client + * specific data for the bit and byte order. We still have to do the + * following because XCreateImage will stuff here display specific + * data and we want client specific values (i.e the bit orders we used + * for creating the bitmap data in Motif) */ +#define _XmCreateImage(IMAGE, DISPLAY, DATA, WIDTH, HEIGHT, BYTE_ORDER) {\ + IMAGE = XCreateImage(DISPLAY,\ + DefaultVisual(DISPLAY, DefaultScreen(DISPLAY)),\ + 1,\ + XYBitmap,\ + 0,\ + DATA,\ + WIDTH, HEIGHT,\ + 8,\ + (WIDTH+7) >> 3);\ + IMAGE->byte_order = BYTE_ORDER;\ + IMAGE->bitmap_unit = 8;\ + IMAGE->bitmap_bit_order = LSBFirst;\ +} + +#endif /* NO_XM_1_2_BC */ + + +#endif /* _XmP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/XmStrDefs.h b/libXm/linux86/Xm/XmStrDefs.h new file mode 100644 index 0000000..702e80e --- /dev/null +++ b/libXm/linux86/Xm/XmStrDefs.h @@ -0,0 +1,5758 @@ +/* $TOG: XmStrDefs.ht /main/2 1997/06/18 17:50:15 samborn $ */ +#ifndef _XmStrDefs_h_ +#define _XmStrDefs_h_ + +#ifndef _XmConst +#define _XmConst /**/ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* $TOG: makestrs.c /main/11 1998/02/06 11:24:15 kaleb $ */ +/* This file is automatically generated. */ +/* Default ABI version -- Do not edit */ +/* TOG: xmstring.list /main/5 1997/06/20 08:37:02 samborn */ + +#ifdef XMSTRINGDEFINES +#define XmS "" +#define XmCAccelerator "Accelerator" +#define XmCAcceleratorText "AcceleratorText" +#define XmCAdjustLast "AdjustLast" +#define XmCAdjustMargin "AdjustMargin" +#define XmCAlignment "Alignment" +#define XmCAllowOverlap "AllowOverlap" +#define XmCAllowUnusedSpace "AllowUnusedSpace" +#define XmCAnimationMask "AnimationMask" +#define XmCAnimationPixmap "AnimationPixmap" +#define XmCAnimationPixmapDepth "AnimationPixmapDepth" +#define XmCAnimationStyle "AnimationStyle" +#define XmCApplyLabelString "ApplyLabelString" +#define XmCArmCallback "ArmCallback" +#define XmCArmColor "ArmColor" +#define XmCArmPixmap "ArmPixmap" +#define XmCArrowDirection "ArrowDirection" +#define XmCAttachment "Attachment" +#define XmCAudibleWarning "AudibleWarning" +#define XmCAutoShowCursorPosition "AutoShowCursorPosition" +#define XmCAutoUnmanage "AutoUnmanage" +#define XmCAutomaticSelection "AutomaticSelection" +#define XmCAvailability "Availability" +#define XmCBackgroundPixmap "BackgroundPixmap" +#define XmCBlendModel "BlendModel" +#define XmCBlinkRate "BlinkRate" +#define XmCBottomShadowColor "BottomShadowColor" +#define XmCBottomShadowPixmap "BottomShadowPixmap" +#define XmCButtonAcceleratorText "ButtonAcceleratorText" +#define XmCButtonAccelerators "ButtonAccelerators" +#define XmCButtonCount "ButtonCount" +#define XmCButtonFontList "ButtonFontList" +#define XmCButtonMnemonicCharSets "ButtonMnemonicCharSets" +#define XmCButtonMnemonics "ButtonMnemonics" +#define XmCButtonSet "ButtonSet" +#define XmCButtonType "ButtonType" +#define XmCButtons "Buttons" +#define XmCCancelLabelString "CancelLabelString" +#define XmCChildHorizontalAlignment "ChildHorizontalAlignment" +#define XmCChildHorizontalSpacing "ChildHorizontalSpacing" +#define XmCChildPlacement "ChildPlacement" +#define XmCChildType "ChildType" +#define XmCChildVerticalAlignment "ChildVerticalAlignment" +#define XmCChildren "Children" +#define XmCClientData "ClientData" +#define XmCClipWindow "ClipWindow" +#define XmCColumns "Columns" +#define XmCCommandWindow "CommandWindow" +#define XmCCommandWindowLocation "CommandWindowLocation" +#define XmCConvertProc "ConvertProc" +#define XmCCursorBackground "CursorBackground" +#define XmCCursorForeground "CursorForeground" +#define XmCCursorPosition "CursorPosition" +#define XmCCursorPositionVisible "CursorPositionVisible" +#define XmCDarkThreshold "DarkThreshold" +#define XmCDecimalPoints "DecimalPoints" +#define XmCDefaultButtonShadowThickness "DefaultButtonShadowThickness" +#define XmCDefaultButtonType "DefaultButtonType" +#define XmCDefaultCopyCursorIcon "DefaultCopyCursorIcon" +#define XmCDefaultFontList "DefaultFontList" +#define XmCDefaultInvalidCursorIcon "DefaultInvalidCursorIcon" +#define XmCDefaultLinkCursorIcon "DefaultLinkCursorIcon" +#define XmCDefaultMoveCursorIcon "DefaultMoveCursorIcon" +#define XmCDefaultNoneCursorIcon "DefaultNoneCursorIcon" +#define XmCDefaultPosition "DefaultPosition" +#define XmCDefaultSourceCursorIcon "DefaultSourceCursorIcon" +#define XmCDefaultValidCursorIcon "DefaultValidCursorIcon" +#define XmCDeleteResponse "DeleteResponse" +#define XmCDesktopParent "DesktopParent" +#define XmCDialogStyle "DialogStyle" +#define XmCDialogTitle "DialogTitle" +#define XmCDialogType "DialogType" +#define XmCDirListItemCount "DirListItemCount" +#define XmCDirListItems "DirListItems" +#define XmCDirListLabelString "DirListLabelString" +#define XmCDirMask "DirMask" +#define XmCDirSearchProc "DirSearchProc" +#define XmCDirSpec "DirSpec" +#define XmCDirectory "Directory" +#define XmCDirectoryValid "DirectoryValid" +#define XmCDisarmCallback "DisarmCallback" +#define XmCDoubleClickInterval "DoubleClickInterval" +#define XmCDragContextClass "DragContextClass" +#define XmCDragDropFinishCallback "DragDropFinishCallback" +#define XmCDragIconClass "DragIconClass" +#define XmCDragInitiatorProtocolStyle "DragInitiatorProtocolStyle" +#define XmCDragMotionCallback "DragMotionCallback" +#define XmCDragOperations "DragOperations" +#define XmCDragOverMode "DragOverMode" +#define XmCDragProc "DragProc" +#define XmCDragReceiverProtocolStyle "DragReceiverProtocolStyle" +#define XmCDropProc "DropProc" +#define XmCDropRectangles "DropRectangles" +#define XmCDropSiteActivity "DropSiteActivity" +#define XmCDropSiteEnterCallback "DropSiteEnterCallback" +#define XmCDropSiteLeaveCallback "DropSiteLeaveCallback" +#define XmCDropSiteManagerClass "DropSiteManagerClass" +#define XmCDropSiteOperations "DropSiteOperations" +#define XmCDropSiteType "DropSiteType" +#define XmCDropStartCallback "DropStartCallback" +#define XmCDropTransferClass "DropTransferClass" +#define XmCDropTransfers "DropTransfers" +#define XmCEditable "Editable" +#define XmCEntryBorder "EntryBorder" +#define XmCEntryClass "EntryClass" +#define XmCExportTargets "ExportTargets" +#define XmCExposeCallback "ExposeCallback" +#define XmCExtensionType "ExtensionType" +#define XmCFileListItemCount "FileListItemCount" +#define XmCFileListItems "FileListItems" +#define XmCFileListLabelString "FileListLabelString" +#define XmCFileSearchProc "FileSearchProc" +#define XmCFileTypeMask "FileTypeMask" +#define XmCFillOnArm "FillOnArm" +#define XmCFillOnSelect "FillOnSelect" +#define XmCFilterLabelString "FilterLabelString" +#define XmCFontList "FontList" +#define XmCForegroundThreshold "ForegroundThreshold" +#define XmCHelpLabelString "HelpLabelString" +#define XmCHighlightColor "HighlightColor" +#define XmCHighlightOnEnter "HighlightOnEnter" +#define XmCHighlightPixmap "HighlightPixmap" +#define XmCHighlightThickness "HighlightThickness" +#define XmCHorizontalFontUnit "HorizontalFontUnit" +#define XmCHorizontalScrollBar "HorizontalScrollBar" +#define XmCHot "Hot" +#define XmCICCHandle "ICCHandle" +#define XmCImportTargets "ImportTargets" +#define XmCIncrement "Increment" +#define XmCIncremental "Incremental" +#define XmCIndicatorOn "IndicatorOn" +#define XmCIndicatorSize "IndicatorSize" +#define XmCIndicatorType "IndicatorType" +#define XmCInitialDelay "InitialDelay" +#define XmCInitialFocus "InitialFocus" +#define XmCInputCreate "InputCreate" +#define XmCInputMethod "InputMethod" +#define XmCInvalidCursorForeground "InvalidCursorForeground" +#define XmCIsAligned "IsAligned" +#define XmCIsHomogeneous "IsHomogeneous" +#define XmCItemCount "ItemCount" +#define XmCItems "Items" +#define XmCKeyboardFocusPolicy "KeyboardFocusPolicy" +#define XmCLabelFontList "LabelFontList" +#define XmCLabelInsensitivePixmap "LabelInsensitivePixmap" +#define XmCLabelPixmap "LabelPixmap" +#define XmCLabelString "LabelString" +#define XmCLabelType "LabelType" +#define XmCLightThreshold "LightThreshold" +#define XmCListLabelString "ListLabelString" +#define XmCListMarginHeight "ListMarginHeight" +#define XmCListMarginWidth "ListMarginWidth" +#define XmCListSizePolicy "ListSizePolicy" +#define XmCListSpacing "ListSpacing" +#define XmCListUpdated "ListUpdated" +#define XmCLogicalParent "LogicalParent" +#define XmCMainWindowMarginHeight "MainWindowMarginHeight" +#define XmCMainWindowMarginWidth "MainWindowMarginWidth" +#define XmCMappingDelay "MappingDelay" +#define XmCMarginBottom "MarginBottom" +#define XmCMarginHeight "MarginHeight" +#define XmCMarginLeft "MarginLeft" +#define XmCMarginRight "MarginRight" +#define XmCMarginTop "MarginTop" +#define XmCMarginWidth "MarginWidth" +#define XmCMask "Mask" +#define XmCMaxItems "MaxItems" +#define XmCMaxLength "MaxLength" +#define XmCMaxValue "MaxValue" +#define XmCMaximum "Maximum" +#define XmCMenuBar "MenuBar" +#define XmCMenuPost "MenuPost" +#define XmCMenuWidget "MenuWidget" +#define XmCMessageProc "MessageProc" +#define XmCMessageWindow "MessageWindow" +#define XmCMinimizeButtons "MinimizeButtons" +#define XmCMinimum "Minimum" +#define XmCMnemonic "Mnemonic" +#define XmCMnemonicCharSet "MnemonicCharSet" +#define XmCMoveOpaque "MoveOpaque" +#define XmCMultiClick "MultiClick" +#define XmCMustMatch "MustMatch" +#define XmCMwmDecorations "MwmDecorations" +#define XmCMwmFunctions "MwmFunctions" +#define XmCMwmInputMode "MwmInputMode" +#define XmCMwmMenu "MwmMenu" +#define XmCMwmMessages "MwmMessages" +#define XmCNavigationType "NavigationType" +#define XmCNeedsMotion "NeedsMotion" +#define XmCNoMatchString "NoMatchString" +#define XmCNoResize "NoResize" +#define XmCNoneCursorForeground "NoneCursorForeground" +#define XmCNotifyProc "NotifyProc" +#define XmCNumChildren "NumChildren" +#define XmCNumColumns "NumColumns" +#define XmCNumDropRectangles "NumDropRectangles" +#define XmCNumDropTransfers "NumDropTransfers" +#define XmCNumExportTargets "NumExportTargets" +#define XmCNumImportTargets "NumImportTargets" +#define XmCOffset "Offset" +#define XmCOkLabelString "OkLabelString" +#define XmCOperationChangedCallback "OperationChangedCallback" +#define XmCOperationCursorIcon "OperationCursorIcon" +#define XmCOptionLabel "OptionLabel" +#define XmCOptionMnemonic "OptionMnemonic" +#define XmCOutputCreate "OutputCreate" +#define XmCPacking "Packing" +#define XmCPageIncrement "PageIncrement" +#define XmCPaneMaximum "PaneMaximum" +#define XmCPaneMinimum "PaneMinimum" +#define XmCPattern "Pattern" +#define XmCPendingDelete "PendingDelete" +#define XmCPopupEnabled "PopupEnabled" +#define XmCPositionIndex "PositionIndex" +#define XmCPostFromButton "PostFromButton" +#define XmCPostFromCount "PostFromCount" +#define XmCPostFromList "PostFromList" +#define XmCPreeditType "PreeditType" +#define XmCProcessingDirection "ProcessingDirection" +#define XmCPromptString "PromptString" +#define XmCProtocolCallback "ProtocolCallback" +#define XmCPushButtonEnabled "PushButtonEnabled" +#define XmCQualifySearchDataProc "QualifySearchDataProc" +#define XmCRadioAlwaysOne "RadioAlwaysOne" +#define XmCRadioBehavior "RadioBehavior" +#define XmCRecomputeSize "RecomputeSize" +#define XmCRectangles "Rectangles" +#define XmCRepeatDelay "RepeatDelay" +#define XmCResizeCallback "ResizeCallback" +#define XmCResizeHeight "ResizeHeight" +#define XmCResizePolicy "ResizePolicy" +#define XmCResizeWidth "ResizeWidth" +#define XmCRowColumnType "RowColumnType" +#define XmCRows "Rows" +#define XmCRubberPositioning "RubberPositioning" +#define XmCSashHeight "SashHeight" +#define XmCSashIndent "SashIndent" +#define XmCSashWidth "SashWidth" +#define XmCScaleHeight "ScaleHeight" +#define XmCScaleMultiple "ScaleMultiple" +#define XmCScaleWidth "ScaleWidth" +#define XmCScroll "Scroll" +#define XmCScrollBarDisplayPolicy "ScrollBarDisplayPolicy" +#define XmCScrollBarPlacement "ScrollBarPlacement" +#define XmCScrollSide "ScrollSide" +#define XmCScrolledWindowMarginHeight "ScrolledWindowMarginHeight" +#define XmCScrolledWindowMarginWidth "ScrolledWindowMarginWidth" +#define XmCScrollingPolicy "ScrollingPolicy" +#define XmCSelectColor "SelectColor" +#define XmCSelectInsensitivePixmap "SelectInsensitivePixmap" +#define XmCSelectPixmap "SelectPixmap" +#define XmCSelectThreshold "SelectThreshold" +#define XmCSelectedItemCount "SelectedItemCount" +#define XmCSelectedItems "SelectedItems" +#define XmCSelectionArrayCount "SelectionArrayCount" +#define XmCSelectionLabelString "SelectionLabelString" +#define XmCSelectionPolicy "SelectionPolicy" +#define XmCSeparatorOn "SeparatorOn" +#define XmCSeparatorType "SeparatorType" +#define XmCSet "Set" +#define XmCShadowThickness "ShadowThickness" +#define XmCShadowType "ShadowType" +#define XmCShellUnitType "ShellUnitType" +#define XmCShowArrows "ShowArrows" +#define XmCShowAsDefault "ShowAsDefault" +#define XmCShowSeparator "ShowSeparator" +#define XmCShowValue "ShowValue" +#define XmCSimpleCheckBox "SimpleCheckBox" +#define XmCSimpleMenuBar "SimpleMenuBar" +#define XmCSimpleOptionMenu "SimpleOptionMenu" +#define XmCSimplePopupMenu "SimplePopupMenu" +#define XmCSimplePulldownMenu "SimplePulldownMenu" +#define XmCSimpleRadioBox "SimpleRadioBox" +#define XmCSizePolicy "SizePolicy" +#define XmCSliderSize "SliderSize" +#define XmCSource "Source" +#define XmCSourceCursorIcon "SourceCursorIcon" +#define XmCSourceIsExternal "SourceIsExternal" +#define XmCSourcePixmapIcon "SourcePixmapIcon" +#define XmCSourceWidget "SourceWidget" +#define XmCSourceWindow "SourceWindow" +#define XmCSpacing "Spacing" +#define XmCStartTime "StartTime" +#define XmCStateCursorIcon "StateCursorIcon" +#define XmCStringDirection "StringDirection" +#define XmCTearOffModel "TearOffModel" +#define XmCTextFontList "TextFontList" +#define XmCTextString "TextString" +#define XmCTextValue "TextValue" +#define XmCTitleString "TitleString" +#define XmCTopCharacter "TopCharacter" +#define XmCTopItemPosition "TopItemPosition" +#define XmCTopLevelEnterCallback "TopLevelEnterCallback" +#define XmCTopLevelLeaveCallback "TopLevelLeaveCallback" +#define XmCTopShadowColor "TopShadowColor" +#define XmCTopShadowPixmap "TopShadowPixmap" +#define XmCTransferProc "TransferProc" +#define XmCTransferStatus "TransferStatus" +#define XmCTraversalOn "TraversalOn" +#define XmCTraversalType "TraversalType" +#define XmCTreeUpdateProc "TreeUpdateProc" +#define XmCTroughColor "TroughColor" +#define XmCUnitType "UnitType" +#define XmCUnpostBehavior "UnpostBehavior" +#define XmCUnselectPixmap "UnselectPixmap" +#define XmCUpdateSliderSize "UpdateSliderSize" +#define XmCUseAsyncGeometry "UseAsyncGeometry" +#define XmCUserData "UserData" +#define XmCValidCursorForeground "ValidCursorForeground" +#define XmCValueChangedCallback "ValueChangedCallback" +#define XmCValueWcs "ValueWcs" +#define XmCVerifyBell "VerifyBell" +#define XmCVerticalAlignment "VerticalAlignment" +#define XmCVerticalFontUnit "VerticalFontUnit" +#define XmCVerticalScrollBar "VerticalScrollBar" +#define XmCVisibleItemCount "VisibleItemCount" +#define XmCVisibleWhenOff "VisibleWhenOff" +#define XmCVisualPolicy "VisualPolicy" +#define XmCWhichButton "WhichButton" +#define XmCWordWrap "WordWrap" +#define XmCWorkWindow "WorkWindow" +#define XmCXmString "XmString" +#define XmNaccelerator "accelerator" +#define XmNacceleratorText "acceleratorText" +#define XmNactivateCallback "activateCallback" +#define XmNadjustLast "adjustLast" +#define XmNadjustMargin "adjustMargin" +#define XmNalignment "alignment" +#define XmNallowOverlap "allowOverlap" +#define XmNallowResize "allowResize" +#define XmNallowUnusedSpace "allowUnusedSpace" +#define XmNanimationMask "animationMask" +#define XmNanimationPixmap "animationPixmap" +#define XmNanimationPixmapDepth "animationPixmapDepth" +#define XmNanimationStyle "animationStyle" +#define XmNapplyCallback "applyCallback" +#define XmNapplyLabelString "applyLabelString" +#define XmNarmCallback "armCallback" +#define XmNarmColor "armColor" +#define XmNarmPixmap "armPixmap" +#define XmNarrowDirection "arrowDirection" +#define XmNattachment "attachment" +#define XmNaudibleWarning "audibleWarning" +#define XmNautoShowCursorPosition "autoShowCursorPosition" +#define XmNautoUnmanage "autoUnmanage" +#define XmNautomaticSelection "automaticSelection" +#define XmNavailability "availability" +#define XmNblendModel "blendModel" +#define XmNblinkRate "blinkRate" +#define XmNbottomAttachment "bottomAttachment" +#define XmNbottomOffset "bottomOffset" +#define XmNbottomPosition "bottomPosition" +#define XmNbottomShadowColor "bottomShadowColor" +#define XmNbottomShadowPixmap "bottomShadowPixmap" +#define XmNbottomWidget "bottomWidget" +#define XmNbrowseSelectionCallback "browseSelectionCallback" +#define XmNbuttonAcceleratorText "buttonAcceleratorText" +#define XmNbuttonAccelerators "buttonAccelerators" +#define XmNbuttonCount "buttonCount" +#define XmNbuttonFontList "buttonFontList" +#define XmNbuttonMnemonicCharSets "buttonMnemonicCharSets" +#define XmNbuttonMnemonics "buttonMnemonics" +#define XmNbuttonSet "buttonSet" +#define XmNbuttonType "buttonType" +#define XmNbuttons "buttons" +#define XmNcancelButton "cancelButton" +#define XmNcancelCallback "cancelCallback" +#define XmNcancelLabelString "cancelLabelString" +#define XmNcascadePixmap "cascadePixmap" +#define XmNcascadingCallback "cascadingCallback" +#define XmNchildHorizontalAlignment "childHorizontalAlignment" +#define XmNchildHorizontalSpacing "childHorizontalSpacing" +#define XmNchildPlacement "childPlacement" +#define XmNchildPosition "childPosition" +#define XmNchildType "childType" +#define XmNchildVerticalAlignment "childVerticalAlignment" +#define XmNclientData "clientData" +#define XmNclipWindow "clipWindow" +#define XmNcolumns "columns" +#define XmNcommand "command" +#define XmNcommandChangedCallback "commandChangedCallback" +#define XmNcommandEnteredCallback "commandEnteredCallback" +#define XmNcommandWindow "commandWindow" +#define XmNcommandWindowLocation "commandWindowLocation" +#define XmNconvertProc "convertProc" +#define XmNcursorBackground "cursorBackground" +#define XmNcursorForeground "cursorForeground" +#define XmNcursorPosition "cursorPosition" +#define XmNcursorPositionVisible "cursorPositionVisible" +#define XmNdarkThreshold "darkThreshold" +#define XmNdecimalPoints "decimalPoints" +#define XmNdecrementCallback "decrementCallback" +#define XmNdefaultActionCallback "defaultActionCallback" +#define XmNdefaultButton "defaultButton" +#define XmNdefaultButtonShadowThickness "defaultButtonShadowThickness" +#define XmNdefaultButtonType "defaultButtonType" +#define XmNdefaultCopyCursorIcon "defaultCopyCursorIcon" +#define XmNdefaultFontList "defaultFontList" +#define XmNdefaultInvalidCursorIcon "defaultInvalidCursorIcon" +#define XmNdefaultLinkCursorIcon "defaultLinkCursorIcon" +#define XmNdefaultMoveCursorIcon "defaultMoveCursorIcon" +#define XmNdefaultNoneCursorIcon "defaultNoneCursorIcon" +#define XmNdefaultPosition "defaultPosition" +#define XmNdefaultSourceCursorIcon "defaultSourceCursorIcon" +#define XmNdefaultValidCursorIcon "defaultValidCursorIcon" +#define XmNdeleteResponse "deleteResponse" +#define XmNdesktopParent "desktopParent" +#define XmNdialogStyle "dialogStyle" +#define XmNdialogTitle "dialogTitle" +#define XmNdialogType "dialogType" +#define XmNdirListItemCount "dirListItemCount" +#define XmNdirListItems "dirListItems" +#define XmNdirListLabelString "dirListLabelString" +#define XmNdirMask "dirMask" +#define XmNdirSearchProc "dirSearchProc" +#define XmNdirSpec "dirSpec" +#define XmNdirectory "directory" +#define XmNdirectoryValid "directoryValid" +#define XmNdisarmCallback "disarmCallback" +#define XmNdoubleClickInterval "doubleClickInterval" +#define XmNdragCallback "dragCallback" +#define XmNdragContextClass "dragContextClass" +#define XmNdragDropFinishCallback "dragDropFinishCallback" +#define XmNdragIconClass "dragIconClass" +#define XmNdragInitiatorProtocolStyle "dragInitiatorProtocolStyle" +#define XmNdragMotionCallback "dragMotionCallback" +#define XmNdragOperations "dragOperations" +#define XmNdragOverMode "dragOverMode" +#define XmNdragProc "dragProc" +#define XmNdragReceiverProtocolStyle "dragReceiverProtocolStyle" +#define XmNdropFinishCallback "dropFinishCallback" +#define XmNdropProc "dropProc" +#define XmNdropRectangles "dropRectangles" +#define XmNdropSiteActivity "dropSiteActivity" +#define XmNdropSiteEnterCallback "dropSiteEnterCallback" +#define XmNdropSiteLeaveCallback "dropSiteLeaveCallback" +#define XmNdropSiteManagerClass "dropSiteManagerClass" +#define XmNdropSiteOperations "dropSiteOperations" +#define XmNdropSiteType "dropSiteType" +#define XmNdropStartCallback "dropStartCallback" +#define XmNdropTransferClass "dropTransferClass" +#define XmNdropTransfers "dropTransfers" +#define XmNeditMode "editMode" +#define XmNeditable "editable" +#define XmNentryAlignment "entryAlignment" +#define XmNentryBorder "entryBorder" +#define XmNentryCallback "entryCallback" +#define XmNentryClass "entryClass" +#define XmNentryVerticalAlignment "entryVerticalAlignment" +#define XmNexportTargets "exportTargets" +#define XmNexposeCallback "exposeCallback" +#define XmNextendedSelectionCallback "extendedSelectionCallback" +#define XmNextensionType "extensionType" +#define XmNfileListItemCount "fileListItemCount" +#define XmNfileListItems "fileListItems" +#define XmNfileListLabelString "fileListLabelString" +#define XmNfileSearchProc "fileSearchProc" +#define XmNfileTypeMask "fileTypeMask" +#define XmNfillOnArm "fillOnArm" +#define XmNfillOnSelect "fillOnSelect" +#define XmNfilterLabelString "filterLabelString" +#define XmNfocusCallback "focusCallback" +#define XmNfocusMovedCallback "focusMovedCallback" +#define XmNfocusPolicyChanged "focusPolicyChanged" +#define XmNfontList "fontList" +#define XmNforegroundThreshold "foregroundThreshold" +#define XmNfractionBase "fractionBase" +#define XmNgainPrimaryCallback "gainPrimaryCallback" +#define XmNhelpCallback "helpCallback" +#define XmNhelpLabelString "helpLabelString" +#define XmNhighlightColor "highlightColor" +#define XmNhighlightOnEnter "highlightOnEnter" +#define XmNhighlightPixmap "highlightPixmap" +#define XmNhighlightThickness "highlightThickness" +#define XmNhistoryItemCount "historyItemCount" +#define XmNhistoryItems "historyItems" +#define XmNhistoryMaxItems "historyMaxItems" +#define XmNhistoryVisibleItemCount "historyVisibleItemCount" +#define XmNhorizontalFontUnit "horizontalFontUnit" +#define XmNhorizontalScrollBar "horizontalScrollBar" +#define XmNhorizontalSpacing "horizontalSpacing" +#define XmNhotX "hotX" +#define XmNhotY "hotY" +#define XmNiccHandle "iccHandle" +#define XmNimportTargets "importTargets" +#define XmNincrement "increment" +#define XmNincrementCallback "incrementCallback" +#define XmNincremental "incremental" +#define XmNindicatorOn "indicatorOn" +#define XmNindicatorSize "indicatorSize" +#define XmNindicatorType "indicatorType" +#define XmNinitialDelay "initialDelay" +#define XmNinitialFocus "initialFocus" +#define XmNinputCallback "inputCallback" +#define XmNinputCreate "inputCreate" +#define XmNinputMethod "inputMethod" +#define XmNinvalidCursorForeground "invalidCursorForeground" +#define XmNisAligned "isAligned" +#define XmNisHomogeneous "isHomogeneous" +#define XmNitemCount "itemCount" +#define XmNitems "items" +#define XmNkeyboardFocusPolicy "keyboardFocusPolicy" +#define XmNlabelFontList "labelFontList" +#define XmNlabelInsensitivePixmap "labelInsensitivePixmap" +#define XmNlabelPixmap "labelPixmap" +#define XmNlabelString "labelString" +#define XmNlabelType "labelType" +#define XmNleftAttachment "leftAttachment" +#define XmNleftOffset "leftOffset" +#define XmNleftPosition "leftPosition" +#define XmNleftWidget "leftWidget" +#define XmNlightThreshold "lightThreshold" +#define XmNlineSpace "lineSpace" +#define XmNlistItemCount "listItemCount" +#define XmNlistItems "listItems" +#define XmNlistLabelString "listLabelString" +#define XmNlistMarginHeight "listMarginHeight" +#define XmNlistMarginWidth "listMarginWidth" +#define XmNlistSizePolicy "listSizePolicy" +#define XmNlistSpacing "listSpacing" +#define XmNlistUpdated "listUpdated" +#define XmNlistVisibleItemCount "listVisibleItemCount" +#define XmNlogicalParent "logicalParent" +#define XmNlosePrimaryCallback "losePrimaryCallback" +#define XmNlosingFocusCallback "losingFocusCallback" +#define XmNmainWindowMarginHeight "mainWindowMarginHeight" +#define XmNmainWindowMarginWidth "mainWindowMarginWidth" +#define XmNmapCallback "mapCallback" +#define XmNmappingDelay "mappingDelay" +#define XmNmargin "margin" +#define XmNmarginBottom "marginBottom" +#define XmNmarginHeight "marginHeight" +#define XmNmarginLeft "marginLeft" +#define XmNmarginRight "marginRight" +#define XmNmarginTop "marginTop" +#define XmNmarginWidth "marginWidth" +#define XmNmask "mask" +#define XmNmaxLength "maxLength" +#define XmNmaximum "maximum" +#define XmNmenuAccelerator "menuAccelerator" +#define XmNmenuBar "menuBar" +#define XmNmenuCursor "menuCursor" +#define XmNmenuHelpWidget "menuHelpWidget" +#define XmNmenuHistory "menuHistory" +#define XmNmenuPost "menuPost" +#define XmNmessageAlignment "messageAlignment" +#define XmNmessageProc "messageProc" +#define XmNmessageString "messageString" +#define XmNmessageWindow "messageWindow" +#define XmNminimizeButtons "minimizeButtons" +#define XmNminimum "minimum" +#define XmNmnemonic "mnemonic" +#define XmNmnemonicCharSet "mnemonicCharSet" +#define XmNmodifyVerifyCallback "modifyVerifyCallback" +#define XmNmodifyVerifyCallbackWcs "modifyVerifyCallbackWcs" +#define XmNmotionVerifyCallback "motionVerifyCallback" +#define XmNmoveOpaque "moveOpaque" +#define XmNmultiClick "multiClick" +#define XmNmultipleSelectionCallback "multipleSelectionCallback" +#define XmNmustMatch "mustMatch" +#define XmNmwmDecorations "mwmDecorations" +#define XmNmwmFunctions "mwmFunctions" +#define XmNmwmInputMode "mwmInputMode" +#define XmNmwmMenu "mwmMenu" +#define XmNmwmMessages "mwmMessages" +#define XmNnavigationType "navigationType" +#define XmNneedsMotion "needsMotion" +#define XmNnoMatchCallback "noMatchCallback" +#define XmNnoMatchString "noMatchString" +#define XmNnoResize "noResize" +#define XmNnoneCursorForeground "noneCursorForeground" +#define XmNnotifyProc "notifyProc" +#define XmNnumColumns "numColumns" +#define XmNnumDropRectangles "numDropRectangles" +#define XmNnumDropTransfers "numDropTransfers" +#define XmNnumExportTargets "numExportTargets" +#define XmNnumImportTargets "numImportTargets" +#define XmNnumRectangles "numRectangles" +#define XmNoffsetX "offsetX" +#define XmNoffsetY "offsetY" +#define XmNokCallback "okCallback" +#define XmNokLabelString "okLabelString" +#define XmNoperationChangedCallback "operationChangedCallback" +#define XmNoperationCursorIcon "operationCursorIcon" +#define XmNoptionLabel "optionLabel" +#define XmNoptionMnemonic "optionMnemonic" +#define XmNoutputCreate "outputCreate" +#define XmNpacking "packing" +#define XmNpageDecrementCallback "pageDecrementCallback" +#define XmNpageIncrement "pageIncrement" +#define XmNpageIncrementCallback "pageIncrementCallback" +#define XmNpaneMaximum "paneMaximum" +#define XmNpaneMinimum "paneMinimum" +#define XmNpattern "pattern" +#define XmNpendingDelete "pendingDelete" +#define XmNpopupEnabled "popupEnabled" +#define XmNpositionIndex "positionIndex" +#define XmNpostFromButton "postFromButton" +#define XmNpostFromCount "postFromCount" +#define XmNpostFromList "postFromList" +#define XmNpreeditType "preeditType" +#define XmNprocessingDirection "processingDirection" +#define XmNpromptString "promptString" +#define XmNprotocolCallback "protocolCallback" +#define XmNpushButtonEnabled "pushButtonEnabled" +#define XmNqualifySearchDataProc "qualifySearchDataProc" +#define XmNradioAlwaysOne "radioAlwaysOne" +#define XmNradioBehavior "radioBehavior" +#define XmNrealizeCallback "realizeCallback" +#define XmNrecomputeSize "recomputeSize" +#define XmNrectangles "rectangles" +#define XmNrefigureMode "refigureMode" +#define XmNrepeatDelay "repeatDelay" +#define XmNresizable "resizable" +#define XmNresizeCallback "resizeCallback" +#define XmNresizeHeight "resizeHeight" +#define XmNresizePolicy "resizePolicy" +#define XmNresizeWidth "resizeWidth" +#define XmNrightAttachment "rightAttachment" +#define XmNrightOffset "rightOffset" +#define XmNrightPosition "rightPosition" +#define XmNrightWidget "rightWidget" +#define XmNrowColumnType "rowColumnType" +#define XmNrows "rows" +#define XmNrubberPositioning "rubberPositioning" +#define XmNsashHeight "sashHeight" +#define XmNsashIndent "sashIndent" +#define XmNsashShadowThickness "sashShadowThickness" +#define XmNsashWidth "sashWidth" +#define XmNscaleHeight "scaleHeight" +#define XmNscaleMultiple "scaleMultiple" +#define XmNscaleWidth "scaleWidth" +#define XmNscrollBarDisplayPolicy "scrollBarDisplayPolicy" +#define XmNscrollBarPlacement "scrollBarPlacement" +#define XmNscrollHorizontal "scrollHorizontal" +#define XmNscrollLeftSide "scrollLeftSide" +#define XmNscrollTopSide "scrollTopSide" +#define XmNscrollVertical "scrollVertical" +#define XmNscrolledWindowMarginHeight "scrolledWindowMarginHeight" +#define XmNscrolledWindowMarginWidth "scrolledWindowMarginWidth" +#define XmNscrollingPolicy "scrollingPolicy" +#define XmNselectColor "selectColor" +#define XmNselectInsensitivePixmap "selectInsensitivePixmap" +#define XmNselectPixmap "selectPixmap" +#define XmNselectThreshold "selectThreshold" +#define XmNselectedItemCount "selectedItemCount" +#define XmNselectedItems "selectedItems" +#define XmNselectionArrayCount "selectionArrayCount" +#define XmNselectionLabelString "selectionLabelString" +#define XmNselectionPolicy "selectionPolicy" +#define XmNseparatorOn "separatorOn" +#define XmNseparatorType "separatorType" +#define XmNset "set" +#define XmNshadow "shadow" +#define XmNshadowThickness "shadowThickness" +#define XmNshadowType "shadowType" +#define XmNshellUnitType "shellUnitType" +#define XmNshowArrows "showArrows" +#define XmNshowAsDefault "showAsDefault" +#define XmNshowSeparator "showSeparator" +#define XmNshowValue "showValue" +#define XmNsimpleCallback "simpleCallback" +#define XmNsingleSelectionCallback "singleSelectionCallback" +#define XmNsizePolicy "sizePolicy" +#define XmNskipAdjust "skipAdjust" +#define XmNsliderSize "sliderSize" +#define XmNsource "source" +#define XmNsourceCursorIcon "sourceCursorIcon" +#define XmNsourceIsExternal "sourceIsExternal" +#define XmNsourcePixmapIcon "sourcePixmapIcon" +#define XmNsourceWidget "sourceWidget" +#define XmNsourceWindow "sourceWindow" +#define XmNspacing "spacing" +#define XmNspotLocation "spotLocation" +#define XmNstartTime "startTime" +#define XmNstateCursorIcon "stateCursorIcon" +#define XmNstringDirection "stringDirection" +#define XmNsubMenuId "subMenuId" +#define XmNsymbolPixmap "symbolPixmap" +#define XmNtearOffMenuActivateCallback "tearOffMenuActivateCallback" +#define XmNtearOffMenuDeactivateCallback "tearOffMenuDeactivateCallback" +#define XmNtearOffModel "tearOffModel" +#define XmNtextAccelerators "textAccelerators" +#define XmNtextColumns "textColumns" +#define XmNtextFontList "textFontList" +#define XmNtextString "textString" +#define XmNtextTranslations "textTranslations" +#define XmNtextValue "textValue" +#define XmNtitleString "titleString" +#define XmNtoBottomCallback "toBottomCallback" +#define XmNtoPositionCallback "toPositionCallback" +#define XmNtoTopCallback "toTopCallback" +#define XmNtopAttachment "topAttachment" +#define XmNtopCharacter "topCharacter" +#define XmNtopItemPosition "topItemPosition" +#define XmNtopLevelEnterCallback "topLevelEnterCallback" +#define XmNtopLevelLeaveCallback "topLevelLeaveCallback" +#define XmNtopOffset "topOffset" +#define XmNtopPosition "topPosition" +#define XmNtopShadowColor "topShadowColor" +#define XmNtopShadowPixmap "topShadowPixmap" +#define XmNtopWidget "topWidget" +#define XmNtransferProc "transferProc" +#define XmNtransferStatus "transferStatus" +#define XmNtraversalCallback "traversalCallback" +#define XmNtraversalOn "traversalOn" +#define XmNtraversalType "traversalType" +#define XmNtraverseObscuredCallback "traverseObscuredCallback" +#define XmNtreeUpdateProc "treeUpdateProc" +#define XmNtroughColor "troughColor" +#define XmNunitType "unitType" +#define XmNunmapCallback "unmapCallback" +#define XmNunpostBehavior "unpostBehavior" +#define XmNunselectPixmap "unselectPixmap" +#define XmNupdateSliderSize "updateSliderSize" +#define XmNuseAsyncGeometry "useAsyncGeometry" +#define XmNuserData "userData" +#define XmNvalidCursorForeground "validCursorForeground" +#define XmNvalueChangedCallback "valueChangedCallback" +#define XmNvalueWcs "valueWcs" +#define XmNverifyBell "verifyBell" +#define XmNverticalFontUnit "verticalFontUnit" +#define XmNverticalScrollBar "verticalScrollBar" +#define XmNverticalSpacing "verticalSpacing" +#define XmNvisibleItemCount "visibleItemCount" +#define XmNvisibleWhenOff "visibleWhenOff" +#define XmNvisualPolicy "visualPolicy" +#define XmNwhichButton "whichButton" +#define XmNwordWrap "wordWrap" +#define XmNworkWindow "workWindow" +#define XmRAlignment "Alignment" +#define XmRAnimationMask "AnimationMask" +#define XmRAnimationPixmap "AnimationPixmap" +#define XmRAnimationStyle "AnimationStyle" +#define XmRArrowDirection "ArrowDirection" +#define XmRAtomList "AtomList" +#define XmRAttachment "Attachment" +#define XmRAudibleWarning "AudibleWarning" +#define XmRAvailability "Availability" +#define XmRBackgroundPixmap "BackgroundPixmap" +#define XmRBlendModel "BlendModel" +#define XmRBooleanDimension "BooleanDimension" +#define XmRBottomShadowPixmap "BottomShadowPixmap" +#define XmRButtonType "ButtonType" +#define XmRCallbackProc "CallbackProc" +#define XmRChar "Char" +#define XmRCharSetTable "CharSetTable" +#define XmRChildHorizontalAlignment "ChildHorizontalAlignment" +#define XmRChildPlacement "ChildPlacement" +#define XmRChildType "ChildType" +#define XmRChildVerticalAlignment "ChildVerticalAlignment" +#define XmRCommandWindowLocation "CommandWindowLocation" +#define XmRCompoundText "CompoundText" +#define XmRDefaultButtonType "DefaultButtonType" +#define XmRDeleteResponse "DeleteResponse" +#define XmRDialogStyle "DialogStyle" +#define XmRDialogType "DialogType" +#define XmRDoubleClickInterval "DoubleClickInterval" +#define XmRDragInitiatorProtocolStyle "DragInitiatorProtocolStyle" +#define XmRDragReceiverProtocolStyle "DragReceiverProtocolStyle" +#define XmRDropSiteActivity "DropSiteActivity" +#define XmRDropSiteOperations "DropSiteOperations" +#define XmRDropSiteType "DropSiteType" +#define XmRDropTransfers "DropTransfers" +#define XmRExtensionType "ExtensionType" +#define XmRFileTypeMask "FileTypeMask" +#define XmRFontList "FontList" +#define XmRGadgetPixmap "GadgetPixmap" +#define XmRHighlightPixmap "HighlightPixmap" +#define XmRHorizontalDimension "HorizontalDimension" +#define XmRHorizontalInt "HorizontalInt" +#define XmRHorizontalPosition "HorizontalPosition" +#define XmRIconAttachment "IconAttachment" +#define XmRImportTargets "ImportTargets" +#define XmRIndicatorType "IndicatorType" +#define XmRItemCount "ItemCount" +#define XmRItems "Items" +#define XmRKeySym "KeySym" +#define XmRKeySymTable "KeySymTable" +#define XmRKeyboardFocusPolicy "KeyboardFocusPolicy" +#define XmRLabelType "LabelType" +#define XmRListMarginHeight "ListMarginHeight" +#define XmRListMarginWidth "ListMarginWidth" +#define XmRListSizePolicy "ListSizePolicy" +#define XmRListSpacing "ListSpacing" +#define XmRManBottomShadowPixmap "ManBottomShadowPixmap" +#define XmRManForegroundPixmap "ManForegroundPixmap" +#define XmRManHighlightPixmap "ManHighlightPixmap" +#define XmRManTopShadowPixmap "ManTopShadowPixmap" +#define XmRMenuWidget "MenuWidget" +#define XmRMnemonic "Mnemonic" +#define XmRMultiClick "MultiClick" +#define XmRNavigationType "NavigationType" +#define XmRPacking "Packing" +#define XmRPrimForegroundPixmap "PrimForegroundPixmap" +#define XmRProc "Proc" +#define XmRProcessingDirection "ProcessingDirection" +#define XmRRectangleList "RectangleList" +#define XmRResizePolicy "ResizePolicy" +#define XmRRowColumnType "RowColumnType" +#define XmRScrollBarDisplayPolicy "ScrollBarDisplayPolicy" +#define XmRScrollBarPlacement "ScrollBarPlacement" +#define XmRScrollingPolicy "ScrollingPolicy" +#define XmRSelectedItemCount "SelectedItemCount" +#define XmRSelectedItems "SelectedItems" +#define XmRSelectionPolicy "SelectionPolicy" +#define XmRSelectionType "SelectionType" +#define XmRSeparatorType "SeparatorType" +#define XmRShadowType "ShadowType" +#define XmRShellHorizDim "ShellHorizDim" +#define XmRShellHorizPos "ShellHorizPos" +#define XmRShellUnitType "ShellUnitType" +#define XmRShellVertDim "ShellVertDim" +#define XmRShellVertPos "ShellVertPos" +#define XmRSizePolicy "SizePolicy" +#define XmRStringDirection "StringDirection" +#define XmRTearOffModel "TearOffModel" +#define XmRTopShadowPixmap "TopShadowPixmap" +#define XmRTransferStatus "TransferStatus" +#define XmRTraversalType "TraversalType" +#define XmRUnitType "UnitType" +#define XmRUnpostBehavior "UnpostBehavior" +#define XmRValueWcs "ValueWcs" +#define XmRVerticalAlignment "VerticalAlignment" +#define XmRVerticalDimension "VerticalDimension" +#define XmRVerticalInt "VerticalInt" +#define XmRVerticalPosition "VerticalPosition" +#define XmRVirtualBinding "VirtualBinding" +#define XmRVisibleItemCount "VisibleItemCount" +#define XmRVisualPolicy "VisualPolicy" +#define XmRWhichButton "WhichButton" +#define XmRXmBackgroundPixmap "XmBackgroundPixmap" +#define XmRXmString "XmString" +#define XmRXmStringCharSet "XmStringCharSet" +#define XmRXmStringTable "XmStringTable" +#define XmVosfActivate "osfActivate" +#define XmVosfAddMode "osfAddMode" +#define XmVosfBackSpace "osfBackSpace" +#define XmVosfBeginLine "osfBeginLine" +#define XmVosfCancel "osfCancel" +#define XmVosfClear "osfClear" +#define XmVosfCopy "osfCopy" +#define XmVosfCut "osfCut" +#define XmVosfDelete "osfDelete" +#define XmVosfDown "osfDown" +#define XmVosfEndLine "osfEndLine" +#define XmVosfHelp "osfHelp" +#define XmVosfInsert "osfInsert" +#define XmVosfLeft "osfLeft" +#define XmVosfMenu "osfMenu" +#define XmVosfMenuBar "osfMenuBar" +#define XmVosfPageDown "osfPageDown" +#define XmVosfPageLeft "osfPageLeft" +#define XmVosfPageRight "osfPageRight" +#define XmVosfPageUp "osfPageUp" +#define XmVosfPaste "osfPaste" +#define XmVosfPrimaryPaste "osfPrimaryPaste" +#define XmVosfQuickPaste "osfQuickPaste" +#define XmVosfRight "osfRight" +#define XmVosfSelect "osfSelect" +#define XmVosfUndo "osfUndo" +#define XmVosfUp "osfUp" +#define XmSFONTLIST_DEFAULT_TAG_STRING "FONTLIST_DEFAULT_TAG_STRING" +#define XmSXmFONTLIST_DEFAULT_TAG_STRING "XmFONTLIST_DEFAULT_TAG_STRING" +#define XmRTopItemPosition "TopItemPosition" +#define XmNtearOffTitle "tearOffTitle" +#define XmCTearOffTitle "TearOffTitle" +#define XmNpopupHandlerCallback "popupHandlerCallback" +#define XmNconvertCallback "convertCallback" +#define XmNdestinationCallback "destinationCallback" +#define XmNselectedItem "selectedItem" +#define XmCSelectedItem "SelectedItem" +#define XmNselectionCallback "selectionCallback" +#define XmNmatchBehavior "matchBehavior" +#define XmCMatchBehavior "MatchBehavior" +#define XmNnoFontCallback "noFontCallback" +#define XmNtextPath "textPath" +#define XmNeditingPath "editingPath" +#define XmCEditingPath "EditingPath" +#define XmNbidirectionalCursor "bidirectionalCursor" +#define XmCBidirectionalCursor "BidirectionalCursor" +#define XmNcollapsedStatePixmap "collapsedStatePixmap" +#define XmNdetailColumnHeading "detailColumnHeading" +#define XmNdetailCount "detailCount" +#define XmNdetailTabList "detailTabList" +#define XmNexpandedStatePixmap "expandedStatePixmap" +#define XmNlargeCellHeight "largeCellHeight" +#define XmNlargeCellWidth "largeCellWidth" +#define XmNlayoutType "layoutType" +#define XmNoutlineIndentation "outlineIndentation" +#define XmNoutlineLineStyle "outlineLineStyle" +#define XmNprimaryOwnership "primaryOwnership" +#define XmNselectionTechnique "selectionTechnique" +#define XmNsmallCellHeight "smallCellHeight" +#define XmNsmallCellWidth "smallCellWidth" +#define XmNspatialStyle "spatialStyle" +#define XmNentryParent "entryParent" +#define XmNlargeIconX "largeIconX" +#define XmNlargeIconY "largeIconY" +#define XmNsmallIconX "smallIconX" +#define XmNsmallIconY "smallIconY" +#define XmCCollapsedStatePixmap "CollapsedStatePixmap" +#define XmCDetailColumnHeading "DetailColumnHeading" +#define XmCDetailCount "DetailCount" +#define XmCDetailMask "DetailMask" +#define XmCEntryViewType "EntryViewType" +#define XmCLineStyle "LineStyle" +#define XmCDetailTabList "DetailTabList" +#define XmCExpandedStatePixmap "ExpandedStatePixmap" +#define XmCIncludeModel "IncludeModel" +#define XmCCellHeight "CellHeight" +#define XmCCellWidth "CellWidth" +#define XmCLayoutType "LayoutType" +#define XmCOutlineIndentation "OutlineIndentation" +#define XmCPlaceModel "PlaceModel" +#define XmCPrimaryOwnership "PrimaryOwnership" +#define XmCSelectionTechnique "SelectionTechnique" +#define XmCSpatialStyle "SpatialStyle" +#define XmCEntryDetail "EntryDetail" +#define XmCExpandState "ExpandState" +#define XmNlargeIcon "largeIcon" +#define XmNlargeIconMask "largeIconMask" +#define XmNlargeIconPixmap "largeIconPixmap" +#define XmNsmallIcon "smallIcon" +#define XmNsmallIconMask "smallIconMask" +#define XmNsmallIconPixmap "smallIconPixmap" +#define XmCIcon "Icon" +#define XmCViewType "ViewType" +#define XmCVisualEmphasis "VisualEmphasis" +#define XmNcurrentPageNumber "currentPageNumber" +#define XmNfirstPageNumber "firstPageNumber" +#define XmNlastPageNumber "lastPageNumber" +#define XmNbackPagePlacement "backPagePlacement" +#define XmNbackPageNumber "backPageNumber" +#define XmNbackPageSize "backPageSize" +#define XmNbackPageForeground "backPageForeground" +#define XmNbackPageBackground "backPageBackground" +#define XmNframeBackground "frameBackground" +#define XmNbindingType "bindingType" +#define XmNbindingPixmap "bindingPixmap" +#define XmNbindingWidth "bindingWidth" +#define XmNmajorTabSpacing "majorTabSpacing" +#define XmNminorTabSpacing "minorTabSpacing" +#define XmNinnerMarginWidth "innerMarginWidth" +#define XmNinnerMarginHeight "innerMarginHeight" +#define XmNframeShadowThickness "frameShadowThickness" +#define XmNpageNumber "pageNumber" +#define XmCCurrentPageNumber "CurrentPageNumber" +#define XmCFirstPageNumber "FirstPageNumber" +#define XmCLastPageNumber "LastPageNumber" +#define XmCBackPagePlacement "BackPagePlacement" +#define XmCBackPageNumber "BackPageNumber" +#define XmCBackPageSize "BackPageSize" +#define XmCBackPageForeground "BackPageForeground" +#define XmCBackPageBackground "BackPageBackground" +#define XmCFrameBackground "FrameBackground" +#define XmCBindingType "BindingType" +#define XmCBindingPixmap "BindingPixmap" +#define XmCBindingWidth "BindingWidth" +#define XmCMajorTabSpacing "MajorTabSpacing" +#define XmCMinorTabSpacing "MinorTabSpacing" +#define XmCInnerMarginWidth "InnerMarginWidth" +#define XmCInnerMarginHeight "InnerMarginHeight" +#define XmCPageChangeCallback "PageChangeCallback" +#define XmCPageNumber "PageNumber" +#define XmRArrowLayout "ArrowLayout" +#define XmRArrowSensitivity "ArrowSensitivity" +#define XmRSpinBoxChildType "SpinBoxChildType" +#define XmNarrowLayout "arrowLayout" +#define XmCArrowLayout "ArrowLayout" +#define XmNarrowSensitivity "arrowSensitivity" +#define XmCArrowSensitivity "ArrowSensitivity" +#define XmNdefaultArrowSensitivity "defaultArrowSensitivity" +#define XmCDefaultArrowSensitivity "DefaultArrowSensitivity" +#define XmNarrowSize "arrowSize" +#define XmCArrowSize "ArrowSize" +#define XmNspinBoxChildType "spinBoxChildType" +#define XmCSpinBoxChildType "SpinBoxChildType" +#define XmNposition "position" +#define XmNnumValues "numValues" +#define XmCNumValues "NumValues" +#define XmNvalues "values" +#define XmCValues "Values" +#define XmNminimumValue "minimumValue" +#define XmCMinimumValue "MinimumValue" +#define XmNmaximumValue "maximumValue" +#define XmCMaximumValue "MaximumValue" +#define XmNincrementValue "incrementValue" +#define XmCIncrementValue "IncrementValue" +#define XmRAutomaticSelection "AutomaticSelection" +#define XmRLineStyle "LineStyle" +#define XmREntryViewType "EntryViewType" +#define XmRDirection "Direction" +#define XmRLayoutType "LayoutType" +#define XmRPrimaryOwnership "PrimaryOwnership" +#define XmRSelectionTechnique "SelectionTechnique" +#define XmRSpatialStyle "SpatialStyle" +#define XmRTabList "TabList" +#define XmRViewType "ViewType" +#define XmRVisualEmphasis "VisualEmphasis" +#define XmRBindingType "BindingType" +#define XmRNBChildType "NBChildType" +#define XmNentryViewType "entryViewType" +#define XmNinsensitiveStippleBitmap "insensitiveStippleBitmap" +#define XmNlayoutDirection "layoutDirection" +#define XmNviewType "viewType" +#define XmNvisualEmphasis "visualEmphasis" +#define XmCLayoutDirection "LayoutDirection" +#define XmNsnapBackMultiple "snapBackMultiple" +#define XmNslidingMode "slidingMode" +#define XmNsliderVisual "sliderVisual" +#define XmNautoDragModel "autoDragModel" +#define XmNcolorCalculationProc "colorCalculationProc" +#define XmNbitmapConversionModel "bitmapConversionModel" +#define XmNcolorAllocationProc "colorAllocationProc" +#define XmNselectionMode "selectionMode" +#define XmNselectedPositions "selectedPositions" +#define XmNselectedPositionCount "selectedPositionCount" +#define XmCSnapBackMultiple "SnapBackMultiple" +#define XmCSliderVisual "SliderVisual" +#define XmCSlidingMode "SlidingMode" +#define XmCAutoDragModel "AutoDragModel" +#define XmCColorCalculationProc "ColorCalculationProc" +#define XmCBitmapConversionModel "BitmapConversionModel" +#define XmCColorAllocationProc "ColorAllocationProc" +#define XmCInsensitiveStippleBitmap "InsensitiveStippleBitmap" +#define XmCSelectionMode "SelectionMode" +#define XmCSelectedPositions "SelectedPositions" +#define XmCSelectedPositionCount "SelectedPositionCount" +#define XmRSlidingMode "SlidingMode" +#define XmRShowArrows "ShowArrows" +#define XmRSliderVisual "SliderVisual" +#define XmRShowValue "ShowValue" +#define XmRAutoDragModel "AutoDragModel" +#define XmRSWChildType "SWChildType" +#define XmRBitmapConversionModel "BitmapConversionModel" +#define XmRSelectionMode "SelectionMode" +#define XmNinputPolicy "inputPolicy" +#define XmCInputPolicy "InputPolicy" +#define XmRInputPolicy "InputPolicy" +#define XmNtoggleMode "toggleMode" +#define XmCToggleMode "ToggleMode" +#define XmRToggleMode "ToggleMode" +#define XmRIndicatorOn "IndicatorOn" +#define XmRSet "Set" +#define XmNindeterminatePixmap "indeterminatePixmap" +#define XmCIndeterminatePixmap "IndeterminatePixmap" +#define XmNunselectColor "unselectColor" +#define XmCUnselectColor "UnselectColor" +#define XmNselectedPosition "selectedPosition" +#define XmNarrowSpacing "arrowSpacing" +#define XmCArrowSpacing "ArrowSpacing" +#define XmRMatchBehavior "MatchBehavior" +#define XmRComboBoxType "ComboBoxType" +#define XmCSelectedPosition "SelectedPosition" +#define XmNenableWarp "enableWarp" +#define XmCEnableWarp "EnableWarp" +#define XmREnableWarp "EnableWarp" +#define XmNmotifVersion "motifVersion" +#define XmCMotifVersion "MotifVersion" +#define XmNdefaultGlyphPixmap "defaultGlyphPixmap" +#define XmCDefaultGlyphPixmap "DefaultGlyphPixmap" +#define XmCRendition "Rendition" +#define XmNtag "tag" +#define XmCTag "Tag" +#define XmNfontName "fontName" +#define XmCFontName "FontName" +#define XmNfontType "fontType" +#define XmCFontType "FontType" +#define XmRFontType "FontType" +#define XmNloadModel "loadModel" +#define XmCLoadModel "LoadModel" +#define XmRLoadModel "LoadModel" +#define XmNtabList "tabList" +#define XmCTabList "TabList" +#define XmRRenditionPixel "RenditionPixel" +#define XmNunderlineType "underlineType" +#define XmCUnderlineType "UnderlineType" +#define XmNstrikethruType "strikethruType" +#define XmCStrikethruType "StrikethruType" +#define XmRLineType "LineType" +#define XmNrenderTable "renderTable" +#define XmCRenderTable "RenderTable" +#define XmRRenderTable "RenderTable" +#define XmNbuttonRenderTable "buttonRenderTable" +#define XmCButtonRenderTable "ButtonRenderTable" +#define XmRButtonRenderTable "ButtonRenderTable" +#define XmNlabelRenderTable "labelRenderTable" +#define XmCLabelRenderTable "LabelRenderTable" +#define XmRLabelRenderTable "LabelRenderTable" +#define XmNtextRenderTable "textRenderTable" +#define XmCTextRenderTable "TextRenderTable" +#define XmRTextRenderTable "TextRenderTable" +#define XmNdragStartCallback "dragStartCallback" +#define XmNnoRenditionCallback "noRenditionCallback" +#define XmSXmAS_IS "XmAS_IS" +#define XmMIsWhiteSpaceMethod "IsWhiteSpaceMethod" +#define XmMIsScanBreakMethod "IsScanBreakMethod" +#define XmMCharDirection "CharDirection" +#define XmMInitialCharsDirection "InitialCharsDirection" +#define XmNpatternType "patternType" +#define XmNsubstitute "substitute" +#define XmNinvokeParseProc "invokeParseProc" +#define XmNincludeStatus "includeStatus" +#define XmVosfBackTab "osfBackTab" +#define XmVosfBeginData "osfBeginData" +#define XmVosfDeselectAll "osfDeselectAll" +#define XmVosfEndData "osfEndData" +#define XmVosfEscape "osfEscape" +#define XmVosfExtend "osfExtend" +#define XmVosfLeftLine "osfLeftLine" +#define XmVosfNext "osfNext" +#define XmVosfNextField "osfNextField" +#define XmVosfNextMenu "osfNextMenu" +#define XmVosfNextMinor "osfNextMinor" +#define XmVosfPrevField "osfPrevField" +#define XmVosfPrevMenu "osfPrevMenu" +#define XmVosfPrior "osfPrior" +#define XmVosfPriorMinor "osfPriorMinor" +#define XmVosfReselect "osfReselect" +#define XmVosfRestore "osfRestore" +#define XmVosfRightLine "osfRightLine" +#define XmVosfSelectAll "osfSelectAll" +#define XmVosfSwitchDirection "osfSwitchDirection" +#define XmNnotebookChildType "notebookChildType" +#define XmCNotebookChildType "NotebookChildType" +#define XmRNotebookChildType "NotebookChildType" +#define XmNscrolledWindowChildType "scrolledWindowChildType" +#define XmCScrolledWindowChildType "ScrolledWindowChildType" +#define XmRScrolledWindowChildType "ScrolledWindowChildType" +#define XmNselectedObjects "selectedObjects" +#define XmCSelectedObjects "SelectedObjects" +#define XmNselectedObjectCount "selectedObjectCount" +#define XmCSelectedObjectCount "SelectedObjectCount" +#define XmNcomboBoxType "comboBoxType" +#define XmCComboBoxType "ComboBoxType" +#define XmNtabValue "tabValue" +#define XmNoffsetModel "offsetModel" +#define XmNdecimal "decimal" +#define XmNdetail "detail" +#define XmCDetail "Detail" +#define XmNdetailCount "detailCount" +#define XmCDetailCount "DetailCount" +#define XmNcontainerID "containerID" +#define XmCContainerID "ContainerID" +#define XmSCLIENT_WINDOW "CLIENT_WINDOW" +#define XmSCLIP_TEMPORARY "CLIP_TEMPORARY" +#define XmSCLIPBOARD "CLIPBOARD" +#define XmSCOMPOUND_TEXT "COMPOUND_TEXT" +#define XmSDELETE "DELETE" +#define XmSFILE "FILE" +#define XmSFILE_NAME "FILE_NAME" +#define XmSINCR "INCR" +#define XmSINSERT_PROPERTY "INSERT_PROPERTY" +#define XmSINSERT_SELECTION "INSERT_SELECTION" +#define XmSLENGTH "LENGTH" +#define XmSLINK_SELECTION "LINK_SELECTION" +#define XmS_MOTIF_ATOM_0 "_MOTIF_ATOM_0" +#define XmS_MOTIF_BINDINGS "_MOTIF_BINDINGS" +#define XmS_MOTIF_DEFAULT_BINDINGS "_MOTIF_DEFAULT_BINDINGS" +#define XmS_MOTIF_CANCEL_DROP_EFFECT "_MOTIF_CANCEL_DROP_EFFECT" +#define XmS_MOTIF_CLIP_HEADER "_MOTIF_CLIP_HEADER" +#define XmS_MOTIF_CLIP_DATA_REQUEST "_MOTIF_CLIP_DATA_REQUEST" +#define XmS_MOTIF_CLIP_DATA_DELETE "_MOTIF_CLIP_DATA_DELETE" +#define XmS_MOTIF_CLIP_ITEM "_MOTIF_CLIP_ITEM" +#define XmS_MOTIF_CLIP_LOCK "_MOTIF_CLIP_LOCK" +#define XmS_MOTIF_CLIP_LOCK_ACCESS_VALID "_MOTIF_CLIP_LOCK_ACCESS_VALID" +#define XmS_MOTIF_CLIP_MESSAGE "_MOTIF_CLIP_MESSAGE" +#define XmS_MOTIF_CLIP_NEXT_ID "_MOTIF_CLIP_NEXT_ID" +#define XmS_MOTIF_CLIP_TIME "_MOTIF_CLIP_TIME" +#define XmS_MOTIF_CLIPBOARD_TARGETS "_MOTIF_CLIPBOARD_TARGETS" +#define XmS_MOTIF_COMPOUND_STRING "_MOTIF_COMPOUND_STRING" +#define XmS_MOTIF_DEFERRED_CLIPBOARD_TARGETS "_MOTIF_DEFERRED_CLIPBOARD_TARGETS" +#define XmS_MOTIF_DESTINATION "_MOTIF_DESTINATION" +#define XmS_MOTIF_DRAG_OFFSET "_MOTIF_DRAG_OFFSET" +#define XmS_MOTIF_DROP "_MOTIF_DROP" +#define XmS_MOTIF_ENCODING_REGISTRY "_MOTIF_ENCODING_REGISTRY" +#define XmS_MOTIF_EXPORT_TARGETS "_MOTIF_EXPORT_TARGETS" +#define XmS_MOTIF_LOSE_SELECTION "_MOTIF_LOSE_SELECTION" +#define XmS_MOTIF_RENDER_TABLE "_MOTIF_RENDER_TABLE" +#define XmS_MOTIF_WM_QUERY "_MOTIF_WM_QUERY" +#define XmS_MOTIF_WM_ALL_CLIENTS "_MOTIF_WM_ALL_CLIENTS" +#define XmSMULTIPLE "MULTIPLE" +#define XmSNULL "NULL" +#define XmSTARGETS "TARGETS" +#define XmSTEXT "TEXT" +#define XmSTIMESTAMP "TIMESTAMP" +#define XmSWM_STATE "WM_STATE" +#define XmSTRANSFER_SUCCESS "XmTRANSFER_SUCCESS" +#define XmSTRANSFER_FAILURE "XmTRANSFER_FAILURE" +#define XmNpathMode "pathMode" +#define XmRPathMode "PathMode" +#define XmCPathMode "PathMode" +#define XmNfileFilterStyle "fileFilterStyle" +#define XmRFileFilterStyle "FileFilterStyle" +#define XmCFileFilterStyle "FileFilterStyle" +#define XmNdirTextLabelString "dirTextLabelString" +#define XmCDirTextLabelString "DirTextLabelString" +#define XmNenableBtn1Transfer "enableBtn1Transfer" +#define XmCEnableBtn1Transfer "EnableBtn1Transfer" +#define XmNenableButtonTab "enableButtonTab" +#define XmCEnableButtonTab "EnableButtonTab" +#define XmNenableEtchedInMenu "enableEtchedInMenu" +#define XmCEnableEtchedInMenu "EnableEtchedInMenu" +#define XmNdefaultButtonEmphasis "defaultButtonEmphasis" +#define XmCDefaultButtonEmphasis "DefaultButtonEmphasis" +#define XmRDefaultButtonEmphasis "DefaultButtonEmphasis" +#define XmNenableToggleColor "enableToggleColor" +#define XmCEnableToggleColor "EnableToggleColor" +#define XmNenableToggleVisual "enableToggleVisual" +#define XmCEnableToggleVisual "EnableToggleVisual" +#define XmNenableDragIcon "enableDragIcon" +#define XmCEnableDragIcon "EnableDragIcon" +#define XmNenableUnselectableDrag "enableUnselectableDrag" +#define XmCEnableUnselectableDrag "EnableUnselectableDrag" +#define XmNdragOverActiveMode "dragOverActiveMode" +#define XmCDragOverActiveMode "DragOverActiveMode" +#define XmNinstallColormap "installColormap" +#define XmCInstallColormap "InstallColormap" +#define XmCOwnerEvents "OwnerEvents" +#define XmNownerEvents "ownerEvents" +#define XmCGrabStyle "GrabStyle" +#define XmNgrabStyle "grabStyle" +#define XmNforegroundState "foregroundState" +#define XmNbackgroundState "backgroundState" +#define XmCGroundState "GroundState" +#define XmRGroundState "GroundState" +#define XmRSelectColor "SelectColor" +#define XmRLargeIconPixmap "LargeIconPixmap" +#define XmRSmallIconPixmap "SmallIconPixmap" +#define XmNoutlineState "outlineState" +#define XmCOutlineState "OutlineState" +#define XmROutlineState "OutlineState" +#define XmNspatialIncludeModel "spatialIncludeModel" +#define XmCSpatialIncludeModel "SpatialIncludeModel" +#define XmRSpatialIncludeModel "SpatialIncludeModel" +#define XmNspatialResizeModel "spatialResizeModel" +#define XmCSpatialResizeModel "SpatialResizeModel" +#define XmRSpatialResizeModel "SpatialResizeModel" +#define XmNspatialSnapModel "spatialSnapModel" +#define XmCSpatialSnapModel "SpatialSnapModel" +#define XmRSpatialSnapModel "SpatialSnapModel" +#define XmNdetailColumnHeadingCount "detailColumnHeadingCount" +#define XmCDetailColumnHeadingCount "DetailColumnHeadingCount" +#define XmNdetailOrder "detailOrder" +#define XmCDetailOrder "DetailOrder" +#define XmRCardinalList "CardinalList" +#define XmNdetailOrderCount "detailOrderCount" +#define XmCDetailOrderCount "DetailOrderCount" +#define XmNoutlineColumnWidth "outlineColumnWidth" +#define XmCOutlineColumnWidth "OutlineColumnWidth" +#define XmNoutlineChangedCallback "outlineChangedCallback" +#define XmCOutlineChangedCallback "OutlineChangedCallback" +#define XmNoutlineButtonPolicy "outlineButtonPolicy" +#define XmCOutlineButtonPolicy "OutlineButtonPolicy" +#define XmROutlineButtonPolicy "OutlineButtonPolicy" +#define XmCDefaultVirtualBindings "DefaultVirtualBindings" +#define XmNdefaultVirtualBindings "defaultVirtualBindings" +#define XmCResizable "Resizable" +#define XmRDynamicPixmap "DynamicPixmap" +#define XmNpageChangedCallback "pageChangedCallback" +#define XmNarea "area" +#define XmNdetailShadowThickness "detailShadowThickness" +#define XmNsliderMark "sliderMark" +#define XmCSliderMark "SliderMark" +#define XmRSliderMark "SliderMark" +#define XmREnableBtn1Transfer "EnableBtn1Transfer" +#define XmNrenditionBackground "renditionBackground" +#define XmNrenditionForeground "renditionForeground" +#define XmCRenditionBackground "RenditionBackground" +#define XmCRenditionForeground "RenditionForeground" +#define XmNindeterminateInsensitivePixmap "indeterminateInsensitivePixmap" +#define XmCIndeterminateInsensitivePixmap "IndeterminateInsensitivePixmap" +#define XmNframeChildType "frameChildType" +#define XmCFrameChildType "FrameChildType" +#define XmNtextField "textField" +#define XmCTextField "TextField" +#define XmNenableThinThickness "enableThinThickness" +#define XmCEnableThinThickness "EnableThinThickness" +#define XmNprimaryColorSetId "primaryColorSetId" +#define XmCPrimaryColorSetId "PrimaryColorSetId" +#define XmNsecondaryColorSetId "secondaryColorSetId" +#define XmCSecondaryColorSetId "SecondaryColorSetId" +#define XmNtextColorSetId "textColorSetId" +#define XmCTextColorSetId "TextColorSetId" +#define XmNactiveColorSetId "activeColorSetId" +#define XmCActiveColorSetId "ActiveColorSetId" +#define XmNinactiveColorSetId "inactiveColorSetId" +#define XmCInactiveColorSetId "InactiveColorSetId" +#define XmNuseColorObj "useColorObj" +#define XmCUseColorObj "UseColorObj" +#define XmNuseTextColor "useTextColor" +#define XmCUseTextColor "UseTextColor" +#define XmNuseTextColorForList "useTextColorForList" +#define XmCUseTextColorForList "UseTextColorForList" +#define XmNuseMask "useMask" +#define XmCUseMask "UseMask" +#define XmNuseMultiColorIcons "useMultiColorIcons" +#define XmCUseMultiColorIcons "UseMultiColorIcons" +#define XmNuseIconFileCache "useIconFileCache" +#define XmCUseIconFileCache "UseIconFileCache" +#define XmSPIXEL_SET "Pixel Sets" +#define XmSCUSTOMIZE_DATA "Customize Data:" +#define XmSCOLOR_SRV_NAME "ColorServer" +#define XmNlist "list" +#define XmCList "List" +#define XmNarrowOrientation "arrowOrientation" +#define XmCArrowOrientation "ArrowOrientation" +#define XmRArrowOrientation "ArrowOrientation" +#define XmNpositionType "positionType" +#define XmCPositionType "PositionType" +#define XmRPositionType "PositionType" +#define XmNwrap "wrap" +#define XmCWrap "Wrap" +#define XmNpositionMode "positionMode" +#define XmCPositionMode "PositionMode" +#define XmRPositionMode "PositionMode" +#define XmNprintOrientation "printOrientation" +#define XmCPrintOrientation "PrintOrientation" +#define XmNprintOrientations "printOrientations" +#define XmCPrintOrientations "PrintOrientations" +#define XmNprintResolution "printResolution" +#define XmCPrintResolution "PrintResolution" +#define XmNprintResolutions "printResolutions" +#define XmCPrintResolutions "PrintResolutions" +#define XmNdefaultPixmapResolution "defaultPixmapResolution" +#define XmCDefaultPixmapResolution "DefaultPixmapResolution" +#define XmNstartJobCallback "startJobCallback" +#define XmNendJobCallback "endJobCallback" +#define XmNpageSetupCallback "pageSetupCallback" +#define XmNpdmNotificationCallback "pdmNotificationCallback" +#define XmNminX "minX" +#define XmNminY "minY" +#define XmNmaxX "maxX" +#define XmNmaxY "maxY" +#define XmCMinX "MinX" +#define XmCMinY "MinY" +#define XmCMaxX "MaxX" +#define XmCMaxY "MaxY" +#define XmNpreeditStartCallback "preeditStartCallback" +#define XmNpreeditDoneCallback "preeditDoneCallback" +#define XmNpreeditDrawCallback "preeditDrawCallback" +#define XmNpreeditCaretCallback "preeditCaretCallback" +#define XmNverifyPreedit "verifyPreedit" +#define XmCVerifyPreedit "VerifyPreedit" +#define XmNenableMultiKeyBindings "enableMultiKeyBindings" +#define XmCEnableMultiKeyBindings "EnableMultiKeyBindings" +#define XmRButtonFontList "ButtonFontList" +#define XmRLabelFontList "LabelFontList" +#define XmRTextFontList "TextFontList" +#define XmSPIXEL_SET_PROP "SDT Pixel Set" +#define XmS50_foreground "50_foreground" +#define XmSunspecified_pixmap "unspecified_pixmap" +#else +externalref _XmConst char _XmStrings[]; +#ifndef XmS +#define XmS ((char*)&_XmStrings[0]) +#endif +#ifndef XmCAccelerator +#define XmCAccelerator ((char*)&_XmStrings[1]) +#endif +#ifndef XmCAcceleratorText +#define XmCAcceleratorText ((char*)&_XmStrings[13]) +#endif +#ifndef XmCAdjustLast +#define XmCAdjustLast ((char*)&_XmStrings[29]) +#endif +#ifndef XmCAdjustMargin +#define XmCAdjustMargin ((char*)&_XmStrings[40]) +#endif +#ifndef XmCAlignment +#define XmCAlignment ((char*)&_XmStrings[53]) +#endif +#ifndef XmCAllowOverlap +#define XmCAllowOverlap ((char*)&_XmStrings[63]) +#endif +#ifndef XmCAllowUnusedSpace +#define XmCAllowUnusedSpace ((char*)&_XmStrings[76]) +#endif +#ifndef XmCAnimationMask +#define XmCAnimationMask ((char*)&_XmStrings[93]) +#endif +#ifndef XmCAnimationPixmap +#define XmCAnimationPixmap ((char*)&_XmStrings[107]) +#endif +#ifndef XmCAnimationPixmapDepth +#define XmCAnimationPixmapDepth ((char*)&_XmStrings[123]) +#endif +#ifndef XmCAnimationStyle +#define XmCAnimationStyle ((char*)&_XmStrings[144]) +#endif +#ifndef XmCApplyLabelString +#define XmCApplyLabelString ((char*)&_XmStrings[159]) +#endif +#ifndef XmCArmCallback +#define XmCArmCallback ((char*)&_XmStrings[176]) +#endif +#ifndef XmCArmColor +#define XmCArmColor ((char*)&_XmStrings[188]) +#endif +#ifndef XmCArmPixmap +#define XmCArmPixmap ((char*)&_XmStrings[197]) +#endif +#ifndef XmCArrowDirection +#define XmCArrowDirection ((char*)&_XmStrings[207]) +#endif +#ifndef XmCAttachment +#define XmCAttachment ((char*)&_XmStrings[222]) +#endif +#ifndef XmCAudibleWarning +#define XmCAudibleWarning ((char*)&_XmStrings[233]) +#endif +#ifndef XmCAutoShowCursorPosition +#define XmCAutoShowCursorPosition ((char*)&_XmStrings[248]) +#endif +#ifndef XmCAutoUnmanage +#define XmCAutoUnmanage ((char*)&_XmStrings[271]) +#endif +#ifndef XmCAutomaticSelection +#define XmCAutomaticSelection ((char*)&_XmStrings[284]) +#endif +#ifndef XmCAvailability +#define XmCAvailability ((char*)&_XmStrings[303]) +#endif +#ifndef XmCBackgroundPixmap +#define XmCBackgroundPixmap ((char*)&_XmStrings[316]) +#endif +#ifndef XmCBlendModel +#define XmCBlendModel ((char*)&_XmStrings[333]) +#endif +#ifndef XmCBlinkRate +#define XmCBlinkRate ((char*)&_XmStrings[344]) +#endif +#ifndef XmCBottomShadowColor +#define XmCBottomShadowColor ((char*)&_XmStrings[354]) +#endif +#ifndef XmCBottomShadowPixmap +#define XmCBottomShadowPixmap ((char*)&_XmStrings[372]) +#endif +#ifndef XmCButtonAcceleratorText +#define XmCButtonAcceleratorText ((char*)&_XmStrings[391]) +#endif +#ifndef XmCButtonAccelerators +#define XmCButtonAccelerators ((char*)&_XmStrings[413]) +#endif +#ifndef XmCButtonCount +#define XmCButtonCount ((char*)&_XmStrings[432]) +#endif +#ifndef XmCButtonFontList +#define XmCButtonFontList ((char*)&_XmStrings[444]) +#endif +#ifndef XmCButtonMnemonicCharSets +#define XmCButtonMnemonicCharSets ((char*)&_XmStrings[459]) +#endif +#ifndef XmCButtonMnemonics +#define XmCButtonMnemonics ((char*)&_XmStrings[482]) +#endif +#ifndef XmCButtonSet +#define XmCButtonSet ((char*)&_XmStrings[498]) +#endif +#ifndef XmCButtonType +#define XmCButtonType ((char*)&_XmStrings[508]) +#endif +#ifndef XmCButtons +#define XmCButtons ((char*)&_XmStrings[519]) +#endif +#ifndef XmCCancelLabelString +#define XmCCancelLabelString ((char*)&_XmStrings[527]) +#endif +#ifndef XmCChildHorizontalAlignment +#define XmCChildHorizontalAlignment ((char*)&_XmStrings[545]) +#endif +#ifndef XmCChildHorizontalSpacing +#define XmCChildHorizontalSpacing ((char*)&_XmStrings[570]) +#endif +#ifndef XmCChildPlacement +#define XmCChildPlacement ((char*)&_XmStrings[593]) +#endif +#ifndef XmCChildType +#define XmCChildType ((char*)&_XmStrings[608]) +#endif +#ifndef XmCChildVerticalAlignment +#define XmCChildVerticalAlignment ((char*)&_XmStrings[618]) +#endif +#ifndef XmCChildren +#define XmCChildren ((char*)&_XmStrings[641]) +#endif +#ifndef XmCClientData +#define XmCClientData ((char*)&_XmStrings[650]) +#endif +#ifndef XmCClipWindow +#define XmCClipWindow ((char*)&_XmStrings[661]) +#endif +#ifndef XmCColumns +#define XmCColumns ((char*)&_XmStrings[672]) +#endif +#ifndef XmCCommandWindow +#define XmCCommandWindow ((char*)&_XmStrings[680]) +#endif +#ifndef XmCCommandWindowLocation +#define XmCCommandWindowLocation ((char*)&_XmStrings[694]) +#endif +#ifndef XmCConvertProc +#define XmCConvertProc ((char*)&_XmStrings[716]) +#endif +#ifndef XmCCursorBackground +#define XmCCursorBackground ((char*)&_XmStrings[728]) +#endif +#ifndef XmCCursorForeground +#define XmCCursorForeground ((char*)&_XmStrings[745]) +#endif +#ifndef XmCCursorPosition +#define XmCCursorPosition ((char*)&_XmStrings[762]) +#endif +#ifndef XmCCursorPositionVisible +#define XmCCursorPositionVisible ((char*)&_XmStrings[777]) +#endif +#ifndef XmCDarkThreshold +#define XmCDarkThreshold ((char*)&_XmStrings[799]) +#endif +#ifndef XmCDecimalPoints +#define XmCDecimalPoints ((char*)&_XmStrings[813]) +#endif +#ifndef XmCDefaultButtonShadowThickness +#define XmCDefaultButtonShadowThickness ((char*)&_XmStrings[827]) +#endif +#ifndef XmCDefaultButtonType +#define XmCDefaultButtonType ((char*)&_XmStrings[856]) +#endif +#ifndef XmCDefaultCopyCursorIcon +#define XmCDefaultCopyCursorIcon ((char*)&_XmStrings[874]) +#endif +#ifndef XmCDefaultFontList +#define XmCDefaultFontList ((char*)&_XmStrings[896]) +#endif +#ifndef XmCDefaultInvalidCursorIcon +#define XmCDefaultInvalidCursorIcon ((char*)&_XmStrings[912]) +#endif +#ifndef XmCDefaultLinkCursorIcon +#define XmCDefaultLinkCursorIcon ((char*)&_XmStrings[937]) +#endif +#ifndef XmCDefaultMoveCursorIcon +#define XmCDefaultMoveCursorIcon ((char*)&_XmStrings[959]) +#endif +#ifndef XmCDefaultNoneCursorIcon +#define XmCDefaultNoneCursorIcon ((char*)&_XmStrings[981]) +#endif +#ifndef XmCDefaultPosition +#define XmCDefaultPosition ((char*)&_XmStrings[1003]) +#endif +#ifndef XmCDefaultSourceCursorIcon +#define XmCDefaultSourceCursorIcon ((char*)&_XmStrings[1019]) +#endif +#ifndef XmCDefaultValidCursorIcon +#define XmCDefaultValidCursorIcon ((char*)&_XmStrings[1043]) +#endif +#ifndef XmCDeleteResponse +#define XmCDeleteResponse ((char*)&_XmStrings[1066]) +#endif +#ifndef XmCDesktopParent +#define XmCDesktopParent ((char*)&_XmStrings[1081]) +#endif +#ifndef XmCDialogStyle +#define XmCDialogStyle ((char*)&_XmStrings[1095]) +#endif +#ifndef XmCDialogTitle +#define XmCDialogTitle ((char*)&_XmStrings[1107]) +#endif +#ifndef XmCDialogType +#define XmCDialogType ((char*)&_XmStrings[1119]) +#endif +#ifndef XmCDirListItemCount +#define XmCDirListItemCount ((char*)&_XmStrings[1130]) +#endif +#ifndef XmCDirListItems +#define XmCDirListItems ((char*)&_XmStrings[1147]) +#endif +#ifndef XmCDirListLabelString +#define XmCDirListLabelString ((char*)&_XmStrings[1160]) +#endif +#ifndef XmCDirMask +#define XmCDirMask ((char*)&_XmStrings[1179]) +#endif +#ifndef XmCDirSearchProc +#define XmCDirSearchProc ((char*)&_XmStrings[1187]) +#endif +#ifndef XmCDirSpec +#define XmCDirSpec ((char*)&_XmStrings[1201]) +#endif +#ifndef XmCDirectory +#define XmCDirectory ((char*)&_XmStrings[1209]) +#endif +#ifndef XmCDirectoryValid +#define XmCDirectoryValid ((char*)&_XmStrings[1219]) +#endif +#ifndef XmCDisarmCallback +#define XmCDisarmCallback ((char*)&_XmStrings[1234]) +#endif +#ifndef XmCDoubleClickInterval +#define XmCDoubleClickInterval ((char*)&_XmStrings[1249]) +#endif +#ifndef XmCDragContextClass +#define XmCDragContextClass ((char*)&_XmStrings[1269]) +#endif +#ifndef XmCDragDropFinishCallback +#define XmCDragDropFinishCallback ((char*)&_XmStrings[1286]) +#endif +#ifndef XmCDragIconClass +#define XmCDragIconClass ((char*)&_XmStrings[1309]) +#endif +#ifndef XmCDragInitiatorProtocolStyle +#define XmCDragInitiatorProtocolStyle ((char*)&_XmStrings[1323]) +#endif +#ifndef XmCDragMotionCallback +#define XmCDragMotionCallback ((char*)&_XmStrings[1350]) +#endif +#ifndef XmCDragOperations +#define XmCDragOperations ((char*)&_XmStrings[1369]) +#endif +#ifndef XmCDragOverMode +#define XmCDragOverMode ((char*)&_XmStrings[1384]) +#endif +#ifndef XmCDragProc +#define XmCDragProc ((char*)&_XmStrings[1397]) +#endif +#ifndef XmCDragReceiverProtocolStyle +#define XmCDragReceiverProtocolStyle ((char*)&_XmStrings[1406]) +#endif +#ifndef XmCDropProc +#define XmCDropProc ((char*)&_XmStrings[1432]) +#endif +#ifndef XmCDropRectangles +#define XmCDropRectangles ((char*)&_XmStrings[1441]) +#endif +#ifndef XmCDropSiteActivity +#define XmCDropSiteActivity ((char*)&_XmStrings[1456]) +#endif +#ifndef XmCDropSiteEnterCallback +#define XmCDropSiteEnterCallback ((char*)&_XmStrings[1473]) +#endif +#ifndef XmCDropSiteLeaveCallback +#define XmCDropSiteLeaveCallback ((char*)&_XmStrings[1495]) +#endif +#ifndef XmCDropSiteManagerClass +#define XmCDropSiteManagerClass ((char*)&_XmStrings[1517]) +#endif +#ifndef XmCDropSiteOperations +#define XmCDropSiteOperations ((char*)&_XmStrings[1538]) +#endif +#ifndef XmCDropSiteType +#define XmCDropSiteType ((char*)&_XmStrings[1557]) +#endif +#ifndef XmCDropStartCallback +#define XmCDropStartCallback ((char*)&_XmStrings[1570]) +#endif +#ifndef XmCDropTransferClass +#define XmCDropTransferClass ((char*)&_XmStrings[1588]) +#endif +#ifndef XmCDropTransfers +#define XmCDropTransfers ((char*)&_XmStrings[1606]) +#endif +#ifndef XmCEditable +#define XmCEditable ((char*)&_XmStrings[1620]) +#endif +#ifndef XmCEntryBorder +#define XmCEntryBorder ((char*)&_XmStrings[1629]) +#endif +#ifndef XmCEntryClass +#define XmCEntryClass ((char*)&_XmStrings[1641]) +#endif +#ifndef XmCExportTargets +#define XmCExportTargets ((char*)&_XmStrings[1652]) +#endif +#ifndef XmCExposeCallback +#define XmCExposeCallback ((char*)&_XmStrings[1666]) +#endif +#ifndef XmCExtensionType +#define XmCExtensionType ((char*)&_XmStrings[1681]) +#endif +#ifndef XmCFileListItemCount +#define XmCFileListItemCount ((char*)&_XmStrings[1695]) +#endif +#ifndef XmCFileListItems +#define XmCFileListItems ((char*)&_XmStrings[1713]) +#endif +#ifndef XmCFileListLabelString +#define XmCFileListLabelString ((char*)&_XmStrings[1727]) +#endif +#ifndef XmCFileSearchProc +#define XmCFileSearchProc ((char*)&_XmStrings[1747]) +#endif +#ifndef XmCFileTypeMask +#define XmCFileTypeMask ((char*)&_XmStrings[1762]) +#endif +#ifndef XmCFillOnArm +#define XmCFillOnArm ((char*)&_XmStrings[1775]) +#endif +#ifndef XmCFillOnSelect +#define XmCFillOnSelect ((char*)&_XmStrings[1785]) +#endif +#ifndef XmCFilterLabelString +#define XmCFilterLabelString ((char*)&_XmStrings[1798]) +#endif +#ifndef XmCFontList +#define XmCFontList ((char*)&_XmStrings[1816]) +#endif +#ifndef XmCForegroundThreshold +#define XmCForegroundThreshold ((char*)&_XmStrings[1825]) +#endif +#ifndef XmCHelpLabelString +#define XmCHelpLabelString ((char*)&_XmStrings[1845]) +#endif +#ifndef XmCHighlightColor +#define XmCHighlightColor ((char*)&_XmStrings[1861]) +#endif +#ifndef XmCHighlightOnEnter +#define XmCHighlightOnEnter ((char*)&_XmStrings[1876]) +#endif +#ifndef XmCHighlightPixmap +#define XmCHighlightPixmap ((char*)&_XmStrings[1893]) +#endif +#ifndef XmCHighlightThickness +#define XmCHighlightThickness ((char*)&_XmStrings[1909]) +#endif +#ifndef XmCHorizontalFontUnit +#define XmCHorizontalFontUnit ((char*)&_XmStrings[1928]) +#endif +#ifndef XmCHorizontalScrollBar +#define XmCHorizontalScrollBar ((char*)&_XmStrings[1947]) +#endif +#ifndef XmCHot +#define XmCHot ((char*)&_XmStrings[1967]) +#endif +#ifndef XmCICCHandle +#define XmCICCHandle ((char*)&_XmStrings[1971]) +#endif +#ifndef XmCImportTargets +#define XmCImportTargets ((char*)&_XmStrings[1981]) +#endif +#ifndef XmCIncrement +#define XmCIncrement ((char*)&_XmStrings[1995]) +#endif +#ifndef XmCIncremental +#define XmCIncremental ((char*)&_XmStrings[2005]) +#endif +#ifndef XmCIndicatorOn +#define XmCIndicatorOn ((char*)&_XmStrings[2017]) +#endif +#ifndef XmCIndicatorSize +#define XmCIndicatorSize ((char*)&_XmStrings[2029]) +#endif +#ifndef XmCIndicatorType +#define XmCIndicatorType ((char*)&_XmStrings[2043]) +#endif +#ifndef XmCInitialDelay +#define XmCInitialDelay ((char*)&_XmStrings[2057]) +#endif +#ifndef XmCInitialFocus +#define XmCInitialFocus ((char*)&_XmStrings[2070]) +#endif +#ifndef XmCInputCreate +#define XmCInputCreate ((char*)&_XmStrings[2083]) +#endif +#ifndef XmCInputMethod +#define XmCInputMethod ((char*)&_XmStrings[2095]) +#endif +#ifndef XmCInvalidCursorForeground +#define XmCInvalidCursorForeground ((char*)&_XmStrings[2107]) +#endif +#ifndef XmCIsAligned +#define XmCIsAligned ((char*)&_XmStrings[2131]) +#endif +#ifndef XmCIsHomogeneous +#define XmCIsHomogeneous ((char*)&_XmStrings[2141]) +#endif +#ifndef XmCItemCount +#define XmCItemCount ((char*)&_XmStrings[2155]) +#endif +#ifndef XmCItems +#define XmCItems ((char*)&_XmStrings[2165]) +#endif +#ifndef XmCKeyboardFocusPolicy +#define XmCKeyboardFocusPolicy ((char*)&_XmStrings[2171]) +#endif +#ifndef XmCLabelFontList +#define XmCLabelFontList ((char*)&_XmStrings[2191]) +#endif +#ifndef XmCLabelInsensitivePixmap +#define XmCLabelInsensitivePixmap ((char*)&_XmStrings[2205]) +#endif +#ifndef XmCLabelPixmap +#define XmCLabelPixmap ((char*)&_XmStrings[2228]) +#endif +#ifndef XmCLabelString +#define XmCLabelString ((char*)&_XmStrings[2240]) +#endif +#ifndef XmCLabelType +#define XmCLabelType ((char*)&_XmStrings[2252]) +#endif +#ifndef XmCLightThreshold +#define XmCLightThreshold ((char*)&_XmStrings[2262]) +#endif +#ifndef XmCListLabelString +#define XmCListLabelString ((char*)&_XmStrings[2277]) +#endif +#ifndef XmCListMarginHeight +#define XmCListMarginHeight ((char*)&_XmStrings[2293]) +#endif +#ifndef XmCListMarginWidth +#define XmCListMarginWidth ((char*)&_XmStrings[2310]) +#endif +#ifndef XmCListSizePolicy +#define XmCListSizePolicy ((char*)&_XmStrings[2326]) +#endif +#ifndef XmCListSpacing +#define XmCListSpacing ((char*)&_XmStrings[2341]) +#endif +#ifndef XmCListUpdated +#define XmCListUpdated ((char*)&_XmStrings[2353]) +#endif +#ifndef XmCLogicalParent +#define XmCLogicalParent ((char*)&_XmStrings[2365]) +#endif +#ifndef XmCMainWindowMarginHeight +#define XmCMainWindowMarginHeight ((char*)&_XmStrings[2379]) +#endif +#ifndef XmCMainWindowMarginWidth +#define XmCMainWindowMarginWidth ((char*)&_XmStrings[2402]) +#endif +#ifndef XmCMappingDelay +#define XmCMappingDelay ((char*)&_XmStrings[2424]) +#endif +#ifndef XmCMarginBottom +#define XmCMarginBottom ((char*)&_XmStrings[2437]) +#endif +#ifndef XmCMarginHeight +#define XmCMarginHeight ((char*)&_XmStrings[2450]) +#endif +#ifndef XmCMarginLeft +#define XmCMarginLeft ((char*)&_XmStrings[2463]) +#endif +#ifndef XmCMarginRight +#define XmCMarginRight ((char*)&_XmStrings[2474]) +#endif +#ifndef XmCMarginTop +#define XmCMarginTop ((char*)&_XmStrings[2486]) +#endif +#ifndef XmCMarginWidth +#define XmCMarginWidth ((char*)&_XmStrings[2496]) +#endif +#ifndef XmCMask +#define XmCMask ((char*)&_XmStrings[2508]) +#endif +#ifndef XmCMaxItems +#define XmCMaxItems ((char*)&_XmStrings[2513]) +#endif +#ifndef XmCMaxLength +#define XmCMaxLength ((char*)&_XmStrings[2522]) +#endif +#ifndef XmCMaxValue +#define XmCMaxValue ((char*)&_XmStrings[2532]) +#endif +#ifndef XmCMaximum +#define XmCMaximum ((char*)&_XmStrings[2541]) +#endif +#ifndef XmCMenuBar +#define XmCMenuBar ((char*)&_XmStrings[2549]) +#endif +#ifndef XmCMenuPost +#define XmCMenuPost ((char*)&_XmStrings[2557]) +#endif +#ifndef XmCMenuWidget +#define XmCMenuWidget ((char*)&_XmStrings[2566]) +#endif +#ifndef XmCMessageProc +#define XmCMessageProc ((char*)&_XmStrings[2577]) +#endif +#ifndef XmCMessageWindow +#define XmCMessageWindow ((char*)&_XmStrings[2589]) +#endif +#ifndef XmCMinimizeButtons +#define XmCMinimizeButtons ((char*)&_XmStrings[2603]) +#endif +#ifndef XmCMinimum +#define XmCMinimum ((char*)&_XmStrings[2619]) +#endif +#ifndef XmCMnemonic +#define XmCMnemonic ((char*)&_XmStrings[2627]) +#endif +#ifndef XmCMnemonicCharSet +#define XmCMnemonicCharSet ((char*)&_XmStrings[2636]) +#endif +#ifndef XmCMoveOpaque +#define XmCMoveOpaque ((char*)&_XmStrings[2652]) +#endif +#ifndef XmCMultiClick +#define XmCMultiClick ((char*)&_XmStrings[2663]) +#endif +#ifndef XmCMustMatch +#define XmCMustMatch ((char*)&_XmStrings[2674]) +#endif +#ifndef XmCMwmDecorations +#define XmCMwmDecorations ((char*)&_XmStrings[2684]) +#endif +#ifndef XmCMwmFunctions +#define XmCMwmFunctions ((char*)&_XmStrings[2699]) +#endif +#ifndef XmCMwmInputMode +#define XmCMwmInputMode ((char*)&_XmStrings[2712]) +#endif +#ifndef XmCMwmMenu +#define XmCMwmMenu ((char*)&_XmStrings[2725]) +#endif +#ifndef XmCMwmMessages +#define XmCMwmMessages ((char*)&_XmStrings[2733]) +#endif +#ifndef XmCNavigationType +#define XmCNavigationType ((char*)&_XmStrings[2745]) +#endif +#ifndef XmCNeedsMotion +#define XmCNeedsMotion ((char*)&_XmStrings[2760]) +#endif +#ifndef XmCNoMatchString +#define XmCNoMatchString ((char*)&_XmStrings[2772]) +#endif +#ifndef XmCNoResize +#define XmCNoResize ((char*)&_XmStrings[2786]) +#endif +#ifndef XmCNoneCursorForeground +#define XmCNoneCursorForeground ((char*)&_XmStrings[2795]) +#endif +#ifndef XmCNotifyProc +#define XmCNotifyProc ((char*)&_XmStrings[2816]) +#endif +#ifndef XmCNumChildren +#define XmCNumChildren ((char*)&_XmStrings[2827]) +#endif +#ifndef XmCNumColumns +#define XmCNumColumns ((char*)&_XmStrings[2839]) +#endif +#ifndef XmCNumDropRectangles +#define XmCNumDropRectangles ((char*)&_XmStrings[2850]) +#endif +#ifndef XmCNumDropTransfers +#define XmCNumDropTransfers ((char*)&_XmStrings[2868]) +#endif +#ifndef XmCNumExportTargets +#define XmCNumExportTargets ((char*)&_XmStrings[2885]) +#endif +#ifndef XmCNumImportTargets +#define XmCNumImportTargets ((char*)&_XmStrings[2902]) +#endif +#ifndef XmCOffset +#define XmCOffset ((char*)&_XmStrings[2919]) +#endif +#ifndef XmCOkLabelString +#define XmCOkLabelString ((char*)&_XmStrings[2926]) +#endif +#ifndef XmCOperationChangedCallback +#define XmCOperationChangedCallback ((char*)&_XmStrings[2940]) +#endif +#ifndef XmCOperationCursorIcon +#define XmCOperationCursorIcon ((char*)&_XmStrings[2965]) +#endif +#ifndef XmCOptionLabel +#define XmCOptionLabel ((char*)&_XmStrings[2985]) +#endif +#ifndef XmCOptionMnemonic +#define XmCOptionMnemonic ((char*)&_XmStrings[2997]) +#endif +#ifndef XmCOutputCreate +#define XmCOutputCreate ((char*)&_XmStrings[3012]) +#endif +#ifndef XmCPacking +#define XmCPacking ((char*)&_XmStrings[3025]) +#endif +#ifndef XmCPageIncrement +#define XmCPageIncrement ((char*)&_XmStrings[3033]) +#endif +#ifndef XmCPaneMaximum +#define XmCPaneMaximum ((char*)&_XmStrings[3047]) +#endif +#ifndef XmCPaneMinimum +#define XmCPaneMinimum ((char*)&_XmStrings[3059]) +#endif +#ifndef XmCPattern +#define XmCPattern ((char*)&_XmStrings[3071]) +#endif +#ifndef XmCPendingDelete +#define XmCPendingDelete ((char*)&_XmStrings[3079]) +#endif +#ifndef XmCPopupEnabled +#define XmCPopupEnabled ((char*)&_XmStrings[3093]) +#endif +#ifndef XmCPositionIndex +#define XmCPositionIndex ((char*)&_XmStrings[3106]) +#endif +#ifndef XmCPostFromButton +#define XmCPostFromButton ((char*)&_XmStrings[3120]) +#endif +#ifndef XmCPostFromCount +#define XmCPostFromCount ((char*)&_XmStrings[3135]) +#endif +#ifndef XmCPostFromList +#define XmCPostFromList ((char*)&_XmStrings[3149]) +#endif +#ifndef XmCPreeditType +#define XmCPreeditType ((char*)&_XmStrings[3162]) +#endif +#ifndef XmCProcessingDirection +#define XmCProcessingDirection ((char*)&_XmStrings[3174]) +#endif +#ifndef XmCPromptString +#define XmCPromptString ((char*)&_XmStrings[3194]) +#endif +#ifndef XmCProtocolCallback +#define XmCProtocolCallback ((char*)&_XmStrings[3207]) +#endif +#ifndef XmCPushButtonEnabled +#define XmCPushButtonEnabled ((char*)&_XmStrings[3224]) +#endif +#ifndef XmCQualifySearchDataProc +#define XmCQualifySearchDataProc ((char*)&_XmStrings[3242]) +#endif +#ifndef XmCRadioAlwaysOne +#define XmCRadioAlwaysOne ((char*)&_XmStrings[3264]) +#endif +#ifndef XmCRadioBehavior +#define XmCRadioBehavior ((char*)&_XmStrings[3279]) +#endif +#ifndef XmCRecomputeSize +#define XmCRecomputeSize ((char*)&_XmStrings[3293]) +#endif +#ifndef XmCRectangles +#define XmCRectangles ((char*)&_XmStrings[3307]) +#endif +#ifndef XmCRepeatDelay +#define XmCRepeatDelay ((char*)&_XmStrings[3318]) +#endif +#ifndef XmCResizeCallback +#define XmCResizeCallback ((char*)&_XmStrings[3330]) +#endif +#ifndef XmCResizeHeight +#define XmCResizeHeight ((char*)&_XmStrings[3345]) +#endif +#ifndef XmCResizePolicy +#define XmCResizePolicy ((char*)&_XmStrings[3358]) +#endif +#ifndef XmCResizeWidth +#define XmCResizeWidth ((char*)&_XmStrings[3371]) +#endif +#ifndef XmCRowColumnType +#define XmCRowColumnType ((char*)&_XmStrings[3383]) +#endif +#ifndef XmCRows +#define XmCRows ((char*)&_XmStrings[3397]) +#endif +#ifndef XmCRubberPositioning +#define XmCRubberPositioning ((char*)&_XmStrings[3402]) +#endif +#ifndef XmCSashHeight +#define XmCSashHeight ((char*)&_XmStrings[3420]) +#endif +#ifndef XmCSashIndent +#define XmCSashIndent ((char*)&_XmStrings[3431]) +#endif +#ifndef XmCSashWidth +#define XmCSashWidth ((char*)&_XmStrings[3442]) +#endif +#ifndef XmCScaleHeight +#define XmCScaleHeight ((char*)&_XmStrings[3452]) +#endif +#ifndef XmCScaleMultiple +#define XmCScaleMultiple ((char*)&_XmStrings[3464]) +#endif +#ifndef XmCScaleWidth +#define XmCScaleWidth ((char*)&_XmStrings[3478]) +#endif +#ifndef XmCScroll +#define XmCScroll ((char*)&_XmStrings[3489]) +#endif +#ifndef XmCScrollBarDisplayPolicy +#define XmCScrollBarDisplayPolicy ((char*)&_XmStrings[3496]) +#endif +#ifndef XmCScrollBarPlacement +#define XmCScrollBarPlacement ((char*)&_XmStrings[3519]) +#endif +#ifndef XmCScrollSide +#define XmCScrollSide ((char*)&_XmStrings[3538]) +#endif +#ifndef XmCScrolledWindowMarginHeight +#define XmCScrolledWindowMarginHeight ((char*)&_XmStrings[3549]) +#endif +#ifndef XmCScrolledWindowMarginWidth +#define XmCScrolledWindowMarginWidth ((char*)&_XmStrings[3576]) +#endif +#ifndef XmCScrollingPolicy +#define XmCScrollingPolicy ((char*)&_XmStrings[3602]) +#endif +#ifndef XmCSelectColor +#define XmCSelectColor ((char*)&_XmStrings[3618]) +#endif +#ifndef XmCSelectInsensitivePixmap +#define XmCSelectInsensitivePixmap ((char*)&_XmStrings[3630]) +#endif +#ifndef XmCSelectPixmap +#define XmCSelectPixmap ((char*)&_XmStrings[3654]) +#endif +#ifndef XmCSelectThreshold +#define XmCSelectThreshold ((char*)&_XmStrings[3667]) +#endif +#ifndef XmCSelectedItemCount +#define XmCSelectedItemCount ((char*)&_XmStrings[3683]) +#endif +#ifndef XmCSelectedItems +#define XmCSelectedItems ((char*)&_XmStrings[3701]) +#endif +#ifndef XmCSelectionArrayCount +#define XmCSelectionArrayCount ((char*)&_XmStrings[3715]) +#endif +#ifndef XmCSelectionLabelString +#define XmCSelectionLabelString ((char*)&_XmStrings[3735]) +#endif +#ifndef XmCSelectionPolicy +#define XmCSelectionPolicy ((char*)&_XmStrings[3756]) +#endif +#ifndef XmCSeparatorOn +#define XmCSeparatorOn ((char*)&_XmStrings[3772]) +#endif +#ifndef XmCSeparatorType +#define XmCSeparatorType ((char*)&_XmStrings[3784]) +#endif +#ifndef XmCSet +#define XmCSet ((char*)&_XmStrings[3798]) +#endif +#ifndef XmCShadowThickness +#define XmCShadowThickness ((char*)&_XmStrings[3802]) +#endif +#ifndef XmCShadowType +#define XmCShadowType ((char*)&_XmStrings[3818]) +#endif +#ifndef XmCShellUnitType +#define XmCShellUnitType ((char*)&_XmStrings[3829]) +#endif +#ifndef XmCShowArrows +#define XmCShowArrows ((char*)&_XmStrings[3843]) +#endif +#ifndef XmCShowAsDefault +#define XmCShowAsDefault ((char*)&_XmStrings[3854]) +#endif +#ifndef XmCShowSeparator +#define XmCShowSeparator ((char*)&_XmStrings[3868]) +#endif +#ifndef XmCShowValue +#define XmCShowValue ((char*)&_XmStrings[3882]) +#endif +#ifndef XmCSimpleCheckBox +#define XmCSimpleCheckBox ((char*)&_XmStrings[3892]) +#endif +#ifndef XmCSimpleMenuBar +#define XmCSimpleMenuBar ((char*)&_XmStrings[3907]) +#endif +#ifndef XmCSimpleOptionMenu +#define XmCSimpleOptionMenu ((char*)&_XmStrings[3921]) +#endif +#ifndef XmCSimplePopupMenu +#define XmCSimplePopupMenu ((char*)&_XmStrings[3938]) +#endif +#ifndef XmCSimplePulldownMenu +#define XmCSimplePulldownMenu ((char*)&_XmStrings[3954]) +#endif +#ifndef XmCSimpleRadioBox +#define XmCSimpleRadioBox ((char*)&_XmStrings[3973]) +#endif +#ifndef XmCSizePolicy +#define XmCSizePolicy ((char*)&_XmStrings[3988]) +#endif +#ifndef XmCSliderSize +#define XmCSliderSize ((char*)&_XmStrings[3999]) +#endif +#ifndef XmCSource +#define XmCSource ((char*)&_XmStrings[4010]) +#endif +#ifndef XmCSourceCursorIcon +#define XmCSourceCursorIcon ((char*)&_XmStrings[4017]) +#endif +#ifndef XmCSourceIsExternal +#define XmCSourceIsExternal ((char*)&_XmStrings[4034]) +#endif +#ifndef XmCSourcePixmapIcon +#define XmCSourcePixmapIcon ((char*)&_XmStrings[4051]) +#endif +#ifndef XmCSourceWidget +#define XmCSourceWidget ((char*)&_XmStrings[4068]) +#endif +#ifndef XmCSourceWindow +#define XmCSourceWindow ((char*)&_XmStrings[4081]) +#endif +#ifndef XmCSpacing +#define XmCSpacing ((char*)&_XmStrings[4094]) +#endif +#ifndef XmCStartTime +#define XmCStartTime ((char*)&_XmStrings[4102]) +#endif +#ifndef XmCStateCursorIcon +#define XmCStateCursorIcon ((char*)&_XmStrings[4112]) +#endif +#ifndef XmCStringDirection +#define XmCStringDirection ((char*)&_XmStrings[4128]) +#endif +#ifndef XmCTearOffModel +#define XmCTearOffModel ((char*)&_XmStrings[4144]) +#endif +#ifndef XmCTextFontList +#define XmCTextFontList ((char*)&_XmStrings[4157]) +#endif +#ifndef XmCTextString +#define XmCTextString ((char*)&_XmStrings[4170]) +#endif +#ifndef XmCTextValue +#define XmCTextValue ((char*)&_XmStrings[4181]) +#endif +#ifndef XmCTitleString +#define XmCTitleString ((char*)&_XmStrings[4191]) +#endif +#ifndef XmCTopCharacter +#define XmCTopCharacter ((char*)&_XmStrings[4203]) +#endif +#ifndef XmCTopItemPosition +#define XmCTopItemPosition ((char*)&_XmStrings[4216]) +#endif +#ifndef XmCTopLevelEnterCallback +#define XmCTopLevelEnterCallback ((char*)&_XmStrings[4232]) +#endif +#ifndef XmCTopLevelLeaveCallback +#define XmCTopLevelLeaveCallback ((char*)&_XmStrings[4254]) +#endif +#ifndef XmCTopShadowColor +#define XmCTopShadowColor ((char*)&_XmStrings[4276]) +#endif +#ifndef XmCTopShadowPixmap +#define XmCTopShadowPixmap ((char*)&_XmStrings[4291]) +#endif +#ifndef XmCTransferProc +#define XmCTransferProc ((char*)&_XmStrings[4307]) +#endif +#ifndef XmCTransferStatus +#define XmCTransferStatus ((char*)&_XmStrings[4320]) +#endif +#ifndef XmCTraversalOn +#define XmCTraversalOn ((char*)&_XmStrings[4335]) +#endif +#ifndef XmCTraversalType +#define XmCTraversalType ((char*)&_XmStrings[4347]) +#endif +#ifndef XmCTreeUpdateProc +#define XmCTreeUpdateProc ((char*)&_XmStrings[4361]) +#endif +#ifndef XmCTroughColor +#define XmCTroughColor ((char*)&_XmStrings[4376]) +#endif +#ifndef XmCUnitType +#define XmCUnitType ((char*)&_XmStrings[4388]) +#endif +#ifndef XmCUnpostBehavior +#define XmCUnpostBehavior ((char*)&_XmStrings[4397]) +#endif +#ifndef XmCUnselectPixmap +#define XmCUnselectPixmap ((char*)&_XmStrings[4412]) +#endif +#ifndef XmCUpdateSliderSize +#define XmCUpdateSliderSize ((char*)&_XmStrings[4427]) +#endif +#ifndef XmCUseAsyncGeometry +#define XmCUseAsyncGeometry ((char*)&_XmStrings[4444]) +#endif +#ifndef XmCUserData +#define XmCUserData ((char*)&_XmStrings[4461]) +#endif +#ifndef XmCValidCursorForeground +#define XmCValidCursorForeground ((char*)&_XmStrings[4470]) +#endif +#ifndef XmCValueChangedCallback +#define XmCValueChangedCallback ((char*)&_XmStrings[4492]) +#endif +#ifndef XmCValueWcs +#define XmCValueWcs ((char*)&_XmStrings[4513]) +#endif +#ifndef XmCVerifyBell +#define XmCVerifyBell ((char*)&_XmStrings[4522]) +#endif +#ifndef XmCVerticalAlignment +#define XmCVerticalAlignment ((char*)&_XmStrings[4533]) +#endif +#ifndef XmCVerticalFontUnit +#define XmCVerticalFontUnit ((char*)&_XmStrings[4551]) +#endif +#ifndef XmCVerticalScrollBar +#define XmCVerticalScrollBar ((char*)&_XmStrings[4568]) +#endif +#ifndef XmCVisibleItemCount +#define XmCVisibleItemCount ((char*)&_XmStrings[4586]) +#endif +#ifndef XmCVisibleWhenOff +#define XmCVisibleWhenOff ((char*)&_XmStrings[4603]) +#endif +#ifndef XmCVisualPolicy +#define XmCVisualPolicy ((char*)&_XmStrings[4618]) +#endif +#ifndef XmCWhichButton +#define XmCWhichButton ((char*)&_XmStrings[4631]) +#endif +#ifndef XmCWordWrap +#define XmCWordWrap ((char*)&_XmStrings[4643]) +#endif +#ifndef XmCWorkWindow +#define XmCWorkWindow ((char*)&_XmStrings[4652]) +#endif +#ifndef XmCXmString +#define XmCXmString ((char*)&_XmStrings[4663]) +#endif +#ifndef XmNaccelerator +#define XmNaccelerator ((char*)&_XmStrings[4672]) +#endif +#ifndef XmNacceleratorText +#define XmNacceleratorText ((char*)&_XmStrings[4684]) +#endif +#ifndef XmNactivateCallback +#define XmNactivateCallback ((char*)&_XmStrings[4700]) +#endif +#ifndef XmNadjustLast +#define XmNadjustLast ((char*)&_XmStrings[4717]) +#endif +#ifndef XmNadjustMargin +#define XmNadjustMargin ((char*)&_XmStrings[4728]) +#endif +#ifndef XmNalignment +#define XmNalignment ((char*)&_XmStrings[4741]) +#endif +#ifndef XmNallowOverlap +#define XmNallowOverlap ((char*)&_XmStrings[4751]) +#endif +#ifndef XmNallowResize +#define XmNallowResize ((char*)&_XmStrings[4764]) +#endif +#ifndef XmNallowUnusedSpace +#define XmNallowUnusedSpace ((char*)&_XmStrings[4776]) +#endif +#ifndef XmNanimationMask +#define XmNanimationMask ((char*)&_XmStrings[4793]) +#endif +#ifndef XmNanimationPixmap +#define XmNanimationPixmap ((char*)&_XmStrings[4807]) +#endif +#ifndef XmNanimationPixmapDepth +#define XmNanimationPixmapDepth ((char*)&_XmStrings[4823]) +#endif +#ifndef XmNanimationStyle +#define XmNanimationStyle ((char*)&_XmStrings[4844]) +#endif +#ifndef XmNapplyCallback +#define XmNapplyCallback ((char*)&_XmStrings[4859]) +#endif +#ifndef XmNapplyLabelString +#define XmNapplyLabelString ((char*)&_XmStrings[4873]) +#endif +#ifndef XmNarmCallback +#define XmNarmCallback ((char*)&_XmStrings[4890]) +#endif +#ifndef XmNarmColor +#define XmNarmColor ((char*)&_XmStrings[4902]) +#endif +#ifndef XmNarmPixmap +#define XmNarmPixmap ((char*)&_XmStrings[4911]) +#endif +#ifndef XmNarrowDirection +#define XmNarrowDirection ((char*)&_XmStrings[4921]) +#endif +#ifndef XmNattachment +#define XmNattachment ((char*)&_XmStrings[4936]) +#endif +#ifndef XmNaudibleWarning +#define XmNaudibleWarning ((char*)&_XmStrings[4947]) +#endif +#ifndef XmNautoShowCursorPosition +#define XmNautoShowCursorPosition ((char*)&_XmStrings[4962]) +#endif +#ifndef XmNautoUnmanage +#define XmNautoUnmanage ((char*)&_XmStrings[4985]) +#endif +#ifndef XmNautomaticSelection +#define XmNautomaticSelection ((char*)&_XmStrings[4998]) +#endif +#ifndef XmNavailability +#define XmNavailability ((char*)&_XmStrings[5017]) +#endif +#ifndef XmNblendModel +#define XmNblendModel ((char*)&_XmStrings[5030]) +#endif +#ifndef XmNblinkRate +#define XmNblinkRate ((char*)&_XmStrings[5041]) +#endif +#ifndef XmNbottomAttachment +#define XmNbottomAttachment ((char*)&_XmStrings[5051]) +#endif +#ifndef XmNbottomOffset +#define XmNbottomOffset ((char*)&_XmStrings[5068]) +#endif +#ifndef XmNbottomPosition +#define XmNbottomPosition ((char*)&_XmStrings[5081]) +#endif +#ifndef XmNbottomShadowColor +#define XmNbottomShadowColor ((char*)&_XmStrings[5096]) +#endif +#ifndef XmNbottomShadowPixmap +#define XmNbottomShadowPixmap ((char*)&_XmStrings[5114]) +#endif +#ifndef XmNbottomWidget +#define XmNbottomWidget ((char*)&_XmStrings[5133]) +#endif +#ifndef XmNbrowseSelectionCallback +#define XmNbrowseSelectionCallback ((char*)&_XmStrings[5146]) +#endif +#ifndef XmNbuttonAcceleratorText +#define XmNbuttonAcceleratorText ((char*)&_XmStrings[5170]) +#endif +#ifndef XmNbuttonAccelerators +#define XmNbuttonAccelerators ((char*)&_XmStrings[5192]) +#endif +#ifndef XmNbuttonCount +#define XmNbuttonCount ((char*)&_XmStrings[5211]) +#endif +#ifndef XmNbuttonFontList +#define XmNbuttonFontList ((char*)&_XmStrings[5223]) +#endif +#ifndef XmNbuttonMnemonicCharSets +#define XmNbuttonMnemonicCharSets ((char*)&_XmStrings[5238]) +#endif +#ifndef XmNbuttonMnemonics +#define XmNbuttonMnemonics ((char*)&_XmStrings[5261]) +#endif +#ifndef XmNbuttonSet +#define XmNbuttonSet ((char*)&_XmStrings[5277]) +#endif +#ifndef XmNbuttonType +#define XmNbuttonType ((char*)&_XmStrings[5287]) +#endif +#ifndef XmNbuttons +#define XmNbuttons ((char*)&_XmStrings[5298]) +#endif +#ifndef XmNcancelButton +#define XmNcancelButton ((char*)&_XmStrings[5306]) +#endif +#ifndef XmNcancelCallback +#define XmNcancelCallback ((char*)&_XmStrings[5319]) +#endif +#ifndef XmNcancelLabelString +#define XmNcancelLabelString ((char*)&_XmStrings[5334]) +#endif +#ifndef XmNcascadePixmap +#define XmNcascadePixmap ((char*)&_XmStrings[5352]) +#endif +#ifndef XmNcascadingCallback +#define XmNcascadingCallback ((char*)&_XmStrings[5366]) +#endif +#ifndef XmNchildHorizontalAlignment +#define XmNchildHorizontalAlignment ((char*)&_XmStrings[5384]) +#endif +#ifndef XmNchildHorizontalSpacing +#define XmNchildHorizontalSpacing ((char*)&_XmStrings[5409]) +#endif +#ifndef XmNchildPlacement +#define XmNchildPlacement ((char*)&_XmStrings[5432]) +#endif +#ifndef XmNchildPosition +#define XmNchildPosition ((char*)&_XmStrings[5447]) +#endif +#ifndef XmNchildType +#define XmNchildType ((char*)&_XmStrings[5461]) +#endif +#ifndef XmNchildVerticalAlignment +#define XmNchildVerticalAlignment ((char*)&_XmStrings[5471]) +#endif +#ifndef XmNclientData +#define XmNclientData ((char*)&_XmStrings[5494]) +#endif +#ifndef XmNclipWindow +#define XmNclipWindow ((char*)&_XmStrings[5505]) +#endif +#ifndef XmNcolumns +#define XmNcolumns ((char*)&_XmStrings[5516]) +#endif +#ifndef XmNcommand +#define XmNcommand ((char*)&_XmStrings[5524]) +#endif +#ifndef XmNcommandChangedCallback +#define XmNcommandChangedCallback ((char*)&_XmStrings[5532]) +#endif +#ifndef XmNcommandEnteredCallback +#define XmNcommandEnteredCallback ((char*)&_XmStrings[5555]) +#endif +#ifndef XmNcommandWindow +#define XmNcommandWindow ((char*)&_XmStrings[5578]) +#endif +#ifndef XmNcommandWindowLocation +#define XmNcommandWindowLocation ((char*)&_XmStrings[5592]) +#endif +#ifndef XmNconvertProc +#define XmNconvertProc ((char*)&_XmStrings[5614]) +#endif +#ifndef XmNcursorBackground +#define XmNcursorBackground ((char*)&_XmStrings[5626]) +#endif +#ifndef XmNcursorForeground +#define XmNcursorForeground ((char*)&_XmStrings[5643]) +#endif +#ifndef XmNcursorPosition +#define XmNcursorPosition ((char*)&_XmStrings[5660]) +#endif +#ifndef XmNcursorPositionVisible +#define XmNcursorPositionVisible ((char*)&_XmStrings[5675]) +#endif +#ifndef XmNdarkThreshold +#define XmNdarkThreshold ((char*)&_XmStrings[5697]) +#endif +#ifndef XmNdecimalPoints +#define XmNdecimalPoints ((char*)&_XmStrings[5711]) +#endif +#ifndef XmNdecrementCallback +#define XmNdecrementCallback ((char*)&_XmStrings[5725]) +#endif +#ifndef XmNdefaultActionCallback +#define XmNdefaultActionCallback ((char*)&_XmStrings[5743]) +#endif +#ifndef XmNdefaultButton +#define XmNdefaultButton ((char*)&_XmStrings[5765]) +#endif +#ifndef XmNdefaultButtonShadowThickness +#define XmNdefaultButtonShadowThickness ((char*)&_XmStrings[5779]) +#endif +#ifndef XmNdefaultButtonType +#define XmNdefaultButtonType ((char*)&_XmStrings[5808]) +#endif +#ifndef XmNdefaultCopyCursorIcon +#define XmNdefaultCopyCursorIcon ((char*)&_XmStrings[5826]) +#endif +#ifndef XmNdefaultFontList +#define XmNdefaultFontList ((char*)&_XmStrings[5848]) +#endif +#ifndef XmNdefaultInvalidCursorIcon +#define XmNdefaultInvalidCursorIcon ((char*)&_XmStrings[5864]) +#endif +#ifndef XmNdefaultLinkCursorIcon +#define XmNdefaultLinkCursorIcon ((char*)&_XmStrings[5889]) +#endif +#ifndef XmNdefaultMoveCursorIcon +#define XmNdefaultMoveCursorIcon ((char*)&_XmStrings[5911]) +#endif +#ifndef XmNdefaultNoneCursorIcon +#define XmNdefaultNoneCursorIcon ((char*)&_XmStrings[5933]) +#endif +#ifndef XmNdefaultPosition +#define XmNdefaultPosition ((char*)&_XmStrings[5955]) +#endif +#ifndef XmNdefaultSourceCursorIcon +#define XmNdefaultSourceCursorIcon ((char*)&_XmStrings[5971]) +#endif +#ifndef XmNdefaultValidCursorIcon +#define XmNdefaultValidCursorIcon ((char*)&_XmStrings[5995]) +#endif +#ifndef XmNdeleteResponse +#define XmNdeleteResponse ((char*)&_XmStrings[6018]) +#endif +#ifndef XmNdesktopParent +#define XmNdesktopParent ((char*)&_XmStrings[6033]) +#endif +#ifndef XmNdialogStyle +#define XmNdialogStyle ((char*)&_XmStrings[6047]) +#endif +#ifndef XmNdialogTitle +#define XmNdialogTitle ((char*)&_XmStrings[6059]) +#endif +#ifndef XmNdialogType +#define XmNdialogType ((char*)&_XmStrings[6071]) +#endif +#ifndef XmNdirListItemCount +#define XmNdirListItemCount ((char*)&_XmStrings[6082]) +#endif +#ifndef XmNdirListItems +#define XmNdirListItems ((char*)&_XmStrings[6099]) +#endif +#ifndef XmNdirListLabelString +#define XmNdirListLabelString ((char*)&_XmStrings[6112]) +#endif +#ifndef XmNdirMask +#define XmNdirMask ((char*)&_XmStrings[6131]) +#endif +#ifndef XmNdirSearchProc +#define XmNdirSearchProc ((char*)&_XmStrings[6139]) +#endif +#ifndef XmNdirSpec +#define XmNdirSpec ((char*)&_XmStrings[6153]) +#endif +#ifndef XmNdirectory +#define XmNdirectory ((char*)&_XmStrings[6161]) +#endif +#ifndef XmNdirectoryValid +#define XmNdirectoryValid ((char*)&_XmStrings[6171]) +#endif +#ifndef XmNdisarmCallback +#define XmNdisarmCallback ((char*)&_XmStrings[6186]) +#endif +#ifndef XmNdoubleClickInterval +#define XmNdoubleClickInterval ((char*)&_XmStrings[6201]) +#endif +#ifndef XmNdragCallback +#define XmNdragCallback ((char*)&_XmStrings[6221]) +#endif +#ifndef XmNdragContextClass +#define XmNdragContextClass ((char*)&_XmStrings[6234]) +#endif +#ifndef XmNdragDropFinishCallback +#define XmNdragDropFinishCallback ((char*)&_XmStrings[6251]) +#endif +#ifndef XmNdragIconClass +#define XmNdragIconClass ((char*)&_XmStrings[6274]) +#endif +#ifndef XmNdragInitiatorProtocolStyle +#define XmNdragInitiatorProtocolStyle ((char*)&_XmStrings[6288]) +#endif +#ifndef XmNdragMotionCallback +#define XmNdragMotionCallback ((char*)&_XmStrings[6315]) +#endif +#ifndef XmNdragOperations +#define XmNdragOperations ((char*)&_XmStrings[6334]) +#endif +#ifndef XmNdragOverMode +#define XmNdragOverMode ((char*)&_XmStrings[6349]) +#endif +#ifndef XmNdragProc +#define XmNdragProc ((char*)&_XmStrings[6362]) +#endif +#ifndef XmNdragReceiverProtocolStyle +#define XmNdragReceiverProtocolStyle ((char*)&_XmStrings[6371]) +#endif +#ifndef XmNdropFinishCallback +#define XmNdropFinishCallback ((char*)&_XmStrings[6397]) +#endif +#ifndef XmNdropProc +#define XmNdropProc ((char*)&_XmStrings[6416]) +#endif +#ifndef XmNdropRectangles +#define XmNdropRectangles ((char*)&_XmStrings[6425]) +#endif +#ifndef XmNdropSiteActivity +#define XmNdropSiteActivity ((char*)&_XmStrings[6440]) +#endif +#ifndef XmNdropSiteEnterCallback +#define XmNdropSiteEnterCallback ((char*)&_XmStrings[6457]) +#endif +#ifndef XmNdropSiteLeaveCallback +#define XmNdropSiteLeaveCallback ((char*)&_XmStrings[6479]) +#endif +#ifndef XmNdropSiteManagerClass +#define XmNdropSiteManagerClass ((char*)&_XmStrings[6501]) +#endif +#ifndef XmNdropSiteOperations +#define XmNdropSiteOperations ((char*)&_XmStrings[6522]) +#endif +#ifndef XmNdropSiteType +#define XmNdropSiteType ((char*)&_XmStrings[6541]) +#endif +#ifndef XmNdropStartCallback +#define XmNdropStartCallback ((char*)&_XmStrings[6554]) +#endif +#ifndef XmNdropTransferClass +#define XmNdropTransferClass ((char*)&_XmStrings[6572]) +#endif +#ifndef XmNdropTransfers +#define XmNdropTransfers ((char*)&_XmStrings[6590]) +#endif +#ifndef XmNeditMode +#define XmNeditMode ((char*)&_XmStrings[6604]) +#endif +#ifndef XmNeditable +#define XmNeditable ((char*)&_XmStrings[6613]) +#endif +#ifndef XmNentryAlignment +#define XmNentryAlignment ((char*)&_XmStrings[6622]) +#endif +#ifndef XmNentryBorder +#define XmNentryBorder ((char*)&_XmStrings[6637]) +#endif +#ifndef XmNentryCallback +#define XmNentryCallback ((char*)&_XmStrings[6649]) +#endif +#ifndef XmNentryClass +#define XmNentryClass ((char*)&_XmStrings[6663]) +#endif +#ifndef XmNentryVerticalAlignment +#define XmNentryVerticalAlignment ((char*)&_XmStrings[6674]) +#endif +#ifndef XmNexportTargets +#define XmNexportTargets ((char*)&_XmStrings[6697]) +#endif +#ifndef XmNexposeCallback +#define XmNexposeCallback ((char*)&_XmStrings[6711]) +#endif +#ifndef XmNextendedSelectionCallback +#define XmNextendedSelectionCallback ((char*)&_XmStrings[6726]) +#endif +#ifndef XmNextensionType +#define XmNextensionType ((char*)&_XmStrings[6752]) +#endif +#ifndef XmNfileListItemCount +#define XmNfileListItemCount ((char*)&_XmStrings[6766]) +#endif +#ifndef XmNfileListItems +#define XmNfileListItems ((char*)&_XmStrings[6784]) +#endif +#ifndef XmNfileListLabelString +#define XmNfileListLabelString ((char*)&_XmStrings[6798]) +#endif +#ifndef XmNfileSearchProc +#define XmNfileSearchProc ((char*)&_XmStrings[6818]) +#endif +#ifndef XmNfileTypeMask +#define XmNfileTypeMask ((char*)&_XmStrings[6833]) +#endif +#ifndef XmNfillOnArm +#define XmNfillOnArm ((char*)&_XmStrings[6846]) +#endif +#ifndef XmNfillOnSelect +#define XmNfillOnSelect ((char*)&_XmStrings[6856]) +#endif +#ifndef XmNfilterLabelString +#define XmNfilterLabelString ((char*)&_XmStrings[6869]) +#endif +#ifndef XmNfocusCallback +#define XmNfocusCallback ((char*)&_XmStrings[6887]) +#endif +#ifndef XmNfocusMovedCallback +#define XmNfocusMovedCallback ((char*)&_XmStrings[6901]) +#endif +#ifndef XmNfocusPolicyChanged +#define XmNfocusPolicyChanged ((char*)&_XmStrings[6920]) +#endif +#ifndef XmNfontList +#define XmNfontList ((char*)&_XmStrings[6939]) +#endif +#ifndef XmNforegroundThreshold +#define XmNforegroundThreshold ((char*)&_XmStrings[6948]) +#endif +#ifndef XmNfractionBase +#define XmNfractionBase ((char*)&_XmStrings[6968]) +#endif +#ifndef XmNgainPrimaryCallback +#define XmNgainPrimaryCallback ((char*)&_XmStrings[6981]) +#endif +#ifndef XmNhelpCallback +#define XmNhelpCallback ((char*)&_XmStrings[7001]) +#endif +#ifndef XmNhelpLabelString +#define XmNhelpLabelString ((char*)&_XmStrings[7014]) +#endif +#ifndef XmNhighlightColor +#define XmNhighlightColor ((char*)&_XmStrings[7030]) +#endif +#ifndef XmNhighlightOnEnter +#define XmNhighlightOnEnter ((char*)&_XmStrings[7045]) +#endif +#ifndef XmNhighlightPixmap +#define XmNhighlightPixmap ((char*)&_XmStrings[7062]) +#endif +#ifndef XmNhighlightThickness +#define XmNhighlightThickness ((char*)&_XmStrings[7078]) +#endif +#ifndef XmNhistoryItemCount +#define XmNhistoryItemCount ((char*)&_XmStrings[7097]) +#endif +#ifndef XmNhistoryItems +#define XmNhistoryItems ((char*)&_XmStrings[7114]) +#endif +#ifndef XmNhistoryMaxItems +#define XmNhistoryMaxItems ((char*)&_XmStrings[7127]) +#endif +#ifndef XmNhistoryVisibleItemCount +#define XmNhistoryVisibleItemCount ((char*)&_XmStrings[7143]) +#endif +#ifndef XmNhorizontalFontUnit +#define XmNhorizontalFontUnit ((char*)&_XmStrings[7167]) +#endif +#ifndef XmNhorizontalScrollBar +#define XmNhorizontalScrollBar ((char*)&_XmStrings[7186]) +#endif +#ifndef XmNhorizontalSpacing +#define XmNhorizontalSpacing ((char*)&_XmStrings[7206]) +#endif +#ifndef XmNhotX +#define XmNhotX ((char*)&_XmStrings[7224]) +#endif +#ifndef XmNhotY +#define XmNhotY ((char*)&_XmStrings[7229]) +#endif +#ifndef XmNiccHandle +#define XmNiccHandle ((char*)&_XmStrings[7234]) +#endif +#ifndef XmNimportTargets +#define XmNimportTargets ((char*)&_XmStrings[7244]) +#endif +#ifndef XmNincrement +#define XmNincrement ((char*)&_XmStrings[7258]) +#endif +#ifndef XmNincrementCallback +#define XmNincrementCallback ((char*)&_XmStrings[7268]) +#endif +#ifndef XmNincremental +#define XmNincremental ((char*)&_XmStrings[7286]) +#endif +#ifndef XmNindicatorOn +#define XmNindicatorOn ((char*)&_XmStrings[7298]) +#endif +#ifndef XmNindicatorSize +#define XmNindicatorSize ((char*)&_XmStrings[7310]) +#endif +#ifndef XmNindicatorType +#define XmNindicatorType ((char*)&_XmStrings[7324]) +#endif +#ifndef XmNinitialDelay +#define XmNinitialDelay ((char*)&_XmStrings[7338]) +#endif +#ifndef XmNinitialFocus +#define XmNinitialFocus ((char*)&_XmStrings[7351]) +#endif +#ifndef XmNinputCallback +#define XmNinputCallback ((char*)&_XmStrings[7364]) +#endif +#ifndef XmNinputCreate +#define XmNinputCreate ((char*)&_XmStrings[7378]) +#endif +#ifndef XmNinputMethod +#define XmNinputMethod ((char*)&_XmStrings[7390]) +#endif +#ifndef XmNinvalidCursorForeground +#define XmNinvalidCursorForeground ((char*)&_XmStrings[7402]) +#endif +#ifndef XmNisAligned +#define XmNisAligned ((char*)&_XmStrings[7426]) +#endif +#ifndef XmNisHomogeneous +#define XmNisHomogeneous ((char*)&_XmStrings[7436]) +#endif +#ifndef XmNitemCount +#define XmNitemCount ((char*)&_XmStrings[7450]) +#endif +#ifndef XmNitems +#define XmNitems ((char*)&_XmStrings[7460]) +#endif +#ifndef XmNkeyboardFocusPolicy +#define XmNkeyboardFocusPolicy ((char*)&_XmStrings[7466]) +#endif +#ifndef XmNlabelFontList +#define XmNlabelFontList ((char*)&_XmStrings[7486]) +#endif +#ifndef XmNlabelInsensitivePixmap +#define XmNlabelInsensitivePixmap ((char*)&_XmStrings[7500]) +#endif +#ifndef XmNlabelPixmap +#define XmNlabelPixmap ((char*)&_XmStrings[7523]) +#endif +#ifndef XmNlabelString +#define XmNlabelString ((char*)&_XmStrings[7535]) +#endif +#ifndef XmNlabelType +#define XmNlabelType ((char*)&_XmStrings[7547]) +#endif +#ifndef XmNleftAttachment +#define XmNleftAttachment ((char*)&_XmStrings[7557]) +#endif +#ifndef XmNleftOffset +#define XmNleftOffset ((char*)&_XmStrings[7572]) +#endif +#ifndef XmNleftPosition +#define XmNleftPosition ((char*)&_XmStrings[7583]) +#endif +#ifndef XmNleftWidget +#define XmNleftWidget ((char*)&_XmStrings[7596]) +#endif +#ifndef XmNlightThreshold +#define XmNlightThreshold ((char*)&_XmStrings[7607]) +#endif +#ifndef XmNlineSpace +#define XmNlineSpace ((char*)&_XmStrings[7622]) +#endif +#ifndef XmNlistItemCount +#define XmNlistItemCount ((char*)&_XmStrings[7632]) +#endif +#ifndef XmNlistItems +#define XmNlistItems ((char*)&_XmStrings[7646]) +#endif +#ifndef XmNlistLabelString +#define XmNlistLabelString ((char*)&_XmStrings[7656]) +#endif +#ifndef XmNlistMarginHeight +#define XmNlistMarginHeight ((char*)&_XmStrings[7672]) +#endif +#ifndef XmNlistMarginWidth +#define XmNlistMarginWidth ((char*)&_XmStrings[7689]) +#endif +#ifndef XmNlistSizePolicy +#define XmNlistSizePolicy ((char*)&_XmStrings[7705]) +#endif +#ifndef XmNlistSpacing +#define XmNlistSpacing ((char*)&_XmStrings[7720]) +#endif +#ifndef XmNlistUpdated +#define XmNlistUpdated ((char*)&_XmStrings[7732]) +#endif +#ifndef XmNlistVisibleItemCount +#define XmNlistVisibleItemCount ((char*)&_XmStrings[7744]) +#endif +#ifndef XmNlogicalParent +#define XmNlogicalParent ((char*)&_XmStrings[7765]) +#endif +#ifndef XmNlosePrimaryCallback +#define XmNlosePrimaryCallback ((char*)&_XmStrings[7779]) +#endif +#ifndef XmNlosingFocusCallback +#define XmNlosingFocusCallback ((char*)&_XmStrings[7799]) +#endif +#ifndef XmNmainWindowMarginHeight +#define XmNmainWindowMarginHeight ((char*)&_XmStrings[7819]) +#endif +#ifndef XmNmainWindowMarginWidth +#define XmNmainWindowMarginWidth ((char*)&_XmStrings[7842]) +#endif +#ifndef XmNmapCallback +#define XmNmapCallback ((char*)&_XmStrings[7864]) +#endif +#ifndef XmNmappingDelay +#define XmNmappingDelay ((char*)&_XmStrings[7876]) +#endif +#ifndef XmNmargin +#define XmNmargin ((char*)&_XmStrings[7889]) +#endif +#ifndef XmNmarginBottom +#define XmNmarginBottom ((char*)&_XmStrings[7896]) +#endif +#ifndef XmNmarginHeight +#define XmNmarginHeight ((char*)&_XmStrings[7909]) +#endif +#ifndef XmNmarginLeft +#define XmNmarginLeft ((char*)&_XmStrings[7922]) +#endif +#ifndef XmNmarginRight +#define XmNmarginRight ((char*)&_XmStrings[7933]) +#endif +#ifndef XmNmarginTop +#define XmNmarginTop ((char*)&_XmStrings[7945]) +#endif +#ifndef XmNmarginWidth +#define XmNmarginWidth ((char*)&_XmStrings[7955]) +#endif +#ifndef XmNmask +#define XmNmask ((char*)&_XmStrings[7967]) +#endif +#ifndef XmNmaxLength +#define XmNmaxLength ((char*)&_XmStrings[7972]) +#endif +#ifndef XmNmaximum +#define XmNmaximum ((char*)&_XmStrings[7982]) +#endif +#ifndef XmNmenuAccelerator +#define XmNmenuAccelerator ((char*)&_XmStrings[7990]) +#endif +#ifndef XmNmenuBar +#define XmNmenuBar ((char*)&_XmStrings[8006]) +#endif +#ifndef XmNmenuCursor +#define XmNmenuCursor ((char*)&_XmStrings[8014]) +#endif +#ifndef XmNmenuHelpWidget +#define XmNmenuHelpWidget ((char*)&_XmStrings[8025]) +#endif +#ifndef XmNmenuHistory +#define XmNmenuHistory ((char*)&_XmStrings[8040]) +#endif +#ifndef XmNmenuPost +#define XmNmenuPost ((char*)&_XmStrings[8052]) +#endif +#ifndef XmNmessageAlignment +#define XmNmessageAlignment ((char*)&_XmStrings[8061]) +#endif +#ifndef XmNmessageProc +#define XmNmessageProc ((char*)&_XmStrings[8078]) +#endif +#ifndef XmNmessageString +#define XmNmessageString ((char*)&_XmStrings[8090]) +#endif +#ifndef XmNmessageWindow +#define XmNmessageWindow ((char*)&_XmStrings[8104]) +#endif +#ifndef XmNminimizeButtons +#define XmNminimizeButtons ((char*)&_XmStrings[8118]) +#endif +#ifndef XmNminimum +#define XmNminimum ((char*)&_XmStrings[8134]) +#endif +#ifndef XmNmnemonic +#define XmNmnemonic ((char*)&_XmStrings[8142]) +#endif +#ifndef XmNmnemonicCharSet +#define XmNmnemonicCharSet ((char*)&_XmStrings[8151]) +#endif +#ifndef XmNmodifyVerifyCallback +#define XmNmodifyVerifyCallback ((char*)&_XmStrings[8167]) +#endif +#ifndef XmNmodifyVerifyCallbackWcs +#define XmNmodifyVerifyCallbackWcs ((char*)&_XmStrings[8188]) +#endif +#ifndef XmNmotionVerifyCallback +#define XmNmotionVerifyCallback ((char*)&_XmStrings[8212]) +#endif +#ifndef XmNmoveOpaque +#define XmNmoveOpaque ((char*)&_XmStrings[8233]) +#endif +#ifndef XmNmultiClick +#define XmNmultiClick ((char*)&_XmStrings[8244]) +#endif +#ifndef XmNmultipleSelectionCallback +#define XmNmultipleSelectionCallback ((char*)&_XmStrings[8255]) +#endif +#ifndef XmNmustMatch +#define XmNmustMatch ((char*)&_XmStrings[8281]) +#endif +#ifndef XmNmwmDecorations +#define XmNmwmDecorations ((char*)&_XmStrings[8291]) +#endif +#ifndef XmNmwmFunctions +#define XmNmwmFunctions ((char*)&_XmStrings[8306]) +#endif +#ifndef XmNmwmInputMode +#define XmNmwmInputMode ((char*)&_XmStrings[8319]) +#endif +#ifndef XmNmwmMenu +#define XmNmwmMenu ((char*)&_XmStrings[8332]) +#endif +#ifndef XmNmwmMessages +#define XmNmwmMessages ((char*)&_XmStrings[8340]) +#endif +#ifndef XmNnavigationType +#define XmNnavigationType ((char*)&_XmStrings[8352]) +#endif +#ifndef XmNneedsMotion +#define XmNneedsMotion ((char*)&_XmStrings[8367]) +#endif +#ifndef XmNnoMatchCallback +#define XmNnoMatchCallback ((char*)&_XmStrings[8379]) +#endif +#ifndef XmNnoMatchString +#define XmNnoMatchString ((char*)&_XmStrings[8395]) +#endif +#ifndef XmNnoResize +#define XmNnoResize ((char*)&_XmStrings[8409]) +#endif +#ifndef XmNnoneCursorForeground +#define XmNnoneCursorForeground ((char*)&_XmStrings[8418]) +#endif +#ifndef XmNnotifyProc +#define XmNnotifyProc ((char*)&_XmStrings[8439]) +#endif +#ifndef XmNnumColumns +#define XmNnumColumns ((char*)&_XmStrings[8450]) +#endif +#ifndef XmNnumDropRectangles +#define XmNnumDropRectangles ((char*)&_XmStrings[8461]) +#endif +#ifndef XmNnumDropTransfers +#define XmNnumDropTransfers ((char*)&_XmStrings[8479]) +#endif +#ifndef XmNnumExportTargets +#define XmNnumExportTargets ((char*)&_XmStrings[8496]) +#endif +#ifndef XmNnumImportTargets +#define XmNnumImportTargets ((char*)&_XmStrings[8513]) +#endif +#ifndef XmNnumRectangles +#define XmNnumRectangles ((char*)&_XmStrings[8530]) +#endif +#ifndef XmNoffsetX +#define XmNoffsetX ((char*)&_XmStrings[8544]) +#endif +#ifndef XmNoffsetY +#define XmNoffsetY ((char*)&_XmStrings[8552]) +#endif +#ifndef XmNokCallback +#define XmNokCallback ((char*)&_XmStrings[8560]) +#endif +#ifndef XmNokLabelString +#define XmNokLabelString ((char*)&_XmStrings[8571]) +#endif +#ifndef XmNoperationChangedCallback +#define XmNoperationChangedCallback ((char*)&_XmStrings[8585]) +#endif +#ifndef XmNoperationCursorIcon +#define XmNoperationCursorIcon ((char*)&_XmStrings[8610]) +#endif +#ifndef XmNoptionLabel +#define XmNoptionLabel ((char*)&_XmStrings[8630]) +#endif +#ifndef XmNoptionMnemonic +#define XmNoptionMnemonic ((char*)&_XmStrings[8642]) +#endif +#ifndef XmNoutputCreate +#define XmNoutputCreate ((char*)&_XmStrings[8657]) +#endif +#ifndef XmNpacking +#define XmNpacking ((char*)&_XmStrings[8670]) +#endif +#ifndef XmNpageDecrementCallback +#define XmNpageDecrementCallback ((char*)&_XmStrings[8678]) +#endif +#ifndef XmNpageIncrement +#define XmNpageIncrement ((char*)&_XmStrings[8700]) +#endif +#ifndef XmNpageIncrementCallback +#define XmNpageIncrementCallback ((char*)&_XmStrings[8714]) +#endif +#ifndef XmNpaneMaximum +#define XmNpaneMaximum ((char*)&_XmStrings[8736]) +#endif +#ifndef XmNpaneMinimum +#define XmNpaneMinimum ((char*)&_XmStrings[8748]) +#endif +#ifndef XmNpattern +#define XmNpattern ((char*)&_XmStrings[8760]) +#endif +#ifndef XmNpendingDelete +#define XmNpendingDelete ((char*)&_XmStrings[8768]) +#endif +#ifndef XmNpopupEnabled +#define XmNpopupEnabled ((char*)&_XmStrings[8782]) +#endif +#ifndef XmNpositionIndex +#define XmNpositionIndex ((char*)&_XmStrings[8795]) +#endif +#ifndef XmNpostFromButton +#define XmNpostFromButton ((char*)&_XmStrings[8809]) +#endif +#ifndef XmNpostFromCount +#define XmNpostFromCount ((char*)&_XmStrings[8824]) +#endif +#ifndef XmNpostFromList +#define XmNpostFromList ((char*)&_XmStrings[8838]) +#endif +#ifndef XmNpreeditType +#define XmNpreeditType ((char*)&_XmStrings[8851]) +#endif +#ifndef XmNprocessingDirection +#define XmNprocessingDirection ((char*)&_XmStrings[8863]) +#endif +#ifndef XmNpromptString +#define XmNpromptString ((char*)&_XmStrings[8883]) +#endif +#ifndef XmNprotocolCallback +#define XmNprotocolCallback ((char*)&_XmStrings[8896]) +#endif +#ifndef XmNpushButtonEnabled +#define XmNpushButtonEnabled ((char*)&_XmStrings[8913]) +#endif +#ifndef XmNqualifySearchDataProc +#define XmNqualifySearchDataProc ((char*)&_XmStrings[8931]) +#endif +#ifndef XmNradioAlwaysOne +#define XmNradioAlwaysOne ((char*)&_XmStrings[8953]) +#endif +#ifndef XmNradioBehavior +#define XmNradioBehavior ((char*)&_XmStrings[8968]) +#endif +#ifndef XmNrealizeCallback +#define XmNrealizeCallback ((char*)&_XmStrings[8982]) +#endif +#ifndef XmNrecomputeSize +#define XmNrecomputeSize ((char*)&_XmStrings[8998]) +#endif +#ifndef XmNrectangles +#define XmNrectangles ((char*)&_XmStrings[9012]) +#endif +#ifndef XmNrefigureMode +#define XmNrefigureMode ((char*)&_XmStrings[9023]) +#endif +#ifndef XmNrepeatDelay +#define XmNrepeatDelay ((char*)&_XmStrings[9036]) +#endif +#ifndef XmNresizable +#define XmNresizable ((char*)&_XmStrings[9048]) +#endif +#ifndef XmNresizeCallback +#define XmNresizeCallback ((char*)&_XmStrings[9058]) +#endif +#ifndef XmNresizeHeight +#define XmNresizeHeight ((char*)&_XmStrings[9073]) +#endif +#ifndef XmNresizePolicy +#define XmNresizePolicy ((char*)&_XmStrings[9086]) +#endif +#ifndef XmNresizeWidth +#define XmNresizeWidth ((char*)&_XmStrings[9099]) +#endif +#ifndef XmNrightAttachment +#define XmNrightAttachment ((char*)&_XmStrings[9111]) +#endif +#ifndef XmNrightOffset +#define XmNrightOffset ((char*)&_XmStrings[9127]) +#endif +#ifndef XmNrightPosition +#define XmNrightPosition ((char*)&_XmStrings[9139]) +#endif +#ifndef XmNrightWidget +#define XmNrightWidget ((char*)&_XmStrings[9153]) +#endif +#ifndef XmNrowColumnType +#define XmNrowColumnType ((char*)&_XmStrings[9165]) +#endif +#ifndef XmNrows +#define XmNrows ((char*)&_XmStrings[9179]) +#endif +#ifndef XmNrubberPositioning +#define XmNrubberPositioning ((char*)&_XmStrings[9184]) +#endif +#ifndef XmNsashHeight +#define XmNsashHeight ((char*)&_XmStrings[9202]) +#endif +#ifndef XmNsashIndent +#define XmNsashIndent ((char*)&_XmStrings[9213]) +#endif +#ifndef XmNsashShadowThickness +#define XmNsashShadowThickness ((char*)&_XmStrings[9224]) +#endif +#ifndef XmNsashWidth +#define XmNsashWidth ((char*)&_XmStrings[9244]) +#endif +#ifndef XmNscaleHeight +#define XmNscaleHeight ((char*)&_XmStrings[9254]) +#endif +#ifndef XmNscaleMultiple +#define XmNscaleMultiple ((char*)&_XmStrings[9266]) +#endif +#ifndef XmNscaleWidth +#define XmNscaleWidth ((char*)&_XmStrings[9280]) +#endif +#ifndef XmNscrollBarDisplayPolicy +#define XmNscrollBarDisplayPolicy ((char*)&_XmStrings[9291]) +#endif +#ifndef XmNscrollBarPlacement +#define XmNscrollBarPlacement ((char*)&_XmStrings[9314]) +#endif +#ifndef XmNscrollHorizontal +#define XmNscrollHorizontal ((char*)&_XmStrings[9333]) +#endif +#ifndef XmNscrollLeftSide +#define XmNscrollLeftSide ((char*)&_XmStrings[9350]) +#endif +#ifndef XmNscrollTopSide +#define XmNscrollTopSide ((char*)&_XmStrings[9365]) +#endif +#ifndef XmNscrollVertical +#define XmNscrollVertical ((char*)&_XmStrings[9379]) +#endif +#ifndef XmNscrolledWindowMarginHeight +#define XmNscrolledWindowMarginHeight ((char*)&_XmStrings[9394]) +#endif +#ifndef XmNscrolledWindowMarginWidth +#define XmNscrolledWindowMarginWidth ((char*)&_XmStrings[9421]) +#endif +#ifndef XmNscrollingPolicy +#define XmNscrollingPolicy ((char*)&_XmStrings[9447]) +#endif +#ifndef XmNselectColor +#define XmNselectColor ((char*)&_XmStrings[9463]) +#endif +#ifndef XmNselectInsensitivePixmap +#define XmNselectInsensitivePixmap ((char*)&_XmStrings[9475]) +#endif +#ifndef XmNselectPixmap +#define XmNselectPixmap ((char*)&_XmStrings[9499]) +#endif +#ifndef XmNselectThreshold +#define XmNselectThreshold ((char*)&_XmStrings[9512]) +#endif +#ifndef XmNselectedItemCount +#define XmNselectedItemCount ((char*)&_XmStrings[9528]) +#endif +#ifndef XmNselectedItems +#define XmNselectedItems ((char*)&_XmStrings[9546]) +#endif +#ifndef XmNselectionArrayCount +#define XmNselectionArrayCount ((char*)&_XmStrings[9560]) +#endif +#ifndef XmNselectionLabelString +#define XmNselectionLabelString ((char*)&_XmStrings[9580]) +#endif +#ifndef XmNselectionPolicy +#define XmNselectionPolicy ((char*)&_XmStrings[9601]) +#endif +#ifndef XmNseparatorOn +#define XmNseparatorOn ((char*)&_XmStrings[9617]) +#endif +#ifndef XmNseparatorType +#define XmNseparatorType ((char*)&_XmStrings[9629]) +#endif +#ifndef XmNset +#define XmNset ((char*)&_XmStrings[9643]) +#endif +#ifndef XmNshadow +#define XmNshadow ((char*)&_XmStrings[9647]) +#endif +#ifndef XmNshadowThickness +#define XmNshadowThickness ((char*)&_XmStrings[9654]) +#endif +#ifndef XmNshadowType +#define XmNshadowType ((char*)&_XmStrings[9670]) +#endif +#ifndef XmNshellUnitType +#define XmNshellUnitType ((char*)&_XmStrings[9681]) +#endif +#ifndef XmNshowArrows +#define XmNshowArrows ((char*)&_XmStrings[9695]) +#endif +#ifndef XmNshowAsDefault +#define XmNshowAsDefault ((char*)&_XmStrings[9706]) +#endif +#ifndef XmNshowSeparator +#define XmNshowSeparator ((char*)&_XmStrings[9720]) +#endif +#ifndef XmNshowValue +#define XmNshowValue ((char*)&_XmStrings[9734]) +#endif +#ifndef XmNsimpleCallback +#define XmNsimpleCallback ((char*)&_XmStrings[9744]) +#endif +#ifndef XmNsingleSelectionCallback +#define XmNsingleSelectionCallback ((char*)&_XmStrings[9759]) +#endif +#ifndef XmNsizePolicy +#define XmNsizePolicy ((char*)&_XmStrings[9783]) +#endif +#ifndef XmNskipAdjust +#define XmNskipAdjust ((char*)&_XmStrings[9794]) +#endif +#ifndef XmNsliderSize +#define XmNsliderSize ((char*)&_XmStrings[9805]) +#endif +#ifndef XmNsource +#define XmNsource ((char*)&_XmStrings[9816]) +#endif +#ifndef XmNsourceCursorIcon +#define XmNsourceCursorIcon ((char*)&_XmStrings[9823]) +#endif +#ifndef XmNsourceIsExternal +#define XmNsourceIsExternal ((char*)&_XmStrings[9840]) +#endif +#ifndef XmNsourcePixmapIcon +#define XmNsourcePixmapIcon ((char*)&_XmStrings[9857]) +#endif +#ifndef XmNsourceWidget +#define XmNsourceWidget ((char*)&_XmStrings[9874]) +#endif +#ifndef XmNsourceWindow +#define XmNsourceWindow ((char*)&_XmStrings[9887]) +#endif +#ifndef XmNspacing +#define XmNspacing ((char*)&_XmStrings[9900]) +#endif +#ifndef XmNspotLocation +#define XmNspotLocation ((char*)&_XmStrings[9908]) +#endif +#ifndef XmNstartTime +#define XmNstartTime ((char*)&_XmStrings[9921]) +#endif +#ifndef XmNstateCursorIcon +#define XmNstateCursorIcon ((char*)&_XmStrings[9931]) +#endif +#ifndef XmNstringDirection +#define XmNstringDirection ((char*)&_XmStrings[9947]) +#endif +#ifndef XmNsubMenuId +#define XmNsubMenuId ((char*)&_XmStrings[9963]) +#endif +#ifndef XmNsymbolPixmap +#define XmNsymbolPixmap ((char*)&_XmStrings[9973]) +#endif +#ifndef XmNtearOffMenuActivateCallback +#define XmNtearOffMenuActivateCallback ((char*)&_XmStrings[9986]) +#endif +#ifndef XmNtearOffMenuDeactivateCallback +#define XmNtearOffMenuDeactivateCallback ((char*)&_XmStrings[10014]) +#endif +#ifndef XmNtearOffModel +#define XmNtearOffModel ((char*)&_XmStrings[10044]) +#endif +#ifndef XmNtextAccelerators +#define XmNtextAccelerators ((char*)&_XmStrings[10057]) +#endif +#ifndef XmNtextColumns +#define XmNtextColumns ((char*)&_XmStrings[10074]) +#endif +#ifndef XmNtextFontList +#define XmNtextFontList ((char*)&_XmStrings[10086]) +#endif +#ifndef XmNtextString +#define XmNtextString ((char*)&_XmStrings[10099]) +#endif +#ifndef XmNtextTranslations +#define XmNtextTranslations ((char*)&_XmStrings[10110]) +#endif +#ifndef XmNtextValue +#define XmNtextValue ((char*)&_XmStrings[10127]) +#endif +#ifndef XmNtitleString +#define XmNtitleString ((char*)&_XmStrings[10137]) +#endif +#ifndef XmNtoBottomCallback +#define XmNtoBottomCallback ((char*)&_XmStrings[10149]) +#endif +#ifndef XmNtoPositionCallback +#define XmNtoPositionCallback ((char*)&_XmStrings[10166]) +#endif +#ifndef XmNtoTopCallback +#define XmNtoTopCallback ((char*)&_XmStrings[10185]) +#endif +#ifndef XmNtopAttachment +#define XmNtopAttachment ((char*)&_XmStrings[10199]) +#endif +#ifndef XmNtopCharacter +#define XmNtopCharacter ((char*)&_XmStrings[10213]) +#endif +#ifndef XmNtopItemPosition +#define XmNtopItemPosition ((char*)&_XmStrings[10226]) +#endif +#ifndef XmNtopLevelEnterCallback +#define XmNtopLevelEnterCallback ((char*)&_XmStrings[10242]) +#endif +#ifndef XmNtopLevelLeaveCallback +#define XmNtopLevelLeaveCallback ((char*)&_XmStrings[10264]) +#endif +#ifndef XmNtopOffset +#define XmNtopOffset ((char*)&_XmStrings[10286]) +#endif +#ifndef XmNtopPosition +#define XmNtopPosition ((char*)&_XmStrings[10296]) +#endif +#ifndef XmNtopShadowColor +#define XmNtopShadowColor ((char*)&_XmStrings[10308]) +#endif +#ifndef XmNtopShadowPixmap +#define XmNtopShadowPixmap ((char*)&_XmStrings[10323]) +#endif +#ifndef XmNtopWidget +#define XmNtopWidget ((char*)&_XmStrings[10339]) +#endif +#ifndef XmNtransferProc +#define XmNtransferProc ((char*)&_XmStrings[10349]) +#endif +#ifndef XmNtransferStatus +#define XmNtransferStatus ((char*)&_XmStrings[10362]) +#endif +#ifndef XmNtraversalCallback +#define XmNtraversalCallback ((char*)&_XmStrings[10377]) +#endif +#ifndef XmNtraversalOn +#define XmNtraversalOn ((char*)&_XmStrings[10395]) +#endif +#ifndef XmNtraversalType +#define XmNtraversalType ((char*)&_XmStrings[10407]) +#endif +#ifndef XmNtraverseObscuredCallback +#define XmNtraverseObscuredCallback ((char*)&_XmStrings[10421]) +#endif +#ifndef XmNtreeUpdateProc +#define XmNtreeUpdateProc ((char*)&_XmStrings[10446]) +#endif +#ifndef XmNtroughColor +#define XmNtroughColor ((char*)&_XmStrings[10461]) +#endif +#ifndef XmNunitType +#define XmNunitType ((char*)&_XmStrings[10473]) +#endif +#ifndef XmNunmapCallback +#define XmNunmapCallback ((char*)&_XmStrings[10482]) +#endif +#ifndef XmNunpostBehavior +#define XmNunpostBehavior ((char*)&_XmStrings[10496]) +#endif +#ifndef XmNunselectPixmap +#define XmNunselectPixmap ((char*)&_XmStrings[10511]) +#endif +#ifndef XmNupdateSliderSize +#define XmNupdateSliderSize ((char*)&_XmStrings[10526]) +#endif +#ifndef XmNuseAsyncGeometry +#define XmNuseAsyncGeometry ((char*)&_XmStrings[10543]) +#endif +#ifndef XmNuserData +#define XmNuserData ((char*)&_XmStrings[10560]) +#endif +#ifndef XmNvalidCursorForeground +#define XmNvalidCursorForeground ((char*)&_XmStrings[10569]) +#endif +#ifndef XmNvalueChangedCallback +#define XmNvalueChangedCallback ((char*)&_XmStrings[10591]) +#endif +#ifndef XmNvalueWcs +#define XmNvalueWcs ((char*)&_XmStrings[10612]) +#endif +#ifndef XmNverifyBell +#define XmNverifyBell ((char*)&_XmStrings[10621]) +#endif +#ifndef XmNverticalFontUnit +#define XmNverticalFontUnit ((char*)&_XmStrings[10632]) +#endif +#ifndef XmNverticalScrollBar +#define XmNverticalScrollBar ((char*)&_XmStrings[10649]) +#endif +#ifndef XmNverticalSpacing +#define XmNverticalSpacing ((char*)&_XmStrings[10667]) +#endif +#ifndef XmNvisibleItemCount +#define XmNvisibleItemCount ((char*)&_XmStrings[10683]) +#endif +#ifndef XmNvisibleWhenOff +#define XmNvisibleWhenOff ((char*)&_XmStrings[10700]) +#endif +#ifndef XmNvisualPolicy +#define XmNvisualPolicy ((char*)&_XmStrings[10715]) +#endif +#ifndef XmNwhichButton +#define XmNwhichButton ((char*)&_XmStrings[10728]) +#endif +#ifndef XmNwordWrap +#define XmNwordWrap ((char*)&_XmStrings[10740]) +#endif +#ifndef XmNworkWindow +#define XmNworkWindow ((char*)&_XmStrings[10749]) +#endif +#ifndef XmRAlignment +#define XmRAlignment ((char*)&_XmStrings[10760]) +#endif +#ifndef XmRAnimationMask +#define XmRAnimationMask ((char*)&_XmStrings[10770]) +#endif +#ifndef XmRAnimationPixmap +#define XmRAnimationPixmap ((char*)&_XmStrings[10784]) +#endif +#ifndef XmRAnimationStyle +#define XmRAnimationStyle ((char*)&_XmStrings[10800]) +#endif +#ifndef XmRArrowDirection +#define XmRArrowDirection ((char*)&_XmStrings[10815]) +#endif +#ifndef XmRAtomList +#define XmRAtomList ((char*)&_XmStrings[10830]) +#endif +#ifndef XmRAttachment +#define XmRAttachment ((char*)&_XmStrings[10839]) +#endif +#ifndef XmRAudibleWarning +#define XmRAudibleWarning ((char*)&_XmStrings[10850]) +#endif +#ifndef XmRAvailability +#define XmRAvailability ((char*)&_XmStrings[10865]) +#endif +#ifndef XmRBackgroundPixmap +#define XmRBackgroundPixmap ((char*)&_XmStrings[10878]) +#endif +#ifndef XmRBlendModel +#define XmRBlendModel ((char*)&_XmStrings[10895]) +#endif +#ifndef XmRBooleanDimension +#define XmRBooleanDimension ((char*)&_XmStrings[10906]) +#endif +#ifndef XmRBottomShadowPixmap +#define XmRBottomShadowPixmap ((char*)&_XmStrings[10923]) +#endif +#ifndef XmRButtonType +#define XmRButtonType ((char*)&_XmStrings[10942]) +#endif +#ifndef XmRCallbackProc +#define XmRCallbackProc ((char*)&_XmStrings[10953]) +#endif +#ifndef XmRChar +#define XmRChar ((char*)&_XmStrings[10966]) +#endif +#ifndef XmRCharSetTable +#define XmRCharSetTable ((char*)&_XmStrings[10971]) +#endif +#ifndef XmRChildHorizontalAlignment +#define XmRChildHorizontalAlignment ((char*)&_XmStrings[10984]) +#endif +#ifndef XmRChildPlacement +#define XmRChildPlacement ((char*)&_XmStrings[11009]) +#endif +#ifndef XmRChildType +#define XmRChildType ((char*)&_XmStrings[11024]) +#endif +#ifndef XmRChildVerticalAlignment +#define XmRChildVerticalAlignment ((char*)&_XmStrings[11034]) +#endif +#ifndef XmRCommandWindowLocation +#define XmRCommandWindowLocation ((char*)&_XmStrings[11057]) +#endif +#ifndef XmRCompoundText +#define XmRCompoundText ((char*)&_XmStrings[11079]) +#endif +#ifndef XmRDefaultButtonType +#define XmRDefaultButtonType ((char*)&_XmStrings[11092]) +#endif +#ifndef XmRDeleteResponse +#define XmRDeleteResponse ((char*)&_XmStrings[11110]) +#endif +#ifndef XmRDialogStyle +#define XmRDialogStyle ((char*)&_XmStrings[11125]) +#endif +#ifndef XmRDialogType +#define XmRDialogType ((char*)&_XmStrings[11137]) +#endif +#ifndef XmRDoubleClickInterval +#define XmRDoubleClickInterval ((char*)&_XmStrings[11148]) +#endif +#ifndef XmRDragInitiatorProtocolStyle +#define XmRDragInitiatorProtocolStyle ((char*)&_XmStrings[11168]) +#endif +#ifndef XmRDragReceiverProtocolStyle +#define XmRDragReceiverProtocolStyle ((char*)&_XmStrings[11195]) +#endif +#ifndef XmRDropSiteActivity +#define XmRDropSiteActivity ((char*)&_XmStrings[11221]) +#endif +#ifndef XmRDropSiteOperations +#define XmRDropSiteOperations ((char*)&_XmStrings[11238]) +#endif +#ifndef XmRDropSiteType +#define XmRDropSiteType ((char*)&_XmStrings[11257]) +#endif +#ifndef XmRDropTransfers +#define XmRDropTransfers ((char*)&_XmStrings[11270]) +#endif +#ifndef XmRExtensionType +#define XmRExtensionType ((char*)&_XmStrings[11284]) +#endif +#ifndef XmRFileTypeMask +#define XmRFileTypeMask ((char*)&_XmStrings[11298]) +#endif +#ifndef XmRFontList +#define XmRFontList ((char*)&_XmStrings[11311]) +#endif +#ifndef XmRGadgetPixmap +#define XmRGadgetPixmap ((char*)&_XmStrings[11320]) +#endif +#ifndef XmRHighlightPixmap +#define XmRHighlightPixmap ((char*)&_XmStrings[11333]) +#endif +#ifndef XmRHorizontalDimension +#define XmRHorizontalDimension ((char*)&_XmStrings[11349]) +#endif +#ifndef XmRHorizontalInt +#define XmRHorizontalInt ((char*)&_XmStrings[11369]) +#endif +#ifndef XmRHorizontalPosition +#define XmRHorizontalPosition ((char*)&_XmStrings[11383]) +#endif +#ifndef XmRIconAttachment +#define XmRIconAttachment ((char*)&_XmStrings[11402]) +#endif +#ifndef XmRImportTargets +#define XmRImportTargets ((char*)&_XmStrings[11417]) +#endif +#ifndef XmRIndicatorType +#define XmRIndicatorType ((char*)&_XmStrings[11431]) +#endif +#ifndef XmRItemCount +#define XmRItemCount ((char*)&_XmStrings[11445]) +#endif +#ifndef XmRItems +#define XmRItems ((char*)&_XmStrings[11455]) +#endif +#ifndef XmRKeySym +#define XmRKeySym ((char*)&_XmStrings[11461]) +#endif +#ifndef XmRKeySymTable +#define XmRKeySymTable ((char*)&_XmStrings[11468]) +#endif +#ifndef XmRKeyboardFocusPolicy +#define XmRKeyboardFocusPolicy ((char*)&_XmStrings[11480]) +#endif +#ifndef XmRLabelType +#define XmRLabelType ((char*)&_XmStrings[11500]) +#endif +#ifndef XmRListMarginHeight +#define XmRListMarginHeight ((char*)&_XmStrings[11510]) +#endif +#ifndef XmRListMarginWidth +#define XmRListMarginWidth ((char*)&_XmStrings[11527]) +#endif +#ifndef XmRListSizePolicy +#define XmRListSizePolicy ((char*)&_XmStrings[11543]) +#endif +#ifndef XmRListSpacing +#define XmRListSpacing ((char*)&_XmStrings[11558]) +#endif +#ifndef XmRManBottomShadowPixmap +#define XmRManBottomShadowPixmap ((char*)&_XmStrings[11570]) +#endif +#ifndef XmRManForegroundPixmap +#define XmRManForegroundPixmap ((char*)&_XmStrings[11592]) +#endif +#ifndef XmRManHighlightPixmap +#define XmRManHighlightPixmap ((char*)&_XmStrings[11612]) +#endif +#ifndef XmRManTopShadowPixmap +#define XmRManTopShadowPixmap ((char*)&_XmStrings[11631]) +#endif +#ifndef XmRMenuWidget +#define XmRMenuWidget ((char*)&_XmStrings[11650]) +#endif +#ifndef XmRMnemonic +#define XmRMnemonic ((char*)&_XmStrings[11661]) +#endif +#ifndef XmRMultiClick +#define XmRMultiClick ((char*)&_XmStrings[11670]) +#endif +#ifndef XmRNavigationType +#define XmRNavigationType ((char*)&_XmStrings[11681]) +#endif +#ifndef XmRPacking +#define XmRPacking ((char*)&_XmStrings[11696]) +#endif +#ifndef XmRPrimForegroundPixmap +#define XmRPrimForegroundPixmap ((char*)&_XmStrings[11704]) +#endif +#ifndef XmRProc +#define XmRProc ((char*)&_XmStrings[11725]) +#endif +#ifndef XmRProcessingDirection +#define XmRProcessingDirection ((char*)&_XmStrings[11730]) +#endif +#ifndef XmRRectangleList +#define XmRRectangleList ((char*)&_XmStrings[11750]) +#endif +#ifndef XmRResizePolicy +#define XmRResizePolicy ((char*)&_XmStrings[11764]) +#endif +#ifndef XmRRowColumnType +#define XmRRowColumnType ((char*)&_XmStrings[11777]) +#endif +#ifndef XmRScrollBarDisplayPolicy +#define XmRScrollBarDisplayPolicy ((char*)&_XmStrings[11791]) +#endif +#ifndef XmRScrollBarPlacement +#define XmRScrollBarPlacement ((char*)&_XmStrings[11814]) +#endif +#ifndef XmRScrollingPolicy +#define XmRScrollingPolicy ((char*)&_XmStrings[11833]) +#endif +#ifndef XmRSelectedItemCount +#define XmRSelectedItemCount ((char*)&_XmStrings[11849]) +#endif +#ifndef XmRSelectedItems +#define XmRSelectedItems ((char*)&_XmStrings[11867]) +#endif +#ifndef XmRSelectionPolicy +#define XmRSelectionPolicy ((char*)&_XmStrings[11881]) +#endif +#ifndef XmRSelectionType +#define XmRSelectionType ((char*)&_XmStrings[11897]) +#endif +#ifndef XmRSeparatorType +#define XmRSeparatorType ((char*)&_XmStrings[11911]) +#endif +#ifndef XmRShadowType +#define XmRShadowType ((char*)&_XmStrings[11925]) +#endif +#ifndef XmRShellHorizDim +#define XmRShellHorizDim ((char*)&_XmStrings[11936]) +#endif +#ifndef XmRShellHorizPos +#define XmRShellHorizPos ((char*)&_XmStrings[11950]) +#endif +#ifndef XmRShellUnitType +#define XmRShellUnitType ((char*)&_XmStrings[11964]) +#endif +#ifndef XmRShellVertDim +#define XmRShellVertDim ((char*)&_XmStrings[11978]) +#endif +#ifndef XmRShellVertPos +#define XmRShellVertPos ((char*)&_XmStrings[11991]) +#endif +#ifndef XmRSizePolicy +#define XmRSizePolicy ((char*)&_XmStrings[12004]) +#endif +#ifndef XmRStringDirection +#define XmRStringDirection ((char*)&_XmStrings[12015]) +#endif +#ifndef XmRTearOffModel +#define XmRTearOffModel ((char*)&_XmStrings[12031]) +#endif +#ifndef XmRTopShadowPixmap +#define XmRTopShadowPixmap ((char*)&_XmStrings[12044]) +#endif +#ifndef XmRTransferStatus +#define XmRTransferStatus ((char*)&_XmStrings[12060]) +#endif +#ifndef XmRTraversalType +#define XmRTraversalType ((char*)&_XmStrings[12075]) +#endif +#ifndef XmRUnitType +#define XmRUnitType ((char*)&_XmStrings[12089]) +#endif +#ifndef XmRUnpostBehavior +#define XmRUnpostBehavior ((char*)&_XmStrings[12098]) +#endif +#ifndef XmRValueWcs +#define XmRValueWcs ((char*)&_XmStrings[12113]) +#endif +#ifndef XmRVerticalAlignment +#define XmRVerticalAlignment ((char*)&_XmStrings[12122]) +#endif +#ifndef XmRVerticalDimension +#define XmRVerticalDimension ((char*)&_XmStrings[12140]) +#endif +#ifndef XmRVerticalInt +#define XmRVerticalInt ((char*)&_XmStrings[12158]) +#endif +#ifndef XmRVerticalPosition +#define XmRVerticalPosition ((char*)&_XmStrings[12170]) +#endif +#ifndef XmRVirtualBinding +#define XmRVirtualBinding ((char*)&_XmStrings[12187]) +#endif +#ifndef XmRVisibleItemCount +#define XmRVisibleItemCount ((char*)&_XmStrings[12202]) +#endif +#ifndef XmRVisualPolicy +#define XmRVisualPolicy ((char*)&_XmStrings[12219]) +#endif +#ifndef XmRWhichButton +#define XmRWhichButton ((char*)&_XmStrings[12232]) +#endif +#ifndef XmRXmBackgroundPixmap +#define XmRXmBackgroundPixmap ((char*)&_XmStrings[12244]) +#endif +#ifndef XmRXmString +#define XmRXmString ((char*)&_XmStrings[12263]) +#endif +#ifndef XmRXmStringCharSet +#define XmRXmStringCharSet ((char*)&_XmStrings[12272]) +#endif +#ifndef XmRXmStringTable +#define XmRXmStringTable ((char*)&_XmStrings[12288]) +#endif +#ifndef XmVosfActivate +#define XmVosfActivate ((char*)&_XmStrings[12302]) +#endif +#ifndef XmVosfAddMode +#define XmVosfAddMode ((char*)&_XmStrings[12314]) +#endif +#ifndef XmVosfBackSpace +#define XmVosfBackSpace ((char*)&_XmStrings[12325]) +#endif +#ifndef XmVosfBeginLine +#define XmVosfBeginLine ((char*)&_XmStrings[12338]) +#endif +#ifndef XmVosfCancel +#define XmVosfCancel ((char*)&_XmStrings[12351]) +#endif +#ifndef XmVosfClear +#define XmVosfClear ((char*)&_XmStrings[12361]) +#endif +#ifndef XmVosfCopy +#define XmVosfCopy ((char*)&_XmStrings[12370]) +#endif +#ifndef XmVosfCut +#define XmVosfCut ((char*)&_XmStrings[12378]) +#endif +#ifndef XmVosfDelete +#define XmVosfDelete ((char*)&_XmStrings[12385]) +#endif +#ifndef XmVosfDown +#define XmVosfDown ((char*)&_XmStrings[12395]) +#endif +#ifndef XmVosfEndLine +#define XmVosfEndLine ((char*)&_XmStrings[12403]) +#endif +#ifndef XmVosfHelp +#define XmVosfHelp ((char*)&_XmStrings[12414]) +#endif +#ifndef XmVosfInsert +#define XmVosfInsert ((char*)&_XmStrings[12422]) +#endif +#ifndef XmVosfLeft +#define XmVosfLeft ((char*)&_XmStrings[12432]) +#endif +#ifndef XmVosfMenu +#define XmVosfMenu ((char*)&_XmStrings[12440]) +#endif +#ifndef XmVosfMenuBar +#define XmVosfMenuBar ((char*)&_XmStrings[12448]) +#endif +#ifndef XmVosfPageDown +#define XmVosfPageDown ((char*)&_XmStrings[12459]) +#endif +#ifndef XmVosfPageLeft +#define XmVosfPageLeft ((char*)&_XmStrings[12471]) +#endif +#ifndef XmVosfPageRight +#define XmVosfPageRight ((char*)&_XmStrings[12483]) +#endif +#ifndef XmVosfPageUp +#define XmVosfPageUp ((char*)&_XmStrings[12496]) +#endif +#ifndef XmVosfPaste +#define XmVosfPaste ((char*)&_XmStrings[12506]) +#endif +#ifndef XmVosfPrimaryPaste +#define XmVosfPrimaryPaste ((char*)&_XmStrings[12515]) +#endif +#ifndef XmVosfQuickPaste +#define XmVosfQuickPaste ((char*)&_XmStrings[12531]) +#endif +#ifndef XmVosfRight +#define XmVosfRight ((char*)&_XmStrings[12545]) +#endif +#ifndef XmVosfSelect +#define XmVosfSelect ((char*)&_XmStrings[12554]) +#endif +#ifndef XmVosfUndo +#define XmVosfUndo ((char*)&_XmStrings[12564]) +#endif +#ifndef XmVosfUp +#define XmVosfUp ((char*)&_XmStrings[12572]) +#endif +#ifndef XmSFONTLIST_DEFAULT_TAG_STRING +#define XmSFONTLIST_DEFAULT_TAG_STRING ((char*)&_XmStrings[12578]) +#endif +#ifndef XmSXmFONTLIST_DEFAULT_TAG_STRING +#define XmSXmFONTLIST_DEFAULT_TAG_STRING ((char*)&_XmStrings[12606]) +#endif +#ifndef XmRTopItemPosition +#define XmRTopItemPosition ((char*)&_XmStrings[12636]) +#endif +#ifndef XmNtearOffTitle +#define XmNtearOffTitle ((char*)&_XmStrings[12652]) +#endif +#ifndef XmCTearOffTitle +#define XmCTearOffTitle ((char*)&_XmStrings[12665]) +#endif +#ifndef XmNpopupHandlerCallback +#define XmNpopupHandlerCallback ((char*)&_XmStrings[12678]) +#endif +#ifndef XmNconvertCallback +#define XmNconvertCallback ((char*)&_XmStrings[12699]) +#endif +#ifndef XmNdestinationCallback +#define XmNdestinationCallback ((char*)&_XmStrings[12715]) +#endif +#ifndef XmNselectedItem +#define XmNselectedItem ((char*)&_XmStrings[12735]) +#endif +#ifndef XmCSelectedItem +#define XmCSelectedItem ((char*)&_XmStrings[12748]) +#endif +#ifndef XmNselectionCallback +#define XmNselectionCallback ((char*)&_XmStrings[12761]) +#endif +#ifndef XmNmatchBehavior +#define XmNmatchBehavior ((char*)&_XmStrings[12779]) +#endif +#ifndef XmCMatchBehavior +#define XmCMatchBehavior ((char*)&_XmStrings[12793]) +#endif +#ifndef XmNnoFontCallback +#define XmNnoFontCallback ((char*)&_XmStrings[12807]) +#endif +#ifndef XmNtextPath +#define XmNtextPath ((char*)&_XmStrings[12822]) +#endif +#ifndef XmNeditingPath +#define XmNeditingPath ((char*)&_XmStrings[12831]) +#endif +#ifndef XmCEditingPath +#define XmCEditingPath ((char*)&_XmStrings[12843]) +#endif +#ifndef XmNbidirectionalCursor +#define XmNbidirectionalCursor ((char*)&_XmStrings[12855]) +#endif +#ifndef XmCBidirectionalCursor +#define XmCBidirectionalCursor ((char*)&_XmStrings[12875]) +#endif +#ifndef XmNcollapsedStatePixmap +#define XmNcollapsedStatePixmap ((char*)&_XmStrings[12895]) +#endif +#ifndef XmNdetailColumnHeading +#define XmNdetailColumnHeading ((char*)&_XmStrings[12916]) +#endif +#ifndef XmNdetailCount +#define XmNdetailCount ((char*)&_XmStrings[12936]) +#endif +#ifndef XmNdetailTabList +#define XmNdetailTabList ((char*)&_XmStrings[12948]) +#endif +#ifndef XmNexpandedStatePixmap +#define XmNexpandedStatePixmap ((char*)&_XmStrings[12962]) +#endif +#ifndef XmNlargeCellHeight +#define XmNlargeCellHeight ((char*)&_XmStrings[12982]) +#endif +#ifndef XmNlargeCellWidth +#define XmNlargeCellWidth ((char*)&_XmStrings[12998]) +#endif +#ifndef XmNlayoutType +#define XmNlayoutType ((char*)&_XmStrings[13013]) +#endif +#ifndef XmNoutlineIndentation +#define XmNoutlineIndentation ((char*)&_XmStrings[13024]) +#endif +#ifndef XmNoutlineLineStyle +#define XmNoutlineLineStyle ((char*)&_XmStrings[13043]) +#endif +#ifndef XmNprimaryOwnership +#define XmNprimaryOwnership ((char*)&_XmStrings[13060]) +#endif +#ifndef XmNselectionTechnique +#define XmNselectionTechnique ((char*)&_XmStrings[13077]) +#endif +#ifndef XmNsmallCellHeight +#define XmNsmallCellHeight ((char*)&_XmStrings[13096]) +#endif +#ifndef XmNsmallCellWidth +#define XmNsmallCellWidth ((char*)&_XmStrings[13112]) +#endif +#ifndef XmNspatialStyle +#define XmNspatialStyle ((char*)&_XmStrings[13127]) +#endif +#ifndef XmNentryParent +#define XmNentryParent ((char*)&_XmStrings[13140]) +#endif +#ifndef XmNlargeIconX +#define XmNlargeIconX ((char*)&_XmStrings[13152]) +#endif +#ifndef XmNlargeIconY +#define XmNlargeIconY ((char*)&_XmStrings[13163]) +#endif +#ifndef XmNsmallIconX +#define XmNsmallIconX ((char*)&_XmStrings[13174]) +#endif +#ifndef XmNsmallIconY +#define XmNsmallIconY ((char*)&_XmStrings[13185]) +#endif +#ifndef XmCCollapsedStatePixmap +#define XmCCollapsedStatePixmap ((char*)&_XmStrings[13196]) +#endif +#ifndef XmCDetailColumnHeading +#define XmCDetailColumnHeading ((char*)&_XmStrings[13217]) +#endif +#ifndef XmCDetailCount +#define XmCDetailCount ((char*)&_XmStrings[13237]) +#endif +#ifndef XmCDetailMask +#define XmCDetailMask ((char*)&_XmStrings[13249]) +#endif +#ifndef XmCEntryViewType +#define XmCEntryViewType ((char*)&_XmStrings[13260]) +#endif +#ifndef XmCLineStyle +#define XmCLineStyle ((char*)&_XmStrings[13274]) +#endif +#ifndef XmCDetailTabList +#define XmCDetailTabList ((char*)&_XmStrings[13284]) +#endif +#ifndef XmCExpandedStatePixmap +#define XmCExpandedStatePixmap ((char*)&_XmStrings[13298]) +#endif +#ifndef XmCIncludeModel +#define XmCIncludeModel ((char*)&_XmStrings[13318]) +#endif +#ifndef XmCCellHeight +#define XmCCellHeight ((char*)&_XmStrings[13331]) +#endif +#ifndef XmCCellWidth +#define XmCCellWidth ((char*)&_XmStrings[13342]) +#endif +#ifndef XmCLayoutType +#define XmCLayoutType ((char*)&_XmStrings[13352]) +#endif +#ifndef XmCOutlineIndentation +#define XmCOutlineIndentation ((char*)&_XmStrings[13363]) +#endif +#ifndef XmCPlaceModel +#define XmCPlaceModel ((char*)&_XmStrings[13382]) +#endif +#ifndef XmCPrimaryOwnership +#define XmCPrimaryOwnership ((char*)&_XmStrings[13393]) +#endif +#ifndef XmCSelectionTechnique +#define XmCSelectionTechnique ((char*)&_XmStrings[13410]) +#endif +#ifndef XmCSpatialStyle +#define XmCSpatialStyle ((char*)&_XmStrings[13429]) +#endif +#ifndef XmCEntryDetail +#define XmCEntryDetail ((char*)&_XmStrings[13442]) +#endif +#ifndef XmCExpandState +#define XmCExpandState ((char*)&_XmStrings[13454]) +#endif +#ifndef XmNlargeIcon +#define XmNlargeIcon ((char*)&_XmStrings[13466]) +#endif +#ifndef XmNlargeIconMask +#define XmNlargeIconMask ((char*)&_XmStrings[13476]) +#endif +#ifndef XmNlargeIconPixmap +#define XmNlargeIconPixmap ((char*)&_XmStrings[13490]) +#endif +#ifndef XmNsmallIcon +#define XmNsmallIcon ((char*)&_XmStrings[13506]) +#endif +#ifndef XmNsmallIconMask +#define XmNsmallIconMask ((char*)&_XmStrings[13516]) +#endif +#ifndef XmNsmallIconPixmap +#define XmNsmallIconPixmap ((char*)&_XmStrings[13530]) +#endif +#ifndef XmCIcon +#define XmCIcon ((char*)&_XmStrings[13546]) +#endif +#ifndef XmCViewType +#define XmCViewType ((char*)&_XmStrings[13551]) +#endif +#ifndef XmCVisualEmphasis +#define XmCVisualEmphasis ((char*)&_XmStrings[13560]) +#endif +#ifndef XmNcurrentPageNumber +#define XmNcurrentPageNumber ((char*)&_XmStrings[13575]) +#endif +#ifndef XmNfirstPageNumber +#define XmNfirstPageNumber ((char*)&_XmStrings[13593]) +#endif +#ifndef XmNlastPageNumber +#define XmNlastPageNumber ((char*)&_XmStrings[13609]) +#endif +#ifndef XmNbackPagePlacement +#define XmNbackPagePlacement ((char*)&_XmStrings[13624]) +#endif +#ifndef XmNbackPageNumber +#define XmNbackPageNumber ((char*)&_XmStrings[13642]) +#endif +#ifndef XmNbackPageSize +#define XmNbackPageSize ((char*)&_XmStrings[13657]) +#endif +#ifndef XmNbackPageForeground +#define XmNbackPageForeground ((char*)&_XmStrings[13670]) +#endif +#ifndef XmNbackPageBackground +#define XmNbackPageBackground ((char*)&_XmStrings[13689]) +#endif +#ifndef XmNframeBackground +#define XmNframeBackground ((char*)&_XmStrings[13708]) +#endif +#ifndef XmNbindingType +#define XmNbindingType ((char*)&_XmStrings[13724]) +#endif +#ifndef XmNbindingPixmap +#define XmNbindingPixmap ((char*)&_XmStrings[13736]) +#endif +#ifndef XmNbindingWidth +#define XmNbindingWidth ((char*)&_XmStrings[13750]) +#endif +#ifndef XmNmajorTabSpacing +#define XmNmajorTabSpacing ((char*)&_XmStrings[13763]) +#endif +#ifndef XmNminorTabSpacing +#define XmNminorTabSpacing ((char*)&_XmStrings[13779]) +#endif +#ifndef XmNinnerMarginWidth +#define XmNinnerMarginWidth ((char*)&_XmStrings[13795]) +#endif +#ifndef XmNinnerMarginHeight +#define XmNinnerMarginHeight ((char*)&_XmStrings[13812]) +#endif +#ifndef XmNframeShadowThickness +#define XmNframeShadowThickness ((char*)&_XmStrings[13830]) +#endif +#ifndef XmNpageNumber +#define XmNpageNumber ((char*)&_XmStrings[13851]) +#endif +#ifndef XmCCurrentPageNumber +#define XmCCurrentPageNumber ((char*)&_XmStrings[13862]) +#endif +#ifndef XmCFirstPageNumber +#define XmCFirstPageNumber ((char*)&_XmStrings[13880]) +#endif +#ifndef XmCLastPageNumber +#define XmCLastPageNumber ((char*)&_XmStrings[13896]) +#endif +#ifndef XmCBackPagePlacement +#define XmCBackPagePlacement ((char*)&_XmStrings[13911]) +#endif +#ifndef XmCBackPageNumber +#define XmCBackPageNumber ((char*)&_XmStrings[13929]) +#endif +#ifndef XmCBackPageSize +#define XmCBackPageSize ((char*)&_XmStrings[13944]) +#endif +#ifndef XmCBackPageForeground +#define XmCBackPageForeground ((char*)&_XmStrings[13957]) +#endif +#ifndef XmCBackPageBackground +#define XmCBackPageBackground ((char*)&_XmStrings[13976]) +#endif +#ifndef XmCFrameBackground +#define XmCFrameBackground ((char*)&_XmStrings[13995]) +#endif +#ifndef XmCBindingType +#define XmCBindingType ((char*)&_XmStrings[14011]) +#endif +#ifndef XmCBindingPixmap +#define XmCBindingPixmap ((char*)&_XmStrings[14023]) +#endif +#ifndef XmCBindingWidth +#define XmCBindingWidth ((char*)&_XmStrings[14037]) +#endif +#ifndef XmCMajorTabSpacing +#define XmCMajorTabSpacing ((char*)&_XmStrings[14050]) +#endif +#ifndef XmCMinorTabSpacing +#define XmCMinorTabSpacing ((char*)&_XmStrings[14066]) +#endif +#ifndef XmCInnerMarginWidth +#define XmCInnerMarginWidth ((char*)&_XmStrings[14082]) +#endif +#ifndef XmCInnerMarginHeight +#define XmCInnerMarginHeight ((char*)&_XmStrings[14099]) +#endif +#ifndef XmCPageChangeCallback +#define XmCPageChangeCallback ((char*)&_XmStrings[14117]) +#endif +#ifndef XmCPageNumber +#define XmCPageNumber ((char*)&_XmStrings[14136]) +#endif +#ifndef XmRArrowLayout +#define XmRArrowLayout ((char*)&_XmStrings[14147]) +#endif +#ifndef XmRArrowSensitivity +#define XmRArrowSensitivity ((char*)&_XmStrings[14159]) +#endif +#ifndef XmRSpinBoxChildType +#define XmRSpinBoxChildType ((char*)&_XmStrings[14176]) +#endif +#ifndef XmNarrowLayout +#define XmNarrowLayout ((char*)&_XmStrings[14193]) +#endif +#ifndef XmCArrowLayout +#define XmCArrowLayout ((char*)&_XmStrings[14205]) +#endif +#ifndef XmNarrowSensitivity +#define XmNarrowSensitivity ((char*)&_XmStrings[14217]) +#endif +#ifndef XmCArrowSensitivity +#define XmCArrowSensitivity ((char*)&_XmStrings[14234]) +#endif +#ifndef XmNdefaultArrowSensitivity +#define XmNdefaultArrowSensitivity ((char*)&_XmStrings[14251]) +#endif +#ifndef XmCDefaultArrowSensitivity +#define XmCDefaultArrowSensitivity ((char*)&_XmStrings[14275]) +#endif +#ifndef XmNarrowSize +#define XmNarrowSize ((char*)&_XmStrings[14299]) +#endif +#ifndef XmCArrowSize +#define XmCArrowSize ((char*)&_XmStrings[14309]) +#endif +#ifndef XmNspinBoxChildType +#define XmNspinBoxChildType ((char*)&_XmStrings[14319]) +#endif +#ifndef XmCSpinBoxChildType +#define XmCSpinBoxChildType ((char*)&_XmStrings[14336]) +#endif +#ifndef XmNposition +#define XmNposition ((char*)&_XmStrings[14353]) +#endif +#ifndef XmNnumValues +#define XmNnumValues ((char*)&_XmStrings[14362]) +#endif +#ifndef XmCNumValues +#define XmCNumValues ((char*)&_XmStrings[14372]) +#endif +#ifndef XmNvalues +#define XmNvalues ((char*)&_XmStrings[14382]) +#endif +#ifndef XmCValues +#define XmCValues ((char*)&_XmStrings[14389]) +#endif +#ifndef XmNminimumValue +#define XmNminimumValue ((char*)&_XmStrings[14396]) +#endif +#ifndef XmCMinimumValue +#define XmCMinimumValue ((char*)&_XmStrings[14409]) +#endif +#ifndef XmNmaximumValue +#define XmNmaximumValue ((char*)&_XmStrings[14422]) +#endif +#ifndef XmCMaximumValue +#define XmCMaximumValue ((char*)&_XmStrings[14435]) +#endif +#ifndef XmNincrementValue +#define XmNincrementValue ((char*)&_XmStrings[14448]) +#endif +#ifndef XmCIncrementValue +#define XmCIncrementValue ((char*)&_XmStrings[14463]) +#endif +#ifndef XmRAutomaticSelection +#define XmRAutomaticSelection ((char*)&_XmStrings[14478]) +#endif +#ifndef XmRLineStyle +#define XmRLineStyle ((char*)&_XmStrings[14497]) +#endif +#ifndef XmREntryViewType +#define XmREntryViewType ((char*)&_XmStrings[14507]) +#endif +#ifndef XmRDirection +#define XmRDirection ((char*)&_XmStrings[14521]) +#endif +#ifndef XmRLayoutType +#define XmRLayoutType ((char*)&_XmStrings[14531]) +#endif +#ifndef XmRPrimaryOwnership +#define XmRPrimaryOwnership ((char*)&_XmStrings[14542]) +#endif +#ifndef XmRSelectionTechnique +#define XmRSelectionTechnique ((char*)&_XmStrings[14559]) +#endif +#ifndef XmRSpatialStyle +#define XmRSpatialStyle ((char*)&_XmStrings[14578]) +#endif +#ifndef XmRTabList +#define XmRTabList ((char*)&_XmStrings[14591]) +#endif +#ifndef XmRViewType +#define XmRViewType ((char*)&_XmStrings[14599]) +#endif +#ifndef XmRVisualEmphasis +#define XmRVisualEmphasis ((char*)&_XmStrings[14608]) +#endif +#ifndef XmRBindingType +#define XmRBindingType ((char*)&_XmStrings[14623]) +#endif +#ifndef XmRNBChildType +#define XmRNBChildType ((char*)&_XmStrings[14635]) +#endif +#ifndef XmNentryViewType +#define XmNentryViewType ((char*)&_XmStrings[14647]) +#endif +#ifndef XmNinsensitiveStippleBitmap +#define XmNinsensitiveStippleBitmap ((char*)&_XmStrings[14661]) +#endif +#ifndef XmNlayoutDirection +#define XmNlayoutDirection ((char*)&_XmStrings[14686]) +#endif +#ifndef XmNviewType +#define XmNviewType ((char*)&_XmStrings[14702]) +#endif +#ifndef XmNvisualEmphasis +#define XmNvisualEmphasis ((char*)&_XmStrings[14711]) +#endif +#ifndef XmCLayoutDirection +#define XmCLayoutDirection ((char*)&_XmStrings[14726]) +#endif +#ifndef XmNsnapBackMultiple +#define XmNsnapBackMultiple ((char*)&_XmStrings[14742]) +#endif +#ifndef XmNslidingMode +#define XmNslidingMode ((char*)&_XmStrings[14759]) +#endif +#ifndef XmNsliderVisual +#define XmNsliderVisual ((char*)&_XmStrings[14771]) +#endif +#ifndef XmNautoDragModel +#define XmNautoDragModel ((char*)&_XmStrings[14784]) +#endif +#ifndef XmNcolorCalculationProc +#define XmNcolorCalculationProc ((char*)&_XmStrings[14798]) +#endif +#ifndef XmNbitmapConversionModel +#define XmNbitmapConversionModel ((char*)&_XmStrings[14819]) +#endif +#ifndef XmNcolorAllocationProc +#define XmNcolorAllocationProc ((char*)&_XmStrings[14841]) +#endif +#ifndef XmNselectionMode +#define XmNselectionMode ((char*)&_XmStrings[14861]) +#endif +#ifndef XmNselectedPositions +#define XmNselectedPositions ((char*)&_XmStrings[14875]) +#endif +#ifndef XmNselectedPositionCount +#define XmNselectedPositionCount ((char*)&_XmStrings[14893]) +#endif +#ifndef XmCSnapBackMultiple +#define XmCSnapBackMultiple ((char*)&_XmStrings[14915]) +#endif +#ifndef XmCSliderVisual +#define XmCSliderVisual ((char*)&_XmStrings[14932]) +#endif +#ifndef XmCSlidingMode +#define XmCSlidingMode ((char*)&_XmStrings[14945]) +#endif +#ifndef XmCAutoDragModel +#define XmCAutoDragModel ((char*)&_XmStrings[14957]) +#endif +#ifndef XmCColorCalculationProc +#define XmCColorCalculationProc ((char*)&_XmStrings[14971]) +#endif +#ifndef XmCBitmapConversionModel +#define XmCBitmapConversionModel ((char*)&_XmStrings[14992]) +#endif +#ifndef XmCColorAllocationProc +#define XmCColorAllocationProc ((char*)&_XmStrings[15014]) +#endif +#ifndef XmCInsensitiveStippleBitmap +#define XmCInsensitiveStippleBitmap ((char*)&_XmStrings[15034]) +#endif +#ifndef XmCSelectionMode +#define XmCSelectionMode ((char*)&_XmStrings[15059]) +#endif +#ifndef XmCSelectedPositions +#define XmCSelectedPositions ((char*)&_XmStrings[15073]) +#endif +#ifndef XmCSelectedPositionCount +#define XmCSelectedPositionCount ((char*)&_XmStrings[15091]) +#endif +#ifndef XmRSlidingMode +#define XmRSlidingMode ((char*)&_XmStrings[15113]) +#endif +#ifndef XmRShowArrows +#define XmRShowArrows ((char*)&_XmStrings[15125]) +#endif +#ifndef XmRSliderVisual +#define XmRSliderVisual ((char*)&_XmStrings[15136]) +#endif +#ifndef XmRShowValue +#define XmRShowValue ((char*)&_XmStrings[15149]) +#endif +#ifndef XmRAutoDragModel +#define XmRAutoDragModel ((char*)&_XmStrings[15159]) +#endif +#ifndef XmRSWChildType +#define XmRSWChildType ((char*)&_XmStrings[15173]) +#endif +#ifndef XmRBitmapConversionModel +#define XmRBitmapConversionModel ((char*)&_XmStrings[15185]) +#endif +#ifndef XmRSelectionMode +#define XmRSelectionMode ((char*)&_XmStrings[15207]) +#endif +#ifndef XmNinputPolicy +#define XmNinputPolicy ((char*)&_XmStrings[15221]) +#endif +#ifndef XmCInputPolicy +#define XmCInputPolicy ((char*)&_XmStrings[15233]) +#endif +#ifndef XmRInputPolicy +#define XmRInputPolicy ((char*)&_XmStrings[15245]) +#endif +#ifndef XmNtoggleMode +#define XmNtoggleMode ((char*)&_XmStrings[15257]) +#endif +#ifndef XmCToggleMode +#define XmCToggleMode ((char*)&_XmStrings[15268]) +#endif +#ifndef XmRToggleMode +#define XmRToggleMode ((char*)&_XmStrings[15279]) +#endif +#ifndef XmRIndicatorOn +#define XmRIndicatorOn ((char*)&_XmStrings[15290]) +#endif +#ifndef XmRSet +#define XmRSet ((char*)&_XmStrings[15302]) +#endif +#ifndef XmNindeterminatePixmap +#define XmNindeterminatePixmap ((char*)&_XmStrings[15306]) +#endif +#ifndef XmCIndeterminatePixmap +#define XmCIndeterminatePixmap ((char*)&_XmStrings[15326]) +#endif +#ifndef XmNunselectColor +#define XmNunselectColor ((char*)&_XmStrings[15346]) +#endif +#ifndef XmCUnselectColor +#define XmCUnselectColor ((char*)&_XmStrings[15360]) +#endif +#ifndef XmNselectedPosition +#define XmNselectedPosition ((char*)&_XmStrings[15374]) +#endif +#ifndef XmNarrowSpacing +#define XmNarrowSpacing ((char*)&_XmStrings[15391]) +#endif +#ifndef XmCArrowSpacing +#define XmCArrowSpacing ((char*)&_XmStrings[15404]) +#endif +#ifndef XmRMatchBehavior +#define XmRMatchBehavior ((char*)&_XmStrings[15417]) +#endif +#ifndef XmRComboBoxType +#define XmRComboBoxType ((char*)&_XmStrings[15431]) +#endif +#ifndef XmCSelectedPosition +#define XmCSelectedPosition ((char*)&_XmStrings[15444]) +#endif +#ifndef XmNenableWarp +#define XmNenableWarp ((char*)&_XmStrings[15461]) +#endif +#ifndef XmCEnableWarp +#define XmCEnableWarp ((char*)&_XmStrings[15472]) +#endif +#ifndef XmREnableWarp +#define XmREnableWarp ((char*)&_XmStrings[15483]) +#endif +#ifndef XmNmotifVersion +#define XmNmotifVersion ((char*)&_XmStrings[15494]) +#endif +#ifndef XmCMotifVersion +#define XmCMotifVersion ((char*)&_XmStrings[15507]) +#endif +#ifndef XmNdefaultGlyphPixmap +#define XmNdefaultGlyphPixmap ((char*)&_XmStrings[15520]) +#endif +#ifndef XmCDefaultGlyphPixmap +#define XmCDefaultGlyphPixmap ((char*)&_XmStrings[15539]) +#endif +#ifndef XmCRendition +#define XmCRendition ((char*)&_XmStrings[15558]) +#endif +#ifndef XmNtag +#define XmNtag ((char*)&_XmStrings[15568]) +#endif +#ifndef XmCTag +#define XmCTag ((char*)&_XmStrings[15572]) +#endif +#ifndef XmNfontName +#define XmNfontName ((char*)&_XmStrings[15576]) +#endif +#ifndef XmCFontName +#define XmCFontName ((char*)&_XmStrings[15585]) +#endif +#ifndef XmNfontType +#define XmNfontType ((char*)&_XmStrings[15594]) +#endif +#ifndef XmCFontType +#define XmCFontType ((char*)&_XmStrings[15603]) +#endif +#ifndef XmRFontType +#define XmRFontType ((char*)&_XmStrings[15612]) +#endif +#ifndef XmNloadModel +#define XmNloadModel ((char*)&_XmStrings[15621]) +#endif +#ifndef XmCLoadModel +#define XmCLoadModel ((char*)&_XmStrings[15631]) +#endif +#ifndef XmRLoadModel +#define XmRLoadModel ((char*)&_XmStrings[15641]) +#endif +#ifndef XmNtabList +#define XmNtabList ((char*)&_XmStrings[15651]) +#endif +#ifndef XmCTabList +#define XmCTabList ((char*)&_XmStrings[15659]) +#endif +#ifndef XmRRenditionPixel +#define XmRRenditionPixel ((char*)&_XmStrings[15667]) +#endif +#ifndef XmNunderlineType +#define XmNunderlineType ((char*)&_XmStrings[15682]) +#endif +#ifndef XmCUnderlineType +#define XmCUnderlineType ((char*)&_XmStrings[15696]) +#endif +#ifndef XmNstrikethruType +#define XmNstrikethruType ((char*)&_XmStrings[15710]) +#endif +#ifndef XmCStrikethruType +#define XmCStrikethruType ((char*)&_XmStrings[15725]) +#endif +#ifndef XmRLineType +#define XmRLineType ((char*)&_XmStrings[15740]) +#endif +#ifndef XmNrenderTable +#define XmNrenderTable ((char*)&_XmStrings[15749]) +#endif +#ifndef XmCRenderTable +#define XmCRenderTable ((char*)&_XmStrings[15761]) +#endif +#ifndef XmRRenderTable +#define XmRRenderTable ((char*)&_XmStrings[15773]) +#endif +#ifndef XmNbuttonRenderTable +#define XmNbuttonRenderTable ((char*)&_XmStrings[15785]) +#endif +#ifndef XmCButtonRenderTable +#define XmCButtonRenderTable ((char*)&_XmStrings[15803]) +#endif +#ifndef XmRButtonRenderTable +#define XmRButtonRenderTable ((char*)&_XmStrings[15821]) +#endif +#ifndef XmNlabelRenderTable +#define XmNlabelRenderTable ((char*)&_XmStrings[15839]) +#endif +#ifndef XmCLabelRenderTable +#define XmCLabelRenderTable ((char*)&_XmStrings[15856]) +#endif +#ifndef XmRLabelRenderTable +#define XmRLabelRenderTable ((char*)&_XmStrings[15873]) +#endif +#ifndef XmNtextRenderTable +#define XmNtextRenderTable ((char*)&_XmStrings[15890]) +#endif +#ifndef XmCTextRenderTable +#define XmCTextRenderTable ((char*)&_XmStrings[15906]) +#endif +#ifndef XmRTextRenderTable +#define XmRTextRenderTable ((char*)&_XmStrings[15922]) +#endif +#ifndef XmNdragStartCallback +#define XmNdragStartCallback ((char*)&_XmStrings[15938]) +#endif +#ifndef XmNnoRenditionCallback +#define XmNnoRenditionCallback ((char*)&_XmStrings[15956]) +#endif +#ifndef XmSXmAS_IS +#define XmSXmAS_IS ((char*)&_XmStrings[15976]) +#endif +#ifndef XmMIsWhiteSpaceMethod +#define XmMIsWhiteSpaceMethod ((char*)&_XmStrings[15984]) +#endif +#ifndef XmMIsScanBreakMethod +#define XmMIsScanBreakMethod ((char*)&_XmStrings[16003]) +#endif +#ifndef XmMCharDirection +#define XmMCharDirection ((char*)&_XmStrings[16021]) +#endif +#ifndef XmMInitialCharsDirection +#define XmMInitialCharsDirection ((char*)&_XmStrings[16035]) +#endif +#ifndef XmNpatternType +#define XmNpatternType ((char*)&_XmStrings[16057]) +#endif +#ifndef XmNsubstitute +#define XmNsubstitute ((char*)&_XmStrings[16069]) +#endif +#ifndef XmNinvokeParseProc +#define XmNinvokeParseProc ((char*)&_XmStrings[16080]) +#endif +#ifndef XmNincludeStatus +#define XmNincludeStatus ((char*)&_XmStrings[16096]) +#endif +#ifndef XmVosfBackTab +#define XmVosfBackTab ((char*)&_XmStrings[16110]) +#endif +#ifndef XmVosfBeginData +#define XmVosfBeginData ((char*)&_XmStrings[16121]) +#endif +#ifndef XmVosfDeselectAll +#define XmVosfDeselectAll ((char*)&_XmStrings[16134]) +#endif +#ifndef XmVosfEndData +#define XmVosfEndData ((char*)&_XmStrings[16149]) +#endif +#ifndef XmVosfEscape +#define XmVosfEscape ((char*)&_XmStrings[16160]) +#endif +#ifndef XmVosfExtend +#define XmVosfExtend ((char*)&_XmStrings[16170]) +#endif +#ifndef XmVosfLeftLine +#define XmVosfLeftLine ((char*)&_XmStrings[16180]) +#endif +#ifndef XmVosfNext +#define XmVosfNext ((char*)&_XmStrings[16192]) +#endif +#ifndef XmVosfNextField +#define XmVosfNextField ((char*)&_XmStrings[16200]) +#endif +#ifndef XmVosfNextMenu +#define XmVosfNextMenu ((char*)&_XmStrings[16213]) +#endif +#ifndef XmVosfNextMinor +#define XmVosfNextMinor ((char*)&_XmStrings[16225]) +#endif +#ifndef XmVosfPrevField +#define XmVosfPrevField ((char*)&_XmStrings[16238]) +#endif +#ifndef XmVosfPrevMenu +#define XmVosfPrevMenu ((char*)&_XmStrings[16251]) +#endif +#ifndef XmVosfPrior +#define XmVosfPrior ((char*)&_XmStrings[16263]) +#endif +#ifndef XmVosfPriorMinor +#define XmVosfPriorMinor ((char*)&_XmStrings[16272]) +#endif +#ifndef XmVosfReselect +#define XmVosfReselect ((char*)&_XmStrings[16286]) +#endif +#ifndef XmVosfRestore +#define XmVosfRestore ((char*)&_XmStrings[16298]) +#endif +#ifndef XmVosfRightLine +#define XmVosfRightLine ((char*)&_XmStrings[16309]) +#endif +#ifndef XmVosfSelectAll +#define XmVosfSelectAll ((char*)&_XmStrings[16322]) +#endif +#ifndef XmVosfSwitchDirection +#define XmVosfSwitchDirection ((char*)&_XmStrings[16335]) +#endif +#ifndef XmNnotebookChildType +#define XmNnotebookChildType ((char*)&_XmStrings[16354]) +#endif +#ifndef XmCNotebookChildType +#define XmCNotebookChildType ((char*)&_XmStrings[16372]) +#endif +#ifndef XmRNotebookChildType +#define XmRNotebookChildType ((char*)&_XmStrings[16390]) +#endif +#ifndef XmNscrolledWindowChildType +#define XmNscrolledWindowChildType ((char*)&_XmStrings[16408]) +#endif +#ifndef XmCScrolledWindowChildType +#define XmCScrolledWindowChildType ((char*)&_XmStrings[16432]) +#endif +#ifndef XmRScrolledWindowChildType +#define XmRScrolledWindowChildType ((char*)&_XmStrings[16456]) +#endif +#ifndef XmNselectedObjects +#define XmNselectedObjects ((char*)&_XmStrings[16480]) +#endif +#ifndef XmCSelectedObjects +#define XmCSelectedObjects ((char*)&_XmStrings[16496]) +#endif +#ifndef XmNselectedObjectCount +#define XmNselectedObjectCount ((char*)&_XmStrings[16512]) +#endif +#ifndef XmCSelectedObjectCount +#define XmCSelectedObjectCount ((char*)&_XmStrings[16532]) +#endif +#ifndef XmNcomboBoxType +#define XmNcomboBoxType ((char*)&_XmStrings[16552]) +#endif +#ifndef XmCComboBoxType +#define XmCComboBoxType ((char*)&_XmStrings[16565]) +#endif +#ifndef XmNtabValue +#define XmNtabValue ((char*)&_XmStrings[16578]) +#endif +#ifndef XmNoffsetModel +#define XmNoffsetModel ((char*)&_XmStrings[16587]) +#endif +#ifndef XmNdecimal +#define XmNdecimal ((char*)&_XmStrings[16599]) +#endif +#ifndef XmNdetail +#define XmNdetail ((char*)&_XmStrings[16607]) +#endif +#ifndef XmCDetail +#define XmCDetail ((char*)&_XmStrings[16614]) +#endif +#ifndef XmNdetailCount +#define XmNdetailCount ((char*)&_XmStrings[16621]) +#endif +#ifndef XmCDetailCount +#define XmCDetailCount ((char*)&_XmStrings[16633]) +#endif +#ifndef XmNcontainerID +#define XmNcontainerID ((char*)&_XmStrings[16645]) +#endif +#ifndef XmCContainerID +#define XmCContainerID ((char*)&_XmStrings[16657]) +#endif +#ifndef XmSCLIENT_WINDOW +#define XmSCLIENT_WINDOW ((char*)&_XmStrings[16669]) +#endif +#ifndef XmSCLIP_TEMPORARY +#define XmSCLIP_TEMPORARY ((char*)&_XmStrings[16683]) +#endif +#ifndef XmSCLIPBOARD +#define XmSCLIPBOARD ((char*)&_XmStrings[16698]) +#endif +#ifndef XmSCOMPOUND_TEXT +#define XmSCOMPOUND_TEXT ((char*)&_XmStrings[16708]) +#endif +#ifndef XmSDELETE +#define XmSDELETE ((char*)&_XmStrings[16722]) +#endif +#ifndef XmSFILE +#define XmSFILE ((char*)&_XmStrings[16729]) +#endif +#ifndef XmSFILE_NAME +#define XmSFILE_NAME ((char*)&_XmStrings[16734]) +#endif +#ifndef XmSINCR +#define XmSINCR ((char*)&_XmStrings[16744]) +#endif +#ifndef XmSINSERT_PROPERTY +#define XmSINSERT_PROPERTY ((char*)&_XmStrings[16749]) +#endif +#ifndef XmSINSERT_SELECTION +#define XmSINSERT_SELECTION ((char*)&_XmStrings[16765]) +#endif +#ifndef XmSLENGTH +#define XmSLENGTH ((char*)&_XmStrings[16782]) +#endif +#ifndef XmSLINK_SELECTION +#define XmSLINK_SELECTION ((char*)&_XmStrings[16789]) +#endif +#ifndef XmS_MOTIF_ATOM_0 +#define XmS_MOTIF_ATOM_0 ((char*)&_XmStrings[16804]) +#endif +#ifndef XmS_MOTIF_BINDINGS +#define XmS_MOTIF_BINDINGS ((char*)&_XmStrings[16818]) +#endif +#ifndef XmS_MOTIF_DEFAULT_BINDINGS +#define XmS_MOTIF_DEFAULT_BINDINGS ((char*)&_XmStrings[16834]) +#endif +#ifndef XmS_MOTIF_CANCEL_DROP_EFFECT +#define XmS_MOTIF_CANCEL_DROP_EFFECT ((char*)&_XmStrings[16858]) +#endif +#ifndef XmS_MOTIF_CLIP_HEADER +#define XmS_MOTIF_CLIP_HEADER ((char*)&_XmStrings[16884]) +#endif +#ifndef XmS_MOTIF_CLIP_DATA_REQUEST +#define XmS_MOTIF_CLIP_DATA_REQUEST ((char*)&_XmStrings[16903]) +#endif +#ifndef XmS_MOTIF_CLIP_DATA_DELETE +#define XmS_MOTIF_CLIP_DATA_DELETE ((char*)&_XmStrings[16928]) +#endif +#ifndef XmS_MOTIF_CLIP_ITEM +#define XmS_MOTIF_CLIP_ITEM ((char*)&_XmStrings[16952]) +#endif +#ifndef XmS_MOTIF_CLIP_LOCK +#define XmS_MOTIF_CLIP_LOCK ((char*)&_XmStrings[16969]) +#endif +#ifndef XmS_MOTIF_CLIP_LOCK_ACCESS_VALID +#define XmS_MOTIF_CLIP_LOCK_ACCESS_VALID ((char*)&_XmStrings[16986]) +#endif +#ifndef XmS_MOTIF_CLIP_MESSAGE +#define XmS_MOTIF_CLIP_MESSAGE ((char*)&_XmStrings[17016]) +#endif +#ifndef XmS_MOTIF_CLIP_NEXT_ID +#define XmS_MOTIF_CLIP_NEXT_ID ((char*)&_XmStrings[17036]) +#endif +#ifndef XmS_MOTIF_CLIP_TIME +#define XmS_MOTIF_CLIP_TIME ((char*)&_XmStrings[17056]) +#endif +#ifndef XmS_MOTIF_CLIPBOARD_TARGETS +#define XmS_MOTIF_CLIPBOARD_TARGETS ((char*)&_XmStrings[17073]) +#endif +#ifndef XmS_MOTIF_COMPOUND_STRING +#define XmS_MOTIF_COMPOUND_STRING ((char*)&_XmStrings[17098]) +#endif +#ifndef XmS_MOTIF_DEFERRED_CLIPBOARD_TARGETS +#define XmS_MOTIF_DEFERRED_CLIPBOARD_TARGETS ((char*)&_XmStrings[17121]) +#endif +#ifndef XmS_MOTIF_DESTINATION +#define XmS_MOTIF_DESTINATION ((char*)&_XmStrings[17155]) +#endif +#ifndef XmS_MOTIF_DRAG_OFFSET +#define XmS_MOTIF_DRAG_OFFSET ((char*)&_XmStrings[17174]) +#endif +#ifndef XmS_MOTIF_DROP +#define XmS_MOTIF_DROP ((char*)&_XmStrings[17193]) +#endif +#ifndef XmS_MOTIF_ENCODING_REGISTRY +#define XmS_MOTIF_ENCODING_REGISTRY ((char*)&_XmStrings[17205]) +#endif +#ifndef XmS_MOTIF_EXPORT_TARGETS +#define XmS_MOTIF_EXPORT_TARGETS ((char*)&_XmStrings[17230]) +#endif +#ifndef XmS_MOTIF_LOSE_SELECTION +#define XmS_MOTIF_LOSE_SELECTION ((char*)&_XmStrings[17252]) +#endif +#ifndef XmS_MOTIF_RENDER_TABLE +#define XmS_MOTIF_RENDER_TABLE ((char*)&_XmStrings[17274]) +#endif +#ifndef XmS_MOTIF_WM_QUERY +#define XmS_MOTIF_WM_QUERY ((char*)&_XmStrings[17294]) +#endif +#ifndef XmS_MOTIF_WM_ALL_CLIENTS +#define XmS_MOTIF_WM_ALL_CLIENTS ((char*)&_XmStrings[17310]) +#endif +#ifndef XmSMULTIPLE +#define XmSMULTIPLE ((char*)&_XmStrings[17332]) +#endif +#ifndef XmSNULL +#define XmSNULL ((char*)&_XmStrings[17341]) +#endif +#ifndef XmSTARGETS +#define XmSTARGETS ((char*)&_XmStrings[17346]) +#endif +#ifndef XmSTEXT +#define XmSTEXT ((char*)&_XmStrings[17354]) +#endif +#ifndef XmSTIMESTAMP +#define XmSTIMESTAMP ((char*)&_XmStrings[17359]) +#endif +#ifndef XmSWM_STATE +#define XmSWM_STATE ((char*)&_XmStrings[17369]) +#endif +#ifndef XmSTRANSFER_SUCCESS +#define XmSTRANSFER_SUCCESS ((char*)&_XmStrings[17378]) +#endif +#ifndef XmSTRANSFER_FAILURE +#define XmSTRANSFER_FAILURE ((char*)&_XmStrings[17397]) +#endif +#ifndef XmNpathMode +#define XmNpathMode ((char*)&_XmStrings[17416]) +#endif +#ifndef XmRPathMode +#define XmRPathMode ((char*)&_XmStrings[17425]) +#endif +#ifndef XmCPathMode +#define XmCPathMode ((char*)&_XmStrings[17434]) +#endif +#ifndef XmNfileFilterStyle +#define XmNfileFilterStyle ((char*)&_XmStrings[17443]) +#endif +#ifndef XmRFileFilterStyle +#define XmRFileFilterStyle ((char*)&_XmStrings[17459]) +#endif +#ifndef XmCFileFilterStyle +#define XmCFileFilterStyle ((char*)&_XmStrings[17475]) +#endif +#ifndef XmNdirTextLabelString +#define XmNdirTextLabelString ((char*)&_XmStrings[17491]) +#endif +#ifndef XmCDirTextLabelString +#define XmCDirTextLabelString ((char*)&_XmStrings[17510]) +#endif +#ifndef XmNenableBtn1Transfer +#define XmNenableBtn1Transfer ((char*)&_XmStrings[17529]) +#endif +#ifndef XmCEnableBtn1Transfer +#define XmCEnableBtn1Transfer ((char*)&_XmStrings[17548]) +#endif +#ifndef XmNenableButtonTab +#define XmNenableButtonTab ((char*)&_XmStrings[17567]) +#endif +#ifndef XmCEnableButtonTab +#define XmCEnableButtonTab ((char*)&_XmStrings[17583]) +#endif +#ifndef XmNenableEtchedInMenu +#define XmNenableEtchedInMenu ((char*)&_XmStrings[17599]) +#endif +#ifndef XmCEnableEtchedInMenu +#define XmCEnableEtchedInMenu ((char*)&_XmStrings[17618]) +#endif +#ifndef XmNdefaultButtonEmphasis +#define XmNdefaultButtonEmphasis ((char*)&_XmStrings[17637]) +#endif +#ifndef XmCDefaultButtonEmphasis +#define XmCDefaultButtonEmphasis ((char*)&_XmStrings[17659]) +#endif +#ifndef XmRDefaultButtonEmphasis +#define XmRDefaultButtonEmphasis ((char*)&_XmStrings[17681]) +#endif +#ifndef XmNenableToggleColor +#define XmNenableToggleColor ((char*)&_XmStrings[17703]) +#endif +#ifndef XmCEnableToggleColor +#define XmCEnableToggleColor ((char*)&_XmStrings[17721]) +#endif +#ifndef XmNenableToggleVisual +#define XmNenableToggleVisual ((char*)&_XmStrings[17739]) +#endif +#ifndef XmCEnableToggleVisual +#define XmCEnableToggleVisual ((char*)&_XmStrings[17758]) +#endif +#ifndef XmNenableDragIcon +#define XmNenableDragIcon ((char*)&_XmStrings[17777]) +#endif +#ifndef XmCEnableDragIcon +#define XmCEnableDragIcon ((char*)&_XmStrings[17792]) +#endif +#ifndef XmNenableUnselectableDrag +#define XmNenableUnselectableDrag ((char*)&_XmStrings[17807]) +#endif +#ifndef XmCEnableUnselectableDrag +#define XmCEnableUnselectableDrag ((char*)&_XmStrings[17830]) +#endif +#ifndef XmNdragOverActiveMode +#define XmNdragOverActiveMode ((char*)&_XmStrings[17853]) +#endif +#ifndef XmCDragOverActiveMode +#define XmCDragOverActiveMode ((char*)&_XmStrings[17872]) +#endif +#ifndef XmNinstallColormap +#define XmNinstallColormap ((char*)&_XmStrings[17891]) +#endif +#ifndef XmCInstallColormap +#define XmCInstallColormap ((char*)&_XmStrings[17907]) +#endif +#ifndef XmCOwnerEvents +#define XmCOwnerEvents ((char*)&_XmStrings[17923]) +#endif +#ifndef XmNownerEvents +#define XmNownerEvents ((char*)&_XmStrings[17935]) +#endif +#ifndef XmCGrabStyle +#define XmCGrabStyle ((char*)&_XmStrings[17947]) +#endif +#ifndef XmNgrabStyle +#define XmNgrabStyle ((char*)&_XmStrings[17957]) +#endif +#ifndef XmNforegroundState +#define XmNforegroundState ((char*)&_XmStrings[17967]) +#endif +#ifndef XmNbackgroundState +#define XmNbackgroundState ((char*)&_XmStrings[17983]) +#endif +#ifndef XmCGroundState +#define XmCGroundState ((char*)&_XmStrings[17999]) +#endif +#ifndef XmRGroundState +#define XmRGroundState ((char*)&_XmStrings[18011]) +#endif +#ifndef XmRSelectColor +#define XmRSelectColor ((char*)&_XmStrings[18023]) +#endif +#ifndef XmRLargeIconPixmap +#define XmRLargeIconPixmap ((char*)&_XmStrings[18035]) +#endif +#ifndef XmRSmallIconPixmap +#define XmRSmallIconPixmap ((char*)&_XmStrings[18051]) +#endif +#ifndef XmNoutlineState +#define XmNoutlineState ((char*)&_XmStrings[18067]) +#endif +#ifndef XmCOutlineState +#define XmCOutlineState ((char*)&_XmStrings[18080]) +#endif +#ifndef XmROutlineState +#define XmROutlineState ((char*)&_XmStrings[18093]) +#endif +#ifndef XmNspatialIncludeModel +#define XmNspatialIncludeModel ((char*)&_XmStrings[18106]) +#endif +#ifndef XmCSpatialIncludeModel +#define XmCSpatialIncludeModel ((char*)&_XmStrings[18126]) +#endif +#ifndef XmRSpatialIncludeModel +#define XmRSpatialIncludeModel ((char*)&_XmStrings[18146]) +#endif +#ifndef XmNspatialResizeModel +#define XmNspatialResizeModel ((char*)&_XmStrings[18166]) +#endif +#ifndef XmCSpatialResizeModel +#define XmCSpatialResizeModel ((char*)&_XmStrings[18185]) +#endif +#ifndef XmRSpatialResizeModel +#define XmRSpatialResizeModel ((char*)&_XmStrings[18204]) +#endif +#ifndef XmNspatialSnapModel +#define XmNspatialSnapModel ((char*)&_XmStrings[18223]) +#endif +#ifndef XmCSpatialSnapModel +#define XmCSpatialSnapModel ((char*)&_XmStrings[18240]) +#endif +#ifndef XmRSpatialSnapModel +#define XmRSpatialSnapModel ((char*)&_XmStrings[18257]) +#endif +#ifndef XmNdetailColumnHeadingCount +#define XmNdetailColumnHeadingCount ((char*)&_XmStrings[18274]) +#endif +#ifndef XmCDetailColumnHeadingCount +#define XmCDetailColumnHeadingCount ((char*)&_XmStrings[18299]) +#endif +#ifndef XmNdetailOrder +#define XmNdetailOrder ((char*)&_XmStrings[18324]) +#endif +#ifndef XmCDetailOrder +#define XmCDetailOrder ((char*)&_XmStrings[18336]) +#endif +#ifndef XmRCardinalList +#define XmRCardinalList ((char*)&_XmStrings[18348]) +#endif +#ifndef XmNdetailOrderCount +#define XmNdetailOrderCount ((char*)&_XmStrings[18361]) +#endif +#ifndef XmCDetailOrderCount +#define XmCDetailOrderCount ((char*)&_XmStrings[18378]) +#endif +#ifndef XmNoutlineColumnWidth +#define XmNoutlineColumnWidth ((char*)&_XmStrings[18395]) +#endif +#ifndef XmCOutlineColumnWidth +#define XmCOutlineColumnWidth ((char*)&_XmStrings[18414]) +#endif +#ifndef XmNoutlineChangedCallback +#define XmNoutlineChangedCallback ((char*)&_XmStrings[18433]) +#endif +#ifndef XmCOutlineChangedCallback +#define XmCOutlineChangedCallback ((char*)&_XmStrings[18456]) +#endif +#ifndef XmNoutlineButtonPolicy +#define XmNoutlineButtonPolicy ((char*)&_XmStrings[18479]) +#endif +#ifndef XmCOutlineButtonPolicy +#define XmCOutlineButtonPolicy ((char*)&_XmStrings[18499]) +#endif +#ifndef XmROutlineButtonPolicy +#define XmROutlineButtonPolicy ((char*)&_XmStrings[18519]) +#endif +#ifndef XmCDefaultVirtualBindings +#define XmCDefaultVirtualBindings ((char*)&_XmStrings[18539]) +#endif +#ifndef XmNdefaultVirtualBindings +#define XmNdefaultVirtualBindings ((char*)&_XmStrings[18562]) +#endif +#ifndef XmCResizable +#define XmCResizable ((char*)&_XmStrings[18585]) +#endif +#ifndef XmRDynamicPixmap +#define XmRDynamicPixmap ((char*)&_XmStrings[18595]) +#endif +#ifndef XmNpageChangedCallback +#define XmNpageChangedCallback ((char*)&_XmStrings[18609]) +#endif +#ifndef XmNarea +#define XmNarea ((char*)&_XmStrings[18629]) +#endif +#ifndef XmNdetailShadowThickness +#define XmNdetailShadowThickness ((char*)&_XmStrings[18634]) +#endif +#ifndef XmNsliderMark +#define XmNsliderMark ((char*)&_XmStrings[18656]) +#endif +#ifndef XmCSliderMark +#define XmCSliderMark ((char*)&_XmStrings[18667]) +#endif +#ifndef XmRSliderMark +#define XmRSliderMark ((char*)&_XmStrings[18678]) +#endif +#ifndef XmREnableBtn1Transfer +#define XmREnableBtn1Transfer ((char*)&_XmStrings[18689]) +#endif +#ifndef XmNrenditionBackground +#define XmNrenditionBackground ((char*)&_XmStrings[18708]) +#endif +#ifndef XmNrenditionForeground +#define XmNrenditionForeground ((char*)&_XmStrings[18728]) +#endif +#ifndef XmCRenditionBackground +#define XmCRenditionBackground ((char*)&_XmStrings[18748]) +#endif +#ifndef XmCRenditionForeground +#define XmCRenditionForeground ((char*)&_XmStrings[18768]) +#endif +#ifndef XmNindeterminateInsensitivePixmap +#define XmNindeterminateInsensitivePixmap ((char*)&_XmStrings[18788]) +#endif +#ifndef XmCIndeterminateInsensitivePixmap +#define XmCIndeterminateInsensitivePixmap ((char*)&_XmStrings[18819]) +#endif +#ifndef XmNframeChildType +#define XmNframeChildType ((char*)&_XmStrings[18850]) +#endif +#ifndef XmCFrameChildType +#define XmCFrameChildType ((char*)&_XmStrings[18865]) +#endif +#ifndef XmNtextField +#define XmNtextField ((char*)&_XmStrings[18880]) +#endif +#ifndef XmCTextField +#define XmCTextField ((char*)&_XmStrings[18890]) +#endif +#ifndef XmNenableThinThickness +#define XmNenableThinThickness ((char*)&_XmStrings[18900]) +#endif +#ifndef XmCEnableThinThickness +#define XmCEnableThinThickness ((char*)&_XmStrings[18920]) +#endif +#ifndef XmNprimaryColorSetId +#define XmNprimaryColorSetId ((char*)&_XmStrings[18940]) +#endif +#ifndef XmCPrimaryColorSetId +#define XmCPrimaryColorSetId ((char*)&_XmStrings[18958]) +#endif +#ifndef XmNsecondaryColorSetId +#define XmNsecondaryColorSetId ((char*)&_XmStrings[18976]) +#endif +#ifndef XmCSecondaryColorSetId +#define XmCSecondaryColorSetId ((char*)&_XmStrings[18996]) +#endif +#ifndef XmNtextColorSetId +#define XmNtextColorSetId ((char*)&_XmStrings[19016]) +#endif +#ifndef XmCTextColorSetId +#define XmCTextColorSetId ((char*)&_XmStrings[19031]) +#endif +#ifndef XmNactiveColorSetId +#define XmNactiveColorSetId ((char*)&_XmStrings[19046]) +#endif +#ifndef XmCActiveColorSetId +#define XmCActiveColorSetId ((char*)&_XmStrings[19063]) +#endif +#ifndef XmNinactiveColorSetId +#define XmNinactiveColorSetId ((char*)&_XmStrings[19080]) +#endif +#ifndef XmCInactiveColorSetId +#define XmCInactiveColorSetId ((char*)&_XmStrings[19099]) +#endif +#ifndef XmNuseColorObj +#define XmNuseColorObj ((char*)&_XmStrings[19118]) +#endif +#ifndef XmCUseColorObj +#define XmCUseColorObj ((char*)&_XmStrings[19130]) +#endif +#ifndef XmNuseTextColor +#define XmNuseTextColor ((char*)&_XmStrings[19142]) +#endif +#ifndef XmCUseTextColor +#define XmCUseTextColor ((char*)&_XmStrings[19155]) +#endif +#ifndef XmNuseTextColorForList +#define XmNuseTextColorForList ((char*)&_XmStrings[19168]) +#endif +#ifndef XmCUseTextColorForList +#define XmCUseTextColorForList ((char*)&_XmStrings[19188]) +#endif +#ifndef XmNuseMask +#define XmNuseMask ((char*)&_XmStrings[19208]) +#endif +#ifndef XmCUseMask +#define XmCUseMask ((char*)&_XmStrings[19216]) +#endif +#ifndef XmNuseMultiColorIcons +#define XmNuseMultiColorIcons ((char*)&_XmStrings[19224]) +#endif +#ifndef XmCUseMultiColorIcons +#define XmCUseMultiColorIcons ((char*)&_XmStrings[19243]) +#endif +#ifndef XmNuseIconFileCache +#define XmNuseIconFileCache ((char*)&_XmStrings[19262]) +#endif +#ifndef XmCUseIconFileCache +#define XmCUseIconFileCache ((char*)&_XmStrings[19279]) +#endif +#ifndef XmSPIXEL_SET +#define XmSPIXEL_SET ((char*)&_XmStrings[19296]) +#endif +#ifndef XmSCUSTOMIZE_DATA +#define XmSCUSTOMIZE_DATA ((char*)&_XmStrings[19307]) +#endif +#ifndef XmSCOLOR_SRV_NAME +#define XmSCOLOR_SRV_NAME ((char*)&_XmStrings[19323]) +#endif +#ifndef XmNlist +#define XmNlist ((char*)&_XmStrings[19335]) +#endif +#ifndef XmCList +#define XmCList ((char*)&_XmStrings[19340]) +#endif +#ifndef XmNarrowOrientation +#define XmNarrowOrientation ((char*)&_XmStrings[19345]) +#endif +#ifndef XmCArrowOrientation +#define XmCArrowOrientation ((char*)&_XmStrings[19362]) +#endif +#ifndef XmRArrowOrientation +#define XmRArrowOrientation ((char*)&_XmStrings[19379]) +#endif +#ifndef XmNpositionType +#define XmNpositionType ((char*)&_XmStrings[19396]) +#endif +#ifndef XmCPositionType +#define XmCPositionType ((char*)&_XmStrings[19409]) +#endif +#ifndef XmRPositionType +#define XmRPositionType ((char*)&_XmStrings[19422]) +#endif +#ifndef XmNwrap +#define XmNwrap ((char*)&_XmStrings[19435]) +#endif +#ifndef XmCWrap +#define XmCWrap ((char*)&_XmStrings[19440]) +#endif +#ifndef XmNpositionMode +#define XmNpositionMode ((char*)&_XmStrings[19445]) +#endif +#ifndef XmCPositionMode +#define XmCPositionMode ((char*)&_XmStrings[19458]) +#endif +#ifndef XmRPositionMode +#define XmRPositionMode ((char*)&_XmStrings[19471]) +#endif +#ifndef XmNprintOrientation +#define XmNprintOrientation ((char*)&_XmStrings[19484]) +#endif +#ifndef XmCPrintOrientation +#define XmCPrintOrientation ((char*)&_XmStrings[19501]) +#endif +#ifndef XmNprintOrientations +#define XmNprintOrientations ((char*)&_XmStrings[19518]) +#endif +#ifndef XmCPrintOrientations +#define XmCPrintOrientations ((char*)&_XmStrings[19536]) +#endif +#ifndef XmNprintResolution +#define XmNprintResolution ((char*)&_XmStrings[19554]) +#endif +#ifndef XmCPrintResolution +#define XmCPrintResolution ((char*)&_XmStrings[19570]) +#endif +#ifndef XmNprintResolutions +#define XmNprintResolutions ((char*)&_XmStrings[19586]) +#endif +#ifndef XmCPrintResolutions +#define XmCPrintResolutions ((char*)&_XmStrings[19603]) +#endif +#ifndef XmNdefaultPixmapResolution +#define XmNdefaultPixmapResolution ((char*)&_XmStrings[19620]) +#endif +#ifndef XmCDefaultPixmapResolution +#define XmCDefaultPixmapResolution ((char*)&_XmStrings[19644]) +#endif +#ifndef XmNstartJobCallback +#define XmNstartJobCallback ((char*)&_XmStrings[19668]) +#endif +#ifndef XmNendJobCallback +#define XmNendJobCallback ((char*)&_XmStrings[19685]) +#endif +#ifndef XmNpageSetupCallback +#define XmNpageSetupCallback ((char*)&_XmStrings[19700]) +#endif +#ifndef XmNpdmNotificationCallback +#define XmNpdmNotificationCallback ((char*)&_XmStrings[19718]) +#endif +#ifndef XmNminX +#define XmNminX ((char*)&_XmStrings[19742]) +#endif +#ifndef XmNminY +#define XmNminY ((char*)&_XmStrings[19747]) +#endif +#ifndef XmNmaxX +#define XmNmaxX ((char*)&_XmStrings[19752]) +#endif +#ifndef XmNmaxY +#define XmNmaxY ((char*)&_XmStrings[19757]) +#endif +#ifndef XmCMinX +#define XmCMinX ((char*)&_XmStrings[19762]) +#endif +#ifndef XmCMinY +#define XmCMinY ((char*)&_XmStrings[19767]) +#endif +#ifndef XmCMaxX +#define XmCMaxX ((char*)&_XmStrings[19772]) +#endif +#ifndef XmCMaxY +#define XmCMaxY ((char*)&_XmStrings[19777]) +#endif +#ifndef XmNpreeditStartCallback +#define XmNpreeditStartCallback ((char*)&_XmStrings[19782]) +#endif +#ifndef XmNpreeditDoneCallback +#define XmNpreeditDoneCallback ((char*)&_XmStrings[19803]) +#endif +#ifndef XmNpreeditDrawCallback +#define XmNpreeditDrawCallback ((char*)&_XmStrings[19823]) +#endif +#ifndef XmNpreeditCaretCallback +#define XmNpreeditCaretCallback ((char*)&_XmStrings[19843]) +#endif +#ifndef XmNverifyPreedit +#define XmNverifyPreedit ((char*)&_XmStrings[19864]) +#endif +#ifndef XmCVerifyPreedit +#define XmCVerifyPreedit ((char*)&_XmStrings[19878]) +#endif +#ifndef XmNenableMultiKeyBindings +#define XmNenableMultiKeyBindings ((char*)&_XmStrings[19892]) +#endif +#ifndef XmCEnableMultiKeyBindings +#define XmCEnableMultiKeyBindings ((char*)&_XmStrings[19915]) +#endif +#ifndef XmRButtonFontList +#define XmRButtonFontList ((char*)&_XmStrings[19938]) +#endif +#ifndef XmRLabelFontList +#define XmRLabelFontList ((char*)&_XmStrings[19953]) +#endif +#ifndef XmRTextFontList +#define XmRTextFontList ((char*)&_XmStrings[19967]) +#endif +#ifndef XmSPIXEL_SET_PROP +#define XmSPIXEL_SET_PROP ((char*)&_XmStrings[19980]) +#endif +#ifndef XmS50_foreground +#define XmS50_foreground ((char*)&_XmStrings[19994]) +#endif +#ifndef XmSunspecified_pixmap +#define XmSunspecified_pixmap ((char*)&_XmStrings[20008]) +#endif +#endif /* XMSTRINGDEFINES */ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmSTRING_DEFAULT_CHARSET XmS +#define XmSTRING_ISO8859_1 "ISO8859-1" +#define XmFONTLIST_DEFAULT_TAG XmSFONTLIST_DEFAULT_TAG_STRING +#define XmFONTLIST_DEFAULT_TAG_STRING XmSXmFONTLIST_DEFAULT_TAG_STRING + +#define XmVaCASCADEBUTTON "cascadeButton" +#define XmVaCHECKBUTTON "checkButton" +#define XmVaDOUBLE_SEPARATOR "doubleSeparator" +#define XmVaPUSHBUTTON "pushButton" +#define XmVaRADIOBUTTON "radioButton" +#define XmVaSEPARATOR "separator" +#define XmVaSINGLE_SEPARATOR "singleSeparator" +#define XmVaTOGGLEBUTTON "checkButton" +#define XmVaTITLE XtNtitle + +#define XtCKeyboardFocusPolicy XmCKeyboardFocusPolicy +#define XtCShellUnitType XmCShellUnitType +#define XtNkeyboardFocusPolicy XmNkeyboardFocusPolicy +#define XtNshellUnitType XmNshellUnitType +#define XtRKeyboardFocusPolicy XmRKeyboardFocusPolicy + +#define XmRPrimBottomShadowPixmap XmRBottomShadowPixmap +#define XmRPrimHighlightPixmap XmRHighlightPixmap +#define XmRPrimTopShadowPixmap XmRTopShadowPixmap + +#define XmCAccelerators XtCAccelerators +#define XmCAllowShellResize XtCAllowShellResize +#define XmCArgc XtCArgc +#define XmCArgv XtCArgv +#define XmCBackground XtCBackground +#define XmCBaseHeight XtCBaseHeight +#define XmCBaseHeight XtCBaseHeight +#define XmCBaseWidth XtCBaseWidth +#define XmCBaseWidth XtCBaseWidth +#define XmCBitmap XtCBitmap +#define XmCBoolean XtCBoolean +#define XmCBorderColor XtCBorderColor +#define XmCBorderWidth XtCBorderWidth +#define XmCCallback XtCCallback +#define XmCColor XtCColor +#define XmCColormap XtCColormap +#define XmCCreatePopupChildProc XtCCreatePopupChildProc +#define XmCCursor XtCCursor +#define XmCDepth XtCDepth +#define XmCDimension XtRDimension +#define XmCEditMode XtREditMode +#define XmCEditType XtCEditType +#define XmCEventBindings XtCEventBindings +#define XmCFile XtCFile +#define XmCFont XtCFont +#define XmCFontSet XtCFontSet +#define XmCForeground XtCForeground +#define XmCFraction XtCFraction +#define XmCFunction XtCFunction +#define XmCGeometry XtCGeometry +#define XmCHSpace XtCHSpace +#define XmCHeight XtCHeight +#define XmCHeightInc XtCHeightInc +#define XmCIconMask XtCIconMask +#define XmCIconName XtCIconName +#define XmCIconNameEncoding XtCIconNameEncoding +#define XmCIconPixmap XtCIconPixmap +#define XmCIconWindow XtCIconWindow +#define XmCIconX XtCIconX +#define XmCIconY XtCIconY +#define XmCIconic XtCIconic +#define XmCIndex XtCIndex +#define XmCInitialResourcesPersistent XtCInitialResourcesPersistent +#define XmCInitialState XtCInitialState +#define XmCInput XtCInput +#define XmCInsertPosition XtCInsertPosition +#define XmCInterval XtCInterval +#define XmCJustify XtCJustify +#define XmCLabel XtCLabel +#define XmCLength XtCLength +#define XmCMappedWhenManaged XtCMappedWhenManaged +#define XmCMargin XtCMargin +#define XmCMaxAspectX XtCMaxAspectX +#define XmCMaxAspectY XtCMaxAspectY +#define XmCMaxHeight XtCMaxHeight +#define XmCMaxWidth XtCMaxWidth +#define XmCMenuEntry XtCMenuEntry +#define XmCMinAspectX XtCMinAspectX +#define XmCMinAspectY XtCMinAspectY +#define XmCMinHeight XtCMinHeight +#define XmCMinWidth XtCMinWidth +#define XmCNotify XtCNotify +#define XmCOrientation XtCOrientation +#define XmCOverrideRedirect XtCOverrideRedirect +#define XmCParameter XtCParameter +#define XmCPixmap XtCPixmap +#define XmCPosition XtCPosition +#define XmCReadOnly XtCReadOnly +#define XmCResize XtCResize +#define XmCReverseVideo XtCReverseVideo +#define XmCSaveUnder XtCSaveUnder +#define XmCScreen XtCScreen +#define XmCScrollDCursor XtCScrollDCursor +#define XmCScrollHCursor XtCScrollHCursor +#define XmCScrollLCursor XtCScrollLCursor +#define XmCScrollProc XtCScrollProc +#define XmCScrollRCursor XtCScrollRCursor +#define XmCScrollUCursor XtCScrollUCursor +#define XmCScrollVCursor XtCScrollVCursor +#define XmCSelection XtCSelection +#define XmCSelectionArray XtCSelectionArray +#define XmCSensitive XtCSensitive +#define XmCSpace XtCSpace +#define XmCString XtCString +#define XmCTextOptions XtCTextOptions +#define XmCTextPosition XtCTextPosition +#define XmCTextSink XtCTextSink +#define XmCTextSource XtCTextSource +#define XmCThickness XtCThickness +#define XmCThumb XtCThumb +#define XmCTitle XtCTitle +#define XmCTitleEncoding XtCTitleEncoding +#define XmCTransient XtCTransient +#define XmCTransientFor XtCTransientFor +#define XmCTranslations XtCTranslations +#define XmCVSpace XtCVSpace +#define XmCValue XtCValue +#define XmCVisual XtCVisual +#define XmCWaitForWm XtCWaitForWm +#define XmCWidget XtRWidget +#define XmCWidth XtCWidth +#define XmCWidthInc XtCWidthInc +#define XmCWinGravity XtCWinGravity +#define XmCWindow XtCWindow +#define XmCWindowGroup XtCWindowGroup +#define XmCWmTimeout XtCWmTimeout +#define XmCX XtCX +#define XmCY XtCY +#define XmNaccelerators XtNaccelerators +#define XmNallowShellResize XtNallowShellResize +#define XmNancestorSensitive XtNancestorSensitive +#define XmNargc XtNargc +#define XmNargv XtNargv +#define XmNbackground XtNbackground +#define XmNbackgroundPixmap XtNbackgroundPixmap +#define XmNbaseHeight XtNbaseHeight +#define XmNbaseHeight XtNbaseHeight +#define XmNbaseWidth XtNbaseWidth +#define XmNbaseWidth XtNbaseWidth +#define XmNbitmap XtNbitmap +#define XmNborder XtNborder +#define XmNborderColor XtNborderColor +#define XmNborderPixmap XtNborderPixmap +#define XmNborderWidth XtNborderWidth +#define XmNcallback XtNcallback +#define XmNchildren XtNchildren +#define XmNcolormap XtNcolormap +#define XmNcreatePopupChildProc XtNcreatePopupChildProc +#define XmNdepth XtNdepth +#define XmNdestroyCallback XtNdestroyCallback +#define XmNeditType XtNeditType +#define XmNfile XtNfile +#define XmNfont XtNfont +#define XmNfontSet XtNfontSet +#define XmNforceBars XtNforceBars +#define XmNforeground XtNforeground +#define XmNfunction XtNfunction +#define XmNgeometry XtNgeometry +#define XmNheight XtNheight +#define XmNheightInc XtNheightInc +#define XmNhighlight XtNhighlight +#define XmNiconMask XtNiconMask +#define XmNiconName XtNiconName +#define XmNiconNameEncoding XtNiconNameEncoding +#define XmNiconPixmap XtNiconPixmap +#define XmNiconWindow XtNiconWindow +#define XmNiconX XtNiconX +#define XmNiconY XtNiconY +#define XmNiconic XtNiconic +#define XmNindex XtNindex +#define XmNinitialResourcesPersistent XtNinitialResourcesPersistent +#define XmNinitialState XtNinitialState +#define XmNinnerHeight XtNinnerHeight +#define XmNinnerWidth XtNinnerWidth +#define XmNinnerWindow XtNinnerWindow +#define XmNinput XtNinput +#define XmNinsertPosition XtNinsertPosition +#define XmNinternalHeight XtNinternalHeight +#define XmNinternalWidth XtNinternalWidth +#define XmNjumpProc XtNjumpProc +#define XmNjustify XtNjustify +#define XmNlength XtNlength +#define XmNlowerRight XtNlowerRight +#define XmNmappedWhenManaged XtNmappedWhenManaged +#define XmNmaxAspectX XtNmaxAspectX +#define XmNmaxAspectY XtNmaxAspectY +#define XmNmaxHeight XtNmaxHeight +#define XmNmaxWidth XtNmaxWidth +#define XmNmenuEntry XtNmenuEntry +#define XmNminAspectX XtNminAspectX +#define XmNminAspectY XtNminAspectY +#define XmNminHeight XtNminHeight +#define XmNminWidth XtNminWidth +#define XmNname XtNname +#define XmNnotify XtNnotify +#define XmNnumChildren XtNnumChildren +#define XmNorientation XtNorientation +#define XmNoverrideRedirect XtNoverrideRedirect +#define XmNparameter XtNparameter +#define XmNpixmap XtNpixmap +#define XmNpopdownCallback XtNpopdownCallback +#define XmNpopupCallback XtNpopupCallback +#define XmNresize XtNresize +#define XmNreverseVideo XtNreverseVideo +#define XmNsaveUnder XtNsaveUnder +#define XmNscreen XtNscreen +#define XmNscrollDCursor XtNscrollDCursor +#define XmNscrollHCursor XtNscrollHCursor +#define XmNscrollLCursor XtNscrollLCursor +#define XmNscrollProc XtNscrollProc +#define XmNscrollRCursor XtNscrollRCursor +#define XmNscrollUCursor XtNscrollUCursor +#define XmNscrollVCursor XtNscrollVCursor +#define XmNselection XtNselection +#define XmNselectionArray XtNselectionArray +#define XmNsensitive XtNsensitive +#define XmNshown XtNshown +#define XmNspace XtNspace +#define XmNstring XtNstring +#define XmNtextOptions XtNtextOptions +#define XmNtextSink XtNtextSink +#define XmNtextSource XtNtextSource +#define XmNthickness XtNthickness +#define XmNthumb XtNthumb +#define XmNthumbProc XtNthumbProc +#define XmNtitle XtNtitle +#define XmNtitleEncoding XtNtitleEncoding +#define XmNtop XtNtop +#define XmNtransient XtNtransient +#define XmNtransientFor XtNtransientFor +#define XmNtransientFor XtNtransientFor +#define XmNtranslations XtNtranslations +#define XmNupdate XtNupdate +#define XmNuseBottom XtNuseBottom +#define XmNuseRight XtNuseRight +#define XmNvalue XtNvalue +#define XmNvisual XtNvisual +#define XmNwaitForWm XtNwaitForWm +#define XmNwidth XtNwidth +#define XmNwidthInc XtNwidthInc +#define XmNwinGravity XtNwinGravity +#define XmNwindow XtNwindow +#define XmNwindowGroup XtNwindowGroup +#define XmNwmTimeout XtNwmTimeout +#define XmNx XtNx +#define XmNy XtNy +#define XmRAcceleratorTable XtRAcceleratorTable +#define XmRAtom XtRAtom +#define XmRBitmap XtRBitmap +#define XmRBool XtRBool +#define XmRBoolean XtRBoolean +#define XmRCallProc XtRCallProc +#define XmRCallback XtRCallback +#define XmRCardinal XtRCardinal +#define XmRColor XtRColor +#define XmRColormap XtRColormap +#define XmRCursor XtRCursor +#define XmRDimension XtRDimension +#define XmRDisplay XtRDisplay +#define XmREditMode XtREditMode +#define XmREnum XtREnum +#define XmRFile XtRFile +#define XmRFloat XtRFloat +#define XmRFont XtRFont +#define XmRFontSet XtRFontSet +#define XmRFontStruct XtRFontStruct +#define XmRFunction XtRFunction +#define XmRGeometry XtRGeometry +#define XmRImmediate XtRImmediate +#define XmRInitialState XtRInitialState +#define XmRInt XtRInt +#define XmRJustify XtRJustify +#define XmRLongBoolean XtRLongBoolean +#define XmROrientation XtROrientation +#define XmRObject XtRObject +#define XmRPixel XtRPixel +#define XmRPixmap XtRPixmap +#define XmRPointer XtRPointer +#define XmRPosition XtRPosition +#define XmRScreen XtRScreen +#define XmRShort XtRShort +#define XmRString XtRString +#define XmRStringArray XtRStringArray +#define XmRStringTable XtRStringTable +#define XmRTextPosition XtCTextPosition +#define XmRTranslationTable XtRTranslationTable +#define XmRUnsignedChar XtRUnsignedChar +#define XmRVisual XtRVisual +#define XmRWidget XtRWidget +#define XmRWidgetClass XtRWidgetClass +#define XmRWidgetList XtRWidgetList +#define XmRWindow XtRWindow +#define XmNtoolTipString "toolTipString" +#define XmCToolTipString "ToolTipString" +#define XmNtoolTipPostDelay "toolTipPostDelay" +#define XmCToolTipPostDelay "ToolTipPostDelay" +#define XmNtoolTipPostDuration "toolTipPostDuration" +#define XmCToolTipPostDuration "ToolTipPostDuration" +#define XmNtoolTipEnable "toolTipEnable" +#define XmCToolTipEnable "ToolTipEnable" +#define XmNanimate "animate" +#define XmCAnimate "Animate" + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#endif /* _XmStrDefs_h_ */ diff --git a/libXm/linux86/Xm/Xmfuncs.h b/libXm/linux86/Xm/Xmfuncs.h new file mode 100644 index 0000000..2c44be8 --- /dev/null +++ b/libXm/linux86/Xm/Xmfuncs.h @@ -0,0 +1,91 @@ +/* + * $TOG: Xmfuncs.h /main/1 1997/03/24 16:25:46 dbl $ + * + * +Copyright (c) 1990 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + * + */ + +#ifndef _XFUNCS_H_ +#define _XFUNCS_H_ + +#include + +/* the old Xfuncs.h, for pre-R6 */ + +#ifdef X_USEBFUNCS +void bcopy(); +void bzero(); +int bcmp(); +#else +#if (__STDC__ && !defined(X_NOT_STDC_ENV) && !defined(sun) && !defined(macII) && !defined(apollo)) || defined(SVR4) || defined(hpux) || defined(_IBMR2) || defined(_SEQUENT_) +#include +#define _XFUNCS_H_INCLUDED_STRING_H +#define bcopy(b1,b2,len) memmove(b2, b1, (size_t)(len)) +#define bzero(b,len) memset(b, 0, (size_t)(len)) +#define bcmp(b1,b2,len) memcmp(b1, b2, (size_t)(len)) +#else +#ifdef sgi +#include +#else +#ifdef SYSV +#include +void bcopy(); +#define bzero(b,len) memset(b, 0, len) +#define bcmp(b1,b2,len) memcmp(b1, b2, len) +#else /* bsd */ +void bcopy(); +void bzero(); +int bcmp(); +#endif /* SYSV */ +#endif /* sgi */ +#endif /* __STDC__ and relatives */ +#endif /* X_USEBFUNCS */ + +/* the new Xfuncs.h */ + +#if !defined(X_NOT_STDC_ENV) && (!defined(sun) || defined(SVR4)) +/* the ANSI C way */ +#ifndef _XFUNCS_H_INCLUDED_STRING_H +#include +#endif +#undef bzero +#define bzero(b,len) memset(b,0,len) +#else /* else X_NOT_STDC_ENV or SunOS 4 */ +#if defined(SYSV) || defined(luna) || defined(sun) || defined(__sxg__) +#include +#define memmove(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len)) +#if defined(SYSV) && defined(_XBCOPYFUNC) +#undef memmove +#define memmove(dst,src,len) _XBCOPYFUNC((char *)(src),(char *)(dst),(int)(len)) +#define _XNEEDBCOPYFUNC +#endif +#else /* else vanilla BSD */ +#define memmove(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len)) +#define memcpy(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len)) +#define memcmp(b1,b2,len) bcmp((char *)(b1),(char *)(b2),(int)(len)) +#endif /* SYSV else */ +#endif /* ! X_NOT_STDC_ENV else */ + +#endif /* _XFUNCS_H_ */ diff --git a/libXm/linux86/Xm/XmosP.h b/libXm/linux86/Xm/XmosP.h new file mode 100644 index 0000000..a3ce6c7 --- /dev/null +++ b/libXm/linux86/Xm/XmosP.h @@ -0,0 +1,223 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: XmosP.h /main/15 1997/03/25 14:45:55 dbl $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmosP_h +#define _XmosP_h + +/* Some SVR4 systems don't have bzero. */ +#include /* for bzero et al */ + +/* + * Fix for 8975 - using LOGNAME instead of USER on SYSV and SVR4 +*/ + +#ifndef USER_VAR +#if defined(SYSV) || defined(SVR4) +#define USER_VAR "LOGNAME" +#else +#define USER_VAR "USER" +#endif +#endif + +/* + * Fix for 5222 - if NO_MEMMOVE is defined, some systems will still + * require stdlib.h. + */ +#ifdef NO_MEMMOVE +#ifdef bcopy +#undef bcopy +#endif +#ifdef memmove +#undef memmove +#endif +#define memmove( p1, p2, p3 ) bcopy( p2, p1, p3 ) +#endif + +#ifndef X_NOT_STDC_ENV +#include /* Needed for MB_CUR_MAX, mbtowc, mbstowcs and mblen */ +#endif + +/* On Sun systems, mblen is broken. It doesn't return 0 when the + string is empty. Here's a patch. NOTE: On Sun systems, mblen + is a macro wrapper around mbtowc. Hence the implementation below. */ +#if defined(sun) +#undef mblen +#define mblen(ptr, size) \ + ((ptr && *(ptr) == '\0') ? 0 : mbtowc((wchar_t *)0, (ptr), (size))) +#endif + +#include /* for MB_LEN_MAX et al */ + +#ifndef INT_MAX +#define INT_MAX 2147483647 +#endif +#ifndef LONG_MAX +#define LONG_MAX 2147483647 +#endif +#ifdef BOGUS_MB_MAX /* some systems don't properly set MB_[CUR|LEN]_MAX */ +#undef MB_LEN_MAX +#define MB_LEN_MAX 1 /* temp fix for ultrix */ +#undef MB_CUR_MAX +#define MB_CUR_MAX 1 /* temp fix for ultrix */ +#endif /* BOGUS_MB_MAX */ + +/**********************************************************************/ +/* here we duplicate Xtos.h, since we can't include this private file */ + +#ifdef INCLUDE_ALLOCA_H +#include +#endif + +#ifdef CRAY +#define WORD64 +#endif + +/* stolen from server/include/os.h */ +#ifndef NO_ALLOCA +/* + * os-dependent definition of local allocation and deallocation + * If you want something other than XtMalloc/XtFree for ALLOCATE/DEALLOCATE + * LOCAL then you add that in here. + */ +#if defined(__HIGHC__) + +#if HCVERSION < 21003 +#define ALLOCATE_LOCAL(size) alloca(size) +pragma on(alloca); +#else /* HCVERSION >= 21003 */ +#define ALLOCATE_LOCAL(size) _Alloca(size) +#endif /* HCVERSION < 21003 */ + +#define DEALLOCATE_LOCAL(ptr) /* as nothing */ + +#endif /* defined(__HIGHC__) */ + + +#ifdef __GNUC__ + +#ifndef alloca /* gnu itself might have done that already */ +#define alloca __builtin_alloca +#endif + +#define ALLOCATE_LOCAL(size) alloca(size) +#define DEALLOCATE_LOCAL(ptr) /* as nothing */ +#else /* ! __GNUC__ */ +/* + * warning: mips alloca is unsuitable, do not use. + */ +#if defined(vax) || defined(sun) || defined(apollo) || defined(stellar) +/* + * Some System V boxes extract alloca.o from libPW.a; if you + * decide that you don't want to use alloca, you might want to fix it here. + */ +char *alloca(); +#define ALLOCATE_LOCAL(size) alloca(size) +#define DEALLOCATE_LOCAL(ptr) /* as nothing */ +#endif /* who does alloca */ +#endif /* __GNUC__ */ + +#endif /* NO_ALLOCA */ + +#ifndef ALLOCATE_LOCAL +#define ALLOCATE_LOCAL(size) XtMalloc(size) +#define DEALLOCATE_LOCAL(ptr) XtFree(ptr) +#endif /* ALLOCATE_LOCAL */ + +/* End of Xtos.h */ +/*****************/ + +#include + +/* For padding structures in Mrm we need to know how big pointers are. */ +#if !defined(CRAY) && !defined(__alpha) +#define MrmShortPtr +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#define MATCH_CHAR 'P' /* referenced in InitPath strings and in the files + that uses it (ImageCache.c and Mrmhier.c) */ + +/* OS-dependent file info for VirtKeys */ + +#define XMBINDDIR "XMBINDDIR" +#ifndef XMBINDDIR_FALLBACK +#define XMBINDDIR_FALLBACK "/usr/lib/Xm/bindings" +#endif +#define XMBINDFILE "xmbind.alias" +#define MOTIFBIND ".motifbind" + +typedef enum { + XmOS_METHOD_NULL, + XmOS_METHOD_DEFAULTED, + XmOS_METHOD_REPLACED +} XmOSMethodStatus; + +typedef XmDirection (*XmCharDirectionProc)(XtPointer /* char */, + XmTextType /* type */, + XmStringTag /* locale */); + +typedef Status (*XmInitialDirectionProc)(XtPointer /* chars */, + XmTextType /* type */, + XmStringTag /* locale */, + unsigned int * /* num_bytes */, + XmDirection * /* direction */); + + +/******** Private Function Declarations ********/ + +extern XmOSMethodStatus XmOSGetMethod(Widget w, + String method_name, + XtPointer * method, + XtPointer * os_data); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmosP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/linux86/Xm/XpmP.h b/libXm/linux86/Xm/XpmP.h new file mode 100644 index 0000000..3313f8d --- /dev/null +++ b/libXm/linux86/Xm/XpmP.h @@ -0,0 +1,543 @@ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + * + * $XConsortium: XpmP.h /main/3 1996/09/20 08:13:01 pascale $ + */ + +#ifndef _XpmP_h +#define _XpmP_h + +/* Xpm external symbols are prefixed with Xme */ + +#define XpmCreatePixmapFromData XmeXpmCreatePixmapFromData +#define XpmCreateDataFromPixmap XmeXpmCreateDataFromPixmap +#define XpmReadFileToPixmap XmeXpmReadFileToPixmap +#define XpmWriteFileFromPixmap XmeXpmWriteFileFromPixmap +#define XpmCreateImageFromData XmeXpmCreateImageFromData +#define XpmCreateDataFromImage XmeXpmCreateDataFromImage +#define XpmReadFileToImage XmeXpmReadFileToImage +#define XpmWriteFileFromImage XmeXpmWriteFileFromImage +#define XpmCreateImageFromBuffer XmeXpmCreateImageFromBuffer +#define XpmCreatePixmapFromBuffer XmeXpmCreatePixmapFromBuffer +#define XpmCreateBufferFromImage XmeXpmCreateBufferFromImage +#define XpmCreateBufferFromPixmap XmeXpmCreateBufferFromPixmap +#define XpmReadFileToBuffer XmeXpmReadFileToBuffer +#define XpmWriteFileFromBuffer XmeXpmWriteFileFromBuffer +#define XpmReadFileToData XmeXpmReadFileToData +#define XpmWriteFileFromData XmeXpmWriteFileFromData +#define XpmAttributesSize XmeXpmAttributesSize +#define XpmFreeAttributes XmeXpmFreeAttributes +#define XpmFreeExtensions XmeXpmFreeExtensions +#define XpmFreeXpmImage XmeXpmFreeXpmImage +#define XpmFreeXpmInfo XmeXpmFreeXpmInfo +#define XpmGetErrorString XmeXpmGetErrorString +#define XpmLibraryVersion XmeXpmLibraryVersion +#define XpmReadFileToXpmImage XmeXpmReadFileToXpmImage +#define XpmWriteFileFromXpmImage XmeXpmWriteFileFromXpmImage +#define XpmCreatePixmapFromXpmImage XmeXpmCreatePixmapFromXpmImage +#define XpmCreateImageFromXpmImage XmeXpmCreateImageFromXpmImage +#define XpmCreateXpmImageFromImage XmeXpmCreateXpmImageFromImage +#define XpmCreateXpmImageFromPixmap XmeXpmCreateXpmImageFromPixmap +#define XpmCreateDataFromXpmImage XmeXpmCreateDataFromXpmImage +#define XpmCreateXpmImageFromData XmeXpmCreateXpmImageFromData +#define XpmCreateXpmImageFromBuffer XmeXpmCreateXpmImageFromBuffer +#define XpmCreateBufferFromXpmImage XmeXpmCreateBufferFromXpmImage +#define XpmFree XmeXpmFree + +/* The following is the original xpm.h header file */ + +/* + * Copyright (C) 1989-95 GROUPE BULL + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of GROUPE BULL shall not be + * used in advertising or otherwise to promote the sale, use or other dealings + * in this Software without prior written authorization from GROUPE BULL. + */ + +/*****************************************************************************\ +* xpm.h: * +* * +* XPM library * +* Include file * +* * +* Developed by Arnaud Le Hors * +\*****************************************************************************/ + +/* + * The code related to FOR_MSW has been added by + * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94 + */ + +#ifndef XPM_h +#define XPM_h + +/* + * first some identification numbers: + * the version and revision numbers are determined with the following rule: + * SO Major number = LIB minor version number. + * SO Minor number = LIB sub-minor version number. + * e.g: Xpm version 3.2f + * we forget the 3 which is the format number, 2 gives 2, and f gives 6. + * thus we have XpmVersion = 2 and XpmRevision = 6 + * which gives SOXPMLIBREV = 2.6 + * + * Then the XpmIncludeVersion number is built from these numbers. + */ +#define XpmFormat 3 +#define XpmVersion 4 +#define XpmRevision 9 +#define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision) + +#ifndef XPM_NUMBERS + +#ifdef FOR_MSW +# define SYSV /* uses memcpy string.h etc. */ +# include +# include "simx.h" /* defines some X stuff using MSW types */ +#define NEED_STRCASECMP /* at least for MSVC++ */ +#else /* FOR_MSW */ +# include +# include +#endif /* FOR_MSW */ + +/* let's define Pixel if it is not done yet */ +#if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED) +typedef unsigned long Pixel; /* Index into colormap */ +# define PIXEL_ALREADY_TYPEDEFED +#endif + +/* make sure we know whether function prototypes are needed or not */ +#ifndef NeedFunctionPrototypes +# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) +# define NeedFunctionPrototypes 1 +# else +# define NeedFunctionPrototypes 0 +# endif +#endif + + +/* Return ErrorStatus codes: + * null if full success + * positive if partial success + * negative if failure + */ + +#define XpmColorError 1 +#define XpmSuccess 0 +#define XpmOpenFailed -1 +#define XpmFileInvalid -2 +#define XpmNoMemory -3 +#define XpmColorFailed -4 + +typedef struct { + char *name; /* Symbolic color name */ + char *value; /* Color value */ + Pixel pixel; /* Color pixel */ +} XpmColorSymbol; + +typedef struct { + char *name; /* name of the extension */ + unsigned int nlines; /* number of lines in this extension */ + char **lines; /* pointer to the extension array of strings */ +} XpmExtension; + +typedef struct { + char *string; /* characters string */ + char *symbolic; /* symbolic name */ + char *m_color; /* monochrom default */ + char *g4_color; /* 4 level grayscale default */ + char *g_color; /* other level grayscale default */ + char *c_color; /* color default */ +} XpmColor; + +typedef struct { + unsigned int width; /* image width */ + unsigned int height; /* image height */ + unsigned int cpp; /* number of characters per pixel */ + unsigned int ncolors; /* number of colors */ + XpmColor *colorTable; /* list of related colors */ + unsigned int *data; /* image data */ +} XpmImage; + +typedef struct { + unsigned long valuemask; /* Specifies which attributes are defined */ + char *hints_cmt; /* Comment of the hints section */ + char *colors_cmt; /* Comment of the colors section */ + char *pixels_cmt; /* Comment of the pixels section */ + unsigned int x_hotspot; /* Returns the x hotspot's coordinate */ + unsigned int y_hotspot; /* Returns the y hotspot's coordinate */ + unsigned int nextensions; /* number of extensions */ + XpmExtension *extensions; /* pointer to array of extensions */ +} XpmInfo; + +typedef int (*XpmAllocColorFunc)( +#if NeedFunctionPrototypes + Display* /* display */, + Colormap /* colormap */, + char* /* colorname */, + XColor* /* xcolor */, + void* /* closure */ +#endif +); + +typedef int (*XpmFreeColorsFunc)( +#if NeedFunctionPrototypes + Display* /* display */, + Colormap /* colormap */, + Pixel* /* pixels */, + int /* npixels */, + void* /* closure */ +#endif +); + +typedef struct { + unsigned long valuemask; /* Specifies which attributes are + defined */ + + Visual *visual; /* Specifies the visual to use */ + Colormap colormap; /* Specifies the colormap to use */ + unsigned int depth; /* Specifies the depth */ + unsigned int width; /* Returns the width of the created + pixmap */ + unsigned int height; /* Returns the height of the created + pixmap */ + unsigned int x_hotspot; /* Returns the x hotspot's + coordinate */ + unsigned int y_hotspot; /* Returns the y hotspot's + coordinate */ + unsigned int cpp; /* Specifies the number of char per + pixel */ + Pixel *pixels; /* List of used color pixels */ + unsigned int npixels; /* Number of used pixels */ + XpmColorSymbol *colorsymbols; /* List of color symbols to override */ + unsigned int numsymbols; /* Number of symbols */ + char *rgb_fname; /* RGB text file name */ + unsigned int nextensions; /* Number of extensions */ + XpmExtension *extensions; /* List of extensions */ + + unsigned int ncolors; /* Number of colors */ + XpmColor *colorTable; /* List of colors */ +/* 3.2 backward compatibility code */ + char *hints_cmt; /* Comment of the hints section */ + char *colors_cmt; /* Comment of the colors section */ + char *pixels_cmt; /* Comment of the pixels section */ +/* end 3.2 bc */ + unsigned int mask_pixel; /* Color table index of transparent + color */ + + /* Color Allocation Directives */ + Bool exactColors; /* Only use exact colors for visual */ + unsigned int closeness; /* Allowable RGB deviation */ + unsigned int red_closeness; /* Allowable red deviation */ + unsigned int green_closeness; /* Allowable green deviation */ + unsigned int blue_closeness; /* Allowable blue deviation */ + int color_key; /* Use colors from this color set */ + + Pixel *alloc_pixels; /* Returns the list of alloc'ed color + pixels */ + Bool nalloc_pixels; /* Returns the number of alloc'ed + color pixels */ + + Bool alloc_close_colors; /* Specify whether close colors should + be allocated using XAllocColor + or not */ + int bitmap_format; /* Specify the format of 1bit depth + images: ZPixmap or XYBitmap */ + + /* Color functions */ + XpmAllocColorFunc alloc_color; /* Application color allocator */ + XpmFreeColorsFunc free_colors; /* Application color de-allocator */ + void *color_closure; /* Application private data to pass to + alloc_color and free_colors */ + +} XpmAttributes; + +/* XpmAttributes value masks bits */ +#define XpmVisual (1L<<0) +#define XpmColormap (1L<<1) +#define XpmDepth (1L<<2) +#define XpmSize (1L<<3) /* width & height */ +#define XpmHotspot (1L<<4) /* x_hotspot & y_hotspot */ +#define XpmCharsPerPixel (1L<<5) +#define XpmColorSymbols (1L<<6) +#define XpmRgbFilename (1L<<7) +/* 3.2 backward compatibility code */ +#define XpmInfos (1L<<8) +#define XpmReturnInfos XpmInfos +/* end 3.2 bc */ +#define XpmReturnPixels (1L<<9) +#define XpmExtensions (1L<<10) +#define XpmReturnExtensions XpmExtensions + +#define XpmExactColors (1L<<11) +#define XpmCloseness (1L<<12) +#define XpmRGBCloseness (1L<<13) +#define XpmColorKey (1L<<14) + +#define XpmColorTable (1L<<15) +#define XpmReturnColorTable XpmColorTable + +#define XpmReturnAllocPixels (1L<<16) +#define XpmAllocCloseColors (1L<<17) +#define XpmBitmapFormat (1L<<18) + +#define XpmAllocColor (1L<<19) +#define XpmFreeColors (1L<<20) +#define XpmColorClosure (1L<<21) + + +/* XpmInfo value masks bits */ +#define XpmComments XpmInfos +#define XpmReturnComments XpmComments + +/* XpmAttributes mask_pixel value when there is no mask */ +#ifndef FOR_MSW +#define XpmUndefPixel 0x80000000 +#else +/* int is only 16 bit for MSW */ +#define XpmUndefPixel 0x8000 +#endif + +/* + * color keys for visual type, they must fit along with the number key of + * each related element in xpmColorKeys[] defined in XpmI.h + */ +#define XPM_MONO 2 +#define XPM_GREY4 3 +#define XPM_GRAY4 3 +#define XPM_GREY 4 +#define XPM_GRAY 4 +#define XPM_COLOR 5 + + +/* macros for forward declarations of functions with prototypes */ +#if NeedFunctionPrototypes +#define FUNC(f, t, p) extern t f p +#define LFUNC(f, t, p) static t f p +#else +#define FUNC(f, t, p) extern t f() +#define LFUNC(f, t, p) static t f() +#endif + + +/* + * functions declarations + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */ + +#ifndef FOR_MSW + FUNC(XpmCreatePixmapFromData, int, (Display *display, + Drawable d, + char **data, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateDataFromPixmap, int, (Display *display, + char ***data_return, + Pixmap pixmap, + Pixmap shapemask, + XpmAttributes *attributes)); + + FUNC(XpmReadFileToPixmap, int, (Display *display, + Drawable d, + char *filename, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmWriteFileFromPixmap, int, (Display *display, + char *filename, + Pixmap pixmap, + Pixmap shapemask, + XpmAttributes *attributes)); +#endif /* ndef FOR_MSW */ + + FUNC(XpmCreateImageFromData, int, (Display *display, + char **data, + XImage **image_return, + XImage **shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateDataFromImage, int, (Display *display, + char ***data_return, + XImage *image, + XImage *shapeimage, + XpmAttributes *attributes)); + + FUNC(XpmReadFileToImage, int, (Display *display, + char *filename, + XImage **image_return, + XImage **shapeimage_return, + XpmAttributes *attributes)); + + FUNC(XpmWriteFileFromImage, int, (Display *display, + char *filename, + XImage *image, + XImage *shapeimage, + XpmAttributes *attributes)); + + FUNC(XpmCreateImageFromBuffer, int, (Display *display, + char *buffer, + XImage **image_return, + XImage **shapemask_return, + XpmAttributes *attributes)); +#ifndef FOR_MSW + FUNC(XpmCreatePixmapFromBuffer, int, (Display *display, + Drawable d, + char *buffer, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateBufferFromImage, int, (Display *display, + char **buffer_return, + XImage *image, + XImage *shapeimage, + XpmAttributes *attributes)); + + FUNC(XpmCreateBufferFromPixmap, int, (Display *display, + char **buffer_return, + Pixmap pixmap, + Pixmap shapemask, + XpmAttributes *attributes)); +#endif /* ndef FOR_MSW */ + FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return)); + FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer)); + + FUNC(XpmReadFileToData, int, (char *filename, char ***data_return)); + FUNC(XpmWriteFileFromData, int, (char *filename, char **data)); + + FUNC(XpmAttributesSize, int, ()); + FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes)); + FUNC(XpmFreeExtensions, void, (XpmExtension *extensions, + int nextensions)); + + FUNC(XpmFreeXpmImage, void, (XpmImage *image)); + FUNC(XpmFreeXpmInfo, void, (XpmInfo *info)); + FUNC(XpmGetErrorString, char *, (int errcode)); + FUNC(XpmLibraryVersion, int, ()); + + /* XpmImage functions */ + FUNC(XpmReadFileToXpmImage, int, (char *filename, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmWriteFileFromXpmImage, int, (char *filename, + XpmImage *image, + XpmInfo *info)); +#ifndef FOR_MSW + FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display, + Drawable d, + XpmImage *image, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); +#endif + FUNC(XpmCreateImageFromXpmImage, int, (Display *display, + XpmImage *image, + XImage **image_return, + XImage **shapeimage_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateXpmImageFromImage, int, (Display *display, + XImage *image, + XImage *shapeimage, + XpmImage *xpmimage, + XpmAttributes *attributes)); +#ifndef FOR_MSW + FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display, + Pixmap pixmap, + Pixmap shapemask, + XpmImage *xpmimage, + XpmAttributes *attributes)); +#endif + FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmCreateXpmImageFromData, int, (char **data, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmFree, void, (void *ptr)); + +#ifdef __cplusplus +} /* for C++ V2.0 */ +#endif + + +/* backward compatibility */ + +/* for version 3.0c */ +#define XpmPixmapColorError XpmColorError +#define XpmPixmapSuccess XpmSuccess +#define XpmPixmapOpenFailed XpmOpenFailed +#define XpmPixmapFileInvalid XpmFileInvalid +#define XpmPixmapNoMemory XpmNoMemory +#define XpmPixmapColorFailed XpmColorFailed + +#define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \ + XpmReadFileToPixmap(dpy, d, file, pix, mask, att) +#define XpmWritePixmapFile(dpy, file, pix, mask, att) \ + XpmWriteFileFromPixmap(dpy, file, pix, mask, att) + +/* for version 3.0b */ +#define PixmapColorError XpmColorError +#define PixmapSuccess XpmSuccess +#define PixmapOpenFailed XpmOpenFailed +#define PixmapFileInvalid XpmFileInvalid +#define PixmapNoMemory XpmNoMemory +#define PixmapColorFailed XpmColorFailed + +#define ColorSymbol XpmColorSymbol + +#define XReadPixmapFile(dpy, d, file, pix, mask, att) \ + XpmReadFileToPixmap(dpy, d, file, pix, mask, att) +#define XWritePixmapFile(dpy, file, pix, mask, att) \ + XpmWriteFileFromPixmap(dpy, file, pix, mask, att) +#define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \ + XpmCreatePixmapFromData(dpy, d, data, pix, mask, att) +#define XCreateDataFromPixmap(dpy, data, pix, mask, att) \ + XpmCreateDataFromPixmap(dpy, data, pix, mask, att) + +#endif /* XPM_NUMBERS */ +#endif + +#endif /* _XpmP_h */ diff --git a/libXm/linux86/Xm/xmlist.h b/libXm/linux86/Xm/xmlist.h new file mode 100644 index 0000000..85726ee --- /dev/null +++ b/libXm/linux86/Xm/xmlist.h @@ -0,0 +1,175 @@ +/* + * Copyright 1991, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + * This file contains all routines for dealing with the hierarchy + * browser when shown as a tree or outline. + */ + +#ifndef _LIST_H +#define _LIST_H + +#if defined(VMS) || defined (__VMS) +#include +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ + * + * Stack Data structure. + * + ************************************************************/ + +typedef struct _XmStackRec { + int top, alloc; /* The top node of the stack, and the number + of allocated nodes. */ + XtPointer * elems; /* The stack elements. */ +} XmStackRec, *XmStack; + +/************************************************************ + * + * Global function defs. + * + ************************************************************/ + +XmStack _XmStackInit(void); +void _XmStackFree(XmStack), _XmStackPush(XmStack, XtPointer); +XtPointer _XmStackPop(XmStack); + +/************************************************************ + * + * Queue Data structure. + * + ************************************************************/ + +typedef struct __XmQElem { + struct __XmQElem *next, *prev; /* doubly linked list. */ + XtPointer data; /* The data associated with this element. */ + Boolean alloced; +} _XmQElem; + +typedef struct _XmQueueRec { + _XmQElem *first, *last; /* the first and last elements. */ + _XmQElem *free_elems; /* Unused elements. */ +} XmQueueRec, *XmQueue; + +/************************************************************ + * + * Global function defs. + * + ************************************************************/ + +XmQueue _XmQueueInit(void); +void _XmQueueFree(XmQueue), _XmQueuePush(XmQueue, XtPointer); +XtPointer _XmQueuePop(XmQueue); +int _XmQueueCount(XmQueue); + +/* + * Internal functions used only by other parts of the utils library. + */ + +void _Xm_AddQueue(XmQueue, _XmQElem *, _XmQElem *); +_XmQElem * _Xm_RemQueue(_XmQElem **); +_XmQElem * _Xm_GetNewElement(XmQueue); + +/************************************************************ + * + * New types. + * + ************************************************************/ + +typedef _XmQElem XmListElem; +typedef XmQueueRec *XmList; +typedef Boolean (*XmListFunc)(XmListElem *, XtPointer); + +/************************************************************ + * + * Macros. + * + ************************************************************/ + +#define XmListElemNext(elem) (elem)->next +#define XmListElemPrev(elem) (elem)->prev +#define XmListElemData(elem) (elem)->data + +#define XmListFirst(list) (list)->first +#define XmListLast(list) (list)->last + +/************************************************************ + * + * Global function defs. + * + ************************************************************/ + +void _XmListFree(XmList), _XmListRemove(XmList, XmListElem *); + +XmListElem * _XmListAddAfter(XmList, XmListElem *, XtPointer); +XmListElem * _XmListAddBefore(XmList, XmListElem *, XtPointer); + +XmList _XmListInit(void); + +int _XmListCount(XmList); + +XmListElem *_XmListExec(XmList, XmListElem *, XmListElem *, XmListFunc, XtPointer); + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined (__VMS) +#include +#endif + +/* #ifdef XmRENAME_WIDGETS */ +/* #define USE_OLD_NAMES */ +/* #endif */ + +#ifdef USE_OLD_NAMES + +#define ListAddAfter _XmListAddAfter +#define ListAddBefore _XmListAddBefore +#define ListCount _XmListCount +#define ListExec _XmListExec +#define ListFree _XmListFree +#define ListInit _XmListInit +#define ListRemove _XmListRemove +#define QueueCount _XmQueueCount +#define QueueFree _XmQueueFree +#define QueueInit _XmQueueInit +#define QueuePop _XmQueuePop +#define QueuePush _XmQueuePush +#define StackFree _XmStackFree +#define StackInit _XmStackInit +#define StackPop _XmStackPop +#define StackPush _XmStackPush +#define _AddQueue _Xm_AddQueue +#define _GetNewElement _Xm_GetNewElement +#define _RemQueue _Xm_RemQueue + +#define Stack XmStack +#define StackRec XmStackRec +#define QElem _XmQElem +#define QueueRec XmQueueRec +#define Queue XmQueue +#define ListElem XmListElem +#define List XmList +#define ListFunc XmListFunc + +#define ListElemNext XmListElemNext +#define ListElemPrev XmListElemPrev +#define ListElemData XmListElemData +#define ListFirst XmListFirst +#define ListLast XmListLast + +#endif /* USE_OLD_NAMES */ + +#endif /* _LIST_H */ diff --git a/libXm/linux86/libXm.a b/libXm/linux86/libXm.a new file mode 100644 index 0000000..dd7951f Binary files /dev/null and b/libXm/linux86/libXm.a differ diff --git a/libXm/osx/._libXm.a b/libXm/osx/._libXm.a new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/._libXm.a differ diff --git a/libXm/osx/Xm/._AccColorT.h b/libXm/osx/Xm/._AccColorT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._AccColorT.h differ diff --git a/libXm/osx/Xm/._AccTextT.h b/libXm/osx/Xm/._AccTextT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._AccTextT.h differ diff --git a/libXm/osx/Xm/._ActivatableT.h b/libXm/osx/Xm/._ActivatableT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ActivatableT.h differ diff --git a/libXm/osx/Xm/._ArrowB.h b/libXm/osx/Xm/._ArrowB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ArrowB.h differ diff --git a/libXm/osx/Xm/._ArrowBG.h b/libXm/osx/Xm/._ArrowBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ArrowBG.h differ diff --git a/libXm/osx/Xm/._ArrowBGP.h b/libXm/osx/Xm/._ArrowBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ArrowBGP.h differ diff --git a/libXm/osx/Xm/._ArrowBP.h b/libXm/osx/Xm/._ArrowBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ArrowBP.h differ diff --git a/libXm/osx/Xm/._AtomMgr.h b/libXm/osx/Xm/._AtomMgr.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._AtomMgr.h differ diff --git a/libXm/osx/Xm/._BaseClassI.h b/libXm/osx/Xm/._BaseClassI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._BaseClassI.h differ diff --git a/libXm/osx/Xm/._BaseClassP.h b/libXm/osx/Xm/._BaseClassP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._BaseClassP.h differ diff --git a/libXm/osx/Xm/._BitmapsI.h b/libXm/osx/Xm/._BitmapsI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._BitmapsI.h differ diff --git a/libXm/osx/Xm/._BulletinB.h b/libXm/osx/Xm/._BulletinB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._BulletinB.h differ diff --git a/libXm/osx/Xm/._BulletinBI.h b/libXm/osx/Xm/._BulletinBI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._BulletinBI.h differ diff --git a/libXm/osx/Xm/._BulletinBP.h b/libXm/osx/Xm/._BulletinBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._BulletinBP.h differ diff --git a/libXm/osx/Xm/._ButtonBox.h b/libXm/osx/Xm/._ButtonBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ButtonBox.h differ diff --git a/libXm/osx/Xm/._ButtonBoxP.h b/libXm/osx/Xm/._ButtonBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ButtonBoxP.h differ diff --git a/libXm/osx/Xm/._CacheI.h b/libXm/osx/Xm/._CacheI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CacheI.h differ diff --git a/libXm/osx/Xm/._CacheP.h b/libXm/osx/Xm/._CacheP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CacheP.h differ diff --git a/libXm/osx/Xm/._CallbackI.h b/libXm/osx/Xm/._CallbackI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CallbackI.h differ diff --git a/libXm/osx/Xm/._CareVisualT.h b/libXm/osx/Xm/._CareVisualT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CareVisualT.h differ diff --git a/libXm/osx/Xm/._CareVisualTI.h b/libXm/osx/Xm/._CareVisualTI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CareVisualTI.h differ diff --git a/libXm/osx/Xm/._CascadeB.h b/libXm/osx/Xm/._CascadeB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CascadeB.h differ diff --git a/libXm/osx/Xm/._CascadeBG.h b/libXm/osx/Xm/._CascadeBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CascadeBG.h differ diff --git a/libXm/osx/Xm/._CascadeBGI.h b/libXm/osx/Xm/._CascadeBGI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CascadeBGI.h differ diff --git a/libXm/osx/Xm/._CascadeBGP.h b/libXm/osx/Xm/._CascadeBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CascadeBGP.h differ diff --git a/libXm/osx/Xm/._CascadeBI.h b/libXm/osx/Xm/._CascadeBI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CascadeBI.h differ diff --git a/libXm/osx/Xm/._CascadeBP.h b/libXm/osx/Xm/._CascadeBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CascadeBP.h differ diff --git a/libXm/osx/Xm/._ClipWindTI.h b/libXm/osx/Xm/._ClipWindTI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ClipWindTI.h differ diff --git a/libXm/osx/Xm/._ClipWindowP.h b/libXm/osx/Xm/._ClipWindowP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ClipWindowP.h differ diff --git a/libXm/osx/Xm/._ColorI.h b/libXm/osx/Xm/._ColorI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColorI.h differ diff --git a/libXm/osx/Xm/._ColorObjI.h b/libXm/osx/Xm/._ColorObjI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColorObjI.h differ diff --git a/libXm/osx/Xm/._ColorObjP.h b/libXm/osx/Xm/._ColorObjP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColorObjP.h differ diff --git a/libXm/osx/Xm/._ColorP.h b/libXm/osx/Xm/._ColorP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColorP.h differ diff --git a/libXm/osx/Xm/._ColorS.h b/libXm/osx/Xm/._ColorS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColorS.h differ diff --git a/libXm/osx/Xm/._ColorSP.h b/libXm/osx/Xm/._ColorSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColorSP.h differ diff --git a/libXm/osx/Xm/._Column.h b/libXm/osx/Xm/._Column.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Column.h differ diff --git a/libXm/osx/Xm/._ColumnP.h b/libXm/osx/Xm/._ColumnP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ColumnP.h differ diff --git a/libXm/osx/Xm/._ComboBox.h b/libXm/osx/Xm/._ComboBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ComboBox.h differ diff --git a/libXm/osx/Xm/._ComboBoxP.h b/libXm/osx/Xm/._ComboBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ComboBoxP.h differ diff --git a/libXm/osx/Xm/._Command.h b/libXm/osx/Xm/._Command.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Command.h differ diff --git a/libXm/osx/Xm/._CommandI.h b/libXm/osx/Xm/._CommandI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CommandI.h differ diff --git a/libXm/osx/Xm/._CommandP.h b/libXm/osx/Xm/._CommandP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CommandP.h differ diff --git a/libXm/osx/Xm/._ContItemT.h b/libXm/osx/Xm/._ContItemT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ContItemT.h differ diff --git a/libXm/osx/Xm/._Container.h b/libXm/osx/Xm/._Container.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Container.h differ diff --git a/libXm/osx/Xm/._ContainerP.h b/libXm/osx/Xm/._ContainerP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ContainerP.h differ diff --git a/libXm/osx/Xm/._ContainerT.h b/libXm/osx/Xm/._ContainerT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ContainerT.h differ diff --git a/libXm/osx/Xm/._CutPaste.h b/libXm/osx/Xm/._CutPaste.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CutPaste.h differ diff --git a/libXm/osx/Xm/._CutPasteI.h b/libXm/osx/Xm/._CutPasteI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._CutPasteI.h differ diff --git a/libXm/osx/Xm/._DataF.h b/libXm/osx/Xm/._DataF.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DataF.h differ diff --git a/libXm/osx/Xm/._DataFP.h b/libXm/osx/Xm/._DataFP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DataFP.h differ diff --git a/libXm/osx/Xm/._DataFSelP.h b/libXm/osx/Xm/._DataFSelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DataFSelP.h differ diff --git a/libXm/osx/Xm/._DesktopP.h b/libXm/osx/Xm/._DesktopP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DesktopP.h differ diff --git a/libXm/osx/Xm/._DestI.h b/libXm/osx/Xm/._DestI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DestI.h differ diff --git a/libXm/osx/Xm/._DialogS.h b/libXm/osx/Xm/._DialogS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DialogS.h differ diff --git a/libXm/osx/Xm/._DialogSEP.h b/libXm/osx/Xm/._DialogSEP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DialogSEP.h differ diff --git a/libXm/osx/Xm/._DialogSP.h b/libXm/osx/Xm/._DialogSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DialogSP.h differ diff --git a/libXm/osx/Xm/._DialogSavvyT.h b/libXm/osx/Xm/._DialogSavvyT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DialogSavvyT.h differ diff --git a/libXm/osx/Xm/._Display.h b/libXm/osx/Xm/._Display.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Display.h differ diff --git a/libXm/osx/Xm/._DisplayI.h b/libXm/osx/Xm/._DisplayI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DisplayI.h differ diff --git a/libXm/osx/Xm/._DisplayP.h b/libXm/osx/Xm/._DisplayP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DisplayP.h differ diff --git a/libXm/osx/Xm/._DragBSI.h b/libXm/osx/Xm/._DragBSI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragBSI.h differ diff --git a/libXm/osx/Xm/._DragC.h b/libXm/osx/Xm/._DragC.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragC.h differ diff --git a/libXm/osx/Xm/._DragCI.h b/libXm/osx/Xm/._DragCI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragCI.h differ diff --git a/libXm/osx/Xm/._DragCP.h b/libXm/osx/Xm/._DragCP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragCP.h differ diff --git a/libXm/osx/Xm/._DragDrop.h b/libXm/osx/Xm/._DragDrop.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragDrop.h differ diff --git a/libXm/osx/Xm/._DragICCI.h b/libXm/osx/Xm/._DragICCI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragICCI.h differ diff --git a/libXm/osx/Xm/._DragIcon.h b/libXm/osx/Xm/._DragIcon.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragIcon.h differ diff --git a/libXm/osx/Xm/._DragIconI.h b/libXm/osx/Xm/._DragIconI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragIconI.h differ diff --git a/libXm/osx/Xm/._DragIconP.h b/libXm/osx/Xm/._DragIconP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragIconP.h differ diff --git a/libXm/osx/Xm/._DragOverS.h b/libXm/osx/Xm/._DragOverS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragOverS.h differ diff --git a/libXm/osx/Xm/._DragOverSI.h b/libXm/osx/Xm/._DragOverSI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragOverSI.h differ diff --git a/libXm/osx/Xm/._DragOverSP.h b/libXm/osx/Xm/._DragOverSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragOverSP.h differ diff --git a/libXm/osx/Xm/._DragUnderI.h b/libXm/osx/Xm/._DragUnderI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DragUnderI.h differ diff --git a/libXm/osx/Xm/._DrawI.h b/libXm/osx/Xm/._DrawI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawI.h differ diff --git a/libXm/osx/Xm/._DrawP.h b/libXm/osx/Xm/._DrawP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawP.h differ diff --git a/libXm/osx/Xm/._DrawUtils.h b/libXm/osx/Xm/._DrawUtils.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawUtils.h differ diff --git a/libXm/osx/Xm/._DrawingA.h b/libXm/osx/Xm/._DrawingA.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawingA.h differ diff --git a/libXm/osx/Xm/._DrawingAI.h b/libXm/osx/Xm/._DrawingAI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawingAI.h differ diff --git a/libXm/osx/Xm/._DrawingAP.h b/libXm/osx/Xm/._DrawingAP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawingAP.h differ diff --git a/libXm/osx/Xm/._DrawnB.h b/libXm/osx/Xm/._DrawnB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawnB.h differ diff --git a/libXm/osx/Xm/._DrawnBP.h b/libXm/osx/Xm/._DrawnBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DrawnBP.h differ diff --git a/libXm/osx/Xm/._DropDown.h b/libXm/osx/Xm/._DropDown.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropDown.h differ diff --git a/libXm/osx/Xm/._DropDownP.h b/libXm/osx/Xm/._DropDownP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropDownP.h differ diff --git a/libXm/osx/Xm/._DropSMgr.h b/libXm/osx/Xm/._DropSMgr.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropSMgr.h differ diff --git a/libXm/osx/Xm/._DropSMgrI.h b/libXm/osx/Xm/._DropSMgrI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropSMgrI.h differ diff --git a/libXm/osx/Xm/._DropSMgrP.h b/libXm/osx/Xm/._DropSMgrP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropSMgrP.h differ diff --git a/libXm/osx/Xm/._DropTrans.h b/libXm/osx/Xm/._DropTrans.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropTrans.h differ diff --git a/libXm/osx/Xm/._DropTransP.h b/libXm/osx/Xm/._DropTransP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._DropTransP.h differ diff --git a/libXm/osx/Xm/._EditresComI.h b/libXm/osx/Xm/._EditresComI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._EditresComI.h differ diff --git a/libXm/osx/Xm/._Ext.h b/libXm/osx/Xm/._Ext.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Ext.h differ diff --git a/libXm/osx/Xm/._Ext18List.h b/libXm/osx/Xm/._Ext18List.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Ext18List.h differ diff --git a/libXm/osx/Xm/._Ext18ListP.h b/libXm/osx/Xm/._Ext18ListP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Ext18ListP.h differ diff --git a/libXm/osx/Xm/._ExtObjectI.h b/libXm/osx/Xm/._ExtObjectI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ExtObjectI.h differ diff --git a/libXm/osx/Xm/._ExtObjectP.h b/libXm/osx/Xm/._ExtObjectP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ExtObjectP.h differ diff --git a/libXm/osx/Xm/._ExtP.h b/libXm/osx/Xm/._ExtP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ExtP.h differ diff --git a/libXm/osx/Xm/._FileSB.h b/libXm/osx/Xm/._FileSB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._FileSB.h differ diff --git a/libXm/osx/Xm/._FileSBP.h b/libXm/osx/Xm/._FileSBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._FileSBP.h differ diff --git a/libXm/osx/Xm/._FontS.h b/libXm/osx/Xm/._FontS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._FontS.h differ diff --git a/libXm/osx/Xm/._FontSP.h b/libXm/osx/Xm/._FontSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._FontSP.h differ diff --git a/libXm/osx/Xm/._Form.h b/libXm/osx/Xm/._Form.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Form.h differ diff --git a/libXm/osx/Xm/._FormP.h b/libXm/osx/Xm/._FormP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._FormP.h differ diff --git a/libXm/osx/Xm/._Frame.h b/libXm/osx/Xm/._Frame.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Frame.h differ diff --git a/libXm/osx/Xm/._FrameP.h b/libXm/osx/Xm/._FrameP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._FrameP.h differ diff --git a/libXm/osx/Xm/._GMUtilsI.h b/libXm/osx/Xm/._GMUtilsI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GMUtilsI.h differ diff --git a/libXm/osx/Xm/._Gadget.h b/libXm/osx/Xm/._Gadget.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Gadget.h differ diff --git a/libXm/osx/Xm/._GadgetI.h b/libXm/osx/Xm/._GadgetI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GadgetI.h differ diff --git a/libXm/osx/Xm/._GadgetP.h b/libXm/osx/Xm/._GadgetP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GadgetP.h differ diff --git a/libXm/osx/Xm/._GadgetUtiI.h b/libXm/osx/Xm/._GadgetUtiI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GadgetUtiI.h differ diff --git a/libXm/osx/Xm/._GeoUtilsI.h b/libXm/osx/Xm/._GeoUtilsI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GeoUtilsI.h differ diff --git a/libXm/osx/Xm/._GrabShell.h b/libXm/osx/Xm/._GrabShell.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GrabShell.h differ diff --git a/libXm/osx/Xm/._GrabShellP.h b/libXm/osx/Xm/._GrabShellP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._GrabShellP.h differ diff --git a/libXm/osx/Xm/._HashI.h b/libXm/osx/Xm/._HashI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._HashI.h differ diff --git a/libXm/osx/Xm/._Hierarchy.h b/libXm/osx/Xm/._Hierarchy.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Hierarchy.h differ diff --git a/libXm/osx/Xm/._HierarchyP.h b/libXm/osx/Xm/._HierarchyP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._HierarchyP.h differ diff --git a/libXm/osx/Xm/._IconBox.h b/libXm/osx/Xm/._IconBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconBox.h differ diff --git a/libXm/osx/Xm/._IconBoxP.h b/libXm/osx/Xm/._IconBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconBoxP.h differ diff --git a/libXm/osx/Xm/._IconButton.h b/libXm/osx/Xm/._IconButton.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconButton.h differ diff --git a/libXm/osx/Xm/._IconButtonP.h b/libXm/osx/Xm/._IconButtonP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconButtonP.h differ diff --git a/libXm/osx/Xm/._IconFile.h b/libXm/osx/Xm/._IconFile.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconFile.h differ diff --git a/libXm/osx/Xm/._IconFileP.h b/libXm/osx/Xm/._IconFileP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconFileP.h differ diff --git a/libXm/osx/Xm/._IconG.h b/libXm/osx/Xm/._IconG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconG.h differ diff --git a/libXm/osx/Xm/._IconGI.h b/libXm/osx/Xm/._IconGI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconGI.h differ diff --git a/libXm/osx/Xm/._IconGP.h b/libXm/osx/Xm/._IconGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconGP.h differ diff --git a/libXm/osx/Xm/._IconH.h b/libXm/osx/Xm/._IconH.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconH.h differ diff --git a/libXm/osx/Xm/._IconHP.h b/libXm/osx/Xm/._IconHP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._IconHP.h differ diff --git a/libXm/osx/Xm/._ImageCachI.h b/libXm/osx/Xm/._ImageCachI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ImageCachI.h differ diff --git a/libXm/osx/Xm/._JoinSideT.h b/libXm/osx/Xm/._JoinSideT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._JoinSideT.h differ diff --git a/libXm/osx/Xm/._JpegI.h b/libXm/osx/Xm/._JpegI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._JpegI.h differ diff --git a/libXm/osx/Xm/._Label.h b/libXm/osx/Xm/._Label.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Label.h differ diff --git a/libXm/osx/Xm/._LabelG.h b/libXm/osx/Xm/._LabelG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._LabelG.h differ diff --git a/libXm/osx/Xm/._LabelGI.h b/libXm/osx/Xm/._LabelGI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._LabelGI.h differ diff --git a/libXm/osx/Xm/._LabelGP.h b/libXm/osx/Xm/._LabelGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._LabelGP.h differ diff --git a/libXm/osx/Xm/._LabelI.h b/libXm/osx/Xm/._LabelI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._LabelI.h differ diff --git a/libXm/osx/Xm/._LabelP.h b/libXm/osx/Xm/._LabelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._LabelP.h differ diff --git a/libXm/osx/Xm/._LayoutT.h b/libXm/osx/Xm/._LayoutT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._LayoutT.h differ diff --git a/libXm/osx/Xm/._List.h b/libXm/osx/Xm/._List.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._List.h differ diff --git a/libXm/osx/Xm/._ListP.h b/libXm/osx/Xm/._ListP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ListP.h differ diff --git a/libXm/osx/Xm/._MainW.h b/libXm/osx/Xm/._MainW.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MainW.h differ diff --git a/libXm/osx/Xm/._MainWP.h b/libXm/osx/Xm/._MainWP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MainWP.h differ diff --git a/libXm/osx/Xm/._Manager.h b/libXm/osx/Xm/._Manager.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Manager.h differ diff --git a/libXm/osx/Xm/._ManagerI.h b/libXm/osx/Xm/._ManagerI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ManagerI.h differ diff --git a/libXm/osx/Xm/._ManagerP.h b/libXm/osx/Xm/._ManagerP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ManagerP.h differ diff --git a/libXm/osx/Xm/._MapEventsI.h b/libXm/osx/Xm/._MapEventsI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MapEventsI.h differ diff --git a/libXm/osx/Xm/._MenuProcI.h b/libXm/osx/Xm/._MenuProcI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuProcI.h differ diff --git a/libXm/osx/Xm/._MenuProcP.h b/libXm/osx/Xm/._MenuProcP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuProcP.h differ diff --git a/libXm/osx/Xm/._MenuShell.h b/libXm/osx/Xm/._MenuShell.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuShell.h differ diff --git a/libXm/osx/Xm/._MenuShellI.h b/libXm/osx/Xm/._MenuShellI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuShellI.h differ diff --git a/libXm/osx/Xm/._MenuShellP.h b/libXm/osx/Xm/._MenuShellP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuShellP.h differ diff --git a/libXm/osx/Xm/._MenuStateI.h b/libXm/osx/Xm/._MenuStateI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuStateI.h differ diff --git a/libXm/osx/Xm/._MenuStateP.h b/libXm/osx/Xm/._MenuStateP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuStateP.h differ diff --git a/libXm/osx/Xm/._MenuT.h b/libXm/osx/Xm/._MenuT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuT.h differ diff --git a/libXm/osx/Xm/._MenuUtilI.h b/libXm/osx/Xm/._MenuUtilI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuUtilI.h differ diff --git a/libXm/osx/Xm/._MenuUtilP.h b/libXm/osx/Xm/._MenuUtilP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MenuUtilP.h differ diff --git a/libXm/osx/Xm/._MessageB.h b/libXm/osx/Xm/._MessageB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MessageB.h differ diff --git a/libXm/osx/Xm/._MessageBI.h b/libXm/osx/Xm/._MessageBI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MessageBI.h differ diff --git a/libXm/osx/Xm/._MessageBP.h b/libXm/osx/Xm/._MessageBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MessageBP.h differ diff --git a/libXm/osx/Xm/._MessagesI.h b/libXm/osx/Xm/._MessagesI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MessagesI.h differ diff --git a/libXm/osx/Xm/._MultiList.h b/libXm/osx/Xm/._MultiList.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MultiList.h differ diff --git a/libXm/osx/Xm/._MultiListP.h b/libXm/osx/Xm/._MultiListP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MultiListP.h differ diff --git a/libXm/osx/Xm/._MwmUtil.h b/libXm/osx/Xm/._MwmUtil.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._MwmUtil.h differ diff --git a/libXm/osx/Xm/._NavigatorT.h b/libXm/osx/Xm/._NavigatorT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._NavigatorT.h differ diff --git a/libXm/osx/Xm/._Notebook.h b/libXm/osx/Xm/._Notebook.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Notebook.h differ diff --git a/libXm/osx/Xm/._NotebookP.h b/libXm/osx/Xm/._NotebookP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._NotebookP.h differ diff --git a/libXm/osx/Xm/._Outline.h b/libXm/osx/Xm/._Outline.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Outline.h differ diff --git a/libXm/osx/Xm/._OutlineP.h b/libXm/osx/Xm/._OutlineP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._OutlineP.h differ diff --git a/libXm/osx/Xm/._Paned.h b/libXm/osx/Xm/._Paned.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Paned.h differ diff --git a/libXm/osx/Xm/._PanedP.h b/libXm/osx/Xm/._PanedP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PanedP.h differ diff --git a/libXm/osx/Xm/._PanedW.h b/libXm/osx/Xm/._PanedW.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PanedW.h differ diff --git a/libXm/osx/Xm/._PanedWP.h b/libXm/osx/Xm/._PanedWP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PanedWP.h differ diff --git a/libXm/osx/Xm/._Picture.h b/libXm/osx/Xm/._Picture.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Picture.h differ diff --git a/libXm/osx/Xm/._PictureP.h b/libXm/osx/Xm/._PictureP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PictureP.h differ diff --git a/libXm/osx/Xm/._PixConvI.h b/libXm/osx/Xm/._PixConvI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PixConvI.h differ diff --git a/libXm/osx/Xm/._PngI.h b/libXm/osx/Xm/._PngI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PngI.h differ diff --git a/libXm/osx/Xm/._PointInT.h b/libXm/osx/Xm/._PointInT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PointInT.h differ diff --git a/libXm/osx/Xm/._Primitive.h b/libXm/osx/Xm/._Primitive.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Primitive.h differ diff --git a/libXm/osx/Xm/._PrimitiveI.h b/libXm/osx/Xm/._PrimitiveI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PrimitiveI.h differ diff --git a/libXm/osx/Xm/._PrimitiveP.h b/libXm/osx/Xm/._PrimitiveP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PrimitiveP.h differ diff --git a/libXm/osx/Xm/._Print.h b/libXm/osx/Xm/._Print.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Print.h differ diff --git a/libXm/osx/Xm/._PrintSI.h b/libXm/osx/Xm/._PrintSI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PrintSI.h differ diff --git a/libXm/osx/Xm/._PrintSP.h b/libXm/osx/Xm/._PrintSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PrintSP.h differ diff --git a/libXm/osx/Xm/._Protocols.h b/libXm/osx/Xm/._Protocols.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Protocols.h differ diff --git a/libXm/osx/Xm/._ProtocolsI.h b/libXm/osx/Xm/._ProtocolsI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ProtocolsI.h differ diff --git a/libXm/osx/Xm/._ProtocolsP.h b/libXm/osx/Xm/._ProtocolsP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ProtocolsP.h differ diff --git a/libXm/osx/Xm/._PushB.h b/libXm/osx/Xm/._PushB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PushB.h differ diff --git a/libXm/osx/Xm/._PushBG.h b/libXm/osx/Xm/._PushBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PushBG.h differ diff --git a/libXm/osx/Xm/._PushBGP.h b/libXm/osx/Xm/._PushBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PushBGP.h differ diff --git a/libXm/osx/Xm/._PushBP.h b/libXm/osx/Xm/._PushBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._PushBP.h differ diff --git a/libXm/osx/Xm/._RCHookI.h b/libXm/osx/Xm/._RCHookI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RCHookI.h differ diff --git a/libXm/osx/Xm/._RCLayoutI.h b/libXm/osx/Xm/._RCLayoutI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RCLayoutI.h differ diff --git a/libXm/osx/Xm/._RCLayoutP.h b/libXm/osx/Xm/._RCLayoutP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RCLayoutP.h differ diff --git a/libXm/osx/Xm/._RCMenuI.h b/libXm/osx/Xm/._RCMenuI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RCMenuI.h differ diff --git a/libXm/osx/Xm/._ReadImageI.h b/libXm/osx/Xm/._ReadImageI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ReadImageI.h differ diff --git a/libXm/osx/Xm/._RegionI.h b/libXm/osx/Xm/._RegionI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RegionI.h differ diff --git a/libXm/osx/Xm/._RepType.h b/libXm/osx/Xm/._RepType.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RepType.h differ diff --git a/libXm/osx/Xm/._RepTypeI.h b/libXm/osx/Xm/._RepTypeI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RepTypeI.h differ diff --git a/libXm/osx/Xm/._ResConverI.h b/libXm/osx/Xm/._ResConverI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ResConverI.h differ diff --git a/libXm/osx/Xm/._ResEncodI.h b/libXm/osx/Xm/._ResEncodI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ResEncodI.h differ diff --git a/libXm/osx/Xm/._ResIndI.h b/libXm/osx/Xm/._ResIndI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ResIndI.h differ diff --git a/libXm/osx/Xm/._RowColumn.h b/libXm/osx/Xm/._RowColumn.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RowColumn.h differ diff --git a/libXm/osx/Xm/._RowColumnI.h b/libXm/osx/Xm/._RowColumnI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RowColumnI.h differ diff --git a/libXm/osx/Xm/._RowColumnP.h b/libXm/osx/Xm/._RowColumnP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._RowColumnP.h differ diff --git a/libXm/osx/Xm/._SSpinB.h b/libXm/osx/Xm/._SSpinB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SSpinB.h differ diff --git a/libXm/osx/Xm/._SSpinBP.h b/libXm/osx/Xm/._SSpinBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SSpinBP.h differ diff --git a/libXm/osx/Xm/._SashP.h b/libXm/osx/Xm/._SashP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SashP.h differ diff --git a/libXm/osx/Xm/._Scale.h b/libXm/osx/Xm/._Scale.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Scale.h differ diff --git a/libXm/osx/Xm/._ScaleP.h b/libXm/osx/Xm/._ScaleP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScaleP.h differ diff --git a/libXm/osx/Xm/._Screen.h b/libXm/osx/Xm/._Screen.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Screen.h differ diff --git a/libXm/osx/Xm/._ScreenI.h b/libXm/osx/Xm/._ScreenI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScreenI.h differ diff --git a/libXm/osx/Xm/._ScreenP.h b/libXm/osx/Xm/._ScreenP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScreenP.h differ diff --git a/libXm/osx/Xm/._ScrollBar.h b/libXm/osx/Xm/._ScrollBar.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrollBar.h differ diff --git a/libXm/osx/Xm/._ScrollBarP.h b/libXm/osx/Xm/._ScrollBarP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrollBarP.h differ diff --git a/libXm/osx/Xm/._ScrollFramTI.h b/libXm/osx/Xm/._ScrollFramTI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrollFramTI.h differ diff --git a/libXm/osx/Xm/._ScrollFrameT.h b/libXm/osx/Xm/._ScrollFrameT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrollFrameT.h differ diff --git a/libXm/osx/Xm/._ScrolledW.h b/libXm/osx/Xm/._ScrolledW.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrolledW.h differ diff --git a/libXm/osx/Xm/._ScrolledWI.h b/libXm/osx/Xm/._ScrolledWI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrolledWI.h differ diff --git a/libXm/osx/Xm/._ScrolledWP.h b/libXm/osx/Xm/._ScrolledWP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ScrolledWP.h differ diff --git a/libXm/osx/Xm/._SelectioB.h b/libXm/osx/Xm/._SelectioB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SelectioB.h differ diff --git a/libXm/osx/Xm/._SelectioBI.h b/libXm/osx/Xm/._SelectioBI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SelectioBI.h differ diff --git a/libXm/osx/Xm/._SelectioBP.h b/libXm/osx/Xm/._SelectioBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SelectioBP.h differ diff --git a/libXm/osx/Xm/._SeparatoG.h b/libXm/osx/Xm/._SeparatoG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SeparatoG.h differ diff --git a/libXm/osx/Xm/._SeparatoGI.h b/libXm/osx/Xm/._SeparatoGI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SeparatoGI.h differ diff --git a/libXm/osx/Xm/._SeparatoGP.h b/libXm/osx/Xm/._SeparatoGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SeparatoGP.h differ diff --git a/libXm/osx/Xm/._Separator.h b/libXm/osx/Xm/._Separator.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Separator.h differ diff --git a/libXm/osx/Xm/._SeparatorP.h b/libXm/osx/Xm/._SeparatorP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SeparatorP.h differ diff --git a/libXm/osx/Xm/._ShellEP.h b/libXm/osx/Xm/._ShellEP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ShellEP.h differ diff --git a/libXm/osx/Xm/._SlideC.h b/libXm/osx/Xm/._SlideC.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SlideC.h differ diff --git a/libXm/osx/Xm/._SlideCP.h b/libXm/osx/Xm/._SlideCP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SlideCP.h differ diff --git a/libXm/osx/Xm/._SpecRenderT.h b/libXm/osx/Xm/._SpecRenderT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SpecRenderT.h differ diff --git a/libXm/osx/Xm/._SpinB.h b/libXm/osx/Xm/._SpinB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SpinB.h differ diff --git a/libXm/osx/Xm/._SpinBP.h b/libXm/osx/Xm/._SpinBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SpinBP.h differ diff --git a/libXm/osx/Xm/._SyntheticI.h b/libXm/osx/Xm/._SyntheticI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._SyntheticI.h differ diff --git a/libXm/osx/Xm/._TabBox.h b/libXm/osx/Xm/._TabBox.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TabBox.h differ diff --git a/libXm/osx/Xm/._TabBoxP.h b/libXm/osx/Xm/._TabBoxP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TabBoxP.h differ diff --git a/libXm/osx/Xm/._TabList.h b/libXm/osx/Xm/._TabList.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TabList.h differ diff --git a/libXm/osx/Xm/._TabStack.h b/libXm/osx/Xm/._TabStack.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TabStack.h differ diff --git a/libXm/osx/Xm/._TabStackP.h b/libXm/osx/Xm/._TabStackP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TabStackP.h differ diff --git a/libXm/osx/Xm/._TakesDefT.h b/libXm/osx/Xm/._TakesDefT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TakesDefT.h differ diff --git a/libXm/osx/Xm/._TearOffBP.h b/libXm/osx/Xm/._TearOffBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TearOffBP.h differ diff --git a/libXm/osx/Xm/._TearOffI.h b/libXm/osx/Xm/._TearOffI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TearOffI.h differ diff --git a/libXm/osx/Xm/._TearOffP.h b/libXm/osx/Xm/._TearOffP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TearOffP.h differ diff --git a/libXm/osx/Xm/._Text.h b/libXm/osx/Xm/._Text.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Text.h differ diff --git a/libXm/osx/Xm/._TextDIconI.h b/libXm/osx/Xm/._TextDIconI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextDIconI.h differ diff --git a/libXm/osx/Xm/._TextF.h b/libXm/osx/Xm/._TextF.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextF.h differ diff --git a/libXm/osx/Xm/._TextFI.h b/libXm/osx/Xm/._TextFI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextFI.h differ diff --git a/libXm/osx/Xm/._TextFP.h b/libXm/osx/Xm/._TextFP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextFP.h differ diff --git a/libXm/osx/Xm/._TextFSelI.h b/libXm/osx/Xm/._TextFSelI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextFSelI.h differ diff --git a/libXm/osx/Xm/._TextI.h b/libXm/osx/Xm/._TextI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextI.h differ diff --git a/libXm/osx/Xm/._TextInI.h b/libXm/osx/Xm/._TextInI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextInI.h differ diff --git a/libXm/osx/Xm/._TextInP.h b/libXm/osx/Xm/._TextInP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextInP.h differ diff --git a/libXm/osx/Xm/._TextOutI.h b/libXm/osx/Xm/._TextOutI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextOutI.h differ diff --git a/libXm/osx/Xm/._TextOutP.h b/libXm/osx/Xm/._TextOutP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextOutP.h differ diff --git a/libXm/osx/Xm/._TextP.h b/libXm/osx/Xm/._TextP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextP.h differ diff --git a/libXm/osx/Xm/._TextSelI.h b/libXm/osx/Xm/._TextSelI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextSelI.h differ diff --git a/libXm/osx/Xm/._TextSelP.h b/libXm/osx/Xm/._TextSelP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextSelP.h differ diff --git a/libXm/osx/Xm/._TextStrSoI.h b/libXm/osx/Xm/._TextStrSoI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextStrSoI.h differ diff --git a/libXm/osx/Xm/._TextStrSoP.h b/libXm/osx/Xm/._TextStrSoP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TextStrSoP.h differ diff --git a/libXm/osx/Xm/._ToggleB.h b/libXm/osx/Xm/._ToggleB.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToggleB.h differ diff --git a/libXm/osx/Xm/._ToggleBG.h b/libXm/osx/Xm/._ToggleBG.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToggleBG.h differ diff --git a/libXm/osx/Xm/._ToggleBGI.h b/libXm/osx/Xm/._ToggleBGI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToggleBGI.h differ diff --git a/libXm/osx/Xm/._ToggleBGP.h b/libXm/osx/Xm/._ToggleBGP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToggleBGP.h differ diff --git a/libXm/osx/Xm/._ToggleBP.h b/libXm/osx/Xm/._ToggleBP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToggleBP.h differ diff --git a/libXm/osx/Xm/._ToolTipCT.h b/libXm/osx/Xm/._ToolTipCT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToolTipCT.h differ diff --git a/libXm/osx/Xm/._ToolTipI.h b/libXm/osx/Xm/._ToolTipI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToolTipI.h differ diff --git a/libXm/osx/Xm/._ToolTipT.h b/libXm/osx/Xm/._ToolTipT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._ToolTipT.h differ diff --git a/libXm/osx/Xm/._TraitI.h b/libXm/osx/Xm/._TraitI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TraitI.h differ diff --git a/libXm/osx/Xm/._TraitP.h b/libXm/osx/Xm/._TraitP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TraitP.h differ diff --git a/libXm/osx/Xm/._Transfer.h b/libXm/osx/Xm/._Transfer.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Transfer.h differ diff --git a/libXm/osx/Xm/._TransferI.h b/libXm/osx/Xm/._TransferI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TransferI.h differ diff --git a/libXm/osx/Xm/._TransferP.h b/libXm/osx/Xm/._TransferP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TransferP.h differ diff --git a/libXm/osx/Xm/._TransferT.h b/libXm/osx/Xm/._TransferT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TransferT.h differ diff --git a/libXm/osx/Xm/._TransltnsP.h b/libXm/osx/Xm/._TransltnsP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TransltnsP.h differ diff --git a/libXm/osx/Xm/._TravActI.h b/libXm/osx/Xm/._TravActI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TravActI.h differ diff --git a/libXm/osx/Xm/._TravConT.h b/libXm/osx/Xm/._TravConT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TravConT.h differ diff --git a/libXm/osx/Xm/._TraversalI.h b/libXm/osx/Xm/._TraversalI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TraversalI.h differ diff --git a/libXm/osx/Xm/._Tree.h b/libXm/osx/Xm/._Tree.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Tree.h differ diff --git a/libXm/osx/Xm/._TreeP.h b/libXm/osx/Xm/._TreeP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TreeP.h differ diff --git a/libXm/osx/Xm/._TxtPropCv.h b/libXm/osx/Xm/._TxtPropCv.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._TxtPropCv.h differ diff --git a/libXm/osx/Xm/._UnhighlightT.h b/libXm/osx/Xm/._UnhighlightT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._UnhighlightT.h differ diff --git a/libXm/osx/Xm/._UniqueEvnI.h b/libXm/osx/Xm/._UniqueEvnI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._UniqueEvnI.h differ diff --git a/libXm/osx/Xm/._UnitTypeT.h b/libXm/osx/Xm/._UnitTypeT.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._UnitTypeT.h differ diff --git a/libXm/osx/Xm/._VaSimpleI.h b/libXm/osx/Xm/._VaSimpleI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VaSimpleI.h differ diff --git a/libXm/osx/Xm/._VaSimpleP.h b/libXm/osx/Xm/._VaSimpleP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VaSimpleP.h differ diff --git a/libXm/osx/Xm/._VendorS.h b/libXm/osx/Xm/._VendorS.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VendorS.h differ diff --git a/libXm/osx/Xm/._VendorSEI.h b/libXm/osx/Xm/._VendorSEI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VendorSEI.h differ diff --git a/libXm/osx/Xm/._VendorSEP.h b/libXm/osx/Xm/._VendorSEP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VendorSEP.h differ diff --git a/libXm/osx/Xm/._VendorSI.h b/libXm/osx/Xm/._VendorSI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VendorSI.h differ diff --git a/libXm/osx/Xm/._VendorSP.h b/libXm/osx/Xm/._VendorSP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VendorSP.h differ diff --git a/libXm/osx/Xm/._VirtKeys.h b/libXm/osx/Xm/._VirtKeys.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VirtKeys.h differ diff --git a/libXm/osx/Xm/._VirtKeysI.h b/libXm/osx/Xm/._VirtKeysI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VirtKeysI.h differ diff --git a/libXm/osx/Xm/._VirtKeysP.h b/libXm/osx/Xm/._VirtKeysP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._VirtKeysP.h differ diff --git a/libXm/osx/Xm/._Xm.h b/libXm/osx/Xm/._Xm.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Xm.h differ diff --git a/libXm/osx/Xm/._XmI.h b/libXm/osx/Xm/._XmI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmI.h differ diff --git a/libXm/osx/Xm/._XmIm.h b/libXm/osx/Xm/._XmIm.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmIm.h differ diff --git a/libXm/osx/Xm/._XmImI.h b/libXm/osx/Xm/._XmImI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmImI.h differ diff --git a/libXm/osx/Xm/._XmMsgI.h b/libXm/osx/Xm/._XmMsgI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmMsgI.h differ diff --git a/libXm/osx/Xm/._XmP.h b/libXm/osx/Xm/._XmP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmP.h differ diff --git a/libXm/osx/Xm/._XmRenderTI.h b/libXm/osx/Xm/._XmRenderTI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmRenderTI.h differ diff --git a/libXm/osx/Xm/._XmStrDefs.h b/libXm/osx/Xm/._XmStrDefs.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmStrDefs.h differ diff --git a/libXm/osx/Xm/._XmStrDefs22.h b/libXm/osx/Xm/._XmStrDefs22.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmStrDefs22.h differ diff --git a/libXm/osx/Xm/._XmStrDefs23.h b/libXm/osx/Xm/._XmStrDefs23.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmStrDefs23.h differ diff --git a/libXm/osx/Xm/._XmStrDefsI.h b/libXm/osx/Xm/._XmStrDefsI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmStrDefsI.h differ diff --git a/libXm/osx/Xm/._XmStringI.h b/libXm/osx/Xm/._XmStringI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmStringI.h differ diff --git a/libXm/osx/Xm/._XmTabListI.h b/libXm/osx/Xm/._XmTabListI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmTabListI.h differ diff --git a/libXm/osx/Xm/._Xmfuncs.h b/libXm/osx/Xm/._Xmfuncs.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._Xmfuncs.h differ diff --git a/libXm/osx/Xm/._XmosI.h b/libXm/osx/Xm/._XmosI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmosI.h differ diff --git a/libXm/osx/Xm/._XmosP.h b/libXm/osx/Xm/._XmosP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XmosP.h differ diff --git a/libXm/osx/Xm/._XpmI.h b/libXm/osx/Xm/._XpmI.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XpmI.h differ diff --git a/libXm/osx/Xm/._XpmP.h b/libXm/osx/Xm/._XpmP.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._XpmP.h differ diff --git a/libXm/osx/Xm/._xmlist.h b/libXm/osx/Xm/._xmlist.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libXm/osx/Xm/._xmlist.h differ diff --git a/libXm/osx/Xm/AccColorT.h b/libXm/osx/Xm/AccColorT.h new file mode 100644 index 0000000..58c86e6 --- /dev/null +++ b/libXm/osx/Xm/AccColorT.h @@ -0,0 +1,100 @@ +/* $XConsortium: AccColorT.h /main/5 1995/07/15 20:47:59 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmAccessColorsT_H +#define _XmAccessColorsT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTaccessColors; + +/* this one can be expanded in the future */ +typedef struct _XmAccessColorDataRec { + Mask valueMask ; + Pixel foreground ; + Pixel background ; + Pixel highlight_color ; + Pixel top_shadow_color ; + Pixel bottom_shadow_color ; + Pixel select_color ; +} XmAccessColorDataRec, *XmAccessColorData; + +typedef void (*XmAccessColorsGetProc)(Widget widget, + XmAccessColorData color_data); +typedef void (*XmAccessColorsSetProc)(Widget widget, + XmAccessColorData color_data); + +/* Trait structures and typedefs, place typedefs first */ + +/* Version 0: initial release. */ + +typedef struct _XmAccessColorsTraitRec { + int version; /* 0 */ + XmAccessColorsGetProc getColors; + XmAccessColorsGetProc setColors; +} XmAccessColorsTraitRec, *XmAccessColorsTrait; + +#define AccessColorInvalid 0L +#define AccessForeground (1L<<0) +#define AccessBackgroundPixel (1L<<1) +#define AccessHighlightColor (1L<<2) +#define AccessTopShadowColor (1L<<3) +#define AccessBottomShadowColor (1L<<4) +#define AccessSelectColor (1L<<5) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +/* to do: + + add it to PushB/G and ToggleB/G so that they can report their + select color + implement the setValues ? + +*/ + +#endif /* _XmAccessColorsT_H */ diff --git a/libXm/osx/Xm/AccTextT.h b/libXm/osx/Xm/AccTextT.h new file mode 100644 index 0000000..4b63e85 --- /dev/null +++ b/libXm/osx/Xm/AccTextT.h @@ -0,0 +1,72 @@ +/* $XConsortium: AccTextT.h /main/5 1995/07/15 20:48:04 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmAccessTextualT_H +#define _XmAccessTextualT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTaccessTextual; + +typedef XtPointer (*XmAccessTextualGetValuesProc)(Widget, int); +typedef int (*XmAccessTextualPreferredProc)(Widget); +typedef void (*XmAccessTextualSetValuesProc)(Widget, XtPointer, int); + +enum { XmFORMAT_XmSTRING, XmFORMAT_MBYTE, XmFORMAT_WCS }; + +/* Trait structures and typedefs, place typedefs first */ + +/* Version 0: initial release. */ + +typedef struct _XmAccessTextualTraitRec { + int version; /* 0 */ + XmAccessTextualGetValuesProc getValue; + XmAccessTextualSetValuesProc setValue; + XmAccessTextualPreferredProc preferredFormat; +} XmAccessTextualTraitRec, *XmAccessTextualTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmAccessTextualT_H */ diff --git a/libXm/osx/Xm/ActivatableT.h b/libXm/osx/Xm/ActivatableT.h new file mode 100644 index 0000000..2466213 --- /dev/null +++ b/libXm/osx/Xm/ActivatableT.h @@ -0,0 +1,70 @@ +/* $XConsortium: ActivatableT.h /main/5 1995/07/15 20:48:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmActivatableT_H +#define _XmActivatableT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTactivatable; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmActivatableCallBackProc)(Widget w, + XtCallbackProc activCB, + XtPointer closure, + Boolean setunset); + +/* Version 0: initial release. */ + +typedef struct _XmActivatableTraitRec { + int version; /* 0 */ + XmActivatableCallBackProc changeCB; +} XmActivatableTraitRec, *XmActivatableTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmActivatableT_H */ diff --git a/libXm/osx/Xm/ArrowB.h b/libXm/osx/Xm/ArrowB.h new file mode 100644 index 0000000..80f42f4 --- /dev/null +++ b/libXm/osx/Xm/ArrowB.h @@ -0,0 +1,80 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowB.h /main/12 1995/07/14 10:08:56 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowButton_h +#define _XmArrowButton_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsArrowButton +#define XmIsArrowButton(w) XtIsSubclass(w, xmArrowButtonWidgetClass) +#endif /* XmIsArrowButton */ + +externalref WidgetClass xmArrowButtonWidgetClass; + +typedef struct _XmArrowButtonClassRec * XmArrowButtonWidgetClass; +typedef struct _XmArrowButtonRec * XmArrowButtonWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateArrowButton( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +extern Widget XmVaCreateManagedArrowButton( Widget parent, char *name, ...); +extern Widget XmVaCreateArrowButton( Widget parent, char *name, ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowButton_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ArrowBG.h b/libXm/osx/Xm/ArrowBG.h new file mode 100644 index 0000000..d933812 --- /dev/null +++ b/libXm/osx/Xm/ArrowBG.h @@ -0,0 +1,80 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowBG.h /main/12 1995/07/14 10:09:33 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowButtonGadget_h +#define _XmArrowButtonGadget_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsArrowButtonGadget +#define XmIsArrowButtonGadget(w) XtIsSubclass(w, xmArrowButtonGadgetClass) +#endif /* XmIsArrowButtonGadget */ + +externalref WidgetClass xmArrowButtonGadgetClass; + +typedef struct _XmArrowButtonGadgetClassRec * XmArrowButtonGadgetClass; +typedef struct _XmArrowButtonGadgetRec * XmArrowButtonGadget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateArrowButtonGadget( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +extern Widget XmVaCreateManagedArrowButtonGadget( Widget parent, char *name, ...); +extern Widget XmVaCreateArrowButtonGadget( Widget parent, char *name, ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowButtonGadget_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ArrowBGP.h b/libXm/osx/Xm/ArrowBGP.h new file mode 100644 index 0000000..52fac6c --- /dev/null +++ b/libXm/osx/Xm/ArrowBGP.h @@ -0,0 +1,169 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowBGP.h /main/13 1995/07/14 10:09:51 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowGadgetP_h +#define _XmArrowGadgetP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Arrow class structure */ + +typedef struct _XmArrowButtonGadgetClassPart +{ + XtPointer extension; +} XmArrowButtonGadgetClassPart; + + +/* Full class record declaration for Arrow class */ + +typedef struct _XmArrowButtonGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmArrowButtonGadgetClassPart arrow_button_class; +} XmArrowButtonGadgetClassRec; + +externalref XmArrowButtonGadgetClassRec xmArrowButtonGadgetClassRec; + +/* The Arrow instance record */ + +typedef struct _XmArrowButtonGadgetPart +{ + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + unsigned char direction; /* The direction the arrow is pointing. */ + + Boolean selected; + + short top_count; + short cent_count; + short bot_count; + XRectangle *top; + XRectangle *cent; + XRectangle *bot; + + Position old_x; + Position old_y; + + GC arrow_GC; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + GC insensitive_GC; + + + GC background_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + GC highlight_GC; + + Pixel foreground; + Pixel background; + + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Pixel highlight_color; + Pixmap highlight_pixmap; + + Boolean fill_bg_box; + Dimension detail_shadow_thickness ; +} XmArrowButtonGadgetPart; + + +/* Full instance record declaration */ + +typedef struct _XmArrowButtonGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmArrowButtonGadgetPart arrowbutton; +} XmArrowButtonGadgetRec; + + + +#define ArrowBG_BackgroundGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. background_GC) +#define ArrowBG_TopShadowGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. top_shadow_GC) +#define ArrowBG_BottomShadowGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. bottom_shadow_GC) +#define ArrowBG_HighlightGC(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. highlight_GC) +#define ArrowBG_Foreground(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. foreground) +#define ArrowBG_Background(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. background) +#define ArrowBG_TopShadowColor(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. top_shadow_color) +#define ArrowBG_TopShadowPixmap(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. top_shadow_pixmap) +#define ArrowBG_BottomShadowColor(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. bottom_shadow_color) +#define ArrowBG_BottomShadowPixmap(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. bottom_shadow_pixmap) +#define ArrowBG_HighlightColor(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. highlight_color) +#define ArrowBG_HighlightPixmap(w) (((XmArrowButtonGadget)(w)) -> \ + arrowbutton. highlight_pixmap) + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowGadgetP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ArrowBP.h b/libXm/osx/Xm/ArrowBP.h new file mode 100644 index 0000000..52ac02d --- /dev/null +++ b/libXm/osx/Xm/ArrowBP.h @@ -0,0 +1,120 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ArrowBP.h /main/13 1995/07/14 10:10:05 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmArrowButtonP_h +#define _XmArrowButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Arrow class structure */ + +typedef struct _XmArrowButtonClassPart +{ + XtPointer extension; +} XmArrowButtonClassPart; + + +/* Full class record declaration for Arrow class */ + +typedef struct _XmArrowButtonClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmArrowButtonClassPart arrowbutton_class; +} XmArrowButtonClassRec; + +externalref XmArrowButtonClassRec xmArrowButtonClassRec; + + +/* The ArrowButton instance record */ + +typedef struct _XmArrowButtonPart +{ + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + unsigned char direction; /* The direction the arrow is pointing. */ + + Boolean selected; + short top_count; + short cent_count; + short bot_count; + XRectangle *top; + XRectangle *cent; + XRectangle *bot; + + GC arrow_GC; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + Time armTimeStamp; + GC insensitive_GC; + Dimension detail_shadow_thickness ; +} XmArrowButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmArrowButtonRec +{ + CorePart core; + XmPrimitivePart primitive; + XmArrowButtonPart arrowbutton; +} XmArrowButtonRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmArrowButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/AtomMgr.h b/libXm/osx/Xm/AtomMgr.h new file mode 100644 index 0000000..0c30feb --- /dev/null +++ b/libXm/osx/Xm/AtomMgr.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: AtomMgr.h /main/12 1997/09/10 11:15:15 mgreess $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmAtomMgr_h +#define _XmAtomMgr_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* X11r5' XInternAtom equivalent */ +extern Atom XmInternAtom( + Display *display, + String name, +#if NeedWidePrototypes + int only_if_exists ); +#else + Boolean only_if_exists ); +#endif /* NeedWidePrototypes */ + +/* X11r5's XGetAtomName equivalent */ +extern String XmGetAtomName( Display *display, Atom atom); + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +/* This macro name is confusing, and of unknown benefit. + * #define XmNameToAtom(display, atom) \ + * XmGetAtomName(display, atom) + */ + +#endif /* _XmAtomMgr_h */ diff --git a/libXm/osx/Xm/BaseClassI.h b/libXm/osx/Xm/BaseClassI.h new file mode 100644 index 0000000..75bde40 --- /dev/null +++ b/libXm/osx/Xm/BaseClassI.h @@ -0,0 +1,97 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: BaseClassI.h /main/6 1995/07/14 10:10:58 drk $ */ +#ifndef _XmBaseClassI_h +#define _XmBaseClassI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmPushWidgetExtData( + Widget widget, + XmWidgetExtData data, +#if NeedWidePrototypes + unsigned int extType) ; +#else + unsigned char extType) ; +#endif /* NeedWidePrototypes */ +extern void _XmPopWidgetExtData( + Widget widget, + XmWidgetExtData *dataRtn, +#if NeedWidePrototypes + unsigned int extType) ; +#else + unsigned char extType) ; +#endif /* NeedWidePrototypes */ +extern XmWidgetExtData _XmGetWidgetExtData( + Widget widget, +#if NeedWidePrototypes + unsigned int extType) ; +#else + unsigned char extType) ; +#endif /* NeedWidePrototypes */ +extern void _XmInitializeExtensions( void ) ; +extern void _XmTransformSubResources( + XtResourceList comp_resources, + Cardinal num_comp_resources, + XtResourceList *resources, + Cardinal *num_resources) ; + +extern Cardinal _XmSecondaryResourceData( + XmBaseClassExt bcePtr, + XmSecondaryResourceData **secResDataRtn, + XtPointer client_data, + String name, + String class_name, + XmResourceBaseProc basefunctionpointer) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBaseClassI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/BaseClassP.h b/libXm/osx/Xm/BaseClassP.h new file mode 100644 index 0000000..3e010f3 --- /dev/null +++ b/libXm/osx/Xm/BaseClassP.h @@ -0,0 +1,200 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BaseClassP.h /main/11 1995/10/25 19:53:53 cde-sun $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmBaseClassP_h +#define _XmBaseClassP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define _XmBCEPTR(wc) ((XmBaseClassExt *)(&(((WidgetClass)(wc))\ + ->core_class.extension))) +#define _XmBCE(wc) ((XmBaseClassExt)(((WidgetClass)(wc))\ + ->core_class.extension)) + +#define _XmGetBaseClassExtPtr(wc, owner) \ + ((_XmBCE(wc) && (((_XmBCE(wc))->record_type) == owner)) ? \ + _XmBCEPTR(wc) : \ + ((XmBaseClassExt *) _XmGetClassExtensionPtr( \ + ((XmGenericClassExt *) \ + _XmBCEPTR( wc)), \ + owner))) + +/* defines for 256 bit (at least) bit field + */ +#define _XmGetFlagsBit(field, bit) \ + (field[ (bit >> 3) ]) & (1 << (bit & 0x07)) + +#define _XmSetFlagsBit(field, bit) \ + (field[ (bit >> 3) ] |= (1 << (bit & 0x07))) + + +#ifndef XTHREADS +#define _XmFastSubclassInit(wc, bit_field) { \ + if((_Xm_fastPtr = _XmGetBaseClassExtPtr( wc, XmQmotif)) && \ + (*_Xm_fastPtr)) \ + _XmSetFlagsBit((*_Xm_fastPtr)->flags, bit_field) ; \ + } + +/* _XmGetBaseClassExtPtr can return NULL or a pointer to a NULL extension, + * for non Motif classes in particular, so we check that up front. + * We use the global _Xm_fastPtr for that purpose, this variable exists + * already in BaseClass.c for apparently no other use. + */ + +#define _XmIsFastSubclass(wc, bit) \ + ((_Xm_fastPtr = _XmGetBaseClassExtPtr((wc),XmQmotif)) && \ + (*_Xm_fastPtr)) ? \ + (_XmGetFlagsBit(((*_Xm_fastPtr)->flags), bit) ? TRUE : FALSE) \ + : FALSE + +#else +extern void _XmFastSubclassInit(WidgetClass, unsigned int); +extern Boolean _XmIsFastSubclass(WidgetClass, unsigned int); +#endif /* XTHREADS */ + +#define XmBaseClassExtVersion 2L +#define XmBaseClassExtVersion 2L + + +typedef Cardinal (*XmGetSecResDataFunc)( WidgetClass, + XmSecondaryResourceData **); + +typedef struct _XmObjectClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; +} XmObjectClassExtRec, *XmObjectClassExt; + +typedef struct _XmGenericClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; +} XmGenericClassExtRec, *XmGenericClassExt; + +typedef struct _XmWrapperDataRec{ + struct _XmWrapperDataRec *next; + WidgetClass widgetClass; + XtInitProc initializeLeaf; + XtSetValuesFunc setValuesLeaf; + XtArgsProc getValuesLeaf; + XtRealizeProc realize; + XtWidgetClassProc classPartInitLeaf; + XtWidgetProc resize; + XtGeometryHandler geometry_manager; + + /* init_depth is obselete now .. */ + Cardinal init_depth; + + int initializeLeafCount; + int setValuesLeafCount; + int getValuesLeafCount; + XtInitProc constraintInitializeLeaf; + XtSetValuesFunc constraintSetValuesLeaf; + int constraintInitializeLeafCount; + int constraintSetValuesLeafCount; +} XmWrapperDataRec, *XmWrapperData; + +typedef struct _XmBaseClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XtInitProc initializePrehook; + XtSetValuesFunc setValuesPrehook; + XtInitProc initializePosthook; + XtSetValuesFunc setValuesPosthook; + WidgetClass secondaryObjectClass; + XtInitProc secondaryObjectCreate; + XmGetSecResDataFunc getSecResData; + unsigned char flags[32]; + XtArgsProc getValuesPrehook; + XtArgsProc getValuesPosthook; + XtWidgetClassProc classPartInitPrehook; + XtWidgetClassProc classPartInitPosthook; + XtResourceList ext_resources; + XtResourceList compiled_ext_resources; + Cardinal num_ext_resources; + Boolean use_sub_resources; + XmWidgetNavigableProc widgetNavigable; + XmFocusChangeProc focusChange; + XmWrapperData wrapperData; +} XmBaseClassExtRec, *XmBaseClassExt; + + +typedef struct _XmWidgetExtDataRec{ + Widget widget; + Widget reqWidget; + Widget oldWidget; +} XmWidgetExtDataRec, *XmWidgetExtData; + +externalref XrmQuark XmQmotif; +externalref int _XmInheritClass; +externalref XmBaseClassExt * _Xm_fastPtr; + +/******** Private Function Declarations ********/ + + +extern XmGenericClassExt * _XmGetClassExtensionPtr( + XmGenericClassExt *listHeadPtr, + XrmQuark owner) ; +extern Boolean _XmIsSubclassOf(WidgetClass wc, WidgetClass sc); + + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBaseClassP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/BitmapsI.h b/libXm/osx/Xm/BitmapsI.h new file mode 100644 index 0000000..e7623ec --- /dev/null +++ b/libXm/osx/Xm/BitmapsI.h @@ -0,0 +1,184 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BitmapsI.h /main/7 1996/12/16 18:29:58 drk $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +/*************************************<+>************************************* + ***************************************************************************** + ** + ** File: BitmapsI.h + ** + ** Description: This file contains a set of predefines bitmaps + ** which are used by the image caching functions. + ** + **************************************************************************** + ************************************<+>*************************************/ + +#ifndef _XmBitmapsI_h +#define _XmBitmapsI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static XmConst unsigned char bitmaps [20][32] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Solid Background */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + + { 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, /* 25 percent */ + 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, + 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, + 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22 }, + + { 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, /* 50 percent */ + 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, + 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, + 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA }, + + { 0x55, 0x55, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, /* 75 percent */ + 0x55, 0x55, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, + 0x55, 0x55, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF, + 0x55, 0x55, 0xFF, 0xFF, 0xAA, 0xAA, 0xFF, 0xFF }, + + { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, /* Vertical tile */ + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }, + + { 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* Horizontal tile */ + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00 }, + + { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, /* Vertical */ + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }, + + { 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* Horizontal */ + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00 }, + + { 0x77, 0x77, 0xbb, 0xbb, 0xdd, 0xdd, 0xee, 0xee, /* Slant Left */ + 0x77, 0x77, 0xbb, 0xbb, 0xdd, 0xdd, 0xee, 0xee, + 0x77, 0x77, 0xbb, 0xbb, 0xdd, 0xdd, 0xee, 0xee, + 0x77, 0x77, 0xbb, 0xbb, 0xdd, 0xdd, 0xee, 0xee }, + + { 0xee, 0xee, 0xdd, 0xdd, 0xbb, 0xbb, 0x77, 0x77, /* Slant Right */ + 0xee, 0xee, 0xdd, 0xdd, 0xbb, 0xbb, 0x77, 0x77, + 0xee, 0xee, 0xdd, 0xdd, 0xbb, 0xbb, 0x77, 0x77, + 0xee, 0xee, 0xdd, 0xdd, 0xbb, 0xbb, 0x77, 0x77 }, + + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Default Cascade */ + 0x00, 0x03, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x18, + 0xff, 0x3f, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x06, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Default RtoL Cascade*/ + 0xc0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, + 0xfc, 0xff, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Default CheckMark */ + 0x00, 0x00, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, + 0x00, 0x0c, 0x08, 0x06, 0x18, 0x03, 0xb0, 0x01, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Default menu dash */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x3c, 0x00, /* collapsed */ + 0xfc, 0x00, 0xfc, 0x03, 0xfc, 0x0f, 0xfc, 0x3f, + 0xfc, 0x3f, 0xfc, 0x0f, 0xfc, 0x03, 0xfc, 0x00, + 0x3c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x3c, /* collapsed_rtol */ + 0x00, 0x3f, 0xc0, 0x3f, 0xf0, 0x3f, 0xfc, 0x3f, + 0xfc, 0x3f, 0xf0, 0x3f, 0xc0, 0x3f, 0x00, 0x3f, + 0x00, 0x3c, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00 }, + { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0xfc, 0x3f, /* expanded */ + 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0x0f, 0xf0, 0x0f, + 0xe0, 0x07, 0xe0, 0x07, 0xc0, 0x03, 0xc0, 0x03, + 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00 } +}; + + +static XmConst char *XmConst bitmap_name_set[] = +{ + "background", + "25_foreground", + XmS50_foreground, + "75_foreground", + "vertical_tile", + "horizontal_tile", + /* for bc reason with 1.2.2, we have to put back the old names, + but we also need to keep the new ones, for 1.2.3 users */ + "vertical", + "horizontal", + "slant_right", + "slant_left", + "menu_cascade", + "menu_cascade_rtol", + "menu_checkmark", + "menu_dash", + "collapsed", + "collapsed_rtol", + "expanded", +}; + +#define MAX_BUILTIN_IMAGES 17 + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBitmapsI_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/BulletinB.h b/libXm/osx/Xm/BulletinB.h new file mode 100644 index 0000000..0ed87d7 --- /dev/null +++ b/libXm/osx/Xm/BulletinB.h @@ -0,0 +1,101 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BulletinB.h /main/12 1995/07/14 10:11:57 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmBulletinBoard_h +#define _XmBulletinBoard_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmBulletinBoardWidgetClass; + +typedef struct _XmBulletinBoardClassRec * XmBulletinBoardWidgetClass; +typedef struct _XmBulletinBoardRec * XmBulletinBoardWidget; + + +#ifndef XmIsBulletinBoard +#define XmIsBulletinBoard(w) (XtIsSubclass (w, xmBulletinBoardWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateBulletinBoard( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmCreateBulletinBoardDialog( + Widget ds_p, + String name, + ArgList bb_args, + Cardinal bb_n) ; + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateBulletinBoard( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedBulletinBoard( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBulletinBoard_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/BulletinBI.h b/libXm/osx/Xm/BulletinBI.h new file mode 100644 index 0000000..fdf6c8a --- /dev/null +++ b/libXm/osx/Xm/BulletinBI.h @@ -0,0 +1,107 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: BulletinBI.h /main/7 1996/06/14 23:09:13 pascale $ */ +#ifndef _XmBulletinBI_h +#define _XmBulletinBI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + XmOkStringLoc, + XmCancelStringLoc, + XmSelectionStringLoc, + XmApplyStringLoc, + XmHelpStringLoc, + XmFilterStringLoc, + XmDirListStringLoc, + XmItemsStringLoc, + XmDirTextStringLoc, + XmPromptStringLoc +} XmLabelStringLoc; + +/******** Private Function Declarations ********/ + +extern Widget _XmBB_CreateButtonG( + Widget bb, + XmString l_string, + char *name, + XmLabelStringLoc l_loc) ; +extern Widget _XmBB_CreateLabelG( + Widget bb, + XmString l_string, + char *name, + XmLabelStringLoc l_loc) ; +extern void _XmBulletinBoardSizeUpdate( + Widget wid) ; +extern void _XmBulletinBoardFocusMoved( + Widget wid, + XtPointer client_data, + XtPointer data) ; +extern void _XmBulletinBoardReturn( + Widget wid, + XEvent *event, + String *params, + Cardinal *numParams) ; +extern void _XmBulletinBoardCancel( + Widget wid, + XEvent *event, + String *params, + Cardinal *numParams) ; +extern void _XmBulletinBoardMap( + Widget wid, + XEvent *event, + String *params, + Cardinal *numParams) ; +extern void _XmBulletinBoardSetDynDefaultButton( + Widget wid, + Widget newDefaultButton) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBulletinBI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/BulletinBP.h b/libXm/osx/Xm/BulletinBP.h new file mode 100644 index 0000000..ee4ca3e --- /dev/null +++ b/libXm/osx/Xm/BulletinBP.h @@ -0,0 +1,192 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: BulletinBP.h /main/13 1995/09/19 22:59:44 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmBulletinBoardP_h +#define _XmBulletinBoardP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/**************************************************************************** + * this suffix is added to dialog shells created by Xm convenience routines * + * so that, for example, a call to create a form dialog named f generates a * + * dialog shell named f_popup in addition to a form named f * + ****************************************************************************/ + +#define XmDIALOG_SUFFIX "_popup" +#define XmDIALOG_SUFFIX_SIZE 6 + + + +typedef struct _XmBulletinBoardConstraintPart +{ + char unused; +} XmBulletinBoardConstraintPart, * XmBulletinBoardConstraint; + + +/* New fields for the BulletinBoard widget class record */ + +typedef struct +{ + Boolean always_install_accelerators; + XmGeoCreateProc geo_matrix_create; + XmFocusMovedProc focus_moved_proc; + XtPointer extension; +} XmBulletinBoardClassPart; + + +/* Full class record declaration */ + +typedef struct _XmBulletinBoardClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; +} XmBulletinBoardClassRec; + +externalref XmBulletinBoardClassRec xmBulletinBoardClassRec; + + +/* New fields for the BulletinBoard widget record */ + +typedef struct +{ + Dimension margin_width; /* margins */ + Dimension margin_height; + + Widget default_button; /* widgets */ + Widget dynamic_default_button; /* widgets */ + Widget cancel_button; + Widget dynamic_cancel_button; + + XtCallbackList focus_callback; /* callback lists */ + XtCallbackList map_callback; + XtCallbackList unmap_callback; + + XtTranslations text_translations; + + XmFontList button_font_list; /* font lists */ + XmFontList label_font_list; + XmFontList text_font_list; + + Boolean allow_overlap; /* policies */ + Boolean default_position; + Boolean auto_unmanage; + unsigned char resize_policy; + + Dimension old_width; /* shadow resources */ + Dimension old_height; + Dimension old_shadow_thickness; + unsigned char shadow_type; + + Boolean in_set_values; /* internal flag */ + Boolean initial_focus; + + Boolean no_resize; /* dialog resources */ + unsigned char dialog_style; + XmString dialog_title; + Widget shell; + Widget _UNUSED; + + XmGeoMatrix geo_cache; /* Cache for geometry management. */ + + unsigned char check_set; /* For XmNfontList & XmNRenderTable */ +} XmBulletinBoardPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmBulletinBoardRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; +} XmBulletinBoardRec; + + +/* Access macros */ +#define BB_CancelButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.cancel_button) +#define BB_DynamicCancelButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.dynamic_cancel_button) +#define BB_DefaultButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.default_button) +#define BB_DynamicDefaultButton(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.dynamic_default_button) +#define BB_MarginHeight(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.margin_height) +#define BB_MarginWidth(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.margin_width) +#define BB_ButtonFontList(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.button_font_list) +#define BB_LabelFontList(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.label_font_list) +#define BB_TextFontList(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.text_font_list) +#define BB_StringDirection(w) (XmDirectionToStringDirection\ + (((XmBulletinBoardWidget) w)->manager.string_direction)) +#define BB_ResizePolicy(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.resize_policy) +#define BB_InSetValues(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.in_set_values) +#define BB_InitialFocus(w) \ + (((XmBulletinBoardWidget) w)->bulletin_board.initial_focus) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmBulletinBoardP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ButtonBox.h b/libXm/osx/Xm/ButtonBox.h new file mode 100644 index 0000000..1af12b6 --- /dev/null +++ b/libXm/osx/Xm/ButtonBox.h @@ -0,0 +1,97 @@ +/* + * Copyright 1991, 1992 - Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Scott Knowlton + * + * Resources: + * + * --------------------------------------------------------------------------- + * Name Class Type InitialValue + * --------------------------------------------------------------------------- + * + * equalSize EqualSize Boolean False + * fillOption FillOption XmFillOption XmFillNone + * marginHeight Margin Dimension 0 + * marginWidth Margin Dimension 0 + * orientation Orientation unsigned char XmHORIZONTAL + * + * --------------------------------------------------------------------------- + * + */ +#ifndef _XmButtonBox_h +#define _XmButtonBox_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmButtonBoxClassRec *XmButtonBoxWidgetClass; +typedef struct _XmButtonBoxRec *XmButtonBoxWidget; + + +/************************************************************ + * MACROS + ************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +/* Function Name: XmCreateButtonBox + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateButtonBox( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateButtonBox( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedButtonBox( + Widget parent, + char *name, + ...); + +extern WidgetClass xmButtonBoxWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmButtonBox_h */ diff --git a/libXm/osx/Xm/ButtonBoxP.h b/libXm/osx/Xm/ButtonBoxP.h new file mode 100644 index 0000000..c0334c7 --- /dev/null +++ b/libXm/osx/Xm/ButtonBoxP.h @@ -0,0 +1,123 @@ +/* + * Copyright 1991, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Scott Knowlton + * + */ + +#ifndef XmButtonBoxP_h +#define XmButtonBoxP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +#include +#include + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +/************************************************************ + * MACROS + ************************************************************/ + +#define XmButtonBoxIndex (XmManagerIndex + 1) + +#define XmButtonBox_equal_size(w) (((XmButtonBoxWidget)(w))->button_box.equal_size) +#define XmButtonBox_fill_option(w) (((XmButtonBoxWidget)(w))->button_box.fill_option) +#define XmButtonBox_margin_width(w) (((XmButtonBoxWidget)(w))->button_box.margin_width) +#define XmButtonBox_margin_height(w) (((XmButtonBoxWidget)(w))->button_box.margin_height) +#define XmButtonBox_spacing(w) (((XmButtonBoxWidget)(w))->button_box.spacing) +#define XmButtonBox_orientation(w) (((XmButtonBoxWidget)(w))->button_box.orientation) +#define XmButtonBox_default_button(w) (((XmButtonBoxWidget)(w))->button_box.default_button) + +#define XmButtonBoxC_pref_width(w) (((XmBBoxConstraints)((Widget)(w))->core.constraints)->bbox.pref_width) +#define XmButtonBoxC_pref_height(w) (((XmBBoxConstraints)((Widget)(w))->core.constraints)->bbox.pref_height) + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmButtonBoxClassPart +{ + XtPointer extension; /* In case its needed later */ +} XmButtonBoxClassPart; + +typedef struct _XmButtonBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmButtonBoxClassPart buttonbox_class; + +} XmButtonBoxClassRec; + +typedef struct _XmBBoxConstraintsPart { + Dimension pref_width, pref_height; +} XmBBoxConstraintsPart; + +typedef struct _XmBBoxConstraintsRec { + XmManagerConstraintPart manager; + XmBBoxConstraintsPart bbox; +} XmBBoxConstraintsRec, *XmBBoxConstraints; + +/* + * Match XmOffset nomenclature + */ +typedef XmBBoxConstraintsPart XmButtonBoxConstraintPart; + +typedef struct +{ + /* resources */ + + Boolean equal_size; + XmFillOption fill_option; + Dimension margin_width, margin_height; + Dimension spacing; + unsigned char orientation; + Widget default_button; + +} XmButtonBoxPart; + +typedef struct _XmButtonBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmButtonBoxPart button_box; + +} XmButtonBoxRec; + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +extern XmButtonBoxClassRec xmButtonBoxClassRec; + +/************************************************************ + * STATIC DECLARATIONS + ************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmButtonBoxP_h */ diff --git a/libXm/osx/Xm/CacheI.h b/libXm/osx/Xm/CacheI.h new file mode 100644 index 0000000..3e2f039 --- /dev/null +++ b/libXm/osx/Xm/CacheI.h @@ -0,0 +1,72 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: CacheI.h /main/6 1995/07/14 10:12:39 drk $ */ +#ifndef _XmCacheI_h +#define _XmCacheI_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmCacheDelete( + XtPointer data) ; +extern void _XmCacheCopy( + XtPointer src, + XtPointer dest, + size_t size) ; +extern XtPointer _XmCachePart( + XmCacheClassPartPtr cp, + XtPointer cpart, + size_t size) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCacheI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CacheP.h b/libXm/osx/Xm/CacheP.h new file mode 100644 index 0000000..15efc9a --- /dev/null +++ b/libXm/osx/Xm/CacheP.h @@ -0,0 +1,67 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CacheP.h /main/11 1995/07/14 10:12:51 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCacheP_h +#define _XmCacheP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* A few convenience macros */ + +#define ClassCacheHead(cp) ((cp)->cache_head) +#define ClassCacheCopy(cp) ((cp)->cache_copy) +#define ClassCacheCompare(cp) ((cp)->cache_compare) +#define CacheDataPtr(p) ((XtPointer)&((XmGadgetCacheRef*)p)->data) +#define DataToGadgetCache(p) ((char*)p - XtOffsetOf(XmGadgetCacheRef,data)) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCacheP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CallbackI.h b/libXm/osx/Xm/CallbackI.h new file mode 100644 index 0000000..ebfeedd --- /dev/null +++ b/libXm/osx/Xm/CallbackI.h @@ -0,0 +1,90 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* $XConsortium: CallbackI.h /main/8 1995/07/14 10:13:23 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmCallbackI_h +#define _XmCallbackI_h + +#include "XmI.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define _XtCBCalling 1 +#define _XtCBFreeAfterCalling 2 + +/* The internal callback list is a little header followed by an array of + * XtCallbackRec structs. Declaring the first element of the array with + * the header allows the compiler to take care of any alignment required. + */ +typedef struct internalCallbackRec { + unsigned short count; + char is_padded; /* contains NULL padding for external form */ + char call_state; /* combination of _XtCB{FreeAfter}Calling */ + XtCallbackRec callbacks; /* first XtCallback record declared here */ +} InternalCallbackRec, *InternalCallbackList; + + +/******** Private Function Declarations ********/ + +extern void _XmAddCallback(InternalCallbackList *callbacks, + XtCallbackProc callback, + XtPointer closure); +extern void _XmRemoveCallback(InternalCallbackList *callbacks, + XtCallbackProc callback, + XtPointer closure); +extern void _XmCallCallbackList(Widget widget, + XtCallbackList callbacks, + XtPointer call_data); +extern void _XmRemoveAllCallbacks(InternalCallbackList *callbacks); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCallbackI_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CareVisualT.h b/libXm/osx/Xm/CareVisualT.h new file mode 100644 index 0000000..2d90503 --- /dev/null +++ b/libXm/osx/Xm/CareVisualT.h @@ -0,0 +1,83 @@ +/* $XConsortium: CareVisualT.h /main/5 1995/07/15 20:48:21 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmCareVisualT_H +#define _XmCareVisualT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTcareParentVisual; + +/* Trait structures and typedefs, place typedefs first */ + +typedef Boolean (*XmCareVisualRedrawProc)(Widget kid, + Widget cur_parent, + Widget new_parent, + Mask visual_flag); + +/* Version 0: initial release. */ + +typedef struct _XmCareVisualTraitRec { + int version; /* 0 */ + XmCareVisualRedrawProc redraw; +} XmCareVisualTraitRec, *XmCareVisualTrait; + + +#define NoVisualChange 0L +#define VisualForeground (1L<<0) +#define VisualHighlightPixmap (1L<<1) +#define VisualHighlightColor (1L<<2) +#define VisualBottomShadowPixmap (1L<<3) +#define VisualBottomShadowColor (1L<<4) +#define VisualTopShadowPixmap (1L<<5) +#define VisualTopShadowColor (1L<<6) +#define VisualBackgroundPixel (1L<<7) +#define VisualBackgroundPixmap (1L<<8) +#define VisualSelectColor (1L<<9) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCareVisualT_H */ diff --git a/libXm/osx/Xm/CareVisualTI.h b/libXm/osx/Xm/CareVisualTI.h new file mode 100644 index 0000000..223a523 --- /dev/null +++ b/libXm/osx/Xm/CareVisualTI.h @@ -0,0 +1,63 @@ +/* $XConsortium: CareVisualTI.h /main/5 1995/07/15 20:48:25 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmCareVisualTI_h +#define _XmCareVisualTI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern Boolean _XmNotifyChildrenVisual( + Widget cur, + Widget new_w, + Mask visual_flag) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCareVisualTI_h */ diff --git a/libXm/osx/Xm/CascadeB.h b/libXm/osx/Xm/CascadeB.h new file mode 100644 index 0000000..5ab513a --- /dev/null +++ b/libXm/osx/Xm/CascadeB.h @@ -0,0 +1,99 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeB.h /main/12 1995/07/14 10:13:57 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeB_h +#define _XmCascadeB_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmCascadeButtonWidgetClass; + +typedef struct _XmCascadeButtonRec * XmCascadeButtonWidget; +typedef struct _XmCascadeButtonClassRec * XmCascadeButtonWidgetClass; + +/* fast subclass define */ +#ifndef XmIsCascadeButton +#define XmIsCascadeButton(w) XtIsSubclass(w, xmCascadeButtonWidgetClass) +#endif /* XmIsCascadeButton */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateCascadeButton( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern void XmCascadeButtonHighlight( + Widget cb, +#if NeedWidePrototypes + int highlight) ; +#else + Boolean highlight) ; +#endif /* NeedWidePrototypes */ + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateCascadeButton( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedCascadeButton( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeB_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CascadeBG.h b/libXm/osx/Xm/CascadeBG.h new file mode 100644 index 0000000..797ba0c --- /dev/null +++ b/libXm/osx/Xm/CascadeBG.h @@ -0,0 +1,100 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeBG.h /main/12 1995/07/14 10:14:28 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeBG_h +#define _XmCascadeBG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmCascadeButtonGadgetClass; + +typedef struct _XmCascadeButtonGadgetClassRec * XmCascadeButtonGadgetClass; +typedef struct _XmCascadeButtonGadgetRec * XmCascadeButtonGadget; +typedef struct _XmCascadeButtonGCacheObjRec * XmCascadeButtonGCacheObject; + +/*fast subclass define */ +#ifndef XmIsCascadeButtonGadget +#define XmIsCascadeButtonGadget(w) XtIsSubclass(w, xmCascadeButtonGadgetClass) +#endif /* XmIsCascadeButtonGadget */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateCascadeButtonGadget( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern void XmCascadeButtonGadgetHighlight( + Widget wid, +#if NeedWidePrototypes + int highlight) ; +#else + Boolean highlight) ; +#endif /* NeedWidePrototypes */ + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateCascadeButtonGadget( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedCascadeButtonGadget( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CascadeBGI.h b/libXm/osx/Xm/CascadeBGI.h new file mode 100644 index 0000000..da53f61 --- /dev/null +++ b/libXm/osx/Xm/CascadeBGI.h @@ -0,0 +1,68 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: CascadeBGI.h /main/6 1995/07/14 10:14:47 drk $ */ +#ifndef _XmCascadeBGI_h +#define _XmCascadeBGI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern int _XmArrowPixmapCacheCompare( + XtPointer A, + XtPointer B) ; +extern void _XmArrowPixmapCacheDelete( + XtPointer data) ; +extern void _XmCreateArrowPixmaps( + Widget wid) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBGI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CascadeBGP.h b/libXm/osx/Xm/CascadeBGP.h new file mode 100644 index 0000000..f0f702d --- /dev/null +++ b/libXm/osx/Xm/CascadeBGP.h @@ -0,0 +1,245 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeBGP.h /main/13 1996/03/25 14:52:33 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeBGP_h +#define _XmCascadeBGP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************************************************* + * The Arrow Cache record for the menu cascade button + *********************************************************************/ +typedef struct _XmArrowPixmap +{ + Dimension height, width; + unsigned int depth; + unsigned char direction; + Pixel top_shadow_color; + Pixel bottom_shadow_color; + Pixel foreground_color; + Display *display; + Screen *screen; + Pixmap pixmap; +} XmArrowPixmap; + + +/*********************************************************************/ +/* The CascadeButton Gadget Cache Object's class and instance records*/ +/*********************************************************************/ + + +typedef struct _XmCascadeButtonGCacheObjClassPart +{ + int foo; +} XmCascadeButtonGCacheObjClassPart; + + +typedef struct _XmCascadeButtonGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; + XmCascadeButtonGCacheObjClassPart cascade_button_class_cache; +} XmCascadeButtonGCacheObjClassRec; + +externalref XmCascadeButtonGCacheObjClassRec xmCascadeButtonGCacheObjClassRec; + + +typedef struct _XmCascadeButtonGCacheObjPart +{ + Pixmap cascade_pixmap; /* pixmap for the cascade */ + int map_delay; /* time delay for posting */ + Pixmap armed_pixmap; + GC arm_gc; + GC background_gc; +} XmCascadeButtonGCacheObjPart; + +typedef struct _XmCascadeButtonGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; + XmCascadeButtonGCacheObjPart cascade_button_cache; +} XmCascadeButtonGCacheObjRec; + +/* The CascadeButtonGadget instance record */ + +typedef struct _XmCascadeButtonGadgetPart +{ /* resources */ + Widget submenu; /* the menu to pull down */ + XtCallbackList activate_callback; /* widget fired callback */ + XtCallbackList cascade_callback; /* optional callback, called */ + /* when the menu is about */ + /* to be pulled down */ + /* internal fields */ + Boolean armed; /* armed flag */ + XRectangle cascade_rect; /* location of cascade*/ + XtIntervalId timer; /* timeout id */ + XmCascadeButtonGCacheObjPart *cache; +} XmCascadeButtonGadgetPart; + + +/* Full instance record declaration */ + +typedef struct _XmCascadeButtonGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; + XmCascadeButtonGadgetPart cascade_button; +} XmCascadeButtonGadgetRec; + + +/* CascadeButton class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmCascadeButtonGadgetClassPart; + + +/* Full class record declaration for CascadeButton class */ + +typedef struct _XmCascadeButtonGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; + XmCascadeButtonGadgetClassPart cascade_button_class; +} XmCascadeButtonGadgetClassRec; + + +externalref XmCascadeButtonGadgetClassRec xmCascadeButtonGadgetClassRec; + + +/* Access macro definitions for UNcached fields*/ + +#define CBG_Submenu(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.submenu) +#define CBG_ActivateCall(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.activate_callback) +#define CBG_CascadeCall(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_callback) +#define CBG_Armed(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.armed) +#define CBG_CascadeRect(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect) +#define CBG_Timer(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.timer) +#define CBG_Cascade_x(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.x) +#define CBG_Cascade_y(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.y) +#define CBG_Cascade_width(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.width) +#define CBG_Cascade_height(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cascade_rect.height) +#define CBG_HasCascade(cb) (((LabG_MenuType(cb) == XmMENU_PULLDOWN) || \ + (LabG_MenuType(cb) == XmMENU_POPUP) || \ + (LabG_MenuType(cb) == XmMENU_OPTION)) && \ + (CBG_Submenu(cb))) + +#define XmCBG_ARMED_BIT (1 << 0) +#define XmCBG_TRAVERSE_BIT (1 << 1) +#define XmCBG_WAS_POSTED_BIT (1 << 2) + +#define CBG_IsArmed(cb) (((XmCascadeButtonGadget)(cb))->cascade_button.armed \ + & XmCBG_ARMED_BIT) + +#define CBG_Traversing(cb) (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed & XmCBG_TRAVERSE_BIT) + +#define CBG_WasPosted(cb) (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed & XmCBG_WAS_POSTED_BIT) + +#define CBG_SetBit(byte,bit,v) byte = (byte & (~bit)) | (v ? bit : 0) + +#define CBG_SetArmed(cb,v) CBG_SetBit (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed, \ + XmCBG_ARMED_BIT, v) + +#define CBG_SetTraverse(cb,v) CBG_SetBit (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed, \ + XmCBG_TRAVERSE_BIT, v) + +#define CBG_SetWasPosted(cb,v) CBG_SetBit (((XmCascadeButtonGadget) \ + (cb))->cascade_button.armed, \ + XmCBG_WAS_POSTED_BIT, v) + + + +/* Access macro definitions for Cached fields*/ + +#define CBG_CascadePixmap(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->cascade_pixmap) +#define CBG_MapDelay(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->map_delay) +#define CBG_ArmedPixmap(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->armed_pixmap) +#define CBG_ArmGC(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->arm_gc) +#define CBG_BackgroundGC(cb) (((XmCascadeButtonGadget) \ + cb)->cascade_button.cache->background_gc) + + +/******************************/ +/* Convenience Macros */ +/******************************/ + + +#define CBG_Cache(w) (((XmCascadeButtonGadget)(w))->\ + cascade_button.cache) +#define CBG_ClassCachePart(w) \ + (((XmCascadeButtonGadgetClass)xmCascadeButtonGadgetClass)->gadget_class.cache_part) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBGP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CascadeBI.h b/libXm/osx/Xm/CascadeBI.h new file mode 100644 index 0000000..ddebf2c --- /dev/null +++ b/libXm/osx/Xm/CascadeBI.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: CascadeBI.h /main/6 1995/07/14 10:15:09 drk $ */ +#ifndef _XmCascadeBI_h +#define _XmCascadeBI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmCBHelp( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmCascadingPopup( + Widget cb, + XEvent *event, +#if NeedWidePrototypes + int doCascade) ; +#else + Boolean doCascade) ; +#endif /* NeedWidePrototypes */ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CascadeBP.h b/libXm/osx/Xm/CascadeBP.h new file mode 100644 index 0000000..94ff6dc --- /dev/null +++ b/libXm/osx/Xm/CascadeBP.h @@ -0,0 +1,187 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CascadeBP.h /main/12 1996/03/25 14:52:42 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCascadeBP_h +#define _XmCascadeBP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The CascadeButton instance record */ + +typedef struct +{ /* resources */ + XtCallbackList activate_callback; /* widget fired callback */ + XtCallbackList cascade_callback; /* called when the menu is */ + /* about to be pulled down */ + + Widget submenu; /* the menu to pull down */ + Pixmap cascade_pixmap; /* pixmap for the cascade */ + int map_delay; /* time delay for posting */ + + /* internal fields */ + + GC arm_GC; /* armed GC */ + GC background_GC; /* normal GC */ + Boolean armed; /* armed flag */ + XRectangle cascade_rect; /* location of cascade*/ + XtIntervalId timer; /* timeout id */ + Pixmap armed_pixmap; /* arm arrow cascade */ + +} XmCascadeButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmCascadeButtonRec +{ + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmCascadeButtonPart cascade_button; +} XmCascadeButtonRec; + +typedef struct _XmCascadeButtonWidgetRec/* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmCascadeButtonPart cascade_button; +} XmCascadeButtonWidgetRec; + + +/* CascadeButton class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmCascadeButtonClassPart; + + +/* Full class record declaration for CascadeButton class */ + +typedef struct _XmCascadeButtonClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmCascadeButtonClassPart cascade_button_class; +} XmCascadeButtonClassRec; + + +externalref XmCascadeButtonClassRec xmCascadeButtonClassRec; + + +/* Access macro definitions */ + +#define CB_Submenu(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.submenu) + +#define CB_ActivateCall(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.activate_callback) +#define CB_CascadeCall(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_callback) + + +#define CB_CascadePixmap(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_pixmap) +#define CB_ArmedPixmap(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.armed_pixmap) + +#define CB_ArmGC(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.arm_GC) +#define CB_BackgroundGC(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.background_GC) + +#define CB_Cascade_x(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.x) +#define CB_Cascade_y(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.y) +#define CB_Cascade_width(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.width) +#define CB_Cascade_height(cb) (((XmCascadeButtonWidget) \ + cb)->cascade_button.cascade_rect.height) + +#define CB_HasCascade(cb) (((Lab_MenuType(cb) == XmMENU_PULLDOWN) || \ + (Lab_MenuType(cb) == XmMENU_POPUP)) && \ + (CB_Submenu(cb))) + + +#define XmCB_ARMED_BIT (1 << 0) +#define XmCB_TRAVERSE_BIT (1 << 1) +#define XmCB_WAS_POSTED_BIT (1 << 2) + + +#define CB_IsArmed(cb) (((XmCascadeButtonWidget)(cb))->cascade_button.armed \ + & XmCB_ARMED_BIT) + +#define CB_Traversing(cb) (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed & XmCB_TRAVERSE_BIT) + +#define CB_WasPosted(cb) (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed & XmCB_WAS_POSTED_BIT) + +#define CB_SetBit(byte,bit,v) byte = (byte & (~bit)) | (v ? bit : 0) + +#define CB_SetArmed(cb,v) CB_SetBit (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed, \ + XmCB_ARMED_BIT, v) + +#define CB_SetTraverse(cb,v) CB_SetBit (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed, \ + XmCB_TRAVERSE_BIT, v) + +#define CB_SetWasPosted(cb,v) CB_SetBit (((XmCascadeButtonWidget) \ + (cb))->cascade_button.armed, \ + XmCB_WAS_POSTED_BIT, v) + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCascadeBP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ClipWindTI.h b/libXm/osx/Xm/ClipWindTI.h new file mode 100644 index 0000000..08864d0 --- /dev/null +++ b/libXm/osx/Xm/ClipWindTI.h @@ -0,0 +1,68 @@ +/* $XConsortium: ClipWindTI.h /main/1 1996/10/10 11:36:14 cde-osf $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* + * (c) Copyright 1989, 1990, 1991, 1992, 1993 OPEN SOFTWARE FOUNDATION, INC. + * ALL RIGHTS RESERVED + */ + +#ifndef _XmClipWindowTI_H +#define _XmClipWindowTI_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark _XmQTclipWindow; + +/* Version 0: initial release. */ + +typedef struct _XmClipWindowTraitRec { + int version; /* 0 */ +} XmClipWindowTraitRec, *XmClipWindowTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmClipWindowTI_H */ + diff --git a/libXm/osx/Xm/ClipWindowP.h b/libXm/osx/Xm/ClipWindowP.h new file mode 100644 index 0000000..14b1358 --- /dev/null +++ b/libXm/osx/Xm/ClipWindowP.h @@ -0,0 +1,118 @@ +/* $XConsortium: ClipWindowP.h /main/5 1995/07/15 20:48:39 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmClipWindowP_h +#define _XmClipWindowP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmClipWindowWidgetClass; + +typedef struct _XmClipWindowClassRec * XmClipWindowWidgetClass; +typedef struct _XmClipWindowRec * XmClipWindowWidget; + + +#ifndef XmIsClipWindow +#define XmIsClipWindow(w) (XtIsSubclass (w, xmClipWindowWidgetClass)) +#endif + + +/* New fields for the ClipWindow widget class record */ + +typedef struct +{ + XtPointer extension; +} XmClipWindowClassPart; + + +/* Full class record declaration */ + +typedef struct _XmClipWindowClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmDrawingAreaClassPart drawing_area_class; + XmClipWindowClassPart clip_window_class; +} XmClipWindowClassRec; + +externalref XmClipWindowClassRec xmClipWindowClassRec; + + +/* New fields for the ClipWindow widget record */ + +typedef struct +{ + unsigned char flags; + Dimension old_width ; +} XmClipWindowPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmClipWindowRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmDrawingAreaPart drawing_area; + XmClipWindowPart clip_window; +} XmClipWindowRec; + + +/******** Private Function Declarations ********/ +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmClipWindowP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ColorI.h b/libXm/osx/Xm/ColorI.h new file mode 100644 index 0000000..cf75eeb --- /dev/null +++ b/libXm/osx/Xm/ColorI.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ColorI.h /main/6 1995/07/14 10:15:47 drk $ */ +#ifndef _XmColorI_h +#define _XmColorI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for Color.c ********/ + +extern void _XmForegroundColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmHighlightColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmBackgroundColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmTopShadowColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmBottomShadowColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmSelectColorDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern Boolean _XmSearchColorCache( + unsigned int which, + XmColorData *values, + XmColorData **ret) ; +extern XmColorData * _XmAddToColorCache( + XmColorData *new_rec) ; +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmColorI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ColorObjI.h b/libXm/osx/Xm/ColorObjI.h new file mode 100644 index 0000000..b55b3d2 --- /dev/null +++ b/libXm/osx/Xm/ColorObjI.h @@ -0,0 +1,72 @@ +/* $XConsortium: ColorObjI.h /main/6 1995/07/15 20:49:00 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmColorObjI_h +#define _XmColorObjI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* defines for palette.c */ +#define VALUE_THRESHOLD 225 + +externalref XmColorObj _XmDefaultColorObj; +externalref XContext _XmColorObjCache; +externalref Display *_XmColorObjCacheDisplay; + +/******** Private Function Declarations ********/ + +extern void _XmColorObjCreate( + Widget w, + ArgList al, + Cardinal *acPtr) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmColorObjI_h */ + diff --git a/libXm/osx/Xm/ColorObjP.h b/libXm/osx/Xm/ColorObjP.h new file mode 100644 index 0000000..1e1e1ff --- /dev/null +++ b/libXm/osx/Xm/ColorObjP.h @@ -0,0 +1,189 @@ +/* $XConsortium: ColorObjP.h /main/10 1996/12/16 18:30:49 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmColorObjP_h +#define _XmColorObjP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** misc structures, defines, and functions for using ColorObj **/ + +#define XmCO_MAX_NUM_COLORS 8 +#define XmCO_NUM_COLORS XmCO_MAX_NUM_COLORS +#define XmPIXEL_SET_PROP_VERSION '1' + +/* Constants for color usage */ +enum { XmCO_BLACK_WHITE, XmCO_LOW_COLOR, XmCO_MEDIUM_COLOR, XmCO_HIGH_COLOR }; + +typedef struct { + Pixel fg; + Pixel bg; + Pixel ts; + Pixel bs; + Pixel sc; +} XmPixelSet; + +typedef XmPixelSet Colors[XmCO_NUM_COLORS]; + +typedef struct _XmColorObjPart { + XtArgsProc RowColInitHook; + XmPixelSet *myColors; /* colors for my (application) screen */ + int myScreen; + Display *display; /* display connection for "pseudo-app" */ + Colors *colors; /* colors per screen for workspace mgr */ + int numScreens; /* for workspace manager */ + Atom *atoms; /* to identify colorsrv screen numbers */ + Boolean colorIsRunning; /* used for any color problem */ + Boolean done; + int *colorUse; + int primary; + int secondary; + int text; /* color set id for text widgets */ + int active; + int inactive; + Boolean useColorObj; /* read only resource variable */ + Boolean useText; /* use text color set id for text? */ + Boolean useTextForList; /* use text color set id for lists? */ + + Boolean useMask; + Boolean useMultiColorIcons; + Boolean useIconFileCache; + +} XmColorObjPart; + + +typedef struct _XmColorObjRec { + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + XmColorObjPart color_obj; +} XmColorObjRec; + +typedef struct _XmColorObjClassPart { + XtPointer extension; +} XmColorObjClassPart; + +/* + * we make it a appShell subclass so it can have it's own instance + * hierarchy + */ +typedef struct _XmColorObjClassRec{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + XmColorObjClassPart color_obj_class; +} XmColorObjClassRec; + + +externalref XmColorObjClassRec xmColorObjClassRec; + + +#ifndef XmIsColorObj +#define XmIsColorObj(w) (XtIsSubclass(w, xmColorObjClass)) +#endif /* XmIsXmDisplay */ + +externalref WidgetClass xmColorObjClass; +typedef struct _XmColorObjClassRec *XmColorObjClass; +typedef struct _XmColorObjRec *XmColorObj; + + +#define XmCO_DitherTopShadow(display, screen, pixelSet) \ + ((pixelSet)->bs == BlackPixel((display), (screen))) + +#define XmCO_DitherBottomShadow(display, screen, pixelSet) \ + ((pixelSet)->ts == WhitePixel((display), (screen))) + +#define XmCO_DITHER XmS50_foreground +#define XmCO_NO_DITHER XmSunspecified_pixmap + + +/******** Private Function Declarations ********/ + +extern Boolean XmeGetIconControlInfo( + Screen *screen, + Boolean *useMaskRtn, + Boolean *useMultiColorIconsRtn, + Boolean *useIconFileCacheRtn) ; + +extern Boolean XmeUseColorObj( void ) ; + + +extern Boolean XmeGetColorObjData( + Screen * screen, + int *colorUse, + XmPixelSet *pixelSet, + unsigned short num_pixelSet, + short *active_id, + short *inactive_id, + short *primary_id, + short *secondary_id, + short *text_id) ; + +extern Boolean XmeGetDesktopColorCells ( + Screen * screen, + Colormap colormap, + XColor * colors, + int n_colors, + int * ncolors_returns) ; + +extern Boolean XmeGetPixelData ( + int screen_number, + int *colorUse, + XmPixelSet *pixelSet, + short *a, + short *i, + short *p, + short *s) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmColorObjP_h */ + diff --git a/libXm/osx/Xm/ColorP.h b/libXm/osx/Xm/ColorP.h new file mode 100644 index 0000000..56c083f --- /dev/null +++ b/libXm/osx/Xm/ColorP.h @@ -0,0 +1,141 @@ +/* $XConsortium: ColorP.h /main/4 1995/07/15 20:49:10 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmColorP_h +#define _XmColorP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Default Color Allocation proc */ + +#define DEFAULT_ALLOCCOLOR_PROC (XAllocColor) + +/* Defines and functions for processing dynamic defaults */ + +#define XmMAX_SHORT 65535 + +#define XmCOLOR_PERCENTILE (XmMAX_SHORT / 100) +#define BoundColor(value)\ + ((value < 0) ? 0 : (((value > XmMAX_SHORT) ? XmMAX_SHORT : value))) + +/* Contributions of each primary to overall luminosity, sum to 1.0 */ + +#define XmRED_LUMINOSITY 0.30 +#define XmGREEN_LUMINOSITY 0.59 +#define XmBLUE_LUMINOSITY 0.11 + +/* Percent effect of intensity, light, and luminosity & on brightness, + sum to 100 */ + +#define XmINTENSITY_FACTOR 75 +#define XmLIGHT_FACTOR 0 +#define XmLUMINOSITY_FACTOR 25 + +/* LITE color model + percent to interpolate RGB towards black for SEL, BS, TS */ + +#define XmCOLOR_LITE_SEL_FACTOR 15 +#define XmCOLOR_LITE_BS_FACTOR 40 +#define XmCOLOR_LITE_TS_FACTOR 20 + +/* DARK color model + percent to interpolate RGB towards white for SEL, BS, TS */ + +#define XmCOLOR_DARK_SEL_FACTOR 15 +#define XmCOLOR_DARK_BS_FACTOR 30 +#define XmCOLOR_DARK_TS_FACTOR 50 + +/* STD color model + percent to interpolate RGB towards black for SEL, BS + percent to interpolate RGB towards white for TS + HI values used for high brightness (within STD) + LO values used for low brightness (within STD) + Interpolate factors between HI & LO values based on brightness */ + +#define XmCOLOR_HI_SEL_FACTOR 15 +#define XmCOLOR_HI_BS_FACTOR 40 +#define XmCOLOR_HI_TS_FACTOR 60 + +#define XmCOLOR_LO_SEL_FACTOR 15 +#define XmCOLOR_LO_BS_FACTOR 60 +#define XmCOLOR_LO_TS_FACTOR 50 + + +/* For the default color calculation and caching */ + +#define XmLOOK_AT_SCREEN (1<<0) +#define XmLOOK_AT_CMAP (1<<1) +#define XmLOOK_AT_BACKGROUND (1<<2) +#define XmLOOK_AT_FOREGROUND (1<<3) +#define XmLOOK_AT_TOP_SHADOW (1<<4) +#define XmLOOK_AT_BOTTOM_SHADOW (1<<5) +#define XmLOOK_AT_SELECT (1<<6) + +#define XmBACKGROUND ((unsigned char) (1<<0)) +#define XmFOREGROUND ((unsigned char) (1<<1)) +#define XmTOP_SHADOW ((unsigned char) (1<<2)) +#define XmBOTTOM_SHADOW ((unsigned char) (1<<3)) +#define XmSELECT ((unsigned char) (1<<4)) +#define XmHIGHLIGHT ((unsigned char) (1<<5)) + +/* Structure used to hold color schemes */ +typedef struct _XmColorData +{ Screen * screen; + Colormap color_map; + unsigned char allocated; + XColor background; + XColor foreground; + XColor top_shadow; + XColor bottom_shadow; + XColor select; +} XmColorData; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + +#endif /* _ColorP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ColorS.h b/libXm/osx/Xm/ColorS.h new file mode 100644 index 0000000..84feaa0 --- /dev/null +++ b/libXm/osx/Xm/ColorS.h @@ -0,0 +1,64 @@ +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Mark F. Antonelli, Chris D. Peterson + * + */ + +#ifndef _XmColorSelector_h +#define _XmColorSelector_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmColorSelectorClassRec *XmColorSelectorWidgetClass; +typedef struct _XmColorSelectorRec *XmColorSelectorWidget; + + +/* Function Name: XmCreateColorSelector + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateColorSelector( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateColorSelector( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedColorSelector( + Widget parent, + char *name, + ...); + +extern WidgetClass xmColorSelectorWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmColorSelect_h DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ColorSP.h b/libXm/osx/Xm/ColorSP.h new file mode 100644 index 0000000..e6b6909 --- /dev/null +++ b/libXm/osx/Xm/ColorSP.h @@ -0,0 +1,161 @@ +/* + * Copyright 1990 - 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Mark F. Antonelli, Chris D. Peterson + * + */ + +#ifndef _XmColorSelectorP_h +#define _XmColorSelectorP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + *************************************************************/ + +#include +#include + +/************************************************************ + * TYPEDEFS AND DEFINES + *************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmColorSelector_COLOR_NAME_SIZE 100 +#define XmColorSelector_NUM_TOGGLES 2 + +typedef struct _ColorSelStrings { + XmString slider_labels[3]; + + XmString tog_labels[XmColorSelector_NUM_TOGGLES]; + XmString no_cell_error, file_read_error; +} ColorSelStrings; + +typedef struct _ColorInfo { + char name[XmColorSelector_COLOR_NAME_SIZE], no_space_lower_name[XmColorSelector_COLOR_NAME_SIZE]; + unsigned short red, green, blue; +} ColorInfo; + +typedef struct _ColorSelectorClassPart { + XtPointer extension; +} ColorSelectorClassPart; + +typedef struct _XmColorSelectorClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + ColorSelectorClassPart color_selector_class; +} XmColorSelectorClassRec; + +typedef struct _XmColorSelectorPart +{ + /* resources */ + + XmColorMode color_mode; /* selector mode */ + char *color_name; /* the colorname we select */ + String rgb_file; /* where to look for */ + Dimension margin_width; /* for geom management */ + Dimension margin_height; /* for geom management */ + + ColorSelStrings strings; /* strings for I18N. */ + + /* private state */ + + int slider_red; /* slider values */ + int slider_green; /* slider values */ + int slider_blue; /* slider values */ + Widget bb; /* area to hold all the sliders */ + Widget sliders[3]; /* red,green,blue sliders(slider) */ + Widget scrolled_list; /* list (scrolled window) */ + Widget list; /* list (simple) */ + Widget color_window; /* label to show selected color */ + Widget chose_radio; /* selector type radio box */ + Widget chose_mode[2]; /* selector type toggles */ + + Pixel color_pixel; /* pixel value for colors */ + Boolean good_cell; /* does color_pixel contain + * a good value? */ + ColorInfo *colors; /* infomation about all color names */ + short num_colors; /* The number of colors. */ +} XmColorSelectorPart; + +typedef struct _XmColorSelectorRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmColorSelectorPart cs; +} XmColorSelectorRec; + +typedef struct _XmColorSelectorConstraintPart +{ + XtPointer extension; +} XmColorSelectorConstraintPart; + +typedef struct _XmColorSelectorConstraintRec +{ + XmManagerConstraintPart manager; + XmColorSelectorConstraintPart cs; +} XmColorSelectorConstraintRec; + +/************************************************************ + * MACROS + *************************************************************/ + +#define XmColorSelectorIndex (XmManagerIndex + 1) + +#define XmColorS_color_mode(w) (((XmColorSelectorWidget)(w))->cs.color_mode) +#define XmColorS_color_name(w) (((XmColorSelectorWidget)(w))->cs.color_name) +#define XmColorS_rgb_file(w) (((XmColorSelectorWidget)(w))->cs.rgb_file) +#define XmColorS_margin_width(w) (((XmColorSelectorWidget)(w))->cs.margin_width) +#define XmColorS_margin_height(w) (((XmColorSelectorWidget)(w))->cs.margin_height) +#define XmColorS_strings(w) (((XmColorSelectorWidget)(w))->cs.strings) +#define XmColorS_slider_red(w) (((XmColorSelectorWidget)(w))->cs.slider_red) +#define XmColorS_slider_green(w) (((XmColorSelectorWidget)(w))->cs.slider_green) +#define XmColorS_slider_blue(w) (((XmColorSelectorWidget)(w))->cs.slider_blue) +#define XmColorS_bb(w) (((XmColorSelectorWidget)(w))->cs.bb) +#define XmColorS_sliders(w) (((XmColorSelectorWidget)(w))->cs.sliders) +#define XmColorS_scrolled_list(w) (((XmColorSelectorWidget)(w))->cs.scrolled_list) +#define XmColorS_list(w) (((XmColorSelectorWidget)(w))->cs.list) +#define XmColorS_color_window(w) (((XmColorSelectorWidget)(w))->cs.color_window) +#define XmColorS_chose_radio(w) (((XmColorSelectorWidget)(w))->cs.chose_radio) +#define XmColorS_chose_mode(w) (((XmColorSelectorWidget)(w))->cs.chose_mode) +#define XmColorS_color_pixel(w) (((XmColorSelectorWidget)(w))->cs.color_pixel) +#define XmColorS_good_cell(w) (((XmColorSelectorWidget)(w))->cs.good_cell) +#define XmColorS_colors(w) (((XmColorSelectorWidget)(w))->cs.colors) +#define XmColorS_num_colors(w) (((XmColorSelectorWidget)(w))->cs.num_colors) + +/************************************************************ + * GLOBAL DECLARATIONS + *************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +extern XmColorSelectorClassRec xmColorSelectorClassRec; + +/************************************************************ + * STATIC DECLARATIONS + ************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmColorSelectP_h DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Column.h b/libXm/osx/Xm/Column.h new file mode 100644 index 0000000..27265db --- /dev/null +++ b/libXm/osx/Xm/Column.h @@ -0,0 +1,38 @@ +#ifndef __Xmcolumn_h__ +#define __Xmcolumn_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +extern WidgetClass xmColumnWidgetClass; + +typedef struct _XmColumnClassRec * XmColumnWidgetClass; +typedef struct _XmColumnRec * XmColumnWidget; + +#ifndef XmIsColumn +#define XmIsColumn(w) (XtIsSubclass(w, xmColumnWidgetClass)) +#endif + +extern Widget XmCreateColumn(Widget, String, ArgList, Cardinal); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateColumn( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedColumn( + Widget parent, + char *name, + ...); +#ifdef __cplusplus +} +#endif + +#endif /* __column_h__ */ diff --git a/libXm/osx/Xm/ColumnP.h b/libXm/osx/Xm/ColumnP.h new file mode 100644 index 0000000..f1f2eff --- /dev/null +++ b/libXm/osx/Xm/ColumnP.h @@ -0,0 +1,112 @@ +#ifndef __Xmcolumnp_h__ +#define __Xmcolumnp_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +typedef struct _XmColumnClassPart { + XtPointer extension; +} XmColumnClassPart; + +typedef struct _XmColumnClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmColumnClassPart column_class; +} XmColumnClassRec; + +externalref XmColumnClassRec xmColumnClassRec; + +typedef struct _XmColumnConstraintPart { + + /* Public */ + unsigned char label_alignment; + unsigned char label_type; + unsigned char fill_style; + + Boolean show_label; + Boolean stretchable; + + Pixmap label_pixmap; + XmString label_string; + + XmFontList label_font_list; + + /* Private */ + + Widget label_widget; + Dimension request_width; + Dimension request_height; + XRectangle position; + Boolean check_set_render_table; /* used by CheckSetEntryLabelRenderTable */ +} XmColumnConstraintPart, * XmColumnConstraint; + +typedef struct _XmColumnConstraintRec { + XmManagerConstraintPart manager; + XmBulletinBoardConstraintPart bboard; + XmColumnConstraintPart column; +} XmColumnConstraintRec, * XmColumnConstraintPtr; + +typedef struct _XmColumnPart { + + /* Public */ + + unsigned char default_label_alignment; + unsigned char default_fill_style; + unsigned char orientation; + unsigned char distribution; + + Dimension item_spacing; + Dimension label_spacing; + + /* Private */ + + Boolean resize_done; + Boolean check_set_render_table; /* used by CheckSetDefaultEntryLabelRenderTable */ + +} XmColumnPart; + +typedef struct _XmColumnRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmColumnPart column; +} XmColumnRec; + +#define XmColumnIndex (XmBulletinBoardIndex + 1) + +#define XmColumnC_label_alignment(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.label_alignment) +#define XmColumnC_label_type(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.label_type) +#define XmColumnC_fill_style(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.fill_style) +#define XmColumnC_show_label(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.show_label) +#define XmColumnC_stretchable(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.stretchable) +#define XmColumnC_label_pixmap(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.label_pixmap) +#define XmColumnC_label_string(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.label_string) +#define XmColumnC_label_font_list(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.label_font_list) +#define XmColumnC_label_widget(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.label_widget) +#define XmColumnC_request_width(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.request_width) +#define XmColumnC_request_height(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.request_height) +#define XmColumnC_position(w) (((XmColumnConstraintPtr)((w)->core.constraints))->column.position) + +#define XmColumn_default_label_alignment(w) (((XmColumnWidget)(w))->column.default_label_alignment) +#define XmColumn_default_fill_style(w) (((XmColumnWidget)(w))->column.default_fill_style) +#define XmColumn_orientation(w) (((XmColumnWidget)(w))->column.orientation) +#define XmColumn_distribution(w) (((XmColumnWidget)(w))->column.distribution) +#define XmColumn_item_spacing(w) (((XmColumnWidget)(w))->column.item_spacing) +#define XmColumn_label_spacing(w) (((XmColumnWidget)(w))->column.label_spacing) +#define XmColumn_resize_done(w) (((XmColumnWidget)(w))->column.resize_done) + +#ifdef __cplusplus +} +#endif + +#endif /* __columnp_h__ */ diff --git a/libXm/osx/Xm/ComboBox.h b/libXm/osx/Xm/ComboBox.h new file mode 100644 index 0000000..00b8cc2 --- /dev/null +++ b/libXm/osx/Xm/ComboBox.h @@ -0,0 +1,109 @@ +/* $TOG: ComboBox.h /main/7 1998/02/23 10:32:29 cshi $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* ComboBox.h */ + +#ifndef _XmComboBox_h +#define _XmComboBox_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmComboBoxWidgetClass; + +typedef struct _XmComboBoxClassRec * XmComboBoxWidgetClass; +typedef struct _XmComboBoxRec * XmComboBoxWidget; + + +/* XmIsComboBox may already be defined for Fast Subclassing */ +#ifndef XmIsComboBox +#define XmIsComboBox(w) XtIsSubclass(w, xmComboBoxWidgetClass) +#endif /* XmIsComboBox */ + +/******** Public Function Declarations ********/ + +extern Widget XmCreateComboBox (Widget parent, + char *name, + ArgList args, + Cardinal argCount); +extern Widget XmCreateDropDownComboBox (Widget parent, + char *name, + ArgList args, + Cardinal argCount); +extern Widget XmCreateDropDownList (Widget parent, + char *name, + ArgList args, + Cardinal argCount); +extern Widget XmVaCreateComboBox( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedComboBox( + Widget parent, + char *name, + ...); +extern void XmComboBoxAddItem (Widget widget, + XmString item, + int pos, + Boolean unique); +extern void XmComboBoxDeletePos (Widget widget, + int pos); +extern void XmComboBoxSelectItem (Widget widget, + XmString item); + +/* JIM ADDED THIS TO APEASE SYMBOL GOD */ +extern XmString XmCombinationBoxGetValue(Widget widget); + +extern void XmComboBoxSetItem (Widget widget, + XmString item); +extern void XmComboBoxUpdate (Widget widget); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmComboBox_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/ComboBoxP.h b/libXm/osx/Xm/ComboBoxP.h new file mode 100644 index 0000000..b708afd --- /dev/null +++ b/libXm/osx/Xm/ComboBoxP.h @@ -0,0 +1,166 @@ +/* $XConsortium: ComboBoxP.h /main/8 1995/09/19 23:00:21 cde-sun $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* ComboBoxP.h */ +#ifndef _XmComboBoxP_H +#define _XmComboBoxP_H + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* New fields for the ComboBox widget class record. */ + +typedef struct _XmComboBoxClassPart { + XtPointer extension; /* Pointer to extension record. */ +} XmComboBoxClassPart; + + +/* Full class record declaration. */ +typedef struct _XmComboBoxClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmComboBoxClassPart combo_box_class; +} XmComboBoxClassRec; + +externalref XmComboBoxClassRec xmComboBoxClassRec; + +/* + * New fields for the ComboBox widget record. + */ + +typedef struct _XmComboBoxPart { + /* Resources */ + unsigned char type; + unsigned char match_behavior; + Dimension highlight_thickness; + Dimension arrow_size; + Dimension arrow_spacing; + Dimension margin_width; + Dimension margin_height; + XtCallbackList selection_callback; + XmString selected_item; /* synthetic, not updated */ + int selected_position; + XmFontList render_table; + + /* Internal data */ + Widget list_shell; + Widget list; /* Now accessible as a resource */ + Widget scrolled_w; + Widget vsb; + Widget hsb; + int ideal_ebheight; + int ideal_ebwidth; + GC arrow_GC; + XRectangle hit_rect; + Dimension arrow_shadow_width; + Boolean arrow_pressed; + Boolean highlighted; + Boolean scrolling; + XtEnum shell_state; + /* NOTE that text_changed is also used for MT_safe resolution of + * the XmNRenderTable, XmNFontList resource settings + */ + Boolean text_changed; + + /* New resources/data for CDE compatibility. */ + Widget edit_box; + XmStringTable items; + int item_count; + int visible_item_count; + short columns; + XtEnum position_mode; + +} XmComboBoxPart; + + +/* Full instance record declaration. */ + +typedef struct _XmComboBoxRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmComboBoxPart combo_box; +} XmComboBoxRec; + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +/* Access macros */ +#define CB_ArrowPressed(w) (((XmComboBoxWidget)(w))->combo_box.arrow_pressed) +#define CB_ArrowSize(w) (((XmComboBoxWidget)(w))->combo_box.arrow_size) +#define CB_ArrowSpacing(w) (((XmComboBoxWidget)(w))->combo_box.arrow_spacing) +#define CB_EditBox(w) (((XmComboBoxWidget)(w))->combo_box.edit_box) +#define CB_HighlightThickness(w) \ + (((XmComboBoxWidget)(w))->combo_box.highlight_thickness) +#define CB_Highlighted(w) (((XmComboBoxWidget)(w))->combo_box.highlighted) +#define CB_HitRect(w) (((XmComboBoxWidget)(w))->combo_box.hit_rect) +#define CB_List(w) (((XmComboBoxWidget)(w))->combo_box.list) +#define CB_ListShell(w) (((XmComboBoxWidget)(w))->combo_box.list_shell) +#define CB_MarginHeight(w) (((XmComboBoxWidget)(w))->combo_box.margin_height) +#define CB_MarginWidth(w) (((XmComboBoxWidget)(w))->combo_box.margin_width) +#define CB_MatchBehavior(w) \ + (((XmComboBoxWidget)(w))->combo_box.match_behavior) +#define CB_PositionMode(w) (((XmComboBoxWidget)(w))->combo_box.position_mode) +#define CB_RenderTable(w) (((XmComboBoxWidget)(w))->combo_box.render_table) +#define CB_ScrolledW(w) (((XmComboBoxWidget)(w))->combo_box.scrolled_w) +#define CB_SelectionCB(w) \ + (((XmComboBoxWidget)(w))->combo_box.selection_callback) +#define CB_ShellState(w) (((XmComboBoxWidget)(w))->combo_box.shell_state) +#define CB_TextChanged(w) (((XmComboBoxWidget)(w))->combo_box.text_changed) +#define CB_Type(w) (((XmComboBoxWidget)(w))->combo_box.type) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + +#endif /* _XmComboBoxP_H */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Command.h b/libXm/osx/Xm/Command.h new file mode 100644 index 0000000..5fdaa09 --- /dev/null +++ b/libXm/osx/Xm/Command.h @@ -0,0 +1,113 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Command.h /main/12 1995/07/14 10:16:15 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCommand_h +#define _XmCommand_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmCommandWidgetClass; + +typedef struct _XmCommandClassRec * XmCommandWidgetClass; +typedef struct _XmCommandRec * XmCommandWidget; + + +#ifndef XmIsCommand +#define XmIsCommand(w) (XtIsSubclass (w, xmCommandWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateCommand( + Widget parent, + String name, + ArgList al, + Cardinal ac) ; +extern Widget XmVaCreateCommand( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedCommand( + Widget parent, + char *name, + ...); +extern Widget XmCommandGetChild( + Widget widget, +#if NeedWidePrototypes + unsigned int child) ; +#else + unsigned char child) ; +#endif /* NeedWidePrototypes */ +extern void XmCommandSetValue( + Widget widget, + XmString value) ; +extern void XmCommandAppendValue( + Widget widget, + XmString value) ; +extern void XmCommandError( + Widget widget, + XmString error) ; +extern Widget XmCreateCommandDialog( + Widget ds_p, + String name, + ArgList fsb_args, + Cardinal fsb_n) ; + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCommand_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CommandI.h b/libXm/osx/Xm/CommandI.h new file mode 100644 index 0000000..755b15b --- /dev/null +++ b/libXm/osx/Xm/CommandI.h @@ -0,0 +1,72 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: CommandI.h /main/6 1995/07/14 10:16:31 drk $ */ +#ifndef _XmCommandI_h +#define _XmCommandI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmCommandReturn( + Widget wid, + XEvent *event, + String *params, + Cardinal *numParams) ; +extern void _XmCommandUpOrDown( + Widget wid, + XEvent *event, + String *argv, + Cardinal *argc) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCommandI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CommandP.h b/libXm/osx/Xm/CommandP.h new file mode 100644 index 0000000..aa50692 --- /dev/null +++ b/libXm/osx/Xm/CommandP.h @@ -0,0 +1,118 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CommandP.h /main/11 1995/07/14 10:16:43 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCommandP_h +#define _XmCommandP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constraint part record for Command widget */ + +typedef struct _XmCommandConstraintPart +{ + char unused; +} XmCommandConstraintPart, * XmCommandConstraint; + +/* New fields for the Command widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmCommandClassPart; + + +/* Full class record declaration */ + +typedef struct _XmCommandClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmSelectionBoxClassPart selection_box_class; + XmCommandClassPart command_class; +} XmCommandClassRec; + +externalref XmCommandClassRec xmCommandClassRec; + +/* New fields for the Command widget record */ + +typedef struct +{ + XtCallbackList callback; + XtCallbackList value_changed_callback; + int history_max_items; + Boolean error; /* error has been made visible in list */ +} XmCommandPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmCommandRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmSelectionBoxPart selection_box; + XmCommandPart command; +} XmCommandRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCommandP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ContItemT.h b/libXm/osx/Xm/ContItemT.h new file mode 100644 index 0000000..b99c6a4 --- /dev/null +++ b/libXm/osx/Xm/ContItemT.h @@ -0,0 +1,89 @@ +/* $XConsortium: ContItemT.h /main/5 1995/07/15 20:49:36 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmContainerItemT_H +#define _XmContainerItemT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTcontainerItem; + +/* Trait structures and typedefs, place typedefs first */ + +/* this one can be expanded in the future */ +typedef struct _XmContainerItemDataRec { + Mask valueMask ; /* on setValues, give the information on + what to change in the Icon, on getValues, + on what to put in the record returned */ + unsigned char view_type; + unsigned char visual_emphasis; + Dimension icon_width ; /* get value */ + Cardinal detail_count; /* get value */ +} XmContainerItemDataRec, *XmContainerItemData; + +#define ContItemAllValid (0xFFFF) +#define ContItemViewType (1L<<0) +#define ContItemVisualEmphasis (1L<<1) +#define ContItemIconWidth (1L<<2) +#define ContItemDetailCount (1L<<3) + + +typedef void (*XmContainerItemSetValuesProc)(Widget w, + XmContainerItemData contItemData); +typedef void (*XmContainerItemGetValuesProc)(Widget w, + XmContainerItemData contItemData); + +/* Version 0: initial release. */ + +typedef struct _XmContainerItemTraitRec { + int version; /* 0 */ + XmContainerItemSetValuesProc setValues; + XmContainerItemGetValuesProc getValues; +} XmContainerItemTraitRec, *XmContainerItemTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainerItemT_H */ diff --git a/libXm/osx/Xm/Container.h b/libXm/osx/Xm/Container.h new file mode 100644 index 0000000..d8c15de --- /dev/null +++ b/libXm/osx/Xm/Container.h @@ -0,0 +1,107 @@ +/* $XConsortium: Container.h /main/5 1995/07/15 20:50:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmContainer_h +#define _XmContainer_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Class record constants */ +externalref WidgetClass xmContainerWidgetClass; + +typedef struct _XmContainerClassRec *XmContainerWidgetClass; +typedef struct _XmContainerRec *XmContainerWidget; + +#ifndef XmIsContainer +#define XmIsContainer(w) XtIsSubclass(w, xmContainerWidgetClass) +#endif /* XmIsContainer */ + + +/******** Public Function Declarations ********/ +extern Widget XmCreateContainer( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount); +extern Widget XmVaCreateContainer( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedContainer( + Widget parent, + char *name, + ...); +extern int XmContainerGetItemChildren( + Widget wid, + Widget item, + WidgetList *item_children); +extern void XmContainerRelayout( + Widget wid); +extern void XmContainerReorder( + Widget wid, + WidgetList cwid_list, + int cwid_count); +extern Boolean XmContainerCut( + Widget wid, + Time timestamp); +extern Boolean XmContainerCopy( + Widget wid, + Time timestamp); +extern Boolean XmContainerPaste( + Widget wid); +extern Boolean XmContainerCopyLink( + Widget wid, + Time timestamp); +extern Boolean XmContainerPasteLink( + Widget wid); +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainer_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ContainerP.h b/libXm/osx/Xm/ContainerP.h new file mode 100644 index 0000000..77b2e2e --- /dev/null +++ b/libXm/osx/Xm/ContainerP.h @@ -0,0 +1,405 @@ +/* $XConsortium: ContainerP.h /main/8 1996/06/13 16:45:53 pascale $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmContainerP_h +#define _XmContainerP_h + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * One _XmCwidNodeRec structure is allocated by Container for each of + * it's children (except for OutlineButtons). Information about the + * relationship of the child to other Container children (parentage and + * order) is maintained here by Container. + * + * _XmCwidNodeRec structures are XtCalloc'd by Container in the + * ConstraintInitialize method and XtFree'd in the ConstraintDestroy method. + * They are linked/unlinked to other _XmCwidNodeRec structures in the + * ChangeManaged method. + */ +typedef struct _XmCwidNodeRec + { + struct _XmCwidNodeRec * next_ptr; + struct _XmCwidNodeRec * prev_ptr; + struct _XmCwidNodeRec * child_ptr; + struct _XmCwidNodeRec * parent_ptr; + Widget widget_ptr; + } XmCwidNodeRec, *CwidNode; + +/* + * Container allocates a _XmContainerXfrActionRec structure to store + * the data from a ContainerStartTransfer action until it can determine + * whether the action should start a primary transfer or begin a drag. + */ +typedef struct _XmContainerXfrActionRec + { + Widget wid; + XEvent *event; + String *params; + Cardinal *num_params; + Atom operation; + } XmContainerXfrActionRec, *ContainerXfrAction; + +/* + * Container allocates an array of _XmContainerCwidCellInfoRec structures + * to use in calculating an ideal size in the GetSpatialSize procedure when + * XmNspatialStyle is XmCELLS. The array is created and destroyed in the + * GetSpatialSize procedure. + */ +typedef struct _XmContainerCwidCellInfoRec + { + int cwid_width_in_cells; + int cwid_height_in_cells; + } XmContainerCwidCellInfoRec, *ContainerCwidCellInfo; + +/* Container constraint class part record */ +typedef struct _XmContainerConstraintPart + { + Widget entry_parent; /* XmNentryParent */ + Widget related_cwid; + CwidNode node_ptr; + int position_index; /* XmNpositionIndex */ + int depth; + int cell_idx; + Boolean visible_in_outline; + Position user_x; + Position user_y; + unsigned char outline_state; /* XmNoutlineState */ + unsigned char selection_visual; + unsigned char selection_state; + unsigned char cwid_type; + } XmContainerConstraintPart, * XmContainerConstraint; + +typedef struct _XmContainerConstraintRec + { + XmManagerConstraintPart manager; + XmContainerConstraintPart container; + } XmContainerConstraintRec, * XmContainerConstraintPtr; + +/* move the other typedef here */ +typedef void (*XmSpatialGetSize)(Widget, Dimension *, Dimension *); + +/* Container widget class record */ +typedef struct _XmContainerClassPart + { + XmSpatialTestFitProc test_fit_item; + XmSpatialPlacementProc place_item; + XmSpatialRemoveProc remove_item; + XmSpatialGetSize get_spatial_size; + XtPointer extension; + } XmContainerClassPart; + +/* Full class record declaration */ +typedef struct _XmContainerClassRec + { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmContainerClassPart container_class; + } XmContainerClassRec, *XmContainerClass; + +externalref XmContainerClassRec xmContainerClassRec; + +/* Container instance record */ +typedef struct _XmContainerPart + { + WidgetList selected_items; /* XmNselectedItems */ + Widget icon_header; + Widget anchor_cwid; + Widget druggee; + Widget size_ob; + Widget drag_context; + CwidNode first_node; + CwidNode last_node; + Cardinal * detail_order; /* XmNdetailOrder */ + XmString * detail_heading; /* XmNdetailColumnHeading */ + XSegment * outline_segs; + XtCallbackList convert_cb; /* XmNconvertCallback */ + XtCallbackList default_action_cb; /* XmNdefaultActionCallback */ + XtCallbackList destination_cb; /* XmNdestinationCallback */ + XtCallbackList outline_cb; /* XmNoutlineChangedCallback */ + XtCallbackList selection_cb; /* XmNselectionCallback */ + XmTabList detail_tablist; /* XmNdetailTabList */ + XmFontList render_table; /* XmNfontList */ + Pixel select_color; /* XmNselectColor */ + Pixmap collapsed_state_pixmap; /* XmNcollapsedStatePixmap */ + Pixmap expanded_state_pixmap; /* XmNexpandedStatePixmap */ + GC normalGC; + GC marqueeGC; + Time last_click_time; + Region cells_region; + ContainerXfrAction transfer_action; + XtIntervalId transfer_timer_id; + XPoint anchor_point; + XPoint marquee_start; + XPoint marquee_end; + XPoint marquee_smallest; + XPoint marquee_largest; + XPoint dropspot; + unsigned long dynamic_resource; + int max_depth; + int outline_seg_count; + int *cells; + int cell_count; + int next_free_cell; + int current_width_in_cells; + int current_height_in_cells; + int drag_offset_x; + int drag_offset_y; + unsigned int selected_item_count; /* XmNselectedItemCount */ + Cardinal detail_heading_count; /* XmNdetailColumnHeadingCount */ + Cardinal saved_detail_heading_count; + Cardinal detail_order_count; /* XmNdetailOrderCount */ + Dimension first_col_width; /* XmNoutlineColumnWidth */ + Dimension real_first_col_width; + Dimension large_cell_height; /* XmNlargeCellHeight */ + Dimension large_cell_width; /* XmNlargeCellWidth */ + Dimension small_cell_height; /* XmNsmallCellHeight */ + Dimension small_cell_width; /* XmNsmallCellWidth */ + Dimension real_large_cellh; + Dimension real_large_cellw; + Dimension real_small_cellh; + Dimension real_small_cellw; + Dimension margin_h; /* XmNmarginHeight */ + Dimension margin_w; /* XmNmarginWidth */ + Dimension outline_indent; /* XmNoutlineIndentation */ + Dimension ob_width; + Dimension ob_height; + Dimension prev_width; + Dimension ideal_width; + Dimension ideal_height; + /* Note: first_change_managed is also used to resolve between + * XmRenderTable & XmFontList when setting up the resource table + */ + Boolean first_change_managed; + Boolean extending_mode; + Boolean marquee_mode; + Boolean self; + Boolean toggle_pressed; + Boolean extend_pressed; + Boolean ob_pressed; + Boolean cancel_pressed; + Boolean kaddmode; + Boolean no_auto_sel_changes; + Boolean started_in_anchor; + Boolean marquee_drawn; + Boolean have_primary; + Boolean selecting; + Boolean large_cell_dim_fixed; + Boolean small_cell_dim_fixed; + unsigned char automatic; /* XmNautomaticSelection */ + unsigned char entry_viewtype; /* XmNentryViewType */ + unsigned char include_model; /* XmNspatialIncludeModel */ + unsigned char layout_type; /* XmNlayoutType */ + unsigned char ob_policy; /* XmNoutlineButtonPolicy */ + unsigned char outline_sep_style; /* XmNoutlineLineStyle */ + unsigned char spatial_style; /* XmNspatialStyle */ + unsigned char primary_ownership; /* XmNprimaryOwnership */ + unsigned char resize_model; /* XmNspatialResizeModel */ + unsigned char selection_policy; /* XmNselectionPolicy */ + unsigned char selection_technique; /* XmNselectionTechnique */ + unsigned char snap_model; /* XmNspatialSnapModel */ + unsigned char create_cwid_type; + unsigned char selection_state; + unsigned char LeaveDir; /* leave direction */ + XtIntervalId scroll_proc_id; /* scroll TimeOutProc */ + int last_xmotion_x; + int last_xmotion_y; + XmString * cache_detail_heading; /* XmNdetailColumnHeading + getValues */ + } XmContainerPart; + +/* Full instance record declaration */ +typedef struct _XmContainerRec + { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmContainerPart container; + } XmContainerRec; + +/* enums to keep up with cwid types */ +enum { CONTAINER_ICON, + CONTAINER_OUTLINE_BUTTON, + CONTAINER_HEADER}; + +#define TABLIST (1L<<0) +#define FIRSTCW (1L<<1) +#define CtrIsDynamic(w,mask) \ + (((XmContainerWidget)(w))->container.dynamic_resource & mask) + +#define CtrDynamicSmallCellHeight(w) \ + (((XmContainerWidget)(w))->container.small_cell_height == 0) +#define CtrDynamicSmallCellWidth(w) \ + (((XmContainerWidget)(w))->container.small_cell_width == 0) +#define CtrDynamicLargeCellHeight(w) \ + (((XmContainerWidget)(w))->container.large_cell_height == 0) +#define CtrDynamicLargeCellWidth(w) \ + (((XmContainerWidget)(w))->container.large_cell_width == 0) + +#define CtrIsAUTO_SELECT(w) \ + ((((XmContainerWidget)(w))->container.automatic == XmAUTO_SELECT) && \ + (((XmContainerWidget)(w))->container.selection_policy \ + != XmSINGLE_SELECT)) +#define CtrViewIsLARGE_ICON(w) \ + (((XmContainerWidget)(w))->container.entry_viewtype == XmLARGE_ICON) +#define CtrViewIsSMALL_ICON(w) \ + (((XmContainerWidget)(w))->container.entry_viewtype == XmSMALL_ICON) +#define CtrViewIsANY_ICON(w) \ + (((XmContainerWidget)(w))->container.entry_viewtype == XmANY_ICON) +#define CtrIsHORIZONTAL(w) \ + (XmDirectionMatchPartial \ + (((XmContainerWidget)(w))->manager.string_direction,\ + XmDEFAULT_DIRECTION,XmPRECEDENCE_HORIZ_MASK)) +#define CtrIsVERTICAL(w) \ + (XmDirectionMatchPartial \ + (((XmContainerWidget)(w))->manager.string_direction,\ + XmDEFAULT_DIRECTION,XmPRECEDENCE_VERT_MASK)) +#define CtrLayoutIsDETAIL(w) \ + (((XmContainerWidget)(w))->container.layout_type == XmDETAIL) +#define CtrLayoutIsOUTLINE_DETAIL(w) \ + ((((XmContainerWidget)(w))->container.layout_type == XmDETAIL) || \ + (((XmContainerWidget)(w))->container.layout_type == XmOUTLINE)) + +#define CtrDrawLinesOUTLINE(w) \ + (CtrLayoutIsOUTLINE_DETAIL(w) && \ + (((XmContainerWidget)(w))->container.outline_sep_style \ + == XmSINGLE)) +#define CtrLayoutIsSPATIAL(w) \ + (((XmContainerWidget)(w))->container.layout_type == XmSPATIAL) +#define CtrSpatialStyleIsNONE(w) \ + (((XmContainerWidget)(w))->container.spatial_style == XmNONE) +#define CtrSpatialStyleIsGRID(w) \ + (((XmContainerWidget)(w))->container.spatial_style == XmGRID) +#define CtrSpatialStyleIsCELLS(w) \ + (((XmContainerWidget)(w))->container.spatial_style == XmCELLS) +#define CtrIncludeIsAPPEND(w) \ + (((XmContainerWidget)(w))->container.include_model == XmAPPEND) +#define CtrIncludeIsCLOSEST(w) \ + (((XmContainerWidget)(w))->container.include_model == XmCLOSEST) +#define CtrIncludeIsFIRST_FIT(w) \ + (((XmContainerWidget)(w))->container.include_model == XmFIRST_FIT) +#define CtrSnapModelIsNONE(w) \ + (((XmContainerWidget)(w))->container.snap_model == XmNONE) +#define CtrSnapModelIsSNAP(w) \ + (((XmContainerWidget)(w))->container.snap_model == XmSNAP_TO_GRID) +#define CtrSnapModelIsCENTER(w) \ + (((XmContainerWidget)(w))->container.snap_model == XmCENTER) +#define CtrResizeModelIsGROW_MINOR(w) \ + (((XmContainerWidget)(w))->container.resize_model == XmGROW_MINOR) +#define CtrResizeModelIsGROW_MAJOR(w) \ + (((XmContainerWidget)(w))->container.resize_model == XmGROW_MAJOR) +#define CtrResizeModelIsGROW_BALANCED(w) \ + (((XmContainerWidget)(w))->container.resize_model == XmGROW_BALANCED) +#define CtrPolicyIsSINGLE(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmSINGLE_SELECT) +#define CtrPolicyIsBROWSE(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmBROWSE_SELECT) +#define CtrPolicyIsMULTIPLE(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmMULTIPLE_SELECT) +#define CtrPolicyIsEXTENDED(w) \ + (((XmContainerWidget)(w))->container.selection_policy \ + == XmEXTENDED_SELECT) +#define CtrTechIsTOUCH_OVER(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmTOUCH_OVER) +#define CtrTechIsTOUCH_ONLY(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmTOUCH_ONLY) +#define CtrTechIsMARQUEE(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmMARQUEE) +#define CtrTechIsMARQUEE_ES(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmMARQUEE_EXTEND_START) +#define CtrTechIsMARQUEE_EB(w) \ + (((XmContainerWidget)(w))->container.selection_technique \ + == XmMARQUEE_EXTEND_BOTH) +#define CtrOB_PRESENT(w) \ + (((XmContainerWidget)(w))->container.ob_policy \ + == XmOUTLINE_BUTTON_PRESENT) +#define CtrOB_ABSENT(w) \ + (((XmContainerWidget)(w))->container.ob_policy \ + == XmOUTLINE_BUTTON_ABSENT) +#define GetContainerConstraint(w) \ + (&((XmContainerConstraintPtr) (w)->core.constraints)->container) +#define CtrItemIsPlaced(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cell_idx \ + != NO_CELL) +#define CtrICON(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cwid_type\ + == CONTAINER_ICON) +#define CtrOUTLINE_BUTTON(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cwid_type\ + == CONTAINER_OUTLINE_BUTTON) +#define CtrHEADER(w) \ + (((XmContainerConstraintPtr)(w)->core.constraints)->container.cwid_type\ + == CONTAINER_HEADER) + +#define XmInheritSpatialTestFitProc ((XmSpatialTestFitProc) _XtInherit) +#define XmInheritSpatialPlacementProc ((XmSpatialPlacementProc) _XtInherit) +#define XmInheritSpatialRemoveProc ((XmSpatialRemoveProc) _XtInherit) +#define XmInheritSpatialGetSize ((XmSpatialGetSize) _XtInherit) + +/* possible directions when leaving the container */ +#define TOPLEAVE (1<<0) +#define BOTTOMLEAVE (1<<1) +#define LEFTLEAVE (1<<2) +#define RIGHTLEAVE (1<<3) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainerP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + diff --git a/libXm/osx/Xm/ContainerT.h b/libXm/osx/Xm/ContainerT.h new file mode 100644 index 0000000..3e2233c --- /dev/null +++ b/libXm/osx/Xm/ContainerT.h @@ -0,0 +1,90 @@ +/* $XConsortium: ContainerT.h /main/6 1996/02/09 15:05:04 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmContainerT_H +#define _XmContainerT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTcontainer; + +/* Trait structures and typedefs, place typedefs first */ + +/* this one can be expanded in the future */ +typedef struct _XmContainerDataRec { + Mask valueMask ; + + Cardinal * detail_order ; + Cardinal detail_order_count ; + XmTabList detail_tablist ; + Dimension first_column_width ; + XtEnum selection_mode ; /* XmNORMAL_MODE, XmADD_MODE */ + Pixel select_color ; + +} XmContainerDataRec, *XmContainerData; + +#define ContAllValid (0xFFFF) +#define ContDetailOrder (1L<<0) +#define ContDetailTabList (1L<<1) +#define ContFirstColumnWidth (1L<<2) +#define ContSelectionMode (1L<<3) +#define ContSelectColor (1L<<4) + + +typedef void (*XmContainerGetValuesProc)(Widget w, + XmContainerData contData); + +/* Version 0: initial release. */ + +typedef struct _XmContainerTraitRec { + int version; /* 0 */ + XmContainerGetValuesProc getValues; +} XmContainerTraitRec, *XmContainerTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmContainerT_H */ diff --git a/libXm/osx/Xm/CutPaste.h b/libXm/osx/Xm/CutPaste.h new file mode 100644 index 0000000..6e6147c --- /dev/null +++ b/libXm/osx/Xm/CutPaste.h @@ -0,0 +1,194 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: CutPaste.h /main/13 1995/07/14 10:17:18 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmCutPaste_h +#define _XmCutPaste_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* XmClipboard return status definitions */ + +typedef enum { + XmClipboardFail = 0, + XmClipboardSuccess = 1, + XmClipboardTruncate = 2, + XmClipboardLocked = 4, + XmClipboardBadFormat = 5, + XmClipboardNoData = 6 +} XmClipboardStatus; + +/* XmClipboard pre-1.2 definitions */ + +#define ClipboardFail 0 +#define ClipboardSuccess 1 +#define ClipboardTruncate 2 +#define ClipboardLocked 4 +#define ClipboardBadFormat 5 +#define ClipboardNoData 6 + +typedef struct { + long DataId; + long PrivateId; +} XmClipboardPendingRec, *XmClipboardPendingList; + +typedef void (*XmCutPasteProc)( Widget w, long * data_id, long * private_id, + int * reason) ; +typedef void (*VoidProc)( Widget w, int * data_id, int * private_id, + int * reason) ; + + +/******** Public Function Declarations ********/ + +extern int XmClipboardBeginCopy( + Display *display, + Window window, + XmString label, + Widget widget, + VoidProc callback, + long *itemid) ; +extern int XmClipboardStartCopy( + Display *display, + Window window, + XmString label, + Time timestamp, + Widget widget, + XmCutPasteProc callback, + long *itemid) ; +extern int XmClipboardCopy( + Display *display, + Window window, + long itemid, + char *format, + XtPointer buffer, + unsigned long length, + long private_id, + long *dataid) ; +extern int XmClipboardEndCopy( + Display *display, + Window window, + long itemid) ; +extern int XmClipboardCancelCopy( + Display *display, + Window window, + long itemid) ; +extern int XmClipboardWithdrawFormat( + Display *display, + Window window, + long data) ; +extern int XmClipboardCopyByName( + Display *display, + Window window, + long data, + XtPointer buffer, + unsigned long length, + long private_id) ; +extern int XmClipboardUndoCopy( + Display *display, + Window window) ; +extern int XmClipboardLock( + Display *display, + Window window) ; +extern int XmClipboardUnlock( + Display *display, + Window window, +#if NeedWidePrototypes + int all_levels) ; +#else + Boolean all_levels) ; +#endif /* NeedWidePrototypes */ +extern int XmClipboardStartRetrieve( + Display *display, + Window window, + Time timestamp) ; +extern int XmClipboardEndRetrieve( + Display *display, + Window window) ; +extern int XmClipboardRetrieve( + Display *display, + Window window, + char *format, + XtPointer buffer, + unsigned long length, + unsigned long *outlength, + long *private_id) ; +extern int XmClipboardInquireCount( + Display *display, + Window window, + int *count, + unsigned long *maxlength) ; +extern int XmClipboardInquireFormat( + Display *display, + Window window, + int n, + XtPointer buffer, + unsigned long bufferlength, + unsigned long *outlength) ; +extern int XmClipboardInquireLength( + Display *display, + Window window, + char *format, + unsigned long *length) ; +extern int XmClipboardInquirePendingItems( + Display *display, + Window window, + char *format, + XmClipboardPendingList *list, + unsigned long *count) ; +extern int XmClipboardRegisterFormat( + Display *display, + char *format_name, + int format_length) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCutPaste_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/CutPasteI.h b/libXm/osx/Xm/CutPasteI.h new file mode 100644 index 0000000..4306115 --- /dev/null +++ b/libXm/osx/Xm/CutPasteI.h @@ -0,0 +1,57 @@ +/* $XConsortium: CutPasteI.h /main/5 1995/07/15 20:50:21 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmCutPasteI_H +#define _XmCutPasteI_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void _XmClipboardPassType(Atom); + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmCutPasteI_H */ diff --git a/libXm/osx/Xm/DataF.h b/libXm/osx/Xm/DataF.h new file mode 100644 index 0000000..ffeb2ba --- /dev/null +++ b/libXm/osx/Xm/DataF.h @@ -0,0 +1,168 @@ +#ifndef _XmDataF_h +#define _XmDataF_h + +#include +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmDataFieldClassRec *XmDataFieldWidgetClass; +typedef struct _XmDataFieldRec *XmDataFieldWidget; + +/* Function Name: XmCreateDataField + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateDataField( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateDataField( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedDataField( + Widget parent, + char *name, + ...); + +Boolean _XmDataFieldReplaceText( +#ifndef _NO_PROTO +XmDataFieldWidget, XEvent*, XmTextPosition, XmTextPosition, char*, int, Boolean +#endif +); + +void XmDataFieldSetString( +#ifndef _NO_PROTO +Widget, char* +#endif +); + +extern char * XmDataFieldGetString( +#ifndef _NO_PROTO +Widget +#endif +); + +extern wchar_t * XmDataFieldGetStringWcs( +#ifndef _NO_PROTO +Widget +#endif +); + +void _XmDataFieldSetClipRect( +#ifndef _NO_PROTO +XmDataFieldWidget +#endif +); + +void _XmDataFieldDrawInsertionPoint( +#ifndef _NO_PROTO +XmDataFieldWidget, Boolean +#endif +); + +void XmDataFieldSetHighlight( +#ifndef _NO_PROTO +Widget, XmTextPosition, XmTextPosition, XmHighlightMode +#endif +); + +void XmDataFieldSetAddMode( +#ifndef _NO_PROTO +Widget, Boolean +#endif +); + +char * XmDataFieldGetSelection( +#ifndef _NO_PROTO +Widget +#endif +); + +void XmDataFieldSetSelection( +#ifndef _NO_PROTO +Widget, XmTextPosition, XmTextPosition, Time +#endif +); + +void _XmDataFieldSetSel2( +#ifndef _NO_PROTO +Widget, XmTextPosition, XmTextPosition, Boolean, Time +#endif +); + +Boolean XmDataFieldGetSelectionPosition( +#ifndef _NO_PROTO +Widget, XmTextPosition *, XmTextPosition * +#endif +); + +XmTextPosition XmDataFieldXYToPos( +#ifndef _NO_PROTO +Widget, Position, Position +#endif +); + +void XmDataFieldShowPosition( +#ifndef _NO_PROTO +Widget, XmTextPosition +#endif +); + +Boolean XmDataFieldCut( +#ifndef _NO_PROTO +Widget, Time +#endif +); + +Boolean XmDataFieldCopy( +#ifndef _NO_PROTO +Widget, Time +#endif +); + +Boolean XmDataFieldPaste( +#ifndef _NO_PROTO +Widget +#endif +); + +void XmDataFieldSetEditable( +#ifndef _NO_PROTO +Widget, Boolean +#endif +); + +void XmDataFieldSetInsertionPosition( +#ifndef _NO_PROTO +Widget, XmTextPosition +#endif +); + +extern WidgetClass xmDataFieldWidgetClass; + +typedef struct _XmDataFieldCallbackStruct { + Widget w; /* The XmDataField */ + String text; /* Proposed string */ + Boolean accept; /* Accept return value, for validation */ +} XmDataFieldCallbackStruct; + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#endif /* _XmDataF_h */ diff --git a/libXm/osx/Xm/DataFP.h b/libXm/osx/Xm/DataFP.h new file mode 100644 index 0000000..4ecb4ad --- /dev/null +++ b/libXm/osx/Xm/DataFP.h @@ -0,0 +1,162 @@ +#ifndef _XmDataFP_h +#define _XmDataFP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Motif doesn't define this: go figure + */ +#ifndef XmTextFieldIndex +#define XmTextFieldIndex (XmPrimitiveIndex + 1) +#endif + +#define XmDataFieldIndex (XmTextFieldIndex) + +typedef struct _XmDataFieldClassPart { + XtPointer extension; +} XmDataFieldClassPart; + +typedef struct _XmDataFieldClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmDataFieldClassPart data_class; +} XmDataFieldClassRec; + +typedef struct _XmDataFieldPart { + unsigned char alignment; /* XmALIGNMENT_BEGINNING by default */ + String picture_source; + XmPicture picture; + Boolean auto_fill; + XtCallbackList picture_error_cb; + XtCallbackList validate_cb; +} XmDataFieldPart; + +typedef struct _XmDataFieldRec { + CorePart core; + XmPrimitivePart primitive; + XmTextFieldPart text; + XmDataFieldPart data; +} XmDataFieldRec; + +extern XmDataFieldClassRec xmDataFieldClassRec; + +#define XmTextF_activate_callback(w) (((XmDataFieldWidget)(w))->text.activate_callback) +#define XmTextF_focus_callback(w) (((XmDataFieldWidget)(w))->text.focus_callback) +#define XmTextF_losing_focus_callback(w) (((XmDataFieldWidget)(w))->text.losing_focus_callback) +#define XmTextF_modify_verify_callback(w) (((XmDataFieldWidget)(w))->text.modify_verify_callback) +#define XmTextF_wcs_modify_verify_callback(w) (((XmDataFieldWidget)(w))->text.wcs_modify_verify_callback) +#define XmTextF_motion_verify_callback(w) (((XmDataFieldWidget)(w))->text.motion_verify_callback) +#define XmTextF_gain_primary_callback(w) (((XmDataFieldWidget)(w))->text.gain_primary_callback) +#define XmTextF_lose_primary_callback(w) (((XmDataFieldWidget)(w))->text.lose_primary_callback) +#define XmTextF_value_changed_callback(w) (((XmDataFieldWidget)(w))->text.value_changed_callback) +#define XmTextF_value(w) (((XmDataFieldWidget)(w))->text.value) +#define XmTextF_wc_value(w) (((XmDataFieldWidget)(w))->text.wc_value) +#define XmTextF_font_list(w) (((XmDataFieldWidget)(w))->text.font_list) +#define XmTextF_font(w) ((XFontStruct*)(((XmDataFieldWidget)(w))->text.font)) +#define XmTextF_selection_array(w) (((XmDataFieldWidget)(w))->text.selection_array) +#define XmTextF_highlight(w) (((XmDataFieldWidget)(w))->text.highlight) +#define XmTextF_gc(w) (((XmDataFieldWidget)(w))->text.gc) +#define XmTextF_image_gc(w) (((XmDataFieldWidget)(w))->text.image_gc) +#define XmTextF_save_gc(w) (((XmDataFieldWidget)(w))->text.save_gc) +#define XmTextF_ibeam_off(w) (((XmDataFieldWidget)(w))->text.ibeam_off) +#define XmTextF_add_mode_cursor(w) (((XmDataFieldWidget)(w))->text.add_mode_cursor) +#define XmTextF_cursor(w) (((XmDataFieldWidget)(w))->text.cursor) +#define XmTextF_putback(w) (((XmDataFieldWidget)(w))->text.putback) +#define XmTextF_stipple_tile(w) (((XmDataFieldWidget)(w))->text.stipple_tile) +#define XmTextF_image_clip(w) (((XmDataFieldWidget)(w))->text.image_clip) +#define XmTextF_cursor_position(w) (((XmDataFieldWidget)(w))->text.cursor_position) +#define XmTextF_new_h_offset(w) (((XmDataFieldWidget)(w))->text.new_h_offset) +#define XmTextF_h_offset(w) (((XmDataFieldWidget)(w))->text.h_offset) +#define XmTextF_orig_left(w) (((XmDataFieldWidget)(w))->text.orig_left) +#define XmTextF_orig_right(w) (((XmDataFieldWidget)(w))->text.orig_right) +#define XmTextF_prim_pos_left(w) (((XmDataFieldWidget)(w))->text.prim_pos_left) +#define XmTextF_prim_pos_right(w) (((XmDataFieldWidget)(w))->text.prim_pos_right) +#define XmTextF_prim_anchor(w) (((XmDataFieldWidget)(w))->text.prim_anchor) +#define XmTextF_sec_pos_left(w) (((XmDataFieldWidget)(w))->text.sec_pos_left) +#define XmTextF_sec_pos_right(w) (((XmDataFieldWidget)(w))->text.sec_pos_right) +#define XmTextF_sec_anchor(w) (((XmDataFieldWidget)(w))->text.sec_anchor) +#define XmTextF_stuff_pos(w) (((XmDataFieldWidget)(w))->text.stuff_pos) +#define XmTextF_select_pos_x(w) (((XmDataFieldWidget)(w))->text.select_pos_x) +#define XmTextF_prim_time(w) (((XmDataFieldWidget)(w))->text.prim_time) +#define XmTextF_dest_time(w) (((XmDataFieldWidget)(w))->text.dest_time) +#define XmTextF_sec_time(w) (((XmDataFieldWidget)(w))->text.sec_time) +#define XmTextF_last_time(w) (((XmDataFieldWidget)(w))->text.last_time) +#define XmTextF_timer_id(w) (((XmDataFieldWidget)(w))->text.timer_id) +#define XmTextF_select_id(w) (((XmDataFieldWidget)(w))->text.select_id) +#define XmTextF_blink_rate(w) (((XmDataFieldWidget)(w))->text.blink_rate) +#define XmTextF_selection_array_count(w) (((XmDataFieldWidget)(w))->text.selection_array_count) +#define XmTextF_threshold(w) (((XmDataFieldWidget)(w))->text.threshold) +#define XmTextF_size_allocd(w) (((XmDataFieldWidget)(w))->text.size_allocd) +#define XmTextF_string_length(w) (((XmDataFieldWidget)(w))->text.string_length) +#define XmTextF_cursor_height(w) (((XmDataFieldWidget)(w))->text.cursor_height) +#define XmTextF_cursor_width(w) (((XmDataFieldWidget)(w))->text.cursor_width) +#define XmTextF_sarray_index(w) (((XmDataFieldWidget)(w))->text.sarray_index) +#define XmTextF_max_length(w) (((XmDataFieldWidget)(w))->text.max_length) +#define XmTextF_max_char_size(w) (((XmDataFieldWidget)(w))->text.max_char_size) +#define XmTextF_columns(w) (((XmDataFieldWidget)(w))->text.columns) +#define XmTextF_margin_width(w) (((XmDataFieldWidget)(w))->text.margin_width) +#define XmTextF_margin_height(w) (((XmDataFieldWidget)(w))->text.margin_height) +#define XmTextF_average_char_width(w) (((XmDataFieldWidget)(w))->text.average_char_width) +#define XmTextF_margin_top(w) (((XmDataFieldWidget)(w))->text.margin_top) +#define XmTextF_margin_bottom(w) (((XmDataFieldWidget)(w))->text.margin_bottom) +#define XmTextF_font_ascent(w) (((XmDataFieldWidget)(w))->text.font_ascent) +#define XmTextF_font_descent(w) (((XmDataFieldWidget)(w))->text.font_descent) +#define XmTextF_resize_width(w) (((XmDataFieldWidget)(w))->text.resize_width) +#define XmTextF_pending_delete(w) (((XmDataFieldWidget)(w))->text.pending_delete) +#define XmTextF_editable(w) (((XmDataFieldWidget)(w))->text.editable) +#define XmTextF_verify_bell(w) (((XmDataFieldWidget)(w))->text.verify_bell) +#define XmTextF_cursor_position_visible(w) (((XmDataFieldWidget)(w))->text.cursor_position_visible) +#define XmTextF_traversed(w) (((XmDataFieldWidget)(w))->text.traversed) +#define XmTextF_add_mode(w) (((XmDataFieldWidget)(w))->text.add_mode) +#define XmTextF_has_focus(w) (((XmDataFieldWidget)(w))->text.has_focus) +#define XmTextF_blink_on(w) (((XmDataFieldWidget)(w))->text.blink_on) +#define XmTextF_cursor_on(w) (((XmDataFieldWidget)(w))->text.cursor_on) +#define XmTextF_refresh_ibeam_off(w) (((XmDataFieldWidget)(w))->text.refresh_ibeam_off) +#define XmTextF_have_inverted_image_gc(w) (((XmDataFieldWidget)(w))->text.have_inverted_image_gc) +#define XmTextF_has_primary(w) (((XmDataFieldWidget)(w))->text.has_primary) +#define XmTextF_has_secondary(w) (((XmDataFieldWidget)(w))->text.has_secondary) +#define XmTextF_has_destination(w) (((XmDataFieldWidget)(w))->text.has_destination) +#define XmTextF_sec_drag(w) (((XmDataFieldWidget)(w))->text.sec_drag) +#define XmTextF_selection_move(w) (((XmDataFieldWidget)(w))->text.selection_move) +#define XmTextF_pending_off(w) (((XmDataFieldWidget)(w))->text.pending_off) +#define XmTextF_fontlist_created(w) (((XmDataFieldWidget)(w))->text.fontlist_created) +#define XmTextF_has_rect(w) (((XmDataFieldWidget)(w))->text.has_rect) +#define XmTextF_do_drop(w) (((XmDataFieldWidget)(w))->text.do_drop) +#define XmTextF_cancel(w) (((XmDataFieldWidget)(w))->text.cancel) +#define XmTextF_extending(w) (((XmDataFieldWidget)(w))->text.extending) +#define XmTextF_sec_extending(w) (((XmDataFieldWidget)(w))->text.sec_extending) +#define XmTextF_in_setvalues(w) (((XmDataFieldWidget)(w))->text.in_setvalues) +#define XmTextF_do_resize(w) (((XmDataFieldWidget)(w))->text.do_resize) +#define XmTextF_sel_start(w) (((XmDataFieldWidget)(w))->text.sel_start) +#define XmTextF_check_set_render_table(w) (((XmDataFieldWidget)(w))->text.check_set_render_table) +#define XmTextF_extension(w) (((XmDataFieldWidget)(w))->text.extension) +#define XmTextF_overstrike(w) (((XmDataFieldWidget)(w))->text.overstrike) +#define XmTextF_redisplay(w) (((XmDataFieldWidget)(w))->text.redisplay) +#define XmTextF_have_fontset(w) (((XmDataFieldWidget)(w))->text.have_fontset) +#ifdef USE_XFT +#define XmTextF_use_xft(w) (((XmDataFieldWidget)(w))->text.use_xft) +#define XmTextF_xft_font(w) (((XftFont*)((XmDataFieldWidget)(w))->text.font)) +#endif +#define XmTextF_changed_visible(w) (((XmDataFieldWidget)(w))->text.changed_visible) + +#define XmDataField_alignment(w) (((XmDataFieldWidget)(w))->data.alignment) +#define XmDataField_picture_source(w) (((XmDataFieldWidget)(w))->data.picture_source) +#define XmDataField_picture(w) (((XmDataFieldWidget)(w))->data.picture) +#define XmDataField_picture_state(w) (((XmDataFieldWidget)(w))->data.picture_state) +#define XmDataField_auto_fill(w) (((XmDataFieldWidget)(w))->data.auto_fill) +#define XmDataField_picture_error_cb(w) (((XmDataFieldWidget)(w))->data.picture_error_cb) +#define XmDataField_validate_cb(w) (((XmDataFieldWidget)(w))->data.validate_cb) + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XmDataFP_h */ diff --git a/libXm/osx/Xm/DataFSelP.h b/libXm/osx/Xm/DataFSelP.h new file mode 100644 index 0000000..af72f8a --- /dev/null +++ b/libXm/osx/Xm/DataFSelP.h @@ -0,0 +1,57 @@ +/* + * (c) Copyright 1989, 1990, 1991, 1992 OPEN SOFTWARE FOUNDATION, INC. + * ALL RIGHTS RESERVED +*/ +/* + * Motif Release 1.2 +*/ +/* $RCSfile: DataFSelP.h,v $ $Revision: 1.5 $ $Date: 2003/10/06 10:10:23 $ */ +/* +* (c) Copyright 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDataFSelP_h +#define _XmDataFSelP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** External (DataF.c) function declaration *******/ +#ifdef _NO_PROTO +extern Widget _XmDataFieldGetDropReciever() ; +#else +extern Widget _XmDataFieldGetDropReciever( Widget w ) ; +#endif /* _NO_PROTO */ + + +/******** Private Function Declarations ********/ +#ifdef _NO_PROTO + +extern Boolean _XmDataFieldConvert() ; +extern void _XmDataFieldLoseSelection() ; + +#else + +extern Boolean _XmDataFieldConvert( + Widget w, + Atom *selection, + Atom *target, + Atom *type, + XtPointer *value, + unsigned long *length, + int *format) ; +extern void _XmDataFieldLoseSelection( + Widget w, + Atom *selection) ; + +#endif /* _NO_PROTO */ +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDataFSelP_h */ +/* DON't ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DesktopP.h b/libXm/osx/Xm/DesktopP.h new file mode 100644 index 0000000..4c7ed5c --- /dev/null +++ b/libXm/osx/Xm/DesktopP.h @@ -0,0 +1,106 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DesktopP.h /main/10 1995/07/14 10:17:44 drk $ */ +/* +* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDesktopP_h +#define _XmDesktopP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsDesktopObject +#define XmIsDesktopObject(w) XtIsSubclass(w, xmDesktopClass) +#endif /* XmIsDesktopObject */ + +typedef struct _XmDesktopRec *XmDesktopObject; +typedef struct _XmDesktopClassRec *XmDesktopObjectClass; +externalref WidgetClass xmDesktopClass; + + +typedef struct _XmDesktopClassPart{ + WidgetClass child_class; + XtWidgetProc insert_child; /* physically add child to parent */ + XtWidgetProc delete_child; /* physically remove child */ + XtPointer extension; +}XmDesktopClassPart, *XmDesktopClassPartPtr; + +typedef struct _XmDesktopClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; +}XmDesktopClassRec; + +typedef struct { + Widget parent; + Widget *children; + Cardinal num_children; + Cardinal num_slots; +} XmDesktopPart, *XmDesktopPartPtr; + +externalref XmDesktopClassRec xmDesktopClassRec; + +typedef struct _XmDesktopRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; +}XmDesktopRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDesktopP_h */ diff --git a/libXm/osx/Xm/DestI.h b/libXm/osx/Xm/DestI.h new file mode 100644 index 0000000..5c393f4 --- /dev/null +++ b/libXm/osx/Xm/DestI.h @@ -0,0 +1,61 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: DestI.h /main/6 1995/07/14 10:18:13 drk $ */ +#ifndef _XmDestI_h +#define _XmDestI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for Dest.c ********/ + +extern void _XmSetDestination(Display *dpy, Widget w) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDestI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DialogS.h b/libXm/osx/Xm/DialogS.h new file mode 100644 index 0000000..b571a55 --- /dev/null +++ b/libXm/osx/Xm/DialogS.h @@ -0,0 +1,84 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DialogS.h /main/13 1995/07/14 10:18:50 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDialogShell_h +#define _XmDialogShell_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsDialogShell +#define XmIsDialogShell(w) XtIsSubclass(w, xmDialogShellWidgetClass) +#endif /* XmIsDialogShell */ + +externalref WidgetClass xmDialogShellWidgetClass; + +typedef struct _XmDialogShellClassRec * XmDialogShellWidgetClass; +typedef struct _XmDialogShellRec * XmDialogShellWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDialogShell( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DialogSEP.h b/libXm/osx/Xm/DialogSEP.h new file mode 100644 index 0000000..b473f35 --- /dev/null +++ b/libXm/osx/Xm/DialogSEP.h @@ -0,0 +1,108 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DialogSEP.h /main/10 1995/07/14 10:19:17 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDialogShellExtP_h +#define _XmDialogShellExtP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsDialogShellExt +#define XmIsDialogShellExt(w) XtIsSubclass(w, xmDialogShellExtObjectClass) +#endif /* XmIsDialogShellExt */ + +externalref WidgetClass xmDialogShellExtObjectClass; + +typedef struct _XmDialogShellExtClassRec *XmDialogShellExtObjectClass ; +typedef struct _XmDialogShellExtRec *XmDialogShellExtObject ; + + +typedef struct _XmDialogShellExtClassPart{ + XtPointer extension; /* Pointer to extension record */ +}XmDialogShellExtClassPart, *XmDialogShellExtClassPartPtr; + +typedef struct _XmDialogShellExtClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; + XmShellExtClassPart shell_class; + XmVendorShellExtClassPart vendor_class; + XmDialogShellExtClassPart dialog_class; +}XmDialogShellExtClassRec; + +typedef struct _XmDialogShellExtPart{ + int empty; +} XmDialogShellExtPart; + +externalref XmDialogShellExtClassRec xmDialogShellExtClassRec; + +typedef struct _XmDialogShellExtRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; + XmShellExtPart shell; + XmVendorShellExtPart vendor; + XmDialogShellExtPart dialog; +}XmDialogShellExtRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogShellExtP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DialogSP.h b/libXm/osx/Xm/DialogSP.h new file mode 100644 index 0000000..33b94be --- /dev/null +++ b/libXm/osx/Xm/DialogSP.h @@ -0,0 +1,131 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DialogSP.h /main/13 1995/07/14 10:19:42 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDialogShellP_h +#define _XmDialogShellP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The DialogShell instance record */ + +typedef struct +{ + /* internal fields */ + XtGrabKind grab_kind; + Position old_x, old_y; +} XmDialogShellPart; + + +/* Full instance record declaration */ + +typedef struct _XmDialogShellRec +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TransientShellPart transient; + XmDialogShellPart dialog; +} XmDialogShellRec; + +typedef struct _XmDialogShellWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TransientShellPart transient; + XmDialogShellPart dialog; +} XmDialogShellWidgetRec; + + + +/* DialogShell class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmDialogShellClassPart; + + +/* Full class record declaration */ + +typedef struct _XmDialogShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + TransientShellClassPart transient_shell_class; + XmDialogShellClassPart dialog_shell_part; +} XmDialogShellClassRec; + + +externalref XmDialogShellClassRec xmDialogShellClassRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DialogSavvyT.h b/libXm/osx/Xm/DialogSavvyT.h new file mode 100644 index 0000000..3742152 --- /dev/null +++ b/libXm/osx/Xm/DialogSavvyT.h @@ -0,0 +1,84 @@ +/* $XConsortium: DialogSavvyT.h /main/5 1995/07/15 20:50:29 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmDialogSavvyT_H +#define _XmDialogSavvyT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTdialogShellSavvy; +/* This trait also requires a resource named "defaultPosition". + If the child has the trait, the resource will be get and set by + the DialogShell ChangeManaged */ + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmDialogSavvyMapUnmapProc)(Widget wid, + Boolean map_unmap); + + +/* Version 0: initial release. */ + +typedef struct _XmDialogSavvyTraitRec { + int version; /* 0 */ + XmDialogSavvyMapUnmapProc callMapUnmapCB; +} XmDialogSavvyTraitRec,*XmDialogSavvyTrait; + + +/* This macro is part of the trait and is used for the following situation + DialogShells always mimic the child position on themselves. + If the SetValues on a bb child position was 0, + which is always the _current_ position of the bb in a DialogShell, + Xt does not see a change and therefore not trigerred a geometry request. + So BB (or any dialogShellSavvy child) has to catch this case + and change the position request to use a special value in its + SetValues method, XmDIALOG_SAVVY_FORCE_ORIGIN, to notify the Dialog that + it really wants to move in 0 */ + +#define XmDIALOG_SAVVY_FORCE_ORIGIN ((Position)~0L) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDialogSavvyT_H */ diff --git a/libXm/osx/Xm/Display.h b/libXm/osx/Xm/Display.h new file mode 100644 index 0000000..638c01f --- /dev/null +++ b/libXm/osx/Xm/Display.h @@ -0,0 +1,93 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Display.h /main/10 1995/07/14 10:20:21 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDisplay_h +#define _XmDisplay_h + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsDisplay +#define XmIsDisplay(w) (XtIsSubclass(w, xmDisplayClass)) +#endif /* XmIsXmDisplay */ + +enum { + XmDRAG_NONE, + XmDRAG_DROP_ONLY, + XmDRAG_PREFER_PREREGISTER, + XmDRAG_PREREGISTER, + XmDRAG_PREFER_DYNAMIC, + XmDRAG_DYNAMIC, + XmDRAG_PREFER_RECEIVER +}; + +/* Class record constants */ + +typedef struct _XmDisplayRec *XmDisplay; +typedef struct _XmDisplayClassRec *XmDisplayClass; +externalref WidgetClass xmDisplayClass; + +#define XmGetDisplay(w) XmGetXmDisplay(XtDisplayOfObject(w)) + +/******** Public Function Declarations ********/ + +extern Widget XmGetDragContext( + Widget w, + Time time) ; +extern Widget XmGetXmDisplay( + Display *display) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDisplay_h */ + + diff --git a/libXm/osx/Xm/DisplayI.h b/libXm/osx/Xm/DisplayI.h new file mode 100644 index 0000000..0106afc --- /dev/null +++ b/libXm/osx/Xm/DisplayI.h @@ -0,0 +1,90 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DisplayI.h /main/9 1995/07/14 10:20:35 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDisplayI_h +#define _XmDisplayI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmDisplayEventQueryStruct { + XmDisplay dd; + XmDragContext dc; + XmTopLevelEnterCallbackStruct *enterCB; + XmDragMotionCallbackStruct *motionCB; + XmTopLevelLeaveCallbackStruct *leaveCB; + XmDropStartCallbackStruct *dropStartCB; + Boolean hasEnter; + Boolean hasMotion; + Boolean hasLeave; + Boolean hasDropStart; +} XmDisplayEventQueryStruct; + + +/******** Private Function Declarations ********/ + +extern XmDropSiteManagerObject _XmGetDropSiteManagerObject( + XmDisplay xmDisplay) ; +extern unsigned char _XmGetDragProtocolStyle( + Widget w) ; +extern unsigned char _XmGetDragTrackingMode( + Widget w) ; +extern Widget _XmGetDragContextFromHandle( + Widget w, + Atom iccHandle) ; +extern WidgetClass _XmGetXmDisplayClass( void ) ; +extern WidgetClass _XmSetXmDisplayClass( + WidgetClass wc) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDisplayI_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/DisplayP.h b/libXm/osx/Xm/DisplayP.h new file mode 100644 index 0000000..c5aecb2 --- /dev/null +++ b/libXm/osx/Xm/DisplayP.h @@ -0,0 +1,174 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DisplayP.h /main/13 1996/11/21 11:32:08 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmDisplayP_h +#define _XmDisplayP_h + +#include +#include +#include +#include +#include + +/* A little incest */ +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef Widget (*XmDisplayGetDisplayProc)(Display *); + + +typedef struct { + XmDisplayGetDisplayProc GetDisplay; + XtPointer extension; +} XmDisplayClassPart; + +/* + * we make it a appShell subclass so it can have it's own instance + * hierarchy + */ +typedef struct _XmDisplayClassRec{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + TopLevelShellClassPart top_level_shell_class; + ApplicationShellClassPart application_shell_class; + XmDisplayClassPart display_class; +} XmDisplayClassRec; + +typedef struct _XmModalDataRec{ + Widget wid; + XmVendorShellExtObject ve; + XmVendorShellExtObject grabber; + Boolean exclusive; + Boolean springLoaded; +} XmModalDataRec, *XmModalData; + +typedef struct { + unsigned char dragInitiatorProtocolStyle; + unsigned char dragReceiverProtocolStyle; + + unsigned char userGrabbed; /* flag for menu vs dnd */ + + WidgetClass dragContextClass; + WidgetClass dropTransferClass; + WidgetClass dropSiteManagerClass; + XmDragContext activeDC; + XmDropSiteManagerObject dsm; + Time lastDragTime; + Window proxyWindow; + + XmModalData modals; + Cardinal numModals; + Cardinal maxModals; + XtPointer xmim_info; + + String bindingsString; + XmVKeyBindingRec *bindings; + XKeyEvent *lastKeyEvent; /* unused */ + unsigned char keycode_tag[XmKEYCODE_TAG_SIZE]; /* unused */ + + int shellCount; + XtPointer displayInfo; /* extension */ + XtPointer user_data; + int motif_version ; + XtEnum enable_warp ; + Cardinal num_bindings; + XtCallbackList dragStartCallback; + XtCallbackList noFontCallback; + XtCallbackList noRenditionCallback; + Boolean displayHasShapeExtension; + + XtEnum enable_btn1_transfer ; + Boolean enable_button_tab ; + Boolean enable_etched_in_menu; + Boolean default_button_emphasis; + Boolean enable_toggle_color; + Boolean enable_toggle_visual; + Boolean enable_drag_icon; + Boolean enable_unselectable_drag; + Boolean enable_thin_thickness; + Boolean enable_multi_key_bindings; +} XmDisplayPart, *XmDisplayPartPtr; + +typedef struct _XmDisplayInfo { + /* so much for information hiding */ + Cursor SashCursor; /* Sash.c */ + Widget destinationWidget; /* Dest.c */ + Cursor TearOffCursor; /* TearOff.c */ + XtPointer UniqueStamp; /* UniqueEvnt.c */ + XmExcludedParentPaneRec excParentPane;/* TearOff.c */ + unsigned short resetFocusFlag; /* TravAct.c */ + Boolean traversal_in_progress; /* Traversal.c */ +} XmDisplayInfo; + +typedef struct _XmDisplayRec{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TopLevelShellPart topLevel; + ApplicationShellPart application; + XmDisplayPart display; +} XmDisplayRec; + +externalref XmDisplayClassRec xmDisplayClassRec; + +externalref String _Xm_MOTIF_DRAG_AND_DROP_MESSAGE ; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDisplayP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/DragBSI.h b/libXm/osx/Xm/DragBSI.h new file mode 100644 index 0000000..4494884 --- /dev/null +++ b/libXm/osx/Xm/DragBSI.h @@ -0,0 +1,152 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragBSI.h /main/12 1998/03/18 15:10:55 csn $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDragBSI_h +#define _XmDragBSI_h + +#include +#include /* for CARD32, B32, etc. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * defalut values for XmNnumImportTargets and XmNimportTargets. + */ +#define _XmDefaultNumImportTargets 0; +#define _XmDefaultImportTargets NULL; + + +/* + * atoms and targets table structures + */ + +typedef struct { + Atom atom; + Time time; +} xmAtomsTableEntryRec, *xmAtomsTableEntry; + +typedef struct { + Cardinal numEntries; + xmAtomsTableEntry entries; +} xmAtomsTableRec, *xmAtomsTable; + +typedef struct { + Cardinal numTargets; + Atom *targets; +} xmTargetsTableEntryRec, *xmTargetsTableEntry; + +typedef struct { + Cardinal numEntries; + xmTargetsTableEntry entries; +} xmTargetsTableRec, *xmTargetsTable; + +/* + * The following are structures for property access. + * They must have 64-bit multiple lengths to support 64-bit architectures. + */ + +typedef struct { + CARD32 atom B32; + CARD16 name_length B16; + CARD16 pad B16; +} xmMotifAtomPairRec; + +typedef struct { + BYTE byte_order; + BYTE protocol_version; + CARD16 num_atom_pairs B16; + CARD32 heap_offset B32; + /* xmMotifAtomPairRec atomPairs[]; */ +} xmMotifAtomPairPropertyRec; + +typedef struct { + CARD32 atom B32; + CARD32 time B32; +} xmMotifAtomsTableRec; + +typedef struct { + BYTE byte_order; + BYTE protocol_version; + CARD16 num_atoms B16; + CARD32 heap_offset B32; + /* xmMotifAtomsTableRec atoms[]; */ +} xmMotifAtomsPropertyRec; + +typedef struct { + BYTE byte_order; + BYTE protocol_version; + CARD16 num_target_lists B16; + CARD32 heap_offset B32; +} xmMotifTargetsPropertyRec; + +/******** Private Function Declarations for DragBS.c ********/ + +extern void _XmInitTargetsTable( + Display *display) ; +extern void _XmClearDisplayTables (Display *display); +extern Cardinal _XmIndexToTargets( + Widget shell, + Cardinal t_index, + Atom **targetsRtn) ; +extern Cardinal _XmTargetsToIndex( + Widget shell, + Atom *targets, + Cardinal numTargets) ; +extern Atom _XmAllocMotifAtom( + Widget shell, + Time time) ; +extern void _XmFreeMotifAtom( + Widget shell, + Atom atom) ; +extern void _XmDestroyMotifWindow( + Display *dpy) ; +extern Window _XmGetDragProxyWindow( + Display *display) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragBSI_h */ diff --git a/libXm/osx/Xm/DragC.h b/libXm/osx/Xm/DragC.h new file mode 100644 index 0000000..21990c7 --- /dev/null +++ b/libXm/osx/Xm/DragC.h @@ -0,0 +1,259 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragC.h /main/13 1998/02/03 14:56:15 csn $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* $TOG: DragC.h /main/13 1998/02/03 14:56:15 csn $ */ + +#ifndef _XmDragController_h +#define _XmDragController_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* defines for the dragFinish completionStatus field */ + +#define XmHELP 2 + +/* + * Some global stuff that will go into Xm.h + */ +typedef unsigned int XmID; + +/*********************************************************************** + * + * DragContext + * + ***********************************************************************/ + +#ifndef XmIsDragContext +#define XmIsDragContext(w) XtIsSubclass(w,xmDragContextClass) +#endif /* XmIsDragContext */ + +#ifndef _XA_MOTIF_DROP +#define _XA_MOTIF_DROP "_MOTIF_DROP" +#define _XA_DRAG_FAILURE "_MOTIF_DRAG_FAILURE" +#define _XA_DRAG_SUCCESS "_MOTIF_DRAG_SUCCESS" +#endif /* _XA_MOTIF_DROP */ + + +/* enums used for the message_type in client messages */ + +enum{ XmTOP_LEVEL_ENTER, XmTOP_LEVEL_LEAVE, + XmDRAG_MOTION, XmDROP_SITE_ENTER, + XmDROP_SITE_LEAVE, XmDROP_START, + XmDROP_FINISH, XmDRAG_DROP_FINISH, + XmOPERATION_CHANGED + } ; + +/* enums for completionStatus */ +enum{ XmDROP, XmDROP_HELP, + XmDROP_CANCEL, XmDROP_INTERRUPT + } ; + +/* values for operation */ +#define XmDROP_NOOP 0L +#define XmDROP_MOVE (1L << 0) +#define XmDROP_COPY (1L << 1) +#define XmDROP_LINK (1L << 2) + +enum{ XmMOVE = XmDROP_MOVE, XmCOPY = XmDROP_COPY, + XmLINK = XmDROP_LINK, XmOTHER + } ; + +enum{ XmBLEND_ALL, XmBLEND_STATE_SOURCE, + XmBLEND_JUST_SOURCE, XmBLEND_NONE + } ; + +enum{ XmDROP_FAILURE, XmDROP_SUCCESS + } ; + + +/* enums used for the public callback reason */ + +enum{ XmCR_TOP_LEVEL_ENTER, XmCR_TOP_LEVEL_LEAVE, + XmCR_DRAG_MOTION, XmCR_DROP_SITE_ENTER, + XmCR_DROP_SITE_LEAVE, XmCR_DROP_START, + XmCR_DROP_FINISH, XmCR_DRAG_DROP_FINISH, + XmCR_OPERATION_CHANGED, + + _XmNUMBER_DND_CB_REASONS + } ; + + +/* Class record constants */ +typedef struct _XmDragContextClassRec *XmDragContextClass; +typedef struct _XmDragContextRec *XmDragContext; +externalref WidgetClass xmDragContextClass; + +typedef struct _XmAnyICCCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; +}XmAnyICCCallbackStruct, *XmAnyICCCallback; + +typedef struct _XmTopLevelEnterCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + Screen *screen; + /* + * the window field is different if this is an outbound or inbound + * callback. Outbound == reciever, Inbound == initiator. + */ + Window window; + Position x, y; + unsigned char dragProtocolStyle; + Atom iccHandle; +}XmTopLevelEnterCallbackStruct, *XmTopLevelEnterCallback; + +typedef struct _XmTopLevelLeaveCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + Screen *screen; + Window window; +}XmTopLevelLeaveCallbackStruct, *XmTopLevelLeaveCallback; + +/* + * this message is sent from the receiver to the initiator to + * indicate that the motion message with the associated timestamp has + * caused a drop-site to be entered + */ +typedef struct _XmDropSiteEnterCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + Position x, y; +}XmDropSiteEnterCallbackStruct, *XmDropSiteEnterCallback; + +/* + * this message is sent from the receiver to the initiator to + * indicate that the motion message with the associated timestamp has + * caused a drop-site to be left + */ +typedef struct _XmDropSiteLeaveCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; +}XmDropSiteLeaveCallbackStruct, *XmDropSiteLeaveCallback; + +typedef struct _XmDragMotionCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + Position x, y; +}XmDragMotionCallbackStruct, *XmDragMotionCallback; + +typedef struct _XmOperationChangedCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; +}XmOperationChangedCallbackStruct, *XmOperationChangedCallback; + +typedef struct _XmDropStartCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + unsigned char dropAction; + Position x, y; + Window window; + Atom iccHandle; +}XmDropStartCallbackStruct, *XmDropStartCallback; + +typedef struct _XmDropFinishCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + unsigned char operation; + unsigned char operations; + unsigned char dropSiteStatus; + unsigned char dropAction; + unsigned char completionStatus; +}XmDropFinishCallbackStruct, *XmDropFinishCallback; + +typedef struct _XmDragDropFinishCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; +}XmDragDropFinishCallbackStruct, *XmDragDropFinishCallback; + + +/******** Public Function Declarations ********/ + +extern Widget XmDragStart( + Widget w, + XEvent *event, + ArgList args, + Cardinal numArgs) ; +extern void XmDragCancel( + Widget dragContext) ; +extern Boolean XmTargetsAreCompatible( + Display *dpy, + Atom *exportTargets, + Cardinal numExportTargets, + Atom *importTargets, + Cardinal numImportTargets) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _DragController_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DragCI.h b/libXm/osx/Xm/DragCI.h new file mode 100644 index 0000000..889ff1e --- /dev/null +++ b/libXm/osx/Xm/DragCI.h @@ -0,0 +1,174 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragCI.h /main/10 1995/07/14 10:22:36 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragCI_h +#define _XmDragCI_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define _XmDragStart(dc, srcW, event) \ + ((*((XmDragContextClass)XtClass(dc))->drag_class.start) (dc, srcW, event)) + +#define _XmDragCancel(dc) \ + ((*((XmDragContextClass)XtClass(dc))->drag_class.cancel) (dc)) + +#define _XmDCtoDD(dc) ((XmDisplay)XtParent(dc)) + +#define _XmDRAG_MASK_BASE \ + (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask) +#ifdef DRAG_USE_MOTION_HINTS +#define _XmDRAG_GRAB_MASK \ + (_XmDRAG_MASK_BASE PointerMotionHintMask) +#else +#define _XmDRAG_GRAB_MASK _XmDRAG_MASK_BASE +#endif /* _XmDRAG_USE_MOTION_HINTS */ + +#define _XmDRAG_EVENT_MASK(dc) \ + ((((XmDragContext)dc)->drag.trackingMode == XmDRAG_TRACK_WM_QUERY) \ + ? (_XmDRAG_GRAB_MASK | EnterWindowMask | LeaveWindowMask) \ + : (_XmDRAG_GRAB_MASK)) + +enum{ XmCR_DROP_SITE_TREE_ADD = _XmNUMBER_DND_CB_REASONS, + XmCR_DROP_SITE_TREE_REMOVE + } ; +/* + * values for dragTrackingMode + */ +enum { + XmDRAG_TRACK_WM_QUERY, XmDRAG_TRACK_MOTION, XmDRAG_TRACK_WM_QUERY_PENDING +}; + + +/* Strings to use for the intern atoms */ +typedef String XmCanonicalString; + +#define XmMakeCanonicalString( s) \ + (XmCanonicalString) XrmQuarkToString(XrmStringToQuark(s)) + +#define _XmAllocAndCopy( data, len) \ + memcpy((XtPointer) XtMalloc(len), (XtPointer)(data), (len)) + + +typedef struct _XmDragTopLevelClientDataStruct{ + Widget destShell; + Position xOrigin, yOrigin; + Dimension width, height; + XtPointer iccInfo; + Boolean sourceIsExternal; + Window window; + Widget dragOver; +} XmDragTopLevelClientDataStruct, *XmDragTopLevelClientData; + +typedef struct _XmDragMotionClientDataStruct{ + Window window; + Widget dragOver; +} XmDragMotionClientDataStruct, *XmDragMotionClientData; + + +/* + * dsm to dragDisplay comm + */ +/* Move to DropSMgrI.h */ +typedef struct _XmDropSiteTreeAddCallbackStruct{ + int reason; + XEvent *event; + Widget rootShell; + Cardinal numDropSites; + Cardinal numArgsPerDSHint; +} XmDropSiteTreeAddCallbackStruct, *XmDropSiteTreeAddCallback; + +/* Move to DropSMgrI.h */ +typedef struct _XmDropSiteTreeRemoveCallbackStruct{ + int reason; + XEvent *event; + Widget rootShell; +} XmDropSiteTreeRemoveCallbackStruct, *XmDropSiteTreeRemoveCallback; + +/* Move to DropSMgrI.h */ +typedef struct _XmDropSiteTreeUpdateCallbackStruct{ + int reason; + XEvent *event; + Widget rootShell; + Cardinal numDropSites; + Cardinal numArgsPerDSHint; +} XmDropSiteTreeUpdateCallbackStruct, *XmDropSiteTreeUpdateCallback; + +typedef struct _XmDropSiteEnterPendingCallbackStruct{ + int reason; + XEvent *event; + Time timeStamp; + Boolean enter_pending; +} XmDropSiteEnterPendingCallbackStruct, *XmDropSiteEnterPendingCallback; + +/* Move to DropSMgrI.h */ +typedef struct _XmAnimationData { + Widget dragOver; + Window window; + Position windowX, windowY; + Screen *screen; + XmRegion clipRegion; + XmRegion dropSiteRegion; + XtPointer saveAddr; +} XmAnimationDataRec, *XmAnimationData; + + +/******** Private Function Declarations ********/ + +extern XmDragReceiverInfo _XmAllocReceiverInfo( + XmDragContext dc) ; +extern unsigned char _XmGetActiveProtocolStyle( + Widget w) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragCI_h */ diff --git a/libXm/osx/Xm/DragCP.h b/libXm/osx/Xm/DragCP.h new file mode 100644 index 0000000..ea0e7ce --- /dev/null +++ b/libXm/osx/Xm/DragCP.h @@ -0,0 +1,200 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragCP.h /main/12 1996/10/17 16:45:27 cde-osf $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragCP_h +#define _XmDragCP_h + +#include +#include + +#include +#include + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** + * + * DragContext (RootWrapper) Widget Private Data + * + ***********************************************************************/ + +typedef void (*XmDragStartProc)( XmDragContext, Widget, XEvent *); +typedef void (*XmDragCancelProc)( XmDragContext) ; + + +typedef struct { + XmDragStartProc start; + XmDragCancelProc cancel; + XtPointer extension; +} XmDragContextClassPart; + +typedef struct _XmDragContextClassRec { + CoreClassPart core_class; + XmDragContextClassPart drag_class; +} XmDragContextClassRec; + +externalref XmDragContextClassRec xmDragContextClassRec; + +#define XtDragByPoll 0 +#define XtDragByEvent 1 + +typedef struct { + Window frame; + Window window; + Widget shell; + unsigned char flags; + unsigned char dragProtocolStyle; + int xOrigin, yOrigin; + unsigned int width, height; + unsigned int depth; + XtPointer iccInfo; +} XmDragReceiverInfoStruct, *XmDragReceiverInfo; + + +typedef union _XmConvertSelectionRec + { + XtConvertSelectionIncrProc sel_incr ; + XtConvertSelectionProc sel ; + } XmConvertSelectionRec ; + + +typedef struct _XmDragContextPart{ + /**** resources ****/ + + Atom *exportTargets; + Cardinal numExportTargets; + XmConvertSelectionRec convertProc; + XtPointer clientData; + XmDragIconObject sourceCursorIcon; + XmDragIconObject stateCursorIcon; + XmDragIconObject operationCursorIcon; + XmDragIconObject sourcePixmapIcon; + Pixel cursorBackground; + Pixel cursorForeground; + Pixel validCursorForeground; + Pixel invalidCursorForeground; + Pixel noneCursorForeground; + XtCallbackList dragMotionCallback; + XtCallbackList operationChangedCallback; + XtCallbackList siteEnterCallback; + XtCallbackList siteLeaveCallback; + XtCallbackList topLevelEnterCallback; + XtCallbackList topLevelLeaveCallback; + XtCallbackList dropStartCallback; + XtCallbackList dropFinishCallback; + XtCallbackList dragDropFinishCallback; + unsigned char dragOperations; + Boolean incremental; + unsigned char blendModel; + + /* private resources */ + Window srcWindow; + Time dragStartTime; + Atom iccHandle; + Widget sourceWidget; + Boolean sourceIsExternal; + + /**** instance data ****/ + Boolean topWindowsFetched; + unsigned char commType; + unsigned char animationType; + + unsigned char operation; + unsigned char operations; + unsigned int lastEventState; + unsigned char dragCompletionStatus; + unsigned char dragDropCompletionStatus; + Boolean forceIPC; + Boolean serverGrabbed; + Boolean useLocal; + Boolean inDropSite; + XtIntervalId dragTimerId; + + Time roundOffTime; + Time lastChangeTime; + Time crossingTime; + + Time dragFinishTime; + Time dropFinishTime; + + Atom dropSelection; + Widget srcShell; + Position startX, startY; + + XmID siteID; + + Screen *currScreen; + Window currWmRoot; + XmDragOverShellWidget curDragOver; + XmDragOverShellWidget origDragOver; + + XmDragReceiverInfoStruct *currReceiverInfo; + XmDragReceiverInfoStruct *rootReceiverInfo; + XmDragReceiverInfoStruct *receiverInfos; + Cardinal numReceiverInfos; + Cardinal maxReceiverInfos; + + unsigned char trackingMode; + unsigned char activeProtocolStyle; + unsigned char activeBlendModel; + Boolean dragDropCancelEffect; + long SaveEventMask; /* Save the current root eventMask so that D&D works for MWM */ +} XmDragContextPart; + + +typedef struct _XmDragContextRec{ + CorePart core; + XmDragContextPart drag; +} XmDragContextRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragCP_h */ diff --git a/libXm/osx/Xm/DragDrop.h b/libXm/osx/Xm/DragDrop.h new file mode 100644 index 0000000..794924a --- /dev/null +++ b/libXm/osx/Xm/DragDrop.h @@ -0,0 +1,52 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragDrop.h /main/9 1998/02/23 10:33:54 cshi $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragDrop_h +#define _XmDragDrop_h + +#include +#include +#include +#include +#include +#include + +#endif /* _XmDragDrop_h */ diff --git a/libXm/osx/Xm/DragICCI.h b/libXm/osx/Xm/DragICCI.h new file mode 100644 index 0000000..883edf7 --- /dev/null +++ b/libXm/osx/Xm/DragICCI.h @@ -0,0 +1,580 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragICCI.h /main/14 1997/06/18 17:38:28 samborn $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragICCI_h +#define _XmDragICCI_h + +#include +#include +#include +#include "DragCI.h" +#include "DropSMgrI.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * Xm ICC internal definitions + * + */ + +#define MAXSHORT 32767 +#define MINSHORT -MAXSHORT + +/* + * Swap the byte order of 4- and 2- byte quantities. + * These macros work for bitfields. + */ + +#define swap4bytes(l) {\ + struct {\ + unsigned t :32;\ + } bit32;\ + char n, *tp = (char *) &bit32;\ + bit32.t = l;\ + n = tp[0]; tp[0] = tp[3]; tp[3] = n;\ + n = tp[1]; tp[1] = tp[2]; tp[2] = n;\ + l = bit32.t;\ +} + +#define swap2bytes(s) {\ + struct {\ + unsigned t :16;\ + } bit16;\ + char n, *tp = (char *) &bit16;\ + bit16.t = s;\ + n = tp[0]; tp[0] = tp[1]; tp[1] = n;\ + s = bit16.t;\ +} + + + +typedef struct { +/* the message type field contains the following: + * + * 80 originator + * 7F message_type + */ + + BYTE message_type; + BYTE byte_order; +/* + * the flags field contains the following: + * + * 000F operation + * 00F0 dropSiteStatus + * 0F00 operations + * F000 completionStatus + */ + CARD16 flags B16; + CARD32 time B32; +}xmICCAnyMessageStruct, *xmICCAnyMessage; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; + CARD32 src_window B32; + CARD32 icc_handle B32; +}xmICCTopLevelEnterMessageStruct; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; + CARD32 src_window B32; +}xmICCTopLevelLeaveMessageStruct; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; + INT16 x B16; + INT16 y B16; +}xmICCDragMotionMessageStruct; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; +}xmICCOperationChangedMessageStruct; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; + INT16 x B16; + INT16 y B16; +}xmICCDropSiteEnterMessageStruct; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; +}xmICCDropSiteLeaveMessageStruct; + +typedef struct { + BYTE message_type; + BYTE byte_order; + CARD16 flags B16; + CARD32 time B32; + INT16 x B16; + INT16 y B16; + CARD32 icc_handle B32; + CARD32 src_window B32; +}xmICCDropMessageStruct; + +typedef union _xmICCMessageStruct{ + xmICCAnyMessageStruct any; + xmICCTopLevelEnterMessageStruct topLevelEnter; + xmICCTopLevelLeaveMessageStruct topLevelLeave; + xmICCDragMotionMessageStruct dragMotion; + xmICCOperationChangedMessageStruct operationChanged; + xmICCDropSiteEnterMessageStruct dropSiteEnter; + xmICCDropSiteLeaveMessageStruct dropSiteLeave; + xmICCDropMessageStruct drop; +}xmICCMessageStruct, *xmICCMessage; + + +typedef union _XmICCCallbackStruct{ + XmAnyICCCallbackStruct any; + XmTopLevelEnterCallbackStruct topLevelEnter; + XmTopLevelLeaveCallbackStruct topLevelLeave; + XmDragMotionCallbackStruct dragMotion; + XmOperationChangedCallbackStruct operationChanged; + XmDropSiteEnterCallbackStruct dropSiteEnter; + XmDropSiteLeaveCallbackStruct dropSiteLeave; + XmDropSiteTreeAddCallbackStruct dropSiteTreeAdd; + XmDropSiteTreeRemoveCallbackStruct dropSiteTreeRemove; + XmDropSiteTreeUpdateCallbackStruct dropSiteTreeUpdate; +}XmICCCallbackStruct, *XmICCCallback; + +typedef struct _xmByteBufRec{ + BYTE *bytes; + BYTE *stack; + BYTE *curr; + size_t size; + Cardinal max; +}xmByteBufRec; + +typedef struct _xmPropertyBufferRec{ + xmByteBufRec data; + xmByteBufRec heap; +}xmPropertyBufferRec, *xmPropertyBuffer; + +/* for argument passing between DropSite and ICC routines */ + +typedef struct _XmICCDropSiteHeaderRec { + unsigned char dropType; + unsigned char dropActivity; + unsigned char traversalType; + unsigned char operations; + unsigned char animationStyle; + unsigned short importTargetsID; + XmRegion region; +} XmICCDropSiteHeaderRec, *XmICCDropSiteHeader; + +typedef struct _XmICCDropSiteNoneDataRec { + Dimension borderWidth; +} XmICCDropSiteNoneDataRec, *XmICCDropSiteNoneData; + +typedef struct _XmICCDropSiteHighlightDataRec { + Dimension borderWidth; + Dimension highlightThickness; + Pixel background; + Pixel highlightColor; + Pixmap highlightPixmap; +} XmICCDropSiteHighlightDataRec, *XmICCDropSiteHighlightData; + +typedef struct _XmICCDropSiteShadowDataRec { + Dimension borderWidth; + Dimension highlightThickness; + Dimension shadowThickness; + Pixel foreground; + Pixel topShadowColor; + Pixmap topShadowPixmap; + Pixel bottomShadowColor; + Pixmap bottomShadowPixmap; +} XmICCDropSiteShadowDataRec, *XmICCDropSiteShadowData; + +typedef struct _XmICCDropSitePixmapDataRec { + Dimension borderWidth; + Dimension highlightThickness; + Dimension shadowThickness; + Pixel foreground; + Pixel background; + Pixmap animationPixmap; + Cardinal animationPixmapDepth; + Pixmap animationMask; +} XmICCDropSitePixmapDataRec, *XmICCDropSitePixmapData; + +typedef struct _XmICCDropSiteNoneRec { + XmICCDropSiteHeaderRec header; + XmICCDropSiteNoneDataRec animation_data; +} XmICCDropSiteNoneRec, *XmICCDropSiteNone; + +typedef struct _XmICCDropSiteHighlightRec { + XmICCDropSiteHeaderRec header; + XmICCDropSiteHighlightDataRec animation_data; +} XmICCDropSiteHighlightRec, *XmICCDropSiteHighlight; + +typedef struct _XmICCDropSiteShadowRec { + XmICCDropSiteHeaderRec header; + XmICCDropSiteShadowDataRec animation_data; +} XmICCDropSiteShadowRec, *XmICCDropSiteShadow; + +typedef struct _XmICCDropSitePixmapRec { + XmICCDropSiteHeaderRec header; + XmICCDropSitePixmapDataRec animation_data; +} XmICCDropSitePixmapRec, *XmICCDropSitePixmap; + +typedef union _XmICCDropSiteInfoStruct { + XmICCDropSiteHeaderRec header; + XmICCDropSiteHighlightRec highlightDS; + XmICCDropSiteShadowRec shadowDS; + XmICCDropSitePixmapRec pixmapDS; +} XmICCDropSiteInfoStruct, *XmICCDropSiteInfo; + +typedef struct _XmReceiverDSTreeStruct{ + xmPropertyBufferRec propBufRec; + unsigned char byteOrder; + Cardinal numDropSites; + Cardinal currDropSite; +}XmReceiverDSTreeStruct, *XmReceiverDSTree; + +/* + * The following structures are for property access. + * They must have 64-bit multiple lengths to support 64-bit architectures. + */ + +typedef struct _xmDragInitiatorInfoStruct{ + BYTE byte_order; + BYTE protocol_version; + CARD16 targets_index B16; + CARD32 icc_handle B32; +}xmDragInitiatorInfoStruct; + +typedef struct _xmDragReceiverInfoStruct{ + BYTE byte_order; + BYTE protocol_version; + BYTE drag_protocol_style; + BYTE pad1; + CARD32 proxy_window B32; + CARD16 num_drop_sites B16; + CARD16 pad2 B16; + CARD32 heap_offset B32; +}xmDragReceiverInfoStruct; + +typedef struct { + INT16 x1 B16; + INT16 x2 B16; + INT16 y1 B16; + INT16 y2 B16; +}xmICCRegBoxRec; + +typedef struct _xmDSHeaderStruct{ +/* + * the flags field contains the following: + * + * 0003 traversalType + * 000C dropActivity + * 00F0 dropType + * 0F00 operations + * F000 animationStyle + */ + CARD16 flags B16; + CARD16 import_targets_id B16; + CARD32 dsRegionNumBoxes B32; +}xmDSHeaderStruct, *xmDSHeader; + +typedef struct _xmDSNoneDataStruct{ + CARD16 borderWidth B16; + CARD16 pad1 B16; + CARD32 pad2 B32; +}xmDSNoneDataStruct, *xmDSNoneData; + +typedef struct _xmDSHighlightDataStruct{ + CARD16 borderWidth B16; + CARD16 highlightThickness B16; + + CARD32 background B32; + CARD32 highlightColor B32; + CARD32 highlightPixmap B32; +}xmDSHighlightDataStruct, *xmDSHighlightData; + +typedef struct _xmDSShadowDataStruct{ + CARD16 borderWidth B16; + CARD16 highlightThickness B16; + CARD16 shadowThickness B16; + CARD16 pad1 B16; + + CARD32 foreground B32; + CARD32 topShadowColor B32; + CARD32 bottomShadowColor B32; + CARD32 topShadowPixmap B32; + CARD32 bottomShadowPixmap B32; + CARD32 pad2 B32; +}xmDSShadowDataStruct, *xmDSShadowData; + +typedef struct _xmDSPixmapDataStruct{ + CARD16 borderWidth B16; + CARD16 highlightThickness B16; + CARD16 shadowThickness B16; + CARD16 animationPixmapDepth B16; + + CARD32 foreground B32; + CARD32 background B32; + CARD32 animationPixmap B32; + CARD32 animationMask B32; +}xmDSPixmapDataStruct, *xmDSPixmapData; + + +/* Macros for the manipulation of ICCmessages and xmDSData */ + +#define _XM_TRAVERSAL_TYPE_MASK ((CARD16) 0x0003) +#define _XM_TRAVERSAL_TYPE_SHIFT 0 + +#define _XM_DS_ACTIVITY_MASK ((CARD16) 0x000C) +#define _XM_DS_ACTIVITY_SHIFT 2 + +#define _XM_DND_OPERATION_MASK ((CARD16) 0x000F) +#define _XM_DND_OPERATION_SHIFT 0 + +#define _XM_DND_SITE_STATUS_MASK ((CARD16) 0x00F0) +#define _XM_DND_SITE_STATUS_SHIFT 4 + +#define _XM_DS_TYPE_MASK ((CARD16) 0x00F0) +#define _XM_DS_TYPE_SHIFT 4 + +#define _XM_DND_MULTIOPS_MASK ((CARD16) 0x0F00) +#define _XM_DND_MULTIOPS_SHIFT 8 + +#define _XM_DND_COMPLETION_MASK ((CARD16) 0xF000) +#define _XM_DND_COMPLETION_SHIFT 12 + +#define _XM_ANIMATION_STYLE_MASK ((CARD16) 0xF000) +#define _XM_ANIMATION_STYLE_SHIFT 12 + +#define GET_OPERATION(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_DND_OPERATION_MASK) >> _XM_DND_OPERATION_SHIFT)) + +#define PUT_OPERATION(operation) \ + (((CARD16)(operation) << _XM_DND_OPERATION_SHIFT)\ + & _XM_DND_OPERATION_MASK) + +#define GET_SITE_STATUS(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_DND_SITE_STATUS_MASK) >> _XM_DND_SITE_STATUS_SHIFT)) + +#define PUT_SITE_STATUS(site_status) \ + (((CARD16)(site_status) << _XM_DND_SITE_STATUS_SHIFT)\ + & _XM_DND_SITE_STATUS_MASK) + +#define GET_MULTIOPS(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_DND_MULTIOPS_MASK) >> _XM_DND_MULTIOPS_SHIFT)) + +#define PUT_MULTIOPS(operation) \ + (((CARD16)(operation) << _XM_DND_MULTIOPS_SHIFT)\ + & _XM_DND_MULTIOPS_MASK) + +#define GET_COMPLETION(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_DND_COMPLETION_MASK) >> _XM_DND_COMPLETION_SHIFT)) + +#define PUT_COMPLETION(completion) \ + (((CARD16)(completion) << _XM_DND_COMPLETION_SHIFT)\ + & _XM_DND_COMPLETION_MASK) + +#define GET_TRAVERSAL_TYPE(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_TRAVERSAL_TYPE_MASK) >> _XM_TRAVERSAL_TYPE_SHIFT)) + +#define PUT_TRAVERSAL_TYPE(traversal_type) \ + (((CARD16)(traversal_type) << _XM_TRAVERSAL_TYPE_SHIFT)\ + & _XM_TRAVERSAL_TYPE_MASK) + +#define GET_DS_TYPE(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_DS_TYPE_MASK) >> _XM_DS_TYPE_SHIFT)) + +#define PUT_DS_TYPE(ds_type) \ + (((CARD16)(ds_type) << _XM_DS_TYPE_SHIFT)\ + & _XM_DS_TYPE_MASK) + +#define GET_DS_ACTIVITY(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_DS_ACTIVITY_MASK) >> _XM_DS_ACTIVITY_SHIFT)) + +#define PUT_DS_ACTIVITY(ds_activity) \ + (((CARD16)(ds_activity) << _XM_DS_ACTIVITY_SHIFT)\ + & _XM_DS_ACTIVITY_MASK) + +#define GET_ANIMATION_STYLE(flags) \ + ((unsigned char) \ + ((int)((flags) & _XM_ANIMATION_STYLE_MASK) >> _XM_ANIMATION_STYLE_SHIFT)) + +#define PUT_ANIMATION_STYLE(animation_style) \ + (((CARD16)(animation_style) << _XM_ANIMATION_STYLE_SHIFT)\ + & _XM_ANIMATION_STYLE_MASK) + + +/* + * We consume the high order bit of the messageType in order + * to indicate whether this is an initiator generated event + * or a receiver generated event. + * + * This is all wrapped in macros in case we want to use more bits + * later. + */ + +typedef enum { + XmICC_INITIATOR_EVENT, + XmICC_RECEIVER_EVENT +} XmICCEventType; + +#define _XM_ICC_EVENT_TYPE_MASK ((BYTE)0x80) +#define _XM_ICC_EVENT_TYPE_SHIFT 7 + +#define GET_ICC_EVENT_TYPE(type) \ + ((XmICCEventType) \ + ((int)((type) & _XM_ICC_EVENT_TYPE_MASK) >> _XM_ICC_EVENT_TYPE_SHIFT)) + +#define PUT_ICC_EVENT_TYPE(type) \ + (((BYTE)(type) << _XM_ICC_EVENT_TYPE_SHIFT) \ + & _XM_ICC_EVENT_TYPE_MASK) + +#define CLEAR_ICC_EVENT_TYPE ((BYTE)0x7F) + + +#define _MOTIF_DRAG_PROTOCOL_VERSION (BYTE)0 + + +externalref unsigned char _XmByteOrderChar; + + +/******** Private Function Declarations ********/ + +extern unsigned char _XmReasonToMessageType( + int reason) ; +extern unsigned int _XmMessageTypeToReason( +#if NeedWidePrototypes + unsigned int messageType) ; +#else + unsigned char messageType) ; +#endif /* NeedWidePrototypes */ +extern void _XmICCCallbackToICCEvent( + Display *display, + Window window, + XmICCCallback callback, + XClientMessageEvent *cmev, + XmICCEventType type) ; +extern void _XmSendICCCallback( + Display *display, + Window window, + XmICCCallback callback, + XmICCEventType type) ; +extern Boolean _XmICCEventToICCCallback( + XClientMessageEvent *msgEv, + XmICCCallback callback, + XmICCEventType type) ; +extern CARD16 _XmReadDragBuffer( + xmPropertyBuffer propBuf, +#if NeedWidePrototypes + int which, +#else + BYTE which, +#endif /* NeedWidePrototypes */ + BYTE *ptr, + CARD32 size) ; +extern CARD16 _XmWriteDragBuffer( + xmPropertyBuffer propBuf, +#if NeedWidePrototypes + int which, +#else + BYTE which, +#endif /* NeedWidePrototypes */ + BYTE *ptr, + CARD32 size) ; +extern void _XmWriteInitiatorInfo( + Widget dc) ; +extern void _XmReadInitiatorInfo( + Widget dc) ; +extern Boolean _XmGetDragReceiverInfo( + Display *display, + Window window, + XmDragReceiverInfoStruct *receiverInfoRtn) ; +extern Boolean _XmReadDSFromStream( + XmDropSiteManagerObject dsm, + XtPointer iccInfo, + XmICCDropSiteInfo dropSiteInfoRtn) ; +extern void _XmWriteDSToStream( + XmDropSiteManagerObject dsm, + XtPointer stream, + XmICCDropSiteInfo dropSiteInfo) ; +extern void _XmFreeDragReceiverInfo( + XtPointer info) ; +extern void _XmClearDragReceiverInfo( + Widget shell) ; +extern void _XmSetDragReceiverInfo( + XmDisplay dd, + Widget shell) ; +extern void _XmInitByteOrderChar( void ) ; + +/******** End Private Function Declarations ********/ + +#define _XmInitDragICC(dd) _XmInitByteOrderChar() + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragICCI_h */ diff --git a/libXm/osx/Xm/DragIcon.h b/libXm/osx/Xm/DragIcon.h new file mode 100644 index 0000000..a89de60 --- /dev/null +++ b/libXm/osx/Xm/DragIcon.h @@ -0,0 +1,87 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DragIcon.h /main/12 1997/03/04 14:19:39 dbl $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragIcon_h +#define _XmDragIcon_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmIsDragIconObjectClass(w) (XtIsSubclass(w, xmDragIconObjectClass)) + +enum { + XmATTACH_NORTH_WEST, + XmATTACH_NORTH, + XmATTACH_NORTH_EAST, + XmATTACH_EAST, + XmATTACH_SOUTH_EAST, + XmATTACH_SOUTH, + XmATTACH_SOUTH_WEST, + XmATTACH_WEST, + XmATTACH_CENTER, + XmATTACH_HOT +}; + +typedef struct _XmDragIconRec *XmDragIconObject; +typedef struct _XmDragIconClassRec *XmDragIconObjectClass; +externalref WidgetClass xmDragIconObjectClass; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDragIcon( + Widget parent, + String name, + ArgList argList, + Cardinal argCount) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragIcon_h */ diff --git a/libXm/osx/Xm/DragIconI.h b/libXm/osx/Xm/DragIconI.h new file mode 100644 index 0000000..9616cc4 --- /dev/null +++ b/libXm/osx/Xm/DragIconI.h @@ -0,0 +1,67 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: DragIconI.h /main/6 1995/07/14 10:25:29 drk $ */ +#ifndef _XmDragIconI_h +#define _XmDragIconI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmDestroyDefaultDragIcon(XmDragIconObject icon) ; +extern Boolean _XmDragIconIsDirty(XmDragIconObject icon) ; +extern void _XmDragIconClean(XmDragIconObject icon1, + XmDragIconObject icon2, + XmDragIconObject icon3) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragIconI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DragIconP.h b/libXm/osx/Xm/DragIconP.h new file mode 100644 index 0000000..f1a1766 --- /dev/null +++ b/libXm/osx/Xm/DragIconP.h @@ -0,0 +1,98 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragIconP.h /main/11 1995/07/14 10:25:42 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDragIconP_h +#define _XmDragIconP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef void (*XmCloneVisualProc) (XmDragIconObject, Widget, Widget); +typedef void (*XmMovePixmapProc) (XmDragIconObject, + XmDragIconObject, + XmDragIconObject, +#if NeedWidePrototypes + int, int); +#else + Position, Position); +#endif /* NeedWidePrototypes */ + +typedef struct { + XtPointer extension; +} XmDragIconClassPart; + +typedef struct _XmDragIconClassRec{ + RectObjClassPart rectangle_class; + XmDragIconClassPart dragIcon_class; +} XmDragIconClassRec; + +typedef struct { + Cardinal depth; + Pixmap pixmap; + Dimension width, height; + Pixmap mask; + Position hot_x, hot_y; + Position offset_x, offset_y; + unsigned char attachment; + Boolean isDirty; + Region region; + Region restore_region; + Position x_offset, y_offset; +} XmDragIconPart, *XmDragIconPartPtr; + +externalref XmDragIconClassRec xmDragIconClassRec; + +typedef struct _XmDragIconRec{ + ObjectPart object; + RectObjPart rectangle; + XmDragIconPart drag; +} XmDragIconRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragIconP_h */ diff --git a/libXm/osx/Xm/DragOverS.h b/libXm/osx/Xm/DragOverS.h new file mode 100644 index 0000000..73f63a1 --- /dev/null +++ b/libXm/osx/Xm/DragOverS.h @@ -0,0 +1,73 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragOverS.h /main/9 1995/07/14 10:26:11 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragOverS_h +#define _XmDragOverS_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** + * + * DragOverShell Widget + * + ***********************************************************************/ + +/* Class record constants */ + +typedef struct _XmDragOverShellRec *XmDragOverShellWidget; +typedef struct _XmDragOverShellClassRec *XmDragOverShellWidgetClass; + +externalref WidgetClass xmDragOverShellWidgetClass; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragOverS_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/DragOverSI.h b/libXm/osx/Xm/DragOverSI.h new file mode 100644 index 0000000..586a827 --- /dev/null +++ b/libXm/osx/Xm/DragOverSI.h @@ -0,0 +1,115 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: DragOverSI.h /main/6 1995/07/14 10:26:24 drk $ */ +#ifndef _XmDragOverSI_h +#define _XmDragOverSI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for DragOverS.c ********/ + +extern void _XmDragOverHide( + Widget w, +#if NeedWidePrototypes + int clipOriginX, + int clipOriginY, +#else + Position clipOriginX, + Position clipOriginY, +#endif /* NeedWidePrototypes */ + XmRegion clipRegion) ; +extern void _XmDragOverShow( + Widget w, +#if NeedWidePrototypes + int clipOriginX, + int clipOriginY, +#else + Position clipOriginX, + Position clipOriginY, +#endif /* NeedWidePrototypes */ + XmRegion clipRegion) ; +extern void _XmDragOverMove( + Widget w, +#if NeedWidePrototypes + int x, + int y) ; +#else + Position x, + Position y) ; +#endif /* NeedWidePrototypes */ +extern void _XmDragOverChange( + Widget w, +#if NeedWidePrototypes + unsigned int dropSiteStatus) ; +#else + unsigned char dropSiteStatus) ; +#endif /* NeedWidePrototypes */ +extern void _XmDragOverFinish( + Widget w, +#if NeedWidePrototypes + unsigned int completionStatus) ; +#else + unsigned char completionStatus) ; +#endif /* NeedWidePrototypes */ + +extern Cursor _XmDragOverGetActiveCursor( + Widget w) ; +extern void _XmDragOverSetInitialPosition( + Widget w, +#if NeedWidePrototypes + int initialX, + int initialY) ; +#else + Position initialX, + Position initialY) ; +#endif /* NeedWidePrototypes */ + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragOverSI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DragOverSP.h b/libXm/osx/Xm/DragOverSP.h new file mode 100644 index 0000000..c6178f4 --- /dev/null +++ b/libXm/osx/Xm/DragOverSP.h @@ -0,0 +1,150 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragOverSP.h /main/9 1995/07/14 10:26:38 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDragOverSP_h +#define _XmDragOverSP_h + +#include + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define DOExpose(do) \ + ((XtClass(do))->core_class.expose) ((Widget)(do), NULL, NULL) + +/* + * DRAGOVER SHELL + */ +typedef struct +{ + XtPointer extension; +} XmDragOverShellClassPart; + +/* Full class record declaration */ + +typedef struct _XmDragOverShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + XmDragOverShellClassPart dragOver_shell_class; +} XmDragOverShellClassRec; + +externalref XmDragOverShellClassRec xmDragOverShellClassRec; + +typedef struct _XmBackingRec{ + Position x, y; + Pixmap pixmap; +}XmBackingRec, *XmBacking; + +typedef struct _XmDragOverBlendRec{ + XmDragIconObject sourceIcon; /* source icon */ + Position sourceX; /* source location in blend */ + Position sourceY; /* source location in blend */ + XmDragIconObject mixedIcon; /* blended icon */ + GC gc; /* appropriate depth */ +}XmDragOverBlendRec, *XmDragOverBlend; + +typedef struct _XmDragOverShellPart{ + Position hotX; /* current hotX */ + Position hotY; /* current hotY */ + unsigned char cursorState; /* current cursor state */ + unsigned char mode; + unsigned char activeMode; + + Position initialX; /* initial hotX */ + Position initialY; /* initial hotY */ + + XmDragIconObject stateIcon; /* current state icon */ + XmDragIconObject opIcon; /* current operation icon */ + + XmDragOverBlendRec cursorBlend; /* cursor blending */ + XmDragOverBlendRec rootBlend; /* pixmap or window blending */ + Pixel cursorForeground; + Pixel cursorBackground; + Cursor ncCursor; /* noncached cursor */ + Cursor activeCursor; /* the current cursor */ + + XmBackingRec backing; /* backing store for pixdrag */ + Pixmap tmpPix; /* temp storage for pixdrag */ + Pixmap tmpBit; /* temp storage for pixdrag */ + Boolean isVisible; /* shell is visible */ + + /* Added for ShapedWindow dragging */ + /* Resources */ + Boolean installColormap;/* Install the colormap */ + + /* locals */ + Boolean holePunched; /* true if hole is punched */ + + /* the following variables are used to make sure the correct colormap */ + /* is installed. colormapWidget is initially the parent widget, but */ + /* can be changed by calling DragShellColormapWidget. */ + Widget colormapWidget; /* The widget I'm dragging from */ + Widget colormapShell; /* It's shell, install colormap here */ + Boolean colormapOverride; /* shell is override rediirect */ + Colormap* savedColormaps; /* used with override redirect */ + int numSavedColormaps; +}XmDragOverShellPart; + +typedef struct _XmDragOverShellRec{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + XmDragOverShellPart drag; +} XmDragOverShellRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragOverSP_h */ diff --git a/libXm/osx/Xm/DragUnderI.h b/libXm/osx/Xm/DragUnderI.h new file mode 100644 index 0000000..c322e31 --- /dev/null +++ b/libXm/osx/Xm/DragUnderI.h @@ -0,0 +1,111 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DragUnderI.h /main/11 1995/07/14 10:27:08 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDragUnderI_h +#define _XmDragUnderI_h + +#include +#include /* for XmScreen */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Structure describing a pixmap */ + +typedef struct _DragPixmapData { + Pixmap pixmap; + int x, y; + unsigned int width, height; +} DragPixmapData; + +typedef struct _XmAnimationSaveData { + Display *display; + XmScreen xmScreen; + Window window; + Position windowX; + Position windowY; + unsigned int windowDepth; + XmRegion clipRegion; + XmRegion dropSiteRegion; + Dimension shadowThickness; + Dimension highlightThickness; + Pixel background; + Pixel foreground; + Pixel highlightColor; + Pixmap highlightPixmap; + Pixel topShadowColor; + Pixmap topShadowPixmap; + Pixel bottomShadowColor; + Pixmap bottomShadowPixmap; + + Dimension borderWidth; + Pixmap animationMask; + Pixmap animationPixmap; + unsigned int animationPixmapDepth; + unsigned char animationStyle; + Widget dragOver; + + GC highlightGC; + GC topShadowGC; + GC bottomShadowGC; + GC drawGC; + DragPixmapData *savedPixmaps; + Cardinal numSavedPixmaps; + Widget dragUnder; + unsigned char activeMode; +} XmAnimationSaveDataRec, *XmAnimationSaveData; + + +/******** Private Function Declarations for DragUnder.c ********/ + +extern void _XmDragUnderAnimation( + Widget w, + XtPointer clientData, + XtPointer callData) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDragUnderI_h */ diff --git a/libXm/osx/Xm/DrawI.h b/libXm/osx/Xm/DrawI.h new file mode 100644 index 0000000..79c7e28 --- /dev/null +++ b/libXm/osx/Xm/DrawI.h @@ -0,0 +1,80 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: DrawI.h /main/6 1995/07/14 10:27:37 drk $ */ +#ifndef _XmDrawI_h +#define _XmDrawI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmDrawHighlight( + Display *display, + Drawable d, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int highlight_thick, +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension highlight_thick, +#endif /* NeedWidePrototypes */ + int line_style) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DrawP.h b/libXm/osx/Xm/DrawP.h new file mode 100644 index 0000000..e3d169e --- /dev/null +++ b/libXm/osx/Xm/DrawP.h @@ -0,0 +1,279 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawP.h /main/10 1995/07/14 10:27:48 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDrawP_h +#define _XmDrawP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*---------------------------------------------------------------*/ +/* Functions used by Xm widgets for the Motif visual drawing */ +/*---------------------------------------------------------------*/ +/* All these functions have an Xlib draw like API: + a Display*, a Drawable, then GCs, Positions and Dimensions + and finally some specific paramaters */ + +/******** The Draw.c file has been split in several module for + a better link profile *********/ + +/*--------------------------------------------------------------- + XmeDrawShadows, + use in place of the 1.1 _XmDrawShadow and _XmDrawShadowType + with changes to the interface (widget vs window, offsets, new order) + and in the implementation (uses XSegments instead of XRectangles). + Both etched and regular shadows use now a single private routine + xmDrawSimpleShadow. + XmeDrawHighlight. + Implementation using FillRectangles, for solid highlight only. + _XmDrawHighlight. + Highlight using wide lines, so that dash mode works. + XmeClearBorder, + new name for _XmEraseShadow (_XmClearShadowType, which clear half a + shadow with a 'widget' API stays in Manager.c ) + XmClearBorder is only usable on window, not on drawable. + XmeDrawSeparator, + use in place of the duplicate redisplay method of both separator and + separatorgadget (highlight_thickness not used, must be incorporated + in the function call parameters). use xmDrawSimpleShadow. + Has 2 new separator types for dash shadowed lines. + XmeDrawDiamond, + new interface for _XmDrawDiamondButton (_XmDrawSquareButton is + really a simple draw shadow and will be in the widget file as is). + XmeDrawArrow, + same algorithm as before but in one function that re-uses the malloced + rects and does not store anything in the wigdet instance. + XmeDrawPolygonShadow, + new one that use the RegionDrawShadow API to implement an Xme call + XmeDrawCircle, + new one for toggle visual + XmeDrawIndicator + new one for toggle drawing +---------------------------------------------------------------------------*/ + + +/******** Private Function Declarations ********/ + +extern void XmeDrawShadows( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shad_thick, +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shad_thick, +#endif /* NeedWidePrototypes */ + unsigned int shad_type); +extern void XmeClearBorder( + Display *display, + Window w, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick); +#endif /* NeedWidePrototypes */ +extern void XmeDrawSeparator( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + GC separator_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + int margin, + unsigned int orientation, + unsigned int separator_type); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + Dimension margin, + unsigned char orientation, + unsigned char separator_type); +#endif /* NeedWidePrototypes */ +extern void XmeDrawDiamond( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + GC center_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + int margin); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + Dimension margin); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawCircle( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + GC center_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + int margin); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + Dimension margin); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawHighlight( + Display *display, + Drawable d, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int highlight_thick +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension highlight_thick +#endif /* NeedWidePrototypes */ + ); +extern void XmeDrawArrow( + Display *display, + Drawable d, + GC top_gc, + GC bot_gc, + GC cent_gc, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int shadow_thick, + unsigned int direction); +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension shadow_thick, + unsigned char direction); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawPolygonShadow( + Display *dpy, + Drawable d, + GC topGC, + GC bottomGC, + XPoint *points, + int n_points, +#if NeedWidePrototypes + int shadowThickness, + unsigned int shadowType); +#else + Dimension shadowThickness, + unsigned char shadowType); +#endif /* NeedWidePrototypes */ + +extern void XmeDrawIndicator(Display *display, + Drawable d, + GC gc, +#if NeedWidePrototypes + int x, int y, + int width, int height, + int margin, + int type); +#else + Position x, Position y, + Dimension width, Dimension height, + Dimension margin, + XtEnum type); +#endif /* NeedWidePrototypes */ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawP_h */ diff --git a/libXm/osx/Xm/DrawUtils.h b/libXm/osx/Xm/DrawUtils.h new file mode 100644 index 0000000..0d5da84 --- /dev/null +++ b/libXm/osx/Xm/DrawUtils.h @@ -0,0 +1,31 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ +#ifndef __XmDraw_h__ +#define __XmDraw_h__ + +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef enum {XmBEVEL_BOTTOM, XmBEVEL_TOP, XmBEVEL_BOTH} XmBevelOption; + +void XmDrawBevel( +#ifndef _NO_PROTO +Display*, Drawable, GC, GC, int, int, unsigned int, XmBevelOption +#endif +); + +#if defined(__cplusplus) +} +#endif + +#endif /* __XmDraw_h__ */ diff --git a/libXm/osx/Xm/DrawingA.h b/libXm/osx/Xm/DrawingA.h new file mode 100644 index 0000000..09b8de5 --- /dev/null +++ b/libXm/osx/Xm/DrawingA.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawingA.h /main/12 1995/07/14 10:28:21 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDrawingArea_h +#define _XmDrawingArea_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmDrawingAreaWidgetClass; + +typedef struct _XmDrawingAreaClassRec * XmDrawingAreaWidgetClass; +typedef struct _XmDrawingAreaRec * XmDrawingAreaWidget; + + +#ifndef XmIsDrawingArea +#define XmIsDrawingArea(w) (XtIsSubclass (w, xmDrawingAreaWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDrawingArea( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmVaCreateDrawingArea( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedDrawingArea( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawingArea_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DrawingAI.h b/libXm/osx/Xm/DrawingAI.h new file mode 100644 index 0000000..779c448 --- /dev/null +++ b/libXm/osx/Xm/DrawingAI.h @@ -0,0 +1,67 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: DrawingAI.h /main/6 1995/07/14 10:28:32 drk $ */ +#ifndef _XmDrawingAI_h +#define _XmDrawingAI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmDrawingAreaInput( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawingAI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DrawingAP.h b/libXm/osx/Xm/DrawingAP.h new file mode 100644 index 0000000..82aeacb --- /dev/null +++ b/libXm/osx/Xm/DrawingAP.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawingAP.h /main/13 1996/04/01 15:22:11 daniel $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDrawingAreaP_h +#define _XmDrawingAreaP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmRESIZE_SWINDOW 10 + + +/* Constraint part record for DrawingArea widget */ + +typedef struct _XmDrawingAreaConstraintPart +{ + char unused; +} XmDrawingAreaConstraintPart, * XmDrawingAreaConstraint; + +/* New fields for the DrawingArea widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmDrawingAreaClassPart; + + +/* Full class record declaration */ + +typedef struct _XmDrawingAreaClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmDrawingAreaClassPart drawing_area_class; +} XmDrawingAreaClassRec; + +externalref XmDrawingAreaClassRec xmDrawingAreaClassRec; + + +/* New fields for the DrawingArea widget record */ + +typedef struct +{ + Dimension margin_width; + Dimension margin_height; + + XtCallbackList resize_callback; + XtCallbackList expose_callback; + XtCallbackList input_callback; + + unsigned char resize_policy; + +#ifndef XM_PART_BC + XtCallbackList convert_callback; + XtCallbackList destination_callback; +#endif +} XmDrawingAreaPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmDrawingAreaRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmDrawingAreaPart drawing_area; +} XmDrawingAreaRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDrawingAreaP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DrawnB.h b/libXm/osx/Xm/DrawnB.h new file mode 100644 index 0000000..dc5a11e --- /dev/null +++ b/libXm/osx/Xm/DrawnB.h @@ -0,0 +1,93 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawnB.h /main/12 1995/07/14 10:29:23 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/*********************************************************************** + * + * DrawnButton Widget + * + ***********************************************************************/ + +#ifndef _XmDButton_h +#define _XmDButton_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsDrawnButton +#define XmIsDrawnButton(w) XtIsSubclass(w, xmDrawnButtonWidgetClass) +#endif /* XmIsDrawnButton */ + +/* DrawnButon Widget */ + +externalref WidgetClass xmDrawnButtonWidgetClass; + +typedef struct _XmDrawnButtonClassRec *XmDrawnButtonWidgetClass; +typedef struct _XmDrawnButtonRec *XmDrawnButtonWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateDrawnButton( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmVaCreateDrawnButton( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedDrawnButton( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDButton_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DrawnBP.h b/libXm/osx/Xm/DrawnBP.h new file mode 100644 index 0000000..4d1c201 --- /dev/null +++ b/libXm/osx/Xm/DrawnBP.h @@ -0,0 +1,119 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DrawnBP.h /main/13 1995/07/14 10:29:40 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDButtonP_h +#define _XmDButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DrawnButton class structure */ + +typedef struct _XmDrawnButtonClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmDrawnButtonClassPart; + + +/* Full class record declaration for DrawnButton class */ + +typedef struct _XmDrawnButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmDrawnButtonClassPart drawnbutton_class; +} XmDrawnButtonClassRec; + + +externalref XmDrawnButtonClassRec xmDrawnButtonClassRec; + + +/* DrawnButton instance record */ + +typedef struct _XmDrawnButtonPart +{ + Boolean pushbutton_enabled; + unsigned char shadow_type; + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + XtCallbackList expose_callback; + XtCallbackList resize_callback; + + Boolean armed; + Dimension old_width; + Dimension old_height; + Dimension old_shadow_thickness; + Dimension old_highlight_thickness; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + Time armTimeStamp; + +} XmDrawnButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmDrawnButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmDrawnButtonPart drawnbutton; +} XmDrawnButtonRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DropDown.h b/libXm/osx/Xm/DropDown.h new file mode 100644 index 0000000..afc7aab --- /dev/null +++ b/libXm/osx/Xm/DropDown.h @@ -0,0 +1,104 @@ +#ifndef _XmDropDown_h +#define _XmDropDown_h + +#include + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +externalref WidgetClass xmDropDownWidgetClass; + +typedef struct _XmDropDownClassRec *XmDropDownWidgetClass; +typedef struct _XmDropDownRec *XmDropDownWidget; + +/* XmIsDropDown may already be defined for Fast Subclassing */ +#ifndef XmIsDropDown +#define XmIsDropDown(w) XtIsSubclass(w, xmDropDownWidgetClass) +#endif /* XmIsDropDown */ + +/***** Public Function Declarations *****/ + +/* Function Name: XmCreateDropDown + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +extern Widget XmCreateDropDown(Widget parent, + char *name, + ArgList args, + Cardinal argCount); + +/* Function Name: XmDropDownGetValue + * Description: Retreives the value from the combo box. + * Arguments: w - the combination box. + * Returns: The value in the text widget. + */ + +extern String XmDropDownGetValue(Widget w); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateDropDown( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedDropDown( + Widget parent, + char *name, + ...); + +/* Function Name: XmDropDownGetLabel + * Description: Returns the "label" child of the XmDropDown + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmDropDown + */ + +extern Widget XmDropDownGetLabel(Widget w); + +/* Function Name: XmDropDownGetArrow + * Description: Returns the "arrow" child of the XmDropDown + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmDropDown + */ + +extern Widget XmDropDownGetArrow(Widget w); + +/* Function Name: XmDropDownGetText + * Description: Returns the "text" child of the XmDropDown + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmDropDown + */ + +extern Widget XmDropDownGetText(Widget w); + +/* Function Name: XmDropDownGetList + * Description: Returns the "list" child of the XmDropDown + * Arguments: w - The XmCombinationBox2 Widget + * Returns: The specified child of the XmDropDown + */ + +extern Widget XmDropDownGetList(Widget w); + +/* Function Name: XmDropDownGetChild + * Description: Returns the child widget id of the XmDropDown + * Arguments: w - The XmDropDown widget + child - Teh component within the DropDown + * Returns: The specified child of the XmDropDown + */ +extern Widget XmDropDownGetChild(Widget w, int child); + +#if defined(__cplusplus) +} +#endif + +#endif /* _XmDropDown_h_ */ diff --git a/libXm/osx/Xm/DropDownP.h b/libXm/osx/Xm/DropDownP.h new file mode 100644 index 0000000..9cf5b87 --- /dev/null +++ b/libXm/osx/Xm/DropDownP.h @@ -0,0 +1,189 @@ +#ifndef _XmDropDown_h_ +#define _XmDropDown_h_ + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define FIX_1446 + +#define XmDropDown_UP ((unsigned char) 0) +#define XmDropDown_UNPOSTED XmDropDown_UP +#define XmDropDown_DOWN ((unsigned char) 1) +#define XmDropDown_POSTED XmDropDown_DOWN +#define XmDropDown_IN_PROGRESS ((unsigned char) 2) +#define XmDropDown_BEGIN_POPUP_FROM_TEXT ((unsigned char) 3) +#ifdef FIX_1446 +#define XmDropDown_AFTER_UNPOST ((unsigned char) 4) +#endif +#define XmDropDown_h_space(w) (((XmDropDownWidget)(w))->combo.h_space) +#define XmDropDown_v_space(w) (((XmDropDownWidget)(w))->combo.v_space) +#define XmDropDown_popup_offset(w) \ + (((XmDropDownWidget)(w))->combo.popup_offset) +#define XmDropDown_verify(w) (((XmDropDownWidget)(w))->combo.verify) +#define XmDropDown_editable(w) (((XmDropDownWidget)(w))->combo.editable) +#define XmDropDown_show_label(w) \ + (((XmDropDownWidget)(w))->combo.show_label) +#define XmDropDown_customized_combo_box(w) \ + (((XmDropDownWidget)(w))->combo.customized_combo_box) +#define XmDropDown_use_text_field(w) \ + (((XmDropDownWidget)(w))->combo.use_text_field) +#define XmDropDown_popup_shell(w) (((XmDropDownWidget)(w))->combo.popup_shell) +#define XmDropDown_popup_cursor(w) \ + (((XmDropDownWidget)(w))->combo.popup_cursor) +#define XmDropDown_translations(w) \ + (((XmDropDownWidget)(w))->combo.translations) +#define XmDropDown_verify_text_callback(w) \ + (((XmDropDownWidget)(w))->combo.verify_text_callback) +#define XmDropDown_verify_text_failed_callback(w) \ + (((XmDropDownWidget)(w))->combo.verify_text_failed_callback) +#define XmDropDown_update_text_callback(w) \ + (((XmDropDownWidget)(w))->combo.update_text_callback) +#define XmDropDown_update_shell_callback(w) \ + (((XmDropDownWidget)(w))->combo.update_shell_callback) +#define XmDropDown_visible_items(w) \ + (((XmDropDownWidget)(w))->combo.visible_items) +#define XmDropDown_new_visual_style(w) \ + (((XmDropDownWidget)(w))->combo.new_visual_style) + +#define XmDropDown_old_text(w) (((XmDropDownWidget)(w))->combo.old_text) +#define XmDropDown_focus_owner(w) (((XmDropDownWidget)(w))->combo.focus_owner) +#define XmDropDown_focus_state(w) (((XmDropDownWidget)(w))->combo.focus_state) +#define XmDropDown_list_state(w) (((XmDropDownWidget)(w))->combo.list_state) +#define XmDropDown_text_x(w) (((XmDropDownWidget)(w))->combo.text_x) +#define XmDropDown_list(w) (((XmDropDownWidget)(w))->combo.list) +#define XmDropDown_label(w) (((XmDropDownWidget)(w))->combo.label) +#define XmDropDown_text(w) (((XmDropDownWidget)(w))->combo.text) +#define XmDropDown_arrow(w) (((XmDropDownWidget)(w))->combo.arrow) + +#define XmDropDown_autoTraversal(w) (((XmDropDownWidget)(w))->combo.autoTraversal) +#define XmDropDown_activateOnFill(w) \ + (((XmDropDownWidget)(w))->combo.activateOnFill) +#define XmDropDown_doActivate(w) (((XmDropDownWidget)(w))->combo.doActivate) +#define XmDropDown_inValueChanged(w) \ + (((XmDropDownWidget)(w))->combo.inValueChanged) + + +/* Should return True to ignore invalid entry warning. Combination Box + * does not currently use this. Presumes do it in subclasses + */ +typedef Boolean (*XmDropDownTextProc)(Widget w, char *text); + +typedef Boolean (*XmDropDownTextListMapProc)( + Widget w, /* combo box */ + Widget text, /* text */ + Widget list /* list */ +); + +/* Version number for the first Revision */ +#define XmDropDownExtensionVersion 2 + +typedef struct { + /* standard extension fields */ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + + /* extra fields */ + XmDropDownTextProc verify; + XmDropDownTextProc update; + XmDropDownTextListMapProc setTextFromList; + XmDropDownTextListMapProc setListFromText; +} XmDropDownClassPartExtension; + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmDropDownClassPart; + +typedef struct _XmDropDownClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmDropDownClassPart combo_class; +} XmDropDownClassRec; + +typedef struct { + /* resources */ + + Dimension h_space; /* The amount of space to leave between */ + Dimension v_space; /* widgets and the box edges. */ + int popup_offset; /* The offset of the popup offset from the + left edge of the text widget. */ + Boolean verify; /* Verify the contents of the Text widget + on leave or CR when this is True. */ + Boolean editable; /* Allow the text field to be edited? */ + Boolean show_label; /* Whether or not to show the label. */ + Boolean customized_combo_box; /* Is this a customized combo box. */ + Boolean use_text_field; /* Use XmTextField of XmText for textual input */ + Widget popup_shell; /* The id of the popup shell. */ + Cursor popup_cursor; /* Cursor for the Popup Window. */ + XtTranslations translations; /* The translation table for all children. */ + + /* + * Callbacks to verify, and update the text and shell widgets. + */ + + XtCallbackList verify_text_callback; + XtCallbackList verify_text_failed_callback; + XtCallbackList update_text_callback; + XtCallbackList update_shell_callback; + + /* private state */ + + String old_text; /* The old text value. */ + Window focus_owner; /* Previous owner and state of the focus. */ + int focus_state; + + unsigned char list_state; /* XmDropDown_UP, XmDropDown_DOWN or XmDropDown_IN_PROGRESS. */ + + Position text_x; /* X location of the text widget. */ + + Widget list; /* List contained in the popup shell. */ + + Widget label; /* The three children of the combo box. */ + Widget text; + Widget arrow; + + int visible_items; /* only to set/get XmNvisibleItemCount, which is + ** a sop for non-customized combobox users */ + + Boolean new_visual_style; + + Boolean autoTraversal; /* traverse next on return */ + int activateOnFill; /* activate when we fill this many chars */ + Boolean doActivate; /* do activate on next value changed */ + Boolean inValueChanged; /* recursion prevention */ + + Widget vsb; + Widget hsb; + Boolean scrolling; +} XmDropDownPart; + +typedef struct _XmDropDownRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmDropDownPart combo; +} XmDropDownRec; + +extern XmDropDownClassRec xmDropDownClassRec; + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmDropDownP_h_ */ diff --git a/libXm/osx/Xm/DropSMgr.h b/libXm/osx/Xm/DropSMgr.h new file mode 100644 index 0000000..29f5b99 --- /dev/null +++ b/libXm/osx/Xm/DropSMgr.h @@ -0,0 +1,178 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: DropSMgr.h /main/12 1997/03/04 14:20:59 dbl $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmDropSMgr_h +#define _XmDropSMgr_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmCR_DROP_SITE_LEAVE_MESSAGE 1 +#define XmCR_DROP_SITE_ENTER_MESSAGE 2 +#define XmCR_DROP_SITE_MOTION_MESSAGE 3 +#define XmCR_DROP_MESSAGE 4 + +#define XmNO_DROP_SITE 1 +#define XmINVALID_DROP_SITE 2 +#define XmVALID_DROP_SITE 3 + +/* begin fix for CR 5754 */ +/* documented values are XmDROP_SITE_VALID and XmDROP_SITE_INVALID. + However, we can't just throw out the incorrect Xm[IN]VALID_DROP_SITE + now since people have probably started using them. Instead, we just + define the correct values using the incorrect ones. +*/ + +#define XmDROP_SITE_INVALID XmINVALID_DROP_SITE +#define XmDROP_SITE_VALID XmVALID_DROP_SITE + +/* end fix for CR 5754 */ + +enum { XmDRAG_UNDER_NONE, XmDRAG_UNDER_PIXMAP, + XmDRAG_UNDER_SHADOW_IN, XmDRAG_UNDER_SHADOW_OUT, + XmDRAG_UNDER_HIGHLIGHT }; + +enum { XmDROP_SITE_SIMPLE, XmDROP_SITE_COMPOSITE, + XmDROP_SITE_SIMPLE_CLIP_ONLY = 128, + XmDROP_SITE_COMPOSITE_CLIP_ONLY }; + +enum { XmABOVE, XmBELOW }; + +enum { XmDROP_SITE_ACTIVE, XmDROP_SITE_INACTIVE, XmDROP_SITE_IGNORE }; + +typedef struct _XmDragProcCallbackStruct { + int reason; + XEvent * event; + Time timeStamp; + Widget dragContext; + Position x, y; + unsigned char dropSiteStatus; + unsigned char operation; + unsigned char operations; + Boolean animate; +} XmDragProcCallbackStruct, * XmDragProcCallback; + +typedef struct _XmDropProcCallbackStruct { + int reason; + XEvent * event; + Time timeStamp; + Widget dragContext; + Position x, y; + unsigned char dropSiteStatus; + unsigned char operation; + unsigned char operations; + unsigned char dropAction; +} XmDropProcCallbackStruct, * XmDropProcCallback; + + +typedef struct _XmDropSiteVisualsRec { + Pixel background; + Pixel foreground; + Pixel topShadowColor; + Pixmap topShadowPixmap; + Pixel bottomShadowColor; + Pixmap bottomShadowPixmap; + Dimension shadowThickness; + Pixel highlightColor; + Pixmap highlightPixmap; + Dimension highlightThickness; + Dimension borderWidth; +} XmDropSiteVisualsRec, * XmDropSiteVisuals; + + +/* DropSite Widget */ + +externalref WidgetClass xmDropSiteManagerObjectClass; + +typedef struct _XmDropSiteManagerClassRec *XmDropSiteManagerObjectClass; +typedef struct _XmDropSiteManagerRec *XmDropSiteManagerObject; + +#ifndef XmIsDropSiteManager +#define XmIsDropSiteManager(w) XtIsSubclass((w), xmDropSiteManagerObjectClass) +#endif /* XmIsDropSite */ + +/******** Public Function Declarations ********/ + +extern void XmDropSiteRegister( + Widget widget, + ArgList args, + Cardinal argCount) ; +extern void XmDropSiteUnregister( + Widget widget) ; +extern Boolean XmDropSiteRegistered( + Widget widget) ; +extern void XmDropSiteStartUpdate( + Widget refWidget) ; +extern void XmDropSiteUpdate( + Widget enclosingWidget, + ArgList args, + Cardinal argCount) ; +extern void XmDropSiteEndUpdate( + Widget refWidget) ; +extern void XmDropSiteRetrieve( + Widget enclosingWidget, + ArgList args, + Cardinal argCount) ; +extern int XmDropSiteQueryStackingOrder( + Widget widget, + Widget *parent_rtn, + Widget **children_rtn, + Cardinal *num_children_rtn) ; +extern void XmDropSiteConfigureStackingOrder( + Widget widget, + Widget sibling, + Cardinal stack_mode) ; +extern XmDropSiteVisuals XmDropSiteGetActiveVisuals( + Widget widget) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropSMgr_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DropSMgrI.h b/libXm/osx/Xm/DropSMgrI.h new file mode 100644 index 0000000..1f05d28 --- /dev/null +++ b/libXm/osx/Xm/DropSMgrI.h @@ -0,0 +1,645 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropSMgrI.h /main/11 1995/07/14 10:30:57 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropSMgrI_h +#define _XmDropSMgrI_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for DropSMgr.c ********/ + +extern void _XmDSMUpdate( + XmDropSiteManagerObject dsm, + XtPointer clientData, + XtPointer callData) ; +extern int _XmDSMGetTreeFromDSM( + XmDropSiteManagerObject dsm, + Widget shell, + XtPointer dataPtr) ; +extern Boolean _XmDropSiteShell( + Widget widget) ; +extern Boolean _XmDropSiteWrapperCandidate( + Widget widget) ; +extern Widget _XmGetActiveDropSite( + Widget widget) ; +extern void _XmSyncDropSiteTree( + Widget shell) ; +extern void _XmIEndUpdate(XtPointer client_data, XtIntervalId *interval_id); + +/******** End Private Function Declarations ********/ + + +/* This is used for maintenance of the Pre-Register drop site tree */ + +#define XmDROP_SITE_LEFT_EDGE (1<<0) +#define XmDROP_SITE_RIGHT_EDGE (1<<1) +#define XmDROP_SITE_TOP_EDGE (1<<2) +#define XmDROP_SITE_BOTTOM_EDGE (1<<3) + +#define XmDSM_DS_LEAF (1<<0) +#define XmDSM_DS_INTERNAL (1<<1) +#define XmDSM_DS_HAS_REGION (1<<2) + +#define XmDSM_T_CLOSE (1<<0) + +/* + * Notice that the top of the record is the samy layout as + * an XRectangle. This is important when it is passed to + * IntersectWithAncestors by DetectAndInsertAllClippers. + */ +typedef struct _XmDSClipRect { + Position x; + Position y; + Dimension width; + Dimension height; + unsigned char detected; +} XmDSClipRect; + +#define CHILDREN_INCREMENT 10 + +typedef struct _XmDSStatusRec { + unsigned int remote:1; + unsigned int leaf:1; + unsigned int shell:1; + unsigned int type:1; + unsigned int animation_style:3; + unsigned int internal:1; + unsigned int has_region:1; + unsigned int activity:1; + unsigned int registered:1; +} XmDSStatusRec, * XmDSStatus; + +typedef struct _XmDSFullInfoRec { + XmDSStatusRec status; + + XtPointer parent; + unsigned short import_targets_ID; + unsigned char operations; + XmRegion region; + XtCallbackProc drag_proc; + XtCallbackProc drop_proc; + + Widget widget; + + unsigned short num_children; + unsigned short max_children; + XtPointer *children; + + /* Support for subresource magic; needed ONLY in Full structure */ + unsigned char type; + unsigned char animation_style; + unsigned char activity; + Atom *import_targets; + Cardinal num_import_targets; + XRectangle *rectangles; + Cardinal num_rectangles; + + /* A complete laundry list of animation fields */ + Pixmap animation_pixmap; + Cardinal animation_pixmap_depth; + Pixmap animation_mask; + Pixel background; + Pixel foreground; + Pixel highlight_color; + Pixmap highlight_pixmap; + Dimension highlight_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + Dimension shadow_thickness; + Dimension border_width; + XtPointer client_data; + +} XmDSFullInfoRec, * XmDSFullInfo; + +/* One gazillion typedefs to allow for dataspace efficiency */ + +typedef struct _XmDSLocalLeafRec { + XtPointer parent; + unsigned short import_targets_ID; + unsigned char operations; + XmRegion region; + XtCallbackProc drag_proc; + XtCallbackProc drop_proc; + Widget widget; + XtPointer client_data; +} XmDSLocalLeafRec, * XmDSLocalLeaf; + +typedef struct _XmDSLocalNodeRec { + XtPointer parent; + unsigned short import_targets_ID; + unsigned char operations; + XmRegion region; + unsigned short num_children; + unsigned short max_children; + XtPointer *children; + XtCallbackProc drag_proc; + XtCallbackProc drop_proc; + Widget widget; + XtPointer client_data; +} XmDSLocalNodeRec, * XmDSLocalNode; + +typedef struct _XmDSLocalPixmapStyleRec { + Pixmap animation_pixmap; + Cardinal animation_pixmap_depth; + Pixmap animation_mask; +} XmDSLocalPixmapStyleRec, *XmDSLocalPixmapStyle; + +typedef struct _XmDSRemoteLeafRec { + XtPointer parent; + unsigned short import_targets_ID; + unsigned char operations; + XmRegion region; +} XmDSRemoteLeafRec, * XmDSRemoteLeaf; + +typedef struct _XmDSRemoteNodeRec { + XtPointer parent; + unsigned short import_targets_ID; + unsigned char operations; + XmRegion region; + unsigned short num_children; + unsigned short max_children; + XtPointer *children; +} XmDSRemoteNodeRec, * XmDSRemoteNode; + + +/* These style records are only used for remote trees */ +typedef struct _XmDSRemoteNoneStyleRec { + Dimension border_width; +} XmDSRemoteNoneStyleRec, * XmDSRemoteNoneStyle; + +typedef struct _XmDSRemoteHighlightStyleRec { + Pixel highlight_color; + Pixmap highlight_pixmap; + Pixel background; /* in case of highlight pixmaps */ + Dimension highlight_thickness; + Dimension border_width; +} XmDSRemoteHighlightStyleRec, * XmDSRemoteHighlightStyle; + +typedef struct _XmDSRemoteShadowStyleRec { + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + Pixel foreground; /* in case of shadow pixmaps */ + Dimension shadow_thickness; + Dimension highlight_thickness; + Dimension border_width; +} XmDSRemoteShadowStyleRec, * XmDSRemoteShadowStyle; + +typedef struct _XmDSRemotePixmapStyleRec { + Pixmap animation_pixmap; + Cardinal animation_pixmap_depth; + Pixmap animation_mask; + Pixel background; + Pixel foreground; + Dimension shadow_thickness; + Dimension highlight_thickness; + Dimension border_width; +} XmDSRemotePixmapStyleRec, * XmDSRemotePixmapStyle; + + +/* Now we permute the preceding types */ + +typedef struct _XmDSLocalNoneLeafRec { + XmDSStatusRec status; + XmDSLocalLeafRec info; +} XmDSLocalNoneLeafRec, * XmDSLocalNoneLeaf; + +typedef struct _XmDSLocalNoneNodeRec { + XmDSStatusRec status; + XmDSLocalNodeRec info; +} XmDSLocalNoneNodeRec, * XmDSLocalNoneNode; + +typedef struct _XmDSLocalHighlightLeafRec { + XmDSStatusRec status; + XmDSLocalLeafRec info; +} XmDSLocalHighlightLeafRec, * XmDSLocalHighlightLeaf; + +typedef struct _XmDSLocalHighlightNodeRec { + XmDSStatusRec status; + XmDSLocalNodeRec info; +} XmDSLocalHighlightNodeRec, * XmDSLocalHighlightNode; + +typedef struct _XmDSLocalShadowLeafRec { + XmDSStatusRec status; + XmDSLocalLeafRec info; +} XmDSLocalShadowLeafRec, * XmDSLocalShadowLeaf; + +typedef struct _XmDSLocalShadowNodeRec { + XmDSStatusRec status; + XmDSLocalNodeRec info; +} XmDSLocalShadowNodeRec, * XmDSLocalShadowNode; + +typedef struct _XmDSLocalPixmapLeafRec { + XmDSStatusRec status; + XmDSLocalLeafRec info; + XmDSLocalPixmapStyleRec animation_data; +} XmDSLocalPixmapLeafRec, * XmDSLocalPixmapLeaf; + +typedef struct _XmDSLocalPixmapNodeRec { + XmDSStatusRec status; + XmDSLocalNodeRec info; + XmDSLocalPixmapStyleRec animation_data; +} XmDSLocalPixmapNodeRec, * XmDSLocalPixmapNode; + + +typedef struct _XmDSRemoteNoneLeafRec { + XmDSStatusRec status; + XmDSRemoteLeafRec info; + XmDSRemoteNoneStyleRec animation_data; +} XmDSRemoteNoneLeafRec, * XmDSRemoteNoneLeaf; + +typedef struct _XmDSRemoteNoneNodeRec { + XmDSStatusRec status; + XmDSRemoteNodeRec info; + XmDSRemoteNoneStyleRec animation_data; +} XmDSRemoteNoneNodeRec, * XmDSRemoteNoneNode; + +typedef struct _XmDSRemoteHighlightLeafRec { + XmDSStatusRec status; + XmDSRemoteLeafRec info; + XmDSRemoteHighlightStyleRec animation_data; +} XmDSRemoteHighlightLeafRec, * XmDSRemoteHighlightLeaf; + +typedef struct _XmDSRemoteHighlightNodeRec { + XmDSStatusRec status; + XmDSRemoteNodeRec info; + XmDSRemoteHighlightStyleRec animation_data; +} XmDSRemoteHighlightNodeRec, * XmDSRemoteHighlightNode; + +typedef struct _XmDSRemoteShadowLeafRec { + XmDSStatusRec status; + XmDSRemoteLeafRec info; + XmDSRemoteShadowStyleRec animation_data; +} XmDSRemoteShadowLeafRec, * XmDSRemoteShadowLeaf; + +typedef struct _XmDSRemoteShadowNodeRec { + XmDSStatusRec status; + XmDSRemoteNodeRec info; + XmDSRemoteShadowStyleRec animation_data; +} XmDSRemoteShadowNodeRec, * XmDSRemoteShadowNode; + +typedef struct _XmDSRemotePixmapLeafRec { + XmDSStatusRec status; + XmDSRemoteLeafRec info; + XmDSRemotePixmapStyleRec animation_data; +} XmDSRemotePixmapLeafRec, * XmDSRemotePixmapLeaf; + +typedef struct _XmDSRemotePixmapNodeRec { + XmDSStatusRec status; + XmDSRemoteNodeRec info; + XmDSRemotePixmapStyleRec animation_data; +} XmDSRemotePixmapNodeRec, * XmDSRemotePixmapNode; + +typedef union _XmDSInfoRec { + XmDSStatusRec status; + + XmDSLocalNoneLeafRec local_none_leaf; + XmDSLocalNoneNodeRec local_none_node; + XmDSLocalHighlightLeafRec local_highlight_leaf; + XmDSLocalHighlightNodeRec local_highlight_node; + XmDSLocalShadowLeafRec local_shadow_leaf; + XmDSLocalShadowNodeRec local_shadow_node; + XmDSLocalPixmapLeafRec local_pixmap_leaf; + XmDSLocalPixmapNodeRec local_pixmap_node; + + XmDSRemoteNoneLeafRec remote_none_leaf; + XmDSRemoteNoneNodeRec remote_none_node; + XmDSRemoteHighlightLeafRec remote_highlight_leaf; + XmDSRemoteHighlightNodeRec remote_highlight_node; + XmDSRemoteShadowLeafRec remote_shadow_leaf; + XmDSRemoteShadowNodeRec remote_shadow_node; + XmDSRemotePixmapLeafRec remote_pixmap_leaf; + XmDSRemotePixmapNodeRec remote_pixmap_node; +} XmDSInfoRec, * XmDSInfo; + + +/* A few macros to deal with the typedefs */ + +#define GetDSRemote(ds) (((XmDSStatus)(ds))->remote) +#define GetDSLeaf(ds) (((XmDSStatus)(ds))->leaf) +#define GetDSShell(ds) (((XmDSStatus)(ds))->shell) +#define GetDSAnimationStyle(ds) (((XmDSStatus)(ds))->animation_style) +#define GetDSType(ds) \ + ((((XmDSStatus)(ds))->type) ? \ + XmDROP_SITE_COMPOSITE \ + : \ + XmDROP_SITE_SIMPLE) + +#define GetDSRegistered(ds) (((XmDSStatus)(ds))->registered) +#define GetDSInternal(ds) (((XmDSStatus)(ds))->internal) +#define GetDSHasRegion(ds) (((XmDSStatus)(ds))->has_region) +#define GetDSActivity(ds) \ + ((((XmDSStatus)(ds))->activity) ? \ + XmDROP_SITE_ACTIVE \ + : \ + XmDROP_SITE_INACTIVE) + +#define GetDSImportTargetsID(ds) \ + (((XmDSLocalNoneLeaf)(ds))->info.import_targets_ID) +#define GetDSOperations(ds) \ + (((XmDSLocalNoneLeaf)(ds))->info.operations) +#define GetDSRegion(ds) (((XmDSLocalNoneLeaf)(ds))->info.region) + +#define GetDSParent(ds) \ + ((GetDSShell(ds)) ? \ + NULL \ + : \ + (((XmDSLocalNoneLeaf)(ds))->info.parent)) + +#define GetDSUpdateLevel(ds) \ + ((GetDSShell(ds)) ? \ + ((long)(((XmDSLocalNoneNode)(ds))->info.parent)) \ + : \ + -1) + +#define GetDSDragProc(ds) \ + ((GetDSRemote(ds)) ? \ + (XtCallbackProc)NULL \ + : \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.drag_proc) \ + : \ + (((XmDSLocalNoneLeaf)(ds))->info.drag_proc))) + +#define GetDSDropProc(ds) \ + ((GetDSRemote(ds)) ? \ + (XtCallbackProc)NULL \ + : \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.drop_proc) \ + : \ + (((XmDSLocalNoneLeaf)(ds))->info.drop_proc))) + +#define GetDSClientData(ds) \ + ((GetDSRemote(ds)) ? \ + NULL \ + : \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.client_data) \ + : \ + (((XmDSLocalNoneLeaf)(ds))->info.client_data))) + +#define GetDSWidget(ds) \ + ((GetDSRemote(ds)) ? \ + (Widget)NULL \ + : \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.widget) \ + : \ + (((XmDSLocalNoneLeaf)(ds))->info.widget))) + +#define GetDSNumChildren(ds) \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.num_children) \ + : \ + 0) + +#define GetDSMaxChildren(ds) \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.max_children) \ + : \ + 0) + +#define GetDSChildren(ds) \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.children) \ + : \ + (XtPointer*)NULL) + +#define GetDSChild(ds, position) \ + ((GetDSType(ds)) ? \ + (((XmDSLocalNoneNode)(ds))->info.children[position]) \ + : \ + NULL) + +#define GetDSLocalAnimationPart(ds) \ + ((GetDSType(ds)) ? \ + ((GetDSAnimationStyle(ds) == XmDRAG_UNDER_PIXMAP) ? \ + &(((XmDSLocalPixmapNode)(ds))->animation_data) \ + : \ + NULL) \ + : \ + ((GetDSAnimationStyle(ds) == XmDRAG_UNDER_PIXMAP) ? \ + &(((XmDSLocalPixmapLeaf)(ds))->animation_data) \ + : \ + NULL)) \ + +#define GetDSRemoteAnimationPart(ds) \ + ((GetDSType(ds)) ? \ + &(((XmDSRemoteNoneNode)(ds))->animation_data) \ + : \ + &(((XmDSRemoteNoneLeaf)(ds))->animation_data)) + + +#define SetDSRemote(ds, newRemote) \ + (((XmDSStatus)(ds))->remote) = (unsigned int)(newRemote) +#define SetDSLeaf(ds, newLeaf) \ + (((XmDSStatus)(ds))->leaf) = (unsigned int)(newLeaf) +#define SetDSShell(ds, newShell) \ + (((XmDSStatus)(ds))->shell) = (unsigned int)(newShell) +#define SetDSAnimationStyle(ds, newAnimationStyle) \ + (((XmDSStatus)(ds))->animation_style) = \ + (unsigned int)(newAnimationStyle) +#define SetDSType(ds, newType) \ + (((XmDSStatus)(ds))->type) = \ + ( ((newType) == XmDROP_SITE_COMPOSITE) ? \ + 1 \ + : \ + 0) + +#define SetDSRegistered(ds,newRegistered) \ + (((XmDSStatus)(ds))->registered) = \ + (unsigned int)(newRegistered) +#define SetDSInternal(ds, newInternal) \ + (((XmDSStatus)(ds))->internal) = (unsigned int)(newInternal) +#define SetDSHasRegion(ds, newHasRegion) \ + (((XmDSStatus)(ds))->has_region) = (unsigned int)(newHasRegion) +#define SetDSActivity(ds, newActivity) \ + (((XmDSStatus)(ds))->activity) = \ + ( ((newActivity) == XmDROP_SITE_ACTIVE) ? \ + 1 \ + : \ + 0) + +#define SetDSImportTargetsID(ds, newImportTargetsID) \ + (((XmDSLocalNoneLeaf)(ds))->info.import_targets_ID) = \ + (unsigned short)(newImportTargetsID) +#define SetDSOperations(ds, newOperations) \ + (((XmDSLocalNoneLeaf)(ds))->info.operations) = \ + (unsigned char)(newOperations) +#define SetDSRegion(ds, newRegion) \ + (((XmDSLocalNoneLeaf)(ds))->info.region) = \ + (XmRegion)(newRegion) +#define SetDSParent(ds, newParent) \ + ((GetDSShell(ds)) ? \ + NULL \ + : \ + ((((XmDSLocalNoneLeaf)(ds))->info.parent) = \ + (XtPointer)(newParent))) + +#define SetDSUpdateLevel(ds, newUpdateLevel) \ + ((GetDSShell(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.parent) = \ + (XtPointer)(newUpdateLevel)) \ + : \ + 0) + +#define SetDSDragProc(ds, newDragProc) \ + ((GetDSRemote(ds)) ? \ + (XtCallbackProc)NULL \ + : \ + ((GetDSType(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.drag_proc) = \ + (XtCallbackProc)(newDragProc)) \ + : \ + ((((XmDSLocalNoneLeaf)(ds))->info.drag_proc) = \ + (XtCallbackProc)(newDragProc)))) + +#define SetDSDropProc(ds, newDropProc) \ + ((GetDSRemote(ds)) ? \ + (XtCallbackProc)NULL \ + : \ + ((GetDSType(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.drop_proc) = \ + (XtCallbackProc)(newDropProc)) \ + : \ + ((((XmDSLocalNoneLeaf)(ds))->info.drop_proc) = \ + (XtCallbackProc)(newDropProc)))) + +#define SetDSClientData(ds, clientData) \ + ((GetDSRemote(ds)) ? \ + NULL \ + : \ + ((GetDSType(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.client_data) = \ + (XtPointer)(clientData)) \ + : \ + ((((XmDSLocalNoneLeaf)(ds))->info.client_data) = \ + (XtPointer)(clientData)))) + +#define SetDSWidget(ds, newWidget) \ + ((GetDSRemote(ds)) ? \ + (Widget)NULL \ + : \ + ((GetDSType(ds)) ? \ + (((((XmDSLocalNoneNode)(ds))->info.widget) = \ + (Widget)(newWidget))) \ + : \ + (((((XmDSLocalNoneLeaf)(ds))->info.widget) = \ + (Widget)(newWidget))))) + +#define SetDSNumChildren(ds, newNumChildren) \ + ((GetDSType(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.num_children) = \ + (unsigned short)(newNumChildren)) \ + : \ + 0) + +#define SetDSMaxChildren(ds, newMaxChildren) \ + ((GetDSType(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.max_children) = \ + (unsigned short)(newMaxChildren)) \ + : \ + 0) + +#define SetDSChildren(ds, newChildren) \ + ((GetDSType(ds)) ? \ + ((((XmDSLocalNoneNode)(ds))->info.children) = \ + (XtPointer *)(newChildren)) \ + : \ + (XtPointer *)NULL) + +/******** Private Function Declarations ********/ + +extern void _XmDSIAddChild( + XmDSInfo parentInfo, + XmDSInfo childInfo, + Cardinal childPosition) ; +extern void _XmDSIRemoveChild( + XmDSInfo parentInfo, + XmDSInfo childInfo) ; +extern Cardinal _XmDSIGetChildPosition( + XmDSInfo parentInfo, + XmDSInfo childInfo) ; +extern void _XmDSIReplaceChild( + XmDSInfo oldChildInfo, + XmDSInfo newChildInfo) ; +extern void _XmDSISwapChildren( + XmDSInfo parentInfo, + Cardinal position1, + Cardinal position2) ; +extern void _XmDSIDestroy( + XmDSInfo info, +#if NeedWidePrototypes + int substructures) ; +#else + Boolean substructures) ; +#endif /* NeedWidePrototypes */ +extern Dimension _XmDSIGetBorderWidth( + XmDSInfo info) ; + +/******** End Private Function Declarations ********/ + +#define AddDSChild _XmDSIAddChild +#define RemoveDSChild _XmDSIRemoveChild +#define SwapDSChildren _XmDSISwapChildren +#define ReplaceDSChild _XmDSIReplaceChild +#define GetDSChildPosition _XmDSIGetChildPosition +#define DestroyDS _XmDSIDestroy +#define GetDSBorderWidth _XmDSIGetBorderWidth + +externalref XtResource _XmDSResources[]; +externalref Cardinal _XmNumDSResources; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropSMgrI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DropSMgrP.h b/libXm/osx/Xm/DropSMgrP.h new file mode 100644 index 0000000..49f44ee --- /dev/null +++ b/libXm/osx/Xm/DropSMgrP.h @@ -0,0 +1,291 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropSMgrP.h /main/11 1995/07/14 10:31:14 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropSMgrP_h +#define _XmDropSMgrP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*XmDSMCreateInfoProc) + (XmDropSiteManagerObject, Widget, ArgList, Cardinal); +typedef void (*XmDSMDestroyInfoProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMStartUpdateProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMRetrieveInfoProc) + (XmDropSiteManagerObject, Widget, ArgList, Cardinal); +typedef void (*XmDSMUpdateInfoProc) + (XmDropSiteManagerObject, Widget, ArgList, Cardinal); +typedef void (*XmDSMEndUpdateProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMUpdateProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMProcessMotionProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMProcessDropProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMOperationChangedProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMChangeRootProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMInsertInfoProc) + (XmDropSiteManagerObject, XtPointer, XtPointer); +typedef void (*XmDSMRemoveInfoProc) + (XmDropSiteManagerObject, XtPointer); +typedef void (*XmDSMSyncTreeProc) + (XmDropSiteManagerObject, Widget); +typedef int (*XmDSMGetTreeFromDSMProc) + (XmDropSiteManagerObject, Widget, XtPointer); +typedef void (*XmDSMCreateDSInfoTable) + (XmDropSiteManagerObject); +typedef void (*XmDSMDestroyDSInfoTable) + (XmDropSiteManagerObject); +typedef void (*XmDSMRegisterInfoProc) + (XmDropSiteManagerObject, Widget, XtPointer); +typedef XtPointer (*XmDSMWidgetToInfoProc) + (XmDropSiteManagerObject, Widget); +typedef void (*XmDSMUnregisterInfoProc) + (XmDropSiteManagerObject, XtPointer); + +typedef struct { + XmDSMCreateInfoProc createInfo; + XmDSMDestroyInfoProc destroyInfo; + XmDSMStartUpdateProc startUpdate; + XmDSMRetrieveInfoProc retrieveInfo; + XmDSMUpdateInfoProc updateInfo; + XmDSMEndUpdateProc endUpdate; + + /* Used by DragController Object */ + + XmDSMUpdateProc updateDSM; + + /* Used by update proc */ + + XmDSMProcessMotionProc processMotion; + XmDSMProcessDropProc processDrop; + XmDSMOperationChangedProc operationChanged; + XmDSMChangeRootProc changeRoot; + + /* Used to manage DropSites */ + + XmDSMInsertInfoProc insertInfo; + /* Need a get and a put function for update? */ + XmDSMRemoveInfoProc removeInfo; + + /* Used to manage the pre-register information */ + + XmDSMSyncTreeProc syncTree; + XmDSMGetTreeFromDSMProc getTreeFromDSM; + + /* Used to hash between widgets and info */ + + XmDSMCreateDSInfoTable createTable; + XmDSMDestroyDSInfoTable destroyTable; + XmDSMRegisterInfoProc registerInfo; + XmDSMWidgetToInfoProc widgetToInfo; + XmDSMUnregisterInfoProc unregisterInfo; + + XtPointer extension; +} XmDropSiteManagerClassPart; + +/* Full class record declaration for dropSite class */ + +typedef struct _XmDropSiteManagerClassRec{ + ObjectClassPart object_class; + XmDropSiteManagerClassPart dropManager_class; +} XmDropSiteManagerClassRec; + +externalref XmDropSiteManagerClassRec xmDropSiteManagerClassRec; + +/* Macros for calling methods */ + +#define DSMCreateInfo(dsm, widget, args, numArgs) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.createInfo) \ + ((dsm), (widget), (args), (numArgs)) + +#define DSMDestroyInfo(dsm, widget) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.destroyInfo) \ + ((dsm), (widget)) + +#define DSMStartUpdate(dsm, widget) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.startUpdate) \ + ((dsm), (widget)) + +#define DSMRetrieveInfo(dsm, widget, args, numArgs) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.retrieveInfo) \ + ((dsm), (widget), (args), (numArgs)) + +#define DSMUpdateInfo(dsm, widget, args, numArgs) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.updateInfo) \ + ((dsm), (widget), (args), (numArgs)) + +#define DSMEndUpdate(dsm, widget) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.endUpdate) \ + ((dsm), (widget)) + +#define DSMUpdate(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.updateDSM) \ + ((dsm), (clientData), (callData)) + +#define DSMProcessMotion(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.processMotion) \ + ((dsm), (clientData), (callData)) + +#define DSMProcessDrop(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.processDrop) \ + ((dsm),(clientData), (callData)) + +#define DSMOperationChanged(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.operationChanged) \ + ((dsm),(clientData), (callData)) + +#define DSMChangeRoot(dsm, clientData, callData) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.changeRoot) \ + ((dsm), (clientData), (callData)) + +#define DSMInsertInfo(dsm, info, call_data) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.insertInfo) \ + ((dsm), (info), (call_data)) + +#define DSMRemoveInfo(dsm, info) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.removeInfo) \ + ((dsm), (info)) + +#define DSMSyncTree(dsm, shell) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.syncTree) \ + ((dsm), (shell)) + +#define DSMGetTreeFromDSM(dsm, shell, dataPtr) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.getTreeFromDSM) \ + ((dsm), (shell), (dataPtr)) + +#define DSMCreateTable(dsm) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.createTable) \ + ((dsm)) + +#define DSMDestroyTable(dsm) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.destroyTable) \ + ((dsm)) + +#define DSMRegisterInfo(dsm, widget, info) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.registerInfo) \ + ((dsm), (widget), (info)) + +#define DSMWidgetToInfo(dsm, widget) \ + (XtPointer) ((((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.widgetToInfo) \ + ((dsm), (widget))) + +#define DSMUnregisterInfo(dsm, info) \ + (((XmDropSiteManagerObjectClass) XtClass(dsm))-> \ + dropManager_class.unregisterInfo) \ + ((dsm), (info)) + +/* Internal update struct */ + +typedef struct __XmDropSiteUpdateInfoRec { + XmDropSiteManagerObject dsm; + Widget refWidget; + struct __XmDropSiteUpdateInfoRec *next; +} _XmDropSiteUpdateInfoRec, *_XmDropSiteUpdateInfo; + +/* DropSiteManager instance record */ + +typedef struct _XmDropSiteManagerPart{ + XtCallbackProc notifyProc; + XtCallbackProc treeUpdateProc; + XtPointer client_data; + XtPointer dragUnderData; + XtPointer curInfo; + Time curTime; + Position curX, curY, oldX, oldY; + unsigned char curDropSiteStatus; + Widget curDragContext; + Boolean curAnimate; + unsigned char curOperations; + unsigned char curOperation; + XmRegion curAncestorClipRegion; + XmRegion newAncestorClipRegion; + XtPointer dsTable; + XtPointer dsRoot; + Position rootX, rootY; + Dimension rootW, rootH; + XtPointer clipperList; + _XmDropSiteUpdateInfo updateInfo; + XtIntervalId updateTimeOutId; +} XmDropSiteManagerPart, *XmDropSiteManagerPartPtr; + +/* Full instance record declaration */ + +typedef struct _XmDropSiteManagerRec{ + ObjectPart object; + XmDropSiteManagerPart dropManager; +} XmDropSiteManagerRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropSMgrP_h */ diff --git a/libXm/osx/Xm/DropTrans.h b/libXm/osx/Xm/DropTrans.h new file mode 100644 index 0000000..af12e2f --- /dev/null +++ b/libXm/osx/Xm/DropTrans.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropTrans.h /main/11 1995/07/14 10:31:45 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropTrans_h +#define _XmDropTrans_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmTRANSFER_FAILURE 0 +#define XmTRANSFER_SUCCESS 1 + +externalref WidgetClass xmDropTransferObjectClass; + +typedef struct _XmDropTransferClassRec * XmDropTransferObjectClass; +typedef struct _XmDropTransferRec * XmDropTransferObject; + +#ifndef XmIsDropTransfer +#define XmIsDropTransfer(w) \ + XtIsSubclass((w), xmDropTransferObjectClass) +#endif /* XmIsDropTransfer */ + +typedef struct _XmDropTransferEntryRec { + XtPointer client_data; + Atom target; +} XmDropTransferEntryRec, * XmDropTransferEntry; + +/******** Public Function Declarations ********/ + +extern Widget XmDropTransferStart( + Widget refWidget, + ArgList args, + Cardinal argCount) ; +extern void XmDropTransferAdd( + Widget widget, + XmDropTransferEntry transfers, + Cardinal num_transfers) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropTrans_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/DropTransP.h b/libXm/osx/Xm/DropTransP.h new file mode 100644 index 0000000..150a6ef --- /dev/null +++ b/libXm/osx/Xm/DropTransP.h @@ -0,0 +1,130 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: DropTransP.h /main/11 1995/07/14 10:31:56 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmDropTransferP_h +#define _XmDropTransferP_h + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* DropTransfer class structure */ + +typedef Widget (*XmDropTransferStartTransferProc)(Widget, + ArgList, Cardinal); +typedef void (*XmDropTransferAddTransferProc)(Widget, + XmDropTransferEntry, Cardinal); + +typedef struct _XmDropTransferClassPart +{ + XmDropTransferStartTransferProc start_drop_transfer; + XmDropTransferAddTransferProc add_drop_transfer; + XtPointer extension; +} XmDropTransferClassPart; + +/* Full class record declaration */ + +typedef struct _XmDropTransferClassRec +{ + ObjectClassPart object_class; + XmDropTransferClassPart dropTransfer_class; +} XmDropTransferClassRec; + +externalref XmDropTransferClassRec xmDropTransferClassRec; + + +typedef struct _XmDropTransferListRec { + XmDropTransferEntry transfer_list; + Cardinal num_transfers; +} XmDropTransferListRec, * XmDropTransferList; + + +/* The DropTransfer instance record */ + +typedef struct _XmDropTransferPart +{ + XmDropTransferEntry drop_transfers; + Cardinal num_drop_transfers; + Atom selection; + Widget dragContext; + Time timestamp; + Boolean incremental; + Window source_window; + unsigned int tag; + XtSelectionCallbackProc transfer_callback; + unsigned char transfer_status; + + Atom motif_drop_atom; + + XmDropTransferList drop_transfer_lists; + Cardinal num_drop_transfer_lists; + Cardinal cur_drop_transfer_list; + Cardinal cur_xfer; + Atom * cur_targets; + XtPointer * cur_client_data; +} XmDropTransferPart; + +/* Full instance record declaration */ + +typedef struct _XmDropTransferRec +{ + ObjectPart object; + XmDropTransferPart dropTransfer; +} XmDropTransferRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmDropTransferP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/EditresComI.h b/libXm/osx/Xm/EditresComI.h new file mode 100644 index 0000000..e94e248 --- /dev/null +++ b/libXm/osx/Xm/EditresComI.h @@ -0,0 +1,17 @@ + +#ifndef _XmEditresComI_h +#define _XmEditresComI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void _XmEditResCheckMessages(Widget w, XtPointer data, XEvent event, Boolean cont); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif diff --git a/libXm/osx/Xm/Ext.h b/libXm/osx/Xm/Ext.h new file mode 100644 index 0000000..4dca266 --- /dev/null +++ b/libXm/osx/Xm/Ext.h @@ -0,0 +1,153 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmExt_h_ +#define _XmExt_h_ + + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + + + +typedef Widget (*XmWidgetFunc)(Widget); + + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +/* + * General name definitions. + */ + + +#define XmNbadActionParameters "badActionParameters" +#define XmNbadActionParametersMsg \ + "Bad parameters passed to an action routine of widget '%s'." + +#define XmNbadMotionParams "badMotionParams" +#define XmNbadMotionParamsMsg \ +"%s - Motion Action : must have exactly 1 parameter, either '%s' or '%s'." + +#define XmNbadRowPixmap "badRowPixmap" +#define XmNbadRowPixmapMsg "Extended List: Row pixmaps must have depth of 1." + +#define XmNbadXlfdFont "badXlfdFont" +#define XmNbadXlfdFontMsg \ +"%s: All Xlfd fonts must contain 14 hyphens\n'%s' is not valid." + +#define XmNcellNotEmpty "cellNotEmpty" +#define XmNcellNotEmptyMsg "XmIconBox: Cell %s is not empty" + +#define XmNcolorNameTooLong "colorNameTooLong" +#define XmNcolorNameTooLongMsg \ + "Color name '%s' is too long, truncated to '%s'." + +#define XmNcontextSaveFailed "contextSaveFailed" +#define XmNcontextSaveFailedMsg "Internal Error: Could not save context data." + +#define XmNconversionFailure "conversionFailure" +#define XmNconversionFailureMsg \ + "%s: Unable to perform string to %s conversion." + +#define XmNcouldNotFindFamilyData "couldNotFindFamilyData" +#define XmNcouldNotFindFamilyDataMsg \ + "Could not find family data for family '%s'." + +#define XmNforceGreaterThanZero "forceGreaterThanZero" +#define XmNforceGreaterThanZeroMsg \ +"XmNvisibleItemCount must be greater than zero being reset to one (1)." + +#define XmNinsertBeforeNotSibling "insertBeforeNotSibling" +#define XmNinsertBeforeNotSiblingMsg "XmHierarchy: InsertBefore Widget\ + is not a sibling of '%s'.\nInserting child at end of list." + +#define XmNnoComboShell "noComboShell" +#define XmNnoComboShellMsg \ + "Combination Box: When using a custom combo box a shell must be provided." + +#define XmNnoEmptyCells "noEmptyCells" +#define XmNnoEmptyCellsMsg "XmIconBox: Could not find any empty cells." + +#define XmNnoGadgetSupport "noGadgetSupport" +#define XmNnoGadgetSupportMsg "Widget does not support gadget children." + +#define XmNpixEditBadImageCreate "pixEditBadImageCreate" +#define XmNpixEditBadImageCreateMsg "Pixmap Editor: Can't allocate image data" + +#define XmNsameAsImageOrPix "sameAsImageOrPix" +#define XmNsameAsImageOrPixMsg \ +"%s : The bitmapMode resource can only be changed at the same time as the pixmap or image" + +#define XmNselfOrOutsideOfApplicationDrop "selfOrOutsideOfApplicationDrop" +#define XmNselfOrOutsideOfApplicationDropMsg \ + "Attempt to drop into illegal object." + +#define XmNstaticTranslationsMsg \ + "Cannot change translation table after initialization." + +#define XmNstaticScrollbarsMsg \ + "Cannot change scrollbars after initialization." + +#define XmNtextVerifyFailed "textVerifyFailed" +#define XmNtextVerifyFailedMsg "Combination Box: Text item validation failed." + +#define XmNunexpectedEvent "unexpectedEvent" +#define XmNunexpectedEventMsg "Unexpected Event Type %s.\n" + +#define XmNunparsableColor "unparsableColor" +#define XmNunparsableColorMsg \ + "Could not parse the color name '%s'." + +#define XmNnodeParentIsSelf "nodeParentIsSelf" +#define XmNnodeParentIsSelfMsg \ + "The node parent cannot be self referential." + +#define XmNstringGetFailed "stringGetFailed" +#define XmNstringGetFailedMsg "Unable to get MB string from XmString." + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + + +void XmCopyISOLatin1Lowered(char *, char *); + +int XmCompareISOLatin1(char*, char*); + +Boolean XmCompareXtWidgetGeometryToWidget(XtWidgetGeometry*, Widget); + +Boolean XmCompareXtWidgetGeometry(XtWidgetGeometry*, XtWidgetGeometry*); + + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __Ext_h__ */ diff --git a/libXm/osx/Xm/Ext18List.h b/libXm/osx/Xm/Ext18List.h new file mode 100644 index 0000000..332821b --- /dev/null +++ b/libXm/osx/Xm/Ext18List.h @@ -0,0 +1,151 @@ +#ifndef _XmExt18List_h_ +#define _XmExt18List_h_ + +#if defined(__cplusplus) +extern "C" { +#endif + +#include +#include + +externalref WidgetClass xmExt18ListWidgetClass XM_DEPRECATED; + +enum { + XmEXT18LIST_FOUND = XmMULTILIST_FOUND, + XmEXT18LIST_NOT_FOUND = XmMULTILIST_NOT_FOUND +}; + +typedef XmMultiListWidgetClass *XmExt18ListWidgetClass; +typedef XmMultiListWidget *XmExt18ListWidget; + +typedef XmMultiListRowInfo Xm18RowInfo; + +typedef XmMultiListCallbackStruct XmExt18ListCallbackStruct; + +/* + * Function Name: XmExt18ListGetSelectedRows + * Description: Takes an Extended List and returns a NULL terminated array + * of pointers to selected rows from the internal list + * Arguments: w - the extended list widget + * Returns: Xm18RowInfo ** + */ + +Xm18RowInfo ** XmExt18ListGetSelectedRows(Widget w) XM_DEPRECATED; + +/* Function Name: XmCreateExtended18List + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +extern Widget XmCreateExtended18List(Widget, + String, + ArgList, + Cardinal) XM_DEPRECATED; + +extern Widget XmCreateExt18List(Widget, + String, + ArgList, + Cardinal) XM_DEPRECATED; + +extern Widget XmVaCreateExt18List( + Widget parent, + char *name, + ...) XM_DEPRECATED; + +extern Widget XmVaCreateManagedExt18List( + Widget parent, + char *name, + ...) XM_DEPRECATED; + +/* Function Name: XmExt18ListUnselectAllItems + * Description: Unselects all rows + * Arguments: w - the ilist widget. + * Returns: none + */ +extern void XmExt18ListUnselectAllItems(Widget w) XM_DEPRECATED; + +/* Function Name: XmExt18ListUnselectItem + * Description: Unselects the row passed in + * Arguments: w - the ilist widget. + * row_info - ptr to the row passed in + * Returns: none + */ +extern void XmExt18ListUnselectItem(Widget, Xm18RowInfo *) XM_DEPRECATED; + +/* Function Name: XmExt18ListToggleRow + * Description: Toggles the selection state of a specified row + * Arguments: w - the extended list widget + * Returns: none + */ +extern void XmExt18ListToggleRow(Widget, short) XM_DEPRECATED; + +/* Function Name: XmExt18ListSelectItems + * Description: Set selection state by matching column entries to XmString + * Arguments: w - the extended list widget + * item - XmString to use as selection key + * column - column number (0 - N) to match (or XmANY_COLUMN) + * notify - if True, call XmNsingleSelectionCallback + * Returns: none + */ +extern void XmExt18ListSelectItems(Widget, XmString, int, Boolean) XM_DEPRECATED; + +/* Function Name: XmExt18ListDeselectItems + * Description: Set selection state by matching column entries to XmString + * Arguments: w - the extended list widget + * item - XmString to use as selection key + * column - column number (0 - N) to match (or XmANY_COLUMN) + * Returns: none + */ +extern void XmExt18ListDeselectItems(Widget, XmString, int) XM_DEPRECATED; + +/* Function Name: XmExt18ListSelectAllItems + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * notify - if True, call XmNsingleSelectionCallback for each + * Returns: none + */ +extern void XmExt18ListSelectAllItems(Widget, Boolean) XM_DEPRECATED; + +/* Function Name: XmExt18ListSelectRow + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * row - the row to select + * notify - if True, call XmNsingleSelectionCallback + * Returns: none + */ +extern void XmExt18ListSelectRow(Widget, int, Boolean) XM_DEPRECATED; + +/* Function Name: XmExt18ListDeselectRow + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * row - the row to select + * Returns: none + */ +extern void XmExt18ListDeselectRow(Widget, int) XM_DEPRECATED; + +/* + * Function Name: XmExt18ListGetSelectedRowArray + * Description: Takes an Extended List and returns a NULL terminated array + * of pointers to selected rows from the internal list + * Arguments: w - the extended list widget + * num_rows - pointer to the number of rows + * Returns: array of integer (selected) row numbers + */ +extern int *XmExt18ListGetSelectedRowArray(Widget, int *) XM_DEPRECATED; + +/* Function Name: XmExt18ListMakeRowVisible + * Description: Shifts the visible extended list rows as desired + * Arguments: w - the extended list widget + * row - the row number wished to be made visible + * Returns: none + */ +void XmExt18ListMakeRowVisible(Widget, int) XM_DEPRECATED; + +#if defined(__cplusplus) +} +#endif + +#endif /* _XmExt18List_h_ */ diff --git a/libXm/osx/Xm/Ext18ListP.h b/libXm/osx/Xm/Ext18ListP.h new file mode 100644 index 0000000..a2cc282 --- /dev/null +++ b/libXm/osx/Xm/Ext18ListP.h @@ -0,0 +1,60 @@ +#ifndef _XmExt18ListP_h_ +#define _XmExt18ListP_h_ + +#include "XmP.h" + +#undef XmIsExt18List +#define XmIsExt18List(w) \ + (_XmIsFastSubclass(XtClass(w), XmEXT18LIST_BIT)) + + +#include +#include + +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmExt18List_DEFAULT_VISIBLE_COUNT XmMULTILIST_DEFAULT_VISIBLE_COUNT + +#define XmExt18ListIndex (XmManagerIndex + 1) + +#define XmExt18List_title(w) (((XmExt18ListWidget)(w))->ext_list.title) +#define XmExt18List_find_label(w) (((XmExt18ListWidget)(w))->ext_list.find_label) +#define XmExt18List_double_click(w) (((XmExt18ListWidget)(w))->ext_list.double_click) +#define XmExt18List_single_select(w) (((XmExt18ListWidget)(w))->ext_list.single_select) +#define XmExt18List_show_find(w) (((XmExt18ListWidget)(w))->ext_list.show_find) +#define XmExt18List_title_wid(w) (((XmExt18ListWidget)(w))->ext_list.title_wid) +#define XmExt18List_frame(w) (((XmExt18ListWidget)(w))->ext_list.frame) +#define XmExt18List_ilist(w) (((XmExt18ListWidget)(w))->ext_list.ilist) +#define XmExt18List_v_bar(w) (((XmExt18ListWidget)(w))->ext_list.v_bar) +#define XmExt18List_h_bar(w) (((XmExt18ListWidget)(w))->ext_list.h_bar) +#define XmExt18List_find(w) (((XmExt18ListWidget)(w))->ext_list.find) +#define XmExt18List_find_text(w) (((XmExt18ListWidget)(w))->ext_list.find_text) +#define XmExt18List_last_search(w) (((XmExt18ListWidget)(w))->ext_list.last_search) +#define XmExt18List_item_found(w) (((XmExt18ListWidget)(w))->ext_list.item_found) +#define XmExt18List_not_found(w) (((XmExt18ListWidget)(w))->ext_list.not_found) +#define XmExt18List_visible_rows(w) (((XmExt18ListWidget)(w))->ext_list.visible_rows) +#define XmExt18List_title_string(w) (((XmExt18ListWidget)(w))->ext_list.title_string) + +typedef XmMultiListClassPart XmExt18ListClassPart; + +typedef XmMultiListClassRec XmExt18ListClassRec; + +typedef XmMultiListPart XmExt18ListPart; + +typedef XmMultiListRec XmExt18ListRec; + +extern XmExt18ListClassRec xmExt18ListClassRec XM_DEPRECATED; + +extern XmI18ListClassRec xiI18ListClassRec; +extern WidgetClass xmI18ListWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#endif /* _XmExt18ListP_h_ */ diff --git a/libXm/osx/Xm/ExtObjectI.h b/libXm/osx/Xm/ExtObjectI.h new file mode 100644 index 0000000..5342f87 --- /dev/null +++ b/libXm/osx/Xm/ExtObjectI.h @@ -0,0 +1,65 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ExtObjectI.h /main/6 1995/07/14 10:32:34 drk $ */ +#ifndef _XmExtObjectI_h +#define _XmExtObjectI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern char * _XmExtObjAlloc(int size); +extern void _XmExtObjFree(XtPointer element); +extern void _XmBuildExtResources(WidgetClass c); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmExtObjectI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ExtObjectP.h b/libXm/osx/Xm/ExtObjectP.h new file mode 100644 index 0000000..fc157e6 --- /dev/null +++ b/libXm/osx/Xm/ExtObjectP.h @@ -0,0 +1,102 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* $XConsortium: ExtObjectP.h /main/11 1995/07/14 10:32:48 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmExtObjectP_h +#define _XmExtObjectP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + XmCACHE_EXTENSION = 1, XmDESKTOP_EXTENSION, + XmSHELL_EXTENSION, XmPROTOCOL_EXTENSION, + XmDEFAULT_EXTENSION +}; + +#ifndef XmIsExtObject +#define XmIsExtObject(w) XtIsSubclass(w, xmExtObjectClass) +#endif /* XmIsExtObject */ + +#define XmLOGICAL_PARENT_RESOURCE (0x80 << sizeof(Cardinal)) + +/* Class record constants */ + +typedef struct _XmExtRec *XmExtObject; +typedef struct _XmExtClassRec *XmExtObjectClass; + +externalref WidgetClass xmExtObjectClass; + +/* Class Extension definitions */ + +typedef struct _XmExtClassPart { + XmSyntheticResource *syn_resources; + int num_syn_resources; + XtPointer extension; +} XmExtClassPart, *XmExtClassPartPtr; + +typedef struct _XmExtClassRec { + ObjectClassPart object_class; + XmExtClassPart ext_class; +} XmExtClassRec; + +typedef struct { + Widget logicalParent; + unsigned char extensionType; +} XmExtPart, *XmExtPartPtr; + +externalref XmExtClassRec xmExtClassRec; + +typedef struct _XmExtRec { + ObjectPart object; + XmExtPart ext; +} XmExtRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmExtObjectP_h */ diff --git a/libXm/osx/Xm/ExtP.h b/libXm/osx/Xm/ExtP.h new file mode 100644 index 0000000..d2641b1 --- /dev/null +++ b/libXm/osx/Xm/ExtP.h @@ -0,0 +1,113 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmExtP_h_ +#define _XmExtP_h_ + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#if defined(hpux) && OS_MAJOR_VERSION < 10 +#include +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef void (*XmVoidFunc)(void); +typedef int (*XmIntFunc)(void); +typedef unsigned int (*XmUnsignedIntFunc)(void); + +extern String xm_std_filter[], xm_std_constraint_filter[]; + +/************************************************************ +* MACROS +*************************************************************/ + +#define streq(a, b) (((a) != NULL) && ((b) != NULL) && (strcmp((a), (b)) == 0)) + +#define ForAllChildren(w, childP) \ + for ( (childP) = (w)->composite.children ; \ + (childP) < (w)->composite.children + (w)->composite.num_children ; \ + (childP)++ ) + +/* + * Math Stuff + * + * Some Systems define MIN and MAX so I have to undef them before I make + * my own definitions. + */ + +#define XM_ICON_BUTTON_CLASS_NAME ("XmIconButton") +#define XM_EXT_LIST_CLASS_NAME ("XmExtendedList") +#define XM_ILIST_CLASS_NAME ("XmIList") +#define XM_EXT_18_LIST_CLASS_NAME ("XmExtended18List") +#define XM_I18LIST_CLASS_NAME ("XmI18List") + + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + + + +void XmResolveAllPartOffsets64(WidgetClass, XmOffsetPtr*, XmOffsetPtr*); +void _XmMoveWidget(Widget, Position, Position); +void _XmResizeWidget(Widget, Dimension, Dimension, Dimension); +void _XmConfigureWidget(Widget, Position, Position, + Dimension, Dimension, Dimension); + +XtGeometryResult _XmRequestNewSize(Widget, Boolean, Dimension, + Dimension, + Dimension *, Dimension *); + +XtGeometryResult _XmHWQuery(Widget, XtWidgetGeometry*, XtWidgetGeometry *); + +void _XmGetFocus(Widget, XEvent *, String *, Cardinal *); + +void _XmFilterArgs(ArgList, Cardinal, String *, + ArgList *, Cardinal *); + +void _XmSetValuesOnChildren(Widget, ArgList, Cardinal); + +Boolean _XmGadgetWarning(Widget); + +String _XmGetMBStringFromXmString(XmString); + +/* + * Context Managment Routines. + */ + +void _XmSetContextData(Widget, XContext, XtPointer); +void _XmDeleteContextData(Widget, XContext); +Boolean _XmGetContextData(Widget, XContext, XtPointer *); +Boolean _XmUtilIsSubclassByNameQ(Widget, XrmQuark); +void _XmInitialIzeConverters(Widget); + +void _XmExtHighlightBorder(Widget); +void _XmExtUnhighlightBorder(Widget); + + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/libXm/osx/Xm/FileSB.h b/libXm/osx/Xm/FileSB.h new file mode 100644 index 0000000..da1c56f --- /dev/null +++ b/libXm/osx/Xm/FileSB.h @@ -0,0 +1,114 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: FileSB.h /main/12 1995/07/14 10:33:32 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFSelect_h +#define _XmFSelect_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Type definitions for FileSB resources: */ + + +typedef void (*XmQualifyProc)( Widget, XtPointer, XtPointer) ; +typedef void (*XmSearchProc)( Widget, XtPointer) ; + + + +/* Class record constants */ + +externalref WidgetClass xmFileSelectionBoxWidgetClass; + +typedef struct _XmFileSelectionBoxClassRec * XmFileSelectionBoxWidgetClass; +typedef struct _XmFileSelectionBoxRec * XmFileSelectionBoxWidget; + + +#ifndef XmIsFileSelectionBox +#define XmIsFileSelectionBox(w) (XtIsSubclass((w),xmFileSelectionBoxWidgetClass)) +#endif + + +/******** Public Function Declarations ********/ + +extern Widget XmFileSelectionBoxGetChild( + Widget fs, +#if NeedWidePrototypes + unsigned int which) ; +#else + unsigned char which) ; +#endif /* NeedWidePrototypes */ +extern void XmFileSelectionDoSearch( + Widget fs, + XmString dirmask) ; +extern Widget XmCreateFileSelectionBox( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmCreateFileSelectionDialog( + Widget ds_p, + String name, + ArgList fsb_args, + Cardinal fsb_n) ; +extern Widget XmVaCreateFileSelectionBox( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedFileSelectionBox( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFSelect_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/FileSBP.h b/libXm/osx/Xm/FileSBP.h new file mode 100644 index 0000000..7b870be --- /dev/null +++ b/libXm/osx/Xm/FileSBP.h @@ -0,0 +1,217 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: FileSBP.h /main/13 1995/09/19 23:02:34 cde-sun $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFSelectP_h +#define _XmFSelectP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Defines for use in allocation geometry matrix. */ + +#define XmFSB_MAX_WIDGETS_VERT 12 + +/* Bit locations for the state_flags bit field. +*/ +#define XmFS_NO_MATCH (1 << 0) +#define XmFS_IN_FILE_SEARCH (1 << 1) +#define XmFS_DIR_SEARCH_PROC (1 << 2) + +/* Constraint part record for FileSelectionBox widget */ + +typedef struct _XmFileSelectionBoxConstraintPart +{ + char unused; +} XmFileSelectionBoxConstraintPart, * XmFileSelectionBoxConstraint; + +/* New fields for the FileSelectionBox widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmFileSelectionBoxClassPart; + + +/* Full class record declaration */ + +typedef struct _XmFileSelectionBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmSelectionBoxClassPart selection_box_class; + XmFileSelectionBoxClassPart file_selection_box_class; +} XmFileSelectionBoxClassRec; + +externalref XmFileSelectionBoxClassRec xmFileSelectionBoxClassRec; + + +/* New fields for the FileSelectionBox widget record */ + +typedef struct +{ + XmString directory; /* directory specification */ + XmString pattern; /* file search pattern */ + Widget dir_list_label; /* directory list Label */ + XmString dir_list_label_string;/* directory list label text */ + Widget dir_list; /* directory List */ + XmString * dir_list_items; /* items in directory List */ + int dir_list_item_count;/* number of items in directory List */ + int dir_list_selected_item_position; + Widget filter_label; /* file search filter label */ + XmString filter_label_string;/* filter label text */ + Widget filter_text; /* filter text entry field */ + XmString dir_mask; /* string in filter text entry field */ + XmString no_match_string; /* string in list when no file match */ + XmQualifyProc qualify_search_data_proc; /* directory and mask routine */ + XmSearchProc dir_search_proc; /* change directory routine */ + XmSearchProc file_search_proc; /* file search routine */ + unsigned char file_type_mask; /* mask for type of files in file list */ + Boolean list_updated; /* flag to indicate file list update */ + Boolean directory_valid ; /* flag to indicate valid new directory*/ + unsigned char state_flags ; /* internal flags to indicate state. */ + + XtEnum path_mode ; + XtEnum file_filter_style ; + Widget dir_text ; + Widget dir_text_label ; + XmString dir_text_label_string ; + time_t prev_dir_modtime; +} XmFileSelectionBoxPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmFileSelectionBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmSelectionBoxPart selection_box; + XmFileSelectionBoxPart file_selection_box; +} XmFileSelectionBoxRec; + + +/* Access macros */ + +#define FS_Directory( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.directory) +#define FS_DirMask( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_mask) +#define FS_DirListLabel( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_label) +#define FS_DirListLabelString( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_label_string) +#define FS_DirList( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list) +#define FS_DirListItems( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_items) +#define FS_DirListItemCount( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_list_item_count) +#define FS_FilterLabel( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.filter_label) +#define FS_FilterLabelString( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.filter_label_string) +#define FS_FilterText( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.filter_text) +#define FS_Pattern( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.pattern) +#define FS_NoMatchString( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.no_match_string) +#define FS_QualifySearchDataProc( w) (((XmFileSelectionBoxWidget) \ + (w))->file_selection_box.qualify_search_data_proc) +#define FS_DirSearchProc( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.dir_search_proc) +#define FS_FileSearchProc( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.file_search_proc) +#define FS_RealDefaultButton( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.real_default_button) +#define FS_FileTypeMask( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.file_type_mask) +#define FS_ListUpdated( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.list_updated) +#define FS_DirectoryValid( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.directory_valid) +#define FS_StateFlags( w) \ + (((XmFileSelectionBoxWidget)(w))->file_selection_box.state_flags) +#define FS_DirListSelectedItemPosition( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_list_selected_item_position) + +#define FS_PathMode( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.path_mode) +#define FS_FileFilterStyle( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.file_filter_style) +#define FS_DirText( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_text) +#define FS_DirTextLabel( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_text_label) +#define FS_DirTextLabelString( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.dir_text_label_string) +#define FS_PrevDirModTime( w) (((XmFileSelectionBoxWidget) w) \ + ->file_selection_box.prev_dir_modtime) + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFSelectP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/FontS.h b/libXm/osx/Xm/FontS.h new file mode 100644 index 0000000..82e71d1 --- /dev/null +++ b/libXm/osx/Xm/FontS.h @@ -0,0 +1,70 @@ +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmFontSelector_h +#define _XmFontSelector_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + ************************************************************/ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +/************************************************************ + * TYPEDEFS AND DEFINES + ************************************************************/ + +typedef struct _XmFontSelectorClassRec *XmFontSelectorWidgetClass; +typedef struct _XmFontSelectorRec *XmFontSelectorWidget; + +/************************************************************ + * MACROS + ************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + ************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +/* Function Name: XmCreateFontSelector + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateFontSelector( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmFontSelectorWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmFontSelector_h - DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/FontSP.h b/libXm/osx/Xm/FontSP.h new file mode 100644 index 0000000..98e9fdc --- /dev/null +++ b/libXm/osx/Xm/FontSP.h @@ -0,0 +1,297 @@ +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmFontSelectorP_h +#define _XmFontSelectorP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ + * INCLUDE FILES + *************************************************************/ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmFontSelectorIndex (XmPanedIndex + 1) + +#define XmFontS_current_font(w) (((XmFontSelectorWidget)(w))->fs.current_font) +#define XmFontS_show_font_name(w) (((XmFontSelectorWidget)(w))->fs.show_font_name) +#define XmFontS_iso_fonts_only(w) (((XmFontSelectorWidget)(w))->fs.iso_fonts_only) +#define XmFontS_use_scaling(w) (((XmFontSelectorWidget)(w))->fs.use_scaling) +#define XmFontS_text_rows(w) (((XmFontSelectorWidget)(w))->fs.text_rows) +#define XmFontS_font_changed_callback(w) (((XmFontSelectorWidget)(w))->fs.font_changed_callback) +#define XmFontS_strings(w) (((XmFontSelectorWidget)(w))->fs.strings) +#define XmFontS_xlfd_mode(w) (((XmFontSelectorWidget)(w))->fs.xlfd_mode) +#define XmFontS_font_info(w) (((XmFontSelectorWidget)(w))->fs.font_info) +#define XmFontS_text(w) (((XmFontSelectorWidget)(w))->fs.text) +#define XmFontS_name_label(w) (((XmFontSelectorWidget)(w))->fs.name_label) +#define XmFontS_middle_pane(w) (((XmFontSelectorWidget)(w))->fs.middle_pane) +#define XmFontS_family_box(w) (((XmFontSelectorWidget)(w))->fs.family_box) +#define XmFontS_size_box(w) (((XmFontSelectorWidget)(w))->fs.size_box) +#define XmFontS_bold_toggle(w) (((XmFontSelectorWidget)(w))->fs.bold_toggle) +#define XmFontS_italic_toggle(w) (((XmFontSelectorWidget)(w))->fs.italic_toggle) +#define XmFontS_xlfd_toggle(w) (((XmFontSelectorWidget)(w))->fs.xlfd_toggle) +#define XmFontS_other_toggle(w) (((XmFontSelectorWidget)(w))->fs.other_toggle) +#define XmFontS_show_font_toggle(w) (((XmFontSelectorWidget)(w))->fs.show_font_toggle) +#define XmFontS_use_scaling_toggle(w) (((XmFontSelectorWidget)(w))->fs.use_scaling_toggle) +#define XmFontS_option_menu(w) (((XmFontSelectorWidget)(w))->fs.option_menu) +#define XmFontS_encoding_menu_shell(w) (((XmFontSelectorWidget)(w))->fs.encoding_menu_shell) +#define XmFontS_xlfd_only(w) (((XmFontSelectorWidget)(w))->fs.xlfd_only) +#define XmFontS_xlfd_sensitive(w) (((XmFontSelectorWidget)(w))->fs.xlfd_sensitive) +#define XmFontS_num_xlfd_only(w) (((XmFontSelectorWidget)(w))->fs.num_xlfd_only) +#define XmFontS_num_xlfd_sensitive(w) (((XmFontSelectorWidget)(w))->fs.num_xlfd_sensitive) +#define XmFontS_alloc_xlfd_only(w) (((XmFontSelectorWidget)(w))->fs.alloc_xlfd_only) +#define XmFontS_alloc_xlfd_sensitive(w) (((XmFontSelectorWidget)(w))->fs.alloc_xlfd_sensitive) +#define XmFontS_user_state(w) (((XmFontSelectorWidget)(w))->fs.user_state) +#define XmFontS_current_text(w) (((XmFontSelectorWidget)(w))->fs.current_text) +#define XmFontS_get_font(w) (((XmFontSelectorWidget)(w))->fs.get_font) +#define XmFontS_encoding(w) (((XmFontSelectorWidget)(w))->fs.encoding) +#define XmFontS_old_fontlist(w) (((XmFontSelectorWidget)(w))->fs.old_fontlist) +#define XmFontS_old_fontdata(w) (((XmFontSelectorWidget)(w))->fs.old_fontdata) +#define XmFontS_dpi75(w) (((XmFontSelectorWidget)(w))->fs.dpi75) +#define XmFontS_dpi100(w) (((XmFontSelectorWidget)(w))->fs.dpi100) +#define XmFontS_dpiAny(w) (((XmFontSelectorWidget)(w))->fs.dpiAny) +#define XmFontS_proportional(w) (((XmFontSelectorWidget)(w))->fs.proportional) +#define XmFontS_monospace(w) (((XmFontSelectorWidget)(w))->fs.monospace) +#define XmFontS_any_spacing(w) (((XmFontSelectorWidget)(w))->fs.any_spacing) + + +#define SAMPLE_TEXT(fsw) (XmFontS_strings((fsw)).sample_text) +#define ANY_STRING(fsw) (XmFontS_strings((fsw)).any) +#define LOWER_ANY_STRING(fsw) (XmFontS_strings((fsw)).lower_any) +#define FAMILY_STRING(fsw) (XmFontS_strings((fsw)).family) +#define SIZE_STRING(fsw) (XmFontS_strings((fsw)).size) +#define BOLD_STRING(fsw) (XmFontS_strings((fsw)).bold) +#define ITALIC_STRING(fsw) (XmFontS_strings((fsw)).italic) + +#define OPTION_STRING(fsw) (XmFontS_strings((fsw)).option) + +#define BOTH_STRING(fsw) (XmFontS_strings((fsw)).both) +#define MONO_SPACE_STRING(fsw) (XmFontS_strings((fsw)).mono_space) +#define PROPORTIONAL_STRING(fsw)(XmFontS_strings((fsw)).prop_space) + +#define XLFD_STRING(fsw) (XmFontS_strings((fsw)).xlfd) +#define OTHER_FONT_STRING(fsw) (XmFontS_strings((fsw)).other_font) + +#define DPI75_STRING(fsw) (XmFontS_strings((fsw)).dpi_75) +#define DPI100_STRING(fsw) (XmFontS_strings((fsw)).dpi_100) + +#define SCALING_STRING(fsw) (XmFontS_strings((fsw)).scaling) +#define SHOW_NAME_STRING(fsw) (XmFontS_strings((fsw)).show_name) + +#define ENCODING_ONLY_STRING(fsw) (XmFontS_strings((fsw)).encoding_only) +#define ENCODING_LIST(fsw) (XmFontS_strings((fsw)).encoding_list) + +#define ENCODING_STRING(fsw) XmFontS_encoding((fsw)) + +/* this structure provides the table for font selection */ + +#define WEIGHT_LEN 15 +#define SLANT_LEN 3 +#define SPACING_LEN 3 + +typedef unsigned char Flag; +typedef unsigned int LongFlag; + +#define FIXED ((Flag) 1 << 0) +#define BOLD ((Flag) 1 << 1) +#define ITALIC ((Flag) 1 << 2) +#define PROPORTIONAL ((Flag) 1 << 3) +#define SCALED_75 ((Flag) 1 << 4) +#define SCALED_100 ((Flag) 1 << 5) +#define DPI_75 ((Flag) 1 << 6) +#define DPI_100 ((Flag) 1 << 7) + +/* + * This allows me to reuse flag bits in the user_state since + * ISO is never set in the user state. + */ + +#define USER_PROPORTIONAL PROPORTIONAL +#define USER_FIXED FIXED + +typedef struct _FontData { + XrmQuark familyq; /* quarkified family name. */ + XrmQuark weightq; /* quarkified weight name. */ + char slant[SLANT_LEN + 1]; + char spacing[SPACING_LEN + 1]; + short resolution_x, resolution_y; + short point_size; + XrmQuark encoding; + Flag state; +} FontData; + +typedef struct FamilyInfo { + XrmQuark nameq; /* quarkified family name. */ + XrmQuark bold_nameq, medium_nameq; + XrmQuark italic_nameq, upright_nameq; + char fixed_spacing[SPACING_LEN + 1]; + LongFlag sizes_75, sizes_100; + Flag state; + XrmQuark *encodings; + int encoding_alloc; +} FamilyInfo; + +typedef struct FontInfo { + FontData *current_font; + String *others; + FamilyInfo *family_info; + short num_others; + short num_families; + short resolution; +} FontInfo; + +typedef struct _XmFontSelStringInfo { + XmString sample_text; + XmString any, lower_any; + XmString family, size; + XmString bold, italic, option, both; + XmString mono_space, prop_space; + XmString xlfd, other_font; + XmString dpi_75, dpi_100; + XmString scaling, encoding_only, show_name; + + String *encoding_list; +} XmFontSelStringInfo; + +/************************************************************ + * TYPEDEFS AND DEFINES + *************************************************************/ + +typedef struct _FontSelectorClassPart +{ + XtPointer extension; /* For later use. */ +} FontSelectorClassPart; + +typedef struct _XmFontSelectorClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmPanedClassPart paned_class; + FontSelectorClassPart font_selector_class; +} XmFontSelectorClassRec; + +typedef struct _XmFontSelectorPart +{ + /* Resources */ + String current_font; /* The currently shown font. */ + + Boolean show_font_name; /* show the font name window? */ + Boolean iso_fonts_only; /* show only iso fonts? */ + Boolean use_scaling; /* use font scaling? */ + + Dimension text_rows; /* The number of text rows to display*/ + + XtCallbackList font_changed_callback; /* when font changes. */ + + XmFontSelStringInfo strings; /* The font selectors external strings. */ + + /* Private Data */ + + Boolean xlfd_mode; /* True if we are int xlfd mode. */ + + FontInfo *font_info; /* The font information. */ + Widget text, name_label; /* Text and label widget below top area. */ + Widget middle_pane; /* The option info middle pane. */ + Widget family_box; /* The family choices combo box. */ + Widget size_box; /* The family choices combo box. */ + Widget bold_toggle, italic_toggle; /* The bold and italic toggle buttons */ + Widget xlfd_toggle, other_toggle; /* The xlfd and other font toggles. */ + Widget show_font_toggle, use_scaling_toggle; + Widget option_menu; /* The option menu. */ + Widget encoding_menu_shell; /* The menu shell associated with the */ + /* encoding menu. */ + + WidgetList xlfd_only; /* Only visable when in xlfd mode. */ + WidgetList xlfd_sensitive; /* Only sensitive when in xlfd mode. */ + + char num_xlfd_only, num_xlfd_sensitive; + char alloc_xlfd_only, alloc_xlfd_sensitive; + + Flag user_state; /* The current user selections. */ + + String current_text; /* The current text in the text widget. */ + String get_font; /* Where to store returned get values on + current_font. */ + String encoding; /* The encoding, may change. */ + + /* + * The previously set font_data, free when font changed, or widget + * destroyed. + */ + + XmFontList old_fontlist; + XFontStruct * old_fontdata; + + /* + * These values were added 2/1/94 + */ + Widget dpi75, dpi100, dpiAny; /* DPI toggle buttons. */ + Widget proportional, monospace, any_spacing; + /* Spacing toggle buttons */ +} XmFontSelectorPart; + +typedef struct _XmFontSelectorRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmPanedPart paned; + XmFontSelectorPart fs; +} XmFontSelectorRec; + +typedef struct _XmFontSelectorConstraintsPart +{ + XtPointer dummy; +} XmFontSelectorConstraintsPart; + +typedef struct _XmFontSelectorConstraintsRec +{ + XmManagerConstraintPart manager; + XmPanedConstraintsPart paned; + XmFontSelectorConstraintsPart fs; +} XmFontSelectorConstraintsRec, *XmFontSelectorConstraints; + +/************************************************************ + * MACROS + *************************************************************/ + +/************************************************************ + * GLOBAL DECLARATIONS + *************************************************************/ + +/************************************************************ + * EXTERNAL DECLARATIONS + ************************************************************/ + +/************************************************************ + * STATIC DECLARATIONS + ************************************************************/ + +extern XmFontSelectorClassRec xmFontSelectorClassRec; + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmFontSelectorP_h - DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Form.h b/libXm/osx/Xm/Form.h new file mode 100644 index 0000000..54cd79d --- /dev/null +++ b/libXm/osx/Xm/Form.h @@ -0,0 +1,96 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Form.h /main/12 1995/07/14 10:34:46 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmForm_h +#define _XmForm_h + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Form Widget */ + +externalref WidgetClass xmFormWidgetClass; + +typedef struct _XmFormClassRec * XmFormWidgetClass; +typedef struct _XmFormRec * XmFormWidget; + + +/* ifndef for Fast Subclassing */ + +#ifndef XmIsForm +#define XmIsForm(w) XtIsSubclass(w, xmFormWidgetClass) +#endif /* XmIsForm */ + +/******** Public Function Declarations ********/ + +extern Widget XmCreateForm( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmCreateFormDialog( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmVaCreateForm( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedForm( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmForm_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/FormP.h b/libXm/osx/Xm/FormP.h new file mode 100644 index 0000000..cf8ab0b --- /dev/null +++ b/libXm/osx/Xm/FormP.h @@ -0,0 +1,155 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: FormP.h /main/13 1998/03/25 12:25:28 csn $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFormP_h +#define _XmFormP_h + + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* define index constants which are used to access attribute array of Form + * so that subclass of Form can make use of them. + */ + +#define _XmFORM_LEFT 0 +#define _XmFORM_RIGHT 1 +#define _XmFORM_TOP 2 +#define _XmFORM_BOTTOM 3 + + +typedef struct _XmFormAttachmentRec +{ + unsigned char type; + Widget w; + int percent; + int offset; + int value; + int tempValue; +} XmFormAttachmentRec, * XmFormAttachment; + + +#ifdef att +#undef att +#endif + +typedef struct _XmFormConstraintPart +{ + XmFormAttachmentRec att[4]; + Widget next_sibling; + Boolean sorted; + Boolean resizable; + Dimension preferred_width, preferred_height; +} XmFormConstraintPart, * XmFormConstraint; + +typedef struct _XmFormConstraintRec +{ + XmManagerConstraintPart manager; + XmFormConstraintPart form; +} XmFormConstraintRec, * XmFormConstraintPtr; + + +/* Form class structure */ + +typedef struct _XmFormClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmFormClassPart; + + +/* Full class record declaration for form class */ + +typedef struct _XmFormClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmFormClassPart form_class; +} XmFormClassRec; + +externalref XmFormClassRec xmFormClassRec; + + +/* The Form instance record */ + +typedef struct _XmFormPart +{ + Dimension horizontal_spacing; + Dimension vertical_spacing; + int fraction_base; + Boolean rubber_positioning; + Widget first_child; + Boolean initial_width, initial_height; + Boolean processing_constraints; +} XmFormPart; + + +/* Full instance record declaration */ + +typedef struct _XmFormRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmFormPart form; +} XmFormRec; + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFormP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Frame.h b/libXm/osx/Xm/Frame.h new file mode 100644 index 0000000..8b0593e --- /dev/null +++ b/libXm/osx/Xm/Frame.h @@ -0,0 +1,87 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Frame.h /main/12 1995/07/14 10:35:48 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFrame_h +#define _XmFrame_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsFrame +#define XmIsFrame(w) XtIsSubclass(w, xmFrameWidgetClass) +#endif /* XmIsFrame */ + +/* Class record constants */ + +externalref WidgetClass xmFrameWidgetClass; + +typedef struct _XmFrameClassRec * XmFrameWidgetClass; +typedef struct _XmFrameRec * XmFrameWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateFrame( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmVaCreateFrame( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedFrame( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFrame_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/FrameP.h b/libXm/osx/Xm/FrameP.h new file mode 100644 index 0000000..81179b9 --- /dev/null +++ b/libXm/osx/Xm/FrameP.h @@ -0,0 +1,130 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: FrameP.h /main/13 1995/09/19 23:03:22 cde-sun $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmFrameP_h +#define _XmFrameP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Full class records */ + +typedef struct +{ + XtPointer extension; +} XmFrameClassPart; + +typedef struct _XmFrameClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmFrameClassPart frame_class; +} XmFrameClassRec; + +externalref XmFrameClassRec xmFrameClassRec; + + +/* Frame instance records */ + +typedef struct +{ + Dimension margin_width; + Dimension margin_height; + unsigned char shadow_type; + Dimension old_width; + Dimension old_height; + Dimension old_shadow_thickness; + Position old_shadow_x; + Position old_shadow_y; + Widget work_area; + Widget title_area; + Boolean processing_constraints; +} XmFramePart; + +typedef struct _XmFrameRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmFramePart frame; +} XmFrameRec; + + +/* Frame constraint records */ + +typedef struct _XmFrameConstraintPart +{ + /* "unused" is actually being used in the CheckSetChildType defaultproc ! */ + int unused; + unsigned char child_type; + unsigned char child_h_alignment; + Dimension child_h_spacing; + unsigned char child_v_alignment; +} XmFrameConstraintPart, * XmFrameConstraint; + +typedef struct _XmFrameConstraintRec +{ + XmManagerConstraintPart manager; + XmFrameConstraintPart frame; +} XmFrameConstraintRec, * XmFrameConstraintPtr; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmFrameP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/GMUtilsI.h b/libXm/osx/Xm/GMUtilsI.h new file mode 100644 index 0000000..d9f0e17 --- /dev/null +++ b/libXm/osx/Xm/GMUtilsI.h @@ -0,0 +1,132 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: GMUtilsI.h /main/9 1995/07/13 17:26:45 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmGMUtilsI_h +#define _XmGMUtilsI_h + + +/* Include files: +*/ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmGMCalcSize( + XmManagerWidget manager, +#if NeedWidePrototypes + int margin_width, + int margin_height, +#else + Dimension margin_width, + Dimension margin_height, +#endif /* NeedWidePrototypes */ + Dimension *replyWidth, + Dimension *replyHeight) ; +extern Boolean _XmGMDoLayout( + XmManagerWidget manager, +#if NeedWidePrototypes + int margin_width, + int margin_height, +#else + Dimension margin_width, + Dimension margin_height, +#endif /* NeedWidePrototypes */ + int resize_policy, +#if NeedWidePrototypes + int queryonly) ; +#else + Boolean queryonly) ; +#endif /* NeedWidePrototypes */ +extern void _XmGMEnforceMargin( + XmManagerWidget manager, +#if NeedWidePrototypes + int margin_width, + int margin_height, + int setvalue) ; +#else + Dimension margin_width, + Dimension margin_height, + Boolean setvalue) ; +#endif /* NeedWidePrototypes */ +extern XtGeometryResult _XmGMHandleQueryGeometry( + Widget widget, + XtWidgetGeometry *intended, + XtWidgetGeometry *desired, +#if NeedWidePrototypes + int margin_width, + int margin_height, +#else + Dimension margin_width, + Dimension margin_height, +#endif /* NeedWidePrototypes */ + int resize_policy) ; +extern Boolean _XmGMOverlap( + XmManagerWidget manager, + Widget w) ; +extern XtGeometryResult _XmGMHandleGeometryManager( + Widget parent, + Widget w, + XtWidgetGeometry *request, + XtWidgetGeometry *reply, +#if NeedWidePrototypes + int margin_width, + int margin_height, +#else + Dimension margin_width, + Dimension margin_height, +#endif /* NeedWidePrototypes */ + int resize_policy, + int allow_overlap) ; +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGMUtilsI_h */ + /* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Gadget.h b/libXm/osx/Xm/Gadget.h new file mode 100644 index 0000000..997e4c7 --- /dev/null +++ b/libXm/osx/Xm/Gadget.h @@ -0,0 +1,70 @@ +/* $XConsortium: Gadget.h /main/5 1995/07/15 20:51:03 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmGadget_h +#define _XmGadget_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsGadget +#define XmIsGadget(w) XtIsSubclass(w, xmGadgetClass) +#endif /* XmIsGadget */ + +externalref WidgetClass xmGadgetClass; + +typedef struct _XmGadgetClassRec * XmGadgetClass; +typedef struct _XmGadgetRec * XmGadget; + + +/******** Public Function Declarations ********/ + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGadget_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/GadgetI.h b/libXm/osx/Xm/GadgetI.h new file mode 100644 index 0000000..12b2120 --- /dev/null +++ b/libXm/osx/Xm/GadgetI.h @@ -0,0 +1,62 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: GadgetI.h /main/5 1995/07/13 17:27:09 drk $ */ +#ifndef _XmGadgetI_h +#define _XmGadgetI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmBuildGadgetResources(WidgetClass c) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGadgetI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/GadgetP.h b/libXm/osx/Xm/GadgetP.h new file mode 100644 index 0000000..51a904a --- /dev/null +++ b/libXm/osx/Xm/GadgetP.h @@ -0,0 +1,203 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: GadgetP.h /main/8 1995/07/13 17:27:17 drk $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmGadgetP_h +#define _XmGadgetP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Masks to define input the gadget is interested in */ + +#define XmNO_EVENT 0x000 +#define XmENTER_EVENT 0x001 +#define XmLEAVE_EVENT 0x002 +#define XmFOCUS_IN_EVENT 0x004 +#define XmFOCUS_OUT_EVENT 0x008 +#define XmMOTION_EVENT 0x010 +#define XmARM_EVENT 0x020 +#define XmACTIVATE_EVENT 0x040 +#define XmHELP_EVENT 0x080 +#define XmKEY_EVENT 0x100 +#define XmMULTI_ARM_EVENT 0x200 +#define XmMULTI_ACTIVATE_EVENT 0x400 +#define XmBDRAG_EVENT 0x800 +#define XmALL_EVENT 0xFFF + + +/* Gadget access Macros */ +#define G_ShadowThickness(g) \ + (((XmGadget)(g))->gadget.shadow_thickness) +#define G_HighlightThickness(g) \ + (((XmGadget)(g))->gadget.highlight_thickness) + +#define GCEPTR(wc) ((XmGadgetClassExt *)(&(((XmGadgetClass)(wc))->gadget_class.extension))) +#define _XmGetGadgetClassExtPtr(wc, owner) \ + ((*GCEPTR(wc) && (((*GCEPTR(wc))->record_type) == owner))\ + ? GCEPTR(wc) \ + :((XmGadgetClassExt *) _XmGetClassExtensionPtr(((XmGenericClassExt *)GCEPTR(wc)), owner))) + +#define XmGadgetClassExtVersion 2L + + +/* Gadget cache header for each gadget's Cache Part */ + +typedef struct _XmGadgetCache +{ + struct _XmGadgetCache *next; + struct _XmGadgetCache *prev; + int ref_count; +} XmGadgetCache, *XmGadgetCachePtr; + + +/* A cache entry for each class which desires gadget caching */ + +typedef struct _XmCacheClassPart +{ + XmGadgetCache cache_head; + XmCacheCopyProc cache_copy; + XmGadgetCacheProc cache_delete; + XmCacheCompareProc cache_compare; +} XmCacheClassPart, *XmCacheClassPartPtr; + +/* A struct for properly aligning the data part of the cache entry. */ + +typedef struct _XmGadgetCacheRef +{ + XmGadgetCache cache; + XtArgVal data; +} XmGadgetCacheRef, *XmGadgetCacheRefPtr; + +/* Gadget class structure */ + +typedef struct _XmGadgetClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmWidgetBaselineProc widget_baseline; + XmWidgetDisplayRectProc widget_display_rect; + XmWidgetMarginsProc widget_margins; +}XmGadgetClassExtRec, *XmGadgetClassExt; + +typedef struct _XmGadgetClassPart +{ + XtWidgetProc border_highlight; + XtWidgetProc border_unhighlight; + XtActionProc arm_and_activate; + XmWidgetDispatchProc input_dispatch; + XmVisualChangeProc visual_change; /* unused in Motif 2.0 */ + XmSyntheticResource * syn_resources; + int num_syn_resources; + XmCacheClassPartPtr cache_part; + XtPointer extension; +} XmGadgetClassPart; + + +/* Full class record declaration for Gadget class */ + +typedef struct _XmGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; +} XmGadgetClassRec; + +externalref XmGadgetClassRec xmGadgetClassRec; + + +/* The Gadget instance record */ + +typedef struct _XmGadgetPart +{ + Dimension shadow_thickness; + Dimension highlight_thickness; + + XtCallbackList help_callback; + XtPointer user_data; + + Boolean traversal_on; + Boolean highlight_on_enter; + Boolean have_traversal; + + unsigned char unit_type; + XmNavigationType navigation_type; + + Boolean highlight_drawn; + Boolean highlighted; + Boolean visible; + + Mask event_mask; + XmDirection layout_direction; +#ifdef OM22_COMPATIBILITY + XmString tool_tip_string; +#endif +} XmGadgetPart; + +/* Full instance record declaration */ + +typedef struct _XmGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; +} XmGadgetRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGadgetP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + + + diff --git a/libXm/osx/Xm/GadgetUtiI.h b/libXm/osx/Xm/GadgetUtiI.h new file mode 100644 index 0000000..253ebb2 --- /dev/null +++ b/libXm/osx/Xm/GadgetUtiI.h @@ -0,0 +1,64 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: GadgetUtiI.h /main/5 1995/07/13 17:27:26 drk $ */ +#ifndef _XmGadgetUtilI_h +#define _XmGadgetUtilI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for GadgetUtil.c ********/ + +extern XmGadget _XmInputForGadget(Widget cw, int x, int y) ; +extern void _XmDispatchGadgetInput(Widget g, XEvent *event, Mask mask) ; +extern Time _XmGetDefaultTime(Widget, XEvent*) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGadgetUtilI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/GeoUtilsI.h b/libXm/osx/Xm/GeoUtilsI.h new file mode 100644 index 0000000..7fe1865 --- /dev/null +++ b/libXm/osx/Xm/GeoUtilsI.h @@ -0,0 +1,182 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: GeoUtilsI.h /main/5 1995/07/13 17:28:18 drk $ */ +#ifndef _XmGeoUtilsI_h +#define _XmGeoUtilsI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for GeoUtils.c ********/ + +extern XtGeometryResult _XmHandleQueryGeometry( + Widget wid, + XtWidgetGeometry *intended, + XtWidgetGeometry *desired, +#if NeedWidePrototypes + unsigned int policy, +#else + unsigned char policy, +#endif /* NeedWidePrototypes */ + XmGeoCreateProc createMatrix) ; +extern XtGeometryResult _XmHandleGeometryManager( + Widget wid, + Widget instigator, + XtWidgetGeometry *desired, + XtWidgetGeometry *allowed, +#if NeedWidePrototypes + unsigned int policy, +#else + unsigned char policy, +#endif /* NeedWidePrototypes */ + XmGeoMatrix *cachePtr, + XmGeoCreateProc createMatrix) ; +extern void _XmHandleSizeUpdate( + Widget wid, +#if NeedWidePrototypes + unsigned int policy, +#else + unsigned char policy, +#endif /* NeedWidePrototypes */ + XmGeoCreateProc createMatrix) ; +extern XmGeoMatrix _XmGeoMatrixAlloc( + unsigned int numRows, + unsigned int numBoxes, + unsigned int extSize) ; +extern void _XmGeoMatrixFree( + XmGeoMatrix geo_spec) ; +extern Boolean _XmGeoSetupKid( + XmKidGeometry geo, + Widget kidWid) ; +extern void _XmGeoMatrixGet( + XmGeoMatrix geoSpec, + int geoType) ; +extern void _XmGeoMatrixSet( + XmGeoMatrix geoSpec) ; +extern void _XmGeoAdjustBoxes( + XmGeoMatrix geoSpec) ; +extern void _XmGeoGetDimensions( + XmGeoMatrix geoSpec) ; +extern void _XmGeoArrangeBoxes( + XmGeoMatrix geoSpec, +#if NeedWidePrototypes + int x, + int y, +#else + Position x, + Position y, +#endif /* NeedWidePrototypes */ + Dimension *pW, + Dimension *pH) ; +extern Dimension _XmGeoBoxesSameWidth( + XmKidGeometry rowPtr, +#if NeedWidePrototypes + int width) ; +#else + Dimension width) ; +#endif /* NeedWidePrototypes */ +extern Dimension _XmGeoBoxesSameHeight( + XmKidGeometry rowPtr, +#if NeedWidePrototypes + int height) ; +#else + Dimension height) ; +#endif /* NeedWidePrototypes */ +extern void _XmSeparatorFix( + XmGeoMatrix geoSpec, + int action, + XmGeoMajorLayout layoutPtr, + XmKidGeometry rowPtr) ; +extern void _XmMenuBarFix( + XmGeoMatrix geoSpec, + int action, + XmGeoMajorLayout layoutPtr, + XmKidGeometry rowPtr) ; +extern void _XmGeoLoadValues( + Widget wid, + int geoType, + Widget instigator, + XtWidgetGeometry *request, + XtWidgetGeometry *geoResult) ; +extern int _XmGeoCount_kids( + register CompositeWidget c) ; +extern XmKidGeometry _XmGetKidGeo( + Widget wid, + Widget instigator, + XtWidgetGeometry *request, + int uniform_border, +#if NeedWidePrototypes + int border, +#else + Dimension border, +#endif /* NeedWidePrototypes */ + int uniform_width_margins, + int uniform_height_margins, + Widget help, + int geo_type) ; +extern void _XmGeoClearRectObjAreas( + RectObj r, + XWindowChanges *old) ; +extern void _XmSetKidGeo( + XmKidGeometry kg, + Widget instigator) ; +extern Boolean _XmGeometryEqual( + Widget wid, + XtWidgetGeometry *geoA, + XtWidgetGeometry *geoB) ; +extern Boolean _XmGeoReplyYes( + Widget wid, + XtWidgetGeometry *desired, + XtWidgetGeometry *response) ; +extern XtGeometryResult _XmMakeGeometryRequest( + Widget w, + XtWidgetGeometry *geom) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGeoUtilsI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/GrabShell.h b/libXm/osx/Xm/GrabShell.h new file mode 100644 index 0000000..2c2ad6b --- /dev/null +++ b/libXm/osx/Xm/GrabShell.h @@ -0,0 +1,74 @@ +/* $XConsortium: GrabShell.h /main/5 1995/07/15 20:51:22 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmGrabShell_h +#define _XmGrabShell_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmGrabShellWidgetClass; + +typedef struct _XmGrabShellClassRec * XmGrabShellWidgetClass; +typedef struct _XmGrabShellWidgetRec * XmGrabShellWidget; + +#ifndef XmIsGrabShell +#define XmIsGrabShell(w) XtIsSubclass(w, xmGrabShellWidgetClass) +#endif /* XmIsGrabShell */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateGrabShell( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGrabShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/GrabShellP.h b/libXm/osx/Xm/GrabShellP.h new file mode 100644 index 0000000..dba9237 --- /dev/null +++ b/libXm/osx/Xm/GrabShellP.h @@ -0,0 +1,131 @@ +/* $XConsortium: GrabShellP.h /main/5 1995/07/15 20:51:26 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmGrabShellP_h +#define _XmGrabShellP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The GrabShell instance record */ + +typedef struct +{ + Cursor cursor; + Dimension shadow_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + GC top_shadow_GC; + GC bottom_shadow_GC; + Boolean owner_events; + int grab_style; + /* Internal fields */ + Time post_time; + Time unpost_time; + Boolean mapped; + Window old_focus; + int old_revert_to; +} XmGrabShellPart; + + +/* Full instance record declaration */ + +typedef struct _XmGrabShellRec +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm_shell; + VendorShellPart vendor_shell; + XmGrabShellPart grab_shell; +} XmGrabShellRec; + +typedef struct _XmGrabShellWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm_shell; + VendorShellPart vendor_shell; + XmGrabShellPart grab_shell; +} XmGrabShellWidgetRec; + + + +/* GrabShell class structure */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmGrabShellClassPart; + + +/* Full class record declaration */ + +typedef struct _XmGrabShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + XmGrabShellClassPart grab_shell_class; +} XmGrabShellClassRec; + + +externalref XmGrabShellClassRec xmGrabShellClassRec; + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmGrabShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/HashI.h b/libXm/osx/Xm/HashI.h new file mode 100644 index 0000000..3f3db02 --- /dev/null +++ b/libXm/osx/Xm/HashI.h @@ -0,0 +1,79 @@ +/* $TOG: HashI.h /main/6 1997/06/18 17:39:16 samborn $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmHashI_h +#define _XmHashI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int XmHashValue; +typedef XtPointer XmHashKey; +typedef struct _XmHashTableRec *XmHashTable; + +typedef Boolean (*XmHashCompareProc)(XmHashKey, XmHashKey); +typedef XmHashValue (*XmHashFunction)(XmHashKey); +typedef Boolean (*XmHashMapProc)(XmHashKey, XtPointer value, XtPointer data); + +XmHashTable _XmAllocHashTable(Cardinal, XmHashCompareProc, XmHashFunction); +void _XmResizeHashTable(XmHashTable, Cardinal); +void _XmFreeHashTable(XmHashTable); +XtPointer _XmGetHashEntryIterate(XmHashTable, XmHashKey, XtPointer*); +void _XmAddHashEntry(XmHashTable, XmHashKey, XtPointer); +XtPointer _XmRemoveHashEntry(XmHashTable, XmHashKey); +XtPointer _XmRemoveHashIterator(XmHashTable, XtPointer*); +Cardinal _XmHashTableCount(XmHashTable); +Cardinal _XmHashTableSize(XmHashTable); +void _XmMapHashTable(XmHashTable, XmHashMapProc, XtPointer); +#ifdef DEBUG +void _XmPrintHashTable(XmHashTable); +#endif + +#define _XmGetHashEntry(table, key) _XmGetHashEntryIterate(table, key, NULL) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmHashI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Hierarchy.h b/libXm/osx/Xm/Hierarchy.h new file mode 100644 index 0000000..1378d7d --- /dev/null +++ b/libXm/osx/Xm/Hierarchy.h @@ -0,0 +1,63 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmHierarchy_h +#define _XmHierarchy_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmHierarchyClassRec *XmHierarchyWidgetClass; +typedef struct _XmHierarchyRec *XmHierarchyWidget; + +typedef struct _XmHierarchyNodeStateData { + Widget widget; + XmHierarchyNodeState state; +} XmHierarchyNodeStateData; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL FUNCTION DECLARATIONS +*************************************************************/ + +/* Function Name: XmHierarchyOpenAllAncestors + * Description: This function opens all ancestors of the given node. + * Arguments: nw - the node (widget) that will be changed. + * Returns: none + */ + +void XmHierarchyOpenAllAncestors(Widget); + +WidgetList XmHierarchyGetChildNodes(Widget); + +extern WidgetClass xmHierarchyWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#endif /* _Hierarchy_h */ diff --git a/libXm/osx/Xm/HierarchyP.h b/libXm/osx/Xm/HierarchyP.h new file mode 100644 index 0000000..0e3b0b7 --- /dev/null +++ b/libXm/osx/Xm/HierarchyP.h @@ -0,0 +1,207 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmHierarchyP_h +#define _XmHierarchyP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include +#include + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define IS_MAPPED (1L << 1) +#define IS_COMPRESSED (1L << 2) +#define PARENT_GONE (1L << 3) +#define IS_SELECTED (1L << 4) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct _HierNodeInfo { + /* + * Public (Resource) data. + */ + + XmHierarchyNodeState state; /* State of the node. */ + Widget parent; /* parent of this child. */ + Widget insert_before; /* Sibling to insert this node before; + NULL will place it at the end. */ + Pixmap open_folder, close_folder; /* Images for open/close buttons. */ + + /* + * Private data. + */ + + Widget widget; /* Back pointer to this node's widget. */ + Widget open_close_button; /* The open or close button. */ + + struct _HierarchyConstraintRec ** children; /* norm children. */ + Cardinal num_children; /* number of each type of children. */ + Cardinal alloc_attrs, alloc; /* amount of allocated space for each */ + + unsigned char status; /* 8 status bits. */ +} HierNodeInfo; + +typedef struct _HierarchyConstraintRec { + XmManagerConstraintPart manager; + HierNodeInfo hierarchy; +} HierarchyConstraintRec, XmHierarchyConstraintRec, *HierarchyConstraints; + +typedef void (*XmHierarchyNodeProc)(HierarchyConstraints); +typedef void (*XmHierarchyExtraNodeProc)(Widget, HierarchyConstraints); +typedef void (*XmHierarchyBuildTableProc)(Widget, + HierarchyConstraints, Cardinal *); +typedef void (*XmHierarchyResetButtonProc)(Widget, HierarchyConstraints); + +typedef struct { + /* Class function for changing node state. */ + XmHierarchyNodeProc change_node_state; + /* map or unmap a given node. */ + XmHierarchyNodeProc map_node; + XmHierarchyNodeProc unmap_node; + /* Unmaps all the extra nodes. */ + XmHierarchyExtraNodeProc unmap_all_extra_nodes; + /* Builds the node table. */ + XmHierarchyBuildTableProc build_node_table; + /* Correctly sets the state of the open/close button. */ + XmHierarchyResetButtonProc reset_open_close_button; + /* Toggles state of a node. */ + XtCallbackProc toggle_node_state; + /* Just in case we need it later. */ + XtPointer extension; +} HierarchyClassPart; + +typedef struct _XmHierarchyClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + HierarchyClassPart hierarchy_class; +} XmHierarchyClassRec; + +externalref XmHierarchyClassRec xmHierarchyClassRec; + +typedef struct _HierarchyPart { + /* resources */ + + Boolean auto_close; /* Auto-close children when parent is closed?*/ + Boolean refigure_mode; /* Do refigures? */ + + Dimension h_margin; /* The horizontal margin. */ + Dimension v_margin; /* The vertical margin. */ + Pixmap open_folder, close_folder; /* Images for open/close buttons. */ + + XtCallbackList node_state_callback; /* Called when the node button is + clicked */ + XtCallbackList node_state_changed_callback; /* Called when the node state + changes */ + XtCallbackList node_state_beg_end_callback; /* Called when beginning + or ending a set of node + state changes */ + + /* private state */ + + HierarchyConstraintRec ** node_table; + HierarchyConstraints top_node; + Cardinal num_nodes, alloc_nodes; + Pixmap def_open_folder, def_close_folder; /* Default folder button Images*/ + + XtWorkProcId work_proc_id; /* work proc id for the move nodes wp */ +} HierarchyPart; + +typedef struct _XmHierarchyRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + HierarchyPart hierarchy; +} XmHierarchyRec; + +/* + * These are necessary because the XmResolvePartOffset macros assume a + * certain naming convention + */ +typedef HierarchyPart XmHierarchyPart; +typedef HierNodeInfo XmHierarchyConstraintPart; + +#define XmHierarchy_auto_close(w) (((XmHierarchyWidget)(w))->hierarchy.auto_close) +#define XmHierarchy_refigure_mode(w) (((XmHierarchyWidget)(w))->hierarchy.refigure_mode) +#define XmHierarchy_h_margin(w) (((XmHierarchyWidget)(w))->hierarchy.h_margin) +#define XmHierarchy_v_margin(w) (((XmHierarchyWidget)(w))->hierarchy.v_margin) +#define XmHierarchy_open_folder(w) (((XmHierarchyWidget)(w))->hierarchy.open_folder) +#define XmHierarchy_close_folder(w) (((XmHierarchyWidget)(w))->hierarchy.close_folder) +#define XmHierarchy_node_state_callback(w) (((XmHierarchyWidget)(w))->hierarchy.node_state_callback) +#define XmHierarchy_node_state_changed_callback(w) (((XmHierarchyWidget)(w))->hierarchy.node_state_changed_callback) +#define XmHierarchy_node_state_beg_end_callback(w) (((XmHierarchyWidget)(w))->hierarchy.node_state_beg_end_callback) +#define XmHierarchy_node_table(w) (((XmHierarchyWidget)(w))->hierarchy.node_table) +#define XmHierarchy_top_node(w) (((XmHierarchyWidget)(w))->hierarchy.top_node) +#define XmHierarchy_num_nodes(w) (((XmHierarchyWidget)(w))->hierarchy.num_nodes) +#define XmHierarchy_alloc_nodes(w) (((XmHierarchyWidget)(w))->hierarchy.alloc_nodes) +#define XmHierarchy_def_open_folder(w) (((XmHierarchyWidget)(w))->hierarchy.def_open_folder) +#define XmHierarchy_def_close_folder(w) (((XmHierarchyWidget)(w))->hierarchy.def_close_folder) +#define XmHierarchy_work_proc_id(w) (((XmHierarchyWidget)(w))->hierarchy.work_proc_id) + +#define XmHierarchyC_state(constraints) ((constraints)->hierarchy.state) +#define XmHierarchyC_parent(constraints) ((constraints)->hierarchy.parent) +#define XmHierarchyC_insert_before(constraints) ((constraints)->hierarchy.insert_before) +#define XmHierarchyC_open_folder(constraints) ((constraints)->hierarchy.open_folder) +#define XmHierarchyC_close_folder(constraints) ((constraints)->hierarchy.close_folder) +#define XmHierarchyC_widget(constraints) ((constraints)->hierarchy.widget) +#define XmHierarchyC_open_close_button(constraints) ((constraints)->hierarchy.open_close_button) +#define XmHierarchyC_children(constraints) ((constraints)->hierarchy.children) +#define XmHierarchyC_num_children(constraints) ((constraints)->hierarchy.num_children) +#define XmHierarchyC_alloc_attrs(constraints) ((constraints)->hierarchy.alloc_attrs) +#define XmHierarchyC_alloc(constraints) ((constraints)->hierarchy.alloc) +#define XmHierarchyC_status(constraints) ((constraints)->hierarchy.status) + +#define XtInheritChangeNodeState ((XmHierarchyNodeProc)_XtInherit) +#define XtInheritUnmapAllExtraNodes ((XmHierarchyExtraNodeProc)_XtInherit) +#define XtInheritUnmapNode ((XmHierarchyNodeProc)_XtInherit) +#define XtInheritMapNode ((XmHierarchyNodeProc)_XtInherit) +#define XtInheritBuildNodeTable ((XmHierarchyBuildTableProc)_XtInherit) +#define XtInheritResetOpenCloseButton ((XmHierarchyResetButtonProc)_XtInherit) +#define XtInheritToggleNodeState ((XtCallbackProc)_XtInherit) + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _HierarchyP_h */ diff --git a/libXm/osx/Xm/IconBox.h b/libXm/osx/Xm/IconBox.h new file mode 100644 index 0000000..e0e6b16 --- /dev/null +++ b/libXm/osx/Xm/IconBox.h @@ -0,0 +1,90 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconBox_h +#define _XmIconBox_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmIconBoxAnyCell (-5) + +typedef struct _XmIconBoxClassRec *XmIconBoxWidgetClass; +typedef struct _XmIconBoxRec *XmIconBoxWidget; + +typedef struct _XmIconBoxDropData { + Position cell_x, cell_y; /* drop location in cell coordinates. */ +} XmIconBoxDropData; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/* Function Name: XmIconBoxIsCellEmpty + * Description: Returns true if this cell is unused. + * Arguments: w - the icon box. + * x, y - cell to check. + * ignore - ignore this widget when checking. + * Returns: Returns true if this cell is unused. + */ + +Boolean XmIconBoxIsCellEmpty( +#ifndef _NO_PROTO +Widget, Position, Position, Widget +#endif +); + +/* Function Name: XmCreateIconBox + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateIconBox( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern WidgetClass xmIconBoxWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmIconBox_h */ diff --git a/libXm/osx/Xm/IconBoxP.h b/libXm/osx/Xm/IconBoxP.h new file mode 100644 index 0000000..415d85a --- /dev/null +++ b/libXm/osx/Xm/IconBoxP.h @@ -0,0 +1,140 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconBoxP_h +#define _XmIconBoxP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + + +/* + * Hack to get around naming conventions. The XmConstraintPartOffset macro + * requires our contraint part structure to have this name + */ +#define XmIconBoxConstraintPart IconInfo + +/* + * Access macros for widget instance fields + */ +#define XmIconBox_min_v_cells(w) (((XmIconBoxWidget)(w))->box.min_v_cells) +#define XmIconBox_min_h_cells(w) (((XmIconBoxWidget)(w))->box.min_h_cells) +#define XmIconBox_v_margin(w) (((XmIconBoxWidget)(w))->box.v_margin) +#define XmIconBox_h_margin(w) (((XmIconBoxWidget)(w))->box.h_margin) +#define XmIconBox_min_cell_width(w) (((XmIconBoxWidget)(w))->box.min_cell_width) +#define XmIconBox_min_cell_height(w) (((XmIconBoxWidget)(w))->box.min_cell_height) +#define XmIconBox_cell_width(w) (((XmIconBoxWidget)(w))->box.cell_width) +#define XmIconBox_cell_height(w) (((XmIconBoxWidget)(w))->box.cell_height) + +#define XmIconBoxC_cell_x(w) (((XmIconBoxConstraintsRec*)((w)->core.constraints))->icon.cell_x) +#define XmIconBoxC_cell_y(w) (((XmIconBoxConstraintsRec*)((w)->core.constraints))->icon.cell_y) +#define XmIconBoxC_pref_width(w) (((XmIconBoxConstraintsRec*)((w)->core.constraints))->icon.pref_width) +#define XmIconBoxC_pref_height(w) (((XmIconBoxConstraintsRec*)((w)->core.constraints))->icon.pref_height) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmIconBoxClassPart; + +typedef struct _XmIconBoxClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmIconBoxClassPart box_class; +} XmIconBoxClassRec; + +typedef struct { + /* resources */ + + Dimension min_v_cells; /* Default number of cells in the vert dir. */ + Dimension min_h_cells; /* Default number of cells in the horiz dir. */ + Dimension v_margin; /* Amount of space to leave between cells */ + Dimension h_margin; /* and window edges. */ + Dimension min_cell_width; /* Minimum width of the cells. */ + Dimension min_cell_height; /* Minimum height of the cells. */ + + /* private state */ + + Dimension cell_width; /* Width and height of all cells. */ + Dimension cell_height; + +} XmIconBoxPart; + + +typedef struct _XmIconBoxRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmIconBoxPart box; +} XmIconBoxRec; + +typedef struct _IconInfo { + + /* + * Resources. + */ + + short cell_x; /* X location of this icon in cell space. */ + short cell_y; /* Y location of this icon in cell space. */ + + /* + * Private state. + */ + + Dimension pref_width, pref_height; /* The preferred size of this widget. */ +} IconInfo; + +typedef struct _XmIconBoxConstraintsRec { + XmManagerConstraintPart manager; + IconInfo icon; +} XmIconBoxConstraintsRec, *XmIconBoxConstraints; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmIconBoxClassRec xmIconBoxClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmIconBoxP_h */ diff --git a/libXm/osx/Xm/IconButton.h b/libXm/osx/Xm/IconButton.h new file mode 100644 index 0000000..94e53c9 --- /dev/null +++ b/libXm/osx/Xm/IconButton.h @@ -0,0 +1,76 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconButton_h +#define _XmIconButton_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmIconButtonClassRec *XmIconButtonWidgetClass; +typedef struct _XmIconButtonRec *XmIconButtonWidget; + + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct _XmIconButtonCallbackInfo { + Boolean state; /* The current state of the icon button. */ + XEvent * event; /* The event that caused this action. */ +} XmIconButtonCallbackInfo; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +/* Function Name: XmCreateIconButton + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateIconButton( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmIconButtonWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmIconButton_h */ diff --git a/libXm/osx/Xm/IconButtonP.h b/libXm/osx/Xm/IconButtonP.h new file mode 100644 index 0000000..393c8e8 --- /dev/null +++ b/libXm/osx/Xm/IconButtonP.h @@ -0,0 +1,178 @@ +/* + * Copyright 1990, 1992 -- Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmIconButtonP_h +#define _XmIconButtonP_h + + +/************************************************************ +* INCLUDE FILES +*************************************************************/ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#define XmIconButtonIndex (XmPrimitiveIndex + 1) + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmIconButtonClassPart; + +typedef struct _XmIconButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmIconButtonClassPart icon_class; +} XmIconButtonClassRec; + +typedef struct { + /* resources */ + + String label; /* The label to display. */ + Pixmap pixmap; /* The pixmap to display. */ + Pixel arm_color; /* The color to arm this widget with. */ + XmFontList font_list; /* The font in MOTIF(tm) format. */ + XmIconPlacement icon_placement; /* Where to place the icon label. */ + Boolean recompute; /* Whether to recompute size every time. */ + Boolean set; /* State of the button. */ + Boolean armed; /* Armed value for button. */ + + Dimension v_space; /* The amount of space between the edges */ + Dimension h_space; /* of the widget and the picture/text. */ + + Dimension icon_text_padding; /* padding between the icon and the text. */ + + XtCallbackList activate_callback; /* Called when I am selected */ + XtCallbackList double_click_callback; /* Called when I am 2 clicked. */ + + /* + * Added in 1.2 for I18N. + */ + + XmString label_string; /* The label stored as an XmString. */ + unsigned char string_direction; + unsigned char alignment; + + /* private state */ + + Position pix_x, pix_y; /* Location of the pixmap. */ + + /* public state */ + Dimension pix_width, pix_height; /* size of the pixmap. */ + Dimension pix_depth; /* Depth of the pixmap. */ + + /* private state */ + Position text_x, text_y; /* Location to begin drawing text. */ + Dimension max_text_width; /* maximum space the text can take up. */ + Dimension max_text_height; /* maximum vertical space for the text */ + + XtIntervalId unset_timer; /* The arm and activate timer. */ + GC gc; /* The graphics context. */ + GC fill_gc; /* The gc for filling on the arm. */ + GC pixmap_fill_gc; /* The gc for drawing the pixmap when + the button is filled. */ + + GC stippled_text_gc; /* GC to use stippling text. */ + GC stippled_set_text_gc; /* GC to use for stip. text in a set button. */ + GC stippled_set_gc; /* GC to use for images when toggle is set. */ + GC stippled_unset_gc; /* GC to use for images when toggle is unset.*/ + + Time time; /* The server time of the last button click. */ + + Boolean label_from_name; + Boolean check_set_render_table; + +} XmIconButtonPart; + +#define XmIconButton_label(w) (((XmIconButtonWidget)(w))->icon.label) +#define XmIconButton_pixmap(w) (((XmIconButtonWidget)(w))->icon.pixmap) +#define XmIconButton_arm_color(w) (((XmIconButtonWidget)(w))->icon.arm_color) +#define XmIconButton_font_list(w) (((XmIconButtonWidget)(w))->icon.font_list) +#define XmIconButton_icon_placement(w) (((XmIconButtonWidget)(w))->icon.icon_placement) +#define XmIconButton_recompute(w) (((XmIconButtonWidget)(w))->icon.recompute) +#define XmIconButton_set(w) (((XmIconButtonWidget)(w))->icon.set) +#define XmIconButton_armed(w) (((XmIconButtonWidget)(w))->icon.armed) +#define XmIconButton_v_space(w) (((XmIconButtonWidget)(w))->icon.v_space) +#define XmIconButton_h_space(w) (((XmIconButtonWidget)(w))->icon.h_space) +#define XmIconButton_icon_text_padding(w) (((XmIconButtonWidget)(w))->icon.icon_text_padding) +#define XmIconButton_activate_callback(w) (((XmIconButtonWidget)(w))->icon.activate_callback) +#define XmIconButton_double_click_callback(w) (((XmIconButtonWidget)(w))->icon.double_click_callback) +#define XmIconButton_label_string(w) (((XmIconButtonWidget)(w))->icon.label_string) +#define XmIconButton_string_direction(w) (((XmIconButtonWidget)(w))->icon.string_direction) +#define XmIconButton_alignment(w) (((XmIconButtonWidget)(w))->icon.alignment) +#define XmIconButton_pix_x(w) (((XmIconButtonWidget)(w))->icon.pix_x) +#define XmIconButton_pix_y(w) (((XmIconButtonWidget)(w))->icon.pix_y) +#define XmIconButton_pix_width(w) (((XmIconButtonWidget)(w))->icon.pix_width) +#define XmIconButton_pix_height(w) (((XmIconButtonWidget)(w))->icon.pix_height) +#define XmIconButton_pix_depth(w) (((XmIconButtonWidget)(w))->icon.pix_depth) +#define XmIconButton_text_x(w) (((XmIconButtonWidget)(w))->icon.text_x) +#define XmIconButton_text_y(w) (((XmIconButtonWidget)(w))->icon.text_y) +#define XmIconButton_max_text_width(w) (((XmIconButtonWidget)(w))->icon.max_text_width) +#define XmIconButton_max_text_height(w) (((XmIconButtonWidget)(w))->icon.max_text_height) +#define XmIconButton_unset_timer(w) (((XmIconButtonWidget)(w))->icon.unset_timer) +#define XmIconButton_gc(w) (((XmIconButtonWidget)(w))->icon.gc) +#define XmIconButton_fill_gc(w) (((XmIconButtonWidget)(w))->icon.fill_gc) +#define XmIconButton_pixmap_fill_gc(w) (((XmIconButtonWidget)(w))->icon.pixmap_fill_gc) +#define XmIconButton_stippled_text_gc(w) (((XmIconButtonWidget)(w))->icon.stippled_text_gc) +#define XmIconButton_stippled_set_text_gc(w) (((XmIconButtonWidget)(w))->icon.stippled_set_text_gc) +#define XmIconButton_stippled_set_gc(w) (((XmIconButtonWidget)(w))->icon.stippled_set_gc) +#define XmIconButton_stippled_unset_gc(w) (((XmIconButtonWidget)(w))->icon.stippled_unset_gc) +#define XmIconButton_time(w) (((XmIconButtonWidget)(w))->icon.time) +#define XmIconButton_label_from_name(w) (((XmIconButtonWidget)(w))->icon.label_from_name) + +typedef struct _XmIconButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmIconButtonPart icon; +} XmIconButtonRec; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmIconButtonClassRec xmIconButtonClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + + + +void _XmPrimitiveEnter( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +void _XmPrimitiveLeave( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; + + + +#endif /* _XmIconButtonP_h */ diff --git a/libXm/osx/Xm/IconFile.h b/libXm/osx/Xm/IconFile.h new file mode 100644 index 0000000..8f67353 --- /dev/null +++ b/libXm/osx/Xm/IconFile.h @@ -0,0 +1,78 @@ +/* $XConsortium: IconFile.h /main/5 1995/07/15 20:51:44 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmIconFile_h +#define _XmIconFile_h + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/* + * values for icon magnitude + */ +#define XmUNSPECIFIED_ICON_SIZE 0 +#define XmLARGE_ICON_SIZE 1 +#define XmMEDIUM_ICON_SIZE 2 +#define XmSMALL_ICON_SIZE 3 +#define XmTINY_ICON_SIZE 4 + + +/******** Public Function Declarations for IconFile.c ********/ + +extern String XmGetIconFileName( + Screen *screen, + String imageInstanceName, + String imageClassName, + String hostPrefix, + unsigned int size) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconFile_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/osx/Xm/IconFileP.h b/libXm/osx/Xm/IconFileP.h new file mode 100644 index 0000000..114e529 --- /dev/null +++ b/libXm/osx/Xm/IconFileP.h @@ -0,0 +1,66 @@ +/* $XConsortium: IconFileP.h /main/5 1995/07/15 20:51:48 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmIconFileP_h +#define _XmIconFileP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations for IconFile.c ********/ + +extern void XmeFlushIconFileCache(String path); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconFile_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/osx/Xm/IconG.h b/libXm/osx/Xm/IconG.h new file mode 100644 index 0000000..66c5c15 --- /dev/null +++ b/libXm/osx/Xm/IconG.h @@ -0,0 +1,83 @@ +/* $XConsortium: IconG.h /main/5 1995/07/15 20:52:04 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconG_h +#define _XmIconG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Class record constants */ +extern WidgetClass xmIconGadgetClass; + +typedef struct _XmIconGadgetClassRec * XmIconGadgetClass; +typedef struct _XmIconGadgetRec * XmIconGadget; + +#ifndef XmIsIconGadget +#define XmIsIconGadget(w) XtIsSubclass(w, xmIconGadgetClass) +#endif /* XmIsIconGadget */ + +/******** Public Function Declarations ********/ +extern Widget XmCreateIconGadget( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount) ; +extern Widget XmVaCreateIconGadget( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedIconGadget( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconG_h */ + +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/IconGI.h b/libXm/osx/Xm/IconGI.h new file mode 100644 index 0000000..145c590 --- /dev/null +++ b/libXm/osx/Xm/IconGI.h @@ -0,0 +1,60 @@ +/* $XConsortium: IconGI.h /main/5 1995/07/15 20:52:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmIconGI_h +#define _XmIconGI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void _XmIconGadgetIconPos(Widget wid, int *x, int *y); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconGI_h */ + +/* DON'T ADD ANYTHING AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/IconGP.h b/libXm/osx/Xm/IconGP.h new file mode 100644 index 0000000..9af0c67 --- /dev/null +++ b/libXm/osx/Xm/IconGP.h @@ -0,0 +1,273 @@ +/* $XConsortium: IconGP.h /main/9 1995/10/25 20:06:59 cde-sun $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconGP_h +#define _XmIconGP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef Widget (*XmGetContainerParentProc)(Widget) ; + +#define XmInheritGetContainerParentProc ((XmGetContainerParentProc) _XtInherit) + + +/* IconGadget class record */ +typedef struct _XmIconGadgetClassPart + { + XmGetContainerParentProc get_container_parent; + XtPointer extension ; + } XmIconGadgetClassPart; + + +/* Full class record declaration */ +typedef struct _XmIconGadgetClassRec + { + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmIconGadgetClassPart icong_class; + } XmIconGadgetClassRec; + +extern XmIconGadgetClassRec xmIconGadgetClassRec; + +/*****************************************************************/ +/* The Icon Gadget Cache Object's class and instance records*/ +/*****************************************************************/ + +typedef struct _XmIconGCacheObjClassPart +{ + XtPointer extension; +} XmIconGCacheObjClassPart; + + +typedef struct _XmIconGCacheObjClassRec /* Icon cache class record */ +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmIconGCacheObjClassPart icon_class_cache; +} XmIconGCacheObjClassRec; + +externalref XmIconGCacheObjClassRec xmIconGCacheObjClassRec; + +/* The Icon Gadget Cache instance record */ + +typedef struct _XmIconGCacheObjPart +{ + XmRenderTable render_table; /* XmNrenderTable */ + GC selected_GC; + GC inverse_GC; + + Pixel background; + Pixel foreground; + Pixel top_shadow_color; + Pixel bottom_shadow_color; + Pixel highlight_color; + + Pixmap background_pixmap; + Pixmap top_shadow_pixmap; + Pixmap bottom_shadow_pixmap; + Pixmap highlight_pixmap; + + GC normal_GC; + GC background_GC; + GC insensitive_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + GC highlight_GC; + + unsigned char alignment; + Dimension spacing; + Dimension margin_width; + Dimension margin_height; +} XmIconGCacheObjPart; + +typedef struct _XmIconGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmIconGCacheObjPart icon_cache; +} XmIconGCacheObjRec; + +typedef struct _XmIconGCacheObjRec * XmIconGCacheObject; + +/* IconGadget instance record */ +typedef struct _XmIconGadgetPart + { + XmString label_string; /* XmNlabelString */ + Pixmap large_icon_mask; /* XmNlargeIconMask */ + Pixmap large_icon_pixmap; /* XmNlargeIconPixmap */ + Pixmap small_icon_mask; /* XmNsmallIconMask */ + Pixmap small_icon_pixmap; /* XmNsmallIconPixmap */ + unsigned char viewtype; /* XmNviewType */ + unsigned char visual_emphasis; /* XmNvisualEmphasis */ + XmString * detail; /* XmNdetail */ + Cardinal detail_count; /* XmNdetailCount */ + /* Private variables */ + Dimension label_rect_width ; + Dimension label_rect_height ; + Dimension large_icon_rect_width; + Dimension large_icon_rect_height; + Dimension small_icon_rect_width; + Dimension small_icon_rect_height; + String large_pixmap_name ; + String small_pixmap_name ; + + XmIconGCacheObjPart *cache; + Boolean check_set_render_table; +} XmIconGadgetPart; + +/* Full instance record declaration */ +typedef struct _XmIconGadgetRec + { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmIconGadgetPart icong; + } XmIconGadgetRec; + + +/* Useful macros */ +#define IG_LabelString(w) (((XmIconGadget)(w))->icong.label_string) +#define IG_LargeIconMask(w) (((XmIconGadget)(w))->icong.large_icon_mask) +#define IG_LargeIconPixmap(w) (((XmIconGadget)(w))->icong.large_icon_pixmap) +#define IG_SmallIconMask(w) (((XmIconGadget)(w))->icong.small_icon_mask) +#define IG_SmallIconPixmap(w) (((XmIconGadget)(w))->icong.small_icon_pixmap) +#define IG_ViewType(w) (((XmIconGadget)(w))->icong.viewtype) +#define IG_VisualEmphasis(w) (((XmIconGadget)(w))->icong.visual_emphasis) +#define IG_Detail(w) (((XmIconGadget)(w))->icong.detail) +#define IG_DetailCount(w) (((XmIconGadget)(w))->icong.detail_count) +#define IG_LabelRectWidth(w) (((XmIconGadget)(w))->icong.label_rect_width) +#define IG_LabelRectHeight(w) (((XmIconGadget)(w))->icong.label_rect_height) +#define IG_LargeIconRectWidth(w) \ + (((XmIconGadget)(w))->icong.large_icon_rect_width) +#define IG_LargeIconRectHeight(w) \ + (((XmIconGadget)(w))->icong.large_icon_rect_height) +#define IG_SmallIconRectWidth(w) \ + (((XmIconGadget)(w))->icong.small_icon_rect_width) +#define IG_SmallIconRectHeight(w) \ + (((XmIconGadget)(w))->icong.small_icon_rect_height) +#define IG_LargePixmapName(w) (((XmIconGadget)(w))->icong.large_pixmap_name) +#define IG_SmallPixmapName(w) (((XmIconGadget)(w))->icong.small_pixmap_name) + +/* XmNrecomputeSize didn't make it as a resource, but since the + code is already written, I'll keep it and force its value here. + If it's ever wanted back, just replace that macro by: + #define IG_RecomputeSize(w) (((XmIconGadget)(w))->icong.recompute_size) */ +#define IG_RecomputeSize(w) (True) + +#define IG_LayoutDirection(w) (((XmIconGadget)(w))->gadget.layout_direction) +#define IG_Highlighted(w) (((XmIconGadget)(w))->gadget.highlighted) +#define IG_HLThickness(w) (((XmIconGadget)(w))->gadget.highlight_thickness) +#define IG_ShadowThickness(w) (((XmIconGadget)(w))->gadget.shadow_thickness) +#define IG_Depth(w) (((XmManagerWidget) \ + (((XmGadget)(w))->object.parent))->core.depth) + +/* cached resources for IconGadget */ +#define IG_RenderTable(w) (((XmIconGadget)(w))-> \ + icong.cache->render_table) +#define IG_SelectedGC(w) (((XmIconGadget)(w))-> \ + icong.cache->selected_GC) +#define IG_InverseGC(w) (((XmIconGadget)(w))-> \ + icong.cache->inverse_GC) + +/** These are gadget resources really. hopefully in 2.1, + that will be replaced by stuff like: + #define IG_Background(w) Gad_Background(w) + #define IG_BackgroundGC(w) Gad_BackgroundGC(w) + etc, etc ***/ +#define IG_Background(w) (((XmIconGadget)(w))-> \ + icong.cache->background) +#define IG_Foreground(w) (((XmIconGadget)(w))-> \ + icong.cache->foreground) +#define IG_TopShadowColor(w) (((XmIconGadget)(w))-> \ + icong.cache->top_shadow_color) +#define IG_BottomShadowColor(w) (((XmIconGadget)(w))-> \ + icong.cache->bottom_shadow_color) +#define IG_HighlightColor(w) (((XmIconGadget)(w))-> \ + icong.cache->highlight_color) + +#define IG_BackgroundPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->background_pixmap) +#define IG_TopShadowPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->top_shadow_pixmap) +#define IG_BottomShadowPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->bottom_shadow_pixmap) +#define IG_HighlightPixmap(w) (((XmIconGadget)(w))-> \ + icong.cache->highlight_pixmap) + +#define IG_NormalGC(w) (((XmIconGadget)(w))-> \ + icong.cache->normal_GC) +#define IG_BackgroundGC(w) (((XmIconGadget)(w))-> \ + icong.cache->background_GC) +#define IG_InsensitiveGC(w) (((XmIconGadget)(w))-> \ + icong.cache->insensitive_GC) +#define IG_TopShadowGC(w) (((XmIconGadget)(w))-> \ + icong.cache->top_shadow_GC) +#define IG_BottomShadowGC(w) (((XmIconGadget)(w))-> \ + icong.cache->bottom_shadow_GC) +#define IG_HighlightGC(w) (((XmIconGadget)(w))-> \ + icong.cache->highlight_GC) +#define IG_Alignment(w) (((XmIconGadget)(w))-> \ + icong.cache->alignment) +#define IG_Spacing(w) (((XmIconGadget)(w))-> \ + icong.cache->spacing) +#define IG_MarginWidth(w) (((XmIconGadget)(w))-> \ + icong.cache->margin_width) +#define IG_MarginHeight(w) (((XmIconGadget)(w))-> \ + icong.cache->margin_height) + + +/* Convenience Macros */ +#define IG_Cache(w) (((XmIconGadget)(w))->icong.cache) +#define IG_ClassCachePart(w) (((XmIconGadgetClass)xmIconGadgetClass)->\ + gadget_class.cache_part) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/IconH.h b/libXm/osx/Xm/IconH.h new file mode 100644 index 0000000..a117034 --- /dev/null +++ b/libXm/osx/Xm/IconH.h @@ -0,0 +1,76 @@ +/* $XConsortium: IconH.h /main/5 1995/07/15 20:52:21 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconH_h +#define _XmIconH_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + +/* Class record constants */ +extern WidgetClass xmIconHeaderClass; + +typedef struct _XmIconHeaderClassRec * XmIconHeaderClass; +typedef struct _XmIconHeaderRec * XmIconHeader; + +#ifndef XmIsIconHeader +#define XmIsIconHeader(w) XtIsSubclass(w, xmIconHeaderClass) +#endif /* XmIsIconHeader */ + +/******** Public Function Declarations ********/ +extern Widget XmCreateIconHeader( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount) ; + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconH_h */ + +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/IconHP.h b/libXm/osx/Xm/IconHP.h new file mode 100644 index 0000000..0dfc411 --- /dev/null +++ b/libXm/osx/Xm/IconHP.h @@ -0,0 +1,90 @@ +/* $XConsortium: IconHP.h /main/4 1995/07/15 20:52:25 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIconHP_h +#define _XmIconHP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IconHeader class record */ +typedef struct _XmIconHeaderClassPart + { + XtPointer extension ; + } XmIconHeaderClassPart; + + +/* Full class record declaration */ +typedef struct _XmIconHeaderClassRec + { + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmIconGadgetClassPart icong_class; + XmIconHeaderClassPart iconh_class; + } XmIconHeaderClassRec; + +extern XmIconHeaderClassRec xmIconHeaderClassRec; + +/* IconHeader instance record */ +typedef struct _XmIconHeaderPart + { + Widget container_ID; /* XmNcontainerID */ + } XmIconHeaderPart; + +/* Full instance record declaration */ +typedef struct _XmIconHeaderRec + { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmIconGadgetPart icong; + XmIconHeaderPart iconh; + } XmIconHeaderRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIconHP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ImageCachI.h b/libXm/osx/Xm/ImageCachI.h new file mode 100644 index 0000000..778c3e4 --- /dev/null +++ b/libXm/osx/Xm/ImageCachI.h @@ -0,0 +1,145 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ImageCachI.h /main/7 1996/01/29 13:19:43 daniel $ */ +#ifndef _XmImageCacheI_h +#define _XmImageCacheI_h + +#include + +/* this name is used by XmeGetPixmapData to cache a pixmap in the + pixmap cache with no associated name. _XmCachePixmap knows about it + and will not add this one in the pixmap_data cache because it is a + _name_ based pixmap cache used during conversion */ +#define DIRECT_PIXMAP_CACHED "" + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for ImageCache.c ********/ + +extern Boolean _XmInstallImage( + XImage *image, + char *image_name, + int hot_x, + int hot_y) ; +extern Boolean _XmGetImage( + Screen *screen, + char *image_name, + XImage **image) ; +extern Boolean _XmCachePixmap( + Pixmap pixmap, + Screen *screen, + char *image_name, + Pixel foreground, + Pixel background, + int depth, + Dimension width, + Dimension height) ; +extern Pixmap _XmGetColoredPixmap(Screen *screen, + char *image_name, + XmAccessColorData acc_color, + int depth, +#if NeedWidePrototypes + int only_if_exists) ; +#else + Boolean only_if_exists) ; +#endif /* NeedWidePrototypes */ + +extern Boolean _XmGetPixmapData( + Screen *screen, + Pixmap pixmap, + char **image_name, + int *depth, + Pixel *foreground, + Pixel *background, + int *hot_x, + int *hot_y, + unsigned int *width, + unsigned int *height) ; +extern Boolean _XmInImageCache( + String image_name); + +extern Pixmap _XmGetScaledPixmap( + Screen *screen, + Widget widget, + char *image_name, + XmAccessColorData acc_color, + int depth, +#if NeedWidePrototypes + int only_if_exists, +#else + Boolean only_if_exists, +#endif /* NeedWidePrototypes */ + double scaling_ratio); + +extern void _XmPutScaledImage ( + Display* display , + Drawable d , + GC gc , + XImage* src_image , + int src_x , + int src_y , + int dest_x , + int dest_y , + unsigned int src_width , + unsigned int src_height, + unsigned int dest_width , + unsigned int dest_height); + +extern void _XmCleanPixmapCache(Screen * screen, Widget shell); + +/* for Xm.h */ +extern Pixmap XmGetScaledPixmap( + Widget widget, + char *image_name, + Pixel foreground, + Pixel background, + int depth, + double scaling_ratio); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmImageCacheI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/JoinSideT.h b/libXm/osx/Xm/JoinSideT.h new file mode 100644 index 0000000..9124e3c --- /dev/null +++ b/libXm/osx/Xm/JoinSideT.h @@ -0,0 +1,75 @@ +/* $XConsortium: JoinSideT.h /main/5 1995/07/15 20:52:34 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmJoinSideT_H +#define _XmJoinSideT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTjoinSide; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmJoinSideSetValueProc)(Widget tab, + unsigned char join_side, + Dimension join_thickness) ; +typedef unsigned char (*XmJoinSideGetValueProc)(Widget tab, + Dimension * join_thickness); + + +/* Version 0: initial release. */ + +typedef struct _XmJoinSideTraitRec { + int version; /* 0 */ + XmJoinSideSetValueProc setValue; + XmJoinSideGetValueProc getValue; +} XmJoinSideTraitRec, *XmJoinSideTrait; + +enum {/* XmNONE already defined in Xm.h */ + XmLEFT = 1, XmRIGHT, XmTOP, XmBOTTOM} ; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmJoinSideT_H */ diff --git a/libXm/osx/Xm/JpegI.h b/libXm/osx/Xm/JpegI.h new file mode 100644 index 0000000..37db8db --- /dev/null +++ b/libXm/osx/Xm/JpegI.h @@ -0,0 +1,19 @@ +#ifndef _XmJpegI_h +#define _XmJpegI_h + +#include +#include +#include +#include + +typedef struct _XmJpegErrorMgrRec { + struct jpeg_error_mgr pub; + jmp_buf setjmp_buffer; +} XmJpegErrorMgrRec, *XmJpegErrorMgr; + +typedef struct { JSAMPLE red, green, blue; } CTable; + +void _XmJpegErrorExit(j_common_ptr cinfo); +int _XmJpegGetImage(Screen *screen, FILE *infile, XImage **ximage); + +#endif diff --git a/libXm/osx/Xm/Label.h b/libXm/osx/Xm/Label.h new file mode 100644 index 0000000..882380f --- /dev/null +++ b/libXm/osx/Xm/Label.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Label.h /main/11 1995/07/13 17:30:38 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabel_h +#define _XmLabel_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Widget class and record definitions */ + +externalref WidgetClass xmLabelWidgetClass; + +typedef struct _XmLabelClassRec * XmLabelWidgetClass; +typedef struct _XmLabelRec * XmLabelWidget; + +/*fast subclass define */ +#ifndef XmIsLabel +#define XmIsLabel(w) XtIsSubclass(w, xmLabelWidgetClass) +#endif /* XmIsLabel */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateLabel( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount) ; +extern Widget XmVaCreateLabel( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedLabel( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabel_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/LabelG.h b/libXm/osx/Xm/LabelG.h new file mode 100644 index 0000000..c3c510e --- /dev/null +++ b/libXm/osx/Xm/LabelG.h @@ -0,0 +1,91 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: LabelG.h /main/11 1995/07/13 17:31:23 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabelG_h +#define _XmLabelG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Widget class and record definitions */ + + +externalref WidgetClass xmLabelGadgetClass; + +typedef struct _XmLabelGadgetClassRec * XmLabelGadgetClass; +typedef struct _XmLabelGadgetRec * XmLabelGadget; +typedef struct _XmLabelGCacheObjRec * XmLabelGCacheObject; + +/*fast subclass define */ +#ifndef XmIsLabelGadget +#define XmIsLabelGadget(w) XtIsSubclass(w, xmLabelGadgetClass) +#endif /* XmIsLabelGadget */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateLabelGadget( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount) ; +extern Widget XmVaCreateLabelGadget( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedLabelGadget( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/LabelGI.h b/libXm/osx/Xm/LabelGI.h new file mode 100644 index 0000000..29e5517 --- /dev/null +++ b/libXm/osx/Xm/LabelGI.h @@ -0,0 +1,131 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: LabelGI.h /main/5 1995/07/13 17:31:31 drk $ */ +#ifndef _XMLABELGI_H +#define _XMLABELGI_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern int _XmLabelCacheCompare( + XtPointer A, + XtPointer B) ; +extern void _XmCalcLabelGDimensions( + Widget wid) ; +extern void _XmReCacheLabG( + Widget wid) ; +extern void _XmAssignLabG_MarginHeight( + XmLabelGadget lw, +#if NeedWidePrototypes + int value) ; +#else + Dimension value) ; +#endif /* NeedWidePrototypes */ +extern void _XmLabelGCalcTextRect( + Widget wid) ; +extern void _XmAssignLabG_MarginWidth( + XmLabelGadget lw, +#if NeedWidePrototypes + int value) ; +#else + Dimension value) ; +#endif /* NeedWidePrototypes */ +extern void _XmAssignLabG_MarginLeft( + XmLabelGadget lw, +#if NeedWidePrototypes + int value) ; +#else + Dimension value) ; +#endif /* NeedWidePrototypes */ +extern void _XmAssignLabG_MarginRight( + XmLabelGadget lw, +#if NeedWidePrototypes + int value) ; +#else + Dimension value) ; +#endif /* NeedWidePrototypes */ +extern void _XmAssignLabG_MarginTop( + XmLabelGadget lw, +#if NeedWidePrototypes + int value) ; +#else + Dimension value) ; +#endif /* NeedWidePrototypes */ +extern void _XmAssignLabG_MarginBottom( + XmLabelGadget lw, +#if NeedWidePrototypes + int value) ; +#else + Dimension value) ; +#endif /* NeedWidePrototypes */ +extern void _XmProcessDrag( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern Boolean _XmLabelGCVTRedraw (Widget kid, + Widget cur_parent, + Widget new_parent, + Mask visual_flag); + +extern void _XmRedisplayLabG (Widget w, + XEvent *event, + Region region, + LRectangle *background_box); + +extern void _XmLabelGCloneMenuSavvy(WidgetClass, XmMenuSavvyTrait); + +extern void _XmLabelSetBackgroundGC(XmLabelGadget lw); +extern void _XmLabelGCalcTextRect(Widget wid); +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XMLABELGI_H */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/LabelGP.h b/libXm/osx/Xm/LabelGP.h new file mode 100644 index 0000000..ac15145 --- /dev/null +++ b/libXm/osx/Xm/LabelGP.h @@ -0,0 +1,361 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: LabelGP.h /main/12 1995/10/25 20:08:21 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabelGP_h +#define _XmLabelGP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ +/* The Label Gadget Cache Object's class and instance records*/ +/*************************************************************/ + +/* Enumerations for fill_bg_box. */ +enum { _XmPLAIN_BG_BOX, _XmFILL_BG_BOX, _XmALWAYS_FILL_BG_BOX }; + +typedef struct _XmLabelGCacheObjClassPart +{ + int foo; +} XmLabelGCacheObjClassPart; + + +typedef struct _XmLabelGCacheObjClassRec /* label cache class record */ +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; +} XmLabelGCacheObjClassRec; + +externalref XmLabelGCacheObjClassRec xmLabelGCacheObjClassRec; + + +/* The Label Gadget Cache instance record */ + +typedef struct _XmLabelGCacheObjPart +{ + unsigned char label_type; + unsigned char alignment; + unsigned char string_direction; + + Dimension margin_height; /* margin around widget */ + Dimension margin_width; + + Dimension margin_left; /* additional margins on */ + Dimension margin_right; /* each side of widget */ + Dimension margin_top; /* text (or pixmap) is placed */ + Dimension margin_bottom; /* inside the margins */ + + Boolean recompute_size; + + Boolean skipCallback; /* set by RowColumn with entryCallback */ + unsigned char menu_type; + + /* + * Following are color resources and instance variables for Gadgets. + * Because of problems involving the history of the gadget cache these + * variables appear here rather than in XmGadget. + * + * XmArrowButtonGadget and XmSeparatorGadget have effectively the same + * set of color resources implemented for each. + * + * XmLabelGadget does not use all of these variables (e.g top_shadow_color). + * It initializes them and maintains them but does not use all of them + * to render the label gadget. They are here for use by subclasses. + * + * Sterling Barrett + * sterling@ics.com + */ + + GC background_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + GC highlight_GC; + + Pixel foreground; + Pixel background; + + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Pixel highlight_color; + Pixmap highlight_pixmap; +} XmLabelGCacheObjPart; + +typedef struct _XmLabelGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; +} XmLabelGCacheObjRec; + +/* The Label Widget Class and instance records */ +/*************************************************/ + +typedef struct _XmLabelGadgetClassPart /* label class record */ +{ + XtWidgetProc setOverrideCallback; + XmMenuProc menuProcs; + XtPointer extension; +} XmLabelGadgetClassPart; + +typedef struct _XmLabelGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; +} XmLabelGadgetClassRec; + +externalref XmLabelGadgetClassRec xmLabelGadgetClassRec; + +typedef struct _XmLabelGadgetPart +{ + _XmString _label; /* String sent to this widget */ + _XmString _acc_text; + KeySym mnemonic; + XmStringCharSet mnemonicCharset; + char *accelerator; + XmFontList font; + + Pixmap pixmap; + Pixmap pixmap_insen; + + /* PRIVATE members -- values computed by LabelWidgetClass methods */ + + GC normal_GC; /* GC for text */ + GC insensitive_GC; + XRectangle TextRect; /* The bounding box of the text or clip */ + XRectangle acc_TextRect; /* rectangle of the window; whichever is + smaller */ + + XmLabelGCacheObjPart *cache; + + Dimension acc_left_delta; /* Amount we increased the margins */ + Dimension acc_right_delta; /* to accomodate accelerator text */ + + Dimension * baselines; /* Cached baseline information. */ + + XtEnum fill_bg_box; /* Computed by LabelGadget or */ + /* pinned by subclasses. */ + Boolean check_set_render_table; + + XmPixmapPlacement pixmap_placement; /* Where to place the icon label. */ + Dimension pixmap_text_padding; /* padding between the icon and the text. */ + + XRectangle PixmapRect; /* The bounding box of the pixmap in TextRect */ + XRectangle StringRect; /* The bounding box of the string in TextRect */ + +} XmLabelGadgetPart; + + +typedef struct _XmLabelGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; +} XmLabelGadgetRec; + +typedef struct _LRectangle +{ + int x, y; + int width, height; +} LRectangle; + +/* Inherited Functions exported by label */ + +#define XmInheritSetOverrideCallback ((XtWidgetProc) _XtInherit) +#define XmInheritResize ((XtWidgetProc) _XtInherit) + +#define INVALID_PIXEL ((Pixel) -1) +#define INVALID_PIXMAP ((Pixmap) -1) +/* Padding between label text and accelerator text */ + +#define LABELG_ACC_PAD 15 + +/* MACROS */ +/******** + * Macros for cached instance fields + */ +#define LabG_LabelType(w) (((XmLabelGadget)(w)) -> \ + label.cache-> label_type) +#define LabG_Alignment(w) (((XmLabelGadget)(w)) -> \ + label.cache-> alignment) +#define LabG_StringDirection(w) (((XmLabelGadget)(w)) -> \ + label.cache-> string_direction) +#define LabG_MarginHeight(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_height) +#define LabG_MarginWidth(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_width) +#define LabG_MarginLeft(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_left) +#define LabG_MarginRight(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_right) +#define LabG_MarginTop(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_top) +#define LabG_MarginBottom(w) (((XmLabelGadget)(w)) -> \ + label.cache-> margin_bottom) +#define LabG_RecomputeSize(w) (((XmLabelGadget)(w)) -> \ + label.cache-> recompute_size) +#define LabG_SkipCallback(w) (((XmLabelGadget)(w)) -> \ + label.cache-> skipCallback) +#define LabG_MenuType(w) (((XmLabelGadget)(w)) -> \ + label.cache-> menu_type) +#define LabG_BackgroundGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> background_GC) +#define LabG_TopShadowGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> top_shadow_GC) +#define LabG_BottomShadowGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> bottom_shadow_GC) +#define LabG_HighlightGC(w) (((XmLabelGadget)(w)) -> \ + label.cache-> highlight_GC) +#define LabG_Foreground(w) (((XmLabelGadget)(w)) -> \ + label.cache-> foreground) +#define LabG_Background(w) (((XmLabelGadget)(w)) -> \ + label.cache-> background) +#define LabG_TopShadowColor(w) (((XmLabelGadget)(w)) -> \ + label.cache-> top_shadow_color) +#define LabG_TopShadowPixmap(w) (((XmLabelGadget)(w)) -> \ + label.cache-> top_shadow_pixmap) +#define LabG_BottomShadowColor(w) (((XmLabelGadget)(w)) -> \ + label.cache-> bottom_shadow_color) +#define LabG_BottomShadowPixmap(w) (((XmLabelGadget)(w)) -> \ + label.cache-> bottom_shadow_pixmap) +#define LabG_HighlightColor(w) (((XmLabelGadget)(w)) -> \ + label.cache-> highlight_color) +#define LabG_HighlightPixmap(w) (((XmLabelGadget)(w)) -> \ + label.cache-> highlight_pixmap) +/******** + * Macros for UNcached instance fields + */ +#define LabG__label(w) (((XmLabelGadget)(w)) -> \ + label._label) +#define LabG__acceleratorText(w) (((XmLabelGadget)(w)) -> \ + label._acc_text) +#define LabG_Font(w) (((XmLabelGadget)(w)) -> \ + label.font) +#define LabG_Mnemonic(w) (((XmLabelGadget)(w)) -> \ + label.mnemonic) +#define LabG_MnemonicCharset(w) (((XmLabelGadget)(w)) -> \ + label.mnemonicCharset) +#define LabG_Accelerator(w) (((XmLabelGadget)(w)) -> \ + label.accelerator) +#define LabG_Pixmap(w) (((XmLabelGadget)(w)) -> \ + label.pixmap) +#define LabG_PixmapInsensitive(w) (((XmLabelGadget)(w)) -> \ + label.pixmap_insen) +#define LabG_NormalGC(w) (((XmLabelGadget)(w)) -> \ + label.normal_GC) +#define LabG_InsensitiveGC(w) (((XmLabelGadget)(w)) -> \ + label.insensitive_GC) +#define LabG_TextRect(w) (((XmLabelGadget)(w)) -> \ + label.TextRect) +#define LabG_AccTextRect(w) (((XmLabelGadget)(w)) -> \ + label.acc_TextRect) +#define LabG_PixmapRect(w) (((XmLabelGadget)(w)) -> \ + label.PixmapRect) +#define LabG_StringRect(w) (((XmLabelGadget)(w)) -> \ + label.StringRect) +#define LabG_PixmapPlacement(w) (((XmLabelGadget)(w)) -> \ + label.pixmap_placement) +#define LabG_PixmapTextPadding(w) (((XmLabelGadget)(w)) -> \ + label.pixmap_text_padding) + + +/******** + * Convenience Macros + */ +#define LabG_TextRect_x(w) (LabG_TextRect(w).x) + +#define LabG_TextRect_y(w) (LabG_TextRect(w).y) + +#define LabG_TextRect_width(w) (LabG_TextRect(w).width) + +#define LabG_TextRect_height(w) (LabG_TextRect(w).height) + +#define LabG_IsText(w) (LabG_LabelType(w) == XmSTRING) + +#define LabG_IsPixmap(w) (LabG_LabelType(w) == XmPIXMAP) + +#define LabG_IsPixmapAndText(w) (LabG_LabelType(w) == \ + XmPIXMAP_AND_STRING) + +#define LabG_Cache(w) (((XmLabelGadget)(w))-> \ + label.cache) +#define LabG_Shadow(w) (((XmLabelGadget)(w))->gadget.shadow_thickness) +#define LabG_Highlight(w) (((XmLabelGadget)(w))->gadget.highlight_thickness) +#define LabG_Baseline(w) (_XmStringBaseline ((LabG_Font(w)), (LabG__Label(w)))) +#define LabG_ClassCachePart(w) \ + (((XmLabelGadgetClass)xmLabelGadgetClass)->gadget_class.cache_part) + +#define LabG_IsMenupane(w) ((LabG_MenuType(w) == XmMENU_POPUP) || \ + (LabG_MenuType(w) == XmMENU_PULLDOWN)) + +#define _XmAssignLabG_MarginHeight_r(cache, val) \ + cache->margin_height = val +#define _XmAssignLabG_MarginWidth_r(cache, val) \ + cache->margin_width = val +#define _XmAssignLabG_MarginLeft_r(cache, val) \ + cache->margin_left = val +#define _XmAssignLabG_MarginRight_r(cache, val) \ + cache->margin_right = val +#define _XmAssignLabG_MarginTop_r(cache, val) \ + cache->margin_top = val +#define _XmAssignLabG_MarginBottom_r(cache, val) \ + cache->margin_bottom = val + +extern void _XmQualifyLabelLocalCache(XmLabelGCacheObjPart *, XmLabelGadget); +extern void _XmReCacheLabG_r(XmLabelGCacheObjPart *, XmLabelGadget); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/LabelI.h b/libXm/osx/Xm/LabelI.h new file mode 100644 index 0000000..547588e --- /dev/null +++ b/libXm/osx/Xm/LabelI.h @@ -0,0 +1,69 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: LabelI.h /main/5 1995/07/13 17:31:52 drk $ */ +#ifndef _XmLabelI_h +#define _XmLabelI_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmCalcLabelDimensions(Widget wid) ; +extern void _XmLabelCloneMenuSavvy(WidgetClass, XmMenuSavvyTrait); +extern char* _XmCBNameActivate(void); +extern char* _XmCBNameValueChanged(void); +extern void _XmLabelCalcTextRect(Widget wid) ; + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/LabelP.h b/libXm/osx/Xm/LabelP.h new file mode 100644 index 0000000..50fcfb9 --- /dev/null +++ b/libXm/osx/Xm/LabelP.h @@ -0,0 +1,185 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: LabelP.h /main/13 1995/10/25 20:08:32 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmLabelP_h_ +#define _XmLabelP_h_ + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* The Label Widget Class and instance records */ + +typedef struct _XmLabelClassPart /* label class record */ +{ + XtWidgetProc setOverrideCallback; + XmMenuProc menuProcs; + String translations; + XtPointer extension; +} XmLabelClassPart; + +typedef struct _XmLabelClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; +} XmLabelClassRec; + +externalref XmLabelClassRec xmLabelClassRec; + + +/* Inherited Functions exported by label */ + +#define XmInheritSetOverrideCallback ((XtWidgetProc) _XtInherit) +#define XmInheritResize ((XtWidgetProc) _XtInherit) +#define XmInheritRealize ((XtRealizeProc) _XtInherit) + +/* The padding between label text and accelerator text */ + +# define LABEL_ACC_PAD 15 + +/* The Label instance record */ + +typedef struct _XmLabelPart +{ + _XmString _label; /* String sent to this widget */ + _XmString _acc_text; + KeySym mnemonic; + XmStringCharSet mnemonicCharset; + char *accelerator; + unsigned char label_type; + unsigned char alignment; + unsigned char string_direction; + XmFontList font; + + Dimension margin_height; /* margin around widget */ + Dimension margin_width; + + Dimension margin_left; /* additional margins on */ + Dimension margin_right; /* each side of widget */ + Dimension margin_top; /* text (or pixmap) is placed */ + Dimension margin_bottom; /* inside the margins */ + + Boolean recompute_size; + + Pixmap pixmap; + Pixmap pixmap_insen; + + /* PRIVATE members -- values computed by LabelWidgetClass methods */ + + GC normal_GC; /* GC for text */ + GC insensitive_GC; + XRectangle TextRect; /* The bounding box of the text or clip */ + XRectangle acc_TextRect; /* rectangle of the window; whichever is */ + /* smaller */ + + Boolean skipCallback; /* set by RowColumn with entryCallback. */ + unsigned char menu_type; + Boolean computing_size; /* suppresses DrawnB resize callbacks. */ + + Dimension acc_left_delta; /* Amount we increased the margins */ + Dimension acc_right_delta; /* to accomodate accelerator text. */ + + Dimension * baselines; /* Cached baseline information */ + + Boolean check_set_render_table; + + XmPixmapPlacement pixmap_placement; /* Where to place the icon label. */ + Dimension pixmap_text_padding; /* padding between the icon and the text. */ + + XRectangle PixmapRect; /* The bounding box of the pixmap in TextRect */ + XRectangle StringRect; /* The bounding box of the string in TextRect */ +} XmLabelPart; + + +typedef struct _XmLabelRec +{ + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; +} XmLabelRec; + + +/* MACROS */ + +#define Lab_MarginWidth(w) (((XmLabelWidget)(w)) ->label.margin_width) +#define Lab_MarginHeight(w) (((XmLabelWidget)(w)) ->label.margin_height) +#define Lab_MarginTop(w) (((XmLabelWidget)(w)) ->label.margin_top) +#define Lab_MarginBottom(w) (((XmLabelWidget)(w)) ->label.margin_bottom) +#define Lab_MarginRight(w) (((XmLabelWidget)(w)) ->label.margin_right) +#define Lab_MarginLeft(w) (((XmLabelWidget)(w)) ->label.margin_left) +#define Lab_TextRect_x(w) (((XmLabelWidget)(w)) ->label.TextRect.x) +#define Lab_TextRect_y(w) (((XmLabelWidget)(w)) ->label.TextRect.y) +#define Lab_TextRect_width(w) (((XmLabelWidget)(w)) ->label.TextRect.width) +#define Lab_TextRect_height(w) (((XmLabelWidget)(w)) ->label.TextRect.height) + +#define Lab_IsText(w) (((XmLabelWidget)(w)) ->label.label_type == XmSTRING) +#define Lab_IsPixmap(w) (((XmLabelWidget)(w)) ->label.label_type == XmPIXMAP) +#define Lab_IsPixmapAndText(w) (((XmLabelWidget)(w)) ->label.label_type == \ + XmPIXMAP_AND_STRING) + +#define Lab_Font(w) (((XmLabelWidget)(w)) ->label.font) + +#define Lab_Mnemonic(w) (((XmLabelWidget)(w)) ->label.mnemonic) +#define Lab_Accelerator(w) (((XmLabelWidget)(w)) ->label.accelerator) +#define Lab_AcceleratorText(w) (((XmLabelWidget)(w)) ->label.acc_text) +#define Lab_MenuType(w) (((XmLabelWidget)(w))->label.menu_type) +#define Lab_Shadow(w) (((XmLabelWidget)(w))->primitive.shadow_thickness) +#define Lab_Highlight(w) (((XmLabelWidget)(w))->primitive.highlight_thickness) +#define Lab_Baseline(w) \ + (_XmStringBaseline (((XmLabelWidget)(w))->label.font, \ + ((XmLabelWidget)(w))->label._label)) + +#define Lab_ComputingSize(w) (((XmLabelWidget)(w))->label.computing_size) +#define Lab_IsMenupane(w) ((Lab_MenuType(w) == XmMENU_POPUP) || \ + (Lab_MenuType(w) == XmMENU_PULLDOWN)) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLabelP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/LayoutT.h b/libXm/osx/Xm/LayoutT.h new file mode 100644 index 0000000..64c0efb --- /dev/null +++ b/libXm/osx/Xm/LayoutT.h @@ -0,0 +1,66 @@ +/* $XConsortium: LayoutT.h /main/5 1995/07/15 20:52:38 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmLayoutT_H +#define _XmLayoutT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTspecifyLayoutDirection; + +/* Trait structures and typedefs, place typedefs first */ + +typedef XmDirection (*XmGetLayoutDirectionProc)(Widget); + +/* Version 0: initial release. */ + +typedef struct { + int version; /* 0 */ + XmGetLayoutDirectionProc get_direction; +} XmSpecifyLayoutDirectionTraitRec, *XmSpecifyLayoutDirectionTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmLayoutT_H */ diff --git a/libXm/osx/Xm/List.h b/libXm/osx/Xm/List.h new file mode 100644 index 0000000..ff4d511 --- /dev/null +++ b/libXm/osx/Xm/List.h @@ -0,0 +1,236 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: List.h /main/12 1995/07/13 17:33:36 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmList_h +#define _XmList_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmListWidgetClass; + +#define XmINITIAL 0 +#define XmADDITION 1 +#define XmMODIFICATION 2 + +#ifndef XmIsList +#define XmIsList(w) XtIsSubclass(w, xmListWidgetClass) +#endif /* XmIsList */ + +typedef struct _XmListClassRec * XmListWidgetClass; +typedef struct _XmListRec * XmListWidget; + +/******** Public Function Declarations ********/ + +extern void XmListAddItem( + Widget w, + XmString item, + int pos) ; +extern void XmListAddItems( + Widget w, + XmString *items, + int item_count, + int pos) ; +extern void XmListAddItemsUnselected( + Widget w, + XmString *items, + int item_count, + int pos) ; +extern void XmListAddItemUnselected( + Widget w, + XmString item, + int pos) ; +extern void XmListDeleteItem( + Widget w, + XmString item) ; +extern void XmListDeleteItems( + Widget w, + XmString *items, + int item_count) ; +extern void XmListDeletePositions( + Widget w, + int *position_list, + int position_count ) ; +extern void XmListDeletePos( + Widget w, + int pos) ; +extern void XmListDeleteItemsPos( + Widget w, + int item_count, + int pos) ; +extern void XmListDeleteAllItems( + Widget w) ; +extern void XmListReplaceItems( + Widget w, + XmString *old_items, + int item_count, + XmString *new_items) ; +extern void XmListReplaceItemsPos( + Widget w, + XmString *new_items, + int item_count, + int position) ; +extern void XmListReplaceItemsUnselected( + Widget w, + XmString *old_items, + int item_count, + XmString *new_items) ; +extern void XmListReplaceItemsPosUnselected( + Widget w, + XmString *new_items, + int item_count, + int position) ; +extern void XmListReplacePositions( + Widget w, + int *position_list, + XmString *item_list, + int item_count ) ; +extern void XmListSelectItem( + Widget w, + XmString item, +#if NeedWidePrototypes + int notify) ; +#else + Boolean notify) ; +#endif /* NeedWidePrototypes */ +extern void XmListSelectPos( + Widget w, + int pos, +#if NeedWidePrototypes + int notify) ; +#else + Boolean notify) ; +#endif /* NeedWidePrototypes */ +extern void XmListDeselectItem( + Widget w, + XmString item) ; +extern void XmListDeselectPos( + Widget w, + int pos) ; +extern void XmListDeselectAllItems( + Widget w) ; +extern void XmListSetPos( + Widget w, + int pos) ; +extern void XmListSetBottomPos( + Widget w, + int pos) ; +extern void XmListSetItem( + Widget w, + XmString item) ; +extern void XmListSetBottomItem( + Widget w, + XmString item) ; +extern void XmListSetAddMode( + Widget w, +#if NeedWidePrototypes + int add_mode) ; +#else + Boolean add_mode) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmListItemExists( + Widget w, + XmString item) ; +extern int XmListItemPos( + Widget w, + XmString item) ; +extern int XmListGetKbdItemPos( + Widget w) ; +extern Boolean XmListSetKbdItemPos( + Widget w, + int pos ) ; +extern int XmListYToPos( + Widget w, + Position y) ; /* NeedWidePrototypes ????? */ +extern Boolean XmListPosToBounds( + Widget w, + int position, + Position *x, + Position *y, + Dimension *width, + Dimension *height) ; +extern Boolean XmListGetMatchPos( + Widget w, + XmString item, + int **pos_list, + int *pos_count) ; +extern Boolean XmListGetSelectedPos( + Widget w, + int **pos_list, + int *pos_count) ; +extern void XmListSetHorizPos( + Widget w, + int position) ; +extern void XmListUpdateSelectedList( + Widget w) ; +extern Boolean XmListPosSelected( + Widget w, + int pos); +extern Widget XmCreateList( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; +extern Widget XmCreateScrolledList( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; +extern Widget XmVaCreateList( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedList( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmList_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ListP.h b/libXm/osx/Xm/ListP.h new file mode 100644 index 0000000..cf5b869 --- /dev/null +++ b/libXm/osx/Xm/ListP.h @@ -0,0 +1,242 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ListP.h /main/12 1995/09/19 23:04:39 cde-sun $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmListP_h +#define _XmListP_h + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* List struct passed to Convert proc for drag and drop */ +typedef struct _XmListDragConvertStruct +{ + Widget w; + XmString *strings; + int num_strings; +} XmListDragConvertStruct; + +/* List class structure */ +typedef struct _XmListClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmListClassPart; + + +/* Full class record declaration for List class */ +typedef struct _XmListClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmListClassPart list_class; +} XmListClassRec; + +externalref XmListClassRec xmListClassRec; + +/* Internal form of the list elements. */ +typedef struct { + Dimension height; + Dimension width; + Boolean selected; + Boolean last_selected; + Boolean LastTimeDrawn; + int length; + wchar_t first_char; +} Element, *ElementPtr; + +/* The List instance record */ +typedef struct _XmListPart +{ + Dimension spacing; + short ItemSpacing; + Dimension margin_width; + Dimension margin_height; + XmFontList font; + XmString *items; + int itemCount; + XmString *selectedItems; + int *selectedPositions; /* "selectedIndices" in Motif 1.2 */ + int selectedItemCount; + int visibleItemCount; + int LastSetVizCount; + unsigned char SelectionPolicy; + unsigned char ScrollBarDisplayPolicy; + unsigned char SizePolicy; + XmStringDirection StrDir; + + XtEnum AutoSelect; + Boolean DidSelection; + Boolean FromSetSB; + Boolean FromSetNewSize; + unsigned char SelectionMode; /* "Boolean AddMode" in Motif 1.2 */ + unsigned char LeaveDir; + unsigned char HighlightThickness; + int ClickInterval; + XtIntervalId DragID; + XtCallbackList SingleCallback; + XtCallbackList MultipleCallback; + XtCallbackList ExtendCallback; + XtCallbackList BrowseCallback; + XtCallbackList DefaultCallback; + + + GC NormalGC; + GC InverseGC; + GC HighlightGC; + Pixmap DashTile; /* unused in Motif 1.2 */ + ElementPtr *InternalList; + int LastItem; /* position of last item in list */ + int FontHeight; /* unused in Motif 1.2 */ + int top_position; + char Event; + int LastHLItem; + + /* These fields specify the boundaries of the selection (i.e. + * the current selection) as specified by the "selected" field + * of the InternalList elements and the boundaries of the + * last_selected selection (i.e. the previous selection) as + * specified by the "last_selected" field of the InternalList + * elements. + */ + int StartItem; + int OldStartItem; + int EndItem; + int OldEndItem; + + Position BaseX; + Position BaseY; + + /* MouseMoved: unused resource from Motif1.2, used now in the + * CheckSetRenderTable default proc (see List.c). + */ + Boolean MouseMoved; + + Boolean AppendInProgress; + Boolean Traversing; + Boolean KbdSelection; + short DownCount; + Time DownTime; + int CurrentKbdItem; /* position of location cursor */ + unsigned char SelectionType; + GC InsensitiveGC; + + int vmin; /* unused in Motif 1.2 */ + int vmax; /* unused in Motif 2.0 */ + int vOrigin; /* unused in Motif 2.0 */ + int vExtent; /* unused in Motif 2.0 */ + + int hmin; /* slider minimum coordiate position */ + int hmax; /* slider maximum coordiate position */ + int hOrigin; /* slider edge location */ + int hExtent; /* slider size */ + + Dimension MaxWidth; + Dimension CharWidth; /* unused in Motif 1.2 */ + Position XOrigin; + + XmScrollBarWidget hScrollBar; + XmScrollBarWidget vScrollBar; + XmScrolledWindowWidget Mom; + Dimension MaxItemHeight; + + /*--- New fields in Motif 2.0. ---*/ + int selectedPositionCount; + + unsigned char matchBehavior; + + /* The AutoSelectionType is used to designate where in the selection + * process the user currently is when auto select is enabled. For + * instance, during an extended select, there is a beginning to + * the selection, possible mouse motions and finally a button release + * resulting in either a selection identical to what was selected + * before the beginning or to a selection that is different. + */ + unsigned char AutoSelectionType; + + /* PrimaryOwnership is used to describe how the list show take + * ownership of the primary selection when the user selects list + * items, with a possible value of NEVER. + */ + unsigned char PrimaryOwnership; + + XtCallbackList DestinationCallback; + + /* Selection rendition fields */ + XmRendition scratchRend; + Pixel selectColor; + + /* This field is used to house the top position of the list before a + * scrolling action begins. If the scrolling action is cancelled, then + * we restore the list top position by using this field. When scrolling + * by directly using the scroll bar, we don't need this field since the + * scroll frame trait handles the reset. When scrolling by selecting + * items and dragging off the edge of the list, we need to use this + * field to reset the list position when a user presses the cancel key. + */ + int previous_top_position; + + XtIntervalId drag_start_timer; + char * drag_abort_action; + XEvent drag_event; + XmListDragConvertStruct *drag_conv; +} XmListPart; + + +/* Full instance record declaration */ +typedef struct _XmListRec +{ + CorePart core; + XmPrimitivePart primitive; + XmListPart list; +} XmListRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmListP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MainW.h b/libXm/osx/Xm/MainW.h new file mode 100644 index 0000000..2bf06de --- /dev/null +++ b/libXm/osx/Xm/MainW.h @@ -0,0 +1,98 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MainW.h /main/12 1995/07/13 17:34:12 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMainWindow_h +#define _XmMainWindow_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsMainWindow +#define XmIsMainWindow(w) XtIsSubclass(w, xmMainWindowWidgetClass) +#endif /* XmIsMainWindow */ + +externalref WidgetClass xmMainWindowWidgetClass; + +typedef struct _XmMainWindowClassRec * XmMainWindowWidgetClass; +typedef struct _XmMainWindowRec * XmMainWindowWidget; + + +/******** Public Function Declarations ********/ + +extern void XmMainWindowSetAreas( + Widget w, + Widget menu, + Widget command, + Widget hscroll, + Widget vscroll, + Widget wregion) ; +extern Widget XmMainWindowSep1( + Widget w) ; +extern Widget XmMainWindowSep2( + Widget w) ; +extern Widget XmMainWindowSep3( + Widget w) ; +extern Widget XmCreateMainWindow( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; +extern Widget XmVaCreateMainWindow( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedMainWindow( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMainWindow_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MainWP.h b/libXm/osx/Xm/MainWP.h new file mode 100644 index 0000000..5a28734 --- /dev/null +++ b/libXm/osx/Xm/MainWP.h @@ -0,0 +1,133 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MainWP.h /main/12 1995/07/13 17:34:19 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMainWindowP_h +#define _XmMainWindowP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define DEFAULT_HEIGHT 20 +#define DEFAULT_WIDTH 20 + +/* Constraint part record for MainWindow widget */ +typedef struct _XmMainWindowConstraintPart +{ + char unused; +} XmMainWindowConstraintPart, * XmMainWindowConstraint; + + +/* New fields for the MainWindow widget class record */ +typedef struct { + XtPointer extension; /* Pointer to extension record */ +} XmMainWindowClassPart; + +/**************** + * + * Class record declaration + * + ****************/ +typedef struct _XmMainWindowClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmScrolledWindowClassPart swindow_class; + XmMainWindowClassPart mwindow_class; +} XmMainWindowClassRec; + +externalref XmMainWindowClassRec xmMainWindowClassRec; + +/**************** + * + * Main Window instance structure. + * + ****************/ +typedef struct { + + + Dimension AreaWidth,AreaHeight; + Dimension margin_width,margin_height; + Widget CommandWindow; + Widget MenuBar; + Widget Message; + unsigned char CommandLoc; + XmSeparatorGadget Sep1,Sep2,Sep3; + Boolean ManagingSep; + Boolean ShowSep; + +} XmMainWindowPart; + + +/************************************************************************ + * * + * Full instance record declaration * + * * + ************************************************************************/ + +typedef struct _XmMainWindowRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmScrolledWindowPart swindow; + XmMainWindowPart mwindow; +} XmMainWindowRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMainWindowP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Manager.h b/libXm/osx/Xm/Manager.h new file mode 100644 index 0000000..a2e83a1 --- /dev/null +++ b/libXm/osx/Xm/Manager.h @@ -0,0 +1,70 @@ +/* $XConsortium: Manager.h /main/5 1995/07/15 20:52:43 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmManager_h +#define _XmManager_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsManager +#define XmIsManager(w) XtIsSubclass(w, xmManagerWidgetClass) +#endif /* XmIsManager */ + +externalref WidgetClass xmManagerWidgetClass; + +typedef struct _XmManagerClassRec * XmManagerWidgetClass; +typedef struct _XmManagerRec * XmManagerWidget; + + +/******** Public Function Declarations ********/ + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmManager_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ManagerI.h b/libXm/osx/Xm/ManagerI.h new file mode 100644 index 0000000..9331b4d --- /dev/null +++ b/libXm/osx/Xm/ManagerI.h @@ -0,0 +1,167 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ManagerI.h /main/5 1995/07/13 17:35:08 drk $ */ +#ifndef _XmManagerI_h +#define _XmManagerI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmGadgetTraverseCurrent( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraversePrevTabGroup( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseNextTabGroup( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseLeft( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseRight( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseUp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseDown( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseNext( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraversePrev( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetTraverseHome( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetSelect( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerParentActivate( + Widget mw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerParentCancel( + Widget mw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetButtonMotion( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetKeyInput( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetArm( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetDrag( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetActivate( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerHelp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetMultiArm( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmGadgetMultiActivate( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmManagerI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ManagerP.h b/libXm/osx/Xm/ManagerP.h new file mode 100644 index 0000000..f925cf1 --- /dev/null +++ b/libXm/osx/Xm/ManagerP.h @@ -0,0 +1,215 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ManagerP.h /main/10 1996/03/28 15:59:43 daniel $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmManagerP_h +#define _XmManagerP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Access Macros */ + +#define XmParentTopShadowGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.top_shadow_GC) + +#define XmParentBottomShadowGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.bottom_shadow_GC) + +#define XmParentHighlightGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.highlight_GC) + +#define XmParentBackgroundGC(w) \ + (((XmManagerWidget) XtParent(w))->manager.background_GC) + + +#define MGR_KeyboardList(m) \ + (((XmManagerRec *) (m))->manager.keyboard_list) +#define MGR_NumKeyboardEntries(m) \ + (((XmManagerRec *) (m))->manager.num_keyboard_entries) +#define MGR_SizeKeyboardList(m) \ + (((XmManagerRec *) (m))->manager.size_keyboard_list) +#define MGR_ShadowThickness(m) \ + (((XmManagerRec *) (m))->manager.shadow_thickness) + + +#define XmInheritTraversalChildrenProc ((XmTraversalChildrenProc) _XtInherit) +#define XmInheritObjectAtPointProc ((XmObjectAtPointProc) _XtInherit) + +typedef Boolean (*XmTraversalChildrenProc)( Widget, Widget **, Cardinal *) ; +typedef Widget (*XmObjectAtPointProc)(Widget, Position, Position) ; + + +/* Structure used for storing accelerator and mnemonic information. */ + +typedef struct +{ + unsigned int eventType; + KeySym keysym; + KeyCode key; + unsigned int modifiers; + Widget component; + Boolean needGrab; + Boolean isMnemonic; +} XmKeyboardData; + + +/* The class definition */ + +typedef struct { + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmTraversalChildrenProc traversal_children ; + XmObjectAtPointProc object_at_point ; +} XmManagerClassExtRec, *XmManagerClassExt ; + +#define XmManagerClassExtVersion 1L + +typedef struct _XmManagerClassPart +{ + String translations; + XmSyntheticResource * syn_resources; + int num_syn_resources; + XmSyntheticResource * syn_constraint_resources; + int num_syn_constraint_resources; + XmParentProcessProc parent_process; + XtPointer extension; +} XmManagerClassPart; + +typedef struct _XmManagerClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; +} XmManagerClassRec; + +externalref XmManagerClassRec xmManagerClassRec; + + +/* The instance definition */ + +typedef struct _XmManagerPart +{ + Pixel foreground; + + Dimension shadow_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Pixel highlight_color; + Pixmap highlight_pixmap; + + XtCallbackList help_callback; + XtPointer user_data; + + Boolean traversal_on; + unsigned char unit_type; + XmNavigationType navigation_type; + + Boolean event_handler_added; + Widget active_child; + Widget highlighted_widget; + Widget accelerator_widget; + + Boolean has_focus; + + XmStringDirection string_direction; + + XmKeyboardData * keyboard_list; + short num_keyboard_entries; + short size_keyboard_list; + + XmGadget selected_gadget; + XmGadget eligible_for_multi_button_event; + + GC background_GC; + GC highlight_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + + Widget initial_focus; + +#ifndef XM_PART_BC + XtCallbackList popup_handler_callback; +#endif + +} XmManagerPart; + +typedef struct _XmManagerRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; +} XmManagerRec; + + +/* The constraint definition */ + +typedef struct _XmManagerConstraintPart +{ + int unused; +} XmManagerConstraintPart; + +typedef struct _XmManagerConstraintRec +{ + XmManagerConstraintPart manager; +} XmManagerConstraintRec, * XmManagerConstraintPtr; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmManagerP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MapEventsI.h b/libXm/osx/Xm/MapEventsI.h new file mode 100644 index 0000000..d2bbef3 --- /dev/null +++ b/libXm/osx/Xm/MapEventsI.h @@ -0,0 +1,80 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: MapEventsI.h /main/5 1995/07/13 17:35:36 drk $ */ +#ifndef _XmMapEventsI_h +#define _XmMapEventsI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for MapEvents.c ********/ + +extern Boolean _XmMapBtnEvent( + register String str, + int *eventType, + unsigned int *button, + Modifiers *modifiers) ; +extern int _XmMapKeyEvents( + register String str, + int **eventType, + KeySym **keysym, + Modifiers **modifiers) ; +extern Boolean _XmMatchBtnEvent( + XEvent *event, + int eventType, + unsigned int button, + Modifiers modifiers) ; +extern Boolean _XmMatchKeyEvent( + XEvent *event, + int eventType, + unsigned int key, + Modifiers modifiers) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMapEventsI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuProcI.h b/libXm/osx/Xm/MenuProcI.h new file mode 100644 index 0000000..196e961 --- /dev/null +++ b/libXm/osx/Xm/MenuProcI.h @@ -0,0 +1,66 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: MenuProcI.h /main/5 1995/07/13 17:35:47 drk $ */ +#ifndef _XmMenuProcI_h +#define _XmMenuProcI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmSaveMenuProcContext(XtPointer address) ; +extern XtPointer _XmGetMenuProcContext( void ) ; +extern void _XmSaveCoreClassTranslations(Widget widget) ; +extern void _XmRestoreCoreClassTranslations(Widget widget) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuProcI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuProcP.h b/libXm/osx/Xm/MenuProcP.h new file mode 100644 index 0000000..e8cfd6b --- /dev/null +++ b/libXm/osx/Xm/MenuProcP.h @@ -0,0 +1,61 @@ +/* $XConsortium: MenuProcP.h /main/4 1995/07/15 20:52:51 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmMenuProcP_h +#define _XmMenuProcP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct _XmTranslRec +{ + XtTranslations translations; + struct _XmTranslRec * next; +}; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuProcP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuShell.h b/libXm/osx/Xm/MenuShell.h new file mode 100644 index 0000000..b354d9f --- /dev/null +++ b/libXm/osx/Xm/MenuShell.h @@ -0,0 +1,79 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MenuShell.h /main/11 1995/07/13 17:36:21 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMenuShell_h +#define _XmMenuShell_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmMenuShellWidgetClass; + +typedef struct _XmMenuShellClassRec * XmMenuShellWidgetClass; +typedef struct _XmMenuShellWidgetRec * XmMenuShellWidget; + +#ifndef XmIsMenuShell +#define XmIsMenuShell(w) XtIsSubclass(w, xmMenuShellWidgetClass) +#endif /* XmIsMenuShell */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateMenuShell( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuShell_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuShellI.h b/libXm/osx/Xm/MenuShellI.h new file mode 100644 index 0000000..36b2ae6 --- /dev/null +++ b/libXm/osx/Xm/MenuShellI.h @@ -0,0 +1,79 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: MenuShellI.h /main/5 1995/07/13 17:36:29 drk $ */ +#ifndef _XmMenuShellI_h +#define _XmMenuShellI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmEnterRowColumn( + Widget widget, + XtPointer closure, + XEvent *event, + Boolean *cont) ; +extern void _XmClearTraversal( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmSetLastManagedMenuTime( + Widget wid, + Time newTime ) ; +extern void _XmPopupSpringLoaded( + Widget shell ) ; +extern void _XmPopdown( + Widget shell ) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuShellI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuShellP.h b/libXm/osx/Xm/MenuShellP.h new file mode 100644 index 0000000..e51dd80 --- /dev/null +++ b/libXm/osx/Xm/MenuShellP.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MenuShellP.h /main/11 1995/07/13 17:36:37 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMenuShellP_h +#define _XmMenuShellP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The MenuShell instance record */ + +typedef struct +{ + unsigned char focus_policy; + XmFocusData focus_data; + Boolean private_shell; + XmFontList default_font_list; + XmFontList button_font_list; + XmFontList label_font_list; + XmDirection layout_direction; + Boolean animate; +} XmMenuShellPart; + + +/* Full instance record declaration */ + +typedef struct _XmMenuShellRec +{ + CorePart core; + CompositePart composite; + ShellPart shell; + OverrideShellPart override; + XmMenuShellPart menu_shell; +} XmMenuShellRec; + +typedef struct _XmMenuShellWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ShellPart shell; + OverrideShellPart override; + XmMenuShellPart menu_shell; +} XmMenuShellWidgetRec; + + + +/* MenuShell class structure */ + +typedef struct +{ + XtActionProc popdownOne; /* unpost portion or all of menu */ + XtActionProc popdownEveryone; /* unpost portion of menu */ + XtActionProc popdownDone; /* unpost all menus */ + XmMenuPopupProc popupSharedMenupane; /* post shared menus */ + /* (should be popupSharedMenuShell) */ + XtPointer extension; /* Pointer to extension record */ +} XmMenuShellClassPart; + + +/* Full class record declaration */ + +typedef struct _XmMenuShellClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + OverrideShellClassPart override_shell_class; + XmMenuShellClassPart menu_shell_class; +} XmMenuShellClassRec; + + +externalref XmMenuShellClassRec xmMenuShellClassRec; + +#define MS_FocusPolicy(m) \ + (((XmMenuShellWidget)m)->menu_shell.focus_policy) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuStateI.h b/libXm/osx/Xm/MenuStateI.h new file mode 100644 index 0000000..5a287c6 --- /dev/null +++ b/libXm/osx/Xm/MenuStateI.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: MenuStateI.h /main/5 1995/07/13 17:36:46 drk $ */ +#ifndef _XmMenuStateI_h +#define _XmMenuStateI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern Widget _XmGetRC_PopupPosted ( + Widget wid) ; +extern Boolean _XmGetInDragMode( + Widget widget) ; +extern void _XmSetInDragMode( + Widget widget, +#if NeedWidePrototypes + int mode) ; +#else + Boolean mode) ; +#endif /* NeedWidePrototypes */ + +extern XmMenuState _XmGetMenuState( + Widget widget) ; +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuStateI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuStateP.h b/libXm/osx/Xm/MenuStateP.h new file mode 100644 index 0000000..7a1d427 --- /dev/null +++ b/libXm/osx/Xm/MenuStateP.h @@ -0,0 +1,56 @@ +/* $XConsortium: MenuStateP.h /main/4 1995/07/15 20:52:59 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmMenuStateP_h +#define _XmMenuStateP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuStateP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuT.h b/libXm/osx/Xm/MenuT.h new file mode 100644 index 0000000..8d6289e --- /dev/null +++ b/libXm/osx/Xm/MenuT.h @@ -0,0 +1,143 @@ +/* $XConsortium: MenuT.h /main/5 1995/07/15 20:53:03 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmMenuT_H +#define _XmMenuT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Quick fix for Linux-ARM where "arm" is the #define symbol */ +#ifdef arm +# undef arm +#endif + +/* Menu System Traits */ +externalref XrmQuark XmQTmenuSystem; +externalref XrmQuark XmQTmenuSavvy; + +/* Trait structures and typedefs, place typedefs first */ + +/* Used by the disable callback method of the menu savvy trait */ +typedef enum { + XmDISABLE_ACTIVATE, /* defer to the entryCallback */ + XmENABLE_ACTIVATE /* invoke own activate callback */ +} XmActivateState; + +/* Menu trait typedefs */ + +typedef int (*XmMenuSystemWidgetProc)(Widget); +typedef Boolean (*XmMenuSystemVerifyProc)(Widget, XEvent*); +typedef void (*XmMenuSystemControlTraversalProc)(Widget, Boolean); +typedef void (*XmMenuSystemCascadeProc)(Widget, Widget, XEvent*); +typedef void (*XmMenuSystemPositionProc)(Widget, XEvent*); +typedef Boolean (*XmMenuSystemPopdownProc)(Widget, XEvent*); +typedef void (*XmMenuSystemEntryCallbackProc)(Widget, Widget, XtPointer); +typedef Boolean (*XmMenuSystemUpdateHistoryProc)(Widget, Widget, Boolean); +typedef void (*XmMenuSystemUpdateBindingsProc)(Widget, int); +typedef void (*XmMenuSystemRecordPostFromWidgetProc)(Widget, Widget, Boolean); +typedef void (*XmMenuSystemDisarmProc)(Widget); +typedef Widget (*XmMenuSystemPopupPostedProc)(Widget); +typedef void (*XmMenuSavvyDisableProc)(Widget, XmActivateState); +typedef char* (*XmMenuSavvyGetAcceleratorProc)(Widget); +typedef KeySym (*XmMenuSavvyGetMnemonicProc)(Widget); +typedef char* (*XmMenuSavvyGetActivateCBNameProc)(); +#define XmMenuSystemTypeProc XmMenuSystemWidgetProc +#define XmMenuSystemStatusProc XmMenuSystemWidgetProc +#define XmMenuSystemGetPostedFromWidgetProc XmMenuSystemDisarmProc +#define XmMenuSystemArmProc XmMenuSystemDisarmProc +#define XmMenuSystemMenuBarCleanupProc XmMenuSystemDisarmProc +#define XmMenuSystemTearOffArmProc XmMenuSystemDisarmProc +#define XmMenuSystemReparentProc XmMenuSystemPositionProc +#define XmMenuSystemPopdownAllProc XmMenuSystemPositionProc +#define XmMenuSystemChildFocusProc XmMenuSystemDisarmProc + +/* XmTmenuProcTrait */ + +/* Version 0: initial release. */ + +typedef struct _XmMenuSystemTraitRec +{ + int version; /* 0 */ + XmMenuSystemTypeProc type; + XmMenuSystemStatusProc status; + XmMenuSystemCascadeProc cascade; + XmMenuSystemVerifyProc verifyButton; + XmMenuSystemControlTraversalProc controlTraversal; + XmMenuSystemMenuBarCleanupProc menuBarCleanup; + XmMenuSystemPopdownProc popdown; + XmMenuSystemPopdownProc buttonPopdown; + XmMenuSystemReparentProc reparentToTearOffShell; + XmMenuSystemReparentProc reparentToMenuShell; + XmMenuSystemArmProc arm; + XmMenuSystemDisarmProc disarm; + XmMenuSystemTearOffArmProc tearOffArm; + XmMenuSystemEntryCallbackProc entryCallback; + XmMenuSystemUpdateHistoryProc updateHistory; + XmMenuSystemGetPostedFromWidgetProc getLastSelectToplevel; + XmMenuSystemPositionProc position; + XmMenuSystemUpdateBindingsProc updateBindings; + XmMenuSystemRecordPostFromWidgetProc recordPostFromWidget; + XmMenuSystemPopdownAllProc popdownEveryone; + XmMenuSystemChildFocusProc childFocus; + XmMenuSystemPopupPostedProc getPopupPosted; +} XmMenuSystemTraitRec, *XmMenuSystemTrait; + +/* XmTmenuSavvyTrait */ + +/* Version 0: initial release. */ + +typedef struct _XmMenuSavvyTraitRec +{ + int version; /* 0 */ + XmMenuSavvyDisableProc disableCallback; + XmMenuSavvyGetAcceleratorProc getAccelerator; + XmMenuSavvyGetMnemonicProc getMnemonic; + XmMenuSavvyGetActivateCBNameProc getActivateCBName; +} XmMenuSavvyTraitRec, *XmMenuSavvyTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuT_H */ diff --git a/libXm/osx/Xm/MenuUtilI.h b/libXm/osx/Xm/MenuUtilI.h new file mode 100644 index 0000000..4ecebd0 --- /dev/null +++ b/libXm/osx/Xm/MenuUtilI.h @@ -0,0 +1,149 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: MenuUtilI.h /main/6 1996/07/23 16:45:49 pascale $ */ +#ifndef _XmMenuUtilI_h +#define _XmMenuUtilI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmMenuHelp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern Boolean _XmIsActiveTearOff ( + Widget w) ; +extern int _XmGrabPointer( + Widget widget, + int owner_events, + unsigned int event_mask, + int pointer_mode, + int keyboard_mode, + Window confine_to, + Cursor cursor, + Time time) ; +extern int _XmGrabKeyboard( + Widget widget, + int owner_events, + int pointer_mode, + int keyboard_mode, + Time time) ; +extern int _XmMenuGrabKeyboardAndPointer( + Widget widget, + Time time) ; +extern void _XmMenuSetInPMMode( + Widget wid, +#if NeedWidePrototypes + int flag) ; +#else + Boolean flag) ; +#endif /* NeedWidePrototypes */ +extern void _XmSetMenuTraversal( + Widget wid, +#if NeedWidePrototypes + int traversalOn) ; +#else + Boolean traversalOn) ; +#endif /* NeedWidePrototypes */ +extern void _XmLeafPaneFocusOut( + Widget wid) ; +extern void _XmMenuTraverseLeft( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuTraverseRight( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuTraverseUp( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuTraverseDown( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuEscape( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmRC_GadgetTraverseDown( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmRC_GadgetTraverseUp( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmRC_GadgetTraverseLeft( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmRC_GadgetTraverseRight( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuTraversalHandler( + Widget w, + Widget pw, + XmTraversalDirection direction) ; +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuUtilI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MenuUtilP.h b/libXm/osx/Xm/MenuUtilP.h new file mode 100644 index 0000000..9e1f42d --- /dev/null +++ b/libXm/osx/Xm/MenuUtilP.h @@ -0,0 +1,56 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MenuUtilP.h /main/9 1995/07/13 17:37:16 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmMenuUtilP_h +#define _XmMenuUtilP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMenuUtilP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MessageB.h b/libXm/osx/Xm/MessageB.h new file mode 100644 index 0000000..ae85a71 --- /dev/null +++ b/libXm/osx/Xm/MessageB.h @@ -0,0 +1,137 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MessageB.h /main/11 1995/07/13 17:37:42 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMessage_h +#define _XmMessage_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmMessageBoxWidgetClass; + +typedef struct _XmMessageBoxClassRec * XmMessageBoxWidgetClass; +typedef struct _XmMessageBoxRec * XmMessageBoxWidget; + +/* fast XtIsSubclass define */ +#ifndef XmIsMessageBox +#define XmIsMessageBox(w) XtIsSubclass (w, xmMessageBoxWidgetClass) +#endif + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateMessageBox( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateMessageDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateErrorDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateInformationDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateQuestionDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateWarningDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateWorkingDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateTemplateDialog( + Widget parent, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmMessageBoxGetChild( + Widget widget, +#if NeedWidePrototypes + unsigned int child) ; +#else + unsigned char child) ; +#endif /* NeedWidePrototypes */ + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateMessageBox( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedMessageBox( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMessage_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MessageBI.h b/libXm/osx/Xm/MessageBI.h new file mode 100644 index 0000000..92fb09c --- /dev/null +++ b/libXm/osx/Xm/MessageBI.h @@ -0,0 +1,66 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: MessageBI.h /main/5 1995/07/13 17:37:52 drk $ */ +#ifndef _XmMessageBI_h +#define _XmMessageBI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern XmGeoMatrix _XmMessageBoxGeoMatrixCreate( + Widget wid, + Widget instigator, + XtWidgetGeometry *desired) ; +extern Boolean _XmMessageBoxNoGeoRequest( + XmGeoMatrix geoSpec) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMessageBI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MessageBP.h b/libXm/osx/Xm/MessageBP.h new file mode 100644 index 0000000..52b2cba --- /dev/null +++ b/libXm/osx/Xm/MessageBP.h @@ -0,0 +1,136 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MessageBP.h /main/10 1995/07/13 17:38:00 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmessageP_h +#define _XmessageP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constraint part record for MessageBox widget */ + +typedef struct _XmMessageBoxConstraintPart +{ + char unused; +} XmMessageBoxConstraintPart, * XmMessageBoxConstraint; + + +/* New fields for the MessageBox widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmMessageBoxClassPart; + + +/* Full class record declaration */ + +typedef struct _XmMessageBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmMessageBoxClassPart message_box_class; +} XmMessageBoxClassRec; + +externalref XmMessageBoxClassRec xmMessageBoxClassRec; + + +/* New fields for the MessageBox widget record */ + +typedef struct +{ + unsigned char dialog_type; + unsigned char default_type; + Boolean internal_pixmap; + Boolean minimize_buttons; + + unsigned char message_alignment; + XmString message_string; + Widget message_wid; + + Pixmap symbol_pixmap; + Widget symbol_wid; + + XmString ok_label_string; + XtCallbackList ok_callback; + Widget ok_button; + + XmString cancel_label_string; + XtCallbackList cancel_callback; + + XmString help_label_string; + Widget help_button; + + Widget separator; + +} XmMessageBoxPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmMessageBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmMessageBoxPart message_box; +} XmMessageBoxRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMessage_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MessagesI.h b/libXm/osx/Xm/MessagesI.h new file mode 100644 index 0000000..a3caf60 --- /dev/null +++ b/libXm/osx/Xm/MessagesI.h @@ -0,0 +1,367 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MessagesI.h /main/16 1996/06/14 23:10:03 pascale $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMessagesI_h +#define _XmMessagesI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The symbol _XmConst is used for constant data that cannot be + * declared const in the header file because of usage as arguments to + * routines which have string arguments that are not declared const. + * + * So, _XmConst is always defined to be nothing in header files. + * In the source file, however, _XmConst is defined to be const, + * so as to allow shared data in a shared library environment. + */ + +#ifndef _XmConst +#define _XmConst +#endif + + +externalref _XmConst char *_XmMsgBaseClass_0000 ; +externalref _XmConst char *_XmMsgBaseClass_0001 ; +externalref _XmConst char *_XmMsgBaseClass_0002 ; +externalref _XmConst char *_XmMsgBulletinB_0001 ; +externalref _XmConst char *_XmMsgCascadeB_0000 ; +externalref _XmConst char *_XmMsgCascadeB_0001 ; +externalref _XmConst char *_XmMsgCascadeB_0002 ; +externalref _XmConst char *_XmMsgCascadeB_0003 ; +externalref _XmConst char *_XmMsgComboBox_0000 ; +externalref _XmConst char *_XmMsgComboBox_0001 ; +externalref _XmConst char *_XmMsgComboBox_0002 ; +externalref _XmConst char *_XmMsgComboBox_0003 ; +externalref _XmConst char *_XmMsgComboBox_0004 ; +externalref _XmConst char *_XmMsgComboBox_0005 ; +externalref _XmConst char *_XmMsgComboBox_0006 ; +externalref _XmConst char *_XmMsgComboBox_0007 ; +externalref _XmConst char *_XmMsgComboBox_0008 ; +externalref _XmConst char *_XmMsgComboBox_0009 ; +externalref _XmConst char *_XmMsgComboBox_0010 ; +externalref _XmConst char *_XmMsgComboBox_0011 ; +externalref _XmConst char *_XmMsgComboBox_0012 ; +externalref _XmConst char *_XmMsgComboBox_0013 ; +externalref _XmConst char *_XmMsgComboBox_0014 ; +externalref _XmConst char *_XmMsgCommand_0000 ; +externalref _XmConst char *_XmMsgCommand_0001 ; +externalref _XmConst char *_XmMsgCommand_0002 ; +externalref _XmConst char *_XmMsgCommand_0003 ; +externalref _XmConst char *_XmMsgCommand_0004 ; +externalref _XmConst char *_XmMsgCommand_0005 ; +externalref _XmConst char *_XmMsgContainer_0000 ; +externalref _XmConst char *_XmMsgContainer_0001 ; +externalref _XmConst char *_XmMsgCutPaste_0000 ; +externalref _XmConst char *_XmMsgCutPaste_0001 ; +externalref _XmConst char *_XmMsgCutPaste_0002 ; +externalref _XmConst char *_XmMsgCutPaste_0003 ; +externalref _XmConst char *_XmMsgCutPaste_0004 ; +externalref _XmConst char *_XmMsgCutPaste_0005 ; +externalref _XmConst char *_XmMsgCutPaste_0006 ; +externalref _XmConst char *_XmMsgCutPaste_0007 ; +externalref _XmConst char *_XmMsgCutPaste_0008 ; +externalref _XmConst char *_XmMsgCutPaste_0009 ; +externalref _XmConst char *_XmMsgDialogS_0000 ; +externalref _XmConst char *_XmMsgDragBS_0000 ; +externalref _XmConst char *_XmMsgDragBS_0001 ; +externalref _XmConst char *_XmMsgDragBS_0002 ; +externalref _XmConst char *_XmMsgDragBS_0003 ; +externalref _XmConst char *_XmMsgDragBS_0004 ; +externalref _XmConst char *_XmMsgDragBS_0005 ; +externalref _XmConst char *_XmMsgDragBS_0006 ; +externalref _XmConst char *_XmMsgDragICC_0000 ; +externalref _XmConst char *_XmMsgDragICC_0001 ; +externalref _XmConst char *_XmMsgDragIcon_0000 ; +externalref _XmConst char *_XmMsgDragIcon_0001 ; +externalref _XmConst char *_XmMsgDragIcon_0002 ; +externalref _XmConst char *_XmMsgDragOverS_0000 ; +externalref _XmConst char *_XmMsgDragOverS_0001 ; +externalref _XmConst char *_XmMsgDragOverS_0002 ; +externalref _XmConst char *_XmMsgDragOverS_0003 ; +externalref _XmConst char *_XmMsgDragUnder_0000 ; +externalref _XmConst char *_XmMsgDragUnder_0001 ; +externalref _XmConst char *_XmMsgForm_0000 ; +externalref _XmConst char *_XmMsgForm_0002 ; +externalref _XmConst char *_XmMsgForm_0003 ; +externalref _XmConst char *_XmMsgForm_0004 ; +externalref _XmConst char *_XmMsgGadget_0000 ; +externalref _XmConst char *_XmMsgGetSecRes_0000 ; +externalref _XmConst char *_XmMsgGrabS_0000 ; +externalref _XmConst char *_XmMsgLabel_0003 ; +externalref _XmConst char *_XmMsgLabel_0004 ; +externalref _XmConst char *_XmMsgList_0000 ; +externalref _XmConst char *_XmMsgList_0005 ; +externalref _XmConst char *_XmMsgList_0006 ; +externalref _XmConst char *_XmMsgList_0007 ; +externalref _XmConst char *_XmMsgList_0008 ; +externalref _XmConst char *_XmMsgList_0009 ; +externalref _XmConst char *_XmMsgList_0010 ; +externalref _XmConst char *_XmMsgList_0011 ; +externalref _XmConst char *_XmMsgList_0012 ; +externalref _XmConst char *_XmMsgList_0013 ; +externalref _XmConst char *_XmMsgList_0014 ; +externalref _XmConst char *_XmMsgList_0015 ; +externalref _XmConst char *_XmMsgMainW_0000 ; +externalref _XmConst char *_XmMsgMainW_0001 ; +externalref _XmConst char *_XmMsgManager_0000 ; +externalref _XmConst char *_XmMsgManager_0001 ; +externalref _XmConst char *_XmMsgMenuShell_0000 ; +externalref _XmConst char *_XmMsgMenuShell_0001 ; +externalref _XmConst char *_XmMsgMenuShell_0002 ; +externalref _XmConst char *_XmMsgMenuShell_0003 ; +externalref _XmConst char *_XmMsgMenuShell_0004 ; +externalref _XmConst char *_XmMsgMenuShell_0005 ; +externalref _XmConst char *_XmMsgMenuShell_0006 ; +externalref _XmConst char *_XmMsgMenuShell_0007 ; +externalref _XmConst char *_XmMsgMenuShell_0008 ; +externalref _XmConst char *_XmMsgMenuShell_0009 ; +externalref _XmConst char *_XmMsgMessageB_0003 ; +externalref _XmConst char *_XmMsgMessageB_0004 ; +externalref _XmConst char *_XmMsgNavigMap_0000 ; +externalref _XmConst char *_XmMsgNotebook_0000 ; +externalref _XmConst char *_XmMsgPanedW_0000 ; +externalref _XmConst char *_XmMsgPanedW_0001 ; +externalref _XmConst char *_XmMsgPanedW_0002 ; +externalref _XmConst char *_XmMsgPanedW_0003 ; +externalref _XmConst char *_XmMsgPanedW_0004 ; +externalref _XmConst char *_XmMsgPanedW_0005 ; +externalref _XmConst char *_XmMsgPrimitive_0000 ; +externalref _XmConst char *_XmMsgProtocols_0000 ; +externalref _XmConst char *_XmMsgProtocols_0001 ; +externalref _XmConst char *_XmMsgProtocols_0002 ; +externalref _XmConst char *_XmMsgRegion_0000 ; +externalref _XmConst char *_XmMsgResConvert_0000 ; +externalref _XmConst char *_XmMsgResConvert_0001 ; +externalref _XmConst char *_XmMsgResConvert_0002 ; +externalref _XmConst char *_XmMsgResConvert_0003 ; +externalref _XmConst char *_XmMsgResConvert_0004 ; +externalref _XmConst char *_XmMsgResConvert_0005 ; +externalref _XmConst char *_XmMsgResConvert_0006 ; +externalref _XmConst char *_XmMsgResConvert_0007 ; +externalref _XmConst char *_XmMsgResConvert_0008 ; +externalref _XmConst char *_XmMsgResConvert_0009 ; +externalref _XmConst char *_XmMsgResConvert_0010 ; +externalref _XmConst char *_XmMsgResConvert_0011 ; +externalref _XmConst char *_XmMsgResConvert_0012 ; +externalref _XmConst char *_XmMsgResConvert_0013 ; +externalref _XmConst char *_XmMsgResConvert_0014 ; +externalref _XmConst char *_XmMsgResConvert_0015 ; +externalref _XmConst char *_XmMsgResConvert_0016 ; +externalref _XmConst char *_XmMsgRowColumn_0000 ; +externalref _XmConst char *_XmMsgRowColumn_0001 ; +externalref _XmConst char *_XmMsgRowColumn_0002 ; +externalref _XmConst char *_XmMsgRowColumn_0003 ; +externalref _XmConst char *_XmMsgRowColumn_0004 ; +externalref _XmConst char *_XmMsgRowColumn_0005 ; +externalref _XmConst char *_XmMsgRowColumn_0007 ; +externalref _XmConst char *_XmMsgRowColumn_0008 ; +externalref _XmConst char *_XmMsgRowColumn_0015 ; +externalref _XmConst char *_XmMsgRowColumn_0016 ; +externalref _XmConst char *_XmMsgRowColumn_0017 ; +externalref _XmConst char *_XmMsgRowColumn_0018 ; +externalref _XmConst char *_XmMsgRowColumn_0019 ; +externalref _XmConst char *_XmMsgRowColumn_0020 ; +externalref _XmConst char *_XmMsgRowColumn_0022 ; +externalref _XmConst char *_XmMsgRowColumn_0023 ; +externalref _XmConst char *_XmMsgRowColText_0024 ; +externalref _XmConst char *_XmMsgRowColumn_0025 ; +externalref _XmConst char *_XmMsgRowColumn_0026 ; +externalref _XmConst char *_XmMsgRowColumn_0027 ; +externalref _XmConst char *_XmMsgScale_0000 ; +externalref _XmConst char *_XmMsgScale_0001 ; +externalref _XmConst char *_XmMsgScale_0002 ; +externalref _XmConst char *_XmMsgScaleScrBar_0004 ; +externalref _XmConst char *_XmMsgScale_0005 ; +externalref _XmConst char *_XmMsgScale_0006 ; +externalref _XmConst char *_XmMsgScale_0007 ; +externalref _XmConst char *_XmMsgScale_0008 ; +externalref _XmConst char *_XmMsgScale_0009 ; +externalref _XmConst char *_XmMsgScreen_0000 ; +externalref _XmConst char *_XmMsgScreen_0001 ; +externalref _XmConst char *_XmMsgColObj_0001 ; +externalref _XmConst char *_XmMsgColObj_0002 ; +externalref _XmConst char *_XmMsgScrollBar_0000 ; +externalref _XmConst char *_XmMsgScrollBar_0001 ; +externalref _XmConst char *_XmMsgScrollBar_0002 ; +externalref _XmConst char *_XmMsgScrollBar_0003 ; +externalref _XmConst char *_XmMsgScrollBar_0004 ; +externalref _XmConst char *_XmMsgScrollBar_0005 ; +externalref _XmConst char *_XmMsgScrollBar_0006 ; +externalref _XmConst char *_XmMsgScrollBar_0007 ; +externalref _XmConst char *_XmMsgScrollBar_0008 ; +externalref _XmConst char *_XmMsgScrolledW_0004 ; +externalref _XmConst char *_XmMsgScrolledW_0005 ; +externalref _XmConst char *_XmMsgScrolledW_0006 ; +externalref _XmConst char *_XmMsgScrolledW_0007 ; +externalref _XmConst char *_XmMsgScrolledW_0008 ; +externalref _XmConst char *_XmMsgScrolledW_0009 ; +externalref _XmConst char *_XmMsgScrollVis_0000 ; +externalref _XmConst char *_XmMsgSelectioB_0001 ; +externalref _XmConst char *_XmMsgSelectioB_0002 ; +externalref _XmConst char *_XmMsgSpinB_0001 ; +externalref _XmConst char *_XmMsgSpinB_0002 ; +externalref _XmConst char *_XmMsgSpinB_0003 ; +externalref _XmConst char *_XmMsgSpinB_0004 ; +externalref _XmConst char *_XmMsgSpinB_0005 ; +externalref _XmConst char *_XmMsgSpinB_0006 ; +externalref _XmConst char *_XmMsgSpinB_0007 ; +externalref _XmConst char *_XmMsgSpinB_0008 ; +externalref _XmConst char *_XmMsgSpinB_0009 ; +externalref _XmConst char *_XmMsgText_0000 ; +externalref _XmConst char *_XmMsgText_0002 ; +externalref _XmConst char *_XmMsgTextF_0000 ; +externalref _XmConst char *_XmMsgTextF_0001 ; +externalref _XmConst char *_XmMsgTextF_0002 ; +externalref _XmConst char *_XmMsgTextF_0003 ; +externalref _XmConst char *_XmMsgTextF_0004 ; +externalref _XmConst char *_XmMsgTextF_0005 ; +externalref _XmConst char *_XmMsgTextF_0006 ; +externalref _XmConst char *_XmMsgTextFWcs_0000 ; +externalref _XmConst char *_XmMsgTextFWcs_0001 ; +externalref _XmConst char *_XmMsgTextIn_0000 ; +externalref _XmConst char *_XmMsgTextOut_0000 ; +externalref _XmConst char *_XmMsgVendor_0000 ; +externalref _XmConst char *_XmMsgVendor_0001 ; +externalref _XmConst char *_XmMsgVendor_0002 ; +externalref _XmConst char *_XmMsgVendor_0003 ; +externalref _XmConst char *_XmMsgVendorE_0000 ; +externalref _XmConst char *_XmMsgVendorE_0005 ; +externalref _XmConst char *_XmMsgVisual_0000 ; +externalref _XmConst char *_XmMsgVisual_0001 ; +externalref _XmConst char *_XmMsgVisual_0002 ; +externalref _XmConst char *_XmMsgXmIm_0000 ; +externalref _XmConst char *_XmMsgResource_0001 ; +externalref _XmConst char *_XmMsgResource_0002 ; +externalref _XmConst char *_XmMsgResource_0003 ; +externalref _XmConst char *_XmMsgResource_0004 ; +externalref _XmConst char *_XmMsgResource_0005 ; +externalref _XmConst char *_XmMsgResource_0006 ; +externalref _XmConst char *_XmMsgResource_0007 ; +externalref _XmConst char *_XmMsgResource_0008 ; +externalref _XmConst char *_XmMsgResource_0009 ; +externalref _XmConst char *_XmMsgResource_0010 ; +externalref _XmConst char *_XmMsgResource_0011 ; +externalref _XmConst char *_XmMsgResource_0012 ; +externalref _XmConst char *_XmMsgResource_0013 ; +externalref _XmConst char *_XmMsgGeoUtils_0000 ; +externalref _XmConst char *_XmMsgGeoUtils_0001 ; +externalref _XmConst char *_XmMsgGeoUtils_0002 ; +externalref _XmConst char *_XmMsgDropSMgrI_0001 ; +externalref _XmConst char *_XmMsgDropSMgrI_0002 ; +externalref _XmConst char *_XmMsgDropSMgrI_0003 ; +externalref _XmConst char *_XmMsgDragC_0001 ; +externalref _XmConst char *_XmMsgDragC_0002 ; +externalref _XmConst char *_XmMsgDragC_0003 ; +externalref _XmConst char *_XmMsgDragC_0004 ; +externalref _XmConst char *_XmMsgDragC_0005 ; +externalref _XmConst char *_XmMsgDragC_0006 ; +externalref _XmConst char *_XmMsgDropSMgr_0001 ; +externalref _XmConst char *_XmMsgDropSMgr_0002 ; +externalref _XmConst char *_XmMsgDropSMgr_0003 ; +externalref _XmConst char *_XmMsgDropSMgr_0004 ; +externalref _XmConst char *_XmMsgDropSMgr_0005 ; +externalref _XmConst char *_XmMsgDropSMgr_0006 ; +externalref _XmConst char *_XmMsgDropSMgr_0007 ; +externalref _XmConst char *_XmMsgDropSMgr_0008 ; +externalref _XmConst char *_XmMsgDropSMgr_0009 ; +externalref _XmConst char *_XmMsgDropSMgr_0010 ; +externalref _XmConst char *_XmMsgDisplay_0001 ; +externalref _XmConst char *_XmMsgDisplay_0002 ; +externalref _XmConst char *_XmMsgDisplay_0003 ; +externalref _XmConst char *_XmMsgRepType_0000 ; +externalref _XmConst char *_XmMsgRepType_0001 ; +externalref _XmConst char *_XmMsgRepType_0002 ; +externalref _XmConst char *_XmMsgMotif_0000 ; +externalref _XmConst char *_XmMsgMotif_0001 ; +externalref _XmConst char *_XmMsgXmRenderT_0000 ; +externalref _XmConst char *_XmMsgXmRenderT_0001 ; +externalref _XmConst char *_XmMsgXmRenderT_0002 ; +externalref _XmConst char *_XmMsgXmRenderT_0003 ; +externalref _XmConst char *_XmMsgXmRenderT_0004 ; +externalref _XmConst char *_XmMsgXmRenderT_0005 ; +externalref _XmConst char *_XmMsgXmString_0000 ; +externalref _XmConst char *_XmMsgXmTabList_0000 ; +externalref _XmConst char *_XmMsgScrollFrameT_0000 ; +externalref _XmConst char *_XmMsgScrollFrameT_0001 ; +externalref _XmConst char *_XmMsgTransfer_0000 ; +externalref _XmConst char *_XmMsgTransfer_0001 ; +externalref _XmConst char *_XmMsgTransfer_0002 ; +externalref _XmConst char *_XmMsgTransfer_0003 ; +externalref _XmConst char *_XmMsgTransfer_0004 ; +externalref _XmConst char *_XmMsgTransfer_0005 ; +externalref _XmConst char *_XmMsgTransfer_0006 ; +externalref _XmConst char *_XmMsgTransfer_0007 ; +externalref _XmConst char *_XmMsgVaSimple_0000 ; +externalref _XmConst char *_XmMsgVaSimple_0001 ; +externalref _XmConst char *_XmMsgVaSimple_0002 ; +externalref _XmConst char *_XmMsgXmSelect_0000 ; +externalref _XmConst char *_XmMsgXmSelect_0001 ; +externalref _XmConst char *_XmMsgXmSelect_0002 ; +externalref _XmConst char *_XmMsgPixConv_0000 ; +externalref _XmConst char *_XmMsgSSpinB_0001 ; +externalref _XmConst char *_XmMsgSSpinB_0002 ; +externalref _XmConst char *_XmMsgSSpinB_0003 ; + +externalref _XmConst char *XME_WARNING; +externalref _XmConst char *_XmMsgDataF_0000 ; +externalref _XmConst char *_XmMsgDataF_0001 ; +externalref _XmConst char *_XmMsgDataF_0002 ; +externalref _XmConst char *_XmMsgDataF_0003 ; +externalref _XmConst char *_XmMsgDataF_0004 ; +externalref _XmConst char *_XmMsgDataF_0005 ; +externalref _XmConst char *_XmMsgDataF_0006 ; +externalref _XmConst char *_XmMsgDataFWcs_0000 ; +externalref _XmConst char *_XmMsgDataFWcs_0001 ; + +#include "XmMsgI.h" + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMessagesI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/MultiList.h b/libXm/osx/Xm/MultiList.h new file mode 100644 index 0000000..f416502 --- /dev/null +++ b/libXm/osx/Xm/MultiList.h @@ -0,0 +1,189 @@ +#ifndef _XmMultiList_h_ +#define _XmMultiList_h_ + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmANY_COLUMN -1 + +externalref WidgetClass xmMultiListWidgetClass; + +typedef struct _XmMultiListClassRec *XmMultiListWidgetClass; +typedef struct _XmMultiListRec *XmMultiListWidget; + +typedef struct _XmMultiListRowInfo { + /* + * Used by the XmIList widget. + */ + XmString * values; /* The array of column strings */ + Pixmap pixmap; /* the mini-icon pixmaps. */ + Boolean selected; /* Is this row selected. */ + + /* + * Provided for the convience of the application programmer. + */ + short *sort_id; + XtPointer data; + + /* + * Private to the XmIList widget (do not modify these). + */ + short pix_width; /* width of the pixmap. */ + short pix_height; /* height of the pixmap. */ + short height; /* height of the row */ + Boolean old_sel_state; /* previous select state. */ + short pix_depth; /* height of the pixmap. */ +} XmMultiListRowInfo; + +typedef struct _XmMultiListCallbackStruct { + int reason; /* Why was callback called? */ + XEvent *event; /* The X Event associated with find button press... */ + String string; /* The search string used to do find */ + int column; /* The column index into row values */ + XmMultiListRowInfo *row; /* The row info structure of the matching row */ + wchar_t *wc_string; /* The search wcs string used to do find */ +} XmMultiListCallbackStruct; + +typedef int (*Xm18SortFunction) \ + (short, const XmMultiListRowInfo *, const XmMultiListRowInfo *); + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +/* + * Function Name: XmMultiListGetSelectedRows + * Description: Takes an Extended List and returns a NULL terminated array + * of pointers to selected rows from the internal list + * Arguments: w - the extended list widget + * Returns: XmMultiListRowInfo ** + */ + +XmMultiListRowInfo ** XmMultiListGetSelectedRows(Widget w); + +/* Function Name: XmCreateExtended18List + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +extern Widget XmCreateMultiList(Widget w, + char *name, + ArgList args, + Cardinal num_args); + +extern Widget XmCreateMultiList(Widget w, + char *name, + ArgList args, + Cardinal num_args); + +extern Widget XmVaCreateMultiList( + Widget parent, + char *name, + ...); + +extern Widget XmVaCreateManagedMultiList( + Widget parent, + char *name, + ...); + +/* Function Name: XmMultiListUnselectAllItems + * Description: Unselects all rows + * Arguments: w - the ilist widget. + * Returns: none + */ +extern void XmMultiListUnselectAllItems(Widget w); + +/* Function Name: XmMultiListUnselectItem + * Description: Unselects the row passed in + * Arguments: w - the ilist widget. + * row_info - ptr to the row passed in + * Returns: none + */ +extern void XmMultiListUnselectItem(Widget w, XmMultiListRowInfo *row_info); + +/* Function Name: XmMultiListToggleRow + * Description: Toggles the selection state of a specified row + * Arguments: w - the extended list widget + * Returns: none + */ +extern void XmMultiListToggleRow(Widget w, short row); + +/* Function Name: XmMultiListSelectItems + * Description: Set selection state by matching column entries to XmString + * Arguments: w - the extended list widget + * item - XmString to use as selection key + * column - column number (0 - N) to match (or XmANY_COLUMN) + * notify - if True, call XmNsingleSelectionCallback + * Returns: none + */ +extern void +XmMultiListSelectItems(Widget w, + XmString item, + int column, + Boolean notify); + +/* Function Name: XmMultiListDeselectItems + * Description: Set selection state by matching column entries to XmString + * Arguments: w - the extended list widget + * item - XmString to use as selection key + * column - column number (0 - N) to match (or XmANY_COLUMN) + * Returns: none + */ +extern void XmMultiListDeselectItems(Widget w, + XmString item, + int column); + +/* Function Name: XmMultiListSelectAllItems + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * notify - if True, call XmNsingleSelectionCallback for each + * Returns: none + */ +extern void XmMultiListSelectAllItems(Widget w, Boolean notify); + +/* Function Name: XmMultiListSelectRow + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * row - the row to select + * notify - if True, call XmNsingleSelectionCallback + * Returns: none + */ +extern void XmMultiListSelectRow(Widget w, int row, Boolean notify); + +/* Function Name: XmMultiListDeselectRow + * Description: Set selection state on all rows + * Arguments: w - the extended list widget + * row - the row to select + * Returns: none + */ +extern void XmMultiListDeselectRow(Widget w, int row); + +/* + * Function Name: XmMultiListGetSelectedRowArray + * Description: Takes an Extended List and returns a NULL terminated array + * of pointers to selected rows from the internal list + * Arguments: w - the extended list widget + * num_rows - pointer to the number of rows + * Returns: array of integer (selected) row numbers + */ +extern int *XmMultiListGetSelectedRowArray(Widget w, int *num_rows); + +/* Function Name: XmMultiListMakeRowVisible + * Description: Shifts the visible extended list rows as desired + * Arguments: w - the extended list widget + * row - the row number wished to be made visible + * Returns: none + */ +extern void XmMultiListMakeRowVisible(Widget w, int row); + +#if defined(__cplusplus) +} +#endif + +#endif /* _XmMultiList_h_ */ diff --git a/libXm/osx/Xm/MultiListP.h b/libXm/osx/Xm/MultiListP.h new file mode 100644 index 0000000..db723df --- /dev/null +++ b/libXm/osx/Xm/MultiListP.h @@ -0,0 +1,284 @@ +#ifndef _XmMultiListP_h_ +#define _XmMultiListP_h_ + +#include +#include + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +/* + * IList Stuff. + */ + +#define XmMultiList_DEFAULT_VISIBLE_COUNT 5 /* XmNvisibleItemCount */ + +#define XmMultiListIndex (XmManagerIndex + 1) +#define XmI18ListIndex (XmPrimitiveIndex + 1) + +#define XmI18List_selection_policy(w) (((XmI18ListWidget)(w))->ilist.selection_policy) +#define XmI18List_num_columns(w) (((XmI18ListWidget)(w))->ilist.num_columns) +#define XmI18List_column_titles(w) (((XmI18ListWidget)(w))->ilist.column_titles) +#define XmI18List_num_rows(w) (((XmI18ListWidget)(w))->ilist.num_rows) +#define XmI18List_row_data(w) (((XmI18ListWidget)(w))->ilist.row_data) +#define XmI18List_first_col_pixmaps(w) (((XmI18ListWidget)(w))->ilist.first_col_pixmaps) +#define XmI18List_font_list(w) (((XmI18ListWidget)(w))->ilist.font_list) +#define XmI18List_v_bar(w) (((XmI18ListWidget)(w))->ilist.v_bar) +#define XmI18List_h_bar(w) (((XmI18ListWidget)(w))->ilist.h_bar) +#define XmI18List_first_row(w) (((XmI18ListWidget)(w))->ilist.first_row) +#define XmI18List_first_col(w) (((XmI18ListWidget)(w))->ilist.first_col) +#define XmI18List_double_click(w) (((XmI18ListWidget)(w))->ilist.double_click) +#define XmI18List_single_select(w) (((XmI18ListWidget)(w))->ilist.single_select) +#define XmI18List_selected_header(w) (((XmI18ListWidget)(w))->ilist.selected_header) +#define XmI18List_sort_functions(w) (((XmI18ListWidget)(w))->ilist.sort_functions) +#define XmI18List_string_direction(w) (((XmI18ListWidget)(w))->ilist.string_direction) +#define XmI18List_alignment(w) (((XmI18ListWidget)(w))->ilist.alignment) +#define XmI18List_column_widths(w) (((XmI18ListWidget)(w))->ilist.column_widths) +#define XmI18List_end(w) (((XmI18ListWidget)(w))->ilist.end) +#define XmI18List_anchor(w) (((XmI18ListWidget)(w))->ilist.anchor) +#define XmI18List_sep_y(w) (((XmI18ListWidget)(w))->ilist.sep_y) +#define XmI18List_title_row_height(w) (((XmI18ListWidget)(w))->ilist.title_row_height) +#define XmI18List_row_height(w) (((XmI18ListWidget)(w))->ilist.row_height) +#define XmI18List_gc(w) (((XmI18ListWidget)(w))->ilist.gc) +#define XmI18List_rev_gc(w) (((XmI18ListWidget)(w))->ilist.rev_gc) +#define XmI18List_stippled_gc(w) (((XmI18ListWidget)(w))->ilist.stippled_gc) +#define XmI18List_stippled_rev_gc(w) (((XmI18ListWidget)(w))->ilist.stippled_rev_gc) +#define XmI18List_inv_gc(w) (((XmI18ListWidget)(w))->ilist.inv_gc) +#define XmI18List_state(w) (((XmI18ListWidget)(w))->ilist.state) +#define XmI18List_timeout(w) (((XmI18ListWidget)(w))->ilist.timeout) +#define XmI18List_working_row(w) (((XmI18ListWidget)(w))->ilist.working_row) +#define XmI18List_working_col(w) (((XmI18ListWidget)(w))->ilist.working_col) +#define XmI18List_time(w) (((XmI18ListWidget)(w))->ilist.time) +#define XmI18List_left_loc(w) (((XmI18ListWidget)(w))->ilist.left_loc) +#define XmI18List_search_column(w) (((XmI18ListWidget)(w))->ilist.search_column) +#define XmI18List_visible_rows(w) (((XmI18ListWidget)(w))->ilist.visible_rows) +#define XmI18List_new_visual_style(w) (((XmI18ListWidget)(w))->ilist.new_visual_style) +#define XmI18List_entry_background_pixel(w) (((XmI18ListWidget)(w))->ilist.entry_background_pixel) +#define XmI18List_entry_background_use(w) (((XmI18ListWidget)(w))->ilist.entry_background_use) +#define XmI18List_entry_background_gc(w) (((XmI18ListWidget)(w))->ilist.entry_background_gc) +#define XmI18List_entry_background_fill_gc(w) (((XmI18ListWidget)(w))->ilist.entry_background_fill_gc) +#define XmI18List_entry_background_rev_gc(w) (((XmI18ListWidget)(w))->ilist.entry_background_rev_gc) +#define XmI18List_entry_background_stippled_gc(w) (((XmI18ListWidget)(w))->ilist.entry_background_stippled_gc) +#define XmI18List_entry_background_stippled_rev_gc(w) (((XmI18ListWidget)(w))->ilist.entry_background_stippled_rev_gc) +#define XmI18List_entry_background_inv_gc(w) (((XmI18ListWidget)(w))->ilist.entry_background_inv_gc) + +#define XmMultiList_title(w) (((XmMultiListWidget)(w))->ext_list.title) +#define XmMultiList_find_label(w) \ + (((XmMultiListWidget)(w))->ext_list.find_label) +#define XmMultiList_double_click(w) \ + (((XmMultiListWidget)(w))->ext_list.double_click) +#define XmMultiList_single_select(w) \ + (((XmMultiListWidget)(w))->ext_list.single_select) +#define XmMultiList_show_find(w) \ + (((XmMultiListWidget)(w))->ext_list.show_find) +#define XmMultiList_title_wid(w) \ + (((XmMultiListWidget)(w))->ext_list.title_wid) +#define XmMultiList_frame(w) (((XmMultiListWidget)(w))->ext_list.frame) +#define XmMultiList_ilist(w) (((XmMultiListWidget)(w))->ext_list.ilist) +#define XmMultiList_v_bar(w) (((XmMultiListWidget)(w))->ext_list.v_bar) +#define XmMultiList_h_bar(w) (((XmMultiListWidget)(w))->ext_list.h_bar) +#define XmMultiList_find(w) (((XmMultiListWidget)(w))->ext_list.find) +#define XmMultiList_find_text(w) \ + (((XmMultiListWidget)(w))->ext_list.find_text) +#define XmMultiList_last_search(w) \ + (((XmMultiListWidget)(w))->ext_list.last_search) +#define XmMultiList_item_found(w) \ + (((XmMultiListWidget)(w))->ext_list.item_found) +#define XmMultiList_not_found(w) \ + (((XmMultiListWidget)(w))->ext_list.not_found) +#define XmMultiList_visible_rows(w) \ + (((XmMultiListWidget)(w))->ext_list.visible_rows) +#define XmMultiList_title_string(w) \ + (((XmMultiListWidget)(w))->ext_list.title_string) + +/* + * IList widget definitions. + */ + +/* I18List struct passed to Convert proc for drag and drop */ +typedef struct _XmI18ListDragConvertStruct +{ + Widget w; + XmString *strings; + int num_items; + Pixmap pixmap; +} XmI18ListDragConvertStruct; + +typedef struct _I18ListClassPart { + XtPointer extension; /* Just in case we need it later. */ +} I18ListClassPart; + +typedef struct _XmI18ListClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive; + I18ListClassPart ilist_class; +} XmI18ListClassRec; + +externalref XmI18ListClassRec xmI18ListClassRec; + +typedef struct _XmI18ListPart { + /* + * Resources + */ + + unsigned char selection_policy; /* selection mode - kat 12-28-90 */ + short num_columns; /* number of columns in the list. */ + XmString * column_titles; /* title for each column. */ + short num_rows; /* number of rows in the list. */ + XmMultiListRowInfo *row_data;/* Data to put into each column. */ + Boolean first_col_pixmaps; /* Should we put mini_icons in the first + column of each entry? */ + XmFontList font_list; /* This widget's font list. */ + + Widget v_bar, h_bar; /* Scrollbars that may be used + to scroll this widget. */ + + short first_row; /* which row is at the top of the display. */ + short first_col; /* which column is at the far left. */ + + XtCallbackList double_click; /* The double click callback list. */ + XtCallbackList single_select; /*The single click callback list. */ + + short selected_header; /* The currently selected header. */ + + Xm18SortFunction *sort_functions; /* The client supplied sort functions */ + + unsigned char string_direction; + unsigned char alignment; + + /* + * Private State + */ + + short * column_widths; /* Width of each column. */ + short end; /* The non-anchor end point. */ + short anchor; /* The anchor point for the extended + selection. */ + + int sep_y; /*location of the top of the separator line.*/ + + short title_row_height; /* height of title row */ + short row_height; /* height of all other data rows */ + + GC gc; /* The graphics context for normal text. */ + GC rev_gc; /* The graphics context for inverted text. */ + GC stippled_gc; /* The graphics context for normal text. */ + GC stippled_rev_gc; /* The graphics context for inverted text. */ + GC inv_gc; /* The graphics context for inverting areas. */ + + unsigned short state; /* The state of this widget. */ + XtIntervalId timeout; /* The mulit - click timout. */ + + short working_row, working_col; /* A Working row and column. */ + Time time; /*The server time of the last button click. */ + + int left_loc; /* left margin in pixels. */ + + short search_column; /* added for I18List Find support */ + + int visible_rows; /* Visible item (row) count */ + + Boolean new_visual_style; + + Pixel entry_background_pixel; + Boolean entry_background_use; + GC entry_background_gc; + GC entry_background_fill_gc; + GC entry_background_stippled_gc; + GC entry_background_stippled_rev_gc; + GC entry_background_inv_gc; + GC entry_background_rev_gc; + + Boolean check_set_render_table; /* used in CheckSetRenderTable */ + + XmI18ListDragConvertStruct * drag_conv; +} XmI18ListPart; + +typedef struct _XmI18ListRec { + CorePart core; + XmPrimitivePart primitive; + XmI18ListPart ilist; +} XmI18ListRec; + +/* + * Extended List. + */ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} XmMultiListClassPart; + +typedef struct _XmMultiListClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmMultiListClassPart ext_list_class; +} XmMultiListClassRec; + +typedef struct { + /* resources */ + + XmString title; /* Title for the list (backwards compatible) */ + XmString find_label; /* label for Find button */ + + XtCallbackList double_click; /* The double click callbacks. */ + XtCallbackList single_select; /* The single click callbacks. -kat */ + + Boolean show_find; /* whether to display the Find button and textF */ + + /* private state */ + + Widget title_wid; /* The list title widget. */ + Widget frame; /* Frame to display list into. */ + Widget ilist; /* The internal list widget. */ + Widget v_bar, h_bar; /* The scrollbars. */ + Widget find, find_text; /* Widgets used for a find. */ + + String last_search; + + XtCallbackList item_found; /* Called when find succeeds */ + XtCallbackList not_found; /* Called when find doesn't succeed */ + + int visible_rows; /* visible items (mirrored in XmI18ListPart) */ + XmString title_string; /* (preferred use) Title for the list */ + + Boolean check_set_select_callback; +} XmMultiListPart; + +typedef struct _XmMultiListRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmMultiListPart ext_list; +} XmMultiListRec; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +XmMultiListRowInfo ** XmI18ListGetSelectedRows(Widget); + +void Xm18IListUnselectItem(Widget, XmMultiListRowInfo *); + +void Xm18IListUnselectAllItems(Widget); + +void XmI18ListToggleRow(Widget , short); + +typedef struct _XmI18ListClassRec *XmI18ListWidgetClass; +typedef struct _XmI18ListRec *XmI18ListWidget; + +extern XmMultiListClassRec xmMultiListClassRec; + +extern XmI18ListClassRec xiI18ListClassRec; +extern WidgetClass xmI18ListWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#endif /* _XmMultiListP_h_ */ diff --git a/libXm/osx/Xm/MwmUtil.h b/libXm/osx/Xm/MwmUtil.h new file mode 100644 index 0000000..03789a8 --- /dev/null +++ b/libXm/osx/Xm/MwmUtil.h @@ -0,0 +1,249 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: MwmUtil.h /main/11 1995/08/18 17:42:47 drk $ */ +/* +* (c) Copyright 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmMwmUtil_h +#define _XmMwmUtil_h + +#include /* for Window typedefs */ +#include /* for protocol typedefs */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Contents of the _MWM_HINTS property. + */ + +typedef struct +{ + /* These correspond to XmRInt resources. (VendorSE.c) */ + int flags; + int functions; + int decorations; + int input_mode; + int status; +} MotifWmHints; + +typedef MotifWmHints MwmHints; + +/* bit definitions for MwmHints.flags */ +#define MWM_HINTS_FUNCTIONS (1L << 0) +#define MWM_HINTS_DECORATIONS (1L << 1) +#define MWM_HINTS_INPUT_MODE (1L << 2) +#define MWM_HINTS_STATUS (1L << 3) + +/* bit definitions for MwmHints.functions */ +#define MWM_FUNC_ALL (1L << 0) +#define MWM_FUNC_RESIZE (1L << 1) +#define MWM_FUNC_MOVE (1L << 2) +#define MWM_FUNC_MINIMIZE (1L << 3) +#define MWM_FUNC_MAXIMIZE (1L << 4) +#define MWM_FUNC_CLOSE (1L << 5) + +/* bit definitions for MwmHints.decorations */ +#define MWM_DECOR_ALL (1L << 0) +#define MWM_DECOR_BORDER (1L << 1) +#define MWM_DECOR_RESIZEH (1L << 2) +#define MWM_DECOR_TITLE (1L << 3) +#define MWM_DECOR_MENU (1L << 4) +#define MWM_DECOR_MINIMIZE (1L << 5) +#define MWM_DECOR_MAXIMIZE (1L << 6) + + +/* definitions for running automated tests */ + + +#define WINDOW_MINIMIZE_INFO 0 +#define WINDOW_MAXIMIZE_INFO 1 +#define WINDOW_MOVE_INFO 2 +#define WINDOW_RAISE_INFO 3 +#define WINDOW_RESIZE_NORTH_INFO 4 +#define WINDOW_RESIZE_SOUTH_INFO 5 +#define WINDOW_RESIZE_EAST_INFO 6 +#define WINDOW_RESIZE_WEST_INFO 7 +#define WINDOW_RESIZE_NORTHEAST_INFO 8 +#define WINDOW_RESIZE_NORTHWEST_INFO 9 +#define WINDOW_RESIZE_SOUTHEAST_INFO 10 +#define WINDOW_RESIZE_SOUTHWEST_INFO 11 +#define WINDOW_MENU_ITEM_SELECT_INFO 12 +#define WINDOW_DEICONIFY_INFO 13 +#define WINDOW_MENU_POST_INFO 14 +#define WINDOW_FOCUS_INFO 15 +#define WINDOW_MENU_UNPOST_INFO 16 +#define WINDOW_MENU_ITEM_CHECK_INFO 17 +#define ICON_MOVE_INFO 18 +#define ICON_MENU_POST_INFO 19 +#define ICON_MENU_UNPOST_INFO 20 +#define ICON_MENU_ITEM_SELECT_INFO 21 + +#define WM_NORTHWEST 0 +#define WM_NORTH 1 +#define WM_NORTHEAST 2 +#define WM_WEST 3 +#define WM_EAST 4 +#define WM_SOUTHWEST 5 +#define WM_SOUTH 6 +#define WM_SOUTHEAST 7 + +#define INVALID -1 +#define MAX_MENU_ITEMS 20 +#define MAX_NAME_LEN 95 + + +/* values for MwmHints.input_mode */ +#define MWM_INPUT_MODELESS 0 +#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1 +#define MWM_INPUT_SYSTEM_MODAL 2 +#define MWM_INPUT_FULL_APPLICATION_MODAL 3 + +/* bit definitions for MwmHints.status */ +#define MWM_TEAROFF_WINDOW (1L << 0) + +/* + * The following is for compatibility only. It use is deprecated. + */ +#define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL + + +/* + * Contents of the _MWM_INFO property. + */ + +typedef struct +{ + long flags; + Window wm_window; +} MotifWmInfo; + +typedef MotifWmInfo MwmInfo; + +/* bit definitions for MotifWmInfo .flags */ +#define MWM_INFO_STARTUP_STANDARD (1L << 0) +#define MWM_INFO_STARTUP_CUSTOM (1L << 1) + + + +/* + * Definitions for the _MWM_HINTS property. + */ + +typedef struct +{ + /* 32-bit property items are stored as long on the client (whether + * that means 32 bits or 64). XChangeProperty handles the conversion + * to the actual 32-bit quantities sent to the server. + */ + unsigned long flags; + unsigned long functions; + unsigned long decorations; + long inputMode; + unsigned long status; +} PropMotifWmHints; + +typedef PropMotifWmHints PropMwmHints; + + +/* number of elements of size 32 in _MWM_HINTS */ +#define PROP_MOTIF_WM_HINTS_ELEMENTS 5 +#define PROP_MWM_HINTS_ELEMENTS PROP_MOTIF_WM_HINTS_ELEMENTS + +/* atom name for _MWM_HINTS property */ +#define _XA_MOTIF_WM_HINTS "_MOTIF_WM_HINTS" +#define _XA_MWM_HINTS _XA_MOTIF_WM_HINTS + +/* + * Definitions for the _MWM_MESSAGES property. + */ + +#define _XA_MOTIF_WM_MESSAGES "_MOTIF_WM_MESSAGES" +#define _XA_MWM_MESSAGES _XA_MOTIF_WM_MESSAGES + +/* atom that enables client frame offset messages */ +#define _XA_MOTIF_WM_OFFSET "_MOTIF_WM_OFFSET" + +/* + * Definitions for the _MWM_MENU property. + */ + +/* atom name for _MWM_MENU property */ +#define _XA_MOTIF_WM_MENU "_MOTIF_WM_MENU" +#define _XA_MWM_MENU _XA_MOTIF_WM_MENU + + +/* + * Definitions for the _MWM_INFO property. + */ + +typedef struct +{ + /* 32-bit property items are stored as long on the client (whether + * that means 32 bits or 64). XChangeProperty handles the conversion + * to the actual 32-bit quantities sent to the server. + */ + long flags; + Window wmWindow; +} PropMotifWmInfo; + +typedef PropMotifWmInfo PropMwmInfo; + + +/* number of elements of size 32 in _MWM_INFO */ +#define PROP_MOTIF_WM_INFO_ELEMENTS 2 +#define PROP_MWM_INFO_ELEMENTS PROP_MOTIF_WM_INFO_ELEMENTS + +/* atom name for _MWM_INFO property */ +#define _XA_MOTIF_WM_INFO "_MOTIF_WM_INFO" +#define _XA_MWM_INFO _XA_MOTIF_WM_INFO + + +/* + * Miscellaneous atom definitions + */ + +/* atom for motif input bindings */ +#define _XA_MOTIF_BINDINGS "_MOTIF_BINDINGS" + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmMwmUtil_h */ diff --git a/libXm/osx/Xm/NavigatorT.h b/libXm/osx/Xm/NavigatorT.h new file mode 100644 index 0000000..4a86301 --- /dev/null +++ b/libXm/osx/Xm/NavigatorT.h @@ -0,0 +1,126 @@ +/* $XConsortium: NavigatorT.h /main/5 1995/07/15 20:53:08 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmNavigatorT_H +#define _XmNavigatorT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTnavigator; + +/* Trait structures and typedefs, place typedefs first */ + + +/* this structure is equivalent to an XPoint but in int, + not in Position, which are short */ +typedef struct _TwoDInt { + int x; + int y; +} TwoDIntRec, *TwoDInt; + + +/* this one can be expanded in the future */ +typedef struct _XmNavigatorDataRec { + Mask valueMask ; + Mask dimMask ; + TwoDIntRec value; + TwoDIntRec minimum; + TwoDIntRec maximum; + TwoDIntRec slider_size; + TwoDIntRec increment; + TwoDIntRec page_increment; +} XmNavigatorDataRec, *XmNavigatorData; + +#define NavAllValid (OxFFFF) +#define NavDimMask (1L<<0) +#define NavValue (1L<<1) +#define NavMinimum (1L<<2) +#define NavMaximum (1L<<3) +#define NavSliderSize (1L<<4) +#define NavIncrement (1L<<5) +#define NavPageIncrement (1L<<6) + + + +typedef void (*XmNavigatorMoveCBProc)(Widget nav, + XtCallbackProc moveCB, + XtPointer closure, + Boolean setunset); +typedef void (*XmNavigatorSetValueProc)(Widget nav, + XmNavigatorData nav_data, + Boolean notify); +typedef void (*XmNavigatorGetValueProc)(Widget nav, + XmNavigatorData nav_data); + + + +/* Version 0: initial release. */ + +typedef struct _XmNavigatorTraitRec { + int version; /* 0 */ + XmNavigatorMoveCBProc changeMoveCB; + XmNavigatorSetValueProc setValue; + XmNavigatorGetValueProc getValue; +} XmNavigatorTraitRec, *XmNavigatorTrait; + + +#define NavigDimensionX (1L<<0) +#define NavigDimensionY (1L<<1) + +/* convenience Macros */ +#define ACCESS_DIM(mask,field) ((mask & NavigDimensionX)?(field.x):(field.y)) + +#define ASSIGN_DIM(mask,field,val) \ + { \ + if (mask & NavigDimensionX) \ + (field.x)=(val); \ + else \ + (field.y)=(val); \ + } + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmNavigatorT_H */ diff --git a/libXm/osx/Xm/Notebook.h b/libXm/osx/Xm/Notebook.h new file mode 100644 index 0000000..eed76c1 --- /dev/null +++ b/libXm/osx/Xm/Notebook.h @@ -0,0 +1,115 @@ +/* $XConsortium: Notebook.h /main/5 1995/07/15 20:53:41 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmNotebook_h +#define _XmNotebook_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmNotebookWidgetClass; + +typedef struct _XmNotebookClassRec *XmNotebookWidgetClass; +typedef struct _XmNotebookRec *XmNotebookWidget; + + +/************************************************************************ + * Notebook Defines + ************************************************************************/ + +/* XmNotebookPageStatus */ +typedef enum +{ + XmPAGE_FOUND, /* page widget found */ + XmPAGE_INVALID, /* page number out of the range */ + XmPAGE_EMPTY, /* no page widget found */ + XmPAGE_DUPLICATED /* there are more than one page widgets */ +} XmNotebookPageStatus; + +/* Notebook page information structure */ +typedef struct +{ + int page_number; + Widget page_widget; + Widget status_area_widget; + Widget major_tab_widget; + Widget minor_tab_widget; +} XmNotebookPageInfo; + + +/************************************************************************ + * Public Functions + ************************************************************************/ + +#ifndef XmIsNotebook +#define XmIsNotebook(w) XtIsSubclass((w), xmNotebookWidgetClass) +#endif + +extern Widget XmCreateNotebook( + Widget parent, + String name, + ArgList arglist, + Cardinal argcount); + +extern XmNotebookPageStatus XmNotebookGetPageInfo( + Widget notebook, + int page_number, + XmNotebookPageInfo *page_info) ; + +extern Widget XmVaCreateNotebook( + Widget parent, + char *name, + ...); + +extern Widget XmVaCreateManagedNotebook( + Widget parent, + char *name, + ...); + + +#ifdef __cplusplus +} +#endif + +#endif /* _XmNotebook_h */ + diff --git a/libXm/osx/Xm/NotebookP.h b/libXm/osx/Xm/NotebookP.h new file mode 100644 index 0000000..87e724d --- /dev/null +++ b/libXm/osx/Xm/NotebookP.h @@ -0,0 +1,212 @@ +/* $XConsortium: NotebookP.h /main/4 1995/07/15 20:53:46 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmNotebookP_h +#define _XmNotebookP_h + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Notebook's constraint info. fields */ +typedef struct _XmNotebookConstraintPart +{ + /* resources */ + int page_number; /* page number */ + unsigned char child_type; /* notebook child type */ + Boolean resizable; /* is this child resizable? */ + + /* private variables */ + Boolean active; /* True if the child is active */ +} XmNotebookConstraintPart, *XmNotebookConstraint; + +typedef struct _XmNotebookConstraintRec +{ + XmManagerConstraintPart manager; + XmNotebookConstraintPart notebook; +} XmNotebookConstraintRec, *XmNotebookConstraintPtr; + + +/* New fields for the Notebook widget class record */ +typedef struct _XmNotebookClassPart +{ + XtPointer extension; +} XmNotebookClassPart; + + +/* Full class record declaration */ +typedef struct _NotebookClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmNotebookClassPart notebook_class; +} XmNotebookClassRec; + +externalref XmNotebookClassRec xmNotebookClassRec; + + +/* New fields for the Notebook widget instance record */ +typedef struct _XmNotebookPart +{ + /* resources */ + int current_page_number; /* the current page number */ + int first_page_number; /* the first page number */ + int last_page_number; /* the last page number */ + unsigned char orientation; /* notebook orientation */ + unsigned char back_page_pos; /* position of back pages */ + Cardinal back_page_number; /* the of back page lines */ + Dimension back_page_size; /* the thickness of back pages */ + Pixel back_page_foreground; /* foreground color for bk pgs */ + Pixel back_page_background; /* background color for bk pgs */ + Pixel frame_background; /* background color for frame */ + unsigned char binding_type; /* binding type */ + Pixmap binding_pixmap; /* pixmap for the binding */ + Pixmap spiral_pixmap; /* pixmap for the spiral binding */ + Dimension binding_width; /* the width of the binding */ + Dimension margin_width; /* horizontal margin between widgets */ + Dimension margin_height; /* vertical margin between widgets */ + Dimension major_spacing; /* gap between major tabs */ + Dimension minor_spacing; /* gap between minor tabs */ + Dimension shadow_thickness; /* notebook frame shadow thickness */ + XtCallbackList page_change_callback;/* the page change callback */ + + /* child widgets */ + Widget scroller; /* the page scroller widget */ + Widget scroller_child; /* TextF child of def page scroller */ + Widget next_major; /* next major tab scroll button */ + Widget prev_major; /* prev major tab scroll button */ + Widget next_minor; /* next minor tab scroll button */ + Widget prev_minor; /* prev minor tab scroll button */ + + /* preferred children sizes */ + Dimension real_binding_width; /* real binding width */ + Dimension real_back_page_number; /* real back page number */ + Dimension page_width; /* width of page widgets */ + Dimension page_height; /* height of page widgets */ + Dimension status_width; /* width of the status areas */ + Dimension status_height; /* height of the status areas */ + Dimension major_width; /* width of major tabs */ + Dimension major_height; /* height of major tabs */ + Dimension minor_width; /* width of minor tabs */ + Dimension minor_height; /* height of minor tabs */ + Dimension scroller_width; /* width of the page scroller */ + Dimension scroller_height; /* height of the page scroller */ + Dimension major_scroller_width; /* width of major scrollers */ + Dimension major_scroller_height; /* height of major scroller */ + Dimension minor_scroller_width; /* width of minor scrollers */ + Dimension minor_scroller_height; /* height of minor scrollers */ + Dimension frame_width; /* width of the frame */ + Dimension frame_height; /* height of the frame */ + + /* for layouting tabs */ + Widget first_major; /* the first major tab */ + Widget old_top_major; /* the old top major tab */ + Widget top_major; /* the top major tab */ + Widget last_major; /* the last major tab */ + Widget first_minor; /* the first minor tab */ + Widget old_top_minor; /* the old top minor tab */ + Widget top_minor; /* the top minor tab */ + Widget last_minor; /* the last minor tab */ + Widget constraint_child; /* changing geom during ConstraintSV */ + + /* shadow thickness state for current page major and minor tab */ + Dimension major_shadow_thickness; /* joined major tab shadow thickness */ + Dimension minor_shadow_thickness; /* joined minor tab shadow thickness */ + Widget major_shadow_child; /* saved shadow thickness tab */ + Widget minor_shadow_child; /* saved shadow thickness tab */ + Boolean in_setshadow; /* setting tab shadow thickness */ + + /* extra position information */ + unsigned char major_pos; /* position of major tabs */ + unsigned char minor_pos; /* position of minor tabs */ + unsigned char binding_pos; /* binding position */ + + /* other misc. variables */ + unsigned char which_tab; /* currently active tab type */ + int last_alloc_num; /* lastly allocated page number */ + unsigned char scroller_status; /* status of the page scroller */ + unsigned short need_scroller; /* need for tab scrollers */ + Boolean dynamic_last_page_num; /* True if using dynamic last page# */ + Boolean in_callback; /* True if processing a callback */ + GC back_page_gc; /* GC for drawing backpages */ + GC frame_gc; /* GC for drawing frame */ + GC binding_gc; /* GC for drawing binding */ + GC foreground_gc; /* GC for drawing foreground */ + GC background_gc; /* GC for drawing background */ + + Boolean first_change_managed; /* flags 1st call to ChangeManaged */ + XmScrollFrameData scroll_frame_data; /* data for ScrollFrame trait */ +} XmNotebookPart; + + +/* Full instance record declaration */ +typedef struct _XmNotebookRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmNotebookPart notebook; +} XmNotebookRec; + + +/****************************************************************************** + * * + * constants & useful macros * + * * + ******************************************************************************/ + +/* internal child types, must not conflict with XmRNBChildType enum */ +#define XmMAJOR_TAB_SCROLLER 12 +#define XmMINOR_TAB_SCROLLER 13 +#define XmTAB_SCROLLER 14 + +#ifdef __cplusplus +} +#endif + +#endif /* _XmNotebookP_h */ + diff --git a/libXm/osx/Xm/Outline.h b/libXm/osx/Xm/Outline.h new file mode 100644 index 0000000..179b196 --- /dev/null +++ b/libXm/osx/Xm/Outline.h @@ -0,0 +1,67 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmOutline_h +#define _XmOutline_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmOutlineClassRec *XmOutlineWidgetClass; +typedef struct _XmOutlineRec *XmOutlineWidget; + +/************************************************************ +* MACROS +*************************************************************/ + +/************************************************************ +* GLOBAL FUNCTION DECLARATIONS +*************************************************************/ + +/* Function Name: XmCreateOutline + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateOutline( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmOutlineWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _Outline_h */ diff --git a/libXm/osx/Xm/OutlineP.h b/libXm/osx/Xm/OutlineP.h new file mode 100644 index 0000000..22ae3a2 --- /dev/null +++ b/libXm/osx/Xm/OutlineP.h @@ -0,0 +1,173 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmOutlineP_h +#define _XmOutlineP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +/************************************************************ +* MACROS +*************************************************************/ + +#define XmOutline_top_node_of_display(w) (((XmOutlineWidget)(w))->outline.top_node_of_display) +#define XmOutline_max_width(w) (((XmOutlineWidget)(w))->outline.max_width) +#define XmOutline_max_widget_width(w) (((XmOutlineWidget)(w))->outline.max_widget_width) +#define XmOutline_child_op_list(w) (((XmOutlineWidget)(w))->outline.child_op_list) +#define XmOutline_ul_point(w) (((XmOutlineWidget)(w))->outline.ul_point) +#define XmOutline_lr_point(w) (((XmOutlineWidget)(w))->outline.lr_point) +#define XmOutline_draw_gc(w) (((XmOutlineWidget)(w))->outline.draw_gc) + +#define XmOutline_indent_space(w) (((XmOutlineWidget)(w))->outline.indent_space) +#define XmOutline_constrain_width(w) (((XmOutlineWidget)(w))->outline.constrain_width) +#define XmOutline_connect_nodes(w) (((XmOutlineWidget)(w))->outline.connect_nodes) + + + +#define XmOutlineC_top_node_of_display(c) (((XmOutlineConstraintPtr)(c))->outline.top_node_of_display) +#define XmOutlineC_widget_x(c) (((XmOutlineConstraintPtr)(c))->outline.widget_x) +#define XmOutlineC_open_close_x(c) (((XmOutlineConstraintPtr)(c))->outline.open_close_x) +#define XmOutlineC_height(c) (((XmOutlineConstraintPtr)(c))->outline.height) +#define XmOutlineC_new_x(c) (((XmOutlineConstraintPtr)(c))->outline.new_x) +#define XmOutlineC_new_y(c) (((XmOutlineConstraintPtr)(c))->outline.new_y) +#define XmOutlineC_oc_new_x(c) (((XmOutlineConstraintPtr)(c))->outline.oc_new_x) +#define XmOutlineC_oc_new_y(c) (((XmOutlineConstraintPtr)(c))->outline.oc_new_y) +#define XmOutlineC_map(c) (((XmOutlineConstraintPtr)(c))->outline.map) +#define XmOutlineC_unmap(c) (((XmOutlineConstraintPtr)(c))->outline.unmap) +#define XmOutlineC_move(c) (((XmOutlineConstraintPtr)(c))->outline.move) + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef void (*XmOutlineCalcLocationProc)(Widget, Boolean); +typedef int (*XmOutlineMaxWidthProc)(Widget); + +typedef struct { + /*Calculates the maximum width of the outline.*/ + XmOutlineMaxWidthProc calc_max_width; + /* Calculates the locations of the objects. */ + XmOutlineCalcLocationProc calc_locations; + /* Just in case we need it later. */ + XtPointer extension; +} OutlineClassPart; + +typedef struct _XmOutlineClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + HierarchyClassPart hierarchy_class; + OutlineClassPart outline_class; +} XmOutlineClassRec; + +externalref XmOutlineClassRec xmOutlineClassRec; + +typedef struct _OutlineNodeInfo { + /* + * Public (Resource) data. + */ + + /* + * Private data. + */ + + HierarchyConstraintRec * top_node_of_display; + + Position widget_x, open_close_x; /*location of node and open/close button*/ + + Dimension height; /* height of this row (max of node and open button). */ + + Position new_x, new_y, oc_new_x, oc_new_y; + Boolean map, unmap, move; +} OutlineNodeInfo; + +typedef OutlineNodeInfo XmOutlineConstraintPart; + +typedef struct _OutlineConstraintRec { + XmManagerConstraintPart manager; + HierNodeInfo hierarchy; + OutlineNodeInfo outline; +} XmOutlineConstraintRec, OutlineConstraintRec, *OutlineConstraints, *XmOutlineConstraintPtr; + + +typedef struct _OutlinePart { + /* Resources */ + Dimension indent_space; /* The number of pixels to indent each level */ + + /* Private State */ + + OutlineConstraints top_node_of_display; + + Dimension max_width; /* Width of the widest row. */ + Dimension max_widget_width; /* Width of the widgets in the widest row. */ + + XmList child_op_list; /* List of child operations */ + XPoint ul_point, lr_point; /* Bounding box for exposure compression */ + + /* more resources */ + Boolean constrain_width; + Boolean connect_nodes; + + /* more private */ + GC draw_gc; + +} OutlinePart; + +typedef OutlinePart XmOutlinePart; + +typedef struct _XmOutlineRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + HierarchyPart hierarchy; + OutlinePart outline; +} XmOutlineRec; + +#define XtInheritCalcMaxWidth ((XmOutlineMaxWidthProc)_XtInherit) +#define XtInheritCalcLocations ((XmOutlineCalcLocationProc)_XtInherit) + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmOutlineClassRec xiOutlineClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _OutlineP_h */ diff --git a/libXm/osx/Xm/Paned.h b/libXm/osx/Xm/Paned.h new file mode 100644 index 0000000..ec75266 --- /dev/null +++ b/libXm/osx/Xm/Paned.h @@ -0,0 +1,116 @@ +/*********************************************************** +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * Paned.h - Paned Composite Widget's public header file. + * + * Updated and significantly modifided from the Athena VPaned Widget. + * + * Date: March 1, 1989 + * + * By: Chris D. Peterson + * MIT X Consortium + * kit@expo.lcs.mit.edu + */ + +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Tony Auito, Chris D. Peterson + */ + +#ifndef _XmPaned_h +#define _XmPaned_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +#define XmPanedAskChild 0 + +typedef struct _XmPanedClassRec *XmPanedWidgetClass; +typedef struct _XmPanedRec *XmPanedWidget; + +/* + * For people used to Motif names this will make things easier. + */ + +#define xmPanedWindowWidgetClass xmPanedWidgetClass + +/************************************************************ + * + * Public Procedures + * + ************************************************************/ + +/* Function Name: XmPanedGetPanes + * Description: Returns the number of panes in the paned widget. + * Arguments: w - the paned widget. + * panes - the list of all panes contained in this widget. + * num - the number of panes. + * Returns: the number of panes in the paned widget. + */ + +extern int XmPanedGetPanes( +#ifndef _NO_PROTO + Widget /* w */, + WidgetList * /* panes */, + int * /* num */ +#endif +); + +/* Function Name: XmCreatePaned + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreatePaned( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +/* Class record constant */ +extern WidgetClass xmPanedWidgetClass; + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmPaned_h -- DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PanedP.h b/libXm/osx/Xm/PanedP.h new file mode 100644 index 0000000..7c006f2 --- /dev/null +++ b/libXm/osx/Xm/PanedP.h @@ -0,0 +1,289 @@ +/*********************************************************** + +Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, +and the Massachusetts Institute of Technology, Cambridge, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital or MIT not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * PanedP.h - Paned Composite Widget's private header file. + * + * Updated and significantly modified from the Athena VPaned Widget. + * + * Date: March 1, 1989 + * + * By: Chris D. Peterson + * MIT X Consortium + * kit@expo.lcs.mit.edu + */ + +/* + * Copyright 1992, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Tony Auito, Chris D. Peterson + */ + +#ifndef _XmPanedP_h +#define _XmPanedP_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/********************************************************************* + * + * Paned Widget Private Data + * + *********************************************************************/ + +/* New fields for the Paned widget class record */ + +typedef struct _XmPanedClassPart { + XtPointer extension; +} XmPanedClassPart; + +/* Full Class record declaration */ +typedef struct _XmPanedClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmPanedClassPart paned_class; +} XmPanedClassRec; + +extern XmPanedClassRec xmPanedClassRec; + +/* Paned constraint record */ +typedef struct _XmPanedConstraintsPart { + /* Resources. */ + Dimension min; /* Minimum height */ + Dimension max; /* Maximum height */ + Boolean allow_resize; /* TRUE iff child resize requests are ok */ + Boolean show_sash; /* TRUE iff child will have sash below it, + when it is not the bottom pane. */ + Boolean skip_adjust; /* TRUE iff child's height should not be */ + /* changed without explicit user action. */ + int position; /* position location in Paned (relative to + other children) ** NIY ** */ + Dimension preferred_size; /* The Preferred size of the pane. + Iff this is zero then ask child for size.*/ + Boolean resize_to_pref; /* resize this pane to its preferred size + on a resize or change managed after + realize. */ + Boolean is_a_pane; /* INTERNAL INFO */ + + + /* Private state. */ + Position delta; /* Desired Location */ + Position olddelta; /* The last value of delta. */ + Dimension wp_size; /* widget's preferred on size */ + Dimension wp_off_size; /* widget's preferred off size */ + int size; /* the size the widget will actually get. */ + Widget sash; /* The sash for this child */ + Widget separator; /* The separator for this child */ + + Boolean prefs_inited; /* Preferences have been inited... */ +} XmPanedConstraintsPart, *Pane; + +typedef struct _XmPanedConstraintsRec { + XmManagerConstraintPart manager; + XmPanedConstraintsPart paned; +} XmPanedConstraintsRec, *XmPanedConstraints; + +/* + * Ugliness: the XmOffset macros require this naming convention, yet + * epak already depends on the pluralized name ;( + */ +typedef XmPanedConstraintsPart XmPanedConstraintPart; + +/* + * The Pane Stack Structure. + */ + +typedef struct _PaneStack { + struct _PaneStack * next; /* The next element on the stack. */ + Pane pane; /* The pane in this element on the stack. */ + int start_size; /* The size of this element when it was pushed + onto the stack. */ +} PaneStack; + +#define NO_ADJUST ((char) 0) +#define BEGAN_ADJUST ((char) 1) + +/* New Fields for the XmPaned widget record */ +typedef struct { + /* resources */ + Position sash_indent; /* Location of sashs (per motif) */ + Boolean refiguremode; /* Whether to refigure changes + right now */ + XtTranslations sash_translations; /* sash translation table */ + Dimension internal_bw; /* internal border width. */ + unsigned char orientation; /* Orientation of paned widget. */ + + Cursor cursor; /* Cursor for paned window */ + + /* Things from Motif behaviour */ + Boolean separator_on; /* make separator visible */ + Dimension margin_width; /* space between right and left edges of + Paned window and it's children */ + Dimension margin_height; /* space between top and bottom edges of + Paned window and it's children */ + + /* sash modifying resources */ + Dimension sash_width; /* Modify sash width */ + Dimension sash_height; /* Modify sash height */ + Dimension sash_shadow_thickness; /* Modify sash shadow_thickness */ + + /* Private */ + Boolean recursively_called; /* for ChangeManaged */ + Boolean resize_children_to_pref; /* override constraint resources + and resize all children to + preferred size. */ + short increment_count; /* Sash increment count */ + char repane_status; /* current adjust state. */ + Position start_loc; /* mouse origin when adjusting */ + GC flipgc; /* GC to use when animating + borders */ + short num_panes; /* count of managed panes */ + short num_slots; /*number of avail. slots for kids */ + + PaneStack * stack; /* The pane stack for this widget.*/ + WidgetList managed_children; /* keep track of managed children */ + + Boolean allow_unused_space; /* should the paned widget allow + * a pane to be shrunk to the point + * that there is unused space at + * the bottom/right of the widget */ +} XmPanedPart; + +/************************************************************************** + * + * Full instance record declaration + * + **************************************************************************/ + +typedef struct _XmPanedRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmPanedPart paned; +} XmPanedRec; + +/************************************************************ + * + * Functions + * + ************************************************************/ +void _XmFromPanedPixels(Widget, int, XtArgVal *); +XmImportOperator _XmToPanedPixels(Widget, int, XtArgVal *); + + +/************************************************************ + * + * Macros + * + ************************************************************/ +/* + * XmResolvePartOffsets stuff follows + */ + +#define XmPaned_sash_indent(w) (((XmPanedWidget)(w))->paned.sash_indent) +#define XmPaned_refiguremode(w) (((XmPanedWidget)(w))->paned.refiguremode) +#define XmPaned_sash_translations(w) (((XmPanedWidget)(w))->paned.sash_translations) +#define XmPaned_internal_bw(w) (((XmPanedWidget)(w))->paned.internal_bw) +#define XmPaned_orientation(w) (((XmPanedWidget)(w))->paned.orientation) +#define XmPaned_cursor(w) (((XmPanedWidget)(w))->paned.cursor) +#define XmPaned_separator_on(w) (((XmPanedWidget)(w))->paned.separator_on) +#define XmPaned_margin_width(w) (((XmPanedWidget)(w))->paned.margin_width) +#define XmPaned_margin_height(w) (((XmPanedWidget)(w))->paned.margin_height) +#define XmPaned_sash_width(w) (((XmPanedWidget)(w))->paned.sash_width) +#define XmPaned_sash_height(w) (((XmPanedWidget)(w))->paned.sash_height) +#define XmPaned_sash_shadow_thickness(w) (((XmPanedWidget)(w))->paned.sash_shadow_thickness) +#define XmPaned_recursively_called(w) (((XmPanedWidget)(w))->paned.recursively_called) +#define XmPaned_resize_children_to_pref(w) (((XmPanedWidget)(w))->paned.resize_children_to_pref) +#define XmPaned_increment_count(w) (((XmPanedWidget)(w))->paned.increment_count) +#define XmPaned_repane_status(w) (((XmPanedWidget)(w))->paned.repane_status) +#define XmPaned_start_loc(w) (((XmPanedWidget)(w))->paned.start_loc) +#define XmPaned_flipgc(w) (((XmPanedWidget)(w))->paned.flipgc) +#define XmPaned_num_panes(w) (((XmPanedWidget)(w))->paned.num_panes) +#define XmPaned_num_slots(w) (((XmPanedWidget)(w))->paned.num_slots) +#define XmPaned_stack(w) (((XmPanedWidget)(w))->paned.stack) +#define XmPaned_managed_children(w) (((XmPanedWidget)(w))->paned.managed_children) +#define XmPaned_allow_unused_space(w) (((XmPanedWidget)(w))->paned.allow_unused_space) + +#define XmPanedC_min(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.min) +#define XmPanedC_max(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.max) +#define XmPanedC_allow_resize(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.allow_resize) +#define XmPanedC_show_sash(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.show_sash) +#define XmPanedC_skip_adjust(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.skip_adjust) +#define XmPanedC_position(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.position) +#define XmPanedC_preferred_size(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.preferred_size) +#define XmPanedC_resize_to_pref(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.resize_to_pref) +#define XmPanedC_is_a_pane(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.is_a_pane) +#define XmPanedC_delta(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.delta) +#define XmPanedC_olddelta(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.olddelta) +#define XmPanedC_wp_size(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.wp_size) +#define XmPanedC_wp_off_size(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.wp_off_size) +#define XmPanedC_size(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.size) +#define XmPanedC_sash(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.sash) +#define XmPanedC_separator(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.separator) +#define XmPanedC_prefs_inited(w) (((XmPanedConstraintsRec*)(w)->core.constraints)->paned.prefs_inited) + +#define ForceSashOff(pane) ((pane)->min == (pane)->max) +#define PaneConsRec(w) ((XmPanedConstraints)(w)->core.constraints) +#define PaneInfo(w) (&(((XmPanedConstraintsRec*)((w)->core.constraints))->paned)) +#define HasSash(w) (XmPanedC_sash(w) != NULL) +#define HasSep(w) (XmPanedC_separator(w) != NULL) + +#define PaneIndex(w) (XmPanedC_position(w)) +#define IsVert(w) (XmPaned_orientation(w) == XmVERTICAL) + +#define IsLastPane(pw, childP) ((XmPaned_managed_children((pw)) + \ + XmPaned_num_panes((pw)) - 1) == childP) + +#define ForAllPaned(pw, childP) \ + for ( ((childP) = (XmPaned_managed_children((pw)))) ; \ + ((childP) < ((XmPaned_managed_children((pw))) \ + + (XmPaned_num_panes((pw))))) ; \ + (childP)++ ) + +#define NthPane(pw, paneIndex) (XmPaned_managed_children((pw)) + (paneIndex)) + +#ifdef _cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _XmPanedP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PanedW.h b/libXm/osx/Xm/PanedW.h new file mode 100644 index 0000000..de97f7f --- /dev/null +++ b/libXm/osx/Xm/PanedW.h @@ -0,0 +1,101 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PanedW.h /main/11 1995/07/13 17:40:28 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/**************************************************************** + * + * Vertical Paned Widget (SubClass of CompositeClass) + * + ****************************************************************/ +#ifndef _XmPanedW_h +#define _XmPanedW_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constant */ +externalref WidgetClass xmPanedWindowWidgetClass; + +#ifndef XmIsPanedWindow +#define XmIsPanedWindow(w) XtIsSubclass(w, xmPanedWindowWidgetClass) +#endif /* XmIsPanedWindow */ + +typedef struct _XmPanedWindowClassRec *XmPanedWindowWidgetClass; +typedef struct _XmPanedWindowRec *XmPanedWindowWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreatePanedWindow( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreatePanedWindow( + Widget parent, + char *name, + ...); + +extern Widget XmVaCreateManagedPanedWindow( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPanedWindow_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PanedWP.h b/libXm/osx/Xm/PanedWP.h new file mode 100644 index 0000000..2f918bc --- /dev/null +++ b/libXm/osx/Xm/PanedWP.h @@ -0,0 +1,180 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PanedWP.h /main/12 1995/07/13 17:40:37 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/********************************************************************* + * + * XmPanedWindowWidget Private Data + * + *********************************************************************/ + +#ifndef _XmPanedWP_h +#define _XmPanedWP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* New fields for the PanedWindow widget class record */ + +typedef struct _XmPanedWindowClassPart +{ + XtPointer extension; +} XmPanedWindowClassPart; + + +/* Full Class record declaration */ + +typedef struct _XmPanedWindowClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmPanedWindowClassPart paned_window_class; +} XmPanedWindowClassRec; + +externalref XmPanedWindowClassRec xmPanedWindowClassRec; + + +/* PanedWindow constraint record */ + +typedef struct _XmPanedWindowConstraintPart { + int position; /* position location in PanedWindow */ + int dheight; /* Desired size */ + Position dy; /* Desired Location */ + Position olddy; /* The last value of dy. */ + Dimension min; /* Minimum height */ + Dimension max; /* Maximum height */ + Boolean isPane; /* true if constraint of pane, false if + constraint of sash */ + Boolean allow_resize; /* TRUE iff child resize requests are ok */ + Boolean skip_adjust; /* TRUE iff child's height should not be */ + /* changed without explicit user action. */ + Widget sash; /* The sash for this child */ + Widget separator; /* The separator for this child */ + short position_index; /* new 1.2 positionIndex resource */ +} XmPanedWindowConstraintPart; + +typedef struct _XmPanedWindowConstraintRec +{ + XmManagerConstraintPart manager; + XmPanedWindowConstraintPart panedw; +} XmPanedWindowConstraintRec, * XmPanedWindowConstraintPtr; + + +/* New Fields for the PanedWindow widget record */ + +typedef struct { + /* resources */ + Boolean refiguremode; /* Whether to refigure changes right now */ + Boolean separator_on; /* make separator visible */ + + Dimension margin_width; /* space between right and left edges of + PanedWindow window and it's children */ + Dimension margin_height; /* space between top and bottom edges of + PanedWindow window and it's children */ + Dimension spacing; /* whitespace between panes + around window, else leave none */ + /* sash modifying resources */ + Dimension sash_width; /* Modify sash width */ + Dimension sash_height; /* Modify sash height */ + Dimension sash_shadow_thickness; /* Modify sash shadow_thickness */ + + Position sash_indent; /* Location of sashs (offset + from right margin) */ + /* private */ + int starty; /* mouse origin when adjusting */ + + short increment_count; /* Sash increment count */ + short pane_count; /* number of managed panes */ + short num_slots; /* number of avail. slots for children*/ + short num_managed_children; /* holds number of managed children */ + + Boolean recursively_called; /* For change_managed AND creation of + * private sash and separator + * children + */ + Boolean resize_at_realize; /* For realize if GeometryNo condition */ + + XmPanedWindowConstraintPtr top_pane; /* pane closest to 0 index */ + XmPanedWindowConstraintPtr bottom_pane; /* pane farthest away from 0 index*/ + + GC flipgc; /* GC to use when animating borders */ + WidgetList managed_children; /* keep track of managed children */ + + unsigned char orientation ; /* horizontal or vertical panedw */ + + XtIntervalId timer ; /* handle key event on sash */ +} XmPanedWindowPart; + +/************************************************************************** + * + * Full instance record declaration + * + **************************************************************************/ + +typedef struct _XmPanedWindowRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmPanedWindowPart paned_window; +} XmPanedWindowRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPanedWP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Picture.h b/libXm/osx/Xm/Picture.h new file mode 100644 index 0000000..6c7be97 --- /dev/null +++ b/libXm/osx/Xm/Picture.h @@ -0,0 +1,64 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _XmPicture_h +#define _XmPicture_h + +#include +#include +#include +#include + +typedef struct _XmPictureRec* XmPicture; +typedef struct _XmPictureStateRec* XmPictureState; + +#ifdef __cplusplus +extern "C" { +#endif + +XmPicture XmParsePicture (char*); +XmPictureState XmGetNewPictureState (XmPicture); +char* XmPictureProcessCharacter(XmPictureState, char, Boolean*); +void XmPictureDelete (XmPicture); +void XmPictureDeleteState (XmPictureState); +char* XmPictureGetCurrentString(XmPictureState); +char* XmPictureDoAutoFill (XmPictureState); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PictureP.h b/libXm/osx/Xm/PictureP.h new file mode 100644 index 0000000..ad442b2 --- /dev/null +++ b/libXm/osx/Xm/PictureP.h @@ -0,0 +1,74 @@ +#include + +#define NUMDIGIT '#' +#define HEXDIGIT 'x' +#define OCTALDIGIT 'o' +#define NONCASELETTER '?' +#define UPCASELETTER '&' +#define NONCASECHAR '@' +#define UPCASECHAR '!' +#define ESCAPE ';' +#define CLOSURE '*' +#define LBRACKET '[' +#define RBRACKET ']' +#define LBRACE '{' +#define RBRACE '}' +#define ALTERNATIVE ',' + +#define NODE_START_COUNT 40 + +typedef enum { + NullTransition, /* Transition on no input */ + NumericDigit, /* eqivalent to [0-9] */ + HexDigit, /* eqivalent to [0-9a-fA-F] */ + OctalDigit, /* eqivalent to [0-7] */ + AnyLetter, /* [a-zA-Z] */ + UpCaseLetter, /* ditto, but translates [a-zA-Z] -> [A-Z] */ + AnyCharacter, /* Any printing character */ + UpCaseCharacter, /* ditto, case transition as above */ + LiteralCharacter /* Single character */ +} XmTransType; + +typedef struct _XmPictureTransition { + int destination; /* Node to transition to */ + XmTransType type; /* literal, null, upcasechar, etc... */ + char c; /* key -- used for literals */ + /* OR: count for closures */ + struct _XmPictureTransition *next; /* Next transition from our node */ +} XmPictureTransition; + +typedef struct _XmPictureNode { + int index; + XmPictureTransition *transitions; +} XmPictureNode; + +typedef struct _XmPictureRec { + char * source; /* string it was parsed from */ + int num_nodes; + int nodes_alloced; + int start_node; + int final_node; + XmPictureNode **nodes; /* array of nodes */ +} XmPictureRec; + +typedef struct _XmPictureStateRec { + XmPictureRec *picture; + char *current_string; + char *append; + int statesize; + unsigned char *state; /* bitvector of states */ + unsigned char *newstate; /* scratch space for use in + transitions */ + char current; /* currently added character */ + Boolean upcase; +} XmPictureStateRec; + +typedef struct _XmAutoFill { + char c; /* char to fill */ + Boolean reject; /* literal's didn't match: it's "right out" */ + Boolean digit; /* isdigit(c) must be true */ + Boolean upcase; /* isupper(c) must be true */ + Boolean letter; /* isalpha(c) must be true */ + Boolean hexdigit; /* isxdigit(c) must be true */ + Boolean octaldigit; /* must be 0-7 */ +} XmAutoFill; diff --git a/libXm/osx/Xm/PixConvI.h b/libXm/osx/Xm/PixConvI.h new file mode 100644 index 0000000..c20faa3 --- /dev/null +++ b/libXm/osx/Xm/PixConvI.h @@ -0,0 +1,81 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: PixConvI.h /main/6 1996/01/29 10:08:12 daniel $ */ +#ifndef _XmPixConvI_h +#define _XmPixConvI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for PixConv.c ********/ + +extern void _XmRegisterPixmapConverters( void ) ; +extern void _XmTopShadowPixmapDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmHighlightPixmapDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern GC _XmGetPixmapBasedGC( + Widget w, + Pixel foreground, + Pixel background, + Pixmap pixmap); + +/******** End Private Function Declarations ********/ + + +/* tmp - go to XmStrDef */ +#define XmRNoScalingBitmap "NoScalingBitmap" +#define XmRNoScalingDynamicPixmap "NoScalingDynamicPixmap" + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPixConvI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PngI.h b/libXm/osx/Xm/PngI.h new file mode 100644 index 0000000..23be228 --- /dev/null +++ b/libXm/osx/Xm/PngI.h @@ -0,0 +1,11 @@ +#ifndef _XmPngI_h +#define _XmPngI_h + +#include +#include +#include + +int _XmPngGetImage(Screen * screen, FILE * infile, Pixel background, + XImage ** ximage); + +#endif diff --git a/libXm/osx/Xm/PointInT.h b/libXm/osx/Xm/PointInT.h new file mode 100644 index 0000000..184bcb0 --- /dev/null +++ b/libXm/osx/Xm/PointInT.h @@ -0,0 +1,69 @@ +/* $XConsortium: PointInT.h /main/5 1995/07/15 20:54:18 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmPointInT_H +#define _XmPointInT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTpointIn; + +/* Trait structures and typedefs, place typedefs first */ + +typedef Boolean (*XmPointInProc)(Widget w, + Position x, + Position y); + +typedef struct _XmPointInTraitRec { + int version ; + XmPointInProc pointIn; +} XmPointInTraitRec, *XmPointInTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPointInT_H */ diff --git a/libXm/osx/Xm/Primitive.h b/libXm/osx/Xm/Primitive.h new file mode 100644 index 0000000..93ae435 --- /dev/null +++ b/libXm/osx/Xm/Primitive.h @@ -0,0 +1,70 @@ +/* $XConsortium: Primitive.h /main/5 1995/07/15 20:54:22 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmPrimitive_h +#define _XmPrimitive_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsPrimitive +#define XmIsPrimitive(w) XtIsSubclass(w, xmPrimitiveWidgetClass) +#endif /* XmIsPrimitive */ + +externalref WidgetClass xmPrimitiveWidgetClass; + +typedef struct _XmPrimitiveClassRec * XmPrimitiveWidgetClass; +typedef struct _XmPrimitiveRec * XmPrimitiveWidget; + + +/******** Public Function Declarations ********/ + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrimitive_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PrimitiveI.h b/libXm/osx/Xm/PrimitiveI.h new file mode 100644 index 0000000..073685c --- /dev/null +++ b/libXm/osx/Xm/PrimitiveI.h @@ -0,0 +1,136 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: PrimitiveI.h /main/5 1995/07/13 17:41:15 drk $ */ +#ifndef _XmPrimitiveI_h +#define _XmPrimitiveI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmTraverseLeft( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraverseRight( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraverseUp( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraverseDown( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraverseNext( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraversePrev( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraverseHome( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraverseNextTabGroup( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmTraversePrevTabGroup( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveHelp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveParentActivate( + Widget pw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveParentCancel( + Widget pw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmButtonTakeFocus( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmMenuButtonTakeFocus( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmMenuButtonTakeFocusUp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrimitiveI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PrimitiveP.h b/libXm/osx/Xm/PrimitiveP.h new file mode 100644 index 0000000..f09f1a6 --- /dev/null +++ b/libXm/osx/Xm/PrimitiveP.h @@ -0,0 +1,169 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PrimitiveP.h /main/10 1996/03/28 15:59:54 daniel $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +#ifndef _XmPrimitiveP_h +#define _XmPrimitiveP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Access Macros */ + +#define Prim_ShadowThickness(w) (((XmPrimitiveWidget)(w))->primitive.shadow_thickness) +#define Prim_HaveTraversal(w) (((XmPrimitiveWidget)(w))->primitive.have_traversal) + +#define PCEPTR(wc) ((XmPrimitiveClassExt *)(&(((XmPrimitiveWidgetClass)(wc))->primitive_class.extension))) +#define _XmGetPrimitiveClassExtPtr(wc, owner) \ + ((*PCEPTR(wc) && (((*PCEPTR(wc))->record_type) == owner))\ + ? PCEPTR(wc) \ + :((XmPrimitiveClassExt *) _XmGetClassExtensionPtr(((XmGenericClassExt *)PCEPTR(wc)), owner))) + + +#define XmPrimitiveClassExtVersion 1L + + +typedef struct _XmPrimitiveClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmWidgetBaselineProc widget_baseline; + XmWidgetDisplayRectProc widget_display_rect; + XmWidgetMarginsProc widget_margins; +} XmPrimitiveClassExtRec, *XmPrimitiveClassExt; + +typedef struct _XmPrimitiveClassPart +{ + XtWidgetProc border_highlight; + XtWidgetProc border_unhighlight; + String translations; + XtActionProc arm_and_activate; + XmSyntheticResource * syn_resources; + int num_syn_resources; + XtPointer extension; +} XmPrimitiveClassPart; + +typedef struct _XmPrimitiveClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; +} XmPrimitiveClassRec; + +externalref XmPrimitiveClassRec xmPrimitiveClassRec; + + +/* The Primitive instance record */ + +typedef struct _XmPrimitivePart +{ + Pixel foreground; + + Dimension shadow_thickness; + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; + + Dimension highlight_thickness; + Pixel highlight_color; + Pixmap highlight_pixmap; + + XtCallbackList help_callback; + XtPointer user_data; + + Boolean traversal_on; + Boolean highlight_on_enter; + Boolean have_traversal; + + unsigned char unit_type; + XmNavigationType navigation_type; + + Boolean highlight_drawn; + Boolean highlighted; + + GC highlight_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + + /* New fields in Motif 2.0 */ + +#ifndef XM_PART_BC + + XtCallbackList convert_callback; /* Selection convert callback */ + XtCallbackList popup_handler_callback; + + XmDirection layout_direction; +#endif +#ifdef OM22_COMPATIBILITY + XmString tool_tip_string; +#endif +} XmPrimitivePart; + +#ifdef XM_PART_BC +extern XmDirection XmPrimLayoutDir ; +#define XmPrim_layout_direction(w) (XmPrimLayoutDir) +#else +#define XmPrim_layout_direction(w) ((w)->primitive.layout_direction) +#endif + + +typedef struct _XmPrimitiveRec +{ + CorePart core; + XmPrimitivePart primitive; +} XmPrimitiveRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrimitiveP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Print.h b/libXm/osx/Xm/Print.h new file mode 100644 index 0000000..02cfd42 --- /dev/null +++ b/libXm/osx/Xm/Print.h @@ -0,0 +1,60 @@ +/* $XConsortium: Print.h /main/14 1996/10/29 15:50:44 drk $ */ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ +#ifndef _XmPrintShell_h +#define _XmPrintShell_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmPrintShellWidgetClass; + +typedef struct _XmPrintShellClassRec * XmPrintShellWidgetClass; +typedef struct _XmPrintShellRec * XmPrintShellWidget; + + +#ifndef XmIsPrintShell +#define XmIsPrintShell(w) (XtIsSubclass (w, xmPrintShellWidgetClass)) +#endif + +/******** Public Function Declarations ********/ + +extern Widget XmPrintSetup( + Widget video_widget, + Screen *print_screen, + String print_shell_name, + ArgList args, + Cardinal num_args); + +extern void XmRedisplayWidget(Widget widget) ; + +extern XtEnum XmPrintToFile(Display *dpy, + char *file_name, + XPFinishProc finish_proc, + XPointer client_data) ; + +extern XtEnum XmPrintPopupPDM(Widget print_shell, + Widget transient_for); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrintShell_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PrintSI.h b/libXm/osx/Xm/PrintSI.h new file mode 100644 index 0000000..2d601b7 --- /dev/null +++ b/libXm/osx/Xm/PrintSI.h @@ -0,0 +1,29 @@ +/* $XConsortium: PrintSI.h /main/2 1996/05/06 15:24:23 drk $ */ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ +#ifndef _XmPrintSI_h +#define _XmPrintSI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern XContext _XmPrintScreenToShellContext; +extern Cardinal _XmPrintShellCounter ; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrintSI_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/PrintSP.h b/libXm/osx/Xm/PrintSP.h new file mode 100644 index 0000000..dca01e9 --- /dev/null +++ b/libXm/osx/Xm/PrintSP.h @@ -0,0 +1,78 @@ +/* $XConsortium: PrintSP.h /main/8 1996/10/11 10:31:32 drk $ */ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ +#ifndef _XmPrintShellP_h +#define _XmPrintShellP_h + +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * we make it a appShell subclass so it can have it's own instance + * hierarchy + */ + +typedef struct { + XmSyntheticResource * syn_resources; + int num_syn_resources; + XtPointer extension; +} XmPrintShellClassPart; + +typedef struct _XmPrintShellClassRec{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ShellClassPart shell_class; + WMShellClassPart wm_shell_class; + VendorShellClassPart vendor_shell_class; + TopLevelShellClassPart top_level_shell_class; + ApplicationShellClassPart application_shell_class; + XmPrintShellClassPart print_shell_class; +} XmPrintShellClassRec; + + +typedef struct { + Boolean xp_connected ; + Boolean last_page ; + unsigned short print_resolution ; + Position min_x, min_y, max_x, max_y ; + unsigned short default_pixmap_resolution ; + XtCallbackList start_job_callback; + XtCallbackList end_job_callback; + XtCallbackList page_setup_callback; + XtCallbackList pdm_notification_callback ; +} XmPrintShellPart, *XmPrintShellPartPtr; + + +typedef struct _XmPrintShellRec{ + CorePart core; + CompositePart composite; + ShellPart shell; + WMShellPart wm; + VendorShellPart vendor; + TopLevelShellPart topLevel; + ApplicationShellPart application; + XmPrintShellPart print; +} XmPrintShellRec; + +externalref XmPrintShellClassRec xmPrintShellClassRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPrintShellP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ + diff --git a/libXm/osx/Xm/Protocols.h b/libXm/osx/Xm/Protocols.h new file mode 100644 index 0000000..4f70ae5 --- /dev/null +++ b/libXm/osx/Xm/Protocols.h @@ -0,0 +1,142 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Protocols.h /main/11 1995/07/13 17:41:53 drk $ */ +/* +* (c) Copyright 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmProtocols_h +#define _XmProtocols_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* should be in XmP.h */ + +#ifndef XmCR_WM_PROTOCOLS +#define XmCR_WM_PROTOCOLS 6666 +#endif /* XmCR_WM_PROTOCOLS */ + +/* define the XM_PROTOCOLS atom for use in routines */ +#ifdef XA_WM_PROTOCOLS +#define XM_WM_PROTOCOL_ATOM(shell) XA_WM_PROTOCOLS +#else +#define XM_WM_PROTOCOL_ATOM(shell) \ + XInternAtom(XtDisplay(shell),"WM_PROTOCOLS",FALSE) +#endif /* XA_WM_PROTOCOLS */ + + +#define XmAddWMProtocols(shell, protocols, num_protocols) \ + XmAddProtocols(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocols, num_protocols) + +#define XmRemoveWMProtocols(shell, protocols, num_protocols) \ + XmRemoveProtocols(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocols, num_protocols) + +#define XmAddWMProtocolCallback(shell, protocol, callback, closure) \ + XmAddProtocolCallback(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocol, callback, closure) + +#define XmRemoveWMProtocolCallback(shell, protocol, callback, closure) \ + XmRemoveProtocolCallback(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocol, callback, closure) + +#define XmActivateWMProtocol(shell, protocol) \ + XmActivateProtocol(shell, XM_WM_PROTOCOL_ATOM(shell), protocol) + +#define XmDeactivateWMProtocol(shell, protocol) \ + XmDeactivateProtocol(shell, XM_WM_PROTOCOL_ATOM(shell), protocol) + +#define XmSetWMProtocolHooks(shell, protocol, pre_h, pre_c, post_h, post_c) \ + XmSetProtocolHooks(shell, XM_WM_PROTOCOL_ATOM(shell), \ + protocol, pre_h, pre_c, post_h, post_c) + + +/******** Public Function Declarations ********/ + +extern void XmAddProtocols( + Widget shell, + Atom property, + Atom *protocols, + Cardinal num_protocols) ; +extern void XmRemoveProtocols( + Widget shell, + Atom property, + Atom *protocols, + Cardinal num_protocols) ; +extern void XmAddProtocolCallback( + Widget shell, + Atom property, + Atom proto_atom, + XtCallbackProc callback, + XtPointer closure) ; +extern void XmRemoveProtocolCallback( + Widget shell, + Atom property, + Atom proto_atom, + XtCallbackProc callback, + XtPointer closure) ; +extern void XmActivateProtocol( + Widget shell, + Atom property, + Atom proto_atom) ; +extern void XmDeactivateProtocol( + Widget shell, + Atom property, + Atom proto_atom) ; +extern void XmSetProtocolHooks( + Widget shell, + Atom property, + Atom proto_atom, + XtCallbackProc pre_hook, + XtPointer pre_closure, + XtCallbackProc post_hook, + XtPointer post_closure) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmProtocols_h */ diff --git a/libXm/osx/Xm/ProtocolsI.h b/libXm/osx/Xm/ProtocolsI.h new file mode 100644 index 0000000..b1c10c9 --- /dev/null +++ b/libXm/osx/Xm/ProtocolsI.h @@ -0,0 +1,63 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ProtocolsI.h /main/5 1995/07/13 17:42:04 drk $ */ +#ifndef _XmProtocolsI_h +#define _XmProtocolsI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmInstallProtocols( + Widget w) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmProtocolsI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ProtocolsP.h b/libXm/osx/Xm/ProtocolsP.h new file mode 100644 index 0000000..f5070b3 --- /dev/null +++ b/libXm/osx/Xm/ProtocolsP.h @@ -0,0 +1,102 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ProtocolsP.h /main/10 1995/07/13 17:42:13 drk $ */ +/* (c) Copyright 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmProtocolsP_h +#define _XmProtocolsP_h + +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmProtocolClassPart { + XtPointer extension; +} XmProtocolClassPart; + +typedef struct _XmProtocolClassRec { + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmProtocolClassPart protocol_class; +} XmProtocolClassRec, *XmProtocolObjectClass; + +typedef struct _XmProtocolPart { + XtCallbackRec pre_hook, post_hook; + XtCallbackList callbacks; + Atom atom; + Boolean active; +} XmProtocolPart, *XmProtocolPartPtr; + +typedef struct _XmProtocolRec { + ObjectPart object; + XmExtPart ext; + XmProtocolPart protocol; +} XmProtocolRec, *XmProtocol, **XmProtocolList; + +#ifndef XmIsProtocol +#define XmIsProtocol(w) XtIsSubclass(w, xmProtocolObjectClass) +#endif /* XmIsProtocol */ + +/* Class record constants */ + +externalref XmProtocolClassRec xmProtocolClassRec; +externalref WidgetClass xmProtocolObjectClass; + +typedef struct _XmProtocolMgrRec{ + Atom property; + XmProtocolList protocols; + Cardinal num_protocols; + Cardinal max_protocols; +}XmProtocolMgrRec, *XmProtocolMgr, **XmProtocolMgrList; + + +typedef struct _XmAllProtocolsMgrRec{ + XmProtocolMgrList protocol_mgrs; + Cardinal num_protocol_mgrs; + Cardinal max_protocol_mgrs; + Widget shell; +}XmAllProtocolsMgrRec, *XmAllProtocolsMgr; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmProtocolsP_h */ diff --git a/libXm/osx/Xm/PushB.h b/libXm/osx/Xm/PushB.h new file mode 100644 index 0000000..f24c2df --- /dev/null +++ b/libXm/osx/Xm/PushB.h @@ -0,0 +1,101 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PushB.h /main/12 1995/07/13 17:43:06 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +/*********************************************************************** + * + * PushButton Widget + * + ***********************************************************************/ + +#ifndef _XmPButton_h +#define _XmPButton_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsPushButton +#define XmIsPushButton(w) XtIsSubclass(w, xmPushButtonWidgetClass) +#endif /* XmIsPushButton */ + +/* PushButton Widget */ + +externalref WidgetClass xmPushButtonWidgetClass; + +typedef struct _XmPushButtonClassRec *XmPushButtonWidgetClass; +typedef struct _XmPushButtonRec *XmPushButtonWidget; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreatePushButton( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +/* + * Variable argument list functions + */ +extern Widget XmVaCreatePushButton( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedPushButton( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButton_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PushBG.h b/libXm/osx/Xm/PushBG.h new file mode 100644 index 0000000..ee2474f --- /dev/null +++ b/libXm/osx/Xm/PushBG.h @@ -0,0 +1,100 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PushBG.h /main/12 1995/07/13 17:43:54 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +/*********************************************************************** + * + * PushButton Widget + * + ***********************************************************************/ + +#ifndef _XmPButtonG_h +#define _XmPButtonG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsPushButtonGadget +#define XmIsPushButtonGadget(w) XtIsSubclass(w, xmPushButtonGadgetClass) +#endif /* XmIsPushButtonGadget */ + +externalref WidgetClass xmPushButtonGadgetClass; + +typedef struct _XmPushButtonGadgetClassRec *XmPushButtonGadgetClass; +typedef struct _XmPushButtonGadgetRec *XmPushButtonGadget; +typedef struct _XmPushButtonGCacheObjRec *XmPushButtonGCacheObject; + + +/******** Public Function Declarations ********/ + +extern Widget XmCreatePushButtonGadget( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; + +extern Widget XmVaCreatePushButtonGadget( + Widget parent, + char *name, + ...); + +extern Widget XmVaCreateManagedPushButtonGadget( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButtonG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PushBGP.h b/libXm/osx/Xm/PushBGP.h new file mode 100644 index 0000000..b795f71 --- /dev/null +++ b/libXm/osx/Xm/PushBGP.h @@ -0,0 +1,222 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: PushBGP.h /main/14 1997/04/07 14:57:52 dbl $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmPButtonGP_h +#define _XmPButtonGP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ +/* The PushButton Gadget Cache Object's class and instance records*/ +/*************************************************************/ + +typedef struct _XmPushButtonGCacheObjClassPart +{ + int foo; +} XmPushButtonGCacheObjClassPart; + + +typedef struct _XmPushButtonGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; + XmPushButtonGCacheObjClassPart pushbutton_class_cache; +} XmPushButtonGCacheObjClassRec; + +externalref XmPushButtonGCacheObjClassRec xmPushButtonGCacheObjClassRec; + + +typedef struct _XmPushButtonGCacheObjPart +{ + Boolean fill_on_arm; + Pixel arm_color; + Pixmap arm_pixmap; + Pixmap unarm_pixmap; + unsigned char multiClick; /* KEEP/DISCARD resource */ + Dimension default_button_shadow_thickness; + /* New resource - always add it to gadget's dimension. */ + + GC fill_gc; + GC background_gc; + + /* following items have some persistence across gadget instances and are + ** here only for data-space savings + */ + XtIntervalId timer; + Widget timer_widget; + +} XmPushButtonGCacheObjPart; + +typedef struct _XmPushButtonGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; + XmPushButtonGCacheObjPart pushbutton_cache; +} XmPushButtonGCacheObjRec; + + +/* PushButton class structure */ + +typedef struct _XmPushButtonGadgetClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmPushButtonGadgetClassPart; + + +/* Full class record declaration for PushButton class */ + +typedef struct _XmPushButtonGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; + XmPushButtonGadgetClassPart pushbutton_class; + +} XmPushButtonGadgetClassRec; + + +externalref XmPushButtonGadgetClassRec xmPushButtonGadgetClassRec; + + +/* PushButton instance record */ + +typedef struct _XmPushButtonGadgetPart +{ + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + + Dimension show_as_default; + Boolean armed; + int click_count; + + Boolean compatible; /* if false it is Motif 1.1 else Motif 1.0 */ + /* not cached for performance reasons */ + + XmPushButtonGCacheObjPart *cache; /* Replace cache instance fields */ + /* with a pointer */ +} XmPushButtonGadgetPart; + +/* Full instance record declaration */ + +typedef struct _XmPushButtonGadgetRec { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; + XmPushButtonGadgetPart pushbutton; +} XmPushButtonGadgetRec; + +/* MACROS */ +/**********/ + +/* Macros for cached instance fields */ + +#define PBG_FillOnArm(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->fill_on_arm) +#define PBG_ArmColor(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->arm_color) +#define PBG_FillGc(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->fill_gc) +#define PBG_BackgroundGc(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->background_gc) +#define PBG_Timer(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->timer) +#define PBG_ArmPixmap(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->arm_pixmap) +#define PBG_UnarmPixmap(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->unarm_pixmap) +#define PBG_MultiClick(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->multiClick) +#define PBG_DefaultButtonShadowThickness(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.cache->default_button_shadow_thickness) + +/* Macros for uncached instance fields */ + +#define PBG_ActivateCallback(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.activate_callback) +#define PBG_ArmCallback(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.arm_callback) +#define PBG_DisarmCallback(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.disarm_callback) +#define PBG_Armed(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.armed) +#define PBG_ClickCount(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.click_count) +#define PBG_Compatible(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.compatible) +#define PBG_ShowAsDefault(w) (((XmPushButtonGadget) (w)) -> \ + pushbutton.show_as_default) + +/******************************/ +/* Convenience Macros */ +/******************************/ + +#define PBG_Cache(w) (((XmPushButtonGadget)(w))->\ + pushbutton.cache) +#define PBG_ClassCachePart(w) \ + (((XmPushButtonGadgetClass)xmPushButtonGadgetClass)->gadget_class.cache_part) + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButtonGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/PushBP.h b/libXm/osx/Xm/PushBP.h new file mode 100644 index 0000000..b2543c4 --- /dev/null +++ b/libXm/osx/Xm/PushBP.h @@ -0,0 +1,126 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: PushBP.h /main/12 1995/07/13 17:44:19 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmPButtonP_h +#define _XmPButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PushButton class structure */ + +typedef struct _XmPushButtonClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmPushButtonClassPart; + + +/* Full class record declaration for PushButton class */ + +typedef struct _XmPushButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmPushButtonClassPart pushbutton_class; +} XmPushButtonClassRec; + + +externalref XmPushButtonClassRec xmPushButtonClassRec; + +/* PushButton instance record */ + +typedef struct _XmPushButtonPart +{ + Boolean fill_on_arm; + Dimension show_as_default; + Pixel arm_color; + Pixmap arm_pixmap; + XtCallbackList activate_callback; + XtCallbackList arm_callback; + XtCallbackList disarm_callback; + + Boolean armed; + Pixmap unarm_pixmap; + GC fill_gc; + GC background_gc; + XtIntervalId timer; + unsigned char multiClick; /* KEEP/DISCARD resource */ + int click_count; + Time armTimeStamp; + Boolean compatible; /* if false it is Motif 1.1 else Motif 1.0 */ + Dimension default_button_shadow_thickness; + /* New resource - always add it + to widgets dimension. */ + +} XmPushButtonPart; + + +/* Full instance record declaration */ + +typedef struct _XmPushButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmPushButtonPart pushbutton; +} XmPushButtonRec; + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmPButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RCHookI.h b/libXm/osx/Xm/RCHookI.h new file mode 100644 index 0000000..b0746cd --- /dev/null +++ b/libXm/osx/Xm/RCHookI.h @@ -0,0 +1,65 @@ +/* $XConsortium: RCHookI.h /main/5 1995/07/15 20:54:31 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmRCHookI_h +#define _XmRCHookI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +void _XmRCColorHook( + Widget w, + ArgList alIn, + Cardinal *acPtrIn) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRCHookI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RCLayoutI.h b/libXm/osx/Xm/RCLayoutI.h new file mode 100644 index 0000000..d14094c --- /dev/null +++ b/libXm/osx/Xm/RCLayoutI.h @@ -0,0 +1,105 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: RCLayoutI.h /main/5 1995/07/13 17:44:58 drk $ */ +#ifndef _XmRCLayoutI_h +#define _XmRCLayoutI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmRCDoMarginAdjustment( + XmRowColumnWidget m) ; +extern void _XmRCThinkAboutSize( + register XmRowColumnWidget m, + Dimension *w, + Dimension *h, + Widget instigator, + XtWidgetGeometry *request) ; +extern void _XmRCPreferredSize( + XmRowColumnWidget m, + Dimension *w, + Dimension *h) ; +extern void _XmRCAdaptToSize( + XmRowColumnWidget m, + Widget instigator, + XtWidgetGeometry *request) ; +extern XmRCKidGeometry _XmRCGetKidGeo( + Widget wid, + Widget instigator, + XtWidgetGeometry *request, + int uniform_border, +#if NeedWidePrototypes + int border, +#else + Dimension border, +#endif /* NeedWidePrototypes */ + int uniform_width_margins, + int uniform_height_margins, + Widget help, + Widget toc, + int geo_type) ; +extern void _XmRCSetKidGeo( + XmRCKidGeometry kg, + Widget instigator) ; + +extern void _XmRC_SetOrGetTextMargins( + Widget wid, +#if NeedWidePrototypes + unsigned int op, +#else + unsigned char op, +#endif /* NeedWidePrototypes */ + XmBaselineMargins *textMargins) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRCLayoutI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RCLayoutP.h b/libXm/osx/Xm/RCLayoutP.h new file mode 100644 index 0000000..630b760 --- /dev/null +++ b/libXm/osx/Xm/RCLayoutP.h @@ -0,0 +1,55 @@ +/* $XConsortium: RCLayoutP.h /main/4 1995/07/15 20:54:35 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmRCLayoutP_h +#define _XmRCLayoutP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRCLayoutP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RCMenuI.h b/libXm/osx/Xm/RCMenuI.h new file mode 100644 index 0000000..847b4f4 --- /dev/null +++ b/libXm/osx/Xm/RCMenuI.h @@ -0,0 +1,196 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: RCMenuI.h /main/5 1995/07/13 17:45:45 drk $ */ +#ifndef _XmRCMenuI_h +#define _XmRCMenuI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmMenuBtnUp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params); +extern void _XmMenuBtnDown( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params); +extern void _XmHandleMenuButtonPress( + Widget wid, + XEvent *event); +extern Boolean _XmMatchBDragEvent( + Widget wid, + XEvent *event); +extern Boolean _XmMatchBSelectEvent( + Widget wid, + XEvent *event); +extern void _XmGetActiveTopLevelMenu( + Widget wid, + Widget *rwid); +extern void _XmMenuFocus( + Widget w, + int operation, + Time _time ); +extern void _XmSetSwallowEventHandler( + Widget widget, +#if NeedWidePrototypes + int add_handler ); +#else + Boolean add_handler ); +#endif /* NeedWidePrototypes */ +extern void _XmMenuPopDown( + Widget w, + XEvent *event, + Boolean *popped_up ); +extern Boolean _XmGetPopupMenuClick( + Widget wid ); +extern void _XmSetPopupMenuClick( + Widget wid, +#if NeedWidePrototypes + int popupMenuClick); +#else + Boolean popupMenuClick); +#endif /* NeedWidePrototypes */ +extern void _XmRC_DoProcessMenuTree( + Widget w, + int mode) ; + +extern void _XmRC_ProcessSingleWidget( + Widget w, + int mode) ; +extern void _XmRC_AddToPostFromList( + XmRowColumnWidget m, + Widget widget) ; +extern void _XmRC_UpdateOptionMenuCBG( + Widget cbg, + Widget memWidget) ; +extern void _XmRC_SetMenuHistory( + XmRowColumnWidget m, + RectObj child) ; +extern void _XmRC_SetOptionMenuHistory( + XmRowColumnWidget m, + RectObj child) ; +extern void _XmRCMenuProcedureEntry( + int proc, + Widget widget, + ... ) ; +extern void _XmRCArmAndActivate( + Widget w, + XEvent *event, + String *parms, + Cardinal *num_parms ); +extern void _XmRCGetTopManager( + Widget w, + Widget *topManager ) ; +extern void _XmMenuFocusOut( + Widget cb, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuFocusIn( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmGetMenuKidMargins( + XmRowColumnWidget m, + Dimension *width, + Dimension *height, + Dimension *left, + Dimension *right, + Dimension *top, + Dimension *bottom) ; +extern void _XmMenuUnmap( + Widget wid, + XEvent *event, + String *param, + Cardinal *num_param) ; +extern void _XmMenuBarGadgetSelect( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmMenuGadgetTraverseCurrent( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmMenuGadgetTraverseCurrentUp( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmMenuGadgetDrag( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern int _XmRC_PopupMenuHandler(Widget, XEvent*); + +extern Boolean _XmRC_PostTimeOut( XtPointer wid ); + +extern void _XmRC_RemoveHandlersFromPostFromWidget( + Widget popup, + Widget widget) ; +extern void _XmRC_AddPopupEventHandlers( + XmRowColumnWidget pane) ; +extern void _XmRC_RemovePopupEventHandlers( + XmRowColumnWidget pane) ; + +void _XmRC_RemoveFromPostFromList( + XmRowColumnWidget m, + Widget widget) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRCMenuI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ReadImageI.h b/libXm/osx/Xm/ReadImageI.h new file mode 100644 index 0000000..d318385 --- /dev/null +++ b/libXm/osx/Xm/ReadImageI.h @@ -0,0 +1,65 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ReadImageI.h /main/5 1995/07/13 17:46:29 drk $ */ +#ifndef _XmReadImageI_h +#define _XmReadImageI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for ReadImage.c ********/ + +extern XImage * _XmReadImageAndHotSpotFromFile( + Display * display, + char *filename, + int *hot_x, + int *hot_y) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmReadImageI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RegionI.h b/libXm/osx/Xm/RegionI.h new file mode 100644 index 0000000..cee3653 --- /dev/null +++ b/libXm/osx/Xm/RegionI.h @@ -0,0 +1,257 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: RegionI.h /main/10 1995/07/13 17:47:08 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1987, 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ + +#ifndef _XmRegionI_h +#define _XmRegionI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define ISEMPTY(r) ((r)->numRects == 0) + +/* 1 if two Boxs overlap. + * 0 if two Boxs do not overlap. + * Remember, x2 and y2 are not in the region + */ +#define EXTENTCHECK(r1, r2) \ + ((r1)->x2 > (r2)->x1 && \ + (r1)->x1 < (r2)->x2 && \ + (r1)->y2 > (r2)->y1 && \ + (r1)->y1 < (r2)->y2) + +/* + * update region extents + */ +#define EXTENTS(r,idRect){\ + if((r)->x1 < (idRect)->extents.x1)\ + (idRect)->extents.x1 = (r)->x1;\ + if((r)->y1 < (idRect)->extents.y1)\ + (idRect)->extents.y1 = (r)->y1;\ + if((r)->x2 > (idRect)->extents.x2)\ + (idRect)->extents.x2 = (r)->x2;\ + if((r)->y2 > (idRect)->extents.y2)\ + (idRect)->extents.y2 = (r)->y2;\ + } + +/* + * Check to see if there is enough memory in the present region. + */ +#define MEMCHECK(reg, rect, firstrect){\ + if ((reg)->numRects >= ((reg)->size - 1)){\ + (firstrect) = (XmRegionBox *) XtRealloc \ + ((char *)(firstrect), \ + (unsigned) (2*(sizeof(XmRegionBox))*((reg)->size)));\ + if ((firstrect) == 0)\ + return;\ + (reg)->size *= 2;\ + (rect) = &(firstrect)[(reg)->numRects];\ + }\ + } + +/* this routine checks to see if the previous rectangle is the same + * or subsumes the new rectangle to add. + */ + +#define CHECK_PREVIOUS(Reg, R, Rx1, Ry1, Rx2, Ry2)\ + (!(((Reg)->numRects > 0)&&\ + ((R-1)->y1 == (Ry1)) &&\ + ((R-1)->y2 == (Ry2)) &&\ + ((R-1)->x1 <= (Rx1)) &&\ + ((R-1)->x2 >= (Rx2)))) + +/* add a rectangle to the given XmRegion */ +#define ADDRECT(reg, r, fr, rx1, ry1, rx2, ry2){\ + if (((rx1) < (rx2)) && ((ry1) < (ry2)) && \ + CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){\ + if ((reg)->numRects == (reg)->size){\ + if (!(reg)->size) (reg)->size = 1;\ + else (reg)->size += (reg)->numRects;\ + (reg)->rects = (XmRegionBox *) realloc((reg)->rects,\ + sizeof(XmRegionBox) *\ + (reg)->size);\ + fr = REGION_BOXPTR(reg);\ + r = fr + (reg)->numRects;\ + }\ + (r)->x1 = (rx1);\ + (r)->y1 = (ry1);\ + (r)->x2 = (rx2);\ + (r)->y2 = (ry2);\ + EXTENTS((r), (reg));\ + (reg)->numRects++;\ + (r)++;\ + }\ + } + + + +/* add a rectangle to the given XmRegion */ +#define ADDRECTNOX(reg, r, rx1, ry1, rx2, ry2){\ + if ((rx1 < rx2) && (ry1 < ry2) &&\ + CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){\ + (r)->x1 = (rx1);\ + (r)->y1 = (ry1);\ + (r)->x2 = (rx2);\ + (r)->y2 = (ry2);\ + (reg)->numRects++;\ + (r)++;\ + }\ + } + +#define INBOX(r, x, y) \ + ( ( ((r).x2 >= x)) && \ + ( ((r).x1 <= x)) && \ + ( ((r).y2 >= y)) && \ + ( ((r).y1 <= y)) ) + +/* + * used by _XmRegionDrawShadow + */ + +#define TL_OPEN (1 << 0) +#define BL_OPEN (1 << 1) +#define TR_OPEN (1 << 2) +#define BR_OPEN (1 << 3) +#define TL_MATCH (1 << 4) +#define BL_MATCH (1 << 5) +#define TR_MATCH (1 << 6) +#define BR_MATCH (1 << 7) + +/* + * The following macro were ported from the X server include file regionstr.h + */ +#define REGION_BOXPTR(reg) ((XmRegionBox *)((reg)->rects)) + + +/******** Private Function Declarations for Region.c ********/ + +extern XmRegion _XmRegionCreate( void ) ; +extern XmRegion _XmRegionCreateSize( + long size) ; +extern void _XmRegionComputeExtents( + XmRegion r) ; +extern void _XmRegionGetExtents( + XmRegion r, + XRectangle *rect) ; +extern void _XmRegionUnionRectWithRegion( + XRectangle *rect, + XmRegion source, + XmRegion dest) ; +extern void _XmRegionIntersectRectWithRegion( + XRectangle *rect, + XmRegion source, + XmRegion dest) ; +extern long _XmRegionGetNumRectangles( + XmRegion r) ; +extern void _XmRegionGetRectangles( + XmRegion r, + XRectangle **rects, + long *nrects) ; +extern void _XmRegionSetGCRegion( + Display *dpy, + GC gc, + int x_origin, + int y_origin, + XmRegion r) ; +extern void _XmRegionDestroy( + XmRegion r) ; +extern void _XmRegionOffset( + XmRegion pRegion, + int x, + int y) ; +extern void _XmRegionIntersect( + XmRegion reg1, + XmRegion reg2, + XmRegion newReg) ; +extern void _XmRegionUnion( + XmRegion reg1, + XmRegion reg2, + XmRegion newReg) ; +extern void _XmRegionSubtract( + XmRegion regM, + XmRegion regS, + XmRegion regD) ; +extern Boolean _XmRegionIsEmpty( + XmRegion r) ; +extern Boolean _XmRegionEqual( + XmRegion r1, + XmRegion r2) ; +extern Boolean _XmRegionPointInRegion( + XmRegion pRegion, + int x, + int y) ; +extern void _XmRegionClear( + XmRegion r ) ; +extern void _XmRegionShrink( + XmRegion r, + int dx, + int dy) ; +extern void _XmRegionDrawShadow( + Display *display, + Drawable d, + GC top_gc, + GC bottom_gc, + XmRegion region, +#if NeedWidePrototypes + int border_thick, + int shadow_thick, +#else + Dimension border_thick, + Dimension shadow_thick, +#endif /* NeedWidePrototypes */ + unsigned int shadow_type ) ; + +extern XmRegion _XmRegionFromImage( + XImage *image ); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRegionI_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RepType.h b/libXm/osx/Xm/RepType.h new file mode 100644 index 0000000..00f090d --- /dev/null +++ b/libXm/osx/Xm/RepType.h @@ -0,0 +1,122 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: RepType.h /main/9 1995/07/13 17:47:50 drk $ */ +/* (c) Copyright 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmRepType_h +#define _XmRepType_h + + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmREP_TYPE_INVALID 0x1FFF + +typedef unsigned short XmRepTypeId ; + +typedef struct +{ + String rep_type_name ; + String *value_names ; + unsigned char *values ; + unsigned char num_values ; + Boolean reverse_installed ; + XmRepTypeId rep_type_id ; + }XmRepTypeEntryRec, *XmRepTypeEntry, XmRepTypeListRec, *XmRepTypeList ; + + +/******** Public Function Declarations ********/ + +extern XmRepTypeId XmRepTypeRegister( + String rep_type, + String *value_names, + unsigned char *values, +#if NeedWidePrototypes + unsigned int num_values) ; +#else + unsigned char num_values) ; +#endif /* NeedWidePrototypes */ +extern void XmRepTypeAddReverse( +#if NeedWidePrototypes + int rep_type_id) ; +#else + XmRepTypeId rep_type_id) ; +#endif /* NeedWidePrototypes */ +extern Boolean XmRepTypeValidValue( +#if NeedWidePrototypes + int rep_type_id, + unsigned int test_value, +#else + XmRepTypeId rep_type_id, + unsigned char test_value, +#endif /* NeedWidePrototypes */ + Widget enable_default_warning) ; +extern XmRepTypeList XmRepTypeGetRegistered( void ) ; +extern XmRepTypeEntry XmRepTypeGetRecord( +#if NeedWidePrototypes + int rep_type_id) ; +#else + XmRepTypeId rep_type_id) ; +#endif /* NeedWidePrototypes */ +extern XmRepTypeId XmRepTypeGetId( + String rep_type) ; +extern String * XmRepTypeGetNameList( +#if NeedWidePrototypes + int rep_type_id, + int use_uppercase_format) ; +#else + XmRepTypeId rep_type_id, + Boolean use_uppercase_format) ; +#endif /* NeedWidePrototypes */ +extern void XmRepTypeInstallTearOffModelConverter( void ) ; + +/******** End Public Function Declarations ********/ + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRepType_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RepTypeI.h b/libXm/osx/Xm/RepTypeI.h new file mode 100644 index 0000000..f96494d --- /dev/null +++ b/libXm/osx/Xm/RepTypeI.h @@ -0,0 +1,202 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: RepTypeI.h /main/12 1995/07/13 17:48:09 drk $ */ +/* (c) Copyright 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmRepTypeI_h +#define _XmRepTypeI_h + +#include +#include "XmI.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* We need a name to refer to the original unit type converter. + This name is used as a to_type when installing a duplicate of the + unit type converter in RepType.c and it is used again as a to_type + when calling XtConvertAndStore in ResConvert.c when implementing + XmCvtStringToUnitType (call to the original converter) */ +#define REAL_UNIT_TYPE_NAME "RealUnitType" + +/* The following enumerations of representation type identification + * numbers have a one-to-one positional mapping to the corresponding + * representation type record in the static rep type lists. + * The two static lists are in alphabetical order, as required by + * the coding of the XmRepTypeGetId routine. ('_' is the exception in + * this enum, the XmR names gives the order, really) + */ + +enum { + XmRID_ALIGNMENT, + XmRID_ANIMATION_STYLE, + XmRID_ARROW_DIRECTION, + XmRID_ARROW_LAYOUT, + XmRID_ARROW_ORIENTATION, + XmRID_ARROW_SENSITIVITY, + XmRID_ATTACHMENT, + XmRID_AUDIBLE_WARNING, + XmRID_AUTO_DRAG_MODEL, + XmRID_AUTOMATIC_SELECTION, + XmRID_BINDING_TYPE, + XmRID_BITMAP_CONVERSION_MODEL, + XmRID_BLEND_MODEL, + XmRID_CHILD_HORIZONTAL_ALIGNMENT, + XmRID_CHILD_PLACEMENT, + XmRID_CHILD_TYPE, + XmRID_CHILD_VERTICAL_ALIGNMENT, + XmRID_COMBO_BOX_LIST_ACTION_ACTION_PARAMS, + XmRID_COMBO_BOX_TYPE, + XmRID_COMMAND_SELECTION_BOX_UP_OR_DOWN_ACTION_PARAMS, + XmRID_COMMAND_WINDOW_LOCATION, + XmRID_CONTAINER_CURSOR_ACTION_PARAMS, + XmRID_CONTAINER_EXPAND_OR_COLLAPSE_ACTION_PARAMS, + XmRID_CONTAINER_START_TRANSFER_ACTION_PARAMS, + XmRID_DEFAULT_BUTTON_EMPHASIS, + XmRID_DEFAULT_BUTTON_TYPE, + XmRID_DELETE_RESPONSE, + XmRID_DIALOG_STYLE, + XmRID_DIALOG_TYPE, + XmRID_DIRECTION, + XmRID_DRAG_INITIATOR_PROTOCOL_STYLE, + XmRID_DRAG_RECEIVER_PROTOCOL_STYLE, + XmRID_DROP_SITE_ACTIVITY, + XmRID_DROP_SITE_TYPE, + XmRID_EDIT_MODE, + XmRID_ENABLE_BTN1_TRANSFER, + XmRID_ENABLE_WARP, + XmRID_ENTRY_VIEW_TYPE, + XmRID_FILE_FILTER_STYLE, + XmRID_FILE_SELECTION_BOX_UP_OR_DOWN_ACTION_PARAMS, + XmRID_FILE_TYPE_MASK, + XmRID_FONT_TYPE, + XmRID_ICON_ATTACHMENT, + XmRID_INDICATOR_ON, + XmRID_INDICATOR_TYPE, + XmRID_INPUT_POLICY, + XmRID_KEYBOARD_FOCUS_POLICY, + XmRID_LABEL_TYPE, + XmRID_LAYOUT_TYPE, + XmRID_LINE_STYLE, + XmRID_LINE_TYPE, + XmRID_LIST_SIZE_POLICY, + XmRID_LOAD_MODEL, + XmRID_MATCH_BEHAVIOR, + XmRID_MULTI_CLICK, + XmRID_NAVIGATION_TYPE, + XmRID_NB_CHILD_TYPE, + XmRID_NOTEBOOK_TRAVERSE_TAB_ACTION_PARAMS, + XmRID_ORIENTATION, + XmRID_OUTLINE_BUTTON_POLICY, + XmRID_OUTLINE_STATE, + XmRID_PACKING, + XmRID_PANED_WINDOW_SASH_ACTION_PARAMS, + XmRID_PANED_WINDOW_SASH_DIRECTION_ACTION_PARAMS, + XmRID_PANED_WINDOW_SASH_INCREMENT_ACTION_PARAMS, + XmRID_PATH_MODE, + XmRID_POSITION_MODE, + XmRID_POSITION_TYPE, + XmRID_PRIMARY_OWNERSHIP, + XmRID_PROCESSING_DIRECTION, + XmRID_RESIZE_POLICY, + XmRID_ROW_COLUMN_TYPE, + XmRID_SCROLL_BAR_DISPLAY_POLICY, + XmRID_SCROLL_BAR_INCREMENT_DOWN_OR_RIGHT_ACTION_PARAMS, + XmRID_SCROLL_BAR_INCREMENT_UP_OR_LEFT_ACTION_PARAMS, + XmRID_SCROLL_BAR_PAGE_DOWN_OR_RIGHT_ACTION_PARAMS, + XmRID_SCROLL_BAR_PAGE_UP_OR_LEFT_ACTION_PARAMS, + XmRID_SCROLL_BAR_PLACEMENT, + XmRID_SCROLLED_WINDOW_CHILD_TYPE, + XmRID_SCROLLING_POLICY, + XmRID_SELECTION_BOX_UP_OR_DOWN_ACTION_PARAMS, + XmRID_SELECTION_MODE, + XmRID_SELECTION_POLICY, + XmRID_SELECTION_TECHNIQUE, + XmRID_SELECTION_TYPE, + XmRID_SEPARATOR_TYPE, + XmRID_SET, + XmRID_SHADOW_TYPE, + XmRID_SHOW_ARROWS, + XmRID_SHOW_VALUE, + XmRID_SLIDER_MARK, + XmRID_SLIDER_VISUAL, + XmRID_SLIDING_MODE, + XmRID_SPATIAL_INCLUDE_MODEL, + XmRID_SPATIAL_RESIZE_MODEL, + XmRID_SPATIAL_SNAP_MODEL, + XmRID_SPATIAL_STYLE, + XmRID_SPINBOX_CHILD_TYPE, + XmRID_STRING_DIRECTION, + XmRID_TEAR_OFF_MODEL, + XmRID_TEXT_EXTEND_MOVEMENT_ACTION_PARAMS, + XmRID_TEXTFIELD_DIRECTION_ACTION_PARAMS, + XmRID_TEXTFIELD_EXTEND_MOVEMENT_ACTION_PARAMS, + XmRID_TEXT_HORIZONTAL_DIRECTION_ACTION_PARAMS, + XmRID_TEXT_VERTICAL_DIRECTION_ACTION_PARAMS, + XmRID_TOGGLE_MODE, + XmRID_UNIT_TYPE, + XmRID_UNPOST_BEHAVIOR, + XmRID_VERTICAL_ALIGNMENT, + XmRID_VIEW_TYPE, + XmRID_VISUAL_EMPHASIS, + XmRID_VISUAL_POLICY, + XmRID_WHICH_BUTTON, + XmRID_PIXMAP_PLACEMENT + } ; + + +/******** Private Function Declarations ********/ + +extern void _XmRepTypeInstallConverters( void ) ; +extern Boolean _XmConvertActionParamToRepTypeId(Widget widget, + XmRepTypeId rep_type_id, + char *parameter, + Boolean can_be_numeric, + int *result) ; + +/******** End Private Function Declarations ********/ + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRepTypeI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ResConverI.h b/libXm/osx/Xm/ResConverI.h new file mode 100644 index 0000000..a65bf95 --- /dev/null +++ b/libXm/osx/Xm/ResConverI.h @@ -0,0 +1,70 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ResConverI.h /main/5 1995/07/13 17:48:35 drk $ */ +#ifndef _XmResConvertI_h +#define _XmResConvertI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for ResConvert.c ********/ + +extern void _XmRegisterConverters( void ) ; +extern char * _XmConvertCSToString( + XmString cs) ; +extern Boolean _XmCvtXmStringToCT( + XrmValue *from, + XrmValue *to) ; +#ifdef UTF8_SUPPORTED +extern Boolean _XmCvtXmStringToUTF8String( + XrmValue *from, + XrmValue *to) ; +#endif +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmResConvertI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ResEncodI.h b/libXm/osx/Xm/ResEncodI.h new file mode 100644 index 0000000..b471ed4 --- /dev/null +++ b/libXm/osx/Xm/ResEncodI.h @@ -0,0 +1,62 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ResEncodI.h /main/5 1995/07/13 17:49:43 drk $ */ +#ifndef _XmResEncodI_h +#define _XmResEncodI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for ResEncod.c ********/ + +XtPointer _XmGetEncodingRegistryTarget(int*); + + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmResEncodI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ResIndI.h b/libXm/osx/Xm/ResIndI.h new file mode 100644 index 0000000..0f5aac7 --- /dev/null +++ b/libXm/osx/Xm/ResIndI.h @@ -0,0 +1,89 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ResIndI.h /main/5 1995/07/13 17:50:09 drk $ */ +#ifndef _XmResIndI_h +#define _XmResIndI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for ResInd.c ********/ + + +extern int _XmConvertUnits( + Screen *screen, + int dimension, + register int from_type, + register int from_val, + register int to_type) ; +extern void _XmUnitTypeDefault( + Widget widget, + int offset, + XrmValue *value) ; +extern unsigned char _XmGetUnitType( + Widget widget) ; +extern int _XmConvertFloatUnitsToIntUnits( + int unitType, + float unitValue, + int *intUnitType, + float *intUnitValue, + int default_from_type) ; +extern int _XmConvertStringToUnits( + Screen *screen, + String spec, + int default_from_type, + int orientation, + int to_type, + XtEnum *parse_error); +extern void _XmStringDirectionDefault(Widget widget, + int offset, + XrmValue *value ); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmResIndI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RowColumn.h b/libXm/osx/Xm/RowColumn.h new file mode 100644 index 0000000..497405d --- /dev/null +++ b/libXm/osx/Xm/RowColumn.h @@ -0,0 +1,137 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: RowColumn.h /main/13 1999/01/19 14:07:48 mgreess $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmRowColumn_h +#define _XmRowColumn_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmRowColumnWidgetClass; + +typedef struct _XmRowColumnClassRec * XmRowColumnWidgetClass; +typedef struct _XmRowColumnRec * XmRowColumnWidget; + +#ifndef XmIsRowColumn +#define XmIsRowColumn(w) XtIsSubclass((w),xmRowColumnWidgetClass) +#endif + + +/******** Public Function Declarations ********/ + +extern void XmMenuPosition( + Widget p, + XButtonPressedEvent *event) ; +extern Widget XmCreateRowColumn( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateWorkArea( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateRadioBox( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreateOptionMenu( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmOptionLabelGadget( + Widget m) ; +extern Widget XmOptionButtonGadget( + Widget m) ; +extern Widget XmCreateMenuBar( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreatePopupMenu( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmCreatePulldownMenu( + Widget p, + char *name, + ArgList al, + Cardinal ac) ; +extern Widget XmGetPostedFromWidget( + Widget menu) ; +extern Widget XmGetTearOffControl( + Widget menu) ; + +extern void XmAddToPostFromList( + Widget m, + Widget widget ); +extern void XmRemoveFromPostFromList( + Widget m, + Widget widget ); +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateRowColumn( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedRowColumn( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRowColumn_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RowColumnI.h b/libXm/osx/Xm/RowColumnI.h new file mode 100644 index 0000000..155bfa5 --- /dev/null +++ b/libXm/osx/Xm/RowColumnI.h @@ -0,0 +1,217 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifdef REV_INFO +#ifndef lint +static char *rcsidRowColumnIH = "$XConsortium: RowColumnI.h /main/6 1996/08/15 17:26:22 pascale $"; +#endif +#endif + +#ifndef _XmRowColumnI_h +#define _XmRowColumnI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define UNDEFINED_TYPE -1 +#define POST_TIME_OUT 3 /* sec */ * 1000 + +#define Double(x) ((x) << 1) +#define Half(x) ((x) >> 1) + +#define IsSensitive(r) XtIsSensitive(r) +#define IsManaged(w) XtIsManaged(w) +#define IsNull(p) ((p) == NULL) + +#define PackTight(m) (RC_Packing (m) == XmPACK_TIGHT) +#define PackColumn(m) (RC_Packing (m) == XmPACK_COLUMN) +#define PackNone(m) (RC_Packing (m) == XmPACK_NONE) + +#define Asking(i) ((i) == 0) +#define IsVertical(m) \ + (((XmRowColumnWidget) (m))->row_column.orientation == XmVERTICAL) +#define IsHorizontal(m) \ + (((XmRowColumnWidget) (m))->row_column.orientation == XmHORIZONTAL) +#define IsAligned(m) \ + (((XmRowColumnWidget) (m))->row_column.do_alignment) + +#define IsPopup(m) \ + (((XmRowColumnWidget) (m))->row_column.type == XmMENU_POPUP) +#define IsPulldown(m) \ + (((XmRowColumnWidget) (m))->row_column.type == XmMENU_PULLDOWN) +#define IsOption(m) \ + (((XmRowColumnWidget) (m))->row_column.type == XmMENU_OPTION) +#define IsBar(m) \ + (((XmRowColumnWidget) (m))->row_column.type == XmMENU_BAR) +#define IsWorkArea(m) \ + (((XmRowColumnWidget) (m))->row_column.type == XmWORK_AREA) +#define IsRadio(m) \ + ((((XmRowColumnWidget) (m))->row_column.type == XmWORK_AREA) && \ + ((((XmRowColumnWidget) (m))->row_column.radio))) +#define IsHelp(m,w) ((w) == RC_HelpPb (m)) + +#define WasManaged(w) \ + (((XmRowColumnConstraintRec *) ((w)->core.constraints))-> \ + row_column.was_managed) + +#define SavedMarginTop(w) \ + (((XmRowColumnConstraintRec *) ((w)->core.constraints))-> \ + row_column.margin_top) + +#define SavedMarginBottom(w) \ + (((XmRowColumnConstraintRec *) ((w)->core.constraints))-> \ + row_column.margin_bottom) + +#define SavedBaseline(w) \ + (((XmRowColumnConstraintRec *) ((w)->core.constraints))-> \ + row_column.baseline) + +#define BX(b) ((b)->x) +#define BY(b) ((b)->y) +#define BWidth(b) ((b)->width) +#define BHeight(b) ((b)->height) +#define BBorder(b) ((b)->border_width) + +#define SetPosition(b,x,y) { BX (b) = x; BY (b) = y; } + +#define ChangeMargin(margin,new_w,sum) { \ + if ((margin) != new_w) \ + { \ + sum += new_w - (margin); \ + (margin) = new_w; \ + }\ +} + +#define ChangeMarginDouble(margin,new_w,sum) { \ + if ((margin) != new_w) \ + { \ + sum += 2* (new_w - (margin)); \ + (margin) = new_w; \ + }\ +} + +#define ForAllChildren(m, i, q) \ + for (i = 0, q = m->composite.children; \ + i < m->composite.num_children; \ + i++, q++) + +#define ForManagedChildren(m, i, q) \ + for (i = 0, q = m->composite.children; \ + i < m->composite.num_children; \ + i++, q++) \ + \ + if (XtIsManaged(*q)) + +#define AlignmentBaselineTop(m) \ +(((XmRowColumnWidget) (m))->row_column.entry_vertical_alignment == XmALIGNMENT_BASELINE_TOP) +#define AlignmentBaselineBottom(m) \ +(((XmRowColumnWidget) (m))->row_column.entry_vertical_alignment == XmALIGNMENT_BASELINE_BOTTOM) +#define AlignmentCenter(m) \ +(((XmRowColumnWidget) (m))->row_column.entry_vertical_alignment == XmALIGNMENT_CENTER) +#define AlignmentTop(m) \ +(((XmRowColumnWidget) (m))->row_column.entry_vertical_alignment == XmALIGNMENT_CONTENTS_TOP) +#define AlignmentBottom(m) \ +(((XmRowColumnWidget) (m))->row_column.entry_vertical_alignment == XmALIGNMENT_CONTENTS_BOTTOM) + +/* Warning Messages */ +#define BadWidthSVMsg _XmMMsgRowColumn_0000 +#define BadHeightSVMsg _XmMMsgRowColumn_0001 +#define BadPopupHelpMsg _XmMMsgRowColumn_0002 +#define BadPulldownHelpMsg _XmMMsgRowColumn_0003 +#define BadOptionHelpMsg _XmMMsgRowColumn_0004 +#define BadWorkAreaHelpMsg _XmMMsgRowColumn_0005 +#define BadTypeParentMsg _XmMMsgRowColumn_0007 +#define BadTypeSVMsg _XmMMsgRowColumn_0008 +#define BadMenuBarHomogenousSVMsg _XmMMsgRowColumn_0015 +#define BadMenuBarEntryClassSVMsg _XmMMsgRowColumn_0016 +#define BadPulldownWhichButtonSVMsg _XmMMsgRowColumn_0017 +#define BadPulldownMenuPostSVMsg _XmMMsgRowColumn_0018 +#define BadMenuPostMsg _XmMMsgRowColumn_0019 +#define BadShadowThicknessSVMsg _XmMMsgRowColumn_0020 +#define WrongMenuChildMsg _XmMMsgRowColumn_0022 +#define WrongChildMsg _XmMMsgRowColumn_0023 +#define BadOptionIsHomogeneousSVMsg _XmMMsgRowColumn_0025 +#define TearOffSharedMenupaneMsg _XmMMsgRowColumn_0026 +#define BadMnemonicCharMsg _XmMMsgRowColumn_0027 + +#define RCIndex(w) (((XmRowColumnConstraintRec *)(w)->core.constraints)\ + ->row_column.position_index) + + +/******** Private Function Declarations ********/ + +extern void _XmRC_KeyboardInputHandler( + Widget reportingWidget, + XtPointer data, + XEvent *event, + Boolean *cont ); +extern void _XmAllowAcceleratedInsensitiveUnmanagedMenuItems( + Widget wid, +#if NeedWidePrototypes + int allowed); +#else + Boolean allowed); +#endif /* NeedWidePrototypes */ +extern void _XmPostPopupMenu( + Widget wid, + XEvent *event) ; +extern void _XmCallRowColumnMapCallback( + Widget wid, + XEvent *event) ; +extern void _XmCallRowColumnUnmapCallback( + Widget wid, + XEvent *event) ; +extern void _XmRC_RemoveFromPostFromListOnDestroyCB ( + Widget w, + caddr_t clientData, + caddr_t callData) ; + +extern void _XmRC_CheckAndSetOptionCascade(XmRowColumnWidget menu) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRowColumnI_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/RowColumnP.h b/libXm/osx/Xm/RowColumnP.h new file mode 100644 index 0000000..93d4236 --- /dev/null +++ b/libXm/osx/Xm/RowColumnP.h @@ -0,0 +1,455 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: RowColumnP.h /main/13 1996/05/21 12:03:34 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmRowColumnP_h +#define _XmRowColumnP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Button Event Status Record for popup verification at manage time */ +typedef struct _XmButtonEventStatusRec +{ + Time time; + Boolean verified; + Boolean waiting_to_be_managed; + XButtonEvent event; +} XmButtonEventStatusRec; + +/* replay info rec - last menu that was posted before event replay */ +typedef struct _XmReplayInfoRec +{ + Time time; + Widget toplevel_menu; +} XmReplayInfoRec; + +typedef struct _XmMenuFocusRec +{ + Widget oldWidget; + Window oldFocus; + int oldRevert; + Time oldTime; +} XmMenuFocusRec; + +/* Menu State is per screen */ +typedef struct _XmMenuStateRec +{ + Widget RC_LastSelectToplevel; + XmButtonEventStatusRec RC_ButtonEventStatus; + XmReplayInfoRec RC_ReplayInfo; +/* + * needed for funky menubar mode so that the traversal can be restored + * to the correct highlighted item when we are done. + */ + Widget RC_activeItem; + XmMenuFocusRec RC_menuFocus; +/* + * A workaround is provided to allow applications to get insensitive + * menu items. This is useful for context "sensitive-shared-tear off- + * accelerated" menu items. Accessed via internal (for now) function, + * _XmAllowAcceleratedInsensitiveUmanagedMenuItems(). + */ + Boolean RC_allowAcceleratedInsensitiveUnmanagedMenuItems; + Time MS_LastManagedMenuTime; + Boolean MU_InDragMode; + Widget MU_CurrentMenuChild; + Boolean MU_InPMMode; +} XmMenuStateRec, *XmMenuState; + + +typedef struct _XmRCKidGeometryRec +{ + Widget kid; + XtWidgetGeometry box; + Dimension margin_top; + Dimension margin_bottom; + Dimension baseline; +} XmRCKidGeometryRec, *XmRCKidGeometry; + +/* The RowColumn instance record */ + +typedef struct _XmRowColumnPart +{ + Dimension margin_height; /* margin around inside of widget */ + Dimension margin_width; + + + Dimension spacing; /* pixels between entries */ + Dimension entry_border; /* size of entry borders */ + + /* next only used w/ menubars */ + + Widget help_pushbutton; /* ptr to help pushbutton widget */ + + Widget cascadeBtn; /* if this menu is pulled down by a */ + /* pulldown widget this will point */ + /* at the pulldown. needed to go */ + /* up the cascade */ + + /* next two only used w/ option menus */ + /* they are really only temporary */ + /* since the data is passed off to */ + /* the pulldown widget which is */ + /* automatically built */ + + XmString option_label; /* label for option menu pulldown */ + + Widget option_submenu; /* which submenu to pulldown */ + + + XmRCKidGeometry boxes; /* when doing menu layouts is an */ + /* array of geo req's to make it easy */ + + WidgetClass entry_class; /* if homogeneous, what class */ + + XtCallbackList entry_callback; /* a child fired off */ + XtCallbackList map_callback; /* about to be mapped call back */ + XtCallbackList unmap_callback; /* about to be unmapped call back */ + + Widget memory_subwidget; /* id of last subwidget that */ + /* fired off. Recorded by the */ + /* entry_fired proc, can be set too */ + /* this causes mouse/muscle memory */ + /* to also be reset */ + + short num_columns; /* if columnar packing this is how */ + /* many columns to use */ + + String menuPost; /* a translation for posting popups */ + unsigned int postButton; /* active mouse button */ + int postEventType; /* active mouse event type */ + unsigned int postModifiers; /* active mouse modifier */ + + String menu_accelerator; + KeySym mnemonic; + XmStringCharSet mnemonicCharSet; + + unsigned char entry_alignment; /* type of label alignment */ + /* our children should have */ + + /* next two are layout, Tight is the */ + /* standard menubar packing. Columns */ + /* is radio box style, orientation */ + /* determines if it is column or row */ + /* major, Vert = column major */ + + unsigned char packing; /* entry packing (layout) style */ + + unsigned char type; /* temporary: diff between menu/bar */ + + unsigned char orientation; /* horizontal or vertical */ + + /* next two indicate how the widget */ + /* responds to size changes if there */ + /* is no geo mgr. If true then the */ + /* dimension is never changed. Set */ + /* to true if dimension is spec'd */ + /* at create time */ + + Boolean armed; /* controls whether pulldowns work */ + /* or not, button down in any part of */ + /* the menubar arms it, this is a bit field */ + /* used for other internal flags, see macros */ + + /* next is only valid for popup menus */ + + Boolean adjust_margin; /* T/F, indicating if we should force */ + /* all subwidgets to have similar */ + /* margins */ + + Boolean adjust_last; /* Indicates whether or not the last row */ + /* row or column should be stretched to */ + /* the edge of the row_column widget. */ + + Boolean do_alignment; /* T/F, do we force alignment on all */ + /* our children */ + + Boolean radio; /* T/F, do we do the toggle button */ + /* 'only-one-down' enforcement */ + + Boolean radio_one; /* T/F, must have one radio button */ + /* set to on */ + + + Boolean homogeneous; /* T/F, do we only allow a single */ + /* class of children */ + + Boolean resize_width; + Boolean resize_height; + + XtEnum popup_enabled; + + Dimension old_width; /* save the old width, etc to use */ + Dimension old_height; /* at resize time since it now has */ + Dimension old_shadow_thickness; /* NW gravity */ + + Widget * postFromList; /* list for sharing menupanes */ + int postFromCount; /* count of the list */ + int postFromListSize; /* size of the malloc'ed list */ + + Widget lastSelectToplevel; /* returned in XmGetPostedFromWidget*/ + Widget popupPosted; /* popup submenu currently posted */ + + unsigned char oldFocusPolicy; /* save when menus begin traversal */ + + /***************** 1.2 ***************/ + unsigned char TearOffModel; /* enable/disable flag */ + Widget ParentShell; /* Save the parent shell when torn */ + Widget tear_off_control; + Boolean to_state; /* tear off state */ + /* tear off activate/deactivate callbacks */ + XtCallbackList tear_off_activated_callback; + XtCallbackList tear_off_deactivated_callback; + Widget tear_off_lastSelectToplevel; + Widget tear_off_focus_item; /* when tear off is inactive */ + + unsigned char entry_vertical_alignment; + unsigned char popup_menu_click; + XtWorkProcId popup_workproc; + XmString tear_off_title; +} XmRowColumnPart; + + +/* Full instance record declaration */ + +typedef struct _XmRowColumnRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmRowColumnPart row_column; +} XmRowColumnRec; + +typedef struct _XmRowColumnWidgetRec /* OBSOLETE (for compatibility only).*/ +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmRowColumnPart row_column; +} XmRowColumnWidgetRec; + + + +/* RowColumn class structure */ + +typedef struct _XmRowColumnClassPart +{ + XmMenuProc menuProcedures; /* proc to interface with menu widgets */ + XtActionProc armAndActivate; /* proc triggered by acclerator */ + XmMenuTraversalProc traversalHandler;/* proc to handle menu traversal */ + XtPointer extension; /* Pointer to extension record */ +} XmRowColumnClassPart; + + + +typedef struct _XmRowColumnClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmRowColumnClassPart row_column_class; +} XmRowColumnClassRec, *XmRowColumnClass; + +externalref XmRowColumnClassRec xmRowColumnClassRec; + + + +/* Constraint Definition */ + +/* No constraint resources */ + +typedef struct _XmRowColumnConstraintPart +{ + Boolean was_managed; + Dimension margin_top; + Dimension margin_bottom; + Dimension baseline; + short position_index; +} XmRowColumnConstraintPart; + +typedef struct _XmRowColumnConstraintRec +{ + XmManagerConstraintPart manager; + XmRowColumnConstraintPart row_column; +} XmRowColumnConstraintRec; + + +/* Access macros */ + +#define XmRC_ARMED_BIT (1 << 0) +#define XmRC_BEING_ARMED_BIT (1 << 1) /* bits in menu's armed byte */ +#define XmRC_EXPOSE_BIT (1 << 2) /* used in both menu and */ +#define XmRC_WINDOW_MOVED_BIT (1 << 3) /* popup menu, careful */ +#define XmRC_WIDGET_MOVED_BIT (1 << 4) +#define XmRC_POPPING_DOWN_BIT (1 << 5) +#define XmRC_FROM_RESIZE_BIT (1 << 6) + +#define RC_IsArmed(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_ARMED_BIT) +#define RC_BeingArmed(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_BEING_ARMED_BIT) +#define RC_DoExpose(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_EXPOSE_BIT) +#define RC_WidgetHasMoved(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_WIDGET_MOVED_BIT) +#define RC_WindowHasMoved(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_WINDOW_MOVED_BIT) +#define RC_PoppingDown(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_POPPING_DOWN_BIT) +#define RC_FromResize(m) (((XmRowColumnWidget)(m))->row_column.armed & XmRC_FROM_RESIZE_BIT) + + +#define RC_SetBit(byte,bit,v) byte = (byte & (~bit)) | (v ? bit : 0) + +#define RC_SetArmed(m,v) RC_SetBit (((XmRowColumnWidget)(m))->row_column.armed, XmRC_ARMED_BIT, v) +#define RC_SetBeingArmed(m,v) RC_SetBit (((XmRowColumnWidget)(m))->row_column.armed, XmRC_BEING_ARMED_BIT, v) +#define RC_SetExpose(m,v) RC_SetBit (((XmRowColumnWidget)(m))->row_column.armed, XmRC_EXPOSE_BIT, v) +#define RC_SetWidgetMoved(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_WIDGET_MOVED_BIT,v) +#define RC_SetWindowMoved(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_WINDOW_MOVED_BIT,v) +#define RC_SetPoppingDown(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_POPPING_DOWN_BIT,v) +#define RC_SetFromResize(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.armed, XmRC_FROM_RESIZE_BIT,v) + +#define RC_MarginW(m) (((XmRowColumnWidget)(m))->row_column.margin_width) +#define RC_MarginH(m) (((XmRowColumnWidget)(m))->row_column.margin_height) + +#define RC_Entry_cb(m) (((XmRowColumnWidget)(m))->row_column.entry_callback) +#define RC_Map_cb(m) (((XmRowColumnWidget)(m))->row_column.map_callback) +#define RC_Unmap_cb(m) (((XmRowColumnWidget)(m))->row_column.unmap_callback) + +#define RC_Orientation(m) (((XmRowColumnWidget)(m))->row_column.orientation) +#define RC_Spacing(m) (((XmRowColumnWidget)(m))->row_column.spacing) +#define RC_EntryBorder(m) (((XmRowColumnWidget)(m))->row_column.entry_border) +#define RC_HelpPb(m) (((XmRowColumnWidget)(m))->row_column.help_pushbutton) +#define RC_DoMarginAdjust(m) (((XmRowColumnWidget)(m))->row_column.adjust_margin) +#define RC_EntryAlignment(m) (((XmRowColumnWidget)(m))->row_column.entry_alignment) +#define RC_EntryVerticalAlignment(m) (((XmRowColumnWidget)(m))->row_column.entry_vertical_alignment) +#define RC_Packing(m) (((XmRowColumnWidget)(m))->row_column.packing) +#define RC_NCol(m) (((XmRowColumnWidget)(m))->row_column.num_columns) +#define RC_AdjLast(m) (((XmRowColumnWidget)(m))->row_column.adjust_last) +#define RC_AdjMargin(m) (((XmRowColumnWidget)(m))->row_column.adjust_margin) +#define RC_MemWidget(m) (((XmRowColumnWidget)(m))->row_column.memory_subwidget) +#define RC_CascadeBtn(m) (((XmRowColumnWidget)(m))->row_column.cascadeBtn) +#define RC_OptionLabel(m) (((XmRowColumnWidget)(m))->row_column.option_label) +#define RC_OptionSubMenu(m) (((XmRowColumnWidget)(m))->row_column.option_submenu) +#define RC_RadioBehavior(m) (((XmRowColumnWidget)(m))->row_column.radio) +#define RC_RadioAlwaysOne(m) (((XmRowColumnWidget)(m))->row_column.radio_one) +#define RC_PopupPosted(m) (((XmRowColumnWidget)(m))->row_column.popupPosted) +#define RC_ResizeHeight(m) (((XmRowColumnWidget)(m))->row_column.resize_height) +#define RC_ResizeWidth(m) (((XmRowColumnWidget)(m))->row_column.resize_width) +#define RC_Type(m) (((XmRowColumnWidget)(m))->row_column.type) +#define RC_EntryClass(m) (((XmRowColumnWidget)(m))->row_column.entry_class) +#define RC_IsHomogeneous(m) (((XmRowColumnWidget)(m))->row_column.homogeneous) +#define RC_Boxes(m) (((XmRowColumnWidget)(m))->row_column.boxes) +#define RC_PopupEnabled(m) (((XmRowColumnWidget)(m))->row_column.popup_enabled) +#define RC_MenuAccelerator(m) (((XmRowColumnWidget)(m))->row_column.menu_accelerator) +#define RC_Mnemonic(m) (((XmRowColumnWidget)(m))->row_column.mnemonic) +#define RC_MnemonicCharSet(m) (((XmRowColumnWidget)(m))->row_column.mnemonicCharSet) +#define RC_MenuPost(m) (((XmRowColumnWidget) m)->row_column.menuPost) +#define RC_PostButton(m) (((XmRowColumnWidget) m)->row_column.postButton) +#define RC_PostModifiers(m) (((XmRowColumnWidget) m)->row_column.postModifiers) +#define RC_PostEventType(m) (((XmRowColumnWidget) m)->row_column.postEventType) + +#define RC_OldFocusPolicy(m) (((XmRowColumnWidget) m)->row_column.oldFocusPolicy) +#define RC_ParentShell(m) (((XmRowColumnWidget) m)->row_column.ParentShell) +#define RC_TearOffControl(m) (((XmRowColumnWidget) m)->row_column.tear_off_control) +#define RC_TearOffModel(m) (((XmRowColumnWidget) m)->row_column.TearOffModel) + +#define RC_popupMenuClick(m) (((XmRowColumnWidget)(m))->row_column.popup_menu_click) + +#define RC_TearOffTitle(m) (((XmRowColumnWidget)(m))->row_column.tear_off_title) + +/* Tear Off State */ + +#define XmTO_TORN_OFF_BIT (1 << 0) +#define XmTO_FROM_INIT_BIT (1 << 1) +#define XmTO_VISUAL_DIRTY_BIT (1 << 2) +#define XmTO_ACTIVE_BIT (1 << 3) + +#define RC_SetTornOff(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_TORN_OFF_BIT,v) + +#define RC_TornOff(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_TORN_OFF_BIT) + +#define RC_SetFromInit(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_FROM_INIT_BIT,v) + +#define RC_FromInit(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_FROM_INIT_BIT) + +#define RC_SetTearOffDirty(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_VISUAL_DIRTY_BIT,v) + +#define RC_TearOffDirty(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_VISUAL_DIRTY_BIT) + +#define RC_TearOffActive(m) (((XmRowColumnWidget)(m))->row_column.to_state & XmTO_ACTIVE_BIT) + +#define RC_SetTearOffActive(m,v) RC_SetBit(((XmRowColumnWidget)(m))->row_column.to_state, XmTO_ACTIVE_BIT,v) + +#define initial_value 0 + +/* Defines used when calling _XmProcessMenuTree() */ + +#define XmADD 0 +#define XmDELETE 1 +#define XmREPLACE 2 + + +/* Defines used when calling _XmMenuIsAccessible() */ + +#define XmWEAK_CHECK 1 +#define XmMEDIUM_CHECK 2 +#define XmSTRONG_CHECK 3 + +#define XmMENU_BEGIN 0 +#define XmMENU_MIDDLE 1 +#define XmMENU_END 2 + +/* Defines used when calling find_first_managed_child() */ +#define ANY_CHILD 0 +#define FIRST_BUTTON 1 + + +#define XmInheritMenuProceduresProc ((XmMenuProc) _XtInherit) +#define XmInheritArmAndActivateProc ((XtActionProc) _XtInherit) +#define XmInheritMenuTraversalProc ((XmMenuTraversalProc) _XtInherit) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRowColumnP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SSpinB.h b/libXm/osx/Xm/SSpinB.h new file mode 100644 index 0000000..099ccc7 --- /dev/null +++ b/libXm/osx/Xm/SSpinB.h @@ -0,0 +1,77 @@ +/* $XConsortium: SSpinB.h /main/4 1995/07/15 20:54:58 drk $ */ +/* + * (c) Copyright 1995 Digital Equipment Corporation. + * (c) Copyright 1995 Hewlett-Packard Company. + * (c) Copyright 1995 International Business Machines Corp. + * (c) Copyright 1995 Sun Microsystems, Inc. + * (c) Copyright 1995 Novell, Inc. + * (c) Copyright 1995 FUJITSU LIMITED. + * (c) Copyright 1995 Hitachi. + */ +/****************************************************************************** + * + * File: SSpinB.h + * Date: June 1, 1995 + * Author: Mitchell Greess + * + * Contents: + * Public header file for the XmSimpleSpinBox widget. + * Implements the XmSimpleSpinBox. + * + ******************************************************************************/ + +#ifndef _XmSSpinB_h +#define _XmSSpinB_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* XmSimpleSpinBox Widget */ +externalref WidgetClass xmSimpleSpinBoxWidgetClass; + +typedef struct _XmSimpleSpinBoxClassRec *XmSimpleSpinBoxWidgetClass; +typedef struct _XmSimpleSpinBoxRec *XmSimpleSpinBoxWidget; + +/* Spin externs for application accessible functions */ +extern Widget XmCreateSimpleSpinBox( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); + +extern void XmSimpleSpinBoxAddItem( + Widget widget, + XmString item, + int pos); + +extern void XmSimpleSpinBoxDeletePos( + Widget widget, + int pos); + +extern void XmSimpleSpinBoxSetItem( + Widget widget, + XmString item); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateSimpleSpinBox( + Widget parent, + char *name, + ...); + +extern Widget XmVaCreateManagedSimpleSpinBox( + Widget parent, + char *name, + ...); + +#ifdef __cplusplus +} +#endif + +#endif /* _SSpinB_h */ + diff --git a/libXm/osx/Xm/SSpinBP.h b/libXm/osx/Xm/SSpinBP.h new file mode 100644 index 0000000..5f21948 --- /dev/null +++ b/libXm/osx/Xm/SSpinBP.h @@ -0,0 +1,117 @@ +/* $TOG: SSpinBP.h /main/6 1999/09/01 17:13:50 mgreess $ */ +/* + * (c) Copyright 1995 Digital Equipment Corporation. + * (c) Copyright 1995 Hewlett-Packard Company. + * (c) Copyright 1995 International Business Machines Corp. + * (c) Copyright 1995 Sun Microsystems, Inc. + * (c) Copyright 1995 Novell, Inc. + * (c) Copyright 1995 FUJITSU LIMITED. + * (c) Copyright 1995 Hitachi. + */ +/****************************************************************************** + * + * File: SSpinBP.h + * Date: June 1, 1995 + * Author: Mitchell Greess + * + * Contents: + * Private header file for the XmSimpleSpinBox widget. + * Implements the XmSimpleSpinBox. + * + ******************************************************************************/ + +#ifndef _XmSSpinBP_h +#define _XmSSpinBP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmSimpleSpinBoxConstraint +{ + int unused; +} XmSimpleSpinBoxConstraintPart, *XmSimpleSpinBoxConstraint; + +typedef struct _XmSimpleSpinBoxConstraintRec +{ + XmManagerConstraintPart manager; + XmSpinBoxConstraintPart spinBox; + XmSimpleSpinBoxConstraintPart simpleSpinBox; +} XmSimpleSpinBoxConstraintRec, *XmSimpleSpinBoxConstraintPtr; + +/* Simple Spin Box class structure */ +typedef struct _XmSimpleSpinBoxClassPart +{ + XtPointer extension; /* not used */ +} XmSimpleSpinBoxClassPart; + + +/* Full class record declaration for Simple Spin Box class */ +typedef struct _XmSimpleSpinBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmSpinBoxClassPart spinBox_class; + XmSimpleSpinBoxClassPart simpleSpinBox_class; +} XmSimpleSpinBoxClassRec; + +externalref XmSimpleSpinBoxClassRec xmSimpleSpinBoxClassRec; + +/* The Simple Spin Box instance record */ +typedef struct _XmSimpleSpinBoxPart +{ + /* + * (Public) resources + */ + unsigned char arrow_sensitivity; + Boolean wrap; + + /* Resources for autonumeric mode */ + short decimal_points; + int increment_value; + int maximum_value; + int minimum_value; + + /* Resources for string values mode */ + int num_values; /* number of XmString in the array */ + int position; /* 1-based pos'n of current selection */ + unsigned char position_type; /* governs interpretation of .position: + XmPOSITION_{ARRAY,VALUE} */ + XmStringTable values; /* array of XmString */ + + /* Resources for the text field child of the XmSimpleSpinBox */ + short columns; /* number of columns */ + Boolean editable; /* whether the text field is editable */ + unsigned char sb_child_type; /* XmSTRING or XmNUMERIC */ + Widget text_field; + + /* (Private) state */ +} XmSimpleSpinBoxPart; + + +/* Full instance record declaration */ + +typedef struct _XmSimpleSpinBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmSpinBoxPart spinBox; + XmSimpleSpinBoxPart simpleSpinBox; +} XmSimpleSpinBoxRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _SSpinBP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/osx/Xm/SashP.h b/libXm/osx/Xm/SashP.h new file mode 100644 index 0000000..374d738 --- /dev/null +++ b/libXm/osx/Xm/SashP.h @@ -0,0 +1,128 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SashP.h /main/12 1995/07/13 17:52:08 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* + * SashP.h - Private definitions for Sash widget (Used by VPane Widget) + * + */ + +#ifndef _XmSashP_h +#define _XmSashP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************** + * + * Sash Widget Private Data + * + *****************************************************************************/ + +/* New fields for the Sash widget class record */ +typedef struct { + XtPointer extension; /* Pointer to extension record */ +} XmSashClassPart; + +/* Full Class record declaration */ +typedef struct _XmSashClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmSashClassPart sash_class; +} XmSashClassRec; + +typedef struct _XmSashClassRec *XmSashWidgetClass; + +externalref XmSashClassRec xmSashClassRec; + +/* New fields for the Sash widget record */ +typedef struct { + XtCallbackList sash_action; + Boolean has_focus; +} XmSashPart; + +/***************************************************************************** + * + * Full instance record declaration + * + ****************************************************************************/ + +typedef struct _XmSashRec { + CorePart core; + XmPrimitivePart primitive; + XmSashPart sash; +} XmSashRec; + +typedef struct _XmSashRec *XmSashWidget; + +typedef struct { + XEvent *event; /* the event causing the SashAction */ + String *params; /* the TranslationTable params */ + Cardinal num_params; /* count of params */ +} SashCallDataRec, *SashCallData; + +/* Class Record Constant */ + +externalref WidgetClass xmSashWidgetClass; + +#ifndef XmIsSash +#define XmIsSash(w) XtIsSubclass(w, xmSashWidgetClass) +#endif /* XmIsSash */ + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSashP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Scale.h b/libXm/osx/Xm/Scale.h new file mode 100644 index 0000000..d82ec59 --- /dev/null +++ b/libXm/osx/Xm/Scale.h @@ -0,0 +1,104 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Scale.h /main/11 1995/07/13 17:52:48 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScale_h +#define _XmScale_h + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmScaleWidgetClass; + +/* fast XtIsSubclass define */ +#ifndef XmIsScale +#define XmIsScale(w) XtIsSubclass (w, xmScaleWidgetClass) +#endif + +typedef struct _XmScaleClassRec * XmScaleWidgetClass; +typedef struct _XmScaleRec * XmScaleWidget; + + +/******** Public Function Declarations ********/ + +void XmScaleSetValue( + Widget w, + int value) ; +void XmScaleGetValue( + Widget w, + int *value) ; +Widget XmCreateScale( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +Widget XmVaCreateScale( + Widget parent, + char *name, + ...); +Widget XmVaCreateManagedScale( + Widget parent, + char *name, + ...); +void XmScaleSetTicks( + Widget scale, + int big_every, + Cardinal num_med, + Cardinal num_small, + Dimension size_big, + Dimension size_med, + Dimension size_small); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScale_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScaleP.h b/libXm/osx/Xm/ScaleP.h new file mode 100644 index 0000000..8af3de7 --- /dev/null +++ b/libXm/osx/Xm/ScaleP.h @@ -0,0 +1,163 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScaleP.h /main/13 1995/10/25 20:17:37 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScaleP_h +#define _XmScaleP_h + + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constraint part record for Scale widget */ + +typedef struct _XmScaleConstraintPart +{ + char unused; +} XmScaleConstraintPart, * XmScaleConstraint; + + +/* New fields for the Scale widget class record */ + +typedef struct +{ + XtPointer extension; /* Pointer to extension record */ +} XmScaleClassPart; + + +/* Full class record declaration */ + +typedef struct _XmScaleClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmScaleClassPart scale_class; +} XmScaleClassRec; + +externalref XmScaleClassRec xmScaleClassRec; + + +/* New fields for the Scale widget record */ + +typedef struct +{ + int value; + int maximum; + int minimum; + unsigned char orientation; + unsigned char processing_direction; + XmString title; + XmFontList font_list; + XFontStruct * font_struct; + Boolean show_value; + short decimal_points; + Dimension scale_width; + Dimension scale_height; + Dimension highlight_thickness; + Boolean highlight_on_enter; + XtCallbackList drag_callback; + XtCallbackList value_changed_callback; + + /* this field is unused since 1.2 and + has a new meaning in 2.0: a bitfield + that carries instance states: FROM_SET_VALUE, etc + The field will be referenced as scale.state_flags + using a define in the .c file */ + /* Note: Instead, last_value is now being used to resolve between + * XmRenderTable & XmFontList when setting up the resource table + */ + int last_value; + + int slider_size; + GC foreground_GC; + int show_value_x; + int show_value_y; + int show_value_width; + int show_value_height; + int scale_multiple; + + XtEnum sliding_mode; + XtEnum slider_visual; + XtEnum slider_mark; + XtEnum show_arrows; + Boolean editable; + + XtCallbackList convert_callback; /* Selection convert callback */ + + Region value_region; +} XmScalePart; + + +#define FROM_SET_VALUE (1<<0) + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmScaleRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmScalePart scale; +} XmScaleRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScaleP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Screen.h b/libXm/osx/Xm/Screen.h new file mode 100644 index 0000000..d4f5ee6 --- /dev/null +++ b/libXm/osx/Xm/Screen.h @@ -0,0 +1,81 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Screen.h /main/9 1995/07/13 17:53:35 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmScreen_h +#define _XmScreen_h + +#include +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsScreen +#define XmIsScreen(w) (XtIsSubclass(w, xmScreenClass)) +#endif /* XmIsScreen */ + +/* Class record constants */ + +typedef struct _XmScreenRec *XmScreen; +typedef struct _XmScreenClassRec *XmScreenClass; +externalref WidgetClass xmScreenClass; + + +/******** Public Function Declarations ********/ + +typedef void (*XmScreenColorProc) (Screen * screen, + XColor *bg_color, XColor *fg_color, + XColor *sel_color, XColor *ts_color, + XColor *bs_color); +typedef Status (*XmAllocColorProc) (Display *display, + Colormap colormap, + XColor *screen_in_out); +extern Widget XmGetXmScreen( + Screen *screen) ; +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScreen_h */ + diff --git a/libXm/osx/Xm/ScreenI.h b/libXm/osx/Xm/ScreenI.h new file mode 100644 index 0000000..9634e33 --- /dev/null +++ b/libXm/osx/Xm/ScreenI.h @@ -0,0 +1,122 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ScreenI.h /main/5 1995/07/13 17:53:44 drk $ */ +#ifndef _XmScreenI_h +#define _XmScreenI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +externalref XrmQuark _XmInvalidCursorIconQuark ; +externalref XrmQuark _XmValidCursorIconQuark ; +externalref XrmQuark _XmNoneCursorIconQuark ; +externalref XrmQuark _XmDefaultDragIconQuark ; +externalref XrmQuark _XmMoveCursorIconQuark ; +externalref XrmQuark _XmCopyCursorIconQuark ; +externalref XrmQuark _XmLinkCursorIconQuark ; + + +/******** Private Function Declarations ********/ + +extern XmDragIconObject _XmScreenGetOperationIcon( + Widget w, +#if NeedWidePrototypes + unsigned int operation) ; +#else + unsigned char operation) ; +#endif /* NeedWidePrototypes */ +extern XmDragIconObject _XmScreenGetStateIcon( + Widget w, +#if NeedWidePrototypes + unsigned int state) ; +#else + unsigned char state) ; +#endif /* NeedWidePrototypes */ +extern XmDragIconObject _XmScreenGetSourceIcon( + Widget w) ; +extern Pixmap _XmAllocScratchPixmap( + XmScreen xmScreen, +#if NeedWidePrototypes + unsigned int depth, + int width, + int height) ; +#else + Cardinal depth, + Dimension width, + Dimension height) ; +#endif /* NeedWidePrototypes */ +extern void _XmFreeScratchPixmap( + XmScreen xmScreen, + Pixmap pixmap) ; +extern XmDragCursorCache * _XmGetDragCursorCachePtr( + XmScreen xmScreen) ; +extern Cursor _XmGetMenuCursorByScreen( + Screen *screen) ; +extern Boolean _XmGetMoveOpaqueByScreen( + Screen *screen) ; +extern unsigned char _XmGetUnpostBehavior( + Widget wid) ; +extern int _XmGetFontUnit( + Screen *screen, + int dimension) ; +extern void _XmScreenRemoveFromCursorCache( + XmDragIconObject icon) ; +extern XmScreenColorProc _XmGetColorCalculationProc( + Screen *screen) ; +extern XmAllocColorProc _XmGetColorAllocationProc( + Screen *screen) ; +extern Pixmap _XmGetInsensitiveStippleBitmap( + Widget w) ; +extern XtEnum _XmGetBitmapConversionModel( + Screen *screen) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScreenI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScreenP.h b/libXm/osx/Xm/ScreenP.h new file mode 100644 index 0000000..9ba0726 --- /dev/null +++ b/libXm/osx/Xm/ScreenP.h @@ -0,0 +1,164 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScreenP.h /main/8 1995/07/13 17:53:51 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmScreenP_h +#define _XmScreenP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmScreenClassPart { + XtPointer extension; +} XmScreenClassPart, *XmScreenClassPartPtr; + +typedef struct _XmScreenClassRec { +/* ObjectClassPart object_class; + XmExtClassPart ext_class; */ + CoreClassPart core_class ; + XmDesktopClassPart desktop_class; + XmScreenClassPart screen_class; +} XmScreenClassRec; + +typedef struct _XmDragCursorRec { + struct _XmDragCursorRec *next; + Cursor cursor; + XmDragIconObject stateIcon; + XmDragIconObject opIcon; + XmDragIconObject sourceIcon; + Boolean dirty; +} XmDragCursorRec, *XmDragCursorCache; + +typedef struct _XmScratchPixmapKeyRec *XmScratchPixmapKey; + +typedef struct _XmScratchPixmapKeyRec { + Cardinal depth; + Dimension width; + Dimension height; +} XmScratchPixmapKeyRec; + +typedef struct { + Boolean mwmPresent; + unsigned short numReparented; + int darkThreshold; + int foregroundThreshold; + int lightThreshold; + XmDragIconObject defaultNoneCursorIcon; + XmDragIconObject defaultValidCursorIcon; + XmDragIconObject defaultInvalidCursorIcon; + XmDragIconObject defaultMoveCursorIcon; + XmDragIconObject defaultCopyCursorIcon; + XmDragIconObject defaultLinkCursorIcon; + XmDragIconObject defaultSourceCursorIcon; + + Cursor nullCursor; + XmDragCursorRec *cursorCache; + Cardinal maxCursorWidth; + Cardinal maxCursorHeight; + + Cursor menuCursor; + unsigned char unpostBehavior; + XFontStruct * font_struct; + int h_unit; + int v_unit; + XtPointer scratchPixmaps; + unsigned char moveOpaque; + XmScreenColorProc color_calc_proc; + XmAllocColorProc color_alloc_proc; + XtEnum bitmap_conversion_model; + + /* to save internally-created XmDragIcons */ + + XmDragIconObject xmStateCursorIcon; + XmDragIconObject xmMoveCursorIcon; + XmDragIconObject xmCopyCursorIcon; + XmDragIconObject xmLinkCursorIcon; + XmDragIconObject xmSourceCursorIcon; + + GC imageGC; /* OBSOLETE FIELD */ + int imageGCDepth; /* OBSOLETE FIELD */ + Pixel imageForeground; /* OBSOLETE FIELD */ + Pixel imageBackground; /* OBSOLETE FIELD */ + + XtPointer screenInfo; /* extension */ + + XtPointer user_data; + + Pixmap insensitive_stipple_bitmap; + +#ifdef DEFAULT_GLYPH_PIXMAP + Pixmap default_glyph_pixmap ; + unsigned int default_glyph_pixmap_width ; + unsigned int default_glyph_pixmap_height ; +#endif + + XtPointer inUsePixmaps; +} XmScreenPart, *XmScreenPartPtr; + +typedef struct _XmScreenInfo { + /* so much for information hiding */ + XtPointer menu_state; /* MenuUtil.c */ + Boolean destroyCallbackAdded; /* ImageCache.c */ +} XmScreenInfo; + +externalref XmScreenClassRec xmScreenClassRec; + +typedef struct _XmScreenRec { +/* ObjectPart object; + XmExtPart ext; */ + CorePart core ; + XmDesktopPart desktop; + XmScreenPart screen; +} XmScreenRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScreenP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScrollBar.h b/libXm/osx/Xm/ScrollBar.h new file mode 100644 index 0000000..2142152 --- /dev/null +++ b/libXm/osx/Xm/ScrollBar.h @@ -0,0 +1,114 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrollBar.h /main/11 1995/07/13 17:54:59 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrollBar_h +#define _XmScrollBar_h + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* ScrollBar Widget */ + +externalref WidgetClass xmScrollBarWidgetClass; + +typedef struct _XmScrollBarClassRec * XmScrollBarWidgetClass; +typedef struct _XmScrollBarRec * XmScrollBarWidget; + +/* ifndef for Fast Subclassing */ + +#ifndef XmIsScrollBar +#define XmIsScrollBar(w) XtIsSubclass(w, xmScrollBarWidgetClass) +#endif /* XmIsScrollBar */ + + +/******** Public Function Declarations ********/ + +extern Widget XmCreateScrollBar( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +extern void XmScrollBarGetValues( + Widget w, + int *value, + int *slider_size, + int *increment, + int *page_increment) ; +extern void XmScrollBarSetValues( + Widget w, + int value, + int slider_size, + int increment, + int page_increment, +#if NeedWidePrototypes + int notify) ; +#else + Boolean notify) ; +#endif /* NeedWidePrototypes */ + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateScrollBar( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedScrollBar( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollBar_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScrollBarP.h b/libXm/osx/Xm/ScrollBarP.h new file mode 100644 index 0000000..8b6d180 --- /dev/null +++ b/libXm/osx/Xm/ScrollBarP.h @@ -0,0 +1,225 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrollBarP.h /main/13 1995/07/13 17:55:17 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrollBarP_h +#define _XmScrollBarP_h + + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Minimum slider width or height */ + +#define MIN_SLIDER_THICKNESS 1 +#define MIN_SLIDER_LENGTH 6 +#define DEFAULT_ROUND_MARK_RADIUS 3 +#define THERMO_MARK_OFFSET 10 + +/* ScrollBar class structure */ + +typedef struct _XmScrollBarClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmScrollBarClassPart; + + +/* Full class record declaration for CheckBox class */ + +typedef struct _XmScrollBarClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmScrollBarClassPart scrollBar_class; +} XmScrollBarClassRec; + +externalref XmScrollBarClassRec xmScrollBarClassRec; + + +/* The ScrollBar instance record */ + +typedef struct _XmScrollBarPart +{ + int value; + int minimum; + int maximum; + int slider_size; + + unsigned char orientation; + unsigned char processing_direction; + XtEnum show_arrows; + + int increment; + int page_increment; + + int initial_delay; + int repeat_delay; + + XtCallbackList value_changed_callback; + XtCallbackList increment_callback; + XtCallbackList decrement_callback; + XtCallbackList page_increment_callback; + XtCallbackList page_decrement_callback; + XtCallbackList to_top_callback; + XtCallbackList to_bottom_callback; + XtCallbackList drag_callback; + + /* obsolete */ + GC unhighlight_GC; + /* Change the logical name of this one in 2.0 */ + + GC foreground_GC; + Pixel trough_color; + + Drawable pixmap; + Boolean sliding_on; + int saved_value; + + XtEnum etched_slider; + /* we used a #define slider_visual to referenced this field in + the c file, etched_slider is not a good name anymore, */ + XtEnum slider_mark; + + unsigned char flags; +/* Values for the XmScrollBarPart flags field */ + +#define FIRST_SCROLL_FLAG (1<<0) +#define VALUE_SET_FLAG (1<<1) +#define END_TIMER (1<<2) +#define ARROW1_AVAILABLE (1<<3) +#define ARROW2_AVAILABLE (1<<4) +#define SLIDER_AVAILABLE (1<<5) +#define KEYBOARD_GRABBED (1<<6) +#define OPERATION_CANCELLED (1<<7) /* last field */ + + unsigned char add_flags; +/* Values for the additionnal flags field */ +#define SNAPPED_OUT (1<<0) + + + unsigned char change_type; + XtIntervalId timer; + + short initial_x; + short initial_y; + short separation_x; + short separation_y; + + short slider_x; + short slider_y; + short slider_width; + short slider_height; + + short slider_area_x; + short slider_area_y; + short slider_area_width; + short slider_area_height; + + short arrow1_x; + short arrow1_y; + unsigned char arrow1_orientation; + Boolean arrow1_selected; + + short arrow2_x; + short arrow2_y; + unsigned char arrow2_orientation; + Boolean arrow2_selected; + + short arrow_width; + short arrow_height; + + /* Obsolete fields as 1.2.0 */ + short arrow1_top_count; + short arrow1_cent_count; + short arrow1_bot_count; + + XRectangle * arrow1_top; + XRectangle * arrow1_cent; + XRectangle * arrow1_bot; + + short arrow2_top_count; + short arrow2_cent_count; + short arrow2_bot_count; + + XRectangle * arrow2_top; + XRectangle * arrow2_cent; + XRectangle * arrow2_bot; + /***********/ + + /* new for 1.2 */ + GC unavailable_GC; + + /* new for 2.0 */ + unsigned short snap_back_multiple; + XtEnum sliding_mode; + Boolean editable; + + Mask dimMask ; /* for the navigator trait */ +} XmScrollBarPart; + + + + +/* Full instance record declaration */ + +typedef struct _XmScrollBarRec +{ + CorePart core; + XmPrimitivePart primitive; + XmScrollBarPart scrollBar; +} XmScrollBarRec; + + +/******** Private Function Declarations ********/ + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollBarP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScrollFramTI.h b/libXm/osx/Xm/ScrollFramTI.h new file mode 100644 index 0000000..2ac0acc --- /dev/null +++ b/libXm/osx/Xm/ScrollFramTI.h @@ -0,0 +1,74 @@ +/* $XConsortium: ScrollFramTI.h /main/5 1995/07/15 20:55:16 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmScrollFrameTI_h +#define _XmScrollFrameTI_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmSFAddNavigator( + Widget sf, + Widget nav, + Mask dimMask, + XmScrollFrameData scroll_frame_data); +extern void _XmSFRemoveNavigator( + Widget sf, + Widget nav, + XmScrollFrameData scroll_frame_data); +extern void _XmSFUpdateNavigatorsValue( + Widget sf, + XmNavigatorData nav_data, + Boolean notify); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollFrameTI_h */ diff --git a/libXm/osx/Xm/ScrollFrameT.h b/libXm/osx/Xm/ScrollFrameT.h new file mode 100644 index 0000000..26ee286 --- /dev/null +++ b/libXm/osx/Xm/ScrollFrameT.h @@ -0,0 +1,100 @@ +/* $TOG: ScrollFrameT.h /main/6 1997/07/25 16:49:23 samborn $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmScrollFrameT_H +#define _XmScrollFrameT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTscrollFrame; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmScrollFrameInitProc)(Widget sf, + XtCallbackProc moveCB, + Widget scrollable); +typedef Boolean (*XmScrollFrameGetInfoProc)(Widget sf, + Cardinal * dimension, + Widget ** nav_list, + Cardinal * num_nav_list); +typedef void (*XmScrollFrameAddNavigatorProc)(Widget sf, + Widget nav, + Mask dimMask); +typedef void (*XmScrollFrameRemoveNavigatorProc)(Widget sf, + Widget nav); +typedef void (*XmScrollFrameUpdateOrigGeomProc)(Widget sf, + Widget child, + XtWidgetGeometry *geom); + + +/* Version 1: added updateOrigGeom */ + +typedef struct _XmScrollFrameTraitRec { + int version; /* 1 */ + XmScrollFrameInitProc init; + XmScrollFrameGetInfoProc getInfo; + XmScrollFrameAddNavigatorProc addNavigator; + XmScrollFrameRemoveNavigatorProc removeNavigator; + XmScrollFrameUpdateOrigGeomProc updateOrigGeom; +} XmScrollFrameTraitRec, *XmScrollFrameTrait; + + +/* This one gets allocated per instance by the scrollFrame + class. It is just a convenient structure reusable by other scrollFrame + and it needs not to be part of the public trait API */ + +typedef struct _XmScrollFrameDataRec { + XtCallbackProc move_cb ; + Widget scrollable ; + Widget * nav_list; + Cardinal num_nav_list ; + Cardinal num_nav_slots; +} XmScrollFrameDataRec, *XmScrollFrameData; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrollFrameT_H */ diff --git a/libXm/osx/Xm/ScrolledW.h b/libXm/osx/Xm/ScrolledW.h new file mode 100644 index 0000000..ded7c51 --- /dev/null +++ b/libXm/osx/Xm/ScrolledW.h @@ -0,0 +1,102 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrolledW.h /main/11 1995/07/13 17:56:18 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrolledWindow_h +#define _XmScrolledWindow_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsScrolledWindow +#define XmIsScrolledWindow(w) XtIsSubclass(w, xmScrolledWindowWidgetClass) +#endif /* XmIsScrolledWindow */ + + +externalref WidgetClass xmScrolledWindowWidgetClass; + +typedef struct _XmScrolledWindowClassRec * XmScrolledWindowWidgetClass; +typedef struct _XmScrolledWindowRec * XmScrolledWindowWidget; + + +/******** Public Function Declarations ********/ + +extern void XmScrolledWindowSetAreas( + Widget w, + Widget hscroll, + Widget vscroll, + Widget wregion) ; +extern Widget XmCreateScrolledWindow( + Widget parent, + char *name, + ArgList args, + Cardinal argCount) ; +extern void XmScrollVisible( + Widget scrw, + Widget wid, + Dimension hor_margin, + Dimension ver_margin) ; + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateScrolledWindow( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedScrolledWindow( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrolledWindow_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScrolledWI.h b/libXm/osx/Xm/ScrolledWI.h new file mode 100644 index 0000000..1ab3a7f --- /dev/null +++ b/libXm/osx/Xm/ScrolledWI.h @@ -0,0 +1,74 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ScrolledWI.h /main/5 1995/07/13 17:56:39 drk $ */ +#ifndef _XmScrolledWI_h +#define _XmScrolledWI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define SWCEPTR(wc) ((XmScrolledWindowClassExt *)(&(((XmScrolledWindowWidgetClass)(wc))->swindow_class.extension))) + +#define _XmGetScrolledWindowClassExtPtr(wc, owner) \ + ((*SWCEPTR(wc) && (((*SWCEPTR(wc))->record_type) == owner))\ + ? SWCEPTR(wc) \ + :((XmScrolledWindowClassExt *) _XmGetClassExtensionPtr(((XmGenericClassExt *)SWCEPTR(wc)), owner))) + + +/******** Private Function Declarations ********/ + +extern void _XmSWNotifyGeoChange(Widget sw, + Widget child, + XtWidgetGeometry *request); +extern Boolean _XmSWGetClipArea(Widget widget, + XRectangle *rect); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrolledWI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ScrolledWP.h b/libXm/osx/Xm/ScrolledWP.h new file mode 100644 index 0000000..4b10a75 --- /dev/null +++ b/libXm/osx/Xm/ScrolledWP.h @@ -0,0 +1,200 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ScrolledWP.h /main/13 1995/09/19 23:08:30 cde-sun $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmScrolledWindowP_h +#define _XmScrolledWindowP_h + +#include +#include + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*XmGetAutoDragRectsProc)(Widget, XRectangle **, Cardinal *) ; + +#define XmInheritGetAutoDragRectsProc ((XmGetAutoDragRectsProc) _XtInherit) + +#define XmScrolledWindowClassExtVersion 1L + +typedef struct _XmScrolledWindowClassExtRec{ + XtPointer next_extension; + XrmQuark record_type; + long version; + Cardinal record_size; + XmGetAutoDragRectsProc get_hor_rects; + XmGetAutoDragRectsProc get_vert_rects; +} XmScrolledWindowClassExtRec, *XmScrolledWindowClassExt; + +/* New fields for the ScrolledWindow widget class record */ +typedef struct { + XtPointer extension; /* extension to new class methods */ +} XmScrolledWindowClassPart; + +/**************** + * + * Class record declaration + * + ****************/ +typedef struct _XmScrolledWindowClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmScrolledWindowClassPart swindow_class; +} XmScrolledWindowClassRec; + +externalref XmScrolledWindowClassRec xmScrolledWindowClassRec; + +/**************** + * + * Scrolled Window instance structure. + * + ****************/ +typedef struct { + + int vmin; /* slider minimum coordinate position */ + int vmax; /* slider maximum coordinate position */ + int vOrigin; /* slider edge location */ + int vExtent; /* slider size */ + + int hmin; /* Same as above for horizontal bar. */ + int hmax; + int hOrigin; + int hExtent; + + Position hsbX,hsbY; + Dimension hsbWidth,hsbHeight; /* Dimensions for the horiz bar */ + + Position vsbX,vsbY; + Dimension vsbWidth,vsbHeight; /* Dimensions for the vertical bar */ + + Position GivenHeight, GivenWidth; + /* these 2 fields are now obsolete, we re-use them for + a different purpose, to track the initial position + of the scrollbars */ +#define sw_prev_x GivenWidth +#define sw_prev_y GivenHeight + + Dimension AreaWidth,AreaHeight; + Dimension WidthPad,HeightPad; + Position XOffset, YOffset; + + Dimension pad; + + Boolean hasHSB; + Boolean hasVSB; + Boolean InInit; + Boolean FromResize; + + unsigned char VisualPolicy; + unsigned char ScrollPolicy; + unsigned char ScrollBarPolicy; + unsigned char Placement; + + XmScrollBarWidget hScrollBar; + XmScrollBarWidget vScrollBar; + XmDrawingAreaWidget ClipWindow; + Widget WorkWindow; + + XtCallbackList traverseObscuredCallback; + + XtEnum auto_drag_model; + XtIntervalId auto_drag_timer; + + Boolean scroll_frame_inited ; + XmScrollFrameData scroll_frame_data ; + + XtPointer auto_drag_rects; + XtPointer auto_drag_closure; +} XmScrolledWindowPart; + + +/************************************************************************ + * * + * Full instance record declaration * + * * + ************************************************************************/ + +typedef struct _XmScrolledWindowRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmScrolledWindowPart swindow; +} XmScrolledWindowRec; + + +/* Frame constraint records */ + +typedef struct _XmScrolledWindowConstraintPart +{ + unsigned char child_type; + Position orig_x; + Position orig_y; +} XmScrolledWindowConstraintPart, * XmScrolledWindowConstraint; + +typedef struct _XmScrolledWindowConstraintRec +{ + XmManagerConstraintPart manager; + XmScrolledWindowConstraintPart swindow; +} XmScrolledWindowConstraintRec, * XmScrolledWindowConstraintPtr; + + +#define DEFAULT_HEIGHT 20 +#define DEFAULT_WIDTH 20 + +#define RESOURCE_DEFAULT (-1) + +#define GetSWConstraint(w) \ + (&((XmScrolledWindowConstraintPtr) (w)->core.constraints)->swindow) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmScrolledWindowP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SelectioB.h b/libXm/osx/Xm/SelectioB.h new file mode 100644 index 0000000..19f4d51 --- /dev/null +++ b/libXm/osx/Xm/SelectioB.h @@ -0,0 +1,113 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SelectioB.h /main/11 1995/07/13 17:57:36 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSelectionBox_h +#define _XmSelectionBox_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Class record constants */ + +externalref WidgetClass xmSelectionBoxWidgetClass; + +typedef struct _XmSelectionBoxClassRec * XmSelectionBoxWidgetClass; +typedef struct _XmSelectionBoxRec * XmSelectionBoxWidget; + + +#ifndef XmIsSelectionBox +#define XmIsSelectionBox(w) (XtIsSubclass (w, xmSelectionBoxWidgetClass)) +#endif + + + +/******** Public Function Declarations ********/ + +extern Widget XmSelectionBoxGetChild( + Widget sb, +#if NeedWidePrototypes + unsigned int which) ; +#else + unsigned char which) ; +#endif /* NeedWidePrototypes */ +extern Widget XmCreateSelectionBox( + Widget p, + String name, + ArgList args, + Cardinal n) ; +extern Widget XmCreateSelectionDialog( + Widget ds_p, + String name, + ArgList sb_args, + Cardinal sb_n) ; +extern Widget XmCreatePromptDialog( + Widget ds_p, + String name, + ArgList sb_args, + Cardinal sb_n) ; + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateSelectionBox( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedSelectionBox( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSelectionBox_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SelectioBI.h b/libXm/osx/Xm/SelectioBI.h new file mode 100644 index 0000000..83458d5 --- /dev/null +++ b/libXm/osx/Xm/SelectioBI.h @@ -0,0 +1,140 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: SelectioBI.h /main/5 1995/07/13 17:57:50 drk $ */ +#ifndef _XmSelectioBI_h +#define _XmSelectioBI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmSelectionBoxCreateListLabel( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateSelectionLabel( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateList( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateText( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateSeparator( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateOkButton( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateApplyButton( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateCancelButton( + XmSelectionBoxWidget sel) ; +extern void _XmSelectionBoxCreateHelpButton( + XmSelectionBoxWidget sel) ; +extern XmGeoMatrix _XmSelectionBoxGeoMatrixCreate( + Widget wid, + Widget instigator, + XtWidgetGeometry *desired) ; +extern Boolean _XmSelectionBoxNoGeoRequest( + XmGeoMatrix geoSpec) ; +extern void _XmSelectionBoxGetSelectionLabelString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetListLabelString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetTextColumns( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetTextString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetListItems( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetListItemCount( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetListVisibleItemCount( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetOkLabelString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetApplyLabelString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetCancelLabelString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxGetHelpLabelString( + Widget wid, + int resource_offset, + XtArgVal *value) ; +extern void _XmSelectionBoxUpOrDown( + Widget wid, + XEvent *event, + String *argv, + Cardinal *argc) ; +extern void _XmSelectionBoxRestore( + Widget wid, + XEvent *event, + String *argv, + Cardinal *argc) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSelectioBI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SelectioBP.h b/libXm/osx/Xm/SelectioBP.h new file mode 100644 index 0000000..04ec276 --- /dev/null +++ b/libXm/osx/Xm/SelectioBP.h @@ -0,0 +1,214 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SelectioBP.h /main/11 1995/07/13 17:58:07 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSelectionBoxP_h +#define _XmSelectionBoxP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Defines for use in allocation geometry matrix. */ + +#define XmSB_MAX_WIDGETS_VERT 8 + +/* Constraint part record for SelectionBox widget */ +typedef struct _XmSelectionBoxConstraintPart +{ + char unused; +} XmSelectionBoxConstraintPart, * XmSelectionBoxConstraint; + +/* New fields for the SelectionBox widget class record */ + +typedef struct +{ + XtCallbackProc list_callback ; + XtPointer extension; /* Pointer to extension record */ +} XmSelectionBoxClassPart; + + +/* Full class record declaration */ + +typedef struct _XmSelectionBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmSelectionBoxClassPart selection_box_class; +} XmSelectionBoxClassRec; + +externalref XmSelectionBoxClassRec xmSelectionBoxClassRec; + + +/* New fields for the SelectionBox widget record */ + +typedef struct +{ + Widget list_label; /* list Label */ + XmString list_label_string; + + Widget list; /* List */ + XmString *list_items; + int list_item_count; + int list_visible_item_count; + int list_selected_item_position; + + Widget selection_label; /* selection Label */ + XmString selection_label_string; + + Widget text; /* Text */ + XmString text_string; + short text_columns; + + Widget work_area; /* other widget */ + + Widget separator; /* separator */ + + Widget ok_button; /* enter button */ + XmString ok_label_string; + + Widget apply_button; /* apply button */ + XmString apply_label_string; + + XmString cancel_label_string; /* cancel button label */ + + Widget help_button; /* help button */ + XmString help_label_string; + + XtCallbackList ok_callback; /* callbacks */ + XtCallbackList apply_callback; + XtCallbackList cancel_callback; + XtCallbackList no_match_callback; + + XtAccelerators text_accelerators; + + Boolean must_match; /* flags */ + Boolean adding_sel_widgets; + Boolean minimize_buttons; + + unsigned char dialog_type; /* prompt or selection */ + unsigned char child_placement; +} XmSelectionBoxPart; + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmSelectionBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmSelectionBoxPart selection_box; +} XmSelectionBoxRec; + + +/* Access Macros */ + +#define SB_ListLabel(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.list_label) +#define SB_List(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.list) +#define SB_SelectionLabel(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.selection_label) +#define SB_Text(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.text) +#define SB_WorkArea(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.work_area) +#define SB_Separator(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.separator) +#define SB_OkButton(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.ok_button) +#define SB_ApplyButton(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.apply_button) +#define SB_CancelButton(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.cancel_button) +#define SB_HelpButton(w) \ + (((XmSelectionBoxWidget) (w))->selection_box.help_button) +#define SB_DefaultButton(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.default_button) +#define SB_MarginHeight(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.margin_height) +#define SB_MarginWidth(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.margin_width) +#define SB_ButtonFontList(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.button_font_list) +#define SB_LabelFontList(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.label_font_list) +#define SB_TextFontList(w) \ + (((XmSelectionBoxWidget) (w))->bulletin_board.text_font_list) +#define SB_StringDirection(w) \ + (XmDirectionToStringDirection\ + (((XmSelectionBoxWidget)(w))->manager.string_direction)) +#define SB_AddingSelWidgets(w) \ + (((XmSelectionBoxWidget) w)->selection_box.adding_sel_widgets) +#define SB_TextAccelerators(w) \ + (((XmSelectionBoxWidget) w)->selection_box.text_accelerators) +#define SB_ListItemCount(w) \ + (((XmSelectionBoxWidget) w)->selection_box.list_item_count) +#define SB_ListSelectedItemPosition(w) \ + (((XmSelectionBoxWidget) w)->selection_box.list_selected_item_position) +#define SB_ListVisibleItemCount(w) \ + (((XmSelectionBoxWidget) w)->selection_box.list_visible_item_count) +#define SB_TextColumns(w) \ + (((XmSelectionBoxWidget) w)->selection_box.text_columns) +#define SB_MinimizeButtons(w) \ + (((XmSelectionBoxWidget) w)->selection_box.minimize_buttons) +#define SB_MustMatch(w) \ + (((XmSelectionBoxWidget) w)->selection_box.must_match) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSelectionBoxP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SeparatoG.h b/libXm/osx/Xm/SeparatoG.h new file mode 100644 index 0000000..d54c150 --- /dev/null +++ b/libXm/osx/Xm/SeparatoG.h @@ -0,0 +1,87 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SeparatoG.h /main/11 1995/07/13 17:58:45 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* Separator Gadget */ +#ifndef _XmSeparatorGadget_h +#define _XmSeparatorGadget_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsSeparatorGadget +#define XmIsSeparatorGadget(w) XtIsSubclass(w, xmSeparatorGadgetClass) +#endif /* XmIsSeparator */ + +externalref WidgetClass xmSeparatorGadgetClass; + +typedef struct _XmSeparatorGadgetClassRec * XmSeparatorGadgetClass; +typedef struct _XmSeparatorGadgetRec * XmSeparatorGadget; +typedef struct _XmSeparatorGCacheObjRec * XmSeparatorGCacheObject; + + +/******** Public Function Declarations ********/ + +Widget XmCreateSeparatorGadget( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +Widget XmVaCreateSeparatorGadget( + Widget parent, + char *name, + ...); + +Widget XmVaCreateManagedSeparatorGadget( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatorGadget_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SeparatoGI.h b/libXm/osx/Xm/SeparatoGI.h new file mode 100644 index 0000000..b7da032 --- /dev/null +++ b/libXm/osx/Xm/SeparatoGI.h @@ -0,0 +1,64 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: SeparatoGI.h /main/5 1995/07/13 17:58:58 drk $ */ +#ifndef _XmSeparatoGI_h +#define _XmSeparatoGI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern int _XmSeparatorCacheCompare(XtPointer A, XtPointer B) ; + +/******** End Private Function Declarations ********/ + + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatoGI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SeparatoGP.h b/libXm/osx/Xm/SeparatoGP.h new file mode 100644 index 0000000..bb5faf5 --- /dev/null +++ b/libXm/osx/Xm/SeparatoGP.h @@ -0,0 +1,183 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SeparatoGP.h /main/11 1995/07/13 17:59:16 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSeparatorGadgetP_h +#define _XmSeparatorGadgetP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*****************************************************************/ +/* The Separator Gadget Cache Object's class and instance records*/ +/*****************************************************************/ + +typedef struct _XmSeparatorGCacheObjClassPart +{ + int foo; +} XmSeparatorGCacheObjClassPart; + + +/* separator cache class record */ +typedef struct _XmSeparatorGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmSeparatorGCacheObjClassPart separator_class_cache; +} XmSeparatorGCacheObjClassRec; + +externalref XmSeparatorGCacheObjClassRec xmSeparatorGCacheObjClassRec; + + +/* The Separator Gadget Cache instance record */ + +typedef struct _XmSeparatorGCacheObjPart +{ + Dimension margin; + unsigned char orientation; + unsigned char separator_type; + GC separator_GC; + + GC background_GC; + GC top_shadow_GC; + GC bottom_shadow_GC; + + Pixel foreground; + Pixel background; + + Pixel top_shadow_color; + Pixmap top_shadow_pixmap; + + Pixel bottom_shadow_color; + Pixmap bottom_shadow_pixmap; +} XmSeparatorGCacheObjPart; + +typedef struct _XmSeparatorGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmSeparatorGCacheObjPart separator_cache; +} XmSeparatorGCacheObjRec; + + +/*****************************************************/ +/* The Separator Widget Class and instance records */ +/*****************************************************/ + +typedef struct _XmSeparatorGadgetClassPart +{ + XtPointer extension; +} XmSeparatorGadgetClassPart; + + +/* Full class record declaration for Separator class */ + +typedef struct _XmSeparatorGadgetClassRec +{ + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmSeparatorGadgetClassPart separator_class; +} XmSeparatorGadgetClassRec; + +externalref XmSeparatorGadgetClassRec xmSeparatorGadgetClassRec; + +typedef struct _XmSeparatorGadgetPart +{ + XmSeparatorGCacheObjPart *cache; + Boolean fill_bg_box; +} XmSeparatorGadgetPart; + +/* Full instance record declaration */ + +typedef struct _XmSeparatorGadgetRec +{ + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmSeparatorGadgetPart separator; +} XmSeparatorGadgetRec; + + +/* MACROS for accessing instance fields*/ +#define SEPG_Margin(w) \ + (((XmSeparatorGadget)(w))->separator.cache->margin) +#define SEPG_Orientation(w) \ + (((XmSeparatorGadget)(w))->separator.cache->orientation) +#define SEPG_SeparatorType(w) \ + (((XmSeparatorGadget)(w))->separator.cache->separator_type) +#define SEPG_SeparatorGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->separator_GC) +#define SEPG_BackgroundGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->background_GC) +#define SEPG_TopShadowGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->top_shadow_GC) +#define SEPG_BottomShadowGC(w) \ + (((XmSeparatorGadget)(w))->separator.cache->bottom_shadow_GC) +#define SEPG_Foreground(w) \ + (((XmSeparatorGadget)(w))->separator.cache->foreground) +#define SEPG_Background(w) \ + (((XmSeparatorGadget)(w))->separator.cache->background) +#define SEPG_TopShadowColor(w) \ + (((XmSeparatorGadget)(w))->separator.cache->top_shadow_color) +#define SEPG_TopShadowPixmap(w) \ + (((XmSeparatorGadget)(w))->separator.cache->top_shadow_pixmap) +#define SEPG_BottomShadowColor(w) \ + (((XmSeparatorGadget)(w))->separator.cache->bottom_shadow_color) +#define SEPG_BottomShadowPixmap(w) \ + (((XmSeparatorGadget)(w))->separator.cache->bottom_shadow_pixmap) + +/* Convenience Macros */ +#define SEPG_Cache(w) \ + (((XmSeparatorGadget)(w))->separator.cache) +#define SEPG_ClassCachePart(w) \ + (((XmSeparatorGadgetClass)xmSeparatorGadgetClass)->gadget_class.cache_part) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatorGadgetP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Separator.h b/libXm/osx/Xm/Separator.h new file mode 100644 index 0000000..14c7f29 --- /dev/null +++ b/libXm/osx/Xm/Separator.h @@ -0,0 +1,85 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Separator.h /main/11 1995/07/13 17:59:45 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* Separator Widget */ +#ifndef _XmSeparator_h +#define _XmSeparator_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsSeparator +#define XmIsSeparator(w) XtIsSubclass(w, xmSeparatorWidgetClass) +#endif /* XmIsSeparator */ + +externalref WidgetClass xmSeparatorWidgetClass; + +typedef struct _XmSeparatorClassRec * XmSeparatorWidgetClass; +typedef struct _XmSeparatorRec * XmSeparatorWidget; + + +/******** Public Function Declarations ********/ + +Widget XmCreateSeparator( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount) ; +Widget XmVaCreateSeparator( + Widget parent, + char *name, + ...); +Widget XmVaCreateManagedSeparator( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparator_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SeparatorP.h b/libXm/osx/Xm/SeparatorP.h new file mode 100644 index 0000000..81c4b2e --- /dev/null +++ b/libXm/osx/Xm/SeparatorP.h @@ -0,0 +1,104 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: SeparatorP.h /main/12 1995/07/13 17:59:57 drk $ */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmSeparatorP_h +#define _XmSeparatorP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Separator class structure */ + +typedef struct _XmSeparatorClassPart +{ + XtPointer extension; /* Pointer to extension record */ +} XmSeparatorClassPart; + + +/* Full class record declaration for Separator class */ + +typedef struct _XmSeparatorClassRec +{ + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmSeparatorClassPart separator_class; +} XmSeparatorClassRec; + +externalref XmSeparatorClassRec xmSeparatorClassRec; + + +/* The Separator instance record */ + +typedef struct _XmSeparatorPart +{ + Dimension margin; + unsigned char orientation; + unsigned char separator_type; + GC separator_GC; +} XmSeparatorPart; + + +/* Full instance record declaration */ + +typedef struct _XmSeparatorRec +{ + CorePart core; + XmPrimitivePart primitive; + XmSeparatorPart separator; +} XmSeparatorRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSeparatorP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ShellEP.h b/libXm/osx/Xm/ShellEP.h new file mode 100644 index 0000000..2265720 --- /dev/null +++ b/libXm/osx/Xm/ShellEP.h @@ -0,0 +1,112 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ShellEP.h /main/9 1995/07/13 18:00:25 drk $ */ +/* +* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmShellEP_h +#define _XmShellEP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define XmInheritEventHandler ((XtEventHandler)_XtInherit) + +#define _XmRAW_MAP 0 +#define _XmPOPUP_MAP 1 +#define _XmMANAGE_MAP 2 + + +#ifndef XmIsShellExt +#define XmIsShellExt(w) XtIsSubclass(w, xmShellExtObjectClass) +#endif /* XmIsShellExt */ + +typedef struct _XmShellExtRec *XmShellExtObject; +typedef struct _XmShellExtClassRec *XmShellExtObjectClass; +externalref WidgetClass xmShellExtObjectClass; + + +typedef struct _XmShellExtClassPart{ + XtEventHandler structureNotifyHandler; + XtPointer extension; +}XmShellExtClassPart, *XmShellExtClassPartPtr; + +typedef struct _XmShellExtClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; + XmShellExtClassPart shell_class; +}XmShellExtClassRec; + +typedef struct { + unsigned long lastConfigureRequest; + Boolean useAsyncGeometry; +} XmShellExtPart, *XmShellExtPartPtr; + +externalref XmShellExtClassRec xmShellExtClassRec; + +typedef struct _XmShellExtRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; + XmShellExtPart shell; +}XmShellExtRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmShellEP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/SlideC.h b/libXm/osx/Xm/SlideC.h new file mode 100644 index 0000000..5267f8d --- /dev/null +++ b/libXm/osx/Xm/SlideC.h @@ -0,0 +1,85 @@ +/** + * + * $Id: SlideC.h,v 1.2 2002/04/01 15:14:20 jimk Exp $ + * + **/ + +#ifndef _SLIDEC_H +#define _SLIDEC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmIsSlideContext +#define XmIsSlideContext(w) XtIsSubclass(w,xmSlideContextClass) +#endif +#ifndef XmNslideFinishCallback +#define XmNslideFinishCallback "slideFinishCallback" +#endif +#ifndef XmCSlideFinishCallback +#define XmCSlideFinishCallback "SlideFinishCallback" +#endif +#ifndef XmNslideMotionCallback +#define XmNslideMotionCallback "slideMotionCallback" +#endif +#ifndef XmCSlideMotionCallback +#define XmCSlideMotionCallback "SlideMotionCallback" +#endif +#ifndef XmNslideWidget +#define XmNslideWidget "slideWidget" +#endif +#ifndef XmCSlideWidget +#define XmCSlideWidget "SlideWidget" +#endif +#ifndef XmNslideInterval +#define XmNslideInterval "slideInterval" +#endif +#ifndef XmCSlideInterval +#define XmCSlideInterval "SlideInterval" +#endif +#ifndef XmNslideDestWidth +#define XmNslideDestWidth "slideDestWidth" +#endif +#ifndef XmCSlideDestWidth +#define XmCSlideDestWidth "SlideDestWidth" +#endif +#ifndef XmNslideDestHeight +#define XmNslideDestHeight "slideDestHeight" +#endif +#ifndef XmCSlideDestHeight +#define XmCSlideDestHeight "SlideDestHeight" +#endif +#ifndef XmNslideDestX +#define XmNslideDestX "slideDestX" +#endif +#ifndef XmCSlideDestX +#define XmCSlideDestX "SlideDestX" +#endif +#ifndef XmNslideDestY +#define XmNslideDestY "slideDestY" +#endif +#ifndef XmCSlideDestY +#define XmCSlideDestY "SlideDestY" +#endif + +extern WidgetClass xmSlideContextWidgetClass; + +typedef struct _XmSlideContextRec *XmSlideContextWidget; +typedef struct _XmSlideContextClassRec *XmSlideContextWidgetClass; + +typedef struct _XmSlideStruct { + Widget w; + XtWidgetGeometry dest; + unsigned long interval; + XtIntervalId id; +} XmSlideStruct, *XmSlidePtr; + +void XmSlide(XmSlidePtr slide_info); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/libXm/osx/Xm/SlideCP.h b/libXm/osx/Xm/SlideCP.h new file mode 100644 index 0000000..5863f12 --- /dev/null +++ b/libXm/osx/Xm/SlideCP.h @@ -0,0 +1,65 @@ +/** + * + * $Id: SlideCP.h,v 1.3 2002/04/01 15:14:21 jimk Exp $ + * + **/ + +#ifndef _SLIDECP_H +#define _SLIDECP_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XmUNSPECIFIED_POSITION +#define XmUNSPECIFIED_POSITION (-1) +#endif + +typedef struct { + XtPointer extension; +} XmSlideContextClassPart; + +typedef struct _XmSlideContextClassRec { + ObjectClassPart object_class; + XmSlideContextClassPart slide_class; +} XmSlideContextClassRec; + +extern XmSlideContextClassRec xmSlideContextClassRec; + +typedef struct _XmSlideContextPart { + XtIntervalId id; + XtCallbackList slideFinishCallback; + XtCallbackList slideMotionCallback; + Widget slide_widget; + unsigned long interval; + Dimension dest_width; + Dimension dest_height; + Position dest_x; + Position dest_y; +} XmSlideContextPart; + +typedef struct _XmSlideContextRec { + ObjectPart object; + XmSlideContextPart slide; +} XmSlideContextRec; + +#define Slide_Id(w) (((XmSlideContextWidget)w)->slide.id) +#define Slide_Widget(w) (((XmSlideContextWidget)w)->slide.slide_widget) +#define Slide_Interval(w) (((XmSlideContextWidget)w)->slide.interval) +#define Slide_DestWidth(w) (((XmSlideContextWidget)w)->slide.dest_width) +#define Slide_DestHeight(w) (((XmSlideContextWidget)w)->slide.dest_height) +#define Slide_DestX(w) (((XmSlideContextWidget)w)->slide.dest_x) +#define Slide_DestY(w) (((XmSlideContextWidget)w)->slide.dest_y) +#define Slide_FinishCallback(w) (((XmSlideContextWidget)w)->slide.slideFinishCallback) +#define Slide_MotionCallback(w) (((XmSlideContextWidget)w)->slide.slideMotionCallback) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libXm/osx/Xm/SpecRenderT.h b/libXm/osx/Xm/SpecRenderT.h new file mode 100644 index 0000000..ade59ca --- /dev/null +++ b/libXm/osx/Xm/SpecRenderT.h @@ -0,0 +1,69 @@ +/* $XConsortium: SpecRenderT.h /main/5 1995/07/15 20:55:28 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmSpecRenderT_H +#define _XmSpecRenderT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTspecifyRenderTable; + +/* Trait structures and typedefs, place typedefs first */ + +typedef XmFontList (*XmSpecRenderGetTableProc)(Widget wid, + XtEnum type); + +/* Version 0: initial release. */ + +typedef struct _XmSpecRenderTraitRec { + int version; /* 0 */ + XmSpecRenderGetTableProc getRenderTable; +} XmSpecRenderTraitRec, *XmSpecRenderTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSpecRenderT_H */ + diff --git a/libXm/osx/Xm/SpinB.h b/libXm/osx/Xm/SpinB.h new file mode 100644 index 0000000..b92becb --- /dev/null +++ b/libXm/osx/Xm/SpinB.h @@ -0,0 +1,59 @@ +/* $XConsortium: SpinB.h /main/6 1995/07/15 20:55:46 drk $ */ +/* + * (c) Copyright 1995 Digital Equipment Corporation. + * (c) Copyright 1995 Hewlett-Packard Company. + * (c) Copyright 1995 International Business Machines Corp. + * (c) Copyright 1995 Sun Microsystems, Inc. + * (c) Copyright 1995 Novell, Inc. + * (c) Copyright 1995 FUJITSU LIMITED. + * (c) Copyright 1995 Hitachi. + */ +/* + * HISTORY + */ + +#ifndef _XmSpinB_h +#define _XmSpinB_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SpinB Widget + */ +externalref WidgetClass xmSpinBoxWidgetClass; + +typedef struct _XmSpinBoxClassRec *XmSpinBoxWidgetClass; +typedef struct _XmSpinBoxRec *XmSpinBoxWidget; + + +/* + * Spin externs for application accessible functions + */ + +Widget XmCreateSpinBox(Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); +Widget XmVaCreateSpinBox( + Widget parent, + char *name, + ...); +Widget XmVaCreateManagedSpinBox( + Widget parent, + char *name, + ...); +int XmSpinBoxValidatePosition( + Widget text_field, + int *position_value); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _SpinB_h */ diff --git a/libXm/osx/Xm/SpinBP.h b/libXm/osx/Xm/SpinBP.h new file mode 100644 index 0000000..bb911cb --- /dev/null +++ b/libXm/osx/Xm/SpinBP.h @@ -0,0 +1,198 @@ +/* $TOG: SpinBP.h /main/7 1999/09/01 17:14:17 mgreess $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmSpinBP_h +#define _XmSpinBP_h + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Spin constraints */ + +typedef struct _XmSpinBoxConstraint +{ + XmStringTable values; /* array of XmString */ + int position; /* position of current selection */ + int num_values; /* number of XmString in the array */ + + int minimum_value; /* parameters for autonumeric mode */ + int maximum_value; + int increment_value; + short decimal_points; + + unsigned char sb_child_type; + unsigned char arrow_sensitivity; + Boolean wrap; + unsigned char position_type; /* governs interpretation of .position: + XmPOSITION_{ARRAY,VALUE} */ +} XmSpinBoxConstraintPart, *XmSpinBoxConstraint; + +typedef struct _XmSpinBoxConstraintRec +{ + XmManagerConstraintPart manager; + XmSpinBoxConstraintPart spinBox; +} XmSpinBoxConstraintRec, *XmSpinBoxConstraintPtr; + +typedef Widget (*XmGetCallbackWidgetProc)(Widget); + +/* Spin class structure */ +typedef struct _XmSpinBoxClassPart +{ + XmGetCallbackWidgetProc get_callback_widget; + XtPointer extension; /* not used */ +} XmSpinBoxClassPart; + + +/* Full class record declaration for Spin class */ + +typedef struct _XmSpinBoxClassRec +{ + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmSpinBoxClassPart spinBox_class; +} XmSpinBoxClassRec; + +externalref XmSpinBoxClassRec xmSpinBoxClassRec; + +/* The Spin instance record */ + +typedef struct _XmSpinBoxPart +{ + Dimension arrow_size; + Dimension margin_width; + Dimension margin_height; + Dimension spacing; + unsigned int initial_delay; + unsigned int repeat_delay; + XtCallbackList modify_verify_cb; /* CB list for new selection */ + XtCallbackList value_changed_cb; /* CB list for new selection */ + XRectangle up_arrow_rect; + XRectangle down_arrow_rect; + Widget textw; /* text widget */ + int boundary; + int last_hit; + int make_change; + Dimension ideal_height; + Dimension ideal_width; + GC arrow_gc; + GC insensitive_gc; + Mask dim_mask; /* for the navigator trait */ + XtIntervalId spin_timer; + Boolean up_arrow_pressed; + Boolean down_arrow_pressed; + unsigned char arrow_layout; + unsigned char default_arrow_sensitivity; + Dimension detail_shadow_thickness; + unsigned char arrow_orientation; /* Xm_ARROWS_{VERTICAL,HORIZONTAL} */ +} XmSpinBoxPart; + + +/* Full instance record declaration */ + +typedef struct _XmSpinBoxRec +{ + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmSpinBoxPart spinBox; +} XmSpinBoxRec; + +/* Macros */ +#define XmRPositionValue "PositionValue" + +#define SB_GetConstraintRec(w) \ + ((XmSpinBoxConstraint)(&((XmSpinBoxConstraintPtr) (w)->core.constraints)->spinBox)) + +#define SB_WithChild(w) \ + (((XmSpinBoxRec *) (w))->spinBox.textw != NULL) + +#define SB_ChildCount(w) \ + (((XmSpinBoxRec *) (w))->composite.num_children) + +#define SB_GetArrowOrientation(w) \ + (((XmSpinBoxRec *) (w))->spinBox.arrow_orientation) + +#define SB_ChildIsNumeric(wc) \ + (((XmSpinBoxConstraint) (wc))->sb_child_type == (unsigned char) XmNUMERIC) + +#define SB_ChildPositionTypeIsValue(wc) \ + (((XmSpinBoxConstraint) (wc))->position_type == \ + (unsigned char) XmPOSITION_VALUE) + +#define SB_ChildMaximumPositionValue(wc) \ + ( ( ((wc) == (XmSpinBoxConstraint) NULL) ? \ + 0 : \ + ( (SB_ChildIsNumeric(wc)) ? \ + (wc)->maximum_value : \ + ( ((wc)->num_values > 0) ? \ + ((wc)->num_values - 1) : \ + 0 \ + ) \ + ) \ + ) \ + ) + +#define SB_ChildMinimumPositionValue(wc) \ + ( ( ((wc) == (XmSpinBoxConstraint) NULL) ? \ + 0 : \ + ( (SB_ChildIsNumeric(wc)) ? \ + (wc)->minimum_value : \ + 0 \ + ) \ + ) \ + ) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _SpinBP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ + + + diff --git a/libXm/osx/Xm/SyntheticI.h b/libXm/osx/Xm/SyntheticI.h new file mode 100644 index 0000000..9ebb105 --- /dev/null +++ b/libXm/osx/Xm/SyntheticI.h @@ -0,0 +1,108 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: SyntheticI.h /main/6 1996/04/18 12:01:21 daniel $ */ +#ifndef _XmSyntheticI_h +#define _XmSyntheticI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for Synthetic.c ********/ + +extern void _XmBuildResources( + XmSyntheticResource **wc_resources_ptr, + int *wc_num_resources_ptr, + XmSyntheticResource *sc_resources, + int sc_num_resources) ; +extern void _XmInitializeSyntheticResources( + XmSyntheticResource *resources, + int num_resources) ; +extern void _XmPrimitiveGetValuesHook( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmGadgetGetValuesHook( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmManagerGetValuesHook( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmPrintShellGetValuesHook( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmExtGetValuesHook( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmExtImportArgs( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmPrimitiveImportArgs( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmGadgetImportArgs( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmGadgetImportSecondaryArgs( + Widget w, + ArgList args, + Cardinal *num_args) ; +extern void _XmManagerImportArgs( + Widget w, + ArgList args, + Cardinal *num_args) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSyntheticI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TabBox.h b/libXm/osx/Xm/TabBox.h new file mode 100644 index 0000000..a9e6868 --- /dev/null +++ b/libXm/osx/Xm/TabBox.h @@ -0,0 +1,72 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ + +#ifndef _XmTabBox_h_ +#define _XmTabBox_h_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmTabBoxRec *XmTabBoxWidget; +typedef struct _XmTabBoxClassRec *XmTabBoxWidgetClass; + +extern WidgetClass xmTabBoxWidgetClass; + +#ifndef XmIsTabBox +#define XmIsTabBox(w) XtIsSubclass(w, xmTabBoxWidgetClass) +#endif /* XmIsTabBox */ + +Widget XmCreateTabBox(Widget, String, ArgList, Cardinal); +int XmTabBoxGetIndex(Widget, int, int); +int XmTabBoxGetNumRows(Widget); +int XmTabBoxGetNumColumns(Widget); +int XmTabBoxGetNumTabs(Widget); +int XmTabBoxGetTabRow(Widget, int); +int XmTabBoxXYToIndex(Widget, int, int); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __TabBox_h__ */ diff --git a/libXm/osx/Xm/TabBoxP.h b/libXm/osx/Xm/TabBoxP.h new file mode 100644 index 0000000..2049643 --- /dev/null +++ b/libXm/osx/Xm/TabBoxP.h @@ -0,0 +1,212 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _XmTabBoxP_h_ +#define _XmTabBoxP_h_ + + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct _XmTabBoxClassPart { + XtPointer extension; +} XmTabBoxClassPart; + +typedef struct _XmTabBoxClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmTabBoxClassPart tab_box_class; +} XmTabBoxClassRec; + +externalref XmTabBoxClassRec xmTabBoxClassRec; + +typedef struct _XmTabBoxPart { + XmFontList font_list; + XmTabStyle tab_style; + XmTabMode tab_mode; + XmTabbedStackList tab_list; + XmTabOrientation tab_orientation; + XmTabEdge tab_edge; + XmTabArrowPlacement arrow_placement; + unsigned char orientation; + Dimension tab_margin_width; + Dimension tab_margin_height; + Dimension tab_label_spacing; + Dimension highlight_thickness; + int tab_corner_percent; + Dimension tab_offset; + Boolean uniform_tab_size; + Boolean tab_auto_select; + Boolean use_image_cache; + + Pixel select_color; + Pixmap select_pixmap; + + int num_stacks; + int selected_index; + int traversal_index; + + Boolean stacked_effect; + + XtCallbackList select_callback; + XtCallbackList unselect_callback; + + /* Private */ + GC _tab_GC; + GC _text_GC; + Pixmap _gray_stipple; + XRectangle *_wanted; + int _num_wanted; + struct _XmTabRect *_actual; + int _num_actual; + int _selected; + int _keyboard; + + int _armed_tab; + + int _scroll_x; + XRectangle _scroll_rect; + + int _corner_size; + + int _num_columns; + int _num_rows; + + /* + * The following data memebers are used for the rotation of + * the pixmap and the text. + */ + int _bitmap_width; + int _bitmap_height; + Pixmap _bitmap; + + GC _zero_GC; + GC _one_GC; + + Widget _canvas; + Widget _left_arrow; + Widget _right_arrow; + + Boolean _inited; + + struct _XmCache *_cache; + int _cache_size; + + Boolean check_set_render_table; +} XmTabBoxPart; + +/* + * Access macros for instance variables + */ + +#define XmTabBox_font_list(w) (((XmTabBoxWidget)(w))->tab_box.font_list) +#define XmTabBox_tab_style(w) (((XmTabBoxWidget)(w))->tab_box.tab_style) +#define XmTabBox_tab_mode(w) (((XmTabBoxWidget)(w))->tab_box.tab_mode) +#define XmTabBox_tab_list(w) (((XmTabBoxWidget)(w))->tab_box.tab_list) +#define XmTabBox_tab_orientation(w) (((XmTabBoxWidget)(w))->tab_box.tab_orientation) +#define XmTabBox_tab_edge(w) (((XmTabBoxWidget)(w))->tab_box.tab_edge) +#define XmTabBox_arrow_placement(w) (((XmTabBoxWidget)(w))->tab_box.arrow_placement) +#define XmTabBox_orientation(w) (((XmTabBoxWidget)(w))->tab_box.orientation) +#define XmTabBox_tab_margin_width(w) (((XmTabBoxWidget)(w))->tab_box.tab_margin_width) +#define XmTabBox_tab_margin_height(w) (((XmTabBoxWidget)(w))->tab_box.tab_margin_height) +#define XmTabBox_tab_label_spacing(w) (((XmTabBoxWidget)(w))->tab_box.tab_label_spacing) +#define XmTabBox_highlight_thickness(w) (((XmTabBoxWidget)(w))->tab_box.highlight_thickness) +#define XmTabBox_tab_corner_percent(w) (((XmTabBoxWidget)(w))->tab_box.tab_corner_percent) +#define XmTabBox_tab_offset(w) (((XmTabBoxWidget)(w))->tab_box.tab_offset) +#define XmTabBox_uniform_tab_size(w) (((XmTabBoxWidget)(w))->tab_box.uniform_tab_size) +#define XmTabBox_tab_auto_select(w) (((XmTabBoxWidget)(w))->tab_box.tab_auto_select) +#define XmTabBox_use_image_cache(w) (((XmTabBoxWidget)(w))->tab_box.use_image_cache) +#define XmTabBox_select_color(w) (((XmTabBoxWidget)(w))->tab_box.select_color) +#define XmTabBox_select_pixmap(w) (((XmTabBoxWidget)(w))->tab_box.select_pixmap) +#define XmTabBox_num_stacks(w) (((XmTabBoxWidget)(w))->tab_box.num_stacks) +#define XmTabBox_selected_index(w) (((XmTabBoxWidget)(w))->tab_box.selected_index) +#define XmTabBox_traversal_index(w) (((XmTabBoxWidget)(w))->tab_box.traversal_index) +#define XmTabBox_stacked_effect(w) (((XmTabBoxWidget)(w))->tab_box.stacked_effect) +#define XmTabBox_select_callback(w) (((XmTabBoxWidget)(w))->tab_box.select_callback) +#define XmTabBox_unselect_callback(w) (((XmTabBoxWidget)(w))->tab_box.unselect_callback) +#define XmTabBox__tab_GC(w) (((XmTabBoxWidget)(w))->tab_box._tab_GC) +#define XmTabBox__text_GC(w) (((XmTabBoxWidget)(w))->tab_box._text_GC) +#define XmTabBox__gray_stipple(w) (((XmTabBoxWidget)(w))->tab_box._gray_stipple) +#define XmTabBox__wanted(w) (((XmTabBoxWidget)(w))->tab_box._wanted) +#define XmTabBox__num_wanted(w) (((XmTabBoxWidget)(w))->tab_box._num_wanted) +#define XmTabBox__actual(w) (((XmTabBoxWidget)(w))->tab_box._actual) +#define XmTabBox__num_actual(w) (((XmTabBoxWidget)(w))->tab_box._num_actual) +#define XmTabBox__selected(w) (((XmTabBoxWidget)(w))->tab_box._selected) +#define XmTabBox__keyboard(w) (((XmTabBoxWidget)(w))->tab_box._keyboard) +#define XmTabBox__armed_tab(w) (((XmTabBoxWidget)(w))->tab_box._armed_tab) +#define XmTabBox__scroll_x(w) (((XmTabBoxWidget)(w))->tab_box._scroll_x) +#define XmTabBox__scroll_rect(w) (((XmTabBoxWidget)(w))->tab_box._scroll_rect) +#define XmTabBox__corner_size(w) (((XmTabBoxWidget)(w))->tab_box._corner_size) +#define XmTabBox__num_columns(w) (((XmTabBoxWidget)(w))->tab_box._num_columns) +#define XmTabBox__num_rows(w) (((XmTabBoxWidget)(w))->tab_box._num_rows) +#define XmTabBox__bitmap_width(w) (((XmTabBoxWidget)(w))->tab_box._bitmap_width) +#define XmTabBox__bitmap_height(w) (((XmTabBoxWidget)(w))->tab_box._bitmap_height) +#define XmTabBox__bitmap(w) (((XmTabBoxWidget)(w))->tab_box._bitmap) +#define XmTabBox__zero_GC(w) (((XmTabBoxWidget)(w))->tab_box._zero_GC) +#define XmTabBox__one_GC(w) (((XmTabBoxWidget)(w))->tab_box._one_GC) +#define XmTabBox__canvas(w) (((XmTabBoxWidget)(w))->tab_box._canvas) +#define XmTabBox__left_arrow(w) (((XmTabBoxWidget)(w))->tab_box._left_arrow) +#define XmTabBox__right_arrow(w) (((XmTabBoxWidget)(w))->tab_box._right_arrow) +#define XmTabBox__inited(w) (((XmTabBoxWidget)(w))->tab_box._inited) +#define XmTabBox__cache(w) (((XmTabBoxWidget)(w))->tab_box._cache) +#define XmTabBox__cache_size(w) (((XmTabBoxWidget)(w))->tab_box._cache_size) + +typedef struct _XmTabBoxRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmTabBoxPart tab_box; +} XmTabBoxRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* __TabBoxP_h__ */ diff --git a/libXm/osx/Xm/TabList.h b/libXm/osx/Xm/TabList.h new file mode 100644 index 0000000..0a81672 --- /dev/null +++ b/libXm/osx/Xm/TabList.h @@ -0,0 +1,182 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +#ifndef _Xm_TabList_h_ +#define _Xm_TabList_h_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmCOLOR_DYNAMIC ((Pixel)-1) +#define XmPIXMAP_DYNAMIC ((Pixmap) 3) +#define XmTAB_LAST_POSITION -1 +#define XmTAB_NOT_FOUND -1 + +#define XmTAB_LABEL_STRING (1L<<0) +#define XmTAB_LABEL_PIXMAP (1L<<1) +#define XmTAB_PIXMAP_PLACEMENT (1L<<2) +#define XmTAB_BACKGROUND (1L<<3) +#define XmTAB_FOREGROUND (1L<<4) +#define XmTAB_VALUE_MODE (1L<<5) +#define XmTAB_LABEL_ALIGNMENT (1L<<6) +#define XmTAB_STRING_DIRECTION (1L<<7) +#define XmTAB_BACKGROUND_PIXMAP (1L<<8) +#define XmTAB_SENSITIVE (1L<<9) +#define XmTAB_ALL_FLAGS (XmTAB_LABEL_STRING|XmTAB_LABEL_PIXMAP|\ + XmTAB_PIXMAP_PLACEMENT|XmTAB_BACKGROUND|\ + XmTAB_FOREGROUND|XmTAB_VALUE_MODE|\ + XmTAB_LABEL_ALIGNMENT|XmTAB_STRING_DIRECTION|\ + XmTAB_BACKGROUND_PIXMAP|XmTAB_SENSITIVE) + +typedef struct _XmTabAttributeRec { + XmString label_string; /* default: NULL */ + XmStringDirection string_direction; /* default: XmSTRING_DIRECTION_L_TO_R*/ + Pixmap label_pixmap; /* default: XmUNSPECIFIED_PIXMAP */ + int label_alignment; /* default: XmALIGNEMENT_CENTER */ + XmPixmapPlacement pixmap_placement; /* default: XmPIXMAP_RIGHT */ + Pixel foreground; /* default: XmCOLOR_DYNAMIC */ + Pixel background; /* default: XmCOLOR_DYNAMIC */ + Pixmap background_pixmap;/* default: XmPIXMAP_DYNAMIC */ + Boolean sensitive; /* default: True */ + XmTabValueMode value_mode; /* default: XmTAB_VALUE_COPY */ +} XmTabAttributeRec, * XmTabAttributes; + +typedef struct _XmTabbedStackListRec *XmTabbedStackList; + +XmTabbedStackList XmTabbedStackListCreate( +#ifndef _NO_PROTO +void +#endif +); + +XmTabbedStackList XmTabbedStackListCopy( +#ifndef _NO_PROTO +XmTabbedStackList +#endif +); + +void XmTabbedStackListFree( +#ifndef _NO_PROTO +XmTabbedStackList +#endif +); + +void XmTabbedStackListRemove( +#ifndef _NO_PROTO +XmTabbedStackList, int +#endif +); + +int XmTabbedStackListInsert( +#ifndef _NO_PROTO +XmTabbedStackList, int, XtValueMask, XmTabAttributes +#endif +); + +int XmTabbedStackListAppend( +#ifndef _NO_PROTO +XmTabbedStackList, XtValueMask, XmTabAttributes +#endif +); + +void XmTabbedStackListModify( +#ifndef _NO_PROTO +XmTabbedStackList, int, XtValueMask, XmTabAttributes +#endif +); + +void XmTabbedStackListQuery( +#ifndef _NO_PROTO +XmTabbedStackList, int, XmTabAttributes +#endif +); + +int XmTabbedStackListFind( +#ifndef _NO_PROTO +XmTabbedStackList, XmString +#endif +); + +void XmTabbedStackListSimpleRemove( +#ifndef _NO_PROTO +XmTabbedStackList, XmString +#endif +); + +int XmTabbedStackListSimpleInsert( +#ifndef _NO_PROTO +XmTabbedStackList, int, XmString +#endif +); + +int XmTabbedStackListSimpleAppend( +#ifndef _NO_PROTO +XmTabbedStackList, XmString +#endif +); + +void XmTabbedStackListSimpleModify( +#ifndef _NO_PROTO +XmTabbedStackList, int, XmString +#endif +); + +XmString XmTabbedStackListSimpleQuery( +#ifndef _NO_PROTO +XmTabbedStackList, int +#endif +); + +XmTabResult XmTabbedStackListCompare( +#ifndef _NO_PROTO +XmTabbedStackList, XmTabbedStackList +#endif +); + +void XmTabAttibutesFree( +#ifndef _NO_PROTO +XmTabAttributes +#endif +); + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + + +#endif diff --git a/libXm/osx/Xm/TabStack.h b/libXm/osx/Xm/TabStack.h new file mode 100644 index 0000000..86d4381 --- /dev/null +++ b/libXm/osx/Xm/TabStack.h @@ -0,0 +1,45 @@ +#ifndef __XmTabStack_h__ +#define __XmTabStack_h__ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmTabStackRec *XmTabStackWidget; +typedef struct _XmTabStackClassRec *XmTabStackWidgetClass; +extern WidgetClass xmTabStackWidgetClass; + +#ifndef XmIsTabStack +#define XmIsTabStack(w) XtIsSubclass(w, xmTabStackWidgetClass) +#endif /* XmIsTabStack */ + +extern Widget XmCreateTabStack(Widget, String, ArgList, Cardinal); +extern Widget XmTabStackGetSelectedTab(Widget); +extern void XmTabStackSelectTab(Widget, Boolean); +extern Widget XmTabStackIndexToWidget(Widget, int); +extern Widget XmTabStackXYToWidget(Widget, int, int); + +/* + * Variable argument list functions + */ + +extern Widget XmVaCreateTabStack( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedTabStack( + Widget parent, + char *name, + ...); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + + +#endif /* __TabStack_h__ */ diff --git a/libXm/osx/Xm/TabStackP.h b/libXm/osx/Xm/TabStackP.h new file mode 100644 index 0000000..3beec45 --- /dev/null +++ b/libXm/osx/Xm/TabStackP.h @@ -0,0 +1,246 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ + +/* (c) Copyright 2002, Integrated Computer Solutions Cambridge, MASS. */ + +#ifndef _XmTabStackP_h_ +#define _XmTabStackP_h_ + + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmTabStackClassPart { + String drag_translations; + XtPointer extension; +} XmTabStackClassPart; + + +typedef struct _XmTabStackClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + XmBulletinBoardClassPart bulletin_board_class; + XmTabStackClassPart tab_stack_class; +} XmTabStackClassRec; +externalref XmTabStackClassRec xmTabStackClassRec; + +typedef struct _XmTabStackPart { + /* Resources for the Tab Stack */ + + XtCallbackList tab_select_callback; + + /* Resource to pass down to Tab Box */ + XmFontList font_list; + XmTabStyle tab_style; + XmTabMode tab_mode; + XmTabSide tab_side; + XmTabOrientation tab_orientation; + + XmString tear_off_label; + + Boolean allow_tear_offs; + Boolean uniform_tab_size; + Boolean use_image_cache; + Boolean stacked_effect; + Boolean tab_auto_select; + + Dimension tab_margin_width; + Dimension tab_margin_height; + Dimension tab_label_spacing; + Dimension tab_offset; + Dimension highlight_thickness; + + Pixel select_color; + Pixel select_pixmap; + + int tab_corner_percent; + + Widget tab_box; + + /* Private Values */ + + XmTabbedStackList _tab_list; + + XRectangle _size; + + Widget _active_child; + GC _gc; + + Boolean _inited; + Boolean _set_tab_list; + + Widget _menu; + Widget _tear_off_button; + + /* Drag And Drop Stuff */ + Pixmap _source_pixmap; + Pixmap _source_mask; + Pixmap _invalid_pixmap; + Pixmap _invalid_mask; + Widget _source_icon; + Widget _invalid_icon; + + Widget _selected_tab; /* used within realize method */ + Boolean _selected_notify; /* used within realize method */ + + Boolean do_notify; /* for notify XmNtabSelectedCallback */ + + Boolean check_set_render_table; + +} XmTabStackPart; + +#define XmTabStack_tab_select_callback(w) (((XmTabStackWidget)(w))->tab_stack.tab_select_callback) +#define XmTabStack_font_list(w) (((XmTabStackWidget)(w))->tab_stack.font_list) +#define XmTabStack_tab_style(w) (((XmTabStackWidget)(w))->tab_stack.tab_style) +#define XmTabStack_tab_mode(w) (((XmTabStackWidget)(w))->tab_stack.tab_mode) +#define XmTabStack_tab_side(w) (((XmTabStackWidget)(w))->tab_stack.tab_side) +#define XmTabStack_tab_orientation(w) (((XmTabStackWidget)(w))->tab_stack.tab_orientation) +#define XmTabStack_tear_off_label(w) (((XmTabStackWidget)(w))->tab_stack.tear_off_label) +#define XmTabStack_allow_tear_offs(w) (((XmTabStackWidget)(w))->tab_stack.allow_tear_offs) +#define XmTabStack_uniform_tab_size(w) (((XmTabStackWidget)(w))->tab_stack.uniform_tab_size) +#define XmTabStack_use_image_cache(w) (((XmTabStackWidget)(w))->tab_stack.use_image_cache) +#define XmTabStack_stacked_effect(w) (((XmTabStackWidget)(w))->tab_stack.stacked_effect) +#define XmTabStack_tab_auto_select(w) (((XmTabStackWidget)(w))->tab_stack.tab_auto_select) +#define XmTabStack_tab_margin_width(w) (((XmTabStackWidget)(w))->tab_stack.tab_margin_width) +#define XmTabStack_tab_margin_height(w) (((XmTabStackWidget)(w))->tab_stack.tab_margin_height) +#define XmTabStack_tab_label_spacing(w) (((XmTabStackWidget)(w))->tab_stack.tab_label_spacing) +#define XmTabStack_tab_offset(w) (((XmTabStackWidget)(w))->tab_stack.tab_offset) +#define XmTabStack_highlight_thickness(w) (((XmTabStackWidget)(w))->tab_stack.highlight_thickness) +#define XmTabStack_select_color(w) (((XmTabStackWidget)(w))->tab_stack.select_color) +#define XmTabStack_select_pixmap(w) (((XmTabStackWidget)(w))->tab_stack.select_pixmap) +#define XmTabStack_tab_corner_percent(w) (((XmTabStackWidget)(w))->tab_stack.tab_corner_percent) +#define XmTabStack_tab_box(w) (((XmTabStackWidget)(w))->tab_stack.tab_box) +#define XmTabStack__tab_list(w) (((XmTabStackWidget)(w))->tab_stack._tab_list) +#define XmTabStack__size(w) (((XmTabStackWidget)(w))->tab_stack._size) +#define XmTabStack__active_child(w) (((XmTabStackWidget)(w))->tab_stack._active_child) +#define XmTabStack__gc(w) (((XmTabStackWidget)(w))->tab_stack._gc) +#define XmTabStack__inited(w) (((XmTabStackWidget)(w))->tab_stack._inited) +#define XmTabStack__set_tab_list(w) (((XmTabStackWidget)(w))->tab_stack._set_tab_list) +#define XmTabStack__menu(w) (((XmTabStackWidget)(w))->tab_stack._menu) +#define XmTabStack__tear_off_button(w) (((XmTabStackWidget)(w))->tab_stack._tear_off_button) +#define XmTabStack__source_pixmap(w) (((XmTabStackWidget)(w))->tab_stack._source_pixmap) +#define XmTabStack__source_mask(w) (((XmTabStackWidget)(w))->tab_stack._source_mask) +#define XmTabStack__invalid_pixmap(w) (((XmTabStackWidget)(w))->tab_stack._invalid_pixmap) +#define XmTabStack__invalid_mask(w) (((XmTabStackWidget)(w))->tab_stack._invalid_mask) +#define XmTabStack__source_icon(w) (((XmTabStackWidget)(w))->tab_stack._source_icon) +#define XmTabStack__invalid_icon(w) (((XmTabStackWidget)(w))->tab_stack._invalid_icon) +#define XmTabStack__selected_tab(w) (((XmTabStackWidget)(w))->tab_stack._selected_tab) +#define XmTabStack__selected_notify(w) (((XmTabStackWidget)(w))->tab_stack._selected_notify) +#define XmTabStack_do_notify(w) (((XmTabStackWidget)(w))->tab_stack.do_notify) + +typedef struct _XmTabStackRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + XmBulletinBoardPart bulletin_board; + XmTabStackPart tab_stack; +} XmTabStackRec; + +typedef struct _XmTabStackConstraintPart { + XmString tab_label_string; + XmStringDirection tab_string_direction; + unsigned char tab_alignment; + Pixmap tab_label_pixmap; + XmPixmapPlacement tab_pixmap_placement; + Pixel tab_foreground; + Pixel tab_background; + Pixmap tab_background_pixmap; + Boolean free_tab_pixmap; + + Boolean tear_off_enabled; + + /* Private Memebers */ + int index; + Dimension width; + Dimension height; +} XmTabStackConstraintPart; + +#define XmTabStackC_tab_label_string(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_label_string) +#define XmTabStackC_tab_string_direction(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_string_direction) +#define XmTabStackC_tab_alignment(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_alignment) +#define XmTabStackC_tab_label_pixmap(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_label_pixmap) +#define XmTabStackC_tab_pixmap_placement(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_pixmap_placement) +#define XmTabStackC_tab_foreground(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_foreground) +#define XmTabStackC_tab_background(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_background) +#define XmTabStackC_tab_background_pixmap(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tab_background_pixmap) +#define XmTabStackC_free_tab_pixmap(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.free_tab_pixmap) +#define XmTabStackC_tear_off_enabled(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.tear_off_enabled) +#define XmTabStackC_index(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.index) +#define XmTabStackC_width(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.width) +#define XmTabStackC_height(w) \ + (((XmTabStackConstraintPtr)((w)->core.constraints))->tab_stack.height) + +typedef struct _XmTabStackConstraintRec { + XmManagerConstraintPart manager; + XmTabStackConstraintPart tab_stack; +} XmTabStackConstraintRec, * XmTabStackConstraintPtr; + +#define XmNillegalUniformTabSizeMsg \ +"XmNuniformTabSize must be true if XmNtabMode is XmTABS_STACKED or\n\ +XmTABS_STACKED_STATIC." + +#define XmTabStackIndex (XmBulletinBoardIndex + 1) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + + +#endif /* _TabStackP_h_ */ diff --git a/libXm/osx/Xm/TakesDefT.h b/libXm/osx/Xm/TakesDefT.h new file mode 100644 index 0000000..cc8ea9e --- /dev/null +++ b/libXm/osx/Xm/TakesDefT.h @@ -0,0 +1,70 @@ +/* $XConsortium: TakesDefT.h /main/5 1995/07/15 20:55:59 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmTakesDefaultT_H +#define _XmTakesDefaultT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTtakesDefault; + +/* Trait structures and typedefs, place typedefs first */ + +typedef void (*XmTakesDefaultNotifyProc)(Widget w, + XtEnum state); + +/* Version 0: initial release. */ + +typedef struct _XmTakesDefaultTraitRec { + int version; /* 0 */ + XmTakesDefaultNotifyProc showAsDefault; +} XmTakesDefaultTraitRec, *XmTakesDefaultTrait; + +enum {XmDEFAULT_READY, XmDEFAULT_ON, XmDEFAULT_OFF, XmDEFAULT_FORGET} ; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTakesDefaultT_H */ diff --git a/libXm/osx/Xm/TearOffBP.h b/libXm/osx/Xm/TearOffBP.h new file mode 100644 index 0000000..08e0883 --- /dev/null +++ b/libXm/osx/Xm/TearOffBP.h @@ -0,0 +1,131 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TearOffBP.h /main/11 1995/10/25 20:20:56 cde-sun $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* + * TearOffBP.h - Private definitions for TearOffButton widget + * (Used by RowColumn Tear Off Menupanes) + * + */ + +#ifndef _XmTearOffBP_h +#define _XmTearOffBP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************** + * + * TearOffButton Widget Private Data + * + *****************************************************************************/ + +/* New fields for the TearOffButton widget class record */ +typedef struct _XmTearOffButtonClassPart +{ + String translations; +} XmTearOffButtonClassPart; + +/* Full Class record declaration */ +typedef struct _XmTearOffButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmPushButtonClassPart pushbutton_class; + XmTearOffButtonClassPart tearoffbutton_class; +} XmTearOffButtonClassRec; + +typedef struct _XmTearOffButtonClassRec *XmTearOffButtonWidgetClass; + +externalref XmTearOffButtonClassRec xmTearOffButtonClassRec; + +/* New fields for the TearOffButton widget record */ +typedef struct { + Dimension margin; + unsigned char orientation; + unsigned char separator_type; + GC separator_GC; + Boolean set_recompute_size; +} XmTearOffButtonPart; + +/***************************************************************************** + * + * Full instance record declaration + * + ****************************************************************************/ + +typedef struct _XmTearOffButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmPushButtonPart pushbutton; + XmTearOffButtonPart tear_off_button; +} XmTearOffButtonRec; + +typedef struct _XmTearOffButtonRec *XmTearOffButtonWidget; + +/* Class Record Constant */ + +externalref WidgetClass xmTearOffButtonWidgetClass; + +#ifndef XmIsTearOffButton +#define XmIsTearOffButton(w) XtIsSubclass(w, xmTearOffButtonWidgetClass) +#endif /* XmIsTearOffButton */ + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTearOffButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TearOffI.h b/libXm/osx/Xm/TearOffI.h new file mode 100644 index 0000000..9c2bd93 --- /dev/null +++ b/libXm/osx/Xm/TearOffI.h @@ -0,0 +1,97 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TearOffI.h /main/5 1995/07/13 18:02:12 drk $ */ +#ifndef _XmTearOffI_h +#define _XmTearOffI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmTearOffBtnDownEventHandler( + Widget reportingWidget, + XtPointer data, + XEvent *event, + Boolean *cont) ; +extern void _XmTearOffBtnUpEventHandler( + Widget reportingWidget, + XtPointer data, + XEvent *event, + Boolean *cont) ; +extern void _XmDestroyTearOffShell( + Widget wid) ; +extern void _XmDismissTearOff( + Widget shell, + XtPointer closure, + XtPointer call_data) ; +extern void _XmTearOffInitiate( + Widget wid, + XEvent *event) ; +extern void _XmAddTearOffEventHandlers( + Widget wid) ; +extern Boolean _XmIsTearOffShellDescendant( + Widget wid) ; +extern void _XmLowerTearOffObscuringPoppingDownPanes( + Widget ancestor, + Widget tearOff ) ; +extern void _XmRestoreExcludedTearOffToToplevelShell( + Widget wid, + XEvent *event) ; +extern void _XmRestoreTearOffToToplevelShell( + Widget wid, + XEvent *event) ; +extern void _XmRestoreTearOffToMenuShell( + Widget wid, + XEvent *event) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTearOffI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TearOffP.h b/libXm/osx/Xm/TearOffP.h new file mode 100644 index 0000000..c32a15d --- /dev/null +++ b/libXm/osx/Xm/TearOffP.h @@ -0,0 +1,62 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TearOffP.h /main/8 1995/10/25 20:21:05 cde-sun $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +#ifndef _XmTearOffP_h +#define _XmTearOffP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmExcludedParentPaneRec +{ + short pane_list_size; + Widget *pane; + short num_panes; +} XmExcludedParentPaneRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTearOffP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Text.h b/libXm/osx/Xm/Text.h new file mode 100644 index 0000000..eb4f105 --- /dev/null +++ b/libXm/osx/Xm/Text.h @@ -0,0 +1,281 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: Text.h /main/15 1996/01/29 13:20:20 daniel $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmText_h +#define _XmText_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* -------------- * + * type defines * + * -------------- */ +typedef struct _XmTextSourceRec *XmTextSource; +typedef struct _XmTextClassRec *XmTextWidgetClass; +typedef struct _XmTextRec *XmTextWidget; + +/* -------------- * + * extern class * + * -------------- */ +externalref WidgetClass xmTextWidgetClass; + + +/* --------------------------------------- * + * text widget fast subclassing fallback * + * --------------------------------------- */ + +#ifndef XmIsText +#define XmIsText(w) XtIsSubclass(w, xmTextWidgetClass) +#endif /* XmIsText */ + + +/* ----------------------------------- * + * text widget public functions * + * ----------------------------------- */ + +/******** Public Function Declarations ********/ + +extern void XmTextSetHighlight( + Widget w, + XmTextPosition left, + XmTextPosition right, + XmHighlightMode mode); +extern Widget XmCreateScrolledText( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); +extern Widget XmCreateText( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); +extern Widget XmVaCreateText( + Widget parent, + char *name, + ...); +extern Widget XmVaCreateManagedText( + Widget parent, + char *name, + ...); +extern int XmTextGetSubstring( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + char *buffer); +extern int XmTextGetSubstringWcs( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + wchar_t *buffer); +extern char * XmTextGetString( + Widget widget); +extern wchar_t * XmTextGetStringWcs( + Widget widget); +extern XmTextPosition XmTextGetLastPosition( + Widget widget); +extern void XmTextSetString( + Widget widget, + char *value); +extern void XmTextSetStringWcs( + Widget widget, + wchar_t *wc_value); +extern void XmTextReplace( + Widget widget, + XmTextPosition frompos, + XmTextPosition topos, + char *value); +extern void XmTextReplaceWcs( + Widget widget, + XmTextPosition frompos, + XmTextPosition topos, + wchar_t *value); +extern void XmTextInsert( + Widget widget, + XmTextPosition position, + char *value); +extern void XmTextInsertWcs( + Widget widget, + XmTextPosition position, + wchar_t *wc_value); +extern void XmTextSetAddMode( + Widget widget, +#if NeedWidePrototypes + int state); +#else + Boolean state); +#endif /* NeedWidePrototypes */ +extern Boolean XmTextGetAddMode( + Widget widget); +extern Boolean XmTextGetEditable( + Widget widget); +extern void XmTextSetEditable( + Widget widget, +#if NeedWidePrototypes + int editable); +#else + Boolean editable); +#endif /* NeedWidePrototypes */ +extern int XmTextGetMaxLength( + Widget widget); +extern void XmTextSetMaxLength( + Widget widget, + int max_length); +extern XmTextPosition XmTextGetTopCharacter( + Widget widget); +extern void XmTextSetTopCharacter( + Widget widget, + XmTextPosition top_character); +extern XmTextPosition XmTextGetCursorPosition( + Widget widget); +extern XmTextPosition XmTextGetInsertionPosition( + Widget widget); +extern void XmTextSetInsertionPosition( + Widget widget, + XmTextPosition position); +extern void XmTextSetCursorPosition( + Widget widget, + XmTextPosition position); +extern Boolean XmTextRemove( + Widget widget); +extern Boolean XmTextCopy( + Widget widget, + Time copy_time); +extern Boolean XmTextCopyLink( + Widget widget, + Time copy_time); +extern Boolean XmTextCut( + Widget widget, + Time cut_time); +extern Boolean XmTextPaste( + Widget widget); +extern Boolean XmTextPasteLink( + Widget widget); +extern char * XmTextGetSelection( + Widget widget); +extern wchar_t * XmTextGetSelectionWcs( + Widget widget); +extern void XmTextSetSelection( + Widget widget, + XmTextPosition first, + XmTextPosition last, + Time set_time); +extern void XmTextClearSelection( + Widget widget, + Time clear_time); +extern Boolean XmTextGetSelectionPosition( + Widget widget, + XmTextPosition *left, + XmTextPosition *right); +extern XmTextPosition XmTextXYToPos( + Widget widget, +#if NeedWidePrototypes + int x, + int y); +#else + Position x, + Position y); +#endif /* NeedWidePrototypes */ +extern Boolean XmTextPosToXY( + Widget widget, + XmTextPosition position, + Position *x, + Position *y); +extern XmTextSource XmTextGetSource( + Widget widget); +extern void XmTextSetSource( + Widget widget, + XmTextSource source, + XmTextPosition top_character, + XmTextPosition cursor_position); +extern void XmTextShowPosition( + Widget widget, + XmTextPosition position); +extern void XmTextScroll( + Widget widget, + int n); +extern int XmTextGetBaseline( + Widget widget); +extern int XmTextGetCenterline( + Widget widget); +extern void XmTextDisableRedisplay( + Widget widget); +extern void XmTextEnableRedisplay( + Widget widget); +extern Boolean XmTextFindString( + Widget w, + XmTextPosition start, + char *search_string, + XmTextDirection direction, + XmTextPosition *position); +extern Boolean XmTextFindStringWcs( + Widget w, + XmTextPosition start, + wchar_t *wc_string, + XmTextDirection direction, + XmTextPosition *position); + +/******** End Public Function Declarations ********/ + +/* tmp: go to XmStrDefs */ +#define XmNtotalLines "totalLines" +#define XmCTotalLines "TotalLines" + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmText_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextDIconI.h b/libXm/osx/Xm/TextDIconI.h new file mode 100644 index 0000000..76d4c0f --- /dev/null +++ b/libXm/osx/Xm/TextDIconI.h @@ -0,0 +1,154 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextDIconI.h /main/5 1995/07/13 18:03:40 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +#ifndef _XmTextDIconP_h +#define _XmTextDIconP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*******************/ +/* 16x16 drag icon */ +/*******************/ + +#define XmTEXTUAL_DRAG_ICON_WIDTH_16 16 +#define XmTEXTUAL_DRAG_ICON_HEIGHT_16 16 +#define XmTEXTUAL_DRAG_ICON_X_HOT_16 7 +#define XmTEXTUAL_DRAG_ICON_Y_HOT_16 0 + + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_BITS_16[] = { + 0x00, 0x00, 0xfe, 0x0f, 0x02, 0x08, 0x02, 0x08, 0xfa, 0x0b, 0x02, 0x08, + 0xfa, 0x0b, 0x02, 0x08, 0x02, 0x08, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_MASK_BITS_16[] = { + 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, + 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + +/*******************/ +/* 32x32 drag icon */ +/*******************/ + + +#define XmTEXTUAL_DRAG_ICON_WIDTH_32 26 +#define XmTEXTUAL_DRAG_ICON_HEIGHT_32 20 +#define XmTEXTUAL_DRAG_ICON_X_HOT_32 26 +#define XmTEXTUAL_DRAG_ICON_Y_HOT_32 4 + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_BITS_32[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x02, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, + 0x82, 0xff, 0x0f, 0x01, 0xc2, 0xff, 0x0f, 0x01, 0xc2, 0xff, 0x07, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x82, 0xff, 0x0f, 0x01, + 0xc2, 0xff, 0x0f, 0x01, 0xc2, 0xff, 0x07, 0x01, 0x02, 0x00, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, + 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00}; + + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_MASK_BITS_32[] = { + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03}; + +#define XmTEXTUAL_DRAG_ICON_WIDTH_Alt_32 32 +#define XmTEXTUAL_DRAG_ICON_HEIGHT_Alt_32 32 +#define XmTEXTUAL_DRAG_ICON_X_HOT_Alt_32 1 +#define XmTEXTUAL_DRAG_ICON_Y_HOT_Alt_32 1 + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_BITS_Alt_32[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0xcd, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x7f, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfd, 0x16, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0x76, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xbb, 0xff, 0x06, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xde, 0x7b, 0x1d, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x77, 0xb7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbd, 0xdd, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_MASK_BITS_Alt_32[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x3f, + 0x00, 0xf0, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0x3f, 0x00, 0xfc, 0xff, 0x3f, + 0x00, 0xfe, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x3f, 0x80, 0xff, 0xff, 0x3f, + 0xc0, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f, + 0xf8, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, + 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, + 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#define XmTEXTUAL_DRAG_ICON_WIDTH_Alt_16 16 +#define XmTEXTUAL_DRAG_ICON_HEIGHT_Alt_16 16 +#define XmTEXTUAL_DRAG_ICON_X_HOT_Alt_16 1 +#define XmTEXTUAL_DRAG_ICON_Y_HOT_Alt_16 1 + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_BITS_Alt_16[] = { + 0x00, 0x00, 0x60, 0xdd, 0x00, 0x00, 0xb8, 0x7e, 0x00, 0x00, 0xee, 0xee, + 0x00, 0x00, 0xff, 0x71, 0x00, 0x00, 0xb7, 0x7f, 0x00, 0x00, 0xdb, 0xdf, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static XmConst unsigned char XmTEXTUAL_DRAG_ICON_MASK_BITS_Alt_16[] = { + 0xf0, 0xff, 0xf0, 0xff, 0xf0, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextDIconP_h */ + diff --git a/libXm/osx/Xm/TextF.h b/libXm/osx/Xm/TextF.h new file mode 100644 index 0000000..7deb78f --- /dev/null +++ b/libXm/osx/Xm/TextF.h @@ -0,0 +1,229 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextF.h /main/11 1995/07/13 18:05:20 drk $ */ +/* +* (c) Copyright 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextF_h +#define _XmTextF_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************** + * type defines * + ******************/ +typedef struct _XmTextFieldClassRec *XmTextFieldWidgetClass; +typedef struct _XmTextFieldRec *XmTextFieldWidget; + +/****************** + * extern class * + ******************/ +externalref WidgetClass xmTextFieldWidgetClass; + + +/************************ + * fast subclass define * + ************************/ +#ifndef XmIsTextField +#define XmIsTextField(w) XtIsSubclass(w, xmTextFieldWidgetClass) +#endif /* XmIsTextField */ + + +/******************** + * public functions * + ********************/ + +/******** Public Function Declarations ********/ + +char * XmTextFieldGetString( + Widget w); +int XmTextFieldGetSubstring( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + char *buffer); +wchar_t * XmTextFieldGetStringWcs( + Widget w); +int XmTextFieldGetSubstringWcs( + Widget widget, + XmTextPosition start, + int num_chars, + int buf_size, + wchar_t *buffer); +XmTextPosition XmTextFieldGetLastPosition( + Widget w); +void XmTextFieldSetString( + Widget w, + char *value); +void XmTextFieldSetStringWcs( + Widget w, + wchar_t *wc_value); +void XmTextFieldReplace( + Widget w, + XmTextPosition from_pos, + XmTextPosition to_pos, + char *value); +void XmTextFieldReplaceWcs( + Widget w, + XmTextPosition from_pos, + XmTextPosition to_pos, + wchar_t *wc_value); +void XmTextFieldInsert( + Widget w, + XmTextPosition position, + char *value); +void XmTextFieldInsertWcs( + Widget w, + XmTextPosition position, + wchar_t *wcstring); +void XmTextFieldSetAddMode( + Widget w, +#if NeedWidePrototypes + int state); +#else + Boolean state); +#endif /* NeedWidePrototypes */ +Boolean XmTextFieldGetAddMode( + Widget w); +Boolean XmTextFieldGetEditable( + Widget w); +void XmTextFieldSetEditable( + Widget w, +#if NeedWidePrototypes + int editable); +#else + Boolean editable); +#endif /* NeedWidePrototypes */ +int XmTextFieldGetMaxLength( + Widget w); +void XmTextFieldSetMaxLength( + Widget w, + int max_length); +XmTextPosition XmTextFieldGetCursorPosition( + Widget w); +XmTextPosition XmTextFieldGetInsertionPosition( + Widget w); +void XmTextFieldSetCursorPosition( + Widget w, + XmTextPosition position); +void XmTextFieldSetInsertionPosition( + Widget w, + XmTextPosition position); +Boolean XmTextFieldGetSelectionPosition( + Widget w, + XmTextPosition *left, + XmTextPosition *right); +char * XmTextFieldGetSelection( + Widget w); +wchar_t * XmTextFieldGetSelectionWcs( + Widget w); +Boolean XmTextFieldRemove( + Widget w); +Boolean XmTextFieldCopy( + Widget w, + Time clip_time); +Boolean XmTextFieldCopyLink( + Widget w, + Time clip_time); +Boolean XmTextFieldCut( + Widget w, + Time clip_time); +Boolean XmTextFieldPaste( + Widget w); +Boolean XmTextFieldPasteLink( + Widget w); +void XmTextFieldClearSelection( + Widget w, + Time sel_time); +void XmTextFieldSetSelection( + Widget w, + XmTextPosition first, + XmTextPosition last, + Time sel_time); +XmTextPosition XmTextFieldXYToPos( + Widget w, +#if NeedWidePrototypes + int x, + int y); +#else + Position x, + Position y); +#endif /* NeedWidePrototypes */ +Boolean XmTextFieldPosToXY( + Widget w, + XmTextPosition position, + Position *x, + Position *y); +void XmTextFieldShowPosition( + Widget w, + XmTextPosition position); +void XmTextFieldSetHighlight( + Widget w, + XmTextPosition left, + XmTextPosition right, + XmHighlightMode mode); +int XmTextFieldGetBaseline( + Widget w); +Widget XmCreateTextField( + Widget parent, + char *name, + ArgList arglist, + Cardinal argcount); +Widget XmVaCreateTextField( + Widget parent, + char *name, + ...); +Widget XmVaCreateManagedTextField( + Widget parent, + char *name, + ...); + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextF_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextFI.h b/libXm/osx/Xm/TextFI.h new file mode 100644 index 0000000..4941612 --- /dev/null +++ b/libXm/osx/Xm/TextFI.h @@ -0,0 +1,132 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TextFI.h /main/5 1995/07/13 18:05:32 drk $ */ +#ifndef _XmTextFI_h +#define _XmTextFI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern int _XmTextFieldCountBytes( + XmTextFieldWidget tf, + wchar_t *wc_value, + int num_chars) ; +extern void _XmTextFToggleCursorGC( + Widget widget) ; +extern void _XmTextFieldDrawInsertionPoint( + XmTextFieldWidget tf, +#if NeedWidePrototypes + int turn_on) ; +#else + Boolean turn_on) ; +#endif /* NeedWidePrototypes */ +extern void _XmTextFieldSetClipRect( + XmTextFieldWidget tf) ; +extern void _XmTextFieldSetCursorPosition( + XmTextFieldWidget tf, + XEvent *event, + XmTextPosition position, +#if NeedWidePrototypes + int adjust_flag, + int call_cb) ; +#else + Boolean adjust_flag, + Boolean call_cb) ; +#endif /* NeedWidePrototypes */ +extern Boolean _XmTextFieldReplaceText( + XmTextFieldWidget tf, + XEvent *event, + XmTextPosition replace_prev, + XmTextPosition replace_next, + char *insert, + int insert_length, +#if NeedWidePrototypes + int move_cursor) ; +#else + Boolean move_cursor) ; +#endif /* NeedWidePrototypes */ +extern void _XmTextFieldDeselectSelection( + Widget w, +#if NeedWidePrototypes + int disown, +#else + Boolean disown, +#endif /* NeedWidePrototypes */ + Time sel_time) ; +extern Boolean _XmTextFieldSetDestination( + Widget w, + XmTextPosition position, + Time set_time) ; +extern void _XmTextFieldStartSelection( + XmTextFieldWidget tf, + XmTextPosition left, + XmTextPosition right, + Time sel_time) ; +extern void _XmTextFieldSetSel2( + Widget w, + XmTextPosition left, + XmTextPosition right, +#if NeedWidePrototypes + int disown, +#else + Boolean disown, +#endif /* NeedWidePrototypes */ + Time sel_time) ; +extern void _XmTextFieldHandleSecondaryFinished(Widget w, + XEvent *event); +extern int _XmTextFieldCountCharacters(XmTextFieldWidget tf, + char *ptr, + int n_bytes); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextFI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextFP.h b/libXm/osx/Xm/TextFP.h new file mode 100644 index 0000000..d0df74f --- /dev/null +++ b/libXm/osx/Xm/TextFP.h @@ -0,0 +1,357 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY +*/ +/* $TOG: TextFP.h /main/17 1997/03/04 17:00:01 dbl $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextFP_h +#define _XmTextFP_h + +#include +#include +#ifdef USE_XFT +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Defines for different cursors + */ + +#define IBEAM_WIDTH 3 +#define CARET_WIDTH 9 +#define CARET_HEIGHT 5 + +/* + * Here is the Text Field Widget class structure. + */ + +typedef struct _XmTextFieldClassPart { + XtPointer extension; /* Pointer to extension record. */ +} XmTextFieldClassPart; + +typedef struct _XmTextFieldClassRec { + CoreClassPart core_class; /* Not RectObjClassPart so I can reference + core_class s */ + XmPrimitiveClassPart primitive_class; + XmTextFieldClassPart text_class; +} XmTextFieldClassRec; + +externalref XmTextFieldClassRec xmTextFieldClassRec; + +/* + * On the spot support. + */ +typedef struct _OnTheSpotData { + XmTextPosition start; + XmTextPosition end; + XmTextPosition cursor; + int over_len; + int over_maxlen; + char *over_str; + int under_preedit; + Boolean under_verify_preedit; + Boolean verify_commit; + int pad; +} OnTheSpotDataRec, *OnTheSpotData; + +/* + * Here is the Text Field Widget instance structures. + */ + +typedef struct _XmTextFieldPart { + XtCallbackList activate_callback; /* Command activate callback */ + XtCallbackList focus_callback; /* Verify gain focus callback */ + XtCallbackList losing_focus_callback; /* Verify losing focus + callback */ + XtCallbackList modify_verify_callback; /* Verify value to change + callback */ + XtCallbackList wcs_modify_verify_callback; /* Verify value to change + callback */ + XtCallbackList motion_verify_callback; /* Verify insert cursor position + to change callback */ + XtCallbackList gain_primary_callback; /* Gained ownership of Primary + Selection */ + XtCallbackList lose_primary_callback; /* Lost ownership of Primary + Selection */ + XtCallbackList value_changed_callback; /* Notify that value has changed + callback */ + char * value; /* pointer to widget value stored as char * */ + wchar_t * wc_value; /* pointer to widget value stored as + wchar_t * */ + + XmFontList font_list; /* Uses only the font portion of fontlist */ +#if USE_XFT + XtPointer font; /* font retrieved from the fontlist */ +#else + XFontStruct *font; /* font retrieved from the fontlist */ +#endif + XmTextScanType *selection_array; /* Description of what to cycle + through on selections */ + _XmHighlightData highlight; /* Info on the highlighting regions. */ + + GC gc; /* Normal GC for drawing text and cursor */ + GC image_gc; /* Image GC for drawing text cursor*/ + GC save_gc; /* GC for saving/restoring under IBeam */ + + Pixmap ibeam_off; /* pixmap for area under the IBeam */ + Pixmap add_mode_cursor; /* The add mode cursor pixmap */ + Pixmap cursor; /* The ibeam cursor stencil */ + Pixmap putback; /* AVAILABLE: was in 1.1 but not really used */ + Pixmap stipple_tile; /* The tile pattern for the stippled I-beam */ + Pixmap image_clip; /* AVAILABLE: was in 1.2 but not used now */ + + XmTextPosition cursor_position; /* Character location of the insert + cursor */ + XmTextPosition new_h_offset; /* AVAILABLE: was in 1.1 but not used */ + XmTextPosition h_offset; /* The x position of the first character + (relative to left edge of widget) */ + XmTextPosition orig_left; /* Left primary selection prior to + extend */ + XmTextPosition orig_right; /* Right primary selection prior to + extend */ + XmTextPosition prim_pos_left; /* Left primary selection position */ + XmTextPosition prim_pos_right; /* Right primary selection position */ + XmTextPosition prim_anchor; /* Primary selection pivot point */ + + XmTextPosition sec_pos_left; /* Left secondary selection position */ + XmTextPosition sec_pos_right; /* Right secondary selection position */ + XmTextPosition sec_anchor; /* Secondary selection pivot point */ + + XmTextPosition stuff_pos; /* Position to stuff the primary selection */ + + Position select_pos_x; /* x position for timer-based scrolling */ + + Time prim_time; /* Timestamp of primary selection */ + Time dest_time; /* Timestamp of destination selection */ + Time sec_time; /* Timestamp of secondary selection */ + Time last_time; /* Time of last selection event */ + + XtIntervalId timer_id; /* Blinking cursor timer */ + XtIntervalId select_id; /* Timer based scrolling identifier */ + + int blink_rate; /* Rate of blinking text cursor in msec */ + int selection_array_count; /* Selection array count */ + int threshold; /* Selection threshold */ + int size_allocd; /* Size allocated for value string */ + int string_length; /* The number of characters in the string + (including the trailing NULL) */ + int cursor_height; /* Save cursor dimensions */ + int cursor_width; /* Save cursor dimensions */ + int sarray_index; /* Index into selection array */ + int max_length; /* Maximum number of character that can be + inserted into the text field widget */ + + int max_char_size; /* Max bytes per character in cur locale */ + short columns; /* The number of characters in the width */ + + Dimension margin_width; /* Height between text borders and text */ + Dimension margin_height; /* Width between text borders and text */ + Dimension average_char_width; /* Average character width based on font */ + Dimension margin_top; /* Height between text borders and top of + text */ + Dimension margin_bottom; /* Height between text borders and bottom of + text */ + Dimension font_ascent; /* Ascent of font or fontset used by widget */ + Dimension font_descent; /* Descent of font or fontset used by widget */ + + Boolean resize_width; /* Allows the widget to grow horizontally + when borders are reached */ + Boolean pending_delete; /* Delete primary selection on insert when + set to True */ + Boolean editable; /* Sets editablility of text */ + Boolean verify_bell; /* Determines if bell is sounded when verify + callback returns doit - False */ + Boolean cursor_position_visible; /* Sets visibility of insert cursor */ + + Boolean traversed; /* Flag used with losing focus verification to + indicate a traversal key pressed event */ + Boolean add_mode; /* Add mode for cursor movement */ + Boolean has_focus; /* Flag that indicates whether the widget + has input focus */ + Boolean blink_on; /* State of Blinking insert cursor */ + short int cursor_on; /* Indicates whether the cursor is visible */ + Boolean refresh_ibeam_off; /* Indicates whether the area under IBeam needs + to be re-captured */ + Boolean have_inverted_image_gc; /* fg/bg of image gc have been swapped */ + Boolean has_primary; /* Indicates that is has the + primary selection */ + Boolean has_secondary; /* Indicates that is has the + secondary selection */ + Boolean has_destination; /* Indicates that is has the + destination selection */ + Boolean sec_drag; /* Indicates a secondary drag was made */ + Boolean selection_move; /* Indicates that the action requires a + secondary move (i.e. copy & cut) */ + Boolean pending_off; /* indicates pending delete state */ + Boolean fontlist_created; /* Indicates that the text field widget created + it's own fontlist */ + Boolean has_rect; /* currently has clipping rectangle */ + Boolean do_drop; /* Indicates that the widget the recieved the + button release, did not have a previous + button press, so it is o.k. to request + the MOTIF_DROP selection. */ + Boolean cancel; /* Cancels selection actions when true */ + Boolean extending; /* Indicates extending primary selection */ + Boolean sec_extending; /* Indicates extending secondary selection */ + Boolean changed_visible; /* Indicates whether the dest_visible flag + is in a temporary changed state */ + Boolean have_fontset; /* The widgets font is a fontset, not a + fontstruct... use R5 draw routines */ + Boolean in_setvalues; /* used to disable unnecessary redisplays */ + Boolean do_resize; /* used to prevent inappropriate resizes */ + Boolean redisplay; /* used to set redisplay flag in setvalues */ + Boolean overstrike; /* overstrike mode for character input */ + Boolean sel_start; /* overstrike mode for character input */ + XtPointer extension; /* Pointer to extension record. */ + + XtCallbackList destination_callback; /* Selection destination cb */ + Boolean selection_link; /* Indicates that the action requires a + link */ + /* New for 2.0 */ + Boolean take_primary; /* Indicates that is has to take the + primary selection */ + GC cursor_gc; /* 1-bit depth GC for creating the I-beam + stipples (normal & add mode) */ + XtIntervalId drag_id; /* timer to start btn1 drag */ + _XmTextActionRec *transfer_action; /* to keep track of delayed action */ + /* Boolean rt_save; */ /* used for MT work */ + OnTheSpotData onthespot; /* data for on-the-spot im support */ + + Boolean check_set_render_table; /* used for MT safe work */ + Boolean programmatic_highlights; /* XmTextFieldSetHighlight called */ +#ifdef USE_XFT + Boolean use_xft; +#endif +} XmTextFieldPart; + +typedef struct _XmTextFieldRec { + CorePart core; + XmPrimitivePart primitive; + XmTextFieldPart text; +} XmTextFieldRec; + + +/**************** + * + * Macros for the uncached data + * + ****************/ + +#define TextF_ActivateCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.activate_callback) +#define TextF_LosingFocusCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.losing_focus_callback) +#define TextF_FocusCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.focus_callback) +#define TextF_ModifyVerifyCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.modify_verify_callback) +#define TextF_ModifyVerifyCallbackWcs(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.wcs_modify_verify_callback) +#define TextF_MotionVerifyCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.motion_verify_callback) +#define TextF_ValueChangedCallback(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.value_changed_callback) +#define TextF_Value(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.value) +#define TextF_WcValue(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.wc_value) +#define TextF_MarginHeight(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.margin_height) +#define TextF_MarginWidth(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.margin_width) +#define TextF_CursorPosition(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.cursor_position) +#define TextF_Columns(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.columns) +#define TextF_MaxLength(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.max_length) +#define TextF_BlinkRate(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.blink_rate) +#define TextF_FontList(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font_list) +#define TextF_Font(tfg) \ + ((XFontStruct*)(((XmTextFieldWidget)(tfg)) -> text.font)) +#define TextF_FontAscent(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font_ascent) +#define TextF_FontDescent(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.font_descent) +#define TextF_SelectionArray(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.selection_array) +#define TextF_SelectionArrayCount(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.selection_array_count) +#define TextF_ResizeWidth(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.resize_width) +#define TextF_PendingDelete(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.pending_delete) +#define TextF_Editable(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.editable) +#define TextF_CursorPositionVisible(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.cursor_position_visible) +#define TextF_Threshold(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.threshold) +#define TextF_UseFontSet(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.have_fontset) +#ifdef USE_XFT +#define TextF_UseXft(tfg) \ + (((XmTextFieldWidget)(tfg)) -> text.use_xft) +#define TextF_XftFont(tfg) \ + ((XftFont*)(((XmTextFieldWidget)(tfg)) -> text.font)) +#endif + +/* + * On the spot support. + */ +#define PreStart(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->start) +#define PreEnd(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->end) +#define PreCursor(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->cursor) +#define FUnderVerifyPreedit(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->under_verify_preedit) +#define FVerifyCommitNeeded(tfg) (((XmTextFieldWidget)(tfg)) -> \ + text.onthespot->verify_commit) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextFieldWidgetP_h */ diff --git a/libXm/osx/Xm/TextFSelI.h b/libXm/osx/Xm/TextFSelI.h new file mode 100644 index 0000000..979ae16 --- /dev/null +++ b/libXm/osx/Xm/TextFSelI.h @@ -0,0 +1,77 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TextFSelI.h /main/5 1995/07/13 18:06:08 drk $ */ +#ifndef _XmTextFSelI_h +#define _XmTextFSelI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern Boolean _XmTextFieldConvert( + Widget w, + Atom *selection, + Atom *target, + Atom *type, + XtPointer *value, + unsigned long *length, + int *format, + Widget drag_context, + XEvent *event) ; +extern void _XmTextFieldLoseSelection( + Widget w, + Atom *selection) ; +extern Widget _XmTextFieldGetDropReciever( + Widget w) ; +extern void _XmTextFieldInstallTransferTrait(void); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextFSelI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextI.h b/libXm/osx/Xm/TextI.h new file mode 100644 index 0000000..a742052 --- /dev/null +++ b/libXm/osx/Xm/TextI.h @@ -0,0 +1,141 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TextI.h /main/6 1996/05/29 13:45:16 pascale $ */ +#ifndef _XmTextI_h +#define _XmTextI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern XmTextPosition _XmTextFindScroll(XmTextWidget widget, + XmTextPosition start, + int delta); +extern int _XmTextGetTotalLines(Widget widget); +extern XmTextLineTable _XmTextGetLineTable(Widget widget, + int *total_lines); +extern void _XmTextRealignLineTable(XmTextWidget widget, + XmTextLineTable *temp_table, + int *temp_table_size, + register unsigned int cur_index, + register XmTextPosition cur_start, + register XmTextPosition cur_end); +extern unsigned int _XmTextGetTableIndex(XmTextWidget widget, + XmTextPosition pos); +extern void _XmTextUpdateLineTable(Widget widget, + XmTextPosition start, + XmTextPosition end, + XmTextBlock block, +#if NeedWidePrototypes + int update +#else + Boolean update +#endif /* NeedWidePrototypes */ + ); +extern void _XmTextMarkRedraw(XmTextWidget widget, + XmTextPosition left, + XmTextPosition right); +extern LineNum _XmTextNumLines(XmTextWidget widget); +extern void _XmTextLineInfo(XmTextWidget widget, + LineNum line, + XmTextPosition *startpos, + LineTableExtra *extra); +extern LineNum _XmTextPosToLine(XmTextWidget widget, + XmTextPosition position); +extern void _XmTextInvalidate(XmTextWidget widget, + XmTextPosition position, + XmTextPosition topos, + long delta); +extern void _XmTextSetTopCharacter(Widget widget, + XmTextPosition top_character); +extern int _XmTextCountCharacters(char *str, + int num_count_bytes); +extern void _XmTextSetCursorPosition(Widget widget, + XmTextPosition position); +extern void _XmTextDisableRedisplay(XmTextWidget widget, +#if NeedWidePrototypes + int losesbackingstore); +#else + Boolean losesbackingstore); +#endif /* NeedWidePrototypes */ +extern void _XmTextEnableRedisplay(XmTextWidget widget); + +extern void _XmTextSetHighlight(Widget, XmTextPosition, + XmTextPosition, XmHighlightMode); +extern void _XmTextShowPosition(Widget, XmTextPosition); +extern void _XmTextSetEditable(Widget widget, +#if NeedWidePrototypes + int editable); +#else + Boolean editable); +#endif /* NeedWidePrototypes */ +extern void _XmTextResetIC(Widget widget); +extern Boolean _XmTextNeedsPendingDeleteDis(XmTextWidget tw, + XmTextPosition *left, + XmTextPosition *right, + int check_add_mode); +extern void _XmTextReplace(Widget widget, + XmTextPosition frompos, + XmTextPosition topos, + char *value, +#if NeedWidePrototypes + int is_wchar); +#else + Boolean is_wchar); +#endif /* NeedWidePrototypes */ +extern void _XmTextValidate(XmTextPosition *start, + XmTextPosition *end, + int maxsize); + +extern XmTextPosition _XmTextSetPreeditPosition(Widget w, + XmTextPosition cursor_position); +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextInI.h b/libXm/osx/Xm/TextInI.h new file mode 100644 index 0000000..277d222 --- /dev/null +++ b/libXm/osx/Xm/TextInI.h @@ -0,0 +1,90 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TextInI.h /main/5 1995/07/13 18:07:40 drk $ */ +#ifndef _XmTextInI_h +#define _XmTextInI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern Boolean _XmTextHasDestination( + Widget w) ; +extern Boolean _XmTextSetDestinationSelection( + Widget w, + XmTextPosition position, +#if NeedWidePrototypes + int disown, +#else + Boolean disown, +#endif /* NeedWidePrototypes */ + Time set_time) ; +extern Boolean _XmTextSetSel2( + XmTextWidget tw, + XmTextPosition left, + XmTextPosition right, + Time set_time) ; +extern Boolean _XmTextGetSel2( + XmTextWidget tw, + XmTextPosition *left, + XmTextPosition *right) ; +extern void _XmTextInputGetSecResData( + XmSecondaryResourceData *secResDataRtn) ; +extern void _XmTextInputCreate( + Widget wid, + ArgList args, + Cardinal num_args) ; +extern void _XmTextHandleSecondaryFinished(Widget w, + XEvent *event); + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextInI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextInP.h b/libXm/osx/Xm/TextInP.h new file mode 100644 index 0000000..bebad29 --- /dev/null +++ b/libXm/osx/Xm/TextInP.h @@ -0,0 +1,166 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextInP.h /main/13 1995/07/13 18:07:54 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextInP_h +#define _XmTextInP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************** + * + * Definitions for modules implementing text input modules. + * + ****************************************************************/ + +typedef struct { + int x; + int y; +} SelectionHint; + +typedef struct _InputDataRec { + XmTextWidget widget; /* Back-pointer to widget record. */ + XmTextScanType *sarray; /* Description of what to cycle through on */ + /* selections. */ + int sarraycount; /* Number of elements in above. */ + int new_sel_length; /* New selection length for selection moves. */ + int threshold; /* number of pixels crossed -> drag */ + SelectionHint selectionHint; /* saved coords of button down */ + SelectionHint Sel2Hint; /* saved the coords of button down */ + XtIntervalId select_id; + XmTextScanType stype; /* Current selection type. */ + XmTextScanDirection extendDir; + XmTextScanDirection Sel2ExtendDir; + XmTextPosition origLeft, origRight; + XmTextPosition Sel2OrigLeft, Sel2OrigRight; + XmTextPosition stuffpos; + XmTextPosition sel2Left, sel2Right; /* secondary selection */ + XmTextPosition anchor; /* anchor point of the primary selection */ + Position select_pos_x; /* x position for timer-based scrolling */ + Position select_pos_y; /* y position for timer-based scrolling */ + Boolean pendingdelete; /* TRUE if we're implementing pending delete */ + Boolean syncing; /* If TRUE, then we've multiple keystrokes */ + Boolean extending; /* true if we are extending */ + Boolean Sel2Extending; /* true if we are extending */ + Boolean hasSel2; /* has secondary selection */ + Boolean has_destination; /* has destination selection */ + Boolean selectionMove; /* delete selection after stuff */ + Boolean cancel; /* indicates that cancel was pressed */ + Boolean overstrike; /* overstrike */ + Boolean sel_start; /* indicates that a btn2 was pressed */ + Time dest_time; /* time of destination selection ownership */ + Time sec_time; /* time of secondary selection ownership */ + Time lasttime; /* Time of last event. */ + Boolean selectionLink; /* This is a link vs. a copy operation */ + XtIntervalId drag_id; /* timer to start btn1 drag */ + _XmTextActionRec *transfer_action; /* to keep track of delayed action */ +} InputDataRec, *InputData; + + +/* + * Create a new instance of an input object. By the time this is called, + * the widget context has been saved. + */ + +typedef void (*InputCreateProc)( + Widget, + ArgList, + Cardinal) ; + +/* + * Get values out of the input object. + */ +typedef void (*InputGetValuesProc)( + Widget, + ArgList, + Cardinal) ; + +/* + * Set values in the input object. + */ + +typedef void (*InputSetValuesProc)( + Widget, + Widget, + Widget, + ArgList, + Cardinal *) ; + +/* + * Inform input of invalidated positions. + */ +typedef void (*InputInvalidateProc)( + XmTextWidget, + XmTextPosition, + XmTextPosition, + long) ; + +/* + * Get secondary resources. + */ +typedef void (*InputGetSecResProc)( + XmSecondaryResourceData *) ; + + +typedef struct _InputRec { + struct _InputDataRec *data; /* Input-specific data; opaque type. */ + InputInvalidateProc Invalidate; + InputGetValuesProc GetValues; + InputSetValuesProc SetValues; + XtWidgetProc destroy; + InputGetSecResProc GetSecResData; +} InputRec; + + +externalref XtPointer _XmdefaultTextActionsTable; +externalref Cardinal _XmdefaultTextActionsTableSize; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextInP_h */ +/*DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextOutI.h b/libXm/osx/Xm/TextOutI.h new file mode 100644 index 0000000..562df84 --- /dev/null +++ b/libXm/osx/Xm/TextOutI.h @@ -0,0 +1,125 @@ +/* * @OPENGROUP_COPYRIGHT@ +/* * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +/* + * HISTORY + */ +/* $XConsortium: TextOutI.h /main/7 1995/11/02 12:05:38 cde-fuj $ */ +#ifndef _XmTextOutI_h +#define _XmTextOutI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmTextFreeContextData( + Widget w, + XtPointer clientData, + XtPointer callData) ; +extern void _XmTextResetClipOrigin( + XmTextWidget tw, + XmTextPosition position, +#if NeedWidePrototypes + int clip_mask_reset) ; +#else + Boolean clip_mask_reset) ; +#endif /* NeedWidePrototypes */ +extern void _XmTextAdjustGC( + XmTextWidget tw) ; +extern Boolean _XmTextShouldWordWrap( + XmTextWidget widget) ; +extern Boolean _XmTextScrollable( + XmTextWidget widget) ; +extern XmTextPosition _XmTextFindLineEnd( + XmTextWidget widget, + XmTextPosition position, + LineTableExtra *extra) ; +extern void _XmTextOutputGetSecResData( + XmSecondaryResourceData *secResDataRtn) ; +extern int _XmTextGetNumberLines( + XmTextWidget widget) ; +extern void _XmTextMovingCursorPosition( + XmTextWidget tw, + XmTextPosition position) ; +extern void _XmTextChangeBlinkBehavior( + XmTextWidget widget, +#if NeedWidePrototypes + int newvalue) ; +#else + Boolean newvalue) ; +#endif /* NeedWidePrototypes */ +extern void _XmTextOutputCreate( + Widget wid, + ArgList args, + Cardinal num_args) ; +extern Boolean _XmTextGetBaselines( + Widget widget, + Dimension **baselines, + int *line_count) ; +extern Boolean _XmTextGetDisplayRect( + Widget w, + XRectangle *display_rect) ; +extern void _XmTextMarginsProc( + Widget w, + XmBaselineMargins *margins_rec) ; +extern void _XmTextChangeHOffset( + XmTextWidget widget, + int length) ; +extern void _XmTextChangeVOffset( + XmTextWidget widget, + int length) ; +extern void _XmTextToggleCursorGC( + Widget widget) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextOutI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextOutP.h b/libXm/osx/Xm/TextOutP.h new file mode 100644 index 0000000..2abfb00 --- /dev/null +++ b/libXm/osx/Xm/TextOutP.h @@ -0,0 +1,345 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: TextOutP.h /main/17 1997/03/18 10:55:51 dbl $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmTextOutP_h +#define _XmTextOutP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************** + * + * Definitions for modules implementing and using text output routines. + * + ****************************************************************/ + +#define ShouldWordWrap(data, widget) (data->wordwrap && \ + (!(((XmDirectionMatch(XmPrim_layout_direction(widget), \ + XmTOP_TO_BOTTOM_RIGHT_TO_LEFT)) ? \ + data->scrollvertical : data->scrollhorizontal) \ + && XmIsScrolledWindow(widget->core.parent))) \ + && widget->text.edit_mode != XmSINGLE_LINE_EDIT) + +typedef struct _LineTableExtraRec { + Dimension width; + Boolean wrappedbychar; +} LineTableExtraRec, *LineTableExtra ; + +/* + * output.c (part of stext) + */ + +typedef unsigned int LineNum; +typedef enum {on, off} OnOrOff; /* For when Booleans aren't obvious enough. */ + +/* + * Return the line number containing the given position. If text currently + * knows of no line containing that position, returns NOLINE. + */ + +#define NOLINE 30000 + +/* + * These next define the types of the routines that output is required + * to export for use by text and by input. + */ + +typedef struct _OutputDataRec { + XmFontList fontlist; /* Fontlist for text. */ + unsigned int blinkrate; + Boolean wordwrap; /* Whether to wordwrap. */ + Boolean cursor_position_visible; + Boolean autoshowinsertpoint; + Boolean hasfocus; + Boolean has_rect; + Boolean handlingexposures; /* TRUE if in the midst of expose events. */ + Boolean exposevscroll; /* Non-zero if we expect expose events to be + off vertically. */ + Boolean exposehscroll; /* Non-zero if we expect expose events to be + off horizontally. */ + Boolean resizewidth, resizeheight; + Boolean scrollvertical, scrollhorizontal; + Boolean scrollleftside, scrolltopside; + Boolean ignorevbar; /* Whether to ignore callbacks from vbar. */ + Boolean ignorehbar; /* Whether to ignore callbacks from hbar. */ + short int cursor_on; /* Whether IBeam cursor is visible. */ + Boolean refresh_ibeam_off; /* Indicates whether area under IBeam needs + * to be re-captured */ + Boolean suspend_hoffset; /* temporarily suspend horizontal scrolling */ + Boolean use_fontset; /* True if font to be used is fontset (and + * thus need X11R5 Xmb* routines to draw */ + Boolean have_inverted_image_gc; /* fg/bg of image gc have been swapped; + * on == True, off == False */ + OnOrOff blinkstate; + Position insertx, inserty; + int number_lines; /* Number of lines that fit in the window. */ + int leftmargin, rightmargin; + int topmargin, bottommargin; + int scrollwidth; /* Total width of text we have to display. */ + int vsliderSize; /* How big the thumb is in the vbar. */ + int hoffset; /* How much we've scrolled off the left. */ + int averagecharwidth; /* Number of pixels for an "average" char. */ + int tabwidth; /* Number of pixels for a tab. */ + short columns, rows; + Dimension lineheight; /* Number of pixels per line. */ + Dimension minwidth, minheight; + Dimension prevW; + Dimension prevH; + Dimension cursorwidth, cursorheight; + Dimension font_ascent; /* ascent of the font[set] */ + Dimension font_descent; /* descent of the font[set] */ + XtIntervalId timerid; + Pixmap cursor; /* Pixmap for IBeam cursor stencil. */ + Pixmap add_mode_cursor; /* Pixmap to use for add mode cursor. */ + Pixmap ibeam_off; /* Pixmap for area under the IBeam. */ + Pixmap stipple_tile; /* stipple for add mode cursor. */ + GC gc, imagegc; + Widget vbar, hbar; + XFontStruct *font; /* font used when NULL font is set. */ +/* New for 1.2 */ + GC save_gc; /* GC for saving/resotring under IBeam */ + short columns_set, rows_set; /* history of previously set dimensions */ +/* New for 2.0 */ + XmRenderTable rendertable; /* Alias for fontlist - only for resource + setting */ + GC cursor_gc; /* 1-bit depth GC for creating the I-beam + stipples (normal & add mode) */ + int scrollheight; /* Total height of text we have to display. */ + int voffset; /* How much we've scrolled off the top. */ + int tabheight; /* Number of pixels for a tab. */ + Dimension linewidth; /* Number of pixels per line (when vw). */ + Boolean suspend_voffset; /* temporarily suspend horizontal scrolling */ +#ifdef USE_XFT + Boolean use_xft; /* True if font to be used is XftFont */ +#endif +} OutputDataRec, *OutputData; + + +/* + * Create a new instance of an output object. This is expected to fill in + * info about innerwidget and output in the widget record. + */ + +typedef void (*OutputCreateProc)( + Widget, + ArgList, + Cardinal) ; +/* + * Given an (x,y) coordinate, return the closest corresponding position. (For + * use by input; text shouldn't ever need to know.) + */ + +typedef XmTextPosition (*XYToPosProc)( + XmTextWidget, +#if NeedWidePrototypes + int, + int) ; +#else + Position, /* These are relative to the */ + Position) ; /* innerwindow returned above. */ +#endif + +/* + * Return the (x,y) coordinate corresponing to the given position. If this + * returns FALSE, then the given position isn't being displayed. + */ + +typedef Boolean (*PosToXYProc)( + XmTextWidget, + XmTextPosition, + Position *, /* These are relative to the */ + Position *) ; /* innerwindow returned above. */ + +/* + * Measures the extent of a line. Given the line number and starting position + * of a line, returns the starting position of the next line. Also returns + * any extra information that the output module may want to associate with + * this line for future reference. (In particular, it will want to associate + * a vertical coordinate for this line.) This routine should return FALSE if + * it decides that this line will not fit in the window. FALSE should never + * be returned if the line number is zero. Output may assume that the line + * table for all preceeding lines have already been set. In particular, when + * this routine will return FALSE, then output knows that the entire linetable + * has been calculated; that is a good time for it to look over the linetable + * and decide if it wants to do something obnoxious like resize the window. + * + * A possible value to put in nextpos is PASTENDPOS. This indicates that the + * current line contains the end of the text in the source. + * + * nextpos may be NULL. If it is, then this indicates that we only want to + * know if the line will fit on the window. The caller already has its own + * idea where the next line will start if it does fit. (If nextpos is NULL, + * then no extra information should be generated, and the 'extra' parameter + * should be ignored.) + */ + +#define PASTENDPOS 2147483647 /* Biggest number that can fit in long */ + +typedef Boolean (*MeasureLineProc)( + XmTextWidget, + LineNum, + XmTextPosition, + XmTextPosition *, + LineTableExtraRec **) ; + +/* + * Draw some text within a line. The output finds out information about the + * line by calling the line table routines. + * + * %%% Document special cases (like lines containing PASTENDPOS). + */ + +typedef void (*DrawProc)( + XmTextWidget, + LineNum, + XmTextPosition, + XmTextPosition, + XmHighlightMode) ; + +/* + * Output should draw or erase an insertion point at the given position. + */ + +typedef void (*DrawInsertionPointProc)( + XmTextWidget, + XmTextPosition, + OnOrOff) ; + +/* + * Output should ensure that the given position is visible (e.g., not scrolled + * off horizontally). + */ +typedef void (*MakePositionVisibleProc)( + XmTextWidget, + XmTextPosition) ; + +/* Text would like to move some lines around on the screen. It would like to + * move lines fromline through toline (inclusive) to now start at line + * destline. If output can perform this move by means of a XCopyArea or + * similar simple call, it does so and returns TRUE; otherwise, it will return + * FALSE. If TRUE, output should modify affected values in the + * "extra" entries in the linetable, because after returning text will go ahead + * and move linetable entries around. + */ + +typedef Boolean (*MoveLinesProc)( + XmTextWidget, + LineNum, + LineNum, + LineNum) ; + +/* + * Inform output of invalidated positions. + */ + +typedef void (*InvalidateProc)( + XmTextWidget, + XmTextPosition, + XmTextPosition, + long) ; + +/* + * Get preferred size of text widget based on the row and column + * resources multiplied by font attributes as well as adding the + * margin resource values to the computed size. + */ +typedef void (*GetPreferredSizeProc)( + Widget, + Dimension *, + Dimension *) ; + +/* + * Get values out of the output object. + */ + +typedef void (*GetValuesProc)( + Widget, + ArgList, + Cardinal) ; + +/* + * Set values in the output object. + */ + +typedef Boolean (*SetValuesProc)( + Widget, + Widget, + Widget, + ArgList, + Cardinal *) ; + + +typedef struct _OutputRec { + struct _OutputDataRec *data; /* Output-specific data; opaque type. */ + XYToPosProc XYToPos; + PosToXYProc PosToXY; + MeasureLineProc MeasureLine; + DrawProc Draw; + DrawInsertionPointProc DrawInsertionPoint; + MakePositionVisibleProc MakePositionVisible; + MoveLinesProc MoveLines; + InvalidateProc Invalidate; + GetPreferredSizeProc GetPreferredSize; + GetValuesProc GetValues; + SetValuesProc SetValues; + XmRealizeOutProc realize; + XtWidgetProc destroy; + XmResizeFlagProc resize; + XtExposeProc expose; +} OutputRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextOutP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextP.h b/libXm/osx/Xm/TextP.h new file mode 100644 index 0000000..52ac089 --- /dev/null +++ b/libXm/osx/Xm/TextP.h @@ -0,0 +1,246 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextP.h /main/16 1996/05/21 12:09:47 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmTextP_h +#define _XmTextP_h + +#include +#include +#include +#include + +typedef struct _InputRec *Input; +typedef struct _OutputRec *Output; + +#ifdef __cplusplus +extern "C" { +#endif + +#define NODELTA LONG_MAX + +#define TEXTWIDGETCLASS "Text" /* Resource class for the text widget. */ + +#define GetSrc(widget) (((XmTextWidget) (widget))->text.source) + +typedef struct { + XtPointer extension; /* Pointer to extension record */ +} XmTextClassPart; + +typedef struct _XmTextClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmTextClassPart text_class; +} XmTextClassRec; + +externalref XmTextClassRec xmTextClassRec; + +typedef struct { + XmTextPosition start; /* First position in this line. */ + Boolean changed; /* TRUE if something in this line changed. */ + XmTextPosition changed_position; /* First position within the line that + has changed, if any. */ + Boolean past_end; /* TRUE if this line is past the end of any */ + /* line actually on the screen. */ + LineTableExtra extra; /* Extra info the output module keeps. */ +} LineRec, *Line; + +typedef struct _XmTextLineTableRec{ + unsigned int start_pos:31; + unsigned int virt_line:1; +} XmTextLineTableRec, *XmTextLineTable; + +typedef struct { + XmTextPosition from, to; /* Information on one range to repaint. */ +} RangeRec; + +typedef struct { + Cardinal number; /* Number of ranges defined. */ + Cardinal maximum; /* Number of ranges we have space for. */ + RangeRec *range; /* Pointer to array of ranges. */ +} Ranges; + +/* + * The data for on-the-spot support. + */ +typedef struct _OnTheSpotDataTW { + XmTextPosition start; + XmTextPosition end; + XmTextPosition cursor; + XmTextPosition over_len; + XmTextPosition over_maxlen; + char *over_str; + int under_preedit; + Boolean under_verify_preedit; + Boolean verify_commit; + int pad; +} OnTheSpotDataRecTW, *OnTheSpotDataTW; + +#define PreStartTW(tw) ((tw)->text.onthespot->start) +#define PreEndTW(tw) ((tw)->text.onthespot->end) +#define PreCursorTW(tw) ((tw)->text.onthespot->cursor) +#define PreOverLen(tw) ((tw)->text.onthespot->over_len) +#define PreOverMaxLen(tw) ((tw)->text.onthespot->over_maxlen) +#define PreOverStr(tw) ((tw)->text.onthespot->over_str) +#define PreUnder(tw) ((tw)->text.onthespot->under_preedit) +#define UnderVerifyPreedit(tw) ((tw)->text.onthespot->under_verify_preedit) +#define VerifyCommitNeeded(tw) ((tw)->text.onthespot->verify_commit) + + +/* + * Structure for main text info. + */ + +typedef struct _XmTextPart { + XmTextSource source; /* The source for this widget. */ + XtCallbackList activate_callback; /* command activate callback. */ + XtCallbackList focus_callback; /* Focus callback. */ + XtCallbackList losing_focus_callback; /* Losing focus callback. */ + XtCallbackList value_changed_callback; /* Value changed callback. */ + XtCallbackList modify_verify_callback; /* Verify value to change callback.*/ + XtCallbackList wcs_modify_verify_callback; /* Verify value to change + * callback.*/ + XtCallbackList motion_verify_callback; /* Insert cursor position + change callback. */ + XtCallbackList gain_primary_callback; /* Gained ownership of Primary + Selection */ + XtCallbackList lose_primary_callback; /* Lost ownership of Primary + Selection */ + char *value; /* The sring value in the widget */ + wchar_t *wc_value; /* Pointer for wchar_t value set by app */ + Dimension margin_height; /* height between text borders and text */ + Dimension margin_width; /* width between text borders and text */ + Position cursor_position_x; /* x pixel location of cursor */ + OutputCreateProc output_create; /* Routine to create the output portion. */ + InputCreateProc input_create; /* Routine to create the input portion. */ + /* The naming incongruity amongst the next three items was introduced */ + /* due to a collision with top_position as used as a Form constraint; */ + /* It has no other implications. */ + XmTextPosition top_character; /* First position to display. */ + XmTextPosition bottom_position; /* Last position to display. */ + XmTextPosition cursor_position; /* Location of the insertion point. */ + int max_length; /* Sets the max. length of string */ + int edit_mode; /* Sets the line editing mode + (i.e. sinlge_line, multi_line, ...) */ + Boolean auto_show_cursor_position; /* If true, automatically try to show + the cursor position whenever it + changes. */ + Boolean editable; /* Determines if text is editable */ + Boolean verify_bell; /* Determines if bell is sounded when verify + * callback returns doit - False + */ + Boolean add_mode; /* Determines the state of add moder */ + Boolean traversed; /* Flag used with losing focus verification to + indicate a traversal key pressed event */ + Boolean in_redisplay; /* Whether currently in the redisplay proc. */ + Boolean needs_redisplay; /* Whether we need to repaint or refigure. */ + Boolean in_refigure_lines; /* Whether currently in refigurelines proc. */ + Boolean needs_refigure_lines; /* Whether we need to refigure. */ + Boolean in_setvalues; /* Use to reduce unnecessary redisplays and + geometry requsets */ + Boolean in_resize; /* Make sure there are no geometry requests + while we are in resize procedure. */ + Boolean in_expose; /* Make sure there are no geometry requests + while we are in expose procedure. */ + Boolean highlight_changed; /* Whether highlighting recently changed. */ + Boolean pendingoff; /* TRUE if we shouldn't do pending delete on + the current selection. */ + char char_size; /* number of bytes for storing a character */ + + OnOrOff on_or_off; /* used to halt unecessary motion verify + callback calls during primary moves.*/ + Output output; /* The output portion. */ + Input input; /* The input portion. */ + + XmTextPosition first_position; /* First legal position in the source. */ + XmTextPosition last_position; /* Last legal position in the source. */ + XmTextPosition forget_past; /* Forget all about positions past this. */ + XmTextPosition force_display; /* Force this position to be displayed. */ + XmTextPosition new_top; /* Desired new top position. */ + XmTextPosition last_top_char; /* unused - available. */ + XmTextPosition dest_position; /* Location of the destination point. */ + int disable_depth; /* How many levels of disable we've done. */ + + int pending_scroll; /* Number of lines we want to scroll. */ + int total_lines; /* Total number of lines in the text widget */ + int top_line; /* Line number of the top visible line */ + int vsbar_scrolling; /* scrolling using the vertical scrollbar */ + + Cardinal number_lines; /* Number of line table entries. */ + Cardinal maximum_lines; /* Maximum number of line table entries. */ + Line line; /* Pointer to array of line table entries. */ + + Ranges repaint; /* Info on the repaint ranges. */ + _XmHighlightData highlight; /* Info on the highlighting regions. */ + _XmHighlightData old_highlight;/* Old value of above. */ + Widget inner_widget; /* Pointer to widget which actually contains + text (may be same or different from + this record). */ + XmTextLineTable line_table; + unsigned int table_size; + unsigned int table_index; + + XtCallbackList destination_callback; /* Selection destination cb */ + int hsbar_scrolling;/* scroring using the horizontal scrollbar */ + + OnTheSpotDataTW onthespot; /* On the spot preedit style support. */ + + XtTranslations tm_table; +} XmTextPart; + +typedef struct _XmTextRec { + CorePart core; + XmPrimitivePart primitive; + XmTextPart text; +} XmTextRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextP_h */ +/* DON't ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextSelI.h b/libXm/osx/Xm/TextSelI.h new file mode 100644 index 0000000..30d5234 --- /dev/null +++ b/libXm/osx/Xm/TextSelI.h @@ -0,0 +1,76 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TextSelI.h /main/5 1995/07/13 18:10:00 drk $ */ +#ifndef _XmTextSelI_h +#define _XmTextSelI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern Boolean _XmTextConvert( + Widget w, + Atom *selection, + Atom *target, + Atom *type, + XtPointer *value, + unsigned long *length, + int *format, + Widget dc, + XEvent *event) ; +extern void _XmTextLoseSelection( + Widget w, + Atom *selection) ; +extern Widget _XmTextGetDropReciever( + Widget w) ; +extern void _XmTextInstallTransferTrait(void); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextSelI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextSelP.h b/libXm/osx/Xm/TextSelP.h new file mode 100644 index 0000000..7d7ac02 --- /dev/null +++ b/libXm/osx/Xm/TextSelP.h @@ -0,0 +1,57 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextSelP.h /main/8 1995/07/13 18:10:16 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextSelP_h +#define _XmTextSelP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextSelP_h */ +/* DON't ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextStrSoI.h b/libXm/osx/Xm/TextStrSoI.h new file mode 100644 index 0000000..9df479b --- /dev/null +++ b/libXm/osx/Xm/TextStrSoI.h @@ -0,0 +1,133 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TextStrSoI.h /main/5 1995/07/13 18:10:59 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextStrSoI_h +#define _XmTextStrSoI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern char * _XmStringSourceGetString(XmTextWidget tw, + XmTextPosition from, + XmTextPosition to, +#if NeedWidePrototypes + int want_wchar); +#else + Boolean want_wchar); +#endif /* NeedWidePrototypes */ +extern Boolean _XmTextFindStringBackwards(Widget w, + XmTextPosition start, + char *search_string, + XmTextPosition *position); +extern Boolean _XmTextFindStringForwards(Widget w, + XmTextPosition start, + char *search_string, + XmTextPosition *position); +extern void _XmStringSourceSetGappedBuffer(XmSourceData data, + XmTextPosition position); +extern Boolean _XmTextModifyVerify(XmTextWidget initiator, + XEvent *event, + XmTextPosition *start, + XmTextPosition *end, + XmTextPosition *cursorPos, + XmTextBlock block, + XmTextBlock newblock, + Boolean *freeBlock); +extern XmTextSource _XmStringSourceCreate(char *value, +#if NeedWidePrototypes + int is_wchar); +#else + Boolean is_wchar); +#endif /* NeedWidePrototypes */ +extern void _XmStringSourceDestroy(XmTextSource source); +extern char * _XmStringSourceGetValue(XmTextSource source, +#if NeedWidePrototypes + int want_wchar); +#else + Boolean want_wchar); +#endif /* NeedWidePrototypes */ +extern void _XmStringSourceSetValue(XmTextWidget widget, + char *value); +extern Boolean _XmStringSourceHasSelection(XmTextSource source); +extern Boolean _XmStringSourceGetEditable(XmTextSource source); +extern void _XmStringSourceSetEditable(XmTextSource source, +#if NeedWidePrototypes + int editable); +#else + Boolean editable); +#endif /* NeedWidePrototypes */ +extern int _XmStringSourceGetMaxLength(XmTextSource source); +extern void _XmStringSourceSetMaxLength(XmTextSource source, + int max); +extern int _XmTextBytesToCharacters(char *characters, + char *bytes, + int num_chars, +#if NeedWidePrototypes + int add_null_terminator, +#else + Boolean add_null_terminator, +#endif /* NeedWidePrototypes */ + int max_char_size); +extern int _XmTextCharactersToBytes(char *bytes, + char *characters, + int num_chars, + int max_char_size); +extern void _XmTextValueChanged(XmTextWidget initiator, + XEvent *event); +extern Boolean *_XmStringSourceGetPending(XmTextWidget widget); +extern void _XmStringSourceSetPending(XmTextWidget widget, + Boolean *pending); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextStrSoI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TextStrSoP.h b/libXm/osx/Xm/TextStrSoP.h new file mode 100644 index 0000000..827a123 --- /dev/null +++ b/libXm/osx/Xm/TextStrSoP.h @@ -0,0 +1,148 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TextStrSoP.h /main/9 1995/07/13 18:11:11 drk $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTextStrSoP_h +#define _XmTextStrSoP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************** + * + * Definitions for use by sources and source users. + * + ****************************************************************/ + +typedef struct _XmSourceDataRec { + XmTextSource source; /* Backpointer to source record. */ + XmTextWidget *widgets; /* Array of widgets displaying this source. */ + XmTextPosition left, right; /* Left and right extents of selection. */ + char * ptr; /* Actual string data. */ + char * value; /* Value of the string data. */ + char * gap_start; /* Gapped buffer start pointer */ + char * gap_end; /* Gapped buffer end pointer */ + char * PSWC_NWLN; /* Holder for char*, short*, int* rep of NWLN */ + int length; /* Number of chars of data. */ + int maxlength; /* Space allocated. */ + int old_length; /* Space allocated for value pointer. */ + int numwidgets; /* Number of entries in above. */ + int maxallowed; /* The user is not allowed to grow source */ + /* to a size greater than this. */ + Time prim_time; /* time of primary selection */ + Boolean hasselection; /* Whether we own the selection. */ + Boolean editable; /* Whether we allow any edits. */ + Boolean take_selection; /* Whether we should take the selection. */ +} XmSourceDataRec, *XmSourceData; + +typedef void (*AddWidgetProc)(XmTextSource, + XmTextWidget); + +typedef int (*CountLinesProc)(XmTextSource, + XmTextPosition, + unsigned long); + +typedef void (*RemoveWidgetProc)(XmTextSource, + XmTextWidget); + +typedef XmTextPosition (*ReadProc)(XmTextSource, + XmTextPosition, /* starting position */ + XmTextPosition, /* The last position + we're interested in. + Don't return info + about any later + positions. */ + XmTextBlock); /* RETURN: text read */ + +typedef XmTextStatus (*ReplaceProc)(XmTextWidget, + XEvent *, + XmTextPosition *, + XmTextPosition *, + XmTextBlock, +#if NeedWidePrototypes + int); +#else + Boolean); +#endif /* NeedsWidePrototypes */ + +typedef XmTextPosition (*ScanProc)(XmTextSource, + XmTextPosition, + XmTextScanType, + XmTextScanDirection, /*XmsdLeft/XmsdRight*/ + int, +#if NeedWidePrototypes + int); +#else + Boolean); +#endif /* NeedsWidePrototypes */ + +typedef Boolean (*GetSelectionProc)(XmTextSource, + XmTextPosition *, + XmTextPosition *); + +typedef void (*SetSelectionProc)(XmTextSource, + XmTextPosition, + XmTextPosition, + Time); + + +typedef struct _XmTextSourceRec { + struct _XmSourceDataRec *data; /* Source-defined data (opaque type). */ + AddWidgetProc AddWidget; + CountLinesProc CountLines; + RemoveWidgetProc RemoveWidget; + ReadProc ReadSource; + ReplaceProc Replace; + ScanProc Scan; + GetSelectionProc GetSelection; + SetSelectionProc SetSelection; +} XmTextSourceRec; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTextStrSoP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ToggleB.h b/libXm/osx/Xm/ToggleB.h new file mode 100644 index 0000000..79b9b68 --- /dev/null +++ b/libXm/osx/Xm/ToggleB.h @@ -0,0 +1,113 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleB.h /main/12 1995/07/13 18:11:58 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/*********************************************************************** + * + * Toggle Widget + * + ***********************************************************************/ +#ifndef _XmToggle_h +#define _XmToggle_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref WidgetClass xmToggleButtonWidgetClass; + +typedef struct _XmToggleButtonClassRec *XmToggleButtonWidgetClass; +typedef struct _XmToggleButtonRec *XmToggleButtonWidget; + +/*fast subclass define */ +#ifndef XmIsToggleButton +#define XmIsToggleButton(w) XtIsSubclass(w, xmToggleButtonWidgetClass) +#endif /* XmIsToggleButton */ + + +/******** Public Function Declarations ********/ + +Boolean XmToggleButtonGetState( + Widget w); +void XmToggleButtonSetState( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify); +#else + Boolean newstate, + Boolean notify); +#endif /* NeedWidePrototypes */ + +Boolean XmToggleButtonSetValue( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify ); +#else + XmToggleButtonState newstate, + Boolean notify ); +#endif /* NeedWidePrototypes */ +Widget XmCreateToggleButton( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount); +Widget XmVaCreateToggleButton( + Widget parent, + char *name, + ...); +Widget XmVaCreateManagedToggleButton( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggle_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ToggleBG.h b/libXm/osx/Xm/ToggleBG.h new file mode 100644 index 0000000..27a81e9 --- /dev/null +++ b/libXm/osx/Xm/ToggleBG.h @@ -0,0 +1,117 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleBG.h /main/12 1995/07/13 18:12:49 drk $ */ +/* +* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/*********************************************************************** + * + * Toggle Gadget + * + ***********************************************************************/ +#ifndef _XmToggleG_h +#define _XmToggleG_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +externalref WidgetClass xmToggleButtonGadgetClass; + +typedef struct _XmToggleButtonGadgetClassRec *XmToggleButtonGadgetClass; +typedef struct _XmToggleButtonGadgetRec *XmToggleButtonGadget; +typedef struct _XmToggleButtonGCacheObjRec *XmToggleButtonGCacheObject; + + +/*fast subclass define */ +#ifndef XmIsToggleButtonGadget +#define XmIsToggleButtonGadget(w) XtIsSubclass(w, xmToggleButtonGadgetClass) +#endif /* XmIsToggleButtonGadget */ + + +/******** Public Function Declarations ********/ + +Boolean XmToggleButtonGadgetGetState( + Widget w); +void XmToggleButtonGadgetSetState( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify) ; +#else + Boolean newstate, + Boolean notify); +#endif /* NeedWidePrototypes */ + +Boolean XmToggleButtonGadgetSetValue( + Widget w, +#if NeedWidePrototypes + int newstate, + int notify); +#else + XmToggleButtonState newstate, + Boolean notify); +#endif /* NeedWidePrototypes */ + +Widget XmCreateToggleButtonGadget( + Widget parent, + char *name, + Arg *arglist, + Cardinal argCount); +Widget XmVaCreateToggleButtonGadget( + Widget parent, + char *name, + ...); +Widget XmVaCreateManagedToggleButtonGadget( + Widget parent, + char *name, + ...); +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleG_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ToggleBGI.h b/libXm/osx/Xm/ToggleBGI.h new file mode 100644 index 0000000..da4c8bb --- /dev/null +++ b/libXm/osx/Xm/ToggleBGI.h @@ -0,0 +1,63 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: ToggleBGI.h /main/5 1995/07/13 18:13:03 drk $ */ +#ifndef _XmToggleBGI_h +#define _XmToggleBGI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern int _XmToggleBCacheCompare(XtPointer A, XtPointer B) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleBGI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ToggleBGP.h b/libXm/osx/Xm/ToggleBGP.h new file mode 100644 index 0000000..c1ea783 --- /dev/null +++ b/libXm/osx/Xm/ToggleBGP.h @@ -0,0 +1,265 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleBGP.h /main/13 1996/03/29 18:56:49 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +/******************************************** + * + * No new fields need to be defined + * for the Toggle widget class record + * + ********************************************/ + +#ifndef _XmToggleButtonGP_h +#define _XmToggleButtonGP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ +/* The ToggleButton Gadget Cache Object's class and instance records*/ +/*************************************************************/ + + +typedef struct _XmToggleButtonGCacheObjClassPart +{ + int foo; +} XmToggleButtonGCacheObjClassPart; + + +typedef struct _XmToggleButtonGCacheObjClassRec +{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmLabelGCacheObjClassPart label_class_cache; + XmToggleButtonGCacheObjClassPart toggle_class_cache; +} XmToggleButtonGCacheObjClassRec; + +externalref XmToggleButtonGCacheObjClassRec xmToggleButtonGCacheObjClassRec; + + +typedef struct _XmToggleButtonGCacheObjPart +{ + unsigned char ind_type; + Boolean visible; + Dimension spacing; + Dimension indicator_dim; + Pixmap on_pixmap; + Pixmap insen_pixmap; + unsigned char ind_on; + Boolean fill_on_select; + Pixel select_color; + GC select_GC; + GC background_gc; + GC arm_GC; /* used in menus when enableEtchedInMenu + is set. */ + unsigned char toggle_mode; + Boolean reversed_select; + Pixmap indeterminate_pixmap; + Pixmap indeterminate_insensitive_pixmap; + Pixel unselect_color; + GC unselect_GC; + GC indeterminate_GC; + GC indeterminate_box_GC; + Dimension ind_left_delta; + Dimension ind_right_delta; + Dimension ind_top_delta; + Dimension ind_bottom_delta; +} XmToggleButtonGCacheObjPart; + +typedef struct _XmToggleButtonGCacheObjRec +{ + ObjectPart object; + XmExtPart ext; + XmLabelGCacheObjPart label_cache; + XmToggleButtonGCacheObjPart toggle_cache; +} XmToggleButtonGCacheObjRec; + + +/**************************************************** + * + * Full class record declaration for Toggle class + * + ****************************************************/ + +typedef struct _XmToggleButtonGadgetClassPart + { + XtPointer extension; + } XmToggleButtonGadgetClassPart; + + +typedef struct _XmToggleButtonGadgetClassRec { + RectObjClassPart rect_class; + XmGadgetClassPart gadget_class; + XmLabelGadgetClassPart label_class; + XmToggleButtonGadgetClassPart toggle_class; +} XmToggleButtonGadgetClassRec; + + +externalref XmToggleButtonGadgetClassRec xmToggleButtonGadgetClassRec; + + +typedef struct _XmToggleButtonGadgetPart +{ + Boolean indicator_set; + unsigned char set; + unsigned char visual_set; /* used for visuals and does not reflect + the true state of the button */ + Boolean Armed; + XtCallbackList value_changed_CB, + arm_CB, + disarm_CB; + + XmToggleButtonGCacheObjPart *cache; /* Replace cache instance fields */ + /* with a pointer */ + + Dimension detail_shadow_thickness ; +} XmToggleButtonGadgetPart; + + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmToggleButtonGadgetRec { + ObjectPart object; + RectObjPart rectangle; + XmGadgetPart gadget; + XmLabelGadgetPart label; + XmToggleButtonGadgetPart toggle; +} XmToggleButtonGadgetRec; + + +/**********/ +/* MACROS */ +/**********/ + +/* Macros for cached instance fields */ + +#define TBG_IndType(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_type) +#define TBG_Visible(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->visible) +#define TBG_Spacing(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->spacing) +#define TBG_IndicatorDim(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indicator_dim) +#define TBG_OnPixmap(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->on_pixmap) +#define TBG_InsenPixmap(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->insen_pixmap) +#define TBG_IndOn(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_on) +#define TBG_FillOnSelect(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->fill_on_select) +#define TBG_ReversedSelect(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->reversed_select) +#define TBG_SelectColor(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->select_color) +#define TBG_SelectGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->select_GC) +#define TBG_BackgroundGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->background_gc) +#define TBG_ArmGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->arm_GC) +#define TBG_ToggleMode(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->toggle_mode) +#define TBG_IndeterminatePixmap(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indeterminate_pixmap) +#define TBG_IndeterminateInsensitivePixmap(w) \ + (((XmToggleButtonGadget) (w)) -> \ + toggle.cache->indeterminate_insensitive_pixmap) +#define TBG_IndeterminateGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indeterminate_GC) +#define TBG_IndeterminateBoxGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->indeterminate_box_GC) +#define TBG_UnselectColor(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->unselect_color) +#define TBG_UnselectGC(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->unselect_GC) +#define TBG_IndLeftDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_left_delta) +#define TBG_IndRightDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_right_delta) +#define TBG_IndTopDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_top_delta) +#define TBG_IndBottomDelta(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.cache->ind_bottom_delta) + +/***************************************/ +/* Macros for uncached instance fields */ + +#define TBG_IndicatorSet(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.indicator_set) +#define TBG_Set(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.set) +#define TBG_VisualSet(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.visual_set) +#define TBG_ValueChangedCB(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.value_changed_CB) +#define TBG_ArmCB(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.arm_CB) +#define TBG_DisarmCB(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.disarm_CB) +#define TBG_Armed(w) \ + (((XmToggleButtonGadget) (w)) -> toggle.Armed) + +/******************************/ +/* Convenience Macros */ +/******************************/ + +#define TBG_Cache(w) (((XmToggleButtonGadget)(w))->toggle.cache) +#define TBG_ClassCachePart(w) \ + (((XmToggleButtonGadgetClass)xmToggleButtonGadgetClass)->gadget_class.cache_part) + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleButtonGP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ToggleBP.h b/libXm/osx/Xm/ToggleBP.h new file mode 100644 index 0000000..42039df --- /dev/null +++ b/libXm/osx/Xm/ToggleBP.h @@ -0,0 +1,152 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: ToggleBP.h /main/14 1996/03/29 18:56:59 pascale $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/******************************************** + * + * No new fields need to be defined + * for the Toggle widget class record + * + ********************************************/ + +#ifndef _XmToggleButtonP_h +#define _XmToggleButtonP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _XmToggleButtonClassPart + { + XtPointer extension; /* Pointer to extension record */ + } XmToggleButtonClassPart; + + +/**************************************************** + * + * Full class record declaration for Toggle class + * + ****************************************************/ +typedef struct _XmToggleButtonClassRec { + CoreClassPart core_class; + XmPrimitiveClassPart primitive_class; + XmLabelClassPart label_class; + XmToggleButtonClassPart toggle_class; +} XmToggleButtonClassRec; + + +externalref XmToggleButtonClassRec xmToggleButtonClassRec; + + +/******************************************** + * + * No new fields needed for instance record + * + ********************************************/ + +typedef struct _XmToggleButtonPart +{ + unsigned char ind_type; + Boolean visible; + Dimension spacing; + Dimension indicator_dim; + Boolean indicator_set; + Pixmap on_pixmap; + Pixmap insen_pixmap; + unsigned char set; + unsigned char visual_set; /* used for visuals and does not reflect + the true state of the button */ + unsigned char ind_on; + Boolean fill_on_select; + Pixel select_color; + GC select_GC; + GC background_gc; + GC arm_GC; /* used in menus when enableEtchedInMenu + is set. */ + XtCallbackList value_changed_CB, + arm_CB, + disarm_CB; + Boolean Armed; + unsigned char toggle_mode; + Boolean reversed_select; + Pixmap indeterminate_pixmap; + Pixmap indeterminate_insensitive_pixmap; + Pixel unselect_color; + GC unselect_GC; + GC indeterminate_GC; + GC indeterminate_box_GC; + Dimension ind_left_delta; + Dimension ind_right_delta; + Dimension ind_top_delta; + Dimension ind_bottom_delta; + Dimension detail_shadow_thickness ; +} XmToggleButtonPart; + + + +/**************************************************************** + * + * Full instance record declaration + * + ****************************************************************/ + +typedef struct _XmToggleButtonRec { + CorePart core; + XmPrimitivePart primitive; + XmLabelPart label; + XmToggleButtonPart toggle; +} XmToggleButtonRec; + + +/******** Private Function Declarations ********/ + + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToggleButtonP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/ToolTipCT.h b/libXm/osx/Xm/ToolTipCT.h new file mode 100644 index 0000000..4262c7d --- /dev/null +++ b/libXm/osx/Xm/ToolTipCT.h @@ -0,0 +1,38 @@ +/** + * + * $Id: ToolTipCT.h,v 1.1 2004/11/18 08:54:33 yura Exp $ + * + **/ + +#ifndef _XmToolTipCT_H +#define _XmToolTipCT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTtoolTipConfig; + +/* Trait structures and typedefs, place typedefs first */ + +typedef struct _XmToolTipConfigTraitRec +{ + int version; + Widget label; /* XmLabel for the tips */ + int post_delay; /* delay before posting XmNtoolTipPostDelay */ + int post_duration; /* duration XmNtoolTipPostDuration */ + XtIntervalId timer; /* timer for post delay */ + XtIntervalId duration_timer; /* timer for duration */ + Time leave_time; /* time of the last leave event */ + Widget slider; /* the XmSlideContext used to slide in the tip */ + Boolean enable; /* flag to disable all this stuff */ +} XmToolTipConfigTraitRec, *XmToolTipConfigTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToolTipCT_H */ diff --git a/libXm/osx/Xm/ToolTipI.h b/libXm/osx/Xm/ToolTipI.h new file mode 100644 index 0000000..0b3862a --- /dev/null +++ b/libXm/osx/Xm/ToolTipI.h @@ -0,0 +1,40 @@ +/** + * + * $Id: ToolTipI.h,v 1.6.2.1 2008/02/07 11:49:31 yura Exp $ + * + **/ +#ifndef _XmToolTip_h +#define _XmToolTip_h + +#include +#include "Xm.h" +#include "XmI.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void _XmToolTipEnter(Widget wid, + XEvent *event, + String *params, + Cardinal *num_params); + +void _XmToolTipLeave(Widget wid, + XEvent *event, + String *params, + Cardinal *num_params); + +#ifdef FIX_1388 +void _XmToolTipRemove(Widget wid); +#endif + +XmString XmGetToolTipString (Widget w); + +void XmSetToolTipString (Widget w, + XmString s); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libXm/osx/Xm/ToolTipT.h b/libXm/osx/Xm/ToolTipT.h new file mode 100644 index 0000000..c48f2cf --- /dev/null +++ b/libXm/osx/Xm/ToolTipT.h @@ -0,0 +1,31 @@ +/** + * + * $Id: ToolTipT.h,v 1.1 2004/11/18 08:54:33 yura Exp $ + * + **/ + +#ifndef _XmToolTipT_H +#define _XmToolTipT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +externalref XrmQuark XmQTtoolTip; + +/* Trait structures and typedefs, place typedefs first */ + +typedef struct _XmToolTipTraitRec +{ + int version; + XmString tool_tip_string; +} XmToolTipTraitRec, *XmToolTipTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmToolTipT_H */ diff --git a/libXm/osx/Xm/TraitI.h b/libXm/osx/Xm/TraitI.h new file mode 100644 index 0000000..1b43af5 --- /dev/null +++ b/libXm/osx/Xm/TraitI.h @@ -0,0 +1,62 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: TraitI.h /main/5 1995/07/13 18:13:57 drk $ */ +#ifndef _XmTraitI_h +#define _XmTraitI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations ********/ + +extern void _XmInitializeTraits(void); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTraitI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TraitP.h b/libXm/osx/Xm/TraitP.h new file mode 100644 index 0000000..3d4a266 --- /dev/null +++ b/libXm/osx/Xm/TraitP.h @@ -0,0 +1,92 @@ +/* $XConsortium: TraitP.h /main/5 1995/07/15 20:56:18 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmTraitP_H +#define _XmTraitP_H 1 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Macros */ + +#define XmeTraitRemove(w, t) XmeTraitSet((XtPointer) w, t, NULL) + + +/******** Private Function Declarations ********/ + +/* + * XmeTraitGet(object, trait) returns a pointer to the trait_record + * from looking up the trait on this object. If the trait + * is not found then NULL is returned. This can therefore be used + * in the following cliche' + * + * if (trait_rec = XmeTraitGet(XtClass(w), XmQTactivate)) { + * trait_rec -> activate(); + * trait_rec -> disarm(); + * } + */ + +extern XtPointer XmeTraitGet(XtPointer, XrmQuark); + +/* + * Boolean XmeTraitSet(object, traitname, traitrecord) + * + * Installs the trait on the object. Boolean will indicate + * success of the installation. + * + * Install will use the direct pointer to traitrecord given. The + * implementation is therefore not allowed to use automatic + * storage for traitrecord, but can use malloc or static initialization + * + */ + +extern Boolean XmeTraitSet(XtPointer, XrmQuark, XtPointer); + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTraitP_H */ + diff --git a/libXm/osx/Xm/Transfer.h b/libXm/osx/Xm/Transfer.h new file mode 100644 index 0000000..7783d83 --- /dev/null +++ b/libXm/osx/Xm/Transfer.h @@ -0,0 +1,146 @@ +/* $TOG: Transfer.h /main/8 1998/02/03 14:55:22 csn $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmTransfer_H +#define _XmTransfer_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Proc typedefs */ + +#define XmConvertCallbackProc XtCallbackProc +#define XmSelectionDoneProc XtSelectionDoneProc +#define XmCancelSelectionProc XtCancelConvertSelectionProc +#define XmDestinationCallbackProc XtCallbackProc +#define XmSelectionCallbackProc XtSelectionCallbackProc + +/* Flags */ + +typedef enum { XmTRANSFER_DONE_SUCCEED = 0, XmTRANSFER_DONE_FAIL, + XmTRANSFER_DONE_CONTINUE, XmTRANSFER_DONE_DEFAULT + } XmTransferStatus; + +enum { XmSELECTION_DEFAULT = 0, XmSELECTION_INCREMENTAL, + XmSELECTION_PERSIST, XmSELECTION_SNAPSHOT, + XmSELECTION_TRANSACT }; + +enum { XmCONVERTING_NONE = 0, + XmCONVERTING_SAME = 1, + XmCONVERTING_TRANSACT = 2, + XmCONVERTING_PARTIAL = 4 }; + +enum { XmCONVERT_DEFAULT = 0, XmCONVERT_MORE, + XmCONVERT_MERGE, XmCONVERT_REFUSE, XmCONVERT_DONE }; + +/* Callback structures */ + +typedef struct { + int reason; + XEvent *event; + Atom selection; + Atom target; + XtPointer source_data; + XtPointer location_data; + int flags; + XtPointer parm; + int parm_format; + unsigned long parm_length; + Atom parm_type; + int status; + XtPointer value; + Atom type; + int format; + unsigned long length; +} XmConvertCallbackStruct; + +typedef struct { + int reason; + XEvent *event; + Atom selection; + XtEnum operation; + int flags; + XtPointer transfer_id; + XtPointer destination_data; + XtPointer location_data; + Time time; +} XmDestinationCallbackStruct; + +typedef struct { + int reason; + XEvent *event; + Atom selection; + Atom target; + Atom type; + XtPointer transfer_id; + int flags; + int remaining; + XtPointer value; + unsigned long length; + int format; +} XmSelectionCallbackStruct; + +typedef struct { + int reason; + XEvent *event; + Atom selection; + XtPointer transfer_id; + XmTransferStatus status; + XtPointer client_data; +} XmTransferDoneCallbackStruct; + +typedef void (*XmSelectionFinishedProc)(Widget, XtEnum, + XmTransferDoneCallbackStruct*); + +void XmTransferDone(XtPointer, XmTransferStatus); +void XmTransferValue(XtPointer, Atom, XtCallbackProc, + XtPointer, Time); +void XmTransferSetParameters(XtPointer, XtPointer, int, unsigned long, Atom); +void XmTransferStartRequest(XtPointer); +void XmTransferSendRequest(XtPointer, Time); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransfer_H */ diff --git a/libXm/osx/Xm/TransferI.h b/libXm/osx/Xm/TransferI.h new file mode 100644 index 0000000..ff55e75 --- /dev/null +++ b/libXm/osx/Xm/TransferI.h @@ -0,0 +1,153 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* $XConsortium: TransferI.h /main/6 1996/10/16 16:57:37 drk $ */ +#ifndef _XmTransferI_H +#define _XmTransferI_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************/ +/* Structure which is stored for each transfer request. This */ +/* is where XmTransferValue will keep the data for the internal */ +/* wrapper. */ +/****************************************************************/ + +#define TB_NONE 0 +#define TB_IGNORE 1 +#define TB_INTERNAL 2 + +typedef struct { + XtPointer next; + XtPointer client_data; + XtPointer location_data; + int flags; + Atom target; + XtCallbackProc selection_proc; +} TransferBlockRec, *TransferBlock; + +/****************************************************************/ +/* This structure forms the context block for each transfer_id. */ +/* These structures are chained to allow for multiple */ +/* concurrent outstanding data transfers. */ +/****************************************************************/ + +typedef struct { + XtPointer next; + XtPointer prev; + Widget widget; + Atom selection; + Atom real_selection; + XtEnum op; + int count; + int outstanding; + int flags; + int status; + Widget drag_context; + Widget drop_context; + XmSelectionFinishedProc *doneProcs; + int numDoneProcs; + XtCallbackProc auto_proc; + XtPointer client_data; + XmDestinationCallbackStruct *callback_struct; + TransferBlock last; + TransferBlock requests; +} TransferContextRec, *TransferContext; + +enum{ TC_NONE = 0, TC_FLUSHED = 1, TC_CALLED_WIDGET = 2, + TC_CALLED_CALLBACKS = 4, TC_EXITED_DH = 8, + TC_DID_DELETE = 16, TC_IN_MULTIPLE = 32 }; + +/****************************************************************/ +/* The convertProc has a small context block which is */ +/* setup by the source calls and deleted in the loseProc */ +/****************************************************************/ + +typedef struct { + long op; /* Make it big so it can hold a variety of data */ + int flags; + long itemid; + XtPointer location_data; + XtPointer client_data; + Widget drag_context; +} ConvertContextRec, *ConvertContext; + +enum{ CC_NONE = 0}; + +/****************************************************************/ +/* Need to keep a count of outstanding SNAPSHOT requests. */ +/****************************************************************/ + +typedef struct { + long outstanding; + Atom distinguisher; +} SnapshotRequestRec, *SnapshotRequest; + +/* Internal functions */ + +extern char * _XmTextToLocaleText(Widget, XtPointer, Atom, int, + unsigned long, Boolean *); + +extern void _XmConvertHandlerSetLocal(void); + +extern Boolean _XmConvertHandler(Widget wid, Atom *selection, Atom *target, + Atom *type, XtPointer *value, + unsigned long *size, int *fmt); + +extern Boolean _XmDestinationHandler(Widget wid, Atom selection, XtEnum op, + XmSelectionFinishedProc done_proc, + XtPointer location_data, Time time, + XSelectionRequestEvent *event); + +extern void _XmConvertComplete(Widget wid, XtPointer value, + unsigned long size, int format, Atom type, + XmConvertCallbackStruct *cs); + +extern XmDestinationCallbackStruct + *_XmTransferGetDestinationCBStruct(XtPointer); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransferI_H */ + diff --git a/libXm/osx/Xm/TransferP.h b/libXm/osx/Xm/TransferP.h new file mode 100644 index 0000000..cac1bd5 --- /dev/null +++ b/libXm/osx/Xm/TransferP.h @@ -0,0 +1,74 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +/* $TOG: TransferP.h /main/6 1999/09/01 17:14:43 mgreess $ */ +#ifndef _TransferP_H +#define _TransferP_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern void XmeConvertMerge(XtPointer, Atom, int, unsigned long, + XmConvertCallbackStruct*); +extern Boolean XmePrimarySource(Widget, Time); +extern Boolean XmeNamedSource(Widget, Atom, Time); +extern Boolean XmeSecondarySource(Widget, Time); +extern void XmeSecondaryTransfer(Widget, Atom, XtEnum, Time); +extern Boolean XmeClipboardSource(Widget, XtEnum, Time); +extern Widget XmeDragSource(Widget, XtPointer, XEvent*, ArgList, Cardinal); + +extern Boolean XmePrimarySink(Widget, XtEnum, XtPointer, Time); +extern Boolean XmeNamedSink(Widget, Atom, XtEnum, XtPointer, Time); +extern Boolean XmeSecondarySink(Widget, Time); +extern Boolean XmeClipboardSink(Widget, XtEnum, XtPointer); +extern void XmeDropSink(Widget, ArgList, Cardinal); + +extern Atom *XmeStandardTargets(Widget, int, int*); +extern void XmeStandardConvert(Widget, XtPointer, XmConvertCallbackStruct*); +extern Atom XmeGetEncodingAtom(Widget); +extern void XmeTransferAddDoneProc(XtPointer, + XmSelectionFinishedProc); + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _TransferP_H */ diff --git a/libXm/osx/Xm/TransferT.h b/libXm/osx/Xm/TransferT.h new file mode 100644 index 0000000..bf44b55 --- /dev/null +++ b/libXm/osx/Xm/TransferT.h @@ -0,0 +1,68 @@ +/* $XConsortium: TransferT.h /main/4 1995/07/15 20:56:34 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ + +#ifndef _XmTransferT_H +#define _XmTransferT_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTtransfer; + +/* Trait structures and typedefs, place typedefs first */ + +/* Version 0: initial release. */ + +typedef struct _XmTransferTraitRec { + int version; /* 0 */ + XmConvertCallbackProc convertProc; + XmDestinationCallbackProc destinationProc; + XmDestinationCallbackProc destinationPreHookProc; +} XmTransferTraitRec, *XmTransferTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransferT_H */ diff --git a/libXm/osx/Xm/TransltnsP.h b/libXm/osx/Xm/TransltnsP.h new file mode 100644 index 0000000..45dd365 --- /dev/null +++ b/libXm/osx/Xm/TransltnsP.h @@ -0,0 +1,145 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* $TOG: TransltnsP.h /main/14 1999/04/29 13:05:42 samborn $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmTransltnsP_h +#define _XmTransltnsP_h + +#include /* for externalref */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef _XmConst +#define _XmConst +#endif + + +externalref _XmConst char _XmArrowB_defaultTranslations[]; +externalref _XmConst char _XmBulletinB_defaultTranslations[]; +externalref _XmConst char _XmCascadeB_menubar_events[]; +externalref _XmConst char _XmCascadeB_p_events[]; +externalref _XmConst char _XmComboBox_defaultTranslations[]; +externalref _XmConst char _XmComboBox_defaultAccelerators[]; +externalref _XmConst char _XmComboBox_dropDownComboBoxAccelerators[]; +externalref _XmConst char _XmComboBox_dropDownListTranslations[]; +externalref _XmConst char _XmComboBox_textFocusTranslations[]; +externalref _XmConst char _XmContainer_defaultTranslations[]; +externalref _XmConst char _XmContainer_traversalTranslations[]; +externalref _XmConst char _XmDisplay_baseTranslations[]; +externalref _XmConst char _XmDragC_defaultTranslations[]; +externalref _XmConst char _XmDrawingA_defaultTranslations[]; +externalref _XmConst char _XmDrawingA_traversalTranslations[]; +externalref _XmConst char _XmDrawnB_defaultTranslations[]; +externalref _XmConst char _XmDrawnB_menuTranslations[]; +externalref _XmConst char _XmFrame_defaultTranslations[]; +externalref _XmConst char _XmGrabShell_translations []; +externalref _XmConst char _XmLabel_defaultTranslations[]; +externalref _XmConst char _XmLabel_menuTranslations[]; +externalref _XmConst char _XmLabel_menu_traversal_events[]; +externalref _XmConst char _XmList_ListXlations1[]; +externalref _XmConst char _XmList_ListXlations2[]; +externalref _XmConst char _XmManager_managerTraversalTranslations[]; +externalref _XmConst char _XmManager_defaultTranslations[]; +externalref _XmConst char _XmNotebook_manager_translations[]; +externalref _XmConst char _XmNotebook_TabAccelerators[]; +externalref _XmConst char _XmMenuShell_translations []; +externalref _XmConst char _XmPrimitive_defaultTranslations[]; +externalref _XmConst char _XmPushB_defaultTranslations[]; +externalref _XmConst char _XmPushB_menuTranslations[]; +externalref _XmConst char _XmRowColumn_menu_traversal_table[]; +externalref _XmConst char _XmRowColumn_bar_table[]; +externalref _XmConst char _XmRowColumn_option_table[]; +externalref _XmConst char _XmRowColumn_menu_table[]; +externalref _XmConst char _XmSash_defTranslations[]; +externalref _XmConst char _XmScrollBar_defaultTranslations[]; +externalref _XmConst char _XmScrolledW_ScrolledWindowXlations[]; +externalref _XmConst char _XmClipWindowTranslationTable[]; +externalref _XmConst char _XmScrolledW_WorkWindowTranslationTable[]; +externalref _XmConst char _XmSelectioB_defaultTextAccelerators[]; +externalref _XmConst char _XmSpinB_defaultTranslations[]; +externalref _XmConst char _XmSpinB_defaultAccelerators[]; +externalref _XmConst char _XmTearOffB_overrideTranslations[]; +externalref _XmConst char _XmTextF_EventBindings1[]; +externalref _XmConst char _XmTextF_EventBindings2[]; +externalref _XmConst char _XmTextF_EventBindings3[]; +externalref _XmConst char _XmDataF_EventBindings1[]; +externalref _XmConst char _XmDataF_EventBindings2[]; +externalref _XmConst char _XmDataF_EventBindings3[]; +externalref _XmConst char _XmDataF_EventBindings4[]; +externalref _XmConst char _XmTextIn_XmTextEventBindings1[]; +externalref _XmConst char _XmTextIn_XmTextEventBindings2[]; +externalref _XmConst char _XmTextIn_XmTextEventBindings3[]; +externalref _XmConst char _XmTextIn_XmTextVEventBindings[]; +externalref _XmConst char _XmToggleB_defaultTranslations[]; +externalref _XmConst char _XmToggleB_menuTranslations[]; +externalref _XmConst char _XmVirtKeys_fallbackBindingString[]; + +/* + * The following keybindings have been "grandfathered" + * for backward compatablility. + */ +externalref _XmConst char _XmVirtKeys_acornFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_apolloFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_dgFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_decFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_dblclkFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_hpFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_ibmFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_ingrFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_megatekFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_motorolaFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_sgiFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_siemensWx200FallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_siemens9733FallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_sunFallbackBindingString[]; +externalref _XmConst char _XmVirtKeys_tekFallbackBindingString[]; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTransltnsP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/TravActI.h b/libXm/osx/Xm/TravActI.h new file mode 100644 index 0000000..941a4a9 --- /dev/null +++ b/libXm/osx/Xm/TravActI.h @@ -0,0 +1,160 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TravActI.h /main/9 1995/07/13 18:15:46 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTravActI_h +#define _XmTravActI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmFOCUS_RESET 1<<0 +#define XmFOCUS_IGNORE 1<<1 + +/******** Private Function Declarations ********/ + +extern unsigned short _XmGetFocusFlag( + Widget w, + unsigned int mask) ; +extern void _XmSetFocusFlag( + Widget w, + unsigned int mask, +#if NeedWidePrototypes + int value ) ; +#else + Boolean value ) ; +#endif /* NeedWidePrototypes */ +extern void _XmTrackShellFocus( + Widget widget, + XtPointer client_data, + XEvent *event, + Boolean *dontSwallow) ; +extern void _XmPrimitiveEnter( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveLeave( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveUnmap( + Widget pw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveFocusInInternal( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveFocusOut( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmPrimitiveFocusIn( + Widget pw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmEnterGadget( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmLeaveGadget( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmFocusInGadget( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmFocusOutGadget( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerEnter( + Widget wid, + XEvent *event_in, + String *params, + Cardinal *num_params) ; +extern void _XmManagerLeave( + Widget wid, + XEvent *event_in, + String *params, + Cardinal *num_params) ; +extern void _XmManagerFocusInInternal( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerFocusIn( + Widget mw, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerFocusOut( + Widget wid, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern void _XmManagerUnmap( + Widget mw, + XEvent *event, + String *params, + Cardinal *num_params) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTravActI_h */ diff --git a/libXm/osx/Xm/TravConT.h b/libXm/osx/Xm/TravConT.h new file mode 100644 index 0000000..86aac8b --- /dev/null +++ b/libXm/osx/Xm/TravConT.h @@ -0,0 +1,72 @@ +/* $XConsortium: TravConT.h /main/5 1995/07/15 20:56:44 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmTravConT_h +#define _XmTravConT_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTtraversalControl; + + +typedef Widget (*XmTraversalRedirectionProc)(Widget old_focus, + Widget new_focus, + unsigned int focus_policy, + XmTraversalDirection direction, + unsigned int pass); + + +/* Version 0: initial release. */ + +typedef struct _XmTraversalControlTraitRec { + int version; /* 0 */ + XmTraversalRedirectionProc redirect; +} XmTraversalControlTraitRec, *XmTraversalControlTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* XmTravConT_h */ diff --git a/libXm/osx/Xm/TraversalI.h b/libXm/osx/Xm/TraversalI.h new file mode 100644 index 0000000..e9b82de --- /dev/null +++ b/libXm/osx/Xm/TraversalI.h @@ -0,0 +1,308 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: TraversalI.h /main/11 1995/07/13 18:16:58 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmTraversalI_h +#define _XmTraversalI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define NavigTypeIsTabGroup(navigation_type) \ + ((navigation_type == XmTAB_GROUP) || \ + (navigation_type == XmSTICKY_TAB_GROUP) || \ + (navigation_type == XmEXCLUSIVE_TAB_GROUP)) + + +typedef enum { + XmUnrelated, + XmMyAncestor, + XmMyDescendant, + XmMyCousin, + XmMySelf +} XmGeneology; + +typedef struct _XmTravGraphRec +{ + union _XmTraversalNodeRec *head ; + Widget top ; + union _XmTraversalNodeRec *current ; + unsigned short num_entries ; + unsigned short num_alloc ; + unsigned short next_alloc ; + unsigned short exclusive ; + unsigned short tab_list_alloc ; + unsigned short num_tab_list ; + Widget *excl_tab_list ; +} XmTravGraphRec, * XmTravGraph ; + + +typedef struct _XmFocusDataRec { + Widget active_tab_group; + Widget focus_item; + Widget old_focus_item; + Widget pointer_item; + Widget old_pointer_item; + Boolean needToFlush; + XCrossingEvent lastCrossingEvent; + XmGeneology focalPoint; + unsigned char focus_policy ; /* Mirrors focus_policy resource when focus */ + XmTravGraphRec trav_graph ; /* data retrieved using _XmGetFocusData().*/ + Widget first_focus ; +} XmFocusDataRec ; + +typedef enum +{ + XmTAB_GRAPH_NODE, XmTAB_NODE, XmCONTROL_GRAPH_NODE, XmCONTROL_NODE +} XmTravGraphNodeType ; + +typedef union _XmDeferredGraphLink +{ + int offset ; + struct _XmGraphNodeRec *link ; +} XmDeferredGraphLink ; + +typedef struct _XmAnyNodeRec /* Common */ +{ + unsigned char type ; + XmNavigationType nav_type ; + XmDeferredGraphLink tab_parent ; + Widget widget ; + XRectangle rect ; + union _XmTraversalNodeRec *next ; + union _XmTraversalNodeRec *prev ; +} XmAnyNodeRec, *XmAnyNode ; + +typedef struct _XmControlNodeRec +{ + XmAnyNodeRec any ; + union _XmTraversalNodeRec *up ; + union _XmTraversalNodeRec *down ; +} XmControlNodeRec, *XmControlNode ; + +typedef struct _XmTabNodeRec +{ + XmAnyNodeRec any ; +} XmTabNodeRec, *XmTabNode ; + +typedef struct _XmGraphNodeRec +{ + XmAnyNodeRec any ; + union _XmTraversalNodeRec *sub_head ; + union _XmTraversalNodeRec *sub_tail ; +} XmGraphNodeRec, *XmGraphNode ; + +typedef union _XmTraversalNodeRec +{ + XmAnyNodeRec any ; + XmControlNodeRec control ; + XmTabNodeRec tab ; + XmGraphNodeRec graph ; +} XmTraversalNodeRec, *XmTraversalNode ; + +typedef struct +{ + XmTraversalNode *items; + XmTraversalNode lead_item; + Cardinal num_items; + Cardinal max_items; + Position min_hint; + Position max_hint; +} XmTraversalRow; + + +/******** Private Function Declarations for Traversal.c ********/ + +extern XmFocusData _XmCreateFocusData( void ) ; +extern void _XmDestroyFocusData( + XmFocusData focusData) ; +extern void _XmSetActiveTabGroup( + XmFocusData focusData, + Widget tabGroup) ; +extern Widget _XmGetActiveItem( + Widget w) ; +extern void _XmNavigInitialize( + Widget request, + Widget new_wid, + ArgList args, + Cardinal *num_args) ; +extern Boolean _XmNavigSetValues( + Widget current, + Widget request, + Widget new_wid, + ArgList args, + Cardinal *num_args) ; +extern void _XmNavigResize( + Widget wid) ; +extern void _XmValidateFocus( + Widget wid) ; +extern void _XmNavigDestroy( + Widget wid) ; +extern Boolean _XmCallFocusMoved( + Widget old, + Widget new_wid, + XEvent *event) ; +extern Boolean _XmMgrTraversal( + Widget wid, + XmTraversalDirection direction) ; +extern void _XmClearFocusPath( + Widget wid) ; +extern Boolean _XmFocusIsHere( + Widget w) ; +extern unsigned char _XmGetFocusPolicy( + Widget w) ; +extern Widget _XmFindTopMostShell( + Widget w) ; +extern void _XmFocusModelChanged( + Widget wid, + XtPointer client_data, + XtPointer call_data) ; +extern XmFocusData _XmGetFocusData( + Widget wid) ; +extern Boolean _XmComputeVisibilityRect( + Widget w, + XRectangle *rectPtr, + Boolean include_initial_border, + Boolean allow_scrolling) ; +extern Boolean _XmGetPointVisibility(Widget w, + int root_x, + int root_y); +extern void _XmSetRect( + register XRectangle *rect, + Widget w) ; +extern int _XmIntersectRect( + register XRectangle *srcRectA, + register Widget widget, + register XRectangle *dstRect) ; +extern int _XmEmptyRect( + register XRectangle *r) ; +extern void _XmClearRect( + register XRectangle *r) ; +extern Boolean _XmIsNavigable( + Widget wid) ; +extern void _XmWidgetFocusChange( + Widget wid, + XmFocusChange change) ; +extern Widget _XmNavigate( + Widget wid, + XmTraversalDirection direction) ; +extern void _XmSetInitialOfTabGroup( + Widget tab_group, + Widget init_focus) ; +extern void _XmResetTravGraph( + Widget wid) ; +extern Boolean _XmShellIsExclusive( + Widget wid) ; +extern Widget _XmGetFirstFocus( + Widget wid) ; + +/******** End Private Function Declarations ********/ + +/******** Private Function Declarations for TraversalI.c ********/ + +extern XmNavigability _XmGetNavigability( + Widget wid) ; +extern Boolean _XmIsViewable( + Widget wid) ; +extern Widget _XmIsScrollableClipWidget( + Widget work_window, + Boolean scrollable, + XRectangle *visRect) ; +extern Boolean _XmGetEffectiveView( + Widget wid, + XRectangle *visRect) ; +extern Boolean _XmIntersectionOf( + register XRectangle *srcRectA, + register XRectangle *srcRectB, + register XRectangle *destRect) ; +extern XmNavigationType _XmGetNavigationType( + Widget widget) ; +extern Widget _XmGetActiveTabGroup( + Widget wid) ; +extern Widget _XmTraverseAway( + XmTravGraph list, + Widget wid, +#if NeedWidePrototypes + int wid_is_control) ; +#else + Boolean wid_is_control) ; +#endif /* NeedWidePrototypes */ +extern Widget _XmTraverse( + XmTravGraph list, + XmTraversalDirection action, + XmTraversalDirection *local_dir, + Widget reference_wid) ; +extern void _XmFreeTravGraph( + XmTravGraph trav_list) ; +extern void _XmTravGraphRemove( + XmTravGraph tgraph, + Widget wid) ; +extern void _XmTravGraphAdd( + XmTravGraph tgraph, + Widget wid) ; +extern void _XmTravGraphUpdate( + XmTravGraph tgraph, + Widget wid) ; +extern Boolean _XmNewTravGraph( + XmTravGraph trav_list, + Widget top_wid, + Widget init_current) ; +extern Boolean _XmSetInitialOfTabGraph( + XmTravGraph trav_graph, + Widget tab_group, + Widget init_focus) ; +extern void _XmTabListAdd( + XmTravGraph graph, + Widget wid) ; +extern void _XmTabListDelete( + XmTravGraph graph, + Widget wid) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTraversalI_h */ diff --git a/libXm/osx/Xm/Tree.h b/libXm/osx/Xm/Tree.h new file mode 100644 index 0000000..ad04bbe --- /dev/null +++ b/libXm/osx/Xm/Tree.h @@ -0,0 +1,69 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmTree_h +#define _XmTree_h + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#include +#include + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct _XmTreeClassRec *XmTreeWidgetClass; +typedef struct _XmTreeRec *XmTreeWidget; + + +/* Function Name: XmCreateTree + * Description: Creation Routine for UIL and ADA. + * Arguments: parent - the parent widget. + * name - the name of the widget. + * args, num_args - the number and list of args. + * Returns: The Widget created. + */ + +Widget XmCreateTree( +#ifndef _NO_PROTO +Widget, String, ArgList, Cardinal +#endif +); + +extern WidgetClass xmTreeWidgetClass; + +/************************************************************ +* MACROS +*************************************************************/ + + +/************************************************************ +* GLOBAL FUNCTION DECLARATIONS +*************************************************************/ + +#if defined(__cplusplus) +} +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _Tree_h */ diff --git a/libXm/osx/Xm/TreeP.h b/libXm/osx/Xm/TreeP.h new file mode 100644 index 0000000..f86223c --- /dev/null +++ b/libXm/osx/Xm/TreeP.h @@ -0,0 +1,191 @@ +/* + * Copyright 1990, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + */ + +#ifndef _XmTreeP_h_ +#define _XmTreeP_h_ + + +/************************************************************ +* INCLUDE FILES +*************************************************************/ + +#include +#include +#include + +/************************************************************ +* TYPEDEFS AND DEFINES +*************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + + +/************************************************************ +* MACROS +*************************************************************/ + +#define XmTree_h_node_space(w) (((XmTreeWidget)(w))->tree.h_node_space) +#define XmTree_v_node_space(w) (((XmTreeWidget)(w))->tree.v_node_space) +#define XmTree_connect_style(w) (((XmTreeWidget)(w))->tree.connect_style) +#define XmTree_max_width(w) (((XmTreeWidget)(w))->tree.max_width) +#define XmTree_max_height(w) (((XmTreeWidget)(w))->tree.max_height) +#define XmTree_child_op_list(w) (((XmTreeWidget)(w))->tree.child_op_list) +#define XmTree_ul_point(w) (((XmTreeWidget)(w))->tree.ul_point) +#define XmTree_lr_point(w) (((XmTreeWidget)(w))->tree.lr_point) +#define XmTree_orientation(w) (((XmTreeWidget)(w))->tree.orientation) +#define XmTree_compress_style(w) (((XmTreeWidget)(w))->tree.compress_style) +#define XmTree_vertical_delta(w) (((XmTreeWidget)(w))->tree.vertical_delta) +#define XmTree_horizontal_delta(w) (((XmTreeWidget)(w))->tree.horizontal_delta) + +#define XmTreeC_open_close_padding(c) (((XmTreeConstraintPtr)(c))->tree.open_close_padding) +#define XmTreeC_box_x(c) (((XmTreeConstraintPtr)(c))->tree.box_x) +#define XmTreeC_box_y(c) (((XmTreeConstraintPtr)(c))->tree.box_y) +#define XmTreeC_bb_width(c) (((XmTreeConstraintPtr)(c))->tree.bb_width) +#define XmTreeC_bb_height(c) (((XmTreeConstraintPtr)(c))->tree.bb_height) +#define XmTreeC_widget_offset(c) (((XmTreeConstraintPtr)(c))->tree.widget_offset) +#define XmTreeC_placed(c) (((XmTreeConstraintPtr)(c))->tree.placed) +#define XmTreeC_color(c) (((XmTreeConstraintPtr)(c))->tree.color) +#define XmTreeC_background_color(c) (((XmTreeConstraintPtr)(c))->tree.background_color) +#define XmTreeC_line_width(c) (((XmTreeConstraintPtr)(c))->tree.line_width) +#define XmTreeC_line_style(c) (((XmTreeConstraintPtr)(c))->tree.line_style) +#define XmTreeC_gc(c) (((XmTreeConstraintPtr)(c))->tree.gc) +#define XmTreeC_new_x(c) (((XmTreeConstraintPtr)(c))->tree.new_x) +#define XmTreeC_new_y(c) (((XmTreeConstraintPtr)(c))->tree.new_y) +#define XmTreeC_oc_new_x(c) (((XmTreeConstraintPtr)(c))->tree.oc_new_x) +#define XmTreeC_oc_new_y(c) (((XmTreeConstraintPtr)(c))->tree.oc_new_y) +#define XmTreeC_map(c) (((XmTreeConstraintPtr)(c))->tree.map) +#define XmTreeC_unmap(c) (((XmTreeConstraintPtr)(c))->tree.unmap) +#define XmTreeC_move(c) (((XmTreeConstraintPtr)(c))->tree.move) +#define XmTreeC_is_compressed(c) (((XmTreeConstraintPtr)(c))->tree.is_compressed) + +/************************************************************ +* GLOBAL DECLARATIONS +*************************************************************/ + +typedef struct { + XtPointer extension; /* Just in case we need it later. */ +} TreeClassPart; + +typedef struct _XmTreeClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ConstraintClassPart constraint_class; + XmManagerClassPart manager_class; + HierarchyClassPart hierarchy_class; + TreeClassPart tree_class; +} XmTreeClassRec; +externalref XmTreeClassRec xmTreeClassRec; + +typedef struct _TreeNodeInfo { + /* + * Public (Resource) data. + */ + + int open_close_padding; /* Number of pixels to leave between o/c button + and node button (can be negative). */ + + /* + * Private data. + */ + + Position box_x, box_y; + Dimension bb_width, bb_height; /*Bounding box for myself and my children*/ + Dimension widget_offset; /* Amount of space to leave for the open + close button to the left of the node.*/ + Boolean placed; + + Pixel color; /* color to draw line in. */ + int line_width; + + GC gc; + + Position new_x, new_y, oc_new_x, oc_new_y; + Boolean map, unmap, move; + Boolean is_compressed; /* for space compression, is this node moved? */ + + /* more resources */ + int line_style; + Pixel background_color; /* color to draw line in. */ +} TreeNodeInfo; + +typedef struct _TreeConstraintRec { + XmManagerConstraintPart manager; + HierNodeInfo hierarchy; + TreeNodeInfo tree; +} XmTreeConstraintRec, TreeConstraintRec, *TreeConstraints, *XmTreeConstraintPtr; + + +typedef struct _TreePart { + /* Resources */ + + Dimension h_node_space, v_node_space; /* Space between various nodes. */ + + XmTreeConnectStyle connect_style; /* The connection style. */ + + + /* Private State */ + + Dimension max_width; /* Our new desired width. */ + Dimension max_height; /* Our new desired height. */ + + XmList child_op_list; /* List of child operations */ + XPoint ul_point, lr_point; /* Bounding box for exposure compression. */ + + /* more resources */ + unsigned char orientation; /* XmHORIZONTAL or XmVERTICAL */ + + XmTreeCompressStyle compress_style; /* how to do space compression */ + + Dimension vertical_delta; /* if doing space compression, how many pixels */ + /* to offset alternating siblings vertically */ + Dimension horizontal_delta; /* or horizontally */ +} TreePart; + +typedef struct _XmTreeRec { + CorePart core; + CompositePart composite; + ConstraintPart constraint; + XmManagerPart manager; + HierarchyPart hierarchy; + TreePart tree; +} XmTreeRec; + +/* + * Typedefs to conform to the XmField macro's naming convention + */ +typedef TreePart XmTreePart; +typedef TreeNodeInfo XmTreeConstraintPart; + +/************************************************************ +* EXTERNAL DECLARATIONS +*************************************************************/ + +extern XmTreeClassRec xmTreeClassRec; + +/************************************************************ +* STATIC DECLARATIONS +*************************************************************/ + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined(__VMS) +#include +#endif + +#endif /* _TreeP_h */ + + + + + + diff --git a/libXm/osx/Xm/TxtPropCv.h b/libXm/osx/Xm/TxtPropCv.h new file mode 100644 index 0000000..ab42698 --- /dev/null +++ b/libXm/osx/Xm/TxtPropCv.h @@ -0,0 +1,71 @@ +/* $XConsortium: TxtPropCv.h /main/5 1995/07/15 20:56:52 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmTxtPropCvP_h +#define _XmTxtPropCvP_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Public Function Declarations ********/ + +extern int XmCvtXmStringTableToTextProperty(Display *display, + XmStringTable string_table, + int count, + XmICCEncodingStyle style, + XTextProperty *text_prop_return); + +extern int XmCvtTextPropertyToXmStringTable(Display *display, + XTextProperty *text_prop, + XmStringTable *string_table_return, + int *count_return); + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTxtPropCvP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/UnhighlightT.h b/libXm/osx/Xm/UnhighlightT.h new file mode 100644 index 0000000..133657c --- /dev/null +++ b/libXm/osx/Xm/UnhighlightT.h @@ -0,0 +1,68 @@ +/* $XConsortium: UnhighlightT.h /main/5 1995/07/15 20:56:56 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ + +#ifndef _XmSpecifyUnhighlightT_H +#define _XmSpecifyUnhighlightT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTspecifyUnhighlight; + +/* Trait structures and typedefs, place typedefs first */ + +typedef GC (*XmSpecifyUnhighlightProc)(Widget wid, Widget child); + +/* Version 0: initial release. */ + +typedef struct _XmSpecifyUnhighlightTraitRec { + int version; /* 0 */ + XmSpecifyUnhighlightProc getUnhighlightGC; +} XmSpecifyUnhighlightTraitRec, *XmSpecifyUnhighlightTrait; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmSpecifyUnhighlightT_H */ diff --git a/libXm/osx/Xm/UniqueEvnI.h b/libXm/osx/Xm/UniqueEvnI.h new file mode 100644 index 0000000..fc54f50 --- /dev/null +++ b/libXm/osx/Xm/UniqueEvnI.h @@ -0,0 +1,62 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: UniqueEvnI.h /main/5 1995/07/13 18:17:21 drk $ */ +#ifndef _XmUniqueEventI_h +#define _XmUniqueEventI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for UniqueEvnt.c ********/ + +extern Boolean _XmIsEventUnique(XEvent *event) ; +extern void _XmRecordEvent(XEvent *event) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmUniqueEventI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/UnitTypeT.h b/libXm/osx/Xm/UnitTypeT.h new file mode 100644 index 0000000..e295b47 --- /dev/null +++ b/libXm/osx/Xm/UnitTypeT.h @@ -0,0 +1,69 @@ +/* $XConsortium: UnitTypeT.h /main/5 1995/07/15 20:57:00 drk $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +#ifndef _XmUnitTypeT_H +#define _XmUnitTypeT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref XrmQuark XmQTspecifyUnitType; + +/* Trait structures and typedefs, place typedefs first */ + +typedef unsigned char (*XmSpecUnitTypeGetProc)(Widget wid); + +/* Version 0: initial release. */ + +typedef struct _XmSpecUnitTypeTraitRec { + int version; /* 0 */ + XmSpecUnitTypeGetProc getUnitType; +} XmSpecUnitTypeTraitRec, *XmSpecUnitTypeTrait; + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmUnitTypeT_H */ + diff --git a/libXm/osx/Xm/VaSimpleI.h b/libXm/osx/Xm/VaSimpleI.h new file mode 100644 index 0000000..d2f128a --- /dev/null +++ b/libXm/osx/Xm/VaSimpleI.h @@ -0,0 +1,73 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: VaSimpleI.h /main/5 1995/07/13 18:18:01 drk $ */ +#ifndef _XmVaSimpleI_h +#define _XmVaSimpleI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmCountVaList( + va_list var, + int *button_count, + int *args_count, + int *typed_count, + int *total_count) ; +extern void _XmVaToTypedArgList( + va_list var, + int max_count, + XtTypedArgList *args_return, + Cardinal *num_args_return) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVaSimpleI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/VaSimpleP.h b/libXm/osx/Xm/VaSimpleP.h new file mode 100644 index 0000000..757e03c --- /dev/null +++ b/libXm/osx/Xm/VaSimpleP.h @@ -0,0 +1,61 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VaSimpleP.h /main/10 1996/10/16 16:57:41 drk $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmVaSimpleP_h +#define _XmVaSimpleP_h + +#include + +# include +# define Va_start(a,b) va_start(a,b) + + +#ifdef __cplusplus +extern "C" { +#endif + +#define StringToName(string) XrmStringToName(string) + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVaSimpleP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/VendorS.h b/libXm/osx/Xm/VendorS.h new file mode 100644 index 0000000..0534392 --- /dev/null +++ b/libXm/osx/Xm/VendorS.h @@ -0,0 +1,82 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VendorS.h /main/9 1995/07/13 18:18:56 drk $ */ +/* +* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* +* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* +* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* +* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmVendorS_h +#define _XmVendorS_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsVendorShell +#define XmIsVendorShell(w) XtIsSubclass(w, vendorShellWidgetClass) +#endif /* XmIsVendorShell */ + +typedef struct _XmVendorShellRec *XmVendorShellWidget; +typedef struct _XmVendorShellClassRec *XmVendorShellWidgetClass; +externalref WidgetClass vendorShellWidgetClass; + + +/******** Public Function Declarations ********/ + +extern Boolean XmIsMotifWMRunning( + Widget shell) ; +extern Widget XmToolTipGetLabel(Widget wid); + + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorS_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/VendorSEI.h b/libXm/osx/Xm/VendorSEI.h new file mode 100644 index 0000000..57b81ed --- /dev/null +++ b/libXm/osx/Xm/VendorSEI.h @@ -0,0 +1,63 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: VendorSEI.h /main/5 1995/07/13 18:19:24 drk $ */ +#ifndef _XmVendorSEI_h +#define _XmVendorSEI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations for VendorSE.c ********/ + +extern unsigned char _XmGetAudibleWarning(Widget w) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorSEI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/VendorSEP.h b/libXm/osx/Xm/VendorSEP.h new file mode 100644 index 0000000..f2554f7 --- /dev/null +++ b/libXm/osx/Xm/VendorSEP.h @@ -0,0 +1,166 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VendorSEP.h /main/14 1996/05/21 12:11:50 pascale $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +/* + * (c) Copyright 1995 FUJITSU LIMITED + * This is source code modified by FUJITSU LIMITED under the Joint + * Development Agreement for the CDEnext PST. + * This is unpublished proprietary source code of FUJITSU LIMITED + */ +#ifndef _XmVendorSEP_h +#define _XmVendorSEP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef XmIsVendorShellExt +#define XmIsVendorShellExt(w) XtIsSubclass(w, xmVendorShellExtObjectClass) +#endif /* XmIsVendorShellExt */ + +typedef struct _XmVendorShellExtRec *XmVendorShellExtObject; +typedef struct _XmVendorShellExtClassRec *XmVendorShellExtObjectClass; +externalref WidgetClass xmVendorShellExtObjectClass; + + +#define XmInheritProtocolHandler ((XtCallbackProc)_XtInherit) + +typedef struct _XmVendorShellExtClassPart{ + XtCallbackProc delete_window_handler; + XtCallbackProc offset_handler; + XtPointer extension; +}XmVendorShellExtClassPart, *XmVendorShellExtClassPartPtr; + +typedef struct _XmVendorShellExtClassRec{ + ObjectClassPart object_class; + XmExtClassPart ext_class; + XmDesktopClassPart desktop_class; + XmShellExtClassPart shell_class; + XmVendorShellExtClassPart vendor_class; +}XmVendorShellExtClassRec; + +typedef struct { + XmFontList default_font_list; + unsigned char focus_policy; + XmFocusData focus_data; + unsigned char delete_response; + unsigned char unit_type; + MwmHints mwm_hints; + MwmInfo mwm_info; + String mwm_menu; + XtCallbackList focus_moved_callback; + /* + * internal fields + */ + Widget old_managed; + Position xAtMap, yAtMap, xOffset, yOffset; + unsigned long lastOffsetSerial; + unsigned long lastMapRequest; + Boolean externalReposition; + + /* mapStyle is an unused field. I'm using this field to keep + * track of the *font_list resource values. Refer + * CheckSetRenderTable in VendorSE.c + */ + unsigned char mapStyle; + + XtCallbackList realize_callback; + XtGrabKind grab_kind; + Boolean audible_warning; + XmFontList button_font_list; + XmFontList label_font_list; + XmFontList text_font_list; + String input_method_string; + String preedit_type_string; + unsigned int light_threshold; + unsigned int dark_threshold; + unsigned int foreground_threshold; + unsigned int im_height; + XtPointer im_info; + Boolean im_vs_height_set; + + /* New public resources for Motif 2.0 */ + XmDirection layout_direction; + XmInputPolicy input_policy; + + Boolean verify_preedit; + + /* toolTip related stuff */ + Widget label; /* XmLabel for the tips */ + int post_delay; /* delay before posting XmNtoolTipPostDelay */ + int post_duration; /* duration XmNtoolTipPostDuration */ + XtIntervalId timer; /* timer for post delay */ + XtIntervalId duration_timer; /* timer for duration */ + Time leave_time; /* time of the last leave event */ + Widget slider; /* the XmSlideContext used to slide in the tip */ + Boolean enable; /* flag to disable all this stuff */ + +} XmVendorShellExtPart, *XmVendorShellExtPartPtr; + +externalref XmVendorShellExtClassRec xmVendorShellExtClassRec; + +typedef struct _XmVendorShellExtRec{ + ObjectPart object; + XmExtPart ext; + XmDesktopPart desktop; + XmShellExtPart shell; + XmVendorShellExtPart vendor; +} XmVendorShellExtRec; + + +/******** Xme Functions ********/ + +void XmeAddFocusChangeCallback(Widget, XtCallbackProc, XtPointer); +void XmeRemoveFocusChangeCallback(Widget, XtCallbackProc, XtPointer); + +/******** End Xme Functions ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorSEP_h */ diff --git a/libXm/osx/Xm/VendorSI.h b/libXm/osx/Xm/VendorSI.h new file mode 100644 index 0000000..2327616 --- /dev/null +++ b/libXm/osx/Xm/VendorSI.h @@ -0,0 +1,77 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: VendorSI.h /main/5 1995/07/13 18:19:43 drk $ */ +#ifndef _XmVendorSI_h +#define _XmVendorSI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* used in visual resources declaration and in _XmDefaultVisualResources. + Cannot use 0 which is None = CopyFromParent, the Xt default */ +#define INVALID_VISUAL ((Visual*)-1) + +/******** Private Function Declarations ********/ + +extern void _XmAddGrab( + Widget wid, +#if NeedWidePrototypes + int exclusive, + int spring_loaded) ; +#else + Boolean exclusive, + Boolean spring_loaded) ; +#endif /* NeedWidePrototypes */ +extern void _XmRemoveGrab( + Widget wid) ; +extern void _XmDefaultVisualResources(Widget widget) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorSI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/VendorSP.h b/libXm/osx/Xm/VendorSP.h new file mode 100644 index 0000000..598b538 --- /dev/null +++ b/libXm/osx/Xm/VendorSP.h @@ -0,0 +1,67 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VendorSP.h /main/8 1995/07/13 18:19:53 drk $ */ +/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */ +/* (c) Copyright 1988 MICROSOFT CORPORATION */ +#ifndef _XmVendorSP_h +#define _XmVendorSP_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +externalref VendorShellClassRec vendorShellClassRec; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVendorSP_h */ diff --git a/libXm/osx/Xm/VirtKeys.h b/libXm/osx/Xm/VirtKeys.h new file mode 100644 index 0000000..843c99a --- /dev/null +++ b/libXm/osx/Xm/VirtKeys.h @@ -0,0 +1,125 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VirtKeys.h /main/10 1995/07/13 18:20:33 drk $ */ +/* +* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmVirtKeys_h +#define _XmVirtKeys_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _OSF_Keysyms +#define _OSF_Keysyms + +#define osfXK_Activate 0x1004FF44 +#define osfXK_AddMode 0x1004FF31 +#define osfXK_BackSpace 0x1004FF08 +#define osfXK_BackTab 0x1004FF07 +#define osfXK_BeginData 0x1004FF5A +#define osfXK_BeginLine 0x1004FF58 +#define osfXK_Cancel 0x1004FF69 +#define osfXK_Clear 0x1004FF0B +#define osfXK_Copy 0x1004FF02 +#define osfXK_Cut 0x1004FF03 +#define osfXK_Delete 0x1004FFFF +#define osfXK_DeselectAll 0x1004FF72 +#define osfXK_Down 0x1004FF54 +#define osfXK_EndData 0x1004FF59 +#define osfXK_EndLine 0x1004FF57 +#define osfXK_Escape 0x1004FF1B +#define osfXK_Extend 0x1004FF74 +#define osfXK_Help 0x1004FF6A +#define osfXK_Insert 0x1004FF63 +#define osfXK_Left 0x1004FF51 +#define osfXK_LeftLine 0x1004FFF8 +#define osfXK_Menu 0x1004FF67 +#define osfXK_MenuBar 0x1004FF45 +#define osfXK_Next 0x1004FF56 +#define osfXK_NextField 0x1004FF5E +#define osfXK_NextMenu 0x1004FF5C +#define osfXK_NextMinor 0x1004FFF5 +#define osfXK_PageDown 0x1004FF42 +#define osfXK_PageLeft 0x1004FF40 +#define osfXK_PageRight 0x1004FF43 +#define osfXK_PageUp 0x1004FF41 +#define osfXK_Paste 0x1004FF04 +#define osfXK_PrevField 0x1004FF5D +#define osfXK_PrevMenu 0x1004FF5B +#define osfXK_PrimaryPaste 0x1004FF32 +#define osfXK_Prior 0x1004FF55 +#define osfXK_PriorMinor 0x1004FFF6 +#define osfXK_QuickPaste 0x1004FF33 +#define osfXK_Reselect 0x1004FF73 +#define osfXK_Restore 0x1004FF78 +#define osfXK_Right 0x1004FF53 +#define osfXK_RightLine 0x1004FFF7 +#define osfXK_Select 0x1004FF60 +#define osfXK_SelectAll 0x1004FF71 +#define osfXK_SwitchDirection 0x1004FF7E +#define osfXK_Undo 0x1004FF65 +#define osfXK_Up 0x1004FF52 + +#endif /* OSF_Keysyms */ + + +/******** Public Function Declarations ********/ + +extern void XmTranslateKey( + Display *dpy, +#if NeedWidePrototypes + unsigned int keycode, +#else + KeyCode keycode, +#endif /* NeedWidePrototypes */ + Modifiers modifiers, + Modifiers *modifiers_return, + KeySym *keysym_return) ; + +/******** End Public Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVirtKeys_h */ diff --git a/libXm/osx/Xm/VirtKeysI.h b/libXm/osx/Xm/VirtKeysI.h new file mode 100644 index 0000000..e20a9ab --- /dev/null +++ b/libXm/osx/Xm/VirtKeysI.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: VirtKeysI.h /main/5 1995/07/13 18:20:49 drk $ */ +#ifndef _XmVirtKeyI_h +#define _XmVirtKeyI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/******** Private Function Declarations ********/ + +extern void _XmVirtKeysInitialize( + Widget widget) ; +extern void _XmVirtKeysDestroy( + Widget widget) ; +extern void _XmVirtKeysStoreBindings( + Widget shell, + String binding) ; +extern Boolean _XmVirtKeysLoadFileBindings( + char *fileName, + String *binding) ; +extern int _XmVirtKeysLoadFallbackBindings( + Display *display, + String *binding) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVirtKeyI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/VirtKeysP.h b/libXm/osx/Xm/VirtKeysP.h new file mode 100644 index 0000000..a27c536 --- /dev/null +++ b/libXm/osx/Xm/VirtKeysP.h @@ -0,0 +1,75 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $XConsortium: VirtKeysP.h /main/10 1995/07/13 18:21:10 drk $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmVirtKeysP_h +#define _XmVirtKeysP_h + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmKEYCODE_TAG_SIZE 32 + +typedef struct _XmDefaultBindingStringRec { + String vendorName; + String defaults; +} XmDefaultBindingStringRec, *XmDefaultBindingString; + +typedef struct _XmVirtualKeysymRec { + String name; + KeySym keysym; +} XmVirtualKeysymRec, *XmVirtualKeysym; + +/* For converting a Virtual keysym to a real keysym. */ +typedef struct _XmVKeyBindingRec +{ + KeySym keysym; + Modifiers modifiers; + KeySym virtkey; +} XmVKeyBindingRec, *XmVKeyBinding; + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmVirtKeysP_h */ diff --git a/libXm/osx/Xm/Xm.h b/libXm/osx/Xm/Xm.h new file mode 100644 index 0000000..07ec60d --- /dev/null +++ b/libXm/osx/Xm/Xm.h @@ -0,0 +1,2120 @@ +/* lib/Xm/Xm.h. Generated from Xm.h.in by configure. */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* $TOG: Xm.h /main/38 1999/10/18 14:50:22 samborn $ + * + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1987-1992,1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ + +#ifndef _Xm_h +#define _Xm_h + +#ifndef JPEG_SUPPORTED +#define JPEG_SUPPORTED 1 +#endif + +#ifndef PNG_SUPPORTED +#define PNG_SUPPORTED 1 +#endif + +#if !defined(__STDC__) \ + && !defined(__cplusplus) && !defined(c_plusplus) \ + && !defined(FUNCPROTO) && !defined(XTFUNCPROTO) && !defined(XMFUNCPROTO) +#define _NO_PROTO +#endif /* __STDC__ */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmVERSION 2 +#define XmREVISION 3 +#define XmUPDATE_LEVEL 1 +#define XmVersion (XmVERSION * 1000 + XmREVISION) +#define XmVERSION_STRING "@(#)Motif Version 2.3.2" + +externalref int xmUseVersion; + + +/* define used to denote an unspecified pixmap */ + +#define XmUNSPECIFIED_PIXMAP 2 + +/* define for an unspecified position */ + +#define XmUNSPECIFIED_POSITION -1 + +/******************* + * + * Defines for resources to be defaulted by vendors. + * String are initialized in Xmos.c + * + ****************/ + +#define XmSTRING_OS_CHARSET XmSTRING_ISO8859_1 +#ifndef XmFALLBACK_CHARSET +#define XmFALLBACK_CHARSET XmSTRING_ISO8859_1 +#endif + +#define XmDEFAULT_FONT _XmSDEFAULT_FONT +#define XmDEFAULT_BACKGROUND _XmSDEFAULT_BACKGROUND +#define XmDEFAULT_DARK_THRESHOLD 20 +#define XmDEFAULT_LIGHT_THRESHOLD 93 +#define XmDEFAULT_FOREGROUND_THRESHOLD 70 + +externalref char _XmSDEFAULT_FONT[]; /* In Xmos.c */ +externalref char _XmSDEFAULT_BACKGROUND[]; /* In Xmos.c */ + +typedef unsigned char XmDirection; + +#define XmDIRECTION_IGNORED 0x30 + +#define XmRIGHT_TO_LEFT_MASK 0x01 /* 0x01 for bc */ +#define XmLEFT_TO_RIGHT_MASK 0x02 +#define XmHORIZONTAL_MASK 0x03 +#define XmTOP_TO_BOTTOM_MASK 0x04 +#define XmBOTTOM_TO_TOP_MASK 0x08 +#define XmVERTICAL_MASK 0x0c +#define XmPRECEDENCE_HORIZ_MASK 0x40 +#define XmPRECEDENCE_VERT_MASK 0x80 +#define XmPRECEDENCE_MASK 0xc0 + +enum { + XmRIGHT_TO_LEFT_TOP_TO_BOTTOM = + XmRIGHT_TO_LEFT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_HORIZ_MASK, + XmLEFT_TO_RIGHT_TOP_TO_BOTTOM = + XmLEFT_TO_RIGHT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_HORIZ_MASK, + XmRIGHT_TO_LEFT_BOTTOM_TO_TOP = + XmRIGHT_TO_LEFT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_HORIZ_MASK, + XmLEFT_TO_RIGHT_BOTTOM_TO_TOP = + XmLEFT_TO_RIGHT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_HORIZ_MASK, + XmTOP_TO_BOTTOM_RIGHT_TO_LEFT = + XmRIGHT_TO_LEFT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_VERT_MASK, + XmTOP_TO_BOTTOM_LEFT_TO_RIGHT = + XmLEFT_TO_RIGHT_MASK | XmTOP_TO_BOTTOM_MASK | XmPRECEDENCE_VERT_MASK, + XmBOTTOM_TO_TOP_RIGHT_TO_LEFT = + XmRIGHT_TO_LEFT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_VERT_MASK, + XmBOTTOM_TO_TOP_LEFT_TO_RIGHT = + XmLEFT_TO_RIGHT_MASK | XmBOTTOM_TO_TOP_MASK | XmPRECEDENCE_VERT_MASK, + XmTOP_TO_BOTTOM = + XmTOP_TO_BOTTOM_MASK | XmHORIZONTAL_MASK | XmPRECEDENCE_MASK, + XmBOTTOM_TO_TOP = + XmBOTTOM_TO_TOP_MASK | XmHORIZONTAL_MASK | XmPRECEDENCE_MASK, + XmRIGHT_TO_LEFT = + XmRIGHT_TO_LEFT_MASK | XmVERTICAL_MASK | XmPRECEDENCE_MASK, + XmLEFT_TO_RIGHT = + XmLEFT_TO_RIGHT_MASK | XmVERTICAL_MASK | XmPRECEDENCE_MASK, + XmDEFAULT_DIRECTION = 0xff + }; + + +extern Boolean XmDirectionMatch(XmDirection d1, + XmDirection d2); +extern Boolean XmDirectionMatchPartial(XmDirection d1, + XmDirection d2, + XmDirection dmask); + +/**************** + * + * XmString structure defines. These must be here (at the start of the file) + * becaused they are used later on. + * + ****************/ +typedef enum{ XmFONT_IS_FONT, XmFONT_IS_FONTSET, XmFONT_IS_XFT + } XmFontType; + +enum { XmSTRING_DIRECTION_L_TO_R, + XmSTRING_DIRECTION_R_TO_L, + XmSTRING_DIRECTION_UNSET = 3, + XmSTRING_DIRECTION_DEFAULT = XmDEFAULT_DIRECTION + }; + +typedef unsigned char XmStringDirection; +typedef union __XmStringRec *XmString; /* opaque to outside */ +typedef XmString * XmStringTable; /* opaque to outside */ +typedef char * XmStringCharSet; /* Null term string */ +typedef char * XmStringTag; /* Null term string */ +typedef unsigned char XmStringComponentType; /* component tags */ + +typedef struct __XmRenditionRec **XmFontListEntry; /* opaque to outside */ +typedef struct __XmRenderTableRec **XmFontList; /* opaque to outside */ +typedef struct _XmFontListContextRec *XmFontContext; /* opaque to outside */ + +typedef struct __XmStringContextRec *_XmStringContext; /* opaque to outside */ +typedef union __XmStringRec *_XmString; /* opaque to outside */ +typedef struct __XmStringContextRec *XmStringContext; /* opaque to outside */ + +enum{ XmSTRING_COMPONENT_UNKNOWN, XmSTRING_COMPONENT_CHARSET, + XmSTRING_COMPONENT_TEXT, XmSTRING_COMPONENT_DIRECTION, + XmSTRING_COMPONENT_SEPARATOR, XmSTRING_COMPONENT_LOCALE_TEXT, + XmSTRING_COMPONENT_LOCALE, XmSTRING_COMPONENT_WIDECHAR_TEXT, + XmSTRING_COMPONENT_LAYOUT_PUSH, XmSTRING_COMPONENT_LAYOUT_POP, + XmSTRING_COMPONENT_RENDITION_BEGIN, XmSTRING_COMPONENT_RENDITION_END, + XmSTRING_COMPONENT_TAB + /* 13-125 reserved */ + } ; + +#define XmSTRING_COMPONENT_FONTLIST_ELEMENT_TAG XmSTRING_COMPONENT_CHARSET + +#define XmSTRING_COMPONENT_TAG XmSTRING_COMPONENT_CHARSET + +#define XmSTRING_COMPONENT_END ((XmStringComponentType) 126) + +#define XmSTRING_COMPONENT_USER_BEGIN ((XmStringComponentType) 128) + /* 128-255 are user tags */ +#define XmSTRING_COMPONENT_USER_END ((XmStringComponentType) 255) + +typedef enum { + XmCHARSET_TEXT, XmMULTIBYTE_TEXT, + XmWIDECHAR_TEXT, XmNO_TEXT + } XmTextType; + +typedef enum { + XmOUTPUT_ALL, XmOUTPUT_BETWEEN, + XmOUTPUT_BEGINNING, XmOUTPUT_END, + XmOUTPUT_BOTH + } XmParseModel; + +typedef unsigned char XmIncludeStatus; +enum { + XmINSERT, XmTERMINATE, XmINVOKE + }; + +/* We are making an attempt (perhaps unnecessaryily) to keep our style + constants the same as the equivalent Xlib style constants. The first + Motif specific style constant starts at 32 so that the consortium can + add constants to their list without overlapping with ours. */ +typedef enum { + XmSTYLE_STRING = XStringStyle, + XmSTYLE_COMPOUND_TEXT = XCompoundTextStyle, + XmSTYLE_TEXT = XTextStyle, + XmSTYLE_STANDARD_ICC_TEXT = XStdICCTextStyle, + XmSTYLE_LOCALE = 32, + XmSTYLE_COMPOUND_STRING + } XmICCEncodingStyle; + +/**************** + * + * XmParseTable structure defines. These must be here (at the start of + * the file) because they are used later on. + * + ****************/ + +typedef struct __XmParseMappingRec *XmParseMapping; /* opaque */ +typedef XmParseMapping *XmParseTable; + +/* A special pattern used to match a change of character direction. */ +#define XmDIRECTION_CHANGE NULL + + +typedef XmIncludeStatus (*XmParseProc) (XtPointer *in_out, + XtPointer text_end, + XmTextType type, + XmStringTag locale_tag, + XmParseMapping entry, + int pattern_length, + XmString *str_include, + XtPointer call_data); + + +/**************** + * + * XmTabList structure defines. These must be here (at the start of the file) + * becaused they are used later on. + * + ****************/ +typedef enum { + XmABSOLUTE, XmRELATIVE + } XmOffsetModel; + +typedef struct __XmTabRec *XmTab; /* opaque */ +typedef struct __XmTabListRec *XmTabList; /* opaque */ + + +/**************** + * + * XmRenderTable structure defines. These must be here (at the start of the file) + * becaused they are used later on. + * + ****************/ +/* XmRendition declarations */ +typedef struct __XmRenditionRec **XmRendition; /* opaque */ +typedef struct __XmRenderTableRec **XmRenderTable; /* opaque */ + +typedef enum { + XmSKIP, XmMERGE_REPLACE, + XmMERGE_OLD, XmMERGE_NEW, + XmDUPLICATE /* For XmFontListAdd and XmFontListAppendEntry. */ + } XmMergeMode; + +#define XmAS_IS 255 +#define XmFORCE_COLOR 1 + +#define XmUNSPECIFIED_PIXEL ((Pixel) (~0)) +#define XmDEFAULT_SELECT_COLOR XmUNSPECIFIED_PIXEL +#define XmREVERSED_GROUND_COLORS (XmDEFAULT_SELECT_COLOR - 1) +#define XmHIGHLIGHT_COLOR (XmREVERSED_GROUND_COLORS - 1) + +enum { XmUNSPECIFIED_LOAD_MODEL, XmLOAD_DEFERRED, XmLOAD_IMMEDIATE }; + + + +/************************************************************************ + * Primitive Resources and define values + ************************************************************************/ + +/* size policy values */ + +enum{ XmCHANGE_ALL, XmCHANGE_NONE, + XmCHANGE_WIDTH, XmCHANGE_HEIGHT + } ; + +/* unit type values */ + +enum{ XmPIXELS, Xm100TH_MILLIMETERS, + Xm1000TH_INCHES, Xm100TH_POINTS, + Xm100TH_FONT_UNITS, XmINCHES, + XmCENTIMETERS, XmMILLIMETERS, + XmPOINTS, XmFONT_UNITS + } ; + +/* DeleteResponse values */ + +enum{ XmDESTROY, XmUNMAP, + XmDO_NOTHING + } ; +enum{ XmEXPLICIT, XmPOINTER + } ; +/************************************************************************ + * Navigation defines + ************************************************************************/ + +enum{ XmNONE, XmTAB_GROUP, + XmSTICKY_TAB_GROUP, XmEXCLUSIVE_TAB_GROUP + } ; + +#define XmDYNAMIC_DEFAULT_TAB_GROUP (255) + +/************************************************************************ + * Audible warning + ************************************************************************/ + +enum{ /* XmNONE */ XmBELL = 1 + } ; + +/************************************************************************ + * Input Manager defines + ************************************************************************/ + +enum { + XmPER_SHELL, XmPER_WIDGET, + XmINHERIT_POLICY = 255 + } ; + +typedef unsigned char XmInputPolicy; + +/************************************************************************ + * Menu defines + ************************************************************************/ + +enum{ XmNO_ORIENTATION, XmVERTICAL, + XmHORIZONTAL + } ; +enum{ XmWORK_AREA, XmMENU_BAR, + XmMENU_PULLDOWN, XmMENU_POPUP, + XmMENU_OPTION + } ; +enum{ XmNO_PACKING, XmPACK_TIGHT, + XmPACK_COLUMN, XmPACK_NONE + } ; +enum{/* XmALIGNMENT_BASELINE_TOP, XmALIGNMENT_CENTER, + XmALIGNMENT_BASELINE_BOTTOM, */ XmALIGNMENT_CONTENTS_TOP = 3, + XmALIGNMENT_CONTENTS_BOTTOM + } ; +enum{ XmTEAR_OFF_ENABLED, XmTEAR_OFF_DISABLED + } ; +enum{ XmUNPOST, XmUNPOST_AND_REPLAY + } ; +enum{ XmLAST_POSITION = -1, XmFIRST_POSITION + } ; +enum{ XmPOPUP_DISABLED = 0, XmPOPUP_KEYBOARD = 1, + XmPOPUP_AUTOMATIC, XmPOPUP_AUTOMATIC_RECURSIVE }; + +/************************************************************************ + * Color Selector defines + ************************************************************************/ + +typedef enum { XmListMode = 0, XmScaleMode = 1 } XmColorMode; + +/************************************************************************ + * Column defines + ************************************************************************/ + +enum { XmFILL_UNSPECIFIED, XmFILL_FLUSH, XmFILL_RAGGED }; + +enum { XmDISTRIBUTE_TIGHT, XmDISTRIBUTE_SPREAD }; + +/************************************************************************ + * ComboBox defines + ************************************************************************/ + +enum{ XmCOMBO_BOX=0, XmDROP_DOWN_COMBO_BOX, + XmDROP_DOWN_LIST + } ; + +enum{ /* XmNONE */ XmQUICK_NAVIGATE = 1, XmINVALID_MATCH_BEHAVIOR + } ; + +enum{ XmZERO_BASED, XmONE_BASED + } ; + +#define XmINVALID_POSITION -1 + +/************************************************************************ + * Icon & Button Box defines + ************************************************************************/ +typedef enum { XmIconTop, + XmIconLeft, + XmIconRight, + XmIconBottom, + XmIconOnly, + XmIconNone } XmIconPlacement; + +typedef enum { XmFillNone, + XmFillMajor, + XmFillMinor, + XmFillAll } XmFillOption; + +/************************************************************************ + * Hierarchy/Tree/Outline defines + ************************************************************************/ +typedef enum {XmAlwaysOpen, + XmOpen, + XmClosed, XmHidden, + XmNotInHierarchy} XmHierarchyNodeState; + +typedef enum { XmTreeLadder, XmTreeDirect } XmTreeConnectStyle; + +typedef enum { XmTreeCompressNone=0, XmTreeCompressLeaves=1, + XmTreeCompressAll=2 } XmTreeCompressStyle; + +/************************************************************************ + * Label/Frame defines + ************************************************************************/ + +enum{ XmALIGNMENT_BEGINNING, XmALIGNMENT_CENTER, + XmALIGNMENT_END, XmALIGNMENT_UNSPECIFIED + } ; +enum{ XmALIGNMENT_BASELINE_TOP, /* XmALIGNMENT_CENTER, */ + XmALIGNMENT_BASELINE_BOTTOM = 2, XmALIGNMENT_WIDGET_TOP, + XmALIGNMENT_WIDGET_BOTTOM + } ; +/* new enum introduced in 2.0 to clear up the confusion in + widget top/bottom attachment */ +#define XmALIGNMENT_CHILD_TOP XmALIGNMENT_WIDGET_BOTTOM +#define XmALIGNMENT_CHILD_BOTTOM XmALIGNMENT_WIDGET_TOP + +/************************************************************************ + * Frame defines + ************************************************************************/ + +enum{ XmFRAME_GENERIC_CHILD, XmFRAME_WORKAREA_CHILD, + XmFRAME_TITLE_CHILD + } ; +/************************************************************************ + * ToggleButton defines + ************************************************************************/ + +enum{ XmN_OF_MANY = 1, XmONE_OF_MANY, + XmONE_OF_MANY_ROUND, XmONE_OF_MANY_DIAMOND + } ; +/************************************************************************ + * Form defines + ************************************************************************/ + +enum{ XmATTACH_NONE, XmATTACH_FORM, + XmATTACH_OPPOSITE_FORM, XmATTACH_WIDGET, + XmATTACH_OPPOSITE_WIDGET, XmATTACH_POSITION, + XmATTACH_SELF + } ; +enum{ XmRESIZE_NONE, XmRESIZE_GROW, + XmRESIZE_ANY + } ; + +/************************************************************************ + * TabBox/TabStack defines + ************************************************************************/ + +typedef enum {XmTABS_SQUARED, XmTABS_ROUNDED, XmTABS_BEVELED} XmTabStyle; +typedef enum {XmTABS_BASIC, XmTABS_STACKED, XmTABS_STACKED_STATIC, + XmTABS_SCROLLED, XmTABS_OVERLAYED} XmTabMode; + +typedef enum {XmTAB_ORIENTATION_DYNAMIC, XmTABS_RIGHT_TO_LEFT, + XmTABS_LEFT_TO_RIGHT, XmTABS_TOP_TO_BOTTOM, + XmTABS_BOTTOM_TO_TOP} XmTabOrientation; + +typedef enum {XmTAB_EDGE_TOP_LEFT, XmTAB_EDGE_BOTTOM_RIGHT} XmTabEdge; + +typedef enum {XmTAB_ARROWS_ON_RIGHT, XmTAB_ARROWS_ON_LEFT, + XmTAB_ARROWS_SPLIT} XmTabArrowPlacement; + +enum {XmCR_TAB_SELECTED, XmCR_TAB_UNSELECTED}; + +typedef enum {XmTABS_ON_TOP, XmTABS_ON_BOTTOM, XmTABS_ON_RIGHT, + XmTABS_ON_LEFT} XmTabSide; + +typedef enum {XmPIXMAP_TOP, XmPIXMAP_BOTTOM, XmPIXMAP_RIGHT, XmPIXMAP_LEFT, + XmPIXMAP_NONE, XmPIXMAP_ONLY} XmPixmapPlacement; + +typedef enum {XmTAB_VALUE_COPY, XmTAB_VALUE_SHARE} XmTabValueMode; + +typedef enum {XmTAB_CMP_VISUAL, XmTAB_CMP_SIZE, XmTAB_CMP_EQUAL} XmTabResult; + +typedef struct _XmTabStackCallbackStruct { + int reason; + XEvent *event; + Widget selected_child; +} XmTabStackCallbackStruct; + +typedef struct _XmTabBoxCallbackStruct { + int reason; + XEvent *event; + int tab_index; + int old_index; +} XmTabBoxCallbackStruct; + +/**************************************************************************** + * Callback reasons + ****************************************************************************/ + +enum{ XmCR_NONE, XmCR_HELP, + XmCR_VALUE_CHANGED, XmCR_INCREMENT, + XmCR_DECREMENT, XmCR_PAGE_INCREMENT, + XmCR_PAGE_DECREMENT, XmCR_TO_TOP, + XmCR_TO_BOTTOM, XmCR_DRAG, + XmCR_ACTIVATE, XmCR_ARM, + XmCR_DISARM, XmCR_MAP = 16, + XmCR_UNMAP, XmCR_FOCUS, + XmCR_LOSING_FOCUS, XmCR_MODIFYING_TEXT_VALUE, + XmCR_MOVING_INSERT_CURSOR, XmCR_EXECUTE, + XmCR_SINGLE_SELECT, XmCR_MULTIPLE_SELECT, + XmCR_EXTENDED_SELECT, XmCR_BROWSE_SELECT, + XmCR_DEFAULT_ACTION, XmCR_CLIPBOARD_DATA_REQUEST, + XmCR_CLIPBOARD_DATA_DELETE, XmCR_CASCADING, + XmCR_OK, XmCR_CANCEL, + XmCR_APPLY = 34, XmCR_NO_MATCH, + XmCR_COMMAND_ENTERED, XmCR_COMMAND_CHANGED, + XmCR_EXPOSE, XmCR_RESIZE, + XmCR_INPUT, XmCR_GAIN_PRIMARY, + XmCR_LOSE_PRIMARY, XmCR_CREATE, + XmCR_TEAR_OFF_ACTIVATE, XmCR_TEAR_OFF_DEACTIVATE, + XmCR_OBSCURED_TRAVERSAL, XmCR_FOCUS_MOVED, + XmCR_REPOST = 54, XmCR_COLLAPSED, + XmCR_EXPANDED, XmCR_SELECT, + XmCR_DRAG_START, XmCR_NO_FONT, + XmCR_NO_RENDITION, XmCR_POST, + XmCR_SPIN_NEXT, XmCR_SPIN_PRIOR, + XmCR_SPIN_FIRST, XmCR_SPIN_LAST, + XmCR_PAGE_SCROLLER_INCREMENT, XmCR_PAGE_SCROLLER_DECREMENT, + XmCR_MAJOR_TAB, XmCR_MINOR_TAB, + XmCR_START_JOB, XmCR_END_JOB, + XmCR_PAGE_SETUP, XmCR_PDM_NONE, + XmCR_PDM_UP, XmCR_PDM_START_ERROR, + XmCR_PDM_START_VXAUTH, XmCR_PDM_START_PXAUTH, + XmCR_PDM_OK, XmCR_PDM_CANCEL, + XmCR_PDM_EXIT_ERROR, + XmCR_UPDATE_SHELL, XmCR_UPDATE_TEXT, + XmCR_VERIFY_TEXT, XmCR_VERIFY_TEXT_FAILED, + XmCR_ENTER_CHILD, XmCR_LEAVE_CHILD, + XmCR_PROTOCOLS = 6666 /* required for BC. See CR 9158 */ + } ; + +/************************************************************************ + * new ScrollBar showArrows define + ************************************************************************/ + +enum{ /* XmNONE */ XmEACH_SIDE = 1, + XmMAX_SIDE, XmMIN_SIDE + } ; + + +/************************************************************************ + * Sliding mode + ************************************************************************/ + +enum{ XmSLIDER, XmTHERMOMETER} ; + + +/************************************************************************ + * Slider Visual + ************************************************************************/ + +enum{ XmBACKGROUND_COLOR, XmFOREGROUND_COLOR, + XmTROUGH_COLOR, XmSHADOWED_BACKGROUND} ; + + +/************************************************************************ + * Slider Mark + ************************************************************************/ + +enum{ /* XmNONE, */ XmETCHED_LINE = 1, + XmTHUMB_MARK, XmROUND_MARK } ; + + +/************************************************************************ + * new Scale showValue + ************************************************************************/ + +enum{ /* XmNONE */ XmNEAR_SLIDER = 1, + XmNEAR_BORDER + } ; + + +/************************************************************************ + * new ScrolledWindow/MainWindow chidType + ************************************************************************/ + +/* XmWORK_AREA, XmMENU_BAR and XmSEPARATOR have to match the existing ones */ +enum{ /* XmWORK_AREA = 0, XmMENU_BAR = 1, */ + XmHOR_SCROLLBAR = 2, + XmVERT_SCROLLBAR, + XmCOMMAND_WINDOW, + /* XmSEPARATOR = 5 */ + XmMESSAGE_WINDOW = 6, + XmSCROLL_HOR, XmSCROLL_VERT, XmNO_SCROLL, + XmCLIP_WINDOW, XmGENERIC_CHILD + } ; + +/************************************************************************ + * new ScrolledWindow auto drag enum + ************************************************************************/ + +enum{ XmAUTO_DRAG_ENABLED, XmAUTO_DRAG_DISABLED + } ; + +/************************************************************************ + * new Display enable warp enum + ************************************************************************/ + +enum{ XmENABLE_WARP_ON, XmENABLE_WARP_OFF + } ; + +/************************************************************************ + * new Display enable btn1 transfer enum + ************************************************************************/ + +enum{ XmOFF, XmBUTTON2_ADJUST, + XmBUTTON2_TRANSFER }; + +/************************************************************************ + * auto_selection_type + ************************************************************************/ + +enum{ XmAUTO_UNSET, XmAUTO_BEGIN, + XmAUTO_MOTION, XmAUTO_CANCEL, + XmAUTO_NO_CHANGE, XmAUTO_CHANGE + }; + +/************************************************************************ + * Callback structures + ************************************************************************/ + +typedef struct +{ + int reason; + XEvent *event; +} XmAnyCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + int click_count; +} XmArrowButtonCallbackStruct; + +typedef struct _XmDragStartCallbackStruct { + int reason; + XEvent *event; + Widget widget; + Boolean doit; +} XmDragStartCallbackStruct, *XmDragStartCallback; + +typedef struct +{ + int reason; + XEvent *event; + XmString item_or_text; + int item_position; +} XmComboBoxCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Window window; +} XmDrawingAreaCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Window window; + int click_count; +} XmDrawnButtonCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + int click_count; +} XmPushButtonCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Widget widget; + char *data; + char *callbackstruct; +} XmRowColumnCallbackStruct; + +typedef struct +{ + int reason; + XEvent * event; + int value; + int pixel; +} XmScrollBarCallbackStruct; + +typedef struct +{ + int reason; + XEvent * event; + int set; +} XmToggleButtonCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString item; + int item_length; + int item_position; + XmString *selected_items; + int selected_item_count; + int *selected_item_positions; + char selection_type; + char auto_selection_type; +} XmListCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString value; + int length; +} XmSelectionBoxCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString value; + int length; +} XmCommandCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmString value; + int length; + XmString mask; + int mask_length; + XmString dir ; + int dir_length ; + XmString pattern ; + int pattern_length ; +} XmFileSelectionBoxCallbackStruct; + + +typedef struct +{ + int reason; + XEvent * event; + int value; +} XmScaleCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Widget menuToPost; + Boolean postIt; + Widget target; +} XmPopupHandlerCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + Widget item; + unsigned char new_outline_state; +} XmContainerOutlineCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + WidgetList selected_items; + int selected_item_count; + unsigned char auto_selection_type; +} XmContainerSelectCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + int page_number; + Widget page_widget; + int prev_page_number; + Widget prev_page_widget; +} XmNotebookCallbackStruct; + +typedef struct +{ + int reason; + XEvent *event; + XmRendition rendition; + char *font_name; + XmRenderTable render_table; + XmStringTag tag; +} XmDisplayCallbackStruct; + +typedef struct +{ + int reason; /* XmCR_START_JOB, XmCR_END_JOB, XmCR_PAGE_SETUP */ + XEvent *event; + XPContext context; + Boolean last_page; /* in_out */ + XtPointer detail; +} XmPrintShellCallbackStruct; + + +/************************************************************************ + * PushButton defines + ************************************************************************/ + +enum{ XmMULTICLICK_DISCARD, XmMULTICLICK_KEEP + } ; +/************************************************************************ + * DrawnButton defines + ************************************************************************/ + +enum{ XmSHADOW_IN = 7, XmSHADOW_OUT + } ; +/************************************************************************ + * Arrow defines + ************************************************************************/ + +enum{ XmARROW_UP, XmARROW_DOWN, + XmARROW_LEFT, XmARROW_RIGHT + } ; +/************************************************************************ + * Separator defines + * Note: XmINVALID_SEPARATOR_TYPE marks the last+1 separator type + ************************************************************************/ + +enum{ XmNO_LINE, XmSINGLE_LINE, + XmDOUBLE_LINE, XmSINGLE_DASHED_LINE, + XmDOUBLE_DASHED_LINE, XmSHADOW_ETCHED_IN, + XmSHADOW_ETCHED_OUT, XmSHADOW_ETCHED_IN_DASH, + XmSHADOW_ETCHED_OUT_DASH, XmINVALID_SEPARATOR_TYPE + } ; + +enum{ XmPIXMAP = 1, XmSTRING, + XmPIXMAP_AND_STRING + } ; + +/************************************************************************ + * Drag and Drop defines + ************************************************************************/ + +enum{ XmWINDOW, /* XmPIXMAP, */ + XmCURSOR = 2, XmDRAG_WINDOW = 3 + } ; + +/************************************************************************ + * ScrollBar defines + ************************************************************************/ + +enum{ XmMAX_ON_TOP, XmMAX_ON_BOTTOM, + XmMAX_ON_LEFT, XmMAX_ON_RIGHT + } ; +/************************************************************************ + * * + * List Widget defines * + * * + ************************************************************************/ + +enum{ XmSINGLE_SELECT, XmMULTIPLE_SELECT, + XmEXTENDED_SELECT, XmBROWSE_SELECT + } ; +enum{ XmSTATIC, XmDYNAMIC + } ; +enum{ XmNORMAL_MODE, XmADD_MODE + } ; +/************************************************************************ + * * + * Container Widget defines * + * * + ************************************************************************/ + + /* XmRAutomaticSelection */ +enum { XmNO_AUTO_SELECT, + XmAUTO_SELECT + }; + + /* XmRLineStyle */ +enum { /* XmNO_LINE */ + XmSINGLE = 1 + }; + + /* XmREntryViewType */ +enum { /* XmLARGE_ICON */ + /* XmSMALL_ICON */ + XmANY_ICON = 2 + }; + + /* XmRSpatialIncludeModel */ +enum { XmAPPEND, + XmCLOSEST, + XmFIRST_FIT + }; + + /* XmRLayoutType */ +enum { XmOUTLINE, + XmSPATIAL, + XmDETAIL + }; + + /* XmNoutlineButtonPolicy */ +enum { XmOUTLINE_BUTTON_PRESENT, + XmOUTLINE_BUTTON_ABSENT + }; + + /* XmRSpatialPlaceStyle */ +enum { /* XmNONE */ + XmGRID = 1, + XmCELLS + }; + + /* XmRPrimaryOwnership */ +enum { XmOWN_NEVER, + XmOWN_ALWAYS, + XmOWN_MULTIPLE, + XmOWN_POSSIBLE_MULTIPLE + }; + + /* XmRSpatialResizeModel */ +enum { XmGROW_MINOR, + XmGROW_MAJOR, + XmGROW_BALANCED + }; + + /* XmRSelectionTechnique */ +enum { XmMARQUEE, + XmMARQUEE_EXTEND_START, + XmMARQUEE_EXTEND_BOTH, + XmTOUCH_ONLY, + XmTOUCH_OVER + }; + + /* XmRSpatialSnapModel */ +enum { /* XmNONE */ + XmSNAP_TO_GRID = 1, + XmCENTER + }; + + /* XmROutlineState */ +enum { XmCOLLAPSED, + XmEXPANDED + }; + +/************************************************************************ + * * + * IconGadget defines * + * * + ************************************************************************/ + + /* XmRViewType */ +enum { XmLARGE_ICON, + XmSMALL_ICON + }; + + /* XmRVisualEmphasis */ +enum { XmSELECTED, + XmNOT_SELECTED + }; + +/************************************************************************ + * * + * Notebook Widget defines * + * * + ************************************************************************/ + +#define XmUNSPECIFIED_PAGE_NUMBER (-32768) + + /* XmRBindingType */ +enum { /* XmNONE */ + /* XmPIXMAP */ + XmSOLID = 2, + XmSPIRAL, + XmPIXMAP_OVERLAP_ONLY + }; + + /* XmRNBChildType */ +enum { /* XmNONE */ + XmPAGE = 1, + XmMAJOR_TAB, + XmMINOR_TAB, + XmSTATUS_AREA, + XmPAGE_SCROLLER + }; + +/************************************************************************ + * * + * Spin button defines. * + * * + ************************************************************************/ + +/* XmNarrowOrientation */ +enum +{ + XmARROWS_VERTICAL, + XmARROWS_HORIZONTAL +}; + +/* XmNarrowLayout */ +enum +{ + XmARROWS_END, + XmARROWS_BEGINNING, + XmARROWS_SPLIT, + XmARROWS_FLAT_END, + XmARROWS_FLAT_BEGINNING +}; + +/* XmNarrowSensitivity and XmNdefaultArrowSensitivity */ +/* Please note that these arrows form the proper values + for a bit mask. */ +enum +{ + XmARROWS_INSENSITIVE, + XmARROWS_INCREMENT_SENSITIVE, + XmARROWS_DECREMENT_SENSITIVE, + XmARROWS_SENSITIVE, + XmARROWS_DEFAULT_SENSITIVITY +}; + +/* XmNpositionType */ +enum +{ + XmPOSITION_INDEX, + XmPOSITION_VALUE +}; + +/* XmNspinButtonChildType */ +enum +{ + /* XmPIXMAP = 1 */ + /* XmSTRING */ + XmNUMERIC = 3 +}; + +/* Return values for Xm[Simple]SpinBoxValidatePosition */ +enum +{ + XmVALID_VALUE, + XmCURRENT_VALUE, + XmMAXIMUM_VALUE, + XmMINIMUM_VALUE, + XmINCREMENT_VALUE +}; + +typedef struct +{ + int reason; + XEvent *event; + Widget widget; + Boolean doit; + int position; + XmString value; + Boolean crossed_boundary; +} XmSpinBoxCallbackStruct; + + +/************************************************************************ + * * + * Scrolled Window defines. * + * * + ************************************************************************/ + +enum{ XmVARIABLE, XmCONSTANT, + XmRESIZE_IF_POSSIBLE + } ; +enum{ XmAUTOMATIC, XmAPPLICATION_DEFINED + } ; +enum{ /* XmSTATIC */ XmAS_NEEDED = 1 + } ; + +#define SW_TOP 1 +#define SW_BOTTOM 0 +#define SW_LEFT 2 +#define SW_RIGHT 0 + +#define XmTOP_LEFT (SW_TOP | SW_LEFT) +#define XmBOTTOM_LEFT (SW_BOTTOM | SW_LEFT) +#define XmTOP_RIGHT (SW_TOP | SW_RIGHT) +#define XmBOTTOM_RIGHT (SW_BOTTOM | SW_RIGHT) + +/************************************************************************ + * * + * MainWindow Resources * + * * + ************************************************************************/ + +enum{ XmCOMMAND_ABOVE_WORKSPACE, XmCOMMAND_BELOW_WORKSPACE + } ; +/************************************************************************ + * * + * Text Widget defines * + * * + ************************************************************************/ + +enum{ XmMULTI_LINE_EDIT, XmSINGLE_LINE_EDIT + } ; + +typedef enum{ + XmTEXT_FORWARD, + XmTEXT_BACKWARD + } XmTextDirection; + +typedef long XmTextPosition; +typedef Atom XmTextFormat; + +#define XmFMT_8_BIT ((XmTextFormat) XA_STRING) /* 8-bit text. */ +#define XmFMT_16_BIT ((XmTextFormat) 2) /* 16-bit text. */ + +#define FMT8BIT XmFMT_8_BIT /* For backwards compatibility only.*/ +#define FMT16BIT XmFMT_16_BIT /* For backwards compatibility only.*/ + +typedef enum{ + XmSELECT_POSITION, XmSELECT_WHITESPACE, + XmSELECT_WORD, XmSELECT_LINE, + XmSELECT_ALL, XmSELECT_PARAGRAPH, + XmSELECT_OUT_LINE + } XmTextScanType ; + +typedef enum{ + XmHIGHLIGHT_NORMAL, XmHIGHLIGHT_SELECTED, + XmHIGHLIGHT_SECONDARY_SELECTED, XmSEE_DETAIL + } XmHighlightMode ; + +/* XmTextBlock's are used to pass text around. */ + +typedef struct { + char *ptr; /* Pointer to data. */ + int length; /* Number of bytes of data. */ + XmTextFormat format; /* Representations format */ +} XmTextBlockRec, *XmTextBlock; + +typedef struct +{ + int reason; + XEvent *event; + Boolean doit; + long currInsert, newInsert; + long startPos, endPos; + XmTextBlock text; +} XmTextVerifyCallbackStruct, *XmTextVerifyPtr; + +/* XmTextBlockWcs's are used in 1.2 modifyVerifyWcs callbacks for Text[Field] + * widgets. */ + +typedef struct { + wchar_t *wcsptr; /* Pointer to data. */ + int length; /* Number of characters (not bytes) of data. */ +} XmTextBlockRecWcs, *XmTextBlockWcs; + +typedef struct +{ + int reason; + XEvent *event; + Boolean doit; + long currInsert, newInsert; + long startPos, endPos; + XmTextBlockWcs text; +} XmTextVerifyCallbackStructWcs, *XmTextVerifyPtrWcs; + +/* functions renamed after 1.0 release due to resource name overlap */ +#define XmTextGetTopPosition XmTextGetTopCharacter +#define XmTextSetTopPosition XmTextSetTopCharacter + +#define XmCOPY_FAILED 0 +#define XmCOPY_SUCCEEDED 1 +#define XmCOPY_TRUNCATED 2 + +/************************************************************************ + * * + * DIALOG defines.. BulletinBoard and things common to its subclasses * + * CommandBox MessageBox Selection FileSelection * + * * + ************************************************************************/ + +/* child type defines for Xm...GetChild() */ + +enum{ XmDIALOG_NONE, XmDIALOG_APPLY_BUTTON, + XmDIALOG_CANCEL_BUTTON, XmDIALOG_DEFAULT_BUTTON, + XmDIALOG_OK_BUTTON, XmDIALOG_FILTER_LABEL, + XmDIALOG_FILTER_TEXT, XmDIALOG_HELP_BUTTON, + XmDIALOG_LIST, XmDIALOG_LIST_LABEL, + XmDIALOG_MESSAGE_LABEL, XmDIALOG_SELECTION_LABEL, + XmDIALOG_SYMBOL_LABEL, XmDIALOG_TEXT, + XmDIALOG_SEPARATOR, XmDIALOG_DIR_LIST, + XmDIALOG_DIR_LIST_LABEL + } ; + +#define XmDIALOG_HISTORY_LIST XmDIALOG_LIST +#define XmDIALOG_PROMPT_LABEL XmDIALOG_SELECTION_LABEL +#define XmDIALOG_VALUE_TEXT XmDIALOG_TEXT +#define XmDIALOG_COMMAND_TEXT XmDIALOG_TEXT +#define XmDIALOG_FILE_LIST XmDIALOG_LIST +#define XmDIALOG_FILE_LIST_LABEL XmDIALOG_LIST_LABEL + +/* dialog style defines */ + +enum{ XmDIALOG_MODELESS, XmDIALOG_PRIMARY_APPLICATION_MODAL, + XmDIALOG_FULL_APPLICATION_MODAL,XmDIALOG_SYSTEM_MODAL + } ; + +/* The following is for compatibility only. Its use is deprecated. + */ +#define XmDIALOG_APPLICATION_MODAL XmDIALOG_PRIMARY_APPLICATION_MODAL + +/************************************************************************ + * XmSelectionBox, XmFileSelectionBox and XmCommand - misc. stuff * + ***********************************************************************/ + +/* Defines for Selection child placement +*/ +enum{ XmPLACE_TOP, XmPLACE_ABOVE_SELECTION, + XmPLACE_BELOW_SELECTION + } ; + +/* Defines for file type mask: +*/ +#define XmFILE_DIRECTORY (1 << 0) +#define XmFILE_REGULAR (1 << 1) +#define XmFILE_ANY_TYPE (XmFILE_DIRECTORY | XmFILE_REGULAR) + +/* Defines for selection dialog type: +*/ +enum{ XmDIALOG_WORK_AREA, XmDIALOG_PROMPT, + XmDIALOG_SELECTION, XmDIALOG_COMMAND, + XmDIALOG_FILE_SELECTION + } ; + +/************************************************************************ + * XmMessageBox stuff not common to other dialogs * + ***********************************************************************/ + +/* defines for dialog type */ + +enum{ XmDIALOG_TEMPLATE, XmDIALOG_ERROR, + XmDIALOG_INFORMATION, XmDIALOG_MESSAGE, + XmDIALOG_QUESTION, XmDIALOG_WARNING, + XmDIALOG_WORKING + } ; + +/* Traversal types */ + +typedef enum{ + XmVISIBILITY_UNOBSCURED, XmVISIBILITY_PARTIALLY_OBSCURED, + XmVISIBILITY_FULLY_OBSCURED + } XmVisibility ; + + +typedef enum{ + XmTRAVERSE_CURRENT, XmTRAVERSE_NEXT, + XmTRAVERSE_PREV, XmTRAVERSE_HOME, + XmTRAVERSE_NEXT_TAB_GROUP, XmTRAVERSE_PREV_TAB_GROUP, + XmTRAVERSE_UP, XmTRAVERSE_DOWN, + XmTRAVERSE_LEFT, XmTRAVERSE_RIGHT, + XmTRAVERSE_GLOBALLY_FORWARD, XmTRAVERSE_GLOBALLY_BACKWARD + } XmTraversalDirection ; + +typedef struct _XmTraverseObscuredCallbackStruct +{ int reason ; + XEvent * event ; + Widget traversal_destination ; + XmTraversalDirection direction ; + } XmTraverseObscuredCallbackStruct ; + +typedef unsigned char XmNavigationType; + + +/*********************************************************************** + * + * SimpleMenu declarations and definitions. + * + ***********************************************************************/ + +typedef unsigned char XmButtonType; +typedef XmButtonType * XmButtonTypeTable; +typedef KeySym * XmKeySymTable; +typedef XmStringCharSet * XmStringCharSetTable; + +enum{ XmPUSHBUTTON = 1, XmTOGGLEBUTTON, + XmRADIOBUTTON, XmCASCADEBUTTON, + XmSEPARATOR, XmDOUBLE_SEPARATOR, + XmTITLE + } ; +#define XmCHECKBUTTON XmTOGGLEBUTTON + + +/*********************************************************************** + * + * BitmapConversionModel + * + ***********************************************************************/ + +enum{ XmMATCH_DEPTH, XmDYNAMIC_DEPTH } ; + + +/************************************************************************ + * PrintShell defines + ************************************************************************/ + +enum { XmPDM_NOTIFY_FAIL, XmPDM_NOTIFY_SUCCESS } ; + +/************************************************************************ + * MultiList defines + ************************************************************************/ + +enum { XmMULTILIST_FOUND, XmMULTILIST_NOT_FOUND }; + +/************************************************************************ + * DropDown defines + ************************************************************************/ + +enum { + XmDROPDOWN_LABEL, + XmDROPDOWN_TEXT, + XmDROPDOWN_ARROW_BUTTON, + XmDROPDOWN_LIST +}; + + +/* This one cannot be put at the beginning because it needs + XmStringTable */ +#include + + +/******** BaseClass.c ********/ +typedef XtPointer (*XmResourceBaseProc)( Widget, XtPointer) ; + +typedef struct _XmSecondaryResourceDataRec{ + XmResourceBaseProc base_proc; + XtPointer client_data; + String name; + String res_class; + XtResourceList resources; + Cardinal num_resources; +}XmSecondaryResourceDataRec, *XmSecondaryResourceData; + +/******** Public Function Declarations for BaseClass.c ********/ + +extern Cardinal XmGetSecondaryResourceData( + WidgetClass w_class, + XmSecondaryResourceData **secondaryDataRtn) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for ImageCache.c ********/ + +extern Boolean XmInstallImage( + XImage *image, + char *image_name) ; +extern Boolean XmUninstallImage( + XImage *image) ; +extern Pixmap XmGetPixmap( + Screen *screen, + char *image_name, + Pixel foreground, + Pixel background) ; +extern Pixmap XmGetPixmapByDepth( + Screen *screen, + char *image_name, + Pixel foreground, + Pixel background, + int depth) ; +extern Boolean XmDestroyPixmap( + Screen *screen, + Pixmap pixmap) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Resolve.c ********/ +/*-- XmeResolvePartOffsets is defined in XmP.h. + These also belong there but for source compatibility, we let + them here --- */ + +typedef long XmOffset; +typedef XmOffset *XmOffsetPtr; + + + +extern void XmResolveAllPartOffsets( + WidgetClass w_class, + XmOffsetPtr *offset, + XmOffsetPtr *constraint_offset) ; +extern void XmResolvePartOffsets( + WidgetClass w_class, + XmOffsetPtr *offset) ; + +/******** End Public Function Declarations ********/ + + + +/******** Public Function Declarations for Xm.c ********/ + + +extern void XmUpdateDisplay( + Widget w) ; +extern Widget XmObjectAtPoint( + Widget wid, + Position x, + Position y ) ; + +extern Boolean XmWidgetGetBaselines( + Widget wid, + Dimension **baselines, + int *line_count); +extern Boolean XmWidgetGetDisplayRect( + Widget wid, + XRectangle *displayrect); + +/******** End Public Function Declarations ********/ + + + +/******** Primitive.c ********/ + +/******** Public Function Declarations for Primitive.c ********/ + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for ResConvert.c ********/ + +extern void XmCvtStringToUnitType( + XrmValuePtr args, + Cardinal *num_args, + XrmValue *from_val, + XrmValue *to_val) ; +extern char * XmRegisterSegmentEncoding( + char *fontlist_tag, + char *ct_encoding) ; +extern char * XmMapSegmentEncoding( + char *fontlist_tag) ; +extern XmString XmCvtCTToXmString( + char *text) ; +extern Boolean XmCvtTextToXmString( + Display *display, + XrmValuePtr args, + Cardinal *num_args, + XrmValue *from_val, + XrmValue *to_val, + XtPointer *converter_data) ; +extern char * XmCvtXmStringToCT( + XmString string) ; +extern Boolean XmCvtXmStringToText( + Display *display, + XrmValuePtr args, + Cardinal *num_args, + XrmValue *from_val, + XrmValue *to_val, + XtPointer *converter_data) ; +#ifdef UTF8_SUPPORTED +extern char * XmCvtXmStringToUTF8String( + XmString string) ; +#endif +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for ResInd.c ********/ + +extern int XmConvertStringToUnits( + Screen *screen, + String spec, + int orientation, + int to_type, + XtEnum *parse_error); +extern int XmConvertUnits( + Widget widget, + int dimension, + register int from_type, + register int from_val, + register int to_type) ; +extern int XmCvtToHorizontalPixels( + Screen *screen, + register int from_val, + register int from_type) ; +extern int XmCvtToVerticalPixels( + Screen *screen, + register int from_val, + register int from_type) ; +extern int XmCvtFromHorizontalPixels( + Screen *screen, + register int from_val, + register int to_type) ; +extern int XmCvtFromVerticalPixels( + Screen *screen, + register int from_val, + register int to_type) ; +extern void XmSetFontUnits( + Display *display, + int h_value, + int v_value) ; +extern void XmSetFontUnit( + Display *display, + int value) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for MenuUtil.c ********/ + +extern void XmSetMenuCursor( + Display *display, + Cursor cursorId) ; +extern Cursor XmGetMenuCursor( + Display *display) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Simple.c ********/ + +extern Widget XmCreateSimpleMenuBar( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimplePopupMenu( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimplePulldownMenu( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimpleOptionMenu( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimpleRadioBox( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; +extern Widget XmCreateSimpleCheckBox( + Widget parent, + String name, + ArgList args, + Cardinal arg_count) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for VaSimple.c ********/ +extern Widget XmVaCreateSimpleMenuBar( + Widget parent, + String name, + ...) ; +extern Widget XmVaCreateSimplePopupMenu( + Widget parent, + String name, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimplePulldownMenu( + Widget parent, + String name, + int post_from_button, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimpleOptionMenu( + Widget parent, + String name, + XmString option_label, + KeySym option_mnemonic, + int button_set, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimpleRadioBox( + Widget parent, + String name, + int button_set, + XtCallbackProc callback, + ...) ; +extern Widget XmVaCreateSimpleCheckBox( + Widget parent, + String name, + XtCallbackProc callback, + ...) ; +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for TrackLoc.c ********/ + +extern Widget XmTrackingEvent( + Widget widget, + Cursor cursor, +#if NeedWidePrototypes + int confineTo, +#else + Boolean confineTo, +#endif /* NeedWidePrototypes */ + XEvent *pev) ; +extern Widget XmTrackingLocate( + Widget widget, + Cursor cursor, +#if NeedWidePrototypes + int confineTo) ; +#else + Boolean confineTo) ; +#endif /* NeedWidePrototypes */ + +/******** End Public Function Declarations ********/ + +/******** Visual.c ********/ +typedef void (*XmColorProc) (XColor *bg_color, XColor *fg_color, + XColor *sel_color, XColor *ts_color, XColor *bs_color); + +/******** Public Function Declarations for Visual.c ********/ + +extern XmColorProc XmSetColorCalculation( + XmColorProc proc) ; +extern XmColorProc XmGetColorCalculation( void ) ; +extern void XmGetColors( + Screen *screen, + Colormap color_map, + Pixel background, + Pixel *foreground_ret, + Pixel *top_shadow_ret, + Pixel *bottom_shadow_ret, + Pixel *select_ret) ; +extern void XmChangeColor( + Widget widget, + Pixel background) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for XmString.c ********/ + +extern XmString XmStringCreate( + char *text, + XmStringCharSet charset) ; +extern XmString XmStringCreateSimple( + char *text) ; +extern XmString XmStringCreateLocalized( + String text) ; +extern XmString XmStringDirectionCreate( +#if NeedWidePrototypes + int direction) ; +#else + XmStringDirection direction) ; +#endif /* NeedWidePrototypes */ +extern XmString XmStringSeparatorCreate( void ) ; +extern XmString XmStringSegmentCreate( + char *text, + XmStringCharSet charset, +#if NeedWidePrototypes + int direction, + int separator) ; +#else + XmStringDirection direction, + Boolean separator) ; +#endif /* NeedWidePrototypes */ +extern XmString XmStringLtoRCreate( + char *text, + XmStringCharSet charset) ; +extern XmString XmStringCreateLtoR( + char *text, + XmStringCharSet charset) ; +extern Boolean XmStringInitContext( + XmStringContext *context, + XmString string) ; +extern void XmStringFreeContext( + XmStringContext context) ; +extern XmStringComponentType XmStringGetNextComponent( + XmStringContext context, + char **text, + XmStringCharSet *charset, + XmStringDirection *direction, + XmStringComponentType *unknown_tag, + unsigned short *unknown_length, + unsigned char **unknown_value) ; +extern XmStringComponentType XmStringPeekNextComponent( + XmStringContext context) ; +extern Boolean XmStringGetNextSegment( + XmStringContext context, + char **text, + XmStringCharSet *charset, + XmStringDirection *direction, + Boolean *separator) ; +extern Boolean XmStringGetLtoR( + XmString string, + XmStringCharSet charset, + char **text) ; +extern XmFontListEntry XmFontListEntryCreate( + char *tag, + XmFontType type, + XtPointer font) ; +extern XmFontListEntry XmFontListEntryCreate_r( + char *tag, + XmFontType type, + XtPointer font, + Widget wid) ; +extern void XmFontListEntryFree( + XmFontListEntry *entry) ; +extern XtPointer XmFontListEntryGetFont( + XmFontListEntry entry, + XmFontType *typeReturn) ; +extern char * XmFontListEntryGetTag( + XmFontListEntry entry) ; +extern XmFontList XmFontListAppendEntry( + XmFontList old, + XmFontListEntry entry) ; +extern XmFontListEntry XmFontListNextEntry( + XmFontContext context) ; +extern XmFontList XmFontListRemoveEntry( + XmFontList old, + XmFontListEntry entry) ; +extern XmFontListEntry XmFontListEntryLoad( + Display *display, + char *fontName, + XmFontType type, + char *tag) ; +extern XmFontList XmFontListCreate( + XFontStruct *font, + XmStringCharSet charset) ; +extern XmFontList XmFontListCreate_r( + XFontStruct *font, + XmStringCharSet charset, + Widget wid) ; +extern XmFontList XmStringCreateFontList( + XFontStruct *font, + XmStringCharSet charset) ; +extern XmFontList XmStringCreateFontList_r( + XFontStruct *font, + XmStringCharSet charset, + Widget wid) ; +extern void XmFontListFree( + XmFontList fontlist) ; +extern XmFontList XmFontListAdd( + XmFontList old, + XFontStruct *font, + XmStringCharSet charset) ; +extern XmFontList XmFontListCopy( + XmFontList fontlist) ; +extern Boolean XmFontListInitFontContext( + XmFontContext *context, + XmFontList fontlist) ; +extern Boolean XmFontListGetNextFont( + XmFontContext context, + XmStringCharSet *charset, + XFontStruct **font) ; +extern void XmFontListFreeFontContext( + XmFontContext context) ; +extern XmString XmStringConcat( + XmString a, + XmString b) ; +extern XmString XmStringConcatAndFree( + XmString a, + XmString b) ; +extern XmString XmStringNConcat( + XmString first, + XmString second, + int n) ; +extern XmString XmStringCopy( + XmString string) ; +extern XmString XmStringNCopy( + XmString str, + int n) ; +extern Boolean XmStringByteCompare( + XmString a1, + XmString b1) ; +extern Boolean XmStringCompare( + XmString a, + XmString b) ; +extern int XmStringLength( + XmString string) ; +extern Boolean XmStringEmpty( + XmString string) ; +extern Boolean XmStringIsVoid(XmString string); +extern Boolean XmStringHasSubstring( + XmString string, + XmString substring) ; +extern void XmStringFree( + XmString string) ; +extern Dimension XmStringBaseline( + XmFontList fontlist, + XmString string) ; +extern Dimension XmStringWidth( + XmFontList fontlist, + XmString string) ; +extern Dimension XmStringHeight( + XmFontList fontlist, + XmString string) ; +extern void XmStringExtent( + XmFontList fontlist, + XmString string, + Dimension *width, + Dimension *height) ; +extern int XmStringLineCount( + XmString string) ; +extern void XmStringDraw( + Display *d, + Window w, + XmFontList fontlist, + XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip) ; +extern void XmStringDrawImage( + Display *d, + Window w, + XmFontList fontlist, + XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip) ; +extern void XmStringDrawUnderline( + Display *d, + Window w, + XmFontList fntlst, + XmString str, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip, + XmString under) ; +extern unsigned int XmCvtXmStringToByteStream( + XmString string, + unsigned char **prop_return); +extern XmString XmCvtByteStreamToXmString( + unsigned char *property); +extern unsigned int XmStringByteStreamLength(unsigned char *string); +extern XmStringComponentType XmStringPeekNextTriple(XmStringContext context); +extern XmStringComponentType XmStringGetNextTriple(XmStringContext context, + unsigned int *length, + XtPointer *value); +extern XmString XmStringComponentCreate(XmStringComponentType tag, + unsigned int length, + XtPointer value); +extern XtPointer XmStringUnparse(XmString string, + XmStringTag tag, + XmTextType tag_type, + XmTextType output_type, + XmParseTable parse_table, + Cardinal parse_count, + XmParseModel parse_model); +extern XmString XmStringParseText(XtPointer text, + XtPointer *text_end, + XmStringTag tag, + XmTextType type, + XmParseTable parse_table, + Cardinal parse_count, + XtPointer call_data); +extern Cardinal XmStringToXmStringTable(XmString string, + XmString break_comp, + XmStringTable *table); +extern XmString XmStringTableToXmString(XmStringTable table, + Cardinal count, + XmString break_component); +extern XtPointer *XmStringTableUnparse(XmStringTable table, + Cardinal count, + XmStringTag tag, + XmTextType tag_type, + XmTextType output_type, + XmParseTable parse, + Cardinal parse_count, + XmParseModel parse_model); +extern XmStringTable XmStringTableParseStringArray(XtPointer *strings, + Cardinal count, + XmStringTag tag, + XmTextType type, + XmParseTable parse, + Cardinal parse_count, + XtPointer call_data); + +extern XmStringDirection XmDirectionToStringDirection(XmDirection dir); +extern XmDirection XmStringDirectionToDirection(XmStringDirection dir); + +extern XmString XmStringGenerate(XtPointer text, + XmStringTag tag, + XmTextType type, + XmStringTag rendition); +extern XmString XmStringPutRendition(XmString string, + XmStringTag rendition); + +extern XmParseMapping XmParseMappingCreate(ArgList arg_list, + Cardinal arg_count); +extern void XmParseMappingSetValues(XmParseMapping parse_mapping, + ArgList arg_list, + Cardinal arg_count); +extern void XmParseMappingGetValues(XmParseMapping parse_mapping, + ArgList arg_list, + Cardinal arg_count); +extern void XmParseMappingFree(XmParseMapping parse_mapping); +extern void XmParseTableFree(XmParseTable parse_table, + Cardinal parse_count); + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for XmTabList.c ********/ + +extern XmTabList + XmStringTableProposeTablist(XmStringTable strings, + Cardinal num_strings, + Widget widget, + float pad_value, + XmOffsetModel offset_model); +extern void XmTabSetValue(XmTab xmtab, float value); +extern float + XmTabGetValues(XmTab xmtab, + unsigned char *units, + XmOffsetModel *offset, + unsigned char *alignment, + char **decimal); +extern void XmTabFree(XmTab xmtab); +extern XmTab XmTabCreate(float value, + unsigned char units, + XmOffsetModel offset_model, + unsigned char alignment, + char *decimal); +extern XmTabList + XmTabListRemoveTabs(XmTabList oldlist, + Cardinal *position_list, + Cardinal position_count); +extern XmTabList + XmTabListReplacePositions(XmTabList oldlist, + Cardinal *position_list, + XmTab *tabs, + Cardinal tab_count); +extern XmTab XmTabListGetTab(XmTabList tablist, Cardinal position); +extern Cardinal XmTabListTabCount(XmTabList tablist); +extern XmTabList XmTabListCopy(XmTabList tablist, int offset, Cardinal count); +extern void XmTabListFree(XmTabList tablist); +extern XmTabList XmTabListInsertTabs(XmTabList oldlist, + XmTab *tabs, + Cardinal tab_count, + int position); +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for XmRenderTable.c ********/ + +extern XmRenderTable XmRenderTableCvtFromProp(Widget, char *prop, unsigned int len); +extern unsigned int XmRenderTableCvtToProp(Widget, XmRenderTable table, char **prop_return); +extern void XmRenditionUpdate(XmRendition rendition, ArgList arglist, Cardinal argcount); +extern void XmRenditionRetrieve(XmRendition rendition, + ArgList arglist, + Cardinal argcount); +extern void XmRenditionFree(XmRendition rendition); +extern XmRendition XmRenditionCreate(Widget widget, + XmStringTag tag, + ArgList arglist, + Cardinal argcount); +extern XmRendition + *XmRenderTableGetRenditions(XmRenderTable table, + XmStringTag *tags, + Cardinal tag_count); +extern XmRendition XmRenderTableGetRendition(XmRenderTable table, + XmStringTag tag); +extern int XmRenderTableGetTags(XmRenderTable table, + XmStringTag **tag_list); +extern void XmRenderTableFree(XmRenderTable table); +extern XmRenderTable XmRenderTableCopy(XmRenderTable table, + XmStringTag *tags, + int tag_count); +extern XmRenderTable + XmRenderTableRemoveRenditions(XmRenderTable oldtable, + XmStringTag *tags, + int tag_count); +extern XmRenderTable + XmRenderTableAddRenditions(XmRenderTable oldtable, + XmRendition *renditions, + Cardinal rendition_count, + XmMergeMode merge_mode); + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Dest.c ********/ + +extern Widget XmGetDestination( + Display *display) ; + +/******** End Public Function Declarations ********/ + +/******** Public Function Declarations for Traversal.c ********/ + +extern Boolean XmIsTraversable( + Widget wid) ; +extern XmVisibility XmGetVisibility( + Widget wid) ; +extern Widget XmGetTabGroup( + Widget wid) ; +extern Widget XmGetFocusWidget( + Widget wid) ; +extern Boolean XmProcessTraversal( + Widget w, + XmTraversalDirection dir) ; +extern void XmAddTabGroup( + Widget tabGroup) ; +extern void XmRemoveTabGroup( + Widget w) ; + +/******** End Public Function Declarations ********/ + +/******** ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +/* + * The following includes are for source compatibility. They might be + * removed at some future time. + */ +#include +#include + +#define XmINDICATOR_3D_BOX 0x01 +#define XmINDICATOR_FLAT_BOX 0x02 +#define XmINDICATOR_CHECK_GLYPH 0x10 +#define XmINDICATOR_CROSS_GLYPH 0x20 + +enum { + XmINDICATOR_NONE = 0, + XmINDICATOR_FILL = 1, /* Treated as _BOX or _CHECK_BOX */ + XmINDICATOR_BOX = 255, /* Treated as XmINDICATOR_3D_BOX */ + XmINDICATOR_CHECK = XmINDICATOR_CHECK_GLYPH, + XmINDICATOR_CHECK_BOX = XmINDICATOR_CHECK_GLYPH + XmINDICATOR_3D_BOX, + XmINDICATOR_CROSS = XmINDICATOR_CROSS_GLYPH, + XmINDICATOR_CROSS_BOX = XmINDICATOR_CROSS_GLYPH + XmINDICATOR_3D_BOX +}; + +enum { XmUNSET, XmSET, XmINDETERMINATE }; +enum { XmTOGGLE_BOOLEAN, XmTOGGLE_INDETERMINATE }; +typedef unsigned char XmToggleButtonState; + +/* Shared text enum. */ +typedef enum { EditDone, EditError, EditReject } XmTextStatus; + +/* XmDisplay.XmNdefaultButtonEmphasis enum */ +enum { XmEXTERNAL_HIGHLIGHT, XmINTERNAL_HIGHLIGHT }; + +/* new for XmString */ +#define _MOTIF_DEFAULT_LOCALE "_MOTIF_DEFAULT_LOCALE" + +enum { XmPATH_MODE_FULL, XmPATH_MODE_RELATIVE }; +enum { XmFILTER_NONE, XmFILTER_HIDDEN_FILES} ; + +#endif /* _Xm_h */ + /* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmI.h b/libXm/osx/Xm/XmI.h new file mode 100644 index 0000000..cdb7a52 --- /dev/null +++ b/libXm/osx/Xm/XmI.h @@ -0,0 +1,297 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: XmI.h /main/19 1997/06/18 17:47:55 samborn $ */ +/* (c) Copyright 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmI_h +#define _XmI_h + +#ifndef _XmNO_BC_INCL +#define _XmNO_BC_INCL +#endif + +#include +#include +#include +#include "XmStrDefsI.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef DEBUG +# define assert(assert_exp) +#elif (defined(__STDC__) && !defined(UNIXCPP)) || defined(ANSICPP) +# define assert(assert_exp) \ + (((assert_exp) ? (void) 0 : \ + (void) (fprintf(stderr, "assert(%s) failed at line %d in %s\n", \ + #assert_exp, __LINE__, __FILE__), abort()))) +#else +# define assert(assert_exp) \ + (((assert_exp) ? 0 : \ + (void) (fprintf(stderr, "assert(%s) failed at line %d in %s\n", \ + "assert_exp", __LINE__, __FILE__), abort()))) +#endif + + +#define ASSIGN_MAX(a, b) ((a) = ((a) > (b) ? (a) : (b))) +#define ASSIGN_MIN(a, b) ((a) = ((a) < (b) ? (a) : (b))) + +#ifndef MAX +#define MAX(x,y) ((x) > (y) ? (x) : (y)) +#endif + +#ifndef MIN +#define MIN(x,y) ((x) > (y) ? (y) : (x)) +#endif + +#ifndef ABS +#define ABS(x) (((x) >= 0) ? (x) : -(x)) +#endif + +#define GMode(g) ((g)->request_mode) +#define IsX(g) (GMode (g) & CWX) +#define IsY(g) (GMode (g) & CWY) +#define IsWidth(g) (GMode (g) & CWWidth) +#define IsHeight(g) (GMode (g) & CWHeight) +#define IsBorder(g) (GMode (g) & CWBorderWidth) +#define IsWidthHeight(g) (GMode (g) & (CWWidth | CWHeight)) +#define IsQueryOnly(g) (GMode (g) & XtCWQueryOnly) + +#define XmStrlen(s) ((s) ? strlen(s) : 0) + + +#define XmStackAlloc(size, stack_cache_array) \ + ((((char*)(stack_cache_array) != NULL) && \ + ((size) <= sizeof(stack_cache_array))) \ + ? (char *)(stack_cache_array) \ + : XtMalloc((unsigned)(size))) + +#define XmStackFree(pointer, stack_cache_array) \ + if ((pointer) != ((char*)(stack_cache_array))) XtFree(pointer); + + +/******** _XmCreateImage ********/ + +#ifdef NO_XM_1_2_BC + +/* The _XmCreateImage macro is used to create XImage with client + specific data for the bit and byte order. + We still have to do the following because XCreateImage + will stuff here display specific data and we want + client specific values (i.e the bit orders we used for + creating the bitmap data in Motif) -- BUG 4262 */ +/* Used in Motif 1.2 in DragIcon.c, MessageB.c, ReadImage.c and + ImageCache.c */ + +#define _XmCreateImage(IMAGE, DISPLAY, DATA, WIDTH, HEIGHT, BYTE_ORDER) {\ + IMAGE = XCreateImage(DISPLAY,\ + DefaultVisual(DISPLAY, DefaultScreen(DISPLAY)),\ + 1,\ + XYBitmap,\ + 0,\ + DATA,\ + WIDTH, HEIGHT,\ + 8,\ + (WIDTH+7) >> 3);\ + IMAGE->byte_order = BYTE_ORDER;\ + IMAGE->bitmap_unit = 8;\ + IMAGE->bitmap_bit_order = LSBFirst;\ +} + +#endif /* NO_XM_1_2_BC */ + + +/**************************************************************** + * + * Macros for Right-to-left Layout + * + ****************************************************************/ + +#define GetLayout(w) (_XmGetLayoutDirection((Widget)(w))) +#define LayoutM(w) (XmIsManager(w) ? \ + ((XmManagerWidget)w)->manager.string_direction : \ + GetLayout(w)) +#define LayoutP(w) (XmIsPrimitive(w) ? \ + XmPrim_layout_direction(((XmPrimitiveWidget)w)) :\ + GetLayout(w)) +#define LayoutG(w) (XmIsGadget(w) ? \ + ((XmGadget)w)->gadget.layout_direction : \ + GetLayout(w)) + +#define LayoutIsRtoL(w) \ + (XmDirectionMatchPartial(GetLayout(w), XmRIGHT_TO_LEFT, XmHORIZONTAL_MASK)) +#define LayoutIsRtoLM(w) \ + (XmDirectionMatchPartial(LayoutM(w), XmRIGHT_TO_LEFT, XmHORIZONTAL_MASK)) +#define LayoutIsRtoLP(w) \ + (XmDirectionMatchPartial(LayoutP(w), XmRIGHT_TO_LEFT, XmHORIZONTAL_MASK)) +#define LayoutIsRtoLG(w) \ + (XmDirectionMatchPartial(LayoutG(w), XmRIGHT_TO_LEFT, XmHORIZONTAL_MASK)) + + +/******** Private Function Declarations for Direction.c ********/ + +extern void _XmDirectionDefault(Widget widget, + int offset, + XrmValue *value ); +extern void _XmFromLayoutDirection( + Widget widget, + int offset, + XtArgVal *value) ; + +extern XmImportOperator _XmToLayoutDirection( + Widget widget, + int offset, + XtArgVal *value) ; +extern XmDirection _XmGetLayoutDirection(Widget w); + + +/******** Private Function Declarations for thickness ********/ +extern void _XmSetThickness( + Widget widget, + int offset, + XrmValue *value) ; +extern void _XmSetThicknessDefault0( + Widget widget, + int offset, + XrmValue *value) ; + +/******** Private Function Declarations for Xm.c ********/ + +extern void _XmReOrderResourceList( + WidgetClass widget_class, + String res_name, + String insert_after) ; +extern void _XmSocorro( + Widget w, + XEvent *event, + String *params, + Cardinal *num_params) ; +extern Boolean _XmParentProcess( + Widget widget, + XmParentProcessData data) ; +extern void _XmClearShadowType( + Widget w, +#if NeedWidePrototypes + int old_width, + int old_height, + int old_shadow_thickness, + int old_highlight_thickness) ; +#else + Dimension old_width, + Dimension old_height, + Dimension old_shadow_thickness, + Dimension old_highlight_thickness) ; +#endif /* NeedWidePrototypes */ +#ifdef NO_XM_1_2_BC +extern void _XmDestroyParentCallback( + Widget w, + XtPointer client_data, + XtPointer call_data) ; +#endif +extern Time _XmValidTimestamp( + Widget w); +extern void _XmWarningMsg(Widget w, + char *type, + char *message, + char **params, + Cardinal num_params); +extern Display *_XmGetDefaultDisplay(void); +extern Boolean _XmIsISO10646(Display *dpy, + XFontStruct *font); +extern XChar2b* _XmUtf8ToUcs2(char *draw_text, + size_t seg_len, + size_t *ret_str_len); + + +/******** End Private Function Declarations ********/ + +/******** Conditionally defined macros for thread_safe Motif ******/ +#if defined(XTHREADS) && defined(XUSE_MTSAFE_API) + +# define _XmWidgetToAppContext(w) \ + XtAppContext app = XtWidgetToApplicationContext(w) + +# define _XmDisplayToAppContext(d) \ + XtAppContext app = XtDisplayToApplicationContext(d) + +# define _XmAppLock(app) XtAppLock(app) +# define _XmAppUnlock(app) XtAppUnlock(app) +# define _XmProcessLock() XtProcessLock() +# define _XmProcessUnlock() XtProcessUnlock() + +/* Remove use of _XtProcessLock when Xt provides API to query its MT-status */ +extern void (*_XtProcessLock)(); +# define _XmIsThreadInitialized() (_XtProcessLock) + +#else + +# define _XmWidgetToAppContext(w) +# define _XmDisplayToAppContext(d) +# define _XmAppLock(app) +# define _XmAppUnlock(app) +# define _XmProcessLock() +# define _XmProcessUnlock() +# define _XmIsThreadInitialized() (FALSE) + +#endif /* XTHREADS && XUSE_MTSAFE_API */ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#define FIX_1381 +#define FIX_1396 + +#ifdef FIX_1381 +#define RGB_GREY_VALUE 128 +#define RGB_GREY_PRESISE 50 +extern Pixel _XmAssignInsensitiveColor(Widget w); +#endif + +#define FIX_1375 +#define FIX_1395 1 + +#define FIX_1388 +#define FIX_1398 +#define FIX_1402 +#define FIX_1445 + +#endif /* _XmI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmIm.h b/libXm/osx/Xm/XmIm.h new file mode 100644 index 0000000..f4b36e9 --- /dev/null +++ b/libXm/osx/Xm/XmIm.h @@ -0,0 +1,114 @@ +/* $XConsortium: XmIm.h /main/7 1996/05/21 12:13:36 pascale $ */ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * HISTORY + */ +#ifndef _XmIm_h +#define _XmIm_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Public Function Declarations ********/ + +extern void XmImRegister( + Widget w, + unsigned int reserved) ; +extern void XmImUnregister( + Widget w) ; +extern void XmImSetFocusValues( + Widget w, + ArgList args, + Cardinal num_args) ; +extern void XmImSetValues( + Widget w, + ArgList args, + Cardinal num_args) ; +extern void XmImUnsetFocus( + Widget w) ; +extern XIM XmImGetXIM( + Widget w) ; +extern void XmImCloseXIM( + Widget w) ; + +extern int XmImMbLookupString( + Widget w, + XKeyPressedEvent *event, + char *buf, + int nbytes, + KeySym *keysym, + int *status) ; +extern void XmImVaSetFocusValues( + Widget w, + ...) ; +extern void XmImVaSetValues( + Widget w, + ...) ; +extern XIC XmImGetXIC( + Widget w, +#if NeedWidePrototypes + unsigned int input_policy, +#else + XmInputPolicy input_policy, +#endif /*NeedWidePrototypes*/ + ArgList args, + Cardinal num_args) ; +extern XIC XmImSetXIC( + Widget w, + XIC input_context) ; +extern void XmImFreeXIC( + Widget w, + XIC input_context) ; + +extern void XmImMbResetIC( + Widget w, + char **mb); + +extern XIMResetState XmImGetXICResetState( + Widget w); + +/******** End Public Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmIm_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmImI.h b/libXm/osx/Xm/XmImI.h new file mode 100644 index 0000000..5e33206 --- /dev/null +++ b/libXm/osx/Xm/XmImI.h @@ -0,0 +1,65 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: XmImI.h /main/5 1995/07/13 18:23:12 drk $ */ +#ifndef _XmImI_h +#define _XmImI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/******** Private Function Declarations for XmIm.c ********/ + +extern void _XmImFreeShellData(Widget w, XtPointer* data); +extern void _XmImChangeManaged(Widget vw) ; +extern void _XmImRealize(Widget vw) ; +extern void _XmImResize(Widget vw) ; +extern void _XmImRedisplay(Widget vw) ; + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmImI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmMsgI.h b/libXm/osx/Xm/XmMsgI.h new file mode 100644 index 0000000..19d6929 --- /dev/null +++ b/libXm/osx/Xm/XmMsgI.h @@ -0,0 +1,325 @@ +/* $XConsortium: XmMsgI.h /main/15 1996/08/15 17:27:54 pascale $ */ +/* + * + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + */ +/* This file is automatically generated. */ +/* Do not edit. */ + +#ifndef NO_MESSAGE_CATALOG + +#include +#include "XmMsgCatI.h" + +externalref nl_catd Xm_catd; + +#define _XmCatgets(catd, set_num, msg_num, def_str) \ + catgets(catd, set_num, msg_num, def_str) + +#else + +#define _XmCatgets(catd, set_num, msg_num, def_str) def_str + +#endif /* NO_MESSAGE_CATALOG */ + +#define _XmMMsgBulletinB_0001 _XmCatgets(Xm_catd, MS_BulletinB, MSG_BulletinB_0001, _XmMsgBulletinB_0001) +#define _XmMMsgCascadeB_0001 _XmCatgets(Xm_catd, MS_CascadeB, MSG_CascadeB_0001, _XmMsgCascadeB_0001) +#define _XmMMsgCascadeB_0002 _XmCatgets(Xm_catd, MS_CascadeB, MSG_CascadeB_0002, _XmMsgCascadeB_0002) +#define _XmMMsgCascadeB_0000 _XmCatgets(Xm_catd, MS_CascadeB, MSG_CascadeB_0000, _XmMsgCascadeB_0000) +#define _XmMMsgCascadeB_0003 _XmCatgets(Xm_catd, MS_CascadeB, MSG_CascadeB_0003, _XmMsgCascadeB_0003) +#define _XmMMsgRowColText_0024 _XmCatgets(Xm_catd, MS_CascadeB, MSG_RowColText_0024, _XmMsgRowColText_0024) +#define _XmMMsgCommand_0000 _XmCatgets(Xm_catd, MS_Command, MSG_Command_0000, _XmMsgCommand_0000) +#define _XmMMsgCommand_0001 _XmCatgets(Xm_catd, MS_Command, MSG_Command_0001, _XmMsgCommand_0001) +#define _XmMMsgCommand_0002 _XmCatgets(Xm_catd, MS_Command, MSG_Command_0002, _XmMsgCommand_0002) +#define _XmMMsgCommand_0003 _XmCatgets(Xm_catd, MS_Command, MSG_Command_0003, _XmMsgCommand_0003) +#define _XmMMsgCommand_0004 _XmCatgets(Xm_catd, MS_Command, MSG_Command_0004, _XmMsgCommand_0004) +#define _XmMMsgCommand_0005 _XmCatgets(Xm_catd, MS_Command, MSG_Command_0005, _XmMsgCommand_0005) +#define _XmMMsgCutPaste_0000 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0000, _XmMsgCutPaste_0000) +#define _XmMMsgCutPaste_0001 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0001, _XmMsgCutPaste_0001) +#define _XmMMsgCutPaste_0002 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0002, _XmMsgCutPaste_0002) +#define _XmMMsgCutPaste_0003 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0003, _XmMsgCutPaste_0003) +#define _XmMMsgCutPaste_0004 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0004, _XmMsgCutPaste_0004) +#define _XmMMsgCutPaste_0005 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0005, _XmMsgCutPaste_0005) +#define _XmMMsgCutPaste_0006 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0006, _XmMsgCutPaste_0006) +#define _XmMMsgCutPaste_0007 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0007, _XmMsgCutPaste_0007) +#define _XmMMsgCutPaste_0008 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0008, _XmMsgCutPaste_0008) +#define _XmMMsgCutPaste_0009 _XmCatgets(Xm_catd, MS_CutPaste, MSG_CutPaste_0009, _XmMsgCutPaste_0009) +#define _XmMMsgDialogS_0000 _XmCatgets(Xm_catd, MS_DialogS, MSG_DialogS_0000, _XmMsgDialogS_0000) +#define _XmMMsgForm_0000 _XmCatgets(Xm_catd, MS_Form, MSG_Form_0000, _XmMsgForm_0000) +#define _XmMMsgForm_0002 _XmCatgets(Xm_catd, MS_Form, MSG_Form_0002, _XmMsgForm_0002) +#define _XmMMsgForm_0003 _XmCatgets(Xm_catd, MS_Form, MSG_Form_0003, _XmMsgForm_0003) +#define _XmMMsgGadget_0000 _XmCatgets(Xm_catd, MS_Gadget, MSG_Gadget_0000, _XmMsgGadget_0000) +#define _XmMMsgLabel_0003 _XmCatgets(Xm_catd, MS_Label, MSG_Label_0003, _XmMsgLabel_0003) +#define _XmMMsgLabel_0004 _XmCatgets(Xm_catd, MS_Label, MSG_Label_0004, _XmMsgLabel_0004) +#define _XmMMsgList_0000 _XmCatgets(Xm_catd, MS_List, MSG_List_0000, _XmMsgList_0000) +#define _XmMMsgList_0005 _XmCatgets(Xm_catd, MS_List, MSG_List_0005, _XmMsgList_0005) +#define _XmMMsgList_0006 _XmCatgets(Xm_catd, MS_List, MSG_List_0006, _XmMsgList_0006) +#define _XmMMsgList_0007 _XmCatgets(Xm_catd, MS_List, MSG_List_0007, _XmMsgList_0007) +#define _XmMMsgList_0008 _XmCatgets(Xm_catd, MS_List, MSG_List_0008, _XmMsgList_0008) +#define _XmMMsgList_0009 _XmCatgets(Xm_catd, MS_List, MSG_List_0009, _XmMsgList_0009) +#define _XmMMsgList_0010 _XmCatgets(Xm_catd, MS_List, MSG_List_0010, _XmMsgList_0010) +#define _XmMMsgList_0011 _XmCatgets(Xm_catd, MS_List, MSG_List_0011, _XmMsgList_0011) +#define _XmMMsgList_0012 _XmCatgets(Xm_catd, MS_List, MSG_List_0012, _XmMsgList_0012) +#define _XmMMsgList_0013 _XmCatgets(Xm_catd, MS_List, MSG_List_0013, _XmMsgList_0013) +#define _XmMMsgList_0014 _XmCatgets(Xm_catd, MS_List, MSG_List_0014, _XmMsgList_0014) +#define _XmMMsgList_0015 _XmCatgets(Xm_catd, MS_List, MSG_List_0015, _XmMsgList_0015) +#define _XmMMsgMainW_0000 _XmCatgets(Xm_catd, MS_MainW, MSG_MainW_0000, _XmMsgMainW_0000) +#define _XmMMsgMainW_0001 _XmCatgets(Xm_catd, MS_MainW, MSG_MainW_0001, _XmMsgMainW_0001) +#define _XmMMsgMenuShell_0000 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0000, _XmMsgMenuShell_0000) +#define _XmMMsgMenuShell_0001 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0001, _XmMsgMenuShell_0001) +#define _XmMMsgMenuShell_0002 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0002, _XmMsgMenuShell_0002) +#define _XmMMsgMenuShell_0003 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0003, _XmMsgMenuShell_0003) +#define _XmMMsgMenuShell_0004 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0004, _XmMsgMenuShell_0004) +#define _XmMMsgMenuShell_0005 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0005, _XmMsgMenuShell_0005) +#define _XmMMsgMenuShell_0006 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0006, _XmMsgMenuShell_0006) +#define _XmMMsgMenuShell_0007 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0007, _XmMsgMenuShell_0007) +#define _XmMMsgMenuShell_0008 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0008, _XmMsgMenuShell_0008) +#define _XmMMsgMenuShell_0009 _XmCatgets(Xm_catd, MS_MenuShell, MSG_MenuShell_0009, _XmMsgMenuShell_0009) +#define _XmMMsgMessageB_0003 _XmCatgets(Xm_catd, MS_MessageB, MSG_MessageB_0003, _XmMsgMessageB_0003) +#define _XmMMsgMessageB_0004 _XmCatgets(Xm_catd, MS_MessageB, MSG_MessageB_0004, _XmMsgMessageB_0004) +#define _XmMMsgPanedW_0000 _XmCatgets(Xm_catd, MS_PanedW, MSG_PanedW_0000, _XmMsgPanedW_0000) +#define _XmMMsgPanedW_0001 _XmCatgets(Xm_catd, MS_PanedW, MSG_PanedW_0001, _XmMsgPanedW_0001) +#define _XmMMsgPanedW_0002 _XmCatgets(Xm_catd, MS_PanedW, MSG_PanedW_0002, _XmMsgPanedW_0002) +#define _XmMMsgPanedW_0004 _XmCatgets(Xm_catd, MS_PanedW, MSG_PanedW_0004, _XmMsgPanedW_0004) +#define _XmMMsgPanedW_0005 _XmCatgets(Xm_catd, MS_PanedW, MSG_PanedW_0005, _XmMsgPanedW_0005) +#define _XmMMsgProtocols_0000 _XmCatgets(Xm_catd, MS_Protocols, MSG_Protocols_0000, _XmMsgProtocols_0000) +#define _XmMMsgProtocols_0001 _XmCatgets(Xm_catd, MS_Protocols, MSG_Protocols_0001, _XmMsgProtocols_0001) +#define _XmMMsgProtocols_0002 _XmCatgets(Xm_catd, MS_Protocols, MSG_Protocols_0002, _XmMsgProtocols_0002) +#define _XmMMsgRowColumn_0000 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0000, _XmMsgRowColumn_0000) +#define _XmMMsgRowColumn_0001 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0001, _XmMsgRowColumn_0001) +#define _XmMMsgRowColumn_0002 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0002, _XmMsgRowColumn_0002) +#define _XmMMsgRowColumn_0003 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0003, _XmMsgRowColumn_0003) +#define _XmMMsgRowColumn_0004 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0004, _XmMsgRowColumn_0004) +#define _XmMMsgRowColumn_0005 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0005, _XmMsgRowColumn_0005) +#define _XmMMsgRowColumn_0007 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0007, _XmMsgRowColumn_0007) +#define _XmMMsgRowColumn_0008 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0008, _XmMsgRowColumn_0008) +#define _XmMMsgRowColumn_0015 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0015, _XmMsgRowColumn_0015) +#define _XmMMsgRowColumn_0016 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0016, _XmMsgRowColumn_0016) +#define _XmMMsgRowColumn_0017 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0017, _XmMsgRowColumn_0017) +#define _XmMMsgRowColumn_0018 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0018, _XmMsgRowColumn_0018) +#define _XmMMsgRowColumn_0019 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0019, _XmMsgRowColumn_0019) +#define _XmMMsgRowColumn_0020 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0020, _XmMsgRowColumn_0020) +#define _XmMMsgRowColumn_0022 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0022, _XmMsgRowColumn_0022) +#define _XmMMsgRowColumn_0023 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0023, _XmMsgRowColumn_0023) +#define _XmMMsgRowColumn_0025 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0025, _XmMsgRowColumn_0025) +#define _XmMMsgRowColumn_0026 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0026, _XmMsgRowColumn_0026) +#define _XmMMsgRowColumn_0027 _XmCatgets(Xm_catd, MS_RowColumn, MSG_RowColumn_0027, _XmMsgRowColumn_0027) +#define _XmMMsgScale_0000 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0000, _XmMsgScale_0000) +#define _XmMMsgScale_0001 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0001, _XmMsgScale_0001) +#define _XmMMsgScale_0002 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0002, _XmMsgScale_0002) +#define _XmMMsgScaleScrBar_0004 _XmCatgets(Xm_catd, MS_Scale, MSG_ScaleScrBar_0004, _XmMsgScaleScrBar_0004) +#define _XmMMsgScale_0006 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0006, _XmMsgScale_0006) +#define _XmMMsgScale_0007 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0007, _XmMsgScale_0007) +#define _XmMMsgScale_0008 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0008, _XmMsgScale_0008) +#define _XmMMsgScale_0009 _XmCatgets(Xm_catd, MS_Scale, MSG_Scale_0009, _XmMsgScale_0009) +#define _XmMMsgScrollBar_0000 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0000, _XmMsgScrollBar_0000) +#define _XmMMsgScrollBar_0001 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0001, _XmMsgScrollBar_0001) +#define _XmMMsgScrollBar_0002 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0002, _XmMsgScrollBar_0002) +#define _XmMMsgScrollBar_0003 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0003, _XmMsgScrollBar_0003) +#define _XmMMsgScrollBar_0004 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0004, _XmMsgScrollBar_0004) +#define _XmMMsgScrollBar_0005 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0005, _XmMsgScrollBar_0005) +#define _XmMMsgScrollBar_0006 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0006, _XmMsgScrollBar_0006) +#define _XmMMsgScrollBar_0007 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0007, _XmMsgScrollBar_0007) +#define _XmMMsgScrollBar_0008 _XmCatgets(Xm_catd, MS_ScrollBar, MSG_ScrollBar_0008, _XmMsgScrollBar_0008) +#define _XmMMsgScrolledW_0004 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrolledW_0004, _XmMsgScrolledW_0004) +#define _XmMMsgScrolledW_0005 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrolledW_0005, _XmMsgScrolledW_0005) +#define _XmMMsgScrolledW_0006 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrolledW_0006, _XmMsgScrolledW_0006) +#define _XmMMsgScrolledW_0007 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrolledW_0007, _XmMsgScrolledW_0007) +#define _XmMMsgScrolledW_0008 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrolledW_0008, _XmMsgScrolledW_0008) +#define _XmMMsgScrolledW_0009 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrolledW_0009, _XmMsgScrolledW_0009) +#define _XmMMsgScrollVis_0000 _XmCatgets(Xm_catd, MS_ScrolledW, MSG_ScrollVis_0000, _XmMsgScrollVis_0000) +#define _XmMMsgSelectioB_0001 _XmCatgets(Xm_catd, MS_SelectioB, MSG_SelectioB_0001, _XmMsgSelectioB_0001) +#define _XmMMsgSelectioB_0002 _XmCatgets(Xm_catd, MS_SelectioB, MSG_SelectioB_0002, _XmMsgSelectioB_0002) +#define _XmMMsgText_0000 _XmCatgets(Xm_catd, MS_Text, MSG_Text_0000, _XmMsgText_0000) +#define _XmMMsgTextIn_0000 _XmCatgets(Xm_catd, MS_Text, MSG_TextIn_0000, _XmMsgTextIn_0000) +#define _XmMMsgTextOut_0000 _XmCatgets(Xm_catd, MS_Text, MSG_TextOut_0000, _XmMsgTextOut_0000) +#define _XmMMsgTextF_0002 _XmCatgets(Xm_catd, MS_Text, MSG_TextF_0002, _XmMsgTextF_0002) +#define _XmMMsgTextF_0003 _XmCatgets(Xm_catd, MS_Text, MSG_TextF_0003, _XmMsgTextF_0003) +#define _XmMMsgTextF_0004 _XmCatgets(Xm_catd, MS_Text, MSG_TextF_0004, _XmMsgTextF_0004) +#define _XmMMsgTextFWcs_0000 _XmCatgets(Xm_catd, MS_Text, MSG_TextFWcs_0000, _XmMsgTextFWcs_0000) +#define _XmMMsgTextF_0000 _XmCatgets(Xm_catd, MS_TextF, MSG_TextF_0000, _XmMsgTextF_0000) +#define _XmMMsgTextF_0001 _XmCatgets(Xm_catd, MS_TextF, MSG_TextF_0001, _XmMsgTextF_0001) +#define _XmMMsgTextF_0006 _XmCatgets(Xm_catd, MS_TextF, MSG_TextF_0006, _XmMsgTextF_0006) +#define _XmMMsgVendor_0000 _XmCatgets(Xm_catd, MS_Vendor, MSG_Vendor_0000, _XmMsgVendor_0000) +#define _XmMMsgVendor_0001 _XmCatgets(Xm_catd, MS_Vendor, MSG_Vendor_0001, _XmMsgVendor_0001) +#define _XmMMsgVendor_0002 _XmCatgets(Xm_catd, MS_Vendor, MSG_Vendor_0002, _XmMsgVendor_0002) +#define _XmMMsgVendor_0003 _XmCatgets(Xm_catd, MS_Vendor, MSG_Vendor_0003, _XmMsgVendor_0003) +#define _XmMMsgVisual_0000 _XmCatgets(Xm_catd, MS_Visual, MSG_Visual_0000, _XmMsgVisual_0000) +#define _XmMMsgVisual_0001 _XmCatgets(Xm_catd, MS_Visual, MSG_Visual_0001, _XmMsgVisual_0001) +#define _XmMMsgVisual_0002 _XmCatgets(Xm_catd, MS_Visual, MSG_Visual_0002, _XmMsgVisual_0002) +#define _XmMMsgXmIm_0000 _XmCatgets(Xm_catd, MS_XmIm, MSG_XmIm_0000, _XmMsgXmIm_0000) +#define _XmMMsgResource_0001 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0001, _XmMsgResource_0001) +#define _XmMMsgResource_0002 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0002, _XmMsgResource_0002) +#define _XmMMsgResource_0003 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0003, _XmMsgResource_0003) +#define _XmMMsgResource_0004 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0004, _XmMsgResource_0004) +#define _XmMMsgResource_0005 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0005, _XmMsgResource_0005) +#define _XmMMsgResource_0006 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0006, _XmMsgResource_0006) +#define _XmMMsgResource_0007 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0007, _XmMsgResource_0007) +#define _XmMMsgResource_0008 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0008, _XmMsgResource_0008) +#define _XmMMsgResource_0009 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0009, _XmMsgResource_0009) +#define _XmMMsgResource_0010 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0010, _XmMsgResource_0010) +#define _XmMMsgResource_0011 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0011, _XmMsgResource_0011) +#define _XmMMsgResource_0012 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0012, _XmMsgResource_0012) +#define _XmMMsgResource_0013 _XmCatgets(Xm_catd, MS_Resources, MSG_Resource_0013, _XmMsgResource_0013) +#define _XmMMsgBaseClass_0000 _XmCatgets(Xm_catd, MS_BaseClass, MSG_BaseClass_0000, _XmMsgBaseClass_0000) +#define _XmMMsgBaseClass_0001 _XmCatgets(Xm_catd, MS_BaseClass, MSG_BaseClass_0001, _XmMsgBaseClass_0001) +#define _XmMMsgDisplay_0001 _XmCatgets(Xm_catd, MS_Display, MSG_Display_0001, _XmMsgDisplay_0001) +#define _XmMMsgDisplay_0002 _XmCatgets(Xm_catd, MS_Display, MSG_Display_0002, _XmMsgDisplay_0002) +#define _XmMMsgDisplay_0003 _XmCatgets(Xm_catd, MS_Display, MSG_Display_0003, _XmMsgDisplay_0003) +#define _XmMMsgDragBS_0000 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0000, _XmMsgDragBS_0000) +#define _XmMMsgDragBS_0001 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0001, _XmMsgDragBS_0001) +#define _XmMMsgDragBS_0002 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0002, _XmMsgDragBS_0002) +#define _XmMMsgDragBS_0003 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0003, _XmMsgDragBS_0003) +#define _XmMMsgDragBS_0004 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0004, _XmMsgDragBS_0004) +#define _XmMMsgDragBS_0005 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0005, _XmMsgDragBS_0005) +#define _XmMMsgDragBS_0006 _XmCatgets(Xm_catd, MS_DragBS, MSG_DragBS_0006, _XmMsgDragBS_0006) +#define _XmMMsgDragC_0001 _XmCatgets(Xm_catd, MS_DragC, MSG_DragC_0001, _XmMsgDragC_0001) +#define _XmMMsgDragC_0002 _XmCatgets(Xm_catd, MS_DragC, MSG_DragC_0002, _XmMsgDragC_0002) +#define _XmMMsgDragC_0003 _XmCatgets(Xm_catd, MS_DragC, MSG_DragC_0003, _XmMsgDragC_0003) +#define _XmMMsgDragC_0004 _XmCatgets(Xm_catd, MS_DragC, MSG_DragC_0004, _XmMsgDragC_0004) +#define _XmMMsgDragC_0005 _XmCatgets(Xm_catd, MS_DragC, MSG_DragC_0005, _XmMsgDragC_0005) +#define _XmMMsgDragC_0006 _XmCatgets(Xm_catd, MS_DragC, MSG_DragC_0006, _XmMsgDragC_0006) +#define _XmMMsgDragICC_0000 _XmCatgets(Xm_catd, MS_DragICC, MSG_DragICC_0000, _XmMsgDragICC_0000) +#define _XmMMsgDragICC_0001 _XmCatgets(Xm_catd, MS_DragICC, MSG_DragICC_0001, _XmMsgDragICC_0001) +#define _XmMMsgDragIcon_0000 _XmCatgets(Xm_catd, MS_DragIcon, MSG_DragIcon_0000, _XmMsgDragIcon_0000) +#define _XmMMsgDragIcon_0001 _XmCatgets(Xm_catd, MS_DragIcon, MSG_DragIcon_0001, _XmMsgDragIcon_0001) +#define _XmMMsgDragOverS_0000 _XmCatgets(Xm_catd, MS_DragOverS, MSG_DragOverS_0000, _XmMsgDragOverS_0000) +#define _XmMMsgDragOverS_0001 _XmCatgets(Xm_catd, MS_DragOverS, MSG_DragOverS_0001, _XmMsgDragOverS_0001) +#define _XmMMsgDragOverS_0002 _XmCatgets(Xm_catd, MS_DragOverS, MSG_DragOverS_0002, _XmMsgDragOverS_0002) +#define _XmMMsgDragOverS_0003 _XmCatgets(Xm_catd, MS_DragOverS, MSG_DragOverS_0003, _XmMsgDragOverS_0003) +#define _XmMMsgDragUnder_0000 _XmCatgets(Xm_catd, MS_DragUnder, MSG_DragUnder_0000, _XmMsgDragUnder_0000) +#define _XmMMsgDragUnder_0001 _XmCatgets(Xm_catd, MS_DragUnder, MSG_DragUnder_0001, _XmMsgDragUnder_0001) +#define _XmMMsgDropSMgr_0001 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0001, _XmMsgDropSMgr_0001) +#define _XmMMsgDropSMgr_0002 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0002, _XmMsgDropSMgr_0002) +#define _XmMMsgDropSMgr_0003 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0003, _XmMsgDropSMgr_0003) +#define _XmMMsgDropSMgr_0004 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0004, _XmMsgDropSMgr_0004) +#define _XmMMsgDropSMgr_0005 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0005, _XmMsgDropSMgr_0005) +#define _XmMMsgDropSMgr_0006 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0006, _XmMsgDropSMgr_0006) +#define _XmMMsgDropSMgr_0007 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0007, _XmMsgDropSMgr_0007) +#define _XmMMsgDropSMgr_0008 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0008, _XmMsgDropSMgr_0008) +#define _XmMMsgDropSMgr_0009 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0009, _XmMsgDropSMgr_0009) +#define _XmMMsgDropSMgr_0010 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgr_0010, _XmMsgDropSMgr_0010) +#define _XmMMsgDropSMgrI_0001 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgrI_0001, _XmMsgDropSMgrI_0001) +#define _XmMMsgDropSMgrI_0002 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgrI_0002, _XmMsgDropSMgrI_0002) +#define _XmMMsgDropSMgrI_0003 _XmCatgets(Xm_catd, MS_DropSMgr, MSG_DropSMgrI_0003, _XmMsgDropSMgrI_0003) +#define _XmMMsgRegion_0000 _XmCatgets(Xm_catd, MS_Region, MSG_Region_0000, _XmMsgRegion_0000) +#define _XmMMsgRepType_0001 _XmCatgets(Xm_catd, MS_RepType, MSG_RepType_0001, _XmMsgRepType_0001) +#define _XmMMsgRepType_0002 _XmCatgets(Xm_catd, MS_RepType, MSG_RepType_0002, _XmMsgRepType_0002) +#define _XmMMsgRepType_0000 _XmCatgets(Xm_catd, MS_RepType, MSG_RepType_0000, _XmMsgRepType_0000) +#define _XmMMsgResConvert_0001 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0001, _XmMsgResConvert_0001) +#define _XmMMsgResConvert_0002 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0002, _XmMsgResConvert_0002) +#define _XmMMsgResConvert_0003 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0003, _XmMsgResConvert_0003) +#define _XmMMsgResConvert_0005 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0005, _XmMsgResConvert_0005) +#define _XmMMsgResConvert_0006 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0006, _XmMsgResConvert_0006) +#define _XmMMsgResConvert_0007 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0007, _XmMsgResConvert_0007) +#define _XmMMsgResConvert_0008 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0008, _XmMsgResConvert_0008) +#define _XmMMsgResConvert_0009 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0009, _XmMsgResConvert_0009) +#define _XmMMsgResConvert_0010 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0010, _XmMsgResConvert_0010) +#define _XmMMsgResConvert_0011 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0011, _XmMsgResConvert_0011) +#define _XmMMsgResConvert_0012 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0012, _XmMsgResConvert_0012) +#define _XmMMsgResConvert_0013 _XmCatgets(Xm_catd, MS_ResConvert, MSG_ResConvert_0013, _XmMsgResConvert_0013) +#define _XmMMsgScreen_0000 _XmCatgets(Xm_catd, MS_Screen, MSG_Screen_0000, _XmMsgScreen_0000) +#define _XmMMsgScreen_0001 _XmCatgets(Xm_catd, MS_Screen, MSG_Screen_0001, _XmMsgScreen_0001) +#define _XmMMsgColObj_0001 _XmCatgets(Xm_catd, MS_ColObj, MSG_ColObj_0001, _XmMsgColObj_0001) +#define _XmMMsgColObj_0002 _XmCatgets(Xm_catd, MS_ColObj, MSG_ColObj_0002, _XmMsgColObj_0002) +#define _XmMMsgComboBox_0000 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0000, _XmMsgComboBox_0000) +#define _XmMMsgComboBox_0001 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0001, _XmMsgComboBox_0001) +#define _XmMMsgComboBox_0004 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0004, _XmMsgComboBox_0004) +#define _XmMMsgComboBox_0005 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0005, _XmMsgComboBox_0005) +#define _XmMMsgComboBox_0006 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0006, _XmMsgComboBox_0006) +#define _XmMMsgComboBox_0007 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0007, _XmMsgComboBox_0007) +#define _XmMMsgComboBox_0008 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0008, _XmMsgComboBox_0008) +#define _XmMMsgComboBox_0009 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0009, _XmMsgComboBox_0009) +#define _XmMMsgComboBox_0010 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0010, _XmMsgComboBox_0010) +#define _XmMMsgComboBox_0011 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0011, _XmMsgComboBox_0011) +#define _XmMMsgComboBox_0012 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0012, _XmMsgComboBox_0012) +#define _XmMMsgComboBox_0013 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0013, _XmMsgComboBox_0013) +#define _XmMMsgComboBox_0014 _XmCatgets(Xm_catd, MS_ComboBox, MSG_ComboBox_0014, _XmMsgComboBox_0014) +#define _XmMMsgContainer_0000 _XmCatgets(Xm_catd, MS_Container, MSG_Container_0000, _XmMsgContainer_0000) +#define _XmMMsgContainer_0001 _XmCatgets(Xm_catd, MS_Container, MSG_Container_0001, _XmMsgContainer_0001) +#define _XmMMsgManager_0000 _XmCatgets(Xm_catd, MS_Manager, MSG_Manager_0000, _XmMsgManager_0000) +#define _XmMMsgManager_0001 _XmCatgets(Xm_catd, MS_Manager, MSG_Manager_0001, _XmMsgManager_0001) +#define _XmMMsgNotebook_0000 _XmCatgets(Xm_catd, MS_Notebook, MSG_Notebook_0000, _XmMsgNotebook_0000) +#define _XmMMsgPixConv_0000 _XmCatgets(Xm_catd, MS_PixConv, MSG_PixConv_0000, _XmMsgPixConv_0000) +#define _XmMMsgPrimitive_0000 _XmCatgets(Xm_catd, MS_Primitive, MSG_Primitive_0000, _XmMsgPrimitive_0000) +#define _XmMMsgScrollFrameT_0000 _XmCatgets(Xm_catd, MS_ScrollFrameT, MSG_ScrollFrameT_0000, _XmMsgScrollFrameT_0000) +#define _XmMMsgScrollFrameT_0001 _XmCatgets(Xm_catd, MS_ScrollFrameT, MSG_ScrollFrameT_0001, _XmMsgScrollFrameT_0001) +#define _XmMMsgSpinB_0003 _XmCatgets(Xm_catd, MS_SpinB, MSG_SpinB_0003, _XmMsgSpinB_0003) +#define _XmMMsgSpinB_0004 _XmCatgets(Xm_catd, MS_SpinB, MSG_SpinB_0004, _XmMsgSpinB_0004) +#define _XmMMsgSpinB_0005 _XmCatgets(Xm_catd, MS_SpinB, MSG_SpinB_0005, _XmMsgSpinB_0005) +#define _XmMMsgSpinB_0006 _XmCatgets(Xm_catd, MS_SpinB, MSG_SpinB_0006, _XmMsgSpinB_0006) +#define _XmMMsgSpinB_0007 _XmCatgets(Xm_catd, MS_SpinB, MSG_SpinB_0007, _XmMsgSpinB_0007) +#define _XmMMsgSpinB_0008 _XmCatgets(Xm_catd, MS_SpinB, MSG_SpinB_0008, _XmMsgSpinB_0008) +#define _XmMMsgTransfer_0000 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0000, _XmMsgTransfer_0000) +#define _XmMMsgTransfer_0002 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0002, _XmMsgTransfer_0002) +#define _XmMMsgTransfer_0003 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0003, _XmMsgTransfer_0003) +#define _XmMMsgTransfer_0004 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0004, _XmMsgTransfer_0004) +#define _XmMMsgTransfer_0005 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0005, _XmMsgTransfer_0005) +#define _XmMMsgTransfer_0006 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0006, _XmMsgTransfer_0006) +#define _XmMMsgTransfer_0007 _XmCatgets(Xm_catd, MS_Transfer, MSG_Transfer_0007, _XmMsgTransfer_0007) +#define _XmMMsgVaSimple_0000 _XmCatgets(Xm_catd, MS_VaSimple, MSG_VaSimple_0000, _XmMsgVaSimple_0000) +#define _XmMMsgVaSimple_0001 _XmCatgets(Xm_catd, MS_VaSimple, MSG_VaSimple_0001, _XmMsgVaSimple_0001) +#define _XmMMsgVaSimple_0002 _XmCatgets(Xm_catd, MS_VaSimple, MSG_VaSimple_0002, _XmMsgVaSimple_0002) +#define _XmMMsgMotif_0000 _XmCatgets(Xm_catd, MS_Xm, MSG_Motif_0000, _XmMsgMotif_0000) +#define _XmMMsgMotif_0001 _XmCatgets(Xm_catd, MS_Xm, MSG_Motif_0001, _XmMsgMotif_0001) +#define _XmMMsgXmRenderT_0000 _XmCatgets(Xm_catd, MS_XmRenderT, MSG_XmRenderT_0000, _XmMsgXmRenderT_0000) +#define _XmMMsgXmRenderT_0001 _XmCatgets(Xm_catd, MS_XmRenderT, MSG_XmRenderT_0001, _XmMsgXmRenderT_0001) +#define _XmMMsgXmRenderT_0002 _XmCatgets(Xm_catd, MS_XmRenderT, MSG_XmRenderT_0002, _XmMsgXmRenderT_0002) +#define _XmMMsgXmRenderT_0003 _XmCatgets(Xm_catd, MS_XmRenderT, MSG_XmRenderT_0003, _XmMsgXmRenderT_0003) +#define _XmMMsgXmRenderT_0004 _XmCatgets(Xm_catd, MS_XmRenderT, MSG_XmRenderT_0004, _XmMsgXmRenderT_0004) +#define _XmMMsgXmRenderT_0005 _XmCatgets(Xm_catd, MS_XmRenderT, MSG_XmRenderT_0005, _XmMsgXmRenderT_0005) +#define _XmMMsgXmString_0000 _XmCatgets(Xm_catd, MS_XmString, MSG_XmString_0000, _XmMsgXmString_0000) +#define _XmMMsgXmTabList_0000 _XmCatgets(Xm_catd, MS_XmTabList, MSG_XmTabList_0000, _XmMsgXmTabList_0000) +#define _XmMMsgSSpinB_0001 _XmCatgets(Xm_catd, MS_SSpinB, MSG_SSpinB_0001, _XmMsgSSpinB_0001) +#define _XmMMsgSSpinB_0002 _XmCatgets(Xm_catd, MS_SSpinB, MSG_SSpinB_0002, _XmMsgSSpinB_0002) +#define _XmMMsgSSpinB_0003 _XmCatgets(Xm_catd, MS_SSpinB, MSG_SSpinB_0003, _XmMsgSSpinB_0003) +#define _XmMMsgDataF_0000 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0000, _XmMsgDataF_0000) +#define _XmMMsgDataF_0001 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0001, _XmMsgDataF_0001) +#define _XmMMsgDataF_0002 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0002, _XmMsgDataF_0002) +#define _XmMMsgDataF_0003 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0003, _XmMsgDataF_0003) +#define _XmMMsgDataF_0004 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0004, _XmMsgDataF_0004) +#define _XmMMsgDataF_0005 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0005, _XmMsgDataF_0005) +#define _XmMMsgDataF_0006 _XmCatgets(Xm_catd, MS_DataF, MSG_DataF_0006, _XmMsgDataF_0006) +#define _XmMMsgDataFWcs_0000 _XmCatgets(Xm_catd, MS_DataFWcs, MSG_DatFWcs_0000, _XmMsgDataFWcs_0000) +#define _XmMMsgDataFWcs_0001 _XmCatgets(Xm_catd, MS_DataFWcs, MSG_DataFWcs_0001, _XmMsgDataFWcs_0001) diff --git a/libXm/osx/Xm/XmP.h b/libXm/osx/Xm/XmP.h new file mode 100644 index 0000000..f9ea32b --- /dev/null +++ b/libXm/osx/Xm/XmP.h @@ -0,0 +1,1467 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: XmP.h /main/23 1997/09/15 14:22:29 cshi $ */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ + +/************************************<+>************************************* + **************************************************************************** + ** + ** File: XmP.h + ** + ** Description: This include file contains the class and instance record + ** definitions for all meta classes. It also contains externs + ** for internally shared functions and defines for internally + ** shared values. + ** + **************************************************************************** + ************************************<+>*************************************/ +#ifndef _XmP_h +#define _XmP_h + +#include +#include +#include +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/*************************************************************************** + * + * Macros replacing toolkit macros so that gadgets are handled properly. + * + ***************************************************************************/ + +/* Temporary hack until we can clean up our own code. ??? */ +#ifndef NO_XM_1_2_XTMACROS +#define XM_1_2_XTMACROS 1 +#endif + +#ifdef XM_1_2_XTMACROS + +/* XtClass is a macro in IntrinsicP.h, but it does no casting + so removing this one would certainly generate warnings everywhere, + we can keep it */ +#ifdef XtClass +#undef XtClass +#endif +#define XtClass(widget) (((Object)(widget))->object.widget_class) + + +/* Exist in IntrinsicP.h, but does no casting, so removing this + one will probably generate a lot of warnings */ +#ifdef XtParent +#undef XtParent +#endif +#define XtParent(widget) (((Object)(widget))->object.parent) + + +/* The following routines exist in Xt, but do not accept Gadgets. */ + +#ifdef XtDisplay +#undef XtDisplay +#endif +#define XtDisplay(widget) XtDisplayOfObject((Widget) widget) + +#ifdef XtScreen +#undef XtScreen +#endif +#define XtScreen(widget) XtScreenOfObject((Widget) widget) + +#ifdef XtWindow +#undef XtWindow +#endif +#define XtWindow(widget) XtWindowOfObject((Widget) widget) + + +/* The following macros are not provided by Xt */ +#define XtX(w) ((w)->core.x) +#define XtY(w) ((w)->core.y) +#define XtWidth(w) ((w)->core.width) +#define XtHeight(w) ((w)->core.height) +#define XtBorderWidth(w) ((w)->core.border_width) +#define XtBackground(w) ((w)->core.background_pixel) +#define XtCoreProc(w,proc) ((w)->core.widget_class->core_class.proc) + +#endif /* XM_1_2_XTMACROS */ + + +/*********************************************************************** + * + * Miscellaneous SemiPrivate Defines + * + ***********************************************************************/ + +/* new for the initialized gadget checking */ +#define XmNdotCache ".cache" +#define XmCDotCache ".Cache" + +#define XmDELAYED_PIXMAP (XmUNSPECIFIED_PIXMAP - 1) + +#define XmUNSPECIFIED (~0) +#define XmUNSPECIFIED_COUNT (~0) + + +/* Used by conversion routine in ResConvert.c, RepType.c, IconG.c, etc */ + +#define _XM_CONVERTER_DONE( to_rtn, type, value, failure ) \ + { \ + static type buf ; \ + \ + if (to_rtn->addr) \ + { \ + if (to_rtn->size < sizeof(type)) \ + { \ + failure \ + to_rtn->size = sizeof(type); \ + return FALSE; \ + } \ + else \ + { \ + *((type *) (to_rtn->addr)) = value; \ + } \ + } \ + else \ + { \ + buf = value; \ + to_rtn->addr = (XPointer) &buf; \ + } \ + to_rtn->size = sizeof(type); \ + return TRUE; \ + } + + + +/* defines needed for 3D visual enhancement of defaultButtonshadow and + * implementation of ToggleButton Indicatorsize. **/ + +#define Xm3D_ENHANCE_PIXEL 2 +#define XmINDICATOR_SHADOW_THICKNESS 2 + +#define XmINVALID_DIMENSION 0xFFFF + +/*********************************************************************** + * + * Const stuff + * + ***********************************************************************/ + +#ifndef XmConst +#if defined(__STDC__) || !defined( NO_CONST ) +#define XmConst const +#else +#define XmConst +#endif /* __STDC__ */ +#endif /* XmConst */ + + +/*********************************************************************** + * + * Status for menus + * + ***********************************************************************/ + +/* Defines used for menu/button communication */ +enum{ XmMENU_POPDOWN, XmMENU_PROCESS_TREE, + XmMENU_TRAVERSAL, XmMENU_SHELL_POPDOWN, + XmMENU_CALLBACK, XmMENU_BUTTON, + XmMENU_CASCADING, XmMENU_SUBMENU, + XmMENU_ARM, XmMENU_DISARM, + XmMENU_BAR_CLEANUP, XmMENU_STATUS, + XmMENU_MEMWIDGET_UPDATE, XmMENU_BUTTON_POPDOWN, + XmMENU_RESTORE_EXCLUDED_TEAROFF_TO_TOPLEVEL_SHELL, + XmMENU_RESTORE_TEAROFF_TO_TOPLEVEL_SHELL, + XmMENU_RESTORE_TEAROFF_TO_MENUSHELL, + XmMENU_GET_LAST_SELECT_TOPLEVEL, + XmMENU_TEAR_OFF_ARM + } ; + + + +#define XmMENU_TORN_BIT (1 << 0) +#define XmMENU_TEAR_OFF_SHELL_DESCENDANT_BIT (1 << 1) +#define XmMENU_POPUP_POSTED_BIT (1 << 2) +#define XmMENU_IN_DRAG_MODE_BIT (1 << 3) + +#define XmIsTorn(mask) \ + (mask & XmMENU_TORN_BIT) +#define XmIsTearOffShellDescendant(mask) \ + (mask & XmMENU_TEAR_OFF_SHELL_DESCENDANT_BIT) +#define XmPopupPosted(mask) \ + (mask & XmMENU_POPUP_POSTED_BIT) +#define XmIsInDragMode(mask) \ + (mask & XmMENU_IN_DRAG_MODE_BIT) + +typedef void (*XmMenuProc)( int, Widget, ...) ; + +/*********************************************************************** + * + * Simple Menu Structure + * + ***********************************************************************/ + +typedef struct _XmSimpleMenuRec { + int count; + int post_from_button; + XtCallbackProc callback; + XmStringTable label_string; + String *accelerator; + XmStringTable accelerator_text; + XmKeySymTable mnemonic; + XmStringCharSetTable mnemonic_charset; + XmButtonTypeTable button_type; + int button_set; + XmString option_label; + KeySym option_mnemonic; +} XmSimpleMenuRec, * XmSimpleMenu; + + +/* For MapEvent: _XmMatchBtnEvent */ +#define XmIGNORE_EVENTTYPE -1 + +/* Default minimum Toggle indicator dimension */ +#define XmDEFAULT_INDICATOR_DIM 9 + + + + + +/************************************************************************ + * + * SyntheticP.h + * + ************************************************************************/ + +typedef enum{ XmSYNTHETIC_NONE, XmSYNTHETIC_LOAD } XmImportOperator ; + +typedef void (*XmExportProc)( Widget, int, XtArgVal *) ; +typedef XmImportOperator (*XmImportProc)( Widget, int, XtArgVal *) ; + +typedef struct _XmSyntheticResource +{ + String resource_name; + Cardinal resource_size; + Cardinal resource_offset; + XmExportProc export_proc; + XmImportProc import_proc; +} XmSyntheticResource; + + + +/*********************************************************************** + * + * ParProcP.h + * + ***********************************************************************/ + + +typedef struct +{ + int process_type ; /* Common to all parent process records. */ + } XmParentProcessAnyRec ; + +typedef struct +{ + int process_type ; /* Common to all parent process records. */ + XEvent * event ; + int action ; + String * params ; + Cardinal * num_params ; +} XmParentInputActionRec ; + +typedef union +{ + XmParentProcessAnyRec any ; + XmParentInputActionRec input_action ; +} XmParentProcessDataRec, * XmParentProcessData ; + +enum{ XmPARENT_PROCESS_ANY, XmINPUT_ACTION + } ; +enum{ XmPARENT_ACTIVATE, XmPARENT_CANCEL + } ; +#define XmRETURN XmPARENT_ACTIVATE /* For Motif 1.1 BC. */ +#define XmCANCEL XmPARENT_CANCEL /* For Motif 1.1 BC. */ + + +/*********************************************************************** + * + * BaselineP.h + * + ***********************************************************************/ + +enum{ XmBASELINE_GET, XmBASELINE_SET + } ; + +typedef struct _XmBaselineMargins +{ + unsigned char get_or_set; + Dimension margin_top; + Dimension margin_bottom; + Dimension shadow; + Dimension highlight; + Dimension text_height; + Dimension margin_height; +} XmBaselineMargins; + + +typedef enum{ XmFOCUS_IN, XmFOCUS_OUT, XmENTER, XmLEAVE } XmFocusChange ; + +typedef enum{ + XmNOT_NAVIGABLE, XmCONTROL_NAVIGABLE, + XmTAB_NAVIGABLE, XmDESCENDANTS_NAVIGABLE, + XmDESCENDANTS_TAB_NAVIGABLE + } XmNavigability ; + +/*********************************************************************** + * + * Various proc types + * + ***********************************************************************/ + +#define XmVoidProc XtProc + + +typedef Boolean (*XmParentProcessProc)( Widget, XmParentProcessData) ; +typedef void (*XmWidgetDispatchProc)( Widget, XEvent *, Mask) ; +typedef void (*XmGrabShellPopupProc)( Widget, Widget, XEvent *) ; +typedef void (*XmMenuPopupProc)( Widget, Widget, XEvent *) ; +typedef void (*XmMenuTraversalProc)( Widget, Widget, XmTraversalDirection) ; +typedef void (*XmResizeFlagProc)( + Widget, +#if NeedWidePrototypes + int) ; +#else + Boolean) ; +#endif /* NeedWidePrototypes */ +typedef void (*XmRealizeOutProc)( Widget, Mask *, XSetWindowAttributes *) ; +typedef Boolean (*XmVisualChangeProc)( Widget, Widget, Widget) ; +typedef void (*XmTraversalProc)( Widget, XtPointer, XtPointer, int) ; +typedef void (*XmFocusMovedProc)( Widget, XtPointer, XtPointer) ; +typedef void (*XmCacheCopyProc)( XtPointer, XtPointer, size_t) ; +typedef void (*XmGadgetCacheProc)( XtPointer) ; +typedef int (*XmCacheCompareProc)( XtPointer, XtPointer) ; +typedef Boolean (*XmWidgetBaselineProc)(Widget, Dimension **, int *); +typedef Boolean (*XmWidgetDisplayRectProc)(Widget, XRectangle *); +typedef void (*XmWidgetMarginsProc)(Widget, XmBaselineMargins *); +typedef XmNavigability (*XmWidgetNavigableProc)( Widget) ; +typedef void (*XmFocusChangeProc)(Widget, XmFocusChange); +typedef Boolean (*XmSpatialPlacementProc)(Widget, Widget, unsigned char); +typedef Boolean (*XmSpatialRemoveProc)(Widget, Widget); +typedef Boolean (*XmSpatialTestFitProc)(Widget, Widget, Position, Position); + + +/**************** + * + * Data structure for building a real translation table out of a + * virtual string. + * + ****************/ + +typedef struct { + Modifiers mod; + char *key; + char *action; +} _XmBuildVirtualKeyStruct; + +typedef struct _XmKeyBindingRec +{ + KeySym keysym; + Modifiers modifiers; +} XmKeyBindingRec, *XmKeyBinding; + + +/*********************************************************************** + * + * Types shared by text widgets + * + ***********************************************************************/ + +typedef enum { XmsdLeft, XmsdRight } XmTextScanDirection; + + +/* + * This struct is for support of Insert Selection targets. + */ +typedef struct { + Atom selection; + Atom target; +} _XmTextInsertPair; + +typedef struct { + XmTextPosition position; /* Starting position. */ + XmHighlightMode mode; /* Highlighting mode for this position. */ +} _XmHighlightRec; + +typedef struct { + Cardinal number; /* Number of different highlight areas. */ + Cardinal maximum; /* Number we've allocated space for. */ + _XmHighlightRec *list; /* Pointer to array of highlight data. */ +} _XmHighlightData; + +typedef enum { XmDEST_SELECT, XmPRIM_SELECT } XmSelectType; + +typedef struct { + Boolean done_status; /* completion status of insert selection */ + Boolean success_status; /* success status of insert selection */ + XmSelectType select_type; /* insert selection type */ + XSelectionRequestEvent *event; /* event that initiated the + insert selection */ +} _XmInsertSelect; + +typedef struct { + XEvent *event; + String *params; + Cardinal *num_params; +} _XmTextActionRec; + +typedef struct { + Widget widget; + XmTextPosition insert_pos; + int num_chars; + Time timestamp; + Boolean move; +} _XmTextDropTransferRec; + +typedef struct { + XmTextPosition position; + Atom target; + Time time; + int num_chars; + int ref_count; +} _XmTextPrimSelect; + +typedef struct { + Screen *screen; + XContext context; + unsigned char type; +} XmTextContextDataRec, *XmTextContextData; + +enum {_XM_IS_DEST_CTX, _XM_IS_GC_DATA_CTX, _XM_IS_PIXMAP_CTX}; + +#define XmTEXT_DRAG_ICON_WIDTH 64 +#define XmTEXT_DRAG_ICON_HEIGHT 64 +#define XmTEXT_DRAG_ICON_X_HOT 10 +#define XmTEXT_DRAG_ICON_Y_HOT 4 + + +/*********************************************************************** + * + * GeoUtilsP.h + * + ***********************************************************************/ + +/* Defines used by geometry manager utilities */ + +enum{ XmGET_ACTUAL_SIZE = 1, XmGET_PREFERRED_SIZE, + XmGEO_PRE_SET, XmGEO_POST_SET + } ; + +/* Defaults for Geometry Utility defines are always 0. */ +enum{ XmGEO_EXPAND, XmGEO_CENTER, + XmGEO_PACK + } ; +enum{ XmGEO_PROPORTIONAL, XmGEO_AVERAGING, + XmGEO_WRAP + } ; +enum{ XmGEO_ROW_MAJOR, XmGEO_COLUMN_MAJOR + } ; +/* XmGEO_COLUMN_MAJOR is not yet supported. */ + + +typedef struct _XmGeoMatrixRec *XmGeoMatrix ; +typedef union _XmGeoMajorLayoutRec *XmGeoMajorLayout ; +typedef struct _XmKidGeometryRec +{ + Widget kid; /* ptr to kid */ + XtWidgetGeometry box; /* kid geo box */ +} XmKidGeometryRec, *XmKidGeometry; + +typedef void (*XmGeoArrangeProc)( XmGeoMatrix, +#if NeedWidePrototypes + int, int, +#else + Position, Position, +#endif /* NeedWidePrototypes */ + Dimension *, Dimension *) ; +typedef Boolean (*XmGeoExceptProc)( XmGeoMatrix ) ; +typedef void (*XmGeoExtDestructorProc)( XtPointer ) ; +typedef void (*XmGeoSegmentFixUpProc)( XmGeoMatrix, int, XmGeoMajorLayout, + XmKidGeometry) ; + +typedef struct +{ Boolean end ; /* Flag to mark end of rows. */ + XmGeoSegmentFixUpProc fix_up ;/* Used for non-ordinary layouts. */ + Dimension even_width ; /* If non-zero, set all boxes to same width.*/ + Dimension even_height ;/* If non-zero, set all boxes to same height*/ + Dimension min_height ; /* Minimum height, if stretch_height TRUE. */ + Boolean stretch_height ;/* Stretch height to fill vertically. */ + Boolean uniform_border ;/* Enforce on all kids this row, dflt F. */ + Dimension border ; /* Value to use if uniform_border set. */ + unsigned char fill_mode ; /* Possible values: XmGEO_PACK, XmGEO_CENTER,*/ + /* or XmGEO_EXPAND (default). */ + unsigned char fit_mode ; /* Method for fitting boxes into space, */ + /* XmGEO_PROPORTIONAL (dflt), XmGEO_AVERAGING, or XmGEO_WRAP.*/ + Boolean sticky_end ; /* Last box in row sticks to edge, dflt F. */ + Dimension space_above ; /* Between-line spacing, default 0. */ + Dimension space_end ; /* End spacing (XmGEO_CENTER), default 0. */ + Dimension space_between ; /* Internal spacing, default 0. */ + Dimension max_box_height ;/* Set during arrange routine. */ + Dimension boxes_width ; /* Set during arrange routine. */ + Dimension fill_width ; /* Set during arrange routine. */ + Dimension box_count ; /* Set during arrange routine. */ + } XmGeoRowLayoutRec, *XmGeoRowLayout ; + +typedef struct +{ Boolean end ; /* Flag to mark end of columns. */ + XmGeoSegmentFixUpProc fix_up ;/* Used for non-ordinary layouts. */ + Dimension even_height ;/* If non-zero, set all boxes to same height*/ + Dimension even_width ; /* If non-zero, set all boxes to same width.*/ + Dimension min_width ; /* Minimum width, if stretch_width TRUE. */ + Boolean stretch_width ;/* Stretch width to fill horizontally. */ + Boolean uniform_border ;/* Enforce on all kids this row, dflt F. */ + Dimension border ; /* Value to use if uniform_border set. */ + unsigned char fill_mode ; /* Possible values: XmGEO_PACK, XmGEO_CENTER,*/ + /* or XmGEO_EXPAND (default). */ + unsigned char fit_mode ; /* Method for fitting boxes into space, */ + /* XmGEO_PROPORTIONAL (dflt), XmGEO_AVERAGING, or XmGEO_WRAP.*/ + Boolean sticky_end ; /* Last box in row sticks to edge, dflt F. */ + Dimension space_left ; /* Between-column spacing, default 0. */ + Dimension space_end ; /* End spacing (XmGEO_CENTER), default 0. */ + Dimension space_between ; /* Internal spacing, default 0. */ + Dimension max_box_width ; /* Set during arrange routine. */ + Dimension boxes_height ; /* Set during arrange routine. */ + Dimension fill_height ; /* Set during arrange routine. */ + Dimension box_count ; /* Set during arrange routine. */ + } XmGeoColumnLayoutRec, *XmGeoColumnLayout ; + +typedef union _XmGeoMajorLayoutRec +{ + XmGeoRowLayoutRec row ; + XmGeoColumnLayoutRec col ; +} XmGeoMajorLayoutRec ; + +typedef struct _XmGeoMatrixRec +{ Widget composite ; /* Widget managing layout. */ + Widget instigator ; /* Widget initiating re-layout. */ + XtWidgetGeometry instig_request ;/* Geometry layout request of instigatr.*/ + XtWidgetGeometry parent_request ;/* Subsequent layout request to parent. */ + XtWidgetGeometry *in_layout ; /* Geo. of instig. in layout (after Get).*/ + XmKidGeometry boxes ;/* Array of boxes, lines separated by NULL record.*/ + XmGeoMajorLayout layouts ; /* Array of major_order format info. */ + Dimension margin_w ;/*Sum of margin, highlight, & shadow thickness.*/ + Dimension margin_h ;/*Sum of margin, highlight, & shadow thickness.*/ + Boolean stretch_boxes ; /* Set during arrange routine. */ + Boolean uniform_border ;/* Enforce on all kids, default FALSE. */ + Dimension border ; /* Value to use if uniform_border TRUE. */ + Dimension max_major ; /* Set during arrange routine. */ + Dimension boxes_minor ; /* Set during arrange routine. */ + Dimension fill_minor ; /* Set during arrange routine. */ + Dimension width ; /* Set during arrange routine. */ + Dimension height ; /* Set during arrange routine. */ + XmGeoExceptProc set_except ; + XmGeoExceptProc almost_except ; + XmGeoExceptProc no_geo_request ; + XtPointer extension ; + XmGeoExtDestructorProc ext_destructor ; + XmGeoArrangeProc arrange_boxes ;/* For user-defined arrangement routine. */ + unsigned char major_order ; + } XmGeoMatrixRec; + +typedef XmGeoMatrix (*XmGeoCreateProc)( Widget, Widget, XtWidgetGeometry *) ; + +/*********************************************************************** + * + * XmInheritP.h + * + ***********************************************************************/ + +#define XmInheritCallbackProc ((XtCallbackProc) _XtInherit) +#define XmInheritTraversalProc ((XmTraversalProc) _XtInherit) +#define XmInheritParentProcess ((XmParentProcessProc) _XtInherit) +#define XmInheritWidgetProc ((XtWidgetProc) _XtInherit) +#define XmInheritMenuProc ((XmMenuProc) _XtInherit) +#define XmInheritTranslations XtInheritTranslations +#define XmInheritCachePart ((XmCacheClassPartPtr) _XtInherit) +#define XmInheritBaselineProc ((XmWidgetBaselineProc) _XtInherit) +#define XmInheritDisplayRectProc ((XmWidgetDisplayRectProc) _XtInherit) +#define XmInheritMarginsProc ((XmWidgetMarginsProc) _XtInherit) +#define XmInheritGeoMatrixCreate ((XmGeoCreateProc) _XtInherit) +#define XmInheritFocusMovedProc ((XmFocusMovedProc) _XtInherit) +#define XmInheritClass ((WidgetClass) &_XmInheritClass) +#define XmInheritInitializePrehook ((XtInitProc) _XtInherit) +#define XmInheritSetValuesPrehook ((XtSetValuesFunc) _XtInherit) +#define XmInheritGetValuesPrehook ((XtArgsProc) _XtInherit) +#define XmInheritInitializePosthook ((XtInitProc) _XtInherit) +#define XmInheritSetValuesPosthook ((XtSetValuesFunc) _XtInherit) +#define XmInheritGetValuesPosthook ((XtArgsProc) _XtInherit) +#define XmInheritSecObjectCreate ((XtInitProc) _XtInherit) +#define XmInheritGetSecResData ((XmGetSecResDataFunc) _XtInherit) +#define XmInheritInputDispatch ((XmWidgetDispatchProc) _XtInherit) +#define XmInheritVisualChange ((XmVisualChangeProc) _XtInherit) +#define XmInheritArmAndActivate ((XtActionProc) _XtInherit) +#define XmInheritActionProc ((XtActionProc) _XtInherit) +#define XmInheritFocusChange ((XmFocusChangeProc) _XtInherit) +#define XmInheritWidgetNavigable ((XmWidgetNavigableProc) _XtInherit) +#define XmInheritClassPartInitPrehook ((XtWidgetClassProc) _XtInherit) +#define XmInheritClassPartInitPosthook ((XtWidgetClassProc) _XtInherit) +#define XmInheritBorderHighlight ((XtWidgetProc) _XtInherit) +#define XmInheritBorderUnhighlight ((XtWidgetProc) _XtInherit) + + +/************************************************************************ + * + * Fast subclassing macros and definitions + * + ************************************************************************/ +/* WARNING: Application subclasses which choose to use fast + * subclassing must use only those bits between + * 192 (XmFIRST_APPLICATION_SUBCLASS_BIT) and 255. + * All other fast subclass bits are reserved for + * future use. Use of reserved fast subclass bits + * will cause binary compatibility breaks with + * future Motif versions. + */ +#define XmFIRST_APPLICATION_SUBCLASS_BIT 192 + +enum{ XmCASCADE_BUTTON_BIT = 1, XmCASCADE_BUTTON_GADGET_BIT, + XmCOMMAND_BOX_BIT, XmDIALOG_SHELL_BIT, + XmLIST_BIT, XmFORM_BIT, + XmTEXT_FIELD_BIT, XmGADGET_BIT, + XmLABEL_BIT, XmLABEL_GADGET_BIT, + XmMAIN_WINDOW_BIT, XmMANAGER_BIT, + XmMENU_SHELL_BIT, XmDRAWN_BUTTON_BIT, + XmPRIMITIVE_BIT, XmPUSH_BUTTON_BIT, + XmPUSH_BUTTON_GADGET_BIT, XmROW_COLUMN_BIT, + XmSCROLL_BAR_BIT, XmSCROLLED_WINDOW_BIT, + XmSELECTION_BOX_BIT, XmSEPARATOR_BIT, + XmSEPARATOR_GADGET_BIT, XmTEXT_BIT, + XmTOGGLE_BUTTON_BIT, XmTOGGLE_BUTTON_GADGET_BIT, + XmDROP_TRANSFER_BIT, XmDROP_SITE_MANAGER_BIT, + XmDISPLAY_BIT, XmSCREEN_BIT, + XmPRINT_SHELL_BIT, XmARROW_BUTTON_BIT, + XmARROW_BUTTON_GADGET_BIT, XmBULLETIN_BOARD_BIT, + XmDRAWING_AREA_BIT, XmFILE_SELECTION_BOX_BIT, + XmFRAME_BIT, XmMESSAGE_BOX_BIT, + XmSASH_BIT, XmSCALE_BIT, + XmPANED_WINDOW_BIT, XmVENDOR_SHELL_BIT, + XmCLIP_WINDOW_BIT, XmDRAG_ICON_BIT, + XmTEAROFF_BUTTON_BIT, XmDRAG_OVER_SHELL_BIT, + XmDRAG_CONTEXT_BIT, XmCONTAINER_BIT, + XmICONGADGET_BIT, XmNOTEBOOK_BIT, + XmCSTEXT_BIT, XmGRAB_SHELL_BIT, + XmCOMBO_BOX_BIT, XmSPINBOX_BIT, + XmICONHEADER_BIT, + + XmBUTTONBOX_BIT, + XmDATAFIELD_BIT, + XmI18LIST_BIT, + XmEXT18LIST_BIT, + XmMULTI_LIST_BIT = XmEXT18LIST_BIT, + XmCOLORSELECTOR_BIT, + XmICONBOX_BIT, + XmICONBUTTON_BIT, + XmTABLE_BIT, + XmTABSTACK_BIT, + XmTREE_BIT, + XmTABBOX_BIT, + XmCOLUMN_BIT, + XmFONTSELECTOR_BIT, + XmCOMBINATION_BOX_2_BIT, + XmDROP_DOWN_BIT = XmCOMBINATION_BOX_2_BIT, + + XmFAST_SUBCLASS_TAIL_BIT /* New entries precede this. */ + } ; + +#define XmLAST_FAST_SUBCLASS_BIT (XmFAST_SUBCLASS_TAIL_BIT - 1) + + +#undef XmIsCascadeButton +#define XmIsCascadeButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmCASCADE_BUTTON_BIT)) + +#undef XmIsCascadeButtonGadget +#define XmIsCascadeButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmCASCADE_BUTTON_GADGET_BIT)) + +#undef XmIsClipWindow +#define XmIsClipWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmCLIP_WINDOW_BIT)) + +#undef XmIsComboBox +#define XmIsComboBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmCOMBO_BOX_BIT)) + +#undef XmIsCommandBox +#define XmIsCommandBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmCOMMAND_BOX_BIT)) + +#undef XmIsContainer +#define XmIsContainer(w) \ + (_XmIsFastSubclass(XtClass(w), XmCONTAINER_BIT)) + +#undef XmIsDialogShell +#define XmIsDialogShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmDIALOG_SHELL_BIT)) + +#undef XmIsDisplay +#define XmIsDisplay(w) \ + (_XmIsFastSubclass(XtClass(w), XmDISPLAY_BIT)) + +#undef XmIsGrabShell +#define XmIsGrabShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmGRAB_SHELL_BIT)) + +#undef XmIsIconGadget +#define XmIsIconGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmICONGADGET_BIT)) + +#undef XmIsList +#define XmIsList(w) \ + (_XmIsFastSubclass(XtClass(w), XmLIST_BIT)) + +#undef XmIsForm +#define XmIsForm(w) \ + (_XmIsFastSubclass(XtClass(w), XmFORM_BIT)) + +#undef XmIsTextField +#define XmIsTextField(w) \ + (_XmIsFastSubclass(XtClass(w), XmTEXT_FIELD_BIT)) + +#undef XmIsGadget +#define XmIsGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmGADGET_BIT)) + +#undef XmIsLabel +#define XmIsLabel(w) \ + (_XmIsFastSubclass(XtClass(w), XmLABEL_BIT)) + +#undef XmIsLabelGadget +#define XmIsLabelGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmLABEL_GADGET_BIT)) + +#undef XmIsMainWindow +#define XmIsMainWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmMAIN_WINDOW_BIT)) + +#undef XmIsManager +#define XmIsManager(w) \ + (_XmIsFastSubclass(XtClass(w), XmMANAGER_BIT)) + +#undef XmIsMenuShell +#define XmIsMenuShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmMENU_SHELL_BIT)) + +#undef XmIsNotebook +#define XmIsNotebook(w) \ + (_XmIsFastSubclass(XtClass(w), XmNOTEBOOK_BIT)) + +#undef XmIsDragIcon +#define XmIsDragIcon(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAG_ICON_BIT)) + +#undef XmIsDropSiteManager +#define XmIsDropSiteManager(w) \ + (_XmIsFastSubclass(XtClass(w), XmDROP_SITE_MANAGER_BIT)) + +#undef XmIsDropTransfer +#define XmIsDropTransfer(w) \ + (_XmIsFastSubclass(XtClass(w), XmDROP_TRANSFER_BIT)) + +#undef XmIsDragOverShell +#define XmIsDragOverShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAG_OVER_SHELL_BIT)) + +#undef XmIsDragContext +#define XmIsDragContext(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAG_CONTEXT_BIT)) + +#undef XmIsDrawnButton +#define XmIsDrawnButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAWN_BUTTON_BIT)) + +#undef XmIsPrimitive +#define XmIsPrimitive(w) \ + (_XmIsFastSubclass(XtClass(w), XmPRIMITIVE_BIT)) + +#undef XmIsPushButton +#define XmIsPushButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmPUSH_BUTTON_BIT)) + +#undef XmIsPushButtonGadget +#define XmIsPushButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmPUSH_BUTTON_GADGET_BIT)) + +#undef XmIsRowColumn +#define XmIsRowColumn(w) \ + (_XmIsFastSubclass(XtClass(w), XmROW_COLUMN_BIT)) + +#undef XmIsScreen +#define XmIsScreen(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCREEN_BIT)) + +#undef XmIsScrollBar +#define XmIsScrollBar(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCROLL_BAR_BIT)) + +#undef XmIsScrolledWindow +#define XmIsScrolledWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCROLLED_WINDOW_BIT)) + +#undef XmIsSelectionBox +#define XmIsSelectionBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmSELECTION_BOX_BIT)) + +#undef XmIsSeparator +#define XmIsSeparator(w) \ + (_XmIsFastSubclass(XtClass(w), XmSEPARATOR_BIT)) + +#undef XmIsSeparatorGadget +#define XmIsSeparatorGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmSEPARATOR_GADGET_BIT)) + +#undef XmIsSpinButton +#define XmIsSpinButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmSPINBUTTON_BIT)) + +#undef XmIsText +#define XmIsText(w) \ + (_XmIsFastSubclass(XtClass(w), XmTEXT_BIT)) + +#undef XmIsTearOffButton +#define XmIsTearOffButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmTEAROFF_BUTTON_BIT)) + +#undef XmIsToggleButton +#define XmIsToggleButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmTOGGLE_BUTTON_BIT)) + +#undef XmIsToggleButtonGadget +#define XmIsToggleButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmTOGGLE_BUTTON_GADGET_BIT)) + +#undef XmIsPrintShell +#define XmIsPrintShell(w) \ + (_XmIsFastSubclass(XtClass(w), XmPRINT_SHELL_BIT)) + +#undef XmIsArrowButton +#define XmIsArrowButton(w) \ + (_XmIsFastSubclass(XtClass(w), XmARROW_BUTTON_BIT)) + +#undef XmIsArrowButtonGadget +#define XmIsArrowButtonGadget(w) \ + (_XmIsFastSubclass(XtClass(w), XmARROW_BUTTON_GADGET_BIT)) + +#undef XmIsBulletinBoard +#define XmIsBulletinBoard(w) \ + (_XmIsFastSubclass(XtClass(w), XmBULLETIN_BOARD_BIT)) + +#undef XmIsDrawingArea +#define XmIsDrawingArea(w) \ + (_XmIsFastSubclass(XtClass(w), XmDRAWING_AREA_BIT)) + +#undef XmIsFileSelectionBox +#define XmIsFileSelectionBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmFILE_SELECTION_BOX_BIT)) + +#undef XmIsFrame +#define XmIsFrame(w) \ + (_XmIsFastSubclass(XtClass(w), XmFRAME_BIT)) + +#undef XmIsMessageBox +#define XmIsMessageBox(w) \ + (_XmIsFastSubclass(XtClass(w), XmMESSAGE_BOX_BIT)) + +#undef XmIsSash +#define XmIsSash(w) \ + (_XmIsFastSubclass(XtClass(w), XmSASH_BIT)) + +#undef XmIsScale +#define XmIsScale(w) \ + (_XmIsFastSubclass(XtClass(w), XmSCALE_BIT)) + +#undef XmIsPanedWindow +#define XmIsPanedWindow(w) \ + (_XmIsFastSubclass(XtClass(w), XmPANED_WINDOW_BIT)) + +#undef XmIsCSText +#define XmIsCSText(w) \ + (_XmIsFastSubclass(XtClass(w), XmCSTEXT_BIT)) + +#undef XmIsCombinationBox2 +#define XmIsCombinationBox2(w) \ + (_XmIsFastSubclass(XtClass(w), XmCOMBINATION_BOX_2_BIT)) + +#undef XmIsDropDown +#define XmIsDropDown(w) \ + (_XmIsFastSubclass(XtClass(w), XmDROP_DOWN_BIT)) + +#undef XmIsExt18List +#define XmIsExt18List(w) \ + (_XmIsFastSubclass(XtClass(w), XmEXT18LIST_BIT)) + +#undef XmIsMultiList +#define XmIsMultiList(w) \ + (_XmIsFastSubclass(XtClass(w), XmMULTI_LIST_BIT)) + + +/************************************************************************ + * + * ResolveP.h + * + ************************************************************************/ + + +/* Widget class indices used with XmPartOffset and XmField macros */ + +#define XmObjectIndex 0 +#define ObjectIndex XmObjectIndex +#define XmRectObjIndex (XmObjectIndex + 1) +#define RectObjIndex XmRectObjIndex +#define XmWindowObjIndex (XmRectObjIndex + 1) +#define WindowObjIndex XmWindowObjIndex +#define XmCoreIndex 0 +#define CoreIndex XmCoreIndex +#define XmCompositeIndex (XmWindowObjIndex + 2) +#define CompositeIndex XmCompositeIndex +#define XmConstraintIndex (XmCompositeIndex + 1) +#define ConstraintIndex XmConstraintIndex +#define XmGadgetIndex (XmRectObjIndex + 1) +#define XmPrimitiveIndex (XmWindowObjIndex + 2) +#define XmManagerIndex (XmConstraintIndex + 1) + +#define XmArrowBIndex (XmPrimitiveIndex + 1) +#define XmArrowButtonIndex XmArrowBIndex +#define XmLabelIndex (XmPrimitiveIndex + 1) +#define XmListIndex (XmPrimitiveIndex + 1) +#define XmScrollBarIndex (XmPrimitiveIndex + 1) +#define XmSeparatorIndex (XmPrimitiveIndex + 1) +#define XmTextIndex (XmPrimitiveIndex + 1) +#define XmTextFieldIndex (XmPrimitiveIndex + 1) +#define XmCSTextIndex (XmPrimitiveIndex + 1) + +#define XmCascadeBIndex (XmLabelIndex + 1) +#define XmCascadeButtonIndex XmCascadeBIndex +#define XmDrawnBIndex (XmLabelIndex + 1) +#define XmDrawnButtonIndex XmDrawnBIndex +#define XmPushBIndex (XmLabelIndex + 1) +#define XmPushButtonIndex XmPushBIndex +#define XmToggleBIndex (XmLabelIndex + 1) +#define XmToggleButtonIndex XmToggleBIndex +#define XmTearOffButtonIndex (XmPushBIndex + 1) + +#define XmArrowBGIndex (XmGadgetIndex + 1) +#define XmArrowButtonGadgetIndex XmArrowBGIndex +#define XmLabelGIndex (XmGadgetIndex + 1) +#define XmLabelGadgetIndex XmLabelGIndex +#define XmSeparatoGIndex (XmGadgetIndex + 1) +#define XmSeparatorGadgetIndex XmSeparatoGIndex + +#define XmCascadeBGIndex (XmLabelGIndex + 1) +#define XmCascadeButtonGadgetIndex XmCascadeBGIndex +#define XmPushBGIndex (XmLabelGIndex + 1) +#define XmPushButtonGadgetIndex XmPushBGIndex +#define XmToggleBGIndex (XmLabelGIndex + 1) +#define XmToggleButtonGadgetIndex XmToggleBGIndex +#define XmIconGadgetIndex (XmGadgetIndex + 1) + +#define XmBulletinBIndex (XmManagerIndex + 1) +#define XmBulletinBoardIndex XmBulletinBIndex +#define XmDrawingAIndex (XmManagerIndex + 1) +#define XmDrawingAreaIndex XmDrawingAIndex +#define XmClipWindowIndex (XmDrawingAIndex + 1) +#define XmFrameIndex (XmManagerIndex + 1) +#define XmPanedWIndex (XmManagerIndex + 1) +#define XmPanedWindowIndex XmPanedWIndex +#define XmSashIndex (XmPrimitiveIndex + 1) +#define XmRowColumnIndex (XmManagerIndex + 1) +#define XmScaleIndex (XmManagerIndex + 1) +#define XmScrolledWIndex (XmManagerIndex + 1) +#define XmScrolledWindowIndex XmScrolledWIndex + +#define XmFormIndex (XmBulletinBIndex + 1) +#define XmMessageBIndex (XmBulletinBIndex + 1) +#define XmMessageBoxIndex XmMessageBIndex +#define XmSelectioBIndex (XmBulletinBIndex + 1) +#define XmSelectionBoxIndex XmSelectioBIndex + +#define XmMainWIndex (XmScrolledWIndex + 1) +#define XmMainWindowIndex XmMainWIndex + +#define XmCommandIndex (XmSelectioBIndex + 1) +#define XmFileSBIndex (XmSelectioBIndex + 1) +#define XmFileSelectionBoxIndex XmFileSBIndex + +#define XmShellIndex (XmCompositeIndex + 1) +#define ShellIndex XmShellIndex +#define XmOverrideShellIndex (XmShellIndex + 1) +#define OverrideShellIndex XmOverrideShellIndex +#define XmWMShellIndex (XmShellIndex + 1) +#define WMShellIndex XmWMShellIndex +#define XmVendorShellIndex (XmWMShellIndex + 1) +#define VendorShellIndex XmVendorShellIndex +#define XmTransientShellIndex (XmVendorShellIndex + 1) +#define TransientShellIndex XmTransientShellIndex +#define XmTopLevelShellIndex (XmVendorShellIndex + 1) +#define TopLevelShellIndex XmTopLevelShellIndex +#define XmApplicationShellIndex (XmTopLevelShellIndex + 1) +#define ApplicationShellIndex XmApplicationShellIndex +#define XmGrabShellIndex (XmVendorShellIndex + 1) +#define XmDisplayIndex (XmApplicationShellIndex + 1) + +#define XmDialogSIndex (XmTransientShellIndex + 1) +#define XmDialogShellIndex XmDialogSIndex +#define XmMenuShellIndex (XmOverrideShellIndex + 1) + +#define XmContainerIndex (XmManagerIndex + 1) +#define XmNotebookIndex (XmManagerIndex + 1) +#define XmSpinButtonIndex (XmManagerIndex + 1) +#define XmComboBoxIndex (XmManagerIndex + 1) + +#define XmDragIconIndex (XmRectObjIndex + 1) +#define XmDropSiteManagerIndex (XmObjectIndex + 1) +#define XmDropTransferIndex (XmObjectIndex + 1) +#define XmDragOverShellIndex (XmVendorShellIndex + 1) +#define XmDragContextIndex (XmCoreIndex + 1) + +/* + * XmOFFSETBITS is the number of bits used for the part offset within the + * resource_offset field in the XmPartResource struct. XmOFFSETMASK is the + * bitmask to mask for the part offset. + */ +#define XmOFFSETBITS (sizeof(Cardinal)*8/2) +#define XmOFFSETMASK ((1<resource_offset & XmOFFSETMASK) + \ + (*(offset))[(r)->resource_offset >> XmOFFSETBITS] + +# define XmField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)) + offsetrecord[part##Index] + \ + XtOffsetOf( part##Part, variable))) + +# define XmConstraintField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)->core.constraints) + \ + offsetrecord[part##Index] + \ + XtOffsetOf( part##ConstraintPart, variable))) +#else +# define XmPartOffset(part, variable) \ + ((part/**/Index) << XmOFFSETBITS) + XtOffsetOf( part/**/Part, variable) + +# define XmConstraintPartOffset(part, variable) \ + ((part/**/Index) << XmOFFSETBITS) + \ + XtOffsetOf( part/**/ConstraintPart, variable) + +# define XmGetPartOffset(r, offset) \ + ((r)->resource_offset & XmOFFSETMASK) + \ + (*(offset))[(r)->resource_offset >> XmOFFSETBITS]; + +# define XmField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)) + offsetrecord[part/**/Index] + \ + XtOffsetOf( part/**/Part, variable))) + +# define XmConstraintField(widget, offsetrecord, part, variable, type) \ + (*(type *)(((char *) (widget)->core.constraints) + \ + offsetrecord[part/**/Index] + \ + XtOffsetOf( part/**/ConstraintPart, variable))) +#endif + +/*********************************************************************** + * + * RegionP.h + * + * This structure must match the opaque libX Region structure. + ***********************************************************************/ + +typedef struct { + short x1, x2, y1, y2; +} XmRegionBox; + +typedef struct _XmRegion { + long size; + long numRects; + XmRegionBox *rects; + XmRegionBox extents; +} XmRegionRec, *XmRegion; + + +/******** ResConvert.c ********/ + +enum{ XmLABEL_FONTLIST = 1, XmBUTTON_FONTLIST, + XmTEXT_FONTLIST + } ; + +enum { + XmLABEL_RENDER_TABLE = 1, + XmBUTTON_RENDER_TABLE, + XmTEXT_RENDER_TABLE +} ; + +/**** Private Defines, Typedefs, and Function Declarations for XmString.c ****/ + +/* For _XmStringIndexCacheTag() and _XmStringCacheTag() length. */ +#define XmSTRING_TAG_STRLEN -1 + +/* For _XmStringGetNextTabWidth. EOS = End Of String. */ +typedef enum { XmTAB_NEXT, XmTAB_NEWLINE, XmTAB_EOS } NextTabResult; + +/******** End Private Function Declarations ********/ + +/******** Traversal.c ********/ + +#define XmTAB_ANY ((XmNavigationType) 255) +#define XmNONE_OR_BC ((XmNavigationType) 254) + +typedef struct _XmFocusMovedCallbackStruct{ + int reason; + XEvent *event; + Boolean cont; + Widget old_focus; + Widget new_focus; + unsigned char focus_policy; + XmTraversalDirection direction; +} XmFocusMovedCallbackStruct, *XmFocusMovedCallback; + +typedef struct _XmFocusDataRec *XmFocusData; + + +/******** ResInd.c ********/ + +typedef enum { + XmPARSE_ERROR, XmPARSE_NO_UNITS, XmPARSE_UNITS_OK +} XmParseResult; + + + +/******** Function Declarations for Xme ********/ + + /* GadgetUtil.c */ +extern void XmeRedisplayGadgets( + Widget w, + register XEvent *event, + Region region) ; +extern void XmeConfigureObject( + Widget g, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, + int border_width) ; +#else + Position x, + Position y, + Dimension width, + Dimension height, + Dimension border_width) ; +#endif /* NeedWidePrototypes */ + /* Traversal.c */ +extern void XmeNavigChangeManaged( + Widget wid) ; +extern Boolean XmeFocusIsInShell( + Widget wid) ; + /* ResInd.c */ +extern XmImportOperator XmeToHorizontalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern XmImportOperator XmeToVerticalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern void XmeFromHorizontalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern void XmeFromVerticalPixels( + Widget widget, + int offset, + XtArgVal *value) ; +extern XmParseResult XmeParseUnits(String spec, int *unitType); + /* DragIcon. c */ +extern Widget XmeGetTextualDragIcon(Widget w) ; + /* BulletinB.c */ +extern Widget XmeCreateClassDialog( + WidgetClass w_class, + Widget ds_p, + String name, + ArgList bb_args, + Cardinal bb_n ) ; + /* ImageCache.c */ +extern Boolean XmeGetPixmapData( + Screen *screen, + Pixmap pixmap, + char **image_name, + int *depth, + Pixel *foreground, + Pixel *background, + int *hot_x, + int *hot_y, + unsigned int *width, + unsigned int *height) ; +extern Pixmap XmeGetMask( + Screen *screen, + char *image_name) ; + /* VaSimple.c */ +extern int XmeCountVaListSimple(va_list al); +extern Widget XmeVLCreateWidget( + char *name, + WidgetClass wc, + Widget parent, + Boolean managed, + va_list al, + int count); + /* VirtKeys.c */ +extern int XmeVirtualToActualKeysyms( + Display *dpy, + KeySym virtKeysym, + XmKeyBinding *actualKeyData) ; + /* Screen.c */ +extern Cursor XmeGetNullCursor(Widget w) ; +extern void XmeQueryBestCursorSize( + Widget w, + Dimension *width, + Dimension *height ); + /* Xm.c */ +extern void XmeWarning( Widget w, char *message ) ; + /* ResConvert.c */ +extern XmFontList XmeGetDefaultRenderTable( + Widget w, +#if NeedWidePrototypes + unsigned int fontListType ); +#else + unsigned char fontListType ); +#endif /* NeedWidePrototypes */ +extern Boolean XmeNamesAreEqual( + register char *in_str, + register char *test_str ); + /* Primitive.c */ +extern void XmeResolvePartOffsets( + WidgetClass w_class, + XmOffsetPtr *offset, + XmOffsetPtr *constraint_offset ) ; + /* XmString.c */ +extern Boolean XmeStringIsValid( XmString string ) ; +extern void XmeSetWMShellTitle( + XmString xmstr, + Widget shell) ; +extern XmIncludeStatus XmeGetDirection(XtPointer *in_out, + XtPointer text_end, + XmTextType type, + XmStringTag locale_tag, + XmParseMapping entry, + int pattern_length, + XmString *str_include, + XtPointer call_data); +extern XmIncludeStatus XmeGetNextCharacter(XtPointer *in_out, + XtPointer text_end, + XmTextType type, + XmStringTag locale_tag, + XmParseMapping entry, + int pattern_length, + XmString *str_include, + XtPointer call_data); +extern XmStringComponentType XmeStringGetComponent(_XmStringContext context, + Boolean update_context, + Boolean copy_data, + unsigned int *length, + XtPointer *value); + /* XmFontList.c */ +extern Boolean XmeRenderTableGetDefaultFont( + XmFontList fontlist, + XFontStruct **font_struct ) ; + /* GMUtils.c */ +extern XtGeometryResult XmeReplyToQueryGeometry( + Widget widget, + XtWidgetGeometry * intended, + XtWidgetGeometry * desired) ; + /* Color.c */ +extern void XmeGetDefaultPixel( + Widget widget, + int type, + int offset, + XrmValue *value) ; + /* Xmos.c */ +extern String XmeGetHomeDirName(void) ; +extern int XmeMicroSleep( + long secs) ; +extern XmString XmeGetLocalizedString( + char *reserved, + Widget widget, + char *resource, + String string) ; + +extern void XmRenderTableGetDefaultFontExtents( + XmRenderTable rendertable, + int *height, + int *ascent, + int *descent) ; + +/******** End Function Declarations for Xme ********/ + +/******** ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + + +#include + + +/*********************************************************************** + * + * Motif 1.2 BC compilation. + * + ***********************************************************************/ + +#ifndef NO_XM_1_2_BC + +/* + * These routines have all been made obsolete by public Xme functions. + * The declarations here are intended solely as an aid to porting, + * and will be removed in a future release. All applications should + * name the Xme methods directly. + * + * _XmVirtualToActualKeysym, _XmResizeObject, and _XmMoveObject have + * Xme counterparts with slightly different semantics or parameters, + * so a simple rename will not work for them. + */ + +#define _XmClearBorder XmeClearBorder +#define _XmConfigureObject XmeConfigureObject +#define _XmDrawArrow XmeDrawArrow +#define _XmDrawDiamond XmeDrawDiamond +#define _XmDrawSeparator XmeDrawSeparator +#define _XmDrawShadows XmeDrawShadows +#define _XmDrawSimpleHighlight XmeDrawHighlight +#define _XmFontListGetDefaultFont XmeRenderTableGetDefaultFont +#define _XmFromHorizontalPixels XmeFromHorizontalPixels +#define _XmFromVerticalPixels XmeFromVerticalPixels +#define _XmGMReplyToQueryGeometry XmeReplyToQueryGeometry +#define _XmGetDefaultFontList XmeGetDefaultRenderTable +#define _XmGetMaxCursorSize XmeQueryBestCursorSize +#define _XmGetNullCursor XmeGetNullCursor +#define _XmGetTextualDragIcon XmeGetTextualDragIcon +#define _XmInputInGadget XmObjectAtPoint +#define _XmMicroSleep XmeMicroSleep +#define _XmNavigChangeManaged XmeNavigChangeManaged +#define _XmOSGetHomeDirName XmeGetHomeDirName +#define _XmOSGetLocalizedString XmeGetLocalizedString +#define _XmRedisplayGadgets XmeRedisplayGadgets +#define _XmStringIsXmString XmeStringIsValid +#define _XmStringUpdateWMShellTitle XmeSetWMShellTitle +#define _XmStringsAreEqual XmeNamesAreEqual +#define _XmToHorizontalPixels XmeToHorizontalPixels +#define _XmToVerticalPixels XmeToVerticalPixels +#define _XmWarning XmeWarning + + +/* + * These routines are really undocumented and internal, but have been + * used widely enough as data that they are preserved here for source + * compatibility. + */ + +extern void _XmDestroyParentCallback( + Widget w, + XtPointer client_data, + XtPointer call_data) ; + + +/* + * Use of these internal macros is sufficiently widespread that they + * are still made available here for source compatibility. + */ + +/* The _XmCreateImage macro is used to create XImage with client + * specific data for the bit and byte order. We still have to do the + * following because XCreateImage will stuff here display specific + * data and we want client specific values (i.e the bit orders we used + * for creating the bitmap data in Motif) */ +#define _XmCreateImage(IMAGE, DISPLAY, DATA, WIDTH, HEIGHT, BYTE_ORDER) {\ + IMAGE = XCreateImage(DISPLAY,\ + DefaultVisual(DISPLAY, DefaultScreen(DISPLAY)),\ + 1,\ + XYBitmap,\ + 0,\ + DATA,\ + WIDTH, HEIGHT,\ + 8,\ + (WIDTH+7) >> 3);\ + IMAGE->byte_order = BYTE_ORDER;\ + IMAGE->bitmap_unit = 8;\ + IMAGE->bitmap_bit_order = LSBFirst;\ +} + +#endif /* NO_XM_1_2_BC */ + +#if __GNUC__ +# define XM_DEPRECATED __attribute__((__deprecated__)) +# define XM_ALIAS(sym) __attribute__((__weak__,alias(#sym))) +#else +# define XM_DEPRECATED +# define XM_ALIAS(sym) +#endif + +#endif /* _XmP_h */ +/* DON'T ADD STUFF AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmRenderTI.h b/libXm/osx/Xm/XmRenderTI.h new file mode 100644 index 0000000..bcde93c --- /dev/null +++ b/libXm/osx/Xm/XmRenderTI.h @@ -0,0 +1,306 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: XmRenderTI.h /main/5 1995/07/13 18:24:12 drk $ */ +#ifndef _XmRenderTI_h +#define _XmRenderTI_h + +#include +#ifdef USE_XFT +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Internal types for XmRenderTable.c */ + +#define REND_OPTIMIZED_BITS 1 +#define REND_MARK_BITS REND_OPTIMIZED_BITS +#define REND_REFCOUNT_BITS (16 - REND_OPTIMIZED_BITS) + +/* + * Macros for Rendition data structure access + */ + +#define _XmRendRefcount(r) ((_XmRendition)*(r))->refcount +#define _XmRendFontOnly(r) ((_XmRendition)*(r))->fontOnly +#define _XmRendLoadModel(r) ((_XmRendition)*(r))->loadModel +#define _XmRendTag(r) ((_XmRendition)*(r))->tag +#define _XmRendFontName(r) ((_XmRendition)*(r))->fontName +#define _XmRendFontType(r) ((_XmRendition)*(r))->fontType +#define _XmRendFont(r) ((_XmRendition)*(r))->font +#define _XmRendDisplay(r) ((_XmRendition)*(r))->display +#define _XmRendTabs(r) ((_XmRendition)*(r))->tabs +#if USE_XFT +#define _XmRendBG(r) ((_XmRendition)*(r))->xftBackground.pixel +#define _XmRendFG(r) ((_XmRendition)*(r))->xftForeground.pixel +#define _XmRendXftFont(r) ((_XmRendition)*(r))->xftFont +#define _XmRendXftFG(r) ((_XmRendition)*(r))->xftForeground +#define _XmRendXftBG(r) ((_XmRendition)*(r))->xftBackground +#define _XmRendPattern(r) ((_XmRendition)*(r))->pattern +#define _XmRendFontStyle(r) ((_XmRendition)*(r))->fontStyle +#define _XmRendFontFoundry(r) ((_XmRendition)*(r))->fontFoundry +#define _XmRendFontEncoding(r) ((_XmRendition)*(r))->fontEncoding +#define _XmRendFontSize(r) ((_XmRendition)*(r))->fontSize +#define _XmRendPixelSize(r) ((_XmRendition)*(r))->pixelSize +#define _XmRendFontSlant(r) ((_XmRendition)*(r))->fontSlant +#define _XmRendFontSpacing(r) ((_XmRendition)*(r))->fontSpacing +#define _XmRendFontWeight(r) ((_XmRendition)*(r))->fontWeight +#else +#define _XmRendBG(r) ((_XmRendition)*(r))->background +#define _XmRendFG(r) ((_XmRendition)*(r))->foreground +#define _XmRendXftFont(r) (NULL) +#endif +#define _XmRendBGState(r) ((_XmRendition)*(r))->backgroundState +#define _XmRendFGState(r) ((_XmRendition)*(r))->foregroundState +#define _XmRendUnderlineType(r) ((_XmRendition)*(r))->underlineType +#define _XmRendStrikethruType(r)((_XmRendition)*(r))->strikethruType +#define _XmRendGC(r) ((_XmRendition)*(r))->gc +#define _XmRendTags(r) ((_XmRendition)*(r))->tags +#define _XmRendTagCount(r) ((_XmRendition)*(r))->count +#define _XmRendHadEnds(r) ((_XmRendition)*(r))->hadEnds +#define _XmRendRefcountInc(r) ++(((_XmRendition)*(r))->refcount) +#define _XmRendRefcountDec(r) --(((_XmRendition)*(r))->refcount) + + +#define FIX_1415 +typedef struct __XmRenditionRec +{ + /* flag indicating _XmFontRenditionRec */ + unsigned int fontOnly : REND_OPTIMIZED_BITS; + unsigned int refcount : REND_REFCOUNT_BITS; + + unsigned char loadModel; + XmStringTag tag; + String fontName; + XmFontType fontType; + XtPointer font; + Display *display; + GC gc; + XmStringTag *tags; + unsigned int count; + Boolean hadEnds; + + XmTabList tabs; + Pixel background; + Pixel foreground; + unsigned char underlineType; + unsigned char strikethruType; + unsigned char backgroundState; + unsigned char foregroundState; + +#ifdef USE_XFT + char *fontStyle, +/* *family, Use font_name instead. */ + *fontFoundry, *fontEncoding; + int fontSize, pixelSize, fontSlant, fontSpacing, fontWeight; + XftPattern *pattern; + XftFont *xftFont; + XftColor xftForeground, xftBackground; +#endif +} _XmRenditionRec, *_XmRendition; + +typedef struct __XmFontRenditionRec +{ + /* flag indicating _XmFontRenditionRec */ + unsigned int fontOnly : REND_OPTIMIZED_BITS; + unsigned int refcount : REND_REFCOUNT_BITS; + + unsigned char loadModel; + XmStringTag tag; + String fontName; + XmFontType fontType; + XtPointer font; + Display *display; + GC *gc; + XmStringTag *tags; + unsigned int count; +} _XmFontRenditionRec, *_XmFontRendition; + +/* Accessor macros. */ + +#define _XmRTCount(rt) ((_XmRenderTable)*(rt))->count +#define _XmRTRenditions(rt) ((_XmRenderTable)*(rt))->renditions +#define _XmRTDisplay(rt) ((_XmRenderTable)*(rt))->display +#define _XmRTMark(rt) ((_XmRenderTable)*(rt))->mark +#define _XmRTRefcount(rt) ((_XmRenderTable)*(rt))->refcount +#define _XmRTRefcountInc(rt) ++(((_XmRenderTable)*(rt))->refcount) +#define _XmRTRefcountDec(rt) --(((_XmRenderTable)*(rt))->refcount) + +#define RENDITIONS_IN_STRUCT 1 + +typedef struct __XmRenderTableRec +{ + unsigned int mark : REND_MARK_BITS; + unsigned int refcount : REND_REFCOUNT_BITS; + unsigned short count; + Display *display; + XmRendition renditions[RENDITIONS_IN_STRUCT]; +} _XmRenderTableRec, *_XmRenderTable; + + +/******** Private Function Declarations for XmRenderTable.c ********/ + +extern XmRendition _XmRenderTableFindRendition(XmRenderTable table, + XmStringTag tag, +#if NeedWidePrototypes + int cached_tag, + int need_font, + int call, +#else + Boolean cached_tag, + Boolean need_font, + Boolean call, +#endif /* NeedWidePrototypes */ + short *index); +extern XmRendition _XmRenditionCreate(Display *display, + Widget widget, + String resname, + String resclass, + XmStringTag tag, + ArgList arglist, + Cardinal argcount, + Boolean *in_db); +extern XmRendition _XmRenderTableGetMerged(XmRenderTable rt, + XmStringTag base, + XmStringTag *tags, +#if NeedWidePrototypes + unsigned int tag_count +#else + unsigned short tag_count +#endif /* NeedWidePrototypes */ + ); +extern XmRendition _XmRenditionMerge(Display *d, + XmRendition *scr, + XmRendition base_rend, + XmRenderTable rt, + XmStringTag base_tag, + XmStringTag *tags, +#if NeedWidePrototypes + unsigned int tag_count, + unsigned int copy +#else + unsigned short tag_count, + Boolean copy +#endif /* NeedWidePrototypes */ + ); +extern Widget _XmCreateRenderTable(Widget parent, + String name, + ArgList arglist, + Cardinal argcount); +extern Widget _XmCreateRendition(Widget parent, + String name, + ArgList arglist, + Cardinal argcount); +extern Display *_XmRenderTableDisplay(XmRenderTable table); +extern XmRendition _XmRenditionCopy(XmRendition rend, + Boolean shared); +extern Boolean _XmRenderTableFindFallback(XmRenderTable , + XmStringTag tag, +#if NeedWidePrototypes + int cached_tag, +#else + Boolean cached_tag, +#endif /* NeedWidePrototypes */ + short *indx, + XmRendition *rend_ptr) ; +extern Boolean _XmRenderTableFindFirstFont(XmRenderTable rendertable, + short *indx, + XmRendition *rend_ptr); +extern XmRenderTable _XmRenderTableRemoveRenditions(XmRenderTable oldtable, + XmStringTag *tags, + int tag_count, +#if NeedWidePrototypes + int chk_font, +#else + Boolean chk_font, +#endif /* NeedWidePrototypes */ + XmFontType type, + XtPointer font); + +#ifdef USE_XFT +/* + * XftDraw cache functions, implemented in lib/Xm/FontList.c + */ +XftDraw * _XmXftDrawCreate(Display *display, Window window); + +void _XmXftDrawDestroy(Display *display, Window window, XftDraw *d); + +void _XmXftDrawString(Display *display, Window window, XmRendition rend, int bpc, +#if NeedWidePrototypes + int x, int y, +#else + Position x, Position y, +#endif /* NeedWidePrototypes */ + char *s, int len, +#if NeedWidePrototypes + int image +#else + Boolean image +#endif /* NeedWidePrototypes */ + ); + +void _XmXftDrawString2(Display *display, Window window, GC gc, XftFont *font, int bpc, +#if NeedWidePrototypes + int x, int y, +#else + Position x, Position y, +#endif + char *s, int len); + +void _XmXftSetClipRectangles(Display *display, Window window, Position x, Position y, XRectangle *rects, int n); + +XftColor _XmXftGetXftColor(Display *display, Pixel color); + +#ifdef FIX_1415 +void _XmXftFontAverageWidth(Widget w, XtPointer f, int *width); +#endif + +#endif + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmRenderTI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmStrDefs.h b/libXm/osx/Xm/XmStrDefs.h new file mode 100644 index 0000000..52cf5e7 --- /dev/null +++ b/libXm/osx/Xm/XmStrDefs.h @@ -0,0 +1,6633 @@ +/* $TOG: XmStrDefs.ht /main/2 1997/06/18 17:50:15 samborn $ */ +#ifndef _XmStrDefs_h_ +#define _XmStrDefs_h_ + +#include + +#ifndef _XmConst +#define _XmConst /**/ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* $TOG: makestrs.c /main/11 1998/02/06 11:24:15 kaleb $ */ +/* This file is automatically generated. */ +/* Default ABI version -- Do not edit */ +/* TOG: xmstring.list /main/5 1997/06/20 08:37:02 samborn */ + +#ifdef XMSTRINGDEFINES +#define XmS "" +#define XmCAccelerator "Accelerator" +#define XmCAcceleratorText "AcceleratorText" +#define XmCAdjustLast "AdjustLast" +#define XmCAdjustMargin "AdjustMargin" +#define XmCAlignment "Alignment" +#define XmCAllowOverlap "AllowOverlap" +#define XmCAllowUnusedSpace "AllowUnusedSpace" +#define XmCAnimationMask "AnimationMask" +#define XmCAnimationPixmap "AnimationPixmap" +#define XmCAnimationPixmapDepth "AnimationPixmapDepth" +#define XmCAnimationStyle "AnimationStyle" +#define XmCApplyLabelString "ApplyLabelString" +#define XmCArmCallback "ArmCallback" +#define XmCArmColor "ArmColor" +#define XmCArmPixmap "ArmPixmap" +#define XmCArrowDirection "ArrowDirection" +#define XmCAttachment "Attachment" +#define XmCAudibleWarning "AudibleWarning" +#define XmCAutoShowCursorPosition "AutoShowCursorPosition" +#define XmCAutoUnmanage "AutoUnmanage" +#define XmCAutomaticSelection "AutomaticSelection" +#define XmCAvailability "Availability" +#define XmCBackgroundPixmap "BackgroundPixmap" +#define XmCBlendModel "BlendModel" +#define XmCBlinkRate "BlinkRate" +#define XmCBottomShadowColor "BottomShadowColor" +#define XmCBottomShadowPixmap "BottomShadowPixmap" +#define XmCButtonAcceleratorText "ButtonAcceleratorText" +#define XmCButtonAccelerators "ButtonAccelerators" +#define XmCButtonCount "ButtonCount" +#define XmCButtonFontList "ButtonFontList" +#define XmCButtonMnemonicCharSets "ButtonMnemonicCharSets" +#define XmCButtonMnemonics "ButtonMnemonics" +#define XmCButtonSet "ButtonSet" +#define XmCButtonType "ButtonType" +#define XmCButtons "Buttons" +#define XmCCancelLabelString "CancelLabelString" +#define XmCChildHorizontalAlignment "ChildHorizontalAlignment" +#define XmCChildHorizontalSpacing "ChildHorizontalSpacing" +#define XmCChildPlacement "ChildPlacement" +#define XmCChildType "ChildType" +#define XmCChildVerticalAlignment "ChildVerticalAlignment" +#define XmCChildren "Children" +#define XmCClientData "ClientData" +#define XmCClipWindow "ClipWindow" +#define XmCColumns "Columns" +#define XmCCommandWindow "CommandWindow" +#define XmCCommandWindowLocation "CommandWindowLocation" +#define XmCConvertProc "ConvertProc" +#define XmCCursorBackground "CursorBackground" +#define XmCCursorForeground "CursorForeground" +#define XmCCursorPosition "CursorPosition" +#define XmCCursorPositionVisible "CursorPositionVisible" +#define XmCDarkThreshold "DarkThreshold" +#define XmCDecimalPoints "DecimalPoints" +#define XmCDefaultButtonShadowThickness "DefaultButtonShadowThickness" +#define XmCDefaultButtonType "DefaultButtonType" +#define XmCDefaultCopyCursorIcon "DefaultCopyCursorIcon" +#define XmCDefaultFontList "DefaultFontList" +#define XmCDefaultInvalidCursorIcon "DefaultInvalidCursorIcon" +#define XmCDefaultLinkCursorIcon "DefaultLinkCursorIcon" +#define XmCDefaultMoveCursorIcon "DefaultMoveCursorIcon" +#define XmCDefaultNoneCursorIcon "DefaultNoneCursorIcon" +#define XmCDefaultPosition "DefaultPosition" +#define XmCDefaultSourceCursorIcon "DefaultSourceCursorIcon" +#define XmCDefaultValidCursorIcon "DefaultValidCursorIcon" +#define XmCDeleteResponse "DeleteResponse" +#define XmCDesktopParent "DesktopParent" +#define XmCDialogStyle "DialogStyle" +#define XmCDialogTitle "DialogTitle" +#define XmCDialogType "DialogType" +#define XmCDirListItemCount "DirListItemCount" +#define XmCDirListItems "DirListItems" +#define XmCDirListLabelString "DirListLabelString" +#define XmCDirMask "DirMask" +#define XmCDirSearchProc "DirSearchProc" +#define XmCDirSpec "DirSpec" +#define XmCDirectory "Directory" +#define XmCDirectoryValid "DirectoryValid" +#define XmCDisarmCallback "DisarmCallback" +#define XmCDoubleClickInterval "DoubleClickInterval" +#define XmCDragContextClass "DragContextClass" +#define XmCDragDropFinishCallback "DragDropFinishCallback" +#define XmCDragIconClass "DragIconClass" +#define XmCDragInitiatorProtocolStyle "DragInitiatorProtocolStyle" +#define XmCDragMotionCallback "DragMotionCallback" +#define XmCDragOperations "DragOperations" +#define XmCDragOverMode "DragOverMode" +#define XmCDragProc "DragProc" +#define XmCDragReceiverProtocolStyle "DragReceiverProtocolStyle" +#define XmCDropProc "DropProc" +#define XmCDropRectangles "DropRectangles" +#define XmCDropSiteActivity "DropSiteActivity" +#define XmCDropSiteEnterCallback "DropSiteEnterCallback" +#define XmCDropSiteLeaveCallback "DropSiteLeaveCallback" +#define XmCDropSiteManagerClass "DropSiteManagerClass" +#define XmCDropSiteOperations "DropSiteOperations" +#define XmCDropSiteType "DropSiteType" +#define XmCDropStartCallback "DropStartCallback" +#define XmCDropTransferClass "DropTransferClass" +#define XmCDropTransfers "DropTransfers" +#define XmCEditable "Editable" +#define XmCEntryBorder "EntryBorder" +#define XmCEntryClass "EntryClass" +#define XmCExportTargets "ExportTargets" +#define XmCExposeCallback "ExposeCallback" +#define XmCExtensionType "ExtensionType" +#define XmCFileListItemCount "FileListItemCount" +#define XmCFileListItems "FileListItems" +#define XmCFileListLabelString "FileListLabelString" +#define XmCFileSearchProc "FileSearchProc" +#define XmCFileTypeMask "FileTypeMask" +#define XmCFillOnArm "FillOnArm" +#define XmCFillOnSelect "FillOnSelect" +#define XmCFilterLabelString "FilterLabelString" +#define XmCFontList "FontList" +#define XmCForegroundThreshold "ForegroundThreshold" +#define XmCHelpLabelString "HelpLabelString" +#define XmCHighlightColor "HighlightColor" +#define XmCHighlightOnEnter "HighlightOnEnter" +#define XmCHighlightPixmap "HighlightPixmap" +#define XmCHighlightThickness "HighlightThickness" +#define XmCHorizontalFontUnit "HorizontalFontUnit" +#define XmCHorizontalScrollBar "HorizontalScrollBar" +#define XmCHot "Hot" +#define XmCICCHandle "ICCHandle" +#define XmCImportTargets "ImportTargets" +#define XmCIncrement "Increment" +#define XmCIncremental "Incremental" +#define XmCIndicatorOn "IndicatorOn" +#define XmCIndicatorSize "IndicatorSize" +#define XmCIndicatorType "IndicatorType" +#define XmCInitialDelay "InitialDelay" +#define XmCInitialFocus "InitialFocus" +#define XmCInputCreate "InputCreate" +#define XmCInputMethod "InputMethod" +#define XmCInvalidCursorForeground "InvalidCursorForeground" +#define XmCIsAligned "IsAligned" +#define XmCIsHomogeneous "IsHomogeneous" +#define XmCItemCount "ItemCount" +#define XmCItems "Items" +#define XmCKeyboardFocusPolicy "KeyboardFocusPolicy" +#define XmCLabelFontList "LabelFontList" +#define XmCLabelInsensitivePixmap "LabelInsensitivePixmap" +#define XmCLabelPixmap "LabelPixmap" +#define XmCLabelString "LabelString" +#define XmCLabelType "LabelType" +#define XmCLightThreshold "LightThreshold" +#define XmCListLabelString "ListLabelString" +#define XmCListMarginHeight "ListMarginHeight" +#define XmCListMarginWidth "ListMarginWidth" +#define XmCListSizePolicy "ListSizePolicy" +#define XmCListSpacing "ListSpacing" +#define XmCListUpdated "ListUpdated" +#define XmCLogicalParent "LogicalParent" +#define XmCMainWindowMarginHeight "MainWindowMarginHeight" +#define XmCMainWindowMarginWidth "MainWindowMarginWidth" +#define XmCMappingDelay "MappingDelay" +#define XmCMarginBottom "MarginBottom" +#define XmCMarginHeight "MarginHeight" +#define XmCMarginLeft "MarginLeft" +#define XmCMarginRight "MarginRight" +#define XmCMarginTop "MarginTop" +#define XmCMarginWidth "MarginWidth" +#define XmCMask "Mask" +#define XmCMaxItems "MaxItems" +#define XmCMaxLength "MaxLength" +#define XmCMaxValue "MaxValue" +#define XmCMaximum "Maximum" +#define XmCMenuBar "MenuBar" +#define XmCMenuPost "MenuPost" +#define XmCMenuWidget "MenuWidget" +#define XmCMessageProc "MessageProc" +#define XmCMessageWindow "MessageWindow" +#define XmCMinimizeButtons "MinimizeButtons" +#define XmCMinimum "Minimum" +#define XmCMnemonic "Mnemonic" +#define XmCMnemonicCharSet "MnemonicCharSet" +#define XmCMoveOpaque "MoveOpaque" +#define XmCMultiClick "MultiClick" +#define XmCMustMatch "MustMatch" +#define XmCMwmDecorations "MwmDecorations" +#define XmCMwmFunctions "MwmFunctions" +#define XmCMwmInputMode "MwmInputMode" +#define XmCMwmMenu "MwmMenu" +#define XmCMwmMessages "MwmMessages" +#define XmCNavigationType "NavigationType" +#define XmCNeedsMotion "NeedsMotion" +#define XmCNoMatchString "NoMatchString" +#define XmCNoResize "NoResize" +#define XmCNoneCursorForeground "NoneCursorForeground" +#define XmCNotifyProc "NotifyProc" +#define XmCNumChildren "NumChildren" +#define XmCNumColumns "NumColumns" +#define XmCNumDropRectangles "NumDropRectangles" +#define XmCNumDropTransfers "NumDropTransfers" +#define XmCNumExportTargets "NumExportTargets" +#define XmCNumImportTargets "NumImportTargets" +#define XmCOffset "Offset" +#define XmCOkLabelString "OkLabelString" +#define XmCOperationChangedCallback "OperationChangedCallback" +#define XmCOperationCursorIcon "OperationCursorIcon" +#define XmCOptionLabel "OptionLabel" +#define XmCOptionMnemonic "OptionMnemonic" +#define XmCOutputCreate "OutputCreate" +#define XmCPacking "Packing" +#define XmCPageIncrement "PageIncrement" +#define XmCPaneMaximum "PaneMaximum" +#define XmCPaneMinimum "PaneMinimum" +#define XmCPattern "Pattern" +#define XmCPendingDelete "PendingDelete" +#define XmCPopupEnabled "PopupEnabled" +#define XmCPositionIndex "PositionIndex" +#define XmCPostFromButton "PostFromButton" +#define XmCPostFromCount "PostFromCount" +#define XmCPostFromList "PostFromList" +#define XmCPreeditType "PreeditType" +#define XmCProcessingDirection "ProcessingDirection" +#define XmCPromptString "PromptString" +#define XmCProtocolCallback "ProtocolCallback" +#define XmCPushButtonEnabled "PushButtonEnabled" +#define XmCQualifySearchDataProc "QualifySearchDataProc" +#define XmCRadioAlwaysOne "RadioAlwaysOne" +#define XmCRadioBehavior "RadioBehavior" +#define XmCRecomputeSize "RecomputeSize" +#define XmCRectangles "Rectangles" +#define XmCRepeatDelay "RepeatDelay" +#define XmCResizeCallback "ResizeCallback" +#define XmCResizeHeight "ResizeHeight" +#define XmCResizePolicy "ResizePolicy" +#define XmCResizeWidth "ResizeWidth" +#define XmCRowColumnType "RowColumnType" +#define XmCRows "Rows" +#define XmCRubberPositioning "RubberPositioning" +#define XmCSashHeight "SashHeight" +#define XmCSashIndent "SashIndent" +#define XmCSashWidth "SashWidth" +#define XmCScaleHeight "ScaleHeight" +#define XmCScaleMultiple "ScaleMultiple" +#define XmCScaleWidth "ScaleWidth" +#define XmCScroll "Scroll" +#define XmCScrollBarDisplayPolicy "ScrollBarDisplayPolicy" +#define XmCScrollBarPlacement "ScrollBarPlacement" +#define XmCScrollSide "ScrollSide" +#define XmCScrolledWindowMarginHeight "ScrolledWindowMarginHeight" +#define XmCScrolledWindowMarginWidth "ScrolledWindowMarginWidth" +#define XmCScrollingPolicy "ScrollingPolicy" +#define XmCSelectColor "SelectColor" +#define XmCSelectInsensitivePixmap "SelectInsensitivePixmap" +#define XmCSelectPixmap "SelectPixmap" +#define XmCSelectThreshold "SelectThreshold" +#define XmCSelectedItemCount "SelectedItemCount" +#define XmCSelectedItems "SelectedItems" +#define XmCSelectionArrayCount "SelectionArrayCount" +#define XmCSelectionLabelString "SelectionLabelString" +#define XmCSelectionPolicy "SelectionPolicy" +#define XmCSeparatorOn "SeparatorOn" +#define XmCSeparatorType "SeparatorType" +#define XmCSet "Set" +#define XmCShadowThickness "ShadowThickness" +#define XmCShadowType "ShadowType" +#define XmCShellUnitType "ShellUnitType" +#define XmCShowArrows "ShowArrows" +#define XmCShowAsDefault "ShowAsDefault" +#define XmCShowSeparator "ShowSeparator" +#define XmCShowValue "ShowValue" +#define XmCSimpleCheckBox "SimpleCheckBox" +#define XmCSimpleMenuBar "SimpleMenuBar" +#define XmCSimpleOptionMenu "SimpleOptionMenu" +#define XmCSimplePopupMenu "SimplePopupMenu" +#define XmCSimplePulldownMenu "SimplePulldownMenu" +#define XmCSimpleRadioBox "SimpleRadioBox" +#define XmCSizePolicy "SizePolicy" +#define XmCSliderSize "SliderSize" +#define XmCSource "Source" +#define XmCSourceCursorIcon "SourceCursorIcon" +#define XmCSourceIsExternal "SourceIsExternal" +#define XmCSourcePixmapIcon "SourcePixmapIcon" +#define XmCSourceWidget "SourceWidget" +#define XmCSourceWindow "SourceWindow" +#define XmCSpacing "Spacing" +#define XmCStartTime "StartTime" +#define XmCStateCursorIcon "StateCursorIcon" +#define XmCStringDirection "StringDirection" +#define XmCTearOffModel "TearOffModel" +#define XmCTextFontList "TextFontList" +#define XmCTextString "TextString" +#define XmCTextValue "TextValue" +#define XmCTitleString "TitleString" +#define XmCTopCharacter "TopCharacter" +#define XmCTopItemPosition "TopItemPosition" +#define XmCTopLevelEnterCallback "TopLevelEnterCallback" +#define XmCTopLevelLeaveCallback "TopLevelLeaveCallback" +#define XmCTopShadowColor "TopShadowColor" +#define XmCTopShadowPixmap "TopShadowPixmap" +#define XmCTransferProc "TransferProc" +#define XmCTransferStatus "TransferStatus" +#define XmCTraversalOn "TraversalOn" +#define XmCTraversalType "TraversalType" +#define XmCTreeUpdateProc "TreeUpdateProc" +#define XmCTroughColor "TroughColor" +#define XmCUnitType "UnitType" +#define XmCUnpostBehavior "UnpostBehavior" +#define XmCUnselectPixmap "UnselectPixmap" +#define XmCUpdateSliderSize "UpdateSliderSize" +#define XmCUseAsyncGeometry "UseAsyncGeometry" +#define XmCUserData "UserData" +#define XmCValidCursorForeground "ValidCursorForeground" +#define XmCValueChangedCallback "ValueChangedCallback" +#define XmCValueWcs "ValueWcs" +#define XmCVerifyBell "VerifyBell" +#define XmCVerticalAlignment "VerticalAlignment" +#define XmCVerticalFontUnit "VerticalFontUnit" +#define XmCVerticalScrollBar "VerticalScrollBar" +#define XmCVisibleItemCount "VisibleItemCount" +#define XmCVisibleWhenOff "VisibleWhenOff" +#define XmCVisualPolicy "VisualPolicy" +#define XmCWhichButton "WhichButton" +#define XmCWordWrap "WordWrap" +#define XmCWorkWindow "WorkWindow" +#define XmCXmString "XmString" +#define XmNaccelerator "accelerator" +#define XmNacceleratorText "acceleratorText" +#define XmNactivateCallback "activateCallback" +#define XmNadjustLast "adjustLast" +#define XmNadjustMargin "adjustMargin" +#define XmNalignment "alignment" +#define XmNallowOverlap "allowOverlap" +#define XmNallowResize "allowResize" +#define XmNallowUnusedSpace "allowUnusedSpace" +#define XmNanimationMask "animationMask" +#define XmNanimationPixmap "animationPixmap" +#define XmNanimationPixmapDepth "animationPixmapDepth" +#define XmNanimationStyle "animationStyle" +#define XmNapplyCallback "applyCallback" +#define XmNapplyLabelString "applyLabelString" +#define XmNarmCallback "armCallback" +#define XmNarmColor "armColor" +#define XmNarmPixmap "armPixmap" +#define XmNarrowDirection "arrowDirection" +#define XmNattachment "attachment" +#define XmNaudibleWarning "audibleWarning" +#define XmNautoShowCursorPosition "autoShowCursorPosition" +#define XmNautoUnmanage "autoUnmanage" +#define XmNautomaticSelection "automaticSelection" +#define XmNavailability "availability" +#define XmNblendModel "blendModel" +#define XmNblinkRate "blinkRate" +#define XmNbottomAttachment "bottomAttachment" +#define XmNbottomOffset "bottomOffset" +#define XmNbottomPosition "bottomPosition" +#define XmNbottomShadowColor "bottomShadowColor" +#define XmNbottomShadowPixmap "bottomShadowPixmap" +#define XmNbottomWidget "bottomWidget" +#define XmNbrowseSelectionCallback "browseSelectionCallback" +#define XmNbuttonAcceleratorText "buttonAcceleratorText" +#define XmNbuttonAccelerators "buttonAccelerators" +#define XmNbuttonCount "buttonCount" +#define XmNbuttonFontList "buttonFontList" +#define XmNbuttonMnemonicCharSets "buttonMnemonicCharSets" +#define XmNbuttonMnemonics "buttonMnemonics" +#define XmNbuttonSet "buttonSet" +#define XmNbuttonType "buttonType" +#define XmNbuttons "buttons" +#define XmNcancelButton "cancelButton" +#define XmNcancelCallback "cancelCallback" +#define XmNcancelLabelString "cancelLabelString" +#define XmNcascadePixmap "cascadePixmap" +#define XmNcascadingCallback "cascadingCallback" +#define XmNchildHorizontalAlignment "childHorizontalAlignment" +#define XmNchildHorizontalSpacing "childHorizontalSpacing" +#define XmNchildPlacement "childPlacement" +#define XmNchildPosition "childPosition" +#define XmNchildType "childType" +#define XmNchildVerticalAlignment "childVerticalAlignment" +#define XmNclientData "clientData" +#define XmNclipWindow "clipWindow" +#define XmNcolumns "columns" +#define XmNcommand "command" +#define XmNcommandChangedCallback "commandChangedCallback" +#define XmNcommandEnteredCallback "commandEnteredCallback" +#define XmNcommandWindow "commandWindow" +#define XmNcommandWindowLocation "commandWindowLocation" +#define XmNconvertProc "convertProc" +#define XmNcursorBackground "cursorBackground" +#define XmNcursorForeground "cursorForeground" +#define XmNcursorPosition "cursorPosition" +#define XmNcursorPositionVisible "cursorPositionVisible" +#define XmNdarkThreshold "darkThreshold" +#define XmNdecimalPoints "decimalPoints" +#define XmNdecrementCallback "decrementCallback" +#define XmNdefaultActionCallback "defaultActionCallback" +#define XmNdefaultButton "defaultButton" +#define XmNdefaultButtonShadowThickness "defaultButtonShadowThickness" +#define XmNdefaultButtonType "defaultButtonType" +#define XmNdefaultCopyCursorIcon "defaultCopyCursorIcon" +#define XmNdefaultFontList "defaultFontList" +#define XmNdefaultInvalidCursorIcon "defaultInvalidCursorIcon" +#define XmNdefaultLinkCursorIcon "defaultLinkCursorIcon" +#define XmNdefaultMoveCursorIcon "defaultMoveCursorIcon" +#define XmNdefaultNoneCursorIcon "defaultNoneCursorIcon" +#define XmNdefaultPosition "defaultPosition" +#define XmNdefaultSourceCursorIcon "defaultSourceCursorIcon" +#define XmNdefaultValidCursorIcon "defaultValidCursorIcon" +#define XmNdeleteResponse "deleteResponse" +#define XmNdesktopParent "desktopParent" +#define XmNdialogStyle "dialogStyle" +#define XmNdialogTitle "dialogTitle" +#define XmNdialogType "dialogType" +#define XmNdirListItemCount "dirListItemCount" +#define XmNdirListItems "dirListItems" +#define XmNdirListLabelString "dirListLabelString" +#define XmNdirMask "dirMask" +#define XmNdirSearchProc "dirSearchProc" +#define XmNdirSpec "dirSpec" +#define XmNdirectory "directory" +#define XmNdirectoryValid "directoryValid" +#define XmNdisarmCallback "disarmCallback" +#define XmNdoubleClickInterval "doubleClickInterval" +#define XmNdragCallback "dragCallback" +#define XmNdragContextClass "dragContextClass" +#define XmNdragDropFinishCallback "dragDropFinishCallback" +#define XmNdragIconClass "dragIconClass" +#define XmNdragInitiatorProtocolStyle "dragInitiatorProtocolStyle" +#define XmNdragMotionCallback "dragMotionCallback" +#define XmNdragOperations "dragOperations" +#define XmNdragOverMode "dragOverMode" +#define XmNdragProc "dragProc" +#define XmNdragReceiverProtocolStyle "dragReceiverProtocolStyle" +#define XmNdropFinishCallback "dropFinishCallback" +#define XmNdropProc "dropProc" +#define XmNdropRectangles "dropRectangles" +#define XmNdropSiteActivity "dropSiteActivity" +#define XmNdropSiteEnterCallback "dropSiteEnterCallback" +#define XmNdropSiteLeaveCallback "dropSiteLeaveCallback" +#define XmNdropSiteManagerClass "dropSiteManagerClass" +#define XmNdropSiteOperations "dropSiteOperations" +#define XmNdropSiteType "dropSiteType" +#define XmNdropStartCallback "dropStartCallback" +#define XmNdropTransferClass "dropTransferClass" +#define XmNdropTransfers "dropTransfers" +#define XmNeditMode "editMode" +#define XmNeditable "editable" +#define XmNentryAlignment "entryAlignment" +#define XmNentryBorder "entryBorder" +#define XmNentryCallback "entryCallback" +#define XmNentryClass "entryClass" +#define XmNentryVerticalAlignment "entryVerticalAlignment" +#define XmNexportTargets "exportTargets" +#define XmNexposeCallback "exposeCallback" +#define XmNextendedSelectionCallback "extendedSelectionCallback" +#define XmNextensionType "extensionType" +#define XmNfileListItemCount "fileListItemCount" +#define XmNfileListItems "fileListItems" +#define XmNfileListLabelString "fileListLabelString" +#define XmNfileSearchProc "fileSearchProc" +#define XmNfileTypeMask "fileTypeMask" +#define XmNfillOnArm "fillOnArm" +#define XmNfillOnSelect "fillOnSelect" +#define XmNfilterLabelString "filterLabelString" +#define XmNfocusCallback "focusCallback" +#define XmNfocusMovedCallback "focusMovedCallback" +#define XmNfocusPolicyChanged "focusPolicyChanged" +#define XmNfontList "fontList" +#define XmNforegroundThreshold "foregroundThreshold" +#define XmNfractionBase "fractionBase" +#define XmNgainPrimaryCallback "gainPrimaryCallback" +#define XmNhelpCallback "helpCallback" +#define XmNhelpLabelString "helpLabelString" +#define XmNhighlightColor "highlightColor" +#define XmNhighlightOnEnter "highlightOnEnter" +#define XmNhighlightPixmap "highlightPixmap" +#define XmNhighlightThickness "highlightThickness" +#define XmNhistoryItemCount "historyItemCount" +#define XmNhistoryItems "historyItems" +#define XmNhistoryMaxItems "historyMaxItems" +#define XmNhistoryVisibleItemCount "historyVisibleItemCount" +#define XmNhorizontalFontUnit "horizontalFontUnit" +#define XmNhorizontalScrollBar "horizontalScrollBar" +#define XmNhorizontalSpacing "horizontalSpacing" +#define XmNhotX "hotX" +#define XmNhotY "hotY" +#define XmNiccHandle "iccHandle" +#define XmNimportTargets "importTargets" +#define XmNincrement "increment" +#define XmNincrementCallback "incrementCallback" +#define XmNincremental "incremental" +#define XmNindicatorOn "indicatorOn" +#define XmNindicatorSize "indicatorSize" +#define XmNindicatorType "indicatorType" +#define XmNinitialDelay "initialDelay" +#define XmNinitialFocus "initialFocus" +#define XmNinputCallback "inputCallback" +#define XmNinputCreate "inputCreate" +#define XmNinputMethod "inputMethod" +#define XmNinvalidCursorForeground "invalidCursorForeground" +#define XmNisAligned "isAligned" +#define XmNisHomogeneous "isHomogeneous" +#define XmNitemCount "itemCount" +#define XmNitems "items" +#define XmNkeyboardFocusPolicy "keyboardFocusPolicy" +#define XmNlabelFontList "labelFontList" +#define XmNlabelInsensitivePixmap "labelInsensitivePixmap" +#define XmNlabelPixmap "labelPixmap" +#define XmNlabelString "labelString" +#define XmNlabelType "labelType" +#define XmNleftAttachment "leftAttachment" +#define XmNleftOffset "leftOffset" +#define XmNleftPosition "leftPosition" +#define XmNleftWidget "leftWidget" +#define XmNlightThreshold "lightThreshold" +#define XmNlineSpace "lineSpace" +#define XmNlistItemCount "listItemCount" +#define XmNlistItems "listItems" +#define XmNlistLabelString "listLabelString" +#define XmNlistMarginHeight "listMarginHeight" +#define XmNlistMarginWidth "listMarginWidth" +#define XmNlistSizePolicy "listSizePolicy" +#define XmNlistSpacing "listSpacing" +#define XmNlistUpdated "listUpdated" +#define XmNlistVisibleItemCount "listVisibleItemCount" +#define XmNlogicalParent "logicalParent" +#define XmNlosePrimaryCallback "losePrimaryCallback" +#define XmNlosingFocusCallback "losingFocusCallback" +#define XmNmainWindowMarginHeight "mainWindowMarginHeight" +#define XmNmainWindowMarginWidth "mainWindowMarginWidth" +#define XmNmapCallback "mapCallback" +#define XmNmappingDelay "mappingDelay" +#define XmNmargin "margin" +#define XmNmarginBottom "marginBottom" +#define XmNmarginHeight "marginHeight" +#define XmNmarginLeft "marginLeft" +#define XmNmarginRight "marginRight" +#define XmNmarginTop "marginTop" +#define XmNmarginWidth "marginWidth" +#define XmNmask "mask" +#define XmNmaxLength "maxLength" +#define XmNmaximum "maximum" +#define XmNmenuAccelerator "menuAccelerator" +#define XmNmenuBar "menuBar" +#define XmNmenuCursor "menuCursor" +#define XmNmenuHelpWidget "menuHelpWidget" +#define XmNmenuHistory "menuHistory" +#define XmNmenuPost "menuPost" +#define XmNmessageAlignment "messageAlignment" +#define XmNmessageProc "messageProc" +#define XmNmessageString "messageString" +#define XmNmessageWindow "messageWindow" +#define XmNminimizeButtons "minimizeButtons" +#define XmNminimum "minimum" +#define XmNmnemonic "mnemonic" +#define XmNmnemonicCharSet "mnemonicCharSet" +#define XmNmodifyVerifyCallback "modifyVerifyCallback" +#define XmNmodifyVerifyCallbackWcs "modifyVerifyCallbackWcs" +#define XmNmotionVerifyCallback "motionVerifyCallback" +#define XmNmoveOpaque "moveOpaque" +#define XmNmultiClick "multiClick" +#define XmNmultipleSelectionCallback "multipleSelectionCallback" +#define XmNmustMatch "mustMatch" +#define XmNmwmDecorations "mwmDecorations" +#define XmNmwmFunctions "mwmFunctions" +#define XmNmwmInputMode "mwmInputMode" +#define XmNmwmMenu "mwmMenu" +#define XmNmwmMessages "mwmMessages" +#define XmNnavigationType "navigationType" +#define XmNneedsMotion "needsMotion" +#define XmNnoMatchCallback "noMatchCallback" +#define XmNnoMatchString "noMatchString" +#define XmNnoResize "noResize" +#define XmNnoneCursorForeground "noneCursorForeground" +#define XmNnotifyProc "notifyProc" +#define XmNnumColumns "numColumns" +#define XmNnumDropRectangles "numDropRectangles" +#define XmNnumDropTransfers "numDropTransfers" +#define XmNnumExportTargets "numExportTargets" +#define XmNnumImportTargets "numImportTargets" +#define XmNnumRectangles "numRectangles" +#define XmNoffsetX "offsetX" +#define XmNoffsetY "offsetY" +#define XmNokCallback "okCallback" +#define XmNokLabelString "okLabelString" +#define XmNoperationChangedCallback "operationChangedCallback" +#define XmNoperationCursorIcon "operationCursorIcon" +#define XmNoptionLabel "optionLabel" +#define XmNoptionMnemonic "optionMnemonic" +#define XmNoutputCreate "outputCreate" +#define XmNpacking "packing" +#define XmNpageDecrementCallback "pageDecrementCallback" +#define XmNpageIncrement "pageIncrement" +#define XmNpageIncrementCallback "pageIncrementCallback" +#define XmNpaneMaximum "paneMaximum" +#define XmNpaneMinimum "paneMinimum" +#define XmNpattern "pattern" +#define XmNpendingDelete "pendingDelete" +#define XmNpopupEnabled "popupEnabled" +#define XmNpositionIndex "positionIndex" +#define XmNpostFromButton "postFromButton" +#define XmNpostFromCount "postFromCount" +#define XmNpostFromList "postFromList" +#define XmNpreeditType "preeditType" +#define XmNprocessingDirection "processingDirection" +#define XmNpromptString "promptString" +#define XmNprotocolCallback "protocolCallback" +#define XmNpushButtonEnabled "pushButtonEnabled" +#define XmNqualifySearchDataProc "qualifySearchDataProc" +#define XmNradioAlwaysOne "radioAlwaysOne" +#define XmNradioBehavior "radioBehavior" +#define XmNrealizeCallback "realizeCallback" +#define XmNrecomputeSize "recomputeSize" +#define XmNrectangles "rectangles" +#define XmNrefigureMode "refigureMode" +#define XmNrepeatDelay "repeatDelay" +#define XmNresizable "resizable" +#define XmNresizeCallback "resizeCallback" +#define XmNresizeHeight "resizeHeight" +#define XmNresizePolicy "resizePolicy" +#define XmNresizeWidth "resizeWidth" +#define XmNrightAttachment "rightAttachment" +#define XmNrightOffset "rightOffset" +#define XmNrightPosition "rightPosition" +#define XmNrightWidget "rightWidget" +#define XmNrowColumnType "rowColumnType" +#define XmNrows "rows" +#define XmNrubberPositioning "rubberPositioning" +#define XmNsashHeight "sashHeight" +#define XmNsashIndent "sashIndent" +#define XmNsashShadowThickness "sashShadowThickness" +#define XmNsashWidth "sashWidth" +#define XmNscaleHeight "scaleHeight" +#define XmNscaleMultiple "scaleMultiple" +#define XmNscaleWidth "scaleWidth" +#define XmNscrollBarDisplayPolicy "scrollBarDisplayPolicy" +#define XmNscrollBarPlacement "scrollBarPlacement" +#define XmNscrollHorizontal "scrollHorizontal" +#define XmNscrollLeftSide "scrollLeftSide" +#define XmNscrollTopSide "scrollTopSide" +#define XmNscrollVertical "scrollVertical" +#define XmNscrolledWindowMarginHeight "scrolledWindowMarginHeight" +#define XmNscrolledWindowMarginWidth "scrolledWindowMarginWidth" +#define XmNscrollingPolicy "scrollingPolicy" +#define XmNselectColor "selectColor" +#define XmNselectInsensitivePixmap "selectInsensitivePixmap" +#define XmNselectPixmap "selectPixmap" +#define XmNselectThreshold "selectThreshold" +#define XmNselectedItemCount "selectedItemCount" +#define XmNselectedItems "selectedItems" +#define XmNselectionArrayCount "selectionArrayCount" +#define XmNselectionLabelString "selectionLabelString" +#define XmNselectionPolicy "selectionPolicy" +#define XmNseparatorOn "separatorOn" +#define XmNseparatorType "separatorType" +#define XmNset "set" +#define XmNshadow "shadow" +#define XmNshadowThickness "shadowThickness" +#define XmNshadowType "shadowType" +#define XmNshellUnitType "shellUnitType" +#define XmNshowArrows "showArrows" +#define XmNshowAsDefault "showAsDefault" +#define XmNshowSeparator "showSeparator" +#define XmNshowValue "showValue" +#define XmNsimpleCallback "simpleCallback" +#define XmNsingleSelectionCallback "singleSelectionCallback" +#define XmNsizePolicy "sizePolicy" +#define XmNskipAdjust "skipAdjust" +#define XmNsliderSize "sliderSize" +#define XmNsource "source" +#define XmNsourceCursorIcon "sourceCursorIcon" +#define XmNsourceIsExternal "sourceIsExternal" +#define XmNsourcePixmapIcon "sourcePixmapIcon" +#define XmNsourceWidget "sourceWidget" +#define XmNsourceWindow "sourceWindow" +#define XmNspacing "spacing" +#define XmNspotLocation "spotLocation" +#define XmNstartTime "startTime" +#define XmNstateCursorIcon "stateCursorIcon" +#define XmNstringDirection "stringDirection" +#define XmNsubMenuId "subMenuId" +#define XmNsymbolPixmap "symbolPixmap" +#define XmNtearOffMenuActivateCallback "tearOffMenuActivateCallback" +#define XmNtearOffMenuDeactivateCallback "tearOffMenuDeactivateCallback" +#define XmNtearOffModel "tearOffModel" +#define XmNtextAccelerators "textAccelerators" +#define XmNtextColumns "textColumns" +#define XmNtextFontList "textFontList" +#define XmNtextString "textString" +#define XmNtextTranslations "textTranslations" +#define XmNtextValue "textValue" +#define XmNtitleString "titleString" +#define XmNtoBottomCallback "toBottomCallback" +#define XmNtoPositionCallback "toPositionCallback" +#define XmNtoTopCallback "toTopCallback" +#define XmNtopAttachment "topAttachment" +#define XmNtopCharacter "topCharacter" +#define XmNtopItemPosition "topItemPosition" +#define XmNtopLevelEnterCallback "topLevelEnterCallback" +#define XmNtopLevelLeaveCallback "topLevelLeaveCallback" +#define XmNtopOffset "topOffset" +#define XmNtopPosition "topPosition" +#define XmNtopShadowColor "topShadowColor" +#define XmNtopShadowPixmap "topShadowPixmap" +#define XmNtopWidget "topWidget" +#define XmNtransferProc "transferProc" +#define XmNtransferStatus "transferStatus" +#define XmNtraversalCallback "traversalCallback" +#define XmNtraversalOn "traversalOn" +#define XmNtraversalType "traversalType" +#define XmNtraverseObscuredCallback "traverseObscuredCallback" +#define XmNtreeUpdateProc "treeUpdateProc" +#define XmNtroughColor "troughColor" +#define XmNunitType "unitType" +#define XmNunmapCallback "unmapCallback" +#define XmNunpostBehavior "unpostBehavior" +#define XmNunselectPixmap "unselectPixmap" +#define XmNupdateSliderSize "updateSliderSize" +#define XmNuseAsyncGeometry "useAsyncGeometry" +#define XmNuserData "userData" +#define XmNvalidCursorForeground "validCursorForeground" +#define XmNvalueChangedCallback "valueChangedCallback" +#define XmNvalueWcs "valueWcs" +#define XmNverifyBell "verifyBell" +#define XmNverticalFontUnit "verticalFontUnit" +#define XmNverticalScrollBar "verticalScrollBar" +#define XmNverticalSpacing "verticalSpacing" +#define XmNvisibleItemCount "visibleItemCount" +#define XmNvisibleWhenOff "visibleWhenOff" +#define XmNvisualPolicy "visualPolicy" +#define XmNwhichButton "whichButton" +#define XmNwordWrap "wordWrap" +#define XmNworkWindow "workWindow" +#define XmRAlignment "Alignment" +#define XmRAnimationMask "AnimationMask" +#define XmRAnimationPixmap "AnimationPixmap" +#define XmRAnimationStyle "AnimationStyle" +#define XmRArrowDirection "ArrowDirection" +#define XmRAtomList "AtomList" +#define XmRAttachment "Attachment" +#define XmRAudibleWarning "AudibleWarning" +#define XmRAvailability "Availability" +#define XmRBackgroundPixmap "BackgroundPixmap" +#define XmRBlendModel "BlendModel" +#define XmRBooleanDimension "BooleanDimension" +#define XmRBottomShadowPixmap "BottomShadowPixmap" +#define XmRButtonType "ButtonType" +#define XmRCallbackProc "CallbackProc" +#define XmRChar "Char" +#define XmRCharSetTable "CharSetTable" +#define XmRChildHorizontalAlignment "ChildHorizontalAlignment" +#define XmRChildPlacement "ChildPlacement" +#define XmRChildType "ChildType" +#define XmRChildVerticalAlignment "ChildVerticalAlignment" +#define XmRCommandWindowLocation "CommandWindowLocation" +#define XmRCompoundText "CompoundText" +#define XmRDefaultButtonType "DefaultButtonType" +#define XmRDeleteResponse "DeleteResponse" +#define XmRDialogStyle "DialogStyle" +#define XmRDialogType "DialogType" +#define XmRDoubleClickInterval "DoubleClickInterval" +#define XmRDragInitiatorProtocolStyle "DragInitiatorProtocolStyle" +#define XmRDragReceiverProtocolStyle "DragReceiverProtocolStyle" +#define XmRDropSiteActivity "DropSiteActivity" +#define XmRDropSiteOperations "DropSiteOperations" +#define XmRDropSiteType "DropSiteType" +#define XmRDropTransfers "DropTransfers" +#define XmRExtensionType "ExtensionType" +#define XmRFileTypeMask "FileTypeMask" +#define XmRFontList "FontList" +#define XmRGadgetPixmap "GadgetPixmap" +#define XmRHighlightPixmap "HighlightPixmap" +#define XmRHorizontalDimension "HorizontalDimension" +#define XmRHorizontalInt "HorizontalInt" +#define XmRHorizontalPosition "HorizontalPosition" +#define XmRIconAttachment "IconAttachment" +#define XmRImportTargets "ImportTargets" +#define XmRIndicatorType "IndicatorType" +#define XmRItemCount "ItemCount" +#define XmRItems "Items" +#define XmRKeySym "KeySym" +#define XmRKeySymTable "KeySymTable" +#define XmRKeyboardFocusPolicy "KeyboardFocusPolicy" +#define XmRLabelType "LabelType" +#define XmRListMarginHeight "ListMarginHeight" +#define XmRListMarginWidth "ListMarginWidth" +#define XmRListSizePolicy "ListSizePolicy" +#define XmRListSpacing "ListSpacing" +#define XmRManBottomShadowPixmap "ManBottomShadowPixmap" +#define XmRManForegroundPixmap "ManForegroundPixmap" +#define XmRManHighlightPixmap "ManHighlightPixmap" +#define XmRManTopShadowPixmap "ManTopShadowPixmap" +#define XmRMenuWidget "MenuWidget" +#define XmRMnemonic "Mnemonic" +#define XmRMultiClick "MultiClick" +#define XmRNavigationType "NavigationType" +#define XmRPacking "Packing" +#define XmRPrimForegroundPixmap "PrimForegroundPixmap" +#define XmRProc "Proc" +#define XmRProcessingDirection "ProcessingDirection" +#define XmRRectangleList "RectangleList" +#define XmRResizePolicy "ResizePolicy" +#define XmRRowColumnType "RowColumnType" +#define XmRScrollBarDisplayPolicy "ScrollBarDisplayPolicy" +#define XmRScrollBarPlacement "ScrollBarPlacement" +#define XmRScrollingPolicy "ScrollingPolicy" +#define XmRSelectedItemCount "SelectedItemCount" +#define XmRSelectedItems "SelectedItems" +#define XmRSelectionPolicy "SelectionPolicy" +#define XmRSelectionType "SelectionType" +#define XmRSeparatorType "SeparatorType" +#define XmRShadowType "ShadowType" +#define XmRShellHorizDim "ShellHorizDim" +#define XmRShellHorizPos "ShellHorizPos" +#define XmRShellUnitType "ShellUnitType" +#define XmRShellVertDim "ShellVertDim" +#define XmRShellVertPos "ShellVertPos" +#define XmRSizePolicy "SizePolicy" +#define XmRStringDirection "StringDirection" +#define XmRTearOffModel "TearOffModel" +#define XmRTopShadowPixmap "TopShadowPixmap" +#define XmRTransferStatus "TransferStatus" +#define XmRTraversalType "TraversalType" +#define XmRUnitType "UnitType" +#define XmRUnpostBehavior "UnpostBehavior" +#define XmRValueWcs "ValueWcs" +#define XmRVerticalAlignment "VerticalAlignment" +#define XmRVerticalDimension "VerticalDimension" +#define XmRVerticalInt "VerticalInt" +#define XmRVerticalPosition "VerticalPosition" +#define XmRVirtualBinding "VirtualBinding" +#define XmRVisibleItemCount "VisibleItemCount" +#define XmRVisualPolicy "VisualPolicy" +#define XmRWhichButton "WhichButton" +#define XmRXmBackgroundPixmap "XmBackgroundPixmap" +#define XmRXmString "XmString" +#define XmRXmStringCharSet "XmStringCharSet" +#define XmRXmStringTable "XmStringTable" +#define XmVosfActivate "osfActivate" +#define XmVosfAddMode "osfAddMode" +#define XmVosfBackSpace "osfBackSpace" +#define XmVosfBeginLine "osfBeginLine" +#define XmVosfCancel "osfCancel" +#define XmVosfClear "osfClear" +#define XmVosfCopy "osfCopy" +#define XmVosfCut "osfCut" +#define XmVosfDelete "osfDelete" +#define XmVosfDown "osfDown" +#define XmVosfEndLine "osfEndLine" +#define XmVosfHelp "osfHelp" +#define XmVosfInsert "osfInsert" +#define XmVosfLeft "osfLeft" +#define XmVosfMenu "osfMenu" +#define XmVosfMenuBar "osfMenuBar" +#define XmVosfPageDown "osfPageDown" +#define XmVosfPageLeft "osfPageLeft" +#define XmVosfPageRight "osfPageRight" +#define XmVosfPageUp "osfPageUp" +#define XmVosfPaste "osfPaste" +#define XmVosfPrimaryPaste "osfPrimaryPaste" +#define XmVosfQuickPaste "osfQuickPaste" +#define XmVosfRight "osfRight" +#define XmVosfSelect "osfSelect" +#define XmVosfUndo "osfUndo" +#define XmVosfUp "osfUp" +#define XmSFONTLIST_DEFAULT_TAG_STRING "FONTLIST_DEFAULT_TAG_STRING" +#define XmSXmFONTLIST_DEFAULT_TAG_STRING "XmFONTLIST_DEFAULT_TAG_STRING" +#define XmRTopItemPosition "TopItemPosition" +#define XmNtearOffTitle "tearOffTitle" +#define XmCTearOffTitle "TearOffTitle" +#define XmNpopupHandlerCallback "popupHandlerCallback" +#define XmNconvertCallback "convertCallback" +#define XmNdestinationCallback "destinationCallback" +#define XmNselectedItem "selectedItem" +#define XmCSelectedItem "SelectedItem" +#define XmNselectionCallback "selectionCallback" +#define XmNmatchBehavior "matchBehavior" +#define XmCMatchBehavior "MatchBehavior" +#define XmNnoFontCallback "noFontCallback" +#define XmNtextPath "textPath" +#define XmNeditingPath "editingPath" +#define XmCEditingPath "EditingPath" +#define XmNbidirectionalCursor "bidirectionalCursor" +#define XmCBidirectionalCursor "BidirectionalCursor" +#define XmNcollapsedStatePixmap "collapsedStatePixmap" +#define XmNdetailColumnHeading "detailColumnHeading" +#define XmNdetailCount "detailCount" +#define XmNdetailTabList "detailTabList" +#define XmNexpandedStatePixmap "expandedStatePixmap" +#define XmNlargeCellHeight "largeCellHeight" +#define XmNlargeCellWidth "largeCellWidth" +#define XmNlayoutType "layoutType" +#define XmNoutlineIndentation "outlineIndentation" +#define XmNoutlineLineStyle "outlineLineStyle" +#define XmNprimaryOwnership "primaryOwnership" +#define XmNselectionTechnique "selectionTechnique" +#define XmNsmallCellHeight "smallCellHeight" +#define XmNsmallCellWidth "smallCellWidth" +#define XmNspatialStyle "spatialStyle" +#define XmNentryParent "entryParent" +#define XmNlargeIconX "largeIconX" +#define XmNlargeIconY "largeIconY" +#define XmNsmallIconX "smallIconX" +#define XmNsmallIconY "smallIconY" +#define XmCCollapsedStatePixmap "CollapsedStatePixmap" +#define XmCDetailColumnHeading "DetailColumnHeading" +#define XmCDetailCount "DetailCount" +#define XmCDetailMask "DetailMask" +#define XmCEntryViewType "EntryViewType" +#define XmCLineStyle "LineStyle" +#define XmCDetailTabList "DetailTabList" +#define XmCExpandedStatePixmap "ExpandedStatePixmap" +#define XmCIncludeModel "IncludeModel" +#define XmCCellHeight "CellHeight" +#define XmCCellWidth "CellWidth" +#define XmCLayoutType "LayoutType" +#define XmCOutlineIndentation "OutlineIndentation" +#define XmCPlaceModel "PlaceModel" +#define XmCPrimaryOwnership "PrimaryOwnership" +#define XmCSelectionTechnique "SelectionTechnique" +#define XmCSpatialStyle "SpatialStyle" +#define XmCEntryDetail "EntryDetail" +#define XmCExpandState "ExpandState" +#define XmNlargeIcon "largeIcon" +#define XmNlargeIconMask "largeIconMask" +#define XmNlargeIconPixmap "largeIconPixmap" +#define XmNsmallIcon "smallIcon" +#define XmNsmallIconMask "smallIconMask" +#define XmNsmallIconPixmap "smallIconPixmap" +#define XmCIcon "Icon" +#define XmCViewType "ViewType" +#define XmCVisualEmphasis "VisualEmphasis" +#define XmNcurrentPageNumber "currentPageNumber" +#define XmNfirstPageNumber "firstPageNumber" +#define XmNlastPageNumber "lastPageNumber" +#define XmNbackPagePlacement "backPagePlacement" +#define XmNbackPageNumber "backPageNumber" +#define XmNbackPageSize "backPageSize" +#define XmNbackPageForeground "backPageForeground" +#define XmNbackPageBackground "backPageBackground" +#define XmNframeBackground "frameBackground" +#define XmNbindingType "bindingType" +#define XmNbindingPixmap "bindingPixmap" +#define XmNbindingWidth "bindingWidth" +#define XmNmajorTabSpacing "majorTabSpacing" +#define XmNminorTabSpacing "minorTabSpacing" +#define XmNinnerMarginWidth "innerMarginWidth" +#define XmNinnerMarginHeight "innerMarginHeight" +#define XmNframeShadowThickness "frameShadowThickness" +#define XmNpageNumber "pageNumber" +#define XmCCurrentPageNumber "CurrentPageNumber" +#define XmCFirstPageNumber "FirstPageNumber" +#define XmCLastPageNumber "LastPageNumber" +#define XmCBackPagePlacement "BackPagePlacement" +#define XmCBackPageNumber "BackPageNumber" +#define XmCBackPageSize "BackPageSize" +#define XmCBackPageForeground "BackPageForeground" +#define XmCBackPageBackground "BackPageBackground" +#define XmCFrameBackground "FrameBackground" +#define XmCBindingType "BindingType" +#define XmCBindingPixmap "BindingPixmap" +#define XmCBindingWidth "BindingWidth" +#define XmCMajorTabSpacing "MajorTabSpacing" +#define XmCMinorTabSpacing "MinorTabSpacing" +#define XmCInnerMarginWidth "InnerMarginWidth" +#define XmCInnerMarginHeight "InnerMarginHeight" +#define XmCPageChangeCallback "PageChangeCallback" +#define XmCPageNumber "PageNumber" +#define XmRArrowLayout "ArrowLayout" +#define XmRArrowSensitivity "ArrowSensitivity" +#define XmRSpinBoxChildType "SpinBoxChildType" +#define XmNarrowLayout "arrowLayout" +#define XmCArrowLayout "ArrowLayout" +#define XmNarrowSensitivity "arrowSensitivity" +#define XmCArrowSensitivity "ArrowSensitivity" +#define XmNdefaultArrowSensitivity "defaultArrowSensitivity" +#define XmCDefaultArrowSensitivity "DefaultArrowSensitivity" +#define XmNarrowSize "arrowSize" +#define XmCArrowSize "ArrowSize" +#define XmNspinBoxChildType "spinBoxChildType" +#define XmCSpinBoxChildType "SpinBoxChildType" +#define XmNposition "position" +#define XmNnumValues "numValues" +#define XmCNumValues "NumValues" +#define XmNvalues "values" +#define XmCValues "Values" +#define XmNminimumValue "minimumValue" +#define XmCMinimumValue "MinimumValue" +#define XmNmaximumValue "maximumValue" +#define XmCMaximumValue "MaximumValue" +#define XmNincrementValue "incrementValue" +#define XmCIncrementValue "IncrementValue" +#define XmRAutomaticSelection "AutomaticSelection" +#define XmRLineStyle "LineStyle" +#define XmREntryViewType "EntryViewType" +#define XmRDirection "Direction" +#define XmRLayoutType "LayoutType" +#define XmRPrimaryOwnership "PrimaryOwnership" +#define XmRSelectionTechnique "SelectionTechnique" +#define XmRSpatialStyle "SpatialStyle" +#define XmRTabList "TabList" +#define XmRViewType "ViewType" +#define XmRVisualEmphasis "VisualEmphasis" +#define XmRBindingType "BindingType" +#define XmRNBChildType "NBChildType" +#define XmNentryViewType "entryViewType" +#define XmNinsensitiveStippleBitmap "insensitiveStippleBitmap" +#define XmNlayoutDirection "layoutDirection" +#define XmNviewType "viewType" +#define XmNvisualEmphasis "visualEmphasis" +#define XmCLayoutDirection "LayoutDirection" +#define XmNsnapBackMultiple "snapBackMultiple" +#define XmNslidingMode "slidingMode" +#define XmNsliderVisual "sliderVisual" +#define XmNautoDragModel "autoDragModel" +#define XmNcolorCalculationProc "colorCalculationProc" +#define XmNbitmapConversionModel "bitmapConversionModel" +#define XmNcolorAllocationProc "colorAllocationProc" +#define XmNselectionMode "selectionMode" +#define XmNselectedPositions "selectedPositions" +#define XmNselectedPositionCount "selectedPositionCount" +#define XmCSnapBackMultiple "SnapBackMultiple" +#define XmCSliderVisual "SliderVisual" +#define XmCSlidingMode "SlidingMode" +#define XmCAutoDragModel "AutoDragModel" +#define XmCColorCalculationProc "ColorCalculationProc" +#define XmCBitmapConversionModel "BitmapConversionModel" +#define XmCColorAllocationProc "ColorAllocationProc" +#define XmCInsensitiveStippleBitmap "InsensitiveStippleBitmap" +#define XmCSelectionMode "SelectionMode" +#define XmCSelectedPositions "SelectedPositions" +#define XmCSelectedPositionCount "SelectedPositionCount" +#define XmRSlidingMode "SlidingMode" +#define XmRShowArrows "ShowArrows" +#define XmRSliderVisual "SliderVisual" +#define XmRShowValue "ShowValue" +#define XmRAutoDragModel "AutoDragModel" +#define XmRSWChildType "SWChildType" +#define XmRBitmapConversionModel "BitmapConversionModel" +#define XmRSelectionMode "SelectionMode" +#define XmNinputPolicy "inputPolicy" +#define XmCInputPolicy "InputPolicy" +#define XmRInputPolicy "InputPolicy" +#define XmNtoggleMode "toggleMode" +#define XmCToggleMode "ToggleMode" +#define XmRToggleMode "ToggleMode" +#define XmRIndicatorOn "IndicatorOn" +#define XmRSet "Set" +#define XmNindeterminatePixmap "indeterminatePixmap" +#define XmCIndeterminatePixmap "IndeterminatePixmap" +#define XmNunselectColor "unselectColor" +#define XmCUnselectColor "UnselectColor" +#define XmNselectedPosition "selectedPosition" +#define XmNarrowSpacing "arrowSpacing" +#define XmCArrowSpacing "ArrowSpacing" +#define XmRMatchBehavior "MatchBehavior" +#define XmRComboBoxType "ComboBoxType" +#define XmCSelectedPosition "SelectedPosition" +#define XmNenableWarp "enableWarp" +#define XmCEnableWarp "EnableWarp" +#define XmREnableWarp "EnableWarp" +#define XmNmotifVersion "motifVersion" +#define XmCMotifVersion "MotifVersion" +#define XmNdefaultGlyphPixmap "defaultGlyphPixmap" +#define XmCDefaultGlyphPixmap "DefaultGlyphPixmap" +#define XmCRendition "Rendition" +#define XmNtag "tag" +#define XmCTag "Tag" +#define XmNfontName "fontName" +#define XmCFontName "FontName" +#define XmNfontType "fontType" +#define XmCFontType "FontType" +#define XmRFontType "FontType" +#define XmNloadModel "loadModel" +#define XmCLoadModel "LoadModel" +#define XmRLoadModel "LoadModel" +#define XmNtabList "tabList" +#define XmCTabList "TabList" +#define XmRRenditionPixel "RenditionPixel" +#define XmNunderlineType "underlineType" +#define XmCUnderlineType "UnderlineType" +#define XmNstrikethruType "strikethruType" +#define XmCStrikethruType "StrikethruType" +#define XmRLineType "LineType" +#define XmNrenderTable "renderTable" +#define XmCRenderTable "RenderTable" +#define XmRRenderTable "RenderTable" +#define XmNbuttonRenderTable "buttonRenderTable" +#define XmCButtonRenderTable "ButtonRenderTable" +#define XmRButtonRenderTable "ButtonRenderTable" +#define XmNlabelRenderTable "labelRenderTable" +#define XmCLabelRenderTable "LabelRenderTable" +#define XmRLabelRenderTable "LabelRenderTable" +#define XmNtextRenderTable "textRenderTable" +#define XmCTextRenderTable "TextRenderTable" +#define XmRTextRenderTable "TextRenderTable" +#define XmNdragStartCallback "dragStartCallback" +#define XmNnoRenditionCallback "noRenditionCallback" +#define XmSXmAS_IS "XmAS_IS" +#define XmMIsWhiteSpaceMethod "IsWhiteSpaceMethod" +#define XmMIsScanBreakMethod "IsScanBreakMethod" +#define XmMCharDirection "CharDirection" +#define XmMInitialCharsDirection "InitialCharsDirection" +#define XmNpatternType "patternType" +#define XmNsubstitute "substitute" +#define XmNinvokeParseProc "invokeParseProc" +#define XmNincludeStatus "includeStatus" +#define XmVosfBackTab "osfBackTab" +#define XmVosfBeginData "osfBeginData" +#define XmVosfDeselectAll "osfDeselectAll" +#define XmVosfEndData "osfEndData" +#define XmVosfEscape "osfEscape" +#define XmVosfExtend "osfExtend" +#define XmVosfLeftLine "osfLeftLine" +#define XmVosfNext "osfNext" +#define XmVosfNextField "osfNextField" +#define XmVosfNextMenu "osfNextMenu" +#define XmVosfNextMinor "osfNextMinor" +#define XmVosfPrevField "osfPrevField" +#define XmVosfPrevMenu "osfPrevMenu" +#define XmVosfPrior "osfPrior" +#define XmVosfPriorMinor "osfPriorMinor" +#define XmVosfReselect "osfReselect" +#define XmVosfRestore "osfRestore" +#define XmVosfRightLine "osfRightLine" +#define XmVosfSelectAll "osfSelectAll" +#define XmVosfSwitchDirection "osfSwitchDirection" +#define XmNnotebookChildType "notebookChildType" +#define XmCNotebookChildType "NotebookChildType" +#define XmRNotebookChildType "NotebookChildType" +#define XmNscrolledWindowChildType "scrolledWindowChildType" +#define XmCScrolledWindowChildType "ScrolledWindowChildType" +#define XmRScrolledWindowChildType "ScrolledWindowChildType" +#define XmNselectedObjects "selectedObjects" +#define XmCSelectedObjects "SelectedObjects" +#define XmNselectedObjectCount "selectedObjectCount" +#define XmCSelectedObjectCount "SelectedObjectCount" +#define XmNcomboBoxType "comboBoxType" +#define XmCComboBoxType "ComboBoxType" +#define XmNtabValue "tabValue" +#define XmNoffsetModel "offsetModel" +#define XmNdecimal "decimal" +#define XmNdetail "detail" +#define XmCDetail "Detail" +#define XmNdetailCount "detailCount" +#define XmCDetailCount "DetailCount" +#define XmNcontainerID "containerID" +#define XmCContainerID "ContainerID" +#define XmSCLIENT_WINDOW "CLIENT_WINDOW" +#define XmSCLIP_TEMPORARY "CLIP_TEMPORARY" +#define XmSCLIPBOARD "CLIPBOARD" +#define XmSCOMPOUND_TEXT "COMPOUND_TEXT" +#define XmSDELETE "DELETE" +#define XmSFILE "FILE" +#define XmSFILE_NAME "FILE_NAME" +#define XmSINCR "INCR" +#define XmSINSERT_PROPERTY "INSERT_PROPERTY" +#define XmSINSERT_SELECTION "INSERT_SELECTION" +#define XmSLENGTH "LENGTH" +#define XmSLINK_SELECTION "LINK_SELECTION" +#define XmS_MOTIF_ATOM_0 "_MOTIF_ATOM_0" +#define XmS_MOTIF_BINDINGS "_MOTIF_BINDINGS" +#define XmS_MOTIF_DEFAULT_BINDINGS "_MOTIF_DEFAULT_BINDINGS" +#define XmS_MOTIF_CANCEL_DROP_EFFECT "_MOTIF_CANCEL_DROP_EFFECT" +#define XmS_MOTIF_CLIP_HEADER "_MOTIF_CLIP_HEADER" +#define XmS_MOTIF_CLIP_DATA_REQUEST "_MOTIF_CLIP_DATA_REQUEST" +#define XmS_MOTIF_CLIP_DATA_DELETE "_MOTIF_CLIP_DATA_DELETE" +#define XmS_MOTIF_CLIP_ITEM "_MOTIF_CLIP_ITEM" +#define XmS_MOTIF_CLIP_LOCK "_MOTIF_CLIP_LOCK" +#define XmS_MOTIF_CLIP_LOCK_ACCESS_VALID "_MOTIF_CLIP_LOCK_ACCESS_VALID" +#define XmS_MOTIF_CLIP_MESSAGE "_MOTIF_CLIP_MESSAGE" +#define XmS_MOTIF_CLIP_NEXT_ID "_MOTIF_CLIP_NEXT_ID" +#define XmS_MOTIF_CLIP_TIME "_MOTIF_CLIP_TIME" +#define XmS_MOTIF_CLIPBOARD_TARGETS "_MOTIF_CLIPBOARD_TARGETS" +#define XmS_MOTIF_COMPOUND_STRING "_MOTIF_COMPOUND_STRING" +#define XmS_MOTIF_DEFERRED_CLIPBOARD_TARGETS "_MOTIF_DEFERRED_CLIPBOARD_TARGETS" +#define XmS_MOTIF_DESTINATION "_MOTIF_DESTINATION" +#define XmS_MOTIF_DRAG_OFFSET "_MOTIF_DRAG_OFFSET" +#define XmS_MOTIF_DROP "_MOTIF_DROP" +#define XmS_MOTIF_ENCODING_REGISTRY "_MOTIF_ENCODING_REGISTRY" +#define XmS_MOTIF_EXPORT_TARGETS "_MOTIF_EXPORT_TARGETS" +#define XmS_MOTIF_LOSE_SELECTION "_MOTIF_LOSE_SELECTION" +#define XmS_MOTIF_RENDER_TABLE "_MOTIF_RENDER_TABLE" +#define XmS_MOTIF_WM_QUERY "_MOTIF_WM_QUERY" +#define XmS_MOTIF_WM_ALL_CLIENTS "_MOTIF_WM_ALL_CLIENTS" +#define XmSMULTIPLE "MULTIPLE" +#define XmSNULL "NULL" +#define XmSTARGETS "TARGETS" +#define XmSTEXT "TEXT" +#define XmSTIMESTAMP "TIMESTAMP" +#define XmSWM_STATE "WM_STATE" +#define XmSTRANSFER_SUCCESS "XmTRANSFER_SUCCESS" +#define XmSTRANSFER_FAILURE "XmTRANSFER_FAILURE" +#define XmNpathMode "pathMode" +#define XmRPathMode "PathMode" +#define XmCPathMode "PathMode" +#define XmNfileFilterStyle "fileFilterStyle" +#define XmRFileFilterStyle "FileFilterStyle" +#define XmCFileFilterStyle "FileFilterStyle" +#define XmNdirTextLabelString "dirTextLabelString" +#define XmCDirTextLabelString "DirTextLabelString" +#define XmNenableBtn1Transfer "enableBtn1Transfer" +#define XmCEnableBtn1Transfer "EnableBtn1Transfer" +#define XmNenableButtonTab "enableButtonTab" +#define XmCEnableButtonTab "EnableButtonTab" +#define XmNenableEtchedInMenu "enableEtchedInMenu" +#define XmCEnableEtchedInMenu "EnableEtchedInMenu" +#define XmNdefaultButtonEmphasis "defaultButtonEmphasis" +#define XmCDefaultButtonEmphasis "DefaultButtonEmphasis" +#define XmRDefaultButtonEmphasis "DefaultButtonEmphasis" +#define XmNenableToggleColor "enableToggleColor" +#define XmCEnableToggleColor "EnableToggleColor" +#define XmNenableToggleVisual "enableToggleVisual" +#define XmCEnableToggleVisual "EnableToggleVisual" +#define XmNenableDragIcon "enableDragIcon" +#define XmCEnableDragIcon "EnableDragIcon" +#define XmNenableUnselectableDrag "enableUnselectableDrag" +#define XmCEnableUnselectableDrag "EnableUnselectableDrag" +#define XmNdragOverActiveMode "dragOverActiveMode" +#define XmCDragOverActiveMode "DragOverActiveMode" +#define XmNinstallColormap "installColormap" +#define XmCInstallColormap "InstallColormap" +#define XmCOwnerEvents "OwnerEvents" +#define XmNownerEvents "ownerEvents" +#define XmCGrabStyle "GrabStyle" +#define XmNgrabStyle "grabStyle" +#define XmNforegroundState "foregroundState" +#define XmNbackgroundState "backgroundState" +#define XmCGroundState "GroundState" +#define XmRGroundState "GroundState" +#define XmRSelectColor "SelectColor" +#define XmRLargeIconPixmap "LargeIconPixmap" +#define XmRSmallIconPixmap "SmallIconPixmap" +#define XmNoutlineState "outlineState" +#define XmCOutlineState "OutlineState" +#define XmROutlineState "OutlineState" +#define XmNspatialIncludeModel "spatialIncludeModel" +#define XmCSpatialIncludeModel "SpatialIncludeModel" +#define XmRSpatialIncludeModel "SpatialIncludeModel" +#define XmNspatialResizeModel "spatialResizeModel" +#define XmCSpatialResizeModel "SpatialResizeModel" +#define XmRSpatialResizeModel "SpatialResizeModel" +#define XmNspatialSnapModel "spatialSnapModel" +#define XmCSpatialSnapModel "SpatialSnapModel" +#define XmRSpatialSnapModel "SpatialSnapModel" +#define XmNdetailColumnHeadingCount "detailColumnHeadingCount" +#define XmCDetailColumnHeadingCount "DetailColumnHeadingCount" +#define XmNdetailOrder "detailOrder" +#define XmCDetailOrder "DetailOrder" +#define XmRCardinalList "CardinalList" +#define XmNdetailOrderCount "detailOrderCount" +#define XmCDetailOrderCount "DetailOrderCount" +#define XmNoutlineColumnWidth "outlineColumnWidth" +#define XmCOutlineColumnWidth "OutlineColumnWidth" +#define XmNoutlineChangedCallback "outlineChangedCallback" +#define XmCOutlineChangedCallback "OutlineChangedCallback" +#define XmNoutlineButtonPolicy "outlineButtonPolicy" +#define XmCOutlineButtonPolicy "OutlineButtonPolicy" +#define XmROutlineButtonPolicy "OutlineButtonPolicy" +#define XmCDefaultVirtualBindings "DefaultVirtualBindings" +#define XmNdefaultVirtualBindings "defaultVirtualBindings" +#define XmCResizable "Resizable" +#define XmRDynamicPixmap "DynamicPixmap" +#define XmNpageChangedCallback "pageChangedCallback" +#define XmNarea "area" +#define XmNdetailShadowThickness "detailShadowThickness" +#define XmNsliderMark "sliderMark" +#define XmCSliderMark "SliderMark" +#define XmRSliderMark "SliderMark" +#define XmREnableBtn1Transfer "EnableBtn1Transfer" +#define XmNrenditionBackground "renditionBackground" +#define XmNrenditionForeground "renditionForeground" +#define XmCRenditionBackground "RenditionBackground" +#define XmCRenditionForeground "RenditionForeground" +#define XmNindeterminateInsensitivePixmap "indeterminateInsensitivePixmap" +#define XmCIndeterminateInsensitivePixmap "IndeterminateInsensitivePixmap" +#define XmNframeChildType "frameChildType" +#define XmCFrameChildType "FrameChildType" +#define XmNtextField "textField" +#define XmCTextField "TextField" +#define XmNenableThinThickness "enableThinThickness" +#define XmCEnableThinThickness "EnableThinThickness" +#define XmNprimaryColorSetId "primaryColorSetId" +#define XmCPrimaryColorSetId "PrimaryColorSetId" +#define XmNsecondaryColorSetId "secondaryColorSetId" +#define XmCSecondaryColorSetId "SecondaryColorSetId" +#define XmNtextColorSetId "textColorSetId" +#define XmCTextColorSetId "TextColorSetId" +#define XmNactiveColorSetId "activeColorSetId" +#define XmCActiveColorSetId "ActiveColorSetId" +#define XmNinactiveColorSetId "inactiveColorSetId" +#define XmCInactiveColorSetId "InactiveColorSetId" +#define XmNuseColorObj "useColorObj" +#define XmCUseColorObj "UseColorObj" +#define XmNuseTextColor "useTextColor" +#define XmCUseTextColor "UseTextColor" +#define XmNuseTextColorForList "useTextColorForList" +#define XmCUseTextColorForList "UseTextColorForList" +#define XmNuseMask "useMask" +#define XmCUseMask "UseMask" +#define XmNuseMultiColorIcons "useMultiColorIcons" +#define XmCUseMultiColorIcons "UseMultiColorIcons" +#define XmNuseIconFileCache "useIconFileCache" +#define XmCUseIconFileCache "UseIconFileCache" +#define XmSPIXEL_SET "Pixel Sets" +#define XmSCUSTOMIZE_DATA "Customize Data:" +#define XmSCOLOR_SRV_NAME "ColorServer" +#define XmNlist "list" +#define XmCList "List" +#define XmNarrowOrientation "arrowOrientation" +#define XmCArrowOrientation "ArrowOrientation" +#define XmRArrowOrientation "ArrowOrientation" +#define XmNpositionType "positionType" +#define XmCPositionType "PositionType" +#define XmRPositionType "PositionType" +#define XmNwrap "wrap" +#define XmCWrap "Wrap" +#define XmNpositionMode "positionMode" +#define XmCPositionMode "PositionMode" +#define XmRPositionMode "PositionMode" +#define XmNprintOrientation "printOrientation" +#define XmCPrintOrientation "PrintOrientation" +#define XmNprintOrientations "printOrientations" +#define XmCPrintOrientations "PrintOrientations" +#define XmNprintResolution "printResolution" +#define XmCPrintResolution "PrintResolution" +#define XmNprintResolutions "printResolutions" +#define XmCPrintResolutions "PrintResolutions" +#define XmNdefaultPixmapResolution "defaultPixmapResolution" +#define XmCDefaultPixmapResolution "DefaultPixmapResolution" +#define XmNstartJobCallback "startJobCallback" +#define XmNendJobCallback "endJobCallback" +#define XmNpageSetupCallback "pageSetupCallback" +#define XmNpdmNotificationCallback "pdmNotificationCallback" +#define XmNminX "minX" +#define XmNminY "minY" +#define XmNmaxX "maxX" +#define XmNmaxY "maxY" +#define XmCMinX "MinX" +#define XmCMinY "MinY" +#define XmCMaxX "MaxX" +#define XmCMaxY "MaxY" +#define XmNpreeditStartCallback "preeditStartCallback" +#define XmNpreeditDoneCallback "preeditDoneCallback" +#define XmNpreeditDrawCallback "preeditDrawCallback" +#define XmNpreeditCaretCallback "preeditCaretCallback" +#define XmNverifyPreedit "verifyPreedit" +#define XmCVerifyPreedit "VerifyPreedit" +#define XmNenableMultiKeyBindings "enableMultiKeyBindings" +#define XmCEnableMultiKeyBindings "EnableMultiKeyBindings" +#define XmRButtonFontList "ButtonFontList" +#define XmRLabelFontList "LabelFontList" +#define XmRTextFontList "TextFontList" +#define XmSPIXEL_SET_PROP "SDT Pixel Set" +#define XmS50_foreground "50_foreground" +#define XmSunspecified_pixmap "unspecified_pixmap" +#else +externalref _XmConst char _XmStrings[]; +#ifndef XmS +#define XmS ((char*)&_XmStrings[0]) +#endif +#ifndef XmCAccelerator +#define XmCAccelerator ((char*)&_XmStrings[1]) +#endif +#ifndef XmCAcceleratorText +#define XmCAcceleratorText ((char*)&_XmStrings[13]) +#endif +#ifndef XmCAdjustLast +#define XmCAdjustLast ((char*)&_XmStrings[29]) +#endif +#ifndef XmCAdjustMargin +#define XmCAdjustMargin ((char*)&_XmStrings[40]) +#endif +#ifndef XmCAlignment +#define XmCAlignment ((char*)&_XmStrings[53]) +#endif +#ifndef XmCAllowOverlap +#define XmCAllowOverlap ((char*)&_XmStrings[63]) +#endif +#ifndef XmCAllowUnusedSpace +#define XmCAllowUnusedSpace ((char*)&_XmStrings[76]) +#endif +#ifndef XmCAnimationMask +#define XmCAnimationMask ((char*)&_XmStrings[93]) +#endif +#ifndef XmCAnimationPixmap +#define XmCAnimationPixmap ((char*)&_XmStrings[107]) +#endif +#ifndef XmCAnimationPixmapDepth +#define XmCAnimationPixmapDepth ((char*)&_XmStrings[123]) +#endif +#ifndef XmCAnimationStyle +#define XmCAnimationStyle ((char*)&_XmStrings[144]) +#endif +#ifndef XmCApplyLabelString +#define XmCApplyLabelString ((char*)&_XmStrings[159]) +#endif +#ifndef XmCArmCallback +#define XmCArmCallback ((char*)&_XmStrings[176]) +#endif +#ifndef XmCArmColor +#define XmCArmColor ((char*)&_XmStrings[188]) +#endif +#ifndef XmCArmPixmap +#define XmCArmPixmap ((char*)&_XmStrings[197]) +#endif +#ifndef XmCArrowDirection +#define XmCArrowDirection ((char*)&_XmStrings[207]) +#endif +#ifndef XmCAttachment +#define XmCAttachment ((char*)&_XmStrings[222]) +#endif +#ifndef XmCAudibleWarning +#define XmCAudibleWarning ((char*)&_XmStrings[233]) +#endif +#ifndef XmCAutoShowCursorPosition +#define XmCAutoShowCursorPosition ((char*)&_XmStrings[248]) +#endif +#ifndef XmCAutoUnmanage +#define XmCAutoUnmanage ((char*)&_XmStrings[271]) +#endif +#ifndef XmCAutomaticSelection +#define XmCAutomaticSelection ((char*)&_XmStrings[284]) +#endif +#ifndef XmCAvailability +#define XmCAvailability ((char*)&_XmStrings[303]) +#endif +#ifndef XmCBackgroundPixmap +#define XmCBackgroundPixmap ((char*)&_XmStrings[316]) +#endif +#ifndef XmCBlendModel +#define XmCBlendModel ((char*)&_XmStrings[333]) +#endif +#ifndef XmCBlinkRate +#define XmCBlinkRate ((char*)&_XmStrings[344]) +#endif +#ifndef XmCBottomShadowColor +#define XmCBottomShadowColor ((char*)&_XmStrings[354]) +#endif +#ifndef XmCBottomShadowPixmap +#define XmCBottomShadowPixmap ((char*)&_XmStrings[372]) +#endif +#ifndef XmCButtonAcceleratorText +#define XmCButtonAcceleratorText ((char*)&_XmStrings[391]) +#endif +#ifndef XmCButtonAccelerators +#define XmCButtonAccelerators ((char*)&_XmStrings[413]) +#endif +#ifndef XmCButtonCount +#define XmCButtonCount ((char*)&_XmStrings[432]) +#endif +#ifndef XmCButtonFontList +#define XmCButtonFontList ((char*)&_XmStrings[444]) +#endif +#ifndef XmCButtonMnemonicCharSets +#define XmCButtonMnemonicCharSets ((char*)&_XmStrings[459]) +#endif +#ifndef XmCButtonMnemonics +#define XmCButtonMnemonics ((char*)&_XmStrings[482]) +#endif +#ifndef XmCButtonSet +#define XmCButtonSet ((char*)&_XmStrings[498]) +#endif +#ifndef XmCButtonType +#define XmCButtonType ((char*)&_XmStrings[508]) +#endif +#ifndef XmCButtons +#define XmCButtons ((char*)&_XmStrings[519]) +#endif +#ifndef XmCCancelLabelString +#define XmCCancelLabelString ((char*)&_XmStrings[527]) +#endif +#ifndef XmCChildHorizontalAlignment +#define XmCChildHorizontalAlignment ((char*)&_XmStrings[545]) +#endif +#ifndef XmCChildHorizontalSpacing +#define XmCChildHorizontalSpacing ((char*)&_XmStrings[570]) +#endif +#ifndef XmCChildPlacement +#define XmCChildPlacement ((char*)&_XmStrings[593]) +#endif +#ifndef XmCChildType +#define XmCChildType ((char*)&_XmStrings[608]) +#endif +#ifndef XmCChildVerticalAlignment +#define XmCChildVerticalAlignment ((char*)&_XmStrings[618]) +#endif +#ifndef XmCChildren +#define XmCChildren ((char*)&_XmStrings[641]) +#endif +#ifndef XmCClientData +#define XmCClientData ((char*)&_XmStrings[650]) +#endif +#ifndef XmCClipWindow +#define XmCClipWindow ((char*)&_XmStrings[661]) +#endif +#ifndef XmCColumns +#define XmCColumns ((char*)&_XmStrings[672]) +#endif +#ifndef XmCCommandWindow +#define XmCCommandWindow ((char*)&_XmStrings[680]) +#endif +#ifndef XmCCommandWindowLocation +#define XmCCommandWindowLocation ((char*)&_XmStrings[694]) +#endif +#ifndef XmCConvertProc +#define XmCConvertProc ((char*)&_XmStrings[716]) +#endif +#ifndef XmCCursorBackground +#define XmCCursorBackground ((char*)&_XmStrings[728]) +#endif +#ifndef XmCCursorForeground +#define XmCCursorForeground ((char*)&_XmStrings[745]) +#endif +#ifndef XmCCursorPosition +#define XmCCursorPosition ((char*)&_XmStrings[762]) +#endif +#ifndef XmCCursorPositionVisible +#define XmCCursorPositionVisible ((char*)&_XmStrings[777]) +#endif +#ifndef XmCDarkThreshold +#define XmCDarkThreshold ((char*)&_XmStrings[799]) +#endif +#ifndef XmCDecimalPoints +#define XmCDecimalPoints ((char*)&_XmStrings[813]) +#endif +#ifndef XmCDefaultButtonShadowThickness +#define XmCDefaultButtonShadowThickness ((char*)&_XmStrings[827]) +#endif +#ifndef XmCDefaultButtonType +#define XmCDefaultButtonType ((char*)&_XmStrings[856]) +#endif +#ifndef XmCDefaultCopyCursorIcon +#define XmCDefaultCopyCursorIcon ((char*)&_XmStrings[874]) +#endif +#ifndef XmCDefaultFontList +#define XmCDefaultFontList ((char*)&_XmStrings[896]) +#endif +#ifndef XmCDefaultInvalidCursorIcon +#define XmCDefaultInvalidCursorIcon ((char*)&_XmStrings[912]) +#endif +#ifndef XmCDefaultLinkCursorIcon +#define XmCDefaultLinkCursorIcon ((char*)&_XmStrings[937]) +#endif +#ifndef XmCDefaultMoveCursorIcon +#define XmCDefaultMoveCursorIcon ((char*)&_XmStrings[959]) +#endif +#ifndef XmCDefaultNoneCursorIcon +#define XmCDefaultNoneCursorIcon ((char*)&_XmStrings[981]) +#endif +#ifndef XmCDefaultPosition +#define XmCDefaultPosition ((char*)&_XmStrings[1003]) +#endif +#ifndef XmCDefaultSourceCursorIcon +#define XmCDefaultSourceCursorIcon ((char*)&_XmStrings[1019]) +#endif +#ifndef XmCDefaultValidCursorIcon +#define XmCDefaultValidCursorIcon ((char*)&_XmStrings[1043]) +#endif +#ifndef XmCDeleteResponse +#define XmCDeleteResponse ((char*)&_XmStrings[1066]) +#endif +#ifndef XmCDesktopParent +#define XmCDesktopParent ((char*)&_XmStrings[1081]) +#endif +#ifndef XmCDialogStyle +#define XmCDialogStyle ((char*)&_XmStrings[1095]) +#endif +#ifndef XmCDialogTitle +#define XmCDialogTitle ((char*)&_XmStrings[1107]) +#endif +#ifndef XmCDialogType +#define XmCDialogType ((char*)&_XmStrings[1119]) +#endif +#ifndef XmCDirListItemCount +#define XmCDirListItemCount ((char*)&_XmStrings[1130]) +#endif +#ifndef XmCDirListItems +#define XmCDirListItems ((char*)&_XmStrings[1147]) +#endif +#ifndef XmCDirListLabelString +#define XmCDirListLabelString ((char*)&_XmStrings[1160]) +#endif +#ifndef XmCDirMask +#define XmCDirMask ((char*)&_XmStrings[1179]) +#endif +#ifndef XmCDirSearchProc +#define XmCDirSearchProc ((char*)&_XmStrings[1187]) +#endif +#ifndef XmCDirSpec +#define XmCDirSpec ((char*)&_XmStrings[1201]) +#endif +#ifndef XmCDirectory +#define XmCDirectory ((char*)&_XmStrings[1209]) +#endif +#ifndef XmCDirectoryValid +#define XmCDirectoryValid ((char*)&_XmStrings[1219]) +#endif +#ifndef XmCDisarmCallback +#define XmCDisarmCallback ((char*)&_XmStrings[1234]) +#endif +#ifndef XmCDoubleClickInterval +#define XmCDoubleClickInterval ((char*)&_XmStrings[1249]) +#endif +#ifndef XmCDragContextClass +#define XmCDragContextClass ((char*)&_XmStrings[1269]) +#endif +#ifndef XmCDragDropFinishCallback +#define XmCDragDropFinishCallback ((char*)&_XmStrings[1286]) +#endif +#ifndef XmCDragIconClass +#define XmCDragIconClass ((char*)&_XmStrings[1309]) +#endif +#ifndef XmCDragInitiatorProtocolStyle +#define XmCDragInitiatorProtocolStyle ((char*)&_XmStrings[1323]) +#endif +#ifndef XmCDragMotionCallback +#define XmCDragMotionCallback ((char*)&_XmStrings[1350]) +#endif +#ifndef XmCDragOperations +#define XmCDragOperations ((char*)&_XmStrings[1369]) +#endif +#ifndef XmCDragOverMode +#define XmCDragOverMode ((char*)&_XmStrings[1384]) +#endif +#ifndef XmCDragProc +#define XmCDragProc ((char*)&_XmStrings[1397]) +#endif +#ifndef XmCDragReceiverProtocolStyle +#define XmCDragReceiverProtocolStyle ((char*)&_XmStrings[1406]) +#endif +#ifndef XmCDropProc +#define XmCDropProc ((char*)&_XmStrings[1432]) +#endif +#ifndef XmCDropRectangles +#define XmCDropRectangles ((char*)&_XmStrings[1441]) +#endif +#ifndef XmCDropSiteActivity +#define XmCDropSiteActivity ((char*)&_XmStrings[1456]) +#endif +#ifndef XmCDropSiteEnterCallback +#define XmCDropSiteEnterCallback ((char*)&_XmStrings[1473]) +#endif +#ifndef XmCDropSiteLeaveCallback +#define XmCDropSiteLeaveCallback ((char*)&_XmStrings[1495]) +#endif +#ifndef XmCDropSiteManagerClass +#define XmCDropSiteManagerClass ((char*)&_XmStrings[1517]) +#endif +#ifndef XmCDropSiteOperations +#define XmCDropSiteOperations ((char*)&_XmStrings[1538]) +#endif +#ifndef XmCDropSiteType +#define XmCDropSiteType ((char*)&_XmStrings[1557]) +#endif +#ifndef XmCDropStartCallback +#define XmCDropStartCallback ((char*)&_XmStrings[1570]) +#endif +#ifndef XmCDropTransferClass +#define XmCDropTransferClass ((char*)&_XmStrings[1588]) +#endif +#ifndef XmCDropTransfers +#define XmCDropTransfers ((char*)&_XmStrings[1606]) +#endif +#ifndef XmCEditable +#define XmCEditable ((char*)&_XmStrings[1620]) +#endif +#ifndef XmCEntryBorder +#define XmCEntryBorder ((char*)&_XmStrings[1629]) +#endif +#ifndef XmCEntryClass +#define XmCEntryClass ((char*)&_XmStrings[1641]) +#endif +#ifndef XmCExportTargets +#define XmCExportTargets ((char*)&_XmStrings[1652]) +#endif +#ifndef XmCExposeCallback +#define XmCExposeCallback ((char*)&_XmStrings[1666]) +#endif +#ifndef XmCExtensionType +#define XmCExtensionType ((char*)&_XmStrings[1681]) +#endif +#ifndef XmCFileListItemCount +#define XmCFileListItemCount ((char*)&_XmStrings[1695]) +#endif +#ifndef XmCFileListItems +#define XmCFileListItems ((char*)&_XmStrings[1713]) +#endif +#ifndef XmCFileListLabelString +#define XmCFileListLabelString ((char*)&_XmStrings[1727]) +#endif +#ifndef XmCFileSearchProc +#define XmCFileSearchProc ((char*)&_XmStrings[1747]) +#endif +#ifndef XmCFileTypeMask +#define XmCFileTypeMask ((char*)&_XmStrings[1762]) +#endif +#ifndef XmCFillOnArm +#define XmCFillOnArm ((char*)&_XmStrings[1775]) +#endif +#ifndef XmCFillOnSelect +#define XmCFillOnSelect ((char*)&_XmStrings[1785]) +#endif +#ifndef XmCFilterLabelString +#define XmCFilterLabelString ((char*)&_XmStrings[1798]) +#endif +#ifndef XmCFontList +#define XmCFontList ((char*)&_XmStrings[1816]) +#endif +#ifndef XmCForegroundThreshold +#define XmCForegroundThreshold ((char*)&_XmStrings[1825]) +#endif +#ifndef XmCHelpLabelString +#define XmCHelpLabelString ((char*)&_XmStrings[1845]) +#endif +#ifndef XmCHighlightColor +#define XmCHighlightColor ((char*)&_XmStrings[1861]) +#endif +#ifndef XmCHighlightOnEnter +#define XmCHighlightOnEnter ((char*)&_XmStrings[1876]) +#endif +#ifndef XmCHighlightPixmap +#define XmCHighlightPixmap ((char*)&_XmStrings[1893]) +#endif +#ifndef XmCHighlightThickness +#define XmCHighlightThickness ((char*)&_XmStrings[1909]) +#endif +#ifndef XmCHorizontalFontUnit +#define XmCHorizontalFontUnit ((char*)&_XmStrings[1928]) +#endif +#ifndef XmCHorizontalScrollBar +#define XmCHorizontalScrollBar ((char*)&_XmStrings[1947]) +#endif +#ifndef XmCHot +#define XmCHot ((char*)&_XmStrings[1967]) +#endif +#ifndef XmCICCHandle +#define XmCICCHandle ((char*)&_XmStrings[1971]) +#endif +#ifndef XmCImportTargets +#define XmCImportTargets ((char*)&_XmStrings[1981]) +#endif +#ifndef XmCIncrement +#define XmCIncrement ((char*)&_XmStrings[1995]) +#endif +#ifndef XmCIncremental +#define XmCIncremental ((char*)&_XmStrings[2005]) +#endif +#ifndef XmCIndicatorOn +#define XmCIndicatorOn ((char*)&_XmStrings[2017]) +#endif +#ifndef XmCIndicatorSize +#define XmCIndicatorSize ((char*)&_XmStrings[2029]) +#endif +#ifndef XmCIndicatorType +#define XmCIndicatorType ((char*)&_XmStrings[2043]) +#endif +#ifndef XmCInitialDelay +#define XmCInitialDelay ((char*)&_XmStrings[2057]) +#endif +#ifndef XmCInitialFocus +#define XmCInitialFocus ((char*)&_XmStrings[2070]) +#endif +#ifndef XmCInputCreate +#define XmCInputCreate ((char*)&_XmStrings[2083]) +#endif +#ifndef XmCInputMethod +#define XmCInputMethod ((char*)&_XmStrings[2095]) +#endif +#ifndef XmCInvalidCursorForeground +#define XmCInvalidCursorForeground ((char*)&_XmStrings[2107]) +#endif +#ifndef XmCIsAligned +#define XmCIsAligned ((char*)&_XmStrings[2131]) +#endif +#ifndef XmCIsHomogeneous +#define XmCIsHomogeneous ((char*)&_XmStrings[2141]) +#endif +#ifndef XmCItemCount +#define XmCItemCount ((char*)&_XmStrings[2155]) +#endif +#ifndef XmCItems +#define XmCItems ((char*)&_XmStrings[2165]) +#endif +#ifndef XmCKeyboardFocusPolicy +#define XmCKeyboardFocusPolicy ((char*)&_XmStrings[2171]) +#endif +#ifndef XmCLabelFontList +#define XmCLabelFontList ((char*)&_XmStrings[2191]) +#endif +#ifndef XmCLabelInsensitivePixmap +#define XmCLabelInsensitivePixmap ((char*)&_XmStrings[2205]) +#endif +#ifndef XmCLabelPixmap +#define XmCLabelPixmap ((char*)&_XmStrings[2228]) +#endif +#ifndef XmCLabelString +#define XmCLabelString ((char*)&_XmStrings[2240]) +#endif +#ifndef XmCLabelType +#define XmCLabelType ((char*)&_XmStrings[2252]) +#endif +#ifndef XmCLightThreshold +#define XmCLightThreshold ((char*)&_XmStrings[2262]) +#endif +#ifndef XmCListLabelString +#define XmCListLabelString ((char*)&_XmStrings[2277]) +#endif +#ifndef XmCListMarginHeight +#define XmCListMarginHeight ((char*)&_XmStrings[2293]) +#endif +#ifndef XmCListMarginWidth +#define XmCListMarginWidth ((char*)&_XmStrings[2310]) +#endif +#ifndef XmCListSizePolicy +#define XmCListSizePolicy ((char*)&_XmStrings[2326]) +#endif +#ifndef XmCListSpacing +#define XmCListSpacing ((char*)&_XmStrings[2341]) +#endif +#ifndef XmCListUpdated +#define XmCListUpdated ((char*)&_XmStrings[2353]) +#endif +#ifndef XmCLogicalParent +#define XmCLogicalParent ((char*)&_XmStrings[2365]) +#endif +#ifndef XmCMainWindowMarginHeight +#define XmCMainWindowMarginHeight ((char*)&_XmStrings[2379]) +#endif +#ifndef XmCMainWindowMarginWidth +#define XmCMainWindowMarginWidth ((char*)&_XmStrings[2402]) +#endif +#ifndef XmCMappingDelay +#define XmCMappingDelay ((char*)&_XmStrings[2424]) +#endif +#ifndef XmCMarginBottom +#define XmCMarginBottom ((char*)&_XmStrings[2437]) +#endif +#ifndef XmCMarginHeight +#define XmCMarginHeight ((char*)&_XmStrings[2450]) +#endif +#ifndef XmCMarginLeft +#define XmCMarginLeft ((char*)&_XmStrings[2463]) +#endif +#ifndef XmCMarginRight +#define XmCMarginRight ((char*)&_XmStrings[2474]) +#endif +#ifndef XmCMarginTop +#define XmCMarginTop ((char*)&_XmStrings[2486]) +#endif +#ifndef XmCMarginWidth +#define XmCMarginWidth ((char*)&_XmStrings[2496]) +#endif +#ifndef XmCMask +#define XmCMask ((char*)&_XmStrings[2508]) +#endif +#ifndef XmCMaxItems +#define XmCMaxItems ((char*)&_XmStrings[2513]) +#endif +#ifndef XmCMaxLength +#define XmCMaxLength ((char*)&_XmStrings[2522]) +#endif +#ifndef XmCMaxValue +#define XmCMaxValue ((char*)&_XmStrings[2532]) +#endif +#ifndef XmCMaximum +#define XmCMaximum ((char*)&_XmStrings[2541]) +#endif +#ifndef XmCMenuBar +#define XmCMenuBar ((char*)&_XmStrings[2549]) +#endif +#ifndef XmCMenuPost +#define XmCMenuPost ((char*)&_XmStrings[2557]) +#endif +#ifndef XmCMenuWidget +#define XmCMenuWidget ((char*)&_XmStrings[2566]) +#endif +#ifndef XmCMessageProc +#define XmCMessageProc ((char*)&_XmStrings[2577]) +#endif +#ifndef XmCMessageWindow +#define XmCMessageWindow ((char*)&_XmStrings[2589]) +#endif +#ifndef XmCMinimizeButtons +#define XmCMinimizeButtons ((char*)&_XmStrings[2603]) +#endif +#ifndef XmCMinimum +#define XmCMinimum ((char*)&_XmStrings[2619]) +#endif +#ifndef XmCMnemonic +#define XmCMnemonic ((char*)&_XmStrings[2627]) +#endif +#ifndef XmCMnemonicCharSet +#define XmCMnemonicCharSet ((char*)&_XmStrings[2636]) +#endif +#ifndef XmCMoveOpaque +#define XmCMoveOpaque ((char*)&_XmStrings[2652]) +#endif +#ifndef XmCMultiClick +#define XmCMultiClick ((char*)&_XmStrings[2663]) +#endif +#ifndef XmCMustMatch +#define XmCMustMatch ((char*)&_XmStrings[2674]) +#endif +#ifndef XmCMwmDecorations +#define XmCMwmDecorations ((char*)&_XmStrings[2684]) +#endif +#ifndef XmCMwmFunctions +#define XmCMwmFunctions ((char*)&_XmStrings[2699]) +#endif +#ifndef XmCMwmInputMode +#define XmCMwmInputMode ((char*)&_XmStrings[2712]) +#endif +#ifndef XmCMwmMenu +#define XmCMwmMenu ((char*)&_XmStrings[2725]) +#endif +#ifndef XmCMwmMessages +#define XmCMwmMessages ((char*)&_XmStrings[2733]) +#endif +#ifndef XmCNavigationType +#define XmCNavigationType ((char*)&_XmStrings[2745]) +#endif +#ifndef XmCNeedsMotion +#define XmCNeedsMotion ((char*)&_XmStrings[2760]) +#endif +#ifndef XmCNoMatchString +#define XmCNoMatchString ((char*)&_XmStrings[2772]) +#endif +#ifndef XmCNoResize +#define XmCNoResize ((char*)&_XmStrings[2786]) +#endif +#ifndef XmCNoneCursorForeground +#define XmCNoneCursorForeground ((char*)&_XmStrings[2795]) +#endif +#ifndef XmCNotifyProc +#define XmCNotifyProc ((char*)&_XmStrings[2816]) +#endif +#ifndef XmCNumChildren +#define XmCNumChildren ((char*)&_XmStrings[2827]) +#endif +#ifndef XmCNumColumns +#define XmCNumColumns ((char*)&_XmStrings[2839]) +#endif +#ifndef XmCNumDropRectangles +#define XmCNumDropRectangles ((char*)&_XmStrings[2850]) +#endif +#ifndef XmCNumDropTransfers +#define XmCNumDropTransfers ((char*)&_XmStrings[2868]) +#endif +#ifndef XmCNumExportTargets +#define XmCNumExportTargets ((char*)&_XmStrings[2885]) +#endif +#ifndef XmCNumImportTargets +#define XmCNumImportTargets ((char*)&_XmStrings[2902]) +#endif +#ifndef XmCOffset +#define XmCOffset ((char*)&_XmStrings[2919]) +#endif +#ifndef XmCOkLabelString +#define XmCOkLabelString ((char*)&_XmStrings[2926]) +#endif +#ifndef XmCOperationChangedCallback +#define XmCOperationChangedCallback ((char*)&_XmStrings[2940]) +#endif +#ifndef XmCOperationCursorIcon +#define XmCOperationCursorIcon ((char*)&_XmStrings[2965]) +#endif +#ifndef XmCOptionLabel +#define XmCOptionLabel ((char*)&_XmStrings[2985]) +#endif +#ifndef XmCOptionMnemonic +#define XmCOptionMnemonic ((char*)&_XmStrings[2997]) +#endif +#ifndef XmCOutputCreate +#define XmCOutputCreate ((char*)&_XmStrings[3012]) +#endif +#ifndef XmCPacking +#define XmCPacking ((char*)&_XmStrings[3025]) +#endif +#ifndef XmCPageIncrement +#define XmCPageIncrement ((char*)&_XmStrings[3033]) +#endif +#ifndef XmCPaneMaximum +#define XmCPaneMaximum ((char*)&_XmStrings[3047]) +#endif +#ifndef XmCPaneMinimum +#define XmCPaneMinimum ((char*)&_XmStrings[3059]) +#endif +#ifndef XmCPattern +#define XmCPattern ((char*)&_XmStrings[3071]) +#endif +#ifndef XmCPendingDelete +#define XmCPendingDelete ((char*)&_XmStrings[3079]) +#endif +#ifndef XmCPopupEnabled +#define XmCPopupEnabled ((char*)&_XmStrings[3093]) +#endif +#ifndef XmCPositionIndex +#define XmCPositionIndex ((char*)&_XmStrings[3106]) +#endif +#ifndef XmCPostFromButton +#define XmCPostFromButton ((char*)&_XmStrings[3120]) +#endif +#ifndef XmCPostFromCount +#define XmCPostFromCount ((char*)&_XmStrings[3135]) +#endif +#ifndef XmCPostFromList +#define XmCPostFromList ((char*)&_XmStrings[3149]) +#endif +#ifndef XmCPreeditType +#define XmCPreeditType ((char*)&_XmStrings[3162]) +#endif +#ifndef XmCProcessingDirection +#define XmCProcessingDirection ((char*)&_XmStrings[3174]) +#endif +#ifndef XmCPromptString +#define XmCPromptString ((char*)&_XmStrings[3194]) +#endif +#ifndef XmCProtocolCallback +#define XmCProtocolCallback ((char*)&_XmStrings[3207]) +#endif +#ifndef XmCPushButtonEnabled +#define XmCPushButtonEnabled ((char*)&_XmStrings[3224]) +#endif +#ifndef XmCQualifySearchDataProc +#define XmCQualifySearchDataProc ((char*)&_XmStrings[3242]) +#endif +#ifndef XmCRadioAlwaysOne +#define XmCRadioAlwaysOne ((char*)&_XmStrings[3264]) +#endif +#ifndef XmCRadioBehavior +#define XmCRadioBehavior ((char*)&_XmStrings[3279]) +#endif +#ifndef XmCRecomputeSize +#define XmCRecomputeSize ((char*)&_XmStrings[3293]) +#endif +#ifndef XmCRectangles +#define XmCRectangles ((char*)&_XmStrings[3307]) +#endif +#ifndef XmCRepeatDelay +#define XmCRepeatDelay ((char*)&_XmStrings[3318]) +#endif +#ifndef XmCResizeCallback +#define XmCResizeCallback ((char*)&_XmStrings[3330]) +#endif +#ifndef XmCResizeHeight +#define XmCResizeHeight ((char*)&_XmStrings[3345]) +#endif +#ifndef XmCResizePolicy +#define XmCResizePolicy ((char*)&_XmStrings[3358]) +#endif +#ifndef XmCResizeWidth +#define XmCResizeWidth ((char*)&_XmStrings[3371]) +#endif +#ifndef XmCRowColumnType +#define XmCRowColumnType ((char*)&_XmStrings[3383]) +#endif +#ifndef XmCRows +#define XmCRows ((char*)&_XmStrings[3397]) +#endif +#ifndef XmCRubberPositioning +#define XmCRubberPositioning ((char*)&_XmStrings[3402]) +#endif +#ifndef XmCSashHeight +#define XmCSashHeight ((char*)&_XmStrings[3420]) +#endif +#ifndef XmCSashIndent +#define XmCSashIndent ((char*)&_XmStrings[3431]) +#endif +#ifndef XmCSashWidth +#define XmCSashWidth ((char*)&_XmStrings[3442]) +#endif +#ifndef XmCScaleHeight +#define XmCScaleHeight ((char*)&_XmStrings[3452]) +#endif +#ifndef XmCScaleMultiple +#define XmCScaleMultiple ((char*)&_XmStrings[3464]) +#endif +#ifndef XmCScaleWidth +#define XmCScaleWidth ((char*)&_XmStrings[3478]) +#endif +#ifndef XmCScroll +#define XmCScroll ((char*)&_XmStrings[3489]) +#endif +#ifndef XmCScrollBarDisplayPolicy +#define XmCScrollBarDisplayPolicy ((char*)&_XmStrings[3496]) +#endif +#ifndef XmCScrollBarPlacement +#define XmCScrollBarPlacement ((char*)&_XmStrings[3519]) +#endif +#ifndef XmCScrollSide +#define XmCScrollSide ((char*)&_XmStrings[3538]) +#endif +#ifndef XmCScrolledWindowMarginHeight +#define XmCScrolledWindowMarginHeight ((char*)&_XmStrings[3549]) +#endif +#ifndef XmCScrolledWindowMarginWidth +#define XmCScrolledWindowMarginWidth ((char*)&_XmStrings[3576]) +#endif +#ifndef XmCScrollingPolicy +#define XmCScrollingPolicy ((char*)&_XmStrings[3602]) +#endif +#ifndef XmCSelectColor +#define XmCSelectColor ((char*)&_XmStrings[3618]) +#endif +#ifndef XmCSelectInsensitivePixmap +#define XmCSelectInsensitivePixmap ((char*)&_XmStrings[3630]) +#endif +#ifndef XmCSelectPixmap +#define XmCSelectPixmap ((char*)&_XmStrings[3654]) +#endif +#ifndef XmCSelectThreshold +#define XmCSelectThreshold ((char*)&_XmStrings[3667]) +#endif +#ifndef XmCSelectedItemCount +#define XmCSelectedItemCount ((char*)&_XmStrings[3683]) +#endif +#ifndef XmCSelectedItems +#define XmCSelectedItems ((char*)&_XmStrings[3701]) +#endif +#ifndef XmCSelectionArrayCount +#define XmCSelectionArrayCount ((char*)&_XmStrings[3715]) +#endif +#ifndef XmCSelectionLabelString +#define XmCSelectionLabelString ((char*)&_XmStrings[3735]) +#endif +#ifndef XmCSelectionPolicy +#define XmCSelectionPolicy ((char*)&_XmStrings[3756]) +#endif +#ifndef XmCSeparatorOn +#define XmCSeparatorOn ((char*)&_XmStrings[3772]) +#endif +#ifndef XmCSeparatorType +#define XmCSeparatorType ((char*)&_XmStrings[3784]) +#endif +#ifndef XmCSet +#define XmCSet ((char*)&_XmStrings[3798]) +#endif +#ifndef XmCShadowThickness +#define XmCShadowThickness ((char*)&_XmStrings[3802]) +#endif +#ifndef XmCShadowType +#define XmCShadowType ((char*)&_XmStrings[3818]) +#endif +#ifndef XmCShellUnitType +#define XmCShellUnitType ((char*)&_XmStrings[3829]) +#endif +#ifndef XmCShowArrows +#define XmCShowArrows ((char*)&_XmStrings[3843]) +#endif +#ifndef XmCShowAsDefault +#define XmCShowAsDefault ((char*)&_XmStrings[3854]) +#endif +#ifndef XmCShowSeparator +#define XmCShowSeparator ((char*)&_XmStrings[3868]) +#endif +#ifndef XmCShowValue +#define XmCShowValue ((char*)&_XmStrings[3882]) +#endif +#ifndef XmCSimpleCheckBox +#define XmCSimpleCheckBox ((char*)&_XmStrings[3892]) +#endif +#ifndef XmCSimpleMenuBar +#define XmCSimpleMenuBar ((char*)&_XmStrings[3907]) +#endif +#ifndef XmCSimpleOptionMenu +#define XmCSimpleOptionMenu ((char*)&_XmStrings[3921]) +#endif +#ifndef XmCSimplePopupMenu +#define XmCSimplePopupMenu ((char*)&_XmStrings[3938]) +#endif +#ifndef XmCSimplePulldownMenu +#define XmCSimplePulldownMenu ((char*)&_XmStrings[3954]) +#endif +#ifndef XmCSimpleRadioBox +#define XmCSimpleRadioBox ((char*)&_XmStrings[3973]) +#endif +#ifndef XmCSizePolicy +#define XmCSizePolicy ((char*)&_XmStrings[3988]) +#endif +#ifndef XmCSliderSize +#define XmCSliderSize ((char*)&_XmStrings[3999]) +#endif +#ifndef XmCSource +#define XmCSource ((char*)&_XmStrings[4010]) +#endif +#ifndef XmCSourceCursorIcon +#define XmCSourceCursorIcon ((char*)&_XmStrings[4017]) +#endif +#ifndef XmCSourceIsExternal +#define XmCSourceIsExternal ((char*)&_XmStrings[4034]) +#endif +#ifndef XmCSourcePixmapIcon +#define XmCSourcePixmapIcon ((char*)&_XmStrings[4051]) +#endif +#ifndef XmCSourceWidget +#define XmCSourceWidget ((char*)&_XmStrings[4068]) +#endif +#ifndef XmCSourceWindow +#define XmCSourceWindow ((char*)&_XmStrings[4081]) +#endif +#ifndef XmCSpacing +#define XmCSpacing ((char*)&_XmStrings[4094]) +#endif +#ifndef XmCStartTime +#define XmCStartTime ((char*)&_XmStrings[4102]) +#endif +#ifndef XmCStateCursorIcon +#define XmCStateCursorIcon ((char*)&_XmStrings[4112]) +#endif +#ifndef XmCStringDirection +#define XmCStringDirection ((char*)&_XmStrings[4128]) +#endif +#ifndef XmCTearOffModel +#define XmCTearOffModel ((char*)&_XmStrings[4144]) +#endif +#ifndef XmCTextFontList +#define XmCTextFontList ((char*)&_XmStrings[4157]) +#endif +#ifndef XmCTextString +#define XmCTextString ((char*)&_XmStrings[4170]) +#endif +#ifndef XmCTextValue +#define XmCTextValue ((char*)&_XmStrings[4181]) +#endif +#ifndef XmCTitleString +#define XmCTitleString ((char*)&_XmStrings[4191]) +#endif +#ifndef XmCTopCharacter +#define XmCTopCharacter ((char*)&_XmStrings[4203]) +#endif +#ifndef XmCTopItemPosition +#define XmCTopItemPosition ((char*)&_XmStrings[4216]) +#endif +#ifndef XmCTopLevelEnterCallback +#define XmCTopLevelEnterCallback ((char*)&_XmStrings[4232]) +#endif +#ifndef XmCTopLevelLeaveCallback +#define XmCTopLevelLeaveCallback ((char*)&_XmStrings[4254]) +#endif +#ifndef XmCTopShadowColor +#define XmCTopShadowColor ((char*)&_XmStrings[4276]) +#endif +#ifndef XmCTopShadowPixmap +#define XmCTopShadowPixmap ((char*)&_XmStrings[4291]) +#endif +#ifndef XmCTransferProc +#define XmCTransferProc ((char*)&_XmStrings[4307]) +#endif +#ifndef XmCTransferStatus +#define XmCTransferStatus ((char*)&_XmStrings[4320]) +#endif +#ifndef XmCTraversalOn +#define XmCTraversalOn ((char*)&_XmStrings[4335]) +#endif +#ifndef XmCTraversalType +#define XmCTraversalType ((char*)&_XmStrings[4347]) +#endif +#ifndef XmCTreeUpdateProc +#define XmCTreeUpdateProc ((char*)&_XmStrings[4361]) +#endif +#ifndef XmCTroughColor +#define XmCTroughColor ((char*)&_XmStrings[4376]) +#endif +#ifndef XmCUnitType +#define XmCUnitType ((char*)&_XmStrings[4388]) +#endif +#ifndef XmCUnpostBehavior +#define XmCUnpostBehavior ((char*)&_XmStrings[4397]) +#endif +#ifndef XmCUnselectPixmap +#define XmCUnselectPixmap ((char*)&_XmStrings[4412]) +#endif +#ifndef XmCUpdateSliderSize +#define XmCUpdateSliderSize ((char*)&_XmStrings[4427]) +#endif +#ifndef XmCUseAsyncGeometry +#define XmCUseAsyncGeometry ((char*)&_XmStrings[4444]) +#endif +#ifndef XmCUserData +#define XmCUserData ((char*)&_XmStrings[4461]) +#endif +#ifndef XmCValidCursorForeground +#define XmCValidCursorForeground ((char*)&_XmStrings[4470]) +#endif +#ifndef XmCValueChangedCallback +#define XmCValueChangedCallback ((char*)&_XmStrings[4492]) +#endif +#ifndef XmCValueWcs +#define XmCValueWcs ((char*)&_XmStrings[4513]) +#endif +#ifndef XmCVerifyBell +#define XmCVerifyBell ((char*)&_XmStrings[4522]) +#endif +#ifndef XmCVerticalAlignment +#define XmCVerticalAlignment ((char*)&_XmStrings[4533]) +#endif +#ifndef XmCVerticalFontUnit +#define XmCVerticalFontUnit ((char*)&_XmStrings[4551]) +#endif +#ifndef XmCVerticalScrollBar +#define XmCVerticalScrollBar ((char*)&_XmStrings[4568]) +#endif +#ifndef XmCVisibleItemCount +#define XmCVisibleItemCount ((char*)&_XmStrings[4586]) +#endif +#ifndef XmCVisibleWhenOff +#define XmCVisibleWhenOff ((char*)&_XmStrings[4603]) +#endif +#ifndef XmCVisualPolicy +#define XmCVisualPolicy ((char*)&_XmStrings[4618]) +#endif +#ifndef XmCWhichButton +#define XmCWhichButton ((char*)&_XmStrings[4631]) +#endif +#ifndef XmCWordWrap +#define XmCWordWrap ((char*)&_XmStrings[4643]) +#endif +#ifndef XmCWorkWindow +#define XmCWorkWindow ((char*)&_XmStrings[4652]) +#endif +#ifndef XmCXmString +#define XmCXmString ((char*)&_XmStrings[4663]) +#endif +#ifndef XmNaccelerator +#define XmNaccelerator ((char*)&_XmStrings[4672]) +#endif +#ifndef XmNacceleratorText +#define XmNacceleratorText ((char*)&_XmStrings[4684]) +#endif +#ifndef XmNactivateCallback +#define XmNactivateCallback ((char*)&_XmStrings[4700]) +#endif +#ifndef XmNadjustLast +#define XmNadjustLast ((char*)&_XmStrings[4717]) +#endif +#ifndef XmNadjustMargin +#define XmNadjustMargin ((char*)&_XmStrings[4728]) +#endif +#ifndef XmNalignment +#define XmNalignment ((char*)&_XmStrings[4741]) +#endif +#ifndef XmNallowOverlap +#define XmNallowOverlap ((char*)&_XmStrings[4751]) +#endif +#ifndef XmNallowResize +#define XmNallowResize ((char*)&_XmStrings[4764]) +#endif +#ifndef XmNallowUnusedSpace +#define XmNallowUnusedSpace ((char*)&_XmStrings[4776]) +#endif +#ifndef XmNanimationMask +#define XmNanimationMask ((char*)&_XmStrings[4793]) +#endif +#ifndef XmNanimationPixmap +#define XmNanimationPixmap ((char*)&_XmStrings[4807]) +#endif +#ifndef XmNanimationPixmapDepth +#define XmNanimationPixmapDepth ((char*)&_XmStrings[4823]) +#endif +#ifndef XmNanimationStyle +#define XmNanimationStyle ((char*)&_XmStrings[4844]) +#endif +#ifndef XmNapplyCallback +#define XmNapplyCallback ((char*)&_XmStrings[4859]) +#endif +#ifndef XmNapplyLabelString +#define XmNapplyLabelString ((char*)&_XmStrings[4873]) +#endif +#ifndef XmNarmCallback +#define XmNarmCallback ((char*)&_XmStrings[4890]) +#endif +#ifndef XmNarmColor +#define XmNarmColor ((char*)&_XmStrings[4902]) +#endif +#ifndef XmNarmPixmap +#define XmNarmPixmap ((char*)&_XmStrings[4911]) +#endif +#ifndef XmNarrowDirection +#define XmNarrowDirection ((char*)&_XmStrings[4921]) +#endif +#ifndef XmNattachment +#define XmNattachment ((char*)&_XmStrings[4936]) +#endif +#ifndef XmNaudibleWarning +#define XmNaudibleWarning ((char*)&_XmStrings[4947]) +#endif +#ifndef XmNautoShowCursorPosition +#define XmNautoShowCursorPosition ((char*)&_XmStrings[4962]) +#endif +#ifndef XmNautoUnmanage +#define XmNautoUnmanage ((char*)&_XmStrings[4985]) +#endif +#ifndef XmNautomaticSelection +#define XmNautomaticSelection ((char*)&_XmStrings[4998]) +#endif +#ifndef XmNavailability +#define XmNavailability ((char*)&_XmStrings[5017]) +#endif +#ifndef XmNblendModel +#define XmNblendModel ((char*)&_XmStrings[5030]) +#endif +#ifndef XmNblinkRate +#define XmNblinkRate ((char*)&_XmStrings[5041]) +#endif +#ifndef XmNbottomAttachment +#define XmNbottomAttachment ((char*)&_XmStrings[5051]) +#endif +#ifndef XmNbottomOffset +#define XmNbottomOffset ((char*)&_XmStrings[5068]) +#endif +#ifndef XmNbottomPosition +#define XmNbottomPosition ((char*)&_XmStrings[5081]) +#endif +#ifndef XmNbottomShadowColor +#define XmNbottomShadowColor ((char*)&_XmStrings[5096]) +#endif +#ifndef XmNbottomShadowPixmap +#define XmNbottomShadowPixmap ((char*)&_XmStrings[5114]) +#endif +#ifndef XmNbottomWidget +#define XmNbottomWidget ((char*)&_XmStrings[5133]) +#endif +#ifndef XmNbrowseSelectionCallback +#define XmNbrowseSelectionCallback ((char*)&_XmStrings[5146]) +#endif +#ifndef XmNbuttonAcceleratorText +#define XmNbuttonAcceleratorText ((char*)&_XmStrings[5170]) +#endif +#ifndef XmNbuttonAccelerators +#define XmNbuttonAccelerators ((char*)&_XmStrings[5192]) +#endif +#ifndef XmNbuttonCount +#define XmNbuttonCount ((char*)&_XmStrings[5211]) +#endif +#ifndef XmNbuttonFontList +#define XmNbuttonFontList ((char*)&_XmStrings[5223]) +#endif +#ifndef XmNbuttonMnemonicCharSets +#define XmNbuttonMnemonicCharSets ((char*)&_XmStrings[5238]) +#endif +#ifndef XmNbuttonMnemonics +#define XmNbuttonMnemonics ((char*)&_XmStrings[5261]) +#endif +#ifndef XmNbuttonSet +#define XmNbuttonSet ((char*)&_XmStrings[5277]) +#endif +#ifndef XmNbuttonType +#define XmNbuttonType ((char*)&_XmStrings[5287]) +#endif +#ifndef XmNbuttons +#define XmNbuttons ((char*)&_XmStrings[5298]) +#endif +#ifndef XmNcancelButton +#define XmNcancelButton ((char*)&_XmStrings[5306]) +#endif +#ifndef XmNcancelCallback +#define XmNcancelCallback ((char*)&_XmStrings[5319]) +#endif +#ifndef XmNcancelLabelString +#define XmNcancelLabelString ((char*)&_XmStrings[5334]) +#endif +#ifndef XmNcascadePixmap +#define XmNcascadePixmap ((char*)&_XmStrings[5352]) +#endif +#ifndef XmNcascadingCallback +#define XmNcascadingCallback ((char*)&_XmStrings[5366]) +#endif +#ifndef XmNchildHorizontalAlignment +#define XmNchildHorizontalAlignment ((char*)&_XmStrings[5384]) +#endif +#ifndef XmNchildHorizontalSpacing +#define XmNchildHorizontalSpacing ((char*)&_XmStrings[5409]) +#endif +#ifndef XmNchildPlacement +#define XmNchildPlacement ((char*)&_XmStrings[5432]) +#endif +#ifndef XmNchildPosition +#define XmNchildPosition ((char*)&_XmStrings[5447]) +#endif +#ifndef XmNchildType +#define XmNchildType ((char*)&_XmStrings[5461]) +#endif +#ifndef XmNchildVerticalAlignment +#define XmNchildVerticalAlignment ((char*)&_XmStrings[5471]) +#endif +#ifndef XmNclientData +#define XmNclientData ((char*)&_XmStrings[5494]) +#endif +#ifndef XmNclipWindow +#define XmNclipWindow ((char*)&_XmStrings[5505]) +#endif +#ifndef XmNcolumns +#define XmNcolumns ((char*)&_XmStrings[5516]) +#endif +#ifndef XmNcommand +#define XmNcommand ((char*)&_XmStrings[5524]) +#endif +#ifndef XmNcommandChangedCallback +#define XmNcommandChangedCallback ((char*)&_XmStrings[5532]) +#endif +#ifndef XmNcommandEnteredCallback +#define XmNcommandEnteredCallback ((char*)&_XmStrings[5555]) +#endif +#ifndef XmNcommandWindow +#define XmNcommandWindow ((char*)&_XmStrings[5578]) +#endif +#ifndef XmNcommandWindowLocation +#define XmNcommandWindowLocation ((char*)&_XmStrings[5592]) +#endif +#ifndef XmNconvertProc +#define XmNconvertProc ((char*)&_XmStrings[5614]) +#endif +#ifndef XmNcursorBackground +#define XmNcursorBackground ((char*)&_XmStrings[5626]) +#endif +#ifndef XmNcursorForeground +#define XmNcursorForeground ((char*)&_XmStrings[5643]) +#endif +#ifndef XmNcursorPosition +#define XmNcursorPosition ((char*)&_XmStrings[5660]) +#endif +#ifndef XmNcursorPositionVisible +#define XmNcursorPositionVisible ((char*)&_XmStrings[5675]) +#endif +#ifndef XmNdarkThreshold +#define XmNdarkThreshold ((char*)&_XmStrings[5697]) +#endif +#ifndef XmNdecimalPoints +#define XmNdecimalPoints ((char*)&_XmStrings[5711]) +#endif +#ifndef XmNdecrementCallback +#define XmNdecrementCallback ((char*)&_XmStrings[5725]) +#endif +#ifndef XmNdefaultActionCallback +#define XmNdefaultActionCallback ((char*)&_XmStrings[5743]) +#endif +#ifndef XmNdefaultButton +#define XmNdefaultButton ((char*)&_XmStrings[5765]) +#endif +#ifndef XmNdefaultButtonShadowThickness +#define XmNdefaultButtonShadowThickness ((char*)&_XmStrings[5779]) +#endif +#ifndef XmNdefaultButtonType +#define XmNdefaultButtonType ((char*)&_XmStrings[5808]) +#endif +#ifndef XmNdefaultCopyCursorIcon +#define XmNdefaultCopyCursorIcon ((char*)&_XmStrings[5826]) +#endif +#ifndef XmNdefaultFontList +#define XmNdefaultFontList ((char*)&_XmStrings[5848]) +#endif +#ifndef XmNdefaultInvalidCursorIcon +#define XmNdefaultInvalidCursorIcon ((char*)&_XmStrings[5864]) +#endif +#ifndef XmNdefaultLinkCursorIcon +#define XmNdefaultLinkCursorIcon ((char*)&_XmStrings[5889]) +#endif +#ifndef XmNdefaultMoveCursorIcon +#define XmNdefaultMoveCursorIcon ((char*)&_XmStrings[5911]) +#endif +#ifndef XmNdefaultNoneCursorIcon +#define XmNdefaultNoneCursorIcon ((char*)&_XmStrings[5933]) +#endif +#ifndef XmNdefaultPosition +#define XmNdefaultPosition ((char*)&_XmStrings[5955]) +#endif +#ifndef XmNdefaultSourceCursorIcon +#define XmNdefaultSourceCursorIcon ((char*)&_XmStrings[5971]) +#endif +#ifndef XmNdefaultValidCursorIcon +#define XmNdefaultValidCursorIcon ((char*)&_XmStrings[5995]) +#endif +#ifndef XmNdeleteResponse +#define XmNdeleteResponse ((char*)&_XmStrings[6018]) +#endif +#ifndef XmNdesktopParent +#define XmNdesktopParent ((char*)&_XmStrings[6033]) +#endif +#ifndef XmNdialogStyle +#define XmNdialogStyle ((char*)&_XmStrings[6047]) +#endif +#ifndef XmNdialogTitle +#define XmNdialogTitle ((char*)&_XmStrings[6059]) +#endif +#ifndef XmNdialogType +#define XmNdialogType ((char*)&_XmStrings[6071]) +#endif +#ifndef XmNdirListItemCount +#define XmNdirListItemCount ((char*)&_XmStrings[6082]) +#endif +#ifndef XmNdirListItems +#define XmNdirListItems ((char*)&_XmStrings[6099]) +#endif +#ifndef XmNdirListLabelString +#define XmNdirListLabelString ((char*)&_XmStrings[6112]) +#endif +#ifndef XmNdirMask +#define XmNdirMask ((char*)&_XmStrings[6131]) +#endif +#ifndef XmNdirSearchProc +#define XmNdirSearchProc ((char*)&_XmStrings[6139]) +#endif +#ifndef XmNdirSpec +#define XmNdirSpec ((char*)&_XmStrings[6153]) +#endif +#ifndef XmNdirectory +#define XmNdirectory ((char*)&_XmStrings[6161]) +#endif +#ifndef XmNdirectoryValid +#define XmNdirectoryValid ((char*)&_XmStrings[6171]) +#endif +#ifndef XmNdisarmCallback +#define XmNdisarmCallback ((char*)&_XmStrings[6186]) +#endif +#ifndef XmNdoubleClickInterval +#define XmNdoubleClickInterval ((char*)&_XmStrings[6201]) +#endif +#ifndef XmNdragCallback +#define XmNdragCallback ((char*)&_XmStrings[6221]) +#endif +#ifndef XmNdragContextClass +#define XmNdragContextClass ((char*)&_XmStrings[6234]) +#endif +#ifndef XmNdragDropFinishCallback +#define XmNdragDropFinishCallback ((char*)&_XmStrings[6251]) +#endif +#ifndef XmNdragIconClass +#define XmNdragIconClass ((char*)&_XmStrings[6274]) +#endif +#ifndef XmNdragInitiatorProtocolStyle +#define XmNdragInitiatorProtocolStyle ((char*)&_XmStrings[6288]) +#endif +#ifndef XmNdragMotionCallback +#define XmNdragMotionCallback ((char*)&_XmStrings[6315]) +#endif +#ifndef XmNdragOperations +#define XmNdragOperations ((char*)&_XmStrings[6334]) +#endif +#ifndef XmNdragOverMode +#define XmNdragOverMode ((char*)&_XmStrings[6349]) +#endif +#ifndef XmNdragProc +#define XmNdragProc ((char*)&_XmStrings[6362]) +#endif +#ifndef XmNdragReceiverProtocolStyle +#define XmNdragReceiverProtocolStyle ((char*)&_XmStrings[6371]) +#endif +#ifndef XmNdropFinishCallback +#define XmNdropFinishCallback ((char*)&_XmStrings[6397]) +#endif +#ifndef XmNdropProc +#define XmNdropProc ((char*)&_XmStrings[6416]) +#endif +#ifndef XmNdropRectangles +#define XmNdropRectangles ((char*)&_XmStrings[6425]) +#endif +#ifndef XmNdropSiteActivity +#define XmNdropSiteActivity ((char*)&_XmStrings[6440]) +#endif +#ifndef XmNdropSiteEnterCallback +#define XmNdropSiteEnterCallback ((char*)&_XmStrings[6457]) +#endif +#ifndef XmNdropSiteLeaveCallback +#define XmNdropSiteLeaveCallback ((char*)&_XmStrings[6479]) +#endif +#ifndef XmNdropSiteManagerClass +#define XmNdropSiteManagerClass ((char*)&_XmStrings[6501]) +#endif +#ifndef XmNdropSiteOperations +#define XmNdropSiteOperations ((char*)&_XmStrings[6522]) +#endif +#ifndef XmNdropSiteType +#define XmNdropSiteType ((char*)&_XmStrings[6541]) +#endif +#ifndef XmNdropStartCallback +#define XmNdropStartCallback ((char*)&_XmStrings[6554]) +#endif +#ifndef XmNdropTransferClass +#define XmNdropTransferClass ((char*)&_XmStrings[6572]) +#endif +#ifndef XmNdropTransfers +#define XmNdropTransfers ((char*)&_XmStrings[6590]) +#endif +#ifndef XmNeditMode +#define XmNeditMode ((char*)&_XmStrings[6604]) +#endif +#ifndef XmNeditable +#define XmNeditable ((char*)&_XmStrings[6613]) +#endif +#ifndef XmNentryAlignment +#define XmNentryAlignment ((char*)&_XmStrings[6622]) +#endif +#ifndef XmNentryBorder +#define XmNentryBorder ((char*)&_XmStrings[6637]) +#endif +#ifndef XmNentryCallback +#define XmNentryCallback ((char*)&_XmStrings[6649]) +#endif +#ifndef XmNentryClass +#define XmNentryClass ((char*)&_XmStrings[6663]) +#endif +#ifndef XmNentryVerticalAlignment +#define XmNentryVerticalAlignment ((char*)&_XmStrings[6674]) +#endif +#ifndef XmNexportTargets +#define XmNexportTargets ((char*)&_XmStrings[6697]) +#endif +#ifndef XmNexposeCallback +#define XmNexposeCallback ((char*)&_XmStrings[6711]) +#endif +#ifndef XmNextendedSelectionCallback +#define XmNextendedSelectionCallback ((char*)&_XmStrings[6726]) +#endif +#ifndef XmNextensionType +#define XmNextensionType ((char*)&_XmStrings[6752]) +#endif +#ifndef XmNfileListItemCount +#define XmNfileListItemCount ((char*)&_XmStrings[6766]) +#endif +#ifndef XmNfileListItems +#define XmNfileListItems ((char*)&_XmStrings[6784]) +#endif +#ifndef XmNfileListLabelString +#define XmNfileListLabelString ((char*)&_XmStrings[6798]) +#endif +#ifndef XmNfileSearchProc +#define XmNfileSearchProc ((char*)&_XmStrings[6818]) +#endif +#ifndef XmNfileTypeMask +#define XmNfileTypeMask ((char*)&_XmStrings[6833]) +#endif +#ifndef XmNfillOnArm +#define XmNfillOnArm ((char*)&_XmStrings[6846]) +#endif +#ifndef XmNfillOnSelect +#define XmNfillOnSelect ((char*)&_XmStrings[6856]) +#endif +#ifndef XmNfilterLabelString +#define XmNfilterLabelString ((char*)&_XmStrings[6869]) +#endif +#ifndef XmNfocusCallback +#define XmNfocusCallback ((char*)&_XmStrings[6887]) +#endif +#ifndef XmNfocusMovedCallback +#define XmNfocusMovedCallback ((char*)&_XmStrings[6901]) +#endif +#ifndef XmNfocusPolicyChanged +#define XmNfocusPolicyChanged ((char*)&_XmStrings[6920]) +#endif +#ifndef XmNfontList +#define XmNfontList ((char*)&_XmStrings[6939]) +#endif +#ifndef XmNforegroundThreshold +#define XmNforegroundThreshold ((char*)&_XmStrings[6948]) +#endif +#ifndef XmNfractionBase +#define XmNfractionBase ((char*)&_XmStrings[6968]) +#endif +#ifndef XmNgainPrimaryCallback +#define XmNgainPrimaryCallback ((char*)&_XmStrings[6981]) +#endif +#ifndef XmNhelpCallback +#define XmNhelpCallback ((char*)&_XmStrings[7001]) +#endif +#ifndef XmNhelpLabelString +#define XmNhelpLabelString ((char*)&_XmStrings[7014]) +#endif +#ifndef XmNhighlightColor +#define XmNhighlightColor ((char*)&_XmStrings[7030]) +#endif +#ifndef XmNhighlightOnEnter +#define XmNhighlightOnEnter ((char*)&_XmStrings[7045]) +#endif +#ifndef XmNhighlightPixmap +#define XmNhighlightPixmap ((char*)&_XmStrings[7062]) +#endif +#ifndef XmNhighlightThickness +#define XmNhighlightThickness ((char*)&_XmStrings[7078]) +#endif +#ifndef XmNhistoryItemCount +#define XmNhistoryItemCount ((char*)&_XmStrings[7097]) +#endif +#ifndef XmNhistoryItems +#define XmNhistoryItems ((char*)&_XmStrings[7114]) +#endif +#ifndef XmNhistoryMaxItems +#define XmNhistoryMaxItems ((char*)&_XmStrings[7127]) +#endif +#ifndef XmNhistoryVisibleItemCount +#define XmNhistoryVisibleItemCount ((char*)&_XmStrings[7143]) +#endif +#ifndef XmNhorizontalFontUnit +#define XmNhorizontalFontUnit ((char*)&_XmStrings[7167]) +#endif +#ifndef XmNhorizontalScrollBar +#define XmNhorizontalScrollBar ((char*)&_XmStrings[7186]) +#endif +#ifndef XmNhorizontalSpacing +#define XmNhorizontalSpacing ((char*)&_XmStrings[7206]) +#endif +#ifndef XmNhotX +#define XmNhotX ((char*)&_XmStrings[7224]) +#endif +#ifndef XmNhotY +#define XmNhotY ((char*)&_XmStrings[7229]) +#endif +#ifndef XmNiccHandle +#define XmNiccHandle ((char*)&_XmStrings[7234]) +#endif +#ifndef XmNimportTargets +#define XmNimportTargets ((char*)&_XmStrings[7244]) +#endif +#ifndef XmNincrement +#define XmNincrement ((char*)&_XmStrings[7258]) +#endif +#ifndef XmNincrementCallback +#define XmNincrementCallback ((char*)&_XmStrings[7268]) +#endif +#ifndef XmNincremental +#define XmNincremental ((char*)&_XmStrings[7286]) +#endif +#ifndef XmNindicatorOn +#define XmNindicatorOn ((char*)&_XmStrings[7298]) +#endif +#ifndef XmNindicatorSize +#define XmNindicatorSize ((char*)&_XmStrings[7310]) +#endif +#ifndef XmNindicatorType +#define XmNindicatorType ((char*)&_XmStrings[7324]) +#endif +#ifndef XmNinitialDelay +#define XmNinitialDelay ((char*)&_XmStrings[7338]) +#endif +#ifndef XmNinitialFocus +#define XmNinitialFocus ((char*)&_XmStrings[7351]) +#endif +#ifndef XmNinputCallback +#define XmNinputCallback ((char*)&_XmStrings[7364]) +#endif +#ifndef XmNinputCreate +#define XmNinputCreate ((char*)&_XmStrings[7378]) +#endif +#ifndef XmNinputMethod +#define XmNinputMethod ((char*)&_XmStrings[7390]) +#endif +#ifndef XmNinvalidCursorForeground +#define XmNinvalidCursorForeground ((char*)&_XmStrings[7402]) +#endif +#ifndef XmNisAligned +#define XmNisAligned ((char*)&_XmStrings[7426]) +#endif +#ifndef XmNisHomogeneous +#define XmNisHomogeneous ((char*)&_XmStrings[7436]) +#endif +#ifndef XmNitemCount +#define XmNitemCount ((char*)&_XmStrings[7450]) +#endif +#ifndef XmNitems +#define XmNitems ((char*)&_XmStrings[7460]) +#endif +#ifndef XmNkeyboardFocusPolicy +#define XmNkeyboardFocusPolicy ((char*)&_XmStrings[7466]) +#endif +#ifndef XmNlabelFontList +#define XmNlabelFontList ((char*)&_XmStrings[7486]) +#endif +#ifndef XmNlabelInsensitivePixmap +#define XmNlabelInsensitivePixmap ((char*)&_XmStrings[7500]) +#endif +#ifndef XmNlabelPixmap +#define XmNlabelPixmap ((char*)&_XmStrings[7523]) +#endif +#ifndef XmNlabelString +#define XmNlabelString ((char*)&_XmStrings[7535]) +#endif +#ifndef XmNlabelType +#define XmNlabelType ((char*)&_XmStrings[7547]) +#endif +#ifndef XmNleftAttachment +#define XmNleftAttachment ((char*)&_XmStrings[7557]) +#endif +#ifndef XmNleftOffset +#define XmNleftOffset ((char*)&_XmStrings[7572]) +#endif +#ifndef XmNleftPosition +#define XmNleftPosition ((char*)&_XmStrings[7583]) +#endif +#ifndef XmNleftWidget +#define XmNleftWidget ((char*)&_XmStrings[7596]) +#endif +#ifndef XmNlightThreshold +#define XmNlightThreshold ((char*)&_XmStrings[7607]) +#endif +#ifndef XmNlineSpace +#define XmNlineSpace ((char*)&_XmStrings[7622]) +#endif +#ifndef XmNlistItemCount +#define XmNlistItemCount ((char*)&_XmStrings[7632]) +#endif +#ifndef XmNlistItems +#define XmNlistItems ((char*)&_XmStrings[7646]) +#endif +#ifndef XmNlistLabelString +#define XmNlistLabelString ((char*)&_XmStrings[7656]) +#endif +#ifndef XmNlistMarginHeight +#define XmNlistMarginHeight ((char*)&_XmStrings[7672]) +#endif +#ifndef XmNlistMarginWidth +#define XmNlistMarginWidth ((char*)&_XmStrings[7689]) +#endif +#ifndef XmNlistSizePolicy +#define XmNlistSizePolicy ((char*)&_XmStrings[7705]) +#endif +#ifndef XmNlistSpacing +#define XmNlistSpacing ((char*)&_XmStrings[7720]) +#endif +#ifndef XmNlistUpdated +#define XmNlistUpdated ((char*)&_XmStrings[7732]) +#endif +#ifndef XmNlistVisibleItemCount +#define XmNlistVisibleItemCount ((char*)&_XmStrings[7744]) +#endif +#ifndef XmNlogicalParent +#define XmNlogicalParent ((char*)&_XmStrings[7765]) +#endif +#ifndef XmNlosePrimaryCallback +#define XmNlosePrimaryCallback ((char*)&_XmStrings[7779]) +#endif +#ifndef XmNlosingFocusCallback +#define XmNlosingFocusCallback ((char*)&_XmStrings[7799]) +#endif +#ifndef XmNmainWindowMarginHeight +#define XmNmainWindowMarginHeight ((char*)&_XmStrings[7819]) +#endif +#ifndef XmNmainWindowMarginWidth +#define XmNmainWindowMarginWidth ((char*)&_XmStrings[7842]) +#endif +#ifndef XmNmapCallback +#define XmNmapCallback ((char*)&_XmStrings[7864]) +#endif +#ifndef XmNmappingDelay +#define XmNmappingDelay ((char*)&_XmStrings[7876]) +#endif +#ifndef XmNmargin +#define XmNmargin ((char*)&_XmStrings[7889]) +#endif +#ifndef XmNmarginBottom +#define XmNmarginBottom ((char*)&_XmStrings[7896]) +#endif +#ifndef XmNmarginHeight +#define XmNmarginHeight ((char*)&_XmStrings[7909]) +#endif +#ifndef XmNmarginLeft +#define XmNmarginLeft ((char*)&_XmStrings[7922]) +#endif +#ifndef XmNmarginRight +#define XmNmarginRight ((char*)&_XmStrings[7933]) +#endif +#ifndef XmNmarginTop +#define XmNmarginTop ((char*)&_XmStrings[7945]) +#endif +#ifndef XmNmarginWidth +#define XmNmarginWidth ((char*)&_XmStrings[7955]) +#endif +#ifndef XmNmask +#define XmNmask ((char*)&_XmStrings[7967]) +#endif +#ifndef XmNmaxLength +#define XmNmaxLength ((char*)&_XmStrings[7972]) +#endif +#ifndef XmNmaximum +#define XmNmaximum ((char*)&_XmStrings[7982]) +#endif +#ifndef XmNmenuAccelerator +#define XmNmenuAccelerator ((char*)&_XmStrings[7990]) +#endif +#ifndef XmNmenuBar +#define XmNmenuBar ((char*)&_XmStrings[8006]) +#endif +#ifndef XmNmenuCursor +#define XmNmenuCursor ((char*)&_XmStrings[8014]) +#endif +#ifndef XmNmenuHelpWidget +#define XmNmenuHelpWidget ((char*)&_XmStrings[8025]) +#endif +#ifndef XmNmenuHistory +#define XmNmenuHistory ((char*)&_XmStrings[8040]) +#endif +#ifndef XmNmenuPost +#define XmNmenuPost ((char*)&_XmStrings[8052]) +#endif +#ifndef XmNmessageAlignment +#define XmNmessageAlignment ((char*)&_XmStrings[8061]) +#endif +#ifndef XmNmessageProc +#define XmNmessageProc ((char*)&_XmStrings[8078]) +#endif +#ifndef XmNmessageString +#define XmNmessageString ((char*)&_XmStrings[8090]) +#endif +#ifndef XmNmessageWindow +#define XmNmessageWindow ((char*)&_XmStrings[8104]) +#endif +#ifndef XmNminimizeButtons +#define XmNminimizeButtons ((char*)&_XmStrings[8118]) +#endif +#ifndef XmNminimum +#define XmNminimum ((char*)&_XmStrings[8134]) +#endif +#ifndef XmNmnemonic +#define XmNmnemonic ((char*)&_XmStrings[8142]) +#endif +#ifndef XmNmnemonicCharSet +#define XmNmnemonicCharSet ((char*)&_XmStrings[8151]) +#endif +#ifndef XmNmodifyVerifyCallback +#define XmNmodifyVerifyCallback ((char*)&_XmStrings[8167]) +#endif +#ifndef XmNmodifyVerifyCallbackWcs +#define XmNmodifyVerifyCallbackWcs ((char*)&_XmStrings[8188]) +#endif +#ifndef XmNmotionVerifyCallback +#define XmNmotionVerifyCallback ((char*)&_XmStrings[8212]) +#endif +#ifndef XmNmoveOpaque +#define XmNmoveOpaque ((char*)&_XmStrings[8233]) +#endif +#ifndef XmNmultiClick +#define XmNmultiClick ((char*)&_XmStrings[8244]) +#endif +#ifndef XmNmultipleSelectionCallback +#define XmNmultipleSelectionCallback ((char*)&_XmStrings[8255]) +#endif +#ifndef XmNmustMatch +#define XmNmustMatch ((char*)&_XmStrings[8281]) +#endif +#ifndef XmNmwmDecorations +#define XmNmwmDecorations ((char*)&_XmStrings[8291]) +#endif +#ifndef XmNmwmFunctions +#define XmNmwmFunctions ((char*)&_XmStrings[8306]) +#endif +#ifndef XmNmwmInputMode +#define XmNmwmInputMode ((char*)&_XmStrings[8319]) +#endif +#ifndef XmNmwmMenu +#define XmNmwmMenu ((char*)&_XmStrings[8332]) +#endif +#ifndef XmNmwmMessages +#define XmNmwmMessages ((char*)&_XmStrings[8340]) +#endif +#ifndef XmNnavigationType +#define XmNnavigationType ((char*)&_XmStrings[8352]) +#endif +#ifndef XmNneedsMotion +#define XmNneedsMotion ((char*)&_XmStrings[8367]) +#endif +#ifndef XmNnoMatchCallback +#define XmNnoMatchCallback ((char*)&_XmStrings[8379]) +#endif +#ifndef XmNnoMatchString +#define XmNnoMatchString ((char*)&_XmStrings[8395]) +#endif +#ifndef XmNnoResize +#define XmNnoResize ((char*)&_XmStrings[8409]) +#endif +#ifndef XmNnoneCursorForeground +#define XmNnoneCursorForeground ((char*)&_XmStrings[8418]) +#endif +#ifndef XmNnotifyProc +#define XmNnotifyProc ((char*)&_XmStrings[8439]) +#endif +#ifndef XmNnumColumns +#define XmNnumColumns ((char*)&_XmStrings[8450]) +#endif +#ifndef XmNnumDropRectangles +#define XmNnumDropRectangles ((char*)&_XmStrings[8461]) +#endif +#ifndef XmNnumDropTransfers +#define XmNnumDropTransfers ((char*)&_XmStrings[8479]) +#endif +#ifndef XmNnumExportTargets +#define XmNnumExportTargets ((char*)&_XmStrings[8496]) +#endif +#ifndef XmNnumImportTargets +#define XmNnumImportTargets ((char*)&_XmStrings[8513]) +#endif +#ifndef XmNnumRectangles +#define XmNnumRectangles ((char*)&_XmStrings[8530]) +#endif +#ifndef XmNoffsetX +#define XmNoffsetX ((char*)&_XmStrings[8544]) +#endif +#ifndef XmNoffsetY +#define XmNoffsetY ((char*)&_XmStrings[8552]) +#endif +#ifndef XmNokCallback +#define XmNokCallback ((char*)&_XmStrings[8560]) +#endif +#ifndef XmNokLabelString +#define XmNokLabelString ((char*)&_XmStrings[8571]) +#endif +#ifndef XmNoperationChangedCallback +#define XmNoperationChangedCallback ((char*)&_XmStrings[8585]) +#endif +#ifndef XmNoperationCursorIcon +#define XmNoperationCursorIcon ((char*)&_XmStrings[8610]) +#endif +#ifndef XmNoptionLabel +#define XmNoptionLabel ((char*)&_XmStrings[8630]) +#endif +#ifndef XmNoptionMnemonic +#define XmNoptionMnemonic ((char*)&_XmStrings[8642]) +#endif +#ifndef XmNoutputCreate +#define XmNoutputCreate ((char*)&_XmStrings[8657]) +#endif +#ifndef XmNpacking +#define XmNpacking ((char*)&_XmStrings[8670]) +#endif +#ifndef XmNpageDecrementCallback +#define XmNpageDecrementCallback ((char*)&_XmStrings[8678]) +#endif +#ifndef XmNpageIncrement +#define XmNpageIncrement ((char*)&_XmStrings[8700]) +#endif +#ifndef XmNpageIncrementCallback +#define XmNpageIncrementCallback ((char*)&_XmStrings[8714]) +#endif +#ifndef XmNpaneMaximum +#define XmNpaneMaximum ((char*)&_XmStrings[8736]) +#endif +#ifndef XmNpaneMinimum +#define XmNpaneMinimum ((char*)&_XmStrings[8748]) +#endif +#ifndef XmNpattern +#define XmNpattern ((char*)&_XmStrings[8760]) +#endif +#ifndef XmNpendingDelete +#define XmNpendingDelete ((char*)&_XmStrings[8768]) +#endif +#ifndef XmNpopupEnabled +#define XmNpopupEnabled ((char*)&_XmStrings[8782]) +#endif +#ifndef XmNpositionIndex +#define XmNpositionIndex ((char*)&_XmStrings[8795]) +#endif +#ifndef XmNpostFromButton +#define XmNpostFromButton ((char*)&_XmStrings[8809]) +#endif +#ifndef XmNpostFromCount +#define XmNpostFromCount ((char*)&_XmStrings[8824]) +#endif +#ifndef XmNpostFromList +#define XmNpostFromList ((char*)&_XmStrings[8838]) +#endif +#ifndef XmNpreeditType +#define XmNpreeditType ((char*)&_XmStrings[8851]) +#endif +#ifndef XmNprocessingDirection +#define XmNprocessingDirection ((char*)&_XmStrings[8863]) +#endif +#ifndef XmNpromptString +#define XmNpromptString ((char*)&_XmStrings[8883]) +#endif +#ifndef XmNprotocolCallback +#define XmNprotocolCallback ((char*)&_XmStrings[8896]) +#endif +#ifndef XmNpushButtonEnabled +#define XmNpushButtonEnabled ((char*)&_XmStrings[8913]) +#endif +#ifndef XmNqualifySearchDataProc +#define XmNqualifySearchDataProc ((char*)&_XmStrings[8931]) +#endif +#ifndef XmNradioAlwaysOne +#define XmNradioAlwaysOne ((char*)&_XmStrings[8953]) +#endif +#ifndef XmNradioBehavior +#define XmNradioBehavior ((char*)&_XmStrings[8968]) +#endif +#ifndef XmNrealizeCallback +#define XmNrealizeCallback ((char*)&_XmStrings[8982]) +#endif +#ifndef XmNrecomputeSize +#define XmNrecomputeSize ((char*)&_XmStrings[8998]) +#endif +#ifndef XmNrectangles +#define XmNrectangles ((char*)&_XmStrings[9012]) +#endif +#ifndef XmNrefigureMode +#define XmNrefigureMode ((char*)&_XmStrings[9023]) +#endif +#ifndef XmNrepeatDelay +#define XmNrepeatDelay ((char*)&_XmStrings[9036]) +#endif +#ifndef XmNresizable +#define XmNresizable ((char*)&_XmStrings[9048]) +#endif +#ifndef XmNresizeCallback +#define XmNresizeCallback ((char*)&_XmStrings[9058]) +#endif +#ifndef XmNresizeHeight +#define XmNresizeHeight ((char*)&_XmStrings[9073]) +#endif +#ifndef XmNresizePolicy +#define XmNresizePolicy ((char*)&_XmStrings[9086]) +#endif +#ifndef XmNresizeWidth +#define XmNresizeWidth ((char*)&_XmStrings[9099]) +#endif +#ifndef XmNrightAttachment +#define XmNrightAttachment ((char*)&_XmStrings[9111]) +#endif +#ifndef XmNrightOffset +#define XmNrightOffset ((char*)&_XmStrings[9127]) +#endif +#ifndef XmNrightPosition +#define XmNrightPosition ((char*)&_XmStrings[9139]) +#endif +#ifndef XmNrightWidget +#define XmNrightWidget ((char*)&_XmStrings[9153]) +#endif +#ifndef XmNrowColumnType +#define XmNrowColumnType ((char*)&_XmStrings[9165]) +#endif +#ifndef XmNrows +#define XmNrows ((char*)&_XmStrings[9179]) +#endif +#ifndef XmNrubberPositioning +#define XmNrubberPositioning ((char*)&_XmStrings[9184]) +#endif +#ifndef XmNsashHeight +#define XmNsashHeight ((char*)&_XmStrings[9202]) +#endif +#ifndef XmNsashIndent +#define XmNsashIndent ((char*)&_XmStrings[9213]) +#endif +#ifndef XmNsashShadowThickness +#define XmNsashShadowThickness ((char*)&_XmStrings[9224]) +#endif +#ifndef XmNsashWidth +#define XmNsashWidth ((char*)&_XmStrings[9244]) +#endif +#ifndef XmNscaleHeight +#define XmNscaleHeight ((char*)&_XmStrings[9254]) +#endif +#ifndef XmNscaleMultiple +#define XmNscaleMultiple ((char*)&_XmStrings[9266]) +#endif +#ifndef XmNscaleWidth +#define XmNscaleWidth ((char*)&_XmStrings[9280]) +#endif +#ifndef XmNscrollBarDisplayPolicy +#define XmNscrollBarDisplayPolicy ((char*)&_XmStrings[9291]) +#endif +#ifndef XmNscrollBarPlacement +#define XmNscrollBarPlacement ((char*)&_XmStrings[9314]) +#endif +#ifndef XmNscrollHorizontal +#define XmNscrollHorizontal ((char*)&_XmStrings[9333]) +#endif +#ifndef XmNscrollLeftSide +#define XmNscrollLeftSide ((char*)&_XmStrings[9350]) +#endif +#ifndef XmNscrollTopSide +#define XmNscrollTopSide ((char*)&_XmStrings[9365]) +#endif +#ifndef XmNscrollVertical +#define XmNscrollVertical ((char*)&_XmStrings[9379]) +#endif +#ifndef XmNscrolledWindowMarginHeight +#define XmNscrolledWindowMarginHeight ((char*)&_XmStrings[9394]) +#endif +#ifndef XmNscrolledWindowMarginWidth +#define XmNscrolledWindowMarginWidth ((char*)&_XmStrings[9421]) +#endif +#ifndef XmNscrollingPolicy +#define XmNscrollingPolicy ((char*)&_XmStrings[9447]) +#endif +#ifndef XmNselectColor +#define XmNselectColor ((char*)&_XmStrings[9463]) +#endif +#ifndef XmNselectInsensitivePixmap +#define XmNselectInsensitivePixmap ((char*)&_XmStrings[9475]) +#endif +#ifndef XmNselectPixmap +#define XmNselectPixmap ((char*)&_XmStrings[9499]) +#endif +#ifndef XmNselectThreshold +#define XmNselectThreshold ((char*)&_XmStrings[9512]) +#endif +#ifndef XmNselectedItemCount +#define XmNselectedItemCount ((char*)&_XmStrings[9528]) +#endif +#ifndef XmNselectedItems +#define XmNselectedItems ((char*)&_XmStrings[9546]) +#endif +#ifndef XmNselectionArrayCount +#define XmNselectionArrayCount ((char*)&_XmStrings[9560]) +#endif +#ifndef XmNselectionLabelString +#define XmNselectionLabelString ((char*)&_XmStrings[9580]) +#endif +#ifndef XmNselectionPolicy +#define XmNselectionPolicy ((char*)&_XmStrings[9601]) +#endif +#ifndef XmNseparatorOn +#define XmNseparatorOn ((char*)&_XmStrings[9617]) +#endif +#ifndef XmNseparatorType +#define XmNseparatorType ((char*)&_XmStrings[9629]) +#endif +#ifndef XmNset +#define XmNset ((char*)&_XmStrings[9643]) +#endif +#ifndef XmNshadow +#define XmNshadow ((char*)&_XmStrings[9647]) +#endif +#ifndef XmNshadowThickness +#define XmNshadowThickness ((char*)&_XmStrings[9654]) +#endif +#ifndef XmNshadowType +#define XmNshadowType ((char*)&_XmStrings[9670]) +#endif +#ifndef XmNshellUnitType +#define XmNshellUnitType ((char*)&_XmStrings[9681]) +#endif +#ifndef XmNshowArrows +#define XmNshowArrows ((char*)&_XmStrings[9695]) +#endif +#ifndef XmNshowAsDefault +#define XmNshowAsDefault ((char*)&_XmStrings[9706]) +#endif +#ifndef XmNshowSeparator +#define XmNshowSeparator ((char*)&_XmStrings[9720]) +#endif +#ifndef XmNshowValue +#define XmNshowValue ((char*)&_XmStrings[9734]) +#endif +#ifndef XmNsimpleCallback +#define XmNsimpleCallback ((char*)&_XmStrings[9744]) +#endif +#ifndef XmNsingleSelectionCallback +#define XmNsingleSelectionCallback ((char*)&_XmStrings[9759]) +#endif +#ifndef XmNsizePolicy +#define XmNsizePolicy ((char*)&_XmStrings[9783]) +#endif +#ifndef XmNskipAdjust +#define XmNskipAdjust ((char*)&_XmStrings[9794]) +#endif +#ifndef XmNsliderSize +#define XmNsliderSize ((char*)&_XmStrings[9805]) +#endif +#ifndef XmNsource +#define XmNsource ((char*)&_XmStrings[9816]) +#endif +#ifndef XmNsourceCursorIcon +#define XmNsourceCursorIcon ((char*)&_XmStrings[9823]) +#endif +#ifndef XmNsourceIsExternal +#define XmNsourceIsExternal ((char*)&_XmStrings[9840]) +#endif +#ifndef XmNsourcePixmapIcon +#define XmNsourcePixmapIcon ((char*)&_XmStrings[9857]) +#endif +#ifndef XmNsourceWidget +#define XmNsourceWidget ((char*)&_XmStrings[9874]) +#endif +#ifndef XmNsourceWindow +#define XmNsourceWindow ((char*)&_XmStrings[9887]) +#endif +#ifndef XmNspacing +#define XmNspacing ((char*)&_XmStrings[9900]) +#endif +#ifndef XmNspotLocation +#define XmNspotLocation ((char*)&_XmStrings[9908]) +#endif +#ifndef XmNstartTime +#define XmNstartTime ((char*)&_XmStrings[9921]) +#endif +#ifndef XmNstateCursorIcon +#define XmNstateCursorIcon ((char*)&_XmStrings[9931]) +#endif +#ifndef XmNstringDirection +#define XmNstringDirection ((char*)&_XmStrings[9947]) +#endif +#ifndef XmNsubMenuId +#define XmNsubMenuId ((char*)&_XmStrings[9963]) +#endif +#ifndef XmNsymbolPixmap +#define XmNsymbolPixmap ((char*)&_XmStrings[9973]) +#endif +#ifndef XmNtearOffMenuActivateCallback +#define XmNtearOffMenuActivateCallback ((char*)&_XmStrings[9986]) +#endif +#ifndef XmNtearOffMenuDeactivateCallback +#define XmNtearOffMenuDeactivateCallback ((char*)&_XmStrings[10014]) +#endif +#ifndef XmNtearOffModel +#define XmNtearOffModel ((char*)&_XmStrings[10044]) +#endif +#ifndef XmNtextAccelerators +#define XmNtextAccelerators ((char*)&_XmStrings[10057]) +#endif +#ifndef XmNtextColumns +#define XmNtextColumns ((char*)&_XmStrings[10074]) +#endif +#ifndef XmNtextFontList +#define XmNtextFontList ((char*)&_XmStrings[10086]) +#endif +#ifndef XmNtextString +#define XmNtextString ((char*)&_XmStrings[10099]) +#endif +#ifndef XmNtextTranslations +#define XmNtextTranslations ((char*)&_XmStrings[10110]) +#endif +#ifndef XmNtextValue +#define XmNtextValue ((char*)&_XmStrings[10127]) +#endif +#ifndef XmNtitleString +#define XmNtitleString ((char*)&_XmStrings[10137]) +#endif +#ifndef XmNtoBottomCallback +#define XmNtoBottomCallback ((char*)&_XmStrings[10149]) +#endif +#ifndef XmNtoPositionCallback +#define XmNtoPositionCallback ((char*)&_XmStrings[10166]) +#endif +#ifndef XmNtoTopCallback +#define XmNtoTopCallback ((char*)&_XmStrings[10185]) +#endif +#ifndef XmNtopAttachment +#define XmNtopAttachment ((char*)&_XmStrings[10199]) +#endif +#ifndef XmNtopCharacter +#define XmNtopCharacter ((char*)&_XmStrings[10213]) +#endif +#ifndef XmNtopItemPosition +#define XmNtopItemPosition ((char*)&_XmStrings[10226]) +#endif +#ifndef XmNtopLevelEnterCallback +#define XmNtopLevelEnterCallback ((char*)&_XmStrings[10242]) +#endif +#ifndef XmNtopLevelLeaveCallback +#define XmNtopLevelLeaveCallback ((char*)&_XmStrings[10264]) +#endif +#ifndef XmNtopOffset +#define XmNtopOffset ((char*)&_XmStrings[10286]) +#endif +#ifndef XmNtopPosition +#define XmNtopPosition ((char*)&_XmStrings[10296]) +#endif +#ifndef XmNtopShadowColor +#define XmNtopShadowColor ((char*)&_XmStrings[10308]) +#endif +#ifndef XmNtopShadowPixmap +#define XmNtopShadowPixmap ((char*)&_XmStrings[10323]) +#endif +#ifndef XmNtopWidget +#define XmNtopWidget ((char*)&_XmStrings[10339]) +#endif +#ifndef XmNtransferProc +#define XmNtransferProc ((char*)&_XmStrings[10349]) +#endif +#ifndef XmNtransferStatus +#define XmNtransferStatus ((char*)&_XmStrings[10362]) +#endif +#ifndef XmNtraversalCallback +#define XmNtraversalCallback ((char*)&_XmStrings[10377]) +#endif +#ifndef XmNtraversalOn +#define XmNtraversalOn ((char*)&_XmStrings[10395]) +#endif +#ifndef XmNtraversalType +#define XmNtraversalType ((char*)&_XmStrings[10407]) +#endif +#ifndef XmNtraverseObscuredCallback +#define XmNtraverseObscuredCallback ((char*)&_XmStrings[10421]) +#endif +#ifndef XmNtreeUpdateProc +#define XmNtreeUpdateProc ((char*)&_XmStrings[10446]) +#endif +#ifndef XmNtroughColor +#define XmNtroughColor ((char*)&_XmStrings[10461]) +#endif +#ifndef XmNunitType +#define XmNunitType ((char*)&_XmStrings[10473]) +#endif +#ifndef XmNunmapCallback +#define XmNunmapCallback ((char*)&_XmStrings[10482]) +#endif +#ifndef XmNunpostBehavior +#define XmNunpostBehavior ((char*)&_XmStrings[10496]) +#endif +#ifndef XmNunselectPixmap +#define XmNunselectPixmap ((char*)&_XmStrings[10511]) +#endif +#ifndef XmNupdateSliderSize +#define XmNupdateSliderSize ((char*)&_XmStrings[10526]) +#endif +#ifndef XmNuseAsyncGeometry +#define XmNuseAsyncGeometry ((char*)&_XmStrings[10543]) +#endif +#ifndef XmNuserData +#define XmNuserData ((char*)&_XmStrings[10560]) +#endif +#ifndef XmNvalidCursorForeground +#define XmNvalidCursorForeground ((char*)&_XmStrings[10569]) +#endif +#ifndef XmNvalueChangedCallback +#define XmNvalueChangedCallback ((char*)&_XmStrings[10591]) +#endif +#ifndef XmNvalueWcs +#define XmNvalueWcs ((char*)&_XmStrings[10612]) +#endif +#ifndef XmNverifyBell +#define XmNverifyBell ((char*)&_XmStrings[10621]) +#endif +#ifndef XmNverticalFontUnit +#define XmNverticalFontUnit ((char*)&_XmStrings[10632]) +#endif +#ifndef XmNverticalScrollBar +#define XmNverticalScrollBar ((char*)&_XmStrings[10649]) +#endif +#ifndef XmNverticalSpacing +#define XmNverticalSpacing ((char*)&_XmStrings[10667]) +#endif +#ifndef XmNvisibleItemCount +#define XmNvisibleItemCount ((char*)&_XmStrings[10683]) +#endif +#ifndef XmNvisibleWhenOff +#define XmNvisibleWhenOff ((char*)&_XmStrings[10700]) +#endif +#ifndef XmNvisualPolicy +#define XmNvisualPolicy ((char*)&_XmStrings[10715]) +#endif +#ifndef XmNwhichButton +#define XmNwhichButton ((char*)&_XmStrings[10728]) +#endif +#ifndef XmNwordWrap +#define XmNwordWrap ((char*)&_XmStrings[10740]) +#endif +#ifndef XmNworkWindow +#define XmNworkWindow ((char*)&_XmStrings[10749]) +#endif +#ifndef XmRAlignment +#define XmRAlignment ((char*)&_XmStrings[10760]) +#endif +#ifndef XmRAnimationMask +#define XmRAnimationMask ((char*)&_XmStrings[10770]) +#endif +#ifndef XmRAnimationPixmap +#define XmRAnimationPixmap ((char*)&_XmStrings[10784]) +#endif +#ifndef XmRAnimationStyle +#define XmRAnimationStyle ((char*)&_XmStrings[10800]) +#endif +#ifndef XmRArrowDirection +#define XmRArrowDirection ((char*)&_XmStrings[10815]) +#endif +#ifndef XmRAtomList +#define XmRAtomList ((char*)&_XmStrings[10830]) +#endif +#ifndef XmRAttachment +#define XmRAttachment ((char*)&_XmStrings[10839]) +#endif +#ifndef XmRAudibleWarning +#define XmRAudibleWarning ((char*)&_XmStrings[10850]) +#endif +#ifndef XmRAvailability +#define XmRAvailability ((char*)&_XmStrings[10865]) +#endif +#ifndef XmRBackgroundPixmap +#define XmRBackgroundPixmap ((char*)&_XmStrings[10878]) +#endif +#ifndef XmRBlendModel +#define XmRBlendModel ((char*)&_XmStrings[10895]) +#endif +#ifndef XmRBooleanDimension +#define XmRBooleanDimension ((char*)&_XmStrings[10906]) +#endif +#ifndef XmRBottomShadowPixmap +#define XmRBottomShadowPixmap ((char*)&_XmStrings[10923]) +#endif +#ifndef XmRButtonType +#define XmRButtonType ((char*)&_XmStrings[10942]) +#endif +#ifndef XmRCallbackProc +#define XmRCallbackProc ((char*)&_XmStrings[10953]) +#endif +#ifndef XmRChar +#define XmRChar ((char*)&_XmStrings[10966]) +#endif +#ifndef XmRCharSetTable +#define XmRCharSetTable ((char*)&_XmStrings[10971]) +#endif +#ifndef XmRChildHorizontalAlignment +#define XmRChildHorizontalAlignment ((char*)&_XmStrings[10984]) +#endif +#ifndef XmRChildPlacement +#define XmRChildPlacement ((char*)&_XmStrings[11009]) +#endif +#ifndef XmRChildType +#define XmRChildType ((char*)&_XmStrings[11024]) +#endif +#ifndef XmRChildVerticalAlignment +#define XmRChildVerticalAlignment ((char*)&_XmStrings[11034]) +#endif +#ifndef XmRCommandWindowLocation +#define XmRCommandWindowLocation ((char*)&_XmStrings[11057]) +#endif +#ifndef XmRCompoundText +#define XmRCompoundText ((char*)&_XmStrings[11079]) +#endif +#ifndef XmRDefaultButtonType +#define XmRDefaultButtonType ((char*)&_XmStrings[11092]) +#endif +#ifndef XmRDeleteResponse +#define XmRDeleteResponse ((char*)&_XmStrings[11110]) +#endif +#ifndef XmRDialogStyle +#define XmRDialogStyle ((char*)&_XmStrings[11125]) +#endif +#ifndef XmRDialogType +#define XmRDialogType ((char*)&_XmStrings[11137]) +#endif +#ifndef XmRDoubleClickInterval +#define XmRDoubleClickInterval ((char*)&_XmStrings[11148]) +#endif +#ifndef XmRDragInitiatorProtocolStyle +#define XmRDragInitiatorProtocolStyle ((char*)&_XmStrings[11168]) +#endif +#ifndef XmRDragReceiverProtocolStyle +#define XmRDragReceiverProtocolStyle ((char*)&_XmStrings[11195]) +#endif +#ifndef XmRDropSiteActivity +#define XmRDropSiteActivity ((char*)&_XmStrings[11221]) +#endif +#ifndef XmRDropSiteOperations +#define XmRDropSiteOperations ((char*)&_XmStrings[11238]) +#endif +#ifndef XmRDropSiteType +#define XmRDropSiteType ((char*)&_XmStrings[11257]) +#endif +#ifndef XmRDropTransfers +#define XmRDropTransfers ((char*)&_XmStrings[11270]) +#endif +#ifndef XmRExtensionType +#define XmRExtensionType ((char*)&_XmStrings[11284]) +#endif +#ifndef XmRFileTypeMask +#define XmRFileTypeMask ((char*)&_XmStrings[11298]) +#endif +#ifndef XmRFontList +#define XmRFontList ((char*)&_XmStrings[11311]) +#endif +#ifndef XmRGadgetPixmap +#define XmRGadgetPixmap ((char*)&_XmStrings[11320]) +#endif +#ifndef XmRHighlightPixmap +#define XmRHighlightPixmap ((char*)&_XmStrings[11333]) +#endif +#ifndef XmRHorizontalDimension +#define XmRHorizontalDimension ((char*)&_XmStrings[11349]) +#endif +#ifndef XmRHorizontalInt +#define XmRHorizontalInt ((char*)&_XmStrings[11369]) +#endif +#ifndef XmRHorizontalPosition +#define XmRHorizontalPosition ((char*)&_XmStrings[11383]) +#endif +#ifndef XmRIconAttachment +#define XmRIconAttachment ((char*)&_XmStrings[11402]) +#endif +#ifndef XmRImportTargets +#define XmRImportTargets ((char*)&_XmStrings[11417]) +#endif +#ifndef XmRIndicatorType +#define XmRIndicatorType ((char*)&_XmStrings[11431]) +#endif +#ifndef XmRItemCount +#define XmRItemCount ((char*)&_XmStrings[11445]) +#endif +#ifndef XmRItems +#define XmRItems ((char*)&_XmStrings[11455]) +#endif +#ifndef XmRKeySym +#define XmRKeySym ((char*)&_XmStrings[11461]) +#endif +#ifndef XmRKeySymTable +#define XmRKeySymTable ((char*)&_XmStrings[11468]) +#endif +#ifndef XmRKeyboardFocusPolicy +#define XmRKeyboardFocusPolicy ((char*)&_XmStrings[11480]) +#endif +#ifndef XmRLabelType +#define XmRLabelType ((char*)&_XmStrings[11500]) +#endif +#ifndef XmRListMarginHeight +#define XmRListMarginHeight ((char*)&_XmStrings[11510]) +#endif +#ifndef XmRListMarginWidth +#define XmRListMarginWidth ((char*)&_XmStrings[11527]) +#endif +#ifndef XmRListSizePolicy +#define XmRListSizePolicy ((char*)&_XmStrings[11543]) +#endif +#ifndef XmRListSpacing +#define XmRListSpacing ((char*)&_XmStrings[11558]) +#endif +#ifndef XmRManBottomShadowPixmap +#define XmRManBottomShadowPixmap ((char*)&_XmStrings[11570]) +#endif +#ifndef XmRManForegroundPixmap +#define XmRManForegroundPixmap ((char*)&_XmStrings[11592]) +#endif +#ifndef XmRManHighlightPixmap +#define XmRManHighlightPixmap ((char*)&_XmStrings[11612]) +#endif +#ifndef XmRManTopShadowPixmap +#define XmRManTopShadowPixmap ((char*)&_XmStrings[11631]) +#endif +#ifndef XmRMenuWidget +#define XmRMenuWidget ((char*)&_XmStrings[11650]) +#endif +#ifndef XmRMnemonic +#define XmRMnemonic ((char*)&_XmStrings[11661]) +#endif +#ifndef XmRMultiClick +#define XmRMultiClick ((char*)&_XmStrings[11670]) +#endif +#ifndef XmRNavigationType +#define XmRNavigationType ((char*)&_XmStrings[11681]) +#endif +#ifndef XmRPacking +#define XmRPacking ((char*)&_XmStrings[11696]) +#endif +#ifndef XmRPrimForegroundPixmap +#define XmRPrimForegroundPixmap ((char*)&_XmStrings[11704]) +#endif +#ifndef XmRProc +#define XmRProc ((char*)&_XmStrings[11725]) +#endif +#ifndef XmRProcessingDirection +#define XmRProcessingDirection ((char*)&_XmStrings[11730]) +#endif +#ifndef XmRRectangleList +#define XmRRectangleList ((char*)&_XmStrings[11750]) +#endif +#ifndef XmRResizePolicy +#define XmRResizePolicy ((char*)&_XmStrings[11764]) +#endif +#ifndef XmRRowColumnType +#define XmRRowColumnType ((char*)&_XmStrings[11777]) +#endif +#ifndef XmRScrollBarDisplayPolicy +#define XmRScrollBarDisplayPolicy ((char*)&_XmStrings[11791]) +#endif +#ifndef XmRScrollBarPlacement +#define XmRScrollBarPlacement ((char*)&_XmStrings[11814]) +#endif +#ifndef XmRScrollingPolicy +#define XmRScrollingPolicy ((char*)&_XmStrings[11833]) +#endif +#ifndef XmRSelectedItemCount +#define XmRSelectedItemCount ((char*)&_XmStrings[11849]) +#endif +#ifndef XmRSelectedItems +#define XmRSelectedItems ((char*)&_XmStrings[11867]) +#endif +#ifndef XmRSelectionPolicy +#define XmRSelectionPolicy ((char*)&_XmStrings[11881]) +#endif +#ifndef XmRSelectionType +#define XmRSelectionType ((char*)&_XmStrings[11897]) +#endif +#ifndef XmRSeparatorType +#define XmRSeparatorType ((char*)&_XmStrings[11911]) +#endif +#ifndef XmRShadowType +#define XmRShadowType ((char*)&_XmStrings[11925]) +#endif +#ifndef XmRShellHorizDim +#define XmRShellHorizDim ((char*)&_XmStrings[11936]) +#endif +#ifndef XmRShellHorizPos +#define XmRShellHorizPos ((char*)&_XmStrings[11950]) +#endif +#ifndef XmRShellUnitType +#define XmRShellUnitType ((char*)&_XmStrings[11964]) +#endif +#ifndef XmRShellVertDim +#define XmRShellVertDim ((char*)&_XmStrings[11978]) +#endif +#ifndef XmRShellVertPos +#define XmRShellVertPos ((char*)&_XmStrings[11991]) +#endif +#ifndef XmRSizePolicy +#define XmRSizePolicy ((char*)&_XmStrings[12004]) +#endif +#ifndef XmRStringDirection +#define XmRStringDirection ((char*)&_XmStrings[12015]) +#endif +#ifndef XmRTearOffModel +#define XmRTearOffModel ((char*)&_XmStrings[12031]) +#endif +#ifndef XmRTopShadowPixmap +#define XmRTopShadowPixmap ((char*)&_XmStrings[12044]) +#endif +#ifndef XmRTransferStatus +#define XmRTransferStatus ((char*)&_XmStrings[12060]) +#endif +#ifndef XmRTraversalType +#define XmRTraversalType ((char*)&_XmStrings[12075]) +#endif +#ifndef XmRUnitType +#define XmRUnitType ((char*)&_XmStrings[12089]) +#endif +#ifndef XmRUnpostBehavior +#define XmRUnpostBehavior ((char*)&_XmStrings[12098]) +#endif +#ifndef XmRValueWcs +#define XmRValueWcs ((char*)&_XmStrings[12113]) +#endif +#ifndef XmRVerticalAlignment +#define XmRVerticalAlignment ((char*)&_XmStrings[12122]) +#endif +#ifndef XmRVerticalDimension +#define XmRVerticalDimension ((char*)&_XmStrings[12140]) +#endif +#ifndef XmRVerticalInt +#define XmRVerticalInt ((char*)&_XmStrings[12158]) +#endif +#ifndef XmRVerticalPosition +#define XmRVerticalPosition ((char*)&_XmStrings[12170]) +#endif +#ifndef XmRVirtualBinding +#define XmRVirtualBinding ((char*)&_XmStrings[12187]) +#endif +#ifndef XmRVisibleItemCount +#define XmRVisibleItemCount ((char*)&_XmStrings[12202]) +#endif +#ifndef XmRVisualPolicy +#define XmRVisualPolicy ((char*)&_XmStrings[12219]) +#endif +#ifndef XmRWhichButton +#define XmRWhichButton ((char*)&_XmStrings[12232]) +#endif +#ifndef XmRXmBackgroundPixmap +#define XmRXmBackgroundPixmap ((char*)&_XmStrings[12244]) +#endif +#ifndef XmRXmString +#define XmRXmString ((char*)&_XmStrings[12263]) +#endif +#ifndef XmRXmStringCharSet +#define XmRXmStringCharSet ((char*)&_XmStrings[12272]) +#endif +#ifndef XmRXmStringTable +#define XmRXmStringTable ((char*)&_XmStrings[12288]) +#endif +#ifndef XmVosfActivate +#define XmVosfActivate ((char*)&_XmStrings[12302]) +#endif +#ifndef XmVosfAddMode +#define XmVosfAddMode ((char*)&_XmStrings[12314]) +#endif +#ifndef XmVosfBackSpace +#define XmVosfBackSpace ((char*)&_XmStrings[12325]) +#endif +#ifndef XmVosfBeginLine +#define XmVosfBeginLine ((char*)&_XmStrings[12338]) +#endif +#ifndef XmVosfCancel +#define XmVosfCancel ((char*)&_XmStrings[12351]) +#endif +#ifndef XmVosfClear +#define XmVosfClear ((char*)&_XmStrings[12361]) +#endif +#ifndef XmVosfCopy +#define XmVosfCopy ((char*)&_XmStrings[12370]) +#endif +#ifndef XmVosfCut +#define XmVosfCut ((char*)&_XmStrings[12378]) +#endif +#ifndef XmVosfDelete +#define XmVosfDelete ((char*)&_XmStrings[12385]) +#endif +#ifndef XmVosfDown +#define XmVosfDown ((char*)&_XmStrings[12395]) +#endif +#ifndef XmVosfEndLine +#define XmVosfEndLine ((char*)&_XmStrings[12403]) +#endif +#ifndef XmVosfHelp +#define XmVosfHelp ((char*)&_XmStrings[12414]) +#endif +#ifndef XmVosfInsert +#define XmVosfInsert ((char*)&_XmStrings[12422]) +#endif +#ifndef XmVosfLeft +#define XmVosfLeft ((char*)&_XmStrings[12432]) +#endif +#ifndef XmVosfMenu +#define XmVosfMenu ((char*)&_XmStrings[12440]) +#endif +#ifndef XmVosfMenuBar +#define XmVosfMenuBar ((char*)&_XmStrings[12448]) +#endif +#ifndef XmVosfPageDown +#define XmVosfPageDown ((char*)&_XmStrings[12459]) +#endif +#ifndef XmVosfPageLeft +#define XmVosfPageLeft ((char*)&_XmStrings[12471]) +#endif +#ifndef XmVosfPageRight +#define XmVosfPageRight ((char*)&_XmStrings[12483]) +#endif +#ifndef XmVosfPageUp +#define XmVosfPageUp ((char*)&_XmStrings[12496]) +#endif +#ifndef XmVosfPaste +#define XmVosfPaste ((char*)&_XmStrings[12506]) +#endif +#ifndef XmVosfPrimaryPaste +#define XmVosfPrimaryPaste ((char*)&_XmStrings[12515]) +#endif +#ifndef XmVosfQuickPaste +#define XmVosfQuickPaste ((char*)&_XmStrings[12531]) +#endif +#ifndef XmVosfRight +#define XmVosfRight ((char*)&_XmStrings[12545]) +#endif +#ifndef XmVosfSelect +#define XmVosfSelect ((char*)&_XmStrings[12554]) +#endif +#ifndef XmVosfUndo +#define XmVosfUndo ((char*)&_XmStrings[12564]) +#endif +#ifndef XmVosfUp +#define XmVosfUp ((char*)&_XmStrings[12572]) +#endif +#ifndef XmSFONTLIST_DEFAULT_TAG_STRING +#define XmSFONTLIST_DEFAULT_TAG_STRING ((char*)&_XmStrings[12578]) +#endif +#ifndef XmSXmFONTLIST_DEFAULT_TAG_STRING +#define XmSXmFONTLIST_DEFAULT_TAG_STRING ((char*)&_XmStrings[12606]) +#endif +#ifndef XmRTopItemPosition +#define XmRTopItemPosition ((char*)&_XmStrings[12636]) +#endif +#ifndef XmNtearOffTitle +#define XmNtearOffTitle ((char*)&_XmStrings[12652]) +#endif +#ifndef XmCTearOffTitle +#define XmCTearOffTitle ((char*)&_XmStrings[12665]) +#endif +#ifndef XmNpopupHandlerCallback +#define XmNpopupHandlerCallback ((char*)&_XmStrings[12678]) +#endif +#ifndef XmNconvertCallback +#define XmNconvertCallback ((char*)&_XmStrings[12699]) +#endif +#ifndef XmNdestinationCallback +#define XmNdestinationCallback ((char*)&_XmStrings[12715]) +#endif +#ifndef XmNselectedItem +#define XmNselectedItem ((char*)&_XmStrings[12735]) +#endif +#ifndef XmCSelectedItem +#define XmCSelectedItem ((char*)&_XmStrings[12748]) +#endif +#ifndef XmNselectionCallback +#define XmNselectionCallback ((char*)&_XmStrings[12761]) +#endif +#ifndef XmNmatchBehavior +#define XmNmatchBehavior ((char*)&_XmStrings[12779]) +#endif +#ifndef XmCMatchBehavior +#define XmCMatchBehavior ((char*)&_XmStrings[12793]) +#endif +#ifndef XmNnoFontCallback +#define XmNnoFontCallback ((char*)&_XmStrings[12807]) +#endif +#ifndef XmNtextPath +#define XmNtextPath ((char*)&_XmStrings[12822]) +#endif +#ifndef XmNeditingPath +#define XmNeditingPath ((char*)&_XmStrings[12831]) +#endif +#ifndef XmCEditingPath +#define XmCEditingPath ((char*)&_XmStrings[12843]) +#endif +#ifndef XmNbidirectionalCursor +#define XmNbidirectionalCursor ((char*)&_XmStrings[12855]) +#endif +#ifndef XmCBidirectionalCursor +#define XmCBidirectionalCursor ((char*)&_XmStrings[12875]) +#endif +#ifndef XmNcollapsedStatePixmap +#define XmNcollapsedStatePixmap ((char*)&_XmStrings[12895]) +#endif +#ifndef XmNdetailColumnHeading +#define XmNdetailColumnHeading ((char*)&_XmStrings[12916]) +#endif +#ifndef XmNdetailCount +#define XmNdetailCount ((char*)&_XmStrings[12936]) +#endif +#ifndef XmNdetailTabList +#define XmNdetailTabList ((char*)&_XmStrings[12948]) +#endif +#ifndef XmNexpandedStatePixmap +#define XmNexpandedStatePixmap ((char*)&_XmStrings[12962]) +#endif +#ifndef XmNlargeCellHeight +#define XmNlargeCellHeight ((char*)&_XmStrings[12982]) +#endif +#ifndef XmNlargeCellWidth +#define XmNlargeCellWidth ((char*)&_XmStrings[12998]) +#endif +#ifndef XmNlayoutType +#define XmNlayoutType ((char*)&_XmStrings[13013]) +#endif +#ifndef XmNoutlineIndentation +#define XmNoutlineIndentation ((char*)&_XmStrings[13024]) +#endif +#ifndef XmNoutlineLineStyle +#define XmNoutlineLineStyle ((char*)&_XmStrings[13043]) +#endif +#ifndef XmNprimaryOwnership +#define XmNprimaryOwnership ((char*)&_XmStrings[13060]) +#endif +#ifndef XmNselectionTechnique +#define XmNselectionTechnique ((char*)&_XmStrings[13077]) +#endif +#ifndef XmNsmallCellHeight +#define XmNsmallCellHeight ((char*)&_XmStrings[13096]) +#endif +#ifndef XmNsmallCellWidth +#define XmNsmallCellWidth ((char*)&_XmStrings[13112]) +#endif +#ifndef XmNspatialStyle +#define XmNspatialStyle ((char*)&_XmStrings[13127]) +#endif +#ifndef XmNentryParent +#define XmNentryParent ((char*)&_XmStrings[13140]) +#endif +#ifndef XmNlargeIconX +#define XmNlargeIconX ((char*)&_XmStrings[13152]) +#endif +#ifndef XmNlargeIconY +#define XmNlargeIconY ((char*)&_XmStrings[13163]) +#endif +#ifndef XmNsmallIconX +#define XmNsmallIconX ((char*)&_XmStrings[13174]) +#endif +#ifndef XmNsmallIconY +#define XmNsmallIconY ((char*)&_XmStrings[13185]) +#endif +#ifndef XmCCollapsedStatePixmap +#define XmCCollapsedStatePixmap ((char*)&_XmStrings[13196]) +#endif +#ifndef XmCDetailColumnHeading +#define XmCDetailColumnHeading ((char*)&_XmStrings[13217]) +#endif +#ifndef XmCDetailCount +#define XmCDetailCount ((char*)&_XmStrings[13237]) +#endif +#ifndef XmCDetailMask +#define XmCDetailMask ((char*)&_XmStrings[13249]) +#endif +#ifndef XmCEntryViewType +#define XmCEntryViewType ((char*)&_XmStrings[13260]) +#endif +#ifndef XmCLineStyle +#define XmCLineStyle ((char*)&_XmStrings[13274]) +#endif +#ifndef XmCDetailTabList +#define XmCDetailTabList ((char*)&_XmStrings[13284]) +#endif +#ifndef XmCExpandedStatePixmap +#define XmCExpandedStatePixmap ((char*)&_XmStrings[13298]) +#endif +#ifndef XmCIncludeModel +#define XmCIncludeModel ((char*)&_XmStrings[13318]) +#endif +#ifndef XmCCellHeight +#define XmCCellHeight ((char*)&_XmStrings[13331]) +#endif +#ifndef XmCCellWidth +#define XmCCellWidth ((char*)&_XmStrings[13342]) +#endif +#ifndef XmCLayoutType +#define XmCLayoutType ((char*)&_XmStrings[13352]) +#endif +#ifndef XmCOutlineIndentation +#define XmCOutlineIndentation ((char*)&_XmStrings[13363]) +#endif +#ifndef XmCPlaceModel +#define XmCPlaceModel ((char*)&_XmStrings[13382]) +#endif +#ifndef XmCPrimaryOwnership +#define XmCPrimaryOwnership ((char*)&_XmStrings[13393]) +#endif +#ifndef XmCSelectionTechnique +#define XmCSelectionTechnique ((char*)&_XmStrings[13410]) +#endif +#ifndef XmCSpatialStyle +#define XmCSpatialStyle ((char*)&_XmStrings[13429]) +#endif +#ifndef XmCEntryDetail +#define XmCEntryDetail ((char*)&_XmStrings[13442]) +#endif +#ifndef XmCExpandState +#define XmCExpandState ((char*)&_XmStrings[13454]) +#endif +#ifndef XmNlargeIcon +#define XmNlargeIcon ((char*)&_XmStrings[13466]) +#endif +#ifndef XmNlargeIconMask +#define XmNlargeIconMask ((char*)&_XmStrings[13476]) +#endif +#ifndef XmNlargeIconPixmap +#define XmNlargeIconPixmap ((char*)&_XmStrings[13490]) +#endif +#ifndef XmNsmallIcon +#define XmNsmallIcon ((char*)&_XmStrings[13506]) +#endif +#ifndef XmNsmallIconMask +#define XmNsmallIconMask ((char*)&_XmStrings[13516]) +#endif +#ifndef XmNsmallIconPixmap +#define XmNsmallIconPixmap ((char*)&_XmStrings[13530]) +#endif +#ifndef XmCIcon +#define XmCIcon ((char*)&_XmStrings[13546]) +#endif +#ifndef XmCViewType +#define XmCViewType ((char*)&_XmStrings[13551]) +#endif +#ifndef XmCVisualEmphasis +#define XmCVisualEmphasis ((char*)&_XmStrings[13560]) +#endif +#ifndef XmNcurrentPageNumber +#define XmNcurrentPageNumber ((char*)&_XmStrings[13575]) +#endif +#ifndef XmNfirstPageNumber +#define XmNfirstPageNumber ((char*)&_XmStrings[13593]) +#endif +#ifndef XmNlastPageNumber +#define XmNlastPageNumber ((char*)&_XmStrings[13609]) +#endif +#ifndef XmNbackPagePlacement +#define XmNbackPagePlacement ((char*)&_XmStrings[13624]) +#endif +#ifndef XmNbackPageNumber +#define XmNbackPageNumber ((char*)&_XmStrings[13642]) +#endif +#ifndef XmNbackPageSize +#define XmNbackPageSize ((char*)&_XmStrings[13657]) +#endif +#ifndef XmNbackPageForeground +#define XmNbackPageForeground ((char*)&_XmStrings[13670]) +#endif +#ifndef XmNbackPageBackground +#define XmNbackPageBackground ((char*)&_XmStrings[13689]) +#endif +#ifndef XmNframeBackground +#define XmNframeBackground ((char*)&_XmStrings[13708]) +#endif +#ifndef XmNbindingType +#define XmNbindingType ((char*)&_XmStrings[13724]) +#endif +#ifndef XmNbindingPixmap +#define XmNbindingPixmap ((char*)&_XmStrings[13736]) +#endif +#ifndef XmNbindingWidth +#define XmNbindingWidth ((char*)&_XmStrings[13750]) +#endif +#ifndef XmNmajorTabSpacing +#define XmNmajorTabSpacing ((char*)&_XmStrings[13763]) +#endif +#ifndef XmNminorTabSpacing +#define XmNminorTabSpacing ((char*)&_XmStrings[13779]) +#endif +#ifndef XmNinnerMarginWidth +#define XmNinnerMarginWidth ((char*)&_XmStrings[13795]) +#endif +#ifndef XmNinnerMarginHeight +#define XmNinnerMarginHeight ((char*)&_XmStrings[13812]) +#endif +#ifndef XmNframeShadowThickness +#define XmNframeShadowThickness ((char*)&_XmStrings[13830]) +#endif +#ifndef XmNpageNumber +#define XmNpageNumber ((char*)&_XmStrings[13851]) +#endif +#ifndef XmCCurrentPageNumber +#define XmCCurrentPageNumber ((char*)&_XmStrings[13862]) +#endif +#ifndef XmCFirstPageNumber +#define XmCFirstPageNumber ((char*)&_XmStrings[13880]) +#endif +#ifndef XmCLastPageNumber +#define XmCLastPageNumber ((char*)&_XmStrings[13896]) +#endif +#ifndef XmCBackPagePlacement +#define XmCBackPagePlacement ((char*)&_XmStrings[13911]) +#endif +#ifndef XmCBackPageNumber +#define XmCBackPageNumber ((char*)&_XmStrings[13929]) +#endif +#ifndef XmCBackPageSize +#define XmCBackPageSize ((char*)&_XmStrings[13944]) +#endif +#ifndef XmCBackPageForeground +#define XmCBackPageForeground ((char*)&_XmStrings[13957]) +#endif +#ifndef XmCBackPageBackground +#define XmCBackPageBackground ((char*)&_XmStrings[13976]) +#endif +#ifndef XmCFrameBackground +#define XmCFrameBackground ((char*)&_XmStrings[13995]) +#endif +#ifndef XmCBindingType +#define XmCBindingType ((char*)&_XmStrings[14011]) +#endif +#ifndef XmCBindingPixmap +#define XmCBindingPixmap ((char*)&_XmStrings[14023]) +#endif +#ifndef XmCBindingWidth +#define XmCBindingWidth ((char*)&_XmStrings[14037]) +#endif +#ifndef XmCMajorTabSpacing +#define XmCMajorTabSpacing ((char*)&_XmStrings[14050]) +#endif +#ifndef XmCMinorTabSpacing +#define XmCMinorTabSpacing ((char*)&_XmStrings[14066]) +#endif +#ifndef XmCInnerMarginWidth +#define XmCInnerMarginWidth ((char*)&_XmStrings[14082]) +#endif +#ifndef XmCInnerMarginHeight +#define XmCInnerMarginHeight ((char*)&_XmStrings[14099]) +#endif +#ifndef XmCPageChangeCallback +#define XmCPageChangeCallback ((char*)&_XmStrings[14117]) +#endif +#ifndef XmCPageNumber +#define XmCPageNumber ((char*)&_XmStrings[14136]) +#endif +#ifndef XmRArrowLayout +#define XmRArrowLayout ((char*)&_XmStrings[14147]) +#endif +#ifndef XmRArrowSensitivity +#define XmRArrowSensitivity ((char*)&_XmStrings[14159]) +#endif +#ifndef XmRSpinBoxChildType +#define XmRSpinBoxChildType ((char*)&_XmStrings[14176]) +#endif +#ifndef XmNarrowLayout +#define XmNarrowLayout ((char*)&_XmStrings[14193]) +#endif +#ifndef XmCArrowLayout +#define XmCArrowLayout ((char*)&_XmStrings[14205]) +#endif +#ifndef XmNarrowSensitivity +#define XmNarrowSensitivity ((char*)&_XmStrings[14217]) +#endif +#ifndef XmCArrowSensitivity +#define XmCArrowSensitivity ((char*)&_XmStrings[14234]) +#endif +#ifndef XmNdefaultArrowSensitivity +#define XmNdefaultArrowSensitivity ((char*)&_XmStrings[14251]) +#endif +#ifndef XmCDefaultArrowSensitivity +#define XmCDefaultArrowSensitivity ((char*)&_XmStrings[14275]) +#endif +#ifndef XmNarrowSize +#define XmNarrowSize ((char*)&_XmStrings[14299]) +#endif +#ifndef XmCArrowSize +#define XmCArrowSize ((char*)&_XmStrings[14309]) +#endif +#ifndef XmNspinBoxChildType +#define XmNspinBoxChildType ((char*)&_XmStrings[14319]) +#endif +#ifndef XmCSpinBoxChildType +#define XmCSpinBoxChildType ((char*)&_XmStrings[14336]) +#endif +#ifndef XmNposition +#define XmNposition ((char*)&_XmStrings[14353]) +#endif +#ifndef XmNnumValues +#define XmNnumValues ((char*)&_XmStrings[14362]) +#endif +#ifndef XmCNumValues +#define XmCNumValues ((char*)&_XmStrings[14372]) +#endif +#ifndef XmNvalues +#define XmNvalues ((char*)&_XmStrings[14382]) +#endif +#ifndef XmCValues +#define XmCValues ((char*)&_XmStrings[14389]) +#endif +#ifndef XmNminimumValue +#define XmNminimumValue ((char*)&_XmStrings[14396]) +#endif +#ifndef XmCMinimumValue +#define XmCMinimumValue ((char*)&_XmStrings[14409]) +#endif +#ifndef XmNmaximumValue +#define XmNmaximumValue ((char*)&_XmStrings[14422]) +#endif +#ifndef XmCMaximumValue +#define XmCMaximumValue ((char*)&_XmStrings[14435]) +#endif +#ifndef XmNincrementValue +#define XmNincrementValue ((char*)&_XmStrings[14448]) +#endif +#ifndef XmCIncrementValue +#define XmCIncrementValue ((char*)&_XmStrings[14463]) +#endif +#ifndef XmRAutomaticSelection +#define XmRAutomaticSelection ((char*)&_XmStrings[14478]) +#endif +#ifndef XmRLineStyle +#define XmRLineStyle ((char*)&_XmStrings[14497]) +#endif +#ifndef XmREntryViewType +#define XmREntryViewType ((char*)&_XmStrings[14507]) +#endif +#ifndef XmRDirection +#define XmRDirection ((char*)&_XmStrings[14521]) +#endif +#ifndef XmRLayoutType +#define XmRLayoutType ((char*)&_XmStrings[14531]) +#endif +#ifndef XmRPrimaryOwnership +#define XmRPrimaryOwnership ((char*)&_XmStrings[14542]) +#endif +#ifndef XmRSelectionTechnique +#define XmRSelectionTechnique ((char*)&_XmStrings[14559]) +#endif +#ifndef XmRSpatialStyle +#define XmRSpatialStyle ((char*)&_XmStrings[14578]) +#endif +#ifndef XmRTabList +#define XmRTabList ((char*)&_XmStrings[14591]) +#endif +#ifndef XmRViewType +#define XmRViewType ((char*)&_XmStrings[14599]) +#endif +#ifndef XmRVisualEmphasis +#define XmRVisualEmphasis ((char*)&_XmStrings[14608]) +#endif +#ifndef XmRBindingType +#define XmRBindingType ((char*)&_XmStrings[14623]) +#endif +#ifndef XmRNBChildType +#define XmRNBChildType ((char*)&_XmStrings[14635]) +#endif +#ifndef XmNentryViewType +#define XmNentryViewType ((char*)&_XmStrings[14647]) +#endif +#ifndef XmNinsensitiveStippleBitmap +#define XmNinsensitiveStippleBitmap ((char*)&_XmStrings[14661]) +#endif +#ifndef XmNlayoutDirection +#define XmNlayoutDirection ((char*)&_XmStrings[14686]) +#endif +#ifndef XmNviewType +#define XmNviewType ((char*)&_XmStrings[14702]) +#endif +#ifndef XmNvisualEmphasis +#define XmNvisualEmphasis ((char*)&_XmStrings[14711]) +#endif +#ifndef XmCLayoutDirection +#define XmCLayoutDirection ((char*)&_XmStrings[14726]) +#endif +#ifndef XmNsnapBackMultiple +#define XmNsnapBackMultiple ((char*)&_XmStrings[14742]) +#endif +#ifndef XmNslidingMode +#define XmNslidingMode ((char*)&_XmStrings[14759]) +#endif +#ifndef XmNsliderVisual +#define XmNsliderVisual ((char*)&_XmStrings[14771]) +#endif +#ifndef XmNautoDragModel +#define XmNautoDragModel ((char*)&_XmStrings[14784]) +#endif +#ifndef XmNcolorCalculationProc +#define XmNcolorCalculationProc ((char*)&_XmStrings[14798]) +#endif +#ifndef XmNbitmapConversionModel +#define XmNbitmapConversionModel ((char*)&_XmStrings[14819]) +#endif +#ifndef XmNcolorAllocationProc +#define XmNcolorAllocationProc ((char*)&_XmStrings[14841]) +#endif +#ifndef XmNselectionMode +#define XmNselectionMode ((char*)&_XmStrings[14861]) +#endif +#ifndef XmNselectedPositions +#define XmNselectedPositions ((char*)&_XmStrings[14875]) +#endif +#ifndef XmNselectedPositionCount +#define XmNselectedPositionCount ((char*)&_XmStrings[14893]) +#endif +#ifndef XmCSnapBackMultiple +#define XmCSnapBackMultiple ((char*)&_XmStrings[14915]) +#endif +#ifndef XmCSliderVisual +#define XmCSliderVisual ((char*)&_XmStrings[14932]) +#endif +#ifndef XmCSlidingMode +#define XmCSlidingMode ((char*)&_XmStrings[14945]) +#endif +#ifndef XmCAutoDragModel +#define XmCAutoDragModel ((char*)&_XmStrings[14957]) +#endif +#ifndef XmCColorCalculationProc +#define XmCColorCalculationProc ((char*)&_XmStrings[14971]) +#endif +#ifndef XmCBitmapConversionModel +#define XmCBitmapConversionModel ((char*)&_XmStrings[14992]) +#endif +#ifndef XmCColorAllocationProc +#define XmCColorAllocationProc ((char*)&_XmStrings[15014]) +#endif +#ifndef XmCInsensitiveStippleBitmap +#define XmCInsensitiveStippleBitmap ((char*)&_XmStrings[15034]) +#endif +#ifndef XmCSelectionMode +#define XmCSelectionMode ((char*)&_XmStrings[15059]) +#endif +#ifndef XmCSelectedPositions +#define XmCSelectedPositions ((char*)&_XmStrings[15073]) +#endif +#ifndef XmCSelectedPositionCount +#define XmCSelectedPositionCount ((char*)&_XmStrings[15091]) +#endif +#ifndef XmRSlidingMode +#define XmRSlidingMode ((char*)&_XmStrings[15113]) +#endif +#ifndef XmRShowArrows +#define XmRShowArrows ((char*)&_XmStrings[15125]) +#endif +#ifndef XmRSliderVisual +#define XmRSliderVisual ((char*)&_XmStrings[15136]) +#endif +#ifndef XmRShowValue +#define XmRShowValue ((char*)&_XmStrings[15149]) +#endif +#ifndef XmRAutoDragModel +#define XmRAutoDragModel ((char*)&_XmStrings[15159]) +#endif +#ifndef XmRSWChildType +#define XmRSWChildType ((char*)&_XmStrings[15173]) +#endif +#ifndef XmRBitmapConversionModel +#define XmRBitmapConversionModel ((char*)&_XmStrings[15185]) +#endif +#ifndef XmRSelectionMode +#define XmRSelectionMode ((char*)&_XmStrings[15207]) +#endif +#ifndef XmNinputPolicy +#define XmNinputPolicy ((char*)&_XmStrings[15221]) +#endif +#ifndef XmCInputPolicy +#define XmCInputPolicy ((char*)&_XmStrings[15233]) +#endif +#ifndef XmRInputPolicy +#define XmRInputPolicy ((char*)&_XmStrings[15245]) +#endif +#ifndef XmNtoggleMode +#define XmNtoggleMode ((char*)&_XmStrings[15257]) +#endif +#ifndef XmCToggleMode +#define XmCToggleMode ((char*)&_XmStrings[15268]) +#endif +#ifndef XmRToggleMode +#define XmRToggleMode ((char*)&_XmStrings[15279]) +#endif +#ifndef XmRIndicatorOn +#define XmRIndicatorOn ((char*)&_XmStrings[15290]) +#endif +#ifndef XmRSet +#define XmRSet ((char*)&_XmStrings[15302]) +#endif +#ifndef XmNindeterminatePixmap +#define XmNindeterminatePixmap ((char*)&_XmStrings[15306]) +#endif +#ifndef XmCIndeterminatePixmap +#define XmCIndeterminatePixmap ((char*)&_XmStrings[15326]) +#endif +#ifndef XmNunselectColor +#define XmNunselectColor ((char*)&_XmStrings[15346]) +#endif +#ifndef XmCUnselectColor +#define XmCUnselectColor ((char*)&_XmStrings[15360]) +#endif +#ifndef XmNselectedPosition +#define XmNselectedPosition ((char*)&_XmStrings[15374]) +#endif +#ifndef XmNarrowSpacing +#define XmNarrowSpacing ((char*)&_XmStrings[15391]) +#endif +#ifndef XmCArrowSpacing +#define XmCArrowSpacing ((char*)&_XmStrings[15404]) +#endif +#ifndef XmRMatchBehavior +#define XmRMatchBehavior ((char*)&_XmStrings[15417]) +#endif +#ifndef XmRComboBoxType +#define XmRComboBoxType ((char*)&_XmStrings[15431]) +#endif +#ifndef XmCSelectedPosition +#define XmCSelectedPosition ((char*)&_XmStrings[15444]) +#endif +#ifndef XmNenableWarp +#define XmNenableWarp ((char*)&_XmStrings[15461]) +#endif +#ifndef XmCEnableWarp +#define XmCEnableWarp ((char*)&_XmStrings[15472]) +#endif +#ifndef XmREnableWarp +#define XmREnableWarp ((char*)&_XmStrings[15483]) +#endif +#ifndef XmNmotifVersion +#define XmNmotifVersion ((char*)&_XmStrings[15494]) +#endif +#ifndef XmCMotifVersion +#define XmCMotifVersion ((char*)&_XmStrings[15507]) +#endif +#ifndef XmNdefaultGlyphPixmap +#define XmNdefaultGlyphPixmap ((char*)&_XmStrings[15520]) +#endif +#ifndef XmCDefaultGlyphPixmap +#define XmCDefaultGlyphPixmap ((char*)&_XmStrings[15539]) +#endif +#ifndef XmCRendition +#define XmCRendition ((char*)&_XmStrings[15558]) +#endif +#ifndef XmNtag +#define XmNtag ((char*)&_XmStrings[15568]) +#endif +#ifndef XmCTag +#define XmCTag ((char*)&_XmStrings[15572]) +#endif +#ifndef XmNfontName +#define XmNfontName ((char*)&_XmStrings[15576]) +#endif +#ifndef XmCFontName +#define XmCFontName ((char*)&_XmStrings[15585]) +#endif +#ifndef XmNfontType +#define XmNfontType ((char*)&_XmStrings[15594]) +#endif +#ifndef XmCFontType +#define XmCFontType ((char*)&_XmStrings[15603]) +#endif +#ifndef XmRFontType +#define XmRFontType ((char*)&_XmStrings[15612]) +#endif +#ifndef XmNloadModel +#define XmNloadModel ((char*)&_XmStrings[15621]) +#endif +#ifndef XmCLoadModel +#define XmCLoadModel ((char*)&_XmStrings[15631]) +#endif +#ifndef XmRLoadModel +#define XmRLoadModel ((char*)&_XmStrings[15641]) +#endif +#ifndef XmNtabList +#define XmNtabList ((char*)&_XmStrings[15651]) +#endif +#ifndef XmCTabList +#define XmCTabList ((char*)&_XmStrings[15659]) +#endif +#ifndef XmRRenditionPixel +#define XmRRenditionPixel ((char*)&_XmStrings[15667]) +#endif +#ifndef XmNunderlineType +#define XmNunderlineType ((char*)&_XmStrings[15682]) +#endif +#ifndef XmCUnderlineType +#define XmCUnderlineType ((char*)&_XmStrings[15696]) +#endif +#ifndef XmNstrikethruType +#define XmNstrikethruType ((char*)&_XmStrings[15710]) +#endif +#ifndef XmCStrikethruType +#define XmCStrikethruType ((char*)&_XmStrings[15725]) +#endif +#ifndef XmRLineType +#define XmRLineType ((char*)&_XmStrings[15740]) +#endif +#ifndef XmNrenderTable +#define XmNrenderTable ((char*)&_XmStrings[15749]) +#endif +#ifndef XmCRenderTable +#define XmCRenderTable ((char*)&_XmStrings[15761]) +#endif +#ifndef XmRRenderTable +#define XmRRenderTable ((char*)&_XmStrings[15773]) +#endif +#ifndef XmNbuttonRenderTable +#define XmNbuttonRenderTable ((char*)&_XmStrings[15785]) +#endif +#ifndef XmCButtonRenderTable +#define XmCButtonRenderTable ((char*)&_XmStrings[15803]) +#endif +#ifndef XmRButtonRenderTable +#define XmRButtonRenderTable ((char*)&_XmStrings[15821]) +#endif +#ifndef XmNlabelRenderTable +#define XmNlabelRenderTable ((char*)&_XmStrings[15839]) +#endif +#ifndef XmCLabelRenderTable +#define XmCLabelRenderTable ((char*)&_XmStrings[15856]) +#endif +#ifndef XmRLabelRenderTable +#define XmRLabelRenderTable ((char*)&_XmStrings[15873]) +#endif +#ifndef XmNtextRenderTable +#define XmNtextRenderTable ((char*)&_XmStrings[15890]) +#endif +#ifndef XmCTextRenderTable +#define XmCTextRenderTable ((char*)&_XmStrings[15906]) +#endif +#ifndef XmRTextRenderTable +#define XmRTextRenderTable ((char*)&_XmStrings[15922]) +#endif +#ifndef XmNdragStartCallback +#define XmNdragStartCallback ((char*)&_XmStrings[15938]) +#endif +#ifndef XmNnoRenditionCallback +#define XmNnoRenditionCallback ((char*)&_XmStrings[15956]) +#endif +#ifndef XmSXmAS_IS +#define XmSXmAS_IS ((char*)&_XmStrings[15976]) +#endif +#ifndef XmMIsWhiteSpaceMethod +#define XmMIsWhiteSpaceMethod ((char*)&_XmStrings[15984]) +#endif +#ifndef XmMIsScanBreakMethod +#define XmMIsScanBreakMethod ((char*)&_XmStrings[16003]) +#endif +#ifndef XmMCharDirection +#define XmMCharDirection ((char*)&_XmStrings[16021]) +#endif +#ifndef XmMInitialCharsDirection +#define XmMInitialCharsDirection ((char*)&_XmStrings[16035]) +#endif +#ifndef XmNpatternType +#define XmNpatternType ((char*)&_XmStrings[16057]) +#endif +#ifndef XmNsubstitute +#define XmNsubstitute ((char*)&_XmStrings[16069]) +#endif +#ifndef XmNinvokeParseProc +#define XmNinvokeParseProc ((char*)&_XmStrings[16080]) +#endif +#ifndef XmNincludeStatus +#define XmNincludeStatus ((char*)&_XmStrings[16096]) +#endif +#ifndef XmVosfBackTab +#define XmVosfBackTab ((char*)&_XmStrings[16110]) +#endif +#ifndef XmVosfBeginData +#define XmVosfBeginData ((char*)&_XmStrings[16121]) +#endif +#ifndef XmVosfDeselectAll +#define XmVosfDeselectAll ((char*)&_XmStrings[16134]) +#endif +#ifndef XmVosfEndData +#define XmVosfEndData ((char*)&_XmStrings[16149]) +#endif +#ifndef XmVosfEscape +#define XmVosfEscape ((char*)&_XmStrings[16160]) +#endif +#ifndef XmVosfExtend +#define XmVosfExtend ((char*)&_XmStrings[16170]) +#endif +#ifndef XmVosfLeftLine +#define XmVosfLeftLine ((char*)&_XmStrings[16180]) +#endif +#ifndef XmVosfNext +#define XmVosfNext ((char*)&_XmStrings[16192]) +#endif +#ifndef XmVosfNextField +#define XmVosfNextField ((char*)&_XmStrings[16200]) +#endif +#ifndef XmVosfNextMenu +#define XmVosfNextMenu ((char*)&_XmStrings[16213]) +#endif +#ifndef XmVosfNextMinor +#define XmVosfNextMinor ((char*)&_XmStrings[16225]) +#endif +#ifndef XmVosfPrevField +#define XmVosfPrevField ((char*)&_XmStrings[16238]) +#endif +#ifndef XmVosfPrevMenu +#define XmVosfPrevMenu ((char*)&_XmStrings[16251]) +#endif +#ifndef XmVosfPrior +#define XmVosfPrior ((char*)&_XmStrings[16263]) +#endif +#ifndef XmVosfPriorMinor +#define XmVosfPriorMinor ((char*)&_XmStrings[16272]) +#endif +#ifndef XmVosfReselect +#define XmVosfReselect ((char*)&_XmStrings[16286]) +#endif +#ifndef XmVosfRestore +#define XmVosfRestore ((char*)&_XmStrings[16298]) +#endif +#ifndef XmVosfRightLine +#define XmVosfRightLine ((char*)&_XmStrings[16309]) +#endif +#ifndef XmVosfSelectAll +#define XmVosfSelectAll ((char*)&_XmStrings[16322]) +#endif +#ifndef XmVosfSwitchDirection +#define XmVosfSwitchDirection ((char*)&_XmStrings[16335]) +#endif +#ifndef XmNnotebookChildType +#define XmNnotebookChildType ((char*)&_XmStrings[16354]) +#endif +#ifndef XmCNotebookChildType +#define XmCNotebookChildType ((char*)&_XmStrings[16372]) +#endif +#ifndef XmRNotebookChildType +#define XmRNotebookChildType ((char*)&_XmStrings[16390]) +#endif +#ifndef XmNscrolledWindowChildType +#define XmNscrolledWindowChildType ((char*)&_XmStrings[16408]) +#endif +#ifndef XmCScrolledWindowChildType +#define XmCScrolledWindowChildType ((char*)&_XmStrings[16432]) +#endif +#ifndef XmRScrolledWindowChildType +#define XmRScrolledWindowChildType ((char*)&_XmStrings[16456]) +#endif +#ifndef XmNselectedObjects +#define XmNselectedObjects ((char*)&_XmStrings[16480]) +#endif +#ifndef XmCSelectedObjects +#define XmCSelectedObjects ((char*)&_XmStrings[16496]) +#endif +#ifndef XmNselectedObjectCount +#define XmNselectedObjectCount ((char*)&_XmStrings[16512]) +#endif +#ifndef XmCSelectedObjectCount +#define XmCSelectedObjectCount ((char*)&_XmStrings[16532]) +#endif +#ifndef XmNcomboBoxType +#define XmNcomboBoxType ((char*)&_XmStrings[16552]) +#endif +#ifndef XmCComboBoxType +#define XmCComboBoxType ((char*)&_XmStrings[16565]) +#endif +#ifndef XmNtabValue +#define XmNtabValue ((char*)&_XmStrings[16578]) +#endif +#ifndef XmNoffsetModel +#define XmNoffsetModel ((char*)&_XmStrings[16587]) +#endif +#ifndef XmNdecimal +#define XmNdecimal ((char*)&_XmStrings[16599]) +#endif +#ifndef XmNdetail +#define XmNdetail ((char*)&_XmStrings[16607]) +#endif +#ifndef XmCDetail +#define XmCDetail ((char*)&_XmStrings[16614]) +#endif +#ifndef XmNdetailCount +#define XmNdetailCount ((char*)&_XmStrings[16621]) +#endif +#ifndef XmCDetailCount +#define XmCDetailCount ((char*)&_XmStrings[16633]) +#endif +#ifndef XmNcontainerID +#define XmNcontainerID ((char*)&_XmStrings[16645]) +#endif +#ifndef XmCContainerID +#define XmCContainerID ((char*)&_XmStrings[16657]) +#endif +#ifndef XmSCLIENT_WINDOW +#define XmSCLIENT_WINDOW ((char*)&_XmStrings[16669]) +#endif +#ifndef XmSCLIP_TEMPORARY +#define XmSCLIP_TEMPORARY ((char*)&_XmStrings[16683]) +#endif +#ifndef XmSCLIPBOARD +#define XmSCLIPBOARD ((char*)&_XmStrings[16698]) +#endif +#ifndef XmSCOMPOUND_TEXT +#define XmSCOMPOUND_TEXT ((char*)&_XmStrings[16708]) +#endif +#ifndef XmSDELETE +#define XmSDELETE ((char*)&_XmStrings[16722]) +#endif +#ifndef XmSFILE +#define XmSFILE ((char*)&_XmStrings[16729]) +#endif +#ifndef XmSFILE_NAME +#define XmSFILE_NAME ((char*)&_XmStrings[16734]) +#endif +#ifndef XmSINCR +#define XmSINCR ((char*)&_XmStrings[16744]) +#endif +#ifndef XmSINSERT_PROPERTY +#define XmSINSERT_PROPERTY ((char*)&_XmStrings[16749]) +#endif +#ifndef XmSINSERT_SELECTION +#define XmSINSERT_SELECTION ((char*)&_XmStrings[16765]) +#endif +#ifndef XmSLENGTH +#define XmSLENGTH ((char*)&_XmStrings[16782]) +#endif +#ifndef XmSLINK_SELECTION +#define XmSLINK_SELECTION ((char*)&_XmStrings[16789]) +#endif +#ifndef XmS_MOTIF_ATOM_0 +#define XmS_MOTIF_ATOM_0 ((char*)&_XmStrings[16804]) +#endif +#ifndef XmS_MOTIF_BINDINGS +#define XmS_MOTIF_BINDINGS ((char*)&_XmStrings[16818]) +#endif +#ifndef XmS_MOTIF_DEFAULT_BINDINGS +#define XmS_MOTIF_DEFAULT_BINDINGS ((char*)&_XmStrings[16834]) +#endif +#ifndef XmS_MOTIF_CANCEL_DROP_EFFECT +#define XmS_MOTIF_CANCEL_DROP_EFFECT ((char*)&_XmStrings[16858]) +#endif +#ifndef XmS_MOTIF_CLIP_HEADER +#define XmS_MOTIF_CLIP_HEADER ((char*)&_XmStrings[16884]) +#endif +#ifndef XmS_MOTIF_CLIP_DATA_REQUEST +#define XmS_MOTIF_CLIP_DATA_REQUEST ((char*)&_XmStrings[16903]) +#endif +#ifndef XmS_MOTIF_CLIP_DATA_DELETE +#define XmS_MOTIF_CLIP_DATA_DELETE ((char*)&_XmStrings[16928]) +#endif +#ifndef XmS_MOTIF_CLIP_ITEM +#define XmS_MOTIF_CLIP_ITEM ((char*)&_XmStrings[16952]) +#endif +#ifndef XmS_MOTIF_CLIP_LOCK +#define XmS_MOTIF_CLIP_LOCK ((char*)&_XmStrings[16969]) +#endif +#ifndef XmS_MOTIF_CLIP_LOCK_ACCESS_VALID +#define XmS_MOTIF_CLIP_LOCK_ACCESS_VALID ((char*)&_XmStrings[16986]) +#endif +#ifndef XmS_MOTIF_CLIP_MESSAGE +#define XmS_MOTIF_CLIP_MESSAGE ((char*)&_XmStrings[17016]) +#endif +#ifndef XmS_MOTIF_CLIP_NEXT_ID +#define XmS_MOTIF_CLIP_NEXT_ID ((char*)&_XmStrings[17036]) +#endif +#ifndef XmS_MOTIF_CLIP_TIME +#define XmS_MOTIF_CLIP_TIME ((char*)&_XmStrings[17056]) +#endif +#ifndef XmS_MOTIF_CLIPBOARD_TARGETS +#define XmS_MOTIF_CLIPBOARD_TARGETS ((char*)&_XmStrings[17073]) +#endif +#ifndef XmS_MOTIF_COMPOUND_STRING +#define XmS_MOTIF_COMPOUND_STRING ((char*)&_XmStrings[17098]) +#endif +#ifndef XmS_MOTIF_DEFERRED_CLIPBOARD_TARGETS +#define XmS_MOTIF_DEFERRED_CLIPBOARD_TARGETS ((char*)&_XmStrings[17121]) +#endif +#ifndef XmS_MOTIF_DESTINATION +#define XmS_MOTIF_DESTINATION ((char*)&_XmStrings[17155]) +#endif +#ifndef XmS_MOTIF_DRAG_OFFSET +#define XmS_MOTIF_DRAG_OFFSET ((char*)&_XmStrings[17174]) +#endif +#ifndef XmS_MOTIF_DROP +#define XmS_MOTIF_DROP ((char*)&_XmStrings[17193]) +#endif +#ifndef XmS_MOTIF_ENCODING_REGISTRY +#define XmS_MOTIF_ENCODING_REGISTRY ((char*)&_XmStrings[17205]) +#endif +#ifndef XmS_MOTIF_EXPORT_TARGETS +#define XmS_MOTIF_EXPORT_TARGETS ((char*)&_XmStrings[17230]) +#endif +#ifndef XmS_MOTIF_LOSE_SELECTION +#define XmS_MOTIF_LOSE_SELECTION ((char*)&_XmStrings[17252]) +#endif +#ifndef XmS_MOTIF_RENDER_TABLE +#define XmS_MOTIF_RENDER_TABLE ((char*)&_XmStrings[17274]) +#endif +#ifndef XmS_MOTIF_WM_QUERY +#define XmS_MOTIF_WM_QUERY ((char*)&_XmStrings[17294]) +#endif +#ifndef XmS_MOTIF_WM_ALL_CLIENTS +#define XmS_MOTIF_WM_ALL_CLIENTS ((char*)&_XmStrings[17310]) +#endif +#ifndef XmSMULTIPLE +#define XmSMULTIPLE ((char*)&_XmStrings[17332]) +#endif +#ifndef XmSNULL +#define XmSNULL ((char*)&_XmStrings[17341]) +#endif +#ifndef XmSTARGETS +#define XmSTARGETS ((char*)&_XmStrings[17346]) +#endif +#ifndef XmSTEXT +#define XmSTEXT ((char*)&_XmStrings[17354]) +#endif +#ifndef XmSTIMESTAMP +#define XmSTIMESTAMP ((char*)&_XmStrings[17359]) +#endif +#ifndef XmSWM_STATE +#define XmSWM_STATE ((char*)&_XmStrings[17369]) +#endif +#ifndef XmSTRANSFER_SUCCESS +#define XmSTRANSFER_SUCCESS ((char*)&_XmStrings[17378]) +#endif +#ifndef XmSTRANSFER_FAILURE +#define XmSTRANSFER_FAILURE ((char*)&_XmStrings[17397]) +#endif +#ifndef XmNpathMode +#define XmNpathMode ((char*)&_XmStrings[17416]) +#endif +#ifndef XmRPathMode +#define XmRPathMode ((char*)&_XmStrings[17425]) +#endif +#ifndef XmCPathMode +#define XmCPathMode ((char*)&_XmStrings[17434]) +#endif +#ifndef XmNfileFilterStyle +#define XmNfileFilterStyle ((char*)&_XmStrings[17443]) +#endif +#ifndef XmRFileFilterStyle +#define XmRFileFilterStyle ((char*)&_XmStrings[17459]) +#endif +#ifndef XmCFileFilterStyle +#define XmCFileFilterStyle ((char*)&_XmStrings[17475]) +#endif +#ifndef XmNdirTextLabelString +#define XmNdirTextLabelString ((char*)&_XmStrings[17491]) +#endif +#ifndef XmCDirTextLabelString +#define XmCDirTextLabelString ((char*)&_XmStrings[17510]) +#endif +#ifndef XmNenableBtn1Transfer +#define XmNenableBtn1Transfer ((char*)&_XmStrings[17529]) +#endif +#ifndef XmCEnableBtn1Transfer +#define XmCEnableBtn1Transfer ((char*)&_XmStrings[17548]) +#endif +#ifndef XmNenableButtonTab +#define XmNenableButtonTab ((char*)&_XmStrings[17567]) +#endif +#ifndef XmCEnableButtonTab +#define XmCEnableButtonTab ((char*)&_XmStrings[17583]) +#endif +#ifndef XmNenableEtchedInMenu +#define XmNenableEtchedInMenu ((char*)&_XmStrings[17599]) +#endif +#ifndef XmCEnableEtchedInMenu +#define XmCEnableEtchedInMenu ((char*)&_XmStrings[17618]) +#endif +#ifndef XmNdefaultButtonEmphasis +#define XmNdefaultButtonEmphasis ((char*)&_XmStrings[17637]) +#endif +#ifndef XmCDefaultButtonEmphasis +#define XmCDefaultButtonEmphasis ((char*)&_XmStrings[17659]) +#endif +#ifndef XmRDefaultButtonEmphasis +#define XmRDefaultButtonEmphasis ((char*)&_XmStrings[17681]) +#endif +#ifndef XmNenableToggleColor +#define XmNenableToggleColor ((char*)&_XmStrings[17703]) +#endif +#ifndef XmCEnableToggleColor +#define XmCEnableToggleColor ((char*)&_XmStrings[17721]) +#endif +#ifndef XmNenableToggleVisual +#define XmNenableToggleVisual ((char*)&_XmStrings[17739]) +#endif +#ifndef XmCEnableToggleVisual +#define XmCEnableToggleVisual ((char*)&_XmStrings[17758]) +#endif +#ifndef XmNenableDragIcon +#define XmNenableDragIcon ((char*)&_XmStrings[17777]) +#endif +#ifndef XmCEnableDragIcon +#define XmCEnableDragIcon ((char*)&_XmStrings[17792]) +#endif +#ifndef XmNenableUnselectableDrag +#define XmNenableUnselectableDrag ((char*)&_XmStrings[17807]) +#endif +#ifndef XmCEnableUnselectableDrag +#define XmCEnableUnselectableDrag ((char*)&_XmStrings[17830]) +#endif +#ifndef XmNdragOverActiveMode +#define XmNdragOverActiveMode ((char*)&_XmStrings[17853]) +#endif +#ifndef XmCDragOverActiveMode +#define XmCDragOverActiveMode ((char*)&_XmStrings[17872]) +#endif +#ifndef XmNinstallColormap +#define XmNinstallColormap ((char*)&_XmStrings[17891]) +#endif +#ifndef XmCInstallColormap +#define XmCInstallColormap ((char*)&_XmStrings[17907]) +#endif +#ifndef XmCOwnerEvents +#define XmCOwnerEvents ((char*)&_XmStrings[17923]) +#endif +#ifndef XmNownerEvents +#define XmNownerEvents ((char*)&_XmStrings[17935]) +#endif +#ifndef XmCGrabStyle +#define XmCGrabStyle ((char*)&_XmStrings[17947]) +#endif +#ifndef XmNgrabStyle +#define XmNgrabStyle ((char*)&_XmStrings[17957]) +#endif +#ifndef XmNforegroundState +#define XmNforegroundState ((char*)&_XmStrings[17967]) +#endif +#ifndef XmNbackgroundState +#define XmNbackgroundState ((char*)&_XmStrings[17983]) +#endif +#ifndef XmCGroundState +#define XmCGroundState ((char*)&_XmStrings[17999]) +#endif +#ifndef XmRGroundState +#define XmRGroundState ((char*)&_XmStrings[18011]) +#endif +#ifndef XmRSelectColor +#define XmRSelectColor ((char*)&_XmStrings[18023]) +#endif +#ifndef XmRLargeIconPixmap +#define XmRLargeIconPixmap ((char*)&_XmStrings[18035]) +#endif +#ifndef XmRSmallIconPixmap +#define XmRSmallIconPixmap ((char*)&_XmStrings[18051]) +#endif +#ifndef XmNoutlineState +#define XmNoutlineState ((char*)&_XmStrings[18067]) +#endif +#ifndef XmCOutlineState +#define XmCOutlineState ((char*)&_XmStrings[18080]) +#endif +#ifndef XmROutlineState +#define XmROutlineState ((char*)&_XmStrings[18093]) +#endif +#ifndef XmNspatialIncludeModel +#define XmNspatialIncludeModel ((char*)&_XmStrings[18106]) +#endif +#ifndef XmCSpatialIncludeModel +#define XmCSpatialIncludeModel ((char*)&_XmStrings[18126]) +#endif +#ifndef XmRSpatialIncludeModel +#define XmRSpatialIncludeModel ((char*)&_XmStrings[18146]) +#endif +#ifndef XmNspatialResizeModel +#define XmNspatialResizeModel ((char*)&_XmStrings[18166]) +#endif +#ifndef XmCSpatialResizeModel +#define XmCSpatialResizeModel ((char*)&_XmStrings[18185]) +#endif +#ifndef XmRSpatialResizeModel +#define XmRSpatialResizeModel ((char*)&_XmStrings[18204]) +#endif +#ifndef XmNspatialSnapModel +#define XmNspatialSnapModel ((char*)&_XmStrings[18223]) +#endif +#ifndef XmCSpatialSnapModel +#define XmCSpatialSnapModel ((char*)&_XmStrings[18240]) +#endif +#ifndef XmRSpatialSnapModel +#define XmRSpatialSnapModel ((char*)&_XmStrings[18257]) +#endif +#ifndef XmNdetailColumnHeadingCount +#define XmNdetailColumnHeadingCount ((char*)&_XmStrings[18274]) +#endif +#ifndef XmCDetailColumnHeadingCount +#define XmCDetailColumnHeadingCount ((char*)&_XmStrings[18299]) +#endif +#ifndef XmNdetailOrder +#define XmNdetailOrder ((char*)&_XmStrings[18324]) +#endif +#ifndef XmCDetailOrder +#define XmCDetailOrder ((char*)&_XmStrings[18336]) +#endif +#ifndef XmRCardinalList +#define XmRCardinalList ((char*)&_XmStrings[18348]) +#endif +#ifndef XmNdetailOrderCount +#define XmNdetailOrderCount ((char*)&_XmStrings[18361]) +#endif +#ifndef XmCDetailOrderCount +#define XmCDetailOrderCount ((char*)&_XmStrings[18378]) +#endif +#ifndef XmNoutlineColumnWidth +#define XmNoutlineColumnWidth ((char*)&_XmStrings[18395]) +#endif +#ifndef XmCOutlineColumnWidth +#define XmCOutlineColumnWidth ((char*)&_XmStrings[18414]) +#endif +#ifndef XmNoutlineChangedCallback +#define XmNoutlineChangedCallback ((char*)&_XmStrings[18433]) +#endif +#ifndef XmCOutlineChangedCallback +#define XmCOutlineChangedCallback ((char*)&_XmStrings[18456]) +#endif +#ifndef XmNoutlineButtonPolicy +#define XmNoutlineButtonPolicy ((char*)&_XmStrings[18479]) +#endif +#ifndef XmCOutlineButtonPolicy +#define XmCOutlineButtonPolicy ((char*)&_XmStrings[18499]) +#endif +#ifndef XmROutlineButtonPolicy +#define XmROutlineButtonPolicy ((char*)&_XmStrings[18519]) +#endif +#ifndef XmCDefaultVirtualBindings +#define XmCDefaultVirtualBindings ((char*)&_XmStrings[18539]) +#endif +#ifndef XmNdefaultVirtualBindings +#define XmNdefaultVirtualBindings ((char*)&_XmStrings[18562]) +#endif +#ifndef XmCResizable +#define XmCResizable ((char*)&_XmStrings[18585]) +#endif +#ifndef XmRDynamicPixmap +#define XmRDynamicPixmap ((char*)&_XmStrings[18595]) +#endif +#ifndef XmNpageChangedCallback +#define XmNpageChangedCallback ((char*)&_XmStrings[18609]) +#endif +#ifndef XmNarea +#define XmNarea ((char*)&_XmStrings[18629]) +#endif +#ifndef XmNdetailShadowThickness +#define XmNdetailShadowThickness ((char*)&_XmStrings[18634]) +#endif +#ifndef XmNsliderMark +#define XmNsliderMark ((char*)&_XmStrings[18656]) +#endif +#ifndef XmCSliderMark +#define XmCSliderMark ((char*)&_XmStrings[18667]) +#endif +#ifndef XmRSliderMark +#define XmRSliderMark ((char*)&_XmStrings[18678]) +#endif +#ifndef XmREnableBtn1Transfer +#define XmREnableBtn1Transfer ((char*)&_XmStrings[18689]) +#endif +#ifndef XmNrenditionBackground +#define XmNrenditionBackground ((char*)&_XmStrings[18708]) +#endif +#ifndef XmNrenditionForeground +#define XmNrenditionForeground ((char*)&_XmStrings[18728]) +#endif +#ifndef XmCRenditionBackground +#define XmCRenditionBackground ((char*)&_XmStrings[18748]) +#endif +#ifndef XmCRenditionForeground +#define XmCRenditionForeground ((char*)&_XmStrings[18768]) +#endif +#ifndef XmNindeterminateInsensitivePixmap +#define XmNindeterminateInsensitivePixmap ((char*)&_XmStrings[18788]) +#endif +#ifndef XmCIndeterminateInsensitivePixmap +#define XmCIndeterminateInsensitivePixmap ((char*)&_XmStrings[18819]) +#endif +#ifndef XmNframeChildType +#define XmNframeChildType ((char*)&_XmStrings[18850]) +#endif +#ifndef XmCFrameChildType +#define XmCFrameChildType ((char*)&_XmStrings[18865]) +#endif +#ifndef XmNtextField +#define XmNtextField ((char*)&_XmStrings[18880]) +#endif +#ifndef XmCTextField +#define XmCTextField ((char*)&_XmStrings[18890]) +#endif +#ifndef XmNenableThinThickness +#define XmNenableThinThickness ((char*)&_XmStrings[18900]) +#endif +#ifndef XmCEnableThinThickness +#define XmCEnableThinThickness ((char*)&_XmStrings[18920]) +#endif +#ifndef XmNprimaryColorSetId +#define XmNprimaryColorSetId ((char*)&_XmStrings[18940]) +#endif +#ifndef XmCPrimaryColorSetId +#define XmCPrimaryColorSetId ((char*)&_XmStrings[18958]) +#endif +#ifndef XmNsecondaryColorSetId +#define XmNsecondaryColorSetId ((char*)&_XmStrings[18976]) +#endif +#ifndef XmCSecondaryColorSetId +#define XmCSecondaryColorSetId ((char*)&_XmStrings[18996]) +#endif +#ifndef XmNtextColorSetId +#define XmNtextColorSetId ((char*)&_XmStrings[19016]) +#endif +#ifndef XmCTextColorSetId +#define XmCTextColorSetId ((char*)&_XmStrings[19031]) +#endif +#ifndef XmNactiveColorSetId +#define XmNactiveColorSetId ((char*)&_XmStrings[19046]) +#endif +#ifndef XmCActiveColorSetId +#define XmCActiveColorSetId ((char*)&_XmStrings[19063]) +#endif +#ifndef XmNinactiveColorSetId +#define XmNinactiveColorSetId ((char*)&_XmStrings[19080]) +#endif +#ifndef XmCInactiveColorSetId +#define XmCInactiveColorSetId ((char*)&_XmStrings[19099]) +#endif +#ifndef XmNuseColorObj +#define XmNuseColorObj ((char*)&_XmStrings[19118]) +#endif +#ifndef XmCUseColorObj +#define XmCUseColorObj ((char*)&_XmStrings[19130]) +#endif +#ifndef XmNuseTextColor +#define XmNuseTextColor ((char*)&_XmStrings[19142]) +#endif +#ifndef XmCUseTextColor +#define XmCUseTextColor ((char*)&_XmStrings[19155]) +#endif +#ifndef XmNuseTextColorForList +#define XmNuseTextColorForList ((char*)&_XmStrings[19168]) +#endif +#ifndef XmCUseTextColorForList +#define XmCUseTextColorForList ((char*)&_XmStrings[19188]) +#endif +#ifndef XmNuseMask +#define XmNuseMask ((char*)&_XmStrings[19208]) +#endif +#ifndef XmCUseMask +#define XmCUseMask ((char*)&_XmStrings[19216]) +#endif +#ifndef XmNuseMultiColorIcons +#define XmNuseMultiColorIcons ((char*)&_XmStrings[19224]) +#endif +#ifndef XmCUseMultiColorIcons +#define XmCUseMultiColorIcons ((char*)&_XmStrings[19243]) +#endif +#ifndef XmNuseIconFileCache +#define XmNuseIconFileCache ((char*)&_XmStrings[19262]) +#endif +#ifndef XmCUseIconFileCache +#define XmCUseIconFileCache ((char*)&_XmStrings[19279]) +#endif +#ifndef XmSPIXEL_SET +#define XmSPIXEL_SET ((char*)&_XmStrings[19296]) +#endif +#ifndef XmSCUSTOMIZE_DATA +#define XmSCUSTOMIZE_DATA ((char*)&_XmStrings[19307]) +#endif +#ifndef XmSCOLOR_SRV_NAME +#define XmSCOLOR_SRV_NAME ((char*)&_XmStrings[19323]) +#endif +#ifndef XmNlist +#define XmNlist ((char*)&_XmStrings[19335]) +#endif +#ifndef XmCList +#define XmCList ((char*)&_XmStrings[19340]) +#endif +#ifndef XmNarrowOrientation +#define XmNarrowOrientation ((char*)&_XmStrings[19345]) +#endif +#ifndef XmCArrowOrientation +#define XmCArrowOrientation ((char*)&_XmStrings[19362]) +#endif +#ifndef XmRArrowOrientation +#define XmRArrowOrientation ((char*)&_XmStrings[19379]) +#endif +#ifndef XmNpositionType +#define XmNpositionType ((char*)&_XmStrings[19396]) +#endif +#ifndef XmCPositionType +#define XmCPositionType ((char*)&_XmStrings[19409]) +#endif +#ifndef XmRPositionType +#define XmRPositionType ((char*)&_XmStrings[19422]) +#endif +#ifndef XmNwrap +#define XmNwrap ((char*)&_XmStrings[19435]) +#endif +#ifndef XmCWrap +#define XmCWrap ((char*)&_XmStrings[19440]) +#endif +#ifndef XmNpositionMode +#define XmNpositionMode ((char*)&_XmStrings[19445]) +#endif +#ifndef XmCPositionMode +#define XmCPositionMode ((char*)&_XmStrings[19458]) +#endif +#ifndef XmRPositionMode +#define XmRPositionMode ((char*)&_XmStrings[19471]) +#endif +#ifndef XmNprintOrientation +#define XmNprintOrientation ((char*)&_XmStrings[19484]) +#endif +#ifndef XmCPrintOrientation +#define XmCPrintOrientation ((char*)&_XmStrings[19501]) +#endif +#ifndef XmNprintOrientations +#define XmNprintOrientations ((char*)&_XmStrings[19518]) +#endif +#ifndef XmCPrintOrientations +#define XmCPrintOrientations ((char*)&_XmStrings[19536]) +#endif +#ifndef XmNprintResolution +#define XmNprintResolution ((char*)&_XmStrings[19554]) +#endif +#ifndef XmCPrintResolution +#define XmCPrintResolution ((char*)&_XmStrings[19570]) +#endif +#ifndef XmNprintResolutions +#define XmNprintResolutions ((char*)&_XmStrings[19586]) +#endif +#ifndef XmCPrintResolutions +#define XmCPrintResolutions ((char*)&_XmStrings[19603]) +#endif +#ifndef XmNdefaultPixmapResolution +#define XmNdefaultPixmapResolution ((char*)&_XmStrings[19620]) +#endif +#ifndef XmCDefaultPixmapResolution +#define XmCDefaultPixmapResolution ((char*)&_XmStrings[19644]) +#endif +#ifndef XmNstartJobCallback +#define XmNstartJobCallback ((char*)&_XmStrings[19668]) +#endif +#ifndef XmNendJobCallback +#define XmNendJobCallback ((char*)&_XmStrings[19685]) +#endif +#ifndef XmNpageSetupCallback +#define XmNpageSetupCallback ((char*)&_XmStrings[19700]) +#endif +#ifndef XmNpdmNotificationCallback +#define XmNpdmNotificationCallback ((char*)&_XmStrings[19718]) +#endif +#ifndef XmNminX +#define XmNminX ((char*)&_XmStrings[19742]) +#endif +#ifndef XmNminY +#define XmNminY ((char*)&_XmStrings[19747]) +#endif +#ifndef XmNmaxX +#define XmNmaxX ((char*)&_XmStrings[19752]) +#endif +#ifndef XmNmaxY +#define XmNmaxY ((char*)&_XmStrings[19757]) +#endif +#ifndef XmCMinX +#define XmCMinX ((char*)&_XmStrings[19762]) +#endif +#ifndef XmCMinY +#define XmCMinY ((char*)&_XmStrings[19767]) +#endif +#ifndef XmCMaxX +#define XmCMaxX ((char*)&_XmStrings[19772]) +#endif +#ifndef XmCMaxY +#define XmCMaxY ((char*)&_XmStrings[19777]) +#endif +#ifndef XmNpreeditStartCallback +#define XmNpreeditStartCallback ((char*)&_XmStrings[19782]) +#endif +#ifndef XmNpreeditDoneCallback +#define XmNpreeditDoneCallback ((char*)&_XmStrings[19803]) +#endif +#ifndef XmNpreeditDrawCallback +#define XmNpreeditDrawCallback ((char*)&_XmStrings[19823]) +#endif +#ifndef XmNpreeditCaretCallback +#define XmNpreeditCaretCallback ((char*)&_XmStrings[19843]) +#endif +#ifndef XmNverifyPreedit +#define XmNverifyPreedit ((char*)&_XmStrings[19864]) +#endif +#ifndef XmCVerifyPreedit +#define XmCVerifyPreedit ((char*)&_XmStrings[19878]) +#endif +#ifndef XmNenableMultiKeyBindings +#define XmNenableMultiKeyBindings ((char*)&_XmStrings[19892]) +#endif +#ifndef XmCEnableMultiKeyBindings +#define XmCEnableMultiKeyBindings ((char*)&_XmStrings[19915]) +#endif +#ifndef XmRButtonFontList +#define XmRButtonFontList ((char*)&_XmStrings[19938]) +#endif +#ifndef XmRLabelFontList +#define XmRLabelFontList ((char*)&_XmStrings[19953]) +#endif +#ifndef XmRTextFontList +#define XmRTextFontList ((char*)&_XmStrings[19967]) +#endif +#ifndef XmSPIXEL_SET_PROP +#define XmSPIXEL_SET_PROP ((char*)&_XmStrings[19980]) +#endif +#ifndef XmS50_foreground +#define XmS50_foreground ((char*)&_XmStrings[19994]) +#endif +#ifndef XmSunspecified_pixmap +#define XmSunspecified_pixmap ((char*)&_XmStrings[20008]) +#endif +#endif /* XMSTRINGDEFINES */ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define XmSTRING_DEFAULT_CHARSET XmS +#define XmSTRING_ISO8859_1 "ISO8859-1" +#define XmFONTLIST_DEFAULT_TAG XmSFONTLIST_DEFAULT_TAG_STRING +#define XmFONTLIST_DEFAULT_TAG_STRING XmSXmFONTLIST_DEFAULT_TAG_STRING + +#define XmVaCASCADEBUTTON "cascadeButton" +#define XmVaCHECKBUTTON "checkButton" +#define XmVaDOUBLE_SEPARATOR "doubleSeparator" +#define XmVaPUSHBUTTON "pushButton" +#define XmVaRADIOBUTTON "radioButton" +#define XmVaSEPARATOR "separator" +#define XmVaSINGLE_SEPARATOR "singleSeparator" +#define XmVaTOGGLEBUTTON "checkButton" + +#ifndef XmVaTITLE +#define XmVaTITLE XtNtitle +#endif + +#ifndef XtCKeyboardFocusPolicy +#define XtCKeyboardFocusPolicy XmCKeyboardFocusPolicy +#endif + +#ifndef XtCShellUnitType +#define XtCShellUnitType XmCShellUnitType +#endif + +#ifndef XtNkeyboardFocusPolicy +#define XtNkeyboardFocusPolicy XmNkeyboardFocusPolicy +#endif + +#ifndef XtNshellUnitType +#define XtNshellUnitType XmNshellUnitType +#endif + +#ifndef XtRKeyboardFocusPolicy +#define XtRKeyboardFocusPolicy XmRKeyboardFocusPolicy +#endif + +#ifndef XmRPrimBottomShadowPixmap +#define XmRPrimBottomShadowPixmap XmRBottomShadowPixmap +#endif + +#ifndef XmRPrimHighlightPixmap +#define XmRPrimHighlightPixmap XmRHighlightPixmap +#endif + +#ifndef XmRPrimTopShadowPixmap +#define XmRPrimTopShadowPixmap XmRTopShadowPixmap +#endif + +#ifndef XmCAccelerators +#define XmCAccelerators XtCAccelerators +#endif + +#ifndef XmCAllowShellResize +#define XmCAllowShellResize XtCAllowShellResize +#endif + +#ifndef XmCArgc +#define XmCArgc XtCArgc +#endif + +#ifndef XmCArgv +#define XmCArgv XtCArgv +#endif + +#ifndef XmCBackground +#define XmCBackground XtCBackground +#endif + +#ifndef XmCBaseHeight +#define XmCBaseHeight XtCBaseHeight +#endif + +#ifndef XmCBaseHeight +#define XmCBaseHeight XtCBaseHeight +#endif + +#ifndef XmCBaseWidth +#define XmCBaseWidth XtCBaseWidth +#endif + +#ifndef XmCBaseWidth +#define XmCBaseWidth XtCBaseWidth +#endif + +#ifndef XmCBitmap +#define XmCBitmap XtCBitmap +#endif + +#ifndef XmCBoolean +#define XmCBoolean XtCBoolean +#endif + +#ifndef XmCBorderColor +#define XmCBorderColor XtCBorderColor +#endif + +#ifndef XmCBorderWidth +#define XmCBorderWidth XtCBorderWidth +#endif + +#ifndef XmCCallback +#define XmCCallback XtCCallback +#endif + +#ifndef XmCColor +#define XmCColor XtCColor +#endif + +#ifndef XmCColormap +#define XmCColormap XtCColormap +#endif + +#ifndef XmCCreatePopupChildProc +#define XmCCreatePopupChildProc XtCCreatePopupChildProc +#endif + +#ifndef XmCCursor +#define XmCCursor XtCCursor +#endif + +#ifndef XmCDepth +#define XmCDepth XtCDepth +#endif + +#ifndef XmCDimension +#define XmCDimension XtRDimension +#endif + +#ifndef XmCEditMode +#define XmCEditMode XtREditMode +#endif + +#ifndef XmCEditType +#define XmCEditType XtCEditType +#endif + +#ifndef XmCEventBindings +#define XmCEventBindings XtCEventBindings +#endif + +#ifndef XmCFile +#define XmCFile XtCFile +#endif + +#ifndef XmCFont +#define XmCFont XtCFont +#endif + +#ifndef XmCFontSet +#define XmCFontSet XtCFontSet +#endif + +#ifndef XmCForeground +#define XmCForeground XtCForeground +#endif + +#ifndef XmCFraction +#define XmCFraction XtCFraction +#endif + +#ifndef XmCFunction +#define XmCFunction XtCFunction +#endif + +#ifndef XmCGeometry +#define XmCGeometry XtCGeometry +#endif + +#ifndef XmCHSpace +#define XmCHSpace XtCHSpace +#endif + +#ifndef XmCHeight +#define XmCHeight XtCHeight +#endif + +#ifndef XmCHeightInc +#define XmCHeightInc XtCHeightInc +#endif + +#ifndef XmCIconMask +#define XmCIconMask XtCIconMask +#endif + +#ifndef XmCIconName +#define XmCIconName XtCIconName +#endif + +#ifndef XmCIconNameEncoding +#define XmCIconNameEncoding XtCIconNameEncoding +#endif + +#ifndef XmCIconPixmap +#define XmCIconPixmap XtCIconPixmap +#endif + +#ifndef XmCIconWindow +#define XmCIconWindow XtCIconWindow +#endif + +#ifndef XmCIconX +#define XmCIconX XtCIconX +#endif + +#ifndef XmCIconY +#define XmCIconY XtCIconY +#endif + +#ifndef XmCIconic +#define XmCIconic XtCIconic +#endif + +#ifndef XmCIndex +#define XmCIndex XtCIndex +#endif + +#ifndef XmCInitialResourcesPersistent +#define XmCInitialResourcesPersistent XtCInitialResourcesPersistent +#endif + +#ifndef XmCInitialState +#define XmCInitialState XtCInitialState +#endif + +#ifndef XmCInput +#define XmCInput XtCInput +#endif + +#ifndef XmCInsertPosition +#define XmCInsertPosition XtCInsertPosition +#endif + +#ifndef XmCInterval +#define XmCInterval XtCInterval +#endif + +#ifndef XmCJustify +#define XmCJustify XtCJustify +#endif + +#ifndef XmCLabel +#define XmCLabel XtCLabel +#endif + +#ifndef XmCLength +#define XmCLength XtCLength +#endif + +#ifndef XmCMappedWhenManaged +#define XmCMappedWhenManaged XtCMappedWhenManaged +#endif + +#ifndef XmCMargin +#define XmCMargin XtCMargin +#endif + + +#ifndef XmCMaxAspectX +#define XmCMaxAspectX XtCMaxAspectX +#endif + + +#ifndef XmCMaxAspectY +#define XmCMaxAspectY XtCMaxAspectY +#endif + +#ifndef XmCMaxHeight +#define XmCMaxHeight XtCMaxHeight +#endif + +#ifndef XmCMaxWidth +#define XmCMaxWidth XtCMaxWidth +#endif + +#ifndef XmCMenuEntry +#define XmCMenuEntry XtCMenuEntry +#endif + +#ifndef XmCMinAspectX +#define XmCMinAspectX XtCMinAspectX +#endif + +#ifndef XmCMinAspectY +#define XmCMinAspectY XtCMinAspectY +#endif + +#ifndef XmCMinHeight +#define XmCMinHeight XtCMinHeight +#endif + +#ifndef XmCMinWidth +#define XmCMinWidth XtCMinWidth +#endif + +#ifndef XmCNotify +#define XmCNotify XtCNotify +#endif + +#ifndef XmCOrientation +#define XmCOrientation XtCOrientation +#endif + +#ifndef XmCOverrideRedirect +#define XmCOverrideRedirect XtCOverrideRedirect +#endif + +#ifndef XmCParameter +#define XmCParameter XtCParameter +#endif + +#ifndef XmCPixmap +#define XmCPixmap XtCPixmap +#endif + + +#ifndef XmCPosition +#define XmCPosition XtCPosition +#endif + +#ifndef XmCReadOnly +#define XmCReadOnly XtCReadOnly +#endif + +#ifndef XmCResize +#define XmCResize XtCResize +#endif + +#ifndef XmCReverseVideo +#define XmCReverseVideo XtCReverseVideo +#endif + +#ifndef XmCSaveUnder +#define XmCSaveUnder XtCSaveUnder +#endif + +#ifndef XmCScreen +#define XmCScreen XtCScreen +#endif + +#ifndef XmCScrollDCursor +#define XmCScrollDCursor XtCScrollDCursor +#endif + +#ifndef XmCScrollHCursor +#define XmCScrollHCursor XtCScrollHCursor +#endif + +#ifndef XmCScrollLCursor +#define XmCScrollLCursor XtCScrollLCursor +#endif + +#ifndef XmCScrollProc +#define XmCScrollProc XtCScrollProc +#endif + +#ifndef XmCScrollRCursor +#define XmCScrollRCursor XtCScrollRCursor +#endif + +#ifndef XmCScrollUCursor +#define XmCScrollUCursor XtCScrollUCursor +#endif + +#ifndef XmCScrollVCursor +#define XmCScrollVCursor XtCScrollVCursor +#endif + +#ifndef XmCSelection +#define XmCSelection XtCSelection +#endif + +#ifndef XmCSelectionArray +#define XmCSelectionArray XtCSelectionArray +#endif + +#ifndef XmCSensitive +#define XmCSensitive XtCSensitive +#endif + +#ifndef XmCSpace +#define XmCSpace XtCSpace +#endif + +#ifndef XmCString +#define XmCString XtCString +#endif + +#ifndef XmCTextOptions +#define XmCTextOptions XtCTextOptions +#endif + +#ifndef XmCTextPosition +#define XmCTextPosition XtCTextPosition +#endif + +#ifndef XmCTextSink +#define XmCTextSink XtCTextSink +#endif + +#ifndef XmCTextSource +#define XmCTextSource XtCTextSource +#endif + +#ifndef XmCThickness +#define XmCThickness XtCThickness +#endif + +#ifndef XmCThumb +#define XmCThumb XtCThumb +#endif + +#ifndef XmCTitle +#define XmCTitle XtCTitle +#endif + +#ifndef XmCTitleEncoding +#define XmCTitleEncoding XtCTitleEncoding +#endif + +#ifndef XmCTransient +#define XmCTransient XtCTransient +#endif + +#ifndef XmCTransientFor +#define XmCTransientFor XtCTransientFor +#endif + +#ifndef XmCTranslations +#define XmCTranslations XtCTranslations +#endif + +#ifndef XmCVSpace +#define XmCVSpace XtCVSpace +#endif + + +#ifndef XmCValue +#define XmCValue XtCValue +#endif + +#ifndef XmCVisual +#define XmCVisual XtCVisual +#endif + +#ifndef XmCWaitForWm +#define XmCWaitForWm XtCWaitForWm +#endif + +#ifndef XmCWidget +#define XmCWidget XtRWidget +#endif + +#ifndef XmCWidth +#define XmCWidth XtCWidth +#endif + +#ifndef XmCWidthInc +#define XmCWidthInc XtCWidthInc +#endif + +#ifndef XmCWinGravity +#define XmCWinGravity XtCWinGravity +#endif + +#ifndef XmCWindow +#define XmCWindow XtCWindow +#endif + +#ifndef XmCWindowGroup +#define XmCWindowGroup XtCWindowGroup +#endif + +#ifndef XmCWmTimeout +#define XmCWmTimeout XtCWmTimeout +#endif + +#ifndef XmCX +#define XmCX XtCX +#endif + +#ifndef XmCY +#define XmCY XtCY +#endif + +#ifndef XmNaccelerators +#define XmNaccelerators XtNaccelerators +#endif + +#ifndef XmNallowShellResize +#define XmNallowShellResize XtNallowShellResize +#endif + +#ifndef XmNancestorSensitive +#define XmNancestorSensitive XtNancestorSensitive +#endif + +#ifndef XmNargc +#define XmNargc XtNargc +#endif + +#ifndef XmNargv +#define XmNargv XtNargv +#endif + +#ifndef XmNbackground +#define XmNbackground XtNbackground +#endif + +#ifndef XmNbackgroundPixmap +#define XmNbackgroundPixmap XtNbackgroundPixmap +#endif + +#ifndef XmNbaseHeight +#define XmNbaseHeight XtNbaseHeight +#endif + +#ifndef XmNbaseHeight +#define XmNbaseHeight XtNbaseHeight +#endif + +#ifndef XmNbaseWidth +#define XmNbaseWidth XtNbaseWidth +#endif + +#ifndef XmNbaseWidth +#define XmNbaseWidth XtNbaseWidth +#endif + +#ifndef XmNbitmap +#define XmNbitmap XtNbitmap +#endif + +#ifndef XmNborder +#define XmNborder XtNborder +#endif + +#ifndef XmNborderColor +#define XmNborderColor XtNborderColor +#endif + +#ifndef XmNborderPixmap +#define XmNborderPixmap XtNborderPixmap +#endif + +#ifndef XmNborderWidth +#define XmNborderWidth XtNborderWidth +#endif + +#ifndef XmNcallback +#define XmNcallback XtNcallback +#endif + +#ifndef XmNchildren +#define XmNchildren XtNchildren +#endif + +#ifndef XmNcolormap +#define XmNcolormap XtNcolormap +#endif + +#ifndef XmNcreatePopupChildProc +#define XmNcreatePopupChildProc XtNcreatePopupChildProc +#endif + +#ifndef XmNdepth +#define XmNdepth XtNdepth +#endif + +#ifndef XmNdestroyCallback +#define XmNdestroyCallback XtNdestroyCallback +#endif + +#ifndef XmNeditType +#define XmNeditType XtNeditType +#endif + +#ifndef XmNfile +#define XmNfile XtNfile +#endif + +#ifndef XmNfont +#define XmNfont XtNfont +#endif + +#ifndef XmNfontSet +#define XmNfontSet XtNfontSet +#endif + +#ifndef XmNforceBars +#define XmNforceBars XtNforceBars +#endif + +#ifndef XmNforeground +#define XmNforeground XtNforeground +#endif + +#ifndef XmNfunction +#define XmNfunction XtNfunction +#endif + +#ifndef XmNgeometry +#define XmNgeometry XtNgeometry +#endif + +#ifndef XmNheight +#define XmNheight XtNheight +#endif + +#ifndef XmNheightInc +#define XmNheightInc XtNheightInc +#endif + +#ifndef XmNhighlight +#define XmNhighlight XtNhighlight +#endif + +#ifndef XmNiconMask +#define XmNiconMask XtNiconMask +#endif + +#ifndef XmNiconName +#define XmNiconName XtNiconName +#endif + +#ifndef XmNiconNameEncoding +#define XmNiconNameEncoding XtNiconNameEncoding +#endif + +#ifndef XmNiconPixmap +#define XmNiconPixmap XtNiconPixmap +#endif + +#ifndef XmNiconWindow +#define XmNiconWindow XtNiconWindow +#endif + +#ifndef XmNiconX +#define XmNiconX XtNiconX +#endif + +#ifndef XmNiconY +#define XmNiconY XtNiconY +#endif + +#ifndef XmNiconic +#define XmNiconic XtNiconic +#endif + +#ifndef XmNindex +#define XmNindex XtNindex +#endif + +#ifndef XmNinitialResourcesPersistent +#define XmNinitialResourcesPersistent XtNinitialResourcesPersistent +#endif + +#ifndef XmNinitialState +#define XmNinitialState XtNinitialState +#endif + +#ifndef XmNinnerHeight +#define XmNinnerHeight XtNinnerHeight +#endif + +#ifndef XmNinnerWidth +#define XmNinnerWidth XtNinnerWidth +#endif + +#ifndef XmNinnerWindow +#define XmNinnerWindow XtNinnerWindow +#endif + +#ifndef XmNinput +#define XmNinput XtNinput +#endif + +#ifndef XmNinsertPosition +#define XmNinsertPosition XtNinsertPosition +#endif + +#ifndef XmNinternalHeight +#define XmNinternalHeight XtNinternalHeight +#endif + +#ifndef XmNinternalWidth +#define XmNinternalWidth XtNinternalWidth +#endif + +#ifndef XmNjumpProc +#define XmNjumpProc XtNjumpProc +#endif + +#ifndef XmNjustify +#define XmNjustify XtNjustify +#endif + +#ifndef XmNlength +#define XmNlength XtNlength +#endif + +#ifndef XmNlowerRight +#define XmNlowerRight XtNlowerRight +#endif + +#ifndef XmNmappedWhenManaged +#define XmNmappedWhenManaged XtNmappedWhenManaged +#endif + +#ifndef XmNmaxAspectX +#define XmNmaxAspectX XtNmaxAspectX +#endif + +#ifndef XmNmaxAspectY +#define XmNmaxAspectY XtNmaxAspectY +#endif + +#ifndef XmNmaxHeight +#define XmNmaxHeight XtNmaxHeight +#endif + +#ifndef XmNmaxWidth +#define XmNmaxWidth XtNmaxWidth +#endif + +#ifndef XmNmenuEntry +#define XmNmenuEntry XtNmenuEntry +#endif + +#ifndef XmNminAspectX +#define XmNminAspectX XtNminAspectX +#endif + +#ifndef XmNminAspectY +#define XmNminAspectY XtNminAspectY +#endif + +#ifndef XmNminHeight +#define XmNminHeight XtNminHeight +#endif + +#ifndef XmNminWidth +#define XmNminWidth XtNminWidth +#endif + +#ifndef XmNname +#define XmNname XtNname +#endif + +#ifndef XmNnotify +#define XmNnotify XtNnotify +#endif + +#ifndef XmNnumChildren +#define XmNnumChildren XtNnumChildren +#endif + +#ifndef XmNorientation +#define XmNorientation XtNorientation +#endif + +#ifndef XmNoverrideRedirect +#define XmNoverrideRedirect XtNoverrideRedirect +#endif + +#ifndef XmNparameter +#define XmNparameter XtNparameter +#endif + +#ifndef XmNpixmap +#define XmNpixmap XtNpixmap +#endif + +#ifndef XmNpopdownCallback +#define XmNpopdownCallback XtNpopdownCallback +#endif + +#ifndef XmNpopupCallback +#define XmNpopupCallback XtNpopupCallback +#endif + +#ifndef XmNresize +#define XmNresize XtNresize +#endif + +#ifndef XmNreverseVideo +#define XmNreverseVideo XtNreverseVideo +#endif + +#ifndef XmNsaveUnder +#define XmNsaveUnder XtNsaveUnder +#endif + +#ifndef XmNscreen +#define XmNscreen XtNscreen +#endif + +#ifndef XmNscrollDCursor +#define XmNscrollDCursor XtNscrollDCursor +#endif + +#ifndef XmNscrollHCursor +#define XmNscrollHCursor XtNscrollHCursor +#endif + +#ifndef XmNscrollLCursor +#define XmNscrollLCursor XtNscrollLCursor +#endif + +#ifndef XmNscrollProc +#define XmNscrollProc XtNscrollProc +#endif + +#ifndef XmNscrollRCursor +#define XmNscrollRCursor XtNscrollRCursor +#endif + +#ifndef XmNscrollUCursor +#define XmNscrollUCursor XtNscrollUCursor +#endif + +#ifndef XmNscrollVCursor +#define XmNscrollVCursor XtNscrollVCursor +#endif + +#ifndef XmNselection +#define XmNselection XtNselection +#endif + +#ifndef XmNselectionArray +#define XmNselectionArray XtNselectionArray +#endif + +#ifndef XmNsensitive +#define XmNsensitive XtNsensitive +#endif + +#ifndef XmNshown +#define XmNshown XtNshown +#endif + +#ifndef XmNspace +#define XmNspace XtNspace +#endif + +#ifndef XmNstring +#define XmNstring XtNstring +#endif + +#ifndef XmNtextOptions +#define XmNtextOptions XtNtextOptions +#endif + +#ifndef XmNtextSink +#define XmNtextSink XtNtextSink +#endif + +#ifndef XmNtextSource +#define XmNtextSource XtNtextSource +#endif + +#ifndef XmNthickness +#define XmNthickness XtNthickness +#endif + +#ifndef XmNthumb +#define XmNthumb XtNthumb +#endif + +#ifndef XmNthumbProc +#define XmNthumbProc XtNthumbProc +#endif + +#ifndef XmNtitle +#define XmNtitle XtNtitle +#endif + +#ifndef XmNtitleEncoding +#define XmNtitleEncoding XtNtitleEncoding +#endif + +#ifndef XmNtop +#define XmNtop XtNtop +#endif + +#ifndef XmNtransient +#define XmNtransient XtNtransient +#endif + +#ifndef XmNtransientFor +#define XmNtransientFor XtNtransientFor +#endif + +#ifndef XmNtransientFor +#define XmNtransientFor XtNtransientFor +#endif + +#ifndef XmNtranslations +#define XmNtranslations XtNtranslations +#endif + +#ifndef XmNupdate +#define XmNupdate XtNupdate +#endif + +#ifndef XmNuseBottom +#define XmNuseBottom XtNuseBottom +#endif + +#ifndef XmNuseRight +#define XmNuseRight XtNuseRight +#endif + +#ifndef XmNvalue +#define XmNvalue XtNvalue +#endif + +#ifndef XmNvisual +#define XmNvisual XtNvisual +#endif + +#ifndef XmNwaitForWm +#define XmNwaitForWm XtNwaitForWm +#endif + +#ifndef XmNwidth +#define XmNwidth XtNwidth +#endif + +#ifndef XmNwidthInc +#define XmNwidthInc XtNwidthInc +#endif + +#ifndef XmNwinGravity +#define XmNwinGravity XtNwinGravity +#endif + +#ifndef XmNwindow +#define XmNwindow XtNwindow +#endif + +#ifndef XmNwindowGroup +#define XmNwindowGroup XtNwindowGroup +#endif + +#ifndef XmNwmTimeout +#define XmNwmTimeout XtNwmTimeout +#endif + +#ifndef XmNx +#define XmNx XtNx +#endif + +#ifndef XmNy +#define XmNy XtNy +#endif + +#ifndef XmRAcceleratorTable +#define XmRAcceleratorTable XtRAcceleratorTable +#endif + +#ifndef XmRAtom +#define XmRAtom XtRAtom +#endif + +#ifndef XmRBitmap +#define XmRBitmap XtRBitmap +#endif + +#ifndef XmRBool +#define XmRBool XtRBool +#endif + +#ifndef XmRBoolean +#define XmRBoolean XtRBoolean +#endif + +#ifndef XmRCallProc +#define XmRCallProc XtRCallProc +#endif + +#ifndef XmRCallback +#define XmRCallback XtRCallback +#endif + +#ifndef XmRCardinal +#define XmRCardinal XtRCardinal +#endif + +#ifndef XmRColor +#define XmRColor XtRColor +#endif + +#ifndef XmRColormap +#define XmRColormap XtRColormap +#endif + +#ifndef XmRCursor +#define XmRCursor XtRCursor +#endif + +#ifndef XmRDimension +#define XmRDimension XtRDimension +#endif + +#ifndef XmRDisplay +#define XmRDisplay XtRDisplay +#endif + +#ifndef XmREditMode +#define XmREditMode XtREditMode +#endif + +#ifndef XmREnum +#define XmREnum XtREnum +#endif + +#ifndef XmRFile +#define XmRFile XtRFile +#endif + +#ifndef XmRFloat +#define XmRFloat XtRFloat +#endif + +#ifndef XmRFont +#define XmRFont XtRFont +#endif + +#ifndef XmRFontSet +#define XmRFontSet XtRFontSet +#endif + +#ifndef XmRFontStruct +#define XmRFontStruct XtRFontStruct +#endif + +#ifndef XmRFunction +#define XmRFunction XtRFunction +#endif + +#ifndef XmRGeometry +#define XmRGeometry XtRGeometry +#endif + +#ifndef XmRImmediate +#define XmRImmediate XtRImmediate +#endif + +#ifndef XmRInitialState +#define XmRInitialState XtRInitialState +#endif + +#ifndef XmRInt +#define XmRInt XtRInt +#endif + +#ifndef XmRJustify +#define XmRJustify XtRJustify +#endif + +#ifndef XmRLongBoolean +#define XmRLongBoolean XtRLongBoolean +#endif + +#ifndef XmROrientation +#define XmROrientation XtROrientation +#endif + +#ifndef XmRObject +#define XmRObject XtRObject +#endif + +#ifndef XmRPixel +#define XmRPixel XtRPixel +#endif + +#ifndef XmRPixmap +#define XmRPixmap XtRPixmap +#endif + +#ifndef XmRPointer +#define XmRPointer XtRPointer +#endif + +#ifndef XmRPosition +#define XmRPosition XtRPosition +#endif + +#ifndef XmRScreen +#define XmRScreen XtRScreen +#endif + +#ifndef XmRShort +#define XmRShort XtRShort +#endif + +#ifndef XmRString +#define XmRString XtRString +#endif + +#ifndef XmRStringArray +#define XmRStringArray XtRStringArray +#endif + +#ifndef XmRStringTable +#define XmRStringTable XtRStringTable +#endif + +#ifndef XmRTextPosition +#define XmRTextPosition XtCTextPosition +#endif + +#ifndef XmRTranslationTable +#define XmRTranslationTable XtRTranslationTable +#endif + +#ifndef XmRUnsignedChar +#define XmRUnsignedChar XtRUnsignedChar +#endif + +#ifndef XmRVisual +#define XmRVisual XtRVisual +#endif + +#ifndef XmRWidget +#define XmRWidget XtRWidget +#endif + +#ifndef XmRWidgetClass +#define XmRWidgetClass XtRWidgetClass +#endif + +#ifndef XmRWidgetList +#define XmRWidgetList XtRWidgetList +#endif + +#ifndef XmRWindow +#define XmRWindow XtRWindow +#endif + +#ifndef XmNtoolTipString +#define XmNtoolTipString "toolTipString" +#endif + +#ifndef XmCToolTipString +#define XmCToolTipString "ToolTipString" +#endif + +#ifndef XmNtoolTipPostDelay +#define XmNtoolTipPostDelay "toolTipPostDelay" +#endif + +#ifndef XmCToolTipPostDelay +#define XmCToolTipPostDelay "ToolTipPostDelay" +#endif + +#ifndef XmNtoolTipPostDuration +#define XmNtoolTipPostDuration "toolTipPostDuration" +#endif + +#ifndef XmCToolTipPostDuration +#define XmCToolTipPostDuration "ToolTipPostDuration" +#endif + +#ifndef XmNtoolTipEnable +#define XmNtoolTipEnable "toolTipEnable" +#endif + +#ifndef XmCToolTipEnable +#define XmCToolTipEnable "ToolTipEnable" +#endif + +#ifndef XmNanimate +#define XmNanimate "animate" +#endif + +#ifndef XmCAnimate +#define XmCAnimate "Animate" +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#endif /* _XmStrDefs_h_ */ diff --git a/libXm/osx/Xm/XmStrDefs22.h b/libXm/osx/Xm/XmStrDefs22.h new file mode 100644 index 0000000..50067dd --- /dev/null +++ b/libXm/osx/Xm/XmStrDefs22.h @@ -0,0 +1,1201 @@ +/* $TOG: XmStrDefs22.ht /main/2 1997/06/18 17:50:15 samborn $ */ +#ifndef _XmStrDefs22_h_ +#define _XmStrDefs22_h_ + +#include + +#ifndef _XmConst +#define _XmConst /**/ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* $TOG: makestrs.c /main/11 1998/02/06 11:24:15 kaleb $ */ +/* This file is automatically generated. */ +/* Default ABI version -- Do not edit */ +/* TOG: xmstring.list /main/5 1997/06/20 08:37:02 samborn */ + +#ifdef XMSTRINGDEFINES +#define XmNitemFoundCallback "itemFoundCallback" +#define XmNitemNotFoundCallback "itemNotFoundCallback" +#define XmRXmTabSide "XmTabSide" +#define XmRTabSide "TabSide" +#define XmRXmPixmapPlacement "XmPixmapPlacement" +#define XmRXmPixmap "XmPixmap" +#define XmRXmPixel "XmPixel" +#define XmRXmIconPlacement "XmIconPlacement" +#define XmRXmHierarchyNodeState "XmHierarchyNodeState" +#define XmRXmFillOption "XmFillOption" +#define XmRXmConnectStyle "XmConnectStyle" +#define XmRXmColorMode "XmColorMode" +#define XmRXmAlignment "XmAlignment" +#define XmRTabStyle "TabStyle" +#define XmRTabOrientation "TabOrientation" +#define XmRTabMode "TabMode" +#define XmRTabList "TabList" +#define XmRTabEdge "TabEdge" +#define XmRTabArrowPlacement "TabArrowPlacement" +#define XmNxlfdString "xlfdString" +#define XmNverticalNodeSpace "verticalNodeSpace" +#define XmNverticalMargin "verticalMargin" +#define XmNverifyTextFailedCallback "verifyTextFailedCallback" +#define XmNverifyTextCallback "verifyTextCallback" +#define XmNverify "verify" +#define XmNvalues "values" +#define XmNuseTextField "useTextField" +#define XmNuseScaling "useScaling" +#define XmNuseImageCache "useImageCache" +#define XmNupdateTextCallback "updateTextCallback" +#define XmNupdateShellCallback "updateShellCallback" +#define XmNunselectCallback "unselectCallback" +#define XmNuniformTabSize "uniformTabSize" +#define XmNtraversalIndex "traversalIndex" +#define XmNtitleString "titleString" +#define XmNtextString "textString" +#define XmNtextRows "textRows" +#define XmNtearOffLabelString "tearOffLabelString" +#define XmNtabTearOffEnabled "tabTearOffEnabled" +#define XmNtabStyle "tabStyle" +#define XmNtabStringDirection "tabStringDirection" +#define XmNtabSide "tabSide" +#define XmNtabSelectedCallback "tabSelectedCallback" +#define XmNtabSelectPixmap "tabSelectPixmap" +#define XmNtabSelectColor "tabSelectColor" +#define XmNtabPixmapPlacement "tabPixmapPlacement" +#define XmNtabOrientation "tabOrientation" +#define XmNtabOffset "tabOffset" +#define XmNtabMode "tabMode" +#define XmNtabMarginWidth "tabMarginWidth" +#define XmNtabMarginHeight "tabMarginHeight" +#define XmNtabList "tabList" +#define XmNtabLabelString "tabLabelString" +#define XmNtabLabelSpacing "tabLabelSpacing" +#define XmNtabLabelPixmap "tabLabelPixmap" +#define XmNtabForeground "tabForeground" +#define XmNtabEdge "tabEdge" +#define XmNtabCornerPercent "tabCornerPercent" +#define XmNtabBoxWidget "tabBoxWidget" +#define XmNtabBackgroundPixmap "tabBackgroundPixmap" +#define XmNtabBackground "tabBackground" +#define XmNtabAutoSelect "tabAutoSelect" +#define XmNtabArrowPlacement "tabArrowPlacement" +#define XmNtabAlignment "tabAlignment" +#define XmNstackedEffect "stackedEffect" +#define XmNsortFunctions "sortFunctions" +#define XmNsliderTogLabel "sliderTogLabel" +#define XmNsizeString "sizeString" +#define XmNshowValue "showValue" +#define XmNshowSash "showSash" +#define XmNshowNameString "showNameString" +#define XmNshowLabel "showLabel" +#define XmNshowFontName "showFontName" +#define XmNshowFind "showFind" +#define XmNselectedIndex "selectedIndex" +#define XmNselectedColumn "selectedColumn" +#define XmNselectCallback "selectCallback" +#define XmNscalingString "scalingString" +#define XmNsashTranslations "sashTranslations" +#define XmNsampleText "sampleText" +#define XmNrgbFile "rgbFile" +#define XmNresizeToPreferred "resizeToPreferred" +#define XmNresizeCallback "resizeCallback" +#define XmNredSliderLabel "redSliderLabel" +#define XmNpropSpaceString "propSpaceString" +#define XmNpreferredPaneSize "preferredPaneSize" +#define XmNposition "position" +#define XmNpopupShellWidget "popupShellWidget" +#define XmNpopupOffset "popupOffset" +#define XmNpopupCursor "popupCursor" +#define XmNpixmapWidth "pixmapWidth" +#define XmNpixmapHeight "pixmapHeight" +#define XmNparentNode "parentNode" +#define XmNotherString "otherString" +#define XmNoptionString "optionString" +#define XmNopenFolderPixmap "openFolderPixmap" +#define XmNopenClosePadding "openClosePadding" +#define XmNnumValues "numValues" +#define XmNnumStacks "numStacks" +#define XmNnumRows "numRows" +#define XmNnodeStateChangedCallback "nodeStateChangedCallback" +#define XmNnodeStateCallback "nodeStateCallback" +#define XmNnodeStateBegEndCallback "nodeStateBegEndCallback" +#define XmNnodeState "nodeState" +#define XmNnoCellError "noCellError" +#define XmNmonoSpaceString "monoSpaceString" +#define XmNminimumVerticalCells "minimumVerticalCells" +#define XmNminimumHorizontalCells "minimumHorizontalCells" +#define XmNminimumCellWidth "minimumCellWidth" +#define XmNminimumCellHeight "minimumCellHeight" +#define XmNmargin "margin" +#define XmNlist "list" +#define XmNlineWidth "lineWidth" +#define XmNlineColor "lineColor" +#define XmNlabel "label" +#define XmNitalicString "italicString" +#define XmNinsertBefore "insertBefore" +#define XmNindentSpace "indentSpace" +#define XmNiconTextPadding "iconTextPadding" +#define XmNiconPlacement "iconPlacement" +#define XmNhorizontalNodeSpace "horizontalNodeSpace" +#define XmNhorizontalMargin "horizontalMargin" +#define XmNgreenSliderLabel "greenSliderLabel" +#define XmNfreeTabPixmap "freeTabPixmap" +#define XmNfirstRow "firstRow" +#define XmNfirstColumnPixmaps "firstColumnPixmaps" +#define XmNfirstColumn "firstColumn" +#define XmNfindLabel "findLabel" +#define XmNfillOption "fillOption" +#define XmNfileReadError "fileReadError" +#define XmNfamilyString "familyString" +#define XmNequalSize "equalSize" +#define XmNentryLabelString "entryLabelString" +#define XmNentryData "entryData" +#define XmNencodingString "encodingString" +#define XmNencodingList "encodingList" +#define XmNdoubleClickCallback "doubleClickCallback" +#define XmNdefaultEncodingString "defaultEncodingString" +#define XmNdFieldPrefWidth "dFieldPrefWidth" +#define XmNdFieldPrefHeight "dFieldPrefHeight" +#define XmNdFieldMinWidth "dFieldMinWidth" +#define XmNdFieldMinHeight "dFieldMinHeight" +#define XmNdFieldMaxWidth "dFieldMaxWidth" +#define XmNdFieldMaxHeight "dFieldMaxHeight" +#define XmNcustomizedCombinationBox "customizedCombinationBox" +#define XmNcursor "cursor" +#define XmNcurrentFont "currentFont" +#define XmNconnectStyle "connectStyle" +#define XmNcomboTranslations "comboTranslations" +#define XmNcolumnTitles "columnTitles" +#define XmNcolorName "colorName" +#define XmNcolorMode "colorMode" +#define XmNcolorListTogLabel "colorListTogLabel" +#define XmNcellY "cellY" +#define XmNcellX "cellX" +#define XmNbothString "bothString" +#define XmNboldString "boldString" +#define XmNblueSliderLabel "blueSliderLabel" +#define XmCDistribution "Distribution" +#define XmCFillStyle "FillStyle" +#define XmCItemSpacing "ItemSpacing" +#define XmCLabelSpacing "LabelSpacing" +#define XmCShowLabel "ShowLabel" +#define XmCStretchable "Stretchable" +#define XmNdefaultEntryLabelAlignment "defaultEntryLabelAlignment" +#define XmNdefaultEntryLabelFontList "defaultEntryLabelFontList" +#define XmNdefaultFillStyle "defaultFillStyle" +#define XmNdistribution "distribution" +#define XmNentryLabelAlignment "entryLabelAlignment" +#define XmNentryLabelFontList "entryLabelFontList" +#define XmNentryLabelPixmap "entryLabelPixmap" +#define XmNentryLabelType "entryLabelType" +#define XmNfillStyle "fillStyle" +#define XmNitemSpacing "itemSpacing" +#define XmNlabelSpacing "labelSpacing" +#define XmNshowEntryLabel "showEntryLabel" +#define XmNstretchable "stretchable" +#define XmRDistribution "Distribution" +#define XmRFillStyle "FillStyle" +#define XmCEqualSize "EqualSize" +#define XmCFillOption "FillOption" +#define XmCColorMode "ColorMode" +#define XmCFileReadError "FileReadError" +#define XmCNoCellError "NoCellError" +#define XmCSliderLabel "SliderLabel" +#define XmCTogLabel "TogLabel" +#define XmCAutoFill "AutoFill" +#define XmCPicture "Picture" +#define XmNautoFill "autoFill" +#define XmNpicture "picture" +#define XmNpictureErrorCallback "pictureErrorCallback" +#define XmNvalidateCallback "validateCallback" +#define XmCFindLabel "FindLabel" +#define XmCShowFind "ShowFind" +#define XmNentryBackground "entryBackground" +#define XmCColumnTitles "ColumnTitles" +#define XmCEntryData "EntryData" +#define XmCFirstColumnPixmaps "FirstColumnPixmaps" +#define XmCFirstLocation "FirstLocation" +#define XmCNewVisualStyle "NewVisualStyle" +#define XmCNumRows "NumRows" +#define XmCScrollBar "ScrollBar" +#define XmCSelectedColumn "SelectedColumn" +#define XmNnewVisualStyle "newVisualStyle" +#define XmCPreferredPaneSize "PreferredPaneSize" +#define XmCShowSash "ShowSash" +#define XmC100DPIString "100DPIString" +#define XmC75DPIString "75DPIString" +#define XmCAnyLowerString "AnyLowerString" +#define XmCAnyString "AnyString" +#define XmCBoldString "BoldString" +#define XmCBothString "BothString" +#define XmCDefaultEncodingString "DefaultEncodingString" +#define XmCEncodingList "EncodingList" +#define XmCEncodingString "EncodingString" +#define XmCFamilyString "FamilyString" +#define XmCItalicString "ItalicString" +#define XmCMonoSpaceString "MonoSpaceString" +#define XmCOptionString "OptionString" +#define XmCOtherString "OtherString" +#define XmCPropSpaceString "PropSpaceString" +#define XmCSampleText "SampleText" +#define XmCScalingString "ScalingString" +#define XmCShowNameString "ShowNameString" +#define XmCSizeString "SizeString" +#define XmCTextRows "TextRows" +#define XmCXlfdSpaceString "XlfdSpaceString" +#define XmN100DPIstring "100DPIstring" +#define XmN75DPIstring "75DPIstring" +#define XmNanyLowerString "anyLowerString" +#define XmNanyString "anyString" +#define XmCCellX "CellX" +#define XmCCellY "CellY" +#define XmCDefaultCells "DefaultCells" +#define XmCMinimumCellSize "MinimumCellSize" +#define XmCIconPlacement "IconPlacement" +#define XmNpixmapDepth "pixmapDepth" +#define XmCAutoClose "AutoClose" +#define XmCInsertBefore "InsertBefore" +#define XmCNodeState "NodeState" +#define XmCNodeStateCallback "NodeStateCallback" +#define XmCNodeStateChangedCallback "NodeStateChangedCallback" +#define XmCParentNode "ParentNode" +#define XmNautoClose "autoClose" +#define XmNcloseFolderPixmap "closeFolderPixmap" +#define XmNnodeCloseFolderPixmap "nodeCloseFolderPixmap" +#define XmNnodeOpenFolderPixmap "nodeOpenFolderPixmap" +#define XmNnodeStateBeginEndCallback "nodeStateBeginEndCallback" +#define XmCConstrainWidth "ConstrainWidth" +#define XmCIndentSpace "IndentSpace" +#define XmNconnectNodes "connectNodes" +#define XmNconstrainWidth "constrainWidth" +#define XmCNumStacks "NumStacks" +#define XmCSelectedIndex "SelectedIndex" +#define XmCStackedEffect "StackedEffect" +#define XmCTabAutoSelect "TabAutoSelect" +#define XmCTabCornerPercent "TabCornerPercent" +#define XmCTabEdge "TabEdge" +#define XmCTabLabelSpacing "TabLabelSpacing" +#define XmCTabMode "TabMode" +#define XmCTabOffset "TabOffset" +#define XmCTabOrientation "TabOrientation" +#define XmCTabSelectColor "TabSelectColor" +#define XmCTabSelectPixmap "TabSelectPixmap" +#define XmCTabStyle "TabStyle" +#define XmCTraversalIndex "TraversalIndex" +#define XmCUniformTabSize "UniformTabSize" +#define XmCUseImageCache "UseImageCache" +#define XmCFreeTabPixmap "FreeTabPixmap" +#define XmCICSEnhancementPakResourceError "ICSEnhancementPakResourceError" +#define XmCTabLabelPixmap "TabLabelPixmap" +#define XmCTabLabelString "TabLabelString" +#define XmCTabPixmapPlacement "TabPixmapPlacement" +#define XmCTabSide "TabSide" +#define XmNillegalResourceValue "illegalResourceValue" +#define XmCCompressStyle "CompressStyle" +#define XmCConnectStyle "ConnectStyle" +#define XmCHorizontalDelta "HorizontalDelta" +#define XmCLineWidth "LineWidth" +#define XmCOpenClosePadding "OpenClosePadding" +#define XmCVerticalDelta "VerticalDelta" +#define XmNcompressStyle "compressStyle" +#define XmNhorizontalDelta "horizontalDelta" +#define XmNlineBackgroundColor "lineBackgroundColor" +#define XmNlineStyle "lineStyle" +#define XmNverticalDelta "verticalDelta" +#define XmRXmCompressStyle "XmCompressStyle" +#define XmRXmLineStyle "XmLineStyle" +#define XmCPopupOffset "PopupOffset" +#define XmCUseTextField "UseTextField" +#define XmCVerify "Verify" +#else +externalref _XmConst char _XmStrings22[]; +#ifndef XmNitemFoundCallback +#define XmNitemFoundCallback ((char*)&_XmStrings22[0]) +#endif +#ifndef XmNitemNotFoundCallback +#define XmNitemNotFoundCallback ((char*)&_XmStrings22[18]) +#endif +#ifndef XmRXmTabSide +#define XmRXmTabSide ((char*)&_XmStrings22[39]) +#endif +#ifndef XmRTabSide +#define XmRTabSide ((char*)&_XmStrings22[49]) +#endif +#ifndef XmRXmPixmapPlacement +#define XmRXmPixmapPlacement ((char*)&_XmStrings22[57]) +#endif +#ifndef XmRXmPixmap +#define XmRXmPixmap ((char*)&_XmStrings22[75]) +#endif +#ifndef XmRXmPixel +#define XmRXmPixel ((char*)&_XmStrings22[84]) +#endif +#ifndef XmRXmIconPlacement +#define XmRXmIconPlacement ((char*)&_XmStrings22[92]) +#endif +#ifndef XmRXmHierarchyNodeState +#define XmRXmHierarchyNodeState ((char*)&_XmStrings22[108]) +#endif +#ifndef XmRXmFillOption +#define XmRXmFillOption ((char*)&_XmStrings22[129]) +#endif +#ifndef XmRXmConnectStyle +#define XmRXmConnectStyle ((char*)&_XmStrings22[142]) +#endif +#ifndef XmRXmColorMode +#define XmRXmColorMode ((char*)&_XmStrings22[157]) +#endif +#ifndef XmRXmAlignment +#define XmRXmAlignment ((char*)&_XmStrings22[169]) +#endif +#ifndef XmRTabStyle +#define XmRTabStyle ((char*)&_XmStrings22[181]) +#endif +#ifndef XmRTabOrientation +#define XmRTabOrientation ((char*)&_XmStrings22[190]) +#endif +#ifndef XmRTabMode +#define XmRTabMode ((char*)&_XmStrings22[205]) +#endif +#ifndef XmRTabList +#define XmRTabList ((char*)&_XmStrings22[213]) +#endif +#ifndef XmRTabEdge +#define XmRTabEdge ((char*)&_XmStrings22[221]) +#endif +#ifndef XmRTabArrowPlacement +#define XmRTabArrowPlacement ((char*)&_XmStrings22[229]) +#endif +#ifndef XmNxlfdString +#define XmNxlfdString ((char*)&_XmStrings22[247]) +#endif +#ifndef XmNverticalNodeSpace +#define XmNverticalNodeSpace ((char*)&_XmStrings22[258]) +#endif +#ifndef XmNverticalMargin +#define XmNverticalMargin ((char*)&_XmStrings22[276]) +#endif +#ifndef XmNverifyTextFailedCallback +#define XmNverifyTextFailedCallback ((char*)&_XmStrings22[291]) +#endif +#ifndef XmNverifyTextCallback +#define XmNverifyTextCallback ((char*)&_XmStrings22[316]) +#endif +#ifndef XmNverify +#define XmNverify ((char*)&_XmStrings22[335]) +#endif +#ifndef XmNvalues +#define XmNvalues ((char*)&_XmStrings22[342]) +#endif +#ifndef XmNuseTextField +#define XmNuseTextField ((char*)&_XmStrings22[349]) +#endif +#ifndef XmNuseScaling +#define XmNuseScaling ((char*)&_XmStrings22[362]) +#endif +#ifndef XmNuseImageCache +#define XmNuseImageCache ((char*)&_XmStrings22[373]) +#endif +#ifndef XmNupdateTextCallback +#define XmNupdateTextCallback ((char*)&_XmStrings22[387]) +#endif +#ifndef XmNupdateShellCallback +#define XmNupdateShellCallback ((char*)&_XmStrings22[406]) +#endif +#ifndef XmNunselectCallback +#define XmNunselectCallback ((char*)&_XmStrings22[426]) +#endif +#ifndef XmNuniformTabSize +#define XmNuniformTabSize ((char*)&_XmStrings22[443]) +#endif +#ifndef XmNtraversalIndex +#define XmNtraversalIndex ((char*)&_XmStrings22[458]) +#endif +#ifndef XmNtitleString +#define XmNtitleString ((char*)&_XmStrings22[473]) +#endif +#ifndef XmNtextString +#define XmNtextString ((char*)&_XmStrings22[485]) +#endif +#ifndef XmNtextRows +#define XmNtextRows ((char*)&_XmStrings22[496]) +#endif +#ifndef XmNtearOffLabelString +#define XmNtearOffLabelString ((char*)&_XmStrings22[505]) +#endif +#ifndef XmNtabTearOffEnabled +#define XmNtabTearOffEnabled ((char*)&_XmStrings22[524]) +#endif +#ifndef XmNtabStyle +#define XmNtabStyle ((char*)&_XmStrings22[542]) +#endif +#ifndef XmNtabStringDirection +#define XmNtabStringDirection ((char*)&_XmStrings22[551]) +#endif +#ifndef XmNtabSide +#define XmNtabSide ((char*)&_XmStrings22[570]) +#endif +#ifndef XmNtabSelectedCallback +#define XmNtabSelectedCallback ((char*)&_XmStrings22[578]) +#endif +#ifndef XmNtabSelectPixmap +#define XmNtabSelectPixmap ((char*)&_XmStrings22[598]) +#endif +#ifndef XmNtabSelectColor +#define XmNtabSelectColor ((char*)&_XmStrings22[614]) +#endif +#ifndef XmNtabPixmapPlacement +#define XmNtabPixmapPlacement ((char*)&_XmStrings22[629]) +#endif +#ifndef XmNtabOrientation +#define XmNtabOrientation ((char*)&_XmStrings22[648]) +#endif +#ifndef XmNtabOffset +#define XmNtabOffset ((char*)&_XmStrings22[663]) +#endif +#ifndef XmNtabMode +#define XmNtabMode ((char*)&_XmStrings22[673]) +#endif +#ifndef XmNtabMarginWidth +#define XmNtabMarginWidth ((char*)&_XmStrings22[681]) +#endif +#ifndef XmNtabMarginHeight +#define XmNtabMarginHeight ((char*)&_XmStrings22[696]) +#endif +#ifndef XmNtabList +#define XmNtabList ((char*)&_XmStrings22[712]) +#endif +#ifndef XmNtabLabelString +#define XmNtabLabelString ((char*)&_XmStrings22[720]) +#endif +#ifndef XmNtabLabelSpacing +#define XmNtabLabelSpacing ((char*)&_XmStrings22[735]) +#endif +#ifndef XmNtabLabelPixmap +#define XmNtabLabelPixmap ((char*)&_XmStrings22[751]) +#endif +#ifndef XmNtabForeground +#define XmNtabForeground ((char*)&_XmStrings22[766]) +#endif +#ifndef XmNtabEdge +#define XmNtabEdge ((char*)&_XmStrings22[780]) +#endif +#ifndef XmNtabCornerPercent +#define XmNtabCornerPercent ((char*)&_XmStrings22[788]) +#endif +#ifndef XmNtabBoxWidget +#define XmNtabBoxWidget ((char*)&_XmStrings22[805]) +#endif +#ifndef XmNtabBackgroundPixmap +#define XmNtabBackgroundPixmap ((char*)&_XmStrings22[818]) +#endif +#ifndef XmNtabBackground +#define XmNtabBackground ((char*)&_XmStrings22[838]) +#endif +#ifndef XmNtabAutoSelect +#define XmNtabAutoSelect ((char*)&_XmStrings22[852]) +#endif +#ifndef XmNtabArrowPlacement +#define XmNtabArrowPlacement ((char*)&_XmStrings22[866]) +#endif +#ifndef XmNtabAlignment +#define XmNtabAlignment ((char*)&_XmStrings22[884]) +#endif +#ifndef XmNstackedEffect +#define XmNstackedEffect ((char*)&_XmStrings22[897]) +#endif +#ifndef XmNsortFunctions +#define XmNsortFunctions ((char*)&_XmStrings22[911]) +#endif +#ifndef XmNsliderTogLabel +#define XmNsliderTogLabel ((char*)&_XmStrings22[925]) +#endif +#ifndef XmNsizeString +#define XmNsizeString ((char*)&_XmStrings22[940]) +#endif +#ifndef XmNshowValue +#define XmNshowValue ((char*)&_XmStrings22[951]) +#endif +#ifndef XmNshowSash +#define XmNshowSash ((char*)&_XmStrings22[961]) +#endif +#ifndef XmNshowNameString +#define XmNshowNameString ((char*)&_XmStrings22[970]) +#endif +#ifndef XmNshowLabel +#define XmNshowLabel ((char*)&_XmStrings22[985]) +#endif +#ifndef XmNshowFontName +#define XmNshowFontName ((char*)&_XmStrings22[995]) +#endif +#ifndef XmNshowFind +#define XmNshowFind ((char*)&_XmStrings22[1008]) +#endif +#ifndef XmNselectedIndex +#define XmNselectedIndex ((char*)&_XmStrings22[1017]) +#endif +#ifndef XmNselectedColumn +#define XmNselectedColumn ((char*)&_XmStrings22[1031]) +#endif +#ifndef XmNselectCallback +#define XmNselectCallback ((char*)&_XmStrings22[1046]) +#endif +#ifndef XmNscalingString +#define XmNscalingString ((char*)&_XmStrings22[1061]) +#endif +#ifndef XmNsashTranslations +#define XmNsashTranslations ((char*)&_XmStrings22[1075]) +#endif +#ifndef XmNsampleText +#define XmNsampleText ((char*)&_XmStrings22[1092]) +#endif +#ifndef XmNrgbFile +#define XmNrgbFile ((char*)&_XmStrings22[1103]) +#endif +#ifndef XmNresizeToPreferred +#define XmNresizeToPreferred ((char*)&_XmStrings22[1111]) +#endif +#ifndef XmNresizeCallback +#define XmNresizeCallback ((char*)&_XmStrings22[1129]) +#endif +#ifndef XmNredSliderLabel +#define XmNredSliderLabel ((char*)&_XmStrings22[1144]) +#endif +#ifndef XmNpropSpaceString +#define XmNpropSpaceString ((char*)&_XmStrings22[1159]) +#endif +#ifndef XmNpreferredPaneSize +#define XmNpreferredPaneSize ((char*)&_XmStrings22[1175]) +#endif +#ifndef XmNposition +#define XmNposition ((char*)&_XmStrings22[1193]) +#endif +#ifndef XmNpopupShellWidget +#define XmNpopupShellWidget ((char*)&_XmStrings22[1202]) +#endif +#ifndef XmNpopupOffset +#define XmNpopupOffset ((char*)&_XmStrings22[1219]) +#endif +#ifndef XmNpopupCursor +#define XmNpopupCursor ((char*)&_XmStrings22[1231]) +#endif +#ifndef XmNpixmapWidth +#define XmNpixmapWidth ((char*)&_XmStrings22[1243]) +#endif +#ifndef XmNpixmapHeight +#define XmNpixmapHeight ((char*)&_XmStrings22[1255]) +#endif +#ifndef XmNparentNode +#define XmNparentNode ((char*)&_XmStrings22[1268]) +#endif +#ifndef XmNotherString +#define XmNotherString ((char*)&_XmStrings22[1279]) +#endif +#ifndef XmNoptionString +#define XmNoptionString ((char*)&_XmStrings22[1291]) +#endif +#ifndef XmNopenFolderPixmap +#define XmNopenFolderPixmap ((char*)&_XmStrings22[1304]) +#endif +#ifndef XmNopenClosePadding +#define XmNopenClosePadding ((char*)&_XmStrings22[1321]) +#endif +#ifndef XmNnumValues +#define XmNnumValues ((char*)&_XmStrings22[1338]) +#endif +#ifndef XmNnumStacks +#define XmNnumStacks ((char*)&_XmStrings22[1348]) +#endif +#ifndef XmNnumRows +#define XmNnumRows ((char*)&_XmStrings22[1358]) +#endif +#ifndef XmNnodeStateChangedCallback +#define XmNnodeStateChangedCallback ((char*)&_XmStrings22[1366]) +#endif +#ifndef XmNnodeStateCallback +#define XmNnodeStateCallback ((char*)&_XmStrings22[1391]) +#endif +#ifndef XmNnodeStateBegEndCallback +#define XmNnodeStateBegEndCallback ((char*)&_XmStrings22[1409]) +#endif +#ifndef XmNnodeState +#define XmNnodeState ((char*)&_XmStrings22[1433]) +#endif +#ifndef XmNnoCellError +#define XmNnoCellError ((char*)&_XmStrings22[1443]) +#endif +#ifndef XmNmonoSpaceString +#define XmNmonoSpaceString ((char*)&_XmStrings22[1455]) +#endif +#ifndef XmNminimumVerticalCells +#define XmNminimumVerticalCells ((char*)&_XmStrings22[1471]) +#endif +#ifndef XmNminimumHorizontalCells +#define XmNminimumHorizontalCells ((char*)&_XmStrings22[1492]) +#endif +#ifndef XmNminimumCellWidth +#define XmNminimumCellWidth ((char*)&_XmStrings22[1515]) +#endif +#ifndef XmNminimumCellHeight +#define XmNminimumCellHeight ((char*)&_XmStrings22[1532]) +#endif +#ifndef XmNmargin +#define XmNmargin ((char*)&_XmStrings22[1550]) +#endif +#ifndef XmNlist +#define XmNlist ((char*)&_XmStrings22[1557]) +#endif +#ifndef XmNlineWidth +#define XmNlineWidth ((char*)&_XmStrings22[1562]) +#endif +#ifndef XmNlineColor +#define XmNlineColor ((char*)&_XmStrings22[1572]) +#endif +#ifndef XmNlabel +#define XmNlabel ((char*)&_XmStrings22[1582]) +#endif +#ifndef XmNitalicString +#define XmNitalicString ((char*)&_XmStrings22[1588]) +#endif +#ifndef XmNinsertBefore +#define XmNinsertBefore ((char*)&_XmStrings22[1601]) +#endif +#ifndef XmNindentSpace +#define XmNindentSpace ((char*)&_XmStrings22[1614]) +#endif +#ifndef XmNiconTextPadding +#define XmNiconTextPadding ((char*)&_XmStrings22[1626]) +#endif +#ifndef XmNiconPlacement +#define XmNiconPlacement ((char*)&_XmStrings22[1642]) +#endif +#ifndef XmNhorizontalNodeSpace +#define XmNhorizontalNodeSpace ((char*)&_XmStrings22[1656]) +#endif +#ifndef XmNhorizontalMargin +#define XmNhorizontalMargin ((char*)&_XmStrings22[1676]) +#endif +#ifndef XmNgreenSliderLabel +#define XmNgreenSliderLabel ((char*)&_XmStrings22[1693]) +#endif +#ifndef XmNfreeTabPixmap +#define XmNfreeTabPixmap ((char*)&_XmStrings22[1710]) +#endif +#ifndef XmNfirstRow +#define XmNfirstRow ((char*)&_XmStrings22[1724]) +#endif +#ifndef XmNfirstColumnPixmaps +#define XmNfirstColumnPixmaps ((char*)&_XmStrings22[1733]) +#endif +#ifndef XmNfirstColumn +#define XmNfirstColumn ((char*)&_XmStrings22[1752]) +#endif +#ifndef XmNfindLabel +#define XmNfindLabel ((char*)&_XmStrings22[1764]) +#endif +#ifndef XmNfillOption +#define XmNfillOption ((char*)&_XmStrings22[1774]) +#endif +#ifndef XmNfileReadError +#define XmNfileReadError ((char*)&_XmStrings22[1785]) +#endif +#ifndef XmNfamilyString +#define XmNfamilyString ((char*)&_XmStrings22[1799]) +#endif +#ifndef XmNequalSize +#define XmNequalSize ((char*)&_XmStrings22[1812]) +#endif +#ifndef XmNentryLabelString +#define XmNentryLabelString ((char*)&_XmStrings22[1822]) +#endif +#ifndef XmNentryData +#define XmNentryData ((char*)&_XmStrings22[1839]) +#endif +#ifndef XmNencodingString +#define XmNencodingString ((char*)&_XmStrings22[1849]) +#endif +#ifndef XmNencodingList +#define XmNencodingList ((char*)&_XmStrings22[1864]) +#endif +#ifndef XmNdoubleClickCallback +#define XmNdoubleClickCallback ((char*)&_XmStrings22[1877]) +#endif +#ifndef XmNdefaultEncodingString +#define XmNdefaultEncodingString ((char*)&_XmStrings22[1897]) +#endif +#ifndef XmNdFieldPrefWidth +#define XmNdFieldPrefWidth ((char*)&_XmStrings22[1919]) +#endif +#ifndef XmNdFieldPrefHeight +#define XmNdFieldPrefHeight ((char*)&_XmStrings22[1935]) +#endif +#ifndef XmNdFieldMinWidth +#define XmNdFieldMinWidth ((char*)&_XmStrings22[1952]) +#endif +#ifndef XmNdFieldMinHeight +#define XmNdFieldMinHeight ((char*)&_XmStrings22[1967]) +#endif +#ifndef XmNdFieldMaxWidth +#define XmNdFieldMaxWidth ((char*)&_XmStrings22[1983]) +#endif +#ifndef XmNdFieldMaxHeight +#define XmNdFieldMaxHeight ((char*)&_XmStrings22[1998]) +#endif +#ifndef XmNcustomizedCombinationBox +#define XmNcustomizedCombinationBox ((char*)&_XmStrings22[2014]) +#endif +#ifndef XmNcursor +#define XmNcursor ((char*)&_XmStrings22[2039]) +#endif +#ifndef XmNcurrentFont +#define XmNcurrentFont ((char*)&_XmStrings22[2046]) +#endif +#ifndef XmNconnectStyle +#define XmNconnectStyle ((char*)&_XmStrings22[2058]) +#endif +#ifndef XmNcomboTranslations +#define XmNcomboTranslations ((char*)&_XmStrings22[2071]) +#endif +#ifndef XmNcolumnTitles +#define XmNcolumnTitles ((char*)&_XmStrings22[2089]) +#endif +#ifndef XmNcolorName +#define XmNcolorName ((char*)&_XmStrings22[2102]) +#endif +#ifndef XmNcolorMode +#define XmNcolorMode ((char*)&_XmStrings22[2112]) +#endif +#ifndef XmNcolorListTogLabel +#define XmNcolorListTogLabel ((char*)&_XmStrings22[2122]) +#endif +#ifndef XmNcellY +#define XmNcellY ((char*)&_XmStrings22[2140]) +#endif +#ifndef XmNcellX +#define XmNcellX ((char*)&_XmStrings22[2146]) +#endif +#ifndef XmNbothString +#define XmNbothString ((char*)&_XmStrings22[2152]) +#endif +#ifndef XmNboldString +#define XmNboldString ((char*)&_XmStrings22[2163]) +#endif +#ifndef XmNblueSliderLabel +#define XmNblueSliderLabel ((char*)&_XmStrings22[2174]) +#endif +#ifndef XmCDistribution +#define XmCDistribution ((char*)&_XmStrings22[2190]) +#endif +#ifndef XmCFillStyle +#define XmCFillStyle ((char*)&_XmStrings22[2203]) +#endif +#ifndef XmCItemSpacing +#define XmCItemSpacing ((char*)&_XmStrings22[2213]) +#endif +#ifndef XmCLabelSpacing +#define XmCLabelSpacing ((char*)&_XmStrings22[2225]) +#endif +#ifndef XmCShowLabel +#define XmCShowLabel ((char*)&_XmStrings22[2238]) +#endif +#ifndef XmCStretchable +#define XmCStretchable ((char*)&_XmStrings22[2248]) +#endif +#ifndef XmNdefaultEntryLabelAlignment +#define XmNdefaultEntryLabelAlignment ((char*)&_XmStrings22[2260]) +#endif +#ifndef XmNdefaultEntryLabelFontList +#define XmNdefaultEntryLabelFontList ((char*)&_XmStrings22[2287]) +#endif +#ifndef XmNdefaultFillStyle +#define XmNdefaultFillStyle ((char*)&_XmStrings22[2313]) +#endif +#ifndef XmNdistribution +#define XmNdistribution ((char*)&_XmStrings22[2330]) +#endif +#ifndef XmNentryLabelAlignment +#define XmNentryLabelAlignment ((char*)&_XmStrings22[2343]) +#endif +#ifndef XmNentryLabelFontList +#define XmNentryLabelFontList ((char*)&_XmStrings22[2363]) +#endif +#ifndef XmNentryLabelPixmap +#define XmNentryLabelPixmap ((char*)&_XmStrings22[2382]) +#endif +#ifndef XmNentryLabelType +#define XmNentryLabelType ((char*)&_XmStrings22[2399]) +#endif +#ifndef XmNfillStyle +#define XmNfillStyle ((char*)&_XmStrings22[2414]) +#endif +#ifndef XmNitemSpacing +#define XmNitemSpacing ((char*)&_XmStrings22[2424]) +#endif +#ifndef XmNlabelSpacing +#define XmNlabelSpacing ((char*)&_XmStrings22[2436]) +#endif +#ifndef XmNshowEntryLabel +#define XmNshowEntryLabel ((char*)&_XmStrings22[2449]) +#endif +#ifndef XmNstretchable +#define XmNstretchable ((char*)&_XmStrings22[2464]) +#endif +#ifndef XmRDistribution +#define XmRDistribution ((char*)&_XmStrings22[2476]) +#endif +#ifndef XmRFillStyle +#define XmRFillStyle ((char*)&_XmStrings22[2489]) +#endif +#ifndef XmCEqualSize +#define XmCEqualSize ((char*)&_XmStrings22[2499]) +#endif +#ifndef XmCFillOption +#define XmCFillOption ((char*)&_XmStrings22[2509]) +#endif +#ifndef XmCColorMode +#define XmCColorMode ((char*)&_XmStrings22[2520]) +#endif +#ifndef XmCFileReadError +#define XmCFileReadError ((char*)&_XmStrings22[2530]) +#endif +#ifndef XmCNoCellError +#define XmCNoCellError ((char*)&_XmStrings22[2544]) +#endif +#ifndef XmCSliderLabel +#define XmCSliderLabel ((char*)&_XmStrings22[2556]) +#endif +#ifndef XmCTogLabel +#define XmCTogLabel ((char*)&_XmStrings22[2568]) +#endif +#ifndef XmCAutoFill +#define XmCAutoFill ((char*)&_XmStrings22[2577]) +#endif +#ifndef XmCPicture +#define XmCPicture ((char*)&_XmStrings22[2586]) +#endif +#ifndef XmNautoFill +#define XmNautoFill ((char*)&_XmStrings22[2594]) +#endif +#ifndef XmNpicture +#define XmNpicture ((char*)&_XmStrings22[2603]) +#endif +#ifndef XmNpictureErrorCallback +#define XmNpictureErrorCallback ((char*)&_XmStrings22[2611]) +#endif +#ifndef XmNvalidateCallback +#define XmNvalidateCallback ((char*)&_XmStrings22[2632]) +#endif +#ifndef XmCFindLabel +#define XmCFindLabel ((char*)&_XmStrings22[2649]) +#endif +#ifndef XmCShowFind +#define XmCShowFind ((char*)&_XmStrings22[2659]) +#endif +#ifndef XmNentryBackground +#define XmNentryBackground ((char*)&_XmStrings22[2668]) +#endif +#ifndef XmCColumnTitles +#define XmCColumnTitles ((char*)&_XmStrings22[2684]) +#endif +#ifndef XmCEntryData +#define XmCEntryData ((char*)&_XmStrings22[2697]) +#endif +#ifndef XmCFirstColumnPixmaps +#define XmCFirstColumnPixmaps ((char*)&_XmStrings22[2707]) +#endif +#ifndef XmCFirstLocation +#define XmCFirstLocation ((char*)&_XmStrings22[2726]) +#endif +#ifndef XmCNewVisualStyle +#define XmCNewVisualStyle ((char*)&_XmStrings22[2740]) +#endif +#ifndef XmCNumRows +#define XmCNumRows ((char*)&_XmStrings22[2755]) +#endif +#ifndef XmCScrollBar +#define XmCScrollBar ((char*)&_XmStrings22[2763]) +#endif +#ifndef XmCSelectedColumn +#define XmCSelectedColumn ((char*)&_XmStrings22[2773]) +#endif +#ifndef XmNnewVisualStyle +#define XmNnewVisualStyle ((char*)&_XmStrings22[2788]) +#endif +#ifndef XmCPreferredPaneSize +#define XmCPreferredPaneSize ((char*)&_XmStrings22[2803]) +#endif +#ifndef XmCShowSash +#define XmCShowSash ((char*)&_XmStrings22[2821]) +#endif +#ifndef XmC100DPIString +#define XmC100DPIString ((char*)&_XmStrings22[2830]) +#endif +#ifndef XmC75DPIString +#define XmC75DPIString ((char*)&_XmStrings22[2843]) +#endif +#ifndef XmCAnyLowerString +#define XmCAnyLowerString ((char*)&_XmStrings22[2855]) +#endif +#ifndef XmCAnyString +#define XmCAnyString ((char*)&_XmStrings22[2870]) +#endif +#ifndef XmCBoldString +#define XmCBoldString ((char*)&_XmStrings22[2880]) +#endif +#ifndef XmCBothString +#define XmCBothString ((char*)&_XmStrings22[2891]) +#endif +#ifndef XmCDefaultEncodingString +#define XmCDefaultEncodingString ((char*)&_XmStrings22[2902]) +#endif +#ifndef XmCEncodingList +#define XmCEncodingList ((char*)&_XmStrings22[2924]) +#endif +#ifndef XmCEncodingString +#define XmCEncodingString ((char*)&_XmStrings22[2937]) +#endif +#ifndef XmCFamilyString +#define XmCFamilyString ((char*)&_XmStrings22[2952]) +#endif +#ifndef XmCItalicString +#define XmCItalicString ((char*)&_XmStrings22[2965]) +#endif +#ifndef XmCMonoSpaceString +#define XmCMonoSpaceString ((char*)&_XmStrings22[2978]) +#endif +#ifndef XmCOptionString +#define XmCOptionString ((char*)&_XmStrings22[2994]) +#endif +#ifndef XmCOtherString +#define XmCOtherString ((char*)&_XmStrings22[3007]) +#endif +#ifndef XmCPropSpaceString +#define XmCPropSpaceString ((char*)&_XmStrings22[3019]) +#endif +#ifndef XmCSampleText +#define XmCSampleText ((char*)&_XmStrings22[3035]) +#endif +#ifndef XmCScalingString +#define XmCScalingString ((char*)&_XmStrings22[3046]) +#endif +#ifndef XmCShowNameString +#define XmCShowNameString ((char*)&_XmStrings22[3060]) +#endif +#ifndef XmCSizeString +#define XmCSizeString ((char*)&_XmStrings22[3075]) +#endif +#ifndef XmCTextRows +#define XmCTextRows ((char*)&_XmStrings22[3086]) +#endif +#ifndef XmCXlfdSpaceString +#define XmCXlfdSpaceString ((char*)&_XmStrings22[3095]) +#endif +#ifndef XmN100DPIstring +#define XmN100DPIstring ((char*)&_XmStrings22[3111]) +#endif +#ifndef XmN75DPIstring +#define XmN75DPIstring ((char*)&_XmStrings22[3124]) +#endif +#ifndef XmNanyLowerString +#define XmNanyLowerString ((char*)&_XmStrings22[3136]) +#endif +#ifndef XmNanyString +#define XmNanyString ((char*)&_XmStrings22[3151]) +#endif +#ifndef XmCCellX +#define XmCCellX ((char*)&_XmStrings22[3161]) +#endif +#ifndef XmCCellY +#define XmCCellY ((char*)&_XmStrings22[3167]) +#endif +#ifndef XmCDefaultCells +#define XmCDefaultCells ((char*)&_XmStrings22[3173]) +#endif +#ifndef XmCMinimumCellSize +#define XmCMinimumCellSize ((char*)&_XmStrings22[3186]) +#endif +#ifndef XmCIconPlacement +#define XmCIconPlacement ((char*)&_XmStrings22[3202]) +#endif +#ifndef XmNpixmapDepth +#define XmNpixmapDepth ((char*)&_XmStrings22[3216]) +#endif +#ifndef XmCAutoClose +#define XmCAutoClose ((char*)&_XmStrings22[3228]) +#endif +#ifndef XmCInsertBefore +#define XmCInsertBefore ((char*)&_XmStrings22[3238]) +#endif +#ifndef XmCNodeState +#define XmCNodeState ((char*)&_XmStrings22[3251]) +#endif +#ifndef XmCNodeStateCallback +#define XmCNodeStateCallback ((char*)&_XmStrings22[3261]) +#endif +#ifndef XmCNodeStateChangedCallback +#define XmCNodeStateChangedCallback ((char*)&_XmStrings22[3279]) +#endif +#ifndef XmCParentNode +#define XmCParentNode ((char*)&_XmStrings22[3304]) +#endif +#ifndef XmNautoClose +#define XmNautoClose ((char*)&_XmStrings22[3315]) +#endif +#ifndef XmNcloseFolderPixmap +#define XmNcloseFolderPixmap ((char*)&_XmStrings22[3325]) +#endif +#ifndef XmNnodeCloseFolderPixmap +#define XmNnodeCloseFolderPixmap ((char*)&_XmStrings22[3343]) +#endif +#ifndef XmNnodeOpenFolderPixmap +#define XmNnodeOpenFolderPixmap ((char*)&_XmStrings22[3365]) +#endif +#ifndef XmNnodeStateBeginEndCallback +#define XmNnodeStateBeginEndCallback ((char*)&_XmStrings22[3386]) +#endif +#ifndef XmCConstrainWidth +#define XmCConstrainWidth ((char*)&_XmStrings22[3412]) +#endif +#ifndef XmCIndentSpace +#define XmCIndentSpace ((char*)&_XmStrings22[3427]) +#endif +#ifndef XmNconnectNodes +#define XmNconnectNodes ((char*)&_XmStrings22[3439]) +#endif +#ifndef XmNconstrainWidth +#define XmNconstrainWidth ((char*)&_XmStrings22[3452]) +#endif +#ifndef XmCNumStacks +#define XmCNumStacks ((char*)&_XmStrings22[3467]) +#endif +#ifndef XmCSelectedIndex +#define XmCSelectedIndex ((char*)&_XmStrings22[3477]) +#endif +#ifndef XmCStackedEffect +#define XmCStackedEffect ((char*)&_XmStrings22[3491]) +#endif +#ifndef XmCTabAutoSelect +#define XmCTabAutoSelect ((char*)&_XmStrings22[3505]) +#endif +#ifndef XmCTabCornerPercent +#define XmCTabCornerPercent ((char*)&_XmStrings22[3519]) +#endif +#ifndef XmCTabEdge +#define XmCTabEdge ((char*)&_XmStrings22[3536]) +#endif +#ifndef XmCTabLabelSpacing +#define XmCTabLabelSpacing ((char*)&_XmStrings22[3544]) +#endif +#ifndef XmCTabMode +#define XmCTabMode ((char*)&_XmStrings22[3560]) +#endif +#ifndef XmCTabOffset +#define XmCTabOffset ((char*)&_XmStrings22[3568]) +#endif +#ifndef XmCTabOrientation +#define XmCTabOrientation ((char*)&_XmStrings22[3578]) +#endif +#ifndef XmCTabSelectColor +#define XmCTabSelectColor ((char*)&_XmStrings22[3593]) +#endif +#ifndef XmCTabSelectPixmap +#define XmCTabSelectPixmap ((char*)&_XmStrings22[3608]) +#endif +#ifndef XmCTabStyle +#define XmCTabStyle ((char*)&_XmStrings22[3624]) +#endif +#ifndef XmCTraversalIndex +#define XmCTraversalIndex ((char*)&_XmStrings22[3633]) +#endif +#ifndef XmCUniformTabSize +#define XmCUniformTabSize ((char*)&_XmStrings22[3648]) +#endif +#ifndef XmCUseImageCache +#define XmCUseImageCache ((char*)&_XmStrings22[3663]) +#endif +#ifndef XmCFreeTabPixmap +#define XmCFreeTabPixmap ((char*)&_XmStrings22[3677]) +#endif +#ifndef XmCICSEnhancementPakResourceError +#define XmCICSEnhancementPakResourceError ((char*)&_XmStrings22[3691]) +#endif +#ifndef XmCTabLabelPixmap +#define XmCTabLabelPixmap ((char*)&_XmStrings22[3722]) +#endif +#ifndef XmCTabLabelString +#define XmCTabLabelString ((char*)&_XmStrings22[3737]) +#endif +#ifndef XmCTabPixmapPlacement +#define XmCTabPixmapPlacement ((char*)&_XmStrings22[3752]) +#endif +#ifndef XmCTabSide +#define XmCTabSide ((char*)&_XmStrings22[3771]) +#endif +#ifndef XmNillegalResourceValue +#define XmNillegalResourceValue ((char*)&_XmStrings22[3779]) +#endif +#ifndef XmCCompressStyle +#define XmCCompressStyle ((char*)&_XmStrings22[3800]) +#endif +#ifndef XmCConnectStyle +#define XmCConnectStyle ((char*)&_XmStrings22[3814]) +#endif +#ifndef XmCHorizontalDelta +#define XmCHorizontalDelta ((char*)&_XmStrings22[3827]) +#endif +#ifndef XmCLineWidth +#define XmCLineWidth ((char*)&_XmStrings22[3843]) +#endif +#ifndef XmCOpenClosePadding +#define XmCOpenClosePadding ((char*)&_XmStrings22[3853]) +#endif +#ifndef XmCVerticalDelta +#define XmCVerticalDelta ((char*)&_XmStrings22[3870]) +#endif +#ifndef XmNcompressStyle +#define XmNcompressStyle ((char*)&_XmStrings22[3884]) +#endif +#ifndef XmNhorizontalDelta +#define XmNhorizontalDelta ((char*)&_XmStrings22[3898]) +#endif +#ifndef XmNlineBackgroundColor +#define XmNlineBackgroundColor ((char*)&_XmStrings22[3914]) +#endif +#ifndef XmNlineStyle +#define XmNlineStyle ((char*)&_XmStrings22[3934]) +#endif +#ifndef XmNverticalDelta +#define XmNverticalDelta ((char*)&_XmStrings22[3944]) +#endif +#ifndef XmRXmCompressStyle +#define XmRXmCompressStyle ((char*)&_XmStrings22[3958]) +#endif +#ifndef XmRXmLineStyle +#define XmRXmLineStyle ((char*)&_XmStrings22[3974]) +#endif +#ifndef XmCPopupOffset +#define XmCPopupOffset ((char*)&_XmStrings22[3986]) +#endif +#ifndef XmCUseTextField +#define XmCUseTextField ((char*)&_XmStrings22[3998]) +#endif +#ifndef XmCVerify +#define XmCVerify ((char*)&_XmStrings22[4011]) +#endif +#endif /* XMSTRINGDEFINES */ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#endif /* _XmStrDefs22_h_ */ diff --git a/libXm/osx/Xm/XmStrDefs23.h b/libXm/osx/Xm/XmStrDefs23.h new file mode 100644 index 0000000..4585e9a --- /dev/null +++ b/libXm/osx/Xm/XmStrDefs23.h @@ -0,0 +1,105 @@ +/* $TOG: XmStrDefs23.ht /main/2 1997/06/18 17:50:15 samborn $ */ +#ifndef _XmStrDefs23_h_ +#define _XmStrDefs23_h_ + +#include + +#ifndef _XmConst +#define _XmConst /**/ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* $TOG: makestrs.c /main/11 1998/02/06 11:24:15 kaleb $ */ +/* This file is automatically generated. */ +/* Default ABI version -- Do not edit */ +/* TOG: xmstring.list /main/5 1997/06/20 08:37:02 samborn */ + +#ifdef XMSTRINGDEFINES +#define XmNdefaultEntryLabelRenderTable "defaultEntryLabelRenderTable" +#define XmNentryLabelRenderTable "entryLabelRenderTable" +#define XmNpixmapPlacement "pixmapPlacement" +#define XmCPixmapPlacement "PixmapPlacement" +#define XmRPixmapPlacement "PixmapPlacement" +#define XmNpixmapTextPadding "pixmapTextPadding" +#define XmNfontStyle "fontStyle" +#define XmCFontStyle "FontStyle" +#define XmNfontSize "fontSize" +#define XmCFontSize "FontSize" +#define XmNfontFoundry "fontFoundry" +#define XmCFontFoundry "FontFoundry" +#define XmNfontEncoding "fontEncoding" +#define XmCFontEncoding "FontEncoding" +#define XmNxftFont "xftFont" +#define XmCXftFont "XftFont" +#define XmSUTF8_STRING "UTF8_STRING" +#else +externalref _XmConst char _XmStrings23[]; +#ifndef XmNdefaultEntryLabelRenderTable +#define XmNdefaultEntryLabelRenderTable ((char*)&_XmStrings23[0]) +#endif +#ifndef XmNentryLabelRenderTable +#define XmNentryLabelRenderTable ((char*)&_XmStrings23[29]) +#endif +#ifndef XmNpixmapPlacement +#define XmNpixmapPlacement ((char*)&_XmStrings23[51]) +#endif +#ifndef XmCPixmapPlacement +#define XmCPixmapPlacement ((char*)&_XmStrings23[67]) +#endif +#ifndef XmRPixmapPlacement +#define XmRPixmapPlacement ((char*)&_XmStrings23[83]) +#endif +#ifndef XmNpixmapTextPadding +#define XmNpixmapTextPadding ((char*)&_XmStrings23[99]) +#endif +#ifndef XmNfontStyle +#define XmNfontStyle ((char*)&_XmStrings23[117]) +#endif +#ifndef XmCFontStyle +#define XmCFontStyle ((char*)&_XmStrings23[127]) +#endif +#ifndef XmNfontSize +#define XmNfontSize ((char*)&_XmStrings23[137]) +#endif +#ifndef XmCFontSize +#define XmCFontSize ((char*)&_XmStrings23[146]) +#endif +#ifndef XmNfontFoundry +#define XmNfontFoundry ((char*)&_XmStrings23[155]) +#endif +#ifndef XmCFontFoundry +#define XmCFontFoundry ((char*)&_XmStrings23[167]) +#endif +#ifndef XmNfontEncoding +#define XmNfontEncoding ((char*)&_XmStrings23[179]) +#endif +#ifndef XmCFontEncoding +#define XmCFontEncoding ((char*)&_XmStrings23[192]) +#endif +#ifndef XmNxftFont +#define XmNxftFont ((char*)&_XmStrings23[205]) +#endif +#ifndef XmCXftFont +#define XmCXftFont ((char*)&_XmStrings23[213]) +#endif +#ifndef XmSUTF8_STRING +#define XmSUTF8_STRING ((char*)&_XmStrings23[221]) +#endif +#endif /* XMSTRINGDEFINES */ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#endif /* _XmStrDefs23_h_ */ diff --git a/libXm/osx/Xm/XmStrDefsI.h b/libXm/osx/Xm/XmStrDefsI.h new file mode 100644 index 0000000..1aeb32a --- /dev/null +++ b/libXm/osx/Xm/XmStrDefsI.h @@ -0,0 +1,201 @@ +/* $TOG: XmStrDefsI.ht /main/1 1997/06/18 17:50:36 samborn $ */ +#ifndef _XmStrDefsI_h_ +#define _XmStrDefsI_h_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* $TOG: makestrs.c /main/11 1998/02/06 11:24:15 kaleb $ */ +/* This file is automatically generated. */ +/* Default ABI version -- Do not edit */ +/* TOG: xmstring.list /main/5 1997/06/20 08:37:02 samborn */ + +#ifdef XMSTRINGDEFINES +#define XmIATOM_PAIR "ATOM_PAIR" +#define XmIAVERAGE_WIDTH "AVERAGE_WIDTH" +#define XmIBACKGROUND "BACKGROUND" +#define XmICHARACTER_POSITION "CHARACTER_POSITION" +#define XmICLASS "CLASS" +#define XmICOLUMN_NUMBER "COLUMN_NUMBER" +#define XmIDONE "DONE" +#define XmIFOREGROUND "FOREGROUND" +#define XmIHOST_NAME "HOST_NAME" +#define XmILINE_NUMBER "LINE_NUMBER" +#define XmILIST_LENGTH "LIST_LENGTH" +#define XmIMODULE "MODULE" +#define XmINAME "NAME" +#define XmINone "None" +#define XmIODIF "ODIF" +#define XmIOWNER_OS "OWNER_OS" +#define XmIPDM_EXIT_CANCEL "PDM_EXIT_CANCEL" +#define XmIPDM_EXIT_ERROR "PDM_EXIT_ERROR" +#define XmIPDM_EXIT_OK "PDM_EXIT_OK" +#define XmIPDM_REPLY "PDM_REPLY" +#define XmIPDM_START "PDM_START" +#define XmIPDM_START_ERROR "PDM_START_ERROR" +#define XmIPDM_START_OK "PDM_START_OK" +#define XmIPDM_START_PXAUTH "PDM_START_PXAUTH" +#define XmIPDM_START_VXAUTH "PDM_START_VXAUTH" +#define XmIPIXEL "PIXEL" +#define XmIPIXEL_SIZE "PIXEL_SIZE" +#define XmIPROCEDURE "PROCEDURE" +#define XmIPROCESS "PROCESS" +#define XmIRESOLUTION_Y "RESOLUTION_Y" +#define XmISPAN "SPAN" +#define XmITASK "TASK" +#define XmIUSER "USER" +#define XmIWM_DELETE_WINDOW "WM_DELETE_WINDOW" +#define XmI_MOTIF_CURRENT_TIME "_MOTIF_CURRENT_TIME" +#define XmI_MOTIF_DRAG_ATOMS "_MOTIF_DRAG_ATOMS" +#define XmI_MOTIF_DRAG_INITIATOR_INFO "_MOTIF_DRAG_INITIATOR_INFO" +#define XmI_MOTIF_DRAG_PROXY_WINDOW "_MOTIF_DRAG_PROXY_WINDOW" +#define XmI_MOTIF_DRAG_RECEIVER_INFO "_MOTIF_DRAG_RECEIVER_INFO" +#define XmI_MOTIF_DRAG_TARGETS "_MOTIF_DRAG_TARGETS" +#define XmI_MOTIF_DRAG_WINDOW "_MOTIF_DRAG_WINDOW" +#define XmI_MOTIF_INITIATOR "_MOTIF_INITIATOR" +#define XmI_MOTIF_RECEIVER "_MOTIF_RECEIVER" +#define XmI_MOTIF_SELECTION_TEXT "_MOTIF_SELECTION_TEXT" +#else +externalref _XmConst char _XmStringsI[]; +#ifndef XmIATOM_PAIR +#define XmIATOM_PAIR ((char*)&_XmStringsI[0]) +#endif +#ifndef XmIAVERAGE_WIDTH +#define XmIAVERAGE_WIDTH ((char*)&_XmStringsI[10]) +#endif +#ifndef XmIBACKGROUND +#define XmIBACKGROUND ((char*)&_XmStringsI[24]) +#endif +#ifndef XmICHARACTER_POSITION +#define XmICHARACTER_POSITION ((char*)&_XmStringsI[35]) +#endif +#ifndef XmICLASS +#define XmICLASS ((char*)&_XmStringsI[54]) +#endif +#ifndef XmICOLUMN_NUMBER +#define XmICOLUMN_NUMBER ((char*)&_XmStringsI[60]) +#endif +#ifndef XmIDONE +#define XmIDONE ((char*)&_XmStringsI[74]) +#endif +#ifndef XmIFOREGROUND +#define XmIFOREGROUND ((char*)&_XmStringsI[79]) +#endif +#ifndef XmIHOST_NAME +#define XmIHOST_NAME ((char*)&_XmStringsI[90]) +#endif +#ifndef XmILINE_NUMBER +#define XmILINE_NUMBER ((char*)&_XmStringsI[100]) +#endif +#ifndef XmILIST_LENGTH +#define XmILIST_LENGTH ((char*)&_XmStringsI[112]) +#endif +#ifndef XmIMODULE +#define XmIMODULE ((char*)&_XmStringsI[124]) +#endif +#ifndef XmINAME +#define XmINAME ((char*)&_XmStringsI[131]) +#endif +#ifndef XmINone +#define XmINone ((char*)&_XmStringsI[136]) +#endif +#ifndef XmIODIF +#define XmIODIF ((char*)&_XmStringsI[141]) +#endif +#ifndef XmIOWNER_OS +#define XmIOWNER_OS ((char*)&_XmStringsI[146]) +#endif +#ifndef XmIPDM_EXIT_CANCEL +#define XmIPDM_EXIT_CANCEL ((char*)&_XmStringsI[155]) +#endif +#ifndef XmIPDM_EXIT_ERROR +#define XmIPDM_EXIT_ERROR ((char*)&_XmStringsI[171]) +#endif +#ifndef XmIPDM_EXIT_OK +#define XmIPDM_EXIT_OK ((char*)&_XmStringsI[186]) +#endif +#ifndef XmIPDM_REPLY +#define XmIPDM_REPLY ((char*)&_XmStringsI[198]) +#endif +#ifndef XmIPDM_START +#define XmIPDM_START ((char*)&_XmStringsI[208]) +#endif +#ifndef XmIPDM_START_ERROR +#define XmIPDM_START_ERROR ((char*)&_XmStringsI[218]) +#endif +#ifndef XmIPDM_START_OK +#define XmIPDM_START_OK ((char*)&_XmStringsI[234]) +#endif +#ifndef XmIPDM_START_PXAUTH +#define XmIPDM_START_PXAUTH ((char*)&_XmStringsI[247]) +#endif +#ifndef XmIPDM_START_VXAUTH +#define XmIPDM_START_VXAUTH ((char*)&_XmStringsI[264]) +#endif +#ifndef XmIPIXEL +#define XmIPIXEL ((char*)&_XmStringsI[281]) +#endif +#ifndef XmIPIXEL_SIZE +#define XmIPIXEL_SIZE ((char*)&_XmStringsI[287]) +#endif +#ifndef XmIPROCEDURE +#define XmIPROCEDURE ((char*)&_XmStringsI[298]) +#endif +#ifndef XmIPROCESS +#define XmIPROCESS ((char*)&_XmStringsI[308]) +#endif +#ifndef XmIRESOLUTION_Y +#define XmIRESOLUTION_Y ((char*)&_XmStringsI[316]) +#endif +#ifndef XmISPAN +#define XmISPAN ((char*)&_XmStringsI[329]) +#endif +#ifndef XmITASK +#define XmITASK ((char*)&_XmStringsI[334]) +#endif +#ifndef XmIUSER +#define XmIUSER ((char*)&_XmStringsI[339]) +#endif +#ifndef XmIWM_DELETE_WINDOW +#define XmIWM_DELETE_WINDOW ((char*)&_XmStringsI[344]) +#endif +#ifndef XmI_MOTIF_CURRENT_TIME +#define XmI_MOTIF_CURRENT_TIME ((char*)&_XmStringsI[361]) +#endif +#ifndef XmI_MOTIF_DRAG_ATOMS +#define XmI_MOTIF_DRAG_ATOMS ((char*)&_XmStringsI[381]) +#endif +#ifndef XmI_MOTIF_DRAG_INITIATOR_INFO +#define XmI_MOTIF_DRAG_INITIATOR_INFO ((char*)&_XmStringsI[399]) +#endif +#ifndef XmI_MOTIF_DRAG_PROXY_WINDOW +#define XmI_MOTIF_DRAG_PROXY_WINDOW ((char*)&_XmStringsI[426]) +#endif +#ifndef XmI_MOTIF_DRAG_RECEIVER_INFO +#define XmI_MOTIF_DRAG_RECEIVER_INFO ((char*)&_XmStringsI[451]) +#endif +#ifndef XmI_MOTIF_DRAG_TARGETS +#define XmI_MOTIF_DRAG_TARGETS ((char*)&_XmStringsI[477]) +#endif +#ifndef XmI_MOTIF_DRAG_WINDOW +#define XmI_MOTIF_DRAG_WINDOW ((char*)&_XmStringsI[497]) +#endif +#ifndef XmI_MOTIF_INITIATOR +#define XmI_MOTIF_INITIATOR ((char*)&_XmStringsI[516]) +#endif +#ifndef XmI_MOTIF_RECEIVER +#define XmI_MOTIF_RECEIVER ((char*)&_XmStringsI[533]) +#endif +#ifndef XmI_MOTIF_SELECTION_TEXT +#define XmI_MOTIF_SELECTION_TEXT ((char*)&_XmStringsI[549]) +#endif +#endif /* XMSTRINGDEFINES */ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration */ +#endif + +#endif /* _XmStrDefs_h_ */ diff --git a/libXm/osx/Xm/XmStringI.h b/libXm/osx/Xm/XmStringI.h new file mode 100644 index 0000000..ab5d6ad --- /dev/null +++ b/libXm/osx/Xm/XmStringI.h @@ -0,0 +1,1214 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: XmStringI.h /main/7 1999/09/01 17:15:15 mgreess $ */ + +#ifndef _XmStringI_h +#define _XmStringI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These are the fontlist structures + */ + +typedef struct _XmFontListContextRec +{ + Boolean error; /* something bad */ + unsigned short index; /* next rendition */ + XmRenderTable table; /* associated table */ +} XmFontListContextRec; + +/* useful macros */ +#define two_byte_font(f) (( (f)->min_byte1 != 0 || (f)->max_byte1 != 0)) + +#define FontListType(r) ((_XmRendition)(*(r)))->fontType +#define FontListFont(r) ((_XmRendition)(*(r)))->font +#define FontListTag(r) ((_XmRendition)(*(r)))->tag + +/* Convenience macros */ +#define _XmStringCvtNonOpt(str) (_XmStrOptimized(str) ? \ + _XmStringOptToNonOpt(str) : (str)) + +/* + * Macros for string internal context block data structure access + */ + +#define _XmStrContString(cont) \ + ((_XmStringContextRec *)(cont))->string +#define _XmStrContCurrLine(cont) \ + ((_XmStringContextRec *)(cont))->current_line +#define _XmStrContCurrSeg(cont) \ + ((_XmStringContextRec *)(cont))->current_seg +#define _XmStrContOpt(cont) \ + ((_XmStringContextRec *)(cont))->optimized +#define _XmStrContError(cont) ((_XmStringContextRec *)(cont))->error +#define _XmStrContTabCount(cont) ((_XmStringContextRec *)(cont))->tab_count +#define _XmStrContDir(cont) ((_XmStringContextRec *)(cont))->dir +#define _XmStrContTag(cont) ((_XmStringContextRec *)(cont))->tag +#define _XmStrContTagType(cont) ((_XmStringContextRec *)(cont))->tag_type +#define _XmStrContState(cont) ((_XmStringContextRec *)(cont))->state +#define _XmStrContRendTags(cont) ((_XmStringContextRec *)(cont))->rend_tags +#define _XmStrContRendCount(cont) ((_XmStringContextRec *)(cont))->rend_count +#define _XmStrContRendIndex(cont) ((_XmStringContextRec *)(cont))->rend_index +#define _XmStrContTmpStrDir(cont) ((_XmStringContextRec *)(cont))->tmp_str_dir +#define _XmStrContTmpDir(cont) ((_XmStringContextRec *)(cont))->tmp_dir + +/* + * internal context data block, for read-out + */ +enum +{ + PUSH_STATE, BEGIN_REND_STATE, TAG_STATE, TAB_STATE, DIR_STATE, + TEXT_STATE, END_REND_STATE, POP_STATE, SEP_STATE +}; + +typedef struct __XmStringContextRec +{ + _XmString string; /* pointer to internal string */ + short current_line; /* index of current line */ + unsigned short current_seg; /* index of current segment */ + Boolean optimized; /* is string optimized */ + Boolean error; /* something wrong */ + short tab_count; /* tabs processed */ + XmStringDirection dir; /* last direction */ + XmStringTag tag; /* last tag seen */ + XmTextType tag_type; /* type of last tag seen */ + char state; /* current state of output */ + XmStringTag *rend_tags; /* active renditions. */ + short rend_count; /* number of rend_tags. */ + short rend_index; /* renditions processed */ + XmDirection tmp_dir; /* temporary storage */ + XmStringDirection tmp_str_dir; /* temporary storage */ +} _XmStringContextRec; + +/* + * Internal representation of an XmParseMapping. + */ +typedef struct __XmParseMappingRec { + XtPointer pattern; + XmTextType pattern_type; + XmString substitute; + XmParseProc parse_proc; + XtPointer client_data; + XmIncludeStatus include_status; + unsigned char internal_flags; /* reserved for unparse data */ +} _XmParseMappingRec, *_XmParseMapping; + +/**************************************************************** + * Symbolic values + ****************************************************************/ + +#define XmSTRING_OPTIMIZED 0x0 +#define XmSTRING_OTHER 0x1 +#define XmSTRING_MULTIPLE_ENTRY 0x2 + +#define TAG_INDEX_BITS 3 +#define REND_INDEX_BITS 4 +#define BYTE_COUNT_BITS 8 +#define TEXT_BYTES_IN_STRUCT 1 + +#define TAG_INDEX_UNSET ((1 << TAG_INDEX_BITS) - 1) +#define TAG_INDEX_MAX TAG_INDEX_UNSET +#define REND_INDEX_UNSET ((1 << REND_INDEX_BITS) - 1) +#define REND_INDEX_MAX REND_INDEX_UNSET + +/**************************************************************** + + XmStringOpt is an optimized string containing text of less than + 256 bytes with an associated string direction and up to three + implicit tabs. + + The text is stored immediately after the header within the string. + + ****************************************************************/ + +typedef struct __XmStringOptHeader { + unsigned int type : 2; /* XmSTRING_OPTIMIZED */ + unsigned int text_type : 2; /* MB, WC, locale or charset text.*/ + unsigned int tag_index : TAG_INDEX_BITS; /* index into charset cache */ + unsigned int rend_begin : 1; /* flag for RENDITION_BEGIN */ + unsigned char byte_count; /* size of text in this seg.*/ + unsigned int rend_end : 1; /* flag for RENDITION_END */ + unsigned int rend_index : REND_INDEX_BITS; /* index in tag cache */ + unsigned int str_dir : 2; /* string direction set by app */ + unsigned int flipped : 1; /* whether the text has been flipped */ + unsigned int tabs : 2; /* number of tabs preceding the text */ + unsigned int refcount : 6; /* reference count */ +} _XmStringOptHeader; + +typedef struct __XmStringOpt { + _XmStringOptHeader header; + char text[TEXT_BYTES_IN_STRUCT]; +} _XmStringOptRec, *_XmStringOpt; + +/**************************************************************** + + XmStringMulti specifies a string consisting of multiple entries. + Each entry is a segment, either an optimized single segment, an + unoptimized segment, or an array of segments. + + If implicit_line is 1, each entry is treated as a single line for + display and other purposes. + + If implicit_line is 0, the string is a sequence of entries, treated as + being on one line. + + ****************************************************************/ + +/* Forward definitions */ +typedef union __XmStringEntryRec *_XmStringEntry; +typedef union __XmStringNREntryRec *_XmStringNREntry; + +typedef struct __XmStringMultiHeader { + unsigned int type : 2; /* XmSTRING_MULTIPLE_ENTRY */ + unsigned int implicit_line : 1; /* 1 => linefeed at end */ + unsigned int entry_count : 21; + unsigned char refcount; +} _XmStringMultiHeader; + +typedef struct __XmStringMulti{ + _XmStringMultiHeader header; + _XmStringEntry * entry; /* pointer to array of pointers to entries */ +} _XmStringMultiRec, *_XmStringMulti; + +typedef struct __XmStringEmptyHeader { + unsigned int type : 2; +} _XmStringEmptyHeader; + +typedef union __XmStringRec { + _XmStringEmptyHeader empty; + _XmStringOptHeader opt_str; /* XmSTRING_OPTIMIZED */ + XtPointer component; /* unused */ + _XmStringMultiHeader multi_str; /* XmSTRING_MULTIPLE_ENTRY */ +} _XmStringRec; + + + +/**************************************************************** + + Cache data structures + + ****************************************************************/ +#define _XmSCANNING_CACHE 0 +#define _XmRENDERING_CACHE 1 +/* #define _XmHIGHLIGHT_CACHE 2 */ +/* #define _XmCSTEXT_CACHE 3 */ + +/* + * Header + */ +typedef struct __XmStringCacheRec { + struct __XmStringCacheRec * next; + unsigned char cache_type;/* only 255 cache types supported */ + Boolean dirty; /* 1 => recompute this cache */ +} _XmStringCacheHeader, *_XmStringCache; + +/* + * Scanning cache + */ +typedef struct __XmStringScanning { + _XmStringCacheHeader header; /* cache_type == _XmSCANNING_CACHE */ + /* Matching fields */ + XmDirection prim_dir; /* primary layout direction */ + + /* Cached data */ + _XmStringEntry left; /* leftward segment in string */ + _XmStringEntry right; /* rightward segment in string */ + XmDirection layout_direction; /* current segment layout direction */ + unsigned short depth; /* depth of layout push */ +} _XmStringScanningRec, *_XmStringScanningCache; + +/* + * Rendering cache + */ +typedef struct __XmStringRendering { + _XmStringCacheHeader header; /* cache_type == _XmRENDERING_CACHE */ + /* Matching fields */ + XmRenderTable rt; + + /* Cached data */ + int x; /* x pos of segment */ + int y; /* y pos of segment */ + int width; /* width of segment */ + int height; /* height of segment */ + int ascent; /* ascent of segment */ + int descent; /* descent of segment */ + int baseline; /* baseline of segment */ + XmRendition rendition; /* Rendition used for this segment */ + char prev_tabs; /* accumulates tabs on line */ +} _XmStringRenderingRec, *_XmStringRenderingCache; + + +/**************************************************************** + + Optimized segment definition. + + ****************************************************************/ + +typedef struct __XmStringOptSegHdrRec { + unsigned int type : 2; /* XmSTRING_ENTRY_OPTIMIZED */ + unsigned int text_type : 2; /* MB, WC, locale or charset */ + unsigned int tag_index : TAG_INDEX_BITS; /* index into charset cache */ + unsigned int rend_begin : 1; /* flag for RENDITION_BEGIN */ + unsigned char byte_count; + unsigned int rend_end : 1; /* flag for RENDITION_END */ + unsigned int rend_index : REND_INDEX_BITS; /* index in rendition tag cache */ + unsigned int str_dir : 2; /* Direction of text in segment */ + unsigned int flipped : 1; /* 1 => data is character-flipped */ + unsigned int tabs_before : 3; /* number of preceding tabs */ + unsigned int permanent : 1; /* 0 => Pointer data can be freed */ + unsigned int soft_line_break : 1; /* linebreak before is soft */ + unsigned int immediate : 1; /* 0 => data is immediate */ + unsigned int pad : 2; +} _XmStringOptSegHdrRec; + +typedef struct __XmStringOptSegRec { + _XmStringOptSegHdrRec header; + union { + wchar_t wchars[1]; + unsigned char chars[1]; + XtPointer text; + } data; +} _XmStringOptSegRec, *_XmStringOptSeg; + +/**************************************************************** + + Array 'segment' definition. + + ****************************************************************/ + +typedef struct __XmStringArraySegHdrRec { + unsigned int type : 2; /* XmSTRING_ENTRY_ARRAY */ + unsigned int soft_line_break : 1; /* linebreak before is soft */ + unsigned int pad : 5; + unsigned int segment_count : 8; /* 256 segments per line */ + unsigned char pad2byte[2]; +} _XmStringArraySegHdrRec; + +typedef struct __XmStringArraySegRec { + _XmStringArraySegHdrRec header; + _XmStringNREntry * seg; /* array of pointers to segments */ +} _XmStringArraySegRec, *_XmStringArraySeg; + + +/**************************************************************** + + Unoptimized segment definition. + + ****************************************************************/ + +typedef struct __XmStringUnoptSegHdrRec { + unsigned int type : 2; /* XmSTRING_ENTRY_UNOPTIMIZED */ + unsigned int soft_line_break : 1; /* linebreak before is soft */ + unsigned int permanent : 1; /* 0 => Pointer data can be freed */ + unsigned int pop_after : 1; /* whether a pop follows the text */ + unsigned int str_dir : 2; /* Direction of text in segment */ + unsigned int flipped : 1; /* 1 => data is character-flipped */ + XmDirection push_before; /* if NULL => no push */ + unsigned char tabs_before; /* Number of tabs preceding segment */ + XmTextType text_type; /* determines type of text and tag */ +} _XmStringUnoptSegHdrRec; + +typedef struct __XmStringUnoptSegRec { + _XmStringUnoptSegHdrRec header; + union { + wchar_t * wchars; + unsigned char * chars; + XtPointer text; /* pointer to text. */ + } data; /* To conform to opt. segment */ + unsigned char begin_count; /* count of rendition tag begins */ + unsigned char end_count; /* count of rendition tag ends */ + XmStringTag * rend_begin_tags; /* list of rendition tag begins */ + XmStringTag * rend_end_tags; /* list of rendition tag ends */ + XmStringTag tag; /* locale or charset tag */ + unsigned int byte_count; /* byte count for this segment */ + unsigned int char_count; /* character count */ + _XmStringCache cache; +} _XmStringUnoptSegRec, *_XmStringUnoptSeg; + +/**************************************************************** + + XmStringEntry specifies the different 'segments' that can be part + of a multiple-entry XmString. + + These entries can be an optimized segment, an segment with cache, + also optimized, an unoptimized segment or an array of segments. + + The array entry type can contain any of the three other entry types, + but not an array entry. This is because we do not want to handle + recursive XmStrings. + + ****************************************************************/ + +#define XmSTRING_ENTRY_OPTIMIZED 0x0 +#define XmSTRING_ENTRY_UNOPTIMIZED 0x1 +/* #define XmSTRING_ENTRY_OPTIMIZED_CACHE 0x2 */ +#define XmSTRING_ENTRY_ARRAY 0x3 + +typedef union __XmStringEntryRec { + _XmStringEmptyHeader empty; + _XmStringOptSegHdrRec single; /* XmSTRING_ENTRY_OPTIMIZED */ + _XmStringUnoptSegHdrRec unopt_single; /* XmSTRING_ENTRY_UNOPTIMIZED */ + _XmStringArraySegHdrRec multiple; /* XmSTRING_ENTRY_ARRAY */ +} _XmStringEntryRec; + +/*************************************************************** + + _XmStringNREntry: + Used in the XmStringArraySeg, to prevent recursive + definitions of XmStrings. + + ****************************************************************/ + +typedef union __XmStringNREntryRec { + _XmStringEmptyHeader empty; + _XmStringOptSegHdrRec single; /* XmSTRING_ENTRY_OPTIMIZED */ + _XmStringUnoptSegHdrRec unopt_single; /* XmSTRING_ENTRY_UNOPTIMIZED */ +} _XmStringNREntryRec; + +/**************************************************************** + * + * Typedefs for old structures + * + ****************************************************************/ + +typedef struct __XmStringUnoptSegRec _XmStringSegmentRec; +typedef struct __XmStringUnoptSegRec *_XmStringSegment; + +typedef struct __XmStringArraySegRec _XmStringLineRec; +typedef struct __XmStringArraySegRec *_XmStringLine; + +/**************************************************************** + * + * Macros + * + ****************************************************************/ + +/* General */ +#define _XmStrType(str) ((str)->empty.type) +#define _XmStrOptimized(str) ((str)->empty.type == XmSTRING_OPTIMIZED) +#define _XmStrMultiple(str) ((str)->empty.type == XmSTRING_MULTIPLE_ENTRY) +#define _XmStrRefCountGet(str) (_XmStrMultiple(str) ? \ + (str)->multi_str.refcount : \ + (_XmStrOptimized(str) ? \ + (str)->opt_str.refcount : \ + 1)) +#define _XmStrRefCountSet(str, val) \ + (_XmStrMultiple(str) ? \ + ((str)->multi_str.refcount = (val)) : \ + (_XmStrOptimized(str) ? \ + ((str)->opt_str.refcount = (val)) : 0)) + +#define _XmStrRefCountInc(str) \ + (_XmStrMultiple(str) ? \ + ++((str)->multi_str.refcount) : \ + (_XmStrOptimized(str) ? \ + ++((str)->opt_str.refcount) : 0)) + +#define _XmStrRefCountDec(str) \ + (_XmStrMultiple(str) ? \ + --((str)->multi_str.refcount) : \ + (_XmStrOptimized(str) ? \ + --((str)->opt_str.refcount) : 0)) + +/* Optimized, one-segment XmStrings */ +#define _XmStrTextType(str) ((str)->opt_str.text_type) +#define _XmStrTagIndex(str) ((str)->opt_str.tag_index) +#define _XmStrTagGet(str) (_XmStrTagIndex(str) == TAG_INDEX_UNSET ? \ + NULL : \ + _XmStringIndexGetTag(_XmStrTagIndex(str))) +#define _XmStrByteCount(str) ((str)->opt_str.byte_count) +#define _XmStrCharCount(str) _XmStringCharacterCount((str)->opt_str.text, \ + _XmStrTextType(str), \ + _XmStrByteCount(str),\ + NULL) +#define _XmStrRendBegin(str) ((str)->opt_str.rend_begin) +#define _XmStrRendIndex(str) ((str)->opt_str.rend_index) +#define _XmStrRendTagGet(str) (_XmStrRendIndex(str) == REND_INDEX_UNSET ? \ + NULL : \ + _XmStringIndexGetTag(_XmStrRendIndex(str))) +#define _XmStrRendEnd(str) ((str)->opt_str.rend_end) +#define _XmStrDirection(str) ((str)->opt_str.str_dir) +#define _XmStrFlipped(str) ((str)->opt_str.flipped) +#define _XmStrTabs(str) ((str)->opt_str.tabs) +#define _XmStrText(str) (((_XmStringOpt)(str))->text) + +/* Multi-segment XmStrings */ +#define _XmStrImplicitLine(str) (str)->multi_str.implicit_line +#define _XmStrAddNewline(str) (_XmStrMultiple(str) ? \ + _XmStrImplicitLine(str) : False) +#define _XmStrEntryCount(str) (str)->multi_str.entry_count +#define _XmStrEntryCountGet(str) (_XmStrMultiple(str) ? \ + _XmStrEntryCount(str) : 1) +#define _XmStrLineCountGet(str) (_XmStrMultiple(str)&&_XmStrAddNewline(str) ? \ + _XmStrEntryCount(str) : \ + 1) +#define _XmStrEntry(str) ((_XmStringMulti)(str))->entry +#define _XmStrEntryGet(str) (_XmStrMultiple(str) ? \ + _XmStrEntry(str) : \ + (_XmStringEntry*)NULL) + +#define _XmStrInit(str, type) \ +{ \ + switch (type) { \ + case XmSTRING_OPTIMIZED : \ + bzero((char*)str, sizeof(_XmStringOptRec)); \ + _XmStrType(str) = type; \ + _XmStrTextType(str) = XmNO_TEXT; \ + _XmStrDirection(str) = XmSTRING_DIRECTION_UNSET; \ + _XmStrTagIndex(str) = TAG_INDEX_UNSET; \ + _XmStrRendIndex(str) = REND_INDEX_UNSET; \ + _XmStrRefCountSet(str, 1); \ + break; \ + case XmSTRING_MULTIPLE_ENTRY : \ + bzero((char*)str, sizeof(_XmStringMultiRec)); \ + _XmStrType(str) = type; \ + _XmStrRefCountSet(str, 1); \ + break; \ + } \ +} + +#ifdef _XmDEBUG_XMSTRING_MEM +#define STR_OFFSET sizeof(double) +#define _XmStrMalloc(size) (XtMalloc((size) + STR_OFFSET) + STR_OFFSET) +#define _XmStrFree(ptr) (XtFree(((char*)(ptr)) - STR_OFFSET)) +#else +#define _XmStrMalloc(size) (XtMalloc(size)) +#define _XmStrFree(ptr) (XtFree((char*)(ptr))) +#endif /* _XmDEBUG_XMSTRING_MEM */ + +#define _XmStrCreate(str, type, text_len) \ +{ \ + switch (type) { \ + case XmSTRING_OPTIMIZED : \ + (str) = (_XmString) \ + _XmStrMalloc(sizeof(_XmStringOptRec) + \ + (text_len ? (text_len - TEXT_BYTES_IN_STRUCT) : 0)); \ + bzero((char*)str, sizeof(_XmStringOptRec)); \ + _XmStrType(str) = type; \ + _XmStrTextType(str) = XmNO_TEXT; \ + _XmStrDirection(str) = XmSTRING_DIRECTION_UNSET; \ + _XmStrTagIndex(str) = TAG_INDEX_UNSET; \ + _XmStrRendIndex(str) = REND_INDEX_UNSET; \ + _XmStrRefCountSet(str, 1); \ + _XmStrByteCount(str) = text_len; \ + break; \ + case XmSTRING_MULTIPLE_ENTRY : \ + (str) = (_XmString)_XmStrMalloc(sizeof(_XmStringMultiRec)); \ + bzero((char*)str, sizeof(_XmStringMultiRec)); \ + _XmStrType(str) = type; \ + _XmStrRefCountSet(str, 1); \ + break; \ + } \ +} + +/* General XmString Entry macros */ +#define _XmEntryType(entry) (((_XmStringEntry)(entry))->empty.type) +#define _XmEntryOptimized(entry) \ + (_XmEntryType(entry) == XmSTRING_ENTRY_OPTIMIZED) +#define _XmEntryMultiple(entry) \ + (_XmEntryType(entry) == XmSTRING_ENTRY_ARRAY) +#define _XmEntryUnoptimized(entry) \ + (_XmEntryType(entry) == XmSTRING_ENTRY_UNOPTIMIZED) + +/* Non-array entry macros */ +#define _XmEntryTextTypeSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.text_type = (val)) : \ + (((_XmStringEntry)(entry))->unopt_single.text_type = (val))) +#define _XmEntryTagIndex(entry) \ + (((_XmStringEntry)(entry))->single.tag_index) +#define _XmUnoptSegTag(entry) \ + ((_XmStringUnoptSeg)(entry))->tag +#define _XmUnoptSegByteCount(entry) \ + ((_XmStringUnoptSeg)(entry))->byte_count +#define _XmEntryByteCountSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.byte_count = (val)) : \ + (_XmUnoptSegByteCount(entry) = (val))) +#define _XmEntryCharCountSet(entry, val) \ + (_XmEntryUnoptimized(entry) ? \ + (((_XmStringUnoptSeg)(entry))->char_count = (val)) : \ + 0) +#define _XmEntryRendIndex(entry) \ + (((_XmStringEntry)(entry))->single.rend_index) +#define _XmUnoptSegRendBeginCount(entry) \ + ((_XmStringUnoptSeg)(entry))->begin_count +#define _XmEntryRendBeginCountSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.rend_begin = (val)) : \ + (_XmUnoptSegRendBeginCount(entry) = (val))) +#define _XmUnoptSegRendBegins(entry) \ + ((_XmStringUnoptSeg)(entry))->rend_begin_tags +#define _XmUnoptSegRendEndCount(entry) \ + ((_XmStringUnoptSeg)(entry))->end_count +#define _XmEntryRendEndCountSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.rend_end = (val)) : \ + (_XmUnoptSegRendEndCount(entry) = (val))) +#define _XmUnoptSegRendEnds(entry) \ + ((_XmStringUnoptSeg)(entry))->rend_end_tags +#define _XmEntryTabsSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.tabs_before = (val)) : \ + (((_XmStringEntry)(entry))->unopt_single.tabs_before = (val))) +#define _XmEntryFlippedGet(entry) \ + (_XmEntryOptimized(entry) ? \ + ((_XmStringEntry)(entry))->single.flipped : \ + ((_XmStringEntry)(entry))->unopt_single.flipped) +#define _XmEntryFlippedSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.flipped = (val)) : \ + (((_XmStringEntry)(entry))->unopt_single.flipped = (val))) +#define _XmEntryPermGet(entry) \ + (_XmEntryOptimized(entry) ? \ + ((_XmStringEntry)(entry))->single.permanent : \ + ((_XmStringEntry)(entry))->unopt_single.permanent) +#define _XmEntryPermSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.permanent = (val)) : \ + (((_XmStringEntry)(entry))->unopt_single.permanent = (val))) +#define _XmEntrySoftNewlineGet(entry) \ + (_XmEntryOptimized(entry) ? \ + ((_XmStringEntry)(entry))->single.soft_line_break : \ + (_XmEntryUnoptimized(entry) ? \ + ((_XmStringEntry)(entry))->unopt_single.soft_line_break : \ + ((_XmStringEntry)(entry))->multiple.soft_line_break)) +#define _XmEntrySoftNewlineSet(entry, val) \ + (_XmEntryOptimized(entry) ? \ + (((_XmStringEntry)(entry))->single.soft_line_break = (val)) : \ + (_XmEntryUnoptimized(entry) ? \ + (((_XmStringEntry)(entry))->unopt_single.soft_line_break = (val)):\ + (((_XmStringEntry)(entry))->multiple.soft_line_break = (val)))) +#define _XmEntryImm(entry) \ + (((_XmStringEntry)(entry))->single.immediate) +#define _XmEntryPushSet(entry, val) \ + (_XmEntryUnoptimized(entry) ? \ + (((_XmStringEntry)(entry))->unopt_single.push_before = (val)) : \ + 0) +#define _XmEntryPopSet(entry, val) \ + (_XmEntryUnoptimized(entry) ? \ + (((_XmStringEntry)(entry))->unopt_single.pop_after = (val)) : \ + 0) +#define _XmEntryMBText(entry) \ + (((_XmStringOptSeg)(entry))->data.chars) +#define _XmEntryWCText(entry) \ + (((_XmStringOptSeg)(entry))->data.wchars) +#define _XmEntryCacheSet(entry, val) \ + (_XmEntryUnoptimized(entry) ? \ + (((_XmStringUnoptSeg)(entry))->cache = (val)) : \ + NULL) + + +/* Array entry specific macros */ +#define _XmEntrySegmentCount(entry) \ + (((_XmStringEntry)(entry))->multiple.segment_count) +#define _XmEntrySegmentCountGet(entry) \ + (_XmEntryMultiple(entry) ? \ + _XmEntrySegmentCount(entry) : \ + 1) +#define _XmEntrySegment(entry) \ + (((_XmStringArraySeg)(entry))->seg) + +#define _XmEntrySegmentGet(entry) \ + (_XmEntryMultiple(entry) ? \ + _XmEntrySegment(entry) : \ + (_XmStringNREntry *)&(entry)) + +/* Creation macros */ + +#define _XmEntryInit(entry, type) \ +{ \ + switch (type) { \ + case XmSTRING_ENTRY_OPTIMIZED : \ + bzero((char*)entry, sizeof(_XmStringOptSegRec)); \ + _XmEntryTagIndex(entry) = TAG_INDEX_UNSET; \ + _XmEntryRendIndex(entry) = REND_INDEX_UNSET; \ + break; \ + case XmSTRING_ENTRY_ARRAY : \ + bzero((char*)entry, sizeof(_XmStringArraySegRec)); \ + break; \ + case XmSTRING_ENTRY_UNOPTIMIZED : \ + bzero((char*)entry, sizeof(_XmStringUnoptSegRec)); \ + break; \ + } \ + _XmEntryType(entry) = type; \ + _XmEntryTextTypeSet(entry, XmNO_TEXT); \ + if (type != XmSTRING_ENTRY_ARRAY) \ + _XmEntryDirectionSet(entry, XmSTRING_DIRECTION_UNSET); \ +} + +#define _XmEntryCreate(entry, type) \ +{ \ + switch (type) { \ + case XmSTRING_ENTRY_OPTIMIZED : \ + (entry) = (_XmStringEntry)XtMalloc(sizeof(_XmStringOptSegRec)); \ + bzero((char*)entry, sizeof(_XmStringOptSegRec)); \ + _XmEntryTagIndex(entry) = TAG_INDEX_UNSET; \ + _XmEntryRendIndex(entry) = REND_INDEX_UNSET; \ + break; \ + case XmSTRING_ENTRY_ARRAY : \ + (entry) = (_XmStringEntry)XtMalloc(sizeof(_XmStringArraySegRec)); \ + bzero((char*)entry, sizeof(_XmStringArraySegRec)); \ + break; \ + case XmSTRING_ENTRY_UNOPTIMIZED : \ + (entry) = (_XmStringEntry)XtMalloc(sizeof(_XmStringUnoptSegRec)); \ + bzero((char*)entry, sizeof(_XmStringUnoptSegRec)); \ + break; \ + } \ + if (entry) { \ + _XmEntryType(entry) = type; \ + _XmEntryTextTypeSet(entry, XmNO_TEXT); \ + if (type != XmSTRING_ENTRY_ARRAY) \ + _XmEntryDirectionSet(entry, XmSTRING_DIRECTION_UNSET); \ + } \ +} + +#define _XmCACHE_DIRTY 0 +#define _XmCacheDirty(cache) (((_XmStringCache)(cache))->dirty) +#define _XmCacheNext(cache) (((_XmStringCache)(cache))->next) + +#define _XmEntryDirtyGet(entry, type, data) \ + (((type) == _XmSCANNING_CACHE) ? \ + (Boolean)(long)_XmScanningCacheGet((_XmStringNREntry)entry, \ + (XmDirection)(long)data, \ + _XmCACHE_DIRTY) : \ + (((type) == _XmRENDERING_CACHE) ? \ + (Boolean)(long)_XmRenderCacheGet((_XmStringEntry)entry, \ + (XmRenderTable)(long)data, \ + _XmCACHE_DIRTY) : \ + True)) + + +#define _XmEntryDirtySet(entry, type, data, val) \ + (((type) == _XmSCANNING_CACHE) ? \ + _XmScanningCacheSet((_XmStringNREntry)entry, \ + (XmDirection)(long)data, \ + _XmCACHE_DIRTY, (XtPointer)(long)val) : \ + (((type) == _XmRENDERING_CACHE) ? \ + _XmRenderCacheSet((_XmStringEntry)entry, \ + (XmRenderTable)(long)data, \ + _XmCACHE_DIRTY, (XtPointer)(long)val) : \ + (void)NULL)) + +/* Scanning cache */ +#define _XmCACHE_SCAN_LEFT 1 +#define _XmCACHE_SCAN_RIGHT 2 +#define _XmCACHE_SCAN_LAYOUT 3 +#define _XmCACHE_SCAN_DEPTH 4 +#define _XmEntryLeftGet(entry, d) \ + (_XmStringEntry)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_LEFT) +#define _XmEntryRightGet(entry, d) \ + (_XmStringEntry)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_RIGHT) +#define _XmEntryLayoutGet(entry, d) \ + (XmDirection)(long)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_LAYOUT) +#define _XmEntryLayoutDepthGet(entry, d) \ + (unsigned short)(long)_XmScanningCacheGet(entry, d, _XmCACHE_SCAN_DEPTH) +#define _XmEntryLeftSet(entry, d, val) \ + _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_LEFT, (XtPointer)(long)val) +#define _XmEntryRightSet(entry, d, val) \ + _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_RIGHT, (XtPointer)(long)val) +#define _XmEntryLayoutSet(entry, d, val) \ + _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_LAYOUT, (XtPointer)(long)val) +#define _XmEntryLayoutDepthSet(entry, d, val) \ + _XmScanningCacheSet(entry, d, _XmCACHE_SCAN_DEPTH, (XtPointer)(long)val) + +/* Rendering cache */ +#define _XmCACHE_RENDER_WIDTH 1 +#define _XmCACHE_RENDER_HEIGHT 2 +#define _XmCACHE_RENDER_RENDITION 3 +#define _XmCACHE_RENDER_X 4 +#define _XmCACHE_RENDER_Y 5 +#define _XmCACHE_RENDER_BASELINE 6 +#define _XmCACHE_RENDER_ASCENT 7 +#define _XmCACHE_RENDER_DESCENT 8 +#define _XmCACHE_RENDER_PREV_TABS 9 +#define _XmEntryXGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_X) +#define _XmEntryYGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_Y) +#define _XmEntryWidthGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_WIDTH) +#define _XmEntryHeightGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_HEIGHT) +#define _XmEntryBaselineGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_BASELINE) +#define _XmEntryAscentGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_ASCENT) +#define _XmEntryDescentGet(entry, rt) \ + (long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_DESCENT) +#define _XmEntryRenditionGet(entry, rt) \ + (XmRendition)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_RENDITION) +#define _XmEntryPrevTabsGet(entry, rt) \ + (char)(long)_XmRenderCacheGet(entry, rt, _XmCACHE_RENDER_PREV_TABS) +#define _XmEntryXSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_X, (XtPointer)(long)val) +#define _XmEntryYSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_Y, (XtPointer)(long)val) +#define _XmEntryWidthSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_WIDTH, (XtPointer)(long)val) +#define _XmEntryHeightSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_HEIGHT, (XtPointer)(long)val) +#define _XmEntryBaselineSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_BASELINE, (XtPointer)(long)val) +#define _XmEntryAscentSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_ASCENT, (XtPointer)(long)val) +#define _XmEntryDescentSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_DESCENT, (XtPointer)(long)val) +#define _XmEntryRenditionSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_RENDITION, (XtPointer)(long)val) +#define _XmEntryPrevTabsSet(entry, rt, val) \ + _XmRenderCacheSet(entry, rt, _XmCACHE_RENDER_PREV_TABS, (XtPointer)(long)val) + +/* + * Macros for old non-optimized segment data structure access + */ + +#define _XmSegTag(seg) _XmUnoptSegTag(seg) +#define _XmSegCharCount(seg) _XmUnoptSegByteCount(seg) +#define _XmSegText(seg) ((_XmStringUnoptSeg)(seg))->data.text +#define _XmSegDirection(seg) _XmEntryDirectionGet(seg) +#define _XmSegLayoutDirection(seg) _XmEntryPushGet(seg) +#define _XmSegLayout(seg) _XmEntryPopGet(seg) + +#define _XmSegType(seg) _XmEntryTextTypeGet(seg) +#define _XmSegTextGet(seg) (unsigned char *)_XmSegText(seg) +#define _XmSegTextSet(seg,val) _XmEntryTextSet(seg, (XtPointer)(val)) +#define _XmSegMBTextGet(seg) _XmEntryMBText(seg) +#define _XmSegWCTextGet(seg) _XmEntryWCText(seg) +#define _XmSegTab(seg) _XmEntryTabsGet(seg) +#define _XmSegLeft(seg) ((_XmStringUnoptSeg)seg)->cache +#define _XmSegRight(seg) ((_XmStringUnoptSeg)seg)->cache +#define _XmSegRendBegins(seg) _XmUnoptSegRendBegins(seg) +#define _XmSegRendBeginGet(seg,n) _XmEntryRendBeginGet(seg,n) +#define _XmSegRendBeginCount(seg) _XmUnoptSegRendBeginCount(seg) +#define _XmSegRendEnds(seg) _XmUnoptSegRendEnds(seg) +#define _XmSegRendEndGet(seg,n) _XmEntryRendEndGet(seg,n) +#define _XmSegRendEndCount(seg) _XmUnoptSegRendEndCount(seg) + +/* + * Macros for line data structure access + */ + +#define _XmStrLineSegCount(line) _XmEntrySegmentCount(line) +#define _XmStrLineSegment(line) \ + ((_XmStringSegment *)_XmEntrySegment(line)) +#define _XmStrLineSegmentSet(line, val) _XmEntrySegment(line) = \ + (_XmStringNREntry *)(val) + +/* + * Macros for internal string data structure access + */ + +#define _XmStrLineCnt(str) _XmStrEntryCount(str) +#define _XmStrLineLine(str) ((_XmStringLine *)_XmStrEntry(str)) +#define _XmStrLineLineSet(str, val) _XmStrEntry(str) = \ + (_XmStringEntry *)(val) + + +/**************************************************************** + * + * Function headers + * + ****************************************************************/ + +/**** Private Defines, Typedefs, and Function Declarations for XmString.c ****/ + +extern XFontStruct * _XmGetFirstFont( + XmFontListEntry entry) ; +extern Boolean _XmFontListSearch( + XmFontList fontlist, + XmStringCharSet charset, + short *indx, + XFontStruct **font_struct) ; + +extern int _XmStringIndexCacheTag( + XmStringTag tag, + int length) ; +extern XmStringTag _XmStringCacheTag( + XmStringTag tag, + int length) ; + + +extern Boolean _XmStringInitContext( + _XmStringContext *context, + _XmString string) ; +extern Boolean _XmStringGetNextSegment( + _XmStringContext context, + XmStringCharSet *charset, + XmStringDirection *direction, + char **text, + short *char_count, + Boolean *separator) ; +extern void _XmStringFreeContext( + _XmStringContext context) ; +extern Dimension _XmStringWidth( + XmFontList fontlist, + _XmString string) ; +extern Dimension _XmStringHeight( + XmFontList fontlist, + _XmString string) ; +extern void _XmStringExtent( + XmFontList fontlist, + _XmString string, + Dimension *width, + Dimension *height) ; +extern Boolean _XmStringEmpty( + _XmString string) ; +extern void _XmStringDraw( + Display *d, + Window w, + XmFontList fontlist, + _XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip) ; +extern void _XmStringDrawImage( + Display *d, + Window w, + XmFontList fontlist, + _XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip) ; +extern void _XmStringDrawUnderline( + Display *d, + Window w, + XmFontList f, + _XmString s, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip, + _XmString u) ; +extern void _XmStringDrawMnemonic( + Display *d, + Window w, + XmFontList fontlist, + _XmString string, + GC gc, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir, +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir, +#endif /* NeedWidePrototypes */ + XRectangle *clip, + String mnemonic, + XmStringCharSet charset) ; +extern void _XmStringRender(Display *d, + Drawable w, + XmRenderTable rendertable, + XmRendition rend, + _XmString string, +#if NeedWidePrototypes + int x, + int y, + int width, + unsigned int align, + unsigned int lay_dir +#else + Position x, + Position y, + Dimension width, + unsigned char align, + unsigned char lay_dir +#endif /* NeedWidePrototypes */ + ) ; +extern _XmString _XmStringCreate( + XmString cs) ; +extern void _XmStringFree( + _XmString string) ; +extern char * _XmStringGetCurrentCharset( void ) ; +extern char * _XmCharsetCanonicalize( + String charset) ; +extern _XmString _XmStringCopy( + _XmString string) ; +extern Boolean _XmStringByteCompare( + _XmString a, + _XmString b) ; +extern Boolean _XmStringHasSubstring( + _XmString string, + _XmString substring) ; +extern XmString _XmStringCreateExternal( + XmFontList fontlist, + _XmString cs) ; +extern Dimension _XmStringBaseline( + XmFontList fontlist, + _XmString string) ; +extern void _XmStringGetBaselines(XmRenderTable rendertable, + _XmString string, + Dimension **baselines, + Cardinal *line_count); +extern int _XmStringLineCount( + _XmString string) ; +extern char * _XmStringGetTextConcat( + XmString string) ; +extern Boolean _XmStringIsCurrentCharset( + XmStringCharSet c) ; +extern Boolean _XmStringSingleSegment( + XmString str, + char **pTextOut, + XmStringCharSet *pCharsetOut ) ; +extern NextTabResult _XmStringGetNextTabWidth(XmStringContext ctx, + Widget widget, + unsigned char units, + XmRenderTable rt, + float *width, + XmRendition *rend); +extern XtPointer _XmStringUngenerate (XmString string, + XmStringTag tag, + XmTextType tag_type, + XmTextType output_type); + +extern void _XmStringDrawSegment(Display *d, + Drawable w, +#if NeedWidePrototypes + int x, + int y, + int width, + int height, +#else + Position x, + Position y, + Dimension width, + Dimension height, +#endif /* NeedWidePrototypes */ + _XmStringNREntry seg, + XmRendition rend, + XmRenderTable rendertable, +#if NeedWidePrototypes + int image, +#else + Boolean image, +#endif /* NeedWidePrototypes */ + XmString *underline, +#if NeedWidePrototypes + unsigned int descender +#else + Dimension descender +#endif /* NeedWidePrototypes */ + ); +extern void _XmStringDrawLining(Display *d, + Drawable w, + Position x, + Position y, + Dimension width, + Dimension height, + Dimension descender, + XmRendition rend, + Pixel select_color, + XmHighlightMode mode, + Boolean colors_set); + +extern Boolean _XmStringSegmentExtents(_XmStringEntry entry, + XmRenderTable rendertable, + XmRendition *rend_in_out, + XmRendition base, + Dimension *width, + Dimension *height, + Dimension *ascent, + Dimension *descent); + +extern void _XmStringLayout(_XmString string, +#if NeedWidePrototypes + int direction +#else + XmDirection direction +#endif /* NeedWidePrototypes */ + ); +extern _XmString _XmStringOptToNonOpt(_XmStringOpt string); +extern XmString _XmStringCvtOptToMulti(XmString str); +extern XmString _XmStringOptimize(XmString str); +extern XmString _XmStringMakeXmString(_XmStringEntry **entries, + int count); +extern void _XmStringEntryFree(_XmStringEntry entry); +extern _XmStringEntry _XmStringEntryCopy(_XmStringEntry entry); +extern unsigned char _XmStringCharacterCount(XtPointer text, + XmTextType text_type, + int byte_count, + XFontStruct *font); +extern unsigned char _XmEntryCharCountGet(_XmStringEntry entry, + XmRenderTable rt); +extern _XmStringCache _XmStringCacheGet(_XmStringCache caches, + int type); +extern void _XmStringCacheFree(_XmStringCache caches); +extern XtPointer _XmScanningCacheGet(_XmStringNREntry entry, +#if NeedWidePrototypes + int d, +#else + XmDirection d, +#endif /* NeedWidePrototypes */ + int field); +extern void _XmScanningCacheSet(_XmStringNREntry entry, +#if NeedWidePrototypes + int d, +#else + XmDirection d, +#endif /* NeedWidePrototypes */ + int field, + XtPointer value); +/* Rendering cache */ +extern XtPointer _XmRenderCacheGet(_XmStringEntry entry, + XmRenderTable rt, + int field); +extern void _XmRenderCacheSet(_XmStringEntry entry, + XmRenderTable rt, + int field, + XtPointer value); + +extern XmStringTag _XmStringIndexGetTag(int index); + +extern Boolean _XmStringGetSegment(_XmStringContext context, + Boolean update_context, + Boolean copy_data, + XtPointer *text, + XmStringTag *tag, + XmTextType *type, + XmStringTag **rendition_tags, + unsigned int *tag_count, + XmStringDirection *direction, + Boolean *separator, + unsigned char *tabs, + short *char_count, + XmDirection *push_before, + Boolean *pop_after); + +/* Declarations for macro to function switchover. */ +extern _XmStringCache _XmEntryCacheGet(_XmStringEntry entry); +extern XmStringTag _XmEntryTag(_XmStringEntry entry); +extern void _XmEntryTagSet(_XmStringEntry entry, XmStringTag tag); +extern XtPointer _XmEntryTextGet(_XmStringEntry entry); +extern XmDirection _XmEntryPushGet(_XmStringEntry entry); +extern Boolean _XmEntryPopGet(_XmStringEntry entry); +extern unsigned int _XmEntryByteCountGet(_XmStringEntry entry); +extern unsigned int _XmEntryDirectionGet(_XmStringEntry entry); +extern void _XmEntryDirectionSet(_XmStringEntry entry, XmDirection val); +extern unsigned char _XmEntryRendEndCountGet(_XmStringEntry entry); +extern unsigned char _XmEntryRendBeginCountGet(_XmStringEntry entry); +extern XmStringTag _XmEntryRendEndGet(_XmStringEntry entry, + int n); +extern XmStringTag _XmEntryRendBeginGet(_XmStringEntry entry, + int n); +extern void _XmEntryRendEndSet(_XmStringEntry entry, + XmStringTag tag, + int n); +extern void _XmEntryRendBeginSet(_XmStringEntry entry, + XmStringTag tag, + int n); +extern unsigned char _XmEntryTabsGet(_XmStringEntry entry); +extern unsigned int _XmEntryTextTypeGet(_XmStringEntry entry); +extern void _XmEntryTextSet(_XmStringEntry entry, XtPointer val); + +extern unsigned char *_XmStringTruncateASN1(unsigned char *str, int n); +extern void _XmStringContextCopy(_XmStringContext target, + _XmStringContext source); +extern void _XmStringContextFree(_XmStringContext target); +extern XmString _XmStringNCreate(char *text, XmStringTag tag, int len); +extern void _XmStringSegmentNew(_XmString string, + int line_index, + _XmStringEntry value, + int copy) ; +extern void _XmStringContextReInit(_XmStringContext context, + _XmString string); +extern int _XmConvertFactor(unsigned char units, + float *factor); + + + +#ifdef _XmDEBUG_XMSTRING +extern void _Xm_dump_fontlist(XmFontList f) ; +extern void _Xm_dump_fontlist_cache( void ) ; +extern void _Xm_dump_stream( unsigned char *cs) ; +extern void _Xm_dump_internal(_XmString string) ; +#endif /* _XmDEBUG_XMSTRING */ +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmStringI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmTabListI.h b/libXm/osx/Xm/XmTabListI.h new file mode 100644 index 0000000..46ddbaf --- /dev/null +++ b/libXm/osx/Xm/XmTabListI.h @@ -0,0 +1,116 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: XmTabListI.h /main/5 1995/07/13 18:28:19 drk $ */ +#ifndef _XmTabListI_h +#define _XmTabListI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define TAB_OPTIMIZED_BITS 1 +#define TAB_MARK_BITS TAB_OPTIMIZED_BITS +#define TAB_REFCOUNT_BITS (16 - TAB_OPTIMIZED_BITS) + +typedef struct __XmTabRec +{ + unsigned int mark : TAB_MARK_BITS; + unsigned int ref_count : TAB_REFCOUNT_BITS; + float value; + unsigned char units; + XmOffsetModel offsetModel; + unsigned char alignment; + char *decimal; + XmTab next, prev; +} _XmTabRec, *_XmTab; + +typedef struct __XmTabListRec +{ + unsigned int count; + XmTab start; +} _XmTabListRec, *_XmTabList; + + +/* + * Macros for tab data structure access + */ + +#define _XmTabMark(tab) ((_XmTab)(tab))->mark +#define _XmTabValue(tab) ((_XmTab)(tab))->value +#define _XmTabUnits(tab) ((_XmTab)(tab))->units +#define _XmTabPrev(tab) ((_XmTab)(tab))->prev +#define _XmTabNext(tab) ((_XmTab)(tab))->next +#define _XmTabModel(tab) ((_XmTab)(tab))->offsetModel +#define _XmTabAlign(tab) ((_XmTab)(tab))->alignment +#define _XmTabDecimal(tab) ((_XmTab)(tab))->decimal + +#define _XmTabLStart(tl) ((_XmTabList)(tl))->start +#define _XmTabLCount(tl) ((_XmTabList)(tl))->count + + + +/******** Private Function Declarations for XmTabList.c ********/ + +extern XmTab _XmTabCopy(XmTab tab); +extern Widget _XmCreateTabList(Widget parent, + String name, + ArgList arglist, + Cardinal argcount); +extern Widget _XmCreateTab(Widget parent, + String name, + ArgList arglist, + Cardinal argcount); +extern Position _XmTabListGetPosition( + Screen * screen, + XmTabList tab_list, + unsigned char unit_type, + Cardinal tab_position); + + +/******** End Private Function Declarations ********/ + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmTabListI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/Xmfuncs.h b/libXm/osx/Xm/Xmfuncs.h new file mode 100644 index 0000000..2c44be8 --- /dev/null +++ b/libXm/osx/Xm/Xmfuncs.h @@ -0,0 +1,91 @@ +/* + * $TOG: Xmfuncs.h /main/1 1997/03/24 16:25:46 dbl $ + * + * +Copyright (c) 1990 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + * + */ + +#ifndef _XFUNCS_H_ +#define _XFUNCS_H_ + +#include + +/* the old Xfuncs.h, for pre-R6 */ + +#ifdef X_USEBFUNCS +void bcopy(); +void bzero(); +int bcmp(); +#else +#if (__STDC__ && !defined(X_NOT_STDC_ENV) && !defined(sun) && !defined(macII) && !defined(apollo)) || defined(SVR4) || defined(hpux) || defined(_IBMR2) || defined(_SEQUENT_) +#include +#define _XFUNCS_H_INCLUDED_STRING_H +#define bcopy(b1,b2,len) memmove(b2, b1, (size_t)(len)) +#define bzero(b,len) memset(b, 0, (size_t)(len)) +#define bcmp(b1,b2,len) memcmp(b1, b2, (size_t)(len)) +#else +#ifdef sgi +#include +#else +#ifdef SYSV +#include +void bcopy(); +#define bzero(b,len) memset(b, 0, len) +#define bcmp(b1,b2,len) memcmp(b1, b2, len) +#else /* bsd */ +void bcopy(); +void bzero(); +int bcmp(); +#endif /* SYSV */ +#endif /* sgi */ +#endif /* __STDC__ and relatives */ +#endif /* X_USEBFUNCS */ + +/* the new Xfuncs.h */ + +#if !defined(X_NOT_STDC_ENV) && (!defined(sun) || defined(SVR4)) +/* the ANSI C way */ +#ifndef _XFUNCS_H_INCLUDED_STRING_H +#include +#endif +#undef bzero +#define bzero(b,len) memset(b,0,len) +#else /* else X_NOT_STDC_ENV or SunOS 4 */ +#if defined(SYSV) || defined(luna) || defined(sun) || defined(__sxg__) +#include +#define memmove(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len)) +#if defined(SYSV) && defined(_XBCOPYFUNC) +#undef memmove +#define memmove(dst,src,len) _XBCOPYFUNC((char *)(src),(char *)(dst),(int)(len)) +#define _XNEEDBCOPYFUNC +#endif +#else /* else vanilla BSD */ +#define memmove(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len)) +#define memcpy(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len)) +#define memcmp(b1,b2,len) bcmp((char *)(b1),(char *)(b2),(int)(len)) +#endif /* SYSV else */ +#endif /* ! X_NOT_STDC_ENV else */ + +#endif /* _XFUNCS_H_ */ diff --git a/libXm/osx/Xm/XmosI.h b/libXm/osx/Xm/XmosI.h new file mode 100644 index 0000000..c754d15 --- /dev/null +++ b/libXm/osx/Xm/XmosI.h @@ -0,0 +1,137 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + * + */ +/* + * HISTORY + */ +/* $XConsortium: XmosI.h /main/6 1995/07/13 18:28:56 drk $ */ +#ifndef _XmosI_h +#define _XmosI_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Vendor dependent macro for XmCvtXmStringToCT */ +/* Sample implementation treats unmapped charsets as locale encoded text. */ +#define _XmOSProcessUnmappedCharsetAndText(tag, ctext, sep, outc, outl, prev) \ + processCharsetAndText(XmFONTLIST_DEFAULT_TAG, (ctext), (sep), \ + (outc), (outl), (prev)) + + +/******** Private Function Declarations ********/ + +extern String _XmOSFindPatternPart( + String fileSpec) ; +extern void _XmOSQualifyFileSpec( + String dirSpec, + String filterSpec, + String *pQualifiedDir, + String *pQualifiedPattern) ; +extern void _XmOSGetDirEntries( + String qualifiedDir, + String matchPattern, +#if NeedWidePrototypes + unsigned int fileType, + int matchDotsLiterally, + int listWithFullPath, +#else + unsigned char fileType, + Boolean matchDotsLiterally, + Boolean listWithFullPath, +#endif /* NeedWidePrototypes */ + String **pEntries, + unsigned int *pNumEntries, + unsigned int *pNumAlloc) ; +extern void _XmOSBuildFileList( + String dirPath, + String pattern, +#if NeedWidePrototypes + unsigned int typeMask, +#else + unsigned char typeMask, +#endif /* NeedWidePrototypes */ + String **pEntries, + unsigned int *pNumEntries, + unsigned int *pNumAlloc) ; +extern int _XmOSFileCompare( + XmConst void *sp1, + XmConst void *sp2) ; +extern String _XmOSInitPath( + String file_name, + String env_pathname, + Boolean *user_path) ; +extern String _XmOSBuildFileName( + String file, + String path) ; +extern int _XmOSPutenv( + char *string); +extern void _XmOSGenerateMaskName( + String imageName, + String maskNameBuf) ; + +extern Status _XmOSGetInitialCharsDirection(XtPointer characters, + XmTextType type, + XmStringTag locale, + unsigned int *num_bytes, + XmDirection *direction) ; + +extern XmDirection _XmOSGetCharDirection(XtPointer character, + XmTextType type, + XmStringTag locale) ; + +extern int _XmOSKeySymToCharacter(KeySym keysym, + char *locale, + char *buffer); +extern void _XmOSFindPathParts(String path, + String *filenameRtn, + String *suffixRtn); +extern Boolean _XmOSAbsolutePathName( + String path, + String *pathRtn, + String buf) ; + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XmosI_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XmosP.h b/libXm/osx/Xm/XmosP.h new file mode 100644 index 0000000..f1a8015 --- /dev/null +++ b/libXm/osx/Xm/XmosP.h @@ -0,0 +1,229 @@ +/* + * @OPENGROUP_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. + * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group + * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for + * the full copyright text. + * + * This software is subject to an open license. It may only be + * used on, with or for operating systems which are themselves open + * source systems. You must contact The Open Group for a license + * allowing distribution and sublicensing of this software on, with, + * or for operating systems which are not Open Source programs. + * + * See http://www.opengroup.org/openmotif/license for full + * details of the license agreement. Any use, reproduction, or + * distribution of the program constitutes recipient's acceptance of + * this agreement. + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY + * OR FITNESS FOR A PARTICULAR PURPOSE + * + * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT + * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. +*/ +/* + * HISTORY +*/ +/* $TOG: XmosP.h /main/15 1997/03/25 14:45:55 dbl $ */ +/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */ +/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */ +#ifndef _XmosP_h +#define _XmosP_h + +/* Some SVR4 systems don't have bzero. */ +#include /* for bzero et al */ + +/* + * Fix for 8975 - using LOGNAME instead of USER on SYSV and SVR4 +*/ + +#ifndef USER_VAR +#if defined(SYSV) || defined(SVR4) +#define USER_VAR "LOGNAME" +#else +#define USER_VAR "USER" +#endif +#endif + +/* + * Fix for 5222 - if NO_MEMMOVE is defined, some systems will still + * require stdlib.h. + */ +#ifdef NO_MEMMOVE +#ifdef bcopy +#undef bcopy +#endif +#ifdef memmove +#undef memmove +#endif +#define memmove( p1, p2, p3 ) bcopy( p2, p1, p3 ) +#endif + +#ifndef X_NOT_STDC_ENV +#include /* Needed for MB_CUR_MAX, mbtowc, mbstowcs and mblen */ +#endif + +/* On Sun systems, mblen is broken. It doesn't return 0 when the + string is empty. Here's a patch. NOTE: On Sun systems, mblen + is a macro wrapper around mbtowc. Hence the implementation below. */ +#if defined(sun) +#undef mblen +#define mblen(ptr, size) \ + ((ptr && *(ptr) == '\0') ? 0 : mbtowc((wchar_t *)0, (ptr), (size))) +#endif + +#include /* for MB_LEN_MAX et al */ + +#ifndef INT_MAX +#define INT_MAX 2147483647 +#endif +#ifndef LONG_MAX +#define LONG_MAX 2147483647 +#endif +#ifdef BOGUS_MB_MAX /* some systems don't properly set MB_[CUR|LEN]_MAX */ +#undef MB_LEN_MAX +#define MB_LEN_MAX 1 /* temp fix for ultrix */ +#undef MB_CUR_MAX +#define MB_CUR_MAX 1 /* temp fix for ultrix */ +#endif /* BOGUS_MB_MAX */ + +/**********************************************************************/ +/* here we duplicate Xtos.h, since we can't include this private file */ + +#if defined(INCLUDE_ALLOCA_H) || defined(HAVE_ALLOCA_H) +#include +#endif + +#ifdef CRAY +#define WORD64 +#endif + +/* Don't Use Alloca On Solaris */ +#if defined(sun) +#define NO_ALLOCA +#endif + +/* stolen from server/include/os.h */ +#ifndef NO_ALLOCA +/* + * os-dependent definition of local allocation and deallocation + * If you want something other than XtMalloc/XtFree for ALLOCATE/DEALLOCATE + * LOCAL then you add that in here. + */ +#if defined(__HIGHC__) + +#if HCVERSION < 21003 +#define ALLOCATE_LOCAL(size) alloca(size) +pragma on(alloca); +#else /* HCVERSION >= 21003 */ +#define ALLOCATE_LOCAL(size) _Alloca(size) +#endif /* HCVERSION < 21003 */ + +#define DEALLOCATE_LOCAL(ptr) /* as nothing */ + +#endif /* defined(__HIGHC__) */ + + +#ifdef __GNUC__ + +#ifndef alloca /* gnu itself might have done that already */ +#define alloca __builtin_alloca +#endif + +#define ALLOCATE_LOCAL(size) alloca(size) +#define DEALLOCATE_LOCAL(ptr) /* as nothing */ +#else /* ! __GNUC__ */ +/* + * warning: mips alloca is unsuitable, do not use. + */ +#if defined(vax) || defined(sun) || defined(apollo) || defined(stellar) +/* + * Some System V boxes extract alloca.o from libPW.a; if you + * decide that you don't want to use alloca, you might want to fix it here. + */ +char *alloca(); +#define ALLOCATE_LOCAL(size) alloca(size) +#define DEALLOCATE_LOCAL(ptr) /* as nothing */ +#endif /* who does alloca */ +#endif /* __GNUC__ */ + +#endif /* NO_ALLOCA */ + +#ifndef ALLOCATE_LOCAL +#define ALLOCATE_LOCAL(size) XtMalloc(size) +#define DEALLOCATE_LOCAL(ptr) XtFree(ptr) +#endif /* ALLOCATE_LOCAL */ + +/* End of Xtos.h */ +/*****************/ + +#include + +/* For padding structures in Mrm we need to know how big pointers are. */ +#if !defined(CRAY) && !defined(__alpha) +#define MrmShortPtr +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#define MATCH_CHAR 'P' /* referenced in InitPath strings and in the files + that uses it (ImageCache.c and Mrmhier.c) */ + +/* OS-dependent file info for VirtKeys */ + +#define XMBINDDIR "XMBINDDIR" +#ifndef XMBINDDIR_FALLBACK +#define XMBINDDIR_FALLBACK "/usr/lib/Xm/bindings" +#endif +#define XMBINDFILE "xmbind.alias" +#define MOTIFBIND ".motifbind" + +typedef enum { + XmOS_METHOD_NULL, + XmOS_METHOD_DEFAULTED, + XmOS_METHOD_REPLACED +} XmOSMethodStatus; + +typedef XmDirection (*XmCharDirectionProc)(XtPointer /* char */, + XmTextType /* type */, + XmStringTag /* locale */); + +typedef Status (*XmInitialDirectionProc)(XtPointer /* chars */, + XmTextType /* type */, + XmStringTag /* locale */, + unsigned int * /* num_bytes */, + XmDirection * /* direction */); + + +/******** Private Function Declarations ********/ + +extern XmOSMethodStatus XmOSGetMethod(Widget w, + String method_name, + XtPointer * method, + XtPointer * os_data); + +/******** End Private Function Declarations ********/ + + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + + +#endif /* _XmosP_h */ +/* DON'T ADD ANYTHING AFTER THIS #endif */ diff --git a/libXm/osx/Xm/XpmI.h b/libXm/osx/Xm/XpmI.h new file mode 100644 index 0000000..bbba02b --- /dev/null +++ b/libXm/osx/Xm/XpmI.h @@ -0,0 +1,411 @@ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + * + * $TOG: XpmI.h /main/10 1999/09/01 17:16:10 mgreess $ + */ + +#ifndef _XpmI_h +#define _XpmI_h + +#ifdef __cplusplus +extern "C" { +#endif + +/* Xpm internal symbols are prefixed with _Xm */ + +#define xpmParseData _XmxpmParseData +#define xpmParseDataAndCreate _XmxpmParseDataAndCreate +#define xpmFreeColorTable _XmxpmFreeColorTable +#define xpmInitAttributes _XmxpmInitAttributes +#define xpmInitXpmImage _XmxpmInitXpmImage +#define xpmInitXpmInfo _XmxpmInitXpmInfo +#define xpmSetInfoMask _XmxpmSetInfoMask +#define xpmSetInfo _XmxpmSetInfo +#define xpmSetAttributes _XmxpmSetAttributes +#define xpmCreatePixmapFromImage _XmxpmCreatePixmapFromImage +#define xpmCreateImageFromPixmap _XmxpmCreateImageFromPixmap +#define xpmHashTableInit _XmxpmHashTableInit +#define xpmHashTableFree _XmxpmHashTableFree +#define xpmHashSlot _XmxpmHashSlot +#define xpmHashIntern _XmxpmHashIntern +#define xpmNextString _XmxpmNextString +#define xpmNextUI _XmxpmNextUI +#define xpmGetString _XmxpmGetString +#define xpmNextWord _XmxpmNextWord +#define xpmGetCmt _XmxpmGetCmt +#define xpmParseHeader _XmxpmParseHeader +#define xpmParseValues _XmxpmParseValues +#define xpmParseColors _XmxpmParseColors +#define xpmParseExtensions _XmxpmParseExtensions +#define xpmReadRgbNames _XmxpmReadRgbNames +#define xpmGetRgbName _XmxpmGetRgbName +#define xpmFreeRgbNames _XmxpmFreeRgbNames +#define xpmGetRGBfromName _XmxpmGetRGBfromName +#define xpm_xynormalizeimagebits _Xmxpm_xynormalizeimagebits +#define xpm_znormalizeimagebits _Xmxpm_znormalizeimagebits +#define xpmstrdup _Xmxpmstrdup +#define xpmstrcasecmp _Xmxpmstrcasecmp +#define xpmatoui _Xmxpmatoui +#define xpmDataTypes _XmxpmDataTypes +#define xpmColorKeys _XmxpmColorKeys + +/* The following is the original XpmI.h header file, + except that it includes XpmP.h instead of xpm.h */ + +/* + * Copyright (C) 1989-95 GROUPE BULL + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of GROUPE BULL shall not be + * used in advertising or otherwise to promote the sale, use or other dealings + * in this Software without prior written authorization from GROUPE BULL. + */ + +/*****************************************************************************\ +* XpmI.h: * +* * +* XPM library * +* Internal Include file * +* * +* ** Everything defined here is subject to changes any time. ** * +* * +* Developed by Arnaud Le Hors * +\*****************************************************************************/ + +/* + * The code related to FOR_MSW has been added by + * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94 + */ + +#ifndef XPMI_h +#define XPMI_h + +#include "XpmP.h" + +/* + * lets try to solve include files + */ + +#include +#include +#include +#include +#include +/* stdio.h doesn't declare popen on a Sequent DYNIX OS */ +#ifdef sequent +extern FILE *popen(); +#endif + +#if defined(SYSV) || defined(SVR4) || defined(VMS) || defined(WIN32) || defined (_SVID_SOURCE) +#include + +#ifndef index +#define index strchr +#endif + +#ifndef rindex +#define rindex strrchr +#endif + +#else /* defined(SYSV) || defined(SVR4) || defined(VMS) */ +#include +#endif + + + +#if defined(SYSV) || defined(SVR4) || defined(VMS) || defined(WIN32) +#ifndef bcopy +#define bcopy(source, dest, count) memcpy(dest, source, count) +#endif +#ifndef bzero +#define bzero(b, len) memset(b, 0, len) +#endif +#endif + +/* the following is defined in X11R6 but not in previous versions */ +#ifdef __alpha +#ifndef LONG64 +#define LONG64 +#endif +#endif + +#ifdef VMS +#include +#include +#endif + +/* The following should help people wanting to use their own memory allocation + * functions. To avoid the overhead of a function call when the standard + * functions are used these are all macros, even the XpmFree function which + * needs to be a real function for the outside world though. + * So if change these be sure to change the XpmFree function in misc.c + * accordingly. + */ +#ifndef NO_XPMFREE_MACRO +#ifdef XpmFree +#undef XpmFree +#endif +#define XpmFree(ptr) free(ptr) +#endif + +#ifndef FOR_MSW +#define XpmMalloc(size) malloc((size)) +#define XpmRealloc(ptr, size) realloc((ptr), (size)) +#define XpmCalloc(nelem, elsize) calloc((nelem), (elsize)) +#else +/* checks for mallocs bigger than 64K */ +#define XpmMalloc(size) boundCheckingMalloc((long)(size))/* in simx.[ch] */ +#define XpmRealloc(ptr, size) boundCheckingRealloc((ptr),(long)(size)) +#define XpmCalloc(nelem, elsize) \ + boundCheckingCalloc((long)(nelem),(long) (elsize)) +#endif + +#define XPMMAXCMTLEN BUFSIZ +typedef struct { + unsigned int type; + union { + FILE *file; + char **data; + } stream; + char *cptr; + unsigned int line; + int CommentLength; + char Comment[XPMMAXCMTLEN]; + char *Bcmt, *Ecmt, Bos, Eos; + int format; /* 1 if XPM1, 0 otherwise */ +} xpmData; + +#define XPMARRAY 0 +#define XPMFILE 1 +#define XPMPIPE 2 +#define XPMBUFFER 3 + +#define EOL '\n' +#define TAB '\t' +#define SPC ' ' + +typedef struct { + char *type; /* key word */ + char *Bcmt; /* string beginning comments */ + char *Ecmt; /* string ending comments */ + char Bos; /* character beginning strings */ + char Eos; /* character ending strings */ + char *Strs; /* strings separator */ + char *Dec; /* data declaration string */ + char *Boa; /* string beginning assignment */ + char *Eoa; /* string ending assignment */ +} xpmDataType; + +extern xpmDataType xpmDataTypes[]; + +/* + * rgb values and ascii names (from rgb text file) rgb values, + * range of 0 -> 65535 color mnemonic of rgb value + */ +typedef struct { + int r, g, b; + char *name; +} xpmRgbName; + +/* Maximum number of rgb mnemonics allowed in rgb text file. */ +#define MAX_RGBNAMES 1024 + +extern char *xpmColorKeys[]; + +#define TRANSPARENT_COLOR "None" /* this must be a string! */ + +/* number of xpmColorKeys */ +#define NKEYS 5 + +/* XPM internal routines */ + +FUNC(xpmParseData, int, (xpmData *data, XpmImage *image, XpmInfo *info)); +FUNC(xpmParseDataAndCreate, int, (Display *display, xpmData *data, + XImage **image_return, + XImage **shapeimage_return, + XpmImage *image, XpmInfo *info, + XpmAttributes *attributes)); + +FUNC(xpmFreeColorTable, void, (XpmColor *colorTable, int ncolors)); + +FUNC(xpmInitAttributes, void, (XpmAttributes *attributes)); + +FUNC(xpmInitXpmImage, void, (XpmImage *image)); + +FUNC(xpmInitXpmInfo, void, (XpmInfo *info)); + +FUNC(xpmSetInfoMask, void, (XpmInfo *info, XpmAttributes *attributes)); +FUNC(xpmSetInfo, void, (XpmInfo *info, XpmAttributes *attributes)); +FUNC(xpmSetAttributes, void, (XpmAttributes *attributes, XpmImage *image, + XpmInfo *info)); + +#ifndef FOR_MSW +FUNC(xpmCreatePixmapFromImage, void, (Display *display, Drawable d, + XImage *ximage, Pixmap *pixmap_return)); + +FUNC(xpmCreateImageFromPixmap, void, (Display *display, Pixmap pixmap, + XImage **ximage_return, + unsigned int *width, + unsigned int *height)); +#endif + +/* structures and functions related to hastable code */ + +typedef struct _xpmHashAtom { + char *name; + void *data; +} *xpmHashAtom; + +typedef struct { + unsigned int size; + unsigned int limit; + unsigned int used; + xpmHashAtom *atomTable; +} xpmHashTable; + +FUNC(xpmHashTableInit, int, (xpmHashTable *table)); +FUNC(xpmHashTableFree, void, (xpmHashTable *table)); +FUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s)); +FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data)); + +#define HashAtomData(i) ((void *)i) +#define HashColorIndex(slot) ((unsigned int)((*slot)->data)) +#define USE_HASHTABLE (cpp > 2 && ncolors > 4) + +/* I/O utility */ + +FUNC(xpmNextString, int, (xpmData *mdata)); +FUNC(xpmNextUI, int, (xpmData *mdata, unsigned int *ui_return)); +FUNC(xpmGetString, int, (xpmData *mdata, char **sptr, unsigned int *l)); + +#define xpmGetC(mdata) \ + ((!mdata->type || mdata->type == XPMBUFFER) ? \ + (*mdata->cptr++) : (getc(mdata->stream.file))) + +FUNC(xpmNextWord, unsigned int, + (xpmData *mdata, char *buf, unsigned int buflen)); +FUNC(xpmGetCmt, int, (xpmData *mdata, char **cmt)); +FUNC(xpmParseHeader, int, (xpmData *mdata)); +FUNC(xpmParseValues, int, (xpmData *data, unsigned int *width, + unsigned int *height, unsigned int *ncolors, + unsigned int *cpp, unsigned int *x_hotspot, + unsigned int *y_hotspot, unsigned int *hotspot, + unsigned int *extensions)); + +FUNC(xpmParseColors, int, (xpmData *data, unsigned int ncolors, + unsigned int cpp, XpmColor **colorTablePtr, + xpmHashTable *hashtable)); + +FUNC(xpmParseExtensions, int, (xpmData *data, XpmExtension **extensions, + unsigned int *nextensions)); + +/* RGB utility */ + +FUNC(xpmReadRgbNames, int, (char *rgb_fname, xpmRgbName *rgbn)); +FUNC(xpmGetRgbName, char *, (xpmRgbName *rgbn, int rgbn_max, + int red, int green, int blue)); +FUNC(xpmFreeRgbNames, void, (xpmRgbName *rgbn, int rgbn_max)); +#ifdef FOR_MSW +FUNC(xpmGetRGBfromName,int, (char *name, int *r, int *g, int *b)); +#endif + +FUNC(xpm_xynormalizeimagebits, void, (register unsigned char *bp, + register XImage *img)); +FUNC(xpm_znormalizeimagebits, void, (register unsigned char *bp, + register XImage *img)); + +/* + * Macros + * + * The XYNORMALIZE macro determines whether XY format data requires + * normalization and calls a routine to do so if needed. The logic in + * this module is designed for LSBFirst byte and bit order, so + * normalization is done as required to present the data in this order. + * + * The ZNORMALIZE macro performs byte and nibble order normalization if + * required for Z format data. + * + * The XYINDEX macro computes the index to the starting byte (char) boundary + * for a bitmap_unit containing a pixel with coordinates x and y for image + * data in XY format. + * + * The ZINDEX* macros compute the index to the starting byte (char) boundary + * for a pixel with coordinates x and y for image data in ZPixmap format. + * + */ + +#define XYNORMALIZE(bp, img) \ + if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \ + xpm_xynormalizeimagebits((unsigned char *)(bp), img) + +#define ZNORMALIZE(bp, img) \ + if (img->byte_order == MSBFirst) \ + xpm_znormalizeimagebits((unsigned char *)(bp), img) + +#define XYINDEX(x, y, img) \ + ((y) * img->bytes_per_line) + \ + (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3) + +#define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \ + (((x) * img->bits_per_pixel) >> 3) + +#define ZINDEX32(x, y, img) ((y) * img->bytes_per_line) + ((x) << 2) + +#define ZINDEX16(x, y, img) ((y) * img->bytes_per_line) + ((x) << 1) + +#define ZINDEX8(x, y, img) ((y) * img->bytes_per_line) + (x) + +#define ZINDEX1(x, y, img) ((y) * img->bytes_per_line) + ((x) >> 3) + +#ifdef __STDC__ +#define Const const +#else +#define Const /**/ +#endif + +#ifdef NEED_STRDUP +FUNC(xpmstrdup, char *, (char *s1)); +#else +#undef xpmstrdup +#define xpmstrdup strdup +#endif + +#ifdef NEED_STRCASECMP +FUNC(xpmstrcasecmp, int, (char *s1, char *s2)); +#else +#undef xpmstrcasecmp +#define xpmstrcasecmp strcasecmp +#endif + +FUNC(xpmatoui, unsigned int, + (char *p, unsigned int l, unsigned int *ui_return)); + +#endif + +#ifdef __cplusplus +} /* Close scope of 'extern "C"' declaration which encloses file. */ +#endif + +#endif /* _XpmI_h */ diff --git a/libXm/osx/Xm/XpmP.h b/libXm/osx/Xm/XpmP.h new file mode 100644 index 0000000..3313f8d --- /dev/null +++ b/libXm/osx/Xm/XpmP.h @@ -0,0 +1,543 @@ +/* + * (c) Copyright 1996 Digital Equipment Corporation. + * (c) Copyright 1996 Hewlett-Packard Company. + * (c) Copyright 1996 International Business Machines Corp. + * (c) Copyright 1996 Sun Microsystems, Inc. + * (c) Copyright 1996 Novell, Inc. + * (c) Copyright 1996 FUJITSU LIMITED. + * (c) Copyright 1996 Hitachi. + * + * $XConsortium: XpmP.h /main/3 1996/09/20 08:13:01 pascale $ + */ + +#ifndef _XpmP_h +#define _XpmP_h + +/* Xpm external symbols are prefixed with Xme */ + +#define XpmCreatePixmapFromData XmeXpmCreatePixmapFromData +#define XpmCreateDataFromPixmap XmeXpmCreateDataFromPixmap +#define XpmReadFileToPixmap XmeXpmReadFileToPixmap +#define XpmWriteFileFromPixmap XmeXpmWriteFileFromPixmap +#define XpmCreateImageFromData XmeXpmCreateImageFromData +#define XpmCreateDataFromImage XmeXpmCreateDataFromImage +#define XpmReadFileToImage XmeXpmReadFileToImage +#define XpmWriteFileFromImage XmeXpmWriteFileFromImage +#define XpmCreateImageFromBuffer XmeXpmCreateImageFromBuffer +#define XpmCreatePixmapFromBuffer XmeXpmCreatePixmapFromBuffer +#define XpmCreateBufferFromImage XmeXpmCreateBufferFromImage +#define XpmCreateBufferFromPixmap XmeXpmCreateBufferFromPixmap +#define XpmReadFileToBuffer XmeXpmReadFileToBuffer +#define XpmWriteFileFromBuffer XmeXpmWriteFileFromBuffer +#define XpmReadFileToData XmeXpmReadFileToData +#define XpmWriteFileFromData XmeXpmWriteFileFromData +#define XpmAttributesSize XmeXpmAttributesSize +#define XpmFreeAttributes XmeXpmFreeAttributes +#define XpmFreeExtensions XmeXpmFreeExtensions +#define XpmFreeXpmImage XmeXpmFreeXpmImage +#define XpmFreeXpmInfo XmeXpmFreeXpmInfo +#define XpmGetErrorString XmeXpmGetErrorString +#define XpmLibraryVersion XmeXpmLibraryVersion +#define XpmReadFileToXpmImage XmeXpmReadFileToXpmImage +#define XpmWriteFileFromXpmImage XmeXpmWriteFileFromXpmImage +#define XpmCreatePixmapFromXpmImage XmeXpmCreatePixmapFromXpmImage +#define XpmCreateImageFromXpmImage XmeXpmCreateImageFromXpmImage +#define XpmCreateXpmImageFromImage XmeXpmCreateXpmImageFromImage +#define XpmCreateXpmImageFromPixmap XmeXpmCreateXpmImageFromPixmap +#define XpmCreateDataFromXpmImage XmeXpmCreateDataFromXpmImage +#define XpmCreateXpmImageFromData XmeXpmCreateXpmImageFromData +#define XpmCreateXpmImageFromBuffer XmeXpmCreateXpmImageFromBuffer +#define XpmCreateBufferFromXpmImage XmeXpmCreateBufferFromXpmImage +#define XpmFree XmeXpmFree + +/* The following is the original xpm.h header file */ + +/* + * Copyright (C) 1989-95 GROUPE BULL + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of GROUPE BULL shall not be + * used in advertising or otherwise to promote the sale, use or other dealings + * in this Software without prior written authorization from GROUPE BULL. + */ + +/*****************************************************************************\ +* xpm.h: * +* * +* XPM library * +* Include file * +* * +* Developed by Arnaud Le Hors * +\*****************************************************************************/ + +/* + * The code related to FOR_MSW has been added by + * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94 + */ + +#ifndef XPM_h +#define XPM_h + +/* + * first some identification numbers: + * the version and revision numbers are determined with the following rule: + * SO Major number = LIB minor version number. + * SO Minor number = LIB sub-minor version number. + * e.g: Xpm version 3.2f + * we forget the 3 which is the format number, 2 gives 2, and f gives 6. + * thus we have XpmVersion = 2 and XpmRevision = 6 + * which gives SOXPMLIBREV = 2.6 + * + * Then the XpmIncludeVersion number is built from these numbers. + */ +#define XpmFormat 3 +#define XpmVersion 4 +#define XpmRevision 9 +#define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision) + +#ifndef XPM_NUMBERS + +#ifdef FOR_MSW +# define SYSV /* uses memcpy string.h etc. */ +# include +# include "simx.h" /* defines some X stuff using MSW types */ +#define NEED_STRCASECMP /* at least for MSVC++ */ +#else /* FOR_MSW */ +# include +# include +#endif /* FOR_MSW */ + +/* let's define Pixel if it is not done yet */ +#if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED) +typedef unsigned long Pixel; /* Index into colormap */ +# define PIXEL_ALREADY_TYPEDEFED +#endif + +/* make sure we know whether function prototypes are needed or not */ +#ifndef NeedFunctionPrototypes +# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) +# define NeedFunctionPrototypes 1 +# else +# define NeedFunctionPrototypes 0 +# endif +#endif + + +/* Return ErrorStatus codes: + * null if full success + * positive if partial success + * negative if failure + */ + +#define XpmColorError 1 +#define XpmSuccess 0 +#define XpmOpenFailed -1 +#define XpmFileInvalid -2 +#define XpmNoMemory -3 +#define XpmColorFailed -4 + +typedef struct { + char *name; /* Symbolic color name */ + char *value; /* Color value */ + Pixel pixel; /* Color pixel */ +} XpmColorSymbol; + +typedef struct { + char *name; /* name of the extension */ + unsigned int nlines; /* number of lines in this extension */ + char **lines; /* pointer to the extension array of strings */ +} XpmExtension; + +typedef struct { + char *string; /* characters string */ + char *symbolic; /* symbolic name */ + char *m_color; /* monochrom default */ + char *g4_color; /* 4 level grayscale default */ + char *g_color; /* other level grayscale default */ + char *c_color; /* color default */ +} XpmColor; + +typedef struct { + unsigned int width; /* image width */ + unsigned int height; /* image height */ + unsigned int cpp; /* number of characters per pixel */ + unsigned int ncolors; /* number of colors */ + XpmColor *colorTable; /* list of related colors */ + unsigned int *data; /* image data */ +} XpmImage; + +typedef struct { + unsigned long valuemask; /* Specifies which attributes are defined */ + char *hints_cmt; /* Comment of the hints section */ + char *colors_cmt; /* Comment of the colors section */ + char *pixels_cmt; /* Comment of the pixels section */ + unsigned int x_hotspot; /* Returns the x hotspot's coordinate */ + unsigned int y_hotspot; /* Returns the y hotspot's coordinate */ + unsigned int nextensions; /* number of extensions */ + XpmExtension *extensions; /* pointer to array of extensions */ +} XpmInfo; + +typedef int (*XpmAllocColorFunc)( +#if NeedFunctionPrototypes + Display* /* display */, + Colormap /* colormap */, + char* /* colorname */, + XColor* /* xcolor */, + void* /* closure */ +#endif +); + +typedef int (*XpmFreeColorsFunc)( +#if NeedFunctionPrototypes + Display* /* display */, + Colormap /* colormap */, + Pixel* /* pixels */, + int /* npixels */, + void* /* closure */ +#endif +); + +typedef struct { + unsigned long valuemask; /* Specifies which attributes are + defined */ + + Visual *visual; /* Specifies the visual to use */ + Colormap colormap; /* Specifies the colormap to use */ + unsigned int depth; /* Specifies the depth */ + unsigned int width; /* Returns the width of the created + pixmap */ + unsigned int height; /* Returns the height of the created + pixmap */ + unsigned int x_hotspot; /* Returns the x hotspot's + coordinate */ + unsigned int y_hotspot; /* Returns the y hotspot's + coordinate */ + unsigned int cpp; /* Specifies the number of char per + pixel */ + Pixel *pixels; /* List of used color pixels */ + unsigned int npixels; /* Number of used pixels */ + XpmColorSymbol *colorsymbols; /* List of color symbols to override */ + unsigned int numsymbols; /* Number of symbols */ + char *rgb_fname; /* RGB text file name */ + unsigned int nextensions; /* Number of extensions */ + XpmExtension *extensions; /* List of extensions */ + + unsigned int ncolors; /* Number of colors */ + XpmColor *colorTable; /* List of colors */ +/* 3.2 backward compatibility code */ + char *hints_cmt; /* Comment of the hints section */ + char *colors_cmt; /* Comment of the colors section */ + char *pixels_cmt; /* Comment of the pixels section */ +/* end 3.2 bc */ + unsigned int mask_pixel; /* Color table index of transparent + color */ + + /* Color Allocation Directives */ + Bool exactColors; /* Only use exact colors for visual */ + unsigned int closeness; /* Allowable RGB deviation */ + unsigned int red_closeness; /* Allowable red deviation */ + unsigned int green_closeness; /* Allowable green deviation */ + unsigned int blue_closeness; /* Allowable blue deviation */ + int color_key; /* Use colors from this color set */ + + Pixel *alloc_pixels; /* Returns the list of alloc'ed color + pixels */ + Bool nalloc_pixels; /* Returns the number of alloc'ed + color pixels */ + + Bool alloc_close_colors; /* Specify whether close colors should + be allocated using XAllocColor + or not */ + int bitmap_format; /* Specify the format of 1bit depth + images: ZPixmap or XYBitmap */ + + /* Color functions */ + XpmAllocColorFunc alloc_color; /* Application color allocator */ + XpmFreeColorsFunc free_colors; /* Application color de-allocator */ + void *color_closure; /* Application private data to pass to + alloc_color and free_colors */ + +} XpmAttributes; + +/* XpmAttributes value masks bits */ +#define XpmVisual (1L<<0) +#define XpmColormap (1L<<1) +#define XpmDepth (1L<<2) +#define XpmSize (1L<<3) /* width & height */ +#define XpmHotspot (1L<<4) /* x_hotspot & y_hotspot */ +#define XpmCharsPerPixel (1L<<5) +#define XpmColorSymbols (1L<<6) +#define XpmRgbFilename (1L<<7) +/* 3.2 backward compatibility code */ +#define XpmInfos (1L<<8) +#define XpmReturnInfos XpmInfos +/* end 3.2 bc */ +#define XpmReturnPixels (1L<<9) +#define XpmExtensions (1L<<10) +#define XpmReturnExtensions XpmExtensions + +#define XpmExactColors (1L<<11) +#define XpmCloseness (1L<<12) +#define XpmRGBCloseness (1L<<13) +#define XpmColorKey (1L<<14) + +#define XpmColorTable (1L<<15) +#define XpmReturnColorTable XpmColorTable + +#define XpmReturnAllocPixels (1L<<16) +#define XpmAllocCloseColors (1L<<17) +#define XpmBitmapFormat (1L<<18) + +#define XpmAllocColor (1L<<19) +#define XpmFreeColors (1L<<20) +#define XpmColorClosure (1L<<21) + + +/* XpmInfo value masks bits */ +#define XpmComments XpmInfos +#define XpmReturnComments XpmComments + +/* XpmAttributes mask_pixel value when there is no mask */ +#ifndef FOR_MSW +#define XpmUndefPixel 0x80000000 +#else +/* int is only 16 bit for MSW */ +#define XpmUndefPixel 0x8000 +#endif + +/* + * color keys for visual type, they must fit along with the number key of + * each related element in xpmColorKeys[] defined in XpmI.h + */ +#define XPM_MONO 2 +#define XPM_GREY4 3 +#define XPM_GRAY4 3 +#define XPM_GREY 4 +#define XPM_GRAY 4 +#define XPM_COLOR 5 + + +/* macros for forward declarations of functions with prototypes */ +#if NeedFunctionPrototypes +#define FUNC(f, t, p) extern t f p +#define LFUNC(f, t, p) static t f p +#else +#define FUNC(f, t, p) extern t f() +#define LFUNC(f, t, p) static t f() +#endif + + +/* + * functions declarations + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */ + +#ifndef FOR_MSW + FUNC(XpmCreatePixmapFromData, int, (Display *display, + Drawable d, + char **data, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateDataFromPixmap, int, (Display *display, + char ***data_return, + Pixmap pixmap, + Pixmap shapemask, + XpmAttributes *attributes)); + + FUNC(XpmReadFileToPixmap, int, (Display *display, + Drawable d, + char *filename, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmWriteFileFromPixmap, int, (Display *display, + char *filename, + Pixmap pixmap, + Pixmap shapemask, + XpmAttributes *attributes)); +#endif /* ndef FOR_MSW */ + + FUNC(XpmCreateImageFromData, int, (Display *display, + char **data, + XImage **image_return, + XImage **shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateDataFromImage, int, (Display *display, + char ***data_return, + XImage *image, + XImage *shapeimage, + XpmAttributes *attributes)); + + FUNC(XpmReadFileToImage, int, (Display *display, + char *filename, + XImage **image_return, + XImage **shapeimage_return, + XpmAttributes *attributes)); + + FUNC(XpmWriteFileFromImage, int, (Display *display, + char *filename, + XImage *image, + XImage *shapeimage, + XpmAttributes *attributes)); + + FUNC(XpmCreateImageFromBuffer, int, (Display *display, + char *buffer, + XImage **image_return, + XImage **shapemask_return, + XpmAttributes *attributes)); +#ifndef FOR_MSW + FUNC(XpmCreatePixmapFromBuffer, int, (Display *display, + Drawable d, + char *buffer, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateBufferFromImage, int, (Display *display, + char **buffer_return, + XImage *image, + XImage *shapeimage, + XpmAttributes *attributes)); + + FUNC(XpmCreateBufferFromPixmap, int, (Display *display, + char **buffer_return, + Pixmap pixmap, + Pixmap shapemask, + XpmAttributes *attributes)); +#endif /* ndef FOR_MSW */ + FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return)); + FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer)); + + FUNC(XpmReadFileToData, int, (char *filename, char ***data_return)); + FUNC(XpmWriteFileFromData, int, (char *filename, char **data)); + + FUNC(XpmAttributesSize, int, ()); + FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes)); + FUNC(XpmFreeExtensions, void, (XpmExtension *extensions, + int nextensions)); + + FUNC(XpmFreeXpmImage, void, (XpmImage *image)); + FUNC(XpmFreeXpmInfo, void, (XpmInfo *info)); + FUNC(XpmGetErrorString, char *, (int errcode)); + FUNC(XpmLibraryVersion, int, ()); + + /* XpmImage functions */ + FUNC(XpmReadFileToXpmImage, int, (char *filename, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmWriteFileFromXpmImage, int, (char *filename, + XpmImage *image, + XpmInfo *info)); +#ifndef FOR_MSW + FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display, + Drawable d, + XpmImage *image, + Pixmap *pixmap_return, + Pixmap *shapemask_return, + XpmAttributes *attributes)); +#endif + FUNC(XpmCreateImageFromXpmImage, int, (Display *display, + XpmImage *image, + XImage **image_return, + XImage **shapeimage_return, + XpmAttributes *attributes)); + + FUNC(XpmCreateXpmImageFromImage, int, (Display *display, + XImage *image, + XImage *shapeimage, + XpmImage *xpmimage, + XpmAttributes *attributes)); +#ifndef FOR_MSW + FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display, + Pixmap pixmap, + Pixmap shapemask, + XpmImage *xpmimage, + XpmAttributes *attributes)); +#endif + FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmCreateXpmImageFromData, int, (char **data, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return, + XpmImage *image, + XpmInfo *info)); + + FUNC(XpmFree, void, (void *ptr)); + +#ifdef __cplusplus +} /* for C++ V2.0 */ +#endif + + +/* backward compatibility */ + +/* for version 3.0c */ +#define XpmPixmapColorError XpmColorError +#define XpmPixmapSuccess XpmSuccess +#define XpmPixmapOpenFailed XpmOpenFailed +#define XpmPixmapFileInvalid XpmFileInvalid +#define XpmPixmapNoMemory XpmNoMemory +#define XpmPixmapColorFailed XpmColorFailed + +#define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \ + XpmReadFileToPixmap(dpy, d, file, pix, mask, att) +#define XpmWritePixmapFile(dpy, file, pix, mask, att) \ + XpmWriteFileFromPixmap(dpy, file, pix, mask, att) + +/* for version 3.0b */ +#define PixmapColorError XpmColorError +#define PixmapSuccess XpmSuccess +#define PixmapOpenFailed XpmOpenFailed +#define PixmapFileInvalid XpmFileInvalid +#define PixmapNoMemory XpmNoMemory +#define PixmapColorFailed XpmColorFailed + +#define ColorSymbol XpmColorSymbol + +#define XReadPixmapFile(dpy, d, file, pix, mask, att) \ + XpmReadFileToPixmap(dpy, d, file, pix, mask, att) +#define XWritePixmapFile(dpy, file, pix, mask, att) \ + XpmWriteFileFromPixmap(dpy, file, pix, mask, att) +#define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \ + XpmCreatePixmapFromData(dpy, d, data, pix, mask, att) +#define XCreateDataFromPixmap(dpy, data, pix, mask, att) \ + XpmCreateDataFromPixmap(dpy, data, pix, mask, att) + +#endif /* XPM_NUMBERS */ +#endif + +#endif /* _XpmP_h */ diff --git a/libXm/osx/Xm/xmlist.h b/libXm/osx/Xm/xmlist.h new file mode 100644 index 0000000..85726ee --- /dev/null +++ b/libXm/osx/Xm/xmlist.h @@ -0,0 +1,175 @@ +/* + * Copyright 1991, Integrated Computer Solutions, Inc. + * + * All Rights Reserved. + * + * AUTHOR: Chris D. Peterson + * + * This file contains all routines for dealing with the hierarchy + * browser when shown as a tree or outline. + */ + +#ifndef _LIST_H +#define _LIST_H + +#if defined(VMS) || defined (__VMS) +#include +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************ + * + * Stack Data structure. + * + ************************************************************/ + +typedef struct _XmStackRec { + int top, alloc; /* The top node of the stack, and the number + of allocated nodes. */ + XtPointer * elems; /* The stack elements. */ +} XmStackRec, *XmStack; + +/************************************************************ + * + * Global function defs. + * + ************************************************************/ + +XmStack _XmStackInit(void); +void _XmStackFree(XmStack), _XmStackPush(XmStack, XtPointer); +XtPointer _XmStackPop(XmStack); + +/************************************************************ + * + * Queue Data structure. + * + ************************************************************/ + +typedef struct __XmQElem { + struct __XmQElem *next, *prev; /* doubly linked list. */ + XtPointer data; /* The data associated with this element. */ + Boolean alloced; +} _XmQElem; + +typedef struct _XmQueueRec { + _XmQElem *first, *last; /* the first and last elements. */ + _XmQElem *free_elems; /* Unused elements. */ +} XmQueueRec, *XmQueue; + +/************************************************************ + * + * Global function defs. + * + ************************************************************/ + +XmQueue _XmQueueInit(void); +void _XmQueueFree(XmQueue), _XmQueuePush(XmQueue, XtPointer); +XtPointer _XmQueuePop(XmQueue); +int _XmQueueCount(XmQueue); + +/* + * Internal functions used only by other parts of the utils library. + */ + +void _Xm_AddQueue(XmQueue, _XmQElem *, _XmQElem *); +_XmQElem * _Xm_RemQueue(_XmQElem **); +_XmQElem * _Xm_GetNewElement(XmQueue); + +/************************************************************ + * + * New types. + * + ************************************************************/ + +typedef _XmQElem XmListElem; +typedef XmQueueRec *XmList; +typedef Boolean (*XmListFunc)(XmListElem *, XtPointer); + +/************************************************************ + * + * Macros. + * + ************************************************************/ + +#define XmListElemNext(elem) (elem)->next +#define XmListElemPrev(elem) (elem)->prev +#define XmListElemData(elem) (elem)->data + +#define XmListFirst(list) (list)->first +#define XmListLast(list) (list)->last + +/************************************************************ + * + * Global function defs. + * + ************************************************************/ + +void _XmListFree(XmList), _XmListRemove(XmList, XmListElem *); + +XmListElem * _XmListAddAfter(XmList, XmListElem *, XtPointer); +XmListElem * _XmListAddBefore(XmList, XmListElem *, XtPointer); + +XmList _XmListInit(void); + +int _XmListCount(XmList); + +XmListElem *_XmListExec(XmList, XmListElem *, XmListElem *, XmListFunc, XtPointer); + +#ifdef __cplusplus +} /* Closes scope of 'extern "C"' declaration */ +#endif + +#if defined(VMS) || defined (__VMS) +#include +#endif + +/* #ifdef XmRENAME_WIDGETS */ +/* #define USE_OLD_NAMES */ +/* #endif */ + +#ifdef USE_OLD_NAMES + +#define ListAddAfter _XmListAddAfter +#define ListAddBefore _XmListAddBefore +#define ListCount _XmListCount +#define ListExec _XmListExec +#define ListFree _XmListFree +#define ListInit _XmListInit +#define ListRemove _XmListRemove +#define QueueCount _XmQueueCount +#define QueueFree _XmQueueFree +#define QueueInit _XmQueueInit +#define QueuePop _XmQueuePop +#define QueuePush _XmQueuePush +#define StackFree _XmStackFree +#define StackInit _XmStackInit +#define StackPop _XmStackPop +#define StackPush _XmStackPush +#define _AddQueue _Xm_AddQueue +#define _GetNewElement _Xm_GetNewElement +#define _RemQueue _Xm_RemQueue + +#define Stack XmStack +#define StackRec XmStackRec +#define QElem _XmQElem +#define QueueRec XmQueueRec +#define Queue XmQueue +#define ListElem XmListElem +#define List XmList +#define ListFunc XmListFunc + +#define ListElemNext XmListElemNext +#define ListElemPrev XmListElemPrev +#define ListElemData XmListElemData +#define ListFirst XmListFirst +#define ListLast XmListLast + +#endif /* USE_OLD_NAMES */ + +#endif /* _LIST_H */ diff --git a/libXm/osx/libXm.a b/libXm/osx/libXm.a new file mode 100644 index 0000000..c621117 Binary files /dev/null and b/libXm/osx/libXm.a differ diff --git a/libastro/._Makefile b/libastro/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._Makefile differ diff --git a/libastro/._aa_hadec.c b/libastro/._aa_hadec.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._aa_hadec.c differ diff --git a/libastro/._aberration.c b/libastro/._aberration.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._aberration.c differ diff --git a/libastro/._actan.c b/libastro/._actan.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._actan.c differ diff --git a/libastro/._airmass.c b/libastro/._airmass.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._airmass.c differ diff --git a/libastro/._anomaly.c b/libastro/._anomaly.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._anomaly.c differ diff --git a/libastro/._ap_as.c b/libastro/._ap_as.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._ap_as.c differ diff --git a/libastro/._astro.h b/libastro/._astro.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._astro.h differ diff --git a/libastro/._atlas.c b/libastro/._atlas.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._atlas.c differ diff --git a/libastro/._auxil.c b/libastro/._auxil.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._auxil.c differ diff --git a/libastro/._bdl.c b/libastro/._bdl.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._bdl.c differ diff --git a/libastro/._bdl.h b/libastro/._bdl.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._bdl.h differ diff --git a/libastro/._chap95.c b/libastro/._chap95.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._chap95.c differ diff --git a/libastro/._chap95.h b/libastro/._chap95.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._chap95.h differ diff --git a/libastro/._chap95_data.c b/libastro/._chap95_data.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._chap95_data.c differ diff --git a/libastro/._circum.c b/libastro/._circum.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._circum.c differ diff --git a/libastro/._comet.c b/libastro/._comet.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._comet.c differ diff --git a/libastro/._constel.c b/libastro/._constel.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._constel.c differ diff --git a/libastro/._dbfmt.c b/libastro/._dbfmt.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._dbfmt.c differ diff --git a/libastro/._deep.c b/libastro/._deep.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._deep.c differ diff --git a/libastro/._deepconst.h b/libastro/._deepconst.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._deepconst.h differ diff --git a/libastro/._deltat.c b/libastro/._deltat.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._deltat.c differ diff --git a/libastro/._descrip.mms b/libastro/._descrip.mms new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/libastro/._descrip.mms differ diff --git a/libastro/._earthsat.c b/libastro/._earthsat.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._earthsat.c differ diff --git a/libastro/._eq_ecl.c b/libastro/._eq_ecl.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._eq_ecl.c differ diff --git a/libastro/._eq_gal.c b/libastro/._eq_gal.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._eq_gal.c differ diff --git a/libastro/._formats.c b/libastro/._formats.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._formats.c differ diff --git a/libastro/._helio.c b/libastro/._helio.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._helio.c differ diff --git a/libastro/._jupmoon.c b/libastro/._jupmoon.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._jupmoon.c differ diff --git a/libastro/._libration.c b/libastro/._libration.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._libration.c differ diff --git a/libastro/._magdecl.c b/libastro/._magdecl.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._magdecl.c differ diff --git a/libastro/._marsmoon.c b/libastro/._marsmoon.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._marsmoon.c differ diff --git a/libastro/._misc.c b/libastro/._misc.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._misc.c differ diff --git a/libastro/._mjd.c b/libastro/._mjd.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._mjd.c differ diff --git a/libastro/._moon.c b/libastro/._moon.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._moon.c differ diff --git a/libastro/._mooncolong.c b/libastro/._mooncolong.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._mooncolong.c differ diff --git a/libastro/._moonnf.c b/libastro/._moonnf.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._moonnf.c differ diff --git a/libastro/._nutation.c b/libastro/._nutation.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._nutation.c differ diff --git a/libastro/._obliq.c b/libastro/._obliq.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._obliq.c differ diff --git a/libastro/._parallactic.c b/libastro/._parallactic.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._parallactic.c differ diff --git a/libastro/._parallax.c b/libastro/._parallax.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._parallax.c differ diff --git a/libastro/._plans.c b/libastro/._plans.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._plans.c differ diff --git a/libastro/._plmoon.c b/libastro/._plmoon.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._plmoon.c differ diff --git a/libastro/._plshadow.c b/libastro/._plshadow.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._plshadow.c differ diff --git a/libastro/._precess.c b/libastro/._precess.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._precess.c differ diff --git a/libastro/._preferences.h b/libastro/._preferences.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._preferences.h differ diff --git a/libastro/._reduce.c b/libastro/._reduce.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._reduce.c differ diff --git a/libastro/._refract.c b/libastro/._refract.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._refract.c differ diff --git a/libastro/._rings.c b/libastro/._rings.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._rings.c differ diff --git a/libastro/._riset.c b/libastro/._riset.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._riset.c differ diff --git a/libastro/._riset_cir.c b/libastro/._riset_cir.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._riset_cir.c differ diff --git a/libastro/._satlib.h b/libastro/._satlib.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._satlib.h differ diff --git a/libastro/._satmoon.c b/libastro/._satmoon.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._satmoon.c differ diff --git a/libastro/._satspec.h b/libastro/._satspec.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._satspec.h differ diff --git a/libastro/._sattypes.h b/libastro/._sattypes.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._sattypes.h differ diff --git a/libastro/._sdp4.c b/libastro/._sdp4.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._sdp4.c differ diff --git a/libastro/._sgp4.c b/libastro/._sgp4.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._sgp4.c differ diff --git a/libastro/._sphcart.c b/libastro/._sphcart.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._sphcart.c differ diff --git a/libastro/._sun.c b/libastro/._sun.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._sun.c differ diff --git a/libastro/._thetag.c b/libastro/._thetag.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._thetag.c differ diff --git a/libastro/._twobody.c b/libastro/._twobody.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._twobody.c differ diff --git a/libastro/._umoon.c b/libastro/._umoon.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._umoon.c differ diff --git a/libastro/._utc_gst.c b/libastro/._utc_gst.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._utc_gst.c differ diff --git a/libastro/._vector.h b/libastro/._vector.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._vector.h differ diff --git a/libastro/._vsop87.c b/libastro/._vsop87.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._vsop87.c differ diff --git a/libastro/._vsop87.h b/libastro/._vsop87.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._vsop87.h differ diff --git a/libastro/._vsop87_data.c b/libastro/._vsop87_data.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libastro/._vsop87_data.c differ diff --git a/libastro/Makefile b/libastro/Makefile new file mode 100644 index 0000000..b1ab0bf --- /dev/null +++ b/libastro/Makefile @@ -0,0 +1,96 @@ +# Makefile for the basic astronomy routines. +# The idea is to compile and archive them into libastro.a + +# compiler and flags + +# gcc +CC = gcc +CFLAGS= -O2 -Wall + +# macosx universal binary +# CFLAGS= -O2 -Wall -arch i386 -arch ppc + +# solaris +# CC = cc +# CFLAGS= -O + +# AIX +# CC = xlc +# CFLAGS= -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -Aa -fast + +HS = astro.h bdl.h chap95.h deepconst.h preferences.h satlib.h satspec.h \ + sattypes.h vector.h vsop87.h + +OBJS = \ + aa_hadec.o \ + aberration.o \ + actan.o \ + airmass.o \ + anomaly.o \ + ap_as.o \ + atlas.o \ + auxil.o \ + bdl.o \ + chap95.o \ + chap95_data.o \ + circum.o \ + comet.o \ + constel.o \ + dbfmt.o \ + deep.o \ + deltat.o \ + earthsat.o \ + eq_ecl.o \ + eq_gal.o \ + formats.o \ + helio.o \ + jupmoon.o \ + libration.o \ + magdecl.o \ + marsmoon.o \ + misc.o \ + mjd.o \ + moon.o \ + mooncolong.o \ + moonnf.o \ + nutation.o \ + obliq.o \ + parallax.o \ + parallactic.o \ + plans.o \ + plmoon.o \ + plshadow.o \ + precess.o \ + reduce.o \ + refract.o \ + rings.o \ + riset.o \ + riset_cir.o \ + satmoon.o \ + sdp4.o \ + sgp4.o \ + sphcart.o \ + sun.o \ + thetag.o \ + utc_gst.o \ + umoon.o \ + twobody.o \ + vsop87.o \ + vsop87_data.o + +libastro.a: $(HS) $(OBJS) + ar rv $@ $(OBJS) + ranlib $@ + +libastro.so: $(HS) $(OBJS) + $(CC) -shared -o $@ $(OBJS) + +clobber: + rm -f *.o libastro.a + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2006/02/24 03:37:19 $ $Revision: 1.30 $ $Name: $ diff --git a/libastro/aa_hadec.c b/libastro/aa_hadec.c new file mode 100644 index 0000000..29a2b6e --- /dev/null +++ b/libastro/aa_hadec.c @@ -0,0 +1,77 @@ +/* function to convert between alt/az and ha/dec. + */ + +#include +#include + +#include "astro.h" + +static void aaha_aux (double lt, double x, double y, double *p, double *q); + +/* given geographical latitude (n+, radians), lt, altitude (up+, radians), + * alt, and azimuth (angle round to the east from north+, radians), + * return hour angle (radians), ha, and declination (radians), dec. + */ +void +aa_hadec ( +double lt, +double alt, double az, +double *ha, double *dec) +{ + aaha_aux (lt, az, alt, ha, dec); + if (*ha > PI) + *ha -= 2*PI; +} + +/* given geographical (n+, radians), lt, hour angle (radians), ha, and + * declination (radians), dec, return altitude (up+, radians), alt, and + * azimuth (angle round to the east from north+, radians), + */ +void +hadec_aa ( +double lt, +double ha, double dec, +double *alt, double *az) +{ + aaha_aux (lt, ha, dec, az, alt); +} + +#ifdef NEED_GEOC +/* given a geographic (surface-normal) latitude, phi, return the geocentric + * latitude, psi. + */ +double +geoc_lat ( +double phi) +{ +#define MAXLAT degrad(89.9999) /* avoid tan() greater than this */ + return (fabs(phi)>MAXLAT ? phi : atan(tan(phi)/1.00674)); +} +#endif + +/* the actual formula is the same for both transformation directions so + * do it here once for each way. + * N.B. all arguments are in radians. + */ +static void +aaha_aux ( +double lt, +double x, double y, +double *p, double *q) +{ + static double last_lt = -3434, slt, clt; + double cap, B; + + if (lt != last_lt) { + slt = sin(lt); + clt = cos(lt); + last_lt = lt; + } + + solve_sphere (-x, PI/2-y, slt, clt, &cap, &B); + *p = B; + *q = PI/2 - acos(cap); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: aa_hadec.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/aberration.c b/libastro/aberration.c new file mode 100644 index 0000000..af55df3 --- /dev/null +++ b/libastro/aberration.c @@ -0,0 +1,161 @@ +/* aberration, Jean Meeus, "Astronomical Algorithms", Willman-Bell, 1995; + * based on secular unperturbed Kepler orbit + * + * the corrections should be applied to ra/dec and lam/beta at the + * epoch of date. + */ + +#include +#include +#include + +#include "astro.h" + +#define ABERR_CONST (20.49552/3600./180.*PI) /* aberr const in rad */ +#define AB_ECL_EOD 0 +#define AB_EQ_EOD 1 + +static void ab_aux (double mj, double *x, double *y, double lsn, int mode); + +/* apply aberration correction to ecliptical coordinates *lam and *bet + * (in radians) for a given time m and handily supplied longitude of sun, + * lsn (in radians) + */ +void +ab_ecl (double mj, double lsn, double *lam, double *bet) +{ + ab_aux(mj, lam, bet, lsn, AB_ECL_EOD); +} + +/* apply aberration correction to equatoreal coordinates *ra and *dec + * (in radians) for a given time m and handily supplied longitude of sun, + * lsn (in radians) + */ +void +ab_eq (double mj, double lsn, double *ra, double *dec) +{ +#if defined(USE_MEEUS_AB_EQ) + + /* this claims to account for earth orbit excentricity and is also + * smooth clear to dec=90 but it does not work well backwards with + * ap_as() + */ + ab_aux(mj, ra, dec, lsn, AB_EQ_EOD); + +#else /* use Montenbruck */ + + /* this agrees with Meeus to within 0.2 arcsec until dec gets larger + * than about 89.9, then grows to 1as at 89.97. but it works very + * smoothly with ap_as + */ + double x, y, z; /* equatorial rectangular coords */ + double vx, vy, vz; /* aberration velocity in rectangular coords */ + double L; /* helio long of earth */ + double cL; + double r; + + + sphcart (*ra, *dec, 1.0, &x, &y, &z); + + L = 2*PI*(0.27908 + 100.00214*(mj-J2000)/36525.0); + cL = cos(L); + vx = -0.994e-4*sin(L); + vy = 0.912e-4*cL; + vz = 0.395e-4*cL; + x += vx; + y += vy; + z += vz; + + cartsph (x, y, z, ra, dec, &r); + +#endif +} + +/* because the e-terms are secular, keep the real transformation for both + * coordinate systems in here with the secular variables cached. + * mode == AB_ECL_EOD: x = lam, y = bet (ecliptical) + * mode == AB_EQ_EOD: x = ra, y = dec (equatoreal) + */ +static void +ab_aux (double mj, double *x, double *y, double lsn, int mode) +{ + static double lastmj = -10000; + static double eexc; /* earth orbit excentricity */ + static double leperi; /* ... and longitude of perihelion */ + static char dirty = 1; /* flag for cached trig terms */ + + if (mj != lastmj) { + double T; /* centuries since J2000 */ + + T = (mj - J2000)/36525.; + eexc = 0.016708617 - (42.037e-6 + 0.1236e-6 * T) * T; + leperi = degrad(102.93735 + (0.71953 + 0.00046 * T) * T); + lastmj = mj; + dirty = 1; + } + + switch (mode) { + case AB_ECL_EOD: /* ecliptical coords */ + { + double *lam = x, *bet = y; + double dlsun, dlperi; + + dlsun = lsn - *lam; + dlperi = leperi - *lam; + + /* valid only for *bet != +-PI/2 */ + *lam -= ABERR_CONST/cos(*bet) * (cos(dlsun) - + eexc*cos(dlperi)); + *bet -= ABERR_CONST*sin(*bet) * (sin(dlsun) - + eexc*sin(dlperi)); + } + break; + + case AB_EQ_EOD: /* equatoreal coords */ + { + double *ra = x, *dec = y; + double sr, cr, sd, cd, sls, cls;/* trig values coords */ + static double cp, sp, ce, se; /* .. and perihel/eclipic */ + double dra, ddec; /* changes in ra and dec */ + + if (dirty) { + double eps; + + cp = cos(leperi); + sp = sin(leperi); + obliquity(mj, &eps); + se = sin(eps); + ce = cos(eps); + dirty = 0; + } + + sr = sin(*ra); + cr = cos(*ra); + sd = sin(*dec); + cd = cos(*dec); + sls = sin(lsn); + cls = cos(lsn); + + dra = ABERR_CONST/cd * ( -(cr * cls * ce + sr * sls) + + eexc * (cr * cp * ce + sr * sp)); + + ddec = se/ce * cd - sr * sd; /* tmp use */ + ddec = ABERR_CONST * ( -(cls * ce * ddec + cr * sd * sls) + + eexc * (cp * ce * ddec + cr * sd * sp) ); + + *ra += dra; + *dec += ddec; + radecrange (ra, dec); + } + break; + + default: + printf ("ab_aux: bad mode: %d\n", mode); + abort(); + break; + + } /* switch (mode) */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: aberration.c,v $ $Date: 2006/08/28 00:22:26 $ $Revision: 1.6 $ $Name: $"}; diff --git a/libastro/actan.c b/libastro/actan.c new file mode 100644 index 0000000..a04725b --- /dev/null +++ b/libastro/actan.c @@ -0,0 +1,67 @@ +#include + +/* @(#) $Id: actan.c,v 1.3 2001/01/10 16:32:21 ecdowney Exp $ */ + +/* commonly in math.h, but not in strict ANSI C */ +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#endif + +double +actan(double sinx, double cosx) +{ + double ret; + + ret = 0.0; + if(cosx < 0.0) { + ret = M_PI; + } else if(cosx == 0.0) { + if(sinx < 0.0) { + return 3.0 * M_PI_2; + } else if(sinx == 0.0) { + return ret; + } else /* sinx > 0.0 */ { + return M_PI_2; + } + } else /* cosx > 0.0 */ { + if(sinx < 0.0) { + ret = 2.0 * M_PI; + } else if(sinx == 0.0) { + return ret; + } + } + + return ret + atan(sinx / cosx); +} + + +#if 0 + +#define D(X) (180.0 * (X) / M_PI) + +void main() { + double a, b; + + a = 0.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 1.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = 1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = 0.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = -1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 2.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 1.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = 0.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -1.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = -2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = -1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = 0.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = 1.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -2.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); + a = -1.0; b = 2.0; printf("actan(%f, %f) = %f\n", a, b, D(actan(a, b))); +} + +#endif /* 0 */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: actan.c,v $ $Date: 2001/01/10 16:32:21 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/airmass.c b/libastro/airmass.c new file mode 100644 index 0000000..a5d046f --- /dev/null +++ b/libastro/airmass.c @@ -0,0 +1,26 @@ +#include + +#include "astro.h" + +/* given apparent altitude find airmass. + * R.H. Hardie, 1962, `Photoelectric Reductions', Chapter 8 of Astronomical + * Techniques, W.A. Hiltner (Ed), Stars and Stellar Systems, II (University + * of Chicago Press: Chicago), pp178-208. + */ +void +airmass ( +double aa, /* apparent altitude, rads */ +double *Xp) /* airmasses */ +{ + double sm1; /* secant zenith angle, minus 1 */ + + /* degenerate near or below horizon */ + if (aa < degrad(3.0)) + aa = degrad(3.0); + + sm1 = 1.0/sin(aa) - 1.0; + *Xp = 1.0 + sm1*(0.9981833 - sm1*(0.002875 + 0.0008083*sm1)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: airmass.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/anomaly.c b/libastro/anomaly.c new file mode 100644 index 0000000..c6bc8eb --- /dev/null +++ b/libastro/anomaly.c @@ -0,0 +1,63 @@ +/* improved by rclark@lpl.arizona.edu (Richard Clark) */ + +#include +#include + +#include "astro.h" + + +#define TWOPI (2*PI) +#define STOPERR (1e-8) + +/* given the mean anomaly, ma, and the eccentricity, s, of elliptical motion, + * find the true anomaly, *nu, and the eccentric anomaly, *ea. + * all angles in radians. + */ +void +anomaly (double ma, double s, double *nu, double *ea) +{ + double m, fea, corr; + + if (s < 1.0) { + /* elliptical */ + double dla; + + m = ma-TWOPI*(long)(ma/TWOPI); + if (m > PI) m -= TWOPI; + if (m < -PI) m += TWOPI; + fea = m; + + for (;;) { + dla = fea-(s*sin(fea))-m; + if (fabs(dla).97 and M near 0*/ + corr = 1-(s*cos(fea)); + if (corr < .1) corr = .1; + dla /= corr; + fea -= dla; + } + *nu = 2*atan(sqrt((1+s)/(1-s))*tan(fea/2)); + } else { + /* hyperbolic */ + double fea1; + + m = fabs(ma); + fea = m / (s-1.); + fea1 = pow(6*m/(s*s),1./3.); + /* whichever is smaller is the better initial guess */ + if (fea1 < fea) fea = fea1; + + corr = 1; + while (fabs(corr) > STOPERR) { + corr = (m - s * sinh(fea) + fea) / (s*cosh(fea) - 1); + fea += corr; + } + if (ma < 0.) fea = -fea; + *nu = 2*atan(sqrt((s+1)/(s-1))*tanh(fea/2)); + } + *ea = fea; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: anomaly.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/ap_as.c b/libastro/ap_as.c new file mode 100644 index 0000000..64619fe --- /dev/null +++ b/libastro/ap_as.c @@ -0,0 +1,68 @@ +#include +#include + +#include "astro.h" + +/* convert the given apparent RA/Dec to astrometric precessed to Mjd IN PLACE. + * we have no un-abberation etc so to find the correction: assume + * *rap and *decp are astrometric@EOD, convert to apparent and back out + * the difference; then precess to Mjd. + */ +void +ap_as (Now *np, double Mjd, double *rap, double *decp) +{ + double r0 = *rap, d0 = *decp; + Obj o; + Now n; + + /* as -> ap */ + zero_mem ((void *)&o, sizeof(o)); + o.o_type = FIXED; + o.f_RA = (float)*rap; + o.f_dec = (float)*decp; + o.f_epoch = (float)mjd; + memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + obj_cir (&n, &o); + *rap -= o.s_ra - *rap; + *decp -= o.s_dec - *decp; + + /* then back to start for second order correction */ + o.o_type = FIXED; + o.f_RA = (float)*rap; + o.f_dec = (float)*decp; + o.f_epoch = (float)mjd; + memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + obj_cir (&n, &o); + *rap -= o.s_ra - r0; + *decp -= o.s_dec - d0; + + radecrange (rap, decp); + precess (mjd, Mjd, rap, decp); + radecrange (rap, decp); +} + +/* convert the given astrometric RA/Dec which are precessed to Mjd into + * apparent @ EOD IN PLACE. + */ +void +as_ap (Now *np, double Mjd, double *rap, double *decp) +{ + Obj o; + Now n; + + zero_mem ((void *)&o, sizeof(o)); + o.o_type = FIXED; + o.f_RA = (float)*rap; + o.f_dec = (float)*decp; + o.f_epoch = (float)Mjd; + memcpy ((void *)&n, (void *)np, sizeof(Now)); + n.n_epoch = EOD; + obj_cir (&n, &o); + *rap = o.s_ra; + *decp = o.s_dec; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: ap_as.c,v $ $Date: 2006/08/28 00:20:58 $ $Revision: 1.8 $ $Name: $"}; diff --git a/libastro/astro.h b/libastro/astro.h new file mode 100644 index 0000000..3a6cee3 --- /dev/null +++ b/libastro/astro.h @@ -0,0 +1,810 @@ +#ifndef _ASTRO_H +#define _ASTRO_H + +#include + +#ifndef PI +#define PI 3.141592653589793 +#endif + +/* conversions among hours (of ra), degrees and radians. */ +#define degrad(x) ((x)*PI/180.) +#define raddeg(x) ((x)*180./PI) +#define hrdeg(x) ((x)*15.) +#define deghr(x) ((x)/15.) +#define hrrad(x) degrad(hrdeg(x)) +#define radhr(x) deghr(raddeg(x)) + +/* ratio of from synodic (solar) to sidereal (stellar) rate */ +#define SIDRATE .9972695677 + +/* manifest names for planets. + * N.B. must coincide with usage in pelement.c and plans.c. + * N.B. only the first 8 are valid for use with plans(). + */ +typedef enum { + MERCURY, + VENUS, + MARS, + JUPITER, + SATURN, + URANUS, + NEPTUNE, + PLUTO, + SUN, + MOON, + NOBJ /* total number of basic objects */ +} PLCode; + +/* moon constants for pl_moon */ +typedef enum { + X_PLANET = 0, /* use to mean planet itself */ + PHOBOS = NOBJ, DEIMOS, + IO, EUROPA, GANYMEDE, CALLISTO, + MIMAS, ENCELADUS, TETHYS, DIONE, RHEA, TITAN, HYPERION, IAPETUS, + ARIEL, UMBRIEL, TITANIA, OBERON, MIRANDA, + NBUILTIN +} MCode; + +/* starting point for MJD calculations + */ +#define MJD0 2415020.0 +#define J2000 (2451545.0 - MJD0) /* yes, 2000 January 1 at 12h */ + +/* the Now and Obj typedefs. + * also, a few miscellaneous constants and declarations. + */ + +#define SPD (24.0*3600.0) /* seconds per day */ +#define MAU (1.4959787e11) /* m / au */ +#define LTAU 499.005 /* seconds light takes to travel 1 AU */ +#define ERAD (6.37816e6) /* earth equitorial radius, m */ +#define MRAD (1.740e6) /* moon equitorial radius, m */ +#define SRAD (6.95e8) /* sun equitorial radius, m */ +#define FTPM 3.28084 /* ft per m */ +#define ESAT_MAG 2 /* default satellite magnitude */ +#define FAST_SAT_RPD 0.25 /* max earth sat rev/day considered "fast" */ + +#define EOD (-9786) /* special epoch flag: use epoch of date */ + +/* info about the local observing circumstances and misc preferences */ +typedef struct { + double n_mjd; /* modified Julian date, ie, days since + * Jan 0.5 1900 (== 12 noon, Dec 30, 1899), utc. + * enough precision to get well better than 1 second. + * N.B. if not first member, must move NOMJD inits. + */ + double n_lat; /* geographic (surface-normal) lt, >0 north, rads */ + double n_lng; /* longitude, >0 east, rads */ + double n_tz; /* time zone, hrs behind UTC */ + double n_temp; /* atmospheric temp, degrees C */ + double n_pressure; /* atmospheric pressure, mBar */ + double n_elev; /* elevation above sea level, earth radii */ + double n_dip; /* dip of sun below hzn at twilight, >0 below, rads */ + double n_epoch; /* desired precession display ep as an mjd, or EOD */ + char n_tznm[8]; /* time zone name; 7 chars or less, always 0 at end */ +} Now; + +/* handy shorthands for fields in a Now pointer, np */ +#define mjd np->n_mjd +#define lat np->n_lat +#define lng np->n_lng +#define tz np->n_tz +#define temp np->n_temp +#define pressure np->n_pressure +#define elev np->n_elev +#define dip np->n_dip +#define epoch np->n_epoch +#define tznm np->n_tznm +#define mjed mm_mjed(np) + +/* structures to describe objects of various types. + */ + +/* magnitude values in two different systems */ +typedef struct { + float m1, m2; /* either g/k or H/G, depending on... */ + int whichm; /* one of MAG_gk or MAG_HG */ +} Mag; + +/* whichm */ +#define MAG_HG 0 /* using 0 makes HG the initial default */ +#define MAG_gk 1 + +/* we actually store magnitudes times this scale factor in a short int */ +#define MAGSCALE 100.0 +#define set_smag(op,m) ((op)->s_mag = (short)floor((m)*MAGSCALE + 0.5)) +#define set_fmag(op,m) ((op)->f_mag = (short)floor((m)*MAGSCALE + 0.5)) +#define get_mag(op) ((op)->s_mag / MAGSCALE) +#define get_fmag(op) ((op)->f_mag / MAGSCALE) + +/* longest object name, including trailing '\0' */ +#define MAXNM 21 + +typedef unsigned char ObjType_t; +typedef unsigned char ObjAge_t; +typedef unsigned char byte; + +/* Obj is a massive union. + * many fields are in common so we use macros to make things a little easier. + */ + +/* fields common to *all* structs in the Obj union */ +#define OBJ_COMMON_FLDS \ + ObjType_t co_type; /* current object type; see flags, below */ \ + byte co_flags; /* FUSER*... used by others */ \ + ObjAge_t co_age; /* update aging code; see db.c */ \ + char co_name[MAXNM];/* name, including \0 */ \ + float co_ra; /* geo/topo app/mean ra, rads */ \ + float co_dec; /* geo/topo app/mean dec, rads */ \ + float co_gaera; /* geo apparent ra, rads */ \ + float co_gaedec; /* geo apparent dec, rads */ \ + float co_az; /* azimuth, >0 e of n, rads */ \ + float co_alt; /* altitude above topocentric horizon, rads */ \ + float co_elong; /* angular sep btwen obj and sun, >0 E, degs */ \ + float co_size; /* angular size, arc secs */ \ + short co_mag /* visual magnitude * MAGSCALE */ + +/* fields common to all solar system objects in the Obj union */ +#define OBJ_SOLSYS_FLDS \ + OBJ_COMMON_FLDS; /* all the fixed ones plus ... */ \ + float so_sdist; /* dist from object to sun, au */ \ + float so_edist; /* dist from object to earth, au */ \ + float so_hlong; /* heliocentric longitude, rads */ \ + float so_hlat; /* heliocentric latitude, rads */ \ + float so_phase /* phase, % */ + +/* fields common to all fixed objects in the Obj union */ +#define OBJ_FIXED_FLDS \ + char fo_spect[2]; /* spectral codes, if appropriate */ \ + float fo_epoch; /* eq of ra/dec and time when pm=0; mjd */ \ + float fo_ra; /* ra, rads, in epoch frame */ \ + float fo_dec; /* dec, rads, in epoch frame */ \ + float fo_pmra; /* ra proper motion, rads/day/cos(dec) */ \ + float fo_pmdec; /* dec proper motion, rads/day */ \ + char fo_class /* object class */ + +/* a generic object */ +typedef struct { + OBJ_COMMON_FLDS; +} ObjAny; + +/* a generic sol system object */ +typedef struct { + OBJ_SOLSYS_FLDS; +} ObjSS; + +/* basic Fixed object info. + */ +typedef struct { + OBJ_COMMON_FLDS; + OBJ_FIXED_FLDS; + + /* following are for galaxies */ + byte fo_ratio; /* minor/major diameter ratio. use s/get_ratio() */ + byte fo_pa; /* position angle, E of N, rads. use s/get_pa() */ +} ObjF; + +/* true-orbit parameters of binary-star object type */ +typedef struct { + float bo_T; /* epoch of periastron, years */ + float bo_e; /* eccentricity */ + float bo_o; /* argument of periastron, degress */ + float bo_O; /* longitude of node, degrees */ + float bo_i; /* inclination to plane of sky, degrees */ + float bo_a; /* semi major axis, arc secs */ + float bo_P; /* period, years */ + + /* companion position, computed by obj_cir() iff b_2compute */ + float bo_pa; /* position angle @ ep, rads E of N */ + float bo_sep; /* separation @ ep, arc secs */ + float bo_ra; /* geo/topo app/mean ra, rads */ + float bo_dec; /* geo/topo app/mean dec, rads */ +} BinOrbit; +typedef struct { + float bp_ep; /* epoch of pa/sep, year */ + float bp_pa; /* position angle @ ep, rads E of N */ + float bp_sep; /* separation @ ep, arc secs */ + + /* companion position, computed by obj_cir() iff b_2compute */ + float bp_ra; /* geo/topo app/mean ra, rads */ + float bp_dec; /* geo/topo app/mean dec, rads */ +} BinPos; +#define MAXBINPOS 2 /* max discrete epochs to store when no elements */ +typedef struct { + OBJ_COMMON_FLDS; + OBJ_FIXED_FLDS; + + byte b_2compute; /* whether to compute secondary positions */ + byte b_nbp; /* number of b_bp[] or 0 to use b_bo */ + short b_2mag; /* secondary's magnitude * MAGSCALE */ + char b_2spect[2]; /* secondary's spectrum */ + + /* either a real orbit or a set of discrete pa/sep */ + union { + BinOrbit b_bo; /* orbital elements */ + BinPos b_bp[MAXBINPOS]; /* table of discrete positions */ + } u; +} ObjB; + +#define fo_mag co_mag /* pseudonym for so_mag since it is not computed */ +#define fo_size co_size /* pseudonym for so_size since it is not computed */ + +/* macros to pack/unpack some fields */ +#define SRSCALE 255.0 /* galaxy size ratio scale */ +#define PASCALE (255.0/(2*PI)) /* pos angle scale factor */ +#define get_ratio(op) (((int)(op)->f_ratio)/SRSCALE) +#define set_ratio(op,maj,min) ((op)->f_ratio = (byte)(((maj) > 0) \ + ? ((min)*SRSCALE/(double)(maj)+0.5) \ + : 0)) +#define get_pa(op) ((double)(op)->f_pa/PASCALE) +#define set_pa(op,s) ((op)->f_pa = (byte)((s)*PASCALE + 0.5)) + +#define NCLASSES 128 /* n potential fo_classes -- allow for all ASCII */ + +/* basic planet object info */ +typedef struct { + OBJ_SOLSYS_FLDS; + PLCode plo_code; /* which planet */ + MCode plo_moon; /* which moon, or X_PLANET if planet */ + char plo_evis, plo_svis; /* if moon: whether visible from earth, sun */ + double plo_x, plo_y, plo_z; /* if moon: eq dist from center, planet radii */ + double plo_aux1, plo_aux2; /* various values, depending on type */ +} ObjPl; + +/* basic info about an object in elliptical heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + float eo_inc; /* inclination, degrees */ + float eo_Om; /* longitude of ascending node, degrees */ + float eo_om; /* argument of perihelion, degress */ + float eo_a; /* mean distance, aka,semi-maj axis,AU */ + float eo_M; /* mean anomaly, ie, degrees from perihelion at cepoch*/ + float eo_size; /* angular size, in arc seconds at 1 AU */ + float eo_startok; /* nominal first mjd this set is ok, else 0 */ + float eo_endok; /* nominal last mjd this set is ok, else 0 */ + double eo_e; /* eccentricity (double for when near 1 computing q) */ + double eo_cepoch; /* epoch date (M reference), as an mjd */ + double eo_epoch; /* equinox year (inc/Om/om reference), as an mjd. */ + Mag eo_mag; /* magnitude */ +} ObjE; + +/* basic info about an object in hyperbolic heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + double ho_epoch; /* equinox year (inc/Om/om reference), as an mjd */ + double ho_ep; /* epoch of perihelion, as an mjd */ + float ho_startok; /* nominal first mjd this set is ok, else 0 */ + float ho_endok; /* nominal last mjd this set is ok, else 0 */ + float ho_inc; /* inclination, degs */ + float ho_Om; /* longitude of ascending node, degs */ + float ho_om; /* argument of perihelion, degs. */ + float ho_e; /* eccentricity */ + float ho_qp; /* perihelion distance, AU */ + float ho_g, ho_k; /* magnitude model coefficients */ + float ho_size; /* angular size, in arc seconds at 1 AU */ +} ObjH; + +/* basic info about an object in parabolic heliocentric orbit */ +typedef struct { + OBJ_SOLSYS_FLDS; + double po_epoch; /* reference epoch, as an mjd */ + double po_ep; /* epoch of perihelion, as an mjd */ + float po_startok; /* nominal first mjd this set is ok, else 0 */ + float po_endok; /* nominal last mjd this set is ok, else 0 */ + float po_inc; /* inclination, degs */ + float po_qp; /* perihelion distance, AU */ + float po_om; /* argument of perihelion, degs. */ + float po_Om; /* longitude of ascending node, degs */ + float po_g, po_k; /* magnitude model coefficients */ + float po_size; /* angular size, in arc seconds at 1 AU */ +} ObjP; + +/* basic earth satellite object info */ +typedef struct { + OBJ_COMMON_FLDS; + double eso_epoch; /* reference epoch, as an mjd */ + double eso_n; /* mean motion, rev/day + * N.B. we need double due to a sensitive differencing + * operation used to compute MeanAnomaly in + * esat_main()/satellite.c. + */ + float eso_startok; /* nominal first mjd this set is ok, else 0 */ + float eso_endok; /* nominal last mjd this set is ok, else 0 */ + float eso_inc; /* inclination, degs */ + float eso_raan; /* RA of ascending node, degs */ + float eso_e; /* eccentricity */ + float eso_ap; /* argument of perigee at epoch, degs */ + float eso_M; /* mean anomaly, ie, degrees from perigee at epoch */ + float eso_decay; /* orbit decay rate, rev/day^2 */ + float eso_drag; /* object drag coefficient, (earth radii)^-1 */ + int eso_orbit; /* integer orbit number of epoch */ + + /* computed "sky" results unique to earth satellites */ + float ess_elev; /* height of satellite above sea level, m */ + float ess_range; /* line-of-site distance from observer to satellite, m*/ + float ess_rangev; /* rate-of-change of range, m/s */ + float ess_sublat; /* latitude below satellite, >0 north, rads */ + float ess_sublng; /* longitude below satellite, >0 east, rads */ + int ess_eclipsed;/* 1 if satellite is in earth's shadow, else 0 */ +} ObjES; + +typedef union { + ObjAny any; /* these fields valid for all types */ + ObjSS anyss; /* these fields valid for all solar system types */ + ObjPl pl; /* planet */ + ObjF f; /* fixed object, plus proper motion */ + ObjB b; /* bona fide binary stars (doubles are stored in f) */ + ObjE e; /* object in heliocentric elliptical orbit */ + ObjH h; /* object in heliocentric hyperbolic trajectory */ + ObjP p; /* object in heliocentric parabolic trajectory */ + ObjES es; /* earth satellite */ +} Obj; + + +/* for o_flags -- everybody must agree */ +#define FUSER0 0x01 +#define FUSER1 0x02 +#define FUSER2 0x04 +#define FUSER3 0x08 +#define FUSER4 0x10 +#define FUSER5 0x20 +#define FUSER6 0x40 +#define FUSER7 0x80 + +/* mark an object as being a "field star" */ +#define FLDSTAR FUSER3 +/* mark an object as circum calculation failed */ +#define NOCIRCUM FUSER7 + +/* Obj shorthands: */ +#define o_type any.co_type +#define o_name any.co_name +#define o_flags any.co_flags +#define o_age any.co_age +#define s_ra any.co_ra +#define s_dec any.co_dec +#define s_gaera any.co_gaera +#define s_gaedec any.co_gaedec +#define s_az any.co_az +#define s_alt any.co_alt +#define s_elong any.co_elong +#define s_size any.co_size +#define s_mag any.co_mag + +#define s_sdist anyss.so_sdist +#define s_edist anyss.so_edist +#define s_hlong anyss.so_hlong +#define s_hlat anyss.so_hlat +#define s_phase anyss.so_phase + +#define s_elev es.ess_elev +#define s_range es.ess_range +#define s_rangev es.ess_rangev +#define s_sublat es.ess_sublat +#define s_sublng es.ess_sublng +#define s_eclipsed es.ess_eclipsed + +#define f_class f.fo_class +#define f_spect f.fo_spect +#define f_ratio f.fo_ratio +#define f_pa f.fo_pa +#define f_epoch f.fo_epoch +#define f_RA f.fo_ra +#define f_pmRA f.fo_pmra +#define f_dec f.fo_dec +#define f_pmdec f.fo_pmdec +#define f_mag f.fo_mag +#define f_size f.fo_size + +#define e_cepoch e.eo_cepoch +#define e_epoch e.eo_epoch +#define e_startok e.eo_startok +#define e_endok e.eo_endok +#define e_inc e.eo_inc +#define e_Om e.eo_Om +#define e_om e.eo_om +#define e_a e.eo_a +#define e_e e.eo_e +#define e_M e.eo_M +#define e_size e.eo_size +#define e_mag e.eo_mag + +#define h_epoch h.ho_epoch +#define h_startok h.ho_startok +#define h_endok h.ho_endok +#define h_ep h.ho_ep +#define h_inc h.ho_inc +#define h_Om h.ho_Om +#define h_om h.ho_om +#define h_e h.ho_e +#define h_qp h.ho_qp +#define h_g h.ho_g +#define h_k h.ho_k +#define h_size h.ho_size + +#define p_epoch p.po_epoch +#define p_startok p.po_startok +#define p_endok p.po_endok +#define p_ep p.po_ep +#define p_inc p.po_inc +#define p_qp p.po_qp +#define p_om p.po_om +#define p_Om p.po_Om +#define p_g p.po_g +#define p_k p.po_k +#define p_size p.po_size + +#define es_epoch es.eso_epoch +#define es_startok es.eso_startok +#define es_endok es.eso_endok +#define es_inc es.eso_inc +#define es_raan es.eso_raan +#define es_e es.eso_e +#define es_ap es.eso_ap +#define es_M es.eso_M +#define es_n es.eso_n +#define es_decay es.eso_decay +#define es_drag es.eso_drag +#define es_orbit es.eso_orbit + +#define pl_code pl.plo_code +#define pl_moon pl.plo_moon +#define pl_evis pl.plo_evis +#define pl_svis pl.plo_svis +#define pl_x pl.plo_x +#define pl_y pl.plo_y +#define pl_z pl.plo_z +#define pl_aux1 pl.plo_aux1 +#define pl_aux2 pl.plo_aux2 + +#define b_2compute b.b_2compute +#define b_2spect b.b_2spect +#define b_2mag b.b_2mag +#define b_bo b.u.b_bo +#define b_bp b.u.b_bp +#define b_nbp b.b_nbp + +/* insure we always refer to the fields and no monkey business */ +#undef OBJ_COMMON_FLDS +#undef OBJ_SOLSYS_FLDS + +/* o_type code. + * N.B. names are assigned in order in objmenu.c + * N.B. if add one add switch in obj_cir(). + * N.B. UNDEFOBJ must be zero so new objects are undefinied by being zeroed. + * N.B. maintain the bitmasks too. + */ +enum ObjType { + UNDEFOBJ=0, + FIXED, BINARYSTAR, ELLIPTICAL, HYPERBOLIC, PARABOLIC, EARTHSAT, PLANET, + NOBJTYPES +}; + +/* types as handy bitmasks too */ +#define OBJTYPE2MASK(t) (1<<(t)) +#define FIXEDM OBJTYPE2MASK(FIXED) +#define BINARYSTARM OBJTYPE2MASK(BINARYSTAR) +#define ELLIPTICALM OBJTYPE2MASK(ELLIPTICAL) +#define HYPERBOLICM OBJTYPE2MASK(HYPERBOLIC) +#define PARABOLICM OBJTYPE2MASK(PARABOLIC) +#define EARTHSATM OBJTYPE2MASK(EARTHSAT) +#define PLANETM OBJTYPE2MASK(PLANET) +#define ALLM (~0) + +/* rise, set and transit information. + */ +typedef struct { + int rs_flags; /* info about what has been computed and any + * special conditions; see flags, below. + */ + double rs_risetm; /* mjd time of rise today */ + double rs_riseaz; /* azimuth of rise, rads E of N */ + double rs_trantm; /* mjd time of transit today */ + double rs_tranalt; /* altitude of transit, rads up from horizon */ + double rs_tranaz; /* azimuth of transit, rads E of N */ + double rs_settm; /* mjd time of set today */ + double rs_setaz; /* azimuth of set, rads E of N */ +} RiseSet; + +/* RiseSet flags */ +#define RS_NORISE 0x0001 /* object does not rise as such today */ +#define RS_NOSET 0x0002 /* object does not set as such today */ +#define RS_NOTRANS 0x0004 /* object does not transit as such today */ +#define RS_CIRCUMPOLAR 0x0010 /* object stays up all day today */ +#define RS_NEVERUP 0x0020 /* object never up at all today */ +#define RS_ERROR 0x1000 /* can't figure out anything! */ +#define RS_RISERR (0x0100|RS_ERROR) /* error computing rise */ +#define RS_SETERR (0x0200|RS_ERROR) /* error computing set */ +#define RS_TRANSERR (0x0400|RS_ERROR) /* error computing transit */ + +#define is_type(op,m) (OBJTYPE2MASK((op)->o_type) & (m)) + +/* any planet or its moons */ +#define is_planet(op,p) (is_type(op,PLANETM) && op->pl_code == (p)) + +/* any solar system object */ +#define is_ssobj(op) is_type(op,PLANETM|HYPERBOLICM|PARABOLICM|ELLIPTICALM) + + +/* natural satellite support */ + +typedef struct { + char *full; /* full name */ + char *tag; /* Roman numeral tag */ + float x, y, z; /* sky loc in planet radii: +x:east +y:south +z:front */ + float ra, dec; /* sky location in ra/dec */ + float mag; /* magnitude */ + int evis; /* whether geometrically visible from earth */ + int svis; /* whether in sun light */ + int pshad; /* whether moon is casting shadow on planet */ + int trans; /* whether moon is transiting */ + float sx, sy; /* shadow sky loc in planet radii: +x:east +y:south */ +} MoonData; + +/* separate set for each planet -- use in pl_moon */ + + +enum _marsmoons { + M_MARS = 0, /* == X_PLANET */ + M_PHOBOS, M_DEIMOS, + M_NMOONS /* including planet at 0 */ +}; + +enum _jupmoons { + J_JUPITER = 0, /* == X_PLANET */ + J_IO, J_EUROPA, J_GANYMEDE, J_CALLISTO, + J_NMOONS /* including planet */ +}; + +enum _satmoons { + S_SATURN = 0, /* == X_PLANET */ + S_MIMAS, S_ENCELADUS, S_TETHYS, S_DIONE, + S_RHEA, S_TITAN, S_HYPERION, S_IAPETUS, + S_NMOONS /* including planet */ +}; + +enum _uramoons { + U_URANUS = 0, /* == X_PLANET */ + U_ARIEL, U_UMBRIEL, U_TITANIA, U_OBERON, U_MIRANDA, + U_NMOONS /* including planet */ +}; + +#define X_MAXNMOONS S_NMOONS /* N.B. chosen by hand */ + + +/* global function declarations */ + + +/* aa_hadec.c */ +extern void aa_hadec (double lt, double alt, double az, double *ha, + double *dec); +extern void hadec_aa (double lt, double ha, double dec, double *alt, + double *az); + +/* aberration.c */ +extern void ab_ecl (double m, double lsn, double *lam, double *bet); +extern void ab_eq (double m, double lsn, double *ra, double *dec); + +/* airmass.c */ +extern void airmass (double aa, double *Xp); + +/* anomaly.c */ +extern void anomaly (double ma, double s, double *nu, double *ea); + +/* ap_as.c */ +extern void ap_as ( Now *np, double Mjd, double *rap, double *decp); +extern void as_ap ( Now *np, double Mjd, double *rap, double *decp); + +/* atlas.c */ +extern char *um_atlas (double ra, double dec); +extern char *u2k_atlas (double ra, double dec); +extern char *msa_atlas (double ra, double dec); + +/* aux.c */ +extern double mm_mjed (Now *np); + +/* chap95.c */ +extern int chap95 (double m, int obj, double prec, double *ret); + +/* chap95_data.c */ + +/* circum.c */ +extern int obj_cir (Now *np, Obj *op); + +/* comet.c */ +extern void comet (double m, double ep, double inc, double ap, double qp, + double om, double *lpd, double *psi, double *rp, double *rho, double *lam, + double *bet); + +/* constel.c */ +#define NCNS 89 +extern int cns_pick (double r, double d, double e); +extern int cns_id (char *abbrev); +extern char *cns_name (int id); +extern int cns_edges (double e, double **ra0p, double **dec0p, double **ra1p, + double **dec1p); +extern int cns_list (double ra, double dec, double e, double rad, int ids[]); +extern int cns_figure (int id, double e, double ra[],double dec[],int dcodes[]); +extern int cns_loadfigs (FILE *fp, char msg[]); + +/* dbfmt.c */ +extern int db_crack_line (char s[], Obj *op, char nm[][MAXNM], int nnm, + char whynot[]); +extern void db_write_line (Obj *op, char *lp); +extern int dbline_candidate (char line[]); +extern int get_fields (char *s, int delim, char *fields[]); +extern int db_tle (char *name, char *l1, char *l2, Obj *op); +extern int dateRangeOK (Now *np, Obj *op); + +/* deltat.c */ +extern double deltat (double m); + +/* earthsat.c */ +extern int obj_earthsat (Now *np, Obj *op); + +/* eq_ecl.c */ +extern void eq_ecl (double m, double ra, double dec, double *lt,double *lg); +extern void ecl_eq (double m, double lt, double lg, double *ra,double *dec); + +/* eq_gal.c */ +extern void eq_gal (double m, double ra, double dec, double *lt,double *lg); +extern void gal_eq (double m, double lt, double lg, double *ra,double *dec); + +/* formats.c */ +extern int fs_sexa (char *out, double a, int w, int fracbase); +extern int fs_date (char out[], int format, double jd); +extern int f_scansexa (const char *str, double *dp); +extern void f_sscandate (char *bp, int pref, int *m, double *d, int *y); + +/* helio.c */ +extern void heliocorr (double jd, double ra, double dec, double *hcp); + +/* jupmoon.c */ +extern void jupiter_data (double Mjd, char dir[], Obj *sop, Obj *jop, + double *jupsize, double *cmlI, double *cmlII, double *polera, + double *poledec, MoonData md[J_NMOONS]); + +/* libration.c */ +extern void llibration (double JD, double *llatp, double *llonp); + +/* magdecl.c */ +extern int magdecl (double l, double L, double e, double y, char *dir, + double *dp, char *err); + +/* marsmoon.c */ +extern void marsm_data (double Mjd, char dir[], Obj *sop, Obj *mop, + double *marssize, double *polera, double *poledec, MoonData md[M_NMOONS]); + +/* misc.c */ +extern void zero_mem (void *loc, unsigned len); +extern int tickmarks (double min, double max, int numdiv, double ticks[]); +extern int lc (int cx, int cy, int cw, int x1, int y1, int x2, int y2, + int *sx1, int *sy1, int *sx2, int *sy2); +extern void hg_mag (double h, double g, double rp, double rho, double rsn, + double *mp); +extern int magdiam (int fmag, int magstp, double scale, double mag, + double size); +extern void gk_mag (double g, double k, double rp, double rho, double *mp); +extern double atod (char *buf); +extern void solve_sphere (double A, double b, double cc, double sc, + double *cap, double *Bp); +extern double delra (double dra); +extern void now_lst (Now *np, double *lstp); +extern void radec2ha (Now *np, double ra, double dec, double *hap); +extern void gha (Now *np, Obj *op, double *ghap); +extern char *obj_description (Obj *op); +extern int is_deepsky (Obj *op); + +/* mjd.c */ +extern void cal_mjd (int mn, double dy, int yr, double *m); +extern void mjd_cal (double m, int *mn, double *dy, int *yr); +extern int mjd_dow (double m, int *dow); +extern int isleapyear (int year); +extern void mjd_dpm (double m, int *ndays); +extern void mjd_year (double m, double *yr); +extern void year_mjd (double y, double *m); +extern void rnd_second (double *t); +extern void mjd_dayno (double jd, int *yr, double *dy); +extern double mjd_day (double jd); +extern double mjd_hr (double jd); +extern void range (double *v, double r); +extern void radecrange (double *ra, double *dec); + +/* moon.c */ +extern void moon (double m, double *lam, double *bet, double *rho, + double *msp, double *mdp); + +/* mooncolong.c */ +extern void moon_colong (double jd, double lt, double lg, double *cp, + double *kp, double *ap, double *sp); + +/* moonnf.c */ +extern void moonnf (double mj, double *mjn, double *mjf); + +/* nutation.c */ +extern void nutation (double m, double *deps, double *dpsi); +extern void nut_eq (double m, double *ra, double *dec); + +/* obliq.c */ +extern void obliquity (double m, double *eps); + +/* parallax.c */ +extern void ta_par (double tha, double tdec, double phi, double ht, + double *rho, double *aha, double *adec); + +/* parallactic.c */ +extern double parallacticLDA (double lt, double dec, double alt); +extern double parallacticLHD (double lt, double ha, double dec); + +/* plans.c */ +extern void plans (double m, PLCode p, double *lpd0, double *psi0, + double *rp0, double *rho0, double *lam, double *bet, double *dia, + double *mag); + +/* plshadow.c */ +extern int plshadow (Obj *op, Obj *sop, double polera, + double poledec, double x, double y, double z, float *sxp, float *syp); + +/* plmoon_cir.c */ +extern int plmoon_cir (Now *np, Obj *moonop); +extern int getBuiltInObjs (Obj **opp); +extern void setMoonDir (char *dir); + +/* precess.c */ +extern void precess (double mjd1, double mjd2, double *ra, double *dec); + +/* reduce.c */ +extern void reduce_elements (double mjd0, double m, double inc0, + double ap0, double om0, double *inc, double *ap, double *om); + +/* refract.c */ +extern void unrefract (double pr, double tr, double aa, double *ta); +extern void refract (double pr, double tr, double ta, double *aa); + +/* rings.c */ +extern void satrings (double sb, double sl, double sr, double el, double er, + double JD, double *etiltp, double *stiltp); + +/* riset.c */ +extern void riset (double ra, double dec, double lt, double dis, + double *lstr, double *lsts, double *azr, double *azs, int *status); + +/* riset_cir.c */ +extern void riset_cir (Now *np, Obj *op, double dis, RiseSet *rp); +extern void twilight_cir (Now *np, double dis, double *dawn, double *dusk, + int *status); + +/* satmoon.c */ +extern void saturn_data (double Mjd, char dir[], Obj *eop, Obj *sop, + double *satsize, double *etilt, double *stlit, double *polera, + double *poledec, MoonData md[S_NMOONS]); + +/* sphcart.c */ +extern void sphcart (double l, double b, double r, double *x, double *y, + double *z); +extern void cartsph (double x, double y, double z, double *l, double *b, + double *r); + +/* sun.c */ +extern void sunpos (double m, double *lsn, double *rsn, double *bsn); + +/* twobody.c */ +extern int vrc (double *v, double *r, double tp, double e, double q); + +/* umoon.c */ +extern void uranus_data (double Mjd, char dir[], Obj *sop, Obj *uop, + double *usize, double *polera, double *poledec, MoonData md[U_NMOONS]); + +/* utc_gst.c */ +extern void utc_gst (double m, double utc, double *gst); +extern void gst_utc (double m, double gst, double *utc); + +/* vsop87.c */ +extern int vsop87 (double m, int obj, double prec, double *ret); + +#endif /* _ASTRO_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: astro.h,v $ $Date: 2013/01/06 01:12:57 $ $Revision: 1.33 $ $Name: $ + */ diff --git a/libastro/atlas.c b/libastro/atlas.c new file mode 100644 index 0000000..2361537 --- /dev/null +++ b/libastro/atlas.c @@ -0,0 +1,196 @@ +/* look up which star atlas an ra/dec is in. + * Urano and Mill contributed by Atsuo Ohki + * U2K by Robert Lane + * + * N.B. skylist.c assumes a certain max length for any returned string. + */ + +#include +#include + +#include "astro.h" + +/* for Millennium Star Atlas */ +static int msa_charts[] = { + /* 90*/ 2, /* 84*/ 4, /* 78*/ 8, /* 72*/ 10, /* 66*/ 12, + /* 60*/ 14, /* 54*/ 16, /* 48*/ 20, /* 42*/ 20, /* 36*/ 22, + /* 30*/ 22, /* 24*/ 24, /* 18*/ 24, /* 12*/ 24, /* 6*/ 24, + /* 0*/ 24, + /* -6*/ 24, /*-12*/ 24, /*-18*/ 24, /*-24*/ 24, /*-30*/ 22, + /*-36*/ 22, /*-42*/ 20, /*-48*/ 20, /*-54*/ 16, /*-60*/ 14, + /*-66*/ 12, /*-72*/ 10, /*-78*/ 8, /*-84*/ 4, /*-90*/ 2 +}; + +/* + * find the chart number of Millennium Star Atlas and return pointer to static + * string describing location. + * 0 <= ra < 24; -90 <= dec <= 90 + */ +char * +msa_atlas(double ra, double dec) +{ + static char buf[512]; + int zone, band; + int i, p; + + ra = radhr(ra); + dec = raddeg(dec); + buf[0] = 0; + if (ra < 0.0 || 24.0 <= ra || dec < -90.0 || 90.0 < dec) + return (buf); + zone = (int)(ra/8.0); + band = -((int)(dec+((dec>=0)?3:-3))/6 - 15); + for (p=0, i=0; i <= band; i++) + p += msa_charts[i]; + i = (int)((ra - 8.0*zone) / (8.0/msa_charts[band])); + sprintf(buf, "V%d - P%3d", zone+1, p-i+zone*516); + return (buf); +} + +/* for original Uranometria */ +static struct { + double l; + int n; +} um_zones[] = { + /* 84 - 90 */ { 84.5, 2}, + /* 72 - 85 */ { 72.5, 12}, + /* 60 - 73 */ { 61.0, 20}, + /* 49 - 62 */ { 50.0, 24}, + /* 38 - 51 */ { 39.0, 30}, + /* 27 - 40 */ { 28.0, 36}, + /* 16 - 29 */ { 17.0, 45}, + /* 5 - 18 */ { 5.5, 45}, + /* 0 - 6 */ { 0.0, 45}, + { 0.0, 0} +}; + +/* + * find the chart number of Uranometria first edition and return pointer to + * static string describing location. + * 0 <= ra < 24; -90 <= dec <= 90 + */ +char * +um_atlas(double ra, double dec) +{ + static char buf[512]; + int band, south; + int p; + double w; + + ra = radhr(ra); + dec = raddeg(dec); + buf[0] = 0; + if (ra < 0.0 || 24.0 <= ra || dec < -90.0 || 90.0 < dec) + return (buf); + p = 0; + if (dec < 0.0) { + dec = -dec; + south = 1; + } else + south = 0; + p = 1; + for (band=0; um_zones[band].n; band++) { + if (um_zones[band].l <= dec) + break; + p += um_zones[band].n; + } + if (!um_zones[band].n) + return (buf); + w = 24.0 / um_zones[band].n; + if (band) { + ra += w/2.0; + if (ra >= 24.0) + ra -= 24.0; + } + if (south && um_zones[band+1].n) + p = 475 - p - um_zones[band].n; + if (south && band == 0) { + /* south pole part is mis-ordered! */ + ra = 24.0 - ra; + } + sprintf(buf, "V%d - P%3d", south+1, p+(int)(ra/w)); + return (buf); +} + +/* for Uranometria 2000.0 */ +static struct { + double lowDec; /* lower dec cutoff */ + int numZones; /* number of panels (aka zones) */ + +} u2k_zones[] = { /* array of book layout info */ + /* 84 - 90 */ { 84.5, 1}, /* lower dec cutoff, # of panels in band */ + /* 73 - 85 */ { 73.5, 6}, + /* 62 - 74 */ { 62.0, 10}, + /* 51 - 63 */ { 51.0, 12}, + /* 40 - 52 */ { 40.0, 15}, + /* 29 - 41 */ { 29.0, 18}, + /* 17 - 30 */ { 17.0, 18}, + /* 5 - 18 */ { 5.5, 20}, + /* 0 - 6 */ { 0.0, 20}, + { 0.0, 0} /*numZones value in this line is a stopper.*/ +}; + +/* find the chart number of Uranometria 2000.0 and return pointer to static + * string describing location. + * 0 <= ra < 24; -90 <= dec <= 90 + */ +char * +u2k_atlas(double ra, double dec) +{ + static char buf[512]; + static char err[] = "???"; + int band; /* index to array */ + int south; /* flag for volume 2*/ + int panel; /* panel number */ + + ra = radhr(ra); + dec = raddeg(dec); + buf[0] = 0; + if (ra < 0.0 || 24.0 <= ra || dec < -90.0 || 90.0 < dec) { + strcpy (buf, err); + return (buf); /* range checking */ + } + + if (dec < 0.0) { + dec = -dec; + south = 1; /* South is mirror of North */ + } else + south = 0; + + panel = 1; + band = 0; + + /* scan u2k_zones for the correct band: */ + while (u2k_zones[band].numZones != 0 && dec <= u2k_zones[band].lowDec ){ + panel += u2k_zones[band].numZones; /*accumulate total panels */ + band++ ; + } + + if (!u2k_zones[band].numZones) { /* hit end of array with no match. */ + strcpy (buf, err); + return (buf); + } + + ra -= 12.0 / u2k_zones[band].numZones; /*offset by half-width of panel*/ + if (ra >= 24.0) /* reality check. shouldn't happen. */ + ra -= 24.0; + + if (ra < 0.0) /* offset could give negative ra */ + ra += 24.0; + + if (south && u2k_zones[band+1].numZones) + panel = 222 - panel - u2k_zones[band].numZones; + + /* resultant panel number is accumulated panels in prior bands plus + * ra's fraction of panels in dec's band. panel # goes up as ra goes + * down. + */ + sprintf(buf, "V%d - P%3d", south+1, + panel+(int)(u2k_zones[band].numZones*(24.0 - ra)/24.0)); + + return (buf); +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: atlas.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.8 $ $Name: $"}; diff --git a/libastro/auxil.c b/libastro/auxil.c new file mode 100644 index 0000000..0fa712f --- /dev/null +++ b/libastro/auxil.c @@ -0,0 +1,42 @@ +/* aux functions so programs besides XEphem can use this library. + */ + +#include +#include + +#include "astro.h" +#include "preferences.h" + +/* default preferences */ +static int prefs[NPREFS] = { + PREF_TOPO, PREF_METRIC, PREF_MDY, PREF_UTCTZ, PREF_HIPREC, PREF_NOMSGBELL, + PREF_PREFILL, PREF_TIPSON, PREF_CONFIRMON, PREF_SUN +}; + +/* called anytime we want to know a preference. + */ +int +pref_get(Preferences pref) +{ + return (prefs[pref]); +} + +/* call to force a certain preference, return the old setting. + */ +int +pref_set (Preferences pref, int newp) +{ + int prior = pref_get(pref); + prefs[pref] = newp; + return (prior); +} + +/* given an mjd, return it modified for terrestial dynamical time */ +double +mm_mjed (Now *np) +{ + return (mjd + deltat(mjd)/86400.0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: auxil.c,v $ $Date: 2003/05/04 04:41:57 $ $Revision: 1.8 $ $Name: $"}; diff --git a/libastro/bdl.c b/libastro/bdl.c new file mode 100644 index 0000000..0486405 --- /dev/null +++ b/libastro/bdl.c @@ -0,0 +1,238 @@ +/* crack natural satellite files from BDL */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +typedef enum {I, F, NL} ScanType; +#define SCANFLD(f,w,vp) if(readField(fp,f,w,(void *)vp,ynot)<0) return (-1) + +static int readField (FILE *fp, ScanType f, int w, void *ptr, char ynot[]); +static int readRec (FILE *fp, double *t0, double cmx[], double cfx[], + double cmy[], double cfy[], double cmz[], double cfz[], char ynot[]); + +/* given a sequencial text file in BDL natural satellite ephemeris format and a + * JD, find the x/y/z positions of each satellite. store in the given arrays, + * assumed to have one entry per moon. values are planetocentric, +x east, +y + * north, +z away from earth, all in au. corrected for light time. + * return the number of satellites or -1 and reason in ymot[]. + * files obtained from ftp://ftp.bdl.fr/pub/misc/satxyz. + */ +int +read_bdl (FILE *fp, double jd, double *xp, double *yp, double *zp, char ynot[]) +{ + int npla; + int nsat; + int idn[8]; + double freq[8]; + double delt[8]; + double djj; + double cmx[6], cfx[4], cmy[6], cfy[4], cmz[6], cfz[4]; + int ienrf; + int jan; + int reclen; + long os0; + double t0; + int i; + + /* read header line */ + SCANFLD (I, 2, &npla); + SCANFLD (I, 2, &nsat); + for (i = 0; i < nsat; i++) + SCANFLD (I, 5, &idn[i]); + for (i = 0; i < nsat; i++) + SCANFLD (F, 8, &freq[i]); + for (i = 0; i < nsat; i++) + SCANFLD (F, 5, &delt[i]); + SCANFLD (I, 5, &ienrf); + SCANFLD (F, 15, &djj); + SCANFLD (I, 5, &jan); + SCANFLD (NL, 0, NULL); + + /* record position of first record */ + os0 = ftell (fp); + + /* read first record to get length */ + reclen = readRec (fp, &t0, cmx, cfx, cmy, cfy, cmz, cfz, ynot); + if (reclen < 0) + return (-1); + + /* compute location of each satellite */ + for (i = 0; i < nsat; i++) { + int id = (int)floor((jd-djj)/delt[i]) + idn[i] - 2; + long os = os0 + id*reclen; + double t1, anu, tau, tau2, at; + double tbx, tby, tbz; + + if (fseek (fp, os, SEEK_SET) < 0) { + sprintf (ynot, "Seek error to %ld for rec %d", os, id); + return (-1); + } + + if (readRec (fp, &t0, cmx, cfx, cmy, cfy, cmz, cfz, ynot) < 0) + return (-1); + + t1 = floor(t0) + 0.5; + anu = freq[i]; + tau = jd - t1; + tau2 = tau * tau; + at = tau*anu; + + tbx = cmx[0]+cmx[1]*tau+cmx[2]*sin(at+cfx[0]) + +cmx[3]*tau*sin(at+cfx[1]) + +cmx[4]*tau2*sin(at+cfx[2]) + +cmx[5]*sin(2*at+cfx[3]); + tby = cmy[0]+cmy[1]*tau+cmy[2]*sin(at+cfy[0]) + +cmy[3]*tau*sin(at+cfy[1]) + +cmy[4]*tau2*sin(at+cfy[2]) + +cmy[5]*sin(2*at+cfy[3]); + tbz = cmz[0]+cmz[1]*tau+cmz[2]*sin(at+cfz[0]) + +cmz[3]*tau*sin(at+cfz[1]) + +cmz[4]*tau2*sin(at+cfz[2]) + +cmz[5]*sin(2*at+cfz[3]); + + xp[i] = tbx*1000./149597870.; + yp[i] = tby*1000./149597870.; + zp[i] = tbz*1000./149597870.; + } + + return (nsat); +} + +/* read one field. + * return 0 if ok else -1 + * N.B. this is enforce width, without skipping leading blanks. + */ +static int +readField (FILE *fp, ScanType f, int width, void *ptr, char ynot[]) +{ + char buf[128]; + char *bp; + + if (width > sizeof(buf)-1) { + sprintf (ynot, "BDL Field width %d > %d", width, (int)sizeof(buf)); + return (-1); + } + if (width != (int)fread (buf, 1, width, fp)) { + if (ferror(fp)) strcpy (ynot, "BDL IO error"); + else if (feof(fp)) strcpy (ynot, "BDL unexpected EOF"); + else strcpy (ynot, "BDL short file"); + return (-1); + } + + buf[width] = '\0'; + switch (f) { + case I: + *(int *)ptr = atoi (buf); + break; + case F: + bp = strchr (buf, 'D'); + if (bp) + *bp = 'e'; + *(double *)ptr = atof (buf); + break; + case NL: + fgets (buf, sizeof(buf), fp); + break; + default: + sprintf (ynot, "Bug! format = %d", f); + return (-1); + } + return (0); +} + +/* read one satellite record. + * return number of chars read else -1. + */ +static int +readRec (FILE *fp, double *t0, double cmx[], double cfx[], double cmy[], +double cfy[], double cmz[], double cfz[], char ynot[]) +{ + + long pos0, pos1; + int isat, idx; + int ldat1, ldat2; + int i; + + pos0 = ftell (fp); + + SCANFLD (I, 1, &isat); + SCANFLD (I, 5, &idx); + SCANFLD (I, 8, &ldat1); + SCANFLD (I, 8, &ldat2); + SCANFLD (F, 9, t0); + for (i = 0; i < 6; i++) + SCANFLD (F, 17, &cmx[i]); + for (i = 0; i < 4; i++) + SCANFLD (F, 17, &cfx[i]); + for (i = 0; i < 6; i++) + SCANFLD (F, 17, &cmy[i]); + for (i = 0; i < 4; i++) + SCANFLD (F, 17, &cfy[i]); + for (i = 0; i < 6; i++) + SCANFLD (F, 17, &cmz[i]); + for (i = 0; i < 4; i++) + SCANFLD (F, 17, &cfz[i]); + SCANFLD (NL, 0, NULL); + + pos1 = ftell (fp); + + return (pos1 - pos0); +} + + +#ifdef TEST_IT +/* stand-alone test program. + * for example, compare + * a.out jupiter.9910 2451910.50000 + * with + * satxyz2 + * jup.dir.9910 + * 2001 1 1 0 0 0 + * 1 0 0 0 + * 1 + */ +int +main (int ac, char *av[]) +{ + double x[10], y[10], z[10]; + char ynot[1024]; + double jd; + char *fn; + FILE *fp; + int nm; + int i; + + if (ac != 3) { + fprintf (stderr, "Usage: %s \n", av[0]); + abort(); + } + fn = av[1]; + jd = atof (av[2]); + + fp = fopen (fn, "r"); + if (!fp) { + perror (fn); + abort(); + } + + nm = read_bdl (fp, jd, x, y, z, ynot); + if (nm < 0) { + fprintf (stderr, "%s\n", ynot); + abort(); + } + + for (i = 0; i < nm; i++) + printf (" X= %19.11E Y= %19.11E Z= %19.11E\n", x[i], y[i], z[i]); + + return (0); +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: bdl.c,v $ $Date: 2008/04/20 08:11:35 $ $Revision: 1.6 $ $Name: $"}; diff --git a/libastro/bdl.h b/libastro/bdl.h new file mode 100644 index 0000000..3b4d0ea --- /dev/null +++ b/libastro/bdl.h @@ -0,0 +1,6 @@ +extern int read_bdl (FILE *fp, double jd, double *xp, double *yp, double *zp, + char ynot[]); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: bdl.h,v $ $Date: 2003/03/20 08:56:31 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libastro/chap95.c b/libastro/chap95.c new file mode 100644 index 0000000..bde4384 --- /dev/null +++ b/libastro/chap95.c @@ -0,0 +1,174 @@ +/* heliocentric rectangular equatorial coordinates of Jupiter to Pluto; + * from Chapront's expansion of DE200/extension of DE200; mean equator J2000.0 + * + * calculation time (milliseconds) on an HP 715/75, Jupiter to Pluto: + * (each coordinate component counted as 1 term, + * secular terms included for JD 2448908.5 = 1992 Oct 13.0) + * + * prec terms rates no rates + * 0.0 2256 5.1 4.6 + * + * 1e-7 792 2.6 2.4 --> nominal precision rel. to DE200 + * 1e-6 535 2.1 2.0 + * 1e-5 350 1.8 1.6 + * 1e-4 199 1.5 1.4 + * 1e-3 96 1.2 1.1 + * + * no drop 2256 4.5 3.9 (code without test criterion) + */ + +#include + +#include "astro.h" +#include "chap95.h" + +#define CHAP_MAXTPOW 2 /* NB: valid for all 5 outer planets */ + +/* chap95() + * + * input: + * m modified JD; days from J1900.0 = 2415020.0 + * + * prec precision level, in radians. + * if (prec = 0.0), you get the full precision, namely + * a deviation of not more than 0.02 arc seconds (1e-7 rad) + * from the JPL DE200 integration, on which this expansion + * is based. + * + * obj object number as in astro.h (jupiter=3, saturn=4, ...) + * + * output: + * ret[6] cartesian components of position and velocity + * + * return: + * 0 Ok + * 1 time out of range [CHAP_BEGIN .. CHAP_END] + * 2 object out of range [JUPITER .. PLUTO] + * 3 precision out of range [0.0 .. 1e-3] + */ +int +chap95 (double m, int obj, double prec, double *ret) +{ + static double a0[] = { /* semimajor axes for precision ctrl */ + 0.39, 0.72, 1.5, 5.2, 9.6, 19.2, 30.1, 39.5, 1.0 + }; + double sum[CHAP_MAXTPOW+1][6]; /* [T^0, ..][X,Y,Z,X',Y',Z'] */ + double T, t; /* time in centuries and years */ + double ca, sa, Nu; /* aux vars for terms */ + double precT[CHAP_MAXTPOW+1]; /* T-augmented precision threshold */ + chap95_rec *rec; /* term coeffs */ + int cooidx; + + /* check parameters */ + if (m < CHAP_BEGIN || m > CHAP_END) + return (1); + + if (obj < JUPITER || obj > PLUTO) + return (2); + + if (prec < 0.0 || prec > 1e-3) + return (3); + + /* init the sums */ + zero_mem ((void *)sum, sizeof(sum)); + + T = (m - J2000)/36525.0; /* centuries since J2000.0 */ + + /* modify precision treshold for + * a) term storing scale + * b) convert radians to au + * c) account for skipped terms (more terms needed for better prec) + * threshold empirically established similar to VSOP; stern + * d) augment for secular terms + */ + precT[0] = prec * CHAP_SCALE /* a) */ + * a0[obj] /* b) */ + / (10. * (-log10(prec + 1e-35) - 2)); /* c) */ + t = 1./(fabs(T) + 1e-35); /* d) */ + precT[1] = precT[0]*t; + precT[2] = precT[1]*t; + + t = T * 100.0; /* YEARS since J2000.0 */ + + ca = sa = Nu = 0.; /* shut up compiler warning 'uninitialised' */ + + switch (obj) { /* set initial term record pointer */ + case JUPITER: rec = chap95_jupiter; break; + case SATURN: rec = chap95_saturn; break; + case URANUS: rec = chap95_uranus; break; + case NEPTUNE: rec = chap95_neptune; break; + case PLUTO: rec = chap95_pluto; break; + default: + return (2); /* wrong object: severe internal trouble */ + } + + /* do the term summation into sum[T^n] slots */ + for (; rec->n >= 0; ++rec) { + double *amp; + + /* NOTE: The formula + * X = SUM[i=1,Records] T**n_i*(CX_i*cos(Nu_k*t)+SX_i*sin(Nu_k*t)) + * could be rewritten as SUM( ... A sin (B + C*t) ) + * "saving" trigonometric calls. However, e.g. for Pluto, + * there are only 65 distinct angles NU_k (130 trig calls). + * With that manipulation, EVERY arg_i would be different for X, + * Y and Z, which is 3*96 terms. Hence, the formulation as + * given is good (optimal?). + */ + + for (cooidx = 0, amp = rec->amp; cooidx < 3; ++cooidx) { + double C, S, term, termdot; + short n; /* fast access */ + + C = *amp++; + S = *amp++; + n = rec->n; + + /* drop term if too small + * this is quite expensive: 17% of loop time + */ + if (fabs(C) + fabs(S) < precT[n]) + continue; + + if (n == 0 && cooidx == 0) { /* new Nu only here */ + double arg; + + Nu = rec->Nu; + arg = Nu * t; + arg -= floor(arg/(2.*PI))*(2.*PI); + ca = cos(arg); /* blast it - even for Nu = 0.0 */ + sa = sin(arg); + } + + term = C * ca + S * sa; + sum[n][cooidx] += term; +#if CHAP_GETRATE + termdot = (-C * sa + S * ca) * Nu; + sum[n][cooidx+3] += termdot; + if (n > 0) sum[n - 1][cooidx+3] += n/100.0 * term; +#endif + } /* cooidx */ + } /* records */ + + /* apply powers of time and sum up */ + for (cooidx = 0; cooidx < 6; ++cooidx) { + ret[cooidx] = (sum[0][cooidx] + + T * (sum[1][cooidx] + + T * (sum[2][cooidx] )) )/CHAP_SCALE; + } + + /* TEST: if the MAIN terms are dropped, get angular residue + ret[0] = sqrt(ret[0]*ret[0] + ret[1]*ret[1] + ret[2]*ret[2])/a0[obj]; + */ + +#if CHAP_GETRATE + for (cooidx = 3; cooidx < 6; ++cooidx) { + ret[cooidx] /= 365.25; /* yearly to daily rate */ + } +#endif + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: chap95.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/chap95.h b/libastro/chap95.h new file mode 100644 index 0000000..fff8acd --- /dev/null +++ b/libastro/chap95.h @@ -0,0 +1,68 @@ +/* Position of outer planets; straightforward from: +ftp://adc.gsfc.nasa.gov/pub/adc/archives/journal_tables/A+AS/109/181: + +J/A+AS/109/181 Planetary ephemerides (Chapront, 1995) +=============================================================================== +Representation of planetary ephemerides by frequency analysis. Application to +the five outer planets. + CHAPRONT J. + + =1995A&AS..109..181C (SIMBAD/NED Reference) +=============================================================================== + +Keywords: ephemerides - planets and satellites: general - methods: numerical + +Contents: + Heliocentric equatorial rectangular coordinates of the five outer planets + (X, Y and Z). The source is based on DE200 (tables 4 to 7) or a reconstruction + of DE200 by numerical integration (tables 9 to 13). The reference frame is + the mean equator and equinox J2000 of DE200. + + The general formulation of the series X is: + X = SUM[i=1,Records] T**n_i*(CX_i*cos(Nu_k*t)+SX_i*sin(Nu_k*t)) + The formulation is identical for Y and Z. + T is the time (TDB) in Julian centuries from J2000: + T = (JulianDate - 2451545.0)/36525 + t is the time (TDB) in Julian years from J2000: + t = (JulianDate - 2451545.0)/365.25 + Nu is the frequency. Frequencies are identical for all terms of rank k: + Nu_k = Nu_i when n_i = 0 + For purely secular terms k = 0 and Nu_0 = 0 + +=============================================================================== +(End) Patricia Bauer [CDS] 03-Oct-1994 +*/ + +#define CHAP_SCALE 1e10 + +/* JDs of validity period */ +#define CHAP_BEGIN (2338032.5 - MJD0) /* 1689/3/19 */ +#define CHAP_END (2542032.5 - MJD0) /* 2247/10/1 */ + +/* coding flags */ +/* calculating rates increases time by about 10% + * + * On an HP715/75, for pluto the times per step are 0.00049 s and 0.00057 s + * This method is quite fast. + */ +#define CHAP_GETRATE 1 + +typedef struct { + short n; /* order of time; "-1" marks end of list */ + double amp[6]; /* amplitudes of cosine and sine terms for x,y,z */ + /* in original order [CX,SX,CY,SY,CZ,SZ] */ + double Nu; /* Frequency Nu_k; given only at n=0 */ +} chap95_rec; + +extern chap95_rec chap95_jupiter[]; +extern chap95_rec chap95_saturn[]; +extern chap95_rec chap95_uranus[]; +extern chap95_rec chap95_neptune[]; +extern chap95_rec chap95_pluto[]; + +extern int chap95 (double m, int obj, double prec, double *ret); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: chap95.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/libastro/chap95_data.c b/libastro/chap95_data.c new file mode 100644 index 0000000..2c17735 --- /dev/null +++ b/libastro/chap95_data.c @@ -0,0 +1,783 @@ +/* data tables for Chapront95 expansion of DE200 for outer planets + * + * created by automatic conversion from original distribution files at + * ftp://adc.gsfc.nasa.gov/pub/adc/archives/journal_tables/A+AS/109/181 + */ + +#include "chap95.h" + +chap95_rec chap95_jupiter[] = { + { 0, { -3658015942., 0., -908357166., 0., -300271978., 0. }, 0. }, + { 1, { 3211736., 0., -12066362., 0., -5380492., 0. }, }, + { 0, { 4891337., 5430776., -9059458., 4045908., -3979137., 1598300. }, 0.0168745727060282 }, + { 1, { -1952368., 3224556., -3665363., -6161184., -1519962., -2703058. }, }, + { 0, { 589280., -62004., -1226982., 1326111., -536148., 568311. }, 0.0319163179770344 }, + { 0, { -132797., 113059., 332715., -538044., 144358., -232591. }, 0.0404897860926306 }, + { 0, { 19390., -8208., -31003., 153367., -13456., 65630. }, 0.0595473299932462 }, + { 0, { -2479., -51303., 154576., 368773., 65961., 157222. }, 0.0831987723231718 }, + { 1, { -170149., 190549., 249291., -236183., 108588., -106146. }, }, + { 0, { -14177274., -32784827., -28623327., 13932421., -12074567., 6670491. }, 0.1015656301267251 }, + { 1, { -3789129., 1413684., 2551178., 1957155., 1164465., 819456. }, }, + { 0, { 12762505., 226609., -4837955., 12330917., -2405339., 5249055. }, 0.1121334694975955 }, + { 1, { 547155., 1481967., -2013999., -2660987., -879208., -1179904. }, }, + { 0, { -62226., -41759., -601831., 240767., -255949., 106231. }, 0.1235484250413803 }, + { 0, { 38451., -38927., 103878., -40998., 43472., -16957. }, 0.1380033981088614 }, + { 0, { 6892., -67712., 62422., 39405., 26942., 18451. }, 0.1534434914458037 }, + { 0, { -75., 8062., -21151., -17198., -9222., -7580. }, 0.1694333239035300 }, + { 0, { 35355., 38181., 70566., -4376., 30386., -2939. }, 0.1895181584594278 }, + { 0, { -743715., -251198., -403257., 598432., -166123., 265466. }, 0.2002642151969322 }, + { 0, { 5834437., -10339387., 9606367., 9534188., 3806370., 4385708. }, 0.2140513638608579 }, + { 1, { 1033031., -590411., -1874404., 575478., -835406., 235620. }, }, + { 2, { 514744., -29792., -180518., -472533., -83894., -204253. }, }, + { 0, { 160903., -61277., -282564., -163689., -122933., -69902. }, 0.2282692683160305 }, + { 0, { -27903., 23114., 66255., 2167., 28792., 688. }, 0.2391180221674930 }, + { 0, { 4501., -5373., -15639., 12832., -6785., 5553. }, 0.2594200270243392 }, + { 0, { -7016., 15969., 7639., -40047., 3504., -17544. }, 0.2773387700991547 }, + { 0, { 12123., -71452., 49781., 137809., 20807., 61532. }, 0.2898870950096423 }, + { 0, { 9304., 220632., -262203., -258243., -112815., -119757. }, 0.2988785450891279 }, + { 0, { -326815., -368979., 836570., 374605., 369053., 187133. }, 0.3074463122377075 }, + { 0, { -285560., 1568528., -1374181., -462165., -548097., -222596. }, 0.3260929459480317 }, + { 1, { 61071., -241375., 291550., 243626., 110389., 123427. }, }, + { 2, { 227305., 162244., -116416., 352218., -65158., 140646. }, }, + { 0, { 132035., 23450., 116510., 219543., 39775., 92330. }, 0.3428930094327709 }, + { 0, { -45107., 4887., -87029., -68971., -33182., -29857. }, 0.3524288275557115 }, + { 0, { 11180., 1421., 46242., 3234., 18448., 1726. }, 0.3676619945918164 }, + { 0, { 55636., 74415., 46443., -53844., 16908., -25824. }, 0.3817149836030239 }, + { 0, { -38712., -7953., 29506., -14698., 13883., -4384. }, 0.4024967272931009 }, + { 0, { 737722., -3325874., -1725701., 1468892., -912453., 541637. }, 0.4182255664674069 }, + { 0, { 5843515., 17000877., -16425950., 5641739., -7208900., 1880856. }, 0.4281067291965077 }, + { 1, { -2114864., 879909., -1266263., -2982111., -450528., -1332322. }, }, + { 0, { -110808., 282843., -713054., 221824., -319044., 77631. }, 0.4373541005020147 }, + { 0, { 27829., -71864., 150036., -117804., 67370., -49093. }, 0.4560888031675395 }, + { 0, { 539822., 432225., -319385., 741980., -155058., 309230. }, 0.4797023746036813 }, + { 1, { 353284., -620503., 706907., 178082., 295983., 93413. }, }, + { 2, { -261070., -393195., 329623., -469610., 151911., -193312. }, }, + { 0, { -2161367., -547925., 176106., -2360409., 138737., -1001848. }, 0.5007107300722267 }, + { 0, { 27247697., -10878578., 11956310., 25892704., 4272604., 11389311. }, 0.5164419295757459 }, + { 0, { 42877248480., -29362030594., 27366424342., 39132999157., 10686125728., 17489248357. }, 0.5296606590588865 }, + { 1, { -15857296., -20344255., 19186229., -13052624., 8755482., -9908361. }, }, + { 2, { 6609281., 13149967., -10297853., 6131752., -4439009., 2280289. }, }, + { 0, { -18516226., 26000654., -21956172., -17721375., -8891106., -8274169. }, 0.5451799187785868 }, + { 0, { 924882., -10894893., 8857638., 2001907., 3741179., 1161552. }, 0.5595376466726170 }, + { 0, { 27311120., 29858821., -26928769., 14296744., -12217212., 5123580. }, 0.5795066100144535 }, + { 1, { 13030129., -18873913., 10742323., 12477743., 4123021., 5837654. }, }, + { 2, { -7424534., -11497916., 9860547., -3566473., 4394376., -1162013. }, }, + { 0, { -26277687., -24566747., 22551607., -14225886., 10328130., -5247184. }, 0.5911608643334181 }, + { 1, { 8339866., -11546546., 6481932., 8138775., 2473924., 3793057. }, }, + { 0, { -712821., 106326., 116149., -425425., 75173., -183273. }, 0.6154942605989902 }, + { 0, { 10367622., 10279698., -8594103., 9404066., -3937577., 3712537. }, 0.6326027345940838 }, + { 1, { 897045., 857895., -751707., 469816., -332572., 171768. }, }, + { 0, { 189069., -432469., 40216., 165708., -8464., 80857. }, 0.6444812066531010 }, + { 1, { 358961., 188063., -197366., 119155., -93776., 37030. }, }, + { 0, { 2801., -42321., 23044., 13212., 9231., 7153. }, 0.6631203366491857 }, + { 0, { 4336., 3618., -871., -1752., -434., -1180. }, 0.6824152589010221 }, + { 0, { -14481., -6624., 4573., -1496., 2554., -8. }, 0.7002707215510490 }, + { 0, { -223890., 106356., -2013., -41001., 13805., -21357. }, 0.7195602591163895 }, + { 1, { 28954., 129738., -23285., -9336., -9672., -11954. }, }, + { 0, { 500290., -303873., -27592., 125875., -40399., 71687. }, 0.7280600120460897 }, + { 0, { 729018., -876869., -461257., 537352., -184892., 325523. }, 0.7385877731868745 }, + { 1, { -549774., 403499., -445388., -787700., -178960., -329235. }, }, + { 0, { -154224., -136331., 129548., -90101., 64599., -32148. }, 0.7506622252123309 }, + { 0, { 36827., 21410., -22046., 16972., -12019., 7006. }, 0.7602186192346818 }, + { 0, { -9432., -929., 4761., -3712., 2630., -1835. }, 0.7714697369886172 }, + { 0, { 2272., -244., -1058., 1139., -553., 579. }, 0.7851226034217180 }, + { 0, { 236., 2440., 694., 90., 191., -135. }, 0.8150362349770407 }, + { 0, { 2171., -25731., -8199., 18101., -2071., 8952. }, 0.8291920856012017 }, + { 0, { -6488604., 1912961., -2051708., -5704251., -640826., -2468602. }, 0.8459901559232306 }, + { 1, { 133871., -10089., -90464., 3174., -43566., 7399. }, }, + { 2, { 3748., 19859., 25943., -57668., 8170., -24731. }, }, + { 0, { 41412., 22074., -6939., -4045., -5698., -1697. }, 0.8578592213260567 }, + { 0, { 574., 1501., -732., 4283., -255., 1685. }, 0.8738246080594192 }, + { 0, { 2322., -1798., 335., 937., 88., 501. }, 0.8963147077496537 }, + { 0, { -43604., -1899., 4040., -39896., 2661., -17151. }, 0.9105458422489332 }, + { 0, { 3596., -6271., 379., 5996., 286., 2760. }, 0.9259391061890530 }, + { 0, { -999582., 6287537., -5679601., -791405., -2413314., -507432. }, 0.9494173054851961 }, + { 1, { 111599., -339713., 235481., 52027., 98992., 33925. }, }, + { 2, { -33602., -140395., 93339., -35641., 41369., -10865. }, }, + { 0, { 149940., -187453., 95997., 203410., 38908., 91533. }, 0.9614421422806174 }, + { 0, { 46262., 123227., -97700., -14018., -43879., -8187. }, 0.9766842863215204 }, + { 0, { -150852., -63931., 82864., -16270., 39997., -7673. }, 0.9902969827486889 }, + { 0, { 580431., 130968., -306415., 215177., -145258., 96440. }, 1.0007147457558208 }, + { 0, { -315446., -113604., 191678., -91901., 90254., -41025. }, 1.0094608196461621 }, + { 1, { -3456., -446353., 229052., 185524., 103258., 88674. }, }, + { 0, { -189618., 113597., 8806., -140678., 6615., -64661. }, 1.0246980386783211 }, + { 0, { 4202483., 3000173., -2459447., 3363962., -1179328., 1385544. }, 1.0482030530764612 }, + { 1, { 1203874., -292900., 70065., 779465., 3811., 351179. }, }, + { 0, { 735702407., -1021641460., 944902088., 667150510., 387126729., 310854521. }, 1.0592824949737543 }, + { 1, { -225227., -2656169., 2070353., -678917., 860531., -321583. }, }, + { 0, { -906103., 1248865., -1249024., -614151., -510434., -296157. }, 1.0735437556293621 }, + { 0, { 133104., -244102., 224418., -12870., 91960., 2555. }, 1.0875704154537504 }, + { 0, { -98191., 334119., -93120., 114027., -39453., 36051. }, 1.1091289342301658 }, + { 1, { 131527., 1551., 58039., -54878., 19569., -21191. }, }, + { 2, { 65753., -188377., 68757., -76650., 28565., -25385. }, }, + { 0, { 61867., -343846., 16261., -113012., 8972., -35330. }, 1.1225031990563263 }, + { 0, { -7347., 137455., 17960., 22121., 5845., 4618. }, 1.1328877109810458 }, + { 0, { 11044., -88733., -25019., 37631., -8977., 18971. }, 1.1464066922869334 }, + { 0, { 11350781., -248125., 270190., 10489566., -145232., 4511204. }, 1.1622993228682923 }, + { 0, { -52127., 35850., -14691., -77957., -5084., -33671. }, 1.1728440239417584 }, + { 1, { -12008., 23292., -2942., -7282., -1291., -3563. }, }, + { 0, { 4294., 460., -3058., 3439., -1373., 1474. }, 1.1878668274609869 }, + { 0, { -1289., -734., 1786., -2248., 786., -941. }, 1.1998692758026896 }, + { 0, { 361., -793., 308., -1262., 122., -515. }, 1.2317935880659059 }, + { 0, { -195., 2534., -191., 3923., -67., 1609. }, 1.2448441509199817 }, + { 0, { -5385., -19904., 6349., -3489., 3158., -1221. }, 1.2560282933480911 }, + { 0, { 413790., -613072., 546872., 412919., 228594., 191066. }, 1.2653944427657104 }, + { 1, { -20115., 4841., -30066., -2156., -12194., -733. }, }, + { 0, { -56810., -2443., 14410., -37878., 7539., -15830. }, 1.2776927606634534 }, + { 1, { -883., -20034., 8211., 10587., 3489., 5153. }, }, + { 0, { -2444., 1465., 414., 793., 279., 259. }, 1.2924980461987274 }, + { 0, { 864., -632., -623., -218., -312., -55. }, 1.3014788911147197 }, + { 0, { 26233., -115536., 1588., -54448., 260., -17749. }, 1.3673745438817879 }, + { 0, { -366768., 241272., -241508., -348534., -93295., -154126. }, 1.3764442873088090 }, + { 1, { -4898., -22923., 39935., -25211., 16711., -10168. }, }, + { 0, { 7481., -4670., -7877., -4002., -3598., -1348. }, 1.3867469996002664 }, + { 0, { -2408., 1756., 2965., 1290., 1336., 416. }, 1.3958662188525488 }, + { 0, { 972., -751., -912., -28., -417., 39. }, 1.4068178503492994 }, + { 0, { -20343., 4804., -6579., -18594., -2298., -8037. }, 1.4396065958679622 }, + { 0, { 894., 1313., 1992., 632., 793., 162. }, 1.4496940872610145 }, + { 0, { -1983., -4631., -7582., 723., -2974., 660. }, 1.4625845924962999 }, + { 0, { 648492., 510288., -503142., 612739., -227097., 254982. }, 1.4790870471301645 }, + { 1, { -7847., 5399., -12816., -32834., -5768., -13533. }, }, + { 2, { -5935., 4107., 3696., -8454., 1585., -3763. }, }, + { 0, { 471., -326., 1178., -492., 455., -210. }, 1.5004111597792062 }, + { 0, { -1102., 5980., -5712., -389., -2409., -319. }, 1.5140608680143952 }, + { 0, { 235., -531., 427., -154., 168., -42. }, 1.5277453924778683 }, + { 0, { 1530., 1846., -2090., 2162., -918., 867. }, 1.5510420454912401 }, + { 0, { -8695., -5270., 3702., -11973., 1786., -4877. }, 1.5653775377343770 }, + { 0, { 108442., 13977., -7635., 130460., -5580., 54970. }, 1.5750243622459430 }, + { 0, { 12988439., -44123991., 40567288., 11522384., 17076170., 6015693. }, 1.5888946239094504 }, + { 1, { -297436., -96470., 75756., -224551., 37973., -97866. }, }, + { 2, { -140095., 49206., -15492., -114871., -4072., -51280. }, }, + { 0, { -213784., 360331., -204961., -174648., -85958., -85816. }, 1.5999174688094493 }, + { 0, { 34848., -82622., 33382., 30061., 14595., 15488. }, 1.6100691344943834 }, + { 1, { 43010., 10308., -12996., 14235., -6844., 6576. }, }, + { 0, { -1221., -3776., 845., 910., 489., 461. }, 1.6263710325060152 }, + { 0, { 554., 745., -310., -340., -171., -141. }, 1.6392210890659527 }, + { 0, { 20026., -16502., -3852., -9369., -2306., -3026. }, 1.6820002884969334 }, + { 0, { 813659., -336143., 300160., 724773., 109085., 319540. }, 1.6916922798012188 }, + { 1, { 1602., -17457., 27667., -10914., 11558., -4357. }, }, + { 0, { -5880., 742., -5245., -7508., -2092., -3141. }, 1.7051957386154943 }, + { 0, { 1260., 203., 1855., 1795., 753., 722. }, 1.7137017697983383 }, + { 0, { -181., 118., 893., -230., 356., -133. }, 1.7715707154892435 }, + { 0, { 715., -2305., -3568., 635., -1416., 471. }, 1.7804397794409668 }, + { 0, { 100206., -23631., 4854., 93727., 818., 43069. }, 1.7946296659726320 }, + { 1, { 4224., -2685., 2729., -6839., 1031., -2737. }, }, + { 2, { 84., 2460., 356., -441., 163., -287. }, }, + { 0, { -3928., 2396., -1944., -4367., -655., -1968. }, 1.8082885005321963 }, + { 1, { -1281., -1070., 1425., -1360., 663., -508. }, }, + { 0, { -434., -572., -639., 581., -222., 273. }, 1.8824124715680111 }, + { 0, { 5875., -12921., -96., 9965., 681., 4780. }, 1.8981641851181350 }, + { 1, { 3309., -927., -4565., 1029., -1995., 584. }, }, + { 0, { -14234., 16692., -15551., -9091., -6255., -4365. }, 1.9094415371356366 }, + { 1, { -5299., -4657., 1995., -4393., 1032., -1732. }, }, + { 0, { -215., 526., -123., -7., -42., -32. }, 1.9243893317056575 }, + { 0, { -1607., 1027., -1015., -1384., -397., -623. }, 1.9690057130935361 }, + { 0, { 907., -182., 55., -552., -12., -217. }, 1.9888685259410335 }, + { 0, { 80093., 1775., -15336., 49616., -8505., 21779. }, 2.0075896690458515 }, + { 1, { 3675., 886., 9437., 1003., 3841., 302. }, }, + { 2, { -2718., 2441., 1312., 2111., 647., 750. }, }, + { 0, { -749., 2213., 3067., 2387., 1321., 864. }, 2.0177406604319246 }, + { 0, { 82., 445., -97., 12., -47., -15. }, 2.0452450030168667 }, + { 0, { 939., 145., -364., 1452., -175., 622. }, 2.0918668035808388 }, + { 0, { 29763., -11270., 1340., 26747., 35., 12241. }, 2.1052596067061962 }, + { 1, { -752., -10176., 11464., -2886., 4981., -1015. }, }, + { 0, { -122433., -1948247., 1789021., -131787., 769924., -8458. }, 2.1185267640432053 }, + { 1, { -14746., -2745., 3642., -14273., 1472., -6101. }, }, + { 2, { -1381., -4337., 4157., -766., 1816., -296. }, }, + { 0, { 207., 2382., -2373., 455., -1016., 119. }, 2.1318821280894955 }, + { 0, { 317., -2045., -1566., 2287., -544., 1086. }, 2.2071860619320218 }, + { 0, { 45591., -42445., 35109., 42326., 14234., 19311. }, 2.2209783021218397 }, + { 1, { 100., -868., 334., -2387., 63., -853. }, }, + { 2, { -274., 556., 48., -449., -11., -223. }, }, + { 0, { 347., -11., -113., -232., -65., -97. }, 2.3082627901909945 }, + { 0, { 16054., -5418., 3307., 5345., 1043., 2606. }, 2.3219886353180517 }, + { 1, { -19., -205., 4127., -783., 1741., -387. }, }, + { 2, { -647., 309., -95., 84., -24., 13. }, }, + { 0, { 2409., -2117., -2607., -228., -1170., 136. }, 2.4200734218253461 }, + { 1, { 19., -536., 414., 216., 214., 119. }, }, + { 0, { 2201., 3681., -3051., 2808., -1347., 1419. }, 2.4294275957278497 }, + { 0, { -423., 745., -737., -631., -315., -318. }, 2.4385609820738123 }, + { 0, { 300., -1484., -1399., 755., -530., 425. }, 2.5260130486716892 }, + { 0, { 5490., -1919., 480., 4689., 156., 2132. }, 2.5361042359568997 }, + { 1, { 215., -174., 275., -263., 81., -64. }, }, + { 0, { 308., -156., 185., 292., 82., 121. }, 2.5459330159552604 }, + { 0, { 5463., 46., 202., 1602., -48., 766. }, 2.6374295145352566 }, + { 1, { 581., 381., 1106., 451., 460., 165. }, }, + { 0, { -36662., -85712., 78236., -34663., 34443., -12759. }, 2.6481663000165407 }, + { 0, { 1477., -1072., -1320., -336., -622., -3. }, 2.7397040327703399 }, + { 0, { 1659., -2071., 2391., 2294., 963., 1120. }, 2.7490048220101793 }, + { 1, { -1336., -455., -28., -609., -7., -260. }, }, + { 0, { 1366., -1582., -496., 1101., -173., 602. }, 2.8494750099923127 }, + { 1, { 141., -92., 188., -517., 50., -205. }, }, + { 2, { -23., 180., 65., -168., 19., -81. }, }, + { 0, { 1495., 362., 78., -117., -5., -23. }, 2.9530548702113095 }, + { 1, { 107., 70., 510., 245., 223., 92. }, }, + { 0, { 497., -250., -298., -554., -148., -215. }, 3.0510128159210788 }, + { 0, { 602., -271., -371., 232., -153., 154. }, 3.1654820818460752 }, + { 0, { -3037., -3424., 3284., -2814., 1483., -1134. }, 3.1775127563235914 }, + { 0, { 483., 216., 36., -224., 1., -77. }, 3.2694305438716178 }, + { 0, { 4935., 381., -381., 4408., -298., 2013. }, 3.3406022698986924 }, + { 0, { 235., -159., -104., -386., -58., -142. }, 3.3695779911862527 }, + { 0, { 339., -47., -126., -82., -67., -13. }, 3.4790904552288531 }, + { 0, { -5663., -29987., 27509., -5003., 11933., -2162. }, 6.2830762443769794 }, + { 0, { -59., -82., -23., 24., -12., 18. }, 8.4686530580615642 }, + { 0, { -17635., 511., -921., -16011., 697., -7231. }, 10.2131290491330340 }, + { 0, { -227., 115., -23., -264., 11., -116. }, 10.2220725794374050 }, + { /* end jupiter */ -1, }, +}; + +chap95_rec chap95_saturn[] = { + { 0, { 359537177., 0., -7206382337., 0., -2991243838., 0. }, 0. }, + { 1, { -20377631., 0., 15883341., 0., 8071624., 0. }, }, + { 0, { -64236683., -52860196., 142442224., -49744952., 58042432., -24365782. }, 0.0168745727060282 }, + { 0, { 30177751., 18129933., -67656128., 22849231., -27163043., 12315751. }, 0.0265670063186787 }, + { 1, { -8215259., 21212644., -23554648., -50768821., -12209063., -18901172. }, }, + { 0, { 1964057., 724735., -4686899., 1417179., -1646759., 941321. }, 0.0493811968866401 }, + { 1, { -134000., 3348965., -10011640., -8728398., -4234207., -2535628. }, }, + { 0, { 5686743., 3475773., -334368., 3091703., 72747., 926256. }, 0.0662237107929899 }, + { 0, { 554020., 1079938., -2966895., -1601162., -1509110., -278930. }, 0.0843726142307477 }, + { 0, { 4610964., 21987586., 31945199., -5263812., 13882828., -4598499. }, 0.1010129457774524 }, + { 0, { -66034588., -94070401., 111667599., -68387008., 47456033., -25071683. }, 0.1128014605528121 }, + { 1, { -4294328., -12886739., 37728596., -1754644., 11349347., 1748900. }, }, + { 0, { 6081642., 23561987., -38577166., -9734586., -12217167., -502775. }, 0.1245386660916166 }, + { 0, { -11635904., -19574871., 36907731., -11918213., 11119486., -6364841. }, 0.1376921108585382 }, + { 0, { 104499813., 75674727., -132241710., 152846005., -35848667., 59734045. }, 0.1532223867622918 }, + { 0, { -119336309., -65929841., 110429555., -174948245., 28176754., -66225503. }, 0.1635156403544941 }, + { 1, { 52564319., -48818442., 77555859., 94135021., 31177405., 26437148. }, }, + { 2, { 56660530., 23619473., -35687037., 84928050., -8020678., 31023884. }, }, + { 0, { 59047999., -9112158., 18208825., 74844916., 8173908., 26476289. }, 0.1849404508049137 }, + { 0, { -195085048., 130948239., -157301623., -207103141., -57416134., -80784650. }, 0.1994326216901347 }, + { 0, { 61319082350., -72972816459., 68513342186., 55646924765., 25657191842., 26113032275. }, 0.2133734516582497 }, + { 1, { 58897194., 107088220., -104901917., 68459614., -34345682., 47420026. }, }, + { 2, { -100212137., 21822222., -43604349., -89401596., -12674282., -32150723. }, }, + { 0, { 18845535., -49223999., 35615797., 26623302., 16402647., 15391365. }, 0.2335002178020494 }, + { 0, { -4180907., 4465884., 38621., -479609., 814285., -1219056. }, 0.2510310507212479 }, + { 1, { -18966213., 1413107., 11641634., -15116208., 6182492., -9256829. }, }, + { 0, { 3257184., 9509868., -11066286., -7321147., -6968557., -3079573. }, 0.2622227446243415 }, + { 0, { -1404116., -417364., 2858988., 1478988., 1856930., 162727. }, 0.2775489797512927 }, + { 0, { 1467706., 1107543., -4409004., 226468., -2199319., 678454. }, 0.2926511843672006 }, + { 0, { -63623237., -37507272., 39122548., -67696931., 18154709., -27796755. }, 0.3162439145857524 }, + { 1, { -3829645., 1269380., -9251051., -8961610., -4871745., -2487901. }, }, + { 2, { 1909651., 1468024., -7914338., 6203925., -2960534., 3971621. }, }, + { 0, { 6281876., -3642612., -4761114., 23447042., 286480., 12241212. }, 0.3340526064764550 }, + { 0, { -5802348., 5752123., -4991225., -30347977., -5911367., -14358380. }, 0.3467225133858732 }, + { 0, { 7539581., -27234846., 89254406., 72087653., 50683522., 25464083. }, 0.3654342931118227 }, + { 1, { -16970597., 906805., 25342361., -65544284., 5459306., -34110644. }, }, + { 2, { -5198192., 11224087., -33200716., -38195205., -20121188., -14873633. }, }, + { 0, { -2145161., 31156404., -111624554., -59422928., -60033284., -17237400. }, 0.3766625707476834 }, + { 0, { -2433702., -8759560., 35127703., 5461246., 17518688., -795950. }, 0.3868793178145906 }, + { 0, { 3948221., 3250926., -14710717., 6016597., -6668684., 4126312. }, 0.4021189702952532 }, + { 0, { -64852219., -1152783., 37078116., -78426047., 17075754., -36402504. }, 0.4173317886569649 }, + { 0, { 2598837096., -322512661., 333925850., 2403155625., 25718615., 1008149551. }, 0.4268085445169599 }, + { 1, { -8046615., 50513333., -65775281., -14855286., -30373245., -5862741. }, }, + { 0, { 14632122., -1627420., 391595., 27967394., 1503248., 13109492. }, 0.4393540871607130 }, + { 0, { -3977607., 2348335., -4492336., -11638695., -3044963., -5280793. }, 0.4516261147924168 }, + { 0, { 3891847., -6235742., 13257786., 12849113., 7381680., 5287411. }, 0.4647357720725654 }, + { 0, { -2681944., 5714068., -11275550., -8345687., -6000449., -3297402. }, 0.4765294470438712 }, + { 1, { -3310032., -1656488., 6283436., -7934719., 2454880., -4374462. }, }, + { 2, { 581001., -2310426., 4449727., 1912796., 2258154., 644572. }, }, + { 0, { -543181., 190668., 100357., -477814., 102237., -296580. }, 0.4992649823773071 }, + { 0, { 734019., 40318., 205332., 241668., 50065., 172083. }, 0.5130863461740709 }, + { 0, { 34991657., -27811324., 27384011., 28671165., 10659597., 13066000. }, 0.5295353231453532 }, + { 1, { -995667., 165111., 1788489., 16637., 818086., -43110. }, }, + { 2, { -317358., -198759., -6708., 263693., 27631., 133736. }, }, + { 0, { -31862., -65198., 73955., 29129., 36339., 15797. }, 0.5497097571860546 }, + { 0, { -4929., 225052., -215444., -8168., -89868., -12808. }, 0.5633695884286543 }, + { 0, { 24691., 22218., -9270., 18179., -4474., 5589. }, 0.5991350601911121 }, + { 0, { 289471., 202198., -100019., 60710., -58404., 1113. }, 0.6158926177569189 }, + { 1, { 99636., -158087., 49023., 12201., 5200., 13036. }, }, + { 0, { -1368816., -1646305., 699872., -1449808., 365729., -462486. }, 0.6277831102482128 }, + { 0, { 86066856., 61934875., -56200895., 80007767., -26961118., 30372088. }, 0.6401904307430363 }, + { 1, { -1903624., 1069032., -956603., -1766047., -334714., -771306. }, }, + { 2, { 388212., 231504., -217129., 594559., -86428., 243060. }, }, + { 0, { 806222., 541401., -454902., 1046875., -196326., 413041. }, 0.6510631728715514 }, + { 0, { -45865., -22253., 10036., -80738., 2915., -31853. }, 0.6610474418282967 }, + { 0, { 7873., 2358., 3189., 5877., 1281., 2008. }, 0.6837277548947647 }, + { 0, { -98664., 39992., -40413., -90837., -12525., -38879. }, 0.7043645359718698 }, + { 0, { -1946., 3664., 10236., -357., 4293., -1167. }, 0.7177278015736290 }, + { 0, { -284513., 3015890., 2554237., 521699., 1046024., 49179. }, 0.7348232721925007 }, + { 1, { 192624., 52403., 33461., -150025., -105., -61152. }, }, + { 0, { -574265., -320413., 457058., -572461., 214214., -240685. }, 0.7435248864377025 }, + { 1, { 1145., -36334., 41717., 108651., 15647., 49114. }, }, + { 0, { 4558., -12170., 12006., 2809., 4790., 1802. }, 0.7636282240814432 }, + { 0, { -13700., 9256., -10447., -12051., -3998., -5133. }, 0.7781708314331308 }, + { 0, { 2247., -693., 1592., 1083., 680., 202. }, 0.7950594399751412 }, + { 0, { -1275., 5493., -6655., 924., -2492., 1116. }, 0.8129117802019118 }, + { 0, { -1223., -19571., 23014., -16306., 6735., -10155. }, 0.8251778324059539 }, + { 0, { 303076., 327040., 524629., -601728., 145475., -284414. }, 0.8382097667143232 }, + { 1, { -68015., 68576., -104282., -95123., -56039., -18028. }, }, + { 0, { 804121., 5204866., -4807644., 856208., -2083791., 112505. }, 0.8530682323228537 }, + { 1, { 29622., -215766., 182882., 33800., 76379., -13007. }, }, + { 0, { -13943., 51584., -40954., -8800., -23024., -3606. }, 0.8654403493251860 }, + { 0, { 3328., -7556., 4381., 1661., 2910., -36. }, 0.8766682028622256 }, + { 0, { -1505., 1631., -856., 784., -507., 674. }, 0.8895787094971168 }, + { 0, { -7919., -1616., 1989., -5290., 1264., -2147. }, 0.9133756947048002 }, + { 0, { -719., -2923., 1034., -5631., 504., -2040. }, 0.9236279354499169 }, + { 0, { 235224., 39046., -67004., -248093., -51203., -88317. }, 0.9453092341234691 }, + { 1, { 23462., -3456., -13540., 1977., -2121., 4776. }, }, + { 2, { -14574., -833., 1399., 12342., 2166., 4371. }, }, + { 0, { -26186., -43172., 35585., -24094., 17801., -8640. }, 0.9587102428763801 }, + { 0, { 5306., 3426., -2598., 4654., -1521., 1836. }, 0.9687040706037242 }, + { 0, { -1404., -1568., 973., -1250., 478., -476. }, 0.9844044794489883 }, + { 0, { 710., 549., -640., -936., -297., -397. }, 1.0125530865194814 }, + { 0, { -4798., 528., 2241., 2772., 1073., 1027. }, 1.0243303434648821 }, + { 0, { 19204., -11735., -10052., -9127., -4600., -2887. }, 1.0350677988213037 }, + { 0, { -70967., 104737., 71732., 36807., 31189., 9485. }, 1.0444890430562743 }, + { 0, { -225798., 798684., 944928., 428637., 404105., 131989. }, 1.0535670598935039 }, + { 0, { 421437., -821624., 460671., 296203., 193979., 145015. }, 1.0624723083698995 }, + { 1, { 404141., 190563., -153412., 239290., -77801., 95534. }, }, + { 0, { -6822., -2424., -12141., -503., -4568., -254. }, 1.0799687683920178 }, + { 0, { 5231., 2124., 4765., -2411., 1681., -1002. }, 1.0944898935961935 }, + { 0, { -4360., -571., -2843., 2544., -920., 1015. }, 1.1034700208578079 }, + { 0, { 2352., -783., 1220., -2044., 355., -732. }, 1.1190075299813413 }, + { 0, { -5735., 3169., 186., 5121., 420., 1436. }, 1.1356439922218147 }, + { 0, { 26551., -30281., 5089., -56530., 4098., -12591. }, 1.1476494842799982 }, + { 0, { 182096., 230606., 190305., 20362., 32484., -34547. }, 1.1561539197957733 }, + { 1, { -46354., -35766., 25278., 21603., 6113., 24924. }, }, + { 2, { -6693., -10691., -762., -24972., 5267., -3607. }, }, + { 0, { 7509., -14080., 2266., 4828., -2812., 2396. }, 1.1724975800169239 }, + { 0, { -1097., 4594., -221., -711., 861., -846. }, 1.1827508062529084 }, + { 0, { 268., -1663., 197., 151., -139., 350. }, 1.1922546935063294 }, + { 0, { 3821., -6929., -9691., -9738., -1997., -3976. }, 1.2526642649376578 }, + { 1, { -3679., 2852., -872., 4458., -151., 647. }, }, + { 0, { 103288., 30887., 44394., -80994., 5313., -31354. }, 1.2615381418438327 }, + { 0, { 11722., -929., 20555., -32545., 6476., -10964. }, 1.2737411543354145 }, + { 0, { -17778., 2234., -8752., -2076., -2194., -1934. }, 1.2848042137871682 }, + { 1, { -807., -10464., -4345., -4583., -776., -1210. }, }, + { 0, { -2021., 243., -476., 1775., -175., 485. }, 1.2966706439177036 }, + { 0, { -414., 1251., 1334., 193., 402., 122. }, 1.3428511130177547 }, + { 0, { -6545., 29273., 20095., -2836., 7521., 1278. }, 1.3563973340863262 }, + { 1, { 13556., 3272., -1197., -10568., 545., -3663. }, }, + { 0, { -180708., 208447., 210704., 176234., 95276., 55650. }, 1.3681253803708262 }, + { 1, { 18503., 8458., -1041., -19835., 212., -7272. }, }, + { 2, { -2022., 9714., 3806., 25., 1699., 1106. }, }, + { 0, { 967., -692., -12., -1766., -76., -677. }, 1.3856345885533017 }, + { 0, { 704., -587., -2388., 1139., -927., 144. }, 1.4516885121122214 }, + { 0, { -2400., 3304., 8864., -6463., 3877., -1185. }, 1.4602508651959594 }, + { 0, { 69982., 97834., 73391., 17685., 16742., -10304. }, 1.4727239692395073 }, + { 1, { -11044., -13056., 19308., 14020., 3724., 10827. }, }, + { 2, { -6082., -426., 3637., -7457., 3010., -854. }, }, + { 0, { 2590., -1868., 1096., 1043., -731., -69. }, 1.4872423683478513 }, + { 0, { -938., 62., 121., -521., 280., -164. }, 1.4985129994148070 }, + { 0, { 1803., 2377., 1110., -3335., 260., -1477. }, 1.5652937634682971 }, + { 0, { 64498., -5114., 68142., -30202., 22032., -11748. }, 1.5815555196973523 }, + { 1, { -22825., 4620., 14325., -12393., 6615., -5873. }, }, + { 2, { -7166., 4559., -5012., 2048., -1874., 652. }, }, + { 0, { -2200., -10219., 11039., 3346., 4934., 1509. }, 1.5955514308541998 }, + { 0, { 1099., 1374., -2363., -260., -1043., -86. }, 1.6049203503395801 }, + { 0, { -1208., -104., 561., 969., 230., 560. }, 1.6737223157218182 }, + { 0, { -86480., 70728., 67924., 86008., 31534., 31153. }, 1.6843589552967209 }, + { 1, { 933., 1492., 4350., -2566., 1516., -847. }, }, + { 2, { -1244., -445., -70., 369., 72., 345. }, }, + { 0, { 1465., -2624., 397., -65., -76., -7. }, 1.6977622139834585 }, + { 0, { 14992., 53026., 36206., 5674., 12375., -4229. }, 1.7889276713056903 }, + { 1, { -1089., -6208., 2064., 7721., -744., 4049. }, }, + { 2, { -1281., -2343., -210., 276., 49., 532. }, }, + { 0, { 3295., -4264., -3112., 6622., -2534., 1159. }, 1.8013654629975304 }, + { 1, { 1876., 442., -2702., -870., -615., -793. }, }, + { 0, { 21586., 22255., 25169., -13704., 7397., -6814. }, 1.8952695349759525 }, + { 1, { 1293., 636., 1855., -2161., 651., -493. }, }, + { 2, { -1508., -959., -1185., 1162., -341., 540. }, }, + { 0, { -837., -468., -77., 639., 49., 332. }, 1.9082748451618770 }, + { 0, { -39181., 17943., 18554., 39996., 9033., 15315. }, 2.0006786235742782 }, + { 1, { 70., 479., 1963., -746., 664., -147. }, }, + { 2, { -729., 4., -323., -76., -29., 30. }, }, + { 0, { -726., 389., 1661., 467., 647., 367. }, 2.0949703642270960 }, + { 0, { -2813., 21512., 16741., 5023., 6930., 302. }, 2.1045989992211052 }, + { 0, { 6314., -196., -4305., 3407., -2614., -923. }, 2.1133294411524268 }, + { 0, { -1183., -1102., 1934., -946., 1020., -24. }, 2.1218152921149840 }, + { 0, { 7013., 13819., 14243., -3085., 4615., -2198. }, 2.2116085451863530 }, + { 1, { 548., 591., 1334., -724., 439., -127. }, }, + { 2, { -499., -647., -721., 383., -233., 184. }, }, + { 0, { -96., -348., -69., 163., -3., 83. }, 2.2246966026380783 }, + { 0, { -16878., 3417., 3609., 17709., 2011., 6948. }, 2.3169860146393306 }, + { 1, { -184., 273., 1066., -86., 376., 65. }, }, + { 2, { -421., -143., -106., -9., 9., 50. }, }, + { 0, { -1773., 10467., 5877., 4502., 2612., 236. }, 2.4212184393363345 }, + { 1, { 100., -1698., -212., 1585., -581., 698. }, }, + { 2, { -416., -532., 192., 38., 49., 218. }, }, + { 0, { 922., 6585., 6161., 638., 2178., -274. }, 2.5279051498015881 }, + { 1, { 305., 668., 969., -324., 338., -92. }, }, + { 0, { -7788., -691., -557., 7570., 62., 3142. }, 2.6333307376329276 }, + { 1, { -16., 174., 511., 158., 148., 85. }, }, + { 0, { -2797., 3622., 2705., 2693., 1341., 812. }, 2.7374368855151237 }, + { 0, { 1332., 523., -1008., -331., -394., -592. }, 2.7462646949156313 }, + { 0, { -528., 3192., 2851., 1151., 1069., 178. }, 2.8441606111313287 }, + { 1, { 54., 266., 527., 58., 138., 54. }, }, + { 0, { -3128., -1136., -1090., 3069., -358., 1285. }, 2.9496547906250985 }, + { 0, { -1332., 1366., 789., 1313., 449., 356. }, 3.0553439327040071 }, + { 1, { 46., -504., -405., 221., -232., 58. }, }, + { 0, { -722., 1469., 1417., 916., 574., 235. }, 3.1603882818225530 }, + { 1, { -8., 210., 314., 24., 105., 6. }, }, + { 0, { -1228., -704., -610., 1193., -210., 520. }, 3.2660150757959667 }, + { 0, { 4966., 349., -230., 4527., -271., 2058. }, 3.3406700896158381 }, + { 0, { -1003., 494., 345., 782., 229., 294. }, 3.3700954272546491 }, + { 0, { -642., 504., 417., 592., 188., 175. }, 3.4766263286125869 }, + { 0, { -5495., -30050., 27370., -5109., 11883., -2182. }, 6.2830758491321381 }, + { 1, { 12., 3., -21., -32., -16., -11. }, }, + { 0, { -127., 83., -47., -145., -13., -74. }, 8.4563910900857575 }, + { 0, { -17655., 888., -832., -16055., 726., -7281. }, 10.2133651230379790 }, + { 1, { -15., -178., 73., 27., 40., 18. }, }, + { 0, { 10., 56., 204., -33., 91., -14. }, 10.2233419556680150 }, + { /* end saturn */ -1, }, +}; + +chap95_rec chap95_uranus[] = { + { 0, { 13442911073., 0., -1930919457., 0., -1035250405., 0. }, 0. }, + { 1, { 54660667., 0., 47196247., 0., 21339801., 0. }, }, + { 0, { -6259970., -59715827., 56026092., -14879299., 23598892., -7731463. }, 0.0168745727060282 }, + { 0, { 5314993., 24095734., -17644181., 11961180., -6018215., 6587969. }, 0.0271621114651946 }, + { 0, { 816977., 27548111., -6448076., -468658., -4057252., -1448251. }, 0.0379771556339559 }, + { 0, { -1624242., 11338144., -20621799., 1496992., -5688694., 248222. }, 0.0558181533535525 }, + { 0, { 131350139561., 139711771423., -127221614269., 120945393838., -57589414088., 51010747052. }, 0.0747869939016385 }, + { 1, { 83579181., -50475439., 18032923., 50477352., 27217847., 30911037. }, }, + { 2, { 56177356., -62348507., 45006161., 56816875., 23394627., 20236290. }, }, + { 0, { -3192217., -67613872., 26532975., 31518890., 20804461., -5888651. }, 0.0851607526391989 }, + { 0, { 41246376., 168261887., -122401100., -97532527., -40313762., 5947933. }, 0.1076082382556661 }, + { 0, { -36235133., -140754409., 98201785., 64357246., 36255198., -9379330. }, 0.1131136321134916 }, + { 1, { 90255544., -46394994., -47508423., 75649120., 8064423., 19668708. }, }, + { 0, { -32042356., -21687295., 28029568., 15213468., 1662570., -3156568. }, 0.1256919464048962 }, + { 0, { 44969984., -2310664., -13084603., 20841905., 1428192., 12115421. }, 0.1384460864609660 }, + { 0, { -524718966., -4511367463., 4156633821., -484927968., 1817662129., -148236372. }, 0.1495664992280332 }, + { 0, { 61267776., 1565740., -24266489., 45519765., -3901964., 18298390. }, 0.1552897599647365 }, + { 0, { -7222268., 4911333., 3283374., -6377102., -254066., -1537379. }, 0.1694039594031046 }, + { 0, { 5873930., -4900474., -1827803., 7852582., -31798., 1819946. }, 0.1845250832150644 }, + { 0, { 1077339., 18380396., -901066., -10767827., -265560., 162663. }, 0.2002468734837309 }, + { 0, { -154311950., -219502970., 131091842., 178959446., 20655458., 5719299. }, 0.2141097583453364 }, + { 0, { -5528333., 212500368., -111109179., -139612191., -43337512., -21342579. }, 0.2193685795401007 }, + { 1, { -104517351., 177302072., 101064024., -75975513., -8816707., 3791842. }, }, + { 0, { 173653756., 151082404., -200861767., -135511564., -29950212., -17024507. }, 0.2293024101260499 }, + { 0, { -125918181., -44661266., 113832135., 56003631., 10092584., 6332126. }, 0.2359817391381943 }, + { 0, { 47624832., 2554277., -41914694., -13040594., -2759654., -2423818. }, 0.2431604796510437 }, + { 0, { -8805576., 2810717., 8600588., 666061., 636138., 663527. }, 0.2535948403663328 }, + { 0, { 1249271., -2422256., -2280787., 1243851., -81187., -241977. }, 0.2733943804314553 }, + { 0, { 90677., 14160054., 8529623., -8138579., 1686982., 1494393. }, 0.2885148535115661 }, + { 0, { 1004449., -20392040., -8104371., 18545176., -2778508., 705194. }, 0.2992461358046305 }, + { 1, { 5543727., 3362260., -1567031., -3163455., 585366., 471498. }, }, + { 2, { 2655788., 6883407., 3736665., -5070470., 1464904., 724248. }, }, + { 0, { 6192631., 6484479., 3731891., -6957619., 2642135., 445342. }, 0.3105692746147310 }, + { 0, { -1442546., -845134., -640944., 1375084., -614517., 35173. }, 0.3190867931520337 }, + { 0, { 683659., 282897., 363207., -694577., 243073., -261582. }, 0.3384589317094125 }, + { 0, { 210243., 95767., -88268., -40253., -126237., -71385. }, 0.3483018025771290 }, + { 0, { -122260., -61161., 139582., -75155., 89557., -59104. }, 0.3543646679104152 }, + { 0, { -341621., -166635., -6649., -236115., -4011., -98828. }, 0.3749354720310226 }, + { 0, { -34509., -47428., -33958., 69865., -15389., 28074. }, 0.3881544744399507 }, + { 0, { 127606., 82441., 63875., -131276., 30216., -55026. }, 0.4044642096018178 }, + { 0, { -55719., 35282., 53204., 42166., 20409., 8040. }, 0.4146735688956036 }, + { 0, { 745574., -86708., 85642., 660718., 2349., 278769. }, 0.4267276978319757 }, + { 0, { 46965., -63806., -140582., -2689., -51451., -6263. }, 0.4523712047583937 }, + { 1, { -44676., -29125., -21496., 62165., -11514., 20667. }, }, + { 0, { -47313., 131228., 153909., 13721., 54937., 13501. }, 0.4584750578982092 }, + { 0, { 64299., -217224., -204896., -47815., -89991., -26071. }, 0.4786471499447322 }, + { 0, { -216., 53443., -19130., -71538., -27839., -11228. }, 0.4920510287505367 }, + { 0, { -151224., -75735., -3305., 268854., -6542., 67361. }, 0.5051499531573665 }, + { 0, { 928196., 102377., -314167., -1414544., -33869., -402228. }, 0.5147029966036326 }, + { 0, { -1724399., 110969., 999802., 2605327., 184425., 789530. }, 0.5199630930448305 }, + { 0, { 40911206., -27399316., 26874089., 37399873., 10439229., 16767175. }, 0.5296669053399393 }, + { 1, { 583136., 1214598., 1755827., -1272416., 584159., -311166. }, }, + { 0, { 1173041., -1074191., -1886355., -1719260., -508991., -616258. }, 0.5369668320738028 }, + { 0, { -202800., 314145., 489969., 260218., 136957., 100165. }, 0.5445620632918582 }, + { 0, { 30834., -64556., -105954., -37083., -35677., -17746. }, 0.5559973222735549 }, + { 0, { 388., 18963., 34845., -2990., 13141., -175. }, 0.5645354635177183 }, + { 0, { -3029., -2222., -3901., 4299., -1477., 1512. }, 0.5864917785646289 }, + { 0, { 364., -3970., 4198., -17799., 1736., -7653. }, 0.6024030347783642 }, + { 0, { -64408., -16238., -14709., 52293., -7099., 22267. }, 0.6155618610057497 }, + { 0, { -8702., 7365., -847., 28860., 2496., 17960. }, 0.6266278765065182 }, + { 0, { 37681., 20807., -24633., 19631., -10642., 8265. }, 0.6366292306281224 }, + { 0, { 3191., 5638., -2365., 9854., -1386., 3658. }, 0.6449290790303238 }, + { 0, { -5177., -823., -2003., 5908., -949., 2341. }, 0.6763170666119763 }, + { 0, { -3638., 10059., 7207., 4377., 3151., 2651. }, 0.6862778987939261 }, + { 0, { 11748., -14352., -13920., -7897., -5625., -2944. }, 0.6979445752019332 }, + { 0, { -8438., 12018., 9236., 3586., 3477., 1505. }, 0.7048114577856822 }, + { 0, { 1834., -5463., -4042., -1281., -1755., -771. }, 0.7111948880743650 }, + { 0, { -4692., -8326., -4750., 8084., -2967., 3594. }, 0.7473196860221153 }, + { 0, { 4040., 13701., 10942., -11503., 6915., -5226. }, 0.7526899558709467 }, + { 0, { 22865., -59285., -48182., -15767., -20987., -6907. }, 0.7617757396112786 }, + { 1, { 3873., 1796., -260., -5778., -1031., -4126. }, }, + { 0, { 272., -668., 1897., 1033., 987., 184. }, 0.7769058037180200 }, + { 0, { -2176., 7071., 5492., 2930., 2571., 1313. }, 0.8199388514022748 }, + { 0, { -184998., 97937., 88915., 171155., 41794., 73600. }, 0.8350541004724259 }, + { 1, { -197., -3126., -715., 1748., -208., 825. }, }, + { 0, { -5824., 1942., -2170., -8871., -927., -3596. }, 0.8453935583217296 }, + { 0, { 252., 2148., -787., 1499., -241., 459. }, 0.8551127263577434 }, + { 0, { 3107., 6817., 10906., 19., 4504., -914. }, 0.8879713761393457 }, + { 0, { 6532., -6647., -8432., -9470., -3566., -3649. }, 0.8938517525956896 }, + { 1, { 2415., -4253., -3554., -6203., -2191., -2419. }, }, + { 0, { -3926., 523., -5326., 11396., -2537., 5007. }, 0.9076103122110721 }, + { 0, { 1486., 6143., -4417., -1583., -1883., -794. }, 0.9528977392964432 }, + { 0, { 1226., -908., 2507., -1706., 1029., -874. }, 0.9646777216958613 }, + { 0, { -11300., -22605., 26258., -9349., 12130., -5605. }, 0.9849512095278805 }, + { 1, { 1457., -2630., 860., 1293., 487., 641. }, }, + { 2, { -685., -2643., -646., -848., -225., -318. }, }, + { 0, { -2190., -3253., -891., -1611., -317., -665. }, 0.9964090016851210 }, + { 0, { -1179., -3116., -2763., 1595., -1346., 737. }, 1.0352639155374268 }, + { 0, { 7916., 3274., -3481., 4472., -1826., 2498. }, 1.0515675436820877 }, + { 0, { 697761., -973027., 901279., 634785., 369311., 295489. }, 1.0592810372818169 }, + { 1, { -1426., -5270., 2981., -566., 1562., -288. }, }, + { 0, { -1789., 2512., -1045., -777., -493., -461. }, 1.0720350844573199 }, + { 0, { 3343., -1231., -1017., -2862., -464., -1223. }, 1.1429483332496098 }, + { 0, { 11373., -2498., -1580., 8748., -883., 3741. }, 1.1609636069979286 }, + { 1, { -1522., -2635., 28., 1104., -15., 464. }, }, + { 0, { -1975., 3205., 2553., 2452., 995., 1112. }, 1.1691873087779718 }, + { 0, { -9107., -5910., -5019., 8600., -1999., 3899. }, 1.2152142837985198 }, + { 1, { -4., -1508., -1102., -242., -397., -127. }, }, + { 0, { -1971., 699., -3., 1482., -78., 551. }, 1.2226982614159414 }, + { 0, { -31., -206., 25., 63., 54., 23. }, 1.2355263592688024 }, + { 0, { 2581., 7563., 7150., -2433., 3120., -1128. }, 1.2857063346850945 }, + { 1, { 1638., -740., -410., -2267., -163., -1002. }, }, + { 0, { 6494., 16800., 14424., -5912., 6217., -2861. }, 1.2908372220692612 }, + { 0, { -2870., 4014., 4972., 2882., 2300., 1194. }, 1.3652019003010083 }, + { 1, { 121., -268., -412., 87., -162., 47. }, }, + { 2, { 204., -295., -187., 24., -76., 9. }, }, + { 0, { -3114., 953., -618., -2692., -475., -1304. }, 1.4390426416344881 }, + { 0, { 643., 554., -351., 588., -171., 247. }, 1.4790740463977397 }, + { 0, { 470., -497., -239., -9., -101., -35. }, 1.5778081754901920 }, + { 0, { 12015., -42122., 38323., 10981., 16121., 5766. }, 1.5889777636732787 }, + { 1, { -377., -28., -105., 615., -60., 248. }, }, + { 2, { -102., -86., -77., -32., -33., -28. }, }, + { 0, { -1329., 1696., 1422., 1073., 644., 441. }, 1.6698689170399983 }, + { 0, { 653., -443., 76., 737., 22., 321. }, 1.6917823552881666 }, + { 0, { 4010., -973., -776., -3727., -389., -1621. }, 1.7447101363840591 }, + { 0, { 796., 753., 911., -908., 375., -434. }, 1.8195524075201825 }, + { 0, { -67., 529., -320., 151., -164., 92. }, 1.8944084825549634 }, + { 0, { 10., -1636., 1676., -13., 718., 43. }, 2.1173586606692205 }, + { 0, { -176., -699., -800., 57., -346., 33. }, 2.1995558975407743 }, + { 0, { 4804., 493., -302., 4547., -271., 2069. }, 3.3406137564373255 }, + { 1, { -37., 63., -60., 6., -25., 5. }, }, + { 0, { -6127., -30327., 27236., -5550., 11893., -2472. }, 6.2830758108542479 }, + { 1, { 13., 96., 24., 144., -4., 74. }, }, + { 2, { 94., 86., 39., 73., 3., 45. }, }, + { 0, { -103., 11., 317., -154., 157., -57. }, 8.4710588767699999 }, + { 0, { -1072., -875., 799., -1217., 416., -503. }, 10.1988027176192690 }, + { 0, { -7126., 105., -353., -6736., 285., -3012. }, 10.2074359814049150 }, + { 1, { -735., 3920., -3778., -636., -1657., -531. }, }, + { 0, { -9779., 1441., -1464., -8409., -23., -3858. }, 10.2156685960931930 }, + { /* end uranus */ -1, }, +}; + +chap95_rec chap95_neptune[] = { + { 0, { -2753381808., 0., -2555187184., 0., -977694282., 0. }, 0. }, + { 1, { -53706852., 0., 9024894., 0., 5113590., 0. }, }, + { 0, { 5353414., 16329756., -10315608., -18211298., -4313685., -7909387. }, 0.0179617912970447 }, + { 0, { -19054385., -287482557., 282900211., 40600685., 114409567., 24195009. }, 0.0323644369574163 }, + { 0, { 171759338654., 246707191188., -226959547603., 161070501549., -97171931583., 59786666580. }, 0.0381185507042915 }, + { 0, { 269128284., 157897034., -86709918., 293605458., -39838078., 115245563. }, 0.0449423189622218 }, + { 0, { -93736103., -37825790., -26561507., -91732038., -9592733., -35920288. }, 0.0600427026897851 }, + { 0, { 178516553., 51475281., 124180124., 108331691., 49005129., 40587728. }, 0.0705779080356058 }, + { 0, { -1684231243., 681665499., -958998993., -1353650791., -355010040., -565296249. }, 0.0772675784146183 }, + { 0, { 1122264068., -578428299., 1063564939., 463713621., 414676760., 190864744. }, 0.0843726142307477 }, + { 0, { -781685034., 475952164., -808860716., -228929931., -316705638., -94548544. }, 0.0871507153151969 }, + { 0, { 56385979., -39979207., 64276567., 7694958., 25352958., 3214483. }, 0.1012471242645664 }, + { 1, { 63310243., 43285497., 22448880., 66731902., 8926250., 26309541. }, }, + { 0, { 2712359., -37080616., 26122509., -21572378., 10482381., -8529034. }, 0.1128959119291703 }, + { 0, { 1376659., 7176921., -1442553., 7206580., -479409., 2921144. }, 0.1246811309098641 }, + { 0, { -2552808., -3146754., -931704., -4559708., -491329., -1812338. }, 0.1349961443322037 }, + { 0, { 1162812., 462968., 719939., 2310847., 376498., 885784. }, 0.1402125408882514 }, + { 0, { -252283., -142326., -110247., -49287., -46731., -28945. }, 0.1616161402063230 }, + { 0, { 243162., -91598., 106479., 16854., 55597., 8501. }, 0.1776262925892778 }, + { 0, { -672251., 231673., -319786., 386301., -155882., 135214. }, 0.1904084544956719 }, + { 0, { 1867133., -1866896., 239943., -1803069., 228227., -732880. }, 0.2026926199831023 }, + { 0, { 32066276., -61274160., 6958960., -9094869., 4399306., -3854675. }, 0.2132050927412489 }, + { 1, { -11587231., -5526999., -7458452., 2330330., -3274130., 322813. }, }, + { 0, { -16700375., 45567407., 14051147., 28126677., 3238872., 12733553. }, 0.2160078733553654 }, + { 0, { 601249., -3740179., -1686685., -1590049., -510731., -804485. }, 0.2225065497464809 }, + { 0, { 71272., 256103., 179344., -10427., 65192., 15214. }, 0.2362432045351159 }, + { 0, { -58547., -82547., -51318., 58153., -20501., 15047. }, 0.2470536247773912 }, + { 0, { -6723., 19924., 26278., 12439., 9453., 3700. }, 0.2721326326759872 }, + { 0, { -3710., 4976., -7051., 254., -1464., 195. }, 0.2834391769690069 }, + { 0, { -12572., -6375., 5687., 15436., 615., 5233. }, 0.2938091870567225 }, + { 0, { -14716., 204103., 159833., 45074., 65416., 11053. }, 0.3117802888037338 }, + { 0, { -17577., 42568., 85327., -50768., 36610., -17999. }, 0.3148973170728874 }, + { 0, { -12308., -4224., -5418., 20456., -3011., 7048. }, 0.3237199721077774 }, + { 0, { -453., 863., 3006., -1602., 798., -820. }, 0.3434014414974197 }, + { 0, { -4296., 775., 4295., 2013., 1131., 245. }, 0.3679427772208049 }, + { 0, { 2844., 8238., -10394., 16799., -2798., 8324. }, 0.3785701069003719 }, + { 0, { -12477., -18952., 16324., -32949., 3954., -15266. }, 0.3833769854125967 }, + { 0, { -22365., 128., 5047., -4988., 1724., -1653. }, 0.3921552738853996 }, + { 0, { 4383., -6090., 178., -7672., -722., -3343. }, 0.4052046013289639 }, + { 0, { 714788., -68799., 122150., 736324., 10410., 310430. }, 0.4266933782608374 }, + { 1, { 12121., 14734., 49080., -28648., 20910., -8012. }, }, + { 0, { 46510., -21693., -58299., -84149., -12783., -39407. }, 0.4328778616668182 }, + { 0, { -18771., 8624., 16635., 18600., 2724., 10462. }, 0.4397536016965201 }, + { 0, { 3796., -9377., -6884., 415., -1798., -1014. }, 0.4503999814583104 }, + { 0, { -7089., 1370., -2220., 4940., -839., 2525. }, 0.4636405151525668 }, + { 0, { 5125., -1762., 2170., -4527., 631., -2166. }, 0.4745702135817129 }, + { 0, { 36688., -1584., -8174., -32426., -3946., -13037. }, 0.4886034832877044 }, + { 0, { -5607., 1955., 1641., 547., 484., -201. }, 0.5046352473687760 }, + { 0, { 45109., -21568., 12616., 26255., 6182., 12720. }, 0.5178003462986053 }, + { 0, { 40893658., -28000813., 26124943., 37354584., 10197353., 16693506. }, 0.5296623039564303 }, + { 1, { -21062., -35782., 31769., -20330., 15353., -11834. }, }, + { 2, { 10720., 5927., -12424., -538., -3613., -359. }, }, + { 0, { -28607., 23386., -38172., -43627., -12236., -20256. }, 0.5403804874893231 }, + { 0, { 66., 635., 4597., 3533., 1279., 1843. }, 0.5486365851140401 }, + { 0, { -1646., 2776., -3727., -1793., -1436., -354. }, 0.5631942288095021 }, + { 0, { -353., 460., 306., -526., 107., -133. }, 0.5739537566607668 }, + { 0, { -48., -518., 599., -406., 229., -183. }, 0.6031743297859348 }, + { 0, { -230., -43., -65., 493., -36., 204. }, 0.6175060453479511 }, + { 0, { 19445., 2550., -25130., 13108., -10967., 5418. }, 0.6333639350967218 }, + { 0, { 13473., 21421., -1023., 17345., -1204., 6355. }, 0.6373233385189475 }, + { 1, { 864., -8826., 6444., 11189., 2532., 4949. }, }, + { 0, { 1578., 3023., 2194., 1035., 836., 338. }, 0.6488504417528818 }, + { 0, { -3340., -7100., -6757., 2738., -2684., 1301. }, 0.6617542675140329 }, + { 0, { 1017., 744., 847., -982., 332., -425. }, 0.6999703675245400 }, + { 1, { 42., 10., 19., -41., 10., -16. }, }, + { 0, { 1891., 647., -479., 1705., -149., 715. }, 0.7361514522905745 }, + { 0, { -747., -1284., 1091., -507., 523., -190. }, 0.7442630004913908 }, + { 0, { -25., 104., -104., -129., -52., -37. }, 0.7785774183375729 }, + { 0, { -512., 349., 592., 506., 250., 205. }, 0.8337771392669406 }, + { 0, { -6683., 244., -856., -5864., -184., -2467. }, 0.8456021851592702 }, + { 1, { -1203., -318., -1016., 257., -373., 120. }, }, + { 0, { -24., 3933., -1820., 1132., -757., 301. }, 0.8511022350336571 }, + { 0, { 201., -293., -309., -190., -131., -68. }, 0.8740442975723336 }, + { 0, { 308., -601., -394., -483., -169., -197. }, 0.9077766553319553 }, + { 0, { -16598., 27372., 14431., 13730., 6210., 4914. }, 0.9458755575816939 }, + { 1, { -126., -1380., -1472., 3523., -609., 1504. }, }, + { 2, { 143., -540., 222., -105., 87., -32. }, }, + { 0, { 329., 51., -160., 190., -86., 81. }, 0.9622835434242619 }, + { 0, { 128., 272., 129., -159., 60., -76. }, 0.9782201450147658 }, + { 0, { 420., 770., -363., -155., -115., -92. }, 1.0124707282567436 }, + { 0, { -2248., -3936., 3766., -2218., 1312., -630. }, 1.0195444397190756 }, + { 0, { -857., -445., 435., -868., 168., -286. }, 1.0327159571739788 }, + { 0, { 3376., 287., -315., 3751., -219., 1451. }, 1.0465646752474935 }, + { 0, { 703800., -971644., 898780., 636713., 368186., 296800. }, 1.0592831516596322 }, + { 1, { -2151., -2956., 2235., -1431., 946., -697. }, }, + { 2, { -483., -834., 925., 208., 376., 16. }, }, + { 0, { -2186., 1237., -468., -857., -221., -500. }, 1.0699466056843263 }, + { 0, { 186., -107., -155., -33., -60., 1. }, 1.0856512764294945 }, + { 0, { -29., 176., 74., -52., 22., -24. }, 1.1079517768853906 }, + { 1, { 68., -82., -7., 40., -2., 17. }, }, + { 2, { 47., -125., -59., 70., -19., 30. }, }, + { 0, { -79., -181., -17., 75., 0., 31. }, 1.1242912886086618 }, + { 0, { 11970., 27., -219., 9608., -385., 4137. }, 1.1622448658047415 }, + { 1, { 148., -416., -127., 187., -55., 93. }, }, + { 0, { -1209., -240., 543., 444., 267., 180. }, 1.1657893477276102 }, + { 0, { 469., -600., 571., 404., 237., 192. }, 1.2652830224888050 }, + { 0, { -354., 198., -247., -335., -95., -149. }, 1.3749277491569207 }, + { 0, { 1875., 1364., 1214., -1793., 447., -768. }, 1.4364654070205274 }, + { 1, { 8., 17., -6., -31., -6., -14. }, }, + { 0, { -139., 116., 212., 18., 88., 1. }, 1.4674691182537039 }, + { 0, { 498., 950., -86., 629., -57., 244. }, 1.4773951127670801 }, + { 0, { -211., 132., -176., -151., -46., -37. }, 1.5126367782986652 }, + { 0, { 388., -45., -90., 143., -56., 57. }, 1.5755868837627032 }, + { 0, { -262., 394., 82., 179., 60., 76. }, 1.5824073222387700 }, + { 0, { 12274., -42141., 38563., 10654., 16215., 5586. }, 1.5888971797699629 }, + { 1, { 79., 26., 108., -116., 43., -61. }, }, + { 0, { 785., -282., 272., 723., 98., 317. }, 1.6918870360592064 }, + { 0, { 107., -210., -181., -174., -73., -72. }, 1.9281473841900221 }, + { 0, { -121., -1883., 1696., -129., 731., -7. }, 2.1185461864868773 }, + { 0, { 4845., 396., -313., 4430., -275., 2018. }, 3.3406127811310191 }, + { 1, { 1., 25., -4., 6., -1., 2. }, }, + { 0, { -5503., -29918., 27443., -5129., 11901., -2218. }, 6.2830758192539502 }, + { 0, { 149., -16., 70., 137., 24., 69. }, 6.6811483956904603 }, + { 0, { 14., 35., -47., -48., -19., -18. }, 8.4710967963441863 }, + { 1, { 1., -1., -17., -7., -7., -4. }, }, + { 0, { -17638., 555., -991., -16049., 673., -7250. }, 10.2132840866995910 }, + { 0, { -44., -259., 211., -59., 89., -24. }, 12.5662764645159580 }, + { /* end neptune */ -1, }, +}; + +chap95_rec chap95_pluto[] = { + { 0, { 101045891905., 0., 110312086224., 0., 6172492792., 0. }, 0. }, + { 1, { 2736962357., 0., 7289921703., 0., 8356828229., 0. }, }, + { 0, { -197631754827., 306850452168., -363706825084., -174047739469., -83742488844., -166197114948. }, 0.0255535185296511 }, + { 1, { -10339882709., 3627560682., -1704596538., 16082008148., -2615797675., 26582875457. }, }, + { 2, { 4555881844., 5354987944., 14163087849., 13295578846., 16544976961., 15318697408. }, }, + { 0, { 12877551757., 9141005248., 38823958976., 14074786713., 47081142550., 15934841957. }, 0.0383093966256461 }, + { 0, { -20363081906., 43534352230., -68888048997., -6054817551., -37922256273., -13665923314. }, 0.0512632279013590 }, + { 0, { 11372859069., -7331041505., 34135169446., -14164330338., 35562426110., -15256543947. }, 0.0629625800045217 }, + { 0, { -25223811753., 30334977886., -76993608077., 67207355885., -78022096909., 72709750549. }, 0.0739104871604531 }, + { 0, { 19031032676., -21606847641., 49490563510., -67837042251., 54793488046., -76660221358. }, 0.0843726142307477 }, + { 1, { 9888109415., 13390931761., 31569755508., 36949340015., 35801709881., 41063108577. }, }, + { 2, { -5391246864., 9125341237., -13760381761., 26757260022., -14709006932., 29981422406. }, }, + { 0, { 77016900., 8576436595., -758303524., 19868503441., 945693837., 21114141886. }, 0.1009656667626818 }, + { 0, { -425710709., -2201772586., -2981443460., -6781825029., -3324565933., -7783206250. }, 0.1181216342983851 }, + { 1, { 2255988361., -245384099., 5983679140., -939391729., 6514267045., -1323842110. }, }, + { 2, { 531179571., 1086625691., 2182247914., 3044397909., 2484824490., 3408389022. }, }, + { 0, { 670122662., 438458646., 1753307958., 718209879., 2047795531., 636335929. }, 0.1384952768343311 }, + { 0, { -179746215., -90394676., -766063009., -205567765., -854408253., -261725146. }, 0.1499201895782055 }, + { 1, { 110140865., -359336510., 28912500., -843378659., -67920831., -973289319. }, }, + { 0, { -118071179., 1819649., -265130729., 91955370., -298913452., 133716152. }, 0.1607487697162686 }, + { 0, { 38739517., 9002149., 12071193., -2098061., 15714901., -32081340. }, 0.1760768320056049 }, + { 0, { -2332129., 6073325., -5475022., 19141973., -5216109., 20872520. }, 0.1900452184842649 }, + { 0, { 8137788., -2826068., -3014741., -6719062., -5256740., -14189611. }, 0.2024941844674784 }, + { 0, { 18559203., -16541614., 25112499., 27558953., 14213163., 19938478. }, 0.2134752084935937 }, + { 0, { 1940133., -1267576., -1439934., -1986889., -2525015., -3851133. }, 0.2269557049635166 }, + { 1, { 1917476., -1704590., 4921317., -5434051., 4782139., -6305807. }, }, + { 0, { -822410., -563503., -2747944., -903463., -3210523., -702889. }, 0.2402479397150676 }, + { 0, { 962595., -74013., 1141117., 518365., 966375., 17190. }, 0.2531177145689346 }, + { 0, { -135658., -8463., -393590., 160618., -448155., 267162. }, 0.2643717493874742 }, + { 0, { 231442., -143885., 176186., -1443., 93050., -109960. }, 0.2777029906063622 }, + { 0, { -3000., -245., -27453., 92186., -35712., 133397. }, 0.2900297658482435 }, + { 0, { 55997., -115242., -44421., -45883., -43549., -47825. }, 0.3037412654012783 }, + { 0, { -14892., 15253., 52487., 23252., 43486., 48497. }, 0.3142803959054077 }, + { 0, { -2949., -95938., -94512., -17869., -51976., 3765. }, 0.3264027536592037 }, + { 0, { 8894., 9213., 33696., 2580., 28347., 6790. }, 0.3373713684595000 }, + { 0, { -16468., -43883., -57588., 8839., -17108., 18484. }, 0.3506196546089751 }, + { 0, { -4324., 14942., 537., 2320., 8817., -1258. }, 0.3768935755307548 }, + { 0, { -2257., -145., -272., -4909., 4559., -6184. }, 0.3901294315026133 }, + { 0, { -10889., 10437., -5474., 6213., 16279., -4595. }, 0.4045287784128869 }, + { 0, { 719443., -70760., 86542., 684112., 3209., 279550. }, 0.4267968486470127 }, + { 1, { 3728., 5875., 3969., 4141., 3826., 956. }, }, + { 2, { 9968., 1181., 2923., 6780., 6338., 2119. }, }, + { 0, { 6842., 1584., 10374., 4788., 8573., -4658. }, 0.4456721426794963 }, + { 0, { -10089., 9939., 3641., 7449., 544., 598. }, 0.4579662921251779 }, + { 0, { 1823., 688., 6471., -612., 1565., -5241. }, 0.4724826607880908 }, + { 0, { -3424., 9654., 4992., 7807., 583., 1356. }, 0.4869141744280314 }, + { 0, { -449., -1794., 3826., -7250., -2319., -7298. }, 0.5001714317315645 }, + { 0, { 15872., 9071., 15995., 31749., 10331., 14516. }, 0.5137491938947873 }, + { 0, { 40907450., -28046763., 26106307., 37325417., 10171143., 16690754. }, 0.5296557456960209 }, + { 1, { -42177., -28947., 38775., -19498., 29548., -4665. }, }, + { 2, { 3107., 30472., -6348., 11400., 8980., 1831. }, }, + { 0, { -7558., 61741., -13579., -15470., 9629., -26943. }, 0.5428748902518665 }, + { 0, { -5153., -16254., 1129., 1453., -5621., 9705. }, 0.5545763246422408 }, + { 1, { 4786., -5955., 927., 2343., -4914., 1978. }, }, + { 0, { -472., -1295., 65., -1013., 81., 865. }, 0.5737334589484931 }, + { 0, { 1071., -818., -1860., -1756., -2076., -217. }, 0.6240874769868805 }, + { 0, { 35210., 26306., -24283., 31193., -11240., 11870. }, 0.6381677442023816 }, + { 1, { -1433., -467., -610., 819., -193., 1466. }, }, + { 2, { -2302., -1111., 916., -1272., 326., -143. }, }, + { 0, { 713., -751., -578., -1512., 156., -696. }, 0.6775366989691358 }, + { 1, { 60., 611., -229., 120., -170., -479. }, }, + { 0, { 566., 1322., -824., 882., 271., -163. }, 0.7307010456855323 }, + { 1, { 315., -273., 931., -867., 656., -752. }, }, + { 0, { 2637., -5581., -3871., -2275., -3921., 187. }, 0.8349274544218315 }, + { 0, { -6012., 8879., 923., -5393., 1314., -3852. }, 0.8466308769723183 }, + { 1, { -2430., -2929., -1564., 2843., 65., 3053. }, }, + { 2, { -373., -2949., -1724., 190., -949., 999. }, }, + { 0, { 3787., 756., 723., -3294., -966., -1395. }, 0.8803279870880313 }, + { 0, { 5446., -1146., -595., -4608., -1861., -1044. }, 0.9048452745134871 }, + { 0, { 5058., -2711., -831., -3667., -1554., -139. }, 0.9284980837327494 }, + { 0, { 1760., -6922., -4114., -3639., -1717., 694. }, 0.9630502889662660 }, + { 1, { 963., 1525., 703., -3798., -966., -2055. }, }, + { 0, { -854., -5315., -3964., -3549., -797., 142. }, 0.9850575449612223 }, + { 1, { 453., 513., -533., -1316., -1407., -442. }, }, + { 0, { -1452., 2161., -2167., -2392., 843., -1017. }, 1.0358203937225836 }, + { 0, { 717822., -1016247., 926007., 647088., 383619., 291083. }, 1.0592833248900753 }, + { 1, { -29524., -7934., 4354., -18649., -4618., -10392. }, }, + { 2, { -5165., 7903., -5462., -3951., -3606., -275. }, }, + { 0, { -13391., 43036., -26981., -8012., -15174., 6191. }, 1.0698620958167548 }, + { 1, { -19633., -2810., 1597., -10192., -4219., -4352. }, }, + { 0, { 273., 2230., -349., -375., 851., 287. }, 1.0830212781676249 }, + { 0, { 10855., -624., 671., 9748., 207., 3846. }, 1.1622398168028405 }, + { 1, { -33., 92., -124., -554., -92., -612. }, }, + { 0, { 448., -1008., 1081., 183., 623., -187. }, 1.2654499680761597 }, + { 0, { -207., 526., 176., -733., 246., -400. }, 1.3757220045803040 }, + { 0, { 638., 340., -422., 36., 44., 18. }, 1.4777197679290477 }, + { 0, { 12128., -41950., 38517., 10211., 16357., 5050. }, 1.5888963534561586 }, + { 1, { -267., 195., -296., 12., -482., 121. }, }, + { 2, { -41., 86., -13., 298., -132., 311. }, }, + { 0, { 667., -280., 347., 903., -21., 475. }, 1.6918774676128379 }, + { 0, { 30., -1843., 2162., 314., 1153., 512. }, 2.1185453910327063 }, + { 0, { 4845., 477., -393., 4358., -362., 2072. }, 3.3406128168607023 }, + { 0, { -5939., -29727., 27855., -4133., 12163., -1725. }, 6.2830758108873654 }, + { 1, { 5., -58., 6., 45., 39., 54. }, }, + { 0, { -223., 149., 91., 102., 231., 420. }, 8.4710959288534031 }, + { 0, { -17640., -47., -831., -15721., 782., -7065. }, 10.2132856585962150 }, + { 1, { 165., 60., -38., 154., 112., 136. }, }, + { 2, { 20., 46., 112., -30., 119., 10. }, }, + { /* end pluto */ -1, }, +}; + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: chap95_data.c,v $ $Date: 1997/05/19 18:21:12 $ $Revision: 1.1 $ $Name: $"}; diff --git a/libastro/circum.c b/libastro/circum.c new file mode 100644 index 0000000..31dbc4b --- /dev/null +++ b/libastro/circum.c @@ -0,0 +1,861 @@ +/* given a Now and an Obj with the object definition portion filled in, + * fill in the sky position (s_*) portions. + * calculation of positional coordinates reworked by + * Michael Sternberg + * 3/11/98: deflect was using op->s_hlong before being set in cir_pos(). + * 4/19/98: just edit a comment + */ + +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + + +static int obj_planet (Now *np, Obj *op); +static int obj_binary (Now *np, Obj *op); +static int obj_2binary (Now *np, Obj *op); +static int obj_fixed (Now *np, Obj *op); +static int obj_elliptical (Now *np, Obj *op); +static int obj_hyperbolic (Now *np, Obj *op); +static int obj_parabolic (Now *np, Obj *op); +static int sun_cir (Now *np, Obj *op); +static int moon_cir (Now *np, Obj *op); +static double solveKepler (double M, double e); +static void binaryStarOrbit (double t, double T, double e, double o, double O, + double i, double a, double P, double *thetap, double *rhop); +static void cir_sky (Now *np, double lpd, double psi, double rp, double *rho, + double lam, double bet, double lsn, double rsn, Obj *op); +static void cir_pos (Now *np, double bet, double lam, double *rho, Obj *op); +static void elongation (double lam, double bet, double lsn, double *el); +static void deflect (double mjd1, double lpd, double psi, double rsn, + double lsn, double rho, double *ra, double *dec); +static double h_albsize (double H); + +/* given a Now and an Obj, fill in the approprirate s_* fields within Obj. + * return 0 if all ok, else -1. + */ +int +obj_cir (Now *np, Obj *op) +{ + op->o_flags &= ~NOCIRCUM; + switch (op->o_type) { + case BINARYSTAR: return (obj_binary (np, op)); + case FIXED: return (obj_fixed (np, op)); + case ELLIPTICAL: return (obj_elliptical (np, op)); + case HYPERBOLIC: return (obj_hyperbolic (np, op)); + case PARABOLIC: return (obj_parabolic (np, op)); + case EARTHSAT: return (obj_earthsat (np, op)); + case PLANET: return (obj_planet (np, op)); + default: + printf ("obj_cir() called with type %d %s\n", op->o_type, op->o_name); + abort(); + return (-1); /* just for lint */ + } +} + +static int +obj_planet (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double lpd, psi; /* heliocentric ecliptic long and lat */ + double rp; /* dist from sun */ + double rho; /* dist from earth */ + double lam, bet; /* geocentric ecliptic long and lat */ + double dia, mag; /* angular diameter at 1 AU and magnitude */ + PLCode p; + + /* validate code and check for a few special cases */ + p = op->pl_code; + if (p == SUN) + return (sun_cir (np, op)); + if (p == MOON) + return (moon_cir (np, op)); + if (op->pl_moon != X_PLANET) + return (plmoon_cir (np, op)); + if (p < 0 || p > MOON) { + printf ("unknown planet code: %d\n", p); + abort(); + } + + /* planet itself */ + + /* find solar ecliptical longitude and distance to sun from earth */ + sunpos (mjed, &lsn, &rsn, 0); + + /* find helio long/lat; sun/planet and earth/planet dist; ecliptic + * long/lat; diameter and mag. + */ + plans(mjed, p, &lpd, &psi, &rp, &rho, &lam, &bet, &dia, &mag); + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* set magnitude and angular size */ + set_smag (op, mag); + op->s_size = (float)(dia/rho); + + return (0); +} + +static int +obj_binary (Now *np, Obj *op) +{ + /* always compute circumstances of primary */ + if (obj_fixed (np, op) < 0) + return (0); + + /* compute secondary only if requested, and always reset request flag */ + if (!op->b_2compute) + return (0); + op->b_2compute = 0; + return (obj_2binary (np, op)); +} + +/* compute position of secondary component of a BINARYSTAR */ +static int +obj_2binary (Now *np, Obj *op) +{ + if (op->b_nbp > 0) { + /* we just have discrete pa/sep, project each from primary */ + int i; + for (i = 0; i < op->b_nbp; i++) { + BinPos *bp = &op->b_bp[i]; + bp->bp_dec = op->s_dec + bp->bp_sep*cos(bp->bp_pa); + bp->bp_ra = op->s_ra + bp->bp_sep*sin(bp->bp_pa)/cos(op->s_dec); + } + } else { + BinOrbit *bp = &op->b_bo; + double t, theta, rho; + + mjd_year (mjd, &t); + binaryStarOrbit (t, bp->bo_T, bp->bo_e, bp->bo_o, bp->bo_O, + bp->bo_i, bp->bo_a, bp->bo_P, &theta, &rho); + bp->bo_pa = (float)theta; + bp->bo_sep = (float)rho; + rho = degrad(rho/3600.); /* arc secs to rads */ + bp->bo_dec = op->s_dec + rho*cos(theta); + bp->bo_ra = op->s_ra + rho*sin(theta)/cos(op->s_dec); + } + + return (0); +} + +/* from W. M. Smart */ +static void +binaryStarOrbit ( +double t, /* desired ephemeris epoch, year */ +double T, /* epoch of periastron, year */ +double e, /* eccentricity */ +double o, /* argument of periastron, degrees */ +double O, /* ascending node, degrees */ +double i, /* inclination, degrees */ +double a, /* semi major axis, arcsecs */ +double P, /* period, years */ +double *thetap, /* position angle, rads E of N */ +double *rhop) /* separation, arcsecs */ +{ + double M, E, cosE, nu, cosnu, r, rho, theta; + + /* find mean anomaly, insure 0..2*PI */ + M = 2*PI/P*(t-T); + range (&M, 2*PI); + + /* solve for eccentric anomaly */ + E = solveKepler (M, e); + cosE = cos(E); + + /* find true anomaly and separation */ + cosnu = (cosE - e)/(1.0 - e*cosE); + r = a*(1.0 - e*e)/(1.0 + e*cosnu); + nu = acos(cosnu); + if (E > PI) + nu = -nu; + + /* project onto sky */ + theta = atan(tan(nu+degrad(o))*cos(degrad(i))) + degrad(O); + rho = r*cos(nu+degrad(o))/cos(theta-degrad(O)); + if (rho < 0) { + theta += PI; + rho = -rho; + } + range (&theta, 2*PI); + + *thetap = theta; + *rhop = rho; +} + +/* solve kepler equation using Newton-Raphson search. + * Charles and Tatum have shown it always converges starting with PI. + */ +static double +solveKepler (double M, double e) +{ + double E, Eprime = PI; + + do { + double cosE = cos(Eprime); + E = Eprime; + Eprime = (M - e*(E*cosE - sin(E)))/(1.0 - e*cosE); + } while (fabs(E-Eprime) > 1e-7); + + return (Eprime); +} + +static int +obj_fixed (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun, dist from sn to earth*/ + double lam, bet; /* geocentric ecliptic long and lat */ + double ha; /* local hour angle */ + double el; /* elongation */ + double alt, az; /* current alt, az */ + double ra, dec; /* ra and dec at equinox of date */ + double rpm, dpm; /* astrometric ra and dec with PM to now */ + double lst; + + /* on the assumption that the user will stick with their chosen display + * epoch for a while, we move the defining values to match and avoid + * precession for every call until it is changed again. + * N.B. only compare and store jd's to lowest precission (f_epoch). + * N.B. maintaining J2k ref (which is arbitrary) helps avoid accum err + */ + if (epoch != EOD && (float)epoch != (float)op->f_epoch) { + double pr = op->f_RA, pd = op->f_dec, fe = (float)epoch; + /* first bring back to 2k */ + precess (op->f_epoch, J2000, &pr, &pd); + pr += op->f_pmRA*(J2000-op->f_epoch); + pd += op->f_pmdec*(J2000-op->f_epoch); + /* then to epoch */ + pr += op->f_pmRA*(fe-J2000); + pd += op->f_pmdec*(fe-J2000); + precess (J2000, fe, &pr, &pd); + op->f_RA = (float)pr; + op->f_dec = (float)pd; + op->f_epoch = (float)fe; + } + + /* apply proper motion .. assume pm epoch reference equals equinox */ + rpm = op->f_RA + op->f_pmRA*(mjd-op->f_epoch); + dpm = op->f_dec + op->f_pmdec*(mjd-op->f_epoch); + + /* set ra/dec to astrometric @ equinox of date */ + ra = rpm; + dec = dpm; + precess (op->f_epoch, mjed, &ra, &dec); + + /* convert equatoreal ra/dec to mean geocentric ecliptic lat/long */ + eq_ecl (mjed, ra, dec, &bet, &lam); + + /* find solar ecliptical long.(mean equinox) and distance from earth */ + sunpos (mjed, &lsn, &rsn, NULL); + + /* allow for relativistic light bending near the sun */ + deflect (mjed, lam, bet, lsn, rsn, 1e10, &ra, &dec); + + /* TODO: correction for annual parallax would go here */ + + /* correct EOD equatoreal for nutation/aberation to form apparent + * geocentric + */ + nut_eq(mjed, &ra, &dec); + ab_eq(mjed, lsn, &ra, &dec); + op->s_gaera = (float)ra; + op->s_gaedec = (float)dec; + + /* set s_ra/dec -- apparent if EOD else astrometric */ + if (epoch == EOD) { + op->s_ra = (float)ra; + op->s_dec = (float)dec; + } else { + /* annual parallax at time mjd is to be added here, too, but + * technically in the frame of equinox (usually different from mjd) + */ + op->s_ra = rpm; + op->s_dec = dpm; + } + + /* compute elongation from ecliptic long/lat and sun geocentric long */ + elongation (lam, bet, lsn, &el); + el = raddeg(el); + op->s_elong = (float)el; + + /* these are really the same fields ... + op->s_mag = op->f_mag; + op->s_size = op->f_size; + */ + + /* alt, az: correct for refraction; use eod ra/dec. */ + now_lst (np, &lst); + ha = hrrad(lst) - ra; + hadec_aa (lat, ha, dec, &alt, &az); + refract (pressure, temp, alt, &alt); + op->s_alt = alt; + op->s_az = az; + + return (0); +} + +/* compute sky circumstances of an object in heliocentric elliptic orbit at *np. + */ +static int +obj_elliptical (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double dt; /* light travel time to object */ + double lg; /* helio long of earth */ + double nu; /* true anomaly */ + double rp=0; /* distance from the sun */ + double lo, slo, clo; /* angle from ascending node */ + double inc; /* inclination */ + double psi=0; /* heliocentric latitude */ + double spsi=0, cpsi=0; /* trig of heliocentric latitude */ + double lpd; /* heliocentric longitude */ + double rho=0; /* distance from the Earth */ + double om; /* arg of perihelion */ + double Om; /* long of ascending node. */ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double ll=0, sll, cll; /* helio angle between object and earth */ + double mag; /* magnitude */ + double e_n; /* mean daily motion */ + double tp; /* time from perihelion (days) */ + double rpd=0; + double y; + int pass; + + /* find location of earth from sun now */ + sunpos (mjed, &lsn, &rsn, 0); + lg = lsn + PI; + + /* mean daily motion is derived fro mean distance */ + e_n = 0.9856076686/pow((double)op->e_a, 1.5); + + /* correct for light time by computing position at time mjd, then + * again at mjd-dt, where + * dt = time it takes light to travel earth-object distance. + */ + dt = 0; + for (pass = 0; pass < 2; pass++) { + + reduce_elements (op->e_epoch, mjd-dt, degrad(op->e_inc), + degrad (op->e_om), degrad (op->e_Om), + &inc, &om, &Om); + + tp = mjed - dt - (op->e_cepoch - op->e_M/e_n); + if (vrc (&nu, &rp, tp, op->e_e, op->e_a*(1-op->e_e)) < 0) + op->o_flags |= NOCIRCUM; + nu = degrad(nu); + lo = nu + om; + slo = sin(lo); + clo = cos(lo); + spsi = slo*sin(inc); + y = slo*cos(inc); + psi = asin(spsi); + lpd = atan(y/clo)+Om; + if (clo<0) lpd += PI; + range (&lpd, 2*PI); + cpsi = cos(psi); + rpd = rp*cpsi; + ll = lpd-lg; + rho = sqrt(rsn*rsn+rp*rp-2*rsn*rp*cpsi*cos(ll)); + + dt = rho*LTAU/3600.0/24.0; /* light travel time, in days / AU */ + } + + /* compute sin and cos of ll */ + sll = sin(ll); + cll = cos(ll); + + /* find geocentric ecliptic longitude and latitude */ + if (rpd < rsn) + lam = atan(-1*rpd*sll/(rsn-rpd*cll))+lg+PI; + else + lam = atan(rsn*sll/(rpd-rsn*cll))+lpd; + range (&lam, 2*PI); + bet = atan(rpd*spsi*sin(lam-lpd)/(cpsi*rsn*sll)); + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* compute magnitude and size */ + if (op->e_mag.whichm == MAG_HG) { + /* the H and G parameters from the Astro. Almanac. + */ + hg_mag (op->e_mag.m1, op->e_mag.m2, rp, rho, rsn, &mag); + if (op->e_size) + op->s_size = (float)(op->e_size / rho); + else + op->s_size = (float)(h_albsize (op->e_mag.m1)/rho); + } else { + /* the g/k model of comets */ + gk_mag (op->e_mag.m1, op->e_mag.m2, rp, rho, &mag); + op->s_size = (float)(op->e_size / rho); + } + set_smag (op, mag); + + return (0); +} + +/* compute sky circumstances of an object in heliocentric hyperbolic orbit. + */ +static int +obj_hyperbolic (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double dt; /* light travel time to object */ + double lg; /* helio long of earth */ + double nu; /* true anomaly and eccentric anomaly */ + double rp=0; /* distance from the sun */ + double lo, slo, clo; /* angle from ascending node */ + double inc; /* inclination */ + double psi=0; /* heliocentric latitude */ + double spsi=0, cpsi=0; /* trig of heliocentric latitude */ + double lpd; /* heliocentric longitude */ + double rho=0; /* distance from the Earth */ + double om; /* arg of perihelion */ + double Om; /* long of ascending node. */ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double e; /* fast eccentricity */ + double ll=0, sll, cll; /* helio angle between object and earth */ + double mag; /* magnitude */ + double a; /* mean distance */ + double tp; /* time from perihelion (days) */ + double rpd=0; + double y; + int pass; + + /* find solar ecliptical longitude and distance to sun from earth */ + sunpos (mjed, &lsn, &rsn, 0); + + lg = lsn + PI; + e = op->h_e; + a = op->h_qp/(e - 1.0); + + /* correct for light time by computing position at time mjd, then + * again at mjd-dt, where + * dt = time it takes light to travel earth-object distance. + */ + dt = 0; + for (pass = 0; pass < 2; pass++) { + + reduce_elements (op->h_epoch, mjd-dt, degrad(op->h_inc), + degrad (op->h_om), degrad (op->h_Om), + &inc, &om, &Om); + + tp = mjed - dt - op->h_ep; + if (vrc (&nu, &rp, tp, op->h_e, op->h_qp) < 0) + op->o_flags |= NOCIRCUM; + nu = degrad(nu); + lo = nu + om; + slo = sin(lo); + clo = cos(lo); + spsi = slo*sin(inc); + y = slo*cos(inc); + psi = asin(spsi); + lpd = atan(y/clo)+Om; + if (clo<0) lpd += PI; + range (&lpd, 2*PI); + cpsi = cos(psi); + rpd = rp*cpsi; + ll = lpd-lg; + rho = sqrt(rsn*rsn+rp*rp-2*rsn*rp*cpsi*cos(ll)); + + dt = rho*5.775518e-3; /* light travel time, in days */ + } + + /* compute sin and cos of ll */ + sll = sin(ll); + cll = cos(ll); + + /* find geocentric ecliptic longitude and latitude */ + if (rpd < rsn) + lam = atan(-1*rpd*sll/(rsn-rpd*cll))+lg+PI; + else + lam = atan(rsn*sll/(rpd-rsn*cll))+lpd; + range (&lam, 2*PI); + bet = atan(rpd*spsi*sin(lam-lpd)/(cpsi*rsn*sll)); + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* compute magnitude and size */ + gk_mag (op->h_g, op->h_k, rp, rho, &mag); + set_smag (op, mag); + op->s_size = (float)(op->h_size / rho); + + return (0); +} + +/* compute sky circumstances of an object in heliocentric hyperbolic orbit. + */ +static int +obj_parabolic (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double mag; /* magnitude */ + double inc, om, Om; + double lpd, psi, rp, rho; + double dt; + int pass; + + /* find solar ecliptical longitude and distance to sun from earth */ + sunpos (mjed, &lsn, &rsn, 0); + + /* two passes to correct lam and bet for light travel time. */ + dt = 0.0; + for (pass = 0; pass < 2; pass++) { + reduce_elements (op->p_epoch, mjd-dt, degrad(op->p_inc), + degrad(op->p_om), degrad(op->p_Om), &inc, &om, &Om); + comet (mjed-dt, op->p_ep, inc, om, op->p_qp, Om, + &lpd, &psi, &rp, &rho, &lam, &bet); + dt = rho*LTAU/3600.0/24.0; /* light travel time, in days / AU */ + } + + /* fill in all of op->s_* stuff except s_size and s_mag */ + cir_sky (np, lpd, psi, rp, &rho, lam, bet, lsn, rsn, op); + + /* compute magnitude and size */ + gk_mag (op->p_g, op->p_k, rp, rho, &mag); + set_smag (op, mag); + op->s_size = (float)(op->p_size / rho); + + return (0); +} + +/* find sun's circumstances now. + */ +static int +sun_cir (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double bsn; /* true latitude beta of sun */ + double dhlong; + + sunpos (mjed, &lsn, &rsn, &bsn);/* sun's true coordinates; mean ecl. */ + + op->s_sdist = 0.0; + op->s_elong = 0.0; + op->s_phase = 100.0; + set_smag (op, -26.8); /* TODO */ + dhlong = lsn-PI; /* geo- to helio- centric */ + range (&dhlong, 2*PI); + op->s_hlong = (float)dhlong; + op->s_hlat = (float)(-bsn); + + /* fill sun's ra/dec, alt/az in op */ + cir_pos (np, bsn, lsn, &rsn, op); + op->s_edist = (float)rsn; + op->s_size = (float)(raddeg(4.65242e-3/rsn)*3600*2); + + return (0); +} + +/* find moon's circumstances now. + */ +static int +moon_cir (Now *np, Obj *op) +{ + double lsn, rsn; /* true geoc lng of sun; dist from sn to earth*/ + double lam; /* geocentric ecliptic longitude */ + double bet; /* geocentric ecliptic latitude */ + double edistau; /* earth-moon dist, in au */ + double el; /* elongation, rads east */ + double ms; /* sun's mean anomaly */ + double md; /* moon's mean anomaly */ + double i; + + moon (mjed, &lam, &bet, &edistau, &ms, &md); /* mean ecliptic & EOD*/ + sunpos (mjed, &lsn, &rsn, NULL); /* mean ecliptic & EOD*/ + + op->s_hlong = (float)lam; /* save geo in helio fields */ + op->s_hlat = (float)bet; + + /* find angular separation from sun */ + elongation (lam, bet, lsn, &el); + op->s_elong = (float)raddeg(el); /* want degrees */ + + /* solve triangle of earth, sun, and elongation for moon-sun dist */ + op->s_sdist = (float) sqrt (edistau*edistau + rsn*rsn + - 2.0*edistau*rsn*cos(el)); + + /* TODO: improve mag; this is based on a flat moon model. */ + i = -12.7 + 2.5*(log10(PI) - log10(PI/2*(1+1.e-6-cos(el)))) + + 5*log10(edistau/.0025) /* dist */; + set_smag (op, i); + + /* find phase -- allow for projection effects */ + i = 0.1468*sin(el)*(1 - 0.0549*sin(md))/(1 - 0.0167*sin(ms)); + op->s_phase = (float)((1+cos(PI-el-degrad(i)))/2*100); + + /* fill moon's ra/dec, alt/az in op and update for topo dist */ + cir_pos (np, bet, lam, &edistau, op); + + op->s_edist = (float)edistau; + op->s_size = (float)(3600*2.0*raddeg(asin(MRAD/MAU/edistau))); + /* moon angular dia, seconds */ + + return (0); +} + +/* fill in all of op->s_* stuff except s_size and s_mag. + * this is used for sol system objects (except sun and moon); never FIXED. + */ +static void +cir_sky ( +Now *np, +double lpd, /* heliocentric ecliptic longitude */ +double psi, /* heliocentric ecliptic lat */ +double rp, /* dist from sun */ +double *rho, /* dist from earth: in as geo, back as geo or topo */ +double lam, /* true geocentric ecliptic long */ +double bet, /* true geocentric ecliptic lat */ +double lsn, /* true geoc lng of sun */ +double rsn, /* dist from sn to earth*/ +Obj *op) +{ + double el; /* elongation */ + double f; /* fractional phase from earth */ + + /* compute elongation and phase */ + elongation (lam, bet, lsn, &el); + el = raddeg(el); + op->s_elong = (float)el; + f = 0.25 * ((rp+ *rho)*(rp+ *rho) - rsn*rsn)/(rp* *rho); + op->s_phase = (float)(f*100.0); /* percent */ + + /* set heliocentric long/lat; mean ecliptic and EOD */ + op->s_hlong = (float)lpd; + op->s_hlat = (float)psi; + + /* fill solar sys body's ra/dec, alt/az in op */ + cir_pos (np, bet, lam, rho, op); /* updates rho */ + + /* set earth/planet and sun/planet distance */ + op->s_edist = (float)(*rho); + op->s_sdist = (float)rp; +} + +/* fill equatoreal and horizontal op-> fields; stern + * + * input: lam/bet/rho geocentric mean ecliptic and equinox of day + * + * algorithm at EOD: + * ecl_eq --> ra/dec geocentric mean equatoreal EOD (via mean obliq) + * deflect --> ra/dec relativistic deflection + * nut_eq --> ra/dec geocentric true equatoreal EOD + * ab_eq --> ra/dec geocentric apparent equatoreal EOD + * if (PREF_GEO) --> output + * ta_par --> ra/dec topocentric apparent equatoreal EOD + * if (!PREF_GEO) --> output + * hadec_aa --> alt/az topocentric horizontal + * refract --> alt/az observed --> output + * + * algorithm at fixed equinox: + * ecl_eq --> ra/dec geocentric mean equatoreal EOD (via mean obliq) + * deflect --> ra/dec relativistic deflection [for alt/az only] + * nut_eq --> ra/dec geocentric true equatoreal EOD [for aa only] + * ab_eq --> ra/dec geocentric apparent equatoreal EOD [for aa only] + * ta_par --> ra/dec topocentric apparent equatoreal EOD + * precess --> ra/dec topocentric equatoreal fixed equinox [eq only] + * --> output + * hadec_aa --> alt/az topocentric horizontal + * refract --> alt/az observed --> output + */ +static void +cir_pos ( +Now *np, +double bet, /* geo lat (mean ecliptic of date) */ +double lam, /* geo long (mean ecliptic of date) */ +double *rho, /* in: geocentric dist in AU; out: geo- or topocentic dist */ +Obj *op) /* object to set s_ra/dec as per equinox */ +{ + double ra, dec; /* apparent ra/dec, corrected for nut/ab */ + double tra, tdec; /* astrometric ra/dec, no nut/ab */ + double lsn, rsn; /* solar geocentric (mean ecliptic of date) */ + double ha_in, ha_out; /* local hour angle before/after parallax */ + double dec_out; /* declination after parallax */ + double dra, ddec; /* parallax correction */ + double alt, az; /* current alt, az */ + double lst; /* local sidereal time */ + double rho_topo; /* topocentric distance in earth radii */ + + /* convert to equatoreal [mean equator, with mean obliquity] */ + ecl_eq (mjed, bet, lam, &ra, &dec); + tra = ra; /* keep mean coordinates */ + tdec = dec; + + /* get sun position */ + sunpos(mjed, &lsn, &rsn, NULL); + + /* allow for relativistic light bending near the sun. + * (avoid calling deflect() for the sun itself). + */ + if (!is_planet(op,SUN) && !is_planet(op,MOON)) + deflect (mjed, op->s_hlong, op->s_hlat, lsn, rsn, *rho, &ra, &dec); + + /* correct ra/dec to form geocentric apparent */ + nut_eq (mjed, &ra, &dec); + if (!is_planet(op,MOON)) + ab_eq (mjed, lsn, &ra, &dec); + op->s_gaera = (float)ra; + op->s_gaedec = (float)dec; + + /* find parallax correction for equatoreal coords */ + now_lst (np, &lst); + ha_in = hrrad(lst) - ra; + rho_topo = *rho * MAU/ERAD; /* convert to earth radii */ + ta_par (ha_in, dec, lat, elev, &rho_topo, &ha_out, &dec_out); + + /* transform into alt/az and apply refraction */ + hadec_aa (lat, ha_out, dec_out, &alt, &az); + refract (pressure, temp, alt, &alt); + op->s_alt = alt; + op->s_az = az; + + /* Get parallax differences and apply to apparent or astrometric place + * as needed. For the astrometric place, rotating the CORRECTIONS + * back from the nutated equator to the mean equator will be + * neglected. This is an effect of about 0.1" at moon distance. + * We currently don't have an inverse nutation rotation. + */ + if (pref_get(PREF_EQUATORIAL) == PREF_GEO) { + /* no topo corrections to eq. coords */ + dra = ddec = 0.0; + } else { + dra = ha_in - ha_out; /* ra sign is opposite of ha */ + ddec = dec_out - dec; + *rho = rho_topo * ERAD/MAU; /* return topocentric distance in AU */ + } + + /* fill in ra/dec fields */ + if (epoch == EOD) { /* apparent geo/topocentric */ + ra = ra + dra; + dec = dec + ddec; + } else { /* astrometric geo/topocent */ + ra = tra + dra; + dec = tdec + ddec; + precess (mjed, epoch, &ra, &dec); + } + range(&ra, 2*PI); + op->s_ra = (float)ra; + op->s_dec = (float)dec; +} + +/* given geocentric ecliptic longitude and latitude, lam and bet, of some object + * and the longitude of the sun, lsn, find the elongation, el. this is the + * actual angular separation of the object from the sun, not just the difference + * in the longitude. the sign, however, IS set simply as a test on longitude + * such that el will be >0 for an evening object <0 for a morning object. + * to understand the test for el sign, draw a graph with lam going from 0-2*PI + * down the vertical axis, lsn going from 0-2*PI across the hor axis. then + * define the diagonal regions bounded by the lines lam=lsn+PI, lam=lsn and + * lam=lsn-PI. the "morning" regions are any values to the lower left of the + * first line and bounded within the second pair of lines. + * all angles in radians. + */ +static void +elongation (double lam, double bet, double lsn, double *el) +{ + *el = acos(cos(bet)*cos(lam-lsn)); + if (lam>lsn+PI || (lam>lsn-PI && lamdegrad(179.75) || rho + +#include "astro.h" + +/* given a modified Julian date, mj, and a set of heliocentric parabolic + * orbital elements referred to the epoch of date (mj): + * ep: epoch of perihelion, + * inc: inclination, + * ap: argument of perihelion (equals the longitude of perihelion minus the + * longitude of ascending node) + * qp: perihelion distance, + * om: longitude of ascending node; + * find: + * lpd: heliocentric longitude, + * psi: heliocentric latitude, + * rp: distance from the sun to the planet, + * rho: distance from the Earth to the planet, + * lam: geocentric ecliptic longitude, + * bet: geocentric ecliptic latitude, + * none are corrected for light time, ie, they are the true values for + * the given instant. + * + * all angles are in radians, all distances in AU. + * mutual perturbation corrections with other solar system objects are not + * applied. corrections for nutation and abberation must be made by the caller. + * The RA and DEC calculated from the fully-corrected ecliptic coordinates are + * then the apparent geocentric coordinates. Further corrections can be made, + * if required, for atmospheric refraction and geocentric parallax. + */ +void +comet (double mj, double ep, double inc, double ap, double qp, double om, +double *lpd, double *psi, double *rp, double *rho, double *lam, double *bet) +{ + double w, s, s2; + double l, sl, cl, y; + double spsi, cpsi; + double rd, lsn, rsn; + double lg, re, ll; + double cll, sll; + double nu; + +#define ERRLMT 0.0001 + w = ((mj-ep)*3.649116e-02)/(qp*sqrt(qp)); + s = w/3; + for (;;) { + double d; + s2 = s*s; + d = (s2+3)*s-w; + if (fabs(d) <= ERRLMT) + break; + s = ((2*s*s2)+w)/(3*(s2+1)); + } + + nu = 2*atan(s); + *rp = qp*(1+s2); + l = nu+ap; + sl = sin(l); + cl = cos(l); + spsi = sl*sin(inc); + *psi = asin(spsi); + y = sl*cos(inc); + *lpd = atan(y/cl)+om; + cpsi = cos(*psi); + if (cl<0) *lpd += PI; + range (lpd, 2*PI); + rd = *rp * cpsi; + sunpos (mj, &lsn, &rsn, 0); + lg = lsn+PI; + re = rsn; + ll = *lpd - lg; + cll = cos(ll); + sll = sin(ll); + *rho = sqrt((re * re)+(*rp * *rp)-(2*re*rd*cll)); + if (rd +#include +#include +#include +#include + +#include "astro.h" + +/* +====================================================================== +Ernie Wright 2 Mar 94 + +Find the constellation for a given position. + +First C version by Craig Counterman and Elwood Downey. Based on a +FORTRAN program by Nancy G. Roman (Roman, N.G. 1987, Publ. Astron. +Soc. Pacific 99, 695). IAU constellation boundaries transcribed into +machine-readable form by Barry N. Rappaport, New Mexico State Univ. +====================================================================== +*/ + +#define NBOUNDS 357 + +/* constellation ids */ +#define And 0 +#define Ant 1 +#define Aps 2 +#define Aql 3 +#define Aqr 4 +#define Ara 5 +#define Ari 6 +#define Aur 7 +#define Boo 8 +#define CMa 9 +#define CMi 10 +#define CVn 11 +#define Cae 12 +#define Cam 13 +#define Cap 14 +#define Car 15 +#define Cas 16 +#define Cen 17 +#define Cep 18 +#define Cet 19 +#define Cha 20 +#define Cir 21 +#define Cnc 22 +#define Col 23 +#define Com 24 +#define CrA 25 +#define CrB 26 +#define Crt 27 +#define Cru 28 +#define Crv 29 +#define Cyg 30 +#define Del 31 +#define Dor 32 +#define Dra 33 +#define Equ 34 +#define Eri 35 +#define For 36 +#define Gem 37 +#define Gru 38 +#define Her 39 +#define Hor 40 +#define Hya 41 +#define Hyi 42 +#define Ind 43 +#define LMi 44 +#define Lac 45 +#define Leo 46 +#define Lep 47 +#define Lib 48 +#define Lup 49 +#define Lyn 50 +#define Lyr 51 +#define Men 52 +#define Mic 53 +#define Mon 54 +#define Mus 55 +#define Nor 56 +#define Oct 57 +#define Oph 58 +#define Ori 59 +#define Pav 60 +#define Peg 61 +#define Per 62 +#define Phe 63 +#define Pic 64 +#define PsA 65 +#define Psc 66 +#define Pup 67 +#define Pyx 68 +#define Ret 69 +#define Scl 70 +#define Sco 71 +#define Sct 72 +#define Se1 73 +#define Sex 74 +#define Sge 75 +#define Sgr 76 +#define Tau 77 +#define Tel 78 +#define TrA 79 +#define Tri 80 +#define Tuc 81 +#define UMa 82 +#define UMi 83 +#define Vel 84 +#define Vir 85 +#define Vol 86 +#define Vul 87 +#define Se2 88 + +static char *cns_namemap[ NCNS ] = { + /* 0 */ "And: Andromeda", + /* 1 */ "Ant: Antlia", + /* 2 */ "Aps: Apus", + /* 3 */ "Aql: Aquila", + /* 4 */ "Aqr: Aquarius", + /* 5 */ "Ara: Ara", + /* 6 */ "Ari: Aries", + /* 7 */ "Aur: Auriga", + /* 8 */ "Boo: Bootes", + /* 9 */ "CMa: Canis Major", + /* 10 */ "CMi: Canis Minor", + /* 11 */ "CVn: Canes Venatici", + /* 12 */ "Cae: Caelum", + /* 13 */ "Cam: Camelopardalis", + /* 14 */ "Cap: Capricornus", + /* 15 */ "Car: Carina", + /* 16 */ "Cas: Cassiopeia", + /* 17 */ "Cen: Centaurus", + /* 18 */ "Cep: Cepheus", + /* 19 */ "Cet: Cetus", + /* 20 */ "Cha: Chamaeleon", + /* 21 */ "Cir: Circinus", + /* 22 */ "Cnc: Cancer", + /* 23 */ "Col: Columba", + /* 24 */ "Com: Coma Berenices", + /* 25 */ "CrA: Corona Australis", + /* 26 */ "CrB: Corona Borealis", + /* 27 */ "Crt: Crater", + /* 28 */ "Cru: Crux", + /* 29 */ "Crv: Corvus", + /* 30 */ "Cyg: Cygnus", + /* 31 */ "Del: Delphinus", + /* 32 */ "Dor: Dorado", + /* 33 */ "Dra: Draco", + /* 34 */ "Equ: Equuleus", + /* 35 */ "Eri: Eridanus", + /* 36 */ "For: Fornax", + /* 37 */ "Gem: Gemini", + /* 38 */ "Gru: Grus", + /* 39 */ "Her: Hercules", + /* 40 */ "Hor: Horologium", + /* 41 */ "Hya: Hydra", + /* 42 */ "Hyi: Hydrus", + /* 43 */ "Ind: Indus", + /* 44 */ "LMi: Leo Minor", + /* 45 */ "Lac: Lacerta", + /* 46 */ "Leo: Leo", + /* 47 */ "Lep: Lepus", + /* 48 */ "Lib: Libra", + /* 49 */ "Lup: Lupus", + /* 50 */ "Lyn: Lynx", + /* 51 */ "Lyr: Lyra", + /* 52 */ "Men: Mensa", + /* 53 */ "Mic: Microscopium", + /* 54 */ "Mon: Monoceros", + /* 55 */ "Mus: Musca", + /* 56 */ "Nor: Norma", + /* 57 */ "Oct: Octans", + /* 58 */ "Oph: Ophiuchus", + /* 59 */ "Ori: Orion", + /* 60 */ "Pav: Pavo", + /* 61 */ "Peg: Pegasus", + /* 62 */ "Per: Perseus", + /* 63 */ "Phe: Phoenix", + /* 64 */ "Pic: Pictor", + /* 65 */ "PsA: Piscis Austrinus", + /* 66 */ "Psc: Pisces", + /* 67 */ "Pup: Puppis", + /* 68 */ "Pyx: Pyxis", + /* 69 */ "Ret: Reticulum", + /* 70 */ "Scl: Sculptor", + /* 71 */ "Sco: Scorpius", + /* 72 */ "Sct: Scutum", + /* 73 */ "Se1: Serpens Caput", + /* 74 */ "Sex: Sextans", + /* 75 */ "Sge: Sagitta", + /* 76 */ "Sgr: Sagittarius", + /* 77 */ "Tau: Taurus", + /* 78 */ "Tel: Telescopium", + /* 79 */ "TrA: Triangulum Australe", + /* 80 */ "Tri: Triangulum", + /* 81 */ "Tuc: Tucana", + /* 82 */ "UMa: Ursa Major", + /* 83 */ "UMi: Ursa Minor", + /* 84 */ "Vel: Vela", + /* 85 */ "Vir: Virgo", + /* 86 */ "Vol: Volans", + /* 87 */ "Vul: Vulpecula", + /* 88 */ "Se2: Serpens Cauda", +}; + +static struct { + unsigned short lower_ra; /* hours * 1800 */ + unsigned short upper_ra; /* hours * 1800 */ + short lower_dec; /* degrees * 60 */ + short index; +} cbound[ NBOUNDS ] = { + { 0, 43200, 5280, UMi }, + { 14400, 26100, 5190, UMi }, + { 37800, 41400, 5170, UMi }, + { 32400, 37800, 5160, UMi }, + { 0, 14400, 5100, Cep }, + { 16500, 19200, 4920, Cam }, + { 0, 9000, 4800, Cep }, + { 19200, 26100, 4800, Cam }, + { 31500, 32400, 4800, UMi }, + { 36300, 37800, 4800, Dra }, + { 0, 6315, 4620, Cep }, + { 20700, 24450, 4620, Cam }, + { 29760, 31500, 4500, UMi }, + { 36300, 37200, 4500, Cep }, + { 14340, 16500, 4410, Cam }, + { 16500, 20400, 4410, Dra }, + { 23400, 29760, 4200, UMi }, + { 5580, 6150, 4080, Cas }, + { 36750, 37200, 4020, Dra }, + { 20400, 21600, 3990, Dra }, + { 0, 600, 3960, Cep }, + { 25200, 28200, 3960, UMi }, + { 42450, 43200, 3960, Cep }, + { 21600, 24300, 3840, Dra }, + { 24300, 25950, 3780, Dra }, + { 41700, 42450, 3780, Cep }, + { 10980, 12600, 3720, Cam }, + { 36000, 36750, 3690, Dra }, + { 36966, 37080, 3655, Cep }, + { 12600, 14340, 3600, Cam }, + { 14340, 15150, 3600, UMa }, + { 35580, 36000, 3570, Dra }, + { 36000, 36966, 3570, Cep }, + { 41160, 41700, 3545, Cep }, + { 0, 4380, 3510, Cas }, + { 34950, 35580, 3480, Dra }, + { 3060, 3435, 3450, Cas }, + { 4380, 5580, 3420, Cas }, + { 5580, 5700, 3420, Cam }, + { 40170, 41160, 3375, Cep }, + { 9000, 10980, 3360, Cam }, + { 25260, 25950, 3330, UMa }, + { 25950, 34950, 3330, Dra }, + { 5700, 6000, 3300, Cam }, + { 39840, 40170, 3300, Cep }, + { 37080, 39540, 3290, Cep }, + { 0, 3060, 3240, Cas }, + { 10980, 11700, 3240, Lyn }, + { 21750, 24300, 3180, UMa }, + { 27450, 28350, 3180, Dra }, + { 39540, 39840, 3165, Cep }, + { 6000, 9000, 3150, Cam }, + { 41160, 42000, 3150, Cas }, + { 28350, 30600, 3090, Dra }, + { 3675, 4530, 3030, Per }, + { 30600, 32820, 3030, Dra }, + { 0, 2460, 3000, Cas }, + { 2460, 3000, 3000, Per }, + { 11700, 12240, 3000, Lyn }, + { 42000, 43200, 3000, Cas }, + { 24300, 25260, 2910, UMa }, + { 0, 2010, 2880, Cas }, + { 42450, 43200, 2880, Cas }, + { 32715, 32820, 2850, Her }, + { 32820, 34350, 2850, Dra }, + { 34350, 34500, 2850, Cyg }, + { 3000, 3675, 2820, Per }, + { 15150, 16500, 2820, UMa }, + { 300, 1560, 2760, Cas }, + { 21600, 21750, 2700, UMa }, + { 12240, 13260, 2670, Lyn }, + { 39435, 39540, 2640, Cyg }, + { 39375, 39435, 2625, Cyg }, + { 34500, 34920, 2610, Cyg }, + { 16500, 18300, 2520, UMa }, + { 18300, 19410, 2400, UMa }, + { 27780, 28350, 2400, Boo }, + { 28350, 29400, 2400, Her }, + { 16650, 17250, 2385, Lyn }, + { 0, 4530, 2205, And }, + { 4530, 4620, 2205, Per }, + { 34845, 34920, 2190, Lyr }, + { 8100, 8445, 2160, Per }, + { 39120, 39375, 2160, Cyg }, + { 39375, 39600, 2160, Lac }, + { 11760, 13260, 2130, Aur }, + { 13260, 13950, 2130, Lyn }, + { 0, 3600, 2100, And }, + { 39600, 41070, 2100, Lac }, + { 41070, 41160, 2070, Lac }, + { 41160, 42300, 2070, And }, + { 4620, 4890, 2040, Per }, + { 19410, 19800, 2040, UMa }, + { 21600, 22200, 2040, CVn }, + { 13950, 16650, 2010, Lyn }, + { 16650, 17790, 2010, LMi }, + { 1290, 2535, 1980, And }, + { 27330, 27780, 1980, Boo }, + { 42300, 42750, 1925, And }, + { 22200, 23850, 1920, CVn }, + { 42750, 43200, 1880, And }, + { 25125, 25260, 1845, CVn }, + { 4350, 4890, 1840, Tri }, + { 4890, 8100, 1840, Per }, + { 8100, 8550, 1800, Aur }, + { 32715, 34845, 1800, Lyr }, + { 19800, 21600, 1740, UMa }, + { 35400, 37650, 1740, Cyg }, + { 8550, 10590, 1710, Aur }, + { 17790, 18900, 1710, LMi }, + { 23850, 25125, 1710, CVn }, + { 0, 120, 1680, And }, + { 2535, 3000, 1680, Tri }, + { 10590, 11760, 1680, Aur }, + { 14190, 14400, 1680, Gem }, + { 37650, 39120, 1680, Cyg }, + { 34665, 35400, 1650, Cyg }, + { 3450, 4350, 1635, Tri }, + { 29100, 29400, 1620, CrB }, + { 27150, 27330, 1560, Boo }, + { 27330, 29100, 1560, CrB }, + { 33060, 33960, 1560, Lyr }, + { 19350, 19800, 1530, LMi }, + { 33960, 34665, 1530, Lyr }, + { 3000, 3450, 1500, Tri }, + { 1290, 1530, 1425, Psc }, + { 18900, 19350, 1410, LMi }, + { 38250, 38550, 1410, Vul }, + { 10260, 10590, 1370, Tau }, + { 120, 255, 1320, And }, + { 28650, 28860, 1320, Se1 }, + { 10590, 11190, 1290, Gem }, + { 35700, 36450, 1275, Vul }, + { 33960, 34650, 1265, Vul }, + { 255, 1530, 1260, And }, + { 36450, 37020, 1230, Vul }, + { 14055, 14190, 1200, Gem }, + { 37020, 38250, 1170, Vul }, + { 34650, 35700, 1150, Vul }, + { 5910, 6060, 1140, Ari }, + { 33960, 34200, 1110, Sge }, + { 10260, 10380, 1080, Ori }, + { 11190, 11355, 1050, Gem }, + { 34200, 35700, 970, Sge }, + { 8940, 9600, 960, Tau }, + { 28650, 28950, 960, Her }, + { 35700, 36450, 945, Sge }, + { 8310, 8940, 930, Tau }, + { 9600, 10080, 930, Tau }, + { 23100, 24300, 900, Com }, + { 31050, 32850, 860, Her }, + { 21360, 23100, 840, Com }, + { 13500, 14055, 810, Gem }, + { 30150, 31050, 770, Her }, + { 0, 255, 750, Peg }, + { 10080, 10380, 750, Tau }, + { 12600, 13500, 750, Gem }, + { 38010, 38400, 750, Peg }, + { 11355, 12480, 720, Gem }, + { 32850, 33960, 720, Her }, + { 37575, 37890, 710, Del }, + { 37890, 38010, 710, Peg }, + { 20730, 21360, 660, Leo }, + { 11235, 11355, 600, Ori }, + { 12480, 12600, 600, Gem }, + { 14055, 14265, 600, Cnc }, + { 42900, 43200, 600, Peg }, + { 3000, 5910, 595, Ari }, + { 36255, 36540, 510, Del }, + { 24300, 27150, 480, Boo }, + { 40950, 42900, 450, Peg }, + { 14265, 16650, 420, Cnc }, + { 16650, 19350, 420, Leo }, + { 32850, 33592, 375, Oph }, + { 33592, 33960, 375, Aql }, + { 37500, 37575, 360, Del }, + { 12600, 12630, 330, CMi }, + { 32850, 33165, 270, Se2 }, + { 28950, 30150, 240, Her }, + { 32850, 33165, 180, Oph }, + { 38640, 39000, 165, Peg }, + { 0, 3600, 120, Psc }, + { 33450, 33960, 120, Se2 }, + { 36540, 37500, 120, Del }, + { 37500, 38400, 120, Equ }, + { 38400, 38640, 120, Peg }, + { 39600, 40950, 120, Peg }, + { 39000, 39600, 105, Peg }, + { 12630, 12960, 90, CMi }, + { 6450, 8310, 0, Tau }, + { 8310, 8400, 0, Ori }, + { 12960, 14550, 0, CMi }, + { 26400, 27150, 0, Vir }, + { 32100, 32850, 0, Oph }, + { 4770, 5910, -105, Cet }, + { 5910, 6450, -105, Tau }, + { 27150, 29280, -195, Se1 }, + { 8400, 9150, -240, Ori }, + { 10500, 11235, -240, Ori }, + { 32100, 32340, -240, Se2 }, + { 32850, 33450, -240, Se2 }, + { 33450, 33960, -240, Aql }, + { 40950, 42900, -240, Psc }, + { 19350, 20730, -360, Leo }, + { 20730, 21300, -360, Vir }, + { 0, 600, -420, Psc }, + { 42900, 43200, -420, Psc }, + { 25650, 26400, -480, Vir }, + { 28650, 29280, -480, Oph }, + { 36000, 36960, -540, Aql }, + { 38400, 39360, -540, Aqr }, + { 30900, 32340, -600, Oph }, + { 10500, 14550, -660, Mon }, + { 8850, 9150, -660, Eri }, + { 9150, 10500, -660, Ori }, + { 14550, 15060, -660, Hya }, + { 17250, 19350, -660, Sex }, + { 21300, 23100, -660, Vir }, + { 31650, 31800, -700, Oph }, + { 33960, 36000, -722, Aql }, + { 8700, 8850, -870, Eri }, + { 36960, 38400, -900, Aqr }, + { 30900, 32850, -960, Se2 }, + { 32850, 33960, -960, Sct }, + { 15060, 15450, -1020, Hya }, + { 29280, 29475, -1095, Oph }, + { 15450, 16350, -1140, Hya }, + { 19350, 19500, -1140, Crt }, + { 29280, 29475, -1155, Sco }, + { 28200, 28650, -1200, Lib }, + { 22650, 23100, -1320, Crv }, + { 23100, 25650, -1320, Vir }, + { 16350, 17550, -1440, Hya }, + { 3000, 4770, -1463, Cet }, + { 4770, 6750, -1463, Eri }, + { 19500, 21300, -1470, Crt }, + { 21300, 22650, -1470, Crv }, + { 25650, 26850, -1470, Lib }, + { 29280, 30150, -1475, Oph }, + { 0, 3000, -1530, Cet }, + { 38400, 39360, -1530, Cap }, + { 39360, 42900, -1530, Aqr }, + { 42900, 43200, -1530, Cet }, + { 17550, 18450, -1590, Hya }, + { 8460, 8700, -1635, Eri }, + { 8700, 11010, -1635, Lep }, + { 36000, 38400, -1680, Cap }, + { 18450, 19050, -1750, Hya }, + { 22650, 26850, -1770, Hya }, + { 26850, 28200, -1770, Lib }, + { 28200, 28800, -1770, Sco }, + { 8250, 8460, -1800, Eri }, + { 30150, 31680, -1800, Oph }, + { 31680, 32100, -1800, Sgr }, + { 19050, 19500, -1870, Hya }, + { 11010, 13260, -1980, CMa }, + { 22050, 22650, -1980, Hya }, + { 19500, 22050, -2100, Hya }, + { 6300, 6750, -2160, For }, + { 15060, 16860, -2205, Pyx }, + { 7680, 8250, -2220, Eri }, + { 32100, 34500, -2220, Sgr }, + { 38400, 41400, -2220, PsA }, + { 41400, 42000, -2220, Scl }, + { 5400, 6300, -2375, For }, + { 16860, 19800, -2385, Ant }, + { 0, 3000, -2400, Scl }, + { 3000, 5400, -2400, For }, + { 6960, 7680, -2400, Eri }, + { 42000, 43200, -2400, Scl }, + { 25500, 26850, -2520, Cen }, + { 28200, 28800, -2520, Lup }, + { 28800, 29557, -2520, Sco }, + { 8700, 9000, -2580, Cae }, + { 9000, 11850, -2580, Col }, + { 14400, 15060, -2580, Pup }, + { 6150, 6960, -2640, Eri }, + { 29557, 32100, -2730, Sco }, + { 32100, 34500, -2730, CrA }, + { 34500, 36600, -2730, Sgr }, + { 36600, 38400, -2730, Mic }, + { 5400, 6150, -2760, Eri }, + { 8100, 8700, -2790, Cae }, + { 27600, 28200, -2880, Lup }, + { 0, 4200, -2890, Phe }, + { 4800, 5400, -2940, Eri }, + { 7350, 7680, -2940, Hor }, + { 7680, 8100, -2940, Cae }, + { 38400, 39600, -3000, Gru }, + { 10800, 14400, -3045, Pup }, + { 14400, 14700, -3045, Vel }, + { 4350, 4800, -3060, Eri }, + { 6900, 7350, -3060, Hor }, + { 0, 3300, -3090, Phe }, + { 10800, 11100, -3150, Car }, + { 14700, 15210, -3180, Vel }, + { 6300, 6900, -3190, Hor }, + { 6900, 7200, -3190, Dor }, + { 0, 2850, -3210, Phe }, + { 3900, 4350, -3240, Eri }, + { 8100, 9000, -3240, Pic }, + { 27090, 27600, -3240, Lup }, + { 15210, 15900, -3270, Vel }, + { 11100, 11700, -3300, Car }, + { 21300, 23100, -3300, Cen }, + { 25500, 27090, -3300, Lup }, + { 27090, 27600, -3300, Nor }, + { 7200, 7800, -3390, Dor }, + { 15900, 19800, -3390, Vel }, + { 19800, 20250, -3390, Cen }, + { 31500, 32400, -3420, Ara }, + { 32400, 36600, -3420, Tel }, + { 39600, 42000, -3420, Gru }, + { 5760, 6300, -3450, Hor }, + { 9000, 9900, -3450, Pic }, + { 11700, 12300, -3480, Car }, + { 0, 2400, -3510, Phe }, + { 2400, 3900, -3510, Eri }, + { 42000, 43200, -3510, Phe }, + { 7800, 8250, -3540, Dor }, + { 27600, 29557, -3600, Nor }, + { 36600, 38400, -3600, Ind }, + { 9900, 10800, -3660, Pic }, + { 27300, 27600, -3660, Cir }, + { 29557, 29850, -3660, Ara }, + { 26850, 27300, -3815, Cir }, + { 29850, 30150, -3815, Ara }, + { 10800, 12300, -3840, Pic }, + { 12300, 16260, -3840, Car }, + { 20250, 21300, -3840, Cen }, + { 21300, 23100, -3840, Cru }, + { 23100, 26160, -3840, Cen }, + { 24300, 24600, -3900, Cir }, + { 30150, 30300, -3900, Ara }, + { 3900, 5760, -4050, Hor }, + { 5760, 8250, -4050, Ret }, + { 26550, 26850, -4050, Cir }, + { 30300, 31500, -4050, Ara }, + { 31500, 32400, -4050, Pav }, + { 39600, 42000, -4050, Tuc }, + { 8250, 11850, -4200, Dor }, + { 24600, 26550, -4200, Cir }, + { 26550, 30600, -4200, TrA }, + { 0, 2400, -4500, Tuc }, + { 6300, 8250, -4500, Hyi }, + { 11850, 16260, -4500, Vol }, + { 16260, 20250, -4500, Car }, + { 20250, 24600, -4500, Mus }, + { 32400, 38400, -4500, Pav }, + { 38400, 42000, -4500, Ind }, + { 42000, 43200, -4500, Tuc }, + { 1350, 2400, -4560, Tuc }, + { 0, 6300, -4950, Hyi }, + { 13800, 24600, -4950, Cha }, + { 24600, 32400, -4950, Aps }, + { 6300, 13800, -5100, Men }, + { 0, 43200, -5400, Oct } +}; + +static short start[] = { + 355, 352, 343, 340, 332, 320, + 303, 288, 277, 266, 257, 251, + 239, 229, 221, 211, 203, 189, + 177, 163, 149, 136, 124, 104, + 87, 75, 69, 54, 43, 29, + 23, 16, 12, 6, 4, 0, 0 +}; + + +/* +====================================================================== +constellation_pick() + +Do a constellation pick from RA and Dec. + +INPUTS + r right ascension, radians + d declination, radians + e epoch to which r and d precessed, as an mjd + +RESULTS + Returns an index for the constellation region that the coordinates + belong to, or -1 if no constellation pick can be found. + +The constellation is identified by linear search. We look for a +member of cbound[] whose lower_dec is less than the declination of the +pick point and whose lower_ra and upper_ra bracket the pick point's +right ascension. The data for that cbound[] member describes a sub- +region belonging to the picked constellation. + +In geometric terms, the search amounts to starting at the north pole +and traveling south on a line of constant right ascension through the +pick point. At every declination where a cbound[] member lives, we +wake up, and if (1) the pick point is now behind us, and (2) the +cbound[] segment is crossing our path, we know we've hit the edge of +a constellation subregion that the pick point belongs to. + +The cbound[] right ascension and declination values are scaled into +integers; this conserves storage and makes comparisons faster. The +start[] array, which gives starting points in cbound[] for different +declinations in 5-degree increments, further speeds the search by +skipping early parts of the list for which we know the search can't +succeed--geometrically, we start no more than 5 degrees north of the +pick point, rather than at the north pole. + +The data in cbound[] are for epoch 1875. +====================================================================== +*/ + +int +cns_pick(double r, double d, double e) +{ + double Mjd; + unsigned short ra; + short de, i; + + cal_mjd( 1, 1.0, 1875, &Mjd ); + precess( e, Mjd, &r, &d ); + ra = ( unsigned short )( radhr( r ) * 1800 ); + de = ( short )( raddeg( d ) * 60 ); + if (d < 0.0) --de; + + i = ( de + 5400 ) / 300; + if ( i < 0 || i > 36 ) return -1; + i = start[ i ]; + + for ( ; i < NBOUNDS; i++ ) + if ( cbound[ i ].lower_dec <= de && + cbound[ i ].upper_ra > ra && + cbound[ i ].lower_ra <= ra ) break; + + return ( i == NBOUNDS ) ? -1 : ( int ) cbound[ i ].index; +} + +/* given a constellation id (as from cns_pick()), return pointer to static + * storage containg its name in the form "AAA: Name". + * return "???: ???" if id is invalid. + */ +char * +cns_name (int id) +{ + if (id < 0 || id >= NCNS) + return ("???: ???"); + return (cns_namemap[id]); +} + +/* return cns_namemap index matching first three chars in abbrev[], else -1. + */ +int +cns_id (char *abbrev) +{ + int i; + + for (i = 0; i < NCNS; i++) + if (strncmp (abbrev, cns_namemap[i], 3) == 0) + return (i); + return (-1); +} + +/* edges of constant ra */ +static struct { + unsigned short ra; /* hours * 1800 */ + short dec0, dec1; /* degrees * 60 */ +} ra_edges[] = { + { 0, -4950, -4500 }, + { 0, 600, 750 }, + { 0, 1680, 1879 }, + { 120, 1320, 1680 }, + { 255, 750, 1260 }, + { 255, 1260, 1320 }, + { 300, 2760, 2880 }, + { 599, -420, 0 }, + { 599, 0, 120 }, + { 599, 3960, 4620 }, + { 1290, 1425, 1980 }, + { 1350, -4500, -4560 }, + { 1530, 1260, 1425 }, + { 1560, 2760, 2880 }, + { 2010, 2880, 3000 }, + { 2399, -4560, -3510 }, + { 2399, -3510, -3210 }, + { 2460, 3000, 3240 }, + { 2534, 1680, 1980 }, + { 2534, 1980, 2100 }, + { 2849, -3210, -3090 }, + { 3000, -2400, -1530 }, + { 3000, -1530, -1462 }, + { 3000, 595, 1500 }, + { 3000, 1500, 1680 }, + { 3000, 2820, 3000 }, + { 3060, 3240, 3450 }, + { 3299, -3090, -2890 }, + { 3434, 3450, 3510 }, + { 3450, 1500, 1635 }, + { 3600, 120, 595 }, + { 3600, 2100, 2205 }, + { 3675, 2820, 3030 }, + { 3900, -4050, -3510 }, + { 3900, -3510, -3240 }, + { 4199, -2890, -2400 }, + { 4350, -3240, -3060 }, + { 4350, 1635, 1840 }, + { 4379, 3420, 3510 }, + { 4530, 2205, 3030 }, + { 4620, 2040, 2205 }, + { 4770, -1462, -105 }, + { 4800, -3060, -2940 }, + { 4890, 1840, 2040 }, + { 5400, -2940, -2760 }, + { 5400, -2400, -2374 }, + { 5580, 3420, 4080 }, + { 5700, 3300, 3420 }, + { 5760, -3450, -4050 }, + { 5909, -105, 0 }, + { 5909, 0, 595 }, + { 5909, 595, 1140 }, + { 5999, 3150, 3300 }, + { 6060, 1140, 1840 }, + { 6150, -2760, -2640 }, + { 6150, 4080, 4620 }, + { 6300, -5100, -4950 }, + { 6300, -4950, -4500 }, + { 6300, -3190, -3450 }, + { 6300, -2374, -2160 }, + { 6314, 4620, 4800 }, + { 6449, -105, 0 }, + { 6750, -2160, -1462 }, + { 6899, -3060, -3190 }, + { 6960, -2640, -2400 }, + { 7200, -3390, -3190 }, + { 7349, -2940, -3060 }, + { 7680, -2400, -2940 }, + { 7680, -2220, -2400 }, + { 7799, -3540, -3390 }, + { 8100, -3240, -2940 }, + { 8100, -2940, -2790 }, + { 8100, 1800, 1840 }, + { 8100, 1840, 2160 }, + { 8249, -4500, -4200 }, + { 8249, -4050, -4200 }, + { 8249, -4050, -3540 }, + { 8249, -1800, -2220 }, + { 8310, 0, 930 }, + { 8400, -240, 0 }, + { 8445, 2160, 3150 }, + { 8460, -1635, -1800 }, + { 8550, 1710, 1800 }, + { 8699, -2790, -2580 }, + { 8699, -870, -1635 }, + { 8850, -660, -870 }, + { 8940, 930, 960 }, + { 9000, -3450, -3240 }, + { 9000, -2580, -1635 }, + { 9000, 3150, 3360 }, + { 9000, 4800, 5100 }, + { 9149, -660, -240 }, + { 9599, 930, 960 }, + { 9900, -3660, -3450 }, + { 10080, 750, 930 }, + { 10260, 1080, 1369 }, + { 10380, 750, 1080 }, + { 10499, -660, -240 }, + { 10589, 1290, 1369 }, + { 10589, 1369, 1680 }, + { 10589, 1680, 1710 }, + { 10800, -3840, -3660 }, + { 10800, -3150, -3045 }, + { 10800, -3045, -2580 }, + { 10980, 3240, 3360 }, + { 10980, 3360, 3720 }, + { 11010, -1980, -1635 }, + { 11010, -1635, -660 }, + { 11100, -3300, -3150 }, + { 11190, 1050, 1290 }, + { 11235, -240, 0 }, + { 11235, 0, 600 }, + { 11354, 600, 720 }, + { 11354, 720, 1050 }, + { 11700, -3480, -3300 }, + { 11700, 3000, 3240 }, + { 11759, 1680, 2130 }, + { 11849, -4200, -4500 }, + { 11849, -4200, -3840 }, + { 11849, -1980, -2580 }, + { 12240, 2670, 3000 }, + { 12299, -3840, -3480 }, + { 12479, 600, 720 }, + { 12600, 330, 600 }, + { 12600, 600, 750 }, + { 12600, 3600, 3720 }, + { 12630, 90, 330 }, + { 12960, 0, 90 }, + { 13260, -660, -1980 }, + { 13260, 2130, 2670 }, + { 13500, 750, 810 }, + { 13800, -5100, -4950 }, + { 13800, -4500, -4950 }, + { 13950, 2010, 2130 }, + { 14054, 600, 810 }, + { 14054, 810, 1200 }, + { 14189, 1200, 1680 }, + { 14265, 420, 600 }, + { 14340, 3600, 4410 }, + { 14400, -3045, -2580 }, + { 14400, 1680, 2010 }, + { 14400, 5100, 5190 }, + { 14400, 5280, 5190 }, + { 14549, -660, 0 }, + { 14549, 0, 420 }, + { 14700, -3180, -3045 }, + { 15060, -2580, -2205 }, + { 15060, -2205, -1020 }, + { 15060, -1020, -660 }, + { 15150, 2820, 3600 }, + { 15209, -3270, -3180 }, + { 15449, -1140, -1020 }, + { 15899, -3390, -3270 }, + { 16259, -4500, -3840 }, + { 16349, -1440, -1140 }, + { 16500, 2520, 2820 }, + { 16500, 4410, 4920 }, + { 16650, 420, 2010 }, + { 16650, 2010, 2385 }, + { 16860, -2385, -2205 }, + { 16860, -1440, -2205 }, + { 17249, -660, 0 }, + { 17249, 0, 420 }, + { 17249, 2385, 2520 }, + { 17550, -1590, -1440 }, + { 17789, 1710, 2010 }, + { 18300, 2400, 2520 }, + { 18450, -1750, -1590 }, + { 18900, 1410, 1710 }, + { 19049, -1870, -1750 }, + { 19200, 4800, 4920 }, + { 19350, -660, -1140 }, + { 19350, -360, -660 }, + { 19350, -360, 0 }, + { 19350, 0, 420 }, + { 19350, 1410, 1530 }, + { 19409, 2040, 2400 }, + { 19499, -2100, -1870 }, + { 19499, -1140, -1470 }, + { 19800, -3390, -2385 }, + { 19800, -2385, -2100 }, + { 19800, 1530, 1740 }, + { 19800, 1740, 2040 }, + { 20250, -4500, -3840 }, + { 20250, -3840, -3390 }, + { 20399, 3990, 4410 }, + { 20700, 4620, 4800 }, + { 20730, -360, 0 }, + { 20730, 0, 660 }, + { 21299, -3840, -3300 }, + { 21299, -1470, -660 }, + { 21299, -660, -360 }, + { 21360, 660, 840 }, + { 21360, 840, 1740 }, + { 21600, 1740, 2040 }, + { 21600, 2040, 2700 }, + { 21600, 3840, 3990 }, + { 21749, 2700, 3180 }, + { 22050, -1980, -2100 }, + { 22199, 1920, 2040 }, + { 22649, -1770, -1980 }, + { 22649, -1470, -1320 }, + { 23099, -3840, -3300 }, + { 23099, -1320, -660 }, + { 23099, 840, 900 }, + { 23400, 4620, 4200 }, + { 23850, 1710, 1920 }, + { 24300, -3900, -3840 }, + { 24300, 480, 900 }, + { 24300, 900, 1710 }, + { 24300, 2910, 3180 }, + { 24300, 3780, 3840 }, + { 24449, 4800, 4620 }, + { 24600, -4950, -4500 }, + { 24600, -4500, -4200 }, + { 24600, -4200, -3900 }, + { 25124, 1710, 1845 }, + { 25200, 4200, 3960 }, + { 25259, 1845, 2910 }, + { 25259, 2910, 3330 }, + { 25500, -3300, -2520 }, + { 25650, -1320, -1470 }, + { 25650, -480, -1320 }, + { 25950, 3330, 3780 }, + { 26100, 5190, 4800 }, + { 26159, -3840, -3300 }, + { 26400, 0, -480 }, + { 26550, -4200, -4050 }, + { 26850, -4050, -3814 }, + { 26850, -2520, -1770 }, + { 26850, -1470, -1770 }, + { 27090, -3300, -3240 }, + { 27149, -195, 0 }, + { 27149, 0, 480 }, + { 27149, 480, 1560 }, + { 27300, -3814, -3660 }, + { 27329, 1560, 1980 }, + { 27450, 3180, 3330 }, + { 27599, -3660, -3600 }, + { 27599, -3600, -3300 }, + { 27599, -3240, -2880 }, + { 27779, 1980, 2400 }, + { 28200, -2880, -2520 }, + { 28200, -1770, -1200 }, + { 28200, 3960, 4200 }, + { 28350, 2400, 3090 }, + { 28350, 3090, 3180 }, + { 28650, -1200, -480 }, + { 28650, -480, -195 }, + { 28650, 960, 1320 }, + { 28800, -2520, -1770 }, + { 28859, 1320, 1560 }, + { 28949, 240, 960 }, + { 29100, 1560, 1620 }, + { 29280, -1474, -1155 }, + { 29280, -1095, -480 }, + { 29280, -195, 0 }, + { 29280, 0, 240 }, + { 29399, 1620, 2400 }, + { 29475, -1155, -1095 }, + { 29557, -3660, -3600 }, + { 29557, -3600, -2730 }, + { 29557, -2730, -2520 }, + { 29759, 4200, 4500 }, + { 29849, -3814, -3660 }, + { 30150, -3900, -3814 }, + { 30150, -1800, -1474 }, + { 30150, 240, 769 }, + { 30299, -4050, -3900 }, + { 30600, -4050, -4200 }, + { 30600, 3030, 3090 }, + { 30900, -960, -600 }, + { 31050, 769, 859 }, + { 31500, -3420, -4050 }, + { 31500, 4500, 4800 }, + { 31649, -700, -600 }, + { 31680, -960, -1800 }, + { 31800, -700, -600 }, + { 32099, -2730, -2220 }, + { 32099, -1800, -2220 }, + { 32099, -240, 0 }, + { 32340, -600, -240 }, + { 32400, -4950, -4500 }, + { 32400, -4500, -4050 }, + { 32400, -2730, -3420 }, + { 32400, 4800, 5160 }, + { 32715, 1800, 2850 }, + { 32819, 2850, 3030 }, + { 32850, -240, -960 }, + { 32850, 0, 180 }, + { 32850, 270, 375 }, + { 32850, 720, 859 }, + { 33060, 1560, 1800 }, + { 33165, 180, 270 }, + { 33449, -240, 0 }, + { 33449, 0, 120 }, + { 33591, 375, 720 }, + { 33960, -960, -721 }, + { 33960, -721, -240 }, + { 33960, 120, 375 }, + { 33960, 720, 1110 }, + { 33960, 1110, 1264 }, + { 33960, 1264, 1530 }, + { 33960, 1530, 1560 }, + { 34200, 970, 1110 }, + { 34349, 2850, 3330 }, + { 34500, -2220, -2730 }, + { 34500, 2610, 2850 }, + { 34650, 1150, 1264 }, + { 34664, 1530, 1650 }, + { 34664, 1650, 1800 }, + { 34844, 1800, 2190 }, + { 34920, 2190, 2610 }, + { 34950, 3330, 3480 }, + { 35400, 1650, 1740 }, + { 35580, 3480, 3570 }, + { 35699, 945, 970 }, + { 35699, 1150, 1275 }, + { 36000, -1680, -721 }, + { 36000, -540, -721 }, + { 36000, 3570, 3690 }, + { 36255, 510, 945 }, + { 36300, 4500, 4800 }, + { 36450, 945, 1230 }, + { 36450, 1230, 1275 }, + { 36540, 120, 510 }, + { 36599, -3600, -3420 }, + { 36599, -3420, -2730 }, + { 36599, -2730, -1680 }, + { 36750, 3690, 4020 }, + { 36959, -900, -540 }, + { 36959, -540, 0 }, + { 36959, 0, 120 }, + { 36966, 3570, 3655 }, + { 37020, 1170, 1230 }, + { 37080, 3289, 3655 }, + { 37200, 4020, 4500 }, + { 37499, 120, 360 }, + { 37575, 360, 709 }, + { 37650, 1680, 1740 }, + { 37800, 4800, 5160 }, + { 37800, 5160, 5169 }, + { 37890, 709, 1170 }, + { 38010, 709, 750 }, + { 38250, 1170, 1410 }, + { 38399, -4500, -3600 }, + { 38399, -3000, -2730 }, + { 38399, -2220, -2730 }, + { 38399, -1680, -2220 }, + { 38399, -1680, -1530 }, + { 38399, -540, -900 }, + { 38399, 120, 750 }, + { 38550, 1410, 1680 }, + { 38640, 120, 165 }, + { 39000, 105, 165 }, + { 39119, 1680, 2160 }, + { 39360, -1530, -540 }, + { 39375, 2160, 2625 }, + { 39434, 2625, 2640 }, + { 39540, 2640, 3165 }, + { 39540, 3165, 3289 }, + { 39600, -4050, -3420 }, + { 39600, -3420, -3000 }, + { 39600, 105, 120 }, + { 39600, 2100, 2160 }, + { 39839, 3165, 3300 }, + { 40170, 3300, 3375 }, + { 40950, -240, 0 }, + { 40950, 0, 120 }, + { 40950, 120, 450 }, + { 41070, 2070, 2100 }, + { 41160, 2070, 3150 }, + { 41160, 3150, 3375 }, + { 41160, 3375, 3544 }, + { 41400, -2220, -1530 }, + { 41400, 5169, 5280 }, + { 41700, 3544, 3780 }, + { 41999, -4500, -4050 }, + { 41999, -3510, -3420 }, + { 41999, -3420, -2400 }, + { 41999, -2400, -2220 }, + { 41999, 3000, 3150 }, + { 42300, 1924, 2070 }, + { 42449, 2880, 3000 }, + { 42449, 3780, 3960 }, + { 42750, 1879, 1924 }, + { 42899, -1530, -420 }, + { 42899, -420, -240 }, + { 42899, 450, 600 }, +}; + +#define NRA ((int)(sizeof(ra_edges)/sizeof(ra_edges[0]))) + +/* edges of constant dec */ +static struct { + short dec; /* degrees * 60 */ + unsigned short ra0, ra1; /* hours * 1800 */ +} dec_edges[] = { + { -5100, 6300, 13800 }, + { -4950, 0, 6300 }, + { -4950, 13800, 24600 }, + { -4950, 24600, 32400 }, + { -4560, 1350, 2399 }, + { -4500, 0, 1350 }, + { -4500, 6300, 8249 }, + { -4500, 11849, 13800 }, + { -4500, 13800, 16259 }, + { -4500, 16259, 20250 }, + { -4500, 20250, 24600 }, + { -4500, 32400, 38399 }, + { -4500, 38399, 41999 }, + { -4500, 41999, 0 }, + { -4200, 8249, 11849 }, + { -4200, 24600, 26550 }, + { -4200, 30600, 26550 }, + { -4050, 3900, 5760 }, + { -4050, 5760, 8249 }, + { -4050, 26550, 26850 }, + { -4050, 30299, 30600 }, + { -4050, 31500, 30600 }, + { -4050, 31500, 32400 }, + { -4050, 39600, 41999 }, + { -3900, 24300, 24600 }, + { -3900, 30150, 30299 }, + { -3840, 10800, 11849 }, + { -3840, 11849, 12299 }, + { -3840, 12299, 16259 }, + { -3840, 20250, 21299 }, + { -3840, 21299, 23099 }, + { -3840, 23099, 24300 }, + { -3840, 24300, 26159 }, + { -3814, 26850, 27300 }, + { -3814, 29849, 30150 }, + { -3660, 9900, 10800 }, + { -3660, 27300, 27599 }, + { -3660, 29557, 29849 }, + { -3600, 27599, 29557 }, + { -3600, 36599, 38399 }, + { -3540, 7799, 8249 }, + { -3510, 2399, 3900 }, + { -3510, 2399, 41999 }, + { -3510, 3900, 2399 }, + { -3510, 41999, 2399 }, + { -3480, 11700, 12299 }, + { -3450, 6300, 5760 }, + { -3450, 9000, 9900 }, + { -3420, 32400, 31500 }, + { -3420, 32400, 36599 }, + { -3420, 39600, 41999 }, + { -3390, 7200, 7799 }, + { -3390, 15899, 19800 }, + { -3390, 19800, 20250 }, + { -3300, 11100, 11700 }, + { -3300, 21299, 23099 }, + { -3300, 25500, 26159 }, + { -3300, 26159, 27090 }, + { -3300, 27090, 27599 }, + { -3270, 15209, 15899 }, + { -3240, 3900, 4350 }, + { -3240, 8100, 9000 }, + { -3240, 27090, 27599 }, + { -3210, 2399, 2849 }, + { -3190, 6899, 6300 }, + { -3190, 6899, 7200 }, + { -3180, 14700, 15209 }, + { -3150, 10800, 11100 }, + { -3090, 2849, 3299 }, + { -3060, 4350, 4800 }, + { -3060, 7349, 6899 }, + { -3045, 10800, 14400 }, + { -3045, 14400, 14700 }, + { -3000, 38399, 39600 }, + { -2940, 4800, 5400 }, + { -2940, 7680, 7349 }, + { -2940, 7680, 8100 }, + { -2890, 3299, 4199 }, + { -2880, 27599, 28200 }, + { -2790, 8100, 8699 }, + { -2760, 5400, 6150 }, + { -2730, 29557, 32099 }, + { -2730, 32099, 32400 }, + { -2730, 34500, 32400 }, + { -2730, 34500, 36599 }, + { -2730, 38399, 36599 }, + { -2640, 6150, 6960 }, + { -2580, 8699, 9000 }, + { -2580, 10800, 9000 }, + { -2580, 11849, 10800 }, + { -2580, 14400, 15060 }, + { -2520, 25500, 26850 }, + { -2520, 28200, 28800 }, + { -2520, 29557, 28800 }, + { -2400, 3000, 41999 }, + { -2400, 4199, 3000 }, + { -2400, 4199, 5400 }, + { -2400, 6960, 7680 }, + { -2385, 16860, 19800 }, + { -2374, 5400, 6300 }, + { -2220, 8249, 7680 }, + { -2220, 32099, 34500 }, + { -2220, 38399, 41400 }, + { -2220, 41999, 41400 }, + { -2205, 16860, 15060 }, + { -2160, 6300, 6750 }, + { -2100, 19800, 19499 }, + { -2100, 22050, 19800 }, + { -1980, 11010, 11849 }, + { -1980, 13260, 11849 }, + { -1980, 22649, 22050 }, + { -1870, 19499, 19049 }, + { -1800, 8460, 8249 }, + { -1800, 30150, 31680 }, + { -1800, 31680, 32099 }, + { -1770, 26850, 22649 }, + { -1770, 26850, 28200 }, + { -1770, 28800, 28200 }, + { -1750, 19049, 18450 }, + { -1680, 36000, 36599 }, + { -1680, 36599, 38399 }, + { -1635, 8699, 8460 }, + { -1635, 8699, 9000 }, + { -1635, 9000, 11010 }, + { -1590, 18450, 17550 }, + { -1530, 3000, 42899 }, + { -1530, 38399, 39360 }, + { -1530, 41400, 39360 }, + { -1530, 41400, 42899 }, + { -1530, 42899, 3000 }, + { -1530, 42899, 41400 }, + { -1474, 29280, 30150 }, + { -1470, 19499, 21299 }, + { -1470, 21299, 22649 }, + { -1470, 25650, 26850 }, + { -1462, 3000, 4770 }, + { -1462, 4770, 6750 }, + { -1440, 16349, 16860 }, + { -1440, 17550, 16860 }, + { -1320, 22649, 23099 }, + { -1320, 23099, 25650 }, + { -1200, 28200, 28650 }, + { -1155, 29280, 29475 }, + { -1140, 15449, 16349 }, + { -1140, 19350, 19499 }, + { -1095, 29280, 29475 }, + { -1020, 15060, 15449 }, + { -960, 30900, 31680 }, + { -960, 32850, 31680 }, + { -960, 32850, 33960 }, + { -900, 38399, 36959 }, + { -870, 8850, 8699 }, + { -721, 36000, 33960 }, + { -700, 31649, 31800 }, + { -660, 9149, 8850 }, + { -660, 10499, 9149 }, + { -660, 11010, 10499 }, + { -660, 11010, 13260 }, + { -660, 14549, 13260 }, + { -660, 15060, 14549 }, + { -660, 17249, 19350 }, + { -660, 23099, 21299 }, + { -600, 30900, 31649 }, + { -600, 31800, 32340 }, + { -540, 36959, 36000 }, + { -540, 39360, 38399 }, + { -480, 26400, 25650 }, + { -480, 28650, 29280 }, + { -420, 599, 42899 }, + { -360, 20730, 19350 }, + { -360, 21299, 20730 }, + { -240, 8400, 9149 }, + { -240, 10499, 11235 }, + { -240, 32099, 32340 }, + { -240, 33449, 32850 }, + { -240, 33960, 33449 }, + { -240, 40950, 42899 }, + { -195, 28650, 27149 }, + { -195, 28650, 29280 }, + { -105, 4770, 5909 }, + { -105, 5909, 6449 }, + { 0, 6449, 8310 }, + { 0, 8310, 8400 }, + { 0, 12960, 14549 }, + { 0, 27149, 26400 }, + { 0, 32099, 32850 }, + { 90, 12630, 12960 }, + { 105, 39000, 39600 }, + { 120, 599, 3600 }, + { 120, 33449, 33960 }, + { 120, 36540, 36959 }, + { 120, 36959, 37499 }, + { 120, 37499, 38399 }, + { 120, 38399, 38640 }, + { 120, 39600, 40950 }, + { 165, 38640, 39000 }, + { 180, 32850, 33165 }, + { 240, 28949, 29280 }, + { 240, 29280, 30150 }, + { 270, 33165, 32850 }, + { 330, 12600, 12630 }, + { 360, 37499, 37575 }, + { 375, 32850, 33591 }, + { 375, 33591, 33960 }, + { 420, 14265, 14549 }, + { 420, 14549, 16650 }, + { 420, 16650, 17249 }, + { 420, 17249, 19350 }, + { 450, 40950, 42899 }, + { 480, 24300, 27149 }, + { 510, 36255, 36540 }, + { 595, 3000, 3600 }, + { 595, 3600, 5909 }, + { 600, 0, 42899 }, + { 600, 11235, 11354 }, + { 600, 12479, 12600 }, + { 600, 14054, 14265 }, + { 600, 42899, 0 }, + { 660, 20730, 21360 }, + { 709, 37575, 37890 }, + { 709, 37890, 38010 }, + { 720, 11354, 12479 }, + { 720, 32850, 33591 }, + { 720, 33591, 33960 }, + { 750, 0, 255 }, + { 750, 10080, 10380 }, + { 750, 12600, 13500 }, + { 750, 38010, 38399 }, + { 769, 30150, 31050 }, + { 810, 13500, 14054 }, + { 840, 21360, 23099 }, + { 859, 31050, 32850 }, + { 900, 23099, 24300 }, + { 930, 8310, 8940 }, + { 930, 9599, 10080 }, + { 945, 35699, 36255 }, + { 945, 36255, 36450 }, + { 960, 8940, 9599 }, + { 960, 28650, 28949 }, + { 970, 34200, 35699 }, + { 1050, 11190, 11354 }, + { 1080, 10260, 10380 }, + { 1110, 33960, 34200 }, + { 1140, 5909, 6060 }, + { 1150, 34650, 35699 }, + { 1170, 37020, 37890 }, + { 1170, 37890, 38250 }, + { 1200, 14054, 14189 }, + { 1230, 36450, 37020 }, + { 1260, 255, 1530 }, + { 1264, 33960, 34650 }, + { 1275, 35699, 36450 }, + { 1290, 10589, 11190 }, + { 1320, 120, 255 }, + { 1320, 28650, 28859 }, + { 1369, 10260, 10589 }, + { 1410, 18900, 19350 }, + { 1410, 38250, 38550 }, + { 1425, 1290, 1530 }, + { 1500, 3000, 3450 }, + { 1530, 19350, 19800 }, + { 1530, 33960, 34664 }, + { 1560, 27149, 27329 }, + { 1560, 27329, 28859 }, + { 1560, 28859, 29100 }, + { 1560, 33060, 33960 }, + { 1620, 29100, 29399 }, + { 1635, 3450, 4350 }, + { 1650, 34664, 35400 }, + { 1680, 0, 120 }, + { 1680, 2534, 3000 }, + { 1680, 10589, 11759 }, + { 1680, 14189, 14400 }, + { 1680, 37650, 38550 }, + { 1680, 38550, 39119 }, + { 1710, 8550, 10589 }, + { 1710, 17789, 18900 }, + { 1710, 23850, 24300 }, + { 1710, 24300, 25124 }, + { 1740, 19800, 21360 }, + { 1740, 21360, 21600 }, + { 1740, 35400, 37650 }, + { 1800, 8100, 8550 }, + { 1800, 32715, 33060 }, + { 1800, 34664, 34844 }, + { 1840, 4350, 4890 }, + { 1840, 4890, 6060 }, + { 1840, 6060, 8100 }, + { 1845, 25124, 25259 }, + { 1879, 0, 42750 }, + { 1920, 22199, 23850 }, + { 1924, 42300, 42750 }, + { 1980, 1290, 2534 }, + { 1980, 27329, 27779 }, + { 2010, 13950, 14400 }, + { 2010, 14400, 16650 }, + { 2010, 16650, 17789 }, + { 2040, 4620, 4890 }, + { 2040, 19409, 19800 }, + { 2040, 21600, 22199 }, + { 2070, 41070, 41160 }, + { 2070, 41160, 42300 }, + { 2100, 2534, 3600 }, + { 2100, 39600, 41070 }, + { 2130, 11759, 13260 }, + { 2130, 13260, 13950 }, + { 2160, 8100, 8445 }, + { 2160, 39119, 39375 }, + { 2160, 39375, 39600 }, + { 2190, 34844, 34920 }, + { 2205, 3600, 4530 }, + { 2205, 4530, 4620 }, + { 2385, 16650, 17249 }, + { 2400, 18300, 19409 }, + { 2400, 27779, 28350 }, + { 2400, 28350, 29399 }, + { 2520, 16500, 17249 }, + { 2520, 17249, 18300 }, + { 2610, 34500, 34920 }, + { 2625, 39375, 39434 }, + { 2640, 39434, 39540 }, + { 2670, 12240, 13260 }, + { 2700, 21600, 21749 }, + { 2760, 300, 1560 }, + { 2820, 3000, 3675 }, + { 2820, 15150, 16500 }, + { 2850, 32715, 32819 }, + { 2850, 32819, 34349 }, + { 2850, 34349, 34500 }, + { 2880, 300, 42449 }, + { 2880, 1560, 2010 }, + { 2880, 42449, 300 }, + { 2910, 24300, 25259 }, + { 3000, 2010, 2460 }, + { 3000, 2460, 3000 }, + { 3000, 11700, 12240 }, + { 3000, 41999, 42449 }, + { 3030, 3675, 4530 }, + { 3030, 30600, 32819 }, + { 3090, 28350, 30600 }, + { 3150, 5999, 8445 }, + { 3150, 8445, 9000 }, + { 3150, 41160, 41999 }, + { 3165, 39540, 39839 }, + { 3180, 21749, 24300 }, + { 3180, 27450, 28350 }, + { 3240, 2460, 3060 }, + { 3240, 10980, 11700 }, + { 3289, 37080, 39540 }, + { 3300, 5700, 5999 }, + { 3300, 39839, 40170 }, + { 3330, 25259, 25950 }, + { 3330, 25950, 27450 }, + { 3330, 34349, 34950 }, + { 3360, 9000, 10980 }, + { 3375, 40170, 41160 }, + { 3420, 4379, 5580 }, + { 3420, 5580, 5700 }, + { 3450, 3060, 3434 }, + { 3480, 34950, 35580 }, + { 3510, 3434, 4379 }, + { 3544, 41160, 41700 }, + { 3570, 35580, 36000 }, + { 3570, 36000, 36966 }, + { 3600, 12600, 14340 }, + { 3600, 14340, 15150 }, + { 3655, 36966, 37080 }, + { 3690, 36000, 36750 }, + { 3720, 10980, 12600 }, + { 3780, 24300, 25950 }, + { 3780, 41700, 42449 }, + { 3840, 21600, 24300 }, + { 3960, 599, 42449 }, + { 3960, 25200, 28200 }, + { 3960, 42449, 599 }, + { 3990, 20399, 21600 }, + { 4020, 36750, 37200 }, + { 4080, 5580, 6150 }, + { 4200, 23400, 25200 }, + { 4200, 28200, 29759 }, + { 4410, 14340, 16500 }, + { 4410, 16500, 20399 }, + { 4500, 29759, 31500 }, + { 4500, 36300, 37200 }, + { 4620, 599, 6150 }, + { 4620, 6150, 6314 }, + { 4620, 20700, 23400 }, + { 4620, 24449, 23400 }, + { 4800, 6314, 9000 }, + { 4800, 19200, 20700 }, + { 4800, 26100, 24449 }, + { 4800, 31500, 32400 }, + { 4800, 36300, 37800 }, + { 4920, 16500, 19200 }, + { 5100, 9000, 14400 }, + { 5160, 32400, 37800 }, + { 5169, 37800, 41400 }, + { 5190, 14400, 26100 }, + { 5280, 6300, 14400 }, + { 5280, 41400, 6300 }, +}; + +#define NDEC ((int)(sizeof(dec_edges)/sizeof(dec_edges[0]))) + +/* given an epoch, give caller a list of all constellation edges. + * return count if ok, else -1. + * N.B. caller should *not* free what we return because we cache it here. + */ +int +cns_edges (double e, double **ra0p, double **dec0p, double **ra1p, +double **dec1p) +{ +#define NEDGES (NRA+NDEC) + static double *ra0, *dec0, *ra1, *dec1; + static double laste = -12345.6; /* any bogus value */ + double mjd0; + int i, n; + + /* if same epoch just return the same list */ + if (e == laste) { + *ra0p = ra0; + *dec0p = dec0; + *ra1p = ra1; + *dec1p = dec1; + return (NEDGES); + } + + /* get space for arrays, first time only */ + if (!ra0) { + ra0 = (double *)malloc (NEDGES * sizeof(double)); + if (!ra0) + return (-1); + dec0 = (double *)malloc (NEDGES * sizeof(double)); + if (!dec0) { + free ((void *)ra0); + return (-1); + } + ra1 = (double *)malloc (NEDGES * sizeof(double)); + if (!ra1) { + free ((void *)ra0); + free ((void *)dec0); + return (-1); + } + dec1 = (double *)malloc (NEDGES * sizeof(double)); + if (!dec1) { + free ((void *)ra0); + free ((void *)dec0); + free ((void *)ra1); + return (-1); + } + } + + /* prepare for precession from 1875 */ + cal_mjd (1, 1.0, 1875, &mjd0); + + /* build the constant-ra edge lists */ + n = 0; + for (i = 0; i < NRA; i++) { + ra0[n] = ra1[n] = hrrad((double)ra_edges[i].ra/1800.0); + dec0[n] = degrad((double)ra_edges[i].dec0/60.0); + dec1[n] = degrad((double)ra_edges[i].dec1/60.0); + precess (mjd0, e, &ra0[n], &dec0[n]); + precess (mjd0, e, &ra1[n], &dec1[n]); + n++; + } + + /* add the constant-dec edge lists */ + for (i = 0; i < NDEC; i++) { + ra0[n] = hrrad((double)dec_edges[i].ra0/1800.0); + ra1[n] = hrrad((double)dec_edges[i].ra1/1800.0); + dec0[n] = dec1[n] = degrad((double)dec_edges[i].dec/60.0); + precess (mjd0, e, &ra0[n], &dec0[n]); + precess (mjd0, e, &ra1[n], &dec1[n]); + n++; + } + + /* sanity check the count */ + if (n != NEDGES) { + printf ("cns_edges(): n=%d NEDGES=%ld\n", n, (long)NEDGES); + abort(); + } + + /* ok */ + *ra0p = ra0; + *dec0p = dec0; + *ra1p = ra1; + *dec1p = dec1; + laste = e; + return (NEDGES); +} + +/* given an ra, dec and epoch return the list of constellation ids which + * *may* fall within the given radius of said location. + * return the number of ids. + * ids[] need be no larger than 89. + */ +/* ARGSUSED */ +int +cns_list (double ra, double dec, double e, double rad, int ids[]) +{ + int i; + + /* TODO: this! */ + for (i = 0; i < NCNS; i++) + ids[i] = i; + return (NCNS); +} + +/* epoch 2000 RA/Dec of constellation figure end-points. + * drawcodes: 0=move to; 1=draw to; 2=draw to dashed; -1=end + */ +typedef struct { + int drawcode; /* draw code */ + float ra; /* rads */ + float dec; /* rads */ +} ConFig; + +/* array of malloced lists of ConFigs, same order as cns_namemap[] + */ +static ConFig *figmap[NCNS]; + +/* add one entry to the drawing code lists */ +static void +addFigList (ConFig **new, int *nused, int c, int drawcode, double ra, double dec) +{ + ConFig *cp; + + new[c]= (ConFig*) realloc (new[c], (nused[c]+1)*sizeof(ConFig)); + cp = &new[c][nused[c]++]; + cp->drawcode = drawcode; + cp->ra = (float)hrrad(ra); + cp->dec = (float)degrad(dec); +} + +/* load the given constellation definition file. + * return 0 if ok else reason why not in msg[] and -1. + */ +int +cns_loadfigs (FILE *fp, char *msg) +{ + char line[1024]; /* one line from the file */ + char cname[1024]; /* constellation name */ + ConFig **new; /* array of ConFig[] for each cnstn */ + int *nused; /* number of ConFig[] for each cnstn */ + int c = -1; /* index, same as cns_namemap[] */ + int s = 0; /* status */ + + /* init the temp lists */ + new = (ConFig **) calloc (NCNS, sizeof(ConFig*)); + nused = (int *) calloc (NCNS, sizeof(int)); + + /* read the file */ + while (fgets (line, sizeof(line), fp)) { + char rastr[64], decstr[64]; + char *lp; + int code; + + /* skip leading/trailing whitespace, blank lines and # lines */ + for (lp = line+strlen(line)-1; lp>=line && isspace(*lp); --lp) + *lp = '\0'; + for (lp = line; isspace(*lp); lp++) + continue; + if (*lp == '#' || *lp == '\0') + continue; + + /* ok, line looks interesting, look more carefully */ + if (sscanf (lp, "%d %s %s", &code, rastr, decstr) == 3) { + /* looks like a drawing line */ + double ra, dec; + + /* must be working on a current constellation */ + if (c < 0) { + sprintf (msg,"Found coord line before first constellation"); + s = -1; + break; + } + + /* check draw code */ + if (code < 0 || code > 2) { + sprintf (msg, "Bad draw code in %s: %d", cname, code); + s = -1; + break; + } + + /* crack ra dec */ + if (f_scansexa (rastr, &ra) < 0 || ra < 0 || ra >= 24) { + sprintf (msg, "Bad RA format in %s: %s", cname, rastr); + s = -1; + break; + } + if (f_scansexa (decstr, &dec) < 0 || dec < -90 || dec > 90) { + sprintf (msg, "Bad Dec format in %s: %s", cname, decstr); + s = -1; + break; + } + + /* add to list */ + addFigList (new, nused, c, code, ra, dec); + + } else { + /* finish previous list, if any */ + if (c >= 0) + addFigList (new, nused, c, -1, 0.0, 0.0); + + /* see if it's a recognized constellation name */ + for (c = 0; c < NCNS; c++) + if (strcmp (lp, cns_namemap[c]+5) == 0) + break; + if (c == NCNS) { + sprintf (msg, "Unknown constellation: %s", lp); + s = -1; + break; + } + if (new[c]) { + sprintf (msg, "Duplicate definition for %s", lp); + s = -1; + break; + } + + /* init its list */ + strcpy (cname, lp); + new[c] = (ConFig *) malloc (1); /* realloc seed */ + } + } + + /* even if ok check we found all definitions */ + if (s == 0) { + int l = 0; + + /* finish last list */ + addFigList (new, nused, c, -1, 0.0, 0.0); + + for (c = 0; c < NCNS; c++) + if (!new[c]) + l += sprintf (msg+l, "%s ", cns_namemap[c]+5); + if (l > 0) { + strcat (msg, ": no definition found"); + s = -1; + } + } + + /* handle ok or error */ + if (s < 0) { + /* trouble: free temp lists */ + for (c = 0; c < NCNS; c++) + if (new[c]) + free (new[c]); + } else { + /* make temp lists persistent */ + for (c = 0; c < NCNS; c++) { + if (figmap[c]) + free (figmap[c]); + figmap[c] = new[c]; + } + } + + /* done with lists themselves regardless */ + free (new); + free (nused); + + /* done */ + return (s); +} + +/* given a constellation id and epoch, return arrays of ra[] and dec[] + * end-points precessed to the desired epoch that, if connected, will form the + * given constellation figure. + * dcodes is 0 if the coord is a "move-to", 1 if a "draw-to" or 2 if a "draw-to + * as dotted-line". + * return the total number of tripples or -1 if id is bogus. + * the arrays need be no larger than 35 entries. + */ +int +cns_figure (int id, double e, double ra[], double dec[], int dcodes[]) +{ + ConFig *cfp; + + if (id < 0 || id >= NCNS) + return (-1); + + for (cfp = figmap[id]; cfp->drawcode >= 0; cfp++) { + *ra = (double)cfp->ra; + *dec = (double)cfp->dec; + precess (J2000, e, ra, dec); + ra++; + dec++; + *dcodes++ = cfp->drawcode; + } + + return (cfp - figmap[id]); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: constel.c,v $ $Date: 2005/03/05 06:55:22 $ $Revision: 1.13 $ $Name: $"}; diff --git a/libastro/dbfmt.c b/libastro/dbfmt.c new file mode 100644 index 0000000..a562493 --- /dev/null +++ b/libastro/dbfmt.c @@ -0,0 +1,1029 @@ +/* code to convert between .edb format and an Obj */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + + +int get_fields (char *s, int delim, char *fields[]); + +#define MAXDBLINE 512 /* longest allowed db line */ + +#define FLDSEP ',' /* major field separator */ +#define SUBFLD '|' /* subfield separator */ +#define MAXFLDS 20 /* must be more than on any expected line */ +#define MAXESGOOD 100 /* max earth satellite good, days */ + +static char *enm (char *flds[MAXFLDS]); +static int crack_f (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_e (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_h (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_p (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_E (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_P (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_B (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]); +static int crack_name (Obj *op, char *flds[MAXFLDS], int nf, + char nm[][MAXNM], int nnm); +static void crack_year (char *bp, double *p); +static void crack_okdates (char *fld, float *startok, float *endok); +static int get_okdates (char *lp, float *sp, float *ep); +static int tle_sum (char *l); +static double tle_fld (char *l, int from, int thru); +static double tle_expfld (char *l, int start); +static void write_f (Obj *op, char lp[]); +static void write_e (Obj *op, char lp[]); +static void write_h (Obj *op, char lp[]); +static void write_p (Obj *op, char lp[]); +static void write_E (Obj *op, char lp[]); +static void write_P (Obj *op, char lp[]); +static void write_B (Obj *op, char lp[]); + +/* crack the given .edb database line into op. + * if ok + * return number of names in nm[], or 1 if nm == NULL + * else + * if whynot + * if not even a candidate + * set whynot[0] = '\0' + * else + * fill whynot with reason message. + * return -1 + * only the first name is stored in op, all names (up to nnm) are in nm[], or + * ignored if nm == NULL. + */ +int +db_crack_line (char s[], Obj *op, char nm[][MAXNM], int nnm, char whynot[]) +{ + char copy[MAXDBLINE]; /* work copy; leave s untouched */ + char *flds[MAXFLDS]; /* point to each field for easy reference */ + int nf; + int i; + + /* init no response */ + if (whynot) + whynot[0] = '\0'; + + /* basic initial check */ + if (dbline_candidate (s) < 0) + return (-1); + + /* do all the parsing on a copy */ + (void) strncpy (copy, s, MAXDBLINE-1); + copy[MAXDBLINE-1] = '\0'; + i = strlen(copy); + if (copy[i-1] == '\n') + copy[i-1] = '\0'; + + /* parse into main fields */ + nf = get_fields (copy, FLDSEP, flds); + + /* need at least 2: name and type */ + if (nf < 2) { + if (whynot) + sprintf (whynot, "Bogus: %s", s); + return (-1); + } + + /* switch out on type of object - the second field */ + switch (flds[1][0]) { + + case 'f': + if (crack_f (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'e': + if (crack_e (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'h': + if (crack_h (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'p': + if (crack_p (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'B': + if (crack_B (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'E': + if (crack_E (op, flds, nf, whynot) < 0) + return (-1); + break; + + case 'P': + if (crack_P (op, flds, nf, whynot) < 0) + return (-1); + break; + + default: + if (whynot) + sprintf (whynot, "%s: Unknown type %c for %s", enm(flds), + flds[1][0], flds[0]); + return (-1); + } + + return (crack_name (op, flds, nf, nm, nnm)); +} + +/* write the given Obj in .edb format to lp[]. + * we do _not_ include a trailing '\n'. + */ +void +db_write_line (Obj *op, char lp[]) +{ + switch (op->o_type) { + case FIXED: + write_f (op, lp); + break; + + case BINARYSTAR: + write_B (op, lp); + break; + + case ELLIPTICAL: + write_e (op, lp); + break; + + case HYPERBOLIC: + write_h (op, lp); + break; + + case PARABOLIC: + write_p (op, lp); + break; + + case EARTHSAT: + write_E (op, lp); + break; + + case PLANET: + write_P (op, lp); + break; + + default: + printf ("Unknown type for %s: %d\n", op->o_name, op->o_type); + abort(); + } +} + +/* given 3 lines, first of which is name and next 2 are TLE, fill op. + * we skip leading whitespace on all lines. + * we do /not/ assume the 2 TLE lines are 0 terminated, but we do reach out into + * each as far as 69 chars. + * we detect nonconformance as efficiently as possible. + * name ends at first '\0', '\r' or '\n'. + * set startok/endok. + * if ok return 0 else return -1 + */ +int +db_tle (char *name, char *l1, char *l2, Obj *op) +{ + double ep; + int i; + + /* check for correct line numbers, macthing satellite numbers and + * correct checksums. + */ + while (isspace(*l1)) + l1++; + if (*l1 != '1') + return (-1); + while (isspace(*l2)) + l2++; + if (*l2 != '2') + return (-1); + if (strncmp (l1+2, l2+2, 5)) + return (-1); + if (tle_sum (l1) < 0) + return (-1); + if (tle_sum (l2) < 0) + return (-1); + + /* assume it's ok from here out */ + + /* fresh */ + zero_mem ((void *)op, sizeof(ObjES)); + op->o_type = EARTHSAT; + + /* name, sans leading and trailing whitespace */ + while (isspace(*name)) + name++; + i = strcspn (name, "\r\n"); + while (i > 0 && name[i-1] == ' ') + --i; + if (i == 0) + return (-1); + if (i > MAXNM-1) + i = MAXNM-1; + sprintf (op->o_name, "%.*s", i, name); + + /* goodies from "line 1" */ + op->es_drag = (float) tle_expfld (l1, 54); + op->es_decay = (float) tle_fld (l1, 34, 43); + i = (int) tle_fld (l1, 19, 20); + if (i < 57) + i += 100; + cal_mjd (1, tle_fld(l1, 21, 32), i+1900, &ep); + op->es_epoch = ep; + + /* goodies from "line 2" */ + op->es_n = tle_fld (l2, 53, 63); + op->es_inc = (float)tle_fld (l2, 9, 16); + op->es_raan = (float)tle_fld (l2, 18, 25); + op->es_e = (float)(tle_fld (l2, 27, 33) * 1e-7); + op->es_ap = (float)tle_fld (l2, 35, 42); + op->es_M = (float)tle_fld (l2, 44, 51); + op->es_orbit = (int)tle_fld (l2, 64, 68); + + /* limit date range to decay period that changes period by 1% but + * never more than MAXESGOOD. + * es_n is rev/day, es_decay is (rev/day)/day + */ + if (fabs(op->es_decay) > 0) { + double dt = 0.01*op->es_n/fabs(op->es_decay); + if (dt > MAXESGOOD) + dt = MAXESGOOD; + op->es_startok = op->es_epoch - dt; + op->es_endok = op->es_epoch + dt; + } + + /* yes! */ + return (0); +} + +/* return 0 if op has no date range information or what it does have brackets + * now, else -1 + */ +int +dateRangeOK (Now *np, Obj *op) +{ + float *sp, *ep; + + switch (op->o_type) { + case ELLIPTICAL: + sp = &op->e_startok; + ep = &op->e_endok; + break; + case HYPERBOLIC: + sp = &op->h_startok; + ep = &op->h_endok; + break; + case PARABOLIC: + sp = &op->p_startok; + ep = &op->p_endok; + break; + case EARTHSAT: + sp = &op->es_startok; + ep = &op->es_endok; + break; + default: + return (0); + } + + if (*sp <= mjd && (!*ep || mjd <= *ep)) + return (0); + return (-1); +} + +/* given a null-terminated string, fill in fields[] with the starting addresses + * of each field delimited by delim or '\0'. + * N.B. each character matching delim is REPLACED BY '\0' IN PLACE. + * N.B. 0-length fields count, so even if *s=='\0' we return 1. + * return the number of fields. + */ +int +get_fields (char *s, int delim, char *fields[]) +{ + int n; + char c; + + *fields = s; + n = 0; + do { + c = *s++; + if (c == delim || c == '\0') { + s[-1] = '\0'; + *++fields = s; + n++; + } + } while (c); + + return (n); +} + +/* return 0 if buf qualifies as a database line worthy of a cracking + * attempt, else -1. + */ +int +dbline_candidate (char *buf) +{ + char c = buf[0]; + + return (c == '#' || c == '!' || isspace(c) ? -1 : 0); +} + +/* return 0 if TLE checksum is ok, else -1 */ +static int +tle_sum (char *l) +{ + char *lastl = l + 68; + int sum; + + for (sum = 0; l < lastl; ) { + char c = *l++; + if (c == '\0') + return (-1); + if (isdigit(c)) + sum += c - '0'; + else if (c == '-') + sum++; + } + + return (*l - '0' == (sum%10) ? 0 : -1); +} + +/* extract the given columns and return value. + * N.B. from and to are 1-based within l + */ +static double +tle_fld (char *l, int from, int thru) +{ + char buf[32]; + + sprintf (buf, "%.*s", thru-from+1, l+from-1); + return (atod (buf)); +} + +/* extract the exponential value starting at the given column. + * N.B. start is 1-based within l + */ +static double +tle_expfld (char *l, int start) +{ + char buf[32]; + double v; + + sprintf (buf, ".%.*s", 5, l+start); + v = atod (buf) * pow (10.0, tle_fld(l, start+6, start+7)); + if (l[start-1] == '-') + v = -v; + return (v); +} + +static int +crack_f (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + char *sflds[MAXFLDS]; + double tmp; + int nsf; + + if (nf < 5 || nf > 7) { + if (whynot) + sprintf (whynot, "%s: type f needs 5-7 fields, not %d", + enm(flds),nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjF)); + op->o_type = FIXED; + + nsf = get_fields(flds[1], SUBFLD, sflds); + if (nsf > 1) { + switch (sflds[1][0]) { + case 'A': case 'B': case 'C': case 'D': case 'F': case 'G': + case 'H': case 'K': case 'J': case 'L': case 'M': case 'N': + case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'Y': + op->f_class = sflds[1][0]; + if (op->f_class == 'B') + op->f_class = 'D'; /* merge B and D since BINARYSTAR */ + break; + default: + if (whynot) + sprintf (whynot, "%s: Bad f class: %c", enm(flds), + sflds[1][0]); + return (-1); + } + } else + op->f_class = 'T'; /* default to star-like */ + if (nsf > 2) { + /* fill f_spect all the way */ + char buf[sizeof(op->f_spect)+1]; + memset (buf, 0, sizeof(buf)); + sprintf (buf, "%.*s", (int)sizeof(op->f_spect), sflds[2]); + memcpy (op->f_spect, buf, (int)sizeof(op->f_spect)); + } + + nsf = get_fields(flds[2], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_RA = (float) hrrad(tmp); + if (nsf > 1) + op->f_pmRA = (float) 1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + + nsf = get_fields(flds[3], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_dec = (float) degrad(tmp); + if (nsf > 1) + op->f_pmdec = (float)1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + if (fabs(op->f_dec) < PI/2) + op->f_pmRA /= cos (op->f_dec); + + set_fmag (op, atod(flds[4])); + + if (nf > 5 && flds[5][0]) { + tmp = op->f_epoch; + crack_year (flds[5], &tmp); + op->f_epoch = (float) tmp; + } else + op->f_epoch = J2000; /* default */ + + if (nf > 6) { + op->f_size = (float) atod(flds[6]); + + /* optional minor axis and position angle subfields */ + nsf = get_fields(flds[6], SUBFLD, sflds); + if (nsf == 3) { + set_ratio(op, op->s_size, atod(sflds[1])); + set_pa(op,degrad(atod(sflds[2]))); + } else { + set_ratio(op,1,1); /* round */ + set_pa(op,0.0); + } + } + + return (0); +} + +static int +crack_e (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 13 && nf != 14) { + if (whynot) + sprintf (whynot, "%s: type e needs 13 or 14 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjE)); + op->o_type = ELLIPTICAL; + + op->e_inc = (float) atod (flds[2]); + op->e_Om = (float) atod (flds[3]); + op->e_om = (float) atod (flds[4]); + op->e_a = (float) atod (flds[5]); + /* retired op->e_n = (float) atod (flds[6]); */ + op->e_e = atod (flds[7]); + op->e_M = (float) atod (flds[8]); + crack_year (flds[9], &op->e_cepoch); + crack_okdates (flds[9], &op->e_startok, &op->e_endok); + crack_year (flds[10], &op->e_epoch); + + /* magnitude model gk or HG(default). allow prefixes in either field */ + op->e_mag.whichm = flds[11][0] == 'g' ? MAG_gk : MAG_HG; + if (isdigit(flds[11][0])) + op->e_mag.m1 = (float) atod(&flds[11][0]); + else + op->e_mag.m1 = (float) atod(&flds[11][1]); + if (isdigit(flds[12][0])) + op->e_mag.m2 = (float) atod(&flds[12][0]); + else + op->e_mag.m2 = (float) atod(&flds[12][1]); + + if (nf == 14) + op->e_size = (float) atod (flds[13]); + + return (0); +} + +static int +crack_h (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 11 && nf != 12) { + if (whynot) + sprintf (whynot, "%s: type h needs 11 or 12 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjH)); + op->o_type = HYPERBOLIC; + + crack_year (flds[2], &op->h_ep); + crack_okdates (flds[2], &op->h_startok, &op->h_endok); + op->h_inc = (float) atod (flds[3]); + op->h_Om = (float) atod (flds[4]); + op->h_om = (float) atod (flds[5]); + op->h_e = (float) atod (flds[6]); + op->h_qp = (float) atod (flds[7]); + crack_year (flds[8], &op->h_epoch); + op->h_g = (float) atod (flds[9]); + op->h_k = (float) atod (flds[10]); + + if (nf == 12) + op->h_size = (float) atod (flds[11]); + + return (0); +} + +static int +crack_p (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 10 && nf != 11) { + if (whynot) + sprintf (whynot, "%s: type p needs 10 or 11 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjP)); + op->o_type = PARABOLIC; + + crack_year (flds[2], &op->p_ep); + crack_okdates (flds[2], &op->p_startok, &op->p_endok); + op->p_inc = (float) atod (flds[3]); + op->p_om = (float) atod (flds[4]); + op->p_qp = (float) atod (flds[5]); + op->p_Om = (float) atod (flds[6]); + crack_year (flds[7], &op->p_epoch); + op->p_g = (float) atod (flds[8]); + op->p_k = (float) atod (flds[9]); + + if (nf == 11) + op->p_size = (float) atod (flds[10]); + + return (0); +} + +static int +crack_E (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + if (nf != 11 && nf != 12) { + if (whynot) + sprintf (whynot, "%s: type E needs 11 or 12 fields, not %d", + enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjES)); + op->o_type = EARTHSAT; + crack_year (flds[2], &op->es_epoch); + crack_okdates (flds[2], &op->es_startok, &op->es_endok); + op->es_inc = (float) atod (flds[3]); + op->es_raan = (float) atod (flds[4]); + op->es_e = (float) atod (flds[5]); + op->es_ap = (float) atod (flds[6]); + op->es_M = (float) atod (flds[7]); + op->es_n = atod (flds[8]); + op->es_decay = (float) atod (flds[9]); + op->es_orbit = atoi (flds[10]); + if (nf == 12) + op->es_drag = (float) atod (flds[11]); + + /* if not already specified, limit date range to decay period that + * changes period by 1% but never longer than MAXESGOOD. + * es_n is rev/day, es_decay is (rev/day)/day + */ + if (op->es_startok == 0 && op->es_endok == 0 && fabs(op->es_decay) > 0){ + double dt = 0.01*op->es_n/fabs(op->es_decay); + if (dt > MAXESGOOD) + dt = MAXESGOOD; + op->es_startok = op->es_epoch - dt; + op->es_endok = op->es_epoch + dt; + } + + return (0); +} + +static int +crack_P (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + Obj *bi; + int nbi; + int i; + + nbi = getBuiltInObjs (&bi); + + for (i = 0; i < nbi; i++) { + Obj *bop = bi + i; + if (is_type(bop,PLANETM) && !strcmp (flds[0], bop->o_name)) { + memcpy ((void *)op, bop, sizeof(ObjPl)); + return (0); + } + } + + if (whynot) + sprintf (whynot, "%s: Unknown planet or moon", enm(flds)); + return (-1); +} + +static int +crack_B (Obj *op, char *flds[MAXFLDS], int nf, char whynot[]) +{ + char *sflds[MAXFLDS]; + double tmp; + int nsf; + + if (nf != 7) { + if (whynot) + sprintf (whynot, "%s: B need 7 fields, not %d", enm(flds), nf); + return (-1); + } + + zero_mem ((void *)op, sizeof(ObjB)); + op->o_type = BINARYSTAR; + + nsf = get_fields(flds[1], SUBFLD, sflds); + if (nsf > 1) { + switch (sflds[1][0]) { + case 'a': case 'c': case 'e': case 'x': case 'y': case 'o': + case 's': case 't': case 'u': case 'v': case 'b': case 'd': + case 'q': case 'r': case 'p': case 'U': case 'V': case 'Y': + op->f_class = sflds[1][0]; + break; + default: + if (whynot) + sprintf (whynot, "%s: Bad B class: %c", enm(flds), + sflds[1][0]); + return (-1); + } + } + if (nsf > 2) { + /* fill f_spect all the way */ + char buf[sizeof(op->f_spect)+1]; + memset (buf, 0, sizeof(buf)); + sprintf (buf, "%.*s", (int)sizeof(op->f_spect), sflds[2]); + memcpy (op->f_spect, buf, (int)sizeof(op->f_spect)); + } + if (nsf > 3) { + /* fill b_2spect all the way */ + char buf[sizeof(op->b_2spect)+1]; + memset (buf, 0, sizeof(buf)); + sprintf (buf, "%.*s", (int)sizeof(op->b_2spect), sflds[3]); + memcpy (op->b_2spect, buf, (int)sizeof(op->b_2spect)); + } + + nsf = get_fields(flds[2], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_RA = (float) hrrad(tmp); + if (nsf > 1) + op->f_pmRA = (float) 1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + + nsf = get_fields(flds[3], SUBFLD, sflds); + f_scansexa (sflds[0], &tmp); + op->f_dec = (float) degrad(tmp); + if (nsf > 1) + op->f_pmdec = (float)1.327e-11*atod(sflds[1]);/*mas/yr->rad/dy*/ + if (fabs(op->f_dec) < PI/2) + op->f_pmRA /= cos (op->f_dec); + + nsf = get_fields(flds[4], SUBFLD, sflds); + if (nsf > 0) + set_fmag (op, atod(sflds[0])); + if (nsf > 1) + op->b_2mag = (short)floor((atod(sflds[1]))*MAGSCALE + 0.5); + + if (flds[5][0]) { + tmp = op->f_epoch; + crack_year (flds[5], &tmp); + op->f_epoch = (float) tmp; + } else + op->f_epoch = J2000; /* default */ + + nsf = get_fields(flds[6], SUBFLD, sflds); + if (nsf == 7) { + int l; + char c; + + op->b_bo.bo_a = atod(sflds[0]); + op->b_bo.bo_i = atod(sflds[1]); + op->b_bo.bo_O = atod(sflds[2]); + op->b_bo.bo_e = atod(sflds[3]); + op->b_bo.bo_T = atod(sflds[4]); + op->b_bo.bo_o = atod(sflds[5]); + op->b_bo.bo_P = atod(sflds[6]); + + /* reject some weird entries actually seen in real lists */ + if (op->b_bo.bo_a <= 0) { + if (whynot) + sprintf (whynot, "%s: Bogus B semi major axis: %g", + enm(flds), op->b_bo.bo_a); + return (-1); + } + if (op->b_bo.bo_P <= 0) { + if (whynot) + sprintf (whynot, "%s: Bogus B period: %g", enm(flds), + op->b_bo.bo_P); + return (-1); + } + + /* scale period */ + l = strlen (sflds[6]); + c = sflds[6][l-1]; + switch (c) { + case 'y': case 'Y': + break; + case 'h': case 'H': + op->b_bo.bo_P /= (24.0*365.25); + break; + case 'd': case 'D': + op->b_bo.bo_P /= 365.25; + break; + default: + if (c != ' ' && !isdigit(c)) { + if (whynot) + sprintf (whynot,"%s: B period suffix not Y, D or H: %c", + enm(flds), c); + return (-1); + } + } + + } else if (nsf==3 || nsf==6 || nsf==9) { + double yr; + int i; + + op->b_nbp = nsf/3; + for (i = 0; i < nsf; i += 3) { + tmp = 0; + crack_year (sflds[i+0], &tmp); + mjd_year (tmp, &yr); + op->b_bp[i/3].bp_ep = (float)yr; + op->b_bp[i/3].bp_sep = atod(sflds[i+1]); + op->b_bp[i/3].bp_pa = degrad(atod(sflds[i+2])); + } + } else { + if (whynot) + sprintf (whynot, + "%s: type B needs 3,6 or 7 subfields in field 7, not %d", + enm(flds), nsf); + return (-1); + } + + return (0); +} + +/* put all names in nm but load only the first into o_name */ +static int +crack_name (Obj *op, char *flds[MAXFLDS], int nf, char nm[][MAXNM], int nnm) +{ + char *sflds[MAXFLDS]; + int nsf; + int i; + + nsf = get_fields (flds[0], SUBFLD, sflds); + for (i = 0; nm && i < nsf && i < nnm; i++) { + strncpy (nm[i], sflds[i], MAXNM); + nm[i][MAXNM-1] = '\0'; + } + strncpy (op->o_name, sflds[0], MAXNM-1); + return (nsf); +} + +/* simple name cracker just for error messages */ +static char * +enm (char *flds[MAXFLDS]) +{ + char *sflds[MAXFLDS]; + int nsf = get_fields (flds[0], SUBFLD, sflds); + return (nsf > 0 ? sflds[0] : "Unknown"); +} + +/* given either a decimal year (xxxx[.xxx]) or a calendar (x/x/x) date + * convert it to an mjd and store it at *p. + */ +static void +crack_year (char *bp, double *p) +{ + int m, y; + double d; + + mjd_cal (*p, &m, &d, &y); /* init with current */ + f_sscandate (bp, PREF_MDY, &m, &d, &y); + cal_mjd (m, d, y, p); +} + +/* crack the startok and endok date fields found in several Obj types. + * set to 0 if blank or any problems. + */ +static void +crack_okdates (char *fld, float *startok, float *endok) +{ + char *sflds[MAXFLDS]; + double tmp; + int m, y; + double d; + int nsf; + + *startok = *endok = 0; + nsf = get_fields(fld, SUBFLD, sflds); + if (nsf > 1) { + d = m = y = 0; + f_sscandate (sflds[1], PREF_MDY, &m, &d, &y); + cal_mjd (m, d, y, &tmp); + *startok = (float)tmp; + if (nsf > 2) { + d = m = y = 0; + f_sscandate (sflds[2], PREF_MDY, &m, &d, &y); + cal_mjd (m, d, y, &tmp); + *endok = (float)tmp; + } + } +} + +/* add startok and endok to string at lp if non-zero. + * return number of characters added. + */ +static int +get_okdates (char *lp, float *sp, float *ep) +{ + char *lp0 = lp; + + if (*sp || *ep) { + *lp++ = '|'; + if (*sp) + lp += fs_date (lp, PREF_MDY, *sp); + if (*ep) { + *lp++ = '|'; + lp += fs_date (lp, PREF_MDY, *ep); + } + } + + return (lp - lp0); +} + +static void +write_f (Obj *op, char lp[]) +{ + double tmp; + + lp += sprintf (lp, "%s,f", op->o_name); + if (op->f_class) + lp += sprintf (lp, "|%c", op->f_class); + if (op->f_spect[0]) + lp += sprintf (lp, "|%.*s", (int)sizeof(op->f_spect), op->f_spect); + *lp++ = ','; + lp += fs_sexa (lp, radhr(op->f_RA), 2, 36000); + if (op->f_pmRA) + lp += sprintf (lp, "|%.6g",cos(op->f_dec)*op->f_pmRA/1.327e-11); + *lp++ = ','; + lp += fs_sexa (lp, raddeg(op->f_dec), 3, 3600); + if (op->f_pmdec) + lp += sprintf (lp, "|%.6g", op->f_pmdec/1.327e-11); + lp += sprintf (lp, ",%.2f", get_mag(op)); + mjd_year (op->f_epoch, &tmp); + lp += sprintf (lp, ",%.6g", tmp); /* %.7g gives 2000.001 */ + lp += sprintf (lp, ",%.7g", op->f_size); + if (op->f_size && (op->f_ratio || op->f_pa)) + lp += sprintf (lp,"|%g|%g", op->f_size*get_ratio(op), + raddeg(get_pa(op))); +} + +static void +write_e (Obj *op, char lp[]) +{ + lp += sprintf (lp, "%s,e", op->o_name); + lp += sprintf (lp, ",%.7g", op->e_inc); + lp += sprintf (lp, ",%.7g", op->e_Om); + lp += sprintf (lp, ",%.7g", op->e_om); + lp += sprintf (lp, ",%.7g", op->e_a); + lp += sprintf (lp, ",%.7g", 0.0); /* retired op->e_n */ + lp += sprintf (lp, ",%.7g", op->e_e); + lp += sprintf (lp, ",%.7g", op->e_M); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->e_cepoch); + lp += get_okdates (lp, &op->e_startok, &op->e_endok); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->e_epoch); + if (op->e_mag.whichm == MAG_gk) + lp += sprintf (lp, ",g%.7g", op->e_mag.m1); + else if (op->e_mag.whichm == MAG_HG) + lp += sprintf (lp, ",H%.7g", op->e_mag.m1); + else + lp += sprintf (lp, ",%.7g", op->e_mag.m1); + lp += sprintf (lp, ",%.7g", op->e_mag.m2); + lp += sprintf (lp, ",%.7g", op->e_size); +} + +static void +write_h (Obj *op, char lp[]) +{ + lp += sprintf (lp, "%s,h", op->o_name); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->h_ep); + lp += get_okdates (lp, &op->h_startok, &op->h_endok); + lp += sprintf (lp, ",%.7g", op->h_inc); + lp += sprintf (lp, ",%.7g", op->h_Om); + lp += sprintf (lp, ",%.7g", op->h_om); + lp += sprintf (lp, ",%.7g", op->h_e); + lp += sprintf (lp, ",%.7g", op->h_qp); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->h_epoch); + lp += sprintf (lp, ",%.7g", op->h_g); + lp += sprintf (lp, ",%.7g", op->h_k); + lp += sprintf (lp, ",%.7g", op->h_size); +} + +static void +write_p (Obj *op, char lp[]) +{ + lp += sprintf (lp, "%s,p", op->o_name); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->p_ep); + lp += get_okdates (lp, &op->p_startok, &op->p_endok); + lp += sprintf (lp, ",%.7g", op->p_inc); + lp += sprintf (lp, ",%.7g", op->p_om); + lp += sprintf (lp, ",%.7g", op->p_qp); + lp += sprintf (lp, ",%.7g", op->p_Om); + *lp++ = ','; + lp += fs_date (lp, PREF_MDY, op->p_epoch); + lp += sprintf (lp, ",%.7g", op->p_g); + lp += sprintf (lp, ",%.7g", op->p_k); + lp += sprintf (lp, ",%.7g", op->p_size); +} + +static void +write_E (Obj *op, char lp[]) +{ + double d; + int m, y; + + lp += sprintf (lp, "%s,E", op->o_name); + *lp++ = ','; + mjd_cal (op->es_epoch, &m, &d, &y); /* need more day prec than fs_date*/ + lp += sprintf (lp, "%d/%.12g/%d", m, d, y); + lp += get_okdates (lp, &op->es_startok, &op->es_endok); + lp += sprintf (lp, ",%.8g", op->es_inc); + lp += sprintf (lp, ",%.8g", op->es_raan); + lp += sprintf (lp, ",%.8g", op->es_e); + lp += sprintf (lp, ",%.8g", op->es_ap); + lp += sprintf (lp, ",%.8g", op->es_M); + lp += sprintf (lp, ",%.12g", op->es_n); /* double */ + lp += sprintf (lp, ",%.8g", op->es_decay); + lp += sprintf (lp, ",%d", op->es_orbit); + lp += sprintf (lp, ",%.8g", op->es_drag); +} + +static void +write_B (Obj *op, char lp[]) +{ + double tmp; + + lp += sprintf (lp, "%s,B", op->o_name); + if (op->f_class) + lp += sprintf (lp, "|%c", op->f_class); + if (op->f_spect[0]) + lp += sprintf (lp, "|%.*s", (int)sizeof(op->f_spect), op->f_spect); + if (op->b_2spect[0]) + lp += sprintf (lp, "|%.*s", (int)sizeof(op->b_2spect),op->b_2spect); + *lp++ = ','; + lp += fs_sexa (lp, radhr(op->f_RA), 2, 36000); + if (op->f_pmRA) + lp += sprintf (lp, "|%.6g",cos(op->f_dec)*op->f_pmRA/1.327e-11); + *lp++ = ','; + lp += fs_sexa (lp, raddeg(op->f_dec), 3, 3600); + if (op->f_pmdec) + lp += sprintf (lp, "|%.6g", op->f_pmdec/1.327e-11); + lp += sprintf (lp, ",%.2f", get_mag(op)); + lp += sprintf (lp, "|%.2f", op->b_2mag/MAGSCALE); + mjd_year (op->f_epoch, &tmp); + lp += sprintf (lp, ",%.6g", tmp); /* %.7g gives 2000.001 */ + if (op->b_nbp == 0) { + lp += sprintf (lp, ",%.6g", op->b_bo.bo_a); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_i); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_O); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_e); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_T); + lp += sprintf (lp, "|%.6g", op->b_bo.bo_o); + lp += sprintf (lp, "|%.6gy", op->b_bo.bo_P); + } else { + int i; + + for (i = 0; i < op->b_nbp; i++) { + BinPos *bp = &op->b_bp[i]; + lp += sprintf (lp, "%c%.6g", i==0?',':'|', bp->bp_ep); + lp += sprintf (lp, "|%.6g", bp->bp_sep); + lp += sprintf (lp, "|%.6g", raddeg(bp->bp_pa)); + } + } +} + +static void +write_P (Obj *op, char lp[]) +{ + + lp += sprintf (lp, "%s,P", op->o_name); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: dbfmt.c,v $ $Date: 2009/10/09 21:28:11 $ $Revision: 1.45 $ $Name: $"}; diff --git a/libastro/deep.c b/libastro/deep.c new file mode 100644 index 0000000..fcb13f5 --- /dev/null +++ b/libastro/deep.c @@ -0,0 +1,790 @@ +#include +#include + +#include "deepconst.h" +#include "satspec.h" + +/* * DEEP SPACE 31 OCT 80 */ +/* SUBROUTINE DEEP */ +/* COMMON/E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O, */ +/* 1 XNDD6O,BSTAR,X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 */ +/* COMMON/C1/CK2,CK4,E6A,QOMS2T,S,TOTHRD, */ +/* 1 XJ3,XKE,XKMPER,XMNPDA,AE */ +/* COMMON/C2/DE2RA,PI,PIO2,TWOPI,X3PIO2 */ +/* DOUBLE PRECISION EPOCH, DS50 */ +/* DOUBLE PRECISION */ +/* * DAY,PREEP,XNODCE,ATIME,DELT,SAVTSN,STEP2,STEPN,STEPP */ +/* DATA ZNS, C1SS, ZES/ */ +/* A 1.19459E-5, 2.9864797E-6, .01675/ */ +/* DATA ZNL, C1L, ZEL/ */ +/* A 1.5835218E-4, 4.7968065E-7, .05490/ */ +/* DATA ZCOSIS, ZSINIS, ZSINGS/ */ +/* A .91744867, .39785416, -.98088458/ */ +/* DATA ZCOSGS, ZCOSHS, ZSINHS/ */ +/* A .1945905, 1.0, 0.0/ */ +/* DATA Q22,Q31,Q33/1.7891679E-6,2.1460748E-6,2.2123015E-7/ */ +/* DATA G22,G32/5.7686396,0.95240898/ */ +/* DATA G44,G52/1.8014998,1.0508330/ */ +/* DATA G54/4.4108898/ */ +/* DATA ROOT22,ROOT32/1.7891679E-6,3.7393792E-7/ */ +/* DATA ROOT44,ROOT52/7.3636953E-9,1.1428639E-7/ */ +/* DATA ROOT54/2.1765803E-9/ */ +/* DATA THDT/4.3752691E-3/ */ + +#define XMO (sat->elem->se_XMO) +#define XNODEO (sat->elem->se_XNODEO) +#define OMEGAO (sat->elem->se_OMEGAO) +#define EO (sat->elem->se_EO) +#define XINCL (sat->elem->se_XINCL) +#define XNO (sat->elem->se_XNO) +#define XNDT20 (sat->elem->se_XNDT20) +#define XNDD60 (sat->elem->se_XNDD60) +#define BSTAR (sat->elem->se_BSTAR) +#define EPOCH (sat->elem->se_EPOCH) + +#define ZNS (1.19459E-5) +#define C1SS (2.9864797E-6) +#define ZES (.01675) +#define ZNL (1.5835218E-4) +#define C1L (4.7968065E-7) +#define ZEL (.05490) +#define ZCOSIS (.91744867) +#define ZSINIS (.39785416) +#define ZSINGS (-.98088458) +#define ZCOSGS (.1945905) +#define ZCOSHS (1.0) +#define ZSINHS (0.0) + +#define Q22 (1.7891679E-6) +#define Q31 (2.1460748E-6) +#define Q33 (2.2123015E-7) +#define G22 (5.7686396) +#define G32 (0.95240898) +#define G44 (1.8014998) +#define G52 (1.0508330) +#define G54 (4.4108898) +#define ROOT22 (1.7891679E-6) +#define ROOT32 (3.7393792E-7) +#define ROOT44 (7.3636953E-9) +#define ROOT52 (1.1428639E-7) +#define ROOT54 (2.1765803E-9) +#define THDT (4.3752691E-3) + +#define IRESFL (sat->deep->deep_flags.IRESFL) +#define ISYNFL (sat->deep->deep_flags.ISYNFL) + +#define s_SINIQ (sat->deep->deep_s_SINIQ) +#define s_COSIQ (sat->deep->deep_s_COSIQ) +#define s_OMGDT (sat->deep->deep_s_OMGDT) +#define ATIME (sat->deep->deep_ATIME) +#define D2201 (sat->deep->deep_D2201) +#define D2211 (sat->deep->deep_D2211) +#define D3210 (sat->deep->deep_D3210) +#define D3222 (sat->deep->deep_D3222) +#define D4410 (sat->deep->deep_D4410) +#define D4422 (sat->deep->deep_D4422) +#define D5220 (sat->deep->deep_D5220) +#define D5232 (sat->deep->deep_D5232) +#define D5421 (sat->deep->deep_D5421) +#define D5433 (sat->deep->deep_D5433) +#define DEL1 (sat->deep->deep_DEL1) +#define DEL2 (sat->deep->deep_DEL2) +#define DEL3 (sat->deep->deep_DEL3) +#define E3 (sat->deep->deep_E3) +#define EE2 (sat->deep->deep_EE2) +#define FASX2 (sat->deep->deep_FASX2) +#define FASX4 (sat->deep->deep_FASX4) +#define FASX6 (sat->deep->deep_FASX6) +#define OMEGAQ (sat->deep->deep_OMEGAQ) +#define PE (sat->deep->deep_PE) +#define PINC (sat->deep->deep_PINC) +#define PL (sat->deep->deep_PL) +#define SAVTSN (sat->deep->deep_SAVTSN) +#define SE2 (sat->deep->deep_SE2) +#define SE3 (sat->deep->deep_SE3) +#define SGH2 (sat->deep->deep_SGH2) +#define SGH3 (sat->deep->deep_SGH3) +#define SGH4 (sat->deep->deep_SGH4) +#define SGHL (sat->deep->deep_SGHL) +#define SGHS (sat->deep->deep_SGHS) +#define SH2 (sat->deep->deep_SH2) +#define SH3 (sat->deep->deep_SH3) +#define SHS (sat->deep->deep_SHS) +#define SHL (sat->deep->deep_SHL) +#define SI2 (sat->deep->deep_SI2) +#define SI3 (sat->deep->deep_SI3) +#define SL2 (sat->deep->deep_SL2) +#define SL3 (sat->deep->deep_SL3) +#define SL4 (sat->deep->deep_SL4) +#define SSE (sat->deep->deep_SSE) +#define SSG (sat->deep->deep_SSG) +#define SSH (sat->deep->deep_SSH) +#define SSI (sat->deep->deep_SSI) +#define SSL (sat->deep->deep_SSL) +#define STEP2 (sat->deep->deep_STEP2) +#define STEPN (sat->deep->deep_STEPN) +#define STEPP (sat->deep->deep_STEPP) +#define THGR (sat->deep->deep_THGR) +#define XFACT (sat->deep->deep_XFACT) +#define XGH2 (sat->deep->deep_XGH2) +#define XGH3 (sat->deep->deep_XGH3) +#define XGH4 (sat->deep->deep_XGH4) +#define XH2 (sat->deep->deep_XH2) +#define XH3 (sat->deep->deep_XH3) +#define XI2 (sat->deep->deep_XI2) +#define XI3 (sat->deep->deep_XI3) +#define XL2 (sat->deep->deep_XL2) +#define XL3 (sat->deep->deep_XL3) +#define XL4 (sat->deep->deep_XL4) +#define XLAMO (sat->deep->deep_XLAMO) +#define XLI (sat->deep->deep_XLI) +#define XNI (sat->deep->deep_XNI) +#define XNQ (sat->deep->deep_XNQ) +#define XQNCL (sat->deep->deep_XQNCL) +#define ZMOL (sat->deep->deep_ZMOL) +#define ZMOS (sat->deep->deep_ZMOS) + +/* * ENTRANCE FOR DEEP SPACE INITIALIZATION */ + +/* ENTRY DPINIT(EQSQ,SINIQ,COSIQ,RTEQSQ,AO,COSQ2,SINOMO,COSOMO, */ +/* 1 BSQ,XLLDOT,OMGDT,XNODOT,XNODP) */ + +void +dpinit(SatData *sat, double EQSQ, double SINIQ, double COSIQ, + double RTEQSQ, double AO, double COSQ2, double SINOMO, + double COSOMO, double BSQ, double XLLDOT, double OMGDT, + double XNODOT, double XNODP) +{ + double A1, A10, A2, A3, A4, A5, A6, A7, A8, A9, AINV2, AQNV, BFACT, + C, CC, COSQ, CTEM, DAY, DS50, EOC, EQ, F220, F221, F311, F321, F322, + F330, F441, F442, F522, F523, F542, F543, G200, G201, G211, G300, + G310, G322, G410, G422, G520, G521, G532, G533, GAM, PREEP, S1, S2, + S3, S4, S5, S6, S7, SE, SGH, SH, SI, SINI2, SINQ, SL, STEM, TEMP, + TEMP1, X1, X2, X3, X4, X5, X6, X7, X8, XMAO, XNO2, XNODCE, XNOI, + XPIDOT, Z1, Z11, Z12, Z13, Z2, Z21, Z22, Z23, Z3, Z31, Z32, Z33, + ZCOSG, ZCOSGL, ZCOSH, ZCOSHL, ZCOSI, ZCOSIL, ZE, ZMO, ZN, ZSING, + ZSINGL, ZSINH, ZSINHL, ZSINI, ZSINIL, ZX, ZY; + + int c; +#if 0 + A1=A10=A2=A3=A4=A5=A6=A7=A8=A9=AINV2=AQNV=BFACT = signaling_nan(); + C=CC=COSQ=CTEM=DAY=DS50=EOC=EQ=F220=F221=F311=F321=F322 = signaling_nan(); + F330=F441=F442=F522=F523=F542=F543=G200=G201=G211=G300 = signaling_nan(); + G310=G322=G410=G422=G520=G521=G532=G533=GAM=PREEP=S1=S2 = signaling_nan(); + S3=S4=S5=S6=S7=SE=SGH=SH=SI=SINI2=SINQ=SL=STEM=TEMP = signaling_nan(); + TEMP1=X1=X2=X3=X4=X5=X6=X7=X8=XMAO=XNO2=XNODCE=XNOI = signaling_nan(); + XPIDOT=Z1=Z11=Z12=Z13=Z2=Z21=Z22=Z23=Z3=Z31=Z32=Z33 = signaling_nan(); + ZCOSG=ZCOSGL=ZCOSH=ZCOSHL=ZCOSI=ZCOSIL=ZE=ZMO=ZN=ZSING = signaling_nan(); + ZSINGL=ZSINH=ZSINHL=ZSINI=ZSINIL=ZX=ZY = signaling_nan(); +#endif + if(!sat->deep) + sat->deep = (struct deep_data *) malloc(sizeof(struct deep_data)); + else + return; + + /* init_deep(sat->deep); */ + PREEP = 0.0; + + ZCOSGL = ZCOSHL = ZCOSIL = ZSINGL = ZSINHL = ZSINIL = 0.0; + + /* Save some of the arguments, for use by dpsec() and dpper() */ + s_SINIQ = SINIQ; + s_COSIQ = COSIQ; + s_OMGDT = OMGDT; + + THGR = thetag(EPOCH, &DS50); + + EQ = EO; + XNQ = XNODP; + AQNV = 1.0/AO; + XQNCL = XINCL; + XMAO = XMO; + XPIDOT = OMGDT + XNODOT; + SINQ = sin(XNODEO); + COSQ = cos(XNODEO); + OMEGAQ = OMEGAO; + + /* INITIALIZE LUNAR SOLAR TERMS */ + + DAY = DS50 + 18261.5; + + if(DAY != PREEP) { + PREEP = DAY; + XNODCE = 4.5236020 - 9.2422029E-4 * DAY; + STEM = sin(XNODCE); + CTEM = cos(XNODCE); + ZCOSIL = .91375164 - .03568096 * CTEM; + ZSINIL = sqrt(1.0 - ZCOSIL * ZCOSIL); + ZSINHL = .089683511 * STEM / ZSINIL; + ZCOSHL = sqrt(1.0 - ZSINHL * ZSINHL); + C = 4.7199672 + .22997150 * DAY; + GAM = 5.8351514 + .0019443680 * DAY; + ZMOL = fmod(C-GAM, TWOPI); + ZX = .39785416 * STEM / ZSINIL; + ZY = ZCOSHL * CTEM + 0.91744867 * ZSINHL * STEM; + ZX = actan(ZX, ZY); + ZX = GAM + ZX - XNODCE; + ZCOSGL = cos(ZX); + ZSINGL = sin(ZX); + ZMOS = 6.2565837 + .017201977 * DAY; + ZMOS = fmod(ZMOS, TWOPI); + } + + /* DO SOLAR TERMS */ + + SAVTSN = 1.0E20; + ZCOSG = ZCOSGS; + ZSING = ZSINGS; + ZCOSI = ZCOSIS; + ZSINI = ZSINIS; + ZCOSH = COSQ; + ZSINH = SINQ; + CC = C1SS; + ZN = ZNS; + ZE = ZES; + ZMO = ZMOS; + XNOI = 1.0 / XNQ; + + for(c = 0; c < 2; c++) { + A1 = ZCOSG * ZCOSH + ZSING * ZCOSI * ZSINH; + A3 = -ZSING * ZCOSH + ZCOSG * ZCOSI * ZSINH; + A7 = -ZCOSG * ZSINH + ZSING * ZCOSI * ZCOSH; + A8 = ZSING * ZSINI; + A9 = ZSING * ZSINH + ZCOSG * ZCOSI * ZCOSH; + A10 = ZCOSG * ZSINI; + A2 = COSIQ * A7 + SINIQ * A8; + A4 = COSIQ * A9 + SINIQ * A10; + A5 = - SINIQ * A7 + COSIQ * A8; + A6 = - SINIQ * A9 + COSIQ * A10; + + X1 = A1 * COSOMO + A2 * SINOMO; + X2 = A3 * COSOMO + A4 * SINOMO; + X3 = - A1 * SINOMO + A2 * COSOMO; + X4 = - A3 * SINOMO + A4 * COSOMO; + X5 = A5 * SINOMO; + X6 = A6 * SINOMO; + X7 = A5 * COSOMO; + X8 = A6 * COSOMO; + + Z31 = 12.0 * X1 * X1 -3.0 * X3 * X3; + Z32 = 24.0 * X1 * X2 -6.0 * X3 * X4; + Z33 = 12.0 * X2 * X2 -3.0 * X4 * X4; + Z1 = 3.0 * (A1 * A1 + A2 * A2) + Z31 * EQSQ; + Z2 = 6.0 * (A1 * A3 + A2 * A4) + Z32 * EQSQ; + Z3 = 3.0 * (A3 * A3 + A4 * A4) + Z33 * EQSQ; + Z11 = -6.0 * A1 * A5 + EQSQ * (-24.0 * X1 * X7 - 6.0 * X3 * X5); + + Z12 = -6.0 * (A1 * A6 + A3 * A5) + + EQSQ * (-24.0 * (X2 * X7 + X1 * X8) - 6.0 * (X3 * X6 + X4 * X5)); + + Z13 = -6.0 * A3 * A6 + EQSQ * (-24.0 * X2 * X8 - 6.0 * X4 * X6); + Z21 = 6.0 * A2 * A5 + EQSQ * (24.0 * X1 * X5 - 6.0 * X3 * X7); + + Z22 = 6.0 * (A4 * A5 + A2 * A6) + + EQSQ * (24.0 * (X2 * X5 + X1 * X6) - 6.0 * (X4 * X7 + X3 * X8)); + + Z23 = 6.0 * A4 * A6 + EQSQ * (24.0 * X2 * X6 - 6.0 * X4 * X8); + Z1 = Z1 + Z1 + BSQ * Z31; + Z2 = Z2 + Z2 + BSQ * Z32; + Z3 = Z3 + Z3 + BSQ * Z33; + S3 = CC * XNOI; + S2 = -.5 * S3 / RTEQSQ; + S4 = S3 * RTEQSQ; + S1 = -15.0 * EQ * S4; + S5 = X1 * X3 + X2 * X4; + S6 = X2 * X3 + X1 * X4; + S7 = X2 * X4 - X1 * X3; + SE = S1 * ZN * S5; + SI = S2 * ZN * (Z11 + Z13); + SL = -ZN * S3 * (Z1 + Z3 - 14.0 - 6.0 * EQSQ); + SGH = S4 * ZN * (Z31 + Z33 - 6.0); + SH = -ZN * S2 * (Z21 + Z23); + + if(XQNCL < 5.2359877E-2) + SH = 0.0; + + EE2 = 2.0 * S1 * S6; + E3 = 2.0 * S1 * S7; + XI2 = 2.0 * S2 * Z12; + XI3 = 2.0 * S2 * (Z13 - Z11); + XL2 = -2.0 * S3 * Z2; + XL3 = -2.0 * S3 * (Z3 - Z1); + XL4 = -2.0 * S3 * (-21.0 - 9.0 * EQSQ) * ZE; + XGH2 = 2.0 * S4 * Z32; + XGH3 = 2.0 * S4 * (Z33 - Z31); + XGH4 = -18.0 * S4 * ZE; + XH2 = -2.0 * S2 * Z22; + XH3 = -2.0 * S2 * (Z23 - Z21); + + if(c == 0) { + /* DO LUNAR TERMS */ + SSE = SE; + SSI = SI; + SSL = SL; + SSH = SH / SINIQ; + SSG = SGH - COSIQ * SSH; + SE2 = EE2; + SI2 = XI2; + SL2 = XL2; + SGH2 = XGH2; + SH2 = XH2; + SE3 = E3; + SI3 = XI3; + SL3 = XL3; + SGH3 = XGH3; + SH3 = XH3; + SL4 = XL4; + SGH4 = XGH4; + + ZCOSG = ZCOSGL; + ZSING = ZSINGL; + ZCOSI = ZCOSIL; + ZSINI = ZSINIL; + ZCOSH = ZCOSHL * COSQ + ZSINHL * SINQ; + ZSINH = SINQ * ZCOSHL - COSQ * ZSINHL; + ZN = ZNL; + CC = C1L; + ZE = ZEL; + ZMO = ZMOL; + } + } + + SSE = SSE + SE; + SSI = SSI + SI; + SSL = SSL + SL; + SSG = SSG + SGH - COSIQ / SINIQ * SH; + SSH = SSH + SH / SINIQ; + + /* GEOPOTENTIAL RESONANCE INITIALIZATION FOR 12 HOUR ORBITS */ + + IRESFL = 0; + ISYNFL = 0; + + if(XNQ <= .0034906585 || XNQ >= .0052359877) { + + if(XNQ < (8.26E-3) || XNQ > (9.24E-3)) + return; + + if(EQ < 0.5) + return; + + IRESFL = 1; + EOC = EQ * EQSQ; + G201 = -.306 - (EQ - .64) * .440; + + if(EQ <= (.65)) { + G211 = 3.616 - 13.247 * EQ + 16.290 * EQSQ; + G310 = -19.302 + 117.390 * EQ - 228.419 * EQSQ + 156.591 * EOC; + G322 = -18.9068 + 109.7927 * EQ - 214.6334 * EQSQ + 146.5816 * EOC; + G410 = -41.122 + 242.694 * EQ - 471.094 * EQSQ + 313.953 * EOC; + G422 = -146.407 + 841.880 * EQ - 1629.014 * EQSQ + 1083.435 * EOC; + G520 = -532.114 + 3017.977 * EQ - 5740 * EQSQ + 3708.276 * EOC; + } else { + G211 = -72.099 + 331.819 * EQ - 508.738 * EQSQ + 266.724 * EOC; + G310 = -346.844 + 1582.851 * EQ - 2415.925 * EQSQ + 1246.113 * EOC; + G322 = -342.585 + 1554.908 * EQ - 2366.899 * EQSQ + 1215.972 * EOC; + G410 = -1052.797 + 4758.686 * EQ - 7193.992 * EQSQ + + 3651.957 * EOC; + G422 = -3581.69 + 16178.11 * EQ - 24462.77 * EQSQ + 12422.52 * EOC; + + if(EQ > (.715)) + G520 = -5149.66 + 29936.92 * EQ - 54087.36 * EQSQ + + 31324.56 * EOC; + + G520 = 1464.74 - 4664.75 * EQ + 3763.64 * EQSQ; + } + + if(EQ < (.7)) { + G533 = -919.2277 + 4988.61 * EQ - 9064.77 * EQSQ + 5542.21 * EOC; + + G521 = -822.71072 + 4568.6173 * EQ - 8491.4146 * EQSQ + + 5337.524 * EOC; + + G532 = -853.666 + 4690.25 * EQ - 8624.77 * EQSQ + 5341.4 * EOC; + } else { + G533 = -37995.78 + 161616.52 * EQ - 229838.2 * EQSQ + + 109377.94 * EOC; + + G521 = -51752.104 + 218913.95 * EQ - 309468.16 * EQSQ + + 146349.42 * EOC; + + G532 = -40023.88 + 170470.89 * EQ - 242699.48 * EQSQ + + 115605.82 * EOC; + } + + SINI2 = SINIQ * SINIQ; + F220 = .75 * (1.0 + 2.0 * COSIQ + COSQ2); + F221 = 1.5 * SINI2; + F321 = 1.875 * SINIQ * (1.0 - 2.0 * COSIQ - 3.0 * COSQ2); + F322 = -1.875 * SINIQ * (1.0 + 2.0 * COSIQ - 3.0 * COSQ2); + F441 = 35.0 * SINI2 * F220; + F442 = 39.3750 * SINI2 * SINI2; + + F522 = 9.84375 * SINIQ * (SINI2 * (1.0 - 2.0 * COSIQ - 5.0 * COSQ2) + + .33333333 * (-2.0 + 4.0 * COSIQ + + 6.0 * COSQ2)); + + F523 = SINIQ * (4.92187512 * SINI2 * (-2.0 - 4.0 * COSIQ + + 10.0 * COSQ2) + + 6.56250012 * (1.0 + + 2.0 * COSIQ - + 3.0 * COSQ2)); + + F542 = 29.53125 * SINIQ * (2.0 - 8.0 * COSIQ + + COSQ2 * (-12.0 + 8.0 * COSIQ + + 10.0 * COSQ2)); + + F543 = 29.53125 * SINIQ * (-2.0 - 8.0 * COSIQ + + COSQ2 * (12.0 + 8.0 * COSIQ - + 10.0 * COSQ2)); + + XNO2 = XNQ * XNQ; + AINV2 = AQNV * AQNV; + TEMP1 = 3.0 * XNO2 * AINV2; + TEMP = TEMP1 * ROOT22; + D2201 = TEMP * F220 * G201; + D2211 = TEMP * F221 * G211; + TEMP1 = TEMP1 * AQNV; + TEMP = TEMP1 * ROOT32; + D3210 = TEMP * F321 * G310; + D3222 = TEMP * F322 * G322; + TEMP1 = TEMP1 * AQNV; + TEMP = 2.0 * TEMP1 * ROOT44; + D4410 = TEMP * F441 * G410; + D4422 = TEMP * F442 * G422; + TEMP1 = TEMP1 * AQNV; + TEMP = TEMP1 * ROOT52; + D5220 = TEMP * F522 * G520; + D5232 = TEMP * F523 * G532; + TEMP = 2.0 * TEMP1 * ROOT54; + D5421 = TEMP * F542* G521; + D5433 = TEMP * F543* G533; + XLAMO = XMAO + XNODEO + XNODEO - THGR - THGR; + BFACT = XLLDOT + XNODOT + XNODOT - THDT - THDT; + BFACT = BFACT + SSL + SSH + SSH; + } else { + /* SYNCHRONOUS RESONANCE TERMS INITIALIZATION */ + + IRESFL = 1; + ISYNFL = 1; + G200 = 1.0 + EQSQ * (-2.5 + .8125 * EQSQ); + G310 = 1.0 + 2.0 * EQSQ; + G300 = 1.0 + EQSQ * (-6.0 + 6.60937 * EQSQ); + F220 = .75 * (1.0 + COSIQ) * (1.0 + COSIQ); + F311 = .9375 * SINIQ * SINIQ * (1.0 + 3.0 * COSIQ) - + .75 * (1.0 + COSIQ); + F330 = 1.0 + COSIQ; + F330 = 1.875 * F330 * F330 * F330; + DEL1 = 3.0 * XNQ * XNQ * AQNV * AQNV; + DEL2 = 2.0 * DEL1 * F220 * G200 * Q22; + DEL3 = 3.0 * DEL1 * F330 * G300 * Q33 * AQNV; + DEL1 = DEL1 * F311 * G310 * Q31 * AQNV; + FASX2 = .13130908; + FASX4 = 2.8843198; + FASX6 = .37448087; + XLAMO = XMAO + XNODEO + OMEGAO - THGR; + BFACT = XLLDOT + XPIDOT - THDT; + BFACT = BFACT + SSL + SSG + SSH; + + } + + XFACT = BFACT - XNQ; + + XLI = XLAMO; + XNI = XNQ; + ATIME = 0.0; + STEPP = 720.0; + STEPN = -720.0; + STEP2 = 259200.0; +} + +/* ENTRANCE FOR DEEP SPACE SECULAR EFFECTS */ + +void +dpsec(SatData *sat, double *XLL, double *OMGASM, double *XNODES, + double *EM, double *XINC, double *XN, double T) +{ + double DELT, XL, TEMP, XOMI, X2OMI, X2LI, XLDOT; + double XNDOT, XNDDT, FT; + int state, iret, iretn, done; + + DELT = XLDOT = XNDOT = XNDDT = FT = 0.0; + iret = iretn = 0; + +#if 0 + DELT = XL = TEMP = XOMI = X2OMI = X2LI = XLDOT = signaling_nan(); + XNDOT = XNDDT = FT = signaling_nan(); +#endif + + *XLL = *XLL + SSL * T; + *OMGASM = *OMGASM + SSG * T; + *XNODES = *XNODES + SSH * T; + *EM = EO + SSE * T; + *XINC = XINCL + SSI * T; + + if(*XINC < 0.0) { + *XINC = -*XINC; + *XNODES = *XNODES + PI; + *OMGASM = *OMGASM - PI; + } + + if(IRESFL == 0) + return; + + state = 1; + done = 0; + while(!done) { + /* printf("state = %d\n", state); */ + switch(state) { + case 1: + /* + * Chunk #1 + */ + if(ATIME == 0.0 || (T >= 0.0 && ATIME < 0.0) || + (T < 0.0 && ATIME >= 0.0)) { + /* + * Chunk #10 + */ + if(T >= 0.0) + DELT = STEPP; + else + DELT = STEPN; + + ATIME = 0.0; + XNI = XNQ; + XLI = XLAMO; + state = 4; + break; + } + + /* Fall through */ + case 2: + /* + * Chunk #2 + */ + if(fabs(T) < fabs(ATIME)) { + /* + * Chunk #2 + */ + if(T >= 0.0) + DELT = STEPN; + else + DELT = STEPP; + + iret = 1; + state = 8; + break; + } + + /* + * Chunk #3 + */ + if(T > 0.0) + DELT = STEPP; + else + DELT = STEPN; + + /* fall through */ + case 4: + /* + * Chunk #4 + */ + if(fabs(T - ATIME) >= STEPP) { + iret = 4; + state = 8; + } else { + /* + * Chunk #5 + */ + FT = T - ATIME; + iretn = 6; + state = 7; + } + + break; + + case 6: + /* + * Chunk #6 + */ + *XN = XNI + XNDOT * FT + XNDDT * FT * FT * 0.5; + XL = XLI + XLDOT * FT + XNDOT * FT * FT * 0.5; + TEMP = -*XNODES + THGR + T * THDT; + + if(ISYNFL == 0) + *XLL = XL + 2.0 * TEMP; + else + *XLL = XL - *OMGASM + TEMP; + + done = 1; + break; + + case 7: + /* DOT TERMS CALCULATED */ + + /* + * Chunk #7 + */ + if(ISYNFL != 0) { + XNDOT = + DEL1 * sin(XLI - FASX2) + + DEL2 * sin(2.0 * (XLI - FASX4)) + + DEL3 * sin(3.0 * (XLI - FASX6)); + + XNDDT = + DEL1 * cos(XLI - FASX2) + + 2.0 * DEL2 * cos(2.0 * (XLI - FASX4)) + + 3.0 * DEL3 * cos(3.0 * (XLI - FASX6)); + } else { + XOMI = OMEGAQ + s_OMGDT * ATIME; + X2OMI = XOMI + XOMI; + X2LI = XLI + XLI; + XNDOT = D2201 * sin(X2OMI + XLI - G22) + + D2211 * sin(XLI - G22) + + D3210 * sin(XOMI + XLI - G32) + + D3222 * sin(- XOMI + XLI - G32) + + D4410 * sin(X2OMI + X2LI - G44) + + D4422 * sin(X2LI - G44) + + D5220 * sin(XOMI + XLI - G52) + + D5232 * sin(- XOMI + XLI - G52) + + D5421 * sin(XOMI + X2LI - G54) + + D5433 * sin(- XOMI + X2LI - G54); + + XNDDT = D2201 * cos(X2OMI + XLI - G22) + + D2211 * cos(XLI - G22) + + D3210 * cos(XOMI + XLI - G32) + + D3222 * cos(- XOMI + XLI - G32) + + D5220 * cos(XOMI + XLI - G52) + + D5232 * cos(- XOMI + XLI - G52) + + 2.*(D4410 * cos(X2OMI + X2LI - G44) + + D4422 * cos(X2LI - G44) + + D5421 * cos(XOMI + X2LI - G54) + + D5433 * cos(- XOMI + X2LI - G54)); + } + + XLDOT = XNI + XFACT; + XNDDT = XNDDT * XLDOT; + + state = iretn; + break; + + case 8: + /* + * Chunk #8 + */ + + /* INTEGRATOR */ + iretn = 9; + state = 7; + break; + + case 9: + XLI = XLI + XLDOT * DELT + XNDOT * STEP2; + XNI = XNI + XNDOT * DELT + XNDDT * STEP2; + ATIME = ATIME + DELT; + + state = iret; + break; + } + } +} + +/* local */ + +/* C */ +/* C ENTRANCES FOR LUNAR-SOLAR PERIODICS */ +/* C */ +/* C */ +/* ENTRY DPPER(EM,XINC,OMGASM,XNODES,XLL) */ +void +dpper(SatData *sat, double *EM, double *XINC, double *OMGASM, + double *XNODES, double *XLL, double T) +{ + double SINIS, COSIS, ZM, ZF, SINZF, F2, F3, SES, SIS, SLS, SEL, SIL, SLL, PGH, PH, SINOK, COSOK, ALFDP, BETDP, DALF, DBET, XLS, DLS; + +#if 0 + SINIS = COSIS = ZM = ZF = SINZF = F2 = F3 = SES = SIS = signaling_nan(); + SLS = SEL = SIL = SLL = PGH = signaling_nan(); + PH = SINOK = COSOK = ALFDP = BETDP = DALF = DBET = XLS = signaling_nan(); + DLS = signaling_nan();; +#endif + SINIS = sin(*XINC); + COSIS = cos(*XINC); + + +/* IF (DABS(SAVTSN-T).LT.(30.D0)) GO TO 210 */ + if(fabs(SAVTSN - T) >= (30.0)) { + SAVTSN = T; + ZM = ZMOS + ZNS * T; +/* 205 ZF = ZM + 2.0 * ZES * sin(ZM) */ + ZF = ZM + 2.0 * ZES * sin(ZM); + SINZF = sin(ZF); + F2 = .5 * SINZF * SINZF - .25; + F3 = -.5 * SINZF * cos(ZF); + SES = SE2 * F2 + SE3 * F3; + SIS = SI2 * F2 + SI3 * F3; + SLS = SL2 * F2 + SL3 * F3 + SL4 * SINZF; + SGHS = SGH2 * F2 + SGH3 * F3 + SGH4 * SINZF; + SHS = SH2 * F2 + SH3 * F3; + ZM = ZMOL + ZNL * T; + ZF = ZM + 2.0 * ZEL * sin(ZM); + SINZF = sin(ZF); + F2 = .5 * SINZF * SINZF -.25; + F3 = -.5 * SINZF * cos(ZF); + SEL = EE2 * F2 + E3 * F3; + SIL = XI2 * F2 + XI3 * F3; + SLL = XL2 * F2 + XL3 * F3 + XL4 * SINZF; + SGHL = XGH2 * F2 + XGH3 * F3 + XGH4 * SINZF; + SHL = XH2 * F2 + XH3 * F3; + PE = SES + SEL; + PINC = SIS + SIL; + PL = SLS + SLL; + } + +/* 210 PGH=SGHS+SGHL */ + PGH = SGHS + SGHL; + PH = SHS + SHL; + *XINC = *XINC + PINC; + *EM = *EM + PE; + +/* IF(XQNCL.LT.(.2)) GO TO 220 */ + if(XQNCL >= (.2)) { +/* GO TO 218 */ +/* C */ +/* C APPLY PERIODICS DIRECTLY */ +/* C */ +/* 218 PH=PH/SINIQ */ + PH = PH / s_SINIQ; + PGH = PGH - s_COSIQ * PH; + *OMGASM = *OMGASM + PGH; + *XNODES = *XNODES + PH; + *XLL = *XLL + PL; +/* GO TO 230 */ + } else { +/* C */ +/* C APPLY PERIODICS WITH LYDDANE MODIFICATION */ +/* C */ +/* 220 SINOK=sin(XNODES) */ + SINOK = sin(*XNODES); + COSOK = cos(*XNODES); + ALFDP = SINIS * SINOK; + BETDP = SINIS * COSOK; + DALF = PH * COSOK + PINC * COSIS * SINOK; + DBET = -PH * SINOK + PINC * COSIS * COSOK; + ALFDP = ALFDP + DALF; + BETDP = BETDP + DBET; + XLS = *XLL + *OMGASM + COSIS * *XNODES; + DLS = PL + PGH - PINC * *XNODES * SINIS; + XLS = XLS + DLS; + *XNODES = actan(ALFDP, BETDP); + *XLL = *XLL + PL; + *OMGASM = XLS - *XLL - cos(*XINC) * *XNODES; + } +/* 230 CONTINUE */ +/* RETURN */ + +} +/* END */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: deep.c,v $ $Date: 2000/09/25 19:43:03 $ $Revision: 1.2 $ $Name: $"}; diff --git a/libastro/deepconst.h b/libastro/deepconst.h new file mode 100644 index 0000000..8c71567 --- /dev/null +++ b/libastro/deepconst.h @@ -0,0 +1,34 @@ +#ifndef _CONST_H +#define _CONST_H + +/* $Id: deepconst.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + + +#define GE (3.986005E14) + +#define PI (3.1415926535897932385) + +#define XKE (7.43669161E-2) +#define CK2 (5.413080E-4) +#define CK4 (6.2098875E-7) +#define E6A (10E6) +#define QOMS2T (1.88027916E-9) +#define S (1.01222928) +#define TOTHRD (2.0/3.0) /* 6.6666666666666666667E-1 */ +#define XJ3 (-2.53881E-6) +/* #define XKE KE */ +#define XKMPER (6378.135) +#define XMNPDA (1440.0) +#define AE (1.0) +#define DE2RA (1.7453292519943295769E-2) +#define PIO2 (1.57079632679489661925) /* PI/2 */ +#define TWOPI (6.2831853071795864770) +#define X3PIO2 (4.7123889803846898578) /* 3*PI/2 */ + +#define RHO (0.15696590235) + +#endif /* _CONST_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: deepconst.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libastro/deltat.c b/libastro/deltat.c new file mode 100644 index 0000000..fb92df7 --- /dev/null +++ b/libastro/deltat.c @@ -0,0 +1,334 @@ +/* DeltaT = Ephemeris Time - Universal Time + * + * Adapted 2011/4/14 from Stephen Moshier , + * cosmetic changes only. + * + * Compile as follows to create stand-alone test program: + * cc -DTEST_MAIN deltat.c libastro.a + * + * Tabulated values of deltaT, in hundredths of a second, are + * from The Astronomical Almanac and current IERS reports. + * A table of values for the pre-telescopic period was taken from + * Morrison and Stephenson (2004). The overall tabulated range is + * -1000.0 through 2011.0. Values at intermediate times are interpolated + * from the tables. + * + * For dates earlier and later than the tabulated range, the program + * calculates a polynomial extrapolation formula. + * + * Updated deltaT predictions can be obtained from this network archive, + * http://maia.usno.navy.mil + * then appended to the dt[] table and update TABEND. + * + * Input is XEphem's MJD, output is ET-UT in seconds. + * + * + * References: + * + * Morrison, L. V., and F. R. Stephenson, Historical values of the Earth's + * clock error deltat T and the calculation of eclipses. Journal for the + * History of Astronomy 35, 327-336 (2004) + * + * Stephenson, F. R., and L. V. Morrison, "Long-term changes + * in the rotation of the Earth: 700 B.C. to A.D. 1980," + * Philosophical Transactions of the Royal Society of London + * Series A 313, 47-70 (1984) + * + * Chapront-Touze, Michelle, and Jean Chapront, _Lunar Tables + * and Programs from 4000 B.C. to A.D. 8000_, Willmann-Bell 1991 + * + * Stephenson, F. R., and M. A. Houlden, _Atlas of Historical + * Eclipse Maps_, Cambridge U. Press (1986) + * + */ + +#include + +#include "astro.h" + +#define TABSTART 1620 +#define TABEND 2011 +#define TABSIZ (TABEND - TABSTART + 1) + +/* Morrison and Stephenson (2004) + * This table covers -1000 through 1700 in 100-year steps. + * Values are in whole seconds. + * Estimated standard error at -1000 is 640 seconds; at 1600, 20 seconds. + * The first value in the table has been adjusted 28 sec for + * continuity with their long-term quadratic extrapolation formula. + * The last value in this table agrees with the AA table at 1700, + * so there is no discontinuity at either endpoint. + */ +#define MS_SIZ 28 +short m_s[MS_SIZ] = { + /* -1000 to -100 */ + 25428, 23700, 22000, 21000, 19040, 17190, 15530, 14080, 12790, 11640, + + /* 0 to 900 */ + 10580, 9600, 8640, 7680, 6700, 5710, 4740, 3810, 2960, 2200, + + /* 1000 to 1700 */ + 1570, 1090, 740, 490, 320, 200, 120, 9, +}; + + +/* Entries prior to 1955 in the following table are from + * the 1984 Astronomical Almanac and assume ndot = -26.0. + * For dates prior to 1700, the above table is used instead of this one. + */ +short dt[TABSIZ] = { + /* 1620.0 thru 1659.0 */ + 12400, 11900, 11500, 11000, 10600, 10200, 9800, 9500, 9100, 8800, + 8500, 8200, 7900, 7700, 7400, 7200, 7000, 6700, 6500, 6300, + 6200, 6000, 5800, 5700, 5500, 5400, 5300, 5100, 5000, 4900, + 4800, 4700, 4600, 4500, 4400, 4300, 4200, 4100, 4000, 3800, + + /* 1660.0 thru 1699.0 */ + 3700, 3600, 3500, 3400, 3300, 3200, 3100, 3000, 2800, 2700, + 2600, 2500, 2400, 2300, 2200, 2100, 2000, 1900, 1800, 1700, + 1600, 1500, 1400, 1400, 1300, 1200, 1200, 1100, 1100, 1000, + 1000, 1000, 900, 900, 900, 900, 900, 900, 900, 900, + + /* 1700.0 thru 1739.0 */ + 900, 900, 900, 900, 900, 900, 900, 900, 1000, 1000, + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1200, 1200, 1200, 1200, 1200, 1200, + + /* 1740.0 thru 1779.0 */ + 1200, 1200, 1200, 1200, 1300, 1300, 1300, 1300, 1300, 1300, + 1300, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, 1700, 1700, 1700, 1700, 1700, + + /* 1780.0 thru 1799.0 */ + 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, + 1700, 1700, 1600, 1600, 1600, 1600, 1500, 1500, 1400, 1400, + + /* 1800.0 thru 1819.0 */ + 1370, 1340, 1310, 1290, 1270, 1260, 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1240, 1230, 1220, + + /* 1820.0 thru 1859.0 */ + 1200, 1170, 1140, 1110, 1060, 1020, 960, 910, 860, 800, + 750, 700, 660, 630, 600, 580, 570, 560, 560, 560, + 570, 580, 590, 610, 620, 630, 650, 660, 680, 690, + 710, 720, 730, 740, 750, 760, 770, 770, 780, 780, + + /* 1860.0 thru 1899.0 */ + 788, 782, 754, 697, 640, 602, 541, 410, 292, 182, + 161, 10, -102, -128, -269, -324, -364, -454, -471, -511, + -540, -542, -520, -546, -546, -579, -563, -564, -580, -566, + -587, -601, -619, -664, -644, -647, -609, -576, -466, -374, + + /* 1900.0 thru 1939.0 */ + -272, -154, -2, 124, 264, 386, 537, 614, 775, 913, + 1046, 1153, 1336, 1465, 1601, 1720, 1824, 1906, 2025, 2095, + 2116, 2225, 2241, 2303, 2349, 2362, 2386, 2449, 2434, 2408, + 2402, 2400, 2387, 2395, 2386, 2393, 2373, 2392, 2396, 2402, + + /* 1940.0 thru 1979.0 */ + 2433, 2483, 2530, 2570, 2624, 2677, 2728, 2778, 2825, 2871, + 2915, 2957, 2997, 3036, 3072, 3107, 3135, 3168, 3218, 3268, + 3315, 3359, 3400, 3447, 3503, 3573, 3654, 3743, 3829, 3920, + 4018, 4117, 4223, 4337, 4449, 4548, 4646, 4752, 4853, 4959, + + /* 1980.0 thru 2011.0 */ + 5054, 5138, 5217, 5296, 5379, 5434, 5487, 5532, 5582, 5630, + 5686, 5757, 5831, 5912, 5998, 6078, 6163, 6230, 6297, 6347, + 6383, 6409, 6430, 6447, 6457, 6469, 6485, 6515, 6546, 6578, + 6607, 6632, +}; + + +/* Given MJD return DeltaT = ET - UT1 in seconds. Describes the irregularities + * of the Earth rotation rate in the ET time scale. + */ +double +deltat(double mj) +{ + static double ans, lastmj; + double Y, p, B; + int d[6]; + int i, iy, k; + + if (mj == lastmj) + return (ans); + lastmj = mj; + + mjd_year (mj, &Y); + + if( Y > TABEND ) { + /* Extrapolate future values beyond the lookup table. */ + if (Y > (TABEND + 100.0)) { + /* Morrison & Stephenson (2004) long-term curve fit. */ + B = 0.01 * (Y - 1820.0); + ans = 32.0 * B * B - 20.0; + + } else { + + double a, b, c, d, m0, m1; + + /* Cubic interpolation between last tabulated value + * and long-term curve evaluated at 100 years later. + */ + + /* Last tabulated delta T value. */ + a = 0.01 * dt[TABSIZ-1]; + /* Approximate slope in past 10 years. */ + b = 0.001 * (dt[TABSIZ-1] - dt[TABSIZ - 11]); + + /* Long-term curve 100 years hence. */ + B = 0.01 * (TABEND + 100.0 - 1820.0); + m0 = 32.0 * B*B - 20.0; + /* Its slope. */ + m1 = 0.64 * B; + + /* Solve for remaining coefficients of an interpolation polynomial + * that agrees in value and slope at both ends of the 100-year + * interval. + */ + d = 2.0e-6 * (50.0 * (m1 + b) - m0 + a); + c = 1.0e-4 * (m0 - a - 100.0 * b - 1.0e6 * d); + + /* Note, the polynomial coefficients do not depend on Y. + * A given tabulation and long-term formula + * determine the polynomial. + * Thus, for the IERS table ending at 2011.0, the coefficients are + * a = 66.32 + * b = 0.223 + * c = 0.03231376 + * d = -0.0001607784 + */ + + /* Compute polynomial value at desired time. */ + p = Y - TABEND; + ans = a + p * (b + p * (c + p * d)); + } + + return (ans); + } + + + /* Use Morrison and Stephenson (2004) prior to the year 1700. */ + if( Y < 1700.0 ) { + if (Y <= -1000.0) { + /* Morrison and Stephenson long-term fit. */ + B = 0.01 * (Y - 1820.0); + ans = 32.0 * B * B - 20.0; + + } else { + + /* Morrison and Stephenson recommend linear interpolation + * between tabulations. + */ + iy = Y; + iy = (iy + 1000) / 100; /* Integer index into the table. */ + B = -1000 + 100 * iy; /* Starting year of tabulated interval. */ + p = m_s[iy]; + ans = p + 0.01 * (Y - B) * (m_s[iy + 1] - p); + } + + return (ans); + } + + /* Besselian interpolation between tabulated values + * in the telescopic era. + * See AA page K11. + */ + + /* Index into the table. */ + p = floor(Y); + iy = (int) (p - TABSTART); + /* Zeroth order estimate is value at start of year */ + ans = dt[iy]; + k = iy + 1; + if( k >= TABSIZ ) + goto done; /* No data, can't go on. */ + + /* The fraction of tabulation interval */ + p = Y - p; + + /* First order interpolated value */ + ans += p*(dt[k] - dt[iy]); + if( (iy-1 < 0) || (iy+2 >= TABSIZ) ) + goto done; /* can't do second differences */ + + /* Make table of first differences */ + k = iy - 2; + for (i=0; i<5; i++) { + if( (k < 0) || (k+1 >= TABSIZ) ) + d[i] = 0; + else + d[i] = dt[k+1] - dt[k]; + k += 1; + } + + /* Compute second differences */ + for( i=0; i<4; i++ ) + d[i] = d[i+1] - d[i]; + B = 0.25*p*(p-1.0); + ans += B*(d[1] + d[2]); + if (iy+2 >= TABSIZ) + goto done; + + /* Compute third differences */ + for( i=0; i<3; i++ ) + d[i] = d[i+1] - d[i]; + B = 2.0*B/3.0; + ans += (p-0.5)*B*d[1]; + if ((iy-2 < 0) || (iy+3 > TABSIZ) ) + goto done; + + /* Compute fourth differences */ + for( i=0; i<2; i++ ) + d[i] = d[i+1] - d[i]; + B = 0.125*B*(p+1.0)*(p-2.0); + ans += B*(d[0] + d[1]); + + done: + + ans *= 0.01; + +#if 0 /* ndot = -26.0 assumed; no correction. */ + + /* Astronomical Almanac table is corrected by adding the expression + * -0.000091 (ndot + 26)(year-1955)^2 seconds + * to entries prior to 1955 (AA page K8), where ndot is the secular + * tidal term in the mean motion of the Moon. + * + * Entries after 1955 are referred to atomic time standards and + * are not affected by errors in Lunar or planetary theory. + */ + if( Y < 1955.0 ) + { + B = (Y - 1955.0); + #if 1 + ans += -0.000091 * (-25.8 + 26.0) * B * B; + #else + ans += -0.000091 * (-23.8946 + 26.0) * B * B; + #endif + } + +#endif /* 0 */ + + return( ans ); +} + + +#ifdef TEST_MAIN + +/* Exercise program. + */ +#include +#include + +int main(int ac, char *av[]) +{ + double ans, mj, y = atof(av[1]); + year_mjd (y, &mj); + ans = deltat(mj); + printf( "%.4lf\n", ans ); + return (0); +} +#endif diff --git a/libastro/descrip.mms b/libastro/descrip.mms new file mode 100755 index 0000000..89be3eb --- /dev/null +++ b/libastro/descrip.mms @@ -0,0 +1,92 @@ +# Makefile for the basic astronomy routines. +# The idea is to compile and archive them into libastro.a + +# compiler and flags + +# gcc +CC = cc +#CFLAGS= -O2 -ffast-math -Wall + +# solaris +# CC = cc +# CFLAGS= -O + +# AIX +# CC = xlc +# CFLAGS= -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -Aa -fast + +HS = astro.h bdl.h chap95.h deepconst.h preferences.h satlib.h satspec.h \ + sattypes.h vector.h vsop87.h + +OBJS = \ + aa_hadec.obj, \ + aberration.obj, \ + actan.obj, \ + airmass.obj, \ + anomaly.obj, \ + ap_as.obj, \ + atlas.obj, \ + auxil.obj, \ + bdl.obj, \ + chap95.obj, \ + chap95_data.obj, \ + circum.obj, \ + comet.obj, \ + constel.obj, \ + dbfmt.obj, \ + deep.obj, \ + deltat.obj, \ + earthsat.obj, \ + eq_ecl.obj, \ + eq_gal.obj, \ + formats.obj, \ + helio.obj, \ + jupmoon.obj, \ + libration.obj, \ + magdecl.obj, \ + marsmoon.obj, \ + misc.obj, \ + mjd.obj, \ + moon.obj, \ + mooncolong.obj, \ + moonnf.obj, \ + nutation.obj, \ + obliq.obj, \ + parallax.obj, \ + parallactic.obj, \ + plans.obj, \ + plmoon.obj, \ + plshadow.obj, \ + precess.obj, \ + reduce.obj, \ + refract.obj, \ + rings.obj, \ + riset.obj, \ + riset_cir.obj, \ + satmoon.obj, \ + sdp4.obj, \ + sgp4.obj, \ + sphcart.obj, \ + sun.obj, \ + thetag.obj, \ + utc_gst.obj, \ + umoon.obj, \ + twobody.obj, \ + vsop87.obj, \ + vsop87_data.obj + +libastro.olb : $(OBJS) + lib/crea $@ $(OBJS) + +#libastro.so: $(HS) $(OBJS) +# $(CC) -shared -o $@ $(OBJS) + +clean : + del *.o;* + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: descrip.mms,v $ $Date: 2005/07/27 21:28:40 $ $Revision: 1.1 $ $Name: $ diff --git a/libastro/earthsat.c b/libastro/earthsat.c new file mode 100644 index 0000000..c86bea3 --- /dev/null +++ b/libastro/earthsat.c @@ -0,0 +1,792 @@ +/* this file contains routines to support Earth satellites. + * + * Orbit propagation is based on the NORAD SGP4/SDP4 code, as converted from + * the original FORTRAN to C by Magnus Backstrom. The paper "Spacetrack + * Report Number 3: Models for Propagation of NORAD Element Sets" describes + * the calculations. + * See http://www.celestrak.com/NORAD/documentation/spacetrk.pdf. + * + * A few topocentric routines are also used from the 'orbit' program which is + * Copyright (c) 1986,1987,1988,1989,1990 Robert W. Berger N3EMO + * + */ + +/* define this to use orbit's propagator +#define USE_ORBIT_PROPAGATOR + */ + +/* define this to print some stuff +#define ESAT_TRACE + */ + +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + +#include "vector.h" +#include "sattypes.h" +#include "satlib.h" + + +#define ESAT_MAG 2 /* fake satellite magnitude */ + +typedef double MAT3x3[3][3]; + +static int crazyOp (Now *np, Obj *op); +static void esat_prop (Now *np, Obj *op, double *SatX, double *SatY, double + *SatZ, double *SatVX, double *SatVY, double *SatVZ); +static void GetSatelliteParams (Obj *op); +static void GetSiteParams (Now *np); +static double Kepler (double MeanAnomaly, double Eccentricity); +static void GetSubSatPoint (double SatX, double SatY, double SatZ, + double T, double *Latitude, double *Longitude, double *Height); +static void GetSatPosition (double EpochTime, double EpochRAAN, + double EpochArgPerigee, double SemiMajorAxis, double Inclination, + double Eccentricity, double RAANPrecession, double PerigeePrecession, + double T, double TrueAnomaly, double *X, double *Y, double *Z, + double *Radius, double *VX, double *VY, double *VZ); +static void GetSitPosition (double SiteLat, double SiteLong, + double SiteElevation, double CrntTime, double *SiteX, double *SiteY, + double *SiteZ, double *SiteVX, double *SiteVY, MAT3x3 SiteMatrix); +static void GetRange (double SiteX, double SiteY, double SiteZ, + double SiteVX, double SiteVY, double SatX, double SatY, double SatZ, + double SatVX, double SatVY, double SatVZ, double *Range, + double *RangeRate); +static void GetTopocentric (double SatX, double SatY, double SatZ, + double SiteX, double SiteY, double SiteZ, MAT3x3 SiteMatrix, double *X, + double *Y, double *Z); +static void GetBearings (double SatX, double SatY, double SatZ, + double SiteX, double SiteY, double SiteZ, MAT3x3 SiteMatrix, + double *Azimuth, double *Elevation); +static int Eclipsed (double SatX, double SatY, double SatZ, + double SatRadius, double CrntTime); +static void InitOrbitRoutines (double EpochDay, int AtEod); + +#ifdef USE_ORBIT_PROPAGATOR +static void GetPrecession (double SemiMajorAxis, double Eccentricity, + double Inclination, double *RAANPrecession, double *PerigeePrecession); +#endif /* USE_ORBIT_PROPAGATOR */ + +/* stuff from orbit */ +/* char VersionStr[] = "N3EMO Orbit Simulator v3.9"; */ + +#ifdef PI2 +#undef PI2 +#endif + +#define PI2 (PI*2) + +#define MinutesPerDay (24*60.0) +#define SecondsPerDay (60*MinutesPerDay) +#define HalfSecond (0.5/SecondsPerDay) +#define EarthRadius 6378.16 /* Kilometers */ +#define C 2.997925e5 /* Kilometers/Second */ +#define RadiansPerDegree (PI/180) +#define ABS(x) ((x) < 0 ? (-(x)) : (x)) +#define SQR(x) ((x)*(x)) + +#define EarthFlat (1/298.25) /* Earth Flattening Coeff. */ +#define SiderealSolar 1.0027379093 +#define SidRate (PI2*SiderealSolar/SecondsPerDay) /* radians/second */ +#define GM 398600 /* Kilometers^3/seconds^2 */ + +#define Epsilon (RadiansPerDegree/3600) /* 1 arc second */ +#define SunRadius 695000 +#define SunSemiMajorAxis 149598845.0 /* Kilometers */ + +/* Keplerian Elements and misc. data for the satellite */ +static double EpochDay; /* time of epoch */ +static double EpochMeanAnomaly; /* Mean Anomaly at epoch */ +static long EpochOrbitNum; /* Integer orbit # of epoch */ +static double EpochRAAN; /* RAAN at epoch */ +static double epochMeanMotion; /* Revolutions/day */ +static double OrbitalDecay; /* Revolutions/day^2 */ +static double EpochArgPerigee; /* argument of perigee at epoch */ +static double Eccentricity; +static double Inclination; + +/* Site Parameters */ +static double SiteLat,SiteLong,SiteAltitude; + + +static double SidDay,SidReference; /* Date and sidereal time */ + +/* Keplerian elements for the sun */ +static double SunEpochTime,SunInclination,SunRAAN,SunEccentricity, + SunArgPerigee,SunMeanAnomaly,SunMeanMotion; + +/* values for shadow geometry */ +static double SinPenumbra,CosPenumbra; + + +/* given a Now and an Obj with info about an earth satellite in the es_* fields + * fill in the s_* sky fields describing the satellite. + * as usual, we compute the geocentric ra/dec precessed to np->n_epoch and + * compute topocentric altitude accounting for refraction. + * return 0 if all ok, else -1. + */ +int +obj_earthsat (Now *np, Obj *op) +{ + double Radius; /* From geocenter */ + double SatX,SatY,SatZ; /* In Right Ascension based system */ + double SatVX,SatVY,SatVZ; /* Kilometers/second */ + double SiteX,SiteY,SiteZ; + double SiteVX,SiteVY; + double SiteMatrix[3][3]; + double Height; + double SSPLat,SSPLong; + double Azimuth,Elevation,Range; + double RangeRate; + double dtmp; + double CrntTime; + double ra, dec; + +#ifdef ESAT_TRACE + printf ("\n"); + printf ("Name = %s\n", op->o_name); + printf ("current jd = %13.5f\n", mjd+MJD0); + printf ("current mjd = %g\n", mjd); + printf ("satellite jd = %13.5f\n", op->es_epoch+MJD0); + printf ("satellite mjd = %g\n", op->es_epoch); +#endif /* ESAT_TRACE */ + + /* xephem uses noon 12/31/1899 as 0; orbit uses midnight 1/1/1900. + * thus, xephem runs 12 hours, or 1/2 day, behind of what orbit wants. + */ + CrntTime = mjd + 0.5; + + /* extract the XEphem data forms into those used by orbit. + * (we still use some functions and names from orbit, thank you). + */ + InitOrbitRoutines(CrntTime, 1); + GetSatelliteParams(op); + GetSiteParams(np); + + /* propagate to np->n_mjd */ + esat_prop (np, op, &SatX, &SatY, &SatZ, &SatVX, &SatVY, &SatVZ); + Radius = sqrt (SatX*SatX + SatY*SatY + SatZ*SatZ); + + /* find geocentric EOD equatorial directly from xyz vector */ + dtmp = atan2 (SatY, SatX); + range (&dtmp, 2*PI); + op->s_gaera = (float) dtmp; + op->s_gaedec = (float) atan2 (SatZ, sqrt(SatX*SatX + SatY*SatY)); + + /* find topocentric from site location */ + GetSitPosition(SiteLat,SiteLong,SiteAltitude,CrntTime, + &SiteX,&SiteY,&SiteZ,&SiteVX,&SiteVY,SiteMatrix); + GetBearings(SatX,SatY,SatZ,SiteX,SiteY,SiteZ,SiteMatrix, + &Azimuth,&Elevation); + + op->s_az = Azimuth; + refract (pressure, temp, Elevation, &dtmp); + op->s_alt = dtmp; + + /* Range: line-of-site distance to satellite, m + * RangeRate: m/s + */ + GetRange(SiteX,SiteY,SiteZ,SiteVX,SiteVY, + SatX,SatY,SatZ,SatVX,SatVY,SatVZ,&Range,&RangeRate); + + op->s_range = (float)(Range*1000); /* we want m */ + op->s_rangev = (float)(RangeRate*1000); /* we want m/s */ + + /* SSPLat: sub-satellite latitude, rads + * SSPLong: sub-satellite longitude, >0 west, rads + * Height: height of satellite above ground, m + */ + GetSubSatPoint(SatX,SatY,SatZ,CrntTime, + &SSPLat,&SSPLong,&Height); + + op->s_elev = (float)(Height*1000); /* we want m */ + op->s_sublat = (float)SSPLat; + op->s_sublng = (float)(-SSPLong); /* we want +E */ + + op->s_eclipsed = Eclipsed(SatX,SatY,SatZ,Radius,CrntTime); + +#ifdef ESAT_TRACE + printf ("CrntTime = %g\n", CrntTime); + printf ("SatX = %g\n", SatX); + printf ("SatY = %g\n", SatY); + printf ("SatZ = %g\n", SatZ); + printf ("Radius = %g\n", Radius); + printf ("SatVX = %g\n", SatVX); + printf ("SatVY = %g\n", SatVY); + printf ("SatVZ = %g\n", SatVZ); + printf ("SiteX = %g\n", SiteX); + printf ("SiteY = %g\n", SiteY); + printf ("SiteZ = %g\n", SiteZ); + printf ("SiteVX = %g\n", SiteVX); + printf ("SiteVY = %g\n", SiteVY); + printf ("Height = %g\n", Height); + printf ("SSPLat = %g\n", SSPLat); + printf ("SSPLong = %g\n", SSPLong); + printf ("Azimuth = %g\n", Azimuth); + printf ("Elevation = %g\n", Elevation); + printf ("Range = %g\n", Range); + printf ("RangeRate = %g\n", RangeRate); + fflush (stdout); +#endif /* ESAT_TRACE */ + + /* find s_ra/dec, depending on current options. */ + if (pref_get(PREF_EQUATORIAL) == PREF_TOPO) { + double ha, lst; + aa_hadec (lat, Elevation, (double)op->s_az, &ha, &dec); + now_lst (np, &lst); + ra = hrrad(lst) - ha; + range (&ra, 2*PI); + } else { + ra = op->s_gaera; + dec = op->s_gaedec; + } + if (epoch != EOD) + precess (mjd, epoch, &ra, &dec); + op->s_ra = (float)ra; + op->s_dec = (float)dec; + + /* just make up a size and brightness */ + set_smag (op, ESAT_MAG); + op->s_size = (float)0; + + return (0); +} + +/* find position and velocity vector for given Obj at the given time. + * set USE_ORBIT_PROPAGATOR depending on desired propagator to use. + */ +static void +esat_prop (Now *np, Obj *op, double *SatX, double *SatY, double *SatZ, +double *SatVX, double *SatVY, double *SatVZ) +{ +#ifdef USE_ORBIT_PROPAGATOR + double ReferenceOrbit; /* Floating point orbit # at epoch */ + double CurrentOrbit; + long OrbitNum; + double RAANPrecession,PerigeePrecession; + double MeanAnomaly,TrueAnomaly; + double SemiMajorAxis; + double AverageMotion, /* Corrected for drag */ + CurrentMotion; + double Radius; + double CrntTime; + + if (crazyOp (np, op)) { + *SatX = *SatY = *SatZ = *SatVX = *SatVY = *SatVZ = 0; + return; + } + + SemiMajorAxis = 331.25 * exp(2*log(MinutesPerDay/epochMeanMotion)/3); + GetPrecession(SemiMajorAxis,Eccentricity,Inclination,&RAANPrecession, + &PerigeePrecession); + + ReferenceOrbit = EpochMeanAnomaly/PI2 + EpochOrbitNum; + + CrntTime = mjd + 0.5; + AverageMotion = epochMeanMotion + (CrntTime-EpochDay)*OrbitalDecay/2; + CurrentMotion = epochMeanMotion + (CrntTime-EpochDay)*OrbitalDecay; + + SemiMajorAxis = 331.25 * exp(2*log(MinutesPerDay/CurrentMotion)/3); + + CurrentOrbit = ReferenceOrbit + (CrntTime-EpochDay)*AverageMotion; + + OrbitNum = CurrentOrbit; + + MeanAnomaly = (CurrentOrbit-OrbitNum)*PI2; + + TrueAnomaly = Kepler(MeanAnomaly,Eccentricity); + + GetSatPosition(EpochDay,EpochRAAN,EpochArgPerigee,SemiMajorAxis, + Inclination,Eccentricity,RAANPrecession,PerigeePrecession, + CrntTime,TrueAnomaly,SatX,SatY,SatZ,&Radius,SatVX,SatVY,SatVZ); + +#ifdef ESAT_TRACE + printf ("O Radius = %g\n", Radius); + printf ("ReferenceOrbit = %g\n", ReferenceOrbit); + printf ("CurrentOrbit = %g\n", CurrentOrbit); + printf ("RAANPrecession = %g\n", RAANPrecession); + printf ("PerigeePrecession = %g\n", PerigeePrecession); + printf ("MeanAnomaly = %g\n", MeanAnomaly); + printf ("TrueAnomaly = %g\n", TrueAnomaly); + printf ("SemiMajorAxis = %g\n", SemiMajorAxis); + printf ("AverageMotion = %g\n", AverageMotion); + printf ("CurrentMotion = %g\n", CurrentMotion); +#endif /* ESAT_TRACE */ + +#else /* ! USE_ORBIT_PROPAGATOR */ +#define MPD 1440.0 /* minutes per day */ + + SatElem se; + SatData sd; + Vec3 posvec, velvec; + double dy; + double dt; + int yr; + + if (crazyOp (np, op)) { + *SatX = *SatY = *SatZ = *SatVX = *SatVY = *SatVZ = 0; + return; + } + + /* init */ + memset ((void *)&se, 0, sizeof(se)); + memset ((void *)&sd, 0, sizeof(sd)); + sd.elem = &se; + + /* se_EPOCH is packed as yr*1000 + dy, where yr is years since 1900 + * and dy is day of year, Jan 1 being 1 + */ + mjd_dayno (op->es_epoch, &yr, &dy); + yr -= 1900; + dy += 1; + se.se_EPOCH = yr*1000 + dy; + + /* others carry over with some change in units */ + se.se_XNO = op->es_n * (2*PI/MPD); /* revs/day to rads/min */ + se.se_XINCL = (float)degrad(op->es_inc); + se.se_XNODEO = (float)degrad(op->es_raan); + se.se_EO = op->es_e; + se.se_OMEGAO = (float)degrad(op->es_ap); + se.se_XMO = (float)degrad(op->es_M); + se.se_BSTAR = op->es_drag; + se.se_XNDT20 = op->es_decay*(2*PI/MPD/MPD); /*rv/dy^^2 to rad/min^^2*/ + + se.se_id.orbit = op->es_orbit; + + dt = (mjd-op->es_epoch)*MPD; + +#ifdef ESAT_TRACE + printf ("se_EPOCH : %30.20f\n", se.se_EPOCH); + printf ("se_XNO : %30.20f\n", se.se_XNO); + printf ("se_XINCL : %30.20f\n", se.se_XINCL); + printf ("se_XNODEO : %30.20f\n", se.se_XNODEO); + printf ("se_EO : %30.20f\n", se.se_EO); + printf ("se_OMEGAO : %30.20f\n", se.se_OMEGAO); + printf ("se_XMO : %30.20f\n", se.se_XMO); + printf ("se_BSTAR : %30.20f\n", se.se_BSTAR); + printf ("se_XNDT20 : %30.20f\n", se.se_XNDT20); + printf ("se_orbit : %30d\n", se.se_id.orbit); + printf ("dt : %30.20f\n", dt); +#endif /* ESAT_TRACE */ + + /* compute the state vectors */ + if (se.se_XNO >= (1.0/225.0)) + sgp4(&sd, &posvec, &velvec, dt); /* NEO */ + else + sdp4(&sd, &posvec, &velvec, dt); /* GEO */ + if (sd.prop.sgp4) + free (sd.prop.sgp4); /* sd.prop.sdp4 is in same union */ + if (sd.deep) + free (sd.deep); + + /* earth radii to km */ + *SatX = (ERAD/1000)*posvec.x; + *SatY = (ERAD/1000)*posvec.y; + *SatZ = (ERAD/1000)*posvec.z; + /* Minutes per day/Seconds by day = Minutes/Second = 1/60 */ + *SatVX = (ERAD*velvec.x)/(1000*60); + *SatVY =(ERAD*velvec.y)/(1000*60); + *SatVZ = (ERAD*velvec.z)/(1000*60); + +#endif +} + +/* return 1 if op is crazy @ np */ +static int +crazyOp (Now *np, Obj *op) +{ + /* toss if more than a year old */ + return (fabs(op->es_epoch - mjd) > 365); +} + +/* grab the xephem stuff from op and copy into orbit's globals. + */ +static void +GetSatelliteParams(Obj *op) +{ + /* the following are for the orbit functions */ + /* xephem uses noon 12/31/1899 as 0; orbit uses midnight 1/1/1900 as 1. + * thus, xephem runs 12 hours, or 1/2 day, behind of what orbit wants. + */ + EpochDay = op->es_epoch + 0.5; + + /* xephem stores inc in degrees; orbit wants rads */ + Inclination = degrad(op->es_inc); + + /* xephem stores RAAN in degrees; orbit wants rads */ + EpochRAAN = degrad(op->es_raan); + + Eccentricity = op->es_e; + + /* xephem stores arg of perigee in degrees; orbit wants rads */ + EpochArgPerigee = degrad(op->es_ap); + + /* xephem stores mean anomaly in degrees; orbit wants rads */ + EpochMeanAnomaly = degrad (op->es_M); + + epochMeanMotion = op->es_n; + + OrbitalDecay = op->es_decay; + + EpochOrbitNum = op->es_orbit; +} + + + +static void +GetSiteParams(Now *np) +{ + SiteLat = lat; + + /* xephem stores longitude as >0 east; orbit wants >0 west */ + SiteLong = 2.0*PI - lng; + + /* what orbit calls altitude xephem calls elevation and stores it from + * sea level in earth radii; orbit wants km + */ + SiteAltitude = elev*ERAD/1000.0; + + /* we don't implement a minimum horizon altitude cutoff + SiteMinElev = 0; + */ + +#ifdef ESAT_TRACE + printf ("SiteLat = %g\n", SiteLat); + printf ("SiteLong = %g\n", SiteLong); + printf ("SiteAltitude = %g\n", SiteAltitude); + fflush (stdout); +#endif +} + + +/* Solve Kepler's equation */ +/* Inputs: */ +/* MeanAnomaly Time Since last perigee, in radians. */ +/* PI2 = one complete orbit. */ +/* Eccentricity Eccentricity of orbit's ellipse. */ +/* Output: */ +/* TrueAnomaly Angle between perigee, geocenter, and */ +/* current position. */ + +static +double Kepler(double MeanAnomaly, double Eccentricity) +{ +register double E; /* Eccentric Anomaly */ +register double Error; +register double TrueAnomaly; + + E = MeanAnomaly ;/*+ Eccentricity*sin(MeanAnomaly); -- Initial guess */ + do + { + Error = (E - Eccentricity*sin(E) - MeanAnomaly) + / (1 - Eccentricity*cos(E)); + E -= Error; + } + while (ABS(Error) >= Epsilon); + + if (ABS(E-PI) < Epsilon) + TrueAnomaly = PI; + else + TrueAnomaly = 2*atan(sqrt((1+Eccentricity)/(1-Eccentricity)) + *tan(E/2)); + if (TrueAnomaly < 0) + TrueAnomaly += PI2; + + return TrueAnomaly; +} + +static void +GetSubSatPoint(double SatX, double SatY, double SatZ, double T, +double *Latitude, double *Longitude, double *Height) +{ + double r; + /* ECD: long i; */ + + r = sqrt(SQR(SatX) + SQR(SatY) + SQR(SatZ)); + + *Longitude = PI2*((T-SidDay)*SiderealSolar + SidReference) + - atan2(SatY,SatX); + + /* ECD: + * want Longitude in range -PI to PI , +W + */ + range (Longitude, 2*PI); + if (*Longitude > PI) + *Longitude -= 2*PI; + + *Latitude = atan(SatZ/sqrt(SQR(SatX) + SQR(SatY))); + +#define SSPELLIPSE +#ifdef SSPELLIPSE + /* ECD */ + *Height = r - EarthRadius*(sqrt(1-(2*EarthFlat-SQR(EarthFlat))*SQR(sin(*Latitude)))); +#else + *Height = r - EarthRadius; +#endif +} + + +#ifdef USE_ORBIT_PROPAGATOR +static void +GetPrecession(double SemiMajorAxis, double Eccentricity, double Inclination, +double *RAANPrecession, double *PerigeePrecession) +{ + *RAANPrecession = 9.95*pow(EarthRadius/SemiMajorAxis,3.5) * cos(Inclination) + / SQR(1-SQR(Eccentricity)) * RadiansPerDegree; + + *PerigeePrecession = 4.97*pow(EarthRadius/SemiMajorAxis,3.5) + * (5*SQR(cos(Inclination))-1) + / SQR(1-SQR(Eccentricity)) * RadiansPerDegree; +} +#endif /* USE_ORBIT_PROPAGATOR */ + +/* Compute the satellite postion and velocity in the RA based coordinate + * system. + * ECD: take care not to let Radius get below EarthRadius. + */ + +static void +GetSatPosition(double EpochTime, double EpochRAAN, double EpochArgPerigee, +double SemiMajorAxis, double Inclination, double Eccentricity, +double RAANPrecession, double PerigeePrecession, double T, +double TrueAnomaly, double *X, double *Y, double *Z, double *Radius, +double *VX, double *VY, double *VZ) + +{ + double RAAN,ArgPerigee; + + + double Xw,Yw,VXw,VYw; /* In orbital plane */ + double Tmp; + double Px,Qx,Py,Qy,Pz,Qz; /* Escobal transformation 31 */ + double CosArgPerigee,SinArgPerigee; + double CosRAAN,SinRAAN,CoSinclination,SinInclination; + + *Radius = SemiMajorAxis*(1-SQR(Eccentricity)) + / (1+Eccentricity*cos(TrueAnomaly)); + + if (*Radius <= EarthRadius) + *Radius = EarthRadius; + + + Xw = *Radius * cos(TrueAnomaly); + Yw = *Radius * sin(TrueAnomaly); + + Tmp = sqrt(GM/(SemiMajorAxis*(1-SQR(Eccentricity)))); + + VXw = -Tmp*sin(TrueAnomaly); + VYw = Tmp*(cos(TrueAnomaly) + Eccentricity); + + ArgPerigee = EpochArgPerigee + (T-EpochTime)*PerigeePrecession; + RAAN = EpochRAAN - (T-EpochTime)*RAANPrecession; + + CosRAAN = cos(RAAN); SinRAAN = sin(RAAN); + CosArgPerigee = cos(ArgPerigee); SinArgPerigee = sin(ArgPerigee); + CoSinclination = cos(Inclination); SinInclination = sin(Inclination); + + Px = CosArgPerigee*CosRAAN - SinArgPerigee*SinRAAN*CoSinclination; + Py = CosArgPerigee*SinRAAN + SinArgPerigee*CosRAAN*CoSinclination; + Pz = SinArgPerigee*SinInclination; + Qx = -SinArgPerigee*CosRAAN - CosArgPerigee*SinRAAN*CoSinclination; + Qy = -SinArgPerigee*SinRAAN + CosArgPerigee*CosRAAN*CoSinclination; + Qz = CosArgPerigee*SinInclination; + + *X = Px*Xw + Qx*Yw; /* Escobal, transformation #31 */ + *Y = Py*Xw + Qy*Yw; + *Z = Pz*Xw + Qz*Yw; + + *VX = Px*VXw + Qx*VYw; + *VY = Py*VXw + Qy*VYw; + *VZ = Pz*VXw + Qz*VYw; +} + +/* Compute the site postion and velocity in the RA based coordinate + system. SiteMatrix is set to a matrix which is used by GetTopoCentric + to convert geocentric coordinates to topocentric (observer-centered) + coordinates. */ + +static void +GetSitPosition(double SiteLat, double SiteLong, double SiteElevation, +double CrntTime, double *SiteX, double *SiteY, double *SiteZ, double *SiteVX, +double *SiteVY, MAT3x3 SiteMatrix) +{ + static double G1,G2; /* Used to correct for flattening of the Earth */ + static double CosLat,SinLat; + static double OldSiteLat = -100000; /* Used to avoid unneccesary recomputation */ + static double OldSiteElevation = -100000; + double Lat; + double SiteRA; /* Right Ascension of site */ + double CosRA,SinRA; + + if ((SiteLat != OldSiteLat) || (SiteElevation != OldSiteElevation)) + { + OldSiteLat = SiteLat; + OldSiteElevation = SiteElevation; + Lat = atan(1/(1-SQR(EarthFlat))*tan(SiteLat)); + + CosLat = cos(Lat); + SinLat = sin(Lat); + + G1 = EarthRadius/(sqrt(1-(2*EarthFlat-SQR(EarthFlat))*SQR(SinLat))); + G2 = G1*SQR(1-EarthFlat); + G1 += SiteElevation; + G2 += SiteElevation; + } + + + SiteRA = PI2*((CrntTime-SidDay)*SiderealSolar + SidReference) + - SiteLong; + CosRA = cos(SiteRA); + SinRA = sin(SiteRA); + + + *SiteX = G1*CosLat*CosRA; + *SiteY = G1*CosLat*SinRA; + *SiteZ = G2*SinLat; + *SiteVX = -SidRate * *SiteY; + *SiteVY = SidRate * *SiteX; + + SiteMatrix[0][0] = SinLat*CosRA; + SiteMatrix[0][1] = SinLat*SinRA; + SiteMatrix[0][2] = -CosLat; + SiteMatrix[1][0] = -SinRA; + SiteMatrix[1][1] = CosRA; + SiteMatrix[1][2] = 0.0; + SiteMatrix[2][0] = CosRA*CosLat; + SiteMatrix[2][1] = SinRA*CosLat; + SiteMatrix[2][2] = SinLat; +} + +static void +GetRange(double SiteX, double SiteY, double SiteZ, double SiteVX, +double SiteVY, double SatX, double SatY, double SatZ, double SatVX, +double SatVY, double SatVZ, double *Range, double *RangeRate) +{ + double DX,DY,DZ; + + DX = SatX - SiteX; DY = SatY - SiteY; DZ = SatZ - SiteZ; + + *Range = sqrt(SQR(DX)+SQR(DY)+SQR(DZ)); + + *RangeRate = ((SatVX-SiteVX)*DX + (SatVY-SiteVY)*DY + SatVZ*DZ) + / *Range; +} + +/* Convert from geocentric RA based coordinates to topocentric + (observer centered) coordinates */ + +static void +GetTopocentric(double SatX, double SatY, double SatZ, double SiteX, +double SiteY, double SiteZ, MAT3x3 SiteMatrix, double *X, double *Y, +double *Z) +{ + SatX -= SiteX; + SatY -= SiteY; + SatZ -= SiteZ; + + *X = SiteMatrix[0][0]*SatX + SiteMatrix[0][1]*SatY + + SiteMatrix[0][2]*SatZ; + *Y = SiteMatrix[1][0]*SatX + SiteMatrix[1][1]*SatY + + SiteMatrix[1][2]*SatZ; + *Z = SiteMatrix[2][0]*SatX + SiteMatrix[2][1]*SatY + + SiteMatrix[2][2]*SatZ; +} + +static void +GetBearings(double SatX, double SatY, double SatZ, double SiteX, +double SiteY, double SiteZ, MAT3x3 SiteMatrix, double *Azimuth, +double *Elevation) +{ + double x,y,z; + + GetTopocentric(SatX,SatY,SatZ,SiteX,SiteY,SiteZ,SiteMatrix,&x,&y,&z); + + *Elevation = atan(z/sqrt(SQR(x) + SQR(y))); + + *Azimuth = PI - atan2(y,x); + + if (*Azimuth < 0) + *Azimuth += PI; +} + +static int +Eclipsed(double SatX, double SatY, double SatZ, double SatRadius, +double CrntTime) +{ + double MeanAnomaly,TrueAnomaly; + double SunX,SunY,SunZ,SunRad; + double vx,vy,vz; + double CosTheta; + + MeanAnomaly = SunMeanAnomaly+ (CrntTime-SunEpochTime)*SunMeanMotion*PI2; + TrueAnomaly = Kepler(MeanAnomaly,SunEccentricity); + + GetSatPosition(SunEpochTime,SunRAAN,SunArgPerigee,SunSemiMajorAxis, + SunInclination,SunEccentricity,0.0,0.0,CrntTime, + TrueAnomaly,&SunX,&SunY,&SunZ,&SunRad,&vx,&vy,&vz); + + CosTheta = (SunX*SatX + SunY*SatY + SunZ*SatZ)/(SunRad*SatRadius) + *CosPenumbra + (SatRadius/EarthRadius)*SinPenumbra; + + if (CosTheta < 0) + if (CosTheta < -sqrt(SQR(SatRadius)-SQR(EarthRadius))/SatRadius + *CosPenumbra + (SatRadius/EarthRadius)*SinPenumbra) + + return 1; + return 0; +} + +/* Initialize the Sun's keplerian elements for a given epoch. + Formulas are from "Explanatory Supplement to the Astronomical Ephemeris". + Also init the sidereal reference */ + +static void +InitOrbitRoutines(double EpochDay, int AtEod) +{ + double T,T2,T3,Omega; + int n; + double SunTrueAnomaly,SunDistance; + + T = (floor(EpochDay)-0.5)/36525; + T2 = T*T; + T3 = T2*T; + + SidDay = floor(EpochDay); + + SidReference = (6.6460656 + 2400.051262*T + 0.00002581*T2)/24; + SidReference -= floor(SidReference); + + /* Omega is used to correct for the nutation and the abberation */ + Omega = AtEod ? (259.18 - 1934.142*T) * RadiansPerDegree : 0.0; + n = (int)(Omega / PI2); + Omega -= n*PI2; + + SunEpochTime = EpochDay; + SunRAAN = 0; + + SunInclination = (23.452294 - 0.0130125*T - 0.00000164*T2 + + 0.000000503*T3 +0.00256*cos(Omega)) * RadiansPerDegree; + SunEccentricity = (0.01675104 - 0.00004180*T - 0.000000126*T2); + SunArgPerigee = (281.220833 + 1.719175*T + 0.0004527*T2 + + 0.0000033*T3) * RadiansPerDegree; + SunMeanAnomaly = (358.475845 + 35999.04975*T - 0.00015*T2 + - 0.00000333333*T3) * RadiansPerDegree; + n = (int)(SunMeanAnomaly / PI2); + SunMeanAnomaly -= n*PI2; + + SunMeanMotion = 1/(365.24219879 - 0.00000614*T); + + SunTrueAnomaly = Kepler(SunMeanAnomaly,SunEccentricity); + SunDistance = SunSemiMajorAxis*(1-SQR(SunEccentricity)) + / (1+SunEccentricity*cos(SunTrueAnomaly)); + + SinPenumbra = (SunRadius-EarthRadius)/SunDistance; + CosPenumbra = sqrt(1-SQR(SinPenumbra)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: earthsat.c,v $ $Date: 2015/04/08 23:36:35 $ $Revision: 1.14 $ $Name: $"}; diff --git a/libastro/eq_ecl.c b/libastro/eq_ecl.c new file mode 100644 index 0000000..14abc5e --- /dev/null +++ b/libastro/eq_ecl.c @@ -0,0 +1,72 @@ +#include +#include + +#include "astro.h" + +static void ecleq_aux (int sw, double mj, double x, double y, + double *p, double *q); + +#define EQtoECL 1 +#define ECLtoEQ (-1) + + +/* given the modified Julian date, mj, and an equitorial ra and dec, each in + * radians, find the corresponding geocentric ecliptic latitude, *lt, and + * longititude, *lg, also each in radians. + * correction for the effect on the angle of the obliquity due to nutation is + * not included. + */ +void +eq_ecl (double mj, double ra, double dec, double *lt, double *lg) +{ + ecleq_aux (EQtoECL, mj, ra, dec, lg, lt); +} + +/* given the modified Julian date, mj, and a geocentric ecliptic latitude, + * *lt, and longititude, *lg, each in radians, find the corresponding + * equitorial ra and dec, also each in radians. + * correction for the effect on the angle of the obliquity due to nutation is + * not included. + */ +void +ecl_eq (double mj, double lt, double lg, double *ra, double *dec) +{ + ecleq_aux (ECLtoEQ, mj, lg, lt, ra, dec); +} + +static void +ecleq_aux ( +int sw, /* +1 for eq to ecliptic, -1 for vv. */ +double mj, +double x, double y, /* sw==1: x==ra, y==dec. sw==-1: x==lg, y==lt. */ +double *p, double *q) /* sw==1: p==lg, q==lt. sw==-1: p==ra, q==dec. */ +{ + static double lastmj = -10000; /* last mj calculated */ + static double seps, ceps; /* sin and cos of mean obliquity */ + double sx, cx, sy, cy, ty, sq; + + if (mj != lastmj) { + double eps; + obliquity (mj, &eps); /* mean obliquity for date */ + seps = sin(eps); + ceps = cos(eps); + lastmj = mj; + } + + sy = sin(y); + cy = cos(y); /* always non-negative */ + if (fabs(cy)<1e-20) cy = 1e-20; /* insure > 0 */ + ty = sy/cy; + cx = cos(x); + sx = sin(x); + sq = (sy*ceps)-(cy*seps*sx*sw); + if (sq < -1) sq = -1; + if (sq > 1) sq = 1; + *q = asin(sq); + *p = atan(((sx*ceps)+(ty*seps*sw))/cx); + if (cx<0) *p += PI; /* account for atan quad ambiguity */ + range (p, 2*PI); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: eq_ecl.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/eq_gal.c b/libastro/eq_gal.c new file mode 100644 index 0000000..d4a5faf --- /dev/null +++ b/libastro/eq_gal.c @@ -0,0 +1,99 @@ +/* code to convert between equitorial and galactic coordinates */ + +#include +#include + +#include "astro.h" + +static void galeq_aux (int sw, double x, double y, double *p, double *q); +static void galeq_init (void); + +#define EQtoGAL 1 +#define GALtoEQ (-1) +#define SMALL (1e-20) + +static double an = degrad(32.93192); /* G lng of asc node on equator */ +static double gpr = degrad(192.85948); /* RA of North Gal Pole, 2000 */ +static double gpd = degrad(27.12825); /* Dec of " */ +static double cgpd, sgpd; /* cos() and sin() of gpd */ +static double mj2000; /* mj of 2000 */ +static int before; /* whether these have been set yet */ + +/* given ra and dec, each in radians, for the given epoch, find the + * corresponding galactic latitude, *lt, and longititude, *lg, also each in + * radians. + */ +void +eq_gal (double mj, double ra, double dec, double *lt, double *lg) +{ + galeq_init(); + precess (mj, mj2000, &ra, &dec); + galeq_aux (EQtoGAL, ra, dec, lg, lt); +} + +/* given galactic latitude, lt, and longititude, lg, each in radians, find + * the corresponding equitorial ra and dec, also each in radians, at the + * given epoch. + */ +void +gal_eq (double mj, double lt, double lg, double *ra, double *dec) +{ + galeq_init(); + galeq_aux (GALtoEQ, lg, lt, ra, dec); + precess (mj2000, mj, ra, dec); +} + +static void +galeq_aux ( +int sw, /* +1 for eq to gal, -1 for vv. */ +double x, double y, /* sw==1: x==ra, y==dec. sw==-1: x==lg, y==lt. */ +double *p, double *q) /* sw==1: p==lg, q==lt. sw==-1: p==ra, q==dec. */ +{ + double sy, cy, a, ca, sa, b, sq, c, d; + + cy = cos(y); + sy = sin(y); + a = x - an; + if (sw == EQtoGAL) + a = x - gpr; + ca = cos(a); + sa = sin(a); + b = sa; + if (sw == EQtoGAL) + b = ca; + sq = (cy*cgpd*b) + (sy*sgpd); + *q = asin (sq); + + if (sw == GALtoEQ) { + c = cy*ca; + d = (sy*cgpd) - (cy*sgpd*sa); + if (fabs(d) < SMALL) + d = SMALL; + *p = atan (c/d) + gpr; + } else { + c = sy - (sq*sgpd); + d = cy*sa*cgpd; + if (fabs(d) < SMALL) + d = SMALL; + *p = atan (c/d) + an; + } + + if (d < 0) *p += PI; + if (*p < 0) *p += 2*PI; + if (*p > 2*PI) *p -= 2*PI; +} + +/* set up the definitions */ +static void +galeq_init() +{ + if (!before) { + cgpd = cos (gpd); + sgpd = sin (gpd); + mj2000 = J2000; + before = 1; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: eq_gal.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/formats.c b/libastro/formats.c new file mode 100644 index 0000000..f6c1053 --- /dev/null +++ b/libastro/formats.c @@ -0,0 +1,212 @@ +#include +#include +#include +#include +#include + +#include "astro.h" +#include "preferences.h" + +/* sprint the variable a in sexagesimal format into out[]. + * w is the number of spaces for the whole part. + * fracbase is the number of pieces a whole is to broken into; valid options: + * 360000: :mm:ss.ss + * 36000: :mm:ss.s + * 3600: :mm:ss + * 600: :mm.m + * 60: :mm + * return number of characters written to out, not counting final '\0'. + */ +int +fs_sexa (char *out, double a, int w, int fracbase) +{ + char *out0 = out; + unsigned long n; + int d; + int f; + int m; + int s; + int isneg; + + /* save whether it's negative but do all the rest with a positive */ + isneg = (a < 0); + if (isneg) + a = -a; + + /* convert to an integral number of whole portions */ + n = (unsigned long)(a * fracbase + 0.5); + d = n/fracbase; + f = n%fracbase; + + /* form the whole part; "negative 0" is a special case */ + if (isneg && d == 0) + out += sprintf (out, "%*s-0", w-2, ""); + else + out += sprintf (out, "%*d", w, isneg ? -d : d); + + /* do the rest */ + switch (fracbase) { + case 60: /* dd:mm */ + m = f/(fracbase/60); + out += sprintf (out, ":%02d", m); + break; + case 600: /* dd:mm.m */ + out += sprintf (out, ":%02d.%1d", f/10, f%10); + break; + case 3600: /* dd:mm:ss */ + m = f/(fracbase/60); + s = f%(fracbase/60); + out += sprintf (out, ":%02d:%02d", m, s); + break; + case 36000: /* dd:mm:ss.s*/ + m = f/(fracbase/60); + s = f%(fracbase/60); + out += sprintf (out, ":%02d:%02d.%1d", m, s/10, s%10); + break; + case 360000: /* dd:mm:ss.ss */ + m = f/(fracbase/60); + s = f%(fracbase/60); + out += sprintf (out, ":%02d:%02d.%02d", m, s/100, s%100); + break; + default: + printf ("fs_sexa: unknown fracbase: %d\n", fracbase); + abort(); + } + + return (out - out0); +} + +/* put the given modified Julian date, jd, in out[] according to the given + * preference format. + * return number of characters written to out, not counting final '\0'. + */ +int +fs_date (char out[], int format, double jd) +{ + char *out0 = out; + int m, y; + double d; + + mjd_cal (jd, &m, &d, &y); + /* beware of %g rounding day up */ + if ((d < 1.0 && d - floor(d) >= .9999995) + || (d < 10.0 && d - floor(d) >= .999995) + || (d >= 10.0 && d - floor(d) >= .99995)) + mjd_cal (mjd_day(jd+0.5), &m, &d, &y); + + switch (format) { + case PREF_YMD: + out += sprintf (out, "%4d/%02d/%02.6g", y, m, d); + break; + case PREF_DMY: + out += sprintf (out, "%2.6g/%02d/%-4d", d, m, y); + break; + case PREF_MDY: + out += sprintf (out, "%2d/%02.6g/%-4d", m, d, y); + break; + default: + printf ("fs_date: bad date pref: %d\n", format); + abort(); + } + + return (out - out0); +} + + +/* convert sexagesimal string str AxBxC to double. + * x can be anything non-numeric. Any missing A, B or C will be assumed 0. + * optional - and + can be anywhere. + * return 0 if ok, -1 if can't find a thing. + */ +int +f_scansexa ( +const char *str0, /* input string */ +double *dp) /* cracked value, if return 0 */ +{ + double a, b, c; + char str[256]; + char *neg; + int isneg, r; + + /* copy str0 so we can play with it */ + strncpy (str, str0, sizeof(str)-1); + str[sizeof(str)-1] = '\0'; + + /* note first negative (but not fooled by neg exponent) */ + isneg = 0; + neg = strchr(str, '-'); + if (neg && (neg == str || (neg[-1] != 'E' && neg[-1] != 'e'))) { + *neg = ' '; + isneg = 1; + } + + /* crack up to three components */ + a = b = c = 0.0; + r = sscanf (str, "%lf%*[^0-9]%lf%*[^0-9]%lf", &a, &b, &c); + if (r < 1) + return (-1); + + /* back to one value, restoring neg */ + *dp = (c/60.0 + b)/60.0 + a; + if (isneg) + *dp *= -1; + return (0); +} + +/* crack a floating date string, bp, of the form X/Y/Z determined by the + * PREF_DATE_FORMAT preference into its components. allow the day to be a + * floating point number, + * the slashes may also be spaces or colons. + * a lone component with a decimal point is considered a year. + */ +void +f_sscandate ( +char *bp, +int pref, /* one of PREF_X for PREF_DATE_FORMAT */ +int *m, +double *d, +int *y) +{ + double X,Y,Z; /* the three components */ + int n; + + X = Y = Z = 0.0; + n = sscanf (bp, "%lf%*[/: ]%lf%*[/: ]%lf", &X, &Y, &Z); + if (n == 1 && (strchr(bp, '.') + || (pref == PREF_MDY && (X < 1 || X > 12)) + || (pref == PREF_DMY && (X < 1 || X > 31)))) { + double Mjd; + year_mjd (X, &Mjd); + mjd_cal (Mjd, m, d, y); + } else { + switch (pref) { + case PREF_MDY: + if (n > 0 && X != 0) + *m = (int)X; + if (n > 1 && Y != 0) + *d = Y; + if (n > 2 && Z != 0) + *y = (int)Z; + break; + case PREF_YMD: + if (n > 0 && X != 0) + *y = (int)X; + if (n > 1 && Y != 0) + *m = (int)Y; + if (n > 2 && Z != 0) + *d = Z; + break; + case PREF_DMY: + if (n > 0 && X != 0) + *d = X; + if (n > 1 && Y != 0) + *m = (int)Y; + if (n > 2 && Z != 0) + *y = (int)Z; + break; + } + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: formats.c,v $ $Date: 2006/04/10 09:00:06 $ $Revision: 1.17 $ $Name: $"}; diff --git a/libastro/helio.c b/libastro/helio.c new file mode 100644 index 0000000..d0dceae --- /dev/null +++ b/libastro/helio.c @@ -0,0 +1,51 @@ +#include +#include +#include + +#include "astro.h" + +/* given geocentric time jd and coords of a distant object at ra/dec (J2000), + * find the difference in time between light arriving at earth vs the sun. + * *hcp must be subtracted from geocentric jd to get heliocentric jd. + * From RLM Oct 12, 1995. + */ +void +heliocorr (double jd, double ra, double dec, double *hcp) +{ + double e; /* obliquity of ecliptic */ + double n; /* day number */ + double g; /* solar mean anomaly */ + double L; /* solar ecliptic longitude */ + double l; /* mean solar ecliptic longitude */ + double R; /* sun distance, AU */ + double X, Y; /* equatorial rectangular solar coords */ + double cdec, sdec; + double cra, sra; + + /* following algorithm really wants EOD */ + precess (J2000, jd - MJD0, &ra, &dec); + + cdec = cos(dec); + sdec = sin(dec); + cra = cos(ra); + sra = sin(ra); + + n = jd - 2451545.0; /* use epoch 2000 */ + e = degrad(23.439 - 0.0000004*n); + g = degrad(357.528) + degrad(0.9856003)*n; + L = degrad(280.461) + degrad(0.9856474)*n; + l = L + degrad(1.915)*sin(g) + degrad(0.02)*sin(2.0*g); + R = 1.00014 - 0.01671*cos(g) - 0.00014*cos(2.0*g); + X = R*cos(l); + Y = R*cos(e)*sin(l); + +#if 0 + printf ("n=%g g=%g L=%g l=%g R=%g X=%g Y=%g\n", + n, raddeg(g), raddeg(L), raddeg(l), R, X, Y); +#endif + + *hcp = 0.0057755 * (cdec*cra*X + (cdec*sra + tan(e)*sdec)*Y); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: helio.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/jupmoon.c b/libastro/jupmoon.c new file mode 100644 index 0000000..40cb4ad --- /dev/null +++ b/libastro/jupmoon.c @@ -0,0 +1,391 @@ +/* jupiter moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double jd, char *dir, MoonData md[J_NMOONS]); +static void meeus_jupiter (double d, double *cmlI, double *cmlII, + MoonData md[J_NMOONS]); +static void moonradec (double jupsize, MoonData md[J_NMOONS]); +static void moonSVis (Obj *sop, Obj *jop, MoonData md[J_NMOONS]); +static void moonEVis (MoonData md[J_NMOONS]); +static void moonPShad (Obj *sop, Obj *jop, MoonData md[J_NMOONS]); +static void moonTrans (MoonData md[J_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData jmd[J_NMOONS] = { + {"Jupiter", NULL}, + {"Io", "I"}, + {"Europa", "II"}, + {"Ganymede", "III"}, + {"Callisto", "IV"} +}; +static double sizemjd; /* size at last mjd */ +static double cmlImjd; /* central meridian long sys I, at last mjd */ +static double cmlIImjd; /* " II " */ + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(268.05) /* RA of Jupiter's north pole */ +#define POLE_DEC degrad(64.50) /* Dec of Jupiter's north pole */ + + +/* get jupiter info in md[0], moon info in md[1..J_NMOONS-1]. + * if !dir always use meeus model. + * if !jop caller just wants md[] for names + * N.B. we assume sop and jop are updated. + */ +void +jupiter_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *sop, /* Sun */ +Obj *jop, /* jupiter */ +double *sizep, /* jup angular diam, rads */ +double *cmlI, double *cmlII, /* central meridian longitude, rads */ +double *polera, double *poledec, /* pole location */ +MoonData md[J_NMOONS]) /* return info */ +{ + double JD; + + /* always copy back at least for name */ + memcpy (md, jmd, sizeof(jmd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !jop) { + if (jop) { + *sizep = sizemjd; + *cmlI = cmlImjd; + *cmlII = cmlIImjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = jop->s_ra; + md[0].dec = jop->s_dec; + md[0].mag = get_mag(jop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from jop */ + *sizep = degrad(jop->s_size/3600.0); + + /* mags from JPL ephemeris */ + md[1].mag = 5.7; + md[2].mag = 5.8; + md[3].mag = 5.3; + md[4].mag = 6.7; + + /* get moon data from BDL if possible, else Meeus' model. + * always use Meeus for cml + */ + if (dir && use_bdl (JD, dir, md) == 0) + meeus_jupiter (Mjd, cmlI, cmlII, NULL); + else + meeus_jupiter (Mjd, cmlI, cmlII, md); + + /* set visibilities */ + moonSVis (sop, jop, md); + moonPShad (sop, jop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + sizemjd = *sizep; + cmlImjd = *cmlI; + cmlIImjd = *cmlII; + memcpy (jmd, md, sizeof(jmd)); +} + +/* hunt for BDL file in dir[] and use if possible + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[J_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define JUPRAU .0004769108 /* jupiter radius, AU */ + double x[J_NMOONS], y[J_NMOONS], z[J_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "jupiter.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "jupiter.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != J_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, J_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < J_NMOONS; i++) { + md[i].x = x[i-1]/JUPRAU; /* we want jup radii +E */ + md[i].y = -y[i-1]/JUPRAU; /* we want jup radii +S */ + md[i].z = -z[i-1]/JUPRAU; /* we want jup radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* compute location of GRS and Galilean moons. + * if md == NULL, just to cml. + * from "Astronomical Formulae for Calculators", 2nd ed, by Jean Meeus, + * Willmann-Bell, Richmond, Va., U.S.A. (c) 1982, chapters 35 and 36. + */ +static void +meeus_jupiter( +double d, +double *cmlI, double *cmlII, /* central meridian longitude, rads */ +MoonData md[J_NMOONS]) /* fill in md[1..NM-1].x/y/z for each moon. + * N.B. md[0].ra/dec must already be set + */ +{ +#define dsin(x) sin(degrad(x)) +#define dcos(x) cos(degrad(x)) + double A, B, Del, J, K, M, N, R, V; + double cor_u1, cor_u2, cor_u3, cor_u4; + double solc, tmp, G, H, psi, r, r1, r2, r3, r4; + double u1, u2, u3, u4; + double lam, Ds; + double z1, z2, z3, z4; + double De, dsinDe; + double theta, phi; + double tvc, pvc; + double salpha, calpha; + int i; + + V = 134.63 + 0.00111587 * d; + + M = (358.47583 + 0.98560003*d); + N = (225.32833 + 0.0830853*d) + 0.33 * dsin (V); + + J = 221.647 + 0.9025179*d - 0.33 * dsin(V); + + A = 1.916*dsin(M) + 0.02*dsin(2*M); + B = 5.552*dsin(N) + 0.167*dsin(2*N); + K = (J+A-B); + R = 1.00014 - 0.01672 * dcos(M) - 0.00014 * dcos(2*M); + r = 5.20867 - 0.25192 * dcos(N) - 0.00610 * dcos(2*N); + Del = sqrt (R*R + r*r - 2*R*r*dcos(K)); + psi = raddeg (asin (R/Del*dsin(K))); + + *cmlI = degrad(268.28 + 877.8169088*(d - Del/173) + psi - B); + range (cmlI, 2*PI); + *cmlII = degrad(290.28 + 870.1869088*(d - Del/173) + psi - B); + range (cmlII, 2*PI); + + /* that's it if don't want moon info too */ + if (!md) + return; + + solc = (d - Del/173.); /* speed of light correction */ + tmp = psi - B; + + u1 = 84.5506 + 203.4058630 * solc + tmp; + u2 = 41.5015 + 101.2916323 * solc + tmp; + u3 = 109.9770 + 50.2345169 * solc + tmp; + u4 = 176.3586 + 21.4879802 * solc + tmp; + + G = 187.3 + 50.310674 * solc; + H = 311.1 + 21.569229 * solc; + + cor_u1 = 0.472 * dsin (2*(u1-u2)); + cor_u2 = 1.073 * dsin (2*(u2-u3)); + cor_u3 = 0.174 * dsin (G); + cor_u4 = 0.845 * dsin (H); + + r1 = 5.9061 - 0.0244 * dcos (2*(u1-u2)); + r2 = 9.3972 - 0.0889 * dcos (2*(u2-u3)); + r3 = 14.9894 - 0.0227 * dcos (G); + r4 = 26.3649 - 0.1944 * dcos (H); + + md[1].x = -r1 * dsin (u1+cor_u1); + md[2].x = -r2 * dsin (u2+cor_u2); + md[3].x = -r3 * dsin (u3+cor_u3); + md[4].x = -r4 * dsin (u4+cor_u4); + + lam = 238.05 + 0.083091*d + 0.33*dsin(V) + B; + Ds = 3.07*dsin(lam + 44.5); + De = Ds - 2.15*dsin(psi)*dcos(lam+24.) + - 1.31*(r-Del)/Del*dsin(lam-99.4); + dsinDe = dsin(De); + + z1 = r1 * dcos(u1+cor_u1); + z2 = r2 * dcos(u2+cor_u2); + z3 = r3 * dcos(u3+cor_u3); + z4 = r4 * dcos(u4+cor_u4); + + md[1].y = z1*dsinDe; + md[2].y = z2*dsinDe; + md[3].y = z3*dsinDe; + md[4].y = z4*dsinDe; + + /* compute sky transformation angle as triple vector product */ + tvc = PI/2.0 - md[0].dec; + pvc = md[0].ra; + theta = PI/2.0 - POLE_DEC; + phi = POLE_RA; + salpha = -sin(tvc)*sin(theta)*(cos(pvc)*sin(phi) - sin(pvc)*cos(phi)); + calpha = sqrt (1.0 - salpha*salpha); + + for (i = 0; i < J_NMOONS; i++) { + double tx = md[i].x*calpha + md[i].y*salpha; + double ty = -md[i].x*salpha + md[i].y*calpha; + md[i].x = tx; + md[i].y = ty; + } + + md[1].z = z1; + md[2].z = z2; + md[3].z = z3; + md[4].z = z4; +} + + +/* given jupiter loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in jup radii, find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double jupsize, /* jup diameter, rads */ +MoonData md[J_NMOONS]) /* fill in RA and Dec */ +{ + double juprad = jupsize/2; + double jupra = md[0].ra; + double jupdec = md[0].dec; + int i; + + for (i = 1; i < J_NMOONS; i++) { + double dra = juprad * md[i].x; + double ddec = juprad * md[i].y; + md[i].ra = jupra + dra; + md[i].dec = jupdec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *sop, /* SUN */ +Obj *jop, /* jupiter */ +MoonData md[J_NMOONS]) +{ + double esd = sop->s_edist; + double eod = jop->s_edist; + double sod = jop->s_sdist; + double soa = degrad(jop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*jop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[J_NMOONS]) +{ + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *sop, /* SUN */ +Obj *jop, /* jupiter */ +MoonData md[J_NMOONS]) +{ + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (jop, sop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[J_NMOONS]) +{ + int i; + + for (i = 1; i < J_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: jupmoon.c,v $ $Date: 2006/08/29 03:16:47 $ $Revision: 1.7 $ $Name: $"}; diff --git a/libastro/libration.c b/libastro/libration.c new file mode 100644 index 0000000..59b5598 --- /dev/null +++ b/libastro/libration.c @@ -0,0 +1,2213 @@ +/* This file contains code to calculate the libration in Lunar lat and long. + * It is based entirely on code supplied to me 2 Oct 1996 by Stephen L. Moshier, + * , which implements a trigonometric expansion to + * approximate the librations according to JPL DE403. The following doc file + * was also supplied therewith: + +This program calculates a trigonometric series adjusted for a best fit +to the lunar librations from the Jet Propulsion Laboratory's DE403 +ephemeris. + +lblon403.c and lblat403.c are series for the selenographic longitude +and latitude of the earth. The longitude series matches DE403 +with a maximum discrepancy of 2.6" (0.4" rms). The latitude has a +maximum discrepancy of 1.9" (0.2" rms). The two series are valid in +the Julian year interval 1600 to 2200. + +In both Eckhardt and DE403 the moon's principal moment of inertia axes +form the lunar body coordinate system. The estimated geographic +locations of these axes vary as measurements and theories gradually +become more refined. There is a significant difference between +Eckhardt and DE403 in the constant term of the longitude. Almanac and +cartography coordinates drop the constant term (which is -64" for +DE403). That practice gives librations relative to the mean +selenographic longitude of the earth, for which the discrepancy from +one theory to the next is small. + +Steve Moshier +October, 1996 + + * Any errors in adapting this code to xephem are strictly my own. + * Elwood Downey. +*/ + +#include +#include + +#include "astro.h" + +#define CHAR short + + +/* plantbl.h */ + +struct plantbl { + /* char max_harmonic[9]; */ + char max_harmonic[14]; + char max_power_of_t; + CHAR *arg_tbl; + int *lon_tbl; + int *lat_tbl; + int *rad_tbl; + double distance; + double timescale; + double trunclvl; +}; + + +/* libra403.c */ + +static double JD2000 = 2451545.0; +/* Conversion factors between degrees and radians */ +static double STR = 4.8481368110953599359e-6; /* radians per arc second */ + +static double ss[14][24]; +static double cc[14][24]; + +/* Reduce arc seconds modulo 360 degrees, + answer in arc seconds. */ +static double +mods3600 (double x) +{ + double y; + y = x - 1.296e6 * floor (x / 1.296e6); + return y; +} + +/* Prepare lookup table of sin and cos ( i * L_k ) + for required multiple angles. + K is the array offset corresponding to the planet. + ARG is in radians. + n is the highest harmonic to compute. */ +static int +sscc (int k, double arg, int n) +{ + double cu, su, cv, sv, s; + int i; + + if (n <= 0) + return 0; + + su = sin (arg); + cu = cos (arg); + ss[k][0] = su; /* sin(L) */ + cc[k][0] = cu; /* cos(L) */ + sv = 2.0 * su * cu; + cv = cu * cu - su * su; + ss[k][1] = sv; /* sin(2L) */ + cc[k][1] = cv; + for (i = 2; i < n; i++) + { + s = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = s; + ss[k][i] = sv; /* sin( i+1 L ) */ + cc[k][i] = cv; + } + return (0); +} + + +/* Mean elements. + Copied from cmoon.c, DE404 version. */ + +static double Jlast = -1.0e38; +static double T; + +static int +dargs (double J, struct plantbl *plan) +{ + double T2, w; + + if (J == Jlast) + return 0; + + T = (J - JD2000) / 36525.0; + T2 = T * T; + + /* Mean anomaly of sun = l' (J. Laskar) */ + w = mods3600 (129596581.038354 * T + 1287104.76154); + w += (((((((( + 1.62e-20 * T + - 1.0390e-17) * T + - 3.83508e-15) * T + + 4.237343e-13) * T + + 8.8555011e-11) * T + - 4.77258489e-8) * T + - 1.1297037031e-5) * T + + 1.4732069041e-4) * T + - 0.552891801772) * T2; + sscc (10, STR * w, plan->max_harmonic[10]); + + /* Mean distance of moon from its ascending node = F */ + w = mods3600 ((1739527263.0983 - 2.079419901760e-01) * T + 335779.55755); + w = w + ((-9.646018347184e-06 * T2 /* F, t^4 */ + - 1.138215912580e-03) * T /* F, t^3 */ + - 1.312045233711e+01) * T; /* F, t^2 */ + sscc (11, STR * w, plan->max_harmonic[11]); + + /* Mean anomaly of moon = l */ + w = mods3600 ((1717915923.4728 - 2.035946368532e-01) * T + 485868.28096); + w = w + ((-3.421689790404e-04 * T2 /* l, t^4 */ + + 4.768357585780e-02) * T /* l, t^3 */ + + 3.146734198839e+01) * T; /* l, t^2 */ + sscc (9, STR * w, plan->max_harmonic[9]); + + /* Mean elongation of moon = D */ + w = mods3600 ((1602961601.4603 + 3.962893294503e-01) * T + 1072260.73512); + w = w + ((-2.905334122698e-04 * T2 /* D, t^4 */ + - 5.834100476561e-03) * T /* D, t^3 */ + - 6.847070905410e+00) * T; /* D, t^2 */ + sscc (12, STR * w, plan->max_harmonic[12]); + + /* Mean longitude of moon, re mean ecliptic and equinox of date */ + w = mods3600 ((1732564372.83264 - 6.784914260953e-01) * T + 785939.95571); + w = w + ((-8.466472828815e-05 * T2 /* L, t^4 */ + + 5.722859298199e-03) * T /* L, t^3 */ + - 5.663161722088e+00) * T; /* L, t^2 */ + sscc (13, STR * w, plan->max_harmonic[13]); + + /* Mean longitudes of planets (Laskar, Bretagnon) */ + + /* Venus. */ + w = mods3600 (210664136.4335482 * T + 655127.283046); + w += (((((((( + -9.36e-023 * T + - 1.95e-20) * T + + 6.097e-18) * T + + 4.43201e-15) * T + + 2.509418e-13) * T + - 3.0622898e-10) * T + - 2.26602516e-9) * T + - 1.4244812531e-5) * T + + 0.005871373088) * T2; + sscc (1, STR * w, plan->max_harmonic[1]); + + /* Earth. */ + w = mods3600 (129597742.26669231 * T + 361679.214649); + w += ((((((((-1.16e-22 * T + + 2.976e-19) * T + + 2.8460e-17) * T + - 1.08402e-14) * T + - 1.226182e-12) * T + + 1.7228268e-10) * T + + 1.515912254e-7) * T + + 8.863982531e-6) * T + - 2.0199859001e-2) * T2; + sscc (2, STR * w, plan->max_harmonic[2]); + + /* Mars. */ + w = mods3600 (68905077.59284 * T + 1279559.78866); + w += (-1.043e-5 * T + 9.38012e-3) * T2; + sscc (3, STR * w, plan->max_harmonic[3]); + + /* Jupiter. */ + w = mods3600 (10925660.428608 * T + 123665.342120); + w += (1.543273e-5 * T - 3.06037836351e-1) * T2; + sscc (4, STR * w, plan->max_harmonic[4]); + + /* Saturn. */ + w = mods3600 (4399609.65932 * T + 180278.89694); + w += ((4.475946e-8 * T - 6.874806E-5) * T + 7.56161437443E-1) * T2; + sscc (5, STR * w, plan->max_harmonic[5]); + return 0; +} + + + +/* Evaluate series PLAN at Julian date J. + Result in arcseconds, usually. */ + +static double +gplan (double J, struct plantbl *plan) +{ + double su, cu, sv, cv; + double t, sl; + int j, k, m, k1, ip, np, nt; + CHAR *p; + int *pl; + + dargs (J, plan); + /* Point to start of table of arguments. */ + p = plan->arg_tbl; + /* Point to tabulated cosine and sine amplitudes. */ + pl = plan->lon_tbl; + sl = 0.0; + + for (;;) + { + /* Find sine and cosine of argument for this term in the series. + The argument has the form J_1 L_1 + J_2 L_2 + ... + where J_i are integers and L_i are mean elements. */ + + /* Number of periodic arguments. */ + np = *p++; + if (np < 0) + break; + if (np == 0) + { + /* If no periodic arguments, it is a polynomial term. + Evaluate A_n T^n + A_n-1 T^n-1 + ... + A_0. */ + nt = *p++; + cu = *pl++; + for (ip = 0; ip < nt; ip++) + cu = cu * T + *pl++; + sl += cu; + continue; + } + k1 = 0; + cv = 0.0; + sv = 0.0; + for (ip = 0; ip < np; ip++) + { + /* What harmonic. */ + j = *p++; + /* Which planet. */ + m = *p++ - 1; + if (j) + { + k = j; + if (j < 0) + k = -k; + k -= 1; + /* sin(k*angle) for planet m. */ + su = ss[m][k]; + if (j < 0) + su = -su; + /* cos(k*angle) for planet m. */ + cu = cc[m][k]; + if (k1 == 0) + { + /* Set sine and cosine of first angle. */ + sv = su; + cv = cu; + k1 = 1; + } + else + { + /* Combine angles by trigonometry. */ + t = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = t; + } + } + } + /* Now cv = cos(arg), sv = sin(arg). + Evaluate + cu = (C_n T^n + C_n-1 T^n-1 + ... + C_0) cos(arg) + su = (S_n T^n + S_n-1 T^n-1 + ... + S_0) sin(arg). */ + + /* Highest power of T. */ + nt = *p++; + /* Coefficients C_i, S_i. */ + cu = *pl++; + su = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + su = su * T + *pl++; + } + sl += cu * cv + su * sv; + } + return (plan->trunclvl * sl); +} + + +/* lblat403.c */ + +static int lattabr[] = {-1}; +static int lattabb[] = {-1}; +static int lattabl[] = { + 785710, + + -1958, 780, + + -178, 2850, 2243, 5927, 2714, -2911, + + -174, 5888, -16705, 10828, -15113, -25049, + + -172, 1976, + + 37, -13560, + + -40, -911, + + -300, 691, + + 3779, 722, + + 68, -1048, + + -3092, -4, 3011, -31, 250, -14293664, + + -149, -228, + + -5, -842, + + 62, 57967, + + -7, -11207, + + 15, -66055, + + -79, -71560, + + 8, 2998, + + -1062, -46, + + -2, 711, + + -5, -2, + + 367, -5, -353, 1, -117, 2324027, + + 0, -176, + + 19, -4, + + -3, -1229, + + 7, 4327, + + -2, 112, + + -1, -540, + + 73, 102982, + + 0, -137, + + 2, 239, + + 0, -216, + + 2, 3707, + + -1, -100, + + -2, 124, + + 0, 408, + + 1, 561, + + 0, 594, + + 0, 11866, + + -2, -229, + + 11, 6768, + + 2, 1, + + -2, -788, -24, 314732, + + -5, -3238, + + -2, -1263, + + -1, 94, + + -2, 206, + + -283, 6489836, + + 63, 2562, + + -6, 1220, + + 0, 135, + + 795, -338, + + -406, -101, + + 757, -383, + + -73, -31018, + + -5, -3010, + + 6, 5821, + + 167, 7, + + 2, 122623, + + 41, 138924, + + 2, 253, + + 0, -198, + + 135, 30, + + 2, 934, + + 62, -14, + + -531, -297537, + + -3, -205, + + 1, -393, + + -4, -156, + + -467, 90, + + 9, -346, + + -55, 1368, + + 4414, 2094, + + 480, 510, + + 35, 728, + + 6832, 6429, + + -2099, -3703, + + -9, 579, + + 239, 1738, + + 22, 968, 60260, -8929, + + 26, -64, + + 0, 0, + + -47, -351, 2248, -1175, 3976, 7150, + + 15191, 1, -15535, -143, -2308,-239959618, + + -45, 355, 2252, 1189, 4009, -7131, + + -158, 499, + + 776, -34, + + -389, 4363, + + 30, 28, + + 0, -593, + + 1, -1, + + 58, -66, + + 4, 1552, + + -1, 244, + + 288, 59, + + -276, 62, + + 8, 3309, + + 2, 1249, + + -156, -3, + + 0, -7903, + + -47, 154458, + + -710, 160, + + 0, 288, + + 328, 219514, + + -1, 113, + + -1, 1515, + + -20, 28493, + + 13, 9011, + + -1, 1110, + + -1, -103, + + 0, 312, + + 1, 360, + + 6, 6139, + + -1, 142, + + -1, -709, + + -1, -242, + + 67, 67200, + + 5, 4148, + + 1, 137, + + -15, -17969, + + -2, -3372, + + -2, -1739, + + 154, 116200, + + -1, -640, + + -269, -336274, + + 0, -1557, + + -1, -353, + + 993, 39, + + -1, -294, + + -646, -135, + + 750, -3, -661, 8, -163, 2591179, + + -1, -258, + + 0, 381, + + 6, 8272, + + -44, -92044, + + -29, 70397, + + -25, -17892, + + 1, 67, + + -44, -17118, + + 2743, 349, + + -4, 231, + + 1501, 3099, + + -33, 21, + + -1130, 97, 1263, 164, -226, -13139965, + + 839, -202, + + -1, 660, + + 12, -10482, + + 1, 17, + + -2, -1480, + + -45, -26084, + + 2, 259, + + 0, 258, + + -1, -1560, + + 32, 73046, + + -1, -370, + + -1, -77, + + 46, 20687, + + 1, 742, + + 1, 2399, + + 2, 741, + + 0, 52, + + 0, 112, + + 0, 297, + + 2, 825, + + 0, 161, + + 1, 4228, + + 0, 212, + + -1, -105, + + 6, 2782, + + 9, 37199, + + 3, 5045, + + 105, -1, + + -1, -179, + + 75, 31274, + + -3, -1321, + + -1, 363, + + 0, 1137, + + 58, 104090, + + -2, -2695, + + -1, -392, + + -35, -21763, + + -2, -205, + + 567, 38, + + -7, 117, + + -569, -9, 321, -1522061, + + -4, 276, + + -2, -590, + + 2, 632, + + -14, -10601, + + 4, 8703, + + -10, 16870, + + -4, -995, + + 597, -6, -386, -805403, + + 1025, -474, + + -2, 201, + + -95, 16, + + -127, 135570, + + 0, -173, + + 10, 8565, + + -3, 1812, + + -1, -108, + + -107, -649, + + 0, 151, + + 1, 950, + + 1, 312, + + 1, 403, + + 0, -576, + + 7, 4418, + + -3, -4769, + + -1, -769, + + 63, 38890, + + 0, -101, + + 0, 169, + + -3, -14837, + + 1, 372, + + 0, -674, + + -3, -1488, + + -36, -196300, + + 0, -176, + + -10, -4811, + + -2, -991, + + 1, 831, + + 1, 3138, + + -103, -51819, + + 0, -133, + + -4, 22171, + + 2, 820, + + 1, 149, + + 2227, 1277, + + -502, -3049, + + 1, 122, + + 0, 370, + + 0, 166, + + 2, 772, + + 2, 2057, + + -1, -486, + + 13, -15447, + + -2, -1619, + + 0, 335, + + 0, -206, + + 0, -104, + + -19, -19726, + + 0, 414, + + -8, -3425, + + -19, -1, + + 1, 546, + + 0, -392, + + 0, -2754, + + 0, -158, + + -3, -1790, + + -1, -230, + + 0, -190, + + 0, -366, + + 0, -154, + +}; + +static CHAR latargs[] = { + 0, 0, + 3, 1, 2, 9, 3,-20, 4, 0, + 4, 1, 13, -1, 10, 3, 2, -4, 3, 2, + 4, 1, 13, -1, 10, -5, 2, 9, 3, 2, + 3, 9, 10, -9, 14, 1, 3, 0, + 3, 1, 11, -1, 12, 1, 13, 0, + 4, 1, 10, -2, 11, 1, 12, -2, 13, 0, + 4, 2, 11, -1, 14, 18, 2,-18, 3, 0, + 3, 1, 13, -1, 10, 1, 3, 0, + 2, 1, 10, -1, 14, 0, + 2, 1, 10, -1, 12, 2, + 4, 1, 14,-18, 2, 16, 3, 1, 5, 0, + 3, 2, 10, -1, 12, -1, 13, 0, + 3, 1, 10, 1, 11, -1, 12, 0, + 4, 1, 10, -1, 11, 1, 12, -2, 13, 0, + 2, 1, 12, -1, 13, 0, + 3, 1, 10, -1, 11, -1, 12, 0, + 3, 3, 10, -1, 12, -2, 13, 0, + 2, 2, 10, -2, 13, 0, + 3, 1, 10, 2, 11, -1, 12, 0, + 3, 1, 10, -2, 13, 1, 3, 0, + 3, 1, 10, 1, 12, -2, 13, 2, + 3, 1, 11, 1, 12, -1, 13, 0, + 2, 2, 12, -2, 13, 0, + 3, 1, 10, -2, 11, -1, 12, 0, + 3, 1, 10, -3, 12, 2, 13, 0, + 4, 3, 10, 1, 11, -1, 12, -2, 13, 0, + 3, 2, 10, 1, 12, -3, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -2, 13, 0, + 2, 3, 12, -3, 13, 0, + 4, 1, 10, -1, 11, -3, 12, 2, 13, 0, + 3, 3, 10, 1, 12, -4, 13, 0, + 4, 1, 10, 2, 11, 1, 12, -2, 13, 0, + 3, 1, 10, 3, 12, -4, 13, 0, + 4, 1, 10, 3, 11, 1, 12, -2, 13, 0, + 3, 3, 11, 1, 12, -2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, -4, 13, 0, + 2, 3, 12, -4, 13, 0, + 3, 2, 11, 1, 12, -2, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -3, 13, 0, + 3, 2, 10, 1, 12, -4, 13, 0, + 4, 1, 14, -3, 2,-16, 3, -4, 4, 0, + 3, 1, 11, 1, 12, -2, 13, 1, + 3, 1, 10, 1, 12, -3, 13, 0, + 4, 2, 10, 1, 11, -1, 12, -2, 13, 0, + 3, 2, 10, -3, 12, 2, 13, 0, + 4, 1, 10, -1, 11, -1, 12, 1, 13, 0, + 2, 1, 12, -2, 13, 0, + 2, 2, 13, -1, 14, 0, + 2, 2, 11, -1, 12, 0, + 4, 1, 10, -1, 11, 1, 12, -3, 13, 0, + 3, 2, 10, -3, 14, 4, 4, 0, + 2, 1, 10, -2, 13, 0, + 3, 1, 13, -3, 3, 4, 4, 0, + 3, 2, 10, -1, 12, -2, 13, 0, + 3, 2, 10, -1, 11, -1, 12, 0, + 3, 1, 10, -1, 12, 1, 13, 0, + 2, 1, 10, -1, 11, 0, + 3, 1, 11, -1, 12, 2, 13, 0, + 2, 1, 11, -1, 12, 0, + 3, 1, 10, -1, 12, -1, 13, 0, + 4, 2, 13, -1, 12, 2, 2, -2, 3, 0, + 3, 1, 13, 2, 2, -3, 3, 0, + 4, 2, 10, -1, 11, -1, 12, -2, 13, 0, + 3, 1, 13, -1, 2, 2, 3, 0, + 2, 2, 10, -1, 12, 0, + 4, 2, 13, -1, 12, 2, 3, -2, 5, 0, + 4, 2, 13, -1, 12, 3, 2, -3, 3, 0, + 4, 2, 10, -2, 11, 1, 12, -2, 13, 0, + 3, 1, 13, 1, 3, -2, 5, 0, + 4, 1, 10, 1, 11, -1, 12, 1, 13, 0, + 3, 1, 13, -5, 2, 9, 3, 0, + 3, 1, 14, 2, 3, -4, 4, 0, + 3, 3, 10, 4, 12, -6, 14, 0, + 3, 1, 13, 3, 2, -4, 3, 0, + 1, 1, 10, 0, + 3, 1, 13, -3, 12, 9, 2, 0, + 4, 1, 10, -1, 11, 1, 12, -1, 13, 0, + 3, 2, 11, -1, 12, 2, 13, 0, + 1, 1, 14, 1, + 4, 1, 12, 1, 10, -1, 14, 1, 5, 0, + 4, 9, 13, -9, 10, 7, 2, 10, 3, 0, + 3, 1, 12, -8, 2, 13, 3, 2, + 1, 1, 12, 2, + 3, 1, 12, 8, 2,-13, 3, 2, + 2, 1, 13, 2, 4, 0, + 4, 2, 13, -1, 12, 5, 2, -6, 3, 0, + 3, 1, 13, -2, 12, 1, 3, 0, + 3, 1, 13, -3, 2, 6, 3, 0, + 4, 1, 10, -1, 11, -1, 12, -1, 13, 0, + 2, 1, 14, 2, 5, 0, + 2, 1, 10, -2, 12, 0, + 2, 2, 10, -3, 12, 0, + 4, 2, 13, -1, 12, 4, 2, -4, 3, 0, + 3, 1, 14, 4, 2, -6, 3, 0, + 2, 1, 13, 1, 2, 0, + 3, 2, 10, 1, 11, -1, 12, 0, + 4, 2, 10, -1, 11, 1, 12, -2, 13, 0, + 2, 1, 10, 1, 11, 0, + 3, 1, 10, 1, 12, -1, 13, 0, + 2, 1, 11, 1, 12, 0, + 3, 3, 12, -2, 13, -1, 3, 0, + 3, 4, 10, -1, 12, -2, 13, 0, + 3, 2, 10, 1, 12, -2, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -1, 13, 0, + 2, 2, 11, 1, 12, 0, + 2, 3, 12, -2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, -2, 13, 0, + 3, 1, 11, 3, 12, -2, 13, 0, + 3, 4, 10, 1, 12, -4, 13, 0, + 4, 2, 10, 2, 11, 1, 12, -2, 13, 0, + 4, 1, 10, 2, 11, 1, 12, -4, 13, 0, + 4, 1, 10, 1, 11, 1, 12, -4, 13, 0, + 4, 1, 10, 3, 11, -1, 12, -2, 13, 0, + 4, 1, 10, -2, 11, -1, 12, 2, 13, 0, + 3, 1, 11, 1, 12, -3, 13, 0, + 3, 1, 10, 1, 12, -4, 13, 0, + 4, 1, 10, 2, 11, -1, 12, -2, 13, 0, + 3, 3, 10, -1, 12, -4, 13, 0, + 4, 1, 10, -1, 11, -1, 12, 2, 13, 0, + 2, 1, 12, -3, 13, 0, + 4, 1, 10, -1, 11, 1, 12, -4, 13, 0, + 4, 1, 10, 1, 11, -1, 12, -2, 13, 0, + 3, 2, 10, -1, 12, -3, 13, 0, + 3, 1, 10, -1, 12, 2, 13, 0, + 3, 1, 10, -2, 11, 1, 12, 0, + 3, 1, 11, -1, 12, 3, 13, 0, + 1, 2, 13, 0, + 3, 1, 11, -1, 12, -1, 13, 0, + 3, 1, 10, -3, 13, -1, 3, 0, + 3, 1, 10, -1, 12, -2, 13, 2, + 3, 3, 10, -1, 11, -1, 12, 0, + 3, 2, 10, -1, 12, 1, 13, 0, + 4, 1, 10, 1, 11, -1, 12, 2, 13, 0, + 3, 1, 10, -1, 11, 1, 12, 0, + 2, 1, 12, 1, 13, 0, + 4, 1, 10, -1, 11, -1, 12, -2, 13, 0, + 3, 1, 10, 1, 11, -3, 12, 0, + 2, 3, 10, -1, 12, 0, + 1, 2, 10, 0, + 4, 2, 10, -1, 11, 1, 12, -1, 13, 0, + 3, 1, 13, 1, 10, 1, 11, 0, + 3, 2, 13, 3, 3, -2, 11, 0, + 2, 1, 10, 1, 12, 2, + 3, 1, 10, -3, 14, 2, 5, 0, + 3, 3, 10, -1, 14, 4, 5, 0, + 3, 1, 11, 1, 12, 1, 13, 0, + 1, 2, 12, 0, + 4, 1, 10, -2, 11, -1, 12, -2, 13, 0, + 2, 1, 10, -3, 12, 0, + 3, 3, 10, 1, 11, -1, 12, 0, + 4, 3, 10, -1, 11, 1, 12, -2, 13, 0, + 3, 2, 10, 1, 12, -1, 13, 0, + 3, 1, 10, 1, 11, 1, 12, 0, + 2, 3, 12, -1, 13, 0, + 3, 1, 10, -1, 11, -3, 12, 0, + 3, 3, 10, 1, 12, -2, 13, 0, + 3, 1, 10, 2, 11, 1, 12, 0, + 3, 1, 10, 3, 12, -2, 13, 0, + 4, 3, 10, 1, 11, 1, 12, -2, 13, 0, + 4, 1, 10, 1, 11, 3, 12, -2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, -6, 13, 0, + 3, 2, 11, 1, 12, -4, 13, 0, + 3, 2, 10, 1, 12, -6, 13, 0, + 4, 2, 10, 2, 11, -1, 12, -4, 13, 0, + 3, 1, 11, 1, 12, -4, 13, 0, + 3, 3, 11, -1, 12, -2, 13, 0, + 3, 1, 10, 1, 12, -5, 13, 0, + 4, 2, 10, 1, 11, -1, 12, -4, 13, 0, + 2, 1, 12, -4, 13, 0, + 3, 2, 11, -1, 12, -2, 13, 0, + 2, 1, 10, -4, 13, 0, + 4, 1, 10, 1, 11, -1, 12, -3, 13, 0, + 3, 2, 10, -1, 12, -4, 13, 0, + 4, 2, 10, -1, 11, -1, 12, 2, 13, 0, + 3, 1, 10, -1, 12, 3, 13, 0, + 3, 1, 11, -1, 12, 4, 13, 0, + 3, 1, 11, -1, 12, -2, 13, 0, + 3, 1, 10, -1, 12, -3, 13, 0, + 4, 2, 10, -1, 11, -1, 12, -4, 13, 0, + 3, 2, 10, -1, 12, 2, 13, 0, + 3, 2, 10, -2, 11, 1, 12, 0, + 2, 1, 10, 2, 13, 0, + 4, 1, 10, -1, 11, 1, 12, 1, 13, 0, + 2, 1, 12, 2, 13, 1, + 4, 1, 10, -1, 11, -1, 12, -3, 13, 0, + 3, 2, 10, -3, 12, -2, 13, 0, + 4, 2, 10, 1, 11, -1, 12, 2, 13, 0, + 3, 2, 10, -1, 11, 1, 12, 0, + 3, 1, 10, 1, 12, 1, 13, 0, + 3, 1, 11, 1, 12, 2, 13, 0, + 2, 4, 10, -1, 12, 0, + 2, 2, 10, 1, 12, 1, + 4, 1, 13, 1, 12, 10, 2, -2, 3, 0, + 3, 2, 11, 1, 12, 2, 13, 0, + 2, 2, 12, 1, 14, 0, + 1, 3, 12, 0, + 3, 3, 10, 1, 12, -1, 13, 0, + 3, 2, 10, 1, 11, 1, 12, 0, + 3, 4, 10, 1, 12, -2, 13, 0, + 3, 2, 10, 3, 12, -2, 13, 0, + 3, 4, 10, -9, 3, -1, 4, 0, + 4, 1, 10, 1, 11, 1, 12, -6, 13, 0, + 3, 1, 10, 1, 12, -6, 13, 0, + 4, 1, 10, 2, 11, -1, 12, -4, 13, 0, + 3, 3, 10, -1, 12, -6, 13, 0, + 4, 1, 10, -1, 11, -1, 12, 4, 13, 0, + 4, 1, 10, 1, 11, -1, 12, -4, 13, 0, + 3, 1, 10, -1, 12, 4, 13, 0, + 4, 1, 10, -2, 11, 1, 12, 2, 13, 0, + 3, 1, 10, -1, 12, -4, 13, 0, + 4, 3, 10, -1, 11, -1, 12, 2, 13, 0, + 4, 1, 10, 1, 11, -1, 12, 4, 13, 0, + 4, 1, 10, -1, 11, 1, 12, 2, 13, 0, + 2, 1, 12, 3, 13, 0, + 4, 1, 10, -1, 11, -1, 12, -4, 13, 0, + 3, 3, 10, -1, 12, 2, 13, 0, + 3, 1, 10, 1, 12, 2, 13, 0, + 3, 1, 11, 1, 12, 3, 13, 0, + 3, 1, 10, -3, 12, -2, 13, 0, + 3, 3, 10, -1, 11, 1, 12, 0, + 3, 2, 10, 1, 12, 1, 13, 0, + 4, 1, 10, 1, 11, 1, 12, 2, 13, 0, + 2, 3, 10, 1, 12, 0, + 4, 2, 10, 1, 11, 1, 12, 1, 13, 0, + 2, 1, 10, 3, 12, 0, + 3, 3, 10, 1, 11, 1, 12, 0, + 3, 5, 10, 1, 12, -2, 13, 0, + 3, 4, 14, -4, 2, 8, 3, 0, + 3, 5, 10, -9, 3, -1, 4, 0, + 4, 2, 10, 1, 11, -1, 12, -6, 13, 0, + 2, 1, 12, -6, 13, 0, + 3, 2, 11, -1, 12, -4, 13, 0, + 3, 2, 10, -1, 12, -6, 13, 0, + 3, 1, 11, -1, 12, -4, 13, 0, + 3, 2, 10, -1, 12, 4, 13, 0, + 2, 1, 12, 4, 13, 0, + 4, 2, 10, -1, 11, 1, 12, 2, 13, 0, + 3, 1, 11, 1, 12, 4, 13, 0, + 3, 1, 11, -3, 12, -2, 13, 0, + 3, 4, 10, -1, 12, 2, 13, 0, + 3, 2, 10, 1, 12, 2, 13, 0, + 4, 2, 10, 1, 11, 1, 12, 2, 13, 0, + 2, 4, 10, 1, 12, 0, + 3, 7, 12, -2, 10, -4, 5, 0, + 3, 1, 10, -1, 12, -6, 13, 0, + 4, 1, 10, -1, 11, 1, 12, 4, 13, 0, + 3, 1, 10, 1, 12, 4, 13, 0, + 4, 3, 10, -1, 11, 1, 12, 2, 13, 0, + 3, 3, 10, 1, 12, 2, 13, 0, + 2, 5, 10, 1, 12, 0, + 2, 1, 12, 6, 13, 0, + 3, 2, 10, 1, 12, 4, 13, 0, + 3, 4, 10, 1, 12, 2, 13, 0, + -1 +}; + +/* Total terms = 254, small = 254 */ +static struct plantbl liblat = { + /* { 0, 18, 18, 20, 4, 0, 0, 0, 0, 9, 3, 7, 9, 9,}, */ + /* Use max of liblon, liblat. */ + { 0, 18, 18, 20, 4, 2, 0, 0, 0, 9, 16, 7, 9, 9,}, + 2, + latargs, + lattabl, + lattabb, + lattabr, + 3.850000e+05, + 36525.0, + 1.0e-4, +}; + +/* lblon403.c */ +static int lontabr[] = {-1}; +static int lontabb[] = {-1}; +static int lontabl[] = { + -640001, + + -19, 3, + + -1, 0, + + -3, 17, + + 2, -9, + + 2, 3, + + 141, 1816, + + 2, -76, + + 78, -81, + + 3, 1, + + 50, -13, + + -12, 18, + + -6, 74, + + 19, 10, + + -19, 701, + + -26, 37, + + 36, -122, + + 131, -71, + + -40, 1, + + 61463, 12853, + + 5, -29, + + 354, 201, + + 94, -5, + + 31, 25, + + -73, -22, + + 673, 1435, + + 3844, 44, + + -44, -8, + + 195, -16, + + -827, -171768, + + 7051, -4116, + + 1036, 616, -2034, 6300, -13786, -3808, + + -118, -536, -1246, 771, 2555, 3214, + + 203, 26, + + 2975, -715, + + -743, 1286, + + -232, -50, + + 4, 234, + + -139, 475, + + 0, -98, + + -3, -11848, + + 0, 118, + + -202, 146, + + -33673, 7601, + + -150, 88, + + -1720, 1002, + + -293, 481, + + -2078, 1, + + 199, 220655, + + 137, 7459, + + -127, 28, + + -10, 2259, + + 4, 450, + + -26, 30, -76, 19043, 215, -7577830, + + -65, -45, + + -5, -14189, + + -6, -496, + + 9, 3265, + + 0, -131, + + 48, -90, + + -9, -155, + + -2, 21, + + 151, 19, + + -101, -516, + + -827, 3, 796, 2, 134, -2215850, + + -11, -1908, + + 0, 451, + + -2, 1399, + + 3, 7, + + -163, 5, + + -1582, 61, + + -22, -77215, + + 167, -471084, + + -85, -28, + + 1, -473, + + -1, 444, + + 4, 89, + + 6, -88, + + -157, -87813, + + 3, 274, + + -3, -1036, + + 7, -17005, + + -1, -332, + + 0, 50, + + -1, -228, + + -5, -2986, + + -1, -334, + + 1, -452, + + 0, 4, + + 0, -247, + + -3, -2493, + + -4, -1000, + + 0, -160, + + 0, -3163, + + -75, -74207, + + 13, 829, + + 32, 481, + + -33, -11859, + + -2, -3634, + + 7, -1611, + + 3, 520, + + -1, 2534, + + 5, -446, + + -471, 8, 399, 5160, 201, -2057189, + + 83, -2106, + + 11, 12240, + + 3, -270, + + 248, 1112, + + -63, -61809, + + -183, 594, + + 27, 25844, + + -3, 5594, + + 8, 571, + + -23, -1855, + + 477, -466, + + 0, -1257, + + 247, 1550, + + -10178, -175, 9570, -423, 2610, -45917681, + + -51, 937, + + -1001, 168, + + -168, 882, + + 1260, -2894, 4306, -1515, + + 7, 402, + + 0, 36, + + -280, -373, + + -19, 840, + + -1227, -138, + + 3486, 1478247, + + 1649, -644, + + 840, 377, + + 47, -1464, + + 167, -1251123, + + -194, -713, 133, 284429, + + 0, -191, + + -3, 1534, + + -700, 918, + + -7, -633, + + -221, -559, + + 1, 99, + + -17, -3513, + + -30, 14, + + -602, -5006, + + 908, 4178, + + 542, -379, + + 1568, 782, 528, 2761, + + -38994, -25804, + + 1696398, -324306, + + 47292, 71061, 457883, 52470, 159777, 224906030, + + -13068, -18508, + + -104, 3754, + + 541, 614, -290, 1412, + + -48, 162, + + 42, -50, + + -609, -4969, + + 44, -11435, + + -473, -412, + + 22, -6389, + + -87, 44, + + -39, 180182, + + -4186, -2227, + + -503, -208, + + 976, -512, -1016, -4403, + + 16, 25357, + + 565, -891, + + 28, 38836, + + -659, -855, + + -200, 619, + + 1, -1780, + + 24, 17531, + + 1053, 335, + + 502, 2745, -309, -1094576, + + -1, -263, + + 3, -394, + + 0, 4152, + + -1, -467, + + -339, -132142, + + -14, -11676, + + 29, 63360, + + 0, 129, + + -12, -4802, + + -1, -180, + + 2, 3424, + + 0, 45, + + -1, -155, + + -1, -74, + + 0, -134, + + -4, -1588, + + -1, -3424, + + 2, 119, + + -57, -27417, + + 0, 168, + + 0, 206, + + -21, -80823, + + 8, 2324, + + -4, 835, + + 396, -6, -244, -308040, + + 0, -294, + + -56, -1332, + + 2, -110, + + 306, 4060, -58, -1644587, + + -155, -210, + + 67, -1642, + + 27, 32070, + + 9, 3592, + + -8, -17, + + -1, 2, + + -9, -4580, + + 5, 1940, + + 5, -1217, + + 62, -862, + + -522, -1163, + + 0, 0, + + -1646, 1, 1169, 109, 1395, 23634968, + + 2, 0, + + -512, 1148, + + -9, 32, + + 0, -2749, + + 969, -4, + + 2, 351, + + 1, 105, + + 152, 97075, + + -55, -84524, + + -49, 607, 29, -242117, + + 4, 6518, + + 5, -77, + + 1, -39, + + 9, 1, + + 5, -231, + + 2296, -10, -2453, 3, 138, 7689964, + + 0, -689, + + 1, 12635, + + 5444, 372, + + 9, -1843, + + 3485, -560, + + 909, 3, -742, -1, -66, -6945414, + + 8, -7, + + -3, -181, + + 1, 1282, + + -115, -76497, + + 3, -90, + + 1, -142, + + -5, 10263, + + -33, -9479, + + 0, -657, + + 19, 15040, + + -2, 1084, + + -1, -295, + + -161, 403, + + 0, -175, + + -1, -392, + + -4, -3096, + + -9, -2928, + + 1, 332, + + -56, -43733, + + 1, 572, + + 2, -660, + + 4, 7540, + + 4, -659, + + -505, -382941, + + -3, 256, + + 2, 30, + + 76, 145296, + + -4, 4115, + + 9, 6329, + + 11, 6962, + + 0, -338, + + 1, 153, + + 2, -147, + + -270, 211, + + -519, 97, 385, 1912268, + + -1, 1495, + + -3, 223, + + 254, 152832, + + 15, 6709, + + -8, -5835, + + -12, -29016, + + 0, -5641, + + -2, 4217, + + -2, -1176, + + -496, 4, 331, 360972, + + 1, 918, + + -2, -136, + + -111, -762309, + + 2, -610, + + 1, 96, + + -11, -5468, + + 0, 4856, + + 0, -2, + + -16, -668, + + 20, 1963, + + -1, -95, + + 0, -83, + + 0, -96, + + -2, -902, + + 0, -1523, + + -14, -5691, + + -10, -18650, + + 0, 131, + + 0, 128, + + 0, 243, + + 1, 644, + + -76, 138046, + + -1, 316, + + 8, 2703, + + 15, 11758, + + -1, 16, + + 2, -2867, + + 5, 6504, + + 180, 143085, + + -1, 224, + + 86, -96384, + + 1, 471, + + 0, -407, + + -3, -2886, + + -1, -919, + + 0, 742, + + -2, 1145, + + 59, 19306, + + 0, 67, + + -61, -67569, + + -14, 11725, + + -1, -395, + + 1, 772, + + -1, -49, + + 563, 871, 1951, -22, + + -1, -711, + + 0, 240, + + -6, -3912, + + 1, 2812, + + 0, 106, + + 0, 378, + + 4, 19609, + + 6, 3331, + + 2, 930, + + 0, -37, + + 0, -502, + + 0, -1257, + + 21, 10531, + + 2, -16662, + + 0, -267, + + -1, 22, + + 6, 1104, + + -14, -5544, + + 1, -250, + + -1, 1248, + + 0, 325, + + 2, 2163, + + 2, -1421, + + 0, 73, + + -1, -67, + + 2, 771, + + -1, -2085, + + 0, 67, + + 1, 226, + + 1, 212, + + 0, 56, + +}; + +static CHAR lonargs[] = { + 0, 0, + 4, 1, 10, 3, 11,-18, 2, 13, 3, 0, + 4, -2, 12, 2, 13, 5, 2, -6, 3, 0, + 4, 2, 10, -2, 13, -2, 3, 3, 5, 0, + 3, 1, 10, -1, 14, 1, 5, 0, + 4, -2, 10, 2, 13, -5, 3, -6, 4, 0, + 2, 1, 12, -1, 14, 0, + 4, -2, 10, 2, 13, 2, 3, -2, 5, 0, + 2, 1, 3, -2, 4, 0, + 4, -1, 12, 1, 13, -3, 2, 6, 3, 0, + 1, 1, 5, 0, + 4, -1, 10, 2, 13,-15, 2, 13, 3, 0, + 4, 2, 10, -2, 13, -3, 2, 3, 3, 0, + 2, 2, 12, -2, 14, 0, + 3, 1, 10, -1, 11, -1, 13, 0, + 2, 11, 2,-18, 3, 0, + 2, 3, 2, -5, 3, 0, + 2, 2, 3, -4, 4, 0, + 2, 5, 2, -8, 3, 0, + 2, 1, 10, -1, 12, 0, + 4, -1, 12, 1, 14, 3, 2, -5, 3, 0, + 3, 6, 12, -6, 13, -4, 2, 0, + 2, 3, 3, -6, 4, 0, + 2, 5, 3, -9, 4, 0, + 4, -1, 10, 2, 13,-18, 2, 18, 3, 0, + 3, 2, 10, -2, 3, -2, 13, 0, + 2, 2, 2, -3, 3, 0, + 4, 2, 10, -2, 13, -4, 2, 5, 3, 0, + 2, 4, 3, -7, 4, 0, + 2, 2, 10, -2, 12, 0, + 2, 3, 3, -5, 4, 0, + 3, 3, 2, -4, 3, -1, 4, 2, + 3, 1, 2, -5, 3, 7, 4, 2, + 4, -2, 10, 2, 13, 5, 2, -6, 3, 0, + 2, 1, 2, -2, 3, 0, + 2, 2, 3, -3, 4, 0, + 4, -1, 12, 1, 14, 4, 2, -6, 3, 0, + 2, 1, 3, -1, 4, 0, + 2, 4, 2, -6, 3, 0, + 4, 2, 10, -2, 13, -2, 2, 2, 3, 0, + 2, 1, 2, -1, 3, 0, + 3, 2, 10, 1, 11, -2, 12, 0, + 2, 1, 3, -3, 5, 0, + 3, 2, 10, -1, 3, -2, 13, 0, + 2, 4, 3, -6, 4, 0, + 2, 1, 3, -2, 5, 0, + 2, 3, 3, -4, 4, 0, + 2, 3, 2, -4, 3, 0, + 2, 1, 10, -1, 13, 0, + 2, 1, 3, -1, 5, 0, + 2, 1, 3, -2, 6, 0, + 2, 2, 3, -2, 4, 0, + 2, 1, 3, -1, 6, 0, + 1, 1, 11, 2, + 2, 1, 3, 1, 5, 0, + 3, 1, 11, -2, 12, 2, 13, 0, + 3, 1, 10, -2, 12, 1, 13, 0, + 2, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 11, -2, 12, 0, + 2, 4, 3, -5, 4, 0, + 2, 3, 3, -3, 4, 0, + 3, 4, 10, -2, 12, -2, 13, 0, + 1, 1, 2, 0, + 2, 2, 3, -3, 5, 0, + 2, 2, 10, -2, 13, 2, + 2, 2, 3, -2, 5, 0, + 2, 3, 3, -3, 2, 0, + 3, 1, 10, 1, 11, -1, 13, 0, + 3, 3, 3, -1, 2, 1, 4, 0, + 2, 2, 3, -1, 5, 0, + 3, 1, 10, 1, 12, -2, 13, 0, + 1, 2, 11, 0, + 2, 2, 12, -2, 13, 0, + 2, 2, 2, -1, 3, 0, + 2, 4, 2, -4, 3, 0, + 2, 3, 10, -3, 13, 0, + 4, 2, 10, -2, 13, 1, 3, -1, 5, 0, + 2, 3, 3, -3, 5, 0, + 3, 2, 10, 1, 11, -2, 13, 0, + 3, 1, 10, 2, 12, -3, 13, 0, + 1, 3, 11, 0, + 3, 1, 11, 2, 12, -2, 13, 0, + 2, 5, 2, -5, 3, 0, + 2, 4, 10, -4, 13, 0, + 2, 6, 2, -6, 3, 0, + 3, 2, 10, 2, 11, -2, 13, 0, + 3, 2, 10, 2, 12, -4, 13, 0, + 3, 2, 11, 2, 12, -2, 13, 0, + 3, 4, 10, 1, 11, -4, 13, 0, + 4, 1, 10, 1, 11, 2, 12, -4, 13, 0, + 3, 1, 10, 3, 11, -2, 13, 0, + 3, 3, 10, 1, 11, -4, 13, 0, + 4, 1, 10, -2, 11, -2, 12, 2, 13, 0, + 3, 1, 10, 2, 12, -4, 13, 0, + 3, 1, 10, 2, 11, -2, 13, 0, + 3, 2, 10, 1, 11, -3, 13, 0, + 3, 1, 13, -2, 2, 1, 4, 0, + 2, 3, 10, -4, 13, 0, + 4, 1, 10, -1, 11, -2, 12, 2, 13, 0, + 4, -1, 10, 2, 13, -2, 2, 2, 3, 0, + 2, 1, 10, -3, 11, 0, + 2, 2, 12, -3, 13, 0, + 2, 2, 11, -1, 13, 0, + 3, 1, 10, 1, 11, -2, 13, 2, + 4, -1, 10, 2, 13, -1, 3, 1, 5, 0, + 2, 2, 10, -3, 13, 0, + 3, 3, 10, -1, 11, -4, 13, 0, + 3, 4, 11, 2, 13,-11, 2, 0, + 3, 1, 10, -2, 12, 2, 13, 0, + 3, 1, 12, -2, 13, 1, 5, 0, + 2, 1, 10, -2, 11, 0, + 2, 1, 11, -1, 13, 0, + 3, 1, 10, -2, 13, 1, 5, 0, + 3, 1, 10, -2, 3, 2, 5, 0, + 3, 18, 2,-18, 3, 2, 5, 0, + 3, 1, 10, -3, 2, 3, 3, 0, + 3, 2, 13, 16, 11,-18, 2, 0, + 2, 1, 10, -2, 13, 2, + 3, 1, 13, -2, 10, 5, 4, 0, + 3, 2, 12, -2, 14, 7, 2, 0, + 3, 1, 10, -2, 3, 3, 5, 0, + 3, 1, 12, -1, 3, -2, 5, 1, + 3, 2, 10, -1, 11, -3, 13, 0, + 3, 3, 10, -2, 12, -2, 13, 0, + 2, 8, 2, -1, 3, 0, + 4, 1, 10, 1, 11, -2, 12, 2, 13, 0, + 3, 1, 12, -2, 14, 2, 4, 0, + 2, 1, 10, -1, 11, 0, + 3, 8, 2, -5, 3, 8, 4, 0, + 2, 18, 2,-17, 3, 0, + 3, 1, 10, -1, 3, 1, 5, 0, + 1, 1, 13, 0, + 3, 1, 10, -1, 11, -2, 13, 1, + 3, 1, 10, 1, 11, -2, 12, 0, + 3, 1, 10, -1, 2, 1, 3, 0, + 3, 2, 13, -8, 2, 1, 3, 0, + 2, 3, 10, -2, 12, 0, + 3, 2, 10, -1, 12, -1, 5, 0, + 3, 3, 10, -2, 11, -2, 13, 0, + 3, 2, 10, -1, 11, -1, 13, 0, + 3, 2, 10, 1, 3, -2, 4, 0, + 3, 1, 12, -1, 10, -1, 14, 0, + 4, -1, 10, 2, 13, 2, 3, -3, 5, 0, + 3, 2, 13, -4, 2, -5, 3, 0, + 3, 2, 12, 2, 10, -3, 14, 1, + 2, 1, 12, -2, 5, 0, + 2, 10, 2, -3, 11, 0, + 1, 1, 10, 2, + 3, 1, 12, -2, 10, -2, 5, 0, + 2, 18, 2,-16, 3, 0, + 2, 2, 12, -3, 14, 1, + 3, 1, 13,-17, 2, 2, 11, 0, + 3, 1, 10, 1, 2, -3, 4, 0, + 3, 1, 12, 1, 10, -1, 14, 0, + 4, -1, 10, 2, 13, 2, 3, -2, 5, 0, + 3, 1, 10, -1, 3, 2, 4, 0, + 4, -1, 10, 2, 13, 3, 2, -3, 3, 0, + 4, 1, 10, -2, 11, 2, 12, -2, 13, 0, + 2, 1, 11, 1, 13, 0, + 3, 8, 2, 2, 3, -3, 4, 0, + 1, 1, 12, 0, + 3, 6, 2, 9, 3,-10, 4, 1, + 3, 1, 10, -2, 11, -2, 13, 0, + 2, 8, 2, 1, 4, 0, + 2, 1, 10, -2, 12, 0, + 2, 11, 2, -4, 3, 0, + 3, 3, 11, -2, 14, 6, 2, 0, + 3, 3, 10, -1, 11, -2, 13, 0, + 2, 2, 10, -1, 13, 0, + 3, 1, 12, -2, 2, 4, 3, 0, + 2, 1, 10, 1, 11, 1, + 4, 1, 10, -1, 11, 2, 12, -2, 13, 0, + 2, 2, 11, 1, 13, 0, + 2, 2, 12, -1, 13, 0, + 3, 1, 10, -1, 11, -2, 12, 0, + 2, 3, 10, -2, 13, 0, + 2, 1, 10, 2, 11, 0, + 3, 1, 10, 2, 12, -2, 13, 0, + 3, 1, 11, 2, 12, -1, 13, 0, + 3, 3, 10, 1, 11, -2, 13, 0, + 2, 1, 10, 3, 11, 0, + 4, 1, 10, 1, 11, 2, 12, -2, 13, 0, + 2, 5, 10, -4, 13, 0, + 3, 3, 10, 2, 11, -2, 13, 0, + 3, 3, 10, 2, 12, -4, 13, 0, + 2, 4, 11, -2, 13, 0, + 3, 2, 10, 2, 11, -4, 13, 0, + 2, 3, 11, -2, 13, 0, + 3, 1, 10, 2, 11, -3, 13, 0, + 3, 2, 10, 1, 11, -4, 13, 0, + 2, 3, 10, -5, 13, 0, + 2, 2, 12, -4, 13, 0, + 2, 2, 11, -2, 13, 0, + 3, 1, 10, 1, 11, -3, 13, 0, + 3, 2, 13, -2, 3, 2, 5, 0, + 2, 2, 10, -4, 13, 1, + 4, 2, 10, -1, 11, -2, 12, 2, 13, 0, + 2, 2, 14, -2, 2, 0, + 3, 1, 10, -2, 12, 3, 13, 0, + 2, 1, 11, -2, 13, 1, + 3, 2, 14, -2, 2, 3, 5, 0, + 3, 2, 13, -1, 3, 1, 5, 0, + 2, 1, 10, -3, 13, 0, + 3, 2, 10, -1, 11, -4, 13, 0, + 4, 2, 10, 1, 11, -2, 12, -2, 13, 0, + 3, 2, 13, 1, 14, -8, 2, 0, + 3, 2, 10, -2, 12, 2, 13, 0, + 2, 2, 10, -2, 11, 0, + 3, 1, 10, -1, 11, 1, 13, 0, + 3, 1, 12, -2, 13, -1, 14, 0, + 3, 2, 13, -8, 2, 13, 3, 0, + 3, 3, 10, -5, 13, 5, 4, 0, + 1, 2, 13, 2, + 3, 3, 10, -1, 13, 5, 4, 0, + 3, 2, 13, 8, 2,-13, 3, 0, + 2, 2, 11, -2, 12, 0, + 3, 1, 10, -1, 11, -3, 13, 0, + 3, 1, 10, -1, 12, -2, 13, 0, + 3, 2, 10, -2, 11, -4, 13, 0, + 3, 2, 10, -2, 12, -2, 13, 0, + 2, 2, 10, -1, 11, 0, + 2, 1, 10, 1, 13, 0, + 2, 1, 11, 2, 13, 1, + 2, 1, 11, -2, 12, 0, + 3, 1, 10, -2, 12, -1, 13, 0, + 2, 4, 10, -2, 12, 0, + 2, 3, 10, -1, 12, 0, + 3, 3, 10, -1, 11, -1, 13, 0, + 1, 2, 10, 2, + 2, 2, 14, -2, 5, 0, + 3, 1, 10, 1, 11, 1, 13, 0, + 2, 1, 10, 1, 12, 0, + 2, 2, 11, 2, 13, 0, + 2, 1, 12, 1, 14, 0, + 1, 2, 12, 2, + 2, 1, 10, -3, 12, 0, + 3, 4, 10, -1, 11, -2, 13, 0, + 2, 3, 10, -1, 13, 0, + 2, 2, 10, 1, 11, 0, + 3, 1, 10, 2, 11, 1, 13, 0, + 3, 1, 10, 2, 12, -1, 13, 0, + 2, 1, 11, 2, 12, 0, + 2, 4, 10, -2, 13, 0, + 2, 2, 10, 2, 11, 0, + 3, 2, 10, 2, 12, -2, 13, 0, + 2, 4, 12, -2, 13, 0, + 3, 4, 10, 1, 11, -2, 13, 0, + 3, 2, 13, 11, 2,-13, 3, 0, + 3, 1, 10, 3, 11, -4, 13, 0, + 3, 3, 10, 1, 11, -6, 13, 0, + 3, 1, 10, 2, 11, -4, 13, 0, + 2, 3, 10, -6, 13, 0, + 3, 1, 10, -3, 11, 2, 13, 0, + 3, 1, 10, 1, 11, -4, 13, 0, + 2, 2, 10, -5, 13, 0, + 3, 1, 10, -2, 12, 4, 13, 0, + 3, 1, 10, -2, 11, 2, 13, 0, + 2, 1, 11, -3, 13, 0, + 2, 1, 10, -4, 13, 0, + 4, 1, 10, 2, 11, -2, 12, -2, 13, 0, + 3, 3, 10, -2, 12, -4, 13, 0, + 3, 1, 10, -1, 11, 2, 13, 0, + 1, 3, 13, 0, + 3, 1, 10, -1, 11, -4, 13, 0, + 4, 1, 10, 1, 11, -2, 12, -2, 13, 0, + 3, 3, 10, -2, 12, 2, 13, 0, + 2, 3, 10, -2, 11, 0, + 3, 2, 10, -1, 11, 1, 13, 0, + 3, 1, 12, 2, 13, -2, 5, 0, + 2, 1, 10, 2, 13, 1, + 2, 1, 11, 3, 13, 0, + 3, 1, 10, -2, 11, -4, 13, 0, + 3, 1, 10, -2, 12, -2, 13, 0, + 2, 3, 10, -1, 11, 0, + 2, 2, 10, 1, 13, 0, + 3, 1, 10, 1, 11, 2, 13, 0, + 3, 1, 10, -1, 11, 2, 12, 0, + 2, 2, 12, 1, 13, 0, + 4, 1, 10, -1, 11, -2, 12, -2, 13, 0, + 1, 3, 10, 1, + 3, 2, 10, 1, 11, 1, 13, 0, + 3, 1, 10, 2, 11, 2, 13, 0, + 2, 1, 10, 2, 12, 0, + 3, 1, 11, 2, 12, 1, 13, 0, + 2, 4, 10, -1, 13, 0, + 2, 3, 10, 1, 11, 0, + 3, 1, 10, 1, 11, 2, 12, 0, + 4, 1, 10, -1, 11, 4, 12, -2, 13, 0, + 2, 5, 10, -2, 13, 0, + 3, 3, 10, 2, 12, -2, 13, 0, + 3, 1, 10, 4, 12, -2, 13, 0, + 3, 2, 10, 2, 11, -6, 13, 0, + 2, 3, 11, -4, 13, 0, + 3, 2, 10, 1, 11, -6, 13, 0, + 2, 2, 11, -4, 13, 0, + 2, 2, 10, -6, 13, 0, + 2, 1, 11, -4, 13, 0, + 2, 1, 10, -5, 13, 0, + 3, 2, 10, -1, 11, -6, 13, 0, + 4, 2, 10, 1, 11, -2, 12, -4, 13, 0, + 3, 2, 10, -2, 11, 2, 13, 0, + 1, 4, 13, 0, + 3, 2, 11, -2, 12, -2, 13, 0, + 3, 2, 10, -2, 12, -4, 13, 0, + 3, 2, 10, -1, 11, 2, 13, 0, + 2, 1, 10, 3, 13, 0, + 2, 1, 11, 4, 13, 0, + 3, 1, 11, -2, 12, -2, 13, 0, + 2, 2, 10, 2, 13, 0, + 3, 1, 10, 1, 11, 3, 13, 0, + 2, 2, 12, 2, 13, 0, + 2, 4, 10, -1, 11, 0, + 2, 3, 10, 1, 13, 0, + 3, 2, 10, 1, 11, 2, 13, 0, + 3, 2, 10, -1, 11, 2, 12, 0, + 3, 1, 10, 2, 12, 1, 13, 0, + 3, 1, 11, 2, 12, 2, 13, 0, + 1, 4, 10, 0, + 3, 3, 10, 1, 11, 1, 13, 0, + 2, 2, 10, 2, 12, 0, + 1, 4, 12, 0, + 2, 4, 10, 1, 11, 0, + 3, 2, 10, 1, 11, 2, 12, 0, + 2, 6, 10, -2, 13, 0, + 3, 5, 12, -1, 14, 2, 4, 1, + 3, 1, 10, 1, 11, -6, 13, 0, + 3, 1, 10, -2, 11, 4, 13, 0, + 2, 1, 10, -6, 13, 0, + 3, 1, 10, -1, 11, 4, 13, 0, + 3, 1, 10, -1, 11, -6, 13, 0, + 4, 1, 10, 1, 11, -2, 12, -4, 13, 0, + 2, 1, 10, 4, 13, 0, + 3, 1, 10, -2, 12, -4, 13, 0, + 3, 3, 10, -1, 11, 2, 13, 0, + 2, 2, 10, 3, 13, 0, + 3, 1, 10, 1, 11, 4, 13, 0, + 4, 1, 10, -1, 11, 2, 12, 2, 13, 0, + 2, 3, 10, 2, 13, 0, + 3, 1, 10, 2, 12, 2, 13, 0, + 3, 3, 10, 1, 11, 2, 13, 0, + 3, 1, 10, -1, 11, 4, 12, 0, + 1, 5, 10, 0, + 2, 3, 10, 2, 12, 0, + 2, 1, 11, -6, 13, 0, + 1, 6, 13, 0, + 3, 2, 10, -1, 11, 4, 13, 0, + 2, 2, 10, 4, 13, 0, + 2, 2, 12, 4, 13, 0, + 3, 4, 10, -1, 11, 2, 13, 0, + 3, 2, 10, 1, 11, 4, 13, 0, + 2, 4, 10, 2, 13, 0, + 3, 2, 10, 2, 12, 2, 13, 0, + 1, 6, 10, 0, + 2, 1, 10, 6, 13, 0, + 2, 3, 10, 4, 13, 0, + 2, 5, 10, 2, 13, 0, + -1 +}; + +/* Total terms = 356, small = 356 */ +static struct plantbl liblon = { + /* { 0, 18, 18, 10, 3, 2, 0, 0, 0, 6, 16, 6, 6, 3,}, */ + /* Use max of liblon, liblat. */ + { 0, 18, 18, 20, 4, 2, 0, 0, 0, 9, 16, 7, 9, 9,}, + 2, + lonargs, + lontabl, + lontabb, + lontabr, + 3.850000e+05, + 36525.0, + 1.0e-4, +}; + + +/* given a Julian date, return the lunar libration in lat and long, in rads. + */ +void +llibration (double JD, double *llatp, double *llonp) +{ + double lg, lt; /* arc seconds */ + + lg = gplan (JD, &liblon); + lt = gplan (JD, &liblat); + + *llonp = degrad (lg/3600.0); + *llatp = degrad (lt/3600.0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: libration.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/magdecl.c b/libastro/magdecl.c new file mode 100644 index 0000000..f3efa98 --- /dev/null +++ b/libastro/magdecl.c @@ -0,0 +1,381 @@ +/* DoD NIMA World Magnetic Model. + * from http://www.ngdc.noaa.gov + * +#define TEST_MAIN + */ + + +#include +#include +#include +#include + +#include "astro.h" + +static char mfn[] = "wmm.cof"; /* file with model coefficients */ + +static int geomag(FILE *wmmdat, int *maxdeg); +static int geomg1(FILE *wmmdat, float alt, float glat, float glon, + float t, float *dec, float *mdp, float *ti, float *gv); + +/* compute magnetic declination for given location, elevation and time. + * sign is such that mag bearing = true az + mag deviation. + * return 0 if ok, -1 if no model file, -2 if time outside model range. + * fill err[] with excuse if return < 0. + */ +int +magdecl ( +double l, double L, /* geodesic lat, +N, long, +E, rads */ +double e, /* elevation, m */ +double y, /* time, decimal year */ +char *dir, /* dir for model file */ +double *mdp, /* magnetic deviation, rads E of N */ +char *err) /* err message if return < 0 */ +{ + float dlat = raddeg(l); + float dlon = raddeg(L); + float alt = e/1000.; + int maxdeg = 12; + float dec, dp, ti, gv; + char mfile[1024]; + FILE *wmmdat; + int s; + + /* open model file */ + sprintf (mfile, "%s/%s", dir, mfn); + wmmdat = fopen (mfile, "r"); + if (!wmmdat) { + sprintf (err, "%s: %s", mfile, strerror(errno)); + return (-1); + } + + /* compute deviation */ + geomag(wmmdat, &maxdeg); + s = geomg1(wmmdat,alt,dlat,dlon,y,&dec,&dp,&ti,&gv); + fclose(wmmdat); + if (s < 0) { + sprintf (err, "%s: Magnetic model only available for %g .. %g. See http://www.ngdc.noaa.gov", mfile, ti, ti+5); + return (-2); + } + *mdp = degrad(dec); + return (0); +} + +#if defined(TEST_MAIN) + +int +main(int ac, char *av[]) +{ + char err[1024]; + float altm, dlat, dlon; + float t; + double dec; + + S1: + printf("\n\n\n ENTER LATITUDE IN DECIMAL DEGREES (+25.0)\n"); + scanf("%f", &dlat); + + printf(" ENTER LONGITUDE IN DECIMAL DEGREES (-100.0)\n"); + scanf("%f", &dlon); + + printf(" ENTER ALTITUDE IN METERS\n"); + scanf("%f", &altm); + + printf(" ENTER TIME IN DECIMAL YEAR\n"); + scanf("%f",&t); + + if (magdecl (degrad(dlat), degrad(dlon), altm, t, "auxil", &dec, + err) < 0) { + printf ("%s\n", err); + return(1); + } + + printf("\n LATITUDE: = %-7.2f DEG",dlat); + printf("\n LONGITUDE: = %-7.2f DEG\n",dlon); + printf("\n ALTITUDE = %.2f METERS",altm); + printf("\n DATE = %-5.1f\n",t); + + printf("\n\t\t\t OUTPUT\n\t\t\t ------"); + + printf("\n DEC = %-7.2f DEG", raddeg(dec)); + + printf("\n\n\n DO YOU NEED MORE POINT DATA? (y or n)\n"); + scanf("%s", err); + if ((err[0] =='y')||(err[0] == 'Y')) goto S1; + + return(0); +} +#endif /* defined(TEST_MAIN) */ + +/************************************************************************* + * return 0 if ok, -1 if time is out of range with base epoc in *ti + */ + +static int E0000(FILE *wmmdat, int IENTRY, int *maxdeg, float alt, +float glat, float glon, float t, float *dec, float *mdp, float *ti, +float *gv) +{ + static int maxord,i,icomp,n,m,j,D1,D2,D3,D4; + static float c[13][13],cd[13][13],tc[13][13],dp[13][13],snorm[169], + sp[13],cp[13],fn[13],fm[13],pp[13],k[13][13],pi,dtr,a,b,re, + a2,b2,c2,a4,b4,c4,epoc,gnm,hnm,dgnm,dhnm,flnmj,otime,oalt, + olat,olon,dt,rlon,rlat,srlon,srlat,crlon,crlat,srlat2, + crlat2,q,q1,q2,ct,st,r2,r,d,ca,sa,aor,ar,br,bt,bp,bpp, + par,temp1,temp2,parp,bx,by,bz,bh; + static char model[20], c_str[81], c_new[5]; + static float *p = snorm; + + switch(IENTRY){case 0: goto GEOMAG; case 1: goto GEOMG1;} + +GEOMAG: + +/* INITIALIZE CONSTANTS */ + maxord = *maxdeg; + sp[0] = 0.0; + cp[0] = *p = pp[0] = 1.0; + dp[0][0] = 0.0; + a = 6378.137; + b = 6356.7523142; + re = 6371.2; + a2 = a*a; + b2 = b*b; + c2 = a2-b2; + a4 = a2*a2; + b4 = b2*b2; + c4 = a4 - b4; + +/* READ WORLD MAGNETIC MODEL SPHERICAL HARMONIC COEFFICIENTS */ + c[0][0] = 0.0; + cd[0][0] = 0.0; + fgets(c_str, 80, wmmdat); + sscanf(c_str,"%f%s",&epoc,model); +S3: + fgets(c_str, 80, wmmdat); +/* CHECK FOR LAST LINE IN FILE */ + for (i=0; i<4 && (c_str[i] != '\0'); i++) + { + c_new[i] = c_str[i]; + c_new[i+1] = '\0'; + } + icomp = strcmp("9999", c_new); + if (icomp == 0) goto S4; +/* END OF FILE NOT ENCOUNTERED, GET VALUES */ + sscanf(c_str,"%d%d%f%f%f%f",&n,&m,&gnm,&hnm,&dgnm,&dhnm); + if (m <= n) + { + c[m][n] = gnm; + cd[m][n] = dgnm; + if (m != 0) + { + c[n][m-1] = hnm; + cd[n][m-1] = dhnm; + } + } + goto S3; + +/* CONVERT SCHMIDT NORMALIZED GAUSS COEFFICIENTS TO UNNORMALIZED */ +S4: + *snorm = 1.0; + for (n=1; n<=maxord; n++) + { + *(snorm+n) = *(snorm+n-1)*(float)(2*n-1)/(float)n; + j = 2; + for (m=0,D1=1,D2=(n-m+D1)/D1; D2>0; D2--,m+=D1) + { + k[m][n] = (float)(((n-1)*(n-1))-(m*m))/(float)((2*n-1)*(2*n-3)); + if (m > 0) + { + flnmj = (float)((n-m+1)*j)/(float)(n+m); + *(snorm+n+m*13) = *(snorm+n+(m-1)*13)*sqrt(flnmj); + j = 1; + c[n][m-1] = *(snorm+n+m*13)*c[n][m-1]; + cd[n][m-1] = *(snorm+n+m*13)*cd[n][m-1]; + } + c[m][n] = *(snorm+n+m*13)*c[m][n]; + cd[m][n] = *(snorm+n+m*13)*cd[m][n]; + } + fn[n] = (float)(n+1); + fm[n] = (float)n; + } + k[1][1] = 0.0; + + otime = oalt = olat = olon = -1000.0; + return (0); + +/*************************************************************************/ + +GEOMG1: + + dt = t - epoc; + if (otime < 0.0 && (dt < 0.0 || dt > 5.0)) { + *ti = epoc; /* pass back base time for diag msg */ + return (-1); + } + + pi = 3.14159265359; + dtr = pi/180.0; + rlon = glon*dtr; + rlat = glat*dtr; + srlon = sin(rlon); + srlat = sin(rlat); + crlon = cos(rlon); + crlat = cos(rlat); + srlat2 = srlat*srlat; + crlat2 = crlat*crlat; + sp[1] = srlon; + cp[1] = crlon; + +/* CONVERT FROM GEODETIC COORDS. TO SPHERICAL COORDS. */ + if (alt != oalt || glat != olat) + { + q = sqrt(a2-c2*srlat2); + q1 = alt*q; + q2 = ((q1+a2)/(q1+b2))*((q1+a2)/(q1+b2)); + ct = srlat/sqrt(q2*crlat2+srlat2); + st = sqrt(1.0-(ct*ct)); + r2 = (alt*alt)+2.0*q1+(a4-c4*srlat2)/(q*q); + r = sqrt(r2); + d = sqrt(a2*crlat2+b2*srlat2); + ca = (alt+d)/r; + sa = c2*crlat*srlat/(r*d); + } + if (glon != olon) + { + for (m=2; m<=maxord; m++) + { + sp[m] = sp[1]*cp[m-1]+cp[1]*sp[m-1]; + cp[m] = cp[1]*cp[m-1]-sp[1]*sp[m-1]; + } + } + aor = re/r; + ar = aor*aor; + br = bt = bp = bpp = 0.0; + for (n=1; n<=maxord; n++) + { + ar = ar*aor; + for (m=0,D3=1,D4=(n+m+D3)/D3; D4>0; D4--,m+=D3) + { +/* + COMPUTE UNNORMALIZED ASSOCIATED LEGENDRE POLYNOMIALS + AND DERIVATIVES VIA RECURSION RELATIONS +*/ + if (alt != oalt || glat != olat) + { + if (n == m) + { + *(p+n+m*13) = st**(p+n-1+(m-1)*13); + dp[m][n] = st*dp[m-1][n-1]+ct**(p+n-1+(m-1)*13); + goto S50; + } + if (n == 1 && m == 0) + { + *(p+n+m*13) = ct**(p+n-1+m*13); + dp[m][n] = ct*dp[m][n-1]-st**(p+n-1+m*13); + goto S50; + } + if (n > 1 && n != m) + { + if (m > n-2) *(p+n-2+m*13) = 0.0; + if (m > n-2) dp[m][n-2] = 0.0; + *(p+n+m*13) = ct**(p+n-1+m*13)-k[m][n]**(p+n-2+m*13); + dp[m][n] = ct*dp[m][n-1] - st**(p+n-1+m*13)-k[m][n]*dp[m][n-2]; + } + } +S50: +/* + TIME ADJUST THE GAUSS COEFFICIENTS +*/ + if (t != otime) + { + tc[m][n] = c[m][n]+dt*cd[m][n]; + if (m != 0) tc[n][m-1] = c[n][m-1]+dt*cd[n][m-1]; + } +/* + ACCUMULATE TERMS OF THE SPHERICAL HARMONIC EXPANSIONS +*/ + par = ar**(p+n+m*13); + if (m == 0) + { + temp1 = tc[m][n]*cp[m]; + temp2 = tc[m][n]*sp[m]; + } + else + { + temp1 = tc[m][n]*cp[m]+tc[n][m-1]*sp[m]; + temp2 = tc[m][n]*sp[m]-tc[n][m-1]*cp[m]; + } + bt = bt-ar*temp1*dp[m][n]; + bp += (fm[m]*temp2*par); + br += (fn[n]*temp1*par); +/* + SPECIAL CASE: NORTH/SOUTH GEOGRAPHIC POLES +*/ + if (st == 0.0 && m == 1) + { + if (n == 1) pp[n] = pp[n-1]; + else pp[n] = ct*pp[n-1]-k[m][n]*pp[n-2]; + parp = ar*pp[n]; + bpp += (fm[m]*temp2*parp); + } + } + } + if (st == 0.0) bp = bpp; + else bp /= st; +/* + ROTATE MAGNETIC VECTOR COMPONENTS FROM SPHERICAL TO + GEODETIC COORDINATES +*/ + bx = -bt*ca-br*sa; + by = bp; + bz = bt*sa-br*ca; +/* + COMPUTE DECLINATION (DEC), INCLINATION (DIP) AND + TOTAL INTENSITY (TI) +*/ + bh = sqrt((bx*bx)+(by*by)); + *ti = sqrt((bh*bh)+(bz*bz)); + *dec = atan2(by,bx)/dtr; + *mdp = atan2(bz,bh)/dtr; +/* + COMPUTE MAGNETIC GRID VARIATION IF THE CURRENT + GEODETIC POSITION IS IN THE ARCTIC OR ANTARCTIC + (I.E. GLAT > +55 DEGREES OR GLAT < -55 DEGREES) + + OTHERWISE, SET MAGNETIC GRID VARIATION TO -999.0 +*/ + *gv = -999.0; + if (fabs(glat) >= 55.) + { + if (glat > 0.0 && glon >= 0.0) *gv = *dec-glon; + if (glat > 0.0 && glon < 0.0) *gv = *dec+fabs(glon); + if (glat < 0.0 && glon >= 0.0) *gv = *dec+glon; + if (glat < 0.0 && glon < 0.0) *gv = *dec-fabs(glon); + if (*gv > +180.0) *gv -= 360.0; + if (*gv < -180.0) *gv += 360.0; + } + otime = t; + oalt = alt; + olat = glat; + olon = glon; + return (0); +} + +/*************************************************************************/ + +static int +geomag(FILE *wmmdat, int *maxdeg) +{ + return (E0000(wmmdat,0,maxdeg,0.0,0.0,0.0,0.0,NULL,NULL,NULL,NULL)); +} + +/*************************************************************************/ + +static int +geomg1(FILE *wmmdat, float alt, float glat, float glon, float t, +float *dec, float *mdp, float *ti, float *gv) +{ + return (E0000(wmmdat,1,NULL,alt,glat,glon,t,dec,mdp,ti,gv)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: magdecl.c,v $ $Date: 2004/10/12 15:21:48 $ $Revision: 1.6 $ $Name: $"}; diff --git a/libastro/marsmoon.c b/libastro/marsmoon.c new file mode 100644 index 0000000..b09b135 --- /dev/null +++ b/libastro/marsmoon.c @@ -0,0 +1,265 @@ +/* mars moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double JD, char *dir, MoonData md[M_NMOONS]); +static void moonradec (double msize, MoonData md[M_NMOONS]); +static void moonSVis (Obj *sop, Obj *mop, MoonData md[M_NMOONS]); +static void moonEVis (MoonData md[M_NMOONS]); +static void moonPShad (Obj *sop, Obj *mop, MoonData md[M_NMOONS]); +static void moonTrans (MoonData md[M_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData mmd[M_NMOONS] = { + {"Mars", NULL}, + {"Phobos", "I"}, + {"Deimos", "II"}, +}; +static double sizemjd; + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(317.61) +#define POLE_DEC degrad(52.85) + + +/* get mars info in md[0], moon info in md[1..M_NMOONS-1]. + * if !dir always use bruton model. + * if !mop caller just wants md[] for names + * N.B. we assume sop and mop are updated. + */ +void +marsm_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *sop, /* Sun */ +Obj *mop, /* mars */ +double *sizep, /* mars's angular diam, rads */ +double *polera, double *poledec,/* pole location */ +MoonData md[M_NMOONS]) /* return info */ +{ + double JD, dmag; + + /* always copy back at least for name */ + memcpy (md, mmd, sizeof(mmd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !mop) { + if (mop) { + *sizep = sizemjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = mop->s_ra; + md[0].dec = mop->s_dec; + md[0].mag = get_mag(mop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from mop */ + *sizep = degrad(mop->s_size/3600.0); + + /* from Pasachoff/Menzel: brightest @ .6 AU */ + dmag = 5.0*log10(mop->s_edist + 0.4); + md[1].mag = 11.8 + dmag; + md[2].mag = 12.9 + dmag; + + /* get moon x,y,z from BDL if possible */ + if (!dir || use_bdl (JD, dir, md) < 0) { + int i; + for (i = 1; i < M_NMOONS; i++) + md[i].x = md[i].y = md[i].z = 0.0; + fprintf (stderr, "No mars model available\n"); + } + + /* set visibilities */ + moonSVis (sop, mop, md); + moonPShad (sop, mop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + sizemjd = *sizep; + memcpy (mmd, md, sizeof(mmd)); +} + +/* hunt for BDL file in dir[] and use if possible. + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[M_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define MRAU .00002269 /* Mars radius, AU */ + double x[M_NMOONS], y[M_NMOONS], z[M_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "mars.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "mars.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != M_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, M_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < M_NMOONS; i++) { + md[i].x = x[i-1]/MRAU; /* we want mars radii +E */ + md[i].y = -y[i-1]/MRAU; /* we want mars radii +S */ + md[i].z = -z[i-1]/MRAU; /* we want mars radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* given mars loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in mars radii,find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double msize, /* mars diameter, rads */ +MoonData md[M_NMOONS]) /* fill in RA and Dec */ +{ + double mrad = msize/2; + double mra = md[0].ra; + double mdec = md[0].dec; + int i; + + for (i = 1; i < M_NMOONS; i++) { + double dra = mrad * md[i].x; + double ddec = mrad * md[i].y; + md[i].ra = mra + dra; + md[i].dec = mdec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *sop, /* SUN */ +Obj *mop, /* mars */ +MoonData md[M_NMOONS]) +{ + double esd = sop->s_edist; + double eod = mop->s_edist; + double sod = mop->s_sdist; + double soa = degrad(mop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*mop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[M_NMOONS]) +{ + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *sop, /* SUN */ +Obj *mop, /* mars */ +MoonData md[M_NMOONS]) +{ + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (mop, sop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[M_NMOONS]) +{ + int i; + + for (i = 1; i < M_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: marsmoon.c,v $ $Date: 2006/08/29 03:16:47 $ $Revision: 1.8 $ $Name: $"}; diff --git a/libastro/misc.c b/libastro/misc.c new file mode 100644 index 0000000..5047137 --- /dev/null +++ b/libastro/misc.c @@ -0,0 +1,503 @@ +/* misc handy functions. + * every system has such, no? + * 4/20/98 now_lst() always just returns apparent time + */ + +#include +#include +#include +#include + +#include "astro.h" + +/* zero from loc for len bytes */ +void +zero_mem (void *loc, unsigned len) +{ + (void) memset (loc, 0, len); +} + +/* given min and max and an approximate number of divisions desired, + * fill in ticks[] with nicely spaced values and return how many. + * N.B. return value, and hence number of entries to ticks[], might be as + * much as 2 more than numdiv. + */ +int +tickmarks (double min, double max, int numdiv, double ticks[]) +{ + static int factor[] = { 1, 2, 5 }; + double minscale; + double delta; + double lo; + double v; + int n; + + minscale = fabs(max - min); + delta = minscale/numdiv; + for (n=0; n < (int)(sizeof(factor)/sizeof(factor[0])); n++) { + double scale; + double x = delta/factor[n]; + if ((scale = (pow(10.0, ceil(log10(x)))*factor[n])) < minscale) + minscale = scale; + } + delta = minscale; + + lo = floor(min/delta); + for (n = 0; (v = delta*(lo+n)) < max+delta; ) + ticks[n++] = v; + + return (n); +} + +/* given an Obj *, return its type as a descriptive string. + * if it's of type fixed then return its class description. + * N.B. we return the address of static storage -- do not free or change. + */ +char * +obj_description (Obj *op) +{ + typedef struct { + char classcode; + char *desc; + } CC; + +#define NFCM ((int)(sizeof(fixed_class_map)/sizeof(fixed_class_map[0]))) + static CC fixed_class_map[] = { + {'A', "Cluster of Galaxies"}, + {'B', "Binary System"}, + {'C', "Globular Cluster"}, + {'D', "Double Star"}, + {'F', "Diffuse Nebula"}, + {'G', "Spiral Galaxy"}, + {'H', "Spherical Galaxy"}, + {'J', "Radio"}, + {'K', "Dark Nebula"}, + {'L', "Pulsar"}, + {'M', "Multiple Star"}, + {'N', "Bright Nebula"}, + {'O', "Open Cluster"}, + {'P', "Planetary Nebula"}, + {'Q', "Quasar"}, + {'R', "Supernova Remnant"}, + {'S', "Star"}, + {'T', "Star-like Object"}, + {'U', "Cluster, with nebulosity"}, + {'V', "Variable Star"}, + {'Y', "Supernova"}, + }; + +#define NBCM ((int)(sizeof(binary_class_map)/sizeof(binary_class_map[0]))) + static CC binary_class_map[] = { + {'a', "Astrometric binary"}, + {'c', "Cataclysmic variable"}, + {'e', "Eclipsing binary"}, + {'x', "High-mass X-ray binary"}, + {'y', "Low-mass X-ray binary"}, + {'o', "Occultation binary"}, + {'s', "Spectroscopic binary"}, + {'t', "1-line spectral binary"}, + {'u', "2-line spectral binary"}, + {'v', "Spectrum binary"}, + {'b', "Visual binary"}, + {'d', "Visual binary, apparent"}, + {'q', "Visual binary, optical"}, + {'r', "Visual binary, physical"}, + {'p', "Exoplanet"}, + }; + + switch (op->o_type) { + case FIXED: + if (op->f_class) { + int i; + for (i = 0; i < NFCM; i++) + if (fixed_class_map[i].classcode == op->f_class) + return (fixed_class_map[i].desc); + } + return ("Fixed"); + case PARABOLIC: + return ("Solar - Parabolic"); + case HYPERBOLIC: + return ("Solar - Hyperbolic"); + case ELLIPTICAL: + return ("Solar - Elliptical"); + case BINARYSTAR: + if (op->f_class) { + int i; + for (i = 0; i < NFCM; i++) + if (binary_class_map[i].classcode == op->f_class) + return (binary_class_map[i].desc); + } + return ("Binary system"); + case PLANET: { + static char nsstr[16]; + static Obj *biop; + + if (op->pl_code == SUN) + return ("Star"); + if (op->pl_code == MOON) + return ("Moon of Earth"); + if (op->pl_moon == X_PLANET) + return ("Planet"); + if (!biop) + getBuiltInObjs (&biop); + sprintf (nsstr, "Moon of %s", biop[op->pl_code].o_name); + return (nsstr); + } + case EARTHSAT: + return ("Earth Sat"); + default: + printf ("obj_description: unknown type: 0x%x\n", op->o_type); + abort(); + return (NULL); /* for lint */ + } +} + +/* given a Now *, find the local apparent sidereal time, in hours. + */ +void +now_lst (Now *np, double *lstp) +{ + static double last_mjd = -23243, last_lng = 121212, last_lst; + double eps, lst, deps, dpsi; + + if (last_mjd == mjd && last_lng == lng) { + *lstp = last_lst; + return; + } + + utc_gst (mjd_day(mjd), mjd_hr(mjd), &lst); + lst += radhr(lng); + + obliquity(mjd, &eps); + nutation(mjd, &deps, &dpsi); + lst += radhr(dpsi*cos(eps+deps)); + + range (&lst, 24.0); + + last_mjd = mjd; + last_lng = lng; + *lstp = last_lst = lst; +} + +/* convert ra to ha, in range 0..2*PI + * need dec too if not already apparent. + */ +void +radec2ha (Now *np, double ra, double dec, double *hap) +{ + double ha, lst; + + if (epoch != EOD) + as_ap (np, epoch, &ra, &dec); + now_lst (np, &lst); + ha = hrrad(lst) - ra; + if (ha < 0) + ha += 2*PI; + *hap = ha; +} + +/* find Greenwich Hour Angle of the given object at the given time, 0..2*PI. + */ +void +gha (Now *np, Obj *op, double *ghap) +{ + Now n = *np; + Obj o = *op; + double tmp; + + n.n_epoch = EOD; + n.n_lng = 0.0; + n.n_lat = 0.0; + obj_cir (&n, &o); + now_lst (&n, &tmp); + tmp = hrrad(tmp) - o.s_ra; + if (tmp < 0) + tmp += 2*PI; + *ghap = tmp; +} + +/* given a circle and a line segment, find a segment of the line inside the + * circle. + * return 0 and the segment end points if one exists, else -1. + * We use a parametric representation of the line: + * x = x1 + (x2-x1)*t and y = y1 + (y2-y1)*t, 0 < t < 1 + * and a centered representation of the circle: + * (x - xc)**2 + (y - yc)**2 = r**2 + * and solve for the t's that work, checking for usual conditions. + */ +int +lc ( +int cx, int cy, int cw, /* circle bbox corner and width */ +int x1, int y1, int x2, int y2, /* line segment endpoints */ +int *sx1, int *sy1, int *sx2, int *sy2) /* segment inside the circle */ +{ + int dx = x2 - x1; + int dy = y2 - y1; + int r = cw/2; + int xc = cx + r; + int yc = cy + r; + int A = x1 - xc; + int B = y1 - yc; + double a = dx*dx + dy*dy; /* O(2 * 2**16 * 2**16) */ + double b = 2*(dx*A + dy*B); /* O(4 * 2**16 * 2**16) */ + double c = A*A + B*B - r*r; /* O(2 * 2**16 * 2**16) */ + double d = b*b - 4*a*c; /* O(2**32 * 2**32) */ + double sqrtd; + double t1, t2; + + if (d <= 0) + return (-1); /* containing line is purely outside circle */ + + sqrtd = sqrt(d); + t1 = (-b - sqrtd)/(2.0*a); + t2 = (-b + sqrtd)/(2.0*a); + + if (t1 >= 1.0 || t2 <= 0.0) + return (-1); /* segment is purely outside circle */ + + /* we know now that some part of the segment is inside, + * ie, t1 < 1 && t2 > 0 + */ + + if (t1 <= 0.0) { + /* (x1,y1) is inside circle */ + *sx1 = x1; + *sy1 = y1; + } else { + *sx1 = (int)(x1 + dx*t1); + *sy1 = (int)(y1 + dy*t1); + } + + if (t2 >= 1.0) { + /* (x2,y2) is inside circle */ + *sx2 = x2; + *sy2 = y2; + } else { + *sx2 = (int)(x1 + dx*t2); + *sy2 = (int)(y1 + dy*t2); + } + + return (0); +} + +/* compute visual magnitude using the H/G parameters used in the Astro Almanac. + * these are commonly used for asteroids. + */ +void +hg_mag ( +double h, double g, +double rp, /* sun-obj dist, AU */ +double rho, /* earth-obj dist, AU */ +double rsn, /* sun-earth dist, AU */ +double *mp) +{ + double psi_t, Psi_1, Psi_2, beta; + double c; + double tb2; + + c = (rp*rp + rho*rho - rsn*rsn)/(2*rp*rho); + if (c <= -1) + beta = PI; + else if (c >= 1) + beta = 0; + else + beta = acos(c);; + tb2 = tan(beta/2.0); + /* psi_t = exp(log(tan(beta/2.0))*0.63); */ + psi_t = pow (tb2, 0.63); + Psi_1 = exp(-3.33*psi_t); + /* psi_t = exp(log(tan(beta/2.0))*1.22); */ + psi_t = pow (tb2, 1.22); + Psi_2 = exp(-1.87*psi_t); + *mp = h + 5.0*log10(rp*rho); + if (Psi_1 || Psi_2) *mp -= 2.5*log10((1-g)*Psi_1 + g*Psi_2); +} + +/* given faintest desired mag, mag step magstp, image scale and object + * magnitude and size, return diameter to draw object, in pixels, or 0 if + * dimmer than fmag. + */ +int +magdiam ( +int fmag, /* faintest mag */ +int magstp, /* mag range per dot size */ +double scale, /* rads per pixel */ +double mag, /* magnitude */ +double size) /* rads, or 0 */ +{ + int diam, sized; + + if (mag > fmag) + return (0); + diam = (int)((fmag - mag)/magstp + 1); + sized = (int)(size/scale + 0.5); + if (sized > diam) + diam = sized; + + return (diam); +} + +/* computer visual magnitude using the g/k parameters commonly used for comets. + */ +void +gk_mag ( +double g, double k, +double rp, /* sun-obj dist, AU */ +double rho, /* earth-obj dist, AU */ +double *mp) +{ + *mp = g + 5.0*log10(rho) + 2.5*k*log10(rp); +} + +/* given a string convert to floating point and return it as a double. + * this is to isolate possible unportabilities associated with declaring atof(). + * it's worth it because atof() is often some 50% faster than sscanf ("%lf"); + */ +double +atod (char *buf) +{ + return (strtod (buf, NULL)); +} + +/* solve a spherical triangle: + * A + * / \ + * / \ + * c / \ b + * / \ + * / \ + * B ____________ C + * a + * + * given A, b, c find B and a in range 0..B..2PI and 0..a..PI, respectively.. + * cap and Bp may be NULL if not interested in either one. + * N.B. we pass in cos(c) and sin(c) because in many problems one of the sides + * remains constant for many values of A and b. + */ +void +solve_sphere (double A, double b, double cc, double sc, double *cap, double *Bp) +{ + double cb = cos(b), sb = sin(b); + double sA, cA = cos(A); + double x, y; + double ca; + double B; + + ca = cb*cc + sb*sc*cA; + if (ca > 1.0) ca = 1.0; + if (ca < -1.0) ca = -1.0; + if (cap) + *cap = ca; + + if (!Bp) + return; + + if (sc < 1e-7) + B = cc < 0 ? A : PI-A; + else { + sA = sin(A); + y = sA*sb*sc; + x = cb - ca*cc; + B = y ? (x ? atan2(y,x) : (y>0 ? PI/2 : -PI/2)) : (x>=0 ? 0 : PI); + } + + *Bp = B; + range (Bp, 2*PI); +} + +/* #define WANT_MATHERR if your system supports it. it gives SGI fits. + */ +#undef WANT_MATHERR +#if defined(WANT_MATHERR) +/* attempt to do *something* reasonable when a math function blows. + */ +matherr (xp) +struct exception *xp; +{ + static char *names[8] = { + "acos", "asin", "atan2", "pow", + "exp", "log", "log10", "sqrt" + }; + int i; + + /* catch-all */ + xp->retval = 0.0; + + for (i = 0; i < sizeof(names)/sizeof(names[0]); i++) + if (strcmp (xp->name, names[i]) == 0) + switch (i) { + case 0: /* acos */ + xp->retval = xp->arg1 >= 1.0 ? 0.0 : -PI; + break; + case 1: /* asin */ + xp->retval = xp->arg1 >= 1.0 ? PI/2 : -PI/2; + break; + case 2: /* atan2 */ + if (xp->arg1 == 0.0) + xp->retval = xp->arg2 < 0.0 ? PI : 0.0; + else if (xp->arg2 == 0.0) + xp->retval = xp->arg1 < 0.0 ? -PI/2 : PI/2; + else + xp->retval = 0.0; + break; + case 3: /* pow */ + /* FALLTHRU */ + case 4: /* exp */ + xp->retval = xp->o_type == OVERFLOW ? 1e308 : 0.0; + break; + case 5: /* log */ + /* FALLTHRU */ + case 6: /* log10 */ + xp->retval = xp->arg1 <= 0.0 ? -1e308 : 0; + break; + case 7: /* sqrt */ + xp->retval = 0.0; + break; + } + + return (1); /* suppress default error handling */ +} +#endif + +/* given the difference in two RA's, in rads, return their difference, + * accounting for wrap at 2*PI. caller need *not* first force it into the + * range 0..2*PI. + */ +double +delra (double dra) +{ + double fdra = fmod(fabs(dra), 2*PI); + + if (fdra > PI) + fdra = 2*PI - fdra; + return (fdra); +} + +/* return 1 if object is considered to be "deep sky", else 0. + * The only things deep-sky are fixed objects other than stars. + */ +int +is_deepsky (Obj *op) +{ + int deepsky = 0; + + if (is_type(op, FIXEDM)) { + switch (op->f_class) { + case 'T': + case 'B': + case 'D': + case 'M': + case 'S': + case 'V': + break; + default: + deepsky = 1; + break; + } + } + + return (deepsky); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: misc.c,v $ $Date: 2005/03/11 16:47:46 $ $Revision: 1.18 $ $Name: $"}; diff --git a/libastro/mjd.c b/libastro/mjd.c new file mode 100644 index 0000000..b875a7b --- /dev/null +++ b/libastro/mjd.c @@ -0,0 +1,256 @@ +/* functions to manipulate the modified-julian-date used throughout xephem. */ + +#include +#include + +#include "astro.h" + +/* given a date in months, mn, days, dy, years, yr, + * return the modified Julian date (number of days elapsed since 1900 jan 0.5), + * *mjd. + */ +void +cal_mjd (int mn, double dy, int yr, double *mjp) +{ + static double last_mjd, last_dy; + static int last_mn, last_yr; + int b, d, m, y; + long c; + + if (mn == last_mn && yr == last_yr && dy == last_dy) { + *mjp = last_mjd; + return; + } + + m = mn; + y = (yr < 0) ? yr + 1 : yr; + if (mn < 3) { + m += 12; + y -= 1; + } + + if (yr < 1582 || (yr == 1582 && (mn < 10 || (mn == 10 && dy < 15)))) + b = 0; + else { + int a; + a = y/100; + b = 2 - a + a/4; + } + + if (y < 0) + c = (long)((365.25*y) - 0.75) - 694025L; + else + c = (long)(365.25*y) - 694025L; + + d = (int)(30.6001*(m+1)); + + *mjp = b + c + d + dy - 0.5; + + last_mn = mn; + last_dy = dy; + last_yr = yr; + last_mjd = *mjp; +} + +/* given the modified Julian date (number of days elapsed since 1900 jan 0.5,), + * mj, return the calendar date in months, *mn, days, *dy, and years, *yr. + */ +void +mjd_cal (double mj, int *mn, double *dy, int *yr) +{ + static double last_mj, last_dy; + static int last_mn, last_yr; + double d, f; + double i, a, b, ce, g; + + /* we get called with 0 quite a bit from unused epoch fields. + * 0 is noon the last day of 1899. + */ + if (mj == 0.0) { + *mn = 12; + *dy = 31.5; + *yr = 1899; + return; + } + + if (mj == last_mj) { + *mn = last_mn; + *yr = last_yr; + *dy = last_dy; + return; + } + + d = mj + 0.5; + i = floor(d); + f = d-i; + if (f == 1) { + f = 0; + i += 1; + } + + if (i > -115860.0) { + a = floor((i/36524.25)+.99835726)+14; + i += 1 + a - floor(a/4.0); + } + + b = floor((i/365.25)+.802601); + ce = i - floor((365.25*b)+.750001)+416; + g = floor(ce/30.6001); + *mn = (int)(g - 1); + *dy = ce - floor(30.6001*g)+f; + *yr = (int)(b + 1899); + + if (g > 13.5) + *mn = (int)(g - 13); + if (*mn < 2.5) + *yr = (int)(b + 1900); + if (*yr < 1) + *yr -= 1; + + last_mn = *mn; + last_dy = *dy; + last_yr = *yr; + last_mj = mj; +} + +/* given an mjd, set *dow to 0..6 according to which day of the week it falls + * on (0=sunday). + * return 0 if ok else -1 if can't figure it out. + */ +int +mjd_dow (double mj, int *dow) +{ + /* cal_mjd() uses Gregorian dates on or after Oct 15, 1582. + * (Pope Gregory XIII dropped 10 days, Oct 5..14, and improved the leap- + * year algorithm). however, Great Britian and the colonies did not + * adopt it until Sept 14, 1752 (they dropped 11 days, Sept 3-13, + * due to additional accumulated error). leap years before 1752 thus + * can not easily be accounted for from the cal_mjd() number... + */ + if (mj < -53798.5) { + /* pre sept 14, 1752 too hard to correct |:-S */ + return (-1); + } + *dow = ((long)floor(mj-.5) + 1) % 7;/* 1/1/1900 (mj 0.5) is a Monday*/ + if (*dow < 0) + *dow += 7; + return (0); +} + +/* given a year, return whether it is a leap year */ +int +isleapyear (int y) +{ + return ((y%4==0 && y%100!=0) || y%400==0); +} + +/* given a mjd, return the the number of days in the month. */ +void +mjd_dpm (double mj, int *ndays) +{ + static short dpm[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + int m, y; + double d; + + mjd_cal (mj, &m, &d, &y); + *ndays = (m==2 && isleapyear(y)) ? 29 : dpm[m-1]; +} + +/* given a mjd, return the year and number of days since 00:00 Jan 1 */ +void +mjd_dayno (double mj, int *yr, double *dy) +{ + double yrd; + int yri; + int dpy; + + mjd_year (mj, &yrd); + *yr = yri = (int)yrd; + dpy = isleapyear(yri) ? 366 : 365; + *dy = dpy*(yrd-yri); +} + +/* given a mjd, return the year as a double. */ +void +mjd_year (double mj, double *yr) +{ + static double last_mj, last_yr; + int m, y; + double d; + double e0, e1; /* mjd of start of this year, start of next year */ + + if (mj == last_mj) { + *yr = last_yr; + return; + } + + mjd_cal (mj, &m, &d, &y); + if (y == -1) y = -2; + cal_mjd (1, 1.0, y, &e0); + cal_mjd (1, 1.0, y+1, &e1); + *yr = y + (mj - e0)/(e1 - e0); + + last_mj = mj; + last_yr = *yr; +} + +/* given a decimal year, return mjd */ +void +year_mjd (double y, double *mjp) +{ + double e0, e1; /* mjd of start of this year, start of next year */ + int yf = (int)floor (y); + if (yf == -1) yf = -2; + + cal_mjd (1, 1.0, yf, &e0); + cal_mjd (1, 1.0, yf+1, &e1); + *mjp = e0 + (y - yf)*(e1-e0); +} + +/* round a time in days, *t, to the nearest second, IN PLACE. */ +void +rnd_second (double *t) +{ + *t = floor(*t*SPD+0.5)/SPD; +} + +/* given an mjd, truncate it to the beginning of the whole day */ +double +mjd_day(double mj) +{ + return (floor(mj-0.5)+0.5); +} + +/* given an mjd, return the number of hours past midnight of the whole day */ +double +mjd_hr(double mj) +{ + return ((mj-mjd_day(mj))*24.0); +} + +/* insure 0 <= *v < r. + */ +void +range (double *v, double r) +{ + *v -= r*floor(*v/r); +} + +/* insure 0 <= ra < 2PI and -PI/2 <= dec <= PI/2. if dec needs + * complimenting, reflect ra too + */ +void +radecrange (double *ra, double *dec) +{ + if (*dec < -PI/2) { + *dec = -PI - *dec; + *ra += PI; + } else if (*dec > PI/2) { + *dec = PI - *dec; + *ra += PI; + } + range (ra, 2*PI); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: mjd.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $"}; diff --git a/libastro/moon.c b/libastro/moon.c new file mode 100644 index 0000000..bf5f376 --- /dev/null +++ b/libastro/moon.c @@ -0,0 +1,3467 @@ +/* geocentric moon polar coordinates re mean equinox and ecliptic of date + + S. L. Moshier + December, 1996 + +********************************************************************** + Adapted by Michael Sternberg + for xephem with minor modifications from the originals at: + ftp://ftp.std.com/pub/astronomy/selenog.zip + + Precision < 0.05" from -1369 to +2950. + Uses table lookup techniques to limit calls to trigonometric functions. + + NB: Uses International Earth Rotation System (IERS) which is + taken as equivalent to FK5 for the purposes of xephem. + + original files used: + chewtab.c mean.c mlr404.c + mlat404.c selenog.c + + changes: + added prototypes, grouped and cleaned up vars and #defines, + removed _MSC_VER #ifdefs, uniqed names in moonlr and moonlat, + included plantbl.h in .c file, dropped out librations for now. + + in struct plantbl, promoted "char *arg_tbl" to "short *". + reason: - more portable (BTW: this is the only place in xephem + where "signed char" would have been needed) + - using "short" costs a mere 7k memory but avoids core + dumps on a machine which we didn't anticipate. + +********************************************************************** + + + Residuals against JPL ephemeris DE404 (arc seconds) + +First date in file = 1221000.5 +Number of samples = 1053099 +Sampling interval = 1.515625 days + +Peak excursions from these mostly different test points +were consolidated with the above. They added .01" to a few +of the peak readings. +First date in file = 1221000.50 +Number of samples = 524290.0 +Sampling interval = 3.0 days + + + Julian Years Longitude Latitude Distance + 1 = 1.9 km + Peak RMS Ave Peak RMS Ave Peak RMS Ave + -1369.0 to -1000.0: 0.43 0.07 0.00 0.33 0.05 -0.00 0.18 0.03 0.00 + -1000.0 to -500.0: 0.49 0.06 -0.00 0.33 0.04 -0.00 0.18 0.03 0.00 + -500.0 to 0.0: 0.48 0.06 0.00 0.32 0.04 0.00 0.15 0.03 0.00 + 0.0 to 500.0: 0.45 0.05 0.00 0.30 0.04 -0.00 0.17 0.03 -0.00 + 500.0 to 1000.0: 0.48 0.05 -0.00 0.29 0.04 0.00 0.17 0.03 -0.00 + 1000.0 to 1500.0: 0.42 0.05 -0.00 0.28 0.04 -0.00 0.16 0.03 0.00 + 1500.0 to 2000.0: 0.35 0.05 -0.00 0.26 0.04 0.00 0.15 0.03 0.00 + 2000.0 to 2500.0: 0.39 0.06 0.00 0.25 0.04 -0.00 0.15 0.03 -0.00 + 2500.0 to 3000.0: 0.44 0.07 -0.00 0.30 0.05 -0.00 0.19 0.03 -0.00 + 3000.0 to 3000.8: 0.23 0.08 -0.04 0.11 0.04 -0.00 0.08 0.03 -0.00 + */ + +#include +#include +#include + +#include "astro.h" + +#define CHAR short + +#define NARGS 18 + +struct plantbl { + char max_harmonic[NARGS]; + char max_power_of_t; + CHAR *arg_tbl; + long *lon_tbl; + long *lat_tbl; + long *rad_tbl; + double distance; + double timescale; + double trunclvl; +}; + +static double mods3600 (double x); +static void mean_elements (double JED); +static int sscc (int k, double arg, int n); +static int g2plan (double J, struct plantbl *plan, double *pobj, int flag); +static double g1plan (double J, struct plantbl *plan); +static int gecmoon (double J, struct plantbl *lrtab, + struct plantbl *lattab, double *pobj); + +/* time points */ +#define MOSHIER_J2000 (2451545.0) + +#define MOSHIER_BEGIN (1221000.5 - MJD0) /* directly from above */ +#define MOSHIER_END (2798525.5 - MJD0) /* 2950.0; from libration table */ + + +static double Args[NARGS]; +static double LP_equinox; +static double NF_arcsec; +static double Ea_arcsec; +static double pA_precession; + + +/* This storage ought to be allocated dynamically. */ +double ss[NARGS][30]; +double cc[NARGS][30]; + +/* Time, in units of 10,000 Julian years from JED 2451545.0. */ +static double T; + +/* Conversion factors between degrees and radians */ +#define DTR 1.7453292519943295769e-2 +#define RTD 5.7295779513082320877e1 +#define RTS 2.0626480624709635516e5 /* arc seconds per radian */ +#define STR 4.8481368110953599359e-6 /* radians per arc second */ +#define AUKM 1.4959787e8 + + +static long lrtabl[] = { + 175667, 66453, 5249, -42, + 20057, 403, -2360, 6148, + -7644, 24646, -1273, 9127, + -1395, 1958, + 232, -289, + -97, 553, 69, 130, + -80, 6, + 129, -868, 26, -89, + 1042, 1172, 194, -112, + -47433, -241666, 224626, -103752, + 63419, 127606, + 2294, -691, -1827, -1254, + -1, -119, + 1057, 324, + 505, -195, 254, -641, + -36, 1008, -1082, -3, + -87, 122, + 161, 11, + 2, -106, + 29, -123, + -32, 41, + -524, -35, + 133, -595, + 225, 837, -108, -191, + -2294, 841, -340, -394, + -351, -1039, 238, -108, + -66, 21, + 1405, 869, 520, 2776, + -174, 71, + 425, 652, -1260, -80, + 249, 77, + -192, -17, + -97, 134, + -7, -54, + -802, -7436, -2824, 70869, + -35, 2481, + 1865, 1749, -2166, 2415, + 33, -183, + -835, 283, + 27, -45, + 56, 235, + 2, 718, + -1206, 275, -87, -158, + -7, -2534, 0, 10774, + 1, -324, + -208, 821, + 281, 1340, -797, 440, + 224, 72, + -65, -5, + -7, -44, + -48, 66, + -151, -40, + -41, -45, + 76, -108, + -18, 1202, 0, -2501, + 1438, -595, 900, 3040, + -3435, -5, + -100, -26, + 0, -13714, + -183, 68, + 453, -83, + -228, 325, + 97, 13, + 2, 105, + -61, 257, + 0, 57, + 88, -11, + -1, -8220, + 0, 275, + -43, -10, + -199, 105, + 1, -5849, 2, 24887, + -128, 48, + 712, 970, -1407, 845, + -266, 378, + 311, 1526, -1751, 27, + 0, -185858, + 133, 6383, + -108, 25, + -7, 1944, + 5, 390, + -11, 31, + 277, -384, 158, 72, + -81, -41, -13, -111, + -2332, -65804, -698, 505812, + 34, 1676716, -72, -6664384, + 154, -57, 52, 95, + -4, -5, + -7, 37, + -63, -32, + 4, 3349, 1, -14370, + 16, -83, + 0, -401, + 13, 3013, + 48, -20, + 0, 250, + 51, -79, + -7, -146, + 148, 9, + 0, -64, + -17, -59, + -67, -492, + -2, 2116601, + -12, -1848, + 8, -436, + -6, 324, 0, -1363, + -163, 9, + 0, -74, + 63, 8167, -29, 37587, + -22, -74501, + -71, 497, + -1, 551747, + -87, -22, + 0, -51, + -1, -463, + 0, -444, + 3, 89, + 15, -84, + -36, -6829, -5, -21663, + 0, 86058, + 0, -298, + -2, 751, -2, -1015, + 0, 69, + 1, -4989, 0, 21458, + 0, -330, + 0, -7, + 0, -226, + 0, -1407, 0, 2942, + 0, 66, + 0, 667, + 0, -155, + 0, 105, + 0, -107, + 0, -74, + 0, -52, + 0, 91, + 0, 59, + 0, 235, + -1, -1819, 0, 2470, + 71, 13, + 0, 1026, + 14, -54, + 0, -174, + -121, -19, + 0, -200, + 0, 3008, + -16, -8043, -10, -37136, + -3, 73724, + -157, -5, + 0, -854, + 8, 147, + -13, -893, + 0, 11869, + -23, -172, + 89, 14, + -1, 872, 0, -3744, + 11, 1606, + 0, -559, + -1, -2530, + 0, 454, + 0, -193, + -60, -10, + -82, -13, + -75, 6, + 36, 81, + 354, -162836, 148, -516569, + 4, 2054441, + 4, -94, + 39, 38, + 61, -30, + 2, 121, + -11, 590, + 62, 2108, + 0, -12242, + -476, -42, + -84, 113, + -394, 236, + 0, 276, + -49, 31, + 0, 86, + 1, -1313, + 1, 69, + -60, 88, + -46, 18, + 0, -63818, + 14, -93, + 113, 547, -618, 17, + -7, 12290, -1, -25679, + 0, 92, + -115, 50, + -48, 233, + 4, 1311, 1, -5567, + 3, 1251, + 29, 548, + -244, 257, + -2, 1825, + 42, 637, + -46, 68, + -62, 8, + 3, 110, + 445, -100, -316, -202, + 2925, -621, 763, 1495, + -169, -184, 20, -76, + -475, -138, 8, -141, + -197, 1351, -1284, 422, + -129, 1879, -102, 8382, + -9, 45864958, + -215, 1350, -1285, 422, + -481, -136, 8, -140, + 40, -53, + 2622, -543, 700, 1406, + 402, -95, -318, -194, + 122, 13, + -30, 147, + -121, -902, + 61, -23, + -63, 7, + 69, 479, + -224, 228, + -7, 500, + 0, -429, + -42, 193, + -92, 37, + 67, 5, + -350, -31, + 0, 67, + -55, -5, + 0, 47, + -36, 53, + 5, 561, + 0, -126, + 0, 871, + -52, 4, + -201, 116922, -22, 371352, + -12, -1473285, + 0, 87, + -164, 84, + -3, 422, + 30, 1434, + -26, 38, + 2, -1249943, + -404, -34, + -57, 79, + 5, 509, + 1, 131, + -344, 168, + 112, 22540, 30, 71218, + 18, -283983, + 0, -851, + 0, -1538, + 0, 1360, + -12, 51, + -48, 68, + 88, -20, + 1, 63, + 0, -568, + 303, 25, + 0, -122, + 87, 586, -606, -14, + 0, -100, + -85, 8, + -165, 54, + -45, 140, + 0, -54, + 4, -831, 1, 3495, + 31, 116, + -46, -11, + -371, 190, + -507, 399, + -2, 57, + -60, 36, + -198, -1174, -613, 4988, + -87, -4, + 141, 560, -276, 187, + 1876, 1379, 778, 4386, + 24, -15, + 167, -774, + -71, -9, + -62, 90, + 98, 580, -663, -7, + 34, -112, + 57, 15, + -355, -214, + -3240, -13605, 12229, -5723, + 3496, 7063, + 33, -51, + 1908, 1160, -226, 715, + 964, 1170, -1264, 623, + 14071, 5280, 5614, 3026, + 488, 1576, -2, 226395859, + 824, 1106, -1287, 617, + 1917, 1156, -214, 718, + 90, -97, + 12078, -2366, 3282, 6668, + -219, 9179, 593, 2015, + -282, -186, + 57, 25, + 31, -102, + -77, -4, + -268, -341, -7, -45, + -3, 74, + 15, -615, + -88, -7, + 234, -353, + 1, -119, + -163, -1159, -601, 4969, + 22, -58, + -17, -11434, + 17, 54, + 348, 348, -460, 434, + -371, 175, + -11, -204, + 4, -6440, + -5, -53, + -4, -14388, -37, -45231, + -7, 179562, + -44, 136, + -160, 49, + -101, 81, + -1, -188, + 0, 2, + -4, 12124, -11, -25217, + 71, 543, -557, -14, + -75, 526, + 0, 395274, + -233, -16, + 93, -20, + -43, 61, + 0, -1275, + 0, -824, + 1, -415, 0, 1762, + -261, 131, + -45, 64, + -297, -25, + 0, -17533, + -6, -56, + 21, 1100, + 1, 327, + 1, 66, + 23, -217, + -83, -7, + 83, 86847, 49, 275754, + -4, -1093857, + -46, 2, + 0, -24, + 0, -419, + 0, -5833, + 1, 506, + 0, -827, + -1, -377, + -11, -78, + 0, 131945, + -2, -334, + 1, -75, + 0, -72, + 0, -213, + -6, 5564, -2, -11618, + 0, 1790, + 0, -131, + 0, 6, + 0, -76, + 0, -130, + 0, -1115, 0, 4783, + 0, -195, + 0, -627, + 0, -55, + 0, -83, + 0, 163, + 0, -54, + 0, 82, + 0, 149, + 0, -754, 0, 1578, + 0, 138, + 0, 68, + 2, -2506, 0, 3399, + 0, -125, + 86, 16, + 0, -6350, 0, 27316, + 18, -63, + 0, -169, + -1, 46, + -136, -21, + 0, -239, + -30, -8788, -15, -40549, + -4, 80514, + -46, -8, + -168, -6, + -1, 536, 0, -2314, + 9, 148, + -13, -842, + -1, 307713, + -23, -175, + 95, 15, + 0, -297, + 11, 1341, + 0, -106, + 0, 5, + -4, 68, + -114, 10, + 32, 75, + 159, -130487, 98, -413967, + 2, 1647339, + -4, -85, + 100, -46, + 2, 95, + -11, 461, + 51, 1647, + 0, -32090, + -375, -33, + -65, 86, + -300, 180, + 0, 836, 0, -3576, + 0, -222, + 0, -993, + -41, 60, + 0, -4537, + -431, -34, + 2, 927, 0, -1931, + -79, 33, + -31, 144, + -1, 284, 0, -1207, + 0, 88, + -11, 315, + -178, 177, + -1, 144, + -58, 986, + 11, 86, + -228, -110, + 2636, -494, 718, 1474, + 28, -35, + -24, 782, -797, 277, + 2142, -1231, 856, 1853, + 74, 10797, 0, 23699298, + -21, 786, -796, 277, + 27, -34, + 2615, -494, 712, 1461, + -226, -109, + -11, 663, + 0, -123, + -169, 157, + -54, 266, + 0, -76, + 1, -634, 0, 2738, + -25, 106, + -63, 24, + 0, -372, + -221, -24, + 0, -5356, + 0, -219, + 0, 91, + -28, 7684, -6, 24391, + -1, -96795, + -77, 43, + 2, 95, + -47, -3, + 0, -84530, + 2, 310, + 1, 88, + 111, 19331, 32, 61306, + 4, -243595, + 0, 770, + 0, -103, + 0, 160, + 0, 356, + 0, 236, + -41, 354, + 39, 303, + 12, -56, + 873, -143, 238, 482, + -28, 35, + -93, 31, + -3, 7690211, + -91, 33, + -34, 43, + 824, -130, 226, 450, + -39, 341, + -1, -687, + 0, -303, + 11, -2935, 1, 12618, + 121, 924, 9, -1836, + -268, -1144, -678, 3685, + -69, -261, + 0, -4115951, + -69, -261, + 5, -151, + 0, -88, + 0, 91, + 0, 187, + 0, -1281, + 1, 77, + 1, 6059, 3, 19238, + 0, -76305, + 0, -90, + 0, -238, + 0, -962, 0, 4133, + 0, 96, + 0, 9483, + 0, 85, + 0, -688, + 0, -5607, + 0, 55, + 0, -752, + 0, 71, + 0, 303, + 0, -288, + 0, 57, + 0, 45, + 0, 189, + 0, 401, + 0, -1474, 0, 3087, + 0, -71, + 0, 2925, + 0, -75, + 0, 359, + 0, 55, + 1, -10155, 0, 43735, + 0, -572, + 0, -49, + 0, -660, + 0, -3591, 0, 7516, + 0, 668, + -1, -53, + -2, 384259, + 0, -163, + 0, -93, + 1, 112, + -95, -11528, -22, -36505, + -1, 145308, + 5, 145, + 0, 4047, + 1, 1483, 0, -6352, + 0, 991, 0, -4262, + 0, -93, + 0, -334, + 0, -160, + 0, -153, + -10, 127, + 51, 185, + -77, 18, + 56, 1217, 6, 1919574, + -74, 17, + 50, 180, + -5, 93, + 0, -104, + 0, -58, + -3, -353, -1, 1499, + 0, -229, + -15, 86, + 0, -93657, + 0, 1561, 0, -6693, + 0, -5839, + 1, 6791, 0, -29143, + 1, -701, 0, 3015, + 0, 2543, + 0, 693, + -1, 361233, + 0, -50, + 0, 946, + -1, -140, + -70, 407, + 0, -450995, + 0, -368, + 0, 54, + 0, -802, + 0, -96, + 0, 1274, 0, -5459, + 0, -614, 0, 2633, + 0, 685, + 0, -915, + 0, -85, + 0, 88, + 0, 106, + 0, 928, + 0, -726, 0, 1523, + 0, 5715, + 0, -4338, 0, 18706, + 0, -135, + 0, -132, + 0, -158, + 0, -98, + 0, 680, + -1, 138968, + 0, -192, + 0, -1698, + 0, -2734, 0, 11769, + 0, 4, + 0, 673, 0, -2891, + 0, 889, 0, -3821, + 0, 121, + -1, 143783, + 0, 231, + -9, 51, + 0, -57413, + 0, -483, + 0, -407, + 0, 676, 0, -2902, + 0, 531, + 0, 445, + 0, 672, + 0, 19336, + 0, 70, + 0, -39976, + 0, -68, + 0, 4203, + 0, -406, + 0, 446, + 0, -108, + 0, 79, + 0, 84, + 0, 734, + 0, 255, + 0, 3944, + 0, -655, 0, 2825, + 0, -109, + 0, -234, + 0, 57, + 0, 19773, + 0, -2013, + 0, 958, + 0, -521, + 0, -757, + 0, 10594, + 0, -9901, + 0, 199, + 0, -275, + 0, 64, + 0, 54, + 0, 165, + 0, 1110, + 0, -3286, + 0, 909, + 0, 54, + 0, 87, + 0, 258, + 0, 1261, + 0, -51, + 0, 336, + 0, -114, + 0, 2185, + 0, -850, + 0, 75, + 0, -69, + 0, -103, + 0, 776, + 0, -1238, + 0, 137, + 0, 67, + 0, -260, + 0, 130, + 0, 49, + 0, 228, + 0, 215, + 0, -178, + 0, 57, + 0, -133, +}; +static long lrtabb[] = {-1}; +static long lrtabr[] = { + -5422, -2120, 1077, 772, + 39, 75, 3, 10, + -468, -326, -113, -78, + -4, -2, + 1, 3, + 29, 24, 4, 2, + 1, 0, + -9, 7, -2, 0, + -32, -13, -3, -3, + 233, 126, 89, 77, + -33, 16, + 3, -3, 0, -1, + 2, 0, + 0, 1, + 4, 9, 1, 1, + 16, -1, 0, 18, + 3, 2, + 0, 0, + 0, 0, + 0, 0, + 0, 0, + 0, -1, + -22, -5, + 10, 3, 1, 1, + -15, 7, -2, 1, + -8, -11, -1, -2, + -1, 1, + 46, -58, 126, -23, + 4, 8, + 35, 8, 10, -17, + 0, 0, + 0, 0, + -10, -7, + 0, 0, + -23, 3, 151, 10, + -327, 0, + 4, -5, 6, 5, + 1, 0, + -1, -3, + 0, 0, + 0, 1, + -185, 0, + -3, -24, -5, -2, + -1062, 3, 4560, 0, + -3, 0, + 4, 1, + 8, -1, 2, 4, + 0, 1, + 0, -1, + 0, 0, + -1, 0, + 0, 1, + 0, 0, + -1, -1, + 277, 3, -583, 1, + -1, 4, -32, 7, + 0, -34, + 1, -1, + -23685, 0, + -1, -2, + -1, -7, + -5, -4, + 0, 2, + -2, 0, + -5, -1, + 35, 0, + 0, 2, + 202, 0, + 180, 0, + 0, -1, + -3, -6, + -193, 0, 770, -1, + -2, -4, + -32, 23, -28, -46, + -13, -9, + -54, 10, -1, -61, + -44895, 0, + -230, 5, + -1, -4, + -71, 0, + -15, 0, + 1, 0, + 15, 11, -3, 6, + 2, -3, 4, -1, + 2576, -138, -19881, -47, + -65906, -1, 261925, -4, + -2, -7, 4, -2, + 0, 0, + -1, 0, + 1, -3, + 172, -2, -727, 0, + 4, 1, + 324, 0, + -139, 1, + 1, 3, + -276, 0, + 5, 3, + 9, 0, + -1, 10, + -37, 0, + 5, -1, + 76, -10, + 1318810, 1, + 12, -1, + -38, 1, + -141, 0, 611, 0, + 0, -11, + 4, 0, + -627, 2, -2882, -3, + 5711, -2, + -48, -7, + 55294, 0, + 2, -7, + 31, 0, + 34, 0, + -259, 0, + -55, 2, + 6, 3, + -4273, 20, -13554, 3, + 53878, 0, + -46, 0, + -85, 0, 114, 0, + -45, 0, + -818, 0, 3520, 0, + 34, 0, + -157, 0, + 29, 0, + -878, 0, 1838, 0, + -428, 0, + 161, 0, + 24, 0, + 65, 0, + 19, 0, + 15, 0, + 12, 0, + -26, 0, + -14, 0, + -149, 0, + 584, 0, -793, 0, + 4, -23, + -238, 0, + -18, -5, + 45, 0, + -7, 42, + 79, 0, + -1723, 0, + 2895, -6, 13362, -4, + -26525, -1, + -2, 57, + 291, 0, + 52, -3, + -327, 5, + -2755, 0, + -63, 9, + 5, -33, + -261, -1, 1122, 0, + 621, -4, + -227, 0, + 1077, 0, + -167, 0, + 85, 0, + -4, 23, + -5, 32, + 3, 30, + -32, 14, + 64607, 141, 204958, 59, + -815115, 2, + -37, -1, + 15, -15, + 12, 24, + 48, -1, + 235, 4, + 843, -25, + 4621, 0, + -17, 191, + 45, 34, + 95, 159, + -132, 0, + 13, 20, + 32, 0, + -540, 0, + 29, 0, + 37, 25, + 8, 19, + 22127, 0, + -35, -5, + 232, -48, 7, 262, + 5428, 3, -11342, 1, + -45, 0, + -21, -49, + -100, -21, + -626, 1, 2665, 0, + 532, -2, + 235, -12, + -111, -105, + 774, 1, + -283, 17, + 29, 20, + 3, 27, + 47, -2, + -43, -192, -87, 136, + -269, -1264, 646, -330, + -79, 73, -33, -9, + 60, -205, 61, 4, + -584, -85, -182, -555, + -780, -57, -3488, -45, + -19818328, -4, + 583, 93, 182, 555, + -59, 208, -60, -4, + 23, 17, + 235, 1133, -608, 302, + 41, 174, 84, -137, + 6, -53, + 63, 13, + -392, 52, + -10, -27, + -3, -27, + 199, -31, + 99, 97, + -218, -3, + 209, 0, + 84, 18, + 16, 40, + 2, -30, + 14, -154, + 30, 0, + -2, 24, + -108, 0, + -24, -16, + 262, -2, + 55, 0, + -304, 0, + 2, 25, + 55112, 95, 175036, 11, + -694477, 5, + 41, 0, + -38, -76, + 199, 1, + 679, -14, + -17, -12, + 582619, 1, + -16, 191, + 38, 27, + -234, 2, + -60, 0, + 80, 163, + -10296, 48, -32526, 13, + 129703, 8, + -1366, 0, + -741, 0, + -646, 0, + 25, 6, + 33, 23, + 10, 43, + -31, 0, + -6, 0, + -12, 147, + 59, 0, + 287, -42, -7, 297, + -59, 0, + -4, -42, + -27, -81, + -69, -22, + 27, 0, + -423, -2, 1779, -1, + -57, 15, + 5, -23, + 94, 182, + -197, -250, + 24, 1, + -18, -30, + 581, -98, -2473, -303, + -2, 43, + -277, 70, -92, -136, + -681, 925, -2165, 384, + -8, -12, + 382, 82, + -4, 35, + -45, -31, + -286, 48, 3, -328, + -55, -17, + 8, -28, + -106, 175, + -6735, 1601, -2832, -6052, + 3495, -1730, + -25, -17, + -574, 944, -354, -112, + -579, 476, -308, -625, + -2411, 7074, -1529, 2828, + -1335, 247,-112000844, -1, + 545, -409, 305, 637, + 572, -950, 356, 106, + 48, 44, + 1170, 5974, -3298, 1624, + -4538, -106, -996, 294, + 92, -139, + -12, 28, + 50, 16, + 2, -38, + 169, -133, 22, -3, + 38, 1, + 305, 7, + 4, -44, + 175, 116, + 59, 1, + -573, 81, 2453, 297, + 29, 11, + 5674, -8, + -27, 9, + 173, -173, 215, 228, + -87, -184, + 102, -5, + 3206, 2, + -53, 2, + 7159, -7, 22505, -19, + -89344, -3, + 67, 22, + 24, 79, + -40, -50, + 94, 0, + 186, 0, + -6063, 0, 12612, -5, + -271, 35, 7, -278, + -479, -74, + 426754, 0, + 8, -116, + -10, -47, + -31, -22, + 645, 0, + 426, 0, + -213, 0, 903, 0, + -67, -133, + -33, -23, + 13, -152, + -9316, 0, + 29, -3, + -564, 11, + -167, 0, + -34, 0, + 114, 12, + 4, -44, + -44561, 42, -141493, 25, + 561256, -2, + -1, -24, + -261, 0, + 211, 0, + -4263, 0, + -262, 1, + 1842, 0, + 202, 0, + 41, -6, + 77165, 0, + 176, -1, + 39, 1, + -24, 0, + 118, 0, + -2991, -4, 6245, -1, + 46886, 0, + -75, 0, + -100, 0, + 40, 0, + 75, 0, + -618, 0, 2652, 0, + 112, 0, + 1780, 0, + 30, 0, + 49, 0, + 86, 0, + 33, 0, + -30, 0, + -95, 0, + 277, 0, -580, 0, + -35, 0, + -319, 0, + 1622, 1, -2201, 0, + 79, 0, + 10, -57, + 2363, 0, -10162, 0, + -41, -12, + 62, 0, + 30, 1, + -14, 89, + -2721, 0, + 5780, -19, 26674, -10, + -52964, -2, + -5, 30, + -4, 111, + -317, -1, 1369, 0, + 93, -6, + -564, 9, + -115913, 0, + -113, 15, + 10, -62, + 99, 0, + 891, -7, + 36, 0, + 108, 0, + -42, -2, + 7, 75, + -50, 21, + 86822, 104, 275441, 65, + -1096109, 1, + -56, 3, + 31, 66, + 63, -1, + 307, 7, + 1097, -34, + 17453, 0, + -22, 250, + 57, 43, + 120, 200, + -297, 0, 1269, 0, + 166, 0, + -662, 0, + 40, 28, + 1521, 0, + -23, 288, + 351, -2, -729, 0, + -22, -52, + -96, -21, + -139, -1, 589, 0, + 35, 0, + 210, 7, + -118, -119, + 62, 0, + -583, -26, + -42, 5, + -73, 152, + -330, -1759, 983, -479, + -23, -19, + -522, -15, -185, -533, + 739, 1559, -1300, 614, + -7332, 52, -15836758, 0, + 524, 16, 185, 532, + 23, 18, + 330, 1751, -978, 476, + 73, -151, + 519, 18, + 38, 0, + 105, 113, + -178, -37, + 26, 0, + 262, 1, -1139, 0, + 71, 17, + 16, 42, + 151, 0, + 16, -148, + 4147, 0, + 149, 0, + -30, 0, + 2980, 9, 9454, 2, + -37519, 0, + -28, -49, + 37, -1, + 2, -31, + 33870, 0, + -208, 1, + -59, 1, + -13105, 68, -41564, 21, + 165148, 3, + -1022, 0, + -40, 0, + -132, 0, + -228, 0, + 95, 0, + -138, -16, + -126, 16, + 24, 5, + -57, -346, 191, -94, + -14, -11, + -12, -37, + -3053364, -1, + 13, 36, + 17, 13, + 51, 327, -179, 90, + 138, 16, + 233, 0, + 62, 0, + 1164, 0, -5000, 0, + -407, 117, 770, 9, + -4, 1, 21, 2, + 1, 0, + -16869, 0, + -1, 0, + 1, 0, + 35, 0, + -78, 0, + 78, 0, + -533, 0, + -31, 1, + -2448, -6, -7768, -1, + 30812, 0, + 37, 0, + -227, 0, + 197, 0, -846, 0, + -77, 0, + 4171, 0, + -67, 0, + 287, 0, + 2532, 0, + -19, 0, + -40, 0, + -56, 0, + 128, 0, + 83, 0, + -45, 0, + -36, 0, + -92, 0, + -134, 0, + 714, 0, -1495, 0, + 32, 0, + -981, 0, + 15, 0, + -166, 0, + -59, 0, + 4923, 0, -21203, 0, + 246, 0, + 15, 0, + 104, 0, + 1683, 0, -3523, 0, + -865, 0, + -25, 1, + -186329, -1, + 10, 0, + 50, 0, + 53, 0, + 5455, -45, 17271, -10, + -68747, 0, + 69, -2, + -7604, 0, + -724, 1, 3101, 0, + -46, 0, 200, 0, + -44, 0, + 97, 0, + -53, 0, + 62, 0, + -54, -4, + 88, -24, + -9, -36, + -581, 27, -914711, 3, + 8, 35, + -86, 24, + 51, 3, + 48, 0, + 26, 0, + 133, 1, -577, 0, + 105, 0, + -3, -1, + 3194, 0, + 528, 0, -2263, 0, + 2028, 0, + -3266, 1, 14016, 0, + 10, 0, -41, 0, + -100, 0, + -32, 0, + -124348, 0, + 16, 0, + -325, 0, + 50, -1, + 1, 0, + -553, 0, + 0, 0, + 0, 0, + 2, 0, + -34, 0, + -444, 0, 1902, 0, + 9, 0, -37, 0, + 254, 0, + 156, 0, + -2, 0, + -35, 0, + -48, 0, + -368, 0, + 327, 0, -686, 0, + -2263, 0, + 1952, 0, -8418, 0, + -13, 0, + 52, 0, + 9, 0, + 21, 0, + -261, 0, + -62404, 0, + 0, 0, + 79, 0, + 1056, 0, -4547, 0, + -351, 0, + -305, 0, 1310, 0, + -1, 0, 6, 0, + 0, 0, + -55953, 0, + -80, 0, + 0, 0, + 168, 0, + -147, 0, + 127, 0, + -265, 0, 1138, 0, + -1, 0, + -9, 0, + -8, 0, + -5984, 0, + -22, 0, + -5, 0, + 0, 0, + 0, 0, + 127, 0, + -2, 0, + 10, 0, + -31, 0, + -29, 0, + -286, 0, + -98, 0, + -1535, 0, + 252, 0, -1087, 0, + 43, 0, + 4, 0, + -19, 0, + -7620, 0, + 29, 0, + -322, 0, + 203, 0, + 0, 0, + -3587, 0, + 10, 0, + 0, 0, + 94, 0, + 0, 0, + -1, 0, + -1, 0, + -315, 0, + 1, 0, + 0, 0, + 0, 0, + -30, 0, + -94, 0, + -460, 0, + 1, 0, + -114, 0, + 0, 0, + -746, 0, + 4, 0, + -23, 0, + 24, 0, + 0, 0, + -237, 0, + 1, 0, + 0, 0, + -18, 0, + 0, 0, + 0, 0, + -16, 0, + -76, 0, + -67, 0, + 0, 0, + -16, 0, + 0, 0, +}; +static CHAR lrargs[] = { + 0, 3, + 3, 4, 3, -8, 4, 3, 5, 1, + 2, 2, 5, -5, 6, 2, + 5, -1, 10, 2, 13, -1, 11, 3, 3, -7, 4, 0, + 3, 1, 13, -1, 11, 2, 5, 1, + 2, 4, 5,-10, 6, 0, + 4, 2, 10, -2, 13, 14, 3,-23, 4, 1, + 3, 3, 2, -7, 3, 4, 4, 1, + 3, -1, 13, 18, 2,-16, 3, 2, + 2, 8, 2,-13, 3, 1, + 5, 2, 10, -2, 13, 2, 3, -3, 5, 1, 6, 0, + 3, -1, 13, 26, 2,-29, 3, 0, + 3, 1, 10, -1, 11, 2, 4, 1, + 4, 1, 10, -1, 13, 3, 2, -4, 3, 1, + 4, 1, 10, -1, 13, 3, 3, -4, 4, 0, + 3, -1, 10, 15, 2,-12, 3, 0, + 4, 2, 10, -3, 13, 24, 2,-24, 3, 0, + 3, -1, 10, 23, 2,-25, 3, 0, + 4, 1, 10, -1, 11, 1, 3, 1, 6, 0, + 4, 2, 10, -2, 11, 5, 2, -6, 3, 0, + 4, 2, 10, -2, 13, 6, 2, -8, 3, 0, + 4, -2, 10, 1, 13, 12, 2, -8, 3, 1, + 5, -1, 10, 1, 13, -1, 11, 20, 2,-20, 3, 1, + 4, -2, 10, 1, 13, 3, 1, -1, 3, 1, + 5, 2, 10, -2, 13, 2, 3, -5, 5, 5, 6, 0, + 4, 2, 10, -2, 13, 2, 3, -3, 5, 1, + 4, 2, 10, -2, 13, 6, 3, -8, 4, 0, + 4, -2, 10, 1, 13, 20, 2,-21, 3, 1, + 4, 1, 10, -1, 11, 1, 3, 1, 5, 0, + 1, 1, 6, 0, + 4, 2, 10, -2, 13, 5, 3, -6, 4, 0, + 3, 3, 2, -5, 3, 2, 5, 0, + 2, -1, 11, 1, 14, 1, + 4, 2, 10, -2, 13, 2, 3, -2, 5, 0, + 2, 1, 3, -2, 4, 1, + 4, 1, 10, -1, 11, 5, 2, -7, 3, 0, + 1, 1, 5, 0, + 2, 7, 3,-13, 4, 0, + 4, -2, 10, 1, 13, 15, 2,-13, 3, 0, + 4, 2, 10, -2, 13, 3, 2, -3, 3, 0, + 2, -2, 11, 2, 14, 1, + 3, 1, 10, 1, 12, -1, 13, 1, + 3, -1, 13, 21, 2,-21, 3, 0, + 2, 3, 2, -5, 3, 0, + 2, 2, 3, -4, 4, 1, + 2, 5, 2, -8, 3, 0, + 3, -1, 13, 23, 2,-24, 3, 0, + 2, 6, 3,-11, 4, 0, + 1, 2, 5, 0, + 2, 3, 3, -6, 4, 0, + 2, 5, 3, -9, 4, 0, + 4, 1, 10, -1, 11, 1, 3, -2, 5, 0, + 3, 2, 10, 2, 12, -2, 13, 1, + 2, 2, 2, -3, 3, 2, + 2, 4, 3, -7, 4, 0, + 2, 2, 13, -2, 11, 0, + 2, 3, 3, -5, 4, 0, + 2, 1, 2, -2, 3, 0, + 2, 2, 3, -3, 4, 0, + 4, 1, 10, -1, 11, 4, 2, -5, 3, 0, + 2, 1, 3, -1, 4, 0, + 2, 4, 2, -6, 3, 0, + 4, 2, 10, -2, 13, 2, 2, -2, 3, 0, + 3, 1, 10, -1, 11, 1, 2, 0, + 2, 1, 2, -1, 3, 0, + 3, 1, 12, 2, 13, -2, 11, 0, + 2, 5, 3, -8, 4, 0, + 2, 1, 3, -3, 5, 0, + 3, 2, 10, 1, 12, -2, 13, 1, + 2, 4, 3, -6, 4, 0, + 2, 1, 3, -2, 5, 1, + 2, 3, 3, -4, 4, 0, + 2, 3, 2, -4, 3, 1, + 2, 1, 10, -1, 13, 0, + 2, 1, 3, -1, 5, 0, + 2, 1, 3, -2, 6, 0, + 2, 2, 3, -2, 4, 0, + 2, 1, 3, -1, 6, 0, + 2, 8, 2,-14, 3, 0, + 3, 1, 3, 2, 5, -5, 6, 1, + 3, 5, 3, -8, 4, 3, 5, 1, + 1, 1, 12, 3, + 3, 3, 3, -8, 4, 3, 5, 1, + 3, 1, 3, -2, 5, 5, 6, 0, + 2, 8, 2,-12, 3, 0, + 2, 1, 3, 1, 5, 0, + 3, 2, 10, 1, 12, -2, 11, 1, + 2, 5, 2, -7, 3, 0, + 3, 1, 10, 1, 13, -2, 11, 0, + 2, 2, 2, -2, 3, 0, + 2, 5, 3, -7, 4, 0, + 3, 1, 12, -2, 13, 2, 11, 0, + 2, 4, 3, -5, 4, 0, + 2, 3, 3, -3, 4, 0, + 1, 1, 2, 0, + 3, 3, 10, 1, 12, -3, 13, 0, + 2, 2, 3, -4, 5, 0, + 2, 2, 3, -3, 5, 0, + 2, 2, 10, -2, 13, 0, + 2, 2, 3, -2, 5, 0, + 2, 3, 2, -3, 3, 0, + 3, 1, 10, -1, 12, -1, 13, 1, + 2, 2, 3, -1, 5, 0, + 2, 2, 3, -2, 6, 0, + 1, 2, 12, 2, + 3, -2, 10, 1, 11, 1, 14, 0, + 2, 2, 10, -2, 11, 0, + 2, 2, 2, -1, 3, 0, + 4, -2, 10, 2, 13, 1, 2, -1, 3, 0, + 2, 4, 2, -4, 3, 0, + 2, 3, 10, -3, 13, 0, + 4, -2, 10, 2, 13, 1, 3, -1, 5, 0, + 2, 3, 3, -3, 5, 0, + 3, 2, 10, -1, 12, -2, 13, 2, + 3, 3, 10, -1, 13, -2, 11, 0, + 1, 3, 12, 1, + 4, -2, 10, 2, 13, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 12, -2, 11, 1, + 2, 5, 2, -5, 3, 0, + 2, 4, 10, -4, 13, 0, + 2, 6, 2, -6, 3, 0, + 3, 2, 10, -2, 12, -2, 13, 1, + 3, 4, 10, -2, 13, -2, 11, 0, + 3, 2, 10, -2, 12, -2, 11, 0, + 2, 7, 2, -7, 3, 0, + 3, 2, 10, -3, 12, -2, 13, 0, + 2, 8, 2, -8, 3, 0, + 2, 9, 2, -9, 3, 0, + 2, 10, 2,-10, 3, 0, + 3, 2, 10, -4, 12, -1, 13, 0, + 3, 4, 10, -2, 12, -3, 13, 0, + 4, 4, 10, -1, 12, -1, 13, -2, 11, 0, + 3, 2, 10, -3, 12, -1, 13, 1, + 4, -2, 10, 1, 13, 3, 3, -2, 5, 0, + 3, 4, 10, -1, 12, -3, 13, 0, + 4, -2, 10, 1, 13, 3, 3, -3, 5, 0, + 4, 2, 10, -2, 12, 1, 13, -2, 11, 0, + 4, -2, 10, 1, 13, 2, 2, -1, 3, 0, + 3, 3, 10, -1, 12, -2, 11, 0, + 3, 4, 10, -1, 13, -2, 11, 0, + 3, 2, 10, -2, 12, -1, 13, 2, + 4, -2, 10, 1, 13, 2, 3, -1, 5, 0, + 3, 3, 10, -1, 12, -2, 13, 0, + 4, -2, 10, 1, 13, 3, 2, -3, 3, 0, + 4, -2, 10, 1, 13, 2, 3, -2, 5, 0, + 2, 4, 10, -3, 13, 0, + 4, -2, 10, 1, 13, 2, 3, -3, 5, 0, + 3, -2, 10, 1, 13, 1, 2, 0, + 4, 2, 10, -1, 12, 1, 13, -2, 11, 1, + 4, -2, 10, 1, 13, 2, 2, -2, 3, 0, + 2, 3, 12, -1, 13, 0, + 2, 3, 10, -2, 11, 0, + 2, 1, 10, -2, 12, 0, + 4, 4, 10, 1, 12, -1, 13, -2, 11, 0, + 3, -1, 13, 3, 2, -2, 3, 0, + 3, -1, 13, 3, 3, -2, 5, 0, + 3, -2, 10, 18, 2,-15, 3, 0, + 5, 2, 10, -1, 13, 3, 3, -8, 4, 3, 5, 0, + 3, 2, 10, -1, 12, -1, 13, 2, + 5, -2, 10, 1, 13, 5, 3, -8, 4, 3, 5, 0, + 5, -2, 10, 1, 13, 1, 3, 2, 5, -5, 6, 0, + 4, 2, 10, -2, 13, 18, 2,-17, 3, 0, + 4, -2, 10, 1, 13, 1, 3, -1, 6, 0, + 4, -2, 10, 1, 13, 2, 3, -2, 4, 0, + 4, -2, 10, 1, 13, 1, 3, -1, 5, 0, + 2, 3, 10, -2, 13, 0, + 4, -2, 10, 1, 13, 3, 2, -4, 3, 0, + 4, -2, 10, 1, 13, 3, 3, -4, 4, 0, + 4, -2, 10, 1, 13, 1, 3, -2, 5, 0, + 3, 4, 10, 1, 12, -3, 13, 0, + 4, -2, 10, 1, 13, 1, 3, -3, 5, 0, + 3, -1, 13, 4, 2, -4, 3, 0, + 4, -2, 10, 1, 13, 1, 2, -1, 3, 0, + 4, -2, 10, 1, 13, 1, 3, -1, 4, 0, + 4, -2, 10, 1, 13, 2, 3, -3, 4, 0, + 4, -2, 10, 1, 13, 3, 3, -5, 4, 0, + 3, 2, 10, 1, 13, -2, 11, 0, + 4, -2, 10, -1, 13, 1, 11, 1, 14, 0, + 4, -2, 10, 1, 13, 2, 2, -3, 3, 1, + 2, 2, 12, -1, 13, 1, + 3, 3, 10, 1, 12, -2, 11, 0, + 4, 2, 10, -1, 13, 2, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 3, 2, -5, 3, 0, + 2, 1, 10, -1, 12, 1, + 3, -1, 13, 3, 2, -3, 3, 0, + 3, -2, 10, 1, 13, 1, 5, 0, + 4, 2, 10, -1, 13, 1, 3, -2, 4, 0, + 3, -1, 13, 2, 3, -2, 5, 0, + 4, 2, 10, -1, 13, -1, 11, 1, 14, 0, + 3, -1, 13, 5, 3, -6, 4, 0, + 3, -2, 10, 1, 13, 1, 6, 0, + 3, -1, 10, 1, 3, -1, 5, 0, + 4, -2, 10, 1, 13, 8, 2,-13, 3, 1, + 3, -2, 10, 18, 2,-16, 3, 1, + 5, -2, 10, 1, 13, 3, 2, -7, 3, 4, 4, 1, + 4, 2, 10, -1, 13, 2, 5, -5, 6, 1, + 5, 2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 1, + 2, 2, 10, -1, 13, 2, + 5, -2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 1, + 4, -2, 10, 1, 13, 2, 5, -5, 6, 1, + 5, 2, 10, -1, 13, 3, 2, -7, 3, 4, 4, 0, + 4, 2, 10, -2, 13, 18, 2,-16, 3, 1, + 4, 2, 10, -1, 13, 8, 2,-13, 3, 1, + 3, -1, 10, 3, 2, -4, 3, 0, + 3, -1, 13, 6, 2, -8, 3, 0, + 3, -1, 13, 2, 3, -3, 5, 0, + 3, -1, 13, 6, 3, -8, 4, 0, + 3, 2, 10, -1, 13, 1, 6, 0, + 4, -2, 10, 1, 13, -1, 11, 1, 14, 0, + 4, -2, 10, 1, 13, 1, 3, -2, 4, 0, + 3, 2, 10, -1, 13, 1, 5, 0, + 3, 3, 10, 1, 12, -2, 13, 0, + 4, -2, 10, 1, 13, 3, 2, -5, 3, 0, + 4, -2, 10, 1, 13, 2, 3, -4, 4, 0, + 2, -1, 13, 1, 2, 0, + 4, 2, 10, -1, 13, 2, 2, -3, 3, 0, + 3, -1, 10, 1, 2, -1, 3, 0, + 3, -1, 13, 4, 2, -5, 3, 0, + 3, 2, 10, -3, 13, 2, 11, 0, + 4, 2, 10, -1, 13, 2, 3, -3, 4, 0, + 3, -1, 13, 2, 2, -2, 3, 0, + 4, 2, 10, -1, 13, 1, 2, -1, 3, 0, + 4, 2, 10, 1, 12, 1, 13, -2, 11, 0, + 3, -2, 13, 18, 2,-15, 3, 0, + 2, 1, 12, -1, 13, 2, + 3, -1, 13, 1, 3, -1, 6, 0, + 4, 2, 10, -1, 13, 1, 3, -2, 5, 0, + 3, -1, 13, 2, 3, -2, 4, 0, + 3, -1, 13, 1, 3, -1, 5, 0, + 4, 2, 10, -1, 13, 3, 3, -4, 4, 0, + 1, 1, 10, 0, + 3, -1, 13, 3, 2, -4, 3, 0, + 3, -1, 13, 3, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 1, 3, -1, 5, 0, + 4, 2, 10, -1, 13, 2, 3, -2, 4, 0, + 3, -1, 13, 1, 3, -2, 5, 0, + 3, 2, 10, 1, 12, -1, 13, 2, + 3, 1, 12, 1, 13, -2, 11, 0, + 3, -1, 13, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 13, 2, 2, -2, 3, 0, + 3, -1, 13, 4, 2, -6, 3, 0, + 3, -1, 13, 2, 3, -3, 4, 0, + 3, 1, 13, 1, 2, -2, 3, 0, + 4, 2, 10, -1, 13, 3, 3, -3, 4, 0, + 2, 3, 13, -2, 11, 0, + 4, 2, 10, -1, 13, 4, 2, -5, 3, 0, + 3, 1, 10, 1, 2, -1, 3, 0, + 3, -1, 13, 2, 2, -3, 3, 1, + 3, 2, 10, 2, 12, -3, 13, 0, + 3, 2, 10, -1, 13, 1, 2, 0, + 3, 1, 13, 2, 3, -4, 4, 0, + 3, 1, 13, 3, 2, -5, 3, 0, + 2, 21, 2,-21, 3, 0, + 3, 1, 10, 1, 12, -2, 13, 1, + 4, 2, 10, -1, 13, 2, 3, -4, 5, 0, + 4, 2, 10, -1, 13, 7, 3,-10, 4, 0, + 2, -1, 13, 1, 5, 0, + 3, 1, 13, 1, 3, -2, 4, 0, + 4, 2, 10, -3, 13, 2, 3, -2, 5, 0, + 3, 1, 10, 1, 3, -2, 5, 0, + 3, 1, 13, -1, 11, 1, 14, 1, + 2, -1, 13, 1, 6, 0, + 4, 2, 10, -1, 13, 6, 3, -8, 4, 1, + 4, 2, 10, -1, 13, 2, 3, -3, 5, 1, + 3, -1, 13, 8, 3,-15, 4, 0, + 4, 2, 10, -1, 13, 6, 2, -8, 3, 0, + 5, 2, 10, -1, 13, -2, 11, 5, 2, -6, 3, 0, + 3, 1, 10, 3, 3, -4, 4, 0, + 3, 1, 10, 3, 2, -4, 3, 1, + 4, 1, 10, -1, 13, -1, 11, 2, 4, 0, + 3, -2, 13, 26, 2,-29, 3, 0, + 3, -1, 13, 8, 2,-13, 3, 0, + 3, -2, 13, 18, 2,-16, 3, 2, + 4, -1, 13, 3, 2, -7, 3, 4, 4, 0, + 3, 1, 13, 2, 5, -5, 6, 1, + 4, 1, 13, 4, 3, -8, 4, 3, 5, 1, + 1, 1, 13, 3, + 4, -1, 13, 4, 3, -8, 4, 3, 5, 1, + 3, -1, 13, 2, 5, -5, 6, 1, + 4, 1, 13, 3, 2, -7, 3, 4, 4, 0, + 2, 18, 2,-16, 3, 1, + 3, 1, 13, 8, 2,-13, 3, 2, + 2, 26, 2,-29, 3, 0, + 4, 1, 10, 1, 13, -1, 11, 2, 4, 0, + 5, 2, 10, 1, 13, -2, 11, 5, 2, -6, 3, 0, + 3, 1, 13, 8, 3,-15, 4, 1, + 4, 2, 10, -3, 13, 2, 3, -3, 5, 0, + 3, 1, 10, 1, 3, -1, 5, 0, + 2, 1, 13, 1, 6, 0, + 4, 2, 10, -1, 13, 5, 3, -6, 4, 0, + 3, 1, 10, 2, 3, -2, 4, 0, + 3, -1, 13, -1, 11, 1, 14, 1, + 4, 2, 10, -1, 13, 2, 3, -5, 6, 0, + 4, 2, 10, -1, 13, 2, 3, -2, 5, 0, + 5, 2, 10, -1, 13, 2, 3, -4, 5, 5, 6, 0, + 3, -1, 13, 1, 3, -2, 4, 1, + 2, 1, 13, 1, 5, 0, + 4, 2, 10, -1, 13, 4, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 3, 2, -3, 3, 0, + 4, 2, 10, 2, 12, -1, 13, -2, 11, 0, + 2, 1, 10, 1, 12, 2, + 3, -1, 13, 3, 2, -5, 3, 0, + 3, -1, 13, 2, 3, -4, 4, 0, + 4, 2, 10, -1, 13, 2, 3, -1, 5, 0, + 4, 2, 10, -1, 13, 2, 3, -2, 6, 0, + 3, 1, 10, 1, 12, -2, 11, 0, + 3, 2, 10, 2, 12, -1, 13, 1, + 3, 1, 13, 2, 2, -3, 3, 1, + 3, -1, 13, 1, 11, 1, 14, 0, + 2, 1, 13, -2, 11, 0, + 4, 2, 10, -1, 13, 5, 2, -6, 3, 0, + 3, -1, 13, 1, 2, -2, 3, 0, + 3, 1, 13, 2, 3, -3, 4, 0, + 3, 1, 13, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 13, 4, 2, -4, 3, 0, + 3, 2, 10, 1, 12, -3, 13, 1, + 3, 1, 13, 1, 3, -2, 5, 0, + 3, 1, 13, 3, 3, -4, 4, 0, + 3, 1, 13, 3, 2, -4, 3, 0, + 2, 1, 10, -2, 13, 0, + 4, 2, 10, -1, 13, 3, 3, -4, 5, 0, + 3, 1, 13, 1, 3, -1, 5, 0, + 3, 1, 13, 2, 3, -2, 4, 0, + 3, 1, 13, 1, 3, -1, 6, 0, + 4, 2, 10, -1, 13, 3, 3, -3, 5, 0, + 4, 2, 10, -1, 13, 6, 2, -7, 3, 0, + 2, 1, 12, 1, 13, 2, + 4, 2, 10, -1, 13, 3, 3, -2, 5, 0, + 4, 2, 10, 1, 12, -1, 13, -2, 11, 0, + 2, 1, 10, 2, 12, 0, + 2, 1, 10, -2, 11, 0, + 3, 1, 13, 2, 2, -2, 3, 0, + 3, 1, 12, -1, 13, 2, 11, 0, + 4, 2, 10, -1, 13, 5, 2, -5, 3, 0, + 3, 1, 13, 2, 3, -3, 5, 0, + 2, 2, 10, -3, 13, 0, + 3, 1, 13, 2, 3, -2, 5, 0, + 3, 1, 13, 3, 2, -3, 3, 0, + 3, 1, 10, -1, 12, -2, 13, 0, + 4, 2, 10, -1, 13, 6, 2, -6, 3, 0, + 2, 2, 12, 1, 13, 1, + 3, 2, 10, -1, 13, -2, 11, 0, + 3, 1, 10, -1, 12, -2, 11, 0, + 3, 2, 10, 1, 13, -4, 11, 0, + 3, 1, 13, 4, 2, -4, 3, 0, + 4, 2, 10, -1, 13, 7, 2, -7, 3, 0, + 3, 2, 10, -1, 12, -3, 13, 1, + 2, 3, 12, 1, 13, 0, + 4, 2, 10, -1, 12, -1, 13, -2, 11, 0, + 3, 1, 13, 5, 2, -5, 3, 0, + 4, 2, 10, -1, 13, 8, 2, -8, 3, 0, + 3, 2, 10, -2, 12, -3, 13, 0, + 4, 2, 10, -1, 13, 9, 2, -9, 3, 0, + 3, 4, 10, -3, 12, -2, 13, 0, + 2, 2, 10, -4, 12, 0, + 3, 4, 10, -2, 12, -2, 13, 1, + 2, 6, 10, -4, 13, 0, + 3, 4, 10, -1, 12, -2, 11, 0, + 2, 2, 10, -3, 12, 1, + 3, 3, 10, -2, 12, -1, 13, 0, + 3, -2, 10, 3, 3, -2, 5, 0, + 3, 4, 10, -1, 12, -2, 13, 1, + 3, -2, 10, 3, 3, -3, 5, 0, + 2, 5, 10, -3, 13, 0, + 3, -2, 10, 4, 2, -4, 3, 0, + 3, -2, 10, 2, 2, -1, 3, 0, + 2, 4, 10, -2, 11, 0, + 2, 2, 10, -2, 12, 2, + 3, -2, 10, 3, 3, -2, 4, 0, + 3, -2, 10, 2, 3, -1, 5, 0, + 3, 3, 10, -1, 12, -1, 13, 1, + 3, -2, 10, 3, 2, -3, 3, 0, + 3, -2, 10, 2, 3, -2, 5, 0, + 2, 4, 10, -2, 13, 0, + 3, -2, 10, 2, 3, -3, 5, 0, + 2, -2, 10, 1, 2, 0, + 4, 2, 10, -1, 12, 2, 13, -2, 11, 0, + 3, -2, 10, 2, 2, -2, 3, 0, + 3, 3, 10, 1, 13, -2, 11, 0, + 3, 4, 10, 1, 12, -2, 11, 0, + 4, 2, 10, -1, 12, -1, 11, 1, 14, 0, + 4, -2, 10, -1, 13, 18, 2,-15, 3, 0, + 4, 2, 10, 3, 3, -8, 4, 3, 5, 0, + 2, 2, 10, -1, 12, 2, + 4, -2, 10, 5, 3, -8, 4, 3, 5, 0, + 4, 2, 10, -1, 13, 18, 2,-17, 3, 0, + 3, -2, 10, 1, 3, -1, 6, 0, + 3, -2, 10, 2, 3, -2, 4, 0, + 3, -2, 10, 1, 3, -1, 5, 0, + 2, 3, 10, -1, 13, 0, + 3, -2, 10, 3, 2, -4, 3, 0, + 3, -2, 10, 3, 3, -4, 4, 0, + 3, -2, 10, 1, 3, -2, 5, 0, + 3, 4, 10, 1, 12, -2, 13, 1, + 4, 2, 10, -1, 12, -2, 13, 2, 11, 0, + 3, -2, 10, 1, 2, -1, 3, 0, + 3, -2, 10, 2, 3, -3, 4, 0, + 3, 2, 10, 2, 13, -2, 11, 0, + 3, -2, 10, 2, 2, -3, 3, 0, + 2, 2, 12, -2, 13, 1, + 3, 2, 10, 2, 3, -4, 4, 0, + 3, 2, 10, 3, 2, -5, 3, 0, + 3, 1, 10, -1, 12, 1, 13, 1, + 3, -2, 13, 3, 2, -3, 3, 0, + 2, -2, 10, 1, 5, 0, + 3, 2, 10, 1, 3, -2, 4, 0, + 3, -2, 13, 2, 3, -2, 5, 0, + 3, 2, 10, -1, 11, 1, 14, 0, + 4, 4, 10, -2, 13, 2, 3, -3, 5, 0, + 3, -2, 10, 8, 2,-13, 3, 0, + 4, -2, 10, -1, 13, 18, 2,-16, 3, 1, + 4, -2, 10, 3, 2, -7, 3, 4, 4, 0, + 4, 2, 10, 4, 3, -8, 4, 3, 5, 1, + 1, 2, 10, 3, + 4, -2, 10, 4, 3, -8, 4, 3, 5, 1, + 4, 2, 10, 3, 2, -7, 3, 4, 4, 0, + 4, 2, 10, -1, 13, 18, 2,-16, 3, 1, + 3, 2, 10, 8, 2,-13, 3, 0, + 3, -2, 10, -1, 11, 1, 14, 0, + 4, 4, 10, -2, 13, 2, 3, -2, 5, 0, + 3, -2, 10, 1, 3, -2, 4, 0, + 2, 2, 10, 1, 5, 0, + 4, 4, 10, -2, 13, 3, 2, -3, 3, 0, + 3, 3, 10, 1, 12, -1, 13, 1, + 3, -2, 10, 3, 2, -5, 3, 0, + 3, -2, 10, 2, 3, -4, 4, 0, + 3, 4, 10, 2, 12, -2, 13, 0, + 3, 2, 10, 2, 2, -3, 3, 0, + 3, 2, 10, -2, 13, 2, 11, 0, + 3, 2, 10, 1, 2, -1, 3, 0, + 4, 2, 10, 1, 12, 2, 13, -2, 11, 0, + 2, 1, 12, -2, 13, 2, + 3, 2, 10, 1, 3, -2, 5, 0, + 3, -2, 13, 1, 3, -1, 5, 0, + 3, 2, 10, 3, 2, -4, 3, 0, + 2, 1, 10, 1, 13, 0, + 3, 2, 10, 1, 3, -1, 5, 0, + 3, 2, 10, 2, 3, -2, 4, 0, + 2, 2, 10, 1, 12, 2, + 2, 1, 12, -2, 11, 0, + 3, -2, 13, 1, 2, -1, 3, 0, + 3, 1, 10, -1, 13, 2, 11, 0, + 3, 2, 10, 2, 2, -2, 3, 0, + 3, 1, 10, 1, 12, -3, 13, 0, + 3, 2, 13, -1, 11, 1, 14, 0, + 3, 2, 10, 2, 3, -3, 5, 0, + 3, 2, 10, 6, 2, -8, 3, 0, + 3, -3, 13, 18, 2,-16, 3, 1, + 3, 2, 13, 2, 5, -5, 6, 0, + 4, 2, 13, 4, 3, -8, 4, 3, 5, 0, + 1, 2, 13, 0, + 4, -2, 13, 4, 3, -8, 4, 3, 5, 0, + 3, -2, 13, 2, 5, -5, 6, 0, + 3, 1, 13, 18, 2,-16, 3, 1, + 3, -2, 13, -1, 11, 1, 14, 0, + 3, 2, 10, 2, 3, -2, 5, 0, + 3, 2, 10, 3, 2, -3, 3, 0, + 3, 1, 10, 1, 12, 1, 13, 1, + 2, 2, 10, 2, 12, 1, + 2, 1, 11, 1, 14, 1, + 4, -1, 13, -2, 11, 18, 2,-16, 3, 0, + 1, 2, 11, 0, + 4, -1, 13, 2, 11, 18, 2,-16, 3, 0, + 2, -3, 11, 1, 14, 0, + 3, 2, 13, 1, 2, -1, 3, 0, + 3, 2, 10, 4, 2, -4, 3, 0, + 3, 2, 10, 1, 12, -4, 13, 0, + 2, 1, 10, -3, 13, 0, + 3, 2, 13, 1, 3, -1, 5, 0, + 2, 1, 12, 2, 13, 2, + 3, 1, 10, 2, 12, 1, 13, 0, + 3, 1, 10, -1, 13, -2, 11, 0, + 2, 1, 12, 2, 11, 1, + 3, 2, 10, 5, 2, -5, 3, 0, + 2, 2, 10, -4, 13, 0, + 3, 2, 10, 6, 2, -6, 3, 0, + 2, 2, 12, 2, 13, 0, + 3, 2, 10, -2, 13, -2, 11, 0, + 2, 2, 12, 2, 11, 0, + 2, 2, 10, -4, 11, 0, + 3, 2, 10, 7, 2, -7, 3, 0, + 3, 2, 10, -1, 12, -4, 13, 0, + 4, 2, 10, -1, 12, -2, 13, -2, 11, 0, + 3, 2, 10, 8, 2, -8, 3, 0, + 3, 2, 10, 9, 2, -9, 3, 0, + 3, 4, 10, -3, 12, -1, 13, 0, + 3, 6, 10, -1, 12, -3, 13, 0, + 3, 4, 10, -2, 12, -1, 13, 1, + 3, 5, 10, -1, 12, -2, 13, 0, + 2, 6, 10, -3, 13, 0, + 4, 4, 10, -1, 12, 1, 13, -2, 11, 0, + 3, 2, 10, -3, 12, 1, 13, 0, + 2, 3, 10, -2, 12, 0, + 3, 4, 10, -1, 12, -1, 13, 1, + 2, 5, 10, -2, 13, 0, + 3, 6, 10, 1, 12, -3, 13, 0, + 3, 4, 10, 1, 13, -2, 11, 0, + 3, 2, 10, -2, 12, 1, 13, 1, + 2, 3, 10, -1, 12, 0, + 4, -2, 10, -1, 13, 2, 3, -2, 5, 0, + 2, 4, 10, -1, 13, 0, + 4, 2, 10, -2, 12, -1, 13, 2, 11, 0, + 3, 4, 10, -3, 13, 2, 11, 0, + 4, -2, 10, -1, 13, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 12, 1, 13, 2, + 4, -2, 10, -1, 13, 1, 3, -1, 5, 0, + 1, 3, 10, 0, + 3, 4, 10, 1, 12, -1, 13, 1, + 4, 2, 10, -1, 12, -1, 13, 2, 11, 1, + 4, -2, 10, -1, 13, 1, 2, -1, 3, 0, + 3, 2, 10, 3, 13, -2, 11, 0, + 2, 2, 12, -3, 13, 0, + 3, 1, 10, -1, 12, 2, 13, 0, + 4, 2, 10, 1, 13, -1, 11, 1, 14, 0, + 4, -2, 10, -2, 13, 18, 2,-16, 3, 0, + 5, 2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 0, + 2, 2, 10, 1, 13, 1, + 5, -2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 0, + 3, 2, 10, 18, 2,-16, 3, 0, + 4, -2, 10, -1, 13, -1, 11, 1, 14, 0, + 4, 4, 10, -1, 13, 2, 3, -2, 5, 0, + 4, 4, 10, -1, 13, 3, 2, -3, 3, 0, + 2, 3, 10, 1, 12, 1, + 3, 4, 10, 2, 12, -1, 13, 0, + 4, 2, 10, -1, 13, 1, 11, 1, 14, 0, + 3, 2, 10, -1, 13, 2, 11, 0, + 2, 1, 12, -3, 13, 1, + 2, 1, 10, 2, 13, 0, + 3, 2, 10, 1, 12, 1, 13, 1, + 3, 1, 12, -1, 13, -2, 11, 1, + 2, 1, 10, 2, 11, 0, + 4, 2, 10, 1, 12, -1, 13, 2, 11, 0, + 1, 3, 13, 0, + 4, 2, 10, 1, 13, 2, 3, -2, 5, 0, + 3, 1, 10, 1, 12, 2, 13, 0, + 3, 2, 10, 2, 12, 1, 13, 0, + 3, 1, 13, 1, 11, 1, 14, 0, + 2, 1, 13, 2, 11, 0, + 3, 1, 10, 1, 12, 2, 11, 0, + 4, 2, 10, 2, 12, -1, 13, 2, 11, 0, + 2, 1, 13, -4, 11, 0, + 2, 1, 10, -4, 13, 0, + 2, 1, 12, 3, 13, 1, + 3, 1, 12, 1, 13, 2, 11, 1, + 2, 2, 10, -5, 13, 0, + 3, 2, 10, -3, 13, -2, 11, 0, + 3, 2, 10, -1, 13, -4, 11, 0, + 3, 6, 10, -2, 12, -2, 13, 0, + 2, 4, 10, -3, 12, 0, + 3, 6, 10, -1, 12, -2, 13, 0, + 2, 4, 10, -2, 12, 1, + 2, 6, 10, -2, 13, 0, + 2, 4, 10, -1, 12, 1, + 2, 5, 10, -1, 13, 0, + 3, 6, 10, 1, 12, -2, 13, 0, + 4, 4, 10, -1, 12, -2, 13, 2, 11, 0, + 3, 4, 10, 2, 13, -2, 11, 0, + 3, 2, 10, -2, 12, 2, 13, 0, + 1, 4, 10, 0, + 3, 2, 10, -2, 12, 2, 11, 0, + 3, 4, 10, -2, 13, 2, 11, 0, + 3, 2, 10, -1, 12, 2, 13, 1, + 2, 3, 10, 1, 13, 0, + 2, 4, 10, 1, 12, 1, + 3, 2, 10, -1, 12, 2, 11, 1, + 3, 3, 10, -1, 13, 2, 11, 0, + 2, 2, 10, 2, 13, 0, + 3, 3, 10, 1, 12, 1, 13, 0, + 3, 2, 10, 1, 11, 1, 14, 0, + 2, 2, 10, 2, 11, 0, + 2, 1, 12, -4, 13, 0, + 2, 1, 10, 3, 13, 0, + 3, 2, 10, 1, 12, 2, 13, 1, + 3, 1, 12, -2, 13, -2, 11, 0, + 3, 1, 10, 1, 13, 2, 11, 0, + 3, 2, 10, 1, 12, 2, 11, 0, + 1, 4, 13, 0, + 3, 1, 10, 1, 12, 3, 13, 0, + 2, 2, 13, 2, 11, 0, + 4, 1, 10, 1, 12, 1, 13, 2, 11, 0, + 1, 4, 11, 0, + 2, 1, 12, 4, 13, 0, + 3, 1, 12, 2, 13, 2, 11, 0, + 3, 2, 10, -4, 13, -2, 11, 0, + 3, 6, 10, -2, 12, -1, 13, 0, + 2, 8, 10, -3, 13, 0, + 3, 6, 10, -1, 12, -1, 13, 0, + 3, 4, 10, -2, 12, 1, 13, 0, + 2, 6, 10, -1, 13, 0, + 3, 4, 10, -1, 12, 1, 13, 1, + 3, 6, 10, 1, 12, -1, 13, 0, + 4, 4, 10, -1, 12, -1, 13, 2, 11, 0, + 3, 2, 10, -2, 12, 3, 13, 0, + 2, 4, 10, 1, 13, 0, + 3, 4, 10, -1, 13, 2, 11, 0, + 3, 2, 10, -1, 12, 3, 13, 0, + 3, 4, 10, 1, 12, 1, 13, 0, + 4, 2, 10, -1, 12, 1, 13, 2, 11, 0, + 2, 2, 10, 3, 13, 0, + 3, 2, 10, 1, 13, 2, 11, 0, + 3, 2, 10, -1, 13, 4, 11, 0, + 3, 2, 10, 1, 12, 3, 13, 0, + 3, 1, 12, -3, 13, -2, 11, 0, + 3, 1, 10, 2, 13, 2, 11, 0, + 4, 2, 10, 1, 12, 1, 13, 2, 11, 0, + 1, 5, 13, 0, + 2, 3, 13, 2, 11, 0, + 2, 1, 13, 4, 11, 0, + 3, 1, 12, 3, 13, 2, 11, 0, + 2, 8, 10, -2, 13, 0, + 2, 6, 10, -1, 12, 0, + 1, 6, 10, 0, + 3, 6, 10, -2, 13, 2, 11, 0, + 3, 4, 10, -1, 12, 2, 13, 0, + 3, 4, 10, -1, 12, 2, 11, 0, + 2, 4, 10, 2, 13, 0, + 2, 4, 10, 2, 11, 0, + 3, 2, 10, -1, 12, 4, 13, 0, + 3, 4, 10, 1, 12, 2, 13, 0, + 4, 2, 10, -1, 12, 2, 13, 2, 11, 0, + 2, 2, 10, 4, 13, 0, + 3, 2, 10, 2, 13, 2, 11, 0, + 2, 2, 10, 4, 11, 0, + 1, 6, 13, 0, + 2, 4, 13, 2, 11, 0, + 2, 2, 13, 4, 11, 0, + 3, 6, 10, -1, 12, 1, 13, 0, + 2, 6, 10, 1, 13, 0, + 2, 4, 10, 3, 13, 0, + 3, 4, 10, 1, 13, 2, 11, 0, + 2, 2, 10, 5, 13, 0, + 3, 2, 10, 3, 13, 2, 11, 0, + -1 +}; + +static long btabr[] = {-1}; +static long btabb[] = {-1}; +static long btabl[] = { + -3, -4, + 4, -1856, 0, 8043, + -9, -1082, + -1, -310, + -1, -522, + -330, -1449, -853, 4656, + -66, 7, + -1, 9996928, + -66, 6, + 23, 183, + 0, 173, + 0, -56, + 0, 50, + 0, -785, + 1, 51, + 0, -60, + 1, 11843, 0, -50754, + 0, 1834, 1, -7910, + 0, -48060, + 1, 56, + 0, 13141, -1, -56318, + 0, 2541, + -1, -649, + -133, 778, + -46, 8, + 1, 1665737, + -47, 7, + 0, 65, + 0, 45, + 0, -138, + 0, -1005, + 0, -2911, + 0, -47, + 0, 96, + 0, -394, + 2, 76, + 2, -17302, 0, 74337, + 0, -101, + 0, 58, + 0, -171, + 0, -77, + 0, -1283, 0, 2686, + 0, -55, + 0, 99, + 0, 55, + 0, 397, + 0, 540, + 0, 626, + -1, -5188, 0, 10857, + 0, -216, + -2, -123, + 0, 6337, + 2, 224, + -152, -23472, -29, -74336, 0, 295775, + -20, 149, + -2, 84, + 9, 304, + 0, -3051, + -70, -6, + -57, 34, + 0, -638, + 0, -201, + -73, 9, + 0, -100, + -101, -8, + 0, -57, + 0, -207, + -3, 80, + -45, 45, + -5, 102, + -59, -23, + 52, 201, + -48, 233, -220, 71, + 4, 2810, 0, 6236541, + -61, 218, -216, 67, + 51, 201, + -59, -23, + -144, -837, -457, 3029, + -45, 42, + -15, 73, + -6, -169, + 0, 135, + -64, -7, + 0, -16245, + 0, -81, + -74, -10, + 0, 702, 0, -3013, + 0, -5889, + 1, 141, + 58, 9598, 12, 30443, 1, -120946, + -1, -84, + -2, 11246, -1, -48391, + 0, 1393, + 0, 200, + -136, -17, + 0, 558, + -64, -8, + 0, -71, + 0, 317577, + -28, 183, + 1, 219, + 0, 421, + 0, -133, + 501, -139, + 3, 354, + -101, -13, + 74, 7, + 144, -84, + 59, -2, + 1, 64, + -2931, 12559, -4641, 2638, -303, -2058, + -13, -100, -123, -79, + -19214, 6084, 1494, 26993, 15213, -82219, + 42, 52, 48, -101, + -53, -4, + 4, 47, + 58, -131, + 46, 14, + -21, -6, + -1311, -8791, 10198, -4185, 2815, 5640, + 167, 422, -229, 83, + 3140, 39, 1221, 120, 96, -30, + -1, 184612405, + 187, 416, -226, 81, + -1985, -10083, 9983, -4464, 2807, 5643, + -21, -9, + 113, -367, + 120, 580, -667, 27, + 8, 66, + -56, -6, + 337, 95, + -87, 3303, + -1, 65, + 68, -374, + 0, -574, + 15, -94, + 0, -53, + 0, -1303, + 0, -236, + 283, 36, + -1, -54, + 269, -35, + 0, -83, + 0, -52, + 0, 730, 0, -3129, + 0, 813, + 0, -4299, + 1, 59, + -6, 5130, 1, 16239, -1, -64603, + 0, -80, + 91, 12, + 0, -561, + 133, -17, + 0, 250, + -12, 71, + 0, 155664, + 82, -11, + 0, 106, + 0, -604, + 0, 21862, + 55, -7, + 0, -1514, 0, 6501, + 0, 906, + 0, -68, + 0, 241, + 0, 366, + 0, 70, + 0, -1382, 0, 5957, + 0, 113, + 0, -51, + 0, -55, + 0, 731, + 0, -264, + 0, 65788, + 1, -1504, 0, 3147, + 0, 217, + 0, -4105, 0, 17658, + 1, 69, + 0, -3518, + 0, -1767, + -43, -7044, -10, -22304, 0, 88685, + 3, 91, + 0, -485, + 0, -57, + -1, 333548, + -24, 172, + 11, 544, 1, -1132, + 0, 353, + 0, -188, + 0, 53, + 0, 77, + 158, -887, + 35, 131, + -54, 13, + 0, 1994821, + -53, 14, + 36, 125, + 2, 56, + 0, -243, + 0, -364, + -2, 1916, 0, -8227, + 0, 15700, -1, -67308, + 1, 66, + 0, -53686, + 1, 3058, 1, -13177, + 0, -72, + 0, -72, + 0, 61, + 0, 15812, + 0, 165, + 8, -96, + 318, 1341, 803, -4252, + 24, 193, + 1137, -226, 310, 622, + -56, 30, + -3, 10101666, + -56, 30, + 1096, -225, 300, 600, + -31, 409, + -1, -507, + 0, -287, + 0, -1869, 0, 8026, + 1, 544, -1, -1133, + 0, 27984, + 0, -62, + 0, -249, + 0, 187, + 0, -1096, + 1, 53, + 2, 12388, 0, -53107, + 0, -322, + 0, -94, + 0, 15157, + 0, -582, + 0, 3291, + 0, 565, + 0, 106, + 0, 112, + 0, 306, + 0, 809, + 0, 130, + 0, -961, 0, 4149, + 0, 174, + 0, -105, + 0, 2196, + 0, 59, + 0, 36737, + -1, -1832, 0, 3835, + 0, -139, + 0, 24138, + 0, 1325, + 1, 64, + 0, -361, + 0, -1162, + -44, -6320, -10, -20003, 0, 79588, + 2, 80, + 0, -2059, + 0, -304, + 0, 21460, + 0, -166, + 0, -87, + 89, -493, + 32, 114, + 34, 510, 1, 1172616, + 31, 113, + -1, 57, + 0, 214, + 0, -656, + 0, -646, + 0, 1850, 0, -7931, + 0, -6674, + 0, 2944, 0, -12641, + 0, 916, + 45, -255, + 16, 60, + -1, 619116, + 16, 57, + 0, -58, + 0, 1045, + 0, -156, + -15, 88, + 0, -62964, + 0, -126, + 0, 1490, 0, -6387, + 0, 119, + 0, 1338, + 0, -56, + 0, 204, + 0, 153, + 0, 940, + 0, 251, + 0, 312, + 0, 584, + 0, -786, 0, 3388, + 0, -52, + 0, 4733, + 0, 618, + 0, 29982, + 0, 101, + 0, -174, + 0, -2637, 0, 11345, + 0, -284, + 0, -524, + 0, -121, + 0, 1464, + 11, -60, + -1, 151205, + 0, 139, + 0, -2448, + 0, -51, + 0, -768, + 0, -638, + 0, 552, 0, -2370, + 0, 70, + 0, 64, + 0, 57, + 0, 39840, + 0, 104, + 0, -10194, + 0, -635, + 0, 69, + 0, 113, + 0, 67, + 0, 96, + 0, 367, + 0, 134, + 0, 596, + 0, 63, + 0, 1622, + 0, 483, + 0, 72, + 0, 11917, + 0, -63, + 0, 1273, + 0, -66, + 0, -262, + 0, -97, + 0, 103, + 0, 15196, + 0, -1445, + 0, -66, + 0, -55, + 0, -323, + 0, 2632, + 0, -1179, + 0, 59, + 0, -56, + 0, 78, + 0, 65, + 0, 422, + 0, 309, + 0, 2125, + 0, -66, + 0, 124, + 0, -57, + 0, 1379, + 0, -304, + 0, 177, + 0, -118, + 0, 146, + 0, 283, + 0, 119, +}; +static CHAR bargs[] = { + 0, 1, + 3, 1, 10, 1, 12, -1, 11, 1, + 4, 2, 10, 2, 12, -1, 13, -1, 11, 0, + 5, 2, 10, -1, 13, -1, 11, 3, 2, -3, 3, 0, + 5, 2, 10, -1, 13, -1, 11, 2, 3, -2, 5, 0, + 2, -1, 13, 1, 14, 1, + 5, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 2, 1, 13, -1, 11, 0, + 5, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 5, 2, 10, -1, 13, -1, 11, 2, 3, -3, 5, 0, + 4, 1, 10, 1, 12, -2, 13, 1, 11, 0, + 4, 1, 13, -1, 11, 1, 2, -1, 3, 0, + 5, 2, 10, -1, 13, -1, 11, 2, 2, -2, 3, 0, + 3, 1, 10, -2, 13, 1, 11, 0, + 4, 1, 13, -1, 11, 1, 3, -1, 5, 0, + 4, -1, 13, 1, 11, 1, 2, -1, 3, 0, + 3, 1, 12, 1, 13, -1, 11, 1, + 4, 2, 10, 1, 12, -1, 13, -1, 11, 1, + 2, 1, 10, -1, 11, 0, + 4, -1, 13, 1, 11, 1, 3, -1, 5, 0, + 3, 1, 12, -1, 13, 1, 11, 1, + 3, 2, 10, -3, 13, 1, 11, 0, + 3, 2, 12, 1, 13, -1, 11, 0, + 3, -2, 10, 1, 13, 1, 14, 0, + 6, -2, 10, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 3, 2, 10, -1, 13, -1, 11, 0, + 6, 2, 10, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 4, -1, 13, 1, 11, 2, 3, -2, 5, 0, + 4, -1, 13, 1, 11, 3, 2, -3, 3, 0, + 3, 1, 10, -1, 12, -1, 11, 0, + 3, 2, 12, -1, 13, 1, 11, 0, + 3, 2, 10, 1, 13, -3, 11, 0, + 5, -2, 10, 1, 13, 1, 11, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 12, -3, 13, 1, 11, 0, + 3, 3, 10, -2, 13, -1, 11, 0, + 5, -2, 10, 1, 13, 1, 11, 1, 3, -1, 5, 0, + 4, 2, 10, -1, 12, -1, 13, -1, 11, 1, + 2, 3, 10, -3, 11, 0, + 5, -2, 10, 1, 13, 1, 11, 2, 2, -2, 3, 0, + 4, 2, 10, -1, 12, 1, 13, -3, 11, 0, + 3, 4, 10, -3, 13, -1, 11, 0, + 4, 2, 10, -2, 12, -1, 13, -1, 11, 1, + 3, 4, 10, -1, 13, -3, 11, 0, + 4, 2, 10, -3, 12, -1, 13, -1, 11, 0, + 3, 4, 10, -1, 12, -3, 11, 0, + 3, 2, 10, -3, 12, -1, 11, 0, + 4, 4, 10, -1, 12, -2, 13, -1, 11, 0, + 2, 4, 10, -3, 11, 0, + 3, 2, 10, -2, 12, -1, 11, 1, + 4, 3, 10, -1, 12, -1, 13, -1, 11, 0, + 4, -2, 10, 1, 11, 2, 3, -2, 5, 0, + 3, 4, 10, -2, 13, -1, 11, 0, + 4, -2, 10, 1, 11, 2, 2, -2, 3, 0, + 3, 2, 10, -1, 12, -1, 11, 2, + 3, -2, 10, 1, 12, 1, 14, 0, + 4, -2, 10, 1, 11, 2, 3, -2, 4, 0, + 4, -2, 10, 1, 11, 1, 3, -1, 5, 0, + 3, 3, 10, -1, 13, -1, 11, 0, + 4, -2, 10, 1, 11, 3, 2, -4, 3, 0, + 4, -2, 10, 1, 11, 1, 3, -2, 5, 0, + 4, 2, 10, -1, 12, -2, 13, 1, 11, 0, + 4, -2, 10, 1, 11, 1, 2, -1, 3, 0, + 2, -1, 10, 1, 2, 0, + 3, 2, 10, 2, 13, -3, 11, 0, + 4, -2, 10, 1, 11, 2, 2, -3, 3, 0, + 3, 2, 12, -2, 13, 1, 11, 0, + 4, 1, 10, -1, 12, 1, 13, -1, 11, 0, + 3, -2, 10, 1, 11, 1, 5, 0, + 4, 2, 10, -1, 11, 1, 3, -2, 4, 0, + 3, 2, 10, -2, 11, 1, 14, 0, + 4, -2, 10, 1, 11, 8, 2,-13, 3, 0, + 5, -2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, + 5, 2, 10, -1, 11, 4, 3, -8, 4, 3, 5, 1, + 2, 2, 10, -1, 11, 1, + 5, -2, 10, 1, 11, 4, 3, -8, 4, 3, 5, 1, + 5, 2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, + 4, 2, 10, -1, 11, 8, 2,-13, 3, 0, + 2, -2, 10, 1, 14, 1, + 4, -2, 10, 1, 11, 1, 3, -2, 4, 0, + 3, 2, 10, -1, 11, 1, 5, 0, + 2, 2, 12, -1, 11, 0, + 4, 3, 10, 1, 12, -1, 13, -1, 11, 0, + 4, 2, 10, -1, 11, 2, 2, -3, 3, 0, + 3, 2, 10, -2, 13, 1, 11, 0, + 4, 2, 10, -1, 11, 1, 2, -1, 3, 0, + 3, 1, 10, 1, 2, -2, 3, 0, + 3, 1, 12, -2, 13, 1, 11, 1, + 3, 1, 10, 1, 13, -1, 11, 0, + 4, 2, 10, -1, 11, 1, 3, -1, 5, 0, + 3, 2, 10, 1, 12, -1, 11, 2, + 3, -2, 10, -1, 12, 1, 14, 0, + 2, 1, 12, -1, 11, 1, + 3, 1, 10, -1, 13, 1, 11, 0, + 4, 2, 10, -1, 11, 2, 2, -2, 3, 0, + 3, 1, 10, 2, 2, -3, 3, 0, + 4, 2, 10, 1, 12, -2, 13, 1, 11, 0, + 3, -1, 10, 1, 2, -2, 3, 0, + 3, -1, 11, 1, 2, -1, 3, 0, + 2, 2, 13, -1, 11, 0, + 2, -2, 13, 1, 14, 0, + 4, 2, 10, -1, 11, 2, 3, -2, 5, 0, + 4, 2, 10, -1, 11, 3, 2, -3, 3, 0, + 4, 2, 10, 2, 12, -2, 13, -1, 11, 0, + 3, 1, 10, 1, 3, -2, 5, 0, + 4, 1, 10, 1, 12, 1, 13, -1, 11, 0, + 3, 1, 10, 3, 2, -4, 3, 0, + 3, 1, 10, 1, 3, -1, 5, 0, + 3, 1, 10, 1, 3, -2, 6, 0, + 3, 1, 10, 2, 3, -2, 4, 0, + 4, 1, 10, 1, 12, -1, 13, -1, 11, 0, + 3, 2, 10, 2, 12, -1, 11, 2, + 4, 1, 10, 1, 3, 2, 5, -5, 6, 1, + 1, 1, 14, 2, + 3, 1, 10, 8, 2,-12, 3, 1, + 5, -2, 10, 1, 13, -1, 11, 20, 2,-21, 3, 0, + 5, 2, 10, -2, 13, 1, 11, 2, 3, -3, 5, 0, + 3, 1, 10, 1, 3, 1, 6, 0, + 4, -1, 13, -1, 11, 26, 2,-29, 3, 0, + 3, -1, 11, 8, 2,-13, 3, 0, + 4, -1, 13, -1, 11, 18, 2,-16, 3, 2, + 4, -1, 13, 1, 11, 10, 2, -3, 3, 1, + 1, 1, 11, 3, + 4, -1, 13, -1, 11, 10, 2, -3, 3, 1, + 4, -1, 13, 1, 11, 18, 2,-16, 3, 2, + 3, 1, 11, 8, 2,-13, 3, 0, + 2, 1, 10, 2, 4, 0, + 4, 2, 10, -1, 11, 5, 2, -6, 3, 1, + 5, 2, 10, -2, 13, -1, 11, 2, 3, -3, 5, 0, + 5, -2, 10, 1, 13, 1, 11, 20, 2,-21, 3, 0, + 3, 1, 10, 1, 3, 1, 5, 0, + 2, -2, 11, 1, 14, 0, + 5, 2, 10, -2, 13, 1, 11, 2, 3, -2, 5, 0, + 3, 1, 10, 5, 2, -7, 3, 0, + 4, 1, 10, 1, 12, -1, 13, 1, 11, 0, + 3, 1, 10, 2, 2, -2, 3, 0, + 4, 2, 10, 2, 12, -2, 13, 1, 11, 0, + 2, 2, 13, -3, 11, 0, + 4, 2, 10, -1, 11, 4, 2, -4, 3, 0, + 3, 1, 10, 4, 2, -5, 3, 0, + 3, 1, 10, -3, 13, 1, 11, 0, + 2, 1, 10, 1, 2, 0, + 3, 1, 11, 1, 2, -1, 3, 0, + 4, 2, 10, -1, 11, 3, 3, -3, 5, 0, + 3, 1, 12, 2, 13, -1, 11, 1, + 4, 2, 10, 1, 12, -2, 13, -1, 11, 0, + 3, 1, 10, -1, 13, -1, 11, 0, + 3, 1, 11, 1, 3, -1, 5, 0, + 2, 1, 12, 1, 11, 2, + 4, 2, 10, -1, 11, 5, 2, -5, 3, 0, + 3, 1, 10, 5, 2, -6, 3, 0, + 3, 2, 10, 1, 12, -3, 11, 0, + 3, 1, 10, 2, 2, -1, 3, 0, + 3, 2, 10, -4, 13, 1, 11, 0, + 3, -2, 10, 2, 13, 1, 14, 0, + 3, 2, 10, -2, 13, -1, 11, 0, + 3, 1, 10, 3, 2, -2, 3, 0, + 4, 1, 10, -1, 12, -1, 13, -1, 11, 0, + 2, 2, 12, 1, 11, 0, + 2, 2, 10, -3, 11, 0, + 3, 1, 10, 4, 2, -3, 3, 0, + 4, 2, 10, -1, 12, -2, 13, -1, 11, 1, + 3, 2, 10, -1, 12, -3, 11, 0, + 3, 4, 10, -4, 13, -1, 11, 0, + 4, 2, 10, -2, 12, -2, 13, -1, 11, 0, + 4, 4, 10, -2, 12, -1, 13, -1, 11, 0, + 3, 6, 10, -3, 13, -1, 11, 0, + 4, 4, 10, -1, 12, -1, 13, -1, 11, 1, + 4, 2, 10, -3, 12, -1, 13, 1, 11, 0, + 3, 5, 10, -2, 13, -1, 11, 0, + 3, 4, 10, 1, 13, -3, 11, 0, + 4, 2, 10, -2, 12, 1, 13, -1, 11, 0, + 3, 3, 10, -1, 12, -1, 11, 0, + 3, 4, 10, -1, 13, -1, 11, 0, + 4, 2, 10, -2, 12, -1, 13, 1, 11, 1, + 3, 4, 10, -3, 13, 1, 11, 0, + 4, 2, 10, -1, 12, 1, 13, -1, 11, 1, + 5, -2, 10, 1, 13, -1, 11, 2, 2, -2, 3, 0, + 2, 3, 10, -1, 11, 0, + 4, 4, 10, 1, 12, -1, 13, -1, 11, 0, + 4, 2, 10, -1, 12, -1, 13, 1, 11, 2, + 5, -2, 10, 1, 13, -1, 11, 1, 3, -1, 5, 0, + 3, 3, 10, -2, 13, 1, 11, 0, + 5, -2, 10, 1, 13, -1, 11, 1, 2, -1, 3, 0, + 3, 2, 10, 1, 13, -1, 11, 0, + 3, -2, 10, -1, 13, 1, 14, 0, + 3, 2, 12, -1, 13, -1, 11, 1, + 3, 3, 10, 1, 12, -1, 11, 0, + 3, 1, 10, -1, 12, 1, 11, 0, + 4, -1, 13, -1, 11, 3, 2, -3, 3, 0, + 4, -1, 13, -1, 11, 2, 3, -2, 5, 0, + 3, 2, 10, -1, 13, 1, 14, 0, + 4, -2, 10, -1, 11, 18, 2,-16, 3, 0, + 6, 2, 10, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 3, 2, 10, -1, 13, 1, 11, 0, + 6, -2, 10, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 5, 2, 10, -2, 13, 1, 11, 18, 2,-16, 3, 0, + 4, -2, 10, 1, 13, -2, 11, 1, 14, 0, + 3, 1, 12, -3, 13, 1, 11, 0, + 3, 1, 10, 2, 13, -1, 11, 0, + 4, 2, 10, 1, 12, 1, 13, -1, 11, 1, + 3, 1, 12, -1, 13, -1, 11, 1, + 4, -1, 13, -1, 11, 1, 3, -1, 5, 0, + 2, 1, 10, 1, 11, 0, + 4, 2, 10, 1, 12, -1, 13, 1, 11, 1, + 3, 1, 12, 1, 13, -3, 11, 0, + 4, -1, 13, -1, 11, 1, 2, -1, 3, 0, + 5, 2, 10, -1, 13, 1, 11, 2, 2, -2, 3, 0, + 2, 3, 13, -1, 11, 0, + 4, 1, 10, 1, 12, -2, 13, -1, 11, 0, + 4, 2, 10, 2, 12, 1, 13, -1, 11, 0, + 2, 1, 13, 1, 14, 1, + 5, 2, 10, -1, 13, 1, 11, 2, 3, -3, 5, 0, + 4, -2, 13, -1, 11, 18, 2,-16, 3, 1, + 5, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, + 2, 1, 13, 1, 11, 0, + 5, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, + 3, 1, 11, 18, 2,-16, 3, 1, + 3, -1, 13, -2, 11, 1, 14, 0, + 5, 2, 10, -1, 13, 1, 11, 2, 3, -2, 5, 0, + 5, 2, 10, -1, 13, 1, 11, 3, 2, -3, 3, 0, + 3, 1, 10, 1, 12, 1, 11, 1, + 4, 2, 10, 2, 12, -1, 13, 1, 11, 1, + 2, 1, 13, -3, 11, 0, + 4, 1, 13, 1, 11, 1, 2, -1, 3, 0, + 3, 1, 12, 3, 13, -1, 11, 0, + 4, 2, 10, 1, 12, -3, 13, -1, 11, 0, + 3, 1, 10, -2, 13, -1, 11, 0, + 4, 1, 13, 1, 11, 1, 3, -1, 5, 0, + 3, 1, 12, 1, 13, 1, 11, 1, + 2, 1, 10, -3, 11, 0, + 3, 1, 12, -1, 13, 3, 11, 0, + 3, 2, 10, -3, 13, -1, 11, 0, + 3, 2, 12, 1, 13, 1, 11, 0, + 3, 2, 10, -1, 13, -3, 11, 0, + 4, 2, 10, -1, 12, -3, 13, -1, 11, 0, + 4, 2, 10, -1, 12, -1, 13, -3, 11, 0, + 4, 6, 10, -1, 12, -2, 13, -1, 11, 0, + 3, 4, 10, -2, 12, -1, 11, 0, + 3, 6, 10, -2, 13, -1, 11, 0, + 4, 4, 10, -2, 12, -2, 13, 1, 11, 0, + 3, 4, 10, -1, 12, -1, 11, 1, + 3, 2, 10, -3, 12, 1, 11, 0, + 3, 5, 10, -1, 13, -1, 11, 0, + 4, 4, 10, -1, 12, -2, 13, 1, 11, 0, + 4, 2, 10, -2, 12, 2, 13, -1, 11, 0, + 2, 4, 10, -1, 11, 0, + 3, 2, 10, -2, 12, 1, 11, 1, + 4, 3, 10, -1, 12, -1, 13, 1, 11, 0, + 3, 4, 10, -2, 13, 1, 11, 0, + 4, 2, 10, -1, 12, 2, 13, -1, 11, 0, + 4, -2, 10, -1, 11, 2, 2, -2, 3, 0, + 3, 3, 10, 1, 13, -1, 11, 0, + 3, 4, 10, 1, 12, -1, 11, 0, + 3, 2, 10, -1, 12, 1, 11, 2, + 4, -2, 10, -1, 11, 1, 3, -1, 5, 0, + 3, 3, 10, -1, 13, 1, 11, 0, + 4, 4, 10, 1, 12, -2, 13, 1, 11, 0, + 3, 2, 10, 2, 13, -1, 11, 0, + 3, 2, 12, -2, 13, -1, 11, 0, + 4, 1, 10, -1, 12, 1, 13, 1, 11, 0, + 2, 2, 10, 1, 14, 0, + 5, -2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, + 2, 2, 10, 1, 11, 1, + 5, 2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, + 3, -2, 10, -2, 11, 1, 14, 0, + 4, 3, 10, 1, 12, -1, 13, 1, 11, 0, + 3, 2, 10, -2, 13, 3, 11, 0, + 4, 2, 10, 1, 12, 2, 13, -1, 11, 0, + 3, 1, 12, -2, 13, -1, 11, 1, + 3, 1, 10, 1, 13, 1, 11, 0, + 3, 2, 10, 1, 12, 1, 11, 1, + 2, 4, 13, -1, 11, 0, + 2, 2, 13, 1, 14, 0, + 4, -3, 13, -1, 11, 18, 2,-16, 3, 0, + 2, 2, 13, 1, 11, 0, + 4, 1, 13, 1, 11, 18, 2,-16, 3, 0, + 4, 2, 10, 1, 11, 2, 3, -2, 5, 0, + 4, 1, 10, 1, 12, 1, 13, 1, 11, 0, + 3, 2, 10, 2, 12, 1, 11, 0, + 2, 2, 11, 1, 14, 0, + 1, 3, 11, 0, + 3, 1, 10, -3, 13, -1, 11, 0, + 3, 1, 12, 2, 13, 1, 11, 1, + 2, 1, 12, 3, 11, 0, + 3, 2, 10, -4, 13, -1, 11, 0, + 3, 2, 12, 2, 13, 1, 11, 0, + 3, 2, 10, -2, 13, -3, 11, 0, + 4, 6, 10, -1, 12, -1, 13, -1, 11, 0, + 3, 6, 10, -1, 13, -1, 11, 0, + 4, 4, 10, -2, 12, -1, 13, 1, 11, 0, + 3, 6, 10, -3, 13, 1, 11, 0, + 4, 4, 10, -1, 12, 1, 13, -1, 11, 0, + 4, 4, 10, -1, 12, -1, 13, 1, 11, 1, + 3, 5, 10, -2, 13, 1, 11, 0, + 3, 4, 10, 1, 13, -1, 11, 0, + 4, 2, 10, -2, 12, 1, 13, 1, 11, 0, + 3, 4, 10, -1, 13, 1, 11, 0, + 4, 2, 10, -1, 12, 3, 13, -1, 11, 0, + 4, 4, 10, 1, 12, 1, 13, -1, 11, 0, + 4, 2, 10, -1, 12, 1, 13, 1, 11, 1, + 2, 3, 10, 1, 11, 0, + 4, 4, 10, 1, 12, -1, 13, 1, 11, 0, + 4, 2, 10, -1, 12, -1, 13, 3, 11, 0, + 3, 2, 10, 3, 13, -1, 11, 0, + 3, 2, 10, 1, 13, 1, 14, 0, + 3, 2, 10, 1, 13, 1, 11, 0, + 3, 3, 10, 1, 12, 1, 11, 0, + 3, 2, 10, -1, 13, 3, 11, 0, + 4, 2, 10, 1, 12, 3, 13, -1, 11, 0, + 3, 1, 12, -3, 13, -1, 11, 0, + 3, 1, 10, 2, 13, 1, 11, 0, + 4, 2, 10, 1, 12, 1, 13, 1, 11, 1, + 3, 1, 12, -1, 13, -3, 11, 0, + 2, 1, 10, 3, 11, 0, + 2, 5, 13, -1, 11, 0, + 2, 3, 13, 1, 11, 0, + 4, 1, 10, 1, 12, 2, 13, 1, 11, 0, + 2, 1, 13, 3, 11, 0, + 3, 1, 12, 3, 13, 1, 11, 0, + 3, 1, 12, 1, 13, 3, 11, 0, + 3, 2, 10, -5, 13, -1, 11, 0, + 3, 6, 10, -1, 12, -1, 11, 0, + 4, 6, 10, -1, 12, -2, 13, 1, 11, 0, + 2, 6, 10, -1, 11, 0, + 3, 4, 10, -2, 12, 1, 11, 0, + 3, 6, 10, -2, 13, 1, 11, 0, + 4, 4, 10, -1, 12, 2, 13, -1, 11, 0, + 3, 4, 10, -1, 12, 1, 11, 0, + 3, 4, 10, 2, 13, -1, 11, 0, + 4, 2, 10, -2, 12, 2, 13, 1, 11, 0, + 2, 4, 10, 1, 11, 0, + 3, 4, 10, -2, 13, 3, 11, 0, + 4, 2, 10, -1, 12, 2, 13, 1, 11, 0, + 3, 3, 10, 1, 13, 1, 11, 0, + 3, 4, 10, 1, 12, 1, 11, 0, + 3, 2, 10, -1, 12, 3, 11, 0, + 3, 2, 10, 4, 13, -1, 11, 0, + 3, 2, 10, 2, 13, 1, 11, 0, + 2, 2, 10, 3, 11, 0, + 3, 1, 12, -4, 13, -1, 11, 0, + 3, 1, 10, 3, 13, 1, 11, 0, + 4, 2, 10, 1, 12, 2, 13, 1, 11, 0, + 2, 4, 13, 1, 11, 0, + 2, 2, 13, 3, 11, 0, + 1, 5, 11, 0, + 3, 1, 12, 4, 13, 1, 11, 0, + 4, 6, 10, -1, 12, -1, 13, 1, 11, 0, + 3, 6, 10, 1, 13, -1, 11, 0, + 3, 6, 10, -1, 13, 1, 11, 0, + 4, 4, 10, -1, 12, 1, 13, 1, 11, 0, + 3, 4, 10, 1, 13, 1, 11, 0, + 3, 4, 10, -1, 13, 3, 11, 0, + 4, 2, 10, -1, 12, 3, 13, 1, 11, 0, + 4, 4, 10, 1, 12, 1, 13, 1, 11, 0, + 3, 2, 10, 3, 13, 1, 11, 0, + 3, 2, 10, 1, 13, 3, 11, 0, + 2, 5, 13, 1, 11, 0, + 2, 3, 13, 3, 11, 0, + 2, 6, 10, 1, 11, 0, + 3, 4, 10, 2, 13, 1, 11, 0, + 3, 2, 10, 4, 13, 1, 11, 0, + -1 +}; +struct plantbl moonlr = { + { 3, 26, 29, 23, 5, 10, 0, 0, 0, 8, 4, 4, 6, 2, 0, 0, 0, 0,}, + 3, + lrargs, + lrtabl, + lrtabb, + lrtabr, + 2.5735686895300000e-03, + 3.6525000000000000e+06, + 1.0000000000000000e-04, +}; + +struct plantbl moonlat = { + { 0, 26, 29, 8, 3, 5, 0, 0, 0, 6, 5, 3, 5, 1, 0, 0, 0, 0,}, + 3, + bargs, + btabl, + btabb, + btabr, + 0.0000000000000000e+00, + 3.6525000000000000e+06, + 1.0000000000000000e-04, +}; + + +/* Reduce arc seconds modulo 360 degrees + answer in arc seconds */ +static double +mods3600(double x) +{ + double y; +#if !defined(__STDC__) + double floor(); +#endif + + y = x - 1296000. * floor( x/1296000.); + return(y); +} + + +/* Time argument is Julian ephemeris date. */ + +static void +mean_elements (double JED) +{ + double x, T, T2; + + /* Time variables. T is in Julian centuries. */ + T = (JED - MOSHIER_J2000) / 36525.0; + T2 = T*T; + + /* Mean longitudes of planets (Simon et al, 1994) + .047" subtracted from constant term for offset to DE403 origin. */ + + /* Mercury */ + x = mods3600( 538101628.6889819 * T + 908103.213 ); + x += (6.39e-6 * T + - 0.0192789) * T2; + Args[0] = x; + + /* Venus */ + x = mods3600( 210664136.4335482 * T + 655127.236 ); + x += (-6.27e-6 * T + + 0.0059381) * T2; + Args[1] = x; + + /* Earth */ + x = mods3600( 129597742.283429 * T + 361679.198 ); + x += (-5.23e-6 * T + - 2.04411e-2 ) * T2; + Ea_arcsec = x; + Args[2] = x; + + /* Mars */ + x = mods3600( 68905077.493988 * T + 1279558.751 ); + x += (-1.043e-5 * T + + 0.0094264) * T2; + Args[3] = x; + + /* Jupiter */ + x = mods3600( 10925660.377991 * T + 123665.420 ); + x += ((((-3.4e-10 * T + + 5.91e-8) * T + + 4.667e-6) * T + + 5.706e-5) * T + - 3.060378e-1)*T2; + Args[4] = x; + + /* Saturn */ + x = mods3600( 4399609.855372 * T + 180278.752 ); + x += (((( 8.3e-10 * T + - 1.452e-7) * T + - 1.1484e-5) * T + - 1.6618e-4) * T + + 7.561614E-1)*T2; + Args[5] = x; + + /* Uranus */ + x = mods3600( 1542481.193933 * T + 1130597.971 ) + + (0.00002156*T - 0.0175083)*T2; + Args[6] = x; + + /* Neptune */ + x = mods3600( 786550.320744 * T + 1095655.149 ) + + (-0.00000895*T + 0.0021103)*T2; + Args[7] = x; + + /* Copied from cmoon.c, DE404 version. */ + /* Mean elongation of moon = D */ + x = mods3600( 1.6029616009939659e+09 * T + 1.0722612202445078e+06 ); + x += (((((-3.207663637426e-013 * T + + 2.555243317839e-011) * T + + 2.560078201452e-009) * T + - 3.702060118571e-005) * T + + 6.9492746836058421e-03) * T /* D, t^3 */ + - 6.7352202374457519e+00) * T2; /* D, t^2 */ + Args[9] = x; + + /* Mean distance of moon from its ascending node = F */ + x = mods3600( 1.7395272628437717e+09 * T + 3.3577951412884740e+05 ); + x += ((((( 4.474984866301e-013 * T + + 4.189032191814e-011) * T + - 2.790392351314e-009) * T + - 2.165750777942e-006) * T + - 7.5311878482337989e-04) * T /* F, t^3 */ + - 1.3117809789650071e+01) * T2; /* F, t^2 */ + NF_arcsec = x; + Args[10] = x; + +/* Mean anomaly of sun = l' (J. Laskar) */ + x = mods3600(1.2959658102304320e+08 * T + 1.2871027407441526e+06); + x += (((((((( + 1.62e-20 * T + - 1.0390e-17 ) * T + - 3.83508e-15 ) * T + + 4.237343e-13 ) * T + + 8.8555011e-11 ) * T + - 4.77258489e-8 ) * T + - 1.1297037031e-5 ) * T + + 8.7473717367324703e-05) * T + - 5.5281306421783094e-01) * T2; + Args[11] = x; + + /* Mean anomaly of moon = l */ + x = mods3600( 1.7179159228846793e+09 * T + 4.8586817465825332e+05 ); + x += (((((-1.755312760154e-012) * T + + 3.452144225877e-011 * T + - 2.506365935364e-008) * T + - 2.536291235258e-004) * T + + 5.2099641302735818e-02) * T /* l, t^3 */ + + 3.1501359071894147e+01) * T2; /* l, t^2 */ + Args[12] = x; + + /* Mean longitude of moon, re mean ecliptic and equinox of date = L */ + x = mods3600( 1.7325643720442266e+09 * T + 7.8593980921052420e+05); + x += ((((( 7.200592540556e-014 * T + + 2.235210987108e-010) * T + - 1.024222633731e-008) * T + - 6.073960534117e-005) * T + + 6.9017248528380490e-03) * T /* L, t^3 */ + - 5.6550460027471399e+00) * T2; /* L, t^2 */ + LP_equinox = x; + Args[13] = x; + + /* Precession of the equinox */ + x = ((((((((( -8.66e-20*T - 4.759e-17)*T + + 2.424e-15)*T + + 1.3095e-12)*T + + 1.7451e-10)*T + - 1.8055e-8)*T + - 0.0000235316)*T + + 0.000076)*T + + 1.105414)*T + + 5028.791959)*T; + /* Moon's longitude re fixed J2000 equinox. */ + /* + Args[13] -= x; + */ + pA_precession = x; + + /* OM = LP - NF; */ + + /* Free librations. */ + /* LB 2.891725 years, psi amplitude 1.8" */ + Args[14] = mods3600( 4.48175409e7 * T + 8.060457e5 ); + + /* 24.2 years */ + Args[15] = mods3600( 5.36486787e6 * T - 391702.8 ); + +#if 0 + /* 27.34907 days */ + Args[16] = mods3600( 1.7308227257e9 * T - 4.443583e5 ); +#endif + /* LA 74.7 years. */ +Args[17] = mods3600( 1.73573e6 * T ); +} + + +/* Prepare lookup table of sin and cos ( i*Lj ) + * for required multiple angles + */ +static int +sscc (int k, double arg, int n) +{ + double cu, su, cv, sv, s; + int i; + + s = STR * arg; + su = sin (s); + cu = cos (s); + ss[k][0] = su; /* sin(L) */ + cc[k][0] = cu; /* cos(L) */ + sv = 2.0 * su * cu; + cv = cu * cu - su * su; + ss[k][1] = sv; /* sin(2L) */ + cc[k][1] = cv; + for (i = 2; i < n; i++) + { + s = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = s; + ss[k][i] = sv; /* sin( i+1 L ) */ + cc[k][i] = cv; + } + return (0); +} + +/* Generic program to accumulate sum of trigonometric series + in two variables (e.g., longitude, radius) + of the same list of arguments. */ +static int +g2plan (double J, struct plantbl *plan, double pobj[], int flag) +{ + int i, j, k, m, k1, ip, np, nt; + /* On some systems such as Silicon Graphics, char is unsigned + by default. */ + CHAR *p; + long *pl, *pr; + double su, cu, sv, cv; + double t, sl, sr; + + mean_elements (J); + /* For librations, moon's longitude is sidereal. */ + if (flag) + Args[13] -= pA_precession; + + T = (J - MOSHIER_J2000) / plan->timescale; + /* Calculate sin( i*MM ), etc. for needed multiple angles. */ + for (i = 0; i < NARGS; i++) + { + if ((j = plan->max_harmonic[i]) > 0) + { + sscc (i, Args[i], j); + } + } + + /* Point to start of table of arguments. */ + p = plan->arg_tbl; + /* Point to tabulated cosine and sine amplitudes. */ + pl = plan->lon_tbl; + pr = plan->rad_tbl; + sl = 0.0; + sr = 0.0; + + for (;;) + { + /* argument of sine and cosine */ + /* Number of periodic arguments. */ + np = *p++; + if (np < 0) + break; + if (np == 0) + { /* It is a polynomial term. */ + nt = *p++; + /* Longitude polynomial. */ + cu = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + } + /* sl += mods3600 (cu); */ + sl += cu; + /* Radius polynomial. */ + cu = *pr++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pr++; + } + sr += cu; + continue; + } + k1 = 0; + cv = 0.0; + sv = 0.0; + for (ip = 0; ip < np; ip++) + { + /* What harmonic. */ + j = *p++; + /* Which planet. */ + m = *p++ - 1; + if (j) + { + k = abs (j); + k -= 1; + su = ss[m][k]; /* sin(k*angle) */ + if (j < 0) + su = -su; + cu = cc[m][k]; + if (k1 == 0) + { /* set first angle */ + sv = su; + cv = cu; + k1 = 1; + } + else + { /* combine angles */ + t = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = t; + } + } + } + /* Highest power of T. */ + nt = *p++; + /* Longitude. */ + cu = *pl++; + su = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + su = su * T + *pl++; + } + sl += cu * cv + su * sv; + /* Radius. */ + cu = *pr++; + su = *pr++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pr++; + su = su * T + *pr++; + } + sr += cu * cv + su * sv; + } + t = plan->trunclvl; + pobj[0] = t * sl; + pobj[2] = t * sr; + return (0); +} + + + +/* Generic program to accumulate sum of trigonometric series + in one variable. */ + +static double +g1plan (double J, struct plantbl *plan) +{ + int i, j, k, m, k1, ip, np, nt; + /* On some systems such as Silicon Graphics, char is unsigned + by default. */ + CHAR *p; + long *pl; + double su, cu, sv, cv; + double t, sl; + + T = (J - MOSHIER_J2000) / plan->timescale; + mean_elements (J); + /* Calculate sin( i*MM ), etc. for needed multiple angles. */ + for (i = 0; i < NARGS; i++) + { + if ((j = plan->max_harmonic[i]) > 0) + { + sscc (i, Args[i], j); + } + } + + /* Point to start of table of arguments. */ + p = plan->arg_tbl; + /* Point to tabulated cosine and sine amplitudes. */ + pl = plan->lon_tbl; + sl = 0.0; + + for (;;) + { + /* argument of sine and cosine */ + /* Number of periodic arguments. */ + np = *p++; + if (np < 0) + break; + if (np == 0) + { /* It is a polynomial term. */ + nt = *p++; + cu = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + } + /* sl += mods3600 (cu); */ + sl += cu; + continue; + } + k1 = 0; + cv = 0.0; + sv = 0.0; + for (ip = 0; ip < np; ip++) + { + /* What harmonic. */ + j = *p++; + /* Which planet. */ + m = *p++ - 1; + if (j) + { + k = abs (j); + k -= 1; + su = ss[m][k]; /* sin(k*angle) */ + if (j < 0) + su = -su; + cu = cc[m][k]; + if (k1 == 0) + { /* set first angle */ + sv = su; + cv = cu; + k1 = 1; + } + else + { /* combine angles */ + t = su * cv + cu * sv; + cv = cu * cv - su * sv; + sv = t; + } + } + } + /* Highest power of T. */ + nt = *p++; + /* Cosine and sine coefficients. */ + cu = *pl++; + su = *pl++; + for (ip = 0; ip < nt; ip++) + { + cu = cu * T + *pl++; + su = su * T + *pl++; + } + sl += cu * cv + su * sv; + } + return (plan->trunclvl * sl); +} + + +/* geocentric moon, mean ecliptic and equinox of date + * J is Julian Epemeris Date + * output in pobj[]: + * pobj[0]: l in rad + * pobj[1]: b in rad + * pobj[2]: r in au + */ +static int +gecmoon (double J, struct plantbl *lrtab, struct plantbl *lattab, double pobj[]) +{ + double x; + + g2plan (J, lrtab, pobj, 0); + x = pobj[0]; + x += LP_equinox; + if (x < -6.45e5) + x += 1.296e6; + if (x > 6.45e5) + x -= 1.296e6; + pobj[0] = STR * x; + x = g1plan (J, lattab); + pobj[1] = STR * x; + pobj[2] = (STR * pobj[2] + 1.0) * lrtab->distance; + return 0; +} + +/*********** end stephen moshier's moon code ****************/ + +static void moon_fast (double mj, double *lam, double *bet, + double *hp, double *msp, double *mdp); + +/* previous version (elwood): + * + * given the mjd, find the geocentric ecliptic longitude, lam, and latitude, + * bet, and horizontal parallax, hp for the moon. also return the sun's + * mean anomaly, *msp, and the moon's mean anomaly, *mdp. + * N.B. series for long and lat are good to about 10 and 3 arcseconds. however, + * math errors cause up to 100 and 30 arcseconds error, even if use double. + * why?? suspect highly sensitive nature of difference used to get m1..6. + * N.B. still need to correct for nutation. then for topocentric location + * further correct for parallax and refraction. + */ +static void +moon_fast (double mj, double *lam, double *bet, double *hp, double *msp, +double *mdp) +{ + double t, t2; + double ld; + double ms; + double md; + double de; + double f; + double n; + double a, sa, sn, b, sb, c, sc, e, e2, l, g, w1, w2; + double m1, m2, m3, m4, m5, m6; + + t = mj/36525.; + t2 = t*t; + + m1 = mj/27.32158213; + m1 = 360.0*(m1-(long)m1); + m2 = mj/365.2596407; + m2 = 360.0*(m2-(long)m2); + m3 = mj/27.55455094; + m3 = 360.0*(m3-(long)m3); + m4 = mj/29.53058868; + m4 = 360.0*(m4-(long)m4); + m5 = mj/27.21222039; + m5 = 360.0*(m5-(long)m5); + m6 = mj/6798.363307; + m6 = 360.0*(m6-(long)m6); + + ld = 270.434164+m1-(.001133-.0000019*t)*t2; + ms = 358.475833+m2-(.00015+.0000033*t)*t2; + md = 296.104608+m3+(.009192+.0000144*t)*t2; + de = 350.737486+m4-(.001436-.0000019*t)*t2; + f = 11.250889+m5-(.003211+.0000003*t)*t2; + n = 259.183275-m6+(.002078+.000022*t)*t2; + + a = degrad(51.2+20.2*t); + sa = sin(a); + sn = sin(degrad(n)); + b = 346.56+(132.87-.0091731*t)*t; + sb = .003964*sin(degrad(b)); + c = degrad(n+275.05-2.3*t); + sc = sin(c); + ld = ld+.000233*sa+sb+.001964*sn; + ms = ms-.001778*sa; + md = md+.000817*sa+sb+.002541*sn; + f = f+sb-.024691*sn-.004328*sc; + de = de+.002011*sa+sb+.001964*sn; + e = 1-(.002495+7.52e-06*t)*t; + e2 = e*e; + + ld = degrad(ld); + ms = degrad(ms); + n = degrad(n); + de = degrad(de); + f = degrad(f); + md = degrad(md); + + l = 6.28875*sin(md)+1.27402*sin(2*de-md)+.658309*sin(2*de)+ + .213616*sin(2*md)-e*.185596*sin(ms)-.114336*sin(2*f)+ + .058793*sin(2*(de-md))+.057212*e*sin(2*de-ms-md)+ + .05332*sin(2*de+md)+.045874*e*sin(2*de-ms)+.041024*e*sin(md-ms); + l = l-.034718*sin(de)-e*.030465*sin(ms+md)+.015326*sin(2*(de-f))- + .012528*sin(2*f+md)-.01098*sin(2*f-md)+.010674*sin(4*de-md)+ + .010034*sin(3*md)+.008548*sin(4*de-2*md)-e*.00791*sin(ms-md+2*de)- + e*.006783*sin(2*de+ms); + l = l+.005162*sin(md-de)+e*.005*sin(ms+de)+.003862*sin(4*de)+ + e*.004049*sin(md-ms+2*de)+.003996*sin(2*(md+de))+ + .003665*sin(2*de-3*md)+e*.002695*sin(2*md-ms)+ + .002602*sin(md-2*(f+de))+e*.002396*sin(2*(de-md)-ms)- + .002349*sin(md+de); + l = l+e2*.002249*sin(2*(de-ms))-e*.002125*sin(2*md+ms)- + e2*.002079*sin(2*ms)+e2*.002059*sin(2*(de-ms)-md)- + .001773*sin(md+2*(de-f))-.001595*sin(2*(f+de))+ + e*.00122*sin(4*de-ms-md)-.00111*sin(2*(md+f))+.000892*sin(md-3*de); + l = l-e*.000811*sin(ms+md+2*de)+e*.000761*sin(4*de-ms-2*md)+ + e2*.000704*sin(md-2*(ms+de))+e*.000693*sin(ms-2*(md-de))+ + e*.000598*sin(2*(de-f)-ms)+.00055*sin(md+4*de)+.000538*sin(4*md)+ + e*.000521*sin(4*de-ms)+.000486*sin(2*md-de); + l = l+e2*.000717*sin(md-2*ms); + *lam = ld+degrad(l); + range (lam, 2*PI); + + g = 5.12819*sin(f)+.280606*sin(md+f)+.277693*sin(md-f)+ + .173238*sin(2*de-f)+.055413*sin(2*de+f-md)+.046272*sin(2*de-f-md)+ + .032573*sin(2*de+f)+.017198*sin(2*md+f)+.009267*sin(2*de+md-f)+ + .008823*sin(2*md-f)+e*.008247*sin(2*de-ms-f); + g = g+.004323*sin(2*(de-md)-f)+.0042*sin(2*de+f+md)+ + e*.003372*sin(f-ms-2*de)+e*.002472*sin(2*de+f-ms-md)+ + e*.002222*sin(2*de+f-ms)+e*.002072*sin(2*de-f-ms-md)+ + e*.001877*sin(f-ms+md)+.001828*sin(4*de-f-md)-e*.001803*sin(f+ms)- + .00175*sin(3*f); + g = g+e*.00157*sin(md-ms-f)-.001487*sin(f+de)-e*.001481*sin(f+ms+md)+ + e*.001417*sin(f-ms-md)+e*.00135*sin(f-ms)+.00133*sin(f-de)+ + .001106*sin(f+3*md)+.00102*sin(4*de-f)+.000833*sin(f+4*de-md)+ + .000781*sin(md-3*f)+.00067*sin(f+4*de-2*md); + g = g+.000606*sin(2*de-3*f)+.000597*sin(2*(de+md)-f)+ + e*.000492*sin(2*de+md-ms-f)+.00045*sin(2*(md-de)-f)+ + .000439*sin(3*md-f)+.000423*sin(f+2*(de+md))+ + .000422*sin(2*de-f-3*md)-e*.000367*sin(ms+f+2*de-md)- + e*.000353*sin(ms+f+2*de)+.000331*sin(f+4*de); + g = g+e*.000317*sin(2*de+f-ms+md)+e2*.000306*sin(2*(de-ms)-f)- + .000283*sin(md+3*f); + w1 = .0004664*cos(n); + w2 = .0000754*cos(c); + *bet = degrad(g)*(1-w1-w2); + + *hp = .950724+.051818*cos(md)+.009531*cos(2*de-md)+.007843*cos(2*de)+ + .002824*cos(2*md)+.000857*cos(2*de+md)+e*.000533*cos(2*de-ms)+ + e*.000401*cos(2*de-md-ms)+e*.00032*cos(md-ms)-.000271*cos(de)- + e*.000264*cos(ms+md)-.000198*cos(2*f-md); + *hp = *hp+.000173*cos(3*md)+.000167*cos(4*de-md)-e*.000111*cos(ms)+ + .000103*cos(4*de-2*md)-.000084*cos(2*md-2*de)- + e*.000083*cos(2*de+ms)+.000079*cos(2*de+2*md)+.000072*cos(4*de)+ + e*.000064*cos(2*de-ms+md)-e*.000063*cos(2*de+ms-md)+ + e*.000041*cos(ms+de); + *hp = *hp+e*.000035*cos(2*md-ms)-.000033*cos(3*md-2*de)- + .00003*cos(md+de)-.000029*cos(2*(f-de))-e*.000029*cos(2*md+ms)+ + e2*.000026*cos(2*(de-ms))-.000023*cos(2*(f-de)+md)+ + e*.000019*cos(4*de-ms-md); + *hp = degrad(*hp); + + *msp = ms; + *mdp = md; +} + + +#define EarthRadius 6378.16 /* Kilometers */ + +/* moon() - front end rountine to get moon position; stern + * + * given the mjd, find the geocentric ecliptic longitude, lam, and latitude, + * bet, and geocentric distance, rho in a.u. for the moon. also return + * the sun's mean anomaly, *msp, and the moon's mean anomaly, *mdp. + * + * now uses Stephen Moshier's expansion and code. + * + * TODO: - clarify lunar aberration for apparent places + * + * still need to correct for nutation. then for topocentric location + * further correct for parallax and refraction. + * NB: Do NOT correct for aberration - the geocentric moon frame moves + * along with the earth. + */ +void +moon (double mj, double *lam, double *bet, double *rho, double *msp, +double *mdp) +{ + double pobj[3], dt; + double hp; + + if (mj >= MOSHIER_BEGIN && mj <= MOSHIER_END) { + /* retard for light time */ + moon_fast (mj, lam, bet, &hp, msp, mdp); + *rho = EarthRadius/AUKM/sin(hp); + dt = *rho * 5.7755183e-3; /* speed of light in a.u/day */ + gecmoon(mj + MJD0 - dt, &moonlr, &moonlat, pobj); + + *lam = pobj[0]; + range (lam, 2*PI); + *bet = pobj[1]; + *rho = pobj[2]; + *msp = STR * Args[11]; /* don't need range correction here */ + *mdp = STR * Args[12]; + } else { + moon_fast (mj, lam, bet, &hp, msp, mdp); + *rho = EarthRadius/AUKM/sin(hp); + + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moon.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/mooncolong.c b/libastro/mooncolong.c new file mode 100644 index 0000000..14e77b7 --- /dev/null +++ b/libastro/mooncolong.c @@ -0,0 +1,236 @@ +/* code to compute lunar sunrise position and local sun angle. + */ + +#include +#include +#include + +#include "astro.h" + +static void Librations (double RAD, double LAMH, double BH, double OM, + double F, double L, double L1, double *L0, double *B0); +static void Moon (double RAD, double T, double T2, double LAM0, double R, + double M, double *F, double *L1, double *OM, double *LAM, double *B, + double *DR, double *LAMH, double *BH); +static void Sun (double RAD, double T, double T2, double *L, double *M, + double *R, double *LAM0); + +/* given a Julian date and a lunar location, find selenographic colongitude of + * rising sun, lunar latitude of subsolar point, illuminated fraction, and alt + * of sun at the given location. Any pointer may be 0 if not interested. + * From Bruning and Talcott, October 1995 _Astronomy_, page 76. + * N.B. lunar coordinates use +E, but selenograhic colongs are +W. + */ +void +moon_colong ( +double jd, /* jd */ +double lt, /* lat of location on moon, rads +N +E */ +double lg, /* long of location on moon, rads +N +E */ +double *cp, /* selenographic colongitude (-lng of rising sun), rads */ +double *kp, /* illuminated fraction of surface from Earth */ +double *ap, /* sun altitude at location, rads */ +double *sp) /* lunar latitude of subsolar point, rads */ +{ + double RAD = .0174533; + double T; + double T2; + double L, M, R, LAM0; + double F, L1, OM, LAM, B, DR, LAMH, BH; + double L0, B0; + double TEMP; + double C0; + double PSI; + double NUM, DEN; + double I, K; + double THETA, ETA; + double H; + + T = (jd - 2451545)/36525.0; + T2 = T * T; + + Sun(RAD, T, T2, &L, &M, &R, &LAM0); + Moon(RAD, T, T2, LAM0, R, M, &F, &L1, &OM, &LAM, &B, &DR, &LAMH, &BH); + Librations(RAD, LAMH, BH, OM, F, L, L1, &L0, &B0); + if (sp) + *sp = B0; + + TEMP = L0 / 360; + L0 = ((TEMP) - (int)(TEMP)) * 360; + if (L0 < 0) L0 = L0 + 360; + if (L0 <= 90) C0 = 90 - L0; else C0 = 450 - L0; + if (cp) { + *cp = degrad(C0); + range (cp, 2*PI); /* prefer 0..360 +W */ + } + + if (kp) { + TEMP = cos(B * RAD) * cos(LAM - LAM0 * RAD); + PSI = acos(TEMP); + NUM = R * sin(PSI); + DEN = DR - R * TEMP; + I = atan(NUM / DEN); + if (NUM * DEN < 0) I = I + 3.14159; + if (NUM < 0) I = I + 3.14159; + K = (1 + cos(I)) / 2; + *kp = K; + } + + if (ap) { + THETA = lt; + ETA = lg; + C0 = C0 * RAD; + TEMP = sin(B0) * sin(THETA) + cos(B0) * cos(THETA) * sin(C0+ETA); + H = asin(TEMP); + *ap = H; + } +} + +static void +Librations (double RAD, double LAMH, double BH, double OM, double F, +double L, double L1, double *L0, double *B0) +{ + double I, PSI, W, NUM, DEN, A, TEMP; + + /* inclination of lunar equator */ + I = 1.54242 * RAD; + + /* nutation in longitude, in arcseconds */ + PSI = -17.2 * sin(OM) - 1.32 * sin(2 * L) - .23 * sin(2 * L1) + + .21 * sin(2 * OM); + PSI = PSI * RAD / 3600; + + /* optical librations */ + W = (LAMH - PSI) - OM; + NUM = sin(W) * cos(BH) * cos(I) - sin(BH) * sin(I); + DEN = cos(W) * cos(BH); + A = atan(NUM / DEN); + if (NUM * DEN < 0) A = A + 3.14159; + if (NUM < 0) A = A + 3.14159; + *L0 = (A - F) / RAD; + TEMP = -sin(W) * cos(BH) * sin(I) - sin(BH) * cos(I); + *B0 = asin(TEMP); +} + +static void +Moon (double RAD, double T, double T2, double LAM0, double R, double M, +double *F, double *L1, double *OM, double *LAM, double *B, double *DR, +double *LAMH, double *BH) +{ + double T3, M1, D2, SUMR, SUML, DIST; + + T3 = T * T2; + + /* argument of the latitude of the Moon */ + *F = (93.2721 + 483202 * T - .003403 * T2 - T3 / 3526000) * RAD; + + /* mean longitude of the Moon */ + *L1 = (218.316 + 481268. * T) * RAD; + + /* longitude of the ascending node of Moon's mean orbit */ + *OM = (125.045 - 1934.14 * T + .002071 * T2 + T3 / 450000) * RAD; + + /* Moon's mean anomaly */ + M1 = (134.963 + 477199 * T + .008997 * T2 + T3 / 69700) * RAD; + + /* mean elongation of the Moon */ + D2 = (297.85 + 445267 * T - .00163 * T2 + T3 / 545900) * 2 * RAD; + + /* Lunar distance */ + SUMR = -20954 * cos(M1) - 3699 * cos(D2 - M1) - 2956 * cos(D2); + *DR = 385000 + SUMR; + + /* geocentric latitude */ + *B = 5.128 * sin(*F) + .2806 * sin(M1 + *F) + .2777 * sin(M1 - *F) + + .1732 * sin(D2 - *F); + SUML = 6.289 * sin(M1) + 1.274 * sin(D2 - M1) + .6583 * sin(D2) + + .2136 * sin(2 * M1) - .1851 * sin(M) - .1143 * sin(2 * *F); + *LAM = *L1 + SUML * RAD; + DIST = *DR / R; + *LAMH = (LAM0 + 180 + DIST * cos(*B) * sin(LAM0 * RAD - *LAM) / RAD) + * RAD; + *BH = DIST * *B * RAD; +} + +static void +Sun (double RAD, double T, double T2, double *L, double *M, double *R, +double *LAM0) +{ + double T3, C, V, E, THETA, OM; + + T3 = T2 * T; + + /* mean longitude of the Sun */ + *L = 280.466 + 36000.8 * T; + + /* mean anomaly of the Sun */ + *M = 357.529 + 35999 * T - .0001536 * T2 + T3 / 24490000; + *M = *M * RAD; + + /* correction for Sun's elliptical orbit */ + C = (1.915 - .004817 * T - .000014 * T2) * sin(*M) + + (.01999 - .000101 * T) * sin(2 * *M) + .00029 * sin(3 * *M); + + /* true anomaly of the Sun */ + V = *M + C * RAD; + + /* eccentricity of Earth's orbit */ + E = .01671 - .00004204 * T - .0000001236 * T2; + + /* Sun-Earth distance */ + *R = .99972 / (1 + E * cos(V)) * 145980000; + + /* true geometric longitude of the Sun */ + THETA = *L + C; + + /* apparent longitude of the Sun */ + OM = 125.04 - 1934.1 * T; + *LAM0 = THETA - .00569 - .00478 * sin(OM * RAD); +} + +#ifdef TESTCOLONG + +/* insure 0 <= *v < r. + */ +void +range (v, r) +double *v, r; +{ + *v -= r*floor(*v/r); +} + +/* To be sure the program is functioning properly, try the test case + * 2449992.5 (1 Oct 1995): the colongitude should be 3.69 degrees. + */ +int +main (int ac, char *av[]) +{ + double jd, lt, lg; + double c, k, a; + + if (ac != 2) { + fprintf (stderr, "%s: JD\n", av[0]); + abort(); + } + + jd = atof(av[1]); + + printf ("Latitude of lunar feature: "); + fscanf (stdin, "%lf", <); + lt = degrad(lt); + printf ("Longitude: "); + fscanf (stdin, "%lf", &lg); + lg = degrad(lg); + + moon_colong (jd, lt, lg, &c, &k, &a); + + printf ("Selenographic colongitude is %g\n", raddeg(c)); + printf ("The illuminated fraction of the Moon is %g\n", k); + printf ("Altitude of Sun above feature is %g\n", raddeg(a)); + + return (0); +} + +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: mooncolong.c,v $ $Date: 2004/05/05 17:45:49 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/moonnf.c b/libastro/moonnf.c new file mode 100644 index 0000000..075aee7 --- /dev/null +++ b/libastro/moonnf.c @@ -0,0 +1,69 @@ +#include +#include + +#include "astro.h" + +static void m (double t, double k, double *mj); + +#define unw(w,z) ((w)-floor((w)/(z))*(z)) + +/* given a modified Julian date, mj, return the mjd of the new + * and full moons about then, mjn and mjf. + * TODO: exactly which ones does it find? eg: + * 5/28/1988 yields 5/15 and 5/31 + * 5/29 6/14 6/29 + */ +void +moonnf (double mj, double *mjn, double *mjf) +{ + int mo, yr; + double dy; + double mj0; + double k, tn, tf, t; + + mjd_cal (mj, &mo, &dy, &yr); + cal_mjd (1, 0., yr, &mj0); + k = (yr-1900+((mj-mj0)/365))*12.3685; + k = floor(k+0.5); + tn = k/1236.85; + tf = (k+0.5)/1236.85; + t = tn; + m (t, k, mjn); + t = tf; + k += 0.5; + m (t, k, mjf); +} + +static void +m (double t, double k, double *mj) +{ + double t2, a, a1, b, b1, c, ms, mm, f, ddjd; + + t2 = t*t; + a = 29.53*k; + c = degrad(166.56+(132.87-9.173e-3*t)*t); + b = 5.8868e-4*k+(1.178e-4-1.55e-7*t)*t2+3.3e-4*sin(c)+7.5933E-1; + ms = 359.2242+360*unw(k/1.236886e1,1)-(3.33e-5+3.47e-6*t)*t2; + mm = 306.0253+360*unw(k/9.330851e-1,1)+(1.07306e-2+1.236e-5*t)*t2; + f = 21.2964+360*unw(k/9.214926e-1,1)-(1.6528e-3+2.39e-6*t)*t2; + ms = unw(ms,360); + mm = unw(mm,360); + f = unw(f,360); + ms = degrad(ms); + mm = degrad(mm); + f = degrad(f); + ddjd = (1.734e-1-3.93e-4*t)*sin(ms)+2.1e-3*sin(2*ms) + -4.068e-1*sin(mm)+1.61e-2*sin(2*mm)-4e-4*sin(3*mm) + +1.04e-2*sin(2*f)-5.1e-3*sin(ms+mm)-7.4e-3*sin(ms-mm) + +4e-4*sin(2*f+ms)-4e-4*sin(2*f-ms)-6e-4*sin(2*f+mm) + +1e-3*sin(2*f-mm)+5e-4*sin(ms+2*mm); + a1 = (long)a; + b = b+ddjd+(a-a1); + b1 = (long)b; + a = a1+b1; + b = b-b1; + *mj = a + b; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moonnf.c,v $ $Date: 2003/03/20 08:50:15 $ $Revision: 1.1 $ $Name: $"}; diff --git a/libastro/nutation.c b/libastro/nutation.c new file mode 100644 index 0000000..241bf67 --- /dev/null +++ b/libastro/nutation.c @@ -0,0 +1,441 @@ +/* nutation (in IAU (1980) expression) and abberation; stern + * on an HP PA processor, this reproduces the Almanac nutation values + * (given to 0.001") EXACTLY over 750 days (1995 and 1996) + */ +#include +#include + +#include "astro.h" + +#define NUT_SCALE 1e4 +#define NUT_SERIES 106 +#define NUT_MAXMUL 4 +#define SECPERCIRC (3600.*360.) + +/* Delaunay arguments, in arc seconds; they differ slightly from ELP82B */ +static double delaunay[5][4] = { + {485866.733, 1717915922.633, 31.310, 0.064}, /* M', moon mean anom */ + {1287099.804, 129596581.224, -0.577, -0.012}, /* M, sun mean anom */ + {335778.877, 1739527263.137, -13.257, 0.011}, /* F, moon arg lat */ + {1072261.307, 1602961601.328, -6.891, 0.019}, /* D, elong moon sun */ + {450160.280, -6962890.539, 7.455, 0.008}, /* Om, moon l asc node */ +}; + +/* multipliers for Delaunay arguments */ +static short multarg[NUT_SERIES][5] = { + /* bounds: -2..3, -2..2, -2/0/2/4, -4..4, 0..2 */ + {0, 0, 0, 0, 1}, + {0, 0, 0, 0, 2}, + {-2, 0, 2, 0, 1}, + {2, 0, -2, 0, 0}, + {-2, 0, 2, 0, 2}, + {1, -1, 0, -1, 0}, + {0, -2, 2, -2, 1}, + {2, 0, -2, 0, 1}, + {0, 0, 2, -2, 2}, + {0, 1, 0, 0, 0}, + {0, 1, 2, -2, 2}, + {0, -1, 2, -2, 2}, + {0, 0, 2, -2, 1}, + {2, 0, 0, -2, 0}, + {0, 0, 2, -2, 0}, + {0, 2, 0, 0, 0}, + {0, 1, 0, 0, 1}, + {0, 2, 2, -2, 2}, + {0, -1, 0, 0, 1}, + {-2, 0, 0, 2, 1}, + {0, -1, 2, -2, 1}, + {2, 0, 0, -2, 1}, + {0, 1, 2, -2, 1}, + {1, 0, 0, -1, 0}, + {2, 1, 0, -2, 0}, + {0, 0, -2, 2, 1}, + {0, 1, -2, 2, 0}, + {0, 1, 0, 0, 2}, + {-1, 0, 0, 1, 1}, + {0, 1, 2, -2, 0}, + {0, 0, 2, 0, 2}, + {1, 0, 0, 0, 0}, + {0, 0, 2, 0, 1}, + {1, 0, 2, 0, 2}, + {1, 0, 0, -2, 0}, + {-1, 0, 2, 0, 2}, + {0, 0, 0, 2, 0}, + {1, 0, 0, 0, 1}, + {-1, 0, 0, 0, 1}, + {-1, 0, 2, 2, 2}, + {1, 0, 2, 0, 1}, + {0, 0, 2, 2, 2}, + {2, 0, 0, 0, 0}, + {1, 0, 2, -2, 2}, + {2, 0, 2, 0, 2}, + {0, 0, 2, 0, 0}, + {-1, 0, 2, 0, 1}, + {-1, 0, 0, 2, 1}, + {1, 0, 0, -2, 1}, + {-1, 0, 2, 2, 1}, + {1, 1, 0, -2, 0}, + {0, 1, 2, 0, 2}, + {0, -1, 2, 0, 2}, + {1, 0, 2, 2, 2}, + {1, 0, 0, 2, 0}, + {2, 0, 2, -2, 2}, + {0, 0, 0, 2, 1}, + {0, 0, 2, 2, 1}, + {1, 0, 2, -2, 1}, + {0, 0, 0, -2, 1}, + {1, -1, 0, 0, 0}, + {2, 0, 2, 0, 1}, + {0, 1, 0, -2, 0}, + {1, 0, -2, 0, 0}, + {0, 0, 0, 1, 0}, + {1, 1, 0, 0, 0}, + {1, 0, 2, 0, 0}, + {1, -1, 2, 0, 2}, + {-1, -1, 2, 2, 2}, + {-2, 0, 0, 0, 1}, + {3, 0, 2, 0, 2}, + {0, -1, 2, 2, 2}, + {1, 1, 2, 0, 2}, + {-1, 0, 2, -2, 1}, + {2, 0, 0, 0, 1}, + {1, 0, 0, 0, 2}, + {3, 0, 0, 0, 0}, + {0, 0, 2, 1, 2}, + {-1, 0, 0, 0, 2}, + {1, 0, 0, -4, 0}, + {-2, 0, 2, 2, 2}, + {-1, 0, 2, 4, 2}, + {2, 0, 0, -4, 0}, + {1, 1, 2, -2, 2}, + {1, 0, 2, 2, 1}, + {-2, 0, 2, 4, 2}, + {-1, 0, 4, 0, 2}, + {1, -1, 0, -2, 0}, + {2, 0, 2, -2, 1}, + {2, 0, 2, 2, 2}, + {1, 0, 0, 2, 1}, + {0, 0, 4, -2, 2}, + {3, 0, 2, -2, 2}, + {1, 0, 2, -2, 0}, + {0, 1, 2, 0, 1}, + {-1, -1, 0, 2, 1}, + {0, 0, -2, 0, 1}, + {0, 0, 2, -1, 2}, + {0, 1, 0, 2, 0}, + {1, 0, -2, -2, 0}, + {0, -1, 2, 0, 1}, + {1, 1, 0, -2, 1}, + {1, 0, -2, 2, 0}, + {2, 0, 0, 2, 0}, + {0, 0, 2, 4, 2}, + {0, 1, 0, 1, 0} +}; + +/* amplitudes which have secular terms; in 1/NUT_SCALE arc seconds + * {index, constant dPSI, T/10 in dPSI, constant in dEPS, T/10 in dEPS} + */ +static long ampsecul[][5] = { + {0 ,-171996 ,-1742 ,92025 ,89}, + {1 ,2062 ,2 ,-895 ,5}, + {8 ,-13187 ,-16 ,5736 ,-31}, + {9 ,1426 ,-34 ,54 ,-1}, + {10 ,-517 ,12 ,224 ,-6}, + {11 ,217 ,-5 ,-95 ,3}, + {12 ,129 ,1 ,-70 ,0}, + {15 ,17 ,-1 ,0 ,0}, + {17 ,-16 ,1 ,7 ,0}, + {30 ,-2274 ,-2 ,977 ,-5}, + {31 ,712 ,1 ,-7 ,0}, + {32 ,-386 ,-4 ,200 ,0}, + {33 ,-301 ,0 ,129 ,-1}, + {37 ,63 ,1 ,-33 ,0}, + {38 ,-58 ,-1 ,32 ,0}, + /* termination */ { -1, } +}; + +/* amplitudes which only have constant terms; same unit as above + * {dPSI, dEPS} + * indexes which are already in ampsecul[][] are zeroed + */ +static short ampconst[NUT_SERIES][2] = { + {0,0}, + {0,0}, + {46,-24}, + {11,0}, + {-3,1}, + {-3,0}, + {-2,1}, + {1,0}, + {0,0}, + {0,0}, + {0,0}, + {0,0}, + {0,0}, + {48,1}, + {-22,0}, + {0,0}, + {-15,9}, + {0,0}, + {-12,6}, + {-6,3}, + {-5,3}, + {4,-2}, + {4,-2}, + {-4,0}, + {1,0}, + {1,0}, + {-1,0}, + {1,0}, + {1,0}, + {-1,0}, + {0,0}, + {0,0}, + {0,0}, + {0,0}, + {-158,-1}, + {123,-53}, + {63,-2}, + {0,0}, + {0,0}, + {-59,26}, + {-51,27}, + {-38,16}, + {29,-1}, + {29,-12}, + {-31,13}, + {26,-1}, + {21,-10}, + {16,-8}, + {-13,7}, + {-10,5}, + {-7,0}, + {7,-3}, + {-7,3}, + {-8,3}, + {6,0}, + {6,-3}, + {-6,3}, + {-7,3}, + {6,-3}, + {-5,3}, + {5,0}, + {-5,3}, + {-4,0}, + {4,0}, + {-4,0}, + {-3,0}, + {3,0}, + {-3,1}, + {-3,1}, + {-2,1}, + {-3,1}, + {-3,1}, + {2,-1}, + {-2,1}, + {2,-1}, + {-2,1}, + {2,0}, + {2,-1}, + {1,-1}, + {-1,0}, + {1,-1}, + {-2,1}, + {-1,0}, + {1,-1}, + {-1,1}, + {-1,1}, + {1,0}, + {1,0}, + {1,-1}, + {-1,0}, + {-1,0}, + {1,0}, + {1,0}, + {-1,0}, + {1,0}, + {1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {-1,0}, + {1,0}, + {-1,0}, + {1,0} +}; + +/* given the modified JD, mj, find the nutation in obliquity, *deps, and + * the nutation in longitude, *dpsi, each in radians. + */ +void +nutation ( +double mj, +double *deps, /* on input: precision parameter in arc seconds */ +double *dpsi) +{ + static double lastmj = -10000, lastdeps, lastdpsi; + double T, T2, T3, T10; /* jul cent since J2000 */ + double prec; /* series precis in arc sec */ + int i, isecul; /* index in term table */ + static double delcache[5][2*NUT_MAXMUL+1]; + /* cache for multiples of delaunay args + * [M',M,F,D,Om][-min*x, .. , 0, .., max*x] + * make static to have unfilled fields cleared on init + */ + + if (mj == lastmj) { + *deps = lastdeps; + *dpsi = lastdpsi; + return; + } + + prec = 0.0; + +#if 0 /* this is if deps should contain a precision value */ + prec =* deps; + if (prec < 0.0 || prec > 1.0) /* accept only sane value */ + prec = 1.0; +#endif + + /* augment for abundance of small terms */ + prec *= NUT_SCALE/10; + + T = (mj - J2000)/36525.; + T2 = T * T; + T3 = T2 * T; + T10 = T/10.; + + /* calculate delaunay args and place in cache */ + for (i = 0; i < 5; ++i) { + double x; + short j; + + x = delaunay[i][0] + + delaunay[i][1] * T + + delaunay[i][2] * T2 + + delaunay[i][3] * T3; + + /* convert to radians */ + x /= SECPERCIRC; + x -= floor(x); + x *= 2.*PI; + + /* fill cache table */ + for (j = 0; j <= 2*NUT_MAXMUL; ++j) + delcache[i][j] = (j - NUT_MAXMUL) * x; + } + + /* find dpsi and deps */ + lastdpsi = lastdeps = 0.; + for (i = isecul = 0; i < NUT_SERIES ; ++i) { + double arg = 0., ampsin, ampcos; + short j; + + if (ampconst[i][0] || ampconst[i][1]) { + /* take non-secular terms from simple array */ + ampsin = ampconst[i][0]; + ampcos = ampconst[i][1]; + } else { + /* secular terms from different array */ + ampsin = ampsecul[isecul][1] + ampsecul[isecul][2] * T10; + ampcos = ampsecul[isecul][3] + ampsecul[isecul][4] * T10; + ++isecul; + } + + for (j = 0; j < 5; ++j) + arg += delcache[j][NUT_MAXMUL + multarg[i][j]]; + + if (fabs(ampsin) >= prec) + lastdpsi += ampsin * sin(arg); + + if (fabs(ampcos) >= prec) + lastdeps += ampcos * cos(arg); + + } + + /* convert to radians. + */ + lastdpsi = degrad(lastdpsi/3600./NUT_SCALE); + lastdeps = degrad(lastdeps/3600./NUT_SCALE); + + lastmj = mj; + *deps = lastdeps; + *dpsi = lastdpsi; +} + +/* given the modified JD, mj, correct, IN PLACE, the right ascension *ra + * and declination *dec (both in radians) for nutation. + */ +void +nut_eq (double mj, double *ra, double *dec) +{ + static double lastmj = -10000; + static double a[3][3]; /* rotation matrix */ + double xold, yold, zold, x, y, z; + + if (mj != lastmj) { + double epsilon, dpsi, deps; + double se, ce, sp, cp, sede, cede; + + obliquity(mj, &epsilon); + nutation(mj, &deps, &dpsi); + + /* the rotation matrix a applies the nutation correction to + * a vector of equatoreal coordinates Xeq to Xeq' by 3 subsequent + * rotations: R1 - from equatoreal to ecliptic system by + * rotation of angle epsilon about x, R2 - rotate ecliptic + * system by -dpsi about its z, R3 - from ecliptic to equatoreal + * by rotation of angle -(epsilon + deps) + * + * Xeq' = A * Xeq = R3 * R2 * R1 * Xeq + * + * [ 1 0 0 ] + * R1 = [ 0 cos(eps) sin(eps) ] + * [ 0 - sin(eps) cos(eps) ] + * + * [ cos(dpsi) - sin(dpsi) 0 ] + * R2 = [ sin(dpsi) cos(dpsi) 0 ] + * [ 0 0 1 ] + * + * [ 1 0 0 ] + * R3 = [ 0 cos(eps + deps) - sin(eps + deps) ] + * [ 0 sin(eps + deps) cos(eps + deps) ] + * + * for efficiency, here is a explicitely: + */ + + se = sin(epsilon); + ce = cos(epsilon); + sp = sin(dpsi); + cp = cos(dpsi); + sede = sin(epsilon + deps); + cede = cos(epsilon + deps); + + a[0][0] = cp; + a[0][1] = -sp*ce; + a[0][2] = -sp*se; + + a[1][0] = cede*sp; + a[1][1] = cede*cp*ce+sede*se; + a[1][2] = cede*cp*se-sede*ce; + + a[2][0] = sede*sp; + a[2][1] = sede*cp*ce-cede*se; + a[2][2] = sede*cp*se+cede*ce; + + lastmj = mj; + } + + sphcart(*ra, *dec, 1.0, &xold, &yold, &zold); + x = a[0][0] * xold + a[0][1] * yold + a[0][2] * zold; + y = a[1][0] * xold + a[1][1] * yold + a[1][2] * zold; + z = a[2][0] * xold + a[2][1] * yold + a[2][2] * zold; + cartsph(x, y, z, ra, dec, &zold); /* radius should be 1.0 */ + if (*ra < 0.) *ra += 2.*PI; /* make positive for display */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: nutation.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/obliq.c b/libastro/obliq.c new file mode 100644 index 0000000..e1dfce7 --- /dev/null +++ b/libastro/obliq.c @@ -0,0 +1,27 @@ +#include + +#include "astro.h" + +/* given the modified Julian date, mj, find the mean obliquity of the + * ecliptic, *eps, in radians. + * + * IAU expression (see e.g. Astron. Almanac 1984); stern + */ +void +obliquity (double mj, double *eps) +{ + static double lastmj = -16347, lasteps; + + if (mj != lastmj) { + double t = (mj - J2000)/36525.; /* centuries from J2000 */ + lasteps = degrad(23.4392911 + /* 23^ 26' 21".448 */ + t * (-46.8150 + + t * ( -0.00059 + + t * ( 0.001813 )))/3600.0); + lastmj = mj; + } + *eps = lasteps; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: obliq.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/parallactic.c b/libastro/parallactic.c new file mode 100644 index 0000000..327298c --- /dev/null +++ b/libastro/parallactic.c @@ -0,0 +1,54 @@ +/* compure parallactic angle: angle formed by N pole - Object - Zenith + */ + +#include +#include + +#include "astro.h" + +/* compute parallactic angle given latitude, object dec and alt. + * all angles in rads. + * N.B. always return >= 0, caller must determine sign and degenerate cases at + * pole or zenith. + */ +double +parallacticLDA (double lt, double dec, double alt) +{ + double ca = sin(lt); + double cb = sin(dec); + double sb = cos(dec); + double cc = sin(alt); + double sc = cos(alt); + double cpa; + + /* given three sides find an angle */ + if (sb==0 || sc==0) + return (0); + cpa = (ca - cb*cc)/(sb*sc); + if (cpa < -1) cpa = -1; + if (cpa > 1) cpa = 1; + return (acos (cpa)); +} + +/* compute parallactic angle given latitude, object HA and Dec. + * all angles in rads. + * return value is between -PI and PI, sign is like HA, ie +west + */ +double +parallacticLHD (double lt, double ha, double dec) +{ + double A, b, cc, sc, B; + + A = ha; + b = PI/2 - lt; + cc = sin(dec); + sc = cos(dec); + solve_sphere (A, b, cc, sc, NULL, &B); + + if (B > PI) + B -= 2*PI; + return (B); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: parallactic.c,v $ $Date: 2003/06/30 04:23:36 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/parallax.c b/libastro/parallax.c new file mode 100644 index 0000000..3e1738f --- /dev/null +++ b/libastro/parallax.c @@ -0,0 +1,42 @@ +#include +#include + +#include "astro.h" + + +/* given true ha and dec, tha and tdec, the geographical latitude, phi, the + * height above sea-level (as a fraction of the earths radius, 6378.16km), + * ht, and the geocentric distance rho in Earth radii(!), find the apparent + * ha and dec, aha and adec allowing for parallax. + * all angles in radians. ehp is the angle subtended at the body by the + * earth's equator. + */ +void +ta_par (double tha, double tdec, double phi, double ht, double *rho, +double *aha, double *adec) +{ + static double last_phi = 1000.0, last_ht = -1000.0, xobs, zobs; + double x, y, z; /* obj cartesian coord, in Earth radii */ + + /* avoid calcs involving the same phi and ht */ + if (phi != last_phi || ht != last_ht) { + double cphi, sphi, robs, e2 = (2 - 1/298.257)/298.257; + cphi = cos(phi); + sphi = sin(phi); + robs = 1/sqrt(1 - e2 * sphi * sphi); + + /* observer coordinates: x to meridian, y east, z north */ + xobs = (robs + ht) * cphi; + zobs = (robs*(1-e2) + ht) * sphi; + last_phi = phi; + last_ht = ht; + } + + sphcart(-tha, tdec, *rho, &x, &y, &z); + cartsph(x - xobs, y, z - zobs, aha, adec, rho); + *aha *= -1; + range (aha, 2*PI); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: parallax.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/plans.c b/libastro/plans.c new file mode 100644 index 0000000..51fac93 --- /dev/null +++ b/libastro/plans.c @@ -0,0 +1,227 @@ +/* rewritten for Bureau des Longitude theories by Bretagnon and Chapront + * Michael Sternberg + */ +#include +#include + +#include "astro.h" +#include "vsop87.h" +#include "chap95.h" + +static void pluto_ell (double mj, double *ret); +static void chap_trans (double mj, double *ret); +static void planpos (double mj, int obj, double prec, double *ret); + +/* coordinate transformation + * from: + * J2000.0 rectangular equatoreal ret[{0,1,2}] = {x,y,z} + * to: + * mean equinox of date spherical ecliptical ret[{0,1,2}] = {l,b,r} + */ +static void +chap_trans ( +double mj, /* destination epoch */ +double *ret) /* vector to be transformed _IN PLACE_ */ +{ + double ra, dec, r, eps; + double sr, cr, sd, cd, se, ce; + + cartsph(ret[0], ret[1], ret[2], &ra, &dec, &r); + precess(J2000, mj, &ra, &dec); + obliquity(mj, &eps); + sr = sin(ra); cr = cos(ra); + sd = sin(dec); cd = cos(dec); + se = sin(eps); ce = cos(eps); + ret[0] = atan2( sr * ce + sd/cd * se, cr); /* long */ + ret[1] = asin( sd * ce - cd * se * sr); /* lat */ + ret[2] = r; /* radius */ +} + +/* low precision ecliptic coordinates of Pluto from mean orbit. + * Only for sake of completeness outside available perturbation theories. + */ +static void +pluto_ell ( +double mj, /* epoch */ +double *ret) /* ecliptic coordinates {l,b,r} at equinox of date */ +{ + /* mean orbital elements of Pluto. + * The origin of these is somewhat obscure. + */ + double a = 39.543, /* semimajor axis, au */ + e = 0.2490, /* excentricity */ + inc0 = 17.140, /* inclination, deg */ + Om0 = 110.307, /* long asc node, deg */ + omeg0 = 113.768, /* arg of perihel, deg */ + mjp = 2448045.539 - MJD0, /* epoch of perihel */ + mjeq = J2000, /* equinox of elements */ + n = 144.9600/36525.; /* daily motion, deg */ + + double inc, Om, omeg; /* orbital elements at epoch of date */ + double ma, ea, nu; /* mean, excentric and true anomaly */ + double lo, slo, clo; /* longitude in orbit from asc node */ + + reduce_elements(mjeq, mj, degrad(inc0), degrad(omeg0), degrad(Om0), + &inc, &omeg, &Om); + ma = degrad((mj - mjp) * n); + anomaly(ma, e, &nu, &ea); + ret[2] = a * (1.0 - e*cos(ea)); /* r */ + lo = omeg + nu; + slo = sin(lo); + clo = cos(lo); + ret[1] = asin(slo * sin(inc)); /* b */ + ret[0] = atan2(slo * cos(inc), clo) + Om; /* l */ +} + +/*************************************************************/ + +/* geometric heliocentric position of planet, mean ecliptic of date + * (not corrected for light-time) + */ +static void +planpos (double mj, int obj, double prec, double *ret) +{ + if (mj >= CHAP_BEGIN && mj <= CHAP_END) { + if (obj >= JUPITER) { /* prefer Chapront */ + chap95(mj, obj, prec, ret); + chap_trans (mj, ret); + } else { /* VSOP for inner planets */ + vsop87(mj, obj, prec, ret); + } + } else { /* outside Chapront time: */ + if (obj != PLUTO) { /* VSOP for all but Pluto */ + vsop87(mj, obj, prec, ret); + } else { /* Pluto mean elliptic orbit */ + pluto_ell(mj, ret); + } + } +} + +/*************************************************************/ + +/* visual elements of planets + * [planet][0] = angular size at 1 AU + * [planet][1] = magnitude at 1 AU from sun and earth and 0 deg phase angle + * [planet][2] = A + * [planet][3] = B + * [planet][4] = C + * where mag correction = A*(i/100) + B*(i/100)^2 + C*(i/100)^3 + * i = angle between sun and earth from planet, degrees + * from Explanatory Supplement, 1992 + */ +static double vis_elements[8][5] = { + /* Mercury */ { 6.74, -0.36, 3.8, -2.73, 2.00}, + /* Venus */ { 16.92, -4.29, 0.09, 2.39, -.65}, + /* Mars */ { 9.36, -1.52, 1.60, 0., 0.}, + /* Jupiter */ { 196.74, -9.25, 0.50, 0., 0.}, + /* Saturn */ { 165.6, -8.88, 4.40, 0., 0.}, + /* Uranus */ { 65.8, -7.19, 0.28, 0., 0.}, + /* Neptune */ { 62.2, -6.87, 0., 0., 0.}, + /* Pluto */ { 8.2, -1.01, 4.1, 0., 0.} +}; + +/* given a modified Julian date, mj, and a planet, p, find: + * lpd0: heliocentric longitude, + * psi0: heliocentric latitude, + * rp0: distance from the sun to the planet, + * rho0: distance from the Earth to the planet, + * none corrected for light time, ie, they are the true values for the + * given instant. + * lam: geocentric ecliptic longitude, + * bet: geocentric ecliptic latitude, + * each corrected for light time, ie, they are the apparent values as + * seen from the center of the Earth for the given instant. + * dia: angular diameter in arcsec at 1 AU, + * mag: visual magnitude + * + * all angles are in radians, all distances in AU. + * + * corrections for nutation and abberation must be made by the caller. The RA + * and DEC calculated from the fully-corrected ecliptic coordinates are then + * the apparent geocentric coordinates. Further corrections can be made, if + * required, for atmospheric refraction and geocentric parallax. + */ +void +plans (double mj, PLCode p, double *lpd0, double *psi0, double *rp0, +double *rho0, double *lam, double *bet, double *dia, double *mag) +{ + static double lastmj = -10000; + static double lsn, bsn, rsn; /* geocentric coords of sun */ + static double xsn, ysn, zsn; /* cartesian " */ + double lp, bp, rp; /* heliocentric coords of planet */ + double xp, yp, zp, rho; /* rect. coords and geocentric dist. */ + double dt; /* light time */ + double *vp; /* vis_elements[p] */ + double ci, i; /* sun/earth angle: cos, degrees */ + int pass; + + /* get sun cartesian; needed only once at mj */ + if (mj != lastmj) { + sunpos (mj, &lsn, &rsn, &bsn); + sphcart (lsn, bsn, rsn, &xsn, &ysn, &zsn); + lastmj = mj; + } + + /* first find the true position of the planet at mj. + * then repeat a second time for a slightly different time based + * on the position found in the first pass to account for light-travel + * time. + */ + dt = 0.0; + for (pass = 0; pass < 2; pass++) { + double ret[6]; + + /* get spherical coordinates of planet from precision routines, + * retarded for light time in second pass; + * alternative option: vsop allows calculating rates. + */ + planpos(mj - dt, p, 0.0, ret); + + lp = ret[0]; + bp = ret[1]; + rp = ret[2]; + + sphcart (lp, bp, rp, &xp, &yp, &zp); + cartsph (xp + xsn, yp + ysn, zp + zsn, lam, bet, &rho); + + if (pass == 0) { + /* save heliocentric coordinates at first pass since, being + * true, they are NOT to be corrected for light-travel time. + */ + *lpd0 = lp; + range (lpd0, 2.*PI); + *psi0 = bp; + *rp0 = rp; + *rho0 = rho; + } + + /* when we view a planet we see it in the position it occupied + * dt days ago, where rho is the distance between it and earth, + * in AU. use this as the new time for the next pass. + */ + dt = rho * 5.7755183e-3; + } + + vp = vis_elements[p]; + *dia = vp[0]; + + /* solve plane triangle, assume sun/earth dist == 1 */ + ci = (rp*rp + rho*rho - 1)/(2*rp*rho); + + /* expl supp equation for mag */ + if (ci < -1) ci = -1; + if (ci > 1) ci = 1; + i = raddeg(acos(ci))/100.; + *mag = vp[1] + 5*log10(rho*rp) + i*(vp[2] + i*(vp[3] + i*vp[4])); + + /* rings contribution if SATURN */ + if (p == SATURN) { + double et, st, set; + satrings (bp, lp, rp, lsn+PI, rsn, mj+MJD0, &et, &st); + set = sin(fabs(et)); + *mag += (-2.60 + 1.25*set)*set; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plans.c,v $ $Date: 2003/11/15 04:07:36 $ $Revision: 1.5 $ $Name: $"}; diff --git a/libastro/plmoon.c b/libastro/plmoon.c new file mode 100644 index 0000000..9d5eeca --- /dev/null +++ b/libastro/plmoon.c @@ -0,0 +1,284 @@ +/* compute Obj fields for natural satellites. + */ + +#include +#include +#include + +#include "astro.h" + +/* private cache of planet ephemerides and when they were computed + * N.B. don't use ones in builtin[] -- they are the user's responsibility. + */ +static ObjPl plobj[NOBJ]; +static Now plnow[NOBJ]; + +/* public builtin storage + */ +static Obj builtin[NBUILTIN]; + +static char *moondir; + +static void setMoon (Now *np, Obj *moonop, Obj *planop, MoonData *mdp); +static void init1BI (int idx, int pl, int moon, char *name); +static void initPlobj(void); +static void rotate (double a, double *x, double *y); + +/* directory in which to look for auxil moon data files. + * N.B. caller must supply persistent storage. + */ +void +setMoonDir (char *dir) +{ + moondir = dir; +} + +/* return set of builtin objects. + * caller can use this storage but should never try to free anything. + */ +int +getBuiltInObjs (Obj **opp) +{ + if (!builtin[MERCURY].o_name[0]) { + /* first time only */ + + init1BI (MERCURY, MERCURY, X_PLANET, "Mercury"); + + init1BI (VENUS, VENUS, X_PLANET, "Venus"); + + init1BI (MARS, MARS, X_PLANET, "Mars"); + init1BI (PHOBOS, MARS, M_PHOBOS, "Phobos"); + init1BI (DEIMOS, MARS, M_DEIMOS, "Deimos"); + + init1BI (JUPITER, JUPITER, X_PLANET, "Jupiter"); + init1BI (IO, JUPITER, J_IO, "Io"); + init1BI (EUROPA, JUPITER, J_EUROPA, "Europa"); + init1BI (GANYMEDE, JUPITER, J_GANYMEDE, "Ganymede"); + init1BI (CALLISTO, JUPITER, J_CALLISTO, "Callisto"); + + init1BI (SATURN, SATURN, X_PLANET, "Saturn"); + init1BI (MIMAS, SATURN, S_MIMAS, "Mimas"); + init1BI (ENCELADUS, SATURN, S_ENCELADUS, "Enceladus"); + init1BI (TETHYS, SATURN, S_TETHYS, "Tethys"); + init1BI (DIONE, SATURN, S_DIONE, "Dione"); + init1BI (RHEA, SATURN, S_RHEA, "Rhea"); + init1BI (TITAN, SATURN, S_TITAN, "Titan"); + init1BI (HYPERION, SATURN, S_HYPERION, "Hyperion"); + init1BI (IAPETUS, SATURN, S_IAPETUS, "Iapetus"); + + init1BI (URANUS, URANUS, X_PLANET, "Uranus"); + init1BI (ARIEL, URANUS, U_ARIEL, "Ariel"); + init1BI (UMBRIEL, URANUS, U_UMBRIEL, "Umbriel"); + init1BI (TITANIA, URANUS, U_TITANIA, "Titania"); + init1BI (OBERON, URANUS, U_OBERON, "Oberon"); + init1BI (MIRANDA, URANUS, U_MIRANDA, "Miranda"); + + init1BI (NEPTUNE, NEPTUNE, X_PLANET, "Neptune"); + + init1BI (PLUTO, PLUTO, X_PLANET, "Pluto"); + + init1BI (SUN, SUN, X_PLANET, "Sun"); + + init1BI (MOON, MOON, X_PLANET, "Moon"); + } + + *opp = builtin; + return (NBUILTIN); +} + +static void +init1BI (int idx, int pl, int moon, char *name) +{ + strcpy (builtin[idx].o_name, name); + builtin[idx].o_type = PLANET; + builtin[idx].pl_code = pl; + builtin[idx].pl_moon = moon; +} + +/* find the circumstances for natural satellite object op at np. + * TODO: distances and helio coords just copied from parent planet. + */ +int +plmoon_cir (Now *np, Obj *moonop) +{ + Obj *sunop = (Obj*)&plobj[SUN]; + MoonData md[X_MAXNMOONS]; + double sz, t1, t2; + double pra, pdec; + MoonData *mdp; + Obj *planop; + + /* init plobj[] */ + if (!((Obj *)&plobj[0])->o_type) + initPlobj(); + + /* get sun @ np */ + if (memcmp (&plnow[SUN], np, sizeof(Now))) { + obj_cir (np, (Obj*)&plobj[SUN]); + memcpy (&plnow[SUN], np, sizeof(Now)); + } + + /* get parent planet and moon info @ np */ + switch (moonop->pl_code) { + + case MARS: + case PHOBOS: + case DEIMOS: + + planop = (Obj*)&plobj[MARS]; + + if (memcmp (&plnow[MARS], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[MARS], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + marsm_data (mjd, moondir, sunop, planop, &sz, &pra, &pdec, md); + mdp = &md[moonop->pl_moon]; + break; + + case JUPITER: + case IO: + case EUROPA: + case GANYMEDE: + case CALLISTO: + + planop = (Obj*)&plobj[JUPITER]; + + if (memcmp (&plnow[JUPITER], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[JUPITER], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + jupiter_data (mjd,moondir,sunop,planop,&sz,&t1,&t2,&pra,&pdec,md); + mdp = &md[moonop->pl_moon]; + moonop->pl_aux1 = t1; + moonop->pl_aux2 = t2; + break; + + case SATURN: + case MIMAS: + case ENCELADUS: + case TETHYS: + case DIONE: + case RHEA: + case TITAN: + case HYPERION: + case IAPETUS: + + planop = (Obj*)&plobj[SATURN]; + + if (memcmp (&plnow[SATURN], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[SATURN], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + saturn_data (mjd,moondir,sunop,planop,&sz,&t1,&t2,&pra,&pdec,md); + mdp = &md[moonop->pl_moon]; + moonop->pl_aux1 = t1; + moonop->pl_aux2 = t2; + break; + + case URANUS: + case ARIEL: + case UMBRIEL: + case TITANIA: + case OBERON: + case MIRANDA: + + planop = (Obj*)&plobj[URANUS]; + + if (memcmp (&plnow[URANUS], np, sizeof(Now))) { + obj_cir (np, planop); + memcpy (&plnow[URANUS], np, sizeof(Now)); + } + + /* don't worry, this already caches based on same mjd */ + uranus_data (mjd, moondir, sunop, planop, &sz, &pra, &pdec, md); + mdp = &md[moonop->pl_moon]; + break; + + default: + + printf ("Called plmoon_cir with bad code: %d\n",moonop->pl_code); + return (-1); + + } + + /* set moonop */ + setMoon (np, moonop, planop, mdp); + + return (0); +} + +static void +initPlobj() +{ + int i; + + for (i = 0; i < NOBJ; i++) { + ((Obj*)&plobj[i])->o_type = PLANET; + ((Obj*)&plobj[i])->pl_code = i; + } +} + +/* set moonop->s_* fields. + * np is needed to get local parallactic angle. + */ +static void +setMoon (Now *np, Obj *moonop, Obj *planop, MoonData *mdp) +{ + double pa, dra, ddec; + + /* just copy most fields from planet for now */ + moonop->s_gaera = planop->s_gaera; /* TODO */ + moonop->s_gaedec = planop->s_gaedec; /* TODO */ + moonop->s_elong = planop->s_elong; /* TODO */ + moonop->s_size = 0; /* TODO */ + moonop->s_sdist = planop->s_sdist; /* TODO */ + moonop->s_edist = planop->s_edist; /* TODO */ + moonop->s_hlat = planop->s_hlat; /* TODO */ + moonop->s_hlong = planop->s_hlong; /* TODO */ + moonop->s_phase = planop->s_phase; /* TODO */ + + /* new ra/dec directly from mdp */ + moonop->s_ra = mdp->ra; + moonop->s_dec = mdp->dec; + + /* geoemtry info */ + moonop->pl_x = mdp->x; + moonop->pl_y = mdp->y; + moonop->pl_z = mdp->z; + moonop->pl_evis = mdp->evis; + moonop->pl_svis = mdp->svis; + + /* tweak alt/az by change in ra/dec rotated by pa */ + pa = parallacticLDA (lat, planop->s_dec, planop->s_alt); + if (planop->s_az < PI) + pa = -pa; /* rotation radec to altaz */ + dra = (moonop->s_ra - planop->s_ra)*cos(planop->s_dec); + ddec = moonop->s_dec - planop->s_dec; + rotate (pa, &dra, &ddec); + moonop->s_alt = planop->s_alt + ddec; + moonop->s_az = planop->s_az - dra/cos(planop->s_alt); + + /* new mag directly from mdp */ + set_smag (moonop, mdp->mag); + + /* name */ + strcpy (moonop->o_name, mdp->full); +} + +/* rotate ccw by a */ +static void +rotate (double a, double *x, double *y) +{ + double sa = sin(a); + double ca = cos(a); + double xp = (*x)*ca - (*y)*sa; + double yp = (*x)*sa + (*y)*ca; + *x = xp; + *y = yp; +} diff --git a/libastro/plshadow.c b/libastro/plshadow.c new file mode 100644 index 0000000..514adc9 --- /dev/null +++ b/libastro/plshadow.c @@ -0,0 +1,50 @@ +#include + +#include "astro.h" + +#undef sqr +#define sqr(x) ((x)*(x)) + +/* given a planet, the sun, the planet's eq pole position and a + * position of a satellite (as eq x=+e y=+s z=front in planet radii) find x,y + * position of shadow. + * return 0 if ok else -1 if shadow not on planet + */ +int +plshadow (Obj *op, Obj *sop, double polera, double poledec, double x, +double y, double z, float *sxp, float *syp) +{ + /* equatorial to ecliptic sky-plane rotation */ + double sa = cos(op->s_dec) * cos(poledec) * + (cos(op->s_ra)*sin(polera) - sin(op->s_ra)*cos(polera)); + double ca = sqrt (1.0 - sa*sa); + + /* rotate moon from equatorial to ecliptic */ + double ex = x*ca + y*sa; + double ey = -x*sa + y*ca; + + /* find angle subtended by earth-sun from planet */ + double a = asin (sin(op->s_hlong - sop->s_hlong)/op->s_edist); + double b = asin (-sin(op->s_hlat)/op->s_edist); + + /* find displacement in sky plane */ + double x0 = ex - z*tan(a); + double y0 = ey - z*tan(b); + + /* projection onto unit sphere */ + double x1 = x0 + (ex-x0)/sqrt(sqr(ex-x0)+sqr(z)); + double y1 = y0 + (ey-y0)/sqrt(sqr(ey-y0)+sqr(z)); + + /* check behind or off edge */ + if (z < 0 || sqr(x1) + sqr(y1) > 1) + return (-1); + + /* rotate back to equatorial */ + *sxp = x1*ca - y1*sa; + *syp = x1*sa + y1*ca; + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: plshadow.c,v $ $Date: 2004/12/17 20:53:43 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/precess.c b/libastro/precess.c new file mode 100644 index 0000000..33ed4f4 --- /dev/null +++ b/libastro/precess.c @@ -0,0 +1,146 @@ +#include +#include + +#include "astro.h" + +static void precess_hiprec (double mjd1, double mjd2, double *ra, double *dec); + + +#define DCOS(x) cos(degrad(x)) +#define DSIN(x) sin(degrad(x)) +#define DASIN(x) raddeg(asin(x)) +#define DATAN2(y,x) raddeg(atan2((y),(x))) + +/* corrects ra and dec, both in radians, for precession from epoch 1 to epoch 2. + * the epochs are given by their modified JDs, mjd1 and mjd2, respectively. + * N.B. ra and dec are modifed IN PLACE. + */ +void +precess ( +double mjd1, double mjd2, /* initial and final epoch modified JDs */ +double *ra, double *dec) /* ra/dec for mjd1 in, for mjd2 out */ +{ + precess_hiprec (mjd1, mjd2, ra, dec); +} + +/* + * Copyright (c) 1990 by Craig Counterman. All rights reserved. + * + * This software may be redistributed freely, not sold. + * This copyright notice and disclaimer of warranty must remain + * unchanged. + * + * No representation is made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty, to the extent permitted by applicable law. + * + * Rigorous precession. From Astronomical Ephemeris 1989, p. B18 + * + * 96-06-20 Hayo Hase : theta_a corrected + */ +static void +precess_hiprec ( +double mjd1, double mjd2, /* initial and final epoch modified JDs */ +double *ra, double *dec) /* ra/dec for mjd1 in, for mjd2 out */ +{ + static double last_mjd1 = -213.432, last_from; + static double last_mjd2 = -213.432, last_to; + double zeta_A, z_A, theta_A; + double T; + double A, B, C; + double alpha, delta; + double alpha_in, delta_in; + double from_equinox, to_equinox; + double alpha2000, delta2000; + + /* convert mjds to years; + * avoid the remarkably expensive calls to mjd_year() + */ + if (last_mjd1 == mjd1) + from_equinox = last_from; + else { + mjd_year (mjd1, &from_equinox); + last_mjd1 = mjd1; + last_from = from_equinox; + } + if (last_mjd2 == mjd2) + to_equinox = last_to; + else { + mjd_year (mjd2, &to_equinox); + last_mjd2 = mjd2; + last_to = to_equinox; + } + + /* convert coords in rads to degs */ + alpha_in = raddeg(*ra); + delta_in = raddeg(*dec); + + /* precession progresses about 1 arc second in .047 years */ + /* From from_equinox to 2000.0 */ + if (fabs (from_equinox-2000.0) > .02) { + T = (from_equinox - 2000.0)/100.0; + zeta_A = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T; + z_A = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T; + theta_A = 0.5567530* T - 0.0001185* T*T - 0.0000116* T*T*T; + + A = DSIN(alpha_in - z_A) * DCOS(delta_in); + B = DCOS(alpha_in - z_A) * DCOS(theta_A) * DCOS(delta_in) + + DSIN(theta_A) * DSIN(delta_in); + C = -DCOS(alpha_in - z_A) * DSIN(theta_A) * DCOS(delta_in) + + DCOS(theta_A) * DSIN(delta_in); + + alpha2000 = DATAN2(A,B) - zeta_A; + range (&alpha2000, 360.0); + delta2000 = DASIN(C); + } else { + /* should get the same answer, but this could improve accruacy */ + alpha2000 = alpha_in; + delta2000 = delta_in; + }; + + + /* From 2000.0 to to_equinox */ + if (fabs (to_equinox - 2000.0) > .02) { + T = (to_equinox - 2000.0)/100.0; + zeta_A = 0.6406161* T + 0.0000839* T*T + 0.0000050* T*T*T; + z_A = 0.6406161* T + 0.0003041* T*T + 0.0000051* T*T*T; + theta_A = 0.5567530* T - 0.0001185* T*T - 0.0000116* T*T*T; + + A = DSIN(alpha2000 + zeta_A) * DCOS(delta2000); + B = DCOS(alpha2000 + zeta_A) * DCOS(theta_A) * DCOS(delta2000) + - DSIN(theta_A) * DSIN(delta2000); + C = DCOS(alpha2000 + zeta_A) * DSIN(theta_A) * DCOS(delta2000) + + DCOS(theta_A) * DSIN(delta2000); + + alpha = DATAN2(A,B) + z_A; + range(&alpha, 360.0); + delta = DASIN(C); + } else { + /* should get the same answer, but this could improve accruacy */ + alpha = alpha2000; + delta = delta2000; + }; + + *ra = degrad(alpha); + *dec = degrad(delta); +} + +#if 0 +static void +precess_fast ( +double mjd1, double mjd2, /* initial and final epoch modified JDs */ +double *ra, double *dec) /* ra/dec for mjd1 in, for mjd2 out */ +{ +#define N degrad (20.0468/3600.0) +#define M hrrad (3.07234/3600.0) + double nyrs; + + nyrs = (mjd2 - mjd1)/365.2425; + *dec += N * cos(*ra) * nyrs; + *ra += (M + (N * sin(*ra) * tan(*dec))) * nyrs; + range (ra, 2.0*PI); +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: precess.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/preferences.h b/libastro/preferences.h new file mode 100644 index 0000000..11122f0 --- /dev/null +++ b/libastro/preferences.h @@ -0,0 +1,32 @@ +/* global info for the preferences facility. + * N.B. many of these enums are used as indexes -- don't change without + * checking where they are used! + */ +#ifndef _PREFERENCES_H +#define _PREFERENCES_H + +typedef enum { + PREF_EQUATORIAL, PREF_UNITS, PREF_DATE_FORMAT, PREF_ZONE, PREF_DPYPREC, + PREF_MSG_BELL, PREF_PRE_FILL, PREF_TIPS, PREF_CONFIRM, PREF_WEEKSTART, + NPREFS +} Preferences; + +typedef enum {PREF_GEO, PREF_TOPO} PrefEquatorial; +typedef enum {PREF_ENGLISH, PREF_METRIC} PrefUnits; +typedef enum {PREF_MDY, PREF_YMD, PREF_DMY} PrefDateFormat; +typedef enum {PREF_LOCALTZ, PREF_UTCTZ} PrefStampZone; +typedef enum {PREF_LOPREC, PREF_HIPREC} PrefDpyPrec; +typedef enum {PREF_NOMSGBELL, PREF_MSGBELL} PrefMsgBell; +typedef enum {PREF_PREFILL, PREF_NOPREFILL} PrefPreFill; +typedef enum {PREF_TIPSON, PREF_NOTIPS} PrefTips; +typedef enum {PREF_CONFIRMON, PREF_NOCONFIRM} PrefConfirm; +typedef enum {PREF_SAT, PREF_SUN, PREF_MON} PrefWeekStart; + +extern int pref_get (Preferences p); +extern int pref_set (Preferences p, int newp); + +#endif /* _PREFERENCES_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: preferences.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $ + */ diff --git a/libastro/reduce.c b/libastro/reduce.c new file mode 100644 index 0000000..58ede03 --- /dev/null +++ b/libastro/reduce.c @@ -0,0 +1,78 @@ +#include + +#include + +#include "astro.h" + +/* convert those orbital elements that change from epoch mj0 to epoch mj. + */ +void +reduce_elements ( +double mj0, /* initial epoch */ +double mj, /* desired epoch */ +double inc0, /* initial inclination, rads */ +double ap0, /* initial argument of perihelion, as an mj */ +double om0, /* initial long of ascending node, rads */ +double *inc, /* resultant inclination, rads */ +double *ap, /* resultant arg of perihelion, as an mj */ +double *om) /* resultant long of ascending node, rads */ +{ + double t0, t1; + double tt, tt2, t02, tt3; + double eta, th, th0; + double a, b; + double dap; + double cinc, sinc; + double ot, sot, cot, ot1; + double seta, ceta; + + if (fabs(mj - mj0) < 1e-5) { + /* sin(eta) blows for inc < 10 degrees -- anyway, no need */ + *inc = inc0; + *ap = ap0; + *om = om0; + return; + } + + t0 = mj0/365250.0; + t1 = mj/365250.0; + + tt = t1-t0; + tt2 = tt*tt; + t02 = t0*t0; + tt3 = tt*tt2; + eta = (471.07-6.75*t0+.57*t02)*tt+(.57*t0-3.37)*tt2+.05*tt3; + th0 = 32869.0*t0+56*t02-(8694+55*t0)*tt+3*tt2; + eta = degrad(eta/3600.0); + th0 = degrad((th0/3600.0)+173.950833); + th = (50256.41+222.29*t0+.26*t02)*tt+(111.15+.26*t0)*tt2+.1*tt3; + th = th0+degrad(th/3600.0); + cinc = cos(inc0); + sinc = sin(inc0); + ot = om0-th0; + sot = sin(ot); + cot = cos(ot); + seta = sin(eta); + ceta = cos(eta); + a = sinc*sot; + b = ceta*sinc*cot-seta*cinc; + ot1 = atan(a/b); + if (b<0) ot1 += PI; + b = sinc*ceta-cinc*seta*cot; + a = -1*seta*sot; + dap = atan(a/b); + if (b<0) dap += PI; + + *ap = ap0+dap; + range (ap, 2*PI); + *om = ot1+th; + range (om, 2*PI); + + if (inc0<.175) + *inc = asin(a/sin(dap)); + else + *inc = 1.570796327-asin((cinc*ceta)+(sinc*seta*cot)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: reduce.c,v $ $Date: 2003/03/28 10:23:35 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/refract.c b/libastro/refract.c new file mode 100644 index 0000000..7d2c9a7 --- /dev/null +++ b/libastro/refract.c @@ -0,0 +1,91 @@ +#include +#include + +#include "astro.h" + +static void unrefractLT15 (double pr, double tr, double aa, double *ta); +static void unrefractGE15 (double pr, double tr, double aa, double *ta); + +void +unrefract (double pr, double tr, double aa, double *ta) +{ +#define LTLIM 14.5 +#define GELIM 15.5 + + double aadeg = raddeg(aa); + + if (aadeg < LTLIM) + unrefractLT15 (pr, tr, aa, ta); + else if (aadeg >= GELIM) + unrefractGE15 (pr, tr, aa, ta); + else { + /* smooth blend -- important for inverse */ + double taLT, taGE, p; + + unrefractLT15 (pr, tr, aa, &taLT); + unrefractGE15 (pr, tr, aa, &taGE); + p = (aadeg - LTLIM)/(GELIM - LTLIM); + *ta = taLT + (taGE - taLT)*p; + } +} + +static void +unrefractGE15 (double pr, double tr, double aa, double *ta) +{ + double r; + + r = 7.888888e-5*pr/((273+tr)*tan(aa)); + *ta = aa - r; +} + +static void +unrefractLT15 (double pr, double tr, double aa, double *ta) +{ + double aadeg = raddeg(aa); + double r, a, b; + + a = ((2e-5*aadeg+1.96e-2)*aadeg+1.594e-1)*pr; + b = (273+tr)*((8.45e-2*aadeg+5.05e-1)*aadeg+1); + r = degrad(a/b); + + *ta = (aa < 0 && r < 0) ? aa : aa - r; /* 0 below ~5 degs */ +} + +/* correct the true altitude, ta, for refraction to the apparent altitude, aa, + * each in radians, given the local atmospheric pressure, pr, in mbars, and + * the temperature, tr, in degrees C. + */ +void +refract (double pr, double tr, double ta, double *aa) +{ +#define MAXRERR degrad(0.1/3600.) /* desired accuracy, rads */ + + double d, t, t0, a; + + /* first guess of error is to go backwards. + * make use that we know delta-apparent is always < delta-true. + */ + unrefract (pr, tr, ta, &t); + d = 0.8*(ta - t); + t0 = t; + a = ta; + + /* use secant method to discover a value that unrefracts to ta. + * max=7 ave=2.4 loops in hundreds of test cases. + */ + while (1) { + a += d; + unrefract (pr, tr, a, &t); + if (fabs(ta-t) <= MAXRERR) + break; + d *= -(ta - t)/(t0 - t); + t0 = t; + } + + *aa = a; + +#undef MAXRERR +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: refract.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.6 $ $Name: $"}; diff --git a/libastro/rings.c b/libastro/rings.c new file mode 100644 index 0000000..b09b682 --- /dev/null +++ b/libastro/rings.c @@ -0,0 +1,45 @@ +#include +#include +#include + +#include "astro.h" + +/* RINGS OF SATURN by Olson, et al, BASIC Code from Sky & Telescope, May 1995. + * As converted from BASIC to C by pmartz@dsd.es.com (Paul Martz) + * Adapted to xephem by Elwood Charles Downey. + */ +void +satrings ( +double sb, double sl, double sr, /* Saturn hlat, hlong, sun dist */ +double el, double er, /* Earth hlong, sun dist */ +double JD, /* Julian date */ +double *etiltp, double *stiltp) /* tilt from earth and sun, rads south*/ +{ + double t, i, om; + double x, y, z; + double la, be; + double s, b, sp, bp; + + t = (JD-2451545.)/365250.; + i = degrad(28.04922-.13*t+.0004*t*t); + om = degrad(169.53+13.826*t+.04*t*t); + + x = sr*cos(sb)*cos(sl)-er*cos(el); + y = sr*cos(sb)*sin(sl)-er*sin(el); + z = sr*sin(sb); + + la = atan(y/x); + if (x<0) la+=PI; + be = atan(z/sqrt(x*x+y*y)); + + s = sin(i)*cos(be)*sin(la-om)-cos(i)*sin(be); + b = atan(s/sqrt(1.-s*s)); + sp = sin(i)*cos(sb)*sin(sl-om)-cos(i)*sin(sb); + bp = atan(sp/sqrt(1.-sp*sp)); + + *etiltp = b; + *stiltp = bp; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: rings.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/riset.c b/libastro/riset.c new file mode 100644 index 0000000..1629d96 --- /dev/null +++ b/libastro/riset.c @@ -0,0 +1,100 @@ +#include +#include + +#include "astro.h" + +/* given the true geocentric ra and dec of an object, the observer's latitude, + * lt, and a horizon displacement correction, dis, all in radians, find the + * local sidereal times and azimuths of rising and setting, lstr/s + * and azr/s, also all in radians, respectively. + * dis is the vertical displacement from the true position of the horizon. it + * is positive if the apparent position is higher than the true position. + * said another way, it is positive if the shift causes the object to spend + * longer above the horizon. for example, atmospheric refraction is typically + * assumed to produce a vertical shift of 34 arc minutes at the horizon; dis + * would then take on the value +9.89e-3 (radians). On the other hand, if + * your horizon has hills such that your apparent horizon is, say, 1 degree + * above sea level, you would allow for this by setting dis to -1.75e-2 + * (radians). + * + * This version contributed by Konrad Bernloehr, Nov. 1996 + * + * status: 0=normal; 1=never rises; -1=circumpolar. + * In case of non-zero status, all other returned variables are undefined. + */ +void +riset (double ra, double dec, double lt, double dis, double *lstr, +double *lsts, double *azr, double *azs, int *status) +{ +#define EPS (1e-9) /* math rounding fudge - always the way, eh? */ + double h; /* hour angle */ + double cos_h; /* cos h */ + double z; /* zenith angle */ + double zmin, zmax; /* Minimum and maximum zenith angles */ + double xaz, yaz; /* components of az */ + int shemi; /* flag for southern hemisphere reflection */ + + /* reflect lt and dec if in southern hemisphere, then az back later */ + if ((shemi= (lt < 0.)) != 0) { + lt = -lt; + dec = -dec; + } + + /* establish zenith angle, and its extrema */ + z = (PI/2.) + dis; + zmin = fabs (dec - lt); + zmax = PI - fabs(dec + lt); + + /* first consider special cases. + * these also avoid any boundary problems in subsequent computations. + */ + if (zmax <= z + EPS) { + *status = -1; /* never sets */ + return; + } + if (zmin >= z - EPS) { + *status = 1; /* never rises */ + return; + } + + /* compute rising hour angle -- beware found off */ + cos_h = (cos(z)-sin(lt)*sin(dec))/(cos(lt)*cos(dec)); + if (cos_h >= 1.) + h = 0.; + else if (cos_h <= -1.) + h = PI; + else + h = acos (cos_h); + + /* compute setting azimuth -- beware found off */ + xaz = sin(dec)*cos(lt)-cos(dec)*cos(h)*sin(lt); + yaz = -1.*cos(dec)*sin(h); + if (xaz == 0.) { + if (yaz > 0) + *azs = PI/2; + else + *azs = -PI/2; + } else + *azs = atan2 (yaz, xaz); + + /* reflect az back if southern */ + if (shemi) + *azs = PI - *azs; + range(azs, 2.*PI); + + /* rising is just the opposite side */ + *azr = 2.*PI - *azs; + range(azr, 2.*PI); + + /* rise and set are just ha either side of ra */ + *lstr = radhr(ra-h); + range(lstr,24.0); + *lsts = radhr(ra+h); + range(lsts,24.0); + + /* OK */ + *status = 0; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: riset.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/riset_cir.c b/libastro/riset_cir.c new file mode 100644 index 0000000..66f91c1 --- /dev/null +++ b/libastro/riset_cir.c @@ -0,0 +1,426 @@ +/* find rise and set circumstances, ie, riset_cir() and related functions. */ + +#include +#include +#include +#include + +#include "astro.h" + + +static void e_riset_cir (Now *np, Obj *op, double dis, RiseSet *rp); +static int find_0alt (double dt, double fstep, double dis, Now *np, Obj *op); +static int find_transit (double dt, Now *np, Obj *op); +static int find_maxalt (Now *np, Obj *op, double tr, double ts, double *tp, + double *alp, double *azp); + +/* find where and when an object, op, will rise and set and + * it's transit circumstances. all times are utc mjd, angles rads e of n. + * dis is the angle down from an ideal horizon, in rads (see riset()). + * N.B. dis should NOT include refraction, we do that here. + */ +void +riset_cir (Now *np, Obj *op, double dis, RiseSet *rp) +{ + double mjdn; /* mjd of local noon */ + double lstn; /* lst at local noon */ + double lr, ls; /* lst rise/set times */ + double ar, as; /* az of rise/set */ + double ran; /* RA at noon */ + Now n; /* copy to move time around */ + Obj o; /* copy to get circumstances at n */ + int rss; /* temp status */ + + /* work with local copies so we can move the time around */ + (void) memcpy ((void *)&n, (void *)np, sizeof(n)); + (void) memcpy ((void *)&o, (void *)op, sizeof(o)); + + /* fast Earth satellites need a different approach. + * "fast" here is pretty arbitrary -- just too fast to work with the + * iterative approach based on refining the times for a "fixed" object. + */ + if (op->o_type == EARTHSAT && op->es_n > FAST_SAT_RPD) { + e_riset_cir (&n, &o, dis, rp); + return; + } + + /* assume no problems initially */ + rp->rs_flags = 0; + + /* start the iteration at local noon */ + mjdn = mjd_day(mjd - tz/24.0) + tz/24.0 + 0.5; + n.n_mjd = mjdn; + now_lst (&n, &lstn); + + /* first approximation is to find rise/set times of a fixed object + * at the current epoch in its position at local noon. + * N.B. add typical refraction if dis is above horizon for initial + * go/no-go test. if it passes, real code does refraction rigorously. + */ + n.n_mjd = mjdn; + if (obj_cir (&n, &o) < 0) { + rp->rs_flags = RS_ERROR; + return; + } + ran = o.s_gaera; + riset (o.s_gaera, o.s_gaedec, lat, dis+(dis>.01 ? 0 : .01), &lr, &ls, + &ar, &as, &rss); + switch (rss) { + case 0: break; + case 1: rp->rs_flags = RS_NEVERUP; return; + case -1: rp->rs_flags = RS_CIRCUMPOLAR; goto dotransit; + default: rp->rs_flags = RS_ERROR; return; + } + + /* iterate to find better rise time */ + n.n_mjd = mjdn; + switch (find_0alt ((lr - lstn)/SIDRATE, 60/SPD, dis, &n, &o)) { + case 0: /* ok */ + rp->rs_risetm = n.n_mjd; + rp->rs_riseaz = o.s_az; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_RISERR; + break; + case -2: /* converged but not today, err but give times anyway */ + rp->rs_risetm = n.n_mjd; + rp->rs_riseaz = o.s_az; + rp->rs_flags |= RS_NORISE; + break; + case -3: /* probably never up */ + rp->rs_flags |= RS_NEVERUP; + break; + } + + /* iterate to find better set time */ + n.n_mjd = mjdn; + switch (find_0alt ((ls - lstn)/SIDRATE, 60/SPD, dis, &n, &o)) { + case 0: /* ok */ + rp->rs_settm = n.n_mjd; + rp->rs_setaz = o.s_az; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_SETERR; + break; + case -2: /* converged but not today, err but give times anyway */ + rp->rs_settm = n.n_mjd; + rp->rs_setaz = o.s_az; + rp->rs_flags |= RS_NOSET; + break; + case -3: /* probably circumpolar */ + rp->rs_flags |= RS_CIRCUMPOLAR; + break; + } + + /* can try transit even if rise or set failed */ + dotransit: + n.n_mjd = mjdn; + switch (find_transit ((radhr(ran) - lstn)/SIDRATE, &n, &o)) { + case 0: /* ok */ + rp->rs_trantm = n.n_mjd; + rp->rs_tranalt = o.s_alt; + rp->rs_tranaz = o.s_az; + break; + case -1: /* did not converge */ + rp->rs_flags |= RS_TRANSERR; + break; + case -2: /* converged but not today */ + rp->rs_flags |= RS_NOTRANS; + break; + } +} + +/* find local times when sun is dis rads below horizon. + */ +void +twilight_cir (Now *np, double dis, double *dawn, double *dusk, int *status) +{ + RiseSet rs; + Obj o; + + memset (&o, 0, sizeof(o)); + o.o_type = PLANET; + o.pl_code = SUN; + (void) strcpy (o.o_name, "Sun"); + riset_cir (np, &o, dis, &rs); + *dawn = rs.rs_risetm; + *dusk = rs.rs_settm; + *status = rs.rs_flags; +} + +/* find where and when a fast-moving Earth satellite, op, will rise and set and + * it's transit circumstances. all times are mjd, angles rads e of n. + * dis is the angle down from the local topo horizon, in rads (see riset()). + * idea is to walk forward in time looking for alt+dis==0 crossings. + * initial time step is a few degrees (based on average daily motion). + * we stop as soon as we see both a rise and set. + * N.B. we assume *np and *op are working copies we can mess up. + */ +static void +e_riset_cir (Now *np, Obj *op, double dis, RiseSet *rp) +{ +#define DEGSTEP 2 /* time step is about this many degrees */ + int steps; /* max number of time steps */ + double dt; /* time change per step, days */ + double t0, t1; /* current and next mjd values */ + double a0, a1; /* altitude at t0 and t1 */ + int rise, set; /* flags to check when we find these events */ + int i; + + dt = DEGSTEP * (1.0/360.0/op->es_n); + steps = (int)(1.0/dt); + rise = set = 0; + rp->rs_flags = 0; + + if (obj_cir (np, op) < 0) { + rp->rs_flags |= RS_ERROR; + return; + } + + t0 = mjd; + a0 = op->s_alt + dis; + + for (i = 0; i < steps && (!rise || !set); i++) { + mjd = t1 = t0 + dt; + if (obj_cir (np, op) < 0) { + rp->rs_flags |= RS_ERROR; + return; + } + a1 = op->s_alt + dis; + + if (a0 < 0 && a1 > 0 && !rise) { + /* found a rise event -- interate to refine */ + switch (find_0alt (10./3600., 5./SPD, dis, np, op)) { + case 0: /* ok */ + rp->rs_risetm = np->n_mjd; + rp->rs_riseaz = op->s_az; + rise = 1; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_RISERR; + return; + case -2: /* converged but not today */ /* FALLTHRU */ + case -3: /* probably never up */ + rp->rs_flags |= RS_NORISE; + return; + } + } else if (a0 > 0 && a1 < 0 && !set) { + /* found a setting event -- interate to refine */ + switch (find_0alt (10./3600., 5./SPD, dis, np, op)) { + case 0: /* ok */ + rp->rs_settm = np->n_mjd; + rp->rs_setaz = op->s_az; + set = 1; + break; + case -1: /* obj_cir error */ + rp->rs_flags |= RS_SETERR; + return; + case -2: /* converged but not today */ /* FALLTHRU */ + case -3: /* probably circumpolar */ + rp->rs_flags |= RS_NOSET; + return; + } + } + + t0 = t1; + a0 = a1; + } + + /* instead of transit, for satellites we find time of maximum + * altitude, if we know both the rise and set times. + */ + if (rise && set) { + double tt, al, az; + if (find_maxalt (np, op, rp->rs_risetm, rp->rs_settm, &tt, &al, &az) < 0) { + rp->rs_flags |= RS_TRANSERR; + return; + } + rp->rs_trantm = tt; + rp->rs_tranalt = al; + rp->rs_tranaz = az; + } else + rp->rs_flags |= RS_NOTRANS; + + /* check for some bad conditions */ + if (!rise) { + if (a0 > 0) + rp->rs_flags |= RS_CIRCUMPOLAR; + else + rp->rs_flags |= RS_NORISE; + } + if (!set) { + if (a0 < 0) + rp->rs_flags |= RS_NEVERUP; + else + rp->rs_flags |= RS_NOSET; + } +} + +/* given a Now at noon and a dt from np, in hours, for a first approximation + * to a rise or set event, refine the event by searching for when alt+dis = 0. + * return 0: if find one within 12 hours of noon with np and op set to the + * better time and circumstances; + * return -1: if error from obj_cir; + * return -2: if converges but not today; + * return -3: if does not converge at all (probably circumpolar or never up); + */ +static int +find_0alt ( +double dt, /* hours from initial np to first guess at event */ +double fstep, /* first step size, days */ +double dis, /* horizon displacement, rads */ +Now *np, /* working Now -- starts with mjd is noon, returns as answer */ +Obj *op) /* working object -- returns as answer */ +{ +#define TMACC (0.01/SPD) /* convergence accuracy, days; tight for stable az */ +#define MAXPASSES 20 /* max iterations to try */ +#define MAXSTEP (12.0/24.0) /* max time step,days (to detect flat)*/ + + double a0 = 0; + double mjdn = mjd; + int npasses; + + /* insure initial guess is today -- if not, move by 24 hours */ + if (dt < -12.0 && !find_0alt (dt+24, fstep, dis, np, op)) + return (0); + mjd = mjdn; + if (dt > 12.0 && !find_0alt (dt-24, fstep, dis, np, op)) + return (0); + mjd = mjdn; + + /* convert dt to days for remainder of algorithm */ + dt /= 24.0; + + /* use secant method to look for s_alt + dis == 0 */ + npasses = 0; + do { + double a1; + + mjd += dt; + if (obj_cir (np, op) < 0) + return (-1); + a1 = op->s_alt; + + dt = (npasses == 0) ? fstep : (dis+a1)*dt/(a0-a1); + a0 = a1; + + if (++npasses > MAXPASSES || fabs(dt) >= MAXSTEP) + return (-3); + + } while (fabs(dt)>TMACC); + // fprintf (stderr, "%s 0alt npasses = %d\n", op->o_name, npasses); + + /* return codes */ + return (fabs(mjdn-mjd) < .5 ? 0 : -2); + +#undef MAXPASSES +#undef MAXSTEP +#undef TMACC +} + +/* find when the given object transits. start the search when LST matches the + * object's RA at noon. + * if ok, return 0 with np and op set to the transit conditions; if can't + * converge return -1; if converges ok but not today return -2. + * N.B. we assume np is passed set to local noon. + */ +static int +find_transit (double dt, Now *np, Obj *op) +{ +#define MAXLOOPS 10 +#define MAXERR (1./3600.) /* hours */ + double mjdn = mjd; + double lst; + int i; + + /* insure initial guess is today -- if not, move by 24 hours */ + if (dt < -12.0) + dt += 24.0; + if (dt > 12.0) + dt -= 24.0; + + i = 0; + do { + mjd += dt/24.0; + if (obj_cir (np, op) < 0) + return (-1); + now_lst (np, &lst); + dt = (radhr(op->s_gaera) - lst); + if (dt < -12.0) + dt += 24.0; + if (dt > 12.0) + dt -= 24.0; + } while (++i < MAXLOOPS && fabs(dt) > MAXERR); + + /* fprintf (stderr, "%s find_transit loops = %d, dt = %g seconds\n", op->o_name, i, dt*3600); */ + + /* return codes */ + if (i == MAXLOOPS) + return (-1); + return (fabs(mjd - mjdn) < 0.5 ? 0 : -2); + +#undef MAXLOOPS +#undef MAXERR +} + +/* find the mjd time of max altitude between the given rise and set times. + * N.B. we assume *np and *op are working copies we can modify. + * return 0 if ok, else -1. + */ +static int +find_maxalt ( +Now *np, +Obj *op, +double tr, double ts, /* mjd of rise and set */ +double *tp, /* time of max altitude */ +double *alp, double *azp) /* max altitude and transit az at said time */ +{ +#define MAXLOOPS 100 /* max loops */ +#define MAXERR (1.0/SPD) /* days */ + + double l, r; /* times known to bracket max alt */ + double m1, m2; /* intermediate range points inside l and r */ + double a1, a2; /* alt at m1 and m2 */ + int nloops; /* max loop check */ + + /* want rise before set */ + while (ts < tr) + tr -= 1.0/op->es_n; + + /* init time bracket */ + l = tr; + r = ts; + + /* ternary search for max */ + for (nloops = 0; r - l > MAXERR && nloops < MAXLOOPS; nloops++) { + + mjd = m1 = (2*l + r)/3; + obj_cir (np, op); + a1 = op->s_alt; + + mjd = m2 = (l + 2*r)/3; + obj_cir (np, op); + a2 = op->s_alt; + + if (a1 < a2) + l = m1; + else + r = m2; + } + // fprintf (stderr, "tern nloops = %d\n", nloops); + if (nloops >= MAXLOOPS) + return (-1); + + /* best is between l and r */ + mjd = *tp = (l+r)/2; + obj_cir (np, op); + *alp = op->s_alt; + *azp = op->s_az; + + return (0); +#undef MAXERR +#undef MAXLOOPS +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: riset_cir.c,v $ $Date: 2013/01/06 01:12:57 $ $Revision: 1.18 $ $Name: $"}; diff --git a/libastro/satlib.h b/libastro/satlib.h new file mode 100644 index 0000000..31c3467 --- /dev/null +++ b/libastro/satlib.h @@ -0,0 +1,206 @@ +#ifndef __SATLIB_H +#define __SATLIB_H + +/* $Id: satlib.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +typedef struct _SatElem { + float se_XMO; + float se_XNODEO; + float se_OMEGAO; + float se_EO; + float se_XINCL; + float se_XNDD60; + float se_BSTAR; + float pad1; + double se_XNO; + double se_XNDT20; + double se_EPOCH; + struct { + unsigned int catno : 21; + unsigned int classif : 5; + unsigned int elnum : 10; + unsigned int year : 14; + unsigned int launch : 10; + unsigned int piece : 15; + unsigned int ephtype : 4; + unsigned int orbit : 17; + } se_id; +} SatElem; + +#if 0 +struct sat_loc { + double sl_X; + double sl_XDOT; + double sl_Y; + double sl_YDOT; + double sl_Z; + double sl_ZDOT; +}; +#endif + +struct sgp4_data { + unsigned int sgp4_flags; + unsigned int pad; + double sgp4_AODP; + double sgp4_AYCOF; + double sgp4_C1; + double sgp4_C4; + double sgp4_C5; + double sgp4_COSIO; + double sgp4_D2; + double sgp4_D3; + double sgp4_D4; + double sgp4_DELMO; + double sgp4_ETA; + double sgp4_OMGCOF; + double sgp4_OMGDOT; + double sgp4_SINIO; + double sgp4_SINMO; + double sgp4_T2COF; + double sgp4_T3COF; + double sgp4_T4COF; + double sgp4_T5COF; + double sgp4_X1MTH2; + double sgp4_X3THM1; + double sgp4_X7THM1; + double sgp4_XLCOF; + double sgp4_XMCOF; + double sgp4_XMDOT; + double sgp4_XNODCF; + double sgp4_XNODOT; + double sgp4_XNODP; +}; + +struct deep_data { + struct { + unsigned int IRESFL : 1; + unsigned int ISYNFL : 1; + } deep_flags; + double deep_s_SINIQ; + double deep_s_COSIQ; + double deep_s_OMGDT; + double deep_ATIME; + double deep_D2201; + double deep_D2211; + double deep_D3210; + double deep_D3222; + double deep_D4410; + double deep_D4422; + double deep_D5220; + double deep_D5232; + double deep_D5421; + double deep_D5433; + double deep_DEL1; + double deep_DEL2; + double deep_DEL3; + double deep_E3; + double deep_EE2; + double deep_FASX2; + double deep_FASX4; + double deep_FASX6; + double deep_OMEGAQ; + double deep_PE; + double deep_PINC; + double deep_PL; + double deep_SAVTSN; + double deep_SE2; + double deep_SE3; + double deep_SGH2; + double deep_SGH3; + double deep_SGH4; + double deep_SGHL; + double deep_SGHS; + double deep_SH2; + double deep_SH3; + double deep_SHS; + double deep_SHL; + double deep_SI2; + double deep_SI3; + double deep_SL2; + double deep_SL3; + double deep_SL4; + double deep_SSE; + double deep_SSG; + double deep_SSH; + double deep_SSI; + double deep_SSL; + double deep_STEP2; + double deep_STEPN; + double deep_STEPP; + double deep_THGR; + double deep_XFACT; + double deep_XGH2; + double deep_XGH3; + double deep_XGH4; + double deep_XH2; + double deep_XH3; + double deep_XI2; + double deep_XI3; + double deep_XL2; + double deep_XL3; + double deep_XL4; + double deep_XLAMO; + double deep_XLI; + double deep_XNI; + double deep_XNQ; + double deep_XQNCL; + double deep_ZMOL; + double deep_ZMOS; +}; + +struct sdp4_data { + double sdp4_AODP; /* dpa */ + double sdp4_AYCOF; + double sdp4_BETAO; /* dpa */ + double sdp4_BETAO2; /* dpa */ + double sdp4_C1; + double sdp4_C4; + double sdp4_COSG; /* dpa */ + double sdp4_COSIO; /* dpa */ + double sdp4_EOSQ; /* dpa */ + double sdp4_OMGDOT; /* dpa */ + double sdp4_SING; /* dpa */ + double sdp4_SINIO; /* dpa */ + double sdp4_T2COF; + double sdp4_THETA2; /* dpa */ + double sdp4_X1MTH2; + double sdp4_X3THM1; + double sdp4_X7THM1; + double sdp4_XLCOF; + double sdp4_XMDOT; /* dpa */ + double sdp4_XNODCF; + double sdp4_XNODOT; /* dpa */ + double sdp4_XNODP; /* dpa */ + + double sdp4_XMDF_seco; + double sdp4_OMGADF_seco; + double sdp4_XNODE_seco; + double sdp4_EM_seco; + double sdp4_XINC_seco; + double sdp4_XN_seco; + + double sdp4_E_pero; + double sdp4_XINC_pero; + double sdp4_OMGADF_pero; + double sdp4_XNODE_pero; + double sdp4_XMAM_pero; +}; + +typedef struct _SatData { + struct _SatElem *elem; + union { + struct sgp4_data *sgp4; + struct sdp4_data *sdp4; + } prop; + struct deep_data *deep; +} SatData; + +void sgp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double t); + +void sdp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE); + +#endif /* __SATLIB_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: satlib.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libastro/satmoon.c b/libastro/satmoon.c new file mode 100644 index 0000000..6e401c2 --- /dev/null +++ b/libastro/satmoon.c @@ -0,0 +1,510 @@ +/* saturn moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double JD, char *dir, MoonData md[S_NMOONS]); +static void bruton_saturn (Obj *sop, double JD, MoonData md[S_NMOONS]); +static void moonradec (double satsize, MoonData md[S_NMOONS]); +static void moonSVis (Obj *eop, Obj *sop, MoonData md[S_NMOONS]); +static void moonEVis (MoonData md[S_NMOONS]); +static void moonPShad (Obj *eop, Obj *sop, MoonData md[S_NMOONS]); +static void moonTrans (MoonData md[S_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData smd[S_NMOONS] = { + {"Saturn", NULL}, + {"Mimas", "I"}, + {"Enceladus","II"}, + {"Tethys", "III"}, + {"Dione", "IV"}, + {"Rhea", "V"}, + {"Titan", "VI"}, + {"Hyperion","VII"}, + {"Iapetus", "VIII"}, +}; +static double sizemjd; +static double etiltmjd; +static double stiltmjd; + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(40.58) /* RA of Saturn's north pole */ +#define POLE_DEC degrad(83.54) /* Dec of Saturn's north pole */ + + +/* get saturn info in md[0], moon info in md[1..S_NMOONS-1]. + * if !dir always use bruton model. + * if !sop caller just wants md[] for names + * N.B. we assume eop and sop are updated. + */ +void +saturn_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *eop, /* earth == Sun */ +Obj *sop, /* saturn */ +double *sizep, /* saturn's angular diam, rads */ +double *etiltp, double *stiltp, /* earth and sun tilts -- +S */ +double *polera, double *poledec,/* pole location */ +MoonData md[S_NMOONS]) /* return info */ +{ + double JD; + + /* always copy back at least for name */ + memcpy (md, smd, sizeof(smd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !sop) { + if (sop) { + *sizep = sizemjd; + *etiltp = etiltmjd; + *stiltp = stiltmjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = sop->s_ra; + md[0].dec = sop->s_dec; + md[0].mag = get_mag(sop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from sop */ + *sizep = degrad(sop->s_size/3600.0); + + /* Visual Magnitude of the Satellites */ + + md[1].mag = 13; md[2].mag = 11.8; md[3].mag = 10.3; md[4].mag = 10.2; + md[5].mag = 9.8; md[6].mag = 8.4; md[7].mag = 14.3; md[8].mag = 11.2; + + /* get tilts from sky and tel code */ + satrings (sop->s_hlat, sop->s_hlong, sop->s_sdist, eop->s_hlong, + eop->s_edist, JD, etiltp, stiltp); + + /* get moon x,y,z from BDL if possible, else Bruton's model */ + if (!dir || use_bdl (JD, dir, md) < 0) + bruton_saturn (sop, JD, md); + + /* set visibilities */ + moonSVis (eop, sop, md); + moonPShad (eop, sop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + etiltmjd = *etiltp; + stiltmjd = *stiltp; + sizemjd = *sizep; + memcpy (smd, md, sizeof(smd)); +} + +/* hunt for BDL file in dir[] and use if possible. + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[S_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define SATRAU .0004014253 /* saturn radius, AU */ + double x[S_NMOONS], y[S_NMOONS], z[S_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "saturne.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "saturne.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != S_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, S_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < S_NMOONS; i++) { + md[i].x = x[i-1]/SATRAU; /* we want sat radii +E */ + md[i].y = -y[i-1]/SATRAU; /* we want sat radii +S */ + md[i].z = -z[i-1]/SATRAU; /* we want sat radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* */ +/* SS2TXT.BAS Dan Bruton, astro@tamu.edu */ +/* */ +/* This is a text version of SATSAT2.BAS. It is smaller, */ +/* making it easier to convert other languages (250 lines */ +/* compared to 850 lines). */ +/* */ +/* This BASIC program computes and displays the locations */ +/* of Saturn's Satellites for a given date and time. See */ +/* "Practical Astronomy with your Calculator" by Peter */ +/* Duffett-Smith and the Astronomical Almanac for explanations */ +/* of some of the calculations here. The code is included so */ +/* that users can make changes or convert to other languages. */ +/* This code was made using QBASIC (comes with DOS 5.0). */ +/* */ +/* ECD: merged with Sky and Tel, below, for better earth and sun ring tilt */ +/* */ + +/* ECD: BASICeze */ +#define FOR for +#define IF if +#define ELSE else +#define COS cos +#define SIN sin +#define TAN tan +#define ATN atan +#define ABS fabs +#define SQR sqrt + +/* find saturn moon data from Bruton's model */ +/* this originally computed +X:East +Y:North +Z:behind in [1..8] indeces. + * and +tilt:front south, rads + * then we adjust things in md[].x/y/z/mag to fit into our MoonData format. + */ +static void +bruton_saturn ( +Obj *sop, /* saturn */ +double JD, /* julian date */ +MoonData md[S_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ + /* ECD: code does not use [0]. + * ECD and why 11 here? seems like 9 would do + */ + double SMA[11], U[11], U0[11], PD[11]; + double X[S_NMOONS], Y[S_NMOONS], Z[S_NMOONS]; + + double P,TP,TE,EP,EE,RE0,RP0,RS; + double JDE,LPE,LPP,LEE,LEP; + double NN,ME,MP,VE,VP; + double LE,LP,RE,RP,DT,II,F,F1; + double RA,DECL; + double TVA,PVA,TVC,PVC,DOT1,INC,TVB,PVB,DOT2,INCI; + double TRIP,GAM,TEMPX,TEMPY,TEMPZ; + int I; + + /* saturn */ + RA = sop->s_ra; + DECL = sop->s_dec; + + /* ******************************************************************** */ + /* * * */ + /* * Constants * */ + /* * * */ + /* ******************************************************************** */ + P = PI / 180; + /* Orbital Rate of Saturn in Radians per Days */ + TP = 2 * PI / (29.45771 * 365.2422); + /* Orbital Rate of Earth in Radians per Day */ + TE = 2 * PI / (1.00004 * 365.2422); + /* Eccentricity of Saturn's Orbit */ + EP = .0556155; + /* Eccentricity of Earth's Orbit */ + EE = .016718; + /* Semimajor axis of Earth's and Saturn's orbit in Astronomical Units */ + RE0 = 1; RP0 = 9.554747; + /* Semimajor Axis of the Satellites' Orbit in Kilometers */ + SMA[1] = 185600; SMA[2] = 238100; SMA[3] = 294700; SMA[4] = 377500; + SMA[5] = 527200; SMA[6] = 1221600; SMA[7] = 1483000; SMA[8] = 3560100; + /* Eccentricity of Satellites' Orbit [Program uses 0] */ + /* Synodic Orbital Period of Moons in Days */ + PD[1] = .9425049; + PD[2] = 1.3703731; + PD[3] = 1.8880926; + PD[4] = 2.7375218; + PD[5] = 4.5191631; + PD[6] = 15.9669028; + PD[7] = 21.3174647; + PD[8] = 79.9190206; /* personal mail 1/14/95 */ + RS = 60330; /* Radius of planet in kilometers */ + + /* ******************************************************************** */ + /* * * */ + /* * Epoch Information * */ + /* * * */ + /* ******************************************************************** */ + JDE = 2444238.5; /* Epoch Jan 0.0 1980 = December 31,1979 0:0:0 UT */ + LPE = 165.322242 * P; /* Longitude of Saturn at Epoch */ + LPP = 92.6653974 * P; /* Longitude of Saturn`s Perihelion */ + LEE = 98.83354 * P; /* Longitude of Earth at Epoch */ + LEP = 102.596403 * P; /* Longitude of Earth's Perihelion */ + /* U0[I] = Angle from inferior geocentric conjuction */ + /* measured westward along the orbit at epoch */ + U0[1] = 18.2919 * P; + U0[2] = 174.2135 * P; + U0[3] = 172.8546 * P; + U0[4] = 76.8438 * P; + U0[5] = 37.2555 * P; + U0[6] = 57.7005 * P; + U0[7] = 266.6977 * P; + U0[8] = 195.3513 * P; /* from personal mail 1/14/1995 */ + + /* ******************************************************************** */ + /* * * */ + /* * Orbit Calculations * */ + /* * * */ + /* ******************************************************************** */ + /* ****************** FIND MOON ORBITAL ANGLES ************************ */ + NN = JD - JDE; /* NN = Number of days since epoch */ + ME = ((TE * NN) + LEE - LEP); /* Mean Anomoly of Earth */ + MP = ((TP * NN) + LPE - LPP); /* Mean Anomoly of Saturn */ + VE = ME; VP = MP; /* True Anomolies - Solve Kepler's Equation */ + FOR (I = 1; I <= 3; I++) { + VE = VE - (VE - (EE * SIN(VE)) - ME) / (1 - (EE * COS(VE))); + VP = VP - (VP - (EP * SIN(VP)) - MP) / (1 - (EP * COS(VP))); + } + VE = 2 * ATN(SQR((1 + EE) / (1 - EE)) * TAN(VE / 2)); + IF (VE < 0) VE = (2 * PI) + VE; + VP = 2 * ATN(SQR((1 + EP) / (1 - EP)) * TAN(VP / 2)); + IF (VP < 0) VP = (2 * PI) + VP; + /* Heliocentric Longitudes of Earth and Saturn */ + LE = VE + LEP; IF (LE > (2 * PI)) LE = LE - (2 * PI); + LP = VP + LPP; IF (LP > (2 * PI)) LP = LP - (2 * PI); + /* Distances of Earth and Saturn from the Sun in AU's */ + RE = RE0 * (1 - EE * EE) / (1 + EE * COS(VE)); + RP = RP0 * (1 - EP * EP) / (1 + EP * COS(VP)); + /* DT = Distance from Saturn to Earth in AU's - Law of Cosines */ + DT = SQR((RE * RE) + (RP * RP) - (2 * RE * RP * COS(LE - LP))); + /* II = Angle between Earth and Sun as seen from Saturn */ + II = RE * SIN(LE - LP) / DT; + II = ATN(II / SQR(1 - II * II)); /* ArcSIN and Law of Sines */ + /* F = NN - (Light Time to Earth in days) */ + F = NN - (DT / 173.83); + F1 = II + MP - VP; + /* U(I) = Angle from inferior geocentric conjuction measured westward */ + FOR (I = 1; I < S_NMOONS; I++) { + U[I] = U0[I] + (F * 2 * PI / PD[I]) + F1; + U[I] = ((U[I] / (2 * PI)) - (int)(U[I] / (2 * PI))) * 2 * PI; + + } + + /* **************** FIND INCLINATION OF RINGS ************************* */ + /* Use dot product of Earth-Saturn vector and Saturn's rotation axis */ + TVA = (90 - 83.51) * P; /* Theta coordinate of Saturn's axis */ + PVA = 40.27 * P; /* Phi coordinate of Saturn's axis */ + TVC = (PI / 2) - DECL; + PVC = RA; + DOT1 = SIN(TVA) * COS(PVA) * SIN(TVC) * COS(PVC); + DOT1 = DOT1 + SIN(TVA) * SIN(PVA) * SIN(TVC) * SIN(PVC); + DOT1 = DOT1 + COS(TVA) * COS(TVC); + INC = ATN(SQR(1 - DOT1 * DOT1) / DOT1); /* ArcCOS */ + IF (INC > 0) INC = (PI / 2) - INC; ELSE INC = -(PI / 2) - INC; + + /* ************* FIND INCLINATION OF IAPETUS' ORBIT ******************* */ + /* Use dot product of Earth-Saturn vector and Iapetus' orbit axis */ + /* Vector B */ + TVB = (90 - 75.6) * P; /* Theta coordinate of Iapetus' orbit axis (estimate) */ + PVB = 21.34 * 2 * PI / 24; /* Phi coordinate of Iapetus' orbit axis (estimate) */ + DOT2 = SIN(TVB) * COS(PVB) * SIN(TVC) * COS(PVC); + DOT2 = DOT2 + SIN(TVB) * SIN(PVB) * SIN(TVC) * SIN(PVC); + DOT2 = DOT2 + COS(TVB) * COS(TVC); + INCI = ATN(SQR(1 - DOT2 * DOT2) / DOT2); /* ArcCOS */ + IF (INCI > 0) INCI = (PI / 2) - INCI; ELSE INCI = -(PI / 2) - INCI; + + /* ************* FIND ROTATION ANGLE OF IAPETUS' ORBIT **************** */ + /* Use inclination of Iapetus' orbit with respect to ring plane */ + /* Triple Product */ + TRIP = SIN(TVC) * COS(PVC) * SIN(TVA) * SIN(PVA) * COS(TVB); + TRIP = TRIP - SIN(TVC) * COS(PVC) * SIN(TVB) * SIN(PVB) * COS(TVA); + TRIP = TRIP + SIN(TVC) * SIN(PVC) * SIN(TVB) * COS(PVB) * COS(TVA); + TRIP = TRIP - SIN(TVC) * SIN(PVC) * SIN(TVA) * COS(PVA) * COS(TVB); + TRIP = TRIP + COS(TVC) * SIN(TVA) * COS(PVA) * SIN(TVB) * SIN(PVB); + TRIP = TRIP - COS(TVC) * SIN(TVB) * COS(PVB) * SIN(TVA) * SIN(PVA); + GAM = -1 * ATN(TRIP / SQR(1 - TRIP * TRIP)); /* ArcSIN */ + + /* ******************************************************************** */ + /* * * */ + /* * Compute Moon Positions * */ + /* * * */ + /* ******************************************************************** */ + FOR (I = 1; I < S_NMOONS - 1; I++) { + X[I] = -1 * SMA[I] * SIN(U[I]) / RS; + Z[I] = -1 * SMA[I] * COS(U[I]) / RS; /* ECD */ + Y[I] = SMA[I] * COS(U[I]) * SIN(INC) / RS; + } + /* ************************* Iapetus' Orbit *************************** */ + TEMPX = -1 * SMA[8] * SIN(U[8]) / RS; + TEMPZ = -1 * SMA[8] * COS(U[8]) / RS; + TEMPY = SMA[8] * COS(U[8]) * SIN(INCI) / RS; + X[8] = TEMPX * COS(GAM) + TEMPY * SIN(GAM); /* Rotation */ + Z[8] = TEMPZ * COS(GAM) + TEMPY * SIN(GAM); + Y[8] = -1 * TEMPX * SIN(GAM) + TEMPY * COS(GAM); + +#ifdef SHOWALL + /* ******************************************************************** */ + /* * * */ + /* * Show Results * */ + /* * * */ + /* ******************************************************************** */ + printf (" Julian Date : %g\n", JD); + printf (" Right Ascension of Saturn : %g Hours\n", RA * 24 / (2 * PI)); + printf (" Declination of Saturn : %g\n", DECL / P); + printf (" Ring Inclination as seen from Earth : %g\n", -1 * INC / P); + printf (" Heliocentric Longitude of Saturn : %g\n", LP / P); + printf (" Heliocentric Longitude of Earth : %g\n", LE / P); + printf (" Sun-Saturn-Earth Angle : %g\n", II / P); + printf (" Distance between Saturn and Earth : %g AU = %g million miles\n", DT, (DT * 93)); + printf (" Light time from Saturn to Earth : %g minutes\n", DT * 8.28); + TEMP = 2 * ATN(TAN(165.6 * P / (2 * 3600)) / DT) * 3600 / P; + printf (" Angular Size of Saturn : %g arcsec\n", TEMP); + printf (" Major Angular Size of Saturn's Rings : %g arcsec\n", RS4 * TEMP / RS); + printf (" Minor Angular Size of Saturn's Rings : %g arcsec\n", ABS(RS4 * TEMP * SIN(INC) / RS)); +#endif + + /* copy into md[1..S_NMOONS-1] with our sign conventions */ + for (I = 1; I < S_NMOONS; I++) { + md[I].x = X[I]; /* we want +E */ + md[I].y = -Y[I]; /* we want +S */ + md[I].z = -Z[I]; /* we want +front */ + } +} + +/* given saturn loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in sat radii, find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double satsize, /* sat diameter, rads */ +MoonData md[S_NMOONS]) /* fill in RA and Dec */ +{ + double satrad = satsize/2; + double satra = md[0].ra; + double satdec = md[0].dec; + int i; + + for (i = 1; i < S_NMOONS; i++) { + double dra = satrad * md[i].x; + double ddec = satrad * md[i].y; + md[i].ra = satra + dra; + md[i].dec = satdec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *eop, /* earth == SUN */ +Obj *sop, /* saturn */ +MoonData md[S_NMOONS]) +{ + double esd = eop->s_edist; + double eod = sop->s_edist; + double sod = sop->s_sdist; + double soa = degrad(sop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*sop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[S_NMOONS]) +{ + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *eop, /* earth == SUN */ +Obj *sop, /* saturn */ +MoonData md[S_NMOONS]) +{ + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (sop, eop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[S_NMOONS]) +{ + int i; + + for (i = 1; i < S_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: satmoon.c,v $ $Date: 2007/07/24 18:15:28 $ $Revision: 1.8 $ $Name: $"}; diff --git a/libastro/satspec.h b/libastro/satspec.h new file mode 100644 index 0000000..0986dd7 --- /dev/null +++ b/libastro/satspec.h @@ -0,0 +1,43 @@ +#ifndef __SATSPEC_H +#define __SATSPEC_H + +/* $Id: satspec.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +#include "sattypes.h" +#include "satlib.h" + +#define SGP4_SIMPLE 0x00000001 + +extern void init_deep(struct deep_data *deep); +void init_sdp4(struct sdp4_data *sdp); +char *tleerr(int); +int readtle(char *, char *, SatElem *); + +double current_jd(); + +double ut1_to_gha(double); + +void smallsleep(double t); + +double epoch_jd(double); + +double actan(double sinx, double cosx); + +double thetag(double EP, double *DS50); + +void dpinit(SatData *sat, double EQSQ, double SINIQ, double COSIQ, + double RTEQSQ, double AO, double COSQ2, double SINOMO, + double COSOMO, double BSQ, double XLLDOT, double OMGDT, + double XNODOT, double XNODP); + +void dpsec(SatData *sat, double *XLL, double *OMGASM, double *XNODES, + double *EM, double *XINC, double *XN, double T); + +void dpper(SatData *sat, double *EM, double *XINC, double *OMGASM, + double *XNODES, double *XLL, double T); + +#endif /* __SATSPEC_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: satspec.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libastro/sattypes.h b/libastro/sattypes.h new file mode 100644 index 0000000..61891ff --- /dev/null +++ b/libastro/sattypes.h @@ -0,0 +1,28 @@ +#ifndef __SATTYPES_H +#define __SATTYPES_H + +/* $Id: sattypes.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +typedef struct _Vec3 { + double x, y, z; +} Vec3; + + +typedef struct _LookAngle { + double az; + double el; + double r; +} LookAngle; + + +typedef struct _Geoloc { + double lt; + double ln; + double h; +} GeoLoc; + +#endif /* __SATTYPES_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: sattypes.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libastro/sdp4.c b/libastro/sdp4.c new file mode 100644 index 0000000..54e575c --- /dev/null +++ b/libastro/sdp4.c @@ -0,0 +1,430 @@ +#include +#include +#undef SING + +#include "sattypes.h" +#include "vector.h" +#include "satspec.h" + +/* SDP4 3 NOV 80 */ +/* SUBROUTINE SDP4(IFLAG,TSINCE) + COMMON/E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O, + 1 XNDD6O,BSTAR,X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 + COMMON/C1/CK2,CK4,E6A,QOMS2T,S,TOTHRD, + 1 XJ3,XKE,XKMPER,XMNPDA,AE + DOUBLE PRECISION EPOCH, DS50 + */ + +#define XMO (sat->elem->se_XMO) +#define XNODEO (sat->elem->se_XNODEO) +#define OMEGAO (sat->elem->se_OMEGAO) +#define EO (sat->elem->se_EO) +#define XINCL (sat->elem->se_XINCL) +#define XNO (sat->elem->se_XNO) +#define XNDT20 (sat->elem->se_XNDT20) +#define XNDD60 (sat->elem->se_XNDD60) +#define BSTAR (sat->elem->se_BSTAR) +#define EPOCH (sat->elem->se_EPOCH) + +#define CK2 (5.413080e-04) +#define CK4 (6.209887e-07) +#define QOMS2T (1.880279e-09) +#define S (1.012229e+00) + +#define AE (1.0) +#define DE2RA (.174532925E-1) +#define E6A (1.E-6) +#define PI (3.14159265) +#define PIO2 (1.57079633) +#define QO (120.0) +#define SO (78.0) +#define TOTHRD (.66666667) +#define TWOPI (6.2831853) +#define X3PIO2 (4.71238898) +#define XJ2 (1.082616E-3) +#define XJ3 (-.253881E-5) +#define XJ4 (-1.65597E-6) +#define XKE (.743669161E-1) +#define XKMPER (6378.135) +#define XMNPDA (1440.) + +/* int IFLAG; */ + +#define X (pos->sl_X) +#define XDOT (pos->sl_XDOT) +#define Y (pos->sl_Y) +#define YDOT (pos->sl_YDOT) +#define Z (pos->sl_Z) +#define ZDOT (pos->sl_ZDOT) + +/* sat->prop.sdp4-> */ +#define AODP (sat->prop.sdp4->sdp4_AODP) +#define AYCOF (sat->prop.sdp4->sdp4_AYCOF) +#define BETAO (sat->prop.sdp4->sdp4_BETAO) +#define BETAO2 (sat->prop.sdp4->sdp4_BETAO2) +#define C1 (sat->prop.sdp4->sdp4_C1) +#define C4 (sat->prop.sdp4->sdp4_C4) +#define COSG (sat->prop.sdp4->sdp4_COSG) +#define COSIO (sat->prop.sdp4->sdp4_COSIO) +#define EOSQ (sat->prop.sdp4->sdp4_EOSQ) +#define OMGDOT (sat->prop.sdp4->sdp4_OMGDOT) +#define SING (sat->prop.sdp4->sdp4_SING) +#define SINIO (sat->prop.sdp4->sdp4_SINIO) +#define T2COF (sat->prop.sdp4->sdp4_T2COF) +#define THETA2 (sat->prop.sdp4->sdp4_THETA2) +#define X1MTH2 (sat->prop.sdp4->sdp4_X1MTH2) +#define X3THM1 (sat->prop.sdp4->sdp4_X3THM1) +#define X7THM1 (sat->prop.sdp4->sdp4_X7THM1) +#define XLCOF (sat->prop.sdp4->sdp4_XLCOF) +#define XMDOT (sat->prop.sdp4->sdp4_XMDOT) +#define XNODCF (sat->prop.sdp4->sdp4_XNODCF) +#define XNODOT (sat->prop.sdp4->sdp4_XNODOT) +#define XNODP (sat->prop.sdp4->sdp4_XNODP) + +#define XMDF_seco (sat->prop.sdp4->sdp4_XMDF_seco) +#define OMGADF_seco (sat->prop.sdp4->sdp4_OMGADF_seco) +#define XNODE_seco (sat->prop.sdp4->sdp4_XNODE_seco) +#define EM_seco (sat->prop.sdp4->sdp4_EM_seco) +#define XINC_seco (sat->prop.sdp4->sdp4_XINC_seco) +#define XN_seco (sat->prop.sdp4->sdp4_XN_seco) + +#define E_pero (sat->prop.sdp4->sdp4_E_pero) +#define XINC_pero (sat->prop.sdp4->sdp4_XINC_pero) +#define OMGADF_pero (sat->prop.sdp4->sdp4_OMGADF_pero) +#define XNODE_pero (sat->prop.sdp4->sdp4_XNODE_pero) +#define XMAM_pero (sat->prop.sdp4->sdp4_XMAM_pero) + +void +sdp4 (SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE) +{ + int i; + + /* private temporary variables used only in init section */ + double A1,A3OVK2,AO,C2,COEF,COEF1,DEL1,DELO,EETA,ETA, + ETASQ,PERIGE,PINVSQ,PSISQ,QOMS24,S4,THETA4,TSI,X1M5TH,XHDOT1; + + /* private temporary variables */ + double A,AXN,AYN,AYNL,BETA,BETAL,CAPU,COS2U,COSEPW=0, + COSIK,COSNOK,COSU,COSUK,E,ECOSE,ELSQ,EM=0,EPW,ESINE,OMGADF,PL, + R,RDOT,RDOTK,RFDOT,RFDOTK,RK,SIN2U,SINEPW=0,SINIK,SINNOK, + SINU,SINUK,TEMP,TEMP1,TEMP2,TEMP3=0,TEMP4=0,TEMP5=0,TEMP6=0,TEMPA, + TEMPE,TEMPL,TSQ,U,UK,UX,UY,UZ,VX,VY,VZ,XINC=0,XINCK,XL,XLL,XLT, + XMAM,XMDF,XMX,XMY,XN,XNODDF,XNODE,XNODEK; + +#if 0 + A1=A3OVK2=AO=C2=COEF=COEF1=DEL1=DELO=EETA=ETA = signaling_nan(); + ETASQ=PERIGE=PINVSQ=PSISQ=QOMS24=S4=THETA4=TSI=X1M5TH=XHDOT1 = signaling_nan(); + + A=AXN=AYN=AYNL=BETA=BETAL=CAPU=COS2U=COSEPW = signaling_nan(); + COSIK=COSNOK=COSU=COSUK=E=ECOSE=ELSQ=EM=EPW=ESINE=OMGADF=PL = signaling_nan(); + R=RDOT=RDOTK=RFDOT=RFDOTK=RK=SIN2U=SINEPW=SINIK=SINNOK = signaling_nan(); + SINU=SINUK=TEMP=TEMP1=TEMP2=TEMP3=TEMP4=TEMP5=TEMP6=TEMPA = signaling_nan(); + TEMPE=TEMPL=TSQ=U=UK=UX=UY=UZ=VX=VY=VZ=XINC=XINCK=XL=XLL=XLT = signaling_nan(); + XMAM=XMDF=XMX=XMY=XN=XNODDF=XNODE=XNODEK = signaling_nan(); +#endif + + if(TSINCE != 0.0 && !sat->prop.sdp4) { + /* + * Yes, this is a recursive call. + */ + sdp4(sat, pos, dpos, 0.0); + } + +/* IF (IFLAG .EQ. 0) GO TO 100 */ +/* if(!IFLAG) */ + if(!sat->prop.sdp4) { + sat->prop.sdp4 = (struct sdp4_data *) malloc(sizeof(struct sdp4_data)); + +/* init_sdp4(sat->prop.sdp4); */ + +/* RECOVER ORIGINAL MEAN MOTION (XNODP) AND SEMIMAJOR AXIS (AODP) */ +/* FROM INPUT ELEMENTS */ + + A1=pow((XKE/XNO), TOTHRD); + COSIO=cos(XINCL); + THETA2=COSIO*COSIO; + X3THM1=3.0 * THETA2 - 1.0; + EOSQ = EO * EO; + BETAO2 = 1.0 - EOSQ; + BETAO = sqrt(BETAO2); + DEL1 = 1.5 * CK2 * X3THM1 / (A1 * A1 * BETAO * BETAO2); + AO = A1 * (1.0 - DEL1 * (0.5 * TOTHRD + + DEL1 * (1.0 + 134.0 / 81.0 * DEL1))); + DELO = 1.5 * CK2 * X3THM1 / (AO * AO * BETAO * BETAO2); + XNODP = XNO / (1.0 + DELO); + AODP = AO / (1.0 - DELO); + +/* INITIALIZATION */ + +/* FOR PERIGEE BELOW 156 KM, THE VALUES OF +* S AND QOMS2T ARE ALTERED */ + + S4 = S; + QOMS24 = QOMS2T; + PERIGE = (AODP * (1.0 - EO) - AE) * XKMPER; + +/* IF(PERIGE .GE. 156.) GO TO 10 */ + + if(PERIGE < 156.0) { + S4 = PERIGE - 78.0; + + if(PERIGE <= 98.0) { /* GO TO 9 */ + S4 = 20.0; + } + + QOMS24 = pow((120.0 - S4) * AE / XKMPER, 4.0); /* 9 */ + S4 = S4 / XKMPER + AE; + } + PINVSQ = 1.0 / (AODP * AODP * BETAO2 * BETAO2); /* 10 */ + SING = sin(OMEGAO); + COSG = cos(OMEGAO); + TSI = 1.0 / (AODP - S4); + ETA = AODP * EO * TSI; + ETASQ = ETA * ETA; + EETA = EO * ETA; + PSISQ = fabs(1.0 - ETASQ); + COEF = QOMS24 * pow(TSI, 4.0); + COEF1 = COEF / pow(PSISQ, 3.5); + C2 = COEF1 * XNODP * (AODP * (1.0 + 1.5 * ETASQ + + EETA * (4.0 + ETASQ)) + + .75 * CK2 * TSI / PSISQ * X3THM1 * + (8.0 + 3.0 * ETASQ * (8.0 + ETASQ))); + C1 = BSTAR * C2; + SINIO = sin(XINCL); + A3OVK2 = -XJ3 / CK2 * AE * AE * AE; /* A3OVK2=-XJ3/CK2*AE**3; */ + X1MTH2 = 1.0 - THETA2; + C4 = 2.0 * XNODP * COEF1 * AODP * BETAO2 * + (ETA * (2.0 + .5 * ETASQ) + EO * (.5 + 2.0 * ETASQ) - + 2.0 * CK2 * TSI / (AODP * PSISQ) * + (-3.0 * X3THM1 * (1.0 - 2.0 * EETA + ETASQ * + (1.5 - .5 * EETA)) + + .75 * X1MTH2 * (2.0 * ETASQ - EETA * + (1.0 + ETASQ)) * cos(2.0 * OMEGAO))); + THETA4 = THETA2 * THETA2; + TEMP1 = 3.0 * CK2 * PINVSQ * XNODP; + TEMP2 = TEMP1 * CK2 * PINVSQ; + TEMP3 = 1.25 * CK4 * PINVSQ * PINVSQ * XNODP; + XMDOT = XNODP + 0.5 * TEMP1 * BETAO * X3THM1 + .0625 * TEMP2 * BETAO * + (13.0 - 78.0 * THETA2 + 137.0 * THETA4); + X1M5TH=1.0 - 5.0 * THETA2; + OMGDOT = -.5 * TEMP1 * X1M5TH + .0625 * TEMP2 * + (7.0 - 114.0 * THETA2 + 395.0 * THETA4) + + TEMP3 * (3.0 - 36.0 * THETA2 + 49.0 * THETA4); + XHDOT1 = -TEMP1 * COSIO; + XNODOT = XHDOT1 + (.5 * TEMP2 * (4.0 - 19.0 * THETA2) + + 2.0 * TEMP3 * (3.0 - 7.0 * THETA2)) * COSIO; + XNODCF = 3.5 * BETAO2 * XHDOT1 * C1; + T2COF = 1.5 * C1; + XLCOF = .125 * A3OVK2 * SINIO * (3.0 + 5.0 * COSIO) / (1.0 + COSIO); + AYCOF = .25 * A3OVK2 * SINIO; + X7THM1 = 7.0 * THETA2 - 1.0; +/* 90 IFLAG=0 */ + +#ifdef SDP_DEEP_DEBUG + printf("calling dpinit\n"); + printf("%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n", + EOSQ,SINIO,COSIO,BETAO,AODP,THETA2, + SING,COSG,BETAO2,XMDOT,OMGDOT,XNODOT,XNODP); +#endif + dpinit(sat, EOSQ, SINIO, COSIO, BETAO, AODP, THETA2, + SING, COSG, BETAO2, XMDOT, OMGDOT, XNODOT, XNODP); + +/* CALL DPINIT(EOSQ,SINIO,COSIO,BETAO,AODP,THETA2, + 1 SING,COSG,BETAO2,XMDOT,OMGDOT,XNODOT,XNODP) */ + +/* UPDATE FOR SECULAR GRAVITY AND ATMOSPHERIC DRAG */ + } + + XMDF = XMO + XMDOT * TSINCE; /* 100 */ + OMGADF = OMEGAO + OMGDOT * TSINCE; + XNODDF = XNODEO + XNODOT * TSINCE; + TSQ = TSINCE * TSINCE; + XNODE = XNODDF + XNODCF * TSQ; + TEMPA = 1.0 - C1 * TSINCE; + TEMPE = BSTAR * C4 * TSINCE; + TEMPL = T2COF * TSQ; + XN = XNODP; + + if(TSINCE == 0.0) { + XMDF_seco = XMDF; + OMGADF_seco = OMGADF; + XNODE_seco = XNODE; + EM_seco = EM; + XINC_seco = XINC; + XN_seco = XN; + } + + dpsec(sat, &XMDF, &OMGADF, &XNODE, &EM, &XINC, &XN, TSINCE); + + if(TSINCE == 0.0) { + XMDF_seco = XMDF - XMDF_seco; + OMGADF_seco = OMGADF - OMGADF_seco; + XNODE_seco = XNODE - XNODE_seco; + EM_seco = EM - EM_seco; + XINC_seco = XINC - XINC_seco; + XN_seco = XN - XN_seco; + +#if 0 + printf("XMDF_seco = %e\n", XMDF_seco); + printf("OMGADF_seco = %e\n", OMGADF_seco); + printf("XNODE_seco = %e\n", XNODE_seco); + printf("EM_seco = %e\n", EM_seco); + printf("XINC_seco = %e\n", XINC_seco); + printf("XN_seco = %e\n", XN_seco); +#endif + } + + /* + XMDF -= XMDF_seco; + OMGADF -= OMGADF_seco; + XNODE -= XNODE_seco; + EM -= EM_seco; + XINC -= XINC_seco; + XN -= XN_seco; + */ + + A = pow(XKE/XN, TOTHRD) * TEMPA * TEMPA; + E = EM - TEMPE; +#ifdef SDP_DEEP_DEBUG + printf("*** E = %f\n", E); +#endif + XMAM = XMDF + XNODP * TEMPL; +/* CALL DPPER(E,XINC,OMGADF,XNODE,XMAM) */ + +#ifdef SDP_DEEP_DEBUG + printf("%12s %12s %12s %12s %12s\n", + "E", "XINC", "OMGADF", "XNODE", "XMAM"); + printf("%12f %12f %12f %12f %12f\n", + E, XINC, OMGADF, XNODE, XMAM); +#endif + + if(TSINCE == 0.0) { + E_pero = E; + XINC_pero = XINC; + OMGADF_pero = OMGADF; + XNODE_pero = XNODE; + XMAM_pero = XMAM; + } + + dpper(sat, &E, &XINC, &OMGADF, &XNODE, &XMAM, TSINCE); + + if(TSINCE == 0.0) { + E_pero = E - E_pero; + XINC_pero = XINC - XINC_pero; + OMGADF_pero = OMGADF - OMGADF_pero; + XNODE_pero = XNODE - XNODE_pero; + XMAM_pero = XMAM - XMAM_pero; + +#if 0 + printf("E_pero = %e\n", E_pero); + printf("XINC_pero = %e\n", XINC_pero); + printf("OMGADF_pero = %e\n", OMGADF_pero); + printf("XNODE_pero = %e\n", XNODE_pero); + printf("XMAM_pero = %e\n\n", XMAM_pero); +#endif + } + + /* + E -= E_pero; + XINC -= XINC_pero; + OMGADF -= OMGADF_pero; + XNODE -= XNODE_pero; + XMAM -= XMAM_pero; + */ + XL = XMAM + OMGADF + XNODE; + BETA = sqrt(1.0 - E * E); + XN = XKE / pow(A, 1.5); + +/* LONG PERIOD PERIODICS */ + + AXN = E * cos(OMGADF); + TEMP=1./(A*BETA*BETA); + XLL=TEMP*XLCOF*AXN; + AYNL=TEMP*AYCOF; + XLT=XL+XLL; + AYN=E*sin(OMGADF)+AYNL; + +/* SOLVE KEPLERS EQUATION */ + + CAPU=fmod(XLT-XNODE, TWOPI); + TEMP2=CAPU; +/* DO 130 I=1,10*/ + for(i = 1; i < 10; i++) { + SINEPW=sin(TEMP2); + COSEPW=cos(TEMP2); + TEMP3=AXN*SINEPW; + TEMP4=AYN*COSEPW; + TEMP5=AXN*COSEPW; + TEMP6=AYN*SINEPW; + EPW=(CAPU-TEMP4+TEMP3-TEMP2)/(1.-TEMP5-TEMP6)+TEMP2; +/* IF(ABS(EPW-TEMP2) .LE. E6A) GO TO 140 */ + if(fabs(EPW-TEMP2) <= E6A) + break; + TEMP2=EPW; /* 130 */ + } + +/* SHORT PERIOD PRELIMINARY QUANTITIES */ + + ECOSE=TEMP5+TEMP6; /* 140 */ + ESINE=TEMP3-TEMP4; + ELSQ=AXN*AXN+AYN*AYN; + TEMP=1.-ELSQ; + PL=A*TEMP; + R=A*(1.-ECOSE); + TEMP1=1./R; + RDOT=XKE*sqrt(A)*ESINE*TEMP1; + RFDOT=XKE*sqrt(PL)*TEMP1; + TEMP2=A*TEMP1; + BETAL=sqrt(TEMP); + TEMP3=1./(1.+BETAL); + COSU=TEMP2*(COSEPW-AXN+AYN*ESINE*TEMP3); + SINU=TEMP2*(SINEPW-AYN-AXN*ESINE*TEMP3); + U=actan(SINU,COSU); + SIN2U=2.*SINU*COSU; + COS2U=2.*COSU*COSU-1.0; + TEMP=1./PL; + TEMP1=CK2*TEMP; + TEMP2=TEMP1*TEMP; + +/* UPDATE FOR SHORT PERIODICS */ + + RK=R*(1.-1.5*TEMP2*BETAL*X3THM1)+.5*TEMP1*X1MTH2*COS2U; + UK=U - .25 * TEMP2 * X7THM1 * SIN2U; + XNODEK=XNODE+1.5*TEMP2*COSIO*SIN2U; + XINCK=XINC+1.5*TEMP2*COSIO*SINIO*COS2U; + RDOTK=RDOT-XN*TEMP1*X1MTH2*SIN2U; + RFDOTK=RFDOT+XN*TEMP1*(X1MTH2*COS2U+1.5*X3THM1); + +/* ORIENTATION VECTORS */ + SINUK=sin(UK); + COSUK=cos(UK); + SINIK=sin(XINCK); + COSIK=cos(XINCK); + SINNOK=sin(XNODEK); + COSNOK=cos(XNODEK); + XMX=-SINNOK*COSIK; + XMY=COSNOK*COSIK; + UX=XMX*SINUK+COSNOK*COSUK; + UY=XMY*SINUK+SINNOK*COSUK; + UZ=SINIK*SINUK; + VX=XMX*COSUK-COSNOK*SINUK; + VY=XMY*COSUK-SINNOK*SINUK; + VZ=SINIK*COSUK; +#if 0 + printf("UX = %f VX = %f RK = %f RDOTK = %f RFDOTK = %f\n", + UX, VX, RK, RDOTK, RFDOTK); +#endif +/* POSITION AND VELOCITY */ + + pos->x = RK*UX; + pos->y = RK*UY; + pos->z = RK*UZ; + dpos->x = RDOTK*UX+RFDOTK*VX; + dpos->y = RDOTK*UY+RFDOTK*VY; + dpos->z = RDOTK*UZ+RFDOTK*VZ; +/* RETURN + END */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sdp4.c,v $ $Date: 2002/12/26 05:43:07 $ $Revision: 1.5 $ $Name: $"}; diff --git a/libastro/sgp4.c b/libastro/sgp4.c new file mode 100644 index 0000000..e1b191a --- /dev/null +++ b/libastro/sgp4.c @@ -0,0 +1,401 @@ +#include +#include + +#include "sattypes.h" +#include "vector.h" +#include "satspec.h" + +#define XMO (sat->elem->se_XMO) +#define XNODEO (sat->elem->se_XNODEO) +#define OMEGAO (sat->elem->se_OMEGAO) +#define EO (sat->elem->se_EO) +#define XINCL (sat->elem->se_XINCL) +#define XNO (sat->elem->se_XNO) +#define XNDT20 (sat->elem->se_XNDT20) +#define XNDD60 (sat->elem->se_XNDD60) +#define BSTAR (sat->elem->se_BSTAR) +#define EPOCH (sat->elem->se_EPOCH) + +#define X (pos->sl_X) +#define XDOT (pos->sl_XDOT) +#define Y (pos->sl_Y) +#define YDOT (pos->sl_YDOT) +#define Z (pos->sl_Z) +#define ZDOT (pos->sl_ZDOT) + +#define AODP (sat->prop.sgp4->sgp4_AODP) +#define AYCOF (sat->prop.sgp4->sgp4_AYCOF) +#define C1 (sat->prop.sgp4->sgp4_C1) +#define C4 (sat->prop.sgp4->sgp4_C4) +#define C5 (sat->prop.sgp4->sgp4_C5) +#define COSIO (sat->prop.sgp4->sgp4_COSIO) +#define D2 (sat->prop.sgp4->sgp4_D2) +#define D3 (sat->prop.sgp4->sgp4_D3) +#define D4 (sat->prop.sgp4->sgp4_D4) +#define DELMO (sat->prop.sgp4->sgp4_DELMO) +#define ETA (sat->prop.sgp4->sgp4_ETA) +#define OMGCOF (sat->prop.sgp4->sgp4_OMGCOF) +#define OMGDOT (sat->prop.sgp4->sgp4_OMGDOT) +#define SINIO (sat->prop.sgp4->sgp4_SINIO) +#define SINMO (sat->prop.sgp4->sgp4_SINMO) +#define T2COF (sat->prop.sgp4->sgp4_T2COF) +#define T3COF (sat->prop.sgp4->sgp4_T3COF) +#define T4COF (sat->prop.sgp4->sgp4_T4COF) +#define T5COF (sat->prop.sgp4->sgp4_T5COF) +#define X1MTH2 (sat->prop.sgp4->sgp4_X1MTH2) +#define X3THM1 (sat->prop.sgp4->sgp4_X3THM1) +#define X7THM1 (sat->prop.sgp4->sgp4_X7THM1) +#define XLCOF (sat->prop.sgp4->sgp4_XLCOF) +#define XMCOF (sat->prop.sgp4->sgp4_XMCOF) +#define XMDOT (sat->prop.sgp4->sgp4_XMDOT) +#define XNODCF (sat->prop.sgp4->sgp4_XNODCF) +#define XNODOT (sat->prop.sgp4->sgp4_XNODOT) +#define XNODP (sat->prop.sgp4->sgp4_XNODP) + +#define CK2 (5.413080e-04) +#define CK4 (6.209887e-07) +#define QOMS2T (1.880279e-09) +#define S (1.012229e+00) + +#define AE (1.0) +#define DE2RA (.174532925E-1) +#define E6A (1.E-12) +#define PI (3.14159265) +#define PIO2 (1.57079633) +#define QO (120.0) +#define SO (78.0) +#define TOTHRD (.66666667) +#define TWOPI (6.2831853) +#define X3PIO2 (4.71238898) +#define XJ2 (1.082616E-3) +#define XJ3 (-.253881E-5) +#define XJ4 (-1.65597E-6) +#define XKE (.743669161E-1) +#define XKMPER (6378.135) +#define XMNPDA (1440.0) + +/* compute position and velocity vectors for the satellite defined in sat->elem + * at its epoch + TSINCE. + */ +void +sgp4(SatData *sat, Vec3 *pos, Vec3 *dpos, double TSINCE) +{ + int i; + + double A1, A3OVK2, AO, BETAO, BETAO2, C1SQ, C2, C3, COEF, COEF1, + DEL1, DELO, EETA, EOSQ, ETASQ, PERIGE, PINVSQ, PSISQ, QOMS24, + S4, TEMP, TEMP1, TEMP2, TEMP3=0, THETA2, THETA4, TSI, X1M5TH, + XHDOT1; + + double A, AXN, AYN, AYNL, BETA, BETAL, CAPU, COS2U, COSEPW=0, COSIK, + COSNOK, COSU, COSUK, DELM, DELOMG, E, ECOSE, ELSQ, EPW, ESINE, + OMEGA, OMGADF, PL, R, RDOT, RDOTK, RFDOT, RFDOTK, RK, SIN2U, + SINEPW=0, SINIK, SINNOK, SINU, SINUK, TCUBE, TEMP4=0, TEMP5=0, TEMP6=0, + TEMPA, TEMPE, TEMPL, TFOUR, TSQ, U, UK, UX, UY, UZ, VX, VY, VZ, + XINCK, XL, XLL, XLT, XMDF, XMP, XMX, XMY, XN, XNODDF, XNODE, + XNODEK; + +#if 0 + A1 = A3OVK2 = AO = BETAO = BETAO2 = C1SQ = C2 = C3 = COEF = COEF1 = + DEL1 = DELO = EETA = EOSQ = ETASQ = PERIGE = PINVSQ = PSISQ = QOMS24 = + S4 = TEMP = TEMP1 = TEMP2 = TEMP3 = THETA2 = THETA4 = TSI = X1M5TH = + XHDOT1 = signaling_nan(); + + A = AXN = AYN = AYNL = BETA = BETAL = CAPU = COS2U = COSEPW = COSIK = + COSNOK = COSU = COSUK = DELM = DELOMG = E = ECOSE = ELSQ = EPW = + ESINE = OMEGA = OMGADF = PL = R = RDOT = RDOTK = RFDOT = RFDOTK = + RK = SIN2U = SINEPW = SINIK = SINNOK = SINU = SINUK = TCUBE = TEMP4 = + TEMP5 = TEMP6 = TEMPA = TEMPE = TEMPL = TFOUR = TSQ = U = UK = UX = + UY = UZ = VX = VY = VZ = XINCK = XL = XLL = XLT = XMDF = XMP = XMX = + XMY = XN = XNODDF = XNODE = XNODEK = signaling_nan(); +#endif + + if(!sat->prop.sgp4) { + sat->prop.sgp4 = (struct sgp4_data *) malloc(sizeof(struct sgp4_data)); + + /* + * RECOVER ORIGINAL MEAN MOTION (XNODP) AND SEMIMAJOR AXIS (AODP) + * FROM INPUT ELEMENTS + */ + + A1 = pow((XKE/XNO), TOTHRD); + COSIO = cos(XINCL); + THETA2 = COSIO * COSIO; + X3THM1 = 3.0 * THETA2 - 1.0; + EOSQ = EO * EO; + BETAO2 = 1.0 - EOSQ; + BETAO = sqrt(BETAO2); + DEL1 = 1.5 * CK2 * X3THM1 / (A1 * A1 * BETAO * BETAO2); + AO = A1 * (1.0 - DEL1 * (.5 * TOTHRD + + DEL1 * (1.0 + 134.0 /81.0 * DEL1))); + DELO = 1.5 * CK2 * X3THM1 / (AO * AO * BETAO * BETAO2); + XNODP = XNO / (1.0 + DELO); + AODP=AO / (1.0 - DELO); + + /* + * INITIALIZATION + * + * FOR PERIGEE LESS THAN 220 KILOMETERS, THE ISIMP FLAG IS SET AND + * THE EQUATIONS ARE TRUNCATED TO LINEAR VARIATION IN SQRT A AND + * QUADRATIC VARIATION IN MEAN ANOMALY. ALSO, THE C3 TERM, THE + * DELTA OMEGA TERM, AND THE DELTA M TERM ARE DROPPED. + */ + + sat->prop.sgp4->sgp4_flags = 0; + + /* IF((AODP*(1.-EO)/AE) .LT. (220./XKMPER+AE)) ISIMP=1 */ + + if((AODP * (1.0 - EO) / AE) < (220.0 / XKMPER + AE)) + sat->prop.sgp4->sgp4_flags |= SGP4_SIMPLE; + + /* + * FOR PERIGEE BELOW 156 KM, THE VALUES OF + * S AND QOMS2T ARE ALTERED + */ + + S4 = S; + QOMS24 = QOMS2T; + PERIGE = (AODP * (1.0 - EO) - AE) * XKMPER; + + if(PERIGE < 156.0) { + S4 = PERIGE - 78.0; + + if(PERIGE <= 98.0) + S4 = 20.0; + + QOMS24 = pow(((120.0 - S4) * AE / XKMPER), 4.0); + S4 = S4 / XKMPER + AE; + } + + PINVSQ=1.0 / (AODP * AODP * BETAO2 * BETAO2); + TSI = 1.0 / (AODP - S4); + ETA = AODP * EO * TSI; + ETASQ = ETA * ETA; + EETA = EO * ETA; + + PSISQ = fabs(1.0 - ETASQ); + + COEF = QOMS24 * pow(TSI, 4.0); + COEF1 = COEF / pow(PSISQ, 3.5); + + C2 = COEF1 * XNODP * (AODP * (1.0 + 1.5 * ETASQ + + EETA * (4.0 + ETASQ)) + .75 * + CK2 * TSI / + PSISQ * X3THM1 * (8.0 + + 3.0 * ETASQ * (8.0 + ETASQ))); + + + C1 = BSTAR * C2; + + SINIO = sin(XINCL); + + A3OVK2 = -XJ3 / CK2 * pow(AE, 3.0); + + C3 = COEF * TSI * A3OVK2 * XNODP * AE * SINIO / EO; + + X1MTH2 = 1.0 - THETA2; + C4 = 2.0 * XNODP * COEF1 * AODP * BETAO2 * + (ETA * (2.0 + .5 * ETASQ) + + EO * (.5 + 2.0 * ETASQ) - + 2.0 * CK2 * TSI / (AODP * PSISQ) * + (-3.0 * X3THM1 * (1.0 - 2.0 * EETA + ETASQ * (1.5 - .5 * EETA)) + + .75 * X1MTH2 * (2.0 * ETASQ - EETA * (1.0 + ETASQ)) * + cos(2.0 * OMEGAO))); + + C5 = 2.0 * COEF1 * AODP * BETAO2 * (1.0 + + 2.75 * (ETASQ + EETA) + + EETA * ETASQ); + THETA4 = THETA2 * THETA2; + TEMP1 = 3.0 * CK2 * PINVSQ * XNODP; + TEMP2 = TEMP1 * CK2 * PINVSQ; + TEMP3 = 1.25 * CK4 * PINVSQ * PINVSQ * XNODP; + + XMDOT = XNODP + + .5 * TEMP1 * BETAO * X3THM1 + + .0625 * TEMP2 * BETAO * (13.0 - 78.0 * THETA2 + 137.0 * THETA4); + + X1M5TH = 1.0 - 5.0 * THETA2; + + OMGDOT = -.5 * TEMP1 * X1M5TH + + .0625 * TEMP2 * (7.0 - 114.0 * THETA2 + 395.0 * THETA4) + + TEMP3 * (3.0 - 36.0 * THETA2 + 49.0 * THETA4); + + XHDOT1 = -TEMP1 * COSIO; + + XNODOT = XHDOT1 + (.5 * TEMP2 * (4.0 - 19.0 * THETA2) + + 2.0 * TEMP3 * (3.0 - 7.0 * THETA2)) * COSIO; + + OMGCOF = BSTAR * C3 * cos(OMEGAO); + + XMCOF = -TOTHRD * COEF * BSTAR * AE / EETA; + XNODCF = 3.5 * BETAO2 * XHDOT1 * C1; + T2COF = 1.5 * C1; + XLCOF = .125 * A3OVK2 * SINIO * (3.0 + 5.0 *COSIO) / (1.0 + COSIO); + + AYCOF = .25 * A3OVK2 * SINIO; + DELMO = pow(1.0 + ETA * cos(XMO), 3.0); + SINMO = sin(XMO); + + X7THM1 = 7.0 * THETA2 - 1.0; + +/* IF(ISIMP .EQ. 1) GO TO 90 */ + if(!(sat->prop.sgp4->sgp4_flags & SGP4_SIMPLE)) { + C1SQ = C1 * C1; + D2 = 4.0 * AODP * TSI * C1SQ; + TEMP = D2 * TSI * C1 / 3.0; + D3 = (17.0 * AODP + S4) * TEMP; + D4 = .5 * TEMP * AODP * TSI * (221.0 * AODP + 31.0 * S4) * C1; + T3COF = D2 + 2.0 * C1SQ; + T4COF = .25 * (3.0 * D3 + C1 * (12.0 * D2 + 10.0 * C1SQ)); + T5COF = .2 * (3.0 * D4 + + 12.0 * C1 * D3 + + 6.0 * D2 * D2 + + 15.0 * C1SQ * (2.0 * D2 + C1SQ)); + } + } + + /* + * UPDATE FOR SECULAR GRAVITY AND ATMOSPHERIC DRAG + */ + + XMDF = XMO + XMDOT * TSINCE; + OMGADF = OMEGAO + OMGDOT * TSINCE; + XNODDF = XNODEO + XNODOT * TSINCE; + OMEGA = OMGADF; + XMP = XMDF; + TSQ = TSINCE * TSINCE; + XNODE = XNODDF + XNODCF * TSQ; + TEMPA = 1.0 - C1 * TSINCE; + TEMPE = BSTAR * C4 * TSINCE; + TEMPL = T2COF * TSQ; + if(!(sat->prop.sgp4->sgp4_flags & SGP4_SIMPLE)) { + DELOMG = OMGCOF * TSINCE; + DELM = XMCOF * (pow(1.0 + ETA * cos(XMDF), 3) - DELMO); + TEMP = DELOMG + DELM; + XMP = XMDF + TEMP; + OMEGA = OMGADF - TEMP; + TCUBE = TSQ * TSINCE; + TFOUR = TSINCE * TCUBE; + TEMPA = TEMPA - D2 * TSQ - D3 * TCUBE - D4 * TFOUR; + TEMPE = TEMPE + BSTAR * C5 * (sin(XMP) - SINMO); + TEMPL = TEMPL + T3COF * TCUBE + TFOUR * (T4COF + TSINCE * T5COF); + } + + A = AODP * TEMPA * TEMPA; + E = EO - TEMPE; + XL = XMP + OMEGA + XNODE + XNODP * TEMPL; + BETA = sqrt(1.0 - E * E); + XN = XKE / pow(A, 1.5); + + /* + * LONG PERIOD PERIODICS + */ + + AXN = E * cos(OMEGA); + TEMP = 1.0 / (A * BETA * BETA); + XLL = TEMP * XLCOF * AXN; + AYNL = TEMP * AYCOF; + XLT = XL + XLL; + AYN = E * sin(OMEGA) + AYNL; + + /* + * SOLVE KEPLERS EQUATION + */ + + CAPU = fmod(XLT - XNODE, TWOPI); + TEMP2 = CAPU; + + for(i = 0; i < 10; i++) { + SINEPW = sin(TEMP2); + COSEPW = cos(TEMP2); + TEMP3 = AXN * SINEPW; + TEMP4 = AYN * COSEPW; + TEMP5 = AXN * COSEPW; + TEMP6 = AYN * SINEPW; + EPW = (CAPU - TEMP4 + TEMP3 - TEMP2) / (1.0 - TEMP5 - TEMP6) + TEMP2; + + if(fabs(EPW - TEMP2) <= E6A) + break; + + TEMP2 = EPW; + } + + /* + * SHORT PERIOD PRELIMINARY QUANTITIES + */ + + ECOSE = TEMP5 + TEMP6; + ESINE = TEMP3 - TEMP4; + ELSQ = AXN * AXN + AYN * AYN; + TEMP = 1.0 - ELSQ; + PL = A * TEMP; + R = A * (1.0 - ECOSE); + + TEMP1 = 1.0 / R; + RDOT = XKE * sqrt(A) * ESINE * TEMP1; + RFDOT = XKE * sqrt(PL) * TEMP1; + TEMP2 = A * TEMP1; + BETAL = sqrt(TEMP); + TEMP3 = 1.0 / (1.0 + BETAL); + + COSU = TEMP2 * (COSEPW - AXN + AYN * ESINE * TEMP3); + SINU = TEMP2 * (SINEPW - AYN - AXN * ESINE * TEMP3); + + U = actan(SINU, COSU); + + SIN2U = 2.0 * SINU * COSU; + COS2U = 2.0 * COSU * COSU - 1.0; + + TEMP = 1.0 / PL; + TEMP1 = CK2 * TEMP; + TEMP2 = TEMP1 * TEMP; + + /* + * UPDATE FOR SHORT PERIODICS + */ + + RK = R * (1.0 - 1.5 * TEMP2 * BETAL * X3THM1) + + .5 * TEMP1 * X1MTH2 * COS2U; + + UK = U - .25 * TEMP2 * X7THM1 * SIN2U; + + XNODEK = XNODE + 1.5 * TEMP2 * COSIO * SIN2U; + XINCK = XINCL + 1.5 * TEMP2 * COSIO * SINIO * COS2U; + RDOTK = RDOT - XN * TEMP1 * X1MTH2 * SIN2U; + RFDOTK = RFDOT + XN * TEMP1 * (X1MTH2 * COS2U + 1.5 * X3THM1); + + /* + * ORIENTATION VECTORS + */ + + SINUK = sin(UK); + COSUK = cos(UK); + SINIK = sin(XINCK); + COSIK = cos(XINCK); + SINNOK = sin(XNODEK); + COSNOK = cos(XNODEK); + + XMX = -SINNOK * COSIK; + XMY = COSNOK * COSIK; + UX = XMX * SINUK + COSNOK * COSUK; + UY = XMY * SINUK + SINNOK * COSUK; + UZ = SINIK * SINUK; + VX = XMX * COSUK - COSNOK * SINUK; + VY = XMY * COSUK - SINNOK * SINUK; + VZ = SINIK * COSUK; + + /* + * POSITION AND VELOCITY + */ + + pos->x = RK * UX; + pos->y = RK * UY; + pos->z = RK * UZ; + + dpos->x = RDOTK * UX + RFDOTK * VX; + dpos->y = RDOTK * UY + RFDOTK * VY; + dpos->z = RDOTK * UZ + RFDOTK * VZ; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sgp4.c,v $ $Date: 2012/10/01 00:05:23 $ $Revision: 1.5 $ $Name: $"}; diff --git a/libastro/sphcart.c b/libastro/sphcart.c new file mode 100644 index 0000000..9d216a8 --- /dev/null +++ b/libastro/sphcart.c @@ -0,0 +1,43 @@ +#include +#include + +#include "astro.h" + +/* transformation from spherical to cartesian coordinates */ +void +sphcart ( +double l, double b, double r, /* source: spherical coordinates */ +double *x, double *y, double *z) /* result: rectangular coordinates */ +{ + double rcb = r * cos(b); + + *x = rcb * cos(l); + *y = rcb * sin(l); + *z = r * sin(b); +} + +/* transformation from cartesian to spherical coordinates */ +void +cartsph ( +double x, double y, double z, /* source: rectangular coordinates */ +double *l, double *b, double *r) /* result: spherical coordinates */ +{ + double rho = x*x + y*y; + + if (rho > 0) { /* standard case: off axis */ + *l = atan2(y, x); + range (l, 2*PI); + *b = atan2(z, sqrt(rho)); + *r = sqrt(rho + z*z); + } else { /* degenerate case; avoid math error */ + *l = 0.0; + if (z == 0.0) + *b = 0.0; + else + *b = (z > 0.0) ? PI/2. : -PI/2.; + *r = fabs(z); + } +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sphcart.c,v $ $Date: 2006/08/28 00:20:27 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/sun.c b/libastro/sun.c new file mode 100644 index 0000000..6d92d5e --- /dev/null +++ b/libastro/sun.c @@ -0,0 +1,44 @@ +#include +#include + +#include "astro.h" +#include "vsop87.h" + +/* given the modified JD, mj, return the true geocentric ecliptic longitude + * of the sun for the mean equinox of the date, *lsn, in radians, the + * sun-earth distance, *rsn, in AU, and the latitude *bsn, in radians + * (since this is always <= 1.2 arcseconds, in can be neglected by + * calling with bsn = NULL). + * + * if the APPARENT ecliptic longitude is required, correct the longitude for + * nutation to the true equinox of date and for aberration (light travel time, + * approximately -9.27e7/186000/(3600*24*365)*2*pi = -9.93e-5 radians). + */ +void +sunpos (double mj, double *lsn, double *rsn, double *bsn) +{ + static double last_mj = -3691, last_lsn, last_rsn, last_bsn; + double ret[6]; + + if (mj == last_mj) { + *lsn = last_lsn; + *rsn = last_rsn; + if (bsn) *bsn = last_bsn; + return; + } + + vsop87(mj, SUN, 0.0, ret); /* full precision earth pos */ + + *lsn = ret[0] - PI; /* revert to sun pos */ + range (lsn, 2*PI); /* normalise */ + + last_lsn = *lsn; /* memorise */ + last_rsn = *rsn = ret[2]; + last_bsn = -ret[1]; + last_mj = mj; + + if (bsn) *bsn = last_bsn; /* assign only if non-NULL pointer */ +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: sun.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/thetag.c b/libastro/thetag.c new file mode 100644 index 0000000..36a96a7 --- /dev/null +++ b/libastro/thetag.c @@ -0,0 +1,90 @@ +#include + +#include "deepconst.h" + +/* @(#) $Id: thetag.c,v 1.3 2000/10/07 05:12:17 ecdowney Exp $ */ + + +/* + * FUNCTION THETAG(EP) + * COMMON /E1/XMO,XNODEO,OMEGAO,EO,XINCL,XNO,XNDT2O,XNDD6O,BSTAR, + * 1 X,Y,Z,XDOT,YDOT,ZDOT,EPOCH,DS50 + * DOUBLE PRECISION EPOCH,D,THETA,TWOPI,YR,TEMP,EP,DS50 + * TWOPI=6.28318530717959D0 + * YR=(EP+2.D-7)*1.D-3 + * JY=YR + * YR=JY + * D=EP-YR*1.D3 + * IF(JY.LT.10) JY=JY+80 + * N=(JY-69)/4 + * IF(JY.LT.70) N=(JY-72)/4 + * DS50=7305.D0 + 365.D0*(JY-70) +N + D + * THETA=1.72944494D0 + 6.3003880987D0*DS50 + * TEMP=THETA/TWOPI + * I=TEMP + * TEMP=I + * THETAG=THETA-TEMP*TWOPI + * IF(THETAG.LT.0.D0) THETAG=THETAG+TWOPI + * RETURN + * END + */ + +/* FUNCTION THETAG(EP) */ +double +thetag(double EP, double *DS50) +{ + int JY, N, I; + double YR, D, THETA, TEMP, THETAG; + + YR = (EP + 2.0E-7) * 1.0E-3; + + JY = (int) YR; + + YR = JY; + + D = EP - YR * 1.0E3; + + if(JY < 10) + JY += 80; + + N = (JY - 69) / 4; + + if(JY < 70) + N = (JY - 72) / 4; + +/* printf("N = %d\n", N); */ + + *DS50 = 7305.0 + 365.0 * (JY-70) + N + D; + +/* printf("DS50 = %f\n", *DS50); */ + + THETA = 1.72944494 + 6.3003880987 * *DS50; + +/* printf("THETA = %f\n", THETA); */ + + TEMP = THETA / TWOPI; + + I = (int)TEMP; + TEMP = I; + + THETAG = THETA - TEMP * TWOPI; + + if(THETAG < 0.0) + THETAG += TWOPI; + + return THETAG; +} + +#if 0 +void main(int argc, char **argv) { + double ds50, gwa; + + if(argc >= 2) { + gwa = thetag(atof(argv[1]), &ds50); + printf("%f, %f\n", gwa, ds50); + } +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: thetag.c,v $ $Date: 2000/10/07 05:12:17 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/twobody.c b/libastro/twobody.c new file mode 100644 index 0000000..086bc57 --- /dev/null +++ b/libastro/twobody.c @@ -0,0 +1,243 @@ +/* + * + * TWOBODY.C + * + * Computation of planetary position, two-body computation + * + * Paul Schlyter, 1987-06-15 + * + * Decreased EPSILON from 2E-4 to 3E-8, 1988-12-05 + * + * 1990-01-01: Bug fix in almost parabolic orbits: now the routine + * doesn't bomb there (an if block was too large) + * + * 2000-12-06: Donated to Elwood Downey if he wants to use it in XEphem + */ + + +#include +#include +#include + + +/* Constants used when solving Kepler's equation */ +#undef EPSILON +#define EPSILON 3E-8 +#undef INFINITY +#define INFINITY 1E+10 + +/* Math constants */ +#undef PI +#define PI 3.14159265358979323846 +#define RADEG ( 180.0 / PI ) +#define DEGRAD ( PI / 180.0 ) + +/* Trig functions in degrees */ +#define sind(x) sin(x*DEGRAD) +#define cosd(x) cos(x*DEGRAD) +#define atand(x) (RADEG*atan(x)) +#define atan2d(y,x) (RADEG*atan2(y,x)) + +/* Gauss' grav.-konstant */ +#define K 1.720209895E-2 +#define KD ( K * 180.0 / PI ) +#define K2 ( K / 2.0 ) + + + + +static double cubroot( double x ) +/* Cubic root */ +{ + double a,b; + + if ( x == 0.0 ) + return 0.0; + else + { + a = fabs(x); + b = exp( log(a) / 3.0 ); + return x > 0.0 ? b : -b; + } +} /* cubroot */ + + +static double rev180( double ang ) +/* Normalize angle to between +180 and -180 degrees */ +{ + return ang - 360.0 * floor(ang*(1.0/360.0) + 0.5); +} /* rev180 */ + + + +static double kepler( double m, double ex ) +/* + * Solves Kepler's equation + * m = mean anomaly + * ex = eccentricity + * kepler = eccentric anomaly + */ +{ + double m1, sinm, cosm, exd, exan, dexan, lim1, adko, adk, denom; + int converged; + + m1 = rev180(m); + sinm = sind(m1); + cosm = cosd(m1); + /* 1st approximation: */ + exan = atan2d(sinm,cosm-ex); + if ( ex > 0.008 ) + { /* Iteration formula: */ + exd = ex * RADEG; + lim1 = 1E-3 / ex; + adko = INFINITY; + denom = 1.0 - ex * cosd(exan); + do + { + dexan = (m1 + exd * sind(exan) - exan) / denom; + exan = exan + dexan; + adk = fabs(dexan); + converged = adk < EPSILON || adk >= adko ; + adko = adk; + if ( !converged && adk > lim1 ) + denom = 1.0 - ex * cosd(exan); + } while ( !converged ); + } + return exan; +} /* kepler */ + + +static void vr( double *v, double *r, double m, double e, double a ) +/* + * Elliptic orbits only: + * computes: v = true anomaly (degrees) + * r = radius vector (a.u.) + * from: m = mean anomaly (degrees) + * e = eccentricity + * a = semimajor axis (a.u.) + */ +{ + double ean, x, y; + + ean = kepler(m,e); + x = a*(cosd(ean)-e); + y = a*sqrt(1.-e*e)*sind(ean); + *r = sqrt(x*x+y*y); + *v = atan2d(y,x); +} /* vr */ + + +/* return 0 if ok, else -1 */ +int vrc( double *v, double *r, double tp, double e, double q ) +/* + * Elliptic, hyperbolic and near-parabolic orbits: + * computes: v = true anomaly (degrees) + * r = radius vector (a.u.) + * from: tp = time from perihelion (days) + * e = eccentricity + * q = perihelion distance (a.u.) + */ +{ + + double lambda; + + double a, b, w, w2, w4, c, c1, c2, c3, c5, a0, a1, a2, + a3, m, n, g, adgg, adgg2, gs, dg; + + if ( tp == 0.0 ) /* In perihelion */ + { + *v = 0.0; + *r = q; + return 0; + } + + + lambda = (1.0-e) / (1.0+e); + + if ( fabs(lambda) < 0.01 ) + { /* Near-parabolic orbits */ + a = K2 * sqrt((1.0+e)/(q*q*q)) * tp; + b = sqrt( 1.0 + 2.25*a*a ); + w = cubroot( b + 1.5*a ) - cubroot( b - 1.5*a ); + + /* Test if it's accuate enough to compute this as a near-parabolic orbit */ + if ( fabs(w*w*lambda) > 0.2 ) + { + if ( fabs(lambda) < 0.0002 ) + { + /* Sorry, but we cannot compute this at all -- we must give up! + * + * This happens very rarely, in orbits having an eccentricity + * some 2% away from 1.0 AND if the body is very very far from + * perihelion. E.g. a Kreutz sun-grazing comet having + * eccentricity near 0.98 or 1.02, and being outside + * the orbit of Pluto. For any reasonable orbit this will + * never happen in practice. + * + * You might want to code a more graceful error exit here though. + * + */ + printf( "\nNear-parabolic orbit: inaccurate result." + "\n e = %f, lambda = %f, w = %f", e, lambda, w ); + return -1; + } + else + { + /* We cannot compute this as a near-parabolic orbit, so let's + compute it as an elliptic or hyperbolic orbit instead. */ + goto ellipse_hyperbola; + } + } + + /* Go ahead computing the near-parabolic case */ + c = 1.0 + 1.0 / (w*w); + c1 = 1.0 / c; + c2 = c1*c1; + c3 = c1*c2; + c5 = c3*c2; + w2 = w*w; + w4 = w2*w2; + a0 = w; + a1 = 2.0 * w * (0.33333333 + 0.2*w2) * c1; + a2 = 0.2 * w * (7.0 + 0.14285714 * (33.0*w2+7.4*w4)) * c3; + a3 = 0.022857143 * (108.0 + 37.177777*w2 + 5.1111111*w4) * c5; + w = (( lambda * a3 + a2 ) * lambda + a1 ) * lambda + a0; + w2 = w*w; + *v = 2.0 * atand(w); + *r = q * (1+w2) / ( 1.0 + w2*lambda ); + return 0; /* Near-parabolic orbit */ + } + + +ellipse_hyperbola: + + if ( lambda > 0.0 ) + { /* Elliptic orbit: */ + a = q / (1.0-e); /* Semi-major axis */ + m = KD * tp / sqrt(a*a*a); /* Mean Anomaly */ + vr( v, r, m, e, a ); /* Solve Kepler's equation, etc */ + } + else + { /* Hyperbolic orbit: */ + a = q / (e-1.0); /* Semi-major axis */ + n = K * tp / sqrt(a*a*a); /* "Daily motion" */ + g = n/e; + adgg = INFINITY; + do + { + adgg2 = adgg; + gs = sqrt(g*g+1.0); + dg = -( e*g - log(g+gs) - n ) / ( e - 1.0/gs ); + g = g + dg; + adgg = fabs(dg/g); + } while ( adgg < adgg2 && adgg > 1E-5 ); + gs = sqrt(g*g+1.0); + *v = 2.0 * atand( sqrt( (e+1.0)/(e-1.0) ) * g / (gs+1.0) ); + *r = q * (1.0+e) / ( 1.0 + e*cosd(*v) ); + } + return 0; + +} /* vrc */ + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: twobody.c,v $ $Date: 2004/04/20 04:17:08 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/umoon.c b/libastro/umoon.c new file mode 100644 index 0000000..7b0c982 --- /dev/null +++ b/libastro/umoon.c @@ -0,0 +1,270 @@ +/* uranus moon info */ + +#include +#include +#include +#include +#include + +#include "astro.h" +#include "bdl.h" + +static int use_bdl (double jd, char *dir, MoonData md[U_NMOONS]); +static void moonradec (double usize, MoonData md[U_NMOONS]); +static void moonSVis (Obj *sop, Obj *uop, MoonData md[U_NMOONS]); +static void moonEVis (MoonData md[U_NMOONS]); +static void moonPShad (Obj *sop, Obj *uop, MoonData md[U_NMOONS]); +static void moonTrans (MoonData md[U_NMOONS]); + +/* moon table and a few other goodies and when it was last computed */ +static double mdmjd = -123456; +static MoonData umd[U_NMOONS] = { + {"Uranus", NULL}, + {"Ariel", "I"}, + {"Umbriel", "II"}, + {"Titania", "III"}, + {"Oberon", "IV"}, + {"Miranda", "V"}, +}; +static double sizemjd; /* size at last mjd */ + +/* These values are from the Explanatory Supplement. + * Precession degrades them gradually over time. + */ +#define POLE_RA degrad(257.43) /* RA of Uranus' north pole */ +#define POLE_DEC degrad(-15.10) /* Dec of Uranus' north pole */ + + +/* get uranus info in md[0], moon info in md[1..U_NMOONS-1]. + * if !uop caller just wants md[] for names + * N.B. we assume sop and uop are updated. + */ +void +uranus_data ( +double Mjd, /* mjd */ +char dir[], /* dir in which to look for helper files */ +Obj *sop, /* Sun */ +Obj *uop, /* uranus */ +double *sizep, /* u angular diam, rads */ +double *polera, double *poledec, /* pole location */ +MoonData md[U_NMOONS]) /* return info */ +{ + double JD; + + /* always copy back at least for name */ + memcpy (md, umd, sizeof(umd)); + + /* pole */ + if (polera) *polera = POLE_RA; + if (poledec) *poledec = POLE_DEC; + + /* nothing else if repeat call or just want names */ + if (Mjd == mdmjd || !uop) { + if (uop) { + *sizep = sizemjd; + } + return; + } + JD = Mjd + MJD0; + + /* planet in [0] */ + md[0].ra = uop->s_ra; + md[0].dec = uop->s_dec; + md[0].mag = get_mag(uop); + md[0].x = 0; + md[0].y = 0; + md[0].z = 0; + md[0].evis = 1; + md[0].svis = 1; + + /* size is straight from uop */ + *sizep = degrad(uop->s_size/3600.0); + + /* from Pasachoff/Menzel */ + + md[1].mag = 14.2; + md[2].mag = 14.8; + md[3].mag = 13.7; + md[4].mag = 14.0; + md[5].mag = 16.3; + + /* get moon x,y,z from BDL if possible */ + if (!dir || use_bdl (JD, dir, md) < 0) { + int i; + for (i = 1; i < U_NMOONS; i++) + md[i].x = md[i].y = md[i].z = 0.0; + fprintf (stderr, "No uranus model available\n"); + } + + /* set visibilities */ + moonSVis (sop, uop, md); + moonPShad (sop, uop, md); + moonEVis (md); + moonTrans (md); + + /* fill in moon ra and dec */ + moonradec (*sizep, md); + + /* save */ + mdmjd = Mjd; + sizemjd = *sizep; + memcpy (umd, md, sizeof(umd)); +} + +/* hunt for BDL file in dir[] and use if possible + * return 0 if ok, else -1 + */ +static int +use_bdl ( +double JD, /* julian date */ +char dir[], /* directory */ +MoonData md[U_NMOONS]) /* fill md[1..NM-1].x/y/z for each moon */ +{ +#define URAU .0001597 /* Uranus radius, AU */ + double x[U_NMOONS], y[U_NMOONS], z[U_NMOONS]; + char buf[1024]; + FILE *fp; + char *fn; + int i; + + /* check ranges and appropriate data file */ + if (JD < 2451179.50000) /* Jan 1 1999 UTC */ + return (-1); + if (JD < 2455562.5) /* Jan 1 2011 UTC */ + fn = "uranus.9910"; + else if (JD < 2459215.5) /* Jan 1 2021 UTC */ + fn = "uranus.1020"; + else + return (-1); + + /* open */ + (void) sprintf (buf, "%s/%s", dir, fn); + fp = fopen (buf, "r"); + if (!fp) { + fprintf (stderr, "%s: %s\n", fn, strerror(errno)); + return (-1); + } + + /* use it */ + if ((i = read_bdl (fp, JD, x, y, z, buf)) < 0) { + fprintf (stderr, "%s: %s\n", fn, buf); + fclose (fp); + return (-1); + } + if (i != U_NMOONS-1) { + fprintf (stderr, "%s: BDL says %d moons, code expects %d", fn, + i, U_NMOONS-1); + fclose (fp); + return (-1); + } + + /* copy into md[1..NM-1] with our scale and sign conventions */ + for (i = 1; i < U_NMOONS; i++) { + md[i].x = x[i-1]/URAU; /* we want u radii +E */ + md[i].y = -y[i-1]/URAU; /* we want u radii +S */ + md[i].z = -z[i-1]/URAU; /* we want u radii +front */ + } + + /* ok */ + fclose (fp); + return (0); +} + +/* given uranus loc in md[0].ra/dec and size, and location of each moon in + * md[1..NM-1].x/y in ura radii, find ra/dec of each moon in md[1..NM-1].ra/dec. + */ +static void +moonradec ( +double usize, /* ura diameter, rads */ +MoonData md[U_NMOONS]) /* fill in RA and Dec */ +{ + double urad = usize/2; + double ura = md[0].ra; + double udec = md[0].dec; + int i; + + for (i = 1; i < U_NMOONS; i++) { + double dra = urad * md[i].x; + double ddec = urad * md[i].y; + md[i].ra = ura + dra; + md[i].dec = udec - ddec; + } +} + +/* set svis according to whether moon is in sun light */ +static void +moonSVis( +Obj *sop, /* SUN */ +Obj *uop, /* uranus */ +MoonData md[U_NMOONS]) +{ + double esd = sop->s_edist; + double eod = uop->s_edist; + double sod = uop->s_sdist; + double soa = degrad(uop->s_elong); + double esa = asin(esd*sin(soa)/sod); + double h = sod*uop->s_hlat; + double nod = h*(1./eod - 1./sod); + double sca = cos(esa), ssa = sin(esa); + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + double xp = sca*mdp->x + ssa*mdp->z; + double yp = mdp->y; + double zp = -ssa*mdp->x + sca*mdp->z; + double ca = cos(nod), sa = sin(nod); + double xpp = xp; + double ypp = ca*yp - sa*zp; + double zpp = sa*yp + ca*zp; + int outside = xpp*xpp + ypp*ypp > 1.0; + int infront = zpp > 0.0; + mdp->svis = outside || infront; + } +} + +/* set evis according to whether moon is geometrically visible from earth */ +static void +moonEVis (MoonData md[U_NMOONS]) +{ + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + int outside = mdp->x*mdp->x + mdp->y*mdp->y > 1.0; + int infront = mdp->z > 0.0; + mdp->evis = outside || infront; + } +} + +/* set pshad and sx,sy shadow info */ +static void +moonPShad( +Obj *sop, /* SUN */ +Obj *uop, /* uranus */ +MoonData md[U_NMOONS]) +{ + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->pshad = !plshadow (uop, sop, POLE_RA, POLE_DEC, mdp->x, + mdp->y, mdp->z, &mdp->sx, &mdp->sy); + } +} + +/* set whether moons are transiting */ +static void +moonTrans (MoonData md[U_NMOONS]) +{ + int i; + + for (i = 1; i < U_NMOONS; i++) { + MoonData *mdp = &md[i]; + mdp->trans = mdp->z > 0 && mdp->x*mdp->x + mdp->y*mdp->y < 1; + } +} + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: umoon.c,v $ $Date: 2006/08/29 03:16:47 $ $Revision: 1.10 $ $Name: $"}; diff --git a/libastro/utc_gst.c b/libastro/utc_gst.c new file mode 100644 index 0000000..bc4d3bb --- /dev/null +++ b/libastro/utc_gst.c @@ -0,0 +1,95 @@ +#include "astro.h" + +static double gmst0 (double mj); + +/* given a modified julian date, mj, and a universally coordinated time, utc, + * return greenwich mean siderial time, *gst. + * N.B. mj must be at the beginning of the day. + */ +void +utc_gst (double mj, double utc, double *gst) +{ + static double lastmj = -18981; + static double t0; + + if (mj != lastmj) { + t0 = gmst0(mj); + lastmj = mj; + } + *gst = (1.0/SIDRATE)*utc + t0; + range (gst, 24.0); +} + +/* given a modified julian date, mj, and a greenwich mean siderial time, gst, + * return universally coordinated time, *utc. + * N.B. mj must be at the beginning of the day. + */ +void +gst_utc (double mj, double gst, double *utc) +{ + static double lastmj = -10000; + static double t0; + + if (mj != lastmj) { + t0 = gmst0 (mj); + lastmj = mj; + } + *utc = gst - t0; + range (utc, 24.0); + *utc *= SIDRATE; +} + +/* gmst0() - return Greenwich Mean Sidereal Time at 0h UT; stern + */ +static double +gmst0 ( +double mj) /* date at 0h UT in julian days since MJD0 */ +{ + double T, x; + + T = ((int)(mj - 0.5) + 0.5 - J2000)/36525.0; + x = 24110.54841 + + (8640184.812866 + (0.093104 - 6.2e-6 * T) * T) * T; + x /= 3600.0; + range(&x, 24.0); + return (x); +} + +#ifdef TEST_GMST + +/* original routine by elwood; has a secular drift of 0.08s/cty */ +static double +tnaught (mj) +double mj; /* julian days since 1900 jan 0.5 */ +{ + double dmj; + int m, y; + double d; + double t, t0; + + mjd_cal (mj, &m, &d, &y); + cal_mjd (1, 0., y, &dmj); + t = dmj/36525; + t0 = 6.57098e-2 * (mj - dmj) - + (24 - (6.6460656 + (5.1262e-2 + (t * 2.581e-5))*t) - + (2400 * (t - (((double)y - 1900)/100)))); + range(&t0, 24.0); + return (t0); +} + +#include +main(argc, argv) + int argc; + char *argv[]; +{ + double mj, gst; + while (scanf("%lf", &mj) == 1) { + mj -= MJD0; + gst = tnaught(mj); + printf("%17.9f %10.7f %10.7f\n", mj + MJD0, gst, gmst0(mj)); + } +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: utc_gst.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libastro/vector.h b/libastro/vector.h new file mode 100644 index 0000000..be1ec56 --- /dev/null +++ b/libastro/vector.h @@ -0,0 +1,19 @@ +#ifndef __SATVECTOR_H +#define __SATVECTOR_H + +/* $Id: vector.h,v 1.1 2000/09/25 17:21:25 ecdowney Exp $ */ + +#define dotp(A,B) ((A).x*(B).x+(A).y*(B).y+(A).z*(B).z) + +#define crossp(A,B,C) {(C).x=(A).y*(B).z-(A).z*(B).y;(C).y=(A).z*(B).x-(A).x*(B).z;(C).z=(A).x*(B).y-(A).y*(B).x;} + +#define vecabs(V) (sqrt((V).x*(V).x+(V).y*(V).y+(V).z*(V).z)) +#define vecsq(V) ((V).x*(V).x+(V).y*(V).y+(V).z*(V).z) +#define vecsub(A,B,C) {(C).x=(A).x-(B).x;(C).y=(A).y-(B).y;(C).z=(A).z-(B).z;} +#define vecscale(A,k) {(A).x*=(k);(A).y*=(k);(A).z*=(k);} + +#endif /* __SATVECTOR_H */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: vector.h,v $ $Date: 2000/09/25 17:21:25 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libastro/vsop87.c b/libastro/vsop87.c new file mode 100644 index 0000000..57c2c8d --- /dev/null +++ b/libastro/vsop87.c @@ -0,0 +1,209 @@ +/* VSOP87 planetary theory + * + * currently uses version VSOP87D: + * heliocentric spherical, mean ecliptic of date. + * + * calculation of rates (daily changes) is optional; + * see header file for the necessary #define's + * + * rough orientation on calculation time, miliseconds + * on an HP 715/75, all planets Mercury to Neptune, prec=0.0: + * + * terms with rates without rates + * 3598 11 7.1 + * 31577 51 44 + * + * with secular terms for JD 2232395.0 19/12/1399 0h TDB: + * + * FULL PRECISION code (31577 terms), milliseconds + * prec terms rates no rates + * 1e-8 15086 62 36 + * 1e-7 10105 44 25 + * 1e-6 3725 20 13 + * 1e-5 1324 11 7.8 + * 1e-4 443 7.0 6.0 + * 1e-3 139 6.0 5.0 + * + * REDUCED PRECISION code (3598 terms), milliseconds + * prec terms rates no rates + * 1e-7 2463 9.9 5.5 + * 1e-6 1939 8.0 4.5 + * 1e-5 1131 4.9 2.9 + * 1e-4 443 2.2 1.5 + * 1e-3 139 1.0 0.9 + */ + +#include + +#include "astro.h" +#include "vsop87.h" + +#define VSOP_A1000 365250.0 /* days per millenium */ +#define VSOP_MAXALPHA 5 /* max degree of time */ + +/****************************************************************** + * adapted from BdL FORTRAN Code; stern + * + * Reference : Bureau des Longitudes - PBGF9502 + * + * Object : calculate a VSOP87 position for a given time. + * + * Input : + * + * mj modified julian date, counted from J1900.0 + * time scale : dynamical time TDB. + * + * obj object number as in astro.h, NB: not for pluto + * + * prec relative precision + * + * if prec is equal to 0 then the precision is the precision + * p0 of the complete solution VSOP87. + * Mercury p0 = 0.6 10**-8 + * Venus p0 = 2.5 10**-8 + * Earth p0 = 2.5 10**-8 + * Mars p0 = 10.0 10**-8 + * Jupiter p0 = 35.0 10**-8 + * Saturn p0 = 70.0 10**-8 + * Uranus p0 = 8.0 10**-8 + * Neptune p0 = 42.0 10**-8 + * + * if prec is not equal to 0, let us say in between p0 and + * 10**-3, the precision is : + * for the positions : + * - prec*a0 au for the distances. + * - prec rad for the other variables. + * for the velocities : + * - prec*a0 au/day for the distances. + * - prec rad/day for the other variables. + * a0 is the semi-major axis of the body. + * + * Output : + * + * ret[6] array of the results (double). + * + * for spherical coordinates : + * 1: longitude (rd) + * 2: latitude (rd) + * 3: radius (au) + * #if VSOP_GETRATE: + * 4: longitude velocity (rad/day) + * 5: latitude velocity (rad/day) + * 6: radius velocity (au/day) + * + * return: error index (int) + * 0: no error. + * 2: object out of range [MERCURY .. NEPTUNE, SUN] + * 3: precision out of range [0.0 .. 1e-3] + ******************************************************************/ +int +vsop87 (double mj, int obj, double prec, double *ret) +{ + static double (*vx_map[])[3] = { /* data tables */ + vx_mercury, vx_venus, vx_mars, vx_jupiter, + vx_saturn, vx_uranus, vx_neptune, 0, vx_earth, + }; + static int (*vn_map[])[3] = { /* indexes */ + vn_mercury, vn_venus, vn_mars, vn_jupiter, + vn_saturn, vn_uranus, vn_neptune, 0, vn_earth, + }; + static double a0[] = { /* semimajor axes; for precision ctrl only */ + 0.39, 0.72, 1.5, 5.2, 9.6, 19.2, 30.1, 39.5, 1.0, + }; + double (*vx_obj)[3] = vx_map[obj]; /* VSOP87 data and indexes */ + int (*vn_obj)[3] = vn_map[obj]; + + double t[VSOP_MAXALPHA+1]; /* powers of time */ + double t_abs[VSOP_MAXALPHA+1]; /* powers of abs(time) */ + double q; /* aux for precision control */ + int i, cooidx, alpha; /* misc indexes */ + + if (obj == PLUTO || obj > SUN) + return (2); + + if (prec < 0.0 || prec > 1e-3) + return(3); + + /* zero result array */ + for (i = 0; i < 6; ++i) ret[i] = 0.0; + + /* time and its powers */ + t[0] = 1.0; + t[1] = (mj - J2000)/VSOP_A1000; + for (i = 2; i <= VSOP_MAXALPHA; ++i) t[i] = t[i-1] * t[1]; + t_abs[0] = 1.0; + for (i = 1; i <= VSOP_MAXALPHA; ++i) t_abs[i] = fabs(t[i]); + + /* precision control */ + q = -log10(prec + 1e-35) - 2; /* decades below 1e-2 */ + q = VSOP_ASCALE * prec / 10.0 / q; /* reduce threshold progressively + * for higher precision */ + + /* do the term summation; first the spatial dimensions */ + for (cooidx = 0; cooidx < 3; ++cooidx) { + + /* then the powers of time */ + for (alpha = 0; vn_obj[alpha+1][cooidx] ; ++alpha) { + double p, term, termdot; + + /* precision threshold */ + p= alpha ? q/(t_abs[alpha] + alpha*t_abs[alpha-1]*1e-4 + 1e-35) : q; +#if VSOP_SPHERICAL + if (cooidx == 2) /* scale by semimajor axis for radius */ +#endif + p *= a0[obj]; + + term = termdot = 0.0; + for (i = vn_obj[alpha][cooidx]; i < vn_obj[alpha+1][cooidx]; ++i) { + double a, b, c, arg; + + a = vx_obj[i][0]; + if (a < p) continue; /* ignore small terms */ + + b = vx_obj[i][1]; + c = vx_obj[i][2]; + + arg = b + c * t[1]; + term += a * cos(arg); +#if VSOP_GETRATE + termdot += -c * a * sin(arg); +#endif + } + + ret[cooidx] += t[alpha] * term; +#if VSOP_GETRATE + ret[cooidx + 3] += t[alpha] * termdot + + ((alpha > 0) ? alpha * t[alpha - 1] * term : 0.0); +#endif + } /* alpha */ + } /* cooidx */ + + for (i = 0; i < 6; ++i) ret[i] /= VSOP_ASCALE; + +#if VSOP_SPHERICAL + /* reduce longitude to 0..2pi */ + ret[0] -= floor(ret[0]/(2.*PI)) * (2.*PI); +#endif + +#if VSOP_GETRATE + /* convert millenium rate to day rate */ + for (i = 3; i < 6; ++i) ret[i] /= VSOP_A1000; +#endif + +#if VSOP_SPHERICAL + /* reduction from dynamical equinox of VSOP87 to FK5; + */ + if (prec < 5e-7) { /* 5e-7 rad = 0.1 arc seconds */ + double L1, c1, s1; + L1 = ret[0] - degrad(13.97 * t[1] - 0.031 * t[2]); + c1 = cos(L1); s1 = sin(L1); + ret[0] += degrad(-0.09033 + 0.03916 * (c1 + s1) * tan(ret[1]))/3600.0; + ret[1] += degrad(0.03916 * (c1 - s1))/3600.0; + } +#endif + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: vsop87.c,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libastro/vsop87.h b/libastro/vsop87.h new file mode 100644 index 0000000..b5cb958 --- /dev/null +++ b/libastro/vsop87.h @@ -0,0 +1,93 @@ +/* Position of planets mercury to neptune; from: +ftp://ftp.bdl.fr/pub/ephem/planets/vsop87/ +from README: + +========================== =========================== + BUREAU DES LONGITUDES + PLANETARY SOLUTION VSOP87 + 1996, January +========================== =========================== + +These files and programs are associated to : + +Planetary Theories in rectangular and spherical variables: VSOP87 solution. + Bretagnon P., Francou G. + Astron. Astrophys. 202, 309 (1988). + +Theorie du mouvement de l'ensemble des planetes (VSOP82). + Bretagnon P. + Astron. Astrophys. 114, 278 (1982). + +============================================================================== + +Description: + The Planetary solutions VSOP87 (Variations Seculaires des Orbites + Planetaires) are analytical solutions of the motion of the planets in + different versions. The main version VSOP87 consists of the series in + elliptic elements as in the case of VSOP82 solution and the other + versions VSOP87 (A-B-C-D-E) are built in rectangular and spherical + variables. + +Authors' Address: + P. Bretagnon, G. Francou + Bureau des Longitudes, CNRS URA 707 + 77, Avenue Denfert-Rochereau + 75014, Paris, France + Tel : (33) 1 40 51 22 69 (33) 1 40 51 22 60 + Fax : (33) 1 46 33 28 34 + E-mail : pierre@bdl.fr francou@bdl.fr + +Contents: + The main version of VSOP87 is similar to the previous theory VSOP82. + In the both cases the constants of integration have been determined by + fitting to the numerical integration DE200 of the Jet Propulsion + Laboratory. The various versions of VSOP87 are different from one to + another in the type of coordinates and the reference frame. + VSOP87 : heliocentric elliptic variables; equinox and ecliptic J2000. + VSOP87A : heliocentric rectangular variables; equinox and ecliptic J2000. + VSOP87B : heliocentric spherical variables; equinox and ecliptic J2000. + VSOP87C : heliocentric rectangular variables; equinox and ecliptic of date. + VSOP87D : heliocentric spherical variables; equinox and ecliptic of date. + VSOP87E : barycentric rectangular variables; equinox and ecliptic J2000. +... +============================================================================== +User feed-back is encouraged. Unless otherwise specified, send comments and bug +reports to: E-mail : comments@bdl.fr + Fax : (33) 1 46 33 28 34 + Postal mail: Bureau des longitudes + 77 avenue Denfert Rochereau + F-75014 PARIS +============================================================================== + implemented for C: stern +*/ + +#define VSOP_ASCALE 1e8 /* amplitude factor as stored */ + +/* coding flags */ +#define VSOP_SPHERICAL 1 /* version in data.c uses spherical coords */ +#define VSOP_GETRATE 0 /* calculate time derivatives of coordinates */ + +/* data tables */ +extern double vx_mercury[][3]; +extern int vn_mercury[][3]; +extern double vx_venus[][3]; +extern int vn_venus[][3]; +extern double vx_earth[][3]; +extern int vn_earth[][3]; +extern double vx_mars[][3]; +extern int vn_mars[][3]; +extern double vx_jupiter[][3]; +extern int vn_jupiter[][3]; +extern double vx_saturn[][3]; +extern int vn_saturn[][3]; +extern double vx_uranus[][3]; +extern int vn_uranus[][3]; +extern double vx_neptune[][3]; +extern int vn_neptune[][3]; + +extern int vsop87 (double mj, int obj, double prec, double *ret); + + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: vsop87.h,v $ $Date: 2003/03/20 08:51:37 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/libastro/vsop87_data.c b/libastro/vsop87_data.c new file mode 100644 index 0000000..360c386 --- /dev/null +++ b/libastro/vsop87_data.c @@ -0,0 +1,6988 @@ +/* data tables for planetary solution VSOP87 + * + * created by automatic conversion from original distribution files at + * ftp://ftp.bdl.fr/pub/ephem/planets/vsop87/ + * + * Each coordinate is calculated as: + * + * x = Sum{ T^alpha * A * cos( B + C*T ) } + * + * x is the coordinate in rad or a.u. + * T is the VSOP time in Julian Millenia(!) since J2000.0 + * Note: the time argument in VSOP87 theory is equal to TAI + 32.184 s + * + * A (scaled by VSOP_ASCALE), B, C given below for each x and alpha + * run-of-the mill for each planet in one array vx_planet[][3]. + * The block-boundary indices for each spatial dimension are then listed + * in a separate array vn_planet[][3]. + * + * Truncation errors given in comments are from the authors' empirical + * formula: 2*sqrt(number of retained terms)*A[last retained] + */ + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_earth[][3] = { + /* earth l, T^0 */ + { 175347045.7, 0, 0 }, + { 3341656.5, 4.66925680, 6283.07584999 }, + { 34894.3, 4.626102, 12566.151700 }, + { 3417.6, 2.82887, 3.52312 }, + { 3497.1, 2.74412, 5753.38488 }, + { 3135.9, 3.62767, 77713.77147 }, + { 2676.2, 4.41808, 7860.41939 }, + { 2342.7, 6.13516, 3930.20970 }, + { 1273.2, 2.03710, 529.69097 }, + { 1324.3, 0.74246, 11506.76977 }, + { 901.9, 2.0451, 26.2983 }, + { 1199.2, 1.10963, 1577.34354 }, + { 857.2, 3.5085, 398.1490 }, + { 779.8, 1.1788, 5223.6939 }, + { 990.2, 5.2327, 5884.9268 }, + { 753.1, 2.5334, 5507.5532 }, + { 505.3, 4.5829, 18849.2275 }, + { 492.4, 4.2051, 775.5226 }, + { 356.7, 2.9195, 0.0673 }, + { 284.1, 1.8987, 796.2980 }, + { 242.8, 0.3448, 5486.7778 }, + { 317.1, 5.8490, 11790.6291 }, + { 271.0, 0.3149, 10977.0788 }, + { 206.2, 4.8065, 2544.3144 }, + { 205.4, 1.8695, 5573.1428 }, + { 202.3, 2.4577, 6069.7768 }, + { 126.2, 1.0830, 20.7754 }, + { 155.5, 0.8331, 213.2991 }, + { 115.1, 0.6454, 0.9803 }, + { 102.9, 0.6360, 4694.0030 }, + { 101.7, 4.2668, 7.1135 }, + { 99.2, 6.210, 2146.165 }, + { 132.2, 3.4112, 2942.4634 }, + { 97.6, 0.681, 155.420 }, + { 85.1, 1.299, 6275.962 }, + { 74.7, 1.755, 5088.629 }, + { 101.9, 0.9757, 15720.8388 }, + { 84.7, 3.671, 71430.696 }, + { 73.5, 4.679, 801.821 }, + { 73.9, 3.503, 3154.687 }, + { 78.8, 3.037, 12036.461 }, + { 79.6, 1.808, 17260.155 }, + { 85.8, 5.983, 161000.686 }, + { 57.0, 2.784, 6286.599 }, + { 61.1, 1.818, 7084.897 }, + { 69.6, 0.833, 9437.763 }, + { 56.1, 4.387, 14143.495 }, + { 62.4, 3.978, 8827.390 }, + { 51.1, 0.283, 5856.478 }, + { 55.6, 3.470, 6279.553 }, + { 41.0, 5.368, 8429.241 }, + { 51.6, 1.333, 1748.016 }, + { 52.0, 0.189, 12139.554 }, + { 49.0, 0.487, 1194.447 }, + { 39.2, 6.168, 10447.388 }, + { 35.6, 1.776, 6812.767 }, + { 36.8, 6.041, 10213.286 }, + { 36.6, 2.570, 1059.382 }, + { 33.3, 0.593, 17789.846 }, + { 36.0, 1.709, 2352.866 }, + { 40.9, 2.399, 19651.048 }, + { 30.0, 2.740, 1349.867 }, + { 30.4, 0.443, 83996.847 }, + { 23.7, 0.485, 8031.092 }, + { 23.6, 2.065, 3340.612 }, + { 21.1, 4.148, 951.718 }, + { 24.7, 0.215, 3.590 }, + { 25.4, 3.165, 4690.480 }, + { 22.8, 5.222, 4705.732 }, + { 21.4, 1.426, 16730.464 }, + { 21.9, 5.556, 553.569 }, + { 17.5, 4.561, 135.065 }, + { 19.9, 5.222, 12168.003 }, + { 19.9, 5.775, 6309.374 }, + { 20.3, 0.371, 283.859 }, + { 14.4, 4.193, 242.729 }, + { 16.2, 5.988, 11769.854 }, + { 15.1, 4.196, 6256.778 }, + { 19.1, 3.822, 23581.258 }, + { 18.9, 5.386, 149854.400 }, + { 14.3, 3.724, 38.028 }, + { 17.9, 2.215, 13367.973 }, + { 12.1, 2.622, 955.600 }, + { 11.3, 0.177, 4164.312 }, + { 14.0, 4.401, 6681.225 }, + { 13.6, 1.889, 7632.943 }, + { 12.5, 1.131, 5.523 }, + { 10.5, 5.359, 1592.596 }, + { 9.8, 1.00, 11371.70 }, + { 9.2, 4.57, 4292.33 }, + { 10.3, 6.200, 6438.496 }, + { 12.0, 1.004, 632.784 }, + { 10.8, 0.327, 103.093 }, + { 8.4, 4.54, 25132.30 }, + { 10.0, 6.029, 5746.271 }, + { 8.4, 3.30, 7234.79 }, + { 8.0, 5.82, 28.45 }, + { 10.5, 0.939, 11926.254 }, + { 7.7, 3.12, 7238.68 }, + { 9.4, 2.62, 5760.50 }, + { 8.1, 6.11, 4732.03 }, + { 9.2, 0.48, 522.58 }, + { 9.8, 5.24, 27511.47 }, + { 7.9, 1.00, 5643.18 }, + { 8.1, 6.27, 426.60 }, + { 9.0, 5.34, 6386.17 }, + { 8.6, 4.17, 7058.60 }, + { 6.3, 4.72, 6836.65 }, + { 7.6, 3.97, 11499.66 }, + { 7.8, 2.96, 23013.54 }, + { 7.3, 0.61, 11513.88 }, + { 6.5, 5.79, 18073.70 }, + { 7.2, 4.00, 74.78 }, + { 7.3, 4.39, 316.39 }, + { 7.1, 0.32, 263.08 }, + { 6.6, 3.66, 17298.18 }, + { 6.8, 5.91, 90955.55 }, + /* 117 terms retained, 442 terms dropped, error 0.3" */ + + /* earth l, T^1 */ + { 628331966747.5, 0, 0 }, + { 206058.9, 2.6782346, 6283.0758500 }, + { 4303.4, 2.63513, 12566.15170 }, + { 425.3, 1.5905, 3.5231 }, + { 109.0, 2.9662, 1577.3435 }, + { 93.5, 2.592, 18849.228 }, + { 119.3, 5.7956, 26.2983 }, + { 72.1, 1.138, 529.691 }, + { 67.8, 1.875, 398.149 }, + { 67.3, 4.409, 5507.553 }, + { 59.0, 2.888, 5223.694 }, + { 56.0, 2.175, 155.420 }, + { 45.4, 0.398, 796.298 }, + { 36.4, 0.466, 775.523 }, + { 29.0, 2.647, 7.114 }, + { 19.1, 1.846, 5486.778 }, + { 20.8, 5.341, 0.980 }, + { 18.5, 4.969, 213.299 }, + { 16.2, 0.032, 2544.314 }, + { 17.3, 2.991, 6275.962 }, + { 15.8, 1.430, 2146.165 }, + { 14.6, 1.205, 10977.079 }, + { 11.9, 3.258, 5088.629 }, + { 11.5, 2.075, 4694.003 }, + { 9.7, 4.24, 1349.87 }, + { 10.0, 1.303, 6286.599 }, + { 9.5, 2.70, 242.73 }, + { 12.5, 2.834, 1748.016 }, + { 11.8, 5.274, 1194.447 }, + { 8.6, 5.64, 951.72 }, + { 10.6, 0.766, 553.569 }, + { 7.6, 5.30, 2352.87 }, + { 5.8, 1.77, 1059.38 }, + { 6.4, 2.65, 9437.76 }, + { 5.2, 5.66, 71430.70 }, + { 5.3, 0.91, 3154.69 }, + { 6.1, 4.67, 4690.48 }, + { 4.3, 0.24, 6812.77 }, + { 5.0, 1.42, 6438.50 }, + { 4.3, 0.77, 10447.39 }, + { 5.2, 1.85, 801.82 }, + { 3.7, 2.00, 8031.09 }, + { 3.6, 2.43, 14143.50 }, + { 3.4, 3.86, 1592.60 }, + { 3.4, 0.89, 12036.46 }, + { 3.2, 3.19, 4705.73 }, + { 3.2, 0.62, 8429.24 }, + { 4.1, 5.24, 7084.90 }, + { 3.0, 6.07, 4292.33 }, + { 2.9, 2.32, 20.36 }, + { 3.5, 4.80, 6279.55 }, + { 2.9, 1.43, 5746.27 }, + { 2.7, 4.80, 7234.79 }, + { 2.5, 6.22, 6836.65 }, + { 2.7, 0.93, 5760.50 }, + { 3.2, 3.40, 7632.94 }, + { 2.3, 5.00, 17789.85 }, + { 2.1, 3.96, 10213.29 }, + { 2.1, 2.22, 5856.48 }, + { 2.3, 5.67, 11499.66 }, + { 2.1, 5.20, 11513.88 }, + { 1.9, 0.53, 3340.61 }, + { 1.9, 4.74, 83996.85 }, + { 2.1, 2.55, 25132.30 }, + { 1.8, 1.47, 4164.31 }, + { 1.8, 3.02, 5.52 }, + { 2.0, 0.91, 6256.78 }, + { 2.1, 2.27, 522.58 }, + { 1.8, 3.03, 5753.38 }, + { 1.6, 6.12, 5216.58 }, + { 1.6, 4.64, 3.29 }, + /* 71 terms retained, 270 terms dropped, error 0.056"*T */ + + /* earth l, T^2 */ + { 52918.9, 0, 0 }, + { 8719.8, 1.07210, 6283.07585 }, + { 309.1, 0.8673, 12566.1517 }, + { 27.3, 0.053, 3.523 }, + { 16.3, 5.188, 26.298 }, + { 15.8, 3.685, 155.420 }, + { 9.5, 0.76, 18849.23 }, + { 8.9, 2.06, 77713.77 }, + { 7.0, 0.83, 775.52 }, + { 5.1, 4.66, 1577.34 }, + { 4.1, 1.03, 7.11 }, + { 3.5, 5.14, 796.30 }, + { 3.2, 6.05, 5507.55 }, + { 3.0, 1.19, 242.73 }, + { 2.9, 6.12, 529.69 }, + { 3.8, 3.44, 5573.14 }, + { 2.7, 0.31, 398.15 }, + { 2.4, 4.38, 5223.69 }, + { 2.5, 2.28, 553.57 }, + { 2.1, 3.75, 0.98 }, + { 1.7, 0.90, 951.72 }, + { 1.5, 5.76, 1349.87 }, + { 1.2, 2.97, 2146.17 }, + { 1.4, 4.36, 1748.02 }, + { 1.3, 3.72, 1194.45 }, + { 1.3, 2.95, 6438.50 }, + { 1.0, 5.99, 6286.60 }, + { 0.9, 4.80, 5088.63 }, + { 0.8, 3.31, 213.30 }, + { 1.1, 1.27, 161000.69 }, + { 0.8, 3.42, 5486.78 }, + { 1.0, 0.60, 3154.69 }, + { 0.9, 5.23, 7084.90 }, + { 0.6, 1.60, 2544.31 }, + { 0.7, 3.43, 4694.00 }, + { 0.6, 2.48, 10977.08 }, + { 0.7, 6.19, 4690.48 }, + { 0.6, 1.98, 801.82 }, + { 0.5, 1.44, 6836.65 }, + { 0.5, 2.34, 1592.60 }, + { 0.5, 1.31, 4292.33 }, + { 0.4, 0.04, 7234.79 }, + { 0.5, 3.81, 149854.40 }, + { 0.4, 4.94, 7632.94 }, + /* 44 terms retained, 98 terms dropped, error 0.011"*T^2 */ + + /* earth l, T^3 */ + { 289.2, 5.8438, 6283.0758 }, + { 35.0, 0, 0 }, + { 16.8, 5.488, 12566.152 }, + { 3.0, 5.20, 155.42 }, + { 1.3, 4.72, 3.52 }, + { 0.6, 5.97, 242.73 }, + { 0.7, 5.30, 18849.23 }, + { 0.4, 3.79, 553.57 }, + /* 8 terms retained, 14 terms dropped, error 0.005"*T^3 */ + + /* earth l, T^4 */ + { 114.1, 3.1416, 0 }, + { 7.7, 4.13, 6283.08 }, + { 0.8, 3.84, 12566.15 }, + { 0.4, 0.42, 155.42 }, + /* 4 terms retained, 7 terms dropped, error 0.00032"*T^4 */ + + /* earth l, T^5 */ + { 0.9, 3.14, 0 }, + { 0.2, 2.77, 6283.08 }, + { 0.1, 2.01, 155.42 }, + /* 3 terms retained, 2 terms dropped, error 0.00023"*T^5 */ + /* end earth l */ + + /* earth b, T^0 */ + { 279.6, 3.1987, 84334.6616 }, + { 101.6, 5.4225, 5507.5532 }, + { 80.4, 3.880, 5223.694 }, + { 43.8, 3.704, 2352.866 }, + { 31.9, 4.000, 1577.344 }, + { 22.7, 3.985, 1047.747 }, + { 16.4, 3.565, 5856.478 }, + { 18.1, 4.984, 6283.076 }, + { 14.4, 3.703, 9437.763 }, + { 14.3, 3.411, 10213.286 }, + { 11.2, 4.828, 14143.495 }, + { 10.9, 2.086, 6812.767 }, + { 9.7, 3.47, 4694.00 }, + { 10.4, 4.057, 71092.881 }, + { 8.8, 4.44, 5753.38 }, + { 8.4, 4.99, 7084.90 }, + { 6.9, 4.33, 6275.96 }, + { 9.1, 1.14, 6620.89 }, + { 7.2, 3.60, 529.69 }, + { 7.7, 5.55, 167621.58 }, + /* 20 terms retained, 164 terms dropped, error 0.15" */ + + /* earth b, T^1 */ + { 9.0, 3.90, 5507.55 }, + { 6.2, 1.73, 5223.69 }, + { 3.8, 5.24, 2352.87 }, + { 2.8, 2.47, 1577.34 }, + { 1.8, 0.42, 6283.08 }, + /* 5 terms retained, 94 terms dropped, error 0.018"*T */ + + /* earth b, T^2 */ + { 1.7, 1.63, 84334.66 }, + { 0.5, 2.41, 1047.75 }, + /* 2 terms retained, 47 terms dropped, error 0.0035"*T^2 */ + + /* earth b, T^3 */ + /* 0 terms retained, 11 terms dropped, error 4.5e-05"*T^3 */ + + /* earth b, T^4 */ + /* 0 terms retained, 5 terms dropped, error 1.7e-05"*T^4 */ + /* end earth b */ + + /* earth r, T^0 */ + { 100013988.8, 0, 0 }, + { 1670699.6, 3.09846351, 6283.07584999 }, + { 13956.0, 3.055246, 12566.151700 }, + { 3083.7, 5.19847, 77713.77147 }, + { 1628.5, 1.17388, 5753.38488 }, + { 1575.6, 2.84685, 7860.41939 }, + { 924.8, 5.4529, 11506.7698 }, + { 542.4, 4.5641, 3930.2097 }, + { 472.1, 3.6610, 5884.9268 }, + { 328.8, 5.8998, 5223.6939 }, + { 346.0, 0.9637, 5507.5532 }, + { 306.8, 0.2987, 5573.1428 }, + { 174.8, 3.0119, 18849.2275 }, + { 243.2, 4.2735, 11790.6291 }, + { 211.8, 5.8471, 1577.3435 }, + { 185.8, 5.0219, 10977.0788 }, + { 109.8, 5.0551, 5486.7778 }, + { 98.3, 0.887, 6069.777 }, + { 86.5, 5.690, 15720.839 }, + { 85.8, 1.271, 161000.686 }, + { 62.9, 0.922, 529.691 }, + { 57.1, 2.014, 83996.847 }, + { 64.9, 0.273, 17260.155 }, + { 49.4, 3.245, 2544.314 }, + { 55.7, 5.242, 71430.696 }, + { 42.5, 6.011, 6275.962 }, + { 47.0, 2.578, 775.523 }, + { 39.0, 5.361, 4694.003 }, + { 44.7, 5.537, 9437.763 }, + { 35.7, 1.675, 12036.461 }, + { 31.9, 0.184, 5088.629 }, + { 31.8, 1.778, 398.149 }, + { 33.2, 0.244, 7084.897 }, + { 38.2, 2.393, 8827.390 }, + { 28.5, 1.213, 6286.599 }, + { 37.5, 0.830, 19651.048 }, + { 37.0, 4.901, 12139.554 }, + { 34.5, 1.843, 2942.463 }, + { 26.3, 4.589, 10447.388 }, + { 24.6, 3.787, 8429.241 }, + { 23.6, 0.269, 796.298 }, + { 27.8, 1.899, 6279.553 }, + { 23.9, 4.996, 5856.478 }, + { 20.3, 4.653, 2146.165 }, + { 23.3, 2.808, 14143.495 }, + { 22.1, 1.950, 3154.687 }, + { 19.5, 5.382, 2352.866 }, + { 18.0, 0.199, 6812.767 }, + { 17.2, 4.433, 10213.286 }, + { 16.2, 5.232, 17789.846 }, + { 17.3, 6.152, 16730.464 }, + { 13.8, 5.190, 8031.092 }, + { 18.8, 0.673, 149854.400 }, + { 18.3, 2.253, 23581.258 }, + { 13.6, 3.685, 4705.732 }, + { 13.1, 0.653, 13367.973 }, + { 10.4, 4.333, 11769.854 }, + { 10.0, 4.201, 6309.374 }, + { 10.2, 1.594, 4690.480 }, + { 7.6, 2.63, 6256.78 }, + { 9.7, 3.68, 27511.47 }, + { 6.7, 0.56, 3340.61 }, + { 8.7, 6.06, 1748.02 }, + { 7.8, 3.67, 12168.00 }, + { 6.6, 5.66, 11371.70 }, + { 7.7, 0.31, 7632.94 }, + { 6.6, 3.14, 801.82 }, + { 7.5, 5.65, 11926.25 }, + { 6.9, 2.92, 6681.22 }, + { 6.8, 1.42, 23013.54 }, + { 6.5, 2.65, 19804.83 }, + /* 71 terms retained, 455 terms dropped, error 1.1e-06 a.u. */ + + /* earth r, T^1 */ + { 103018.6, 1.1074897, 6283.0758500 }, + { 1721.2, 1.06442, 12566.15170 }, + { 702.2, 3.1416, 0 }, + { 32.3, 1.022, 18849.228 }, + { 30.8, 2.844, 5507.553 }, + { 25.0, 1.319, 5223.694 }, + { 18.5, 1.424, 1577.344 }, + { 10.1, 5.914, 10977.079 }, + { 8.6, 0.27, 5486.78 }, + { 8.7, 1.42, 6275.96 }, + { 5.1, 1.69, 5088.63 }, + { 5.0, 6.01, 6286.60 }, + { 4.7, 5.99, 529.69 }, + { 4.4, 0.52, 4694.00 }, + { 3.9, 4.75, 2544.31 }, + { 3.8, 5.07, 796.30 }, + { 4.1, 1.08, 9437.76 }, + { 3.5, 0.02, 83996.85 }, + { 3.4, 0.95, 71430.70 }, + { 3.2, 6.16, 2146.17 }, + { 3.4, 5.41, 775.52 }, + { 2.9, 5.48, 10447.39 }, + { 2.5, 0.24, 398.15 }, + { 2.2, 4.95, 6812.77 }, + { 2.2, 0.42, 8031.09 }, + { 2.8, 3.42, 2352.87 }, + { 2.6, 6.13, 6438.50 }, + { 1.9, 5.31, 8429.24 }, + { 2.4, 3.09, 4690.48 }, + { 1.7, 1.54, 4705.73 }, + { 2.2, 3.69, 7084.90 }, + { 2.1, 1.28, 1748.02 }, + { 1.8, 3.23, 6279.55 }, + { 1.6, 4.10, 11499.66 }, + { 1.6, 5.54, 3154.69 }, + { 1.8, 1.82, 7632.94 }, + /* 36 terms retained, 256 terms dropped, error 2.2e-07 a.u.*T */ + + /* earth r, T^2 */ + { 4359.4, 5.78455, 6283.07585 }, + { 123.6, 5.5793, 12566.1517 }, + { 12.3, 3.142, 0 }, + { 8.8, 3.63, 77713.77 }, + { 5.7, 1.87, 5573.14 }, + { 3.3, 5.47, 18849.23 }, + { 1.5, 4.48, 5507.55 }, + { 1.0, 2.81, 5223.69 }, + { 0.9, 3.11, 1577.34 }, + { 1.1, 2.84, 161000.69 }, + { 0.6, 5.47, 775.52 }, + { 0.6, 1.38, 6438.50 }, + { 0.5, 4.42, 6286.60 }, + { 0.4, 0.90, 10977.08 }, + { 0.4, 3.20, 5088.63 }, + { 0.5, 3.66, 7084.90 }, + { 0.5, 5.39, 149854.40 }, + /* 17 terms retained, 122 terms dropped, error 3.9e-08 a.u.*T^2 */ + + /* earth r, T^3 */ + { 144.6, 4.2732, 6283.0758 }, + { 6.7, 3.92, 12566.15 }, + { 0.8, 0, 0 }, + { 0.2, 3.73, 18849.23 }, + /* 4 terms retained, 23 terms dropped, error 1.1e-08 a.u.*T^3 */ + + /* earth r, T^4 */ + { 3.9, 2.56, 6283.08 }, + { 0.3, 2.27, 12566.15 }, + { 0.1, 3.44, 5573.14 }, + /* 3 terms retained, 7 terms dropped, error 2.1e-09 a.u.*T^4 */ + + /* earth r, T^5 */ + { 0.1, 1.22, 6283.08 }, + /* 1 terms retained, 2 terms dropped, error 2.4e-09 a.u.*T^5 */ + /* end earth */ +}; + +int vn_earth[][3] = { + /* addresses for earth l, b, r */ + /* T^0 */ { 0, 247, 274, }, + /* T^1 */ { 117, 267, 345, }, + /* T^2 */ { 188, 272, 381, }, + /* T^3 */ { 232, 274, 398, }, + /* T^4 */ { 240, 0, 402, }, + /* T^5 */ { 244, 0, 405, }, + /* end */ { 247, 0, 406, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_jupiter[][3] = { + /* jupiter l, T^0 */ + { 59954691.5, 0, 0 }, + { 9695898.7, 5.06191793, 529.69096509 }, + { 573610.1, 1.4440621, 7.1135470 }, + { 306389.2, 5.4173473, 1059.3819302 }, + { 97178.3, 4.142647, 632.783739 }, + { 72903.1, 3.640429, 522.577418 }, + { 64264.0, 3.411452, 103.092774 }, + { 39806.1, 2.293767, 419.484644 }, + { 38857.8, 1.272317, 316.391870 }, + { 27964.6, 1.784546, 536.804512 }, + { 13589.7, 5.774810, 1589.072895 }, + { 8246.4, 3.58228, 206.18555 }, + { 8768.7, 3.63000, 949.17561 }, + { 7368.1, 5.08101, 735.87651 }, + { 6263.2, 0.02498, 213.29910 }, + { 6114.0, 4.51320, 1162.47470 }, + { 4905.4, 1.32085, 110.20632 }, + { 5305.3, 1.30671, 14.22709 }, + { 5305.5, 4.18625, 1052.26838 }, + { 4647.2, 4.69958, 3.93215 }, + { 3045.0, 4.31676, 426.59819 }, + { 2610.0, 1.56668, 846.08283 }, + { 2028.2, 1.06377, 3.18139 }, + { 1764.8, 2.14148, 1066.49548 }, + { 1723.0, 3.88036, 1265.56748 }, + { 1921.0, 0.97169, 639.89729 }, + { 1633.2, 3.58201, 515.46387 }, + { 1432.0, 4.29684, 625.67019 }, + { 973.3, 4.0976, 95.9792 }, + { 884.4, 2.4370, 412.3711 }, + { 732.9, 6.0853, 838.9693 }, + { 731.1, 3.8059, 1581.9593 }, + { 691.9, 6.1337, 2118.7639 }, + { 709.2, 1.2927, 742.9901 }, + { 614.5, 4.1085, 1478.8666 }, + { 495.2, 3.7557, 323.5054 }, + { 581.9, 4.5397, 309.2783 }, + { 375.7, 4.7030, 1368.6603 }, + { 389.9, 4.8972, 1692.1657 }, + { 341.0, 5.7145, 533.6231 }, + { 330.5, 4.7405, 0.0482 }, + { 440.9, 2.9582, 454.9094 }, + { 417.3, 1.0355, 2.4477 }, + { 244.2, 5.2202, 728.7630 }, + { 261.5, 1.8765, 0.9632 }, + { 256.6, 3.7241, 199.0720 }, + { 261.0, 0.8205, 380.1278 }, + { 220.4, 1.6512, 543.9181 }, + { 202.0, 1.8068, 1375.7738 }, + { 207.3, 1.8546, 525.7588 }, + { 197.0, 5.2925, 1155.3612 }, + { 235.1, 1.2269, 909.8187 }, + { 174.8, 5.9097, 956.2892 }, + { 149.4, 4.3775, 1685.0521 }, + { 175.2, 3.2263, 1898.3512 }, + { 175.2, 3.7297, 942.0621 }, + { 157.9, 4.3648, 1795.2584 }, + { 137.9, 1.3180, 1169.5883 }, + { 117.5, 2.5002, 1596.1864 }, + { 150.5, 3.9063, 74.7816 }, + { 116.8, 3.3892, 0.5213 }, + { 105.9, 4.5544, 526.5096 }, + { 130.5, 4.1687, 1045.1548 }, + { 141.4, 3.1357, 491.5579 }, + { 99.5, 1.421, 532.872 }, + { 96.1, 1.182, 117.320 }, + { 91.8, 0.858, 1272.681 }, + { 87.7, 1.217, 453.425 }, + { 68.5, 2.352, 2.921 }, + { 66.1, 5.344, 1471.753 }, + { 77.4, 4.427, 39.357 }, + { 72.0, 4.238, 2111.650 }, + { 63.4, 4.977, 0.751 }, + { 59.4, 4.111, 2001.444 }, + { 62.5, 0.512, 220.413 }, + { 66.5, 2.989, 2214.743 }, + { 60.2, 4.126, 4.193 }, + { 56.0, 1.155, 21.341 }, + { 52.9, 0.912, 10.295 }, + { 70.3, 5.142, 835.037 }, + { 51.9, 4.100, 1258.454 }, + { 46.4, 4.665, 5.629 }, + { 58.2, 5.866, 5753.385 }, + { 40.1, 4.688, 0.160 }, + { 46.7, 4.794, 305.346 }, + { 39.3, 4.254, 853.196 }, + { 46.0, 5.110, 4.666 }, + { 54.5, 1.571, 983.116 }, + { 38.9, 6.076, 518.645 }, + { 38.4, 2.438, 433.712 }, + { 46.8, 3.546, 5.417 }, + { 41.8, 4.680, 302.165 }, + { 35.9, 2.451, 430.530 }, + { 37.9, 0.211, 2648.455 }, + { 39.2, 1.718, 11.046 }, + { 37.6, 6.195, 831.856 }, + { 35.8, 4.615, 2008.558 }, + { 43.4, 0.150, 528.206 }, + { 31.6, 5.141, 1788.145 }, + { 29.8, 5.344, 2221.857 }, + { 32.8, 5.289, 88.866 }, + { 27.7, 1.852, 0.212 }, + { 25.8, 3.859, 2317.836 }, + { 33.8, 1.006, 9683.595 }, + { 27.1, 2.808, 18.159 }, + { 26.8, 1.776, 532.139 }, + { 26.1, 2.744, 2531.135 }, + { 30.8, 0.423, 1.484 }, + { 30.5, 3.667, 508.350 }, + /* 109 terms retained, 651 terms dropped, error 1.3" */ + + /* jupiter l, T^1 */ + { 52993480757.5, 0, 0 }, + { 489741.2, 4.2206669, 529.6909651 }, + { 228918.5, 6.0264746, 7.1135470 }, + { 27655.4, 4.572660, 1059.381930 }, + { 20720.9, 5.459389, 522.577418 }, + { 12105.7, 0.169858, 536.804512 }, + { 6068.1, 4.42420, 103.09277 }, + { 5433.9, 3.98478, 419.48464 }, + { 4237.8, 5.89009, 14.22709 }, + { 2211.9, 5.26771, 206.18555 }, + { 1295.8, 5.55133, 3.18139 }, + { 1745.9, 4.92669, 1589.07290 }, + { 1163.4, 0.51451, 3.93215 }, + { 1007.2, 0.46478, 735.87651 }, + { 1173.1, 5.85647, 1052.26838 }, + { 847.7, 5.7581, 110.2063 }, + { 827.3, 4.8031, 213.2991 }, + { 1003.6, 3.15040, 426.59819 }, + { 1098.7, 5.30705, 515.46387 }, + { 816.4, 0.5864, 1066.4955 }, + { 725.4, 5.5183, 639.8973 }, + { 567.8, 5.9887, 625.6702 }, + { 474.2, 4.1325, 412.3711 }, + { 412.9, 5.7365, 95.9792 }, + { 335.8, 3.7325, 1162.4747 }, + { 345.2, 4.2416, 632.7837 }, + { 234.1, 6.2430, 309.2783 }, + { 194.8, 2.2188, 323.5054 }, + { 234.3, 4.0347, 949.1756 }, + { 183.9, 6.2796, 543.9181 }, + { 198.5, 1.5046, 838.9693 }, + { 186.9, 6.0862, 742.9901 }, + { 171.4, 5.4166, 199.0720 }, + { 130.8, 0.6264, 728.7630 }, + { 107.6, 4.4928, 956.2892 }, + { 115.4, 0.6802, 846.0828 }, + { 115.0, 5.2864, 2118.7639 }, + { 66.8, 5.734, 21.341 }, + { 69.6, 5.973, 532.872 }, + { 64.9, 6.088, 1581.959 }, + { 79.7, 5.824, 1045.155 }, + { 57.9, 0.995, 1596.186 }, + { 65.6, 0.129, 526.510 }, + { 58.5, 0.586, 1155.361 }, + { 56.6, 1.412, 533.623 }, + { 71.6, 5.342, 942.062 }, + { 57.4, 5.969, 1169.588 }, + { 54.9, 5.428, 10.295 }, + { 52.0, 0.230, 1368.660 }, + { 52.3, 5.727, 117.320 }, + { 50.4, 6.081, 525.759 }, + { 47.4, 3.626, 1478.867 }, + { 39.9, 4.162, 1692.166 }, + { 46.7, 0.511, 1265.567 }, + { 32.8, 5.036, 220.413 }, + { 33.6, 0.099, 302.165 }, + { 29.4, 3.359, 4.666 }, + { 29.3, 0.759, 88.866 }, + { 32.4, 5.375, 508.350 }, + { 29.5, 5.422, 1272.681 }, + { 21.8, 6.151, 1685.052 }, + { 25.2, 1.607, 831.856 }, + { 21.1, 5.863, 1258.454 }, + { 19.7, 2.172, 316.392 }, + { 17.9, 0.828, 433.712 }, + { 17.7, 5.955, 5.417 }, + { 17.2, 2.764, 853.196 }, + { 17.5, 0.707, 1471.753 }, + { 17.5, 0.498, 1375.774 }, + { 14.4, 0.915, 18.159 }, + { 14.1, 0.630, 2.921 }, + { 11.6, 4.304, 405.258 }, + { 11.7, 1.764, 380.128 }, + { 11.1, 5.567, 1574.846 }, + { 10.4, 0.314, 1361.547 }, + { 9.8, 5.90, 519.40 }, + { 9.8, 0.39, 1073.61 }, + { 9.3, 3.22, 1795.26 }, + { 8.9, 0.54, 1788.14 }, + { 8.4, 5.88, 2001.44 }, + { 8.1, 5.10, 1485.98 }, + { 7.7, 5.65, 2648.45 }, + { 6.7, 2.41, 4.19 }, + { 7.3, 6.19, 11.05 }, + { 6.3, 1.36, 1148.25 }, + /* 85 terms retained, 284 terms dropped, error 0.24"*T */ + + /* jupiter l, T^2 */ + { 47233.6, 4.321483, 7.113547 }, + { 30629.1, 2.930214, 529.690965 }, + { 38965.5, 0, 0 }, + { 3189.3, 1.05505, 522.57742 }, + { 2723.4, 3.41412, 1059.38193 }, + { 2729.3, 4.84545, 536.80451 }, + { 1721.1, 4.18734, 14.22709 }, + { 383.3, 5.7679, 419.4846 }, + { 367.5, 6.0551, 103.0928 }, + { 377.5, 0.7605, 515.4639 }, + { 337.4, 3.7864, 3.1814 }, + { 308.2, 0.6936, 206.1855 }, + { 218.4, 3.8139, 1589.0729 }, + { 198.9, 5.3400, 1066.4955 }, + { 197.4, 2.4836, 3.9322 }, + { 146.2, 3.8137, 639.8973 }, + { 155.9, 1.4064, 1052.2684 }, + { 129.6, 5.8374, 412.3711 }, + { 141.9, 1.6344, 426.5982 }, + { 117.3, 1.4144, 625.6702 }, + { 96.7, 4.034, 110.206 }, + { 90.8, 1.106, 95.979 }, + { 78.8, 4.637, 543.918 }, + { 72.4, 2.217, 735.877 }, + { 87.3, 2.522, 632.784 }, + { 56.9, 3.123, 213.299 }, + { 48.6, 1.673, 309.278 }, + { 58.5, 0.832, 199.072 }, + { 40.1, 4.025, 21.341 }, + { 39.8, 0.624, 323.505 }, + { 35.7, 2.326, 728.763 }, + { 25.6, 2.512, 1162.475 }, + { 29.3, 3.608, 10.295 }, + { 23.6, 3.005, 956.289 }, + { 27.8, 3.240, 838.969 }, + { 26.0, 4.501, 742.990 }, + { 25.2, 1.219, 1045.155 }, + { 19.5, 4.290, 532.872 }, + { 17.7, 0.810, 508.350 }, + { 15.4, 5.810, 1596.186 }, + { 17.1, 4.200, 2118.764 }, + { 17.0, 1.834, 526.510 }, + { 14.7, 4.000, 117.320 }, + { 13.6, 1.803, 302.165 }, + { 13.2, 2.519, 88.866 }, + { 12.8, 4.369, 1169.588 }, + { 15.3, 0.682, 942.062 }, + { 11.0, 4.436, 525.759 }, + { 13.9, 5.952, 316.392 }, + { 9.4, 2.18, 1155.36 }, + { 8.8, 3.29, 220.41 }, + { 7.8, 5.76, 846.08 }, + { 7.5, 2.71, 533.62 }, + { 9.7, 1.72, 1581.96 }, + { 8.7, 3.32, 831.86 }, + { 6.3, 0.50, 949.18 }, + { 6.7, 2.18, 1265.57 }, + { 5.4, 6.01, 405.26 }, + { 4.7, 1.41, 1258.45 }, + { 4.4, 3.02, 1692.17 }, + { 4.4, 5.48, 433.71 }, + { 4.3, 5.07, 1073.61 }, + { 4.2, 5.29, 18.16 }, + { 3.9, 1.27, 853.20 }, + { 5.4, 3.65, 1272.68 }, + { 4.4, 2.27, 1368.66 }, + { 3.5, 1.54, 519.40 }, + { 2.7, 2.10, 1478.87 }, + { 2.7, 1.06, 1574.85 }, + { 2.9, 2.05, 1361.55 }, + { 3.1, 0.99, 191.96 }, + { 2.5, 2.37, 1471.75 }, + { 2.2, 2.48, 721.65 }, + { 2.1, 3.71, 1485.98 }, + { 2.0, 1.88, 1685.05 }, + { 2.3, 3.03, 1148.25 }, + { 2.0, 6.17, 330.62 }, + /* 77 terms retained, 114 terms dropped, error 0.074"*T^2 */ + + /* jupiter l, T^3 */ + { 6501.7, 2.59863, 7.11355 }, + { 1356.5, 1.34636, 529.69097 }, + { 470.7, 2.4750, 14.2271 }, + { 417.0, 3.2445, 536.8045 }, + { 352.9, 2.9736, 522.5774 }, + { 154.9, 2.0757, 1059.3819 }, + { 86.8, 2.514, 515.464 }, + { 33.5, 3.826, 1066.495 }, + { 44.4, 0, 0 }, + { 22.6, 2.982, 543.918 }, + { 23.7, 1.277, 412.371 }, + { 28.5, 2.448, 206.186 }, + { 19.8, 2.101, 639.897 }, + { 19.7, 1.403, 419.485 }, + { 18.8, 1.594, 103.093 }, + { 17.0, 2.302, 21.341 }, + { 16.8, 2.598, 1589.073 }, + { 16.2, 3.145, 625.670 }, + { 16.1, 3.360, 1052.268 }, + { 13.4, 2.760, 95.979 }, + { 13.2, 2.539, 199.072 }, + { 12.6, 6.266, 426.598 }, + { 8.6, 2.27, 110.21 }, + { 6.7, 3.43, 309.28 }, + { 8.7, 1.76, 10.29 }, + { 6.5, 4.04, 728.76 }, + { 5.4, 5.25, 323.51 }, + { 5.7, 2.52, 508.35 }, + { 5.4, 2.91, 1045.15 }, + { 4.0, 4.30, 88.87 }, + { 3.9, 3.52, 302.16 }, + { 3.8, 4.09, 735.88 }, + { 3.3, 1.43, 956.29 }, + { 2.8, 4.36, 1596.19 }, + { 2.7, 1.25, 213.30 }, + { 2.6, 2.24, 117.32 }, + { 2.4, 2.90, 742.99 }, + { 2.7, 5.02, 838.97 }, + { 1.9, 2.77, 1169.59 }, + { 2.3, 2.36, 942.06 }, + { 1.5, 1.61, 220.41 }, + { 1.5, 3.09, 2118.76 }, + { 1.9, 5.01, 831.86 }, + { 1.6, 1.40, 405.26 }, + { 1.3, 3.98, 1155.36 }, + { 1.2, 3.46, 1073.61 }, + { 1.0, 3.39, 532.87 }, + { 0.9, 2.70, 191.96 }, + { 0.8, 1.48, 632.78 }, + { 0.8, 1.11, 1162.47 }, + { 0.8, 3.30, 1258.45 }, + { 0.7, 5.90, 853.20 }, + { 0.8, 3.66, 1581.96 }, + { 0.7, 3.75, 433.71 }, + { 0.7, 2.93, 1574.85 }, + { 0.7, 3.53, 525.76 }, + { 0.6, 4.15, 721.65 }, + { 0.6, 4.69, 81.75 }, + { 0.7, 1.96, 1272.68 }, + { 0.5, 1.57, 949.18 }, + { 0.7, 2.02, 526.51 }, + { 0.5, 4.36, 1368.66 }, + { 0.5, 4.96, 1148.25 }, + { 0.5, 4.31, 330.62 }, + { 0.6, 2.28, 551.03 }, + { 0.5, 3.87, 1361.55 }, + { 0.4, 2.95, 1038.04 }, + { 0.4, 4.08, 1471.75 }, + { 0.4, 2.22, 539.99 }, + { 0.4, 4.53, 1464.64 }, + /* 70 terms retained, 39 terms dropped, error 0.014"*T^3 */ + + /* jupiter l, T^4 */ + { 669.5, 0.8528, 7.1135 }, + { 100.0, 0.7426, 14.2271 }, + { 114.0, 3.1416, 0 }, + { 50.0, 1.653, 536.805 }, + { 43.6, 5.820, 529.691 }, + { 31.8, 4.858, 522.577 }, + { 14.7, 4.291, 515.464 }, + { 8.9, 0.71, 1059.38 }, + { 5.0, 1.30, 543.92 }, + { 4.5, 2.32, 1066.50 }, + { 4.3, 0.48, 21.34 }, + { 3.1, 3.00, 412.37 }, + { 2.1, 0.40, 639.90 }, + { 1.8, 4.91, 625.67 }, + { 1.9, 4.26, 199.07 }, + { 1.7, 4.26, 206.19 }, + { 1.4, 5.26, 1052.27 }, + { 1.2, 4.72, 95.98 }, + { 1.1, 1.29, 1589.07 }, + { 1.0, 4.78, 1045.15 }, + { 0.9, 6.06, 88.87 }, + { 0.9, 5.78, 728.76 }, + { 0.9, 4.55, 426.60 }, + { 0.8, 3.40, 419.48 }, + { 0.8, 3.55, 103.09 }, + { 0.7, 0.52, 110.21 }, + { 0.4, 5.23, 302.16 }, + { 0.4, 6.24, 956.29 }, + { 0.4, 5.25, 309.28 }, + { 0.4, 0.60, 117.32 }, + { 0.3, 4.78, 508.35 }, + { 0.3, 3.48, 323.51 }, + { 0.3, 2.96, 1596.19 }, + { 0.3, 4.33, 942.06 }, + { 0.3, 0.48, 831.86 }, + { 0.3, 1.80, 1073.61 }, + { 0.2, 0.44, 220.41 }, + { 0.2, 1.13, 1169.59 }, + { 0.2, 2.16, 1361.55 }, + { 0.2, 3.43, 1148.25 }, + { 0.2, 1.93, 2118.76 }, + { 0.2, 3.03, 1272.68 }, + /* 42 terms retained, 3 terms dropped, error 0.0042"*T^4 */ + + /* jupiter l, T^5 */ + { 49.6, 5.257, 7.114 }, + { 15.8, 5.251, 14.227 }, + { 4.3, 0.01, 536.80 }, + { 1.5, 1.10, 522.58 }, + { 0.7, 5.86, 543.92 }, + { 0.7, 0.87, 515.46 }, + { 0.8, 3.14, 0 }, + { 0.5, 0.82, 1066.50 }, + { 0.3, 5.63, 1059.38 }, + /* 9 terms retained, 1 terms dropped, error 0.0038"*T^5 */ + /* end jupiter l */ + + /* jupiter b, T^0 */ + { 2268615.7, 3.55852607, 529.69096509 }, + { 109971.6, 3.9080935, 1059.3819302 }, + { 110090.4, 0, 0 }, + { 8101.4, 3.60510, 522.57742 }, + { 6044.0, 4.25883, 1589.07290 }, + { 6437.8, 0.30627, 536.80451 }, + { 1106.9, 2.98534, 1162.47470 }, + { 941.7, 2.9362, 1052.2684 }, + { 894.1, 1.7545, 7.1135 }, + { 767.3, 2.1547, 632.7837 }, + { 944.3, 1.6752, 426.5982 }, + { 684.2, 3.6781, 213.2991 }, + { 629.2, 0.6434, 1066.4955 }, + { 835.9, 5.1788, 103.0928 }, + { 531.7, 2.7031, 110.2063 }, + { 558.5, 0.0135, 846.0828 }, + { 464.4, 1.1734, 949.1756 }, + { 431.1, 2.6083, 419.4846 }, + { 351.4, 4.6106, 2118.7639 }, + { 123.1, 3.3497, 1692.1657 }, + { 115.0, 5.0489, 316.3919 }, + { 132.2, 4.7782, 742.9901 }, + { 103.4, 2.3188, 1478.8666 }, + { 116.4, 1.3869, 323.5054 }, + { 102.4, 3.1529, 1581.9593 }, + { 103.8, 3.7010, 515.4639 }, + { 78.7, 3.983, 1265.567 }, + { 69.9, 2.560, 956.289 }, + { 55.6, 0.375, 1375.774 }, + { 52.0, 0.990, 1596.186 }, + { 55.2, 0.402, 525.759 }, + { 63.5, 4.501, 735.877 }, + { 49.7, 0.186, 543.918 }, + { 48.8, 3.573, 533.623 }, + { 28.4, 1.535, 625.670 }, + { 29.2, 5.431, 206.186 }, + /* 36 terms retained, 213 terms dropped, error 0.73" */ + + /* jupiter b, T^1 */ + { 177351.8, 5.7016649, 529.6909651 }, + { 3230.2, 5.77942, 1059.38193 }, + { 3081.4, 5.47464, 522.57742 }, + { 2211.9, 4.73477, 536.80451 }, + { 1694.2, 3.14159, 0 }, + { 346.4, 4.7460, 1052.2684 }, + { 234.3, 5.1886, 1066.4955 }, + { 196.2, 6.1855, 7.1135 }, + { 150.5, 3.9272, 1589.0729 }, + { 114.1, 3.4390, 632.7837 }, + { 96.7, 2.914, 949.176 }, + { 76.6, 2.505, 103.093 }, + { 81.7, 5.077, 1162.475 }, + { 76.6, 0.613, 419.485 }, + { 73.9, 5.500, 515.464 }, + { 49.9, 3.948, 735.877 }, + { 60.5, 5.447, 213.299 }, + { 36.6, 4.698, 543.918 }, + { 46.0, 0.539, 110.206 }, + { 45.1, 1.895, 846.083 }, + { 36.0, 6.110, 316.392 }, + { 32.0, 4.925, 1581.959 }, + { 21.0, 5.630, 1596.186 }, + { 23.2, 5.848, 323.505 }, + { 24.7, 3.941, 2118.764 }, + { 17.3, 5.653, 533.623 }, + { 16.5, 5.898, 526.510 }, + { 16.7, 5.667, 1265.567 }, + { 15.8, 4.433, 1045.155 }, + { 13.4, 4.302, 532.872 }, + { 11.7, 1.810, 956.289 }, + { 11.9, 4.301, 525.759 }, + { 9.5, 2.03, 206.19 }, + { 10.5, 6.155, 14.227 }, + { 8.4, 3.93, 1478.87 }, + { 8.1, 4.20, 1169.59 }, + { 7.7, 2.99, 942.06 }, + { 8.8, 1.56, 426.60 }, + { 8.9, 4.87, 1155.36 }, + { 7.8, 3.85, 625.67 }, + /* 40 terms retained, 101 terms dropped, error 0.21"*T */ + + /* jupiter b, T^2 */ + { 8094.1, 1.46323, 529.69097 }, + { 742.4, 0.9569, 522.5774 }, + { 813.2, 3.1416, 0 }, + { 399.0, 2.8989, 536.8045 }, + { 342.2, 1.4468, 1059.3819 }, + { 73.9, 0.407, 1052.268 }, + { 46.2, 3.480, 1066.495 }, + { 29.3, 0.991, 515.464 }, + { 29.7, 1.925, 1589.073 }, + { 22.8, 4.271, 7.114 }, + { 13.9, 2.922, 543.918 }, + { 12.1, 5.222, 632.784 }, + { 10.7, 4.880, 949.176 }, + { 6.1, 6.21, 1045.15 }, + { 5.9, 0.53, 1581.96 }, + { 5.0, 1.43, 526.51 }, + { 4.6, 0.92, 1162.47 }, + { 4.5, 4.02, 1596.19 }, + { 5.1, 6.03, 735.88 }, + { 3.6, 4.54, 110.21 }, + { 3.4, 1.39, 533.62 }, + { 3.3, 4.40, 14.23 }, + { 3.4, 0.42, 419.48 }, + { 2.9, 2.06, 316.39 }, + { 2.5, 3.98, 323.51 }, + { 3.1, 2.48, 2118.76 }, + { 3.1, 2.40, 532.87 }, + { 2.2, 4.78, 942.06 }, + { 2.1, 3.89, 426.60 }, + { 2.3, 0.37, 1155.36 }, + { 2.0, 3.90, 846.08 }, + { 1.9, 1.20, 103.09 }, + { 1.7, 1.42, 1265.57 }, + { 2.3, 0.88, 213.30 }, + { 1.8, 5.80, 625.67 }, + { 1.7, 2.24, 525.76 }, + /* 36 terms retained, 45 terms dropped, error 0.043"*T^2 */ + + /* jupiter b, T^3 */ + { 251.6, 3.3809, 529.6910 }, + { 121.7, 2.7331, 522.5774 }, + { 48.7, 1.037, 536.805 }, + { 11.0, 2.315, 1052.268 }, + { 8.1, 2.77, 515.46 }, + { 6.2, 1.78, 1066.50 }, + { 7.3, 4.25, 1059.38 }, + { 3.6, 1.13, 543.92 }, + { 2.8, 3.14, 0 }, + { 1.9, 2.29, 7.11 }, + { 1.6, 1.78, 1045.15 }, + { 0.9, 0.45, 632.78 }, + { 0.8, 0.31, 949.18 }, + { 0.7, 2.64, 14.23 }, + { 0.9, 0.33, 1589.07 }, + { 0.7, 2.37, 1581.96 }, + { 0.6, 2.48, 1596.19 }, + { 0.7, 1.53, 735.88 }, + { 0.5, 3.68, 419.48 }, + { 0.5, 0.27, 942.06 }, + { 0.5, 3.18, 526.51 }, + { 0.4, 2.88, 110.21 }, + /* 22 terms retained, 20 terms dropped, error 0.0081"*T^3 */ + + /* jupiter b, T^4 */ + { 15.1, 4.530, 522.577 }, + { 5.4, 4.47, 529.69 }, + { 4.5, 5.44, 536.80 }, + { 3.4, 0, 0 }, + { 1.8, 4.52, 515.46 }, + { 1.3, 4.20, 1052.27 }, + { 0.8, 5.59, 543.92 }, + { 0.5, 0.06, 1066.50 }, + { 0.3, 3.67, 1059.38 }, + { 0.1, 3.56, 1045.15 }, + { 0.1, 5.70, 7.11 }, + { 0.1, 1.17, 14.23 }, + /* 12 terms retained, 0 terms dropped, error 0.0017"*T^4 */ + + /* jupiter b, T^5 */ + { 1.4, 0.09, 522.58 }, + { 0.4, 0.01, 515.46 }, + { 0.3, 3.28, 536.80 }, + { 0.1, 0.34, 529.69 }, + /* 4 terms retained, 1 terms dropped, error 0.0012"*T^5 */ + /* end jupiter b */ + + /* jupiter r, T^0 */ + { 520887429.5, 0, 0 }, + { 25209327.0, 3.491086400, 529.690965095 }, + { 610599.9, 3.8411537, 1059.3819302 }, + { 282029.5, 2.5741988, 632.7837393 }, + { 187647.4, 2.0759038, 522.5774181 }, + { 86792.9, 0.710011, 419.484644 }, + { 72062.9, 0.214657, 536.804512 }, + { 65517.2, 5.979959, 316.391870 }, + { 29134.6, 1.677592, 103.092774 }, + { 30135.3, 2.161321, 949.175609 }, + { 23453.2, 3.540231, 735.876514 }, + { 22283.7, 4.193628, 1589.072895 }, + { 23947.3, 0.274579, 7.113547 }, + { 13032.6, 2.960431, 1162.474704 }, + { 9703.3, 1.90670, 206.18555 }, + { 12749.0, 2.715501, 1052.268383 }, + { 9161.4, 4.41353, 213.29910 }, + { 7894.5, 2.47908, 426.59819 }, + { 7058.0, 2.18185, 1265.56748 }, + { 6137.8, 6.26418, 846.08283 }, + { 5477.1, 5.65729, 639.89729 }, + { 3502.5, 0.56531, 1066.49548 }, + { 4136.9, 2.72220, 625.67019 }, + { 4170.0, 2.01605, 515.46387 }, + { 2500.0, 4.55182, 838.96929 }, + { 2617.0, 2.00994, 1581.95935 }, + { 1911.9, 0.85622, 412.37110 }, + { 2127.6, 6.12751, 742.99006 }, + { 1610.5, 3.08868, 1368.66025 }, + { 1479.5, 2.68026, 1478.86657 }, + { 1230.7, 1.89043, 323.50542 }, + { 1216.8, 1.80172, 110.20632 }, + { 961.1, 4.5488, 2118.7639 }, + { 885.7, 4.1479, 533.6231 }, + { 776.7, 3.6770, 728.7630 }, + { 998.6, 2.8721, 309.2783 }, + { 1015.0, 1.38673, 454.90937 }, + { 727.2, 3.9882, 1155.3612 }, + { 655.3, 2.7907, 1685.0521 }, + { 821.5, 1.5934, 1898.3512 }, + { 620.8, 4.8228, 956.2892 }, + { 654.0, 3.3815, 1692.1657 }, + { 812.0, 5.9409, 909.8187 }, + { 562.1, 0.0810, 543.9181 }, + { 542.2, 0.2836, 525.7588 }, + { 457.9, 0.1272, 1375.7738 }, + { 614.8, 2.2762, 942.0621 }, + { 435.8, 2.6027, 95.9792 }, + { 496.1, 5.5301, 380.1278 }, + { 470.0, 2.8190, 1795.2584 }, + { 445.0, 0.1462, 14.2271 }, + { 290.9, 3.8934, 1471.7530 }, + { 276.6, 2.5224, 2001.4440 }, + { 275.1, 2.9886, 526.5096 }, + { 293.9, 2.0494, 199.0720 }, + { 291.0, 6.0313, 1169.5883 }, + { 338.3, 2.7987, 1045.1548 }, + { 257.5, 6.1340, 532.8724 }, + { 319.0, 1.3480, 2214.7431 }, + { 309.4, 5.3686, 1272.6810 }, + { 345.8, 1.5640, 491.5579 }, + { 303.4, 1.1541, 5753.3849 }, + { 192.3, 0.9200, 1596.1864 }, + { 215.4, 2.6357, 2111.6503 }, + { 200.7, 2.3726, 1258.4539 }, + { 239.0, 3.5740, 835.0371 }, + { 197.1, 5.9286, 453.4249 }, + { 139.4, 3.6396, 1788.1449 }, + { 191.4, 6.2825, 983.1159 }, + { 176.6, 2.5767, 9683.5946 }, + { 123.6, 2.2616, 2317.8359 }, + { 128.2, 4.6659, 831.8557 }, + { 112.4, 0.8560, 433.7117 }, + { 128.8, 1.1057, 2531.1350 }, + { 99.4, 4.503, 518.645 }, + { 93.9, 2.726, 853.196 }, + { 106.5, 5.8146, 220.4126 }, + { 120.2, 2.9516, 3.9322 }, + { 104.0, 2.2222, 74.7816 }, + { 81.7, 3.235, 1361.547 }, + { 112.5, 4.8622, 528.2065 }, + { 79.5, 0.885, 430.530 }, + { 85.8, 2.115, 1574.846 }, + { 85.7, 2.338, 2428.042 }, + { 68.3, 3.357, 2104.537 }, + { 69.6, 3.042, 302.165 }, + { 69.8, 3.224, 305.346 }, + { 69.6, 0.205, 532.139 }, + { 57.0, 2.002, 2634.228 }, + { 77.1, 2.098, 508.350 }, + { 56.7, 3.917, 2221.857 }, + { 58.3, 5.724, 628.852 }, + { 52.5, 4.025, 527.243 }, + { 63.6, 1.100, 1364.728 }, + { 53.6, 0.874, 2847.527 }, + { 59.6, 0.958, 494.266 }, + { 58.0, 3.458, 2008.558 }, + { 41.5, 3.520, 529.739 }, + { 44.7, 1.623, 984.600 }, + { 44.9, 4.901, 2648.455 }, + { 53.2, 1.198, 760.256 }, + { 44.4, 4.426, 1063.314 }, + { 37.6, 2.930, 1677.939 }, + { 41.5, 0.322, 529.643 }, + { 42.9, 0.031, 1439.510 }, + { 46.0, 2.543, 636.716 }, + { 40.2, 4.394, 1148.248 }, + { 38.8, 4.317, 149.563 }, + { 40.3, 2.101, 2744.434 }, + { 48.9, 5.603, 2810.921 }, + { 37.1, 5.078, 1905.465 }, + { 43.9, 1.245, 621.738 }, + { 34.0, 3.094, 2420.929 }, + { 36.8, 0.842, 530.654 }, + { 31.1, 5.358, 1485.980 }, + { 39.3, 4.708, 569.048 }, + { 39.7, 2.462, 355.749 }, + { 31.5, 6.193, 3.181 }, + { 28.4, 2.485, 519.396 }, + { 32.4, 2.733, 604.473 }, + { 27.1, 3.923, 2324.949 }, + { 26.8, 1.750, 2950.620 }, + { 29.0, 1.835, 1891.238 }, + { 26.5, 0.604, 1055.450 }, + { 33.5, 0.761, 643.829 }, + { 26.6, 1.036, 405.258 }, + { 25.5, 3.463, 458.842 }, + { 32.9, 3.186, 528.728 }, + { 25.7, 0.524, 511.532 }, + { 26.0, 1.336, 330.619 }, + /* 130 terms retained, 615 terms dropped, error 6e-06 a.u. */ + + /* jupiter r, T^1 */ + { 1271801.6, 2.64937511, 529.69096509 }, + { 61661.8, 3.000763, 1059.381930 }, + { 53443.6, 3.897176, 522.577418 }, + { 31185.2, 4.882767, 536.804512 }, + { 41390.3, 0, 0 }, + { 11847.2, 2.413296, 419.484644 }, + { 9166.4, 4.75979, 7.11355 }, + { 3175.8, 2.79298, 103.09277 }, + { 3203.4, 5.21083, 735.87651 }, + { 3403.6, 3.34689, 1589.07290 }, + { 2600.0, 3.63435, 206.18555 }, + { 2412.2, 1.46947, 426.59819 }, + { 2806.1, 3.74224, 515.46387 }, + { 2676.6, 4.33053, 1052.26838 }, + { 2100.5, 3.92763, 639.89729 }, + { 1646.2, 5.30954, 1066.49548 }, + { 1641.3, 4.41629, 625.67019 }, + { 1049.9, 3.16114, 213.29910 }, + { 1024.8, 2.55433, 412.37110 }, + { 741.0, 2.1709, 1162.4747 }, + { 806.4, 2.6775, 632.7837 }, + { 676.9, 6.2495, 838.9693 }, + { 468.9, 4.7097, 543.9181 }, + { 444.7, 0.4028, 323.5054 }, + { 567.1, 4.5766, 742.9901 }, + { 415.9, 5.3684, 728.7630 }, + { 484.7, 2.4688, 949.1756 }, + { 337.6, 3.1678, 956.2892 }, + { 401.7, 4.6053, 309.2783 }, + { 347.4, 4.6815, 14.2271 }, + { 260.8, 5.3429, 846.0828 }, + { 220.1, 4.8421, 1368.6603 }, + { 203.2, 5.6000, 1155.3612 }, + { 246.6, 3.9231, 942.0621 }, + { 183.5, 4.2653, 95.9792 }, + { 180.1, 4.4017, 532.8724 }, + { 197.1, 3.7055, 2118.7639 }, + { 196.0, 3.7588, 199.0720 }, + { 200.2, 4.4389, 1045.1548 }, + { 170.2, 4.8465, 526.5096 }, + { 146.3, 6.1296, 533.6231 }, + { 133.5, 1.3225, 110.2063 }, + { 132.1, 4.5119, 525.7588 }, + { 123.9, 2.0429, 1478.8666 }, + { 121.9, 4.4058, 1169.5883 }, + { 115.3, 4.4674, 1581.9593 }, + { 98.5, 5.728, 1596.186 }, + { 91.6, 4.530, 1685.052 }, + { 110.6, 3.6250, 1272.6810 }, + { 80.5, 4.113, 1258.454 }, + { 79.6, 2.719, 1692.166 }, + { 100.2, 5.2469, 1265.5675 }, + { 77.9, 5.567, 1471.753 }, + { 85.8, 0.079, 831.856 }, + { 82.1, 3.808, 508.350 }, + { 55.3, 0.352, 316.392 }, + { 52.3, 5.531, 433.712 }, + { 55.8, 4.751, 302.165 }, + { 50.6, 4.856, 1375.774 }, + { 43.6, 4.944, 1361.547 }, + { 42.2, 1.224, 853.196 }, + { 37.7, 4.268, 2001.444 }, + { 49.4, 4.014, 220.413 }, + { 38.3, 5.330, 1788.145 }, + { 35.6, 1.762, 1795.258 }, + { 36.3, 3.850, 1574.846 }, + { 29.3, 5.166, 3.932 }, + { 25.2, 4.338, 519.396 }, + { 24.8, 2.729, 405.258 }, + { 27.0, 6.097, 1148.248 }, + { 22.6, 0.192, 380.128 }, + { 20.5, 4.329, 3.181 }, + { 19.9, 4.630, 1677.939 }, + { 19.5, 5.106, 1073.609 }, + { 18.4, 3.765, 1485.980 }, + { 18.9, 5.053, 2104.537 }, + { 17.0, 4.018, 2317.836 }, + { 16.7, 5.429, 88.866 }, + { 15.3, 2.927, 2008.558 }, + { 14.5, 3.633, 628.852 }, + { 14.6, 5.508, 721.649 }, + { 13.7, 4.876, 629.602 }, + { 18.5, 6.030, 330.619 }, + { 13.5, 1.385, 518.645 }, + { 15.7, 2.930, 1905.465 }, + { 12.5, 1.586, 2111.650 }, + { 12.3, 3.377, 635.965 }, + { 11.8, 4.085, 2648.455 }, + { 11.2, 4.626, 636.716 }, + { 14.3, 2.742, 2221.857 }, + { 11.2, 3.553, 1891.238 }, + { 13.1, 5.838, 1464.639 }, + { 11.4, 2.576, 511.532 }, + { 10.5, 0.499, 453.425 }, + { 9.7, 4.39, 1994.33 }, + { 10.1, 2.764, 423.417 }, + { 8.6, 5.16, 1056.20 }, + { 9.0, 4.79, 2420.93 }, + { 8.1, 3.73, 2634.23 }, + { 8.1, 1.29, 2428.04 }, + { 8.9, 1.86, 750.10 }, + { 8.9, 4.81, 1062.56 }, + { 8.6, 4.54, 21.34 }, + { 9.5, 4.33, 1802.37 }, + { 6.9, 5.97, 540.74 }, + { 7.3, 4.98, 1699.28 }, + { 7.1, 4.99, 1055.45 }, + { 7.2, 4.98, 1898.35 }, + { 6.5, 1.39, 422.67 }, + { 6.8, 2.91, 2324.95 }, + { 6.5, 4.57, 1038.04 }, + { 7.3, 3.02, 416.30 }, + { 6.6, 5.55, 1781.03 }, + /* 113 terms retained, 268 terms dropped, error 1.4e-06 a.u.*T */ + + /* jupiter r, T^2 */ + { 79644.8, 1.358659, 529.690965 }, + { 8251.6, 5.77774, 522.57742 }, + { 7029.9, 3.27477, 536.80451 }, + { 5314.0, 1.83835, 1059.38193 }, + { 1860.8, 2.97682, 7.11355 }, + { 836.3, 4.1989, 419.4846 }, + { 964.5, 5.4803, 515.4639 }, + { 406.5, 3.7825, 1066.4955 }, + { 426.6, 2.2275, 639.8973 }, + { 377.3, 2.2425, 1589.0729 }, + { 497.9, 3.1416, 0 }, + { 339.0, 6.1269, 625.6702 }, + { 362.9, 5.3676, 206.1855 }, + { 342.0, 6.0992, 1052.2684 }, + { 279.9, 4.2616, 412.3711 }, + { 332.6, 0.0033, 426.5982 }, + { 229.8, 0.7053, 735.8765 }, + { 200.8, 3.0685, 543.9181 }, + { 199.8, 4.4288, 103.0928 }, + { 257.3, 0.9630, 632.7837 }, + { 138.6, 2.9324, 14.2271 }, + { 113.5, 0.7871, 728.7630 }, + { 86.0, 5.144, 323.505 }, + { 94.6, 1.705, 838.969 }, + { 83.5, 0.058, 309.278 }, + { 75.2, 1.605, 956.289 }, + { 70.5, 1.510, 213.299 }, + { 80.3, 2.981, 742.990 }, + { 56.2, 0.955, 1162.475 }, + { 61.6, 6.101, 1045.155 }, + { 66.6, 5.473, 199.072 }, + { 50.1, 2.721, 532.872 }, + { 51.9, 5.584, 942.062 }, + { 39.8, 5.946, 95.979 }, + { 44.5, 5.524, 508.350 }, + { 44.3, 0.271, 526.510 }, + { 29.9, 0.936, 1155.361 }, + { 28.4, 2.878, 525.759 }, + { 26.3, 4.269, 1596.186 }, + { 27.0, 2.806, 1169.588 }, + { 27.5, 2.648, 2118.764 }, + { 22.7, 0.178, 302.165 }, + { 29.3, 1.786, 831.856 }, + { 20.0, 0.043, 949.176 }, + { 19.9, 1.161, 533.623 }, + { 21.7, 1.888, 1272.681 }, + { 17.6, 4.150, 846.083 }, + { 17.1, 5.892, 1258.454 }, + { 21.4, 4.355, 316.392 }, + { 21.3, 0.544, 1265.567 }, + { 19.9, 0.065, 1581.959 }, + { 17.0, 0.534, 1368.660 }, + { 12.8, 3.900, 433.712 }, + { 13.1, 0.795, 110.206 }, + { 11.9, 0.407, 1361.547 }, + { 11.7, 4.444, 405.258 }, + { 12.0, 2.229, 220.413 }, + { 9.6, 6.01, 853.20 }, + { 10.2, 0.995, 1471.753 }, + { 9.0, 1.60, 1692.17 }, + { 8.7, 3.52, 1073.61 }, + { 8.3, 5.60, 1574.85 }, + { 9.0, 6.27, 519.40 }, + { 7.8, 0.65, 1478.87 }, + { 7.8, 0.18, 1685.05 }, + { 7.5, 0.88, 88.87 }, + { 7.3, 0.89, 721.65 }, + { 9.1, 1.51, 1148.25 }, + { 6.1, 2.50, 3.18 }, + { 7.0, 4.44, 330.62 }, + { 5.2, 2.79, 21.34 }, + { 5.1, 2.98, 1375.77 }, + { 4.9, 0.05, 1677.94 }, + { 4.7, 2.28, 1485.98 }, + { 4.7, 0.86, 3.93 }, + { 5.3, 0.85, 1788.14 }, + { 4.2, 0.41, 629.60 }, + { 4.2, 1.61, 635.97 }, + { 3.6, 2.71, 551.03 }, + { 3.3, 0.55, 1795.26 }, + { 4.4, 1.28, 1464.64 }, + { 3.3, 1.19, 1905.46 }, + { 3.2, 6.19, 1038.04 }, + { 3.1, 6.23, 2001.44 }, + { 3.4, 2.45, 539.99 }, + { 3.2, 5.55, 191.96 }, + { 2.6, 3.24, 1062.56 }, + { 2.6, 0.55, 2104.54 }, + { 2.2, 5.33, 1891.24 }, + { 2.7, 4.82, 416.30 }, + { 2.2, 1.72, 628.85 }, + { 2.3, 6.19, 1994.33 }, + { 2.3, 4.28, 963.40 }, + { 2.6, 0.03, 1898.35 }, + { 2.1, 3.33, 1699.28 }, + { 2.5, 2.40, 227.53 }, + { 2.5, 0.07, 750.10 }, + { 2.0, 0.29, 636.72 }, + { 1.9, 0.32, 295.05 }, + { 1.9, 3.44, 647.01 }, + { 1.9, 0.29, 2111.65 }, + { 1.9, 3.14, 611.44 }, + { 2.3, 1.95, 824.74 }, + { 1.9, 4.72, 2125.88 }, + { 2.5, 1.24, 2221.86 }, + { 1.8, 1.60, 2008.56 }, + { 1.6, 5.83, 422.67 }, + { 1.7, 2.32, 440.83 }, + { 1.6, 0.37, 1056.20 }, + { 1.6, 2.42, 10.29 }, + { 1.6, 3.52, 1055.45 }, + { 1.6, 5.76, 117.32 }, + { 1.6, 5.89, 2317.84 }, + { 2.0, 4.62, 423.42 }, + { 2.1, 1.05, 1781.03 }, + { 1.9, 1.12, 618.56 }, + { 1.9, 2.79, 1802.37 }, + { 1.8, 3.01, 2648.45 }, + /* 118 terms retained, 72 terms dropped, error 3.9e-07 a.u.*T^2 */ + + /* jupiter r, T^3 */ + { 3519.3, 6.05801, 529.69097 }, + { 1073.2, 1.67321, 536.80451 }, + { 915.7, 1.4133, 522.5774 }, + { 341.6, 0.5230, 1059.3819 }, + { 254.9, 1.1963, 7.1135 }, + { 221.5, 0.9523, 515.4639 }, + { 69.1, 2.269, 1066.495 }, + { 89.7, 3.142, 0 }, + { 57.8, 1.414, 543.918 }, + { 57.7, 0.526, 639.897 }, + { 51.1, 5.980, 412.371 }, + { 46.9, 1.579, 625.670 }, + { 42.8, 6.117, 419.485 }, + { 37.5, 1.183, 14.227 }, + { 33.8, 1.667, 1052.268 }, + { 31.2, 1.043, 1589.073 }, + { 30.0, 4.632, 426.598 }, + { 33.5, 0.848, 206.186 }, + { 20.8, 2.501, 728.763 }, + { 14.5, 0.960, 508.350 }, + { 13.0, 1.502, 1045.155 }, + { 11.7, 3.555, 323.505 }, + { 12.3, 2.610, 735.877 }, + { 15.0, 0.891, 199.072 }, + { 11.2, 1.790, 309.278 }, + { 10.6, 6.278, 956.289 }, + { 9.8, 6.26, 103.09 }, + { 9.3, 3.45, 838.97 }, + { 6.7, 1.87, 302.16 }, + { 7.4, 1.28, 742.99 }, + { 7.2, 0.92, 942.06 }, + { 5.6, 1.38, 95.98 }, + { 6.8, 3.45, 831.86 }, + { 4.6, 2.83, 1596.19 }, + { 4.0, 1.21, 1169.59 }, + { 3.9, 5.99, 213.30 }, + { 3.6, 6.11, 405.26 }, + { 2.9, 2.33, 1155.36 }, + { 2.4, 1.87, 532.87 }, + { 2.4, 0.43, 220.41 }, + { 2.3, 1.95, 1073.61 }, + { 2.3, 0.09, 632.78 }, + { 2.2, 1.59, 2118.76 }, + { 2.4, 5.97, 1162.47 }, + { 2.1, 1.07, 21.34 }, + { 2.1, 1.51, 1258.45 }, + { 2.5, 0.35, 1272.68 }, + { 2.0, 5.94, 110.21 }, + { 2.0, 2.55, 88.87 }, + { 2.0, 2.16, 433.71 }, + { 2.0, 2.70, 721.65 }, + { 1.7, 4.46, 853.20 }, + { 1.9, 2.26, 1361.55 }, + { 1.7, 1.98, 525.76 }, + { 1.5, 0.12, 949.18 }, + { 2.0, 3.17, 1148.25 }, + { 1.7, 2.71, 330.62 }, + { 1.6, 0.47, 526.51 }, + { 1.2, 3.02, 963.40 }, + { 1.7, 0.44, 533.62 }, + { 1.2, 1.16, 1574.85 }, + { 1.1, 2.55, 846.08 }, + { 1.4, 1.17, 1038.04 }, + { 1.0, 2.70, 519.40 }, + { 1.4, 0.67, 551.03 }, + { 1.0, 4.17, 2627.11 }, + { 1.1, 1.07, 227.53 }, + { 0.9, 2.93, 1368.66 }, + { 0.8, 4.87, 611.44 }, + { 1.1, 1.79, 1581.96 }, + { 0.9, 4.91, 1670.83 }, + { 0.9, 3.69, 824.74 }, + { 0.8, 3.23, 2125.88 }, + { 0.8, 2.39, 2317.84 }, + { 0.9, 0.60, 539.99 }, + { 0.9, 4.52, 750.10 }, + { 0.8, 0.21, 1141.13 }, + { 0.8, 0.94, 191.96 }, + { 0.8, 2.25, 2538.25 }, + { 0.7, 0.67, 440.83 }, + { 0.7, 5.80, 1485.98 }, + { 0.6, 2.48, 1265.57 }, + { 0.6, 6.14, 1279.79 }, + { 0.6, 5.51, 2413.82 }, + { 0.6, 4.41, 1382.89 }, + { 0.6, 2.18, 1062.56 }, + { 0.6, 1.93, 2634.23 }, + { 0.5, 2.05, 295.05 }, + { 0.5, 2.32, 1471.75 }, + { 0.7, 2.27, 1699.28 }, + { 0.5, 1.96, 1677.94 }, + { 0.5, 4.36, 1692.17 }, + { 0.5, 2.50, 2207.63 }, + { 0.5, 5.77, 1478.87 }, + { 0.4, 5.99, 934.95 }, + { 0.4, 2.80, 81.75 }, + { 0.4, 3.94, 316.39 }, + { 0.5, 0.19, 10.29 }, + /* 98 terms retained, 0 terms dropped, error 1e-07 a.u.*T^3 */ + + /* jupiter r, T^4 */ + { 128.6, 0.0842, 536.8045 }, + { 113.5, 4.2486, 529.6910 }, + { 82.7, 3.298, 522.577 }, + { 37.9, 2.733, 515.464 }, + { 26.7, 5.691, 7.114 }, + { 17.6, 5.400, 1059.382 }, + { 12.6, 6.016, 543.918 }, + { 9.3, 0.77, 1066.50 }, + { 8.1, 5.68, 14.23 }, + { 6.3, 5.12, 639.90 }, + { 7.0, 1.43, 412.37 }, + { 5.4, 3.34, 625.67 }, + { 2.9, 3.40, 1052.27 }, + { 2.6, 4.16, 728.76 }, + { 2.6, 2.90, 426.60 }, + { 2.3, 6.22, 1589.07 }, + { 2.1, 3.12, 1045.15 }, + { 1.7, 2.81, 206.19 }, + { 1.8, 2.60, 199.07 }, + { 1.8, 1.89, 419.48 }, + { 1.5, 1.33, 1596.19 }, + { 1.7, 0, 0 }, + { 1.0, 4.42, 956.29 }, + { 1.2, 5.16, 831.86 }, + { 0.9, 3.17, 508.35 }, + { 0.9, 5.79, 1169.59 }, + { 0.9, 1.87, 1148.25 }, + { 1.0, 0.67, 1361.55 }, + { 0.8, 1.48, 1272.68 }, + { 1.0, 5.47, 220.41 }, + { 0.8, 2.42, 117.32 }, + { 0.7, 0.50, 1073.61 }, + { 0.7, 3.53, 302.16 }, + { 0.7, 2.85, 191.96 }, + { 0.8, 2.20, 942.06 }, + { 0.8, 5.31, 551.03 }, + { 0.7, 3.72, 88.87 }, + { 0.5, 1.83, 647.01 }, + { 0.6, 0.86, 330.62 }, + { 0.5, 5.26, 21.34 }, + { 0.6, 3.82, 618.56 }, + { 0.5, 4.44, 110.21 }, + { 0.6, 1.59, 3.18 }, + { 0.6, 1.84, 10.29 }, + { 0.5, 1.53, 405.26 }, + { 0.5, 0.24, 433.71 }, + /* 46 terms retained, 0 terms dropped, error 7.1e-08 a.u.*T^4 */ + + /* jupiter r, T^5 */ + { 11.2, 4.752, 536.805 }, + { 4.3, 5.92, 522.58 }, + { 2.1, 5.57, 515.46 }, + { 1.9, 4.30, 543.92 }, + { 1.9, 3.69, 7.11 }, + { 1.6, 5.49, 1066.50 }, + { 1.6, 4.13, 1059.38 }, + { 1.2, 3.78, 14.23 }, + { 1.0, 4.51, 529.69 }, + /* 9 terms retained, 0 terms dropped, error 6.5e-08 a.u.*T^5 */ + /* end jupiter */ +}; + +int vn_jupiter[][3] = { + /* addresses for jupiter l, b, r */ + /* T^0 */ { 0, 392, 542, }, + /* T^1 */ { 109, 428, 672, }, + /* T^2 */ { 194, 468, 785, }, + /* T^3 */ { 271, 504, 903, }, + /* T^4 */ { 341, 526, 1001, }, + /* T^5 */ { 383, 538, 1047, }, + /* end */ { 392, 542, 1056, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_mars[][3] = { + /* mars l, T^0 */ + { 620347711.6, 0, 0 }, + { 18656368.1, 5.050371003, 3340.612426700 }, + { 1108216.8, 5.40099837, 6681.22485340 }, + { 91798.4, 5.754787, 10021.837280 }, + { 27745.0, 5.970495, 3.523118 }, + { 10610.2, 2.939585, 2281.230497 }, + { 12315.9, 0.849561, 2810.921462 }, + { 8926.8, 4.15698, 0.01725 }, + { 8715.7, 6.11005, 13362.44971 }, + { 6797.6, 0.36462, 398.14900 }, + { 7774.9, 3.33969, 5621.84292 }, + { 3575.1, 1.66187, 2544.31442 }, + { 4161.1, 0.22815, 2942.46342 }, + { 3075.2, 0.85697, 191.44827 }, + { 2628.1, 0.64806, 3337.08931 }, + { 2937.5, 6.07894, 0.06731 }, + { 2389.4, 5.03896, 796.29801 }, + { 2579.8, 0.02997, 3344.13555 }, + { 1528.1, 1.14979, 6151.53389 }, + { 1798.8, 0.65634, 529.69097 }, + { 1264.4, 3.62275, 5092.15196 }, + { 1286.2, 3.06796, 2146.16542 }, + { 1546.4, 2.91580, 1751.53953 }, + { 1024.9, 3.69334, 8962.45535 }, + { 891.6, 0.1829, 16703.0621 }, + { 858.8, 2.4009, 2914.0142 }, + { 832.7, 2.4642, 3340.5952 }, + { 832.7, 4.4950, 3340.6297 }, + { 712.9, 3.6634, 1059.3819 }, + { 748.7, 3.8225, 155.4204 }, + { 723.9, 0.6750, 3738.7614 }, + { 635.6, 2.9218, 8432.7644 }, + { 655.2, 0.4886, 3127.3133 }, + { 550.5, 3.8100, 0.9803 }, + { 552.7, 4.4748, 1748.0164 }, + { 426.0, 0.5537, 6283.0758 }, + { 415.1, 0.4966, 213.2991 }, + { 472.2, 3.6255, 1194.4470 }, + { 306.6, 0.3805, 6684.7480 }, + { 312.1, 0.9985, 6677.7017 }, + { 293.2, 4.2213, 20.7754 }, + { 302.4, 4.4862, 3532.0607 }, + { 274.0, 0.5422, 3340.5451 }, + { 281.1, 5.8816, 1349.8674 }, + { 231.2, 1.2824, 3870.3034 }, + { 283.6, 5.7689, 3149.1642 }, + { 236.1, 5.7550, 3333.4989 }, + { 274.0, 0.1337, 3340.6797 }, + { 299.4, 2.7832, 6254.6267 }, + { 204.2, 2.8213, 1221.8486 }, + { 238.9, 5.3716, 4136.9104 }, + { 188.6, 1.4910, 9492.1463 }, + { 221.2, 3.5047, 382.8965 }, + { 179.2, 1.0056, 951.7184 }, + { 172.1, 0.4394, 5486.7778 }, + { 193.1, 3.3572, 3.5904 }, + { 144.3, 1.4187, 135.0651 }, + { 160.0, 3.9485, 4562.4610 }, + { 174.1, 2.4136, 553.5694 }, + { 131.0, 4.0449, 12303.0678 }, + { 138.2, 4.3015, 7.1135 }, + { 128.1, 1.8067, 5088.6288 }, + { 139.9, 3.3259, 2700.7151 }, + { 128.1, 2.2081, 1592.5960 }, + { 116.9, 3.1281, 7903.0734 }, + { 110.4, 1.0520, 242.7286 }, + { 113.5, 3.7007, 1589.0729 }, + { 100.1, 3.2434, 11773.3768 }, + { 95.6, 0.540, 20043.675 }, + { 98.9, 4.846, 6681.242 }, + { 104.5, 0.7854, 8827.3903 }, + { 84.2, 3.990, 4399.994 }, + { 86.9, 2.202, 11243.686 }, + { 71.4, 2.803, 3185.192 }, + { 72.1, 5.847, 5884.927 }, + { 73.5, 2.184, 8429.241 }, + { 98.9, 2.815, 6681.208 }, + { 68.4, 2.738, 2288.344 }, + { 86.8, 1.021, 7079.374 }, + { 65.3, 2.681, 28.449 }, + { 83.7, 3.203, 4690.480 }, + { 75.0, 0.766, 6467.926 }, + { 69.0, 3.764, 6041.328 }, + { 66.7, 0.736, 3723.509 }, + { 63.3, 4.528, 426.598 }, + { 61.7, 6.168, 2274.117 }, + { 52.3, 0.899, 9623.688 }, + { 55.5, 4.606, 4292.331 }, + { 51.3, 4.148, 3341.593 }, + { 56.6, 5.063, 15.252 }, + { 63.4, 0.913, 3553.912 }, + { 45.8, 0.788, 1990.745 }, + { 48.5, 3.957, 4535.059 }, + { 41.2, 6.020, 3894.182 }, + { 41.9, 3.583, 8031.092 }, + { 56.4, 1.687, 6872.673 }, + { 55.9, 3.463, 263.084 }, + { 51.7, 2.813, 3339.632 }, + { 40.7, 3.138, 9595.239 }, + { 38.1, 0.734, 10025.360 }, + { 39.5, 5.632, 3097.884 }, + { 44.2, 3.195, 5628.956 }, + { 36.7, 2.637, 692.158 }, + { 45.9, 0.287, 5614.729 }, + { 38.4, 5.829, 3191.049 }, + { 38.2, 2.348, 162.467 }, + { 32.6, 0.484, 6681.292 }, + { 37.1, 0.685, 2818.035 }, + { 31.2, 3.982, 20.355 }, + { 32.6, 0.893, 6681.158 }, + { 37.8, 4.155, 2803.808 }, + { 33.6, 6.120, 6489.777 }, + { 29.0, 2.427, 3319.837 }, + { 38.8, 1.352, 10018.314 }, + { 33.1, 1.140, 5.523 }, + { 27.6, 1.597, 7210.916 }, + { 28.7, 5.721, 7477.523 }, + { 34.0, 2.595, 11769.854 }, + { 25.4, 0.521, 10.637 }, + { 26.4, 1.345, 3496.033 }, + { 25.6, 0.250, 522.577 }, + { 27.3, 4.556, 3361.388 }, + { 27.5, 6.084, 6674.111 }, + { 25.5, 3.432, 3443.705 }, + /* 124 terms retained, 1093 terms dropped, error 1.2" */ + + /* mars l, T^1 */ + { 334085627474.3, 0, 0 }, + { 1458227.1, 3.60426054, 3340.61242670 }, + { 164901.3, 3.9263125, 6681.2248534 }, + { 19963.3, 4.265941, 10021.837280 }, + { 3452.4, 4.73210, 3.52312 }, + { 2485.5, 4.61278, 13362.44971 }, + { 841.6, 4.4586, 2281.2305 }, + { 537.6, 5.0159, 398.1490 }, + { 521.0, 4.9942, 3344.1355 }, + { 432.6, 2.5607, 191.4483 }, + { 429.7, 5.3165, 155.4204 }, + { 381.7, 3.5388, 796.2980 }, + { 314.1, 4.9634, 16703.0621 }, + { 282.8, 3.1597, 2544.3144 }, + { 205.7, 4.5689, 2146.1654 }, + { 168.8, 1.3289, 3337.0893 }, + { 157.6, 4.1850, 1751.5395 }, + { 133.7, 2.2333, 0.9803 }, + { 116.6, 2.2135, 1059.3819 }, + { 117.6, 6.0241, 6151.5339 }, + { 113.6, 5.4280, 3738.7614 }, + { 133.6, 5.9742, 1748.0164 }, + { 91.1, 1.096, 1349.867 }, + { 83.3, 5.296, 6684.748 }, + { 113.9, 2.1287, 1194.4470 }, + { 80.8, 4.428, 529.691 }, + { 79.5, 2.249, 8962.455 }, + { 72.5, 5.842, 242.729 }, + { 72.9, 2.502, 951.718 }, + { 71.5, 3.856, 2914.014 }, + { 85.3, 3.909, 553.569 }, + { 67.6, 5.023, 382.897 }, + { 65.1, 1.018, 3340.595 }, + { 65.1, 3.049, 3340.630 }, + { 61.5, 4.152, 3149.164 }, + { 48.5, 4.874, 213.299 }, + { 46.6, 1.315, 3185.192 }, + { 56.5, 3.888, 4136.910 }, + { 47.6, 1.182, 3333.499 }, + { 41.3, 0.714, 1592.596 }, + { 40.1, 5.316, 20043.675 }, + { 40.3, 2.725, 7.114 }, + { 32.9, 5.411, 6283.076 }, + { 28.2, 0.045, 9492.146 }, + { 22.3, 5.885, 3870.303 }, + { 22.4, 5.466, 20.355 }, + { 22.6, 0.838, 3097.884 }, + { 21.4, 5.379, 3340.545 }, + { 23.3, 6.168, 3532.061 }, + { 26.6, 3.890, 1221.849 }, + { 22.8, 1.545, 2274.117 }, + { 20.4, 2.364, 1589.073 }, + { 20.2, 3.364, 5088.629 }, + { 26.6, 5.113, 2700.715 }, + { 19.7, 2.578, 12303.068 }, + { 19.5, 0.492, 6677.702 }, + { 21.1, 3.525, 15.252 }, + { 21.4, 4.971, 3340.680 }, + { 18.5, 5.579, 1990.745 }, + { 17.8, 6.125, 4292.331 }, + { 16.5, 2.603, 3341.593 }, + { 16.6, 1.255, 3894.182 }, + { 19.5, 2.531, 4399.994 }, + { 15.0, 1.035, 2288.344 }, + { 20.0, 4.731, 4690.480 }, + { 15.4, 2.470, 4535.059 }, + { 20.0, 5.787, 7079.374 }, + { 15.3, 2.265, 3723.509 }, + { 14.7, 3.370, 6681.242 }, + { 13.5, 2.123, 5486.778 }, + { 12.9, 5.619, 10025.360 }, + { 12.7, 2.950, 3496.033 }, + { 13.6, 1.977, 5614.729 }, + { 13.0, 1.514, 5628.956 }, + { 14.7, 1.339, 6681.208 }, + { 11.4, 6.234, 135.065 }, + { 13.3, 3.422, 5621.843 }, + { 10.9, 5.282, 2818.035 }, + { 11.8, 3.127, 426.598 }, + { 10.5, 2.736, 2787.043 }, + { 11.1, 5.842, 2803.808 }, + { 11.8, 2.586, 8432.764 }, + { 11.9, 5.476, 3553.912 }, + { 8.5, 1.91, 11773.38 }, + { 9.7, 4.53, 6489.78 }, + { 8.6, 3.16, 162.47 }, + { 11.0, 4.158, 2388.894 }, + { 8.1, 1.61, 2957.72 }, + { 8.8, 4.23, 7477.52 }, + { 8.0, 5.70, 6041.33 }, + { 8.3, 2.18, 23.88 }, + { 7.7, 5.72, 9623.69 }, + { 8.7, 4.44, 5092.15 }, + { 8.4, 3.16, 3347.73 }, + { 6.7, 5.08, 8031.09 }, + { 8.7, 4.33, 3339.63 }, + { 7.4, 6.18, 3583.34 }, + { 6.4, 2.12, 5884.93 }, + /* 98 terms retained, 588 terms dropped, error 0.26"*T */ + + /* mars l, T^2 */ + { 58015.8, 2.049795, 3340.612427 }, + { 54187.6, 0, 0 }, + { 13908.4, 2.457424, 6681.224853 }, + { 2465.1, 2.80000, 10021.83728 }, + { 398.4, 3.1412, 13362.4497 }, + { 222.0, 3.1944, 3.5231 }, + { 121.0, 0.5433, 155.4204 }, + { 61.5, 3.485, 16703.062 }, + { 53.6, 3.542, 3344.136 }, + { 34.3, 6.002, 2281.230 }, + { 31.7, 4.140, 191.448 }, + { 29.8, 1.999, 796.298 }, + { 23.2, 4.334, 242.729 }, + { 21.7, 3.445, 398.149 }, + { 16.0, 6.110, 2146.165 }, + { 20.4, 5.422, 553.569 }, + { 14.9, 6.095, 3185.192 }, + { 16.2, 0.657, 0.980 }, + { 14.3, 2.619, 1349.867 }, + { 14.4, 4.019, 951.718 }, + { 11.9, 3.861, 6684.748 }, + { 15.6, 1.221, 1748.016 }, + { 11.3, 4.718, 2544.314 }, + { 13.4, 0.602, 1194.447 }, + { 10.4, 0.250, 382.897 }, + { 9.5, 0.68, 1059.38 }, + { 9.2, 3.83, 20043.67 }, + { 9.0, 3.88, 3738.76 }, + { 7.5, 5.46, 1751.54 }, + { 6.5, 5.48, 1592.60 }, + { 6.3, 2.34, 3097.88 }, + { 6.9, 2.58, 3149.16 }, + { 5.9, 1.15, 7.11 }, + { 6.7, 2.38, 4136.91 }, + { 4.6, 4.43, 6151.53 }, + { 4.2, 3.69, 5614.73 }, + { 4.8, 2.90, 3333.50 }, + { 4.0, 6.12, 5628.96 }, + { 3.7, 4.07, 1990.75 }, + { 3.6, 2.47, 529.69 }, + { 3.3, 0.68, 8962.46 }, + { 3.3, 2.80, 3894.18 }, + { 3.1, 4.57, 3496.03 }, + { 2.9, 5.41, 2914.01 }, + { 2.9, 1.23, 2787.04 }, + { 2.8, 1.39, 4292.33 }, + { 2.6, 1.04, 3341.59 }, + { 2.9, 3.41, 3337.09 }, + { 2.4, 0.96, 4535.06 }, + { 2.4, 4.85, 9492.15 }, + { 2.6, 5.75, 3340.60 }, + { 2.2, 3.26, 213.30 }, + { 2.6, 1.50, 3340.63 }, + { 2.3, 4.18, 10025.36 }, + { 2.6, 4.68, 3583.34 }, + { 2.6, 2.65, 2388.89 }, + { 1.8, 0.97, 1589.07 }, + { 2.4, 1.05, 4399.99 }, + { 2.4, 4.27, 7079.37 }, + { 2.2, 0.16, 6525.80 }, + { 2.3, 0.01, 4690.48 }, + { 1.6, 4.96, 5088.63 }, + { 1.6, 1.11, 12303.07 }, + { 2.1, 0.48, 2700.72 }, + { 1.6, 4.94, 1221.85 }, + { 1.8, 3.81, 3723.51 }, + { 1.8, 2.52, 2810.92 }, + /* 67 terms retained, 243 terms dropped, error 0.06"*T^2 */ + + /* mars l, T^3 */ + { 1482.4, 0.44435, 3340.61243 }, + { 662.1, 0.8847, 6681.2249 }, + { 188.3, 1.2880, 10021.8373 }, + { 41.5, 1.649, 13362.450 }, + { 22.7, 2.053, 155.420 }, + { 26.0, 0, 0 }, + { 8.0, 2.00, 16703.06 }, + { 10.5, 1.580, 3.523 }, + { 4.9, 2.82, 242.73 }, + { 3.8, 2.02, 3344.14 }, + { 3.2, 4.59, 3185.19 }, + { 3.1, 0.65, 553.57 }, + { 1.7, 5.54, 951.72 }, + { 1.5, 5.72, 191.45 }, + { 1.4, 0.46, 796.30 }, + { 1.4, 2.34, 20043.67 }, + { 1.3, 5.36, 0.98 }, + { 1.2, 4.15, 1349.87 }, + { 1.1, 2.38, 6684.75 }, + { 1.0, 1.77, 382.90 }, + { 0.9, 5.34, 1194.45 }, + { 0.8, 2.75, 1748.02 }, + { 0.6, 6.11, 3496.03 }, + { 0.6, 1.85, 398.15 }, + { 0.6, 5.86, 7.11 }, + { 0.6, 3.18, 3583.34 }, + { 0.5, 5.98, 2787.04 }, + { 0.5, 1.01, 3149.16 }, + { 0.5, 4.93, 6525.80 }, + { 0.4, 1.27, 2281.23 }, + { 0.4, 2.33, 3738.76 }, + { 0.5, 0.84, 4136.91 }, + /* 32 terms retained, 97 terms dropped, error 0.011"*T^3 */ + + /* mars l, T^4 */ + { 114.0, 3.1416, 0 }, + { 28.7, 5.637, 6681.225 }, + { 24.4, 5.139, 3340.612 }, + { 11.2, 6.032, 10021.837 }, + { 3.2, 3.56, 155.42 }, + { 3.3, 0.13, 13362.45 }, + { 0.8, 0.49, 16703.06 }, + { 0.8, 1.32, 242.73 }, + { 0.5, 3.06, 3185.19 }, + { 0.4, 2.16, 553.57 }, + { 0.3, 6.23, 3.52 }, + { 0.2, 0.44, 3344.14 }, + { 0.2, 0.82, 20043.67 }, + { 0.2, 3.74, 3496.03 }, + { 0.1, 1.67, 3583.34 }, + /* 15 terms retained, 21 terms dropped, error 0.0019"*T^4 */ + + /* mars l, T^5 */ + { 0.7, 4.04, 6681.22 }, + { 0.9, 3.14, 0 }, + { 0.5, 4.49, 10021.84 }, + { 0.4, 5.07, 155.42 }, + { 0.2, 3.51, 3340.61 }, + { 0.2, 4.85, 13362.45 }, + { 0.1, 6.09, 242.73 }, + /* 7 terms retained, 8 terms dropped, error 0.0012"*T^5 */ + /* end mars l */ + + /* mars b, T^0 */ + { 3197135.0, 3.76832042, 3340.61242670 }, + { 298033.2, 4.1061700, 6681.2248534 }, + { 289104.7, 0, 0 }, + { 31365.5, 4.446511, 10021.837280 }, + { 3484.1, 4.78813, 13362.44971 }, + { 443.0, 5.6523, 3337.0893 }, + { 443.4, 5.0264, 3344.1355 }, + { 399.1, 5.1306, 16703.0621 }, + { 292.5, 3.7929, 2281.2305 }, + { 182.0, 6.1365, 6151.5339 }, + { 163.2, 4.2640, 529.6910 }, + { 159.7, 2.2319, 1059.3819 }, + { 139.3, 2.4180, 8962.4553 }, + { 149.3, 2.1650, 5621.8429 }, + { 142.7, 1.1822, 3340.5952 }, + { 142.7, 3.2129, 3340.6297 }, + { 82.5, 5.367, 6684.748 }, + { 73.6, 5.092, 398.149 }, + { 72.7, 5.538, 6283.076 }, + { 86.4, 5.744, 3738.761 }, + { 83.3, 5.989, 6677.702 }, + { 60.1, 3.680, 796.298 }, + { 63.1, 0.730, 5884.927 }, + { 62.3, 4.851, 2942.463 }, + { 47.0, 5.543, 3340.545 }, + { 47.0, 5.135, 3340.680 }, + { 46.6, 5.474, 20043.675 }, + { 45.6, 2.133, 2810.921 }, + { 41.3, 0.200, 9492.146 }, + { 47.2, 4.522, 3149.164 }, + { 38.5, 4.080, 4136.910 }, + { 33.1, 4.066, 1751.540 }, + { 29.7, 5.922, 3532.061 }, + { 32.7, 2.621, 2914.014 }, + { 29.5, 2.753, 12303.068 }, + { 28.2, 2.063, 5486.778 }, + { 28.6, 4.947, 3870.303 }, + { 26.6, 3.551, 6681.242 }, + { 26.6, 1.520, 6681.208 }, + { 26.1, 2.601, 4399.994 }, + /* 40 terms retained, 401 terms dropped, error 0.69" */ + + /* mars b, T^1 */ + { 350068.8, 5.3684784, 3340.6124267 }, + { 14116.0, 3.141593, 0 }, + { 9670.8, 5.47878, 6681.22485 }, + { 1471.9, 3.20206, 10021.83728 }, + { 425.9, 3.4084, 13362.4497 }, + { 102.0, 0.7762, 3337.0893 }, + { 78.8, 3.718, 16703.062 }, + { 26.2, 2.483, 2281.230 }, + { 32.7, 3.458, 5621.843 }, + { 20.7, 1.441, 6151.534 }, + { 18.3, 6.031, 529.691 }, + { 15.7, 3.931, 8962.455 }, + { 17.0, 4.811, 3344.136 }, + { 13.1, 0.973, 6677.702 }, + { 15.6, 2.782, 3340.595 }, + { 15.6, 4.813, 3340.630 }, + { 13.8, 1.680, 3532.061 }, + { 12.7, 4.045, 20043.675 }, + { 14.3, 0.246, 2942.463 }, + { 12.5, 2.256, 5884.927 }, + { 8.8, 0.34, 398.15 }, + { 8.6, 1.75, 2544.31 }, + { 8.9, 5.95, 2810.92 }, + { 8.1, 0.84, 6283.08 }, + { 9.2, 4.35, 3496.03 }, + { 8.1, 4.30, 6684.75 }, + /* 26 terms retained, 261 terms dropped, error 0.17"*T */ + + /* mars b, T^2 */ + { 16726.7, 0.602214, 3340.612427 }, + { 4986.8, 3.14159, 0 }, + { 302.1, 5.5587, 6681.2249 }, + { 25.8, 1.897, 13362.450 }, + { 21.5, 0.917, 10021.837 }, + { 11.8, 2.242, 3337.089 }, + { 8.0, 2.25, 16703.06 }, + { 3.0, 5.89, 3496.03 }, + { 2.4, 5.19, 5621.84 }, + { 1.8, 2.59, 20043.67 }, + /* 10 terms retained, 120 terms dropped, error 0.024"*T^2 */ + + /* mars b, T^3 */ + { 606.5, 1.9805, 3340.6124 }, + { 42.6, 0, 0 }, + { 13.7, 1.796, 6681.225 }, + { 2.7, 3.45, 10021.84 }, + { 0.9, 3.75, 3337.09 }, + { 0.6, 0.11, 13362.45 }, + { 0.6, 1.14, 3496.03 }, + { 0.5, 0.71, 16703.06 }, + /* 8 terms retained, 33 terms dropped, error 0.0059"*T^3 */ + + /* mars b, T^4 */ + { 11.3, 3.457, 3340.612 }, + { 13.4, 0, 0 }, + { 0.7, 0.50, 6681.22 }, + { 0.1, 1.05, 10021.84 }, + { 0.1, 2.66, 3496.03 }, + /* 5 terms retained, 6 terms dropped, error 0.001"*T^4 */ + + /* mars b, T^5 */ + { 0.5, 4.87, 3340.61 }, + /* 1 terms retained, 4 terms dropped, error 0.0027"*T^5 */ + /* end mars b */ + + /* mars r, T^0 */ + { 153033488.3, 0, 0 }, + { 14184953.2, 3.479712835, 3340.612426700 }, + { 660776.4, 3.8178344, 6681.2248534 }, + { 46179.1, 4.155953, 10021.837280 }, + { 8109.7, 5.55958, 2810.92146 }, + { 7485.3, 1.77239, 5621.84292 }, + { 5523.2, 1.36436, 2281.23050 }, + { 3825.2, 4.49407, 13362.44971 }, + { 2306.5, 0.09082, 2544.31442 }, + { 1999.4, 5.36060, 3337.08931 }, + { 2484.4, 4.92546, 2942.46342 }, + { 1960.2, 4.74249, 3344.13555 }, + { 1167.1, 2.11262, 5092.15196 }, + { 1102.8, 5.00908, 398.14900 }, + { 899.1, 4.4079, 529.6910 }, + { 992.3, 5.8386, 6151.5339 }, + { 807.3, 2.1022, 1059.3819 }, + { 797.9, 3.4484, 796.2980 }, + { 741.0, 1.4991, 2146.1654 }, + { 692.3, 2.1338, 8962.4553 }, + { 633.1, 0.8935, 3340.5952 }, + { 725.6, 1.2452, 8432.7644 }, + { 633.1, 2.9243, 3340.6297 }, + { 574.4, 0.8290, 2914.0142 }, + { 526.2, 5.3829, 3738.7614 }, + { 630.0, 1.2874, 1751.5395 }, + { 472.8, 5.1985, 3127.3133 }, + { 348.1, 4.8322, 16703.0621 }, + { 283.7, 2.9069, 3532.0607 }, + { 279.6, 5.2575, 6283.0758 }, + { 233.8, 5.1055, 5486.7778 }, + { 219.4, 5.5834, 191.4483 }, + { 269.9, 3.7639, 5884.9268 }, + { 208.3, 5.2548, 3340.5451 }, + { 275.2, 2.9082, 1748.0164 }, + { 275.5, 1.2177, 6254.6267 }, + { 239.1, 2.0367, 1194.4470 }, + { 223.2, 4.1986, 3149.1642 }, + { 182.7, 5.0806, 6684.7480 }, + { 186.2, 5.6987, 6677.7017 }, + { 176.0, 5.9534, 3870.3034 }, + { 178.6, 4.1842, 3333.4989 }, + { 208.3, 4.8463, 3340.6797 }, + { 228.1, 3.2553, 6872.6731 }, + { 144.3, 0.2130, 5088.6288 }, + { 163.5, 3.7989, 4136.9104 }, + { 133.1, 1.5391, 7903.0734 }, + { 141.8, 2.4779, 4562.4610 }, + { 114.9, 4.3175, 1349.8674 }, + { 118.8, 2.1218, 1589.0729 }, + { 102.1, 6.1814, 9492.1463 }, + { 128.6, 5.4988, 8827.3903 }, + { 111.5, 0.5534, 11243.6858 }, + { 82.5, 1.622, 11773.377 }, + { 83.2, 0.616, 8429.241 }, + { 84.5, 0.623, 1592.596 }, + { 86.7, 1.750, 2700.715 }, + { 71.8, 2.475, 12303.068 }, + { 85.3, 1.616, 4690.480 }, + { 63.6, 2.673, 426.598 }, + { 68.6, 2.402, 4399.994 }, + { 58.6, 4.721, 213.299 }, + { 62.0, 1.101, 1221.849 }, + { 66.5, 2.213, 6041.328 }, + { 55.8, 1.233, 3185.192 }, + { 55.0, 5.727, 951.718 }, + { 52.4, 3.024, 4292.331 }, + { 55.7, 5.447, 3723.509 }, + { 59.0, 3.262, 6681.242 }, + { 44.6, 2.015, 8031.092 }, + { 59.0, 1.232, 6681.208 }, + { 42.4, 2.266, 155.420 }, + { 39.0, 2.578, 3341.593 }, + { 51.6, 5.723, 7079.374 }, + { 48.9, 5.616, 3553.912 }, + { 45.4, 5.433, 6467.926 }, + { 36.4, 4.439, 3894.182 }, + { 36.0, 1.160, 2288.344 }, + { 35.3, 5.490, 1990.745 }, + { 42.2, 1.633, 5628.956 }, + { 44.3, 5.003, 5614.729 }, + { 33.6, 5.170, 20043.675 }, + { 43.3, 1.037, 11769.854 }, + { 39.2, 1.242, 3339.632 }, + { 31.9, 4.593, 2274.117 }, + { 30.3, 2.442, 11371.705 }, + { 32.3, 2.382, 4535.059 }, + { 31.9, 4.375, 3.523 }, + { 29.3, 4.060, 3097.884 }, + { 32.0, 1.940, 382.897 }, + { 26.2, 5.585, 9623.688 }, + { 27.9, 4.258, 3191.049 }, + { 33.1, 0.855, 553.569 }, + { 27.5, 1.577, 9595.239 }, + { 25.2, 0.814, 10713.995 }, + /* 95 terms retained, 1023 terms dropped, error 4.9e-06 a.u. */ + + /* mars r, T^1 */ + { 1107433.3, 2.03250525, 3340.61242670 }, + { 103175.9, 2.3707185, 6681.2248534 }, + { 12877.2, 0, 0 }, + { 10815.9, 2.708881, 10021.837280 }, + { 1194.5, 3.04702, 13362.44971 }, + { 438.6, 2.8884, 2281.2305 }, + { 395.7, 3.4232, 3344.1355 }, + { 182.6, 1.5843, 2544.3144 }, + { 135.8, 3.3851, 16703.0621 }, + { 128.2, 0.6299, 1059.3819 }, + { 127.1, 1.9539, 796.2980 }, + { 118.4, 2.9976, 2146.1654 }, + { 128.4, 6.0434, 3337.0893 }, + { 87.5, 3.421, 398.149 }, + { 83.0, 3.856, 3738.761 }, + { 75.6, 4.451, 6151.534 }, + { 72.0, 2.764, 529.691 }, + { 66.5, 2.549, 1751.540 }, + { 54.3, 0.678, 8962.455 }, + { 51.0, 3.726, 6684.748 }, + { 66.4, 4.406, 1748.016 }, + { 47.9, 2.285, 2914.014 }, + { 49.4, 5.730, 3340.595 }, + { 49.4, 1.477, 3340.630 }, + { 57.5, 0.544, 1194.447 }, + { 48.3, 2.581, 3149.164 }, + { 36.4, 6.027, 3185.192 }, + { 37.2, 5.814, 1349.867 }, + { 36.0, 5.895, 3333.499 }, + { 31.1, 0.978, 191.448 }, + { 39.0, 2.319, 4136.910 }, + { 27.2, 5.414, 1592.596 }, + { 24.3, 3.758, 155.420 }, + { 22.8, 1.748, 5088.629 }, + { 22.3, 0.939, 951.718 }, + { 21.7, 3.836, 6283.076 }, + { 21.3, 0.780, 1589.073 }, + { 21.6, 4.569, 3532.061 }, + { 18.0, 4.219, 3870.303 }, + { 18.2, 0.413, 5486.778 }, + { 16.3, 3.808, 3340.545 }, + { 16.8, 5.549, 3097.884 }, + { 16.9, 4.537, 4292.331 }, + { 15.8, 4.757, 9492.146 }, + { 15.7, 3.724, 20043.675 }, + { 20.4, 3.135, 4690.480 }, + { 14.7, 5.953, 3894.182 }, + { 16.3, 3.399, 3340.680 }, + { 14.3, 3.999, 1990.745 }, + { 16.5, 0.968, 4399.994 }, + { 13.0, 5.142, 6677.702 }, + { 12.5, 1.032, 3341.593 }, + { 16.5, 3.539, 2700.715 }, + { 16.2, 2.349, 553.569 }, + { 13.2, 0.415, 5614.729 }, + { 11.3, 1.024, 12303.068 }, + { 12.4, 6.231, 5628.956 }, + { 12.7, 0.690, 3723.509 }, + { 11.8, 6.253, 2274.117 }, + { 10.4, 1.233, 426.598 }, + { 11.2, 1.318, 3496.033 }, + { 10.3, 0.901, 4535.059 }, + { 12.2, 4.223, 7079.374 }, + { 9.8, 3.45, 382.90 }, + { 8.6, 1.16, 2787.04 }, + { 7.9, 5.74, 2288.34 }, + { 9.2, 1.82, 6681.24 }, + { 7.8, 4.15, 6041.33 }, + { 9.2, 6.07, 6681.21 }, + { 9.0, 2.58, 2388.89 }, + { 6.8, 0.24, 11773.38 }, + { 7.1, 3.51, 8031.09 }, + { 9.2, 3.90, 3553.91 }, + { 6.7, 4.26, 242.73 }, + { 7.2, 3.70, 2818.04 }, + { 6.5, 0.04, 2957.72 }, + { 8.8, 2.20, 1221.85 }, + { 6.5, 2.12, 8429.24 }, + { 6.8, 4.05, 10025.36 }, + { 7.3, 4.27, 2803.81 }, + { 7.7, 1.01, 8432.76 }, + { 6.3, 1.90, 5621.84 }, + { 6.3, 1.60, 3347.73 }, + { 6.5, 2.76, 3339.63 }, + /* 84 terms retained, 512 terms dropped, error 1.2e-06 a.u.*T */ + + /* mars r, T^2 */ + { 44242.2, 0.479306, 3340.612427 }, + { 8138.0, 0.86998, 6681.22485 }, + { 1274.9, 1.22594, 10021.83728 }, + { 187.4, 1.5730, 13362.4497 }, + { 40.7, 1.971, 3344.136 }, + { 52.4, 3.142, 0 }, + { 26.6, 1.917, 16703.062 }, + { 17.8, 4.435, 2281.230 }, + { 11.7, 4.525, 3185.192 }, + { 10.2, 5.391, 1059.382 }, + { 9.9, 0.42, 796.30 }, + { 9.2, 4.54, 2146.17 }, + { 7.3, 3.14, 2544.31 }, + { 7.2, 2.29, 6684.75 }, + { 6.8, 5.27, 155.42 }, + { 6.5, 2.31, 3738.76 }, + { 7.8, 5.93, 1748.02 }, + { 5.8, 1.05, 1349.87 }, + { 6.7, 5.30, 1194.45 }, + { 4.7, 0.77, 3097.88 }, + { 5.4, 1.00, 3149.16 }, + { 4.4, 2.46, 951.72 }, + { 4.3, 3.90, 1592.60 }, + { 3.5, 1.85, 398.15 }, + { 3.7, 2.26, 20043.67 }, + { 3.4, 3.82, 1751.54 }, + { 4.6, 0.81, 4136.91 }, + { 3.2, 2.12, 5614.73 }, + { 3.6, 1.32, 3333.50 }, + { 2.9, 1.19, 529.69 }, + { 3.0, 2.86, 6151.53 }, + { 3.1, 4.55, 5628.96 }, + { 2.9, 1.20, 3894.18 }, + { 3.9, 3.86, 553.57 }, + { 2.8, 2.49, 1990.75 }, + { 2.7, 6.07, 4292.33 }, + { 2.7, 2.92, 3496.03 }, + { 2.4, 5.94, 2787.04 }, + { 2.3, 2.56, 191.45 }, + { 2.2, 5.37, 8962.46 }, + { 2.1, 2.75, 242.73 }, + { 2.2, 1.85, 3337.09 }, + { 2.0, 5.76, 3341.59 }, + { 2.0, 3.82, 2914.01 }, + { 1.8, 5.69, 1589.07 }, + { 1.8, 3.32, 5088.63 }, + { 2.4, 4.68, 4690.48 }, + { 2.0, 4.17, 3340.60 }, + { 2.0, 6.21, 3340.63 }, + { 1.6, 5.68, 4535.06 }, + { 2.2, 1.07, 2388.89 }, + { 2.0, 3.11, 3583.34 }, + { 2.0, 5.76, 4399.99 }, + /* 53 terms retained, 260 terms dropped, error 2.9e-07 a.u.*T^2 */ + + /* mars r, T^3 */ + { 1113.1, 5.14987, 3340.61243 }, + { 424.4, 5.6134, 6681.2249 }, + { 100.0, 5.9973, 10021.8373 }, + { 19.6, 0.076, 13362.450 }, + { 3.5, 0.43, 16703.06 }, + { 4.7, 3.14, 0 }, + { 2.9, 0.45, 3344.14 }, + { 2.4, 3.02, 3185.19 }, + { 0.7, 0.81, 6684.75 }, + { 0.5, 3.87, 1059.38 }, + { 0.6, 0.78, 20043.67 }, + { 0.5, 4.52, 3496.03 }, + { 0.5, 1.61, 3583.34 }, + { 0.4, 5.72, 3149.16 }, + /* 14 terms retained, 97 terms dropped, error 3.1e-08 a.u.*T^3 */ + + /* mars r, T^4 */ + { 19.6, 3.582, 3340.612 }, + { 16.3, 4.051, 6681.225 }, + { 5.8, 4.46, 10021.84 }, + { 1.5, 4.84, 13362.45 }, + { 0.4, 1.51, 3185.19 }, + { 0.3, 5.21, 16703.06 }, + { 0.2, 5.16, 3344.14 }, + { 0.1, 2.19, 3496.03 }, + { 0.1, 0, 0 }, + /* 9 terms retained, 19 terms dropped, error 9.4e-09 a.u.*T^4 */ + + /* mars r, T^5 */ + { 0.5, 2.48, 6681.22 }, + { 0.3, 2.92, 10021.84 }, + { 0.1, 1.77, 3340.61 }, + /* 3 terms retained, 6 terms dropped, error 4.6e-09 a.u.*T^5 */ + /* end mars */ +}; + +int vn_mars[][3] = { + /* addresses for mars l, b, r */ + /* T^0 */ { 0, 343, 433, }, + /* T^1 */ { 124, 383, 528, }, + /* T^2 */ { 222, 409, 612, }, + /* T^3 */ { 289, 419, 665, }, + /* T^4 */ { 321, 427, 679, }, + /* T^5 */ { 336, 432, 688, }, + /* end */ { 343, 433, 691, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_mercury[][3] = { + /* mercury l, T^0 */ + { 440250710.1, 0, 0 }, + { 40989415.0, 1.483020342, 26087.903141574 }, + { 5046294.2, 4.47785490, 52175.80628315 }, + { 855346.8, 1.1652032, 78263.7094247 }, + { 165590.4, 4.1196916, 104351.6125663 }, + { 34561.9, 0.779308, 130439.515708 }, + { 7583.5, 3.71348, 156527.41885 }, + { 3559.7, 1.51203, 1109.37855 }, + { 1726.0, 0.35832, 182615.32199 }, + { 1803.5, 4.10333, 5661.33205 }, + { 1364.7, 4.59918, 27197.28169 }, + { 1589.9, 2.99510, 25028.52121 }, + { 1017.3, 0.88031, 31749.23519 }, + { 714.2, 1.5414, 24978.5246 }, + { 643.8, 5.3027, 21535.9496 }, + { 404.2, 3.2823, 208703.2251 }, + { 352.4, 5.2416, 20426.5711 }, + { 343.3, 5.7653, 955.5997 }, + { 339.2, 5.8633, 25558.2122 }, + { 451.1, 6.0499, 51116.4244 }, + { 325.3, 1.3367, 53285.1848 }, + { 259.6, 0.9873, 4551.9535 }, + { 345.2, 2.7921, 15874.6176 }, + { 272.9, 2.4945, 529.6910 }, + { 234.8, 0.2667, 11322.6641 }, + { 238.8, 0.1134, 1059.3819 }, + { 264.3, 3.9171, 57837.1383 }, + { 216.6, 0.6599, 13521.7514 }, + { 183.4, 2.6288, 27043.5029 }, + { 176.0, 4.5364, 51066.4277 }, + { 181.6, 2.4341, 25661.3050 }, + { 209.0, 2.0918, 47623.8528 }, + { 172.6, 2.4520, 24498.8302 }, + { 142.3, 3.3600, 37410.5672 }, + { 137.9, 0.2910, 10213.2855 }, + { 118.2, 2.7815, 77204.3275 }, + { 96.9, 6.204, 234791.128 }, + { 125.2, 3.7208, 39609.6546 }, + { 86.8, 2.642, 51646.115 }, + { 86.7, 1.960, 46514.474 }, + { 88.3, 5.413, 26617.594 }, + { 106.4, 4.2057, 19804.8273 }, + { 90.0, 5.852, 41962.521 }, + { 85.0, 4.331, 79373.088 }, + { 69.2, 4.194, 19.670 }, + { 63.5, 3.147, 7238.676 }, + { 68.5, 0.634, 83925.041 }, + { 69.7, 3.572, 25132.303 }, + { 59.5, 2.747, 16983.996 }, + { 64.8, 0.048, 33326.579 }, + { 55.4, 4.053, 30639.857 }, + { 54.4, 3.143, 27147.285 }, + { 47.6, 5.497, 3.881 }, + { 49.6, 3.990, 6770.711 }, + { 56.5, 5.119, 73711.756 }, + { 41.8, 5.642, 53131.406 }, + { 51.5, 5.478, 50586.733 }, + { 44.7, 1.224, 77154.331 }, + { 41.9, 5.193, 6283.076 }, + { 38.0, 2.431, 12566.152 }, + { 35.6, 0.814, 32858.614 }, + { 48.0, 5.493, 51749.208 }, + { 35.4, 3.370, 36301.189 }, + { 34.0, 2.786, 14765.239 }, + { 30.6, 5.840, 43071.899 }, + { 36.0, 1.424, 2218.757 }, + { 34.0, 0.475, 65697.558 }, + { 30.8, 5.770, 103292.231 }, + { 28.5, 0.650, 426.598 }, + { 26.2, 5.242, 22645.328 }, + { 26.3, 0.648, 1589.073 }, + { 29.5, 0.698, 213.299 }, + { 27.5, 0.980, 45892.730 }, + { 26.8, 1.061, 3442.575 }, + { 27.1, 0.085, 63498.470 }, + /* 75 terms retained, 1305 terms dropped, error 0.97" */ + + /* mercury l, T^1 */ + { 2608814706222.7, 0, 0 }, + { 1126007.8, 6.21703971, 26087.90314157 }, + { 303471.4, 3.0556547, 52175.8062831 }, + { 80538.5, 6.104547, 78263.709425 }, + { 21245.0, 2.835319, 104351.612566 }, + { 5592.1, 5.82676, 130439.51571 }, + { 1472.2, 2.51845, 156527.41885 }, + { 352.2, 3.0524, 1109.3786 }, + { 388.3, 5.4804, 182615.3220 }, + { 93.5, 6.118, 27197.282 }, + { 90.6, 0.000, 24978.525 }, + { 102.7, 2.1488, 208703.2251 }, + { 51.9, 5.621, 5661.332 }, + { 44.4, 4.573, 25028.521 }, + { 28.1, 3.042, 51066.428 }, + { 22.0, 0.865, 955.600 }, + { 27.3, 5.092, 234791.128 }, + { 20.4, 3.715, 20426.571 }, + { 20.2, 0.519, 21535.950 }, + { 17.5, 5.727, 4551.953 }, + { 16.7, 1.351, 529.691 }, + { 15.3, 1.792, 11322.664 }, + { 15.4, 5.743, 19.670 }, + { 14.0, 3.594, 24498.830 }, + { 12.8, 2.696, 53285.185 }, + { 12.6, 3.895, 3.881 }, + { 12.6, 4.705, 1059.382 }, + { 8.0, 4.18, 26617.59 }, + { 7.9, 0.50, 46514.47 }, + { 8.0, 3.93, 27043.50 }, + { 7.7, 2.48, 57837.14 }, + { 8.6, 6.06, 77154.33 }, + { 6.8, 2.77, 7.11 }, + { 6.6, 5.53, 6770.71 }, + { 7.3, 1.75, 260879.03 }, + { 7.2, 2.98, 2218.76 }, + { 6.4, 2.14, 25132.30 }, + /* 37 terms retained, 802 terms dropped, error 0.16"*T */ + + /* mercury l, T^2 */ + { 53049.8, 0, 0 }, + { 16903.7, 4.690723, 26087.903142 }, + { 7396.7, 1.34736, 52175.80628 }, + { 3018.3, 4.45644, 78263.70942 }, + { 1107.4, 1.26227, 104351.61257 }, + { 378.2, 4.3200, 130439.5157 }, + { 123.0, 1.0687, 156527.4188 }, + { 38.7, 4.080, 182615.322 }, + { 14.9, 4.633, 1109.379 }, + { 11.9, 0.792, 208703.225 }, + { 5.2, 4.72, 24978.52 }, + { 3.6, 3.77, 234791.13 }, + { 2.6, 1.44, 27197.28 }, + { 2.0, 1.50, 51066.43 }, + /* 14 terms retained, 381 terms dropped, error 0.033"*T^2 */ + + /* mercury l, T^3 */ + { 188.1, 0.0347, 52175.8063 }, + { 142.2, 3.1251, 26087.9031 }, + { 96.9, 3.004, 78263.709 }, + { 43.7, 6.019, 104351.613 }, + { 35.4, 0, 0 }, + { 18.0, 2.775, 130439.516 }, + { 7.0, 5.82, 156527.42 }, + { 2.6, 2.57, 182615.32 }, + { 0.9, 5.59, 208703.23 }, + /* 9 terms retained, 144 terms dropped, error 0.012"*T^3 */ + + /* mercury l, T^4 */ + { 114.1, 3.1416, 0 }, + { 3.2, 2.03, 26087.90 }, + { 1.9, 1.42, 78263.71 }, + { 1.7, 4.50, 52175.81 }, + { 1.2, 4.50, 104351.61 }, + { 0.6, 1.27, 130439.52 }, + { 0.3, 4.31, 156527.42 }, + { 0.1, 1.06, 182615.32 }, + /* 8 terms retained, 20 terms dropped, error 0.0016"*T^4 */ + + /* mercury l, T^5 */ + { 0.9, 3.14, 0 }, + /* 1 terms retained, 12 terms dropped, error 0.0051"*T^5 */ + /* end mercury l */ + + /* mercury b, T^0 */ + { 11737529.0, 1.983574988, 26087.903141574 }, + { 2388077.0, 5.03738960, 52175.80628315 }, + { 1222839.5, 3.14159265, 0 }, + { 543251.8, 1.7964436, 78263.7094247 }, + { 129778.8, 4.8323250, 104351.6125663 }, + { 31866.9, 1.580885, 130439.515708 }, + { 7963.3, 4.60972, 156527.41885 }, + { 2014.2, 1.35324, 182615.32199 }, + { 514.0, 4.3784, 208703.2251 }, + { 207.7, 4.9177, 27197.2817 }, + { 208.6, 2.0202, 24978.5246 }, + { 132.0, 1.1191, 234791.1283 }, + { 100.5, 5.6568, 20426.5711 }, + { 121.4, 1.8127, 53285.1848 }, + { 91.6, 2.282, 25028.521 }, + { 99.2, 0.094, 51116.424 }, + { 94.6, 1.242, 31749.235 }, + { 78.8, 4.407, 57837.138 }, + { 77.7, 0.526, 1059.382 }, + { 84.3, 5.085, 51066.428 }, + { 49.9, 3.498, 5661.332 }, + { 46.5, 3.237, 77204.327 }, + { 44.8, 4.878, 79373.088 }, + { 40.8, 2.466, 46514.474 }, + { 37.4, 4.458, 4551.953 }, + { 34.1, 4.142, 260879.031 }, + { 35.9, 1.091, 1109.379 }, + { 32.0, 1.185, 83925.041 }, + { 31.0, 3.503, 21535.950 }, + { 31.8, 2.415, 47623.853 }, + { 28.7, 1.848, 77154.331 }, + { 25.8, 2.776, 27043.503 }, + { 25.2, 3.591, 27147.285 }, + /* 33 terms retained, 785 terms dropped, error 0.61" */ + + /* mercury b, T^1 */ + { 429151.4, 3.5016978, 26087.9031416 }, + { 146233.7, 3.1415927, 0 }, + { 22675.3, 0.015154, 52175.806283 }, + { 10895.0, 0.485402, 78263.709425 }, + { 6353.5, 3.42944, 104351.61257 }, + { 2495.7, 0.16051, 130439.51571 }, + { 859.6, 3.1845, 156527.4188 }, + { 277.5, 6.2102, 182615.3220 }, + { 86.2, 2.952, 208703.225 }, + { 26.1, 5.977, 234791.128 }, + { 27.7, 0.291, 27197.282 }, + { 12.8, 3.377, 53285.185 }, + { 12.7, 0.538, 24978.525 }, + { 7.8, 2.72, 260879.03 }, + { 7.5, 3.58, 51066.43 }, + /* 15 terms retained, 479 terms dropped, error 0.12"*T */ + + /* mercury b, T^2 */ + { 11830.9, 4.790656, 26087.903142 }, + { 1913.5, 0, 0 }, + { 1044.8, 1.21217, 52175.80628 }, + { 266.2, 4.4342, 78263.7094 }, + { 170.3, 1.6226, 104351.6126 }, + { 96.3, 4.800, 130439.516 }, + { 44.7, 1.608, 156527.419 }, + { 18.3, 4.669, 182615.322 }, + { 6.9, 1.43, 208703.23 }, + { 2.5, 4.47, 234791.13 }, + { 1.7, 1.83, 27197.28 }, + /* 11 terms retained, 219 terms dropped, error 0.025"*T^2 */ + + /* mercury b, T^3 */ + { 235.4, 0.3539, 26087.9031 }, + { 160.5, 0, 0 }, + { 18.9, 4.363, 52175.806 }, + { 6.4, 2.51, 78263.71 }, + { 4.6, 6.14, 104351.61 }, + { 3.1, 3.12, 130439.52 }, + { 1.7, 6.27, 156527.42 }, + { 0.9, 3.08, 182615.32 }, + /* 8 terms retained, 45 terms dropped, error 0.011"*T^3 */ + + /* mercury b, T^4 */ + { 4.3, 1.75, 26087.90 }, + { 1.0, 3.14, 0 }, + { 0.4, 4.03, 52175.81 }, + { 0.3, 0.21, 78263.71 }, + { 0.1, 3.75, 104351.61 }, + /* 5 terms retained, 10 terms dropped, error 0.0012"*T^4 */ + + /* mercury b, T^5 */ + { 0.1, 3.95, 26087.90 }, + /* 1 terms retained, 9 terms dropped, error 0.00062"*T^5 */ + /* end mercury b */ + + /* mercury r, T^0 */ + { 39528271.7, 0, 0 }, + { 7834131.8, 6.19233723, 26087.90314157 }, + { 795525.6, 2.9598969, 52175.8062831 }, + { 121281.8, 6.0106415, 78263.7094247 }, + { 21922.0, 2.778201, 104351.612566 }, + { 4354.1, 5.82895, 130439.51571 }, + { 918.2, 2.5965, 156527.4188 }, + { 260.0, 3.0282, 27197.2817 }, + { 290.0, 1.4244, 25028.5212 }, + { 201.9, 5.6473, 182615.3220 }, + { 201.5, 5.5923, 31749.2352 }, + { 142.0, 6.2526, 24978.5246 }, + { 100.1, 3.7344, 21535.9496 }, + { 77.6, 3.670, 20426.571 }, + { 63.3, 4.299, 25558.212 }, + { 63.0, 4.766, 1059.382 }, + { 66.8, 2.525, 5661.332 }, + { 75.5, 4.474, 51116.424 }, + { 48.3, 6.068, 53285.185 }, + { 45.7, 2.415, 208703.225 }, + { 35.2, 1.059, 27043.503 }, + { 40.8, 2.359, 57837.138 }, + { 44.2, 1.220, 15874.618 }, + { 33.9, 0.864, 25661.305 }, + { 37.2, 0.517, 47623.853 }, + { 30.1, 1.795, 37410.567 }, + { 28.4, 3.021, 51066.428 }, + { 30.9, 0.884, 24498.830 }, + { 26.1, 2.150, 39609.655 }, + /* 29 terms retained, 1186 terms dropped, error 2.9e-06 a.u. */ + + /* mercury r, T^1 */ + { 217347.7, 4.6561716, 26087.9031416 }, + { 44141.8, 1.423855, 52175.806283 }, + { 10094.5, 4.474663, 78263.709425 }, + { 2432.8, 1.24226, 104351.61257 }, + { 1624.4, 0, 0 }, + { 604.0, 4.2930, 130439.5157 }, + { 152.9, 1.0606, 156527.4188 }, + { 39.2, 4.111, 182615.322 }, + { 17.8, 4.544, 27197.282 }, + { 18.0, 4.712, 24978.525 }, + { 10.2, 0.879, 208703.225 }, + { 8.1, 3.01, 25028.52 }, + /* 12 terms retained, 699 terms dropped, error 5.8e-07 a.u.*T */ + + /* mercury r, T^2 */ + { 3117.9, 3.08232, 26087.90314 }, + { 1245.4, 6.15183, 52175.80628 }, + { 424.8, 2.9258, 78263.7094 }, + { 136.1, 5.9798, 104351.6126 }, + { 42.2, 2.749, 130439.516 }, + { 21.8, 3.142, 0 }, + { 12.8, 5.801, 156527.419 }, + { 3.8, 2.57, 182615.32 }, + /* 8 terms retained, 318 terms dropped, error 2.3e-07 a.u.*T^2 */ + + /* mercury r, T^3 */ + { 32.7, 1.680, 26087.903 }, + { 24.2, 4.634, 52175.806 }, + { 12.1, 1.390, 78263.709 }, + { 5.1, 4.44, 104351.61 }, + { 2.0, 1.21, 130439.52 }, + { 1.5, 3.14, 0 }, + { 0.7, 4.26, 156527.42 }, + /* 7 terms retained, 112 terms dropped, error 4.1e-08 a.u.*T^3 */ + + /* mercury r, T^4 */ + { 0.4, 0.37, 26087.90 }, + { 0.4, 3.19, 52175.81 }, + { 0.3, 6.17, 78263.71 }, + { 0.1, 2.92, 104351.61 }, + /* 4 terms retained, 14 terms dropped, error 6.7e-09 a.u.*T^4 */ + + /* mercury r, T^5 */ + /* 0 terms retained, 10 terms dropped, error 1.2e-10 a.u.*T^5 */ + /* end mercury */ +}; + +int vn_mercury[][3] = { + /* addresses for mercury l, b, r */ + /* T^0 */ { 0, 144, 217, }, + /* T^1 */ { 75, 177, 246, }, + /* T^2 */ { 112, 192, 258, }, + /* T^3 */ { 126, 203, 266, }, + /* T^4 */ { 135, 211, 273, }, + /* T^5 */ { 143, 216, 277, }, + /* end */ { 144, 217, 0, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_neptune[][3] = { + /* neptune l, T^0 */ + { 531188633.0, 0, 0 }, + { 1798475.5, 2.90101273, 38.13303564 }, + { 1019727.7, 0.48580924, 1.48447271 }, + { 124531.8, 4.8300809, 36.6485629 }, + { 42064.4, 5.410550, 2.968945 }, + { 37714.6, 6.092218, 35.164090 }, + { 33784.7, 1.244889, 76.266071 }, + { 16482.7, 0.000077, 491.557929 }, + { 9198.6, 4.93747, 39.61751 }, + { 8994.2, 0.27462, 175.16606 }, + { 4216.2, 1.98712, 73.29713 }, + { 3364.8, 1.03590, 33.67962 }, + { 2284.8, 4.20607, 4.45342 }, + { 1433.5, 2.78340, 74.78160 }, + { 900.2, 2.0761, 109.9457 }, + { 745.0, 3.1903, 71.8127 }, + { 506.2, 5.7479, 114.3991 }, + { 399.6, 0.3497, 1021.2489 }, + { 345.2, 3.4619, 41.1020 }, + { 306.3, 0.4968, 0.5213 }, + { 287.3, 4.5052, 0.0482 }, + { 323.0, 2.2482, 32.1951 }, + { 340.3, 3.3037, 77.7505 }, + { 266.6, 4.8893, 0.9632 }, + { 227.1, 1.7971, 453.4249 }, + { 244.7, 1.2469, 9.5612 }, + { 232.9, 2.5046, 137.0330 }, + { 282.2, 2.2457, 146.5943 }, + { 251.9, 5.7817, 388.4652 }, + { 150.2, 2.9971, 5.9379 }, + { 170.4, 3.3239, 108.4612 }, + { 151.4, 2.1915, 33.9402 }, + { 148.3, 0.8595, 111.4302 }, + { 118.7, 3.6771, 2.4477 }, + { 101.8, 5.7054, 0.1119 }, + { 97.9, 2.805, 8.077 }, + { 103.1, 4.4044, 70.3282 }, + { 103.3, 0.0408, 0.2606 }, + { 109.3, 2.4160, 183.2428 }, + { 73.9, 1.328, 529.691 }, + { 77.7, 4.164, 4.193 }, + { 86.4, 4.228, 490.073 }, + { 81.5, 5.199, 493.042 }, + { 71.5, 5.295, 350.332 }, + { 64.4, 3.545, 168.053 }, + { 62.6, 0.150, 182.280 }, + { 58.5, 3.501, 145.110 }, + { 48.3, 1.113, 112.915 }, + { 47.2, 4.574, 46.210 }, + { 39.1, 1.666, 213.299 }, + { 47.7, 0.129, 484.444 }, + { 46.9, 3.017, 498.671 }, + { 38.7, 2.387, 2.921 }, + { 47.0, 4.498, 173.682 }, + { 47.6, 2.584, 219.891 }, + { 44.7, 5.473, 176.651 }, + { 32.3, 3.458, 30.711 }, + { 28.2, 4.133, 6.592 }, + /* 58 terms retained, 365 terms dropped, error 0.9" */ + + /* neptune l, T^1 */ + { 3837687716.7, 0, 0 }, + { 16604.2, 4.863191, 1.484473 }, + { 15807.1, 2.279235, 38.133036 }, + { 3334.7, 3.68200, 76.26607 }, + { 1305.8, 3.67321, 2.96895 }, + { 604.8, 1.5048, 35.1641 }, + { 178.6, 3.4532, 39.6175 }, + { 106.5, 2.4513, 4.4534 }, + { 105.7, 2.7548, 33.6796 }, + { 72.7, 5.487, 36.649 }, + { 57.1, 5.216, 0.521 }, + { 57.4, 1.858, 114.399 }, + { 35.4, 4.517, 74.782 }, + { 32.2, 5.904, 77.751 }, + { 29.9, 3.670, 388.465 }, + { 28.9, 5.169, 9.561 }, + { 28.7, 5.167, 2.448 }, + { 25.5, 5.245, 168.053 }, + { 24.9, 4.732, 182.280 }, + { 20.2, 5.789, 1021.249 }, + { 19.0, 1.830, 484.444 }, + { 18.7, 1.316, 498.671 }, + { 15.1, 4.950, 137.033 }, + { 15.1, 3.987, 32.195 }, + { 10.7, 2.441, 4.193 }, + { 11.7, 4.893, 71.813 }, + { 9.6, 1.23, 5.94 }, + { 9.6, 1.89, 41.10 }, + { 9.0, 0.02, 8.08 }, + { 9.9, 6.08, 7.11 }, + { 7.6, 5.51, 73.30 }, + { 7.0, 0.62, 2.92 }, + /* 32 terms retained, 151 terms dropped, error 0.17"*T */ + + /* neptune l, T^2 */ + { 53892.6, 0, 0 }, + { 281.3, 1.1908, 38.1330 }, + { 295.7, 1.8552, 1.4845 }, + { 270.2, 5.7214, 76.2661 }, + { 23.0, 1.210, 2.969 }, + { 7.3, 0.54, 2.45 }, + { 9.1, 4.43, 35.16 }, + { 5.2, 0.67, 168.05 }, + { 5.2, 3.02, 182.28 }, + { 4.3, 3.84, 114.40 }, + { 3.9, 3.53, 484.44 }, + { 3.7, 5.90, 498.67 }, + { 3.0, 0.31, 4.45 }, + { 3.4, 0.56, 74.78 }, + { 3.3, 1.85, 175.17 }, + { 2.2, 1.89, 388.47 }, + { 2.2, 4.38, 7.11 }, + { 1.8, 3.49, 9.56 }, + { 2.5, 4.69, 491.56 }, + { 1.8, 5.12, 33.68 }, + { 2.2, 1.69, 77.75 }, + { 1.7, 2.56, 36.65 }, + /* 22 terms retained, 35 terms dropped, error 0.033"*T^2 */ + + /* neptune l, T^3 */ + { 31.3, 0, 0 }, + { 12.5, 6.044, 1.484 }, + { 14.5, 1.353, 76.266 }, + { 11.5, 6.113, 38.133 }, + { 1.4, 4.94, 2.97 }, + { 0.7, 2.36, 168.05 }, + { 0.7, 1.27, 182.28 }, + { 0.5, 5.24, 484.44 }, + { 0.5, 4.17, 498.67 }, + { 0.7, 0.56, 31.02 }, + /* 10 terms retained, 5 terms dropped, error 0.0091"*T^3 */ + + /* neptune l, T^4 */ + { 114.0, 3.1416, 0 }, + { 0.6, 3.18, 76.27 }, + /* 2 terms retained, 0 terms dropped, error 0.0043"*T^4 */ + + /* neptune l, T^5 */ + { 0.9, 3.14, 0 }, + /* 1 terms retained, 0 terms dropped, error 0.0051"*T^5 */ + /* end neptune l */ + + /* neptune b, T^0 */ + { 3088622.9, 1.44104373, 38.13303564 }, + { 27780.1, 5.912719, 76.266071 }, + { 27623.6, 0, 0 }, + { 15355.5, 2.521238, 36.648563 }, + { 15448.1, 3.508771, 39.617508 }, + { 1999.9, 1.50999, 74.78160 }, + { 1967.5, 4.37778, 1.48447 }, + { 1015.1, 3.21561, 35.16409 }, + { 605.8, 2.8025, 73.2971 }, + { 594.9, 2.1289, 41.1020 }, + { 588.8, 3.1866, 2.9689 }, + { 401.8, 4.1688, 114.3991 }, + { 254.3, 3.2712, 453.4249 }, + { 261.6, 3.7672, 213.2991 }, + { 280.0, 1.6817, 77.7505 }, + { 205.6, 4.2565, 529.6910 }, + { 140.5, 3.5297, 137.0330 }, + { 98.5, 4.168, 33.680 }, + { 51.3, 1.951, 4.453 }, + { 68.0, 4.670, 71.813 }, + { 41.9, 5.418, 111.430 }, + { 41.8, 5.948, 112.915 }, + { 30.6, 0.936, 42.586 }, + /* 23 terms retained, 149 terms dropped, error 0.62" */ + + /* neptune b, T^1 */ + { 227279.2, 3.8079309, 38.1330356 }, + { 1803.1, 1.97576, 76.26607 }, + { 1385.7, 4.82556, 36.64856 }, + { 1433.3, 3.14159, 0 }, + { 1073.3, 6.08054, 39.61751 }, + { 147.9, 3.8577, 74.7816 }, + { 136.4, 0.4776, 1.4845 }, + { 70.3, 6.188, 35.164 }, + { 51.9, 5.052, 73.297 }, + { 37.3, 4.895, 41.102 }, + { 42.6, 0.307, 114.399 }, + { 37.1, 5.760, 2.969 }, + { 26.4, 5.216, 213.299 }, + { 16.9, 4.265, 77.751 }, + { 18.7, 0.904, 453.425 }, + { 13.0, 6.177, 529.691 }, + { 10.5, 1.203, 137.033 }, + /* 17 terms retained, 65 terms dropped, error 0.18"*T */ + + /* neptune b, T^2 */ + { 9690.8, 5.57124, 38.13304 }, + { 78.8, 3.627, 76.266 }, + { 71.5, 0.455, 36.649 }, + { 58.6, 3.142, 0 }, + { 29.9, 1.607, 39.618 }, + { 6.5, 5.61, 74.78 }, + { 5.8, 2.25, 1.48 }, + { 4.3, 1.68, 35.16 }, + { 3.5, 2.39, 114.40 }, + { 2.6, 0.65, 73.30 }, + /* 10 terms retained, 15 terms dropped, error 0.036"*T^2 */ + + /* neptune b, T^3 */ + { 273.4, 1.0169, 38.1330 }, + { 2.3, 2.37, 36.65 }, + { 2.0, 5.33, 76.27 }, + { 2.4, 0, 0 }, + { 0.5, 3.22, 39.62 }, + /* 5 terms retained, 4 terms dropped, error 0.0054"*T^3 */ + + /* neptune b, T^4 */ + { 5.7, 2.67, 38.13 }, + /* 1 terms retained, 0 terms dropped, error 0.033"*T^4 */ + + /* neptune b, T^5 */ + { 0.1, 4.71, 38.13 }, + /* 1 terms retained, 0 terms dropped, error 0.00066"*T^5 */ + /* end neptune b */ + + /* neptune r, T^0 */ + { 3007013206.1, 0, 0 }, + { 27062259.5, 1.329994589, 38.133035638 }, + { 1691764.3, 3.25186139, 36.64856293 }, + { 807830.7, 5.1859284, 1.4844727 }, + { 537760.6, 4.5211390, 35.1640902 }, + { 495725.6, 1.5710565, 491.5579295 }, + { 274572.0, 1.8455226, 175.1660598 }, + { 135134.1, 3.3722061, 39.6175083 }, + { 121801.8, 5.7975444, 76.2660713 }, + { 100895.4, 0.3770275, 73.2971259 }, + { 69791.7, 3.796172, 2.968945 }, + { 46687.8, 5.749378, 33.679618 }, + { 24593.8, 0.508017, 109.945689 }, + { 16939.2, 1.594222, 71.812653 }, + { 14229.7, 1.077861, 74.781599 }, + { 12011.8, 1.920621, 1021.248895 }, + { 8394.7, 0.67817, 146.59425 }, + { 7571.8, 1.07149, 388.46516 }, + { 5720.9, 2.59060, 4.45342 }, + { 4839.7, 1.90686, 41.10198 }, + { 4483.5, 2.90573, 529.69097 }, + { 4270.2, 3.41344, 453.42489 }, + { 4353.8, 0.67986, 32.19514 }, + { 4420.8, 1.74994, 108.46122 }, + { 2881.1, 1.98600, 137.03302 }, + { 2635.5, 3.09756, 213.29910 }, + { 3380.9, 0.84811, 183.24281 }, + { 2878.9, 3.67416, 350.33212 }, + { 2306.3, 2.80963, 70.32818 }, + { 2530.1, 5.79840, 490.07346 }, + { 2523.1, 0.48631, 493.04240 }, + { 2087.3, 0.61858, 33.94025 }, + { 1976.5, 5.11703, 168.05251 }, + { 1905.3, 1.72186, 182.27961 }, + { 1654.0, 1.92783, 145.10978 }, + { 1435.1, 1.70005, 484.44438 }, + { 1403.0, 4.58914, 498.67148 }, + { 1499.2, 1.01623, 219.89138 }, + { 1398.9, 0.76220, 176.65053 }, + { 1403.4, 6.07659, 173.68159 }, + { 1128.6, 5.96661, 9.56123 }, + { 1228.3, 1.59881, 77.75054 }, + { 835.4, 3.9707, 114.3991 }, + { 811.2, 3.0026, 46.2098 }, + { 731.9, 2.1045, 181.7583 }, + { 615.8, 2.9787, 106.9767 }, + { 704.8, 1.1874, 256.5399 }, + { 502.0, 1.3866, 5.9379 }, + { 530.4, 4.2406, 111.4302 }, + { 437.1, 2.2703, 1550.9399 }, + { 400.2, 1.2561, 8.0768 }, + { 421.0, 1.8908, 30.7107 }, + { 382.5, 3.2997, 983.1159 }, + { 422.5, 5.5319, 525.4982 }, + { 355.4, 2.2785, 218.4069 }, + { 280.1, 1.5413, 98.9000 }, + { 314.5, 3.9593, 381.3516 }, + { 280.6, 4.5424, 44.7253 }, + { 267.7, 5.1332, 112.9146 }, + { 333.3, 5.7507, 39.0962 }, + { 291.6, 4.0240, 68.8437 }, + { 321.4, 1.5063, 454.9094 }, + { 309.2, 2.8545, 72.0733 }, + { 345.1, 1.3591, 293.1885 }, + { 307.4, 0.3196, 601.7643 }, + { 251.4, 3.5399, 312.1991 }, + { 248.2, 3.4108, 37.6118 }, + { 306.0, 2.7248, 6244.9428 }, + { 293.5, 4.8908, 528.2065 }, + { 234.5, 0.5923, 42.5865 }, + { 239.6, 3.1644, 143.6253 }, + { 214.5, 3.6248, 278.2588 }, + { 246.2, 1.0151, 141.2258 }, + { 174.1, 5.5501, 567.8240 }, + { 163.9, 2.1017, 2.4477 }, + { 162.9, 2.4895, 4.1928 }, + { 193.5, 1.5843, 138.5175 }, + { 155.3, 3.2843, 31.0195 }, + { 182.5, 2.4524, 255.0555 }, + { 177.8, 4.1477, 10175.1525 }, + { 174.4, 1.5304, 329.8371 }, + { 137.6, 3.3490, 0.9632 }, + { 161.0, 5.1666, 211.8146 }, + { 113.5, 4.9629, 148.0787 }, + { 128.8, 3.2552, 24.1184 }, + { 107.4, 3.2646, 1059.3819 }, + { 122.7, 5.3940, 62.2514 }, + { 120.5, 3.0805, 184.7273 }, + { 99.4, 1.929, 28.572 }, + { 97.7, 2.595, 6.592 }, + { 124.1, 3.1152, 221.3759 }, + { 124.7, 2.9704, 251.4321 }, + { 114.3, 0.2504, 594.6507 }, + { 111.0, 3.3428, 180.2739 }, + { 120.9, 1.9291, 25.6029 }, + { 104.7, 0.9488, 395.5787 }, + { 109.8, 5.4315, 494.5269 }, + { 96.9, 0.862, 1014.135 }, + { 98.7, 0.896, 488.589 }, + { 89.0, 4.781, 144.147 }, + { 107.9, 0.9870, 1124.3417 }, + { 97.1, 2.627, 291.704 }, + { 75.1, 5.889, 43.241 }, + { 93.7, 6.099, 526.722 }, + { 94.8, 0.207, 456.394 }, + { 70.0, 2.397, 426.598 }, + { 77.2, 4.211, 105.492 }, + { 89.9, 3.251, 258.024 }, + { 69.1, 4.930, 1028.362 }, + { 90.7, 1.695, 366.486 }, + { 74.2, 3.145, 82.858 }, + { 58.0, 0.862, 60.767 }, + { 78.7, 1.093, 700.664 }, + { 57.2, 0.813, 2.921 }, + { 63.4, 4.396, 149.563 }, + { 55.7, 3.890, 47.694 }, + { 56.4, 5.150, 0.521 }, + { 56.2, 5.430, 911.043 }, + { 61.7, 6.165, 1019.764 }, + { 70.5, 0.081, 40.581 }, + { 74.7, 4.859, 186.212 }, + { 61.9, 4.787, 11.046 }, + { 61.1, 0.837, 1022.733 }, + { 61.3, 5.702, 178.135 }, + { 52.9, 0.375, 27.087 }, + { 56.7, 3.523, 216.922 }, + { 48.8, 5.108, 64.960 }, + { 63.3, 4.394, 807.950 }, + { 64.1, 6.283, 7.114 }, + { 46.4, 1.347, 451.940 }, + { 60.5, 3.403, 294.673 }, + { 46.9, 0.170, 7.422 }, + { 56.8, 0.450, 140.002 }, + { 55.9, 1.068, 172.197 }, + { 53.8, 2.796, 328.353 }, + { 43.8, 6.047, 135.549 }, + { 49.5, 0.641, 41.054 }, + { 54.0, 2.918, 563.631 }, + { 43.0, 5.402, 487.365 }, + { 51.5, 0.091, 210.330 }, + { 41.9, 3.123, 29.226 }, + { 47.7, 3.907, 63.736 }, + { 41.6, 6.268, 32.716 }, + { 41.4, 4.455, 37.170 }, + { 40.7, 0.160, 79.235 }, + { 48.2, 1.842, 403.134 }, + { 36.9, 0.448, 30.056 }, + { 47.8, 0.881, 3302.479 }, + { 39.5, 3.506, 357.446 }, + { 42.1, 0.634, 343.219 }, + { 41.3, 1.364, 31.232 }, + { 42.6, 3.553, 38.654 }, + { 38.9, 5.267, 415.292 }, + { 39.0, 5.259, 386.981 }, + { 33.7, 5.244, 67.359 }, + { 40.9, 3.553, 331.322 }, + { 38.8, 1.123, 38.181 }, + { 37.5, 6.087, 35.425 }, + { 38.8, 4.679, 38.085 }, + { 38.2, 6.265, 389.950 }, + { 30.0, 4.458, 22.634 }, + { 31.4, 0.077, 12.530 }, + { 26.3, 4.596, 106.014 }, + { 27.5, 5.995, 206.186 }, + { 25.2, 4.499, 34.201 }, + { 29.0, 3.649, 253.571 }, + { 27.2, 4.379, 142.141 }, + { 30.6, 1.593, 348.848 }, + { 31.5, 1.051, 100.384 }, + { 26.3, 3.016, 365.001 }, + { 26.5, 3.614, 367.970 }, + { 25.5, 2.438, 351.817 }, + { 25.7, 2.005, 439.783 }, + { 25.4, 4.740, 1474.674 }, + /* 174 terms retained, 433 terms dropped, error 6.7e-06 a.u. */ + + /* neptune r, T^1 */ + { 236338.5, 0.7049801, 38.1330356 }, + { 13220.3, 3.320155, 1.484473 }, + { 8621.9, 6.21629, 35.16409 }, + { 2701.7, 1.88141, 39.61751 }, + { 2153.2, 5.16874, 76.26607 }, + { 2154.7, 2.09431, 2.96895 }, + { 1463.9, 1.18417, 33.67962 }, + { 1603.2, 0, 0 }, + { 1135.8, 3.91891, 36.64856 }, + { 897.6, 5.2412, 388.4652 }, + { 789.9, 0.5332, 168.0525 }, + { 760.0, 0.0205, 182.2796 }, + { 607.2, 1.0771, 1021.2489 }, + { 571.6, 3.4006, 484.4444 }, + { 560.8, 2.8869, 498.6715 }, + { 490.2, 3.4683, 137.0330 }, + { 264.1, 0.8622, 4.4534 }, + { 270.5, 3.2736, 71.8127 }, + { 203.5, 2.4182, 32.1951 }, + { 155.4, 0.3654, 41.1020 }, + { 132.8, 3.6016, 9.5612 }, + { 93.6, 0.667, 46.210 }, + { 83.3, 3.260, 98.900 }, + { 72.2, 4.477, 601.764 }, + { 69.0, 1.463, 74.782 }, + { 87.0, 5.772, 381.352 }, + { 68.7, 4.526, 70.328 }, + { 64.7, 3.855, 73.297 }, + { 68.4, 3.395, 108.461 }, + { 53.4, 5.437, 395.579 }, + { 44.5, 3.614, 2.448 }, + { 41.2, 4.739, 8.077 }, + { 48.3, 1.986, 175.166 }, + { 41.7, 4.943, 31.019 }, + { 44.1, 1.417, 1550.940 }, + { 41.2, 1.420, 490.073 }, + { 41.1, 4.863, 493.042 }, + { 36.3, 5.308, 312.199 }, + { 36.3, 0.382, 77.751 }, + { 40.6, 2.272, 529.691 }, + { 32.4, 5.911, 5.938 }, + { 31.2, 2.705, 1014.135 }, + { 32.7, 5.221, 41.054 }, + { 36.1, 4.878, 491.558 }, + { 30.2, 3.633, 30.711 }, + { 30.0, 3.308, 1028.362 }, + { 27.0, 1.776, 44.725 }, + { 27.8, 4.556, 7.114 }, + { 27.5, 0.972, 33.940 }, + { 24.9, 3.101, 144.147 }, + { 26.0, 2.997, 60.767 }, + { 21.4, 4.713, 278.259 }, + { 21.3, 0.690, 251.432 }, + { 23.7, 5.120, 176.651 }, + { 21.4, 0.863, 4.193 }, + { 23.4, 1.650, 173.682 }, + { 24.2, 3.566, 145.110 }, + { 20.2, 5.615, 24.118 }, + { 27.0, 4.143, 453.425 }, + { 24.0, 1.007, 213.299 }, + { 18.3, 1.980, 72.073 }, + { 18.3, 6.173, 189.393 }, + { 19.2, 4.652, 106.977 }, + { 17.6, 1.603, 62.251 }, + { 16.5, 1.699, 357.446 }, + { 20.1, 3.295, 114.399 }, + { 15.4, 4.388, 25.603 }, + { 19.2, 2.200, 343.219 }, + { 15.1, 3.668, 0.521 }, + { 14.0, 0.553, 129.919 }, + { 13.4, 5.858, 68.844 }, + { 15.4, 4.207, 567.824 }, + { 12.7, 3.528, 477.331 }, + { 11.7, 5.576, 31.232 }, + { 11.5, 0.891, 594.651 }, + { 10.5, 4.356, 32.716 }, + { 10.8, 5.218, 26.827 }, + { 10.1, 1.981, 40.581 }, + { 10.5, 5.273, 2.921 }, + { 9.2, 0.50, 64.96 }, + { 9.2, 0.68, 160.94 }, + { 8.7, 5.81, 6.59 }, + { 10.1, 4.512, 28.572 }, + { 10.4, 5.189, 42.586 }, + { 9.9, 3.77, 181.76 }, + { 8.3, 2.82, 43.24 }, + { 9.8, 1.49, 47.69 }, + { 7.6, 4.08, 389.95 }, + { 8.0, 2.78, 505.79 }, + { 7.4, 2.36, 11.05 }, + { 7.3, 1.62, 135.55 }, + { 9.5, 0.27, 426.60 }, + { 7.2, 0.83, 911.04 }, + { 7.0, 1.87, 206.19 }, + { 6.9, 0.84, 82.86 }, + { 7.9, 1.87, 38.65 }, + { 6.7, 3.98, 12.53 }, + { 6.4, 0.90, 487.37 }, + { 6.7, 1.34, 220.41 }, + { 7.7, 5.13, 23.91 }, + { 7.1, 6.00, 639.90 }, + { 8.3, 3.86, 37.61 }, + { 6.4, 2.42, 1059.38 }, + { 6.8, 1.97, 45.25 }, + { 6.4, 4.08, 35.69 }, + { 6.4, 0.65, 350.33 }, + /* 106 terms retained, 144 terms dropped, error 1.3e-06 a.u.*T */ + + /* neptune r, T^2 */ + { 4247.4, 5.89911, 38.13304 }, + { 217.6, 0.3458, 1.4845 }, + { 163.0, 2.2387, 168.0525 }, + { 156.3, 4.5941, 182.2796 }, + { 117.9, 5.1030, 484.4444 }, + { 112.4, 1.1900, 498.6715 }, + { 127.1, 2.8479, 35.1641 }, + { 99.5, 3.416, 175.166 }, + { 64.8, 3.462, 388.465 }, + { 77.3, 0.017, 491.558 }, + { 49.5, 4.070, 76.266 }, + { 39.3, 6.095, 1021.249 }, + { 36.5, 5.171, 137.033 }, + { 37.1, 5.973, 2.969 }, + { 30.5, 3.583, 33.680 }, + { 21.1, 0.768, 36.649 }, + { 13.9, 3.592, 395.579 }, + { 13.1, 5.093, 98.900 }, + { 11.4, 1.181, 381.352 }, + { 9.1, 2.35, 601.76 }, + { 8.5, 5.25, 2.45 }, + { 8.1, 4.96, 4.45 }, + { 7.4, 4.47, 189.39 }, + { 7.2, 1.92, 9.56 }, + { 7.3, 1.66, 1028.36 }, + { 8.1, 5.84, 220.41 }, + { 9.7, 0, 0 }, + { 6.6, 0.69, 144.15 }, + { 7.8, 1.14, 1059.38 }, + { 5.7, 6.25, 74.78 }, + { 5.6, 5.23, 46.21 }, + { 5.5, 4.59, 1014.14 }, + { 5.2, 5.23, 477.33 }, + { 5.5, 3.50, 183.76 }, + { 4.9, 3.53, 39.62 }, + { 4.8, 2.08, 41.10 }, + { 5.1, 0.20, 166.57 }, + { 4.8, 1.18, 169.54 }, + { 4.7, 1.51, 73.30 }, + { 6.1, 6.18, 71.81 }, + { 4.6, 3.92, 587.54 }, + { 5.8, 2.24, 176.65 }, + { 4.5, 2.84, 7.11 }, + { 4.3, 0.52, 446.31 }, + { 3.9, 0.26, 1550.94 }, + { 4.5, 3.01, 129.92 }, + { 3.7, 2.38, 160.94 }, + { 3.8, 3.79, 111.43 }, + { 4.1, 1.70, 983.12 }, + { 3.3, 1.08, 505.79 }, + { 4.0, 0.31, 494.74 }, + { 4.0, 5.97, 488.38 }, + { 3.9, 4.86, 60.77 }, + { 3.0, 2.02, 822.18 }, + { 4.0, 1.08, 374.24 }, + { 3.8, 5.23, 350.33 }, + { 2.8, 6.18, 704.86 }, + { 3.5, 0.79, 274.07 }, + { 2.8, 1.32, 386.98 }, + { 2.8, 5.37, 251.43 }, + { 3.1, 5.13, 426.60 }, + { 3.3, 5.61, 1124.34 }, + { 2.6, 0.68, 312.20 }, + { 2.6, 3.56, 567.82 }, + { 2.6, 1.46, 1035.48 }, + { 2.5, 5.19, 1227.43 }, + { 2.5, 4.12, 171.23 }, + { 2.5, 2.72, 179.10 }, + { 2.3, 0.96, 1019.76 }, + { 2.5, 0.70, 707.78 }, + { 2.5, 4.60, 693.55 }, + { 2.3, 0.74, 976.00 }, + /* 72 terms retained, 0 terms dropped, error 3.8e-07 a.u.*T^2 */ + + /* neptune r, T^3 */ + { 166.3, 4.5524, 38.1330 }, + { 22.4, 3.948, 168.053 }, + { 21.3, 2.863, 182.280 }, + { 16.2, 0.542, 484.444 }, + { 15.6, 5.757, 498.671 }, + { 11.9, 4.403, 1.484 }, + { 6.4, 5.19, 31.02 }, + { 3.7, 5.91, 1007.02 }, + { 3.7, 1.63, 388.47 }, + { 3.2, 0.70, 1558.05 }, + { 3.2, 1.88, 522.58 }, + { 3.3, 2.94, 76.27 }, + { 2.7, 1.87, 402.69 }, + { 3.2, 0.79, 536.80 }, + { 2.6, 5.77, 343.22 }, + { 2.6, 4.65, 500.16 }, + { 2.5, 4.79, 482.96 }, + { 2.5, 1.73, 395.58 }, + { 2.7, 2.21, 446.31 }, + { 2.4, 5.77, 485.93 }, + { 2.9, 6.20, 815.06 }, + { 2.3, 3.67, 497.19 }, + /* 22 terms retained, 0 terms dropped, error 2.2e-07 a.u.*T^3 */ + + /* neptune r, T^4 */ + { 4.2, 2.40, 477.33 }, + { 4.3, 0.10, 395.58 }, + { 3.5, 4.78, 1028.36 }, + { 3.2, 3.88, 505.79 }, + { 3.0, 1.04, 189.39 }, + { 2.3, 1.11, 182.28 }, + { 2.3, 5.68, 168.05 }, + /* 7 terms retained, 0 terms dropped, error 1.3e-07 a.u.*T^4 */ + /* end neptune */ +}; + +int vn_neptune[][3] = { + /* addresses for neptune l, b, r */ + /* T^0 */ { 0, 125, 182, }, + /* T^1 */ { 58, 148, 356, }, + /* T^2 */ { 90, 165, 462, }, + /* T^3 */ { 112, 175, 534, }, + /* T^4 */ { 122, 180, 556, }, + /* T^5 */ { 124, 181, 563, }, + /* end */ { 125, 182, 0, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_saturn[][3] = { + /* saturn l, T^0 */ + { 87401354.0, 0, 0 }, + { 11107659.8, 3.962050902, 213.299095438 }, + { 1414151.0, 4.58581516, 7.11354700 }, + { 398379.4, 0.5211203, 206.1855484 }, + { 350769.2, 3.3032990, 426.5981909 }, + { 206816.3, 0.2465837, 103.0927742 }, + { 79271.3, 3.840071, 220.412642 }, + { 23990.3, 4.669769, 110.206321 }, + { 16573.6, 0.437191, 419.484644 }, + { 14907.0, 5.769033, 316.391870 }, + { 15820.3, 0.938090, 632.783739 }, + { 14609.6, 1.565186, 3.932153 }, + { 13160.3, 4.448912, 14.227094 }, + { 15053.5, 2.716700, 639.897286 }, + { 13005.3, 5.981191, 11.045700 }, + { 10725.1, 3.129396, 202.253395 }, + { 5863.2, 0.23657, 529.69097 }, + { 5227.8, 4.20783, 3.18139 }, + { 6126.3, 1.76328, 277.03499 }, + { 5019.7, 3.17788, 433.71174 }, + { 4592.5, 0.61976, 199.07200 }, + { 4005.9, 2.24480, 63.73590 }, + { 2953.8, 0.98280, 95.97923 }, + { 3873.7, 3.22283, 138.51750 }, + { 2461.2, 2.03164, 735.87651 }, + { 3269.5, 0.77492, 949.17561 }, + { 1758.1, 3.26581, 522.57742 }, + { 1640.2, 5.50505, 846.08283 }, + { 1391.3, 4.02332, 323.50542 }, + { 1580.6, 4.37266, 309.27832 }, + { 1123.5, 2.83727, 415.55249 }, + { 1017.3, 3.71698, 227.52619 }, + { 848.6, 3.1915, 209.3669 }, + { 1087.2, 4.18343, 2.44768 }, + { 956.8, 0.5074, 1265.5675 }, + { 789.2, 5.0075, 0.9632 }, + { 687.0, 1.7471, 1052.2684 }, + { 654.5, 1.5989, 0.0482 }, + { 748.8, 2.1440, 853.1964 }, + { 634.0, 2.2989, 412.3711 }, + { 743.6, 5.2528, 224.3448 }, + { 852.7, 3.4214, 175.1661 }, + { 579.9, 3.0926, 74.7816 }, + { 624.9, 0.9705, 210.1177 }, + { 529.9, 4.4494, 117.3199 }, + { 542.6, 1.5182, 9.5612 }, + { 474.3, 5.4753, 742.9901 }, + { 448.5, 1.2899, 127.4718 }, + { 546.4, 2.1268, 350.3321 }, + { 478.1, 2.9649, 137.0330 }, + { 354.9, 3.0129, 838.9693 }, + { 451.8, 1.0444, 490.3341 }, + { 347.4, 1.5393, 340.7709 }, + { 343.5, 0.2460, 0.5213 }, + { 309.0, 3.4949, 216.4805 }, + { 322.2, 0.9614, 203.7379 }, + { 372.3, 2.2782, 217.2312 }, + { 321.5, 2.5718, 647.0108 }, + { 330.2, 0.2472, 1581.9593 }, + { 249.1, 1.4701, 1368.6603 }, + { 286.7, 2.3704, 351.8166 }, + { 220.2, 4.2042, 200.7689 }, + { 277.8, 0.4002, 211.8146 }, + { 204.5, 6.0108, 265.9893 }, + { 207.7, 0.4835, 1162.4747 }, + { 208.7, 1.3452, 625.6702 }, + { 182.5, 5.4912, 2.9208 }, + { 226.6, 4.9100, 12.5302 }, + { 207.7, 1.2830, 39.3569 }, + { 173.9, 1.8631, 0.7508 }, + { 184.7, 3.5034, 149.5632 }, + { 183.5, 0.9725, 4.1928 }, + { 146.1, 6.2310, 195.1398 }, + { 164.5, 0.4401, 5.4166 }, + { 147.5, 1.5353, 5.6291 }, + { 139.7, 4.2945, 21.3406 }, + { 131.3, 4.0683, 10.2949 }, + { 117.3, 2.6792, 1155.3612 }, + { 149.3, 5.7359, 52.6902 }, + { 122.4, 1.9759, 4.6659 }, + { 113.7, 5.5943, 1059.3819 }, + { 102.7, 1.1975, 1685.0521 }, + { 118.2, 5.3407, 554.0700 }, + { 109.3, 3.4381, 536.8045 }, + { 110.4, 0.1660, 1.4845 }, + { 125.0, 6.2774, 1898.3512 }, + { 89.9, 5.804, 114.138 }, + { 104.0, 2.1921, 88.8657 }, + { 112.4, 1.1050, 191.2077 }, + { 106.6, 4.0116, 956.2892 }, + { 91.4, 1.875, 38.133 }, + { 83.8, 5.488, 0.112 }, + { 83.5, 2.290, 628.852 }, + { 97.0, 4.537, 302.165 }, + { 100.6, 4.9651, 269.9214 }, + { 75.5, 2.180, 728.763 }, + { 96.3, 2.833, 275.551 }, + { 82.4, 3.055, 440.825 }, + { 73.9, 5.089, 1375.774 }, + { 71.6, 5.109, 65.220 }, + { 70.4, 4.868, 0.212 }, + { 69.8, 3.710, 14.978 }, + { 88.8, 3.863, 278.519 }, + { 68.1, 0.734, 1478.867 }, + { 66.5, 0.027, 70.849 }, + { 65.7, 2.022, 142.450 }, + { 75.8, 1.614, 284.149 }, + { 63.2, 3.495, 479.288 }, + { 62.5, 2.587, 422.666 }, + { 69.3, 3.440, 515.464 }, + { 79.0, 4.452, 35.425 }, + { 63.7, 3.317, 62.251 }, + { 52.9, 5.514, 0.261 }, + { 53.0, 3.185, 8.077 }, + { 54.5, 2.457, 22.091 }, + { 50.5, 4.267, 99.161 }, + { 55.2, 0.968, 942.062 }, + { 49.3, 2.386, 1471.753 }, + { 47.2, 2.025, 312.199 }, + { 61.1, 1.503, 210.851 }, + { 45.1, 0.931, 2001.444 }, + { 60.6, 2.687, 388.465 }, + { 43.5, 2.526, 288.081 }, + { 42.5, 3.818, 330.619 }, + { 39.9, 5.714, 408.439 }, + { 50.1, 6.032, 2214.743 }, + { 45.9, 0.542, 212.336 }, + { 54.2, 0.782, 191.958 }, + { 47.0, 4.599, 437.644 }, + { 42.4, 1.901, 430.530 }, + { 39.7, 1.633, 1066.495 }, + { 36.3, 0.848, 213.347 }, + { 35.5, 4.186, 215.747 }, + { 36.3, 3.933, 213.251 }, + { 38.0, 0.313, 423.417 }, + { 44.7, 1.125, 6.150 }, + { 37.9, 1.198, 2.708 }, + { 43.4, 1.374, 563.631 }, + { 43.8, 3.930, 525.498 }, + { 34.8, 1.016, 203.004 }, + { 31.8, 1.693, 0.160 }, + { 30.9, 6.135, 417.037 }, + { 36.4, 6.006, 18.159 }, + { 29.0, 1.197, 404.507 }, + { 32.8, 0.536, 107.025 }, + { 30.4, 0.723, 222.860 }, + { 32.6, 0.812, 1795.258 }, + { 37.8, 3.697, 1272.681 }, + { 27.7, 1.457, 7.162 }, + { 27.2, 1.897, 1045.155 }, + { 37.7, 4.520, 24.379 }, + { 34.9, 4.461, 214.262 }, + { 32.6, 0.664, 692.587 }, + { 30.3, 5.304, 33.940 }, + { 27.5, 6.227, 1.272 }, + { 26.7, 4.567, 7.065 }, + { 31.7, 5.498, 56.622 }, + { 28.1, 5.644, 128.956 }, + { 32.0, 5.223, 92.047 }, + { 27.0, 0.067, 205.222 }, + { 31.8, 5.592, 6069.777 }, + { 31.0, 0.372, 703.633 }, + { 29.4, 0.147, 131.404 }, + { 26.2, 5.413, 140.002 }, + { 25.7, 4.360, 32.243 }, + /* 165 terms retained, 987 terms dropped, error 1.4" */ + + /* saturn l, T^1 */ + { 21354295596.0, 0, 0 }, + { 1296855.0, 1.82820545, 213.29909544 }, + { 564347.6, 2.8850014, 7.1135470 }, + { 98323.0, 1.080701, 426.598191 }, + { 107678.8, 2.2776991, 206.1855484 }, + { 40254.6, 2.041283, 220.412642 }, + { 19941.7, 1.279547, 103.092774 }, + { 10511.7, 2.748804, 14.227094 }, + { 6939.2, 0.40493, 639.89729 }, + { 4803.3, 2.44194, 419.48464 }, + { 4056.3, 2.92167, 110.20632 }, + { 3768.6, 3.64966, 3.93215 }, + { 3384.7, 2.41694, 3.18139 }, + { 3302.2, 1.26256, 433.71174 }, + { 3071.4, 2.32739, 199.07200 }, + { 1953.0, 3.56395, 11.04570 }, + { 1249.3, 2.62804, 95.97923 }, + { 921.7, 1.9609, 227.5262 }, + { 705.6, 4.4169, 529.6910 }, + { 649.7, 6.1742, 202.2534 }, + { 627.6, 6.1109, 309.2783 }, + { 486.8, 6.0400, 853.1964 }, + { 468.4, 4.6171, 63.7359 }, + { 478.5, 4.9878, 522.5774 }, + { 417.0, 2.1171, 323.5054 }, + { 407.6, 1.2995, 209.3669 }, + { 343.8, 3.9585, 412.3711 }, + { 339.7, 3.6340, 316.3919 }, + { 335.9, 3.7717, 735.8765 }, + { 331.9, 2.8608, 210.1177 }, + { 352.5, 2.3171, 632.7837 }, + { 289.4, 2.7326, 117.3199 }, + { 265.8, 0.5434, 647.0108 }, + { 230.5, 1.6443, 216.4805 }, + { 280.9, 5.7440, 2.4477 }, + { 191.7, 2.9651, 224.3448 }, + { 172.9, 4.0770, 846.0828 }, + { 167.1, 2.5975, 21.3406 }, + { 136.3, 2.2858, 10.2949 }, + { 131.4, 3.4411, 742.9901 }, + { 127.8, 4.0953, 217.2312 }, + { 108.9, 6.1614, 415.5525 }, + { 93.9, 3.484, 1052.268 }, + { 92.5, 3.948, 88.866 }, + { 97.6, 4.728, 838.969 }, + { 86.6, 1.220, 440.825 }, + { 83.5, 3.113, 625.670 }, + { 77.6, 6.244, 302.165 }, + { 61.6, 1.828, 195.140 }, + { 61.9, 4.293, 127.472 }, + { 67.1, 0.290, 4.666 }, + { 56.9, 5.019, 137.033 }, + { 54.2, 5.126, 490.334 }, + { 54.6, 0.284, 74.782 }, + { 51.4, 1.458, 536.805 }, + { 65.8, 5.648, 9.561 }, + { 57.8, 2.476, 191.958 }, + { 44.4, 2.709, 5.417 }, + { 46.8, 1.177, 149.563 }, + { 40.4, 3.889, 728.763 }, + { 37.8, 2.534, 12.530 }, + { 46.6, 5.148, 515.464 }, + { 45.9, 2.232, 956.289 }, + { 40.4, 0.413, 269.921 }, + { 37.2, 3.782, 2.921 }, + { 33.8, 3.211, 1368.660 }, + { 38.0, 0.647, 422.666 }, + { 32.9, 0.301, 351.817 }, + { 33.0, 5.430, 1066.495 }, + { 30.3, 2.841, 203.004 }, + { 35.1, 6.084, 5.629 }, + { 29.7, 3.391, 1059.382 }, + { 33.2, 4.641, 277.035 }, + { 31.9, 4.386, 1155.361 }, + { 28.9, 2.026, 330.619 }, + { 28.3, 2.742, 265.989 }, + { 30.1, 6.187, 284.149 }, + { 31.3, 2.435, 52.690 }, + { 26.5, 4.512, 340.771 }, + { 22.0, 5.144, 4.193 }, + { 22.2, 1.965, 203.738 }, + { 20.8, 6.160, 860.310 }, + { 21.7, 2.676, 942.062 }, + { 22.6, 5.886, 210.851 }, + { 19.8, 2.313, 437.644 }, + { 19.4, 4.766, 70.849 }, + { 19.3, 4.102, 18.159 }, + { 22.7, 4.137, 191.208 }, + { 18.2, 0.903, 429.780 }, + { 17.7, 1.850, 234.640 }, + { 17.5, 2.447, 423.417 }, + { 15.4, 4.238, 1162.475 }, + { 14.6, 3.597, 1045.155 }, + { 14.1, 2.943, 1685.052 }, + { 16.3, 4.057, 949.176 }, + { 13.3, 6.245, 38.133 }, + { 15.9, 1.064, 56.622 }, + { 14.1, 1.435, 408.439 }, + { 13.1, 5.758, 138.517 }, + { 15.8, 5.594, 6.150 }, + { 15.0, 5.772, 22.091 }, + { 16.0, 1.939, 1272.681 }, + { 16.8, 5.967, 628.852 }, + { 12.8, 4.247, 405.258 }, + { 13.6, 4.099, 1471.753 }, + { 15.1, 0.741, 200.769 }, + { 11.0, 1.550, 223.594 }, + { 11.7, 1.812, 124.433 }, + { 10.3, 3.468, 1375.774 }, + { 12.1, 1.857, 131.404 }, + { 10.1, 2.382, 107.025 }, + { 9.9, 3.95, 430.53 }, + { 9.8, 2.55, 99.91 }, + { 10.6, 5.367, 215.747 }, + { 12.1, 4.845, 831.856 }, + { 10.2, 6.077, 32.243 }, + { 9.2, 3.65, 142.45 }, + { 9.0, 1.24, 106.27 }, + { 9.3, 5.81, 7.16 }, + { 9.7, 1.39, 145.63 }, + { 8.4, 4.42, 703.63 }, + { 8.4, 5.64, 62.25 }, + { 8.2, 2.42, 1258.45 }, + { 7.8, 0.53, 654.12 }, + { 7.6, 3.75, 312.20 }, + { 7.2, 0.28, 0.75 }, + { 8.2, 6.22, 14.98 }, + { 7.1, 0.53, 388.47 }, + { 6.6, 3.49, 35.42 }, + { 9.0, 4.95, 208.63 }, + { 9.0, 0.08, 288.08 }, + { 6.4, 3.33, 1361.55 }, + { 6.5, 2.89, 114.14 }, + { 6.7, 0.24, 8.08 }, + { 7.3, 4.85, 222.86 }, + { 6.3, 3.81, 1788.14 }, + { 6.9, 2.05, 99.16 }, + { 6.6, 5.83, 483.22 }, + /* 138 terms retained, 504 terms dropped, error 0.32"*T */ + + /* saturn l, T^2 */ + { 116441.2, 1.1798785, 7.1135470 }, + { 91920.8, 0.074253, 213.299095 }, + { 90592.3, 0, 0 }, + { 15276.9, 4.064920, 206.185548 }, + { 10631.4, 0.257783, 220.412642 }, + { 10605.0, 5.409636, 426.598191 }, + { 4265.4, 1.04596, 14.22709 }, + { 1215.5, 2.91860, 103.09277 }, + { 1164.7, 4.60942, 639.89729 }, + { 1082.0, 5.69130, 433.71174 }, + { 1020.1, 0.63369, 3.18139 }, + { 1044.8, 4.04206, 199.07200 }, + { 633.6, 4.3883, 419.4846 }, + { 549.3, 5.5730, 3.9322 }, + { 456.9, 1.2684, 110.2063 }, + { 425.1, 0.2094, 227.5262 }, + { 273.7, 4.2884, 95.9792 }, + { 161.6, 1.3814, 11.0457 }, + { 129.5, 1.5659, 309.2783 }, + { 117.0, 3.8812, 853.1964 }, + { 105.4, 4.9000, 647.0108 }, + { 101.0, 0.8927, 21.3406 }, + { 95.2, 5.626, 412.371 }, + { 81.9, 1.025, 117.320 }, + { 74.9, 4.762, 210.118 }, + { 82.7, 6.050, 216.480 }, + { 95.7, 2.911, 316.392 }, + { 63.7, 0.352, 323.505 }, + { 84.9, 5.735, 209.367 }, + { 60.6, 4.875, 632.784 }, + { 66.5, 0.483, 10.295 }, + { 67.2, 0.456, 522.577 }, + { 53.3, 2.747, 529.691 }, + { 45.8, 5.693, 440.825 }, + { 45.3, 1.669, 202.253 }, + { 42.3, 5.708, 88.866 }, + { 32.1, 0.071, 63.736 }, + { 31.6, 1.672, 302.165 }, + { 31.1, 4.164, 191.958 }, + { 24.6, 5.656, 735.877 }, + { 26.6, 0.833, 224.345 }, + { 20.1, 5.944, 217.231 }, + { 17.5, 4.900, 625.670 }, + { 17.1, 1.626, 742.990 }, + { 13.7, 3.765, 195.140 }, + { 12.2, 4.718, 203.004 }, + { 11.9, 0.126, 234.640 }, + { 16.0, 0.579, 515.464 }, + { 11.2, 5.922, 536.805 }, + { 14.1, 0.207, 838.969 }, + { 11.0, 5.602, 728.763 }, + { 11.7, 3.121, 846.083 }, + { 10.0, 4.155, 860.310 }, + { 10.6, 3.203, 1066.495 }, + { 10.1, 0.257, 330.619 }, + { 9.5, 0.46, 956.29 }, + { 10.2, 4.987, 422.666 }, + { 8.3, 2.14, 269.92 }, + { 7.2, 5.40, 1052.27 }, + { 7.7, 5.25, 429.78 }, + { 6.4, 4.46, 284.15 }, + { 5.9, 5.41, 149.56 }, + { 7.5, 4.03, 9.56 }, + { 5.8, 4.29, 415.55 }, + { 6.1, 5.93, 405.26 }, + { 5.7, 0.02, 124.43 }, + { 5.7, 6.02, 223.59 }, + { 4.8, 4.93, 654.12 }, + { 4.7, 2.27, 18.16 }, + { 4.5, 4.41, 942.06 }, + { 5.6, 0.30, 127.47 }, + { 5.5, 5.54, 949.18 }, + { 4.1, 4.69, 74.78 }, + { 4.1, 5.31, 1045.15 }, + { 4.2, 2.89, 56.62 }, + { 4.9, 3.20, 277.03 }, + { 3.9, 3.30, 490.33 }, + { 3.9, 6.10, 81.75 }, + { 3.8, 4.93, 52.69 }, + { 4.6, 6.14, 1155.36 }, + { 3.7, 0.41, 137.03 }, + { 3.4, 4.29, 99.91 }, + { 3.6, 0.20, 1272.68 }, + { 3.9, 0.37, 12.53 }, + { 3.2, 1.57, 1059.38 }, + { 4.1, 0.29, 831.86 }, + { 3.7, 0.15, 437.64 }, + { 2.9, 3.13, 70.85 }, + { 2.8, 0.33, 191.21 }, + { 2.7, 1.88, 295.05 }, + { 3.5, 4.77, 423.42 }, + { 2.6, 5.15, 1368.66 }, + { 2.5, 3.90, 210.85 }, + { 2.5, 1.59, 32.24 }, + { 2.6, 3.59, 131.40 }, + { 2.3, 4.77, 351.82 }, + { 2.4, 5.83, 106.27 }, + { 2.2, 5.98, 6062.66 }, + { 2.2, 2.06, 6076.89 }, + { 2.2, 5.95, 145.63 }, + { 2.7, 3.38, 408.44 }, + { 2.3, 3.14, 22.09 }, + { 2.1, 1.12, 9992.87 }, + { 2.1, 3.48, 10007.10 }, + { 2.6, 5.12, 265.99 }, + { 1.8, 4.15, 1258.45 }, + { 1.8, 5.05, 1361.55 }, + { 1.8, 4.14, 107.02 }, + { 1.9, 4.52, 138.52 }, + { 1.7, 1.36, 231.46 }, + { 2.0, 5.87, 1471.75 }, + { 2.1, 5.23, 1265.57 }, + { 1.6, 5.62, 447.94 }, + { 1.6, 3.75, 628.85 }, + { 1.7, 6.24, 1148.25 }, + /* 115 terms retained, 206 terms dropped, error 0.074"*T^2 */ + + /* saturn l, T^3 */ + { 16038.7, 5.739454, 7.113547 }, + { 4249.8, 4.58540, 213.29910 }, + { 1906.5, 4.76082, 220.41264 }, + { 1465.7, 5.91327, 206.18555 }, + { 1162.0, 5.61973, 14.22709 }, + { 1066.6, 3.60817, 426.59819 }, + { 239.4, 3.8609, 433.7117 }, + { 237.0, 5.7683, 199.0720 }, + { 165.6, 5.1164, 3.1814 }, + { 131.4, 4.7433, 227.5262 }, + { 151.4, 2.7359, 639.8973 }, + { 61.6, 4.743, 103.093 }, + { 63.4, 0.229, 419.485 }, + { 40.4, 5.473, 21.341 }, + { 40.2, 5.964, 95.979 }, + { 38.7, 5.834, 110.206 }, + { 28.0, 3.012, 647.011 }, + { 25.0, 0.988, 3.932 }, + { 18.1, 1.025, 412.371 }, + { 17.9, 3.319, 309.278 }, + { 16.2, 3.898, 440.825 }, + { 15.8, 5.617, 117.320 }, + { 19.0, 1.916, 853.196 }, + { 18.3, 4.967, 10.295 }, + { 12.9, 1.181, 88.866 }, + { 17.9, 4.204, 216.480 }, + { 11.5, 5.575, 11.046 }, + { 10.5, 5.929, 191.958 }, + { 10.4, 3.948, 209.367 }, + { 8.7, 3.39, 302.16 }, + { 7.6, 4.88, 323.51 }, + { 6.7, 0.38, 632.78 }, + { 5.9, 1.06, 210.12 }, + { 5.4, 4.64, 234.64 }, + { 6.3, 2.25, 522.58 }, + { 3.6, 2.31, 515.46 }, + { 3.2, 2.20, 860.31 }, + { 3.7, 3.14, 0 }, + { 2.6, 4.93, 224.34 }, + { 2.5, 0.42, 625.67 }, + { 2.2, 3.20, 202.25 }, + { 2.4, 4.77, 330.62 }, + { 2.9, 0.59, 529.69 }, + { 2.0, 4.40, 124.43 }, + { 2.2, 1.35, 405.26 }, + { 2.3, 3.35, 429.78 }, + { 2.0, 3.07, 654.12 }, + { 2.0, 1.03, 728.76 }, + { 1.9, 3.09, 422.67 }, + { 1.8, 4.15, 536.80 }, + { 2.2, 1.19, 1066.50 }, + { 2.1, 4.16, 223.59 }, + { 1.5, 0.38, 316.39 }, + { 1.7, 5.83, 195.14 }, + { 1.5, 1.58, 81.75 }, + { 1.6, 6.04, 742.99 }, + { 1.3, 1.66, 63.74 }, + { 1.3, 5.02, 956.29 }, + { 1.4, 2.11, 838.97 }, + { 1.2, 3.88, 269.92 }, + { 1.0, 3.73, 295.05 }, + { 1.3, 1.38, 735.88 }, + { 1.3, 2.33, 217.23 }, + { 0.9, 2.76, 284.15 }, + { 0.9, 0.71, 846.08 }, + { 0.9, 3.84, 447.94 }, + { 0.9, 3.31, 18.16 }, + { 0.8, 4.71, 56.62 }, + { 0.9, 2.02, 831.86 }, + { 0.8, 0.80, 1045.15 }, + { 0.7, 4.27, 437.64 }, + { 0.7, 6.18, 942.06 }, + { 0.8, 2.41, 203.00 }, + { 0.7, 1.65, 423.42 }, + { 0.5, 2.86, 184.84 }, + { 0.5, 6.26, 1059.38 }, + { 0.5, 3.43, 149.56 }, + { 0.5, 4.88, 1272.68 }, + { 0.4, 5.40, 408.44 }, + { 0.4, 4.06, 543.92 }, + { 0.4, 1.69, 1155.36 }, + { 0.4, 1.22, 1052.27 }, + /* 82 terms retained, 66 terms dropped, error 0.015"*T^3 */ + + /* saturn l, T^4 */ + { 1661.9, 3.99826, 7.11355 }, + { 257.1, 2.9844, 220.4126 }, + { 236.3, 3.9024, 14.2271 }, + { 149.4, 2.7411, 213.2991 }, + { 109.6, 1.5152, 206.1855 }, + { 114.0, 3.1416, 0 }, + { 68.4, 1.721, 426.598 }, + { 37.7, 1.238, 199.072 }, + { 40.1, 2.046, 433.712 }, + { 31.2, 3.011, 227.526 }, + { 15.1, 0.829, 639.897 }, + { 9.4, 3.71, 21.34 }, + { 5.7, 2.42, 419.48 }, + { 4.5, 1.45, 95.98 }, + { 5.6, 1.16, 647.01 }, + { 4.5, 2.12, 440.83 }, + { 3.2, 4.09, 110.21 }, + { 2.9, 2.77, 412.37 }, + { 2.8, 3.01, 88.87 }, + { 2.6, 0.00, 853.20 }, + { 2.6, 0.39, 103.09 }, + { 1.9, 5.08, 309.28 }, + { 2.2, 3.78, 117.32 }, + { 1.8, 5.19, 302.16 }, + { 1.9, 2.83, 234.64 }, + { 1.8, 2.24, 216.48 }, + { 1.2, 1.55, 191.96 }, + { 0.8, 3.45, 323.51 }, + { 0.8, 4.83, 210.12 }, + { 0.6, 4.19, 515.46 }, + { 0.6, 2.29, 209.37 }, + { 0.6, 4.03, 522.58 }, + { 0.6, 2.38, 632.78 }, + { 0.6, 0.30, 860.31 }, + { 0.6, 2.17, 124.43 }, + { 0.4, 2.24, 447.94 }, + { 0.4, 5.45, 1066.50 }, + { 0.5, 1.27, 654.12 }, + { 0.5, 3.20, 405.26 }, + { 0.4, 3.12, 330.62 }, + { 0.4, 3.39, 81.75 }, + { 0.3, 4.12, 838.97 }, + { 0.3, 3.18, 529.69 }, + { 0.3, 1.41, 429.78 }, + { 0.3, 3.19, 1464.64 }, + { 0.3, 2.94, 728.76 }, + { 0.2, 3.67, 1148.25 }, + { 0.3, 2.58, 1045.15 }, + { 0.2, 3.58, 1155.36 }, + { 0.3, 2.05, 1677.94 }, + { 0.2, 2.62, 536.80 }, + { 0.3, 2.48, 625.67 }, + { 0.2, 4.39, 1574.85 }, + { 0.2, 1.26, 422.67 }, + { 0.2, 2.33, 223.59 }, + { 0.2, 1.09, 742.99 }, + { 0.2, 0.70, 824.74 }, + { 0.2, 5.03, 203.00 }, + { 0.2, 0.40, 867.42 }, + { 0.2, 3.68, 831.86 }, + { 0.2, 5.75, 1073.61 }, + { 0.2, 3.02, 1781.03 }, + { 0.1, 2.28, 295.05 }, + { 0.1, 3.48, 956.29 }, + { 0.2, 1.91, 942.06 }, + { 0.1, 6.17, 316.39 }, + /* 66 terms retained, 2 terms dropped, error 0.0049"*T^4 */ + + /* saturn l, T^5 */ + { 123.6, 2.2592, 7.1135 }, + { 34.2, 2.163, 14.227 }, + { 27.5, 1.199, 220.413 }, + { 5.8, 1.22, 227.53 }, + { 5.3, 0.24, 433.71 }, + { 3.7, 6.23, 426.60 }, + { 3.1, 2.97, 199.07 }, + { 2.9, 4.29, 206.19 }, + { 1.6, 6.25, 213.30 }, + { 1.3, 5.28, 639.90 }, + { 0.9, 5.57, 647.01 }, + { 0.8, 6.18, 191.96 }, + { 0.8, 0.69, 302.16 }, + { 1.0, 0.24, 440.83 }, + { 1.0, 3.14, 0 }, + { 0.5, 4.88, 88.87 }, + { 0.5, 4.78, 419.48 }, + { 0.3, 4.32, 853.20 }, + { 0.4, 5.70, 654.12 }, + { 0.2, 2.05, 323.51 }, + { 0.3, 1.11, 234.64 }, + { 0.2, 0.89, 309.28 }, + { 0.3, 5.10, 95.98 }, + { 0.2, 2.40, 515.46 }, + { 0.2, 4.70, 860.31 }, + { 0.1, 0.49, 117.32 }, + /* 26 terms retained, 1 terms dropped, error 0.0022"*T^5 */ + /* end saturn l */ + + /* saturn b, T^0 */ + { 4330678.0, 3.60284428, 213.29909544 }, + { 240348.3, 2.8523849, 426.5981909 }, + { 84745.9, 0, 0 }, + { 30863.4, 3.484415, 220.412642 }, + { 34116.1, 0.572973, 206.185548 }, + { 14734.1, 2.118466, 639.897286 }, + { 9916.7, 5.79003, 419.48464 }, + { 6993.6, 4.73605, 7.11355 }, + { 4807.6, 5.43305, 316.39187 }, + { 4788.4, 4.96513, 110.20632 }, + { 3432.1, 2.73256, 433.71174 }, + { 1506.1, 6.01305, 103.09277 }, + { 1060.3, 5.63099, 529.69097 }, + { 969.1, 5.2043, 632.7837 }, + { 942.1, 1.3965, 853.1964 }, + { 707.6, 3.8030, 323.5054 }, + { 552.3, 5.1315, 202.2534 }, + { 399.7, 3.3589, 227.5262 }, + { 316.1, 1.9972, 647.0108 }, + { 319.4, 3.6257, 209.3669 }, + { 284.5, 4.8865, 224.3448 }, + { 314.2, 0.4651, 217.2312 }, + { 236.4, 2.1389, 11.0457 }, + { 215.4, 5.9498, 846.0828 }, + { 208.5, 2.1200, 415.5525 }, + { 179.0, 2.9536, 63.7359 }, + { 207.2, 0.7302, 199.0720 }, + { 139.1, 1.9982, 735.8765 }, + { 134.9, 5.2450, 742.9901 }, + { 140.6, 0.6442, 490.3341 }, + { 121.7, 3.1154, 522.5774 }, + { 139.2, 4.5954, 14.2271 }, + { 115.5, 3.1089, 216.4805 }, + { 114.2, 0.9626, 210.1177 }, + { 96.4, 4.482, 117.320 }, + { 80.6, 1.317, 277.035 }, + { 73.0, 3.060, 536.805 }, + { 69.3, 4.924, 309.278 }, + { 74.3, 2.894, 149.563 }, + { 68.0, 2.180, 351.817 }, + { 61.7, 0.677, 1066.495 }, + { 56.6, 2.610, 440.825 }, + { 48.9, 5.787, 95.979 }, + { 48.2, 2.182, 74.782 }, + { 38.3, 5.292, 1059.382 }, + { 36.3, 1.633, 628.852 }, + { 35.1, 1.713, 1052.268 }, + { 34.3, 2.457, 422.666 }, + { 34.3, 5.980, 412.371 }, + { 33.8, 1.141, 949.176 }, + { 31.6, 4.147, 437.644 }, + { 36.8, 6.278, 1162.475 }, + { 27.0, 1.272, 860.310 }, + /* 53 terms retained, 447 terms dropped, error 0.82" */ + + /* saturn b, T^1 */ + { 397555.0, 5.3328999, 213.2990954 }, + { 49478.6, 3.141593, 0 }, + { 18571.6, 6.099192, 426.598191 }, + { 14800.6, 2.305861, 206.185548 }, + { 9644.0, 1.69675, 220.41264 }, + { 3757.2, 1.25430, 419.48464 }, + { 2716.6, 5.91167, 639.89729 }, + { 1455.3, 0.85162, 433.71174 }, + { 1290.6, 2.91771, 7.11355 }, + { 852.6, 0.4357, 316.3919 }, + { 284.4, 1.6188, 227.5262 }, + { 292.2, 5.3157, 853.1964 }, + { 275.1, 3.8886, 103.0928 }, + { 297.7, 0.9191, 632.7837 }, + { 172.4, 0.0522, 647.0108 }, + { 127.7, 1.2071, 529.6910 }, + { 166.2, 2.4435, 199.0720 }, + { 158.2, 5.2085, 110.2063 }, + { 109.8, 2.4570, 217.2312 }, + { 81.8, 2.758, 210.118 }, + { 81.0, 2.860, 14.227 }, + { 68.7, 1.655, 202.253 }, + { 59.3, 1.824, 323.505 }, + { 65.2, 1.255, 216.480 }, + { 61.0, 1.253, 209.367 }, + { 46.4, 0.815, 440.825 }, + { 36.2, 1.819, 224.345 }, + { 34.0, 2.840, 117.320 }, + { 32.2, 1.187, 846.083 }, + { 33.1, 1.306, 412.371 }, + { 27.3, 4.647, 1066.495 }, + { 22.8, 4.129, 415.552 }, + { 27.1, 4.442, 11.046 }, + { 18.1, 5.564, 860.310 }, + { 20.9, 1.410, 309.278 }, + { 14.9, 1.343, 95.979 }, + { 15.3, 1.224, 63.736 }, + { 14.6, 1.008, 536.805 }, + { 12.8, 2.271, 742.990 }, + { 12.8, 4.889, 522.577 }, + { 13.1, 2.460, 490.334 }, + { 11.9, 1.873, 423.417 }, + { 13.0, 3.217, 277.035 }, + { 9.9, 3.12, 625.67 }, + { 12.7, 0.295, 422.666 }, + { 9.6, 1.75, 330.62 }, + { 8.1, 2.42, 430.53 }, + { 8.2, 4.68, 215.75 }, + { 9.0, 0.46, 429.78 }, + { 6.5, 3.01, 949.18 }, + { 7.3, 5.97, 149.56 }, + { 6.6, 3.91, 351.82 }, + { 6.8, 1.52, 437.64 }, + /* 53 terms retained, 207 terms dropped, error 0.21"*T */ + + /* saturn b, T^2 */ + { 20630.0, 0.504824, 213.299095 }, + { 3719.6, 3.99833, 206.18555 }, + { 1627.2, 6.18190, 220.41264 }, + { 1346.1, 0, 0 }, + { 705.8, 3.0391, 419.4846 }, + { 365.0, 5.0993, 426.5982 }, + { 329.6, 5.2790, 433.7117 }, + { 219.3, 3.8284, 639.8973 }, + { 139.4, 1.0427, 7.1135 }, + { 104.0, 6.1573, 227.5262 }, + { 93.0, 1.980, 316.392 }, + { 71.2, 4.148, 199.072 }, + { 51.9, 2.884, 632.784 }, + { 49.0, 4.434, 647.011 }, + { 41.4, 3.159, 853.196 }, + { 28.6, 4.530, 210.118 }, + { 24.0, 1.116, 14.227 }, + { 20.5, 4.351, 217.231 }, + { 19.5, 5.308, 440.825 }, + { 18.3, 0.854, 110.206 }, + { 15.7, 4.258, 103.093 }, + { 16.8, 5.681, 216.480 }, + { 13.6, 2.999, 412.371 }, + { 11.6, 2.527, 529.691 }, + { 8.0, 3.32, 202.25 }, + { 6.6, 0.29, 323.51 }, + { 6.3, 1.16, 117.32 }, + { 5.9, 3.58, 309.28 }, + { 6.6, 5.56, 209.37 }, + { 5.6, 2.48, 1066.50 }, + { 6.2, 3.61, 860.31 }, + { 4.2, 3.02, 846.08 }, + { 3.6, 4.80, 625.67 }, + { 3.4, 3.77, 423.42 }, + { 3.4, 6.04, 234.64 }, + { 2.6, 5.64, 735.88 }, + { 2.8, 4.82, 429.78 }, + { 2.8, 4.48, 654.12 }, + { 2.6, 0.22, 522.58 }, + { 2.6, 3.29, 95.98 }, + { 2.4, 0.03, 415.55 }, + { 2.1, 4.56, 422.67 }, + { 2.3, 6.25, 330.62 }, + { 1.8, 5.53, 536.80 }, + { 1.8, 5.06, 277.03 }, + { 1.6, 5.54, 224.34 }, + /* 46 terms retained, 65 terms dropped, error 0.045"*T^2 */ + + /* saturn b, T^3 */ + { 666.3, 1.9901, 213.2991 }, + { 632.4, 5.6978, 206.1855 }, + { 398.1, 0, 0 }, + { 187.8, 4.3378, 220.4126 }, + { 91.9, 4.841, 419.485 }, + { 42.4, 2.381, 426.598 }, + { 51.5, 3.421, 433.712 }, + { 25.7, 4.402, 227.526 }, + { 20.6, 5.853, 199.072 }, + { 18.1, 1.993, 639.897 }, + { 10.9, 5.373, 7.114 }, + { 9.6, 2.55, 647.01 }, + { 7.1, 3.46, 316.39 }, + { 6.0, 4.80, 632.78 }, + { 5.8, 0.02, 210.12 }, + { 4.9, 5.64, 14.23 }, + { 4.5, 1.22, 853.20 }, + { 5.5, 3.52, 440.83 }, + { 3.5, 4.71, 412.37 }, + { 2.9, 0.63, 103.09 }, + { 2.2, 3.72, 216.48 }, + { 2.0, 6.11, 217.23 }, + { 1.4, 1.69, 860.31 }, + { 1.2, 4.31, 234.64 }, + { 1.2, 5.75, 309.28 }, + { 0.8, 5.69, 117.32 }, + { 0.7, 0.60, 1066.50 }, + { 0.7, 0.22, 625.67 }, + { 0.8, 5.48, 202.25 }, + { 0.9, 2.66, 654.12 }, + { 0.5, 2.86, 429.78 }, + { 0.5, 4.18, 529.69 }, + { 0.5, 4.52, 323.51 }, + /* 33 terms retained, 25 terms dropped, error 0.012"*T^3 */ + + /* saturn b, T^4 */ + { 80.4, 1.119, 206.186 }, + { 31.7, 3.122, 213.299 }, + { 17.1, 2.481, 220.413 }, + { 11.8, 3.142, 0 }, + { 9.0, 0.38, 419.48 }, + { 6.2, 1.56, 433.71 }, + { 4.7, 1.28, 199.07 }, + { 4.8, 2.63, 227.53 }, + { 1.5, 1.43, 426.60 }, + { 1.4, 0.67, 647.01 }, + { 1.1, 6.18, 639.90 }, + { 1.1, 1.72, 440.83 }, + { 0.7, 3.85, 14.23 }, + { 0.7, 3.49, 7.11 }, + { 0.5, 0.47, 632.78 }, + { 0.5, 0.31, 412.37 }, + { 0.3, 5.86, 853.20 }, + { 0.3, 2.50, 234.64 }, + { 0.2, 5.39, 316.39 }, + { 0.2, 2.11, 210.12 }, + { 0.2, 6.10, 860.31 }, + { 0.2, 5.95, 216.48 }, + { 0.1, 1.99, 625.67 }, + { 0.1, 0.86, 654.12 }, + { 0.1, 5.04, 117.32 }, + { 0.1, 0.45, 110.21 }, + /* 26 terms retained, 0 terms dropped, error 0.0025"*T^4 */ + + /* saturn b, T^5 */ + { 7.9, 2.82, 206.19 }, + { 1.0, 0.51, 220.41 }, + { 0.8, 2.99, 199.07 }, + { 1.0, 3.14, 0 }, + { 0.6, 5.96, 433.71 }, + { 0.6, 0.78, 227.53 }, + { 0.4, 2.39, 419.48 }, + { 0.1, 5.11, 647.01 }, + /* 8 terms retained, 3 terms dropped, error 0.0012"*T^5 */ + /* end saturn b */ + + /* saturn r, T^0 */ + { 955758135.8, 0, 0 }, + { 52921382.5, 2.392262197, 213.299095438 }, + { 1873679.9, 5.23549605, 206.18554844 }, + { 1464664.0, 1.64763045, 426.59819088 }, + { 821891.1, 5.9352003, 316.3918697 }, + { 547506.9, 5.0153263, 103.0927742 }, + { 371684.4, 2.2711483, 220.4126424 }, + { 361778.4, 3.1390430, 7.1135470 }, + { 140617.5, 5.7040665, 632.7837393 }, + { 108974.7, 3.2931360, 110.2063212 }, + { 69007.0, 5.940996, 419.484644 }, + { 61053.3, 0.940378, 639.897286 }, + { 48913.0, 1.557334, 202.253395 }, + { 34143.8, 0.195186, 277.034994 }, + { 32401.7, 5.470846, 949.175609 }, + { 20936.6, 0.463492, 735.876514 }, + { 20839.1, 1.521026, 433.711738 }, + { 20746.7, 5.332557, 199.072001 }, + { 15298.5, 3.059437, 529.690965 }, + { 14296.5, 2.604335, 323.505417 }, + { 11993.3, 5.980514, 846.082835 }, + { 11380.3, 1.731057, 522.577418 }, + { 12884.1, 1.648923, 138.517497 }, + { 7752.8, 5.85191, 95.97923 }, + { 9796.1, 5.20476, 1265.56748 }, + { 6466.0, 0.17733, 1052.26838 }, + { 6770.6, 3.00433, 14.22709 }, + { 5850.4, 1.45520, 415.55249 }, + { 5307.5, 0.59738, 63.73590 }, + { 4695.7, 2.14919, 227.52619 }, + { 4044.0, 1.64010, 209.36694 }, + { 3688.1, 0.78016, 412.37110 }, + { 3376.5, 3.69528, 224.34480 }, + { 2885.3, 1.38764, 838.96929 }, + { 2976.0, 5.68468, 210.11770 }, + { 3419.6, 4.94549, 1581.95935 }, + { 3460.9, 1.85089, 175.16606 }, + { 3400.6, 0.55387, 350.33212 }, + { 2507.6, 3.53852, 742.99006 }, + { 2448.3, 6.18412, 1368.66025 }, + { 2406.1, 2.96559, 117.31987 }, + { 2881.2, 0.17961, 853.19638 }, + { 2174.0, 0.01509, 340.77089 }, + { 2024.5, 5.05411, 11.04570 }, + { 1740.3, 2.34657, 309.27832 }, + { 1861.4, 5.93362, 625.67019 }, + { 1888.4, 0.02968, 3.93215 }, + { 1610.9, 1.17302, 74.78160 }, + { 1462.6, 1.92588, 216.48049 }, + { 1474.5, 5.67670, 203.73787 }, + { 1395.1, 5.93669, 127.47180 }, + { 1781.2, 0.76314, 217.23125 }, + { 1817.2, 5.77713, 490.33409 }, + { 1472.4, 1.40065, 137.03302 }, + { 1304.1, 0.77236, 647.01083 }, + { 1149.8, 5.74021, 1162.47470 }, + { 1126.7, 4.46708, 265.98929 }, + { 1277.5, 2.98413, 1059.38193 }, + { 1207.1, 0.75286, 351.81659 }, + { 1071.4, 1.13567, 1155.36116 }, + { 1020.9, 5.91234, 1685.05212 }, + { 1315.0, 5.11203, 211.81462 }, + { 1295.6, 4.69184, 1898.35122 }, + { 1099.0, 1.81765, 149.56320 }, + { 998.5, 2.6313, 200.7689 }, + { 985.9, 2.2599, 956.2892 }, + { 932.4, 3.6698, 554.0700 }, + { 664.5, 0.6030, 728.7630 }, + { 659.8, 4.6664, 195.1398 }, + { 617.7, 5.6209, 942.0621 }, + { 626.4, 5.9421, 1478.8666 }, + { 482.2, 1.8407, 479.2884 }, + { 487.7, 2.7937, 3.1814 }, + { 470.1, 0.8385, 1471.7530 }, + { 451.8, 5.6447, 2001.4440 }, + { 553.1, 3.4109, 269.9214 }, + { 534.4, 1.2644, 275.5505 }, + { 472.6, 1.8820, 515.4639 }, + { 405.4, 1.6400, 536.8045 }, + { 517.2, 4.4431, 2214.7431 }, + { 452.8, 3.0035, 302.1648 }, + { 494.3, 2.2863, 278.5195 }, + { 489.8, 5.8063, 191.2077 }, + { 427.5, 0.0574, 284.1485 }, + { 339.8, 1.4020, 440.8253 }, + { 340.6, 0.8909, 628.8516 }, + { 386.0, 1.9970, 1272.6810 }, + { 288.3, 1.1216, 422.6660 }, + { 294.4, 0.4258, 312.1991 }, + { 262.5, 0.3175, 1045.1548 }, + { 295.3, 0.6714, 88.8657 }, + { 343.0, 5.8560, 1795.2584 }, + { 341.1, 2.3759, 525.4982 }, + { 234.0, 4.2276, 114.1385 }, + { 223.7, 2.2813, 330.6190 }, + { 275.8, 0.4783, 38.1330 }, + { 224.6, 0.5475, 1788.1449 }, + { 303.3, 0.8795, 6069.7768 }, + { 292.1, 6.2142, 210.8514 }, + { 226.1, 0.3750, 142.4497 }, + { 277.3, 5.3192, 692.5875 }, + { 242.9, 5.3719, 1258.4539 }, + { 205.6, 0.9576, 288.0807 }, + { 207.6, 5.3813, 2317.8359 }, + { 186.8, 6.0359, 404.5068 }, + { 218.5, 5.2561, 212.3359 }, + { 222.2, 5.9459, 39.3569 }, + { 179.7, 4.4105, 408.4389 }, + { 241.4, 1.1253, 388.4652 }, + { 197.1, 3.9014, 52.6902 }, + { 236.6, 0.9080, 1375.7738 }, + { 171.9, 5.5632, 213.3473 }, + { 169.9, 2.8567, 99.1606 }, + { 214.4, 4.2025, 2531.1350 }, + { 172.0, 2.3654, 213.2509 }, + { 165.7, 2.6368, 215.7468 }, + { 230.9, 5.4946, 191.9585 }, + { 177.6, 0.3816, 430.5303 }, + { 191.5, 2.9591, 437.6439 }, + { 163.2, 3.4583, 617.8059 }, + { 162.3, 5.7305, 203.0042 }, + { 175.1, 5.7140, 1066.4955 }, + { 183.0, 5.6685, 2111.6503 }, + { 150.1, 4.4066, 417.0370 }, + { 187.9, 6.0792, 563.6312 }, + { 145.1, 5.0818, 423.4168 }, + { 137.5, 5.4391, 222.8603 }, + { 172.8, 1.8492, 1589.0729 }, + { 165.5, 2.8913, 214.2623 }, + { 145.7, 1.5657, 831.8557 }, + { 176.9, 2.3032, 9999.9865 }, + { 128.9, 2.5534, 414.0680 }, + { 120.1, 0.0433, 1361.5467 }, + { 143.4, 0.9982, 76.2661 }, + { 108.7, 2.0928, 207.6700 }, + { 132.1, 2.8590, 312.4597 }, + { 112.2, 0.2622, 2104.5368 }, + { 125.2, 4.7835, 205.2223 }, + { 104.4, 3.6367, 65.2204 }, + { 107.4, 3.6706, 212.7778 }, + { 108.6, 2.8549, 21.3406 }, + { 97.7, 5.122, 2634.228 }, + { 109.1, 1.6323, 208.6332 }, + { 96.9, 4.199, 305.346 }, + { 96.5, 2.560, 1692.166 }, + { 85.8, 4.545, 210.378 }, + { 99.2, 5.138, 1574.846 }, + { 112.5, 5.0311, 703.6332 }, + { 84.0, 1.183, 429.780 }, + { 89.0, 5.388, 107.025 }, + { 110.2, 2.4366, 355.7487 }, + { 90.7, 4.209, 213.820 }, + { 95.9, 5.446, 2428.042 }, + { 94.1, 2.398, 483.221 }, + { 85.6, 0.034, 860.310 }, + { 88.8, 4.058, 128.956 }, + { 82.0, 1.665, 62.251 }, + { 91.2, 3.969, 2847.527 }, + { 84.0, 4.608, 177.874 }, + { 88.4, 3.868, 140.002 }, + { 93.3, 0.738, 831.105 }, + { 91.9, 2.950, 35.425 }, + { 87.1, 1.334, 1905.465 }, + { 96.6, 4.844, 131.404 }, + { 71.0, 0.993, 405.258 }, + { 95.3, 2.515, 2.448 }, + { 72.5, 4.632, 245.542 }, + { 82.6, 1.528, 145.631 }, + { 76.7, 3.152, 767.369 }, + { 70.3, 4.043, 173.942 }, + { 86.0, 2.301, 85.827 }, + { 66.5, 4.751, 70.849 }, + { 65.8, 2.469, 280.967 }, + { 64.8, 0.093, 9.561 }, + { 71.6, 0.012, 565.116 }, + { 66.5, 1.080, 339.286 }, + { 63.5, 2.017, 234.640 }, + { 60.8, 5.120, 756.323 }, + { 58.1, 6.057, 1677.939 }, + { 64.2, 1.286, 1148.248 }, + { 73.1, 4.378, 425.114 }, + { 55.0, 3.859, 342.255 }, + { 57.1, 6.267, 2420.929 }, + { 64.1, 4.099, 327.438 }, + { 55.3, 1.605, 543.024 }, + { 58.0, 5.473, 347.884 }, + { 73.6, 3.723, 92.047 }, + { 73.8, 3.570, 1.484 }, + { 64.9, 2.447, 267.474 }, + { 54.4, 3.715, 344.703 }, + { 49.8, 3.935, 192.692 }, + { 49.5, 3.228, 333.657 }, + { 47.5, 3.929, 199.284 }, + { 49.4, 4.903, 217.492 }, + { 62.7, 4.401, 214.784 }, + { 46.4, 2.094, 212.548 }, + { 46.3, 2.640, 10.295 }, + { 54.3, 1.072, 362.862 }, + { 58.7, 2.623, 225.829 }, + { 48.5, 3.152, 216.220 }, + { 46.3, 4.862, 2950.620 }, + { 46.0, 4.973, 198.321 }, + { 46.7, 2.450, 207.149 }, + { 44.9, 1.776, 223.594 }, + { 44.5, 5.560, 264.505 }, + { 55.9, 4.295, 329.725 }, + { 49.6, 5.208, 2744.434 }, + { 58.8, 4.231, 700.664 }, + { 52.6, 3.792, 343.219 }, + { 41.5, 0.745, 125.987 }, + { 47.8, 2.393, 207.882 }, + { 56.2, 2.072, 124.433 }, + { 43.3, 1.837, 106.274 }, + { 39.8, 4.009, 12.530 }, + { 53.9, 4.979, 134.585 }, + { 50.1, 5.759, 320.324 }, + { 45.0, 5.357, 218.928 }, + { 41.1, 4.923, 1891.238 }, + { 46.5, 2.066, 2008.558 }, + { 42.9, 0.399, 357.446 }, + { 38.0, 2.065, 247.239 }, + { 48.7, 5.328, 3127.313 }, + { 34.6, 5.626, 99.911 }, + { 41.1, 2.473, 237.678 }, + { 40.8, 4.084, 621.738 }, + { 34.2, 0.731, 750.104 }, + { 34.0, 5.313, 206.234 }, + { 36.5, 1.688, 22.091 }, + { 39.4, 3.457, 241.610 }, + { 34.8, 2.248, 487.365 }, + { 33.0, 4.866, 209.106 }, + { 32.6, 2.227, 319.573 }, + { 39.0, 3.739, 3163.919 }, + { 32.7, 1.066, 252.656 }, + { 38.7, 4.396, 18.159 }, + { 34.5, 1.826, 380.128 }, + { 41.5, 0.081, 210.330 }, + { 33.5, 5.805, 251.432 }, + { 31.2, 1.965, 244.319 }, + { 30.5, 2.269, 1169.588 }, + { 34.8, 5.963, 217.965 }, + { 38.5, 4.437, 160.609 }, + { 36.0, 3.833, 56.622 }, + { 31.0, 4.899, 144.147 }, + { 32.3, 3.582, 231.458 }, + { 28.8, 5.801, 1994.330 }, + { 32.2, 2.132, 206.137 }, + { 32.6, 1.931, 98.900 }, + { 34.9, 5.653, 497.448 }, + { 28.9, 2.217, 14.978 }, + { 31.6, 3.818, 73.297 }, + { 32.2, 0.998, 1464.639 }, + { 29.2, 5.984, 2737.321 }, + { 36.7, 4.755, 348.848 }, + { 28.7, 1.687, 78.714 }, + { 27.5, 6.121, 214.050 }, + { 28.8, 0.044, 5.629 }, + { 27.2, 0.246, 313.210 }, + { 32.4, 3.779, 33.940 }, + { 27.1, 5.203, 148.079 }, + { 35.0, 3.439, 273.103 }, + { 33.1, 2.447, 969.622 }, + { 27.7, 1.446, 258.876 }, + { 27.2, 4.259, 179.359 }, + { 27.9, 0.788, 546.956 }, + { 29.1, 4.839, 905.887 }, + { 27.4, 2.449, 254.944 }, + { 34.3, 6.009, 166.829 }, + { 28.9, 6.029, 188.920 }, + { 26.0, 0.650, 654.124 }, + { 33.6, 1.237, 2221.857 }, + { 27.8, 5.178, 5.417 }, + { 25.6, 3.359, 0.963 }, + { 28.8, 0.755, 488.850 }, + { 31.2, 2.053, 282.452 }, + { 25.4, 5.290, 636.716 }, + { 25.3, 4.970, 3060.826 }, + { 29.6, 3.927, 206.707 }, + { 28.3, 2.721, 32.243 }, + { 26.9, 2.863, 24.379 }, + { 28.3, 4.731, 552.586 }, + { 25.3, 5.120, 168.053 }, + { 26.4, 1.593, 491.819 }, + { 27.1, 5.537, 555.554 }, + { 27.3, 3.579, 561.184 }, + { 25.2, 1.781, 182.280 }, + { 25.6, 1.621, 2324.949 }, + { 25.6, 2.099, 248.724 }, + /* 288 terms retained, 917 terms dropped, error 8.7e-06 a.u. */ + + /* saturn r, T^1 */ + { 6182981.3, 0.25843515, 213.29909544 }, + { 506577.6, 0.7111465, 206.1855484 }, + { 341394.1, 5.7963577, 426.5981909 }, + { 188491.4, 0.4721572, 220.4126424 }, + { 186261.5, 3.1415927, 0 }, + { 143891.2, 1.4074486, 7.1135470 }, + { 49621.1, 6.017445, 103.092774 }, + { 20928.2, 5.092457, 639.897286 }, + { 19952.6, 1.175601, 419.484644 }, + { 18839.6, 1.608196, 110.206321 }, + { 12892.8, 5.943303, 433.711738 }, + { 13876.6, 0.758862, 199.072001 }, + { 5396.7, 1.28852, 14.22709 }, + { 4869.3, 0.86794, 323.50542 }, + { 4247.5, 0.39299, 227.52619 }, + { 3252.1, 1.25853, 95.97923 }, + { 2856.0, 2.16731, 735.87651 }, + { 2909.4, 4.60679, 202.25340 }, + { 3081.4, 3.43663, 522.57742 }, + { 1987.7, 2.45054, 412.37110 }, + { 1941.3, 6.02393, 209.36694 }, + { 1581.4, 1.29192, 210.11770 }, + { 1339.5, 4.30802, 853.19638 }, + { 1315.6, 1.25296, 117.31987 }, + { 1203.1, 1.86655, 316.39187 }, + { 1091.1, 0.07527, 216.48049 }, + { 954.4, 5.1517, 647.0108 }, + { 966.0, 0.4799, 632.7837 }, + { 881.8, 1.8847, 1052.2684 }, + { 874.2, 1.4022, 224.3448 }, + { 897.5, 0.9834, 529.6910 }, + { 784.9, 3.0638, 838.9693 }, + { 739.9, 1.3823, 625.6702 }, + { 613.0, 3.0331, 63.7359 }, + { 658.2, 4.1436, 309.2783 }, + { 649.6, 1.7249, 742.9901 }, + { 599.2, 2.5492, 217.2312 }, + { 502.9, 2.1296, 3.9322 }, + { 413.0, 4.5933, 415.5525 }, + { 356.1, 2.3031, 728.7630 }, + { 344.8, 5.8879, 440.8253 }, + { 395.0, 0.5335, 956.2892 }, + { 335.5, 1.6161, 1368.6603 }, + { 362.8, 4.7069, 302.1648 }, + { 321.6, 0.9793, 3.1814 }, + { 277.8, 0.2601, 195.1398 }, + { 291.2, 2.8313, 1155.3612 }, + { 265.0, 2.4267, 88.8657 }, + { 264.9, 5.8286, 149.5632 }, + { 316.8, 3.5840, 515.4639 }, + { 294.3, 2.8163, 11.0457 }, + { 244.9, 1.0449, 942.0621 }, + { 215.4, 3.5654, 490.3341 }, + { 264.0, 1.2855, 1059.3819 }, + { 246.2, 0.9073, 191.9585 }, + { 222.1, 5.1319, 269.9214 }, + { 195.0, 4.5667, 846.0828 }, + { 182.8, 2.6791, 127.4718 }, + { 181.6, 4.9343, 74.7816 }, + { 174.7, 3.4456, 137.0330 }, + { 165.5, 5.9978, 536.8045 }, + { 154.8, 1.1972, 265.9893 }, + { 169.7, 4.6346, 284.1485 }, + { 151.5, 0.5293, 330.6190 }, + { 152.5, 5.4389, 422.6660 }, + { 157.7, 2.9956, 340.7709 }, + { 140.6, 2.0207, 1045.1548 }, + { 139.8, 1.3528, 1685.0521 }, + { 141.0, 1.2710, 203.0042 }, + { 136.0, 5.0168, 351.8166 }, + { 153.4, 0.2697, 1272.6810 }, + { 129.5, 1.1434, 21.3406 }, + { 127.8, 2.5388, 1471.7530 }, + { 126.5, 3.0031, 277.0350 }, + { 100.3, 3.6136, 1066.4955 }, + { 103.2, 0.3818, 203.7379 }, + { 107.5, 4.3187, 210.8514 }, + { 95.9, 0.795, 1258.454 }, + { 82.7, 0.282, 234.640 }, + { 98.0, 2.561, 191.208 }, + { 97.4, 3.262, 831.856 }, + { 72.2, 4.380, 860.310 }, + { 70.6, 0.732, 437.644 }, + { 70.4, 0.877, 423.417 }, + { 72.1, 5.580, 429.780 }, + { 73.3, 0.625, 1375.774 }, + { 66.4, 2.684, 405.258 }, + { 63.8, 1.751, 1361.547 }, + { 61.6, 1.093, 2001.444 }, + { 67.0, 0.069, 408.439 }, + { 68.9, 2.471, 949.176 }, + { 60.5, 2.251, 1788.145 }, + { 67.1, 5.454, 200.769 }, + { 65.6, 0.055, 1589.073 }, + { 49.3, 4.172, 138.517 }, + { 50.6, 6.269, 223.594 }, + { 55.2, 4.595, 628.852 }, + { 47.9, 0.839, 10.295 }, + { 46.7, 2.173, 312.199 }, + { 54.2, 0.284, 124.433 }, + { 49.5, 3.800, 215.747 }, + { 40.1, 5.182, 1478.867 }, + { 39.3, 0.563, 1574.846 }, + { 35.0, 4.685, 38.133 }, + { 42.8, 2.986, 1148.248 }, + { 36.5, 0.635, 52.690 }, + { 39.8, 0.284, 131.404 }, + { 31.8, 5.190, 76.266 }, + { 33.0, 1.980, 142.450 }, + { 42.1, 4.830, 288.081 }, + { 30.8, 1.479, 1677.939 }, + { 42.8, 3.382, 208.633 }, + { 29.2, 5.099, 654.124 }, + { 29.2, 4.957, 1795.258 }, + { 29.1, 2.747, 404.507 }, + { 32.7, 6.121, 145.631 }, + { 28.0, 0.832, 2317.836 }, + { 27.7, 2.244, 430.530 }, + { 29.9, 1.964, 2104.537 }, + { 33.0, 3.282, 222.860 }, + { 31.8, 6.025, 1905.465 }, + { 27.0, 5.243, 388.465 }, + { 26.5, 0.996, 107.025 }, + { 25.4, 2.873, 703.633 }, + { 24.9, 1.077, 99.911 }, + { 25.0, 6.240, 106.274 }, + { 24.9, 0.810, 312.460 }, + { 24.3, 0.549, 214.262 }, + { 28.4, 0.826, 1692.166 }, + { 23.2, 5.080, 479.288 }, + { 24.4, 3.106, 212.336 }, + { 22.0, 6.067, 85.827 }, + { 22.0, 3.899, 563.631 }, + { 22.6, 4.867, 295.051 }, + { 21.3, 5.108, 333.657 }, + { 26.0, 2.208, 1265.567 }, + { 20.9, 3.289, 70.849 }, + { 21.5, 3.795, 347.884 }, + { 22.1, 4.227, 217.965 }, + { 20.6, 1.687, 231.458 }, + { 21.4, 3.089, 554.070 }, + { 21.3, 0.389, 319.573 }, + { 20.5, 2.457, 18.159 }, + { 26.1, 4.276, 483.221 }, + { 20.7, 5.121, 362.862 }, + { 22.0, 5.512, 343.219 }, + { 19.4, 2.024, 313.210 }, + { 20.2, 5.085, 750.104 }, + { 20.1, 3.430, 213.347 }, + { 24.2, 0.648, 207.882 }, + { 22.0, 0.729, 99.161 }, + { 21.1, 2.693, 1464.639 }, + { 17.2, 4.715, 2111.650 }, + { 18.5, 0.048, 245.542 }, + { 17.5, 3.837, 497.448 }, + { 16.1, 4.224, 565.116 }, + { 21.6, 4.166, 2.448 }, + { 16.0, 0.274, 225.829 }, + { 16.8, 1.411, 114.138 }, + { 15.6, 2.828, 81.752 }, + { 15.5, 1.206, 1994.330 }, + { 15.2, 3.846, 1162.475 }, + { 16.4, 3.048, 134.585 }, + { 15.9, 0.330, 1891.238 }, + { 20.4, 0.232, 213.251 }, + { 16.3, 1.706, 2420.929 }, + { 16.3, 4.942, 357.446 }, + { 18.1, 5.695, 56.622 }, + { 13.7, 0.572, 2634.228 }, + { 17.4, 3.553, 218.928 }, + { 13.7, 5.705, 92.047 }, + { 15.3, 1.313, 216.220 }, + { 12.5, 5.192, 635.965 }, + { 12.8, 1.602, 320.324 }, + { 13.0, 0.451, 1169.588 }, + { 12.0, 5.949, 543.918 }, + { 11.8, 2.803, 217.492 }, + { 14.7, 5.565, 344.703 }, + { 12.8, 1.636, 273.103 }, + { 11.9, 2.462, 721.649 }, + { 13.3, 5.756, 2221.857 }, + { 14.5, 0.453, 2008.558 }, + { 11.8, 1.757, 160.609 }, + { 12.4, 1.015, 329.725 }, + { 10.7, 1.581, 212.778 }, + { 12.8, 1.920, 1581.959 }, + { 11.9, 4.447, 32.243 }, + { 11.9, 5.107, 4.666 }, + { 11.9, 4.308, 618.557 }, + { 10.0, 0.487, 305.346 }, + { 12.8, 3.744, 508.350 }, + { 10.7, 0.766, 218.716 }, + { 11.4, 3.000, 198.321 }, + { 10.2, 2.409, 546.956 }, + { 10.0, 2.639, 416.303 }, + { 9.3, 5.46, 414.07 }, + { 9.3, 4.46, 2428.04 }, + { 9.9, 4.05, 62.25 }, + { 12.8, 3.433, 258.876 }, + { 9.7, 1.61, 327.44 }, + { 11.2, 2.407, 1781.031 }, + { 10.6, 2.075, 213.820 }, + { 9.1, 2.92, 1279.79 }, + { 9.5, 1.10, 113.39 }, + { 9.8, 3.28, 275.55 }, + { 11.3, 1.894, 561.184 }, + { 8.6, 2.18, 425.11 }, + { 8.6, 1.95, 35.42 }, + { 10.2, 0.090, 182.280 }, + { 11.8, 3.713, 350.332 }, + { 8.6, 1.83, 629.60 }, + { 8.4, 3.77, 251.43 }, + { 8.5, 0.36, 617.81 }, + { 8.2, 5.31, 65.22 }, + { 8.3, 1.38, 1.48 }, + { 8.0, 5.14, 22.09 }, + { 8.4, 0.92, 1485.98 }, + { 8.0, 0.94, 2310.72 }, + { 8.9, 0.54, 168.05 }, + { 8.2, 3.46, 424.15 }, + { 8.0, 3.38, 144.15 }, + { 7.9, 5.14, 358.93 }, + { 8.9, 6.14, 621.74 }, + { 7.5, 5.75, 447.94 }, + { 7.5, 2.19, 264.50 }, + { 8.1, 1.43, 2737.32 }, + { 8.2, 0.96, 767.37 }, + { 8.2, 0.35, 278.52 }, + { 8.2, 5.44, 254.94 }, + { 6.8, 1.20, 5.42 }, + { 8.9, 4.88, 120.36 }, + { 7.8, 4.56, 280.97 }, + { 6.6, 3.50, 9.56 }, + { 6.4, 0.33, 2950.62 }, + { 6.9, 3.39, 98.90 }, + { 7.4, 4.52, 5.63 }, + { 8.0, 0.94, 636.72 }, + { 7.2, 3.85, 214.05 }, + { 6.4, 2.12, 274.07 }, + { 6.5, 5.31, 6076.89 }, + { 6.4, 0.45, 10007.10 }, + { 6.3, 3.21, 219.45 }, + { 6.7, 1.65, 1898.35 }, + { 7.6, 0.10, 2324.95 }, + { 6.3, 0.76, 210.38 }, + { 6.6, 1.79, 12.53 }, + /* 246 terms retained, 393 terms dropped, error 2.1e-06 a.u.*T */ + + /* saturn r, T^2 */ + { 436902.5, 4.7867167, 213.2990954 }, + { 71922.8, 2.500700, 206.185548 }, + { 49766.8, 4.971682, 220.412642 }, + { 43220.9, 3.869404, 426.598191 }, + { 29645.6, 5.963103, 7.113547 }, + { 4141.6, 4.10671, 433.71174 }, + { 4720.9, 2.47528, 199.07200 }, + { 3789.4, 3.09771, 639.89729 }, + { 2964.0, 1.37206, 103.09277 }, + { 2556.4, 2.85066, 419.48464 }, + { 2208.5, 6.27589, 110.20632 }, + { 2187.6, 5.85546, 14.22709 }, + { 1956.9, 4.92449, 227.52619 }, + { 2326.8, 0, 0 }, + { 923.8, 5.4639, 323.5054 }, + { 705.9, 2.9708, 95.9792 }, + { 546.1, 4.1285, 412.3711 }, + { 373.8, 5.8344, 117.3199 }, + { 360.9, 3.2770, 647.0108 }, + { 356.3, 3.1915, 210.1177 }, + { 390.6, 4.4811, 216.4805 }, + { 431.5, 5.1783, 522.5774 }, + { 325.6, 2.2687, 853.1964 }, + { 405.0, 4.1729, 209.3669 }, + { 204.5, 0.0877, 202.2534 }, + { 206.9, 4.0219, 735.8765 }, + { 178.5, 4.0972, 440.8253 }, + { 180.1, 3.5970, 632.7837 }, + { 153.7, 3.1347, 625.6702 }, + { 147.8, 0.1361, 302.1648 }, + { 123.2, 4.1890, 88.8657 }, + { 133.1, 2.5935, 191.9585 }, + { 100.4, 5.4606, 3.1814 }, + { 132.0, 5.9329, 309.2783 }, + { 97.2, 4.018, 728.763 }, + { 110.7, 4.7785, 838.9693 }, + { 119.1, 5.5539, 224.3448 }, + { 93.9, 4.384, 217.231 }, + { 108.7, 5.2931, 515.4639 }, + { 78.6, 5.725, 21.341 }, + { 81.5, 5.109, 956.289 }, + { 96.4, 6.259, 742.990 }, + { 69.2, 4.049, 3.932 }, + { 65.2, 3.777, 1052.268 }, + { 64.1, 5.812, 529.691 }, + { 62.5, 2.184, 195.140 }, + { 57.0, 3.147, 203.004 }, + { 56.0, 4.841, 234.640 }, + { 52.9, 5.078, 330.619 }, + { 50.6, 2.773, 942.062 }, + { 41.6, 4.790, 63.736 }, + { 44.9, 0.565, 269.921 }, + { 41.4, 3.735, 316.392 }, + { 52.8, 3.926, 949.176 }, + { 38.4, 3.740, 1045.155 }, + { 37.6, 4.189, 536.805 }, + { 35.3, 2.908, 284.149 }, + { 33.6, 3.805, 149.563 }, + { 41.1, 4.579, 1155.361 }, + { 30.4, 2.481, 860.310 }, + { 31.4, 4.841, 1272.681 }, + { 30.2, 4.352, 405.258 }, + { 39.4, 3.509, 422.666 }, + { 29.7, 1.589, 1066.495 }, + { 35.2, 5.945, 1059.382 }, + { 25.8, 3.549, 1368.660 }, + { 26.3, 4.816, 124.433 }, + { 30.0, 3.663, 429.780 }, + { 33.0, 4.969, 831.856 }, + { 24.3, 5.311, 10.295 }, + { 26.3, 4.453, 223.594 }, + { 22.1, 2.761, 415.552 }, + { 27.2, 1.663, 277.035 }, + { 21.6, 1.038, 11.046 }, + { 19.7, 2.522, 1258.454 }, + { 17.1, 3.277, 654.124 }, + { 17.3, 3.494, 1361.547 }, + { 16.1, 1.734, 490.334 }, + { 21.1, 3.621, 1265.567 }, + { 17.7, 4.311, 1471.753 }, + { 13.5, 0.323, 295.051 }, + { 12.6, 3.138, 74.782 }, + { 12.0, 2.329, 210.851 }, + { 15.1, 3.596, 265.989 }, + { 13.0, 4.624, 1589.073 }, + { 15.4, 5.013, 127.472 }, + { 11.2, 4.550, 81.752 }, + { 13.4, 4.887, 437.644 }, + { 10.7, 5.052, 191.208 }, + { 14.0, 3.050, 423.417 }, + { 10.6, 5.028, 137.033 }, + { 14.4, 4.687, 1148.248 }, + { 13.5, 1.903, 408.439 }, + { 10.1, 5.204, 340.771 }, + { 10.3, 3.345, 1685.052 }, + { 9.6, 3.17, 351.82 }, + { 11.3, 5.478, 1375.774 }, + { 8.6, 2.81, 99.91 }, + { 8.5, 3.23, 1677.94 }, + { 7.9, 2.36, 1574.85 }, + { 7.6, 6.08, 231.46 }, + { 9.2, 3.40, 1581.96 }, + { 7.3, 2.00, 131.40 }, + { 8.2, 4.04, 1788.14 }, + { 7.6, 3.68, 846.08 }, + { 6.7, 4.37, 145.63 }, + { 7.5, 3.29, 750.10 }, + { 6.4, 4.00, 447.94 }, + { 6.2, 4.56, 106.27 }, + { 6.5, 1.34, 215.75 }, + { 6.5, 3.78, 313.21 }, + { 6.0, 0.55, 18.16 }, + { 6.2, 2.85, 138.52 }, + { 6.8, 4.83, 319.57 }, + { 6.7, 5.43, 508.35 }, + { 7.2, 4.38, 1464.64 }, + { 5.8, 4.14, 543.92 }, + { 5.7, 4.35, 1905.46 }, + { 5.1, 2.64, 288.08 }, + { 5.3, 3.63, 6076.89 }, + { 5.5, 4.20, 721.65 }, + { 5.1, 5.05, 10007.10 }, + { 5.5, 1.13, 56.62 }, + { 4.8, 3.30, 76.27 }, + { 4.9, 6.18, 483.22 }, + { 5.0, 2.45, 628.85 }, + { 4.5, 1.20, 200.77 }, + { 4.8, 3.12, 2001.44 }, + { 4.7, 1.27, 6062.66 }, + { 4.8, 5.78, 184.84 }, + { 4.8, 0.76, 333.66 }, + { 4.5, 0.95, 343.22 }, + { 4.5, 2.69, 9992.87 }, + { 4.4, 0.80, 222.86 }, + { 4.9, 5.92, 618.56 }, + { 4.1, 1.92, 497.45 }, + { 5.1, 4.50, 416.30 }, + { 4.1, 1.98, 347.88 }, + { 4.0, 2.88, 38.13 }, + { 4.1, 2.90, 107.02 }, + { 4.0, 2.93, 1994.33 }, + { 4.9, 3.12, 1898.35 }, + { 3.7, 3.25, 362.86 }, + { 3.8, 0.88, 703.63 }, + { 3.6, 3.48, 388.47 }, + { 3.6, 4.08, 430.53 }, + { 3.6, 0.05, 32.24 }, + { 3.6, 5.46, 6283.08 }, + { 3.5, 1.82, 70.85 }, + { 3.8, 3.12, 635.97 }, + { 3.4, 0.55, 10213.29 }, + { 3.4, 3.52, 629.60 }, + { 3.4, 3.28, 357.45 }, + { 3.3, 1.98, 203.74 }, + { 3.1, 2.18, 1891.24 }, + { 3.2, 1.26, 134.59 }, + { 4.0, 5.45, 1692.17 }, + { 3.2, 2.46, 867.42 }, + { 3.4, 4.21, 337.73 }, + { 3.0, 2.19, 217.96 }, + { 3.6, 5.55, 113.39 }, + { 3.7, 3.79, 2104.54 }, + { 3.1, 4.09, 1478.87 }, + { 2.9, 3.91, 312.20 }, + { 3.2, 3.92, 1038.04 }, + { 4.0, 5.18, 404.51 }, + { 3.9, 4.12, 1781.03 }, + { 3.1, 1.61, 1073.61 }, + { 3.1, 5.01, 312.46 }, + { 3.0, 5.46, 258.88 }, + { 2.9, 2.38, 181.06 }, + { 3.0, 0.89, 1279.79 }, + { 2.7, 0.01, 195.89 }, + { 3.1, 5.60, 216.22 }, + { 2.6, 6.13, 273.10 }, + { 2.7, 2.32, 565.12 }, + { 3.2, 3.88, 85.83 }, + { 2.7, 5.74, 160.61 }, + { 2.9, 4.75, 213.25 }, + { 2.5, 5.30, 444.76 }, + { 2.8, 5.09, 1169.59 }, + { 2.9, 1.67, 213.35 }, + { 2.9, 4.21, 650.94 }, + { 3.0, 2.55, 6069.78 }, + { 3.1, 2.67, 52.69 }, + { 2.4, 0.90, 121.25 }, + { 3.0, 3.97, 9999.99 }, + { 3.1, 0.41, 561.18 }, + { 2.4, 4.74, 218.72 }, + { 2.6, 1.13, 344.70 }, + { 2.3, 4.08, 131.55 }, + { 2.2, 3.38, 22.09 }, + { 2.1, 3.32, 358.93 }, + { 2.7, 1.69, 208.63 }, + { 2.6, 5.10, 824.74 }, + { 2.2, 2.60, 305.35 }, + { 2.1, 3.37, 320.32 }, + { 2.7, 3.62, 436.89 }, + { 2.5, 2.96, 2214.74 }, + { 2.7, 2.88, 643.08 }, + { 2.1, 1.61, 218.93 }, + { 2.0, 4.63, 188.03 }, + { 2.4, 3.46, 6275.96 }, + { 2.0, 2.29, 2627.11 }, + { 1.9, 5.67, 28.45 }, + { 1.9, 4.26, 546.96 }, + { 2.5, 3.58, 2420.93 }, + { 1.9, 1.31, 212.34 }, + { 1.9, 1.59, 424.15 }, + { 1.9, 3.58, 329.73 }, + { 2.1, 3.95, 1795.26 }, + { 2.2, 4.22, 2221.86 }, + { 1.9, 1.69, 350.33 }, + { 1.8, 2.07, 144.15 }, + { 1.9, 4.61, 182.28 }, + { 2.2, 5.18, 99.16 }, + { 1.8, 2.73, 291.26 }, + { 2.2, 5.43, 207.88 }, + { 1.8, 2.24, 168.05 }, + { 1.7, 1.32, 219.45 }, + { 1.7, 5.56, 92.80 }, + { 1.7, 1.95, 129.92 }, + { 2.1, 4.85, 1141.13 }, + { 1.8, 5.05, 214.26 }, + { 1.8, 2.86, 636.72 }, + { 1.9, 2.90, 2310.72 }, + { 1.8, 5.35, 45.58 }, + { 1.7, 6.14, 554.07 }, + { 1.6, 4.51, 210.38 }, + { 1.7, 3.55, 1354.43 }, + { 1.9, 3.01, 2317.84 }, + { 1.6, 1.16, 235.39 }, + { 1.9, 4.13, 225.83 }, + { 1.6, 3.30, 1670.83 }, + { 1.9, 0.18, 12.53 }, + { 1.6, 5.73, 1485.98 }, + { 1.7, 3.44, 2428.04 }, + { 1.8, 2.70, 12.74 }, + { 1.7, 4.98, 2008.56 }, + /* 239 terms retained, 103 terms dropped, error 5.2e-07 a.u.*T^2 */ + + /* saturn r, T^3 */ + { 20315.0, 3.021866, 213.299095 }, + { 8923.6, 3.19144, 220.41264 }, + { 6908.7, 4.35175, 206.18555 }, + { 4087.1, 4.22407, 7.11355 }, + { 3879.0, 2.01056, 426.59819 }, + { 1070.8, 4.20360, 199.07200 }, + { 907.3, 2.2834, 433.7117 }, + { 606.1, 3.1746, 227.5262 }, + { 596.6, 4.1346, 14.2271 }, + { 483.2, 1.1735, 639.8973 }, + { 393.2, 0, 0 }, + { 229.5, 4.6984, 419.4846 }, + { 188.2, 4.5900, 110.2063 }, + { 149.5, 3.2020, 103.0928 }, + { 121.4, 3.7683, 323.5054 }, + { 101.2, 5.8188, 412.3711 }, + { 102.1, 4.7097, 95.9792 }, + { 93.1, 1.435, 647.011 }, + { 72.6, 4.154, 117.320 }, + { 84.3, 2.635, 216.480 }, + { 62.2, 2.312, 440.825 }, + { 45.1, 4.373, 191.958 }, + { 49.5, 2.389, 209.367 }, + { 54.8, 0.305, 853.196 }, + { 40.5, 1.838, 302.165 }, + { 38.1, 5.945, 88.866 }, + { 32.2, 4.011, 21.341 }, + { 40.7, 0.688, 522.577 }, + { 28.2, 5.772, 210.118 }, + { 25.0, 3.062, 234.640 }, + { 20.8, 4.926, 625.670 }, + { 25.1, 0.731, 515.464 }, + { 17.5, 5.731, 728.763 }, + { 18.0, 1.456, 309.278 }, + { 16.9, 3.528, 3.181 }, + { 13.4, 3.365, 330.619 }, + { 11.1, 3.372, 224.345 }, + { 11.1, 3.417, 956.289 }, + { 10.0, 1.588, 202.253 }, + { 11.6, 5.991, 735.877 }, + { 10.5, 6.069, 405.258 }, + { 9.1, 2.94, 124.43 }, + { 8.7, 4.65, 632.78 }, + { 10.0, 0.582, 860.310 }, + { 7.5, 4.51, 942.06 }, + { 10.1, 0.283, 838.969 }, + { 9.2, 2.57, 223.59 }, + { 8.7, 1.76, 429.78 }, + { 7.6, 1.46, 654.12 }, + { 7.1, 5.47, 1045.15 }, + { 7.0, 1.52, 422.67 }, + { 8.1, 4.48, 742.99 }, + { 6.8, 4.83, 316.39 }, + { 7.7, 0.44, 831.86 }, + { 7.9, 4.20, 195.14 }, + { 6.1, 2.34, 269.92 }, + { 5.6, 1.15, 284.15 }, + { 5.6, 4.18, 529.69 }, + { 5.0, 2.12, 295.05 }, + { 6.6, 3.42, 10.29 }, + { 5.5, 2.47, 536.80 }, + { 6.2, 6.01, 1066.50 }, + { 5.6, 0.83, 217.23 }, + { 4.3, 3.23, 1272.68 }, + { 4.5, 0.92, 203.00 }, + { 3.3, 4.33, 1258.45 }, + { 3.7, 0.06, 81.75 }, + { 4.0, 0.11, 1155.36 }, + { 3.8, 6.01, 1052.27 }, + { 2.9, 5.64, 3.93 }, + { 3.0, 2.19, 447.94 }, + { 3.0, 1.89, 149.56 }, + { 3.1, 0.19, 1148.25 }, + { 2.8, 0.92, 508.35 }, + { 2.8, 4.97, 1677.94 }, + { 2.6, 3.00, 1589.07 }, + { 2.9, 5.41, 1361.55 }, + { 2.3, 1.30, 184.84 }, + { 2.5, 3.71, 408.44 }, + { 2.5, 3.22, 319.57 }, + { 2.6, 2.31, 543.92 }, + { 2.3, 5.88, 721.65 }, + { 2.0, 0.52, 416.30 }, + { 2.5, 4.24, 1059.38 }, + { 1.9, 2.41, 337.73 }, + { 1.9, 0.54, 635.97 }, + { 1.9, 5.62, 11.05 }, + { 2.4, 5.73, 313.21 }, + { 1.9, 2.41, 131.55 }, + { 1.7, 4.58, 1994.33 }, + { 1.9, 5.17, 2854.64 }, + { 1.9, 6.23, 1471.75 }, + { 2.0, 6.18, 1464.64 }, + { 1.8, 5.59, 1038.04 }, + { 1.5, 0.61, 210.85 }, + { 1.6, 1.75, 195.89 }, + { 1.6, 0.56, 2324.95 }, + { 1.5, 0.27, 497.45 }, + { 1.7, 2.58, 2090.31 }, + { 1.8, 1.82, 436.89 }, + { 1.6, 6.15, 490.33 }, + { 1.8, 6.12, 1073.61 }, + { 1.5, 0.85, 415.55 }, + { 1.6, 2.95, 437.64 }, + { 1.4, 4.12, 1574.85 }, + { 1.6, 5.97, 1781.03 }, + { 1.5, 3.85, 1251.34 }, + { 1.4, 5.33, 2538.25 }, + { 1.8, 1.51, 750.10 }, + { 1.5, 3.29, 1884.12 }, + { 1.5, 0.99, 643.08 }, + { 1.3, 3.79, 1567.73 }, + { 1.7, 0.03, 423.42 }, + { 1.5, 5.35, 1354.43 }, + { 1.4, 0.70, 867.42 }, + { 1.1, 1.80, 618.56 }, + { 1.1, 4.70, 113.39 }, + { 1.1, 3.96, 1891.24 }, + { 1.5, 1.50, 430.53 }, + { 1.1, 5.13, 25.27 }, + { 1.2, 2.97, 241.75 }, + { 1.3, 2.29, 2420.93 }, + { 1.1, 0.05, 63.74 }, + { 1.4, 5.58, 1382.89 }, + { 1.1, 3.11, 2200.52 }, + { 1.1, 0.79, 127.47 }, + { 1.0, 5.85, 215.75 }, + { 1.1, 3.73, 131.40 }, + { 1.2, 0.48, 824.74 }, + { 1.1, 3.78, 1375.77 }, + { 1.0, 5.91, 265.99 }, + { 1.2, 1.41, 2634.23 }, + { 1.1, 4.80, 1987.22 }, + { 0.9, 6.26, 2015.67 }, + { 1.0, 1.09, 362.86 }, + { 1.1, 5.42, 1279.79 }, + { 0.9, 1.92, 483.22 }, + { 0.9, 2.97, 934.95 }, + { 0.9, 2.66, 145.63 }, + { 0.9, 6.26, 2.45 }, + { 1.1, 4.48, 2214.74 }, + { 1.0, 0.74, 16.67 }, + { 1.0, 4.06, 231.46 }, + { 0.9, 0.09, 628.85 }, + { 0.9, 5.99, 2524.02 }, + { 0.9, 3.16, 2207.63 }, + { 0.8, 1.24, 74.78 }, + { 0.8, 2.90, 2008.56 }, + { 0.8, 2.28, 1478.87 }, + { 1.0, 5.33, 2428.04 }, + { 0.8, 2.38, 2228.97 }, + { 0.8, 4.70, 1670.83 }, + { 1.0, 4.23, 1802.37 }, + { 0.8, 5.87, 1368.66 }, + { 0.7, 5.92, 1685.05 }, + { 0.8, 1.16, 3053.71 }, + { 0.7, 3.13, 56.62 }, + /* 157 terms retained, 0 terms dropped, error 1.7e-07 a.u.*T^3 */ + + /* saturn r, T^4 */ + { 1202.0, 1.41499, 220.41264 }, + { 707.8, 1.1615, 213.2991 }, + { 516.1, 6.2397, 206.1855 }, + { 426.7, 2.4692, 7.1135 }, + { 267.7, 0.1866, 426.5982 }, + { 170.2, 5.9593, 199.0720 }, + { 145.1, 1.4421, 227.5262 }, + { 150.3, 0.4797, 433.7117 }, + { 121.0, 2.4053, 14.2271 }, + { 47.3, 5.569, 639.897 }, + { 15.7, 2.901, 110.206 }, + { 16.7, 0.529, 440.825 }, + { 19.0, 5.856, 647.011 }, + { 14.1, 1.303, 412.371 }, + { 12.7, 2.093, 323.505 }, + { 14.7, 0.299, 419.485 }, + { 11.1, 2.463, 117.320 }, + { 11.3, 0.218, 95.979 }, + { 9.2, 2.28, 21.34 }, + { 9.2, 1.56, 88.87 }, + { 9.0, 0.68, 216.48 }, + { 7.7, 3.59, 302.16 }, + { 7.8, 4.49, 853.20 }, + { 8.4, 1.27, 234.64 }, + { 9.6, 3.14, 0 }, + { 4.8, 2.59, 515.46 }, + { 6.1, 5.17, 103.09 }, + { 4.4, 0.02, 191.96 }, + { 4.4, 1.60, 330.62 }, + { 3.7, 3.30, 210.12 }, + { 4.4, 5.97, 654.12 }, + { 4.4, 4.97, 860.31 }, + { 3.2, 2.73, 522.58 }, + { 4.0, 1.60, 405.26 }, + { 3.1, 0.75, 209.37 }, + { 2.5, 1.19, 124.43 }, + { 3.1, 1.32, 728.76 }, + { 2.2, 3.28, 203.00 }, + { 2.1, 6.15, 429.78 }, + { 2.1, 0.75, 295.05 }, + { 2.0, 3.89, 1066.50 }, + { 2.2, 0.49, 447.94 }, + { 2.2, 0.73, 625.67 }, + { 1.8, 0.09, 942.06 }, + { 1.7, 1.40, 224.34 }, + { 1.6, 3.02, 184.84 }, + { 1.8, 0.82, 223.59 }, + { 1.9, 2.00, 831.86 }, + { 1.6, 5.41, 824.74 }, + { 1.5, 5.96, 422.67 }, + { 1.1, 1.12, 838.97 }, + { 1.2, 1.90, 956.29 }, + { 1.5, 2.12, 529.69 }, + { 1.4, 0.72, 536.80 }, + { 1.1, 0.89, 721.65 }, + { 1.3, 1.65, 17.41 }, + { 1.2, 5.97, 195.14 }, + { 1.0, 5.36, 316.39 }, + { 1.0, 3.06, 1574.85 }, + { 1.1, 1.59, 735.88 }, + { 0.8, 4.93, 56.62 }, + { 0.8, 2.72, 508.35 }, + { 1.0, 1.01, 1045.15 }, + { 0.7, 1.11, 1169.59 }, + /* 64 terms retained, 0 terms dropped, error 1.2e-07 a.u.*T^4 */ + + /* saturn r, T^5 */ + { 128.6, 5.9128, 220.4126 }, + { 32.3, 0.693, 7.114 }, + { 26.7, 5.914, 227.526 }, + { 19.9, 0.674, 14.227 }, + { 20.2, 4.951, 433.712 }, + { 13.5, 1.457, 199.072 }, + { 14.1, 2.671, 206.186 }, + { 13.4, 4.588, 426.598 }, + { 7.3, 4.63, 213.30 }, + { 4.9, 3.61, 639.90 }, + { 3.1, 4.66, 191.96 }, + { 2.9, 0.49, 323.51 }, + { 3.8, 4.90, 440.83 }, + { 3.3, 4.07, 647.01 }, + { 2.9, 3.18, 419.48 }, + { 2.3, 3.70, 88.87 }, + { 1.9, 5.33, 302.16 }, + { 2.1, 3.32, 95.98 }, + { 1.6, 2.67, 853.20 }, + { 2.0, 0.56, 117.32 }, + { 1.6, 0.86, 515.46 }, + { 1.7, 0, 0 }, + { 1.1, 5.98, 3.18 }, + { 1.3, 5.83, 234.64 }, + { 0.9, 5.23, 216.48 }, + { 1.1, 0.16, 412.37 }, + { 0.8, 0.37, 28.45 }, + { 0.8, 5.05, 124.43 }, + /* 28 terms retained, 0 terms dropped, error 9e-08 a.u.*T^5 */ + /* end saturn */ +}; + +int vn_saturn[][3] = { + /* addresses for saturn l, b, r */ + /* T^0 */ { 0, 592, 811, }, + /* T^1 */ { 165, 645, 1099, }, + /* T^2 */ { 303, 698, 1345, }, + /* T^3 */ { 418, 744, 1584, }, + /* T^4 */ { 500, 777, 1741, }, + /* T^5 */ { 566, 803, 1805, }, + /* end */ { 592, 811, 1833, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_uranus[][3] = { + /* uranus l, T^0 */ + { 548129294.3, 0, 0 }, + { 9260408.3, 0.89106422, 74.78159857 }, + { 1504247.8, 3.62719262, 1.48447271 }, + { 365981.7, 1.8996219, 73.2971259 }, + { 272328.1, 3.3582371, 149.5631971 }, + { 70328.5, 5.392544, 63.735898 }, + { 68892.6, 6.092925, 76.266071 }, + { 61998.6, 2.269520, 2.968945 }, + { 61950.7, 2.850989, 11.045700 }, + { 26468.9, 3.141521, 71.812653 }, + { 25710.5, 6.113798, 454.909367 }, + { 21078.9, 4.360595, 148.078724 }, + { 17818.7, 1.744370, 36.648563 }, + { 14613.5, 4.737320, 3.932153 }, + { 11162.5, 5.826820, 224.344796 }, + { 10997.9, 0.488655, 138.517497 }, + { 9527.5, 2.95517, 35.16409 }, + { 7545.5, 5.23626, 109.94569 }, + { 4220.2, 3.23329, 70.84945 }, + { 4051.9, 2.27754, 151.04767 }, + { 3354.6, 1.06549, 4.45342 }, + { 2926.7, 4.62904, 9.56123 }, + { 3490.4, 5.48306, 146.59425 }, + { 3144.1, 4.75199, 77.75054 }, + { 2922.4, 5.35237, 85.82730 }, + { 2272.8, 4.36601, 70.32818 }, + { 2051.2, 1.51774, 0.11187 }, + { 2148.6, 0.60746, 38.13304 }, + { 1991.7, 4.92437, 277.03499 }, + { 1376.2, 2.04281, 65.22037 }, + { 1666.9, 3.62745, 380.12777 }, + { 1284.2, 3.11346, 202.25340 }, + { 1150.4, 0.93344, 3.18139 }, + { 1533.2, 2.58593, 52.69020 }, + { 1281.6, 0.54270, 222.86032 }, + { 1372.1, 4.19642, 111.43016 }, + { 1221.0, 0.19901, 108.46122 }, + { 946.2, 1.1925, 127.4718 }, + { 1151.0, 4.17898, 33.67962 }, + { 1244.3, 0.91613, 2.44768 }, + { 1072.0, 0.23565, 62.25143 }, + { 1090.5, 1.77502, 12.53017 }, + { 707.9, 5.1829, 213.2991 }, + { 653.4, 0.9659, 78.7138 }, + { 627.6, 0.1821, 984.6003 }, + { 524.5, 2.0128, 299.1264 }, + { 559.4, 3.3578, 0.5213 }, + { 606.8, 5.4321, 529.6910 }, + { 404.9, 5.9869, 8.0768 }, + { 467.2, 0.4148, 145.1098 }, + { 471.3, 1.4066, 184.7273 }, + { 483.2, 2.1055, 0.9632 }, + { 395.6, 5.8704, 351.8166 }, + { 433.5, 5.5214, 183.2428 }, + { 309.9, 5.8330, 145.6310 }, + { 378.6, 2.3498, 56.6224 }, + { 399.0, 0.3381, 415.5525 }, + { 300.4, 5.6435, 22.0914 }, + { 249.2, 4.7462, 225.8293 }, + { 239.3, 2.3505, 137.0330 }, + { 294.2, 5.8392, 39.6175 }, + { 216.5, 4.7785, 340.7709 }, + { 251.8, 1.6370, 221.3759 }, + { 219.6, 1.9221, 67.6681 }, + { 202.0, 1.2969, 0.0482 }, + { 224.1, 0.5157, 84.3428 }, + { 216.5, 6.1421, 5.9379 }, + { 222.6, 2.8431, 0.2606 }, + { 207.8, 5.5802, 68.8437 }, + { 187.5, 1.3192, 0.1601 }, + { 158.0, 0.7381, 54.1747 }, + { 199.1, 0.9563, 152.5321 }, + { 168.6, 5.8787, 18.1592 }, + { 170.3, 3.6772, 5.4166 }, + { 193.7, 1.8880, 456.3938 }, + { 193.0, 0.9162, 453.4249 }, + { 181.9, 3.5362, 79.2350 }, + { 173.1, 1.5386, 160.6089 }, + { 164.6, 1.4238, 106.9767 }, + { 172.0, 5.6795, 219.8914 }, + { 162.8, 3.0503, 112.9146 }, + { 146.7, 1.2630, 59.8037 }, + { 139.5, 5.3860, 32.1951 }, + { 138.6, 4.2599, 909.8187 }, + { 143.1, 1.3000, 35.4247 }, + { 123.8, 1.3736, 7.1135 }, + { 104.4, 5.0282, 0.7508 }, + { 103.3, 0.6810, 14.9779 }, + { 94.7, 0.907, 74.670 }, + { 83.0, 2.928, 265.989 }, + { 110.2, 2.0269, 554.0700 }, + { 94.2, 3.943, 74.893 }, + { 79.9, 1.014, 6.592 }, + { 109.4, 5.7058, 77.9630 }, + { 85.9, 1.706, 82.858 }, + { 103.6, 1.4577, 24.3790 }, + { 74.7, 4.632, 69.365 }, + { 79.9, 3.010, 297.642 }, + { 84.5, 0.369, 186.212 }, + { 88.8, 0.525, 181.758 }, + { 70.3, 1.190, 66.705 }, + { 70.0, 0.875, 305.346 }, + { 69.9, 3.761, 131.404 }, + { 84.6, 5.887, 256.540 }, + { 74.3, 6.243, 447.796 }, + { 62.3, 0.169, 479.288 }, + { 72.7, 2.849, 462.023 }, + { 69.1, 4.439, 39.357 }, + { 76.6, 4.587, 6.220 }, + { 73.4, 4.276, 87.312 }, + { 55.3, 1.496, 71.600 }, + { 57.3, 1.630, 143.625 }, + { 61.7, 3.186, 77.229 }, + { 57.6, 3.672, 51.206 }, + { 50.3, 1.123, 20.607 }, + { 53.7, 5.519, 128.956 }, + { 57.9, 2.669, 381.612 }, + { 58.1, 1.586, 60.767 }, + { 45.4, 0.481, 14.015 }, + { 37.6, 6.068, 211.815 }, + { 38.6, 3.436, 153.495 }, + { 46.1, 4.362, 75.745 }, + { 40.1, 4.573, 46.210 }, + { 34.2, 2.940, 140.002 }, + { 38.7, 5.589, 99.161 }, + { 34.8, 1.028, 203.738 }, + { 40.0, 0.699, 218.407 }, + { 32.5, 4.216, 200.769 }, + { 31.9, 5.510, 72.334 }, + { 41.7, 3.824, 81.001 }, + { 34.8, 0.394, 1.373 }, + { 39.8, 6.056, 293.189 }, + { 27.6, 2.183, 125.987 }, + { 36.3, 1.666, 258.024 }, + { 35.4, 1.967, 835.037 }, + { 35.4, 3.723, 692.587 }, + { 27.3, 2.102, 209.367 }, + { 26.5, 4.483, 373.908 }, + { 34.5, 1.079, 191.208 }, + { 29.9, 3.874, 259.509 }, + { 26.2, 3.632, 490.334 }, + { 25.8, 0.545, 41.644 }, + { 27.0, 6.277, 28.572 }, + { 26.4, 5.811, 75.303 }, + { 34.2, 6.056, 275.551 }, + { 29.9, 1.888, 269.921 }, + { 26.2, 6.201, 134.585 }, + { 25.2, 5.425, 116.426 }, + { 26.5, 4.772, 284.149 }, + { 27.0, 4.753, 41.102 }, + { 28.9, 0.171, 528.206 }, + { 25.8, 0.746, 278.519 }, + /* 152 terms retained, 795 terms dropped, error 1.3" */ + + /* uranus l, T^1 */ + { 7502543121.6, 0, 0 }, + { 154458.2, 5.2420166, 74.7815986 }, + { 24456.4, 1.712557, 1.484473 }, + { 9257.8, 0.42845, 11.04570 }, + { 8266.0, 1.50220, 63.73590 }, + { 7841.7, 1.31984, 149.56320 }, + { 3899.1, 0.46484, 3.93215 }, + { 2283.8, 4.17368, 76.26607 }, + { 1926.6, 0.53013, 2.96895 }, + { 1232.7, 1.58634, 70.84945 }, + { 791.2, 5.4364, 3.1814 }, + { 767.0, 1.9956, 73.2971 }, + { 481.7, 2.9840, 85.8273 }, + { 449.8, 4.1383, 138.5175 }, + { 445.6, 3.7230, 224.3448 }, + { 426.6, 4.7313, 71.8127 }, + { 347.7, 2.4537, 9.5612 }, + { 353.8, 2.5832, 148.0787 }, + { 317.1, 5.5786, 52.6902 }, + { 179.9, 5.6837, 12.5302 }, + { 171.1, 3.0006, 78.7138 }, + { 205.6, 2.3626, 2.4477 }, + { 158.0, 2.9093, 0.9632 }, + { 189.1, 4.2024, 56.6224 }, + { 154.7, 5.5908, 4.4534 }, + { 183.8, 0.2837, 151.0477 }, + { 143.5, 2.5905, 62.2514 }, + { 152.0, 2.9422, 77.7505 }, + { 153.5, 4.6519, 35.1641 }, + { 121.5, 4.1484, 127.4718 }, + { 115.5, 3.7322, 65.2204 }, + { 102.0, 4.1875, 145.6310 }, + { 101.7, 6.0339, 0.1119 }, + { 88.2, 3.990, 18.159 }, + { 87.5, 6.155, 202.253 }, + { 80.5, 2.641, 22.091 }, + { 72.0, 6.045, 70.328 }, + { 68.6, 4.051, 77.963 }, + { 59.2, 3.704, 67.668 }, + { 47.3, 3.543, 351.817 }, + { 42.5, 5.724, 5.417 }, + { 44.3, 5.909, 7.114 }, + { 35.6, 3.292, 8.077 }, + { 35.5, 3.328, 71.600 }, + { 36.1, 5.900, 33.680 }, + { 30.6, 5.464, 160.609 }, + { 31.5, 5.620, 984.600 }, + { 38.5, 4.915, 222.860 }, + { 35.0, 5.080, 38.133 }, + { 30.8, 5.496, 59.804 }, + { 28.9, 4.519, 84.343 }, + { 26.6, 5.541, 131.404 }, + { 29.9, 1.660, 447.796 }, + { 29.2, 1.147, 462.023 }, + { 25.8, 4.994, 137.033 }, + { 25.4, 5.736, 380.128 }, + { 21.7, 2.806, 69.365 }, + { 26.6, 6.146, 299.126 }, + { 23.0, 2.249, 111.430 }, + { 19.2, 3.556, 54.175 }, + { 21.8, 0.933, 213.299 }, + { 19.3, 1.862, 108.461 }, + { 16.2, 3.102, 14.978 }, + { 13.1, 1.954, 87.312 }, + { 13.9, 1.541, 340.771 }, + { 13.5, 4.385, 5.938 }, + { 13.1, 5.883, 6.220 }, + { 11.8, 0.326, 35.425 }, + { 11.0, 1.692, 45.577 }, + { 12.4, 0.328, 51.206 }, + { 10.9, 5.971, 265.989 }, + { 11.4, 3.378, 72.334 }, + { 12.0, 3.604, 269.921 }, + { 11.7, 1.745, 79.235 }, + { 13.8, 2.690, 225.829 }, + { 12.0, 5.344, 152.532 }, + { 9.9, 5.50, 153.50 }, + { 10.4, 4.169, 24.379 }, + { 10.6, 3.069, 284.149 }, + { 9.6, 0.50, 209.37 }, + { 9.3, 3.54, 41.64 }, + { 9.5, 5.60, 82.86 }, + { 9.7, 1.01, 68.84 }, + { 9.2, 4.49, 20.61 }, + { 10.2, 3.518, 529.691 }, + { 8.6, 3.89, 60.77 }, + { 10.0, 4.648, 77.229 }, + { 8.7, 1.97, 195.14 }, + { 8.4, 4.41, 134.59 }, + { 9.3, 3.93, 39.62 }, + { 7.8, 5.36, 75.74 }, + { 7.7, 5.77, 73.82 }, + { 7.7, 4.44, 14.01 }, + { 8.4, 2.44, 146.59 }, + { 8.0, 5.73, 184.73 }, + { 7.5, 2.19, 145.11 }, + { 6.4, 0.85, 32.20 }, + { 6.3, 2.17, 74.89 }, + { 7.9, 0.17, 120.36 }, + { 7.0, 4.12, 191.21 }, + { 6.9, 2.13, 116.43 }, + /* 101 terms retained, 325 terms dropped, error 0.29"*T */ + + /* uranus l, T^2 */ + { 53033.3, 0, 0 }, + { 2357.6, 2.26015, 74.78160 }, + { 769.1, 4.5256, 11.0457 }, + { 551.5, 3.2581, 63.7359 }, + { 541.5, 2.2757, 3.9322 }, + { 529.5, 4.9235, 1.4845 }, + { 257.5, 3.6906, 3.1814 }, + { 238.8, 5.8581, 149.5632 }, + { 181.9, 6.2176, 70.8494 }, + { 49.4, 6.031, 56.622 }, + { 53.5, 1.442, 76.266 }, + { 38.2, 1.785, 52.690 }, + { 44.8, 3.909, 2.448 }, + { 44.5, 0.812, 85.827 }, + { 37.4, 4.462, 2.969 }, + { 33.0, 0.864, 9.561 }, + { 24.3, 2.107, 18.159 }, + { 29.4, 5.098, 73.297 }, + { 22.1, 4.817, 78.714 }, + { 22.5, 5.993, 138.517 }, + { 17.2, 2.535, 145.631 }, + { 21.4, 2.399, 77.963 }, + { 20.6, 2.169, 224.345 }, + { 16.8, 3.466, 12.530 }, + { 12.0, 0.019, 22.091 }, + { 10.5, 4.456, 62.251 }, + { 11.0, 0.085, 127.472 }, + { 8.7, 4.26, 7.11 }, + { 10.5, 5.165, 71.600 }, + { 7.2, 1.25, 5.42 }, + { 8.4, 5.50, 67.67 }, + { 6.1, 5.45, 65.22 }, + { 6.0, 4.52, 151.05 }, + { 5.7, 1.83, 202.25 }, + { 6.1, 3.36, 447.80 }, + { 6.0, 5.73, 462.02 }, + { 5.1, 3.52, 59.80 }, + { 5.2, 1.06, 131.40 }, + { 6.0, 5.61, 148.08 }, + { 5.1, 3.36, 4.45 }, + { 4.8, 1.20, 71.81 }, + { 4.0, 0.68, 77.75 }, + { 3.7, 1.76, 351.82 }, + { 3.1, 3.84, 45.58 }, + { 3.0, 3.32, 160.61 }, + { 3.0, 6.15, 77.23 }, + { 3.6, 4.57, 454.91 }, + { 2.7, 5.36, 269.92 }, + { 2.5, 1.05, 69.36 }, + { 2.3, 2.69, 84.34 }, + { 2.2, 5.08, 14.98 }, + { 2.2, 1.39, 284.15 }, + { 2.1, 4.35, 984.60 }, + { 2.1, 2.32, 120.36 }, + { 1.9, 5.70, 54.17 }, + { 2.0, 3.87, 195.14 }, + { 1.6, 5.08, 209.37 }, + { 1.6, 0.49, 137.03 }, + { 1.6, 2.91, 51.21 }, + { 1.7, 6.26, 41.64 }, + { 2.1, 1.24, 35.16 }, + { 1.7, 6.28, 277.03 }, + /* 62 terms retained, 89 terms dropped, error 0.055"*T^2 */ + + /* uranus l, T^3 */ + { 120.9, 0.0242, 74.7816 }, + { 68.1, 4.121, 3.932 }, + { 52.8, 2.390, 11.046 }, + { 43.8, 2.960, 1.484 }, + { 45.3, 2.044, 3.181 }, + { 45.8, 0, 0 }, + { 25.0, 4.887, 63.736 }, + { 21.1, 4.545, 70.849 }, + { 19.9, 2.313, 149.563 }, + { 8.9, 1.58, 56.62 }, + { 4.3, 0.23, 18.16 }, + { 3.6, 5.39, 76.27 }, + { 3.5, 4.98, 85.83 }, + { 3.5, 4.13, 52.69 }, + { 3.6, 0.95, 77.96 }, + { 2.3, 0.86, 145.63 }, + { 2.7, 0.37, 78.71 }, + { 1.9, 2.68, 7.11 }, + { 2.2, 5.66, 9.56 }, + { 1.4, 4.87, 224.34 }, + { 1.3, 1.25, 12.53 }, + { 1.6, 0.49, 71.60 }, + { 1.5, 5.20, 73.30 }, + { 1.2, 3.93, 22.09 }, + { 0.9, 2.19, 127.47 }, + { 0.8, 3.98, 462.02 }, + { 0.8, 5.06, 447.80 }, + { 0.7, 0.35, 5.63 }, + { 0.7, 1.06, 138.52 }, + { 0.7, 2.94, 131.40 }, + { 0.5, 1.59, 151.05 }, + { 0.4, 4.33, 120.36 }, + /* 32 terms retained, 14 terms dropped, error 0.0098"*T^3 */ + + /* uranus l, T^4 */ + { 113.9, 3.1416, 0 }, + { 5.6, 4.58, 74.78 }, + { 3.2, 0.35, 11.05 }, + { 1.2, 3.42, 56.62 }, + { 0.6, 4.66, 18.16 }, + { 0.2, 3.80, 149.56 }, + { 0.1, 4.36, 63.74 }, + /* 7 terms retained, 0 terms dropped, error 0.0016"*T^4 */ + + /* uranus l, T^5 */ + { 0.9, 3.14, 0 }, + /* 1 terms retained, 0 terms dropped, error 0.0051"*T^5 */ + /* end uranus l */ + + /* uranus b, T^0 */ + { 1346277.6, 2.61877811, 74.78159857 }, + { 62341.4, 5.081112, 149.563197 }, + { 61601.2, 3.141593, 0 }, + { 9963.7, 1.61604, 76.26607 }, + { 9926.2, 0.57630, 73.29713 }, + { 3259.5, 1.26119, 224.34480 }, + { 2972.3, 2.24367, 1.48447 }, + { 2010.3, 6.05550, 148.07872 }, + { 1522.2, 0.27960, 63.73590 }, + { 924.1, 4.0382, 151.0477 }, + { 760.6, 6.1400, 71.8127 }, + { 420.3, 5.2128, 11.0457 }, + { 430.7, 3.5545, 213.2991 }, + { 436.8, 3.3808, 529.6910 }, + { 522.3, 3.3209, 138.5175 }, + { 434.6, 0.3407, 77.7505 }, + { 462.6, 0.7426, 85.8273 }, + { 232.6, 2.2572, 222.8603 }, + { 215.8, 1.5912, 38.1330 }, + { 244.7, 0.7880, 2.9689 }, + { 179.9, 3.7249, 299.1264 }, + { 174.9, 1.2355, 146.5943 }, + { 173.7, 1.9365, 380.1278 }, + { 160.4, 5.3364, 111.4302 }, + { 144.1, 5.9624, 35.1641 }, + { 102.0, 2.6188, 78.7138 }, + { 116.4, 5.7388, 70.8494 }, + { 106.4, 0.9410, 70.3282 }, + { 86.2, 0.703, 39.618 }, + { 72.6, 0.206, 225.829 }, + { 71.2, 0.833, 109.946 }, + { 57.5, 2.670, 108.461 }, + { 54.3, 3.352, 184.727 }, + { 44.5, 2.744, 152.532 }, + { 38.6, 5.174, 202.253 }, + { 39.2, 2.171, 351.817 }, + { 41.3, 3.221, 160.609 }, + { 35.1, 4.001, 112.915 }, + { 33.1, 3.614, 221.376 }, + { 31.3, 2.720, 145.110 }, + { 37.3, 4.021, 52.690 }, + { 32.0, 1.292, 145.631 }, + { 27.6, 3.701, 36.649 }, + /* 43 terms retained, 240 terms dropped, error 0.75" */ + + /* uranus b, T^1 */ + { 206366.2, 4.1239431, 74.7815986 }, + { 8563.2, 0.33820, 149.56320 }, + { 1725.7, 2.12193, 73.29713 }, + { 1368.9, 3.06862, 76.26607 }, + { 1374.4, 0, 0 }, + { 399.8, 2.8477, 224.3448 }, + { 450.6, 3.7766, 1.4845 }, + { 307.2, 1.2546, 148.0787 }, + { 154.3, 3.7858, 63.7359 }, + { 110.9, 5.3289, 138.5175 }, + { 112.4, 5.5730, 151.0477 }, + { 83.5, 3.592, 71.813 }, + { 55.6, 3.401, 85.827 }, + { 41.4, 4.455, 78.714 }, + { 53.7, 1.705, 77.751 }, + { 41.9, 1.215, 11.046 }, + { 32.0, 3.774, 222.860 }, + { 30.3, 2.564, 2.969 }, + { 27.0, 5.337, 213.299 }, + { 26.2, 0.416, 380.128 }, + { 20.1, 5.931, 529.691 }, + { 23.0, 2.489, 146.594 }, + { 19.6, 5.372, 299.126 }, + { 20.4, 3.702, 70.849 }, + { 19.1, 1.092, 111.430 }, + { 19.4, 3.830, 38.133 }, + { 10.8, 2.663, 3.932 }, + { 10.2, 2.313, 109.946 }, + { 9.4, 2.77, 39.62 }, + { 7.7, 1.81, 225.83 }, + { 8.1, 4.69, 184.73 }, + { 6.6, 5.50, 35.16 }, + { 7.4, 1.18, 65.22 }, + { 6.5, 4.98, 71.60 }, + /* 34 terms retained, 120 terms dropped, error 0.16"*T */ + + /* uranus b, T^2 */ + { 9211.7, 5.80044, 74.78160 }, + { 556.9, 0, 0 }, + { 286.3, 2.1773, 149.5632 }, + { 95.0, 3.842, 73.297 }, + { 45.4, 4.878, 76.266 }, + { 20.1, 5.463, 1.484 }, + { 14.8, 0.880, 138.517 }, + { 14.0, 5.072, 63.736 }, + { 14.3, 2.845, 148.079 }, + { 10.1, 5.003, 224.345 }, + { 8.3, 6.27, 78.71 }, + { 4.7, 5.16, 71.81 }, + { 3.8, 6.28, 85.83 }, + { 3.5, 3.53, 11.05 }, + { 2.6, 1.44, 151.05 }, + { 2.4, 4.23, 3.93 }, + { 2.6, 0.41, 71.60 }, + /* 17 terms retained, 43 terms dropped, error 0.045"*T^2 */ + + /* uranus b, T^3 */ + { 267.8, 1.2510, 74.7816 }, + { 11.0, 3.142, 0 }, + { 6.2, 4.01, 149.56 }, + { 3.4, 5.78, 73.30 }, + { 1.6, 1.06, 63.74 }, + { 1.3, 1.67, 78.71 }, + { 1.2, 2.59, 138.52 }, + { 1.1, 0.29, 76.27 }, + { 0.6, 1.87, 71.60 }, + { 0.6, 0.80, 1.48 }, + { 0.5, 4.43, 148.08 }, + /* 11 terms retained, 5 terms dropped, error 0.0067"*T^3 */ + + /* uranus b, T^4 */ + { 5.7, 2.85, 74.78 }, + { 0.3, 3.14, 0 }, + /* 2 terms retained, 0 terms dropped, error 0.0021"*T^4 */ + /* end uranus b */ + + /* uranus r, T^0 */ + { 1921264847.9, 0, 0 }, + { 88784984.1, 5.603775270, 74.781598567 }, + { 3440835.5, 0.32836099, 73.29712586 }, + { 2055653.5, 1.78295170, 149.56319713 }, + { 649321.9, 4.5224730, 76.2660713 }, + { 602248.1, 3.8600382, 63.7358983 }, + { 496404.2, 1.4013993, 454.9093665 }, + { 338525.5, 1.5800268, 138.5174969 }, + { 243508.2, 1.5708660, 71.8126532 }, + { 190521.9, 1.9980936, 1.4844727 }, + { 161858.3, 2.7913786, 148.0787244 }, + { 143705.9, 1.3836857, 11.0457003 }, + { 93192.4, 0.174372, 36.648563 }, + { 71424.3, 4.245093, 224.344796 }, + { 89805.8, 3.661054, 109.945689 }, + { 39009.6, 1.669711, 70.849445 }, + { 46677.3, 1.399766, 35.164090 }, + { 39025.7, 3.362347, 277.034994 }, + { 36755.2, 3.886489, 146.594252 }, + { 30348.9, 0.701004, 151.047670 }, + { 29156.3, 3.180562, 77.750544 }, + { 20471.6, 1.555890, 202.253395 }, + { 25620.4, 5.256563, 380.127768 }, + { 25785.8, 3.785377, 85.827299 }, + { 22637.2, 0.725191, 529.690965 }, + { 20473.2, 2.796398, 70.328180 }, + { 17900.6, 0.554555, 2.968945 }, + { 12328.2, 5.960392, 127.471797 }, + { 14701.6, 4.904344, 108.461216 }, + { 11494.7, 0.437740, 65.220371 }, + { 15502.8, 5.354050, 38.133036 }, + { 10792.7, 1.421049, 213.299095 }, + { 11696.1, 3.298256, 3.932153 }, + { 11959.4, 1.750441, 984.600332 }, + { 12896.5, 2.621540, 111.430161 }, + { 11853.0, 0.993428, 52.690198 }, + { 9111.4, 4.99639, 62.25143 }, + { 8420.6, 5.25351, 222.86032 }, + { 7449.1, 0.79492, 351.81659 }, + { 8402.1, 5.03878, 415.55249 }, + { 6046.4, 5.67961, 78.71375 }, + { 5524.1, 3.11499, 9.56123 }, + { 7329.5, 3.97278, 183.24281 }, + { 5444.9, 5.10576, 145.10978 }, + { 5238.1, 2.62960, 33.67962 }, + { 4079.2, 3.22065, 340.77089 }, + { 3801.6, 6.10986, 184.72729 }, + { 3919.5, 4.25015, 39.61751 }, + { 2940.5, 2.14637, 137.03302 }, + { 3781.2, 3.45840, 456.39384 }, + { 2942.2, 0.42394, 299.12639 }, + { 3686.8, 2.48718, 453.42489 }, + { 3101.7, 4.14031, 219.89138 }, + { 2962.6, 0.82978, 56.62235 }, + { 2937.8, 3.67657, 140.00197 }, + { 2865.1, 0.30997, 12.53017 }, + { 2538.0, 4.85458, 131.40395 }, + { 1962.5, 5.24342, 84.34283 }, + { 2363.6, 0.44253, 554.06999 }, + { 1979.4, 6.12836, 106.97674 }, + { 2182.6, 2.94040, 305.34617 }, + { 1963.0, 0.04115, 221.37585 }, + { 1829.6, 4.01106, 68.84371 }, + { 1642.9, 0.35564, 67.66805 }, + { 1584.8, 3.16267, 225.82927 }, + { 1848.7, 2.91112, 909.81873 }, + { 1632.4, 4.23062, 22.09140 }, + { 1401.4, 1.39084, 265.98929 }, + { 1403.7, 5.63564, 4.45342 }, + { 1655.9, 1.96431, 79.23502 }, + { 1249.0, 5.44027, 54.17467 }, + { 1563.4, 1.47918, 112.91463 }, + { 1248.1, 4.88984, 479.28839 }, + { 1197.4, 2.52186, 145.63104 }, + { 1507.0, 5.24186, 181.75834 }, + { 1481.7, 5.66203, 152.53214 }, + { 1438.8, 1.53046, 447.79582 }, + { 1408.5, 4.41922, 462.02291 }, + { 1477.1, 4.32215, 256.53994 }, + { 1228.3, 5.97703, 59.80375 }, + { 1250.0, 6.24485, 160.60890 }, + { 906.5, 5.6203, 74.6697 }, + { 1090.7, 4.15394, 77.96299 }, + { 844.9, 0.1294, 82.8584 }, + { 900.4, 2.3732, 74.8935 }, + { 1072.0, 1.74287, 528.20649 }, + { 689.7, 3.0810, 69.3650 }, + { 593.8, 4.5007, 8.0768 }, + { 718.6, 4.0005, 128.9563 }, + { 699.6, 0.0399, 143.6253 }, + { 575.7, 5.8955, 66.7048 }, + { 759.0, 2.1370, 692.5875 }, + { 710.4, 5.4161, 218.4069 }, + { 548.7, 5.6281, 3.1814 }, + { 651.6, 4.4234, 18.1592 }, + { 539.8, 6.2079, 71.6002 }, + { 544.5, 5.6938, 203.7379 }, + { 710.3, 4.2197, 381.6122 }, + { 593.8, 3.8381, 32.1951 }, + { 710.1, 4.4897, 293.1885 }, + { 705.5, 0.4552, 835.0371 }, + { 588.0, 5.0825, 186.2118 }, + { 598.2, 0.3582, 269.9214 }, + { 641.9, 2.7113, 87.3118 }, + { 495.6, 2.6509, 200.7689 }, + { 630.3, 4.4615, 275.5505 }, + { 575.2, 5.5786, 2.4477 }, + { 569.9, 1.6393, 77.2293 }, + { 556.7, 1.0723, 1059.3819 }, + { 449.4, 0.2798, 617.8059 }, + { 463.6, 1.4345, 297.6419 }, + { 436.5, 0.5280, 209.3669 }, + { 463.9, 2.3544, 211.8146 }, + { 435.9, 2.1008, 1514.2913 }, + { 515.5, 3.2327, 284.1485 }, + { 454.9, 4.0836, 99.1606 }, + { 477.4, 2.8940, 39.3569 }, + { 542.3, 5.3948, 278.5195 }, + { 410.1, 3.0497, 404.5068 }, + { 367.8, 0.7116, 125.9873 }, + { 503.1, 5.8393, 191.2077 }, + { 487.5, 0.0640, 60.7670 }, + { 455.0, 2.5932, 490.3341 }, + { 436.3, 2.0818, 51.2057 }, + { 435.8, 2.7945, 75.7448 }, + { 323.5, 4.8290, 195.1398 }, + { 359.4, 0.0087, 35.4247 }, + { 429.3, 3.0803, 41.1020 }, + { 320.0, 5.4863, 14.9779 }, + { 414.3, 0.0901, 258.0244 }, + { 379.7, 0.0583, 378.6433 }, + { 420.1, 2.2539, 81.0014 }, + { 357.7, 4.7141, 173.9422 }, + { 358.9, 0.3521, 426.5982 }, + { 405.4, 6.1226, 24.3790 }, + { 365.2, 5.5948, 255.0555 }, + { 308.1, 3.9236, 116.4261 }, + { 325.7, 4.7200, 134.5853 }, + { 292.8, 3.9952, 72.3339 }, + { 386.5, 0.6862, 230.5646 }, + { 305.7, 3.7611, 344.7030 }, + { 287.0, 1.8499, 153.4954 }, + { 353.6, 4.6572, 329.8371 }, + { 302.1, 0.1319, 565.1157 }, + { 241.1, 1.6045, 81.3739 }, + { 249.8, 4.2421, 75.3029 }, + { 245.1, 5.9491, 20.6069 }, + { 248.3, 1.0628, 105.4923 }, + { 305.4, 2.5553, 6208.2943 }, + { 296.3, 4.2110, 1364.7281 }, + { 219.9, 2.9612, 120.3582 }, + { 233.6, 2.9707, 46.2098 }, + { 262.4, 3.8365, 831.1050 }, + { 233.5, 4.4812, 628.8516 }, + { 187.4, 3.0353, 135.5486 }, + { 216.8, 3.4291, 241.6103 }, + { 255.8, 1.1671, 177.8744 }, + { 220.5, 0.1963, 180.2739 }, + { 224.5, 0.4068, 114.3991 }, + { 205.4, 2.3038, 259.5089 }, + { 211.1, 4.9308, 103.0928 }, + { 175.8, 5.5082, 7.1135 }, + { 188.5, 2.2359, 5.4166 }, + { 171.7, 5.2173, 41.6445 }, + { 176.1, 1.9596, 756.3234 }, + { 170.4, 4.9498, 206.1855 }, + { 169.5, 4.0432, 55.6591 }, + { 219.0, 0.2479, 294.6730 }, + { 187.8, 2.0454, 408.4389 }, + { 182.3, 0.7073, 391.1735 }, + { 192.1, 5.7672, 291.7040 }, + { 153.7, 4.7066, 543.0243 }, + { 170.0, 4.5100, 288.0807 }, + { 164.1, 5.2253, 67.3592 }, + { 194.3, 6.1169, 414.0680 }, + { 168.0, 5.2581, 518.6453 }, + { 156.6, 0.6630, 220.4126 }, + { 182.3, 0.7838, 417.0370 }, + { 167.5, 4.9224, 422.6660 }, + { 170.8, 2.3093, 98.9000 }, + { 161.7, 3.2726, 443.8637 }, + { 132.8, 2.8888, 373.9080 }, + { 161.1, 3.8234, 451.9404 }, + { 179.3, 4.8241, 366.4856 }, + { 178.2, 3.9803, 10138.5039 }, + { 141.9, 1.2697, 159.1244 }, + { 153.8, 4.2785, 45.5767 }, + { 161.5, 4.9955, 73.8184 }, + { 146.3, 2.6566, 465.9551 }, + { 124.9, 4.3047, 339.2864 }, + { 154.6, 4.3205, 760.2555 }, + { 142.9, 2.0777, 457.8783 }, + { 152.4, 4.6474, 155.7830 }, + { 116.4, 4.4351, 5.9379 }, + { 113.4, 4.6535, 80.1982 }, + { 107.6, 3.7729, 142.4497 }, + { 133.7, 5.3089, 14.0146 }, + { 116.1, 2.5118, 296.1574 }, + { 129.1, 0.3628, 96.8730 }, + { 122.8, 2.3834, 141.4864 }, + { 101.4, 1.0574, 92.3077 }, + { 114.7, 6.2486, 767.3691 }, + { 113.3, 0.8305, 100.3845 }, + { 107.2, 2.3937, 347.8844 }, + { 95.4, 0.801, 342.255 }, + { 110.8, 0.3865, 216.9224 }, + { 127.0, 0.4236, 331.3215 }, + { 112.6, 0.0811, 558.0021 }, + { 103.2, 0.6979, 358.9301 }, + { 111.5, 0.7502, 80.7195 }, + { 90.9, 5.165, 144.147 }, + { 90.7, 0.220, 333.657 }, + { 98.6, 4.332, 74.521 }, + { 89.3, 2.189, 74.830 }, + { 117.2, 3.9497, 74.2603 }, + { 89.1, 5.878, 74.733 }, + { 97.3, 0.694, 977.487 }, + { 116.6, 1.8368, 1289.9465 }, + { 85.4, 5.803, 6.592 }, + { 86.8, 5.620, 300.611 }, + { 105.2, 5.9451, 328.3526 }, + { 112.1, 1.2117, 329.7252 }, + { 83.0, 2.208, 74.942 }, + { 94.3, 4.539, 28.572 }, + { 106.8, 1.8207, 306.8306 }, + { 103.6, 2.9937, 6.2198 }, + { 106.4, 0.8158, 1087.6931 }, + { 77.7, 2.734, 110.206 }, + { 98.4, 3.735, 75.042 }, + { 86.2, 2.833, 983.116 }, + { 89.0, 4.738, 604.473 }, + { 83.0, 1.883, 387.241 }, + { 90.2, 3.804, 986.085 }, + { 84.6, 1.258, 142.141 }, + { 74.7, 1.351, 350.332 }, + { 95.8, 5.548, 969.622 }, + { 90.3, 0.368, 0.963 }, + { 82.7, 5.856, 74.622 }, + { 75.8, 2.780, 88.115 }, + { 83.8, 1.844, 227.314 }, + { 70.7, 4.656, 44.725 }, + { 71.3, 3.650, 894.841 }, + { 94.1, 4.988, 403.134 }, + { 89.0, 4.439, 154.017 }, + { 79.4, 5.667, 267.474 }, + { 75.6, 5.410, 50.403 }, + { 68.6, 4.767, 991.714 }, + { 65.3, 0.693, 152.745 }, + { 63.0, 2.899, 79.889 }, + { 63.9, 0.098, 681.542 }, + { 80.1, 2.975, 526.722 }, + { 69.7, 3.953, 187.696 }, + { 59.5, 3.596, 58.107 }, + { 59.3, 0.509, 28.311 }, + { 68.6, 2.419, 235.390 }, + { 66.0, 5.046, 30.711 }, + { 70.2, 3.736, 546.956 }, + { 66.8, 0.855, 522.577 }, + { 63.0, 0.293, 119.507 }, + { 62.0, 2.316, 74.031 }, + { 71.4, 3.170, 23.576 }, + { 74.8, 5.368, 373.014 }, + { 64.2, 2.368, 157.640 }, + { 70.7, 0.558, 92.941 }, + { 55.8, 5.270, 874.394 }, + { 75.6, 4.663, 101.869 }, + { 73.7, 6.206, 312.460 }, + { 72.9, 0.584, 367.970 }, + { 53.2, 2.247, 17.526 }, + { 63.1, 4.596, 67.880 }, + { 60.5, 0.576, 253.571 }, + { 52.9, 2.459, 264.505 }, + { 70.2, 1.519, 552.586 }, + { 68.6, 2.445, 555.554 }, + { 62.8, 0.338, 561.184 }, + { 49.0, 1.092, 19.122 }, + { 64.6, 5.275, 68.189 }, + { 63.0, 5.359, 92.047 }, + { 47.7, 3.909, 192.692 }, + { 65.3, 4.236, 771.301 }, + { 65.2, 3.739, 536.805 }, + { 59.5, 6.106, 365.001 }, + { 52.2, 1.717, 905.887 }, + { 46.0, 3.871, 210.330 }, + { 46.4, 5.974, 477.804 }, + { 62.1, 2.675, 130.441 }, + { 46.0, 3.894, 48.758 }, + { 42.7, 3.815, 61.288 }, + { 53.9, 2.865, 353.301 }, + { 46.9, 1.000, 166.829 }, + { 42.2, 2.617, 90.823 }, + { 43.3, 4.158, 173.682 }, + { 41.3, 1.799, 149.451 }, + { 45.0, 1.766, 0.521 }, + { 51.9, 2.978, 383.097 }, + { 42.9, 1.574, 120.991 }, + { 49.6, 4.034, 303.862 }, + { 45.3, 3.584, 97.416 }, + { 38.7, 2.394, 31.493 }, + { 38.1, 5.795, 75.532 }, + { 50.1, 4.764, 911.303 }, + { 50.9, 5.155, 439.783 }, + { 43.1, 0.850, 58.319 }, + { 42.7, 5.173, 162.093 }, + { 50.3, 5.816, 66.917 }, + { 35.6, 1.874, 472.175 }, + { 50.0, 1.889, 42.586 }, + { 40.0, 1.743, 89.759 }, + { 45.3, 1.925, 55.138 }, + { 44.9, 1.484, 450.977 }, + { 34.3, 5.203, 316.392 }, + { 46.4, 0.339, 273.103 }, + { 37.2, 2.038, 117.911 }, + { 46.1, 5.623, 1819.637 }, + { 39.4, 4.194, 486.402 }, + { 41.0, 4.830, 149.675 }, + { 45.0, 0.727, 3265.831 }, + { 43.6, 0.753, 404.619 }, + { 31.8, 3.848, 20.447 }, + { 44.2, 4.368, 418.261 }, + { 37.9, 3.029, 167.089 }, + { 43.7, 1.573, 491.558 }, + { 34.0, 1.263, 260.993 }, + { 31.3, 4.161, 13.333 }, + { 40.0, 2.866, 468.243 }, + { 36.5, 2.588, 68.562 }, + { 32.4, 3.116, 103.353 }, + { 33.9, 0.156, 24.118 }, + { 35.9, 1.368, 59.282 }, + { 33.6, 0.755, 290.220 }, + { 29.8, 5.332, 1033.358 }, + { 32.0, 4.675, 205.222 }, + { 31.0, 4.628, 258.876 }, + { 35.3, 1.007, 1108.140 }, + { 33.4, 3.407, 43.129 }, + { 32.6, 5.255, 114.138 }, + { 29.8, 5.642, 254.944 }, + { 31.6, 3.782, 152.011 }, + { 31.0, 2.267, 104.008 }, + { 34.6, 5.173, 25.603 }, + { 28.4, 1.769, 820.059 }, + { 28.0, 3.925, 199.284 }, + { 29.0, 2.582, 76.479 }, + { 33.8, 5.794, 274.066 }, + { 29.4, 5.936, 280.967 }, + { 31.1, 1.394, 178.789 }, + { 30.1, 0.444, 27.087 }, + { 33.8, 6.262, 401.650 }, + { 27.5, 2.152, 480.773 }, + { 26.9, 2.513, 123.540 }, + { 26.1, 0.220, 286.596 }, + { 26.5, 3.882, 372.424 }, + { 34.0, 1.446, 88.796 }, + { 30.1, 0.827, 100.645 }, + { 27.7, 4.648, 198.321 }, + { 33.7, 1.143, 82.486 }, + { 26.5, 1.979, 95.389 }, + { 26.6, 0.399, 106.014 }, + { 27.0, 2.102, 1057.897 }, + { 31.0, 5.340, 476.431 }, + { 27.0, 0.713, 248.724 }, + { 29.1, 3.992, 908.334 }, + { 28.0, 3.465, 1439.510 }, + { 27.8, 4.124, 694.072 }, + { 25.5, 5.496, 115.884 }, + { 27.2, 5.761, 1215.165 }, + { 26.3, 2.775, 490.073 }, + { 26.4, 3.371, 49.721 }, + { 26.9, 3.260, 691.103 }, + { 25.0, 3.650, 73.409 }, + /* 370 terms retained, 754 terms dropped, error 9.6e-06 a.u. */ + + /* uranus r, T^1 */ + { 1479896.4, 3.67205705, 74.78159857 }, + { 71212.1, 6.226010, 63.735898 }, + { 68627.0, 6.134113, 149.563197 }, + { 20857.3, 5.246255, 11.045700 }, + { 21468.2, 2.601767, 76.266071 }, + { 24059.6, 3.141593, 0 }, + { 11405.3, 0.018485, 70.849445 }, + { 7496.8, 0.42360, 73.29713 }, + { 4243.8, 1.41692, 85.82730 }, + { 3505.9, 2.58354, 138.51750 }, + { 3228.8, 5.25500, 3.93215 }, + { 3926.7, 3.15514, 71.81265 }, + { 3060.0, 0.15322, 1.48447 }, + { 3578.4, 2.31161, 224.34480 }, + { 2564.3, 0.98077, 148.07872 }, + { 2429.4, 3.99440, 52.69020 }, + { 1644.7, 2.65349, 127.47180 }, + { 1583.8, 1.43046, 78.71375 }, + { 1413.1, 4.57462, 202.25340 }, + { 1489.5, 2.67559, 56.62235 }, + { 1403.2, 1.36985, 77.75054 }, + { 1228.2, 1.04704, 62.25143 }, + { 1508.0, 5.05996, 151.04767 }, + { 992.1, 2.1717, 65.2204 }, + { 1032.7, 0.26459, 131.40395 }, + { 861.9, 5.0553, 351.8166 }, + { 744.4, 3.0764, 35.1641 }, + { 604.4, 0.9072, 984.6003 }, + { 646.9, 4.4729, 70.3282 }, + { 574.7, 3.2307, 447.7958 }, + { 687.5, 2.4991, 77.9630 }, + { 623.6, 0.8625, 9.5612 }, + { 527.8, 5.1514, 2.9689 }, + { 561.8, 2.7178, 462.0229 }, + { 530.4, 5.9166, 213.2991 }, + { 460.1, 4.2230, 12.5302 }, + { 494.3, 0.4629, 145.6310 }, + { 487.3, 0.7061, 380.1278 }, + { 380.9, 3.8509, 3.1814 }, + { 444.4, 2.1556, 67.6681 }, + { 338.8, 2.5382, 18.1592 }, + { 372.9, 5.0514, 529.6910 }, + { 348.3, 1.7487, 71.6002 }, + { 405.9, 1.2296, 22.0914 }, + { 268.9, 6.2407, 340.7709 }, + { 255.6, 2.9570, 84.3428 }, + { 259.5, 3.9205, 59.8037 }, + { 224.7, 3.9096, 160.6089 }, + { 221.7, 3.6473, 137.0330 }, + { 254.6, 3.5041, 38.1330 }, + { 238.3, 2.0488, 269.9214 }, + { 272.4, 3.3836, 222.8603 }, + { 200.6, 1.2486, 69.3650 }, + { 234.2, 0.2783, 108.4612 }, + { 188.5, 4.4131, 265.9893 }, + { 211.7, 0.6803, 111.4302 }, + { 205.9, 1.5338, 284.1485 }, + { 196.2, 4.7715, 299.1264 }, + { 153.1, 5.2176, 209.3669 }, + { 162.6, 4.3405, 33.6796 }, + { 150.6, 1.9897, 54.1747 }, + { 137.0, 0.4032, 195.1398 }, + { 117.2, 0.3965, 87.3118 }, + { 127.9, 2.4033, 39.6175 }, + { 104.2, 2.9215, 134.5853 }, + { 103.9, 1.8162, 72.3339 }, + { 105.7, 0.1707, 79.2350 }, + { 106.4, 0.6980, 2.4477 }, + { 95.3, 4.029, 82.858 }, + { 104.8, 4.4362, 305.3462 }, + { 93.8, 5.018, 51.206 }, + { 103.7, 2.5755, 191.2077 }, + { 106.7, 1.2300, 225.8293 }, + { 93.5, 3.093, 77.229 }, + { 97.4, 3.814, 152.532 }, + { 84.6, 5.725, 68.844 }, + { 77.4, 0.083, 45.577 }, + { 76.2, 4.204, 73.818 }, + { 86.2, 0.531, 145.110 }, + { 75.8, 3.786, 75.745 }, + { 77.6, 1.636, 479.288 }, + { 84.6, 0.617, 116.426 }, + { 100.2, 4.9408, 120.3582 }, + { 72.1, 4.305, 565.116 }, + { 70.7, 2.385, 60.767 }, + { 71.6, 3.939, 153.495 }, + { 84.6, 5.560, 344.703 }, + { 63.6, 1.937, 41.644 }, + { 71.6, 3.712, 408.439 }, + { 61.6, 3.900, 4.453 }, + { 65.0, 1.558, 106.977 }, + { 59.9, 0.601, 74.893 }, + { 62.0, 4.394, 453.425 }, + { 63.4, 4.192, 184.727 }, + { 62.3, 3.238, 422.666 }, + { 54.4, 3.725, 7.114 }, + { 52.5, 6.086, 404.507 }, + { 59.1, 1.556, 456.394 }, + { 52.6, 3.505, 125.987 }, + { 52.8, 5.201, 358.930 }, + { 58.1, 5.335, 220.413 }, + { 52.9, 4.448, 426.598 }, + { 50.9, 0.526, 490.334 }, + { 55.0, 1.601, 14.978 }, + { 49.5, 4.255, 5.417 }, + { 51.3, 0.368, 206.186 }, + { 51.8, 1.758, 8.077 }, + { 57.0, 0.841, 146.594 }, + { 49.1, 0.941, 99.161 }, + { 46.4, 5.351, 152.745 }, + { 48.0, 1.972, 288.081 }, + { 43.8, 3.037, 20.607 }, + { 49.5, 5.846, 112.915 }, + { 42.0, 0.046, 128.956 }, + { 48.6, 3.628, 81.001 }, + { 41.5, 2.337, 277.035 }, + { 40.0, 5.095, 35.425 }, + { 41.9, 2.511, 24.379 }, + { 38.3, 3.619, 173.942 }, + { 38.4, 2.060, 333.657 }, + { 42.6, 1.261, 1514.291 }, + { 38.9, 0.742, 347.884 }, + { 38.5, 4.951, 92.941 }, + { 33.2, 1.384, 74.670 }, + { 33.8, 3.684, 66.917 }, + { 39.0, 5.492, 200.769 }, + { 31.9, 0.540, 203.738 }, + { 33.3, 6.260, 1059.382 }, + { 30.8, 2.538, 977.487 }, + { 29.2, 5.431, 58.107 }, + { 30.1, 0.195, 387.241 }, + { 29.0, 3.105, 991.714 }, + { 35.6, 3.729, 96.873 }, + { 27.6, 0.371, 80.198 }, + { 32.5, 4.384, 221.376 }, + { 27.0, 1.356, 0.963 }, + { 31.3, 0.796, 373.014 }, + { 31.1, 2.054, 230.565 }, + { 25.9, 3.468, 144.147 }, + { 30.2, 0.714, 109.946 }, + { 24.7, 3.042, 14.015 }, + { 27.9, 4.766, 415.552 }, + { 25.1, 5.124, 81.374 }, + { 25.6, 2.569, 522.577 }, + { 24.4, 2.203, 628.852 }, + { 25.5, 1.795, 143.625 }, + { 24.2, 5.672, 443.864 }, + { 25.7, 5.432, 546.956 }, + { 24.2, 5.600, 32.195 }, + { 24.4, 3.303, 617.806 }, + { 23.5, 0.658, 46.210 }, + { 22.4, 4.821, 135.549 }, + { 27.2, 2.027, 536.805 }, + { 22.2, 4.617, 391.173 }, + { 22.0, 4.592, 241.610 }, + { 20.8, 0.244, 465.955 }, + { 27.3, 2.152, 140.002 }, + { 21.4, 5.272, 159.124 }, + { 23.6, 4.950, 561.184 }, + { 24.9, 0.546, 181.758 }, + { 23.0, 3.806, 55.138 }, + { 19.8, 1.303, 518.645 }, + { 19.3, 1.314, 543.024 }, + { 19.7, 4.909, 909.819 }, + { 20.8, 0.912, 76.479 }, + { 19.9, 0.665, 66.705 }, + { 19.0, 4.680, 98.900 }, + { 25.9, 4.529, 454.909 }, + { 21.9, 1.234, 41.102 }, + { 18.7, 6.096, 103.093 }, + { 18.2, 0.973, 55.659 }, + { 21.2, 4.194, 329.725 }, + { 19.4, 4.315, 6.220 }, + { 18.5, 5.786, 142.450 }, + { 22.6, 5.846, 297.642 }, + { 16.8, 6.091, 211.815 }, + { 16.4, 2.500, 61.288 }, + { 20.4, 3.161, 186.212 }, + { 16.0, 2.983, 81.895 }, + { 19.0, 6.012, 155.783 }, + { 17.7, 4.826, 273.103 }, + { 15.1, 3.656, 472.175 }, + { 18.4, 3.476, 36.649 }, + { 16.3, 0.131, 554.070 }, + { 18.6, 0.239, 23.576 }, + { 14.4, 2.694, 70.116 }, + { 15.2, 2.438, 486.402 }, + { 14.0, 5.124, 29.205 }, + { 15.8, 4.249, 146.382 }, + { 14.1, 1.557, 110.206 }, + { 17.5, 1.945, 835.037 }, + { 13.7, 1.638, 92.047 }, + { 13.8, 0.137, 235.390 }, + { 13.6, 2.854, 49.509 }, + { 12.6, 3.209, 100.384 }, + { 12.4, 2.886, 60.555 }, + { 15.0, 0.326, 259.509 }, + { 12.9, 2.776, 105.492 }, + { 12.3, 3.364, 440.682 }, + { 15.2, 0.256, 258.876 }, + { 12.1, 0.109, 157.640 }, + { 12.9, 0.307, 124.290 }, + { 10.9, 3.429, 33.137 }, + { 11.2, 4.988, 604.473 }, + { 10.8, 3.863, 767.369 }, + { 11.6, 2.605, 166.829 }, + { 10.2, 5.278, 264.505 }, + { 10.9, 0.641, 558.002 }, + { 12.3, 4.340, 16.675 }, + { 9.9, 0.67, 31.49 }, + { 12.6, 4.832, 114.399 }, + { 10.5, 0.204, 275.551 }, + { 11.3, 0.961, 373.908 }, + { 12.1, 1.917, 378.643 }, + { 12.2, 0.705, 218.407 }, + { 10.8, 5.745, 88.115 }, + { 9.5, 0.66, 353.30 }, + { 11.0, 2.630, 154.017 }, + { 9.1, 2.99, 681.54 }, + { 10.4, 2.331, 132.888 }, + { 9.2, 4.79, 216.48 }, + { 9.3, 0.76, 129.92 }, + { 8.9, 0.78, 67.36 }, + { 8.8, 6.13, 150.53 }, + { 9.6, 2.89, 67.88 }, + { 10.5, 0.369, 699.701 }, + { 9.3, 1.50, 19.64 }, + { 9.4, 5.26, 80.72 }, + { 10.1, 3.565, 278.519 }, + { 9.5, 3.06, 149.68 }, + { 9.2, 3.03, 162.09 }, + { 8.4, 2.18, 342.26 }, + { 9.2, 5.33, 152.01 }, + { 9.8, 2.44, 75.30 }, + { 10.0, 0.819, 339.286 }, + { 9.4, 1.94, 147.12 }, + { 7.9, 4.72, 106.01 }, + { 8.8, 0.02, 42.59 }, + { 7.8, 0.61, 135.34 }, + { 8.2, 2.60, 469.14 }, + { 10.1, 2.586, 50.403 }, + { 8.6, 5.69, 760.26 }, + { 7.5, 2.65, 5.94 }, + { 8.7, 0.54, 66.18 }, + { 8.0, 1.94, 180.27 }, + { 7.5, 5.95, 97.42 }, + { 7.6, 5.80, 450.98 }, + { 8.7, 3.70, 300.61 }, + { 7.7, 1.47, 32.24 }, + { 8.2, 2.31, 254.94 }, + { 8.5, 1.28, 39.36 }, + { 7.0, 0.68, 874.39 }, + { 8.9, 0.16, 43.13 }, + { 7.2, 4.98, 117.91 }, + { 7.4, 4.09, 92.31 }, + { 7.3, 5.04, 756.32 }, + { 8.5, 1.22, 79.45 }, + { 6.9, 6.04, 350.33 }, + { 8.8, 1.33, 48.76 }, + { 7.3, 3.33, 68.19 }, + { 6.8, 4.78, 142.66 }, + { 6.8, 3.90, 480.77 }, + { 7.1, 1.28, 68.56 }, + { 7.9, 4.30, 624.92 }, + { 6.7, 5.43, 610.69 }, + { 6.5, 5.44, 88.80 }, + { 7.6, 4.81, 312.46 }, + { 7.2, 3.18, 268.44 }, + { 8.1, 1.99, 692.59 }, + { 6.5, 1.05, 685.47 }, + { 6.6, 1.38, 291.26 }, + { 6.9, 2.59, 282.66 }, + { 7.1, 5.80, 468.24 }, + { 6.3, 2.58, 458.09 }, + { 7.6, 0.49, 296.16 }, + { 8.5, 0.01, 227.31 }, + { 6.5, 3.99, 42.54 }, + { 6.4, 1.04, 365.90 }, + { 8.2, 1.13, 69.15 }, + { 6.4, 0.16, 228.28 }, + { 8.0, 4.04, 183.24 }, + { 6.3, 3.52, 285.63 }, + { 6.9, 3.32, 306.83 }, + { 6.9, 1.34, 7.86 }, + { 6.5, 0.46, 106.27 }, + { 6.6, 5.25, 58.32 }, + { 6.4, 0.35, 411.62 }, + { 6.4, 5.19, 120.99 }, + { 7.0, 4.86, 419.48 }, + { 6.4, 2.78, 198.32 }, + /* 290 terms retained, 224 terms dropped, error 2.2e-06 a.u.*T */ + + /* uranus r, T^2 */ + { 22439.9, 0.699531, 74.781599 }, + { 4727.0, 1.69902, 63.73590 }, + { 1681.9, 4.64834, 70.84945 }, + { 1433.8, 3.52120, 149.56320 }, + { 1649.6, 3.09660, 11.04570 }, + { 770.2, 0, 0 }, + { 461.0, 0.7668, 3.9322 }, + { 500.4, 6.1723, 76.2661 }, + { 390.4, 4.4961, 56.6224 }, + { 389.9, 5.5267, 85.8273 }, + { 292.1, 0.2039, 52.6902 }, + { 272.9, 3.8471, 138.5175 }, + { 286.6, 3.5336, 73.2971 }, + { 205.4, 3.2476, 78.7138 }, + { 219.7, 1.9642, 131.4039 }, + { 215.8, 0.8481, 77.9630 }, + { 128.8, 2.0815, 3.1814 }, + { 148.6, 4.8984, 127.4718 }, + { 117.5, 4.9341, 447.7958 }, + { 112.7, 1.0136, 462.0229 }, + { 98.9, 6.158, 224.345 }, + { 91.4, 0.680, 18.159 }, + { 89.2, 0.234, 202.253 }, + { 88.2, 2.931, 62.251 }, + { 114.1, 4.7874, 145.6310 }, + { 103.9, 3.5856, 71.6002 }, + { 61.8, 3.300, 351.817 }, + { 57.8, 4.907, 22.091 }, + { 64.4, 3.390, 1.484 }, + { 71.1, 6.105, 454.909 }, + { 51.0, 3.867, 65.220 }, + { 63.5, 3.962, 67.668 }, + { 59.0, 5.555, 9.561 }, + { 48.7, 3.747, 269.921 }, + { 43.6, 1.926, 59.804 }, + { 42.2, 2.617, 151.048 }, + { 42.4, 6.136, 284.149 }, + { 44.3, 5.900, 71.813 }, + { 37.3, 5.913, 984.600 }, + { 36.2, 5.403, 77.751 }, + { 42.0, 2.091, 12.530 }, + { 31.4, 4.592, 148.079 }, + { 31.3, 2.267, 195.140 }, + { 27.2, 3.532, 209.367 }, + { 28.2, 4.578, 77.229 }, + { 26.1, 0.660, 120.358 }, + { 24.4, 5.867, 69.365 }, + { 23.0, 1.038, 84.343 }, + { 22.7, 1.714, 160.609 }, + { 27.7, 4.915, 277.035 }, + { 20.8, 2.196, 45.577 }, + { 20.0, 2.321, 2.448 }, + { 16.6, 4.775, 213.299 }, + { 16.6, 1.856, 340.771 }, + { 17.2, 4.369, 54.175 }, + { 16.1, 3.646, 152.745 }, + { 14.8, 5.438, 408.439 }, + { 13.9, 3.385, 358.930 }, + { 13.3, 5.252, 137.033 }, + { 13.3, 1.263, 134.585 }, + { 12.9, 3.033, 92.941 }, + { 12.5, 1.332, 51.206 }, + { 13.4, 1.532, 422.666 }, + { 16.4, 0.402, 265.989 }, + { 12.0, 5.104, 191.208 }, + { 12.9, 4.432, 87.312 }, + { 11.4, 2.026, 7.114 }, + { 11.8, 4.656, 41.644 }, + { 12.0, 3.239, 116.426 }, + { 11.7, 3.733, 220.413 }, + { 11.6, 4.165, 60.555 }, + { 10.2, 0.329, 70.328 }, + { 11.3, 1.076, 72.334 }, + { 9.7, 3.06, 2.97 }, + { 9.3, 2.44, 565.12 }, + { 9.0, 5.19, 225.83 }, + { 10.3, 1.186, 344.703 }, + { 8.8, 6.01, 5.42 }, + { 8.5, 5.25, 347.88 }, + { 8.3, 3.72, 14.98 }, + { 8.3, 2.27, 299.13 }, + { 8.1, 5.72, 55.14 }, + { 7.8, 0.90, 222.86 }, + { 8.3, 4.49, 70.12 }, + { 8.8, 5.82, 153.50 }, + { 8.5, 3.91, 333.66 }, + { 9.9, 5.97, 35.16 }, + { 9.6, 0.39, 415.55 }, + { 7.1, 1.51, 991.71 }, + { 6.6, 1.18, 96.87 }, + { 8.1, 2.26, 206.19 }, + { 6.5, 2.99, 380.13 }, + { 9.0, 6.05, 146.38 }, + { 6.1, 0.06, 99.16 }, + { 5.8, 0.82, 142.45 }, + { 5.8, 4.63, 49.51 }, + { 5.6, 0.66, 58.11 }, + { 6.0, 2.49, 373.01 }, + { 5.7, 2.24, 80.20 }, + { 5.3, 5.07, 440.68 }, + { 5.2, 4.36, 977.49 }, + { 5.4, 0.85, 546.96 }, + { 5.8, 0.34, 536.80 }, + { 5.9, 5.48, 76.48 }, + { 5.3, 3.73, 23.58 }, + { 5.2, 4.14, 132.89 }, + { 5.3, 6.14, 39.62 }, + { 5.8, 3.40, 458.09 }, + { 5.0, 4.26, 522.58 }, + { 5.0, 4.79, 387.24 }, + { 5.2, 3.26, 561.18 }, + { 4.6, 1.69, 152.53 }, + { 5.3, 1.84, 124.29 }, + { 5.0, 0.37, 60.77 }, + { 4.5, 2.30, 312.46 }, + { 4.5, 0.46, 33.14 }, + { 5.7, 0.90, 81.90 }, + { 5.8, 0.92, 20.61 }, + { 5.7, 0.66, 38.13 }, + { 4.3, 3.55, 479.29 }, + { 4.2, 4.38, 79.24 }, + { 4.2, 1.65, 128.96 }, + { 5.1, 1.41, 144.15 }, + { 4.0, 6.07, 19.64 }, + { 4.0, 5.77, 288.08 }, + { 5.0, 3.00, 29.20 }, + { 3.8, 2.60, 426.60 }, + { 3.9, 3.20, 159.12 }, + { 3.9, 4.44, 141.70 }, + { 5.3, 4.08, 111.43 }, + { 4.6, 0.01, 298.23 }, + { 3.7, 5.28, 353.30 }, + { 3.9, 5.27, 521.09 }, + { 3.7, 5.15, 490.33 }, + { 4.0, 0.61, 152.01 }, + { 3.9, 1.34, 535.32 }, + { 4.4, 0.62, 827.17 }, + { 3.6, 4.72, 6.90 }, + { 3.6, 3.25, 230.56 }, + { 3.5, 0.79, 983.12 }, + { 4.5, 2.87, 129.92 }, + { 3.6, 5.59, 774.48 }, + { 3.5, 4.50, 376.20 }, + { 3.4, 2.56, 258.88 }, + { 4.4, 2.10, 404.51 }, + { 3.3, 0.90, 469.14 }, + { 3.3, 3.86, 42.54 }, + { 3.2, 2.76, 248.72 }, + { 3.2, 0.08, 1514.29 }, + { 3.8, 5.30, 369.08 }, + { 3.3, 2.25, 73.82 }, + { 3.1, 2.60, 433.71 }, + { 3.1, 4.55, 980.67 }, + { 3.1, 1.27, 200.77 }, + { 3.1, 1.71, 639.90 }, + { 3.1, 3.63, 16.67 }, + { 3.5, 4.94, 411.62 }, + { 3.5, 4.49, 881.51 }, + { 3.3, 5.59, 472.17 }, + { 3.0, 6.03, 291.26 }, + { 3.5, 2.17, 554.07 }, + { 3.1, 0.52, 1094.81 }, + { 3.3, 2.49, 451.73 }, + { 2.9, 0.50, 305.35 }, + { 3.1, 4.20, 146.59 }, + { 2.9, 2.45, 135.34 }, + { 3.0, 0.39, 25.27 }, + { 2.8, 2.53, 867.28 }, + { 2.7, 5.29, 125.99 }, + { 2.9, 4.71, 218.93 }, + { 2.8, 4.28, 350.33 }, + { 2.7, 1.99, 82.86 }, + { 2.9, 3.09, 216.48 }, + { 3.4, 3.68, 661.09 }, + { 2.9, 1.44, 381.61 }, + { 2.8, 0.39, 33.68 }, + { 2.8, 4.63, 1357.61 }, + { 3.4, 2.13, 685.47 }, + { 2.6, 5.93, 89.76 }, + { 2.7, 0.76, 486.40 }, + { 2.7, 4.16, 235.39 }, + { 2.6, 3.82, 550.89 }, + { 3.4, 3.17, 108.46 }, + { 2.6, 5.68, 24.38 }, + { 2.7, 1.87, 529.69 }, + { 2.6, 4.37, 1080.58 }, + { 2.4, 3.07, 391.17 }, + { 2.4, 5.74, 535.91 }, + { 2.3, 5.19, 1059.38 }, + { 2.6, 1.10, 913.00 }, + { 2.2, 6.10, 140.00 }, + { 3.1, 5.35, 681.54 }, + /* 192 terms retained, 0 terms dropped, error 8.5e-07 a.u.*T^2 */ + + /* uranus r, T^3 */ + { 1164.4, 4.73453, 74.78160 }, + { 212.4, 3.3426, 63.7359 }, + { 196.4, 2.9800, 70.8494 }, + { 104.5, 0.9581, 11.0457 }, + { 71.7, 0.025, 56.622 }, + { 72.5, 0.997, 149.563 }, + { 54.9, 2.594, 3.932 }, + { 34.0, 3.816, 76.266 }, + { 32.1, 3.598, 131.404 }, + { 29.6, 3.441, 85.827 }, + { 36.4, 5.650, 77.963 }, + { 27.7, 0.428, 3.181 }, + { 27.5, 2.551, 52.690 }, + { 24.6, 5.140, 78.714 }, + { 19.4, 5.135, 18.159 }, + { 15.8, 0.371, 447.796 }, + { 15.4, 5.573, 462.023 }, + { 15.2, 3.860, 73.297 }, + { 15.5, 2.975, 145.631 }, + { 18.0, 0, 0 }, + { 16.0, 5.199, 71.600 }, + { 11.1, 6.032, 138.517 }, + { 10.5, 3.583, 224.345 }, + { 7.6, 1.45, 1.48 }, + { 8.1, 2.62, 22.09 }, + { 7.1, 5.44, 269.92 }, + { 6.5, 4.37, 284.15 }, + { 6.8, 0.01, 151.05 }, + { 8.1, 0.30, 127.47 }, + { 5.8, 4.23, 373.01 }, + { 5.0, 1.84, 202.25 }, + { 4.7, 2.78, 120.36 }, + { 5.1, 0.78, 62.25 }, + { 4.2, 1.84, 72.33 }, + { 3.9, 1.89, 209.37 }, + { 5.2, 4.16, 195.14 }, + { 3.6, 2.00, 65.22 }, + { 3.6, 3.93, 124.29 }, + { 3.8, 1.05, 92.94 }, + { 4.2, 3.96, 9.56 }, + { 3.5, 1.54, 148.08 }, + { 3.2, 2.99, 387.24 }, + { 4.0, 1.86, 152.74 }, + { 3.3, 1.41, 351.82 }, + { 3.6, 1.17, 153.50 }, + { 2.9, 6.04, 12.53 }, + { 2.7, 5.65, 134.59 }, + { 2.8, 0.79, 572.23 }, + { 3.1, 5.84, 160.61 }, + { 2.7, 1.99, 450.98 }, + { 2.7, 2.77, 213.30 }, + { 2.3, 1.68, 358.93 }, + { 2.3, 5.77, 84.34 }, + { 2.3, 4.81, 536.80 }, + { 2.2, 2.20, 465.96 }, + /* 55 terms retained, 0 terms dropped, error 3.3e-07 a.u.*T^3 */ + + /* uranus r, T^4 */ + { 53.0, 3.008, 74.782 }, + { 9.9, 1.91, 56.62 }, + { 7.0, 5.09, 11.05 }, + { 6.7, 5.43, 149.56 }, + { 3.7, 5.23, 131.40 }, + { 3.4, 1.30, 85.83 }, + { 2.7, 0.44, 63.74 }, + { 2.3, 0.92, 145.63 }, + { 2.4, 6.21, 358.93 }, + { 2.3, 2.23, 440.68 }, + { 3.1, 3.14, 0 }, + /* 11 terms retained, 0 terms dropped, error 2.1e-07 a.u.*T^4 */ + /* end uranus */ +}; + +int vn_uranus[][3] = { + /* addresses for uranus l, b, r */ + /* T^0 */ { 0, 355, 462, }, + /* T^1 */ { 152, 398, 832, }, + /* T^2 */ { 253, 432, 1122, }, + /* T^3 */ { 315, 449, 1314, }, + /* T^4 */ { 347, 460, 1369, }, + /* T^5 */ { 354, 462, 1380, }, + /* end */ { 355, 0, 0, }, + /* termination */ { 0, } +}; + +/* version d4 (lbr) + * heliocentric dynamical ecliptic and equinox of the date + */ + +double vx_venus[][3] = { + /* venus l, T^0 */ + { 317614666.8, 0, 0 }, + { 1353968.4, 5.59313320, 10213.28554621 }, + { 89891.6, 5.306500, 20426.571092 }, + { 5477.2, 4.41631, 7860.41939 }, + { 3455.7, 2.69964, 11790.62909 }, + { 2372.1, 2.99378, 3930.20970 }, + { 1317.1, 5.18668, 26.29832 }, + { 1664.1, 4.25019, 1577.34354 }, + { 1438.3, 4.15745, 9683.59458 }, + { 1200.5, 6.15357, 30639.85664 }, + { 761.4, 1.9501, 529.6910 }, + { 707.7, 1.0647, 775.5226 }, + { 584.8, 3.9984, 191.4483 }, + { 769.3, 0.8163, 9437.7629 }, + { 499.9, 4.1234, 15720.8388 }, + { 326.2, 4.5906, 10404.7338 }, + { 429.5, 3.5864, 19367.1892 }, + { 327.0, 5.6774, 5507.5532 }, + { 231.9, 3.1625, 9153.9036 }, + { 179.7, 4.6534, 1109.3786 }, + { 128.3, 4.2260, 20.7754 }, + { 155.5, 5.5704, 19651.0485 }, + { 127.9, 0.9621, 5661.3320 }, + { 105.5, 1.5372, 801.8209 }, + { 85.7, 0.356, 3154.687 }, + { 99.1, 0.833, 213.299 }, + { 98.8, 5.394, 13367.973 }, + { 82.1, 3.216, 18837.498 }, + { 88.0, 3.889, 9999.986 }, + { 71.6, 0.111, 11015.106 }, + { 56.1, 4.240, 7.114 }, + { 70.2, 0.675, 23581.258 }, + { 50.8, 0.245, 11322.664 }, + { 46.1, 5.316, 18073.705 }, + { 44.6, 6.063, 40853.142 }, + { 42.6, 5.329, 2352.866 }, + { 42.6, 1.800, 7084.897 }, + { 41.2, 0.362, 382.897 }, + { 35.7, 2.704, 10206.172 }, + { 33.9, 2.023, 6283.076 }, + { 29.1, 3.592, 22003.915 }, + { 28.5, 2.224, 1059.382 }, + { 29.8, 4.022, 10239.584 }, + { 33.3, 2.100, 27511.468 }, + { 30.2, 4.942, 13745.346 }, + { 29.3, 3.514, 283.859 }, + { 26.3, 0.541, 17298.182 }, + /* 47 terms retained, 320 terms dropped, error 0.75" */ + + /* venus l, T^1 */ + { 1021352943052.9, 0, 0 }, + { 95707.7, 2.464244, 10213.285546 }, + { 14445.0, 0.516246, 20426.571092 }, + { 213.4, 1.7955, 30639.8566 }, + { 151.7, 6.1064, 1577.3435 }, + { 173.9, 2.6554, 26.2983 }, + { 82.2, 5.702, 191.448 }, + { 69.7, 2.681, 9437.763 }, + { 52.4, 3.600, 775.523 }, + { 38.3, 1.034, 529.691 }, + { 29.6, 1.251, 5507.553 }, + { 25.1, 6.107, 10404.734 }, + { 17.8, 6.194, 1109.379 }, + { 16.5, 2.643, 7.114 }, + { 14.2, 5.451, 9153.904 }, + { 12.6, 1.245, 40853.142 }, + { 11.6, 4.976, 213.299 }, + { 12.6, 1.881, 382.897 }, + { 8.9, 0.95, 13367.97 }, + { 7.4, 4.39, 10206.17 }, + { 6.6, 2.28, 2352.87 }, + { 6.3, 4.08, 3154.69 }, + { 6.7, 5.06, 801.82 }, + /* 23 terms retained, 192 terms dropped, error 0.14"*T */ + + /* venus l, T^2 */ + { 54127.1, 0, 0 }, + { 3891.5, 0.34514, 10213.28555 }, + { 1337.9, 2.02011, 20426.57109 }, + { 23.8, 2.046, 26.298 }, + { 19.3, 3.535, 30639.857 }, + { 10.0, 3.971, 775.523 }, + { 7.0, 1.52, 1577.34 }, + { 6.0, 1.00, 191.45 }, + { 3.2, 4.36, 9437.76 }, + { 2.1, 2.66, 40853.14 }, + { 1.9, 3.39, 382.90 }, + /* 11 terms retained, 59 terms dropped, error 0.028"*T^2 */ + + /* venus l, T^3 */ + { 135.7, 4.8039, 10213.2855 }, + { 77.8, 3.669, 20426.571 }, + { 26.0, 0, 0 }, + { 1.2, 5.32, 30639.86 }, + /* 4 terms retained, 5 terms dropped, error 0.011"*T^3 */ + + /* venus l, T^4 */ + { 114.0, 3.1416, 0 }, + { 3.2, 5.21, 20426.57 }, + { 1.7, 2.51, 10213.29 }, + /* 3 terms retained, 2 terms dropped, error 0.014"*T^4 */ + + /* venus l, T^5 */ + { 0.9, 3.14, 0 }, + { 0.1, 0.55, 20426.57 }, + { 0.1, 1.91, 10213.29 }, + /* 3 terms retained, 2 terms dropped, error 0.00097"*T^5 */ + /* end venus l */ + + /* venus b, T^0 */ + { 5923638.5, 0.26702776, 10213.28554621 }, + { 40108.0, 1.147372, 20426.571092 }, + { 32814.9, 3.141593, 0 }, + { 1011.4, 1.08946, 30639.85664 }, + { 149.5, 6.2539, 18073.7049 }, + { 137.8, 0.8602, 1577.3435 }, + { 130.0, 3.6715, 9437.7629 }, + { 119.5, 3.7047, 2352.8662 }, + { 108.0, 4.5390, 22003.9146 }, + { 92.0, 1.540, 9153.904 }, + { 53.0, 2.281, 5507.553 }, + { 45.6, 0.723, 10239.584 }, + { 38.9, 2.934, 10186.987 }, + { 43.5, 6.140, 11790.629 }, + { 41.7, 5.991, 19896.880 }, + { 39.6, 3.868, 8635.942 }, + { 39.2, 3.950, 529.691 }, + { 33.3, 4.832, 14143.495 }, + /* 18 terms retained, 192 terms dropped, error 0.6" */ + + /* venus b, T^1 */ + { 513347.6, 1.8036431, 10213.2855462 }, + { 4380.1, 3.38616, 20426.57109 }, + { 196.6, 2.5300, 30639.8566 }, + { 199.2, 0, 0 }, + { 14.0, 2.271, 9437.763 }, + { 13.0, 1.507, 18073.705 }, + { 11.9, 5.605, 1577.344 }, + { 10.3, 5.242, 2352.866 }, + { 9.3, 6.08, 22003.91 }, + { 7.4, 1.50, 11790.63 }, + { 8.0, 0.29, 9153.90 }, + { 7.5, 5.08, 10186.99 }, + /* 12 terms retained, 121 terms dropped, error 0.11"*T */ + + /* venus b, T^2 */ + { 22377.7, 3.385091, 10213.285546 }, + { 281.7, 0, 0 }, + { 173.2, 5.2556, 20426.5711 }, + { 26.9, 3.870, 30639.857 }, + /* 4 terms retained, 55 terms dropped, error 0.25"*T^2 */ + + /* venus b, T^3 */ + { 646.7, 4.9917, 10213.2855 }, + { 20.0, 3.142, 0 }, + { 5.5, 0.77, 20426.57 }, + { 2.5, 5.44, 30639.86 }, + /* 4 terms retained, 11 terms dropped, error 0.023"*T^3 */ + + /* venus b, T^4 */ + { 14.1, 0.315, 10213.286 }, + { 0.2, 2.35, 20426.57 }, + { 0.2, 0.74, 30639.86 }, + { 0.2, 3.14, 0 }, + /* 4 terms retained, 1 terms dropped, error 0.002"*T^4 */ + + /* venus b, T^5 */ + { 0.2, 2.05, 10213.29 }, + /* 1 terms retained, 3 terms dropped, error 0.0014"*T^5 */ + /* end venus b */ + + /* venus r, T^0 */ + { 72334820.9, 0, 0 }, + { 489824.2, 4.0215183, 10213.2855462 }, + { 1658.1, 4.90207, 20426.57109 }, + { 1632.1, 2.84549, 7860.41939 }, + { 1378.0, 1.12847, 11790.62909 }, + { 498.4, 2.5868, 9683.5946 }, + { 374.0, 1.4231, 3930.2097 }, + { 263.6, 5.5294, 9437.7629 }, + { 237.5, 2.5514, 15720.8388 }, + { 222.0, 2.0135, 19367.1892 }, + { 119.5, 3.0198, 10404.7338 }, + { 125.9, 2.7277, 1577.3435 }, + { 76.2, 1.596, 9153.904 }, + { 85.3, 3.986, 19651.048 }, + { 74.3, 4.120, 5507.553 }, + { 41.9, 1.643, 18837.498 }, + { 42.5, 3.819, 13367.973 }, + { 39.4, 5.390, 23581.258 }, + { 29.0, 5.677, 5661.332 }, + { 27.6, 5.724, 775.523 }, + { 27.3, 4.822, 11015.106 }, + { 31.3, 2.318, 9999.986 }, + /* 22 terms retained, 308 terms dropped, error 3e-06 a.u. */ + + /* venus r, T^1 */ + { 34551.0, 0.891987, 10213.285546 }, + { 234.2, 1.7722, 20426.5711 }, + { 234.0, 3.1416, 0 }, + { 23.9, 1.113, 9437.763 }, + { 10.6, 4.592, 1577.344 }, + { 9.1, 4.54, 10404.73 }, + { 6.6, 5.98, 5507.55 }, + /* 7 terms retained, 173 terms dropped, error 3.7e-07 a.u.*T */ + + /* venus r, T^2 */ + { 1406.6, 5.06366, 10213.28555 }, + { 15.5, 5.473, 20426.571 }, + { 13.1, 0, 0 }, + /* 3 terms retained, 60 terms dropped, error 5.2e-07 a.u.*T^2 */ + + /* venus r, T^3 */ + { 49.6, 3.223, 10213.286 }, + { 0.8, 3.21, 20426.57 }, + /* 2 terms retained, 5 terms dropped, error 2.9e-08 a.u.*T^3 */ + + /* venus r, T^4 */ + { 0.6, 0.92, 10213.29 }, + /* 1 terms retained, 2 terms dropped, error 1.6e-08 a.u.*T^4 */ + + /* venus r, T^5 */ + /* 0 terms retained, 2 terms dropped, error 9e-10 a.u.*T^5 */ + /* end venus */ +}; + +int vn_venus[][3] = { + /* addresses for venus l, b, r */ + /* T^0 */ { 0, 91, 134, }, + /* T^1 */ { 47, 109, 156, }, + /* T^2 */ { 70, 121, 163, }, + /* T^3 */ { 81, 125, 166, }, + /* T^4 */ { 85, 129, 168, }, + /* T^5 */ { 88, 133, 169, }, + /* end */ { 91, 134, 0, }, + /* termination */ { 0, } +}; + + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: vsop87_data.c,v $ $Date: 1997/05/19 18:21:42 $ $Revision: 1.1 $ $Name: $"}; diff --git a/libip/._Makefile b/libip/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._Makefile differ diff --git a/libip/._descrip.mms b/libip/._descrip.mms new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/libip/._descrip.mms differ diff --git a/libip/._explodegif.c b/libip/._explodegif.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._explodegif.c differ diff --git a/libip/._fits.c b/libip/._fits.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._fits.c differ diff --git a/libip/._fsmatch.c b/libip/._fsmatch.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._fsmatch.c differ diff --git a/libip/._fsmatch.h b/libip/._fsmatch.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._fsmatch.h differ diff --git a/libip/._gaussfit.c b/libip/._gaussfit.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._gaussfit.c differ diff --git a/libip/._ip.h b/libip/._ip.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._ip.h differ diff --git a/libip/._lstsqr.c b/libip/._lstsqr.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._lstsqr.c differ diff --git a/libip/._median.c b/libip/._median.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._median.c differ diff --git a/libip/._sqr.c b/libip/._sqr.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._sqr.c differ diff --git a/libip/._stars.c b/libip/._stars.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._stars.c differ diff --git a/libip/._stats.c b/libip/._stats.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._stats.c differ diff --git a/libip/._walk.c b/libip/._walk.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._walk.c differ diff --git a/libip/._wcs.c b/libip/._wcs.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libip/._wcs.c differ diff --git a/libip/Makefile b/libip/Makefile new file mode 100644 index 0000000..35cb9c6 --- /dev/null +++ b/libip/Makefile @@ -0,0 +1,49 @@ +# Makefile for image processing routines, libip. +# (C) 2001 Elwood Charles Downey + +# gcc +CC = gcc +CFLAGS= -I../libastro -O2 -Wall + +# macosx universal binary +# CFLAGS= -I../libastro -O2 -Wall -arch i386 -arch ppc + +# solaris +# CC = cc +# CFLAGS= -I../libastro -O + +# AIX +# CC = xlc +# CFLAGS= -I../libastro -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -I../libastro -Aa -fast + +OBJS = \ + explodegif.o \ + fits.o \ + fsmatch.o \ + gaussfit.o \ + lstsqr.o \ + median.o \ + sqr.o \ + stars.o \ + stats.o \ + walk.o \ + wcs.o + +HS = ip.h fsmatch.h + +libip.a: $(HS) $(OBJS) + ar rv $@ $(OBJS) + ranlib $@ + +libip.so: $(OBJS) + gcc -shared -o $@ $(OBJS) + +clobber: + rm -f *.o libip.a + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2006/02/27 13:24:29 $ $Revision: 1.11 $ $Name: $ diff --git a/libip/descrip.mms b/libip/descrip.mms new file mode 100755 index 0000000..0fe3ec1 --- /dev/null +++ b/libip/descrip.mms @@ -0,0 +1,45 @@ +# Makefile for image processing routines, libip. +# (C) 2001 Elwood Charles Downey + +# gcc +CC = cc +CFLAGS= /INCLUDE=[-.libastro] + +# solaris +# CC = cc +# CFLAGS= -I../libastro -O + +# AIX +# CC = xlc +# CFLAGS= -I../libastro -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -I../libastro -Aa -fast + +OBJS = \ + explodegif.obj, \ + fits.obj, \ + fsmatch.obj, \ + gaussfit.obj, \ + lstsqr.obj, \ + median.obj, \ + sqr.obj, \ + stars.obj, \ + stats.obj, \ + walk.obj, \ + wcs.obj + +HS = ip.h fsmatch.h + +libip.olb : $(OBJS) + lib/crea $@ $? + +#libip.so: $(OBJS) +# gcc -shared -o $@ $(OBJS) + +clean : + del *.o;* + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: descrip.mms,v $ $Date: 2005/07/27 21:29:14 $ $Revision: 1.1 $ $Name: $ diff --git a/libip/explodegif.c b/libip/explodegif.c new file mode 100644 index 0000000..5bf3e9c --- /dev/null +++ b/libip/explodegif.c @@ -0,0 +1,675 @@ +/* explode a raw gif file already in any array of char. + * return 0 if ok, else -1. + * code from fit2gif.tar.gz, author unknown but thanks! + */ + +#include +#include +#include +#include + +#define RDSZ 4096 /* bytes per read attempt */ +#define True 1 +#define False 0 + +typedef unsigned char byte; + +typedef struct { byte *pic; /* image data */ + int w, h; /* size */ + byte r[256],g[256],b[256]; /* colormap */ + } PICINFO; + +typedef int boolean; + +#define EXTENSION 0x21 +#define IMAGESEP 0x2c +#define TRAILER 0x3b +#define INTERLACEMASK 0x40 +#define COLORMAPMASK 0x80 + + + +static int BitOffset = 0, /* Bit Offset of next code */ + XC = 0, YC = 0, /* Output X and Y coords of current pixel */ + Pass = 0, /* Used by output routine if interlaced pic */ + OutCount = 0, /* Decompressor output 'stack count' */ + RWidth, RHeight, /* screen dimensions */ + Width, Height, /* image dimensions */ + LeftOfs, TopOfs, /* image offset */ + BitsPerPixel, /* Bits per pixel, read from GIF header */ + ColorMapSize, /* number of colors */ + Background, /* background color */ + CodeSize, /* Code size, read from GIF header */ + InitCodeSize, /* Starting code size, used during Clear */ + Code, /* Value returned by ReadCode */ + MaxCode, /* limiting value for current code size */ + ClearCode, /* GIF clear code */ + EOFCode, /* GIF end-of-information code */ + CurCode, OldCode, InCode, /* Decompressor variables */ + FirstFree, /* First free code, generated per GIF spec */ + FreeCode, /* Decompressor,next free slot in hash table */ + FinChar, /* Decompressor variable */ + BitMask, /* AND mask for data size */ + ReadMask, /* Code AND mask for current code size */ + Misc; /* miscellaneous bits (interlace, local cmap)*/ + + +static boolean Interlace, HasColormap; + +static byte *RawGIF; /* The heap array to hold it, raw */ +static byte *Raster; /* The raster data stream, unblocked */ +static byte *pic8; + + /* The hash table used by the decompressor */ +static int Prefix[4096]; +static int Suffix[4096]; + + /* An output array used by the decompressor */ +static int OutCode[4097]; + +static int gif89 = 0; +static char *id87 = "GIF87a"; +static char *id89 = "GIF89a"; + +static int EGApalette[16][3] = { + {0,0,0}, {0,0,128}, {0,128,0}, {0,128,128}, + {128,0,0}, {128,0,128}, {128,128,0}, {200,200,200}, + {100,100,100}, {100,100,255}, {100,255,100}, {100,255,255}, + {255,100,100}, {255,100,255}, {255,255,100}, {255,255,255} }; + + +static int readImage(); +static int ReadCode(); +static void DoInterlace(); +static int gifError(); + +static int filesize; +static int numcols; +static float normaspect; +static byte dummy; +static byte *dataptr; +#define NEXTBYTE (dummy = *dataptr++) + +static char *g_errmsg; + +static int LoadGIF(); + +int +explodeGIF (raw, nraw, wp, hp, pixap, ra, ga, ba, errmsg) +unsigned char *raw; /* raw gif file */ +int nraw; /* bytes ingif file */ +int *wp, *hp; /* RETURN: image width/height */ +unsigned char *pixap[]; /* RETURN: malloced w*h pixels, rgba indices */ +unsigned char ra[], ga[], ba[]; /* RETURN: color map, 256 each */ +char errmsg[]; /* excuse, if return -1 */ +{ + PICINFO pi; + + dataptr = raw; + filesize = nraw; + g_errmsg = errmsg; + if (LoadGIF (&pi) != 1) + return (-1); + *wp = pi.w; + *hp = pi.h; + *pixap = pi.pic; + memcpy (ra, pi.r, 256); + memcpy (ga, pi.g, 256); + memcpy (ba, pi.b, 256); + return (0); +} + + +/*****************************/ +static int LoadGIF(pinfo) + PICINFO *pinfo; +/*****************************/ +{ + /* returns '1' if successful */ + + register byte ch, *origptr; + register int i, block; + int aspect, gotimage; + + /* initialize variables */ + BitOffset = XC = YC = Pass = OutCount = gotimage = 0; + Raster = pic8 = NULL; + gif89 = 0; + pinfo->pic = (byte *) NULL; + RawGIF = dataptr; + + /* the +256's are so we can read truncated GIF files without fear of + segmentation violation */ + if (!(Raster = (byte *) calloc(filesize+256,1))) + return( gifError(pinfo, "not enough memory to read gif file") ); + + origptr = dataptr; + + if (strncmp((char *) dataptr, id87, 6)==0) gif89 = 0; + else if (strncmp((char *) dataptr, id89, 6)==0) gif89 = 1; + else return( gifError(pinfo, "not a GIF file")); + + dataptr += 6; + + /* Get variables from the GIF screen descriptor */ + + ch = NEXTBYTE; + RWidth = ch + 0x100 * NEXTBYTE; /* screen dimensions... not used. */ + ch = NEXTBYTE; + RHeight = ch + 0x100 * NEXTBYTE; + + ch = NEXTBYTE; + HasColormap = ((ch & COLORMAPMASK) ? True : False); + + BitsPerPixel = (ch & 7) + 1; + numcols = ColorMapSize = 1 << BitsPerPixel; + BitMask = ColorMapSize - 1; + + Background = NEXTBYTE; /* background color... not used. */ + + aspect = NEXTBYTE; + if (aspect) { + if (!gif89) return(gifError(pinfo,"corrupt GIF file (screen descriptor)")); + else normaspect = (float)((aspect + 15) / 64.0); /* gif89 aspect ratio */ + } + + + /* Read in global colormap. */ + + if (HasColormap) { + for (i=0; ir[i] = NEXTBYTE; + pinfo->g[i] = NEXTBYTE; + pinfo->b[i] = NEXTBYTE; + } + + /* fill out with last color to avoid garbage clobbering xephem colormap. + * from Jean-Etienne.LAMIAUD@tcc.thomson-csf.com + */ + for( ; i < 256; i++ ) { + pinfo->r[i] = pinfo->r[ColorMapSize-1]; + pinfo->g[i] = pinfo->g[ColorMapSize-1]; + pinfo->b[i] = pinfo->b[ColorMapSize-1]; + } + } else { /* no colormap in GIF file */ + /* put std EGA palette (repeated 16 times) into colormap, for lack of + anything better to do */ + + for (i=0; i<256; i++) { + pinfo->r[i] = EGApalette[i&15][0]; + pinfo->g[i] = EGApalette[i&15][1]; + pinfo->b[i] = EGApalette[i&15][2]; + } + } + + /* possible things at this point are: + * an application extension block + * a comment extension block + * an (optional) graphic control extension block + * followed by either an image + * or a plaintext extension + */ + + while (1) { + block = NEXTBYTE; + + if (block == EXTENSION) { /* parse extension blocks */ + int i, fn, blocksize, aspnum, aspden; + + /* read extension block */ + fn = NEXTBYTE; + + if (fn == 'R') { /* GIF87 aspect extension */ + int sbsize; + + blocksize = NEXTBYTE; + if (blocksize == 2) { + aspnum = NEXTBYTE; + aspden = NEXTBYTE; + if (aspden>0 && aspnum>0) + normaspect = (float) aspnum / (float) aspden; + else { normaspect = 1.0; aspnum = aspden = 1; } + } + else { + for (i=0; i0) { /* eat any following data subblocks */ + for (i=0; i0) { + do { + sbsize = (*ptr1++); + for (j=0; j0 */ + } + + + else if (fn == 0x01) { /* PlainText Extension */ + int j,sbsize,ch; + int tgLeft, tgTop, tgWidth, tgHeight, cWidth, cHeight, fg, bg; + + sbsize = NEXTBYTE; + tgLeft = NEXTBYTE; tgLeft += (NEXTBYTE)<<8; + tgTop = NEXTBYTE; tgTop += (NEXTBYTE)<<8; + tgWidth = NEXTBYTE; tgWidth += (NEXTBYTE)<<8; + tgHeight = NEXTBYTE; tgHeight += (NEXTBYTE)<<8; + cWidth = NEXTBYTE; + cHeight = NEXTBYTE; + fg = NEXTBYTE; + bg = NEXTBYTE; + i=12; + for ( ; i filesize) break; /* EOF */ + } while(ch1); + } + + else if (readImage(pinfo)) gotimage = 1; + } + + + else if (block == TRAILER) { /* stop reading blocks */ + break; + } + + else { /* unknown block type */ + char str[128]; + + /* don't mention bad block if file was trunc'd, as it's all bogus */ + if ((dataptr - origptr) < filesize) { + sprintf(str, "Unknown block type (0x%02x) at offset 0x%x", + block, (unsigned int)(dataptr - origptr) - 1); + + if (!gotimage) return gifError(pinfo, str); + else return( gifError(pinfo, str)); + } + + break; + } + } + + free(Raster); Raster = NULL; + + if (!gotimage) + return( gifError(pinfo, "no image data found in GIF file") ); + + return 1; +} + + +/********************************************/ +static int readImage(pinfo) + PICINFO *pinfo; +{ + register byte ch, ch1, *ptr1, *picptr; + int i, npixels, maxpixels; + + npixels = maxpixels = 0; + + /* read in values from the image descriptor */ + + ch = NEXTBYTE; + LeftOfs = ch + 0x100 * NEXTBYTE; + ch = NEXTBYTE; + TopOfs = ch + 0x100 * NEXTBYTE; + ch = NEXTBYTE; + Width = ch + 0x100 * NEXTBYTE; + ch = NEXTBYTE; + Height = ch + 0x100 * NEXTBYTE; + + Misc = NEXTBYTE; + Interlace = ((Misc & INTERLACEMASK) ? True : False); + + if (Misc & 0x80) { + for (i=0; i< 1 << ((Misc&7)+1); i++) { + pinfo->r[i] = NEXTBYTE; + pinfo->g[i] = NEXTBYTE; + pinfo->b[i] = NEXTBYTE; + } + } + + + if (!HasColormap && !(Misc&0x80)) { + /* no global or local colormap */ + return (gifError (pinfo, "No colormap in this GIF file.")); + } + + + + /* Start reading the raster data. First we get the intial code size + * and compute decompressor constant values, based on this code size. + */ + + CodeSize = NEXTBYTE; + + ClearCode = (1 << CodeSize); + EOFCode = ClearCode + 1; + FreeCode = FirstFree = ClearCode + 2; + + /* The GIF spec has it that the code size is the code size used to + * compute the above values is the code size given in the file, but the + * code size used in compression/decompression is the code size given in + * the file plus one. (thus the ++). + */ + + CodeSize++; + InitCodeSize = CodeSize; + MaxCode = (1 << CodeSize); + ReadMask = MaxCode - 1; + + + + /* UNBLOCK: + * Read the raster data. Here we just transpose it from the GIF array + * to the Raster array, turning it from a series of blocks into one long + * data stream, which makes life much easier for ReadCode(). + */ + + ptr1 = Raster; + do { + ch = ch1 = NEXTBYTE; + while (ch--) { *ptr1 = NEXTBYTE; ptr1++; } + if ((dataptr - RawGIF) > filesize) { + break; + } + } while(ch1); + + + /* Allocate the 'pic' */ + maxpixels = Width*Height; + picptr = pic8 = (byte *) malloc(maxpixels); + if (!pic8) return( gifError(pinfo, "couldn't malloc 'pic8'") ); + + + /* Decompress the file, continuing until you see the GIF EOF code. + * One obvious enhancement is to add checking for corrupt files here. + */ + + Code = ReadCode(); + while (Code != EOFCode) { + /* Clear code sets everything back to its initial value, then reads the + * immediately subsequent code as uncompressed data. + */ + + if (Code == ClearCode) { + CodeSize = InitCodeSize; + MaxCode = (1 << CodeSize); + ReadMask = MaxCode - 1; + FreeCode = FirstFree; + Code = ReadCode(); + CurCode = OldCode = Code; + FinChar = CurCode & BitMask; + if (!Interlace) *picptr++ = FinChar; + else DoInterlace(FinChar); + npixels++; + } + else { + /* If not a clear code, must be data: save same as CurCode and InCode */ + + /* if we're at maxcode and didn't get a clear, stop loading */ + if (FreeCode>=4096) { /* printf("freecode blew up\n"); */ + break; } + + CurCode = InCode = Code; + + /* If greater or equal to FreeCode, not in the hash table yet; + * repeat the last character decoded + */ + + if (CurCode >= FreeCode) { + CurCode = OldCode; + if (OutCount > 4096) { /* printf("outcount1 blew up\n"); */ break; } + OutCode[OutCount++] = FinChar; + } + + /* Unless this code is raw data, pursue the chain pointed to by CurCode + * through the hash table to its end; each code in the chain puts its + * associated output code on the output queue. + */ + + while (CurCode > BitMask) { + if (OutCount > 4096) break; /* corrupt file */ + OutCode[OutCount++] = Suffix[CurCode]; + CurCode = Prefix[CurCode]; + } + + if (OutCount > 4096) { /* printf("outcount blew up\n"); */ break; } + + /* The last code in the chain is treated as raw data. */ + + FinChar = CurCode & BitMask; + OutCode[OutCount++] = FinChar; + + /* Now we put the data out to the Output routine. + * It's been stacked LIFO, so deal with it that way... + */ + + /* safety thing: prevent exceeding range of 'pic8' */ + if (npixels + OutCount > maxpixels) OutCount = maxpixels-npixels; + + npixels += OutCount; + if (!Interlace) for (i=OutCount-1; i>=0; i--) *picptr++ = OutCode[i]; + else for (i=OutCount-1; i>=0; i--) DoInterlace(OutCode[i]); + OutCount = 0; + + /* Build the hash table on-the-fly. No table is stored in the file. */ + + Prefix[FreeCode] = OldCode; + Suffix[FreeCode] = FinChar; + OldCode = InCode; + + /* Point to the next slot in the table. If we exceed the current + * MaxCode value, increment the code size unless it's already 12. If it + * is, do nothing: the next code decompressed better be CLEAR + */ + + FreeCode++; + if (FreeCode >= MaxCode) { + if (CodeSize < 12) { + CodeSize++; + MaxCode *= 2; + ReadMask = (1 << CodeSize) - 1; + } + } + } + Code = ReadCode(); + if (npixels >= maxpixels) break; + } + + if (npixels != maxpixels) { + if (!Interlace) + memset(pic8+npixels, 0, maxpixels-npixels); /* clear to EOBuffer */ + } + + /* fill in the PICINFO structure */ + + pinfo->pic = pic8; + pinfo->w = Width; + pinfo->h = Height; + + return 1; +} + + + +/* Fetch the next code from the raster data stream. The codes can be + * any length from 3 to 12 bits, packed into 8-bit bytes, so we have to + * maintain our location in the Raster array as a BIT Offset. We compute + * the byte Offset into the raster array by dividing this by 8, pick up + * three bytes, compute the bit Offset into our 24-bit chunk, shift to + * bring the desired code to the bottom, then mask it off and return it. + */ + +static int ReadCode() +{ + int RawCode, ByteOffset; + + ByteOffset = BitOffset / 8; + RawCode = Raster[ByteOffset] + (Raster[ByteOffset + 1] << 8); + if (CodeSize >= 8) + RawCode += ( ((int) Raster[ByteOffset + 2]) << 16); + RawCode >>= (BitOffset % 8); + BitOffset += CodeSize; + + return(RawCode & ReadMask); +} + + +/***************************/ +static void DoInterlace(Index) + byte Index; +{ + static byte *ptr = NULL; + static int oldYC = -1; + + if (oldYC != YC) { ptr = pic8 + YC * Width; oldYC = YC; } + + if (YC= Height) { Pass++; YC = 4; } + break; + + case 1: + YC += 8; + if (YC >= Height) { Pass++; YC = 2; } + break; + + case 2: + YC += 4; + if (YC >= Height) { Pass++; YC = 1; } + break; + + case 3: + YC += 2; break; + + default: + break; + } + } +} + + + +/*****************************/ +static int gifError(pinfo, st) + PICINFO *pinfo; + char *st; +{ + strcpy (g_errmsg, st); + + if (Raster != NULL) free(Raster); + + if (pinfo->pic) free(pinfo->pic); + + if (pic8 && pic8 != pinfo->pic) free(pic8); + + pinfo->pic = (byte *) NULL; + + return 0; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: explodegif.c,v $ $Date: 2009/01/05 20:55:16 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libip/fits.c b/libip/fits.c new file mode 100644 index 0000000..10d3dda --- /dev/null +++ b/libip/fits.c @@ -0,0 +1,1187 @@ +/* FITS file handling utilities. + * in memory, we store them in 2-bytes, unsigned, native byte oder. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "ip.h" + +extern void pm_set (int percentage); + +static int writeFITSHeader (FImage *fip, int fd, char *errmsg); +static int fmtFITSHeader (FImage *fip, char **mem, char *errmsg); +static int findFImageVar (FImage *fip, char *name, char **rpp); +static void fmtLogicalFITS (FITSRow line, char *name, int value, char *cmt); +static void fmtIntFITS (FITSRow line, char *name, int value, char *cmt); +static void fmtRealFITS (FITSRow line, char *name, double value, int sigdig, + char *cmt); +static void fmtStringFITS (FITSRow line, char *name, char *value, char *cmt); +static void fmtENDFITS (FITSRow line); +static void fmtInlineComment (FITSRow line, char *cmt); +static void enFITSPixels (FImage *fip); +static void unFITSPixels (FImage *fip); +static int lendian (void); +static void FITS32to16 (FImage *fip); + +static char simple[] = "SIMPLE = T"; + +/* write out the given fip to file descriptor fd. + * we assume fip->var contains all the fields we will need; all we do is + * add END and pad with blanks to a multiple of FITS_HROWS*FITS_HCOLS. + * N.B. we don _not_ modify the original var list. + * we assume fip->image points to an array of fip->sw * fip->sh + * unsigned short pixels, with the first pixel in the upper left of the scene. + * we force them into the form required by FITS before writing them out. we do + * this IN PLACE. if restore is 0, we DO NOT put the pixels back the way we + * found them. + * return 0 if ok, else put a short message into errmsg and return -1. + */ +int +writeFITS (fd, fip, errmsg, restore) +int fd; +FImage *fip; +char *errmsg; +int restore; +{ + int nbytes, n, nw; + + if (!fip->image) { + sprintf (errmsg, "No pixels :-("); + return (-1); + } + + if (writeFITSHeader (fip, fd, errmsg) < 0) + return (-1); + + /* format the pixels */ + if (fip->bitpix == 16) + enFITSPixels(fip); + + /* write the pixels. + * might be a pipe so keep writing until eof or error + */ + nbytes = fip->sw * fip->sh * (fip->bitpix/8); + for (nw = 0; nw < nbytes; nw += n) { + n = write (fd, fip->image+nw, nbytes-nw); + if (n <= 0) { + if (n < 0) + strcpy (errmsg, strerror(errno)); + else + sprintf (errmsg, "Short write of FITS pixels"); + if (restore && fip->bitpix == 16) + unFITSPixels (fip); + return (-1); + } + } + + /* ok */ + + if (restore && fip->bitpix == 16) + unFITSPixels (fip); + + return (0); +} + +/* write the given FITS object *fts which we malloc. + * we assume fip->var contains all the fields we will need; all we do is + * add END and pad with blanks to a multiple of FITS_HROWS*FITS_HCOLS. + * N.B. we don _not_ modify the original var list. + * we assume fip->image points to an array of fip->sw * fip->sh + * unsigned short pixels, with the first pixel in the upper left of the scene. + * we force them into the form required by FITS before writing them out. we do + * this IN PLACE. if restore is 0, we DO NOT put the pixels back the way we + * found them. + * return length of malloced array or -1 with reason in errmsg[] + */ +int +writeFITSmem (FImage *fip, char **fts, char errmsg[], int restore) +{ + int nhdrbytes, npixbytes; + char *hdrmem, *ftsmem; + + /* start with the header */ + nhdrbytes = fmtFITSHeader (fip, &hdrmem, errmsg); + if (nhdrbytes < 0) + return (-1); + + /* format the pixels */ + if (fip->bitpix == 16) + enFITSPixels(fip); + + /* add the pixels */ + npixbytes = fip->sw * fip->sh * (fip->bitpix/8); + ftsmem = realloc (hdrmem, nhdrbytes + npixbytes); + if (!ftsmem) { + free (hdrmem); + sprintf (errmsg, "No memory for FITS pixels"); + return (-1); + } + memcpy (ftsmem+nhdrbytes, fip->image, npixbytes); + + /* ok */ + + if (restore && fip->bitpix == 16) + unFITSPixels (fip); + + *fts = ftsmem; + return (nhdrbytes + npixbytes); +} + +/* read the given FITS file, filling in fields in fip and mallocing as needed. + * all header lines are copied to fip->var UP TO BUT NOT INCLUDING "END". + * we assume the pixels in the file are in standard FITS format and we convert + * them to 2-byte unsigned native byte order with the first pixel in the upper + * left. + * return 0 if ok, else put a short message into errmsg and return -1. + */ +int +readFITS (fd, fip, errmsg) +int fd; +FImage *fip; +char *errmsg; +{ + int s; + + if (readFITSHeader (fd, fip, errmsg) < 0) + return (-1); + + /* get some memory for the pixels */ + fip->totbytes = fip->sw * fip->sh * abs(fip->bitpix/8); + fip->image = malloc (fip->totbytes); + if (!fip->image) { + sprintf (errmsg, "Could not malloc %d for pixels", fip->totbytes); + resetFImage (fip); + return (-1); + } + + /* now read the pixels. + * might be a pipe so keep reading until eof or error + */ + for (fip->nbytes = 0; fip->nbytes < fip->totbytes; fip->nbytes += s) { + pm_set (fip->nbytes*100/fip->totbytes); + + s= read (fd, fip->image + fip->nbytes, fip->totbytes - fip->nbytes); + if (s <= 0) { + if (s < 0) + strcpy (errmsg, strerror(errno)); + else + sprintf (errmsg, "data is short"); + resetFImage (fip); + return (-1); + } + } + + /* get byte order correct if 16 bits or handle -32 */ + if (fip->bitpix == 16) + unFITSPixels (fip); + else if (fip->bitpix == -32) + FITS32to16 (fip); + + /* ok */ + return (0); +} + +/* read the FITS file from memory in fits[nfits], filling in fields in fip + * and mallocing as needed. + * return 0 if ok, else put a short message into errmsg and return -1. + */ +int +readFITSmem (char *fits, int nfits, FImage *fip, char errmsg[]) +{ + char *row; + int nrows; + int sawend; + int n1, n2; + int i; + + /* init fip */ + initFImage (fip); + + /* read header lines until we see END + * and have digested a whole number of blocks. + */ + nrows = 0; + sawend = 0; + row = fits; + do { + if (row+FITS_HCOLS > fits+nfits) { + sprintf (errmsg, "FITS header image memory is short"); + goto err; + } + + if (nrows == 0 && strncmp (row, simple, sizeof(simple)-1) != 0) { + sprintf (errmsg, "Not a simple FITS file"); + goto err; + } + + /* add the row to fip unless we've seen or see END */ + if (!sawend && !(sawend = strncmp (row, "END", 3) == 0)) + addFImageVar (fip, row); + + nrows++; + row += FITS_HCOLS; + + } while (!sawend || (nrows%FITS_HROWS)); + + /* confirm SIMPLE */ + if (getLogicalFITS (fip, "SIMPLE", &i) < 0 || !i) { + sprintf (errmsg, "File must claim to be a SIMPLE image."); + goto err; + } + + /* get size */ + if (getIntFITS (fip, "BITPIX", &i) < 0 || (i != 16 && i != 8 && i != -32)) { + sprintf (errmsg, "BITPIX must be 8, 16 or -32."); + goto err; + } + fip->bitpix = i; + if (getNAXIS (fip, &n1, &n2, errmsg) < 0) + goto err; + fip->sw = n1; + fip->sh = n2; + + /* get memory for the pixels */ + fip->totbytes = fip->sw * fip->sh * abs(fip->bitpix/8); + if (row + fip->totbytes > fits + nfits) { + sprintf (errmsg, "FITS pixel image memory is short"); + goto err; + } + fip->image = malloc (fip->totbytes); + if (!fip->image) { + sprintf (errmsg, "Could not malloc %d for pixels", fip->totbytes); + goto err; + } + + /* now copy in the pixels */ + memcpy (fip->image, row, fip->totbytes); + + /* get byte order correct if 16 bits or handle -32 */ + if (fip->bitpix == 16) + unFITSPixels (fip); + else if (fip->bitpix == -32) + FITS32to16 (fip); + + /* ok */ + return (0); + + err: + resetFImage (fip); + return (-1); +} + +/* read another chunk of pixels for the given FITS file, mallocing as needed. + * we assume the pixels in the file are in standard FITS format and we convert + * them to 2-byte unsigned native byte order with the first pixel in the upper + * left. + * return 0 if ok, else put a short message into errmsg and return -1. + * N.B. read header portion first using readFITSHeader(). + */ +int +readIncFITS (fd, fip, errmsg) +int fd; +FImage *fip; +char *errmsg; +{ +#define READCHUNK 4096 + + int s; + int n; + + /* if first time, malloc all the pixel memory */ + if (fip->totbytes == 0) { + fip->totbytes = fip->sw * fip->sh * abs(fip->bitpix/8); + fip->image = malloc (fip->totbytes); + if (!fip->image) { + sprintf (errmsg,"Could not malloc %d for pixels",fip->totbytes); + resetFImage (fip); + return (-1); + } + fip->nbytes = 0; + } + + /* now read up to a chunk more of pixels. */ + n = fip->totbytes - fip->nbytes; + if (n > READCHUNK) + n = READCHUNK; + s = read (fd, fip->image + fip->nbytes, n); + if (s <= 0) { + if (s < 0) + strcpy (errmsg, strerror(errno)); + else + sprintf (errmsg, "FITS file short after %d bytes", fip->nbytes); + resetFImage (fip); + return (-1); + } + fip->nbytes += s; + + /* if complete: get byte order correct if 16 bits or handle -32 */ + if (fip->nbytes == fip->totbytes) { + if (fip->bitpix == 16) + unFITSPixels (fip); + else if (fip->bitpix == -32) + FITS32to16 (fip); + } + + /* ok */ + return (0); + +#undef READCHUNK +} + +/* read the given FITS file header into fip; we don't read the pixels. + * N.B. we call initFImage(fip) and also resetFImage(fip) if there is an error. + * return 0 if ok, else put message into errmsg and return -1. + */ +int +readFITSHeader (fd, fip, errmsg) +int fd; +FImage *fip; +char errmsg[]; +{ + FITSRow row; + int nrows; + int sawend; + int n1, n2; + int s; + int i; + + initFImage (fip); + + /* read header lines until we see END + * and have digested a whole number of blocks. + */ + nrows = 0; + sawend = 0; + do { + for (i = 0; i < sizeof(row); i += s) { + s = read (fd, row+i, sizeof(row)-i); + if (s <= 0) { + if (s < 0) + strcpy (errmsg, strerror(errno)); + else + sprintf (errmsg, "FITS file header is short"); + goto err; + } + } + + if (nrows == 0 && strncmp (row, simple, sizeof(simple)-1) != 0) { + sprintf (errmsg, "Not a simple FITS file"); + goto err; + } + + nrows++; + + /* add the row to fip unless we've seen or see END */ + if (!sawend && !(sawend = strncmp (row, "END", 3) == 0)) + addFImageVar (fip, row); + + } while (!sawend || (nrows%FITS_HROWS)); + + /* crack the required fields into fip + * and check for required conditions + */ + + if (getLogicalFITS (fip, "SIMPLE", &i) < 0 || !i) { + sprintf (errmsg, "File must claim to be a SIMPLE image."); + goto err; + } + + if (getIntFITS (fip, "BITPIX", &i) < 0 || (i != 16 && i != 8 && i != -32)) { + sprintf (errmsg, "BITPIX must be 8, 16 or -32."); + goto err; + } + fip->bitpix = i; + + if (getNAXIS (fip, &n1, &n2, errmsg) < 0) + goto err; + + fip->sw = n1; + fip->sh = n2; + + return (0); + + err: + resetFImage (fip); + return (-1); +} + +/* write a nominal FITS-format file of pixels file to fd. + * we assume pix points to an array of w*h unsigned short pixels, with the + * first pixel in the upper left of the scene. thus, we force them into the + * form required by FITS before writing them out. we do this IN PLACE. if + * restore is 0, we DO NOT put the pixels back the way we found them. + * return 0 if ok else -1 if error. + */ +int +writeSimpleFITS (fd, pix, w, h, restore) +int fd; +char *pix; +int w, h; +int restore; +{ + char errmsg[1024]; + FImage fimage; + + initFImage (&fimage); + + fimage.sw = w; + fimage.sh = h; + fimage.bitpix = 16; + fimage.image = pix; + + setSimpleFITSHeader (&fimage); + + return (writeFITS (fd, &fimage, errmsg, restore)); +} + +/* get NAXIS1 and NAXIS2 from fip. + * return 0 if ok else fill errmsg and return -1. + * we also require that if NAXISi, with i > 2, exist they be 1. + */ +int +getNAXIS (fip, n1p, n2p, errmsg) +FImage *fip; +int *n1p, *n2p; +char errmsg[]; +{ + int n; + int i; + + if (getIntFITS (fip, "NAXIS", &n) < 0) { + sprintf (errmsg, "No NAXIS"); + return (-1); + } + + + /* check for higher dimensions */ + for (i = 3; i <= n; i++) { + char naxisi[16]; + int ni; + + sprintf (naxisi, "NAXIS%d", i); + if (getIntFITS (fip, naxisi, &ni) < 0) { + sprintf (errmsg, "NAXIS=%d but no %s", n, naxisi); + return (-1); + } + if (ni != 1) { + sprintf (errmsg, "Require %s to be 1", naxisi); + return (-1); + } + } + + if (getIntFITS (fip, "NAXIS1", n1p) < 0) { + sprintf (errmsg, "No NAXIS1"); + return (-1); + } + + if (getIntFITS (fip, "NAXIS2", n2p) < 0) { + sprintf (errmsg, "No NAXIS2"); + return (-1); + } + + return (0); +} + +/* make a copy of old into new. + * if pixtoo copy pixel values too, else just leave new's new pix mem garbage. + */ +void +cloneFImage (FImage *new, FImage *old, int pixtoo) +{ + int nbytes; + + /* copy the basics */ + *new = *old; + + /* copy the var list */ + nbytes = old->nvar * sizeof(FITSRow); + new->var = malloc (nbytes); + memcpy (new->var, old->var, nbytes); + + /* malloc room for pixels */ + new->image = malloc (old->totbytes); + + /* copy pixels too if want */ + if (pixtoo) + memcpy (new->image, old->image, old->totbytes); +} + +/* malloc room at *mem and fill with header from fip. + * return size of header memory or -1 with reason in errmsg. + */ +static int +fmtFITSHeader (FImage *fip, char **mem, char *errmsg) +{ + int nvar = fip->nvar; /* handy */ + char *hdr; + int npad; + int nbytes; + + /* find number of extra rows we need to add to nvar to make it a + * multiple of FITS_NROWS, _NOT_ including the row we add for END. + */ + npad = (FITS_HROWS - ((nvar+1)%FITS_HROWS)) % FITS_HROWS; + + /* get room for the var, END and pad rows */ + nbytes = (nvar + 1 + npad) * sizeof(FITSRow); + hdr = malloc (nbytes); + if (!hdr) { + sprintf(errmsg, "Can not malloc %d for padded FITS header", nbytes); + return (-1); + } + + /* copy the existing fields in var */ + memcpy (hdr, (char *)fip->var, nvar*sizeof(FITSRow)); + + /* add the END keyword */ + fmtENDFITS (&hdr[nvar*sizeof(FITSRow)]); + + /* pad out the remaining lines with blanks */ + memset (&hdr[(nvar+1)*sizeof(FITSRow)], ' ', npad*sizeof(FITSRow)); + + /* ok */ + *mem = hdr; + return (nbytes); +} + +/* write fip->var then add END and pad to FITS block size. + * if trouble put message in errmsg and return -1, else return 0. + */ +static int +writeFITSHeader (fip, fd, errmsg) +FImage *fip; +int fd; +char *errmsg; +{ + char *hdr; + int nbytes, nw, n; + + /* create the header */ + nbytes = fmtFITSHeader (fip, &hdr, errmsg); + if (nbytes < 0) + return (-1); + + /* write out the header: var + END + pad + * might be a pipe so keep writing until eof or error + */ + for (nw = 0; nw < nbytes; nw += n) { + n = write (fd, hdr+nw, nbytes-nw); + if (n <= 0) { + if (n < 0) + strcpy (errmsg, strerror(errno)); + else + sprintf (errmsg, "Short write of FITS header"); + free (hdr); + return (-1); + } + } + + free (hdr); + return (0); +} + +/* initialize each field of a garbage fip to a default. + */ +void +initFImage (fip) +FImage *fip; +{ + memset ((char *)fip, 0, sizeof(*fip)); +} + +/* prepare a fip for reuse. + * if it already has memory in use, free it also. + * N.B. don't pass one right off the stack because we free memory when we find + * pointer fields that are non-0; use initFImage for that. + */ +void +resetFImage (fip) +FImage *fip; +{ + if (fip->var) + free ((char *)fip->var); + if (fip->image) + free (fip->image); + + initFImage (fip); +} + +/* add the basic FITS fields to fip. + * we assume fip->var is empty and we do not add END or pad. + */ +void +setSimpleFITSHeader (fip) +FImage *fip; +{ + setLogicalFITS (fip, "SIMPLE", 1, "Standard FITS"); + setIntFITS (fip, "BITPIX", fip->bitpix, "Bits per pixel"); + setIntFITS (fip, "NAXIS", 2, "Number of dimensions"); + setIntFITS (fip, "NAXIS1", fip->sw, "Number of columns"); + setIntFITS (fip, "NAXIS2", fip->sh, "Number of rows"); + setRealFITS (fip, "BZERO", 32768.0, 6, "Real = Pixel*BSCALE + BZERO"); + setRealFITS (fip, "BSCALE", 1.0, 6, "Pixel scale factor"); +} + +/* add the Logical field v to fip->var */ +void +setLogicalFITS (fip, name, v, comment) +FImage *fip; +char *name; +int v; +char *comment; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) == 0) + fmtLogicalFITS (rp, name, v, comment); + else { + FITSRow row; + fmtLogicalFITS (row, name, v, comment); + addFImageVar (fip, row); + } +} + +/* add (or replace) the Integer field v to fip->var */ +void +setIntFITS (fip, name, v, comment) +FImage *fip; +char *name; +int v; +char *comment; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) == 0) + fmtIntFITS (rp, name, v, comment); + else { + FITSRow row; + fmtIntFITS (row, name, v, comment); + addFImageVar (fip, row); + } +} + +/* add (or replace) the Real field v with so many significant digits */ +void +setRealFITS (fip, name, v, sigdig, comment) +FImage *fip; +char *name; +double v; +int sigdig; +char *comment; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) == 0) + fmtRealFITS (rp, name, v, sigdig, comment); + else { + FITSRow row; + fmtRealFITS (row, name, v, sigdig, comment); + addFImageVar (fip, row); + } +} + +/* add (or replace) a character string field to fip->var. + * strings are represented by a ' in column 11 and closed by a ' not before + * col 20, i.e. 8 characters minimum including blanks. + */ +void +setStringFITS (fip, name, string, comment) +FImage *fip; +char *name; +char *string; +char *comment; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) == 0) + fmtStringFITS (rp, name, string, comment); + else { + FITSRow row; + fmtStringFITS (row, name, string, comment); + addFImageVar (fip, row); + } +} + +/* add the comment field to fip->var left justified in columns 9-80. + * if too wide, break into several rows, all but first starting with "... ". + * this is generally only used for names of HISTORY and COMMENT + */ +void +setCommentFITS (fip, name, comment) +FImage *fip; +char *name; +char *comment; +{ + char lline[FITS_HCOLS+1]; /* room for sprintf's trailing '\0' */ + int l = strlen(comment); + int n; + + for (n = 0; n < l; ) { + if (n == 0) { + sprintf (lline, "%-8.8s%-72.72s", name, comment); + n += 72; + } else { + sprintf (lline, "%-8.8s... %-68.68s", name, comment+n); + n += 68; + } + addFImageVar (fip, lline); + } +} + +/* search fip->var for the given Logical field. + * return 0 and set *vp if we find it, else return -1. + */ +int +getLogicalFITS (fip, name, vp) +FImage *fip; +char *name; +int *vp; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) < 0) + return (-1); + + switch (rp[29]) { + case 'T': case 't': *vp = 1; return (0); + case 'F': case 'f': *vp = 0; return (0); + default: return (-1); + } +} + +/* search fip->var for the given Integer field. + * return 0 and set *vp if we find it, else return -1. + */ +int +getIntFITS (fip, name, vp) +FImage *fip; +char *name; +int *vp; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) < 0) + return (-1); + *vp = atoi (rp+10); + return (0); +} + +/* search fip->var for the given Real field. + * return 0 and set *vp if we find it, else return -1. + */ +int +getRealFITS (fip, name, vp) +FImage *fip; +char *name; +double *vp; +{ + char buf[32]; + char *dp, *rp; + + if (findFImageVar (fip, name, &rp) < 0) + return (-1); + memcpy (buf, rp+10, 30); + buf[30] = '\0'; + if ((dp = strchr (buf,'D')) || (dp = strchr (buf,'d'))) + *dp = 'e'; + *vp = atof (buf); + return (0); +} + +/* search fip->var for the given Comment field. + * return 0 and fill in buf (including a trailing 0) if we find it, else + * return -1. + * buf should be at least 73 chars long. + */ +int +getCommentFITS (fip, name, buf) +FImage *fip; +char *name; +char *buf; +{ + char *rp; + + if (findFImageVar (fip, name, &rp) < 0) + return (-1); + memcpy (buf, rp, 72); + rp[72] = '\0'; + return (0); +} + +/* search fip->var for the given Character string field. + * fill in buf and return 0 if we find name, else return -1. + * buf will include a trailing 0, no ' and no trailing blanks. + * string should be at least 69 chars long. + */ +int +getStringFITS (fip, name, string) +FImage *fip; +char *name; +char *string; +{ + char *string0 = string; + char *rp; + char c; + int i; + + if (findFImageVar (fip, name, &rp) < 0) + return (-1); + if (rp[10] != '\'') /* should have a ' in column 11 */ + return (-1); + for (i = 11; i < FITS_HCOLS; i++) { + c = rp[i]; + if (c == '\'') { /* and another someplace later */ + while (string > string0 && string[-1] == ' ') + string--; + *string = '\0'; + return (0); + } else + *string++ = c; + } + return (-1); +} + +/* search through var for an entry with the given name. + * N.B. name should _not_ include trailing blanks. + * if find it set *rpp to its address and return 0, else -1. + */ +static int +findFImageVar (fip, name, rpp) +FImage *fip; +char *name; +char **rpp; +{ + char field[9]; /* FITS field name */ + int i; + + sprintf (field, "%-8.8s", name); + + for (i = 0; i < fip->nvar; i++) + if (strncmp (field, fip->var[i], 8) == 0) { + *rpp = fip->var[i]; + return (0); + } + return (-1); +} + +/* add the row to the end of the fip->var array. + */ +void +addFImageVar (fip, row) +FImage *fip; +FITSRow row; +{ + char *mem; + int newn; + + newn = fip->nvar + 1; + + /* get room for one more FITSrow */ + if (fip->var) + mem = realloc ((char *)fip->var, newn*sizeof(FITSRow)); + else + mem = malloc (newn*sizeof(FITSRow)); + + if (!mem) { + fprintf (stderr, "No memory for more FITS header lines\n"); + return; + } + + /* copy to the new (last) position */ + fip->var = (FITSRow *) mem; + memcpy (fip->var[fip->nvar], row, FITS_HCOLS); + fip->nvar = newn; +} + +/* delete the given field from the FImage. + * return 0 if ok, else -1 if field didn't exist. + */ +int +delFImageVar (fip, name) +FImage *fip; +char *name; +{ + char *rp; + char *mem; + FITSRow *dst; + int newn; + int i; + + if (!fip->var || findFImageVar (fip, name, &rp) < 0) + return (-1); + + newn = fip->nvar - 1; + + /* get room for one fewer FITSrow */ + mem = malloc (newn*sizeof(FITSRow)); + if (!mem) { + fprintf (stderr, "No memory for fewer FITS header lines (?!)\n"); + return (-1); + } + + /* copy all entries except the one at rp */ + dst = (FITSRow *) mem; + for (i = 0; i < fip->nvar; i++) { + char *src = fip->var[i]; + if (src != rp) + memcpy ((void *)(dst++), (void *)(src), FITS_HCOLS); + } + + free ((char *)fip->var); + fip->var = (FITSRow *) mem; + fip->nvar = newn; + + return (0); +} + +/* copy the given field from fip2 to fip1. + * return 0 if ok, else -1 if trouble. + */ +int +cpyFImageVar (fip1, fip2, name) +FImage *fip1, *fip2; +char *name; +{ + char *srcrow, *dstrow; + + if (!fip2->var || findFImageVar (fip2, name, &srcrow) < 0) + return (-1); + if (fip1->var && findFImageVar (fip1, name, &dstrow) == 0) + memcpy (dstrow, srcrow, FITS_HCOLS); + else + addFImageVar (fip1, srcrow); + return (0); +} + +/* given a name and a 0 or !0 write the logical FITS variable to line + * as a F or T in column 30. + */ +static void +fmtLogicalFITS (line, name, value, comment) +FITSRow line; +char *name; +int value; +char *comment; +{ + sprintf (line, "%-8.8s=%20s%c", name, "", value ? 'T' : 'F'); + fmtInlineComment (line, comment); +} + +/* given a name and an int value write the int FITS variable to line + * right justified in columns 11-30. + */ +static void +fmtIntFITS (line, name, value, comment) +FITSRow line; +char *name; +int value; +char *comment; +{ + char str[30]; + int strl; + + sprintf (str, "%d", value); + strl = strlen (str); + + sprintf (line, "%-8.8s= %*s%s", name, 20-strl, "", str); + fmtInlineComment (line, comment); +} + +/* given a name and a double write the floating point FITS variable to line + * in columns 11-30 with at most sigdig significant digits. + */ +static void +fmtRealFITS (line, name, value, sigdig, comment) +FITSRow line; +char *name; +double value; +int sigdig; +char *comment; +{ + sprintf (line, "%-8.8s= %20.*G", name, sigdig, value); + fmtInlineComment (line, comment); +} + +/* given a name and a character string write the string FITS variable to line + * represented by a ' in column 11 and closed by a ' not before col 20, i.e. 8 + * characters minimum including blanks. + */ +static void +fmtStringFITS (line, name, value, comment) +FITSRow line; +char *name; +char *value; +char *comment; +{ + char lline[FITS_HCOLS+1]; /* room for sprintf's trailing '\0' */ + int l = strlen(value); + + if (l < 8) + l = 8; + else if (l > 68) + l = 68; + + sprintf (lline, "%-8.8s= '%-*.*s'%*s", name, l, l, value, 80-12-l, ""); + if (comment && l < 80-3-12) { + int start = 12+l; + if (start < 30) + start = 30; + sprintf (&lline[start], " / %-*.*s", 80-3-start, 80-3-start, + comment); + } + + memcpy (line, lline, FITS_HCOLS); +} + +/* write the END marker to the FITS line */ +static void +fmtENDFITS (line) +FITSRow line; +{ + sprintf (line, "%-79s", "END"); + line[79] = ' '; +} + +/* attend to the final 50 chars of line */ +static void +fmtInlineComment (line, comment) +FITSRow line; +char *comment; +{ + char buf[100]; /* buffer to allow for sprintf's trailing '\0' */ + + if (comment) + sprintf (buf, " / %-47.47s", comment); + else + sprintf (buf, "%50s", ""); + memcpy (&line[30], buf, FITS_HCOLS-30); +} + +/* turn native unsigned shorts into FITS' big-endian signed. + */ +static void +enFITSPixels (fip) +FImage *fip; +{ + unsigned short *pixp = (unsigned short *)fip->image; + int n = fip->sh * fip->sw; + unsigned short *r0; + int p0; + + if (fip->bitpix == 8) + return; /* nothing to do if just bytes */ + + if (lendian()) { + while (--n >= 0) { + r0 = pixp++; + p0 = (int)(*r0) - 32768; + *r0 = ((p0 << 8) & 0xff00) | ((p0 >> 8) & 0xff); + } + } else { + while (--n >= 0) { + r0 = pixp++; + p0 = (int)(*r0) - 32768; + *r0 = p0; + } + } +} + +/* turn FITS' big-endian signed shorts into native unsigned shorts. + */ +static void +unFITSPixels (fip) +FImage *fip; +{ + unsigned short *pixp = (unsigned short *)fip->image; + int n = fip->sh * fip->sw; + unsigned short *r0; + int p0; + + /* noop if not 16 */ + if (fip->bitpix != 16) + return; + + if (lendian()) { + while (--n >= 0) { + r0 = pixp++; + p0 = ((*r0 << 8) & 0xff00) | ((*r0 >> 8) & 0xff); + *r0 = (unsigned short)(p0 + 32768); + } + } else { + while (--n >= 0) { + r0 = pixp++; + p0 = (int)(*r0); + *r0 = (unsigned short)(p0 + 32768); + } + } +} + +/* return 1 if this machine is little-endian (low-byte first) else 0. */ +static int +lendian() +{ + union { + short s; + char c[2]; + } U; + + U.c[0] = 1; + U.c[1] = 0; + + return (U.s == 1); +} + +/* convert the given FImage with bitpix == -32 to 16. + */ +static void +FITS32to16 (FImage *fip) +{ + float t, min, max, del; + char *fp, *tp; /* from ... to */ + char s; /* swap temp */ + int le; /* whether we are little-endian */ + + /* noop if not -32 */ + if (fip->bitpix != -32) + return; + + /* find range and convert to native byte order */ + le = lendian(); + min = FLT_MAX; + max = -FLT_MAX; + for (fp = fip->image; fp < &fip->image[fip->totbytes]; fp += 4) { + if (le) { + s = fp[0]; fp[0] = fp[3]; fp[3] = s; + s = fp[1]; fp[1] = fp[2]; fp[2] = s; + } + t = *(float *)fp; + if (t < min) + min = t; + if (t > max) + max = t; + } + + /* map to native CamPix */ + del = max - min; + for (tp = fp = fip->image; fp < &fip->image[fip->totbytes]; fp += 4, tp += 2) + *(CamPix *)tp = (CamPix) (65535 * (*(float *)fp - min)/del); + + /* need only half as much pixel memory */ + fip->image = realloc (fip->image, fip->totbytes /= 2); + + /* update header */ + fip->bitpix = 16; + setIntFITS (fip, "BITPIX", fip->bitpix, "Bits per pixel"); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: fits.c,v $ $Date: 2009/03/26 02:24:24 $ $Revision: 1.8 $ $Name: $"}; diff --git a/libip/fsmatch.c b/libip/fsmatch.c new file mode 100644 index 0000000..49457cd --- /dev/null +++ b/libip/fsmatch.c @@ -0,0 +1,632 @@ +/* find best WCS. + * technique inspired by a paper by Frank Valdes PASP, vol 107, page 1119 (1995) + * + * N.B. this implementation is not reentrant. + */ + +/* TRACE: + * 0: none + * 1: array counts, FITS evolution, final set of pairs + * 2: plus each Tri pair + * 3: plus each LstSqr step + * 4: plus all points and triangles + */ +#define trace(level) if (trlevel >= (level)) printf + +#include +#include +#include +#include +#include +#include + +#include "astro.h" +#include "ip.h" +#include "fsmatch.h" + + +#define MAXIS 40 /* max image stars to use */ +#define MAXFS 40 /* max field stars to use */ +#define MINPAIRS 3 /* minimum number of star pairs to accept */ +#define MINTP 3 /* min number tri's a point must be in */ +#define MINNT 4 /* min number of tri pairs */ +#define MINAREA .01 /* min fraction total area in a tri */ +#define SIMAREA .95 /* SIMAREA .. 1/SIMAREA range of similar area */ +#define STDCUT 1.50 /* outlyer definition */ +#define LSTOL .005 /* least squares convergence factor */ +#define MAXOUTL 5 /* max times to refine lst-sqrs fit */ + +/* combination of n objects taken 3 at a time */ +#define CMBN3(n) ((n)*((n)-1)*((n)-2)/6) + +/* one vertex */ +typedef struct _ver { + double x, y; /* coords */ + Obj *op; /* reference Object (field star only) */ +} Vtx; + +/* one triangle */ +typedef struct _tri { + Vtx *v0, *v1, *v2; /* constituent Vtx | v0-v1 < v1-v2 < v0-v2 */ + double x, y; /* location in triangle-space */ + double a; /* area */ + struct _tri *tp; /* matching tri, if any */ +} Tri; + +/* one matching pair */ +typedef struct { + Vtx *iv, *fv; /* image and field vertex of pair */ + int n; /* occurances in matching triangles */ +} PVtx; + +static int newTri (Tri *tp, double mina, Vtx *v0, Vtx *v1, Vtx *v2); +static void initFITS (FImage *initial, FImage *test); +static void prWCS (char *label, FImage *fip); +static int lsFit (FImage *fip); +static double chisqr(double p[]); +static int discardOutlyers(FImage *fip); +static int pv_qscmpf (const void *v1, const void *v2); +static void setTrLevel(void); + +/* global for use by lstsqr() solver function. + * N.B. hence not reentrant! + */ +static FImage _fi; /* candidate solution */ +static PVtx *_pv; /* global shadow */ +static int _nv; /* global shadow */ +static Vtx *_iv; /* global shadow */ +static Vtx *_fv; /* global shadow */ +static double _best; /* best accuracy we can hope for */ +static double _worst; /* worst accuracy we will accept */ + +static int trlevel; /* sets trace level */ + +/* given a guess for WCS already in fip, a list of field stars in the + * vicinity sorted by brightness, and a list of coordinates for starlike + * things in the image sorted by brightest, put a best fit solution into *fip. + * if successful: + * fs and isx/y are reordered so matching pairs actually used are in front. + * return number of pairs used in solution. + * else + * write excuse in msg[] and return -1 + */ +int +fsmatch (FImage *fip, void (*drawf)(double x, double y, int rad, int ccode), +ObjF *fs, int nfs, double *isx, double *isy, int nis, double best, +double worst, char msg[]) +{ + FImage lsfits, fits0; /* working solutions */ + double maxd2 = 2*sqr((fip->sw+2*worst)/(fip->sw-2*worst) - 1.); + double minarea = MINAREA * fip->sw * fip->sh; + PVtx pv[MAXIS]; /* matching pairs of vertices */ + Vtx iv[MAXIS]; /* list of image vertices */ + Vtx fv[MAXFS]; /* list of field vertices */ + ObjF fscopy[MAXFS]; /* copy of fs for local rearranging */ + int niv, nfv; /* actual number of " */ + Tri *it = NULL; /* malloced image star triangles */ + Tri *ft = NULL; /* malloced field star triangles */ + int nit, nft; /* actual number of " */ + int vcount[MAXIS][MAXFS]; /* n occurances of each pair */ + int i, j, k; + Vtx *vp; + Tri *tp; + + setTrLevel(); + trace(1) ("\nfsmatch(nfs=%d, nis=%d, best=%g worst=%g)\n", + nfs, nis, best, worst); + + /* sanity checks */ + if (nis < MINPAIRS) { + sprintf (msg, "%d image stars, need at least %d", nis, MINPAIRS); + return (-1); + } + if (nfs < MINPAIRS) { + sprintf (msg, "%d field stars, need at least %d", nfs, MINPAIRS); + return (-1); + } + + /* collect up to MAXIS image stars into iv[] */ + niv = nis < MAXIS ? nis : MAXIS; + memset (iv, 0, niv*sizeof(iv[0])); + for (vp = iv, i = 0; i < niv; i++, vp++) { + vp->x = isx[i]; + vp->y = isy[i]; + (*drawf) (vp->x, vp->y, 5, 0); + trace(4) ("IV%03d %6.1f %6.1f %d\n", (int)(vp-iv), vp->x, vp->y, + ((CamPix *)fip->image)[(int)(vp->y*fip->sw) + (int)vp->x]); + } + + /* build each image triangle with sufficient area in it[] */ + nit = CMBN3(niv); + tp = it = (Tri *) calloc (nit, sizeof(Tri)); + if (!it) { + sprintf (msg, "No memory for %d image triangles", nit); + return (-1); + } + for (i = 0; i < niv; i++) + for (j = i+1; j < niv; j++) + for (k = j+1; k < niv; k++) + if (!newTri (tp, minarea, &iv[i], &iv[j], &iv[k])) { + trace(4) ("IT%05d IV%03d IV%03d IV%03d %10.7f %10.7f\n", + (int)(tp-it), i, j, k, tp->x, tp->y); + tp++; + } + nit = tp - it; + trace(1) ("%5d image triangles from %d image stars\n", nit, niv); + + /* collect up to MAXFS field stars into fv[] based on initial fip */ + nfv = nfs < MAXFS ? nfs : MAXFS; + memset (fv, 0, nfv*sizeof(fv[0])); + memcpy (fscopy, fs, nfv*sizeof(fscopy[0])); + for (vp = fv, i = 0; i < nfv; i++, vp++) { + vp->op = (Obj*)(&fscopy[i]); + RADec2xy (fip, vp->op->f_RA, vp->op->f_dec, &vp->x, &vp->y); + (*drawf) (vp->x, vp->y, 4, 2); + trace(4) ("FV%03d %6.1f %6.1f %5.2f %s\n", (int)(vp-fv), vp->x, vp->y, + get_mag(vp->op), vp->op->o_name); + } + + /* build each field triangle with sufficient area in ft[] */ + nft = CMBN3(nfv); + tp = ft = (Tri *) calloc (nft, sizeof(Tri)); + if (!ft) { + sprintf (msg, "No memory for %d field star triangles", nft); + free (it); + return (-1); + } + for (i = 0; i < nfv; i++) + for (j = i+1; j < nfv; j++) + for (k = j+1; k < nfv; k++) + if (!newTri (tp, minarea, &fv[i], &fv[j], &fv[k])) { + trace(4) ("FT%05d FV%03d FV%03d FV%03d %10.7f %10.7f\n", + (int)(tp-ft), i, j, k, tp->x, tp->y); + tp++; + } + nft = tp - ft; + trace(1) ("%5d field triangles from %d field stars\n", nft, nfv); + + /* at this point we have a list of image triangles, it[nit], and their + * vertices, iv[niv], and a list of field star triangles, ft[nft], and + * their vertices, fv[nfv], such that all triangles occupy at least a + * minimum fraction of the total image area. + * N.B. from here on, always free() it and ft before returning. + */ + + /* find closest f to each i tri, must be closer than threshold */ + tp = it; + for (i = 0; i < nit; i++) { + Tri *itp = &it[i]; + double mind2 = maxd2; + + /* init no, then find ft closest to itp */ + itp->tp = 0; + for (j = 0; j < nft; j++) { + Tri *ftp = &ft[j]; + double r = itp->a/ftp->a; + if (SIMAREA < r && r < (1./SIMAREA)) { + double d2 = sqr(itp->x-ftp->x) + sqr(itp->y-ftp->y); + if (d2 < mind2) { + mind2 = d2; + itp->tp = ftp; /* link i tri to best f tri */ + } + } + } + if (itp->tp) { + if (itp != tp) + *tp = *itp; /* avoid inplace copy */ + tp++; + trace(2)("IT%05d FT%05d D= %8.6f\n", i, (int)(itp->tp-ft),sqrt(mind2)); + } + } + nit = tp - it; + trace(1) ("Found %d similar triangle pairs D< %g\n", nit, sqrt(maxd2)); + + if (nit < MINNT) { + sprintf (msg, "%d similar triangle pairs, need at least %d", + nit, MINNT); + free (it); + free (ft); + return (-1); + } + + /* count each occurance of a vertex pairing */ + memset (vcount, 0, sizeof(vcount)); + for (i = 0; i < nit; i++) { + Tri *itp = &it[i], *ftp = itp->tp; + vcount[itp->v0-iv][ftp->v0-fv]++; + vcount[itp->v1-iv][ftp->v1-fv]++; + vcount[itp->v2-iv][ftp->v2-fv]++; + } + + /* build list of best vertex pairs */ + for (i = 0; i < niv; i++) { + k = 0; + for (j = 1; j < nfv; j++) + if (vcount[i][j] > vcount[i][k]) + k = j; + pv[i].iv = &iv[i]; + pv[i].fv = &fv[k]; + pv[i].n = vcount[i][k]; + } + + /* sort by decreasing count. require basic minimum */ + qsort (pv, niv, sizeof(pv[0]), pv_qscmpf); + j = pv[0].n/2; + if (j < MINTP) + j = MINTP; + for (i = 0; i < niv && j < pv[i].n; i++) { + trace(1) ("IV%03d @ %4.0f %4.0f FV%03d %4.0f %4.0f N= %3d %-*s\n", + (int)(pv[i].iv-iv), pv[i].iv->x, pv[i].iv->y, + (int)(pv[i].fv-fv), pv[i].fv->x, pv[i].fv->y, + pv[i].n, MAXNM, pv[i].fv->op->o_name); + } + if (i < MINPAIRS) { + sprintf (msg, "Found %d star pairs, need %d", i, MINPAIRS); + free (it); + free (ft); + return (-1); + } + + /* give solver access to our stack info */ + _nv = i; + _pv = pv; + _iv = iv; + _fv = fv; + _best = best; + _worst = worst; + + /* init fits0 using best 3 vertex pairs */ + prWCS ("Initial seed", fip); + initFITS (&fits0, fip); + prWCS ("Reference fit", &fits0); + + /* lstsqr fits, discarding outlyers each time around until none bad */ + for (i = 0; i < MAXOUTL; i++) { + trace(1) ("LSFIT loop %2d with %2d star pairs\n", i, _nv); + lsfits = fits0; + if (lsFit(&lsfits) < 0) { + sprintf (msg, "Lst-sqr did not converge -- bogus pairing"); + free (it); + free (ft); + return (-1); + } + + prWCS ("LSFIT result", &lsfits); + j = discardOutlyers(&lsfits); + if (j == 0) + break; /* good enough or at least no improvment */ + _nv -= j; + if (_nv < MINPAIRS) { + sprintf (msg, "%d statistically significant pairs, need %d", + _nv, MINPAIRS); + free (it); + free (ft); + return (-1); + } + } + if (i == MAXOUTL) { + sprintf (msg, "No matching star pairs found."); + free (it); + free (ft); + return (-1); + } + + /* lsfits is the best guess. check if all pairs lie within worst */ + for (i = 0; i < _nv; i++) { + double x, y, e; + RADec2xy (&lsfits, pv[i].fv->op->f_RA, pv[i].fv->op->f_dec, &x, &y); + e = sqrt(sqr(x-pv[i].iv->x) + sqr(y-pv[i].iv->y)); + if (e > worst) { + sprintf (msg, "Best solution has errors at least %.2f", e); + free (it); + free (ft); + return (-1); + } + } + + /* Ok! looks like lsfits is the answer! */ + *fip = lsfits; + prWCS ("Final answer", fip); + setRealFITS (fip, "CDELT1", fip->xinc, 10, "RA step right, degs/pix"); + setRealFITS (fip, "CDELT2", fip->yinc, 10, "Dec step up, degs/pix"); + setRealFITS (fip, "CRPIX1", fip->xrefpix, 10, "Reference RA pixel"); + setRealFITS (fip, "CRPIX2", fip->yrefpix, 10, "Reference Dec pixel"); + setRealFITS (fip, "CRVAL1", fip->xref, 10, "Reference RA, degs"); + setRealFITS (fip, "CRVAL2", fip->yref, 10, "Reference Dec, degs"); + setRealFITS (fip, "CROTA2", fip->rot, 10, "Rotation E from N, degs"); + setStringFITS (fip, "CTYPE1", "RA---TAN", "RA Projection"); + setStringFITS (fip, "CTYPE2", "DEC--TAN", "Dec Projection"); + + /* put pairs used in solution back into top of fs[] and isx/y[] */ + for (i = 0; i < _nv; i++) { + fs[i] = *((ObjF *)(pv[i].fv->op)); + isx[i] = pv[i].iv->x; + isy[i] = pv[i].iv->y; + } + + free (it); + free (ft); + return (_nv); +} + +/* set tp->v0..2 such that v0..1 < v1..2 < v0..v2, and tp->x and y. + * return 0 if area > mina and a given handedness else -1. + */ +static int +newTri (Tri *tp, double mina, Vtx *v0, Vtx *v1, Vtx *v2) +{ + double d01 = sqrt(sqr(v0->x - v1->x) + sqr(v0->y - v1->y)); + double d12 = sqrt(sqr(v1->x - v2->x) + sqr(v1->y - v2->y)); + double d02 = sqrt(sqr(v0->x - v2->x) + sqr(v0->y - v2->y)); + int lt0112 = d01 < d12; + int lt1202 = d12 < d02; + int lt0102 = d01 < d02; + double s; + + s = 0.5*(d01 + d12 + d02); + tp->a = sqrt (s*(s-d01)*(s-d12)*(s-d02)); + if (tp->a < mina) + return (-1); + + /* "inline" sort */ + if (lt0112) { + if (lt1202) { + tp->v0 = v0; tp->v1 = v1; tp->v2 = v2; + tp->x = d01/d02; tp->y = d12/d02; + } else { + if (lt0102) { + tp->v0 = v1; tp->v1 = v0; tp->v2 = v2; + tp->x = d01/d12; tp->y = d02/d12; + } else { + tp->v0 = v2; tp->v1 = v0; tp->v2 = v1; + tp->x = d02/d12; tp->y = d01/d12; + } + } + } else { + if (lt0102) { + tp->v0 = v2; tp->v1 = v1; tp->v2 = v0; + tp->x = d12/d02; tp->y = d01/d02; + } else { + if (lt1202) { + tp->v0 = v1; tp->v1 = v2; tp->v2 = v0; + tp->x = d12/d01; tp->y = d02/d01; + } else { + tp->v0 = v0; tp->v1 = v2; tp->v2 = v1; + tp->x = d02/d01; tp->y = d12/d01; + } + } + } + + /* want all same handedness (either one will do) */ + if ((tp->v1->x - tp->v0->x) * (tp->v2->y - tp->v1->y) + - (tp->v1->y - tp->v0->y) * (tp->v2->x - tp->v1->x) < 0) + return (-1); + + return (0); +} + +/* init tfip from fip and 3 best vertex pairs */ +static void +initFITS (FImage *tfip, FImage *fip) +{ + double ix0 = _pv[0].iv->x, iy0 = _pv[0].iv->y; + double ix1 = _pv[1].iv->x, iy1 = _pv[1].iv->y; + double ix2 = _pv[2].iv->x, iy2 = _pv[2].iv->y; + Obj *op0 = _pv[0].fv->op; + Obj *op1 = _pv[1].fv->op; + Obj *op2 = _pv[2].fv->op; + double fx0, fy0, fx1, fy1, fx2, fy2; + double tmp1, tmp2, tmp3; + + /* start tfip with fip */ + *tfip = *fip; + + /* rotate to make first 2 points parallel */ + RADec2xy (tfip, op0->f_RA, op0->f_dec, &fx0, &fy0); + RADec2xy (tfip, op1->f_RA, op1->f_dec, &fx1, &fy1); + tmp1 = raddeg (atan2 (iy1 - iy0, ix1 - ix0)); + tmp2 = raddeg (atan2 (fy1 - fy0, fx1 - fx0)); + tmp3 = tmp1 - tmp2; + tfip->rot += tmp3; + RADec2xy (tfip, op0->f_RA, op0->f_dec, &fx0, &fy0); + RADec2xy (tfip, op1->f_RA, op1->f_dec, &fx1, &fy1); + prWCS ("After rotation", tfip); + + /* use sign of cross product with 3rd point to check whether flipped */ + RADec2xy (tfip, op2->f_RA, op2->f_dec, &fx2, &fy2); + if (((fx1-fx0)*(fy2-fy1)-(fy1-fy0)*(fx2-fx1)) * + ((ix1-ix0)*(iy2-iy1)-(iy1-iy0)*(ix2-ix1)) < 0) { + tfip->yinc *= -1; + tfip->rot += 2*tmp2; + RADec2xy (tfip, op0->f_RA, op0->f_dec, &fx0, &fy0); + RADec2xy (tfip, op1->f_RA, op1->f_dec, &fx1, &fy1); + prWCS ("After flipping", tfip); + } + + /* prefer angle in range -90..90 */ + while (tfip->rot > 90) { + tfip->rot -= 180; + tfip->xinc *= -1; + tfip->yinc *= -1; + } + while (tfip->rot < -90) { + tfip->rot += 180; + tfip->xinc *= -1; + tfip->yinc *= -1; + } + prWCS ("After pretty rot", tfip); + + /* scale by matching length */ + tmp1 = sqrt(sqr(fx1-fx0) + sqr(fy1-fy0)); + if (tmp1 != 0) { + tmp2 = sqrt(sqr(ix1-ix0) + sqr(iy1-iy0)); + tmp3 = tmp2/tmp1; + tfip->xinc *= tmp3; + tfip->yinc *= tmp3; + } + RADec2xy (tfip, op0->f_RA, op0->f_dec, &fx0, &fy0); + RADec2xy (tfip, op1->f_RA, op1->f_dec, &fx1, &fy1); + prWCS ("After scaling", tfip); + + /* translate either end to align */ + tmp1 = fx0 - ix0; + tmp2 = fy0 - iy0; + tfip->xrefpix += tmp1; + tfip->yrefpix += tmp2; + prWCS ("After translating", tfip); +} + +static void +prWCS (char *label, FImage *fip) +{ + trace(1) + ("FITS %-17s R= %7.2f X/YINC= %5.2f %5.2f X/YREFPIX= %6.1f %6.1f\n", + label, fip->rot, fip->xinc*3600, fip->yinc*3600, + fip->xrefpix, fip->yrefpix); +} + +/* use least-squares method to find the fip that best maps the _fv[] to iv[]. + * return 0 if converged, else -1 + */ +static int +lsFit (FImage *fip) +{ + double p0[4], p1[4]; + + /* set up initial palues in order expected by chisqr(). + * init either way a few percent or so. + */ + p0[0] = fip->rot - 2; + p0[1] = fip->xrefpix - fip->sw*.01; + p0[2] = fip->yrefpix - fip->sh*.01; + p0[3] = .99; + + p1[0] = fip->rot + 2; + p1[1] = fip->xrefpix + fip->sw*.01; + p1[2] = fip->yrefpix + fip->sh*.01; + p1[3] = 1.01; + + /* store initial FITS in global for chisqr */ + _fi = *fip; + + /* go */ + if (lstsqr (chisqr, p0, p1, 4, LSTOL) < 0) + return (-1); + + /* unpack answer back into fip */ + fip->rot = p0[0]; + fip->xrefpix = p0[1]; + fip->yrefpix = p0[2]; + fip->xinc = _fi.xinc * p0[3]; + fip->yinc = _fi.yinc * p0[3]; + + return (0); +} + +/* evaluate fit at each _pv[] @ p. */ +static double +chisqr (double p[4]) +{ + FImage ftmp = _fi; + double sum2; + int i; + + /* set up trial */ + ftmp.rot = p[0]; + ftmp.xrefpix = p[1]; + ftmp.yrefpix = p[2]; + ftmp.xinc = _fi.xinc * p[3]; + ftmp.yinc = _fi.yinc * p[3]; + + /* sum of of distances^2 between image and projected field stars */ + for (sum2 = i = 0; i < _nv; i++) { + double fx, fy, e2; + RADec2xy(&ftmp, _pv[i].fv->op->f_RA, _pv[i].fv->op->f_dec, &fx,&fy); + e2 = sqr(_pv[i].iv->x - fx) + sqr(_pv[i].iv->y - fy); + sum2 += e2; + } + + /* N.B. noticed solver can bounce forever when really small */ + if (sum2 < 1e-5) + sum2 = 0; + + trace (3) ("chisqr= %9.3f @ R= %8.3f dX/Y= %8.6f %8.6f X/Y= %7.2f %7.2f\n", + sum2, ftmp.rot, ftmp.xinc, ftmp.yinc, + ftmp.xrefpix, ftmp.yrefpix); + return (sum2); +} + +/* remove outlyers from _pv[] based on *fip proposal. + * return number of pairs removed. + */ +static int +discardOutlyers(FImage *fip) +{ + double err[MAXIS]; + double max, sum, mean; + double cut; + int i, n; + + /* find mean error */ + max = sum = 0; + for (i = 0; i < _nv; i++) { + double fx, fy; + RADec2xy (fip, _pv[i].fv->op->f_RA, _pv[i].fv->op->f_dec, &fx, &fy); + err[i] = sqrt(sqr(_pv[i].iv->x - fx) + sqr(_pv[i].iv->y - fy)); + sum += err[i]; + if (err[i] > max) + max = err[i]; + } + + /* done if get mean bellow best expected accuracy */ + mean = sum/_nv; + if (mean < _best) { + trace(1) ("LSFIT mean Err = %g, better than best %g\n", mean,_best); + return (0); + } + + cut = STDCUT*mean; + trace(1)("LSFIT n= %d mean Err = %g cutting @ %g\n",_nv, mean, cut); + + /* discard those beyond cut */ + n = 0; + for (i = 0; i < _nv; i++) { + if (err[i] < cut) { + if (i != n) /* just to avoid inplace copies */ + _pv[n] = _pv[i]; + n++; + trace(1)("LSFIT Keeping %3d: Err = %9.2f @ IV%03d FV%03d %s\n", + i, err[i], (int)(_pv[i].iv-_iv), (int)(_pv[i].fv-_fv), + _pv[i].fv->op->o_name); + + } else { + trace(1)("LSFIT Cutting %3d: Err = %9.2f @ IV%03d FV%03d %s\n", + i, err[i], (int)(_pv[i].iv-_iv), (int)(_pv[i].fv-_fv), + _pv[i].fv->op->o_name); + } + } + + return (_nv-n); +} + +/* compare two PVtx in order of _decreasing_ n, qsort-style */ +static int +pv_qscmpf (const void *v1, const void *v2) +{ + return (((PVtx*)v2)->n - ((PVtx*)v1)->n); +} + +/* set trlevel from FSMTL env var */ +static void +setTrLevel() +{ + static char *ev; + + if (!ev) + ev = getenv ("FSMTL"); + if (ev) + trlevel = atoi (ev); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: fsmatch.c,v $ $Date: 2009/01/05 20:55:16 $ $Revision: 1.13 $ $Name: $"}; diff --git a/libip/fsmatch.h b/libip/fsmatch.h new file mode 100644 index 0000000..61f1de6 --- /dev/null +++ b/libip/fsmatch.h @@ -0,0 +1,7 @@ +extern int fsmatch (FImage *fip, void (*drawf)(double x, double y, int rad, + int ccode), ObjF *fs, int nfs, double *isx, double *isy, int nis, + double best, double worst, char msg[]); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: fsmatch.h,v $ $Date: 2003/03/22 23:43:55 $ $Revision: 1.1 $ $Name: $ + */ diff --git a/libip/gaussfit.c b/libip/gaussfit.c new file mode 100644 index 0000000..58c7492 --- /dev/null +++ b/libip/gaussfit.c @@ -0,0 +1,216 @@ +/* find best-fit gaussian to 1-d array and 2-d region. + * parameters found are: + * A: distance from base to peak + * B: distance from 0 to base + * s: sigma = 0.4246 FWHM + * m: float index from first entry to position of max + * the function then is: + * + * (x - m)^2 + * - -------- + * 2 s^2 + * f(x) = B + A e + * + * The 2d case seeks best m and s in V and H directions with same A, B. + * + * N.B. this code is not reentrant + */ + +#include +#include +#include + +#include "ip.h" + +#define FTOL .01 /* fractional tolerance */ + +/* globals for use by chisqr1d() evaluator */ +static CamPix *_a; +static int _na; + +/* evaluate p quality */ +static double +chisqr1d (double p[4]) +{ + double A = p[0]; + double B = p[1]; + double s = p[2]; + double m = p[3]; + double sum2 = 0; + int i; + + for (i = 0; i < _na; i++) + sum2 += sqr(B + A*exp(-.5*sqr((i - m)/s)) - _a[i]); + return (sum2); +} + +/* find best gaussian to given array of pixels. + * return 0 if ok, else -1 + */ +int +gaussfit (CamPix a[], int na, Gaussian *gp) +{ + double p0[4], p1[4]; + int min, max; + int maxi, hw0i, hw1i; + int mid; + int i; + + /* scan for min, max, position of max */ + min = MAXCAMPIX; + max = 0; + maxi = 0; + for (i = 0; i < na; i++) { + int ai = a[i]; + if (ai < min) + min = ai; + if (ai > max) { + max = ai; + maxi = i; + } + } + + /* scan from maxi for positions that are halfway down to min + * (or edge if hit first). + * this is more like half-peak than half-width but it's something. + */ + mid = (max + min)/2; + hw0i = hw1i = -1; + for (i = 0; i < na; i++) { + if (hw0i == -1 && (maxi-i == 0 || a[maxi-i] <= mid)) + hw0i = maxi-i; + if (hw1i == -1 && (maxi+i == na-1 || a[maxi+i] <= mid)) + hw1i = maxi+i; + } + + /* initial estimates */ + p0[0] = max-min; + p0[1] = min; + p0[2] = (hw1i - hw0i + 1)/FWHMSIG; + p0[3] = maxi; + p1[0] = p0[0] * .9; + p1[1] = p0[1] * .9; + p1[2] = p0[2] * 1.1; + p1[3] = p0[3] + 1; + + /* go */ + _a = a; + _na = na; + if (lstsqr (chisqr1d, p0, p1, 4, FTOL) < 0) + return (-1); + + /* ok! */ + gp->A = p0[0]; + gp->B = p0[1]; + gp->s = p0[2]; + gp->m = p0[3]; + return (0); +} + +/* globals for use by chisqr2d() evaluator */ +static ImRegion *_rp; +static CamPix *_im; +static int _wrap; + +/* evaluate p quality */ +static double +chisqr2d (double p[6]) +{ + CamPix *im = _im; + int wrap = _wrap; + double A = p[0]; + double B = p[1]; + double sx = p[2]; + double mx = p[3]; + double sy = p[4]; + double my = p[5]; + double sum2 = 0; + int x, y; + + for (y = 0; y < _rp->rh; y++) { + for (x = 0; x < _rp->rw; x++) { + double f = B + A*exp(-0.5*(sqr((x-mx)/sx) + sqr((y-my)/sy))); + CamPix p = *im++; + sum2 += sqr(f-p); + } + im += wrap; + } + + return (sum2); +} + +/* find best m and s in V and H directions with same A, B. + * return 0 if ok, else -1 + */ +int +gauss2fit (ImRegion *rp, Gaussian *hgp, Gaussian *vgp) +{ + double p0[6], p1[6]; + CamPix *imc; + ImStats ims; + int hw0i, hw1i; + int vw0i, vw1i; + int i, mid; + + /* get min/max/xy */ + regionStats (rp, &ims); + + /* scan from maxx/y for positions that are halfway down to min + * (or edge if hit first). + * this is more like half-peak than half-width but it's something. + */ + imc = &rp->im[ims.maxaty*rp->iw + ims.maxatx]; + mid = ((int)ims.max + ims.min)/2; + hw0i = hw1i = 0; + for (i = 1; i < rp->rw && (!hw0i || !hw1i); i++) { + /* scan left/right to mid or edge */ + if (!hw0i && (imc[-i] <= mid || i == ims.maxatx - rp->rx)) + hw0i = -i; + if (!hw1i && (imc[i] <= mid || i == rp->rx+rp->rw-ims.maxatx)) + hw1i = i; + } + vw0i = vw1i = 0; + for (i = 1; i < rp->rh && (!vw0i || !vw1i); i++) { + /* scan up/down to mid or edge */ + int dy = i*rp->iw; + if (!vw0i && (imc[-dy] <= mid || i == ims.maxaty - rp->ry)) + vw0i = -i; + if (!vw1i && (imc[dy] <= mid || i == rp->ry+rp->rh-ims.maxaty)) + vw1i = i; + } + + /* initial estimates */ + p0[0] = ims.max-ims.min; + p0[1] = ims.min; + p0[2] = (hw1i - hw0i + 1)/FWHMSIG; + p0[3] = ims.maxatx - rp->rx; + p0[4] = (vw1i - vw0i + 1)/FWHMSIG; + p0[5] = ims.maxaty - rp->ry; + p1[0] = p0[0] * .9; + p1[1] = p0[1] * .9; + p1[2] = p0[2] * 1.1; + p1[3] = p0[3] + 1; + p1[4] = p0[4] * 1.1; + p1[5] = p0[5] + 1; + + /* go */ + _rp = rp; + _im = &_rp->im[_rp->ry*_rp->iw + _rp->rx]; + _wrap = _rp->iw - _rp->rw; + if (lstsqr (chisqr2d, p0, p1, 6, FTOL) < 0) + return (-1); + + /* ok! */ + hgp->A = p0[0]; + hgp->B = p0[1]; + hgp->s = p0[2]; + hgp->m = p0[3]; + vgp->A = p0[0]; + vgp->B = p0[1]; + vgp->s = p0[4]; + vgp->m = p0[5]; + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: gaussfit.c,v $ $Date: 2002/01/03 19:34:12 $ $Revision: 1.4 $ $Name: $"}; diff --git a/libip/ip.h b/libip/ip.h new file mode 100644 index 0000000..26d6661 --- /dev/null +++ b/libip/ip.h @@ -0,0 +1,173 @@ +#ifndef _IP_H +#define _IP_H + +/* include file to use the functions in libip + */ + +/* data structures */ + +#define FITS_HROWS 36 +#define FITS_HCOLS 80 +typedef char FITSRow[FITS_HCOLS]; + +typedef unsigned short CamPix; /* C type of 16bit pixel */ +#define NCAMPIX (1<<(int)(8*sizeof(CamPix))) /* number of unique CamPix */ +#define MAXCAMPIX (NCAMPIX-1) /* largest value in a CamPix*/ + +typedef struct { + /* following fields are cracked from the header for easy reference */ + int bitpix; /* handy BITPIX */ + int sw, sh; /* handy NAXIS1 and NAXIS2 */ + + FITSRow *var; /* malloced array of all unrecognized header lines */ + int nvar; /* number of var[] */ + + char *image; /* malloced image array of sw*sh*(bitpix/8) bytes */ + int nbytes; /* bytes read so far .. used for incremental loading */ + int totbytes; /* total bytes to be read .. aka, size of image[] */ + + /* cache of WCS info from recent FImage */ + int wcsset; /* set when following are ok */ + double xref; /* x reference coordinate value (deg) */ + double yref; /* y reference coordinate value (deg) */ + double xrefpix; /* x reference pixel */ + double yrefpix; /* y reference pixel */ + double xinc; /* x coordinate increment (deg) */ + double yinc; /* y coordinate increment (deg) */ + double rot; /* rotation (deg) (from N through E) */ + char type[5]; /* projection code, see worldpos() */ +} FImage; + +/* "regsion": rectangular subset of an image */ +typedef struct { + CamPix *im; /* entire 2d array */ + int iw, ih; /* dimensions of im */ + int rx, ry; /* ul corner */ + int rw, rh; /* size of region */ +} ImRegion; +#define ImRCenter(rp) (((rp)->ry+(rp)->rh/2)*(rp)->iw + (rp)->rx+(rp)->rw/2) + +/* stats for a region */ +typedef struct { + CamPix min, max; /* smallest and largest pixel */ + CamPix median; /* pixel value in middle of population */ + int maxatx, maxaty; /* location of largtest pixel, wrt image */ + double mean, std; /* mean and std of all pixels in region */ + double cmean, cstd; /* " of central half (25..75 percentile) of pixels */ +} ImStats; + +/* characterization of a guassian curve */ +typedef struct { + double B; /* base */ + double A; /* amplitude */ + double s; /* sigma */ + double m; /* median position */ +} Gaussian; +#define FWHMSIG 2.355 /* FWHM/sigma */ + +/* definition of a star. + * model it as 2 1d commensurate gaussians (same A and B) in x and y. + * err is 1 sigma value of deviations at each pixel from the ideal shape. + */ +typedef struct { + double x, y; /* position when each m == 0 */ + Gaussian vg; /* vertical best fit */ + Gaussian hg; /* horizontal best fit */ + double err; /* deviation @ STARSIGMA sigma */ +} Star; +#define STARSIGMA 3.0 /* sigmas of noise for star err */ + +/****************************************************************************/ +/* explodegif.c */ + +extern int explodeGIF (unsigned char *raw, int nraw, int *wp, int *hp, + unsigned char *pixap[], unsigned char ra[], unsigned char ga[], + unsigned char ba[], char errmsg[]); + + +/****************************************************************************/ +/* fits.c */ + +extern int writeFITS (int fd, FImage *fip, char *errmsg, int restore); +extern int writeFITSmem (FImage *fip, char **fts, char errmsg[], int restore); +extern int readFITS (int fd, FImage *fip, char *errmsg); +extern int readIncFITS (int fd, FImage *fip, char *errmsg); +extern int readFITSHeader (int fd, FImage *fip, char *errmsg); +extern int readFITSmem (char *fits, int nfits, FImage *fip, char errmsg[]); +extern int writeSimpleFITS (int fd, char *pix, int w, int h, int restore); +extern int getNAXIS (FImage *fip, int *n1p, int *n2p, char errmsg[]); +extern void initFImage (FImage *fip); +extern void resetFImage (FImage *fip); +extern void cloneFImage (FImage *new, FImage *old, int pixtoo); +extern void setSimpleFITSHeader (FImage *fip); +extern void setLogicalFITS (FImage *fip, char *name, int v, char *comment); +extern void setIntFITS (FImage *fip, char *name, int v, char *comment); +extern void setRealFITS (FImage *fip, char *name,double v,int sigdig,char *cmt); +extern void setCommentFITS (FImage *fip, char *name, char *comment); +extern void setStringFITS (FImage *fip, char *name, char *string, char *cmt); +extern int getLogicalFITS (FImage *fip, char *name, int *vp); +extern int getIntFITS (FImage *fip, char *name, int *vp); +extern int getRealFITS (FImage *fip, char *name, double *vp); +extern int getCommentFITS (FImage *fip, char *name, char *buf); +extern int getStringFITS (FImage *fip, char *name, char *string); +extern void addFImageVar (FImage *fip, FITSRow row); +extern int delFImageVar (FImage *fip, char *name); +extern int cpyFImageVar (FImage *dstfip, FImage *srcfip, char *name); + +/****************************************************************************/ +/* gaussfit.c */ + +extern int gaussfit (CamPix a[], int na, Gaussian *gp); +extern int gauss2fit (ImRegion *ip, Gaussian *hgp, Gaussian *vgp); + +/****************************************************************************/ +/* lstsqr.c */ + +extern int lstsqr (double (*chisqr)(double p[]), double params0[], + double params1[], int np, double ftol); + +/****************************************************************************/ +/* median.c */ + +extern double dmedian (double a[], int n); +extern CamPix cmedian (CamPix a[], int n); + +/****************************************************************************/ +/* sqr.c */ + +extern double sqr (double x); + +/****************************************************************************/ +/* stars.c */ + +extern int quickStars (FImage *fip, ImStats *isp, int border, int burnt, + double std, double **xpp, double **ypp); +extern int getStar (ImRegion *rp, Star *sp); +extern int cmpStars (Star *s1, Star *s0, double *magp, double *errp); + +/****************************************************************************/ +/* stats.c */ + +extern void regionStats (ImRegion *rp, ImStats *sp); +extern void ringStats (CamPix *ip, int imw, int r, int *minp, int *maxp, + int *medp); +extern void starCentroid (CamPix *ip, int imw, int r, int sky, double *dxp, + double *dyp, int *massp); +extern int clampRegion (ImRegion *rp); + +/****************************************************************************/ +/* walk.c */ + +extern void brightWalk (ImRegion *rp, int scan[8], int *bx, int *by); + +/****************************************************************************/ +/* wcs.c */ + +extern int RADec2xy(FImage *fip, double ra, double dec, double *xp, double *yp); +extern int xy2RADec(FImage *fip, double x, double y, double *rap, double *decp); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: ip.h,v $ $Date: 2005/11/18 13:42:24 $ $Revision: 1.11 $ $Name: $ + */ + +#endif /* _IP_H */ diff --git a/libip/lstsqr.c b/libip/lstsqr.c new file mode 100644 index 0000000..e3f9a27 --- /dev/null +++ b/libip/lstsqr.c @@ -0,0 +1,237 @@ +/* general purpose least squares solver. + * Uses the Amoeba solver from Numerical Recipes. + * N.B. due to the desire to let the caller user 0-based arrays and hence our + * having to provide an intermediate chisqr handler, this is _NOT_ reentrant. + */ + +#include +#include +#include + +#include "ip.h" + +/* from Numerical Recipes */ +static int amoeba(double **p, double *y, int ndim, double ftol, + double (*funk)(), int *nfunk); + +/* this lets us map 1-based arrays into 0-based arrays */ +static double (*chisqr_0based)(double p[]); +static double +chisqr_1based (double p[]) +{ + return ((*chisqr_0based) (p+1)); +} + +/* least squares solver. + * returns number of iterations if solution converged, else -1. + */ +int +lstsqr ( +double (*chisqr)(double p[]), /* function to evaluate chisqr with at p */ +double params0[], /* in: guess: back: best */ +double params1[], /* second guess to set characteristic scale */ +int np, /* entries in params0[] and params1[] */ +double ftol) /* desired fractional tolerance */ +{ + /* set up the necessary temp arrays and call the amoeba() multivariat + * solver. amoeba() was evidently transliterated from fortran because + * it indexes the arrays starting at [1]. + */ + double **p; /* np+1 rows, np columns (+1 due to 1-based) */ + double *y; /* np columns ( " ) */ + int iter; + int i, j; + int ret; + + /* save the caller's 0-based chi sqr function */ + chisqr_0based = chisqr; + + /* fill p[][] with np+1 rows of each set of guesses of the np params. + * fill y[] with chisqr() for each of these sets. + * chisqr() is actually the function the amoeba is minimizing. + */ + p = (double **) malloc ((np+2)*sizeof(double *)); + y = (double *) malloc ((np+2)*sizeof(double)); + for (i = 1; i <= np+1; i++) { + double *pi = p[i] = (double *) malloc ((np+1)*sizeof(double)); + for (j = 1; j <= np; j++) + pi[j] = (j == i-1) ? params1[j-1] : params0[j-1]; + y[i] = chisqr_1based(pi); + } + + /* solve */ + ret = amoeba (p, y, np, ftol, chisqr_1based, &iter); + + /* on return, each row i of p has solutions at p[1..np+1][i]. + * average them?? pick first one?? + */ + if (ret == 0) { + for (i = 0; i < np; i++) { +#ifdef USE_AVERAGE + double sum = 0.0; + for (j = 1; j <= np+1; j++) + sum += p[j][i+1]; + params0[i] = sum/(np+1); +#else + params0[i] = p[1][i+1]; +#endif + } + ret = iter; + } + + /* free the temp space */ + for (i = 1; i < np+2; i++) + free ((void *)p[i]); + free ((void *)p); + free ((void *)y); + + return (ret); +} + + +/* following are from Numerical Recipes in C */ + +static double amotry(double **p, double *y, double *psum, int ndim, + double (*funk)(), int ihi, int *nfunk, double fac); +static void nrerror( char error_text[]); +static double *vector(int nl, int nh); +static void free_vector(double *v, int nl, int nh); + +/* amoeba.c */ + +#define NMAX 5000 +#define ALPHA 1.0 +#define BETA 0.5 +#define GAMMA 2.0 + +#define GET_PSUM for (j=1;j<=ndim;j++) { for (i=1,sum=0.0;i<=mpts;i++)\ + sum += p[i][j]; psum[j]=sum;} + +static int +amoeba(p,y,ndim,ftol,funk,nfunk) +double **p,y[],ftol,(*funk)(); +int ndim,*nfunk; +{ + int i,j,ilo,ihi,inhi,mpts=ndim+1; + double ytry,ysave,sum,rtol,amotry(),*psum,*vector(); + void nrerror(),free_vector(); + double yihilo; + + psum=vector(1,ndim); + *nfunk=0; + GET_PSUM + for (;;) { + ilo=1; + ihi = y[1]>y[2] ? (inhi=2,1) : (inhi=1,2); + for (i=1;i<=mpts;i++) { + if (y[i] < y[ilo]) ilo=i; + if (y[i] > y[ihi]) { + inhi=ihi; + ihi=i; + } else if (y[i] > y[inhi]) + if (i != ihi) inhi=i; + } + yihilo = fabs(y[ihi])+fabs(y[ilo]); + if (yihilo == 0) break; + rtol=2.0*fabs(y[ihi]-y[ilo])/yihilo; + if (rtol < ftol) break; + if (*nfunk >= NMAX) { + /* fprintf(stderr, "Too many iterations in AMOEBA\n"); */ + free_vector(psum,1,ndim); + return(-1); + } + ytry=amotry(p,y,psum,ndim,funk,ihi,nfunk,-ALPHA); + if (ytry <= y[ilo]) + ytry=amotry(p,y,psum,ndim,funk,ihi,nfunk,GAMMA); + else if (ytry >= y[inhi]) { + ysave=y[ihi]; + ytry=amotry(p,y,psum,ndim,funk,ihi,nfunk,BETA); + if (ytry >= ysave) { + for (i=1;i<=mpts;i++) { + if (i != ilo) { + for (j=1;j<=ndim;j++) { + psum[j]=0.5*(p[i][j]+p[ilo][j]); + p[i][j]=psum[j]; + } + y[i]=(*funk)(psum); + } + } + *nfunk += ndim; + GET_PSUM + } + } + } + + free_vector(psum,1,ndim); + + return (0); +} + +static double +amotry(p,y,psum,ndim,funk,ihi,nfunk,fac) +double **p,*y,*psum,(*funk)(),fac; +int ndim,ihi,*nfunk; +{ + int j; + double fac1,fac2,ytry,*ptry,*vector(); + void nrerror(),free_vector(); + + ptry=vector(1,ndim); + fac1=(1.0-fac)/ndim; + fac2=fac1-fac; + for (j=1;j<=ndim;j++) ptry[j]=psum[j]*fac1-p[ihi][j]*fac2; + ytry=(*funk)(ptry); + ++(*nfunk); + if (ytry < y[ihi]) { + y[ihi]=ytry; + for (j=1;j<=ndim;j++) { + psum[j] += ptry[j]-p[ihi][j]; + p[ihi][j]=ptry[j]; + } + } + free_vector(ptry,1,ndim); + return ytry; +} + +#undef ALPHA +#undef BETA +#undef GAMMA +#undef NMAX + + +/* nrutil.c */ + +static void +nrerror(error_text) +char error_text[]; +{ + fprintf(stderr,"Numerical Recipes run-time error...\n"); + fprintf(stderr,"%s\n",error_text); + fprintf(stderr,"...now exiting to system...\n"); + exit(1); +} + + + +static double * +vector(nl,nh) +int nl,nh; +{ + double *v; + + v=(double *)malloc((unsigned) (nh-nl+1)*sizeof(double)); + if (!v) nrerror("allocation failure in vector()"); + return v-nl; +} + + +static void +free_vector(v,nl,nh) +double *v; +int nl,nh; +{ + free((char*) (v+nl)); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: lstsqr.c,v $ $Date: 2001/12/19 21:29:48 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libip/median.c b/libip/median.c new file mode 100644 index 0000000..f522f03 --- /dev/null +++ b/libip/median.c @@ -0,0 +1,118 @@ +/* Find median. Algorithm from N. Wirth's book, implementation by N. Devillard. + * adapted for XEphem by Elwood Downey + * #define TMAIN for test program, see end. + */ + +#include "ip.h" + +/*--------------------------------------------------------------------------- + Function : kth_smallest() + In : array of elements, # of elements in the array, rank k + Out : one element + Job : find the kth smallest element in the array + + Reference: + + Author: Wirth, Niklaus + Title: Algorithms + data structures = programs + Publisher: Englewood Cliffs: Prentice-Hall, 1976 + Physical description: 366 p. + Series: Prentice-Hall Series in Automatic Computation + + ---------------------------------------------------------------------------*/ + + + +static double +dkth_smallest(double a[], int n, int k) +{ + int i,j,l,m ; + double t, x ; + + l=0 ; m=n-1 ; + while (l +#include + +int +main (int ac, char *av[]) +{ + double *a = malloc (1); + char buf[128]; + int n; + + for (n = 0; fgets (buf, sizeof(buf), stdin); n++) + (a = realloc (a, (n+1)*sizeof(double)))[n] = atof(buf); + + printf ("%g\n", dmedian(a, n)); + return(0); +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: median.c,v $ $Date: 2001/12/04 00:45:54 $ $Revision: 1.3 $ $Name: $"}; diff --git a/libip/sqr.c b/libip/sqr.c new file mode 100644 index 0000000..bbdb7cc --- /dev/null +++ b/libip/sqr.c @@ -0,0 +1,9 @@ +#include + +#include "ip.h" + +double +sqr (double x) +{ + return (x*x); +} diff --git a/libip/stars.c b/libip/stars.c new file mode 100644 index 0000000..dbf8063 --- /dev/null +++ b/libip/stars.c @@ -0,0 +1,324 @@ +#include +#include +#include +#include + +#include "ip.h" + +#define MAXSR 20 /* max star radius, ie, pix to noise */ +#define MINSR 1 /* min star radius */ +#define SKYR 2 /* measure sky @ starr * SKYR */ +#define MINSS 2 /* min star separation */ +#define NWALK 8 /* n pixels surrounding a pixel */ +#define NCONN 3 /* min connected pixels to qualify */ +#define PKP 5 /* dips must be > this % of peak-med */ + +static double gauss2d (Gaussian *hgp, Gaussian *vgp, int x, int y); + +/* extract some "stars" from fip, no guarantees but fast. + * return malloced arrays of centroided locations sorted by brightest pixel. + * N.B. caller must always free *xpp and *ypp if return >= 0. + */ +int +quickStars (FImage *fip, ImStats *isp, int border, int burnt, double nsd, +double **xpp, double **ypp) +{ +#define IFDP if (dfp && abs(x-dx)<=dr && abs(y-dy)<=dr) + CamPix *ip, *ip0 = (CamPix *)fip->image; + int bsr = border+MAXSR; /* handy border-MAXSR */ + int w = fip->sw; /* handy */ + int h = fip->sh; /* handy */ + int walk[NWALK]; /* fast walk about */ + int *br; /* temp array to sort by brightness */ + int dx, dy, dr; /* dump region */ + FILE *dfp; /* dump file, if any */ + double *xp, *yp; + int x, y; + int nis; + + /* prime the arrays */ + xp = (double *) malloc (10*sizeof(double)); + yp = (double *) malloc (10*sizeof(double)); + br = (int *) malloc (10*sizeof(int)); + if (!xp || !yp || !br) { + if (xp) free (xp); + if (yp) free (yp); + if (br) free (br); + return (-1); + } + nis = 0; + + /* set up walk-about */ + walk[0] = 1; + walk[1] = 1 - w; + walk[2] = - w; + walk[3] = -1 - w; + walk[4] = -1; + walk[5] = -1 + w; + walk[6] = w; + walk[7] = 1 + w; + + /* check for dump file */ + dfp = fopen ("x.dump", "r"); + if (dfp) { + char fname[128]; + int ok = fscanf (dfp, "%s %d %d %d", fname, &dx, &dy, &dr) == 4; + fclose (dfp); + dfp = ok ? fopen (fname, "w") : NULL; + } + + /* scan inside border+MAXSR for local maxima */ + ip = ip0 + bsr*w + bsr; + for (y = bsr; y < h-bsr; y++) { + for (x = bsr; x < w-bsr; x++) { + int p0 = (int)*ip; /* current central pixel */ + double cx, cy; /* centroided position */ + int sky, cut; /* sky, real star cutoff */ + double std; /* 1 sigma */ + int rmin, rmax; /* min and max of a given ring */ + int lmax; /* rmax in last radii */ + int starr; /* radius of star edge */ + int mindip; /* minimum dip before peaking */ + int mass; /* star brightness */ + int ncon; + int i, r; + + /* immediately discard burnt pixels or ones below median */ + mindip = PKP*(p0 - isp->median); + if (mindip < 0) { + IFDP fprintf (dfp, "%4d %4d: %5d < median %5d\n", x, y, + p0, isp->median); + goto no; + } + if (p0 >= burnt) { + IFDP fprintf (dfp, "%4d %4d: burnt: %5d >= %5d\n", x, y, + p0, burnt); + goto no; + } + + /* init ranges */ + lmax = p0; + starr = 0; + + /* check successively greater rings. Found star outter edge + * when max has decreased and increased again. + */ + for (r = 1; r < MAXSR; r++) { + + /* get stats for ring with radius r */ + ringStats (ip, w, r, NULL, &rmax, NULL); + + /* reject any burnt pixels */ + if (rmax >= burnt) { + IFDP fprintf (dfp, "%4d %4d: ring %d burnt %5d\n", + x, y, r, rmax); + goto no; + } + + /* found star edge when max first increases. + * allow for a little benign bumpiness near the top + */ + if (rmax > lmax && 100*(p0-lmax) > mindip) { + starr = r - 1; /* stats are for last radius */ + break; + } + + /* p0 is not a peak if neighbors are brighter */ + if (rmax > p0) { + IFDP fprintf (dfp, + "%4d %4d: %5d but %5d in ring @ r= %d\n", + x, y, p0, rmax, r); + goto no; + } + + /* save last ring extreme */ + lmax = rmax; + } + + if (r == MAXSR) { + IFDP fprintf (dfp, "%4d %4d: starr %d too large\n", + x, y, r); + goto no; + } + if (starr < MINSR) { + IFDP fprintf (dfp, "%4d %4d: starr %d too small\n", + x, y, starr); + goto no; + } + + /* estimate sky and noise and set cutoff */ + r = SKYR*starr; + if (r > MAXSR) + r = MAXSR; + ringStats (ip, w, r, &rmin, NULL, &sky); + std = (sky - rmin)/3.0; /* ?? */ + cut = sky + (int)(nsd*std); + if (p0 < cut) { + IFDP fprintf (dfp, + "%4d %4d: %5d too dim r= %d sky= %d std= %g\n", + x, y, p0, starr, sky, std); + goto no; + } + + /* want several connected neighbors above cutoff */ + ncon = 0; + for (i = 0; i < NWALK+NCONN; i++) + if (ip[walk[i%NWALK]] >= cut) { + if (++ncon == NCONN) + break; + } else + ncon = 0; + if (ncon < NCONN) { + IFDP fprintf (dfp, + "%4d %4d: only %d connected neighbors above %d\n", + x, y, ncon, cut); + goto no; + } + + /* find centroided position */ + starCentroid (ip, w, starr, sky, &cx, &cy, &mass); + cx += x; + cy += y; + + /* must be a few pixels from any other */ + for (i = 0; i < nis; i++) + if (fabs(cx-xp[i]) < MINSS && fabs(cy-yp[i]) < MINSS) { + IFDP fprintf (dfp, + "%4d %4d: %5d dup @ %4.0f %4.0f\n", + x, y, p0, xp[i], yp[i]); + goto no; + } + + /* Ok! insert in order of decreasing brightness */ + xp = (double *) realloc ((char *)xp, (nis+1)*sizeof(double)); + yp = (double *) realloc ((char *)yp, (nis+1)*sizeof(double)); + br = (int *) realloc ((char *)br, (nis+1)*sizeof(int)); + if (!xp || !yp || !br) { + if (xp) free (xp); + if (yp) free (yp); + if (br) free (br); + return (-1); + } + for (i = nis; i > 0 && mass > br[i-1]; --i) { + br[i] = br[i-1]; + xp[i] = xp[i-1]; + yp[i] = yp[i-1]; + } + br[i] = mass; + xp[i] = cx; + yp[i] = cy; + + IFDP fprintf (dfp, + "%4d %4d: OK %5d > %5d %6.1f %6.1f r= %d sky= %d std= %g\n", + x, y, p0, cut, cx, cy, starr, sky, std); + + /* inc number of stars found */ + nis++; + + no: + + /* move to next pixel right */ + ip++; + } + + /* move to start of next row */ + ip += 2*bsr; + } + + free ((char *)br); + *xpp = xp; + *ypp = yp; + if (dfp) + fclose (dfp); + return (nis); +} + +/* given a region that presumably contains a single star, fill in sp + * with best-fit 2d commensurate gaussian. + * return 0 if ok, else -1 + * N.B. we assume rp has already been clamped. + */ +int +getStar (ImRegion *rp, Star *sp) +{ + CamPix *im = &rp->im[rp->ry*rp->iw + rp->rx]; + int wrap = rp->iw - rp->rw; + int nr = rp->rw * rp->rh; + double sum = 0, sum2 = 0; + double v; + int x, y; + + /* on guard */ + if (nr < 2) { + printf ("getStar called with region of 1\n"); + return (-1); + } + + /* find commensurate gaussians */ + if (gauss2fit (rp, &sp->hg, &sp->vg) < 0) + return (-1); + + /* position is with respect to corner of region */ + sp->x = rp->rx + sp->hg.m; + sp->y = rp->ry + sp->vg.m; + + /* compare ideal to real to estimate noise */ + for (y = 0; y < rp->rh; y++) { + for (x = 0; x < rp->rw; x++) { + double ideal = gauss2d (&sp->hg, &sp->vg, x, y); + double real = (double)*im++; + double err = ideal - real; + sum += err; + sum2 += sqr(err); + } + im += wrap; + } + + /* error is STARSIGMA sigma noise */ + v = (sum2 - sum*sum/nr)/(nr-1); + sp->err = v <= 0 ? 0 : STARSIGMA*sqrt(v); + + return (0); +} + +/* find the magnitude of s1 wrt s0 and the error in the estimate. + * gaussian volume taken to be proportional to height * sigmax * sigmay. + * return 0 if ok, else -1 if numerical troubles. + */ +int +cmpStars (Star *s0, Star *s1, double *magp, double *errp) +{ + double v0, v1, r; + + /* magnitude is ratio of guassian volumes */ + v0 = s0->hg.A * s0->hg.s * s0->vg.s; + v1 = s1->hg.A * s1->hg.s * s1->vg.s; + if (v0 == 0 || (r = v1/v0) <= 0) + return (-1); + *magp = -2.511886*log10(r); /* + is dimmer */ + + /* error = (log(largest ratio) - log(smallest ratio))/2. + * = (log((largest ratio) / (smallest ratio)))/2. + * final /2 because we want to report as +/- + */ + v1 = (s1->hg.A + s1->err)/(s0->hg.A - s0->err); /* largest */ + v0 = (s1->hg.A - s1->err)/(s0->hg.A + s0->err); /* smallest */ + if (v0 == 0) + return (-1); + *errp = (2.511886/2)*log10(fabs(v1/v0)); + + /* made it */ + return (0); +} + + +/* compute value of 2d gaussian at [x,y] */ +static double +gauss2d (Gaussian *hgp, Gaussian *vgp, int x, int y) +{ + return (hgp->B + hgp->A*exp(-.5*(sqr((x-hgp->m)/hgp->s)+ + sqr((y-vgp->m)/vgp->s)))); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: stars.c,v $ $Date: 2002/01/15 19:48:27 $ $Revision: 1.7 $ $Name: $"}; diff --git a/libip/stats.c b/libip/stats.c new file mode 100644 index 0000000..7551715 --- /dev/null +++ b/libip/stats.c @@ -0,0 +1,191 @@ +/* basic pixel statistics */ + +#include +#include +#include + +#include "ip.h" + +/* given an image and a region within, return some basic stats. + * N.B. we do /not/ check that the region has finite area and lies within image. + */ +void +regionStats (ImRegion *rp, ImStats *sp) +{ + CamPix *im = &rp->im[rp->ry*rp->iw + rp->rx]; + int rn = rp->rw * rp->rh; + int wrap = rp->iw - rp->rw; + double sum, sum2; + int hist[NCAMPIX]; + int min, max; + double v; + int x, y; + int i, n; + + /* scan region gathering stats */ + memset (hist, 0, sizeof(hist)); + min = max = im[0]; + sp->maxatx = rp->rx; + sp->maxaty = rp->ry; + sum = sum2 = 0; + for (y = 0; y < rp->rh; y++) { + for (x = 0; x < rp->rw; x++) { + int p = (int)(*im++); + hist[p]++; + sum += (double)p; + sum2 += (double)p*p; + if (p > max) { + max = p; + sp->maxatx = rp->rx+x; + sp->maxaty = rp->ry+y; + } + if (p < min) + min = p; + } + im += wrap; + } + + + sp->min = min; + sp->max = max; + + if (rn > 1) { + sp->mean = sum/rn; + v = (sum2 - sum*sp->mean)/(rn-1); + sp->std = v <= 0.0 ? 0.0 : sqrt (v); + } else { + sp->mean = (sp->min+sp->max)/2; + sp->std = (sp->max-sp->min)/3; + } + + /* scan 25..75 percentile for central stats */ + n = 0; + sum = sum2 = 0; + min = max = -1; /* min = p@25%, max = p@50% */ + x = 0; /* pixels in center half */ + for (i = 0; n <= 3*rn/4; i++) { + n += hist[i]; + if (max < 0 && n >= rn/2) + max = i; + if (min < 0 && n >= rn/4) + min = i; + if (min >= 0) { + sum += (double)i*hist[i]; + sum2 += (double)i*i*hist[i]; + x += hist[i]; + } + } + + /* med is 50 percentile */ + sp->median = max; + + /* compute central mean/std */ + if (x > 1) { + sp->cmean = sum/x; + v = (sum2 - sum*sp->cmean)/(x-1); + sp->cstd = v <= 0.0 ? 0.0 : sqrt (v); + } else { + sp->cmean = (min+max)/2; + sp->cstd = (max-min)/3; + } +} + +/* return min, max and median of ring of radius [r..r+1) centered at ip. + * imw is width of host image. any return pointers may be NULL if unwanted. + * N.B. we do no range checking. + */ +void +ringStats (CamPix *ip, int imw, int r, int *minp, int *maxp, int *medp) +{ + CamPix ring[1000]; + int r2min = r*r; + int r2max = (r+1)*(r+1); + int rmin = MAXCAMPIX; + int rmax = 0; + int nr = 0; + int rx, ry; + + for (ry = -r; ry <= r; ry++) { + CamPix *iprow = &ip[ry*imw - r]; + int d2, ry2 = ry*ry; + for (rx = -r; rx <= r; rx++) { + CamPix p1 = (*iprow++); + d2 = rx*rx + ry2; + if (d2 >= r2min && d2 < r2max) { + ring[nr++] = p1; + if (p1 < rmin) + rmin = p1; + if (p1 > rmax) + rmax = p1; + } + } + } + + if (minp) + *minp = rmin; + if (maxp) + *maxp = rmax; + if (medp) + *medp = cmedian (ring, nr); +} + +/* return position and (optional) "mass" of circular region [0..r] centered + * at ip, assumed to be from host image of width imw. + * N.B. we do no range checking. + */ +void +starCentroid (CamPix *ip, int imw, int r, int sky, double *dxp, double *dyp, +int *massp) +{ + int sx = 0, sy = 0, sm = 0; + int r2 = r*r; + int rx, ry; + + for (ry = -r; ry <= r; ry++) { + CamPix *iprow = &ip[ry*imw - r]; + int ry2 = ry*ry; + for (rx = -r; rx <= r; rx++) { + int p1 = (int)(*iprow++) - sky; + if (p1 > 0 && rx*rx + ry2 <= r2) { + sx += rx*p1; + sy += ry*p1; + sm += p1; + } + } + } + + *dxp = (double)sx/sm; + *dyp = (double)sy/sm; + if (massp) + *massp = sm; +} + +/* check and fix the given region so as to be all within the image. + * return 0 if successful, -1 if region is _completely_ outside the image + */ +int +clampRegion (ImRegion *rp) +{ + if (rp->rx < 0) { + rp->rw += rp->rx; + rp->rx = 0; + } else if (rp->rx + rp->rw > rp->iw) { + rp->rw = rp->iw - rp->rx; + } + if (rp->rw <= 0) + return (-1); + + if (rp->ry < 0) { + rp->rh += rp->ry; + rp->ry = 0; + } else if (rp->ry + rp->rh > rp->ih) { + rp->rh = rp->ih - rp->ry; + } + if (rp->rh <= 0) + return (-1); + + return (0); +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: stats.c,v $ $Date: 2004/05/20 06:02:24 $ $Revision: 1.6 $ $Name: $"}; diff --git a/libip/walk.c b/libip/walk.c new file mode 100644 index 0000000..c19bd34 --- /dev/null +++ b/libip/walk.c @@ -0,0 +1,50 @@ +#include +#include + +#include "ip.h" + +/* starting at the center of the given region, walk up the gradient to the + * brightest pixel. the region just sets the starting point, the walk is not + * confined therein. but if the walk bangs into the edge of the /image/, we + * walk[] are the offsets to the 8 surrounding pixels, we provide if NULL. + * return that location. + */ +void +brightWalk (ImRegion *rp, int walk[8], int *bx, int *by) +{ + CamPix *im = &rp->im[ImRCenter(rp)]; + CamPix *imend = &rp->im[rp->iw*rp->ih]; + int mywalk[8]; + int i, bi; + + /* build a pixel walk-around map if not provided */ + if (!walk) { + mywalk[0] = 1; + mywalk[1] = 1 - rp->iw; + mywalk[2] = - rp->iw; + mywalk[3] = -1 - rp->iw; + mywalk[4] = -1; + mywalk[5] = -1 + rp->iw; + mywalk[6] = rp->iw; + mywalk[7] = 1 + rp->iw; + walk = mywalk; + } + + do { + bi = 0; + for (i = 0; i < 8; i++) + if (im[walk[i]] > im[bi]) + bi = walk[i]; + im += bi; + if (im < rp->im || im >= imend) { + im -= bi; /* step back into image */ + break; + } + } while (bi); + + *bx = (im - rp->im)%rp->iw; + *by = (im - rp->im)/rp->iw; +} + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: walk.c,v $ $Date: 2001/10/03 08:26:37 $ $Revision: 1.2 $ $Name: $"}; diff --git a/libip/wcs.c b/libip/wcs.c new file mode 100644 index 0000000..5753aaf --- /dev/null +++ b/libip/wcs.c @@ -0,0 +1,739 @@ +/* manage WCS headers both classic and PLAT scale variety. + * + * N.B. the FITS standard says the center of the first pixel in the file is + * at pixel coordinates [1,1]. The functions here-in expect the caller to + * refer to this pixel as [0,0]. + */ + +#include +#include +#include +#include + +#include "astro.h" +#include "ip.h" + +static int dsswcs (FImage *fip); +static int dssxy2RADec (FImage *fip, double X, double Y, double *rap, + double *decp); +static int worldpos (double xpix, double ypix, double xref, double yref, + double xrefpix, double yrefpix, double xinc, double yinc, double rot, + char *type, double *xpos, double *ypos); +static int xypix (double xpos, double ypos, double xref, double yref, + double xrefpix, double yrefpix, double xinc, double yinc, double rot, + char *type, double *xpix, double *ypix); +static int setWCScache (FImage *fip); + +/* given a 0-based x/y location over the given image, return ra and dec, rads. + * we require the C* fields in the header. + * return 0 if all ok, else -1. + */ +int +xy2RADec (fip, x, y, rap, decp) +FImage *fip; +double x, y; +double *rap, *decp; +{ + double xpos; /* x (RA) coordinate (deg) */ + double ypos; /* y (dec) coordinate (deg) */ + + if (setWCScache (fip) < 0) + return (-1); + + /* CRPIXn assume pixels are 1-based */ + if (worldpos(x+1, y+1, fip->xref, fip->yref, fip->xrefpix, fip->yrefpix, + fip->xinc, fip->yinc, fip->rot, fip->type, &xpos, &ypos) < 0) + return (-1); + + *rap = degrad (xpos); + range (rap, 2*PI); + *decp = degrad (ypos); + + return (0); +} + +/* given an ra and dec, rads, return 0-based x/y location over the given image. + * we require the C* fields in the header. + * return 0 if all ok, else -1. + */ +int +RADec2xy (fip, ra, dec, xp, yp) +FImage *fip; +double ra, dec; +double *xp, *yp; +{ + double xpos; /* x (RA) coordinate (deg) */ + double ypos; /* y (dec) coordinate (deg) */ + + if (setWCScache (fip) < 0) + return (-1); + + xpos = raddeg(ra); + ypos = raddeg(dec); + + if (xypix(xpos, ypos, fip->xref, fip->yref, fip->xrefpix, fip->yrefpix, + fip->xinc, fip->yinc, fip->rot, fip->type, xp, yp) < 0) + return (-1); + + /* CRPIXn assume pixels are 1-based */ + *xp -= 1; + *yp -= 1; + + return (0); +} + +/* given a DSS image, build the WCS headers. + * return 0 if ok, else return -1. + */ +static int +dsswcs (fip) +FImage *fip; +{ + double a0, d0, a1, d1; + double px, py; + double pltscale; + double rot; + + /* find RA and Dec at the center of our image */ + if (dssxy2RADec (fip, fip->sw/2.0, fip->sh/2.0, &a0, &d0) < 0) + return (-1); + + /* use center as reference */ + setRealFITS (fip, "CRPIX1", fip->sw/2.0, 10, NULL); + setRealFITS (fip, "CRPIX2", fip->sh/2.0, 10, NULL); + setRealFITS (fip, "CRVAL1", raddeg(a0), 10, NULL); + setRealFITS (fip, "CRVAL2", raddeg(d0), 10, NULL); + + /* set scale */ + if (getRealFITS (fip, "PLTSCALE", &pltscale) < 0 + || getRealFITS (fip, "XPIXELSZ", &px) < 0 + || getRealFITS (fip, "YPIXELSZ", &py) < 0) { + return(-1); + } + setRealFITS (fip, "CDELT1", -pltscale*px/3600000.0, 10, NULL); + setRealFITS (fip, "CDELT2", pltscale*py/3600000.0, 10, NULL); + + /* coord sys */ + setStringFITS (fip, "CTYPE1", "RA---TAN", NULL); + setStringFITS (fip, "CTYPE2", "DEC--TAN", NULL); + + /* find rotation CW to make N up. + * TODO: ugly! gotta better way?? + */ + if (dssxy2RADec (fip, fip->sw/2.0, 0.0, &a1, &d1) < 0) + return (-1); + if (d0 < 0) { + double A = a0-a1; + double b = PI/2+d0; + double c = PI/2+d1; + rot = raddeg(atan2(c*sin(A), c*cos(A)-b)) - 180; + } else { + double A = a1-a0; + double b = PI/2-d0; + double c = PI/2-d1; + rot = raddeg(atan2(c*sin(A), c*cos(A)-b)); + } + setRealFITS (fip, "CROTA2", rot, 10, "Derived from DSS"); + + return (0); +} + +/* convert pixel coords to ra/dec, using DSS header fields. + * this is all based on the equations on pages 14-16 of The Digitized Sky + * Survey release notes. + * return 0 if ok, else -1. + */ +static int +dssxy2RADec (fip, X, Y, rap, decp) +FImage *fip; +double X, Y; +double *rap, *decp; +{ + char buf[128]; + double cnpix1, cnpix2; + double a[14], b[14]; + double rh, rm, rs; + double dd, dm, ds; + double xc, px, yc, py; + double x, y, x2y2; + double pltscale; + double rac, decc, ra; + double xi, nu; + double tandecc; + int i; + + if (getRealFITS (fip, "CNPIX1", &cnpix1) < 0 + || getRealFITS (fip, "CNPIX2", &cnpix2) < 0) { + return(-1); + } + + if (getRealFITS (fip, "PLTSCALE", &pltscale) < 0 + || getRealFITS (fip, "PPO3", &xc) < 0 + || getRealFITS (fip, "PPO6", &yc) < 0 + || getRealFITS (fip, "XPIXELSZ", &px) < 0 + || getRealFITS (fip, "YPIXELSZ", &py) < 0) { + return(-1); + } + + X += cnpix1 - 0.5; + Y += cnpix2 - 0.5; + x = (xc - px*X)/1000.0; + y = (py*Y - yc)/1000.0; + + for (i = 1; i <= 13; i++) { + char ax[32], ay[32]; + (void) sprintf (ax, "AMDX%d", i); + (void) sprintf (ay, "AMDY%d", i); + if (getRealFITS (fip, ax, &a[i]) < 0 || + getRealFITS (fip, ay, &b[i]) < 0) { + return (-1); + } + } + x2y2 = x*x + y*y; + xi = a[1]*x + a[2]*y + a[3] + a[4]*x*x + a[5]*x*y + a[6]*y*y + + a[7]*x2y2 + a[8]*x*x*x + a[9]*x*x*y + a[10]*x*y*y + + a[11]*y*y*y + a[12]*x*x2y2 + a[13]*x*x2y2*x2y2; + xi = degrad(xi/3600.0); + nu = b[1]*y + b[2]*x + b[3] + b[4]*y*y + b[5]*x*y + b[6]*x*x + + b[7]*x2y2 + b[8]*y*y*y + b[9]*x*y*y + b[10]*x*x*y + + b[11]*x*x*x + b[12]*y*x2y2 + b[13]*y*x2y2*x2y2; + nu = degrad(nu/3600.0); + + + if (getRealFITS (fip, "PLTRAH", &rh) < 0 + || getRealFITS (fip, "PLTRAM", &rm) < 0 + || getRealFITS (fip, "PLTRAS", &rs) < 0 + || getRealFITS (fip, "PLTDECD", &dd) < 0 + || getRealFITS (fip, "PLTDECM", &dm) < 0 + || getRealFITS (fip, "PLTDECS", &ds) < 0 + || getStringFITS (fip, "PLTDECSN", buf) < 0) { + return(-1); + } + rac = rs/3600.0 + rm/60.0 + rh; + rac = hrrad(rac); + decc = ds/3600.0 + dm/60.0 + dd; + if (buf[0] == '-') + decc = -decc; + decc = degrad(decc); + tandecc = tan(decc); + + ra = atan2 (xi/cos(decc), 1.0-nu*tandecc) + rac; + if (ra < 0) + ra += 2*PI; + *rap = ra; + *decp = atan (((nu + tandecc)*cos(ra-rac))/(1.0 - nu*tandecc)); + + return (0); +} + +/* load the WCS cache if not already set up. + * return 0 if ok, else -1 + */ +static int +setWCScache (fip) +FImage *fip; +{ + FITSRow typestr; + double tmp; + + if (fip->wcsset) + return (0); + + /* if have DSS convert to WCS so we know we can go both ways. + * only dss RD->xy I can find solves from xy->RD YUK! + */ + if (getRealFITS (fip, "PLTRAH", &tmp) == 0) { + if (dsswcs (fip) < 0) + return (-1); + } + + if (getRealFITS (fip, "CRVAL1", &fip->xref) < 0) return (-1); + if (getRealFITS (fip, "CRVAL2", &fip->yref) < 0) return (-1); + if (getRealFITS (fip, "CRPIX1", &fip->xrefpix) < 0) return (-1); + if (getRealFITS (fip, "CRPIX2", &fip->yrefpix) < 0) return (-1); + if (getRealFITS (fip, "CDELT1", &fip->xinc) < 0) return (-1); + if (getRealFITS (fip, "CDELT2", &fip->yinc) < 0) return (-1); + if (getRealFITS (fip, "CROTA2", &fip->rot) < 0) return (-1); + if (getStringFITS (fip, "CTYPE1", typestr) < 0) return (-1); + if (strncmp (typestr, "RA--", 4)) return (-1); + strncpy (fip->type, typestr+4, sizeof(fip->type)-1); + + fip->wcsset = 1; + return (0); +} + + +/* worldpos.c -- WCS Algorithms from Classic AIPS. + Copyright (C) 1994 + Associated Universities, Inc. Washington DC, USA. + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. + + Correspondence concerning AIPS should be addressed as follows: + Internet email: aipsmail@nrao.edu + Postal address: AIPS Group + National Radio Astronomy Observatory + 520 Edgemont Road + Charlottesville, VA 22903-2475 USA + + -=-=-=-=-=-=- + + These two ANSI C functions, worldpos() and xypix(), perform + forward and reverse WCS computations for 8 types of projective + geometries ("-SIN", "-TAN", "-ARC", "-NCP", "-GLS", "-MER", "-AIT" + and "-STG"): + + worldpos() converts from pixel location to RA,Dec + xypix() converts from RA,Dec to pixel location + + where "(RA,Dec)" are more generically (long,lat). These functions + are based on the WCS implementation of Classic AIPS, an + implementation which has been in production use for more than ten + years. See the two memos by Eric Greisen + + ftp://fits.cv.nrao.edu/fits/documents/wcs/aips27.ps.Z + ftp://fits.cv.nrao.edu/fits/documents/wcs/aips46.ps.Z + + for descriptions of the 8 projective geometries and the + algorithms. Footnotes in these two documents describe the + differences between these algorithms and the 1993-94 WCS draft + proposal (see URL below). In particular, these algorithms support + ordinary field rotation, but not skew geometries (CD or PC matrix + cases). Also, the MER and AIT algorithms work correctly only for + CRVALi=(0,0). Users should note that GLS projections with yref!=0 + will behave differently in this code than in the draft WCS + proposal. The NCP projection is now obsolete (it is a special + case of SIN). WCS syntax and semantics for various advanced + features is discussed in the draft WCS proposal by Greisen and + Calabretta at: + + ftp://fits.cv.nrao.edu/fits/documents/wcs/wcs.all.ps.Z + + -=-=-=- + + The original version of this code was Emailed to D.Wells on + Friday, 23 September by Bill Cotton , + who described it as a "..more or less.. exact translation from the + AIPSish..". Changes were made by Don Wells + during the period October 11-13, 1994: + 1) added GNU license and header comments + 2) added testpos.c program to perform extensive circularity tests + 3) changed float-->double to get more than 7 significant figures + 4) testpos.c circularity test failed on MER and AIT. B.Cotton + found that "..there were a couple of lines of code [in] the wrong + place as a result of merging several Fortran routines." + 5) testpos.c found 0h wraparound in xypix() and worldpos(). + 6) E.Greisen recommended removal of various redundant if-statements, + and addition of a 360d difference test to MER case of worldpos(). +*/ + +static int worldpos(xpix, ypix, xref, yref, xrefpix, yrefpix, xinc, yinc, rot, + type, xpos, ypos) +double xpix; +double ypix; +double xref; +double yref; +double xrefpix; +double yrefpix; +double xinc; +double yinc; +double rot; +char *type; +double *xpos; +double *ypos; +/*-----------------------------------------------------------------------*/ +/* routine to determine accurate position for pixel coordinates */ +/* returns 0 if successful otherwise: */ +/* 1 = angle too large for projection; */ +/* does: -SIN, -TAN, -ARC, -NCP, -GLS, -MER, -AIT projections */ +/* anything else is linear */ +/* Input: */ +/* f xpix x pixel number (RA or long without rotation) */ +/* f ypiy y pixel number (dec or lat without rotation) */ +/* d xref x reference coordinate value (deg) */ +/* d yref y reference coordinate value (deg) */ +/* f xrefpix x reference pixel */ +/* f yrefpix y reference pixel */ +/* f xinc x coordinate increment (deg) */ +/* f yinc y coordinate increment (deg) */ +/* f rot rotation (deg) (from N through E) */ +/* c *type projection type code e.g. "-SIN"; */ +/* Output: */ +/* d *xpos x (RA) coordinate (deg) */ +/* d *ypos y (dec) coordinate (deg) */ +/*-----------------------------------------------------------------------*/ +{ + double cosr, sinr, dx, dy, dz, tmp; + double sins, coss, dect=0, rat=0, dt, l, m, mg, da, dd, cos0, sin0; + double dec0, ra0, decout, raout; + double geo1, geo2, geo3; + double cond2r=1.745329252e-2; + double twopi = 6.28318530717959, deps = 1.0e-5; + int i, itype; + static char ctypes[8][5] ={"-SIN","-TAN","-ARC","-NCP", "-GLS", "-MER", + "-AIT", "-STG"}; +/* Offset from ref pixel */ + dx = (xpix-xrefpix) * xinc; + dy = (ypix-yrefpix) * yinc; +/* Take out rotation */ + cosr = cos(rot*cond2r); + sinr = sin(rot*cond2r); + if (rot!=0.0) + {tmp = dx * cosr - dy * sinr; + dy = dy * cosr + dx * sinr; + dx = tmp;} +/* find type */ + itype = 0; /* default type is linear */ + for (i=0;i<8;i++) if (!strncmp(type, ctypes[i], 4)) itype = i+1; +/* default, linear result for error return */ + *xpos = xref + dx; + *ypos = yref + dy; +/* convert to radians */ + ra0 = xref * cond2r; + dec0 = yref * cond2r; + l = dx * cond2r; + m = dy * cond2r; + sins = l*l + m*m; + decout = 0.0; + raout = 0.0; + cos0 = cos(dec0); + sin0 = sin(dec0); +/* process by case */ + switch (itype) { + case 0: /* linear */ + rat = ra0 + l; + dect = dec0 + m; + break; + case 1: /* -SIN sin*/ + if (sins>1.0) return 1; + coss = sqrt (1.0 - sins); + dt = sin0 * coss + cos0 * m; + if ((dt>1.0) || (dt<-1.0)) return 1; + dect = asin (dt); + rat = cos0 * coss - sin0 * m; + if ((rat==0.0) && (l==0.0)) return 1; + rat = atan2 (l, rat) + ra0; + break; + case 2: /* -TAN tan */ + if (sins>1.0) return 1; + dect = cos0 - m * sin0; + if (dect==0.0) return 1; + rat = ra0 + atan2 (l, dect); + dect = atan (cos(rat-ra0) * (m * cos0 + sin0) / dect); + break; + case 3: /* -ARC Arc*/ + if (sins>=twopi*twopi/4.0) return 1; + sins = sqrt(sins); + coss = cos (sins); + if (sins!=0.0) sins = sin (sins) / sins; + else + sins = 1.0; + dt = m * cos0 * sins + sin0 * coss; + if ((dt>1.0) || (dt<-1.0)) return 1; + dect = asin (dt); + da = coss - dt * sin0; + dt = l * sins * cos0; + if ((da==0.0) && (dt==0.0)) return 1; + rat = ra0 + atan2 (dt, da); + break; + case 4: /* -NCP North celestial pole*/ + dect = cos0 - m * sin0; + if (dect==0.0) return 1; + rat = ra0 + atan2 (l, dect); + dt = cos (rat-ra0); + if (dt==0.0) return 1; + dect = dect / dt; + if ((dect>1.0) || (dect<-1.0)) return 1; + dect = acos (dect); + if (dec0<0.0) dect = -dect; + break; + case 5: /* -GLS global sinusoid */ + dect = dec0 + m; + if (fabs(dect)>twopi/4.0) return 1; + coss = cos (dect); + if (fabs(l)>twopi*coss/2.0) return 1; + rat = ra0; + if (coss>deps) rat = rat + l / coss; + break; + case 6: /* -MER mercator*/ + dt = yinc * cosr + xinc * sinr; + if (dt==0.0) dt = 1.0; + dy = (yref/2.0 + 45.0) * cond2r; + dx = dy + dt / 2.0 * cond2r; + dy = log (tan (dy)); + dx = log (tan (dx)); + geo2 = dt * cond2r / (dx - dy); + geo3 = geo2 * dy; + geo1 = cos (yref*cond2r); + if (geo1<=0.0) geo1 = 1.0; + rat = l / geo1 + ra0; + if (fabs(rat - ra0) > twopi) return 1; /* added 10/13/94 DCW/EWG */ + dt = 0.0; + if (geo2!=0.0) dt = (m + geo3) / geo2; + dt = exp (dt); + dect = 2.0 * atan (dt) - twopi / 4.0; + break; + case 7: /* -AIT Aitoff*/ + dt = yinc*cosr + xinc*sinr; + if (dt==0.0) dt = 1.0; + dt = dt * cond2r; + dy = yref * cond2r; + dx = sin(dy+dt)/sqrt((1.0+cos(dy+dt))/2.0) - + sin(dy)/sqrt((1.0+cos(dy))/2.0); + if (dx==0.0) dx = 1.0; + geo2 = dt / dx; + dt = xinc*cosr - yinc* sinr; + if (dt==0.0) dt = 1.0; + dt = dt * cond2r; + dx = 2.0 * cos(dy) * sin(dt/2.0); + if (dx==0.0) dx = 1.0; + geo1 = dt * sqrt((1.0+cos(dy)*cos(dt/2.0))/2.0) / dx; + geo3 = geo2 * sin(dy) / sqrt((1.0+cos(dy))/2.0); + rat = ra0; + dect = dec0; + if ((l==0.0) && (m==0.0)) break; + dz = 4.0 - l*l/(4.0*geo1*geo1) - ((m+geo3)/geo2)*((m+geo3)/geo2) ; + if ((dz>4.0) || (dz<2.0)) return 1; + dz = 0.5 * sqrt (dz); + dd = (m+geo3) * dz / geo2; + if (fabs(dd)>1.0) return 1; + dd = asin (dd); + if (fabs(cos(dd))1.0) return 1; + da = asin (da); + rat = ra0 + 2.0 * da; + dect = dd; + break; + case 8: /* -STG Sterographic*/ + dz = (4.0 - sins) / (4.0 + sins); + if (fabs(dz)>1.0) return 1; + dect = dz * sin0 + m * cos0 * (1.0+dz) / 2.0; + if (fabs(dect)>1.0) return 1; + dect = asin (dect); + rat = cos(dect); + if (fabs(rat)1.0) return 1; + rat = asin (rat); + mg = 1.0 + sin(dect) * sin0 + cos(dect) * cos0 * cos(rat); + if (fabs(mg)deps) rat = twopi/2.0 - rat; + rat = ra0 + rat; + break; + } +/* return ra in range */ + raout = rat; + decout = dect; + if (raout-ra0>twopi/2.0) raout = raout - twopi; + if (raout-ra0<-twopi/2.0) raout = raout + twopi; + if (raout < 0.0) raout += twopi; /* added by DCW 10/12/94 */ + +/* correct units back to degrees */ + *xpos = raout / cond2r; + *ypos = decout / cond2r; + return 0; +} /* End of worldpos */ + +static int xypix(xpos, ypos, xref, yref, xrefpix, yrefpix, xinc, yinc, rot, + type, xpix, ypix) +double xpos; +double ypos; +double xref; +double yref; +double xrefpix; +double yrefpix; +double xinc; +double yinc; +double rot; +char *type; +double *xpix; +double *ypix; +/*-----------------------------------------------------------------------*/ +/* routine to determine accurate pixel coordinates for an RA and Dec */ +/* returns 0 if successful otherwise: */ +/* 1 = angle too large for projection; */ +/* 2 = bad values */ +/* does: -SIN, -TAN, -ARC, -NCP, -GLS, -MER, -AIT projections */ +/* anything else is linear */ +/* Input: */ +/* d xpos x (RA) coordinate (deg) */ +/* d ypos y (dec) coordinate (deg) */ +/* d xref x reference coordinate value (deg) */ +/* d yref y reference coordinate value (deg) */ +/* f xrefpix x reference pixel */ +/* f yrefpix y reference pixel */ +/* f xinc x coordinate increment (deg) */ +/* f yinc y coordinate increment (deg) */ +/* f rot rotation (deg) (from N through E) */ +/* c *type projection type code e.g. "-SIN"; */ +/* Output: */ +/* f *xpix x pixel number (RA or long without rotation) */ +/* f *ypiy y pixel number (dec or lat without rotation) */ +/*-----------------------------------------------------------------------*/ +{ + double dx, dy, dz, r, ra0, dec0, ra, dec, coss, sins, dt, da, dd, sint; + double l, m=0, geo1, geo2, geo3, sinr, cosr; + double cond2r=1.745329252e-2, deps=1.0e-5, twopi=6.28318530717959; + int i, itype; + static char ctypes[8][5] ={"-SIN","-TAN","-ARC","-NCP", "-GLS", "-MER", + "-AIT", "-STG"}; + + /* 0h wrap-around tests added by D.Wells 10/12/94: */ + dt = (xpos - xref); + if (dt > 180) xpos -= 360; + if (dt < -180) xpos += 360; + /* NOTE: changing input argument xpos is OK (call-by-value in C!) */ + +/* default values - linear */ + dx = xpos - xref; + dy = ypos - yref; + dz = 0.0; +/* Correct for rotation */ + r = rot * cond2r; + cosr = cos (r); + sinr = sin (r); + dz = dx*cosr + dy*sinr; + dy = dy*cosr - dx*sinr; + dx = dz; +/* check axis increments - bail out if either 0 */ + if ((xinc==0.0) || (yinc==0.0)) {*xpix=0.0; *ypix=0.0; return 2;} +/* convert to pixels */ + *xpix = dx / xinc + xrefpix; + *ypix = dy / yinc + yrefpix; + +/* find type */ + itype = 0; /* default type is linear */ + for (i=0;i<8;i++) if (!strncmp(type, ctypes[i], 4)) itype = i+1; + if (itype==0) return 0; /* done if linear */ + +/* Non linear position */ + ra0 = xref * cond2r; + dec0 = yref * cond2r; + ra = xpos * cond2r; + dec = ypos * cond2r; + +/* compute direction cosine */ + coss = cos (dec); + sins = sin (dec); + l = sin(ra-ra0) * coss; + sint = sins * sin(dec0) + coss * cos(dec0) * cos(ra-ra0); +/* process by case */ + switch (itype) { + case 1: /* -SIN sin*/ + if (sint<0.0) return 1; + m = sins * cos(dec0) - coss * sin(dec0) * cos(ra-ra0); + break; + case 2: /* -TAN tan */ + if (sint<=0.0) return 1; + m = sins * sin(dec0) + coss * cos(dec0) * cos(ra-ra0); + l = l / m; + m = (sins * cos(dec0) - coss * sin(dec0) * cos(ra-ra0)) / m; + break; + case 3: /* -ARC Arc*/ + m = sins * sin(dec0) + coss * cos(dec0) * cos(ra-ra0); + if (m<-1.0) m = -1.0; + if (m>1.0) m = 1.0; + m = acos (m); + if (m!=0) + m = m / sin(m); + else + m = 1.0; + l = l * m; + m = (sins * cos(dec0) - coss * sin(dec0) * cos(ra-ra0)) * m; + break; + case 4: /* -NCP North celestial pole*/ + if (dec0==0.0) + return 1; /* can't stand the equator */ + else + m = (cos(dec0) - coss * cos(ra-ra0)) / sin(dec0); + break; + case 5: /* -GLS global sinusoid */ + dt = ra - ra0; + if (fabs(dec)>twopi/4.0) return 1; + if (fabs(dec0)>twopi/4.0) return 1; + m = dec - dec0; + l = dt * coss; + break; + case 6: /* -MER mercator*/ + dt = yinc * cosr + xinc * sinr; + if (dt==0.0) dt = 1.0; + dy = (yref/2.0 + 45.0) * cond2r; + dx = dy + dt / 2.0 * cond2r; + dy = log (tan (dy)); + dx = log (tan (dx)); + geo2 = dt * cond2r / (dx - dy); + geo3 = geo2 * dy; + geo1 = cos (yref*cond2r); + if (geo1<=0.0) geo1 = 1.0; + dt = ra - ra0; + l = geo1 * dt; + dt = dec / 2.0 + twopi / 8.0; + dt = tan (dt); + if (dttwopi/4.0) return 1; + dt = yinc*cosr + xinc*sinr; + if (dt==0.0) dt = 1.0; + dt = dt * cond2r; + dy = yref * cond2r; + dx = sin(dy+dt)/sqrt((1.0+cos(dy+dt))/2.0) - + sin(dy)/sqrt((1.0+cos(dy))/2.0); + if (dx==0.0) dx = 1.0; + geo2 = dt / dx; + dt = xinc*cosr - yinc* sinr; + if (dt==0.0) dt = 1.0; + dt = dt * cond2r; + dx = 2.0 * cos(dy) * sin(dt/2.0); + if (dx==0.0) dx = 1.0; + geo1 = dt * sqrt((1.0+cos(dy)*cos(dt/2.0))/2.0) / dx; + geo3 = geo2 * sin(dy) / sqrt((1.0+cos(dy))/2.0); + dt = sqrt ((1.0 + cos(dec) * cos(da))/2.0); + if (fabs(dt)twopi/4.0) return 1; + dd = 1.0 + sins * sin(dec0) + coss * cos(dec0) * cos(da); + if (fabs(dd)mem == NULL) + return; + + /* Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { + (*cinfo->mem->free_pool) (cinfo, pool); + } + + /* Reset overall state for possible reuse of object */ + if (cinfo->is_decompressor) { + cinfo->global_state = DSTATE_START; + /* Try to keep application from accessing now-deleted marker list. + * A bit kludgy to do it here, but this is the most central place. + */ + ((j_decompress_ptr) cinfo)->marker_list = NULL; + } else { + cinfo->global_state = CSTATE_START; + } +} + + +/* + * Destruction of a JPEG object. + * + * Everything gets deallocated except the master jpeg_compress_struct itself + * and the error manager struct. Both of these are supplied by the application + * and must be freed, if necessary, by the application. (Often they are on + * the stack and so don't need to be freed anyway.) + * Closing a data source or destination, if necessary, is the application's + * responsibility. + */ + +GLOBAL(void) +jpeg_destroy (j_common_ptr cinfo) +{ + /* We need only tell the memory manager to release everything. */ + /* NB: mem pointer is NULL if memory mgr failed to initialize. */ + if (cinfo->mem != NULL) + (*cinfo->mem->self_destruct) (cinfo); + cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ + cinfo->global_state = 0; /* mark it destroyed */ +} + + +/* + * Convenience routines for allocating quantization and Huffman tables. + * (Would jutils.c be a more reasonable place to put these?) + */ + +GLOBAL(JQUANT_TBL *) +jpeg_alloc_quant_table (j_common_ptr cinfo) +{ + JQUANT_TBL *tbl; + + tbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + return tbl; +} + + +GLOBAL(JHUFF_TBL *) +jpeg_alloc_huff_table (j_common_ptr cinfo) +{ + JHUFF_TBL *tbl; + + tbl = (JHUFF_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + return tbl; +} diff --git a/libjpegd/jconfig.h b/libjpegd/jconfig.h new file mode 100644 index 0000000..9594ec5 --- /dev/null +++ b/libjpegd/jconfig.h @@ -0,0 +1,45 @@ +/* jconfig.h. Generated automatically by configure. */ +/* jconfig.cfg --- source file edited by configure script */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#define INLINE __inline__ +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/libjpegd/jdapimin.c b/libjpegd/jdapimin.c new file mode 100644 index 0000000..cadb59f --- /dev/null +++ b/libjpegd/jdapimin.c @@ -0,0 +1,395 @@ +/* + * jdapimin.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the decompression half + * of the JPEG library. These are the "minimum" API routines that may be + * needed in either the normal full-decompression case or the + * transcoding-only case. + * + * Most of the routines intended to be called directly by an application + * are in this file or in jdapistd.c. But also see jcomapi.c for routines + * shared by compression and decompression, and jdtrans.c for the transcoding + * case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Initialization of a JPEG decompression object. + * The error manager must already be set up (in case memory manager fails). + */ + +GLOBAL(void) +jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) +{ + int i; + + /* Guard against version mismatches between library and caller. */ + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + if (version != JPEG_LIB_VERSION) + ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); + if (structsize != SIZEOF(struct jpeg_decompress_struct)) + ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, + (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize); + + /* For debugging purposes, we zero the whole master structure. + * But the application has already set the err pointer, and may have set + * client_data, so we have to save and restore those fields. + * Note: if application hasn't set client_data, tools like Purify may + * complain here. + */ + { + struct jpeg_error_mgr * err = cinfo->err; + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); + cinfo->err = err; + cinfo->client_data = client_data; + } + cinfo->is_decompressor = TRUE; + + /* Initialize a memory manager instance for this object */ + jinit_memory_mgr((j_common_ptr) cinfo); + + /* Zero out pointers to permanent structures. */ + cinfo->progress = NULL; + cinfo->src = NULL; + + for (i = 0; i < NUM_QUANT_TBLS; i++) + cinfo->quant_tbl_ptrs[i] = NULL; + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + cinfo->dc_huff_tbl_ptrs[i] = NULL; + cinfo->ac_huff_tbl_ptrs[i] = NULL; + } + + /* Initialize marker processor so application can override methods + * for COM, APPn markers before calling jpeg_read_header. + */ + cinfo->marker_list = NULL; + jinit_marker_reader(cinfo); + + /* And initialize the overall input controller. */ + jinit_input_controller(cinfo); + + /* OK, I'm ready */ + cinfo->global_state = DSTATE_START; +} + + +/* + * Destruction of a JPEG decompression object + */ + +GLOBAL(void) +jpeg_destroy_decompress (j_decompress_ptr cinfo) +{ + jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Abort processing of a JPEG decompression operation, + * but don't destroy the object itself. + */ + +GLOBAL(void) +jpeg_abort_decompress (j_decompress_ptr cinfo) +{ + jpeg_abort((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Set default decompression parameters. + */ + +LOCAL(void) +default_decompress_parms (j_decompress_ptr cinfo) +{ + /* Guess the input colorspace, and set output colorspace accordingly. */ + /* (Wish JPEG committee had provided a real way to specify this...) */ + /* Note application may override our guesses. */ + switch (cinfo->num_components) { + case 1: + cinfo->jpeg_color_space = JCS_GRAYSCALE; + cinfo->out_color_space = JCS_GRAYSCALE; + break; + + case 3: + if (cinfo->saw_JFIF_marker) { + cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ + } else if (cinfo->saw_Adobe_marker) { + switch (cinfo->Adobe_transform) { + case 0: + cinfo->jpeg_color_space = JCS_RGB; + break; + case 1: + cinfo->jpeg_color_space = JCS_YCbCr; + break; + default: + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + break; + } + } else { + /* Saw no special markers, try to guess from the component IDs */ + int cid0 = cinfo->comp_info[0].component_id; + int cid1 = cinfo->comp_info[1].component_id; + int cid2 = cinfo->comp_info[2].component_id; + + if (cid0 == 1 && cid1 == 2 && cid2 == 3) + cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ + else if (cid0 == 82 && cid1 == 71 && cid2 == 66) + cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ + else { + TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + } + } + /* Always guess RGB is proper output colorspace. */ + cinfo->out_color_space = JCS_RGB; + break; + + case 4: + if (cinfo->saw_Adobe_marker) { + switch (cinfo->Adobe_transform) { + case 0: + cinfo->jpeg_color_space = JCS_CMYK; + break; + case 2: + cinfo->jpeg_color_space = JCS_YCCK; + break; + default: + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ + break; + } + } else { + /* No special markers, assume straight CMYK. */ + cinfo->jpeg_color_space = JCS_CMYK; + } + cinfo->out_color_space = JCS_CMYK; + break; + + default: + cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->out_color_space = JCS_UNKNOWN; + break; + } + + /* Set defaults for other decompression parameters. */ + cinfo->scale_num = 1; /* 1:1 scaling */ + cinfo->scale_denom = 1; + cinfo->output_gamma = 1.0; + cinfo->buffered_image = FALSE; + cinfo->raw_data_out = FALSE; + cinfo->dct_method = JDCT_DEFAULT; + cinfo->do_fancy_upsampling = TRUE; + cinfo->do_block_smoothing = TRUE; + cinfo->quantize_colors = FALSE; + /* We set these in case application only sets quantize_colors. */ + cinfo->dither_mode = JDITHER_FS; +#ifdef QUANT_2PASS_SUPPORTED + cinfo->two_pass_quantize = TRUE; +#else + cinfo->two_pass_quantize = FALSE; +#endif + cinfo->desired_number_of_colors = 256; + cinfo->colormap = NULL; + /* Initialize for no mode change in buffered-image mode. */ + cinfo->enable_1pass_quant = FALSE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; +} + + +/* + * Decompression startup: read start of JPEG datastream to see what's there. + * Need only initialize JPEG object and supply a data source before calling. + * + * This routine will read as far as the first SOS marker (ie, actual start of + * compressed data), and will save all tables and parameters in the JPEG + * object. It will also initialize the decompression parameters to default + * values, and finally return JPEG_HEADER_OK. On return, the application may + * adjust the decompression parameters and then call jpeg_start_decompress. + * (Or, if the application only wanted to determine the image parameters, + * the data need not be decompressed. In that case, call jpeg_abort or + * jpeg_destroy to release any temporary space.) + * If an abbreviated (tables only) datastream is presented, the routine will + * return JPEG_HEADER_TABLES_ONLY upon reaching EOI. The application may then + * re-use the JPEG object to read the abbreviated image datastream(s). + * It is unnecessary (but OK) to call jpeg_abort in this case. + * The JPEG_SUSPENDED return code only occurs if the data source module + * requests suspension of the decompressor. In this case the application + * should load more source data and then re-call jpeg_read_header to resume + * processing. + * If a non-suspending data source is used and require_image is TRUE, then the + * return code need not be inspected since only JPEG_HEADER_OK is possible. + * + * This routine is now just a front end to jpeg_consume_input, with some + * extra error checking. + */ + +GLOBAL(int) +jpeg_read_header (j_decompress_ptr cinfo, boolean require_image) +{ + int retcode; + + if (cinfo->global_state != DSTATE_START && + cinfo->global_state != DSTATE_INHEADER) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + retcode = jpeg_consume_input(cinfo); + + switch (retcode) { + case JPEG_REACHED_SOS: + retcode = JPEG_HEADER_OK; + break; + case JPEG_REACHED_EOI: + if (require_image) /* Complain if application wanted an image */ + ERREXIT(cinfo, JERR_NO_IMAGE); + /* Reset to start state; it would be safer to require the application to + * call jpeg_abort, but we can't change it now for compatibility reasons. + * A side effect is to free any temporary memory (there shouldn't be any). + */ + jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ + retcode = JPEG_HEADER_TABLES_ONLY; + break; + case JPEG_SUSPENDED: + /* no work */ + break; + } + + return retcode; +} + + +/* + * Consume data in advance of what the decompressor requires. + * This can be called at any time once the decompressor object has + * been created and a data source has been set up. + * + * This routine is essentially a state machine that handles a couple + * of critical state-transition actions, namely initial setup and + * transition from header scanning to ready-for-start_decompress. + * All the actual input is done via the input controller's consume_input + * method. + */ + +GLOBAL(int) +jpeg_consume_input (j_decompress_ptr cinfo) +{ + int retcode = JPEG_SUSPENDED; + + /* NB: every possible DSTATE value should be listed in this switch */ + switch (cinfo->global_state) { + case DSTATE_START: + /* Start-of-datastream actions: reset appropriate modules */ + (*cinfo->inputctl->reset_input_controller) (cinfo); + /* Initialize application's data source module */ + (*cinfo->src->init_source) (cinfo); + cinfo->global_state = DSTATE_INHEADER; + /*FALLTHROUGH*/ + case DSTATE_INHEADER: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ + /* Set up default parameters based on header data */ + default_decompress_parms(cinfo); + /* Set global state: ready for start_decompress */ + cinfo->global_state = DSTATE_READY; + } + break; + case DSTATE_READY: + /* Can't advance past first SOS until start_decompress is called */ + retcode = JPEG_REACHED_SOS; + break; + case DSTATE_PRELOAD: + case DSTATE_PRESCAN: + case DSTATE_SCANNING: + case DSTATE_RAW_OK: + case DSTATE_BUFIMAGE: + case DSTATE_BUFPOST: + case DSTATE_STOPPING: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + break; + default: + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + return retcode; +} + + +/* + * Have we finished reading the input file? + */ + +GLOBAL(boolean) +jpeg_input_complete (j_decompress_ptr cinfo) +{ + /* Check for valid jpeg object */ + if (cinfo->global_state < DSTATE_START || + cinfo->global_state > DSTATE_STOPPING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return cinfo->inputctl->eoi_reached; +} + + +/* + * Is there more than one scan? + */ + +GLOBAL(boolean) +jpeg_has_multiple_scans (j_decompress_ptr cinfo) +{ + /* Only valid after jpeg_read_header completes */ + if (cinfo->global_state < DSTATE_READY || + cinfo->global_state > DSTATE_STOPPING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return cinfo->inputctl->has_multiple_scans; +} + + +/* + * Finish JPEG decompression. + * + * This will normally just verify the file trailer and release temp storage. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_finish_decompress (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { + /* Terminate final pass of non-buffered mode */ + if (cinfo->output_scanline < cinfo->output_height) + ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); + (*cinfo->master->finish_output_pass) (cinfo); + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state == DSTATE_BUFIMAGE) { + /* Finishing after a buffered-image operation */ + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state != DSTATE_STOPPING) { + /* STOPPING = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read until EOI */ + while (! cinfo->inputctl->eoi_reached) { + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + /* Do final cleanup */ + (*cinfo->src->term_source) (cinfo); + /* We can use jpeg_abort to release memory and reset global_state */ + jpeg_abort((j_common_ptr) cinfo); + return TRUE; +} diff --git a/libjpegd/jdapistd.c b/libjpegd/jdapistd.c new file mode 100644 index 0000000..c8e3fa0 --- /dev/null +++ b/libjpegd/jdapistd.c @@ -0,0 +1,275 @@ +/* + * jdapistd.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the decompression half + * of the JPEG library. These are the "standard" API routines that are + * used in the normal full-decompression case. They are not used by a + * transcoding-only application. Note that if an application links in + * jpeg_start_decompress, it will end up linking in the entire decompressor. + * We thus must separate this file from jdapimin.c to avoid linking the + * whole decompression library into a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo)); + + +/* + * Decompression initialization. + * jpeg_read_header must be completed before calling this. + * + * If a multipass operating mode was selected, this will do all but the + * last pass, and thus may take a great deal of time. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_start_decompress (j_decompress_ptr cinfo) +{ + if (cinfo->global_state == DSTATE_READY) { + /* First call: initialize master control, select active modules */ + jinit_master_decompress(cinfo); + if (cinfo->buffered_image) { + /* No more work here; expecting jpeg_start_output next */ + cinfo->global_state = DSTATE_BUFIMAGE; + return TRUE; + } + cinfo->global_state = DSTATE_PRELOAD; + } + if (cinfo->global_state == DSTATE_PRELOAD) { + /* If file has multiple scans, absorb them all into the coef buffer */ + if (cinfo->inputctl->has_multiple_scans) { +#ifdef D_MULTISCAN_FILES_SUPPORTED + for (;;) { + int retcode; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + /* Absorb some more input */ + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_SUSPENDED) + return FALSE; + if (retcode == JPEG_REACHED_EOI) + break; + /* Advance progress counter if appropriate */ + if (cinfo->progress != NULL && + (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { + if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { + /* jdmaster underestimated number of scans; ratchet up one scan */ + cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; + } + } + } +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + } + cinfo->output_scan_number = cinfo->input_scan_number; + } else if (cinfo->global_state != DSTATE_PRESCAN) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Perform any dummy output passes, and set up for the final pass */ + return output_pass_setup(cinfo); +} + + +/* + * Set up for an output pass, and perform any dummy pass(es) needed. + * Common subroutine for jpeg_start_decompress and jpeg_start_output. + * Entry: global_state = DSTATE_PRESCAN only if previously suspended. + * Exit: If done, returns TRUE and sets global_state for proper output mode. + * If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN. + */ + +LOCAL(boolean) +output_pass_setup (j_decompress_ptr cinfo) +{ + if (cinfo->global_state != DSTATE_PRESCAN) { + /* First call: do pass setup */ + (*cinfo->master->prepare_for_output_pass) (cinfo); + cinfo->output_scanline = 0; + cinfo->global_state = DSTATE_PRESCAN; + } + /* Loop over any required dummy passes */ + while (cinfo->master->is_dummy_pass) { +#ifdef QUANT_2PASS_SUPPORTED + /* Crank through the dummy pass */ + while (cinfo->output_scanline < cinfo->output_height) { + JDIMENSION last_scanline; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + /* Process some data */ + last_scanline = cinfo->output_scanline; + (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, + &cinfo->output_scanline, (JDIMENSION) 0); + if (cinfo->output_scanline == last_scanline) + return FALSE; /* No progress made, must suspend */ + } + /* Finish up dummy pass, and set up for another one */ + (*cinfo->master->finish_output_pass) (cinfo); + (*cinfo->master->prepare_for_output_pass) (cinfo); + cinfo->output_scanline = 0; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* QUANT_2PASS_SUPPORTED */ + } + /* Ready for application to drive output pass through + * jpeg_read_scanlines or jpeg_read_raw_data. + */ + cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; + return TRUE; +} + + +/* + * Read some scanlines of data from the JPEG decompressor. + * + * The return value will be the number of lines actually read. + * This may be less than the number requested in several cases, + * including bottom of image, data source suspension, and operating + * modes that emit multiple scanlines at a time. + * + * Note: we warn about excess calls to jpeg_read_scanlines() since + * this likely signals an application programmer error. However, + * an oversize buffer (max_lines > scanlines remaining) is not an error. + */ + +GLOBAL(JDIMENSION) +jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, + JDIMENSION max_lines) +{ + JDIMENSION row_ctr; + + if (cinfo->global_state != DSTATE_SCANNING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->output_scanline >= cinfo->output_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Process some data */ + row_ctr = 0; + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); + cinfo->output_scanline += row_ctr; + return row_ctr; +} + + +/* + * Alternate entry point to read raw data. + * Processes exactly one iMCU row per call, unless suspended. + */ + +GLOBAL(JDIMENSION) +jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, + JDIMENSION max_lines) +{ + JDIMENSION lines_per_iMCU_row; + + if (cinfo->global_state != DSTATE_RAW_OK) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->output_scanline >= cinfo->output_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Verify that at least one iMCU row can be returned. */ + lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size; + if (max_lines < lines_per_iMCU_row) + ERREXIT(cinfo, JERR_BUFFER_SIZE); + + /* Decompress directly into user's buffer. */ + if (! (*cinfo->coef->decompress_data) (cinfo, data)) + return 0; /* suspension forced, can do nothing more */ + + /* OK, we processed one iMCU row. */ + cinfo->output_scanline += lines_per_iMCU_row; + return lines_per_iMCU_row; +} + + +/* Additional entry points for buffered-image mode. */ + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Initialize for an output pass in buffered-image mode. + */ + +GLOBAL(boolean) +jpeg_start_output (j_decompress_ptr cinfo, int scan_number) +{ + if (cinfo->global_state != DSTATE_BUFIMAGE && + cinfo->global_state != DSTATE_PRESCAN) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Limit scan number to valid range */ + if (scan_number <= 0) + scan_number = 1; + if (cinfo->inputctl->eoi_reached && + scan_number > cinfo->input_scan_number) + scan_number = cinfo->input_scan_number; + cinfo->output_scan_number = scan_number; + /* Perform any dummy output passes, and set up for the real pass */ + return output_pass_setup(cinfo); +} + + +/* + * Finish up after an output pass in buffered-image mode. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_finish_output (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) { + /* Terminate this pass. */ + /* We do not require the whole pass to have been completed. */ + (*cinfo->master->finish_output_pass) (cinfo); + cinfo->global_state = DSTATE_BUFPOST; + } else if (cinfo->global_state != DSTATE_BUFPOST) { + /* BUFPOST = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read markers looking for SOS or EOI */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + ! cinfo->inputctl->eoi_reached) { + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + cinfo->global_state = DSTATE_BUFIMAGE; + return TRUE; +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ diff --git a/libjpegd/jdatasrc.c b/libjpegd/jdatasrc.c new file mode 100644 index 0000000..edc752b --- /dev/null +++ b/libjpegd/jdatasrc.c @@ -0,0 +1,212 @@ +/* + * jdatasrc.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains decompression data source routines for the case of + * reading JPEG data from a file (or any stdio stream). While these routines + * are sufficient for most applications, some will want to use a different + * source manager. + * IMPORTANT: we assume that fread() will correctly transcribe an array of + * JOCTETs from 8-bit-wide elements on external storage. If char is wider + * than 8 bits on your machine, you may need to do some tweaking. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" + + +/* Expanded data source object for stdio input */ + +typedef struct { + struct jpeg_source_mgr pub; /* public fields */ + + FILE * infile; /* source stream */ + JOCTET * buffer; /* start of buffer */ + boolean start_of_file; /* have we gotten any data yet? */ +} my_source_mgr; + +typedef my_source_mgr * my_src_ptr; + +#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */ + + +/* + * Initialize source --- called by jpeg_read_header + * before any data is actually read. + */ + +METHODDEF(void) +init_source (j_decompress_ptr cinfo) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + + /* We reset the empty-input-file flag for each image, + * but we don't clear the input buffer. + * This is correct behavior for reading a series of images from one source. + */ + src->start_of_file = TRUE; +} + + +/* + * Fill the input buffer --- called whenever buffer is emptied. + * + * In typical applications, this should read fresh data into the buffer + * (ignoring the current state of next_input_byte & bytes_in_buffer), + * reset the pointer & count to the start of the buffer, and return TRUE + * indicating that the buffer has been reloaded. It is not necessary to + * fill the buffer entirely, only to obtain at least one more byte. + * + * There is no such thing as an EOF return. If the end of the file has been + * reached, the routine has a choice of ERREXIT() or inserting fake data into + * the buffer. In most cases, generating a warning message and inserting a + * fake EOI marker is the best course of action --- this will allow the + * decompressor to output however much of the image is there. However, + * the resulting error message is misleading if the real problem is an empty + * input file, so we handle that case specially. + * + * In applications that need to be able to suspend compression due to input + * not being available yet, a FALSE return indicates that no more data can be + * obtained right now, but more may be forthcoming later. In this situation, + * the decompressor will return to its caller (with an indication of the + * number of scanlines it has read, if any). The application should resume + * decompression after it has loaded more data into the input buffer. Note + * that there are substantial restrictions on the use of suspension --- see + * the documentation. + * + * When suspending, the decompressor will back up to a convenient restart point + * (typically the start of the current MCU). next_input_byte & bytes_in_buffer + * indicate where the restart point will be if the current call returns FALSE. + * Data beyond this point must be rescanned after resumption, so move it to + * the front of the buffer rather than discarding it. + */ + +METHODDEF(boolean) +fill_input_buffer (j_decompress_ptr cinfo) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + size_t nbytes; + + nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); + + if (nbytes <= 0) { + if (src->start_of_file) /* Treat empty input file as fatal error */ + ERREXIT(cinfo, JERR_INPUT_EMPTY); + WARNMS(cinfo, JWRN_JPEG_EOF); + /* Insert a fake EOI marker */ + src->buffer[0] = (JOCTET) 0xFF; + src->buffer[1] = (JOCTET) JPEG_EOI; + nbytes = 2; + } + + src->pub.next_input_byte = src->buffer; + src->pub.bytes_in_buffer = nbytes; + src->start_of_file = FALSE; + + return TRUE; +} + + +/* + * Skip data --- used to skip over a potentially large amount of + * uninteresting data (such as an APPn marker). + * + * Writers of suspendable-input applications must note that skip_input_data + * is not granted the right to give a suspension return. If the skip extends + * beyond the data currently in the buffer, the buffer can be marked empty so + * that the next read will cause a fill_input_buffer call that can suspend. + * Arranging for additional bytes to be discarded before reloading the input + * buffer is the application writer's problem. + */ + +METHODDEF(void) +skip_input_data (j_decompress_ptr cinfo, long num_bytes) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + + /* Just a dumb implementation for now. Could use fseek() except + * it doesn't work on pipes. Not clear that being smart is worth + * any trouble anyway --- large skips are infrequent. + */ + if (num_bytes > 0) { + while (num_bytes > (long) src->pub.bytes_in_buffer) { + num_bytes -= (long) src->pub.bytes_in_buffer; + (void) fill_input_buffer(cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ + } + src->pub.next_input_byte += (size_t) num_bytes; + src->pub.bytes_in_buffer -= (size_t) num_bytes; + } +} + + +/* + * An additional method that can be provided by data source modules is the + * resync_to_restart method for error recovery in the presence of RST markers. + * For the moment, this source module just uses the default resync method + * provided by the JPEG library. That method assumes that no backtracking + * is possible. + */ + + +/* + * Terminate source --- called by jpeg_finish_decompress + * after all data has been read. Often a no-op. + * + * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding + * application must deal with any cleanup that should happen even + * for error exit. + */ + +METHODDEF(void) +term_source (j_decompress_ptr cinfo) +{ + /* no work necessary here */ +} + + +/* + * Prepare for input from a stdio stream. + * The caller must have already opened the stream, and is responsible + * for closing it after finishing decompression. + */ + +GLOBAL(void) +jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile) +{ + my_src_ptr src; + + /* The source object and input buffer are made permanent so that a series + * of JPEG images can be read from the same file by calling jpeg_stdio_src + * only before the first one. (If we discarded the buffer at the end of + * one image, we'd likely lose the start of the next one.) + * This makes it unsafe to use this manager and a different source + * manager serially with the same JPEG object. Caveat programmer. + */ + if (cinfo->src == NULL) { /* first time for this JPEG object? */ + cinfo->src = (struct jpeg_source_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_source_mgr)); + src = (my_src_ptr) cinfo->src; + src->buffer = (JOCTET *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + INPUT_BUF_SIZE * SIZEOF(JOCTET)); + } + + src = (my_src_ptr) cinfo->src; + src->pub.init_source = init_source; + src->pub.fill_input_buffer = fill_input_buffer; + src->pub.skip_input_data = skip_input_data; + src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ + src->pub.term_source = term_source; + src->infile = infile; + src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ + src->pub.next_input_byte = NULL; /* until buffer loaded */ +} diff --git a/libjpegd/jdcoefct.c b/libjpegd/jdcoefct.c new file mode 100644 index 0000000..4938d20 --- /dev/null +++ b/libjpegd/jdcoefct.c @@ -0,0 +1,736 @@ +/* + * jdcoefct.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the coefficient buffer controller for decompression. + * This controller is the top level of the JPEG decompressor proper. + * The coefficient buffer lies between entropy decoding and inverse-DCT steps. + * + * In buffered-image mode, this controller is the interface between + * input-oriented processing and output-oriented processing. + * Also, the input side (only) is used when reading a file for transcoding. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +/* Block smoothing is only applicable for progressive JPEG, so: */ +#ifndef D_PROGRESSIVE_SUPPORTED +#undef BLOCK_SMOOTHING_SUPPORTED +#endif + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_coef_controller pub; /* public fields */ + + /* These variables keep track of the current location of the input side. */ + /* cinfo->input_iMCU_row is also used for this. */ + JDIMENSION MCU_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* The output side's location is represented by cinfo->output_iMCU_row. */ + + /* In single-pass modes, it's sufficient to buffer just one MCU. + * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks, + * and let the entropy decoder write into that workspace each time. + * (On 80x86, the workspace is FAR even though it's not really very big; + * this is to keep the module interfaces unchanged when a large coefficient + * buffer is necessary.) + * In multi-pass modes, this array points to the current MCU's blocks + * within the virtual arrays; it is used only by the input side. + */ + JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU]; + +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* In multi-pass modes, we need a virtual block array for each component. */ + jvirt_barray_ptr whole_image[MAX_COMPONENTS]; +#endif + +#ifdef BLOCK_SMOOTHING_SUPPORTED + /* When doing block smoothing, we latch coefficient Al values here */ + int * coef_bits_latch; +#define SAVED_COEFS 6 /* we save coef_bits[0..5] */ +#endif +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + +/* Forward declarations */ +METHODDEF(int) decompress_onepass + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#ifdef D_MULTISCAN_FILES_SUPPORTED +METHODDEF(int) decompress_data + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#endif +#ifdef BLOCK_SMOOTHING_SUPPORTED +LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo)); +METHODDEF(int) decompress_smooth_data + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#endif + + +LOCAL(void) +start_iMCU_row (j_decompress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row (input side) */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->MCU_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for an input processing pass. + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + cinfo->input_iMCU_row = 0; + start_iMCU_row(cinfo); +} + + +/* + * Initialize for an output processing pass. + */ + +METHODDEF(void) +start_output_pass (j_decompress_ptr cinfo) +{ +#ifdef BLOCK_SMOOTHING_SUPPORTED + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* If multipass, check to see whether to use block smoothing on this pass */ + if (coef->pub.coef_arrays != NULL) { + if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) + coef->pub.decompress_data = decompress_smooth_data; + else + coef->pub.decompress_data = decompress_data; + } +#endif + cinfo->output_iMCU_row = 0; +} + + +/* + * Decompress and return some data in the single-pass case. + * Always attempts to emit one fully interleaved MCU row ("iMCU" row). + * Input and output must run in lockstep since we have only a one-MCU buffer. + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + * + * NB: output_buf contains a plane for each component in image, + * which we index according to the component's SOF position. + */ + +METHODDEF(int) +decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, ci, xindex, yindex, yoffset, useful_width; + JSAMPARRAY output_ptr; + JDIMENSION start_col, output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Loop to process as much as one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; + MCU_col_num++) { + /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */ + jzero_far((void FAR *) coef->MCU_buffer[0], + (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->MCU_ctr = MCU_col_num; + return JPEG_SUSPENDED; + } + /* Determine where data should go in output_buf and do the IDCT thing. + * We skip dummy blocks at the right and bottom edges (but blkn gets + * incremented past them!). Note the inner loop relies on having + * allocated the MCU_buffer[] blocks sequentially. + */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) { + blkn += compptr->MCU_blocks; + continue; + } + inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; + useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + output_ptr = output_buf[compptr->component_index] + + yoffset * compptr->DCT_scaled_size; + start_col = MCU_col_num * compptr->MCU_sample_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (cinfo->input_iMCU_row < last_iMCU_row || + yoffset+yindex < compptr->last_row_height) { + output_col = start_col; + for (xindex = 0; xindex < useful_width; xindex++) { + (*inverse_DCT) (cinfo, compptr, + (JCOEFPTR) coef->MCU_buffer[blkn+xindex], + output_ptr, output_col); + output_col += compptr->DCT_scaled_size; + } + } + blkn += compptr->MCU_width; + output_ptr += compptr->DCT_scaled_size; + } + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + cinfo->output_iMCU_row++; + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + start_iMCU_row(cinfo); + return JPEG_ROW_COMPLETED; + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + + +/* + * Dummy consume-input routine for single-pass operation. + */ + +METHODDEF(int) +dummy_consume_data (j_decompress_ptr cinfo) +{ + return JPEG_SUSPENDED; /* Always indicate nothing was done */ +} + + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Consume input data and store it in the full-image coefficient buffer. + * We read as much as one fully interleaved MCU row ("iMCU" row) per call, + * ie, v_samp_factor block rows for each component in the scan. + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + */ + +METHODDEF(int) +consume_data (j_decompress_ptr cinfo) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + int blkn, ci, xindex, yindex, yoffset; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + cinfo->input_iMCU_row * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, TRUE); + /* Note: entropy decoder expects buffer to be zeroed, + * but this is handled automatically by the memory manager + * because we requested a pre-zeroed array. + */ + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + coef->MCU_buffer[blkn++] = buffer_ptr++; + } + } + } + /* Try to fetch the MCU. */ + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->MCU_ctr = MCU_col_num; + return JPEG_SUSPENDED; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + start_iMCU_row(cinfo); + return JPEG_ROW_COMPLETED; + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + + +/* + * Decompress and return some data in the multi-pass case. + * Always attempts to emit one fully interleaved MCU row ("iMCU" row). + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + * + * NB: output_buf contains a plane for each component in image. + */ + +METHODDEF(int) +decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION block_num; + int ci, block_row, block_rows; + JBLOCKARRAY buffer; + JBLOCKROW buffer_ptr; + JSAMPARRAY output_ptr; + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number < cinfo->output_scan_number || + (cinfo->input_scan_number == cinfo->output_scan_number && + cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) { + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Align the virtual buffer for this component. */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + cinfo->output_iMCU_row * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) + block_rows = compptr->v_samp_factor; + else { + /* NB: can't use last_row_height here; it is input-side-dependent! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + } + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + output_ptr = output_buf[ci]; + /* Loop over all DCT blocks to be processed. */ + for (block_row = 0; block_row < block_rows; block_row++) { + buffer_ptr = buffer[block_row]; + output_col = 0; + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr, + output_ptr, output_col); + buffer_ptr++; + output_col += compptr->DCT_scaled_size; + } + output_ptr += compptr->DCT_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + return JPEG_ROW_COMPLETED; + return JPEG_SCAN_COMPLETED; +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + + +#ifdef BLOCK_SMOOTHING_SUPPORTED + +/* + * This code applies interblock smoothing as described by section K.8 + * of the JPEG standard: the first 5 AC coefficients are estimated from + * the DC values of a DCT block and its 8 neighboring blocks. + * We apply smoothing only for progressive JPEG decoding, and only if + * the coefficients it can estimate are not yet known to full precision. + */ + +/* Natural-order array positions of the first 5 zigzag-order coefficients */ +#define Q01_POS 1 +#define Q10_POS 8 +#define Q20_POS 16 +#define Q11_POS 9 +#define Q02_POS 2 + +/* + * Determine whether block smoothing is applicable and safe. + * We also latch the current states of the coef_bits[] entries for the + * AC coefficients; otherwise, if the input side of the decompressor + * advances into a new scan, we might think the coefficients are known + * more accurately than they really are. + */ + +LOCAL(boolean) +smoothing_ok (j_decompress_ptr cinfo) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + boolean smoothing_useful = FALSE; + int ci, coefi; + jpeg_component_info *compptr; + JQUANT_TBL * qtable; + int * coef_bits; + int * coef_bits_latch; + + if (! cinfo->progressive_mode || cinfo->coef_bits == NULL) + return FALSE; + + /* Allocate latch area if not already done */ + if (coef->coef_bits_latch == NULL) + coef->coef_bits_latch = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * + (SAVED_COEFS * SIZEOF(int))); + coef_bits_latch = coef->coef_bits_latch; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* All components' quantization values must already be latched. */ + if ((qtable = compptr->quant_table) == NULL) + return FALSE; + /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */ + if (qtable->quantval[0] == 0 || + qtable->quantval[Q01_POS] == 0 || + qtable->quantval[Q10_POS] == 0 || + qtable->quantval[Q20_POS] == 0 || + qtable->quantval[Q11_POS] == 0 || + qtable->quantval[Q02_POS] == 0) + return FALSE; + /* DC values must be at least partly known for all components. */ + coef_bits = cinfo->coef_bits[ci]; + if (coef_bits[0] < 0) + return FALSE; + /* Block smoothing is helpful if some AC coefficients remain inaccurate. */ + for (coefi = 1; coefi <= 5; coefi++) { + coef_bits_latch[coefi] = coef_bits[coefi]; + if (coef_bits[coefi] != 0) + smoothing_useful = TRUE; + } + coef_bits_latch += SAVED_COEFS; + } + + return smoothing_useful; +} + + +/* + * Variant of decompress_data for use when doing block smoothing. + */ + +METHODDEF(int) +decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION block_num, last_block_column; + int ci, block_row, block_rows, access_rows; + JBLOCKARRAY buffer; + JBLOCKROW buffer_ptr, prev_block_row, next_block_row; + JSAMPARRAY output_ptr; + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + boolean first_row, last_row; + JBLOCK workspace; + int *coef_bits; + JQUANT_TBL *quanttbl; + INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; + int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; + int Al, pred; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + ! cinfo->inputctl->eoi_reached) { + if (cinfo->input_scan_number == cinfo->output_scan_number) { + /* If input is working on current scan, we ordinarily want it to + * have completed the current row. But if input scan is DC, + * we want it to keep one row ahead so that next block row's DC + * values are up to date. + */ + JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0; + if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta) + break; + } + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) { + block_rows = compptr->v_samp_factor; + access_rows = block_rows * 2; /* this and next iMCU row */ + last_row = FALSE; + } else { + /* NB: can't use last_row_height here; it is input-side-dependent! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + access_rows = block_rows; /* this iMCU row only */ + last_row = TRUE; + } + /* Align the virtual buffer for this component. */ + if (cinfo->output_iMCU_row > 0) { + access_rows += compptr->v_samp_factor; /* prior iMCU row too */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor, + (JDIMENSION) access_rows, FALSE); + buffer += compptr->v_samp_factor; /* point to current iMCU row */ + first_row = FALSE; + } else { + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE); + first_row = TRUE; + } + /* Fetch component-dependent info */ + coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); + quanttbl = compptr->quant_table; + Q00 = quanttbl->quantval[0]; + Q01 = quanttbl->quantval[Q01_POS]; + Q10 = quanttbl->quantval[Q10_POS]; + Q20 = quanttbl->quantval[Q20_POS]; + Q11 = quanttbl->quantval[Q11_POS]; + Q02 = quanttbl->quantval[Q02_POS]; + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + output_ptr = output_buf[ci]; + /* Loop over all DCT blocks to be processed. */ + for (block_row = 0; block_row < block_rows; block_row++) { + buffer_ptr = buffer[block_row]; + if (first_row && block_row == 0) + prev_block_row = buffer_ptr; + else + prev_block_row = buffer[block_row-1]; + if (last_row && block_row == block_rows-1) + next_block_row = buffer_ptr; + else + next_block_row = buffer[block_row+1]; + /* We fetch the surrounding DC values using a sliding-register approach. + * Initialize all nine here so as to do the right thing on narrow pics. + */ + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; + DC7 = DC8 = DC9 = (int) next_block_row[0][0]; + output_col = 0; + last_block_column = compptr->width_in_blocks - 1; + for (block_num = 0; block_num <= last_block_column; block_num++) { + /* Fetch current DCT block into workspace so we can modify it. */ + jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); + /* Update DC values */ + if (block_num < last_block_column) { + DC3 = (int) prev_block_row[1][0]; + DC6 = (int) buffer_ptr[1][0]; + DC9 = (int) next_block_row[1][0]; + } + /* Compute coefficient estimates per K.8. + * An estimate is applied only if coefficient is still zero, + * and is not known to be fully accurate. + */ + /* AC01 */ + if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) { + num = 36 * Q00 * (DC4 - DC6); + if (num >= 0) { + pred = (int) (((Q01<<7) + num) / (Q01<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q10<<7) + num) / (Q10<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q20<<7) + num) / (Q20<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q11<<7) + num) / (Q11<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q02<<7) + num) / (Q02<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<DCT_scaled_size; + } + output_ptr += compptr->DCT_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + return JPEG_ROW_COMPLETED; + return JPEG_SCAN_COMPLETED; +} + +#endif /* BLOCK_SMOOTHING_SUPPORTED */ + + +/* + * Initialize coefficient buffer controller. + */ + +GLOBAL(void) +jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_coef_ptr coef; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_d_coef_controller *) coef; + coef->pub.start_input_pass = start_input_pass; + coef->pub.start_output_pass = start_output_pass; +#ifdef BLOCK_SMOOTHING_SUPPORTED + coef->coef_bits_latch = NULL; +#endif + + /* Create the coefficient buffer. */ + if (need_full_buffer) { +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* Allocate a full-image virtual array for each component, */ + /* padded to a multiple of samp_factor DCT blocks in each direction. */ + /* Note we ask for a pre-zeroed array. */ + int ci, access_rows; + jpeg_component_info *compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + access_rows = compptr->v_samp_factor; +#ifdef BLOCK_SMOOTHING_SUPPORTED + /* If block smoothing could be used, need a bigger window */ + if (cinfo->progressive_mode) + access_rows *= 3; +#endif + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE, + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) access_rows); + } + coef->pub.consume_data = consume_data; + coef->pub.decompress_data = decompress_data; + coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + /* We only need a single-MCU buffer. */ + JBLOCKROW buffer; + int i; + + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { + coef->MCU_buffer[i] = buffer + i; + } + coef->pub.consume_data = dummy_consume_data; + coef->pub.decompress_data = decompress_onepass; + coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ + } +} diff --git a/libjpegd/jdcolor.c b/libjpegd/jdcolor.c new file mode 100644 index 0000000..6c04dfe --- /dev/null +++ b/libjpegd/jdcolor.c @@ -0,0 +1,396 @@ +/* + * jdcolor.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains output colorspace conversion routines. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private subobject */ + +typedef struct { + struct jpeg_color_deconverter pub; /* public fields */ + + /* Private state for YCC->RGB conversion */ + int * Cr_r_tab; /* => table for Cr to R conversion */ + int * Cb_b_tab; /* => table for Cb to B conversion */ + INT32 * Cr_g_tab; /* => table for Cr to G conversion */ + INT32 * Cb_g_tab; /* => table for Cb to G conversion */ +} my_color_deconverter; + +typedef my_color_deconverter * my_cconvert_ptr; + + +/**************** YCbCr -> RGB conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * R = Y + 1.40200 * Cr + * G = Y - 0.34414 * Cb - 0.71414 * Cr + * B = Y + 1.77200 * Cb + * where Cb and Cr represent the incoming values less CENTERJSAMPLE. + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * Notice that Y, being an integral input, does not contribute any fraction + * so it need not participate in the rounding. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times Cb and Cr for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The Cr=>R and Cb=>B values can be rounded to integers in advance; the + * values for the G calculation are left scaled up, since we must add them + * together before rounding. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. + */ + +LOCAL(void) +build_ycc_rgb_table (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + int i; + INT32 x; + SHIFT_TEMPS + + cconvert->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + cconvert->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + cconvert->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.77200 * x */ + cconvert->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.71414 * x */ + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + } +} + + +/* + * Convert some rows of samples to the output colorspace. + * + * Note that we change from noninterleaved, one-plane-per-component format + * to interleaved-pixel format. The output buffer is therefore three times + * as wide as the input buffer. + * A starting row offset is provided only for the input buffer. The caller + * can easily adjust the passed output_buf value to accommodate any row + * offset required on that side. + */ + +METHODDEF(void) +ycc_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + SHIFT_TEMPS + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + y = GETJSAMPLE(inptr0[col]); + cb = GETJSAMPLE(inptr1[col]); + cr = GETJSAMPLE(inptr2[col]); + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + outptr[RGB_GREEN] = range_limit[y + + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + SCALEBITS))]; + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + outptr += RGB_PIXELSIZE; + } + } +} + + +/**************** Cases other than YCbCr -> RGB **************/ + + +/* + * Color conversion for no colorspace change: just copy the data, + * converting from separate-planes to interleaved representation. + */ + +METHODDEF(void) +null_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW inptr, outptr; + register JDIMENSION count; + register int num_components = cinfo->num_components; + JDIMENSION num_cols = cinfo->output_width; + int ci; + + while (--num_rows >= 0) { + for (ci = 0; ci < num_components; ci++) { + inptr = input_buf[ci][input_row]; + outptr = output_buf[0] + ci; + for (count = num_cols; count > 0; count--) { + *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ + outptr += num_components; + } + } + input_row++; + output_buf++; + } +} + + +/* + * Color conversion for grayscale: just copy the data. + * This also works for YCbCr -> grayscale conversion, in which + * we just copy the Y (luminance) component and ignore chrominance. + */ + +METHODDEF(void) +grayscale_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0, + num_rows, cinfo->output_width); +} + + +/* + * Convert grayscale to RGB: just duplicate the graylevel three times. + * This is provided to support applications that don't want to cope + * with grayscale as a separate case. + */ + +METHODDEF(void) +gray_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW inptr, outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr = input_buf[0][input_row++]; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + /* We can dispense with GETJSAMPLE() here */ + outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; + outptr += RGB_PIXELSIZE; + } + } +} + + +/* + * Adobe-style YCCK->CMYK conversion. + * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same + * conversion as above, while passing K (black) unchanged. + * We assume build_ycc_rgb_table has been called. + */ + +METHODDEF(void) +ycck_cmyk_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2, inptr3; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + SHIFT_TEMPS + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + inptr3 = input_buf[3][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + y = GETJSAMPLE(inptr0[col]); + cb = GETJSAMPLE(inptr1[col]); + cr = GETJSAMPLE(inptr2[col]); + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ + outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + SCALEBITS)))]; + outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */ + /* K passes through unchanged */ + outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ + outptr += 4; + } + } +} + + +/* + * Empty method for start_pass. + */ + +METHODDEF(void) +start_pass_dcolor (j_decompress_ptr cinfo) +{ + /* no work needed */ +} + + +/* + * Module initialization routine for output colorspace conversion. + */ + +GLOBAL(void) +jinit_color_deconverter (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert; + int ci; + + cconvert = (my_cconvert_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_color_deconverter)); + cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + cconvert->pub.start_pass = start_pass_dcolor; + + /* Make sure num_components agrees with jpeg_color_space */ + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + if (cinfo->num_components != 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + case JCS_RGB: + case JCS_YCbCr: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + case JCS_CMYK: + case JCS_YCCK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + default: /* JCS_UNKNOWN can be anything */ + if (cinfo->num_components < 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + } + + /* Set out_color_components and conversion method based on requested space. + * Also clear the component_needed flags for any unused components, + * so that earlier pipeline stages can avoid useless computation. + */ + + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + if (cinfo->jpeg_color_space == JCS_GRAYSCALE || + cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = grayscale_convert; + /* For color->grayscale conversion, only the Y (0) component is needed */ + for (ci = 1; ci < cinfo->num_components; ci++) + cinfo->comp_info[ci].component_needed = FALSE; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_RGB: + cinfo->out_color_components = RGB_PIXELSIZE; + if (cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = ycc_rgb_convert; + build_ycc_rgb_table(cinfo); + } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { + cconvert->pub.color_convert = gray_rgb_convert; + } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { + cconvert->pub.color_convert = null_convert; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_CMYK: + cinfo->out_color_components = 4; + if (cinfo->jpeg_color_space == JCS_YCCK) { + cconvert->pub.color_convert = ycck_cmyk_convert; + build_ycc_rgb_table(cinfo); + } else if (cinfo->jpeg_color_space == JCS_CMYK) { + cconvert->pub.color_convert = null_convert; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + default: + /* Permit null conversion to same output space */ + if (cinfo->out_color_space == cinfo->jpeg_color_space) { + cinfo->out_color_components = cinfo->num_components; + cconvert->pub.color_convert = null_convert; + } else /* unsupported non-null conversion */ + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + + if (cinfo->quantize_colors) + cinfo->output_components = 1; /* single colormapped output component */ + else + cinfo->output_components = cinfo->out_color_components; +} diff --git a/libjpegd/jdct.h b/libjpegd/jdct.h new file mode 100644 index 0000000..04192a2 --- /dev/null +++ b/libjpegd/jdct.h @@ -0,0 +1,176 @@ +/* + * jdct.h + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This include file contains common declarations for the forward and + * inverse DCT modules. These declarations are private to the DCT managers + * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms. + * The individual DCT algorithms are kept in separate files to ease + * machine-dependent tuning (e.g., assembly coding). + */ + + +/* + * A forward DCT routine is given a pointer to a work area of type DCTELEM[]; + * the DCT is to be performed in-place in that buffer. Type DCTELEM is int + * for 8-bit samples, INT32 for 12-bit samples. (NOTE: Floating-point DCT + * implementations use an array of type FAST_FLOAT, instead.) + * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE). + * The DCT outputs are returned scaled up by a factor of 8; they therefore + * have a range of +-8K for 8-bit data, +-128K for 12-bit data. This + * convention improves accuracy in integer implementations and saves some + * work in floating-point ones. + * Quantization of the output coefficients is done by jcdctmgr.c. + */ + +#if BITS_IN_JSAMPLE == 8 +typedef int DCTELEM; /* 16 or 32 bits is fine */ +#else +typedef INT32 DCTELEM; /* must have 32 bits */ +#endif + +typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data)); +typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data)); + + +/* + * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer + * to an output sample array. The routine must dequantize the input data as + * well as perform the IDCT; for dequantization, it uses the multiplier table + * pointed to by compptr->dct_table. The output data is to be placed into the + * sample array starting at a specified column. (Any row offset needed will + * be applied to the array pointer before it is passed to the IDCT code.) + * Note that the number of samples emitted by the IDCT routine is + * DCT_scaled_size * DCT_scaled_size. + */ + +/* typedef inverse_DCT_method_ptr is declared in jpegint.h */ + +/* + * Each IDCT routine has its own ideas about the best dct_table element type. + */ + +typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */ +#if BITS_IN_JSAMPLE == 8 +typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ +#define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ +#else +typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ +#define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ +#endif +typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ + + +/* + * Each IDCT routine is responsible for range-limiting its results and + * converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could + * be quite far out of range if the input data is corrupt, so a bulletproof + * range-limiting step is required. We use a mask-and-table-lookup method + * to do the combined operations quickly. See the comments with + * prepare_range_limit_table (in jdmaster.c) for more info. + */ + +#define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE) + +#define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_fdct_islow jFDislow +#define jpeg_fdct_ifast jFDifast +#define jpeg_fdct_float jFDfloat +#define jpeg_idct_islow jRDislow +#define jpeg_idct_ifast jRDifast +#define jpeg_idct_float jRDfloat +#define jpeg_idct_4x4 jRD4x4 +#define jpeg_idct_2x2 jRD2x2 +#define jpeg_idct_1x1 jRD1x1 +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + +/* Extern declarations for the forward and inverse DCT routines. */ + +EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data)); +EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data)); +EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data)); + +EXTERN(void) jpeg_idct_islow + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_ifast + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_float + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_4x4 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_2x2 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_1x1 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); + + +/* + * Macros for handling fixed-point arithmetic; these are used by many + * but not all of the DCT/IDCT modules. + * + * All values are expected to be of type INT32. + * Fractional constants are scaled left by CONST_BITS bits. + * CONST_BITS is defined within each module using these macros, + * and may differ from one module to the next. + */ + +#define ONE ((INT32) 1) +#define CONST_SCALE (ONE << CONST_BITS) + +/* Convert a positive real constant to an integer scaled by CONST_SCALE. + * Caution: some C compilers fail to reduce "FIX(constant)" at compile time, + * thus causing a lot of useless floating-point operations at run time. + */ + +#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) + +/* Descale and correctly round an INT32 value that's scaled by N bits. + * We assume RIGHT_SHIFT rounds towards minus infinity, so adding + * the fudge factor is correct for either sign of X. + */ + +#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * This macro is used only when the two inputs will actually be no more than + * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a + * full 32x32 multiply. This provides a useful speedup on many machines. + * Unfortunately there is no way to specify a 16x16->32 multiply portably + * in C, but some C compilers will do the right thing if you provide the + * correct combination of casts. + */ + +#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ +#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) +#endif +#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ +#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) +#endif + +#ifndef MULTIPLY16C16 /* default definition */ +#define MULTIPLY16C16(var,const) ((var) * (const)) +#endif + +/* Same except both inputs are variables. */ + +#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ +#define MULTIPLY16V16(var1,var2) (((INT16) (var1)) * ((INT16) (var2))) +#endif + +#ifndef MULTIPLY16V16 /* default definition */ +#define MULTIPLY16V16(var1,var2) ((var1) * (var2)) +#endif diff --git a/libjpegd/jddctmgr.c b/libjpegd/jddctmgr.c new file mode 100644 index 0000000..bbf8d0e --- /dev/null +++ b/libjpegd/jddctmgr.c @@ -0,0 +1,269 @@ +/* + * jddctmgr.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the inverse-DCT management logic. + * This code selects a particular IDCT implementation to be used, + * and it performs related housekeeping chores. No code in this file + * is executed per IDCT step, only during output pass setup. + * + * Note that the IDCT routines are responsible for performing coefficient + * dequantization as well as the IDCT proper. This module sets up the + * dequantization multiplier table needed by the IDCT routine. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + + +/* + * The decompressor input side (jdinput.c) saves away the appropriate + * quantization table for each component at the start of the first scan + * involving that component. (This is necessary in order to correctly + * decode files that reuse Q-table slots.) + * When we are ready to make an output pass, the saved Q-table is converted + * to a multiplier table that will actually be used by the IDCT routine. + * The multiplier table contents are IDCT-method-dependent. To support + * application changes in IDCT method between scans, we can remake the + * multiplier tables if necessary. + * In buffered-image mode, the first output pass may occur before any data + * has been seen for some components, and thus before their Q-tables have + * been saved away. To handle this case, multiplier tables are preset + * to zeroes; the result of the IDCT will be a neutral gray level. + */ + + +/* Private subobject for this module */ + +typedef struct { + struct jpeg_inverse_dct pub; /* public fields */ + + /* This array contains the IDCT method code that each multiplier table + * is currently set up for, or -1 if it's not yet set up. + * The actual multiplier tables are pointed to by dct_table in the + * per-component comp_info structures. + */ + int cur_method[MAX_COMPONENTS]; +} my_idct_controller; + +typedef my_idct_controller * my_idct_ptr; + + +/* Allocated multiplier tables: big enough for any supported variant */ + +typedef union { + ISLOW_MULT_TYPE islow_array[DCTSIZE2]; +#ifdef DCT_IFAST_SUPPORTED + IFAST_MULT_TYPE ifast_array[DCTSIZE2]; +#endif +#ifdef DCT_FLOAT_SUPPORTED + FLOAT_MULT_TYPE float_array[DCTSIZE2]; +#endif +} multiplier_table; + + +/* The current scaled-IDCT routines require ISLOW-style multiplier tables, + * so be sure to compile that code if either ISLOW or SCALING is requested. + */ +#ifdef DCT_ISLOW_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#else +#ifdef IDCT_SCALING_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#endif +#endif + + +/* + * Prepare for an output pass. + * Here we select the proper IDCT routine for each component and build + * a matching multiplier table. + */ + +METHODDEF(void) +start_pass (j_decompress_ptr cinfo) +{ + my_idct_ptr idct = (my_idct_ptr) cinfo->idct; + int ci, i; + jpeg_component_info *compptr; + int method = 0; + inverse_DCT_method_ptr method_ptr = NULL; + JQUANT_TBL * qtbl; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Select the proper IDCT routine for this component's scaling */ + switch (compptr->DCT_scaled_size) { +#ifdef IDCT_SCALING_SUPPORTED + case 1: + method_ptr = jpeg_idct_1x1; + method = JDCT_ISLOW; /* jidctred uses islow-style table */ + break; + case 2: + method_ptr = jpeg_idct_2x2; + method = JDCT_ISLOW; /* jidctred uses islow-style table */ + break; + case 4: + method_ptr = jpeg_idct_4x4; + method = JDCT_ISLOW; /* jidctred uses islow-style table */ + break; +#endif + case DCTSIZE: + switch (cinfo->dct_method) { +#ifdef DCT_ISLOW_SUPPORTED + case JDCT_ISLOW: + method_ptr = jpeg_idct_islow; + method = JDCT_ISLOW; + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + method_ptr = jpeg_idct_ifast; + method = JDCT_IFAST; + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + method_ptr = jpeg_idct_float; + method = JDCT_FLOAT; + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + break; + default: + ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->DCT_scaled_size); + break; + } + idct->pub.inverse_DCT[ci] = method_ptr; + /* Create multiplier table from quant table. + * However, we can skip this if the component is uninteresting + * or if we already built the table. Also, if no quant table + * has yet been saved for the component, we leave the + * multiplier table all-zero; we'll be reading zeroes from the + * coefficient controller's buffer anyway. + */ + if (! compptr->component_needed || idct->cur_method[ci] == method) + continue; + qtbl = compptr->quant_table; + if (qtbl == NULL) /* happens if no data yet for component */ + continue; + idct->cur_method[ci] = method; + switch (method) { +#ifdef PROVIDE_ISLOW_TABLES + case JDCT_ISLOW: + { + /* For LL&M IDCT method, multipliers are equal to raw quantization + * coefficients, but are stored as ints to ensure access efficiency. + */ + ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; + for (i = 0; i < DCTSIZE2; i++) { + ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; + } + } + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + { + /* For AA&N IDCT method, multipliers are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * For integer operation, the multiplier table is to be scaled by + * IFAST_SCALE_BITS. + */ + IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; +#define CONST_BITS 14 + static const INT16 aanscales[DCTSIZE2] = { + /* precomputed values scaled up by 14 bits */ + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, + 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, + 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, + 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, + 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 + }; + SHIFT_TEMPS + + for (i = 0; i < DCTSIZE2; i++) { + ifmtbl[i] = (IFAST_MULT_TYPE) + DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], + (INT32) aanscales[i]), + CONST_BITS-IFAST_SCALE_BITS); + } + } + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + { + /* For float AA&N IDCT method, multipliers are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + */ + FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; + int row, col; + static const double aanscalefactor[DCTSIZE] = { + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + }; + + i = 0; + for (row = 0; row < DCTSIZE; row++) { + for (col = 0; col < DCTSIZE; col++) { + fmtbl[i] = (FLOAT_MULT_TYPE) + ((double) qtbl->quantval[i] * + aanscalefactor[row] * aanscalefactor[col]); + i++; + } + } + } + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + } +} + + +/* + * Initialize IDCT manager. + */ + +GLOBAL(void) +jinit_inverse_dct (j_decompress_ptr cinfo) +{ + my_idct_ptr idct; + int ci; + jpeg_component_info *compptr; + + idct = (my_idct_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_idct_controller)); + cinfo->idct = (struct jpeg_inverse_dct *) idct; + idct->pub.start_pass = start_pass; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Allocate and pre-zero a multiplier table for each component */ + compptr->dct_table = + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(multiplier_table)); + MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); + /* Mark multiplier table not yet set up for any method */ + idct->cur_method[ci] = -1; + } +} diff --git a/libjpegd/jdhuff.c b/libjpegd/jdhuff.c new file mode 100644 index 0000000..b5ba39f --- /dev/null +++ b/libjpegd/jdhuff.c @@ -0,0 +1,651 @@ +/* + * jdhuff.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy decoding routines. + * + * Much of the complexity here has to do with supporting input suspension. + * If the data source module demands suspension, we want to be able to back + * up to the start of the current MCU. To do this, we copy state variables + * into local working storage, and update them back to the permanent + * storage only upon successful completion of an MCU. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdhuff.h" /* Declarations shared with jdphuff.c */ + + +/* + * Expanded entropy decoder object for Huffman decoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_decoder pub; /* public fields */ + + /* These fields are loaded into local variables at start of each MCU. + * In case of suspension, we exit WITHOUT updating them. + */ + bitread_perm_state bitstate; /* Bit buffer at start of MCU */ + savable_state saved; /* Other state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; + d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; + + /* Precalculated info set up by start_pass for use in decode_mcu: */ + + /* Pointers to derived tables to be used for each block within an MCU */ + d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU]; + d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU]; + /* Whether we care about the DC and AC coefficient values for each block */ + boolean dc_needed[D_MAX_BLOCKS_IN_MCU]; + boolean ac_needed[D_MAX_BLOCKS_IN_MCU]; +} huff_entropy_decoder; + +typedef huff_entropy_decoder * huff_entropy_ptr; + + +/* + * Initialize for a Huffman-compressed scan. + */ + +METHODDEF(void) +start_pass_huff_decoder (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, blkn, dctbl, actbl; + jpeg_component_info * compptr; + + /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. + * This ought to be an error condition, but we make it a warning because + * there are some baseline files out there with all zeroes in these bytes. + */ + if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 || + cinfo->Ah != 0 || cinfo->Al != 0) + WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + /* Compute derived values for Huffman tables */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl, + & entropy->dc_derived_tbls[dctbl]); + jpeg_make_d_derived_tbl(cinfo, FALSE, actbl, + & entropy->ac_derived_tbls[actbl]); + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Precalculate decoding info for each block in an MCU of this scan */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + /* Precalculate which table to use for each block */ + entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; + entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; + /* Decide whether we really care about the coefficient values */ + if (compptr->component_needed) { + entropy->dc_needed[blkn] = TRUE; + /* we don't need the ACs if producing a 1/8th-size image */ + entropy->ac_needed[blkn] = (compptr->DCT_scaled_size > 1); + } else { + entropy->dc_needed[blkn] = entropy->ac_needed[blkn] = FALSE; + } + } + + /* Initialize bitread state variables */ + entropy->bitstate.bits_left = 0; + entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ + entropy->pub.insufficient_data = FALSE; + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Compute the derived values for a Huffman table. + * This routine also performs some validation checks on the table. + * + * Note this is also used by jdphuff.c. + */ + +GLOBAL(void) +jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno, + d_derived_tbl ** pdtbl) +{ + JHUFF_TBL *htbl; + d_derived_tbl *dtbl; + int p, i, l, si, numsymbols; + int lookbits, ctr; + char huffsize[257]; + unsigned int huffcode[257]; + unsigned int code; + + /* Note that huffsize[] and huffcode[] are filled in code-length order, + * paralleling the order of the symbols themselves in htbl->huffval[]. + */ + + /* Find the input Huffman table */ + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + htbl = + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + + /* Allocate a workspace if we haven't already done so. */ + if (*pdtbl == NULL) + *pdtbl = (d_derived_tbl *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(d_derived_tbl)); + dtbl = *pdtbl; + dtbl->pub = htbl; /* fill in back link */ + + /* Figure C.1: make table of Huffman code length for each symbol */ + + p = 0; + for (l = 1; l <= 16; l++) { + i = (int) htbl->bits[l]; + if (i < 0 || p + i > 256) /* protect against table overrun */ + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + while (i--) + huffsize[p++] = (char) l; + } + huffsize[p] = 0; + numsymbols = p; + + /* Figure C.2: generate the codes themselves */ + /* We also validate that the counts represent a legal Huffman code tree. */ + + code = 0; + si = huffsize[0]; + p = 0; + while (huffsize[p]) { + while (((int) huffsize[p]) == si) { + huffcode[p++] = code; + code++; + } + /* code is now 1 more than the last code used for codelength si; but + * it must still fit in si bits, since no code is allowed to be all ones. + */ + if (((INT32) code) >= (((INT32) 1) << si)) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + code <<= 1; + si++; + } + + /* Figure F.15: generate decoding tables for bit-sequential decoding */ + + p = 0; + for (l = 1; l <= 16; l++) { + if (htbl->bits[l]) { + /* valoffset[l] = huffval[] index of 1st symbol of code length l, + * minus the minimum code of length l + */ + dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; + p += htbl->bits[l]; + dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ + } else { + dtbl->maxcode[l] = -1; /* -1 if no codes of this length */ + } + } + dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ + + /* Compute lookahead tables to speed up decoding. + * First we set all the table entries to 0, indicating "too long"; + * then we iterate through the Huffman codes that are short enough and + * fill in all the entries that correspond to bit sequences starting + * with that code. + */ + + MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); + + p = 0; + for (l = 1; l <= HUFF_LOOKAHEAD; l++) { + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + /* l = current code's length, p = its index in huffcode[] & huffval[]. */ + /* Generate left-justified code followed by all possible bit sequences */ + lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + dtbl->look_nbits[lookbits] = l; + dtbl->look_sym[lookbits] = htbl->huffval[p]; + lookbits++; + } + } + } + + /* Validate symbols as being reasonable. + * For AC tables, we make no check, but accept all byte values 0..255. + * For DC tables, we require the symbols to be in range 0..15. + * (Tighter bounds could be applied depending on the data depth and mode, + * but this is sufficient to ensure safe decoding.) + */ + if (isDC) { + for (i = 0; i < numsymbols; i++) { + int sym = htbl->huffval[i]; + if (sym < 0 || sym > 15) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + } + } +} + + +/* + * Out-of-line code for bit fetching (shared with jdphuff.c). + * See jdhuff.h for info about usage. + * Note: current values of get_buffer and bits_left are passed as parameters, + * but are returned in the corresponding fields of the state struct. + * + * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width + * of get_buffer to be used. (On machines with wider words, an even larger + * buffer could be used.) However, on some machines 32-bit shifts are + * quite slow and take time proportional to the number of places shifted. + * (This is true with most PC compilers, for instance.) In this case it may + * be a win to set MIN_GET_BITS to the minimum value of 15. This reduces the + * average shift distance at the cost of more calls to jpeg_fill_bit_buffer. + */ + +#ifdef SLOW_SHIFT_32 +#define MIN_GET_BITS 15 /* minimum allowable value */ +#else +#define MIN_GET_BITS (BIT_BUF_SIZE-7) +#endif + + +GLOBAL(boolean) +jpeg_fill_bit_buffer (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + int nbits) +/* Load up the bit buffer to a depth of at least nbits */ +{ + /* Copy heavily used state fields into locals (hopefully registers) */ + register const JOCTET * next_input_byte = state->next_input_byte; + register size_t bytes_in_buffer = state->bytes_in_buffer; + j_decompress_ptr cinfo = state->cinfo; + + /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */ + /* (It is assumed that no request will be for more than that many bits.) */ + /* We fail to do so only if we hit a marker or are forced to suspend. */ + + if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ + while (bits_left < MIN_GET_BITS) { + register int c; + + /* Attempt to read a byte */ + if (bytes_in_buffer == 0) { + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + return FALSE; + next_input_byte = cinfo->src->next_input_byte; + bytes_in_buffer = cinfo->src->bytes_in_buffer; + } + bytes_in_buffer--; + c = GETJOCTET(*next_input_byte++); + + /* If it's 0xFF, check and discard stuffed zero byte */ + if (c == 0xFF) { + /* Loop here to discard any padding FF's on terminating marker, + * so that we can save a valid unread_marker value. NOTE: we will + * accept multiple FF's followed by a 0 as meaning a single FF data + * byte. This data pattern is not valid according to the standard. + */ + do { + if (bytes_in_buffer == 0) { + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + return FALSE; + next_input_byte = cinfo->src->next_input_byte; + bytes_in_buffer = cinfo->src->bytes_in_buffer; + } + bytes_in_buffer--; + c = GETJOCTET(*next_input_byte++); + } while (c == 0xFF); + + if (c == 0) { + /* Found FF/00, which represents an FF data byte */ + c = 0xFF; + } else { + /* Oops, it's actually a marker indicating end of compressed data. + * Save the marker code for later use. + * Fine point: it might appear that we should save the marker into + * bitread working state, not straight into permanent state. But + * once we have hit a marker, we cannot need to suspend within the + * current MCU, because we will read no more bytes from the data + * source. So it is OK to update permanent state right away. + */ + cinfo->unread_marker = c; + /* See if we need to insert some fake zero bits. */ + goto no_more_bytes; + } + } + + /* OK, load c into get_buffer */ + get_buffer = (get_buffer << 8) | c; + bits_left += 8; + } /* end while */ + } else { + no_more_bytes: + /* We get here if we've read the marker that terminates the compressed + * data segment. There should be enough bits in the buffer register + * to satisfy the request; if so, no problem. + */ + if (nbits > bits_left) { + /* Uh-oh. Report corrupted data to user and stuff zeroes into + * the data stream, so that we can produce some kind of image. + * We use a nonvolatile flag to ensure that only one warning message + * appears per data segment. + */ + if (! cinfo->entropy->insufficient_data) { + WARNMS(cinfo, JWRN_HIT_MARKER); + cinfo->entropy->insufficient_data = TRUE; + } + /* Fill the buffer with zero bits */ + get_buffer <<= MIN_GET_BITS - bits_left; + bits_left = MIN_GET_BITS; + } + } + + /* Unload the local registers */ + state->next_input_byte = next_input_byte; + state->bytes_in_buffer = bytes_in_buffer; + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + return TRUE; +} + + +/* + * Out-of-line code for Huffman code decoding. + * See jdhuff.h for info about usage. + */ + +GLOBAL(int) +jpeg_huff_decode (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + d_derived_tbl * htbl, int min_bits) +{ + register int l = min_bits; + register INT32 code; + + /* HUFF_DECODE has determined that the code is at least min_bits */ + /* bits long, so fetch that many bits in one swoop. */ + + CHECK_BIT_BUFFER(*state, l, return -1); + code = GET_BITS(l); + + /* Collect the rest of the Huffman code one bit at a time. */ + /* This is per Figure F.16 in the JPEG spec. */ + + while (code > htbl->maxcode[l]) { + code <<= 1; + CHECK_BIT_BUFFER(*state, 1, return -1); + code |= GET_BITS(1); + l++; + } + + /* Unload the local registers */ + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + /* With garbage input we may reach the sentinel value l = 17. */ + + if (l > 16) { + WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); + return 0; /* fake a zero as the safest result */ + } + + return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; +} + + +/* + * Figure F.12: extend sign bit. + * On some machines, a shift and add will be faster than a table lookup. + */ + +#ifdef AVOID_TABLES + +#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) + +#else + +#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) + +static const int extend_test[16] = /* entry n is 2**(n-1) */ + { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, + 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; + +static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ + { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, + ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, + ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, + ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; + +#endif /* AVOID_TABLES */ + + +/* + * Check for a restart marker & resynchronize decoder. + * Returns FALSE if must suspend. + */ + +LOCAL(boolean) +process_restart (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + entropy->bitstate.bits_left = 0; + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + return FALSE; + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + + /* Reset out-of-data flag, unless read_restart_marker left us smack up + * against a marker. In that case we will end up treating the next data + * segment as empty, and we can avoid producing bogus output pixels by + * leaving the flag set. + */ + if (cinfo->unread_marker == 0) + entropy->pub.insufficient_data = FALSE; + + return TRUE; +} + + +/* + * Decode and return one MCU's worth of Huffman-compressed coefficients. + * The coefficients are reordered from zigzag order into natural array order, + * but are not dequantized. + * + * The i'th block of the MCU is stored into the block pointed to by + * MCU_data[i]. WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER. + * (Wholesale zeroing is usually a little faster than retail...) + * + * Returns FALSE if data source requested suspension. In that case no + * changes have been made to permanent state. (Exception: some output + * coefficients may already have been assigned. This is harmless for + * this module, since we'll just re-assign them on the next call.) + */ + +METHODDEF(boolean) +decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int blkn; + BITREAD_STATE_VARS; + savable_state state; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(state, entropy->saved); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + JBLOCKROW block = MCU_data[blkn]; + d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn]; + d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn]; + register int s, k, r; + + /* Decode a single block's worth of coefficients */ + + /* Section F.2.2.1: decode the DC coefficient difference */ + HUFF_DECODE(s, br_state, dctbl, return FALSE, label1); + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + } + + if (entropy->dc_needed[blkn]) { + /* Convert DC difference to actual value, update last_dc_val */ + int ci = cinfo->MCU_membership[blkn]; + s += state.last_dc_val[ci]; + state.last_dc_val[ci] = s; + /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */ + (*block)[0] = (JCOEF) s; + } + + if (entropy->ac_needed[blkn]) { + + /* Section F.2.2.2: decode the AC coefficients */ + /* Since zeroes are skipped, output area must be cleared beforehand */ + for (k = 1; k < DCTSIZE2; k++) { + HUFF_DECODE(s, br_state, actbl, return FALSE, label2); + + r = s >> 4; + s &= 15; + + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + /* Output coefficient in natural (dezigzagged) order. + * Note: the extra entries in jpeg_natural_order[] will save us + * if k >= DCTSIZE2, which could happen if the data is corrupted. + */ + (*block)[jpeg_natural_order[k]] = (JCOEF) s; + } else { + if (r != 15) + break; + k += 15; + } + } + + } else { + + /* Section F.2.2.2: decode the AC coefficients */ + /* In this path we just discard the values */ + for (k = 1; k < DCTSIZE2; k++) { + HUFF_DECODE(s, br_state, actbl, return FALSE, label3); + + r = s >> 4; + s &= 15; + + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + DROP_BITS(s); + } else { + if (r != 15) + break; + k += 15; + } + } + + } + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * Module initialization routine for Huffman entropy decoding. + */ + +GLOBAL(void) +jinit_huff_decoder (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy; + int i; + + entropy = (huff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(huff_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass_huff_decoder; + entropy->pub.decode_mcu = decode_mcu; + + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; + } +} diff --git a/libjpegd/jdhuff.h b/libjpegd/jdhuff.h new file mode 100644 index 0000000..ae19b6c --- /dev/null +++ b/libjpegd/jdhuff.h @@ -0,0 +1,201 @@ +/* + * jdhuff.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains declarations for Huffman entropy decoding routines + * that are shared between the sequential decoder (jdhuff.c) and the + * progressive decoder (jdphuff.c). No other modules need to see these. + */ + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_make_d_derived_tbl jMkDDerived +#define jpeg_fill_bit_buffer jFilBitBuf +#define jpeg_huff_decode jHufDecode +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Derived data constructed for each Huffman table */ + +#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */ + +typedef struct { + /* Basic tables: (element [0] of each array is unused) */ + INT32 maxcode[18]; /* largest code of length k (-1 if none) */ + /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */ + INT32 valoffset[17]; /* huffval[] offset for codes of length k */ + /* valoffset[k] = huffval[] index of 1st symbol of code length k, less + * the smallest code of length k; so given a code of length k, the + * corresponding symbol is huffval[code + valoffset[k]] + */ + + /* Link to public Huffman table (needed only in jpeg_huff_decode) */ + JHUFF_TBL *pub; + + /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of + * the input data stream. If the next Huffman code is no more + * than HUFF_LOOKAHEAD bits long, we can obtain its length and + * the corresponding symbol directly from these tables. + */ + int look_nbits[1< 32 bits on your machine, and shifting/masking longs is + * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE + * appropriately should be a win. Unfortunately we can't define the size + * with something like #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8) + * because not all machines measure sizeof in 8-bit bytes. + */ + +typedef struct { /* Bitreading state saved across MCUs */ + bit_buf_type get_buffer; /* current bit-extraction buffer */ + int bits_left; /* # of unused bits in it */ +} bitread_perm_state; + +typedef struct { /* Bitreading working state within an MCU */ + /* Current data source location */ + /* We need a copy, rather than munging the original, in case of suspension */ + const JOCTET * next_input_byte; /* => next byte to read from source */ + size_t bytes_in_buffer; /* # of bytes remaining in source buffer */ + /* Bit input buffer --- note these values are kept in register variables, + * not in this struct, inside the inner loops. + */ + bit_buf_type get_buffer; /* current bit-extraction buffer */ + int bits_left; /* # of unused bits in it */ + /* Pointer needed by jpeg_fill_bit_buffer. */ + j_decompress_ptr cinfo; /* back link to decompress master record */ +} bitread_working_state; + +/* Macros to declare and load/save bitread local variables. */ +#define BITREAD_STATE_VARS \ + register bit_buf_type get_buffer; \ + register int bits_left; \ + bitread_working_state br_state + +#define BITREAD_LOAD_STATE(cinfop,permstate) \ + br_state.cinfo = cinfop; \ + br_state.next_input_byte = cinfop->src->next_input_byte; \ + br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \ + get_buffer = permstate.get_buffer; \ + bits_left = permstate.bits_left; + +#define BITREAD_SAVE_STATE(cinfop,permstate) \ + cinfop->src->next_input_byte = br_state.next_input_byte; \ + cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \ + permstate.get_buffer = get_buffer; \ + permstate.bits_left = bits_left + +/* + * These macros provide the in-line portion of bit fetching. + * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer + * before using GET_BITS, PEEK_BITS, or DROP_BITS. + * The variables get_buffer and bits_left are assumed to be locals, + * but the state struct might not be (jpeg_huff_decode needs this). + * CHECK_BIT_BUFFER(state,n,action); + * Ensure there are N bits in get_buffer; if suspend, take action. + * val = GET_BITS(n); + * Fetch next N bits. + * val = PEEK_BITS(n); + * Fetch next N bits without removing them from the buffer. + * DROP_BITS(n); + * Discard next N bits. + * The value N should be a simple variable, not an expression, because it + * is evaluated multiple times. + */ + +#define CHECK_BIT_BUFFER(state,nbits,action) \ + { if (bits_left < (nbits)) { \ + if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \ + { action; } \ + get_buffer = (state).get_buffer; bits_left = (state).bits_left; } } + +#define GET_BITS(nbits) \ + (((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1)) + +#define PEEK_BITS(nbits) \ + (((int) (get_buffer >> (bits_left - (nbits)))) & ((1<<(nbits))-1)) + +#define DROP_BITS(nbits) \ + (bits_left -= (nbits)) + +/* Load up the bit buffer to a depth of at least nbits */ +EXTERN(boolean) jpeg_fill_bit_buffer + JPP((bitread_working_state * state, register bit_buf_type get_buffer, + register int bits_left, int nbits)); + + +/* + * Code for extracting next Huffman-coded symbol from input bit stream. + * Again, this is time-critical and we make the main paths be macros. + * + * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits + * without looping. Usually, more than 95% of the Huffman codes will be 8 + * or fewer bits long. The few overlength codes are handled with a loop, + * which need not be inline code. + * + * Notes about the HUFF_DECODE macro: + * 1. Near the end of the data segment, we may fail to get enough bits + * for a lookahead. In that case, we do it the hard way. + * 2. If the lookahead table contains no entry, the next code must be + * more than HUFF_LOOKAHEAD bits long. + * 3. jpeg_huff_decode returns -1 if forced to suspend. + */ + +#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \ +{ register int nb, look; \ + if (bits_left < HUFF_LOOKAHEAD) { \ + if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \ + get_buffer = state.get_buffer; bits_left = state.bits_left; \ + if (bits_left < HUFF_LOOKAHEAD) { \ + nb = 1; goto slowlabel; \ + } \ + } \ + look = PEEK_BITS(HUFF_LOOKAHEAD); \ + if ((nb = htbl->look_nbits[look]) != 0) { \ + DROP_BITS(nb); \ + result = htbl->look_sym[look]; \ + } else { \ + nb = HUFF_LOOKAHEAD+1; \ +slowlabel: \ + if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \ + { failaction; } \ + get_buffer = state.get_buffer; bits_left = state.bits_left; \ + } \ +} + +/* Out-of-line case for Huffman code fetching */ +EXTERN(int) jpeg_huff_decode + JPP((bitread_working_state * state, register bit_buf_type get_buffer, + register int bits_left, d_derived_tbl * htbl, int min_bits)); diff --git a/libjpegd/jdinput.c b/libjpegd/jdinput.c new file mode 100644 index 0000000..0c2ac8f --- /dev/null +++ b/libjpegd/jdinput.c @@ -0,0 +1,381 @@ +/* + * jdinput.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains input control logic for the JPEG decompressor. + * These routines are concerned with controlling the decompressor's input + * processing (marker reading and coefficient decoding). The actual input + * reading is done in jdmarker.c, jdhuff.c, and jdphuff.c. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef struct { + struct jpeg_input_controller pub; /* public fields */ + + boolean inheaders; /* TRUE until first SOS is reached */ +} my_input_controller; + +typedef my_input_controller * my_inputctl_ptr; + + +/* Forward declarations */ +METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo)); + + +/* + * Routines to calculate various quantities related to the size of the image. + */ + +LOCAL(void) +initial_setup (j_decompress_ptr cinfo) +/* Called once, when first SOS marker is reached */ +{ + int ci; + jpeg_component_info *compptr; + + /* Make sure image isn't bigger than I can handle */ + if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || + (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); + + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + + /* Check that number of components won't exceed internal array sizes */ + if (cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + + /* Compute maximum sampling factors; check factor validity */ + cinfo->max_h_samp_factor = 1; + cinfo->max_v_samp_factor = 1; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || + compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) + ERREXIT(cinfo, JERR_BAD_SAMPLING); + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + compptr->h_samp_factor); + cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, + compptr->v_samp_factor); + } + + /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE. + * In the full decompressor, this will be overridden by jdmaster.c; + * but in the transcoder, jdmaster.c is not used, so we must do it here. + */ + cinfo->min_DCT_scaled_size = DCTSIZE; + + /* Compute dimensions of components */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->DCT_scaled_size = DCTSIZE; + /* Size in DCT blocks */ + compptr->width_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->height_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + /* downsampled_width and downsampled_height will also be overridden by + * jdmaster.c if we are doing full decompression. The transcoder library + * doesn't use these values, but the calling application might. + */ + /* Size in samples */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) cinfo->max_h_samp_factor); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) cinfo->max_v_samp_factor); + /* Mark component needed, until color conversion says otherwise */ + compptr->component_needed = TRUE; + /* Mark no quantization table yet saved for component */ + compptr->quant_table = NULL; + } + + /* Compute number of fully interleaved MCU rows. */ + cinfo->total_iMCU_rows = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + /* Decide whether file contains multiple scans */ + if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) + cinfo->inputctl->has_multiple_scans = TRUE; + else + cinfo->inputctl->has_multiple_scans = FALSE; +} + + +LOCAL(void) +per_scan_setup (j_decompress_ptr cinfo) +/* Do computations that are needed before processing a JPEG scan */ +/* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */ +{ + int ci, mcublks, tmp; + jpeg_component_info *compptr; + + if (cinfo->comps_in_scan == 1) { + + /* Noninterleaved (single-component) scan */ + compptr = cinfo->cur_comp_info[0]; + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = compptr->width_in_blocks; + cinfo->MCU_rows_in_scan = compptr->height_in_blocks; + + /* For noninterleaved scan, always one block per MCU */ + compptr->MCU_width = 1; + compptr->MCU_height = 1; + compptr->MCU_blocks = 1; + compptr->MCU_sample_width = compptr->DCT_scaled_size; + compptr->last_col_width = 1; + /* For noninterleaved scans, it is convenient to define last_row_height + * as the number of block rows present in the last iMCU row. + */ + tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (tmp == 0) tmp = compptr->v_samp_factor; + compptr->last_row_height = tmp; + + /* Prepare array describing MCU composition */ + cinfo->blocks_in_MCU = 1; + cinfo->MCU_membership[0] = 0; + + } else { + + /* Interleaved (multi-component) scan */ + if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, + MAX_COMPS_IN_SCAN); + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, + (long) (cinfo->max_h_samp_factor*DCTSIZE)); + cinfo->MCU_rows_in_scan = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + cinfo->blocks_in_MCU = 0; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Sampling factors give # of blocks of component in each MCU */ + compptr->MCU_width = compptr->h_samp_factor; + compptr->MCU_height = compptr->v_samp_factor; + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_scaled_size; + /* Figure number of non-dummy blocks in last MCU column & row */ + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + if (tmp == 0) tmp = compptr->MCU_width; + compptr->last_col_width = tmp; + tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); + if (tmp == 0) tmp = compptr->MCU_height; + compptr->last_row_height = tmp; + /* Prepare array describing MCU composition */ + mcublks = compptr->MCU_blocks; + if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU) + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + while (mcublks-- > 0) { + cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; + } + } + + } +} + + +/* + * Save away a copy of the Q-table referenced by each component present + * in the current scan, unless already saved during a prior scan. + * + * In a multiple-scan JPEG file, the encoder could assign different components + * the same Q-table slot number, but change table definitions between scans + * so that each component uses a different Q-table. (The IJG encoder is not + * currently capable of doing this, but other encoders might.) Since we want + * to be able to dequantize all the components at the end of the file, this + * means that we have to save away the table actually used for each component. + * We do this by copying the table at the start of the first scan containing + * the component. + * The JPEG spec prohibits the encoder from changing the contents of a Q-table + * slot between scans of a component using that slot. If the encoder does so + * anyway, this decoder will simply use the Q-table values that were current + * at the start of the first scan for the component. + * + * The decompressor output side looks only at the saved quant tables, + * not at the current Q-table slots. + */ + +LOCAL(void) +latch_quant_tables (j_decompress_ptr cinfo) +{ + int ci, qtblno; + jpeg_component_info *compptr; + JQUANT_TBL * qtbl; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* No work if we already saved Q-table for this component */ + if (compptr->quant_table != NULL) + continue; + /* Make sure specified quantization table is present */ + qtblno = compptr->quant_tbl_no; + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + cinfo->quant_tbl_ptrs[qtblno] == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + /* OK, save away the quantization table */ + qtbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(JQUANT_TBL)); + MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); + compptr->quant_table = qtbl; + } +} + + +/* + * Initialize the input modules to read a scan of compressed data. + * The first call to this is done by jdmaster.c after initializing + * the entire decompressor (during jpeg_start_decompress). + * Subsequent calls come from consume_markers, below. + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + per_scan_setup(cinfo); + latch_quant_tables(cinfo); + (*cinfo->entropy->start_pass) (cinfo); + (*cinfo->coef->start_input_pass) (cinfo); + cinfo->inputctl->consume_input = cinfo->coef->consume_data; +} + + +/* + * Finish up after inputting a compressed-data scan. + * This is called by the coefficient controller after it's read all + * the expected data of the scan. + */ + +METHODDEF(void) +finish_input_pass (j_decompress_ptr cinfo) +{ + cinfo->inputctl->consume_input = consume_markers; +} + + +/* + * Read JPEG markers before, between, or after compressed-data scans. + * Change state as necessary when a new scan is reached. + * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + * + * The consume_input method pointer points either here or to the + * coefficient controller's consume_data routine, depending on whether + * we are reading a compressed data segment or inter-segment markers. + */ + +METHODDEF(int) +consume_markers (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + int val; + + if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */ + return JPEG_REACHED_EOI; + + val = (*cinfo->marker->read_markers) (cinfo); + + switch (val) { + case JPEG_REACHED_SOS: /* Found SOS */ + if (inputctl->inheaders) { /* 1st SOS */ + initial_setup(cinfo); + inputctl->inheaders = FALSE; + /* Note: start_input_pass must be called by jdmaster.c + * before any more input can be consumed. jdapimin.c is + * responsible for enforcing this sequencing. + */ + } else { /* 2nd or later SOS marker */ + if (! inputctl->pub.has_multiple_scans) + ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */ + start_input_pass(cinfo); + } + break; + case JPEG_REACHED_EOI: /* Found EOI */ + inputctl->pub.eoi_reached = TRUE; + if (inputctl->inheaders) { /* Tables-only datastream, apparently */ + if (cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOF_NO_SOS); + } else { + /* Prevent infinite loop in coef ctlr's decompress_data routine + * if user set output_scan_number larger than number of scans. + */ + if (cinfo->output_scan_number > cinfo->input_scan_number) + cinfo->output_scan_number = cinfo->input_scan_number; + } + break; + case JPEG_SUSPENDED: + break; + } + + return val; +} + + +/* + * Reset state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_input_controller (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + + inputctl->pub.consume_input = consume_markers; + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = TRUE; + /* Reset other modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->marker->reset_marker_reader) (cinfo); + /* Reset progression state -- would be cleaner if entropy decoder did this */ + cinfo->coef_bits = NULL; +} + + +/* + * Initialize the input controller module. + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_input_controller (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl; + + /* Create subobject in permanent pool */ + inputctl = (my_inputctl_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_input_controller)); + cinfo->inputctl = (struct jpeg_input_controller *) inputctl; + /* Initialize method pointers */ + inputctl->pub.consume_input = consume_markers; + inputctl->pub.reset_input_controller = reset_input_controller; + inputctl->pub.start_input_pass = start_input_pass; + inputctl->pub.finish_input_pass = finish_input_pass; + /* Initialize state: can't use reset_input_controller since we don't + * want to try to reset other modules yet. + */ + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = TRUE; +} diff --git a/libjpegd/jdmainct.c b/libjpegd/jdmainct.c new file mode 100644 index 0000000..da19c7e --- /dev/null +++ b/libjpegd/jdmainct.c @@ -0,0 +1,512 @@ +/* + * jdmainct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the main buffer controller for decompression. + * The main buffer lies between the JPEG decompressor proper and the + * post-processor; it holds downsampled data in the JPEG colorspace. + * + * Note that this code is bypassed in raw-data mode, since the application + * supplies the equivalent of the main buffer in that case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * In the current system design, the main buffer need never be a full-image + * buffer; any full-height buffers will be found inside the coefficient or + * postprocessing controllers. Nonetheless, the main controller is not + * trivial. Its responsibility is to provide context rows for upsampling/ + * rescaling, and doing this in an efficient fashion is a bit tricky. + * + * Postprocessor input data is counted in "row groups". A row group + * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) + * sample rows of each component. (We require DCT_scaled_size values to be + * chosen such that these numbers are integers. In practice DCT_scaled_size + * values will likely be powers of two, so we actually have the stronger + * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.) + * Upsampling will typically produce max_v_samp_factor pixel rows from each + * row group (times any additional scale factor that the upsampler is + * applying). + * + * The coefficient controller will deliver data to us one iMCU row at a time; + * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or + * exactly min_DCT_scaled_size row groups. (This amount of data corresponds + * to one row of MCUs when the image is fully interleaved.) Note that the + * number of sample rows varies across components, but the number of row + * groups does not. Some garbage sample rows may be included in the last iMCU + * row at the bottom of the image. + * + * Depending on the vertical scaling algorithm used, the upsampler may need + * access to the sample row(s) above and below its current input row group. + * The upsampler is required to set need_context_rows TRUE at global selection + * time if so. When need_context_rows is FALSE, this controller can simply + * obtain one iMCU row at a time from the coefficient controller and dole it + * out as row groups to the postprocessor. + * + * When need_context_rows is TRUE, this controller guarantees that the buffer + * passed to postprocessing contains at least one row group's worth of samples + * above and below the row group(s) being processed. Note that the context + * rows "above" the first passed row group appear at negative row offsets in + * the passed buffer. At the top and bottom of the image, the required + * context rows are manufactured by duplicating the first or last real sample + * row; this avoids having special cases in the upsampling inner loops. + * + * The amount of context is fixed at one row group just because that's a + * convenient number for this controller to work with. The existing + * upsamplers really only need one sample row of context. An upsampler + * supporting arbitrary output rescaling might wish for more than one row + * group of context when shrinking the image; tough, we don't handle that. + * (This is justified by the assumption that downsizing will be handled mostly + * by adjusting the DCT_scaled_size values, so that the actual scale factor at + * the upsample step needn't be much less than one.) + * + * To provide the desired context, we have to retain the last two row groups + * of one iMCU row while reading in the next iMCU row. (The last row group + * can't be processed until we have another row group for its below-context, + * and so we have to save the next-to-last group too for its above-context.) + * We could do this most simply by copying data around in our buffer, but + * that'd be very slow. We can avoid copying any data by creating a rather + * strange pointer structure. Here's how it works. We allocate a workspace + * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number + * of row groups per iMCU row). We create two sets of redundant pointers to + * the workspace. Labeling the physical row groups 0 to M+1, the synthesized + * pointer lists look like this: + * M+1 M-1 + * master pointer --> 0 master pointer --> 0 + * 1 1 + * ... ... + * M-3 M-3 + * M-2 M + * M-1 M+1 + * M M-2 + * M+1 M-1 + * 0 0 + * We read alternate iMCU rows using each master pointer; thus the last two + * row groups of the previous iMCU row remain un-overwritten in the workspace. + * The pointer lists are set up so that the required context rows appear to + * be adjacent to the proper places when we pass the pointer lists to the + * upsampler. + * + * The above pictures describe the normal state of the pointer lists. + * At top and bottom of the image, we diddle the pointer lists to duplicate + * the first or last sample row as necessary (this is cheaper than copying + * sample rows around). + * + * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1. In that + * situation each iMCU row provides only one row group so the buffering logic + * must be different (eg, we must read two iMCU rows before we can emit the + * first row group). For now, we simply do not support providing context + * rows when min_DCT_scaled_size is 1. That combination seems unlikely to + * be worth providing --- if someone wants a 1/8th-size preview, they probably + * want it quick and dirty, so a context-free upsampler is sufficient. + */ + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_main_controller pub; /* public fields */ + + /* Pointer to allocated workspace (M or M+2 row groups). */ + JSAMPARRAY buffer[MAX_COMPONENTS]; + + boolean buffer_full; /* Have we gotten an iMCU row from decoder? */ + JDIMENSION rowgroup_ctr; /* counts row groups output to postprocessor */ + + /* Remaining fields are only used in the context case. */ + + /* These are the master pointers to the funny-order pointer lists. */ + JSAMPIMAGE xbuffer[2]; /* pointers to weird pointer lists */ + + int whichptr; /* indicates which pointer set is now in use */ + int context_state; /* process_data state machine status */ + JDIMENSION rowgroups_avail; /* row groups available to postprocessor */ + JDIMENSION iMCU_row_ctr; /* counts iMCU rows to detect image top/bot */ +} my_main_controller; + +typedef my_main_controller * my_main_ptr; + +/* context_state values: */ +#define CTX_PREPARE_FOR_IMCU 0 /* need to prepare for MCU row */ +#define CTX_PROCESS_IMCU 1 /* feeding iMCU to postprocessor */ +#define CTX_POSTPONED_ROW 2 /* feeding postponed row group */ + + +/* Forward declarations */ +METHODDEF(void) process_data_simple_main + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +METHODDEF(void) process_data_context_main + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +#ifdef QUANT_2PASS_SUPPORTED +METHODDEF(void) process_data_crank_post + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +#endif + + +LOCAL(void) +alloc_funny_pointers (j_decompress_ptr cinfo) +/* Allocate space for the funny pointer lists. + * This is done only once, not once per pass. + */ +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + int ci, rgroup; + int M = cinfo->min_DCT_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY xbuf; + + /* Get top-level space for component array pointers. + * We alloc both arrays with one call to save a few cycles. + */ + jmain->xbuffer[0] = (JSAMPIMAGE) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); + jmain->xbuffer[1] = jmain->xbuffer[0] + cinfo->num_components; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + /* Get space for pointer lists --- M+4 row groups in each list. + * We alloc both pointer lists with one call to save a few cycles. + */ + xbuf = (JSAMPARRAY) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); + xbuf += rgroup; /* want one row group at negative offsets */ + jmain->xbuffer[0][ci] = xbuf; + xbuf += rgroup * (M + 4); + jmain->xbuffer[1][ci] = xbuf; + } +} + + +LOCAL(void) +make_funny_pointers (j_decompress_ptr cinfo) +/* Create the funny pointer lists discussed in the comments above. + * The actual workspace is already allocated (in jmain->buffer), + * and the space for the pointer lists is allocated too. + * This routine just fills in the curiously ordered lists. + * This will be repeated at the beginning of each pass. + */ +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + int ci, i, rgroup; + int M = cinfo->min_DCT_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY buf, xbuf0, xbuf1; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + xbuf0 = jmain->xbuffer[0][ci]; + xbuf1 = jmain->xbuffer[1][ci]; + /* First copy the workspace pointers as-is */ + buf = jmain->buffer[ci]; + for (i = 0; i < rgroup * (M + 2); i++) { + xbuf0[i] = xbuf1[i] = buf[i]; + } + /* In the second list, put the last four row groups in swapped order */ + for (i = 0; i < rgroup * 2; i++) { + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i]; + } + /* The wraparound pointers at top and bottom will be filled later + * (see set_wraparound_pointers, below). Initially we want the "above" + * pointers to duplicate the first actual data line. This only needs + * to happen in xbuffer[0]. + */ + for (i = 0; i < rgroup; i++) { + xbuf0[i - rgroup] = xbuf0[0]; + } + } +} + + +LOCAL(void) +set_wraparound_pointers (j_decompress_ptr cinfo) +/* Set up the "wraparound" pointers at top and bottom of the pointer lists. + * This changes the pointer list state from top-of-image to the normal state. + */ +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + int ci, i, rgroup; + int M = cinfo->min_DCT_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY xbuf0, xbuf1; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + xbuf0 = jmain->xbuffer[0][ci]; + xbuf1 = jmain->xbuffer[1][ci]; + for (i = 0; i < rgroup; i++) { + xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; + xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; + xbuf0[rgroup*(M+2) + i] = xbuf0[i]; + xbuf1[rgroup*(M+2) + i] = xbuf1[i]; + } + } +} + + +LOCAL(void) +set_bottom_pointers (j_decompress_ptr cinfo) +/* Change the pointer lists to duplicate the last sample row at the bottom + * of the image. whichptr indicates which xbuffer holds the final iMCU row. + * Also sets rowgroups_avail to indicate number of nondummy row groups in row. + */ +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + int ci, i, rgroup, iMCUheight, rows_left; + jpeg_component_info *compptr; + JSAMPARRAY xbuf; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Count sample rows in one iMCU row and in one row group */ + iMCUheight = compptr->v_samp_factor * compptr->DCT_scaled_size; + rgroup = iMCUheight / cinfo->min_DCT_scaled_size; + /* Count nondummy sample rows remaining for this component */ + rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight); + if (rows_left == 0) rows_left = iMCUheight; + /* Count nondummy row groups. Should get same answer for each component, + * so we need only do it once. + */ + if (ci == 0) { + jmain->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); + } + /* Duplicate the last real sample row rgroup*2 times; this pads out the + * last partial rowgroup and ensures at least one full rowgroup of context. + */ + xbuf = jmain->xbuffer[jmain->whichptr][ci]; + for (i = 0; i < rgroup * 2; i++) { + xbuf[rows_left + i] = xbuf[rows_left-1]; + } + } +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (cinfo->upsample->need_context_rows) { + jmain->pub.process_data = process_data_context_main; + make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ + jmain->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ + jmain->context_state = CTX_PREPARE_FOR_IMCU; + jmain->iMCU_row_ctr = 0; + } else { + /* Simple case with no context needed */ + jmain->pub.process_data = process_data_simple_main; + } + jmain->buffer_full = FALSE; /* Mark buffer empty */ + jmain->rowgroup_ctr = 0; + break; +#ifdef QUANT_2PASS_SUPPORTED + case JBUF_CRANK_DEST: + /* For last pass of 2-pass quantization, just crank the postprocessor */ + jmain->pub.process_data = process_data_crank_post; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data. + * This handles the simple case where no context is required. + */ + +METHODDEF(void) +process_data_simple_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + JDIMENSION rowgroups_avail; + + /* Read input data if we haven't filled the main buffer yet */ + if (! jmain->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, jmain->buffer)) + return; /* suspension forced, can do nothing more */ + jmain->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + } + + /* There are always min_DCT_scaled_size row groups in an iMCU row. */ + rowgroups_avail = (JDIMENSION) cinfo->min_DCT_scaled_size; + /* Note: at the bottom of the image, we may pass extra garbage row groups + * to the postprocessor. The postprocessor has to check for bottom + * of image anyway (at row resolution), so no point in us doing it too. + */ + + /* Feed the postprocessor */ + (*cinfo->post->post_process_data) (cinfo, jmain->buffer, + &jmain->rowgroup_ctr, rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + + /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ + if (jmain->rowgroup_ctr >= rowgroups_avail) { + jmain->buffer_full = FALSE; + jmain->rowgroup_ctr = 0; + } +} + + +/* + * Process some data. + * This handles the case where context rows must be provided. + */ + +METHODDEF(void) +process_data_context_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_main_ptr jmain = (my_main_ptr) cinfo->main; + + /* Read input data if we haven't filled the main buffer yet */ + if (! jmain->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, + jmain->xbuffer[jmain->whichptr])) + return; /* suspension forced, can do nothing more */ + jmain->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + jmain->iMCU_row_ctr++; /* count rows received */ + } + + /* Postprocessor typically will not swallow all the input data it is handed + * in one call (due to filling the output buffer first). Must be prepared + * to exit and restart. This switch lets us keep track of how far we got. + * Note that each case falls through to the next on successful completion. + */ + switch (jmain->context_state) { + case CTX_POSTPONED_ROW: + /* Call postprocessor using previously set pointers for postponed row */ + (*cinfo->post->post_process_data) (cinfo, jmain->xbuffer[jmain->whichptr], + &jmain->rowgroup_ctr, jmain->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (jmain->rowgroup_ctr < jmain->rowgroups_avail) + return; /* Need to suspend */ + jmain->context_state = CTX_PREPARE_FOR_IMCU; + if (*out_row_ctr >= out_rows_avail) + return; /* Postprocessor exactly filled output buf */ + /*FALLTHROUGH*/ + case CTX_PREPARE_FOR_IMCU: + /* Prepare to process first M-1 row groups of this iMCU row */ + jmain->rowgroup_ctr = 0; + jmain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1); + /* Check for bottom of image: if so, tweak pointers to "duplicate" + * the last sample row, and adjust rowgroups_avail to ignore padding rows. + */ + if (jmain->iMCU_row_ctr == cinfo->total_iMCU_rows) + set_bottom_pointers(cinfo); + jmain->context_state = CTX_PROCESS_IMCU; + /*FALLTHROUGH*/ + case CTX_PROCESS_IMCU: + /* Call postprocessor using previously set pointers */ + (*cinfo->post->post_process_data) (cinfo, jmain->xbuffer[jmain->whichptr], + &jmain->rowgroup_ctr, jmain->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (jmain->rowgroup_ctr < jmain->rowgroups_avail) + return; /* Need to suspend */ + /* After the first iMCU, change wraparound pointers to normal state */ + if (jmain->iMCU_row_ctr == 1) + set_wraparound_pointers(cinfo); + /* Prepare to load new iMCU row using other xbuffer list */ + jmain->whichptr ^= 1; /* 0=>1 or 1=>0 */ + jmain->buffer_full = FALSE; + /* Still need to process last row group of this iMCU row, */ + /* which is saved at index M+1 of the other xbuffer */ + jmain->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_scaled_size + 1); + jmain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size + 2); + jmain->context_state = CTX_POSTPONED_ROW; + } +} + + +/* + * Process some data. + * Final pass of two-pass quantization: just call the postprocessor. + * Source data will be the postprocessor controller's internal buffer. + */ + +#ifdef QUANT_2PASS_SUPPORTED + +METHODDEF(void) +process_data_crank_post (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL, + (JDIMENSION *) NULL, (JDIMENSION) 0, + output_buf, out_row_ctr, out_rows_avail); +} + +#endif /* QUANT_2PASS_SUPPORTED */ + + +/* + * Initialize main buffer controller. + */ + +GLOBAL(void) +jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_main_ptr jmain; + int ci, rgroup, ngroups; + jpeg_component_info *compptr; + + jmain = (my_main_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_main_controller)); + cinfo->main = (struct jpeg_d_main_controller *) jmain; + jmain->pub.start_pass = start_pass_main; + + if (need_full_buffer) /* shouldn't happen */ + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + /* Allocate the workspace. + * ngroups is the number of row groups we need. + */ + if (cinfo->upsample->need_context_rows) { + if (cinfo->min_DCT_scaled_size < 2) /* unsupported, see comments above */ + ERREXIT(cinfo, JERR_NOTIMPL); + alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ + ngroups = cinfo->min_DCT_scaled_size + 2; + } else { + ngroups = cinfo->min_DCT_scaled_size; + } + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + jmain->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * compptr->DCT_scaled_size, + (JDIMENSION) (rgroup * ngroups)); + } +} diff --git a/libjpegd/jdmarker.c b/libjpegd/jdmarker.c new file mode 100644 index 0000000..f4cca8c --- /dev/null +++ b/libjpegd/jdmarker.c @@ -0,0 +1,1360 @@ +/* + * jdmarker.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to decode JPEG datastream markers. + * Most of the complexity arises from our desire to support input + * suspension: if not all of the data for a marker is available, + * we must exit back to the application. On resumption, we reprocess + * the marker. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +typedef enum { /* JPEG marker codes */ + M_SOF0 = 0xc0, + M_SOF1 = 0xc1, + M_SOF2 = 0xc2, + M_SOF3 = 0xc3, + + M_SOF5 = 0xc5, + M_SOF6 = 0xc6, + M_SOF7 = 0xc7, + + M_JPG = 0xc8, + M_SOF9 = 0xc9, + M_SOF10 = 0xca, + M_SOF11 = 0xcb, + + M_SOF13 = 0xcd, + M_SOF14 = 0xce, + M_SOF15 = 0xcf, + + M_DHT = 0xc4, + + M_DAC = 0xcc, + + M_RST0 = 0xd0, + M_RST1 = 0xd1, + M_RST2 = 0xd2, + M_RST3 = 0xd3, + M_RST4 = 0xd4, + M_RST5 = 0xd5, + M_RST6 = 0xd6, + M_RST7 = 0xd7, + + M_SOI = 0xd8, + M_EOI = 0xd9, + M_SOS = 0xda, + M_DQT = 0xdb, + M_DNL = 0xdc, + M_DRI = 0xdd, + M_DHP = 0xde, + M_EXP = 0xdf, + + M_APP0 = 0xe0, + M_APP1 = 0xe1, + M_APP2 = 0xe2, + M_APP3 = 0xe3, + M_APP4 = 0xe4, + M_APP5 = 0xe5, + M_APP6 = 0xe6, + M_APP7 = 0xe7, + M_APP8 = 0xe8, + M_APP9 = 0xe9, + M_APP10 = 0xea, + M_APP11 = 0xeb, + M_APP12 = 0xec, + M_APP13 = 0xed, + M_APP14 = 0xee, + M_APP15 = 0xef, + + M_JPG0 = 0xf0, + M_JPG13 = 0xfd, + M_COM = 0xfe, + + M_TEM = 0x01, + + M_ERROR = 0x100 +} JPEG_MARKER; + + +/* Private state */ + +typedef struct { + struct jpeg_marker_reader pub; /* public fields */ + + /* Application-overridable marker processing methods */ + jpeg_marker_parser_method process_COM; + jpeg_marker_parser_method process_APPn[16]; + + /* Limit on marker data length to save for each marker type */ + unsigned int length_limit_COM; + unsigned int length_limit_APPn[16]; + + /* Status of COM/APPn marker saving */ + jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */ + unsigned int bytes_read; /* data bytes read so far in marker */ + /* Note: cur_marker is not linked into marker_list until it's all read. */ +} my_marker_reader; + +typedef my_marker_reader * my_marker_ptr; + + +/* + * Macros for fetching data from the data source module. + * + * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect + * the current restart point; we update them only when we have reached a + * suitable place to restart if a suspension occurs. + */ + +/* Declare and initialize local copies of input pointer/count */ +#define INPUT_VARS(cinfo) \ + struct jpeg_source_mgr * datasrc = (cinfo)->src; \ + const JOCTET * next_input_byte = datasrc->next_input_byte; \ + size_t bytes_in_buffer = datasrc->bytes_in_buffer + +/* Unload the local copies --- do this only at a restart boundary */ +#define INPUT_SYNC(cinfo) \ + ( datasrc->next_input_byte = next_input_byte, \ + datasrc->bytes_in_buffer = bytes_in_buffer ) + +/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */ +#define INPUT_RELOAD(cinfo) \ + ( next_input_byte = datasrc->next_input_byte, \ + bytes_in_buffer = datasrc->bytes_in_buffer ) + +/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available. + * Note we do *not* do INPUT_SYNC before calling fill_input_buffer, + * but we must reload the local copies after a successful fill. + */ +#define MAKE_BYTE_AVAIL(cinfo,action) \ + if (bytes_in_buffer == 0) { \ + if (! (*datasrc->fill_input_buffer) (cinfo)) \ + { action; } \ + INPUT_RELOAD(cinfo); \ + } + +/* Read a byte into variable V. + * If must suspend, take the specified action (typically "return FALSE"). + */ +#define INPUT_BYTE(cinfo,V,action) \ + MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V = GETJOCTET(*next_input_byte++); ) + +/* As above, but read two bytes interpreted as an unsigned 16-bit integer. + * V should be declared unsigned int or perhaps INT32. + */ +#define INPUT_2BYTES(cinfo,V,action) \ + MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \ + MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V += GETJOCTET(*next_input_byte++); ) + + +/* + * Routines to process JPEG markers. + * + * Entry condition: JPEG marker itself has been read and its code saved + * in cinfo->unread_marker; input restart point is just after the marker. + * + * Exit: if return TRUE, have read and processed any parameters, and have + * updated the restart point to point after the parameters. + * If return FALSE, was forced to suspend before reaching end of + * marker parameters; restart point has not been moved. Same routine + * will be called again after application supplies more input data. + * + * This approach to suspension assumes that all of a marker's parameters + * can fit into a single input bufferload. This should hold for "normal" + * markers. Some COM/APPn markers might have large parameter segments + * that might not fit. If we are simply dropping such a marker, we use + * skip_input_data to get past it, and thereby put the problem on the + * source manager's shoulders. If we are saving the marker's contents + * into memory, we use a slightly different convention: when forced to + * suspend, the marker processor updates the restart point to the end of + * what it's consumed (ie, the end of the buffer) before returning FALSE. + * On resumption, cinfo->unread_marker still contains the marker code, + * but the data source will point to the next chunk of marker data. + * The marker processor must retain internal state to deal with this. + * + * Note that we don't bother to avoid duplicate trace messages if a + * suspension occurs within marker parameters. Other side effects + * require more care. + */ + + +LOCAL(boolean) +get_soi (j_decompress_ptr cinfo) +/* Process an SOI marker */ +{ + int i; + + TRACEMS(cinfo, 1, JTRC_SOI); + + if (cinfo->marker->saw_SOI) + ERREXIT(cinfo, JERR_SOI_DUPLICATE); + + /* Reset all parameters that are defined to be reset by SOI */ + + for (i = 0; i < NUM_ARITH_TBLS; i++) { + cinfo->arith_dc_L[i] = 0; + cinfo->arith_dc_U[i] = 1; + cinfo->arith_ac_K[i] = 5; + } + cinfo->restart_interval = 0; + + /* Set initial assumptions for colorspace etc */ + + cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ + + cinfo->saw_JFIF_marker = FALSE; + cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ + cinfo->JFIF_minor_version = 1; + cinfo->density_unit = 0; + cinfo->X_density = 1; + cinfo->Y_density = 1; + cinfo->saw_Adobe_marker = FALSE; + cinfo->Adobe_transform = 0; + + cinfo->marker->saw_SOI = TRUE; + + return TRUE; +} + + +LOCAL(boolean) +get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) +/* Process a SOFn marker */ +{ + INT32 length; + int c, ci; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + + cinfo->progressive_mode = is_prog; + cinfo->arith_code = is_arith; + + INPUT_2BYTES(cinfo, length, return FALSE); + + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + + length -= 8; + + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + (int) cinfo->image_width, (int) cinfo->image_height, + cinfo->num_components); + + if (cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOF_DUPLICATE); + + /* We don't support files in which the image height is initially specified */ + /* as 0 and is later redefined by DNL. As long as we have to check that, */ + /* might as well have a general sanity check. */ + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 + || cinfo->num_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + + if (length != (cinfo->num_components * 3)) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + if (cinfo->comp_info == NULL) /* do only once, even if suspend */ + cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * SIZEOF(jpeg_component_info)); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->component_index = ci; + INPUT_BYTE(cinfo, compptr->component_id, return FALSE); + INPUT_BYTE(cinfo, c, return FALSE); + compptr->h_samp_factor = (c >> 4) & 15; + compptr->v_samp_factor = (c ) & 15; + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + compptr->component_id, compptr->h_samp_factor, + compptr->v_samp_factor, compptr->quant_tbl_no); + } + + cinfo->marker->saw_SOF = TRUE; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_sos (j_decompress_ptr cinfo) +/* Process a SOS marker */ +{ + INT32 length; + int i, ci, n, c, cc; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + + if (! cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOS_NO_SOF); + + INPUT_2BYTES(cinfo, length, return FALSE); + + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + + TRACEMS1(cinfo, 1, JTRC_SOS, n); + + if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + cinfo->comps_in_scan = n; + + /* Collect the component-spec parameters */ + + for (i = 0; i < n; i++) { + INPUT_BYTE(cinfo, cc, return FALSE); + INPUT_BYTE(cinfo, c, return FALSE); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (cc == compptr->component_id) + goto id_found; + } + + ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); + + id_found: + + cinfo->cur_comp_info[i] = compptr; + compptr->dc_tbl_no = (c >> 4) & 15; + compptr->ac_tbl_no = (c ) & 15; + + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + compptr->dc_tbl_no, compptr->ac_tbl_no); + } + + /* Collect the additional scan parameters Ss, Se, Ah/Al. */ + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Ss = c; + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Se = c; + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Ah = (c >> 4) & 15; + cinfo->Al = (c ) & 15; + + TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, + cinfo->Ah, cinfo->Al); + + /* Prepare to scan data & restart markers */ + cinfo->marker->next_restart_num = 0; + + /* Count another SOS marker */ + cinfo->input_scan_number++; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +#ifdef D_ARITH_CODING_SUPPORTED + +LOCAL(boolean) +get_dac (j_decompress_ptr cinfo) +/* Process a DAC marker */ +{ + INT32 length; + int index, val; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 0) { + INPUT_BYTE(cinfo, index, return FALSE); + INPUT_BYTE(cinfo, val, return FALSE); + + length -= 2; + + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + + if (index < 0 || index >= (2*NUM_ARITH_TBLS)) + ERREXIT1(cinfo, JERR_DAC_INDEX, index); + + if (index >= NUM_ARITH_TBLS) { /* define AC table */ + cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val; + } else { /* define DC table */ + cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); + cinfo->arith_dc_U[index] = (UINT8) (val >> 4); + if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) + ERREXIT1(cinfo, JERR_DAC_VALUE, val); + } + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + +#else /* ! D_ARITH_CODING_SUPPORTED */ + +#define get_dac(cinfo) skip_variable(cinfo) + +#endif /* D_ARITH_CODING_SUPPORTED */ + + +LOCAL(boolean) +get_dht (j_decompress_ptr cinfo) +/* Process a DHT marker */ +{ + INT32 length; + UINT8 bits[17]; + UINT8 huffval[256]; + int i, index, count; + JHUFF_TBL **htblptr; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 16) { + INPUT_BYTE(cinfo, index, return FALSE); + + TRACEMS1(cinfo, 1, JTRC_DHT, index); + + bits[0] = 0; + count = 0; + for (i = 1; i <= 16; i++) { + INPUT_BYTE(cinfo, bits[i], return FALSE); + count += bits[i]; + } + + length -= 1 + 16; + + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + bits[1], bits[2], bits[3], bits[4], + bits[5], bits[6], bits[7], bits[8]); + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + bits[9], bits[10], bits[11], bits[12], + bits[13], bits[14], bits[15], bits[16]); + + /* Here we just do minimal validation of the counts to avoid walking + * off the end of our table space. jdhuff.c will check more carefully. + */ + if (count > 256 || ((INT32) count) > length) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + + for (i = 0; i < count; i++) + INPUT_BYTE(cinfo, huffval[i], return FALSE); + + length -= count; + + if (index & 0x10) { /* AC table definition */ + index -= 0x10; + htblptr = &cinfo->ac_huff_tbl_ptrs[index]; + } else { /* DC table definition */ + htblptr = &cinfo->dc_huff_tbl_ptrs[index]; + } + + if (index < 0 || index >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_DHT_INDEX, index); + + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + + MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); + MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval)); + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_dqt (j_decompress_ptr cinfo) +/* Process a DQT marker */ +{ + INT32 length; + int n, i, prec; + unsigned int tmp; + JQUANT_TBL *quant_ptr; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 0) { + INPUT_BYTE(cinfo, n, return FALSE); + prec = n >> 4; + n &= 0x0F; + + TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); + + if (n >= NUM_QUANT_TBLS) + ERREXIT1(cinfo, JERR_DQT_INDEX, n); + + if (cinfo->quant_tbl_ptrs[n] == NULL) + cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo); + quant_ptr = cinfo->quant_tbl_ptrs[n]; + + for (i = 0; i < DCTSIZE2; i++) { + if (prec) + INPUT_2BYTES(cinfo, tmp, return FALSE); + else + INPUT_BYTE(cinfo, tmp, return FALSE); + /* We convert the zigzag-order table to natural array order. */ + quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp; + } + + if (cinfo->err->trace_level >= 2) { + for (i = 0; i < DCTSIZE2; i += 8) { + TRACEMS8(cinfo, 2, JTRC_QUANTVALS, + quant_ptr->quantval[i], quant_ptr->quantval[i+1], + quant_ptr->quantval[i+2], quant_ptr->quantval[i+3], + quant_ptr->quantval[i+4], quant_ptr->quantval[i+5], + quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]); + } + } + + length -= DCTSIZE2+1; + if (prec) length -= DCTSIZE2; + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_dri (j_decompress_ptr cinfo) +/* Process a DRI marker */ +{ + INT32 length; + unsigned int tmp; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + + if (length != 4) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_2BYTES(cinfo, tmp, return FALSE); + + TRACEMS1(cinfo, 1, JTRC_DRI, tmp); + + cinfo->restart_interval = tmp; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +/* + * Routines for processing APPn and COM markers. + * These are either saved in memory or discarded, per application request. + * APP0 and APP14 are specially checked to see if they are + * JFIF and Adobe markers, respectively. + */ + +#define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */ +#define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */ +#define APPN_DATA_LEN 14 /* Must be the largest of the above!! */ + + +LOCAL(void) +examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data, + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP0. + * Take appropriate action if it is a JFIF marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + INT32 totallen = (INT32) datalen + remaining; + + if (datalen >= APP0_DATA_LEN && + GETJOCTET(data[0]) == 0x4A && + GETJOCTET(data[1]) == 0x46 && + GETJOCTET(data[2]) == 0x49 && + GETJOCTET(data[3]) == 0x46 && + GETJOCTET(data[4]) == 0) { + /* Found JFIF APP0 marker: save info */ + cinfo->saw_JFIF_marker = TRUE; + cinfo->JFIF_major_version = GETJOCTET(data[5]); + cinfo->JFIF_minor_version = GETJOCTET(data[6]); + cinfo->density_unit = GETJOCTET(data[7]); + cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); + cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); + /* Check version. + * Major version must be 1, anything else signals an incompatible change. + * (We used to treat this as an error, but now it's a nonfatal warning, + * because some bozo at Hijaak couldn't read the spec.) + * Minor version should be 0..2, but process anyway if newer. + */ + if (cinfo->JFIF_major_version != 1) + WARNMS2(cinfo, JWRN_JFIF_MAJOR, + cinfo->JFIF_major_version, cinfo->JFIF_minor_version); + /* Generate trace messages */ + TRACEMS5(cinfo, 1, JTRC_JFIF, + cinfo->JFIF_major_version, cinfo->JFIF_minor_version, + cinfo->X_density, cinfo->Y_density, cinfo->density_unit); + /* Validate thumbnail dimensions and issue appropriate messages */ + if (GETJOCTET(data[12]) | GETJOCTET(data[13])) + TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, + GETJOCTET(data[12]), GETJOCTET(data[13])); + totallen -= APP0_DATA_LEN; + if (totallen != + ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) + TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); + } else if (datalen >= 6 && + GETJOCTET(data[0]) == 0x4A && + GETJOCTET(data[1]) == 0x46 && + GETJOCTET(data[2]) == 0x58 && + GETJOCTET(data[3]) == 0x58 && + GETJOCTET(data[4]) == 0) { + /* Found JFIF "JFXX" extension APP0 marker */ + /* The library doesn't actually do anything with these, + * but we try to produce a helpful trace message. + */ + switch (GETJOCTET(data[5])) { + case 0x10: + TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen); + break; + case 0x11: + TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen); + break; + case 0x13: + TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen); + break; + default: + TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, + GETJOCTET(data[5]), (int) totallen); + break; + } + } else { + /* Start of APP0 does not match "JFIF" or "JFXX", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + } +} + + +LOCAL(void) +examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data, + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP14. + * Take appropriate action if it is an Adobe marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + unsigned int version, flags0, flags1, transform; + + if (datalen >= APP14_DATA_LEN && + GETJOCTET(data[0]) == 0x41 && + GETJOCTET(data[1]) == 0x64 && + GETJOCTET(data[2]) == 0x6F && + GETJOCTET(data[3]) == 0x62 && + GETJOCTET(data[4]) == 0x65) { + /* Found Adobe APP14 marker */ + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + transform = GETJOCTET(data[11]); + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + cinfo->saw_Adobe_marker = TRUE; + cinfo->Adobe_transform = (UINT8) transform; + } else { + /* Start of APP14 does not match "Adobe", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); + } +} + + +METHODDEF(boolean) +get_interesting_appn (j_decompress_ptr cinfo) +/* Process an APP0 or APP14 marker without saving it */ +{ + INT32 length; + JOCTET b[APPN_DATA_LEN]; + unsigned int i, numtoread; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + /* get the interesting part of the marker data */ + if (length >= APPN_DATA_LEN) + numtoread = APPN_DATA_LEN; + else if (length > 0) + numtoread = (unsigned int) length; + else + numtoread = 0; + for (i = 0; i < numtoread; i++) + INPUT_BYTE(cinfo, b[i], return FALSE); + length -= numtoread; + + /* process it */ + switch (cinfo->unread_marker) { + case M_APP0: + examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length); + break; + case M_APP14: + examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length); + break; + default: + /* can't get here unless jpeg_save_markers chooses wrong processor */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + break; + } + + /* skip any remaining data -- could be lots */ + INPUT_SYNC(cinfo); + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + + +#ifdef SAVE_MARKERS_SUPPORTED + +METHODDEF(boolean) +save_marker (j_decompress_ptr cinfo) +/* Save an APPn or COM marker into the marker list */ +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + jpeg_saved_marker_ptr cur_marker = marker->cur_marker; + unsigned int bytes_read, data_length; + JOCTET FAR * data; + INT32 length = 0; + INPUT_VARS(cinfo); + + if (cur_marker == NULL) { + /* begin reading a marker */ + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + if (length >= 0) { /* watch out for bogus length word */ + /* figure out how much we want to save */ + unsigned int limit; + if (cinfo->unread_marker == (int) M_COM) + limit = marker->length_limit_COM; + else + limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0]; + if ((unsigned int) length < limit) + limit = (unsigned int) length; + /* allocate and initialize the marker item */ + cur_marker = (jpeg_saved_marker_ptr) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(struct jpeg_marker_struct) + limit); + cur_marker->next = NULL; + cur_marker->marker = (UINT8) cinfo->unread_marker; + cur_marker->original_length = (unsigned int) length; + cur_marker->data_length = limit; + /* data area is just beyond the jpeg_marker_struct */ + data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1); + marker->cur_marker = cur_marker; + marker->bytes_read = 0; + bytes_read = 0; + data_length = limit; + } else { + /* deal with bogus length word */ + bytes_read = data_length = 0; + data = NULL; + } + } else { + /* resume reading a marker */ + bytes_read = marker->bytes_read; + data_length = cur_marker->data_length; + data = cur_marker->data + bytes_read; + } + + while (bytes_read < data_length) { + INPUT_SYNC(cinfo); /* move the restart point to here */ + marker->bytes_read = bytes_read; + /* If there's not at least one byte in buffer, suspend */ + MAKE_BYTE_AVAIL(cinfo, return FALSE); + /* Copy bytes with reasonable rapidity */ + while (bytes_read < data_length && bytes_in_buffer > 0) { + *data++ = *next_input_byte++; + bytes_in_buffer--; + bytes_read++; + } + } + + /* Done reading what we want to read */ + if (cur_marker != NULL) { /* will be NULL if bogus length word */ + /* Add new marker to end of list */ + if (cinfo->marker_list == NULL) { + cinfo->marker_list = cur_marker; + } else { + jpeg_saved_marker_ptr prev = cinfo->marker_list; + while (prev->next != NULL) + prev = prev->next; + prev->next = cur_marker; + } + /* Reset pointer & calc remaining data length */ + data = cur_marker->data; + length = cur_marker->original_length - data_length; + } + /* Reset to initial state for next marker */ + marker->cur_marker = NULL; + + /* Process the marker if interesting; else just make a generic trace msg */ + switch (cinfo->unread_marker) { + case M_APP0: + examine_app0(cinfo, data, data_length, length); + break; + case M_APP14: + examine_app14(cinfo, data, data_length, length); + break; + default: + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, + (int) (data_length + length)); + break; + } + + /* skip any remaining data -- could be lots */ + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + +#endif /* SAVE_MARKERS_SUPPORTED */ + + +METHODDEF(boolean) +skip_variable (j_decompress_ptr cinfo) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + INT32 length; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); + + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + + +/* + * Find the next JPEG marker, save it in cinfo->unread_marker. + * Returns FALSE if had to suspend before reaching a marker; + * in that case cinfo->unread_marker is unchanged. + * + * Note that the result might not be a valid marker code, + * but it will never be 0 or FF. + */ + +LOCAL(boolean) +next_marker (j_decompress_ptr cinfo) +{ + int c; + INPUT_VARS(cinfo); + + for (;;) { + INPUT_BYTE(cinfo, c, return FALSE); + /* Skip any non-FF bytes. + * This may look a bit inefficient, but it will not occur in a valid file. + * We sync after each discarded byte so that a suspending data source + * can discard the byte from its buffer. + */ + while (c != 0xFF) { + cinfo->marker->discarded_bytes++; + INPUT_SYNC(cinfo); + INPUT_BYTE(cinfo, c, return FALSE); + } + /* This loop swallows any duplicate FF bytes. Extra FFs are legal as + * pad bytes, so don't count them in discarded_bytes. We assume there + * will not be so many consecutive FF bytes as to overflow a suspending + * data source's input buffer. + */ + do { + INPUT_BYTE(cinfo, c, return FALSE); + } while (c == 0xFF); + if (c != 0) + break; /* found a valid marker, exit loop */ + /* Reach here if we found a stuffed-zero data sequence (FF/00). + * Discard it and loop back to try again. + */ + cinfo->marker->discarded_bytes += 2; + INPUT_SYNC(cinfo); + } + + if (cinfo->marker->discarded_bytes != 0) { + WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); + cinfo->marker->discarded_bytes = 0; + } + + cinfo->unread_marker = c; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +first_marker (j_decompress_ptr cinfo) +/* Like next_marker, but used to obtain the initial SOI marker. */ +/* For this marker, we do not allow preceding garbage or fill; otherwise, + * we might well scan an entire input file before realizing it ain't JPEG. + * If an application wants to process non-JFIF files, it must seek to the + * SOI before calling the JPEG library. + */ +{ + int c, c2; + INPUT_VARS(cinfo); + + INPUT_BYTE(cinfo, c, return FALSE); + INPUT_BYTE(cinfo, c2, return FALSE); + if (c != 0xFF || c2 != (int) M_SOI) + ERREXIT2(cinfo, JERR_NO_SOI, c, c2); + + cinfo->unread_marker = c2; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +/* + * Read markers until SOS or EOI. + * + * Returns same codes as are defined for jpeg_consume_input: + * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + */ + +METHODDEF(int) +read_markers (j_decompress_ptr cinfo) +{ + /* Outer loop repeats once for each marker. */ + for (;;) { + /* Collect the marker proper, unless we already did. */ + /* NB: first_marker() enforces the requirement that SOI appear first. */ + if (cinfo->unread_marker == 0) { + if (! cinfo->marker->saw_SOI) { + if (! first_marker(cinfo)) + return JPEG_SUSPENDED; + } else { + if (! next_marker(cinfo)) + return JPEG_SUSPENDED; + } + } + /* At this point cinfo->unread_marker contains the marker code and the + * input point is just past the marker proper, but before any parameters. + * A suspension will cause us to return with this state still true. + */ + switch (cinfo->unread_marker) { + case M_SOI: + if (! get_soi(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + if (! get_sof(cinfo, FALSE, FALSE)) + return JPEG_SUSPENDED; + break; + + case M_SOF2: /* Progressive, Huffman */ + if (! get_sof(cinfo, TRUE, FALSE)) + return JPEG_SUSPENDED; + break; + + case M_SOF9: /* Extended sequential, arithmetic */ + if (! get_sof(cinfo, FALSE, TRUE)) + return JPEG_SUSPENDED; + break; + + case M_SOF10: /* Progressive, arithmetic */ + if (! get_sof(cinfo, TRUE, TRUE)) + return JPEG_SUSPENDED; + break; + + /* Currently unsupported SOFn types */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_JPG: /* Reserved for JPEG extensions */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker); + break; + + case M_SOS: + if (! get_sos(cinfo)) + return JPEG_SUSPENDED; + cinfo->unread_marker = 0; /* processed the marker */ + return JPEG_REACHED_SOS; + + case M_EOI: + TRACEMS(cinfo, 1, JTRC_EOI); + cinfo->unread_marker = 0; /* processed the marker */ + return JPEG_REACHED_EOI; + + case M_DAC: + if (! get_dac(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DHT: + if (! get_dht(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DQT: + if (! get_dqt(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DRI: + if (! get_dri(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_APP0: + case M_APP1: + case M_APP2: + case M_APP3: + case M_APP4: + case M_APP5: + case M_APP6: + case M_APP7: + case M_APP8: + case M_APP9: + case M_APP10: + case M_APP11: + case M_APP12: + case M_APP13: + case M_APP14: + case M_APP15: + if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[ + cinfo->unread_marker - (int) M_APP0]) (cinfo)) + return JPEG_SUSPENDED; + break; + + case M_COM: + if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) + return JPEG_SUSPENDED; + break; + + case M_RST0: /* these are all parameterless */ + case M_RST1: + case M_RST2: + case M_RST3: + case M_RST4: + case M_RST5: + case M_RST6: + case M_RST7: + case M_TEM: + TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker); + break; + + case M_DNL: /* Ignore DNL ... perhaps the wrong thing */ + if (! skip_variable(cinfo)) + return JPEG_SUSPENDED; + break; + + default: /* must be DHP, EXP, JPGn, or RESn */ + /* For now, we treat the reserved markers as fatal errors since they are + * likely to be used to signal incompatible JPEG Part 3 extensions. + * Once the JPEG 3 version-number marker is well defined, this code + * ought to change! + */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + break; + } + /* Successfully processed marker, so reset state variable */ + cinfo->unread_marker = 0; + } /* end loop */ +} + + +/* + * Read a restart marker, which is expected to appear next in the datastream; + * if the marker is not there, take appropriate recovery action. + * Returns FALSE if suspension is required. + * + * This is called by the entropy decoder after it has read an appropriate + * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder + * has already read a marker from the data source. Under normal conditions + * cinfo->unread_marker will be reset to 0 before returning; if not reset, + * it holds a marker which the decoder will be unable to read past. + */ + +METHODDEF(boolean) +read_restart_marker (j_decompress_ptr cinfo) +{ + /* Obtain a marker unless we already did. */ + /* Note that next_marker will complain if it skips any data. */ + if (cinfo->unread_marker == 0) { + if (! next_marker(cinfo)) + return FALSE; + } + + if (cinfo->unread_marker == + ((int) M_RST0 + cinfo->marker->next_restart_num)) { + /* Normal case --- swallow the marker and let entropy decoder continue */ + TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); + cinfo->unread_marker = 0; + } else { + /* Uh-oh, the restart markers have been messed up. */ + /* Let the data source manager determine how to resync. */ + if (! (*cinfo->src->resync_to_restart) (cinfo, + cinfo->marker->next_restart_num)) + return FALSE; + } + + /* Update next-restart state */ + cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; + + return TRUE; +} + + +/* + * This is the default resync_to_restart method for data source managers + * to use if they don't have any better approach. Some data source managers + * may be able to back up, or may have additional knowledge about the data + * which permits a more intelligent recovery strategy; such managers would + * presumably supply their own resync method. + * + * read_restart_marker calls resync_to_restart if it finds a marker other than + * the restart marker it was expecting. (This code is *not* used unless + * a nonzero restart interval has been declared.) cinfo->unread_marker is + * the marker code actually found (might be anything, except 0 or FF). + * The desired restart marker number (0..7) is passed as a parameter. + * This routine is supposed to apply whatever error recovery strategy seems + * appropriate in order to position the input stream to the next data segment. + * Note that cinfo->unread_marker is treated as a marker appearing before + * the current data-source input point; usually it should be reset to zero + * before returning. + * Returns FALSE if suspension is required. + * + * This implementation is substantially constrained by wanting to treat the + * input as a data stream; this means we can't back up. Therefore, we have + * only the following actions to work with: + * 1. Simply discard the marker and let the entropy decoder resume at next + * byte of file. + * 2. Read forward until we find another marker, discarding intervening + * data. (In theory we could look ahead within the current bufferload, + * without having to discard data if we don't find the desired marker. + * This idea is not implemented here, in part because it makes behavior + * dependent on buffer size and chance buffer-boundary positions.) + * 3. Leave the marker unread (by failing to zero cinfo->unread_marker). + * This will cause the entropy decoder to process an empty data segment, + * inserting dummy zeroes, and then we will reprocess the marker. + * + * #2 is appropriate if we think the desired marker lies ahead, while #3 is + * appropriate if the found marker is a future restart marker (indicating + * that we have missed the desired restart marker, probably because it got + * corrupted). + * We apply #2 or #3 if the found marker is a restart marker no more than + * two counts behind or ahead of the expected one. We also apply #2 if the + * found marker is not a legal JPEG marker code (it's certainly bogus data). + * If the found marker is a restart marker more than 2 counts away, we do #1 + * (too much risk that the marker is erroneous; with luck we will be able to + * resync at some future point). + * For any valid non-restart JPEG marker, we apply #3. This keeps us from + * overrunning the end of a scan. An implementation limited to single-scan + * files might find it better to apply #2 for markers other than EOI, since + * any other marker would have to be bogus data in that case. + */ + +GLOBAL(boolean) +jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired) +{ + int marker = cinfo->unread_marker; + int action = 1; + + /* Always put up a warning. */ + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + + /* Outer loop handles repeated decision after scanning forward. */ + for (;;) { + if (marker < (int) M_SOF0) + action = 2; /* invalid marker */ + else if (marker < (int) M_RST0 || marker > (int) M_RST7) + action = 3; /* valid non-restart marker */ + else { + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + marker == ((int) M_RST0 + ((desired+2) & 7))) + action = 3; /* one of the next two expected restarts */ + else if (marker == ((int) M_RST0 + ((desired-1) & 7)) || + marker == ((int) M_RST0 + ((desired-2) & 7))) + action = 2; /* a prior restart, so advance */ + else + action = 1; /* desired restart or too far away */ + } + TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); + switch (action) { + case 1: + /* Discard marker and let entropy decoder resume processing. */ + cinfo->unread_marker = 0; + return TRUE; + case 2: + /* Scan to the next marker, and repeat the decision loop. */ + if (! next_marker(cinfo)) + return FALSE; + marker = cinfo->unread_marker; + break; + case 3: + /* Return without advancing past this marker. */ + /* Entropy decoder will be forced to process an empty segment. */ + return TRUE; + } + } /* end loop */ +} + + +/* + * Reset marker processing state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + cinfo->comp_info = NULL; /* until allocated by get_sof */ + cinfo->input_scan_number = 0; /* no SOS seen yet */ + cinfo->unread_marker = 0; /* no pending marker */ + marker->pub.saw_SOI = FALSE; /* set internal state too */ + marker->pub.saw_SOF = FALSE; + marker->pub.discarded_bytes = 0; + marker->cur_marker = NULL; +} + + +/* + * Initialize the marker reader module. + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker; + int i; + + /* Create subobject in permanent pool */ + marker = (my_marker_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_marker_reader)); + cinfo->marker = (struct jpeg_marker_reader *) marker; + /* Initialize public method pointers */ + marker->pub.reset_marker_reader = reset_marker_reader; + marker->pub.read_markers = read_markers; + marker->pub.read_restart_marker = read_restart_marker; + /* Initialize COM/APPn processing. + * By default, we examine and then discard APP0 and APP14, + * but simply discard COM and all other APPn. + */ + marker->process_COM = skip_variable; + marker->length_limit_COM = 0; + for (i = 0; i < 16; i++) { + marker->process_APPn[i] = skip_variable; + marker->length_limit_APPn[i] = 0; + } + marker->process_APPn[0] = get_interesting_appn; + marker->process_APPn[14] = get_interesting_appn; + /* Reset marker processing state */ + reset_marker_reader(cinfo); +} + + +/* + * Control saving of COM and APPn markers into marker_list. + */ + +#ifdef SAVE_MARKERS_SUPPORTED + +GLOBAL(void) +jpeg_save_markers (j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + long maxlength; + jpeg_marker_parser_method processor; + + /* Length limit mustn't be larger than what we can allocate + * (should only be a concern in a 16-bit environment). + */ + maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct); + if (((long) length_limit) > maxlength) + length_limit = (unsigned int) maxlength; + + /* Choose processor routine to use. + * APP0/APP14 have special requirements. + */ + if (length_limit) { + processor = save_marker; + /* If saving APP0/APP14, save at least enough for our internal use. */ + if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN) + length_limit = APP0_DATA_LEN; + else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN) + length_limit = APP14_DATA_LEN; + } else { + processor = skip_variable; + /* If discarding APP0/APP14, use our regular on-the-fly processor. */ + if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14) + processor = get_interesting_appn; + } + + if (marker_code == (int) M_COM) { + marker->process_COM = processor; + marker->length_limit_COM = length_limit; + } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) { + marker->process_APPn[marker_code - (int) M_APP0] = processor; + marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit; + } else + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); +} + +#endif /* SAVE_MARKERS_SUPPORTED */ + + +/* + * Install a special processing method for COM or APPn markers. + */ + +GLOBAL(void) +jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + if (marker_code == (int) M_COM) + marker->process_COM = routine; + else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) + marker->process_APPn[marker_code - (int) M_APP0] = routine; + else + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); +} diff --git a/libjpegd/jdmaster.c b/libjpegd/jdmaster.c new file mode 100644 index 0000000..2802c5b --- /dev/null +++ b/libjpegd/jdmaster.c @@ -0,0 +1,557 @@ +/* + * jdmaster.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains master control logic for the JPEG decompressor. + * These routines are concerned with selecting the modules to be executed + * and with determining the number of passes and the work to be done in each + * pass. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef struct { + struct jpeg_decomp_master pub; /* public fields */ + + int pass_number; /* # of passes completed */ + + boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ + + /* Saved references to initialized quantizer modules, + * in case we need to switch modes. + */ + struct jpeg_color_quantizer * quantizer_1pass; + struct jpeg_color_quantizer * quantizer_2pass; +} my_decomp_master; + +typedef my_decomp_master * my_master_ptr; + + +/* + * Determine whether merged upsample/color conversion should be used. + * CRUCIAL: this must match the actual capabilities of jdmerge.c! + */ + +LOCAL(boolean) +use_merged_upsample (j_decompress_ptr cinfo) +{ +#ifdef UPSAMPLE_MERGING_SUPPORTED + /* Merging is the equivalent of plain box-filter upsampling */ + if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) + return FALSE; + /* jdmerge.c only supports YCC=>RGB color conversion */ + if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || + cinfo->out_color_space != JCS_RGB || + cinfo->out_color_components != RGB_PIXELSIZE) + return FALSE; + /* and it only handles 2h1v or 2h2v sampling ratios */ + if (cinfo->comp_info[0].h_samp_factor != 2 || + cinfo->comp_info[1].h_samp_factor != 1 || + cinfo->comp_info[2].h_samp_factor != 1 || + cinfo->comp_info[0].v_samp_factor > 2 || + cinfo->comp_info[1].v_samp_factor != 1 || + cinfo->comp_info[2].v_samp_factor != 1) + return FALSE; + /* furthermore, it doesn't work if we've scaled the IDCTs differently */ + if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size || + cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size || + cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size) + return FALSE; + /* ??? also need to test for upsample-time rescaling, when & if supported */ + return TRUE; /* by golly, it'll work... */ +#else + return FALSE; +#endif +} + + +/* + * Compute output image dimensions and related values. + * NOTE: this is exported for possible use by application. + * Hence it mustn't do anything that can't be done twice. + * Also note that it may be called before the master module is initialized! + */ + +GLOBAL(void) +jpeg_calc_output_dimensions (j_decompress_ptr cinfo) +/* Do computations that are needed before master selection phase */ +{ +#ifdef IDCT_SCALING_SUPPORTED + int ci; + jpeg_component_info *compptr; +#endif + + /* Prevent application from calling me at wrong times */ + if (cinfo->global_state != DSTATE_READY) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + +#ifdef IDCT_SCALING_SUPPORTED + + /* Compute actual output image dimensions and DCT scaling choices. */ + if (cinfo->scale_num * 8 <= cinfo->scale_denom) { + /* Provide 1/8 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 8L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 8L); + cinfo->min_DCT_scaled_size = 1; + } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { + /* Provide 1/4 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 4L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 4L); + cinfo->min_DCT_scaled_size = 2; + } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { + /* Provide 1/2 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 2L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 2L); + cinfo->min_DCT_scaled_size = 4; + } else { + /* Provide 1/1 scaling */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + cinfo->min_DCT_scaled_size = DCTSIZE; + } + /* In selecting the actual DCT scaling for each component, we try to + * scale up the chroma components via IDCT scaling rather than upsampling. + * This saves time if the upsampler gets to use 1:1 scaling. + * Note this code assumes that the supported DCT scalings are powers of 2. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + int ssize = cinfo->min_DCT_scaled_size; + while (ssize < DCTSIZE && + (compptr->h_samp_factor * ssize * 2 <= + cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) && + (compptr->v_samp_factor * ssize * 2 <= + cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) { + ssize = ssize * 2; + } + compptr->DCT_scaled_size = ssize; + } + + /* Recompute downsampled dimensions of components; + * application needs to know these if using raw downsampled data. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Size in samples, after IDCT scaling */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * + (long) (compptr->h_samp_factor * compptr->DCT_scaled_size), + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * + (long) (compptr->v_samp_factor * compptr->DCT_scaled_size), + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + } + +#else /* !IDCT_SCALING_SUPPORTED */ + + /* Hardwire it to "no scaling" */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, + * and has computed unscaled downsampled_width and downsampled_height. + */ + +#endif /* IDCT_SCALING_SUPPORTED */ + + /* Report number of components in selected colorspace. */ + /* Probably this should be in the color conversion module... */ + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + break; + case JCS_RGB: +#if RGB_PIXELSIZE != 3 + cinfo->out_color_components = RGB_PIXELSIZE; + break; +#endif /* else share code with YCbCr */ + case JCS_YCbCr: + cinfo->out_color_components = 3; + break; + case JCS_CMYK: + case JCS_YCCK: + cinfo->out_color_components = 4; + break; + default: /* else must be same colorspace as in file */ + cinfo->out_color_components = cinfo->num_components; + break; + } + cinfo->output_components = (cinfo->quantize_colors ? 1 : + cinfo->out_color_components); + + /* See if upsampler will want to emit more than one row at a time */ + if (use_merged_upsample(cinfo)) + cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; + else + cinfo->rec_outbuf_height = 1; +} + + +/* + * Several decompression processes need to range-limit values to the range + * 0..MAXJSAMPLE; the input value may fall somewhat outside this range + * due to noise introduced by quantization, roundoff error, etc. These + * processes are inner loops and need to be as fast as possible. On most + * machines, particularly CPUs with pipelines or instruction prefetch, + * a (subscript-check-less) C table lookup + * x = sample_range_limit[x]; + * is faster than explicit tests + * if (x < 0) x = 0; + * else if (x > MAXJSAMPLE) x = MAXJSAMPLE; + * These processes all use a common table prepared by the routine below. + * + * For most steps we can mathematically guarantee that the initial value + * of x is within MAXJSAMPLE+1 of the legal range, so a table running from + * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial + * limiting step (just after the IDCT), a wildly out-of-range value is + * possible if the input data is corrupt. To avoid any chance of indexing + * off the end of memory and getting a bad-pointer trap, we perform the + * post-IDCT limiting thus: + * x = range_limit[x & MASK]; + * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit + * samples. Under normal circumstances this is more than enough range and + * a correct output will be generated; with bogus input data the mask will + * cause wraparound, and we will safely generate a bogus-but-in-range output. + * For the post-IDCT step, we want to convert the data from signed to unsigned + * representation by adding CENTERJSAMPLE at the same time that we limit it. + * So the post-IDCT limiting table ends up looking like this: + * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, + * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), + * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), + * 0,1,...,CENTERJSAMPLE-1 + * Negative inputs select values from the upper half of the table after + * masking. + * + * We can save some space by overlapping the start of the post-IDCT table + * with the simpler range limiting table. The post-IDCT table begins at + * sample_range_limit + CENTERJSAMPLE. + * + * Note that the table is allocated in near data space on PCs; it's small + * enough and used often enough to justify this. + */ + +LOCAL(void) +prepare_range_limit_table (j_decompress_ptr cinfo) +/* Allocate and fill in the sample_range_limit table */ +{ + JSAMPLE * table; + int i; + + table = (JSAMPLE *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE)); + table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ + cinfo->sample_range_limit = table; + /* First segment of "simple" table: limit[x] = 0 for x < 0 */ + MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + /* Main part of "simple" table: limit[x] = x */ + for (i = 0; i <= MAXJSAMPLE; i++) + table[i] = (JSAMPLE) i; + table += CENTERJSAMPLE; /* Point to where post-IDCT table starts */ + /* End of simple table, rest of first half of post-IDCT table */ + for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) + table[i] = MAXJSAMPLE; + /* Second half of post-IDCT table */ + MEMZERO(table + (2 * (MAXJSAMPLE+1)), + (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE)); + MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), + cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE)); +} + + +/* + * Master selection of decompression modules. + * This is done once at jpeg_start_decompress time. We determine + * which modules will be used and give them appropriate initialization calls. + * We also initialize the decompressor input side to begin consuming data. + * + * Since jpeg_read_header has finished, we know what is in the SOF + * and (first) SOS markers. We also have all the application parameter + * settings. + */ + +LOCAL(void) +master_selection (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + boolean use_c_buffer; + long samplesperrow; + JDIMENSION jd_samplesperrow; + + /* Initialize dimensions and other stuff */ + jpeg_calc_output_dimensions(cinfo); + prepare_range_limit_table(cinfo); + + /* Width of an output scanline must be representable as JDIMENSION. */ + samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components; + jd_samplesperrow = (JDIMENSION) samplesperrow; + if ((long) jd_samplesperrow != samplesperrow) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + + /* Initialize my private state */ + master->pass_number = 0; + master->using_merged_upsample = use_merged_upsample(cinfo); + + /* Color quantizer selection */ + master->quantizer_1pass = NULL; + master->quantizer_2pass = NULL; + /* No mode changes if not using buffered-image mode. */ + if (! cinfo->quantize_colors || ! cinfo->buffered_image) { + cinfo->enable_1pass_quant = FALSE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; + } + if (cinfo->quantize_colors) { + if (cinfo->raw_data_out) + ERREXIT(cinfo, JERR_NOTIMPL); + /* 2-pass quantizer only works in 3-component color space. */ + if (cinfo->out_color_components != 3) { + cinfo->enable_1pass_quant = TRUE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; + cinfo->colormap = NULL; + } else if (cinfo->colormap != NULL) { + cinfo->enable_external_quant = TRUE; + } else if (cinfo->two_pass_quantize) { + cinfo->enable_2pass_quant = TRUE; + } else { + cinfo->enable_1pass_quant = TRUE; + } + + if (cinfo->enable_1pass_quant) { +#ifdef QUANT_1PASS_SUPPORTED + jinit_1pass_quantizer(cinfo); + master->quantizer_1pass = cinfo->cquantize; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + + /* We use the 2-pass code to map to external colormaps. */ + if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) { +#ifdef QUANT_2PASS_SUPPORTED + jinit_2pass_quantizer(cinfo); + master->quantizer_2pass = cinfo->cquantize; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + /* If both quantizers are initialized, the 2-pass one is left active; + * this is necessary for starting with quantization to an external map. + */ + } + + /* Post-processing: in particular, color conversion first */ + if (! cinfo->raw_data_out) { + if (master->using_merged_upsample) { +#ifdef UPSAMPLE_MERGING_SUPPORTED + jinit_merged_upsampler(cinfo); /* does color conversion too */ +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + jinit_color_deconverter(cinfo); + jinit_upsampler(cinfo); + } + jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); + } + /* Inverse DCT */ + jinit_inverse_dct(cinfo); + /* Entropy decoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + ERREXIT(cinfo, JERR_ARITH_NOTIMPL); + } else { + if (cinfo->progressive_mode) { +#ifdef D_PROGRESSIVE_SUPPORTED + jinit_phuff_decoder(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else + jinit_huff_decoder(cinfo); + } + + /* Initialize principal buffer controllers. */ + use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; + jinit_d_coef_controller(cinfo, use_c_buffer); + + if (! cinfo->raw_data_out) + jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Initialize input side of decompressor to consume first scan. */ + (*cinfo->inputctl->start_input_pass) (cinfo); + +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* If jpeg_start_decompress will read the whole file, initialize + * progress monitoring appropriately. The input step is counted + * as one pass. + */ + if (cinfo->progress != NULL && ! cinfo->buffered_image && + cinfo->inputctl->has_multiple_scans) { + int nscans; + /* Estimate number of scans to set pass_limit. */ + if (cinfo->progressive_mode) { + /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ + nscans = 2 + 3 * cinfo->num_components; + } else { + /* For a nonprogressive multiscan file, estimate 1 scan per component. */ + nscans = cinfo->num_components; + } + cinfo->progress->pass_counter = 0L; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + cinfo->progress->completed_passes = 0; + cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); + /* Count the input pass as done */ + master->pass_number++; + } +#endif /* D_MULTISCAN_FILES_SUPPORTED */ +} + + +/* + * Per-pass setup. + * This is called at the beginning of each output pass. We determine which + * modules will be active during this pass and give them appropriate + * start_pass calls. We also set is_dummy_pass to indicate whether this + * is a "real" output pass or a dummy pass for color quantization. + * (In the latter case, jdapistd.c will crank the pass to completion.) + */ + +METHODDEF(void) +prepare_for_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (master->pub.is_dummy_pass) { +#ifdef QUANT_2PASS_SUPPORTED + /* Final pass of 2-pass quantization */ + master->pub.is_dummy_pass = FALSE; + (*cinfo->cquantize->start_pass) (cinfo, FALSE); + (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); + (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* QUANT_2PASS_SUPPORTED */ + } else { + if (cinfo->quantize_colors && cinfo->colormap == NULL) { + /* Select new quantization method */ + if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { + cinfo->cquantize = master->quantizer_2pass; + master->pub.is_dummy_pass = TRUE; + } else if (cinfo->enable_1pass_quant) { + cinfo->cquantize = master->quantizer_1pass; + } else { + ERREXIT(cinfo, JERR_MODE_CHANGE); + } + } + (*cinfo->idct->start_pass) (cinfo); + (*cinfo->coef->start_output_pass) (cinfo); + if (! cinfo->raw_data_out) { + if (! master->using_merged_upsample) + (*cinfo->cconvert->start_pass) (cinfo); + (*cinfo->upsample->start_pass) (cinfo); + if (cinfo->quantize_colors) + (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); + (*cinfo->post->start_pass) (cinfo, + (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + } + } + + /* Set up progress monitor's pass info if present */ + if (cinfo->progress != NULL) { + cinfo->progress->completed_passes = master->pass_number; + cinfo->progress->total_passes = master->pass_number + + (master->pub.is_dummy_pass ? 2 : 1); + /* In buffered-image mode, we assume one more output pass if EOI not + * yet reached, but no more passes if EOI has been reached. + */ + if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { + cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); + } + } +} + + +/* + * Finish up at end of an output pass. + */ + +METHODDEF(void) +finish_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (cinfo->quantize_colors) + (*cinfo->cquantize->finish_pass) (cinfo); + master->pass_number++; +} + + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Switch to a new external colormap between output passes. + */ + +GLOBAL(void) +jpeg_new_colormap (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + /* Prevent application from calling me at wrong times */ + if (cinfo->global_state != DSTATE_BUFIMAGE) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (cinfo->quantize_colors && cinfo->enable_external_quant && + cinfo->colormap != NULL) { + /* Select 2-pass quantizer for external colormap use */ + cinfo->cquantize = master->quantizer_2pass; + /* Notify quantizer of colormap change */ + (*cinfo->cquantize->new_color_map) (cinfo); + master->pub.is_dummy_pass = FALSE; /* just in case */ + } else + ERREXIT(cinfo, JERR_MODE_CHANGE); +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + + +/* + * Initialize master decompression control and select active modules. + * This is performed at the start of jpeg_start_decompress. + */ + +GLOBAL(void) +jinit_master_decompress (j_decompress_ptr cinfo) +{ + my_master_ptr master; + + master = (my_master_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_decomp_master)); + cinfo->master = (struct jpeg_decomp_master *) master; + master->pub.prepare_for_output_pass = prepare_for_output_pass; + master->pub.finish_output_pass = finish_output_pass; + + master->pub.is_dummy_pass = FALSE; + + master_selection(cinfo); +} diff --git a/libjpegd/jdmerge.c b/libjpegd/jdmerge.c new file mode 100644 index 0000000..3744446 --- /dev/null +++ b/libjpegd/jdmerge.c @@ -0,0 +1,400 @@ +/* + * jdmerge.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains code for merged upsampling/color conversion. + * + * This file combines functions from jdsample.c and jdcolor.c; + * read those files first to understand what's going on. + * + * When the chroma components are to be upsampled by simple replication + * (ie, box filtering), we can save some work in color conversion by + * calculating all the output pixels corresponding to a pair of chroma + * samples at one time. In the conversion equations + * R = Y + K1 * Cr + * G = Y + K2 * Cb + K3 * Cr + * B = Y + K4 * Cb + * only the Y term varies among the group of pixels corresponding to a pair + * of chroma samples, so the rest of the terms can be calculated just once. + * At typical sampling ratios, this eliminates half or three-quarters of the + * multiplications needed for color conversion. + * + * This file currently provides implementations for the following cases: + * YCbCr => RGB color conversion only. + * Sampling ratios of 2h1v or 2h2v. + * No scaling needed at upsample time. + * Corner-aligned (non-CCIR601) sampling alignment. + * Other special cases could be added, but in most applications these are + * the only common cases. (For uncommon cases we fall back on the more + * general code in jdsample.c and jdcolor.c.) + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef UPSAMPLE_MERGING_SUPPORTED + + +/* Private subobject */ + +typedef struct { + struct jpeg_upsampler pub; /* public fields */ + + /* Pointer to routine to do actual upsampling/conversion of one row group */ + JMETHOD(void, upmethod, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf)); + + /* Private state for YCC->RGB conversion */ + int * Cr_r_tab; /* => table for Cr to R conversion */ + int * Cb_b_tab; /* => table for Cb to B conversion */ + INT32 * Cr_g_tab; /* => table for Cr to G conversion */ + INT32 * Cb_g_tab; /* => table for Cb to G conversion */ + + /* For 2:1 vertical sampling, we produce two output rows at a time. + * We need a "spare" row buffer to hold the second output row if the + * application provides just a one-row buffer; we also use the spare + * to discard the dummy last row if the image height is odd. + */ + JSAMPROW spare_row; + boolean spare_full; /* T if spare buffer is occupied */ + + JDIMENSION out_row_width; /* samples per output row */ + JDIMENSION rows_to_go; /* counts rows remaining in image */ +} my_upsampler; + +typedef my_upsampler * my_upsample_ptr; + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. + * This is taken directly from jdcolor.c; see that file for more info. + */ + +LOCAL(void) +build_ycc_rgb_table (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + int i; + INT32 x; + SHIFT_TEMPS + + upsample->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + upsample->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + upsample->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + upsample->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + upsample->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.77200 * x */ + upsample->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.71414 * x */ + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + } +} + + +/* + * Initialize for an upsampling pass. + */ + +METHODDEF(void) +start_pass_merged_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the spare buffer empty */ + upsample->spare_full = FALSE; + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; +} + + +/* + * Control routine to do upsampling (and color conversion). + * + * The control routine just handles the row buffering considerations. + */ + +METHODDEF(void) +merged_2v_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 2:1 vertical sampling case: may need a spare row. */ +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + JSAMPROW work_ptrs[2]; + JDIMENSION num_rows; /* number of rows returned to caller */ + + if (upsample->spare_full) { + /* If we have a spare row saved from a previous cycle, just return it. */ + jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, + 1, upsample->out_row_width); + num_rows = 1; + upsample->spare_full = FALSE; + } else { + /* Figure number of rows to return to caller. */ + num_rows = 2; + /* Not more than the distance to the end of the image. */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + /* Create output pointer array for upsampler. */ + work_ptrs[0] = output_buf[*out_row_ctr]; + if (num_rows > 1) { + work_ptrs[1] = output_buf[*out_row_ctr + 1]; + } else { + work_ptrs[1] = upsample->spare_row; + upsample->spare_full = TRUE; + } + /* Now do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); + } + + /* Adjust counts */ + *out_row_ctr += num_rows; + upsample->rows_to_go -= num_rows; + /* When the buffer is emptied, declare this input row group consumed */ + if (! upsample->spare_full) + (*in_row_group_ctr)++; +} + + +METHODDEF(void) +merged_1v_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 1:1 vertical sampling case: much easier, never need a spare row. */ +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Just do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, + output_buf + *out_row_ctr); + /* Adjust counts */ + (*out_row_ctr)++; + (*in_row_group_ctr)++; +} + + +/* + * These are the routines invoked by the control routines to do + * the actual upsampling/conversion. One row group is processed per call. + * + * Note: since we may be writing directly into application-supplied buffers, + * we have to be honest about the output width; we can't assume the buffer + * has been rounded up to an even width. + */ + + +/* + * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical. + */ + +METHODDEF(void) +h2v1_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + register int y, cred, cgreen, cblue; + int cb, cr; + register JSAMPROW outptr; + JSAMPROW inptr0, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + int * Crrtab = upsample->Cr_r_tab; + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + SHIFT_TEMPS + + inptr0 = input_buf[0][in_row_group_ctr]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr = output_buf[0]; + /* Loop for each pair of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + /* Do the chroma part of the calculation */ + cb = GETJSAMPLE(*inptr1++); + cr = GETJSAMPLE(*inptr2++); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + /* Fetch 2 Y values and emit 2 pixels */ + y = GETJSAMPLE(*inptr0++); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr0++); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr0); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + } +} + + +/* + * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical. + */ + +METHODDEF(void) +h2v2_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + register int y, cred, cgreen, cblue; + int cb, cr; + register JSAMPROW outptr0, outptr1; + JSAMPROW inptr00, inptr01, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + int * Crrtab = upsample->Cr_r_tab; + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + SHIFT_TEMPS + + inptr00 = input_buf[0][in_row_group_ctr*2]; + inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr0 = output_buf[0]; + outptr1 = output_buf[1]; + /* Loop for each group of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + /* Do the chroma part of the calculation */ + cb = GETJSAMPLE(*inptr1++); + cr = GETJSAMPLE(*inptr2++); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + /* Fetch 4 Y values and emit 4 pixels */ + y = GETJSAMPLE(*inptr00++); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + outptr0 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr00++); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + outptr0 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr01++); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr01++); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr00); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + y = GETJSAMPLE(*inptr01); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + } +} + + +/* + * Module initialization routine for merged upsampling/color conversion. + * + * NB: this is called under the conditions determined by use_merged_upsample() + * in jdmaster.c. That routine MUST correspond to the actual capabilities + * of this module; no safety checks are made here. + */ + +GLOBAL(void) +jinit_merged_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_merged_upsample; + upsample->pub.need_context_rows = FALSE; + + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + + if (cinfo->max_v_samp_factor == 2) { + upsample->pub.upsample = merged_2v_upsample; + upsample->upmethod = h2v2_merged_upsample; + /* Allocate a spare row buffer */ + upsample->spare_row = (JSAMPROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (upsample->out_row_width * SIZEOF(JSAMPLE))); + } else { + upsample->pub.upsample = merged_1v_upsample; + upsample->upmethod = h2v1_merged_upsample; + /* No spare row needed */ + upsample->spare_row = NULL; + } + + build_ycc_rgb_table(cinfo); +} + +#endif /* UPSAMPLE_MERGING_SUPPORTED */ diff --git a/libjpegd/jdphuff.c b/libjpegd/jdphuff.c new file mode 100644 index 0000000..2267809 --- /dev/null +++ b/libjpegd/jdphuff.c @@ -0,0 +1,668 @@ +/* + * jdphuff.c + * + * Copyright (C) 1995-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy decoding routines for progressive JPEG. + * + * Much of the complexity here has to do with supporting input suspension. + * If the data source module demands suspension, we want to be able to back + * up to the start of the current MCU. To do this, we copy state variables + * into local working storage, and update them back to the permanent + * storage only upon successful completion of an MCU. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdhuff.h" /* Declarations shared with jdhuff.c */ + + +#ifdef D_PROGRESSIVE_SUPPORTED + +/* + * Expanded entropy decoder object for progressive Huffman decoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + unsigned int EOBRUN; /* remaining EOBs in EOBRUN */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).EOBRUN = (src).EOBRUN, \ + (dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_decoder pub; /* public fields */ + + /* These fields are loaded into local variables at start of each MCU. + * In case of suspension, we exit WITHOUT updating them. + */ + bitread_perm_state bitstate; /* Bit buffer at start of MCU */ + savable_state saved; /* Other state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + d_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; + + d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */ +} phuff_entropy_decoder; + +typedef phuff_entropy_decoder * phuff_entropy_ptr; + +/* Forward declarations */ +METHODDEF(boolean) decode_mcu_DC_first JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) decode_mcu_AC_first JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) decode_mcu_DC_refine JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) decode_mcu_AC_refine JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); + + +/* + * Initialize for a Huffman-compressed scan. + */ + +METHODDEF(void) +start_pass_phuff_decoder (j_decompress_ptr cinfo) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + boolean is_DC_band, bad; + int ci, coefi, tbl; + int *coef_bit_ptr; + jpeg_component_info * compptr; + + is_DC_band = (cinfo->Ss == 0); + + /* Validate scan parameters */ + bad = FALSE; + if (is_DC_band) { + if (cinfo->Se != 0) + bad = TRUE; + } else { + /* need not check Ss/Se < 0 since they came from unsigned bytes */ + if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2) + bad = TRUE; + /* AC scans may have only one component */ + if (cinfo->comps_in_scan != 1) + bad = TRUE; + } + if (cinfo->Ah != 0) { + /* Successive approximation refinement scan: must have Al = Ah-1. */ + if (cinfo->Al != cinfo->Ah-1) + bad = TRUE; + } + if (cinfo->Al > 13) /* need not check for < 0 */ + bad = TRUE; + /* Arguably the maximum Al value should be less than 13 for 8-bit precision, + * but the spec doesn't say so, and we try to be liberal about what we + * accept. Note: large Al values could result in out-of-range DC + * coefficients during early scans, leading to bizarre displays due to + * overflows in the IDCT math. But we won't crash. + */ + if (bad) + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); + /* Update progression status, and verify that scan order is legal. + * Note that inter-scan inconsistencies are treated as warnings + * not fatal errors ... not clear if this is right way to behave. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + int cindex = cinfo->cur_comp_info[ci]->component_index; + coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + if (cinfo->Ah != expected) + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + coef_bit_ptr[coefi] = cinfo->Al; + } + } + + /* Select MCU decoding routine */ + if (cinfo->Ah == 0) { + if (is_DC_band) + entropy->pub.decode_mcu = decode_mcu_DC_first; + else + entropy->pub.decode_mcu = decode_mcu_AC_first; + } else { + if (is_DC_band) + entropy->pub.decode_mcu = decode_mcu_DC_refine; + else + entropy->pub.decode_mcu = decode_mcu_AC_refine; + } + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Make sure requested tables are present, and compute derived tables. + * We may build same derived table more than once, but it's not expensive. + */ + if (is_DC_band) { + if (cinfo->Ah == 0) { /* DC refinement needs no table */ + tbl = compptr->dc_tbl_no; + jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, + & entropy->derived_tbls[tbl]); + } + } else { + tbl = compptr->ac_tbl_no; + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + & entropy->derived_tbls[tbl]); + /* remember the single active table */ + entropy->ac_derived_tbl = entropy->derived_tbls[tbl]; + } + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Initialize bitread state variables */ + entropy->bitstate.bits_left = 0; + entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ + entropy->pub.insufficient_data = FALSE; + + /* Initialize private state variables */ + entropy->saved.EOBRUN = 0; + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Figure F.12: extend sign bit. + * On some machines, a shift and add will be faster than a table lookup. + */ + +#ifdef AVOID_TABLES + +#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) + +#else + +#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) + +static const int extend_test[16] = /* entry n is 2**(n-1) */ + { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, + 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; + +static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ + { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, + ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, + ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, + ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; + +#endif /* AVOID_TABLES */ + + +/* + * Check for a restart marker & resynchronize decoder. + * Returns FALSE if must suspend. + */ + +LOCAL(boolean) +process_restart (j_decompress_ptr cinfo) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int ci; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + entropy->bitstate.bits_left = 0; + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + return FALSE; + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + /* Re-init EOB run count, too */ + entropy->saved.EOBRUN = 0; + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + + /* Reset out-of-data flag, unless read_restart_marker left us smack up + * against a marker. In that case we will end up treating the next data + * segment as empty, and we can avoid producing bogus output pixels by + * leaving the flag set. + */ + if (cinfo->unread_marker == 0) + entropy->pub.insufficient_data = FALSE; + + return TRUE; +} + + +/* + * Huffman MCU decoding. + * Each of these routines decodes and returns one MCU's worth of + * Huffman-compressed coefficients. + * The coefficients are reordered from zigzag order into natural array order, + * but are not dequantized. + * + * The i'th block of the MCU is stored into the block pointed to by + * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. + * + * We return FALSE if data source requested suspension. In that case no + * changes have been made to permanent state. (Exception: some output + * coefficients may already have been assigned. This is harmless for + * spectral selection, since we'll just re-assign them on the next call. + * Successive approximation AC refinement has to be more careful, however.) + */ + +/* + * MCU decoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int Al = cinfo->Al; + register int s, r; + int blkn, ci; + JBLOCKROW block; + BITREAD_STATE_VARS; + savable_state state; + d_derived_tbl * tbl; + jpeg_component_info * compptr; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(state, entropy->saved); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + tbl = entropy->derived_tbls[compptr->dc_tbl_no]; + + /* Decode a single block's worth of coefficients */ + + /* Section F.2.2.1: decode the DC coefficient difference */ + HUFF_DECODE(s, br_state, tbl, return FALSE, label1); + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + } + + /* Convert DC difference to actual value, update last_dc_val */ + s += state.last_dc_val[ci]; + state.last_dc_val[ci] = s; + /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */ + (*block)[0] = (JCOEF) (s << Al); + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int Se = cinfo->Se; + int Al = cinfo->Al; + register int s, k, r; + unsigned int EOBRUN; + JBLOCKROW block; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state. + * We can avoid loading/saving bitread state if in an EOB run. + */ + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + + /* There is always only one block per MCU */ + + if (EOBRUN > 0) /* if it's a band of zeroes... */ + EOBRUN--; /* ...process it now (we do nothing) */ + else { + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + block = MCU_data[0]; + tbl = entropy->ac_derived_tbl; + + for (k = cinfo->Ss; k <= Se; k++) { + HUFF_DECODE(s, br_state, tbl, return FALSE, label2); + r = s >> 4; + s &= 15; + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + /* Scale and output coefficient in natural (dezigzagged) order */ + (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al); + } else { + if (r == 15) { /* ZRL */ + k += 15; /* skip 15 zeroes in band */ + } else { /* EOBr, run length is 2^r + appended bits */ + EOBRUN = 1 << r; + if (r) { /* EOBr, r > 0 */ + CHECK_BIT_BUFFER(br_state, r, return FALSE); + r = GET_BITS(r); + EOBRUN += r; + } + EOBRUN--; /* this band is processed at this moment */ + break; /* force end-of-band */ + } + } + } + + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + } + + /* Completed MCU, so update state */ + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, although the spec + * is not very clear on the point. + */ + +METHODDEF(boolean) +decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + int blkn; + JBLOCKROW block; + BITREAD_STATE_VARS; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* Not worth the cycles to check insufficient_data here, + * since we will not change the data anyway if we read zeroes. + */ + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + + /* Encoded data is simply the next bit of the two's-complement DC value */ + CHECK_BIT_BUFFER(br_state, 1, return FALSE); + if (GET_BITS(1)) + (*block)[0] |= p1; + /* Note: since we use |=, repeating the assignment later is safe */ + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int Se = cinfo->Se; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + int m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + register int s, k, r; + unsigned int EOBRUN; + JBLOCKROW block; + JCOEFPTR thiscoef; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + int num_newnz; + int newnz_pos[DCTSIZE2]; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, don't modify the MCU. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + + /* There is always only one block per MCU */ + block = MCU_data[0]; + tbl = entropy->ac_derived_tbl; + + /* If we are forced to suspend, we must undo the assignments to any newly + * nonzero coefficients in the block, because otherwise we'd get confused + * next time about which coefficients were already nonzero. + * But we need not undo addition of bits to already-nonzero coefficients; + * instead, we can test the current bit to see if we already did it. + */ + num_newnz = 0; + + /* initialize coefficient loop counter to start of band */ + k = cinfo->Ss; + + if (EOBRUN == 0) { + for (; k <= Se; k++) { + HUFF_DECODE(s, br_state, tbl, goto undoit, label3); + r = s >> 4; + s &= 15; + if (s) { + if (s != 1) /* size of new coef should always be 1 */ + WARNMS(cinfo, JWRN_HUFF_BAD_CODE); + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) + s = p1; /* newly nonzero coef is positive */ + else + s = m1; /* newly nonzero coef is negative */ + } else { + if (r != 15) { + EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */ + if (r) { + CHECK_BIT_BUFFER(br_state, r, goto undoit); + r = GET_BITS(r); + EOBRUN += r; + } + break; /* rest of block is handled by EOB logic */ + } + /* note s = 0 for processing ZRL */ + } + /* Advance over already-nonzero coefs and r still-zero coefs, + * appending correction bits to the nonzeroes. A correction bit is 1 + * if the absolute value of the coefficient must be increased. + */ + do { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef != 0) { + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) { + if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ + if (*thiscoef >= 0) + *thiscoef += p1; + else + *thiscoef += m1; + } + } + } else { + if (--r < 0) + break; /* reached target zero coefficient */ + } + k++; + } while (k <= Se); + if (s) { + int pos = jpeg_natural_order[k]; + /* Output newly nonzero coefficient */ + (*block)[pos] = (JCOEF) s; + /* Remember its position in case we have to suspend */ + newnz_pos[num_newnz++] = pos; + } + } + } + + if (EOBRUN > 0) { + /* Scan any remaining coefficient positions after the end-of-band + * (the last newly nonzero coefficient, if any). Append a correction + * bit to each already-nonzero coefficient. A correction bit is 1 + * if the absolute value of the coefficient must be increased. + */ + for (; k <= Se; k++) { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef != 0) { + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) { + if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ + if (*thiscoef >= 0) + *thiscoef += p1; + else + *thiscoef += m1; + } + } + } + } + /* Count one block completed in EOB run */ + EOBRUN--; + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; + +undoit: + /* Re-zero any output coefficients that we made newly nonzero */ + while (num_newnz > 0) + (*block)[newnz_pos[--num_newnz]] = 0; + + return FALSE; +} + + +/* + * Module initialization routine for progressive Huffman entropy decoding. + */ + +GLOBAL(void) +jinit_phuff_decoder (j_decompress_ptr cinfo) +{ + phuff_entropy_ptr entropy; + int *coef_bit_ptr; + int ci, i; + + entropy = (phuff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(phuff_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass_phuff_decoder; + + /* Mark derived tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->derived_tbls[i] = NULL; + } + + /* Create progression status table */ + cinfo->coef_bits = (int (*)[DCTSIZE2]) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components*DCTSIZE2*SIZEOF(int)); + coef_bit_ptr = & cinfo->coef_bits[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + for (i = 0; i < DCTSIZE2; i++) + *coef_bit_ptr++ = -1; +} + +#endif /* D_PROGRESSIVE_SUPPORTED */ diff --git a/libjpegd/jdpostct.c b/libjpegd/jdpostct.c new file mode 100644 index 0000000..571563d --- /dev/null +++ b/libjpegd/jdpostct.c @@ -0,0 +1,290 @@ +/* + * jdpostct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the decompression postprocessing controller. + * This controller manages the upsampling, color conversion, and color + * quantization/reduction steps; specifically, it controls the buffering + * between upsample/color conversion and color quantization/reduction. + * + * If no color quantization/reduction is required, then this module has no + * work to do, and it just hands off to the upsample/color conversion code. + * An integrated upsample/convert/quantize process would replace this module + * entirely. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_post_controller pub; /* public fields */ + + /* Color quantization source buffer: this holds output data from + * the upsample/color conversion step to be passed to the quantizer. + * For two-pass color quantization, we need a full-image buffer; + * for one-pass operation, a strip buffer is sufficient. + */ + jvirt_sarray_ptr whole_image; /* virtual array, or NULL if one-pass */ + JSAMPARRAY buffer; /* strip buffer, or current strip of virtual */ + JDIMENSION strip_height; /* buffer size in rows */ + /* for two-pass mode only: */ + JDIMENSION starting_row; /* row # of first row in current strip */ + JDIMENSION next_row; /* index of next row to fill/empty in strip */ +} my_post_controller; + +typedef my_post_controller * my_post_ptr; + + +/* Forward declarations */ +METHODDEF(void) post_process_1pass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +#ifdef QUANT_2PASS_SUPPORTED +METHODDEF(void) post_process_prepass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +METHODDEF(void) post_process_2pass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +#endif + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (cinfo->quantize_colors) { + /* Single-pass processing with color quantization. */ + post->pub.post_process_data = post_process_1pass; + /* We could be doing buffered-image output before starting a 2-pass + * color quantization; in that case, jinit_d_post_controller did not + * allocate a strip buffer. Use the virtual-array buffer as workspace. + */ + if (post->buffer == NULL) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + (JDIMENSION) 0, post->strip_height, TRUE); + } + } else { + /* For single-pass processing without color quantization, + * I have no work to do; just call the upsampler directly. + */ + post->pub.post_process_data = cinfo->upsample->upsample; + } + break; +#ifdef QUANT_2PASS_SUPPORTED + case JBUF_SAVE_AND_PASS: + /* First pass of 2-pass quantization */ + if (post->whole_image == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + post->pub.post_process_data = post_process_prepass; + break; + case JBUF_CRANK_DEST: + /* Second pass of 2-pass quantization */ + if (post->whole_image == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + post->pub.post_process_data = post_process_2pass; + break; +#endif /* QUANT_2PASS_SUPPORTED */ + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } + post->starting_row = post->next_row = 0; +} + + +/* + * Process some data in the one-pass (strip buffer) case. + * This is used for color precision reduction as well as one-pass quantization. + */ + +METHODDEF(void) +post_process_1pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION num_rows, max_rows; + + /* Fill the buffer, but not more than what we can dump out in one go. */ + /* Note we rely on the upsampler to detect bottom of image. */ + max_rows = out_rows_avail - *out_row_ctr; + if (max_rows > post->strip_height) + max_rows = post->strip_height; + num_rows = 0; + (*cinfo->upsample->upsample) (cinfo, + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &num_rows, max_rows); + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer, output_buf + *out_row_ctr, (int) num_rows); + *out_row_ctr += num_rows; +} + + +#ifdef QUANT_2PASS_SUPPORTED + +/* + * Process some data in the first pass of 2-pass quantization. + */ + +METHODDEF(void) +post_process_prepass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION old_next_row, num_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + post->starting_row, post->strip_height, TRUE); + } + + /* Upsample some data (up to a strip height's worth). */ + old_next_row = post->next_row; + (*cinfo->upsample->upsample) (cinfo, + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &post->next_row, post->strip_height); + + /* Allow quantizer to scan new data. No data is emitted, */ + /* but we advance out_row_ctr so outer loop can tell when we're done. */ + if (post->next_row > old_next_row) { + num_rows = post->next_row - old_next_row; + (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, + (JSAMPARRAY) NULL, (int) num_rows); + *out_row_ctr += num_rows; + } + + /* Advance if we filled the strip. */ + if (post->next_row >= post->strip_height) { + post->starting_row += post->strip_height; + post->next_row = 0; + } +} + + +/* + * Process some data in the second pass of 2-pass quantization. + */ + +METHODDEF(void) +post_process_2pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION num_rows, max_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + post->starting_row, post->strip_height, FALSE); + } + + /* Determine number of rows to emit. */ + num_rows = post->strip_height - post->next_row; /* available in strip */ + max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ + if (num_rows > max_rows) + num_rows = max_rows; + /* We have to check bottom of image here, can't depend on upsampler. */ + max_rows = cinfo->output_height - post->starting_row; + if (num_rows > max_rows) + num_rows = max_rows; + + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer + post->next_row, output_buf + *out_row_ctr, + (int) num_rows); + *out_row_ctr += num_rows; + + /* Advance if we filled the strip. */ + post->next_row += num_rows; + if (post->next_row >= post->strip_height) { + post->starting_row += post->strip_height; + post->next_row = 0; + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ + + +/* + * Initialize postprocessing controller. + */ + +GLOBAL(void) +jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_post_ptr post; + + post = (my_post_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_post_controller)); + cinfo->post = (struct jpeg_d_post_controller *) post; + post->pub.start_pass = start_pass_dpost; + post->whole_image = NULL; /* flag for no virtual arrays */ + post->buffer = NULL; /* flag for no strip buffer */ + + /* Create the quantization buffer, if needed */ + if (cinfo->quantize_colors) { + /* The buffer strip height is max_v_samp_factor, which is typically + * an efficient number of rows for upsampling to return. + * (In the presence of output rescaling, we might want to be smarter?) + */ + post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; + if (need_full_buffer) { + /* Two-pass color quantization: need full-image storage. */ + /* We round up the number of rows to a multiple of the strip height. */ +#ifdef QUANT_2PASS_SUPPORTED + post->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + cinfo->output_width * cinfo->out_color_components, + (JDIMENSION) jround_up((long) cinfo->output_height, + (long) post->strip_height), + post->strip_height); +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif /* QUANT_2PASS_SUPPORTED */ + } else { + /* One-pass color quantization: just make a strip buffer. */ + post->buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width * cinfo->out_color_components, + post->strip_height); + } + } +} diff --git a/libjpegd/jdsample.c b/libjpegd/jdsample.c new file mode 100644 index 0000000..80ffefb --- /dev/null +++ b/libjpegd/jdsample.c @@ -0,0 +1,478 @@ +/* + * jdsample.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains upsampling routines. + * + * Upsampling input data is counted in "row groups". A row group + * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) + * sample rows of each component. Upsampling will normally produce + * max_v_samp_factor pixel rows from each row group (but this could vary + * if the upsampler is applying a scale factor of its own). + * + * An excellent reference for image resampling is + * Digital Image Warping, George Wolberg, 1990. + * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Pointer to routine to upsample a single component */ +typedef JMETHOD(void, upsample1_ptr, + (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)); + +/* Private subobject */ + +typedef struct { + struct jpeg_upsampler pub; /* public fields */ + + /* Color conversion buffer. When using separate upsampling and color + * conversion steps, this buffer holds one upsampled row group until it + * has been color converted and output. + * Note: we do not allocate any storage for component(s) which are full-size, + * ie do not need rescaling. The corresponding entry of color_buf[] is + * simply set to point to the input data array, thereby avoiding copying. + */ + JSAMPARRAY color_buf[MAX_COMPONENTS]; + + /* Per-component upsampling method pointers */ + upsample1_ptr methods[MAX_COMPONENTS]; + + int next_row_out; /* counts rows emitted from color_buf */ + JDIMENSION rows_to_go; /* counts rows remaining in image */ + + /* Height of an input row group for each component. */ + int rowgroup_height[MAX_COMPONENTS]; + + /* These arrays save pixel expansion factors so that int_expand need not + * recompute them each time. They are unused for other upsampling methods. + */ + UINT8 h_expand[MAX_COMPONENTS]; + UINT8 v_expand[MAX_COMPONENTS]; +} my_upsampler; + +typedef my_upsampler * my_upsample_ptr; + + +/* + * Initialize for an upsampling pass. + */ + +METHODDEF(void) +start_pass_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the conversion buffer empty */ + upsample->next_row_out = cinfo->max_v_samp_factor; + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; +} + + +/* + * Control routine to do upsampling (and color conversion). + * + * In this version we upsample each component independently. + * We upsample one row group into the conversion buffer, then apply + * color conversion a row at a time. + */ + +METHODDEF(void) +sep_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + int ci; + jpeg_component_info * compptr; + JDIMENSION num_rows; + + /* Fill the conversion buffer, if it's empty */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Invoke per-component upsample method. Notice we pass a POINTER + * to color_buf[ci], so that fullsize_upsample can change it. + */ + (*upsample->methods[ci]) (cinfo, compptr, + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + upsample->color_buf + ci); + } + upsample->next_row_out = 0; + } + + /* Color-convert and emit rows */ + + /* How many we have in the buffer: */ + num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); + /* Not more than the distance to the end of the image. Need this test + * in case the image height is not a multiple of max_v_samp_factor: + */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + + (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, + (JDIMENSION) upsample->next_row_out, + output_buf + *out_row_ctr, + (int) num_rows); + + /* Adjust counts */ + *out_row_ctr += num_rows; + upsample->rows_to_go -= num_rows; + upsample->next_row_out += num_rows; + /* When the buffer is emptied, declare this input row group consumed */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) + (*in_row_group_ctr)++; +} + + +/* + * These are the routines invoked by sep_upsample to upsample pixel values + * of a single component. One row group is processed per call. + */ + + +/* + * For full-size components, we just make color_buf[ci] point at the + * input buffer, and thus avoid copying any data. Note that this is + * safe only because sep_upsample doesn't declare the input row group + * "consumed" until we are done color converting and emitting it. + */ + +METHODDEF(void) +fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = input_data; +} + + +/* + * This is a no-op version used for "uninteresting" components. + * These components will not be referenced by color conversion. + */ + +METHODDEF(void) +noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = NULL; /* safety check */ +} + + +/* + * This version handles any integral sampling ratios. + * This is not used for typical JPEG files, so it need not be fast. + * Nor, for that matter, is it particularly accurate: the algorithm is + * simple replication of the input pixel onto the corresponding output + * pixels. The hi-falutin sampling literature refers to this as a + * "box filter". A box filter tends to introduce visible artifacts, + * so if you are actually going to use 3:1 or 4:1 sampling ratios + * you would be well advised to improve this code. + */ + +METHODDEF(void) +int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + register int h; + JSAMPROW outend; + int h_expand, v_expand; + int inrow, outrow; + + h_expand = upsample->h_expand[compptr->component_index]; + v_expand = upsample->v_expand[compptr->component_index]; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + /* Generate one output row with proper horizontal expansion */ + inptr = input_data[inrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + for (h = h_expand; h > 0; h--) { + *outptr++ = invalue; + } + } + /* Generate any additional output rows by duplicating the first one */ + if (v_expand > 1) { + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + v_expand-1, cinfo->output_width); + } + inrow++; + outrow += v_expand; + } +} + + +/* + * Fast processing for the common case of 2:1 horizontal and 1:1 vertical. + * It's still a box filter. + */ + +METHODDEF(void) +h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int inrow; + + for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { + inptr = input_data[inrow]; + outptr = output_data[inrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + } +} + + +/* + * Fast processing for the common case of 2:1 horizontal and 2:1 vertical. + * It's still a box filter. + */ + +METHODDEF(void) +h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int inrow, outrow; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + inptr = input_data[inrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 1, cinfo->output_width); + inrow++; + outrow += 2; + } +} + + +/* + * Fancy processing for the common case of 2:1 horizontal and 1:1 vertical. + * + * The upsampling algorithm is linear interpolation between pixel centers, + * also known as a "triangle filter". This is a good compromise between + * speed and visual quality. The centers of the output pixels are 1/4 and 3/4 + * of the way between input pixel centers. + * + * A note about the "bias" calculations: when rounding fractional values to + * integer, we do not want to always round 0.5 up to the next integer. + * If we did that, we'd introduce a noticeable bias towards larger values. + * Instead, this code is arranged so that 0.5 will be rounded up or down at + * alternate pixel locations (a simple ordered dither pattern). + */ + +METHODDEF(void) +h2v1_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register int invalue; + register JDIMENSION colctr; + int inrow; + + for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { + inptr = input_data[inrow]; + outptr = output_data[inrow]; + /* Special case for first column */ + invalue = GETJSAMPLE(*inptr++); + *outptr++ = (JSAMPLE) invalue; + *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(*inptr) + 2) >> 2); + + for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { + /* General case: 3/4 * nearer pixel + 1/4 * further pixel */ + invalue = GETJSAMPLE(*inptr++) * 3; + *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(inptr[-2]) + 1) >> 2); + *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(*inptr) + 2) >> 2); + } + + /* Special case for last column */ + invalue = GETJSAMPLE(*inptr); + *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(inptr[-1]) + 1) >> 2); + *outptr++ = (JSAMPLE) invalue; + } +} + + +/* + * Fancy processing for the common case of 2:1 horizontal and 2:1 vertical. + * Again a triangle filter; see comments for h2v1 case, above. + * + * It is OK for us to reference the adjacent input rows because we demanded + * context from the main buffer controller (see initialization code). + */ + +METHODDEF(void) +h2v2_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr0, inptr1, outptr; +#if BITS_IN_JSAMPLE == 8 + register int thiscolsum, lastcolsum, nextcolsum; +#else + register INT32 thiscolsum, lastcolsum, nextcolsum; +#endif + register JDIMENSION colctr; + int inrow, outrow, v; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + for (v = 0; v < 2; v++) { + /* inptr0 points to nearest input row, inptr1 points to next nearest */ + inptr0 = input_data[inrow]; + if (v == 0) /* next nearest is row above */ + inptr1 = input_data[inrow-1]; + else /* next nearest is row below */ + inptr1 = input_data[inrow+1]; + outptr = output_data[outrow++]; + + /* Special case for first column */ + thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); + nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); + *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 8) >> 4); + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); + lastcolsum = thiscolsum; thiscolsum = nextcolsum; + + for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { + /* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */ + /* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */ + nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); + lastcolsum = thiscolsum; thiscolsum = nextcolsum; + } + + /* Special case for last column */ + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); + *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 7) >> 4); + } + inrow++; + } +} + + +/* + * Module initialization routine for upsampling. + */ + +GLOBAL(void) +jinit_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + int ci; + jpeg_component_info * compptr; + boolean need_buffer, do_fancy; + int h_in_group, v_in_group, h_out_group, v_out_group; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_upsample; + upsample->pub.upsample = sep_upsample; + upsample->pub.need_context_rows = FALSE; /* until we find out differently */ + + if (cinfo->CCIR601_sampling) /* this isn't supported */ + ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); + + /* jdmainct.c doesn't support context rows when min_DCT_scaled_size = 1, + * so don't ask for it. + */ + do_fancy = cinfo->do_fancy_upsampling && cinfo->min_DCT_scaled_size > 1; + + /* Verify we can handle the sampling factors, select per-component methods, + * and create storage as needed. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Compute size of an "input group" after IDCT scaling. This many samples + * are to be converted to max_h_samp_factor * max_v_samp_factor pixels. + */ + h_in_group = (compptr->h_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; + v_in_group = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; + h_out_group = cinfo->max_h_samp_factor; + v_out_group = cinfo->max_v_samp_factor; + upsample->rowgroup_height[ci] = v_in_group; /* save for use later */ + need_buffer = TRUE; + if (! compptr->component_needed) { + /* Don't bother to upsample an uninteresting component. */ + upsample->methods[ci] = noop_upsample; + need_buffer = FALSE; + } else if (h_in_group == h_out_group && v_in_group == v_out_group) { + /* Fullsize components can be processed without any work. */ + upsample->methods[ci] = fullsize_upsample; + need_buffer = FALSE; + } else if (h_in_group * 2 == h_out_group && + v_in_group == v_out_group) { + /* Special cases for 2h1v upsampling */ + if (do_fancy && compptr->downsampled_width > 2) + upsample->methods[ci] = h2v1_fancy_upsample; + else + upsample->methods[ci] = h2v1_upsample; + } else if (h_in_group * 2 == h_out_group && + v_in_group * 2 == v_out_group) { + /* Special cases for 2h2v upsampling */ + if (do_fancy && compptr->downsampled_width > 2) { + upsample->methods[ci] = h2v2_fancy_upsample; + upsample->pub.need_context_rows = TRUE; + } else + upsample->methods[ci] = h2v2_upsample; + } else if ((h_out_group % h_in_group) == 0 && + (v_out_group % v_in_group) == 0) { + /* Generic integral-factors upsampling method */ + upsample->methods[ci] = int_upsample; + upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group); + upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group); + } else + ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); + if (need_buffer) { + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) jround_up((long) cinfo->output_width, + (long) cinfo->max_h_samp_factor), + (JDIMENSION) cinfo->max_v_samp_factor); + } + } +} diff --git a/libjpegd/jerror.c b/libjpegd/jerror.c new file mode 100644 index 0000000..3da7be8 --- /dev/null +++ b/libjpegd/jerror.c @@ -0,0 +1,252 @@ +/* + * jerror.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains simple error-reporting and trace-message routines. + * These are suitable for Unix-like systems and others where writing to + * stderr is the right thing to do. Many applications will want to replace + * some or all of these routines. + * + * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile, + * you get a Windows-specific hack to display error messages in a dialog box. + * It ain't much, but it beats dropping error messages into the bit bucket, + * which is what happens to output to stderr under most Windows C compilers. + * + * These routines are used by both the compression and decompression code. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jversion.h" +#include "jerror.h" + +#ifdef USE_WINDOWS_MESSAGEBOX +#include +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif + + +/* + * Create the message string table. + * We do this from the master message list in jerror.h by re-reading + * jerror.h with a suitable definition for macro JMESSAGE. + * The message table is made an external symbol just in case any applications + * want to refer to it directly. + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_message_table jMsgTable +#endif + +#define JMESSAGE(code,string) string , + +const char * const jpeg_std_message_table[] = { +#include "jerror.h" + NULL +}; + + +/* + * Error exit handler: must not return to caller. + * + * Applications may override this if they want to get control back after + * an error. Typically one would longjmp somewhere instead of exiting. + * The setjmp buffer can be made a private field within an expanded error + * handler object. Note that the info needed to generate an error message + * is stored in the error object, so you can generate the message now or + * later, at your convenience. + * You should make sure that the JPEG object is cleaned up (with jpeg_abort + * or jpeg_destroy) at some point. + */ + +METHODDEF(void) +error_exit (j_common_ptr cinfo) +{ + /* Always display the message */ + (*cinfo->err->output_message) (cinfo); + + /* Let the memory manager delete any temp files before we die */ + jpeg_destroy(cinfo); + + exit(EXIT_FAILURE); +} + + +/* + * Actual output of an error or trace message. + * Applications may override this method to send JPEG messages somewhere + * other than stderr. + * + * On Windows, printing to stderr is generally completely useless, + * so we provide optional code to produce an error-dialog popup. + * Most Windows applications will still prefer to override this routine, + * but if they don't, it'll do something at least marginally useful. + * + * NOTE: to use the library in an environment that doesn't support the + * C stdio library, you may have to delete the call to fprintf() entirely, + * not just not use this routine. + */ + +METHODDEF(void) +output_message (j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + /* Create the message */ + (*cinfo->err->format_message) (cinfo, buffer); + +#ifdef USE_WINDOWS_MESSAGEBOX + /* Display it in a message dialog box */ + MessageBox(GetActiveWindow(), buffer, "JPEG Library Error", + MB_OK | MB_ICONERROR); +#else + /* Send it to stderr, adding a newline */ + fprintf(stderr, "%s\n", buffer); +#endif +} + + +/* + * Decide whether to emit a trace or warning message. + * msg_level is one of: + * -1: recoverable corrupt-data warning, may want to abort. + * 0: important advisory messages (always display to user). + * 1: first level of tracing detail. + * 2,3,...: successively more detailed tracing messages. + * An application might override this method if it wanted to abort on warnings + * or change the policy about which messages to display. + */ + +METHODDEF(void) +emit_message (j_common_ptr cinfo, int msg_level) +{ + struct jpeg_error_mgr * err = cinfo->err; + + if (msg_level < 0) { + /* It's a warning message. Since corrupt files may generate many warnings, + * the policy implemented here is to show only the first warning, + * unless trace_level >= 3. + */ + if (err->num_warnings == 0 || err->trace_level >= 3) + (*err->output_message) (cinfo); + /* Always count warnings in num_warnings. */ + err->num_warnings++; + } else { + /* It's a trace message. Show it if trace_level >= msg_level. */ + if (err->trace_level >= msg_level) + (*err->output_message) (cinfo); + } +} + + +/* + * Format a message string for the most recent JPEG error or message. + * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX + * characters. Note that no '\n' character is added to the string. + * Few applications should need to override this method. + */ + +METHODDEF(void) +format_message (j_common_ptr cinfo, char * buffer) +{ + struct jpeg_error_mgr * err = cinfo->err; + int msg_code = err->msg_code; + const char * msgtext = NULL; + const char * msgptr; + char ch; + boolean isstring; + + /* Look up message string in proper table */ + if (msg_code > 0 && msg_code <= err->last_jpeg_message) { + msgtext = err->jpeg_message_table[msg_code]; + } else if (err->addon_message_table != NULL && + msg_code >= err->first_addon_message && + msg_code <= err->last_addon_message) { + msgtext = err->addon_message_table[msg_code - err->first_addon_message]; + } + + /* Defend against bogus message number */ + if (msgtext == NULL) { + err->msg_parm.i[0] = msg_code; + msgtext = err->jpeg_message_table[0]; + } + + /* Check for string parameter, as indicated by %s in the message text */ + isstring = FALSE; + msgptr = msgtext; + while ((ch = *msgptr++) != '\0') { + if (ch == '%') { + if (*msgptr == 's') isstring = TRUE; + break; + } + } + + /* Format the message into the passed buffer */ + if (isstring) + sprintf(buffer, msgtext, err->msg_parm.s); + else + sprintf(buffer, msgtext, + err->msg_parm.i[0], err->msg_parm.i[1], + err->msg_parm.i[2], err->msg_parm.i[3], + err->msg_parm.i[4], err->msg_parm.i[5], + err->msg_parm.i[6], err->msg_parm.i[7]); +} + + +/* + * Reset error state variables at start of a new image. + * This is called during compression startup to reset trace/error + * processing to default state, without losing any application-specific + * method pointers. An application might possibly want to override + * this method if it has additional error processing state. + */ + +METHODDEF(void) +reset_error_mgr (j_common_ptr cinfo) +{ + cinfo->err->num_warnings = 0; + /* trace_level is not reset since it is an application-supplied parameter */ + cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ +} + + +/* + * Fill in the standard error-handling methods in a jpeg_error_mgr object. + * Typical call is: + * struct jpeg_compress_struct cinfo; + * struct jpeg_error_mgr err; + * + * cinfo.err = jpeg_std_error(&err); + * after which the application may override some of the methods. + */ + +GLOBAL(struct jpeg_error_mgr *) +jpeg_std_error (struct jpeg_error_mgr * err) +{ + err->error_exit = error_exit; + err->emit_message = emit_message; + err->output_message = output_message; + err->format_message = format_message; + err->reset_error_mgr = reset_error_mgr; + + err->trace_level = 0; /* default = no tracing */ + err->num_warnings = 0; /* no warnings emitted yet */ + err->msg_code = 0; /* may be useful as a flag for "no error" */ + + /* Initialize message table pointers */ + err->jpeg_message_table = jpeg_std_message_table; + err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; + + err->addon_message_table = NULL; + err->first_addon_message = 0; /* for safety */ + err->last_addon_message = 0; + + return err; +} diff --git a/libjpegd/jerror.h b/libjpegd/jerror.h new file mode 100644 index 0000000..fc2fffe --- /dev/null +++ b/libjpegd/jerror.h @@ -0,0 +1,291 @@ +/* + * jerror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the JPEG library. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + * A set of error-reporting macros are defined too. Some applications using + * the JPEG library may wish to include this file to get the error codes + * and/or the macros. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef JERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* JERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ + +/* For maintenance convenience, list is alphabetical by message code name */ +JMESSAGE(JERR_ARITH_NOTIMPL, + "Sorry, there are legal restrictions on arithmetic coding") +JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") +JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") +JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") +JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") +JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") +JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") +JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") +JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") +JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") +JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") +JMESSAGE(JERR_BAD_LIB_VERSION, + "Wrong JPEG library version: library is %d, caller expects %d") +JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") +JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") +JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") +JMESSAGE(JERR_BAD_PROGRESSION, + "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") +JMESSAGE(JERR_BAD_PROG_SCRIPT, + "Invalid progressive parameters at scan script entry %d") +JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") +JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") +JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") +JMESSAGE(JERR_BAD_STRUCT_SIZE, + "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") +JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") +JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") +JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") +JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") +JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") +JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") +JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") +JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") +JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") +JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") +JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") +JMESSAGE(JERR_EMS_READ, "Read from EMS failed") +JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") +JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") +JMESSAGE(JERR_FILE_READ, "Input file read error") +JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") +JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") +JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") +JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") +JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") +JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") +JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") +JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, + "Cannot transcode due to multiple use of quantization table %d") +JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") +JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") +JMESSAGE(JERR_NOTIMPL, "Not implemented yet") +JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") +JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") +JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") +JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") +JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") +JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") +JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") +JMESSAGE(JERR_QUANT_COMPONENTS, + "Cannot quantize more than %d color components") +JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") +JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") +JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") +JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") +JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") +JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") +JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") +JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") +JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") +JMESSAGE(JERR_TFILE_WRITE, + "Write failed on temporary file --- out of disk space?") +JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") +JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") +JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") +JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") +JMESSAGE(JERR_XMS_READ, "Read from XMS failed") +JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") +JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) +JMESSAGE(JMSG_VERSION, JVERSION) +JMESSAGE(JTRC_16BIT_TABLES, + "Caution: quantization tables are too coarse for baseline JPEG") +JMESSAGE(JTRC_ADOBE, + "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") +JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") +JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") +JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") +JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") +JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") +JMESSAGE(JTRC_DRI, "Define Restart Interval %u") +JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") +JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") +JMESSAGE(JTRC_EOI, "End Of Image") +JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") +JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") +JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, + "Warning: thumbnail image size does not match data length %u") +JMESSAGE(JTRC_JFIF_EXTENSION, + "JFIF extension marker: type 0x%02x, length %u") +JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") +JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") +JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") +JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") +JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") +JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") +JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") +JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") +JMESSAGE(JTRC_RST, "RST%d") +JMESSAGE(JTRC_SMOOTH_NOTIMPL, + "Smoothing not supported with nonstandard sampling ratios") +JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") +JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") +JMESSAGE(JTRC_SOI, "Start of Image") +JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") +JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") +JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") +JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") +JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") +JMESSAGE(JTRC_THUMB_JPEG, + "JFIF extension marker: JPEG-compressed thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_PALETTE, + "JFIF extension marker: palette thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_RGB, + "JFIF extension marker: RGB thumbnail image, length %u") +JMESSAGE(JTRC_UNKNOWN_IDS, + "Unrecognized component IDs %d %d %d, assuming YCbCr") +JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") +JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") +JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") +JMESSAGE(JWRN_BOGUS_PROGRESSION, + "Inconsistent progression sequence for component %d coefficient %d") +JMESSAGE(JWRN_EXTRANEOUS_DATA, + "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") +JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") +JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") +JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") +JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") +JMESSAGE(JWRN_MUST_RESYNC, + "Corrupt JPEG data: found marker 0x%02x instead of RST%d") +JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") +JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTMSGCODE +} J_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE + + +#ifndef JERROR_H +#define JERROR_H + +/* Macros to simplify using the error and trace message stuff */ +/* The first parameter is either type of cinfo pointer */ + +/* Fatal errors (print message and exit) */ +#define ERREXIT(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT3(cinfo,code,p1,p2,p3) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXITS(cinfo,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) + +#define MAKESTMT(stuff) do { stuff } while (0) + +/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ +#define WARNMS(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) + +/* Informational/debugging messages */ +#define TRACEMS(cinfo,lvl,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS1(cinfo,lvl,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS2(cinfo,lvl,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMSS(cinfo,lvl,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) + +#endif /* JERROR_H */ diff --git a/libjpegd/jidctflt.c b/libjpegd/jidctflt.c new file mode 100644 index 0000000..0188ce3 --- /dev/null +++ b/libjpegd/jidctflt.c @@ -0,0 +1,242 @@ +/* + * jidctflt.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a floating-point implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * This implementation should be more accurate than either of the integer + * IDCT implementations. However, it may not give the same results on all + * machines because of differences in roundoff behavior. Speed will depend + * on the hardware's floating point capacity. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with a fixed-point + * implementation, accuracy is lost due to imprecise representation of the + * scaled quantization values. However, that problem does not arise if + * we use floating point arithmetic. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_FLOAT_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce a float result. + */ + +#define DEQUANTIZE(coef,quantval) (((FAST_FLOAT) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + FAST_FLOAT tmp10, tmp11, tmp12, tmp13; + FAST_FLOAT z5, z10, z11, z12, z13; + JCOEFPTR inptr; + FLOAT_MULT_TYPE * quantptr; + FAST_FLOAT * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + + tmp0 = tmp10 + tmp13; /* phase 2 */ + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z13 = tmp6 + tmp5; /* phase 6 */ + z10 = tmp6 - tmp5; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ + tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + wsptr[DCTSIZE*0] = tmp0 + tmp7; + wsptr[DCTSIZE*7] = tmp0 - tmp7; + wsptr[DCTSIZE*1] = tmp1 + tmp6; + wsptr[DCTSIZE*6] = tmp1 - tmp6; + wsptr[DCTSIZE*2] = tmp2 + tmp5; + wsptr[DCTSIZE*5] = tmp2 - tmp5; + wsptr[DCTSIZE*4] = tmp3 + tmp4; + wsptr[DCTSIZE*3] = tmp3 - tmp4; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * And testing floats for zero is relatively expensive, so we don't bother. + */ + + /* Even part */ + + tmp10 = wsptr[0] + wsptr[4]; + tmp11 = wsptr[0] - wsptr[4]; + + tmp13 = wsptr[2] + wsptr[6]; + tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; + + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + z13 = wsptr[5] + wsptr[3]; + z10 = wsptr[5] - wsptr[3]; + z11 = wsptr[1] + wsptr[7]; + z12 = wsptr[1] - wsptr[7]; + + tmp7 = z11 + z13; + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ + tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + /* Final output stage: scale down by a factor of 8 and range-limit */ + + outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/libjpegd/jidctfst.c b/libjpegd/jidctfst.c new file mode 100644 index 0000000..dba4216 --- /dev/null +++ b/libjpegd/jidctfst.c @@ -0,0 +1,368 @@ +/* + * jidctfst.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a fast, not so accurate integer implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with fixed-point math, + * accuracy is lost due to imprecise representation of the scaled + * quantization values. The smaller the quantization table entry, the less + * precise the scaled value, so this implementation does worse with high- + * quality-setting files than with low-quality ones. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_IFAST_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling decisions are generally the same as in the LL&M algorithm; + * see jidctint.c for more details. However, we choose to descale + * (right shift) multiplication products as soon as they are formed, + * rather than carrying additional fractional bits into subsequent additions. + * This compromises accuracy slightly, but it lets us save a few shifts. + * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) + * everywhere except in the multiplications proper; this saves a good deal + * of work on 16-bit-int machines. + * + * The dequantized coefficients are not integers because the AA&N scaling + * factors have been incorporated. We represent them scaled up by PASS1_BITS, + * so that the first and second IDCT rounds have the same input scaling. + * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to + * avoid a descaling shift; this compromises accuracy rather drastically + * for small quantization table entries, but it saves a lot of shifts. + * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway, + * so we use a much larger scaling factor to preserve accuracy. + * + * A final compromise is to represent the multiplicative constants to only + * 8 fractional bits, rather than 13. This saves some shifting work on some + * machines, and may also reduce the cost of multiplication (since there + * are fewer one-bits in the constants). + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 8 +#define PASS1_BITS 2 +#else +#define CONST_BITS 8 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 8 +#define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */ +#define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */ +#define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */ +#define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */ +#else +#define FIX_1_082392200 FIX(1.082392200) +#define FIX_1_414213562 FIX(1.414213562) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_2_613125930 FIX(2.613125930) +#endif + + +/* We can gain a little more speed, with a further compromise in accuracy, + * by omitting the addition in a descaling shift. This yields an incorrectly + * rounded result half the time... + */ + +#ifndef USE_ACCURATE_ROUNDING +#undef DESCALE +#define DESCALE(x,n) RIGHT_SHIFT(x, n) +#endif + + +/* Multiply a DCTELEM variable by an INT32 constant, and immediately + * descale to yield a DCTELEM result. + */ + +#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce a DCTELEM result. For 8-bit data a 16x16->16 + * multiplication will do. For 12-bit data, the multiplier table is + * declared INT32, so a 32-bit multiply will be used. + */ + +#if BITS_IN_JSAMPLE == 8 +#define DEQUANTIZE(coef,quantval) (((IFAST_MULT_TYPE) (coef)) * (quantval)) +#else +#define DEQUANTIZE(coef,quantval) \ + DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS) +#endif + + +/* Like DESCALE, but applies to a DCTELEM and produces an int. + * We assume that int right shift is unsigned if INT32 right shift is. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define ISHIFT_TEMPS DCTELEM ishift_temp; +#if BITS_IN_JSAMPLE == 8 +#define DCTELEMBITS 16 /* DCTELEM may be 16 or 32 bits */ +#else +#define DCTELEMBITS 32 /* DCTELEM must be 32 bits */ +#endif +#define IRIGHT_SHIFT(x,shft) \ + ((ishift_temp = (x)) < 0 ? \ + (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \ + (ishift_temp >> (shft))) +#else +#define ISHIFT_TEMPS +#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + +#ifdef USE_ACCURATE_ROUNDING +#define IDESCALE(x,n) ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n)) +#else +#define IDESCALE(x,n) ((int) IRIGHT_SHIFT(x, n)) +#endif + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + DCTELEM tmp10, tmp11, tmp12, tmp13; + DCTELEM z5, z10, z11, z12, z13; + JCOEFPTR inptr; + IFAST_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS /* for DESCALE */ + ISHIFT_TEMPS /* for IDESCALE */ + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ + + tmp0 = tmp10 + tmp13; /* phase 2 */ + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z13 = tmp6 + tmp5; /* phase 6 */ + z10 = tmp6 - tmp5; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); + wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); + wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); + wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); + wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5); + wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); + wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); + wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * On machines with very fast multiplication, it's possible that the + * test takes more time than it's worth. In that case this section + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + outptr[4] = dcval; + outptr[5] = dcval; + outptr[6] = dcval; + outptr[7] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); + tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); + + tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); + tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) + - tmp13; + + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; + z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; + z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; + z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + /* Final output stage: scale down by a factor of 8 and range-limit */ + + outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_IFAST_SUPPORTED */ diff --git a/libjpegd/jidctint.c b/libjpegd/jidctint.c new file mode 100644 index 0000000..a72b320 --- /dev/null +++ b/libjpegd/jidctint.c @@ -0,0 +1,389 @@ +/* + * jidctint.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a slow-but-accurate integer implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on an algorithm described in + * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT + * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, + * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. + * The primary algorithm described there uses 11 multiplies and 29 adds. + * We use their alternate method with 12 multiplies and 32 adds. + * The advantage of this method is that no data path contains more than one + * multiplication; this allows a very simple and accurate implementation in + * scaled fixed-point arithmetic, with a minimal number of shifts. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_ISLOW_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* + * The poop on this scaling stuff is as follows: + * + * Each 1-D IDCT step produces outputs which are a factor of sqrt(N) + * larger than the true IDCT outputs. The final outputs are therefore + * a factor of N larger than desired; since N=8 this can be cured by + * a simple right shift at the end of the algorithm. The advantage of + * this arrangement is that we save two multiplications per 1-D IDCT, + * because the y0 and y4 inputs need not be divided by sqrt(N). + * + * We have to do addition and subtraction of the integer inputs, which + * is no problem, and multiplication by fractional constants, which is + * a problem to do in integer arithmetic. We multiply all the constants + * by CONST_SCALE and convert them to integer constants (thus retaining + * CONST_BITS bits of precision in the constants). After doing a + * multiplication we have to divide the product by CONST_SCALE, with proper + * rounding, to produce the correct output. This division can be done + * cheaply as a right shift of CONST_BITS bits. We postpone shifting + * as long as possible so that partial sums can be added together with + * full fractional precision. + * + * The outputs of the first pass are scaled up by PASS1_BITS bits so that + * they are represented to better-than-integral precision. These outputs + * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word + * with the recommended scaling. (To scale up 12-bit sample data further, an + * intermediate INT32 array would be needed.) + * + * To avoid overflow of the 32-bit intermediate results in pass 2, we must + * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis + * shows that the values given below are the most effective. + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ +#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ +#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ +#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ +#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ +#else +#define FIX_0_298631336 FIX(0.298631336) +#define FIX_0_390180644 FIX(0.390180644) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_175875602 FIX(1.175875602) +#define FIX_1_501321110 FIX(1.501321110) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_1_961570560 FIX(1.961570560) +#define FIX_2_053119869 FIX(2.053119869) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_072711026 FIX(3.072711026) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce an int result. In this module, both inputs and result + * are 16 bits or less, so either int or short multiply will work. + */ + +#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); + tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); + + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + + tmp0 = (z2 + z3) << CONST_BITS; + tmp1 = (z2 - z3) << CONST_BITS; + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + z1 = tmp0 + tmp3; + z2 = tmp1 + tmp2; + z3 = tmp0 + tmp2; + z4 = tmp1 + tmp3; + z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ + + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + + z3 += z5; + z4 += z5; + + tmp0 += z1 + z3; + tmp1 += z2 + z4; + tmp2 += z2 + z3; + tmp3 += z1 + z4; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * On machines with very fast multiplication, it's possible that the + * test takes more time than it's worth. In that case this section + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + outptr[4] = dcval; + outptr[5] = dcval; + outptr[6] = dcval; + outptr[7] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); + tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); + + tmp0 = ((INT32) wsptr[0] + (INT32) wsptr[4]) << CONST_BITS; + tmp1 = ((INT32) wsptr[0] - (INT32) wsptr[4]) << CONST_BITS; + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = (INT32) wsptr[7]; + tmp1 = (INT32) wsptr[5]; + tmp2 = (INT32) wsptr[3]; + tmp3 = (INT32) wsptr[1]; + + z1 = tmp0 + tmp3; + z2 = tmp1 + tmp2; + z3 = tmp0 + tmp2; + z4 = tmp1 + tmp3; + z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ + + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + + z3 += z5; + z4 += z5; + + tmp0 += z1 + z3; + tmp1 += z2 + z4; + tmp2 += z2 + z3; + tmp3 += z1 + z4; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) DESCALE(tmp10 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE(tmp11 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) DESCALE(tmp11 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE(tmp12 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) DESCALE(tmp12 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE(tmp13 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) DESCALE(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/libjpegd/jidctred.c b/libjpegd/jidctred.c new file mode 100644 index 0000000..421f3c7 --- /dev/null +++ b/libjpegd/jidctred.c @@ -0,0 +1,398 @@ +/* + * jidctred.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains inverse-DCT routines that produce reduced-size output: + * either 4x4, 2x2, or 1x1 pixels from an 8x8 DCT block. + * + * The implementation is based on the Loeffler, Ligtenberg and Moschytz (LL&M) + * algorithm used in jidctint.c. We simply replace each 8-to-8 1-D IDCT step + * with an 8-to-4 step that produces the four averages of two adjacent outputs + * (or an 8-to-2 step producing two averages of four outputs, for 2x2 output). + * These steps were derived by computing the corresponding values at the end + * of the normal LL&M code, then simplifying as much as possible. + * + * 1x1 is trivial: just take the DC coefficient divided by 8. + * + * See jidctint.c for additional comments. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef IDCT_SCALING_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling is the same as in jidctint.c. */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_211164243 ((INT32) 1730) /* FIX(0.211164243) */ +#define FIX_0_509795579 ((INT32) 4176) /* FIX(0.509795579) */ +#define FIX_0_601344887 ((INT32) 4926) /* FIX(0.601344887) */ +#define FIX_0_720959822 ((INT32) 5906) /* FIX(0.720959822) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_850430095 ((INT32) 6967) /* FIX(0.850430095) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_061594337 ((INT32) 8697) /* FIX(1.061594337) */ +#define FIX_1_272758580 ((INT32) 10426) /* FIX(1.272758580) */ +#define FIX_1_451774981 ((INT32) 11893) /* FIX(1.451774981) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_2_172734803 ((INT32) 17799) /* FIX(2.172734803) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_624509785 ((INT32) 29692) /* FIX(3.624509785) */ +#else +#define FIX_0_211164243 FIX(0.211164243) +#define FIX_0_509795579 FIX(0.509795579) +#define FIX_0_601344887 FIX(0.601344887) +#define FIX_0_720959822 FIX(0.720959822) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_850430095 FIX(0.850430095) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_061594337 FIX(1.061594337) +#define FIX_1_272758580 FIX(1.272758580) +#define FIX_1_451774981 FIX(1.451774981) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_2_172734803 FIX(2.172734803) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_624509785 FIX(3.624509785) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce an int result. In this module, both inputs and result + * are 16 bits or less, so either int or short multiply will work. + */ + +#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 4x4 output block. + */ + +GLOBAL(void) +jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE*4]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { + /* Don't bother to process column 4, because second pass won't use it */ + if (ctr == DCTSIZE-4) + continue; + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*5] == 0 && + inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { + /* AC terms all zero; we need not examine term 4 for 4x4 output */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= (CONST_BITS+1); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp2 = MULTIPLY(z2, FIX_1_847759065) + MULTIPLY(z3, - FIX_0_765366865); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + z2 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ + + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ + + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ + + tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ + + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ + + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ + + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ + + /* Final output stage */ + + wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp2, CONST_BITS-PASS1_BITS+1); + wsptr[DCTSIZE*3] = (int) DESCALE(tmp10 - tmp2, CONST_BITS-PASS1_BITS+1); + wsptr[DCTSIZE*1] = (int) DESCALE(tmp12 + tmp0, CONST_BITS-PASS1_BITS+1); + wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 - tmp0, CONST_BITS-PASS1_BITS+1); + } + + /* Pass 2: process 4 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + /* It's not clear whether a zero row test is worthwhile here ... */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1); + + tmp2 = MULTIPLY((INT32) wsptr[2], FIX_1_847759065) + + MULTIPLY((INT32) wsptr[6], - FIX_0_765366865); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + /* Odd part */ + + z1 = (INT32) wsptr[7]; + z2 = (INT32) wsptr[5]; + z3 = (INT32) wsptr[3]; + z4 = (INT32) wsptr[1]; + + tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ + + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ + + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ + + tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ + + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ + + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ + + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp2, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE(tmp10 - tmp2, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE(tmp12 + tmp0, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE(tmp12 - tmp0, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 2x2 output block. + */ + +GLOBAL(void) +jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp10, z1; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE*2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { + /* Don't bother to process columns 2,4,6 */ + if (ctr == DCTSIZE-2 || ctr == DCTSIZE-4 || ctr == DCTSIZE-6) + continue; + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*3] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*7] == 0) { + /* AC terms all zero; we need not examine terms 2,4,6 for 2x2 output */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + + continue; + } + + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp10 = z1 << (CONST_BITS+2); + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp0 = MULTIPLY(z1, - FIX_0_720959822); /* sqrt(2) * (c7-c5+c3-c1) */ + z1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp0 += MULTIPLY(z1, FIX_0_850430095); /* sqrt(2) * (-c1+c3+c5+c7) */ + z1 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp0 += MULTIPLY(z1, - FIX_1_272758580); /* sqrt(2) * (-c1+c3-c5-c7) */ + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 += MULTIPLY(z1, FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ + + /* Final output stage */ + + wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp0, CONST_BITS-PASS1_BITS+2); + wsptr[DCTSIZE*1] = (int) DESCALE(tmp10 - tmp0, CONST_BITS-PASS1_BITS+2); + } + + /* Pass 2: process 2 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 2; ctr++) { + outptr = output_buf[ctr] + output_col; + /* It's not clear whether a zero row test is worthwhile here ... */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp10 = ((INT32) wsptr[0]) << (CONST_BITS+2); + + /* Odd part */ + + tmp0 = MULTIPLY((INT32) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */ + + MULTIPLY((INT32) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */ + + MULTIPLY((INT32) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */ + + MULTIPLY((INT32) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3+2) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3+2) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 1x1 output block. + */ + +GLOBAL(void) +jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + int dcval; + ISLOW_MULT_TYPE * quantptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* We hardly need an inverse DCT routine for this: just take the + * average pixel value, which is one-eighth of the DC coefficient. + */ + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + dcval = DEQUANTIZE(coef_block[0], quantptr[0]); + dcval = (int) DESCALE((INT32) dcval, 3); + + output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; +} + +#endif /* IDCT_SCALING_SUPPORTED */ diff --git a/libjpegd/jinclude.h b/libjpegd/jinclude.h new file mode 100644 index 0000000..0a4f151 --- /dev/null +++ b/libjpegd/jinclude.h @@ -0,0 +1,91 @@ +/* + * jinclude.h + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file exists to provide a single place to fix any problems with + * including the wrong system include files. (Common problems are taken + * care of by the standard jconfig symbols, but on really weird systems + * you may have to edit this file.) + * + * NOTE: this file is NOT intended to be included by applications using the + * JPEG library. Most applications need only include jpeglib.h. + */ + + +/* Include auto-config file to find out which system include files we need. */ + +#include "jconfig.h" /* auto configuration options */ +#define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ + +/* + * We need the NULL macro and size_t typedef. + * On an ANSI-conforming system it is sufficient to include . + * Otherwise, we get them from or ; we may have to + * pull in as well. + * Note that the core JPEG library does not require ; + * only the default error handler and data source/destination modules do. + * But we must pull it in because of the references to FILE in jpeglib.h. + * You can remove those references if you want to compile without . + */ + +#ifdef HAVE_STDDEF_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef NEED_SYS_TYPES_H +#include +#endif + +#include + +/* + * We need memory copying and zeroing functions, plus strncpy(). + * ANSI and System V implementations declare these in . + * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). + * Some systems may declare memset and memcpy in . + * + * NOTE: we assume the size parameters to these functions are of type size_t. + * Change the casts in these macros if not! + */ + +#ifdef NEED_BSD_STRINGS + +#include +#define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) +#define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) + +#else /* not BSD, assume ANSI/SysV string lib */ + +#include +#define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) +#define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) + +#endif + +/* + * In ANSI C, and indeed any rational implementation, size_t is also the + * type returned by sizeof(). However, it seems there are some irrational + * implementations out there, in which sizeof() returns an int even though + * size_t is defined as long or unsigned long. To ensure consistent results + * we always use this SIZEOF() macro in place of using sizeof() directly. + */ + +#define SIZEOF(object) ((size_t) sizeof(object)) + +/* + * The modules that use fread() and fwrite() always invoke them through + * these macros. On some systems you may need to twiddle the argument casts. + * CAUTION: argument order is different from underlying functions! + */ + +#define JFREAD(file,buf,sizeofbuf) \ + ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) +#define JFWRITE(file,buf,sizeofbuf) \ + ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) diff --git a/libjpegd/jmemmgr.c b/libjpegd/jmemmgr.c new file mode 100644 index 0000000..d801b32 --- /dev/null +++ b/libjpegd/jmemmgr.c @@ -0,0 +1,1118 @@ +/* + * jmemmgr.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the JPEG system-independent memory management + * routines. This code is usable across a wide variety of machines; most + * of the system dependencies have been isolated in a separate file. + * The major functions provided here are: + * * pool-based allocation and freeing of memory; + * * policy decisions about how to divide available memory among the + * virtual arrays; + * * control logic for swapping virtual arrays between main memory and + * backing storage. + * The separate system-dependent file provides the actual backing-storage + * access code, and it contains the policy decision about how much total + * main memory to use. + * This file is system-dependent in the sense that some of its functions + * are unnecessary in some systems. For example, if there is enough virtual + * memory so that backing storage will never be used, much of the virtual + * array control logic could be removed. (Of course, if you have that much + * memory then you shouldn't care about a little bit of unused code...) + */ + +#define JPEG_INTERNALS +#define AM_MEMORY_MANAGER /* we define jvirt_Xarray_control structs */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef NO_GETENV +#ifndef HAVE_STDLIB_H /* should declare getenv() */ +extern char * getenv JPP((const char * name)); +#endif +#endif + + +/* + * Some important notes: + * The allocation routines provided here must never return NULL. + * They should exit to error_exit if unsuccessful. + * + * It's not a good idea to try to merge the sarray and barray routines, + * even though they are textually almost the same, because samples are + * usually stored as bytes while coefficients are shorts or ints. Thus, + * in machines where byte pointers have a different representation from + * word pointers, the resulting machine code could not be the same. + */ + + +/* + * Many machines require storage alignment: longs must start on 4-byte + * boundaries, doubles on 8-byte boundaries, etc. On such machines, malloc() + * always returns pointers that are multiples of the worst-case alignment + * requirement, and we had better do so too. + * There isn't any really portable way to determine the worst-case alignment + * requirement. This module assumes that the alignment requirement is + * multiples of sizeof(ALIGN_TYPE). + * By default, we define ALIGN_TYPE as double. This is necessary on some + * workstations (where doubles really do need 8-byte alignment) and will work + * fine on nearly everything. If your machine has lesser alignment needs, + * you can save a few bytes by making ALIGN_TYPE smaller. + * The only place I know of where this will NOT work is certain Macintosh + * 680x0 compilers that define double as a 10-byte IEEE extended float. + * Doing 10-byte alignment is counterproductive because longwords won't be + * aligned well. Put "#define ALIGN_TYPE long" in jconfig.h if you have + * such a compiler. + */ + +#ifndef ALIGN_TYPE /* so can override from jconfig.h */ +#define ALIGN_TYPE double +#endif + + +/* + * We allocate objects from "pools", where each pool is gotten with a single + * request to jpeg_get_small() or jpeg_get_large(). There is no per-object + * overhead within a pool, except for alignment padding. Each pool has a + * header with a link to the next pool of the same class. + * Small and large pool headers are identical except that the latter's + * link pointer must be FAR on 80x86 machines. + * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE + * field. This forces the compiler to make SIZEOF(small_pool_hdr) a multiple + * of the alignment requirement of ALIGN_TYPE. + */ + +typedef union small_pool_struct * small_pool_ptr; + +typedef union small_pool_struct { + struct { + small_pool_ptr next; /* next in list of pools */ + size_t bytes_used; /* how many bytes already used within pool */ + size_t bytes_left; /* bytes still available in this pool */ + } hdr; + ALIGN_TYPE dummy; /* included in union to ensure alignment */ +} small_pool_hdr; + +typedef union large_pool_struct FAR * large_pool_ptr; + +typedef union large_pool_struct { + struct { + large_pool_ptr next; /* next in list of pools */ + size_t bytes_used; /* how many bytes already used within pool */ + size_t bytes_left; /* bytes still available in this pool */ + } hdr; + ALIGN_TYPE dummy; /* included in union to ensure alignment */ +} large_pool_hdr; + + +/* + * Here is the full definition of a memory manager object. + */ + +typedef struct { + struct jpeg_memory_mgr pub; /* public fields */ + + /* Each pool identifier (lifetime class) names a linked list of pools. */ + small_pool_ptr small_list[JPOOL_NUMPOOLS]; + large_pool_ptr large_list[JPOOL_NUMPOOLS]; + + /* Since we only have one lifetime class of virtual arrays, only one + * linked list is necessary (for each datatype). Note that the virtual + * array control blocks being linked together are actually stored somewhere + * in the small-pool list. + */ + jvirt_sarray_ptr virt_sarray_list; + jvirt_barray_ptr virt_barray_list; + + /* This counts total space obtained from jpeg_get_small/large */ + long total_space_allocated; + + /* alloc_sarray and alloc_barray set this value for use by virtual + * array routines. + */ + JDIMENSION last_rowsperchunk; /* from most recent alloc_sarray/barray */ +} my_memory_mgr; + +typedef my_memory_mgr * my_mem_ptr; + + +/* + * The control blocks for virtual arrays. + * Note that these blocks are allocated in the "small" pool area. + * System-dependent info for the associated backing store (if any) is hidden + * inside the backing_store_info struct. + */ + +struct jvirt_sarray_control { + JSAMPARRAY mem_buffer; /* => the in-memory buffer */ + JDIMENSION rows_in_array; /* total virtual array height */ + JDIMENSION samplesperrow; /* width of array (and of memory buffer) */ + JDIMENSION maxaccess; /* max rows accessed by access_virt_sarray */ + JDIMENSION rows_in_mem; /* height of memory buffer */ + JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ + JDIMENSION cur_start_row; /* first logical row # in the buffer */ + JDIMENSION first_undef_row; /* row # of first uninitialized row */ + boolean pre_zero; /* pre-zero mode requested? */ + boolean dirty; /* do current buffer contents need written? */ + boolean b_s_open; /* is backing-store data valid? */ + jvirt_sarray_ptr next; /* link to next virtual sarray control block */ + backing_store_info b_s_info; /* System-dependent control info */ +}; + +struct jvirt_barray_control { + JBLOCKARRAY mem_buffer; /* => the in-memory buffer */ + JDIMENSION rows_in_array; /* total virtual array height */ + JDIMENSION blocksperrow; /* width of array (and of memory buffer) */ + JDIMENSION maxaccess; /* max rows accessed by access_virt_barray */ + JDIMENSION rows_in_mem; /* height of memory buffer */ + JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ + JDIMENSION cur_start_row; /* first logical row # in the buffer */ + JDIMENSION first_undef_row; /* row # of first uninitialized row */ + boolean pre_zero; /* pre-zero mode requested? */ + boolean dirty; /* do current buffer contents need written? */ + boolean b_s_open; /* is backing-store data valid? */ + jvirt_barray_ptr next; /* link to next virtual barray control block */ + backing_store_info b_s_info; /* System-dependent control info */ +}; + + +#ifdef MEM_STATS /* optional extra stuff for statistics */ + +LOCAL(void) +print_mem_stats (j_common_ptr cinfo, int pool_id) +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + + /* Since this is only a debugging stub, we can cheat a little by using + * fprintf directly rather than going through the trace message code. + * This is helpful because message parm array can't handle longs. + */ + fprintf(stderr, "Freeing pool %d, total space = %ld\n", + pool_id, mem->total_space_allocated); + + for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL; + lhdr_ptr = lhdr_ptr->hdr.next) { + fprintf(stderr, " Large chunk used %ld\n", + (long) lhdr_ptr->hdr.bytes_used); + } + + for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL; + shdr_ptr = shdr_ptr->hdr.next) { + fprintf(stderr, " Small chunk used %ld free %ld\n", + (long) shdr_ptr->hdr.bytes_used, + (long) shdr_ptr->hdr.bytes_left); + } +} + +#endif /* MEM_STATS */ + + +LOCAL(void) +out_of_memory (j_common_ptr cinfo, int which) +/* Report an out-of-memory error and stop execution */ +/* If we compiled MEM_STATS support, report alloc requests before dying */ +{ +#ifdef MEM_STATS + cinfo->err->trace_level = 2; /* force self_destruct to report stats */ +#endif + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); +} + + +/* + * Allocation of "small" objects. + * + * For these, we use pooled storage. When a new pool must be created, + * we try to get enough space for the current request plus a "slop" factor, + * where the slop will be the amount of leftover space in the new pool. + * The speed vs. space tradeoff is largely determined by the slop values. + * A different slop value is provided for each pool class (lifetime), + * and we also distinguish the first pool of a class from later ones. + * NOTE: the values given work fairly well on both 16- and 32-bit-int + * machines, but may be too small if longs are 64 bits or more. + */ + +static const size_t first_pool_slop[JPOOL_NUMPOOLS] = +{ + 1600, /* first PERMANENT pool */ + 16000 /* first IMAGE pool */ +}; + +static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = +{ + 0, /* additional PERMANENT pools */ + 5000 /* additional IMAGE pools */ +}; + +#define MIN_SLOP 50 /* greater than 0 to avoid futile looping */ + + +METHODDEF(void *) +alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject) +/* Allocate a "small" object */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr hdr_ptr, prev_hdr_ptr; + char * data_ptr; + size_t odd_bytes, min_request, slop; + + /* Check for unsatisfiable request (do now to ensure no overflow below) */ + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) + out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ + + /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ + odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); + if (odd_bytes > 0) + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + + /* See if space is available in any existing pool */ + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + prev_hdr_ptr = NULL; + hdr_ptr = mem->small_list[pool_id]; + while (hdr_ptr != NULL) { + if (hdr_ptr->hdr.bytes_left >= sizeofobject) + break; /* found pool with enough space */ + prev_hdr_ptr = hdr_ptr; + hdr_ptr = hdr_ptr->hdr.next; + } + + /* Time to make a new pool? */ + if (hdr_ptr == NULL) { + /* min_request is what we need now, slop is what will be leftover */ + min_request = sizeofobject + SIZEOF(small_pool_hdr); + if (prev_hdr_ptr == NULL) /* first pool in class? */ + slop = first_pool_slop[pool_id]; + else + slop = extra_pool_slop[pool_id]; + /* Don't ask for more than MAX_ALLOC_CHUNK */ + if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) + slop = (size_t) (MAX_ALLOC_CHUNK-min_request); + /* Try to get space, if fail reduce slop and try again */ + for (;;) { + hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); + if (hdr_ptr != NULL) + break; + slop /= 2; + if (slop < MIN_SLOP) /* give up when it gets real small */ + out_of_memory(cinfo, 2); /* jpeg_get_small failed */ + } + mem->total_space_allocated += min_request + slop; + /* Success, initialize the new pool header and add to end of list */ + hdr_ptr->hdr.next = NULL; + hdr_ptr->hdr.bytes_used = 0; + hdr_ptr->hdr.bytes_left = sizeofobject + slop; + if (prev_hdr_ptr == NULL) /* first pool in class? */ + mem->small_list[pool_id] = hdr_ptr; + else + prev_hdr_ptr->hdr.next = hdr_ptr; + } + + /* OK, allocate the object from the current pool */ + data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */ + data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ + hdr_ptr->hdr.bytes_used += sizeofobject; + hdr_ptr->hdr.bytes_left -= sizeofobject; + + return (void *) data_ptr; +} + + +/* + * Allocation of "large" objects. + * + * The external semantics of these are the same as "small" objects, + * except that FAR pointers are used on 80x86. However the pool + * management heuristics are quite different. We assume that each + * request is large enough that it may as well be passed directly to + * jpeg_get_large; the pool management just links everything together + * so that we can free it all on demand. + * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY + * structures. The routines that create these structures (see below) + * deliberately bunch rows together to ensure a large request size. + */ + +METHODDEF(void FAR *) +alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject) +/* Allocate a "large" object */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + large_pool_ptr hdr_ptr; + size_t odd_bytes; + + /* Check for unsatisfiable request (do now to ensure no overflow below) */ + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) + out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ + + /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ + odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); + if (odd_bytes > 0) + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + + /* Always make a new pool */ + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + + SIZEOF(large_pool_hdr)); + if (hdr_ptr == NULL) + out_of_memory(cinfo, 4); /* jpeg_get_large failed */ + mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); + + /* Success, initialize the new pool header and add to list */ + hdr_ptr->hdr.next = mem->large_list[pool_id]; + /* We maintain space counts in each pool header for statistical purposes, + * even though they are not needed for allocation. + */ + hdr_ptr->hdr.bytes_used = sizeofobject; + hdr_ptr->hdr.bytes_left = 0; + mem->large_list[pool_id] = hdr_ptr; + + return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */ +} + + +/* + * Creation of 2-D sample arrays. + * The pointers are in near heap, the samples themselves in FAR heap. + * + * To minimize allocation overhead and to allow I/O of large contiguous + * blocks, we allocate the sample rows in groups of as many rows as possible + * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request. + * NB: the virtual array control routines, later in this file, know about + * this chunking of rows. The rowsperchunk value is left in the mem manager + * object so that it can be saved away if this sarray is the workspace for + * a virtual array. + */ + +METHODDEF(JSAMPARRAY) +alloc_sarray (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, JDIMENSION numrows) +/* Allocate a 2-D sample array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + JSAMPARRAY result; + JSAMPROW workspace; + JDIMENSION rowsperchunk, currow, i; + long ltemp; + + /* Calculate max # of rows allowed in one allocation chunk */ + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + ((long) samplesperrow * SIZEOF(JSAMPLE)); + if (ltemp <= 0) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + if (ltemp < (long) numrows) + rowsperchunk = (JDIMENSION) ltemp; + else + rowsperchunk = numrows; + mem->last_rowsperchunk = rowsperchunk; + + /* Get space for row pointers (small object) */ + result = (JSAMPARRAY) alloc_small(cinfo, pool_id, + (size_t) (numrows * SIZEOF(JSAMPROW))); + + /* Get the rows themselves (large objects) */ + currow = 0; + while (currow < numrows) { + rowsperchunk = MIN(rowsperchunk, numrows - currow); + workspace = (JSAMPROW) alloc_large(cinfo, pool_id, + (size_t) ((size_t) rowsperchunk * (size_t) samplesperrow + * SIZEOF(JSAMPLE))); + for (i = rowsperchunk; i > 0; i--) { + result[currow++] = workspace; + workspace += samplesperrow; + } + } + + return result; +} + + +/* + * Creation of 2-D coefficient-block arrays. + * This is essentially the same as the code for sample arrays, above. + */ + +METHODDEF(JBLOCKARRAY) +alloc_barray (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, JDIMENSION numrows) +/* Allocate a 2-D coefficient-block array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + JBLOCKARRAY result; + JBLOCKROW workspace; + JDIMENSION rowsperchunk, currow, i; + long ltemp; + + /* Calculate max # of rows allowed in one allocation chunk */ + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + ((long) blocksperrow * SIZEOF(JBLOCK)); + if (ltemp <= 0) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + if (ltemp < (long) numrows) + rowsperchunk = (JDIMENSION) ltemp; + else + rowsperchunk = numrows; + mem->last_rowsperchunk = rowsperchunk; + + /* Get space for row pointers (small object) */ + result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, + (size_t) (numrows * SIZEOF(JBLOCKROW))); + + /* Get the rows themselves (large objects) */ + currow = 0; + while (currow < numrows) { + rowsperchunk = MIN(rowsperchunk, numrows - currow); + workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, + (size_t) ((size_t) rowsperchunk * (size_t) blocksperrow + * SIZEOF(JBLOCK))); + for (i = rowsperchunk; i > 0; i--) { + result[currow++] = workspace; + workspace += blocksperrow; + } + } + + return result; +} + + +/* + * About virtual array management: + * + * The above "normal" array routines are only used to allocate strip buffers + * (as wide as the image, but just a few rows high). Full-image-sized buffers + * are handled as "virtual" arrays. The array is still accessed a strip at a + * time, but the memory manager must save the whole array for repeated + * accesses. The intended implementation is that there is a strip buffer in + * memory (as high as is possible given the desired memory limit), plus a + * backing file that holds the rest of the array. + * + * The request_virt_array routines are told the total size of the image and + * the maximum number of rows that will be accessed at once. The in-memory + * buffer must be at least as large as the maxaccess value. + * + * The request routines create control blocks but not the in-memory buffers. + * That is postponed until realize_virt_arrays is called. At that time the + * total amount of space needed is known (approximately, anyway), so free + * memory can be divided up fairly. + * + * The access_virt_array routines are responsible for making a specific strip + * area accessible (after reading or writing the backing file, if necessary). + * Note that the access routines are told whether the caller intends to modify + * the accessed strip; during a read-only pass this saves having to rewrite + * data to disk. The access routines are also responsible for pre-zeroing + * any newly accessed rows, if pre-zeroing was requested. + * + * In current usage, the access requests are usually for nonoverlapping + * strips; that is, successive access start_row numbers differ by exactly + * num_rows = maxaccess. This means we can get good performance with simple + * buffer dump/reload logic, by making the in-memory buffer be a multiple + * of the access height; then there will never be accesses across bufferload + * boundaries. The code will still work with overlapping access requests, + * but it doesn't handle bufferload overlaps very efficiently. + */ + + +METHODDEF(jvirt_sarray_ptr) +request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero, + JDIMENSION samplesperrow, JDIMENSION numrows, + JDIMENSION maxaccess) +/* Request a virtual 2-D sample array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + jvirt_sarray_ptr result; + + /* Only IMAGE-lifetime virtual arrays are currently supported */ + if (pool_id != JPOOL_IMAGE) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + /* get control block */ + result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, + SIZEOF(struct jvirt_sarray_control)); + + result->mem_buffer = NULL; /* marks array not yet realized */ + result->rows_in_array = numrows; + result->samplesperrow = samplesperrow; + result->maxaccess = maxaccess; + result->pre_zero = pre_zero; + result->b_s_open = FALSE; /* no associated backing-store object */ + result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ + mem->virt_sarray_list = result; + + return result; +} + + +METHODDEF(jvirt_barray_ptr) +request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero, + JDIMENSION blocksperrow, JDIMENSION numrows, + JDIMENSION maxaccess) +/* Request a virtual 2-D coefficient-block array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + jvirt_barray_ptr result; + + /* Only IMAGE-lifetime virtual arrays are currently supported */ + if (pool_id != JPOOL_IMAGE) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + /* get control block */ + result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, + SIZEOF(struct jvirt_barray_control)); + + result->mem_buffer = NULL; /* marks array not yet realized */ + result->rows_in_array = numrows; + result->blocksperrow = blocksperrow; + result->maxaccess = maxaccess; + result->pre_zero = pre_zero; + result->b_s_open = FALSE; /* no associated backing-store object */ + result->next = mem->virt_barray_list; /* add to list of virtual arrays */ + mem->virt_barray_list = result; + + return result; +} + + +METHODDEF(void) +realize_virt_arrays (j_common_ptr cinfo) +/* Allocate the in-memory buffers for any unrealized virtual arrays */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + long space_per_minheight, maximum_space, avail_mem; + long minheights, max_minheights; + jvirt_sarray_ptr sptr; + jvirt_barray_ptr bptr; + + /* Compute the minimum space needed (maxaccess rows in each buffer) + * and the maximum space needed (full image height in each buffer). + * These may be of use to the system-dependent jpeg_mem_available routine. + */ + space_per_minheight = 0; + maximum_space = 0; + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + space_per_minheight += (long) sptr->maxaccess * + (long) sptr->samplesperrow * SIZEOF(JSAMPLE); + maximum_space += (long) sptr->rows_in_array * + (long) sptr->samplesperrow * SIZEOF(JSAMPLE); + } + } + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + space_per_minheight += (long) bptr->maxaccess * + (long) bptr->blocksperrow * SIZEOF(JBLOCK); + maximum_space += (long) bptr->rows_in_array * + (long) bptr->blocksperrow * SIZEOF(JBLOCK); + } + } + + if (space_per_minheight <= 0) + return; /* no unrealized arrays, no work */ + + /* Determine amount of memory to actually use; this is system-dependent. */ + avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space, + mem->total_space_allocated); + + /* If the maximum space needed is available, make all the buffers full + * height; otherwise parcel it out with the same number of minheights + * in each buffer. + */ + if (avail_mem >= maximum_space) + max_minheights = 1000000000L; + else { + max_minheights = avail_mem / space_per_minheight; + /* If there doesn't seem to be enough space, try to get the minimum + * anyway. This allows a "stub" implementation of jpeg_mem_available(). + */ + if (max_minheights <= 0) + max_minheights = 1; + } + + /* Allocate the in-memory buffers and initialize backing store as needed. */ + + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; + if (minheights <= max_minheights) { + /* This buffer fits in memory */ + sptr->rows_in_mem = sptr->rows_in_array; + } else { + /* It doesn't fit in memory, create backing store. */ + sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); + jpeg_open_backing_store(cinfo, & sptr->b_s_info, + (long) sptr->rows_in_array * + (long) sptr->samplesperrow * + (long) SIZEOF(JSAMPLE)); + sptr->b_s_open = TRUE; + } + sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, + sptr->samplesperrow, sptr->rows_in_mem); + sptr->rowsperchunk = mem->last_rowsperchunk; + sptr->cur_start_row = 0; + sptr->first_undef_row = 0; + sptr->dirty = FALSE; + } + } + + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; + if (minheights <= max_minheights) { + /* This buffer fits in memory */ + bptr->rows_in_mem = bptr->rows_in_array; + } else { + /* It doesn't fit in memory, create backing store. */ + bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); + jpeg_open_backing_store(cinfo, & bptr->b_s_info, + (long) bptr->rows_in_array * + (long) bptr->blocksperrow * + (long) SIZEOF(JBLOCK)); + bptr->b_s_open = TRUE; + } + bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, + bptr->blocksperrow, bptr->rows_in_mem); + bptr->rowsperchunk = mem->last_rowsperchunk; + bptr->cur_start_row = 0; + bptr->first_undef_row = 0; + bptr->dirty = FALSE; + } + } +} + + +LOCAL(void) +do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual sample array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); + file_offset = ptr->cur_start_row * bytesperrow; + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + /* One chunk, but check for short chunk at end of buffer */ + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + /* Transfer no more than is currently defined */ + thisrow = (long) ptr->cur_start_row + i; + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + /* Transfer no more than fits in file */ + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + else + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + + +LOCAL(void) +do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual coefficient-block array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); + file_offset = ptr->cur_start_row * bytesperrow; + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + /* One chunk, but check for short chunk at end of buffer */ + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + /* Transfer no more than is currently defined */ + thisrow = (long) ptr->cur_start_row + i; + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + /* Transfer no more than fits in file */ + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + else + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + + +METHODDEF(JSAMPARRAY) +access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, + JDIMENSION start_row, JDIMENSION num_rows, + boolean writable) +/* Access the part of a virtual sample array starting at start_row */ +/* and extending for num_rows rows. writable is true if */ +/* caller intends to modify the accessed area. */ +{ + JDIMENSION end_row = start_row + num_rows; + JDIMENSION undef_row; + + /* debugging check */ + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + ptr->mem_buffer == NULL) + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + + /* Make the desired part of the virtual array accessible */ + if (start_row < ptr->cur_start_row || + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + if (! ptr->b_s_open) + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + /* Flush old buffer contents if necessary */ + if (ptr->dirty) { + do_sarray_io(cinfo, ptr, TRUE); + ptr->dirty = FALSE; + } + /* Decide what part of virtual array to access. + * Algorithm: if target address > current window, assume forward scan, + * load starting at target address. If target address < current window, + * assume backward scan, load so that target area is top of window. + * Note that when switching from forward write to forward read, will have + * start_row = 0, so the limiting case applies and we load from 0 anyway. + */ + if (start_row > ptr->cur_start_row) { + ptr->cur_start_row = start_row; + } else { + /* use long arithmetic here to avoid overflow & unsigned problems */ + long ltemp; + + ltemp = (long) end_row - (long) ptr->rows_in_mem; + if (ltemp < 0) + ltemp = 0; /* don't fall off front end of file */ + ptr->cur_start_row = (JDIMENSION) ltemp; + } + /* Read in the selected part of the array. + * During the initial write pass, we will do no actual read + * because the selected part is all undefined. + */ + do_sarray_io(cinfo, ptr, FALSE); + } + /* Ensure the accessed part of the array is defined; prezero if needed. + * To improve locality of access, we only prezero the part of the array + * that the caller is about to access, not the entire in-memory array. + */ + if (ptr->first_undef_row < end_row) { + if (ptr->first_undef_row < start_row) { + if (writable) /* writer skipped over a section of array */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + undef_row = start_row; /* but reader is allowed to read ahead */ + } else { + undef_row = ptr->first_undef_row; + } + if (writable) + ptr->first_undef_row = end_row; + if (ptr->pre_zero) { + size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE); + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + end_row -= ptr->cur_start_row; + while (undef_row < end_row) { + jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + undef_row++; + } + } else { + if (! writable) /* reader looking at undefined data */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + } + } + /* Flag the buffer dirty if caller will write in it */ + if (writable) + ptr->dirty = TRUE; + /* Return address of proper part of the buffer */ + return ptr->mem_buffer + (start_row - ptr->cur_start_row); +} + + +METHODDEF(JBLOCKARRAY) +access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, + JDIMENSION start_row, JDIMENSION num_rows, + boolean writable) +/* Access the part of a virtual block array starting at start_row */ +/* and extending for num_rows rows. writable is true if */ +/* caller intends to modify the accessed area. */ +{ + JDIMENSION end_row = start_row + num_rows; + JDIMENSION undef_row; + + /* debugging check */ + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + ptr->mem_buffer == NULL) + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + + /* Make the desired part of the virtual array accessible */ + if (start_row < ptr->cur_start_row || + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + if (! ptr->b_s_open) + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + /* Flush old buffer contents if necessary */ + if (ptr->dirty) { + do_barray_io(cinfo, ptr, TRUE); + ptr->dirty = FALSE; + } + /* Decide what part of virtual array to access. + * Algorithm: if target address > current window, assume forward scan, + * load starting at target address. If target address < current window, + * assume backward scan, load so that target area is top of window. + * Note that when switching from forward write to forward read, will have + * start_row = 0, so the limiting case applies and we load from 0 anyway. + */ + if (start_row > ptr->cur_start_row) { + ptr->cur_start_row = start_row; + } else { + /* use long arithmetic here to avoid overflow & unsigned problems */ + long ltemp; + + ltemp = (long) end_row - (long) ptr->rows_in_mem; + if (ltemp < 0) + ltemp = 0; /* don't fall off front end of file */ + ptr->cur_start_row = (JDIMENSION) ltemp; + } + /* Read in the selected part of the array. + * During the initial write pass, we will do no actual read + * because the selected part is all undefined. + */ + do_barray_io(cinfo, ptr, FALSE); + } + /* Ensure the accessed part of the array is defined; prezero if needed. + * To improve locality of access, we only prezero the part of the array + * that the caller is about to access, not the entire in-memory array. + */ + if (ptr->first_undef_row < end_row) { + if (ptr->first_undef_row < start_row) { + if (writable) /* writer skipped over a section of array */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + undef_row = start_row; /* but reader is allowed to read ahead */ + } else { + undef_row = ptr->first_undef_row; + } + if (writable) + ptr->first_undef_row = end_row; + if (ptr->pre_zero) { + size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK); + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + end_row -= ptr->cur_start_row; + while (undef_row < end_row) { + jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + undef_row++; + } + } else { + if (! writable) /* reader looking at undefined data */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + } + } + /* Flag the buffer dirty if caller will write in it */ + if (writable) + ptr->dirty = TRUE; + /* Return address of proper part of the buffer */ + return ptr->mem_buffer + (start_row - ptr->cur_start_row); +} + + +/* + * Release all objects belonging to a specified pool. + */ + +METHODDEF(void) +free_pool (j_common_ptr cinfo, int pool_id) +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + size_t space_freed; + + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + +#ifdef MEM_STATS + if (cinfo->err->trace_level > 1) + print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */ +#endif + + /* If freeing IMAGE pool, close any virtual arrays first */ + if (pool_id == JPOOL_IMAGE) { + jvirt_sarray_ptr sptr; + jvirt_barray_ptr bptr; + + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->b_s_open) { /* there may be no backing store */ + sptr->b_s_open = FALSE; /* prevent recursive close if error */ + (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); + } + } + mem->virt_sarray_list = NULL; + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->b_s_open) { /* there may be no backing store */ + bptr->b_s_open = FALSE; /* prevent recursive close if error */ + (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); + } + } + mem->virt_barray_list = NULL; + } + + /* Release large objects */ + lhdr_ptr = mem->large_list[pool_id]; + mem->large_list[pool_id] = NULL; + + while (lhdr_ptr != NULL) { + large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next; + space_freed = lhdr_ptr->hdr.bytes_used + + lhdr_ptr->hdr.bytes_left + + SIZEOF(large_pool_hdr); + jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + lhdr_ptr = next_lhdr_ptr; + } + + /* Release small objects */ + shdr_ptr = mem->small_list[pool_id]; + mem->small_list[pool_id] = NULL; + + while (shdr_ptr != NULL) { + small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next; + space_freed = shdr_ptr->hdr.bytes_used + + shdr_ptr->hdr.bytes_left + + SIZEOF(small_pool_hdr); + jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + shdr_ptr = next_shdr_ptr; + } +} + + +/* + * Close up shop entirely. + * Note that this cannot be called unless cinfo->mem is non-NULL. + */ + +METHODDEF(void) +self_destruct (j_common_ptr cinfo) +{ + int pool; + + /* Close all backing store, release all memory. + * Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + free_pool(cinfo, pool); + } + + /* Release the memory manager control block too. */ + jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); + cinfo->mem = NULL; /* ensures I will be called only once */ + + jpeg_mem_term(cinfo); /* system-dependent cleanup */ +} + + +/* + * Memory manager initialization. + * When this is called, only the error manager pointer is valid in cinfo! + */ + +GLOBAL(void) +jinit_memory_mgr (j_common_ptr cinfo) +{ + my_mem_ptr mem; + long max_to_use; + int pool; + size_t test_mac; + + cinfo->mem = NULL; /* for safety if init fails */ + + /* Check for configuration errors. + * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably + * doesn't reflect any real hardware alignment requirement. + * The test is a little tricky: for X>0, X and X-1 have no one-bits + * in common if and only if X is a power of 2, ie has only one one-bit. + * Some compilers may give an "unreachable code" warning here; ignore it. + */ + if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0) + ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE); + /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be + * a multiple of SIZEOF(ALIGN_TYPE). + * Again, an "unreachable code" warning may be ignored here. + * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK. + */ + test_mac = (size_t) MAX_ALLOC_CHUNK; + if ((long) test_mac != MAX_ALLOC_CHUNK || + (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + + max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ + + /* Attempt to allocate memory manager's control block */ + mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); + + if (mem == NULL) { + jpeg_mem_term(cinfo); /* system-dependent cleanup */ + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); + } + + /* OK, fill in the method pointers */ + mem->pub.alloc_small = alloc_small; + mem->pub.alloc_large = alloc_large; + mem->pub.alloc_sarray = alloc_sarray; + mem->pub.alloc_barray = alloc_barray; + mem->pub.request_virt_sarray = request_virt_sarray; + mem->pub.request_virt_barray = request_virt_barray; + mem->pub.realize_virt_arrays = realize_virt_arrays; + mem->pub.access_virt_sarray = access_virt_sarray; + mem->pub.access_virt_barray = access_virt_barray; + mem->pub.free_pool = free_pool; + mem->pub.self_destruct = self_destruct; + + /* Make MAX_ALLOC_CHUNK accessible to other modules */ + mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK; + + /* Initialize working state */ + mem->pub.max_memory_to_use = max_to_use; + + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + mem->small_list[pool] = NULL; + mem->large_list[pool] = NULL; + } + mem->virt_sarray_list = NULL; + mem->virt_barray_list = NULL; + + mem->total_space_allocated = SIZEOF(my_memory_mgr); + + /* Declare ourselves open for business */ + cinfo->mem = & mem->pub; + + /* Check for an environment variable JPEGMEM; if found, override the + * default max_memory setting from jpeg_mem_init. Note that the + * surrounding application may again override this value. + * If your system doesn't support getenv(), define NO_GETENV to disable + * this feature. + */ +#ifndef NO_GETENV + { char * memenv; + + if ((memenv = getenv("JPEGMEM")) != NULL) { + char ch = 'x'; + + if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { + if (ch == 'm' || ch == 'M') + max_to_use *= 1000L; + mem->pub.max_memory_to_use = max_to_use * 1000L; + } + } + } +#endif + +} diff --git a/libjpegd/jmemnobs.c b/libjpegd/jmemnobs.c new file mode 100644 index 0000000..eb8c337 --- /dev/null +++ b/libjpegd/jmemnobs.c @@ -0,0 +1,109 @@ +/* + * jmemnobs.c + * + * Copyright (C) 1992-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a really simple implementation of the system- + * dependent portion of the JPEG memory manager. This implementation + * assumes that no backing-store files are needed: all required space + * can be obtained from malloc(). + * This is very portable in the sense that it'll compile on almost anything, + * but you'd better have lots of main memory (or virtual memory) if you want + * to process big images. + * Note that the max_memory_to_use option is ignored by this implementation. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * Here we always say, "we got all you want bud!" + */ + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return max_bytes_needed; +} + + +/* + * Backing store (temporary file) management. + * Since jpeg_mem_available always promised the moon, + * this should never be called and we can just error out. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + ERREXIT(cinfo, JERR_NO_BACKING_STORE); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. Here, there isn't any. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + return 0; /* just set max_memory_to_use to 0 */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/libjpegd/jmemsys.h b/libjpegd/jmemsys.h new file mode 100644 index 0000000..6c3c6d3 --- /dev/null +++ b/libjpegd/jmemsys.h @@ -0,0 +1,198 @@ +/* + * jmemsys.h + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This include file defines the interface between the system-independent + * and system-dependent portions of the JPEG memory manager. No other + * modules need include it. (The system-independent portion is jmemmgr.c; + * there are several different versions of the system-dependent portion.) + * + * This file works as-is for the system-dependent memory managers supplied + * in the IJG distribution. You may need to modify it if you write a + * custom memory manager. If system-dependent changes are needed in + * this file, the best method is to #ifdef them based on a configuration + * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR + * and USE_MAC_MEMMGR. + */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_get_small jGetSmall +#define jpeg_free_small jFreeSmall +#define jpeg_get_large jGetLarge +#define jpeg_free_large jFreeLarge +#define jpeg_mem_available jMemAvail +#define jpeg_open_backing_store jOpenBackStore +#define jpeg_mem_init jMemInit +#define jpeg_mem_term jMemTerm +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* + * These two functions are used to allocate and release small chunks of + * memory. (Typically the total amount requested through jpeg_get_small is + * no more than 20K or so; this will be requested in chunks of a few K each.) + * Behavior should be the same as for the standard library functions malloc + * and free; in particular, jpeg_get_small must return NULL on failure. + * On most systems, these ARE malloc and free. jpeg_free_small is passed the + * size of the object being freed, just in case it's needed. + * On an 80x86 machine using small-data memory model, these manage near heap. + */ + +EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject)); +EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object, + size_t sizeofobject)); + +/* + * These two functions are used to allocate and release large chunks of + * memory (up to the total free space designated by jpeg_mem_available). + * The interface is the same as above, except that on an 80x86 machine, + * far pointers are used. On most other machines these are identical to + * the jpeg_get/free_small routines; but we keep them separate anyway, + * in case a different allocation strategy is desirable for large chunks. + */ + +EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo, + size_t sizeofobject)); +EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object, + size_t sizeofobject)); + +/* + * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may + * be requested in a single call to jpeg_get_large (and jpeg_get_small for that + * matter, but that case should never come into play). This macro is needed + * to model the 64Kb-segment-size limit of far addressing on 80x86 machines. + * On those machines, we expect that jconfig.h will provide a proper value. + * On machines with 32-bit flat address spaces, any large constant may be used. + * + * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type + * size_t and will be a multiple of sizeof(align_type). + */ + +#ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */ +#define MAX_ALLOC_CHUNK 1000000000L +#endif + +/* + * This routine computes the total space still available for allocation by + * jpeg_get_large. If more space than this is needed, backing store will be + * used. NOTE: any memory already allocated must not be counted. + * + * There is a minimum space requirement, corresponding to the minimum + * feasible buffer sizes; jmemmgr.c will request that much space even if + * jpeg_mem_available returns zero. The maximum space needed, enough to hold + * all working storage in memory, is also passed in case it is useful. + * Finally, the total space already allocated is passed. If no better + * method is available, cinfo->mem->max_memory_to_use - already_allocated + * is often a suitable calculation. + * + * It is OK for jpeg_mem_available to underestimate the space available + * (that'll just lead to more backing-store access than is really necessary). + * However, an overestimate will lead to failure. Hence it's wise to subtract + * a slop factor from the true available space. 5% should be enough. + * + * On machines with lots of virtual memory, any large constant may be returned. + * Conversely, zero may be returned to always use the minimum amount of memory. + */ + +EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo, + long min_bytes_needed, + long max_bytes_needed, + long already_allocated)); + + +/* + * This structure holds whatever state is needed to access a single + * backing-store object. The read/write/close method pointers are called + * by jmemmgr.c to manipulate the backing-store object; all other fields + * are private to the system-dependent backing store routines. + */ + +#define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */ + + +#ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */ + +typedef unsigned short XMSH; /* type of extended-memory handles */ +typedef unsigned short EMSH; /* type of expanded-memory handles */ + +typedef union { + short file_handle; /* DOS file handle if it's a temp file */ + XMSH xms_handle; /* handle if it's a chunk of XMS */ + EMSH ems_handle; /* handle if it's a chunk of EMS */ +} handle_union; + +#endif /* USE_MSDOS_MEMMGR */ + +#ifdef USE_MAC_MEMMGR /* Mac-specific junk */ +#include +#endif /* USE_MAC_MEMMGR */ + + +typedef struct backing_store_struct * backing_store_ptr; + +typedef struct backing_store_struct { + /* Methods for reading/writing/closing this backing-store object */ + JMETHOD(void, read_backing_store, (j_common_ptr cinfo, + backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count)); + JMETHOD(void, write_backing_store, (j_common_ptr cinfo, + backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count)); + JMETHOD(void, close_backing_store, (j_common_ptr cinfo, + backing_store_ptr info)); + + /* Private fields for system-dependent backing-store management */ +#ifdef USE_MSDOS_MEMMGR + /* For the MS-DOS manager (jmemdos.c), we need: */ + handle_union handle; /* reference to backing-store storage object */ + char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ +#else +#ifdef USE_MAC_MEMMGR + /* For the Mac manager (jmemmac.c), we need: */ + short temp_file; /* file reference number to temp file */ + FSSpec tempSpec; /* the FSSpec for the temp file */ + char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ +#else + /* For a typical implementation with temp files, we need: */ + FILE * temp_file; /* stdio reference to temp file */ + char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */ +#endif +#endif +} backing_store_info; + + +/* + * Initial opening of a backing-store object. This must fill in the + * read/write/close pointers in the object. The read/write routines + * may take an error exit if the specified maximum file size is exceeded. + * (If jpeg_mem_available always returns a large value, this routine can + * just take an error exit.) + */ + +EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo, + backing_store_ptr info, + long total_bytes_needed)); + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. jpeg_mem_init will be called before anything is + * allocated (and, therefore, nothing in cinfo is of use except the error + * manager pointer). It should return a suitable default value for + * max_memory_to_use; this may subsequently be overridden by the surrounding + * application. (Note that max_memory_to_use is only important if + * jpeg_mem_available chooses to consult it ... no one else will.) + * jpeg_mem_term may assume that all requested memory has been freed and that + * all opened backing-store objects have been closed. + */ + +EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo)); diff --git a/libjpegd/jmorecfg.h b/libjpegd/jmorecfg.h new file mode 100644 index 0000000..54a7d1c --- /dev/null +++ b/libjpegd/jmorecfg.h @@ -0,0 +1,363 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern type + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#define FAR +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/libjpegd/jpegint.h b/libjpegd/jpegint.h new file mode 100644 index 0000000..95b00d4 --- /dev/null +++ b/libjpegd/jpegint.h @@ -0,0 +1,392 @@ +/* + * jpegint.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides common declarations for the various JPEG modules. + * These declarations are considered internal to the JPEG library; most + * applications using the library shouldn't need to include this file. + */ + + +/* Declarations for both compression & decompression */ + +typedef enum { /* Operating modes for buffer controllers */ + JBUF_PASS_THRU, /* Plain stripwise operation */ + /* Remaining modes require a full-image buffer to have been created */ + JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ + JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ + JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ +} J_BUF_MODE; + +/* Values of global_state field (jdapi.c has some dependencies on ordering!) */ +#define CSTATE_START 100 /* after create_compress */ +#define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ +#define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ +#define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ +#define DSTATE_START 200 /* after create_decompress */ +#define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ +#define DSTATE_READY 202 /* found SOS, ready for start_decompress */ +#define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ +#define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ +#define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ +#define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ +#define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ +#define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ +#define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ +#define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ + + +/* Declarations for compression modules */ + +/* Master control module */ +struct jpeg_comp_master { + JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); + JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); + JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean call_pass_startup; /* True if pass_startup must be called */ + boolean is_last_pass; /* True during last pass */ +}; + +/* Main buffer control (downsampled-data buffer) */ +struct jpeg_c_main_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, process_data, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail)); +}; + +/* Compression preprocessing (downsampling input buffer control) */ +struct jpeg_c_prep_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, + JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail)); +}; + +/* Coefficient buffer control */ +struct jpeg_c_coef_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, + JSAMPIMAGE input_buf)); +}; + +/* Colorspace conversion */ +struct jpeg_color_converter { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + JMETHOD(void, color_convert, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows)); +}; + +/* Downsampling */ +struct jpeg_downsampler { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + JMETHOD(void, downsample, (j_compress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_index, + JSAMPIMAGE output_buf, + JDIMENSION out_row_group_index)); + + boolean need_context_rows; /* TRUE if need rows above & below */ +}; + +/* Forward DCT (also controls coefficient quantization) */ +struct jpeg_forward_dct { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + /* perhaps this should be an array??? */ + JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, + jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks)); +}; + +/* Entropy encoding */ +struct jpeg_entropy_encoder { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); + JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); + JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); +}; + +/* Marker writing */ +struct jpeg_marker_writer { + JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); + JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); + /* These routines are exported to allow insertion of extra markers */ + /* Probably only COM and APPn markers should be written this way */ + JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker, + unsigned int datalen)); + JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val)); +}; + + +/* Declarations for decompression modules */ + +/* Master control module */ +struct jpeg_decomp_master { + JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ +}; + +/* Input control module */ +struct jpeg_input_controller { + JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); + JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); + JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean has_multiple_scans; /* True if file has multiple scans */ + boolean eoi_reached; /* True when EOI has been consumed */ +}; + +/* Main buffer control (downsampled-data buffer) */ +struct jpeg_d_main_controller { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, process_data, (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +}; + +/* Coefficient buffer control */ +struct jpeg_d_coef_controller { + JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); + JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); + JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); + JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, + JSAMPIMAGE output_buf)); + /* Pointer to array of coefficient virtual arrays, or NULL if none */ + jvirt_barray_ptr *coef_arrays; +}; + +/* Decompression postprocessing (color quantization buffer control) */ +struct jpeg_d_post_controller { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, + JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +}; + +/* Marker reading & parsing */ +struct jpeg_marker_reader { + JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); + /* Read markers until SOS or EOI. + * Returns same codes as are defined for jpeg_consume_input: + * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + */ + JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); + /* Read a restart marker --- exported for use by entropy decoder only */ + jpeg_marker_parser_method read_restart_marker; + + /* State of marker reader --- nominally internal, but applications + * supplying COM or APPn handlers might like to know the state. + */ + boolean saw_SOI; /* found SOI? */ + boolean saw_SOF; /* found SOF? */ + int next_restart_num; /* next restart number expected (0-7) */ + unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ +}; + +/* Entropy decoding */ +struct jpeg_entropy_decoder { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); + + /* This is here to share code between baseline and progressive decoders; */ + /* other modules probably should not use it */ + boolean insufficient_data; /* set TRUE after emitting warning */ +}; + +/* Inverse DCT (also performs dequantization) */ +typedef JMETHOD(void, inverse_DCT_method_ptr, + (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col)); + +struct jpeg_inverse_dct { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + /* It is useful to allow each component to have a separate IDCT method. */ + inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; +}; + +/* Upsampling (note that upsampler must also call color converter) */ +struct jpeg_upsampler { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, upsample, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, + JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); + + boolean need_context_rows; /* TRUE if need rows above & below */ +}; + +/* Colorspace conversion */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +/* Color quantization or color precision reduction */ +struct jpeg_color_quantizer { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); + JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, + int num_rows)); + JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); +}; + + +/* Miscellaneous useful macros */ + +#undef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#undef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + + +/* We assume that right shift corresponds to signed division by 2 with + * rounding towards minus infinity. This is correct for typical "arithmetic + * shift" instructions that shift in copies of the sign bit. But some + * C compilers implement >> with an unsigned shift. For these machines you + * must define RIGHT_SHIFT_IS_UNSIGNED. + * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. + * It is only applied with constant shift counts. SHIFT_TEMPS must be + * included in the variables of any routine using RIGHT_SHIFT. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define SHIFT_TEMPS INT32 shift_temp; +#define RIGHT_SHIFT(x,shft) \ + ((shift_temp = (x)) < 0 ? \ + (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ + (shift_temp >> (shft))) +#else +#define SHIFT_TEMPS +#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jinit_compress_master jICompress +#define jinit_c_master_control jICMaster +#define jinit_c_main_controller jICMainC +#define jinit_c_prep_controller jICPrepC +#define jinit_c_coef_controller jICCoefC +#define jinit_color_converter jICColor +#define jinit_downsampler jIDownsampler +#define jinit_forward_dct jIFDCT +#define jinit_huff_encoder jIHEncoder +#define jinit_phuff_encoder jIPHEncoder +#define jinit_marker_writer jIMWriter +#define jinit_master_decompress jIDMaster +#define jinit_d_main_controller jIDMainC +#define jinit_d_coef_controller jIDCoefC +#define jinit_d_post_controller jIDPostC +#define jinit_input_controller jIInCtlr +#define jinit_marker_reader jIMReader +#define jinit_huff_decoder jIHDecoder +#define jinit_phuff_decoder jIPHDecoder +#define jinit_inverse_dct jIIDCT +#define jinit_upsampler jIUpsampler +#define jinit_color_deconverter jIDColor +#define jinit_1pass_quantizer jI1Quant +#define jinit_2pass_quantizer jI2Quant +#define jinit_merged_upsampler jIMUpsampler +#define jinit_memory_mgr jIMemMgr +#define jdiv_round_up jDivRound +#define jround_up jRound +#define jcopy_sample_rows jCopySamples +#define jcopy_block_row jCopyBlocks +#define jzero_far jZeroFar +#define jpeg_zigzag_order jZIGTable +#define jpeg_natural_order jZAGTable +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Compression module initialization routines */ +EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, + boolean transcode_only)); +EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); +/* Decompression module initialization routines */ +EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); +/* Memory manager initialization */ +EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); + +/* Utility routines in jutils.c */ +EXTERN(long) jdiv_round_up JPP((long a, long b)); +EXTERN(long) jround_up JPP((long a, long b)); +EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, JDIMENSION num_cols)); +EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks)); +EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); +/* Constant tables in jutils.c */ +#if 0 /* This table is not actually needed in v6a */ +extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ +#endif +extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ + +/* Suppress undefined-structure complaints if necessary. */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +#endif +#endif /* INCOMPLETE_TYPES_BROKEN */ diff --git a/libjpegd/jpeglib.h b/libjpegd/jpeglib.h new file mode 100644 index 0000000..d1be8dd --- /dev/null +++ b/libjpegd/jpeglib.h @@ -0,0 +1,1096 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#endif /* JPEGLIB_H */ diff --git a/libjpegd/jquant1.c b/libjpegd/jquant1.c new file mode 100644 index 0000000..b2f96aa --- /dev/null +++ b/libjpegd/jquant1.c @@ -0,0 +1,856 @@ +/* + * jquant1.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains 1-pass color quantization (color mapping) routines. + * These routines provide mapping to a fixed color map using equally spaced + * color values. Optional Floyd-Steinberg or ordered dithering is available. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef QUANT_1PASS_SUPPORTED + + +/* + * The main purpose of 1-pass quantization is to provide a fast, if not very + * high quality, colormapped output capability. A 2-pass quantizer usually + * gives better visual quality; however, for quantized grayscale output this + * quantizer is perfectly adequate. Dithering is highly recommended with this + * quantizer, though you can turn it off if you really want to. + * + * In 1-pass quantization the colormap must be chosen in advance of seeing the + * image. We use a map consisting of all combinations of Ncolors[i] color + * values for the i'th component. The Ncolors[] values are chosen so that + * their product, the total number of colors, is no more than that requested. + * (In most cases, the product will be somewhat less.) + * + * Since the colormap is orthogonal, the representative value for each color + * component can be determined without considering the other components; + * then these indexes can be combined into a colormap index by a standard + * N-dimensional-array-subscript calculation. Most of the arithmetic involved + * can be precalculated and stored in the lookup table colorindex[]. + * colorindex[i][j] maps pixel value j in component i to the nearest + * representative value (grid plane) for that component; this index is + * multiplied by the array stride for component i, so that the + * index of the colormap entry closest to a given pixel value is just + * sum( colorindex[component-number][pixel-component-value] ) + * Aside from being fast, this scheme allows for variable spacing between + * representative values with no additional lookup cost. + * + * If gamma correction has been applied in color conversion, it might be wise + * to adjust the color grid spacing so that the representative colors are + * equidistant in linear space. At this writing, gamma correction is not + * implemented by jdcolor, so nothing is done here. + */ + + +/* Declarations for ordered dithering. + * + * We use a standard 16x16 ordered dither array. The basic concept of ordered + * dithering is described in many references, for instance Dale Schumacher's + * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991). + * In place of Schumacher's comparisons against a "threshold" value, we add a + * "dither" value to the input pixel and then round the result to the nearest + * output value. The dither value is equivalent to (0.5 - threshold) times + * the distance between output values. For ordered dithering, we assume that + * the output colors are equally spaced; if not, results will probably be + * worse, since the dither may be too much or too little at a given point. + * + * The normal calculation would be to form pixel value + dither, range-limit + * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual. + * We can skip the separate range-limiting step by extending the colorindex + * table in both directions. + */ + +#define ODITHER_SIZE 16 /* dimension of dither matrix */ +/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */ +#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE) /* # cells in matrix */ +#define ODITHER_MASK (ODITHER_SIZE-1) /* mask for wrapping around counters */ + +typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE]; +typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE]; + +static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = { + /* Bayer's order-4 dither array. Generated by the code given in + * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I. + * The values in this array must range from 0 to ODITHER_CELLS-1. + */ + { 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255 }, + { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 }, + { 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 }, + { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 }, + { 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247 }, + { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 }, + { 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 }, + { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 }, + { 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253 }, + { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 }, + { 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 }, + { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 }, + { 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245 }, + { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 }, + { 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 }, + { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 } +}; + + +/* Declarations for Floyd-Steinberg dithering. + * + * Errors are accumulated into the array fserrors[], at a resolution of + * 1/16th of a pixel count. The error at a given pixel is propagated + * to its not-yet-processed neighbors using the standard F-S fractions, + * ... (here) 7/16 + * 3/16 5/16 1/16 + * We work left-to-right on even rows, right-to-left on odd rows. + * + * We can get away with a single array (holding one row's worth of errors) + * by using it to store the current row's errors at pixel columns not yet + * processed, but the next row's errors at columns already processed. We + * need only a few extra variables to hold the errors immediately around the + * current column. (If we are lucky, those variables are in registers, but + * even if not, they're probably cheaper to access than array elements are.) + * + * The fserrors[] array is indexed [component#][position]. + * We provide (#columns + 2) entries per component; the extra entry at each + * end saves us from special-casing the first and last pixels. + * + * Note: on a wide image, we might not have enough room in a PC's near data + * segment to hold the error array; so it is allocated with alloc_large. + */ + +#if BITS_IN_JSAMPLE == 8 +typedef INT16 FSERROR; /* 16 bits should be enough */ +typedef int LOCFSERROR; /* use 'int' for calculation temps */ +#else +typedef INT32 FSERROR; /* may need more than 16 bits */ +typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ +#endif + +typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */ + + +/* Private subobject */ + +#define MAX_Q_COMPS 4 /* max components I can handle */ + +typedef struct { + struct jpeg_color_quantizer pub; /* public fields */ + + /* Initially allocated colormap is saved here */ + JSAMPARRAY sv_colormap; /* The color map as a 2-D pixel array */ + int sv_actual; /* number of entries in use */ + + JSAMPARRAY colorindex; /* Precomputed mapping for speed */ + /* colorindex[i][j] = index of color closest to pixel value j in component i, + * premultiplied as described above. Since colormap indexes must fit into + * JSAMPLEs, the entries of this array will too. + */ + boolean is_padded; /* is the colorindex padded for odither? */ + + int Ncolors[MAX_Q_COMPS]; /* # of values alloced to each component */ + + /* Variables for ordered dithering */ + int row_index; /* cur row's vertical index in dither matrix */ + ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ + + /* Variables for Floyd-Steinberg dithering */ + FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ + boolean on_odd_row; /* flag to remember which row we are on */ +} my_cquantizer; + +typedef my_cquantizer * my_cquantize_ptr; + + +/* + * Policy-making subroutines for create_colormap and create_colorindex. + * These routines determine the colormap to be used. The rest of the module + * only assumes that the colormap is orthogonal. + * + * * select_ncolors decides how to divvy up the available colors + * among the components. + * * output_value defines the set of representative values for a component. + * * largest_input_value defines the mapping from input values to + * representative values for a component. + * Note that the latter two routines may impose different policies for + * different components, though this is not currently done. + */ + + +LOCAL(int) +select_ncolors (j_decompress_ptr cinfo, int Ncolors[]) +/* Determine allocation of desired colors to components, */ +/* and fill in Ncolors[] array to indicate choice. */ +/* Return value is total number of colors (product of Ncolors[] values). */ +{ + int nc = cinfo->out_color_components; /* number of color components */ + int max_colors = cinfo->desired_number_of_colors; + int total_colors, iroot, i, j; + boolean changed; + long temp; + static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE }; + + /* We can allocate at least the nc'th root of max_colors per component. */ + /* Compute floor(nc'th root of max_colors). */ + iroot = 1; + do { + iroot++; + temp = iroot; /* set temp = iroot ** nc */ + for (i = 1; i < nc; i++) + temp *= iroot; + } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */ + iroot--; /* now iroot = floor(root) */ + + /* Must have at least 2 color values per component */ + if (iroot < 2) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp); + + /* Initialize to iroot color values for each component */ + total_colors = 1; + for (i = 0; i < nc; i++) { + Ncolors[i] = iroot; + total_colors *= iroot; + } + /* We may be able to increment the count for one or more components without + * exceeding max_colors, though we know not all can be incremented. + * Sometimes, the first component can be incremented more than once! + * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.) + * In RGB colorspace, try to increment G first, then R, then B. + */ + do { + changed = FALSE; + for (i = 0; i < nc; i++) { + j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); + /* calculate new total_colors if Ncolors[j] is incremented */ + temp = total_colors / Ncolors[j]; + temp *= Ncolors[j]+1; /* done in long arith to avoid oflo */ + if (temp > (long) max_colors) + break; /* won't fit, done with this pass */ + Ncolors[j]++; /* OK, apply the increment */ + total_colors = (int) temp; + changed = TRUE; + } + } while (changed); + + return total_colors; +} + + +LOCAL(int) +output_value (j_decompress_ptr cinfo, int ci, int j, int maxj) +/* Return j'th output value, where j will range from 0 to maxj */ +/* The output values must fall in 0..MAXJSAMPLE in increasing order */ +{ + /* We always provide values 0 and MAXJSAMPLE for each component; + * any additional values are equally spaced between these limits. + * (Forcing the upper and lower values to the limits ensures that + * dithering can't produce a color outside the selected gamut.) + */ + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); +} + + +LOCAL(int) +largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj) +/* Return largest input value that should map to j'th output value */ +/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */ +{ + /* Breakpoints are halfway between values returned by output_value */ + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); +} + + +/* + * Create the colormap. + */ + +LOCAL(void) +create_colormap (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPARRAY colormap; /* Created colormap */ + int total_colors; /* Number of distinct output colors */ + int i,j,k, nci, blksize, blkdist, ptr, val; + + /* Select number of colors for each component */ + total_colors = select_ncolors(cinfo, cquantize->Ncolors); + + /* Report selected color counts */ + if (cinfo->out_color_components == 3) + TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, + total_colors, cquantize->Ncolors[0], + cquantize->Ncolors[1], cquantize->Ncolors[2]); + else + TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); + + /* Allocate and fill in the colormap. */ + /* The colors are ordered in the map in standard row-major order, */ + /* i.e. rightmost (highest-indexed) color changes most rapidly. */ + + colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + /* blkdist is distance between groups of identical entries for a component */ + blkdist = total_colors; + + for (i = 0; i < cinfo->out_color_components; i++) { + /* fill in colormap entries for i'th color component */ + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + blksize = blkdist / nci; + for (j = 0; j < nci; j++) { + /* Compute j'th output value (out of nci) for component */ + val = output_value(cinfo, i, j, nci-1); + /* Fill in all colormap entries that have this value of this component */ + for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { + /* fill in blksize entries beginning at ptr */ + for (k = 0; k < blksize; k++) + colormap[i][ptr+k] = (JSAMPLE) val; + } + } + blkdist = blksize; /* blksize of this color is blkdist of next */ + } + + /* Save the colormap in private storage, + * where it will survive color quantization mode changes. + */ + cquantize->sv_colormap = colormap; + cquantize->sv_actual = total_colors; +} + + +/* + * Create the color index table. + */ + +LOCAL(void) +create_colorindex (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPROW indexptr; + int i,j,k, nci, blksize, val, pad; + + /* For ordered dither, we pad the color index tables by MAXJSAMPLE in + * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE). + * This is not necessary in the other dithering modes. However, we + * flag whether it was done in case user changes dithering mode. + */ + if (cinfo->dither_mode == JDITHER_ORDERED) { + pad = MAXJSAMPLE*2; + cquantize->is_padded = TRUE; + } else { + pad = 0; + cquantize->is_padded = FALSE; + } + + cquantize->colorindex = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (MAXJSAMPLE+1 + pad), + (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + blksize = cquantize->sv_actual; + + for (i = 0; i < cinfo->out_color_components; i++) { + /* fill in colorindex entries for i'th color component */ + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + blksize = blksize / nci; + + /* adjust colorindex pointers to provide padding at negative indexes. */ + if (pad) + cquantize->colorindex[i] += MAXJSAMPLE; + + /* in loop, val = index of current output value, */ + /* and k = largest j that maps to current val */ + indexptr = cquantize->colorindex[i]; + val = 0; + k = largest_input_value(cinfo, i, 0, nci-1); + for (j = 0; j <= MAXJSAMPLE; j++) { + while (j > k) /* advance val if past boundary */ + k = largest_input_value(cinfo, i, ++val, nci-1); + /* premultiply so that no multiplication needed in main processing */ + indexptr[j] = (JSAMPLE) (val * blksize); + } + /* Pad at both ends if necessary */ + if (pad) + for (j = 1; j <= MAXJSAMPLE; j++) { + indexptr[-j] = indexptr[0]; + indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; + } + } +} + + +/* + * Create an ordered-dither array for a component having ncolors + * distinct output values. + */ + +LOCAL(ODITHER_MATRIX_PTR) +make_odither_array (j_decompress_ptr cinfo, int ncolors) +{ + ODITHER_MATRIX_PTR odither; + int j,k; + INT32 num,den; + + odither = (ODITHER_MATRIX_PTR) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ODITHER_MATRIX)); + /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1). + * Hence the dither value for the matrix cell with fill order f + * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). + * On 16-bit-int machine, be careful to avoid overflow. + */ + den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); + for (j = 0; j < ODITHER_SIZE; j++) { + for (k = 0; k < ODITHER_SIZE; k++) { + num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) + * MAXJSAMPLE; + /* Ensure round towards zero despite C's lack of consistency + * about rounding negative values in integer division... + */ + odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); + } + } + return odither; +} + + +/* + * Create the ordered-dither tables. + * Components having the same number of representative colors may + * share a dither table. + */ + +LOCAL(void) +create_odither_tables (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + ODITHER_MATRIX_PTR odither; + int i, j, nci; + + for (i = 0; i < cinfo->out_color_components; i++) { + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + odither = NULL; /* search for matching prior component */ + for (j = 0; j < i; j++) { + if (nci == cquantize->Ncolors[j]) { + odither = cquantize->odither[j]; + break; + } + } + if (odither == NULL) /* need a new table? */ + odither = make_odither_array(cinfo, nci); + cquantize->odither[i] = odither; + } +} + + +/* + * Map some rows of pixels to the output colormapped representation. + */ + +METHODDEF(void) +color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPARRAY colorindex = cquantize->colorindex; + register int pixcode, ci; + register JSAMPROW ptrin, ptrout; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + register int nc = cinfo->out_color_components; + + for (row = 0; row < num_rows; row++) { + ptrin = input_buf[row]; + ptrout = output_buf[row]; + for (col = width; col > 0; col--) { + pixcode = 0; + for (ci = 0; ci < nc; ci++) { + pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); + } + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + + +METHODDEF(void) +color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW ptrin, ptrout; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + ptrin = input_buf[row]; + ptrout = output_buf[row]; + for (col = width; col > 0; col--) { + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + + +METHODDEF(void) +quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, with ordered dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex_ci; + int * dither; /* points to active row of dither matrix */ + int row_index, col_index; /* current indexes into dither matrix */ + int nc = cinfo->out_color_components; + int ci; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + /* Initialize output values to 0 so can process components separately */ + jzero_far((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); + row_index = cquantize->row_index; + for (ci = 0; ci < nc; ci++) { + input_ptr = input_buf[row] + ci; + output_ptr = output_buf[row]; + colorindex_ci = cquantize->colorindex[ci]; + dither = cquantize->odither[ci][row_index]; + col_index = 0; + + for (col = width; col > 0; col--) { + /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE, + * select output value, accumulate into output code for this pixel. + * Range-limiting need not be done explicitly, as we have extended + * the colorindex table to produce the right answers for out-of-range + * inputs. The maximum dither is +- MAXJSAMPLE; this sets the + * required amount of padding. + */ + *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; + input_ptr += nc; + output_ptr++; + col_index = (col_index + 1) & ODITHER_MASK; + } + } + /* Advance row index for next row */ + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + + +METHODDEF(void) +quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, with ordered dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int * dither0; /* points to active row of dither matrix */ + int * dither1; + int * dither2; + int row_index, col_index; /* current indexes into dither matrix */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + row_index = cquantize->row_index; + input_ptr = input_buf[row]; + output_ptr = output_buf[row]; + dither0 = cquantize->odither[0][row_index]; + dither1 = cquantize->odither[1][row_index]; + dither2 = cquantize->odither[2][row_index]; + col_index = 0; + + for (col = width; col > 0; col--) { + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + + dither0[col_index]]); + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + dither1[col_index]]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + + dither2[col_index]]); + *output_ptr++ = (JSAMPLE) pixcode; + col_index = (col_index + 1) & ODITHER_MASK; + } + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + + +METHODDEF(void) +quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, with Floyd-Steinberg dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register LOCFSERROR cur; /* current error or pixel value */ + LOCFSERROR belowerr; /* error for pixel below cur */ + LOCFSERROR bpreverr; /* error for below/prev col */ + LOCFSERROR bnexterr; /* error for below/next col */ + LOCFSERROR delta; + register FSERRPTR errorptr; /* => fserrors[] at column before current */ + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex_ci; + JSAMPROW colormap_ci; + int pixcode; + int nc = cinfo->out_color_components; + int dir; /* 1 for left-to-right, -1 for right-to-left */ + int dirnc; /* dir * nc */ + int ci; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + JSAMPLE *range_limit = cinfo->sample_range_limit; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + /* Initialize output values to 0 so can process components separately */ + jzero_far((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); + for (ci = 0; ci < nc; ci++) { + input_ptr = input_buf[row] + ci; + output_ptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + input_ptr += (width-1) * nc; /* so point to rightmost pixel */ + output_ptr += width-1; + dir = -1; + dirnc = -nc; + errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ + } else { + /* work left to right in this row */ + dir = 1; + dirnc = nc; + errorptr = cquantize->fserrors[ci]; /* => entry before first column */ + } + colorindex_ci = cquantize->colorindex[ci]; + colormap_ci = cquantize->sv_colormap[ci]; + /* Preset error values: no error propagated to first pixel from left */ + cur = 0; + /* and no error propagated to row below yet */ + belowerr = bpreverr = 0; + + for (col = width; col > 0; col--) { + /* cur holds the error propagated from the previous pixel on the + * current line. Add the error propagated from the previous line + * to form the complete error correction term for this pixel, and + * round the error term (which is expressed * 16) to an integer. + * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct + * for either sign of the error value. + * Note: errorptr points to *previous* column's array entry. + */ + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. + * The maximum error is +- MAXJSAMPLE; this sets the required size + * of the range_limit array. + */ + cur += GETJSAMPLE(*input_ptr); + cur = GETJSAMPLE(range_limit[cur]); + /* Select output value, accumulate into output code for this pixel */ + pixcode = GETJSAMPLE(colorindex_ci[cur]); + *output_ptr += (JSAMPLE) pixcode; + /* Compute actual representation error at this pixel */ + /* Note: we can do this even though we don't have the final */ + /* pixel code, because the colormap is orthogonal. */ + cur -= GETJSAMPLE(colormap_ci[pixcode]); + /* Compute error fractions to be propagated to adjacent pixels. + * Add these into the running sums, and simultaneously shift the + * next-line error sums left by 1 column. + */ + bnexterr = cur; + delta = cur * 2; + cur += delta; /* form error * 3 */ + errorptr[0] = (FSERROR) (bpreverr + cur); + cur += delta; /* form error * 5 */ + bpreverr = belowerr + cur; + belowerr = bnexterr; + cur += delta; /* form error * 7 */ + /* At this point cur contains the 7/16 error value to be propagated + * to the next pixel on the current line, and all the errors for the + * next line have been shifted over. We are therefore ready to move on. + */ + input_ptr += dirnc; /* advance input ptr to next column */ + output_ptr += dir; /* advance output ptr to next column */ + errorptr += dir; /* advance errorptr to current column */ + } + /* Post-loop cleanup: we must unload the final error value into the + * final fserrors[] entry. Note we need not unload belowerr because + * it is for the dummy column before or after the actual array. + */ + errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ + } + cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); + } +} + + +/* + * Allocate workspace for Floyd-Steinberg errors. + */ + +LOCAL(void) +alloc_fs_workspace (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + for (i = 0; i < cinfo->out_color_components; i++) { + cquantize->fserrors[i] = (FSERRPTR) + (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + } +} + + +/* + * Initialize for one-pass color quantization. + */ + +METHODDEF(void) +start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + /* Install my colormap. */ + cinfo->colormap = cquantize->sv_colormap; + cinfo->actual_number_of_colors = cquantize->sv_actual; + + /* Initialize for desired dithering mode. */ + switch (cinfo->dither_mode) { + case JDITHER_NONE: + if (cinfo->out_color_components == 3) + cquantize->pub.color_quantize = color_quantize3; + else + cquantize->pub.color_quantize = color_quantize; + break; + case JDITHER_ORDERED: + if (cinfo->out_color_components == 3) + cquantize->pub.color_quantize = quantize3_ord_dither; + else + cquantize->pub.color_quantize = quantize_ord_dither; + cquantize->row_index = 0; /* initialize state for ordered dither */ + /* If user changed to ordered dither from another mode, + * we must recreate the color index table with padding. + * This will cost extra space, but probably isn't very likely. + */ + if (! cquantize->is_padded) + create_colorindex(cinfo); + /* Create ordered-dither tables if we didn't already. */ + if (cquantize->odither[0] == NULL) + create_odither_tables(cinfo); + break; + case JDITHER_FS: + cquantize->pub.color_quantize = quantize_fs_dither; + cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */ + /* Allocate Floyd-Steinberg workspace if didn't already. */ + if (cquantize->fserrors[0] == NULL) + alloc_fs_workspace(cinfo); + /* Initialize the propagated errors to zero. */ + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + for (i = 0; i < cinfo->out_color_components; i++) + jzero_far((void FAR *) cquantize->fserrors[i], arraysize); + break; + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } +} + + +/* + * Finish up at the end of the pass. + */ + +METHODDEF(void) +finish_pass_1_quant (j_decompress_ptr cinfo) +{ + /* no work in 1-pass case */ +} + + +/* + * Switch to a new external colormap between output passes. + * Shouldn't get to this module! + */ + +METHODDEF(void) +new_color_map_1_quant (j_decompress_ptr cinfo) +{ + ERREXIT(cinfo, JERR_MODE_CHANGE); +} + + +/* + * Module initialization routine for 1-pass color quantization. + */ + +GLOBAL(void) +jinit_1pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_1_quant; + cquantize->pub.finish_pass = finish_pass_1_quant; + cquantize->pub.new_color_map = new_color_map_1_quant; + cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */ + cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */ + + /* Make sure my internal arrays won't overflow */ + if (cinfo->out_color_components > MAX_Q_COMPS) + ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS); + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1)) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1); + + /* Create the colormap and color index table. */ + create_colormap(cinfo); + create_colorindex(cinfo); + + /* Allocate Floyd-Steinberg workspace now if requested. + * We do this now since it is FAR storage and may affect the memory + * manager's space calculations. If the user changes to FS dither + * mode in a later pass, we will allocate the space then, and will + * possibly overrun the max_memory_to_use setting. + */ + if (cinfo->dither_mode == JDITHER_FS) + alloc_fs_workspace(cinfo); +} + +#endif /* QUANT_1PASS_SUPPORTED */ diff --git a/libjpegd/jquant2.c b/libjpegd/jquant2.c new file mode 100644 index 0000000..af601e3 --- /dev/null +++ b/libjpegd/jquant2.c @@ -0,0 +1,1310 @@ +/* + * jquant2.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains 2-pass color quantization (color mapping) routines. + * These routines provide selection of a custom color map for an image, + * followed by mapping of the image to that color map, with optional + * Floyd-Steinberg dithering. + * It is also possible to use just the second pass to map to an arbitrary + * externally-given color map. + * + * Note: ordered dithering is not supported, since there isn't any fast + * way to compute intercolor distances; it's unclear that ordered dither's + * fundamental assumptions even hold with an irregularly spaced color map. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef QUANT_2PASS_SUPPORTED + + +/* + * This module implements the well-known Heckbert paradigm for color + * quantization. Most of the ideas used here can be traced back to + * Heckbert's seminal paper + * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display", + * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304. + * + * In the first pass over the image, we accumulate a histogram showing the + * usage count of each possible color. To keep the histogram to a reasonable + * size, we reduce the precision of the input; typical practice is to retain + * 5 or 6 bits per color, so that 8 or 4 different input values are counted + * in the same histogram cell. + * + * Next, the color-selection step begins with a box representing the whole + * color space, and repeatedly splits the "largest" remaining box until we + * have as many boxes as desired colors. Then the mean color in each + * remaining box becomes one of the possible output colors. + * + * The second pass over the image maps each input pixel to the closest output + * color (optionally after applying a Floyd-Steinberg dithering correction). + * This mapping is logically trivial, but making it go fast enough requires + * considerable care. + * + * Heckbert-style quantizers vary a good deal in their policies for choosing + * the "largest" box and deciding where to cut it. The particular policies + * used here have proved out well in experimental comparisons, but better ones + * may yet be found. + * + * In earlier versions of the IJG code, this module quantized in YCbCr color + * space, processing the raw upsampled data without a color conversion step. + * This allowed the color conversion math to be done only once per colormap + * entry, not once per pixel. However, that optimization precluded other + * useful optimizations (such as merging color conversion with upsampling) + * and it also interfered with desired capabilities such as quantizing to an + * externally-supplied colormap. We have therefore abandoned that approach. + * The present code works in the post-conversion color space, typically RGB. + * + * To improve the visual quality of the results, we actually work in scaled + * RGB space, giving G distances more weight than R, and R in turn more than + * B. To do everything in integer math, we must use integer scale factors. + * The 2/3/1 scale factors used here correspond loosely to the relative + * weights of the colors in the NTSC grayscale equation. + * If you want to use this code to quantize a non-RGB color space, you'll + * probably need to change these scale factors. + */ + +#define R_SCALE 2 /* scale R distances by this much */ +#define G_SCALE 3 /* scale G distances by this much */ +#define B_SCALE 1 /* and B by this much */ + +/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined + * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B + * and B,G,R orders. If you define some other weird order in jmorecfg.h, + * you'll get compile errors until you extend this logic. In that case + * you'll probably want to tweak the histogram sizes too. + */ + +#if RGB_RED == 0 +#define C0_SCALE R_SCALE +#endif +#if RGB_BLUE == 0 +#define C0_SCALE B_SCALE +#endif +#if RGB_GREEN == 1 +#define C1_SCALE G_SCALE +#endif +#if RGB_RED == 2 +#define C2_SCALE R_SCALE +#endif +#if RGB_BLUE == 2 +#define C2_SCALE B_SCALE +#endif + + +/* + * First we have the histogram data structure and routines for creating it. + * + * The number of bits of precision can be adjusted by changing these symbols. + * We recommend keeping 6 bits for G and 5 each for R and B. + * If you have plenty of memory and cycles, 6 bits all around gives marginally + * better results; if you are short of memory, 5 bits all around will save + * some space but degrade the results. + * To maintain a fully accurate histogram, we'd need to allocate a "long" + * (preferably unsigned long) for each cell. In practice this is overkill; + * we can get by with 16 bits per cell. Few of the cell counts will overflow, + * and clamping those that do overflow to the maximum value will give close- + * enough results. This reduces the recommended histogram size from 256Kb + * to 128Kb, which is a useful savings on PC-class machines. + * (In the second pass the histogram space is re-used for pixel mapping data; + * in that capacity, each cell must be able to store zero to the number of + * desired colors. 16 bits/cell is plenty for that too.) + * Since the JPEG code is intended to run in small memory model on 80x86 + * machines, we can't just allocate the histogram in one chunk. Instead + * of a true 3-D array, we use a row of pointers to 2-D arrays. Each + * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and + * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that + * on 80x86 machines, the pointer row is in near memory but the actual + * arrays are in far memory (same arrangement as we use for image arrays). + */ + +#define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */ + +/* These will do the right thing for either R,G,B or B,G,R color order, + * but you may not like the results for other color orders. + */ +#define HIST_C0_BITS 5 /* bits of precision in R/B histogram */ +#define HIST_C1_BITS 6 /* bits of precision in G histogram */ +#define HIST_C2_BITS 5 /* bits of precision in B/R histogram */ + +/* Number of elements along histogram axes. */ +#define HIST_C0_ELEMS (1<cquantize; + register JSAMPROW ptr; + register histptr histp; + register hist3d histogram = cquantize->histogram; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + ptr = input_buf[row]; + for (col = width; col > 0; col--) { + /* get pixel value and index into the histogram */ + histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; + /* increment, check for overflow and undo increment if so. */ + if (++(*histp) <= 0) + (*histp)--; + ptr += 3; + } + } +} + + +/* + * Next we have the really interesting routines: selection of a colormap + * given the completed histogram. + * These routines work with a list of "boxes", each representing a rectangular + * subset of the input color space (to histogram precision). + */ + +typedef struct { + /* The bounds of the box (inclusive); expressed as histogram indexes */ + int c0min, c0max; + int c1min, c1max; + int c2min, c2max; + /* The volume (actually 2-norm) of the box */ + INT32 volume; + /* The number of nonzero histogram cells within this box */ + long colorcount; +} box; + +typedef box * boxptr; + + +LOCAL(boxptr) +find_biggest_color_pop (boxptr boxlist, int numboxes) +/* Find the splittable box with the largest color population */ +/* Returns NULL if no splittable boxes remain */ +{ + register boxptr boxp; + register int i; + register long maxc = 0; + boxptr which = NULL; + + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + if (boxp->colorcount > maxc && boxp->volume > 0) { + which = boxp; + maxc = boxp->colorcount; + } + } + return which; +} + + +LOCAL(boxptr) +find_biggest_volume (boxptr boxlist, int numboxes) +/* Find the splittable box with the largest (scaled) volume */ +/* Returns NULL if no splittable boxes remain */ +{ + register boxptr boxp; + register int i; + register INT32 maxv = 0; + boxptr which = NULL; + + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + if (boxp->volume > maxv) { + which = boxp; + maxv = boxp->volume; + } + } + return which; +} + + +LOCAL(void) +update_box (j_decompress_ptr cinfo, boxptr boxp) +/* Shrink the min/max bounds of a box to enclose only nonzero elements, */ +/* and recompute its volume and population */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + histptr histp; + int c0,c1,c2; + int c0min,c0max,c1min,c1max,c2min,c2max; + INT32 dist0,dist1,dist2; + long ccount; + + c0min = boxp->c0min; c0max = boxp->c0max; + c1min = boxp->c1min; c1max = boxp->c1max; + c2min = boxp->c2min; c2max = boxp->c2max; + + if (c0max > c0min) + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c0min = c0min = c0; + goto have_c0min; + } + } + have_c0min: + if (c0max > c0min) + for (c0 = c0max; c0 >= c0min; c0--) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c0max = c0max = c0; + goto have_c0max; + } + } + have_c0max: + if (c1max > c1min) + for (c1 = c1min; c1 <= c1max; c1++) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c1min = c1min = c1; + goto have_c1min; + } + } + have_c1min: + if (c1max > c1min) + for (c1 = c1max; c1 >= c1min; c1--) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c1max = c1max = c1; + goto have_c1max; + } + } + have_c1max: + if (c2max > c2min) + for (c2 = c2min; c2 <= c2max; c2++) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1min][c2]; + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + if (*histp != 0) { + boxp->c2min = c2min = c2; + goto have_c2min; + } + } + have_c2min: + if (c2max > c2min) + for (c2 = c2max; c2 >= c2min; c2--) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1min][c2]; + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + if (*histp != 0) { + boxp->c2max = c2max = c2; + goto have_c2max; + } + } + have_c2max: + + /* Update box volume. + * We use 2-norm rather than real volume here; this biases the method + * against making long narrow boxes, and it has the side benefit that + * a box is splittable iff norm > 0. + * Since the differences are expressed in histogram-cell units, + * we have to shift back to JSAMPLE units to get consistent distances; + * after which, we scale according to the selected distance scale factors. + */ + dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; + dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; + dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; + boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; + + /* Now scan remaining volume of box and compute population */ + ccount = 0; + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++, histp++) + if (*histp != 0) { + ccount++; + } + } + boxp->colorcount = ccount; +} + + +LOCAL(int) +median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes, + int desired_colors) +/* Repeatedly select and split the largest box until we have enough boxes */ +{ + int n,lb; + int c0,c1,c2,cmax; + register boxptr b1,b2; + + while (numboxes < desired_colors) { + /* Select box to split. + * Current algorithm: by population for first half, then by volume. + */ + if (numboxes*2 <= desired_colors) { + b1 = find_biggest_color_pop(boxlist, numboxes); + } else { + b1 = find_biggest_volume(boxlist, numboxes); + } + if (b1 == NULL) /* no splittable boxes left! */ + break; + b2 = &boxlist[numboxes]; /* where new box will go */ + /* Copy the color bounds to the new box. */ + b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max; + b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min; + /* Choose which axis to split the box on. + * Current algorithm: longest scaled axis. + * See notes in update_box about scaling distances. + */ + c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; + c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; + c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; + /* We want to break any ties in favor of green, then red, blue last. + * This code does the right thing for R,G,B or B,G,R color orders only. + */ +#if RGB_RED == 0 + cmax = c1; n = 1; + if (c0 > cmax) { cmax = c0; n = 0; } + if (c2 > cmax) { n = 2; } +#else + cmax = c1; n = 1; + if (c2 > cmax) { cmax = c2; n = 2; } + if (c0 > cmax) { n = 0; } +#endif + /* Choose split point along selected axis, and update box bounds. + * Current algorithm: split at halfway point. + * (Since the box has been shrunk to minimum volume, + * any split will produce two nonempty subboxes.) + * Note that lb value is max for lower box, so must be < old max. + */ + switch (n) { + case 0: + lb = (b1->c0max + b1->c0min) / 2; + b1->c0max = lb; + b2->c0min = lb+1; + break; + case 1: + lb = (b1->c1max + b1->c1min) / 2; + b1->c1max = lb; + b2->c1min = lb+1; + break; + case 2: + lb = (b1->c2max + b1->c2min) / 2; + b1->c2max = lb; + b2->c2min = lb+1; + break; + } + /* Update stats for boxes */ + update_box(cinfo, b1); + update_box(cinfo, b2); + numboxes++; + } + return numboxes; +} + + +LOCAL(void) +compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor) +/* Compute representative color for a box, put it in colormap[icolor] */ +{ + /* Current algorithm: mean weighted by pixels (not colors) */ + /* Note it is important to get the rounding correct! */ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + histptr histp; + int c0,c1,c2; + int c0min,c0max,c1min,c1max,c2min,c2max; + long count; + long total = 0; + long c0total = 0; + long c1total = 0; + long c2total = 0; + + c0min = boxp->c0min; c0max = boxp->c0max; + c1min = boxp->c1min; c1max = boxp->c1max; + c2min = boxp->c2min; c2max = boxp->c2max; + + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) { + if ((count = *histp++) != 0) { + total += count; + c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; + c1total += ((c1 << C1_SHIFT) + ((1<>1)) * count; + c2total += ((c2 << C2_SHIFT) + ((1<>1)) * count; + } + } + } + + cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); + cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); + cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); +} + + +LOCAL(void) +select_colors (j_decompress_ptr cinfo, int desired_colors) +/* Master routine for color selection */ +{ + boxptr boxlist; + int numboxes; + int i; + + /* Allocate workspace for box list */ + boxlist = (boxptr) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box)); + /* Initialize one box containing whole space */ + numboxes = 1; + boxlist[0].c0min = 0; + boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; + boxlist[0].c1min = 0; + boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT; + boxlist[0].c2min = 0; + boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT; + /* Shrink it to actually-used volume and set its statistics */ + update_box(cinfo, & boxlist[0]); + /* Perform median-cut to produce final box list */ + numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors); + /* Compute the representative color for each box, fill colormap */ + for (i = 0; i < numboxes; i++) + compute_color(cinfo, & boxlist[i], i); + cinfo->actual_number_of_colors = numboxes; + TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); +} + + +/* + * These routines are concerned with the time-critical task of mapping input + * colors to the nearest color in the selected colormap. + * + * We re-use the histogram space as an "inverse color map", essentially a + * cache for the results of nearest-color searches. All colors within a + * histogram cell will be mapped to the same colormap entry, namely the one + * closest to the cell's center. This may not be quite the closest entry to + * the actual input color, but it's almost as good. A zero in the cache + * indicates we haven't found the nearest color for that cell yet; the array + * is cleared to zeroes before starting the mapping pass. When we find the + * nearest color for a cell, its colormap index plus one is recorded in the + * cache for future use. The pass2 scanning routines call fill_inverse_cmap + * when they need to use an unfilled entry in the cache. + * + * Our method of efficiently finding nearest colors is based on the "locally + * sorted search" idea described by Heckbert and on the incremental distance + * calculation described by Spencer W. Thomas in chapter III.1 of Graphics + * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that + * the distances from a given colormap entry to each cell of the histogram can + * be computed quickly using an incremental method: the differences between + * distances to adjacent cells themselves differ by a constant. This allows a + * fairly fast implementation of the "brute force" approach of computing the + * distance from every colormap entry to every histogram cell. Unfortunately, + * it needs a work array to hold the best-distance-so-far for each histogram + * cell (because the inner loop has to be over cells, not colormap entries). + * The work array elements have to be INT32s, so the work array would need + * 256Kb at our recommended precision. This is not feasible in DOS machines. + * + * To get around these problems, we apply Thomas' method to compute the + * nearest colors for only the cells within a small subbox of the histogram. + * The work array need be only as big as the subbox, so the memory usage + * problem is solved. Furthermore, we need not fill subboxes that are never + * referenced in pass2; many images use only part of the color gamut, so a + * fair amount of work is saved. An additional advantage of this + * approach is that we can apply Heckbert's locality criterion to quickly + * eliminate colormap entries that are far away from the subbox; typically + * three-fourths of the colormap entries are rejected by Heckbert's criterion, + * and we need not compute their distances to individual cells in the subbox. + * The speed of this approach is heavily influenced by the subbox size: too + * small means too much overhead, too big loses because Heckbert's criterion + * can't eliminate as many colormap entries. Empirically the best subbox + * size seems to be about 1/512th of the histogram (1/8th in each direction). + * + * Thomas' article also describes a refined method which is asymptotically + * faster than the brute-force method, but it is also far more complex and + * cannot efficiently be applied to small subboxes. It is therefore not + * useful for programs intended to be portable to DOS machines. On machines + * with plenty of memory, filling the whole histogram in one shot with Thomas' + * refined method might be faster than the present code --- but then again, + * it might not be any faster, and it's certainly more complicated. + */ + + +/* log2(histogram cells in update box) for each axis; this can be adjusted */ +#define BOX_C0_LOG (HIST_C0_BITS-3) +#define BOX_C1_LOG (HIST_C1_BITS-3) +#define BOX_C2_LOG (HIST_C2_BITS-3) + +#define BOX_C0_ELEMS (1<actual_number_of_colors; + int maxc0, maxc1, maxc2; + int centerc0, centerc1, centerc2; + int i, x, ncolors; + INT32 minmaxdist, min_dist, max_dist, tdist; + INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */ + + /* Compute true coordinates of update box's upper corner and center. + * Actually we compute the coordinates of the center of the upper-corner + * histogram cell, which are the upper bounds of the volume we care about. + * Note that since ">>" rounds down, the "center" values may be closer to + * min than to max; hence comparisons to them must be "<=", not "<". + */ + maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT)); + centerc0 = (minc0 + maxc0) >> 1; + maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT)); + centerc1 = (minc1 + maxc1) >> 1; + maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT)); + centerc2 = (minc2 + maxc2) >> 1; + + /* For each color in colormap, find: + * 1. its minimum squared-distance to any point in the update box + * (zero if color is within update box); + * 2. its maximum squared-distance to any point in the update box. + * Both of these can be found by considering only the corners of the box. + * We save the minimum distance for each color in mindist[]; + * only the smallest maximum distance is of interest. + */ + minmaxdist = 0x7FFFFFFFL; + + for (i = 0; i < numcolors; i++) { + /* We compute the squared-c0-distance term, then add in the other two. */ + x = GETJSAMPLE(cinfo->colormap[0][i]); + if (x < minc0) { + tdist = (x - minc0) * C0_SCALE; + min_dist = tdist*tdist; + tdist = (x - maxc0) * C0_SCALE; + max_dist = tdist*tdist; + } else if (x > maxc0) { + tdist = (x - maxc0) * C0_SCALE; + min_dist = tdist*tdist; + tdist = (x - minc0) * C0_SCALE; + max_dist = tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + min_dist = 0; + if (x <= centerc0) { + tdist = (x - maxc0) * C0_SCALE; + max_dist = tdist*tdist; + } else { + tdist = (x - minc0) * C0_SCALE; + max_dist = tdist*tdist; + } + } + + x = GETJSAMPLE(cinfo->colormap[1][i]); + if (x < minc1) { + tdist = (x - minc1) * C1_SCALE; + min_dist += tdist*tdist; + tdist = (x - maxc1) * C1_SCALE; + max_dist += tdist*tdist; + } else if (x > maxc1) { + tdist = (x - maxc1) * C1_SCALE; + min_dist += tdist*tdist; + tdist = (x - minc1) * C1_SCALE; + max_dist += tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + if (x <= centerc1) { + tdist = (x - maxc1) * C1_SCALE; + max_dist += tdist*tdist; + } else { + tdist = (x - minc1) * C1_SCALE; + max_dist += tdist*tdist; + } + } + + x = GETJSAMPLE(cinfo->colormap[2][i]); + if (x < minc2) { + tdist = (x - minc2) * C2_SCALE; + min_dist += tdist*tdist; + tdist = (x - maxc2) * C2_SCALE; + max_dist += tdist*tdist; + } else if (x > maxc2) { + tdist = (x - maxc2) * C2_SCALE; + min_dist += tdist*tdist; + tdist = (x - minc2) * C2_SCALE; + max_dist += tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + if (x <= centerc2) { + tdist = (x - maxc2) * C2_SCALE; + max_dist += tdist*tdist; + } else { + tdist = (x - minc2) * C2_SCALE; + max_dist += tdist*tdist; + } + } + + mindist[i] = min_dist; /* save away the results */ + if (max_dist < minmaxdist) + minmaxdist = max_dist; + } + + /* Now we know that no cell in the update box is more than minmaxdist + * away from some colormap entry. Therefore, only colors that are + * within minmaxdist of some part of the box need be considered. + */ + ncolors = 0; + for (i = 0; i < numcolors; i++) { + if (mindist[i] <= minmaxdist) + colorlist[ncolors++] = (JSAMPLE) i; + } + return ncolors; +} + + +LOCAL(void) +find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2, + int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[]) +/* Find the closest colormap entry for each cell in the update box, + * given the list of candidate colors prepared by find_nearby_colors. + * Return the indexes of the closest entries in the bestcolor[] array. + * This routine uses Thomas' incremental distance calculation method to + * find the distance from a colormap entry to successive cells in the box. + */ +{ + int ic0, ic1, ic2; + int i, icolor; + register INT32 * bptr; /* pointer into bestdist[] array */ + JSAMPLE * cptr; /* pointer into bestcolor[] array */ + INT32 dist0, dist1; /* initial distance values */ + register INT32 dist2; /* current distance in inner loop */ + INT32 xx0, xx1; /* distance increments */ + register INT32 xx2; + INT32 inc0, inc1, inc2; /* initial values for increments */ + /* This array holds the distance to the nearest-so-far color for each cell */ + INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Initialize best-distance for each cell of the update box */ + bptr = bestdist; + for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) + *bptr++ = 0x7FFFFFFFL; + + /* For each color selected by find_nearby_colors, + * compute its distance to the center of each cell in the box. + * If that's less than best-so-far, update best distance and color number. + */ + + /* Nominal steps between cell centers ("x" in Thomas article) */ +#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE) +#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE) +#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE) + + for (i = 0; i < numcolors; i++) { + icolor = GETJSAMPLE(colorlist[i]); + /* Compute (square of) distance from minc0/c1/c2 to this color */ + inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; + dist0 = inc0*inc0; + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + dist0 += inc1*inc1; + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + dist0 += inc2*inc2; + /* Form the initial difference increments */ + inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; + inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1; + inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; + /* Now loop over all cells in box, updating distance per Thomas method */ + bptr = bestdist; + cptr = bestcolor; + xx0 = inc0; + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + dist1 = dist0; + xx1 = inc1; + for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) { + dist2 = dist1; + xx2 = inc2; + for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { + if (dist2 < *bptr) { + *bptr = dist2; + *cptr = (JSAMPLE) icolor; + } + dist2 += xx2; + xx2 += 2 * STEP_C2 * STEP_C2; + bptr++; + cptr++; + } + dist1 += xx1; + xx1 += 2 * STEP_C1 * STEP_C1; + } + dist0 += xx0; + xx0 += 2 * STEP_C0 * STEP_C0; + } + } +} + + +LOCAL(void) +fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2) +/* Fill the inverse-colormap entries in the update box that contains */ +/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */ +/* we can fill as many others as we wish.) */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + int minc0, minc1, minc2; /* lower left corner of update box */ + int ic0, ic1, ic2; + register JSAMPLE * cptr; /* pointer into bestcolor[] array */ + register histptr cachep; /* pointer into main cache array */ + /* This array lists the candidate colormap indexes. */ + JSAMPLE colorlist[MAXNUMCOLORS]; + int numcolors; /* number of candidate colors */ + /* This array holds the actually closest colormap index for each cell. */ + JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Convert cell coordinates to update box ID */ + c0 >>= BOX_C0_LOG; + c1 >>= BOX_C1_LOG; + c2 >>= BOX_C2_LOG; + + /* Compute true coordinates of update box's origin corner. + * Actually we compute the coordinates of the center of the corner + * histogram cell, which are the lower bounds of the volume we care about. + */ + minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); + minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); + minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); + + /* Determine which colormap entries are close enough to be candidates + * for the nearest entry to some cell in the update box. + */ + numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist); + + /* Determine the actually nearest colors. */ + find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist, + bestcolor); + + /* Save the best color numbers (plus 1) in the main cache array */ + c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ + c1 <<= BOX_C1_LOG; + c2 <<= BOX_C2_LOG; + cptr = bestcolor; + for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + cachep = & histogram[c0+ic0][c1+ic1][c2]; + for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { + *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); + } + } + } +} + + +/* + * Map some rows of pixels to the output colormapped representation. + */ + +METHODDEF(void) +pass2_no_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + register JSAMPROW inptr, outptr; + register histptr cachep; + register int c0, c1, c2; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + inptr = input_buf[row]; + outptr = output_buf[row]; + for (col = width; col > 0; col--) { + /* get pixel value and index into the cache */ + c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; + c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; + c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; + cachep = & histogram[c0][c1][c2]; + /* If we have not seen this color before, find nearest colormap entry */ + /* and update the cache */ + if (*cachep == 0) + fill_inverse_cmap(cinfo, c0,c1,c2); + /* Now emit the colormap index for this cell */ + *outptr++ = (JSAMPLE) (*cachep - 1); + } + } +} + + +METHODDEF(void) +pass2_fs_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs Floyd-Steinberg dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */ + LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */ + LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */ + register FSERRPTR errorptr; /* => fserrors[] at column before current */ + JSAMPROW inptr; /* => current input pixel */ + JSAMPROW outptr; /* => current output pixel */ + histptr cachep; + int dir; /* +1 or -1 depending on direction */ + int dir3; /* 3*dir, for advancing inptr & errorptr */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + JSAMPLE *range_limit = cinfo->sample_range_limit; + int *error_limit = cquantize->error_limiter; + JSAMPROW colormap0 = cinfo->colormap[0]; + JSAMPROW colormap1 = cinfo->colormap[1]; + JSAMPROW colormap2 = cinfo->colormap[2]; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + inptr = input_buf[row]; + outptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + inptr += (width-1) * 3; /* so point to rightmost pixel */ + outptr += width-1; + dir = -1; + dir3 = -3; + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + cquantize->on_odd_row = FALSE; /* flip for next time */ + } else { + /* work left to right in this row */ + dir = 1; + dir3 = 3; + errorptr = cquantize->fserrors; /* => entry before first real column */ + cquantize->on_odd_row = TRUE; /* flip for next time */ + } + /* Preset error values: no error propagated to first pixel from left */ + cur0 = cur1 = cur2 = 0; + /* and no error propagated to row below yet */ + belowerr0 = belowerr1 = belowerr2 = 0; + bpreverr0 = bpreverr1 = bpreverr2 = 0; + + for (col = width; col > 0; col--) { + /* curN holds the error propagated from the previous pixel on the + * current line. Add the error propagated from the previous line + * to form the complete error correction term for this pixel, and + * round the error term (which is expressed * 16) to an integer. + * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct + * for either sign of the error value. + * Note: errorptr points to *previous* column's array entry. + */ + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + /* Limit the error using transfer function set by init_error_limit. + * See comments with init_error_limit for rationale. + */ + cur0 = error_limit[cur0]; + cur1 = error_limit[cur1]; + cur2 = error_limit[cur2]; + /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. + * The maximum error is +- MAXJSAMPLE (or less with error limiting); + * this sets the required size of the range_limit array. + */ + cur0 += GETJSAMPLE(inptr[0]); + cur1 += GETJSAMPLE(inptr[1]); + cur2 += GETJSAMPLE(inptr[2]); + cur0 = GETJSAMPLE(range_limit[cur0]); + cur1 = GETJSAMPLE(range_limit[cur1]); + cur2 = GETJSAMPLE(range_limit[cur2]); + /* Index into the cache with adjusted pixel value */ + cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; + /* If we have not seen this color before, find nearest colormap */ + /* entry and update the cache */ + if (*cachep == 0) + fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT); + /* Now emit the colormap index for this cell */ + { register int pixcode = *cachep - 1; + *outptr = (JSAMPLE) pixcode; + /* Compute representation error for this pixel */ + cur0 -= GETJSAMPLE(colormap0[pixcode]); + cur1 -= GETJSAMPLE(colormap1[pixcode]); + cur2 -= GETJSAMPLE(colormap2[pixcode]); + } + /* Compute error fractions to be propagated to adjacent pixels. + * Add these into the running sums, and simultaneously shift the + * next-line error sums left by 1 column. + */ + { register LOCFSERROR bnexterr, delta; + + bnexterr = cur0; /* Process component 0 */ + delta = cur0 * 2; + cur0 += delta; /* form error * 3 */ + errorptr[0] = (FSERROR) (bpreverr0 + cur0); + cur0 += delta; /* form error * 5 */ + bpreverr0 = belowerr0 + cur0; + belowerr0 = bnexterr; + cur0 += delta; /* form error * 7 */ + bnexterr = cur1; /* Process component 1 */ + delta = cur1 * 2; + cur1 += delta; /* form error * 3 */ + errorptr[1] = (FSERROR) (bpreverr1 + cur1); + cur1 += delta; /* form error * 5 */ + bpreverr1 = belowerr1 + cur1; + belowerr1 = bnexterr; + cur1 += delta; /* form error * 7 */ + bnexterr = cur2; /* Process component 2 */ + delta = cur2 * 2; + cur2 += delta; /* form error * 3 */ + errorptr[2] = (FSERROR) (bpreverr2 + cur2); + cur2 += delta; /* form error * 5 */ + bpreverr2 = belowerr2 + cur2; + belowerr2 = bnexterr; + cur2 += delta; /* form error * 7 */ + } + /* At this point curN contains the 7/16 error value to be propagated + * to the next pixel on the current line, and all the errors for the + * next line have been shifted over. We are therefore ready to move on. + */ + inptr += dir3; /* Advance pixel pointers to next column */ + outptr += dir; + errorptr += dir3; /* advance errorptr to current column */ + } + /* Post-loop cleanup: we must unload the final error values into the + * final fserrors[] entry. Note we need not unload belowerrN because + * it is for the dummy column before or after the actual array. + */ + errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ + errorptr[1] = (FSERROR) bpreverr1; + errorptr[2] = (FSERROR) bpreverr2; + } +} + + +/* + * Initialize the error-limiting transfer function (lookup table). + * The raw F-S error computation can potentially compute error values of up to + * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be + * much less, otherwise obviously wrong pixels will be created. (Typical + * effects include weird fringes at color-area boundaries, isolated bright + * pixels in a dark area, etc.) The standard advice for avoiding this problem + * is to ensure that the "corners" of the color cube are allocated as output + * colors; then repeated errors in the same direction cannot cause cascading + * error buildup. However, that only prevents the error from getting + * completely out of hand; Aaron Giles reports that error limiting improves + * the results even with corner colors allocated. + * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty + * well, but the smoother transfer function used below is even better. Thanks + * to Aaron Giles for this idea. + */ + +LOCAL(void) +init_error_limit (j_decompress_ptr cinfo) +/* Allocate and fill in the error_limiter table */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + int * table; + int in, out; + + table = (int *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int)); + table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */ + cquantize->error_limiter = table; + +#define STEPSIZE ((MAXJSAMPLE+1)/16) + /* Map errors 1:1 up to +- MAXJSAMPLE/16 */ + out = 0; + for (in = 0; in < STEPSIZE; in++, out++) { + table[in] = out; table[-in] = -out; + } + /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */ + for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { + table[in] = out; table[-in] = -out; + } + /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */ + for (; in <= MAXJSAMPLE; in++) { + table[in] = out; table[-in] = -out; + } +#undef STEPSIZE +} + + +/* + * Finish up at the end of each pass. + */ + +METHODDEF(void) +finish_pass1 (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Select the representative colors and fill in cinfo->colormap */ + cinfo->colormap = cquantize->sv_colormap; + select_colors(cinfo, cquantize->desired); + /* Force next pass to zero the color index table */ + cquantize->needs_zeroed = TRUE; +} + + +METHODDEF(void) +finish_pass2 (j_decompress_ptr cinfo) +{ + /* no work */ +} + + +/* + * Initialize for each processing pass. + */ + +METHODDEF(void) +start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + int i; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + cinfo->dither_mode = JDITHER_FS; + + if (is_pre_scan) { + /* Set up method pointers */ + cquantize->pub.color_quantize = prescan_quantize; + cquantize->pub.finish_pass = finish_pass1; + cquantize->needs_zeroed = TRUE; /* Always zero histogram */ + } else { + /* Set up method pointers */ + if (cinfo->dither_mode == JDITHER_FS) + cquantize->pub.color_quantize = pass2_fs_dither; + else + cquantize->pub.color_quantize = pass2_no_dither; + cquantize->pub.finish_pass = finish_pass2; + + /* Make sure color count is acceptable */ + i = cinfo->actual_number_of_colors; + if (i < 1) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1); + if (i > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + + if (cinfo->dither_mode == JDITHER_FS) { + size_t arraysize = (size_t) ((cinfo->output_width + 2) * + (3 * SIZEOF(FSERROR))); + /* Allocate Floyd-Steinberg workspace if we didn't already. */ + if (cquantize->fserrors == NULL) + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + /* Initialize the propagated errors to zero. */ + jzero_far((void FAR *) cquantize->fserrors, arraysize); + /* Make the error-limit table if we didn't already. */ + if (cquantize->error_limiter == NULL) + init_error_limit(cinfo); + cquantize->on_odd_row = FALSE; + } + + } + /* Zero the histogram or inverse color map, if necessary */ + if (cquantize->needs_zeroed) { + for (i = 0; i < HIST_C0_ELEMS; i++) { + jzero_far((void FAR *) histogram[i], + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = FALSE; + } +} + + +/* + * Switch to a new external colormap between output passes. + */ + +METHODDEF(void) +new_color_map_2_quant (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Reset the inverse color map */ + cquantize->needs_zeroed = TRUE; +} + + +/* + * Module initialization routine for 2-pass color quantization. + */ + +GLOBAL(void) +jinit_2pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + int i; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_2_quant; + cquantize->pub.new_color_map = new_color_map_2_quant; + cquantize->fserrors = NULL; /* flag optional arrays not allocated */ + cquantize->error_limiter = NULL; + + /* Make sure jdmaster didn't give me a case I can't handle */ + if (cinfo->out_color_components != 3) + ERREXIT(cinfo, JERR_NOTIMPL); + + /* Allocate the histogram/inverse colormap storage */ + cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d)); + for (i = 0; i < HIST_C0_ELEMS; i++) { + cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = TRUE; /* histogram is garbage now */ + + /* Allocate storage for the completed colormap, if required. + * We do this now since it is FAR storage and may affect + * the memory manager's space calculations. + */ + if (cinfo->enable_2pass_quant) { + /* Make sure color count is acceptable */ + int desired = cinfo->desired_number_of_colors; + /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */ + if (desired < 8) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8); + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (desired > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + cquantize->sv_colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3); + cquantize->desired = desired; + } else + cquantize->sv_colormap = NULL; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + cinfo->dither_mode = JDITHER_FS; + + /* Allocate Floyd-Steinberg workspace if necessary. + * This isn't really needed until pass 2, but again it is FAR storage. + * Although we will cope with a later change in dither_mode, + * we do not promise to honor max_memory_to_use if dither_mode changes. + */ + if (cinfo->dither_mode == JDITHER_FS) { + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR)))); + /* Might as well create the error-limiting table too. */ + init_error_limit(cinfo); + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/libjpegd/jutils.c b/libjpegd/jutils.c new file mode 100644 index 0000000..d18a955 --- /dev/null +++ b/libjpegd/jutils.c @@ -0,0 +1,179 @@ +/* + * jutils.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains tables and miscellaneous utility routines needed + * for both compression and decompression. + * Note we prefix all global names with "j" to minimize conflicts with + * a surrounding application. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element + * of a DCT block read in natural order (left to right, top to bottom). + */ + +#if 0 /* This table is not actually needed in v6a */ + +const int jpeg_zigzag_order[DCTSIZE2] = { + 0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63 +}; + +#endif + +/* + * jpeg_natural_order[i] is the natural-order position of the i'th element + * of zigzag order. + * + * When reading corrupted data, the Huffman decoders could attempt + * to reference an entry beyond the end of this array (if the decoded + * zero run length reaches past the end of the block). To prevent + * wild stores without adding an inner-loop test, we put some extra + * "63"s after the real entries. This will cause the extra coefficient + * to be stored in location 63 of the block, not somewhere random. + * The worst case would be a run-length of 15, which means we need 16 + * fake entries. + */ + +const int jpeg_natural_order[DCTSIZE2+16] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */ + 63, 63, 63, 63, 63, 63, 63, 63 +}; + + +/* + * Arithmetic utilities + */ + +GLOBAL(long) +jdiv_round_up (long a, long b) +/* Compute a/b rounded up to next integer, ie, ceil(a/b) */ +/* Assumes a >= 0, b > 0 */ +{ + return (a + b - 1L) / b; +} + + +GLOBAL(long) +jround_up (long a, long b) +/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ +/* Assumes a >= 0, b > 0 */ +{ + a += b - 1L; + return a - (a % b); +} + + +/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays + * and coefficient-block arrays. This won't work on 80x86 because the arrays + * are FAR and we're assuming a small-pointer memory model. However, some + * DOS compilers provide far-pointer versions of memcpy() and memset() even + * in the small-model libraries. These will be used if USE_FMEM is defined. + * Otherwise, the routines below do it the hard way. (The performance cost + * is not all that great, because these routines aren't very heavily used.) + */ + +#ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ +#define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) +#define FMEMZERO(target,size) MEMZERO(target,size) +#else /* 80x86 case, define if we can */ +#ifdef USE_FMEM +#define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) +#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) +#endif +#endif + + +GLOBAL(void) +jcopy_sample_rows (JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, JDIMENSION num_cols) +/* Copy some rows of samples from one place to another. + * num_rows rows are copied from input_array[source_row++] + * to output_array[dest_row++]; these areas may overlap for duplication. + * The source and destination arrays must be at least as wide as num_cols. + */ +{ + register JSAMPROW inptr, outptr; +#ifdef FMEMCOPY + register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE)); +#else + register JDIMENSION count; +#endif + register int row; + + input_array += source_row; + output_array += dest_row; + + for (row = num_rows; row > 0; row--) { + inptr = *input_array++; + outptr = *output_array++; +#ifdef FMEMCOPY + FMEMCOPY(outptr, inptr, count); +#else + for (count = num_cols; count > 0; count--) + *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ +#endif + } +} + + +GLOBAL(void) +jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks) +/* Copy a row of coefficient blocks from one place to another. */ +{ +#ifdef FMEMCOPY + FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); +#else + register JCOEFPTR inptr, outptr; + register long count; + + inptr = (JCOEFPTR) input_row; + outptr = (JCOEFPTR) output_row; + for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) { + *outptr++ = *inptr++; + } +#endif +} + + +GLOBAL(void) +jzero_far (void FAR * target, size_t bytestozero) +/* Zero out a chunk of FAR memory. */ +/* This might be sample-array data, block-array data, or alloc_large data. */ +{ +#ifdef FMEMZERO + FMEMZERO(target, bytestozero); +#else + register char FAR * ptr = (char FAR *) target; + register size_t count; + + for (count = bytestozero; count > 0; count--) { + *ptr++ = 0; + } +#endif +} diff --git a/libjpegd/jversion.h b/libjpegd/jversion.h new file mode 100644 index 0000000..6472c58 --- /dev/null +++ b/libjpegd/jversion.h @@ -0,0 +1,14 @@ +/* + * jversion.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains software version identification. + */ + + +#define JVERSION "6b 27-Mar-1998" + +#define JCOPYRIGHT "Copyright (C) 1998, Thomas G. Lane" diff --git a/liblilxml/._LICENSE b/liblilxml/._LICENSE new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._LICENSE differ diff --git a/liblilxml/._Makefile b/liblilxml/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._Makefile differ diff --git a/liblilxml/._base64.c b/liblilxml/._base64.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._base64.c differ diff --git a/liblilxml/._base64.h b/liblilxml/._base64.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._base64.h differ diff --git a/liblilxml/._descrip.mms b/liblilxml/._descrip.mms new file mode 100755 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._descrip.mms differ diff --git a/liblilxml/._lilxml.c b/liblilxml/._lilxml.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._lilxml.c differ diff --git a/liblilxml/._lilxml.h b/liblilxml/._lilxml.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/liblilxml/._lilxml.h differ diff --git a/liblilxml/LICENSE b/liblilxml/LICENSE new file mode 100644 index 0000000..b1e3f5a --- /dev/null +++ b/liblilxml/LICENSE @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/liblilxml/Makefile b/liblilxml/Makefile new file mode 100644 index 0000000..9ab98cb --- /dev/null +++ b/liblilxml/Makefile @@ -0,0 +1,44 @@ +# Makefile for the basic XML routines. +# The idea is to compile and archive them into liblilxml.a + +# compiler and flags + +# gcc +CC = gcc +CFLAGS= -O2 -Wall + +# macosx universal binary +# CFLAGS= -O2 -Wall -arch i386 -arch ppc + +# solaris +# CC = cc +# CFLAGS= -O + +# AIX +# CC = xlc +# CFLAGS= -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -Aa -fast + +HS = lilxml.h + +OBJS = lilxml.o base64.o + +liblilxml.a: $(HS) $(OBJS) + ar r $@ $(OBJS) + ranlib $@ + +liltest: liltest.o liblilxml.a + $(CC) $(LDFLAGS) -o liltest liltest.o liblilxml.a + +liltest.o: $(HS) lilxml.c + $(CC) -DMAIN_TST $(CFLAGS) -c -o liltest.o lilxml.c + +clobber: + touch x.o x.a + rm -f *.o *.a core liltest + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: Makefile,v $ $Date: 2006/02/24 03:37:19 $ $Revision: 1.11 $ $Name: $ diff --git a/liblilxml/base64.c b/liblilxml/base64.c new file mode 100644 index 0000000..4be2caa --- /dev/null +++ b/liblilxml/base64.c @@ -0,0 +1,239 @@ +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Adapted from code written by Eric S. Raymond + * + */ + +/* Pair of functions to convert to/from base64. + * Also can be used to build a standalone utility and a loopback test. + * see http://www.faqs.org/rfcs/rfc3548.html + */ + +#include + +static const char base64digits[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +#define BAD (-1) +static const char base64val[] = { + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,BAD,BAD, BAD,BAD,BAD,BAD, + BAD, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,BAD, BAD,BAD,BAD,BAD, + BAD, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,BAD, BAD,BAD,BAD,BAD +}; +#define DECODE64(c) (isascii(c) ? base64val[c] : BAD) + +/* convert inlen raw bytes at in to base64 string (NUL-terminated) at out. + * out size should be at least 4*inlen/3 + 4. + * return length of out (sans trailing NUL). + */ +int +to64frombits(unsigned char *out, const unsigned char *in, int inlen) +{ + unsigned char *out0 = out; + + for (; inlen >= 3; inlen -= 3) + { + *out++ = base64digits[in[0] >> 2]; + *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; + *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; + *out++ = base64digits[in[2] & 0x3f]; + in += 3; + } + if (inlen > 0) + { + unsigned char fragment; + + *out++ = base64digits[in[0] >> 2]; + fragment = (in[0] << 4) & 0x30; + if (inlen > 1) + fragment |= in[1] >> 4; + *out++ = base64digits[fragment]; + *out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c]; + *out++ = '='; + } + *out = '\0'; + + return (out-out0); +} + +/* convert base64 at in to raw bytes out, returning count or <0 on error. + * base64 may contain any embedded whitespace. + * out should be at least 3/4 the length of in. + */ +int +from64tobits(char *out, const char *in) +{ + int len = 0; + register unsigned char digit1, digit2, digit3, digit4; + + do { + do {digit1 = *in++;} while (isspace(digit1)); + if (DECODE64(digit1) == BAD) + return(-1); + do {digit2 = *in++;} while (isspace(digit2)); + if (DECODE64(digit2) == BAD) + return(-2); + do {digit3 = *in++;} while (isspace(digit3)); + if (digit3 != '=' && DECODE64(digit3) == BAD) + return(-3); + do {digit4 = *in++;} while (isspace(digit4)); + if (digit4 != '=' && DECODE64(digit4) == BAD) + return(-4); + *out++ = (DECODE64(digit1) << 2) | (DECODE64(digit2) >> 4); + ++len; + if (digit3 != '=') + { + *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2); + ++len; + if (digit4 != '=') + { + *out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4); + ++len; + } + } + while (isspace(*in)) + in++; + } while (*in && digit4 != '='); + + return (len); +} + +#ifdef BASE64_PROGRAM +/* standalone program that converts to/from base64. + * cc -o base64 -DBASE64_PROGRAM base64.c + */ + +#include +#include +#include + +static void +usage (char *me) +{ + fprintf (stderr, "Purpose: convert stdin to/from base64 on stdout\n"); + fprintf (stderr, "Usage: %s {-t,-f}\n", me); + exit (1); +} + +int +main (int ac, char *av[]) +{ + int to64 = 1; + + /* decide whether to or from base64 */ + if (ac == 2 && strcmp (av[1], "-f") == 0) + to64 = 0; + else if (ac != 1 && (ac != 2 || strcmp (av[1], "-t"))) + usage (av[0]); + + if (to64) { + unsigned char *rawin, *b64; + int i, n, nrawin, nb64; + + /* read raw on stdin until EOF */ + rawin = malloc(4096); + nrawin = 0; + while ((n = fread (rawin+nrawin, 1, 4096, stdin)) > 0) + rawin = realloc (rawin, (nrawin+=n)+4096); + + /* convert to base64 */ + b64 = malloc (4*nrawin/3+4); + nb64 = to64frombits(b64, rawin, nrawin); + + /* pretty print */ + for (i = 0; i < nb64; i += 72) + printf ("%.*s\n", 72, b64+i); + } else { + unsigned char *raw, *b64; + int n, nraw, nb64; + + /* read base64 on stdin until EOF */ + b64 = malloc(4096); + nb64 = 0; + while ((n = fread (b64+nb64, 1, 4096, stdin)) > 0) + b64 = realloc (b64, (nb64+=n)+4096); + b64[nb64] = '\0'; + + /* convert to raw */ + raw = malloc (3*nb64/4); + nraw = from64tobits(raw, b64); + if (nraw < 0) { + fprintf (stderr, "base64 conversion error: %d\n", nraw); + return (1); + } + + /* write */ + fwrite (raw, 1, nraw, stdout); + } + + return (0); +} + +#endif + +#ifdef LOOPBACK_TEST +/* standalone test that reads binary on stdin, converts to base64 and back, + * then compares. exit 0 if compares the same else 1 + */ + +#include +#include +#include + +int +main (int ac, char *av[]) +{ + unsigned char *rawin, *b64, *rawback; + int n, nrawin, nrawback, nb64; + + /* read raw on stdin until EOF */ + rawin = malloc(4096); + nrawin = 0; + while ((n = fread (rawin+nrawin, 1, 4096, stdin)) > 0) + rawin = realloc (rawin, (nrawin+=n)+4096); + + /* convert to base64 */ + b64 = malloc (4*nrawin*3 + 4); + nb64 = to64frombits(b64, rawin, nrawin); + + /* convert back to raw */ + rawback = malloc (3*nb64/4); + nrawback = from64tobits(rawback, b64); + if (nrawback < 0) { + fprintf (stderr, "base64 error: %d\n", nrawback); + return(1); + } + if (nrawback != nrawin) { + fprintf (stderr, "base64 back length %d != %d\n", nrawback, nrawin); + return(1); + } + + /* compare */ + if (memcmp (rawback, rawin, nrawin)) { + fprintf (stderr, "compare error\n"); + return (1); + } + + /* success */ + return (0); +} +#endif +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: base64.c,v $ $Date: 2005/03/14 20:25:43 $ $Revision: 1.2 $ $Name: $"}; diff --git a/liblilxml/base64.h b/liblilxml/base64.h new file mode 100644 index 0000000..e4b1c6a --- /dev/null +++ b/liblilxml/base64.h @@ -0,0 +1,7 @@ +extern int to64frombits(unsigned char *out, const unsigned char *in, + int inlen); +extern int from64tobits(char *out, const char *in); + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: base64.h,v $ $Date: 2005/03/14 20:25:43 $ $Revision: 1.2 $ $Name: $ + */ diff --git a/liblilxml/descrip.mms b/liblilxml/descrip.mms new file mode 100755 index 0000000..fa72235 --- /dev/null +++ b/liblilxml/descrip.mms @@ -0,0 +1,41 @@ +# Makefile for the basic XML routines. +# The idea is to compile and archive them into liblilxml.a + +# compiler and flags +# Adopted by Alex Chupahin alex@rostov.ultrastar.ru + +# gcc +CC = cc +CFLAGS= + +# solaris +# CC = cc +# CFLAGS= -O + +# AIX +# CC = xlc +# CFLAGS= -O2 -qlanglvl=ansi -qarch=com -qmaxmem=16384 + +# HP-UX +# CC = cc +# CFLAGS= -Aa -fast + +HS = lilxml.h + +OBJS = lilxml.obj, BASE64.OBJ + +liblilxml.olb : $(HS) $(OBJS) + lib/crea $@ $(OBJS) + + +liltest : liltest.obj liblilxml.olb + link/exe=liltest $(LDFLAGS) liltest.obj,liblilxml/lib + +liltest.obj : $(HS) lilxml.c + $(CC)/define=MAIN_TST $(CFLAGS) lilxml.c + +clean : + del *.o;*, *.a;* core;*, liltest;* + +# For RCS Only -- Do Not Edit +# @(#) $RCSfile: descrip.mms,v $ $Date: 2005/09/01 02:26:35 $ $Revision: 1.2 $ $Name: $ diff --git a/liblilxml/lilxml.c b/liblilxml/lilxml.c new file mode 100644 index 0000000..fcc5f2c --- /dev/null +++ b/liblilxml/lilxml.c @@ -0,0 +1,1016 @@ +#if 0 + liblilxml + Copyright (C) 2003 Elwood C. Downey + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#endif + +/* little DOM-style XML parser. + * only handles elements, attributes and pcdata content. + * and are silently ignored. + * pcdata is collected into one string, sans leading whitespace first line. + * + * #define MAIN_TST to create standalone test program + */ + +#include +#include +#include +#include + +#include "lilxml.h" + +/* used to efficiently manage growing malloced string space */ +typedef struct { + char *s; /* malloced memory for string */ + int sl; /* string length, sans trailing \0 */ + int sm; /* total malloced bytes */ +} String; +#define MINMEM 64 /* starting string length */ + +static int oneXMLchar (LilXML *lp, int c, char errmsg[]); +static void initParser(LilXML *lp); +static void pushXMLEle(LilXML *lp); +static void popXMLEle(LilXML *lp); +static void resetEndTag(LilXML *lp); +static XMLAtt *growAtt(XMLEle *e); +static XMLEle *growEle(XMLEle *pe); +static void freeAtt (XMLAtt *a); +static int isTokenChar (int start, int c); +static void growString (String *sp, int c); +static void appendString (String *sp, char *str); +static void freeString (String *sp); +static void newString (String *sp); +static void *moremem (void *old, int n); + +typedef enum { + LOOK4START = 0, /* looking for first element start */ + LOOK4TAG, /* looking for element tag */ + INTAG, /* reading tag */ + LOOK4ATTRN, /* looking for attr name, > or / */ + INATTRN, /* reading attr name */ + LOOK4ATTRV, /* looking for attr value */ + SAWSLASH, /* saw / in element opening */ + INATTRV, /* in attr value */ + ENTINATTRV, /* in entity in attr value */ + LOOK4CON, /* skipping leading content whitespc */ + INCON, /* reading content */ + ENTINCON, /* in entity in pcdata */ + SAWLTINCON, /* saw < in content */ + LOOK4CLOSETAG, /* looking for closing tag after < */ + INCLOSETAG /* reading closing tag */ +} State; /* parsing states */ + +/* maintain state while parsing */ +struct _LilXML { + State cs; /* current state */ + int ln; /* line number for diags */ + XMLEle *ce; /* current element being built */ + String endtag; /* to check for match with opening tag*/ + String entity; /* collect entity seq */ + int delim; /* attribute value delimiter */ + int lastc; /* last char (just used wiht skipping)*/ + int skipping; /* in comment or declaration */ +}; + +/* internal representation of a (possibly nested) XML element */ +struct _xml_ele { + String tag; /* element tag */ + XMLEle *pe; /* parent element, or NULL if root */ + XMLAtt **at; /* list of attributes */ + int nat; /* number of attributes */ + int ait; /* used to iterate over at[] */ + XMLEle **el; /* list of child elements */ + int nel; /* number of child elements */ + int eit; /* used to iterate over el[] */ + String pcdata; /* character data in this element */ +}; + +/* internal representation of an attribute */ +struct _xml_att { + String name; /* name */ + String valu; /* value */ + XMLEle *ce; /* containing element */ +}; + +/* default memory managers, override with xmlMalloc() */ +static void *(*mymalloc)(size_t size) = malloc; +static void *(*myrealloc)(void *ptr, size_t size) = realloc; +static void (*myfree)(void *ptr) = free; + +/* install new version of malloc/realloc/free. + * N.B. don't call after first use of any other lilxml function + */ +void +xmlMalloc (void *(*newmalloc)(size_t size), + void *(*newrealloc)(void *ptr, size_t size), + void (*newfree)(void *ptr)) +{ + mymalloc = newmalloc; + myrealloc = newrealloc; + myfree = newfree; +} + +/* pass back a fresh handle for use with our other functions */ +LilXML * +newLilXML () +{ + LilXML *lp = (LilXML *) moremem (NULL, sizeof(LilXML)); + memset (lp, 0, sizeof(LilXML)); + initParser(lp); + return (lp); +} + +/* discard */ +void +delLilXML (LilXML *lp) +{ + delXMLEle (lp->ce); + freeString (&lp->endtag); + (*myfree) (lp); +} + +/* delete ep and all its children and remove from parent's list if known */ +void +delXMLEle (XMLEle *ep) +{ + int i; + + /* benign if NULL */ + if (!ep) + return; + + /* delete all parts of ep */ + freeString (&ep->tag); + freeString (&ep->pcdata); + if (ep->at) { + for (i = 0; i < ep->nat; i++) + freeAtt (ep->at[i]); + (*myfree) (ep->at); + } + if (ep->el) { + for (i = 0; i < ep->nel; i++) { + /* forget parent so deleting doesn't modify _this_ el[] */ + ep->el[i]->pe = NULL; + + delXMLEle (ep->el[i]); + } + (*myfree) (ep->el); + } + + /* remove from parent's list if known */ + if (ep->pe) { + XMLEle *pe = ep->pe; + for (i = 0; i < pe->nel; i++) { + if (pe->el[i] == ep) { + memmove (&pe->el[i], &pe->el[i+1], + (--pe->nel-i)*sizeof(XMLEle*)); + break; + } + } + } + + /* delete ep itself */ + (*myfree) (ep); +} + +/* process one more character of an XML file. + * when find closure with outter element return root of complete tree. + * when find error return NULL with reason in errmsg[]. + * when need more return NULL with errmsg[0] = '\0'. + * N.B. it is up to the caller to delete any tree returned with delXMLEle(). + */ +XMLEle * +readXMLEle (LilXML *lp, int newc, char errmsg[]) +{ + XMLEle *root; + int s; + + /* start optimistic */ + errmsg[0] = '\0'; + + /* EOF? */ + if (newc == 0) { + sprintf (errmsg, "Line %d: early XML EOF", lp->ln); + initParser(lp); + return (NULL); + } + + /* new line? */ + if (newc == '\n') + lp->ln++; + + /* skip comments and declarations. requires 1 char history */ + if (!lp->skipping && lp->lastc == '<' && (newc == '?' || newc == '!')) { + lp->skipping = 1; + lp->lastc = newc; + return (NULL); + } + if (lp->skipping) { + if (newc == '>') + lp->skipping = 0; + lp->lastc = newc; + return (NULL); + } + if (newc == '<') { + lp->lastc = '<'; + return (NULL); + } + + /* do a pending '<' first then newc */ + if (lp->lastc == '<') { + if (oneXMLchar (lp, '<', errmsg) < 0) { + initParser(lp); + return (NULL); + } + /* N.B. we assume '<' will never result in closure */ + } + + /* process newc (at last!) */ + s = oneXMLchar (lp, newc, errmsg); + if (s == 0) { + lp->lastc = newc; + return (NULL); + } + if (s < 0) { + initParser(lp); + return (NULL); + } + + /* Ok! return ce and we start over. + * N.B. up to caller to call delXMLEle with what we return. + */ + root = lp->ce; + lp->ce = NULL; + initParser(lp); + return (root); +} + +/* search ep for an attribute with given name. + * return NULL if not found. + */ +XMLAtt * +findXMLAtt (XMLEle *ep, char *name) +{ + int i; + + for (i = 0; i < ep->nat; i++) + if (!strcmp (ep->at[i]->name.s, name)) + return (ep->at[i]); + return (NULL); +} + +/* search ep for an element with given tag. + * return NULL if not found. + */ +XMLEle * +findXMLEle (XMLEle *ep, char *tag) +{ + int tl = strlen (tag); + int i; + + for (i = 0; i < ep->nel; i++) { + String *sp = &ep->el[i]->tag; + if (sp->sl == tl && !strcmp (sp->s, tag)) + return (ep->el[i]); + } + return (NULL); +} + +/* iterate over each child element of ep. + * call first time with first set to 1, then 0 from then on. + * returns NULL when no more or err + */ +XMLEle * +nextXMLEle (XMLEle *ep, int init) +{ + int eit; + + if (init) + ep->eit = 0; + + eit = ep->eit++; + if (eit < 0 || eit >= ep->nel) + return (NULL); + return (ep->el[eit]); +} + +/* iterate over each attribute of ep. + * call first time with first set to 1, then 0 from then on. + * returns NULL when no more or err + */ +XMLAtt * +nextXMLAtt (XMLEle *ep, int init) +{ + int ait; + + if (init) + ep->ait = 0; + + ait = ep->ait++; + if (ait < 0 || ait >= ep->nat) + return (NULL); + return (ep->at[ait]); +} + +/* return parent of given XMLEle */ +XMLEle * +parentXMLEle (XMLEle *ep) +{ + return (ep->pe); +} + +/* return parent element of given XMLAtt */ +XMLEle * +parentXMLAtt (XMLAtt *ap) +{ + return (ap->ce); +} + +/* access functions */ + +/* return the tag name of the given element */ +char * +tagXMLEle (XMLEle *ep) +{ + return (ep->tag.s); +} + +/* return the pcdata portion of the given element */ +char * +pcdataXMLEle (XMLEle *ep) +{ + return (ep->pcdata.s); +} + +/* return the number of characters in the pcdata portion of the given element */ +int +pcdatalenXMLEle (XMLEle *ep) +{ + return (ep->pcdata.sl); +} + +/* return the nanme of the given attribute */ +char * +nameXMLAtt (XMLAtt *ap) +{ + return (ap->name.s); +} + +/* return the value of the given attribute */ +char * +valuXMLAtt (XMLAtt *ap) +{ + return (ap->valu.s); +} + +/* return the number of child elements of the given element */ +int +nXMLEle (XMLEle *ep) +{ + return (ep->nel); +} + +/* return the number of attributes in the given element */ +int +nXMLAtt (XMLEle *ep) +{ + return (ep->nat); +} + + +/* search ep for an attribute with the given name and return its value. + * return "" if not found. + */ +char * +findXMLAttValu (XMLEle *ep, char *name) +{ + XMLAtt *a = findXMLAtt (ep, name); + return (a ? a->valu.s : ""); +} + +/* handy wrapper to read one xml file. + * return root element else NULL with report in errmsg[] + */ +XMLEle * +readXMLFile (FILE *fp, LilXML *lp, char errmsg[]) +{ + int c; + + while ((c = fgetc(fp)) != EOF) { + XMLEle *root = readXMLEle (lp, c, errmsg); + if (root || errmsg[0]) + return (root); + } + + return (NULL); +} + +/* add an element with the given tag to the given element. + * parent can be NULL to make a new root. + */ +XMLEle * +addXMLEle (XMLEle *parent, char *tag) +{ + XMLEle *ep = growEle (parent); + appendString (&ep->tag, tag); + return (ep); +} + +/* set the pcdata of the given element */ +void +editXMLEle (XMLEle *ep, char *pcdata) +{ + freeString (&ep->pcdata); + appendString (&ep->pcdata, pcdata); +} + +/* add an attribute to the given XML element */ +XMLAtt * +addXMLAtt (XMLEle *ep, char *name, char *valu) +{ + XMLAtt *ap = growAtt (ep); + appendString (&ap->name, name); + appendString (&ap->valu, valu); + return (ap); +} + +/* remove the named attribute from ep, if any */ +void +rmXMLAtt (XMLEle *ep, char *name) +{ + int i; + + for (i = 0; i < ep->nat; i++) { + if (strcmp (ep->at[i]->name.s, name) == 0) { + freeAtt (ep->at[i]); + memmove (&ep->at[i],&ep->at[i+1],(--ep->nat-i)*sizeof(XMLAtt*)); + return; + } + } +} + +/* change the value of an attribute to str */ +void +editXMLAtt (XMLAtt *ap, char *str) +{ + freeString (&ap->valu); + appendString (&ap->valu, str); +} + +/* sample print ep to fp + * N.B. set level = 0 on first call + */ +#define PRINDENT 4 /* sample print indent each level */ +void +prXMLEle (FILE *fp, XMLEle *ep, int level) +{ + int indent = level*PRINDENT; + int i; + + fprintf (fp, "%*s<%s", indent, "", ep->tag.s); + for (i = 0; i < ep->nat; i++) + fprintf (fp, " %s=\"%s\"", ep->at[i]->name.s, + entityXML(ep->at[i]->valu.s)); + if (ep->nel > 0) { + fprintf (fp, ">\n"); + for (i = 0; i < ep->nel; i++) + prXMLEle (fp, ep->el[i], level+1); + } + if (ep->pcdata.sl > 0) { + char *nl; + if (ep->nel == 0) + fprintf (fp, ">\n"); + /* indent if none or one line */ + nl = strpbrk (ep->pcdata.s, "\n\r"); + if (!nl || nl == &ep->pcdata.s[ep->pcdata.sl-1]) + fprintf (fp, "%*s", indent+PRINDENT, ""); + fprintf (fp, "%s", entityXML(ep->pcdata.s)); + if (!nl) + fprintf (fp, "\n"); + } + if (ep->nel > 0 || ep->pcdata.sl > 0) + fprintf (fp, "%*s\n", indent, "", ep->tag.s); + else + fprintf (fp, "/>\n"); +} + +/* return a string with all xml-sensitive characters within the passed string s + * replaced with their entity sequence equivalents. + * N.B. caller must use the returned string before calling us again. + */ +char * +entityXML (char *s) +{ + static char entities[] = "&<>'\""; + static char *malbuf; + int nmalbuf = 0; + char *sret; + char *ep; + + /* scan for each entity, if any */ + for (sret = s; (ep = strpbrk (s, entities)) != NULL; s = ep+1) { + + /* found another entity, copy preceding to malloced buffer */ + int nnew = ep - s; /* all but entity itself */ + sret = malbuf = moremem (malbuf, nmalbuf + nnew + 10); + memcpy (malbuf+nmalbuf, s, nnew); + nmalbuf += nnew; + + /* replace with entity encoding */ + switch (*ep) { + case '&': + nmalbuf += sprintf (malbuf+nmalbuf, "&"); + break; + case '<': + nmalbuf += sprintf (malbuf+nmalbuf, "<"); + break; + case '>': + nmalbuf += sprintf (malbuf+nmalbuf, ">"); + break; + case '\'': + nmalbuf += sprintf (malbuf+nmalbuf, "'"); + break; + case '"': + nmalbuf += sprintf (malbuf+nmalbuf, """); + break; + + } + + } + + /* return s if no entities, else malloc cleaned-up copy */ + if (sret == s) { + /* using s, so free any malloced memory from last time */ + if (malbuf) { + free (malbuf); + malbuf = NULL; + } + } else { + /* put remaining part of s into malbuf */ + int nleft = strlen (s) + 1; /* include \0 */ + sret = malbuf = moremem (malbuf, nmalbuf + nleft); + memcpy (malbuf+nmalbuf, s, nleft); + } + + return (sret); +} + + + + +/* if ent is a recognized xml entitty sequence, set *cp to char and return 1 + * else return 0 + */ +static int +decodeEntity (char *ent, int *cp) +{ + static struct { + char *ent; + char c; + } enttable[] = { + {"&", '&'}, + {"'", '\''}, + {"<", '<'}, + {">", '>'}, + {""", '"'}, + }; + int i; + + for (i = 0; i < sizeof(enttable)/sizeof(enttable[0]); i++) { + if (strcmp (ent, enttable[i].ent) == 0) { + *cp = enttable[i].c; + return (1); + } + } + + return (0); +} + +/* process one more char in XML file. + * if find final closure, return 1 and tree is in ce. + * if need more, return 0. + * if real trouble, return -1 and put reason in errmsg. + */ +static int +oneXMLchar (LilXML *lp, int c, char errmsg[]) +{ + switch (lp->cs) { + case LOOK4START: /* looking for first element start */ + if (c == '<') { + pushXMLEle(lp); + lp->cs = LOOK4TAG; + } + /* silently ignore until resync */ + break; + + case LOOK4TAG: /* looking for element tag */ + if (isTokenChar (1, c)) { + growString (&lp->ce->tag, c); + lp->cs = INTAG; + } else if (!isspace(c)) { + sprintf (errmsg, "Line %d: Bogus tag char %c", lp->ln, c); + return (-1); + } + break; + + case INTAG: /* reading tag */ + if (isTokenChar (0, c)) + growString (&lp->ce->tag, c); + else if (c == '>') + lp->cs = LOOK4CON; + else if (c == '/') + lp->cs = SAWSLASH; + else + lp->cs = LOOK4ATTRN; + break; + + case LOOK4ATTRN: /* looking for attr name, > or / */ + if (c == '>') + lp->cs = LOOK4CON; + else if (c == '/') + lp->cs = SAWSLASH; + else if (isTokenChar (1, c)) { + XMLAtt *ap = growAtt(lp->ce); + growString (&ap->name, c); + lp->cs = INATTRN; + } else if (!isspace(c)) { + sprintf (errmsg, "Line %d: Bogus leading attr name char: %c", + lp->ln, c); + return (-1); + } + break; + + case SAWSLASH: /* saw / in element opening */ + if (c == '>') { + if (!lp->ce->pe) + return(1); /* root has no content */ + popXMLEle(lp); + lp->cs = LOOK4CON; + } else { + sprintf (errmsg, "Line %d: Bogus char %c before >", lp->ln, c); + return (-1); + } + break; + + case INATTRN: /* reading attr name */ + if (isTokenChar (0, c)) + growString (&lp->ce->at[lp->ce->nat-1]->name, c); + else if (isspace(c) || c == '=') + lp->cs = LOOK4ATTRV; + else { + sprintf (errmsg, "Line %d: Bogus attr name char: %c", lp->ln,c); + return (-1); + } + break; + + case LOOK4ATTRV: /* looking for attr value */ + if (c == '\'' || c == '"') { + lp->delim = c; + lp->cs = INATTRV; + } else if (!(isspace(c) || c == '=')) { + sprintf (errmsg, "Line %d: No value for attribute %s", lp->ln, + lp->ce->at[lp->ce->nat-1]->name.s); + return (-1); + } + break; + + case INATTRV: /* in attr value */ + BADATTRENT: /* come here if & but no ; then delim */ + if (c == '&') { + newString (&lp->entity); + growString (&lp->entity, c); + lp->cs = ENTINATTRV; + } else if (c == lp->delim) + lp->cs = LOOK4ATTRN; + else if (!iscntrl(c)) + growString (&lp->ce->at[lp->ce->nat-1]->valu, c); + break; + + case ENTINATTRV: /* working on entity in attr valu */ + if (c == ';') { + /* if find a recognized entity, add equiv char else raw seq */ + growString (&lp->entity, c); + if (decodeEntity (lp->entity.s, &c)) + growString (&lp->ce->at[lp->ce->nat-1]->valu, c); + else + appendString(&lp->ce->at[lp->ce->nat-1]->valu,lp->entity.s); + freeString (&lp->entity); + lp->cs = INATTRV; + } else if (c == lp->delim) { + /* saw & without ; */ + appendString(&lp->ce->at[lp->ce->nat-1]->valu,lp->entity.s); + freeString (&lp->entity); + lp->cs = INATTRV; + goto BADATTRENT; + } else + growString (&lp->entity, c); + break; + + case LOOK4CON: /* skipping leading content whitespace*/ + if (c == '<') + lp->cs = SAWLTINCON; + else if (c == '&') { + newString (&lp->entity); + growString (&lp->entity, c); + lp->cs = ENTINCON; + } else if (!isspace(c)) { + growString (&lp->ce->pcdata, c); + lp->cs = INCON; + } + break; + + case INCON: /* reading content */ + BADCONENT: /* come here if see & but no ; then < */ + if (c == '&') { + newString (&lp->entity); + growString (&lp->entity, c); + lp->cs = ENTINCON; + } else if (c == '<') { + /* found closure. if text contains a nl trim trailing blanks. + * chomp trailing nl if it's the only one. + */ + char *nl = strpbrk (lp->ce->pcdata.s, "\n\r"); + if (nl) + while (lp->ce->pcdata.sl > 0 && + lp->ce->pcdata.s[lp->ce->pcdata.sl-1] == ' ') + lp->ce->pcdata.s[--(lp->ce->pcdata.sl)] = '\0'; + if (nl == &lp->ce->pcdata.s[lp->ce->pcdata.sl-1]) + lp->ce->pcdata.s[--(lp->ce->pcdata.sl)] = '\0';/*safe!*/ + lp->cs = SAWLTINCON; + } else { + growString (&lp->ce->pcdata, c); + } + break; + + case ENTINCON: /* working on entity in content */ + if (c == ';') { + /* if find a recognized entity, add equiv char else raw seq */ + growString (&lp->entity, c); + if (decodeEntity (lp->entity.s, &c)) + growString (&lp->ce->pcdata, c); + else + appendString(&lp->ce->pcdata, lp->entity.s); + freeString (&lp->entity); + lp->cs = INCON; + } else if (c == '<') { + /* saw & without ; */ + appendString(&lp->ce->pcdata, lp->entity.s); + freeString (&lp->entity); + lp->cs = INCON; + goto BADCONENT; + } else + growString (&lp->entity, c); + break; + + case SAWLTINCON: /* saw < in content */ + if (c == '/') { + resetEndTag(lp); + lp->cs = LOOK4CLOSETAG; + } else { + pushXMLEle(lp); + if (isTokenChar(1,c)) { + growString (&lp->ce->tag, c); + lp->cs = INTAG; + } else + lp->cs = LOOK4TAG; + } + break; + + case LOOK4CLOSETAG: /* looking for closing tag after < */ + if (isTokenChar (1, c)) { + growString (&lp->endtag, c); + lp->cs = INCLOSETAG; + } else if (!isspace(c)) { + sprintf (errmsg, "Line %d: Bogus preend tag char %c", lp->ln,c); + return (-1); + } + break; + + case INCLOSETAG: /* reading closing tag */ + if (isTokenChar(0, c)) + growString (&lp->endtag, c); + else if (c == '>') { + if (strcmp (lp->ce->tag.s, lp->endtag.s)) { + sprintf (errmsg,"Line %d: closing tag %s does not match %s", + lp->ln, lp->endtag.s, lp->ce->tag.s); + return (-1); + } else if (lp->ce->pe) { + popXMLEle(lp); + lp->cs = LOOK4CON; /* back to content after nested elem */ + } else + return (1); /* yes! */ + } else if (!isspace(c)) { + sprintf (errmsg, "Line %d: Bogus end tag char %c", lp->ln, c); + return (-1); + } + break; + } + + return (0); +} + +/* set up for a fresh start again */ +static void +initParser(LilXML *lp) +{ + delXMLEle (lp->ce); + freeString (&lp->endtag); + memset (lp, 0, sizeof(*lp)); + newString (&lp->endtag); + lp->cs = LOOK4START; + lp->ln = 1; +} + +/* start a new XMLEle. + * point ce to a new XMLEle. + * if ce already set up, add to its list of child elements too. + * endtag no longer valid. + */ +static void +pushXMLEle(LilXML *lp) +{ + lp->ce = growEle (lp->ce); + resetEndTag(lp); +} + +/* point ce to parent of current ce. + * endtag no longer valid. + */ +static void +popXMLEle(LilXML *lp) +{ + lp->ce = lp->ce->pe; + resetEndTag(lp); +} + +/* return one new XMLEle, added to the given element if given */ +static XMLEle * +growEle (XMLEle *pe) +{ + XMLEle *newe = (XMLEle *) moremem (NULL, sizeof(XMLEle)); + + memset (newe, 0, sizeof(XMLEle)); + newString (&newe->tag); + newString (&newe->pcdata); + newe->pe = pe; + + if (pe) { + pe->el = (XMLEle **) moremem (pe->el, (pe->nel+1)*sizeof(XMLEle *)); + pe->el[pe->nel++] = newe; + } + + return (newe); +} + +/* add room for and return one new XMLAtt to the given element */ +static XMLAtt * +growAtt(XMLEle *ep) +{ + XMLAtt *newa = (XMLAtt *) moremem (NULL, sizeof(XMLAtt)); + + memset (newa, 0, sizeof(*newa)); + newString(&newa->name); + newString(&newa->valu); + newa->ce = ep; + + ep->at = (XMLAtt **) moremem (ep->at, (ep->nat+1)*sizeof(XMLAtt *)); + ep->at[ep->nat++] = newa; + + return (newa); +} + +/* free a and all it holds */ +static void +freeAtt (XMLAtt *a) +{ + if (!a) + return; + freeString (&a->name); + freeString (&a->valu); + (*myfree)(a); +} + +/* reset endtag */ +static void +resetEndTag(LilXML *lp) +{ + freeString (&lp->endtag); + newString (&lp->endtag); +} + +/* 1 if c is a valid token character, else 0. + * it can be alpha or '_' or numeric unless start. + */ +static int +isTokenChar (int start, int c) +{ + return (isalpha(c) || c == '_' || (!start && isdigit(c))); +} + +/* grow the String storage at *sp to append c */ +static void +growString (String *sp, int c) +{ + int l = sp->sl + 2; /* need room for '\0' plus c */ + + if (l > sp->sm) { + if (!sp->s) + newString (sp); + else + sp->s = (char *) moremem (sp->s, sp->sm *= 2); + } + sp->s[--l] = '\0'; + sp->s[--l] = (char)c; + sp->sl++; +} + +/* append str to the String storage at *sp */ +static void +appendString (String *sp, char *str) +{ + int strl = strlen (str); + int l = sp->sl + strl + 1; /* need room for '\0' */ + + if (l > sp->sm) { + if (!sp->s) + newString (sp); + if (l > sp->sm) + sp->s = (char *) moremem (sp->s, (sp->sm = l)); + } + strcpy (&sp->s[sp->sl], str); + sp->sl += strl; +} + +/* init a String with a malloced string containing just \0 */ +static void +newString(String *sp) +{ + sp->s = (char *)moremem(NULL, MINMEM); + sp->sm = MINMEM; + *sp->s = '\0'; + sp->sl = 0; +} + +/* free memory used by the given String */ +static void +freeString (String *sp) +{ + if (sp->s) + (*myfree) (sp->s); + sp->s = NULL; + sp->sl = 0; + sp->sm = 0; +} + +/* like malloc but knows to use realloc if already started */ +static void * +moremem (void *old, int n) +{ + return (old ? (*myrealloc)(old, n) : (*mymalloc)(n)); +} + +#if defined(MAIN_TST) +int +main (int ac, char *av[]) +{ + LilXML *lp = newLilXML(); + char errmsg[1024]; + XMLEle *root; + + root = readXMLFile (stdin, lp, errmsg); + if (root) { + if (ac > 1) { + XMLEle *theend = addXMLEle (root, "theend"); + editXMLEle (theend, "Added to test editing"); + addXMLAtt (theend, "hello", "world"); + } + + fprintf (stderr, "::::::::::::: %s\n", tagXMLEle(root)); + prXMLEle (stdout, root, 0); + delXMLEle (root); + } else if (errmsg[0]) { + fprintf (stderr, "Error: %s\n", errmsg); + } + + delLilXML (lp); + + return (0); +} +#endif + +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: lilxml.c,v $ $Date: 2007/01/03 07:26:12 $ $Revision: 1.44 $ $Name: $"}; diff --git a/liblilxml/lilxml.h b/liblilxml/lilxml.h new file mode 100644 index 0000000..37d0969 --- /dev/null +++ b/liblilxml/lilxml.h @@ -0,0 +1,116 @@ +#if 0 + liblilxml + Copyright (C) 2003 Elwood C. Downey + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#endif + +/* this is a little DOM-style library to handle parsing and processing an XML file. + * it only handles elements, attributes and pcdata content. + * and are silently ignored. + * pcdata is collected into one string, sans leading whitespace first line. + * see the end for example usage. + */ + +#ifndef LILXML_H +#define LILXML_H + +/* opaque handle types */ +typedef struct _xml_att XMLAtt; +typedef struct _xml_ele XMLEle; +typedef struct _LilXML LilXML; + +/* creation and destruction functions */ +extern LilXML *newLilXML(void); +extern void delLilXML (LilXML *lp); +extern void delXMLEle (XMLEle *e); + +/* process an XML one char at a time */ +extern XMLEle *readXMLEle (LilXML *lp, int c, char errmsg[]); + +/* search functions */ +extern XMLAtt *findXMLAtt (XMLEle *e, char *name); +extern XMLEle *findXMLEle (XMLEle *e, char *tag); + +/* iteration functions */ +extern XMLEle *nextXMLEle (XMLEle *ep, int first); +extern XMLAtt *nextXMLAtt (XMLEle *ep, int first); + +/* tree functions */ +extern XMLEle *parentXMLEle (XMLEle *ep); +extern XMLEle *parentXMLAtt (XMLAtt *ap); + +/* access functions */ +extern char *tagXMLEle (XMLEle *ep); +extern char *pcdataXMLEle (XMLEle *ep); +extern char *nameXMLAtt (XMLAtt *ap); +extern char *valuXMLAtt (XMLAtt *ap); +extern int pcdatalenXMLEle (XMLEle *ep); +extern int nXMLEle (XMLEle *ep); +extern int nXMLAtt (XMLEle *ep); + +/* editing functions */ +extern XMLEle *addXMLEle (XMLEle *parent, char *tag); +extern void editXMLEle (XMLEle *ep, char *pcdata); +extern XMLAtt *addXMLAtt (XMLEle *ep, char *name, char *value); +extern void rmXMLAtt (XMLEle *ep, char *name); +extern void editXMLAtt (XMLAtt *ap, char *str); +extern char *entityXML (char *str); + +/* convenience functions */ +extern char *findXMLAttValu (XMLEle *ep, char *name); +extern XMLEle *readXMLFile (FILE *fp, LilXML *lp, char errmsg[]); +extern void prXMLEle (FILE *fp, XMLEle *e, int level); + +/* install alternatives to malloc/realloc/free */ +extern void xmlMalloc (void *(*newmalloc)(size_t size), + void *(*newrealloc)(void *ptr, size_t size), void (*newfree)(void *ptr)); + + +/* examples. + + initialize a lil xml context and read an XML file in a root element + + LilXML *lp = newLilXML(); + char errmsg[1024]; + XMLEle *root, *ep; + int c; + + while ((c = fgetc(stdin)) != EOF) { + root = readXMLEle (lp, c, errmsg); + if (root) + break; + if (errmsg[0]) + error ("Error: %s\n", errmsg); + } + + print the tag and pcdata content of each child element within the root + + for (ep = nextXMLEle (root, 1); ep != NULL; ep = nextXMLEle (root, 0)) + printf ("%s: %s\n", tagXMLEle(ep), pcdataXMLEle(ep)); + + + finished with root element and with lil xml context + + delXMLEle (root); + delLilXML (lp); + */ + +/* For RCS Only -- Do Not Edit + * @(#) $RCSfile: lilxml.h,v $ $Date: 2006/05/27 17:37:34 $ $Revision: 1.21 $ $Name: $ + */ + +#endif /* LILXML_H */ diff --git a/libpng/._Makefile b/libpng/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._Makefile differ diff --git a/libpng/._README b/libpng/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._README differ diff --git a/libpng/._README_1ST b/libpng/._README_1ST new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._README_1ST differ diff --git a/libpng/._descrip.mms b/libpng/._descrip.mms new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._descrip.mms differ diff --git a/libpng/._png.c b/libpng/._png.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._png.c differ diff --git a/libpng/._png.h b/libpng/._png.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._png.h differ diff --git a/libpng/._pngconf.h b/libpng/._pngconf.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngconf.h differ diff --git a/libpng/._pngerror.c b/libpng/._pngerror.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngerror.c differ diff --git a/libpng/._pngget.c b/libpng/._pngget.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngget.c differ diff --git a/libpng/._pngmem.c b/libpng/._pngmem.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngmem.c differ diff --git a/libpng/._pngpread.c b/libpng/._pngpread.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngpread.c differ diff --git a/libpng/._pngread.c b/libpng/._pngread.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngread.c differ diff --git a/libpng/._pngrio.c b/libpng/._pngrio.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngrio.c differ diff --git a/libpng/._pngrtran.c b/libpng/._pngrtran.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngrtran.c differ diff --git a/libpng/._pngrutil.c b/libpng/._pngrutil.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngrutil.c differ diff --git a/libpng/._pngset.c b/libpng/._pngset.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngset.c differ diff --git a/libpng/._pngtrans.c b/libpng/._pngtrans.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngtrans.c differ diff --git a/libpng/._pngwio.c b/libpng/._pngwio.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngwio.c differ diff --git a/libpng/._pngwrite.c b/libpng/._pngwrite.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngwrite.c differ diff --git a/libpng/._pngwtran.c b/libpng/._pngwtran.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngwtran.c differ diff --git a/libpng/._pngwutil.c b/libpng/._pngwutil.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libpng/._pngwutil.c differ diff --git a/libpng/Makefile b/libpng/Makefile new file mode 100644 index 0000000..5f332cc --- /dev/null +++ b/libpng/Makefile @@ -0,0 +1,62 @@ +# makefile for libpng using gcc (generic, static library) +# Copyright (C) 2000 Cosmin Truta +# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc. +# For conditions of distribution and use, see copyright notice in png.h + +# Location of the zlib library and include files +ZLIBINC = ../libz +ZLIBLIB = ../libz + +# Compiler, linker, lib and other tools +CC = gcc +LD = $(CC) +AR = ar rcs +RANLIB = ranlib +RM = rm -f + +CDEBUG = -g -DPNG_DEBUG=5 +LDDEBUG = +CRELEASE = -O2 +LDRELEASE = -s +CFLAGS = -I$(ZLIBINC) -Wall $(CRELEASE) +LDFLAGS = -L. -L$(ZLIBLIB) -lpng -lz -lm $(LDRELEASE) + +# macosx universal binary +# CFLAGS = -I$(ZLIBINC) -Wall $(CRELEASE) -arch i386 -arch ppc + +# File extensions +O=.o +A=.a +E= + +# Variables +OBJS = png$(O) pngerror$(O) pngget$(O) pngmem$(O) pngpread$(O) \ + pngread$(O) pngrio$(O) pngrtran$(O) pngrutil$(O) pngset$(O) \ + pngtrans$(O) pngwio$(O) pngwrite$(O) pngwtran$(O) pngwutil$(O) + +# Targets +all: libpng$(A) + +libpng$(A): $(OBJS) + $(AR) $@ $(OBJS) + $(RANLIB) $@ + +clean: + $(RM) *$(O) libpng$(A) + +png$(O): png.h pngconf.h +pngerror$(O): png.h pngconf.h +pngget$(O): png.h pngconf.h +pngmem$(O): png.h pngconf.h +pngpread$(O): png.h pngconf.h +pngread$(O): png.h pngconf.h +pngrio$(O): png.h pngconf.h +pngrtran$(O): png.h pngconf.h +pngrutil$(O): png.h pngconf.h +pngset$(O): png.h pngconf.h +pngtrans$(O): png.h pngconf.h +pngwio$(O): png.h pngconf.h +pngwrite$(O): png.h pngconf.h +pngwtran$(O): png.h pngconf.h +pngwutil$(O): png.h pngconf.h + diff --git a/libpng/README b/libpng/README new file mode 100644 index 0000000..06f9fe4 --- /dev/null +++ b/libpng/README @@ -0,0 +1,262 @@ +README for libpng version 1.2.8 - December 3, 2004 (shared library 12.0) +See the note about version numbers near the top of png.h + +See INSTALL for instructions on how to install libpng. + +Libpng comes in several distribution formats. Get libpng-*.tar.gz +or libpng-*.tar.bz2 if you want UNIX-style line endings in the text +files, or lpng*.zip if you want DOS-style line endings. + +Version 0.89 was the first official release of libpng. Don't let the +fact that it's the first release fool you. The libpng library has been in +extensive use and testing since mid-1995. By late 1997 it had +finally gotten to the stage where there hadn't been significant +changes to the API in some time, and people have a bad feeling about +libraries with versions < 1.0. Version 1.0.0 was released in +March 1998. + +**** +Note that some of the changes to the png_info structure render this +version of the library binary incompatible with libpng-0.89 or +earlier versions if you are using a shared library. The type of the +"filler" parameter for png_set_filler() has changed from png_byte to +png_uint_32, which will affect shared-library applications that use +this function. + +To avoid problems with changes to the internals of png_info_struct, +new APIs have been made available in 0.95 to avoid direct application +access to info_ptr. These functions are the png_set_ and +png_get_ functions. These functions should be used when +accessing/storing the info_struct data, rather than manipulating it +directly, to avoid such problems in the future. + +It is important to note that the APIs do not make current programs +that access the info struct directly incompatible with the new +library. However, it is strongly suggested that new programs use +the new APIs (as shown in example.c and pngtest.c), and older programs +be converted to the new format, to facilitate upgrades in the future. +**** + +Additions since 0.90 include the ability to compile libpng as a +Windows DLL, and new APIs for accessing data in the info struct. +Experimental functions include the ability to set weighting and cost +factors for row filter selection, direct reads of integers from buffers +on big-endian processors that support misaligned data access, faster +methods of doing alpha composition, and more accurate 16->8 bit color +conversion. + +The additions since 0.89 include the ability to read from a PNG stream +which has had some (or all) of the signature bytes read by the calling +application. This also allows the reading of embedded PNG streams that +do not have the PNG file signature. As well, it is now possible to set +the library action on the detection of chunk CRC errors. It is possible +to set different actions based on whether the CRC error occurred in a +critical or an ancillary chunk. + +The changes made to the library, and bugs fixed are based on discussions +on the PNG-implement mailing list +and not on material submitted privately to Guy, Andreas, or Glenn. They will +forward any good suggestions to the list. + +For a detailed description on using libpng, read libpng.txt. For +examples of libpng in a program, see example.c and pngtest.c. For usage +information and restrictions (what little they are) on libpng, see +png.h. For a description on using zlib (the compression library used by +libpng) and zlib's restrictions, see zlib.h + +I have included a general makefile, as well as several machine and +compiler specific ones, but you may have to modify one for your own needs. + +You should use zlib 1.0.4 or later to run this, but it MAY work with +versions as old as zlib 0.95. Even so, there are bugs in older zlib +versions which can cause the output of invalid compression streams for +some images. You will definitely need zlib 1.0.4 or later if you are +taking advantage of the MS-DOS "far" structure allocation for the small +and medium memory models. You should also note that zlib is a +compression library that is useful for more things than just PNG files. +You can use zlib as a drop-in replacement for fread() and fwrite() if +you are so inclined. + +zlib should be available at the same place that libpng is, or at. +ftp://ftp.info-zip.org/pub/infozip/zlib + +You may also want a copy of the PNG specification. It is available +as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find +these at http://www.libpng.org/pub/png/documents/ + +This code is currently being archived at libpng.sf.net in the +[DOWNLOAD] area, and on CompuServe, Lib 20 (PNG SUPPORT) +at GO GRAPHSUP. If you can't find it in any of those places, +e-mail me, and I'll help you find it. + +If you have any code changes, requests, problems, etc., please e-mail +them to me. Also, I'd appreciate any make files or project files, +and any modifications you needed to make to get libpng to compile, +along with a #define variable to tell what compiler/system you are on. +If you needed to add transformations to libpng, or wish libpng would +provide the image in a different way, drop me a note (and code, if +possible), so I can consider supporting the transformation. +Finally, if you get any warning messages when compiling libpng +(note: not zlib), and they are easy to fix, I'd appreciate the +fix. Please mention "libpng" somewhere in the subject line. Thanks. + +This release was created and will be supported by myself (of course +based in a large way on Guy's and Andreas' earlier work), and the PNG group. + +glennrp at users.sourceforge.net +png-implement at ccrc.wustl.edu (subscription required; write to +majordomo at ccrc.wustl.edu with "subscribe png-implement" in the message). + +You can't reach Guy, the original libpng author, at the addresses +given in previous versions of this document. He and Andreas will read mail +addressed to the png-implement list, however. + +Please do not send general questions about PNG. Send them to +the (png-list at ccrc.wustl.edu, subscription required, write to +majordomo at ccrc.wustl.edu with "subscribe png-list" in your message). +On the other hand, +please do not send libpng questions to that address, send them to me +or to the png-implement list. I'll +get them in the end anyway. If you have a question about something +in the PNG specification that is related to using libpng, send it +to me. Send me any questions that start with "I was using libpng, +and ...". If in doubt, send questions to me. I'll bounce them +to others, if necessary. + +Please do not send suggestions on how to change PNG. We have +been discussing PNG for nine years now, and it is official and +finished. If you have suggestions for libpng, however, I'll +gladly listen. Even if your suggestion is not used immediately, +it may be used later. + +Files in this distribution: + + ANNOUNCE => Announcement of this version, with recent changes + CHANGES => Description of changes between libpng versions + KNOWNBUG => List of known bugs and deficiencies + LICENSE => License to use and redistribute libpng + README => This file + TODO => Things not implemented in the current library + Y2KINFO => Statement of Y2K compliance + example.c => Example code for using libpng functions + libpng.3 => manual page for libpng (includes libpng.txt) + libpng.txt => Description of libpng and its functions + libpngpf.3 => manual page for libpng's private functions + png.5 => manual page for the PNG format + png.c => Basic interface functions common to library + png.h => Library function and interface declarations + pngconf.h => System specific library configuration + pngasmrd.h => Header file for assembler-coded functions + pngerror.c => Error/warning message I/O functions + pngget.c => Functions for retrieving info from struct + pngmem.c => Memory handling functions + pngbar.png => PNG logo, 88x31 + pngnow.png => PNG logo, 98x31 + pngpread.c => Progressive reading functions + pngread.c => Read data/helper high-level functions + pngrio.c => Lowest-level data read I/O functions + pngrtran.c => Read data transformation functions + pngrutil.c => Read data utility functions + pngset.c => Functions for storing data into the info_struct + pngtest.c => Library test program + pngtest.png => Library test sample image + pngtrans.c => Common data transformation functions + pngwio.c => Lowest-level write I/O functions + pngwrite.c => High-level write functions + pngwtran.c => Write data transformations + pngwutil.c => Write utility functions + contrib => Contributions + gregbook => source code for PNG reading and writing, from + Greg Roelofs' "PNG: The Definitive Guide", + O'Reilly, 1999 + msvctest => Builds and runs pngtest using a MSVC workspace + pngminus => Simple pnm2png and png2pnm programs + pngsuite => Test images + visupng => Contains a MSVC workspace for VisualPng + projects => Contains project files and workspaces for building DLL + beos => Contains a Beos workspace for building libpng + c5builder => Contains a Borland workspace for building libpng + and zlib + visualc6 => Contains a Microsoft Visual C++ (MSVC) workspace + for building libpng and zlib + netware.txt => Contains instructions for downloading a set of + project files for building libpng and zlib on + Netware. + wince.txt => Contains instructions for downloading a Microsoft + Visual C++ (Windows CD Toolkit) workspace for + building libpng and zlib on WindowsCE + scripts => Directory containing scripts for building libpng: + descrip.mms => VMS makefile for MMS or MMK + makefile.std => Generic UNIX makefile (cc, creates static libpng.a) + makefile.elf => Linux/ELF makefile symbol versioning, + gcc, creates libpng12.so.0.1.2.8) + makefile.linux => Linux/ELF makefile + (gcc, creates libpng12.so.0.1.2.8) + makefile.gcmmx => Linux/ELF makefile + (gcc, creates libpng12.so.0.1.2.8, + uses assembler code tuned for Intel MMX platform) + makefile.gcc => Generic makefile (gcc, creates static libpng.a) + makefile.knr => Archaic UNIX Makefile that converts files with + ansi2knr (Requires ansi2knr.c from + ftp://ftp.cs.wisc.edu/ghost) + makefile.aix => AIX makefile + makefile.cygwin => Cygwin/gcc makefile + makefile.darwin => Darwin makefile + makefile.dec => DEC Alpha UNIX makefile + makefile.freebsd => FreeBSD makefile + makefile.hpgcc => HPUX makefile using gcc + makefile.hpux => HPUX (10.20 and 11.00) makefile + makefile.hp64 => HPUX (10.20 and 11.00) makefile, 64 bit + makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static) + makefile.intel => Intel C/C++ version 4.0 and later + libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later + makefile.netbsd => NetBSD/cc makefile, PNGGCCRD, makes libpng.so. + makefile.ne12bsd => NetBSD/cc makefile, PNGGCCRD, makes libpng12.so + makefile.openbsd => OpenBSD makefile + makefile.sgi => Silicon Graphics IRIX (cc, creates static lib) + makefile.sggcc => Silicon Graphics + (gcc, creates libpng12.so.0.1.2.8) + makefile.sunos => Sun makefile + makefile.solaris => Solaris 2.X makefile + (gcc, creates libpng12.so.0.1.2.8) + makefile.so9 => Solaris 9 makefile + (gcc, creates libpng12.so.0.1.2.8) + makefile.32sunu => Sun Ultra 32-bit makefile + makefile.64sunu => Sun Ultra 64-bit makefile + makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc + makefile.mips => MIPS makefile + makefile.acorn => Acorn makefile + makefile.amiga => Amiga makefile + smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC + compiler (Requires SCOPTIONS, copied from + scripts/SCOPTIONS.ppc) + makefile.atari => Atari makefile + makefile.beos => BEOS makefile for X86 + makefile.bor => Borland makefile (uses bcc) + makefile.bc32 => 32-bit Borland C++ (all modules compiled in C mode) + makefile.tc3 => Turbo C 3.0 makefile + makefile.dj2 => DJGPP 2 makefile + makefile.msc => Microsoft C makefile + makefile.vcawin32=> makefile for Microsoft Visual C++ 5.0 and + later (uses assembler code tuned for Intel MMX + platform) + makefile.vcwin32 => makefile for Microsoft Visual C++ 4.0 and + later (does not use assembler code) + makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def) + pngos2.def => OS/2 module definition file used by makefile.os2 + makefile.watcom => Watcom 10a+ Makefile, 32-bit flat memory model + makevms.com => VMS build script + SCOPTIONS.ppc => Used with smakefile.ppc + +Good luck, and happy coding. + +-Glenn Randers-Pehrson (current maintainer) + Internet: glennrp at users.sourceforge.net + +-Andreas Eric Dilger (former maintainer, 1996-1997) + Internet: adilger at enel.ucalgary.ca + Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/ + +-Guy Eric Schalnat (original author and former maintainer, 1995-1996) + (formerly of Group 42, Inc) + Internet: gschal at infinet.com diff --git a/libpng/README_1ST b/libpng/README_1ST new file mode 100644 index 0000000..2be04a0 --- /dev/null +++ b/libpng/README_1ST @@ -0,0 +1,4 @@ +Minimal png library for XEphem. No code files were changed from the original +except to simplify the Makefile. + +See the original README for more info. diff --git a/libpng/descrip.mms b/libpng/descrip.mms new file mode 100644 index 0000000..197a715 --- /dev/null +++ b/libpng/descrip.mms @@ -0,0 +1,11 @@ +# makefile for libpng.olb + +CC = cc +CFLAGS = /INCLUDE=[-.libz] + +OBJS = png.obj, pngerror.obj, pngget.obj, pngmem.obj, pngpread.obj, \ + pngread.obj, pngrio.obj, pngrtran.obj, pngrutil.obj, pngset.obj, \ + pngtrans.obj, pngwio.obj, pngwrite.obj, pngwtran.obj, pngwutil.obj + +libpng.olb : $(OBJS) + lib/crea $@ $? diff --git a/libpng/png.c b/libpng/png.c new file mode 100644 index 0000000..ebe4d67 --- /dev/null +++ b/libpng/png.c @@ -0,0 +1,828 @@ + +/* png.c - location for general purpose libpng functions + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +#define PNG_INTERNAL +#define PNG_NO_EXTERN +#include "png.h" + +/* Generate a compiler error if there is an old png.h in the search path. */ +typedef version_1_2_8 Your_png_h_is_not_version_1_2_8; + +/* Version information for C files. This had better match the version + * string defined in png.h. */ + +#ifdef PNG_USE_GLOBAL_ARRAYS +/* png_libpng_ver was changed to a function in version 1.0.5c */ +const char png_libpng_ver[18] = PNG_LIBPNG_VER_STRING; + +/* png_sig was changed to a function in version 1.0.5c */ +/* Place to hold the signature string for a PNG file. */ +const png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; + +/* Invoke global declarations for constant strings for known chunk types */ +PNG_IHDR; +PNG_IDAT; +PNG_IEND; +PNG_PLTE; +PNG_bKGD; +PNG_cHRM; +PNG_gAMA; +PNG_hIST; +PNG_iCCP; +PNG_iTXt; +PNG_oFFs; +PNG_pCAL; +PNG_sCAL; +PNG_pHYs; +PNG_sBIT; +PNG_sPLT; +PNG_sRGB; +PNG_tEXt; +PNG_tIME; +PNG_tRNS; +PNG_zTXt; + +/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + +/* start of interlace block */ +const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; + +/* offset to next interlace block */ +const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; + +/* start of interlace block in the y direction */ +const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; + +/* offset to next interlace block in the y direction */ +const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; + +/* width of interlace block (used in assembler routines only) */ +#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW +const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; +#endif + +/* Height of interlace block. This is not currently used - if you need + * it, uncomment it here and in png.h +const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1}; +*/ + +/* Mask to determine which pixels are valid in a pass */ +const int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; + +/* Mask to determine which pixels to overwrite while displaying */ +const int FARDATA png_pass_dsp_mask[] + = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; + +#endif /* PNG_USE_GLOBAL_ARRAYS */ + +/* Tells libpng that we have already handled the first "num_bytes" bytes + * of the PNG file signature. If the PNG data is embedded into another + * stream we can set num_bytes = 8 so that libpng will not attempt to read + * or write any of the magic bytes before it starts on the IHDR. + */ + +void PNGAPI +png_set_sig_bytes(png_structp png_ptr, int num_bytes) +{ + png_debug(1, "in png_set_sig_bytes\n"); + if (num_bytes > 8) + png_error(png_ptr, "Too many bytes for PNG signature."); + + png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes); +} + +/* Checks whether the supplied bytes match the PNG signature. We allow + * checking less than the full 8-byte signature so that those apps that + * already read the first few bytes of a file to determine the file type + * can simply check the remaining bytes for extra assurance. Returns + * an integer less than, equal to, or greater than zero if sig is found, + * respectively, to be less than, to match, or be greater than the correct + * PNG signature (this is the same behaviour as strcmp, memcmp, etc). + */ +int PNGAPI +png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check) +{ + png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; + if (num_to_check > 8) + num_to_check = 8; + else if (num_to_check < 1) + return (0); + + if (start > 7) + return (0); + + if (start + num_to_check > 8) + num_to_check = 8 - start; + + return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check))); +} + +/* (Obsolete) function to check signature bytes. It does not allow one + * to check a partial signature. This function might be removed in the + * future - use png_sig_cmp(). Returns true (nonzero) if the file is a PNG. + */ +int PNGAPI +png_check_sig(png_bytep sig, int num) +{ + return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num)); +} + +/* Function to allocate memory for zlib and clear it to 0. */ +#ifdef PNG_1_0_X +voidpf PNGAPI +#else +voidpf /* private */ +#endif +png_zalloc(voidpf png_ptr, uInt items, uInt size) +{ + png_voidp ptr; + png_structp p=png_ptr; + png_uint_32 save_flags=p->flags; + png_uint_32 num_bytes; + + if (items > PNG_UINT_32_MAX/size) + { + png_warning (png_ptr, "Potential overflow in png_zalloc()"); + return (NULL); + } + num_bytes = (png_uint_32)items * size; + + p->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK; + ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes); + p->flags=save_flags; + +#if defined(PNG_1_0_X) && !defined(PNG_NO_ZALLOC_ZERO) + if (ptr == NULL) + return ((voidpf)ptr); + + if (num_bytes > (png_uint_32)0x8000L) + { + png_memset(ptr, 0, (png_size_t)0x8000L); + png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0, + (png_size_t)(num_bytes - (png_uint_32)0x8000L)); + } + else + { + png_memset(ptr, 0, (png_size_t)num_bytes); + } +#endif + return ((voidpf)ptr); +} + +/* function to free memory for zlib */ +#ifdef PNG_1_0_X +void PNGAPI +#else +void /* private */ +#endif +png_zfree(voidpf png_ptr, voidpf ptr) +{ + png_free((png_structp)png_ptr, (png_voidp)ptr); +} + +/* Reset the CRC variable to 32 bits of 1's. Care must be taken + * in case CRC is > 32 bits to leave the top bits 0. + */ +void /* PRIVATE */ +png_reset_crc(png_structp png_ptr) +{ + png_ptr->crc = crc32(0, Z_NULL, 0); +} + +/* Calculate the CRC over a section of data. We can only pass as + * much data to this routine as the largest single buffer size. We + * also check that this data will actually be used before going to the + * trouble of calculating it. + */ +void /* PRIVATE */ +png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length) +{ + int need_crc = 1; + + if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ + { + if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == + (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) + need_crc = 0; + } + else /* critical */ + { + if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) + need_crc = 0; + } + + if (need_crc) + png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length); +} + +/* Allocate the memory for an info_struct for the application. We don't + * really need the png_ptr, but it could potentially be useful in the + * future. This should be used in favour of malloc(png_sizeof(png_info)) + * and png_info_init() so that applications that want to use a shared + * libpng don't have to be recompiled if png_info changes size. + */ +png_infop PNGAPI +png_create_info_struct(png_structp png_ptr) +{ + png_infop info_ptr; + + png_debug(1, "in png_create_info_struct\n"); + if(png_ptr == NULL) return (NULL); +#ifdef PNG_USER_MEM_SUPPORTED + info_ptr = (png_infop)png_create_struct_2(PNG_STRUCT_INFO, + png_ptr->malloc_fn, png_ptr->mem_ptr); +#else + info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO); +#endif + if (info_ptr != NULL) + png_info_init_3(&info_ptr, png_sizeof(png_info)); + + return (info_ptr); +} + +/* This function frees the memory associated with a single info struct. + * Normally, one would use either png_destroy_read_struct() or + * png_destroy_write_struct() to free an info struct, but this may be + * useful for some applications. + */ +void PNGAPI +png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr) +{ + png_infop info_ptr = NULL; + + png_debug(1, "in png_destroy_info_struct\n"); + if (info_ptr_ptr != NULL) + info_ptr = *info_ptr_ptr; + + if (info_ptr != NULL) + { + png_info_destroy(png_ptr, info_ptr); + +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)info_ptr, png_ptr->free_fn, + png_ptr->mem_ptr); +#else + png_destroy_struct((png_voidp)info_ptr); +#endif + *info_ptr_ptr = NULL; + } +} + +/* Initialize the info structure. This is now an internal function (0.89) + * and applications using it are urged to use png_create_info_struct() + * instead. + */ +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +#undef png_info_init +void PNGAPI +png_info_init(png_infop info_ptr) +{ + /* We only come here via pre-1.0.12-compiled applications */ + png_info_init_3(&info_ptr, 0); +} +#endif + +void PNGAPI +png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size) +{ + png_infop info_ptr = *ptr_ptr; + + png_debug(1, "in png_info_init_3\n"); + + if(png_sizeof(png_info) > png_info_struct_size) + { + png_destroy_struct(info_ptr); + info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO); + *ptr_ptr = info_ptr; + } + + /* set everything to 0 */ + png_memset(info_ptr, 0, png_sizeof (png_info)); +} + +#ifdef PNG_FREE_ME_SUPPORTED +void PNGAPI +png_data_freer(png_structp png_ptr, png_infop info_ptr, + int freer, png_uint_32 mask) +{ + png_debug(1, "in png_data_freer\n"); + if (png_ptr == NULL || info_ptr == NULL) + return; + if(freer == PNG_DESTROY_WILL_FREE_DATA) + info_ptr->free_me |= mask; + else if(freer == PNG_USER_WILL_FREE_DATA) + info_ptr->free_me &= ~mask; + else + png_warning(png_ptr, + "Unknown freer parameter in png_data_freer."); +} +#endif + +void PNGAPI +png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, + int num) +{ + png_debug(1, "in png_free_data\n"); + if (png_ptr == NULL || info_ptr == NULL) + return; + +#if defined(PNG_TEXT_SUPPORTED) +/* free text item num or (if num == -1) all text items */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_TEXT) & info_ptr->free_me) +#else +if (mask & PNG_FREE_TEXT) +#endif +{ + if (num != -1) + { + if (info_ptr->text && info_ptr->text[num].key) + { + png_free(png_ptr, info_ptr->text[num].key); + info_ptr->text[num].key = NULL; + } + } + else + { + int i; + for (i = 0; i < info_ptr->num_text; i++) + png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i); + png_free(png_ptr, info_ptr->text); + info_ptr->text = NULL; + info_ptr->num_text=0; + } +} +#endif + +#if defined(PNG_tRNS_SUPPORTED) +/* free any tRNS entry */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_TRNS) & info_ptr->free_me) +#else +if ((mask & PNG_FREE_TRNS) && (png_ptr->flags & PNG_FLAG_FREE_TRNS)) +#endif +{ + png_free(png_ptr, info_ptr->trans); + info_ptr->valid &= ~PNG_INFO_tRNS; +#ifndef PNG_FREE_ME_SUPPORTED + png_ptr->flags &= ~PNG_FLAG_FREE_TRNS; +#endif + info_ptr->trans = NULL; +} +#endif + +#if defined(PNG_sCAL_SUPPORTED) +/* free any sCAL entry */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_SCAL) & info_ptr->free_me) +#else +if (mask & PNG_FREE_SCAL) +#endif +{ +#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) + png_free(png_ptr, info_ptr->scal_s_width); + png_free(png_ptr, info_ptr->scal_s_height); + info_ptr->scal_s_width = NULL; + info_ptr->scal_s_height = NULL; +#endif + info_ptr->valid &= ~PNG_INFO_sCAL; +} +#endif + +#if defined(PNG_pCAL_SUPPORTED) +/* free any pCAL entry */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_PCAL) & info_ptr->free_me) +#else +if (mask & PNG_FREE_PCAL) +#endif +{ + png_free(png_ptr, info_ptr->pcal_purpose); + png_free(png_ptr, info_ptr->pcal_units); + info_ptr->pcal_purpose = NULL; + info_ptr->pcal_units = NULL; + if (info_ptr->pcal_params != NULL) + { + int i; + for (i = 0; i < (int)info_ptr->pcal_nparams; i++) + { + png_free(png_ptr, info_ptr->pcal_params[i]); + info_ptr->pcal_params[i]=NULL; + } + png_free(png_ptr, info_ptr->pcal_params); + info_ptr->pcal_params = NULL; + } + info_ptr->valid &= ~PNG_INFO_pCAL; +} +#endif + +#if defined(PNG_iCCP_SUPPORTED) +/* free any iCCP entry */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_ICCP) & info_ptr->free_me) +#else +if (mask & PNG_FREE_ICCP) +#endif +{ + png_free(png_ptr, info_ptr->iccp_name); + png_free(png_ptr, info_ptr->iccp_profile); + info_ptr->iccp_name = NULL; + info_ptr->iccp_profile = NULL; + info_ptr->valid &= ~PNG_INFO_iCCP; +} +#endif + +#if defined(PNG_sPLT_SUPPORTED) +/* free a given sPLT entry, or (if num == -1) all sPLT entries */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_SPLT) & info_ptr->free_me) +#else +if (mask & PNG_FREE_SPLT) +#endif +{ + if (num != -1) + { + if(info_ptr->splt_palettes) + { + png_free(png_ptr, info_ptr->splt_palettes[num].name); + png_free(png_ptr, info_ptr->splt_palettes[num].entries); + info_ptr->splt_palettes[num].name = NULL; + info_ptr->splt_palettes[num].entries = NULL; + } + } + else + { + if(info_ptr->splt_palettes_num) + { + int i; + for (i = 0; i < (int)info_ptr->splt_palettes_num; i++) + png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i); + + png_free(png_ptr, info_ptr->splt_palettes); + info_ptr->splt_palettes = NULL; + info_ptr->splt_palettes_num = 0; + } + info_ptr->valid &= ~PNG_INFO_sPLT; + } +} +#endif + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_UNKN) & info_ptr->free_me) +#else +if (mask & PNG_FREE_UNKN) +#endif +{ + if (num != -1) + { + if(info_ptr->unknown_chunks) + { + png_free(png_ptr, info_ptr->unknown_chunks[num].data); + info_ptr->unknown_chunks[num].data = NULL; + } + } + else + { + int i; + + if(info_ptr->unknown_chunks_num) + { + for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++) + png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i); + + png_free(png_ptr, info_ptr->unknown_chunks); + info_ptr->unknown_chunks = NULL; + info_ptr->unknown_chunks_num = 0; + } + } +} +#endif + +#if defined(PNG_hIST_SUPPORTED) +/* free any hIST entry */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_HIST) & info_ptr->free_me) +#else +if ((mask & PNG_FREE_HIST) && (png_ptr->flags & PNG_FLAG_FREE_HIST)) +#endif +{ + png_free(png_ptr, info_ptr->hist); + info_ptr->hist = NULL; + info_ptr->valid &= ~PNG_INFO_hIST; +#ifndef PNG_FREE_ME_SUPPORTED + png_ptr->flags &= ~PNG_FLAG_FREE_HIST; +#endif +} +#endif + +/* free any PLTE entry that was internally allocated */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_PLTE) & info_ptr->free_me) +#else +if ((mask & PNG_FREE_PLTE) && (png_ptr->flags & PNG_FLAG_FREE_PLTE)) +#endif +{ + png_zfree(png_ptr, info_ptr->palette); + info_ptr->palette = NULL; + info_ptr->valid &= ~PNG_INFO_PLTE; +#ifndef PNG_FREE_ME_SUPPORTED + png_ptr->flags &= ~PNG_FLAG_FREE_PLTE; +#endif + info_ptr->num_palette = 0; +} + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +/* free any image bits attached to the info structure */ +#ifdef PNG_FREE_ME_SUPPORTED +if ((mask & PNG_FREE_ROWS) & info_ptr->free_me) +#else +if (mask & PNG_FREE_ROWS) +#endif +{ + if(info_ptr->row_pointers) + { + int row; + for (row = 0; row < (int)info_ptr->height; row++) + { + png_free(png_ptr, info_ptr->row_pointers[row]); + info_ptr->row_pointers[row]=NULL; + } + png_free(png_ptr, info_ptr->row_pointers); + info_ptr->row_pointers=NULL; + } + info_ptr->valid &= ~PNG_INFO_IDAT; +} +#endif + +#ifdef PNG_FREE_ME_SUPPORTED + if(num == -1) + info_ptr->free_me &= ~mask; + else + info_ptr->free_me &= ~(mask & ~PNG_FREE_MUL); +#endif +} + +/* This is an internal routine to free any memory that the info struct is + * pointing to before re-using it or freeing the struct itself. Recall + * that png_free() checks for NULL pointers for us. + */ +void /* PRIVATE */ +png_info_destroy(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_info_destroy\n"); + + png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) + if (png_ptr->num_chunk_list) + { + png_free(png_ptr, png_ptr->chunk_list); + png_ptr->chunk_list=NULL; + png_ptr->num_chunk_list=0; + } +#endif + + png_info_init_3(&info_ptr, png_sizeof(png_info)); +} + +/* This function returns a pointer to the io_ptr associated with the user + * functions. The application should free any memory associated with this + * pointer before png_write_destroy() or png_read_destroy() are called. + */ +png_voidp PNGAPI +png_get_io_ptr(png_structp png_ptr) +{ + return (png_ptr->io_ptr); +} + +#if !defined(PNG_NO_STDIO) +/* Initialize the default input/output functions for the PNG file. If you + * use your own read or write routines, you can call either png_set_read_fn() + * or png_set_write_fn() instead of png_init_io(). If you have defined + * PNG_NO_STDIO, you must use a function of your own because "FILE *" isn't + * necessarily available. + */ +void PNGAPI +png_init_io(png_structp png_ptr, png_FILE_p fp) +{ + png_debug(1, "in png_init_io\n"); + png_ptr->io_ptr = (png_voidp)fp; +} +#endif + +#if defined(PNG_TIME_RFC1123_SUPPORTED) +/* Convert the supplied time into an RFC 1123 string suitable for use in + * a "Creation Time" or other text-based time string. + */ +png_charp PNGAPI +png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime) +{ + static PNG_CONST char short_months[12][4] = + {"Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + + if (png_ptr->time_buffer == NULL) + { + png_ptr->time_buffer = (png_charp)png_malloc(png_ptr, (png_uint_32)(29* + png_sizeof(char))); + } + +#if defined(_WIN32_WCE) + { + wchar_t time_buf[29]; + wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"), + ptime->day % 32, short_months[(ptime->month - 1) % 12], + ptime->year, ptime->hour % 24, ptime->minute % 60, + ptime->second % 61); + WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29, + NULL, NULL); + } +#else +#ifdef USE_FAR_KEYWORD + { + char near_time_buf[29]; + sprintf(near_time_buf, "%d %s %d %02d:%02d:%02d +0000", + ptime->day % 32, short_months[(ptime->month - 1) % 12], + ptime->year, ptime->hour % 24, ptime->minute % 60, + ptime->second % 61); + png_memcpy(png_ptr->time_buffer, near_time_buf, + 29*png_sizeof(char)); + } +#else + sprintf(png_ptr->time_buffer, "%d %s %d %02d:%02d:%02d +0000", + ptime->day % 32, short_months[(ptime->month - 1) % 12], + ptime->year, ptime->hour % 24, ptime->minute % 60, + ptime->second % 61); +#endif +#endif /* _WIN32_WCE */ + return ((png_charp)png_ptr->time_buffer); +} +#endif /* PNG_TIME_RFC1123_SUPPORTED */ + +#if 0 +/* Signature string for a PNG file. */ +png_bytep PNGAPI +png_sig_bytes(void) +{ + return ((png_bytep)"\211\120\116\107\015\012\032\012"); +} +#endif + +png_charp PNGAPI +png_get_copyright(png_structp png_ptr) +{ + if (png_ptr != NULL) /* silence compiler warning about unused png_ptr */ + return ((png_charp) "\n libpng version 1.2.8 - December 3, 2004\n\ + Copyright (c) 1998-2004 Glenn Randers-Pehrson\n\ + Copyright (c) 1996-1997 Andreas Dilger\n\ + Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n"); + return ((png_charp) ""); +} + +/* The following return the library version as a short string in the + * format 1.0.0 through 99.99.99zz. To get the version of *.h files + * used with your application, print out PNG_LIBPNG_VER_STRING, which + * is defined in png.h. + * Note: now there is no difference between png_get_libpng_ver() and + * png_get_header_ver(). Due to the version_nn_nn_nn typedef guard, + * it is guaranteed that png.c uses the correct version of png.h. + */ +png_charp PNGAPI +png_get_libpng_ver(png_structp png_ptr) +{ + /* Version of *.c files used when building libpng */ + if (png_ptr != NULL) /* silence compiler warning about unused png_ptr */ + return ((png_charp) PNG_LIBPNG_VER_STRING); + return ((png_charp) ""); +} + +png_charp PNGAPI +png_get_header_ver(png_structp png_ptr) +{ + /* Version of *.h files used when building libpng */ + if (png_ptr != NULL) /* silence compiler warning about unused png_ptr */ + return ((png_charp) PNG_LIBPNG_VER_STRING); + return ((png_charp) ""); +} + +png_charp PNGAPI +png_get_header_version(png_structp png_ptr) +{ + /* Returns longer string containing both version and date */ + if (png_ptr != NULL) /* silence compiler warning about unused png_ptr */ + return ((png_charp) PNG_HEADER_VERSION_STRING); + return ((png_charp) ""); +} + +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +int PNGAPI +png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name) +{ + /* check chunk_name and return "keep" value if it's on the list, else 0 */ + int i; + png_bytep p; + if((png_ptr == NULL && chunk_name == NULL) || png_ptr->num_chunk_list<=0) + return 0; + p=png_ptr->chunk_list+png_ptr->num_chunk_list*5-5; + for (i = png_ptr->num_chunk_list; i; i--, p-=5) + if (!png_memcmp(chunk_name, p, 4)) + return ((int)*(p+4)); + return 0; +} +#endif + +/* This function, added to libpng-1.0.6g, is untested. */ +int PNGAPI +png_reset_zstream(png_structp png_ptr) +{ + return (inflateReset(&png_ptr->zstream)); +} + +/* This function was added to libpng-1.0.7 */ +png_uint_32 PNGAPI +png_access_version_number(void) +{ + /* Version of *.c files used when building libpng */ + return((png_uint_32) PNG_LIBPNG_VER); +} + + +#if !defined(PNG_1_0_X) +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) + /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ +/* this INTERNAL function was added to libpng 1.2.0 */ +void /* PRIVATE */ +png_init_mmx_flags (png_structp png_ptr) +{ + png_ptr->mmx_rowbytes_threshold = 0; + png_ptr->mmx_bitdepth_threshold = 0; + +# if (defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD)) + + png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_COMPILED; + + if (png_mmx_support() > 0) { + png_ptr->asm_flags |= PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU +# ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW + | PNG_ASM_FLAG_MMX_READ_COMBINE_ROW +# endif +# ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE + | PNG_ASM_FLAG_MMX_READ_INTERLACE +# endif +# ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW + ; +# else + | PNG_ASM_FLAG_MMX_READ_FILTER_SUB + | PNG_ASM_FLAG_MMX_READ_FILTER_UP + | PNG_ASM_FLAG_MMX_READ_FILTER_AVG + | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; + + png_ptr->mmx_rowbytes_threshold = PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT; + png_ptr->mmx_bitdepth_threshold = PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT; +# endif + } else { + png_ptr->asm_flags &= ~( PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU + | PNG_MMX_READ_FLAGS + | PNG_MMX_WRITE_FLAGS ); + } + +# else /* !((PNGVCRD || PNGGCCRD) && PNG_ASSEMBLER_CODE_SUPPORTED)) */ + + /* clear all MMX flags; no support is compiled in */ + png_ptr->asm_flags &= ~( PNG_MMX_FLAGS ); + +# endif /* ?(PNGVCRD || PNGGCCRD) */ +} + +#endif /* !(PNG_ASSEMBLER_CODE_SUPPORTED) */ + +/* this function was added to libpng 1.2.0 */ +#if !defined(PNG_USE_PNGGCCRD) && \ + !(defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)) +int PNGAPI +png_mmx_support(void) +{ + return -1; +} +#endif +#endif /* PNG_1_0_X */ + +#ifdef PNG_SIZE_T +/* Added at libpng version 1.2.6 */ + PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); +png_size_t PNGAPI +png_convert_size(size_t size) +{ + if (size > (png_size_t)-1) + PNG_ABORT(); /* We haven't got access to png_ptr, so no png_error() */ + return ((png_size_t)size); +} +#endif /* PNG_SIZE_T */ diff --git a/libpng/png.h b/libpng/png.h new file mode 100644 index 0000000..e87a301 --- /dev/null +++ b/libpng/png.h @@ -0,0 +1,3419 @@ +/* png.h - header file for PNG reference library + * + * libpng version 1.2.8 - December 3, 2004 + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * Authors and maintainers: + * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat + * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger + * libpng versions 0.97, January 1998, through 1.2.8 - December 3, 2004: Glenn + * See also "Contributing Authors", below. + * + * Note about libpng version numbers: + * + * Due to various miscommunications, unforeseen code incompatibilities + * and occasional factors outside the authors' control, version numbering + * on the library has not always been consistent and straightforward. + * The following table summarizes matters since version 0.89c, which was + * the first widely used release: + * + * source png.h png.h shared-lib + * version string int version + * ------- ------ ----- ---------- + * 0.89c "1.0 beta 3" 0.89 89 1.0.89 + * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] + * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] + * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] + * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] + * 0.97c 0.97 97 2.0.97 + * 0.98 0.98 98 2.0.98 + * 0.99 0.99 98 2.0.99 + * 0.99a-m 0.99 99 2.0.99 + * 1.00 1.00 100 2.1.0 [100 should be 10000] + * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] + * 1.0.1 png.h string is 10001 2.1.0 + * 1.0.1a-e identical to the 10002 from here on, the shared library + * 1.0.2 source version) 10002 is 2.V where V is the source code + * 1.0.2a-b 10003 version, except as noted. + * 1.0.3 10003 + * 1.0.3a-d 10004 + * 1.0.4 10004 + * 1.0.4a-f 10005 + * 1.0.5 (+ 2 patches) 10005 + * 1.0.5a-d 10006 + * 1.0.5e-r 10100 (not source compatible) + * 1.0.5s-v 10006 (not binary compatible) + * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) + * 1.0.6d-f 10007 (still binary incompatible) + * 1.0.6g 10007 + * 1.0.6h 10007 10.6h (testing xy.z so-numbering) + * 1.0.6i 10007 10.6i + * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) + * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) + * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) + * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) + * 1.0.7 1 10007 (still compatible) + * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 + * 1.0.8rc1 1 10008 2.1.0.8rc1 + * 1.0.8 1 10008 2.1.0.8 + * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 + * 1.0.9rc1 1 10009 2.1.0.9rc1 + * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 + * 1.0.9rc2 1 10009 2.1.0.9rc2 + * 1.0.9 1 10009 2.1.0.9 + * 1.0.10beta1 1 10010 2.1.0.10beta1 + * 1.0.10rc1 1 10010 2.1.0.10rc1 + * 1.0.10 1 10010 2.1.0.10 + * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 + * 1.0.11rc1 1 10011 2.1.0.11rc1 + * 1.0.11 1 10011 2.1.0.11 + * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 + * 1.0.12rc1 2 10012 2.1.0.12rc1 + * 1.0.12 2 10012 2.1.0.12 + * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) + * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 + * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 + * 1.2.0rc1 3 10200 3.1.2.0rc1 + * 1.2.0 3 10200 3.1.2.0 + * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 + * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 + * 1.2.1 3 10201 3.1.2.1 + * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 + * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 + * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 + * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 + * 1.0.13 10 10013 10.so.0.1.0.13 + * 1.2.2 12 10202 12.so.0.1.2.2 + * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 + * 1.2.3 12 10203 12.so.0.1.2.3 + * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 + * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 + * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 + * 1.0.14 10 10014 10.so.0.1.0.14 + * 1.2.4 13 10204 12.so.0.1.2.4 + * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 + * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 + * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 + * 1.0.15 10 10015 10.so.0.1.0.15 + * 1.2.5 13 10205 12.so.0.1.2.5 + * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 + * 1.0.16 10 10016 10.so.0.1.0.16 + * 1.2.6 13 10206 12.so.0.1.2.6 + * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 + * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 + * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 + * 1.0.17 10 10017 12.so.0.1.0.17 + * 1.2.7 13 10207 12.so.0.1.2.7 + * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 + * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5 + * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 + * 1.0.18 10 10018 12.so.0.1.0.18 + * 1.2.8 13 10208 12.so.0.1.2.8 + * + * Henceforth the source version will match the shared-library major + * and minor numbers; the shared-library major version number will be + * used for changes in backward compatibility, as it is intended. The + * PNG_LIBPNG_VER macro, which is not used within libpng but is available + * for applications, is an unsigned integer of the form xyyzz corresponding + * to the source version x.y.z (leading zeros in y and z). Beta versions + * were given the previous public release number plus a letter, until + * version 1.0.6j; from then on they were given the upcoming public + * release number plus "betaNN" or "rcN". + * + * Binary incompatibility exists only when applications make direct access + * to the info_ptr or png_ptr members through png.h, and the compiled + * application is loaded with a different version of the library. + * + * DLLNUM will change each time there are forward or backward changes + * in binary compatibility (e.g., when a new feature is added). + * + * See libpng.txt or libpng.3 for more information. The PNG specification + * is available as a W3C Recommendation and as an ISO Specification, + * defines should NOT be changed. + */ +#define PNG_INFO_gAMA 0x0001 +#define PNG_INFO_sBIT 0x0002 +#define PNG_INFO_cHRM 0x0004 +#define PNG_INFO_PLTE 0x0008 +#define PNG_INFO_tRNS 0x0010 +#define PNG_INFO_bKGD 0x0020 +#define PNG_INFO_hIST 0x0040 +#define PNG_INFO_pHYs 0x0080 +#define PNG_INFO_oFFs 0x0100 +#define PNG_INFO_tIME 0x0200 +#define PNG_INFO_pCAL 0x0400 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ + +/* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using + * the routines for other purposes. + */ +typedef struct png_row_info_struct +{ + png_uint_32 width; /* width of row */ + png_uint_32 rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_byte pixel_depth; /* bits per pixel (depth * channels) */ +} png_row_info; + +typedef png_row_info FAR * png_row_infop; +typedef png_row_info FAR * FAR * png_row_infopp; + +/* These are the function types for the I/O functions and for the functions + * that allow the user to override the default I/O functions with his or her + * own. The png_error_ptr type should match that of user-supplied warning + * and error functions, while the png_rw_ptr type should match that of the + * user read/write data functions. + */ +typedef struct png_struct_def png_struct; +typedef png_struct FAR * png_structp; + +typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); +typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); +typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); +typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, + int)); +typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, + int)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop)); +typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); +typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, + png_uint_32, int)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, + png_row_infop, png_bytep)); +#endif + +#if defined(PNG_USER_CHUNKS_SUPPORTED) +typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); +#endif +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); +#endif + +/* Transform masks for the high-level interface */ +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ + +/* Flags for MNG supported features */ +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 +#define PNG_FLAG_MNG_FILTER_64 0x04 +#define PNG_ALL_MNG_FEATURES 0x05 + +typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); +typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); + +/* The structure that holds the information to read and write PNG files. + * The only people who need to care about what is inside of this are the + * people who will be modifying the library for their own special needs. + * It should NOT be accessed directly by an application, except to store + * the jmp_buf. + */ + +struct png_struct_def +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf jmpbuf; /* used in png_error */ +#endif + png_error_ptr error_fn; /* function for printing errors and aborting */ + png_error_ptr warning_fn; /* function for printing warnings */ + png_voidp error_ptr; /* user supplied struct for error functions */ + png_rw_ptr write_data_fn; /* function for writing output data */ + png_rw_ptr read_data_fn; /* function for reading input data */ + png_voidp io_ptr; /* ptr to application struct for I/O functions */ + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + png_user_transform_ptr read_user_transform_fn; /* user read transform */ +#endif + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_user_transform_ptr write_user_transform_fn; /* user write transform */ +#endif + +/* These were added in libpng-1.0.2 */ +#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + png_voidp user_transform_ptr; /* user supplied struct for user transform */ + png_byte user_transform_depth; /* bit depth of user transformed pixels */ + png_byte user_transform_channels; /* channels in user transformed pixels */ +#endif +#endif + + png_uint_32 mode; /* tells us where we are in the PNG file */ + png_uint_32 flags; /* flags indicating various things to libpng */ + png_uint_32 transformations; /* which transformations to perform */ + + z_stream zstream; /* pointer to decompression structure (below) */ + png_bytep zbuf; /* buffer for zlib */ + png_size_t zbuf_size; /* size of zbuf */ + int zlib_level; /* holds zlib compression level */ + int zlib_method; /* holds zlib compression method */ + int zlib_window_bits; /* holds zlib compression window bits */ + int zlib_mem_level; /* holds zlib compression memory level */ + int zlib_strategy; /* holds zlib compression strategy */ + + png_uint_32 width; /* width of image in pixels */ + png_uint_32 height; /* height of image in pixels */ + png_uint_32 num_rows; /* number of rows in current pass */ + png_uint_32 usr_width; /* width of row at start of write */ + png_uint_32 rowbytes; /* size of row in bytes */ + png_uint_32 irowbytes; /* size of current interlaced row in bytes */ + png_uint_32 iwidth; /* width of current interlaced row in pixels */ + png_uint_32 row_number; /* current row in interlace pass */ + png_bytep prev_row; /* buffer to save previous (unfiltered) row */ + png_bytep row_buf; /* buffer to save current (unfiltered) row */ + png_bytep sub_row; /* buffer to save "sub" row when filtering */ + png_bytep up_row; /* buffer to save "up" row when filtering */ + png_bytep avg_row; /* buffer to save "avg" row when filtering */ + png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ + png_row_info row_info; /* used for transformation routines */ + + png_uint_32 idat_size; /* current IDAT size for read */ + png_uint_32 crc; /* current chunk CRC value */ + png_colorp palette; /* palette from the input file */ + png_uint_16 num_palette; /* number of color entries in palette */ + png_uint_16 num_trans; /* number of transparency values */ + png_byte chunk_name[5]; /* null-terminated name of current chunk */ + png_byte compression; /* file compression type (always 0) */ + png_byte filter; /* file filter type (always 0) */ + png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ + png_byte pass; /* current interlace pass (0 - 6) */ + png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ + png_byte color_type; /* color type of file */ + png_byte bit_depth; /* bit depth of file */ + png_byte usr_bit_depth; /* bit depth of users row */ + png_byte pixel_depth; /* number of bits per pixel */ + png_byte channels; /* number of channels in file */ + png_byte usr_channels; /* channels at start of write */ + png_byte sig_bytes; /* magic bytes read/written from start of file */ + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +#ifdef PNG_LEGACY_SUPPORTED + png_byte filler; /* filler byte for pixel expansion */ +#else + png_uint_16 filler; /* filler bytes for pixel expansion */ +#endif +#endif + +#if defined(PNG_bKGD_SUPPORTED) + png_byte background_gamma_type; +# ifdef PNG_FLOATING_POINT_SUPPORTED + float background_gamma; +# endif + png_color_16 background; /* background color in screen gamma space */ +#if defined(PNG_READ_GAMMA_SUPPORTED) + png_color_16 background_1; /* background normalized to gamma 1.0 */ +#endif +#endif /* PNG_bKGD_SUPPORTED */ + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) + png_flush_ptr output_flush_fn;/* Function for flushing output */ + png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ + png_uint_32 flush_rows; /* number of rows written since last flush */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ +#ifdef PNG_FLOATING_POINT_SUPPORTED + float gamma; /* file gamma value */ + float screen_gamma; /* screen gamma value (display_exponent) */ +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep gamma_table; /* gamma table for 8-bit depth files */ + png_bytep gamma_from_1; /* converts from 1.0 to screen */ + png_bytep gamma_to_1; /* converts from file to 1.0 */ + png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ + png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ + png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) + png_color_8 sig_bit; /* significant bits in each available channel */ +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) + png_color_8 shift; /* shift for significant bit tranformation */ +#endif + +#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ + || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_bytep trans; /* transparency values for paletted files */ + png_color_16 trans_values; /* transparency values for non-paletted files */ +#endif + + png_read_status_ptr read_row_fn; /* called after each row is decoded */ + png_write_status_ptr write_row_fn; /* called after each row is encoded */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + png_progressive_info_ptr info_fn; /* called after header data fully read */ + png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */ + png_progressive_end_ptr end_fn; /* called after image is complete */ + png_bytep save_buffer_ptr; /* current location in save_buffer */ + png_bytep save_buffer; /* buffer for previously read data */ + png_bytep current_buffer_ptr; /* current location in current_buffer */ + png_bytep current_buffer; /* buffer for recently used data */ + png_uint_32 push_length; /* size of current input chunk */ + png_uint_32 skip_length; /* bytes to skip in input data */ + png_size_t save_buffer_size; /* amount of data now in save_buffer */ + png_size_t save_buffer_max; /* total size of save_buffer */ + png_size_t buffer_size; /* total amount of available input data */ + png_size_t current_buffer_size; /* amount of data now in current_buffer */ + int process_mode; /* what push library is currently doing */ + int cur_palette; /* current push library palette index */ + +# if defined(PNG_TEXT_SUPPORTED) + png_size_t current_text_size; /* current size of text input data */ + png_size_t current_text_left; /* how much text left to read in input */ + png_charp current_text; /* current text chunk buffer */ + png_charp current_text_ptr; /* current location in current_text */ +# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */ + +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) +/* for the Borland special 64K segment handler */ + png_bytepp offset_table_ptr; + png_bytep offset_table; + png_uint_16 offset_table_number; + png_uint_16 offset_table_count; + png_uint_16 offset_table_count_free; +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) + png_bytep palette_lookup; /* lookup table for dithering */ + png_bytep dither_index; /* index translation for palette files */ +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED) + png_uint_16p hist; /* histogram */ +#endif + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + png_byte heuristic_method; /* heuristic for row filter selection */ + png_byte num_prev_filters; /* number of weights for previous rows */ + png_bytep prev_filters; /* filter type(s) of previous row(s) */ + png_uint_16p filter_weights; /* weight(s) for previous line(s) */ + png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ + png_uint_16p filter_costs; /* relative filter calculation cost */ + png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ +#endif + +#if defined(PNG_TIME_RFC1123_SUPPORTED) + png_charp time_buffer; /* String to hold RFC 1123 time text */ +#endif + +/* New members added in libpng-1.0.6 */ + +#ifdef PNG_FREE_ME_SUPPORTED + png_uint_32 free_me; /* flags items libpng is responsible for freeing */ +#endif + +#if defined(PNG_USER_CHUNKS_SUPPORTED) + png_voidp user_chunk_ptr; + png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ +#endif + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) + int num_chunk_list; + png_bytep chunk_list; +#endif + +/* New members added in libpng-1.0.3 */ +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + png_byte rgb_to_gray_status; + /* These were changed from png_byte in libpng-1.0.6 */ + png_uint_16 rgb_to_gray_red_coeff; + png_uint_16 rgb_to_gray_green_coeff; + png_uint_16 rgb_to_gray_blue_coeff; +#endif + +/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) || \ + defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +/* changed from png_byte to png_uint_32 at version 1.2.0 */ +#ifdef PNG_1_0_X + png_byte mng_features_permitted; +#else + png_uint_32 mng_features_permitted; +#endif /* PNG_1_0_X */ +#endif + +/* New member added in libpng-1.0.7 */ +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + png_fixed_point int_gamma; +#endif + +/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) + png_byte filter_type; +#endif + +#if defined(PNG_1_0_X) || (defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD)) +/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ + png_uint_32 row_buf_size; +#endif + +/* New members added in libpng-1.2.0 */ +#if !defined(PNG_1_0_X) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) + png_byte mmx_bitdepth_threshold; + png_uint_32 mmx_rowbytes_threshold; + png_uint_32 asm_flags; +#endif + +/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ +#ifdef PNG_USER_MEM_SUPPORTED + png_voidp mem_ptr; /* user supplied struct for mem functions */ + png_malloc_ptr malloc_fn; /* function for allocating memory */ + png_free_ptr free_fn; /* function for freeing memory */ +#endif + +/* New member added in libpng-1.0.13 and 1.2.0 */ + png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ + +#if defined(PNG_READ_DITHER_SUPPORTED) +/* The following three members were added at version 1.0.14 and 1.2.4 */ + png_bytep dither_sort; /* working sort array */ + png_bytep index_to_palette; /* where the original index currently is */ + /* in the palette */ + png_bytep palette_to_index; /* which original index points to this */ + /* palette color */ +#endif + +/* New members added in libpng-1.0.16 and 1.2.6 */ + png_byte compression_type; + +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + png_uint_32 user_width_max; + png_uint_32 user_height_max; +#endif + +}; + + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef png_structp version_1_2_8; + +typedef png_struct FAR * FAR * png_structpp; + +/* Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng.txt for the + * full explanation, see example.c for the summary. This just provides + * a simple one line description of the use of each function. + */ + +/* Returns the version number of the library */ +extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); + +/* Tell lib we have already handled the first magic bytes. + * Handling more than 8 bytes from the beginning of the file is an error. + */ +extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, + int num_bytes)); + +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG + * signature, and non-zero otherwise. Having num_to_check == 0 or + * start > 7 will always fail (ie return non-zero). + */ +extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, + png_size_t num_to_check)); + +/* Simple signature checking function. This is the same as calling + * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). + */ +extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); + +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ +extern PNG_EXPORT(png_structp,png_create_read_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)); + +/* Allocate and initialize png_ptr struct for writing, and any other memory */ +extern PNG_EXPORT(png_structp,png_create_write_struct) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn)); + +#ifdef PNG_WRITE_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) + PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_WRITE_SUPPORTED +extern PNG_EXPORT(void,png_set_compression_buffer_size) + PNGARG((png_structp png_ptr, png_uint_32 size)); +#endif + +/* Reset the compression stream */ +extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); + +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ +#ifdef PNG_USER_MEM_SUPPORTED +extern PNG_EXPORT(png_structp,png_create_read_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +extern PNG_EXPORT(png_structp,png_create_write_struct_2) + PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +#endif + +/* Write a PNG chunk - size, type, (optional) data, CRC. */ +extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_bytep data, png_size_t length)); + +/* Write the start of a PNG chunk - length and chunk name. */ +extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, + png_bytep chunk_name, png_uint_32 length)); + +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ +extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ +extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); + +/* Allocate and initialize the info structure */ +extern PNG_EXPORT(png_infop,png_create_info_struct) + PNGARG((png_structp png_ptr)); + +/* Initialize the info structure (old interface - DEPRECATED) */ +extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); +#undef png_info_init +#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\ + png_sizeof(png_info)); +extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, + png_size_t png_info_struct_size)); + +/* Writes all the PNG information before the image. */ +extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read the information before the actual image data. */ +extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +#if defined(PNG_TIME_RFC1123_SUPPORTED) +extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) + PNGARG((png_structp png_ptr, png_timep ptime)); +#endif + +#if !defined(_WIN32_WCE) +/* "time.h" functions are not supported on WindowsCE */ +#if defined(PNG_WRITE_tIME_SUPPORTED) +/* convert from a struct tm to png_time */ +extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, + struct tm FAR * ttime)); + +/* convert from time_t to png_time. Uses gmtime() */ +extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, + time_t ttime)); +#endif /* PNG_WRITE_tIME_SUPPORTED */ +#endif /* _WIN32_WCE */ + +#if defined(PNG_READ_EXPAND_SUPPORTED) +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ +extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* Use blue, green, red order for pixels. */ +extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +/* Expand the grayscale to 24-bit RGB if necessary. */ +extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +/* Reduce RGB to grayscale. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, + int error_action, double red, double green )); +#endif +extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green )); +extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp + png_ptr)); +#endif + +extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, + png_colorp palette)); + +#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) +extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ +extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +/* The values of the PNG_FILLER_ defines should NOT be changed */ +#define PNG_FILLER_BEFORE 0 +#define PNG_FILLER_AFTER 1 +/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ +#if !defined(PNG_1_0_X) +extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, + png_uint_32 filler, int flags)); +#endif +#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* Swap bytes in 16-bit depth files. */ +extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ +extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* Swap packing order of pixels in bytes. */ +extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Converts files to legal bit depths. */ +extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, + png_color_8p true_bits)); +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Have the code handle the interlacing. Returns the number of passes. */ +extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +/* Invert monochrome files */ +extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) +/* Handle alpha and tRNS by replacing with a background color. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, + png_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)); +#endif +#define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +#define PNG_BACKGROUND_GAMMA_SCREEN 1 +#define PNG_BACKGROUND_GAMMA_FILE 2 +#define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) +/* strip the second byte of information from a 16-bit depth file. */ +extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) +/* Turn on dithering, and reduce the palette to the number of colors available. */ +extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, + png_colorp palette, int num_palette, int maximum_colors, + png_uint_16p histogram, int full_dither)); +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) +/* Handle gamma correction. Screen_gamma=(display_exponent) */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, + double screen_gamma, double default_file_gamma)); +#endif +#endif + +#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ +/* Deprecated and will be removed. Use png_permit_mng_features() instead. */ +extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, + int empty_plte_permitted)); +#endif + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +/* Set how many lines between output flushes - 0 for no flushing */ +extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); +/* Flush the current PNG output buffer */ +extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); +#endif + +/* optional update palette with requested transformations */ +extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); + +/* optional call to update the users info structure */ +extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read one or more rows of image data. */ +extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); +#endif + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read a row of data. */ +extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, + png_bytep row, + png_bytep display_row)); +#endif + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read the whole image into memory at once. */ +extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, + png_bytepp image)); +#endif + +/* write a row of image data */ +extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, + png_bytep row)); + +/* write a few rows of image data */ +extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, + png_bytepp row, png_uint_32 num_rows)); + +/* write the image data */ +extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, + png_bytepp image)); + +/* writes the end of the PNG file. */ +extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* read the end of the PNG file. */ +extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +/* free any memory associated with the png_info_struct */ +extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, + png_infopp info_ptr_ptr)); + +/* free any memory associated with the png_struct and the png_info_structs */ +extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp + png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); + +/* free all memory used by the read (old method - NOT DLL EXPORTED) */ +extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, + png_infop end_info_ptr)); + +/* free any memory associated with the png_struct and the png_info_structs */ +extern PNG_EXPORT(void,png_destroy_write_struct) + PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); + +/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ +extern void png_write_destroy PNGARG((png_structp png_ptr)); + +/* set the libpng method of handling chunk CRC errors */ +extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, + int crit_action, int ancil_action)); + +/* Values for png_set_crc_action() to say how to handle CRC errors in + * ancillary and critical chunks, and whether to use the data contained + * therein. Note that it is impossible to "discard" data in a critical + * chunk. For versions prior to 0.90, the action was always error/quit, + * whereas in version 0.90 and later, the action for CRC errors in ancillary + * chunks is warn/discard. These values should NOT be changed. + * + * value action:critical action:ancillary + */ +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ + +/* These functions give the user control over the scan-line filtering in + * libpng and the compression methods used by zlib. These functions are + * mainly useful for testing, as the defaults should work with most users. + * Those users who are tight on memory or want faster performance at the + * expense of compression can modify them. See the compression library + * header file (zlib.h) for an explination of the compression functions. + */ + +/* set the filtering method(s) used by libpng. Currently, the only valid + * value for "method" is 0. + */ +extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, + int filters)); + +/* Flags for png_set_filter() to say which filters to use. The flags + * are chosen so that they don't conflict with real filter types + * below, in case they are supplied instead of the #defined constants. + * These values should NOT be changed. + */ +#define PNG_NO_FILTERS 0x00 +#define PNG_FILTER_NONE 0x08 +#define PNG_FILTER_SUB 0x10 +#define PNG_FILTER_UP 0x20 +#define PNG_FILTER_AVG 0x40 +#define PNG_FILTER_PAETH 0x80 +#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ + PNG_FILTER_AVG | PNG_FILTER_PAETH) + +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. + * These defines should NOT be changed. + */ +#define PNG_FILTER_VALUE_NONE 0 +#define PNG_FILTER_VALUE_SUB 1 +#define PNG_FILTER_VALUE_UP 2 +#define PNG_FILTER_VALUE_AVG 3 +#define PNG_FILTER_VALUE_PAETH 4 +#define PNG_FILTER_VALUE_LAST 5 + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ +/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ + * defines, either the default (minimum-sum-of-absolute-differences), or + * the experimental method (weighted-minimum-sum-of-absolute-differences). + * + * Weights are factors >= 1.0, indicating how important it is to keep the + * filter type consistent between rows. Larger numbers mean the current + * filter is that many times as likely to be the same as the "num_weights" + * previous filters. This is cumulative for each previous row with a weight. + * There needs to be "num_weights" values in "filter_weights", or it can be + * NULL if the weights aren't being specified. Weights have no influence on + * the selection of the first row filter. Well chosen weights can (in theory) + * improve the compression for a given image. + * + * Costs are factors >= 1.0 indicating the relative decoding costs of a + * filter type. Higher costs indicate more decoding expense, and are + * therefore less likely to be selected over a filter with lower computational + * costs. There needs to be a value in "filter_costs" for each valid filter + * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't + * setting the costs. Costs try to improve the speed of decompression without + * unduly increasing the compressed image size. + * + * A negative weight or cost indicates the default value is to be used, and + * values in the range [0.0, 1.0) indicate the value is to remain unchanged. + * The default values for both weights and costs are currently 1.0, but may + * change if good general weighting/cost heuristics can be found. If both + * the weights and costs are set to 1.0, this degenerates the WEIGHTED method + * to the UNWEIGHTED method, but with added encoding time/computation. + */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, + int heuristic_method, int num_weights, png_doublep filter_weights, + png_doublep filter_costs)); +#endif +#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ + +/* Heuristic used for row filter selection. These defines should NOT be + * changed. + */ +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ + +/* Set the library compression level. Currently, valid values range from + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 + * (0 - no compression, 9 - "maximal" compression). Note that tests have + * shown that zlib compression levels 3-6 usually perform as well as level 9 + * for PNG images, and do considerably fewer caclulations. In the future, + * these values may not correspond directly to the zlib compression levels. + */ +extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, + int level)); + +extern PNG_EXPORT(void,png_set_compression_mem_level) + PNGARG((png_structp png_ptr, int mem_level)); + +extern PNG_EXPORT(void,png_set_compression_strategy) + PNGARG((png_structp png_ptr, int strategy)); + +extern PNG_EXPORT(void,png_set_compression_window_bits) + PNGARG((png_structp png_ptr, int window_bits)); + +extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, + int method)); + +/* These next functions are called for input/output, memory, and error + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, + * and call standard C I/O routines such as fread(), fwrite(), and + * fprintf(). These functions can be made to use other I/O routines + * at run time for those applications that need to handle I/O in a + * different manner by calling png_set_???_fn(). See libpng.txt for + * more information. + */ + +#if !defined(PNG_NO_STDIO) +/* Initialize the input/output for the PNG file to the default functions. */ +extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)); +#endif + +/* Replace the (error and abort), and warning functions with user + * supplied functions. If no messages are to be printed you must still + * write and use replacement functions. The replacement error_fn should + * still do a longjmp to the last setjmp location if you are using this + * method of error handling. If error_fn or warning_fn is NULL, the + * default function will be used. + */ + +extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); + +/* Return the user pointer associated with the error functions */ +extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); + +/* Replace the default data output functions with a user supplied one(s). + * If buffered output is not used, then output_flush_fn can be set to NULL. + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time + * output_flush_fn will be ignored (and thus can be NULL). + */ +extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); + +/* Replace the default data input function with a user supplied one. */ +extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, + png_voidp io_ptr, png_rw_ptr read_data_fn)); + +/* Return the user pointer associated with the I/O functions */ +extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); + +extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, + png_read_status_ptr read_row_fn)); + +extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, + png_write_status_ptr write_row_fn)); + +#ifdef PNG_USER_MEM_SUPPORTED +/* Replace the default memory allocation functions with user supplied one(s). */ +extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +/* Return the user pointer associated with the memory functions */ +extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr read_user_transform_fn)); +#endif + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp + png_ptr, png_user_transform_ptr write_user_transform_fn)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp + png_ptr, png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); +/* Return the user pointer associated with the user transform functions */ +extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) + PNGARG((png_structp png_ptr)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp + png_ptr)); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +/* Sets the function callbacks for the push reader, and a pointer to a + * user-defined structure available to the callback functions. + */ +extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, + png_voidp progressive_ptr, + png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, + png_progressive_end_ptr end_fn)); + +/* returns the user pointer associated with the push read functions */ +extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) + PNGARG((png_structp png_ptr)); + +/* function to be called when data becomes available */ +extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); + +/* function that combines rows. Not very much different than the + * png_combine_row() call. Is this even used????? + */ +extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, + png_bytep old_row, png_bytep new_row)); +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, + png_uint_32 size)); + +#if defined(PNG_1_0_X) +# define png_malloc_warn png_malloc +#else +/* Added at libpng version 1.2.4 */ +extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, + png_uint_32 size)); +#endif + +/* frees a pointer allocated by png_malloc() */ +extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); + +#if defined(PNG_1_0_X) +/* Function to allocate memory for zlib. */ +extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, + uInt size)); + +/* Function to free memory for zlib */ +extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); +#endif + +/* Free data that was allocated internally */ +extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 free_me, int num)); +#ifdef PNG_FREE_ME_SUPPORTED +/* Reassign responsibility for freeing existing data, whether allocated + * by libpng or by the application */ +extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, + png_infop info_ptr, int freer, png_uint_32 mask)); +#endif +/* assignments for png_data_freer */ +#define PNG_DESTROY_WILL_FREE_DATA 1 +#define PNG_SET_WILL_FREE_DATA 1 +#define PNG_USER_WILL_FREE_DATA 2 +/* Flags for png_ptr->free_me and info_ptr->free_me */ +#define PNG_FREE_HIST 0x0008 +#define PNG_FREE_ICCP 0x0010 +#define PNG_FREE_SPLT 0x0020 +#define PNG_FREE_ROWS 0x0040 +#define PNG_FREE_PCAL 0x0080 +#define PNG_FREE_SCAL 0x0100 +#define PNG_FREE_UNKN 0x0200 +#define PNG_FREE_LIST 0x0400 +#define PNG_FREE_PLTE 0x1000 +#define PNG_FREE_TRNS 0x2000 +#define PNG_FREE_TEXT 0x4000 +#define PNG_FREE_ALL 0x7fff +#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ + +#ifdef PNG_USER_MEM_SUPPORTED +extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, + png_uint_32 size)); +extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, + png_voidp ptr)); +#endif + +extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, + png_voidp s1, png_voidp s2, png_uint_32 size)); + +extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, + png_voidp s1, int value, png_uint_32 size)); + +#if defined(USE_FAR_KEYWORD) /* memory model conversion function */ +extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, + int check)); +#endif /* USE_FAR_KEYWORD */ + +/* Fatal error in PNG image of libpng - can't continue */ +extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)); + +/* The same, but the chunk name is prepended to the error string. */ +extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, + png_const_charp error_message)); + +/* Non-fatal error in libpng. Can continue, but may have a problem. */ +extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* Non-fatal error in libpng, chunk name is prepended to message. */ +extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* The png_set_ functions are for storing values in the png_info_struct. + * Similarly, the png_get_ calls are used to read values from the + * png_info_struct, either storing the parameters in the passed variables, or + * setting pointers into the png_info_struct where the data is stored. The + * png_get_ functions return a non-zero value if the data was available + * in info_ptr, or return zero and do not change any of the parameters if the + * data was not available. + * + * These functions should be used instead of directly accessing png_info + * to avoid problems with future changes in the size and internal layout of + * png_info_struct. + */ +/* Returns "flag" if chunk data is valid in info_ptr. */ +extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, +png_infop info_ptr, png_uint_32 flag)); + +/* Returns number of bytes needed to hold a transformed row. */ +extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +/* Returns row_pointers, which is an array of pointers to scanlines that was +returned from png_read_png(). */ +extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, +png_infop info_ptr)); +/* Set row_pointers, which is an array of pointers to scanlines for use +by png_write_png(). */ +extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytepp row_pointers)); +#endif + +/* Returns number of color channels in image. */ +extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* Returns image width in pixels. */ +extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image height in pixels. */ +extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image bit_depth. */ +extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image color_type. */ +extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image filter_type. */ +extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image interlace_type. */ +extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image compression_type. */ +extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ +extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +#endif + +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ +extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); +extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp +png_ptr, png_infop info_ptr)); + +#endif /* PNG_EASY_ACCESS_SUPPORTED */ + +/* Returns pointer to signature string read from PNG header */ +extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, +png_infop info_ptr)); + +#if defined(PNG_bKGD_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p *background)); +#endif + +#if defined(PNG_bKGD_SUPPORTED) +extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_16p background)); +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point + *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point + *int_blue_x, png_fixed_point *int_blue_y)); +#endif +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, double white_x, double white_y, double red_x, + double red_y, double green_x, double green_y, double blue_x, double blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif +#endif + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double *file_gamma)); +#endif +extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point *int_file_gamma)); +#endif + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, + png_infop info_ptr, double file_gamma)); +#endif +extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); +#endif + +#if defined(PNG_hIST_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p *hist)); +#endif + +#if defined(PNG_hIST_SUPPORTED) +extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_16p hist)); +#endif + +extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, + int *bit_depth, int *color_type, int *interlace_method, + int *compression_method, int *filter_method)); + +extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_method, int compression_method, + int filter_method)); + +#if defined(PNG_oFFs_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, + int *unit_type)); +#endif + +#if defined(PNG_oFFs_SUPPORTED) +extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, + int unit_type)); +#endif + +#if defined(PNG_pCAL_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, + int *type, int *nparams, png_charp *units, png_charpp *params)); +#endif + +#if defined(PNG_pCAL_SUPPORTED) +extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, + int type, int nparams, png_charp units, png_charpp params)); +#endif + +#if defined(PNG_pHYs_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); +#endif + +#if defined(PNG_pHYs_SUPPORTED) +extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#endif + +extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp *palette, int *num_palette)); + +extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_colorp palette, int num_palette)); + +#if defined(PNG_sBIT_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p *sig_bit)); +#endif + +#if defined(PNG_sBIT_SUPPORTED) +extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_color_8p sig_bit)); +#endif + +#if defined(PNG_sRGB_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *intent)); +#endif + +#if defined(PNG_sRGB_SUPPORTED) +extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, + png_infop info_ptr, int intent)); +#endif + +#if defined(PNG_iCCP_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charpp name, int *compression_type, + png_charpp profile, png_uint_32 *proflen)); + /* Note to maintainer: profile should be png_bytepp */ +#endif + +#if defined(PNG_iCCP_SUPPORTED) +extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_charp name, int compression_type, + png_charp profile, png_uint_32 proflen)); + /* Note to maintainer: profile should be png_bytep */ +#endif + +#if defined(PNG_sPLT_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tpp entries)); +#endif + +#if defined(PNG_sPLT_SUPPORTED) +extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_sPLT_tp entries, int nentries)); +#endif + +#if defined(PNG_TEXT_SUPPORTED) +/* png_get_text also returns the number of text chunks in *num_text */ +extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp *text_ptr, int *num_text)); +#endif + +/* + * Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. + */ + +#if defined(PNG_TEXT_SUPPORTED) +extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp text_ptr, int num_text)); +#endif + +#if defined(PNG_tIME_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep *mod_time)); +#endif + +#if defined(PNG_tIME_SUPPORTED) +extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_timep mod_time)); +#endif + +#if defined(PNG_tRNS_SUPPORTED) +extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep *trans, int *num_trans, + png_color_16p *trans_values)); +#endif + +#if defined(PNG_tRNS_SUPPORTED) +extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_bytep trans, int num_trans, + png_color_16p trans_values)); +#endif + +#if defined(PNG_tRNS_SUPPORTED) +#endif + +#if defined(PNG_sCAL_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, double *width, double *height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); +#endif +#endif +#endif /* PNG_sCAL_SUPPORTED */ + +#if defined(PNG_sCAL_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, double width, double height)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, + png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); +#endif +#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +/* provide a list of chunks and how they are to be handled, if the built-in + handling or default unknown chunk handling is not desired. Any chunks not + listed will be handled in the default manner. The IHDR and IEND chunks + must not be listed. + keep = 0: follow default behavour + = 1: do not keep + = 2: keep only if safe-to-copy + = 3: keep even if unsafe-to-copy +*/ +extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp + png_ptr, int keep, png_bytep chunk_list, int num_chunks)); +extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, + png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); +extern PNG_EXPORT(void, png_set_unknown_chunk_location) + PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); +extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp + png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); +#endif +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep + chunk_name)); +#endif + +/* Png_free_data() will turn off the "valid" flag for anything it frees. + If you need to turn it off for a chunk that your application has freed, + you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ +extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, + png_infop info_ptr, int mask)); + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +/* The "params" pointer is currently not used and is for future expansion. */ +extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, + png_infop info_ptr, + int transforms, + png_voidp params)); +#endif + +/* Define PNG_DEBUG at compile time for debugging information. Higher + * numbers for PNG_DEBUG mean more debugging information. This has + * only been added since version 0.95 so it is not implemented throughout + * libpng yet, but more support will be added as needed. + */ +#ifdef PNG_DEBUG +#if (PNG_DEBUG > 0) +#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) +#include +#if (PNG_DEBUG > 1) +#define png_debug(l,m) _RPT0(_CRT_WARN,m) +#define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1) +#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2) +#endif +#else /* PNG_DEBUG_FILE || !_MSC_VER */ +#ifndef PNG_DEBUG_FILE +#define PNG_DEBUG_FILE stderr +#endif /* PNG_DEBUG_FILE */ +#if (PNG_DEBUG > 1) +#define png_debug(l,m) \ +{ \ + int num_tabs=l; \ + fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ +} +#define png_debug1(l,m,p1) \ +{ \ + int num_tabs=l; \ + fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ +} +#define png_debug2(l,m,p1,p2) \ +{ \ + int num_tabs=l; \ + fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ + (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ +} +#endif /* (PNG_DEBUG > 1) */ +#endif /* _MSC_VER */ +#endif /* (PNG_DEBUG > 0) */ +#endif /* PNG_DEBUG */ +#ifndef png_debug +#define png_debug(l, m) +#endif +#ifndef png_debug1 +#define png_debug1(l, m, p1) +#endif +#ifndef png_debug2 +#define png_debug2(l, m, p1, p2) +#endif + +extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((void)); + +extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr)); +extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); + +#ifdef PNG_MNG_FEATURES_SUPPORTED +extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp + png_ptr, png_uint_32 mng_features_permitted)); +#endif + +/* For use in png_set_keep_unknown, added to version 1.2.6 */ +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 +#define PNG_HANDLE_CHUNK_NEVER 1 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 +#define PNG_HANDLE_CHUNK_ALWAYS 3 + +/* Added to version 1.2.0 */ +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) +#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ +#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ +#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 +#define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 +#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 +#define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 +#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 +#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 +#define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ + +#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ + | PNG_ASM_FLAG_MMX_READ_INTERLACE \ + | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ + | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ + | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ + | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) +#define PNG_MMX_WRITE_FLAGS ( 0 ) + +#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ + | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ + | PNG_MMX_READ_FLAGS \ + | PNG_MMX_WRITE_FLAGS ) + +#define PNG_SELECT_READ 1 +#define PNG_SELECT_WRITE 2 + +#if !defined(PNG_1_0_X) +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) + PNGARG((int flag_select, int *compilerID)); + +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) + PNGARG((int flag_select)); + +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_asm_flags) + PNGARG((png_structp png_ptr)); + +/* pngget.c */ +extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) + PNGARG((png_structp png_ptr)); + +/* pngget.c */ +extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) + PNGARG((png_structp png_ptr)); + +/* pngset.c */ +extern PNG_EXPORT(void,png_set_asm_flags) + PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); + +/* pngset.c */ +extern PNG_EXPORT(void,png_set_mmx_thresholds) + PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, + png_uint_32 mmx_rowbytes_threshold)); + +#endif /* PNG_1_0_X */ +#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ + +#if !defined(PNG_1_0_X) +/* png.c, pnggccrd.c, or pngvcrd.c */ +extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); + +/* Strip the prepended error numbers ("#nnn ") from error and warning + * messages before passing them to the error or warning handler. */ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp + png_ptr, png_uint_32 strip_mode)); +#endif + +#endif /* PNG_1_0_X */ + +/* Added at libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp + png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); +extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp + png_ptr)); +extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp + png_ptr)); +#endif + +/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ + +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED +/* With these routines we avoid an integer divide, which will be slower on + * most machines. However, it does take more operations than the corresponding + * divide method, so it may be slower on a few RISC systems. There are two + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. + * + * Note that the rounding factors are NOT supposed to be the same! 128 and + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the + * standard method. + * + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] + */ + + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + +# define png_composite(composite, fg, alpha, bg) \ + { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 - \ + (png_uint_16)(alpha)) + (png_uint_16)128); \ + (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } + +# define png_composite_16(composite, fg, alpha, bg) \ + { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(png_uint_32)(65535L - \ + (png_uint_32)(alpha)) + (png_uint_32)32768L); \ + (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } + +#else /* standard method using integer division */ + +# define png_composite(composite, fg, alpha, bg) \ + (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + (png_uint_16)127) / 255) + +# define png_composite_16(composite, fg, alpha, bg) \ + (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ + (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ + (png_uint_32)32767) / (png_uint_32)65535L) + +#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ + +/* These next functions are used internally in the code. They generally + * shouldn't be used unless you are writing code to add or replace some + * functionality in libpng. More information about most functions can + * be found in the files where the functions are located. + */ + +#if defined(PNG_INTERNAL) + +/* Various modes of operation. Note that after an init, mode is set to + * zero automatically when the structure is created. + */ +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_HAVE_IDAT 0x04 +#define PNG_AFTER_IDAT 0x08 +#define PNG_HAVE_IEND 0x10 +#define PNG_HAVE_gAMA 0x20 +#define PNG_HAVE_cHRM 0x40 +#define PNG_HAVE_sRGB 0x80 +#define PNG_HAVE_CHUNK_HEADER 0x100 +#define PNG_WROTE_tIME 0x200 +#define PNG_WROTE_INFO_BEFORE_PLTE 0x400 +#define PNG_BACKGROUND_IS_GRAY 0x800 +#define PNG_HAVE_PNG_SIGNATURE 0x1000 + +/* flags for the transformations the PNG library does on the image data */ +#define PNG_BGR 0x0001 +#define PNG_INTERLACE 0x0002 +#define PNG_PACK 0x0004 +#define PNG_SHIFT 0x0008 +#define PNG_SWAP_BYTES 0x0010 +#define PNG_INVERT_MONO 0x0020 +#define PNG_DITHER 0x0040 +#define PNG_BACKGROUND 0x0080 +#define PNG_BACKGROUND_EXPAND 0x0100 + /* 0x0200 unused */ +#define PNG_16_TO_8 0x0400 +#define PNG_RGBA 0x0800 +#define PNG_EXPAND 0x1000 +#define PNG_GAMMA 0x2000 +#define PNG_GRAY_TO_RGB 0x4000 +#define PNG_FILLER 0x8000L +#define PNG_PACKSWAP 0x10000L +#define PNG_SWAP_ALPHA 0x20000L +#define PNG_STRIP_ALPHA 0x40000L +#define PNG_INVERT_ALPHA 0x80000L +#define PNG_USER_TRANSFORM 0x100000L +#define PNG_RGB_TO_GRAY_ERR 0x200000L +#define PNG_RGB_TO_GRAY_WARN 0x400000L +#define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ + /* 0x800000L Unused */ +#define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ + /* 0x2000000L unused */ + /* 0x4000000L unused */ + /* 0x8000000L unused */ + /* 0x10000000L unused */ + /* 0x20000000L unused */ + /* 0x40000000L unused */ + +/* flags for png_create_struct */ +#define PNG_STRUCT_PNG 0x0001 +#define PNG_STRUCT_INFO 0x0002 + +/* Scaling factor for filter heuristic weighting calculations */ +#define PNG_WEIGHT_SHIFT 8 +#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) +#define PNG_COST_SHIFT 3 +#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) + +/* flags for the png_ptr->flags rather than declaring a byte for each one */ +#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 +#define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 +#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 +#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 +#define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 +#define PNG_FLAG_ZLIB_FINISHED 0x0020 +#define PNG_FLAG_ROW_INIT 0x0040 +#define PNG_FLAG_FILLER_AFTER 0x0080 +#define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 +#define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 +#define PNG_FLAG_CRC_CRITICAL_USE 0x0400 +#define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 +#define PNG_FLAG_FREE_PLTE 0x1000 +#define PNG_FLAG_FREE_TRNS 0x2000 +#define PNG_FLAG_FREE_HIST 0x4000 +#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L +#define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L +#define PNG_FLAG_LIBRARY_MISMATCH 0x20000L +#define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L +#define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L +#define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L +#define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */ +#define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */ + /* 0x800000L unused */ + /* 0x1000000L unused */ + /* 0x2000000L unused */ + /* 0x4000000L unused */ + /* 0x8000000L unused */ + /* 0x10000000L unused */ + /* 0x20000000L unused */ + /* 0x40000000L unused */ + +#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ + PNG_FLAG_CRC_ANCILLARY_NOWARN) + +#define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ + PNG_FLAG_CRC_CRITICAL_IGNORE) + +#define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ + PNG_FLAG_CRC_CRITICAL_MASK) + +/* save typing and make code easier to understand */ + +#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ + abs((int)((c1).green) - (int)((c2).green)) + \ + abs((int)((c1).blue) - (int)((c2).blue))) + +/* Added to libpng-1.2.6 JB */ +#define PNG_ROWBYTES(pixel_bits, width) \ + ((pixel_bits) >= 8 ? \ + ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \ + (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) ) + +/* PNG_OUT_OF_RANGE returns true if value is outside the range + ideal-delta..ideal+delta. Each argument is evaluated twice. + "ideal" and "delta" should be constants, normally simple + integers, "value" a variable. Added to libpng-1.2.6 JB */ +#define PNG_OUT_OF_RANGE(value, ideal, delta) \ + ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) + +/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ +#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) +/* place to hold the signature string for a PNG file. */ +#ifdef PNG_USE_GLOBAL_ARRAYS + PNG_EXPORT_VAR (const png_byte FARDATA) png_sig[8]; +#else +#define png_sig png_sig_bytes(NULL) +#endif +#endif /* PNG_NO_EXTERN */ + +/* Constant strings for known chunk types. If you need to add a chunk, + * define the name here, and add an invocation of the macro in png.c and + * wherever it's needed. + */ +#define PNG_IHDR const png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} +#define PNG_IDAT const png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} +#define PNG_IEND const png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} +#define PNG_PLTE const png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} +#define PNG_bKGD const png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} +#define PNG_cHRM const png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} +#define PNG_gAMA const png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} +#define PNG_hIST const png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} +#define PNG_iCCP const png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} +#define PNG_iTXt const png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} +#define PNG_oFFs const png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} +#define PNG_pCAL const png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} +#define PNG_sCAL const png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} +#define PNG_pHYs const png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} +#define PNG_sBIT const png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} +#define PNG_sPLT const png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} +#define PNG_sRGB const png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} +#define PNG_tEXt const png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} +#define PNG_tIME const png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} +#define PNG_tRNS const png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} +#define PNG_zTXt const png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} + +#ifdef PNG_USE_GLOBAL_ARRAYS +PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_IDAT[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_IEND[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_PLTE[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_bKGD[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_cHRM[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_gAMA[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_hIST[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_iCCP[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_iTXt[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_oFFs[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_pCAL[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_sCAL[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_pHYs[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_sBIT[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_sPLT[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_sRGB[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_tEXt[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5]; +PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5]; +#endif /* PNG_USE_GLOBAL_ARRAYS */ + + +/* Inline macros to do direct reads of bytes from the input buffer. These + * require that you are using an architecture that uses PNG byte ordering + * (MSB first) and supports unaligned data storage. I think that PowerPC + * in big-endian mode and 680x0 are the only ones that will support this. + * The x86 line of processors definitely do not. The png_get_int_32() + * routine also assumes we are using two's complement format for negative + * values, which is almost certainly true. + */ +#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) +# if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) +# define png_get_int_32(buf) ( *((png_int_32p) (buf))) +# endif +# define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) +# define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) +#else +# if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) +PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf)); +# endif +PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf)); +PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf)); +#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ +PNG_EXTERN png_uint_32 png_get_uint_31 PNGARG((png_structp png_ptr, + png_bytep buf)); + +/* Initialize png_ptr struct for reading, and allocate any other memory. + * (old interface - DEPRECATED - use png_create_read_struct instead). + */ +extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); +#undef png_read_init +#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ + PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); +extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size)); +extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t + png_info_size)); + +/* Initialize png_ptr struct for writing, and allocate any other memory. + * (old interface - DEPRECATED - use png_create_write_struct instead). + */ +extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); +#undef png_write_init +#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ + PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); +extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size)); +extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, + png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t + png_info_size)); + +/* Allocate memory for an internal libpng struct */ +PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); + +/* Free memory from internal libpng struct */ +PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); + +PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr + malloc_fn, png_voidp mem_ptr)); +PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, + png_free_ptr free_fn, png_voidp mem_ptr)); + +/* Free any memory that info_ptr points to and reset struct. */ +PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +#ifndef PNG_1_0_X +/* Function to allocate memory for zlib. */ +PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); + +/* Function to free memory for zlib */ +PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); + +#ifdef PNG_SIZE_T +/* Function to convert a sizeof an item to png_sizeof item */ + PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); +#endif + +/* Next four functions are used internally as callbacks. PNGAPI is required + * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ + +PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t length)); +#endif + +PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, + png_bytep data, png_size_t length)); + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +#if !defined(PNG_NO_STDIO) +PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); +#endif +#endif +#else /* PNG_1_0_X */ +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t length)); +#endif +#endif /* PNG_1_0_X */ + +/* Reset the CRC variable */ +PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); + +/* Write the "data" buffer to whatever output you are using. */ +PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, + png_size_t length)); + +/* Read data from whatever input you are using into the "data" buffer */ +PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, + png_size_t length)); + +/* Read bytes into buf, and update png_ptr->crc */ +PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, + png_size_t length)); + +/* Decompress data in a chunk that uses compression */ +#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ + defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) +PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, + int comp_type, png_charp chunkdata, png_size_t chunklength, + png_size_t prefix_length, png_size_t *data_length)); +#endif + +/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ +PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); + +/* Read the CRC from the file and compare it to the libpng calculated CRC */ +PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); + +/* Calculate the CRC over a section of data. Note that we are only + * passing a maximum of 64K on systems that have this as a memory limit, + * since this is the maximum buffer size we can specify. + */ +PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, + png_size_t length)); + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); +#endif + + +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). + * The only currently known PNG chunks that use signed numbers are + * the ancillary extension chunks, oFFs and pCAL. + */ +PNG_EXTERN void png_save_uint_32 PNGARG((png_bytep buf, png_uint_32 i)); + +#if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED) +PNG_EXTERN void png_save_int_32 PNGARG((png_bytep buf, png_int_32 i)); +#endif + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +PNG_EXTERN void png_save_uint_16 PNGARG((png_bytep buf, unsigned int i)); + +/* simple function to write the signature */ +PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); + +/* write various chunks */ + +/* Write the IHDR chunk, and update the png_struct with the necessary + * information. + */ +PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, + png_uint_32 height, + int bit_depth, int color_type, int compression_method, int filter_method, + int interlace_method)); + +PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, + png_uint_32 num_pal)); + +PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, + png_size_t length)); + +PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); + +#if defined(PNG_WRITE_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point + file_gamma)); +#endif +#endif + +#if defined(PNG_WRITE_sBIT_SUPPORTED) +PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, + int color_type)); +#endif + +#if defined(PNG_WRITE_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, + double white_x, double white_y, + double red_x, double red_y, double green_x, double green_y, + double blue_x, double blue_y)); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, + png_fixed_point int_white_x, png_fixed_point int_white_y, + png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point + int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif +#endif + +#if defined(PNG_WRITE_sRGB_SUPPORTED) +PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, + int intent)); +#endif + +#if defined(PNG_WRITE_iCCP_SUPPORTED) +PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, + png_charp name, int compression_type, + png_charp profile, int proflen)); + /* Note to maintainer: profile should be png_bytep */ +#endif + +#if defined(PNG_WRITE_sPLT_SUPPORTED) +PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, + png_sPLT_tp palette)); +#endif + +#if defined(PNG_WRITE_tRNS_SUPPORTED) +PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, + png_color_16p values, int number, int color_type)); +#endif + +#if defined(PNG_WRITE_bKGD_SUPPORTED) +PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, + png_color_16p values, int color_type)); +#endif + +#if defined(PNG_WRITE_hIST_SUPPORTED) +PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, + int num_hist)); +#endif + +#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ + defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) +PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, + png_charp key, png_charpp new_key)); +#endif + +#if defined(PNG_WRITE_tEXt_SUPPORTED) +PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, + png_charp text, png_size_t text_len)); +#endif + +#if defined(PNG_WRITE_zTXt_SUPPORTED) +PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, + png_charp text, png_size_t text_len, int compression)); +#endif + +#if defined(PNG_WRITE_iTXt_SUPPORTED) +PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, + int compression, png_charp key, png_charp lang, png_charp lang_key, + png_charp text)); +#endif + +#if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ +PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, + png_infop info_ptr, png_textp text_ptr, int num_text)); +#endif + +#if defined(PNG_WRITE_oFFs_SUPPORTED) +PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, + png_int_32 x_offset, png_int_32 y_offset, int unit_type)); +#endif + +#if defined(PNG_WRITE_pCAL_SUPPORTED) +PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, + png_int_32 X0, png_int_32 X1, int type, int nparams, + png_charp units, png_charpp params)); +#endif + +#if defined(PNG_WRITE_pHYs_SUPPORTED) +PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, + png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, + int unit_type)); +#endif + +#if defined(PNG_WRITE_tIME_SUPPORTED) +PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, + png_timep mod_time)); +#endif + +#if defined(PNG_WRITE_sCAL_SUPPORTED) +#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) +PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, + int unit, double width, double height)); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, + int unit, png_charp width, png_charp height)); +#endif +#endif +#endif + +/* Called when finished processing a row of data */ +PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); + +/* Internal use only. Called before first row of data */ +PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); + +#if defined(PNG_READ_GAMMA_SUPPORTED) +PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); +#endif + +/* combine a row of data, dealing with alpha, etc. if requested */ +PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, + int mask)); + +#if defined(PNG_READ_INTERLACING_SUPPORTED) +/* expand an interlaced row */ +/* OLD pre-1.0.9 interface: +PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, + png_bytep row, int pass, png_uint_32 transformations)); + */ +PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); +#endif + +/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ + +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* grab pixels out of a row for an interlaced pass */ +PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, + png_bytep row, int pass)); +#endif + +/* unfilter a row */ +PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, + png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); + +/* Choose the best filter to use and filter the row data */ +PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, + png_row_infop row_info)); + +/* Write out the filtered row. */ +PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, + png_bytep filtered_row)); +/* finish a row while reading, dealing with interlacing passes, etc. */ +PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); + +/* initialize the row buffers, etc. */ +PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); +/* optional call to update the users info structure */ +PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, + png_infop info_ptr)); + +/* these are the functions that do the transformations */ +#if defined(PNG_READ_FILLER_SUPPORTED) +PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, + png_bytep row, png_uint_32 filler, png_uint_32 flags)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ + defined(PNG_READ_STRIP_ALPHA_SUPPORTED) +PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, + png_bytep row, png_uint_32 flags)); +#endif + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) +PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop + row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) +PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) +PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, + png_color_8p sig_bits)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) +PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) +PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, + png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); + +# if defined(PNG_CORRECT_PALETTE_SUPPORTED) +PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, + png_colorp palette, int num_palette)); +# endif +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); +#endif + +#if defined(PNG_WRITE_PACK_SUPPORTED) +PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, + png_bytep row, png_uint_32 bit_depth)); +#endif + +#if defined(PNG_WRITE_SHIFT_SUPPORTED) +PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, + png_color_8p bit_depth)); +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) +#if defined(PNG_READ_GAMMA_SUPPORTED) +PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, + png_color_16p trans_values, png_color_16p background, + png_color_16p background_1, + png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, + png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, + png_uint_16pp gamma_16_to_1, int gamma_shift)); +#else +PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, + png_color_16p trans_values, png_color_16p background)); +#endif +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) +PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, + png_bytep gamma_table, png_uint_16pp gamma_16_table, + int gamma_shift)); +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) +PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, + png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); +PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, + png_bytep row, png_color_16p trans_value)); +#endif + +/* The following decodes the appropriate chunks, and does error correction, + * then calls the appropriate callback for the chunk if it is valid. + */ + +/* decode the IHDR chunk */ +PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); + +#if defined(PNG_READ_bKGD_SUPPORTED) +PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_cHRM_SUPPORTED) +PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_gAMA_SUPPORTED) +PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_hIST_SUPPORTED) +PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_iCCP_SUPPORTED) +extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif /* PNG_READ_iCCP_SUPPORTED */ + +#if defined(PNG_READ_iTXt_SUPPORTED) +PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_oFFs_SUPPORTED) +PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_pCAL_SUPPORTED) +PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_pHYs_SUPPORTED) +PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_sBIT_SUPPORTED) +PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_sCAL_SUPPORTED) +PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_sPLT_SUPPORTED) +extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif /* PNG_READ_sPLT_SUPPORTED */ + +#if defined(PNG_READ_sRGB_SUPPORTED) +PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_tEXt_SUPPORTED) +PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_tIME_SUPPORTED) +PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_tRNS_SUPPORTED) +PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +#if defined(PNG_READ_zTXt_SUPPORTED) +PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, + png_uint_32 length)); +#endif + +PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); + +PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, + png_bytep chunk_name)); + +/* handle the transformations for reading and writing */ +PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); + +PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, + png_uint_32 length)); +PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t buffer_length)); +PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, + png_bytep buffer, png_size_t buffer_length)); +PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); +PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); +PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, + png_infop info_ptr)); +PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); +#if defined(PNG_READ_tEXt_SUPPORTED) +PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) +PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) +PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, + png_infop info_ptr, png_uint_32 length)); +PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, + png_infop info_ptr)); +#endif + +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + +#ifdef PNG_MNG_FEATURES_SUPPORTED +PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, + png_bytep row)); +PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, + png_bytep row)); +#endif + +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) +/* png.c */ /* PRIVATE */ +PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); +#endif +/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ + +#endif /* PNG_INTERNAL */ + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* do not put anything past this line */ +#endif /* PNG_H */ diff --git a/libpng/pngconf.h b/libpng/pngconf.h new file mode 100644 index 0000000..ba50838 --- /dev/null +++ b/libpng/pngconf.h @@ -0,0 +1,1437 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +/* Any machine specific code is near the front of this file, so if you + * are configuring libpng for a machine, you may want to read the section + * starting here down to where it starts to typedef png_color, png_text, + * and png_info. + */ + +#ifndef PNGCONF_H +#define PNGCONF_H + +#define PNG_1_2_X + +/* + * PNG_USER_CONFIG has to be defined on the compiler command line. This + * includes the resource compiler for Windows DLL configurations. + */ +#ifdef PNG_USER_CONFIG +#include "pngusr.h" +#endif + +/* + * Added at libpng-1.2.8 + * + * If you create a private DLL you need to define in "pngusr.h" the followings: + * #define PNG_USER_PRIVATEBUILD + * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." + * #define PNG_USER_DLLFNAME_POSTFIX + * e.g. // private DLL "libpng13gx.dll" + * #define PNG_USER_DLLFNAME_POSTFIX "gx" + * + * The following macros are also at your disposal if you want to complete the + * DLL VERSIONINFO structure. + * - PNG_USER_VERSIONINFO_COMMENTS + * - PNG_USER_VERSIONINFO_COMPANYNAME + * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS + */ + +#ifdef __STDC__ +#ifdef SPECIALBUILD +# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ + are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.") +#endif + +#ifdef PRIVATEBUILD +# pragma message("PRIVATEBUILD is deprecated. Use\ + PNG_USER_PRIVATEBUILD instead.") +# define PNG_USER_PRIVATEBUILD PRIVATEBUILD +#endif +#endif /* __STDC__ */ + +#ifndef PNG_VERSION_INFO_ONLY + +/* End of material added to libpng-1.2.8 */ + +/* This is the size of the compression buffer, and thus the size of + * an IDAT chunk. Make this whatever size you feel is best for your + * machine. One of these will be allocated per png_struct. When this + * is full, it writes the data to the disk, and does some other + * calculations. Making this an extremely small size will slow + * the library down, but you may want to experiment to determine + * where it becomes significant, if you are concerned with memory + * usage. Note that zlib allocates at least 32Kb also. For readers, + * this describes the size of the buffer available to read the data in. + * Unless this gets smaller than the size of a row (compressed), + * it should not make much difference how big this is. + */ + +#ifndef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 8192 +#endif + +/* Enable if you want a write-only libpng */ + +#ifndef PNG_NO_READ_SUPPORTED +# define PNG_READ_SUPPORTED +#endif + +/* Enable if you want a read-only libpng */ + +#ifndef PNG_NO_WRITE_SUPPORTED +# define PNG_WRITE_SUPPORTED +#endif + +/* Enabled by default in 1.2.0. You can disable this if you don't need to + support PNGs that are embedded in MNG datastreams */ +#if !defined(PNG_1_0_X) && !defined(PNG_NO_MNG_FEATURES) +# ifndef PNG_MNG_FEATURES_SUPPORTED +# define PNG_MNG_FEATURES_SUPPORTED +# endif +#endif + +#ifndef PNG_NO_FLOATING_POINT_SUPPORTED +# ifndef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FLOATING_POINT_SUPPORTED +# endif +#endif + +/* If you are running on a machine where you cannot allocate more + * than 64K of memory at once, uncomment this. While libpng will not + * normally need that much memory in a chunk (unless you load up a very + * large file), zlib needs to know how big of a chunk it can use, and + * libpng thus makes sure to check any memory allocation to verify it + * will fit into memory. +#define PNG_MAX_MALLOC_64K + */ +#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K) +# define PNG_MAX_MALLOC_64K +#endif + +/* Special munging to support doing things the 'cygwin' way: + * 'Normal' png-on-win32 defines/defaults: + * PNG_BUILD_DLL -- building dll + * PNG_USE_DLL -- building an application, linking to dll + * (no define) -- building static library, or building an + * application and linking to the static lib + * 'Cygwin' defines/defaults: + * PNG_BUILD_DLL -- (ignored) building the dll + * (no define) -- (ignored) building an application, linking to the dll + * PNG_STATIC -- (ignored) building the static lib, or building an + * application that links to the static lib. + * ALL_STATIC -- (ignored) building various static libs, or building an + * application that links to the static libs. + * Thus, + * a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and + * this bit of #ifdefs will define the 'correct' config variables based on + * that. If a cygwin user *wants* to define 'PNG_USE_DLL' that's okay, but + * unnecessary. + * + * Also, the precedence order is: + * ALL_STATIC (since we can't #undef something outside our namespace) + * PNG_BUILD_DLL + * PNG_STATIC + * (nothing) == PNG_USE_DLL + * + * CYGWIN (2002-01-20): The preceding is now obsolete. With the advent + * of auto-import in binutils, we no longer need to worry about + * __declspec(dllexport) / __declspec(dllimport) and friends. Therefore, + * we don't need to worry about PNG_STATIC or ALL_STATIC when it comes + * to __declspec() stuff. However, we DO need to worry about + * PNG_BUILD_DLL and PNG_STATIC because those change some defaults + * such as CONSOLE_IO and whether GLOBAL_ARRAYS are allowed. + */ +#if defined(__CYGWIN__) +# if defined(ALL_STATIC) +# if defined(PNG_BUILD_DLL) +# undef PNG_BUILD_DLL +# endif +# if defined(PNG_USE_DLL) +# undef PNG_USE_DLL +# endif +# if defined(PNG_DLL) +# undef PNG_DLL +# endif +# if !defined(PNG_STATIC) +# define PNG_STATIC +# endif +# else +# if defined (PNG_BUILD_DLL) +# if defined(PNG_STATIC) +# undef PNG_STATIC +# endif +# if defined(PNG_USE_DLL) +# undef PNG_USE_DLL +# endif +# if !defined(PNG_DLL) +# define PNG_DLL +# endif +# else +# if defined(PNG_STATIC) +# if defined(PNG_USE_DLL) +# undef PNG_USE_DLL +# endif +# if defined(PNG_DLL) +# undef PNG_DLL +# endif +# else +# if !defined(PNG_USE_DLL) +# define PNG_USE_DLL +# endif +# if !defined(PNG_DLL) +# define PNG_DLL +# endif +# endif +# endif +# endif +#endif + +/* This protects us against compilers that run on a windowing system + * and thus don't have or would rather us not use the stdio types: + * stdin, stdout, and stderr. The only one currently used is stderr + * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will + * prevent these from being compiled and used. #defining PNG_NO_STDIO + * will also prevent these, plus will prevent the entire set of stdio + * macros and functions (FILE *, printf, etc.) from being compiled and used, + * unless (PNG_DEBUG > 0) has been #defined. + * + * #define PNG_NO_CONSOLE_IO + * #define PNG_NO_STDIO + */ + +#if defined(_WIN32_WCE) +# include + /* Console I/O functions are not supported on WindowsCE */ +# define PNG_NO_CONSOLE_IO +# ifdef PNG_DEBUG +# undef PNG_DEBUG +# endif +#endif + +#ifdef PNG_BUILD_DLL +# ifndef PNG_CONSOLE_IO_SUPPORTED +# ifndef PNG_NO_CONSOLE_IO +# define PNG_NO_CONSOLE_IO +# endif +# endif +#endif + +# ifdef PNG_NO_STDIO +# ifndef PNG_NO_CONSOLE_IO +# define PNG_NO_CONSOLE_IO +# endif +# ifdef PNG_DEBUG +# if (PNG_DEBUG > 0) +# include +# endif +# endif +# else +# if !defined(_WIN32_WCE) +/* "stdio.h" functions are not supported on WindowsCE */ +# include +# endif +# endif + +/* This macro protects us against machines that don't have function + * prototypes (ie K&R style headers). If your compiler does not handle + * function prototypes, define this macro and use the included ansi2knr. + * I've always been able to use _NO_PROTO as the indicator, but you may + * need to drag the empty declaration out in front of here, or change the + * ifdef to suit your own needs. + */ +#ifndef PNGARG + +#ifdef OF /* zlib prototype munger */ +# define PNGARG(arglist) OF(arglist) +#else + +#ifdef _NO_PROTO +# define PNGARG(arglist) () +# ifndef PNG_TYPECAST_NULL +# define PNG_TYPECAST_NULL +# endif +#else +# define PNGARG(arglist) arglist +#endif /* _NO_PROTO */ + +#endif /* OF */ + +#endif /* PNGARG */ + +/* Try to determine if we are compiling on a Mac. Note that testing for + * just __MWERKS__ is not good enough, because the Codewarrior is now used + * on non-Mac platforms. + */ +#ifndef MACOS +# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ + defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) +# define MACOS +# endif +#endif + +/* enough people need this for various reasons to include it here */ +#if !defined(MACOS) && !defined(RISCOS) && !defined(_WIN32_WCE) +# include +#endif + +#if !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED) +# define PNG_SETJMP_SUPPORTED +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This is an attempt to force a single setjmp behaviour on Linux. If + * the X config stuff didn't define _BSD_SOURCE we wouldn't need this. + */ + +# ifdef __linux__ +# ifdef _BSD_SOURCE +# define PNG_SAVE_BSD_SOURCE +# undef _BSD_SOURCE +# endif +# ifdef _SETJMP_H + /* If you encounter a compiler error here, see the explanation + * near the end of INSTALL. + */ + __png.h__ already includes setjmp.h; + __dont__ include it again.; +# endif +# endif /* __linux__ */ + + /* include setjmp.h for error handling */ +# include + +# ifdef __linux__ +# ifdef PNG_SAVE_BSD_SOURCE +# define _BSD_SOURCE +# undef PNG_SAVE_BSD_SOURCE +# endif +# endif /* __linux__ */ +#endif /* PNG_SETJMP_SUPPORTED */ + +#ifdef BSD +# include +#else +# include +#endif + +/* Other defines for things like memory and the like can go here. */ +#ifdef PNG_INTERNAL + +#include + +/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which + * aren't usually used outside the library (as far as I know), so it is + * debatable if they should be exported at all. In the future, when it is + * possible to have run-time registry of chunk-handling functions, some of + * these will be made available again. +#define PNG_EXTERN extern + */ +#define PNG_EXTERN + +/* Other defines specific to compilers can go here. Try to keep + * them inside an appropriate ifdef/endif pair for portability. + */ + +#if defined(PNG_FLOATING_POINT_SUPPORTED) +# if defined(MACOS) + /* We need to check that hasn't already been included earlier + * as it seems it doesn't agree with , yet we should really use + * if possible. + */ +# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) +# include +# endif +# else +# include +# endif +# if defined(_AMIGA) && defined(__SASC) && defined(_M68881) + /* Amiga SAS/C: We must include builtin FPU functions when compiling using + * MATH=68881 + */ +# include +# endif +#endif + +/* Codewarrior on NT has linking problems without this. */ +#if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) +# define PNG_ALWAYS_EXTERN +#endif + +/* This provides the non-ANSI (far) memory allocation routines. */ +#if defined(__TURBOC__) && defined(__MSDOS__) +# include +# include +#endif + +/* I have no idea why is this necessary... */ +#if defined(_MSC_VER) && (defined(WIN32) || defined(_Windows) || \ + defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__)) +# include +#endif + +/* This controls how fine the dithering gets. As this allocates + * a largish chunk of memory (32K), those who are not as concerned + * with dithering quality can decrease some or all of these. + */ +#ifndef PNG_DITHER_RED_BITS +# define PNG_DITHER_RED_BITS 5 +#endif +#ifndef PNG_DITHER_GREEN_BITS +# define PNG_DITHER_GREEN_BITS 5 +#endif +#ifndef PNG_DITHER_BLUE_BITS +# define PNG_DITHER_BLUE_BITS 5 +#endif + +/* This controls how fine the gamma correction becomes when you + * are only interested in 8 bits anyway. Increasing this value + * results in more memory being used, and more pow() functions + * being called to fill in the gamma tables. Don't set this value + * less then 8, and even that may not work (I haven't tested it). + */ + +#ifndef PNG_MAX_GAMMA_8 +# define PNG_MAX_GAMMA_8 11 +#endif + +/* This controls how much a difference in gamma we can tolerate before + * we actually start doing gamma conversion. + */ +#ifndef PNG_GAMMA_THRESHOLD +# define PNG_GAMMA_THRESHOLD 0.05 +#endif + +#endif /* PNG_INTERNAL */ + +/* The following uses const char * instead of char * for error + * and warning message functions, so some compilers won't complain. + * If you do not want to use const, define PNG_NO_CONST here. + */ + +#ifndef PNG_NO_CONST +# define PNG_CONST const +#else +# define PNG_CONST +#endif + +/* The following defines give you the ability to remove code from the + * library that you will not be using. I wish I could figure out how to + * automate this, but I can't do that without making it seriously hard + * on the users. So if you are not using an ability, change the #define + * to and #undef, and that part of the library will not be compiled. If + * your linker can't find a function, you may want to make sure the + * ability is defined here. Some of these depend upon some others being + * defined. I haven't figured out all the interactions here, so you may + * have to experiment awhile to get everything to compile. If you are + * creating or using a shared library, you probably shouldn't touch this, + * as it will affect the size of the structures, and this will cause bad + * things to happen if the library and/or application ever change. + */ + +/* Any features you will not be using can be undef'ed here */ + +/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user + * to turn it off with "*TRANSFORMS_NOT_SUPPORTED" or *PNG_NO_*_TRANSFORMS + * on the compile line, then pick and choose which ones to define without + * having to edit this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED + * if you only want to have a png-compliant reader/writer but don't need + * any of the extra transformations. This saves about 80 kbytes in a + * typical installation of the library. (PNG_NO_* form added in version + * 1.0.1c, for consistency) + */ + +/* The size of the png_text structure changed in libpng-1.0.6 when + * iTXt is supported. It is turned off by default, to support old apps + * that malloc the png_text structure instead of calling png_set_text() + * and letting libpng malloc it. It will be turned on by default in + * libpng-1.3.0. + */ + +#ifndef PNG_iTXt_SUPPORTED +# if !defined(PNG_READ_iTXt_SUPPORTED) && !defined(PNG_NO_READ_iTXt) +# define PNG_NO_READ_iTXt +# endif +# if !defined(PNG_WRITE_iTXt_SUPPORTED) && !defined(PNG_NO_WRITE_iTXt) +# define PNG_NO_WRITE_iTXt +# endif +#endif + +/* The following support, added after version 1.0.0, can be turned off here en + * masse by defining PNG_LEGACY_SUPPORTED in case you need binary compatibility + * with old applications that require the length of png_struct and png_info + * to remain unchanged. + */ + +#ifdef PNG_LEGACY_SUPPORTED +# define PNG_NO_FREE_ME +# define PNG_NO_READ_UNKNOWN_CHUNKS +# define PNG_NO_WRITE_UNKNOWN_CHUNKS +# define PNG_NO_READ_USER_CHUNKS +# define PNG_NO_READ_iCCP +# define PNG_NO_WRITE_iCCP +# define PNG_NO_READ_iTXt +# define PNG_NO_WRITE_iTXt +# define PNG_NO_READ_sCAL +# define PNG_NO_WRITE_sCAL +# define PNG_NO_READ_sPLT +# define PNG_NO_WRITE_sPLT +# define PNG_NO_INFO_IMAGE +# define PNG_NO_READ_RGB_TO_GRAY +# define PNG_NO_READ_USER_TRANSFORM +# define PNG_NO_WRITE_USER_TRANSFORM +# define PNG_NO_USER_MEM +# define PNG_NO_READ_EMPTY_PLTE +# define PNG_NO_MNG_FEATURES +# define PNG_NO_FIXED_POINT_SUPPORTED +#endif + +/* Ignore attempt to turn off both floating and fixed point support */ +#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \ + !defined(PNG_NO_FIXED_POINT_SUPPORTED) +# define PNG_FIXED_POINT_SUPPORTED +#endif + +#ifndef PNG_NO_FREE_ME +# define PNG_FREE_ME_SUPPORTED +#endif + +#if defined(PNG_READ_SUPPORTED) + +#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_TRANSFORMS) +# define PNG_READ_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_READ_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_READ_EXPAND +# define PNG_READ_EXPAND_SUPPORTED +# endif +# ifndef PNG_NO_READ_SHIFT +# define PNG_READ_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACK +# define PNG_READ_PACK_SUPPORTED +# endif +# ifndef PNG_NO_READ_BGR +# define PNG_READ_BGR_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP +# define PNG_READ_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_PACKSWAP +# define PNG_READ_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT +# define PNG_READ_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_READ_DITHER +# define PNG_READ_DITHER_SUPPORTED +# endif +# ifndef PNG_NO_READ_BACKGROUND +# define PNG_READ_BACKGROUND_SUPPORTED +# endif +# ifndef PNG_NO_READ_16_TO_8 +# define PNG_READ_16_TO_8_SUPPORTED +# endif +# ifndef PNG_NO_READ_FILLER +# define PNG_READ_FILLER_SUPPORTED +# endif +# ifndef PNG_NO_READ_GAMMA +# define PNG_READ_GAMMA_SUPPORTED +# endif +# ifndef PNG_NO_READ_GRAY_TO_RGB +# define PNG_READ_GRAY_TO_RGB_SUPPORTED +# endif +# ifndef PNG_NO_READ_SWAP_ALPHA +# define PNG_READ_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_INVERT_ALPHA +# define PNG_READ_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_STRIP_ALPHA +# define PNG_READ_STRIP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_READ_USER_TRANSFORM +# define PNG_READ_USER_TRANSFORM_SUPPORTED +# endif +# ifndef PNG_NO_READ_RGB_TO_GRAY +# define PNG_READ_RGB_TO_GRAY_SUPPORTED +# endif +#endif /* PNG_READ_TRANSFORMS_SUPPORTED */ + +#if !defined(PNG_NO_PROGRESSIVE_READ) && \ + !defined(PNG_PROGRESSIVE_READ_NOT_SUPPORTED) /* if you don't do progressive */ +# define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */ +#endif /* about interlacing capability! You'll */ + /* still have interlacing unless you change the following line: */ + +#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */ + +#ifndef PNG_NO_READ_COMPOSITE_NODIV +# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */ +# define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel, SGI */ +# endif +#endif + +/* Deprecated, will be removed from version 2.0.0. + Use PNG_MNG_FEATURES_SUPPORTED instead. */ +#ifndef PNG_NO_READ_EMPTY_PLTE +# define PNG_READ_EMPTY_PLTE_SUPPORTED +#endif + +#endif /* PNG_READ_SUPPORTED */ + +#if defined(PNG_WRITE_SUPPORTED) + +# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_TRANSFORMS) +# define PNG_WRITE_TRANSFORMS_SUPPORTED +#endif + +#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED +# ifndef PNG_NO_WRITE_SHIFT +# define PNG_WRITE_SHIFT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACK +# define PNG_WRITE_PACK_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_BGR +# define PNG_WRITE_BGR_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_SWAP +# define PNG_WRITE_SWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_PACKSWAP +# define PNG_WRITE_PACKSWAP_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT +# define PNG_WRITE_INVERT_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_FILLER +# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */ +# endif +# ifndef PNG_NO_WRITE_SWAP_ALPHA +# define PNG_WRITE_SWAP_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_INVERT_ALPHA +# define PNG_WRITE_INVERT_ALPHA_SUPPORTED +# endif +# ifndef PNG_NO_WRITE_USER_TRANSFORM +# define PNG_WRITE_USER_TRANSFORM_SUPPORTED +# endif +#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */ + +#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant + encoders, but can cause trouble + if left undefined */ + +#if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \ + defined(PNG_FLOATING_POINT_SUPPORTED) +# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#endif + +#ifndef PNG_NO_WRITE_FLUSH +# define PNG_WRITE_FLUSH_SUPPORTED +#endif + +/* Deprecated, see PNG_MNG_FEATURES_SUPPORTED, above */ +#ifndef PNG_NO_WRITE_EMPTY_PLTE +# define PNG_WRITE_EMPTY_PLTE_SUPPORTED +#endif + +#endif /* PNG_WRITE_SUPPORTED */ + +#ifndef PNG_1_0_X +# ifndef PNG_NO_ERROR_NUMBERS +# define PNG_ERROR_NUMBERS_SUPPORTED +# endif +#endif /* PNG_1_0_X */ + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +# ifndef PNG_NO_USER_TRANSFORM_PTR +# define PNG_USER_TRANSFORM_PTR_SUPPORTED +# endif +#endif + +#ifndef PNG_NO_STDIO +# define PNG_TIME_RFC1123_SUPPORTED +#endif + +/* This adds extra functions in pngget.c for accessing data from the + * info pointer (added in version 0.99) + * png_get_image_width() + * png_get_image_height() + * png_get_bit_depth() + * png_get_color_type() + * png_get_compression_type() + * png_get_filter_type() + * png_get_interlace_type() + * png_get_pixel_aspect_ratio() + * png_get_pixels_per_meter() + * png_get_x_offset_pixels() + * png_get_y_offset_pixels() + * png_get_x_offset_microns() + * png_get_y_offset_microns() + */ +#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED) +# define PNG_EASY_ACCESS_SUPPORTED +#endif + +/* PNG_ASSEMBLER_CODE was enabled by default in version 1.2.0 + even when PNG_USE_PNGVCRD or PNG_USE_PNGGCCRD is not defined */ +#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) +# ifndef PNG_ASSEMBLER_CODE_SUPPORTED +# define PNG_ASSEMBLER_CODE_SUPPORTED +# endif +# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE) +# define PNG_MMX_CODE_SUPPORTED +# endif +#endif + +/* If you are sure that you don't need thread safety and you are compiling + with PNG_USE_PNGCCRD for an MMX application, you can define this for + faster execution. See pnggccrd.c. +#define PNG_THREAD_UNSAFE_OK +*/ + +#if !defined(PNG_1_0_X) +#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED) +# define PNG_USER_MEM_SUPPORTED +#endif +#endif /* PNG_1_0_X */ + +/* Added at libpng-1.2.6 */ +#if !defined(PNG_1_0_X) +#ifndef PNG_SET_USER_LIMITS_SUPPORTED +#if !defined(PNG_NO_SET_USER_LIMITS) && !defined(PNG_SET_USER_LIMITS_SUPPORTED) +# define PNG_SET_USER_LIMITS_SUPPORTED +#endif +#endif +#endif /* PNG_1_0_X */ + +/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGS no matter + * how large, set these limits to 0x7fffffffL + */ +#ifndef PNG_USER_WIDTH_MAX +# define PNG_USER_WIDTH_MAX 1000000L +#endif +#ifndef PNG_USER_HEIGHT_MAX +# define PNG_USER_HEIGHT_MAX 1000000L +#endif + +/* These are currently experimental features, define them if you want */ + +/* very little testing */ +/* +#ifdef PNG_READ_SUPPORTED +# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED +# endif +#endif +*/ + +/* This is only for PowerPC big-endian and 680x0 systems */ +/* some testing */ +/* +#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED +# define PNG_READ_BIG_ENDIAN_SUPPORTED +#endif +*/ + +/* Buggy compilers (e.g., gcc 2.7.2.2) need this */ +/* +#define PNG_NO_POINTER_INDEXING +*/ + +/* These functions are turned off by default, as they will be phased out. */ +/* +#define PNG_USELESS_TESTS_SUPPORTED +#define PNG_CORRECT_PALETTE_SUPPORTED +*/ + +/* Any chunks you are not interested in, you can undef here. The + * ones that allocate memory may be expecially important (hIST, + * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info + * a bit smaller. + */ + +#if defined(PNG_READ_SUPPORTED) && \ + !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_READ_ANCILLARY_CHUNKS) +# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#endif + +#if defined(PNG_WRITE_SUPPORTED) && \ + !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ + !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) +# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#endif + +#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_READ_TEXT +# define PNG_NO_READ_iTXt +# define PNG_NO_READ_tEXt +# define PNG_NO_READ_zTXt +#endif +#ifndef PNG_NO_READ_bKGD +# define PNG_READ_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +#endif +#ifndef PNG_NO_READ_cHRM +# define PNG_READ_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +#endif +#ifndef PNG_NO_READ_gAMA +# define PNG_READ_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +#endif +#ifndef PNG_NO_READ_hIST +# define PNG_READ_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +#endif +#ifndef PNG_NO_READ_iCCP +# define PNG_READ_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +#endif +#ifndef PNG_NO_READ_iTXt +# ifndef PNG_READ_iTXt_SUPPORTED +# define PNG_READ_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_READ_oFFs +# define PNG_READ_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +#endif +#ifndef PNG_NO_READ_pCAL +# define PNG_READ_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_sCAL +# define PNG_READ_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +#endif +#ifndef PNG_NO_READ_pHYs +# define PNG_READ_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +#endif +#ifndef PNG_NO_READ_sBIT +# define PNG_READ_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sPLT +# define PNG_READ_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +#endif +#ifndef PNG_NO_READ_sRGB +# define PNG_READ_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +#endif +#ifndef PNG_NO_READ_tEXt +# define PNG_READ_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_tIME +# define PNG_READ_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +#endif +#ifndef PNG_NO_READ_tRNS +# define PNG_READ_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +#endif +#ifndef PNG_NO_READ_zTXt +# define PNG_READ_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +#endif +#ifndef PNG_NO_READ_UNKNOWN_CHUNKS +# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_NO_HANDLE_AS_UNKNOWN +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +#endif +#if !defined(PNG_NO_READ_USER_CHUNKS) && \ + defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) +# define PNG_READ_USER_CHUNKS_SUPPORTED +# define PNG_USER_CHUNKS_SUPPORTED +# ifdef PNG_NO_READ_UNKNOWN_CHUNKS +# undef PNG_NO_READ_UNKNOWN_CHUNKS +# endif +# ifdef PNG_NO_HANDLE_AS_UNKNOWN +# undef PNG_NO_HANDLE_AS_UNKNOWN +# endif +#endif +#ifndef PNG_NO_READ_OPT_PLTE +# define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the */ +#endif /* optional PLTE chunk in RGB and RGBA images */ +#if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \ + defined(PNG_READ_zTXt_SUPPORTED) +# define PNG_READ_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +#endif + +#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */ + +#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED + +#ifdef PNG_NO_WRITE_TEXT +# define PNG_NO_WRITE_iTXt +# define PNG_NO_WRITE_tEXt +# define PNG_NO_WRITE_zTXt +#endif +#ifndef PNG_NO_WRITE_bKGD +# define PNG_WRITE_bKGD_SUPPORTED +# ifndef PNG_bKGD_SUPPORTED +# define PNG_bKGD_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_cHRM +# define PNG_WRITE_cHRM_SUPPORTED +# ifndef PNG_cHRM_SUPPORTED +# define PNG_cHRM_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_gAMA +# define PNG_WRITE_gAMA_SUPPORTED +# ifndef PNG_gAMA_SUPPORTED +# define PNG_gAMA_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_hIST +# define PNG_WRITE_hIST_SUPPORTED +# ifndef PNG_hIST_SUPPORTED +# define PNG_hIST_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iCCP +# define PNG_WRITE_iCCP_SUPPORTED +# ifndef PNG_iCCP_SUPPORTED +# define PNG_iCCP_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_iTXt +# ifndef PNG_WRITE_iTXt_SUPPORTED +# define PNG_WRITE_iTXt_SUPPORTED +# endif +# ifndef PNG_iTXt_SUPPORTED +# define PNG_iTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_oFFs +# define PNG_WRITE_oFFs_SUPPORTED +# ifndef PNG_oFFs_SUPPORTED +# define PNG_oFFs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pCAL +# define PNG_WRITE_pCAL_SUPPORTED +# ifndef PNG_pCAL_SUPPORTED +# define PNG_pCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sCAL +# define PNG_WRITE_sCAL_SUPPORTED +# ifndef PNG_sCAL_SUPPORTED +# define PNG_sCAL_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_pHYs +# define PNG_WRITE_pHYs_SUPPORTED +# ifndef PNG_pHYs_SUPPORTED +# define PNG_pHYs_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sBIT +# define PNG_WRITE_sBIT_SUPPORTED +# ifndef PNG_sBIT_SUPPORTED +# define PNG_sBIT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sPLT +# define PNG_WRITE_sPLT_SUPPORTED +# ifndef PNG_sPLT_SUPPORTED +# define PNG_sPLT_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_sRGB +# define PNG_WRITE_sRGB_SUPPORTED +# ifndef PNG_sRGB_SUPPORTED +# define PNG_sRGB_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tEXt +# define PNG_WRITE_tEXt_SUPPORTED +# ifndef PNG_tEXt_SUPPORTED +# define PNG_tEXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tIME +# define PNG_WRITE_tIME_SUPPORTED +# ifndef PNG_tIME_SUPPORTED +# define PNG_tIME_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_tRNS +# define PNG_WRITE_tRNS_SUPPORTED +# ifndef PNG_tRNS_SUPPORTED +# define PNG_tRNS_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_zTXt +# define PNG_WRITE_zTXt_SUPPORTED +# ifndef PNG_zTXt_SUPPORTED +# define PNG_zTXt_SUPPORTED +# endif +#endif +#ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS +# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_UNKNOWN_CHUNKS_SUPPORTED +# endif +# ifndef PNG_NO_HANDLE_AS_UNKNOWN +# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +# endif +# endif +#endif +#if defined(PNG_WRITE_iTXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \ + defined(PNG_WRITE_zTXt_SUPPORTED) +# define PNG_WRITE_TEXT_SUPPORTED +# ifndef PNG_TEXT_SUPPORTED +# define PNG_TEXT_SUPPORTED +# endif +#endif + +#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */ + +/* Turn this off to disable png_read_png() and + * png_write_png() and leave the row_pointers member + * out of the info structure. + */ +#ifndef PNG_NO_INFO_IMAGE +# define PNG_INFO_IMAGE_SUPPORTED +#endif + +/* need the time information for reading tIME chunks */ +#if defined(PNG_tIME_SUPPORTED) +# if !defined(_WIN32_WCE) + /* "time.h" functions are not supported on WindowsCE */ +# include +# endif +#endif + +/* Some typedefs to get us started. These should be safe on most of the + * common platforms. The typedefs should be at least as large as the + * numbers suggest (a png_uint_32 must be at least 32 bits long), but they + * don't have to be exactly that size. Some compilers dislike passing + * unsigned shorts as function parameters, so you may be better off using + * unsigned int for png_uint_16. Likewise, for 64-bit systems, you may + * want to have unsigned int for png_uint_32 instead of unsigned long. + */ + +typedef unsigned long png_uint_32; +typedef long png_int_32; +typedef unsigned short png_uint_16; +typedef short png_int_16; +typedef unsigned char png_byte; + +/* This is usually size_t. It is typedef'ed just in case you need it to + change (I'm not sure if you will or not, so I thought I'd be safe) */ +#ifdef PNG_SIZE_T + typedef PNG_SIZE_T png_size_t; +# define png_sizeof(x) png_convert_size(sizeof (x)) +#else + typedef size_t png_size_t; +# define png_sizeof(x) sizeof (x) +#endif + +/* The following is needed for medium model support. It cannot be in the + * PNG_INTERNAL section. Needs modification for other compilers besides + * MSC. Model independent support declares all arrays and pointers to be + * large using the far keyword. The zlib version used must also support + * model independent data. As of version zlib 1.0.4, the necessary changes + * have been made in zlib. The USE_FAR_KEYWORD define triggers other + * changes that are needed. (Tim Wegner) + */ + +/* Separate compiler dependencies (problem here is that zlib.h always + defines FAR. (SJT) */ +#ifdef __BORLANDC__ +# if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__) +# define LDATA 1 +# else +# define LDATA 0 +# endif + /* GRR: why is Cygwin in here? Cygwin is not Borland C... */ +# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__) +# define PNG_MAX_MALLOC_64K +# if (LDATA != 1) +# ifndef FAR +# define FAR __far +# endif +# define USE_FAR_KEYWORD +# endif /* LDATA != 1 */ + /* Possibly useful for moving data out of default segment. + * Uncomment it if you want. Could also define FARDATA as + * const if your compiler supports it. (SJT) +# define FARDATA FAR + */ +# endif /* __WIN32__, __FLAT__, __CYGWIN__ */ +#endif /* __BORLANDC__ */ + + +/* Suggest testing for specific compiler first before testing for + * FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM, + * making reliance oncertain keywords suspect. (SJT) + */ + +/* MSC Medium model */ +#if defined(FAR) +# if defined(M_I86MM) +# define USE_FAR_KEYWORD +# define FARDATA FAR +# include +# endif +#endif + +/* SJT: default case */ +#ifndef FAR +# define FAR +#endif + +/* At this point FAR is always defined */ +#ifndef FARDATA +# define FARDATA +#endif + +/* Typedef for floating-point numbers that are converted + to fixed-point with a multiple of 100,000, e.g., int_gamma */ +typedef png_int_32 png_fixed_point; + +/* Add typedefs for pointers */ +typedef void FAR * png_voidp; +typedef png_byte FAR * png_bytep; +typedef png_uint_32 FAR * png_uint_32p; +typedef png_int_32 FAR * png_int_32p; +typedef png_uint_16 FAR * png_uint_16p; +typedef png_int_16 FAR * png_int_16p; +typedef PNG_CONST char FAR * png_const_charp; +typedef char FAR * png_charp; +typedef png_fixed_point FAR * png_fixed_point_p; + +#ifndef PNG_NO_STDIO +#if defined(_WIN32_WCE) +typedef HANDLE png_FILE_p; +#else +typedef FILE * png_FILE_p; +#endif +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * png_doublep; +#endif + +/* Pointers to pointers; i.e. arrays */ +typedef png_byte FAR * FAR * png_bytepp; +typedef png_uint_32 FAR * FAR * png_uint_32pp; +typedef png_int_32 FAR * FAR * png_int_32pp; +typedef png_uint_16 FAR * FAR * png_uint_16pp; +typedef png_int_16 FAR * FAR * png_int_16pp; +typedef PNG_CONST char FAR * FAR * png_const_charpp; +typedef char FAR * FAR * png_charpp; +typedef png_fixed_point FAR * FAR * png_fixed_point_pp; +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double FAR * FAR * png_doublepp; +#endif + +/* Pointers to pointers to pointers; i.e., pointer to array */ +typedef char FAR * FAR * FAR * png_charppp; + +#if defined(PNG_1_0_X) || defined(PNG_1_2_X) +/* SPC - Is this stuff deprecated? */ +/* It'll be removed as of libpng-1.3.0 - GR-P */ +/* libpng typedefs for types in zlib. If zlib changes + * or another compression library is used, then change these. + * Eliminates need to change all the source files. + */ +typedef charf * png_zcharp; +typedef charf * FAR * png_zcharpp; +typedef z_stream FAR * png_zstreamp; +#endif /* (PNG_1_0_X) || defined(PNG_1_2_X) */ + +/* + * Define PNG_BUILD_DLL if the module being built is a Windows + * LIBPNG DLL. + * + * Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL. + * It is equivalent to Microsoft predefined macro _DLL that is + * automatically defined when you compile using the share + * version of the CRT (C Run-Time library) + * + * The cygwin mods make this behavior a little different: + * Define PNG_BUILD_DLL if you are building a dll for use with cygwin + * Define PNG_STATIC if you are building a static library for use with cygwin, + * -or- if you are building an application that you want to link to the + * static library. + * PNG_USE_DLL is defined by default (no user action needed) unless one of + * the other flags is defined. + */ + +#if !defined(PNG_DLL) && (defined(PNG_BUILD_DLL) || defined(PNG_USE_DLL)) +# define PNG_DLL +#endif +/* If CYGWIN, then disallow GLOBAL ARRAYS unless building a static lib. + * When building a static lib, default to no GLOBAL ARRAYS, but allow + * command-line override + */ +#if defined(__CYGWIN__) +# if !defined(PNG_STATIC) +# if defined(PNG_USE_GLOBAL_ARRAYS) +# undef PNG_USE_GLOBAL_ARRAYS +# endif +# if !defined(PNG_USE_LOCAL_ARRAYS) +# define PNG_USE_LOCAL_ARRAYS +# endif +# else +# if defined(PNG_USE_LOCAL_ARRAYS) || defined(PNG_NO_GLOBAL_ARRAYS) +# if defined(PNG_USE_GLOBAL_ARRAYS) +# undef PNG_USE_GLOBAL_ARRAYS +# endif +# endif +# endif +# if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) +# define PNG_USE_LOCAL_ARRAYS +# endif +#endif + +/* Do not use global arrays (helps with building DLL's) + * They are no longer used in libpng itself, since version 1.0.5c, + * but might be required for some pre-1.0.5c applications. + */ +#if !defined(PNG_USE_LOCAL_ARRAYS) && !defined(PNG_USE_GLOBAL_ARRAYS) +# if defined(PNG_NO_GLOBAL_ARRAYS) || (defined(__GNUC__) && defined(PNG_DLL)) +# define PNG_USE_LOCAL_ARRAYS +# else +# define PNG_USE_GLOBAL_ARRAYS +# endif +#endif + +#if defined(__CYGWIN__) +# undef PNGAPI +# define PNGAPI __cdecl +# undef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +/* If you define PNGAPI, e.g., with compiler option "-DPNGAPI=__stdcall", + * you may get warnings regarding the linkage of png_zalloc and png_zfree. + * Don't ignore those warnings; you must also reset the default calling + * convention in your compiler to match your PNGAPI, and you must build + * zlib and your applications the same way you build libpng. + */ + +#if defined(__MINGW32__) && !defined(PNG_MODULEDEF) +# ifndef PNG_NO_MODULEDEF +# define PNG_NO_MODULEDEF +# endif +#endif + +#if !defined(PNG_IMPEXP) && defined(PNG_BUILD_DLL) && !defined(PNG_NO_MODULEDEF) +# define PNG_IMPEXP +#endif + +#if defined(PNG_DLL) || defined(_DLL) || defined(__DLL__ ) || \ + (( defined(_Windows) || defined(_WINDOWS) || \ + defined(WIN32) || defined(_WIN32) || defined(__WIN32__) )) + +# ifndef PNGAPI +# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) +# define PNGAPI __cdecl +# else +# define PNGAPI _cdecl +# endif +# endif + +# if !defined(PNG_IMPEXP) && (!defined(PNG_DLL) || \ + 0 /* WINCOMPILER_WITH_NO_SUPPORT_FOR_DECLIMPEXP */) +# define PNG_IMPEXP +# endif + +# if !defined(PNG_IMPEXP) + +# define PNG_EXPORT_TYPE1(type,symbol) PNG_IMPEXP type PNGAPI symbol +# define PNG_EXPORT_TYPE2(type,symbol) type PNG_IMPEXP PNGAPI symbol + + /* Borland/Microsoft */ +# if defined(_MSC_VER) || defined(__BORLANDC__) +# if (_MSC_VER >= 800) || (__BORLANDC__ >= 0x500) +# define PNG_EXPORT PNG_EXPORT_TYPE1 +# else +# define PNG_EXPORT PNG_EXPORT_TYPE2 +# if defined(PNG_BUILD_DLL) +# define PNG_IMPEXP __export +# else +# define PNG_IMPEXP /*__import */ /* doesn't exist AFAIK in + VC++ */ +# endif /* Exists in Borland C++ for + C++ classes (== huge) */ +# endif +# endif + +# if !defined(PNG_IMPEXP) +# if defined(PNG_BUILD_DLL) +# define PNG_IMPEXP __declspec(dllexport) +# else +# define PNG_IMPEXP __declspec(dllimport) +# endif +# endif +# endif /* PNG_IMPEXP */ +#else /* !(DLL || non-cygwin WINDOWS) */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# ifndef PNGAPI +# define PNGAPI _System +# endif +# else +# if 0 /* ... other platforms, with other meanings */ +# endif +# endif +#endif + +#ifndef PNGAPI +# define PNGAPI +#endif +#ifndef PNG_IMPEXP +# define PNG_IMPEXP +#endif + +#ifdef PNG_BUILDSYMS +# ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END +# endif +# ifdef PNG_USE_GLOBAL_ARRAYS +# ifndef PNG_EXPORT_VAR +# define PNG_EXPORT_VAR(type) PNG_DATA_EXPORT +# endif +# endif +#endif + +#ifndef PNG_EXPORT +# define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol +#endif + +#ifdef PNG_USE_GLOBAL_ARRAYS +# ifndef PNG_EXPORT_VAR +# define PNG_EXPORT_VAR(type) extern PNG_IMPEXP type +# endif +#endif + +/* User may want to use these so they are not in PNG_INTERNAL. Any library + * functions that are passed far data must be model independent. + */ + +#ifndef PNG_ABORT +# define PNG_ABORT() abort() +#endif + +#ifdef PNG_SETJMP_SUPPORTED +# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_SETJMP_NOT_SUPPORTED) +#endif + +#if defined(USE_FAR_KEYWORD) /* memory model independent fns */ +/* use this to make far-to-near assignments */ +# define CHECK 1 +# define NOCHECK 0 +# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK)) +# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK)) +# define png_strcpy _fstrcpy +# define png_strncpy _fstrncpy /* Added to v 1.2.6 */ +# define png_strlen _fstrlen +# define png_memcmp _fmemcmp /* SJT: added */ +# define png_memcpy _fmemcpy +# define png_memset _fmemset +#else /* use the usual functions */ +# define CVT_PTR(ptr) (ptr) +# define CVT_PTR_NOCHECK(ptr) (ptr) +# define png_strcpy strcpy +# define png_strncpy strncpy /* Added to v 1.2.6 */ +# define png_strlen strlen +# define png_memcmp memcmp /* SJT: added */ +# define png_memcpy memcpy +# define png_memset memset +#endif +/* End of memory model independent support */ + +/* Just a little check that someone hasn't tried to define something + * contradictory. + */ +#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K) +# undef PNG_ZBUF_SIZE +# define PNG_ZBUF_SIZE 65536L +#endif + +#ifdef PNG_READ_SUPPORTED +/* Prior to libpng-1.0.9, this block was in pngasmrd.h */ +#if defined(PNG_INTERNAL) + +/* These are the default thresholds before the MMX code kicks in; if either + * rowbytes or bitdepth is below the threshold, plain C code is used. These + * can be overridden at runtime via the png_set_mmx_thresholds() call in + * libpng 1.2.0 and later. The values below were chosen by Intel. + */ + +#ifndef PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT +# define PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT 128 /* >= */ +#endif +#ifndef PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT +# define PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT 9 /* >= */ +#endif + +/* Set this in the makefile for VC++ on Pentium, not here. */ +/* Platform must be Pentium. Makefile must assemble and load pngvcrd.c . + * MMX will be detected at run time and used if present. + */ +#ifdef PNG_USE_PNGVCRD +# define PNG_HAVE_ASSEMBLER_COMBINE_ROW +# define PNG_HAVE_ASSEMBLER_READ_INTERLACE +# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW +#endif + +/* Set this in the makefile for gcc/as on Pentium, not here. */ +/* Platform must be Pentium. Makefile must assemble and load pnggccrd.c . + * MMX will be detected at run time and used if present. + */ +#ifdef PNG_USE_PNGGCCRD +# define PNG_HAVE_ASSEMBLER_COMBINE_ROW +# define PNG_HAVE_ASSEMBLER_READ_INTERLACE +# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW +#endif +/* - see pnggccrd.c for info about what is currently enabled */ + +#endif /* PNG_INTERNAL */ +#endif /* PNG_READ_SUPPORTED */ + +/* Added at libpng-1.2.8 */ +#endif /* PNG_VERSION_INFO_ONLY */ + +#endif /* PNGCONF_H */ diff --git a/libpng/pngerror.c b/libpng/pngerror.c new file mode 100644 index 0000000..6fa4012 --- /dev/null +++ b/libpng/pngerror.c @@ -0,0 +1,295 @@ + +/* pngerror.c - stub functions for i/o and memory allocation + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file provides a location for all error handling. Users who + * need special error handling are expected to write replacement functions + * and use png_set_error_fn() to use those functions. See the instructions + * at each function. + */ + +#define PNG_INTERNAL +#include "png.h" + +static void /* PRIVATE */ +png_default_error PNGARG((png_structp png_ptr, + png_const_charp error_message)); +static void /* PRIVATE */ +png_default_warning PNGARG((png_structp png_ptr, + png_const_charp warning_message)); + +/* This function is called whenever there is a fatal error. This function + * should not be changed. If there is a need to handle errors differently, + * you should supply a replacement error function and use png_set_error_fn() + * to replace the error function at run-time. + */ +void PNGAPI +png_error(png_structp png_ptr, png_const_charp error_message) +{ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + char msg[16]; + if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) + { + if (*error_message == '#') + { + int offset; + for (offset=1; offset<15; offset++) + if (*(error_message+offset) == ' ') + break; + if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) + { + int i; + for (i=0; iflags&PNG_FLAG_STRIP_ERROR_TEXT) + { + msg[0]='0'; + msg[1]='\0'; + error_message=msg; + } + } + } +#endif + if (png_ptr != NULL && png_ptr->error_fn != NULL) + (*(png_ptr->error_fn))(png_ptr, error_message); + + /* If the custom handler doesn't exist, or if it returns, + use the default handler, which will not return. */ + png_default_error(png_ptr, error_message); +} + +/* This function is called whenever there is a non-fatal error. This function + * should not be changed. If there is a need to handle warnings differently, + * you should supply a replacement warning function and use + * png_set_error_fn() to replace the warning function at run-time. + */ +void PNGAPI +png_warning(png_structp png_ptr, png_const_charp warning_message) +{ + int offset = 0; +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) +#endif + { + if (*warning_message == '#') + { + for (offset=1; offset<15; offset++) + if (*(warning_message+offset) == ' ') + break; + } + } + if (png_ptr != NULL && png_ptr->warning_fn != NULL) + (*(png_ptr->warning_fn))(png_ptr, warning_message+offset); + else + png_default_warning(png_ptr, warning_message+offset); +} + +/* These utilities are used internally to build an error message that relates + * to the current chunk. The chunk name comes from png_ptr->chunk_name, + * this is used to prefix the message. The message is limited in length + * to 63 bytes, the name characters are output as hex digits wrapped in [] + * if the character is invalid. + */ +#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) +static PNG_CONST char png_digit[16] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F' +}; + +static void /* PRIVATE */ +png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp + error_message) +{ + int iout = 0, iin = 0; + + while (iin < 4) + { + int c = png_ptr->chunk_name[iin++]; + if (isnonalpha(c)) + { + buffer[iout++] = '['; + buffer[iout++] = png_digit[(c & 0xf0) >> 4]; + buffer[iout++] = png_digit[c & 0x0f]; + buffer[iout++] = ']'; + } + else + { + buffer[iout++] = (png_byte)c; + } + } + + if (error_message == NULL) + buffer[iout] = 0; + else + { + buffer[iout++] = ':'; + buffer[iout++] = ' '; + png_strncpy(buffer+iout, error_message, 63); + buffer[iout+63] = 0; + } +} + +void PNGAPI +png_chunk_error(png_structp png_ptr, png_const_charp error_message) +{ + char msg[18+64]; + png_format_buffer(png_ptr, msg, error_message); + png_error(png_ptr, msg); +} + +void PNGAPI +png_chunk_warning(png_structp png_ptr, png_const_charp warning_message) +{ + char msg[18+64]; + png_format_buffer(png_ptr, msg, warning_message); + png_warning(png_ptr, msg); +} + +/* This is the default error handling function. Note that replacements for + * this function MUST NOT RETURN, or the program will likely crash. This + * function is used by default, or if the program supplies NULL for the + * error function pointer in png_set_error_fn(). + */ +static void /* PRIVATE */ +png_default_error(png_structp png_ptr, png_const_charp error_message) +{ +#ifndef PNG_NO_CONSOLE_IO +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + if (*error_message == '#') + { + int offset; + char error_number[16]; + for (offset=0; offset<15; offset++) + { + error_number[offset] = *(error_message+offset+1); + if (*(error_message+offset) == ' ') + break; + } + if((offset > 1) && (offset < 15)) + { + error_number[offset-1]='\0'; + fprintf(stderr, "libpng error no. %s: %s\n", error_number, + error_message+offset); + } + else + fprintf(stderr, "libpng error: %s, offset=%d\n", error_message,offset); + } + else +#endif + fprintf(stderr, "libpng error: %s\n", error_message); +#endif + +#ifdef PNG_SETJMP_SUPPORTED +# ifdef USE_FAR_KEYWORD + { + jmp_buf jmpbuf; + png_memcpy(jmpbuf,png_ptr->jmpbuf,png_sizeof(jmp_buf)); + longjmp(jmpbuf, 1); + } +# else + longjmp(png_ptr->jmpbuf, 1); +# endif +#else + /* make compiler happy */ ; + if (png_ptr) + PNG_ABORT(); +#endif +#ifdef PNG_NO_CONSOLE_IO + /* make compiler happy */ ; + if (&error_message != NULL) + return; +#endif +} + +/* This function is called when there is a warning, but the library thinks + * it can continue anyway. Replacement functions don't have to do anything + * here if you don't want them to. In the default configuration, png_ptr is + * not used, but it is passed in case it may be useful. + */ +static void /* PRIVATE */ +png_default_warning(png_structp png_ptr, png_const_charp warning_message) +{ +#ifndef PNG_NO_CONSOLE_IO +# ifdef PNG_ERROR_NUMBERS_SUPPORTED + if (*warning_message == '#') + { + int offset; + char warning_number[16]; + for (offset=0; offset<15; offset++) + { + warning_number[offset]=*(warning_message+offset+1); + if (*(warning_message+offset) == ' ') + break; + } + if((offset > 1) && (offset < 15)) + { + warning_number[offset-1]='\0'; + fprintf(stderr, "libpng warning no. %s: %s\n", warning_number, + warning_message+offset); + } + else + fprintf(stderr, "libpng warning: %s\n", warning_message); + } + else +# endif + fprintf(stderr, "libpng warning: %s\n", warning_message); +#else + /* make compiler happy */ ; + if (warning_message) + return; +#endif + /* make compiler happy */ ; + if (png_ptr) + return; +} + +/* This function is called when the application wants to use another method + * of handling errors and warnings. Note that the error function MUST NOT + * return to the calling routine or serious problems will occur. The return + * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1) + */ +void PNGAPI +png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warning_fn) +{ + png_ptr->error_ptr = error_ptr; + png_ptr->error_fn = error_fn; + png_ptr->warning_fn = warning_fn; +} + + +/* This function returns a pointer to the error_ptr associated with the user + * functions. The application should free any memory associated with this + * pointer before png_write_destroy and png_read_destroy are called. + */ +png_voidp PNGAPI +png_get_error_ptr(png_structp png_ptr) +{ + return ((png_voidp)png_ptr->error_ptr); +} + + +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +void PNGAPI +png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode) +{ + if(png_ptr != NULL) + { + png_ptr->flags &= + ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode); + } +} +#endif diff --git a/libpng/pngget.c b/libpng/pngget.c new file mode 100644 index 0000000..8eefa77 --- /dev/null +++ b/libpng/pngget.c @@ -0,0 +1,934 @@ + +/* pngget.c - retrieval of values from info struct + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +#define PNG_INTERNAL +#include "png.h" + +png_uint_32 PNGAPI +png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag) +{ + if (png_ptr != NULL && info_ptr != NULL) + return(info_ptr->valid & flag); + else + return(0); +} + +png_uint_32 PNGAPI +png_get_rowbytes(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + return(info_ptr->rowbytes); + else + return(0); +} + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +png_bytepp PNGAPI +png_get_rows(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + return(info_ptr->row_pointers); + else + return(0); +} +#endif + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* easy access to info, added in libpng-0.99 */ +png_uint_32 PNGAPI +png_get_image_width(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->width; + } + return (0); +} + +png_uint_32 PNGAPI +png_get_image_height(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->height; + } + return (0); +} + +png_byte PNGAPI +png_get_bit_depth(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->bit_depth; + } + return (0); +} + +png_byte PNGAPI +png_get_color_type(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->color_type; + } + return (0); +} + +png_byte PNGAPI +png_get_filter_type(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->filter_type; + } + return (0); +} + +png_byte PNGAPI +png_get_interlace_type(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->interlace_type; + } + return (0); +} + +png_byte PNGAPI +png_get_compression_type(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + { + return info_ptr->compression_type; + } + return (0); +} + +png_uint_32 PNGAPI +png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_pHYs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_pHYs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_x_pixels_per_meter"); + if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER) + return (0); + else return (info_ptr->x_pixels_per_unit); + } +#else + return (0); +#endif + return (0); +} + +png_uint_32 PNGAPI +png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_pHYs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_pHYs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_y_pixels_per_meter"); + if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER) + return (0); + else return (info_ptr->y_pixels_per_unit); + } +#else + return (0); +#endif + return (0); +} + +png_uint_32 PNGAPI +png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_pHYs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_pHYs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_pixels_per_meter"); + if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER || + info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit) + return (0); + else return (info_ptr->x_pixels_per_unit); + } +#else + return (0); +#endif + return (0); +} + +#ifdef PNG_FLOATING_POINT_SUPPORTED +float PNGAPI +png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr) + { + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_pHYs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_pHYs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_aspect_ratio"); + if (info_ptr->x_pixels_per_unit == 0) + return ((float)0.0); + else + return ((float)((float)info_ptr->y_pixels_per_unit + /(float)info_ptr->x_pixels_per_unit)); + } +#else + return (0.0); +#endif + return ((float)0.0); +} +#endif + +png_int_32 PNGAPI +png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_oFFs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_oFFs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns"); + if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) + return (0); + else return (info_ptr->x_offset); + } +#else + return (0); +#endif + return (0); +} + +png_int_32 PNGAPI +png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_oFFs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_oFFs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns"); + if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER) + return (0); + else return (info_ptr->y_offset); + } +#else + return (0); +#endif + return (0); +} + +png_int_32 PNGAPI +png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_oFFs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_oFFs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns"); + if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) + return (0); + else return (info_ptr->x_offset); + } +#else + return (0); +#endif + return (0); +} + +png_int_32 PNGAPI +png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) +#if defined(PNG_oFFs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_oFFs) + { + png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns"); + if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL) + return (0); + else return (info_ptr->y_offset); + } +#else + return (0); +#endif + return (0); +} + +#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED) +png_uint_32 PNGAPI +png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) +{ + return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr) + *.0254 +.5)); +} + +png_uint_32 PNGAPI +png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) +{ + return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr) + *.0254 +.5)); +} + +png_uint_32 PNGAPI +png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr) +{ + return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr) + *.0254 +.5)); +} + +float PNGAPI +png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr) +{ + return ((float)png_get_x_offset_microns(png_ptr, info_ptr) + *.00003937); +} + +float PNGAPI +png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr) +{ + return ((float)png_get_y_offset_microns(png_ptr, info_ptr) + *.00003937); +} + +#if defined(PNG_pHYs_SUPPORTED) +png_uint_32 PNGAPI +png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr, + png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) +{ + png_uint_32 retval = 0; + + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) + { + png_debug1(1, "in %s retrieval function\n", "pHYs"); + if (res_x != NULL) + { + *res_x = info_ptr->x_pixels_per_unit; + retval |= PNG_INFO_pHYs; + } + if (res_y != NULL) + { + *res_y = info_ptr->y_pixels_per_unit; + retval |= PNG_INFO_pHYs; + } + if (unit_type != NULL) + { + *unit_type = (int)info_ptr->phys_unit_type; + retval |= PNG_INFO_pHYs; + if(*unit_type == 1) + { + if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50); + if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50); + } + } + } + return (retval); +} +#endif /* PNG_pHYs_SUPPORTED */ +#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ + +/* png_get_channels really belongs in here, too, but it's been around longer */ + +#endif /* PNG_EASY_ACCESS_SUPPORTED */ + +png_byte PNGAPI +png_get_channels(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + return(info_ptr->channels); + else + return (0); +} + +png_bytep PNGAPI +png_get_signature(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr != NULL && info_ptr != NULL) + return(info_ptr->signature); + else + return (NULL); +} + +#if defined(PNG_bKGD_SUPPORTED) +png_uint_32 PNGAPI +png_get_bKGD(png_structp png_ptr, png_infop info_ptr, + png_color_16p *background) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) + && background != NULL) + { + png_debug1(1, "in %s retrieval function\n", "bKGD"); + *background = &(info_ptr->background); + return (PNG_INFO_bKGD); + } + return (0); +} +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +png_uint_32 PNGAPI +png_get_cHRM(png_structp png_ptr, png_infop info_ptr, + double *white_x, double *white_y, double *red_x, double *red_y, + double *green_x, double *green_y, double *blue_x, double *blue_y) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) + { + png_debug1(1, "in %s retrieval function\n", "cHRM"); + if (white_x != NULL) + *white_x = (double)info_ptr->x_white; + if (white_y != NULL) + *white_y = (double)info_ptr->y_white; + if (red_x != NULL) + *red_x = (double)info_ptr->x_red; + if (red_y != NULL) + *red_y = (double)info_ptr->y_red; + if (green_x != NULL) + *green_x = (double)info_ptr->x_green; + if (green_y != NULL) + *green_y = (double)info_ptr->y_green; + if (blue_x != NULL) + *blue_x = (double)info_ptr->x_blue; + if (blue_y != NULL) + *blue_y = (double)info_ptr->y_blue; + return (PNG_INFO_cHRM); + } + return (0); +} +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +png_uint_32 PNGAPI +png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, + png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x, + png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y, + png_fixed_point *blue_x, png_fixed_point *blue_y) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM)) + { + png_debug1(1, "in %s retrieval function\n", "cHRM"); + if (white_x != NULL) + *white_x = info_ptr->int_x_white; + if (white_y != NULL) + *white_y = info_ptr->int_y_white; + if (red_x != NULL) + *red_x = info_ptr->int_x_red; + if (red_y != NULL) + *red_y = info_ptr->int_y_red; + if (green_x != NULL) + *green_x = info_ptr->int_x_green; + if (green_y != NULL) + *green_y = info_ptr->int_y_green; + if (blue_x != NULL) + *blue_x = info_ptr->int_x_blue; + if (blue_y != NULL) + *blue_y = info_ptr->int_y_blue; + return (PNG_INFO_cHRM); + } + return (0); +} +#endif +#endif + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +png_uint_32 PNGAPI +png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) + && file_gamma != NULL) + { + png_debug1(1, "in %s retrieval function\n", "gAMA"); + *file_gamma = (double)info_ptr->gamma; + return (PNG_INFO_gAMA); + } + return (0); +} +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +png_uint_32 PNGAPI +png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, + png_fixed_point *int_file_gamma) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) + && int_file_gamma != NULL) + { + png_debug1(1, "in %s retrieval function\n", "gAMA"); + *int_file_gamma = info_ptr->int_gamma; + return (PNG_INFO_gAMA); + } + return (0); +} +#endif +#endif + +#if defined(PNG_sRGB_SUPPORTED) +png_uint_32 PNGAPI +png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB) + && file_srgb_intent != NULL) + { + png_debug1(1, "in %s retrieval function\n", "sRGB"); + *file_srgb_intent = (int)info_ptr->srgb_intent; + return (PNG_INFO_sRGB); + } + return (0); +} +#endif + +#if defined(PNG_iCCP_SUPPORTED) +png_uint_32 PNGAPI +png_get_iCCP(png_structp png_ptr, png_infop info_ptr, + png_charpp name, int *compression_type, + png_charpp profile, png_uint_32 *proflen) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP) + && name != NULL && profile != NULL && proflen != NULL) + { + png_debug1(1, "in %s retrieval function\n", "iCCP"); + *name = info_ptr->iccp_name; + *profile = info_ptr->iccp_profile; + /* compression_type is a dummy so the API won't have to change + if we introduce multiple compression types later. */ + *proflen = (int)info_ptr->iccp_proflen; + *compression_type = (int)info_ptr->iccp_compression; + return (PNG_INFO_iCCP); + } + return (0); +} +#endif + +#if defined(PNG_sPLT_SUPPORTED) +png_uint_32 PNGAPI +png_get_sPLT(png_structp png_ptr, png_infop info_ptr, + png_sPLT_tpp spalettes) +{ + if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL) + *spalettes = info_ptr->splt_palettes; + return ((png_uint_32)info_ptr->splt_palettes_num); +} +#endif + +#if defined(PNG_hIST_SUPPORTED) +png_uint_32 PNGAPI +png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) + && hist != NULL) + { + png_debug1(1, "in %s retrieval function\n", "hIST"); + *hist = info_ptr->hist; + return (PNG_INFO_hIST); + } + return (0); +} +#endif + +png_uint_32 PNGAPI +png_get_IHDR(png_structp png_ptr, png_infop info_ptr, + png_uint_32 *width, png_uint_32 *height, int *bit_depth, + int *color_type, int *interlace_type, int *compression_type, + int *filter_type) + +{ + if (png_ptr != NULL && info_ptr != NULL && width != NULL && height != NULL && + bit_depth != NULL && color_type != NULL) + { + png_debug1(1, "in %s retrieval function\n", "IHDR"); + *width = info_ptr->width; + *height = info_ptr->height; + *bit_depth = info_ptr->bit_depth; + if (info_ptr->bit_depth < 1 || info_ptr->bit_depth > 16) + png_error(png_ptr, "Invalid bit depth"); + *color_type = info_ptr->color_type; + if (info_ptr->color_type > 6) + png_error(png_ptr, "Invalid color type"); + if (compression_type != NULL) + *compression_type = info_ptr->compression_type; + if (filter_type != NULL) + *filter_type = info_ptr->filter_type; + if (interlace_type != NULL) + *interlace_type = info_ptr->interlace_type; + + /* check for potential overflow of rowbytes */ + if (*width == 0 || *width > PNG_UINT_31_MAX) + png_error(png_ptr, "Invalid image width"); + if (*height == 0 || *height > PNG_UINT_31_MAX) + png_error(png_ptr, "Invalid image height"); + if (info_ptr->width > (PNG_UINT_32_MAX + >> 3) /* 8-byte RGBA pixels */ + - 64 /* bigrowbuf hack */ + - 1 /* filter byte */ + - 7*8 /* rounding of width to multiple of 8 pixels */ + - 8) /* extra max_pixel_depth pad */ + { + png_warning(png_ptr, + "Width too large for libpng to process image data."); + } + return (1); + } + return (0); +} + +#if defined(PNG_oFFs_SUPPORTED) +png_uint_32 PNGAPI +png_get_oFFs(png_structp png_ptr, png_infop info_ptr, + png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs) + && offset_x != NULL && offset_y != NULL && unit_type != NULL) + { + png_debug1(1, "in %s retrieval function\n", "oFFs"); + *offset_x = info_ptr->x_offset; + *offset_y = info_ptr->y_offset; + *unit_type = (int)info_ptr->offset_unit_type; + return (PNG_INFO_oFFs); + } + return (0); +} +#endif + +#if defined(PNG_pCAL_SUPPORTED) +png_uint_32 PNGAPI +png_get_pCAL(png_structp png_ptr, png_infop info_ptr, + png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, + png_charp *units, png_charpp *params) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL) + && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL && + nparams != NULL && units != NULL && params != NULL) + { + png_debug1(1, "in %s retrieval function\n", "pCAL"); + *purpose = info_ptr->pcal_purpose; + *X0 = info_ptr->pcal_X0; + *X1 = info_ptr->pcal_X1; + *type = (int)info_ptr->pcal_type; + *nparams = (int)info_ptr->pcal_nparams; + *units = info_ptr->pcal_units; + *params = info_ptr->pcal_params; + return (PNG_INFO_pCAL); + } + return (0); +} +#endif + +#if defined(PNG_sCAL_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +png_uint_32 PNGAPI +png_get_sCAL(png_structp png_ptr, png_infop info_ptr, + int *unit, double *width, double *height) +{ + if (png_ptr != NULL && info_ptr != NULL && + (info_ptr->valid & PNG_INFO_sCAL)) + { + *unit = info_ptr->scal_unit; + *width = info_ptr->scal_pixel_width; + *height = info_ptr->scal_pixel_height; + return (PNG_INFO_sCAL); + } + return(0); +} +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +png_uint_32 PNGAPI +png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr, + int *unit, png_charpp width, png_charpp height) +{ + if (png_ptr != NULL && info_ptr != NULL && + (info_ptr->valid & PNG_INFO_sCAL)) + { + *unit = info_ptr->scal_unit; + *width = info_ptr->scal_s_width; + *height = info_ptr->scal_s_height; + return (PNG_INFO_sCAL); + } + return(0); +} +#endif +#endif +#endif + +#if defined(PNG_pHYs_SUPPORTED) +png_uint_32 PNGAPI +png_get_pHYs(png_structp png_ptr, png_infop info_ptr, + png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) +{ + png_uint_32 retval = 0; + + if (png_ptr != NULL && info_ptr != NULL && + (info_ptr->valid & PNG_INFO_pHYs)) + { + png_debug1(1, "in %s retrieval function\n", "pHYs"); + if (res_x != NULL) + { + *res_x = info_ptr->x_pixels_per_unit; + retval |= PNG_INFO_pHYs; + } + if (res_y != NULL) + { + *res_y = info_ptr->y_pixels_per_unit; + retval |= PNG_INFO_pHYs; + } + if (unit_type != NULL) + { + *unit_type = (int)info_ptr->phys_unit_type; + retval |= PNG_INFO_pHYs; + } + } + return (retval); +} +#endif + +png_uint_32 PNGAPI +png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette, + int *num_palette) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE) + && palette != NULL) + { + png_debug1(1, "in %s retrieval function\n", "PLTE"); + *palette = info_ptr->palette; + *num_palette = info_ptr->num_palette; + png_debug1(3, "num_palette = %d\n", *num_palette); + return (PNG_INFO_PLTE); + } + return (0); +} + +#if defined(PNG_sBIT_SUPPORTED) +png_uint_32 PNGAPI +png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT) + && sig_bit != NULL) + { + png_debug1(1, "in %s retrieval function\n", "sBIT"); + *sig_bit = &(info_ptr->sig_bit); + return (PNG_INFO_sBIT); + } + return (0); +} +#endif + +#if defined(PNG_TEXT_SUPPORTED) +png_uint_32 PNGAPI +png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, + int *num_text) +{ + if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0) + { + png_debug1(1, "in %s retrieval function\n", + (png_ptr->chunk_name[0] == '\0' ? "text" + : (png_const_charp)png_ptr->chunk_name)); + if (text_ptr != NULL) + *text_ptr = info_ptr->text; + if (num_text != NULL) + *num_text = info_ptr->num_text; + return ((png_uint_32)info_ptr->num_text); + } + if (num_text != NULL) + *num_text = 0; + return(0); +} +#endif + +#if defined(PNG_tIME_SUPPORTED) +png_uint_32 PNGAPI +png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time) +{ + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME) + && mod_time != NULL) + { + png_debug1(1, "in %s retrieval function\n", "tIME"); + *mod_time = &(info_ptr->mod_time); + return (PNG_INFO_tIME); + } + return (0); +} +#endif + +#if defined(PNG_tRNS_SUPPORTED) +png_uint_32 PNGAPI +png_get_tRNS(png_structp png_ptr, png_infop info_ptr, + png_bytep *trans, int *num_trans, png_color_16p *trans_values) +{ + png_uint_32 retval = 0; + if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) + { + png_debug1(1, "in %s retrieval function\n", "tRNS"); + if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + if (trans != NULL) + { + *trans = info_ptr->trans; + retval |= PNG_INFO_tRNS; + } + if (trans_values != NULL) + *trans_values = &(info_ptr->trans_values); + } + else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */ + { + if (trans_values != NULL) + { + *trans_values = &(info_ptr->trans_values); + retval |= PNG_INFO_tRNS; + } + if(trans != NULL) + *trans = NULL; + } + if(num_trans != NULL) + { + *num_trans = info_ptr->num_trans; + retval |= PNG_INFO_tRNS; + } + } + return (retval); +} +#endif + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +png_uint_32 PNGAPI +png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, + png_unknown_chunkpp unknowns) +{ + if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL) + *unknowns = info_ptr->unknown_chunks; + return ((png_uint_32)info_ptr->unknown_chunks_num); +} +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +png_byte PNGAPI +png_get_rgb_to_gray_status (png_structp png_ptr) +{ + return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0); +} +#endif + +#if defined(PNG_USER_CHUNKS_SUPPORTED) +png_voidp PNGAPI +png_get_user_chunk_ptr(png_structp png_ptr) +{ + return (png_ptr? png_ptr->user_chunk_ptr : NULL); +} +#endif + +#ifdef PNG_WRITE_SUPPORTED +png_uint_32 PNGAPI +png_get_compression_buffer_size(png_structp png_ptr) +{ + return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L); +} +#endif + +#ifndef PNG_1_0_X +#ifdef PNG_ASSEMBLER_CODE_SUPPORTED +/* this function was added to libpng 1.2.0 and should exist by default */ +png_uint_32 PNGAPI +png_get_asm_flags (png_structp png_ptr) +{ + return (png_uint_32)(png_ptr? png_ptr->asm_flags : 0L); +} + +/* this function was added to libpng 1.2.0 and should exist by default */ +png_uint_32 PNGAPI +png_get_asm_flagmask (int flag_select) +{ + png_uint_32 settable_asm_flags = 0; + + if (flag_select & PNG_SELECT_READ) + settable_asm_flags |= + PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | + PNG_ASM_FLAG_MMX_READ_INTERLACE | + PNG_ASM_FLAG_MMX_READ_FILTER_SUB | + PNG_ASM_FLAG_MMX_READ_FILTER_UP | + PNG_ASM_FLAG_MMX_READ_FILTER_AVG | + PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; + /* no non-MMX flags yet */ + +#if 0 + /* GRR: no write-flags yet, either, but someday... */ + if (flag_select & PNG_SELECT_WRITE) + settable_asm_flags |= + PNG_ASM_FLAG_MMX_WRITE_ [whatever] ; +#endif /* 0 */ + + return settable_asm_flags; /* _theoretically_ settable capabilities only */ +} +#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ + + +#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) + /* GRR: could add this: && defined(PNG_MMX_CODE_SUPPORTED) */ +/* this function was added to libpng 1.2.0 */ +png_uint_32 PNGAPI +png_get_mmx_flagmask (int flag_select, int *compilerID) +{ + png_uint_32 settable_mmx_flags = 0; + + if (flag_select & PNG_SELECT_READ) + settable_mmx_flags |= + PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | + PNG_ASM_FLAG_MMX_READ_INTERLACE | + PNG_ASM_FLAG_MMX_READ_FILTER_SUB | + PNG_ASM_FLAG_MMX_READ_FILTER_UP | + PNG_ASM_FLAG_MMX_READ_FILTER_AVG | + PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ; +#if 0 + /* GRR: no MMX write support yet, but someday... */ + if (flag_select & PNG_SELECT_WRITE) + settable_mmx_flags |= + PNG_ASM_FLAG_MMX_WRITE_ [whatever] ; +#endif /* 0 */ + + if (compilerID != NULL) { +#ifdef PNG_USE_PNGVCRD + *compilerID = 1; /* MSVC */ +#else +#ifdef PNG_USE_PNGGCCRD + *compilerID = 2; /* gcc/gas */ +#else + *compilerID = -1; /* unknown (i.e., no asm/MMX code compiled) */ +#endif +#endif + } + + return settable_mmx_flags; /* _theoretically_ settable capabilities only */ +} + +/* this function was added to libpng 1.2.0 */ +png_byte PNGAPI +png_get_mmx_bitdepth_threshold (png_structp png_ptr) +{ + return (png_byte)(png_ptr? png_ptr->mmx_bitdepth_threshold : 0); +} + +/* this function was added to libpng 1.2.0 */ +png_uint_32 PNGAPI +png_get_mmx_rowbytes_threshold (png_structp png_ptr) +{ + return (png_uint_32)(png_ptr? png_ptr->mmx_rowbytes_threshold : 0L); +} +#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ + +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +/* these functions were added to libpng 1.2.6 */ +png_uint_32 PNGAPI +png_get_user_width_max (png_structp png_ptr) +{ + return (png_ptr? png_ptr->user_width_max : 0); +} +png_uint_32 PNGAPI +png_get_user_height_max (png_structp png_ptr) +{ + return (png_ptr? png_ptr->user_height_max : 0); +} +#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */ + +#endif /* ?PNG_1_0_X */ diff --git a/libpng/pngmem.c b/libpng/pngmem.c new file mode 100644 index 0000000..f1cb693 --- /dev/null +++ b/libpng/pngmem.c @@ -0,0 +1,595 @@ + +/* pngmem.c - stub functions for memory allocation + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file provides a location for all memory allocation. Users who + * need special memory handling are expected to supply replacement + * functions for png_malloc() and png_free(), and to use + * png_create_read_struct_2() and png_create_write_struct_2() to + * identify the replacement functions. + */ + +#define PNG_INTERNAL +#include "png.h" + +/* Borland DOS special memory handler */ +#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) +/* if you change this, be sure to change the one in png.h also */ + +/* Allocate memory for a png_struct. The malloc and memset can be replaced + by a single call to calloc() if this is thought to improve performance. */ +png_voidp /* PRIVATE */ +png_create_struct(int type) +{ +#ifdef PNG_USER_MEM_SUPPORTED + return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL)); +} + +/* Alternate version of png_create_struct, for use with user-defined malloc. */ +png_voidp /* PRIVATE */ +png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr) +{ +#endif /* PNG_USER_MEM_SUPPORTED */ + png_size_t size; + png_voidp struct_ptr; + + if (type == PNG_STRUCT_INFO) + size = png_sizeof(png_info); + else if (type == PNG_STRUCT_PNG) + size = png_sizeof(png_struct); + else + return (png_get_copyright(NULL)); + +#ifdef PNG_USER_MEM_SUPPORTED + if(malloc_fn != NULL) + { + png_struct dummy_struct; + png_structp png_ptr = &dummy_struct; + png_ptr->mem_ptr=mem_ptr; + struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size); + } + else +#endif /* PNG_USER_MEM_SUPPORTED */ + struct_ptr = (png_voidp)farmalloc(size); + if (struct_ptr != NULL) + png_memset(struct_ptr, 0, size); + return (struct_ptr); +} + +/* Free memory allocated by a png_create_struct() call */ +void /* PRIVATE */ +png_destroy_struct(png_voidp struct_ptr) +{ +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL); +} + +/* Free memory allocated by a png_create_struct() call */ +void /* PRIVATE */ +png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, + png_voidp mem_ptr) +{ +#endif + if (struct_ptr != NULL) + { +#ifdef PNG_USER_MEM_SUPPORTED + if(free_fn != NULL) + { + png_struct dummy_struct; + png_structp png_ptr = &dummy_struct; + png_ptr->mem_ptr=mem_ptr; + (*(free_fn))(png_ptr, struct_ptr); + return; + } +#endif /* PNG_USER_MEM_SUPPORTED */ + farfree (struct_ptr); + } +} + +/* Allocate memory. For reasonable files, size should never exceed + * 64K. However, zlib may allocate more then 64K if you don't tell + * it not to. See zconf.h and png.h for more information. zlib does + * need to allocate exactly 64K, so whatever you call here must + * have the ability to do that. + * + * Borland seems to have a problem in DOS mode for exactly 64K. + * It gives you a segment with an offset of 8 (perhaps to store its + * memory stuff). zlib doesn't like this at all, so we have to + * detect and deal with it. This code should not be needed in + * Windows or OS/2 modes, and only in 16 bit mode. This code has + * been updated by Alexander Lehmann for version 0.89 to waste less + * memory. + * + * Note that we can't use png_size_t for the "size" declaration, + * since on some systems a png_size_t is a 16-bit quantity, and as a + * result, we would be truncating potentially larger memory requests + * (which should cause a fatal error) and introducing major problems. + */ + +png_voidp PNGAPI +png_malloc(png_structp png_ptr, png_uint_32 size) +{ + png_voidp ret; + + if (png_ptr == NULL || size == 0) + return (NULL); + +#ifdef PNG_USER_MEM_SUPPORTED + if(png_ptr->malloc_fn != NULL) + ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); + else + ret = (png_malloc_default(png_ptr, size)); + if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out of memory!"); + return (ret); +} + +png_voidp PNGAPI +png_malloc_default(png_structp png_ptr, png_uint_32 size) +{ + png_voidp ret; +#endif /* PNG_USER_MEM_SUPPORTED */ + +#ifdef PNG_MAX_MALLOC_64K + if (size > (png_uint_32)65536L) + { + png_warning(png_ptr, "Cannot Allocate > 64K"); + ret = NULL; + } + else +#endif + + if (size != (size_t)size) + ret = NULL; + else if (size == (png_uint_32)65536L) + { + if (png_ptr->offset_table == NULL) + { + /* try to see if we need to do any of this fancy stuff */ + ret = farmalloc(size); + if (ret == NULL || ((png_size_t)ret & 0xffff)) + { + int num_blocks; + png_uint_32 total_size; + png_bytep table; + int i; + png_byte huge * hptr; + + if (ret != NULL) + { + farfree(ret); + ret = NULL; + } + + if(png_ptr->zlib_window_bits > 14) + num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14)); + else + num_blocks = 1; + if (png_ptr->zlib_mem_level >= 7) + num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7)); + else + num_blocks++; + + total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16; + + table = farmalloc(total_size); + + if (table == NULL) + { +#ifndef PNG_USER_MEM_SUPPORTED + if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out Of Memory."); /* Note "O" and "M" */ + else + png_warning(png_ptr, "Out Of Memory."); +#endif + return (NULL); + } + + if ((png_size_t)table & 0xfff0) + { +#ifndef PNG_USER_MEM_SUPPORTED + if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, + "Farmalloc didn't return normalized pointer"); + else + png_warning(png_ptr, + "Farmalloc didn't return normalized pointer"); +#endif + return (NULL); + } + + png_ptr->offset_table = table; + png_ptr->offset_table_ptr = farmalloc(num_blocks * + png_sizeof (png_bytep)); + + if (png_ptr->offset_table_ptr == NULL) + { +#ifndef PNG_USER_MEM_SUPPORTED + if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out Of memory."); /* Note "O" and "M" */ + else + png_warning(png_ptr, "Out Of memory."); +#endif + return (NULL); + } + + hptr = (png_byte huge *)table; + if ((png_size_t)hptr & 0xf) + { + hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L); + hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */ + } + for (i = 0; i < num_blocks; i++) + { + png_ptr->offset_table_ptr[i] = (png_bytep)hptr; + hptr = hptr + (png_uint_32)65536L; /* "+=" fails on TC++3.0 */ + } + + png_ptr->offset_table_number = num_blocks; + png_ptr->offset_table_count = 0; + png_ptr->offset_table_count_free = 0; + } + } + + if (png_ptr->offset_table_count >= png_ptr->offset_table_number) + { +#ifndef PNG_USER_MEM_SUPPORTED + if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out of Memory."); /* Note "o" and "M" */ + else + png_warning(png_ptr, "Out of Memory."); +#endif + return (NULL); + } + + ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++]; + } + else + ret = farmalloc(size); + +#ifndef PNG_USER_MEM_SUPPORTED + if (ret == NULL) + { + if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */ + else + png_warning(png_ptr, "Out of memory."); /* Note "o" and "m" */ + } +#endif + + return (ret); +} + +/* free a pointer allocated by png_malloc(). In the default + configuration, png_ptr is not used, but is passed in case it + is needed. If ptr is NULL, return without taking any action. */ +void PNGAPI +png_free(png_structp png_ptr, png_voidp ptr) +{ + if (png_ptr == NULL || ptr == NULL) + return; + +#ifdef PNG_USER_MEM_SUPPORTED + if (png_ptr->free_fn != NULL) + { + (*(png_ptr->free_fn))(png_ptr, ptr); + return; + } + else png_free_default(png_ptr, ptr); +} + +void PNGAPI +png_free_default(png_structp png_ptr, png_voidp ptr) +{ +#endif /* PNG_USER_MEM_SUPPORTED */ + + if (png_ptr->offset_table != NULL) + { + int i; + + for (i = 0; i < png_ptr->offset_table_count; i++) + { + if (ptr == png_ptr->offset_table_ptr[i]) + { + ptr = NULL; + png_ptr->offset_table_count_free++; + break; + } + } + if (png_ptr->offset_table_count_free == png_ptr->offset_table_count) + { + farfree(png_ptr->offset_table); + farfree(png_ptr->offset_table_ptr); + png_ptr->offset_table = NULL; + png_ptr->offset_table_ptr = NULL; + } + } + + if (ptr != NULL) + { + farfree(ptr); + } +} + +#else /* Not the Borland DOS special memory handler */ + +/* Allocate memory for a png_struct or a png_info. The malloc and + memset can be replaced by a single call to calloc() if this is thought + to improve performance noticably. */ +png_voidp /* PRIVATE */ +png_create_struct(int type) +{ +#ifdef PNG_USER_MEM_SUPPORTED + return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL)); +} + +/* Allocate memory for a png_struct or a png_info. The malloc and + memset can be replaced by a single call to calloc() if this is thought + to improve performance noticably. */ +png_voidp /* PRIVATE */ +png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr) +{ +#endif /* PNG_USER_MEM_SUPPORTED */ + png_size_t size; + png_voidp struct_ptr; + + if (type == PNG_STRUCT_INFO) + size = png_sizeof(png_info); + else if (type == PNG_STRUCT_PNG) + size = png_sizeof(png_struct); + else + return (NULL); + +#ifdef PNG_USER_MEM_SUPPORTED + if(malloc_fn != NULL) + { + png_struct dummy_struct; + png_structp png_ptr = &dummy_struct; + png_ptr->mem_ptr=mem_ptr; + struct_ptr = (*(malloc_fn))(png_ptr, size); + if (struct_ptr != NULL) + png_memset(struct_ptr, 0, size); + return (struct_ptr); + } +#endif /* PNG_USER_MEM_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(__FLAT__) + struct_ptr = (png_voidp)farmalloc(size); +#else +# if defined(_MSC_VER) && defined(MAXSEG_64K) + struct_ptr = (png_voidp)halloc(size,1); +# else + struct_ptr = (png_voidp)malloc(size); +# endif +#endif + if (struct_ptr != NULL) + png_memset(struct_ptr, 0, size); + + return (struct_ptr); +} + + +/* Free memory allocated by a png_create_struct() call */ +void /* PRIVATE */ +png_destroy_struct(png_voidp struct_ptr) +{ +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL); +} + +/* Free memory allocated by a png_create_struct() call */ +void /* PRIVATE */ +png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, + png_voidp mem_ptr) +{ +#endif /* PNG_USER_MEM_SUPPORTED */ + if (struct_ptr != NULL) + { +#ifdef PNG_USER_MEM_SUPPORTED + if(free_fn != NULL) + { + png_struct dummy_struct; + png_structp png_ptr = &dummy_struct; + png_ptr->mem_ptr=mem_ptr; + (*(free_fn))(png_ptr, struct_ptr); + return; + } +#endif /* PNG_USER_MEM_SUPPORTED */ +#if defined(__TURBOC__) && !defined(__FLAT__) + farfree(struct_ptr); +#else +# if defined(_MSC_VER) && defined(MAXSEG_64K) + hfree(struct_ptr); +# else + free(struct_ptr); +# endif +#endif + } +} + +/* Allocate memory. For reasonable files, size should never exceed + 64K. However, zlib may allocate more then 64K if you don't tell + it not to. See zconf.h and png.h for more information. zlib does + need to allocate exactly 64K, so whatever you call here must + have the ability to do that. */ + +png_voidp PNGAPI +png_malloc(png_structp png_ptr, png_uint_32 size) +{ + png_voidp ret; + +#ifdef PNG_USER_MEM_SUPPORTED + if (png_ptr == NULL || size == 0) + return (NULL); + + if(png_ptr->malloc_fn != NULL) + ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); + else + ret = (png_malloc_default(png_ptr, size)); + if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out of Memory!"); + return (ret); +} + +png_voidp PNGAPI +png_malloc_default(png_structp png_ptr, png_uint_32 size) +{ + png_voidp ret; +#endif /* PNG_USER_MEM_SUPPORTED */ + + if (png_ptr == NULL || size == 0) + return (NULL); + +#ifdef PNG_MAX_MALLOC_64K + if (size > (png_uint_32)65536L) + { +#ifndef PNG_USER_MEM_SUPPORTED + if(png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Cannot Allocate > 64K"); + else +#endif + return NULL; + } +#endif + + /* Check for overflow */ +#if defined(__TURBOC__) && !defined(__FLAT__) + if (size != (unsigned long)size) + ret = NULL; + else + ret = farmalloc(size); +#else +# if defined(_MSC_VER) && defined(MAXSEG_64K) + if (size != (unsigned long)size) + ret = NULL; + else + ret = halloc(size, 1); +# else + if (size != (size_t)size) + ret = NULL; + else + ret = malloc((size_t)size); +# endif +#endif + +#ifndef PNG_USER_MEM_SUPPORTED + if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) + png_error(png_ptr, "Out of Memory"); +#endif + + return (ret); +} + +/* Free a pointer allocated by png_malloc(). If ptr is NULL, return + without taking any action. */ +void PNGAPI +png_free(png_structp png_ptr, png_voidp ptr) +{ + if (png_ptr == NULL || ptr == NULL) + return; + +#ifdef PNG_USER_MEM_SUPPORTED + if (png_ptr->free_fn != NULL) + { + (*(png_ptr->free_fn))(png_ptr, ptr); + return; + } + else png_free_default(png_ptr, ptr); +} +void PNGAPI +png_free_default(png_structp png_ptr, png_voidp ptr) +{ + if (png_ptr == NULL || ptr == NULL) + return; + +#endif /* PNG_USER_MEM_SUPPORTED */ + +#if defined(__TURBOC__) && !defined(__FLAT__) + farfree(ptr); +#else +# if defined(_MSC_VER) && defined(MAXSEG_64K) + hfree(ptr); +# else + free(ptr); +# endif +#endif +} + +#endif /* Not Borland DOS special memory handler */ + +#if defined(PNG_1_0_X) +# define png_malloc_warn png_malloc +#else +/* This function was added at libpng version 1.2.3. The png_malloc_warn() + * function will set up png_malloc() to issue a png_warning and return NULL + * instead of issuing a png_error, if it fails to allocate the requested + * memory. + */ +png_voidp PNGAPI +png_malloc_warn(png_structp png_ptr, png_uint_32 size) +{ + png_voidp ptr; + png_uint_32 save_flags=png_ptr->flags; + + png_ptr->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK; + ptr = (png_voidp)png_malloc((png_structp)png_ptr, size); + png_ptr->flags=save_flags; + return(ptr); +} +#endif + +png_voidp PNGAPI +png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2, + png_uint_32 length) +{ + png_size_t size; + + size = (png_size_t)length; + if ((png_uint_32)size != length) + png_error(png_ptr,"Overflow in png_memcpy_check."); + + return(png_memcpy (s1, s2, size)); +} + +png_voidp PNGAPI +png_memset_check (png_structp png_ptr, png_voidp s1, int value, + png_uint_32 length) +{ + png_size_t size; + + size = (png_size_t)length; + if ((png_uint_32)size != length) + png_error(png_ptr,"Overflow in png_memset_check."); + + return (png_memset (s1, value, size)); + +} + +#ifdef PNG_USER_MEM_SUPPORTED +/* This function is called when the application wants to use another method + * of allocating and freeing memory. + */ +void PNGAPI +png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr + malloc_fn, png_free_ptr free_fn) +{ + png_ptr->mem_ptr = mem_ptr; + png_ptr->malloc_fn = malloc_fn; + png_ptr->free_fn = free_fn; +} + +/* This function returns a pointer to the mem_ptr associated with the user + * functions. The application should free any memory associated with this + * pointer before png_write_destroy and png_read_destroy are called. + */ +png_voidp PNGAPI +png_get_mem_ptr(png_structp png_ptr) +{ + return ((png_voidp)png_ptr->mem_ptr); +} +#endif /* PNG_USER_MEM_SUPPORTED */ diff --git a/libpng/pngpread.c b/libpng/pngpread.c new file mode 100644 index 0000000..8c35faa --- /dev/null +++ b/libpng/pngpread.c @@ -0,0 +1,1573 @@ + +/* pngpread.c - read a png file in push mode + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +#define PNG_INTERNAL +#include "png.h" + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + +/* push model modes */ +#define PNG_READ_SIG_MODE 0 +#define PNG_READ_CHUNK_MODE 1 +#define PNG_READ_IDAT_MODE 2 +#define PNG_SKIP_MODE 3 +#define PNG_READ_tEXt_MODE 4 +#define PNG_READ_zTXt_MODE 5 +#define PNG_READ_DONE_MODE 6 +#define PNG_READ_iTXt_MODE 7 +#define PNG_ERROR_MODE 8 + +void PNGAPI +png_process_data(png_structp png_ptr, png_infop info_ptr, + png_bytep buffer, png_size_t buffer_size) +{ + png_push_restore_buffer(png_ptr, buffer, buffer_size); + + while (png_ptr->buffer_size) + { + png_process_some_data(png_ptr, info_ptr); + } +} + +/* What we do with the incoming data depends on what we were previously + * doing before we ran out of data... + */ +void /* PRIVATE */ +png_process_some_data(png_structp png_ptr, png_infop info_ptr) +{ + switch (png_ptr->process_mode) + { + case PNG_READ_SIG_MODE: + { + png_push_read_sig(png_ptr, info_ptr); + break; + } + case PNG_READ_CHUNK_MODE: + { + png_push_read_chunk(png_ptr, info_ptr); + break; + } + case PNG_READ_IDAT_MODE: + { + png_push_read_IDAT(png_ptr); + break; + } +#if defined(PNG_READ_tEXt_SUPPORTED) + case PNG_READ_tEXt_MODE: + { + png_push_read_tEXt(png_ptr, info_ptr); + break; + } +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + case PNG_READ_zTXt_MODE: + { + png_push_read_zTXt(png_ptr, info_ptr); + break; + } +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + case PNG_READ_iTXt_MODE: + { + png_push_read_iTXt(png_ptr, info_ptr); + break; + } +#endif + case PNG_SKIP_MODE: + { + png_push_crc_finish(png_ptr); + break; + } + default: + { + png_ptr->buffer_size = 0; + break; + } + } +} + +/* Read any remaining signature bytes from the stream and compare them with + * the correct PNG signature. It is possible that this routine is called + * with bytes already read from the signature, either because they have been + * checked by the calling application, or because of multiple calls to this + * routine. + */ +void /* PRIVATE */ +png_push_read_sig(png_structp png_ptr, png_infop info_ptr) +{ + png_size_t num_checked = png_ptr->sig_bytes, + num_to_check = 8 - num_checked; + + if (png_ptr->buffer_size < num_to_check) + { + num_to_check = png_ptr->buffer_size; + } + + png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]), + num_to_check); + png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes+num_to_check); + + if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) + { + if (num_checked < 4 && + png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) + png_error(png_ptr, "Not a PNG file"); + else + png_error(png_ptr, "PNG file corrupted by ASCII conversion"); + } + else + { + if (png_ptr->sig_bytes >= 8) + { + png_ptr->process_mode = PNG_READ_CHUNK_MODE; + } + } +} + +void /* PRIVATE */ +png_push_read_chunk(png_structp png_ptr, png_infop info_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IHDR; + PNG_IDAT; + PNG_IEND; + PNG_PLTE; +#if defined(PNG_READ_bKGD_SUPPORTED) + PNG_bKGD; +#endif +#if defined(PNG_READ_cHRM_SUPPORTED) + PNG_cHRM; +#endif +#if defined(PNG_READ_gAMA_SUPPORTED) + PNG_gAMA; +#endif +#if defined(PNG_READ_hIST_SUPPORTED) + PNG_hIST; +#endif +#if defined(PNG_READ_iCCP_SUPPORTED) + PNG_iCCP; +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + PNG_iTXt; +#endif +#if defined(PNG_READ_oFFs_SUPPORTED) + PNG_oFFs; +#endif +#if defined(PNG_READ_pCAL_SUPPORTED) + PNG_pCAL; +#endif +#if defined(PNG_READ_pHYs_SUPPORTED) + PNG_pHYs; +#endif +#if defined(PNG_READ_sBIT_SUPPORTED) + PNG_sBIT; +#endif +#if defined(PNG_READ_sCAL_SUPPORTED) + PNG_sCAL; +#endif +#if defined(PNG_READ_sRGB_SUPPORTED) + PNG_sRGB; +#endif +#if defined(PNG_READ_sPLT_SUPPORTED) + PNG_sPLT; +#endif +#if defined(PNG_READ_tEXt_SUPPORTED) + PNG_tEXt; +#endif +#if defined(PNG_READ_tIME_SUPPORTED) + PNG_tIME; +#endif +#if defined(PNG_READ_tRNS_SUPPORTED) + PNG_tRNS; +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + PNG_zTXt; +#endif +#endif /* PNG_USE_LOCAL_ARRAYS */ + /* First we make sure we have enough data for the 4 byte chunk name + * and the 4 byte chunk length before proceeding with decoding the + * chunk data. To fully decode each of these chunks, we also make + * sure we have enough data in the buffer for the 4 byte CRC at the + * end of every chunk (except IDAT, which is handled separately). + */ + if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) + { + png_byte chunk_length[4]; + + if (png_ptr->buffer_size < 8) + { + png_push_save_buffer(png_ptr); + return; + } + + png_push_fill_buffer(png_ptr, chunk_length, 4); + png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length); + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); + png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; + } + + if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length); + } + else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length); + + png_ptr->process_mode = PNG_READ_DONE_MODE; + png_push_have_end(png_ptr, info_ptr); + } +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED + else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + png_ptr->mode |= PNG_HAVE_IDAT; + png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length); + if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) + png_ptr->mode |= PNG_HAVE_PLTE; + else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + { + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before IDAT"); + else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && + !(png_ptr->mode & PNG_HAVE_PLTE)) + png_error(png_ptr, "Missing PLTE before IDAT"); + } + } +#endif + else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length); + } + else if (!png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) + { + /* If we reach an IDAT chunk, this means we have read all of the + * header chunks, and we can start reading the image (or if this + * is called after the image has been read - we have an error). + */ + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before IDAT"); + else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && + !(png_ptr->mode & PNG_HAVE_PLTE)) + png_error(png_ptr, "Missing PLTE before IDAT"); + + if (png_ptr->mode & PNG_HAVE_IDAT) + { + if (png_ptr->push_length == 0) + return; + + if (png_ptr->mode & PNG_AFTER_IDAT) + png_error(png_ptr, "Too many IDAT's found"); + } + + png_ptr->idat_size = png_ptr->push_length; + png_ptr->mode |= PNG_HAVE_IDAT; + png_ptr->process_mode = PNG_READ_IDAT_MODE; + png_push_have_info(png_ptr, info_ptr); + png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; + png_ptr->zstream.next_out = png_ptr->row_buf; + return; + } +#if defined(PNG_READ_gAMA_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_sBIT_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_cHRM_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_sRGB_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_iCCP_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_sPLT_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_tRNS_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_bKGD_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_hIST_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_pHYs_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_oFFs_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_pCAL_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_sCAL_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_tIME_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_tEXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_push_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_push_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length); + } +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length); + } +#endif + else + { + if (png_ptr->push_length + 4 > png_ptr->buffer_size) + { + png_push_save_buffer(png_ptr); + return; + } + png_push_handle_unknown(png_ptr, info_ptr, png_ptr->push_length); + } + + png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; +} + +void /* PRIVATE */ +png_push_crc_skip(png_structp png_ptr, png_uint_32 skip) +{ + png_ptr->process_mode = PNG_SKIP_MODE; + png_ptr->skip_length = skip; +} + +void /* PRIVATE */ +png_push_crc_finish(png_structp png_ptr) +{ + if (png_ptr->skip_length && png_ptr->save_buffer_size) + { + png_size_t save_size; + + if (png_ptr->skip_length < (png_uint_32)png_ptr->save_buffer_size) + save_size = (png_size_t)png_ptr->skip_length; + else + save_size = png_ptr->save_buffer_size; + + png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); + + png_ptr->skip_length -= save_size; + png_ptr->buffer_size -= save_size; + png_ptr->save_buffer_size -= save_size; + png_ptr->save_buffer_ptr += save_size; + } + if (png_ptr->skip_length && png_ptr->current_buffer_size) + { + png_size_t save_size; + + if (png_ptr->skip_length < (png_uint_32)png_ptr->current_buffer_size) + save_size = (png_size_t)png_ptr->skip_length; + else + save_size = png_ptr->current_buffer_size; + + png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); + + png_ptr->skip_length -= save_size; + png_ptr->buffer_size -= save_size; + png_ptr->current_buffer_size -= save_size; + png_ptr->current_buffer_ptr += save_size; + } + if (!png_ptr->skip_length) + { + if (png_ptr->buffer_size < 4) + { + png_push_save_buffer(png_ptr); + return; + } + + png_crc_finish(png_ptr, 0); + png_ptr->process_mode = PNG_READ_CHUNK_MODE; + } +} + +void PNGAPI +png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length) +{ + png_bytep ptr; + + ptr = buffer; + if (png_ptr->save_buffer_size) + { + png_size_t save_size; + + if (length < png_ptr->save_buffer_size) + save_size = length; + else + save_size = png_ptr->save_buffer_size; + + png_memcpy(ptr, png_ptr->save_buffer_ptr, save_size); + length -= save_size; + ptr += save_size; + png_ptr->buffer_size -= save_size; + png_ptr->save_buffer_size -= save_size; + png_ptr->save_buffer_ptr += save_size; + } + if (length && png_ptr->current_buffer_size) + { + png_size_t save_size; + + if (length < png_ptr->current_buffer_size) + save_size = length; + else + save_size = png_ptr->current_buffer_size; + + png_memcpy(ptr, png_ptr->current_buffer_ptr, save_size); + png_ptr->buffer_size -= save_size; + png_ptr->current_buffer_size -= save_size; + png_ptr->current_buffer_ptr += save_size; + } +} + +void /* PRIVATE */ +png_push_save_buffer(png_structp png_ptr) +{ + if (png_ptr->save_buffer_size) + { + if (png_ptr->save_buffer_ptr != png_ptr->save_buffer) + { + png_size_t i,istop; + png_bytep sp; + png_bytep dp; + + istop = png_ptr->save_buffer_size; + for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer; + i < istop; i++, sp++, dp++) + { + *dp = *sp; + } + } + } + if (png_ptr->save_buffer_size + png_ptr->current_buffer_size > + png_ptr->save_buffer_max) + { + png_size_t new_max; + png_bytep old_buffer; + + if (png_ptr->save_buffer_size > PNG_SIZE_MAX - + (png_ptr->current_buffer_size + 256)) + { + png_error(png_ptr, "Potential overflow of save_buffer"); + } + new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256; + old_buffer = png_ptr->save_buffer; + png_ptr->save_buffer = (png_bytep)png_malloc(png_ptr, + (png_uint_32)new_max); + png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size); + png_free(png_ptr, old_buffer); + png_ptr->save_buffer_max = new_max; + } + if (png_ptr->current_buffer_size) + { + png_memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size, + png_ptr->current_buffer_ptr, png_ptr->current_buffer_size); + png_ptr->save_buffer_size += png_ptr->current_buffer_size; + png_ptr->current_buffer_size = 0; + } + png_ptr->save_buffer_ptr = png_ptr->save_buffer; + png_ptr->buffer_size = 0; +} + +void /* PRIVATE */ +png_push_restore_buffer(png_structp png_ptr, png_bytep buffer, + png_size_t buffer_length) +{ + png_ptr->current_buffer = buffer; + png_ptr->current_buffer_size = buffer_length; + png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size; + png_ptr->current_buffer_ptr = png_ptr->current_buffer; +} + +void /* PRIVATE */ +png_push_read_IDAT(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IDAT; +#endif + if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) + { + png_byte chunk_length[4]; + + if (png_ptr->buffer_size < 8) + { + png_push_save_buffer(png_ptr); + return; + } + + png_push_fill_buffer(png_ptr, chunk_length, 4); + png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length); + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); + png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; + + if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) + { + png_ptr->process_mode = PNG_READ_CHUNK_MODE; + if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) + png_error(png_ptr, "Not enough compressed data"); + return; + } + + png_ptr->idat_size = png_ptr->push_length; + } + if (png_ptr->idat_size && png_ptr->save_buffer_size) + { + png_size_t save_size; + + if (png_ptr->idat_size < (png_uint_32)png_ptr->save_buffer_size) + { + save_size = (png_size_t)png_ptr->idat_size; + /* check for overflow */ + if((png_uint_32)save_size != png_ptr->idat_size) + png_error(png_ptr, "save_size overflowed in pngpread"); + } + else + save_size = png_ptr->save_buffer_size; + + png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); + if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) + png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size); + png_ptr->idat_size -= save_size; + png_ptr->buffer_size -= save_size; + png_ptr->save_buffer_size -= save_size; + png_ptr->save_buffer_ptr += save_size; + } + if (png_ptr->idat_size && png_ptr->current_buffer_size) + { + png_size_t save_size; + + if (png_ptr->idat_size < (png_uint_32)png_ptr->current_buffer_size) + { + save_size = (png_size_t)png_ptr->idat_size; + /* check for overflow */ + if((png_uint_32)save_size != png_ptr->idat_size) + png_error(png_ptr, "save_size overflowed in pngpread"); + } + else + save_size = png_ptr->current_buffer_size; + + png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); + if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) + png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size); + + png_ptr->idat_size -= save_size; + png_ptr->buffer_size -= save_size; + png_ptr->current_buffer_size -= save_size; + png_ptr->current_buffer_ptr += save_size; + } + if (!png_ptr->idat_size) + { + if (png_ptr->buffer_size < 4) + { + png_push_save_buffer(png_ptr); + return; + } + + png_crc_finish(png_ptr, 0); + png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; + png_ptr->mode |= PNG_AFTER_IDAT; + } +} + +void /* PRIVATE */ +png_process_IDAT_data(png_structp png_ptr, png_bytep buffer, + png_size_t buffer_length) +{ + int ret; + + if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length) + png_error(png_ptr, "Extra compression data"); + + png_ptr->zstream.next_in = buffer; + png_ptr->zstream.avail_in = (uInt)buffer_length; + for(;;) + { + ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); + if (ret != Z_OK) + { + if (ret == Z_STREAM_END) + { + if (png_ptr->zstream.avail_in) + png_error(png_ptr, "Extra compressed data"); + if (!(png_ptr->zstream.avail_out)) + { + png_push_process_row(png_ptr); + } + + png_ptr->mode |= PNG_AFTER_IDAT; + png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; + break; + } + else if (ret == Z_BUF_ERROR) + break; + else + png_error(png_ptr, "Decompression Error"); + } + if (!(png_ptr->zstream.avail_out)) + { + if (( +#if defined(PNG_READ_INTERLACING_SUPPORTED) + png_ptr->interlaced && png_ptr->pass > 6) || + (!png_ptr->interlaced && +#endif + png_ptr->row_number == png_ptr->num_rows)) + { + if (png_ptr->zstream.avail_in) + png_warning(png_ptr, "Too much data in IDAT chunks"); + png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; + break; + } + png_push_process_row(png_ptr); + png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; + png_ptr->zstream.next_out = png_ptr->row_buf; + } + else + break; + } +} + +void /* PRIVATE */ +png_push_process_row(png_structp png_ptr) +{ + png_ptr->row_info.color_type = png_ptr->color_type; + png_ptr->row_info.width = png_ptr->iwidth; + png_ptr->row_info.channels = png_ptr->channels; + png_ptr->row_info.bit_depth = png_ptr->bit_depth; + png_ptr->row_info.pixel_depth = png_ptr->pixel_depth; + + png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, + png_ptr->row_info.width); + + png_read_filter_row(png_ptr, &(png_ptr->row_info), + png_ptr->row_buf + 1, png_ptr->prev_row + 1, + (int)(png_ptr->row_buf[0])); + + png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf, + png_ptr->rowbytes + 1); + + if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA)) + png_do_read_transformations(png_ptr); + +#if defined(PNG_READ_INTERLACING_SUPPORTED) + /* blow up interlaced rows to full size */ + if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) + { + if (png_ptr->pass < 6) +/* old interface (pre-1.0.9): + png_do_read_interlace(&(png_ptr->row_info), + png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); + */ + png_do_read_interlace(png_ptr); + + switch (png_ptr->pass) + { + case 0: + { + int i; + for (i = 0; i < 8 && png_ptr->pass == 0; i++) + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); /* updates png_ptr->pass */ + } + if (png_ptr->pass == 2) /* pass 1 might be empty */ + { + for (i = 0; i < 4 && png_ptr->pass == 2; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + } + if (png_ptr->pass == 4 && png_ptr->height <= 4) + { + for (i = 0; i < 2 && png_ptr->pass == 4; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + } + if (png_ptr->pass == 6 && png_ptr->height <= 4) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + break; + } + case 1: + { + int i; + for (i = 0; i < 8 && png_ptr->pass == 1; i++) + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + } + if (png_ptr->pass == 2) /* skip top 4 generated rows */ + { + for (i = 0; i < 4 && png_ptr->pass == 2; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + } + break; + } + case 2: + { + int i; + for (i = 0; i < 4 && png_ptr->pass == 2; i++) + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + } + for (i = 0; i < 4 && png_ptr->pass == 2; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + if (png_ptr->pass == 4) /* pass 3 might be empty */ + { + for (i = 0; i < 2 && png_ptr->pass == 4; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + } + break; + } + case 3: + { + int i; + for (i = 0; i < 4 && png_ptr->pass == 3; i++) + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + } + if (png_ptr->pass == 4) /* skip top two generated rows */ + { + for (i = 0; i < 2 && png_ptr->pass == 4; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + } + break; + } + case 4: + { + int i; + for (i = 0; i < 2 && png_ptr->pass == 4; i++) + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + } + for (i = 0; i < 2 && png_ptr->pass == 4; i++) + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + if (png_ptr->pass == 6) /* pass 5 might be empty */ + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + break; + } + case 5: + { + int i; + for (i = 0; i < 2 && png_ptr->pass == 5; i++) + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + } + if (png_ptr->pass == 6) /* skip top generated row */ + { + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + break; + } + case 6: + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + if (png_ptr->pass != 6) + break; + png_push_have_row(png_ptr, png_bytep_NULL); + png_read_push_finish_row(png_ptr); + } + } + } + else +#endif + { + png_push_have_row(png_ptr, png_ptr->row_buf + 1); + png_read_push_finish_row(png_ptr); + } +} + +void /* PRIVATE */ +png_read_push_finish_row(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + + /* start of interlace block */ + const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; + + /* offset to next interlace block */ + const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; + + /* start of interlace block in the y direction */ + const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; + + /* offset to next interlace block in the y direction */ + const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; + + /* Width of interlace block. This is not currently used - if you need + * it, uncomment it here and in png.h + const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; + */ + + /* Height of interlace block. This is not currently used - if you need + * it, uncomment it here and in png.h + const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1}; + */ +#endif + + png_ptr->row_number++; + if (png_ptr->row_number < png_ptr->num_rows) + return; + + if (png_ptr->interlaced) + { + png_ptr->row_number = 0; + png_memset_check(png_ptr, png_ptr->prev_row, 0, + png_ptr->rowbytes + 1); + do + { + png_ptr->pass++; + if ((png_ptr->pass == 1 && png_ptr->width < 5) || + (png_ptr->pass == 3 && png_ptr->width < 3) || + (png_ptr->pass == 5 && png_ptr->width < 2)) + png_ptr->pass++; + + if (png_ptr->pass > 7) + png_ptr->pass--; + if (png_ptr->pass >= 7) + break; + + png_ptr->iwidth = (png_ptr->width + + png_pass_inc[png_ptr->pass] - 1 - + png_pass_start[png_ptr->pass]) / + png_pass_inc[png_ptr->pass]; + + png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, + png_ptr->iwidth) + 1; + + if (png_ptr->transformations & PNG_INTERLACE) + break; + + png_ptr->num_rows = (png_ptr->height + + png_pass_yinc[png_ptr->pass] - 1 - + png_pass_ystart[png_ptr->pass]) / + png_pass_yinc[png_ptr->pass]; + + } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0); + } +} + +#if defined(PNG_READ_tEXt_SUPPORTED) +void /* PRIVATE */ +png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 + length) +{ + if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) + { + png_error(png_ptr, "Out of place tEXt"); + /* to quiet some compiler warnings */ + if(info_ptr == NULL) return; + } + +#ifdef PNG_MAX_MALLOC_64K + png_ptr->skip_length = 0; /* This may not be necessary */ + + if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */ + { + png_warning(png_ptr, "tEXt chunk too large to fit in memory"); + png_ptr->skip_length = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + + png_ptr->current_text = (png_charp)png_malloc(png_ptr, + (png_uint_32)(length+1)); + png_ptr->current_text[length] = '\0'; + png_ptr->current_text_ptr = png_ptr->current_text; + png_ptr->current_text_size = (png_size_t)length; + png_ptr->current_text_left = (png_size_t)length; + png_ptr->process_mode = PNG_READ_tEXt_MODE; +} + +void /* PRIVATE */ +png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr->buffer_size && png_ptr->current_text_left) + { + png_size_t text_size; + + if (png_ptr->buffer_size < png_ptr->current_text_left) + text_size = png_ptr->buffer_size; + else + text_size = png_ptr->current_text_left; + png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size); + png_ptr->current_text_left -= text_size; + png_ptr->current_text_ptr += text_size; + } + if (!(png_ptr->current_text_left)) + { + png_textp text_ptr; + png_charp text; + png_charp key; + int ret; + + if (png_ptr->buffer_size < 4) + { + png_push_save_buffer(png_ptr); + return; + } + + png_push_crc_finish(png_ptr); + +#if defined(PNG_MAX_MALLOC_64K) + if (png_ptr->skip_length) + return; +#endif + + key = png_ptr->current_text; + + for (text = key; *text; text++) + /* empty loop */ ; + + if (text != key + png_ptr->current_text_size) + text++; + + text_ptr = (png_textp)png_malloc(png_ptr, + (png_uint_32)png_sizeof(png_text)); + text_ptr->compression = PNG_TEXT_COMPRESSION_NONE; + text_ptr->key = key; +#ifdef PNG_iTXt_SUPPORTED + text_ptr->lang = NULL; + text_ptr->lang_key = NULL; +#endif + text_ptr->text = text; + + ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1); + + png_free(png_ptr, key); + png_free(png_ptr, text_ptr); + png_ptr->current_text = NULL; + + if (ret) + png_warning(png_ptr, "Insufficient memory to store text chunk."); + } +} +#endif + +#if defined(PNG_READ_zTXt_SUPPORTED) +void /* PRIVATE */ +png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 + length) +{ + if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) + { + png_error(png_ptr, "Out of place zTXt"); + /* to quiet some compiler warnings */ + if(info_ptr == NULL) return; + } + +#ifdef PNG_MAX_MALLOC_64K + /* We can't handle zTXt chunks > 64K, since we don't have enough space + * to be able to store the uncompressed data. Actually, the threshold + * is probably around 32K, but it isn't as definite as 64K is. + */ + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr, "zTXt chunk too large to fit in memory"); + png_push_crc_skip(png_ptr, length); + return; + } +#endif + + png_ptr->current_text = (png_charp)png_malloc(png_ptr, + (png_uint_32)(length+1)); + png_ptr->current_text[length] = '\0'; + png_ptr->current_text_ptr = png_ptr->current_text; + png_ptr->current_text_size = (png_size_t)length; + png_ptr->current_text_left = (png_size_t)length; + png_ptr->process_mode = PNG_READ_zTXt_MODE; +} + +void /* PRIVATE */ +png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr->buffer_size && png_ptr->current_text_left) + { + png_size_t text_size; + + if (png_ptr->buffer_size < (png_uint_32)png_ptr->current_text_left) + text_size = png_ptr->buffer_size; + else + text_size = png_ptr->current_text_left; + png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size); + png_ptr->current_text_left -= text_size; + png_ptr->current_text_ptr += text_size; + } + if (!(png_ptr->current_text_left)) + { + png_textp text_ptr; + png_charp text; + png_charp key; + int ret; + png_size_t text_size, key_size; + + if (png_ptr->buffer_size < 4) + { + png_push_save_buffer(png_ptr); + return; + } + + png_push_crc_finish(png_ptr); + + key = png_ptr->current_text; + + for (text = key; *text; text++) + /* empty loop */ ; + + /* zTXt can't have zero text */ + if (text == key + png_ptr->current_text_size) + { + png_ptr->current_text = NULL; + png_free(png_ptr, key); + return; + } + + text++; + + if (*text != PNG_TEXT_COMPRESSION_zTXt) /* check compression byte */ + { + png_ptr->current_text = NULL; + png_free(png_ptr, key); + return; + } + + text++; + + png_ptr->zstream.next_in = (png_bytep )text; + png_ptr->zstream.avail_in = (uInt)(png_ptr->current_text_size - + (text - key)); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + + key_size = text - key; + text_size = 0; + text = NULL; + ret = Z_STREAM_END; + + while (png_ptr->zstream.avail_in) + { + ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); + if (ret != Z_OK && ret != Z_STREAM_END) + { + inflateReset(&png_ptr->zstream); + png_ptr->zstream.avail_in = 0; + png_ptr->current_text = NULL; + png_free(png_ptr, key); + png_free(png_ptr, text); + return; + } + if (!(png_ptr->zstream.avail_out) || ret == Z_STREAM_END) + { + if (text == NULL) + { + text = (png_charp)png_malloc(png_ptr, + (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out + + key_size + 1)); + png_memcpy(text + key_size, png_ptr->zbuf, + png_ptr->zbuf_size - png_ptr->zstream.avail_out); + png_memcpy(text, key, key_size); + text_size = key_size + png_ptr->zbuf_size - + png_ptr->zstream.avail_out; + *(text + text_size) = '\0'; + } + else + { + png_charp tmp; + + tmp = text; + text = (png_charp)png_malloc(png_ptr, text_size + + (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out + + 1)); + png_memcpy(text, tmp, text_size); + png_free(png_ptr, tmp); + png_memcpy(text + text_size, png_ptr->zbuf, + png_ptr->zbuf_size - png_ptr->zstream.avail_out); + text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out; + *(text + text_size) = '\0'; + } + if (ret != Z_STREAM_END) + { + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + } + } + else + { + break; + } + + if (ret == Z_STREAM_END) + break; + } + + inflateReset(&png_ptr->zstream); + png_ptr->zstream.avail_in = 0; + + if (ret != Z_STREAM_END) + { + png_ptr->current_text = NULL; + png_free(png_ptr, key); + png_free(png_ptr, text); + return; + } + + png_ptr->current_text = NULL; + png_free(png_ptr, key); + key = text; + text += key_size; + + text_ptr = (png_textp)png_malloc(png_ptr, + (png_uint_32)png_sizeof(png_text)); + text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt; + text_ptr->key = key; +#ifdef PNG_iTXt_SUPPORTED + text_ptr->lang = NULL; + text_ptr->lang_key = NULL; +#endif + text_ptr->text = text; + + ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1); + + png_free(png_ptr, key); + png_free(png_ptr, text_ptr); + + if (ret) + png_warning(png_ptr, "Insufficient memory to store text chunk."); + } +} +#endif + +#if defined(PNG_READ_iTXt_SUPPORTED) +void /* PRIVATE */ +png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 + length) +{ + if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) + { + png_error(png_ptr, "Out of place iTXt"); + /* to quiet some compiler warnings */ + if(info_ptr == NULL) return; + } + +#ifdef PNG_MAX_MALLOC_64K + png_ptr->skip_length = 0; /* This may not be necessary */ + + if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */ + { + png_warning(png_ptr, "iTXt chunk too large to fit in memory"); + png_ptr->skip_length = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + + png_ptr->current_text = (png_charp)png_malloc(png_ptr, + (png_uint_32)(length+1)); + png_ptr->current_text[length] = '\0'; + png_ptr->current_text_ptr = png_ptr->current_text; + png_ptr->current_text_size = (png_size_t)length; + png_ptr->current_text_left = (png_size_t)length; + png_ptr->process_mode = PNG_READ_iTXt_MODE; +} + +void /* PRIVATE */ +png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr) +{ + + if (png_ptr->buffer_size && png_ptr->current_text_left) + { + png_size_t text_size; + + if (png_ptr->buffer_size < png_ptr->current_text_left) + text_size = png_ptr->buffer_size; + else + text_size = png_ptr->current_text_left; + png_crc_read(png_ptr, (png_bytep)png_ptr->current_text_ptr, text_size); + png_ptr->current_text_left -= text_size; + png_ptr->current_text_ptr += text_size; + } + if (!(png_ptr->current_text_left)) + { + png_textp text_ptr; + png_charp key; + int comp_flag; + png_charp lang; + png_charp lang_key; + png_charp text; + int ret; + + if (png_ptr->buffer_size < 4) + { + png_push_save_buffer(png_ptr); + return; + } + + png_push_crc_finish(png_ptr); + +#if defined(PNG_MAX_MALLOC_64K) + if (png_ptr->skip_length) + return; +#endif + + key = png_ptr->current_text; + + for (lang = key; *lang; lang++) + /* empty loop */ ; + + if (lang != key + png_ptr->current_text_size) + lang++; + + comp_flag = *lang++; + lang++; /* skip comp_type, always zero */ + + for (lang_key = lang; *lang_key; lang_key++) + /* empty loop */ ; + lang_key++; /* skip NUL separator */ + + for (text = lang_key; *text; text++) + /* empty loop */ ; + + if (text != key + png_ptr->current_text_size) + text++; + + text_ptr = (png_textp)png_malloc(png_ptr, + (png_uint_32)png_sizeof(png_text)); + text_ptr->compression = comp_flag + 2; + text_ptr->key = key; + text_ptr->lang = lang; + text_ptr->lang_key = lang_key; + text_ptr->text = text; + text_ptr->text_length = 0; + text_ptr->itxt_length = png_strlen(text); + + ret = png_set_text_2(png_ptr, info_ptr, text_ptr, 1); + + png_ptr->current_text = NULL; + + png_free(png_ptr, text_ptr); + if (ret) + png_warning(png_ptr, "Insufficient memory to store iTXt chunk."); + } +} +#endif + +/* This function is called when we haven't found a handler for this + * chunk. If there isn't a problem with the chunk itself (ie a bad chunk + * name or a critical chunk), the chunk is (currently) silently ignored. + */ +void /* PRIVATE */ +png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 + length) +{ + png_uint_32 skip=0; + png_check_chunk_name(png_ptr, png_ptr->chunk_name); + + if (!(png_ptr->chunk_name[0] & 0x20)) + { +#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) + if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != + PNG_HANDLE_CHUNK_ALWAYS +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) + && png_ptr->read_user_chunk_fn == NULL +#endif + ) +#endif + png_chunk_error(png_ptr, "unknown critical chunk"); + + /* to quiet compiler warnings about unused info_ptr */ + if (info_ptr == NULL) + return; + } + +#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) + if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) + { + png_unknown_chunk chunk; + +#ifdef PNG_MAX_MALLOC_64K + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr, "unknown chunk too large to fit in memory"); + skip = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + + png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name); + chunk.data = (png_bytep)png_malloc(png_ptr, length); + png_crc_read(png_ptr, chunk.data, length); + chunk.size = length; +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) + if(png_ptr->read_user_chunk_fn != NULL) + { + /* callback to user unknown chunk handler */ + if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0) + { + if (!(png_ptr->chunk_name[0] & 0x20)) + if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != + PNG_HANDLE_CHUNK_ALWAYS) + png_chunk_error(png_ptr, "unknown critical chunk"); + } + png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); + } + else +#endif + png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); + png_free(png_ptr, chunk.data); + } + else +#endif + skip=length; + png_push_crc_skip(png_ptr, skip); +} + +void /* PRIVATE */ +png_push_have_info(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr->info_fn != NULL) + (*(png_ptr->info_fn))(png_ptr, info_ptr); +} + +void /* PRIVATE */ +png_push_have_end(png_structp png_ptr, png_infop info_ptr) +{ + if (png_ptr->end_fn != NULL) + (*(png_ptr->end_fn))(png_ptr, info_ptr); +} + +void /* PRIVATE */ +png_push_have_row(png_structp png_ptr, png_bytep row) +{ + if (png_ptr->row_fn != NULL) + (*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number, + (int)png_ptr->pass); +} + +void PNGAPI +png_progressive_combine_row (png_structp png_ptr, + png_bytep old_row, png_bytep new_row) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + const int FARDATA png_pass_dsp_mask[7] = + {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; +#endif + if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */ + png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]); +} + +void PNGAPI +png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr, + png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, + png_progressive_end_ptr end_fn) +{ + png_ptr->info_fn = info_fn; + png_ptr->row_fn = row_fn; + png_ptr->end_fn = end_fn; + + png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); +} + +png_voidp PNGAPI +png_get_progressive_ptr(png_structp png_ptr) +{ + return png_ptr->io_ptr; +} +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ diff --git a/libpng/pngread.c b/libpng/pngread.c new file mode 100644 index 0000000..5924333 --- /dev/null +++ b/libpng/pngread.c @@ -0,0 +1,1456 @@ + +/* pngread.c - read a PNG file + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file contains routines that an application calls directly to + * read a PNG file or stream. + */ + +#define PNG_INTERNAL +#include "png.h" + +/* Create a PNG structure for reading, and allocate any memory needed. */ +png_structp PNGAPI +png_create_read_struct(png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn) +{ + +#ifdef PNG_USER_MEM_SUPPORTED + return (png_create_read_struct_2(user_png_ver, error_ptr, error_fn, + warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL)); +} + +/* Alternate create PNG structure for reading, and allocate any memory needed. */ +png_structp PNGAPI +png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn) +{ +#endif /* PNG_USER_MEM_SUPPORTED */ + + png_structp png_ptr; + +#ifdef PNG_SETJMP_SUPPORTED +#ifdef USE_FAR_KEYWORD + jmp_buf jmpbuf; +#endif +#endif + + int i; + + png_debug(1, "in png_create_read_struct\n"); +#ifdef PNG_USER_MEM_SUPPORTED + png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG, + (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr); +#else + png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); +#endif + if (png_ptr == NULL) + return (NULL); + +#if !defined(PNG_1_0_X) +#ifdef PNG_ASSEMBLER_CODE_SUPPORTED + png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ +#endif +#endif /* PNG_1_0_X */ + + /* added at libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + png_ptr->user_width_max=PNG_USER_WIDTH_MAX; + png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; +#endif + +#ifdef PNG_SETJMP_SUPPORTED +#ifdef USE_FAR_KEYWORD + if (setjmp(jmpbuf)) +#else + if (setjmp(png_ptr->jmpbuf)) +#endif + { + png_free(png_ptr, png_ptr->zbuf); + png_ptr->zbuf=NULL; +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)png_ptr, + (png_free_ptr)free_fn, (png_voidp)mem_ptr); +#else + png_destroy_struct((png_voidp)png_ptr); +#endif + return (NULL); + } +#ifdef USE_FAR_KEYWORD + png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); +#endif +#endif + +#ifdef PNG_USER_MEM_SUPPORTED + png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn); +#endif + + png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn); + + i=0; + do + { + if(user_png_ver[i] != png_libpng_ver[i]) + png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; + } while (png_libpng_ver[i++]); + + if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH) + { + /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so + * we must recompile any applications that use any older library version. + * For versions after libpng 1.0, we will be compatible, so we need + * only check the first digit. + */ + if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] || + (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) || + (user_png_ver[0] == '0' && user_png_ver[2] < '9')) + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char msg[80]; + if (user_png_ver) + { + sprintf(msg, "Application was compiled with png.h from libpng-%.20s", + user_png_ver); + png_warning(png_ptr, msg); + } + sprintf(msg, "Application is running with png.c from libpng-%.20s", + png_libpng_ver); + png_warning(png_ptr, msg); +#endif +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + png_ptr->flags=0; +#endif + png_error(png_ptr, + "Incompatible libpng version in application and library"); + } + } + + /* initialize zbuf - compression buffer */ + png_ptr->zbuf_size = PNG_ZBUF_SIZE; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, + (png_uint_32)png_ptr->zbuf_size); + png_ptr->zstream.zalloc = png_zalloc; + png_ptr->zstream.zfree = png_zfree; + png_ptr->zstream.opaque = (voidpf)png_ptr; + + switch (inflateInit(&png_ptr->zstream)) + { + case Z_OK: /* Do nothing */ break; + case Z_MEM_ERROR: + case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error"); break; + case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error"); break; + default: png_error(png_ptr, "Unknown zlib error"); + } + + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + + png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL); + +#ifdef PNG_SETJMP_SUPPORTED +/* Applications that neglect to set up their own setjmp() and then encounter + a png_error() will longjmp here. Since the jmpbuf is then meaningless we + abort instead of returning. */ +#ifdef USE_FAR_KEYWORD + if (setjmp(jmpbuf)) + PNG_ABORT(); + png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); +#else + if (setjmp(png_ptr->jmpbuf)) + PNG_ABORT(); +#endif +#endif + return (png_ptr); +} + +/* Initialize PNG structure for reading, and allocate any memory needed. + This interface is deprecated in favour of the png_create_read_struct(), + and it will eventually disappear. */ +#if defined(PNG_1_0_X) || defined (PNG_1_2_X) +#undef png_read_init +void PNGAPI +png_read_init(png_structp png_ptr) +{ + /* We only come here via pre-1.0.7-compiled applications */ + png_read_init_2(png_ptr, "1.0.6 or earlier", 0, 0); +} +#endif + +void PNGAPI +png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver, + png_size_t png_struct_size, png_size_t png_info_size) +{ + /* We only come here via pre-1.0.12-compiled applications */ +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + if(png_sizeof(png_struct) > png_struct_size || + png_sizeof(png_info) > png_info_size) + { + char msg[80]; + png_ptr->warning_fn=NULL; + if (user_png_ver) + { + sprintf(msg, "Application was compiled with png.h from libpng-%.20s", + user_png_ver); + png_warning(png_ptr, msg); + } + sprintf(msg, "Application is running with png.c from libpng-%.20s", + png_libpng_ver); + png_warning(png_ptr, msg); + } +#endif + if(png_sizeof(png_struct) > png_struct_size) + { + png_ptr->error_fn=NULL; +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + png_ptr->flags=0; +#endif + png_error(png_ptr, + "The png struct allocated by the application for reading is too small."); + } + if(png_sizeof(png_info) > png_info_size) + { + png_ptr->error_fn=NULL; +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + png_ptr->flags=0; +#endif + png_error(png_ptr, + "The info struct allocated by application for reading is too small."); + } + png_read_init_3(&png_ptr, user_png_ver, png_struct_size); +} + +void PNGAPI +png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver, + png_size_t png_struct_size) +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf tmp_jmp; /* to save current jump buffer */ +#endif + + int i=0; + + png_structp png_ptr=*ptr_ptr; + + do + { + if(user_png_ver[i] != png_libpng_ver[i]) + { +#ifdef PNG_LEGACY_SUPPORTED + png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; +#else + png_ptr->warning_fn=NULL; + png_warning(png_ptr, + "Application uses deprecated png_read_init() and should be recompiled."); + break; +#endif + } + } while (png_libpng_ver[i++]); + + png_debug(1, "in png_read_init_3\n"); + +#ifdef PNG_SETJMP_SUPPORTED + /* save jump buffer and error functions */ + png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); +#endif + + if(png_sizeof(png_struct) > png_struct_size) + { + png_destroy_struct(png_ptr); + *ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); + png_ptr = *ptr_ptr; + } + + /* reset all variables to 0 */ + png_memset(png_ptr, 0, png_sizeof (png_struct)); + +#ifdef PNG_SETJMP_SUPPORTED + /* restore jump buffer */ + png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); +#endif + + /* added at libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + png_ptr->user_width_max=PNG_USER_WIDTH_MAX; + png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; +#endif + + /* initialize zbuf - compression buffer */ + png_ptr->zbuf_size = PNG_ZBUF_SIZE; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, + (png_uint_32)png_ptr->zbuf_size); + png_ptr->zstream.zalloc = png_zalloc; + png_ptr->zstream.zfree = png_zfree; + png_ptr->zstream.opaque = (voidpf)png_ptr; + + switch (inflateInit(&png_ptr->zstream)) + { + case Z_OK: /* Do nothing */ break; + case Z_MEM_ERROR: + case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory"); break; + case Z_VERSION_ERROR: png_error(png_ptr, "zlib version"); break; + default: png_error(png_ptr, "Unknown zlib error"); + } + + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + + png_set_read_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL); +} + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* Read the information before the actual image data. This has been + * changed in v0.90 to allow reading a file that already has the magic + * bytes read from the stream. You can tell libpng how many bytes have + * been read from the beginning of the stream (up to the maximum of 8) + * via png_set_sig_bytes(), and we will only check the remaining bytes + * here. The application can then have access to the signature bytes we + * read if it is determined that this isn't a valid PNG file. + */ +void PNGAPI +png_read_info(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_read_info\n"); + /* If we haven't checked all of the PNG signature bytes, do so now. */ + if (png_ptr->sig_bytes < 8) + { + png_size_t num_checked = png_ptr->sig_bytes, + num_to_check = 8 - num_checked; + + png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check); + png_ptr->sig_bytes = 8; + + if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) + { + if (num_checked < 4 && + png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) + png_error(png_ptr, "Not a PNG file"); + else + png_error(png_ptr, "PNG file corrupted by ASCII conversion"); + } + if (num_checked < 3) + png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE; + } + + for(;;) + { +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IHDR; + PNG_IDAT; + PNG_IEND; + PNG_PLTE; +#if defined(PNG_READ_bKGD_SUPPORTED) + PNG_bKGD; +#endif +#if defined(PNG_READ_cHRM_SUPPORTED) + PNG_cHRM; +#endif +#if defined(PNG_READ_gAMA_SUPPORTED) + PNG_gAMA; +#endif +#if defined(PNG_READ_hIST_SUPPORTED) + PNG_hIST; +#endif +#if defined(PNG_READ_iCCP_SUPPORTED) + PNG_iCCP; +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + PNG_iTXt; +#endif +#if defined(PNG_READ_oFFs_SUPPORTED) + PNG_oFFs; +#endif +#if defined(PNG_READ_pCAL_SUPPORTED) + PNG_pCAL; +#endif +#if defined(PNG_READ_pHYs_SUPPORTED) + PNG_pHYs; +#endif +#if defined(PNG_READ_sBIT_SUPPORTED) + PNG_sBIT; +#endif +#if defined(PNG_READ_sCAL_SUPPORTED) + PNG_sCAL; +#endif +#if defined(PNG_READ_sPLT_SUPPORTED) + PNG_sPLT; +#endif +#if defined(PNG_READ_sRGB_SUPPORTED) + PNG_sRGB; +#endif +#if defined(PNG_READ_tEXt_SUPPORTED) + PNG_tEXt; +#endif +#if defined(PNG_READ_tIME_SUPPORTED) + PNG_tIME; +#endif +#if defined(PNG_READ_tRNS_SUPPORTED) + PNG_tRNS; +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + PNG_zTXt; +#endif +#endif /* PNG_USE_LOCAL_ARRAYS */ + png_byte chunk_length[4]; + png_uint_32 length; + + png_read_data(png_ptr, chunk_length, 4); + length = png_get_uint_31(png_ptr,chunk_length); + + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); + + png_debug2(0, "Reading %s chunk, length=%lu.\n", png_ptr->chunk_name, + length); + + /* This should be a binary subdivision search or a hash for + * matching the chunk name rather than a linear search. + */ + if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) + png_handle_IHDR(png_ptr, info_ptr, length); + else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) + png_handle_IEND(png_ptr, info_ptr, length); +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED + else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) + { + if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + png_ptr->mode |= PNG_HAVE_IDAT; + png_handle_unknown(png_ptr, info_ptr, length); + if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) + png_ptr->mode |= PNG_HAVE_PLTE; + else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + { + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before IDAT"); + else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && + !(png_ptr->mode & PNG_HAVE_PLTE)) + png_error(png_ptr, "Missing PLTE before IDAT"); + break; + } + } +#endif + else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) + png_handle_PLTE(png_ptr, info_ptr, length); + else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + { + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before IDAT"); + else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && + !(png_ptr->mode & PNG_HAVE_PLTE)) + png_error(png_ptr, "Missing PLTE before IDAT"); + + png_ptr->idat_size = length; + png_ptr->mode |= PNG_HAVE_IDAT; + break; + } +#if defined(PNG_READ_bKGD_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) + png_handle_bKGD(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_cHRM_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) + png_handle_cHRM(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_gAMA_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) + png_handle_gAMA(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_hIST_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) + png_handle_hIST(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_oFFs_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) + png_handle_oFFs(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_pCAL_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) + png_handle_pCAL(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sCAL_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) + png_handle_sCAL(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_pHYs_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) + png_handle_pHYs(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sBIT_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) + png_handle_sBIT(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sRGB_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) + png_handle_sRGB(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_iCCP_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) + png_handle_iCCP(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sPLT_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) + png_handle_sPLT(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_tEXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) + png_handle_tEXt(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_tIME_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) + png_handle_tIME(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_tRNS_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) + png_handle_tRNS(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) + png_handle_zTXt(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) + png_handle_iTXt(png_ptr, info_ptr, length); +#endif + else + png_handle_unknown(png_ptr, info_ptr, length); + } +} +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ + +/* optional call to update the users info_ptr structure */ +void PNGAPI +png_read_update_info(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_read_update_info\n"); + if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) + png_read_start_row(png_ptr); + else + png_warning(png_ptr, + "Ignoring extra png_read_update_info() call; row buffer not reallocated"); + png_read_transform_info(png_ptr, info_ptr); +} + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* Initialize palette, background, etc, after transformations + * are set, but before any reading takes place. This allows + * the user to obtain a gamma-corrected palette, for example. + * If the user doesn't call this, we will do it ourselves. + */ +void PNGAPI +png_start_read_image(png_structp png_ptr) +{ + png_debug(1, "in png_start_read_image\n"); + if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) + png_read_start_row(png_ptr); +} +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +void PNGAPI +png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IDAT; + const int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; + const int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff}; +#endif + int ret; + png_debug2(1, "in png_read_row (row %lu, pass %d)\n", + png_ptr->row_number, png_ptr->pass); + if (!(png_ptr->flags & PNG_FLAG_ROW_INIT)) + png_read_start_row(png_ptr); + if (png_ptr->row_number == 0 && png_ptr->pass == 0) + { + /* check for transforms that have been set but were defined out */ +#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_MONO) + png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined."); +#endif +#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED) + if (png_ptr->transformations & PNG_FILLER) + png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined."); +#endif +#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && !defined(PNG_READ_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined."); +#endif +#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED) + if (png_ptr->transformations & PNG_PACK) + png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined."); +#endif +#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) + if (png_ptr->transformations & PNG_SHIFT) + png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined."); +#endif +#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED) + if (png_ptr->transformations & PNG_BGR) + png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined."); +#endif +#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED) + if (png_ptr->transformations & PNG_SWAP_BYTES) + png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined."); +#endif + } + +#if defined(PNG_READ_INTERLACING_SUPPORTED) + /* if interlaced and we do not need a new row, combine row and return */ + if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) + { + switch (png_ptr->pass) + { + case 0: + if (png_ptr->row_number & 0x07) + { + if (dsp_row != NULL) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + png_read_finish_row(png_ptr); + return; + } + break; + case 1: + if ((png_ptr->row_number & 0x07) || png_ptr->width < 5) + { + if (dsp_row != NULL) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + png_read_finish_row(png_ptr); + return; + } + break; + case 2: + if ((png_ptr->row_number & 0x07) != 4) + { + if (dsp_row != NULL && (png_ptr->row_number & 4)) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + png_read_finish_row(png_ptr); + return; + } + break; + case 3: + if ((png_ptr->row_number & 3) || png_ptr->width < 3) + { + if (dsp_row != NULL) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + png_read_finish_row(png_ptr); + return; + } + break; + case 4: + if ((png_ptr->row_number & 3) != 2) + { + if (dsp_row != NULL && (png_ptr->row_number & 2)) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + png_read_finish_row(png_ptr); + return; + } + break; + case 5: + if ((png_ptr->row_number & 1) || png_ptr->width < 2) + { + if (dsp_row != NULL) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + png_read_finish_row(png_ptr); + return; + } + break; + case 6: + if (!(png_ptr->row_number & 1)) + { + png_read_finish_row(png_ptr); + return; + } + break; + } + } +#endif + + if (!(png_ptr->mode & PNG_HAVE_IDAT)) + png_error(png_ptr, "Invalid attempt to read row data"); + + png_ptr->zstream.next_out = png_ptr->row_buf; + png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes; + do + { + if (!(png_ptr->zstream.avail_in)) + { + while (!png_ptr->idat_size) + { + png_byte chunk_length[4]; + + png_crc_finish(png_ptr, 0); + + png_read_data(png_ptr, chunk_length, 4); + png_ptr->idat_size = png_get_uint_31(png_ptr,chunk_length); + + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); + if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + png_error(png_ptr, "Not enough image data"); + } + png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; + png_ptr->zstream.next_in = png_ptr->zbuf; + if (png_ptr->zbuf_size > png_ptr->idat_size) + png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size; + png_crc_read(png_ptr, png_ptr->zbuf, + (png_size_t)png_ptr->zstream.avail_in); + png_ptr->idat_size -= png_ptr->zstream.avail_in; + } + ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); + if (ret == Z_STREAM_END) + { + if (png_ptr->zstream.avail_out || png_ptr->zstream.avail_in || + png_ptr->idat_size) + png_error(png_ptr, "Extra compressed data"); + png_ptr->mode |= PNG_AFTER_IDAT; + png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; + break; + } + if (ret != Z_OK) + png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg : + "Decompression error"); + + } while (png_ptr->zstream.avail_out); + + png_ptr->row_info.color_type = png_ptr->color_type; + png_ptr->row_info.width = png_ptr->iwidth; + png_ptr->row_info.channels = png_ptr->channels; + png_ptr->row_info.bit_depth = png_ptr->bit_depth; + png_ptr->row_info.pixel_depth = png_ptr->pixel_depth; + png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, + png_ptr->row_info.width); + + if(png_ptr->row_buf[0]) + png_read_filter_row(png_ptr, &(png_ptr->row_info), + png_ptr->row_buf + 1, png_ptr->prev_row + 1, + (int)(png_ptr->row_buf[0])); + + png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf, + png_ptr->rowbytes + 1); + +#if defined(PNG_MNG_FEATURES_SUPPORTED) + if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && + (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING)) + { + /* Intrapixel differencing */ + png_do_read_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1); + } +#endif + + + if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA)) + png_do_read_transformations(png_ptr); + +#if defined(PNG_READ_INTERLACING_SUPPORTED) + /* blow up interlaced rows to full size */ + if (png_ptr->interlaced && + (png_ptr->transformations & PNG_INTERLACE)) + { + if (png_ptr->pass < 6) +/* old interface (pre-1.0.9): + png_do_read_interlace(&(png_ptr->row_info), + png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); + */ + png_do_read_interlace(png_ptr); + + if (dsp_row != NULL) + png_combine_row(png_ptr, dsp_row, + png_pass_dsp_mask[png_ptr->pass]); + if (row != NULL) + png_combine_row(png_ptr, row, + png_pass_mask[png_ptr->pass]); + } + else +#endif + { + if (row != NULL) + png_combine_row(png_ptr, row, 0xff); + if (dsp_row != NULL) + png_combine_row(png_ptr, dsp_row, 0xff); + } + png_read_finish_row(png_ptr); + + if (png_ptr->read_row_fn != NULL) + (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass); +} +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* Read one or more rows of image data. If the image is interlaced, + * and png_set_interlace_handling() has been called, the rows need to + * contain the contents of the rows from the previous pass. If the + * image has alpha or transparency, and png_handle_alpha()[*] has been + * called, the rows contents must be initialized to the contents of the + * screen. + * + * "row" holds the actual image, and pixels are placed in it + * as they arrive. If the image is displayed after each pass, it will + * appear to "sparkle" in. "display_row" can be used to display a + * "chunky" progressive image, with finer detail added as it becomes + * available. If you do not want this "chunky" display, you may pass + * NULL for display_row. If you do not want the sparkle display, and + * you have not called png_handle_alpha(), you may pass NULL for rows. + * If you have called png_handle_alpha(), and the image has either an + * alpha channel or a transparency chunk, you must provide a buffer for + * rows. In this case, you do not have to provide a display_row buffer + * also, but you may. If the image is not interlaced, or if you have + * not called png_set_interlace_handling(), the display_row buffer will + * be ignored, so pass NULL to it. + * + * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8 + */ + +void PNGAPI +png_read_rows(png_structp png_ptr, png_bytepp row, + png_bytepp display_row, png_uint_32 num_rows) +{ + png_uint_32 i; + png_bytepp rp; + png_bytepp dp; + + png_debug(1, "in png_read_rows\n"); + rp = row; + dp = display_row; + if (rp != NULL && dp != NULL) + for (i = 0; i < num_rows; i++) + { + png_bytep rptr = *rp++; + png_bytep dptr = *dp++; + + png_read_row(png_ptr, rptr, dptr); + } + else if(rp != NULL) + for (i = 0; i < num_rows; i++) + { + png_bytep rptr = *rp; + png_read_row(png_ptr, rptr, png_bytep_NULL); + rp++; + } + else if(dp != NULL) + for (i = 0; i < num_rows; i++) + { + png_bytep dptr = *dp; + png_read_row(png_ptr, png_bytep_NULL, dptr); + dp++; + } +} +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* Read the entire image. If the image has an alpha channel or a tRNS + * chunk, and you have called png_handle_alpha()[*], you will need to + * initialize the image to the current image that PNG will be overlaying. + * We set the num_rows again here, in case it was incorrectly set in + * png_read_start_row() by a call to png_read_update_info() or + * png_start_read_image() if png_set_interlace_handling() wasn't called + * prior to either of these functions like it should have been. You can + * only call this function once. If you desire to have an image for + * each pass of a interlaced image, use png_read_rows() instead. + * + * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8 + */ +void PNGAPI +png_read_image(png_structp png_ptr, png_bytepp image) +{ + png_uint_32 i,image_height; + int pass, j; + png_bytepp rp; + + png_debug(1, "in png_read_image\n"); + +#ifdef PNG_READ_INTERLACING_SUPPORTED + pass = png_set_interlace_handling(png_ptr); +#else + if (png_ptr->interlaced) + png_error(png_ptr, + "Cannot read interlaced image -- interlace handler disabled."); + pass = 1; +#endif + + + image_height=png_ptr->height; + png_ptr->num_rows = image_height; /* Make sure this is set correctly */ + + for (j = 0; j < pass; j++) + { + rp = image; + for (i = 0; i < image_height; i++) + { + png_read_row(png_ptr, *rp, png_bytep_NULL); + rp++; + } + } +} +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +/* Read the end of the PNG file. Will not read past the end of the + * file, will verify the end is accurate, and will read any comments + * or time information at the end of the file, if info is not NULL. + */ +void PNGAPI +png_read_end(png_structp png_ptr, png_infop info_ptr) +{ + png_byte chunk_length[4]; + png_uint_32 length; + + png_debug(1, "in png_read_end\n"); + png_crc_finish(png_ptr, 0); /* Finish off CRC from last IDAT chunk */ + + do + { +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IHDR; + PNG_IDAT; + PNG_IEND; + PNG_PLTE; +#if defined(PNG_READ_bKGD_SUPPORTED) + PNG_bKGD; +#endif +#if defined(PNG_READ_cHRM_SUPPORTED) + PNG_cHRM; +#endif +#if defined(PNG_READ_gAMA_SUPPORTED) + PNG_gAMA; +#endif +#if defined(PNG_READ_hIST_SUPPORTED) + PNG_hIST; +#endif +#if defined(PNG_READ_iCCP_SUPPORTED) + PNG_iCCP; +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + PNG_iTXt; +#endif +#if defined(PNG_READ_oFFs_SUPPORTED) + PNG_oFFs; +#endif +#if defined(PNG_READ_pCAL_SUPPORTED) + PNG_pCAL; +#endif +#if defined(PNG_READ_pHYs_SUPPORTED) + PNG_pHYs; +#endif +#if defined(PNG_READ_sBIT_SUPPORTED) + PNG_sBIT; +#endif +#if defined(PNG_READ_sCAL_SUPPORTED) + PNG_sCAL; +#endif +#if defined(PNG_READ_sPLT_SUPPORTED) + PNG_sPLT; +#endif +#if defined(PNG_READ_sRGB_SUPPORTED) + PNG_sRGB; +#endif +#if defined(PNG_READ_tEXt_SUPPORTED) + PNG_tEXt; +#endif +#if defined(PNG_READ_tIME_SUPPORTED) + PNG_tIME; +#endif +#if defined(PNG_READ_tRNS_SUPPORTED) + PNG_tRNS; +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + PNG_zTXt; +#endif +#endif /* PNG_USE_LOCAL_ARRAYS */ + + png_read_data(png_ptr, chunk_length, 4); + length = png_get_uint_31(png_ptr,chunk_length); + + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); + + png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name); + + if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) + png_handle_IHDR(png_ptr, info_ptr, length); + else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) + png_handle_IEND(png_ptr, info_ptr, length); +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED + else if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name)) + { + if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + { + if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT) + png_error(png_ptr, "Too many IDAT's found"); + } + else + png_ptr->mode |= PNG_AFTER_IDAT; + png_handle_unknown(png_ptr, info_ptr, length); + if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) + png_ptr->mode |= PNG_HAVE_PLTE; + } +#endif + else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) + { + /* Zero length IDATs are legal after the last IDAT has been + * read, but not after other chunks have been read. + */ + if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT) + png_error(png_ptr, "Too many IDAT's found"); + png_crc_finish(png_ptr, length); + } + else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4)) + png_handle_PLTE(png_ptr, info_ptr, length); +#if defined(PNG_READ_bKGD_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4)) + png_handle_bKGD(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_cHRM_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4)) + png_handle_cHRM(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_gAMA_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4)) + png_handle_gAMA(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_hIST_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4)) + png_handle_hIST(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_oFFs_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4)) + png_handle_oFFs(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_pCAL_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4)) + png_handle_pCAL(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sCAL_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4)) + png_handle_sCAL(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_pHYs_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4)) + png_handle_pHYs(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sBIT_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4)) + png_handle_sBIT(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sRGB_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4)) + png_handle_sRGB(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_iCCP_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4)) + png_handle_iCCP(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_sPLT_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4)) + png_handle_sPLT(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_tEXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4)) + png_handle_tEXt(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_tIME_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4)) + png_handle_tIME(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_tRNS_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4)) + png_handle_tRNS(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_zTXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4)) + png_handle_zTXt(png_ptr, info_ptr, length); +#endif +#if defined(PNG_READ_iTXt_SUPPORTED) + else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4)) + png_handle_iTXt(png_ptr, info_ptr, length); +#endif + else + png_handle_unknown(png_ptr, info_ptr, length); + } while (!(png_ptr->mode & PNG_HAVE_IEND)); +} +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ + +/* free all memory used by the read */ +void PNGAPI +png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr, + png_infopp end_info_ptr_ptr) +{ + png_structp png_ptr = NULL; + png_infop info_ptr = NULL, end_info_ptr = NULL; +#ifdef PNG_USER_MEM_SUPPORTED + png_free_ptr free_fn; + png_voidp mem_ptr; +#endif + + png_debug(1, "in png_destroy_read_struct\n"); + if (png_ptr_ptr != NULL) + png_ptr = *png_ptr_ptr; + + if (info_ptr_ptr != NULL) + info_ptr = *info_ptr_ptr; + + if (end_info_ptr_ptr != NULL) + end_info_ptr = *end_info_ptr_ptr; + +#ifdef PNG_USER_MEM_SUPPORTED + free_fn = png_ptr->free_fn; + mem_ptr = png_ptr->mem_ptr; +#endif + + png_read_destroy(png_ptr, info_ptr, end_info_ptr); + + if (info_ptr != NULL) + { +#if defined(PNG_TEXT_SUPPORTED) + png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); +#endif + +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn, + (png_voidp)mem_ptr); +#else + png_destroy_struct((png_voidp)info_ptr); +#endif + *info_ptr_ptr = NULL; + } + + if (end_info_ptr != NULL) + { +#if defined(PNG_READ_TEXT_SUPPORTED) + png_free_data(png_ptr, end_info_ptr, PNG_FREE_TEXT, -1); +#endif +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)end_info_ptr, (png_free_ptr)free_fn, + (png_voidp)mem_ptr); +#else + png_destroy_struct((png_voidp)end_info_ptr); +#endif + *end_info_ptr_ptr = NULL; + } + + if (png_ptr != NULL) + { +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn, + (png_voidp)mem_ptr); +#else + png_destroy_struct((png_voidp)png_ptr); +#endif + *png_ptr_ptr = NULL; + } +} + +/* free all memory used by the read (old method) */ +void /* PRIVATE */ +png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr) +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf tmp_jmp; +#endif + png_error_ptr error_fn; + png_error_ptr warning_fn; + png_voidp error_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + png_free_ptr free_fn; +#endif + + png_debug(1, "in png_read_destroy\n"); + if (info_ptr != NULL) + png_info_destroy(png_ptr, info_ptr); + + if (end_info_ptr != NULL) + png_info_destroy(png_ptr, end_info_ptr); + + png_free(png_ptr, png_ptr->zbuf); + png_free(png_ptr, png_ptr->big_row_buf); + png_free(png_ptr, png_ptr->prev_row); +#if defined(PNG_READ_DITHER_SUPPORTED) + png_free(png_ptr, png_ptr->palette_lookup); + png_free(png_ptr, png_ptr->dither_index); +#endif +#if defined(PNG_READ_GAMMA_SUPPORTED) + png_free(png_ptr, png_ptr->gamma_table); +#endif +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + png_free(png_ptr, png_ptr->gamma_from_1); + png_free(png_ptr, png_ptr->gamma_to_1); +#endif +#ifdef PNG_FREE_ME_SUPPORTED + if (png_ptr->free_me & PNG_FREE_PLTE) + png_zfree(png_ptr, png_ptr->palette); + png_ptr->free_me &= ~PNG_FREE_PLTE; +#else + if (png_ptr->flags & PNG_FLAG_FREE_PLTE) + png_zfree(png_ptr, png_ptr->palette); + png_ptr->flags &= ~PNG_FLAG_FREE_PLTE; +#endif +#if defined(PNG_tRNS_SUPPORTED) || \ + defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) +#ifdef PNG_FREE_ME_SUPPORTED + if (png_ptr->free_me & PNG_FREE_TRNS) + png_free(png_ptr, png_ptr->trans); + png_ptr->free_me &= ~PNG_FREE_TRNS; +#else + if (png_ptr->flags & PNG_FLAG_FREE_TRNS) + png_free(png_ptr, png_ptr->trans); + png_ptr->flags &= ~PNG_FLAG_FREE_TRNS; +#endif +#endif +#if defined(PNG_READ_hIST_SUPPORTED) +#ifdef PNG_FREE_ME_SUPPORTED + if (png_ptr->free_me & PNG_FREE_HIST) + png_free(png_ptr, png_ptr->hist); + png_ptr->free_me &= ~PNG_FREE_HIST; +#else + if (png_ptr->flags & PNG_FLAG_FREE_HIST) + png_free(png_ptr, png_ptr->hist); + png_ptr->flags &= ~PNG_FLAG_FREE_HIST; +#endif +#endif +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (png_ptr->gamma_16_table != NULL) + { + int i; + int istop = (1 << (8 - png_ptr->gamma_shift)); + for (i = 0; i < istop; i++) + { + png_free(png_ptr, png_ptr->gamma_16_table[i]); + } + png_free(png_ptr, png_ptr->gamma_16_table); + } +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->gamma_16_from_1 != NULL) + { + int i; + int istop = (1 << (8 - png_ptr->gamma_shift)); + for (i = 0; i < istop; i++) + { + png_free(png_ptr, png_ptr->gamma_16_from_1[i]); + } + png_free(png_ptr, png_ptr->gamma_16_from_1); + } + if (png_ptr->gamma_16_to_1 != NULL) + { + int i; + int istop = (1 << (8 - png_ptr->gamma_shift)); + for (i = 0; i < istop; i++) + { + png_free(png_ptr, png_ptr->gamma_16_to_1[i]); + } + png_free(png_ptr, png_ptr->gamma_16_to_1); + } +#endif +#endif +#if defined(PNG_TIME_RFC1123_SUPPORTED) + png_free(png_ptr, png_ptr->time_buffer); +#endif + + inflateEnd(&png_ptr->zstream); +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED + png_free(png_ptr, png_ptr->save_buffer); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +#ifdef PNG_TEXT_SUPPORTED + png_free(png_ptr, png_ptr->current_text); +#endif /* PNG_TEXT_SUPPORTED */ +#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ + + /* Save the important info out of the png_struct, in case it is + * being used again. + */ +#ifdef PNG_SETJMP_SUPPORTED + png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); +#endif + + error_fn = png_ptr->error_fn; + warning_fn = png_ptr->warning_fn; + error_ptr = png_ptr->error_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + free_fn = png_ptr->free_fn; +#endif + + png_memset(png_ptr, 0, png_sizeof (png_struct)); + + png_ptr->error_fn = error_fn; + png_ptr->warning_fn = warning_fn; + png_ptr->error_ptr = error_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + png_ptr->free_fn = free_fn; +#endif + +#ifdef PNG_SETJMP_SUPPORTED + png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); +#endif + +} + +void PNGAPI +png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn) +{ + png_ptr->read_row_fn = read_row_fn; +} + + +#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED +#if defined(PNG_INFO_IMAGE_SUPPORTED) +void PNGAPI +png_read_png(png_structp png_ptr, png_infop info_ptr, + int transforms, + voidp params) +{ + int row; + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) + /* invert the alpha channel from opacity to transparency + */ + if (transforms & PNG_TRANSFORM_INVERT_ALPHA) + png_set_invert_alpha(png_ptr); +#endif + + /* png_read_info() gives us all of the information from the + * PNG file before the first IDAT (image data chunk). + */ + png_read_info(png_ptr, info_ptr); + if (info_ptr->height > PNG_UINT_32_MAX/png_sizeof(png_bytep)) + png_error(png_ptr,"Image is too high to process with png_read_png()"); + + /* -------------- image transformations start here ------------------- */ + +#if defined(PNG_READ_16_TO_8_SUPPORTED) + /* tell libpng to strip 16 bit/color files down to 8 bits per color + */ + if (transforms & PNG_TRANSFORM_STRIP_16) + png_set_strip_16(png_ptr); +#endif + +#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) + /* Strip alpha bytes from the input data without combining with + * the background (not recommended). + */ + if (transforms & PNG_TRANSFORM_STRIP_ALPHA) + png_set_strip_alpha(png_ptr); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED) + /* Extract multiple pixels with bit depths of 1, 2, or 4 from a single + * byte into separate bytes (useful for paletted and grayscale images). + */ + if (transforms & PNG_TRANSFORM_PACKING) + png_set_packing(png_ptr); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + /* Change the order of packed pixels to least significant bit first + * (not useful if you are using png_set_packing). + */ + if (transforms & PNG_TRANSFORM_PACKSWAP) + png_set_packswap(png_ptr); +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) + /* Expand paletted colors into true RGB triplets + * Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel + * Expand paletted or RGB images with transparency to full alpha + * channels so the data will be available as RGBA quartets. + */ + if (transforms & PNG_TRANSFORM_EXPAND) + if ((png_ptr->bit_depth < 8) || + (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) || + (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) + png_set_expand(png_ptr); +#endif + + /* We don't handle background color or gamma transformation or dithering. + */ + +#if defined(PNG_READ_INVERT_SUPPORTED) + /* invert monochrome files to have 0 as white and 1 as black + */ + if (transforms & PNG_TRANSFORM_INVERT_MONO) + png_set_invert_mono(png_ptr); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) + /* If you want to shift the pixel values from the range [0,255] or + * [0,65535] to the original [0,7] or [0,31], or whatever range the + * colors were originally in: + */ + if ((transforms & PNG_TRANSFORM_SHIFT) + && png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT)) + { + png_color_8p sig_bit; + + png_get_sBIT(png_ptr, info_ptr, &sig_bit); + png_set_shift(png_ptr, sig_bit); + } +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) + /* flip the RGB pixels to BGR (or RGBA to BGRA) + */ + if (transforms & PNG_TRANSFORM_BGR) + png_set_bgr(png_ptr); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) + /* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) + */ + if (transforms & PNG_TRANSFORM_SWAP_ALPHA) + png_set_swap_alpha(png_ptr); +#endif + +#if defined(PNG_READ_SWAP_SUPPORTED) + /* swap bytes of 16 bit files to least significant byte first + */ + if (transforms & PNG_TRANSFORM_SWAP_ENDIAN) + png_set_swap(png_ptr); +#endif + + /* We don't handle adding filler bytes */ + + /* Optional call to gamma correct and add the background to the palette + * and update info structure. REQUIRED if you are expecting libpng to + * update the palette for you (i.e., you selected such a transform above). + */ + png_read_update_info(png_ptr, info_ptr); + + /* -------------- image transformations end here ------------------- */ + +#ifdef PNG_FREE_ME_SUPPORTED + png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0); +#endif + if(info_ptr->row_pointers == NULL) + { + info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr, + info_ptr->height * png_sizeof(png_bytep)); +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_ROWS; +#endif + for (row = 0; row < (int)info_ptr->height; row++) + { + info_ptr->row_pointers[row] = (png_bytep)png_malloc(png_ptr, + png_get_rowbytes(png_ptr, info_ptr)); + } + } + + png_read_image(png_ptr, info_ptr->row_pointers); + info_ptr->valid |= PNG_INFO_IDAT; + + /* read rest of file, and get additional chunks in info_ptr - REQUIRED */ + png_read_end(png_ptr, info_ptr); + + if(transforms == 0 || params == NULL) + /* quiet compiler warnings */ return; + +} +#endif +#endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */ diff --git a/libpng/pngrio.c b/libpng/pngrio.c new file mode 100644 index 0000000..cae501a --- /dev/null +++ b/libpng/pngrio.c @@ -0,0 +1,161 @@ + +/* pngrio.c - functions for data input + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file provides a location for all input. Users who need + * special handling are expected to write a function that has the same + * arguments as this and performs a similar function, but that possibly + * has a different input method. Note that you shouldn't change this + * function, but rather write a replacement function and then make + * libpng use it at run time with png_set_read_fn(...). + */ + +#define PNG_INTERNAL +#include "png.h" + +/* Read the data from whatever input you are using. The default routine + reads from a file pointer. Note that this routine sometimes gets called + with very small lengths, so you should implement some kind of simple + buffering if you are using unbuffered reads. This should never be asked + to read more then 64K on a 16 bit machine. */ +void /* PRIVATE */ +png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + png_debug1(4,"reading %d bytes\n", (int)length); + if (png_ptr->read_data_fn != NULL) + (*(png_ptr->read_data_fn))(png_ptr, data, length); + else + png_error(png_ptr, "Call to NULL read function"); +} + +#if !defined(PNG_NO_STDIO) +/* This is the function that does the actual reading of data. If you are + not reading from a standard C stream, you should create a replacement + read_data function and use it at run time with png_set_read_fn(), rather + than changing the library. */ +#ifndef USE_FAR_KEYWORD +void PNGAPI +png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + png_size_t check; + + /* fread() returns 0 on error, so it is OK to store this in a png_size_t + * instead of an int, which is what fread() actually returns. + */ +#if defined(_WIN32_WCE) + if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) + check = 0; +#else + check = (png_size_t)fread(data, (png_size_t)1, length, + (png_FILE_p)png_ptr->io_ptr); +#endif + + if (check != length) + png_error(png_ptr, "Read Error"); +} +#else +/* this is the model-independent version. Since the standard I/O library + can't handle far buffers in the medium and small models, we have to copy + the data. +*/ + +#define NEAR_BUF_SIZE 1024 +#define MIN(a,b) (a <= b ? a : b) + +static void /* PRIVATE */ +png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + int check; + png_byte *n_data; + png_FILE_p io_ptr; + + /* Check if data really is near. If so, use usual code. */ + n_data = (png_byte *)CVT_PTR_NOCHECK(data); + io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); + if ((png_bytep)n_data == data) + { +#if defined(_WIN32_WCE) + if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) + check = 0; +#else + check = fread(n_data, 1, length, io_ptr); +#endif + } + else + { + png_byte buf[NEAR_BUF_SIZE]; + png_size_t read, remaining, err; + check = 0; + remaining = length; + do + { + read = MIN(NEAR_BUF_SIZE, remaining); +#if defined(_WIN32_WCE) + if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) ) + err = 0; +#else + err = fread(buf, (png_size_t)1, read, io_ptr); +#endif + png_memcpy(data, buf, read); /* copy far buffer to near buffer */ + if(err != read) + break; + else + check += err; + data += read; + remaining -= read; + } + while (remaining != 0); + } + if ((png_uint_32)check != (png_uint_32)length) + png_error(png_ptr, "read Error"); +} +#endif +#endif + +/* This function allows the application to supply a new input function + for libpng if standard C streams aren't being used. + + This function takes as its arguments: + png_ptr - pointer to a png input data structure + io_ptr - pointer to user supplied structure containing info about + the input functions. May be NULL. + read_data_fn - pointer to a new input function that takes as its + arguments a pointer to a png_struct, a pointer to + a location where input data can be stored, and a 32-bit + unsigned int that is the number of bytes to be read. + To exit and output any fatal error messages the new write + function should call png_error(png_ptr, "Error msg"). */ +void PNGAPI +png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, + png_rw_ptr read_data_fn) +{ + png_ptr->io_ptr = io_ptr; + +#if !defined(PNG_NO_STDIO) + if (read_data_fn != NULL) + png_ptr->read_data_fn = read_data_fn; + else + png_ptr->read_data_fn = png_default_read_data; +#else + png_ptr->read_data_fn = read_data_fn; +#endif + + /* It is an error to write to a read device */ + if (png_ptr->write_data_fn != NULL) + { + png_ptr->write_data_fn = NULL; + png_warning(png_ptr, + "It's an error to set both read_data_fn and write_data_fn in the "); + png_warning(png_ptr, + "same structure. Resetting write_data_fn to NULL."); + } + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) + png_ptr->output_flush_fn = NULL; +#endif +} diff --git a/libpng/pngrtran.c b/libpng/pngrtran.c new file mode 100644 index 0000000..e1d6e3c --- /dev/null +++ b/libpng/pngrtran.c @@ -0,0 +1,4177 @@ + +/* pngrtran.c - transforms the data in a row for PNG readers + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file contains functions optionally called by an application + * in order to tell libpng how to handle data when reading a PNG. + * Transformations that are used in both reading and writing are + * in pngtrans.c. + */ + +#define PNG_INTERNAL +#include "png.h" + +/* Set the action on getting a CRC error for an ancillary or critical chunk. */ +void PNGAPI +png_set_crc_action(png_structp png_ptr, int crit_action, int ancil_action) +{ + png_debug(1, "in png_set_crc_action\n"); + /* Tell libpng how we react to CRC errors in critical chunks */ + switch (crit_action) + { + case PNG_CRC_NO_CHANGE: /* leave setting as is */ + break; + case PNG_CRC_WARN_USE: /* warn/use data */ + png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; + png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE; + break; + case PNG_CRC_QUIET_USE: /* quiet/use data */ + png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; + png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE | + PNG_FLAG_CRC_CRITICAL_IGNORE; + break; + case PNG_CRC_WARN_DISCARD: /* not a valid action for critical data */ + png_warning(png_ptr, "Can't discard critical data on CRC error."); + case PNG_CRC_ERROR_QUIT: /* error/quit */ + case PNG_CRC_DEFAULT: + default: + png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK; + break; + } + + switch (ancil_action) + { + case PNG_CRC_NO_CHANGE: /* leave setting as is */ + break; + case PNG_CRC_WARN_USE: /* warn/use data */ + png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; + png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE; + break; + case PNG_CRC_QUIET_USE: /* quiet/use data */ + png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; + png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE | + PNG_FLAG_CRC_ANCILLARY_NOWARN; + break; + case PNG_CRC_ERROR_QUIT: /* error/quit */ + png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; + png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN; + break; + case PNG_CRC_WARN_DISCARD: /* warn/discard data */ + case PNG_CRC_DEFAULT: + default: + png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK; + break; + } +} + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ + defined(PNG_FLOATING_POINT_SUPPORTED) +/* handle alpha and tRNS via a background color */ +void PNGAPI +png_set_background(png_structp png_ptr, + png_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma) +{ + png_debug(1, "in png_set_background\n"); + if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN) + { + png_warning(png_ptr, "Application must supply a known background gamma"); + return; + } + + png_ptr->transformations |= PNG_BACKGROUND; + png_memcpy(&(png_ptr->background), background_color, + png_sizeof(png_color_16)); + png_ptr->background_gamma = (float)background_gamma; + png_ptr->background_gamma_type = (png_byte)(background_gamma_code); + png_ptr->transformations |= (need_expand ? PNG_BACKGROUND_EXPAND : 0); + + /* Note: if need_expand is set and color_type is either RGB or RGB_ALPHA + * (in which case need_expand is superfluous anyway), the background color + * might actually be gray yet not be flagged as such. This is not a problem + * for the current code, which uses PNG_BACKGROUND_IS_GRAY only to + * decide when to do the png_do_gray_to_rgb() transformation. + */ + if ((need_expand && !(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) || + (!need_expand && background_color->red == background_color->green && + background_color->red == background_color->blue)) + png_ptr->mode |= PNG_BACKGROUND_IS_GRAY; +} +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) +/* strip 16 bit depth files to 8 bit depth */ +void PNGAPI +png_set_strip_16(png_structp png_ptr) +{ + png_debug(1, "in png_set_strip_16\n"); + png_ptr->transformations |= PNG_16_TO_8; +} +#endif + +#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) +void PNGAPI +png_set_strip_alpha(png_structp png_ptr) +{ + png_debug(1, "in png_set_strip_alpha\n"); + png_ptr->flags |= PNG_FLAG_STRIP_ALPHA; +} +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) +/* Dither file to 8 bit. Supply a palette, the current number + * of elements in the palette, the maximum number of elements + * allowed, and a histogram if possible. If the current number + * of colors is greater then the maximum number, the palette will be + * modified to fit in the maximum number. "full_dither" indicates + * whether we need a dithering cube set up for RGB images, or if we + * simply are reducing the number of colors in a paletted image. + */ + +typedef struct png_dsort_struct +{ + struct png_dsort_struct FAR * next; + png_byte left; + png_byte right; +} png_dsort; +typedef png_dsort FAR * png_dsortp; +typedef png_dsort FAR * FAR * png_dsortpp; + +void PNGAPI +png_set_dither(png_structp png_ptr, png_colorp palette, + int num_palette, int maximum_colors, png_uint_16p histogram, + int full_dither) +{ + png_debug(1, "in png_set_dither\n"); + png_ptr->transformations |= PNG_DITHER; + + if (!full_dither) + { + int i; + + png_ptr->dither_index = (png_bytep)png_malloc(png_ptr, + (png_uint_32)(num_palette * png_sizeof (png_byte))); + for (i = 0; i < num_palette; i++) + png_ptr->dither_index[i] = (png_byte)i; + } + + if (num_palette > maximum_colors) + { + if (histogram != NULL) + { + /* This is easy enough, just throw out the least used colors. + Perhaps not the best solution, but good enough. */ + + int i; + + /* initialize an array to sort colors */ + png_ptr->dither_sort = (png_bytep)png_malloc(png_ptr, + (png_uint_32)(num_palette * png_sizeof (png_byte))); + + /* initialize the dither_sort array */ + for (i = 0; i < num_palette; i++) + png_ptr->dither_sort[i] = (png_byte)i; + + /* Find the least used palette entries by starting a + bubble sort, and running it until we have sorted + out enough colors. Note that we don't care about + sorting all the colors, just finding which are + least used. */ + + for (i = num_palette - 1; i >= maximum_colors; i--) + { + int done; /* to stop early if the list is pre-sorted */ + int j; + + done = 1; + for (j = 0; j < i; j++) + { + if (histogram[png_ptr->dither_sort[j]] + < histogram[png_ptr->dither_sort[j + 1]]) + { + png_byte t; + + t = png_ptr->dither_sort[j]; + png_ptr->dither_sort[j] = png_ptr->dither_sort[j + 1]; + png_ptr->dither_sort[j + 1] = t; + done = 0; + } + } + if (done) + break; + } + + /* swap the palette around, and set up a table, if necessary */ + if (full_dither) + { + int j = num_palette; + + /* put all the useful colors within the max, but don't + move the others */ + for (i = 0; i < maximum_colors; i++) + { + if ((int)png_ptr->dither_sort[i] >= maximum_colors) + { + do + j--; + while ((int)png_ptr->dither_sort[j] >= maximum_colors); + palette[i] = palette[j]; + } + } + } + else + { + int j = num_palette; + + /* move all the used colors inside the max limit, and + develop a translation table */ + for (i = 0; i < maximum_colors; i++) + { + /* only move the colors we need to */ + if ((int)png_ptr->dither_sort[i] >= maximum_colors) + { + png_color tmp_color; + + do + j--; + while ((int)png_ptr->dither_sort[j] >= maximum_colors); + + tmp_color = palette[j]; + palette[j] = palette[i]; + palette[i] = tmp_color; + /* indicate where the color went */ + png_ptr->dither_index[j] = (png_byte)i; + png_ptr->dither_index[i] = (png_byte)j; + } + } + + /* find closest color for those colors we are not using */ + for (i = 0; i < num_palette; i++) + { + if ((int)png_ptr->dither_index[i] >= maximum_colors) + { + int min_d, k, min_k, d_index; + + /* find the closest color to one we threw out */ + d_index = png_ptr->dither_index[i]; + min_d = PNG_COLOR_DIST(palette[d_index], palette[0]); + for (k = 1, min_k = 0; k < maximum_colors; k++) + { + int d; + + d = PNG_COLOR_DIST(palette[d_index], palette[k]); + + if (d < min_d) + { + min_d = d; + min_k = k; + } + } + /* point to closest color */ + png_ptr->dither_index[i] = (png_byte)min_k; + } + } + } + png_free(png_ptr, png_ptr->dither_sort); + png_ptr->dither_sort=NULL; + } + else + { + /* This is much harder to do simply (and quickly). Perhaps + we need to go through a median cut routine, but those + don't always behave themselves with only a few colors + as input. So we will just find the closest two colors, + and throw out one of them (chosen somewhat randomly). + [We don't understand this at all, so if someone wants to + work on improving it, be our guest - AED, GRP] + */ + int i; + int max_d; + int num_new_palette; + png_dsortp t; + png_dsortpp hash; + + t=NULL; + + /* initialize palette index arrays */ + png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr, + (png_uint_32)(num_palette * png_sizeof (png_byte))); + png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr, + (png_uint_32)(num_palette * png_sizeof (png_byte))); + + /* initialize the sort array */ + for (i = 0; i < num_palette; i++) + { + png_ptr->index_to_palette[i] = (png_byte)i; + png_ptr->palette_to_index[i] = (png_byte)i; + } + + hash = (png_dsortpp)png_malloc(png_ptr, (png_uint_32)(769 * + png_sizeof (png_dsortp))); + for (i = 0; i < 769; i++) + hash[i] = NULL; +/* png_memset(hash, 0, 769 * png_sizeof (png_dsortp)); */ + + num_new_palette = num_palette; + + /* initial wild guess at how far apart the farthest pixel + pair we will be eliminating will be. Larger + numbers mean more areas will be allocated, Smaller + numbers run the risk of not saving enough data, and + having to do this all over again. + + I have not done extensive checking on this number. + */ + max_d = 96; + + while (num_new_palette > maximum_colors) + { + for (i = 0; i < num_new_palette - 1; i++) + { + int j; + + for (j = i + 1; j < num_new_palette; j++) + { + int d; + + d = PNG_COLOR_DIST(palette[i], palette[j]); + + if (d <= max_d) + { + + t = (png_dsortp)png_malloc_warn(png_ptr, + (png_uint_32)(png_sizeof(png_dsort))); + if (t == NULL) + break; + t->next = hash[d]; + t->left = (png_byte)i; + t->right = (png_byte)j; + hash[d] = t; + } + } + if (t == NULL) + break; + } + + if (t != NULL) + for (i = 0; i <= max_d; i++) + { + if (hash[i] != NULL) + { + png_dsortp p; + + for (p = hash[i]; p; p = p->next) + { + if ((int)png_ptr->index_to_palette[p->left] + < num_new_palette && + (int)png_ptr->index_to_palette[p->right] + < num_new_palette) + { + int j, next_j; + + if (num_new_palette & 0x01) + { + j = p->left; + next_j = p->right; + } + else + { + j = p->right; + next_j = p->left; + } + + num_new_palette--; + palette[png_ptr->index_to_palette[j]] + = palette[num_new_palette]; + if (!full_dither) + { + int k; + + for (k = 0; k < num_palette; k++) + { + if (png_ptr->dither_index[k] == + png_ptr->index_to_palette[j]) + png_ptr->dither_index[k] = + png_ptr->index_to_palette[next_j]; + if ((int)png_ptr->dither_index[k] == + num_new_palette) + png_ptr->dither_index[k] = + png_ptr->index_to_palette[j]; + } + } + + png_ptr->index_to_palette[png_ptr->palette_to_index + [num_new_palette]] = png_ptr->index_to_palette[j]; + png_ptr->palette_to_index[png_ptr->index_to_palette[j]] + = png_ptr->palette_to_index[num_new_palette]; + + png_ptr->index_to_palette[j] = (png_byte)num_new_palette; + png_ptr->palette_to_index[num_new_palette] = (png_byte)j; + } + if (num_new_palette <= maximum_colors) + break; + } + if (num_new_palette <= maximum_colors) + break; + } + } + + for (i = 0; i < 769; i++) + { + if (hash[i] != NULL) + { + png_dsortp p = hash[i]; + while (p) + { + t = p->next; + png_free(png_ptr, p); + p = t; + } + } + hash[i] = 0; + } + max_d += 96; + } + png_free(png_ptr, hash); + png_free(png_ptr, png_ptr->palette_to_index); + png_free(png_ptr, png_ptr->index_to_palette); + png_ptr->palette_to_index=NULL; + png_ptr->index_to_palette=NULL; + } + num_palette = maximum_colors; + } + if (png_ptr->palette == NULL) + { + png_ptr->palette = palette; + } + png_ptr->num_palette = (png_uint_16)num_palette; + + if (full_dither) + { + int i; + png_bytep distance; + int total_bits = PNG_DITHER_RED_BITS + PNG_DITHER_GREEN_BITS + + PNG_DITHER_BLUE_BITS; + int num_red = (1 << PNG_DITHER_RED_BITS); + int num_green = (1 << PNG_DITHER_GREEN_BITS); + int num_blue = (1 << PNG_DITHER_BLUE_BITS); + png_size_t num_entries = ((png_size_t)1 << total_bits); + + png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr, + (png_uint_32)(num_entries * png_sizeof (png_byte))); + + png_memset(png_ptr->palette_lookup, 0, num_entries * + png_sizeof (png_byte)); + + distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries * + png_sizeof(png_byte))); + + png_memset(distance, 0xff, num_entries * png_sizeof(png_byte)); + + for (i = 0; i < num_palette; i++) + { + int ir, ig, ib; + int r = (palette[i].red >> (8 - PNG_DITHER_RED_BITS)); + int g = (palette[i].green >> (8 - PNG_DITHER_GREEN_BITS)); + int b = (palette[i].blue >> (8 - PNG_DITHER_BLUE_BITS)); + + for (ir = 0; ir < num_red; ir++) + { + /* int dr = abs(ir - r); */ + int dr = ((ir > r) ? ir - r : r - ir); + int index_r = (ir << (PNG_DITHER_BLUE_BITS + PNG_DITHER_GREEN_BITS)); + + for (ig = 0; ig < num_green; ig++) + { + /* int dg = abs(ig - g); */ + int dg = ((ig > g) ? ig - g : g - ig); + int dt = dr + dg; + int dm = ((dr > dg) ? dr : dg); + int index_g = index_r | (ig << PNG_DITHER_BLUE_BITS); + + for (ib = 0; ib < num_blue; ib++) + { + int d_index = index_g | ib; + /* int db = abs(ib - b); */ + int db = ((ib > b) ? ib - b : b - ib); + int dmax = ((dm > db) ? dm : db); + int d = dmax + dt + db; + + if (d < (int)distance[d_index]) + { + distance[d_index] = (png_byte)d; + png_ptr->palette_lookup[d_index] = (png_byte)i; + } + } + } + } + } + + png_free(png_ptr, distance); + } +} +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) +/* Transform the image from the file_gamma to the screen_gamma. We + * only do transformations on images where the file_gamma and screen_gamma + * are not close reciprocals, otherwise it slows things down slightly, and + * also needlessly introduces small errors. + * + * We will turn off gamma transformation later if no semitransparent entries + * are present in the tRNS array for palette images. We can't do it here + * because we don't necessarily have the tRNS chunk yet. + */ +void PNGAPI +png_set_gamma(png_structp png_ptr, double scrn_gamma, double file_gamma) +{ + png_debug(1, "in png_set_gamma\n"); + if ((fabs(scrn_gamma * file_gamma - 1.0) > PNG_GAMMA_THRESHOLD) || + (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) || + (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)) + png_ptr->transformations |= PNG_GAMMA; + png_ptr->gamma = (float)file_gamma; + png_ptr->screen_gamma = (float)scrn_gamma; +} +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) +/* Expand paletted images to RGB, expand grayscale images of + * less than 8-bit depth to 8-bit depth, and expand tRNS chunks + * to alpha channels. + */ +void PNGAPI +png_set_expand(png_structp png_ptr) +{ + png_debug(1, "in png_set_expand\n"); + png_ptr->transformations |= PNG_EXPAND; +} + +/* GRR 19990627: the following three functions currently are identical + * to png_set_expand(). However, it is entirely reasonable that someone + * might wish to expand an indexed image to RGB but *not* expand a single, + * fully transparent palette entry to a full alpha channel--perhaps instead + * convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace + * the transparent color with a particular RGB value, or drop tRNS entirely. + * IOW, a future version of the library may make the transformations flag + * a bit more fine-grained, with separate bits for each of these three + * functions. + * + * More to the point, these functions make it obvious what libpng will be + * doing, whereas "expand" can (and does) mean any number of things. + */ + +/* Expand paletted images to RGB. */ +void PNGAPI +png_set_palette_to_rgb(png_structp png_ptr) +{ + png_debug(1, "in png_set_expand\n"); + png_ptr->transformations |= PNG_EXPAND; +} + +/* Expand grayscale images of less than 8-bit depth to 8 bits. */ +void PNGAPI +png_set_gray_1_2_4_to_8(png_structp png_ptr) +{ + png_debug(1, "in png_set_expand\n"); + png_ptr->transformations |= PNG_EXPAND; +} + +/* Expand tRNS chunks to alpha channels. */ +void PNGAPI +png_set_tRNS_to_alpha(png_structp png_ptr) +{ + png_debug(1, "in png_set_expand\n"); + png_ptr->transformations |= PNG_EXPAND; +} +#endif /* defined(PNG_READ_EXPAND_SUPPORTED) */ + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +void PNGAPI +png_set_gray_to_rgb(png_structp png_ptr) +{ + png_debug(1, "in png_set_gray_to_rgb\n"); + png_ptr->transformations |= PNG_GRAY_TO_RGB; +} +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +#if defined(PNG_FLOATING_POINT_SUPPORTED) +/* Convert a RGB image to a grayscale of the same width. This allows us, + * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image. + */ + +void PNGAPI +png_set_rgb_to_gray(png_structp png_ptr, int error_action, double red, + double green) +{ + int red_fixed = (int)((float)red*100000.0 + 0.5); + int green_fixed = (int)((float)green*100000.0 + 0.5); + png_set_rgb_to_gray_fixed(png_ptr, error_action, red_fixed, green_fixed); +} +#endif + +void PNGAPI +png_set_rgb_to_gray_fixed(png_structp png_ptr, int error_action, + png_fixed_point red, png_fixed_point green) +{ + png_debug(1, "in png_set_rgb_to_gray\n"); + switch(error_action) + { + case 1: png_ptr->transformations |= PNG_RGB_TO_GRAY; + break; + case 2: png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN; + break; + case 3: png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR; + } + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) +#if defined(PNG_READ_EXPAND_SUPPORTED) + png_ptr->transformations |= PNG_EXPAND; +#else + { + png_warning(png_ptr, "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED."); + png_ptr->transformations &= ~PNG_RGB_TO_GRAY; + } +#endif + { + png_uint_16 red_int, green_int; + if(red < 0 || green < 0) + { + red_int = 6968; /* .212671 * 32768 + .5 */ + green_int = 23434; /* .715160 * 32768 + .5 */ + } + else if(red + green < 100000L) + { + red_int = (png_uint_16)(((png_uint_32)red*32768L)/100000L); + green_int = (png_uint_16)(((png_uint_32)green*32768L)/100000L); + } + else + { + png_warning(png_ptr, "ignoring out of range rgb_to_gray coefficients"); + red_int = 6968; + green_int = 23434; + } + png_ptr->rgb_to_gray_red_coeff = red_int; + png_ptr->rgb_to_gray_green_coeff = green_int; + png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(32768-red_int-green_int); + } +} +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +void PNGAPI +png_set_read_user_transform_fn(png_structp png_ptr, png_user_transform_ptr + read_user_transform_fn) +{ + png_debug(1, "in png_set_read_user_transform_fn\n"); +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + png_ptr->transformations |= PNG_USER_TRANSFORM; + png_ptr->read_user_transform_fn = read_user_transform_fn; +#endif +#ifdef PNG_LEGACY_SUPPORTED + if(read_user_transform_fn) + png_warning(png_ptr, + "This version of libpng does not support user transforms"); +#endif +} +#endif + +/* Initialize everything needed for the read. This includes modifying + * the palette. + */ +void /* PRIVATE */ +png_init_read_transformations(png_structp png_ptr) +{ + png_debug(1, "in png_init_read_transformations\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if(png_ptr != NULL) +#endif + { +#if defined(PNG_READ_BACKGROUND_SUPPORTED) || defined(PNG_READ_SHIFT_SUPPORTED) \ + || defined(PNG_READ_GAMMA_SUPPORTED) + int color_type = png_ptr->color_type; +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED) + if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) && + (png_ptr->transformations & PNG_EXPAND)) + { + if (!(color_type & PNG_COLOR_MASK_COLOR)) /* i.e., GRAY or GRAY_ALPHA */ + { + /* expand background chunk. */ + switch (png_ptr->bit_depth) + { + case 1: + png_ptr->background.gray *= (png_uint_16)0xff; + png_ptr->background.red = png_ptr->background.green + = png_ptr->background.blue = png_ptr->background.gray; + break; + case 2: + png_ptr->background.gray *= (png_uint_16)0x55; + png_ptr->background.red = png_ptr->background.green + = png_ptr->background.blue = png_ptr->background.gray; + break; + case 4: + png_ptr->background.gray *= (png_uint_16)0x11; + png_ptr->background.red = png_ptr->background.green + = png_ptr->background.blue = png_ptr->background.gray; + break; + case 8: + case 16: + png_ptr->background.red = png_ptr->background.green + = png_ptr->background.blue = png_ptr->background.gray; + break; + } + } + else if (color_type == PNG_COLOR_TYPE_PALETTE) + { + png_ptr->background.red = + png_ptr->palette[png_ptr->background.index].red; + png_ptr->background.green = + png_ptr->palette[png_ptr->background.index].green; + png_ptr->background.blue = + png_ptr->palette[png_ptr->background.index].blue; + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_ALPHA) + { +#if defined(PNG_READ_EXPAND_SUPPORTED) + if (!(png_ptr->transformations & PNG_EXPAND)) +#endif + { + /* invert the alpha channel (in tRNS) unless the pixels are + going to be expanded, in which case leave it for later */ + int i,istop; + istop=(int)png_ptr->num_trans; + for (i=0; itrans[i] = (png_byte)(255 - png_ptr->trans[i]); + } + } +#endif + + } + } +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED) + png_ptr->background_1 = png_ptr->background; +#endif +#if defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) + + if ((color_type == PNG_COLOR_TYPE_PALETTE && png_ptr->num_trans != 0) + && (fabs(png_ptr->screen_gamma * png_ptr->gamma - 1.0) + < PNG_GAMMA_THRESHOLD)) + { + int i,k; + k=0; + for (i=0; inum_trans; i++) + { + if (png_ptr->trans[i] != 0 && png_ptr->trans[i] != 0xff) + k=1; /* partial transparency is present */ + } + if (k == 0) + png_ptr->transformations &= (~PNG_GAMMA); + } + + if (png_ptr->transformations & (PNG_GAMMA | PNG_RGB_TO_GRAY)) + { + png_build_gamma_table(png_ptr); +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->transformations & PNG_BACKGROUND) + { + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + /* could skip if no transparency and + */ + png_color back, back_1; + png_colorp palette = png_ptr->palette; + int num_palette = png_ptr->num_palette; + int i; + if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) + { + back.red = png_ptr->gamma_table[png_ptr->background.red]; + back.green = png_ptr->gamma_table[png_ptr->background.green]; + back.blue = png_ptr->gamma_table[png_ptr->background.blue]; + + back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; + back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; + back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; + } + else + { + double g, gs; + + switch (png_ptr->background_gamma_type) + { + case PNG_BACKGROUND_GAMMA_SCREEN: + g = (png_ptr->screen_gamma); + gs = 1.0; + break; + case PNG_BACKGROUND_GAMMA_FILE: + g = 1.0 / (png_ptr->gamma); + gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); + break; + case PNG_BACKGROUND_GAMMA_UNIQUE: + g = 1.0 / (png_ptr->background_gamma); + gs = 1.0 / (png_ptr->background_gamma * + png_ptr->screen_gamma); + break; + default: + g = 1.0; /* back_1 */ + gs = 1.0; /* back */ + } + + if ( fabs(gs - 1.0) < PNG_GAMMA_THRESHOLD) + { + back.red = (png_byte)png_ptr->background.red; + back.green = (png_byte)png_ptr->background.green; + back.blue = (png_byte)png_ptr->background.blue; + } + else + { + back.red = (png_byte)(pow( + (double)png_ptr->background.red/255, gs) * 255.0 + .5); + back.green = (png_byte)(pow( + (double)png_ptr->background.green/255, gs) * 255.0 + .5); + back.blue = (png_byte)(pow( + (double)png_ptr->background.blue/255, gs) * 255.0 + .5); + } + + back_1.red = (png_byte)(pow( + (double)png_ptr->background.red/255, g) * 255.0 + .5); + back_1.green = (png_byte)(pow( + (double)png_ptr->background.green/255, g) * 255.0 + .5); + back_1.blue = (png_byte)(pow( + (double)png_ptr->background.blue/255, g) * 255.0 + .5); + } + for (i = 0; i < num_palette; i++) + { + if (i < (int)png_ptr->num_trans && png_ptr->trans[i] != 0xff) + { + if (png_ptr->trans[i] == 0) + { + palette[i] = back; + } + else /* if (png_ptr->trans[i] != 0xff) */ + { + png_byte v, w; + + v = png_ptr->gamma_to_1[palette[i].red]; + png_composite(w, v, png_ptr->trans[i], back_1.red); + palette[i].red = png_ptr->gamma_from_1[w]; + + v = png_ptr->gamma_to_1[palette[i].green]; + png_composite(w, v, png_ptr->trans[i], back_1.green); + palette[i].green = png_ptr->gamma_from_1[w]; + + v = png_ptr->gamma_to_1[palette[i].blue]; + png_composite(w, v, png_ptr->trans[i], back_1.blue); + palette[i].blue = png_ptr->gamma_from_1[w]; + } + } + else + { + palette[i].red = png_ptr->gamma_table[palette[i].red]; + palette[i].green = png_ptr->gamma_table[palette[i].green]; + palette[i].blue = png_ptr->gamma_table[palette[i].blue]; + } + } + } + /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */ + else + /* color_type != PNG_COLOR_TYPE_PALETTE */ + { + double m = (double)(((png_uint_32)1 << png_ptr->bit_depth) - 1); + double g = 1.0; + double gs = 1.0; + + switch (png_ptr->background_gamma_type) + { + case PNG_BACKGROUND_GAMMA_SCREEN: + g = (png_ptr->screen_gamma); + gs = 1.0; + break; + case PNG_BACKGROUND_GAMMA_FILE: + g = 1.0 / (png_ptr->gamma); + gs = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); + break; + case PNG_BACKGROUND_GAMMA_UNIQUE: + g = 1.0 / (png_ptr->background_gamma); + gs = 1.0 / (png_ptr->background_gamma * + png_ptr->screen_gamma); + break; + } + + png_ptr->background_1.gray = (png_uint_16)(pow( + (double)png_ptr->background.gray / m, g) * m + .5); + png_ptr->background.gray = (png_uint_16)(pow( + (double)png_ptr->background.gray / m, gs) * m + .5); + + if ((png_ptr->background.red != png_ptr->background.green) || + (png_ptr->background.red != png_ptr->background.blue) || + (png_ptr->background.red != png_ptr->background.gray)) + { + /* RGB or RGBA with color background */ + png_ptr->background_1.red = (png_uint_16)(pow( + (double)png_ptr->background.red / m, g) * m + .5); + png_ptr->background_1.green = (png_uint_16)(pow( + (double)png_ptr->background.green / m, g) * m + .5); + png_ptr->background_1.blue = (png_uint_16)(pow( + (double)png_ptr->background.blue / m, g) * m + .5); + png_ptr->background.red = (png_uint_16)(pow( + (double)png_ptr->background.red / m, gs) * m + .5); + png_ptr->background.green = (png_uint_16)(pow( + (double)png_ptr->background.green / m, gs) * m + .5); + png_ptr->background.blue = (png_uint_16)(pow( + (double)png_ptr->background.blue / m, gs) * m + .5); + } + else + { + /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */ + png_ptr->background_1.red = png_ptr->background_1.green + = png_ptr->background_1.blue = png_ptr->background_1.gray; + png_ptr->background.red = png_ptr->background.green + = png_ptr->background.blue = png_ptr->background.gray; + } + } + } + else + /* transformation does not include PNG_BACKGROUND */ +#endif /* PNG_READ_BACKGROUND_SUPPORTED */ + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + png_colorp palette = png_ptr->palette; + int num_palette = png_ptr->num_palette; + int i; + + for (i = 0; i < num_palette; i++) + { + palette[i].red = png_ptr->gamma_table[palette[i].red]; + palette[i].green = png_ptr->gamma_table[palette[i].green]; + palette[i].blue = png_ptr->gamma_table[palette[i].blue]; + } + } + } +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + else +#endif +#endif /* PNG_READ_GAMMA_SUPPORTED && PNG_FLOATING_POINT_SUPPORTED */ +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + /* No GAMMA transformation */ + if ((png_ptr->transformations & PNG_BACKGROUND) && + (color_type == PNG_COLOR_TYPE_PALETTE)) + { + int i; + int istop = (int)png_ptr->num_trans; + png_color back; + png_colorp palette = png_ptr->palette; + + back.red = (png_byte)png_ptr->background.red; + back.green = (png_byte)png_ptr->background.green; + back.blue = (png_byte)png_ptr->background.blue; + + for (i = 0; i < istop; i++) + { + if (png_ptr->trans[i] == 0) + { + palette[i] = back; + } + else if (png_ptr->trans[i] != 0xff) + { + /* The png_composite() macro is defined in png.h */ + png_composite(palette[i].red, palette[i].red, + png_ptr->trans[i], back.red); + png_composite(palette[i].green, palette[i].green, + png_ptr->trans[i], back.green); + png_composite(palette[i].blue, palette[i].blue, + png_ptr->trans[i], back.blue); + } + } + } +#endif /* PNG_READ_BACKGROUND_SUPPORTED */ + +#if defined(PNG_READ_SHIFT_SUPPORTED) + if ((png_ptr->transformations & PNG_SHIFT) && + (color_type == PNG_COLOR_TYPE_PALETTE)) + { + png_uint_16 i; + png_uint_16 istop = png_ptr->num_palette; + int sr = 8 - png_ptr->sig_bit.red; + int sg = 8 - png_ptr->sig_bit.green; + int sb = 8 - png_ptr->sig_bit.blue; + + if (sr < 0 || sr > 8) + sr = 0; + if (sg < 0 || sg > 8) + sg = 0; + if (sb < 0 || sb > 8) + sb = 0; + for (i = 0; i < istop; i++) + { + png_ptr->palette[i].red >>= sr; + png_ptr->palette[i].green >>= sg; + png_ptr->palette[i].blue >>= sb; + } + } +#endif /* PNG_READ_SHIFT_SUPPORTED */ + } +#if !defined(PNG_READ_GAMMA_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED) \ + && !defined(PNG_READ_BACKGROUND_SUPPORTED) + if(png_ptr) + return; +#endif +} + +/* Modify the info structure to reflect the transformations. The + * info should be updated so a PNG file could be written with it, + * assuming the transformations result in valid PNG data. + */ +void /* PRIVATE */ +png_read_transform_info(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_read_transform_info\n"); +#if defined(PNG_READ_EXPAND_SUPPORTED) + if (png_ptr->transformations & PNG_EXPAND) + { + if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + if (png_ptr->num_trans) + info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA; + else + info_ptr->color_type = PNG_COLOR_TYPE_RGB; + info_ptr->bit_depth = 8; + info_ptr->num_trans = 0; + } + else + { + if (png_ptr->num_trans) + info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; + if (info_ptr->bit_depth < 8) + info_ptr->bit_depth = 8; + info_ptr->num_trans = 0; + } + } +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->transformations & PNG_BACKGROUND) + { + info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; + info_ptr->num_trans = 0; + info_ptr->background = png_ptr->background; + } +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (png_ptr->transformations & PNG_GAMMA) + { +#ifdef PNG_FLOATING_POINT_SUPPORTED + info_ptr->gamma = png_ptr->gamma; +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + info_ptr->int_gamma = png_ptr->int_gamma; +#endif + } +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) + if ((png_ptr->transformations & PNG_16_TO_8) && (info_ptr->bit_depth == 16)) + info_ptr->bit_depth = 8; +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) + if (png_ptr->transformations & PNG_DITHER) + { + if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) || + (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) && + png_ptr->palette_lookup && info_ptr->bit_depth == 8) + { + info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; + } + } +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) + if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8)) + info_ptr->bit_depth = 8; +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) + if (png_ptr->transformations & PNG_GRAY_TO_RGB) + info_ptr->color_type |= PNG_COLOR_MASK_COLOR; +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + if (png_ptr->transformations & PNG_RGB_TO_GRAY) + info_ptr->color_type &= ~PNG_COLOR_MASK_COLOR; +#endif + + if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + info_ptr->channels = 1; + else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) + info_ptr->channels = 3; + else + info_ptr->channels = 1; + +#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) + if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA) + info_ptr->color_type &= ~PNG_COLOR_MASK_ALPHA; +#endif + + if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) + info_ptr->channels++; + +#if defined(PNG_READ_FILLER_SUPPORTED) + /* STRIP_ALPHA and FILLER allowed: MASK_ALPHA bit stripped above */ + if ((png_ptr->transformations & PNG_FILLER) && + ((info_ptr->color_type == PNG_COLOR_TYPE_RGB) || + (info_ptr->color_type == PNG_COLOR_TYPE_GRAY))) + { + info_ptr->channels++; + /* if adding a true alpha channel not just filler */ +#if !defined(PNG_1_0_X) + if (png_ptr->transformations & PNG_ADD_ALPHA) + info_ptr->color_type |= PNG_COLOR_MASK_ALPHA; +#endif + } +#endif + +#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \ +defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + if(png_ptr->transformations & PNG_USER_TRANSFORM) + { + if(info_ptr->bit_depth < png_ptr->user_transform_depth) + info_ptr->bit_depth = png_ptr->user_transform_depth; + if(info_ptr->channels < png_ptr->user_transform_channels) + info_ptr->channels = png_ptr->user_transform_channels; + } +#endif + + info_ptr->pixel_depth = (png_byte)(info_ptr->channels * + info_ptr->bit_depth); + + info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,info_ptr->width); + +#if !defined(PNG_READ_EXPAND_SUPPORTED) + if(png_ptr) + return; +#endif +} + +/* Transform the row. The order of transformations is significant, + * and is very touchy. If you add a transformation, take care to + * decide how it fits in with the other transformations here. + */ +void /* PRIVATE */ +png_do_read_transformations(png_structp png_ptr) +{ + png_debug(1, "in png_do_read_transformations\n"); +#if !defined(PNG_USELESS_TESTS_SUPPORTED) + if (png_ptr->row_buf == NULL) + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char msg[50]; + + sprintf(msg, "NULL row buffer for row %ld, pass %d", png_ptr->row_number, + png_ptr->pass); + png_error(png_ptr, msg); +#else + png_error(png_ptr, "NULL row buffer"); +#endif + } +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) + if (png_ptr->transformations & PNG_EXPAND) + { + if (png_ptr->row_info.color_type == PNG_COLOR_TYPE_PALETTE) + { + png_do_expand_palette(&(png_ptr->row_info), png_ptr->row_buf + 1, + png_ptr->palette, png_ptr->trans, png_ptr->num_trans); + } + else + { + if (png_ptr->num_trans) + png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, + &(png_ptr->trans_values)); + else + png_do_expand(&(png_ptr->row_info), png_ptr->row_buf + 1, + NULL); + } + } +#endif + +#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) + if (png_ptr->flags & PNG_FLAG_STRIP_ALPHA) + png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, + PNG_FLAG_FILLER_AFTER | (png_ptr->flags & PNG_FLAG_STRIP_ALPHA)); +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + if (png_ptr->transformations & PNG_RGB_TO_GRAY) + { + int rgb_error = + png_do_rgb_to_gray(png_ptr, &(png_ptr->row_info), png_ptr->row_buf + 1); + if(rgb_error) + { + png_ptr->rgb_to_gray_status=1; + if(png_ptr->transformations == PNG_RGB_TO_GRAY_WARN) + png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel"); + if(png_ptr->transformations == PNG_RGB_TO_GRAY_ERR) + png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel"); + } + } +#endif + +/* +From Andreas Dilger e-mail to png-implement, 26 March 1998: + + In most cases, the "simple transparency" should be done prior to doing + gray-to-RGB, or you will have to test 3x as many bytes to check if a + pixel is transparent. You would also need to make sure that the + transparency information is upgraded to RGB. + + To summarize, the current flow is: + - Gray + simple transparency -> compare 1 or 2 gray bytes and composite + with background "in place" if transparent, + convert to RGB if necessary + - Gray + alpha -> composite with gray background and remove alpha bytes, + convert to RGB if necessary + + To support RGB backgrounds for gray images we need: + - Gray + simple transparency -> convert to RGB + simple transparency, compare + 3 or 6 bytes and composite with background + "in place" if transparent (3x compare/pixel + compared to doing composite with gray bkgrnd) + - Gray + alpha -> convert to RGB + alpha, composite with background and + remove alpha bytes (3x float operations/pixel + compared with composite on gray background) + + Greg's change will do this. The reason it wasn't done before is for + performance, as this increases the per-pixel operations. If we would check + in advance if the background was gray or RGB, and position the gray-to-RGB + transform appropriately, then it would save a lot of work/time. + */ + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) + /* if gray -> RGB, do so now only if background is non-gray; else do later + * for performance reasons */ + if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && + !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY)) + png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + if ((png_ptr->transformations & PNG_BACKGROUND) && + ((png_ptr->num_trans != 0 ) || + (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) + png_do_background(&(png_ptr->row_info), png_ptr->row_buf + 1, + &(png_ptr->trans_values), &(png_ptr->background) +#if defined(PNG_READ_GAMMA_SUPPORTED) + , &(png_ptr->background_1), + png_ptr->gamma_table, png_ptr->gamma_from_1, + png_ptr->gamma_to_1, png_ptr->gamma_16_table, + png_ptr->gamma_16_from_1, png_ptr->gamma_16_to_1, + png_ptr->gamma_shift +#endif +); +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) + if ((png_ptr->transformations & PNG_GAMMA) && +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + !((png_ptr->transformations & PNG_BACKGROUND) && + ((png_ptr->num_trans != 0) || + (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) && +#endif + (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)) + png_do_gamma(&(png_ptr->row_info), png_ptr->row_buf + 1, + png_ptr->gamma_table, png_ptr->gamma_16_table, + png_ptr->gamma_shift); +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) + if (png_ptr->transformations & PNG_16_TO_8) + png_do_chop(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) + if (png_ptr->transformations & PNG_DITHER) + { + png_do_dither((png_row_infop)&(png_ptr->row_info), png_ptr->row_buf + 1, + png_ptr->palette_lookup, png_ptr->dither_index); + if(png_ptr->row_info.rowbytes == (png_uint_32)0) + png_error(png_ptr, "png_do_dither returned rowbytes=0"); + } +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_MONO) + png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) + if (png_ptr->transformations & PNG_SHIFT) + png_do_unshift(&(png_ptr->row_info), png_ptr->row_buf + 1, + &(png_ptr->shift)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) + if (png_ptr->transformations & PNG_PACK) + png_do_unpack(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) + if (png_ptr->transformations & PNG_BGR) + png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) + /* if gray -> RGB, do so now only if we did not do so above */ + if ((png_ptr->transformations & PNG_GRAY_TO_RGB) && + (png_ptr->mode & PNG_BACKGROUND_IS_GRAY)) + png_do_gray_to_rgb(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) + if (png_ptr->transformations & PNG_FILLER) + png_do_read_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, + (png_uint_32)png_ptr->filler, png_ptr->flags); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_ALPHA) + png_do_read_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) + if (png_ptr->transformations & PNG_SWAP_ALPHA) + png_do_read_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_SWAP_SUPPORTED) + if (png_ptr->transformations & PNG_SWAP_BYTES) + png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) + if (png_ptr->transformations & PNG_USER_TRANSFORM) + { + if(png_ptr->read_user_transform_fn != NULL) + (*(png_ptr->read_user_transform_fn)) /* user read transform function */ + (png_ptr, /* png_ptr */ + &(png_ptr->row_info), /* row_info: */ + /* png_uint_32 width; width of row */ + /* png_uint_32 rowbytes; number of bytes in row */ + /* png_byte color_type; color type of pixels */ + /* png_byte bit_depth; bit depth of samples */ + /* png_byte channels; number of channels (1-4) */ + /* png_byte pixel_depth; bits per pixel (depth*channels) */ + png_ptr->row_buf + 1); /* start of pixel data for row */ +#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) + if(png_ptr->user_transform_depth) + png_ptr->row_info.bit_depth = png_ptr->user_transform_depth; + if(png_ptr->user_transform_channels) + png_ptr->row_info.channels = png_ptr->user_transform_channels; +#endif + png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth * + png_ptr->row_info.channels); + png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, + png_ptr->row_info.width); + } +#endif + +} + +#if defined(PNG_READ_PACK_SUPPORTED) +/* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel, + * without changing the actual values. Thus, if you had a row with + * a bit depth of 1, you would end up with bytes that only contained + * the numbers 0 or 1. If you would rather they contain 0 and 255, use + * png_do_shift() after this. + */ +void /* PRIVATE */ +png_do_unpack(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_unpack\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL && row_info->bit_depth < 8) +#else + if (row_info->bit_depth < 8) +#endif + { + png_uint_32 i; + png_uint_32 row_width=row_info->width; + + switch (row_info->bit_depth) + { + case 1: + { + png_bytep sp = row + (png_size_t)((row_width - 1) >> 3); + png_bytep dp = row + (png_size_t)row_width - 1; + png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07); + for (i = 0; i < row_width; i++) + { + *dp = (png_byte)((*sp >> shift) & 0x01); + if (shift == 7) + { + shift = 0; + sp--; + } + else + shift++; + + dp--; + } + break; + } + case 2: + { + + png_bytep sp = row + (png_size_t)((row_width - 1) >> 2); + png_bytep dp = row + (png_size_t)row_width - 1; + png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); + for (i = 0; i < row_width; i++) + { + *dp = (png_byte)((*sp >> shift) & 0x03); + if (shift == 6) + { + shift = 0; + sp--; + } + else + shift += 2; + + dp--; + } + break; + } + case 4: + { + png_bytep sp = row + (png_size_t)((row_width - 1) >> 1); + png_bytep dp = row + (png_size_t)row_width - 1; + png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2); + for (i = 0; i < row_width; i++) + { + *dp = (png_byte)((*sp >> shift) & 0x0f); + if (shift == 4) + { + shift = 0; + sp--; + } + else + shift = 4; + + dp--; + } + break; + } + } + row_info->bit_depth = 8; + row_info->pixel_depth = (png_byte)(8 * row_info->channels); + row_info->rowbytes = row_width * row_info->channels; + } +} +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) +/* Reverse the effects of png_do_shift. This routine merely shifts the + * pixels back to their significant bits values. Thus, if you have + * a row of bit depth 8, but only 5 are significant, this will shift + * the values back to 0 through 31. + */ +void /* PRIVATE */ +png_do_unshift(png_row_infop row_info, png_bytep row, png_color_8p sig_bits) +{ + png_debug(1, "in png_do_unshift\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && sig_bits != NULL && +#endif + row_info->color_type != PNG_COLOR_TYPE_PALETTE) + { + int shift[4]; + int channels = 0; + int c; + png_uint_16 value = 0; + png_uint_32 row_width = row_info->width; + + if (row_info->color_type & PNG_COLOR_MASK_COLOR) + { + shift[channels++] = row_info->bit_depth - sig_bits->red; + shift[channels++] = row_info->bit_depth - sig_bits->green; + shift[channels++] = row_info->bit_depth - sig_bits->blue; + } + else + { + shift[channels++] = row_info->bit_depth - sig_bits->gray; + } + if (row_info->color_type & PNG_COLOR_MASK_ALPHA) + { + shift[channels++] = row_info->bit_depth - sig_bits->alpha; + } + + for (c = 0; c < channels; c++) + { + if (shift[c] <= 0) + shift[c] = 0; + else + value = 1; + } + + if (!value) + return; + + switch (row_info->bit_depth) + { + case 2: + { + png_bytep bp; + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + + for (bp = row, i = 0; i < istop; i++) + { + *bp >>= 1; + *bp++ &= 0x55; + } + break; + } + case 4: + { + png_bytep bp = row; + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + png_byte mask = (png_byte)((((int)0xf0 >> shift[0]) & (int)0xf0) | + (png_byte)((int)0xf >> shift[0])); + + for (i = 0; i < istop; i++) + { + *bp >>= shift[0]; + *bp++ &= mask; + } + break; + } + case 8: + { + png_bytep bp = row; + png_uint_32 i; + png_uint_32 istop = row_width * channels; + + for (i = 0; i < istop; i++) + { + *bp++ >>= shift[i%channels]; + } + break; + } + case 16: + { + png_bytep bp = row; + png_uint_32 i; + png_uint_32 istop = channels * row_width; + + for (i = 0; i < istop; i++) + { + value = (png_uint_16)((*bp << 8) + *(bp + 1)); + value >>= shift[i%channels]; + *bp++ = (png_byte)(value >> 8); + *bp++ = (png_byte)(value & 0xff); + } + break; + } + } + } +} +#endif + +#if defined(PNG_READ_16_TO_8_SUPPORTED) +/* chop rows of bit depth 16 down to 8 */ +void /* PRIVATE */ +png_do_chop(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_chop\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL && row_info->bit_depth == 16) +#else + if (row_info->bit_depth == 16) +#endif + { + png_bytep sp = row; + png_bytep dp = row; + png_uint_32 i; + png_uint_32 istop = row_info->width * row_info->channels; + + for (i = 0; i> 8)) >> 8; + * + * Approximate calculation with shift/add instead of multiply/divide: + * *dp = ((((png_uint_32)(*sp) << 8) | + * (png_uint_32)((int)(*(sp + 1)) - *sp)) + 128) >> 8; + * + * What we actually do to avoid extra shifting and conversion: + */ + + *dp = *sp + ((((int)(*(sp + 1)) - *sp) > 128) ? 1 : 0); +#else + /* Simply discard the low order byte */ + *dp = *sp; +#endif + } + row_info->bit_depth = 8; + row_info->pixel_depth = (png_byte)(8 * row_info->channels); + row_info->rowbytes = row_info->width * row_info->channels; + } +} +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) +void /* PRIVATE */ +png_do_read_swap_alpha(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_read_swap_alpha\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + png_uint_32 row_width = row_info->width; + if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + /* This converts from RGBA to ARGB */ + if (row_info->bit_depth == 8) + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_byte save; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + save = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = save; + } + } + /* This converts from RRGGBBAA to AARRGGBB */ + else + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_byte save[2]; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + save[0] = *(--sp); + save[1] = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = save[0]; + *(--dp) = save[1]; + } + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + /* This converts from GA to AG */ + if (row_info->bit_depth == 8) + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_byte save; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + save = *(--sp); + *(--dp) = *(--sp); + *(--dp) = save; + } + } + /* This converts from GGAA to AAGG */ + else + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_byte save[2]; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + save[0] = *(--sp); + save[1] = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = save[0]; + *(--dp) = save[1]; + } + } + } + } +} +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) +void /* PRIVATE */ +png_do_read_invert_alpha(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_read_invert_alpha\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + png_uint_32 row_width = row_info->width; + if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + /* This inverts the alpha channel in RGBA */ + if (row_info->bit_depth == 8) + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + *(--dp) = (png_byte)(255 - *(--sp)); + +/* This does nothing: + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + We can replace it with: +*/ + sp-=3; + dp=sp; + } + } + /* This inverts the alpha channel in RRGGBBAA */ + else + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + *(--dp) = (png_byte)(255 - *(--sp)); + *(--dp) = (png_byte)(255 - *(--sp)); + +/* This does nothing: + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + We can replace it with: +*/ + sp-=6; + dp=sp; + } + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + /* This inverts the alpha channel in GA */ + if (row_info->bit_depth == 8) + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + *(--dp) = (png_byte)(255 - *(--sp)); + *(--dp) = *(--sp); + } + } + /* This inverts the alpha channel in GGAA */ + else + { + png_bytep sp = row + row_info->rowbytes; + png_bytep dp = sp; + png_uint_32 i; + + for (i = 0; i < row_width; i++) + { + *(--dp) = (png_byte)(255 - *(--sp)); + *(--dp) = (png_byte)(255 - *(--sp)); +/* + *(--dp) = *(--sp); + *(--dp) = *(--sp); +*/ + sp-=2; + dp=sp; + } + } + } + } +} +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) +/* Add filler channel if we have RGB color */ +void /* PRIVATE */ +png_do_read_filler(png_row_infop row_info, png_bytep row, + png_uint_32 filler, png_uint_32 flags) +{ + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + png_byte hi_filler = (png_byte)((filler>>8) & 0xff); + png_byte lo_filler = (png_byte)(filler & 0xff); + + png_debug(1, "in png_do_read_filler\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + row_info->color_type == PNG_COLOR_TYPE_GRAY) + { + if(row_info->bit_depth == 8) + { + /* This changes the data from G to GX */ + if (flags & PNG_FLAG_FILLER_AFTER) + { + png_bytep sp = row + (png_size_t)row_width; + png_bytep dp = sp + (png_size_t)row_width; + for (i = 1; i < row_width; i++) + { + *(--dp) = lo_filler; + *(--dp) = *(--sp); + } + *(--dp) = lo_filler; + row_info->channels = 2; + row_info->pixel_depth = 16; + row_info->rowbytes = row_width * 2; + } + /* This changes the data from G to XG */ + else + { + png_bytep sp = row + (png_size_t)row_width; + png_bytep dp = sp + (png_size_t)row_width; + for (i = 0; i < row_width; i++) + { + *(--dp) = *(--sp); + *(--dp) = lo_filler; + } + row_info->channels = 2; + row_info->pixel_depth = 16; + row_info->rowbytes = row_width * 2; + } + } + else if(row_info->bit_depth == 16) + { + /* This changes the data from GG to GGXX */ + if (flags & PNG_FLAG_FILLER_AFTER) + { + png_bytep sp = row + (png_size_t)row_width * 2; + png_bytep dp = sp + (png_size_t)row_width * 2; + for (i = 1; i < row_width; i++) + { + *(--dp) = hi_filler; + *(--dp) = lo_filler; + *(--dp) = *(--sp); + *(--dp) = *(--sp); + } + *(--dp) = hi_filler; + *(--dp) = lo_filler; + row_info->channels = 2; + row_info->pixel_depth = 32; + row_info->rowbytes = row_width * 4; + } + /* This changes the data from GG to XXGG */ + else + { + png_bytep sp = row + (png_size_t)row_width * 2; + png_bytep dp = sp + (png_size_t)row_width * 2; + for (i = 0; i < row_width; i++) + { + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = hi_filler; + *(--dp) = lo_filler; + } + row_info->channels = 2; + row_info->pixel_depth = 32; + row_info->rowbytes = row_width * 4; + } + } + } /* COLOR_TYPE == GRAY */ + else if (row_info->color_type == PNG_COLOR_TYPE_RGB) + { + if(row_info->bit_depth == 8) + { + /* This changes the data from RGB to RGBX */ + if (flags & PNG_FLAG_FILLER_AFTER) + { + png_bytep sp = row + (png_size_t)row_width * 3; + png_bytep dp = sp + (png_size_t)row_width; + for (i = 1; i < row_width; i++) + { + *(--dp) = lo_filler; + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + } + *(--dp) = lo_filler; + row_info->channels = 4; + row_info->pixel_depth = 32; + row_info->rowbytes = row_width * 4; + } + /* This changes the data from RGB to XRGB */ + else + { + png_bytep sp = row + (png_size_t)row_width * 3; + png_bytep dp = sp + (png_size_t)row_width; + for (i = 0; i < row_width; i++) + { + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = lo_filler; + } + row_info->channels = 4; + row_info->pixel_depth = 32; + row_info->rowbytes = row_width * 4; + } + } + else if(row_info->bit_depth == 16) + { + /* This changes the data from RRGGBB to RRGGBBXX */ + if (flags & PNG_FLAG_FILLER_AFTER) + { + png_bytep sp = row + (png_size_t)row_width * 6; + png_bytep dp = sp + (png_size_t)row_width * 2; + for (i = 1; i < row_width; i++) + { + *(--dp) = hi_filler; + *(--dp) = lo_filler; + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + } + *(--dp) = hi_filler; + *(--dp) = lo_filler; + row_info->channels = 4; + row_info->pixel_depth = 64; + row_info->rowbytes = row_width * 8; + } + /* This changes the data from RRGGBB to XXRRGGBB */ + else + { + png_bytep sp = row + (png_size_t)row_width * 6; + png_bytep dp = sp + (png_size_t)row_width * 2; + for (i = 0; i < row_width; i++) + { + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = *(--sp); + *(--dp) = hi_filler; + *(--dp) = lo_filler; + } + row_info->channels = 4; + row_info->pixel_depth = 64; + row_info->rowbytes = row_width * 8; + } + } + } /* COLOR_TYPE == RGB */ +} +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) +/* expand grayscale files to RGB, with or without alpha */ +void /* PRIVATE */ +png_do_gray_to_rgb(png_row_infop row_info, png_bytep row) +{ + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + png_debug(1, "in png_do_gray_to_rgb\n"); + if (row_info->bit_depth >= 8 && +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + !(row_info->color_type & PNG_COLOR_MASK_COLOR)) + { + if (row_info->color_type == PNG_COLOR_TYPE_GRAY) + { + if (row_info->bit_depth == 8) + { + png_bytep sp = row + (png_size_t)row_width - 1; + png_bytep dp = sp + (png_size_t)row_width * 2; + for (i = 0; i < row_width; i++) + { + *(dp--) = *sp; + *(dp--) = *sp; + *(dp--) = *(sp--); + } + } + else + { + png_bytep sp = row + (png_size_t)row_width * 2 - 1; + png_bytep dp = sp + (png_size_t)row_width * 4; + for (i = 0; i < row_width; i++) + { + *(dp--) = *sp; + *(dp--) = *(sp - 1); + *(dp--) = *sp; + *(dp--) = *(sp - 1); + *(dp--) = *(sp--); + *(dp--) = *(sp--); + } + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + if (row_info->bit_depth == 8) + { + png_bytep sp = row + (png_size_t)row_width * 2 - 1; + png_bytep dp = sp + (png_size_t)row_width * 2; + for (i = 0; i < row_width; i++) + { + *(dp--) = *(sp--); + *(dp--) = *sp; + *(dp--) = *sp; + *(dp--) = *(sp--); + } + } + else + { + png_bytep sp = row + (png_size_t)row_width * 4 - 1; + png_bytep dp = sp + (png_size_t)row_width * 4; + for (i = 0; i < row_width; i++) + { + *(dp--) = *(sp--); + *(dp--) = *(sp--); + *(dp--) = *sp; + *(dp--) = *(sp - 1); + *(dp--) = *sp; + *(dp--) = *(sp - 1); + *(dp--) = *(sp--); + *(dp--) = *(sp--); + } + } + } + row_info->channels += (png_byte)2; + row_info->color_type |= PNG_COLOR_MASK_COLOR; + row_info->pixel_depth = (png_byte)(row_info->channels * + row_info->bit_depth); + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); + } +} +#endif + +#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) +/* reduce RGB files to grayscale, with or without alpha + * using the equation given in Poynton's ColorFAQ at + * + * Copyright (c) 1998-01-04 Charles Poynton poynton at inforamp.net + * + * Y = 0.212671 * R + 0.715160 * G + 0.072169 * B + * + * We approximate this with + * + * Y = 0.21268 * R + 0.7151 * G + 0.07217 * B + * + * which can be expressed with integers as + * + * Y = (6969 * R + 23434 * G + 2365 * B)/32768 + * + * The calculation is to be done in a linear colorspace. + * + * Other integer coefficents can be used via png_set_rgb_to_gray(). + */ +int /* PRIVATE */ +png_do_rgb_to_gray(png_structp png_ptr, png_row_infop row_info, png_bytep row) + +{ + png_uint_32 i; + + png_uint_32 row_width = row_info->width; + int rgb_error = 0; + + png_debug(1, "in png_do_rgb_to_gray\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + (row_info->color_type & PNG_COLOR_MASK_COLOR)) + { + png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff; + png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff; + png_uint_32 bc = png_ptr->rgb_to_gray_blue_coeff; + + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + { + if (row_info->bit_depth == 8) + { +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL) + { + png_bytep sp = row; + png_bytep dp = row; + + for (i = 0; i < row_width; i++) + { + png_byte red = png_ptr->gamma_to_1[*(sp++)]; + png_byte green = png_ptr->gamma_to_1[*(sp++)]; + png_byte blue = png_ptr->gamma_to_1[*(sp++)]; + if(red != green || red != blue) + { + rgb_error |= 1; + *(dp++) = png_ptr->gamma_from_1[ + (rc*red+gc*green+bc*blue)>>15]; + } + else + *(dp++) = *(sp-1); + } + } + else +#endif + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_byte red = *(sp++); + png_byte green = *(sp++); + png_byte blue = *(sp++); + if(red != green || red != blue) + { + rgb_error |= 1; + *(dp++) = (png_byte)((rc*red+gc*green+bc*blue)>>15); + } + else + *(dp++) = *(sp-1); + } + } + } + + else /* RGB bit_depth == 16 */ + { +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->gamma_16_to_1 != NULL && + png_ptr->gamma_16_from_1 != NULL) + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 red, green, blue, w; + + red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + + if(red == green && red == blue) + w = red; + else + { + png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> + png_ptr->gamma_shift][red>>8]; + png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >> + png_ptr->gamma_shift][green>>8]; + png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >> + png_ptr->gamma_shift][blue>>8]; + png_uint_16 gray16 = (png_uint_16)((rc*red_1 + gc*green_1 + + bc*blue_1)>>15); + w = png_ptr->gamma_16_from_1[(gray16&0xff) >> + png_ptr->gamma_shift][gray16 >> 8]; + rgb_error |= 1; + } + + *(dp++) = (png_byte)((w>>8) & 0xff); + *(dp++) = (png_byte)(w & 0xff); + } + } + else +#endif + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 red, green, blue, gray16; + + red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + + if(red != green || red != blue) + rgb_error |= 1; + gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); + *(dp++) = (png_byte)((gray16>>8) & 0xff); + *(dp++) = (png_byte)(gray16 & 0xff); + } + } + } + } + if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + if (row_info->bit_depth == 8) + { +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL) + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_byte red = png_ptr->gamma_to_1[*(sp++)]; + png_byte green = png_ptr->gamma_to_1[*(sp++)]; + png_byte blue = png_ptr->gamma_to_1[*(sp++)]; + if(red != green || red != blue) + rgb_error |= 1; + *(dp++) = png_ptr->gamma_from_1 + [(rc*red + gc*green + bc*blue)>>15]; + *(dp++) = *(sp++); /* alpha */ + } + } + else +#endif + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_byte red = *(sp++); + png_byte green = *(sp++); + png_byte blue = *(sp++); + if(red != green || red != blue) + rgb_error |= 1; + *(dp++) = (png_byte)((rc*red + gc*green + bc*blue)>>15); + *(dp++) = *(sp++); /* alpha */ + } + } + } + else /* RGBA bit_depth == 16 */ + { +#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->gamma_16_to_1 != NULL && + png_ptr->gamma_16_from_1 != NULL) + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 red, green, blue, w; + + red = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + green = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + blue = (png_uint_16)(((*(sp))<<8) | *(sp+1)); sp+=2; + + if(red == green && red == blue) + w = red; + else + { + png_uint_16 red_1 = png_ptr->gamma_16_to_1[(red&0xff) >> + png_ptr->gamma_shift][red>>8]; + png_uint_16 green_1 = png_ptr->gamma_16_to_1[(green&0xff) >> + png_ptr->gamma_shift][green>>8]; + png_uint_16 blue_1 = png_ptr->gamma_16_to_1[(blue&0xff) >> + png_ptr->gamma_shift][blue>>8]; + png_uint_16 gray16 = (png_uint_16)((rc * red_1 + + gc * green_1 + bc * blue_1)>>15); + w = png_ptr->gamma_16_from_1[(gray16&0xff) >> + png_ptr->gamma_shift][gray16 >> 8]; + rgb_error |= 1; + } + + *(dp++) = (png_byte)((w>>8) & 0xff); + *(dp++) = (png_byte)(w & 0xff); + *(dp++) = *(sp++); /* alpha */ + *(dp++) = *(sp++); + } + } + else +#endif + { + png_bytep sp = row; + png_bytep dp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 red, green, blue, gray16; + red = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; + green = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; + blue = (png_uint_16)((*(sp)<<8) | *(sp+1)); sp+=2; + if(red != green || red != blue) + rgb_error |= 1; + gray16 = (png_uint_16)((rc*red + gc*green + bc*blue)>>15); + *(dp++) = (png_byte)((gray16>>8) & 0xff); + *(dp++) = (png_byte)(gray16 & 0xff); + *(dp++) = *(sp++); /* alpha */ + *(dp++) = *(sp++); + } + } + } + } + row_info->channels -= (png_byte)2; + row_info->color_type &= ~PNG_COLOR_MASK_COLOR; + row_info->pixel_depth = (png_byte)(row_info->channels * + row_info->bit_depth); + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); + } + return rgb_error; +} +#endif + +/* Build a grayscale palette. Palette is assumed to be 1 << bit_depth + * large of png_color. This lets grayscale images be treated as + * paletted. Most useful for gamma correction and simplification + * of code. + */ +void PNGAPI +png_build_grayscale_palette(int bit_depth, png_colorp palette) +{ + int num_palette; + int color_inc; + int i; + int v; + + png_debug(1, "in png_do_build_grayscale_palette\n"); + if (palette == NULL) + return; + + switch (bit_depth) + { + case 1: + num_palette = 2; + color_inc = 0xff; + break; + case 2: + num_palette = 4; + color_inc = 0x55; + break; + case 4: + num_palette = 16; + color_inc = 0x11; + break; + case 8: + num_palette = 256; + color_inc = 1; + break; + default: + num_palette = 0; + color_inc = 0; + break; + } + + for (i = 0, v = 0; i < num_palette; i++, v += color_inc) + { + palette[i].red = (png_byte)v; + palette[i].green = (png_byte)v; + palette[i].blue = (png_byte)v; + } +} + +/* This function is currently unused. Do we really need it? */ +#if defined(PNG_READ_DITHER_SUPPORTED) && defined(PNG_CORRECT_PALETTE_SUPPORTED) +void /* PRIVATE */ +png_correct_palette(png_structp png_ptr, png_colorp palette, + int num_palette) +{ + png_debug(1, "in png_correct_palette\n"); +#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \ + defined(PNG_READ_GAMMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) + if (png_ptr->transformations & (PNG_GAMMA | PNG_BACKGROUND)) + { + png_color back, back_1; + + if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE) + { + back.red = png_ptr->gamma_table[png_ptr->background.red]; + back.green = png_ptr->gamma_table[png_ptr->background.green]; + back.blue = png_ptr->gamma_table[png_ptr->background.blue]; + + back_1.red = png_ptr->gamma_to_1[png_ptr->background.red]; + back_1.green = png_ptr->gamma_to_1[png_ptr->background.green]; + back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue]; + } + else + { + double g; + + g = 1.0 / (png_ptr->background_gamma * png_ptr->screen_gamma); + + if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_SCREEN || + fabs(g - 1.0) < PNG_GAMMA_THRESHOLD) + { + back.red = png_ptr->background.red; + back.green = png_ptr->background.green; + back.blue = png_ptr->background.blue; + } + else + { + back.red = + (png_byte)(pow((double)png_ptr->background.red/255, g) * + 255.0 + 0.5); + back.green = + (png_byte)(pow((double)png_ptr->background.green/255, g) * + 255.0 + 0.5); + back.blue = + (png_byte)(pow((double)png_ptr->background.blue/255, g) * + 255.0 + 0.5); + } + + g = 1.0 / png_ptr->background_gamma; + + back_1.red = + (png_byte)(pow((double)png_ptr->background.red/255, g) * + 255.0 + 0.5); + back_1.green = + (png_byte)(pow((double)png_ptr->background.green/255, g) * + 255.0 + 0.5); + back_1.blue = + (png_byte)(pow((double)png_ptr->background.blue/255, g) * + 255.0 + 0.5); + } + + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + png_uint_32 i; + + for (i = 0; i < (png_uint_32)num_palette; i++) + { + if (i < png_ptr->num_trans && png_ptr->trans[i] == 0) + { + palette[i] = back; + } + else if (i < png_ptr->num_trans && png_ptr->trans[i] != 0xff) + { + png_byte v, w; + + v = png_ptr->gamma_to_1[png_ptr->palette[i].red]; + png_composite(w, v, png_ptr->trans[i], back_1.red); + palette[i].red = png_ptr->gamma_from_1[w]; + + v = png_ptr->gamma_to_1[png_ptr->palette[i].green]; + png_composite(w, v, png_ptr->trans[i], back_1.green); + palette[i].green = png_ptr->gamma_from_1[w]; + + v = png_ptr->gamma_to_1[png_ptr->palette[i].blue]; + png_composite(w, v, png_ptr->trans[i], back_1.blue); + palette[i].blue = png_ptr->gamma_from_1[w]; + } + else + { + palette[i].red = png_ptr->gamma_table[palette[i].red]; + palette[i].green = png_ptr->gamma_table[palette[i].green]; + palette[i].blue = png_ptr->gamma_table[palette[i].blue]; + } + } + } + else + { + int i; + + for (i = 0; i < num_palette; i++) + { + if (palette[i].red == (png_byte)png_ptr->trans_values.gray) + { + palette[i] = back; + } + else + { + palette[i].red = png_ptr->gamma_table[palette[i].red]; + palette[i].green = png_ptr->gamma_table[palette[i].green]; + palette[i].blue = png_ptr->gamma_table[palette[i].blue]; + } + } + } + } + else +#endif +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (png_ptr->transformations & PNG_GAMMA) + { + int i; + + for (i = 0; i < num_palette; i++) + { + palette[i].red = png_ptr->gamma_table[palette[i].red]; + palette[i].green = png_ptr->gamma_table[palette[i].green]; + palette[i].blue = png_ptr->gamma_table[palette[i].blue]; + } + } +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + else +#endif +#endif +#if defined(PNG_READ_BACKGROUND_SUPPORTED) + if (png_ptr->transformations & PNG_BACKGROUND) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + png_color back; + + back.red = (png_byte)png_ptr->background.red; + back.green = (png_byte)png_ptr->background.green; + back.blue = (png_byte)png_ptr->background.blue; + + for (i = 0; i < (int)png_ptr->num_trans; i++) + { + if (png_ptr->trans[i] == 0) + { + palette[i].red = back.red; + palette[i].green = back.green; + palette[i].blue = back.blue; + } + else if (png_ptr->trans[i] != 0xff) + { + png_composite(palette[i].red, png_ptr->palette[i].red, + png_ptr->trans[i], back.red); + png_composite(palette[i].green, png_ptr->palette[i].green, + png_ptr->trans[i], back.green); + png_composite(palette[i].blue, png_ptr->palette[i].blue, + png_ptr->trans[i], back.blue); + } + } + } + else /* assume grayscale palette (what else could it be?) */ + { + int i; + + for (i = 0; i < num_palette; i++) + { + if (i == (png_byte)png_ptr->trans_values.gray) + { + palette[i].red = (png_byte)png_ptr->background.red; + palette[i].green = (png_byte)png_ptr->background.green; + palette[i].blue = (png_byte)png_ptr->background.blue; + } + } + } + } +#endif +} +#endif + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) +/* Replace any alpha or transparency with the supplied background color. + * "background" is already in the screen gamma, while "background_1" is + * at a gamma of 1.0. Paletted files have already been taken care of. + */ +void /* PRIVATE */ +png_do_background(png_row_infop row_info, png_bytep row, + png_color_16p trans_values, png_color_16p background +#if defined(PNG_READ_GAMMA_SUPPORTED) + , png_color_16p background_1, + png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, + png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, + png_uint_16pp gamma_16_to_1, int gamma_shift +#endif + ) +{ + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width=row_info->width; + int shift; + + png_debug(1, "in png_do_background\n"); + if (background != NULL && +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + (!(row_info->color_type & PNG_COLOR_MASK_ALPHA) || + (row_info->color_type != PNG_COLOR_TYPE_PALETTE && trans_values))) + { + switch (row_info->color_type) + { + case PNG_COLOR_TYPE_GRAY: + { + switch (row_info->bit_depth) + { + case 1: + { + sp = row; + shift = 7; + for (i = 0; i < row_width; i++) + { + if ((png_uint_16)((*sp >> shift) & 0x01) + == trans_values->gray) + { + *sp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); + *sp |= (png_byte)(background->gray << shift); + } + if (!shift) + { + shift = 7; + sp++; + } + else + shift--; + } + break; + } + case 2: + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_table != NULL) + { + sp = row; + shift = 6; + for (i = 0; i < row_width; i++) + { + if ((png_uint_16)((*sp >> shift) & 0x03) + == trans_values->gray) + { + *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); + *sp |= (png_byte)(background->gray << shift); + } + else + { + png_byte p = (png_byte)((*sp >> shift) & 0x03); + png_byte g = (png_byte)((gamma_table [p | (p << 2) | + (p << 4) | (p << 6)] >> 6) & 0x03); + *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); + *sp |= (png_byte)(g << shift); + } + if (!shift) + { + shift = 6; + sp++; + } + else + shift -= 2; + } + } + else +#endif + { + sp = row; + shift = 6; + for (i = 0; i < row_width; i++) + { + if ((png_uint_16)((*sp >> shift) & 0x03) + == trans_values->gray) + { + *sp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); + *sp |= (png_byte)(background->gray << shift); + } + if (!shift) + { + shift = 6; + sp++; + } + else + shift -= 2; + } + } + break; + } + case 4: + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_table != NULL) + { + sp = row; + shift = 4; + for (i = 0; i < row_width; i++) + { + if ((png_uint_16)((*sp >> shift) & 0x0f) + == trans_values->gray) + { + *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); + *sp |= (png_byte)(background->gray << shift); + } + else + { + png_byte p = (png_byte)((*sp >> shift) & 0x0f); + png_byte g = (png_byte)((gamma_table[p | + (p << 4)] >> 4) & 0x0f); + *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); + *sp |= (png_byte)(g << shift); + } + if (!shift) + { + shift = 4; + sp++; + } + else + shift -= 4; + } + } + else +#endif + { + sp = row; + shift = 4; + for (i = 0; i < row_width; i++) + { + if ((png_uint_16)((*sp >> shift) & 0x0f) + == trans_values->gray) + { + *sp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); + *sp |= (png_byte)(background->gray << shift); + } + if (!shift) + { + shift = 4; + sp++; + } + else + shift -= 4; + } + } + break; + } + case 8: + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_table != NULL) + { + sp = row; + for (i = 0; i < row_width; i++, sp++) + { + if (*sp == trans_values->gray) + { + *sp = (png_byte)background->gray; + } + else + { + *sp = gamma_table[*sp]; + } + } + } + else +#endif + { + sp = row; + for (i = 0; i < row_width; i++, sp++) + { + if (*sp == trans_values->gray) + { + *sp = (png_byte)background->gray; + } + } + } + break; + } + case 16: + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_16 != NULL) + { + sp = row; + for (i = 0; i < row_width; i++, sp += 2) + { + png_uint_16 v; + + v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); + if (v == trans_values->gray) + { + /* background is already in screen gamma */ + *sp = (png_byte)((background->gray >> 8) & 0xff); + *(sp + 1) = (png_byte)(background->gray & 0xff); + } + else + { + v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + } + } + } + else +#endif + { + sp = row; + for (i = 0; i < row_width; i++, sp += 2) + { + png_uint_16 v; + + v = (png_uint_16)(((*sp) << 8) + *(sp + 1)); + if (v == trans_values->gray) + { + *sp = (png_byte)((background->gray >> 8) & 0xff); + *(sp + 1) = (png_byte)(background->gray & 0xff); + } + } + } + break; + } + } + break; + } + case PNG_COLOR_TYPE_RGB: + { + if (row_info->bit_depth == 8) + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_table != NULL) + { + sp = row; + for (i = 0; i < row_width; i++, sp += 3) + { + if (*sp == trans_values->red && + *(sp + 1) == trans_values->green && + *(sp + 2) == trans_values->blue) + { + *sp = (png_byte)background->red; + *(sp + 1) = (png_byte)background->green; + *(sp + 2) = (png_byte)background->blue; + } + else + { + *sp = gamma_table[*sp]; + *(sp + 1) = gamma_table[*(sp + 1)]; + *(sp + 2) = gamma_table[*(sp + 2)]; + } + } + } + else +#endif + { + sp = row; + for (i = 0; i < row_width; i++, sp += 3) + { + if (*sp == trans_values->red && + *(sp + 1) == trans_values->green && + *(sp + 2) == trans_values->blue) + { + *sp = (png_byte)background->red; + *(sp + 1) = (png_byte)background->green; + *(sp + 2) = (png_byte)background->blue; + } + } + } + } + else /* if (row_info->bit_depth == 16) */ + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_16 != NULL) + { + sp = row; + for (i = 0; i < row_width; i++, sp += 6) + { + png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1)); + png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); + png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); + if (r == trans_values->red && g == trans_values->green && + b == trans_values->blue) + { + /* background is already in screen gamma */ + *sp = (png_byte)((background->red >> 8) & 0xff); + *(sp + 1) = (png_byte)(background->red & 0xff); + *(sp + 2) = (png_byte)((background->green >> 8) & 0xff); + *(sp + 3) = (png_byte)(background->green & 0xff); + *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff); + *(sp + 5) = (png_byte)(background->blue & 0xff); + } + else + { + png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)]; + *(sp + 2) = (png_byte)((v >> 8) & 0xff); + *(sp + 3) = (png_byte)(v & 0xff); + v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)]; + *(sp + 4) = (png_byte)((v >> 8) & 0xff); + *(sp + 5) = (png_byte)(v & 0xff); + } + } + } + else +#endif + { + sp = row; + for (i = 0; i < row_width; i++, sp += 6) + { + png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp+1)); + png_uint_16 g = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); + png_uint_16 b = (png_uint_16)(((*(sp+4)) << 8) + *(sp+5)); + + if (r == trans_values->red && g == trans_values->green && + b == trans_values->blue) + { + *sp = (png_byte)((background->red >> 8) & 0xff); + *(sp + 1) = (png_byte)(background->red & 0xff); + *(sp + 2) = (png_byte)((background->green >> 8) & 0xff); + *(sp + 3) = (png_byte)(background->green & 0xff); + *(sp + 4) = (png_byte)((background->blue >> 8) & 0xff); + *(sp + 5) = (png_byte)(background->blue & 0xff); + } + } + } + } + break; + } + case PNG_COLOR_TYPE_GRAY_ALPHA: + { + if (row_info->bit_depth == 8) + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_to_1 != NULL && gamma_from_1 != NULL && + gamma_table != NULL) + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 2, dp++) + { + png_uint_16 a = *(sp + 1); + + if (a == 0xff) + { + *dp = gamma_table[*sp]; + } + else if (a == 0) + { + /* background is already in screen gamma */ + *dp = (png_byte)background->gray; + } + else + { + png_byte v, w; + + v = gamma_to_1[*sp]; + png_composite(w, v, a, background_1->gray); + *dp = gamma_from_1[w]; + } + } + } + else +#endif + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 2, dp++) + { + png_byte a = *(sp + 1); + + if (a == 0xff) + { + *dp = *sp; + } +#if defined(PNG_READ_GAMMA_SUPPORTED) + else if (a == 0) + { + *dp = (png_byte)background->gray; + } + else + { + png_composite(*dp, *sp, a, background_1->gray); + } +#else + *dp = (png_byte)background->gray; +#endif + } + } + } + else /* if (png_ptr->bit_depth == 16) */ + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_16 != NULL && gamma_16_from_1 != NULL && + gamma_16_to_1 != NULL) + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 4, dp += 2) + { + png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); + + if (a == (png_uint_16)0xffff) + { + png_uint_16 v; + + v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; + *dp = (png_byte)((v >> 8) & 0xff); + *(dp + 1) = (png_byte)(v & 0xff); + } +#if defined(PNG_READ_GAMMA_SUPPORTED) + else if (a == 0) +#else + else +#endif + { + /* background is already in screen gamma */ + *dp = (png_byte)((background->gray >> 8) & 0xff); + *(dp + 1) = (png_byte)(background->gray & 0xff); + } +#if defined(PNG_READ_GAMMA_SUPPORTED) + else + { + png_uint_16 g, v, w; + + g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; + png_composite_16(v, g, a, background_1->gray); + w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8]; + *dp = (png_byte)((w >> 8) & 0xff); + *(dp + 1) = (png_byte)(w & 0xff); + } +#endif + } + } + else +#endif + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 4, dp += 2) + { + png_uint_16 a = (png_uint_16)(((*(sp+2)) << 8) + *(sp+3)); + if (a == (png_uint_16)0xffff) + { + png_memcpy(dp, sp, 2); + } +#if defined(PNG_READ_GAMMA_SUPPORTED) + else if (a == 0) +#else + else +#endif + { + *dp = (png_byte)((background->gray >> 8) & 0xff); + *(dp + 1) = (png_byte)(background->gray & 0xff); + } +#if defined(PNG_READ_GAMMA_SUPPORTED) + else + { + png_uint_16 g, v; + + g = (png_uint_16)(((*sp) << 8) + *(sp + 1)); + png_composite_16(v, g, a, background_1->gray); + *dp = (png_byte)((v >> 8) & 0xff); + *(dp + 1) = (png_byte)(v & 0xff); + } +#endif + } + } + } + break; + } + case PNG_COLOR_TYPE_RGB_ALPHA: + { + if (row_info->bit_depth == 8) + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_to_1 != NULL && gamma_from_1 != NULL && + gamma_table != NULL) + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 4, dp += 3) + { + png_byte a = *(sp + 3); + + if (a == 0xff) + { + *dp = gamma_table[*sp]; + *(dp + 1) = gamma_table[*(sp + 1)]; + *(dp + 2) = gamma_table[*(sp + 2)]; + } + else if (a == 0) + { + /* background is already in screen gamma */ + *dp = (png_byte)background->red; + *(dp + 1) = (png_byte)background->green; + *(dp + 2) = (png_byte)background->blue; + } + else + { + png_byte v, w; + + v = gamma_to_1[*sp]; + png_composite(w, v, a, background_1->red); + *dp = gamma_from_1[w]; + v = gamma_to_1[*(sp + 1)]; + png_composite(w, v, a, background_1->green); + *(dp + 1) = gamma_from_1[w]; + v = gamma_to_1[*(sp + 2)]; + png_composite(w, v, a, background_1->blue); + *(dp + 2) = gamma_from_1[w]; + } + } + } + else +#endif + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 4, dp += 3) + { + png_byte a = *(sp + 3); + + if (a == 0xff) + { + *dp = *sp; + *(dp + 1) = *(sp + 1); + *(dp + 2) = *(sp + 2); + } + else if (a == 0) + { + *dp = (png_byte)background->red; + *(dp + 1) = (png_byte)background->green; + *(dp + 2) = (png_byte)background->blue; + } + else + { + png_composite(*dp, *sp, a, background->red); + png_composite(*(dp + 1), *(sp + 1), a, + background->green); + png_composite(*(dp + 2), *(sp + 2), a, + background->blue); + } + } + } + } + else /* if (row_info->bit_depth == 16) */ + { +#if defined(PNG_READ_GAMMA_SUPPORTED) + if (gamma_16 != NULL && gamma_16_from_1 != NULL && + gamma_16_to_1 != NULL) + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 8, dp += 6) + { + png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6)) + << 8) + (png_uint_16)(*(sp + 7))); + if (a == (png_uint_16)0xffff) + { + png_uint_16 v; + + v = gamma_16[*(sp + 1) >> gamma_shift][*sp]; + *dp = (png_byte)((v >> 8) & 0xff); + *(dp + 1) = (png_byte)(v & 0xff); + v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)]; + *(dp + 2) = (png_byte)((v >> 8) & 0xff); + *(dp + 3) = (png_byte)(v & 0xff); + v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)]; + *(dp + 4) = (png_byte)((v >> 8) & 0xff); + *(dp + 5) = (png_byte)(v & 0xff); + } + else if (a == 0) + { + /* background is already in screen gamma */ + *dp = (png_byte)((background->red >> 8) & 0xff); + *(dp + 1) = (png_byte)(background->red & 0xff); + *(dp + 2) = (png_byte)((background->green >> 8) & 0xff); + *(dp + 3) = (png_byte)(background->green & 0xff); + *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff); + *(dp + 5) = (png_byte)(background->blue & 0xff); + } + else + { + png_uint_16 v, w, x; + + v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; + png_composite_16(w, v, a, background_1->red); + x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; + *dp = (png_byte)((x >> 8) & 0xff); + *(dp + 1) = (png_byte)(x & 0xff); + v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)]; + png_composite_16(w, v, a, background_1->green); + x = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; + *(dp + 2) = (png_byte)((x >> 8) & 0xff); + *(dp + 3) = (png_byte)(x & 0xff); + v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)]; + png_composite_16(w, v, a, background_1->blue); + x = gamma_16_from_1[(w & 0xff) >> gamma_shift][w >> 8]; + *(dp + 4) = (png_byte)((x >> 8) & 0xff); + *(dp + 5) = (png_byte)(x & 0xff); + } + } + } + else +#endif + { + sp = row; + dp = row; + for (i = 0; i < row_width; i++, sp += 8, dp += 6) + { + png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6)) + << 8) + (png_uint_16)(*(sp + 7))); + if (a == (png_uint_16)0xffff) + { + png_memcpy(dp, sp, 6); + } + else if (a == 0) + { + *dp = (png_byte)((background->red >> 8) & 0xff); + *(dp + 1) = (png_byte)(background->red & 0xff); + *(dp + 2) = (png_byte)((background->green >> 8) & 0xff); + *(dp + 3) = (png_byte)(background->green & 0xff); + *(dp + 4) = (png_byte)((background->blue >> 8) & 0xff); + *(dp + 5) = (png_byte)(background->blue & 0xff); + } + else + { + png_uint_16 v; + + png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1)); + png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8) + + *(sp + 3)); + png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8) + + *(sp + 5)); + + png_composite_16(v, r, a, background->red); + *dp = (png_byte)((v >> 8) & 0xff); + *(dp + 1) = (png_byte)(v & 0xff); + png_composite_16(v, g, a, background->green); + *(dp + 2) = (png_byte)((v >> 8) & 0xff); + *(dp + 3) = (png_byte)(v & 0xff); + png_composite_16(v, b, a, background->blue); + *(dp + 4) = (png_byte)((v >> 8) & 0xff); + *(dp + 5) = (png_byte)(v & 0xff); + } + } + } + } + break; + } + } + + if (row_info->color_type & PNG_COLOR_MASK_ALPHA) + { + row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; + row_info->channels--; + row_info->pixel_depth = (png_byte)(row_info->channels * + row_info->bit_depth); + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); + } + } +} +#endif + +#if defined(PNG_READ_GAMMA_SUPPORTED) +/* Gamma correct the image, avoiding the alpha channel. Make sure + * you do this after you deal with the transparency issue on grayscale + * or RGB images. If your bit depth is 8, use gamma_table, if it + * is 16, use gamma_16_table and gamma_shift. Build these with + * build_gamma_table(). + */ +void /* PRIVATE */ +png_do_gamma(png_row_infop row_info, png_bytep row, + png_bytep gamma_table, png_uint_16pp gamma_16_table, + int gamma_shift) +{ + png_bytep sp; + png_uint_32 i; + png_uint_32 row_width=row_info->width; + + png_debug(1, "in png_do_gamma\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + ((row_info->bit_depth <= 8 && gamma_table != NULL) || + (row_info->bit_depth == 16 && gamma_16_table != NULL))) + { + switch (row_info->color_type) + { + case PNG_COLOR_TYPE_RGB: + { + if (row_info->bit_depth == 8) + { + sp = row; + for (i = 0; i < row_width; i++) + { + *sp = gamma_table[*sp]; + sp++; + *sp = gamma_table[*sp]; + sp++; + *sp = gamma_table[*sp]; + sp++; + } + } + else /* if (row_info->bit_depth == 16) */ + { + sp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 v; + + v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 2; + v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 2; + v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 2; + } + } + break; + } + case PNG_COLOR_TYPE_RGB_ALPHA: + { + if (row_info->bit_depth == 8) + { + sp = row; + for (i = 0; i < row_width; i++) + { + *sp = gamma_table[*sp]; + sp++; + *sp = gamma_table[*sp]; + sp++; + *sp = gamma_table[*sp]; + sp++; + sp++; + } + } + else /* if (row_info->bit_depth == 16) */ + { + sp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 2; + v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 2; + v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 4; + } + } + break; + } + case PNG_COLOR_TYPE_GRAY_ALPHA: + { + if (row_info->bit_depth == 8) + { + sp = row; + for (i = 0; i < row_width; i++) + { + *sp = gamma_table[*sp]; + sp += 2; + } + } + else /* if (row_info->bit_depth == 16) */ + { + sp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 4; + } + } + break; + } + case PNG_COLOR_TYPE_GRAY: + { + if (row_info->bit_depth == 2) + { + sp = row; + for (i = 0; i < row_width; i += 4) + { + int a = *sp & 0xc0; + int b = *sp & 0x30; + int c = *sp & 0x0c; + int d = *sp & 0x03; + + *sp = (png_byte)( + ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)]) ) & 0xc0)| + ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) & 0x30)| + ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) & 0x0c)| + ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) )); + sp++; + } + } + if (row_info->bit_depth == 4) + { + sp = row; + for (i = 0; i < row_width; i += 2) + { + int msb = *sp & 0xf0; + int lsb = *sp & 0x0f; + + *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0) + | (((int)gamma_table[(lsb << 4) | lsb]) >> 4)); + sp++; + } + } + else if (row_info->bit_depth == 8) + { + sp = row; + for (i = 0; i < row_width; i++) + { + *sp = gamma_table[*sp]; + sp++; + } + } + else if (row_info->bit_depth == 16) + { + sp = row; + for (i = 0; i < row_width; i++) + { + png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp]; + *sp = (png_byte)((v >> 8) & 0xff); + *(sp + 1) = (png_byte)(v & 0xff); + sp += 2; + } + } + break; + } + } + } +} +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) +/* Expands a palette row to an RGB or RGBA row depending + * upon whether you supply trans and num_trans. + */ +void /* PRIVATE */ +png_do_expand_palette(png_row_infop row_info, png_bytep row, + png_colorp palette, png_bytep trans, int num_trans) +{ + int shift, value; + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width=row_info->width; + + png_debug(1, "in png_do_expand_palette\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + row_info->color_type == PNG_COLOR_TYPE_PALETTE) + { + if (row_info->bit_depth < 8) + { + switch (row_info->bit_depth) + { + case 1: + { + sp = row + (png_size_t)((row_width - 1) >> 3); + dp = row + (png_size_t)row_width - 1; + shift = 7 - (int)((row_width + 7) & 0x07); + for (i = 0; i < row_width; i++) + { + if ((*sp >> shift) & 0x01) + *dp = 1; + else + *dp = 0; + if (shift == 7) + { + shift = 0; + sp--; + } + else + shift++; + + dp--; + } + break; + } + case 2: + { + sp = row + (png_size_t)((row_width - 1) >> 2); + dp = row + (png_size_t)row_width - 1; + shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); + for (i = 0; i < row_width; i++) + { + value = (*sp >> shift) & 0x03; + *dp = (png_byte)value; + if (shift == 6) + { + shift = 0; + sp--; + } + else + shift += 2; + + dp--; + } + break; + } + case 4: + { + sp = row + (png_size_t)((row_width - 1) >> 1); + dp = row + (png_size_t)row_width - 1; + shift = (int)((row_width & 0x01) << 2); + for (i = 0; i < row_width; i++) + { + value = (*sp >> shift) & 0x0f; + *dp = (png_byte)value; + if (shift == 4) + { + shift = 0; + sp--; + } + else + shift += 4; + + dp--; + } + break; + } + } + row_info->bit_depth = 8; + row_info->pixel_depth = 8; + row_info->rowbytes = row_width; + } + switch (row_info->bit_depth) + { + case 8: + { + if (trans != NULL) + { + sp = row + (png_size_t)row_width - 1; + dp = row + (png_size_t)(row_width << 2) - 1; + + for (i = 0; i < row_width; i++) + { + if ((int)(*sp) >= num_trans) + *dp-- = 0xff; + else + *dp-- = trans[*sp]; + *dp-- = palette[*sp].blue; + *dp-- = palette[*sp].green; + *dp-- = palette[*sp].red; + sp--; + } + row_info->bit_depth = 8; + row_info->pixel_depth = 32; + row_info->rowbytes = row_width * 4; + row_info->color_type = 6; + row_info->channels = 4; + } + else + { + sp = row + (png_size_t)row_width - 1; + dp = row + (png_size_t)(row_width * 3) - 1; + + for (i = 0; i < row_width; i++) + { + *dp-- = palette[*sp].blue; + *dp-- = palette[*sp].green; + *dp-- = palette[*sp].red; + sp--; + } + row_info->bit_depth = 8; + row_info->pixel_depth = 24; + row_info->rowbytes = row_width * 3; + row_info->color_type = 2; + row_info->channels = 3; + } + break; + } + } + } +} + +/* If the bit depth < 8, it is expanded to 8. Also, if the + * transparency value is supplied, an alpha channel is built. + */ +void /* PRIVATE */ +png_do_expand(png_row_infop row_info, png_bytep row, + png_color_16p trans_value) +{ + int shift, value; + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width=row_info->width; + + png_debug(1, "in png_do_expand\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + if (row_info->color_type == PNG_COLOR_TYPE_GRAY) + { + png_uint_16 gray = (png_uint_16)(trans_value ? trans_value->gray : 0); + + if (row_info->bit_depth < 8) + { + switch (row_info->bit_depth) + { + case 1: + { + gray = (png_uint_16)(gray*0xff); + sp = row + (png_size_t)((row_width - 1) >> 3); + dp = row + (png_size_t)row_width - 1; + shift = 7 - (int)((row_width + 7) & 0x07); + for (i = 0; i < row_width; i++) + { + if ((*sp >> shift) & 0x01) + *dp = 0xff; + else + *dp = 0; + if (shift == 7) + { + shift = 0; + sp--; + } + else + shift++; + + dp--; + } + break; + } + case 2: + { + gray = (png_uint_16)(gray*0x55); + sp = row + (png_size_t)((row_width - 1) >> 2); + dp = row + (png_size_t)row_width - 1; + shift = (int)((3 - ((row_width + 3) & 0x03)) << 1); + for (i = 0; i < row_width; i++) + { + value = (*sp >> shift) & 0x03; + *dp = (png_byte)(value | (value << 2) | (value << 4) | + (value << 6)); + if (shift == 6) + { + shift = 0; + sp--; + } + else + shift += 2; + + dp--; + } + break; + } + case 4: + { + gray = (png_uint_16)(gray*0x11); + sp = row + (png_size_t)((row_width - 1) >> 1); + dp = row + (png_size_t)row_width - 1; + shift = (int)((1 - ((row_width + 1) & 0x01)) << 2); + for (i = 0; i < row_width; i++) + { + value = (*sp >> shift) & 0x0f; + *dp = (png_byte)(value | (value << 4)); + if (shift == 4) + { + shift = 0; + sp--; + } + else + shift = 4; + + dp--; + } + break; + } + } + row_info->bit_depth = 8; + row_info->pixel_depth = 8; + row_info->rowbytes = row_width; + } + + if (trans_value != NULL) + { + if (row_info->bit_depth == 8) + { + sp = row + (png_size_t)row_width - 1; + dp = row + (png_size_t)(row_width << 1) - 1; + for (i = 0; i < row_width; i++) + { + if (*sp == gray) + *dp-- = 0; + else + *dp-- = 0xff; + *dp-- = *sp--; + } + } + else if (row_info->bit_depth == 16) + { + sp = row + row_info->rowbytes - 1; + dp = row + (row_info->rowbytes << 1) - 1; + for (i = 0; i < row_width; i++) + { + if (((png_uint_16)*(sp) | + ((png_uint_16)*(sp - 1) << 8)) == gray) + { + *dp-- = 0; + *dp-- = 0; + } + else + { + *dp-- = 0xff; + *dp-- = 0xff; + } + *dp-- = *sp--; + *dp-- = *sp--; + } + } + row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA; + row_info->channels = 2; + row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1); + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, + row_width); + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_RGB && trans_value) + { + if (row_info->bit_depth == 8) + { + sp = row + (png_size_t)row_info->rowbytes - 1; + dp = row + (png_size_t)(row_width << 2) - 1; + for (i = 0; i < row_width; i++) + { + if (*(sp - 2) == trans_value->red && + *(sp - 1) == trans_value->green && + *(sp - 0) == trans_value->blue) + *dp-- = 0; + else + *dp-- = 0xff; + *dp-- = *sp--; + *dp-- = *sp--; + *dp-- = *sp--; + } + } + else if (row_info->bit_depth == 16) + { + sp = row + row_info->rowbytes - 1; + dp = row + (png_size_t)(row_width << 3) - 1; + for (i = 0; i < row_width; i++) + { + if ((((png_uint_16)*(sp - 4) | + ((png_uint_16)*(sp - 5) << 8)) == trans_value->red) && + (((png_uint_16)*(sp - 2) | + ((png_uint_16)*(sp - 3) << 8)) == trans_value->green) && + (((png_uint_16)*(sp - 0) | + ((png_uint_16)*(sp - 1) << 8)) == trans_value->blue)) + { + *dp-- = 0; + *dp-- = 0; + } + else + { + *dp-- = 0xff; + *dp-- = 0xff; + } + *dp-- = *sp--; + *dp-- = *sp--; + *dp-- = *sp--; + *dp-- = *sp--; + *dp-- = *sp--; + *dp-- = *sp--; + } + } + row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA; + row_info->channels = 4; + row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2); + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); + } + } +} +#endif + +#if defined(PNG_READ_DITHER_SUPPORTED) +void /* PRIVATE */ +png_do_dither(png_row_infop row_info, png_bytep row, + png_bytep palette_lookup, png_bytep dither_lookup) +{ + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width=row_info->width; + + png_debug(1, "in png_do_dither\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + if (row_info->color_type == PNG_COLOR_TYPE_RGB && + palette_lookup && row_info->bit_depth == 8) + { + int r, g, b, p; + sp = row; + dp = row; + for (i = 0; i < row_width; i++) + { + r = *sp++; + g = *sp++; + b = *sp++; + + /* this looks real messy, but the compiler will reduce + it down to a reasonable formula. For example, with + 5 bits per color, we get: + p = (((r >> 3) & 0x1f) << 10) | + (((g >> 3) & 0x1f) << 5) | + ((b >> 3) & 0x1f); + */ + p = (((r >> (8 - PNG_DITHER_RED_BITS)) & + ((1 << PNG_DITHER_RED_BITS) - 1)) << + (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) | + (((g >> (8 - PNG_DITHER_GREEN_BITS)) & + ((1 << PNG_DITHER_GREEN_BITS) - 1)) << + (PNG_DITHER_BLUE_BITS)) | + ((b >> (8 - PNG_DITHER_BLUE_BITS)) & + ((1 << PNG_DITHER_BLUE_BITS) - 1)); + + *dp++ = palette_lookup[p]; + } + row_info->color_type = PNG_COLOR_TYPE_PALETTE; + row_info->channels = 1; + row_info->pixel_depth = row_info->bit_depth; + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); + } + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA && + palette_lookup != NULL && row_info->bit_depth == 8) + { + int r, g, b, p; + sp = row; + dp = row; + for (i = 0; i < row_width; i++) + { + r = *sp++; + g = *sp++; + b = *sp++; + sp++; + + p = (((r >> (8 - PNG_DITHER_RED_BITS)) & + ((1 << PNG_DITHER_RED_BITS) - 1)) << + (PNG_DITHER_GREEN_BITS + PNG_DITHER_BLUE_BITS)) | + (((g >> (8 - PNG_DITHER_GREEN_BITS)) & + ((1 << PNG_DITHER_GREEN_BITS) - 1)) << + (PNG_DITHER_BLUE_BITS)) | + ((b >> (8 - PNG_DITHER_BLUE_BITS)) & + ((1 << PNG_DITHER_BLUE_BITS) - 1)); + + *dp++ = palette_lookup[p]; + } + row_info->color_type = PNG_COLOR_TYPE_PALETTE; + row_info->channels = 1; + row_info->pixel_depth = row_info->bit_depth; + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,row_width); + } + else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE && + dither_lookup && row_info->bit_depth == 8) + { + sp = row; + for (i = 0; i < row_width; i++, sp++) + { + *sp = dither_lookup[*sp]; + } + } + } +} +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +#if defined(PNG_READ_GAMMA_SUPPORTED) +static int png_gamma_shift[] = + {0x10, 0x21, 0x42, 0x84, 0x110, 0x248, 0x550, 0xff0}; + +/* We build the 8- or 16-bit gamma tables here. Note that for 16-bit + * tables, we don't make a full table if we are reducing to 8-bit in + * the future. Note also how the gamma_16 tables are segmented so that + * we don't need to allocate > 64K chunks for a full 16-bit table. + */ +void /* PRIVATE */ +png_build_gamma_table(png_structp png_ptr) +{ + png_debug(1, "in png_build_gamma_table\n"); + if(png_ptr->gamma != 0.0) + { + if (png_ptr->bit_depth <= 8) + { + int i; + double g; + + if (png_ptr->screen_gamma > .000001) + g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); + else + g = 1.0; + + png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr, + (png_uint_32)256); + + for (i = 0; i < 256; i++) + { + png_ptr->gamma_table[i] = (png_byte)(pow((double)i / 255.0, + g) * 255.0 + .5); + } + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ + defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + if (png_ptr->transformations & ((PNG_BACKGROUND) | PNG_RGB_TO_GRAY)) + { + + g = 1.0 / (png_ptr->gamma); + + png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr, + (png_uint_32)256); + + for (i = 0; i < 256; i++) + { + png_ptr->gamma_to_1[i] = (png_byte)(pow((double)i / 255.0, + g) * 255.0 + .5); + } + + + png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr, + (png_uint_32)256); + + if(png_ptr->screen_gamma > 0.000001) + g = 1.0 / png_ptr->screen_gamma; + else + g = png_ptr->gamma; /* probably doing rgb_to_gray */ + + for (i = 0; i < 256; i++) + { + png_ptr->gamma_from_1[i] = (png_byte)(pow((double)i / 255.0, + g) * 255.0 + .5); + + } + } +#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */ + } + else + { + double g; + int i, j, shift, num; + int sig_bit; + png_uint_32 ig; + + if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) + { + sig_bit = (int)png_ptr->sig_bit.red; + if ((int)png_ptr->sig_bit.green > sig_bit) + sig_bit = png_ptr->sig_bit.green; + if ((int)png_ptr->sig_bit.blue > sig_bit) + sig_bit = png_ptr->sig_bit.blue; + } + else + { + sig_bit = (int)png_ptr->sig_bit.gray; + } + + if (sig_bit > 0) + shift = 16 - sig_bit; + else + shift = 0; + + if (png_ptr->transformations & PNG_16_TO_8) + { + if (shift < (16 - PNG_MAX_GAMMA_8)) + shift = (16 - PNG_MAX_GAMMA_8); + } + + if (shift > 8) + shift = 8; + if (shift < 0) + shift = 0; + + png_ptr->gamma_shift = (png_byte)shift; + + num = (1 << (8 - shift)); + + if (png_ptr->screen_gamma > .000001) + g = 1.0 / (png_ptr->gamma * png_ptr->screen_gamma); + else + g = 1.0; + + png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr, + (png_uint_32)(num * png_sizeof (png_uint_16p))); + + if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND)) + { + double fin, fout; + png_uint_32 last, max; + + for (i = 0; i < num; i++) + { + png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(256 * png_sizeof (png_uint_16))); + } + + g = 1.0 / g; + last = 0; + for (i = 0; i < 256; i++) + { + fout = ((double)i + 0.5) / 256.0; + fin = pow(fout, g); + max = (png_uint_32)(fin * (double)((png_uint_32)num << 8)); + while (last <= max) + { + png_ptr->gamma_16_table[(int)(last & (0xff >> shift))] + [(int)(last >> (8 - shift))] = (png_uint_16)( + (png_uint_16)i | ((png_uint_16)i << 8)); + last++; + } + } + while (last < ((png_uint_32)num << 8)) + { + png_ptr->gamma_16_table[(int)(last & (0xff >> shift))] + [(int)(last >> (8 - shift))] = (png_uint_16)65535L; + last++; + } + } + else + { + for (i = 0; i < num; i++) + { + png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(256 * png_sizeof (png_uint_16))); + + ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4); + for (j = 0; j < 256; j++) + { + png_ptr->gamma_16_table[i][j] = + (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / + 65535.0, g) * 65535.0 + .5); + } + } + } + +#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ + defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) + if (png_ptr->transformations & (PNG_BACKGROUND | PNG_RGB_TO_GRAY)) + { + + g = 1.0 / (png_ptr->gamma); + + png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr, + (png_uint_32)(num * png_sizeof (png_uint_16p ))); + + for (i = 0; i < num; i++) + { + png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(256 * png_sizeof (png_uint_16))); + + ig = (((png_uint_32)i * + (png_uint_32)png_gamma_shift[shift]) >> 4); + for (j = 0; j < 256; j++) + { + png_ptr->gamma_16_to_1[i][j] = + (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / + 65535.0, g) * 65535.0 + .5); + } + } + + if(png_ptr->screen_gamma > 0.000001) + g = 1.0 / png_ptr->screen_gamma; + else + g = png_ptr->gamma; /* probably doing rgb_to_gray */ + + png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr, + (png_uint_32)(num * png_sizeof (png_uint_16p))); + + for (i = 0; i < num; i++) + { + png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(256 * png_sizeof (png_uint_16))); + + ig = (((png_uint_32)i * + (png_uint_32)png_gamma_shift[shift]) >> 4); + for (j = 0; j < 256; j++) + { + png_ptr->gamma_16_from_1[i][j] = + (png_uint_16)(pow((double)(ig + ((png_uint_32)j << 8)) / + 65535.0, g) * 65535.0 + .5); + } + } + } +#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_RGB_TO_GRAY_SUPPORTED */ + } + } +} +#endif +/* To do: install integer version of png_build_gamma_table here */ +#endif + +#if defined(PNG_MNG_FEATURES_SUPPORTED) +/* undoes intrapixel differencing */ +void /* PRIVATE */ +png_do_read_intrapixel(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_read_intrapixel\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + (row_info->color_type & PNG_COLOR_MASK_COLOR)) + { + int bytes_per_pixel; + png_uint_32 row_width = row_info->width; + if (row_info->bit_depth == 8) + { + png_bytep rp; + png_uint_32 i; + + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + bytes_per_pixel = 3; + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + bytes_per_pixel = 4; + else + return; + + for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) + { + *(rp) = (png_byte)((256 + *rp + *(rp+1))&0xff); + *(rp+2) = (png_byte)((256 + *(rp+2) + *(rp+1))&0xff); + } + } + else if (row_info->bit_depth == 16) + { + png_bytep rp; + png_uint_32 i; + + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + bytes_per_pixel = 6; + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + bytes_per_pixel = 8; + else + return; + + for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) + { + png_uint_32 s0 = (*(rp ) << 8) | *(rp+1); + png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3); + png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5); + png_uint_32 red = (png_uint_32)((s0+s1+65536L) & 0xffffL); + png_uint_32 blue = (png_uint_32)((s2+s1+65536L) & 0xffffL); + *(rp ) = (png_byte)((red >> 8) & 0xff); + *(rp+1) = (png_byte)(red & 0xff); + *(rp+4) = (png_byte)((blue >> 8) & 0xff); + *(rp+5) = (png_byte)(blue & 0xff); + } + } + } +} +#endif /* PNG_MNG_FEATURES_SUPPORTED */ diff --git a/libpng/pngrutil.c b/libpng/pngrutil.c new file mode 100644 index 0000000..693d737 --- /dev/null +++ b/libpng/pngrutil.c @@ -0,0 +1,3124 @@ +/* pngrutil.c - utilities to read a PNG file + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file contains routines that are only called from within + * libpng itself during the course of reading an image. + */ + +#define PNG_INTERNAL +#include "png.h" + +#if defined(_WIN32_WCE) +/* strtod() function is not supported on WindowsCE */ +# ifdef PNG_FLOATING_POINT_SUPPORTED +__inline double strtod(const char *nptr, char **endptr) +{ + double result = 0; + int len; + wchar_t *str, *end; + + len = MultiByteToWideChar(CP_ACP, 0, nptr, -1, NULL, 0); + str = (wchar_t *)malloc(len * sizeof(wchar_t)); + if ( NULL != str ) + { + MultiByteToWideChar(CP_ACP, 0, nptr, -1, str, len); + result = wcstod(str, &end); + len = WideCharToMultiByte(CP_ACP, 0, end, -1, NULL, 0, NULL, NULL); + *endptr = (char *)nptr + (png_strlen(nptr) - len + 1); + free(str); + } + return result; +} +# endif +#endif + +png_uint_32 /* PRIVATE */ +png_get_uint_31(png_structp png_ptr, png_bytep buf) +{ + png_uint_32 i = png_get_uint_32(buf); + if (i > PNG_UINT_31_MAX) + png_error(png_ptr, "PNG unsigned integer out of range.\n"); + return (i); +} +#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED +/* Grab an unsigned 32-bit integer from a buffer in big-endian format. */ +png_uint_32 /* PRIVATE */ +png_get_uint_32(png_bytep buf) +{ + png_uint_32 i = ((png_uint_32)(*buf) << 24) + + ((png_uint_32)(*(buf + 1)) << 16) + + ((png_uint_32)(*(buf + 2)) << 8) + + (png_uint_32)(*(buf + 3)); + + return (i); +} + +#if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED) +/* Grab a signed 32-bit integer from a buffer in big-endian format. The + * data is stored in the PNG file in two's complement format, and it is + * assumed that the machine format for signed integers is the same. */ +png_int_32 /* PRIVATE */ +png_get_int_32(png_bytep buf) +{ + png_int_32 i = ((png_int_32)(*buf) << 24) + + ((png_int_32)(*(buf + 1)) << 16) + + ((png_int_32)(*(buf + 2)) << 8) + + (png_int_32)(*(buf + 3)); + + return (i); +} +#endif /* PNG_READ_pCAL_SUPPORTED */ + +/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */ +png_uint_16 /* PRIVATE */ +png_get_uint_16(png_bytep buf) +{ + png_uint_16 i = (png_uint_16)(((png_uint_16)(*buf) << 8) + + (png_uint_16)(*(buf + 1))); + + return (i); +} +#endif /* PNG_READ_BIG_ENDIAN_SUPPORTED */ + +/* Read data, and (optionally) run it through the CRC. */ +void /* PRIVATE */ +png_crc_read(png_structp png_ptr, png_bytep buf, png_size_t length) +{ + png_read_data(png_ptr, buf, length); + png_calculate_crc(png_ptr, buf, length); +} + +/* Optionally skip data and then check the CRC. Depending on whether we + are reading a ancillary or critical chunk, and how the program has set + things up, we may calculate the CRC on the data and print a message. + Returns '1' if there was a CRC error, '0' otherwise. */ +int /* PRIVATE */ +png_crc_finish(png_structp png_ptr, png_uint_32 skip) +{ + png_size_t i; + png_size_t istop = png_ptr->zbuf_size; + + for (i = (png_size_t)skip; i > istop; i -= istop) + { + png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); + } + if (i) + { + png_crc_read(png_ptr, png_ptr->zbuf, i); + } + + if (png_crc_error(png_ptr)) + { + if (((png_ptr->chunk_name[0] & 0x20) && /* Ancillary */ + !(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) || + (!(png_ptr->chunk_name[0] & 0x20) && /* Critical */ + (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE))) + { + png_chunk_warning(png_ptr, "CRC error"); + } + else + { + png_chunk_error(png_ptr, "CRC error"); + } + return (1); + } + + return (0); +} + +/* Compare the CRC stored in the PNG file with that calculated by libpng from + the data it has read thus far. */ +int /* PRIVATE */ +png_crc_error(png_structp png_ptr) +{ + png_byte crc_bytes[4]; + png_uint_32 crc; + int need_crc = 1; + + if (png_ptr->chunk_name[0] & 0x20) /* ancillary */ + { + if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) == + (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN)) + need_crc = 0; + } + else /* critical */ + { + if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) + need_crc = 0; + } + + png_read_data(png_ptr, crc_bytes, 4); + + if (need_crc) + { + crc = png_get_uint_32(crc_bytes); + return ((int)(crc != png_ptr->crc)); + } + else + return (0); +} + +#if defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) || \ + defined(PNG_READ_iCCP_SUPPORTED) +/* + * Decompress trailing data in a chunk. The assumption is that chunkdata + * points at an allocated area holding the contents of a chunk with a + * trailing compressed part. What we get back is an allocated area + * holding the original prefix part and an uncompressed version of the + * trailing part (the malloc area passed in is freed). + */ +png_charp /* PRIVATE */ +png_decompress_chunk(png_structp png_ptr, int comp_type, + png_charp chunkdata, png_size_t chunklength, + png_size_t prefix_size, png_size_t *newlength) +{ + static char msg[] = "Error decoding compressed text"; + png_charp text; + png_size_t text_size; + + if (comp_type == PNG_COMPRESSION_TYPE_BASE) + { + int ret = Z_OK; + png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size); + png_ptr->zstream.avail_in = (uInt)(chunklength - prefix_size); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + + text_size = 0; + text = NULL; + + while (png_ptr->zstream.avail_in) + { + ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); + if (ret != Z_OK && ret != Z_STREAM_END) + { + if (png_ptr->zstream.msg != NULL) + png_warning(png_ptr, png_ptr->zstream.msg); + else + png_warning(png_ptr, msg); + inflateReset(&png_ptr->zstream); + png_ptr->zstream.avail_in = 0; + + if (text == NULL) + { + text_size = prefix_size + png_sizeof(msg) + 1; + text = (png_charp)png_malloc_warn(png_ptr, text_size); + if (text == NULL) + { + png_free(png_ptr,chunkdata); + png_error(png_ptr,"Not enough memory to decompress chunk"); + } + png_memcpy(text, chunkdata, prefix_size); + } + + text[text_size - 1] = 0x00; + + /* Copy what we can of the error message into the text chunk */ + text_size = (png_size_t)(chunklength - (text - chunkdata) - 1); + text_size = png_sizeof(msg) > text_size ? text_size : + png_sizeof(msg); + png_memcpy(text + prefix_size, msg, text_size + 1); + break; + } + if (!png_ptr->zstream.avail_out || ret == Z_STREAM_END) + { + if (text == NULL) + { + text_size = prefix_size + + png_ptr->zbuf_size - png_ptr->zstream.avail_out; + text = (png_charp)png_malloc_warn(png_ptr, text_size + 1); + if (text == NULL) + { + png_free(png_ptr,chunkdata); + png_error(png_ptr,"Not enough memory to decompress chunk."); + } + png_memcpy(text + prefix_size, png_ptr->zbuf, + text_size - prefix_size); + png_memcpy(text, chunkdata, prefix_size); + *(text + text_size) = 0x00; + } + else + { + png_charp tmp; + + tmp = text; + text = (png_charp)png_malloc_warn(png_ptr, + (png_uint_32)(text_size + + png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1)); + if (text == NULL) + { + png_free(png_ptr, tmp); + png_free(png_ptr, chunkdata); + png_error(png_ptr,"Not enough memory to decompress chunk.."); + } + png_memcpy(text, tmp, text_size); + png_free(png_ptr, tmp); + png_memcpy(text + text_size, png_ptr->zbuf, + (png_ptr->zbuf_size - png_ptr->zstream.avail_out)); + text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out; + *(text + text_size) = 0x00; + } + if (ret == Z_STREAM_END) + break; + else + { + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + } + } + } + if (ret != Z_STREAM_END) + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char umsg[50]; + + if (ret == Z_BUF_ERROR) + sprintf(umsg,"Buffer error in compressed datastream in %s chunk", + png_ptr->chunk_name); + else if (ret == Z_DATA_ERROR) + sprintf(umsg,"Data error in compressed datastream in %s chunk", + png_ptr->chunk_name); + else + sprintf(umsg,"Incomplete compressed datastream in %s chunk", + png_ptr->chunk_name); + png_warning(png_ptr, umsg); +#else + png_warning(png_ptr, + "Incomplete compressed datastream in chunk other than IDAT"); +#endif + text_size=prefix_size; + if (text == NULL) + { + text = (png_charp)png_malloc_warn(png_ptr, text_size+1); + if (text == NULL) + { + png_free(png_ptr, chunkdata); + png_error(png_ptr,"Not enough memory for text."); + } + png_memcpy(text, chunkdata, prefix_size); + } + *(text + text_size) = 0x00; + } + + inflateReset(&png_ptr->zstream); + png_ptr->zstream.avail_in = 0; + + png_free(png_ptr, chunkdata); + chunkdata = text; + *newlength=text_size; + } + else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */ + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char umsg[50]; + + sprintf(umsg, "Unknown zTXt compression type %d", comp_type); + png_warning(png_ptr, umsg); +#else + png_warning(png_ptr, "Unknown zTXt compression type"); +#endif + + *(chunkdata + prefix_size) = 0x00; + *newlength=prefix_size; + } + + return chunkdata; +} +#endif + +/* read and check the IDHR chunk */ +void /* PRIVATE */ +png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_byte buf[13]; + png_uint_32 width, height; + int bit_depth, color_type, compression_type, filter_type; + int interlace_type; + + png_debug(1, "in png_handle_IHDR\n"); + + if (png_ptr->mode & PNG_HAVE_IHDR) + png_error(png_ptr, "Out of place IHDR"); + + /* check the length */ + if (length != 13) + png_error(png_ptr, "Invalid IHDR chunk"); + + png_ptr->mode |= PNG_HAVE_IHDR; + + png_crc_read(png_ptr, buf, 13); + png_crc_finish(png_ptr, 0); + + width = png_get_uint_31(png_ptr, buf); + height = png_get_uint_31(png_ptr, buf + 4); + bit_depth = buf[8]; + color_type = buf[9]; + compression_type = buf[10]; + filter_type = buf[11]; + interlace_type = buf[12]; + + /* set internal variables */ + png_ptr->width = width; + png_ptr->height = height; + png_ptr->bit_depth = (png_byte)bit_depth; + png_ptr->interlaced = (png_byte)interlace_type; + png_ptr->color_type = (png_byte)color_type; +#if defined(PNG_MNG_FEATURES_SUPPORTED) + png_ptr->filter_type = (png_byte)filter_type; +#endif + png_ptr->compression_type = (png_byte)compression_type; + + /* find number of channels */ + switch (png_ptr->color_type) + { + case PNG_COLOR_TYPE_GRAY: + case PNG_COLOR_TYPE_PALETTE: + png_ptr->channels = 1; + break; + case PNG_COLOR_TYPE_RGB: + png_ptr->channels = 3; + break; + case PNG_COLOR_TYPE_GRAY_ALPHA: + png_ptr->channels = 2; + break; + case PNG_COLOR_TYPE_RGB_ALPHA: + png_ptr->channels = 4; + break; + } + + /* set up other useful info */ + png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth * + png_ptr->channels); + png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width); + png_debug1(3,"bit_depth = %d\n", png_ptr->bit_depth); + png_debug1(3,"channels = %d\n", png_ptr->channels); + png_debug1(3,"rowbytes = %lu\n", png_ptr->rowbytes); + png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, + color_type, interlace_type, compression_type, filter_type); +} + +/* read and check the palette */ +void /* PRIVATE */ +png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_color palette[PNG_MAX_PALETTE_LENGTH]; + int num, i; +#ifndef PNG_NO_POINTER_INDEXING + png_colorp pal_ptr; +#endif + + png_debug(1, "in png_handle_PLTE\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before PLTE"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid PLTE after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->mode & PNG_HAVE_PLTE) + png_error(png_ptr, "Duplicate PLTE chunk"); + + png_ptr->mode |= PNG_HAVE_PLTE; + + if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR)) + { + png_warning(png_ptr, + "Ignoring PLTE chunk in grayscale PNG"); + png_crc_finish(png_ptr, length); + return; + } +#if !defined(PNG_READ_OPT_PLTE_SUPPORTED) + if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) + { + png_crc_finish(png_ptr, length); + return; + } +#endif + + if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3) + { + if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) + { + png_warning(png_ptr, "Invalid palette chunk"); + png_crc_finish(png_ptr, length); + return; + } + else + { + png_error(png_ptr, "Invalid palette chunk"); + } + } + + num = (int)length / 3; + +#ifndef PNG_NO_POINTER_INDEXING + for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++) + { + png_byte buf[3]; + + png_crc_read(png_ptr, buf, 3); + pal_ptr->red = buf[0]; + pal_ptr->green = buf[1]; + pal_ptr->blue = buf[2]; + } +#else + for (i = 0; i < num; i++) + { + png_byte buf[3]; + + png_crc_read(png_ptr, buf, 3); + /* don't depend upon png_color being any order */ + palette[i].red = buf[0]; + palette[i].green = buf[1]; + palette[i].blue = buf[2]; + } +#endif + + /* If we actually NEED the PLTE chunk (ie for a paletted image), we do + whatever the normal CRC configuration tells us. However, if we + have an RGB image, the PLTE can be considered ancillary, so + we will act as though it is. */ +#if !defined(PNG_READ_OPT_PLTE_SUPPORTED) + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) +#endif + { + png_crc_finish(png_ptr, 0); + } +#if !defined(PNG_READ_OPT_PLTE_SUPPORTED) + else if (png_crc_error(png_ptr)) /* Only if we have a CRC error */ + { + /* If we don't want to use the data from an ancillary chunk, + we have two options: an error abort, or a warning and we + ignore the data in this chunk (which should be OK, since + it's considered ancillary for a RGB or RGBA image). */ + if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_USE)) + { + if (png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) + { + png_chunk_error(png_ptr, "CRC error"); + } + else + { + png_chunk_warning(png_ptr, "CRC error"); + return; + } + } + /* Otherwise, we (optionally) emit a warning and use the chunk. */ + else if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)) + { + png_chunk_warning(png_ptr, "CRC error"); + } + } +#endif + + png_set_PLTE(png_ptr, info_ptr, palette, num); + +#if defined(PNG_READ_tRNS_SUPPORTED) + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) + { + if (png_ptr->num_trans > (png_uint_16)num) + { + png_warning(png_ptr, "Truncating incorrect tRNS chunk length"); + png_ptr->num_trans = (png_uint_16)num; + } + if (info_ptr->num_trans > (png_uint_16)num) + { + png_warning(png_ptr, "Truncating incorrect info tRNS chunk length"); + info_ptr->num_trans = (png_uint_16)num; + } + } + } +#endif + +} + +void /* PRIVATE */ +png_handle_IEND(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_debug(1, "in png_handle_IEND\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR) || !(png_ptr->mode & PNG_HAVE_IDAT)) + { + png_error(png_ptr, "No image in file"); + } + + png_ptr->mode |= (PNG_AFTER_IDAT | PNG_HAVE_IEND); + + if (length != 0) + { + png_warning(png_ptr, "Incorrect IEND chunk length"); + } + png_crc_finish(png_ptr, length); + + if (info_ptr == NULL) /* quiet compiler warnings about unused info_ptr */ + return; +} + +#if defined(PNG_READ_gAMA_SUPPORTED) +void /* PRIVATE */ +png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_fixed_point igamma; +#ifdef PNG_FLOATING_POINT_SUPPORTED + float file_gamma; +#endif + png_byte buf[4]; + + png_debug(1, "in png_handle_gAMA\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before gAMA"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid gAMA after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->mode & PNG_HAVE_PLTE) + /* Should be an error, but we can cope with it */ + png_warning(png_ptr, "Out of place gAMA chunk"); + + if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA) +#if defined(PNG_READ_sRGB_SUPPORTED) + && !(info_ptr->valid & PNG_INFO_sRGB) +#endif + ) + { + png_warning(png_ptr, "Duplicate gAMA chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (length != 4) + { + png_warning(png_ptr, "Incorrect gAMA chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 4); + if (png_crc_finish(png_ptr, 0)) + return; + + igamma = (png_fixed_point)png_get_uint_32(buf); + /* check for zero gamma */ + if (igamma == 0) + { + png_warning(png_ptr, + "Ignoring gAMA chunk with gamma=0"); + return; + } + +#if defined(PNG_READ_sRGB_SUPPORTED) + if (info_ptr->valid & PNG_INFO_sRGB) + if (PNG_OUT_OF_RANGE(igamma, 45500L, 500)) + { + png_warning(png_ptr, + "Ignoring incorrect gAMA value when sRGB is also present"); +#ifndef PNG_NO_CONSOLE_IO + fprintf(stderr, "gamma = (%d/100000)\n", (int)igamma); +#endif + return; + } +#endif /* PNG_READ_sRGB_SUPPORTED */ + +#ifdef PNG_FLOATING_POINT_SUPPORTED + file_gamma = (float)igamma / (float)100000.0; +# ifdef PNG_READ_GAMMA_SUPPORTED + png_ptr->gamma = file_gamma; +# endif + png_set_gAMA(png_ptr, info_ptr, file_gamma); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + png_set_gAMA_fixed(png_ptr, info_ptr, igamma); +#endif +} +#endif + +#if defined(PNG_READ_sBIT_SUPPORTED) +void /* PRIVATE */ +png_handle_sBIT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_size_t truelen; + png_byte buf[4]; + + png_debug(1, "in png_handle_sBIT\n"); + + buf[0] = buf[1] = buf[2] = buf[3] = 0; + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before sBIT"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid sBIT after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->mode & PNG_HAVE_PLTE) + { + /* Should be an error, but we can cope with it */ + png_warning(png_ptr, "Out of place sBIT chunk"); + } + if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)) + { + png_warning(png_ptr, "Duplicate sBIT chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + truelen = 3; + else + truelen = (png_size_t)png_ptr->channels; + + if (length != truelen || length > 4) + { + png_warning(png_ptr, "Incorrect sBIT chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, truelen); + if (png_crc_finish(png_ptr, 0)) + return; + + if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) + { + png_ptr->sig_bit.red = buf[0]; + png_ptr->sig_bit.green = buf[1]; + png_ptr->sig_bit.blue = buf[2]; + png_ptr->sig_bit.alpha = buf[3]; + } + else + { + png_ptr->sig_bit.gray = buf[0]; + png_ptr->sig_bit.red = buf[0]; + png_ptr->sig_bit.green = buf[0]; + png_ptr->sig_bit.blue = buf[0]; + png_ptr->sig_bit.alpha = buf[1]; + } + png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit)); +} +#endif + +#if defined(PNG_READ_cHRM_SUPPORTED) +void /* PRIVATE */ +png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_byte buf[4]; +#ifdef PNG_FLOATING_POINT_SUPPORTED + float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; +#endif + png_fixed_point int_x_white, int_y_white, int_x_red, int_y_red, int_x_green, + int_y_green, int_x_blue, int_y_blue; + + png_uint_32 uint_x, uint_y; + + png_debug(1, "in png_handle_cHRM\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before cHRM"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid cHRM after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->mode & PNG_HAVE_PLTE) + /* Should be an error, but we can cope with it */ + png_warning(png_ptr, "Missing PLTE before cHRM"); + + if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM) +#if defined(PNG_READ_sRGB_SUPPORTED) + && !(info_ptr->valid & PNG_INFO_sRGB) +#endif + ) + { + png_warning(png_ptr, "Duplicate cHRM chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (length != 32) + { + png_warning(png_ptr, "Incorrect cHRM chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 4); + uint_x = png_get_uint_32(buf); + + png_crc_read(png_ptr, buf, 4); + uint_y = png_get_uint_32(buf); + + if (uint_x > 80000L || uint_y > 80000L || + uint_x + uint_y > 100000L) + { + png_warning(png_ptr, "Invalid cHRM white point"); + png_crc_finish(png_ptr, 24); + return; + } + int_x_white = (png_fixed_point)uint_x; + int_y_white = (png_fixed_point)uint_y; + + png_crc_read(png_ptr, buf, 4); + uint_x = png_get_uint_32(buf); + + png_crc_read(png_ptr, buf, 4); + uint_y = png_get_uint_32(buf); + + if (uint_x > 80000L || uint_y > 80000L || + uint_x + uint_y > 100000L) + { + png_warning(png_ptr, "Invalid cHRM red point"); + png_crc_finish(png_ptr, 16); + return; + } + int_x_red = (png_fixed_point)uint_x; + int_y_red = (png_fixed_point)uint_y; + + png_crc_read(png_ptr, buf, 4); + uint_x = png_get_uint_32(buf); + + png_crc_read(png_ptr, buf, 4); + uint_y = png_get_uint_32(buf); + + if (uint_x > 80000L || uint_y > 80000L || + uint_x + uint_y > 100000L) + { + png_warning(png_ptr, "Invalid cHRM green point"); + png_crc_finish(png_ptr, 8); + return; + } + int_x_green = (png_fixed_point)uint_x; + int_y_green = (png_fixed_point)uint_y; + + png_crc_read(png_ptr, buf, 4); + uint_x = png_get_uint_32(buf); + + png_crc_read(png_ptr, buf, 4); + uint_y = png_get_uint_32(buf); + + if (uint_x > 80000L || uint_y > 80000L || + uint_x + uint_y > 100000L) + { + png_warning(png_ptr, "Invalid cHRM blue point"); + png_crc_finish(png_ptr, 0); + return; + } + int_x_blue = (png_fixed_point)uint_x; + int_y_blue = (png_fixed_point)uint_y; + +#ifdef PNG_FLOATING_POINT_SUPPORTED + white_x = (float)int_x_white / (float)100000.0; + white_y = (float)int_y_white / (float)100000.0; + red_x = (float)int_x_red / (float)100000.0; + red_y = (float)int_y_red / (float)100000.0; + green_x = (float)int_x_green / (float)100000.0; + green_y = (float)int_y_green / (float)100000.0; + blue_x = (float)int_x_blue / (float)100000.0; + blue_y = (float)int_y_blue / (float)100000.0; +#endif + +#if defined(PNG_READ_sRGB_SUPPORTED) + if (info_ptr->valid & PNG_INFO_sRGB) + { + if (PNG_OUT_OF_RANGE(int_x_white, 31270, 1000) || + PNG_OUT_OF_RANGE(int_y_white, 32900, 1000) || + PNG_OUT_OF_RANGE(int_x_red, 64000L, 1000) || + PNG_OUT_OF_RANGE(int_y_red, 33000, 1000) || + PNG_OUT_OF_RANGE(int_x_green, 30000, 1000) || + PNG_OUT_OF_RANGE(int_y_green, 60000L, 1000) || + PNG_OUT_OF_RANGE(int_x_blue, 15000, 1000) || + PNG_OUT_OF_RANGE(int_y_blue, 6000, 1000)) + { + + png_warning(png_ptr, + "Ignoring incorrect cHRM value when sRGB is also present"); +#ifndef PNG_NO_CONSOLE_IO +#ifdef PNG_FLOATING_POINT_SUPPORTED + fprintf(stderr,"wx=%f, wy=%f, rx=%f, ry=%f\n", + white_x, white_y, red_x, red_y); + fprintf(stderr,"gx=%f, gy=%f, bx=%f, by=%f\n", + green_x, green_y, blue_x, blue_y); +#else + fprintf(stderr,"wx=%ld, wy=%ld, rx=%ld, ry=%ld\n", + int_x_white, int_y_white, int_x_red, int_y_red); + fprintf(stderr,"gx=%ld, gy=%ld, bx=%ld, by=%ld\n", + int_x_green, int_y_green, int_x_blue, int_y_blue); +#endif +#endif /* PNG_NO_CONSOLE_IO */ + } + png_crc_finish(png_ptr, 0); + return; + } +#endif /* PNG_READ_sRGB_SUPPORTED */ + +#ifdef PNG_FLOATING_POINT_SUPPORTED + png_set_cHRM(png_ptr, info_ptr, + white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + png_set_cHRM_fixed(png_ptr, info_ptr, + int_x_white, int_y_white, int_x_red, int_y_red, int_x_green, + int_y_green, int_x_blue, int_y_blue); +#endif + if (png_crc_finish(png_ptr, 0)) + return; +} +#endif + +#if defined(PNG_READ_sRGB_SUPPORTED) +void /* PRIVATE */ +png_handle_sRGB(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + int intent; + png_byte buf[1]; + + png_debug(1, "in png_handle_sRGB\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before sRGB"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid sRGB after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->mode & PNG_HAVE_PLTE) + /* Should be an error, but we can cope with it */ + png_warning(png_ptr, "Out of place sRGB chunk"); + + if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)) + { + png_warning(png_ptr, "Duplicate sRGB chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (length != 1) + { + png_warning(png_ptr, "Incorrect sRGB chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 1); + if (png_crc_finish(png_ptr, 0)) + return; + + intent = buf[0]; + /* check for bad intent */ + if (intent >= PNG_sRGB_INTENT_LAST) + { + png_warning(png_ptr, "Unknown sRGB intent"); + return; + } + +#if defined(PNG_READ_gAMA_SUPPORTED) && defined(PNG_READ_GAMMA_SUPPORTED) + if ((info_ptr->valid & PNG_INFO_gAMA)) + { + png_fixed_point igamma; +#ifdef PNG_FIXED_POINT_SUPPORTED + igamma=info_ptr->int_gamma; +#else +# ifdef PNG_FLOATING_POINT_SUPPORTED + igamma=(png_fixed_point)(info_ptr->gamma * 100000.); +# endif +#endif + if (PNG_OUT_OF_RANGE(igamma, 45500L, 500)) + { + png_warning(png_ptr, + "Ignoring incorrect gAMA value when sRGB is also present"); +#ifndef PNG_NO_CONSOLE_IO +# ifdef PNG_FIXED_POINT_SUPPORTED + fprintf(stderr,"incorrect gamma=(%d/100000)\n",(int)png_ptr->int_gamma); +# else +# ifdef PNG_FLOATING_POINT_SUPPORTED + fprintf(stderr,"incorrect gamma=%f\n",png_ptr->gamma); +# endif +# endif +#endif + } + } +#endif /* PNG_READ_gAMA_SUPPORTED */ + +#ifdef PNG_READ_cHRM_SUPPORTED +#ifdef PNG_FIXED_POINT_SUPPORTED + if (info_ptr->valid & PNG_INFO_cHRM) + if (PNG_OUT_OF_RANGE(info_ptr->int_x_white, 31270, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_y_white, 32900, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_x_red, 64000L, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_y_red, 33000, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_x_green, 30000, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_y_green, 60000L, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_x_blue, 15000, 1000) || + PNG_OUT_OF_RANGE(info_ptr->int_y_blue, 6000, 1000)) + { + png_warning(png_ptr, + "Ignoring incorrect cHRM value when sRGB is also present"); + } +#endif /* PNG_FIXED_POINT_SUPPORTED */ +#endif /* PNG_READ_cHRM_SUPPORTED */ + + png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr, intent); +} +#endif /* PNG_READ_sRGB_SUPPORTED */ + +#if defined(PNG_READ_iCCP_SUPPORTED) +void /* PRIVATE */ +png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +/* Note: this does not properly handle chunks that are > 64K under DOS */ +{ + png_charp chunkdata; + png_byte compression_type; + png_bytep pC; + png_charp profile; + png_uint_32 skip = 0; + png_uint_32 profile_size, profile_length; + png_size_t slength, prefix_length, data_length; + + png_debug(1, "in png_handle_iCCP\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before iCCP"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid iCCP after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->mode & PNG_HAVE_PLTE) + /* Should be an error, but we can cope with it */ + png_warning(png_ptr, "Out of place iCCP chunk"); + + if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)) + { + png_warning(png_ptr, "Duplicate iCCP chunk"); + png_crc_finish(png_ptr, length); + return; + } + +#ifdef PNG_MAX_MALLOC_64K + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr, "iCCP chunk too large to fit in memory"); + skip = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + + chunkdata = (png_charp)png_malloc(png_ptr, length + 1); + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)chunkdata, slength); + + if (png_crc_finish(png_ptr, skip)) + { + png_free(png_ptr, chunkdata); + return; + } + + chunkdata[slength] = 0x00; + + for (profile = chunkdata; *profile; profile++) + /* empty loop to find end of name */ ; + + ++profile; + + /* there should be at least one zero (the compression type byte) + following the separator, and we should be on it */ + if ( profile >= chunkdata + slength) + { + png_free(png_ptr, chunkdata); + png_warning(png_ptr, "Malformed iCCP chunk"); + return; + } + + /* compression_type should always be zero */ + compression_type = *profile++; + if (compression_type) + { + png_warning(png_ptr, "Ignoring nonzero compression type in iCCP chunk"); + compression_type=0x00; /* Reset it to zero (libpng-1.0.6 through 1.0.8 + wrote nonzero) */ + } + + prefix_length = profile - chunkdata; + chunkdata = png_decompress_chunk(png_ptr, compression_type, chunkdata, + slength, prefix_length, &data_length); + + profile_length = data_length - prefix_length; + + if ( prefix_length > data_length || profile_length < 4) + { + png_free(png_ptr, chunkdata); + png_warning(png_ptr, "Profile size field missing from iCCP chunk"); + return; + } + + /* Check the profile_size recorded in the first 32 bits of the ICC profile */ + pC = (png_bytep)(chunkdata+prefix_length); + profile_size = ((*(pC ))<<24) | + ((*(pC+1))<<16) | + ((*(pC+2))<< 8) | + ((*(pC+3)) ); + + if(profile_size < profile_length) + profile_length = profile_size; + + if(profile_size > profile_length) + { + png_free(png_ptr, chunkdata); + png_warning(png_ptr, "Ignoring truncated iCCP profile.\n"); + return; + } + + png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type, + chunkdata + prefix_length, profile_length); + png_free(png_ptr, chunkdata); +} +#endif /* PNG_READ_iCCP_SUPPORTED */ + +#if defined(PNG_READ_sPLT_SUPPORTED) +void /* PRIVATE */ +png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +/* Note: this does not properly handle chunks that are > 64K under DOS */ +{ + png_bytep chunkdata; + png_bytep entry_start; + png_sPLT_t new_palette; +#ifdef PNG_NO_POINTER_INDEXING + png_sPLT_entryp pp; +#endif + int data_length, entry_size, i; + png_uint_32 skip = 0; + png_size_t slength; + + png_debug(1, "in png_handle_sPLT\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before sPLT"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid sPLT after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + +#ifdef PNG_MAX_MALLOC_64K + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr, "sPLT chunk too large to fit in memory"); + skip = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + + chunkdata = (png_bytep)png_malloc(png_ptr, length + 1); + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)chunkdata, slength); + + if (png_crc_finish(png_ptr, skip)) + { + png_free(png_ptr, chunkdata); + return; + } + + chunkdata[slength] = 0x00; + + for (entry_start = chunkdata; *entry_start; entry_start++) + /* empty loop to find end of name */ ; + ++entry_start; + + /* a sample depth should follow the separator, and we should be on it */ + if (entry_start > chunkdata + slength) + { + png_free(png_ptr, chunkdata); + png_warning(png_ptr, "malformed sPLT chunk"); + return; + } + + new_palette.depth = *entry_start++; + entry_size = (new_palette.depth == 8 ? 6 : 10); + data_length = (slength - (entry_start - chunkdata)); + + /* integrity-check the data length */ + if (data_length % entry_size) + { + png_free(png_ptr, chunkdata); + png_warning(png_ptr, "sPLT chunk has bad length"); + return; + } + + new_palette.nentries = (png_uint_32) (data_length / entry_size); + if ((png_uint_32) new_palette.nentries > (png_uint_32) (PNG_SIZE_MAX / + png_sizeof(png_sPLT_entry))) + { + png_warning(png_ptr, "sPLT chunk too long"); + return; + } + new_palette.entries = (png_sPLT_entryp)png_malloc_warn( + png_ptr, new_palette.nentries * png_sizeof(png_sPLT_entry)); + if (new_palette.entries == NULL) + { + png_warning(png_ptr, "sPLT chunk requires too much memory"); + return; + } + +#ifndef PNG_NO_POINTER_INDEXING + for (i = 0; i < new_palette.nentries; i++) + { + png_sPLT_entryp pp = new_palette.entries + i; + + if (new_palette.depth == 8) + { + pp->red = *entry_start++; + pp->green = *entry_start++; + pp->blue = *entry_start++; + pp->alpha = *entry_start++; + } + else + { + pp->red = png_get_uint_16(entry_start); entry_start += 2; + pp->green = png_get_uint_16(entry_start); entry_start += 2; + pp->blue = png_get_uint_16(entry_start); entry_start += 2; + pp->alpha = png_get_uint_16(entry_start); entry_start += 2; + } + pp->frequency = png_get_uint_16(entry_start); entry_start += 2; + } +#else + pp = new_palette.entries; + for (i = 0; i < new_palette.nentries; i++) + { + + if (new_palette.depth == 8) + { + pp[i].red = *entry_start++; + pp[i].green = *entry_start++; + pp[i].blue = *entry_start++; + pp[i].alpha = *entry_start++; + } + else + { + pp[i].red = png_get_uint_16(entry_start); entry_start += 2; + pp[i].green = png_get_uint_16(entry_start); entry_start += 2; + pp[i].blue = png_get_uint_16(entry_start); entry_start += 2; + pp[i].alpha = png_get_uint_16(entry_start); entry_start += 2; + } + pp->frequency = png_get_uint_16(entry_start); entry_start += 2; + } +#endif + + /* discard all chunk data except the name and stash that */ + new_palette.name = (png_charp)chunkdata; + + png_set_sPLT(png_ptr, info_ptr, &new_palette, 1); + + png_free(png_ptr, chunkdata); + png_free(png_ptr, new_palette.entries); +} +#endif /* PNG_READ_sPLT_SUPPORTED */ + +#if defined(PNG_READ_tRNS_SUPPORTED) +void /* PRIVATE */ +png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_byte readbuf[PNG_MAX_PALETTE_LENGTH]; + + png_debug(1, "in png_handle_tRNS\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before tRNS"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid tRNS after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS)) + { + png_warning(png_ptr, "Duplicate tRNS chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) + { + png_byte buf[2]; + + if (length != 2) + { + png_warning(png_ptr, "Incorrect tRNS chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 2); + png_ptr->num_trans = 1; + png_ptr->trans_values.gray = png_get_uint_16(buf); + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) + { + png_byte buf[6]; + + if (length != 6) + { + png_warning(png_ptr, "Incorrect tRNS chunk length"); + png_crc_finish(png_ptr, length); + return; + } + png_crc_read(png_ptr, buf, (png_size_t)length); + png_ptr->num_trans = 1; + png_ptr->trans_values.red = png_get_uint_16(buf); + png_ptr->trans_values.green = png_get_uint_16(buf + 2); + png_ptr->trans_values.blue = png_get_uint_16(buf + 4); + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + if (!(png_ptr->mode & PNG_HAVE_PLTE)) + { + /* Should be an error, but we can cope with it. */ + png_warning(png_ptr, "Missing PLTE before tRNS"); + } + if (length > (png_uint_32)png_ptr->num_palette || + length > PNG_MAX_PALETTE_LENGTH) + { + png_warning(png_ptr, "Incorrect tRNS chunk length"); + png_crc_finish(png_ptr, length); + return; + } + if (length == 0) + { + png_warning(png_ptr, "Zero length tRNS chunk"); + png_crc_finish(png_ptr, length); + return; + } + png_crc_read(png_ptr, readbuf, (png_size_t)length); + png_ptr->num_trans = (png_uint_16)length; + } + else + { + png_warning(png_ptr, "tRNS chunk not allowed with alpha channel"); + png_crc_finish(png_ptr, length); + return; + } + + if (png_crc_finish(png_ptr, 0)) + return; + + png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans, + &(png_ptr->trans_values)); +} +#endif + +#if defined(PNG_READ_bKGD_SUPPORTED) +void /* PRIVATE */ +png_handle_bKGD(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_size_t truelen; + png_byte buf[6]; + + png_debug(1, "in png_handle_bKGD\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before bKGD"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid bKGD after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && + !(png_ptr->mode & PNG_HAVE_PLTE)) + { + png_warning(png_ptr, "Missing PLTE before bKGD"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)) + { + png_warning(png_ptr, "Duplicate bKGD chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + truelen = 1; + else if (png_ptr->color_type & PNG_COLOR_MASK_COLOR) + truelen = 6; + else + truelen = 2; + + if (length != truelen) + { + png_warning(png_ptr, "Incorrect bKGD chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, truelen); + if (png_crc_finish(png_ptr, 0)) + return; + + /* We convert the index value into RGB components so that we can allow + * arbitrary RGB values for background when we have transparency, and + * so it is easy to determine the RGB values of the background color + * from the info_ptr struct. */ + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + png_ptr->background.index = buf[0]; + if(info_ptr->num_palette) + { + if(buf[0] > info_ptr->num_palette) + { + png_warning(png_ptr, "Incorrect bKGD chunk index value"); + return; + } + png_ptr->background.red = + (png_uint_16)png_ptr->palette[buf[0]].red; + png_ptr->background.green = + (png_uint_16)png_ptr->palette[buf[0]].green; + png_ptr->background.blue = + (png_uint_16)png_ptr->palette[buf[0]].blue; + } + } + else if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) /* GRAY */ + { + png_ptr->background.red = + png_ptr->background.green = + png_ptr->background.blue = + png_ptr->background.gray = png_get_uint_16(buf); + } + else + { + png_ptr->background.red = png_get_uint_16(buf); + png_ptr->background.green = png_get_uint_16(buf + 2); + png_ptr->background.blue = png_get_uint_16(buf + 4); + } + + png_set_bKGD(png_ptr, info_ptr, &(png_ptr->background)); +} +#endif + +#if defined(PNG_READ_hIST_SUPPORTED) +void /* PRIVATE */ +png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + unsigned int num, i; + png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH]; + + png_debug(1, "in png_handle_hIST\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before hIST"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid hIST after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (!(png_ptr->mode & PNG_HAVE_PLTE)) + { + png_warning(png_ptr, "Missing PLTE before hIST"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)) + { + png_warning(png_ptr, "Duplicate hIST chunk"); + png_crc_finish(png_ptr, length); + return; + } + + num = length / 2 ; + if (num != (unsigned int) png_ptr->num_palette || num > + (unsigned int) PNG_MAX_PALETTE_LENGTH) + { + png_warning(png_ptr, "Incorrect hIST chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + for (i = 0; i < num; i++) + { + png_byte buf[2]; + + png_crc_read(png_ptr, buf, 2); + readbuf[i] = png_get_uint_16(buf); + } + + if (png_crc_finish(png_ptr, 0)) + return; + + png_set_hIST(png_ptr, info_ptr, readbuf); +} +#endif + +#if defined(PNG_READ_pHYs_SUPPORTED) +void /* PRIVATE */ +png_handle_pHYs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_byte buf[9]; + png_uint_32 res_x, res_y; + int unit_type; + + png_debug(1, "in png_handle_pHYs\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before pHYs"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid pHYs after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)) + { + png_warning(png_ptr, "Duplicate pHYs chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (length != 9) + { + png_warning(png_ptr, "Incorrect pHYs chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 9); + if (png_crc_finish(png_ptr, 0)) + return; + + res_x = png_get_uint_32(buf); + res_y = png_get_uint_32(buf + 4); + unit_type = buf[8]; + png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type); +} +#endif + +#if defined(PNG_READ_oFFs_SUPPORTED) +void /* PRIVATE */ +png_handle_oFFs(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_byte buf[9]; + png_int_32 offset_x, offset_y; + int unit_type; + + png_debug(1, "in png_handle_oFFs\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before oFFs"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid oFFs after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)) + { + png_warning(png_ptr, "Duplicate oFFs chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (length != 9) + { + png_warning(png_ptr, "Incorrect oFFs chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 9); + if (png_crc_finish(png_ptr, 0)) + return; + + offset_x = png_get_int_32(buf); + offset_y = png_get_int_32(buf + 4); + unit_type = buf[8]; + png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type); +} +#endif + +#if defined(PNG_READ_pCAL_SUPPORTED) +/* read the pCAL chunk (described in the PNG Extensions document) */ +void /* PRIVATE */ +png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_charp purpose; + png_int_32 X0, X1; + png_byte type, nparams; + png_charp buf, units, endptr; + png_charpp params; + png_size_t slength; + int i; + + png_debug(1, "in png_handle_pCAL\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before pCAL"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid pCAL after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)) + { + png_warning(png_ptr, "Duplicate pCAL chunk"); + png_crc_finish(png_ptr, length); + return; + } + + png_debug1(2, "Allocating and reading pCAL chunk data (%lu bytes)\n", + length + 1); + purpose = (png_charp)png_malloc_warn(png_ptr, length + 1); + if (purpose == NULL) + { + png_warning(png_ptr, "No memory for pCAL purpose."); + return; + } + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)purpose, slength); + + if (png_crc_finish(png_ptr, 0)) + { + png_free(png_ptr, purpose); + return; + } + + purpose[slength] = 0x00; /* null terminate the last string */ + + png_debug(3, "Finding end of pCAL purpose string\n"); + for (buf = purpose; *buf; buf++) + /* empty loop */ ; + + endptr = purpose + slength; + + /* We need to have at least 12 bytes after the purpose string + in order to get the parameter information. */ + if (endptr <= buf + 12) + { + png_warning(png_ptr, "Invalid pCAL data"); + png_free(png_ptr, purpose); + return; + } + + png_debug(3, "Reading pCAL X0, X1, type, nparams, and units\n"); + X0 = png_get_int_32((png_bytep)buf+1); + X1 = png_get_int_32((png_bytep)buf+5); + type = buf[9]; + nparams = buf[10]; + units = buf + 11; + + png_debug(3, "Checking pCAL equation type and number of parameters\n"); + /* Check that we have the right number of parameters for known + equation types. */ + if ((type == PNG_EQUATION_LINEAR && nparams != 2) || + (type == PNG_EQUATION_BASE_E && nparams != 3) || + (type == PNG_EQUATION_ARBITRARY && nparams != 3) || + (type == PNG_EQUATION_HYPERBOLIC && nparams != 4)) + { + png_warning(png_ptr, "Invalid pCAL parameters for equation type"); + png_free(png_ptr, purpose); + return; + } + else if (type >= PNG_EQUATION_LAST) + { + png_warning(png_ptr, "Unrecognized equation type for pCAL chunk"); + } + + for (buf = units; *buf; buf++) + /* Empty loop to move past the units string. */ ; + + png_debug(3, "Allocating pCAL parameters array\n"); + params = (png_charpp)png_malloc_warn(png_ptr, (png_uint_32)(nparams + *png_sizeof(png_charp))) ; + if (params == NULL) + { + png_free(png_ptr, purpose); + png_warning(png_ptr, "No memory for pCAL params."); + return; + } + + /* Get pointers to the start of each parameter string. */ + for (i = 0; i < (int)nparams; i++) + { + buf++; /* Skip the null string terminator from previous parameter. */ + + png_debug1(3, "Reading pCAL parameter %d\n", i); + for (params[i] = buf; *buf != 0x00 && buf <= endptr; buf++) + /* Empty loop to move past each parameter string */ ; + + /* Make sure we haven't run out of data yet */ + if (buf > endptr) + { + png_warning(png_ptr, "Invalid pCAL data"); + png_free(png_ptr, purpose); + png_free(png_ptr, params); + return; + } + } + + png_set_pCAL(png_ptr, info_ptr, purpose, X0, X1, type, nparams, + units, params); + + png_free(png_ptr, purpose); + png_free(png_ptr, params); +} +#endif + +#if defined(PNG_READ_sCAL_SUPPORTED) +/* read the sCAL chunk */ +void /* PRIVATE */ +png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_charp buffer, ep; +#ifdef PNG_FLOATING_POINT_SUPPORTED + double width, height; + png_charp vp; +#else +#ifdef PNG_FIXED_POINT_SUPPORTED + png_charp swidth, sheight; +#endif +#endif + png_size_t slength; + + png_debug(1, "in png_handle_sCAL\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before sCAL"); + else if (png_ptr->mode & PNG_HAVE_IDAT) + { + png_warning(png_ptr, "Invalid sCAL after IDAT"); + png_crc_finish(png_ptr, length); + return; + } + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL)) + { + png_warning(png_ptr, "Duplicate sCAL chunk"); + png_crc_finish(png_ptr, length); + return; + } + + png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)\n", + length + 1); + buffer = (png_charp)png_malloc_warn(png_ptr, length + 1); + if (buffer == NULL) + { + png_warning(png_ptr, "Out of memory while processing sCAL chunk"); + return; + } + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)buffer, slength); + + if (png_crc_finish(png_ptr, 0)) + { + png_free(png_ptr, buffer); + return; + } + + buffer[slength] = 0x00; /* null terminate the last string */ + + ep = buffer + 1; /* skip unit byte */ + +#ifdef PNG_FLOATING_POINT_SUPPORTED + width = strtod(ep, &vp); + if (*vp) + { + png_warning(png_ptr, "malformed width string in sCAL chunk"); + return; + } +#else +#ifdef PNG_FIXED_POINT_SUPPORTED + swidth = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); + if (swidth == NULL) + { + png_warning(png_ptr, "Out of memory while processing sCAL chunk width"); + return; + } + png_memcpy(swidth, ep, (png_size_t)png_strlen(ep)); +#endif +#endif + + for (ep = buffer; *ep; ep++) + /* empty loop */ ; + ep++; + +#ifdef PNG_FLOATING_POINT_SUPPORTED + height = strtod(ep, &vp); + if (*vp) + { + png_warning(png_ptr, "malformed height string in sCAL chunk"); + return; + } +#else +#ifdef PNG_FIXED_POINT_SUPPORTED + sheight = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); + if (swidth == NULL) + { + png_warning(png_ptr, "Out of memory while processing sCAL chunk height"); + return; + } + png_memcpy(sheight, ep, (png_size_t)png_strlen(ep)); +#endif +#endif + + if (buffer + slength < ep +#ifdef PNG_FLOATING_POINT_SUPPORTED + || width <= 0. || height <= 0. +#endif + ) + { + png_warning(png_ptr, "Invalid sCAL data"); + png_free(png_ptr, buffer); +#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) + png_free(png_ptr, swidth); + png_free(png_ptr, sheight); +#endif + return; + } + + +#ifdef PNG_FLOATING_POINT_SUPPORTED + png_set_sCAL(png_ptr, info_ptr, buffer[0], width, height); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED + png_set_sCAL_s(png_ptr, info_ptr, buffer[0], swidth, sheight); +#endif +#endif + + png_free(png_ptr, buffer); +#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED) + png_free(png_ptr, swidth); + png_free(png_ptr, sheight); +#endif +} +#endif + +#if defined(PNG_READ_tIME_SUPPORTED) +void /* PRIVATE */ +png_handle_tIME(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_byte buf[7]; + png_time mod_time; + + png_debug(1, "in png_handle_tIME\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Out of place tIME chunk"); + else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)) + { + png_warning(png_ptr, "Duplicate tIME chunk"); + png_crc_finish(png_ptr, length); + return; + } + + if (png_ptr->mode & PNG_HAVE_IDAT) + png_ptr->mode |= PNG_AFTER_IDAT; + + if (length != 7) + { + png_warning(png_ptr, "Incorrect tIME chunk length"); + png_crc_finish(png_ptr, length); + return; + } + + png_crc_read(png_ptr, buf, 7); + if (png_crc_finish(png_ptr, 0)) + return; + + mod_time.second = buf[6]; + mod_time.minute = buf[5]; + mod_time.hour = buf[4]; + mod_time.day = buf[3]; + mod_time.month = buf[2]; + mod_time.year = png_get_uint_16(buf); + + png_set_tIME(png_ptr, info_ptr, &mod_time); +} +#endif + +#if defined(PNG_READ_tEXt_SUPPORTED) +/* Note: this does not properly handle chunks that are > 64K under DOS */ +void /* PRIVATE */ +png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_textp text_ptr; + png_charp key; + png_charp text; + png_uint_32 skip = 0; + png_size_t slength; + int ret; + + png_debug(1, "in png_handle_tEXt\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before tEXt"); + + if (png_ptr->mode & PNG_HAVE_IDAT) + png_ptr->mode |= PNG_AFTER_IDAT; + +#ifdef PNG_MAX_MALLOC_64K + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr, "tEXt chunk too large to fit in memory"); + skip = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + + key = (png_charp)png_malloc_warn(png_ptr, length + 1); + if (key == NULL) + { + png_warning(png_ptr, "No memory to process text chunk."); + return; + } + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)key, slength); + + if (png_crc_finish(png_ptr, skip)) + { + png_free(png_ptr, key); + return; + } + + key[slength] = 0x00; + + for (text = key; *text; text++) + /* empty loop to find end of key */ ; + + if (text != key + slength) + text++; + + text_ptr = (png_textp)png_malloc_warn(png_ptr, + (png_uint_32)png_sizeof(png_text)); + if (text_ptr == NULL) + { + png_warning(png_ptr, "Not enough memory to process text chunk."); + png_free(png_ptr, key); + return; + } + text_ptr->compression = PNG_TEXT_COMPRESSION_NONE; + text_ptr->key = key; +#ifdef PNG_iTXt_SUPPORTED + text_ptr->lang = NULL; + text_ptr->lang_key = NULL; + text_ptr->itxt_length = 0; +#endif + text_ptr->text = text; + text_ptr->text_length = png_strlen(text); + + ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); + + png_free(png_ptr, key); + png_free(png_ptr, text_ptr); + if (ret) + png_warning(png_ptr, "Insufficient memory to process text chunk."); +} +#endif + +#if defined(PNG_READ_zTXt_SUPPORTED) +/* note: this does not correctly handle chunks that are > 64K under DOS */ +void /* PRIVATE */ +png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_textp text_ptr; + png_charp chunkdata; + png_charp text; + int comp_type; + int ret; + png_size_t slength, prefix_len, data_len; + + png_debug(1, "in png_handle_zTXt\n"); + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before zTXt"); + + if (png_ptr->mode & PNG_HAVE_IDAT) + png_ptr->mode |= PNG_AFTER_IDAT; + +#ifdef PNG_MAX_MALLOC_64K + /* We will no doubt have problems with chunks even half this size, but + there is no hard and fast rule to tell us where to stop. */ + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr,"zTXt chunk too large to fit in memory"); + png_crc_finish(png_ptr, length); + return; + } +#endif + + chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); + if (chunkdata == NULL) + { + png_warning(png_ptr,"Out of memory processing zTXt chunk."); + return; + } + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)chunkdata, slength); + if (png_crc_finish(png_ptr, 0)) + { + png_free(png_ptr, chunkdata); + return; + } + + chunkdata[slength] = 0x00; + + for (text = chunkdata; *text; text++) + /* empty loop */ ; + + /* zTXt must have some text after the chunkdataword */ + if (text == chunkdata + slength) + { + comp_type = PNG_TEXT_COMPRESSION_NONE; + png_warning(png_ptr, "Zero length zTXt chunk"); + } + else + { + comp_type = *(++text); + if (comp_type != PNG_TEXT_COMPRESSION_zTXt) + { + png_warning(png_ptr, "Unknown compression type in zTXt chunk"); + comp_type = PNG_TEXT_COMPRESSION_zTXt; + } + text++; /* skip the compression_method byte */ + } + prefix_len = text - chunkdata; + + chunkdata = (png_charp)png_decompress_chunk(png_ptr, comp_type, chunkdata, + (png_size_t)length, prefix_len, &data_len); + + text_ptr = (png_textp)png_malloc_warn(png_ptr, + (png_uint_32)png_sizeof(png_text)); + if (text_ptr == NULL) + { + png_warning(png_ptr,"Not enough memory to process zTXt chunk."); + png_free(png_ptr, chunkdata); + return; + } + text_ptr->compression = comp_type; + text_ptr->key = chunkdata; +#ifdef PNG_iTXt_SUPPORTED + text_ptr->lang = NULL; + text_ptr->lang_key = NULL; + text_ptr->itxt_length = 0; +#endif + text_ptr->text = chunkdata + prefix_len; + text_ptr->text_length = data_len; + + ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); + + png_free(png_ptr, text_ptr); + png_free(png_ptr, chunkdata); + if (ret) + png_error(png_ptr, "Insufficient memory to store zTXt chunk."); +} +#endif + +#if defined(PNG_READ_iTXt_SUPPORTED) +/* note: this does not correctly handle chunks that are > 64K under DOS */ +void /* PRIVATE */ +png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_textp text_ptr; + png_charp chunkdata; + png_charp key, lang, text, lang_key; + int comp_flag; + int comp_type = 0; + int ret; + png_size_t slength, prefix_len, data_len; + + png_debug(1, "in png_handle_iTXt\n"); + + if (!(png_ptr->mode & PNG_HAVE_IHDR)) + png_error(png_ptr, "Missing IHDR before iTXt"); + + if (png_ptr->mode & PNG_HAVE_IDAT) + png_ptr->mode |= PNG_AFTER_IDAT; + +#ifdef PNG_MAX_MALLOC_64K + /* We will no doubt have problems with chunks even half this size, but + there is no hard and fast rule to tell us where to stop. */ + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr,"iTXt chunk too large to fit in memory"); + png_crc_finish(png_ptr, length); + return; + } +#endif + + chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); + if (chunkdata == NULL) + { + png_warning(png_ptr, "No memory to process iTXt chunk."); + return; + } + slength = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)chunkdata, slength); + if (png_crc_finish(png_ptr, 0)) + { + png_free(png_ptr, chunkdata); + return; + } + + chunkdata[slength] = 0x00; + + for (lang = chunkdata; *lang; lang++) + /* empty loop */ ; + lang++; /* skip NUL separator */ + + /* iTXt must have a language tag (possibly empty), two compression bytes, + translated keyword (possibly empty), and possibly some text after the + keyword */ + + if (lang >= chunkdata + slength) + { + comp_flag = PNG_TEXT_COMPRESSION_NONE; + png_warning(png_ptr, "Zero length iTXt chunk"); + } + else + { + comp_flag = *lang++; + comp_type = *lang++; + } + + for (lang_key = lang; *lang_key; lang_key++) + /* empty loop */ ; + lang_key++; /* skip NUL separator */ + + for (text = lang_key; *text; text++) + /* empty loop */ ; + text++; /* skip NUL separator */ + + prefix_len = text - chunkdata; + + key=chunkdata; + if (comp_flag) + chunkdata = png_decompress_chunk(png_ptr, comp_type, chunkdata, + (size_t)length, prefix_len, &data_len); + else + data_len=png_strlen(chunkdata + prefix_len); + text_ptr = (png_textp)png_malloc_warn(png_ptr, + (png_uint_32)png_sizeof(png_text)); + if (text_ptr == NULL) + { + png_warning(png_ptr,"Not enough memory to process iTXt chunk."); + png_free(png_ptr, chunkdata); + return; + } + text_ptr->compression = (int)comp_flag + 1; + text_ptr->lang_key = chunkdata+(lang_key-key); + text_ptr->lang = chunkdata+(lang-key); + text_ptr->itxt_length = data_len; + text_ptr->text_length = 0; + text_ptr->key = chunkdata; + text_ptr->text = chunkdata + prefix_len; + + ret=png_set_text_2(png_ptr, info_ptr, text_ptr, 1); + + png_free(png_ptr, text_ptr); + png_free(png_ptr, chunkdata); + if (ret) + png_error(png_ptr, "Insufficient memory to store iTXt chunk."); +} +#endif + +/* This function is called when we haven't found a handler for a + chunk. If there isn't a problem with the chunk itself (ie bad + chunk name, CRC, or a critical chunk), the chunk is silently ignored + -- unless the PNG_FLAG_UNKNOWN_CHUNKS_SUPPORTED flag is on in which + case it will be saved away to be written out later. */ +void /* PRIVATE */ +png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) +{ + png_uint_32 skip = 0; + + png_debug(1, "in png_handle_unknown\n"); + + if (png_ptr->mode & PNG_HAVE_IDAT) + { +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IDAT; +#endif + if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) /* not an IDAT */ + png_ptr->mode |= PNG_AFTER_IDAT; + } + + png_check_chunk_name(png_ptr, png_ptr->chunk_name); + + if (!(png_ptr->chunk_name[0] & 0x20)) + { +#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) + if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != + PNG_HANDLE_CHUNK_ALWAYS +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) + && png_ptr->read_user_chunk_fn == NULL +#endif + ) +#endif + png_chunk_error(png_ptr, "unknown critical chunk"); + } + +#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) + if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) + { + png_unknown_chunk chunk; + +#ifdef PNG_MAX_MALLOC_64K + if (length > (png_uint_32)65535L) + { + png_warning(png_ptr, "unknown chunk too large to fit in memory"); + skip = length - (png_uint_32)65535L; + length = (png_uint_32)65535L; + } +#endif + png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name); + chunk.data = (png_bytep)png_malloc(png_ptr, length); + chunk.size = (png_size_t)length; + png_crc_read(png_ptr, (png_bytep)chunk.data, length); +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) + if(png_ptr->read_user_chunk_fn != NULL) + { + /* callback to user unknown chunk handler */ + if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0) + { + if (!(png_ptr->chunk_name[0] & 0x20)) + if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != + PNG_HANDLE_CHUNK_ALWAYS) + { + png_free(png_ptr, chunk.data); + png_chunk_error(png_ptr, "unknown critical chunk"); + } + png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); + } + } + else +#endif + png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1); + png_free(png_ptr, chunk.data); + } + else +#endif + skip = length; + + png_crc_finish(png_ptr, skip); + +#if !defined(PNG_READ_USER_CHUNKS_SUPPORTED) + if (&info_ptr == NULL) /* quiet compiler warnings about unused info_ptr */ + return; +#endif +} + +/* This function is called to verify that a chunk name is valid. + This function can't have the "critical chunk check" incorporated + into it, since in the future we will need to be able to call user + functions to handle unknown critical chunks after we check that + the chunk name itself is valid. */ + +#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) + +void /* PRIVATE */ +png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name) +{ + png_debug(1, "in png_check_chunk_name\n"); + if (isnonalpha(chunk_name[0]) || isnonalpha(chunk_name[1]) || + isnonalpha(chunk_name[2]) || isnonalpha(chunk_name[3])) + { + png_chunk_error(png_ptr, "invalid chunk type"); + } +} + +/* Combines the row recently read in with the existing pixels in the + row. This routine takes care of alpha and transparency if requested. + This routine also handles the two methods of progressive display + of interlaced images, depending on the mask value. + The mask value describes which pixels are to be combined with + the row. The pattern always repeats every 8 pixels, so just 8 + bits are needed. A one indicates the pixel is to be combined, + a zero indicates the pixel is to be skipped. This is in addition + to any alpha or transparency value associated with the pixel. If + you want all pixels to be combined, pass 0xff (255) in mask. */ +#ifndef PNG_HAVE_ASSEMBLER_COMBINE_ROW +void /* PRIVATE */ +png_combine_row(png_structp png_ptr, png_bytep row, int mask) +{ + png_debug(1,"in png_combine_row\n"); + if (mask == 0xff) + { + png_memcpy(row, png_ptr->row_buf + 1, + PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->width)); + } + else + { + switch (png_ptr->row_info.pixel_depth) + { + case 1: + { + png_bytep sp = png_ptr->row_buf + 1; + png_bytep dp = row; + int s_inc, s_start, s_end; + int m = 0x80; + int shift; + png_uint_32 i; + png_uint_32 row_width = png_ptr->width; + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + { + s_start = 0; + s_end = 7; + s_inc = 1; + } + else +#endif + { + s_start = 7; + s_end = 0; + s_inc = -1; + } + + shift = s_start; + + for (i = 0; i < row_width; i++) + { + if (m & mask) + { + int value; + + value = (*sp >> shift) & 0x01; + *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff); + *dp |= (png_byte)(value << shift); + } + + if (shift == s_end) + { + shift = s_start; + sp++; + dp++; + } + else + shift += s_inc; + + if (m == 1) + m = 0x80; + else + m >>= 1; + } + break; + } + case 2: + { + png_bytep sp = png_ptr->row_buf + 1; + png_bytep dp = row; + int s_start, s_end, s_inc; + int m = 0x80; + int shift; + png_uint_32 i; + png_uint_32 row_width = png_ptr->width; + int value; + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + { + s_start = 0; + s_end = 6; + s_inc = 2; + } + else +#endif + { + s_start = 6; + s_end = 0; + s_inc = -2; + } + + shift = s_start; + + for (i = 0; i < row_width; i++) + { + if (m & mask) + { + value = (*sp >> shift) & 0x03; + *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff); + *dp |= (png_byte)(value << shift); + } + + if (shift == s_end) + { + shift = s_start; + sp++; + dp++; + } + else + shift += s_inc; + if (m == 1) + m = 0x80; + else + m >>= 1; + } + break; + } + case 4: + { + png_bytep sp = png_ptr->row_buf + 1; + png_bytep dp = row; + int s_start, s_end, s_inc; + int m = 0x80; + int shift; + png_uint_32 i; + png_uint_32 row_width = png_ptr->width; + int value; + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + { + s_start = 0; + s_end = 4; + s_inc = 4; + } + else +#endif + { + s_start = 4; + s_end = 0; + s_inc = -4; + } + shift = s_start; + + for (i = 0; i < row_width; i++) + { + if (m & mask) + { + value = (*sp >> shift) & 0xf; + *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff); + *dp |= (png_byte)(value << shift); + } + + if (shift == s_end) + { + shift = s_start; + sp++; + dp++; + } + else + shift += s_inc; + if (m == 1) + m = 0x80; + else + m >>= 1; + } + break; + } + default: + { + png_bytep sp = png_ptr->row_buf + 1; + png_bytep dp = row; + png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3); + png_uint_32 i; + png_uint_32 row_width = png_ptr->width; + png_byte m = 0x80; + + + for (i = 0; i < row_width; i++) + { + if (m & mask) + { + png_memcpy(dp, sp, pixel_bytes); + } + + sp += pixel_bytes; + dp += pixel_bytes; + + if (m == 1) + m = 0x80; + else + m >>= 1; + } + break; + } + } + } +} +#endif /* !PNG_HAVE_ASSEMBLER_COMBINE_ROW */ + +#ifdef PNG_READ_INTERLACING_SUPPORTED +#ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */ +/* OLD pre-1.0.9 interface: +void png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass, + png_uint_32 transformations) + */ +void /* PRIVATE */ +png_do_read_interlace(png_structp png_ptr) +{ + png_row_infop row_info = &(png_ptr->row_info); + png_bytep row = png_ptr->row_buf + 1; + int pass = png_ptr->pass; + png_uint_32 transformations = png_ptr->transformations; +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + /* offset to next interlace block */ + const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; +#endif + + png_debug(1,"in png_do_read_interlace (stock C version)\n"); + if (row != NULL && row_info != NULL) + { + png_uint_32 final_width; + + final_width = row_info->width * png_pass_inc[pass]; + + switch (row_info->pixel_depth) + { + case 1: + { + png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3); + png_bytep dp = row + (png_size_t)((final_width - 1) >> 3); + int sshift, dshift; + int s_start, s_end, s_inc; + int jstop = png_pass_inc[pass]; + png_byte v; + png_uint_32 i; + int j; + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (transformations & PNG_PACKSWAP) + { + sshift = (int)((row_info->width + 7) & 0x07); + dshift = (int)((final_width + 7) & 0x07); + s_start = 7; + s_end = 0; + s_inc = -1; + } + else +#endif + { + sshift = 7 - (int)((row_info->width + 7) & 0x07); + dshift = 7 - (int)((final_width + 7) & 0x07); + s_start = 0; + s_end = 7; + s_inc = 1; + } + + for (i = 0; i < row_info->width; i++) + { + v = (png_byte)((*sp >> sshift) & 0x01); + for (j = 0; j < jstop; j++) + { + *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff); + *dp |= (png_byte)(v << dshift); + if (dshift == s_end) + { + dshift = s_start; + dp--; + } + else + dshift += s_inc; + } + if (sshift == s_end) + { + sshift = s_start; + sp--; + } + else + sshift += s_inc; + } + break; + } + case 2: + { + png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2); + png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2); + int sshift, dshift; + int s_start, s_end, s_inc; + int jstop = png_pass_inc[pass]; + png_uint_32 i; + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (transformations & PNG_PACKSWAP) + { + sshift = (int)(((row_info->width + 3) & 0x03) << 1); + dshift = (int)(((final_width + 3) & 0x03) << 1); + s_start = 6; + s_end = 0; + s_inc = -2; + } + else +#endif + { + sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1); + dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1); + s_start = 0; + s_end = 6; + s_inc = 2; + } + + for (i = 0; i < row_info->width; i++) + { + png_byte v; + int j; + + v = (png_byte)((*sp >> sshift) & 0x03); + for (j = 0; j < jstop; j++) + { + *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff); + *dp |= (png_byte)(v << dshift); + if (dshift == s_end) + { + dshift = s_start; + dp--; + } + else + dshift += s_inc; + } + if (sshift == s_end) + { + sshift = s_start; + sp--; + } + else + sshift += s_inc; + } + break; + } + case 4: + { + png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1); + png_bytep dp = row + (png_size_t)((final_width - 1) >> 1); + int sshift, dshift; + int s_start, s_end, s_inc; + png_uint_32 i; + int jstop = png_pass_inc[pass]; + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) + if (transformations & PNG_PACKSWAP) + { + sshift = (int)(((row_info->width + 1) & 0x01) << 2); + dshift = (int)(((final_width + 1) & 0x01) << 2); + s_start = 4; + s_end = 0; + s_inc = -4; + } + else +#endif + { + sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2); + dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2); + s_start = 0; + s_end = 4; + s_inc = 4; + } + + for (i = 0; i < row_info->width; i++) + { + png_byte v = (png_byte)((*sp >> sshift) & 0xf); + int j; + + for (j = 0; j < jstop; j++) + { + *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff); + *dp |= (png_byte)(v << dshift); + if (dshift == s_end) + { + dshift = s_start; + dp--; + } + else + dshift += s_inc; + } + if (sshift == s_end) + { + sshift = s_start; + sp--; + } + else + sshift += s_inc; + } + break; + } + default: + { + png_size_t pixel_bytes = (row_info->pixel_depth >> 3); + png_bytep sp = row + (png_size_t)(row_info->width - 1) * pixel_bytes; + png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes; + + int jstop = png_pass_inc[pass]; + png_uint_32 i; + + for (i = 0; i < row_info->width; i++) + { + png_byte v[8]; + int j; + + png_memcpy(v, sp, pixel_bytes); + for (j = 0; j < jstop; j++) + { + png_memcpy(dp, v, pixel_bytes); + dp -= pixel_bytes; + } + sp -= pixel_bytes; + } + break; + } + } + row_info->width = final_width; + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,final_width); + } +#if !defined(PNG_READ_PACKSWAP_SUPPORTED) + if (&transformations == NULL) /* silence compiler warning */ + return; +#endif +} +#endif /* !PNG_HAVE_ASSEMBLER_READ_INTERLACE */ +#endif /* PNG_READ_INTERLACING_SUPPORTED */ + +#ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW +void /* PRIVATE */ +png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep row, + png_bytep prev_row, int filter) +{ + png_debug(1, "in png_read_filter_row\n"); + png_debug2(2,"row = %lu, filter = %d\n", png_ptr->row_number, filter); + switch (filter) + { + case PNG_FILTER_VALUE_NONE: + break; + case PNG_FILTER_VALUE_SUB: + { + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; + png_bytep rp = row + bpp; + png_bytep lp = row; + + for (i = bpp; i < istop; i++) + { + *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff); + rp++; + } + break; + } + case PNG_FILTER_VALUE_UP: + { + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + png_bytep rp = row; + png_bytep pp = prev_row; + + for (i = 0; i < istop; i++) + { + *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); + rp++; + } + break; + } + case PNG_FILTER_VALUE_AVG: + { + png_uint_32 i; + png_bytep rp = row; + png_bytep pp = prev_row; + png_bytep lp = row; + png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; + png_uint_32 istop = row_info->rowbytes - bpp; + + for (i = 0; i < bpp; i++) + { + *rp = (png_byte)(((int)(*rp) + + ((int)(*pp++) / 2 )) & 0xff); + rp++; + } + + for (i = 0; i < istop; i++) + { + *rp = (png_byte)(((int)(*rp) + + (int)(*pp++ + *lp++) / 2 ) & 0xff); + rp++; + } + break; + } + case PNG_FILTER_VALUE_PAETH: + { + png_uint_32 i; + png_bytep rp = row; + png_bytep pp = prev_row; + png_bytep lp = row; + png_bytep cp = prev_row; + png_uint_32 bpp = (row_info->pixel_depth + 7) >> 3; + png_uint_32 istop=row_info->rowbytes - bpp; + + for (i = 0; i < bpp; i++) + { + *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff); + rp++; + } + + for (i = 0; i < istop; i++) /* use leftover rp,pp */ + { + int a, b, c, pa, pb, pc, p; + + a = *lp++; + b = *pp++; + c = *cp++; + + p = b - c; + pc = a - c; + +#ifdef PNG_USE_ABS + pa = abs(p); + pb = abs(pc); + pc = abs(p + pc); +#else + pa = p < 0 ? -p : p; + pb = pc < 0 ? -pc : pc; + pc = (p + pc) < 0 ? -(p + pc) : p + pc; +#endif + + /* + if (pa <= pb && pa <= pc) + p = a; + else if (pb <= pc) + p = b; + else + p = c; + */ + + p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; + + *rp = (png_byte)(((int)(*rp) + p) & 0xff); + rp++; + } + break; + } + default: + png_warning(png_ptr, "Ignoring bad adaptive filter type"); + *row=0; + break; + } +} +#endif /* !PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */ + +void /* PRIVATE */ +png_read_finish_row(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + + /* start of interlace block */ + const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; + + /* offset to next interlace block */ + const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; + + /* start of interlace block in the y direction */ + const int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; + + /* offset to next interlace block in the y direction */ + const int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; +#endif + + png_debug(1, "in png_read_finish_row\n"); + png_ptr->row_number++; + if (png_ptr->row_number < png_ptr->num_rows) + return; + + if (png_ptr->interlaced) + { + png_ptr->row_number = 0; + png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); + do + { + png_ptr->pass++; + if (png_ptr->pass >= 7) + break; + png_ptr->iwidth = (png_ptr->width + + png_pass_inc[png_ptr->pass] - 1 - + png_pass_start[png_ptr->pass]) / + png_pass_inc[png_ptr->pass]; + + png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, + png_ptr->iwidth) + 1; + + if (!(png_ptr->transformations & PNG_INTERLACE)) + { + png_ptr->num_rows = (png_ptr->height + + png_pass_yinc[png_ptr->pass] - 1 - + png_pass_ystart[png_ptr->pass]) / + png_pass_yinc[png_ptr->pass]; + if (!(png_ptr->num_rows)) + continue; + } + else /* if (png_ptr->transformations & PNG_INTERLACE) */ + break; + } while (png_ptr->iwidth == 0); + + if (png_ptr->pass < 7) + return; + } + + if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) + { +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IDAT; +#endif + char extra; + int ret; + + png_ptr->zstream.next_out = (Byte *)&extra; + png_ptr->zstream.avail_out = (uInt)1; + for(;;) + { + if (!(png_ptr->zstream.avail_in)) + { + while (!png_ptr->idat_size) + { + png_byte chunk_length[4]; + + png_crc_finish(png_ptr, 0); + + png_read_data(png_ptr, chunk_length, 4); + png_ptr->idat_size = png_get_uint_31(png_ptr, chunk_length); + png_reset_crc(png_ptr); + png_crc_read(png_ptr, png_ptr->chunk_name, 4); + if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)) + png_error(png_ptr, "Not enough image data"); + + } + png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size; + png_ptr->zstream.next_in = png_ptr->zbuf; + if (png_ptr->zbuf_size > png_ptr->idat_size) + png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size; + png_crc_read(png_ptr, png_ptr->zbuf, png_ptr->zstream.avail_in); + png_ptr->idat_size -= png_ptr->zstream.avail_in; + } + ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); + if (ret == Z_STREAM_END) + { + if (!(png_ptr->zstream.avail_out) || png_ptr->zstream.avail_in || + png_ptr->idat_size) + png_warning(png_ptr, "Extra compressed data"); + png_ptr->mode |= PNG_AFTER_IDAT; + png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; + break; + } + if (ret != Z_OK) + png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg : + "Decompression Error"); + + if (!(png_ptr->zstream.avail_out)) + { + png_warning(png_ptr, "Extra compressed data."); + png_ptr->mode |= PNG_AFTER_IDAT; + png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; + break; + } + + } + png_ptr->zstream.avail_out = 0; + } + + if (png_ptr->idat_size || png_ptr->zstream.avail_in) + png_warning(png_ptr, "Extra compression data"); + + inflateReset(&png_ptr->zstream); + + png_ptr->mode |= PNG_AFTER_IDAT; +} + +void /* PRIVATE */ +png_read_start_row(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + + /* start of interlace block */ + const int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; + + /* offset to next interlace block */ + const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; + + /* start of interlace block in the y direction */ + const int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; + + /* offset to next interlace block in the y direction */ + const int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; +#endif + + int max_pixel_depth; + png_uint_32 row_bytes; + + png_debug(1, "in png_read_start_row\n"); + png_ptr->zstream.avail_in = 0; + png_init_read_transformations(png_ptr); + if (png_ptr->interlaced) + { + if (!(png_ptr->transformations & PNG_INTERLACE)) + png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 - + png_pass_ystart[0]) / png_pass_yinc[0]; + else + png_ptr->num_rows = png_ptr->height; + + png_ptr->iwidth = (png_ptr->width + + png_pass_inc[png_ptr->pass] - 1 - + png_pass_start[png_ptr->pass]) / + png_pass_inc[png_ptr->pass]; + + row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1; + + png_ptr->irowbytes = (png_size_t)row_bytes; + if((png_uint_32)png_ptr->irowbytes != row_bytes) + png_error(png_ptr, "Rowbytes overflow in png_read_start_row"); + } + else + { + png_ptr->num_rows = png_ptr->height; + png_ptr->iwidth = png_ptr->width; + png_ptr->irowbytes = png_ptr->rowbytes + 1; + } + max_pixel_depth = png_ptr->pixel_depth; + +#if defined(PNG_READ_PACK_SUPPORTED) + if ((png_ptr->transformations & PNG_PACK) && png_ptr->bit_depth < 8) + max_pixel_depth = 8; +#endif + +#if defined(PNG_READ_EXPAND_SUPPORTED) + if (png_ptr->transformations & PNG_EXPAND) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + if (png_ptr->num_trans) + max_pixel_depth = 32; + else + max_pixel_depth = 24; + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) + { + if (max_pixel_depth < 8) + max_pixel_depth = 8; + if (png_ptr->num_trans) + max_pixel_depth *= 2; + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) + { + if (png_ptr->num_trans) + { + max_pixel_depth *= 4; + max_pixel_depth /= 3; + } + } + } +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) + if (png_ptr->transformations & (PNG_FILLER)) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + max_pixel_depth = 32; + else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY) + { + if (max_pixel_depth <= 8) + max_pixel_depth = 16; + else + max_pixel_depth = 32; + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) + { + if (max_pixel_depth <= 32) + max_pixel_depth = 32; + else + max_pixel_depth = 64; + } + } +#endif + +#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) + if (png_ptr->transformations & PNG_GRAY_TO_RGB) + { + if ( +#if defined(PNG_READ_EXPAND_SUPPORTED) + (png_ptr->num_trans && (png_ptr->transformations & PNG_EXPAND)) || +#endif +#if defined(PNG_READ_FILLER_SUPPORTED) + (png_ptr->transformations & (PNG_FILLER)) || +#endif + png_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + if (max_pixel_depth <= 16) + max_pixel_depth = 32; + else + max_pixel_depth = 64; + } + else + { + if (max_pixel_depth <= 8) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + max_pixel_depth = 32; + else + max_pixel_depth = 24; + } + else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + max_pixel_depth = 64; + else + max_pixel_depth = 48; + } + } +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) && \ +defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) + if(png_ptr->transformations & PNG_USER_TRANSFORM) + { + int user_pixel_depth=png_ptr->user_transform_depth* + png_ptr->user_transform_channels; + if(user_pixel_depth > max_pixel_depth) + max_pixel_depth=user_pixel_depth; + } +#endif + + /* align the width on the next larger 8 pixels. Mainly used + for interlacing */ + row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7)); + /* calculate the maximum bytes needed, adding a byte and a pixel + for safety's sake */ + row_bytes = PNG_ROWBYTES(max_pixel_depth,row_bytes) + + 1 + ((max_pixel_depth + 7) >> 3); +#ifdef PNG_MAX_MALLOC_64K + if (row_bytes > (png_uint_32)65536L) + png_error(png_ptr, "This image requires a row greater than 64KB"); +#endif + png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64); + png_ptr->row_buf = png_ptr->big_row_buf+32; +#if defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD) + png_ptr->row_buf_size = row_bytes; +#endif + +#ifdef PNG_MAX_MALLOC_64K + if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L) + png_error(png_ptr, "This image requires a row greater than 64KB"); +#endif + if ((png_uint_32)png_ptr->rowbytes > PNG_SIZE_MAX - 1) + png_error(png_ptr, "Row has too many bytes to allocate in memory."); + png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)( + png_ptr->rowbytes + 1)); + + png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1); + + png_debug1(3, "width = %lu,\n", png_ptr->width); + png_debug1(3, "height = %lu,\n", png_ptr->height); + png_debug1(3, "iwidth = %lu,\n", png_ptr->iwidth); + png_debug1(3, "num_rows = %lu\n", png_ptr->num_rows); + png_debug1(3, "rowbytes = %lu,\n", png_ptr->rowbytes); + png_debug1(3, "irowbytes = %lu,\n", png_ptr->irowbytes); + + png_ptr->flags |= PNG_FLAG_ROW_INIT; +} diff --git a/libpng/pngset.c b/libpng/pngset.c new file mode 100644 index 0000000..5922cad --- /dev/null +++ b/libpng/pngset.c @@ -0,0 +1,1219 @@ + +/* pngset.c - storage of image information into info struct + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * The functions here are used during reads to store data from the file + * into the info struct, and during writes to store application data + * into the info struct for writing into the file. This abstracts the + * info struct and allows us to change the structure in the future. + */ + +#define PNG_INTERNAL +#include "png.h" + +#if defined(PNG_bKGD_SUPPORTED) +void PNGAPI +png_set_bKGD(png_structp png_ptr, png_infop info_ptr, png_color_16p background) +{ + png_debug1(1, "in %s storage function\n", "bKGD"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + png_memcpy(&(info_ptr->background), background, png_sizeof(png_color_16)); + info_ptr->valid |= PNG_INFO_bKGD; +} +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +void PNGAPI +png_set_cHRM(png_structp png_ptr, png_infop info_ptr, + double white_x, double white_y, double red_x, double red_y, + double green_x, double green_y, double blue_x, double blue_y) +{ + png_debug1(1, "in %s storage function\n", "cHRM"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + if (white_x < 0.0 || white_y < 0.0 || + red_x < 0.0 || red_y < 0.0 || + green_x < 0.0 || green_y < 0.0 || + blue_x < 0.0 || blue_y < 0.0) + { + png_warning(png_ptr, + "Ignoring attempt to set negative chromaticity value"); + return; + } + if (white_x > 21474.83 || white_y > 21474.83 || + red_x > 21474.83 || red_y > 21474.83 || + green_x > 21474.83 || green_y > 21474.83 || + blue_x > 21474.83 || blue_y > 21474.83) + { + png_warning(png_ptr, + "Ignoring attempt to set chromaticity value exceeding 21474.83"); + return; + } + + info_ptr->x_white = (float)white_x; + info_ptr->y_white = (float)white_y; + info_ptr->x_red = (float)red_x; + info_ptr->y_red = (float)red_y; + info_ptr->x_green = (float)green_x; + info_ptr->y_green = (float)green_y; + info_ptr->x_blue = (float)blue_x; + info_ptr->y_blue = (float)blue_y; +#ifdef PNG_FIXED_POINT_SUPPORTED + info_ptr->int_x_white = (png_fixed_point)(white_x*100000.+0.5); + info_ptr->int_y_white = (png_fixed_point)(white_y*100000.+0.5); + info_ptr->int_x_red = (png_fixed_point)( red_x*100000.+0.5); + info_ptr->int_y_red = (png_fixed_point)( red_y*100000.+0.5); + info_ptr->int_x_green = (png_fixed_point)(green_x*100000.+0.5); + info_ptr->int_y_green = (png_fixed_point)(green_y*100000.+0.5); + info_ptr->int_x_blue = (png_fixed_point)( blue_x*100000.+0.5); + info_ptr->int_y_blue = (png_fixed_point)( blue_y*100000.+0.5); +#endif + info_ptr->valid |= PNG_INFO_cHRM; +} +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +void PNGAPI +png_set_cHRM_fixed(png_structp png_ptr, png_infop info_ptr, + png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x, + png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y, + png_fixed_point blue_x, png_fixed_point blue_y) +{ + png_debug1(1, "in %s storage function\n", "cHRM"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + if (white_x < 0 || white_y < 0 || + red_x < 0 || red_y < 0 || + green_x < 0 || green_y < 0 || + blue_x < 0 || blue_y < 0) + { + png_warning(png_ptr, + "Ignoring attempt to set negative chromaticity value"); + return; + } + if (white_x > (double) PNG_UINT_31_MAX || + white_y > (double) PNG_UINT_31_MAX || + red_x > (double) PNG_UINT_31_MAX || + red_y > (double) PNG_UINT_31_MAX || + green_x > (double) PNG_UINT_31_MAX || + green_y > (double) PNG_UINT_31_MAX || + blue_x > (double) PNG_UINT_31_MAX || + blue_y > (double) PNG_UINT_31_MAX) + { + png_warning(png_ptr, + "Ignoring attempt to set chromaticity value exceeding 21474.83"); + return; + } + info_ptr->int_x_white = white_x; + info_ptr->int_y_white = white_y; + info_ptr->int_x_red = red_x; + info_ptr->int_y_red = red_y; + info_ptr->int_x_green = green_x; + info_ptr->int_y_green = green_y; + info_ptr->int_x_blue = blue_x; + info_ptr->int_y_blue = blue_y; +#ifdef PNG_FLOATING_POINT_SUPPORTED + info_ptr->x_white = (float)(white_x/100000.); + info_ptr->y_white = (float)(white_y/100000.); + info_ptr->x_red = (float)( red_x/100000.); + info_ptr->y_red = (float)( red_y/100000.); + info_ptr->x_green = (float)(green_x/100000.); + info_ptr->y_green = (float)(green_y/100000.); + info_ptr->x_blue = (float)( blue_x/100000.); + info_ptr->y_blue = (float)( blue_y/100000.); +#endif + info_ptr->valid |= PNG_INFO_cHRM; +} +#endif +#endif + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +void PNGAPI +png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma) +{ + double gamma; + png_debug1(1, "in %s storage function\n", "gAMA"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + /* Check for overflow */ + if (file_gamma > 21474.83) + { + png_warning(png_ptr, "Limiting gamma to 21474.83"); + gamma=21474.83; + } + else + gamma=file_gamma; + info_ptr->gamma = (float)gamma; +#ifdef PNG_FIXED_POINT_SUPPORTED + info_ptr->int_gamma = (int)(gamma*100000.+.5); +#endif + info_ptr->valid |= PNG_INFO_gAMA; + if(gamma == 0.0) + png_warning(png_ptr, "Setting gamma=0"); +} +#endif +void PNGAPI +png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point + int_gamma) +{ + png_fixed_point gamma; + + png_debug1(1, "in %s storage function\n", "gAMA"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + if (int_gamma > (png_fixed_point) PNG_UINT_31_MAX) + { + png_warning(png_ptr, "Limiting gamma to 21474.83"); + gamma=PNG_UINT_31_MAX; + } + else + { + if (int_gamma < 0) + { + png_warning(png_ptr, "Setting negative gamma to zero"); + gamma=0; + } + else + gamma=int_gamma; + } +#ifdef PNG_FLOATING_POINT_SUPPORTED + info_ptr->gamma = (float)(gamma/100000.); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + info_ptr->int_gamma = gamma; +#endif + info_ptr->valid |= PNG_INFO_gAMA; + if(gamma == 0) + png_warning(png_ptr, "Setting gamma=0"); +} +#endif + +#if defined(PNG_hIST_SUPPORTED) +void PNGAPI +png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist) +{ + int i; + + png_debug1(1, "in %s storage function\n", "hIST"); + if (png_ptr == NULL || info_ptr == NULL) + return; + if (info_ptr->num_palette == 0) + { + png_warning(png_ptr, + "Palette size 0, hIST allocation skipped."); + return; + } + +#ifdef PNG_FREE_ME_SUPPORTED + png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0); +#endif + /* Changed from info->num_palette to 256 in version 1.2.1 */ + png_ptr->hist = (png_uint_16p)png_malloc_warn(png_ptr, + (png_uint_32)(256 * png_sizeof (png_uint_16))); + if (png_ptr->hist == NULL) + { + png_warning(png_ptr, "Insufficient memory for hIST chunk data."); + return; + } + + for (i = 0; i < info_ptr->num_palette; i++) + png_ptr->hist[i] = hist[i]; + info_ptr->hist = png_ptr->hist; + info_ptr->valid |= PNG_INFO_hIST; + +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_HIST; +#else + png_ptr->flags |= PNG_FLAG_FREE_HIST; +#endif +} +#endif + +void PNGAPI +png_set_IHDR(png_structp png_ptr, png_infop info_ptr, + png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_type, int compression_type, + int filter_type) +{ + png_debug1(1, "in %s storage function\n", "IHDR"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + /* check for width and height valid values */ + if (width == 0 || height == 0) + png_error(png_ptr, "Image width or height is zero in IHDR"); +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + if (width > png_ptr->user_width_max || height > png_ptr->user_height_max) + png_error(png_ptr, "image size exceeds user limits in IHDR"); +#else + if (width > PNG_USER_WIDTH_MAX || height > PNG_USER_HEIGHT_MAX) + png_error(png_ptr, "image size exceeds user limits in IHDR"); +#endif + if (width > PNG_UINT_31_MAX || height > PNG_UINT_31_MAX) + png_error(png_ptr, "Invalid image size in IHDR"); + if ( width > (PNG_UINT_32_MAX + >> 3) /* 8-byte RGBA pixels */ + - 64 /* bigrowbuf hack */ + - 1 /* filter byte */ + - 7*8 /* rounding of width to multiple of 8 pixels */ + - 8) /* extra max_pixel_depth pad */ + png_warning(png_ptr, "Width is too large for libpng to process pixels"); + + /* check other values */ + if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 && + bit_depth != 8 && bit_depth != 16) + png_error(png_ptr, "Invalid bit depth in IHDR"); + + if (color_type < 0 || color_type == 1 || + color_type == 5 || color_type > 6) + png_error(png_ptr, "Invalid color type in IHDR"); + + if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) || + ((color_type == PNG_COLOR_TYPE_RGB || + color_type == PNG_COLOR_TYPE_GRAY_ALPHA || + color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8)) + png_error(png_ptr, "Invalid color type/bit depth combination in IHDR"); + + if (interlace_type >= PNG_INTERLACE_LAST) + png_error(png_ptr, "Unknown interlace method in IHDR"); + + if (compression_type != PNG_COMPRESSION_TYPE_BASE) + png_error(png_ptr, "Unknown compression method in IHDR"); + +#if defined(PNG_MNG_FEATURES_SUPPORTED) + /* Accept filter_method 64 (intrapixel differencing) only if + * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and + * 2. Libpng did not read a PNG signature (this filter_method is only + * used in PNG datastreams that are embedded in MNG datastreams) and + * 3. The application called png_permit_mng_features with a mask that + * included PNG_FLAG_MNG_FILTER_64 and + * 4. The filter_method is 64 and + * 5. The color_type is RGB or RGBA + */ + if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted) + png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n"); + if(filter_type != PNG_FILTER_TYPE_BASE) + { + if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && + (filter_type == PNG_INTRAPIXEL_DIFFERENCING) && + ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) && + (color_type == PNG_COLOR_TYPE_RGB || + color_type == PNG_COLOR_TYPE_RGB_ALPHA))) + png_error(png_ptr, "Unknown filter method in IHDR"); + if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) + png_warning(png_ptr, "Invalid filter method in IHDR"); + } +#else + if(filter_type != PNG_FILTER_TYPE_BASE) + png_error(png_ptr, "Unknown filter method in IHDR"); +#endif + + info_ptr->width = width; + info_ptr->height = height; + info_ptr->bit_depth = (png_byte)bit_depth; + info_ptr->color_type =(png_byte) color_type; + info_ptr->compression_type = (png_byte)compression_type; + info_ptr->filter_type = (png_byte)filter_type; + info_ptr->interlace_type = (png_byte)interlace_type; + if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + info_ptr->channels = 1; + else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) + info_ptr->channels = 3; + else + info_ptr->channels = 1; + if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) + info_ptr->channels++; + info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth); + + /* check for potential overflow */ + if ( width > (PNG_UINT_32_MAX + >> 3) /* 8-byte RGBA pixels */ + - 64 /* bigrowbuf hack */ + - 1 /* filter byte */ + - 7*8 /* rounding of width to multiple of 8 pixels */ + - 8) /* extra max_pixel_depth pad */ + info_ptr->rowbytes = (png_size_t)0; + else + info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,width); +} + +#if defined(PNG_oFFs_SUPPORTED) +void PNGAPI +png_set_oFFs(png_structp png_ptr, png_infop info_ptr, + png_int_32 offset_x, png_int_32 offset_y, int unit_type) +{ + png_debug1(1, "in %s storage function\n", "oFFs"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + info_ptr->x_offset = offset_x; + info_ptr->y_offset = offset_y; + info_ptr->offset_unit_type = (png_byte)unit_type; + info_ptr->valid |= PNG_INFO_oFFs; +} +#endif + +#if defined(PNG_pCAL_SUPPORTED) +void PNGAPI +png_set_pCAL(png_structp png_ptr, png_infop info_ptr, + png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams, + png_charp units, png_charpp params) +{ + png_uint_32 length; + int i; + + png_debug1(1, "in %s storage function\n", "pCAL"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + length = png_strlen(purpose) + 1; + png_debug1(3, "allocating purpose for info (%lu bytes)\n", length); + info_ptr->pcal_purpose = (png_charp)png_malloc_warn(png_ptr, length); + if (info_ptr->pcal_purpose == NULL) + { + png_warning(png_ptr, "Insufficient memory for pCAL purpose."); + return; + } + png_memcpy(info_ptr->pcal_purpose, purpose, (png_size_t)length); + + png_debug(3, "storing X0, X1, type, and nparams in info\n"); + info_ptr->pcal_X0 = X0; + info_ptr->pcal_X1 = X1; + info_ptr->pcal_type = (png_byte)type; + info_ptr->pcal_nparams = (png_byte)nparams; + + length = png_strlen(units) + 1; + png_debug1(3, "allocating units for info (%lu bytes)\n", length); + info_ptr->pcal_units = (png_charp)png_malloc_warn(png_ptr, length); + if (info_ptr->pcal_units == NULL) + { + png_warning(png_ptr, "Insufficient memory for pCAL units."); + return; + } + png_memcpy(info_ptr->pcal_units, units, (png_size_t)length); + + info_ptr->pcal_params = (png_charpp)png_malloc_warn(png_ptr, + (png_uint_32)((nparams + 1) * png_sizeof(png_charp))); + if (info_ptr->pcal_params == NULL) + { + png_warning(png_ptr, "Insufficient memory for pCAL params."); + return; + } + + info_ptr->pcal_params[nparams] = NULL; + + for (i = 0; i < nparams; i++) + { + length = png_strlen(params[i]) + 1; + png_debug2(3, "allocating parameter %d for info (%lu bytes)\n", i, length); + info_ptr->pcal_params[i] = (png_charp)png_malloc_warn(png_ptr, length); + if (info_ptr->pcal_params[i] == NULL) + { + png_warning(png_ptr, "Insufficient memory for pCAL parameter."); + return; + } + png_memcpy(info_ptr->pcal_params[i], params[i], (png_size_t)length); + } + + info_ptr->valid |= PNG_INFO_pCAL; +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_PCAL; +#endif +} +#endif + +#if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED +void PNGAPI +png_set_sCAL(png_structp png_ptr, png_infop info_ptr, + int unit, double width, double height) +{ + png_debug1(1, "in %s storage function\n", "sCAL"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + info_ptr->scal_unit = (png_byte)unit; + info_ptr->scal_pixel_width = width; + info_ptr->scal_pixel_height = height; + + info_ptr->valid |= PNG_INFO_sCAL; +} +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +void PNGAPI +png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr, + int unit, png_charp swidth, png_charp sheight) +{ + png_uint_32 length; + + png_debug1(1, "in %s storage function\n", "sCAL"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + info_ptr->scal_unit = (png_byte)unit; + + length = png_strlen(swidth) + 1; + png_debug1(3, "allocating unit for info (%d bytes)\n", length); + info_ptr->scal_s_width = (png_charp)png_malloc_warn(png_ptr, length); + if (info_ptr->scal_s_width == NULL) + { + png_warning(png_ptr, "Memory allocation failed while processing sCAL."); + } + png_memcpy(info_ptr->scal_s_width, swidth, (png_size_t)length); + + length = png_strlen(sheight) + 1; + png_debug1(3, "allocating unit for info (%d bytes)\n", length); + info_ptr->scal_s_height = (png_charp)png_malloc_warn(png_ptr, length); + if (info_ptr->scal_s_height == NULL) + { + png_free (png_ptr, info_ptr->scal_s_width); + png_warning(png_ptr, "Memory allocation failed while processing sCAL."); + } + png_memcpy(info_ptr->scal_s_height, sheight, (png_size_t)length); + + info_ptr->valid |= PNG_INFO_sCAL; +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_SCAL; +#endif +} +#endif +#endif +#endif + +#if defined(PNG_pHYs_SUPPORTED) +void PNGAPI +png_set_pHYs(png_structp png_ptr, png_infop info_ptr, + png_uint_32 res_x, png_uint_32 res_y, int unit_type) +{ + png_debug1(1, "in %s storage function\n", "pHYs"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + info_ptr->x_pixels_per_unit = res_x; + info_ptr->y_pixels_per_unit = res_y; + info_ptr->phys_unit_type = (png_byte)unit_type; + info_ptr->valid |= PNG_INFO_pHYs; +} +#endif + +void PNGAPI +png_set_PLTE(png_structp png_ptr, png_infop info_ptr, + png_colorp palette, int num_palette) +{ + + png_debug1(1, "in %s storage function\n", "PLTE"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + /* + * It may not actually be necessary to set png_ptr->palette here; + * we do it for backward compatibility with the way the png_handle_tRNS + * function used to do the allocation. + */ +#ifdef PNG_FREE_ME_SUPPORTED + png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0); +#endif + + /* Changed in libpng-1.2.1 to allocate 256 instead of num_palette entries, + in case of an invalid PNG file that has too-large sample values. */ + png_ptr->palette = (png_colorp)png_malloc(png_ptr, + 256 * png_sizeof(png_color)); + png_memset(png_ptr->palette, 0, 256 * png_sizeof(png_color)); + png_memcpy(png_ptr->palette, palette, num_palette * png_sizeof (png_color)); + info_ptr->palette = png_ptr->palette; + info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette; + +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_PLTE; +#else + png_ptr->flags |= PNG_FLAG_FREE_PLTE; +#endif + + info_ptr->valid |= PNG_INFO_PLTE; +} + +#if defined(PNG_sBIT_SUPPORTED) +void PNGAPI +png_set_sBIT(png_structp png_ptr, png_infop info_ptr, + png_color_8p sig_bit) +{ + png_debug1(1, "in %s storage function\n", "sBIT"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + png_memcpy(&(info_ptr->sig_bit), sig_bit, png_sizeof (png_color_8)); + info_ptr->valid |= PNG_INFO_sBIT; +} +#endif + +#if defined(PNG_sRGB_SUPPORTED) +void PNGAPI +png_set_sRGB(png_structp png_ptr, png_infop info_ptr, int intent) +{ + png_debug1(1, "in %s storage function\n", "sRGB"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + info_ptr->srgb_intent = (png_byte)intent; + info_ptr->valid |= PNG_INFO_sRGB; +} + +void PNGAPI +png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr, + int intent) +{ +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED + float file_gamma; +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + png_fixed_point int_file_gamma; +#endif +#endif +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED + float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + png_fixed_point int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, + int_green_y, int_blue_x, int_blue_y; +#endif +#endif + png_debug1(1, "in %s storage function\n", "sRGB_gAMA_and_cHRM"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + png_set_sRGB(png_ptr, info_ptr, intent); + +#if defined(PNG_gAMA_SUPPORTED) +#ifdef PNG_FLOATING_POINT_SUPPORTED + file_gamma = (float).45455; + png_set_gAMA(png_ptr, info_ptr, file_gamma); +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED + int_file_gamma = 45455L; + png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma); +#endif +#endif + +#if defined(PNG_cHRM_SUPPORTED) +#ifdef PNG_FIXED_POINT_SUPPORTED + int_white_x = 31270L; + int_white_y = 32900L; + int_red_x = 64000L; + int_red_y = 33000L; + int_green_x = 30000L; + int_green_y = 60000L; + int_blue_x = 15000L; + int_blue_y = 6000L; + + png_set_cHRM_fixed(png_ptr, info_ptr, + int_white_x, int_white_y, int_red_x, int_red_y, int_green_x, int_green_y, + int_blue_x, int_blue_y); +#endif +#ifdef PNG_FLOATING_POINT_SUPPORTED + white_x = (float).3127; + white_y = (float).3290; + red_x = (float).64; + red_y = (float).33; + green_x = (float).30; + green_y = (float).60; + blue_x = (float).15; + blue_y = (float).06; + + png_set_cHRM(png_ptr, info_ptr, + white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); +#endif +#endif +} +#endif + + +#if defined(PNG_iCCP_SUPPORTED) +void PNGAPI +png_set_iCCP(png_structp png_ptr, png_infop info_ptr, + png_charp name, int compression_type, + png_charp profile, png_uint_32 proflen) +{ + png_charp new_iccp_name; + png_charp new_iccp_profile; + + png_debug1(1, "in %s storage function\n", "iCCP"); + if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL) + return; + + new_iccp_name = (png_charp)png_malloc_warn(png_ptr, png_strlen(name)+1); + if (new_iccp_name == NULL) + { + png_warning(png_ptr, "Insufficient memory to process iCCP chunk."); + return; + } + png_strcpy(new_iccp_name, name); + new_iccp_profile = (png_charp)png_malloc_warn(png_ptr, proflen); + if (new_iccp_profile == NULL) + { + png_free (png_ptr, new_iccp_name); + png_warning(png_ptr, "Insufficient memory to process iCCP profile."); + return; + } + png_memcpy(new_iccp_profile, profile, (png_size_t)proflen); + + png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0); + + info_ptr->iccp_proflen = proflen; + info_ptr->iccp_name = new_iccp_name; + info_ptr->iccp_profile = new_iccp_profile; + /* Compression is always zero but is here so the API and info structure + * does not have to change if we introduce multiple compression types */ + info_ptr->iccp_compression = (png_byte)compression_type; +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_ICCP; +#endif + info_ptr->valid |= PNG_INFO_iCCP; +} +#endif + +#if defined(PNG_TEXT_SUPPORTED) +void PNGAPI +png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, + int num_text) +{ + int ret; + ret=png_set_text_2(png_ptr, info_ptr, text_ptr, num_text); + if (ret) + png_error(png_ptr, "Insufficient memory to store text"); +} + +int /* PRIVATE */ +png_set_text_2(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr, + int num_text) +{ + int i; + + png_debug1(1, "in %s storage function\n", (png_ptr->chunk_name[0] == '\0' ? + "text" : (png_const_charp)png_ptr->chunk_name)); + + if (png_ptr == NULL || info_ptr == NULL || num_text == 0) + return(0); + + /* Make sure we have enough space in the "text" array in info_struct + * to hold all of the incoming text_ptr objects. + */ + if (info_ptr->num_text + num_text > info_ptr->max_text) + { + if (info_ptr->text != NULL) + { + png_textp old_text; + int old_max; + + old_max = info_ptr->max_text; + info_ptr->max_text = info_ptr->num_text + num_text + 8; + old_text = info_ptr->text; + info_ptr->text = (png_textp)png_malloc_warn(png_ptr, + (png_uint_32)(info_ptr->max_text * png_sizeof (png_text))); + if (info_ptr->text == NULL) + { + png_free(png_ptr, old_text); + return(1); + } + png_memcpy(info_ptr->text, old_text, (png_size_t)(old_max * + png_sizeof(png_text))); + png_free(png_ptr, old_text); + } + else + { + info_ptr->max_text = num_text + 8; + info_ptr->num_text = 0; + info_ptr->text = (png_textp)png_malloc_warn(png_ptr, + (png_uint_32)(info_ptr->max_text * png_sizeof (png_text))); + if (info_ptr->text == NULL) + return(1); +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_TEXT; +#endif + } + png_debug1(3, "allocated %d entries for info_ptr->text\n", + info_ptr->max_text); + } + for (i = 0; i < num_text; i++) + { + png_size_t text_length,key_len; + png_size_t lang_len,lang_key_len; + png_textp textp = &(info_ptr->text[info_ptr->num_text]); + + if (text_ptr[i].key == NULL) + continue; + + key_len = png_strlen(text_ptr[i].key); + + if(text_ptr[i].compression <= 0) + { + lang_len = 0; + lang_key_len = 0; + } + else +#ifdef PNG_iTXt_SUPPORTED + { + /* set iTXt data */ + if (text_ptr[i].lang != NULL) + lang_len = png_strlen(text_ptr[i].lang); + else + lang_len = 0; + if (text_ptr[i].lang_key != NULL) + lang_key_len = png_strlen(text_ptr[i].lang_key); + else + lang_key_len = 0; + } +#else + { + png_warning(png_ptr, "iTXt chunk not supported."); + continue; + } +#endif + + if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0') + { + text_length = 0; +#ifdef PNG_iTXt_SUPPORTED + if(text_ptr[i].compression > 0) + textp->compression = PNG_ITXT_COMPRESSION_NONE; + else +#endif + textp->compression = PNG_TEXT_COMPRESSION_NONE; + } + else + { + text_length = png_strlen(text_ptr[i].text); + textp->compression = text_ptr[i].compression; + } + + textp->key = (png_charp)png_malloc_warn(png_ptr, + (png_uint_32)(key_len + text_length + lang_len + lang_key_len + 4)); + if (textp->key == NULL) + return(1); + png_debug2(2, "Allocated %lu bytes at %x in png_set_text\n", + (png_uint_32)(key_len + lang_len + lang_key_len + text_length + 4), + (int)textp->key); + + png_memcpy(textp->key, text_ptr[i].key, + (png_size_t)(key_len)); + *(textp->key+key_len) = '\0'; +#ifdef PNG_iTXt_SUPPORTED + if (text_ptr[i].compression > 0) + { + textp->lang=textp->key + key_len + 1; + png_memcpy(textp->lang, text_ptr[i].lang, lang_len); + *(textp->lang+lang_len) = '\0'; + textp->lang_key=textp->lang + lang_len + 1; + png_memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len); + *(textp->lang_key+lang_key_len) = '\0'; + textp->text=textp->lang_key + lang_key_len + 1; + } + else +#endif + { +#ifdef PNG_iTXt_SUPPORTED + textp->lang=NULL; + textp->lang_key=NULL; +#endif + textp->text=textp->key + key_len + 1; + } + if(text_length) + png_memcpy(textp->text, text_ptr[i].text, + (png_size_t)(text_length)); + *(textp->text+text_length) = '\0'; + +#ifdef PNG_iTXt_SUPPORTED + if(textp->compression > 0) + { + textp->text_length = 0; + textp->itxt_length = text_length; + } + else +#endif + { + textp->text_length = text_length; +#ifdef PNG_iTXt_SUPPORTED + textp->itxt_length = 0; +#endif + } + info_ptr->text[info_ptr->num_text]= *textp; + info_ptr->num_text++; + png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text); + } + return(0); +} +#endif + +#if defined(PNG_tIME_SUPPORTED) +void PNGAPI +png_set_tIME(png_structp png_ptr, png_infop info_ptr, png_timep mod_time) +{ + png_debug1(1, "in %s storage function\n", "tIME"); + if (png_ptr == NULL || info_ptr == NULL || + (png_ptr->mode & PNG_WROTE_tIME)) + return; + + png_memcpy(&(info_ptr->mod_time), mod_time, png_sizeof (png_time)); + info_ptr->valid |= PNG_INFO_tIME; +} +#endif + +#if defined(PNG_tRNS_SUPPORTED) +void PNGAPI +png_set_tRNS(png_structp png_ptr, png_infop info_ptr, + png_bytep trans, int num_trans, png_color_16p trans_values) +{ + png_debug1(1, "in %s storage function\n", "tRNS"); + if (png_ptr == NULL || info_ptr == NULL) + return; + + if (trans != NULL) + { + /* + * It may not actually be necessary to set png_ptr->trans here; + * we do it for backward compatibility with the way the png_handle_tRNS + * function used to do the allocation. + */ +#ifdef PNG_FREE_ME_SUPPORTED + png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0); +#endif + /* Changed from num_trans to 256 in version 1.2.1 */ + png_ptr->trans = info_ptr->trans = (png_bytep)png_malloc(png_ptr, + (png_uint_32)256); + png_memcpy(info_ptr->trans, trans, (png_size_t)num_trans); +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_TRNS; +#else + png_ptr->flags |= PNG_FLAG_FREE_TRNS; +#endif + } + + if (trans_values != NULL) + { + png_memcpy(&(info_ptr->trans_values), trans_values, + png_sizeof(png_color_16)); + if (num_trans == 0) + num_trans = 1; + } + info_ptr->num_trans = (png_uint_16)num_trans; + info_ptr->valid |= PNG_INFO_tRNS; +} +#endif + +#if defined(PNG_sPLT_SUPPORTED) +void PNGAPI +png_set_sPLT(png_structp png_ptr, + png_infop info_ptr, png_sPLT_tp entries, int nentries) +{ + png_sPLT_tp np; + int i; + + np = (png_sPLT_tp)png_malloc_warn(png_ptr, + (info_ptr->splt_palettes_num + nentries) * png_sizeof(png_sPLT_t)); + if (np == NULL) + { + png_warning(png_ptr, "No memory for sPLT palettes."); + return; + } + + png_memcpy(np, info_ptr->splt_palettes, + info_ptr->splt_palettes_num * png_sizeof(png_sPLT_t)); + png_free(png_ptr, info_ptr->splt_palettes); + info_ptr->splt_palettes=NULL; + + for (i = 0; i < nentries; i++) + { + png_sPLT_tp to = np + info_ptr->splt_palettes_num + i; + png_sPLT_tp from = entries + i; + + to->name = (png_charp)png_malloc(png_ptr, + png_strlen(from->name) + 1); + /* TODO: use png_malloc_warn */ + png_strcpy(to->name, from->name); + to->entries = (png_sPLT_entryp)png_malloc(png_ptr, + from->nentries * png_sizeof(png_sPLT_t)); + /* TODO: use png_malloc_warn */ + png_memcpy(to->entries, from->entries, + from->nentries * png_sizeof(png_sPLT_t)); + to->nentries = from->nentries; + to->depth = from->depth; + } + + info_ptr->splt_palettes = np; + info_ptr->splt_palettes_num += nentries; + info_ptr->valid |= PNG_INFO_sPLT; +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_SPLT; +#endif +} +#endif /* PNG_sPLT_SUPPORTED */ + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +void PNGAPI +png_set_unknown_chunks(png_structp png_ptr, + png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns) +{ + png_unknown_chunkp np; + int i; + + if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0) + return; + + np = (png_unknown_chunkp)png_malloc_warn(png_ptr, + (info_ptr->unknown_chunks_num + num_unknowns) * + png_sizeof(png_unknown_chunk)); + if (np == NULL) + { + png_warning(png_ptr, "Out of memory while processing unknown chunk."); + return; + } + + png_memcpy(np, info_ptr->unknown_chunks, + info_ptr->unknown_chunks_num * png_sizeof(png_unknown_chunk)); + png_free(png_ptr, info_ptr->unknown_chunks); + info_ptr->unknown_chunks=NULL; + + for (i = 0; i < num_unknowns; i++) + { + png_unknown_chunkp to = np + info_ptr->unknown_chunks_num + i; + png_unknown_chunkp from = unknowns + i; + + png_strncpy((png_charp)to->name, (png_charp)from->name, 5); + to->data = (png_bytep)png_malloc_warn(png_ptr, from->size); + if (to->data == NULL) + { + png_warning(png_ptr, "Out of memory processing unknown chunk."); + } + else + { + png_memcpy(to->data, from->data, from->size); + to->size = from->size; + + /* note our location in the read or write sequence */ + to->location = (png_byte)(png_ptr->mode & 0xff); + } + } + + info_ptr->unknown_chunks = np; + info_ptr->unknown_chunks_num += num_unknowns; +#ifdef PNG_FREE_ME_SUPPORTED + info_ptr->free_me |= PNG_FREE_UNKN; +#endif +} +void PNGAPI +png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr, + int chunk, int location) +{ + if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk < + (int)info_ptr->unknown_chunks_num) + info_ptr->unknown_chunks[chunk].location = (png_byte)location; +} +#endif + +#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ + defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) +void PNGAPI +png_permit_empty_plte (png_structp png_ptr, int empty_plte_permitted) +{ + /* This function is deprecated in favor of png_permit_mng_features() + and will be removed from libpng-2.0.0 */ + png_debug(1, "in png_permit_empty_plte, DEPRECATED.\n"); + if (png_ptr == NULL) + return; + png_ptr->mng_features_permitted = (png_byte) + ((png_ptr->mng_features_permitted & (~(PNG_FLAG_MNG_EMPTY_PLTE))) | + ((empty_plte_permitted & PNG_FLAG_MNG_EMPTY_PLTE))); +} +#endif + +#if defined(PNG_MNG_FEATURES_SUPPORTED) +png_uint_32 PNGAPI +png_permit_mng_features (png_structp png_ptr, png_uint_32 mng_features) +{ + png_debug(1, "in png_permit_mng_features\n"); + if (png_ptr == NULL) + return (png_uint_32)0; + png_ptr->mng_features_permitted = + (png_byte)(mng_features & PNG_ALL_MNG_FEATURES); + return (png_uint_32)png_ptr->mng_features_permitted; +} +#endif + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) +void PNGAPI +png_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep + chunk_list, int num_chunks) +{ + png_bytep new_list, p; + int i, old_num_chunks; + if (num_chunks == 0) + { + if(keep == PNG_HANDLE_CHUNK_ALWAYS || keep == PNG_HANDLE_CHUNK_IF_SAFE) + png_ptr->flags |= PNG_FLAG_KEEP_UNKNOWN_CHUNKS; + else + png_ptr->flags &= ~PNG_FLAG_KEEP_UNKNOWN_CHUNKS; + + if(keep == PNG_HANDLE_CHUNK_ALWAYS) + png_ptr->flags |= PNG_FLAG_KEEP_UNSAFE_CHUNKS; + else + png_ptr->flags &= ~PNG_FLAG_KEEP_UNSAFE_CHUNKS; + return; + } + if (chunk_list == NULL) + return; + old_num_chunks=png_ptr->num_chunk_list; + new_list=(png_bytep)png_malloc(png_ptr, + (png_uint_32)(5*(num_chunks+old_num_chunks))); + if(png_ptr->chunk_list != NULL) + { + png_memcpy(new_list, png_ptr->chunk_list, + (png_size_t)(5*old_num_chunks)); + png_free(png_ptr, png_ptr->chunk_list); + png_ptr->chunk_list=NULL; + } + png_memcpy(new_list+5*old_num_chunks, chunk_list, + (png_size_t)(5*num_chunks)); + for (p=new_list+5*old_num_chunks+4, i=0; inum_chunk_list=old_num_chunks+num_chunks; + png_ptr->chunk_list=new_list; +#ifdef PNG_FREE_ME_SUPPORTED + png_ptr->free_me |= PNG_FREE_LIST; +#endif +} +#endif + +#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) +void PNGAPI +png_set_read_user_chunk_fn(png_structp png_ptr, png_voidp user_chunk_ptr, + png_user_chunk_ptr read_user_chunk_fn) +{ + png_debug(1, "in png_set_read_user_chunk_fn\n"); + png_ptr->read_user_chunk_fn = read_user_chunk_fn; + png_ptr->user_chunk_ptr = user_chunk_ptr; +} +#endif + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +void PNGAPI +png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers) +{ + png_debug1(1, "in %s storage function\n", "rows"); + + if (png_ptr == NULL || info_ptr == NULL) + return; + + if(info_ptr->row_pointers && (info_ptr->row_pointers != row_pointers)) + png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0); + info_ptr->row_pointers = row_pointers; + if(row_pointers) + info_ptr->valid |= PNG_INFO_IDAT; +} +#endif + +#ifdef PNG_WRITE_SUPPORTED +void PNGAPI +png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size) +{ + if(png_ptr->zbuf) + png_free(png_ptr, png_ptr->zbuf); + png_ptr->zbuf_size = (png_size_t)size; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; +} +#endif + +void PNGAPI +png_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask) +{ + if (png_ptr && info_ptr) + info_ptr->valid &= ~(mask); +} + + +#ifndef PNG_1_0_X +#ifdef PNG_ASSEMBLER_CODE_SUPPORTED +/* this function was added to libpng 1.2.0 and should always exist by default */ +void PNGAPI +png_set_asm_flags (png_structp png_ptr, png_uint_32 asm_flags) +{ + png_uint_32 settable_asm_flags; + png_uint_32 settable_mmx_flags; + + settable_mmx_flags = +#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW + PNG_ASM_FLAG_MMX_READ_COMBINE_ROW | +#endif +#ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE + PNG_ASM_FLAG_MMX_READ_INTERLACE | +#endif +#ifdef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW + PNG_ASM_FLAG_MMX_READ_FILTER_SUB | + PNG_ASM_FLAG_MMX_READ_FILTER_UP | + PNG_ASM_FLAG_MMX_READ_FILTER_AVG | + PNG_ASM_FLAG_MMX_READ_FILTER_PAETH | +#endif + 0; + + /* could be some non-MMX ones in the future, but not currently: */ + settable_asm_flags = settable_mmx_flags; + + if (!(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_COMPILED) || + !(png_ptr->asm_flags & PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU)) + { + /* clear all MMX flags if MMX isn't supported */ + settable_asm_flags &= ~settable_mmx_flags; + png_ptr->asm_flags &= ~settable_mmx_flags; + } + + /* we're replacing the settable bits with those passed in by the user, + * so first zero them out of the master copy, then logical-OR in the + * allowed subset that was requested */ + + png_ptr->asm_flags &= ~settable_asm_flags; /* zero them */ + png_ptr->asm_flags |= (asm_flags & settable_asm_flags); /* set them */ +} +#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ + +#ifdef PNG_ASSEMBLER_CODE_SUPPORTED +/* this function was added to libpng 1.2.0 */ +void PNGAPI +png_set_mmx_thresholds (png_structp png_ptr, + png_byte mmx_bitdepth_threshold, + png_uint_32 mmx_rowbytes_threshold) +{ + png_ptr->mmx_bitdepth_threshold = mmx_bitdepth_threshold; + png_ptr->mmx_rowbytes_threshold = mmx_rowbytes_threshold; +} +#endif /* ?PNG_ASSEMBLER_CODE_SUPPORTED */ + +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +/* this function was added to libpng 1.2.6 */ +void PNGAPI +png_set_user_limits (png_structp png_ptr, png_uint_32 user_width_max, + png_uint_32 user_height_max) +{ + /* Images with dimensions larger than these limits will be + * rejected by png_set_IHDR(). To accept any PNG datastream + * regardless of dimensions, set both limits to 0x7ffffffL. + */ + png_ptr->user_width_max = user_width_max; + png_ptr->user_height_max = user_height_max; +} +#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */ + +#endif /* ?PNG_1_0_X */ diff --git a/libpng/pngtrans.c b/libpng/pngtrans.c new file mode 100644 index 0000000..9003a21 --- /dev/null +++ b/libpng/pngtrans.c @@ -0,0 +1,650 @@ + +/* pngtrans.c - transforms the data in a row (used by both readers and writers) + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +#define PNG_INTERNAL +#include "png.h" + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* turn on BGR-to-RGB mapping */ +void PNGAPI +png_set_bgr(png_structp png_ptr) +{ + png_debug(1, "in png_set_bgr\n"); + png_ptr->transformations |= PNG_BGR; +} +#endif + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* turn on 16 bit byte swapping */ +void PNGAPI +png_set_swap(png_structp png_ptr) +{ + png_debug(1, "in png_set_swap\n"); + if (png_ptr->bit_depth == 16) + png_ptr->transformations |= PNG_SWAP_BYTES; +} +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* turn on pixel packing */ +void PNGAPI +png_set_packing(png_structp png_ptr) +{ + png_debug(1, "in png_set_packing\n"); + if (png_ptr->bit_depth < 8) + { + png_ptr->transformations |= PNG_PACK; + png_ptr->usr_bit_depth = 8; + } +} +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* turn on packed pixel swapping */ +void PNGAPI +png_set_packswap(png_structp png_ptr) +{ + png_debug(1, "in png_set_packswap\n"); + if (png_ptr->bit_depth < 8) + png_ptr->transformations |= PNG_PACKSWAP; +} +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +void PNGAPI +png_set_shift(png_structp png_ptr, png_color_8p true_bits) +{ + png_debug(1, "in png_set_shift\n"); + png_ptr->transformations |= PNG_SHIFT; + png_ptr->shift = *true_bits; +} +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +int PNGAPI +png_set_interlace_handling(png_structp png_ptr) +{ + png_debug(1, "in png_set_interlace handling\n"); + if (png_ptr->interlaced) + { + png_ptr->transformations |= PNG_INTERLACE; + return (7); + } + + return (1); +} +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte on read, or remove a filler or alpha byte on write. + * The filler type has changed in v0.95 to allow future 2-byte fillers + * for 48-bit input data, as well as to avoid problems with some compilers + * that don't like bytes as parameters. + */ +void PNGAPI +png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc) +{ + png_debug(1, "in png_set_filler\n"); + png_ptr->transformations |= PNG_FILLER; + png_ptr->filler = (png_byte)filler; + if (filler_loc == PNG_FILLER_AFTER) + png_ptr->flags |= PNG_FLAG_FILLER_AFTER; + else + png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER; + + /* This should probably go in the "do_read_filler" routine. + * I attempted to do that in libpng-1.0.1a but that caused problems + * so I restored it in libpng-1.0.2a + */ + + if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) + { + png_ptr->usr_channels = 4; + } + + /* Also I added this in libpng-1.0.2a (what happens when we expand + * a less-than-8-bit grayscale to GA? */ + + if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8) + { + png_ptr->usr_channels = 2; + } +} + +#if !defined(PNG_1_0_X) +/* Added to libpng-1.2.7 */ +void PNGAPI +png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc) +{ + png_debug(1, "in png_set_add_alpha\n"); + png_set_filler(png_ptr, filler, filler_loc); + png_ptr->transformations |= PNG_ADD_ALPHA; +} +#endif + +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +void PNGAPI +png_set_swap_alpha(png_structp png_ptr) +{ + png_debug(1, "in png_set_swap_alpha\n"); + png_ptr->transformations |= PNG_SWAP_ALPHA; +} +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +void PNGAPI +png_set_invert_alpha(png_structp png_ptr) +{ + png_debug(1, "in png_set_invert_alpha\n"); + png_ptr->transformations |= PNG_INVERT_ALPHA; +} +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +void PNGAPI +png_set_invert_mono(png_structp png_ptr) +{ + png_debug(1, "in png_set_invert_mono\n"); + png_ptr->transformations |= PNG_INVERT_MONO; +} + +/* invert monochrome grayscale data */ +void /* PRIVATE */ +png_do_invert(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_invert\n"); + /* This test removed from libpng version 1.0.13 and 1.2.0: + * if (row_info->bit_depth == 1 && + */ +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row == NULL || row_info == NULL) + return; +#endif + if (row_info->color_type == PNG_COLOR_TYPE_GRAY) + { + png_bytep rp = row; + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + + for (i = 0; i < istop; i++) + { + *rp = (png_byte)(~(*rp)); + rp++; + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && + row_info->bit_depth == 8) + { + png_bytep rp = row; + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + + for (i = 0; i < istop; i+=2) + { + *rp = (png_byte)(~(*rp)); + rp+=2; + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && + row_info->bit_depth == 16) + { + png_bytep rp = row; + png_uint_32 i; + png_uint_32 istop = row_info->rowbytes; + + for (i = 0; i < istop; i+=4) + { + *rp = (png_byte)(~(*rp)); + *(rp+1) = (png_byte)(~(*(rp+1))); + rp+=4; + } + } +} +#endif + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* swaps byte order on 16 bit depth images */ +void /* PRIVATE */ +png_do_swap(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_swap\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + row_info->bit_depth == 16) + { + png_bytep rp = row; + png_uint_32 i; + png_uint_32 istop= row_info->width * row_info->channels; + + for (i = 0; i < istop; i++, rp += 2) + { + png_byte t = *rp; + *rp = *(rp + 1); + *(rp + 1) = t; + } + } +} +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) +static png_byte onebppswaptable[256] = { + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF +}; + +static png_byte twobppswaptable[256] = { + 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0, + 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0, + 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4, + 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4, + 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8, + 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, + 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC, + 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC, + 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1, + 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1, + 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5, + 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5, + 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9, + 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9, + 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD, + 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD, + 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2, + 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2, + 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6, + 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6, + 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA, + 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA, + 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE, + 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE, + 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3, + 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3, + 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7, + 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7, + 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB, + 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, + 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF, + 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF +}; + +static png_byte fourbppswaptable[256] = { + 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, + 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, + 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1, + 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, + 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2, + 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, + 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3, + 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, + 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, + 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, + 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5, + 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, + 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6, + 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, + 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, + 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, + 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, + 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, + 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, + 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, + 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA, + 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, + 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB, + 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, + 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC, + 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, + 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, + 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, + 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE, + 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, + 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF +}; + +/* swaps pixel packing order within bytes */ +void /* PRIVATE */ +png_do_packswap(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_packswap\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + row_info->bit_depth < 8) + { + png_bytep rp, end, table; + + end = row + row_info->rowbytes; + + if (row_info->bit_depth == 1) + table = onebppswaptable; + else if (row_info->bit_depth == 2) + table = twobppswaptable; + else if (row_info->bit_depth == 4) + table = fourbppswaptable; + else + return; + + for (rp = row; rp < end; rp++) + *rp = table[*rp]; + } +} +#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */ + +#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ + defined(PNG_READ_STRIP_ALPHA_SUPPORTED) +/* remove filler or alpha byte(s) */ +void /* PRIVATE */ +png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags) +{ + png_debug(1, "in png_do_strip_filler\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + png_bytep sp=row; + png_bytep dp=row; + png_uint_32 row_width=row_info->width; + png_uint_32 i; + + if ((row_info->color_type == PNG_COLOR_TYPE_RGB || + (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA && + (flags & PNG_FLAG_STRIP_ALPHA))) && + row_info->channels == 4) + { + if (row_info->bit_depth == 8) + { + /* This converts from RGBX or RGBA to RGB */ + if (flags & PNG_FLAG_FILLER_AFTER) + { + dp+=3; sp+=4; + for (i = 1; i < row_width; i++) + { + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + sp++; + } + } + /* This converts from XRGB or ARGB to RGB */ + else + { + for (i = 0; i < row_width; i++) + { + sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + } + } + row_info->pixel_depth = 24; + row_info->rowbytes = row_width * 3; + } + else /* if (row_info->bit_depth == 16) */ + { + if (flags & PNG_FLAG_FILLER_AFTER) + { + /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */ + sp += 8; dp += 6; + for (i = 1; i < row_width; i++) + { + /* This could be (although png_memcpy is probably slower): + png_memcpy(dp, sp, 6); + sp += 8; + dp += 6; + */ + + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + sp += 2; + } + } + else + { + /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */ + for (i = 0; i < row_width; i++) + { + /* This could be (although png_memcpy is probably slower): + png_memcpy(dp, sp, 6); + sp += 8; + dp += 6; + */ + + sp+=2; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + *dp++ = *sp++; + } + } + row_info->pixel_depth = 48; + row_info->rowbytes = row_width * 6; + } + row_info->channels = 3; + } + else if ((row_info->color_type == PNG_COLOR_TYPE_GRAY || + (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && + (flags & PNG_FLAG_STRIP_ALPHA))) && + row_info->channels == 2) + { + if (row_info->bit_depth == 8) + { + /* This converts from GX or GA to G */ + if (flags & PNG_FLAG_FILLER_AFTER) + { + for (i = 0; i < row_width; i++) + { + *dp++ = *sp++; + sp++; + } + } + /* This converts from XG or AG to G */ + else + { + for (i = 0; i < row_width; i++) + { + sp++; + *dp++ = *sp++; + } + } + row_info->pixel_depth = 8; + row_info->rowbytes = row_width; + } + else /* if (row_info->bit_depth == 16) */ + { + if (flags & PNG_FLAG_FILLER_AFTER) + { + /* This converts from GGXX or GGAA to GG */ + sp += 4; dp += 2; + for (i = 1; i < row_width; i++) + { + *dp++ = *sp++; + *dp++ = *sp++; + sp += 2; + } + } + else + { + /* This converts from XXGG or AAGG to GG */ + for (i = 0; i < row_width; i++) + { + sp += 2; + *dp++ = *sp++; + *dp++ = *sp++; + } + } + row_info->pixel_depth = 16; + row_info->rowbytes = row_width * 2; + } + row_info->channels = 1; + } + if (flags & PNG_FLAG_STRIP_ALPHA) + row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; + } +} +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* swaps red and blue bytes within a pixel */ +void /* PRIVATE */ +png_do_bgr(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_bgr\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + (row_info->color_type & PNG_COLOR_MASK_COLOR)) + { + png_uint_32 row_width = row_info->width; + if (row_info->bit_depth == 8) + { + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + { + png_bytep rp; + png_uint_32 i; + + for (i = 0, rp = row; i < row_width; i++, rp += 3) + { + png_byte save = *rp; + *rp = *(rp + 2); + *(rp + 2) = save; + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + png_bytep rp; + png_uint_32 i; + + for (i = 0, rp = row; i < row_width; i++, rp += 4) + { + png_byte save = *rp; + *rp = *(rp + 2); + *(rp + 2) = save; + } + } + } + else if (row_info->bit_depth == 16) + { + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + { + png_bytep rp; + png_uint_32 i; + + for (i = 0, rp = row; i < row_width; i++, rp += 6) + { + png_byte save = *rp; + *rp = *(rp + 4); + *(rp + 4) = save; + save = *(rp + 1); + *(rp + 1) = *(rp + 5); + *(rp + 5) = save; + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + png_bytep rp; + png_uint_32 i; + + for (i = 0, rp = row; i < row_width; i++, rp += 8) + { + png_byte save = *rp; + *rp = *(rp + 4); + *(rp + 4) = save; + save = *(rp + 1); + *(rp + 1) = *(rp + 5); + *(rp + 5) = save; + } + } + } + } +} +#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */ + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_LEGACY_SUPPORTED) +void PNGAPI +png_set_user_transform_info(png_structp png_ptr, png_voidp + user_transform_ptr, int user_transform_depth, int user_transform_channels) +{ + png_debug(1, "in png_set_user_transform_info\n"); +#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) + png_ptr->user_transform_ptr = user_transform_ptr; + png_ptr->user_transform_depth = (png_byte)user_transform_depth; + png_ptr->user_transform_channels = (png_byte)user_transform_channels; +#else + if(user_transform_ptr || user_transform_depth || user_transform_channels) + png_warning(png_ptr, + "This version of libpng does not support user transform info"); +#endif +} +#endif + +/* This function returns a pointer to the user_transform_ptr associated with + * the user transform functions. The application should free any memory + * associated with this pointer before png_write_destroy and png_read_destroy + * are called. + */ +png_voidp PNGAPI +png_get_user_transform_ptr(png_structp png_ptr) +{ +#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) + return ((png_voidp)png_ptr->user_transform_ptr); +#else + if(png_ptr) + return (NULL); + return (NULL); +#endif +} diff --git a/libpng/pngwio.c b/libpng/pngwio.c new file mode 100644 index 0000000..d5d61f4 --- /dev/null +++ b/libpng/pngwio.c @@ -0,0 +1,228 @@ + +/* pngwio.c - functions for data output + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This file provides a location for all output. Users who need + * special handling are expected to write functions that have the same + * arguments as these and perform similar functions, but that possibly + * use different output methods. Note that you shouldn't change these + * functions, but rather write replacement functions and then change + * them at run time with png_set_write_fn(...). + */ + +#define PNG_INTERNAL +#include "png.h" +#ifdef PNG_WRITE_SUPPORTED + +/* Write the data to whatever output you are using. The default routine + writes to a file pointer. Note that this routine sometimes gets called + with very small lengths, so you should implement some kind of simple + buffering if you are using unbuffered writes. This should never be asked + to write more than 64K on a 16 bit machine. */ + +void /* PRIVATE */ +png_write_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + if (png_ptr->write_data_fn != NULL ) + (*(png_ptr->write_data_fn))(png_ptr, data, length); + else + png_error(png_ptr, "Call to NULL write function"); +} + +#if !defined(PNG_NO_STDIO) +/* This is the function that does the actual writing of data. If you are + not writing to a standard C stream, you should create a replacement + write_data function and use it at run time with png_set_write_fn(), rather + than changing the library. */ +#ifndef USE_FAR_KEYWORD +void PNGAPI +png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + png_uint_32 check; + +#if defined(_WIN32_WCE) + if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) + check = 0; +#else + check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); +#endif + if (check != length) + png_error(png_ptr, "Write Error"); +} +#else +/* this is the model-independent version. Since the standard I/O library + can't handle far buffers in the medium and small models, we have to copy + the data. +*/ + +#define NEAR_BUF_SIZE 1024 +#define MIN(a,b) (a <= b ? a : b) + +void PNGAPI +png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + png_uint_32 check; + png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ + png_FILE_p io_ptr; + + /* Check if data really is near. If so, use usual code. */ + near_data = (png_byte *)CVT_PTR_NOCHECK(data); + io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); + if ((png_bytep)near_data == data) + { +#if defined(_WIN32_WCE) + if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) + check = 0; +#else + check = fwrite(near_data, 1, length, io_ptr); +#endif + } + else + { + png_byte buf[NEAR_BUF_SIZE]; + png_size_t written, remaining, err; + check = 0; + remaining = length; + do + { + written = MIN(NEAR_BUF_SIZE, remaining); + png_memcpy(buf, data, written); /* copy far buffer to near buffer */ +#if defined(_WIN32_WCE) + if ( !WriteFile(io_ptr, buf, written, &err, NULL) ) + err = 0; +#else + err = fwrite(buf, 1, written, io_ptr); +#endif + if (err != written) + break; + else + check += err; + data += written; + remaining -= written; + } + while (remaining != 0); + } + if (check != length) + png_error(png_ptr, "Write Error"); +} + +#endif +#endif + +/* This function is called to output any data pending writing (normally + to disk). After png_flush is called, there should be no data pending + writing in any buffers. */ +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +void /* PRIVATE */ +png_flush(png_structp png_ptr) +{ + if (png_ptr->output_flush_fn != NULL) + (*(png_ptr->output_flush_fn))(png_ptr); +} + +#if !defined(PNG_NO_STDIO) +void PNGAPI +png_default_flush(png_structp png_ptr) +{ +#if !defined(_WIN32_WCE) + png_FILE_p io_ptr; + io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); + if (io_ptr != NULL) + fflush(io_ptr); +#endif +} +#endif +#endif + +/* This function allows the application to supply new output functions for + libpng if standard C streams aren't being used. + + This function takes as its arguments: + png_ptr - pointer to a png output data structure + io_ptr - pointer to user supplied structure containing info about + the output functions. May be NULL. + write_data_fn - pointer to a new output function that takes as its + arguments a pointer to a png_struct, a pointer to + data to be written, and a 32-bit unsigned int that is + the number of bytes to be written. The new write + function should call png_error(png_ptr, "Error msg") + to exit and output any fatal error messages. + flush_data_fn - pointer to a new flush function that takes as its + arguments a pointer to a png_struct. After a call to + the flush function, there should be no data in any buffers + or pending transmission. If the output method doesn't do + any buffering of ouput, a function prototype must still be + supplied although it doesn't have to do anything. If + PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile + time, output_flush_fn will be ignored, although it must be + supplied for compatibility. */ +void PNGAPI +png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, + png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) +{ + png_ptr->io_ptr = io_ptr; + +#if !defined(PNG_NO_STDIO) + if (write_data_fn != NULL) + png_ptr->write_data_fn = write_data_fn; + else + png_ptr->write_data_fn = png_default_write_data; +#else + png_ptr->write_data_fn = write_data_fn; +#endif + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +#if !defined(PNG_NO_STDIO) + if (output_flush_fn != NULL) + png_ptr->output_flush_fn = output_flush_fn; + else + png_ptr->output_flush_fn = png_default_flush; +#else + png_ptr->output_flush_fn = output_flush_fn; +#endif +#endif /* PNG_WRITE_FLUSH_SUPPORTED */ + + /* It is an error to read while writing a png file */ + if (png_ptr->read_data_fn != NULL) + { + png_ptr->read_data_fn = NULL; + png_warning(png_ptr, + "Attempted to set both read_data_fn and write_data_fn in"); + png_warning(png_ptr, + "the same structure. Resetting read_data_fn to NULL."); + } +} + +#if defined(USE_FAR_KEYWORD) +#if defined(_MSC_VER) +void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) +{ + void *near_ptr; + void FAR *far_ptr; + FP_OFF(near_ptr) = FP_OFF(ptr); + far_ptr = (void FAR *)near_ptr; + if(check != 0) + if(FP_SEG(ptr) != FP_SEG(far_ptr)) + png_error(png_ptr,"segment lost in conversion"); + return(near_ptr); +} +# else +void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) +{ + void *near_ptr; + void FAR *far_ptr; + near_ptr = (void FAR *)ptr; + far_ptr = (void FAR *)near_ptr; + if(check != 0) + if(far_ptr != ptr) + png_error(png_ptr,"segment lost in conversion"); + return(near_ptr); +} +# endif +# endif +#endif /* PNG_WRITE_SUPPORTED */ diff --git a/libpng/pngwrite.c b/libpng/pngwrite.c new file mode 100644 index 0000000..3246fda --- /dev/null +++ b/libpng/pngwrite.c @@ -0,0 +1,1464 @@ + +/* pngwrite.c - general routines to write a PNG file + * + * libpng 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +/* get internal access to png.h */ +#define PNG_INTERNAL +#include "png.h" +#ifdef PNG_WRITE_SUPPORTED + +/* Writes all the PNG information. This is the suggested way to use the + * library. If you have a new chunk to add, make a function to write it, + * and put it in the correct location here. If you want the chunk written + * after the image data, put it in png_write_end(). I strongly encourage + * you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing + * the chunk, as that will keep the code from breaking if you want to just + * write a plain PNG file. If you have long comments, I suggest writing + * them in png_write_end(), and compressing them. + */ +void PNGAPI +png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_write_info_before_PLTE\n"); + if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE)) + { + png_write_sig(png_ptr); /* write PNG signature */ +#if defined(PNG_MNG_FEATURES_SUPPORTED) + if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&(png_ptr->mng_features_permitted)) + { + png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n"); + png_ptr->mng_features_permitted=0; + } +#endif + /* write IHDR information. */ + png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height, + info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type, + info_ptr->filter_type, +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) + info_ptr->interlace_type); +#else + 0); +#endif + /* the rest of these check to see if the valid field has the appropriate + flag set, and if it does, writes the chunk. */ +#if defined(PNG_WRITE_gAMA_SUPPORTED) + if (info_ptr->valid & PNG_INFO_gAMA) + { +# ifdef PNG_FLOATING_POINT_SUPPORTED + png_write_gAMA(png_ptr, info_ptr->gamma); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED + png_write_gAMA_fixed(png_ptr, info_ptr->int_gamma); +# endif +#endif + } +#endif +#if defined(PNG_WRITE_sRGB_SUPPORTED) + if (info_ptr->valid & PNG_INFO_sRGB) + png_write_sRGB(png_ptr, (int)info_ptr->srgb_intent); +#endif +#if defined(PNG_WRITE_iCCP_SUPPORTED) + if (info_ptr->valid & PNG_INFO_iCCP) + png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_COMPRESSION_TYPE_BASE, + info_ptr->iccp_profile, (int)info_ptr->iccp_proflen); +#endif +#if defined(PNG_WRITE_sBIT_SUPPORTED) + if (info_ptr->valid & PNG_INFO_sBIT) + png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type); +#endif +#if defined(PNG_WRITE_cHRM_SUPPORTED) + if (info_ptr->valid & PNG_INFO_cHRM) + { +#ifdef PNG_FLOATING_POINT_SUPPORTED + png_write_cHRM(png_ptr, + info_ptr->x_white, info_ptr->y_white, + info_ptr->x_red, info_ptr->y_red, + info_ptr->x_green, info_ptr->y_green, + info_ptr->x_blue, info_ptr->y_blue); +#else +# ifdef PNG_FIXED_POINT_SUPPORTED + png_write_cHRM_fixed(png_ptr, + info_ptr->int_x_white, info_ptr->int_y_white, + info_ptr->int_x_red, info_ptr->int_y_red, + info_ptr->int_x_green, info_ptr->int_y_green, + info_ptr->int_x_blue, info_ptr->int_y_blue); +# endif +#endif + } +#endif +#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) + if (info_ptr->unknown_chunks_num) + { + png_unknown_chunk *up; + + png_debug(5, "writing extra chunks\n"); + + for (up = info_ptr->unknown_chunks; + up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num; + up++) + { + int keep=png_handle_as_unknown(png_ptr, up->name); + if (keep != PNG_HANDLE_CHUNK_NEVER && + up->location && !(up->location & PNG_HAVE_PLTE) && + !(up->location & PNG_HAVE_IDAT) && + ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS || + (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS))) + { + png_write_chunk(png_ptr, up->name, up->data, up->size); + } + } + } +#endif + png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE; + } +} + +void PNGAPI +png_write_info(png_structp png_ptr, png_infop info_ptr) +{ +#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) + int i; +#endif + + png_debug(1, "in png_write_info\n"); + + png_write_info_before_PLTE(png_ptr, info_ptr); + + if (info_ptr->valid & PNG_INFO_PLTE) + png_write_PLTE(png_ptr, info_ptr->palette, + (png_uint_32)info_ptr->num_palette); + else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + png_error(png_ptr, "Valid palette required for paletted images\n"); + +#if defined(PNG_WRITE_tRNS_SUPPORTED) + if (info_ptr->valid & PNG_INFO_tRNS) + { +#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) + /* invert the alpha channel (in tRNS) */ + if ((png_ptr->transformations & PNG_INVERT_ALPHA) && + info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + int j; + for (j=0; j<(int)info_ptr->num_trans; j++) + info_ptr->trans[j] = (png_byte)(255 - info_ptr->trans[j]); + } +#endif + png_write_tRNS(png_ptr, info_ptr->trans, &(info_ptr->trans_values), + info_ptr->num_trans, info_ptr->color_type); + } +#endif +#if defined(PNG_WRITE_bKGD_SUPPORTED) + if (info_ptr->valid & PNG_INFO_bKGD) + png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type); +#endif +#if defined(PNG_WRITE_hIST_SUPPORTED) + if (info_ptr->valid & PNG_INFO_hIST) + png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette); +#endif +#if defined(PNG_WRITE_oFFs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_oFFs) + png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset, + info_ptr->offset_unit_type); +#endif +#if defined(PNG_WRITE_pCAL_SUPPORTED) + if (info_ptr->valid & PNG_INFO_pCAL) + png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0, + info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams, + info_ptr->pcal_units, info_ptr->pcal_params); +#endif +#if defined(PNG_WRITE_sCAL_SUPPORTED) + if (info_ptr->valid & PNG_INFO_sCAL) +#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) + png_write_sCAL(png_ptr, (int)info_ptr->scal_unit, + info_ptr->scal_pixel_width, info_ptr->scal_pixel_height); +#else +#ifdef PNG_FIXED_POINT_SUPPORTED + png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit, + info_ptr->scal_s_width, info_ptr->scal_s_height); +#else + png_warning(png_ptr, + "png_write_sCAL not supported; sCAL chunk not written.\n"); +#endif +#endif +#endif +#if defined(PNG_WRITE_pHYs_SUPPORTED) + if (info_ptr->valid & PNG_INFO_pHYs) + png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit, + info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type); +#endif +#if defined(PNG_WRITE_tIME_SUPPORTED) + if (info_ptr->valid & PNG_INFO_tIME) + { + png_write_tIME(png_ptr, &(info_ptr->mod_time)); + png_ptr->mode |= PNG_WROTE_tIME; + } +#endif +#if defined(PNG_WRITE_sPLT_SUPPORTED) + if (info_ptr->valid & PNG_INFO_sPLT) + for (i = 0; i < (int)info_ptr->splt_palettes_num; i++) + png_write_sPLT(png_ptr, info_ptr->splt_palettes + i); +#endif +#if defined(PNG_WRITE_TEXT_SUPPORTED) + /* Check to see if we need to write text chunks */ + for (i = 0; i < info_ptr->num_text; i++) + { + png_debug2(2, "Writing header text chunk %d, type %d\n", i, + info_ptr->text[i].compression); + /* an internationalized chunk? */ + if (info_ptr->text[i].compression > 0) + { +#if defined(PNG_WRITE_iTXt_SUPPORTED) + /* write international chunk */ + png_write_iTXt(png_ptr, + info_ptr->text[i].compression, + info_ptr->text[i].key, + info_ptr->text[i].lang, + info_ptr->text[i].lang_key, + info_ptr->text[i].text); +#else + png_warning(png_ptr, "Unable to write international text\n"); +#endif + /* Mark this chunk as written */ + info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; + } + /* If we want a compressed text chunk */ + else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt) + { +#if defined(PNG_WRITE_zTXt_SUPPORTED) + /* write compressed chunk */ + png_write_zTXt(png_ptr, info_ptr->text[i].key, + info_ptr->text[i].text, 0, + info_ptr->text[i].compression); +#else + png_warning(png_ptr, "Unable to write compressed text\n"); +#endif + /* Mark this chunk as written */ + info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR; + } + else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE) + { +#if defined(PNG_WRITE_tEXt_SUPPORTED) + /* write uncompressed chunk */ + png_write_tEXt(png_ptr, info_ptr->text[i].key, + info_ptr->text[i].text, + 0); +#else + png_warning(png_ptr, "Unable to write uncompressed text\n"); +#endif + /* Mark this chunk as written */ + info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; + } + } +#endif +#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) + if (info_ptr->unknown_chunks_num) + { + png_unknown_chunk *up; + + png_debug(5, "writing extra chunks\n"); + + for (up = info_ptr->unknown_chunks; + up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num; + up++) + { + int keep=png_handle_as_unknown(png_ptr, up->name); + if (keep != PNG_HANDLE_CHUNK_NEVER && + up->location && (up->location & PNG_HAVE_PLTE) && + !(up->location & PNG_HAVE_IDAT) && + ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS || + (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS))) + { + png_write_chunk(png_ptr, up->name, up->data, up->size); + } + } + } +#endif +} + +/* Writes the end of the PNG file. If you don't want to write comments or + * time information, you can pass NULL for info. If you already wrote these + * in png_write_info(), do not write them again here. If you have long + * comments, I suggest writing them here, and compressing them. + */ +void PNGAPI +png_write_end(png_structp png_ptr, png_infop info_ptr) +{ + png_debug(1, "in png_write_end\n"); + if (!(png_ptr->mode & PNG_HAVE_IDAT)) + png_error(png_ptr, "No IDATs written into file"); + + /* see if user wants us to write information chunks */ + if (info_ptr != NULL) + { +#if defined(PNG_WRITE_TEXT_SUPPORTED) + int i; /* local index variable */ +#endif +#if defined(PNG_WRITE_tIME_SUPPORTED) + /* check to see if user has supplied a time chunk */ + if ((info_ptr->valid & PNG_INFO_tIME) && + !(png_ptr->mode & PNG_WROTE_tIME)) + png_write_tIME(png_ptr, &(info_ptr->mod_time)); +#endif +#if defined(PNG_WRITE_TEXT_SUPPORTED) + /* loop through comment chunks */ + for (i = 0; i < info_ptr->num_text; i++) + { + png_debug2(2, "Writing trailer text chunk %d, type %d\n", i, + info_ptr->text[i].compression); + /* an internationalized chunk? */ + if (info_ptr->text[i].compression > 0) + { +#if defined(PNG_WRITE_iTXt_SUPPORTED) + /* write international chunk */ + png_write_iTXt(png_ptr, + info_ptr->text[i].compression, + info_ptr->text[i].key, + info_ptr->text[i].lang, + info_ptr->text[i].lang_key, + info_ptr->text[i].text); +#else + png_warning(png_ptr, "Unable to write international text\n"); +#endif + /* Mark this chunk as written */ + info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; + } + else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt) + { +#if defined(PNG_WRITE_zTXt_SUPPORTED) + /* write compressed chunk */ + png_write_zTXt(png_ptr, info_ptr->text[i].key, + info_ptr->text[i].text, 0, + info_ptr->text[i].compression); +#else + png_warning(png_ptr, "Unable to write compressed text\n"); +#endif + /* Mark this chunk as written */ + info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR; + } + else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE) + { +#if defined(PNG_WRITE_tEXt_SUPPORTED) + /* write uncompressed chunk */ + png_write_tEXt(png_ptr, info_ptr->text[i].key, + info_ptr->text[i].text, 0); +#else + png_warning(png_ptr, "Unable to write uncompressed text\n"); +#endif + + /* Mark this chunk as written */ + info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR; + } + } +#endif +#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) + if (info_ptr->unknown_chunks_num) + { + png_unknown_chunk *up; + + png_debug(5, "writing extra chunks\n"); + + for (up = info_ptr->unknown_chunks; + up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num; + up++) + { + int keep=png_handle_as_unknown(png_ptr, up->name); + if (keep != PNG_HANDLE_CHUNK_NEVER && + up->location && (up->location & PNG_AFTER_IDAT) && + ((up->name[3] & 0x20) || keep == PNG_HANDLE_CHUNK_ALWAYS || + (png_ptr->flags & PNG_FLAG_KEEP_UNSAFE_CHUNKS))) + { + png_write_chunk(png_ptr, up->name, up->data, up->size); + } + } + } +#endif + } + + png_ptr->mode |= PNG_AFTER_IDAT; + + /* write end of PNG file */ + png_write_IEND(png_ptr); +#if 0 +/* This flush, added in libpng-1.0.8, causes some applications to crash + because they do not set png_ptr->output_flush_fn */ + png_flush(png_ptr); +#endif +} + +#if defined(PNG_WRITE_tIME_SUPPORTED) +#if !defined(_WIN32_WCE) +/* "time.h" functions are not supported on WindowsCE */ +void PNGAPI +png_convert_from_struct_tm(png_timep ptime, struct tm FAR * ttime) +{ + png_debug(1, "in png_convert_from_struct_tm\n"); + ptime->year = (png_uint_16)(1900 + ttime->tm_year); + ptime->month = (png_byte)(ttime->tm_mon + 1); + ptime->day = (png_byte)ttime->tm_mday; + ptime->hour = (png_byte)ttime->tm_hour; + ptime->minute = (png_byte)ttime->tm_min; + ptime->second = (png_byte)ttime->tm_sec; +} + +void PNGAPI +png_convert_from_time_t(png_timep ptime, time_t ttime) +{ + struct tm *tbuf; + + png_debug(1, "in png_convert_from_time_t\n"); + tbuf = gmtime(&ttime); + png_convert_from_struct_tm(ptime, tbuf); +} +#endif +#endif + +/* Initialize png_ptr structure, and allocate any memory needed */ +png_structp PNGAPI +png_create_write_struct(png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn) +{ +#ifdef PNG_USER_MEM_SUPPORTED + return (png_create_write_struct_2(user_png_ver, error_ptr, error_fn, + warn_fn, png_voidp_NULL, png_malloc_ptr_NULL, png_free_ptr_NULL)); +} + +/* Alternate initialize png_ptr structure, and allocate any memory needed */ +png_structp PNGAPI +png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn) +{ +#endif /* PNG_USER_MEM_SUPPORTED */ + png_structp png_ptr; +#ifdef PNG_SETJMP_SUPPORTED +#ifdef USE_FAR_KEYWORD + jmp_buf jmpbuf; +#endif +#endif + int i; + png_debug(1, "in png_create_write_struct\n"); +#ifdef PNG_USER_MEM_SUPPORTED + png_ptr = (png_structp)png_create_struct_2(PNG_STRUCT_PNG, + (png_malloc_ptr)malloc_fn, (png_voidp)mem_ptr); +#else + png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); +#endif /* PNG_USER_MEM_SUPPORTED */ + if (png_ptr == NULL) + return (NULL); + +#if !defined(PNG_1_0_X) +#ifdef PNG_ASSEMBLER_CODE_SUPPORTED + png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ +#endif +#endif /* PNG_1_0_X */ + + /* added at libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + png_ptr->user_width_max=PNG_USER_WIDTH_MAX; + png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; +#endif + +#ifdef PNG_SETJMP_SUPPORTED +#ifdef USE_FAR_KEYWORD + if (setjmp(jmpbuf)) +#else + if (setjmp(png_ptr->jmpbuf)) +#endif + { + png_free(png_ptr, png_ptr->zbuf); + png_ptr->zbuf=NULL; + png_destroy_struct(png_ptr); + return (NULL); + } +#ifdef USE_FAR_KEYWORD + png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); +#endif +#endif + +#ifdef PNG_USER_MEM_SUPPORTED + png_set_mem_fn(png_ptr, mem_ptr, malloc_fn, free_fn); +#endif /* PNG_USER_MEM_SUPPORTED */ + png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn); + + i=0; + do + { + if(user_png_ver[i] != png_libpng_ver[i]) + png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; + } while (png_libpng_ver[i++]); + + if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH) + { + /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so + * we must recompile any applications that use any older library version. + * For versions after libpng 1.0, we will be compatible, so we need + * only check the first digit. + */ + if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] || + (user_png_ver[0] == '1' && user_png_ver[2] != png_libpng_ver[2]) || + (user_png_ver[0] == '0' && user_png_ver[2] < '9')) + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char msg[80]; + if (user_png_ver) + { + sprintf(msg, "Application was compiled with png.h from libpng-%.20s", + user_png_ver); + png_warning(png_ptr, msg); + } + sprintf(msg, "Application is running with png.c from libpng-%.20s", + png_libpng_ver); + png_warning(png_ptr, msg); +#endif +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + png_ptr->flags=0; +#endif + png_error(png_ptr, + "Incompatible libpng version in application and library"); + } + } + + /* initialize zbuf - compression buffer */ + png_ptr->zbuf_size = PNG_ZBUF_SIZE; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, + (png_uint_32)png_ptr->zbuf_size); + + png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL, + png_flush_ptr_NULL); + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT, + 1, png_doublep_NULL, png_doublep_NULL); +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* Applications that neglect to set up their own setjmp() and then encounter + a png_error() will longjmp here. Since the jmpbuf is then meaningless we + abort instead of returning. */ +#ifdef USE_FAR_KEYWORD + if (setjmp(jmpbuf)) + PNG_ABORT(); + png_memcpy(png_ptr->jmpbuf,jmpbuf,png_sizeof(jmp_buf)); +#else + if (setjmp(png_ptr->jmpbuf)) + PNG_ABORT(); +#endif +#endif + return (png_ptr); +} + +/* Initialize png_ptr structure, and allocate any memory needed */ +#undef png_write_init +void PNGAPI +png_write_init(png_structp png_ptr) +{ + /* We only come here via pre-1.0.7-compiled applications */ + png_write_init_2(png_ptr, "1.0.6 or earlier", 0, 0); +} + +void PNGAPI +png_write_init_2(png_structp png_ptr, png_const_charp user_png_ver, + png_size_t png_struct_size, png_size_t png_info_size) +{ + /* We only come here via pre-1.0.12-compiled applications */ +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + if(png_sizeof(png_struct) > png_struct_size || + png_sizeof(png_info) > png_info_size) + { + char msg[80]; + png_ptr->warning_fn=NULL; + if (user_png_ver) + { + sprintf(msg, "Application was compiled with png.h from libpng-%.20s", + user_png_ver); + png_warning(png_ptr, msg); + } + sprintf(msg, "Application is running with png.c from libpng-%.20s", + png_libpng_ver); + png_warning(png_ptr, msg); + } +#endif + if(png_sizeof(png_struct) > png_struct_size) + { + png_ptr->error_fn=NULL; +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + png_ptr->flags=0; +#endif + png_error(png_ptr, + "The png struct allocated by the application for writing is too small."); + } + if(png_sizeof(png_info) > png_info_size) + { + png_ptr->error_fn=NULL; +#ifdef PNG_ERROR_NUMBERS_SUPPORTED + png_ptr->flags=0; +#endif + png_error(png_ptr, + "The info struct allocated by the application for writing is too small."); + } + png_write_init_3(&png_ptr, user_png_ver, png_struct_size); +} + + +void PNGAPI +png_write_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver, + png_size_t png_struct_size) +{ + png_structp png_ptr=*ptr_ptr; +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf tmp_jmp; /* to save current jump buffer */ +#endif + int i = 0; + do + { + if (user_png_ver[i] != png_libpng_ver[i]) + { +#ifdef PNG_LEGACY_SUPPORTED + png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH; +#else + png_ptr->warning_fn=NULL; + png_warning(png_ptr, + "Application uses deprecated png_write_init() and should be recompiled."); + break; +#endif + } + } while (png_libpng_ver[i++]); + + png_debug(1, "in png_write_init_3\n"); + +#ifdef PNG_SETJMP_SUPPORTED + /* save jump buffer and error functions */ + png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); +#endif + + if (png_sizeof(png_struct) > png_struct_size) + { + png_destroy_struct(png_ptr); + png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG); + *ptr_ptr = png_ptr; + } + + /* reset all variables to 0 */ + png_memset(png_ptr, 0, png_sizeof (png_struct)); + + /* added at libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED + png_ptr->user_width_max=PNG_USER_WIDTH_MAX; + png_ptr->user_height_max=PNG_USER_HEIGHT_MAX; +#endif + +#if !defined(PNG_1_0_X) +#ifdef PNG_ASSEMBLER_CODE_SUPPORTED + png_init_mmx_flags(png_ptr); /* 1.2.0 addition */ +#endif +#endif /* PNG_1_0_X */ + +#ifdef PNG_SETJMP_SUPPORTED + /* restore jump buffer */ + png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); +#endif + + png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL, + png_flush_ptr_NULL); + + /* initialize zbuf - compression buffer */ + png_ptr->zbuf_size = PNG_ZBUF_SIZE; + png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, + (png_uint_32)png_ptr->zbuf_size); + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT, + 1, png_doublep_NULL, png_doublep_NULL); +#endif +} + +/* Write a few rows of image data. If the image is interlaced, + * either you will have to write the 7 sub images, or, if you + * have called png_set_interlace_handling(), you will have to + * "write" the image seven times. + */ +void PNGAPI +png_write_rows(png_structp png_ptr, png_bytepp row, + png_uint_32 num_rows) +{ + png_uint_32 i; /* row counter */ + png_bytepp rp; /* row pointer */ + + png_debug(1, "in png_write_rows\n"); + /* loop through the rows */ + for (i = 0, rp = row; i < num_rows; i++, rp++) + { + png_write_row(png_ptr, *rp); + } +} + +/* Write the image. You only need to call this function once, even + * if you are writing an interlaced image. + */ +void PNGAPI +png_write_image(png_structp png_ptr, png_bytepp image) +{ + png_uint_32 i; /* row index */ + int pass, num_pass; /* pass variables */ + png_bytepp rp; /* points to current row */ + + png_debug(1, "in png_write_image\n"); +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) + /* intialize interlace handling. If image is not interlaced, + this will set pass to 1 */ + num_pass = png_set_interlace_handling(png_ptr); +#else + num_pass = 1; +#endif + /* loop through passes */ + for (pass = 0; pass < num_pass; pass++) + { + /* loop through image */ + for (i = 0, rp = image; i < png_ptr->height; i++, rp++) + { + png_write_row(png_ptr, *rp); + } + } +} + +/* called by user to write a row of image data */ +void PNGAPI +png_write_row(png_structp png_ptr, png_bytep row) +{ + png_debug2(1, "in png_write_row (row %ld, pass %d)\n", + png_ptr->row_number, png_ptr->pass); + /* initialize transformations and other stuff if first time */ + if (png_ptr->row_number == 0 && png_ptr->pass == 0) + { + /* make sure we wrote the header info */ + if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE)) + png_error(png_ptr, + "png_write_info was never called before png_write_row."); + + /* check for transforms that have been set but were defined out */ +#if !defined(PNG_WRITE_INVERT_SUPPORTED) && defined(PNG_READ_INVERT_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_MONO) + png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined."); +#endif +#if !defined(PNG_WRITE_FILLER_SUPPORTED) && defined(PNG_READ_FILLER_SUPPORTED) + if (png_ptr->transformations & PNG_FILLER) + png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined."); +#endif +#if !defined(PNG_WRITE_PACKSWAP_SUPPORTED) && defined(PNG_READ_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + png_warning(png_ptr, "PNG_WRITE_PACKSWAP_SUPPORTED is not defined."); +#endif +#if !defined(PNG_WRITE_PACK_SUPPORTED) && defined(PNG_READ_PACK_SUPPORTED) + if (png_ptr->transformations & PNG_PACK) + png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined."); +#endif +#if !defined(PNG_WRITE_SHIFT_SUPPORTED) && defined(PNG_READ_SHIFT_SUPPORTED) + if (png_ptr->transformations & PNG_SHIFT) + png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined."); +#endif +#if !defined(PNG_WRITE_BGR_SUPPORTED) && defined(PNG_READ_BGR_SUPPORTED) + if (png_ptr->transformations & PNG_BGR) + png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined."); +#endif +#if !defined(PNG_WRITE_SWAP_SUPPORTED) && defined(PNG_READ_SWAP_SUPPORTED) + if (png_ptr->transformations & PNG_SWAP_BYTES) + png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined."); +#endif + + png_write_start_row(png_ptr); + } + +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) + /* if interlaced and not interested in row, return */ + if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) + { + switch (png_ptr->pass) + { + case 0: + if (png_ptr->row_number & 0x07) + { + png_write_finish_row(png_ptr); + return; + } + break; + case 1: + if ((png_ptr->row_number & 0x07) || png_ptr->width < 5) + { + png_write_finish_row(png_ptr); + return; + } + break; + case 2: + if ((png_ptr->row_number & 0x07) != 4) + { + png_write_finish_row(png_ptr); + return; + } + break; + case 3: + if ((png_ptr->row_number & 0x03) || png_ptr->width < 3) + { + png_write_finish_row(png_ptr); + return; + } + break; + case 4: + if ((png_ptr->row_number & 0x03) != 2) + { + png_write_finish_row(png_ptr); + return; + } + break; + case 5: + if ((png_ptr->row_number & 0x01) || png_ptr->width < 2) + { + png_write_finish_row(png_ptr); + return; + } + break; + case 6: + if (!(png_ptr->row_number & 0x01)) + { + png_write_finish_row(png_ptr); + return; + } + break; + } + } +#endif + + /* set up row info for transformations */ + png_ptr->row_info.color_type = png_ptr->color_type; + png_ptr->row_info.width = png_ptr->usr_width; + png_ptr->row_info.channels = png_ptr->usr_channels; + png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth; + png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth * + png_ptr->row_info.channels); + + png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth, + png_ptr->row_info.width); + + png_debug1(3, "row_info->color_type = %d\n", png_ptr->row_info.color_type); + png_debug1(3, "row_info->width = %lu\n", png_ptr->row_info.width); + png_debug1(3, "row_info->channels = %d\n", png_ptr->row_info.channels); + png_debug1(3, "row_info->bit_depth = %d\n", png_ptr->row_info.bit_depth); + png_debug1(3, "row_info->pixel_depth = %d\n", png_ptr->row_info.pixel_depth); + png_debug1(3, "row_info->rowbytes = %lu\n", png_ptr->row_info.rowbytes); + + /* Copy user's row into buffer, leaving room for filter byte. */ + png_memcpy_check(png_ptr, png_ptr->row_buf + 1, row, + png_ptr->row_info.rowbytes); + +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) + /* handle interlacing */ + if (png_ptr->interlaced && png_ptr->pass < 6 && + (png_ptr->transformations & PNG_INTERLACE)) + { + png_do_write_interlace(&(png_ptr->row_info), + png_ptr->row_buf + 1, png_ptr->pass); + /* this should always get caught above, but still ... */ + if (!(png_ptr->row_info.width)) + { + png_write_finish_row(png_ptr); + return; + } + } +#endif + + /* handle other transformations */ + if (png_ptr->transformations) + png_do_write_transformations(png_ptr); + +#if defined(PNG_MNG_FEATURES_SUPPORTED) + /* Write filter_method 64 (intrapixel differencing) only if + * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and + * 2. Libpng did not write a PNG signature (this filter_method is only + * used in PNG datastreams that are embedded in MNG datastreams) and + * 3. The application called png_permit_mng_features with a mask that + * included PNG_FLAG_MNG_FILTER_64 and + * 4. The filter_method is 64 and + * 5. The color_type is RGB or RGBA + */ + if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && + (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING)) + { + /* Intrapixel differencing */ + png_do_write_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1); + } +#endif + + /* Find a filter if necessary, filter the row and write it out. */ + png_write_find_filter(png_ptr, &(png_ptr->row_info)); + + if (png_ptr->write_row_fn != NULL) + (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass); +} + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) +/* Set the automatic flush interval or 0 to turn flushing off */ +void PNGAPI +png_set_flush(png_structp png_ptr, int nrows) +{ + png_debug(1, "in png_set_flush\n"); + png_ptr->flush_dist = (nrows < 0 ? 0 : nrows); +} + +/* flush the current output buffers now */ +void PNGAPI +png_write_flush(png_structp png_ptr) +{ + int wrote_IDAT; + + png_debug(1, "in png_write_flush\n"); + /* We have already written out all of the data */ + if (png_ptr->row_number >= png_ptr->num_rows) + return; + + do + { + int ret; + + /* compress the data */ + ret = deflate(&png_ptr->zstream, Z_SYNC_FLUSH); + wrote_IDAT = 0; + + /* check for compression errors */ + if (ret != Z_OK) + { + if (png_ptr->zstream.msg != NULL) + png_error(png_ptr, png_ptr->zstream.msg); + else + png_error(png_ptr, "zlib error"); + } + + if (!(png_ptr->zstream.avail_out)) + { + /* write the IDAT and reset the zlib output buffer */ + png_write_IDAT(png_ptr, png_ptr->zbuf, + png_ptr->zbuf_size); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + wrote_IDAT = 1; + } + } while(wrote_IDAT == 1); + + /* If there is any data left to be output, write it into a new IDAT */ + if (png_ptr->zbuf_size != png_ptr->zstream.avail_out) + { + /* write the IDAT and reset the zlib output buffer */ + png_write_IDAT(png_ptr, png_ptr->zbuf, + png_ptr->zbuf_size - png_ptr->zstream.avail_out); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + } + png_ptr->flush_rows = 0; + png_flush(png_ptr); +} +#endif /* PNG_WRITE_FLUSH_SUPPORTED */ + +/* free all memory used by the write */ +void PNGAPI +png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr) +{ + png_structp png_ptr = NULL; + png_infop info_ptr = NULL; +#ifdef PNG_USER_MEM_SUPPORTED + png_free_ptr free_fn = NULL; + png_voidp mem_ptr = NULL; +#endif + + png_debug(1, "in png_destroy_write_struct\n"); + if (png_ptr_ptr != NULL) + { + png_ptr = *png_ptr_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + free_fn = png_ptr->free_fn; + mem_ptr = png_ptr->mem_ptr; +#endif + } + + if (info_ptr_ptr != NULL) + info_ptr = *info_ptr_ptr; + + if (info_ptr != NULL) + { + png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); + +#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) + if (png_ptr->num_chunk_list) + { + png_free(png_ptr, png_ptr->chunk_list); + png_ptr->chunk_list=NULL; + png_ptr->num_chunk_list=0; + } +#endif + +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)info_ptr, (png_free_ptr)free_fn, + (png_voidp)mem_ptr); +#else + png_destroy_struct((png_voidp)info_ptr); +#endif + *info_ptr_ptr = NULL; + } + + if (png_ptr != NULL) + { + png_write_destroy(png_ptr); +#ifdef PNG_USER_MEM_SUPPORTED + png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn, + (png_voidp)mem_ptr); +#else + png_destroy_struct((png_voidp)png_ptr); +#endif + *png_ptr_ptr = NULL; + } +} + + +/* Free any memory used in png_ptr struct (old method) */ +void /* PRIVATE */ +png_write_destroy(png_structp png_ptr) +{ +#ifdef PNG_SETJMP_SUPPORTED + jmp_buf tmp_jmp; /* save jump buffer */ +#endif + png_error_ptr error_fn; + png_error_ptr warning_fn; + png_voidp error_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + png_free_ptr free_fn; +#endif + + png_debug(1, "in png_write_destroy\n"); + /* free any memory zlib uses */ + deflateEnd(&png_ptr->zstream); + + /* free our memory. png_free checks NULL for us. */ + png_free(png_ptr, png_ptr->zbuf); + png_free(png_ptr, png_ptr->row_buf); + png_free(png_ptr, png_ptr->prev_row); + png_free(png_ptr, png_ptr->sub_row); + png_free(png_ptr, png_ptr->up_row); + png_free(png_ptr, png_ptr->avg_row); + png_free(png_ptr, png_ptr->paeth_row); + +#if defined(PNG_TIME_RFC1123_SUPPORTED) + png_free(png_ptr, png_ptr->time_buffer); +#endif + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + png_free(png_ptr, png_ptr->prev_filters); + png_free(png_ptr, png_ptr->filter_weights); + png_free(png_ptr, png_ptr->inv_filter_weights); + png_free(png_ptr, png_ptr->filter_costs); + png_free(png_ptr, png_ptr->inv_filter_costs); +#endif + +#ifdef PNG_SETJMP_SUPPORTED + /* reset structure */ + png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof (jmp_buf)); +#endif + + error_fn = png_ptr->error_fn; + warning_fn = png_ptr->warning_fn; + error_ptr = png_ptr->error_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + free_fn = png_ptr->free_fn; +#endif + + png_memset(png_ptr, 0, png_sizeof (png_struct)); + + png_ptr->error_fn = error_fn; + png_ptr->warning_fn = warning_fn; + png_ptr->error_ptr = error_ptr; +#ifdef PNG_USER_MEM_SUPPORTED + png_ptr->free_fn = free_fn; +#endif + +#ifdef PNG_SETJMP_SUPPORTED + png_memcpy(png_ptr->jmpbuf, tmp_jmp, png_sizeof (jmp_buf)); +#endif +} + +/* Allow the application to select one or more row filters to use. */ +void PNGAPI +png_set_filter(png_structp png_ptr, int method, int filters) +{ + png_debug(1, "in png_set_filter\n"); +#if defined(PNG_MNG_FEATURES_SUPPORTED) + if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && + (method == PNG_INTRAPIXEL_DIFFERENCING)) + method = PNG_FILTER_TYPE_BASE; +#endif + if (method == PNG_FILTER_TYPE_BASE) + { + switch (filters & (PNG_ALL_FILTERS | 0x07)) + { + case 5: + case 6: + case 7: png_warning(png_ptr, "Unknown row filter for method 0"); + case PNG_FILTER_VALUE_NONE: png_ptr->do_filter=PNG_FILTER_NONE; break; + case PNG_FILTER_VALUE_SUB: png_ptr->do_filter=PNG_FILTER_SUB; break; + case PNG_FILTER_VALUE_UP: png_ptr->do_filter=PNG_FILTER_UP; break; + case PNG_FILTER_VALUE_AVG: png_ptr->do_filter=PNG_FILTER_AVG; break; + case PNG_FILTER_VALUE_PAETH: png_ptr->do_filter=PNG_FILTER_PAETH;break; + default: png_ptr->do_filter = (png_byte)filters; break; + } + + /* If we have allocated the row_buf, this means we have already started + * with the image and we should have allocated all of the filter buffers + * that have been selected. If prev_row isn't already allocated, then + * it is too late to start using the filters that need it, since we + * will be missing the data in the previous row. If an application + * wants to start and stop using particular filters during compression, + * it should start out with all of the filters, and then add and + * remove them after the start of compression. + */ + if (png_ptr->row_buf != NULL) + { + if ((png_ptr->do_filter & PNG_FILTER_SUB) && png_ptr->sub_row == NULL) + { + png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB; + } + + if ((png_ptr->do_filter & PNG_FILTER_UP) && png_ptr->up_row == NULL) + { + if (png_ptr->prev_row == NULL) + { + png_warning(png_ptr, "Can't add Up filter after starting"); + png_ptr->do_filter &= ~PNG_FILTER_UP; + } + else + { + png_ptr->up_row = (png_bytep)png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->up_row[0] = PNG_FILTER_VALUE_UP; + } + } + + if ((png_ptr->do_filter & PNG_FILTER_AVG) && png_ptr->avg_row == NULL) + { + if (png_ptr->prev_row == NULL) + { + png_warning(png_ptr, "Can't add Average filter after starting"); + png_ptr->do_filter &= ~PNG_FILTER_AVG; + } + else + { + png_ptr->avg_row = (png_bytep)png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG; + } + } + + if ((png_ptr->do_filter & PNG_FILTER_PAETH) && + png_ptr->paeth_row == NULL) + { + if (png_ptr->prev_row == NULL) + { + png_warning(png_ptr, "Can't add Paeth filter after starting"); + png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH); + } + else + { + png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH; + } + } + + if (png_ptr->do_filter == PNG_NO_FILTERS) + png_ptr->do_filter = PNG_FILTER_NONE; + } + } + else + png_error(png_ptr, "Unknown custom filter method"); +} + +/* This allows us to influence the way in which libpng chooses the "best" + * filter for the current scanline. While the "minimum-sum-of-absolute- + * differences metric is relatively fast and effective, there is some + * question as to whether it can be improved upon by trying to keep the + * filtered data going to zlib more consistent, hopefully resulting in + * better compression. + */ +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* GRR 970116 */ +void PNGAPI +png_set_filter_heuristics(png_structp png_ptr, int heuristic_method, + int num_weights, png_doublep filter_weights, + png_doublep filter_costs) +{ + int i; + + png_debug(1, "in png_set_filter_heuristics\n"); + if (heuristic_method >= PNG_FILTER_HEURISTIC_LAST) + { + png_warning(png_ptr, "Unknown filter heuristic method"); + return; + } + + if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT) + { + heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED; + } + + if (num_weights < 0 || filter_weights == NULL || + heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED) + { + num_weights = 0; + } + + png_ptr->num_prev_filters = (png_byte)num_weights; + png_ptr->heuristic_method = (png_byte)heuristic_method; + + if (num_weights > 0) + { + if (png_ptr->prev_filters == NULL) + { + png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr, + (png_uint_32)(png_sizeof(png_byte) * num_weights)); + + /* To make sure that the weighting starts out fairly */ + for (i = 0; i < num_weights; i++) + { + png_ptr->prev_filters[i] = 255; + } + } + + if (png_ptr->filter_weights == NULL) + { + png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(png_sizeof(png_uint_16) * num_weights)); + + png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(png_sizeof(png_uint_16) * num_weights)); + for (i = 0; i < num_weights; i++) + { + png_ptr->inv_filter_weights[i] = + png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR; + } + } + + for (i = 0; i < num_weights; i++) + { + if (filter_weights[i] < 0.0) + { + png_ptr->inv_filter_weights[i] = + png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR; + } + else + { + png_ptr->inv_filter_weights[i] = + (png_uint_16)((double)PNG_WEIGHT_FACTOR*filter_weights[i]+0.5); + png_ptr->filter_weights[i] = + (png_uint_16)((double)PNG_WEIGHT_FACTOR/filter_weights[i]+0.5); + } + } + } + + /* If, in the future, there are other filter methods, this would + * need to be based on png_ptr->filter. + */ + if (png_ptr->filter_costs == NULL) + { + png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST)); + + png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr, + (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST)); + + for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) + { + png_ptr->inv_filter_costs[i] = + png_ptr->filter_costs[i] = PNG_COST_FACTOR; + } + } + + /* Here is where we set the relative costs of the different filters. We + * should take the desired compression level into account when setting + * the costs, so that Paeth, for instance, has a high relative cost at low + * compression levels, while it has a lower relative cost at higher + * compression settings. The filter types are in order of increasing + * relative cost, so it would be possible to do this with an algorithm. + */ + for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) + { + if (filter_costs == NULL || filter_costs[i] < 0.0) + { + png_ptr->inv_filter_costs[i] = + png_ptr->filter_costs[i] = PNG_COST_FACTOR; + } + else if (filter_costs[i] >= 1.0) + { + png_ptr->inv_filter_costs[i] = + (png_uint_16)((double)PNG_COST_FACTOR / filter_costs[i] + 0.5); + png_ptr->filter_costs[i] = + (png_uint_16)((double)PNG_COST_FACTOR * filter_costs[i] + 0.5); + } + } +} +#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ + +void PNGAPI +png_set_compression_level(png_structp png_ptr, int level) +{ + png_debug(1, "in png_set_compression_level\n"); + png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_LEVEL; + png_ptr->zlib_level = level; +} + +void PNGAPI +png_set_compression_mem_level(png_structp png_ptr, int mem_level) +{ + png_debug(1, "in png_set_compression_mem_level\n"); + png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL; + png_ptr->zlib_mem_level = mem_level; +} + +void PNGAPI +png_set_compression_strategy(png_structp png_ptr, int strategy) +{ + png_debug(1, "in png_set_compression_strategy\n"); + png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY; + png_ptr->zlib_strategy = strategy; +} + +void PNGAPI +png_set_compression_window_bits(png_structp png_ptr, int window_bits) +{ + if (window_bits > 15) + png_warning(png_ptr, "Only compression windows <= 32k supported by PNG"); + else if (window_bits < 8) + png_warning(png_ptr, "Only compression windows >= 256 supported by PNG"); +#ifndef WBITS_8_OK + /* avoid libpng bug with 256-byte windows */ + if (window_bits == 8) + { + png_warning(png_ptr, "Compression window is being reset to 512"); + window_bits=9; + } +#endif + png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS; + png_ptr->zlib_window_bits = window_bits; +} + +void PNGAPI +png_set_compression_method(png_structp png_ptr, int method) +{ + png_debug(1, "in png_set_compression_method\n"); + if (method != 8) + png_warning(png_ptr, "Only compression method 8 is supported by PNG"); + png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_METHOD; + png_ptr->zlib_method = method; +} + +void PNGAPI +png_set_write_status_fn(png_structp png_ptr, png_write_status_ptr write_row_fn) +{ + png_ptr->write_row_fn = write_row_fn; +} + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +void PNGAPI +png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr + write_user_transform_fn) +{ + png_debug(1, "in png_set_write_user_transform_fn\n"); + png_ptr->transformations |= PNG_USER_TRANSFORM; + png_ptr->write_user_transform_fn = write_user_transform_fn; +} +#endif + + +#if defined(PNG_INFO_IMAGE_SUPPORTED) +void PNGAPI +png_write_png(png_structp png_ptr, png_infop info_ptr, + int transforms, voidp params) +{ +#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) + /* invert the alpha channel from opacity to transparency */ + if (transforms & PNG_TRANSFORM_INVERT_ALPHA) + png_set_invert_alpha(png_ptr); +#endif + + /* Write the file header information. */ + png_write_info(png_ptr, info_ptr); + + /* ------ these transformations don't touch the info structure ------- */ + +#if defined(PNG_WRITE_INVERT_SUPPORTED) + /* invert monochrome pixels */ + if (transforms & PNG_TRANSFORM_INVERT_MONO) + png_set_invert_mono(png_ptr); +#endif + +#if defined(PNG_WRITE_SHIFT_SUPPORTED) + /* Shift the pixels up to a legal bit depth and fill in + * as appropriate to correctly scale the image. + */ + if ((transforms & PNG_TRANSFORM_SHIFT) + && (info_ptr->valid & PNG_INFO_sBIT)) + png_set_shift(png_ptr, &info_ptr->sig_bit); +#endif + +#if defined(PNG_WRITE_PACK_SUPPORTED) + /* pack pixels into bytes */ + if (transforms & PNG_TRANSFORM_PACKING) + png_set_packing(png_ptr); +#endif + +#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) + /* swap location of alpha bytes from ARGB to RGBA */ + if (transforms & PNG_TRANSFORM_SWAP_ALPHA) + png_set_swap_alpha(png_ptr); +#endif + +#if defined(PNG_WRITE_FILLER_SUPPORTED) + /* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into + * RGB (4 channels -> 3 channels). The second parameter is not used. + */ + if (transforms & PNG_TRANSFORM_STRIP_FILLER) + png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); +#endif + +#if defined(PNG_WRITE_BGR_SUPPORTED) + /* flip BGR pixels to RGB */ + if (transforms & PNG_TRANSFORM_BGR) + png_set_bgr(png_ptr); +#endif + +#if defined(PNG_WRITE_SWAP_SUPPORTED) + /* swap bytes of 16-bit files to most significant byte first */ + if (transforms & PNG_TRANSFORM_SWAP_ENDIAN) + png_set_swap(png_ptr); +#endif + +#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) + /* swap bits of 1, 2, 4 bit packed pixel formats */ + if (transforms & PNG_TRANSFORM_PACKSWAP) + png_set_packswap(png_ptr); +#endif + + /* ----------------------- end of transformations ------------------- */ + + /* write the bits */ + if (info_ptr->valid & PNG_INFO_IDAT) + png_write_image(png_ptr, info_ptr->row_pointers); + + /* It is REQUIRED to call this to finish writing the rest of the file */ + png_write_end(png_ptr, info_ptr); + + if(transforms == 0 || params == NULL) + /* quiet compiler warnings */ return; +} +#endif +#endif /* PNG_WRITE_SUPPORTED */ diff --git a/libpng/pngwtran.c b/libpng/pngwtran.c new file mode 100644 index 0000000..f1c8b3e --- /dev/null +++ b/libpng/pngwtran.c @@ -0,0 +1,563 @@ + +/* pngwtran.c - transforms the data in a row for PNG writers + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +#define PNG_INTERNAL +#include "png.h" +#ifdef PNG_WRITE_SUPPORTED + +/* Transform the data according to the user's wishes. The order of + * transformations is significant. + */ +void /* PRIVATE */ +png_do_write_transformations(png_structp png_ptr) +{ + png_debug(1, "in png_do_write_transformations\n"); + + if (png_ptr == NULL) + return; + +#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) + if (png_ptr->transformations & PNG_USER_TRANSFORM) + if(png_ptr->write_user_transform_fn != NULL) + (*(png_ptr->write_user_transform_fn)) /* user write transform function */ + (png_ptr, /* png_ptr */ + &(png_ptr->row_info), /* row_info: */ + /* png_uint_32 width; width of row */ + /* png_uint_32 rowbytes; number of bytes in row */ + /* png_byte color_type; color type of pixels */ + /* png_byte bit_depth; bit depth of samples */ + /* png_byte channels; number of channels (1-4) */ + /* png_byte pixel_depth; bits per pixel (depth*channels) */ + png_ptr->row_buf + 1); /* start of pixel data for row */ +#endif +#if defined(PNG_WRITE_FILLER_SUPPORTED) + if (png_ptr->transformations & PNG_FILLER) + png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1, + png_ptr->flags); +#endif +#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) + if (png_ptr->transformations & PNG_PACKSWAP) + png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif +#if defined(PNG_WRITE_PACK_SUPPORTED) + if (png_ptr->transformations & PNG_PACK) + png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1, + (png_uint_32)png_ptr->bit_depth); +#endif +#if defined(PNG_WRITE_SWAP_SUPPORTED) + if (png_ptr->transformations & PNG_SWAP_BYTES) + png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif +#if defined(PNG_WRITE_SHIFT_SUPPORTED) + if (png_ptr->transformations & PNG_SHIFT) + png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1, + &(png_ptr->shift)); +#endif +#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_ALPHA) + png_do_write_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif +#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) + if (png_ptr->transformations & PNG_SWAP_ALPHA) + png_do_write_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif +#if defined(PNG_WRITE_BGR_SUPPORTED) + if (png_ptr->transformations & PNG_BGR) + png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif +#if defined(PNG_WRITE_INVERT_SUPPORTED) + if (png_ptr->transformations & PNG_INVERT_MONO) + png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1); +#endif +} + +#if defined(PNG_WRITE_PACK_SUPPORTED) +/* Pack pixels into bytes. Pass the true bit depth in bit_depth. The + * row_info bit depth should be 8 (one pixel per byte). The channels + * should be 1 (this only happens on grayscale and paletted images). + */ +void /* PRIVATE */ +png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth) +{ + png_debug(1, "in png_do_pack\n"); + if (row_info->bit_depth == 8 && +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + row_info->channels == 1) + { + switch ((int)bit_depth) + { + case 1: + { + png_bytep sp, dp; + int mask, v; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + sp = row; + dp = row; + mask = 0x80; + v = 0; + + for (i = 0; i < row_width; i++) + { + if (*sp != 0) + v |= mask; + sp++; + if (mask > 1) + mask >>= 1; + else + { + mask = 0x80; + *dp = (png_byte)v; + dp++; + v = 0; + } + } + if (mask != 0x80) + *dp = (png_byte)v; + break; + } + case 2: + { + png_bytep sp, dp; + int shift, v; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + sp = row; + dp = row; + shift = 6; + v = 0; + for (i = 0; i < row_width; i++) + { + png_byte value; + + value = (png_byte)(*sp & 0x03); + v |= (value << shift); + if (shift == 0) + { + shift = 6; + *dp = (png_byte)v; + dp++; + v = 0; + } + else + shift -= 2; + sp++; + } + if (shift != 6) + *dp = (png_byte)v; + break; + } + case 4: + { + png_bytep sp, dp; + int shift, v; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + sp = row; + dp = row; + shift = 4; + v = 0; + for (i = 0; i < row_width; i++) + { + png_byte value; + + value = (png_byte)(*sp & 0x0f); + v |= (value << shift); + + if (shift == 0) + { + shift = 4; + *dp = (png_byte)v; + dp++; + v = 0; + } + else + shift -= 4; + + sp++; + } + if (shift != 4) + *dp = (png_byte)v; + break; + } + } + row_info->bit_depth = (png_byte)bit_depth; + row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels); + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, + row_info->width); + } +} +#endif + +#if defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Shift pixel values to take advantage of whole range. Pass the + * true number of bits in bit_depth. The row should be packed + * according to row_info->bit_depth. Thus, if you had a row of + * bit depth 4, but the pixels only had values from 0 to 7, you + * would pass 3 as bit_depth, and this routine would translate the + * data to 0 to 15. + */ +void /* PRIVATE */ +png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth) +{ + png_debug(1, "in png_do_shift\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL && +#else + if ( +#endif + row_info->color_type != PNG_COLOR_TYPE_PALETTE) + { + int shift_start[4], shift_dec[4]; + int channels = 0; + + if (row_info->color_type & PNG_COLOR_MASK_COLOR) + { + shift_start[channels] = row_info->bit_depth - bit_depth->red; + shift_dec[channels] = bit_depth->red; + channels++; + shift_start[channels] = row_info->bit_depth - bit_depth->green; + shift_dec[channels] = bit_depth->green; + channels++; + shift_start[channels] = row_info->bit_depth - bit_depth->blue; + shift_dec[channels] = bit_depth->blue; + channels++; + } + else + { + shift_start[channels] = row_info->bit_depth - bit_depth->gray; + shift_dec[channels] = bit_depth->gray; + channels++; + } + if (row_info->color_type & PNG_COLOR_MASK_ALPHA) + { + shift_start[channels] = row_info->bit_depth - bit_depth->alpha; + shift_dec[channels] = bit_depth->alpha; + channels++; + } + + /* with low row depths, could only be grayscale, so one channel */ + if (row_info->bit_depth < 8) + { + png_bytep bp = row; + png_uint_32 i; + png_byte mask; + png_uint_32 row_bytes = row_info->rowbytes; + + if (bit_depth->gray == 1 && row_info->bit_depth == 2) + mask = 0x55; + else if (row_info->bit_depth == 4 && bit_depth->gray == 3) + mask = 0x11; + else + mask = 0xff; + + for (i = 0; i < row_bytes; i++, bp++) + { + png_uint_16 v; + int j; + + v = *bp; + *bp = 0; + for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0]) + { + if (j > 0) + *bp |= (png_byte)((v << j) & 0xff); + else + *bp |= (png_byte)((v >> (-j)) & mask); + } + } + } + else if (row_info->bit_depth == 8) + { + png_bytep bp = row; + png_uint_32 i; + png_uint_32 istop = channels * row_info->width; + + for (i = 0; i < istop; i++, bp++) + { + + png_uint_16 v; + int j; + int c = (int)(i%channels); + + v = *bp; + *bp = 0; + for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c]) + { + if (j > 0) + *bp |= (png_byte)((v << j) & 0xff); + else + *bp |= (png_byte)((v >> (-j)) & 0xff); + } + } + } + else + { + png_bytep bp; + png_uint_32 i; + png_uint_32 istop = channels * row_info->width; + + for (bp = row, i = 0; i < istop; i++) + { + int c = (int)(i%channels); + png_uint_16 value, v; + int j; + + v = (png_uint_16)(((png_uint_16)(*bp) << 8) + *(bp + 1)); + value = 0; + for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c]) + { + if (j > 0) + value |= (png_uint_16)((v << j) & (png_uint_16)0xffff); + else + value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff); + } + *bp++ = (png_byte)(value >> 8); + *bp++ = (png_byte)(value & 0xff); + } + } + } +} +#endif + +#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +void /* PRIVATE */ +png_do_write_swap_alpha(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_write_swap_alpha\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + /* This converts from ARGB to RGBA */ + if (row_info->bit_depth == 8) + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + for (i = 0, sp = dp = row; i < row_width; i++) + { + png_byte save = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = save; + } + } + /* This converts from AARRGGBB to RRGGBBAA */ + else + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + for (i = 0, sp = dp = row; i < row_width; i++) + { + png_byte save[2]; + save[0] = *(sp++); + save[1] = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = save[0]; + *(dp++) = save[1]; + } + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + /* This converts from AG to GA */ + if (row_info->bit_depth == 8) + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + for (i = 0, sp = dp = row; i < row_width; i++) + { + png_byte save = *(sp++); + *(dp++) = *(sp++); + *(dp++) = save; + } + } + /* This converts from AAGG to GGAA */ + else + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + for (i = 0, sp = dp = row; i < row_width; i++) + { + png_byte save[2]; + save[0] = *(sp++); + save[1] = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = save[0]; + *(dp++) = save[1]; + } + } + } + } +} +#endif + +#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +void /* PRIVATE */ +png_do_write_invert_alpha(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_write_invert_alpha\n"); +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL) +#endif + { + if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + { + /* This inverts the alpha channel in RGBA */ + if (row_info->bit_depth == 8) + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + for (i = 0, sp = dp = row; i < row_width; i++) + { + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = (png_byte)(255 - *(sp++)); + } + } + /* This inverts the alpha channel in RRGGBBAA */ + else + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + for (i = 0, sp = dp = row; i < row_width; i++) + { + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = (png_byte)(255 - *(sp++)); + *(dp++) = (png_byte)(255 - *(sp++)); + } + } + } + else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + { + /* This inverts the alpha channel in GA */ + if (row_info->bit_depth == 8) + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + for (i = 0, sp = dp = row; i < row_width; i++) + { + *(dp++) = *(sp++); + *(dp++) = (png_byte)(255 - *(sp++)); + } + } + /* This inverts the alpha channel in GGAA */ + else + { + png_bytep sp, dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + for (i = 0, sp = dp = row; i < row_width; i++) + { + *(dp++) = *(sp++); + *(dp++) = *(sp++); + *(dp++) = (png_byte)(255 - *(sp++)); + *(dp++) = (png_byte)(255 - *(sp++)); + } + } + } + } +} +#endif + +#if defined(PNG_MNG_FEATURES_SUPPORTED) +/* undoes intrapixel differencing */ +void /* PRIVATE */ +png_do_write_intrapixel(png_row_infop row_info, png_bytep row) +{ + png_debug(1, "in png_do_write_intrapixel\n"); + if ( +#if defined(PNG_USELESS_TESTS_SUPPORTED) + row != NULL && row_info != NULL && +#endif + (row_info->color_type & PNG_COLOR_MASK_COLOR)) + { + int bytes_per_pixel; + png_uint_32 row_width = row_info->width; + if (row_info->bit_depth == 8) + { + png_bytep rp; + png_uint_32 i; + + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + bytes_per_pixel = 3; + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + bytes_per_pixel = 4; + else + return; + + for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) + { + *(rp) = (png_byte)((*rp - *(rp+1))&0xff); + *(rp+2) = (png_byte)((*(rp+2) - *(rp+1))&0xff); + } + } + else if (row_info->bit_depth == 16) + { + png_bytep rp; + png_uint_32 i; + + if (row_info->color_type == PNG_COLOR_TYPE_RGB) + bytes_per_pixel = 6; + else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) + bytes_per_pixel = 8; + else + return; + + for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel) + { + png_uint_32 s0 = (*(rp ) << 8) | *(rp+1); + png_uint_32 s1 = (*(rp+2) << 8) | *(rp+3); + png_uint_32 s2 = (*(rp+4) << 8) | *(rp+5); + png_uint_32 red = (png_uint_32)((s0-s1) & 0xffffL); + png_uint_32 blue = (png_uint_32)((s2-s1) & 0xffffL); + *(rp ) = (png_byte)((red >> 8) & 0xff); + *(rp+1) = (png_byte)(red & 0xff); + *(rp+4) = (png_byte)((blue >> 8) & 0xff); + *(rp+5) = (png_byte)(blue & 0xff); + } + } + } +} +#endif /* PNG_MNG_FEATURES_SUPPORTED */ +#endif /* PNG_WRITE_SUPPORTED */ diff --git a/libpng/pngwutil.c b/libpng/pngwutil.c new file mode 100644 index 0000000..05468c4 --- /dev/null +++ b/libpng/pngwutil.c @@ -0,0 +1,2730 @@ + +/* pngwutil.c - utilities to write a PNG file + * + * libpng version 1.2.8 - December 3, 2004 + * For conditions of distribution and use, see copyright notice in png.h + * Copyright (c) 1998-2004 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + */ + +#define PNG_INTERNAL +#include "png.h" +#ifdef PNG_WRITE_SUPPORTED + +/* Place a 32-bit number into a buffer in PNG byte order. We work + * with unsigned numbers for convenience, although one supported + * ancillary chunk uses signed (two's complement) numbers. + */ +void /* PRIVATE */ +png_save_uint_32(png_bytep buf, png_uint_32 i) +{ + buf[0] = (png_byte)((i >> 24) & 0xff); + buf[1] = (png_byte)((i >> 16) & 0xff); + buf[2] = (png_byte)((i >> 8) & 0xff); + buf[3] = (png_byte)(i & 0xff); +} + +#if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED) +/* The png_save_int_32 function assumes integers are stored in two's + * complement format. If this isn't the case, then this routine needs to + * be modified to write data in two's complement format. + */ +void /* PRIVATE */ +png_save_int_32(png_bytep buf, png_int_32 i) +{ + buf[0] = (png_byte)((i >> 24) & 0xff); + buf[1] = (png_byte)((i >> 16) & 0xff); + buf[2] = (png_byte)((i >> 8) & 0xff); + buf[3] = (png_byte)(i & 0xff); +} +#endif + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +void /* PRIVATE */ +png_save_uint_16(png_bytep buf, unsigned int i) +{ + buf[0] = (png_byte)((i >> 8) & 0xff); + buf[1] = (png_byte)(i & 0xff); +} + +/* Write a PNG chunk all at once. The type is an array of ASCII characters + * representing the chunk name. The array must be at least 4 bytes in + * length, and does not need to be null terminated. To be safe, pass the + * pre-defined chunk names here, and if you need a new one, define it + * where the others are defined. The length is the length of the data. + * All the data must be present. If that is not possible, use the + * png_write_chunk_start(), png_write_chunk_data(), and png_write_chunk_end() + * functions instead. + */ +void PNGAPI +png_write_chunk(png_structp png_ptr, png_bytep chunk_name, + png_bytep data, png_size_t length) +{ + png_write_chunk_start(png_ptr, chunk_name, (png_uint_32)length); + png_write_chunk_data(png_ptr, data, length); + png_write_chunk_end(png_ptr); +} + +/* Write the start of a PNG chunk. The type is the chunk type. + * The total_length is the sum of the lengths of all the data you will be + * passing in png_write_chunk_data(). + */ +void PNGAPI +png_write_chunk_start(png_structp png_ptr, png_bytep chunk_name, + png_uint_32 length) +{ + png_byte buf[4]; + png_debug2(0, "Writing %s chunk (%lu bytes)\n", chunk_name, length); + + /* write the length */ + png_save_uint_32(buf, length); + png_write_data(png_ptr, buf, (png_size_t)4); + + /* write the chunk name */ + png_write_data(png_ptr, chunk_name, (png_size_t)4); + /* reset the crc and run it over the chunk name */ + png_reset_crc(png_ptr); + png_calculate_crc(png_ptr, chunk_name, (png_size_t)4); +} + +/* Write the data of a PNG chunk started with png_write_chunk_start(). + * Note that multiple calls to this function are allowed, and that the + * sum of the lengths from these calls *must* add up to the total_length + * given to png_write_chunk_start(). + */ +void PNGAPI +png_write_chunk_data(png_structp png_ptr, png_bytep data, png_size_t length) +{ + /* write the data, and run the CRC over it */ + if (data != NULL && length > 0) + { + png_calculate_crc(png_ptr, data, length); + png_write_data(png_ptr, data, length); + } +} + +/* Finish a chunk started with png_write_chunk_start(). */ +void PNGAPI +png_write_chunk_end(png_structp png_ptr) +{ + png_byte buf[4]; + + /* write the crc */ + png_save_uint_32(buf, png_ptr->crc); + + png_write_data(png_ptr, buf, (png_size_t)4); +} + +/* Simple function to write the signature. If we have already written + * the magic bytes of the signature, or more likely, the PNG stream is + * being embedded into another stream and doesn't need its own signature, + * we should call png_set_sig_bytes() to tell libpng how many of the + * bytes have already been written. + */ +void /* PRIVATE */ +png_write_sig(png_structp png_ptr) +{ + png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10}; + /* write the rest of the 8 byte signature */ + png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes], + (png_size_t)8 - png_ptr->sig_bytes); + if(png_ptr->sig_bytes < 3) + png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE; +} + +#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_iCCP_SUPPORTED) +/* + * This pair of functions encapsulates the operation of (a) compressing a + * text string, and (b) issuing it later as a series of chunk data writes. + * The compression_state structure is shared context for these functions + * set up by the caller in order to make the whole mess thread-safe. + */ + +typedef struct +{ + char *input; /* the uncompressed input data */ + int input_len; /* its length */ + int num_output_ptr; /* number of output pointers used */ + int max_output_ptr; /* size of output_ptr */ + png_charpp output_ptr; /* array of pointers to output */ +} compression_state; + +/* compress given text into storage in the png_ptr structure */ +static int /* PRIVATE */ +png_text_compress(png_structp png_ptr, + png_charp text, png_size_t text_len, int compression, + compression_state *comp) +{ + int ret; + + comp->num_output_ptr = comp->max_output_ptr = 0; + comp->output_ptr = NULL; + comp->input = NULL; + + /* we may just want to pass the text right through */ + if (compression == PNG_TEXT_COMPRESSION_NONE) + { + comp->input = text; + comp->input_len = text_len; + return((int)text_len); + } + + if (compression >= PNG_TEXT_COMPRESSION_LAST) + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char msg[50]; + sprintf(msg, "Unknown compression type %d", compression); + png_warning(png_ptr, msg); +#else + png_warning(png_ptr, "Unknown compression type"); +#endif + } + + /* We can't write the chunk until we find out how much data we have, + * which means we need to run the compressor first and save the + * output. This shouldn't be a problem, as the vast majority of + * comments should be reasonable, but we will set up an array of + * malloc'd pointers to be sure. + * + * If we knew the application was well behaved, we could simplify this + * greatly by assuming we can always malloc an output buffer large + * enough to hold the compressed text ((1001 * text_len / 1000) + 12) + * and malloc this directly. The only time this would be a bad idea is + * if we can't malloc more than 64K and we have 64K of random input + * data, or if the input string is incredibly large (although this + * wouldn't cause a failure, just a slowdown due to swapping). + */ + + /* set up the compression buffers */ + png_ptr->zstream.avail_in = (uInt)text_len; + png_ptr->zstream.next_in = (Bytef *)text; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + png_ptr->zstream.next_out = (Bytef *)png_ptr->zbuf; + + /* this is the same compression loop as in png_write_row() */ + do + { + /* compress the data */ + ret = deflate(&png_ptr->zstream, Z_NO_FLUSH); + if (ret != Z_OK) + { + /* error */ + if (png_ptr->zstream.msg != NULL) + png_error(png_ptr, png_ptr->zstream.msg); + else + png_error(png_ptr, "zlib error"); + } + /* check to see if we need more room */ + if (!(png_ptr->zstream.avail_out)) + { + /* make sure the output array has room */ + if (comp->num_output_ptr >= comp->max_output_ptr) + { + int old_max; + + old_max = comp->max_output_ptr; + comp->max_output_ptr = comp->num_output_ptr + 4; + if (comp->output_ptr != NULL) + { + png_charpp old_ptr; + + old_ptr = comp->output_ptr; + comp->output_ptr = (png_charpp)png_malloc(png_ptr, + (png_uint_32)(comp->max_output_ptr * + png_sizeof (png_charpp))); + png_memcpy(comp->output_ptr, old_ptr, old_max + * png_sizeof (png_charp)); + png_free(png_ptr, old_ptr); + } + else + comp->output_ptr = (png_charpp)png_malloc(png_ptr, + (png_uint_32)(comp->max_output_ptr * + png_sizeof (png_charp))); + } + + /* save the data */ + comp->output_ptr[comp->num_output_ptr] = (png_charp)png_malloc(png_ptr, + (png_uint_32)png_ptr->zbuf_size); + png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf, + png_ptr->zbuf_size); + comp->num_output_ptr++; + + /* and reset the buffer */ + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + png_ptr->zstream.next_out = png_ptr->zbuf; + } + /* continue until we don't have any more to compress */ + } while (png_ptr->zstream.avail_in); + + /* finish the compression */ + do + { + /* tell zlib we are finished */ + ret = deflate(&png_ptr->zstream, Z_FINISH); + + if (ret == Z_OK) + { + /* check to see if we need more room */ + if (!(png_ptr->zstream.avail_out)) + { + /* check to make sure our output array has room */ + if (comp->num_output_ptr >= comp->max_output_ptr) + { + int old_max; + + old_max = comp->max_output_ptr; + comp->max_output_ptr = comp->num_output_ptr + 4; + if (comp->output_ptr != NULL) + { + png_charpp old_ptr; + + old_ptr = comp->output_ptr; + /* This could be optimized to realloc() */ + comp->output_ptr = (png_charpp)png_malloc(png_ptr, + (png_uint_32)(comp->max_output_ptr * + png_sizeof (png_charpp))); + png_memcpy(comp->output_ptr, old_ptr, + old_max * png_sizeof (png_charp)); + png_free(png_ptr, old_ptr); + } + else + comp->output_ptr = (png_charpp)png_malloc(png_ptr, + (png_uint_32)(comp->max_output_ptr * + png_sizeof (png_charp))); + } + + /* save off the data */ + comp->output_ptr[comp->num_output_ptr] = + (png_charp)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size); + png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf, + png_ptr->zbuf_size); + comp->num_output_ptr++; + + /* and reset the buffer pointers */ + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + png_ptr->zstream.next_out = png_ptr->zbuf; + } + } + else if (ret != Z_STREAM_END) + { + /* we got an error */ + if (png_ptr->zstream.msg != NULL) + png_error(png_ptr, png_ptr->zstream.msg); + else + png_error(png_ptr, "zlib error"); + } + } while (ret != Z_STREAM_END); + + /* text length is number of buffers plus last buffer */ + text_len = png_ptr->zbuf_size * comp->num_output_ptr; + if (png_ptr->zstream.avail_out < png_ptr->zbuf_size) + text_len += png_ptr->zbuf_size - (png_size_t)png_ptr->zstream.avail_out; + + return((int)text_len); +} + +/* ship the compressed text out via chunk writes */ +static void /* PRIVATE */ +png_write_compressed_data_out(png_structp png_ptr, compression_state *comp) +{ + int i; + + /* handle the no-compression case */ + if (comp->input) + { + png_write_chunk_data(png_ptr, (png_bytep)comp->input, + (png_size_t)comp->input_len); + return; + } + + /* write saved output buffers, if any */ + for (i = 0; i < comp->num_output_ptr; i++) + { + png_write_chunk_data(png_ptr,(png_bytep)comp->output_ptr[i], + png_ptr->zbuf_size); + png_free(png_ptr, comp->output_ptr[i]); + comp->output_ptr[i]=NULL; + } + if (comp->max_output_ptr != 0) + png_free(png_ptr, comp->output_ptr); + comp->output_ptr=NULL; + /* write anything left in zbuf */ + if (png_ptr->zstream.avail_out < (png_uint_32)png_ptr->zbuf_size) + png_write_chunk_data(png_ptr, png_ptr->zbuf, + png_ptr->zbuf_size - png_ptr->zstream.avail_out); + + /* reset zlib for another zTXt/iTXt or image data */ + deflateReset(&png_ptr->zstream); + png_ptr->zstream.data_type = Z_BINARY; +} +#endif + +/* Write the IHDR chunk, and update the png_struct with the necessary + * information. Note that the rest of this code depends upon this + * information being correct. + */ +void /* PRIVATE */ +png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height, + int bit_depth, int color_type, int compression_type, int filter_type, + int interlace_type) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IHDR; +#endif + png_byte buf[13]; /* buffer to store the IHDR info */ + + png_debug(1, "in png_write_IHDR\n"); + /* Check that we have valid input data from the application info */ + switch (color_type) + { + case PNG_COLOR_TYPE_GRAY: + switch (bit_depth) + { + case 1: + case 2: + case 4: + case 8: + case 16: png_ptr->channels = 1; break; + default: png_error(png_ptr,"Invalid bit depth for grayscale image"); + } + break; + case PNG_COLOR_TYPE_RGB: + if (bit_depth != 8 && bit_depth != 16) + png_error(png_ptr, "Invalid bit depth for RGB image"); + png_ptr->channels = 3; + break; + case PNG_COLOR_TYPE_PALETTE: + switch (bit_depth) + { + case 1: + case 2: + case 4: + case 8: png_ptr->channels = 1; break; + default: png_error(png_ptr, "Invalid bit depth for paletted image"); + } + break; + case PNG_COLOR_TYPE_GRAY_ALPHA: + if (bit_depth != 8 && bit_depth != 16) + png_error(png_ptr, "Invalid bit depth for grayscale+alpha image"); + png_ptr->channels = 2; + break; + case PNG_COLOR_TYPE_RGB_ALPHA: + if (bit_depth != 8 && bit_depth != 16) + png_error(png_ptr, "Invalid bit depth for RGBA image"); + png_ptr->channels = 4; + break; + default: + png_error(png_ptr, "Invalid image color type specified"); + } + + if (compression_type != PNG_COMPRESSION_TYPE_BASE) + { + png_warning(png_ptr, "Invalid compression type specified"); + compression_type = PNG_COMPRESSION_TYPE_BASE; + } + + /* Write filter_method 64 (intrapixel differencing) only if + * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and + * 2. Libpng did not write a PNG signature (this filter_method is only + * used in PNG datastreams that are embedded in MNG datastreams) and + * 3. The application called png_permit_mng_features with a mask that + * included PNG_FLAG_MNG_FILTER_64 and + * 4. The filter_method is 64 and + * 5. The color_type is RGB or RGBA + */ + if ( +#if defined(PNG_MNG_FEATURES_SUPPORTED) + !((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) && + ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) && + (color_type == PNG_COLOR_TYPE_RGB || + color_type == PNG_COLOR_TYPE_RGB_ALPHA) && + (filter_type == PNG_INTRAPIXEL_DIFFERENCING)) && +#endif + filter_type != PNG_FILTER_TYPE_BASE) + { + png_warning(png_ptr, "Invalid filter type specified"); + filter_type = PNG_FILTER_TYPE_BASE; + } + +#ifdef PNG_WRITE_INTERLACING_SUPPORTED + if (interlace_type != PNG_INTERLACE_NONE && + interlace_type != PNG_INTERLACE_ADAM7) + { + png_warning(png_ptr, "Invalid interlace type specified"); + interlace_type = PNG_INTERLACE_ADAM7; + } +#else + interlace_type=PNG_INTERLACE_NONE; +#endif + + /* save off the relevent information */ + png_ptr->bit_depth = (png_byte)bit_depth; + png_ptr->color_type = (png_byte)color_type; + png_ptr->interlaced = (png_byte)interlace_type; +#if defined(PNG_MNG_FEATURES_SUPPORTED) + png_ptr->filter_type = (png_byte)filter_type; +#endif + png_ptr->compression_type = (png_byte)compression_type; + png_ptr->width = width; + png_ptr->height = height; + + png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels); + png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width); + /* set the usr info, so any transformations can modify it */ + png_ptr->usr_width = png_ptr->width; + png_ptr->usr_bit_depth = png_ptr->bit_depth; + png_ptr->usr_channels = png_ptr->channels; + + /* pack the header information into the buffer */ + png_save_uint_32(buf, width); + png_save_uint_32(buf + 4, height); + buf[8] = (png_byte)bit_depth; + buf[9] = (png_byte)color_type; + buf[10] = (png_byte)compression_type; + buf[11] = (png_byte)filter_type; + buf[12] = (png_byte)interlace_type; + + /* write the chunk */ + png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13); + + /* initialize zlib with PNG info */ + png_ptr->zstream.zalloc = png_zalloc; + png_ptr->zstream.zfree = png_zfree; + png_ptr->zstream.opaque = (voidpf)png_ptr; + if (!(png_ptr->do_filter)) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE || + png_ptr->bit_depth < 8) + png_ptr->do_filter = PNG_FILTER_NONE; + else + png_ptr->do_filter = PNG_ALL_FILTERS; + } + if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_STRATEGY)) + { + if (png_ptr->do_filter != PNG_FILTER_NONE) + png_ptr->zlib_strategy = Z_FILTERED; + else + png_ptr->zlib_strategy = Z_DEFAULT_STRATEGY; + } + if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_LEVEL)) + png_ptr->zlib_level = Z_DEFAULT_COMPRESSION; + if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL)) + png_ptr->zlib_mem_level = 8; + if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS)) + png_ptr->zlib_window_bits = 15; + if (!(png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_METHOD)) + png_ptr->zlib_method = 8; + deflateInit2(&png_ptr->zstream, png_ptr->zlib_level, + png_ptr->zlib_method, png_ptr->zlib_window_bits, + png_ptr->zlib_mem_level, png_ptr->zlib_strategy); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + /* libpng is not interested in zstream.data_type */ + /* set it to a predefined value, to avoid its evaluation inside zlib */ + png_ptr->zstream.data_type = Z_BINARY; + + png_ptr->mode = PNG_HAVE_IHDR; +} + +/* write the palette. We are careful not to trust png_color to be in the + * correct order for PNG, so people can redefine it to any convenient + * structure. + */ +void /* PRIVATE */ +png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_PLTE; +#endif + png_uint_32 i; + png_colorp pal_ptr; + png_byte buf[3]; + + png_debug(1, "in png_write_PLTE\n"); + if (( +#if defined(PNG_MNG_FEATURES_SUPPORTED) + !(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) && +#endif + num_pal == 0) || num_pal > 256) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + { + png_error(png_ptr, "Invalid number of colors in palette"); + } + else + { + png_warning(png_ptr, "Invalid number of colors in palette"); + return; + } + } + + if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR)) + { + png_warning(png_ptr, + "Ignoring request to write a PLTE chunk in grayscale PNG"); + return; + } + + png_ptr->num_palette = (png_uint_16)num_pal; + png_debug1(3, "num_palette = %d\n", png_ptr->num_palette); + + png_write_chunk_start(png_ptr, (png_bytep)png_PLTE, num_pal * 3); +#ifndef PNG_NO_POINTER_INDEXING + for (i = 0, pal_ptr = palette; i < num_pal; i++, pal_ptr++) + { + buf[0] = pal_ptr->red; + buf[1] = pal_ptr->green; + buf[2] = pal_ptr->blue; + png_write_chunk_data(png_ptr, buf, (png_size_t)3); + } +#else + /* This is a little slower but some buggy compilers need to do this instead */ + pal_ptr=palette; + for (i = 0; i < num_pal; i++) + { + buf[0] = pal_ptr[i].red; + buf[1] = pal_ptr[i].green; + buf[2] = pal_ptr[i].blue; + png_write_chunk_data(png_ptr, buf, (png_size_t)3); + } +#endif + png_write_chunk_end(png_ptr); + png_ptr->mode |= PNG_HAVE_PLTE; +} + +/* write an IDAT chunk */ +void /* PRIVATE */ +png_write_IDAT(png_structp png_ptr, png_bytep data, png_size_t length) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IDAT; +#endif + png_debug(1, "in png_write_IDAT\n"); + + /* Optimize the CMF field in the zlib stream. */ + /* This hack of the zlib stream is compliant to the stream specification. */ + if (!(png_ptr->mode & PNG_HAVE_IDAT) && + png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE) + { + unsigned int z_cmf = data[0]; /* zlib compression method and flags */ + if ((z_cmf & 0x0f) == 8 && (z_cmf & 0xf0) <= 0x70) + { + /* Avoid memory underflows and multiplication overflows. */ + /* The conditions below are practically always satisfied; + however, they still must be checked. */ + if (length >= 2 && + png_ptr->height < 16384 && png_ptr->width < 16384) + { + png_uint_32 uncompressed_idat_size = png_ptr->height * + ((png_ptr->width * + png_ptr->channels * png_ptr->bit_depth + 15) >> 3); + unsigned int z_cinfo = z_cmf >> 4; + unsigned int half_z_window_size = 1 << (z_cinfo + 7); + while (uncompressed_idat_size <= half_z_window_size && + half_z_window_size >= 256) + { + z_cinfo--; + half_z_window_size >>= 1; + } + z_cmf = (z_cmf & 0x0f) | (z_cinfo << 4); + if (data[0] != (png_byte)z_cmf) + { + data[0] = (png_byte)z_cmf; + data[1] &= 0xe0; + data[1] += (png_byte)(0x1f - ((z_cmf << 8) + data[1]) % 0x1f); + } + } + } + else + png_error(png_ptr, + "Invalid zlib compression method or flags in IDAT"); + } + + png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length); + png_ptr->mode |= PNG_HAVE_IDAT; +} + +/* write an IEND chunk */ +void /* PRIVATE */ +png_write_IEND(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_IEND; +#endif + png_debug(1, "in png_write_IEND\n"); + png_write_chunk(png_ptr, (png_bytep)png_IEND, png_bytep_NULL, + (png_size_t)0); + png_ptr->mode |= PNG_HAVE_IEND; +} + +#if defined(PNG_WRITE_gAMA_SUPPORTED) +/* write a gAMA chunk */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +void /* PRIVATE */ +png_write_gAMA(png_structp png_ptr, double file_gamma) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_gAMA; +#endif + png_uint_32 igamma; + png_byte buf[4]; + + png_debug(1, "in png_write_gAMA\n"); + /* file_gamma is saved in 1/100,000ths */ + igamma = (png_uint_32)(file_gamma * 100000.0 + 0.5); + png_save_uint_32(buf, igamma); + png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4); +} +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +void /* PRIVATE */ +png_write_gAMA_fixed(png_structp png_ptr, png_fixed_point file_gamma) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_gAMA; +#endif + png_byte buf[4]; + + png_debug(1, "in png_write_gAMA\n"); + /* file_gamma is saved in 1/100,000ths */ + png_save_uint_32(buf, (png_uint_32)file_gamma); + png_write_chunk(png_ptr, (png_bytep)png_gAMA, buf, (png_size_t)4); +} +#endif +#endif + +#if defined(PNG_WRITE_sRGB_SUPPORTED) +/* write a sRGB chunk */ +void /* PRIVATE */ +png_write_sRGB(png_structp png_ptr, int srgb_intent) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_sRGB; +#endif + png_byte buf[1]; + + png_debug(1, "in png_write_sRGB\n"); + if(srgb_intent >= PNG_sRGB_INTENT_LAST) + png_warning(png_ptr, + "Invalid sRGB rendering intent specified"); + buf[0]=(png_byte)srgb_intent; + png_write_chunk(png_ptr, (png_bytep)png_sRGB, buf, (png_size_t)1); +} +#endif + +#if defined(PNG_WRITE_iCCP_SUPPORTED) +/* write an iCCP chunk */ +void /* PRIVATE */ +png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type, + png_charp profile, int profile_len) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_iCCP; +#endif + png_size_t name_len; + png_charp new_name; + compression_state comp; + + png_debug(1, "in png_write_iCCP\n"); + if (name == NULL || (name_len = png_check_keyword(png_ptr, name, + &new_name)) == 0) + { + png_warning(png_ptr, "Empty keyword in iCCP chunk"); + return; + } + + if (compression_type != PNG_COMPRESSION_TYPE_BASE) + png_warning(png_ptr, "Unknown compression type in iCCP chunk"); + + if (profile == NULL) + profile_len = 0; + + if (profile_len) + profile_len = png_text_compress(png_ptr, profile, (png_size_t)profile_len, + PNG_COMPRESSION_TYPE_BASE, &comp); + + /* make sure we include the NULL after the name and the compression type */ + png_write_chunk_start(png_ptr, (png_bytep)png_iCCP, + (png_uint_32)name_len+profile_len+2); + new_name[name_len+1]=0x00; + png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 2); + + if (profile_len) + png_write_compressed_data_out(png_ptr, &comp); + + png_write_chunk_end(png_ptr); + png_free(png_ptr, new_name); +} +#endif + +#if defined(PNG_WRITE_sPLT_SUPPORTED) +/* write a sPLT chunk */ +void /* PRIVATE */ +png_write_sPLT(png_structp png_ptr, png_sPLT_tp spalette) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_sPLT; +#endif + png_size_t name_len; + png_charp new_name; + png_byte entrybuf[10]; + int entry_size = (spalette->depth == 8 ? 6 : 10); + int palette_size = entry_size * spalette->nentries; + png_sPLT_entryp ep; +#ifdef PNG_NO_POINTER_INDEXING + int i; +#endif + + png_debug(1, "in png_write_sPLT\n"); + if (spalette->name == NULL || (name_len = png_check_keyword(png_ptr, + spalette->name, &new_name))==0) + { + png_warning(png_ptr, "Empty keyword in sPLT chunk"); + return; + } + + /* make sure we include the NULL after the name */ + png_write_chunk_start(png_ptr, (png_bytep)png_sPLT, + (png_uint_32)(name_len + 2 + palette_size)); + png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 1); + png_write_chunk_data(png_ptr, (png_bytep)&spalette->depth, 1); + + /* loop through each palette entry, writing appropriately */ +#ifndef PNG_NO_POINTER_INDEXING + for (ep = spalette->entries; epentries+spalette->nentries; ep++) + { + if (spalette->depth == 8) + { + entrybuf[0] = (png_byte)ep->red; + entrybuf[1] = (png_byte)ep->green; + entrybuf[2] = (png_byte)ep->blue; + entrybuf[3] = (png_byte)ep->alpha; + png_save_uint_16(entrybuf + 4, ep->frequency); + } + else + { + png_save_uint_16(entrybuf + 0, ep->red); + png_save_uint_16(entrybuf + 2, ep->green); + png_save_uint_16(entrybuf + 4, ep->blue); + png_save_uint_16(entrybuf + 6, ep->alpha); + png_save_uint_16(entrybuf + 8, ep->frequency); + } + png_write_chunk_data(png_ptr, entrybuf, (png_size_t)entry_size); + } +#else + ep=spalette->entries; + for (i=0; i>spalette->nentries; i++) + { + if (spalette->depth == 8) + { + entrybuf[0] = (png_byte)ep[i].red; + entrybuf[1] = (png_byte)ep[i].green; + entrybuf[2] = (png_byte)ep[i].blue; + entrybuf[3] = (png_byte)ep[i].alpha; + png_save_uint_16(entrybuf + 4, ep[i].frequency); + } + else + { + png_save_uint_16(entrybuf + 0, ep[i].red); + png_save_uint_16(entrybuf + 2, ep[i].green); + png_save_uint_16(entrybuf + 4, ep[i].blue); + png_save_uint_16(entrybuf + 6, ep[i].alpha); + png_save_uint_16(entrybuf + 8, ep[i].frequency); + } + png_write_chunk_data(png_ptr, entrybuf, entry_size); + } +#endif + + png_write_chunk_end(png_ptr); + png_free(png_ptr, new_name); +} +#endif + +#if defined(PNG_WRITE_sBIT_SUPPORTED) +/* write the sBIT chunk */ +void /* PRIVATE */ +png_write_sBIT(png_structp png_ptr, png_color_8p sbit, int color_type) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_sBIT; +#endif + png_byte buf[4]; + png_size_t size; + + png_debug(1, "in png_write_sBIT\n"); + /* make sure we don't depend upon the order of PNG_COLOR_8 */ + if (color_type & PNG_COLOR_MASK_COLOR) + { + png_byte maxbits; + + maxbits = (png_byte)(color_type==PNG_COLOR_TYPE_PALETTE ? 8 : + png_ptr->usr_bit_depth); + if (sbit->red == 0 || sbit->red > maxbits || + sbit->green == 0 || sbit->green > maxbits || + sbit->blue == 0 || sbit->blue > maxbits) + { + png_warning(png_ptr, "Invalid sBIT depth specified"); + return; + } + buf[0] = sbit->red; + buf[1] = sbit->green; + buf[2] = sbit->blue; + size = 3; + } + else + { + if (sbit->gray == 0 || sbit->gray > png_ptr->usr_bit_depth) + { + png_warning(png_ptr, "Invalid sBIT depth specified"); + return; + } + buf[0] = sbit->gray; + size = 1; + } + + if (color_type & PNG_COLOR_MASK_ALPHA) + { + if (sbit->alpha == 0 || sbit->alpha > png_ptr->usr_bit_depth) + { + png_warning(png_ptr, "Invalid sBIT depth specified"); + return; + } + buf[size++] = sbit->alpha; + } + + png_write_chunk(png_ptr, (png_bytep)png_sBIT, buf, size); +} +#endif + +#if defined(PNG_WRITE_cHRM_SUPPORTED) +/* write the cHRM chunk */ +#ifdef PNG_FLOATING_POINT_SUPPORTED +void /* PRIVATE */ +png_write_cHRM(png_structp png_ptr, double white_x, double white_y, + double red_x, double red_y, double green_x, double green_y, + double blue_x, double blue_y) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_cHRM; +#endif + png_byte buf[32]; + png_uint_32 itemp; + + png_debug(1, "in png_write_cHRM\n"); + /* each value is saved in 1/100,000ths */ + if (white_x < 0 || white_x > 0.8 || white_y < 0 || white_y > 0.8 || + white_x + white_y > 1.0) + { + png_warning(png_ptr, "Invalid cHRM white point specified"); +#if !defined(PNG_NO_CONSOLE_IO) + fprintf(stderr,"white_x=%f, white_y=%f\n",white_x, white_y); +#endif + return; + } + itemp = (png_uint_32)(white_x * 100000.0 + 0.5); + png_save_uint_32(buf, itemp); + itemp = (png_uint_32)(white_y * 100000.0 + 0.5); + png_save_uint_32(buf + 4, itemp); + + if (red_x < 0 || red_x > 0.8 || red_y < 0 || red_y > 0.8 || + red_x + red_y > 1.0) + { + png_warning(png_ptr, "Invalid cHRM red point specified"); + return; + } + itemp = (png_uint_32)(red_x * 100000.0 + 0.5); + png_save_uint_32(buf + 8, itemp); + itemp = (png_uint_32)(red_y * 100000.0 + 0.5); + png_save_uint_32(buf + 12, itemp); + + if (green_x < 0 || green_x > 0.8 || green_y < 0 || green_y > 0.8 || + green_x + green_y > 1.0) + { + png_warning(png_ptr, "Invalid cHRM green point specified"); + return; + } + itemp = (png_uint_32)(green_x * 100000.0 + 0.5); + png_save_uint_32(buf + 16, itemp); + itemp = (png_uint_32)(green_y * 100000.0 + 0.5); + png_save_uint_32(buf + 20, itemp); + + if (blue_x < 0 || blue_x > 0.8 || blue_y < 0 || blue_y > 0.8 || + blue_x + blue_y > 1.0) + { + png_warning(png_ptr, "Invalid cHRM blue point specified"); + return; + } + itemp = (png_uint_32)(blue_x * 100000.0 + 0.5); + png_save_uint_32(buf + 24, itemp); + itemp = (png_uint_32)(blue_y * 100000.0 + 0.5); + png_save_uint_32(buf + 28, itemp); + + png_write_chunk(png_ptr, (png_bytep)png_cHRM, buf, (png_size_t)32); +} +#endif +#ifdef PNG_FIXED_POINT_SUPPORTED +void /* PRIVATE */ +png_write_cHRM_fixed(png_structp png_ptr, png_fixed_point white_x, + png_fixed_point white_y, png_fixed_point red_x, png_fixed_point red_y, + png_fixed_point green_x, png_fixed_point green_y, png_fixed_point blue_x, + png_fixed_point blue_y) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_cHRM; +#endif + png_byte buf[32]; + + png_debug(1, "in png_write_cHRM\n"); + /* each value is saved in 1/100,000ths */ + if (white_x > 80000L || white_y > 80000L || white_x + white_y > 100000L) + { + png_warning(png_ptr, "Invalid fixed cHRM white point specified"); +#if !defined(PNG_NO_CONSOLE_IO) + fprintf(stderr,"white_x=%ld, white_y=%ld\n",white_x, white_y); +#endif + return; + } + png_save_uint_32(buf, (png_uint_32)white_x); + png_save_uint_32(buf + 4, (png_uint_32)white_y); + + if (red_x > 80000L || red_y > 80000L || red_x + red_y > 100000L) + { + png_warning(png_ptr, "Invalid cHRM fixed red point specified"); + return; + } + png_save_uint_32(buf + 8, (png_uint_32)red_x); + png_save_uint_32(buf + 12, (png_uint_32)red_y); + + if (green_x > 80000L || green_y > 80000L || green_x + green_y > 100000L) + { + png_warning(png_ptr, "Invalid fixed cHRM green point specified"); + return; + } + png_save_uint_32(buf + 16, (png_uint_32)green_x); + png_save_uint_32(buf + 20, (png_uint_32)green_y); + + if (blue_x > 80000L || blue_y > 80000L || blue_x + blue_y > 100000L) + { + png_warning(png_ptr, "Invalid fixed cHRM blue point specified"); + return; + } + png_save_uint_32(buf + 24, (png_uint_32)blue_x); + png_save_uint_32(buf + 28, (png_uint_32)blue_y); + + png_write_chunk(png_ptr, (png_bytep)png_cHRM, buf, (png_size_t)32); +} +#endif +#endif + +#if defined(PNG_WRITE_tRNS_SUPPORTED) +/* write the tRNS chunk */ +void /* PRIVATE */ +png_write_tRNS(png_structp png_ptr, png_bytep trans, png_color_16p tran, + int num_trans, int color_type) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_tRNS; +#endif + png_byte buf[6]; + + png_debug(1, "in png_write_tRNS\n"); + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + if (num_trans <= 0 || num_trans > (int)png_ptr->num_palette) + { + png_warning(png_ptr,"Invalid number of transparent colors specified"); + return; + } + /* write the chunk out as it is */ + png_write_chunk(png_ptr, (png_bytep)png_tRNS, trans, (png_size_t)num_trans); + } + else if (color_type == PNG_COLOR_TYPE_GRAY) + { + /* one 16 bit value */ + if(tran->gray >= (1 << png_ptr->bit_depth)) + { + png_warning(png_ptr, + "Ignoring attempt to write tRNS chunk out-of-range for bit_depth"); + return; + } + png_save_uint_16(buf, tran->gray); + png_write_chunk(png_ptr, (png_bytep)png_tRNS, buf, (png_size_t)2); + } + else if (color_type == PNG_COLOR_TYPE_RGB) + { + /* three 16 bit values */ + png_save_uint_16(buf, tran->red); + png_save_uint_16(buf + 2, tran->green); + png_save_uint_16(buf + 4, tran->blue); + if(png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4])) + { + png_warning(png_ptr, + "Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8"); + return; + } + png_write_chunk(png_ptr, (png_bytep)png_tRNS, buf, (png_size_t)6); + } + else + { + png_warning(png_ptr, "Can't write tRNS with an alpha channel"); + } +} +#endif + +#if defined(PNG_WRITE_bKGD_SUPPORTED) +/* write the background chunk */ +void /* PRIVATE */ +png_write_bKGD(png_structp png_ptr, png_color_16p back, int color_type) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_bKGD; +#endif + png_byte buf[6]; + + png_debug(1, "in png_write_bKGD\n"); + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + if ( +#if defined(PNG_MNG_FEATURES_SUPPORTED) + (png_ptr->num_palette || + (!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) && +#endif + back->index > png_ptr->num_palette) + { + png_warning(png_ptr, "Invalid background palette index"); + return; + } + buf[0] = back->index; + png_write_chunk(png_ptr, (png_bytep)png_bKGD, buf, (png_size_t)1); + } + else if (color_type & PNG_COLOR_MASK_COLOR) + { + png_save_uint_16(buf, back->red); + png_save_uint_16(buf + 2, back->green); + png_save_uint_16(buf + 4, back->blue); + if(png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4])) + { + png_warning(png_ptr, + "Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8"); + return; + } + png_write_chunk(png_ptr, (png_bytep)png_bKGD, buf, (png_size_t)6); + } + else + { + if(back->gray >= (1 << png_ptr->bit_depth)) + { + png_warning(png_ptr, + "Ignoring attempt to write bKGD chunk out-of-range for bit_depth"); + return; + } + png_save_uint_16(buf, back->gray); + png_write_chunk(png_ptr, (png_bytep)png_bKGD, buf, (png_size_t)2); + } +} +#endif + +#if defined(PNG_WRITE_hIST_SUPPORTED) +/* write the histogram */ +void /* PRIVATE */ +png_write_hIST(png_structp png_ptr, png_uint_16p hist, int num_hist) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_hIST; +#endif + int i; + png_byte buf[3]; + + png_debug(1, "in png_write_hIST\n"); + if (num_hist > (int)png_ptr->num_palette) + { + png_debug2(3, "num_hist = %d, num_palette = %d\n", num_hist, + png_ptr->num_palette); + png_warning(png_ptr, "Invalid number of histogram entries specified"); + return; + } + + png_write_chunk_start(png_ptr, (png_bytep)png_hIST, (png_uint_32)(num_hist * 2)); + for (i = 0; i < num_hist; i++) + { + png_save_uint_16(buf, hist[i]); + png_write_chunk_data(png_ptr, buf, (png_size_t)2); + } + png_write_chunk_end(png_ptr); +} +#endif + +#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ + defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) +/* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification, + * and if invalid, correct the keyword rather than discarding the entire + * chunk. The PNG 1.0 specification requires keywords 1-79 characters in + * length, forbids leading or trailing whitespace, multiple internal spaces, + * and the non-break space (0x80) from ISO 8859-1. Returns keyword length. + * + * The new_key is allocated to hold the corrected keyword and must be freed + * by the calling routine. This avoids problems with trying to write to + * static keywords without having to have duplicate copies of the strings. + */ +png_size_t /* PRIVATE */ +png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) +{ + png_size_t key_len; + png_charp kp, dp; + int kflag; + int kwarn=0; + + png_debug(1, "in png_check_keyword\n"); + *new_key = NULL; + + if (key == NULL || (key_len = png_strlen(key)) == 0) + { + png_warning(png_ptr, "zero length keyword"); + return ((png_size_t)0); + } + + png_debug1(2, "Keyword to be checked is '%s'\n", key); + + *new_key = (png_charp)png_malloc_warn(png_ptr, (png_uint_32)(key_len + 2)); + if (*new_key == NULL) + { + png_warning(png_ptr, "Out of memory while procesing keyword"); + return ((png_size_t)0); + } + + /* Replace non-printing characters with a blank and print a warning */ + for (kp = key, dp = *new_key; *kp != '\0'; kp++, dp++) + { + if (*kp < 0x20 || (*kp > 0x7E && (png_byte)*kp < 0xA1)) + { +#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) + char msg[40]; + + sprintf(msg, "invalid keyword character 0x%02X", *kp); + png_warning(png_ptr, msg); +#else + png_warning(png_ptr, "invalid character in keyword"); +#endif + *dp = ' '; + } + else + { + *dp = *kp; + } + } + *dp = '\0'; + + /* Remove any trailing white space. */ + kp = *new_key + key_len - 1; + if (*kp == ' ') + { + png_warning(png_ptr, "trailing spaces removed from keyword"); + + while (*kp == ' ') + { + *(kp--) = '\0'; + key_len--; + } + } + + /* Remove any leading white space. */ + kp = *new_key; + if (*kp == ' ') + { + png_warning(png_ptr, "leading spaces removed from keyword"); + + while (*kp == ' ') + { + kp++; + key_len--; + } + } + + png_debug1(2, "Checking for multiple internal spaces in '%s'\n", kp); + + /* Remove multiple internal spaces. */ + for (kflag = 0, dp = *new_key; *kp != '\0'; kp++) + { + if (*kp == ' ' && kflag == 0) + { + *(dp++) = *kp; + kflag = 1; + } + else if (*kp == ' ') + { + key_len--; + kwarn=1; + } + else + { + *(dp++) = *kp; + kflag = 0; + } + } + *dp = '\0'; + if(kwarn) + png_warning(png_ptr, "extra interior spaces removed from keyword"); + + if (key_len == 0) + { + png_free(png_ptr, *new_key); + *new_key=NULL; + png_warning(png_ptr, "Zero length keyword"); + } + + if (key_len > 79) + { + png_warning(png_ptr, "keyword length must be 1 - 79 characters"); + new_key[79] = NULL; + key_len = 79; + } + + return (key_len); +} +#endif + +#if defined(PNG_WRITE_tEXt_SUPPORTED) +/* write a tEXt chunk */ +void /* PRIVATE */ +png_write_tEXt(png_structp png_ptr, png_charp key, png_charp text, + png_size_t text_len) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_tEXt; +#endif + png_size_t key_len; + png_charp new_key; + + png_debug(1, "in png_write_tEXt\n"); + if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0) + { + png_warning(png_ptr, "Empty keyword in tEXt chunk"); + return; + } + + if (text == NULL || *text == '\0') + text_len = 0; + else + text_len = png_strlen(text); + + /* make sure we include the 0 after the key */ + png_write_chunk_start(png_ptr, (png_bytep)png_tEXt, (png_uint_32)key_len+text_len+1); + /* + * We leave it to the application to meet PNG-1.0 requirements on the + * contents of the text. PNG-1.0 through PNG-1.2 discourage the use of + * any non-Latin-1 characters except for NEWLINE. ISO PNG will forbid them. + * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG. + */ + png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1); + if (text_len) + png_write_chunk_data(png_ptr, (png_bytep)text, text_len); + + png_write_chunk_end(png_ptr); + png_free(png_ptr, new_key); +} +#endif + +#if defined(PNG_WRITE_zTXt_SUPPORTED) +/* write a compressed text chunk */ +void /* PRIVATE */ +png_write_zTXt(png_structp png_ptr, png_charp key, png_charp text, + png_size_t text_len, int compression) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_zTXt; +#endif + png_size_t key_len; + char buf[1]; + png_charp new_key; + compression_state comp; + + png_debug(1, "in png_write_zTXt\n"); + + if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0) + { + png_warning(png_ptr, "Empty keyword in zTXt chunk"); + return; + } + + if (text == NULL || *text == '\0' || compression==PNG_TEXT_COMPRESSION_NONE) + { + png_write_tEXt(png_ptr, new_key, text, (png_size_t)0); + png_free(png_ptr, new_key); + return; + } + + text_len = png_strlen(text); + + png_free(png_ptr, new_key); + + /* compute the compressed data; do it now for the length */ + text_len = png_text_compress(png_ptr, text, text_len, compression, + &comp); + + /* write start of chunk */ + png_write_chunk_start(png_ptr, (png_bytep)png_zTXt, (png_uint_32) + (key_len+text_len+2)); + /* write key */ + png_write_chunk_data(png_ptr, (png_bytep)key, key_len + 1); + buf[0] = (png_byte)compression; + /* write compression */ + png_write_chunk_data(png_ptr, (png_bytep)buf, (png_size_t)1); + /* write the compressed data */ + png_write_compressed_data_out(png_ptr, &comp); + + /* close the chunk */ + png_write_chunk_end(png_ptr); +} +#endif + +#if defined(PNG_WRITE_iTXt_SUPPORTED) +/* write an iTXt chunk */ +void /* PRIVATE */ +png_write_iTXt(png_structp png_ptr, int compression, png_charp key, + png_charp lang, png_charp lang_key, png_charp text) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_iTXt; +#endif + png_size_t lang_len, key_len, lang_key_len, text_len; + png_charp new_lang, new_key; + png_byte cbuf[2]; + compression_state comp; + + png_debug(1, "in png_write_iTXt\n"); + + if (key == NULL || (key_len = png_check_keyword(png_ptr, key, &new_key))==0) + { + png_warning(png_ptr, "Empty keyword in iTXt chunk"); + return; + } + if (lang == NULL || (lang_len = png_check_keyword(png_ptr, lang, &new_lang))==0) + { + png_warning(png_ptr, "Empty language field in iTXt chunk"); + new_lang = NULL; + lang_len = 0; + } + + if (lang_key == NULL) + lang_key_len = 0; + else + lang_key_len = png_strlen(lang_key); + + if (text == NULL) + text_len = 0; + else + text_len = png_strlen(text); + + /* compute the compressed data; do it now for the length */ + text_len = png_text_compress(png_ptr, text, text_len, compression-2, + &comp); + + + /* make sure we include the compression flag, the compression byte, + * and the NULs after the key, lang, and lang_key parts */ + + png_write_chunk_start(png_ptr, (png_bytep)png_iTXt, + (png_uint_32)( + 5 /* comp byte, comp flag, terminators for key, lang and lang_key */ + + key_len + + lang_len + + lang_key_len + + text_len)); + + /* + * We leave it to the application to meet PNG-1.0 requirements on the + * contents of the text. PNG-1.0 through PNG-1.2 discourage the use of + * any non-Latin-1 characters except for NEWLINE. ISO PNG will forbid them. + * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG. + */ + png_write_chunk_data(png_ptr, (png_bytep)new_key, key_len + 1); + + /* set the compression flag */ + if (compression == PNG_ITXT_COMPRESSION_NONE || \ + compression == PNG_TEXT_COMPRESSION_NONE) + cbuf[0] = 0; + else /* compression == PNG_ITXT_COMPRESSION_zTXt */ + cbuf[0] = 1; + /* set the compression method */ + cbuf[1] = 0; + png_write_chunk_data(png_ptr, cbuf, 2); + + cbuf[0] = 0; + png_write_chunk_data(png_ptr, (new_lang ? (png_bytep)new_lang : cbuf), lang_len + 1); + png_write_chunk_data(png_ptr, (lang_key ? (png_bytep)lang_key : cbuf), lang_key_len + 1); + png_write_compressed_data_out(png_ptr, &comp); + + png_write_chunk_end(png_ptr); + png_free(png_ptr, new_key); + if (new_lang) + png_free(png_ptr, new_lang); +} +#endif + +#if defined(PNG_WRITE_oFFs_SUPPORTED) +/* write the oFFs chunk */ +void /* PRIVATE */ +png_write_oFFs(png_structp png_ptr, png_int_32 x_offset, png_int_32 y_offset, + int unit_type) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_oFFs; +#endif + png_byte buf[9]; + + png_debug(1, "in png_write_oFFs\n"); + if (unit_type >= PNG_OFFSET_LAST) + png_warning(png_ptr, "Unrecognized unit type for oFFs chunk"); + + png_save_int_32(buf, x_offset); + png_save_int_32(buf + 4, y_offset); + buf[8] = (png_byte)unit_type; + + png_write_chunk(png_ptr, (png_bytep)png_oFFs, buf, (png_size_t)9); +} +#endif + +#if defined(PNG_WRITE_pCAL_SUPPORTED) +/* write the pCAL chunk (described in the PNG extensions document) */ +void /* PRIVATE */ +png_write_pCAL(png_structp png_ptr, png_charp purpose, png_int_32 X0, + png_int_32 X1, int type, int nparams, png_charp units, png_charpp params) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_pCAL; +#endif + png_size_t purpose_len, units_len, total_len; + png_uint_32p params_len; + png_byte buf[10]; + png_charp new_purpose; + int i; + + png_debug1(1, "in png_write_pCAL (%d parameters)\n", nparams); + if (type >= PNG_EQUATION_LAST) + png_warning(png_ptr, "Unrecognized equation type for pCAL chunk"); + + purpose_len = png_check_keyword(png_ptr, purpose, &new_purpose) + 1; + png_debug1(3, "pCAL purpose length = %d\n", (int)purpose_len); + units_len = png_strlen(units) + (nparams == 0 ? 0 : 1); + png_debug1(3, "pCAL units length = %d\n", (int)units_len); + total_len = purpose_len + units_len + 10; + + params_len = (png_uint_32p)png_malloc(png_ptr, (png_uint_32)(nparams + *png_sizeof(png_uint_32))); + + /* Find the length of each parameter, making sure we don't count the + null terminator for the last parameter. */ + for (i = 0; i < nparams; i++) + { + params_len[i] = png_strlen(params[i]) + (i == nparams - 1 ? 0 : 1); + png_debug2(3, "pCAL parameter %d length = %lu\n", i, params_len[i]); + total_len += (png_size_t)params_len[i]; + } + + png_debug1(3, "pCAL total length = %d\n", (int)total_len); + png_write_chunk_start(png_ptr, (png_bytep)png_pCAL, (png_uint_32)total_len); + png_write_chunk_data(png_ptr, (png_bytep)new_purpose, purpose_len); + png_save_int_32(buf, X0); + png_save_int_32(buf + 4, X1); + buf[8] = (png_byte)type; + buf[9] = (png_byte)nparams; + png_write_chunk_data(png_ptr, buf, (png_size_t)10); + png_write_chunk_data(png_ptr, (png_bytep)units, (png_size_t)units_len); + + png_free(png_ptr, new_purpose); + + for (i = 0; i < nparams; i++) + { + png_write_chunk_data(png_ptr, (png_bytep)params[i], + (png_size_t)params_len[i]); + } + + png_free(png_ptr, params_len); + png_write_chunk_end(png_ptr); +} +#endif + +#if defined(PNG_WRITE_sCAL_SUPPORTED) +/* write the sCAL chunk */ +#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) +void /* PRIVATE */ +png_write_sCAL(png_structp png_ptr, int unit, double width,double height) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_sCAL; +#endif + png_size_t total_len; + char wbuf[32], hbuf[32]; + png_byte bunit = unit; + + png_debug(1, "in png_write_sCAL\n"); + +#if defined(_WIN32_WCE) +/* sprintf() function is not supported on WindowsCE */ + { + wchar_t wc_buf[32]; + swprintf(wc_buf, TEXT("%12.12e"), width); + WideCharToMultiByte(CP_ACP, 0, wc_buf, -1, wbuf, 32, NULL, NULL); + swprintf(wc_buf, TEXT("%12.12e"), height); + WideCharToMultiByte(CP_ACP, 0, wc_buf, -1, hbuf, 32, NULL, NULL); + } +#else + sprintf(wbuf, "%12.12e", width); + sprintf(hbuf, "%12.12e", height); +#endif + total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf); + + png_debug1(3, "sCAL total length = %d\n", (int)total_len); + png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len); + png_write_chunk_data(png_ptr, (png_bytep)&bunit, 1); + png_write_chunk_data(png_ptr, (png_bytep)wbuf, png_strlen(wbuf)+1); + png_write_chunk_data(png_ptr, (png_bytep)hbuf, png_strlen(hbuf)); + + png_write_chunk_end(png_ptr); +} +#else +#ifdef PNG_FIXED_POINT_SUPPORTED +void /* PRIVATE */ +png_write_sCAL_s(png_structp png_ptr, int unit, png_charp width, + png_charp height) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_sCAL; +#endif + png_size_t total_len; + char wbuf[32], hbuf[32]; + png_byte bunit = unit; + + png_debug(1, "in png_write_sCAL_s\n"); + + png_strcpy(wbuf,(const char *)width); + png_strcpy(hbuf,(const char *)height); + total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf); + + png_debug1(3, "sCAL total length = %d\n", total_len); + png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len); + png_write_chunk_data(png_ptr, (png_bytep)&bunit, 1); + png_write_chunk_data(png_ptr, (png_bytep)wbuf, png_strlen(wbuf)+1); + png_write_chunk_data(png_ptr, (png_bytep)hbuf, png_strlen(hbuf)); + + png_write_chunk_end(png_ptr); +} +#endif +#endif +#endif + +#if defined(PNG_WRITE_pHYs_SUPPORTED) +/* write the pHYs chunk */ +void /* PRIVATE */ +png_write_pHYs(png_structp png_ptr, png_uint_32 x_pixels_per_unit, + png_uint_32 y_pixels_per_unit, + int unit_type) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_pHYs; +#endif + png_byte buf[9]; + + png_debug(1, "in png_write_pHYs\n"); + if (unit_type >= PNG_RESOLUTION_LAST) + png_warning(png_ptr, "Unrecognized unit type for pHYs chunk"); + + png_save_uint_32(buf, x_pixels_per_unit); + png_save_uint_32(buf + 4, y_pixels_per_unit); + buf[8] = (png_byte)unit_type; + + png_write_chunk(png_ptr, (png_bytep)png_pHYs, buf, (png_size_t)9); +} +#endif + +#if defined(PNG_WRITE_tIME_SUPPORTED) +/* Write the tIME chunk. Use either png_convert_from_struct_tm() + * or png_convert_from_time_t(), or fill in the structure yourself. + */ +void /* PRIVATE */ +png_write_tIME(png_structp png_ptr, png_timep mod_time) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + PNG_tIME; +#endif + png_byte buf[7]; + + png_debug(1, "in png_write_tIME\n"); + if (mod_time->month > 12 || mod_time->month < 1 || + mod_time->day > 31 || mod_time->day < 1 || + mod_time->hour > 23 || mod_time->second > 60) + { + png_warning(png_ptr, "Invalid time specified for tIME chunk"); + return; + } + + png_save_uint_16(buf, mod_time->year); + buf[2] = mod_time->month; + buf[3] = mod_time->day; + buf[4] = mod_time->hour; + buf[5] = mod_time->minute; + buf[6] = mod_time->second; + + png_write_chunk(png_ptr, (png_bytep)png_tIME, buf, (png_size_t)7); +} +#endif + +/* initializes the row writing capability of libpng */ +void /* PRIVATE */ +png_write_start_row(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + + /* start of interlace block */ + int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; + + /* offset to next interlace block */ + int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; + + /* start of interlace block in the y direction */ + int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; + + /* offset to next interlace block in the y direction */ + int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; +#endif + + png_size_t buf_size; + + png_debug(1, "in png_write_start_row\n"); + buf_size = (png_size_t)(PNG_ROWBYTES( + png_ptr->usr_channels*png_ptr->usr_bit_depth,png_ptr->width)+1); + + /* set up row buffer */ + png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size); + png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE; + + /* set up filtering buffer, if using this filter */ + if (png_ptr->do_filter & PNG_FILTER_SUB) + { + png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB; + } + + /* We only need to keep the previous row if we are using one of these. */ + if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH)) + { + /* set up previous row buffer */ + png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size); + png_memset(png_ptr->prev_row, 0, buf_size); + + if (png_ptr->do_filter & PNG_FILTER_UP) + { + png_ptr->up_row = (png_bytep )png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->up_row[0] = PNG_FILTER_VALUE_UP; + } + + if (png_ptr->do_filter & PNG_FILTER_AVG) + { + png_ptr->avg_row = (png_bytep)png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG; + } + + if (png_ptr->do_filter & PNG_FILTER_PAETH) + { + png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr, + (png_ptr->rowbytes + 1)); + png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH; + } + } + +#ifdef PNG_WRITE_INTERLACING_SUPPORTED + /* if interlaced, we need to set up width and height of pass */ + if (png_ptr->interlaced) + { + if (!(png_ptr->transformations & PNG_INTERLACE)) + { + png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 - + png_pass_ystart[0]) / png_pass_yinc[0]; + png_ptr->usr_width = (png_ptr->width + png_pass_inc[0] - 1 - + png_pass_start[0]) / png_pass_inc[0]; + } + else + { + png_ptr->num_rows = png_ptr->height; + png_ptr->usr_width = png_ptr->width; + } + } + else +#endif + { + png_ptr->num_rows = png_ptr->height; + png_ptr->usr_width = png_ptr->width; + } + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + png_ptr->zstream.next_out = png_ptr->zbuf; +} + +/* Internal use only. Called when finished processing a row of data. */ +void /* PRIVATE */ +png_write_finish_row(png_structp png_ptr) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + + /* start of interlace block */ + int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; + + /* offset to next interlace block */ + int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; + + /* start of interlace block in the y direction */ + int png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1}; + + /* offset to next interlace block in the y direction */ + int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2}; +#endif + + int ret; + + png_debug(1, "in png_write_finish_row\n"); + /* next row */ + png_ptr->row_number++; + + /* see if we are done */ + if (png_ptr->row_number < png_ptr->num_rows) + return; + +#ifdef PNG_WRITE_INTERLACING_SUPPORTED + /* if interlaced, go to next pass */ + if (png_ptr->interlaced) + { + png_ptr->row_number = 0; + if (png_ptr->transformations & PNG_INTERLACE) + { + png_ptr->pass++; + } + else + { + /* loop until we find a non-zero width or height pass */ + do + { + png_ptr->pass++; + if (png_ptr->pass >= 7) + break; + png_ptr->usr_width = (png_ptr->width + + png_pass_inc[png_ptr->pass] - 1 - + png_pass_start[png_ptr->pass]) / + png_pass_inc[png_ptr->pass]; + png_ptr->num_rows = (png_ptr->height + + png_pass_yinc[png_ptr->pass] - 1 - + png_pass_ystart[png_ptr->pass]) / + png_pass_yinc[png_ptr->pass]; + if (png_ptr->transformations & PNG_INTERLACE) + break; + } while (png_ptr->usr_width == 0 || png_ptr->num_rows == 0); + + } + + /* reset the row above the image for the next pass */ + if (png_ptr->pass < 7) + { + if (png_ptr->prev_row != NULL) + png_memset(png_ptr->prev_row, 0, + (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels* + png_ptr->usr_bit_depth,png_ptr->width))+1); + return; + } + } +#endif + + /* if we get here, we've just written the last row, so we need + to flush the compressor */ + do + { + /* tell the compressor we are done */ + ret = deflate(&png_ptr->zstream, Z_FINISH); + /* check for an error */ + if (ret == Z_OK) + { + /* check to see if we need more room */ + if (!(png_ptr->zstream.avail_out)) + { + png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + } + } + else if (ret != Z_STREAM_END) + { + if (png_ptr->zstream.msg != NULL) + png_error(png_ptr, png_ptr->zstream.msg); + else + png_error(png_ptr, "zlib error"); + } + } while (ret != Z_STREAM_END); + + /* write any extra space */ + if (png_ptr->zstream.avail_out < png_ptr->zbuf_size) + { + png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size - + png_ptr->zstream.avail_out); + } + + deflateReset(&png_ptr->zstream); + png_ptr->zstream.data_type = Z_BINARY; +} + +#if defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Pick out the correct pixels for the interlace pass. + * The basic idea here is to go through the row with a source + * pointer and a destination pointer (sp and dp), and copy the + * correct pixels for the pass. As the row gets compacted, + * sp will always be >= dp, so we should never overwrite anything. + * See the default: case for the easiest code to understand. + */ +void /* PRIVATE */ +png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass) +{ +#ifdef PNG_USE_LOCAL_ARRAYS + /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ + + /* start of interlace block */ + int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; + + /* offset to next interlace block */ + int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; +#endif + + png_debug(1, "in png_do_write_interlace\n"); + /* we don't have to do anything on the last pass (6) */ +#if defined(PNG_USELESS_TESTS_SUPPORTED) + if (row != NULL && row_info != NULL && pass < 6) +#else + if (pass < 6) +#endif + { + /* each pixel depth is handled separately */ + switch (row_info->pixel_depth) + { + case 1: + { + png_bytep sp; + png_bytep dp; + int shift; + int d; + int value; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + dp = row; + d = 0; + shift = 7; + for (i = png_pass_start[pass]; i < row_width; + i += png_pass_inc[pass]) + { + sp = row + (png_size_t)(i >> 3); + value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01; + d |= (value << shift); + + if (shift == 0) + { + shift = 7; + *dp++ = (png_byte)d; + d = 0; + } + else + shift--; + + } + if (shift != 7) + *dp = (png_byte)d; + break; + } + case 2: + { + png_bytep sp; + png_bytep dp; + int shift; + int d; + int value; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + dp = row; + shift = 6; + d = 0; + for (i = png_pass_start[pass]; i < row_width; + i += png_pass_inc[pass]) + { + sp = row + (png_size_t)(i >> 2); + value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03; + d |= (value << shift); + + if (shift == 0) + { + shift = 6; + *dp++ = (png_byte)d; + d = 0; + } + else + shift -= 2; + } + if (shift != 6) + *dp = (png_byte)d; + break; + } + case 4: + { + png_bytep sp; + png_bytep dp; + int shift; + int d; + int value; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + + dp = row; + shift = 4; + d = 0; + for (i = png_pass_start[pass]; i < row_width; + i += png_pass_inc[pass]) + { + sp = row + (png_size_t)(i >> 1); + value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f; + d |= (value << shift); + + if (shift == 0) + { + shift = 4; + *dp++ = (png_byte)d; + d = 0; + } + else + shift -= 4; + } + if (shift != 4) + *dp = (png_byte)d; + break; + } + default: + { + png_bytep sp; + png_bytep dp; + png_uint_32 i; + png_uint_32 row_width = row_info->width; + png_size_t pixel_bytes; + + /* start at the beginning */ + dp = row; + /* find out how many bytes each pixel takes up */ + pixel_bytes = (row_info->pixel_depth >> 3); + /* loop through the row, only looking at the pixels that + matter */ + for (i = png_pass_start[pass]; i < row_width; + i += png_pass_inc[pass]) + { + /* find out where the original pixel is */ + sp = row + (png_size_t)i * pixel_bytes; + /* move the pixel */ + if (dp != sp) + png_memcpy(dp, sp, pixel_bytes); + /* next pixel */ + dp += pixel_bytes; + } + break; + } + } + /* set new row width */ + row_info->width = (row_info->width + + png_pass_inc[pass] - 1 - + png_pass_start[pass]) / + png_pass_inc[pass]; + row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, + row_info->width); + } +} +#endif + +/* This filters the row, chooses which filter to use, if it has not already + * been specified by the application, and then writes the row out with the + * chosen filter. + */ +#define PNG_MAXSUM (((png_uint_32)(-1)) >> 1) +#define PNG_HISHIFT 10 +#define PNG_LOMASK ((png_uint_32)0xffffL) +#define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT)) +void /* PRIVATE */ +png_write_find_filter(png_structp png_ptr, png_row_infop row_info) +{ + png_bytep prev_row, best_row, row_buf; + png_uint_32 mins, bpp; + png_byte filter_to_do = png_ptr->do_filter; + png_uint_32 row_bytes = row_info->rowbytes; +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + int num_p_filters = (int)png_ptr->num_prev_filters; +#endif + + png_debug(1, "in png_write_find_filter\n"); + /* find out how many bytes offset each pixel is */ + bpp = (row_info->pixel_depth + 7) >> 3; + + prev_row = png_ptr->prev_row; + best_row = row_buf = png_ptr->row_buf; + mins = PNG_MAXSUM; + + /* The prediction method we use is to find which method provides the + * smallest value when summing the absolute values of the distances + * from zero, using anything >= 128 as negative numbers. This is known + * as the "minimum sum of absolute differences" heuristic. Other + * heuristics are the "weighted minimum sum of absolute differences" + * (experimental and can in theory improve compression), and the "zlib + * predictive" method (not implemented yet), which does test compressions + * of lines using different filter methods, and then chooses the + * (series of) filter(s) that give minimum compressed data size (VERY + * computationally expensive). + * + * GRR 980525: consider also + * (1) minimum sum of absolute differences from running average (i.e., + * keep running sum of non-absolute differences & count of bytes) + * [track dispersion, too? restart average if dispersion too large?] + * (1b) minimum sum of absolute differences from sliding average, probably + * with window size <= deflate window (usually 32K) + * (2) minimum sum of squared differences from zero or running average + * (i.e., ~ root-mean-square approach) + */ + + + /* We don't need to test the 'no filter' case if this is the only filter + * that has been chosen, as it doesn't actually do anything to the data. + */ + if ((filter_to_do & PNG_FILTER_NONE) && + filter_to_do != PNG_FILTER_NONE) + { + png_bytep rp; + png_uint_32 sum = 0; + png_uint_32 i; + int v; + + for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++) + { + v = *rp; + sum += (v < 128) ? v : 256 - v; + } + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + png_uint_32 sumhi, sumlo; + int j; + sumlo = sum & PNG_LOMASK; + sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; /* Gives us some footroom */ + + /* Reduce the sum if we match any of the previous rows */ + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE) + { + sumlo = (sumlo * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + sumhi = (sumhi * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + /* Factor in the cost of this filter (this is here for completeness, + * but it makes no sense to have a "cost" for the NONE filter, as + * it has the minimum possible computational cost - none). + */ + sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >> + PNG_COST_SHIFT; + sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >> + PNG_COST_SHIFT; + + if (sumhi > PNG_HIMASK) + sum = PNG_MAXSUM; + else + sum = (sumhi << PNG_HISHIFT) + sumlo; + } +#endif + mins = sum; + } + + /* sub filter */ + if (filter_to_do == PNG_FILTER_SUB) + /* it's the only filter so no testing is needed */ + { + png_bytep rp, lp, dp; + png_uint_32 i; + for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp; + i++, rp++, dp++) + { + *dp = *rp; + } + for (lp = row_buf + 1; i < row_bytes; + i++, rp++, lp++, dp++) + { + *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff); + } + best_row = png_ptr->sub_row; + } + + else if (filter_to_do & PNG_FILTER_SUB) + { + png_bytep rp, dp, lp; + png_uint_32 sum = 0, lmins = mins; + png_uint_32 i; + int v; + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + /* We temporarily increase the "minimum sum" by the factor we + * would reduce the sum of this filter, so that we can do the + * early exit comparison without scaling the sum each time. + */ + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 lmhi, lmlo; + lmlo = lmins & PNG_LOMASK; + lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB) + { + lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> + PNG_COST_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> + PNG_COST_SHIFT; + + if (lmhi > PNG_HIMASK) + lmins = PNG_MAXSUM; + else + lmins = (lmhi << PNG_HISHIFT) + lmlo; + } +#endif + + for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp; + i++, rp++, dp++) + { + v = *dp = *rp; + + sum += (v < 128) ? v : 256 - v; + } + for (lp = row_buf + 1; i < row_bytes; + i++, rp++, lp++, dp++) + { + v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff); + + sum += (v < 128) ? v : 256 - v; + + if (sum > lmins) /* We are already worse, don't continue. */ + break; + } + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 sumhi, sumlo; + sumlo = sum & PNG_LOMASK; + sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB) + { + sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> + PNG_COST_SHIFT; + sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >> + PNG_COST_SHIFT; + + if (sumhi > PNG_HIMASK) + sum = PNG_MAXSUM; + else + sum = (sumhi << PNG_HISHIFT) + sumlo; + } +#endif + + if (sum < mins) + { + mins = sum; + best_row = png_ptr->sub_row; + } + } + + /* up filter */ + if (filter_to_do == PNG_FILTER_UP) + { + png_bytep rp, dp, pp; + png_uint_32 i; + + for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1, + pp = prev_row + 1; i < row_bytes; + i++, rp++, pp++, dp++) + { + *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff); + } + best_row = png_ptr->up_row; + } + + else if (filter_to_do & PNG_FILTER_UP) + { + png_bytep rp, dp, pp; + png_uint_32 sum = 0, lmins = mins; + png_uint_32 i; + int v; + + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 lmhi, lmlo; + lmlo = lmins & PNG_LOMASK; + lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP) + { + lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >> + PNG_COST_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >> + PNG_COST_SHIFT; + + if (lmhi > PNG_HIMASK) + lmins = PNG_MAXSUM; + else + lmins = (lmhi << PNG_HISHIFT) + lmlo; + } +#endif + + for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1, + pp = prev_row + 1; i < row_bytes; i++) + { + v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); + + sum += (v < 128) ? v : 256 - v; + + if (sum > lmins) /* We are already worse, don't continue. */ + break; + } + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 sumhi, sumlo; + sumlo = sum & PNG_LOMASK; + sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP) + { + sumlo = (sumlo * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + sumhi = (sumhi * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >> + PNG_COST_SHIFT; + sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >> + PNG_COST_SHIFT; + + if (sumhi > PNG_HIMASK) + sum = PNG_MAXSUM; + else + sum = (sumhi << PNG_HISHIFT) + sumlo; + } +#endif + + if (sum < mins) + { + mins = sum; + best_row = png_ptr->up_row; + } + } + + /* avg filter */ + if (filter_to_do == PNG_FILTER_AVG) + { + png_bytep rp, dp, pp, lp; + png_uint_32 i; + for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1, + pp = prev_row + 1; i < bpp; i++) + { + *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff); + } + for (lp = row_buf + 1; i < row_bytes; i++) + { + *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) + & 0xff); + } + best_row = png_ptr->avg_row; + } + + else if (filter_to_do & PNG_FILTER_AVG) + { + png_bytep rp, dp, pp, lp; + png_uint_32 sum = 0, lmins = mins; + png_uint_32 i; + int v; + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 lmhi, lmlo; + lmlo = lmins & PNG_LOMASK; + lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG) + { + lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >> + PNG_COST_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >> + PNG_COST_SHIFT; + + if (lmhi > PNG_HIMASK) + lmins = PNG_MAXSUM; + else + lmins = (lmhi << PNG_HISHIFT) + lmlo; + } +#endif + + for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1, + pp = prev_row + 1; i < bpp; i++) + { + v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff); + + sum += (v < 128) ? v : 256 - v; + } + for (lp = row_buf + 1; i < row_bytes; i++) + { + v = *dp++ = + (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff); + + sum += (v < 128) ? v : 256 - v; + + if (sum > lmins) /* We are already worse, don't continue. */ + break; + } + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 sumhi, sumlo; + sumlo = sum & PNG_LOMASK; + sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE) + { + sumlo = (sumlo * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + sumhi = (sumhi * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >> + PNG_COST_SHIFT; + sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >> + PNG_COST_SHIFT; + + if (sumhi > PNG_HIMASK) + sum = PNG_MAXSUM; + else + sum = (sumhi << PNG_HISHIFT) + sumlo; + } +#endif + + if (sum < mins) + { + mins = sum; + best_row = png_ptr->avg_row; + } + } + + /* Paeth filter */ + if (filter_to_do == PNG_FILTER_PAETH) + { + png_bytep rp, dp, pp, cp, lp; + png_uint_32 i; + for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1, + pp = prev_row + 1; i < bpp; i++) + { + *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); + } + + for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++) + { + int a, b, c, pa, pb, pc, p; + + b = *pp++; + c = *cp++; + a = *lp++; + + p = b - c; + pc = a - c; + +#ifdef PNG_USE_ABS + pa = abs(p); + pb = abs(pc); + pc = abs(p + pc); +#else + pa = p < 0 ? -p : p; + pb = pc < 0 ? -pc : pc; + pc = (p + pc) < 0 ? -(p + pc) : p + pc; +#endif + + p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; + + *dp++ = (png_byte)(((int)*rp++ - p) & 0xff); + } + best_row = png_ptr->paeth_row; + } + + else if (filter_to_do & PNG_FILTER_PAETH) + { + png_bytep rp, dp, pp, cp, lp; + png_uint_32 sum = 0, lmins = mins; + png_uint_32 i; + int v; + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 lmhi, lmlo; + lmlo = lmins & PNG_LOMASK; + lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH) + { + lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >> + PNG_COST_SHIFT; + lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >> + PNG_COST_SHIFT; + + if (lmhi > PNG_HIMASK) + lmins = PNG_MAXSUM; + else + lmins = (lmhi << PNG_HISHIFT) + lmlo; + } +#endif + + for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1, + pp = prev_row + 1; i < bpp; i++) + { + v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff); + + sum += (v < 128) ? v : 256 - v; + } + + for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++) + { + int a, b, c, pa, pb, pc, p; + + b = *pp++; + c = *cp++; + a = *lp++; + +#ifndef PNG_SLOW_PAETH + p = b - c; + pc = a - c; +#ifdef PNG_USE_ABS + pa = abs(p); + pb = abs(pc); + pc = abs(p + pc); +#else + pa = p < 0 ? -p : p; + pb = pc < 0 ? -pc : pc; + pc = (p + pc) < 0 ? -(p + pc) : p + pc; +#endif + p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c; +#else /* PNG_SLOW_PAETH */ + p = a + b - c; + pa = abs(p - a); + pb = abs(p - b); + pc = abs(p - c); + if (pa <= pb && pa <= pc) + p = a; + else if (pb <= pc) + p = b; + else + p = c; +#endif /* PNG_SLOW_PAETH */ + + v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff); + + sum += (v < 128) ? v : 256 - v; + + if (sum > lmins) /* We are already worse, don't continue. */ + break; + } + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED) + { + int j; + png_uint_32 sumhi, sumlo; + sumlo = sum & PNG_LOMASK; + sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; + + for (j = 0; j < num_p_filters; j++) + { + if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH) + { + sumlo = (sumlo * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + sumhi = (sumhi * png_ptr->filter_weights[j]) >> + PNG_WEIGHT_SHIFT; + } + } + + sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >> + PNG_COST_SHIFT; + sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >> + PNG_COST_SHIFT; + + if (sumhi > PNG_HIMASK) + sum = PNG_MAXSUM; + else + sum = (sumhi << PNG_HISHIFT) + sumlo; + } +#endif + + if (sum < mins) + { + best_row = png_ptr->paeth_row; + } + } + + /* Do the actual writing of the filtered row data from the chosen filter. */ + + png_write_filtered_row(png_ptr, best_row); + +#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) + /* Save the type of filter we picked this time for future calculations */ + if (png_ptr->num_prev_filters > 0) + { + int j; + for (j = 1; j < num_p_filters; j++) + { + png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1]; + } + png_ptr->prev_filters[j] = best_row[0]; + } +#endif +} + + +/* Do the actual writing of a previously filtered row. */ +void /* PRIVATE */ +png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row) +{ + png_debug(1, "in png_write_filtered_row\n"); + png_debug1(2, "filter = %d\n", filtered_row[0]); + /* set up the zlib input buffer */ + + png_ptr->zstream.next_in = filtered_row; + png_ptr->zstream.avail_in = (uInt)png_ptr->row_info.rowbytes + 1; + /* repeat until we have compressed all the data */ + do + { + int ret; /* return of zlib */ + + /* compress the data */ + ret = deflate(&png_ptr->zstream, Z_NO_FLUSH); + /* check for compression errors */ + if (ret != Z_OK) + { + if (png_ptr->zstream.msg != NULL) + png_error(png_ptr, png_ptr->zstream.msg); + else + png_error(png_ptr, "zlib error"); + } + + /* see if it is time to write another IDAT */ + if (!(png_ptr->zstream.avail_out)) + { + /* write the IDAT and reset the zlib output buffer */ + png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size); + png_ptr->zstream.next_out = png_ptr->zbuf; + png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; + } + /* repeat until all data has been compressed */ + } while (png_ptr->zstream.avail_in); + + /* swap the current and previous rows */ + if (png_ptr->prev_row != NULL) + { + png_bytep tptr; + + tptr = png_ptr->prev_row; + png_ptr->prev_row = png_ptr->row_buf; + png_ptr->row_buf = tptr; + } + + /* finish row - updates counters and flushes zlib if last row */ + png_write_finish_row(png_ptr); + +#if defined(PNG_WRITE_FLUSH_SUPPORTED) + png_ptr->flush_rows++; + + if (png_ptr->flush_dist > 0 && + png_ptr->flush_rows >= png_ptr->flush_dist) + { + png_write_flush(png_ptr); + } +#endif +} +#endif /* PNG_WRITE_SUPPORTED */ diff --git a/libz/._Makefile b/libz/._Makefile new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._Makefile differ diff --git a/libz/._README b/libz/._README new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._README differ diff --git a/libz/._README_1st b/libz/._README_1st new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._README_1st differ diff --git a/libz/._adler32.c b/libz/._adler32.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._adler32.c differ diff --git a/libz/._compress.c b/libz/._compress.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._compress.c differ diff --git a/libz/._crc32.c b/libz/._crc32.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._crc32.c differ diff --git a/libz/._crc32.h b/libz/._crc32.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._crc32.h differ diff --git a/libz/._deflate.c b/libz/._deflate.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._deflate.c differ diff --git a/libz/._deflate.h b/libz/._deflate.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._deflate.h differ diff --git a/libz/._descrip.mms b/libz/._descrip.mms new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._descrip.mms differ diff --git a/libz/._inffast.c b/libz/._inffast.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inffast.c differ diff --git a/libz/._inffast.h b/libz/._inffast.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inffast.h differ diff --git a/libz/._inffixed.h b/libz/._inffixed.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inffixed.h differ diff --git a/libz/._inflate.c b/libz/._inflate.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inflate.c differ diff --git a/libz/._inflate.h b/libz/._inflate.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inflate.h differ diff --git a/libz/._inftrees.c b/libz/._inftrees.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inftrees.c differ diff --git a/libz/._inftrees.h b/libz/._inftrees.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._inftrees.h differ diff --git a/libz/._testzlib.c b/libz/._testzlib.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._testzlib.c differ diff --git a/libz/._trees.c b/libz/._trees.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._trees.c differ diff --git a/libz/._trees.h b/libz/._trees.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._trees.h differ diff --git a/libz/._uncompr.c b/libz/._uncompr.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._uncompr.c differ diff --git a/libz/._zconf.h b/libz/._zconf.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._zconf.h differ diff --git a/libz/._zlib.h b/libz/._zlib.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._zlib.h differ diff --git a/libz/._zutil.c b/libz/._zutil.c new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._zutil.c differ diff --git a/libz/._zutil.h b/libz/._zutil.h new file mode 100644 index 0000000..e393f96 Binary files /dev/null and b/libz/._zutil.h differ diff --git a/libz/Makefile b/libz/Makefile new file mode 100644 index 0000000..773f3ed --- /dev/null +++ b/libz/Makefile @@ -0,0 +1,27 @@ +CLDFLAGS = +CFLAGS = $(CLDFLAGS) -Wall -O2 +LDFLAGS = + +# macosx universal binary +# CFLAGS= $(CLDFLAGS) -O2 -Wall -arch i386 -arch ppc + +OBJS = adler32.o \ + compress.o \ + crc32.o \ + uncompr.o \ + deflate.o \ + trees.o \ + zutil.o \ + inflate.o \ + inftrees.o \ + inffast.o + +libz.a: $(OBJS) + ar rc libz.a $(OBJS) + -ranlib libz.a + +testzlib: testzlib.o libz.a + cc $(LDFLAGS) -o testzlib testzlib.o libz.a + +clean: + rm -f *.o *.a testzlib diff --git a/libz/README b/libz/README new file mode 100644 index 0000000..df95ae1 --- /dev/null +++ b/libz/README @@ -0,0 +1,126 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.2 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). These documents are also available in other +formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file example.c which also tests that the library +is working correctly. Another example is given in the file minigzip.c. The +compression library itself is composed of all source files except example.c and +minigzip.c. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile. In short "make test; make install" should work for most +machines. For Unix: "./configure; make test; make install" For MSDOS, use one +of the special makefiles such as Makefile.msc. For VMS, use Make_vms.com or +descrip.mms. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, +please check this site to verify that you have the latest version of zlib; +otherwise get the latest version and check whether the problem still exists or +not. + +PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking +for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available in +http://dogma.net/markn/articles/zlibtool/zlibtool.htm + +The changes made in version 1.2.2 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory "contrib". + +A Java implementation of zlib is available in the Java Development Kit +http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html +See the zlib home page http://www.zlib.org for details. + +A Perl interface to zlib written by Paul Marquess is in the +CPAN (Comprehensive Perl Archive Network) sites +http://www.cpan.org/modules/by-module/Compress/ + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://www.python.org/doc/lib/module-zlib.html + +A zlib binding for TCL written by Andreas Kupries is +availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + +- When building a shared, i.e. dynamic library on Mac OS X, the library must be + installed before testing (do "make install" before "make test"), since the + library location is specified in the library. + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. Please +read the FAQ for more information on the distribution of modified source +versions. diff --git a/libz/README_1st b/libz/README_1st new file mode 100644 index 0000000..0056397 --- /dev/null +++ b/libz/README_1st @@ -0,0 +1,4 @@ +Minimal zlib for XEphem. No code files were changed from the original except +to simpilfy the Makefile and add a little standalone test program. + +See the original README for more info. diff --git a/libz/adler32.c b/libz/adler32.c new file mode 100644 index 0000000..ad97c51 --- /dev/null +++ b/libz/adler32.c @@ -0,0 +1,74 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id: adler32.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +#define BASE 65521UL /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +#ifdef NO_DIVIDE +# define MOD(a) \ + do { \ + if (a >= (BASE << 16)) a -= (BASE << 16); \ + if (a >= (BASE << 15)) a -= (BASE << 15); \ + if (a >= (BASE << 14)) a -= (BASE << 14); \ + if (a >= (BASE << 13)) a -= (BASE << 13); \ + if (a >= (BASE << 12)) a -= (BASE << 12); \ + if (a >= (BASE << 11)) a -= (BASE << 11); \ + if (a >= (BASE << 10)) a -= (BASE << 10); \ + if (a >= (BASE << 9)) a -= (BASE << 9); \ + if (a >= (BASE << 8)) a -= (BASE << 8); \ + if (a >= (BASE << 7)) a -= (BASE << 7); \ + if (a >= (BASE << 6)) a -= (BASE << 6); \ + if (a >= (BASE << 5)) a -= (BASE << 5); \ + if (a >= (BASE << 4)) a -= (BASE << 4); \ + if (a >= (BASE << 3)) a -= (BASE << 3); \ + if (a >= (BASE << 2)) a -= (BASE << 2); \ + if (a >= (BASE << 1)) a -= (BASE << 1); \ + if (a >= BASE) a -= BASE; \ + } while (0) +#else +# define MOD(a) a %= BASE +#endif + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int k; + + if (buf == Z_NULL) return 1L; + + while (len > 0) { + k = len < NMAX ? (int)len : NMAX; + len -= k; + while (k >= 16) { + DO16(buf); + buf += 16; + k -= 16; + } + if (k != 0) do { + s1 += *buf++; + s2 += s1; + } while (--k); + MOD(s1); + MOD(s2); + } + return (s2 << 16) | s1; +} diff --git a/libz/compress.c b/libz/compress.c new file mode 100644 index 0000000..650f275 --- /dev/null +++ b/libz/compress.c @@ -0,0 +1,79 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-2002 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id: compress.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; + int level; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; +#ifdef MAXSEG_64K + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +#endif + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + err = deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + deflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = deflateEnd(&stream); + return err; +} + +/* =========================================================================== + */ +int ZEXPORT compress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} + +/* =========================================================================== + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +uLong ZEXPORT compressBound (sourceLen) + uLong sourceLen; +{ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; +} diff --git a/libz/crc32.c b/libz/crc32.c new file mode 100644 index 0000000..cb6ae3b --- /dev/null +++ b/libz/crc32.c @@ -0,0 +1,333 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Thanks to Rodney Brown for his contribution of faster + * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing + * tables for updating the shift register in one step with three exclusive-ors + * instead of four steps with four exclusive-ors. This results about a factor + * of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + */ + +/* @(#) $Id: crc32.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +/* + Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore + protection on the static variables used to control the first-use generation + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + first call get_crc_table() to initialize the tables before allowing more than + one thread to use crc32(). + */ + +#ifdef MAKECRCH +# include +# ifndef DYNAMIC_CRC_TABLE +# define DYNAMIC_CRC_TABLE +# endif /* !DYNAMIC_CRC_TABLE */ +#endif /* MAKECRCH */ + +#include "zutil.h" /* for STDC and FAR definitions */ + +#define local static + +/* Find a four-byte integer type for crc32_little() and crc32_big(). */ +#ifndef NOBYFOUR +# ifdef STDC /* need ANSI C limits.h to determine sizes */ +# include +# define BYFOUR +# if (UINT_MAX == 0xffffffffUL) + typedef unsigned int u4; +# else +# if (ULONG_MAX == 0xffffffffUL) + typedef unsigned long u4; +# else +# if (USHRT_MAX == 0xffffffffUL) + typedef unsigned short u4; +# else +# undef BYFOUR /* can't find a four-byte integer type! */ +# endif +# endif +# endif +# endif /* STDC */ +#endif /* !NOBYFOUR */ + +/* Definitions for doing the crc four data bytes at a time. */ +#ifdef BYFOUR +# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ + (((w)&0xff00)<<8)+(((w)&0xff)<<24)) + local unsigned long crc32_little OF((unsigned long, + const unsigned char FAR *, unsigned)); + local unsigned long crc32_big OF((unsigned long, + const unsigned char FAR *, unsigned)); +# define TBLS 8 +#else +# define TBLS 1 +#endif /* BYFOUR */ + +#ifdef DYNAMIC_CRC_TABLE + +local volatile int crc_table_empty = 1; +local unsigned long FAR crc_table[TBLS][256]; +local void make_crc_table OF((void)); +#ifdef MAKECRCH + local void write_table OF((FILE *, const unsigned long FAR *)); +#endif /* MAKECRCH */ + +/* + Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The first table is simply the CRC of all possible eight bit values. This is + all the information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. The remaining tables + allow for word-at-a-time CRC calculation for both big-endian and little- + endian machines, where a word is four bytes. +*/ +local void make_crc_table() +{ + unsigned long c; + int n, k; + unsigned long poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static volatile int first = 1; /* flag to limit concurrent making */ + static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* See if another task is already doing this (not thread-safe, but better + than nothing -- significantly reduces duration of vulnerability in + case the advice about DYNAMIC_CRC_TABLE is ignored) */ + if (first) { + first = 0; + + /* make exclusive-or pattern from polynomial (0xedb88320UL) */ + poly = 0UL; + for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) + poly |= 1UL << (31 - p[n]); + + /* generate a crc for every 8-bit value */ + for (n = 0; n < 256; n++) { + c = (unsigned long)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[0][n] = c; + } + +#ifdef BYFOUR + /* generate crc for each value followed by one, two, and three zeros, + and then the byte reversal of those as well as the first table */ + for (n = 0; n < 256; n++) { + c = crc_table[0][n]; + crc_table[4][n] = REV(c); + for (k = 1; k < 4; k++) { + c = crc_table[0][c & 0xff] ^ (c >> 8); + crc_table[k][n] = c; + crc_table[k + 4][n] = REV(c); + } + } +#endif /* BYFOUR */ + + crc_table_empty = 0; + } + else { /* not first */ + /* wait for the other guy to finish (not efficient, but rare) */ + while (crc_table_empty) + ; + } + +#ifdef MAKECRCH + /* write out CRC tables to crc32.h */ + { + FILE *out; + + out = fopen("crc32.h", "w"); + if (out == NULL) return; + fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); + fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); + fprintf(out, "local const unsigned long FAR "); + fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); + write_table(out, crc_table[0]); +# ifdef BYFOUR + fprintf(out, "#ifdef BYFOUR\n"); + for (k = 1; k < 8; k++) { + fprintf(out, " },\n {\n"); + write_table(out, crc_table[k]); + } + fprintf(out, "#endif\n"); +# endif /* BYFOUR */ + fprintf(out, " }\n};\n"); + fclose(out); + } +#endif /* MAKECRCH */ +} + +#ifdef MAKECRCH +local void write_table(out, table) + FILE *out; + const unsigned long FAR *table; +{ + int n; + + for (n = 0; n < 256; n++) + fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], + n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); +} +#endif /* MAKECRCH */ + +#else /* !DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + */ +#include "crc32.h" +#endif /* DYNAMIC_CRC_TABLE */ + +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const unsigned long FAR * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + return (const unsigned long FAR *)crc_table; +} + +/* ========================================================================= */ +#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) +#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 + +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + if (buf == Z_NULL) return 0UL; + +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + +#ifdef BYFOUR + if (sizeof(void *) == sizeof(ptrdiff_t)) { + u4 endian; + + endian = 1; + if (*((unsigned char *)(&endian))) + return crc32_little(crc, buf, len); + else + return crc32_big(crc, buf, len); + } +#endif /* BYFOUR */ + crc = crc ^ 0xffffffffUL; + while (len >= 8) { + DO8; + len -= 8; + } + if (len) do { + DO1; + } while (--len); + return crc ^ 0xffffffffUL; +} + +#ifdef BYFOUR + +/* ========================================================================= */ +#define DOLIT4 c ^= *buf4++; \ + c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ + crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] +#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 + +/* ========================================================================= */ +local unsigned long crc32_little(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = (u4)crc; + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + len--; + } + + buf4 = (const u4 FAR *)buf; + while (len >= 32) { + DOLIT32; + len -= 32; + } + while (len >= 4) { + DOLIT4; + len -= 4; + } + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + } while (--len); + c = ~c; + return (unsigned long)c; +} + +/* ========================================================================= */ +#define DOBIG4 c ^= *++buf4; \ + c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ + crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] +#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 + +/* ========================================================================= */ +local unsigned long crc32_big(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = REV((u4)crc); + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + len--; + } + + buf4 = (const u4 FAR *)buf; + buf4--; + while (len >= 32) { + DOBIG32; + len -= 32; + } + while (len >= 4) { + DOBIG4; + len -= 4; + } + buf4++; + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + } while (--len); + c = ~c; + return (unsigned long)(REV(c)); +} + +#endif /* BYFOUR */ diff --git a/libz/crc32.h b/libz/crc32.h new file mode 100644 index 0000000..8053b61 --- /dev/null +++ b/libz/crc32.h @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const unsigned long FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff --git a/libz/deflate.c b/libz/deflate.c new file mode 100644 index 0000000..d611b5c --- /dev/null +++ b/libz/deflate.c @@ -0,0 +1,1502 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2004 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://www.ietf.org/rfc/rfc1951.txt + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id: deflate.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.2.2 Copyright 1995-2004 Jean-loup Gailly "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +#ifndef FASTEST +local block_state deflate_slow OF((deflate_state *s, int flush)); +#endif +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifndef FASTEST +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif +#endif +local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +#ifndef NO_DUMMY_DECL +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ +#endif + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(strm, level, version, stream_size) + z_streamp strm; + int level; + const char *version; + int stream_size; +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + version, stream_size) + z_streamp strm; + int level; + int method; + int windowBits; + int memLevel; + int strategy; + const char *version; + int stream_size; +{ + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_RLE) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->wrap = wrap; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + z_streamp strm; + const Bytef *dictionary; + uInt dictLength; +{ + deflate_state *s; + uInt length = dictLength; + uInt n; + IPos hash_head = 0; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || + strm->state->wrap == 2 || + (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) + return Z_STREAM_ERROR; + + s = strm->state; + if (s->wrap) + strm->adler = adler32(strm->adler, dictionary, dictLength); + + if (length < MIN_MATCH) return Z_OK; + if (length > MAX_DIST(s)) { + length = MAX_DIST(s); +#ifndef USE_DICT_HEAD + dictionary += dictLength - length; /* use the tail of the dictionary */ +#endif + } + zmemcpy(s->window, dictionary, length); + s->strstart = length; + s->block_start = (long)length; + + /* Insert all strings in the hash table (except for the last two bytes). + * s->lookahead stays null, so s->ins_h will be recomputed at the next + * call of fill_window. + */ + s->ins_h = s->window[0]; + UPDATE_HASH(s, s->ins_h, s->window[1]); + for (n = 0; n <= length - MIN_MATCH; n++) { + INSERT_STRING(s, n, hash_head); + } + if (hash_head) hash_head = 0; /* to make compiler happy */ + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + lm_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime (strm, bits, value) + z_streamp strm; + int bits; + int value; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + strm->state->bi_valid = bits; + strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(strm, level, strategy) + z_streamp strm; + int level; + int strategy; +{ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_RLE) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if (func != configuration_table[level].func && strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_PARTIAL_FLUSH); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns + * a close to exact, as well as small, upper bound on the compressed size. + * They are coded as constants here for a reason--if the #define's are + * changed, then this function needs to be changed as well. The return + * value for 15 and 8 only works for those exact settings. + * + * For any setting other than those defaults for windowBits and memLevel, + * the value returned is a conservative worst case for the maximum expansion + * resulting from using fixed blocks instead of stored blocks, which deflate + * can emit on compressed data for some combinations of the parameters. + * + * This function could be more sophisticated to provide closer upper bounds + * for every combination of windowBits and memLevel, as well as wrap. + * But even the conservative upper bound of about 14% expansion does not + * seem onerous for output buffer allocation. + */ +uLong ZEXPORT deflateBound(strm, sourceLen) + z_streamp strm; + uLong sourceLen; +{ + deflate_state *s; + uLong destLen; + + /* conservative upper bound */ + destLen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + + /* if can't get parameters, return conservative bound */ + if (strm == Z_NULL || strm->state == Z_NULL) + return destLen; + + /* if not default parameters, return conservative bound */ + s = strm->state; + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return destLen; + + /* default settings: return tight bound for that case */ + return compressBound(sourceLen); +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (s, b) + deflate_state *s; + uInt b; +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(strm) + z_streamp strm; +{ + unsigned len = strm->state->pending; + + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, strm->state->pending_out, len); + strm->next_out += len; + strm->state->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + strm->state->pending -= len; + if (strm->state->pending == 0) { + strm->state->pending_out = strm->state->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (strm, flush) + z_streamp strm; + int flush; +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the header */ + if (s->status == INIT_STATE) { +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, 255); + s->status = BUSY_STATE; + strm->adler = crc32(0L, Z_NULL, 0); + } + else +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + } + } + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && flush <= old_flush && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (strm) + z_streamp strm; +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (dest, source) + z_streamp dest; + z_streamp source; +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + *dest = *source; + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + *ds = *ss; + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(strm, buf, size) + z_streamp strm; + Bytef *buf; + unsigned size; +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, strm->next_in, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, strm->next_in, len); + } +#endif + zmemcpy(buf, strm->next_in, len); + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (s) + deflate_state *s; +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2: + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} +#endif /* ASMV */ +#endif /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for level == 1 or strategy == Z_RLE only + */ +local uInt longest_match_fast(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* DEBUG */ + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) return; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead >= MIN_MATCH) { + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, eof) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (eof)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, eof) { \ + FLUSH_BLOCK_ONLY(s, eof); \ + if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ +#ifdef FASTEST + if ((s->strategy < Z_HUFFMAN_ONLY) || + (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { + s->match_length = longest_match_fast (s, hash_head); + } +#else + if (s->strategy < Z_HUFFMAN_ONLY) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } +#endif + /* longest_match() or longest_match_fast() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy < Z_HUFFMAN_ONLY) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } + /* longest_match() or longest_match_fast() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif /* FASTEST */ diff --git a/libz/deflate.h b/libz/deflate.h new file mode 100644 index 0000000..f8d04e4 --- /dev/null +++ b/libz/deflate.h @@ -0,0 +1,325 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2002 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id: deflate.h,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define INIT_STATE 42 +#define BUSY_STATE 113 +#define FINISH_STATE 666 +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + int pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + Byte method; /* STORED (for zip only) or DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to supress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + int last_eob_len; /* bit length of EOB code for last block */ + +#ifdef DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + + /* in trees.c */ +void _tr_init OF((deflate_state *s)); +int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); +void _tr_align OF((deflate_state *s)); +void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch _length_code[]; + extern uch _dist_code[]; +#else + extern const uch _length_code[]; + extern const uch _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff --git a/libz/descrip.mms b/libz/descrip.mms new file mode 100644 index 0000000..9e6f8ac --- /dev/null +++ b/libz/descrip.mms @@ -0,0 +1,15 @@ +CC = cc + +OBJS = adler32.obj, \ + compress.obj, \ + crc32.obj, \ + uncompr.obj, \ + deflate.obj, \ + trees.obj, \ + zutil.obj, \ + inflate.obj, \ + inftrees.obj, \ + inffast.obj + +libz.olb : $(OBJS) + lib/crea $@ $? diff --git a/libz/inffast.c b/libz/inffast.c new file mode 100644 index 0000000..8c02a17 --- /dev/null +++ b/libz/inffast.c @@ -0,0 +1,305 @@ +/* inffast.c -- fast decoding + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifndef ASMINF + +/* Allow machine dependent optimization for post-increment or pre-increment. + Based on testing to date, + Pre-increment preferred for: + - PowerPC G3 (Adler) + - MIPS R5000 (Randers-Pehrson) + Post-increment preferred for: + - none + No measurable difference: + - Pentium III (Anderson) + - M68060 (Nikl) + */ +#ifdef POSTINC +# define OFF 0 +# define PUP(a) *(a)++ +#else +# define OFF 1 +# define PUP(a) *++(a) +#endif + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + unsigned char FAR *in; /* local strm->next_in */ + unsigned char FAR *last; /* while in < last, enough input available */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code this; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in - OFF; + last = in + (strm->avail_in - 5); + out = strm->next_out - OFF; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); + wsize = state->wsize; + whave = state->whave; + write = state->write; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = lcode[hold & lmask]; + dolen: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op == 0) { /* literal */ + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + PUP(out) = (unsigned char)(this.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + this = dcode[hold & dmask]; + dodist: + op = (unsigned)(this.bits); + hold >>= op; + bits -= op; + op = (unsigned)(this.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(this.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + from = window - OFF; + if (write == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (write < op) { /* wrap around window */ + from += wsize + write - op; + op -= write; + if (op < len) { /* some from end of window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = window - OFF; + if (write < len) { /* some from start of window */ + op = write; + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += write - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } while (len > 2); + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + this = dcode[this.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + this = lcode[this.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in + OFF; + strm->next_out = out + OFF; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +/* + inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): + - Using bit fields for code structure + - Different op definition to avoid & for extra bits (do & for table bits) + - Three separate decoding do-loops for direct, window, and write == 0 + - Special case for distance > 1 copies to do overlapped load and store copy + - Explicit branch predictions (based on measured branch probabilities) + - Deferring match copy and interspersed it with decoding subsequent codes + - Swapping literal/length else + - Swapping window/direct else + - Larger unrolled copy loops (three is about right) + - Moving len -= 3 statement into middle of loop + */ + +#endif /* !ASMINF */ diff --git a/libz/inffast.h b/libz/inffast.h new file mode 100644 index 0000000..1e88d2d --- /dev/null +++ b/libz/inffast.h @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/libz/inffixed.h b/libz/inffixed.h new file mode 100644 index 0000000..75ed4b5 --- /dev/null +++ b/libz/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. It + is part of the implementation of the compression library and + is subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/libz/inflate.c b/libz/inflate.c new file mode 100644 index 0000000..c6d3826 --- /dev/null +++ b/libz/inflate.c @@ -0,0 +1,1274 @@ +/* inflate.c -- zlib decompression + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * Change history: + * + * 1.2.beta0 24 Nov 2002 + * - First version -- complete rewrite of inflate to simplify code, avoid + * creation of window when not needed, minimize use of window when it is + * needed, make inffast.c even faster, implement gzip decoding, and to + * improve code readability and style over the previous zlib inflate code + * + * 1.2.beta1 25 Nov 2002 + * - Use pointers for available input and output checking in inffast.c + * - Remove input and output counters in inffast.c + * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 + * - Remove unnecessary second byte pull from length extra in inffast.c + * - Unroll direct copy to three copies per loop in inffast.c + * + * 1.2.beta2 4 Dec 2002 + * - Change external routine names to reduce potential conflicts + * - Correct filename to inffixed.h for fixed tables in inflate.c + * - Make hbuf[] unsigned char to match parameter type in inflate.c + * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) + * to avoid negation problem on Alphas (64 bit) in inflate.c + * + * 1.2.beta3 22 Dec 2002 + * - Add comments on state->bits assertion in inffast.c + * - Add comments on op field in inftrees.h + * - Fix bug in reuse of allocated window after inflateReset() + * - Remove bit fields--back to byte structure for speed + * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths + * - Change post-increments to pre-increments in inflate_fast(), PPC biased? + * - Add compile time option, POSTINC, to use post-increments instead (Intel?) + * - Make MATCH copy in inflate() much faster for when inflate_fast() not used + * - Use local copies of stream next and avail values, as well as local bit + * buffer and bit count in inflate()--for speed when inflate_fast() not used + * + * 1.2.beta4 1 Jan 2003 + * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings + * - Move a comment on output buffer sizes from inffast.c to inflate.c + * - Add comments in inffast.c to introduce the inflate_fast() routine + * - Rearrange window copies in inflate_fast() for speed and simplification + * - Unroll last copy for window match in inflate_fast() + * - Use local copies of window variables in inflate_fast() for speed + * - Pull out common write == 0 case for speed in inflate_fast() + * - Make op and len in inflate_fast() unsigned for consistency + * - Add FAR to lcode and dcode declarations in inflate_fast() + * - Simplified bad distance check in inflate_fast() + * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new + * source file infback.c to provide a call-back interface to inflate for + * programs like gzip and unzip -- uses window as output buffer to avoid + * window copying + * + * 1.2.beta5 1 Jan 2003 + * - Improved inflateBack() interface to allow the caller to provide initial + * input in strm. + * - Fixed stored blocks bug in inflateBack() + * + * 1.2.beta6 4 Jan 2003 + * - Added comments in inffast.c on effectiveness of POSTINC + * - Typecasting all around to reduce compiler warnings + * - Changed loops from while (1) or do {} while (1) to for (;;), again to + * make compilers happy + * - Changed type of window in inflateBackInit() to unsigned char * + * + * 1.2.beta7 27 Jan 2003 + * - Changed many types to unsigned or unsigned short to avoid warnings + * - Added inflateCopy() function + * + * 1.2.0 9 Mar 2003 + * - Changed inflateBack() interface to provide separate opaque descriptors + * for the in() and out() functions + * - Changed inflateBack() argument and in_func typedef to swap the length + * and buffer address return values for the input function + * - Check next_in and next_out for Z_NULL on entry to inflate() + * + * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); +local int updatewindow OF((z_streamp strm, unsigned out)); +#ifdef BUILDFIXED + void makefixed OF((void)); +#endif +local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, + unsigned len)); + +int ZEXPORT inflateReset(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + strm->adler = 1; /* to support ill-conceived Java test suite */ + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->wsize = 0; + state->whave = 0; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) +z_streamp strm; +int windowBits; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL) return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (voidpf)state; + if (windowBits < 0) { + state->wrap = 0; + windowBits = -windowBits; + } + else { + state->wrap = (windowBits >> 4) + 1; +#ifdef GUNZIP + if (windowBits < 48) windowBits &= 15; +#endif + } + if (windowBits < 8 || windowBits > 15) { + ZFREE(strm, state); + strm->state = Z_NULL; + return Z_STREAM_ERROR; + } + state->wbits = (unsigned)windowBits; + state->window = Z_NULL; + return inflateReset(strm); +} + +int ZEXPORT inflateInit_(strm, version, stream_size) +z_streamp strm; +const char *version; +int stream_size; +{ + return inflateInit2_(strm, DEF_WBITS, version, stream_size); +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also + defines BUILDFIXED, so the tables are built on the fly. makefixed() writes + those tables to stdout, which would be piped to inffixed.h. A small program + can simply call makefixed to do this: + + void makefixed(void); + + int main(void) + { + makefixed(); + return 0; + } + + Then that can be linked with zlib built with MAKEFIXED defined and run: + + a.out > inffixed.h + */ +void makefixed() +{ + unsigned low, size; + struct inflate_state state; + + fixedtables(&state); + puts(" /* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits, + state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +local int updatewindow(strm, out) +z_streamp strm; +unsigned out; +{ + struct inflate_state FAR *state; + unsigned copy, dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->write = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + copy = out - strm->avail_out; + if (copy >= state->wsize) { + zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); + state->write = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->write; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->write, strm->next_out - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, strm->next_out - copy, copy); + state->write = copy; + state->whave = state->wsize; + } + else { + state->write += dist; + if (state->write == state->wsize) state->write = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Reverse the bytes in a 32-bit value */ +#define REVERSE(q) \ + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int ZEXPORT inflate(strm, flush) +z_streamp strm; +int flush; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code this; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + if (BITS(4) + 8 > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->flags & 0x0200) CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + } + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + } while (len && copy < have); + if (state->flags & 0x02000) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + } while (len && copy < have); + if (state->flags & 0x02000) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if (hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = REVERSE(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.val < 16) { + NEEDBITS(this.bits); + DROPBITS(this.bits); + state->lens[state->have++] = this.val; + } + else { + if (this.val == 16) { + NEEDBITS(this.bits + 2); + DROPBITS(this.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (this.val == 17) { + NEEDBITS(this.bits + 3); + DROPBITS(this.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(this.bits + 7); + DROPBITS(this.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* build code tables */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + break; + } + for (;;) { + this = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if (this.op && (this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + state->length = (unsigned)this.val; + if ((int)(this.op) == 0) { + Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", this.val)); + state->mode = LIT; + break; + } + if (this.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + if (this.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(this.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->mode = DIST; + case DIST: + for (;;) { + this = state->distcode[BITS(state->distbits)]; + if ((unsigned)(this.bits) <= bits) break; + PULLBYTE(); + } + if ((this.op & 0xf0) == 0) { + last = this; + for (;;) { + this = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + this.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(this.bits); + if (this.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)this.val; + state->extra = (unsigned)(this.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } + if (state->offset > state->whave + out - left) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->write) { + copy -= state->write; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->write - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if (out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if (( +#ifdef GUNZIP + state->flags ? hold : +#endif + REVERSE(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) + if (updatewindow(strm, out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if (state->wrap && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int ZEXPORT inflateEnd(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + +int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) +z_streamp strm; +const Bytef *dictionary; +uInt dictLength; +{ + struct inflate_state FAR *state; + unsigned long id; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->mode != DICT) return Z_STREAM_ERROR; + + /* check for correct dictionary id */ + id = adler32(0L, Z_NULL, 0); + id = adler32(id, dictionary, dictLength); + if (id != state->check) return Z_DATA_ERROR; + + /* copy dictionary to window */ + if (updatewindow(strm, strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + if (dictLength > state->wsize) { + zmemcpy(state->window, dictionary + dictLength - state->wsize, + state->wsize); + state->whave = state->wsize; + } + else { + zmemcpy(state->window + state->wsize - dictLength, dictionary, + dictLength); + state->whave = dictLength; + } + state->havedict = 1; + Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +/* + Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found + or when out of input. When called, *have is the number of pattern bytes + found in order so far, in 0..3. On return *have is updated to the new + state. If on return *have equals four, then the pattern was found and the + return value is how many bytes were read including the last byte of the + pattern. If *have is less than four, then the pattern has not been found + yet and the return value is len. In the latter case, syncsearch() can be + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +local unsigned syncsearch(have, buf, len) +unsigned FAR *have; +unsigned char FAR *buf; +unsigned len; +{ + unsigned got; + unsigned next; + + got = *have; + next = 0; + while (next < len && got < 4) { + if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + got++; + else if (buf[next]) + got = 0; + else + got = 4 - got; + next++; + } + *have = got; + return next; +} + +int ZEXPORT inflateSync(strm) +z_streamp strm; +{ + unsigned len; /* number of bytes to look at or looked at */ + unsigned long in, out; /* temporary to save total_in and total_out */ + unsigned char buf[4]; /* to restore bit buffer to byte string */ + struct inflate_state FAR *state; + + /* check parameters */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; + state->hold <<= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { + buf[len++] = (unsigned char)(state->hold); + state->hold >>= 8; + state->bits -= 8; + } + state->have = 0; + syncsearch(&(state->have), buf, len); + } + + /* search available input */ + len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + strm->avail_in -= len; + strm->next_in += len; + strm->total_in += len; + + /* return no joy or set up to restart inflate() on a new block */ + if (state->have != 4) return Z_DATA_ERROR; + in = strm->total_in; out = strm->total_out; + inflateReset(strm); + strm->total_in = in; strm->total_out = out; + state->mode = TYPE; + return Z_OK; +} + +/* + Returns true if inflate is currently at the end of a block generated by + Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + implementation to provide an additional safety check. PPP uses + Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; +} + +int ZEXPORT inflateCopy(dest, source) +z_streamp dest; +z_streamp source; +{ + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; + + /* check input */ + if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || + source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)source->state; + + /* allocate space */ + copy = (struct inflate_state FAR *) + ZALLOC(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) + ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { + ZFREE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + *dest = *source; + *copy = *state; + copy->lencode = copy->codes + (state->lencode - state->codes); + copy->distcode = copy->codes + (state->distcode - state->codes); + copy->next = copy->codes + (state->next - state->codes); + if (window != Z_NULL) + zmemcpy(window, state->window, 1U << state->wbits); + copy->window = window; + dest->state = (voidpf)copy; + return Z_OK; +} diff --git a/libz/inflate.h b/libz/inflate.h new file mode 100644 index 0000000..9a12c8f --- /dev/null +++ b/libz/inflate.h @@ -0,0 +1,117 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD, /* i: waiting for magic header */ +#ifdef GUNZIP + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ +#endif + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN, /* i: waiting for length/lit code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ +#ifdef GUNZIP + LENGTH, /* i: waiting for 32-bit length (gzip) */ +#endif + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to the BAD or MEM mode -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME + NAME -> COMMENT -> HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + Read deflate blocks: + TYPE -> STORED or TABLE or LEN or CHECK + STORED -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN + Read deflate codes: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* state maintained between inflate() calls. Approximately 7K bytes. */ +struct inflate_state { + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ +}; diff --git a/libz/inftrees.c b/libz/inftrees.c new file mode 100644 index 0000000..8a896b2 --- /dev/null +++ b/libz/inftrees.c @@ -0,0 +1,328 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2004 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#define MAXBITS 15 + +const char inflate_copyright[] = + " inflate 1.2.2 Copyright 1995-2004 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int inflate_table(type, lens, codes, table, bits, work) +codetype type; +unsigned short FAR *lens; +unsigned codes; +code FAR * FAR *table; +unsigned FAR *bits; +unsigned short FAR *work; +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code this; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 198}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)1; + this.val = (unsigned short)0; + *(*table)++ = this; /* make a table to force an error */ + *(*table)++ = this; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min <= MAXBITS; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || (codes - count[0] != 1))) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked when a LENS table is being made + against the space in *table, ENOUGH, minus the maximum space needed by + the worst case distance code, MAXD. This should never happen, but the + sufficiency of ENOUGH has not been proven exhaustively, hence the check. + This assumes that when type == LENS, bits == 9. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + this.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + this.op = (unsigned char)0; + this.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + this.op = (unsigned char)(extra[work[sym]]); + this.val = base[work[sym]]; + } + else { + this.op = (unsigned char)(32 + 64); /* end of block */ + this.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + do { + fill -= incr; + next[(huff >> drop) + fill] = this; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += 1U << curr; + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if (type == LENS && used >= ENOUGH - MAXD) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* + Fill in rest of table for incomplete codes. This loop is similar to the + loop above in incrementing huff for table indices. It is assumed that + len is equal to curr + drop, so there is no loop needed to increment + through high index bits. When the current sub-table is filled, the loop + drops back to the root table to fill in any remaining entries there. + */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)(len - drop); + this.val = (unsigned short)0; + while (huff != 0) { + /* when done with sub-table, drop back to root table */ + if (drop != 0 && (huff & mask) != low) { + drop = 0; + len = root; + next = *table; + this.bits = (unsigned char)len; + } + + /* put invalid code marker in table */ + next[huff >> drop] = this; + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/libz/inftrees.h b/libz/inftrees.h new file mode 100644 index 0000000..82d365a --- /dev/null +++ b/libz/inftrees.h @@ -0,0 +1,55 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of dynamic tree. The maximum found in a long but non- + exhaustive search was 1004 code structures (850 for length/literals + and 154 for distances, the latter actually the result of an + exhaustive search). The true maximum is not known, but the value + below is more than safe. */ +#define ENOUGH 1440 +#define MAXD 154 + +/* Type of code to build for inftable() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +extern int inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/libz/testzlib.c b/libz/testzlib.c new file mode 100644 index 0000000..eda9b3d --- /dev/null +++ b/libz/testzlib.c @@ -0,0 +1,48 @@ +/* test compress and uncompress: read stdin, compress, uncompress, compare. + */ + +#include +#include +#include + +#include "zlib.h" + +int +main (int ac, char *av[]) +{ + Byte *raw, *comp, *uncomp; + uLong nraw, ncomp, nuncomp; + int n; + + /* read stdin to EOF */ + raw = malloc (4096); + nraw = 0; + while ((n = fread (raw+nraw, 1, 4096, stdin)) > 0) + raw = realloc (raw, (nraw+=n) + 4096); + + /* compress */ + comp = malloc (nraw); + ncomp = nraw; + if ((n = compress (comp, &ncomp, raw, nraw)) != Z_OK) { + fprintf (stderr, "compress returned %d\n", n); + exit(1); + } + + /* uncompress */ + uncomp = malloc (nraw); + nuncomp = nraw; + if ((n = uncompress (uncomp, &nuncomp, comp, ncomp)) != Z_OK) { + fprintf (stderr, "uncompress returned %d\n", n); + exit(1); + } + + /* compare */ + if (memcmp (raw, uncomp, nraw)) { + fprintf (stderr, "Compare failed\n"); + exit(1); + } + + /* success */ + printf ("Compression ratio %g\n", 100.0 * ncomp / nraw); + return (0); +} diff --git a/libz/trees.c b/libz/trees.c new file mode 100644 index 0000000..3dad468 --- /dev/null +++ b/libz/trees.c @@ -0,0 +1,1215 @@ +/* trees.c -- output deflated data using Huffman coding + * Copyright (C) 1995-2003 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process uses several Huffman trees. The more + * common source values are represented by shorter bit sequences. + * + * Each code tree is stored in a compressed form which is itself + * a Huffman encoding of the lengths of all the code strings (in + * ascending order by source values). The actual code strings are + * reconstructed from the lengths in the inflate process, as described + * in the deflate specification. + * + * REFERENCES + * + * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". + * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc + * + * Storer, James A. + * Data Compression: Methods and Theory, pp. 49-50. + * Computer Science Press, 1988. ISBN 0-7167-8156-5. + * + * Sedgewick, R. + * Algorithms, p290. + * Addison-Wesley, 1983. ISBN 0-201-06672-6. + */ + +/* @(#) $Id: trees.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +/* #define GEN_TREES_H */ + +#include "deflate.h" + +#ifdef DEBUG +# include +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +#define Buf_size (8 * 2*sizeof(char)) +/* Number of bits used within bi_buf. (bi_buf might be implemented on + * more than 16 bits on some systems.) + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +local static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Local (static) routines in this file. + */ + +local void tr_static_init OF((void)); +local void init_block OF((deflate_state *s)); +local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +local void build_tree OF((deflate_state *s, tree_desc *desc)); +local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local int build_bl_tree OF((deflate_state *s)); +local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + int blcodes)); +local void compress_block OF((deflate_state *s, ct_data *ltree, + ct_data *dtree)); +local void set_data_type OF((deflate_state *s)); +local unsigned bi_reverse OF((unsigned value, int length)); +local void bi_windup OF((deflate_state *s)); +local void bi_flush OF((deflate_state *s)); +local void copy_block OF((deflate_state *s, charf *buf, unsigned len, + int header)); + +#ifdef GEN_TREES_H +local void gen_trees_header OF((void)); +#endif + +#ifndef DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef DEBUG +local void send_bits OF((deflate_state *s, int value, int length)); + +local void send_bits(s, value, length) + deflate_state *s; + int value; /* value to send */ + int length; /* number of bits */ +{ + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (value << s->bi_valid); + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = value;\ + s->bi_buf |= (val << s->bi_valid);\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* DEBUG */ + + +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init() +{ +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Genererate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width)-1 ? ",\n" : ", ")) + +void gen_trees_header() +{ + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void _tr_init(s) + deflate_state *s; +{ + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; + s->last_eob_len = 8; /* enough lookahead for inflate */ +#ifdef DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(s) + deflate_state *s; +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(s, tree, k) + deflate_state *s; + ct_data *tree; /* the tree to restore */ + int k; /* node to move down */ +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(s, desc) + deflate_state *s; + tree_desc *desc; /* the tree descriptor */ +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (bits + xbits); + if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + } + if (overflow == 0) return; + + Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if (tree[m].Len != (unsigned) bits) { + Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((long)bits - (long)tree[m].Len) + *(long)tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes (tree, max_code, bl_count) + ct_data *tree; /* the tree to decorate */ + int max_code; /* largest code with non zero frequency */ + ushf *bl_count; /* number of codes at each bit length */ +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits-1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(s) + deflate_state *s; +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*(max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(s, lcodes, dcodes, blcodes) + deflate_state *s; + int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void _tr_stored_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ +#ifdef DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; +#endif + copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + * The current inflate code requires 9 bits of lookahead. If the + * last two codes for the previous block (real code plus EOB) were coded + * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + * the last real code. In this case we send two empty static blocks instead + * of one. (There are no problems if the previous block is stored or fixed.) + * To simplify the code, we assume the worst case of last real code encoded + * on one bit only. + */ +void _tr_align(s) + deflate_state *s; +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); + /* Of the 10 bits for the empty block, we have already sent + * (10 - bi_valid) bits. The lookahead for the last real code (before + * the EOB of the previous block) was thus at least one plus the length + * of the EOB plus what we have just sent of the empty static block. + */ + if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; +#endif + bi_flush(s); + } + s->last_eob_len = 7; +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +void _tr_flush_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is ascii or binary */ + if (s->strm->data_type == Z_UNKNOWN) set_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, eof); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+eof, 3); + compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+eof, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (eof) { + bi_windup(s); +#ifdef DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*eof)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int _tr_tally (s, dist, lc) + deflate_state *s; + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + s->d_buf[s->last_lit] = (ush)dist; + s->l_buf[s->last_lit++] = (uch)lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + +#ifdef TRUNCATE_BLOCK + /* Try to guess if it is profitable to stop the current block here */ + if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { + /* Compute an upper bound for the compressed length */ + ulg out_length = (ulg)s->last_lit*8L; + ulg in_length = (ulg)((long)s->strstart - s->block_start); + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (ulg)s->dyn_dtree[dcode].Freq * + (5L+extra_dbits[dcode]); + } + out_length >>= 3; + Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + s->last_lit, in_length, out_length, + 100L - out_length*100L/in_length)); + if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; + } +#endif + return (s->last_lit == s->lit_bufsize-1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(s, ltree, dtree) + deflate_state *s; + ct_data *ltree; /* literal tree */ + ct_data *dtree; /* distance tree */ +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); + s->last_eob_len = ltree[END_BLOCK].Len; +} + +/* =========================================================================== + * Set the data type to ASCII or BINARY, using a crude approximation: + * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. + * IN assertion: the fields freq of dyn_ltree are set and the total of all + * frequencies does not exceed 64K (to fit in an int on 16 bit machines). + */ +local void set_data_type(s) + deflate_state *s; +{ + int n = 0; + unsigned ascii_freq = 0; + unsigned bin_freq = 0; + while (n < 7) bin_freq += s->dyn_ltree[n++].Freq; + while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq; + while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; + s->strm->data_type = bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(s) + deflate_state *s; +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(s) + deflate_state *s; +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +local void copy_block(s, buf, len, header) + deflate_state *s; + charf *buf; /* the input data */ + unsigned len; /* its length */ + int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + s->last_eob_len = 8; /* enough lookahead for inflate */ + + if (header) { + put_short(s, (ush)len); + put_short(s, (ush)~len); +#ifdef DEBUG + s->bits_sent += 2*16; +#endif + } +#ifdef DEBUG + s->bits_sent += (ulg)len<<3; +#endif + while (len--) { + put_byte(s, *buf++); + } +} diff --git a/libz/trees.h b/libz/trees.h new file mode 100644 index 0000000..72facf9 --- /dev/null +++ b/libz/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/libz/uncompr.c b/libz/uncompr.c new file mode 100644 index 0000000..c9da61c --- /dev/null +++ b/libz/uncompr.c @@ -0,0 +1,61 @@ +/* uncompr.c -- decompress a memory buffer + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id: uncompr.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted. +*/ +int ZEXPORT uncompress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; + + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + + err = inflateInit(&stream); + if (err != Z_OK) return err; + + err = inflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + inflateEnd(&stream); + if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) + return Z_DATA_ERROR; + return err; + } + *destLen = stream.total_out; + + err = inflateEnd(&stream); + return err; +} diff --git a/libz/zconf.h b/libz/zconf.h new file mode 100644 index 0000000..9887874 --- /dev/null +++ b/libz/zconf.h @@ -0,0 +1,326 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2004 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id: zconf.h,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +# define WIN32 +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/libz/zlib.h b/libz/zlib.h new file mode 100644 index 0000000..b4ddd34 --- /dev/null +++ b/libz/zlib.h @@ -0,0 +1,1200 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.2, October 3rd, 2004 + + Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.2" +#define ZLIB_VERNUM 0x1220 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: ascii or binary */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_ASCII 1 +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + the compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update data_type if it can make a good guess about + the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it get to the next deflate block boundary. When decoding the zlib + or gzip format, this will cause inflate() to return immediately after the + header and before the first block. When doing a raw inflate, inflate() will + go ahead and process the first block, and will return when it gets to the end + of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR. If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative + memLevel). msg is set to null if there is no error message. inflateInit2 + does not perform any decompression apart from reading the zlib header if + present: this will be done by inflate(). (So next_in and avail_in may be + modified, but next_out and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate + if this call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by this call of + inflate. The compressor and decompressor must use exactly the same + dictionary (see deflateSetDictionary). + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_stream FAR *strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_stream FAR *strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_stream FAR *strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); + +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running crc with the bytes buf[0..len-1] and return the updated + crc. If buf is NULL, this function returns the required initial value + for the crc. Pre- and post-conditioning (one's complement) is performed + within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_stream FAR *strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/libz/zutil.c b/libz/zutil.c new file mode 100644 index 0000000..9afaecc --- /dev/null +++ b/libz/zutil.c @@ -0,0 +1,319 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id: zutil.c,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#include "zutil.h" + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +#ifndef STDC +extern void exit OF((int)); +#endif + +const char * const z_errmsg[10] = { +"need dictionary", /* Z_NEED_DICT 2 */ +"stream end", /* Z_STREAM_END 1 */ +"", /* Z_OK 0 */ +"file error", /* Z_ERRNO (-1) */ +"stream error", /* Z_STREAM_ERROR (-2) */ +"data error", /* Z_DATA_ERROR (-3) */ +"insufficient memory", /* Z_MEM_ERROR (-4) */ +"buffer error", /* Z_BUF_ERROR (-5) */ +"incompatible version",/* Z_VERSION_ERROR (-6) */ +""}; + + +const char * ZEXPORT zlibVersion() +{ + return ZLIB_VERSION; +} + +uLong ZEXPORT zlibCompileFlags() +{ + uLong flags; + + flags = 0; + switch (sizeof(uInt)) { + case 2: break; + case 4: flags += 1; break; + case 8: flags += 2; break; + default: flags += 3; + } + switch (sizeof(uLong)) { + case 2: break; + case 4: flags += 1 << 2; break; + case 8: flags += 2 << 2; break; + default: flags += 3 << 2; + } + switch (sizeof(voidpf)) { + case 2: break; + case 4: flags += 1 << 4; break; + case 8: flags += 2 << 4; break; + default: flags += 3 << 4; + } + switch (sizeof(z_off_t)) { + case 2: break; + case 4: flags += 1 << 6; break; + case 8: flags += 2 << 6; break; + default: flags += 3 << 6; + } +#ifdef DEBUG + flags += 1 << 8; +#endif +#if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; +#endif +#ifdef ZLIB_WINAPI + flags += 1 << 10; +#endif +#ifdef BUILDFIXED + flags += 1 << 12; +#endif +#ifdef DYNAMIC_CRC_TABLE + flags += 1 << 13; +#endif +#ifdef NO_GZCOMPRESS + flags += 1 << 16; +#endif +#ifdef NO_GZIP + flags += 1 << 17; +#endif +#ifdef PKZIP_BUG_WORKAROUND + flags += 1 << 20; +#endif +#ifdef FASTEST + flags += 1 << 21; +#endif +#ifdef STDC +# ifdef NO_vsnprintf + flags += 1 << 25; +# ifdef HAS_vsprintf_void + flags += 1 << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1 << 26; +# endif +# endif +#else + flags += 1 << 24; +# ifdef NO_snprintf + flags += 1 << 25; +# ifdef HAS_sprintf_void + flags += 1 << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1 << 26; +# endif +# endif +#endif + return flags; +} + +#ifdef DEBUG + +# ifndef verbose +# define verbose 0 +# endif +int z_verbose = verbose; + +void z_error (m) + char *m; +{ + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(err) + int err; +{ + return ERR_MSG(err); +} + +#if defined(_WIN32_WCE) + /* does not exist on WCE */ + int errno = 0; +#endif + +#ifndef HAVE_MEMCPY + +void zmemcpy(dest, source, len) + Bytef* dest; + const Bytef* source; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int zmemcmp(s1, s2, len) + const Bytef* s1; + const Bytef* s2; + uInt len; +{ + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void zmemzero(dest, len) + Bytef* dest; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + + +#ifdef SYS16BIT + +#ifdef __TURBOC__ +/* Turbo C in 16-bit mode */ + +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + voidpf buf = opaque; /* just to make some compilers happy */ + ulg bsize = (ulg)items*size; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + int n; + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + ptr = opaque; /* just to make some compilers happy */ + Assert(0, "zcfree: ptr not found"); +} + +#endif /* __TURBOC__ */ + + +#ifdef M_I86 +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + return _halloc((long)items, size); +} + +void zcfree (voidpf opaque, voidpf ptr) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + _hfree(ptr); +} + +#endif /* M_I86 */ + +#endif /* SYS16BIT */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern voidp calloc OF((uInt items, uInt size)); +extern void free OF((voidpf ptr)); +#endif + +voidpf zcalloc (opaque, items, size) + voidpf opaque; + unsigned items; + unsigned size; +{ + if (opaque) items += size - size; /* make compiler happy */ + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); +} + +void zcfree (opaque, ptr) + voidpf opaque; + voidpf ptr; +{ + free(ptr); + if (opaque) return; /* make compiler happy */ +} + +#endif /* MY_ZCALLOC */ diff --git a/libz/zutil.h b/libz/zutil.h new file mode 100644 index 0000000..098ce01 --- /dev/null +++ b/libz/zutil.h @@ -0,0 +1,263 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id: zutil.h,v 1.1 2005/03/03 02:41:00 ecdowney Exp $ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#define ZLIB_INTERNAL +#include "zlib.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#ifdef WIN32 +# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ +# define OS_CODE 0x0b +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0f +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS + /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 + /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# define vsnprintf _vsnprintf +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +#endif +#ifdef VMS +# define NO_vsnprintf +#endif + +#ifdef HAVE_STRERROR +# ifndef VMS + extern char *strerror OF((int)); +# endif +# define zstrerror(errnum) strerror(errnum) +#else +# define zstrerror(errnum) "" +#endif + +#if defined(pyr) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + extern void zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int z_verbose; + extern void z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + + +voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); +void zcfree OF((voidpf opaque, voidpf ptr)); + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* ZUTIL_H */